@mastra/ai-sdk 1.9.1 → 1.10.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 +62 -0
- package/dist/index.cjs +14 -4
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -5
- package/dist/index.js.map +1 -1
- package/dist/sse-heartbeat.d.ts +8 -2
- package/dist/sse-heartbeat.d.ts.map +1 -1
- package/package.json +12 -12
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,67 @@
|
|
|
1
1
|
# @mastra/ai-sdk
|
|
2
2
|
|
|
3
|
+
## 1.10.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- Added `withSseHeartbeat()` to the public API so you can keep server-sent event streams alive outside of `chatRoute()`. ([#22116](https://github.com/mastra-ai/mastra/pull/22116))
|
|
8
|
+
|
|
9
|
+
If you build the response yourself in a Next.js, Astro, Nuxt, or SvelteKit route handler, proxies can drop the connection when the stream sends no bytes during a long reasoning burst or slow tool call. `chatRoute()` already avoided this with its `heartbeatMs` option, but the underlying helper was not exported.
|
|
10
|
+
|
|
11
|
+
**Before**
|
|
12
|
+
|
|
13
|
+
```ts
|
|
14
|
+
return createUIMessageStreamResponse({ stream });
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
**After**
|
|
18
|
+
|
|
19
|
+
```ts
|
|
20
|
+
import { withSseHeartbeat } from '@mastra/ai-sdk';
|
|
21
|
+
|
|
22
|
+
return withSseHeartbeat(createUIMessageStreamResponse({ stream }), 15000);
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
`assertValidHeartbeatMs()` is exported alongside it so you can validate a user-supplied interval before streaming. Closes #21954.
|
|
26
|
+
|
|
27
|
+
### Patch Changes
|
|
28
|
+
|
|
29
|
+
- Fixed suspended agent runs resuming on a newer published version. When an agent is resolved from a status selector (for example `{ status: 'published' }`), the version the run started on is now recorded when the run suspends and reused when it resumes, so approval and human-in-the-loop flows finish on the same version they started on. New runs still pick up the latest published version. Fixes #21846 ([#22128](https://github.com/mastra-ai/mastra/pull/22128))
|
|
30
|
+
|
|
31
|
+
- Updated dependencies [[`79f04a7`](https://github.com/mastra-ai/mastra/commit/79f04a7f6c6829da541139f638f2f1d267916e08), [`65edab1`](https://github.com/mastra-ai/mastra/commit/65edab1c233d17b8f163bad12fca410d0e6f16b1), [`1e47b75`](https://github.com/mastra-ai/mastra/commit/1e47b7520cab4cfaa8daed52f17e2e6d14ff7539), [`ab20a38`](https://github.com/mastra-ai/mastra/commit/ab20a38d0275f8d85e0f3833bd87ef487bcc609f), [`fd4d5fe`](https://github.com/mastra-ai/mastra/commit/fd4d5fe4f943699b85db5e74404f190d5a6b8c2a), [`ae8790c`](https://github.com/mastra-ai/mastra/commit/ae8790c4bfaa088d2ab279d1dcc06f326b9fd109), [`2c85f42`](https://github.com/mastra-ai/mastra/commit/2c85f428e04ccd63ea31a7ec80b5b327afdad555), [`11bbeb9`](https://github.com/mastra-ai/mastra/commit/11bbeb9b108ef2264e05acefc6dafb9cbb342921), [`48ef1f1`](https://github.com/mastra-ai/mastra/commit/48ef1f1d24eedafbb07f64e659a81b52b67b8bf6), [`aa3a85d`](https://github.com/mastra-ai/mastra/commit/aa3a85daf094c683bb97efdf4b6a696d2e474af5), [`d29d06f`](https://github.com/mastra-ai/mastra/commit/d29d06fe00bbd35b4571150ea04c59d2ed783c71), [`e6516df`](https://github.com/mastra-ai/mastra/commit/e6516dfcdae4f4ac0e7971d84359a81385ee602f), [`1a485f3`](https://github.com/mastra-ai/mastra/commit/1a485f3538f5ec64d58bd8b5e1e99de0c695c87b), [`0d37487`](https://github.com/mastra-ai/mastra/commit/0d37487d9f349388a3f1cef6a536cf9dcc4b6273), [`8661d7d`](https://github.com/mastra-ai/mastra/commit/8661d7d7179f0a024456aabdd8679bcecd09ac28), [`dbbfeb8`](https://github.com/mastra-ai/mastra/commit/dbbfeb85ec949dc9ebc0755e1ad262e4f5eba8db), [`575e343`](https://github.com/mastra-ai/mastra/commit/575e343900451021d96110916497d334af7bc252), [`0b2a3d1`](https://github.com/mastra-ai/mastra/commit/0b2a3d1783875c5b97b7b36ab3d03d7360e0dde7), [`6bb5d71`](https://github.com/mastra-ai/mastra/commit/6bb5d7193fe9166b219f0fccae17db7a5ae86e65), [`3cc9d00`](https://github.com/mastra-ai/mastra/commit/3cc9d00b2b4333e0377a5e9df5eff92c17ce7630), [`cacb839`](https://github.com/mastra-ai/mastra/commit/cacb8392d9e74189b56d857290b0615f98a2683d), [`57de7d6`](https://github.com/mastra-ai/mastra/commit/57de7d644ba7146edb4e9e6111ec4fa98c3a59e9), [`c8e4cea`](https://github.com/mastra-ai/mastra/commit/c8e4ceac9a390d78c8327dff3cdb2861dd71957f), [`ed01e9a`](https://github.com/mastra-ai/mastra/commit/ed01e9a807514a904374bf687a7b8f18750f6f78), [`b47b26e`](https://github.com/mastra-ai/mastra/commit/b47b26e6fe95cb8a3482be2c5e52de157fe59d0b), [`0d37487`](https://github.com/mastra-ai/mastra/commit/0d37487d9f349388a3f1cef6a536cf9dcc4b6273), [`733a537`](https://github.com/mastra-ai/mastra/commit/733a537489a858b5880b2e98809334fba895a221), [`e8e299c`](https://github.com/mastra-ai/mastra/commit/e8e299cc6abdfc39947e2fec25803493015d3882), [`edfc548`](https://github.com/mastra-ai/mastra/commit/edfc548886bc7bae17b681f8b6b41a47eb32bcd2), [`b05f486`](https://github.com/mastra-ai/mastra/commit/b05f48612984d5fe2447ea2d6cdd5c604d285b97), [`a8a4871`](https://github.com/mastra-ai/mastra/commit/a8a4871215f51da95c47129602157ce5372f634a), [`eb9ecaa`](https://github.com/mastra-ai/mastra/commit/eb9ecaa89c36e889749e3b825cfc507ce7f7980b), [`4ff3ee2`](https://github.com/mastra-ai/mastra/commit/4ff3ee2bff7ed07528b4817f8f49639031c72a4d), [`9207dfa`](https://github.com/mastra-ai/mastra/commit/9207dfab8062e5fc68b751684797ff86fe0b4e70), [`5165cdc`](https://github.com/mastra-ai/mastra/commit/5165cdcdcf50e144bb8113278535196cc9b07065), [`e737014`](https://github.com/mastra-ai/mastra/commit/e737014e0fc7035759762bb5b48baef1d6c0f6a7), [`6bb5d71`](https://github.com/mastra-ai/mastra/commit/6bb5d7193fe9166b219f0fccae17db7a5ae86e65), [`f591643`](https://github.com/mastra-ai/mastra/commit/f591643becdf0be9bddce6ba1748e64bc30d77f1), [`63796ba`](https://github.com/mastra-ai/mastra/commit/63796ba0fda60253be17535e68f6bbbf1e6ffa09), [`b1ad324`](https://github.com/mastra-ai/mastra/commit/b1ad324d657f3544b0701332aef7eb10e9a36258), [`61c566d`](https://github.com/mastra-ai/mastra/commit/61c566dd2f2cde2b23ed8f139924e530d4202214), [`c24754c`](https://github.com/mastra-ai/mastra/commit/c24754c1fb6fe144e5051e536e98c8a18b0214ac), [`12c61d2`](https://github.com/mastra-ai/mastra/commit/12c61d280c8cb208bc3c8dbcbe5dcc60cf9d1cd0), [`c46eb09`](https://github.com/mastra-ai/mastra/commit/c46eb09ce4987509af57a0ac582c61241a6dd2f1), [`9ee8120`](https://github.com/mastra-ai/mastra/commit/9ee8120ce17f76b9f617489e05a283353742690a), [`d975e92`](https://github.com/mastra-ai/mastra/commit/d975e924d4936f46c386bd3dee39c671720289f6), [`45dd6ee`](https://github.com/mastra-ai/mastra/commit/45dd6ee089bd7df0d0c98a10098e483fd388e04a), [`4e9a228`](https://github.com/mastra-ai/mastra/commit/4e9a2283d5fd6ed1b70a2751eb3dc2cbf82ada20), [`d6ce34a`](https://github.com/mastra-ai/mastra/commit/d6ce34aeceb06ddf3d595a1eed5cc74f481a46a1), [`f95f468`](https://github.com/mastra-ai/mastra/commit/f95f468cf1e7c2b924a13826494f98b8f2ccd581), [`30ed33e`](https://github.com/mastra-ai/mastra/commit/30ed33ee14084a26019aba15fceadda6d6ddefaf), [`04a815f`](https://github.com/mastra-ai/mastra/commit/04a815fc8971d29e97fcdcc5008a1eb472fc00ff), [`1cfa878`](https://github.com/mastra-ai/mastra/commit/1cfa8784d8da0dfaa0317e5048bc48b6084a5ea5), [`9a12ef3`](https://github.com/mastra-ai/mastra/commit/9a12ef3fccf3f4186db0f294f4ee1f02cf4d8db2), [`32d3583`](https://github.com/mastra-ai/mastra/commit/32d358332cb8ac2306b83b73cf3536e74dbd435e), [`7960688`](https://github.com/mastra-ai/mastra/commit/7960688828e04eaf3106e34f7758fa580257eef6), [`91ad69d`](https://github.com/mastra-ai/mastra/commit/91ad69d64994c89199b0c55399e64ed91c61df2f), [`8dc408d`](https://github.com/mastra-ai/mastra/commit/8dc408d34438f9e13297f792c11a5cfd6cf952e1), [`c92def1`](https://github.com/mastra-ai/mastra/commit/c92def10a13c822972c96f0a4ca6ffc1f4258aed), [`63041eb`](https://github.com/mastra-ai/mastra/commit/63041eb4c50b520a0a80e03d4cd6ea99f67715a0), [`c118318`](https://github.com/mastra-ai/mastra/commit/c1183181c9804303db4b511c2e2648f8b714712b), [`c5eaec5`](https://github.com/mastra-ai/mastra/commit/c5eaec5a860d80d0e3805e67db0414b87ac8cbed), [`fc07c64`](https://github.com/mastra-ai/mastra/commit/fc07c6465043e08e99193a6751a01c56ffc2e7a1), [`cced745`](https://github.com/mastra-ai/mastra/commit/cced745a056ec2225c5bc702e32d848847aa8b65), [`542dee2`](https://github.com/mastra-ai/mastra/commit/542dee254167f974ff8cbbbfc0ce10f9a2616a7b), [`3c19dce`](https://github.com/mastra-ai/mastra/commit/3c19dcef8e73062a80627a4927eae3ec11145afd), [`aca2869`](https://github.com/mastra-ai/mastra/commit/aca2869b2031982f3c4a2f52525c9be7cf123ef8), [`a58483c`](https://github.com/mastra-ai/mastra/commit/a58483cff1a9d41fce7c931843f48cb0ac450f64), [`a58483c`](https://github.com/mastra-ai/mastra/commit/a58483cff1a9d41fce7c931843f48cb0ac450f64), [`e6f8450`](https://github.com/mastra-ai/mastra/commit/e6f845074d478527026b18d85031b23353e1d0a4), [`895e9df`](https://github.com/mastra-ai/mastra/commit/895e9dfc17d6f34299eca64e317ded9e5f5e5ef8), [`e66b2ba`](https://github.com/mastra-ai/mastra/commit/e66b2ba100db63eaeab6e21e1ea34b113f2ec781), [`3e8727e`](https://github.com/mastra-ai/mastra/commit/3e8727e11ec1a5d733acedb5c872896394be18c1)]:
|
|
32
|
+
- @mastra/core@1.62.0
|
|
33
|
+
|
|
34
|
+
## 1.10.0-alpha.0
|
|
35
|
+
|
|
36
|
+
### Minor Changes
|
|
37
|
+
|
|
38
|
+
- Added `withSseHeartbeat()` to the public API so you can keep server-sent event streams alive outside of `chatRoute()`. ([#22116](https://github.com/mastra-ai/mastra/pull/22116))
|
|
39
|
+
|
|
40
|
+
If you build the response yourself in a Next.js, Astro, Nuxt, or SvelteKit route handler, proxies can drop the connection when the stream sends no bytes during a long reasoning burst or slow tool call. `chatRoute()` already avoided this with its `heartbeatMs` option, but the underlying helper was not exported.
|
|
41
|
+
|
|
42
|
+
**Before**
|
|
43
|
+
|
|
44
|
+
```ts
|
|
45
|
+
return createUIMessageStreamResponse({ stream });
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
**After**
|
|
49
|
+
|
|
50
|
+
```ts
|
|
51
|
+
import { withSseHeartbeat } from '@mastra/ai-sdk';
|
|
52
|
+
|
|
53
|
+
return withSseHeartbeat(createUIMessageStreamResponse({ stream }), 15000);
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
`assertValidHeartbeatMs()` is exported alongside it so you can validate a user-supplied interval before streaming. Closes #21954.
|
|
57
|
+
|
|
58
|
+
### Patch Changes
|
|
59
|
+
|
|
60
|
+
- Fixed suspended agent runs resuming on a newer published version. When an agent is resolved from a status selector (for example `{ status: 'published' }`), the version the run started on is now recorded when the run suspends and reused when it resumes, so approval and human-in-the-loop flows finish on the same version they started on. New runs still pick up the latest published version. Fixes #21846 ([#22128](https://github.com/mastra-ai/mastra/pull/22128))
|
|
61
|
+
|
|
62
|
+
- Updated dependencies [[`2c85f42`](https://github.com/mastra-ai/mastra/commit/2c85f428e04ccd63ea31a7ec80b5b327afdad555), [`11bbeb9`](https://github.com/mastra-ai/mastra/commit/11bbeb9b108ef2264e05acefc6dafb9cbb342921), [`1a485f3`](https://github.com/mastra-ai/mastra/commit/1a485f3538f5ec64d58bd8b5e1e99de0c695c87b), [`0d37487`](https://github.com/mastra-ai/mastra/commit/0d37487d9f349388a3f1cef6a536cf9dcc4b6273), [`8661d7d`](https://github.com/mastra-ai/mastra/commit/8661d7d7179f0a024456aabdd8679bcecd09ac28), [`575e343`](https://github.com/mastra-ai/mastra/commit/575e343900451021d96110916497d334af7bc252), [`cacb839`](https://github.com/mastra-ai/mastra/commit/cacb8392d9e74189b56d857290b0615f98a2683d), [`b47b26e`](https://github.com/mastra-ai/mastra/commit/b47b26e6fe95cb8a3482be2c5e52de157fe59d0b), [`0d37487`](https://github.com/mastra-ai/mastra/commit/0d37487d9f349388a3f1cef6a536cf9dcc4b6273), [`c46eb09`](https://github.com/mastra-ai/mastra/commit/c46eb09ce4987509af57a0ac582c61241a6dd2f1), [`30ed33e`](https://github.com/mastra-ai/mastra/commit/30ed33ee14084a26019aba15fceadda6d6ddefaf), [`91ad69d`](https://github.com/mastra-ai/mastra/commit/91ad69d64994c89199b0c55399e64ed91c61df2f), [`8dc408d`](https://github.com/mastra-ai/mastra/commit/8dc408d34438f9e13297f792c11a5cfd6cf952e1), [`c92def1`](https://github.com/mastra-ai/mastra/commit/c92def10a13c822972c96f0a4ca6ffc1f4258aed), [`c5eaec5`](https://github.com/mastra-ai/mastra/commit/c5eaec5a860d80d0e3805e67db0414b87ac8cbed), [`e66b2ba`](https://github.com/mastra-ai/mastra/commit/e66b2ba100db63eaeab6e21e1ea34b113f2ec781)]:
|
|
63
|
+
- @mastra/core@1.62.0-alpha.3
|
|
64
|
+
|
|
3
65
|
## 1.9.1
|
|
4
66
|
|
|
5
67
|
### Patch Changes
|
package/dist/index.cjs
CHANGED
|
@@ -32,7 +32,7 @@ let _mastra_core_request_context = require("@mastra/core/request-context");
|
|
|
32
32
|
let _mastra_core_agent = require("@mastra/core/agent");
|
|
33
33
|
let _mastra_core_di = require("@mastra/core/di");
|
|
34
34
|
let _mastra_core_processors = require("@mastra/core/processors");
|
|
35
|
-
//#region ../../packages/_vendored/ai_v5/dist/dist-
|
|
35
|
+
//#region ../../packages/_vendored/ai_v5/dist/dist-nVfjvSbw.js
|
|
36
36
|
var marker$1$6 = "vercel.ai.error";
|
|
37
37
|
var symbol$1$7 = Symbol.for(marker$1$6);
|
|
38
38
|
var _a$1$7;
|
|
@@ -559,6 +559,7 @@ async function cancelResponseBody$2(response) {
|
|
|
559
559
|
var initialGlobalFetch$2 = globalThis.fetch;
|
|
560
560
|
isNodeDefaultFetch$2(initialGlobalFetch$2);
|
|
561
561
|
function isNodeDefaultFetch$2(fetch) {
|
|
562
|
+
if (typeof fetch !== "function") return false;
|
|
562
563
|
const source = Function.prototype.toString.call(fetch);
|
|
563
564
|
return source.includes("internal/deps/undici") || source.includes("lazy loading of undici");
|
|
564
565
|
}
|
|
@@ -5049,7 +5050,7 @@ function createUIMessageStream$2({ execute, onError = () => "An error occurred."
|
|
|
5049
5050
|
});
|
|
5050
5051
|
}
|
|
5051
5052
|
//#endregion
|
|
5052
|
-
//#region ../../packages/_vendored/ai_v6/dist/dist-
|
|
5053
|
+
//#region ../../packages/_vendored/ai_v6/dist/dist-Gd4EIxPM.js
|
|
5053
5054
|
var marker$1$4 = "vercel.ai.error";
|
|
5054
5055
|
var symbol$1$4 = Symbol.for(marker$1$4);
|
|
5055
5056
|
var _a$1$4;
|
|
@@ -5392,6 +5393,7 @@ var _b$2;
|
|
|
5392
5393
|
var initialGlobalFetch$1 = globalThis.fetch;
|
|
5393
5394
|
isNodeDefaultFetch$1(initialGlobalFetch$1);
|
|
5394
5395
|
function isNodeDefaultFetch$1(fetch) {
|
|
5396
|
+
if (typeof fetch !== "function") return false;
|
|
5395
5397
|
const source = Function.prototype.toString.call(fetch);
|
|
5396
5398
|
return source.includes("internal/deps/undici") || source.includes("lazy loading of undici");
|
|
5397
5399
|
}
|
|
@@ -13671,8 +13673,14 @@ function assertValidHeartbeatMs(heartbeatMs) {
|
|
|
13671
13673
|
if (heartbeatMs !== void 0 && !(heartbeatMs <= 0) && (!Number.isFinite(heartbeatMs) || heartbeatMs > MAX_TIMEOUT_MS)) throw new RangeError(`heartbeatMs must be a finite number no greater than ${MAX_TIMEOUT_MS}`);
|
|
13672
13674
|
}
|
|
13673
13675
|
/**
|
|
13674
|
-
*
|
|
13675
|
-
*
|
|
13676
|
+
* Wraps an SSE `Response` so it emits periodic `: heartbeat` comments while the source is idle,
|
|
13677
|
+
* keeping connections alive through proxies that close idle streams.
|
|
13678
|
+
*
|
|
13679
|
+
* Heartbeats are only inserted between complete SSE frames. AI SDK serialization uses LF-delimited
|
|
13680
|
+
* frames, which this wrapper preserves and relies on.
|
|
13681
|
+
*
|
|
13682
|
+
* Returns the input response unchanged when `heartbeatMs` is omitted, is `<= 0`, or the response has
|
|
13683
|
+
* no body. Throws a `RangeError` when `heartbeatMs` is enabled but cannot be scheduled with a timer.
|
|
13676
13684
|
*/
|
|
13677
13685
|
function withSseHeartbeat(response, heartbeatMs) {
|
|
13678
13686
|
assertValidHeartbeatMs(heartbeatMs);
|
|
@@ -15264,6 +15272,7 @@ function toAISdkFormat() {
|
|
|
15264
15272
|
throw new Error("toAISdkFormat() has been deprecated. Please use toAISdkStream() instead.\n\nMigration:\n import { toAISdkFormat } from \"@mastra/ai-sdk\";\n // Change to:\n import { toAISdkStream } from \"@mastra/ai-sdk\";\n\nThe function signature remains the same.");
|
|
15265
15273
|
}
|
|
15266
15274
|
//#endregion
|
|
15275
|
+
exports.assertValidHeartbeatMs = assertValidHeartbeatMs;
|
|
15267
15276
|
exports.chatRoute = chatRoute;
|
|
15268
15277
|
exports.handleChatStream = handleChatStream;
|
|
15269
15278
|
exports.handleNetworkStream = handleNetworkStream;
|
|
@@ -15274,6 +15283,7 @@ exports.toAISdkFormat = toAISdkFormat;
|
|
|
15274
15283
|
exports.toAISdkStream = toAISdkStream;
|
|
15275
15284
|
exports.toAISdkV5Stream = toAISdkV5Stream;
|
|
15276
15285
|
exports.withMastra = withMastra;
|
|
15286
|
+
exports.withSseHeartbeat = withSseHeartbeat;
|
|
15277
15287
|
exports.workflowRoute = workflowRoute;
|
|
15278
15288
|
exports.workflowSnapshotToStream = workflowSnapshotToStream;
|
|
15279
15289
|
|