ai 6.0.310 → 6.0.312
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 +17 -0
- package/dist/index.js +12 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +12 -1
- package/dist/index.mjs.map +1 -1
- package/dist/internal/index.js +1 -1
- package/dist/internal/index.mjs +1 -1
- package/docs/03-ai-sdk-core/16-mcp-tools.mdx +29 -2
- package/package.json +4 -4
- package/src/generate-text/stream-text.ts +14 -0
package/dist/internal/index.js
CHANGED
|
@@ -164,7 +164,7 @@ function detectMediaType({
|
|
|
164
164
|
var import_provider_utils2 = require("@ai-sdk/provider-utils");
|
|
165
165
|
|
|
166
166
|
// src/version.ts
|
|
167
|
-
var VERSION = true ? "6.0.
|
|
167
|
+
var VERSION = true ? "6.0.312" : "0.0.0-test";
|
|
168
168
|
|
|
169
169
|
// src/util/download/download.ts
|
|
170
170
|
var download = async ({
|
package/dist/internal/index.mjs
CHANGED
|
@@ -156,6 +156,33 @@ tokens are invalid.
|
|
|
156
156
|
|
|
157
157
|
### OAuth Authorization Server Validation
|
|
158
158
|
|
|
159
|
+
Pre-registered confidential clients must be bound to their authorization server
|
|
160
|
+
before starting OAuth. Set `issuer` on the credentials returned by
|
|
161
|
+
`clientInformation()` to the issuer of the server that registered the client:
|
|
162
|
+
|
|
163
|
+
```typescript
|
|
164
|
+
clientInformation() {
|
|
165
|
+
return {
|
|
166
|
+
client_id: process.env.OAUTH_CLIENT_ID!,
|
|
167
|
+
client_secret: process.env.OAUTH_CLIENT_SECRET!,
|
|
168
|
+
issuer: 'https://accounts.example.com',
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
The issuer must exactly match the discovered issuer. The SDK rejects a mismatch
|
|
174
|
+
before redirecting or sending credentials, even if a stored authorization flow
|
|
175
|
+
pin names the discovered server. Dynamic client registration attaches this
|
|
176
|
+
binding automatically.
|
|
177
|
+
|
|
178
|
+
Existing complete authorization server bindings on credentials, stored tokens,
|
|
179
|
+
or `authorizationServerInformation()` are also supported. Without a binding,
|
|
180
|
+
a pre-registered client secret or custom `addClientAuthentication` handler is
|
|
181
|
+
rejected, even when `validateAuthorizationServerURL` accepts the selected server.
|
|
182
|
+
Approving a server does not establish that the credentials belong to it.
|
|
183
|
+
Do not derive the credential issuer from the MCP server's metadata; configure it
|
|
184
|
+
from the client's registration.
|
|
185
|
+
|
|
159
186
|
When using MCP OAuth in server-side applications, the MCP server can advertise
|
|
160
187
|
the OAuth authorization server to use. If you connect to MCP servers outside
|
|
161
188
|
your control, implement `validateAuthorizationServerURL` on your
|
|
@@ -183,8 +210,8 @@ const myOAuthClientProvider = {
|
|
|
183
210
|
```
|
|
184
211
|
|
|
185
212
|
This hook is called before the SDK fetches authorization server metadata, so a
|
|
186
|
-
rejected URL is not requested.
|
|
187
|
-
|
|
213
|
+
rejected URL is not requested. The hook is an optional additional restriction;
|
|
214
|
+
it does not replace the credential binding required for confidential clients.
|
|
188
215
|
|
|
189
216
|
### OAuth Callback Issuer Validation
|
|
190
217
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ai",
|
|
3
|
-
"version": "6.0.
|
|
3
|
+
"version": "6.0.312",
|
|
4
4
|
"description": "AI SDK by Vercel - build apps like ChatGPT, Claude, Gemini, and more with a single interface for any model using the Vercel AI Gateway or go direct to OpenAI, Anthropic, Google, or any other model provider.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"sideEffects": false,
|
|
@@ -45,9 +45,9 @@
|
|
|
45
45
|
},
|
|
46
46
|
"dependencies": {
|
|
47
47
|
"@opentelemetry/api": "^1.9.0",
|
|
48
|
-
"@ai-sdk/gateway": "3.0.
|
|
48
|
+
"@ai-sdk/gateway": "3.0.219",
|
|
49
49
|
"@ai-sdk/provider": "3.0.19",
|
|
50
|
-
"@ai-sdk/provider-utils": "4.0.
|
|
50
|
+
"@ai-sdk/provider-utils": "4.0.62"
|
|
51
51
|
},
|
|
52
52
|
"devDependencies": {
|
|
53
53
|
"@edge-runtime/vm": "^5.0.0",
|
|
@@ -58,7 +58,7 @@
|
|
|
58
58
|
"tsx": "^4.19.2",
|
|
59
59
|
"typescript": "5.8.3",
|
|
60
60
|
"zod": "3.25.76",
|
|
61
|
-
"@ai-sdk/google": "3.0.
|
|
61
|
+
"@ai-sdk/google": "3.0.137",
|
|
62
62
|
"@ai-sdk/test-server": "1.0.6",
|
|
63
63
|
"@vercel/ai-tsconfig": "0.0.0"
|
|
64
64
|
},
|
|
@@ -1411,6 +1411,19 @@ class DefaultStreamTextResult<
|
|
|
1411
1411
|
},
|
|
1412
1412
|
});
|
|
1413
1413
|
|
|
1414
|
+
// introduce a gate that prevent further tokens from
|
|
1415
|
+
// being emitted after a transform calls stopStream
|
|
1416
|
+
let isRunning = true;
|
|
1417
|
+
stream = stream.pipeThrough(
|
|
1418
|
+
new TransformStream({
|
|
1419
|
+
async transform(chunk, controller) {
|
|
1420
|
+
if (isRunning) {
|
|
1421
|
+
controller.enqueue(chunk);
|
|
1422
|
+
}
|
|
1423
|
+
},
|
|
1424
|
+
}),
|
|
1425
|
+
);
|
|
1426
|
+
|
|
1414
1427
|
// transform the stream before output parsing
|
|
1415
1428
|
// to enable replacement of stream segments:
|
|
1416
1429
|
for (const transform of transforms) {
|
|
@@ -1419,6 +1432,7 @@ class DefaultStreamTextResult<
|
|
|
1419
1432
|
tools: tools as TOOLS,
|
|
1420
1433
|
stopStream() {
|
|
1421
1434
|
stitchableStream.terminate();
|
|
1435
|
+
isRunning = false;
|
|
1422
1436
|
},
|
|
1423
1437
|
}),
|
|
1424
1438
|
);
|