From 4ff9ed9759284e20b5e52ed1880a0bb11104154d Mon Sep 17 00:00:00 2001 From: Mykhailo Chalyi Date: Mon, 6 Apr 2026 12:04:46 +0000 Subject: [PATCH 1/6] fix(examples): migrate OpenAI examples to Responses API gpt-5.4 no longer supports reasoning_effort with function tools on /v1/chat/completions. Migrate openai_tool.mjs to the Responses API which supports both. Remove reasoning_effort from Vercel AI SDK and LangChain examples since those libraries use chat completions internally. --- examples/langchain_agent.mjs | 1 - examples/langchain_integration.mjs | 1 - examples/openai_tool.mjs | 104 ++++++++++++++++------------- examples/vercel_ai_tool.mjs | 2 +- 4 files changed, 58 insertions(+), 50 deletions(-) diff --git a/examples/langchain_agent.mjs b/examples/langchain_agent.mjs index 209faf2b..887a5206 100644 --- a/examples/langchain_agent.mjs +++ b/examples/langchain_agent.mjs @@ -54,7 +54,6 @@ async function runAgent(userMessage) { const model = new ChatOpenAI({ model: "gpt-5.4", - modelKwargs: { reasoning_effort: "none" }, }); const agent = createReactAgent({ diff --git a/examples/langchain_integration.mjs b/examples/langchain_integration.mjs index 53c78b21..e57cbde1 100644 --- a/examples/langchain_integration.mjs +++ b/examples/langchain_integration.mjs @@ -65,7 +65,6 @@ console.log(`Scripted tool result:\n${scriptedResult.trim()}`); async function runAgent() { const model = new ChatOpenAI({ model: "gpt-5.4", - modelKwargs: { reasoning_effort: "none" }, }); const agent = createReactAgent({ diff --git a/examples/openai_tool.mjs b/examples/openai_tool.mjs index 33dc5098..d4e8123b 100644 --- a/examples/openai_tool.mjs +++ b/examples/openai_tool.mjs @@ -2,9 +2,9 @@ /** * Bashkit as an OpenAI function-calling tool. * - * Uses the official `openai` package to wire BashTool as a function - * the model can call. The model decides when to execute bash commands, - * and results are fed back for the next response. + * Uses the official `openai` package with the Responses API to wire + * BashTool as a function the model can call. The model decides when + * to execute bash commands, and results are fed back for the next turn. * * Prerequisites: * npm install openai @@ -22,27 +22,25 @@ import { BashTool } from "@everruns/bashkit"; const openai = new OpenAI(); const bashTool = new BashTool({ username: "agent", hostname: "sandbox" }); -// Define the tool for OpenAI function calling +// Define the tool for OpenAI Responses API const tools = [ { type: "function", - function: { - name: "bash", - description: bashTool.shortDescription, - parameters: { - type: "object", - properties: { - commands: { - type: "string", - description: - "Bash commands to execute in a sandboxed virtual environment", - }, + name: "bash", + description: bashTool.shortDescription, + parameters: { + type: "object", + properties: { + commands: { + type: "string", + description: + "Bash commands to execute in a sandboxed virtual environment", }, - required: ["commands"], - additionalProperties: false, }, - strict: true, + required: ["commands"], + additionalProperties: false, }, + strict: true, }, ]; @@ -65,50 +63,62 @@ function executeTool(name, args) { async function runAgent(userMessage) { console.log(`\nUser: ${userMessage}\n`); - const messages = [ - { - role: "system", - content: [ - "You have access to a sandboxed bash interpreter.", - "Use the bash tool to run commands when needed.", - bashTool.systemPrompt(), - ].join("\n"), - }, - { role: "user", content: userMessage }, - ]; + const instructions = [ + "You have access to a sandboxed bash interpreter.", + "Use the bash tool to run commands when needed.", + bashTool.systemPrompt(), + ].join("\n"); + + let input = [{ role: "user", content: userMessage }]; + let previousResponseId = null; // Loop until the model produces a final text response for (let step = 0; step < 10; step++) { - const response = await openai.chat.completions.create({ + const response = await openai.responses.create({ model: "gpt-5.4", - reasoning_effort: "none", - messages, + reasoning: { effort: "none" }, + instructions, + input, tools, + ...(previousResponseId && { previous_response_id: previousResponseId }), }); - const choice = response.choices[0]; - messages.push(choice.message); + previousResponseId = response.id; + + // Collect function calls from output + const functionCalls = response.output.filter( + (item) => item.type === "function_call" + ); - // If no tool calls, we have the final answer - if (!choice.message.tool_calls || choice.message.tool_calls.length === 0) { - console.log(`Assistant: ${choice.message.content}\n`); - return choice.message.content; + // If no tool calls, find the text output + if (functionCalls.length === 0) { + const textOutput = response.output.find( + (item) => item.type === "message" + ); + const text = + textOutput?.content + ?.filter((c) => c.type === "output_text") + .map((c) => c.text) + .join("") ?? "(no response)"; + console.log(`Assistant: ${text}\n`); + return text; } - // Execute each tool call - for (const toolCall of choice.message.tool_calls) { - const args = JSON.parse(toolCall.function.arguments); - console.log(` [tool] ${toolCall.function.name}: ${args.commands}`); + // Execute each tool call and build input for next turn + input = []; + for (const call of functionCalls) { + const args = JSON.parse(call.arguments); + console.log(` [tool] ${call.name}: ${args.commands}`); - const result = executeTool(toolCall.function.name, args); + const result = executeTool(call.name, args); const parsed = JSON.parse(result); if (parsed.stdout) console.log(` [out] ${parsed.stdout.trim()}`); if (parsed.stderr) console.log(` [err] ${parsed.stderr.trim()}`); - messages.push({ - role: "tool", - tool_call_id: toolCall.id, - content: result, + input.push({ + type: "function_call_output", + call_id: call.call_id, + output: result, }); } } diff --git a/examples/vercel_ai_tool.mjs b/examples/vercel_ai_tool.mjs index 92e6da49..70353b35 100644 --- a/examples/vercel_ai_tool.mjs +++ b/examples/vercel_ai_tool.mjs @@ -47,7 +47,7 @@ async function runAgent(userMessage) { console.log(`\nUser: ${userMessage}\n`); const result = await generateText({ - model: openai("gpt-5.4", { reasoningEffort: "none" }), + model: openai("gpt-5.4"), system: [ "You have access to a sandboxed bash interpreter.", "Use the bash tool to run commands when needed.", From f07eac9e5f51abba0172e42493792d72c04e04fd Mon Sep 17 00:00:00 2001 From: Mykhailo Chalyi Date: Mon, 6 Apr 2026 13:02:36 +0000 Subject: [PATCH 2/6] chore(js): add missing tsc output files to .gitignore Add ai.*, anthropic.*, openai.* build artifacts to .gitignore alongside the existing wrapper.* and langchain.* entries. --- crates/bashkit-js/.gitignore | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/crates/bashkit-js/.gitignore b/crates/bashkit-js/.gitignore index 7fbd5ff5..5d47fda0 100644 --- a/crates/bashkit-js/.gitignore +++ b/crates/bashkit-js/.gitignore @@ -20,7 +20,7 @@ bashkit.wasi-browser.js wasi-worker.mjs wasi-worker-browser.mjs -# tsc output (source is wrapper.ts, langchain.ts) +# tsc output (source is wrapper.ts, langchain.ts, ai.ts, anthropic.ts, openai.ts) wrapper.js wrapper.d.ts wrapper.d.ts.map @@ -29,6 +29,18 @@ langchain.js langchain.d.ts langchain.d.ts.map langchain.js.map +ai.js +ai.d.ts +ai.d.ts.map +ai.js.map +anthropic.js +anthropic.d.ts +anthropic.d.ts.map +anthropic.js.map +openai.js +openai.d.ts +openai.d.ts.map +openai.js.map # Lockfile managed by CI Cargo.lock From 874dfcc170bbb5eeab2ebd92e53567d2bc9ee0f9 Mon Sep 17 00:00:00 2001 From: Mykhailo Chalyi Date: Mon, 6 Apr 2026 13:06:24 +0000 Subject: [PATCH 3/6] fix(examples): bump @ai-sdk/openai to v2 for AI SDK 5 compat AI SDK 5 (ai@^5) requires providers implementing spec v2. @ai-sdk/openai v1 only implements v1, causing UnsupportedModelVersionError on vercel_ai_tool.mjs. --- examples/package.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/package.json b/examples/package.json index 2627a80b..16cc5e3d 100644 --- a/examples/package.json +++ b/examples/package.json @@ -8,12 +8,12 @@ "@everruns/bashkit": "latest" }, "devDependencies": { - "openai": "^5", - "ai": "^5.0.52", - "@ai-sdk/openai": "^1", + "@ai-sdk/openai": "^2", "@langchain/core": "^0.3", "@langchain/langgraph": "^0.2", "@langchain/openai": "^0.5", + "ai": "^5.0.52", + "openai": "^5", "zod": "^3" }, "overrides": { From 0d3eb66291bde8ca0986854c96cad28f681d1331 Mon Sep 17 00:00:00 2001 From: Mykhailo Chalyi Date: Mon, 6 Apr 2026 13:06:52 +0000 Subject: [PATCH 4/6] chore(examples): update package-lock.json for @ai-sdk/openai v2 --- examples/package-lock.json | 86 ++++++++------------------------------ 1 file changed, 17 insertions(+), 69 deletions(-) diff --git a/examples/package-lock.json b/examples/package-lock.json index 80fc4ccb..6a8bad41 100644 --- a/examples/package-lock.json +++ b/examples/package-lock.json @@ -11,7 +11,7 @@ "@everruns/bashkit": "latest" }, "devDependencies": { - "@ai-sdk/openai": "^1", + "@ai-sdk/openai": "^2.0.102", "@langchain/core": "^0.3", "@langchain/langgraph": "^0.2", "@langchain/openai": "^0.5", @@ -38,19 +38,6 @@ "zod": "^3.25.76 || ^4.1.8" } }, - "node_modules/@ai-sdk/gateway/node_modules/@ai-sdk/provider": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@ai-sdk/provider/-/provider-2.0.1.tgz", - "integrity": "sha512-KCUwswvsC5VsW2PWFqF8eJgSCu5Ysj7m1TxiHTVA6g7k360bk0RNQENT8KTMAYEs+8fWPD3Uu4dEmzGHc+jGng==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "json-schema": "^0.4.0" - }, - "engines": { - "node": ">=18" - } - }, "node_modules/@ai-sdk/gateway/node_modules/@ai-sdk/provider-utils": { "version": "3.0.22", "resolved": "https://registry.npmjs.org/@ai-sdk/provider-utils/-/provider-utils-3.0.22.tgz", @@ -70,26 +57,26 @@ } }, "node_modules/@ai-sdk/openai": { - "version": "1.3.24", - "resolved": "https://registry.npmjs.org/@ai-sdk/openai/-/openai-1.3.24.tgz", - "integrity": "sha512-GYXnGJTHRTZc4gJMSmFRgEQudjqd4PUN0ZjQhPwOAYH1yOAvQoG/Ikqs+HyISRbLPCrhbZnPKCNHuRU4OfpW0Q==", + "version": "2.0.102", + "resolved": "https://registry.npmjs.org/@ai-sdk/openai/-/openai-2.0.102.tgz", + "integrity": "sha512-tYarHJhyMioGegsnhpqz1/tKoCAJJ6zBHoIQaredNkt8V3o/JXj2647NnEOJVe7WHQXGvCfzbfnP1TADFhPmcA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@ai-sdk/provider": "1.1.3", - "@ai-sdk/provider-utils": "2.2.8" + "@ai-sdk/provider": "2.0.1", + "@ai-sdk/provider-utils": "3.0.23" }, "engines": { "node": ">=18" }, "peerDependencies": { - "zod": "^3.0.0" + "zod": "^3.25.76 || ^4.1.8" } }, "node_modules/@ai-sdk/provider": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@ai-sdk/provider/-/provider-1.1.3.tgz", - "integrity": "sha512-qZMxYJ0qqX/RfnuIaab+zp8UAeJn/ygXXAffR5I4N0n1IrvA6qBsjc8hXLmBiMV2zoXlifkacF7sEFnYnjBcqg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@ai-sdk/provider/-/provider-2.0.1.tgz", + "integrity": "sha512-KCUwswvsC5VsW2PWFqF8eJgSCu5Ysj7m1TxiHTVA6g7k360bk0RNQENT8KTMAYEs+8fWPD3Uu4dEmzGHc+jGng==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -100,21 +87,21 @@ } }, "node_modules/@ai-sdk/provider-utils": { - "version": "2.2.8", - "resolved": "https://registry.npmjs.org/@ai-sdk/provider-utils/-/provider-utils-2.2.8.tgz", - "integrity": "sha512-fqhG+4sCVv8x7nFzYnFo19ryhAa3w096Kmc3hWxMQfW/TubPOmt3A6tYZhl4mUfQWWQMsuSkLrtjlWuXBVSGQA==", + "version": "3.0.23", + "resolved": "https://registry.npmjs.org/@ai-sdk/provider-utils/-/provider-utils-3.0.23.tgz", + "integrity": "sha512-60GYsRj5wIJQRcq5YwYJq4KhwLeStceXEJiZdecP1miiH+6FMmrnc7lZDOJoQ6m9lrudEb+uI4LEwddLz5+rPQ==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@ai-sdk/provider": "1.1.3", - "nanoid": "^3.3.8", - "secure-json-parse": "^2.7.0" + "@ai-sdk/provider": "2.0.1", + "@standard-schema/spec": "^1.0.0", + "eventsource-parser": "^3.0.6" }, "engines": { "node": ">=18" }, "peerDependencies": { - "zod": "^3.23.8" + "zod": "^3.25.76 || ^4.1.8" } }, "node_modules/@cfworker/json-schema": { @@ -326,19 +313,6 @@ "zod": "^3.25.76 || ^4.1.8" } }, - "node_modules/ai/node_modules/@ai-sdk/provider": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@ai-sdk/provider/-/provider-2.0.1.tgz", - "integrity": "sha512-KCUwswvsC5VsW2PWFqF8eJgSCu5Ysj7m1TxiHTVA6g7k360bk0RNQENT8KTMAYEs+8fWPD3Uu4dEmzGHc+jGng==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "json-schema": "^0.4.0" - }, - "engines": { - "node": ">=18" - } - }, "node_modules/ai/node_modules/@ai-sdk/provider-utils": { "version": "3.0.22", "resolved": "https://registry.npmjs.org/@ai-sdk/provider-utils/-/provider-utils-3.0.22.tgz", @@ -520,25 +494,6 @@ "mustache": "bin/mustache" } }, - "node_modules/nanoid": { - "version": "3.3.11", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", - "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, "node_modules/openai": { "version": "5.23.2", "resolved": "https://registry.npmjs.org/openai/-/openai-5.23.2.tgz", @@ -625,13 +580,6 @@ "node": ">= 4" } }, - "node_modules/secure-json-parse": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-2.7.0.tgz", - "integrity": "sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==", - "dev": true, - "license": "BSD-3-Clause" - }, "node_modules/semver": { "version": "7.7.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", From e8fd234774897116746a30c5bfc6ba075cb0dd87 Mon Sep 17 00:00:00 2001 From: Mykhailo Chalyi Date: Mon, 6 Apr 2026 13:11:06 +0000 Subject: [PATCH 5/6] fix(examples): use jsonSchema() in vercel_ai_tool for AI SDK v5 compat @ai-sdk/openai v2 drops Zod type info when converting to function parameters, sending type: "None" to OpenAI which rejects it. Switch to jsonSchema() which preserves the type: "object" wrapper correctly. Also remove unused zod import. --- examples/vercel_ai_tool.mjs | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/examples/vercel_ai_tool.mjs b/examples/vercel_ai_tool.mjs index 70353b35..426dc990 100644 --- a/examples/vercel_ai_tool.mjs +++ b/examples/vercel_ai_tool.mjs @@ -7,16 +7,15 @@ * automatically via `generateText` with `maxSteps`. * * Prerequisites: - * npm install ai @ai-sdk/openai zod + * npm install ai @ai-sdk/openai * export OPENAI_API_KEY=sk-... * * Run: * node examples/vercel_ai_tool.mjs */ -import { generateText, tool } from "ai"; +import { generateText, tool, jsonSchema } from "ai"; import { openai } from "@ai-sdk/openai"; -import { z } from "zod"; import { BashTool } from "@everruns/bashkit"; // ─── Setup ─────────────────────────────────────────────────────────── @@ -26,10 +25,17 @@ const bashTool = new BashTool({ username: "agent", hostname: "sandbox" }); // Define bashkit as a Vercel AI SDK tool const bashkitTool = tool({ description: bashTool.shortDescription, - parameters: z.object({ - commands: z - .string() - .describe("Bash commands to execute in a sandboxed virtual environment"), + parameters: jsonSchema({ + type: "object", + properties: { + commands: { + type: "string", + description: + "Bash commands to execute in a sandboxed virtual environment", + }, + }, + required: ["commands"], + additionalProperties: false, }), execute: async ({ commands }) => { const result = bashTool.executeSync(commands); From 656fe5e191f06f9240e690436d8e5f840343e7c0 Mon Sep 17 00:00:00 2001 From: Mykhailo Chalyi Date: Mon, 6 Apr 2026 13:33:40 +0000 Subject: [PATCH 6/6] fix(examples): upgrade to AI SDK v6 and fix tool schema Upgrade ai@5 -> ai@6 and @ai-sdk/openai@2 -> @ai-sdk/openai@3. AI SDK v6 renamed tool parameter from `parameters` to `inputSchema` and uses the Responses API by default. Use jsonSchema() for explicit schema declaration that serializes correctly. --- examples/package-lock.json | 88 +++++++++++-------------------------- examples/package.json | 4 +- examples/vercel_ai_tool.mjs | 2 +- 3 files changed, 29 insertions(+), 65 deletions(-) diff --git a/examples/package-lock.json b/examples/package-lock.json index 6a8bad41..6c93d942 100644 --- a/examples/package-lock.json +++ b/examples/package-lock.json @@ -11,24 +11,24 @@ "@everruns/bashkit": "latest" }, "devDependencies": { - "@ai-sdk/openai": "^2.0.102", + "@ai-sdk/openai": "^3.0.50", "@langchain/core": "^0.3", "@langchain/langgraph": "^0.2", "@langchain/openai": "^0.5", - "ai": "^5.0.52", + "ai": "^6.0.146", "openai": "^5", "zod": "^3" } }, "node_modules/@ai-sdk/gateway": { - "version": "2.0.58", - "resolved": "https://registry.npmjs.org/@ai-sdk/gateway/-/gateway-2.0.58.tgz", - "integrity": "sha512-HLPfF5k/rUre8fBMSJnJP6UL7ONx+W/BksTGdand0/Jkq5nCVlwmoUC4URc8PtZ+UtnMP6waQlD4b9/rPOHk7A==", + "version": "3.0.88", + "resolved": "https://registry.npmjs.org/@ai-sdk/gateway/-/gateway-3.0.88.tgz", + "integrity": "sha512-AFoj7xdWAtCQcy0jJ235ENSakYM8D28qBX+rB+/rX4r8qe/LXgl0e5UivOqxAlIM5E9jnQdYxIPuj3XFtGk/yg==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@ai-sdk/provider": "2.0.1", - "@ai-sdk/provider-utils": "3.0.22", + "@ai-sdk/provider": "3.0.8", + "@ai-sdk/provider-utils": "4.0.22", "@vercel/oidc": "3.1.0" }, "engines": { @@ -38,33 +38,15 @@ "zod": "^3.25.76 || ^4.1.8" } }, - "node_modules/@ai-sdk/gateway/node_modules/@ai-sdk/provider-utils": { - "version": "3.0.22", - "resolved": "https://registry.npmjs.org/@ai-sdk/provider-utils/-/provider-utils-3.0.22.tgz", - "integrity": "sha512-fFT1KfUUKktfAFm5mClJhS1oux9tP2qgzmEZVl5UdwltQ1LO/s8hd7znVrgKzivwv1s1FIPza0s9OpJaNB/vHw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@ai-sdk/provider": "2.0.1", - "@standard-schema/spec": "^1.0.0", - "eventsource-parser": "^3.0.6" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "zod": "^3.25.76 || ^4.1.8" - } - }, "node_modules/@ai-sdk/openai": { - "version": "2.0.102", - "resolved": "https://registry.npmjs.org/@ai-sdk/openai/-/openai-2.0.102.tgz", - "integrity": "sha512-tYarHJhyMioGegsnhpqz1/tKoCAJJ6zBHoIQaredNkt8V3o/JXj2647NnEOJVe7WHQXGvCfzbfnP1TADFhPmcA==", + "version": "3.0.50", + "resolved": "https://registry.npmjs.org/@ai-sdk/openai/-/openai-3.0.50.tgz", + "integrity": "sha512-7M7bklrS+gckzPdpQpC3iG5aN5aQPRJdAJQ5jt7sEgYCqDgUuef9x4Nd570+ghIfKTZvV6tSqeeTuD6De/bZig==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@ai-sdk/provider": "2.0.1", - "@ai-sdk/provider-utils": "3.0.23" + "@ai-sdk/provider": "3.0.8", + "@ai-sdk/provider-utils": "4.0.22" }, "engines": { "node": ">=18" @@ -74,9 +56,9 @@ } }, "node_modules/@ai-sdk/provider": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@ai-sdk/provider/-/provider-2.0.1.tgz", - "integrity": "sha512-KCUwswvsC5VsW2PWFqF8eJgSCu5Ysj7m1TxiHTVA6g7k360bk0RNQENT8KTMAYEs+8fWPD3Uu4dEmzGHc+jGng==", + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@ai-sdk/provider/-/provider-3.0.8.tgz", + "integrity": "sha512-oGMAgGoQdBXbZqNG0Ze56CHjDZ1IDYOwGYxYjO5KLSlz5HiNQ9udIXsPZ61VWaHGZ5XW/jyjmr6t2xz2jGVwbQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -87,14 +69,14 @@ } }, "node_modules/@ai-sdk/provider-utils": { - "version": "3.0.23", - "resolved": "https://registry.npmjs.org/@ai-sdk/provider-utils/-/provider-utils-3.0.23.tgz", - "integrity": "sha512-60GYsRj5wIJQRcq5YwYJq4KhwLeStceXEJiZdecP1miiH+6FMmrnc7lZDOJoQ6m9lrudEb+uI4LEwddLz5+rPQ==", + "version": "4.0.22", + "resolved": "https://registry.npmjs.org/@ai-sdk/provider-utils/-/provider-utils-4.0.22.tgz", + "integrity": "sha512-B2OTFcRw/Pdka9ZTjpXv6T6qZ6RruRuLokyb8HwW+aoW9ndJ3YasA3/mVswyJw7VMBF8ofXgqvcrCt9KYvFifg==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@ai-sdk/provider": "2.0.1", - "@standard-schema/spec": "^1.0.0", + "@ai-sdk/provider": "3.0.8", + "@standard-schema/spec": "^1.1.0", "eventsource-parser": "^3.0.6" }, "engines": { @@ -295,15 +277,15 @@ } }, "node_modules/ai": { - "version": "5.0.154", - "resolved": "https://registry.npmjs.org/ai/-/ai-5.0.154.tgz", - "integrity": "sha512-xdUSSfliDWIQq/9Easp1z5oRIFwNS07Ys4BCGDtroDcyEbNDMw5Rj1m2i7Fh8khPbAEByxFfWyUzlrPi2VIlDA==", + "version": "6.0.146", + "resolved": "https://registry.npmjs.org/ai/-/ai-6.0.146.tgz", + "integrity": "sha512-70DE8k1rR0N3mXxyyfjYAx/FxRln/kQ5ym18lt1ys1eUklcPuoIXGbUBwdfCbmkt6YF3jCDZ5+OgkWieP/NGDw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@ai-sdk/gateway": "2.0.58", - "@ai-sdk/provider": "2.0.1", - "@ai-sdk/provider-utils": "3.0.22", + "@ai-sdk/gateway": "3.0.88", + "@ai-sdk/provider": "3.0.8", + "@ai-sdk/provider-utils": "4.0.22", "@opentelemetry/api": "1.9.0" }, "engines": { @@ -313,24 +295,6 @@ "zod": "^3.25.76 || ^4.1.8" } }, - "node_modules/ai/node_modules/@ai-sdk/provider-utils": { - "version": "3.0.22", - "resolved": "https://registry.npmjs.org/@ai-sdk/provider-utils/-/provider-utils-3.0.22.tgz", - "integrity": "sha512-fFT1KfUUKktfAFm5mClJhS1oux9tP2qgzmEZVl5UdwltQ1LO/s8hd7znVrgKzivwv1s1FIPza0s9OpJaNB/vHw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@ai-sdk/provider": "2.0.1", - "@standard-schema/spec": "^1.0.0", - "eventsource-parser": "^3.0.6" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "zod": "^3.25.76 || ^4.1.8" - } - }, "node_modules/ansi-styles": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", diff --git a/examples/package.json b/examples/package.json index 16cc5e3d..7d159265 100644 --- a/examples/package.json +++ b/examples/package.json @@ -8,11 +8,11 @@ "@everruns/bashkit": "latest" }, "devDependencies": { - "@ai-sdk/openai": "^2", + "@ai-sdk/openai": "^3.0.50", "@langchain/core": "^0.3", "@langchain/langgraph": "^0.2", "@langchain/openai": "^0.5", - "ai": "^5.0.52", + "ai": "^6.0.146", "openai": "^5", "zod": "^3" }, diff --git a/examples/vercel_ai_tool.mjs b/examples/vercel_ai_tool.mjs index 426dc990..e7856572 100644 --- a/examples/vercel_ai_tool.mjs +++ b/examples/vercel_ai_tool.mjs @@ -25,7 +25,7 @@ const bashTool = new BashTool({ username: "agent", hostname: "sandbox" }); // Define bashkit as a Vercel AI SDK tool const bashkitTool = tool({ description: bashTool.shortDescription, - parameters: jsonSchema({ + inputSchema: jsonSchema({ type: "object", properties: { commands: {