mastra 1.8.2-alpha.2 → 1.9.0-alpha.10
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 +237 -0
- package/dist/analytics/index.d.ts +1 -1
- package/dist/analytics/index.d.ts.map +1 -1
- package/dist/analytics/index.js +1 -1
- package/dist/{chunk-5AV57UDP.js → chunk-4YMG3NUR.js} +9 -6
- package/dist/chunk-4YMG3NUR.js.map +1 -0
- package/dist/{chunk-SDL4FTWG.js → chunk-SNSX7USI.js} +4 -4
- package/dist/chunk-SNSX7USI.js.map +1 -0
- package/dist/commands/api/client.d.ts +17 -0
- package/dist/commands/api/client.d.ts.map +1 -0
- package/dist/commands/api/errors.d.ts +15 -0
- package/dist/commands/api/errors.d.ts.map +1 -0
- package/dist/commands/api/headers.d.ts +2 -0
- package/dist/commands/api/headers.d.ts.map +1 -0
- package/dist/commands/api/index.d.ts +15 -0
- package/dist/commands/api/index.d.ts.map +1 -0
- package/dist/commands/api/input.d.ts +8 -0
- package/dist/commands/api/input.d.ts.map +1 -0
- package/dist/commands/api/normalizers.d.ts +3 -0
- package/dist/commands/api/normalizers.d.ts.map +1 -0
- package/dist/commands/api/output.d.ts +17 -0
- package/dist/commands/api/output.d.ts.map +1 -0
- package/dist/commands/api/response-normalizer.d.ts +2 -0
- package/dist/commands/api/response-normalizer.d.ts.map +1 -0
- package/dist/commands/api/route-metadata.generated.d.ts +3419 -0
- package/dist/commands/api/route-metadata.generated.d.ts.map +1 -0
- package/dist/commands/api/schema.d.ts +6 -0
- package/dist/commands/api/schema.d.ts.map +1 -0
- package/dist/commands/api/target.d.ts +14 -0
- package/dist/commands/api/target.d.ts.map +1 -0
- package/dist/commands/api/types.d.ts +37 -0
- package/dist/commands/api/types.d.ts.map +1 -0
- package/dist/commands/create/create.js +2 -2
- package/dist/commands/lint/rules/nextConfigRule.d.ts.map +1 -1
- package/dist/commands/worker/WorkerBundler.d.ts +13 -0
- package/dist/commands/worker/WorkerBundler.d.ts.map +1 -0
- package/dist/commands/worker/build.d.ts +8 -0
- package/dist/commands/worker/build.d.ts.map +1 -0
- package/dist/commands/worker/dev.d.ts +12 -0
- package/dist/commands/worker/dev.d.ts.map +1 -0
- package/dist/commands/worker/start.d.ts +8 -0
- package/dist/commands/worker/start.d.ts.map +1 -0
- package/dist/docs/SKILL.md +1 -1
- package/dist/docs/assets/SOURCE_MAP.json +3 -3
- package/dist/docs/references/reference-cli-mastra.md +464 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6805 -562
- package/dist/index.js.map +1 -1
- package/dist/studio/assets/{index-BmR9ljo2.js → index-1w0CoNz7.js} +1 -1
- package/dist/studio/assets/{index-DAO3kR5r.js → index-7KxycuDy.js} +1 -1
- package/dist/studio/assets/{index-u_lqiE2u.js → index-BBSyUe4D.js} +1 -1
- package/dist/studio/assets/{index-CaD7ddjV.js → index-BGeJEETl.js} +1 -1
- package/dist/studio/assets/{index-mTon5-ys.js → index-BRp5SBDW.js} +1 -1
- package/dist/studio/assets/{index-BPGtLMXv.js → index-BbnGged9.js} +1 -1
- package/dist/studio/assets/{index-CdggTBzd.js → index-BeBO6AD3.js} +1 -1
- package/dist/studio/assets/{index-DI9zd2Nn.js → index-BeIfIUXA.js} +1 -1
- package/dist/studio/assets/{index-DNHDjLYs.js → index-Bp5gOU_R.js} +1 -1
- package/dist/studio/assets/{index-DZf7g_uc.js → index-C9IGdsnM.js} +1 -1
- package/dist/studio/assets/{index-Cmdv7FN5.js → index-CgzZLf2f.js} +1 -1
- package/dist/studio/assets/{index-DBAgKJUH.js → index-CjX50oBt.js} +1 -1
- package/dist/studio/assets/{index-ZpLrnVFB.js → index-CyYEhDvQ.js} +1 -1
- package/dist/studio/assets/{index-CQWUz_Ua.js → index-DHX03B1c.js} +1 -1
- package/dist/studio/assets/{index-BiigrE1w.js → index-DVmsHjar.js} +1 -1
- package/dist/studio/assets/{index-LVEEbtZn.js → index-JARgE6F3.js} +1 -1
- package/dist/studio/assets/{index-DX5l222Z.js → index-UBnGYt9H.js} +1 -1
- package/dist/studio/assets/{index-DNfvq-Ph.js → index-eGMx7C0c.js} +1 -1
- package/dist/studio/assets/{main-DqVfM6wN.js → main-I4Mv6QDZ.js} +239 -230
- package/dist/studio/assets/style-OvE4uHX1.css +1 -0
- package/dist/studio/index.html +2 -2
- package/package.json +9 -6
- package/dist/chunk-5AV57UDP.js.map +0 -1
- package/dist/chunk-SDL4FTWG.js.map +0 -1
- package/dist/studio/assets/style-2Gc7zkTG.css +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,242 @@
|
|
|
1
1
|
# mastra
|
|
2
2
|
|
|
3
|
+
## 1.9.0-alpha.10
|
|
4
|
+
|
|
5
|
+
## 1.9.0-alpha.9
|
|
6
|
+
|
|
7
|
+
### Patch Changes
|
|
8
|
+
|
|
9
|
+
- Updated dependencies [[`5688881`](https://github.com/mastra-ai/mastra/commit/5688881669c7ed157f31ac77f6fc5f8d95ceea32)]:
|
|
10
|
+
- @mastra/core@1.33.0-alpha.9
|
|
11
|
+
- @mastra/deployer@1.33.0-alpha.9
|
|
12
|
+
|
|
13
|
+
## 1.9.0-alpha.8
|
|
14
|
+
|
|
15
|
+
### Patch Changes
|
|
16
|
+
|
|
17
|
+
- Updated dependencies [[`7c275a8`](https://github.com/mastra-ai/mastra/commit/7c275a810595e1a6c41ccc39720531ab65734700), [`890b24c`](https://github.com/mastra-ai/mastra/commit/890b24cc7d32ed6aa4dfe253e54dc6bf4099f690), [`0f48ebf`](https://github.com/mastra-ai/mastra/commit/0f48ebfc7ac7897b2092a189f45751924cf56d1c), [`f180e49`](https://github.com/mastra-ai/mastra/commit/f180e4990e71b04c9a475b523584071712f0048f), [`9260e01`](https://github.com/mastra-ai/mastra/commit/9260e015276fb1b500f7878ee452b47476bf1583), [`2f6c54e`](https://github.com/mastra-ai/mastra/commit/2f6c54e17c041cac1def54baaa6b771647836414), [`e06a159`](https://github.com/mastra-ai/mastra/commit/e06a1598ca07a6c3778aefc2a2d288363c6294ff), [`db34bc6`](https://github.com/mastra-ai/mastra/commit/db34bc6fb36cf125bda0c46be4d3fdc774b70cc4)]:
|
|
18
|
+
- @mastra/core@1.33.0-alpha.8
|
|
19
|
+
- @mastra/deployer@1.33.0-alpha.8
|
|
20
|
+
|
|
21
|
+
## 1.9.0-alpha.7
|
|
22
|
+
|
|
23
|
+
### Minor Changes
|
|
24
|
+
|
|
25
|
+
- Scope `mastra worker` as `build` / `start` / `dev` subcommands, mirroring the server's `mastra build` / `mastra start` / `mastra dev` shape. ([#16309](https://github.com/mastra-ai/mastra/pull/16309))
|
|
26
|
+
|
|
27
|
+
Previously `mastra worker [name]` both bundled and ran in one shot. Splitting it into discrete `build` and `start` steps makes the worker lifecycle match the server lifecycle: bundle once on CI, ship the artifact, then start it (with `[name]` setting `MASTRA_WORKERS`) on the target host.
|
|
28
|
+
|
|
29
|
+
**New surface:**
|
|
30
|
+
- `mastra worker build` — bundles a role-agnostic worker artifact.
|
|
31
|
+
- `mastra worker start [name]` — runs the built worker. `[name]` sets `MASTRA_WORKERS` for the spawned process.
|
|
32
|
+
- `mastra worker dev [name]` — build + start in one step (the closest equivalent of the old `mastra worker [name]`).
|
|
33
|
+
|
|
34
|
+
**Output location:** by default the worker bundle writes to `.mastra/output/index.mjs`, the same path as `mastra build`. In a split deployment (one host runs the server, another runs the worker) that's what you want — each host bundles only the role it ships. Running both `mastra build` and `mastra worker build` back-to-back in the same project will overwrite, by design.
|
|
35
|
+
|
|
36
|
+
If you want both bundles to coexist on disk in the same project, pass `--output-dir <path>` to `mastra worker build` to redirect the worker bundle anywhere — relative or absolute. When a custom path is given, `prepare` wipes only that target so adjacent build artifacts (including `.mastra/output/`) are left alone:
|
|
37
|
+
|
|
38
|
+
```sh
|
|
39
|
+
mastra build # writes .mastra/output/index.mjs (server)
|
|
40
|
+
mastra worker build --output-dir dist/worker # writes dist/worker/index.mjs
|
|
41
|
+
mastra worker start --dir dist/worker # runs the worker bundle from there
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
**Breaking change:** `mastra worker [name]` no longer works. Use `mastra worker dev [name]` for the same one-shot behavior, or split it into `mastra worker build` + `mastra worker start [name]` for production deployments.
|
|
45
|
+
|
|
46
|
+
- Worker review fixes: ([#16309](https://github.com/mastra-ai/mastra/pull/16309))
|
|
47
|
+
- Step-execution endpoint (`POST /workflows/:id/runs/:runId/steps/execute`) is
|
|
48
|
+
now gated by Mastra's standard `requiresAuth: true` + `authenticateToken`
|
|
49
|
+
pipeline rather than a parallel "worker secret" body field. The previously
|
|
50
|
+
introduced `workerSecret` config knob and `MASTRA_WORKER_SECRET` env var
|
|
51
|
+
have been removed (they were never released). To gate the endpoint on a
|
|
52
|
+
standalone-worker deployment, configure an auth provider on the server's
|
|
53
|
+
`Mastra` instance — without one the framework currently treats
|
|
54
|
+
`requiresAuth: true` as a no-op for this route.
|
|
55
|
+
- `HttpRemoteStrategy` now sends credentials as a normal `Authorization:
|
|
56
|
+
Bearer <token>` header. The token comes from the new
|
|
57
|
+
`MASTRA_WORKER_AUTH_TOKEN` env var or an explicit `auth` constructor option.
|
|
58
|
+
- Honor the caller's `abortSignal` in `HttpRemoteStrategy` by combining it
|
|
59
|
+
with the per-request timeout via `AbortSignal.any` (with a manual fallback
|
|
60
|
+
for runtimes that don't expose it).
|
|
61
|
+
- Implement comma-separated name filtering for the `MASTRA_WORKERS` env var.
|
|
62
|
+
`MASTRA_WORKERS=scheduler,backgroundTasks` now boots only those named
|
|
63
|
+
workers; `MASTRA_WORKERS=false` still disables all workers.
|
|
64
|
+
- Restore `Mastra.startEventEngine` / `stopEventEngine` as `@deprecated`
|
|
65
|
+
aliases for the renamed `startWorkers` / `stopWorkers`.
|
|
66
|
+
- `BackgroundTaskWorker` now subscribes to PubSub in `start()` instead of
|
|
67
|
+
`init()`, matching the lifecycle of the other workers and making
|
|
68
|
+
`isRunning` accurately reflect subscription state.
|
|
69
|
+
- `RedisStreamsPubSub` adds a `maxDeliveryAttempts` option (default 5) that
|
|
70
|
+
drops events after the configured number of failed deliveries instead of
|
|
71
|
+
redelivering forever, and replaces empty `catch {}` blocks with
|
|
72
|
+
`logger.warn`/`logger.debug` calls.
|
|
73
|
+
- `RedisStreamsPubSub.unsubscribe(topic, cb)` now honors the topic argument
|
|
74
|
+
so the same callback can be subscribed to multiple topics independently.
|
|
75
|
+
- `PullTransport` guards the async router callback against unhandled promise
|
|
76
|
+
rejections by attaching a `.catch` that nacks the message.
|
|
77
|
+
- Drop the dead `MASTRA_WORKER_NAME` env var injection in the CLI worker
|
|
78
|
+
spawn (the bundle entrypoint already passes the worker name directly).
|
|
79
|
+
- Add a real cross-process e2e auth suite
|
|
80
|
+
(`pubsub/redis-streams/src/auth-e2e.test.ts`) covering happy path, wrong
|
|
81
|
+
token, missing token, anonymous direct hits, and the no-auth-provider
|
|
82
|
+
pin-down behavior.
|
|
83
|
+
- Step-execution route now has a response schema, satisfying
|
|
84
|
+
`schema-consistency.test.ts`.
|
|
85
|
+
- Internal type cleanups (drop several `as any` casts in worker strategies
|
|
86
|
+
and `BackgroundTaskWorker`).
|
|
87
|
+
- `RedisStreamsPubSub.maxDeliveryAttempts` now rejects negative / NaN values
|
|
88
|
+
at construction. `0` still means "no cap" for back-compat but emits a
|
|
89
|
+
one-time warning; pass `Infinity` to disable the cap explicitly.
|
|
90
|
+
- `PullTransport` accepts a logger and uses it for unhandled router-callback
|
|
91
|
+
rejections instead of `console.error`.
|
|
92
|
+
- `BackgroundTaskWorker.start()` now throws if `init()` was not called,
|
|
93
|
+
matching the contract of the other workers.
|
|
94
|
+
- Cross-process integration tests now spawn a single user-owned project
|
|
95
|
+
(`test-fixtures/cli-project/src/mastra/index.ts`) through two generic
|
|
96
|
+
entries that mirror what `BuildBundler` and `WorkerBundler` emit. The
|
|
97
|
+
previous one-off `server.entry.ts` / `worker.entry.ts` /
|
|
98
|
+
`scheduler.entry.ts` / `background.entry.ts` files have been deleted —
|
|
99
|
+
they implied users hand-roll entry files, which they don't. Worker role
|
|
100
|
+
is selected via `MASTRA_WORKERS` exactly as in production.
|
|
101
|
+
|
|
102
|
+
Push-capable PubSub:
|
|
103
|
+
- The `PubSub` abstract class now declares a `supportedModes` getter
|
|
104
|
+
(defaulting to `['pull']` for backward compatibility) so consumers can
|
|
105
|
+
tell whether a broker delivers events through a pull loop, an in-process
|
|
106
|
+
push, or an out-of-process HTTP push. `EventEmitterPubSub` reports
|
|
107
|
+
`['pull', 'push']` (EventEmitter dispatches synchronously and works for
|
|
108
|
+
either path), `@mastra/redis-streams` reports `['pull']`.
|
|
109
|
+
- `Mastra` now exposes a public `handleWorkflowEvent(event)` method backed
|
|
110
|
+
by a shared `WorkflowEventProcessor`. It is the single entry point used
|
|
111
|
+
by the existing pull-mode `OrchestrationWorker`, by in-process push
|
|
112
|
+
pubsubs (auto-wired during `startWorkers()`), and by the new
|
|
113
|
+
`POST /api/workflows/events` route which lets push-mode brokers (GCP
|
|
114
|
+
Pub/Sub push, SNS, EventBridge) deliver events over HTTP.
|
|
115
|
+
- When the configured pubsub does not support `'pull'`, Mastra
|
|
116
|
+
automatically skips creating an `OrchestrationWorker` and
|
|
117
|
+
`OrchestrationWorker.init()` throws a clear error if it is constructed
|
|
118
|
+
against a push-only pubsub.
|
|
119
|
+
- `WorkflowEventProcessor` gains a `handle(event)` method that returns a
|
|
120
|
+
structured `{ ok, retry }` result. The original `process(event, ack?)`
|
|
121
|
+
method is preserved as a thin wrapper for back-compat.
|
|
122
|
+
|
|
123
|
+
Public-API example for a push-capable PubSub:
|
|
124
|
+
|
|
125
|
+
```ts
|
|
126
|
+
import { Mastra } from '@mastra/core/mastra';
|
|
127
|
+
import { EventEmitterPubSub } from '@mastra/core/pubsub';
|
|
128
|
+
|
|
129
|
+
const mastra = new Mastra({
|
|
130
|
+
// A push-capable broker (GCP Pub/Sub push, SNS, EventEmitter, …).
|
|
131
|
+
// EventEmitterPubSub reports supportedModes = ['pull', 'push'].
|
|
132
|
+
pubsub: new EventEmitterPubSub(),
|
|
133
|
+
workflows: { myWorkflow },
|
|
134
|
+
});
|
|
135
|
+
|
|
136
|
+
// In-process push pubsubs are auto-wired here. For out-of-process
|
|
137
|
+
// push (e.g. HTTP webhook from a cloud broker), POST the event to
|
|
138
|
+
// /api/workflows/events on your Mastra server instead.
|
|
139
|
+
await mastra.startWorkers();
|
|
140
|
+
|
|
141
|
+
// Direct invocation (e.g. inside an HTTP handler that bridges from a
|
|
142
|
+
// cloud broker's push delivery):
|
|
143
|
+
await mastra.handleWorkflowEvent({
|
|
144
|
+
id: 'evt-1',
|
|
145
|
+
type: 'workflow.start',
|
|
146
|
+
runId: 'run-1',
|
|
147
|
+
createdAt: new Date(),
|
|
148
|
+
data: { workflowId: 'myWorkflow', inputData: { name: 'world' } },
|
|
149
|
+
});
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
CI follow-ups:
|
|
153
|
+
- `Mastra` only auto-registers `SchedulerWorker` when storage is configured.
|
|
154
|
+
Without storage the worker would crash on startup (`deps.storage.getStore`
|
|
155
|
+
on undefined); the scheduler now silently no-ops in that case, matching the
|
|
156
|
+
pre-worker scheduler behavior.
|
|
157
|
+
- `SchedulerWorker.init` defensively logs and returns when called without
|
|
158
|
+
storage instead of throwing a TypeError.
|
|
159
|
+
- `RECEIVE_WORKFLOW_EVENT_ROUTE` (`POST /workflows/events`) `createdAt` is
|
|
160
|
+
now a plain `z.string()` on the wire and the handler converts it to a
|
|
161
|
+
`Date` (validating "Invalid Date" -> 400). The previous
|
|
162
|
+
`union(...).transform().refine()` schema couldn't be exercised by the
|
|
163
|
+
shared adapter test suite because the generator didn't unwrap Zod 4's
|
|
164
|
+
`ZodPipe`.
|
|
165
|
+
- `_test-utils/route-test-utils` recognizes Zod 4's `number_format` check
|
|
166
|
+
(used for `int()` / `safeint()`), and `generateContextualValue` now
|
|
167
|
+
produces a valid ISO timestamp for `createdAt` / `updatedAt` fields.
|
|
168
|
+
|
|
169
|
+
### Patch Changes
|
|
170
|
+
|
|
171
|
+
- Fixed Next.js config linting so project config files are parsed without executing code. #16180 ([#16184](https://github.com/mastra-ai/mastra/pull/16184))
|
|
172
|
+
|
|
173
|
+
- Updated dependencies [[`6742347`](https://github.com/mastra-ai/mastra/commit/6742347d71955d7639adc9ddf6ff8282de7ee3ba), [`7b0ad1f`](https://github.com/mastra-ai/mastra/commit/7b0ad1f5c53dc118c6da12ae82ae2587037dc2b8), [`62666c3`](https://github.com/mastra-ai/mastra/commit/62666c367eaeac3941ead454b1d38810cc855721), [`4af2160`](https://github.com/mastra-ai/mastra/commit/4af2160322f4718cac421930cce85641e9512389), [`136c959`](https://github.com/mastra-ai/mastra/commit/136c9592fb0eeb0cd212f28629d8a29b7557a2fc), [`4df7cc7`](https://github.com/mastra-ai/mastra/commit/4df7cc79342fd065fe7fdeef93c094db14b12bcd), [`aca3121`](https://github.com/mastra-ai/mastra/commit/aca31211233dac25459f140ea4fcfb3a5af64c18), [`9cdf38e`](https://github.com/mastra-ai/mastra/commit/9cdf38e58506e1109c8b38f97cd7770978a4218e), [`990851e`](https://github.com/mastra-ai/mastra/commit/990851edcb0e30be5c2c18b6532f1a876cc2d335), [`6068a6c`](https://github.com/mastra-ai/mastra/commit/6068a6c42950fad3ebfc92346417896ba60803d2), [`00106be`](https://github.com/mastra-ai/mastra/commit/00106bede59b81e5b0e9cd6aad8d3b5dbc336387), [`e2a079c`](https://github.com/mastra-ai/mastra/commit/e2a079cc3755b1895f7bd5dc36e9be81b11c7c22), [`534a456`](https://github.com/mastra-ai/mastra/commit/534a456a25e4df1e5407e7e632f4cb3b1fa14f9d), [`36bae07`](https://github.com/mastra-ai/mastra/commit/36bae07c0e70b1b3006f2fd20830e8883dcbd066)]:
|
|
174
|
+
- @mastra/core@1.33.0-alpha.7
|
|
175
|
+
- @mastra/deployer@1.33.0-alpha.7
|
|
176
|
+
|
|
177
|
+
## 1.9.0-alpha.6
|
|
178
|
+
|
|
179
|
+
### Patch Changes
|
|
180
|
+
|
|
181
|
+
- Updated dependencies [[`b560d6f`](https://github.com/mastra-ai/mastra/commit/b560d6f88b9b904b15c10f75c949eb145bc27684), [`36b3bbf`](https://github.com/mastra-ai/mastra/commit/36b3bbf5a8d59f7e23d47e29340e76c681b4929c), [`b275631`](https://github.com/mastra-ai/mastra/commit/b275631dc10541a482b2e2d4a3e3cfa843bd5fa1)]:
|
|
182
|
+
- @mastra/core@1.33.0-alpha.6
|
|
183
|
+
- @mastra/deployer@1.33.0-alpha.6
|
|
184
|
+
|
|
185
|
+
## 1.9.0-alpha.5
|
|
186
|
+
|
|
187
|
+
### Patch Changes
|
|
188
|
+
|
|
189
|
+
- Updated dependencies [[`bae019e`](https://github.com/mastra-ai/mastra/commit/bae019ecb6694da96909f7ec7b9eb3a0a33aa887), [`33f5061`](https://github.com/mastra-ai/mastra/commit/33f5061cd1c0335020c3faae61ce96de822854fa), [`99869ec`](https://github.com/mastra-ai/mastra/commit/99869ecb1f2aa6dfcc44fa4e843e5ee0344efa64), [`d86f031`](https://github.com/mastra-ai/mastra/commit/d86f031eb6b0b2570145afafea664e59bf688962)]:
|
|
190
|
+
- @mastra/core@1.33.0-alpha.5
|
|
191
|
+
- @mastra/deployer@1.33.0-alpha.5
|
|
192
|
+
|
|
193
|
+
## 1.9.0-alpha.4
|
|
194
|
+
|
|
195
|
+
### Minor Changes
|
|
196
|
+
|
|
197
|
+
- Updated the Studio observability UI with a filterable metrics dashboard and saved filter persistence. ([#15747](https://github.com/mastra-ai/mastra/pull/15747))
|
|
198
|
+
|
|
199
|
+
**Metrics dashboard filters**
|
|
200
|
+
|
|
201
|
+
The metrics page now includes a dimensional filter toolbar for `rootEntityType`, `entityName`, `entityId`, `tags`, `serviceName`, `environment`, and common identity/correlation IDs such as `threadId`, `resourceId`, `userId`, `organizationId`, `runId`, `sessionId`, `requestId`, and `experimentId`. Active metrics filters are reflected in the URL and can be saved to the Metrics page's own localStorage key.
|
|
202
|
+
|
|
203
|
+
**Memory card**
|
|
204
|
+
|
|
205
|
+
A new **Memory** card shows thread and resource activity in one tabbed card. Rows include run counts, token usage, and cost for the active date range and filters. The dashboard also restores the Total Threads and Total Resources KPI cards.
|
|
206
|
+
|
|
207
|
+
**Drilldowns**
|
|
208
|
+
|
|
209
|
+
Metrics cards can now link into Traces or Logs while preserving the active date range and relevant filters:
|
|
210
|
+
- Latency, Trace Volume, Token Usage by Agent, and Model Usage & Cost expose header drilldown actions.
|
|
211
|
+
- Token Usage by Agent, Trace Volume, and Model Usage & Cost rows/bars drill into Traces scoped to the clicked entity.
|
|
212
|
+
- Trace Volume error segments can drill into Logs with `level=error`.
|
|
213
|
+
- Memory rows drill into Traces scoped to the clicked `threadId` or `resourceId`.
|
|
214
|
+
- Latency chart points narrow Traces to the clicked time bucket.
|
|
215
|
+
|
|
216
|
+
Metrics-to-Traces drilldowns open the branch-oriented trace list so nested agent, workflow, and tool spans are visible. KPI cards remain non-clickable.
|
|
217
|
+
|
|
218
|
+
### Patch Changes
|
|
219
|
+
|
|
220
|
+
- Updated dependencies [[`9f17410`](https://github.com/mastra-ai/mastra/commit/9f1741080def23d42ee50b39887a385ae316a3c6), [`c6eb39e`](https://github.com/mastra-ai/mastra/commit/c6eb39ea6dca381c6563cb240237fbe608e02f93), [`900d086`](https://github.com/mastra-ai/mastra/commit/900d086bb737b9cf2fcf68f11b0389b801a2738c), [`4c0e286`](https://github.com/mastra-ai/mastra/commit/4c0e28637c9cfb4f416549b55e97ebfa13319dfc), [`25184ff`](https://github.com/mastra-ai/mastra/commit/25184ffaf1293ec95119426eb1a1f8d38831b96c), [`aebde9c`](https://github.com/mastra-ai/mastra/commit/aebde9cfacf56592c6b6350cae721740fe090b8a)]:
|
|
221
|
+
- @mastra/core@1.33.0-alpha.4
|
|
222
|
+
- @mastra/deployer@1.33.0-alpha.4
|
|
223
|
+
|
|
224
|
+
## 1.9.0-alpha.3
|
|
225
|
+
|
|
226
|
+
### Minor Changes
|
|
227
|
+
|
|
228
|
+
- Added `mastra api`, a machine-readable runtime CLI for calling Mastra server resources with JSON input and output. ([#16128](https://github.com/mastra-ai/mastra/pull/16128))
|
|
229
|
+
|
|
230
|
+
The new API CLI supports agents, workflows, tools, MCP servers, memory threads, working memory, observability traces/logs/scores, datasets, and experiments. It includes schema-aware request handling so a single JSON input is split into path, query, and body fields based on server route contracts, plus ergonomic raw-input wrapping for tool execution.
|
|
231
|
+
|
|
232
|
+
Exposed a route-derived server API schema manifest at runtime and generated CLI route metadata from it, enabling `--schema` output, response-shape-aware normalization, and server-aligned pagination output.
|
|
233
|
+
|
|
234
|
+
### Patch Changes
|
|
235
|
+
|
|
236
|
+
- Updated dependencies [[`087e413`](https://github.com/mastra-ai/mastra/commit/087e4133e5d6efa36619e9556c16750e4179c047), [`087e413`](https://github.com/mastra-ai/mastra/commit/087e4133e5d6efa36619e9556c16750e4179c047), [`087e413`](https://github.com/mastra-ai/mastra/commit/087e4133e5d6efa36619e9556c16750e4179c047)]:
|
|
237
|
+
- @mastra/core@1.33.0-alpha.3
|
|
238
|
+
- @mastra/deployer@1.33.0-alpha.3
|
|
239
|
+
|
|
3
240
|
## 1.8.2-alpha.2
|
|
4
241
|
|
|
5
242
|
### Patch Changes
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/analytics/index.ts"],"names":[],"mappings":"AAmBA,MAAM,MAAM,UAAU,GAAG,cAAc,GAAG,KAAK,CAAC;AAIhD,wBAAgB,YAAY,IAAI,gBAAgB,GAAG,IAAI,CAEtD;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,gBAAgB,GAAG,IAAI,CAE7D;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,MAAM,CAAC,CAAU;IACzB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,cAAc,CAAS;gBAEnB,EACV,OAAO,EACP,MAAM,EACN,IAAgC,GACjC,EAAE;QACD,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;KACd;IAgCD,OAAO,CAAC,cAAc;IAQtB,OAAO,CAAC,iBAAiB;IAezB,OAAO,CAAC,kBAAkB;IAS1B,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,mBAAmB;IAY3B,OAAO,CAAC,aAAa;IAKrB,OAAO,CAAC,mBAAmB;IAc3B,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;IAmBrE,YAAY,CAAC,OAAO,EAAE;QACpB,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC/B,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,MAAM,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC;QAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,UAAU,CAAC;KACrB,GAAG,IAAI;IAsCF,qBAAqB,CAAC,CAAC,EAAE,EAC7B,OAAO,EACP,IAAI,EACJ,SAAS,EACT,MAAM,GACP,EAAE;QACD,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC9B,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC;QAC5B,MAAM,CAAC,EAAE,UAAU,CAAC;KACrB,GAAG,OAAO,CAAC,CAAC,CAAC;IA+BR,QAAQ,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/analytics/index.ts"],"names":[],"mappings":"AAmBA,MAAM,MAAM,UAAU,GAAG,cAAc,GAAG,KAAK,CAAC;AAIhD,wBAAgB,YAAY,IAAI,gBAAgB,GAAG,IAAI,CAEtD;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,gBAAgB,GAAG,IAAI,CAE7D;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,MAAM,CAAC,CAAU;IACzB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,cAAc,CAAS;gBAEnB,EACV,OAAO,EACP,MAAM,EACN,IAAgC,GACjC,EAAE;QACD,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;KACd;IAgCD,OAAO,CAAC,cAAc;IAQtB,OAAO,CAAC,iBAAiB;IAezB,OAAO,CAAC,kBAAkB;IAS1B,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,mBAAmB;IAY3B,OAAO,CAAC,aAAa;IAKrB,OAAO,CAAC,mBAAmB;IAc3B,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;IAmBrE,YAAY,CAAC,OAAO,EAAE;QACpB,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC/B,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,MAAM,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC;QAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,UAAU,CAAC;KACrB,GAAG,IAAI;IAsCF,qBAAqB,CAAC,CAAC,EAAE,EAC7B,OAAO,EACP,IAAI,EACJ,SAAS,EACT,MAAM,GACP,EAAE;QACD,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC9B,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC;QAC5B,MAAM,CAAC,EAAE,UAAU,CAAC;KACrB,GAAG,OAAO,CAAC,CAAC,CAAC;IA+BR,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAUlD"}
|
package/dist/analytics/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { createMastraDir, writeIndexFile, createComponentsDir, writeAPIKey, writeCodeSample, DepsService, getAPIKey, installMastraDocsMCPServer, writeAgentsMarkdown, writeClaudeMarkdown, gitInit, getAnalytics, getPackageManager, LLM_PROVIDERS, isGitInitialized, interactivePrompt, getPackageManagerAddCommand, getModelIdentifier } from './chunk-
|
|
1
|
+
import { createMastraDir, writeIndexFile, createComponentsDir, writeAPIKey, writeCodeSample, DepsService, getAPIKey, installMastraDocsMCPServer, writeAgentsMarkdown, writeClaudeMarkdown, gitInit, getAnalytics, getPackageManager, LLM_PROVIDERS, isGitInitialized, interactivePrompt, getPackageManagerAddCommand, getModelIdentifier } from './chunk-SNSX7USI.js';
|
|
2
2
|
import fsSync from 'fs';
|
|
3
3
|
import fs from 'fs/promises';
|
|
4
4
|
import * as p4 from '@clack/prompts';
|
|
@@ -14,7 +14,7 @@ import { execa } from 'execa';
|
|
|
14
14
|
// package.json
|
|
15
15
|
var package_default = {
|
|
16
16
|
name: "mastra",
|
|
17
|
-
version: "1.
|
|
17
|
+
version: "1.9.0-alpha.10",
|
|
18
18
|
license: "Apache-2.0",
|
|
19
19
|
description: "cli for mastra",
|
|
20
20
|
type: "module",
|
|
@@ -37,6 +37,7 @@ var package_default = {
|
|
|
37
37
|
"CHANGELOG.md"
|
|
38
38
|
],
|
|
39
39
|
scripts: {
|
|
40
|
+
"generate:api-manifest": "pnpm --filter @mastra/server generate:api-cli-route-metadata",
|
|
40
41
|
"build:lib": "tsup --silent --config tsup.config.ts",
|
|
41
42
|
prepack: "pnpx tsx ../../scripts/generate-package-docs.ts",
|
|
42
43
|
test: "vitest run",
|
|
@@ -64,11 +65,13 @@ var package_default = {
|
|
|
64
65
|
"devtools"
|
|
65
66
|
],
|
|
66
67
|
dependencies: {
|
|
68
|
+
"@babel/parser": "^7.28.4",
|
|
69
|
+
"@babel/types": "^7.28.4",
|
|
67
70
|
"@clack/prompts": "^1.1.0",
|
|
68
71
|
"@expo/devcert": "^1.2.1",
|
|
69
|
-
archiver: "^7.0.1",
|
|
70
72
|
"@mastra/deployer": "workspace:^",
|
|
71
73
|
"@mastra/loggers": "workspace:^",
|
|
74
|
+
archiver: "^7.0.1",
|
|
72
75
|
commander: "^14.0.3",
|
|
73
76
|
dotenv: "^17.3.1",
|
|
74
77
|
execa: "^9.6.1",
|
|
@@ -77,7 +80,7 @@ var package_default = {
|
|
|
77
80
|
"local-pkg": "^1.1.2",
|
|
78
81
|
"openapi-fetch": "^0.17.0",
|
|
79
82
|
picocolors: "^1.1.1",
|
|
80
|
-
"posthog-node": "5.
|
|
83
|
+
"posthog-node": "^5.30.6",
|
|
81
84
|
semver: "^7.7.4",
|
|
82
85
|
serve: "^14.2.6",
|
|
83
86
|
"serve-handler": "^6.1.7",
|
|
@@ -1042,5 +1045,5 @@ async function createFromTemplate(args) {
|
|
|
1042
1045
|
}
|
|
1043
1046
|
|
|
1044
1047
|
export { create, createLogger, init, logger, package_default };
|
|
1045
|
-
//# sourceMappingURL=chunk-
|
|
1046
|
-
//# sourceMappingURL=chunk-
|
|
1048
|
+
//# sourceMappingURL=chunk-4YMG3NUR.js.map
|
|
1049
|
+
//# sourceMappingURL=chunk-4YMG3NUR.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../package.json","../src/utils/logger.ts","../src/utils/clone-template.ts","../src/utils/template-utils.ts","../src/commands/init/skills-install.ts","../src/commands/init/init.ts","../src/commands/create/utils.ts","../src/commands/create/create.ts"],"names":["spinner","p","p2","exec","util","child_process","path","fs","p3","color","s","fsSync"],"mappings":"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","file":"chunk-4YMG3NUR.js","sourcesContent":["{\n \"name\": \"mastra\",\n \"version\": \"1.9.0-alpha.10\",\n \"license\": \"Apache-2.0\",\n \"description\": \"cli for mastra\",\n \"type\": \"module\",\n \"main\": \"dist/index.js\",\n \"types\": \"dist/index.d.ts\",\n \"bin\": {\n \"mastra\": \"./dist/index.js\"\n },\n \"exports\": {\n \".\": \"./dist/index.js\",\n \"./package.json\": \"./package.json\",\n \"./telemetry-loader\": \"./dist/commands/dev/telemetry-loader.js\",\n \"./dist/*\": [\n \"./dist/*\",\n \"./dist/*.js\"\n ]\n },\n \"files\": [\n \"dist\",\n \"CHANGELOG.md\"\n ],\n \"scripts\": {\n \"generate:api-manifest\": \"pnpm --filter @mastra/server generate:api-cli-route-metadata\",\n \"build:lib\": \"tsup --silent --config tsup.config.ts\",\n \"prepack\": \"pnpx tsx ../../scripts/generate-package-docs.ts\",\n \"test\": \"vitest run\",\n \"test:watch\": \"vitest watch\",\n \"clean\": \"rm -rf dist && rm -rf node_modules\",\n \"typecheck\": \"tsc --noEmit --incremental\",\n \"lint\": \"eslint .\"\n },\n \"keywords\": [\n \"mastra\",\n \"cli\",\n \"ai\",\n \"llm\",\n \"llms\",\n \"agent\",\n \"agents\",\n \"dev\",\n \"development\",\n \"deploy\",\n \"deployment\",\n \"build\",\n \"workflow\",\n \"typescript\",\n \"command-line\",\n \"devtools\"\n ],\n \"dependencies\": {\n \"@babel/parser\": \"^7.28.4\",\n \"@babel/types\": \"^7.28.4\",\n \"@clack/prompts\": \"^1.1.0\",\n \"@expo/devcert\": \"^1.2.1\",\n \"@mastra/deployer\": \"workspace:^\",\n \"@mastra/loggers\": \"workspace:^\",\n \"archiver\": \"^7.0.1\",\n \"commander\": \"^14.0.3\",\n \"dotenv\": \"^17.3.1\",\n \"execa\": \"^9.6.1\",\n \"fs-extra\": \"^11.3.4\",\n \"get-port\": \"^7.1.0\",\n \"local-pkg\": \"^1.1.2\",\n \"openapi-fetch\": \"^0.17.0\",\n \"picocolors\": \"^1.1.1\",\n \"posthog-node\": \"^5.30.6\",\n \"semver\": \"^7.7.4\",\n \"serve\": \"^14.2.6\",\n \"serve-handler\": \"^6.1.7\",\n \"shell-quote\": \"^1.8.3\",\n \"strip-json-comments\": \"^5.0.3\",\n \"yocto-spinner\": \"^1.1.0\"\n },\n \"devDependencies\": {\n \"@commander-js/extra-typings\": \"^14.0.0\",\n \"@internal/lint\": \"workspace:*\",\n \"@internal/playground\": \"workspace:*\",\n \"@internal/types-builder\": \"workspace:*\",\n \"@mastra/core\": \"workspace:*\",\n \"@types/archiver\": \"^7.0.0\",\n \"@types/fs-extra\": \"^11.0.4\",\n \"@types/node\": \"22.19.15\",\n \"@types/semver\": \"^7.7.1\",\n \"@types/serve-handler\": \"^6.1.4\",\n \"@types/shell-quote\": \"^1.7.5\",\n \"@vitest/coverage-v8\": \"catalog:\",\n \"@vitest/ui\": \"catalog:\",\n \"eslint\": \"^10.2.1\",\n \"memfs\": \"^4.56.11\",\n \"rollup\": \"^4.59.0\",\n \"tsup\": \"^8.5.1\",\n \"type-fest\": \"^5.4.4\",\n \"typescript\": \"catalog:\",\n \"vitest\": \"catalog:\"\n },\n \"peerDependencies\": {\n \"@mastra/core\": \">=1.32.0-0 <2.0.0-0\",\n \"zod\": \"^3.25.0 || ^4.0.0\"\n },\n \"homepage\": \"https://mastra.ai\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/mastra-ai/mastra.git\",\n \"directory\": \"packages/cli\"\n },\n \"bugs\": {\n \"url\": \"https://github.com/mastra-ai/mastra/issues\"\n },\n \"engines\": {\n \"node\": \">=22.13.0\"\n }\n}\n","import { PinoLogger } from '@mastra/loggers';\n\nexport const logger = createLogger(false);\n\nexport function createLogger(debug: boolean = false) {\n return new PinoLogger({\n name: 'Mastra CLI',\n level: debug ? 'debug' : 'info',\n });\n}\n","import child_process from 'node:child_process';\nimport fs from 'node:fs/promises';\nimport path from 'node:path';\nimport util from 'node:util';\nimport shellQuote from 'shell-quote';\nimport yoctoSpinner from 'yocto-spinner';\n\nimport type { LLMProvider } from '../commands/init/utils';\nimport { getModelIdentifier } from '../commands/init/utils';\nimport { getPackageManager } from '../commands/utils';\n\nimport { logger } from './logger';\nimport type { Template } from './template-utils';\n\nconst exec = util.promisify(child_process.exec);\n\nexport interface CloneTemplateOptions {\n template: Template;\n projectName: string;\n targetDir?: string;\n branch?: string;\n llmProvider?: LLMProvider;\n}\n\nexport async function cloneTemplate(options: CloneTemplateOptions): Promise<string> {\n const { template, projectName, targetDir, branch, llmProvider } = options;\n const projectPath = targetDir ? path.resolve(targetDir, projectName) : path.resolve(projectName);\n\n const spinner = yoctoSpinner({ text: `Cloning template \"${template.title}\"...` }).start();\n\n try {\n // Check if directory already exists\n if (await directoryExists(projectPath)) {\n spinner.error(`Directory ${projectName} already exists`);\n throw new Error(`Directory ${projectName} already exists`);\n }\n\n // Clone the repository without git history\n await cloneRepositoryWithoutGit(template.githubUrl, projectPath, branch);\n\n // Update package.json with new project name\n await updatePackageJson(projectPath, projectName);\n\n // Copy .env.example to .env if it exists, and update MODEL if llmProvider is specified\n const envExamplePath = path.join(projectPath, '.env.example');\n if (await fileExists(envExamplePath)) {\n const envPath = path.join(projectPath, '.env');\n await fs.copyFile(envExamplePath, envPath);\n\n // Update MODEL in .env if llmProvider is specified\n if (llmProvider) {\n await updateEnvFile(envPath, llmProvider);\n }\n }\n\n spinner.success(`Template \"${template.title}\" cloned successfully to ${projectName}`);\n return projectPath;\n } catch (error) {\n spinner.error(`Failed to clone template: ${error instanceof Error ? error.message : 'Unknown error'}`);\n throw error;\n }\n}\n\nasync function directoryExists(dirPath: string): Promise<boolean> {\n try {\n const stat = await fs.stat(dirPath);\n return stat.isDirectory();\n } catch {\n return false;\n }\n}\n\nasync function fileExists(filePath: string): Promise<boolean> {\n try {\n const stat = await fs.stat(filePath);\n return stat.isFile();\n } catch {\n return false;\n }\n}\n\nasync function cloneRepositoryWithoutGit(repoUrl: string, targetPath: string, branch?: string): Promise<void> {\n // Create target directory\n await fs.mkdir(targetPath, { recursive: true });\n\n try {\n // First try using degit if available (similar to Next.js)\n const degitRepo = repoUrl.replace('https://github.com/', '');\n // If branch is specified, append it to the degit repo (format: owner/repo#branch)\n const degitRepoWithBranch = branch ? `${degitRepo}#${branch}` : degitRepo;\n const degitCommand = shellQuote.quote(['npx', 'degit', degitRepoWithBranch, targetPath]);\n await exec(degitCommand, {\n cwd: process.cwd(),\n });\n } catch {\n // Fallback to git clone + remove .git\n try {\n const gitArgs = ['git', 'clone'];\n // Add branch flag if specified\n if (branch) {\n gitArgs.push('--branch', branch);\n }\n gitArgs.push(repoUrl, targetPath);\n\n const gitCommand = shellQuote.quote(gitArgs);\n await exec(gitCommand, {\n cwd: process.cwd(),\n });\n\n // Remove .git directory\n const gitDir = path.join(targetPath, '.git');\n if (await directoryExists(gitDir)) {\n await fs.rm(gitDir, { recursive: true, force: true });\n }\n } catch (gitError) {\n throw new Error(`Failed to clone repository: ${gitError instanceof Error ? gitError.message : 'Unknown error'}`);\n }\n }\n}\n\nasync function updatePackageJson(projectPath: string, projectName: string): Promise<void> {\n const packageJsonPath = path.join(projectPath, 'package.json');\n\n try {\n const packageJsonContent = await fs.readFile(packageJsonPath, 'utf-8');\n const packageJson = JSON.parse(packageJsonContent);\n\n // Update the name field\n packageJson.name = projectName;\n\n // Write back the updated package.json\n await fs.writeFile(packageJsonPath, JSON.stringify(packageJson, null, 2), 'utf-8');\n } catch (error) {\n // It's okay if package.json doesn't exist or can't be updated\n logger.warn('Could not update package.json', { error: error instanceof Error ? error.message : 'Unknown error' });\n }\n}\n\nasync function updateEnvFile(envPath: string, llmProvider: LLMProvider): Promise<void> {\n try {\n const envContent = await fs.readFile(envPath, 'utf-8');\n const modelString = getModelIdentifier(llmProvider);\n\n if (!modelString) {\n logger.warn('Could not get model identifier for provider', { provider: llmProvider });\n return;\n }\n\n // Remove quotes from modelString (it comes as 'provider/model')\n const modelValue = modelString.replace(/'/g, '');\n\n // Replace the MODEL line with the selected provider's model\n const updatedContent = envContent.replace(/^MODEL=.*/m, `MODEL=${modelValue}`);\n\n await fs.writeFile(envPath, updatedContent, 'utf-8');\n logger.info('Updated MODEL in .env', { model: modelValue });\n } catch (error) {\n // It's okay if .env can't be updated\n logger.warn('Could not update .env file', { error: error instanceof Error ? error.message : 'Unknown error' });\n }\n}\n\nexport async function installDependencies(projectPath: string, packageManager?: string): Promise<void> {\n const spinner = yoctoSpinner({ text: 'Installing dependencies...' }).start();\n\n try {\n // Use provided package manager or detect from environment/globally\n const pm = packageManager || getPackageManager();\n\n const installCommand = shellQuote.quote([pm, 'install']);\n\n await exec(installCommand, {\n cwd: projectPath,\n });\n\n spinner.success('Dependencies installed successfully');\n } catch (error) {\n spinner.error(`Failed to install dependencies: ${error instanceof Error ? error.message : 'Unknown error'}`);\n throw error;\n }\n}\n","import * as p from '@clack/prompts';\n\nexport interface Template {\n githubUrl: string;\n title: string;\n slug: string;\n agents: string[];\n mcp: string[];\n tools: string[];\n networks: string[];\n workflows: string[];\n}\n\nconst TEMPLATES_API_URL = process.env.MASTRA_TEMPLATES_API_URL || 'https://mastra.ai/api/templates.json';\n\nexport async function loadTemplates(): Promise<Template[]> {\n try {\n const response = await fetch(TEMPLATES_API_URL);\n if (!response.ok) {\n throw new Error(`Failed to fetch templates: ${response.statusText}`);\n }\n const templates = (await response.json()) as Template[];\n return templates;\n } catch (error) {\n console.error('Error loading templates:', error);\n throw new Error('Failed to load templates. Please check your internet connection and try again.');\n }\n}\n\nfunction pluralize(count: number, singular: string, plural?: string): string {\n return count === 1 ? singular : plural || `${singular}s`;\n}\n\nexport async function selectTemplate(templates: Template[]): Promise<Template | null> {\n const choices = templates.map(template => {\n const parts = [];\n if (template.agents?.length) {\n parts.push(`${template.agents.length} ${pluralize(template.agents.length, 'agent')}`);\n }\n if (template.tools?.length) {\n parts.push(`${template.tools.length} ${pluralize(template.tools.length, 'tool')}`);\n }\n if (template.workflows?.length) {\n parts.push(`${template.workflows.length} ${pluralize(template.workflows.length, 'workflow')}`);\n }\n if (template.mcp?.length) {\n parts.push(`${template.mcp.length} ${pluralize(template.mcp.length, 'MCP server')}`);\n }\n if (template.networks?.length) {\n parts.push(`${template.networks.length} ${pluralize(template.networks.length, 'agent network')}`);\n }\n\n return {\n value: template,\n label: template.title,\n hint: parts.join(', ') || 'Template components',\n };\n });\n\n const selected = await p.select({\n message: 'Select a template:',\n options: choices,\n });\n\n if (p.isCancel(selected)) {\n return null;\n }\n\n return selected as Template;\n}\n\nexport function findTemplateByName(templates: Template[], templateName: string): Template | null {\n // First try to find by exact slug match\n let template = templates.find(t => t.slug === templateName);\n if (template) return template;\n\n // Then try to find by slug without \"template-\" prefix\n const slugWithPrefix = `template-${templateName}`;\n template = templates.find(t => t.slug === slugWithPrefix);\n if (template) return template;\n\n // Finally try case-insensitive name match\n template = templates.find(t => t.title.toLowerCase() === templateName.toLowerCase());\n if (template) return template;\n\n return null;\n}\n\nexport function getDefaultProjectName(template: Template): string {\n // Remove \"template-\" prefix from slug if it exists\n return template.slug.replace(/^template-/, '');\n}\n","import { execa } from 'execa';\n\nexport async function installMastraSkills({\n directory,\n agents,\n}: {\n directory: string;\n agents: string[];\n}): Promise<{ success: boolean; error?: string; agents: string[] }> {\n try {\n // Build args: --agent takes space-separated agent names\n const args = ['skills', 'add', 'mastra-ai/skills', '--agent', ...agents, '-y'];\n\n await execa('npx', args, {\n cwd: directory,\n stdio: 'pipe', // Hide verbose output\n });\n\n return { success: true, agents };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Unknown error',\n agents,\n };\n }\n}\n","import * as p from '@clack/prompts';\nimport color from 'picocolors';\n\nimport { DepsService } from '../../services/service.deps';\n\nimport { gitInit } from '../utils';\nimport { installMastraDocsMCPServer } from './mcp-docs-server-install';\nimport type { Editor } from './mcp-docs-server-install';\nimport { installMastraSkills } from './skills-install';\nimport {\n createComponentsDir,\n createMastraDir,\n getAPIKey,\n writeAgentsMarkdown,\n writeAPIKey,\n writeClaudeMarkdown,\n writeCodeSample,\n writeIndexFile,\n} from './utils';\nimport type { Component, LLMProvider } from './utils';\n\nconst s = p.spinner();\n\nexport const init = async ({\n directory = 'src/',\n components,\n llmProvider = 'openai',\n llmApiKey,\n addExample = false,\n skills,\n mcpServer,\n versionTag,\n initGit = false,\n}: {\n directory?: string;\n components: Component[];\n llmProvider?: LLMProvider;\n llmApiKey?: string;\n addExample?: boolean;\n skills?: string[];\n mcpServer?: Editor;\n versionTag?: string;\n initGit?: boolean;\n}) => {\n s.start('Initializing Mastra');\n const packageVersionTag = versionTag ? `@${versionTag}` : '';\n\n try {\n const result = await createMastraDir(directory);\n\n if (!result.ok) {\n s.stop(color.inverse(' Mastra already initialized '));\n return { success: false };\n }\n\n const dirPath = result.dirPath;\n\n await Promise.all([\n writeIndexFile({\n dirPath,\n addExample,\n addWorkflow: components.includes('workflows'),\n addAgent: components.includes('agents'),\n addScorers: components.includes('scorers'),\n }),\n ...components.map(component => createComponentsDir(dirPath, component)),\n writeAPIKey({ provider: llmProvider, apiKey: llmApiKey }),\n ]);\n\n if (addExample) {\n await Promise.all([\n ...components.map(component =>\n writeCodeSample(dirPath, component as Component, llmProvider, components as Component[]),\n ),\n ]);\n\n const depService = new DepsService();\n\n const needsLibsql = (await depService.checkDependencies(['@mastra/libsql'])) !== `ok`;\n if (needsLibsql) {\n await depService.installPackages([`@mastra/libsql${packageVersionTag}`]);\n }\n const needsDuckDB = (await depService.checkDependencies(['@mastra/duckdb'])) !== `ok`;\n if (needsDuckDB) {\n await depService.installPackages([`@mastra/duckdb${packageVersionTag}`]);\n }\n const needsMemory =\n components.includes(`agents`) && (await depService.checkDependencies(['@mastra/memory'])) !== `ok`;\n if (needsMemory) {\n await depService.installPackages([`@mastra/memory${packageVersionTag}`]);\n }\n\n const needsLoggers = (await depService.checkDependencies(['@mastra/loggers'])) !== `ok`;\n if (needsLoggers) {\n await depService.installPackages([`@mastra/loggers${packageVersionTag}`]);\n }\n\n const needsObservability = (await depService.checkDependencies(['@mastra/observability'])) !== `ok`;\n if (needsObservability) {\n await depService.installPackages([`@mastra/observability${packageVersionTag}`]);\n }\n\n const needsEvals =\n components.includes(`scorers`) && (await depService.checkDependencies(['@mastra/evals'])) !== `ok`;\n if (needsEvals) {\n await depService.installPackages([`@mastra/evals${packageVersionTag}`]);\n }\n }\n\n const key = await getAPIKey(llmProvider || 'openai');\n\n s.stop('Mastra initialized');\n\n // Install skills if selected\n if (skills && skills.length > 0) {\n try {\n s.start('Installing Mastra agent skills');\n const skillsResult = await installMastraSkills({\n directory: process.cwd(),\n agents: skills,\n });\n if (skillsResult.success) {\n // Format agent names nicely\n const agentNames = skillsResult.agents\n .map(agent => {\n // Convert kebab-case to Title Case\n return agent\n .split('-')\n .map(word => word.charAt(0).toUpperCase() + word.slice(1))\n .join(' ');\n })\n .join(', ');\n s.stop(`Mastra agent skills installed (in ${agentNames})`);\n } else {\n s.stop('Skills installation failed');\n console.warn(color.yellow(`\\nWarning: ${skillsResult.error}`));\n }\n } catch (error) {\n s.stop('Skills installation failed');\n console.warn(color.yellow(`\\nWarning: ${error instanceof Error ? error.message : 'Unknown error'}`));\n }\n }\n\n // Install MCP if an editor was selected\n if (mcpServer) {\n await installMastraDocsMCPServer({\n editor: mcpServer,\n directory: process.cwd(),\n versionTag,\n });\n }\n\n // Write AGENTS.md and CLAUDE.md if skills or MCP were configured\n if ((skills && skills.length > 0) || mcpServer) {\n try {\n // Always write AGENTS.md\n await writeAgentsMarkdown({ skills, mcpServer });\n\n // Write CLAUDE.md only if claude-code is in skills list\n const shouldWriteClaudeMd = skills?.includes('claude-code');\n if (shouldWriteClaudeMd) {\n await writeClaudeMarkdown();\n }\n } catch (error) {\n // Don't fail initialization if markdown files fail to write\n console.warn(\n color.yellow(\n `\\nWarning: Failed to create agent guide files: ${error instanceof Error ? error.message : 'Unknown error'}`,\n ),\n );\n }\n }\n\n if (initGit) {\n s.start('Initializing git repository');\n try {\n await gitInit({ cwd: process.cwd() });\n s.stop('Git repository initialized');\n } catch {\n s.stop();\n }\n }\n\n if (!llmApiKey) {\n p.note(`\n ${color.green('Mastra initialized successfully!')}\n\n Rename ${color.cyan('.env.example')} to ${color.cyan('.env')}\n and add your ${color.cyan(key)}\n `);\n } else {\n p.note(`\n ${color.green('Mastra initialized successfully!')}\n `);\n }\n return { success: true };\n } catch (err) {\n s.stop(color.inverse('An error occurred while initializing Mastra'));\n console.error(err);\n return { success: false };\n }\n};\n","import child_process from 'node:child_process';\nimport fsSync from 'node:fs';\nimport fs from 'node:fs/promises';\nimport path from 'node:path';\nimport util from 'node:util';\nimport * as p from '@clack/prompts';\nimport color from 'picocolors';\n\nimport { DepsService } from '../../services/service.deps.js';\nimport { getPackageManagerAddCommand } from '../../utils/package-manager.js';\nimport type { PackageManager } from '../../utils/package-manager.js';\nimport { interactivePrompt } from '../init/utils.js';\nimport type { LLMProvider } from '../init/utils.js';\nimport { getPackageManager, isGitInitialized } from '../utils.js';\n\nconst exec = util.promisify(child_process.exec);\n\nconst execWithTimeout = async (command: string, timeoutMs?: number) => {\n try {\n const promise = exec(command, { killSignal: 'SIGTERM' });\n\n if (!timeoutMs) {\n return await promise;\n }\n\n let timeoutId: NodeJS.Timeout;\n const timeout = new Promise((_, reject) => {\n timeoutId = setTimeout(() => reject(new Error('Command timed out')), timeoutMs);\n });\n\n try {\n const result = await Promise.race([promise, timeout]);\n clearTimeout(timeoutId!);\n return result;\n } catch (error) {\n clearTimeout(timeoutId!);\n if (error instanceof Error && error.message === 'Command timed out') {\n throw new Error('Something went wrong during installation, please try again.');\n }\n throw error;\n }\n } catch (error: unknown) {\n throw error;\n }\n};\n\nasync function getInitCommand(pm: PackageManager): Promise<string> {\n switch (pm) {\n case 'npm':\n return 'npm init -y';\n case 'pnpm':\n return 'pnpm init';\n case 'yarn':\n return 'yarn init -y';\n case 'bun':\n return 'bun init -y';\n default:\n return 'npm init -y';\n }\n}\n\nasync function initializePackageJson(pm: PackageManager): Promise<void> {\n // Run the init command\n const initCommand = await getInitCommand(pm);\n await exec(initCommand);\n\n // Read and update package.json directly (more reliable than pkg set)\n const packageJsonPath = path.join(process.cwd(), 'package.json');\n const packageJson = JSON.parse(await fs.readFile(packageJsonPath, 'utf-8'));\n\n packageJson.type = 'module';\n packageJson.engines = {\n ...packageJson.engines,\n node: '>=22.13.0',\n };\n\n await fs.writeFile(packageJsonPath, JSON.stringify(packageJson, null, 2));\n}\n\nconst writeReadmeFile = async ({ dirPath, projectName }: { dirPath: string; projectName: string }) => {\n const packageManager = getPackageManager();\n const readmePath = path.join(dirPath, 'README.md');\n\n const content = `# ${projectName}\n\nWelcome to your new [Mastra](https://mastra.ai/) project! We're excited to see what you'll build.\n\n## Getting Started\n\nStart the development server:\n\n\\`\\`\\`shell\n${packageManager} run dev\n\\`\\`\\`\n\nOpen [http://localhost:4111](http://localhost:4111) in your browser to access [Mastra Studio](https://mastra.ai/docs/studio/overview). It provides an interactive UI for building and testing your agents, along with a REST API that exposes your Mastra application as a local service. This lets you start building without worrying about integration right away.\n\nYou can start editing files inside the \\`src/mastra\\` directory. The development server will automatically reload whenever you make changes.\n\n## Learn more\n\nTo learn more about Mastra, visit our [documentation](https://mastra.ai/docs/). Your bootstrapped project includes example code for [agents](https://mastra.ai/docs/agents/overview), [tools](https://mastra.ai/docs/agents/using-tools), [workflows](https://mastra.ai/docs/workflows/overview), [scorers](https://mastra.ai/docs/evals/overview), and [observability](https://mastra.ai/docs/observability/overview).\n\nIf you're new to AI agents, check out our [course](https://mastra.ai/learn) and [YouTube videos](https://youtube.com/@mastra-ai). You can also join our [Discord](https://discord.gg/BTYqqHKUrf) community to get help and share your projects.\n\n## Deploy to the Mastra platform\n\nThe [Mastra platform](https://projects.mastra.ai) provides two products for deploying and managing AI applications built with the Mastra framework:\n\n- **Studio**: A hosted visual environment for testing agents, running workflows, and inspecting traces\n- **Server**: A production deployment target that runs your Mastra application as an API server\n\nLearn more in the [Mastra platform documentation](https://mastra.ai/docs/mastra-platform/overview).`;\n\n await fs.writeFile(readmePath, content);\n};\n\nasync function installMastraDependencies(\n pm: PackageManager,\n dependencies: string[],\n versionTag: string,\n isDev: boolean,\n timeout?: number,\n) {\n let installCommand = getPackageManagerAddCommand(pm);\n\n if (isDev) {\n /**\n * All our package managers support -D for devDependencies. We can't use --save-dev across the board because yarn and bun don't alias it.\n * npm: -D, --save-dev. pnpm: -D, --save-dev. yarn: -D, --dev. bun: -D, --dev\n */\n installCommand = `${installCommand} -D`;\n }\n\n const dependenciesWithVersion = dependencies.map(dependency => `${dependency}${versionTag}`).join(' ');\n\n try {\n await execWithTimeout(`${pm} ${installCommand} ${dependenciesWithVersion}`, timeout);\n } catch (err) {\n if (versionTag === '@latest') {\n throw new Error(\n `Failed to install ${dependenciesWithVersion}: ${err instanceof Error ? err.message : 'Unknown error'}`,\n );\n }\n\n const latestDependencies = dependencies.map(dependency => `${dependency}@latest`).join(' ');\n try {\n await execWithTimeout(`${pm} ${installCommand} ${latestDependencies}`, timeout);\n } catch (fallbackErr) {\n throw new Error(\n `Failed to install ${dependencies.join(', ')} (tried ${versionTag} and @latest): ${fallbackErr instanceof Error ? fallbackErr.message : 'Unknown error'}`,\n );\n }\n }\n}\n\nexport const createMastraProject = async ({\n projectName: name,\n createVersionTag,\n timeout,\n llmProvider,\n llmApiKey,\n skills,\n mcpServer,\n needsInteractive,\n}: {\n projectName?: string;\n createVersionTag?: string;\n timeout?: number;\n llmProvider?: LLMProvider;\n llmApiKey?: string;\n skills?: string[];\n mcpServer?: string;\n needsInteractive?: boolean;\n}) => {\n p.intro(color.inverse(' Mastra Create '));\n\n const projectName =\n name ??\n (await p.text({\n message: 'What do you want to name your project?',\n placeholder: 'my-mastra-app',\n validate: value => {\n if (!value || value.length === 0) return 'Project name cannot be empty';\n if (fsSync.existsSync(value)) {\n return `A directory named \"${value}\" already exists. Please choose a different name.`;\n }\n },\n }));\n\n if (p.isCancel(projectName)) {\n p.cancel('Operation cancelled');\n process.exit(0);\n }\n\n let result: Awaited<ReturnType<typeof interactivePrompt>> | undefined = undefined;\n\n if (needsInteractive) {\n const skipGitInit = await isGitInitialized({ cwd: process.cwd() });\n\n result = await interactivePrompt({\n options: { showBanner: false },\n skip: {\n llmProvider: llmProvider !== undefined,\n llmApiKey: llmApiKey !== undefined,\n skills: skills !== undefined && skills.length > 0,\n mcpServer: mcpServer !== undefined,\n directory: true,\n gitInit: skipGitInit,\n },\n });\n }\n const s = p.spinner();\n const originalCwd = process.cwd();\n let projectPath: string | null = null;\n\n try {\n s.start('Creating project');\n try {\n await fs.mkdir(projectName);\n projectPath = path.resolve(originalCwd, projectName);\n } catch (error) {\n if (error instanceof Error && 'code' in error && error.code === 'EEXIST') {\n s.stop(`A directory named \"${projectName}\" already exists. Please choose a different name.`);\n process.exit(1);\n }\n throw new Error(\n `Failed to create project directory: ${error instanceof Error ? error.message : 'Unknown error'}`,\n );\n }\n\n process.chdir(projectName);\n const pm = getPackageManager();\n const installCommand = getPackageManagerAddCommand(pm);\n\n s.message('Initializing project structure');\n try {\n await initializePackageJson(pm);\n const depsService = new DepsService();\n await depsService.addScriptsToPackageJson({\n dev: 'mastra dev',\n build: 'mastra build',\n start: 'mastra start',\n });\n await writeReadmeFile({ dirPath: process.cwd(), projectName });\n } catch (error) {\n throw new Error(\n `Failed to initialize project structure: ${error instanceof Error ? error.message : 'Unknown error'}`,\n );\n }\n\n s.stop('Project structure created');\n\n s.start(`Installing ${pm} dependencies`);\n try {\n await exec(`${pm} ${installCommand} zod@^4`);\n await exec(`${pm} ${installCommand} -D typescript @types/node`);\n await exec(`echo '{\n \"compilerOptions\": {\n \"target\": \"ES2022\",\n \"module\": \"ES2022\",\n \"moduleResolution\": \"bundler\",\n \"esModuleInterop\": true,\n \"forceConsistentCasingInFileNames\": true,\n \"strict\": true,\n \"skipLibCheck\": true,\n \"noEmit\": true,\n \"outDir\": \"dist\"\n },\n \"include\": [\n \"src/**/*\"\n ]\n}' > tsconfig.json`);\n } catch (error) {\n throw new Error(\n `Failed to install basic dependencies: ${error instanceof Error ? error.message : 'Unknown error'}`,\n );\n }\n\n s.stop(`${pm} dependencies installed`);\n\n s.start('Installing Mastra CLI');\n const versionTag = createVersionTag ? `@${createVersionTag}` : '@latest';\n\n try {\n await installMastraDependencies(pm, ['mastra'], versionTag, true, timeout);\n } catch (error) {\n throw new Error(`Failed to install Mastra CLI: ${error instanceof Error ? error.message : 'Unknown error'}`);\n }\n s.stop('Mastra CLI installed');\n\n s.start('Installing Mastra dependencies');\n try {\n await installMastraDependencies(\n pm,\n ['@mastra/core', '@mastra/libsql', '@mastra/memory'],\n versionTag,\n false,\n timeout,\n );\n } catch (error) {\n throw new Error(\n `Failed to install Mastra dependencies: ${error instanceof Error ? error.message : 'Unknown error'}`,\n );\n }\n s.stop('Mastra dependencies installed');\n\n s.start('Adding .gitignore');\n try {\n await exec(`echo output.txt >> .gitignore`);\n await exec(`echo node_modules >> .gitignore`);\n await exec(`echo dist >> .gitignore`);\n await exec(`echo .mastra >> .gitignore`);\n await exec(`echo .env.development >> .gitignore`);\n await exec(`echo .env >> .gitignore`);\n await exec(`echo *.db >> .gitignore`);\n await exec(`echo *.db-* >> .gitignore`);\n await exec(`echo .netlify >> .gitignore`);\n await exec(`echo .vercel >> .gitignore`);\n } catch (error) {\n throw new Error(`Failed to create .gitignore: ${error instanceof Error ? error.message : 'Unknown error'}`);\n }\n s.stop('.gitignore added');\n\n p.outro('Project created successfully');\n console.info('');\n\n return { projectName, result };\n } catch (error) {\n s.stop();\n\n const errorMessage = error instanceof Error ? error.message : 'An unexpected error occurred';\n p.cancel(`Project creation failed: ${errorMessage}`);\n\n // Clean up: remove the created directory on failure\n if (projectPath && fsSync.existsSync(projectPath)) {\n try {\n // Change back to original directory before cleanup\n process.chdir(originalCwd);\n await fs.rm(projectPath, { recursive: true, force: true });\n } catch (cleanupError) {\n // Log but don't throw - we want to exit with the original error\n console.error(\n `Warning: Failed to clean up project directory: ${cleanupError instanceof Error ? cleanupError.message : 'Unknown error'}`,\n );\n }\n }\n\n process.exit(1);\n }\n};\n","import fsSync from 'node:fs';\nimport fs from 'node:fs/promises';\nimport * as p from '@clack/prompts';\nimport color from 'picocolors';\nimport pkgJson from '../../../package.json';\nimport type { PosthogAnalytics } from '../../analytics/index';\nimport { getAnalytics } from '../../analytics/index';\nimport { cloneTemplate, installDependencies } from '../../utils/clone-template';\nimport { loadTemplates, selectTemplate, findTemplateByName, getDefaultProjectName } from '../../utils/template-utils';\nimport type { Template } from '../../utils/template-utils';\nimport { init } from '../init/init';\nimport type { Editor } from '../init/mcp-docs-server-install';\nimport type { Component, LLMProvider } from '../init/utils';\nimport { LLM_PROVIDERS } from '../init/utils';\nimport { getPackageManager, gitInit } from '../utils.js';\n\nimport { createMastraProject } from './utils';\n\nconst version = pkgJson.version;\n\nexport const create = async (args: {\n projectName?: string;\n components?: Component[];\n llmProvider?: LLMProvider;\n addExample?: boolean;\n llmApiKey?: string;\n createVersionTag?: string;\n timeout?: number;\n directory?: string;\n mcpServer?: Editor;\n skills?: string[];\n template?: string | boolean;\n analytics?: PosthogAnalytics;\n}) => {\n if (args.template !== undefined) {\n await createFromTemplate({\n projectName: args.projectName,\n template: args.template,\n timeout: args.timeout,\n injectedAnalytics: args.analytics,\n llmProvider: args.llmProvider,\n });\n return;\n }\n\n /**\n * We need to explicitly check for undefined instead of using the falsy (!) check because the user might have passed args that are explicitly set to false (in this case, no example code) and we need to distinguish between those and the case where the args were not passed at all.\n */\n const needsInteractive =\n args.components === undefined || args.llmProvider === undefined || args.addExample === undefined;\n\n const directory = args.directory || 'src/';\n\n const { projectName, result } = await createMastraProject({\n projectName: args?.projectName,\n createVersionTag: args?.createVersionTag,\n timeout: args?.timeout,\n llmProvider: args?.llmProvider,\n llmApiKey: args?.llmApiKey,\n skills: args?.skills,\n mcpServer: args?.mcpServer,\n needsInteractive,\n });\n\n if (needsInteractive && result) {\n // Track model provider selection from interactive prompt\n const analytics = getAnalytics();\n if (analytics && result?.llmProvider) {\n analytics.trackEvent('cli_model_provider_selected', {\n provider: result.llmProvider,\n selection_method: 'interactive',\n });\n }\n\n const interactiveComponents: Component[] = ['agents', 'tools', 'workflows', 'scorers'];\n\n if (analytics) {\n analytics.trackEvent('cli_components_selected', {\n components: interactiveComponents,\n selection_method: 'interactive',\n });\n }\n\n await init({\n ...result,\n llmApiKey: result?.llmApiKey as string | undefined,\n components: interactiveComponents,\n addExample: true,\n skills: result?.skills || args.skills,\n mcpServer: result?.mcpServer || args.mcpServer,\n versionTag: args.createVersionTag,\n });\n postCreate({ projectName });\n return;\n }\n\n const { components = [], llmProvider = 'openai', addExample = false, llmApiKey } = args;\n\n // Track model provider selection from CLI args\n const cliAnalytics = getAnalytics();\n if (cliAnalytics) {\n cliAnalytics.trackEvent('cli_model_provider_selected', {\n provider: llmProvider,\n selection_method: 'cli_args',\n });\n\n cliAnalytics.trackEvent('cli_components_selected', {\n components,\n has_agents: components.includes('agents'),\n has_tools: components.includes('tools'),\n has_workflows: components.includes('workflows'),\n has_scorers: components.includes('scorers'),\n selection_method: 'cli_args',\n });\n }\n\n await init({\n directory,\n components,\n llmProvider,\n addExample,\n llmApiKey,\n skills: args.skills,\n mcpServer: args.mcpServer,\n versionTag: args.createVersionTag,\n });\n\n postCreate({ projectName });\n};\n\nconst postCreate = ({ projectName }: { projectName: string }) => {\n const packageManager = getPackageManager();\n p.outro(`\n ${color.green('To start your project:')}\n\n ${color.cyan('cd')} ${projectName}\n ${color.cyan(`${packageManager} run dev`)}\n `);\n};\n\nfunction isGitHubUrl(url: string): boolean {\n try {\n const parsedUrl = new URL(url);\n return parsedUrl.hostname === 'github.com' && parsedUrl.pathname.split('/').length >= 3;\n } catch {\n return false;\n }\n}\n\nasync function validateGitHubProject(githubUrl: string): Promise<{ isValid: boolean; errors: string[] }> {\n const errors: string[] = [];\n\n try {\n // Extract owner and repo from GitHub URL\n const urlParts = new URL(githubUrl).pathname.split('/').filter(Boolean);\n const owner = urlParts[0];\n const repo = urlParts[1]?.replace('.git', ''); // Remove .git if present\n\n if (!owner || !repo) {\n throw new Error('Invalid GitHub URL format');\n }\n\n // Try to fetch from main branch first, fallback to master\n const branches = ['main', 'master'];\n let packageJsonContent: string | null = null;\n let indexContent: string | null = null;\n\n for (const branch of branches) {\n try {\n // Fetch package.json\n const packageJsonUrl = `https://raw.githubusercontent.com/${owner}/${repo}/${branch}/package.json`;\n const packageJsonResponse = await fetch(packageJsonUrl);\n\n if (packageJsonResponse.ok) {\n packageJsonContent = await packageJsonResponse.text();\n\n // If package.json found, try to fetch index.ts from same branch\n const indexUrl = `https://raw.githubusercontent.com/${owner}/${repo}/${branch}/src/mastra/index.ts`;\n const indexResponse = await fetch(indexUrl);\n\n if (indexResponse.ok) {\n indexContent = await indexResponse.text();\n }\n\n break; // Found files, no need to check other branches\n }\n } catch {\n // Continue to next branch\n }\n }\n\n if (!packageJsonContent) {\n errors.push('Could not fetch package.json from repository');\n return { isValid: false, errors };\n }\n\n // Check for @mastra/core dependency\n try {\n const packageJson = JSON.parse(packageJsonContent);\n const hasMastraCore =\n packageJson.dependencies?.['@mastra/core'] ||\n packageJson.devDependencies?.['@mastra/core'] ||\n packageJson.peerDependencies?.['@mastra/core'];\n\n if (!hasMastraCore) {\n errors.push('Missing @mastra/core dependency in package.json');\n }\n } catch {\n errors.push('Invalid package.json format');\n }\n\n // Check for src/mastra/index.ts\n if (!indexContent) {\n errors.push('Missing src/mastra/index.ts file');\n } else {\n // Check if it exports a Mastra instance\n const hasMastraExport =\n indexContent.includes('export') && (indexContent.includes('new Mastra') || indexContent.includes('Mastra('));\n\n if (!hasMastraExport) {\n errors.push('src/mastra/index.ts does not export a Mastra instance');\n }\n }\n\n return { isValid: errors.length === 0, errors };\n } catch (error) {\n errors.push(`Failed to validate GitHub repository: ${error instanceof Error ? error.message : 'Unknown error'}`);\n return { isValid: false, errors };\n }\n}\n\nasync function createFromGitHubUrl(url: string): Promise<Template> {\n // Extract owner and repo from GitHub URL\n const urlParts = new URL(url).pathname.split('/').filter(Boolean);\n const owner = urlParts[0] || 'unknown';\n const repo = urlParts[1] || 'unknown';\n\n // Create a temporary Template object for GitHub URLs\n return {\n githubUrl: url,\n title: `${owner}/${repo}`,\n slug: repo,\n agents: [],\n mcp: [],\n tools: [],\n networks: [],\n workflows: [],\n };\n}\n\nasync function createFromTemplate(args: {\n projectName?: string;\n template?: string | boolean;\n timeout?: number;\n injectedAnalytics?: PosthogAnalytics;\n llmProvider?: LLMProvider;\n}) {\n let selectedTemplate: Template | undefined;\n\n if (args.template === true) {\n // Interactive template selection\n const templates = await loadTemplates();\n const selected = await selectTemplate(templates);\n if (!selected) {\n p.log.info('No template selected. Exiting.');\n return;\n }\n selectedTemplate = selected;\n } else if (args.template && typeof args.template === 'string') {\n // Check if it's a GitHub URL\n if (isGitHubUrl(args.template)) {\n // Validate GitHub project before cloning\n const spinner = p.spinner();\n spinner.start('Validating GitHub repository...');\n\n const validation = await validateGitHubProject(args.template);\n\n if (!validation.isValid) {\n spinner.stop('Validation failed');\n p.log.error('This does not appear to be a valid Mastra project:');\n validation.errors.forEach(error => p.log.error(` - ${error}`));\n throw new Error('Invalid Mastra project');\n }\n\n spinner.stop('Valid Mastra project ✓');\n selectedTemplate = await createFromGitHubUrl(args.template);\n } else {\n // Template name provided, find it from the list\n const templates = await loadTemplates();\n const found = findTemplateByName(templates, args.template);\n if (!found) {\n p.log.error(`Template \"${args.template}\" not found. Available templates:`);\n templates.forEach((t: Template) => p.log.info(` - ${t.title} (use: ${t.slug.replace('template-', '')})`));\n throw new Error(`Template \"${args.template}\" not found`);\n }\n selectedTemplate = found;\n }\n }\n\n if (!selectedTemplate) {\n throw new Error('No template selected');\n }\n\n // Get project name\n let projectName = args.projectName;\n if (!projectName) {\n const defaultName = getDefaultProjectName(selectedTemplate);\n const response = await p.text({\n message: 'What is your project name?',\n defaultValue: defaultName,\n placeholder: defaultName,\n });\n\n if (p.isCancel(response)) {\n p.log.info('Project creation cancelled.');\n return;\n }\n\n projectName = response as string;\n }\n\n // Get LLM provider if not specified\n let llmProvider = args.llmProvider;\n if (!llmProvider) {\n const providerResponse = await p.select({\n message: 'Select a default provider:',\n options: LLM_PROVIDERS,\n });\n\n if (p.isCancel(providerResponse)) {\n p.log.info('Project creation cancelled.');\n return;\n }\n\n llmProvider = providerResponse as LLMProvider;\n }\n\n // Handle git initialization for templates\n let initGit = false;\n const gitConfirmResult = await p.confirm({\n message: 'Initialize a new git repository?',\n initialValue: true,\n });\n\n if (!p.isCancel(gitConfirmResult)) {\n initGit = gitConfirmResult;\n }\n\n let projectPath: string | null = null;\n\n try {\n // Track template usage\n const analytics = args.injectedAnalytics || getAnalytics();\n if (analytics) {\n analytics.trackEvent('cli_template_used', {\n template_slug: selectedTemplate.slug,\n template_title: selectedTemplate.title,\n });\n\n // Track model provider selection\n if (llmProvider) {\n analytics.trackEvent('cli_model_provider_selected', {\n provider: llmProvider,\n selection_method: args.llmProvider ? 'cli_args' : 'interactive',\n });\n }\n }\n\n const isBeta = version?.includes('beta') ?? false;\n const isMastraTemplate = selectedTemplate.githubUrl.includes('github.com/mastra-ai/');\n const branch = isBeta && isMastraTemplate ? 'beta' : undefined;\n\n // Clone the template\n projectPath = await cloneTemplate({\n template: selectedTemplate,\n projectName,\n branch,\n llmProvider,\n });\n\n // Install dependencies\n await installDependencies(projectPath);\n\n if (initGit) {\n const s = p.spinner();\n try {\n s.start('Initializing git repository');\n\n await gitInit({ cwd: projectPath });\n\n s.stop('Git repository initialized');\n } catch {\n s.stop();\n }\n }\n\n p.note(`\n ${color.green('Mastra template installed!')}\n\n Add the necessary environment\n variables in your ${color.cyan('.env')} file\n `);\n\n // Show completion message\n postCreate({ projectName });\n } catch (error) {\n // Clean up: remove the created directory on failure\n if (projectPath) {\n try {\n if (fsSync.existsSync(projectPath)) {\n await fs.rm(projectPath, { recursive: true, force: true });\n }\n } catch (cleanupError) {\n // Log but don't throw - we want to exit with the original error\n console.error(\n `Warning: Failed to clean up project directory: ${cleanupError instanceof Error ? cleanupError.message : 'Unknown error'}`,\n );\n }\n }\n p.log.error(`Failed to create project from template: ${error instanceof Error ? error.message : 'Unknown error'}`);\n throw error;\n }\n}\n"]}
|
|
@@ -1520,17 +1520,17 @@ var PosthogAnalytics = class {
|
|
|
1520
1520
|
}
|
|
1521
1521
|
}
|
|
1522
1522
|
// Ensure PostHog client is shutdown properly
|
|
1523
|
-
async shutdown() {
|
|
1523
|
+
async shutdown(timeoutMs) {
|
|
1524
1524
|
if (!this.client) {
|
|
1525
1525
|
return;
|
|
1526
1526
|
}
|
|
1527
1527
|
try {
|
|
1528
|
-
await this.client.shutdown();
|
|
1528
|
+
await this.client.shutdown(timeoutMs);
|
|
1529
1529
|
} catch {
|
|
1530
1530
|
}
|
|
1531
1531
|
}
|
|
1532
1532
|
};
|
|
1533
1533
|
|
|
1534
1534
|
export { COMPONENTS, DepsService, FileService, LLMProvider, LLM_PROVIDERS, PosthogAnalytics, checkAndInstallCoreDeps, checkForPkgJson, createComponentsDir, createMastraDir, getAPIKey, getAnalytics, getModelIdentifier, getPackageManager, getPackageManagerAddCommand, getVersionTag, gitInit, installMastraDocsMCPServer, interactivePrompt, isGitInitialized, parseComponents, parseLlmProvider, parseMcp, parseSkills, setAnalytics, shouldSkipDotenvLoading, writeAPIKey, writeAgentsMarkdown, writeClaudeMarkdown, writeCodeSample, writeIndexFile };
|
|
1535
|
-
//# sourceMappingURL=chunk-
|
|
1536
|
-
//# sourceMappingURL=chunk-
|
|
1535
|
+
//# sourceMappingURL=chunk-SNSX7USI.js.map
|
|
1536
|
+
//# sourceMappingURL=chunk-SNSX7USI.js.map
|