diff --git a/.changeset/calm-dragons-build.md b/.changeset/calm-dragons-build.md new file mode 100644 index 000000000..9a2651e69 --- /dev/null +++ b/.changeset/calm-dragons-build.md @@ -0,0 +1,5 @@ +--- +"eve": patch +--- + +Upgrade eve to the stable AI SDK 7 release and copy vendored AI SDK declarations directly from the installed packages. Newly scaffolded pnpm workspaces now exempt the AI SDK, Vercel, and Workflow package families from minimum release age checks. diff --git a/.syncpackrc.json b/.syncpackrc.json index d9e032fd4..c297979a3 100644 --- a/.syncpackrc.json +++ b/.syncpackrc.json @@ -8,12 +8,6 @@ "!**/templates/**" ], "versionGroups": [ - { - "label": "docs intentionally pins its own ai / @ai-sdk/react versions", - "dependencies": ["ai", "@ai-sdk/react"], - "packages": ["eve-docs"], - "isIgnored": true - }, { "label": "Workspace packages must use the workspace: protocol", "dependencies": ["eve-*", "eve"], @@ -38,10 +32,8 @@ "label": "Shared third-party deps must use the catalog: protocol", "policy": "catalog", "dependencies": [ - "@ai-sdk/**", "@types/node", "typescript", - "ai", "next", "@types/react", "@types/react-dom", diff --git a/packages/eve/package.json b/packages/eve/package.json index ae9902205..1c521997d 100644 --- a/packages/eve/package.json +++ b/packages/eve/package.json @@ -293,6 +293,7 @@ "@ai-sdk/openai": "catalog:", "@ai-sdk/otel": "catalog:", "@ai-sdk/provider": "catalog:", + "@ai-sdk/provider-utils": "catalog:", "@chat-adapter/slack": "4.31.0", "@chat-adapter/state-memory": "4.31.0", "@clack/core": "1.3.1", @@ -309,6 +310,7 @@ "@vercel/sdk": "1.28.1", "@workflow/core": "5.0.0-beta.24", "@workflow/errors": "5.0.0-beta.8", + "@workflow/serde": "4.1.0", "@workflow/world": "5.0.0-beta.13", "@workflow/world-local": "5.0.0-beta.21", "ai": "catalog:", @@ -316,7 +318,8 @@ "chat": "4.31.0", "chokidar": "5.0.0", "commander": "14.0.3", - "emulate": "^0.6.0", + "emulate": "0.6.0", + "eventsource-parser": "3.0.8", "experimental-ai-sdk-code-mode": "1.0.14", "gray-matter": "4.0.3", "jose": "6.2.3", diff --git a/packages/eve/scripts/vendor-compiled/@ai-sdk/anthropic.mjs b/packages/eve/scripts/vendor-compiled/@ai-sdk/anthropic.mjs index 66c264d55..b1ae14ead 100644 --- a/packages/eve/scripts/vendor-compiled/@ai-sdk/anthropic.mjs +++ b/packages/eve/scripts/vendor-compiled/@ai-sdk/anthropic.mjs @@ -1,4 +1,4 @@ -import { buildOpaqueTypesStub, createDeclarationCopier } from "../_shared.mjs"; +import { createDeclarationCopier } from "../_shared.mjs"; /** * Type declarations are copied verbatim from the installed @@ -14,9 +14,7 @@ import { buildOpaqueTypesStub, createDeclarationCopier } from "../_shared.mjs"; * `#compiled/@ai-sdk/provider/index.js`. * - `zod/v4` → eve's vendored `zod` (which re-exports from the real * installed `zod` package). - * - `@ai-sdk/provider-utils` → local opaque-type stub; eve doesn't - * surface provider-utils' types to user code. `resolveWebSearchProviderTool` - * casts the returned tool to `ToolSet[string]`. + * - `@ai-sdk/provider-utils` → type-only vendored upstream declarations. */ export default { packageName: "@ai-sdk/anthropic", @@ -27,9 +25,8 @@ export default { "@ai-sdk/provider": { kind: "vendored", compiledPath: "@ai-sdk/provider" }, "zod/v4": { kind: "vendored", compiledPath: "zod" }, "@ai-sdk/provider-utils": { - kind: "stub", - stubBaseName: "_provider-utils", - build: buildOpaqueTypesStub, + kind: "vendored", + compiledPath: "@ai-sdk/provider-utils", }, }, }), diff --git a/packages/eve/scripts/vendor-compiled/@ai-sdk/google.mjs b/packages/eve/scripts/vendor-compiled/@ai-sdk/google.mjs index 1af67cea5..24f9a0d52 100644 --- a/packages/eve/scripts/vendor-compiled/@ai-sdk/google.mjs +++ b/packages/eve/scripts/vendor-compiled/@ai-sdk/google.mjs @@ -1,4 +1,4 @@ -import { buildOpaqueTypesStub, createDeclarationCopier } from "../_shared.mjs"; +import { createDeclarationCopier } from "../_shared.mjs"; /** * Type declarations are copied verbatim from the installed @@ -11,9 +11,7 @@ import { buildOpaqueTypesStub, createDeclarationCopier } from "../_shared.mjs"; * * - `@ai-sdk/provider` → already vendored, re-route to the vendored * `#compiled/@ai-sdk/provider/index.js`. - * - `@ai-sdk/provider-utils` → local opaque-type stub; eve doesn't - * surface provider-utils' types to user code. `resolveWebSearchProviderTool` - * casts the returned tool to `ToolSet[string]`. + * - `@ai-sdk/provider-utils` → type-only vendored upstream declarations. */ export default { packageName: "@ai-sdk/google", @@ -23,9 +21,8 @@ export default { rewrites: { "@ai-sdk/provider": { kind: "vendored", compiledPath: "@ai-sdk/provider" }, "@ai-sdk/provider-utils": { - kind: "stub", - stubBaseName: "_provider-utils", - build: buildOpaqueTypesStub, + kind: "vendored", + compiledPath: "@ai-sdk/provider-utils", }, }, }), diff --git a/packages/eve/scripts/vendor-compiled/@ai-sdk/mcp.mjs b/packages/eve/scripts/vendor-compiled/@ai-sdk/mcp.mjs index 467ad3971..ab1acc9ea 100644 --- a/packages/eve/scripts/vendor-compiled/@ai-sdk/mcp.mjs +++ b/packages/eve/scripts/vendor-compiled/@ai-sdk/mcp.mjs @@ -1,8 +1,17 @@ -import { loadDeclaration } from "../_shared.mjs"; +import { createDeclarationCopier } from "../_shared.mjs"; export default { packageName: "@ai-sdk/mcp", compiledPath: "@ai-sdk/mcp", chunkGroup: "workflow", - declaration: await loadDeclaration("@ai-sdk/mcp.d.ts"), + copyDeclarations: createDeclarationCopier({ + rewrites: { + "@ai-sdk/provider": { kind: "vendored", compiledPath: "@ai-sdk/provider" }, + "@ai-sdk/provider-utils": { + kind: "vendored", + compiledPath: "@ai-sdk/provider-utils", + }, + "zod/v4": { kind: "vendored", compiledPath: "zod" }, + }, + }), }; diff --git a/packages/eve/scripts/vendor-compiled/@ai-sdk/openai.mjs b/packages/eve/scripts/vendor-compiled/@ai-sdk/openai.mjs index 23f0d74d8..46022bcc9 100644 --- a/packages/eve/scripts/vendor-compiled/@ai-sdk/openai.mjs +++ b/packages/eve/scripts/vendor-compiled/@ai-sdk/openai.mjs @@ -1,4 +1,4 @@ -import { buildOpaqueTypesStub, createDeclarationCopier } from "../_shared.mjs"; +import { createDeclarationCopier } from "../_shared.mjs"; /** * Type declarations are copied verbatim from the installed @@ -13,9 +13,7 @@ import { buildOpaqueTypesStub, createDeclarationCopier } from "../_shared.mjs"; * - `@ai-sdk/provider` → already vendored, re-route both the named and * the `import * as _ai_sdk_provider` namespace import at the vendored * copy. - * - `@ai-sdk/provider-utils` → local opaque-type stub; eve doesn't - * surface provider-utils' types to user code. `resolveWebSearchProviderTool` - * casts the returned tool to `ToolSet[string]`. + * - `@ai-sdk/provider-utils` → type-only vendored upstream declarations. */ export default { packageName: "@ai-sdk/openai", @@ -25,9 +23,8 @@ export default { rewrites: { "@ai-sdk/provider": { kind: "vendored", compiledPath: "@ai-sdk/provider" }, "@ai-sdk/provider-utils": { - kind: "stub", - stubBaseName: "_provider-utils", - build: buildOpaqueTypesStub, + kind: "vendored", + compiledPath: "@ai-sdk/provider-utils", }, }, }), diff --git a/packages/eve/scripts/vendor-compiled/@ai-sdk/otel.mjs b/packages/eve/scripts/vendor-compiled/@ai-sdk/otel.mjs index 9c6998c26..fc29de090 100644 --- a/packages/eve/scripts/vendor-compiled/@ai-sdk/otel.mjs +++ b/packages/eve/scripts/vendor-compiled/@ai-sdk/otel.mjs @@ -1,4 +1,4 @@ -import { loadDeclaration } from "../_shared.mjs"; +import { createDeclarationCopier } from "../_shared.mjs"; /** * `ai` is a peer dep of eve (consumers install it), so it must never be @@ -15,5 +15,15 @@ export default { compiledPath: "@ai-sdk/otel", chunkGroup: "workflow", external: isAiImport, - declaration: await loadDeclaration("@ai-sdk/otel.d.ts"), + copyDeclarations: createDeclarationCopier({ + rewrites: { + ai: { kind: "external" }, + "@ai-sdk/provider": { kind: "vendored", compiledPath: "@ai-sdk/provider" }, + "@ai-sdk/provider-utils": { + kind: "vendored", + compiledPath: "@ai-sdk/provider-utils", + }, + "@opentelemetry/api": { kind: "vendored", compiledPath: "@opentelemetry/api" }, + }, + }), }; diff --git a/packages/eve/scripts/vendor-compiled/@ai-sdk/provider-utils.mjs b/packages/eve/scripts/vendor-compiled/@ai-sdk/provider-utils.mjs new file mode 100644 index 000000000..6a7b62e98 --- /dev/null +++ b/packages/eve/scripts/vendor-compiled/@ai-sdk/provider-utils.mjs @@ -0,0 +1,23 @@ +import { createDeclarationCopier } from "../_shared.mjs"; + +export default { + packageName: "@ai-sdk/provider-utils", + compiledPath: "@ai-sdk/provider-utils", + typeOnly: true, + copyDeclarations: createDeclarationCopier({ + rewrites: { + "@ai-sdk/provider": { kind: "vendored", compiledPath: "@ai-sdk/provider" }, + "@standard-schema/spec": { + kind: "vendored", + compiledPath: "@standard-schema/spec", + }, + "@workflow/serde": { kind: "vendored", compiledPath: "@workflow/serde" }, + "eventsource-parser/stream": { + kind: "vendored", + compiledPath: "eventsource-parser/stream", + }, + "zod/v3": { kind: "vendored", compiledPath: "zod" }, + "zod/v4": { kind: "vendored", compiledPath: "zod" }, + }, + }), +}; diff --git a/packages/eve/scripts/vendor-compiled/@ai-sdk/provider.mjs b/packages/eve/scripts/vendor-compiled/@ai-sdk/provider.mjs index 52387ddaa..60ced4c7e 100644 --- a/packages/eve/scripts/vendor-compiled/@ai-sdk/provider.mjs +++ b/packages/eve/scripts/vendor-compiled/@ai-sdk/provider.mjs @@ -1,34 +1,5 @@ import { createDeclarationCopier } from "../_shared.mjs"; -/** - * Stub for `json-schema`. Upstream `@ai-sdk/provider` references - * `JSONSchema7` / `JSONSchema7Definition` from `@types/json-schema`. - * Consumers shouldn't have to install `@types/json-schema` just to - * typecheck against eve, so the names are aliased to opaque structural - * placeholders. Anyone needing the real JSONSchema7 types can install - * `@types/json-schema` and refine downstream. - */ -function buildJsonSchemaStub(names, moduleName) { - const declarations = { - JSONSchema7: `export type JSONSchema7 = Record;`, - JSONSchema7Definition: `export type JSONSchema7Definition = JSONSchema7 | boolean;`, - }; - - const lines = [ - `// Auto-generated stub for \`${moduleName}\` types referenced by a vendored .d.ts.`, - `// Emitted by scripts/vendor-compiled/@ai-sdk/provider.mjs.`, - ``, - ]; - for (const name of [...names].sort()) { - if (Object.prototype.hasOwnProperty.call(declarations, name)) { - lines.push(declarations[name]); - } else { - lines.push(`export type ${name} = unknown;`); - } - } - return `${lines.join("\n")}\n`; -} - /** * Type declarations are copied verbatim from the installed * @ai-sdk/provider version. The previous hand-written stub declared only @@ -44,9 +15,8 @@ export default { copyDeclarations: createDeclarationCopier({ rewrites: { "json-schema": { - kind: "stub", - stubBaseName: "_json-schema", - build: buildJsonSchemaStub, + kind: "vendored", + compiledPath: "json-schema", }, }, }), diff --git a/packages/eve/scripts/vendor-compiled/@workflow/serde.mjs b/packages/eve/scripts/vendor-compiled/@workflow/serde.mjs new file mode 100644 index 000000000..1ab8d3fe5 --- /dev/null +++ b/packages/eve/scripts/vendor-compiled/@workflow/serde.mjs @@ -0,0 +1,8 @@ +import { createDeclarationCopier } from "../_shared.mjs"; + +export default { + packageName: "@workflow/serde", + compiledPath: "@workflow/serde", + typeOnly: true, + copyDeclarations: createDeclarationCopier(), +}; diff --git a/packages/eve/scripts/vendor-compiled/_shared.mjs b/packages/eve/scripts/vendor-compiled/_shared.mjs index 86bec282e..8fdc80050 100644 --- a/packages/eve/scripts/vendor-compiled/_shared.mjs +++ b/packages/eve/scripts/vendor-compiled/_shared.mjs @@ -96,14 +96,21 @@ export async function loadDeclaration(relativePath) { * `files` can override the default `dist/index.d.ts` copy. Use it for * packages whose entrypoint declaration imports sibling declaration files, * or for multi-entry packages that need their upstream declaration tree. + * `declarationRoot` changes the package-relative source directory when + * declarations live outside `dist`. * * `discoverExtraFiles` is consulted for chunk files the upstream `.d.ts` * references by relative path (e.g. chat's `./jsx-runtime-.d.ts`). * Each returned filename is co-copied verbatim into the destination. */ -export function createDeclarationCopier({ rewrites = {}, discoverExtraFiles, files } = {}) { +export function createDeclarationCopier({ + declarationRoot = "dist", + rewrites = {}, + discoverExtraFiles, + files, +} = {}) { return async ({ destinationRoot, packageInfo }) => { - const distDir = join(packageInfo.packageRoot, "dist"); + const distDir = join(packageInfo.packageRoot, declarationRoot); const distEntries = await readdir(distDir); const declarationFiles = typeof files === "function" diff --git a/packages/eve/scripts/vendor-compiled/declarations/@ai-sdk/mcp.d.ts b/packages/eve/scripts/vendor-compiled/declarations/@ai-sdk/mcp.d.ts deleted file mode 100644 index f708564ff..000000000 --- a/packages/eve/scripts/vendor-compiled/declarations/@ai-sdk/mcp.d.ts +++ /dev/null @@ -1,37 +0,0 @@ -import type { ToolSet } from "ai"; - -export interface MCPListToolDefinition { - annotations?: Record | undefined; - description?: string | undefined; - inputSchema?: Record | undefined; - name: string; - [key: string]: unknown; -} - -export interface MCPListToolsResult { - tools: MCPListToolDefinition[]; - [key: string]: unknown; -} - -export interface MCPClient { - listTools(options?: unknown): Promise; - toolsFromDefinitions(definitions: MCPListToolsResult, options?: unknown): ToolSet; - close(): Promise; -} - -export interface MCPClientConfig { - transport: - | { - type: "http" | "sse"; - url: string; - headers?: Record | undefined; - } - | unknown; - onUncaughtError?: ((error: unknown) => void) | undefined; - clientName?: string | undefined; - name?: string | undefined; - version?: string | undefined; - capabilities?: unknown; -} - -export declare function createMCPClient(config: MCPClientConfig): Promise; diff --git a/packages/eve/scripts/vendor-compiled/declarations/@ai-sdk/otel.d.ts b/packages/eve/scripts/vendor-compiled/declarations/@ai-sdk/otel.d.ts deleted file mode 100644 index 293eabdd9..000000000 --- a/packages/eve/scripts/vendor-compiled/declarations/@ai-sdk/otel.d.ts +++ /dev/null @@ -1,32 +0,0 @@ -import type { Telemetry } from "ai"; - -export interface OpenTelemetryOptions { - tracer?: unknown; - usage?: boolean | undefined; - providerMetadata?: boolean | undefined; - embedding?: boolean | undefined; - reranking?: boolean | undefined; - runtimeContext?: boolean | undefined; - headers?: boolean | undefined; - toolChoice?: boolean | undefined; - schema?: boolean | undefined; -} - -export declare class OpenTelemetry implements Telemetry { - constructor(options?: OpenTelemetryOptions); - executeTool: NonNullable; - onStart: NonNullable; - onStepStart: NonNullable; - onLanguageModelCallStart: NonNullable; - onLanguageModelCallEnd: NonNullable; - onToolExecutionStart: NonNullable; - onToolExecutionEnd: NonNullable; - onStepFinish: NonNullable; - onFinish: NonNullable; - onEmbedStart: NonNullable; - onEmbedFinish: NonNullable; - onRerankStart: NonNullable; - onRerankFinish: NonNullable; - onChunk: NonNullable; - onError: NonNullable; -} diff --git a/packages/eve/scripts/vendor-compiled/eventsource-parser-stream.mjs b/packages/eve/scripts/vendor-compiled/eventsource-parser-stream.mjs new file mode 100644 index 000000000..6083d0caf --- /dev/null +++ b/packages/eve/scripts/vendor-compiled/eventsource-parser-stream.mjs @@ -0,0 +1,10 @@ +import { createDeclarationCopier } from "./_shared.mjs"; + +export default { + packageName: "eventsource-parser", + compiledPath: "eventsource-parser/stream", + typeOnly: true, + copyDeclarations: createDeclarationCopier({ + files: [{ source: "stream.d.ts", output: "index.d.ts" }], + }), +}; diff --git a/packages/eve/scripts/vendor-compiled/index.mjs b/packages/eve/scripts/vendor-compiled/index.mjs index 93a9a24d1..90db9a6d9 100644 --- a/packages/eve/scripts/vendor-compiled/index.mjs +++ b/packages/eve/scripts/vendor-compiled/index.mjs @@ -9,6 +9,7 @@ import mcp from "./@ai-sdk/mcp.mjs"; import openai from "./@ai-sdk/openai.mjs"; import otel from "./@ai-sdk/otel.mjs"; import provider from "./@ai-sdk/provider.mjs"; +import providerUtils from "./@ai-sdk/provider-utils.mjs"; import chatAdapterSlack from "./@chat-adapter/slack.mjs"; import chatAdapterStateMemory from "./@chat-adapter/state-memory.mjs"; @@ -20,15 +21,18 @@ import vercelOidc from "./@vercel/oidc.mjs"; import vercelSandbox from "./@vercel/sandbox.mjs"; import workflowCore from "./@workflow/core.mjs"; import workflowErrors from "./@workflow/errors.mjs"; +import workflowSerde from "./@workflow/serde.mjs"; import workflowWorld from "./@workflow/world.mjs"; import chat from "./chat.mjs"; import chokidar from "./chokidar.mjs"; import commander from "./commander.mjs"; import experimentalAiSdkCodeMode from "./experimental-ai-sdk-code-mode.mjs"; +import eventsourceParserStream from "./eventsource-parser-stream.mjs"; import grayMatter from "./gray-matter.mjs"; import jose from "./jose.mjs"; import jsoncParser from "./jsonc-parser.mjs"; +import jsonSchema from "./json-schema.mjs"; import picocolors from "./picocolors.mjs"; import semver from "./semver.mjs"; import turndown from "./turndown.mjs"; @@ -43,16 +47,19 @@ export const MODULES = [ chokidar, commander, experimentalAiSdkCodeMode, + eventsourceParserStream, google, grayMatter, jose, jsoncParser, + jsonSchema, mcp, openai, opentelemetryApi, otel, picocolors, provider, + providerUtils, semver, standardSchemaSpec, turndown, @@ -61,6 +68,7 @@ export const MODULES = [ vercelSandbox, workflowCore, workflowErrors, + workflowSerde, workflowWorld, zod, zodValidationError, diff --git a/packages/eve/scripts/vendor-compiled/json-schema.mjs b/packages/eve/scripts/vendor-compiled/json-schema.mjs new file mode 100644 index 000000000..f947bcdea --- /dev/null +++ b/packages/eve/scripts/vendor-compiled/json-schema.mjs @@ -0,0 +1,11 @@ +import { createDeclarationCopier } from "./_shared.mjs"; + +export default { + packageName: "@types/json-schema", + compiledPath: "json-schema", + typeOnly: true, + copyDeclarations: createDeclarationCopier({ + declarationRoot: ".", + files: [{ source: "index.d.ts", output: "index.d.ts" }], + }), +}; diff --git a/packages/eve/src/cli/commands/init.integration.test.ts b/packages/eve/src/cli/commands/init.integration.test.ts index 00ae4c7f4..7ab40afb1 100644 --- a/packages/eve/src/cli/commands/init.integration.test.ts +++ b/packages/eve/src/cli/commands/init.integration.test.ts @@ -37,6 +37,9 @@ const BASE_VERSIONS = { zodPackageVersion: "4.0.0", } as const; +const RELEASE_AGE_POLICY = + 'minimumReleaseAgeExclude:\n - "@ai-sdk/*"\n - "@rolldown/*"\n - "@vercel/*"\n - "@workflow/*"\n - ai\n - eve\n - nitro\n - rolldown\n - workflow\n'; + const WEB_VERSIONS = { ...BASE_VERSIONS, nextPackageVersion: "16.0.0", @@ -410,7 +413,7 @@ describe("runInitCommand", () => { const projectPath = join(appsDirectory, "my-agent"); await expect(pathExists(join(projectPath, "pnpm-workspace.yaml"))).resolves.toBe(false); await expect(readFile(join(workspaceRoot, "pnpm-workspace.yaml"), "utf8")).resolves.toBe( - "packages:\n - apps/*\n\nallowBuilds:\n sharp: false\n\nminimumReleaseAgeExclude:\n - eve\n", + `packages:\n - apps/*\n\nallowBuilds:\n sharp: false\n\n${RELEASE_AGE_POLICY}`, ); const projectPackageJson = JSON.parse( await readFile(join(projectPath, "package.json"), "utf8"), @@ -459,7 +462,7 @@ describe("runInitCommand", () => { const projectPath = join(agentsDirectory, "my-agent"); await expect(pathExists(join(projectPath, "pnpm-workspace.yaml"))).resolves.toBe(false); await expect(readFile(join(workspaceRoot, "pnpm-workspace.yaml"), "utf8")).resolves.toBe( - "packages:\n - apps/*\n - agents/*\n\nallowBuilds:\n sharp: false\n\nminimumReleaseAgeExclude:\n - eve\n", + `packages:\n - apps/*\n - agents/*\n\nallowBuilds:\n sharp: false\n\n${RELEASE_AGE_POLICY}`, ); const projectPackageJson = JSON.parse( await readFile(join(projectPath, "package.json"), "utf8"), @@ -501,7 +504,7 @@ describe("runInitCommand", () => { await expect(pathExists(join(projectPath, "app/page.tsx"))).resolves.toBe(true); await expect(pathExists(join(projectPath, "pnpm-workspace.yaml"))).resolves.toBe(false); await expect(readFile(join(workspaceRoot, "pnpm-workspace.yaml"), "utf8")).resolves.toBe( - "packages:\n - apps/*\n - agents/*\n\nallowBuilds:\n sharp: false\n\nminimumReleaseAgeExclude:\n - eve\n", + `packages:\n - apps/*\n - agents/*\n\nallowBuilds:\n sharp: false\n\n${RELEASE_AGE_POLICY}`, ); const projectPackageJson = JSON.parse( await readFile(join(projectPath, "package.json"), "utf8"), diff --git a/packages/eve/src/setup/primitives/pm/pnpm.ts b/packages/eve/src/setup/primitives/pm/pnpm.ts index cc4ac99e3..6ba5b9ac1 100644 --- a/packages/eve/src/setup/primitives/pm/pnpm.ts +++ b/packages/eve/src/setup/primitives/pm/pnpm.ts @@ -12,11 +12,27 @@ import type { PackageManagerStrategy } from "./types.js"; export const PNPM_WORKSPACE_PATH = "pnpm-workspace.yaml"; export const PNPM_WORKSPACE_MEMBERSHIP_ARGUMENTS = ["list", "--depth", "-1", "--json"] as const; +const RELEASE_AGE_EXCLUSIONS = [ + "@ai-sdk/*", + "@rolldown/*", + "@vercel/*", + "@workflow/*", + "ai", + "eve", + "nitro", + "rolldown", + "workflow", +] as const; + +function formatReleaseAgeExclusion(exclusion: string): string { + return ` - ${exclusion.includes("*") ? JSON.stringify(exclusion) : exclusion}`; +} + // eve@0.6.0-beta.13 through 0.7.0 imported `oxc-parser` at runtime while // declaring it only as a devDependency. Fixed releases use their own manifest. export const PNPM_WORKSPACE_CONTENT = [ "minimumReleaseAgeExclude:", - " - eve", + ...RELEASE_AGE_EXCLUSIONS.map(formatReleaseAgeExclusion), "allowBuilds:", " sharp: false", "# Compatibility for eve releases with an incomplete runtime manifest.", @@ -27,9 +43,15 @@ export const PNPM_WORKSPACE_CONTENT = [ "", ].join("\n"); -const EVE_RELEASE_AGE_EXCLUSION = " - eve"; const SHARP_BUILD_POLICY = " sharp: false"; +function releaseAgeExclusionName(line: string): string { + return line + .trim() + .replace(/^-\s+/u, "") + .replace(/^["']|["']$/gu, ""); +} + function findYamlBlockEnd(lines: readonly string[], startIndex: number): number { let blockEnd = startIndex + 1; while (blockEnd < lines.length) { @@ -64,19 +86,24 @@ function withSharpBuildPolicy(source: string): string { return lines.join("\n"); } -function withExperimentalEveReleaseAgeExclusion(source: string): string { +function withReleaseAgeExclusions(source: string): string { const normalized = source.endsWith("\n") ? source : `${source}\n`; const lines = normalized.split("\n"); const excludeIndex = lines.findIndex((line) => line === "minimumReleaseAgeExclude:"); if (excludeIndex < 0) { const prefix = normalized.trim().length === 0 ? "" : `${normalized}\n`; - return `${prefix}minimumReleaseAgeExclude:\n${EVE_RELEASE_AGE_EXCLUSION}\n`; + const exclusions = RELEASE_AGE_EXCLUSIONS.map(formatReleaseAgeExclusion).join("\n"); + return `${prefix}minimumReleaseAgeExclude:\n${exclusions}\n`; } const blockEnd = findYamlBlockEnd(lines, excludeIndex); const excludeBlock = lines.slice(excludeIndex + 1, blockEnd); - if (excludeBlock.some((line) => line.trim() === "- eve")) { + const existingExclusions = new Set(excludeBlock.map(releaseAgeExclusionName)); + const missingExclusions = RELEASE_AGE_EXCLUSIONS.filter( + (exclusion) => !existingExclusions.has(exclusion), + ); + if (missingExclusions.length === 0) { return source; } @@ -84,7 +111,7 @@ function withExperimentalEveReleaseAgeExclusion(source: string): string { while (insertAt > excludeIndex + 1 && lines[insertAt - 1] === "") { insertAt -= 1; } - lines.splice(insertAt, 0, EVE_RELEASE_AGE_EXCLUSION); + lines.splice(insertAt, 0, ...missingExclusions.map(formatReleaseAgeExclusion)); return lines.join("\n"); } @@ -95,7 +122,7 @@ async function ensurePnpmWorkspacePolicy(filePath: string): Promise<"skipped" | } const current = await readFile(filePath, "utf8"); - const next = withExperimentalEveReleaseAgeExclusion(withSharpBuildPolicy(current)); + const next = withReleaseAgeExclusions(withSharpBuildPolicy(current)); if (next === current) { return "skipped"; } diff --git a/packages/eve/src/setup/scaffold/index.integration.test.ts b/packages/eve/src/setup/scaffold/index.integration.test.ts index 078c8bc3f..0b2ee16e3 100644 --- a/packages/eve/src/setup/scaffold/index.integration.test.ts +++ b/packages/eve/src/setup/scaffold/index.integration.test.ts @@ -23,6 +23,8 @@ async function createTempDir(): Promise { const TEST_EVE_PACKAGE = { version: "0.25.0", nodeEngine: ">=24" } as const; const LATEST_EVE_PACKAGE = { version: "latest", nodeEngine: ">=24" } as const; +const RELEASE_AGE_POLICY = + 'minimumReleaseAgeExclude:\n - "@ai-sdk/*"\n - "@rolldown/*"\n - "@vercel/*"\n - "@workflow/*"\n - ai\n - eve\n - nitro\n - rolldown\n - workflow\n'; const TEST_WEB_PACKAGE_VERSIONS = { evePackage: TEST_EVE_PACKAGE, @@ -432,7 +434,7 @@ describe("ensureChannel", () => { }); await expect(readFile(pnpmWorkspacePath, "utf8")).resolves.toBe( - "packages:\n - packages/*\nallowBuilds:\n esbuild: true\n sharp: false\n\nminimumReleaseAgeExclude:\n - eve\n", + `packages:\n - packages/*\nallowBuilds:\n esbuild: true\n sharp: false\n\n${RELEASE_AGE_POLICY}`, ); expect(result.filesWritten).toContain(pnpmWorkspacePath); }); @@ -455,12 +457,12 @@ describe("ensureChannel", () => { }); await expect(readFile(pnpmWorkspacePath, "utf8")).resolves.toBe( - `${existingPolicy}\nminimumReleaseAgeExclude:\n - eve\n`, + `${existingPolicy}\n${RELEASE_AGE_POLICY}`, ); expect(result.filesWritten).toContain(pnpmWorkspacePath); }); - test("adds the eve release age exclusion to an existing pnpm workspace exclusion list", async () => { + test("adds the release age exclusions to an existing pnpm workspace exclusion list", async () => { const projectRoot = await createTempDir(); const pnpmWorkspacePath = join(projectRoot, "pnpm-workspace.yaml"); await writeFile( @@ -481,7 +483,7 @@ describe("ensureChannel", () => { }); await expect(readFile(pnpmWorkspacePath, "utf8")).resolves.toBe( - "minimumReleaseAgeExclude:\n - react\n - eve\nallowBuilds:\n sharp: false\n", + 'minimumReleaseAgeExclude:\n - react\n - "@ai-sdk/*"\n - "@rolldown/*"\n - "@vercel/*"\n - "@workflow/*"\n - ai\n - eve\n - nitro\n - rolldown\n - workflow\nallowBuilds:\n sharp: false\n', ); expect(result.filesWritten).toContain(pnpmWorkspacePath); }); @@ -515,7 +517,7 @@ describe("ensureChannel", () => { expect(result.filesWritten).not.toContain(join(projectRoot, "pnpm-workspace.yaml")); await expect(pathExists(join(projectRoot, "pnpm-workspace.yaml"))).resolves.toBe(false); await expect(readFile(join(workspaceRoot, "pnpm-workspace.yaml"), "utf8")).resolves.toBe( - "packages:\n - apps/*\n - agents/*\n\nallowBuilds:\n sharp: false\n\nminimumReleaseAgeExclude:\n - eve\n", + `packages:\n - apps/*\n - agents/*\n\nallowBuilds:\n sharp: false\n\n${RELEASE_AGE_POLICY}`, ); const projectPackageJson = JSON.parse( await readFile(join(projectRoot, "package.json"), "utf8"), @@ -790,7 +792,7 @@ describe("scaffoldBaseProject", () => { await expect(pathExists(join(projectRoot, "pnpm-workspace.yaml"))).resolves.toBe(false); await expect(readFile(join(workspaceRoot, "pnpm-workspace.yaml"), "utf8")).resolves.toBe( - "packages:\n - apps/*\n\nallowBuilds:\n sharp: false\n\nminimumReleaseAgeExclude:\n - eve\n", + `packages:\n - apps/*\n\nallowBuilds:\n sharp: false\n\n${RELEASE_AGE_POLICY}`, ); const projectPackageJson = JSON.parse( await readFile(join(projectRoot, "package.json"), "utf8"), @@ -833,7 +835,7 @@ describe("scaffoldBaseProject", () => { await expect(pathExists(join(projectRoot, "pnpm-workspace.yaml"))).resolves.toBe(false); await expect(readFile(join(workspaceRoot, "pnpm-workspace.yaml"), "utf8")).resolves.toBe( - "packages:\n - apps/*\n - agents/*\n\nallowBuilds:\n sharp: false\n\nminimumReleaseAgeExclude:\n - eve\n", + `packages:\n - apps/*\n - agents/*\n\nallowBuilds:\n sharp: false\n\n${RELEASE_AGE_POLICY}`, ); const projectPackageJson = JSON.parse( await readFile(join(projectRoot, "package.json"), "utf8"), diff --git a/packages/eve/test/scenarios/compiled-vendor-assets.scenario.test.ts b/packages/eve/test/scenarios/compiled-vendor-assets.scenario.test.ts index 94e98b8f9..0831dacff 100644 --- a/packages/eve/test/scenarios/compiled-vendor-assets.scenario.test.ts +++ b/packages/eve/test/scenarios/compiled-vendor-assets.scenario.test.ts @@ -36,6 +36,21 @@ function containsSourceMapComment(source: string): boolean { return /(?:^|\n)\s*\/\/# sourceMappingURL=/u.test(source); } +function rewriteDeclarationImports( + source: string, + rewrites: Readonly>, +): string { + let rewritten = source; + for (const [moduleName, replacement] of Object.entries(rewrites)) { + rewritten = rewritten + .replaceAll(`from '${moduleName}'`, `from '${replacement}'`) + .replaceAll(`from "${moduleName}"`, `from "${replacement}"`) + .replaceAll(`import '${moduleName}'`, `import '${replacement}'`) + .replaceAll(`import "${moduleName}"`, `import "${replacement}"`); + } + return rewritten; +} + describe("compiled vendor assets", () => { it("does not generate source maps for vendored packages", async () => { const entries = await readdir(COMPILED_VENDOR_ROOT, { @@ -183,4 +198,99 @@ describe("compiled vendor assets", () => { expect(vendoredBaseClient).toContain('from "../_async-retry.js"'); expect(vendoredBaseClient).toContain('import "#compiled/zod/index.js"'); }); + + it("copies AI SDK declarations from the installed packages without authored stubs", async () => { + const packages = [ + { + name: "@ai-sdk/anthropic", + rewrites: { + "@ai-sdk/provider": "#compiled/@ai-sdk/provider/index.js", + "@ai-sdk/provider-utils": "#compiled/@ai-sdk/provider-utils/index.js", + "zod/v4": "#compiled/zod/index.js", + }, + }, + { + name: "@ai-sdk/google", + rewrites: { + "@ai-sdk/provider": "#compiled/@ai-sdk/provider/index.js", + "@ai-sdk/provider-utils": "#compiled/@ai-sdk/provider-utils/index.js", + }, + }, + { + name: "@ai-sdk/mcp", + rewrites: { + "@ai-sdk/provider": "#compiled/@ai-sdk/provider/index.js", + "@ai-sdk/provider-utils": "#compiled/@ai-sdk/provider-utils/index.js", + "zod/v4": "#compiled/zod/index.js", + }, + }, + { + name: "@ai-sdk/openai", + rewrites: { + "@ai-sdk/provider": "#compiled/@ai-sdk/provider/index.js", + "@ai-sdk/provider-utils": "#compiled/@ai-sdk/provider-utils/index.js", + }, + }, + { + name: "@ai-sdk/otel", + rewrites: { + "@ai-sdk/provider": "#compiled/@ai-sdk/provider/index.js", + "@ai-sdk/provider-utils": "#compiled/@ai-sdk/provider-utils/index.js", + "@opentelemetry/api": "#compiled/@opentelemetry/api/index.js", + }, + }, + { + name: "@ai-sdk/provider", + rewrites: { + "json-schema": "#compiled/json-schema/index.js", + }, + }, + { + name: "@ai-sdk/provider-utils", + rewrites: { + "@ai-sdk/provider": "#compiled/@ai-sdk/provider/index.js", + "@standard-schema/spec": "#compiled/@standard-schema/spec/index.js", + "@workflow/serde": "#compiled/@workflow/serde/index.js", + "eventsource-parser/stream": "#compiled/eventsource-parser/stream/index.js", + "zod/v3": "#compiled/zod/index.js", + "zod/v4": "#compiled/zod/index.js", + }, + }, + ] as const; + + for (const packageDefinition of packages) { + const upstreamRoot = dirname(require.resolve(`${packageDefinition.name}/package.json`)); + const [upstream, vendored] = await Promise.all([ + readFile(join(upstreamRoot, "dist/index.d.ts"), "utf8"), + readFile(join(COMPILED_VENDOR_ROOT, packageDefinition.name, "index.d.ts"), "utf8"), + ]); + + expect(vendored).toBe(rewriteDeclarationImports(upstream, packageDefinition.rewrites)); + } + }); + + it("copies AI SDK declaration dependencies from their installed packages", async () => { + const jsonSchemaRoot = dirname(require.resolve("@types/json-schema/package.json")); + const serdeRoot = dirname(dirname(require.resolve("@workflow/serde"))); + const eventSourceParserRoot = dirname(require.resolve("eventsource-parser/package.json")); + const comparisons = [ + [join(jsonSchemaRoot, "index.d.ts"), join(COMPILED_VENDOR_ROOT, "json-schema/index.d.ts")], + [ + join(serdeRoot, "dist/index.d.ts"), + join(COMPILED_VENDOR_ROOT, "@workflow/serde/index.d.ts"), + ], + [ + join(eventSourceParserRoot, "dist/stream.d.ts"), + join(COMPILED_VENDOR_ROOT, "eventsource-parser/stream/index.d.ts"), + ], + ] as const; + + for (const [upstreamPath, vendoredPath] of comparisons) { + const [upstream, vendored] = await Promise.all([ + readFile(upstreamPath, "utf8"), + readFile(vendoredPath, "utf8"), + ]); + expect(vendored).toBe(upstream); + } + }); }); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4db7150d2..ff839121d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -7,23 +7,26 @@ settings: catalogs: default: '@ai-sdk/anthropic': - specifier: 4.0.0-beta.67 - version: 4.0.0-beta.67 + specifier: ^4.0.0 + version: 4.0.0 '@ai-sdk/google': - specifier: 4.0.0-beta.82 - version: 4.0.0-beta.82 + specifier: ^4.0.0 + version: 4.0.0 '@ai-sdk/mcp': - specifier: 2.0.0-beta.66 - version: 2.0.0-beta.66 + specifier: ^2.0.0 + version: 2.0.0 '@ai-sdk/openai': - specifier: 4.0.0-beta.74 - version: 4.0.0-beta.74 + specifier: ^4.0.0 + version: 4.0.0 '@ai-sdk/otel': - specifier: 1.0.0-beta.124 - version: 1.0.0-beta.124 + specifier: ^1.0.0 + version: 1.0.0 '@ai-sdk/provider': - specifier: 4.0.0-beta.19 - version: 4.0.0-beta.19 + specifier: ^4.0.0 + version: 4.0.0 + '@ai-sdk/provider-utils': + specifier: ^5.0.0 + version: 5.0.0 '@types/node': specifier: 25.9.1 version: 25.9.1 @@ -40,8 +43,8 @@ catalogs: specifier: 2.2.1 version: 2.2.1 ai: - specifier: 7.0.0-beta.178 - version: 7.0.0-beta.178 + specifier: ^7.0.0 + version: 7.0.0 next: specifier: 16.2.6 version: 16.2.6 @@ -79,7 +82,7 @@ importers: version: 25.9.1 ai: specifier: 'catalog:' - version: 7.0.0-beta.178(zod@4.4.3) + version: 7.0.0(zod@4.4.3) gray-matter: specifier: 4.0.3 version: 4.0.3 @@ -294,13 +297,13 @@ importers: version: 0.41.2 '@vercel/connect': specifier: 'catalog:' - version: 0.2.2(@auth/core@0.41.2)(ai@7.0.0-beta.178(zod@4.4.3))(eve@packages+eve) + version: 0.2.2(@ai-sdk/mcp@2.0.0(zod@4.4.3))(@auth/core@0.41.2)(ai@7.0.0(zod@4.4.3))(eve@packages+eve) '@vercel/oidc': specifier: 3.4.1 version: 3.4.1 ai: specifier: 'catalog:' - version: 7.0.0-beta.178(zod@4.4.3) + version: 7.0.0(zod@4.4.3) eve: specifier: workspace:* version: link:../../../packages/eve @@ -352,7 +355,7 @@ importers: version: link:../../../packages/eve nuxt: specifier: ^4.0.0 - version: 4.4.6(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.0))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.0))(@parcel/watcher@2.5.6)(@types/node@25.9.1)(@vercel/blob@2.4.0)(@vercel/functions@3.7.1(@aws-sdk/credential-provider-web-identity@3.972.49)(ws@8.21.0))(@vue/compiler-sfc@3.5.35)(cac@6.7.14)(db0@0.3.4)(eslint@10.4.0(jiti@2.7.0))(ioredis@5.11.0)(lightningcss@1.32.0)(magicast@0.5.3)(optionator@0.9.4)(oxlint@1.70.0)(rolldown@1.1.0)(rollup-plugin-visualizer@7.0.1(rolldown@1.1.0)(rollup@4.60.4))(rollup@4.60.4)(terser@5.48.0)(tsx@4.21.0)(typescript@6.0.3)(vite@8.0.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(terser@5.48.0)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0) + version: 4.4.6(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.0))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.0))(@parcel/watcher@2.5.6)(@types/node@25.9.1)(@vercel/blob@2.4.0)(@vercel/functions@3.7.1(@aws-sdk/credential-provider-web-identity@3.972.49)(ws@8.21.0))(@vue/compiler-sfc@3.5.35)(cac@6.7.14)(db0@0.3.4)(eslint@10.4.0(jiti@2.7.0))(ioredis@5.11.0)(lightningcss@1.32.0)(magicast@0.5.3)(optionator@0.9.4)(oxlint@1.70.0)(rolldown@1.1.0)(rollup-plugin-visualizer@7.0.1(rolldown@1.1.0)(rollup@4.60.4))(rollup@4.60.4)(srvx@0.11.16)(terser@5.48.0)(tsx@4.21.0)(typescript@6.0.3)(vite@8.0.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(terser@5.48.0)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0) vue: specifier: ^3.5.0 version: 3.5.35(typescript@6.0.3) @@ -423,7 +426,7 @@ importers: version: 4.3.0 ai: specifier: 'catalog:' - version: 7.0.0-beta.178(zod@4.4.3) + version: 7.0.0(zod@4.4.3) class-variance-authority: specifier: 0.7.1 version: 0.7.1 @@ -527,7 +530,7 @@ importers: version: 2.1.2(@opentelemetry/api-logs@0.214.0)(@opentelemetry/api@1.9.1)(@opentelemetry/instrumentation@0.214.0(@opentelemetry/api@1.9.1))(@opentelemetry/resources@2.6.1(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-logs@0.214.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-metrics@2.6.1(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.6.1(@opentelemetry/api@1.9.1)) ai: specifier: 'catalog:' - version: 7.0.0-beta.178(zod@4.4.3) + version: 7.0.0(zod@4.4.3) eve: specifier: workspace:* version: link:../../../packages/eve @@ -750,28 +753,31 @@ importers: devDependencies: '@ai-sdk/anthropic': specifier: 'catalog:' - version: 4.0.0-beta.67(zod@4.4.3) + version: 4.0.0(zod@4.4.3) '@ai-sdk/google': specifier: 'catalog:' - version: 4.0.0-beta.82(zod@4.4.3) + version: 4.0.0(zod@4.4.3) '@ai-sdk/mcp': specifier: 'catalog:' - version: 2.0.0-beta.66(zod@4.4.3) + version: 2.0.0(zod@4.4.3) '@ai-sdk/openai': specifier: 'catalog:' - version: 4.0.0-beta.74(zod@4.4.3) + version: 4.0.0(zod@4.4.3) '@ai-sdk/otel': specifier: 'catalog:' - version: 1.0.0-beta.124(zod@4.4.3) + version: 1.0.0(zod@4.4.3) '@ai-sdk/provider': specifier: 'catalog:' - version: 4.0.0-beta.19 + version: 4.0.0 + '@ai-sdk/provider-utils': + specifier: 'catalog:' + version: 5.0.0(zod@4.4.3) '@chat-adapter/slack': specifier: 4.31.0 - version: 4.31.0(ai@7.0.0-beta.178(zod@4.4.3))(zod@4.4.3) + version: 4.31.0(ai@7.0.0(zod@4.4.3))(zod@4.4.3) '@chat-adapter/state-memory': specifier: 4.31.0 - version: 4.31.0(ai@7.0.0-beta.178(zod@4.4.3))(zod@4.4.3) + version: 4.31.0(ai@7.0.0(zod@4.4.3))(zod@4.4.3) '@clack/core': specifier: 1.3.1 version: 1.3.1 @@ -814,6 +820,9 @@ importers: '@workflow/errors': specifier: 5.0.0-beta.8 version: 5.0.0-beta.8 + '@workflow/serde': + specifier: 4.1.0 + version: 4.1.0 '@workflow/world': specifier: 5.0.0-beta.13 version: 5.0.0-beta.13(zod@4.4.3) @@ -822,13 +831,13 @@ importers: version: 5.0.0-beta.21(@opentelemetry/api@1.9.1) ai: specifier: 'catalog:' - version: 7.0.0-beta.178(zod@4.4.3) + version: 7.0.0(zod@4.4.3) autoevals: specifier: 0.0.132 version: 0.0.132(ws@8.21.0) chat: specifier: 4.31.0 - version: 4.31.0(ai@7.0.0-beta.178(zod@4.4.3))(zod@4.4.3) + version: 4.31.0(ai@7.0.0(zod@4.4.3))(zod@4.4.3) chokidar: specifier: 5.0.0 version: 5.0.0 @@ -836,11 +845,14 @@ importers: specifier: 14.0.3 version: 14.0.3 emulate: - specifier: ^0.6.0 + specifier: 0.6.0 version: 0.6.0 + eventsource-parser: + specifier: 3.0.8 + version: 3.0.8 experimental-ai-sdk-code-mode: specifier: 1.0.14 - version: 1.0.14(ai@7.0.0-beta.178(zod@4.4.3)) + version: 1.0.14(ai@7.0.0(zod@4.4.3)) gray-matter: specifier: 4.0.3 version: 4.0.3 @@ -901,8 +913,8 @@ importers: packages: - '@ai-sdk/anthropic@4.0.0-beta.67': - resolution: {integrity: sha512-R0TMMlTui9AoaHTjiJWpnaQLBNBc/oKMCWaqalSnDPtKundJ0sIWZ+wkdNTZbEhq92blzYA7YLDvbDDl8UbGdQ==} + '@ai-sdk/anthropic@4.0.0': + resolution: {integrity: sha512-N0lT1g6/5DEIZvalpkpwYRCdu7n5qb8qPN3PcTem6k4VkPBLC2+T2LAAyx1GS0eNOxavVa0CP7n2kCiye0yyfw==} engines: {node: '>=22'} peerDependencies: zod: ^3.25.76 || ^4.1.8 @@ -913,32 +925,32 @@ packages: peerDependencies: zod: ^3.25.76 || ^4.1.8 - '@ai-sdk/gateway@4.0.0-beta.109': - resolution: {integrity: sha512-W/1kLlPb6Bgbhwep3CA3R6do0HD7SXV5gyuz2XBLY1YABqgxYkw+IhEcjOYlmn9v+Tifjqy5yJqmWdSHMJhyPQ==} + '@ai-sdk/gateway@4.0.0': + resolution: {integrity: sha512-rcKukspbM4h511ot2E8TsPl7rXjRK1zHKrMCP7w4+XF55UKqQHaDzo2kKbGv5rp8Bjb1yQatIHJZE1E2yrOOMw==} engines: {node: '>=22'} peerDependencies: zod: ^3.25.76 || ^4.1.8 - '@ai-sdk/google@4.0.0-beta.82': - resolution: {integrity: sha512-4dCqVuPduyUtaI0nzDO58pgfMuk4gHOKLSNxGjNQhRlPyzjnWi2O9PDIyrWGd1B5zKParwiGPvYlug3dq9wd8w==} + '@ai-sdk/google@4.0.0': + resolution: {integrity: sha512-UXGGmsYmeJ8VEfFenETFd2SN5tGSU+g2yrLrCuL8uqUkDFpNqV9a9MSKdshh6EXQs8e+2PUELJwqe7qQO3UnSw==} engines: {node: '>=22'} peerDependencies: zod: ^3.25.76 || ^4.1.8 - '@ai-sdk/mcp@2.0.0-beta.66': - resolution: {integrity: sha512-Jodv9W0aHKRWBLfyGZ3pcc3bXLoEldgEqC4k+E1ozaL5XjYuZfqnjfsGpx6BkX3GCr3mVctPwRGG09QCYP5lJA==} + '@ai-sdk/mcp@2.0.0': + resolution: {integrity: sha512-+N6gJ1AbcDk3+6asoEsdIojVmgEReKNcvWIT716pDL3AepGI6j7RJVdaRyhQLltwzTj0arwpwU4BBzvhOiCd/g==} engines: {node: '>=22'} peerDependencies: zod: ^3.25.76 || ^4.1.8 - '@ai-sdk/openai@4.0.0-beta.74': - resolution: {integrity: sha512-1iss50q+WXsqUAJ2wxYugsNgczOpM3GNwNeUJPffui1FMOJEq17llhQMbtjby5xP+/sKd8rYciR29wL4Gn6nhA==} + '@ai-sdk/openai@4.0.0': + resolution: {integrity: sha512-XcI/bJEG+Ymx8ZwQMY9GE9waHdEcSzT6wn2o+YW80hOQPf8IAGQvdNWKaD0mxLi6AmOM0L01y/p626w7rImblQ==} engines: {node: '>=22'} peerDependencies: zod: ^3.25.76 || ^4.1.8 - '@ai-sdk/otel@1.0.0-beta.124': - resolution: {integrity: sha512-U0aSyRAKZjvjwoIyJ6bE2qbyfsDWqlenjmmGYOM+oiZoF2ORSHVD6X83bRHZa4paRQHc5XFlug93AkJXdgD2tA==} + '@ai-sdk/otel@1.0.0': + resolution: {integrity: sha512-XRTAFrerQ042ITLc4Ew5dR+6fiaOntOVBKfIG+H9Vtwpf+HzEhkmpacBhUo/WuSYIxzJTMdlqveZC4gxH5Xocw==} engines: {node: '>=22'} '@ai-sdk/provider-utils@4.0.27': @@ -947,8 +959,8 @@ packages: peerDependencies: zod: ^3.25.76 || ^4.1.8 - '@ai-sdk/provider-utils@5.0.0-beta.49': - resolution: {integrity: sha512-7xnpAQLpW0KGIsh0CQERcIZuXEGqv7FtFW2BdFk14iuMxRMVpXhTVvEQyqkm6tWAbQ7OsGQJhO6M0Me9gHQ52g==} + '@ai-sdk/provider-utils@5.0.0': + resolution: {integrity: sha512-zj66M02jc6ASYwIgWZowsooDUwaVngeNZQ3H10GwcPMZ+KR6gHMhcUuKl6tkai+JPXTKDyHY1pnszuxRtw2D4A==} engines: {node: '>=22'} peerDependencies: zod: ^3.25.76 || ^4.1.8 @@ -957,8 +969,8 @@ packages: resolution: {integrity: sha512-Q3BZ27qfpYqnCYGvE3vt+Qi6LGOF9R5Nmzn+9JoM1lCRsD9mYaIhfJLkSunN48nfGXJ6n+XNV0J/XVpqGQl7Dw==} engines: {node: '>=18'} - '@ai-sdk/provider@4.0.0-beta.19': - resolution: {integrity: sha512-Aca/KiGeRtMM7rOJ38Qio+Dc2V45PpiGoWgdrdtIkgM9zkhYpS043t0ggKoNOWgm/csv99XWGrfSF63PSkVeHw==} + '@ai-sdk/provider@4.0.0': + resolution: {integrity: sha512-fr9Gs89prDWiuox/T+kCA+i2cJkHpxU5S+tr4megjTzRC27ZsvFhwjU/+XrqqMbvBUlfmXxTOYWy8ng45dsjIg==} engines: {node: '>=22'} '@ai-sdk/react@3.0.193': @@ -6914,8 +6926,8 @@ packages: peerDependencies: zod: ^3.25.76 || ^4.1.8 - ai@7.0.0-beta.178: - resolution: {integrity: sha512-kOfIbf23FDkvvfDHOS1gIjImBF9MlYut8fEMlps57vvS622VKL1PeEDLJ181aVd2LPSiDr3SupAMSzI2rEaW3w==} + ai@7.0.0: + resolution: {integrity: sha512-hncs+jamJh8r36K6G8xky7oF4Ai/RLU5TF85FMzI2vElyMJGGnLoHihpdmuDiuY2BsktDWHevKaJM1l0VcRLGw==} engines: {node: '>=22'} peerDependencies: zod: ^3.25.76 || ^4.1.8 @@ -12811,10 +12823,10 @@ packages: snapshots: - '@ai-sdk/anthropic@4.0.0-beta.67(zod@4.4.3)': + '@ai-sdk/anthropic@4.0.0(zod@4.4.3)': dependencies: - '@ai-sdk/provider': 4.0.0-beta.19 - '@ai-sdk/provider-utils': 5.0.0-beta.49(zod@4.4.3) + '@ai-sdk/provider': 4.0.0 + '@ai-sdk/provider-utils': 5.0.0(zod@4.4.3) zod: 4.4.3 '@ai-sdk/gateway@3.0.120(zod@4.4.3)': @@ -12824,37 +12836,37 @@ snapshots: '@vercel/oidc': 3.2.0 zod: 4.4.3 - '@ai-sdk/gateway@4.0.0-beta.109(zod@4.4.3)': + '@ai-sdk/gateway@4.0.0(zod@4.4.3)': dependencies: - '@ai-sdk/provider': 4.0.0-beta.19 - '@ai-sdk/provider-utils': 5.0.0-beta.49(zod@4.4.3) + '@ai-sdk/provider': 4.0.0 + '@ai-sdk/provider-utils': 5.0.0(zod@4.4.3) '@vercel/oidc': 3.2.0 zod: 4.4.3 - '@ai-sdk/google@4.0.0-beta.82(zod@4.4.3)': + '@ai-sdk/google@4.0.0(zod@4.4.3)': dependencies: - '@ai-sdk/provider': 4.0.0-beta.19 - '@ai-sdk/provider-utils': 5.0.0-beta.49(zod@4.4.3) + '@ai-sdk/provider': 4.0.0 + '@ai-sdk/provider-utils': 5.0.0(zod@4.4.3) zod: 4.4.3 - '@ai-sdk/mcp@2.0.0-beta.66(zod@4.4.3)': + '@ai-sdk/mcp@2.0.0(zod@4.4.3)': dependencies: - '@ai-sdk/provider': 4.0.0-beta.19 - '@ai-sdk/provider-utils': 5.0.0-beta.49(zod@4.4.3) + '@ai-sdk/provider': 4.0.0 + '@ai-sdk/provider-utils': 5.0.0(zod@4.4.3) pkce-challenge: 5.0.1 zod: 4.4.3 - '@ai-sdk/openai@4.0.0-beta.74(zod@4.4.3)': + '@ai-sdk/openai@4.0.0(zod@4.4.3)': dependencies: - '@ai-sdk/provider': 4.0.0-beta.19 - '@ai-sdk/provider-utils': 5.0.0-beta.49(zod@4.4.3) + '@ai-sdk/provider': 4.0.0 + '@ai-sdk/provider-utils': 5.0.0(zod@4.4.3) zod: 4.4.3 - '@ai-sdk/otel@1.0.0-beta.124(zod@4.4.3)': + '@ai-sdk/otel@1.0.0(zod@4.4.3)': dependencies: - '@ai-sdk/provider': 4.0.0-beta.19 + '@ai-sdk/provider': 4.0.0 '@opentelemetry/api': 1.9.1 - ai: 7.0.0-beta.178(zod@4.4.3) + ai: 7.0.0(zod@4.4.3) transitivePeerDependencies: - zod @@ -12865,9 +12877,9 @@ snapshots: eventsource-parser: 3.0.8 zod: 4.4.3 - '@ai-sdk/provider-utils@5.0.0-beta.49(zod@4.4.3)': + '@ai-sdk/provider-utils@5.0.0(zod@4.4.3)': dependencies: - '@ai-sdk/provider': 4.0.0-beta.19 + '@ai-sdk/provider': 4.0.0 '@standard-schema/spec': 1.1.0 '@workflow/serde': 4.1.0 eventsource-parser: 3.0.8 @@ -12877,7 +12889,7 @@ snapshots: dependencies: json-schema: 0.4.0 - '@ai-sdk/provider@4.0.0-beta.19': + '@ai-sdk/provider@4.0.0': dependencies: json-schema: 0.4.0 @@ -13368,20 +13380,20 @@ snapshots: human-id: 4.1.3 prettier: 2.8.8 - '@chat-adapter/shared@4.31.0(ai@7.0.0-beta.178(zod@4.4.3))(zod@4.4.3)': + '@chat-adapter/shared@4.31.0(ai@7.0.0(zod@4.4.3))(zod@4.4.3)': dependencies: - chat: 4.31.0(ai@7.0.0-beta.178(zod@4.4.3))(zod@4.4.3) + chat: 4.31.0(ai@7.0.0(zod@4.4.3))(zod@4.4.3) transitivePeerDependencies: - ai - supports-color - zod - '@chat-adapter/slack@4.31.0(ai@7.0.0-beta.178(zod@4.4.3))(zod@4.4.3)': + '@chat-adapter/slack@4.31.0(ai@7.0.0(zod@4.4.3))(zod@4.4.3)': dependencies: - '@chat-adapter/shared': 4.31.0(ai@7.0.0-beta.178(zod@4.4.3))(zod@4.4.3) + '@chat-adapter/shared': 4.31.0(ai@7.0.0(zod@4.4.3))(zod@4.4.3) '@slack/socket-mode': 2.0.7 '@slack/web-api': 7.16.0 - chat: 4.31.0(ai@7.0.0-beta.178(zod@4.4.3))(zod@4.4.3) + chat: 4.31.0(ai@7.0.0(zod@4.4.3))(zod@4.4.3) transitivePeerDependencies: - ai - bufferutil @@ -13390,9 +13402,9 @@ snapshots: - utf-8-validate - zod - '@chat-adapter/state-memory@4.31.0(ai@7.0.0-beta.178(zod@4.4.3))(zod@4.4.3)': + '@chat-adapter/state-memory@4.31.0(ai@7.0.0(zod@4.4.3))(zod@4.4.3)': dependencies: - chat: 4.31.0(ai@7.0.0-beta.178(zod@4.4.3))(zod@4.4.3) + chat: 4.31.0(ai@7.0.0(zod@4.4.3))(zod@4.4.3) transitivePeerDependencies: - ai - supports-color @@ -14513,6 +14525,75 @@ snapshots: - uploadthing - xml2js + '@nuxt/nitro-server@4.4.6(355aa972cbce473ecd0a6783b15860ed)': + dependencies: + '@nuxt/devalue': 2.0.2 + '@nuxt/kit': 4.4.6(magicast@0.5.3) + '@unhead/vue': 2.1.15(vue@3.5.35(typescript@6.0.3)) + '@vue/shared': 3.5.35 + consola: 3.4.2 + defu: 6.1.7 + destr: 2.0.5 + devalue: 5.8.1 + errx: 0.1.0 + escape-string-regexp: 5.0.0 + exsolve: 1.0.8 + h3: 1.15.11 + impound: 1.1.5 + klona: 2.0.6 + mocked-exports: 0.1.1 + nitropack: 2.13.4(@vercel/blob@2.4.0)(@vercel/functions@3.7.1(@aws-sdk/credential-provider-web-identity@3.972.49)(ws@8.21.0))(oxc-parser@0.131.0)(rolldown@1.1.0)(srvx@0.11.16) + nuxt: 4.4.6(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.0))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.0))(@parcel/watcher@2.5.6)(@types/node@25.9.1)(@vercel/blob@2.4.0)(@vercel/functions@3.7.1(@aws-sdk/credential-provider-web-identity@3.972.49)(ws@8.21.0))(@vue/compiler-sfc@3.5.35)(cac@6.7.14)(db0@0.3.4)(eslint@10.4.0(jiti@2.7.0))(ioredis@5.11.0)(lightningcss@1.32.0)(magicast@0.5.3)(optionator@0.9.4)(oxlint@1.70.0)(rolldown@1.1.0)(rollup-plugin-visualizer@7.0.1(rolldown@1.1.0)(rollup@4.60.4))(rollup@4.60.4)(srvx@0.11.16)(terser@5.48.0)(tsx@4.21.0)(typescript@6.0.3)(vite@8.0.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(terser@5.48.0)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0) + nypm: 0.6.6 + ohash: 2.0.11 + pathe: 2.0.3 + rou3: 0.8.1 + std-env: 4.1.0 + ufo: 1.6.4 + unctx: 2.5.0 + unstorage: 1.17.5(@vercel/blob@2.4.0)(@vercel/functions@3.7.1(@aws-sdk/credential-provider-web-identity@3.972.49)(ws@8.21.0))(db0@0.3.4)(ioredis@5.11.0) + vue: 3.5.35(typescript@6.0.3) + vue-bundle-renderer: 2.2.0 + vue-devtools-stub: 0.1.0 + optionalDependencies: + '@babel/plugin-syntax-typescript': 7.29.7(@babel/core@7.29.0) + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@electric-sql/pglite' + - '@libsql/client' + - '@netlify/blobs' + - '@planetscale/database' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - bare-abort-controller + - better-sqlite3 + - db0 + - drizzle-orm + - encoding + - idb-keyval + - ioredis + - magicast + - mysql2 + - oxc-parser + - react-native-b4a + - rolldown + - sqlite3 + - srvx + - supports-color + - typescript + - uploadthing + - xml2js + '@nuxt/nitro-server@4.4.6(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.0))(@vercel/blob@2.4.0)(@vercel/functions@3.7.1(@aws-sdk/credential-provider-web-identity@3.972.49)(ws@8.21.0))(db0@0.3.4)(ioredis@5.11.0)(magicast@0.5.3)(nuxt@4.4.6(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.0))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.0))(@parcel/watcher@2.5.6)(@types/node@25.9.1)(@vercel/blob@2.4.0)(@vercel/functions@3.7.1(@aws-sdk/credential-provider-web-identity@3.972.49)(ws@8.21.0))(@vue/compiler-sfc@3.5.35)(cac@6.7.14)(db0@0.3.4)(eslint@10.4.0(jiti@2.7.0))(ioredis@5.11.0)(lightningcss@1.32.0)(magicast@0.5.3)(optionator@0.9.4)(oxlint@1.70.0)(rolldown@1.1.0)(rollup-plugin-visualizer@7.0.1(rolldown@1.1.0)(rollup@4.60.4))(rollup@4.60.4)(srvx@0.11.16)(terser@5.48.0)(tsx@4.21.0)(typescript@6.0.3)(vite@7.3.3(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.48.0)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0))(oxc-parser@0.131.0)(rolldown@1.1.0)(srvx@0.11.16)(typescript@6.0.3)': dependencies: '@nuxt/devalue': 2.0.2 @@ -14583,75 +14664,6 @@ snapshots: - xml2js optional: true - '@nuxt/nitro-server@4.4.6(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.0))(@vercel/blob@2.4.0)(@vercel/functions@3.7.1(@aws-sdk/credential-provider-web-identity@3.972.49)(ws@8.21.0))(db0@0.3.4)(ioredis@5.11.0)(magicast@0.5.3)(nuxt@4.4.6(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.0))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.0))(@parcel/watcher@2.5.6)(@types/node@25.9.1)(@vercel/blob@2.4.0)(@vercel/functions@3.7.1(@aws-sdk/credential-provider-web-identity@3.972.49)(ws@8.21.0))(@vue/compiler-sfc@3.5.35)(cac@6.7.14)(db0@0.3.4)(eslint@10.4.0(jiti@2.7.0))(ioredis@5.11.0)(lightningcss@1.32.0)(magicast@0.5.3)(optionator@0.9.4)(oxlint@1.70.0)(rolldown@1.1.0)(rollup-plugin-visualizer@7.0.1(rolldown@1.1.0)(rollup@4.60.4))(rollup@4.60.4)(terser@5.48.0)(tsx@4.21.0)(typescript@6.0.3)(vite@8.0.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(terser@5.48.0)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0))(oxc-parser@0.131.0)(rolldown@1.1.0)(typescript@6.0.3)': - dependencies: - '@nuxt/devalue': 2.0.2 - '@nuxt/kit': 4.4.6(magicast@0.5.3) - '@unhead/vue': 2.1.15(vue@3.5.35(typescript@6.0.3)) - '@vue/shared': 3.5.35 - consola: 3.4.2 - defu: 6.1.7 - destr: 2.0.5 - devalue: 5.8.1 - errx: 0.1.0 - escape-string-regexp: 5.0.0 - exsolve: 1.0.8 - h3: 1.15.11 - impound: 1.1.5 - klona: 2.0.6 - mocked-exports: 0.1.1 - nitropack: 2.13.4(@vercel/blob@2.4.0)(@vercel/functions@3.7.1(@aws-sdk/credential-provider-web-identity@3.972.49)(ws@8.21.0))(oxc-parser@0.131.0)(rolldown@1.1.0)(srvx@0.11.16) - nuxt: 4.4.6(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.0))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.0))(@parcel/watcher@2.5.6)(@types/node@25.9.1)(@vercel/blob@2.4.0)(@vercel/functions@3.7.1(@aws-sdk/credential-provider-web-identity@3.972.49)(ws@8.21.0))(@vue/compiler-sfc@3.5.35)(cac@6.7.14)(db0@0.3.4)(eslint@10.4.0(jiti@2.7.0))(ioredis@5.11.0)(lightningcss@1.32.0)(magicast@0.5.3)(optionator@0.9.4)(oxlint@1.70.0)(rolldown@1.1.0)(rollup-plugin-visualizer@7.0.1(rolldown@1.1.0)(rollup@4.60.4))(rollup@4.60.4)(terser@5.48.0)(tsx@4.21.0)(typescript@6.0.3)(vite@8.0.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(terser@5.48.0)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0) - nypm: 0.6.6 - ohash: 2.0.11 - pathe: 2.0.3 - rou3: 0.8.1 - std-env: 4.1.0 - ufo: 1.6.4 - unctx: 2.5.0 - unstorage: 1.17.5(@vercel/blob@2.4.0)(@vercel/functions@3.7.1(@aws-sdk/credential-provider-web-identity@3.972.49)(ws@8.21.0))(db0@0.3.4)(ioredis@5.11.0) - vue: 3.5.35(typescript@6.0.3) - vue-bundle-renderer: 2.2.0 - vue-devtools-stub: 0.1.0 - optionalDependencies: - '@babel/plugin-syntax-typescript': 7.29.7(@babel/core@7.29.0) - transitivePeerDependencies: - - '@azure/app-configuration' - - '@azure/cosmos' - - '@azure/data-tables' - - '@azure/identity' - - '@azure/keyvault-secrets' - - '@azure/storage-blob' - - '@capacitor/preferences' - - '@deno/kv' - - '@electric-sql/pglite' - - '@libsql/client' - - '@netlify/blobs' - - '@planetscale/database' - - '@upstash/redis' - - '@vercel/blob' - - '@vercel/functions' - - '@vercel/kv' - - aws4fetch - - bare-abort-controller - - better-sqlite3 - - db0 - - drizzle-orm - - encoding - - idb-keyval - - ioredis - - magicast - - mysql2 - - oxc-parser - - react-native-b4a - - rolldown - - sqlite3 - - srvx - - supports-color - - typescript - - uploadthing - - xml2js - '@nuxt/schema@4.4.6': dependencies: '@vue/shared': 3.5.35 @@ -14669,67 +14681,6 @@ snapshots: rc9: 3.0.1 std-env: 4.1.0 - '@nuxt/vite-builder@4.4.6(179cca41d7408deb23af4177246f82d1)': - dependencies: - '@nuxt/kit': 4.4.6(magicast@0.5.3) - '@rollup/plugin-replace': 6.0.3(rollup@4.60.4) - '@vitejs/plugin-vue': 6.0.7(vite@7.3.3(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.48.0)(tsx@4.21.0)(yaml@2.9.0))(vue@3.5.35(typescript@6.0.3)) - '@vitejs/plugin-vue-jsx': 5.1.5(vite@7.3.3(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.48.0)(tsx@4.21.0)(yaml@2.9.0))(vue@3.5.35(typescript@6.0.3)) - autoprefixer: 10.5.0(postcss@8.5.15) - consola: 3.4.2 - cssnano: 8.0.1(postcss@8.5.15) - defu: 6.1.7 - escape-string-regexp: 5.0.0 - exsolve: 1.0.8 - get-port-please: 3.2.0 - jiti: 2.7.0 - knitwork: 1.3.0 - magic-string: 0.30.21 - mlly: 1.8.2 - mocked-exports: 0.1.1 - nuxt: 4.4.6(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.0))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.0))(@parcel/watcher@2.5.6)(@types/node@25.9.1)(@vercel/blob@2.4.0)(@vercel/functions@3.7.1(@aws-sdk/credential-provider-web-identity@3.972.49)(ws@8.21.0))(@vue/compiler-sfc@3.5.35)(cac@6.7.14)(db0@0.3.4)(eslint@10.4.0(jiti@2.7.0))(ioredis@5.11.0)(lightningcss@1.32.0)(magicast@0.5.3)(optionator@0.9.4)(oxlint@1.70.0)(rolldown@1.1.0)(rollup-plugin-visualizer@7.0.1(rolldown@1.1.0)(rollup@4.60.4))(rollup@4.60.4)(terser@5.48.0)(tsx@4.21.0)(typescript@6.0.3)(vite@8.0.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(terser@5.48.0)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0) - nypm: 0.6.6 - pathe: 2.0.3 - pkg-types: 2.3.1 - postcss: 8.5.15 - seroval: 1.5.4 - std-env: 4.1.0 - ufo: 1.6.4 - unenv: 2.0.0-rc.24 - vite: 7.3.3(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.48.0)(tsx@4.21.0)(yaml@2.9.0) - vite-node: 5.3.0(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.48.0)(tsx@4.21.0)(yaml@2.9.0) - vite-plugin-checker: 0.13.0(eslint@10.4.0(jiti@2.7.0))(optionator@0.9.4)(oxlint@1.70.0)(typescript@6.0.3)(vite@7.3.3(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.48.0)(tsx@4.21.0)(yaml@2.9.0)) - vue: 3.5.35(typescript@6.0.3) - vue-bundle-renderer: 2.2.0 - optionalDependencies: - '@babel/plugin-syntax-jsx': 7.29.7(@babel/core@7.29.0) - rolldown: 1.1.0 - rollup-plugin-visualizer: 7.0.1(rolldown@1.1.0)(rollup@4.60.4) - transitivePeerDependencies: - - '@biomejs/biome' - - '@types/node' - - eslint - - less - - lightningcss - - magicast - - meow - - optionator - - oxlint - - rollup - - sass - - sass-embedded - - stylelint - - stylus - - sugarss - - supports-color - - terser - - tsx - - typescript - - vls - - vti - - vue-tsc - - yaml - '@nuxt/vite-builder@4.4.6(357c5152dbdbefdd44e9614a9454cdd1)': dependencies: '@nuxt/kit': 4.4.6(magicast@0.5.3) @@ -14792,6 +14743,67 @@ snapshots: - yaml optional: true + '@nuxt/vite-builder@4.4.6(772227546e20b752c7ab17acaadd8237)': + dependencies: + '@nuxt/kit': 4.4.6(magicast@0.5.3) + '@rollup/plugin-replace': 6.0.3(rollup@4.60.4) + '@vitejs/plugin-vue': 6.0.7(vite@7.3.3(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.48.0)(tsx@4.21.0)(yaml@2.9.0))(vue@3.5.35(typescript@6.0.3)) + '@vitejs/plugin-vue-jsx': 5.1.5(vite@7.3.3(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.48.0)(tsx@4.21.0)(yaml@2.9.0))(vue@3.5.35(typescript@6.0.3)) + autoprefixer: 10.5.0(postcss@8.5.15) + consola: 3.4.2 + cssnano: 8.0.1(postcss@8.5.15) + defu: 6.1.7 + escape-string-regexp: 5.0.0 + exsolve: 1.0.8 + get-port-please: 3.2.0 + jiti: 2.7.0 + knitwork: 1.3.0 + magic-string: 0.30.21 + mlly: 1.8.2 + mocked-exports: 0.1.1 + nuxt: 4.4.6(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.0))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.0))(@parcel/watcher@2.5.6)(@types/node@25.9.1)(@vercel/blob@2.4.0)(@vercel/functions@3.7.1(@aws-sdk/credential-provider-web-identity@3.972.49)(ws@8.21.0))(@vue/compiler-sfc@3.5.35)(cac@6.7.14)(db0@0.3.4)(eslint@10.4.0(jiti@2.7.0))(ioredis@5.11.0)(lightningcss@1.32.0)(magicast@0.5.3)(optionator@0.9.4)(oxlint@1.70.0)(rolldown@1.1.0)(rollup-plugin-visualizer@7.0.1(rolldown@1.1.0)(rollup@4.60.4))(rollup@4.60.4)(srvx@0.11.16)(terser@5.48.0)(tsx@4.21.0)(typescript@6.0.3)(vite@8.0.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(terser@5.48.0)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0) + nypm: 0.6.6 + pathe: 2.0.3 + pkg-types: 2.3.1 + postcss: 8.5.15 + seroval: 1.5.4 + std-env: 4.1.0 + ufo: 1.6.4 + unenv: 2.0.0-rc.24 + vite: 7.3.3(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.48.0)(tsx@4.21.0)(yaml@2.9.0) + vite-node: 5.3.0(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.48.0)(tsx@4.21.0)(yaml@2.9.0) + vite-plugin-checker: 0.13.0(eslint@10.4.0(jiti@2.7.0))(optionator@0.9.4)(oxlint@1.70.0)(typescript@6.0.3)(vite@7.3.3(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.48.0)(tsx@4.21.0)(yaml@2.9.0)) + vue: 3.5.35(typescript@6.0.3) + vue-bundle-renderer: 2.2.0 + optionalDependencies: + '@babel/plugin-syntax-jsx': 7.29.7(@babel/core@7.29.0) + rolldown: 1.1.0 + rollup-plugin-visualizer: 7.0.1(rolldown@1.1.0)(rollup@4.60.4) + transitivePeerDependencies: + - '@biomejs/biome' + - '@types/node' + - eslint + - less + - lightningcss + - magicast + - meow + - optionator + - oxlint + - rollup + - sass + - sass-embedded + - stylelint + - stylus + - sugarss + - supports-color + - terser + - tsx + - typescript + - vls + - vti + - vue-tsc + - yaml + '@nuxt/vite-builder@4.4.6(eb203581bd643ab4f7d80d8bc2915558)': dependencies: '@nuxt/kit': 4.4.6(magicast@0.5.3) @@ -18217,12 +18229,13 @@ snapshots: dependencies: execa: 5.1.1 - '@vercel/connect@0.2.2(@auth/core@0.41.2)(ai@7.0.0-beta.178(zod@4.4.3))(eve@packages+eve)': + '@vercel/connect@0.2.2(@ai-sdk/mcp@2.0.0(zod@4.4.3))(@auth/core@0.41.2)(ai@7.0.0(zod@4.4.3))(eve@packages+eve)': dependencies: '@vercel/oidc': 3.6.1 optionalDependencies: + '@ai-sdk/mcp': 2.0.0(zod@4.4.3) '@auth/core': 0.41.2 - ai: 7.0.0-beta.178(zod@4.4.3) + ai: 7.0.0(zod@4.4.3) eve: link:packages/eve '@vercel/detect-agent@1.2.3': {} @@ -18924,11 +18937,11 @@ snapshots: '@opentelemetry/api': 1.9.1 zod: 4.4.3 - ai@7.0.0-beta.178(zod@4.4.3): + ai@7.0.0(zod@4.4.3): dependencies: - '@ai-sdk/gateway': 4.0.0-beta.109(zod@4.4.3) - '@ai-sdk/provider': 4.0.0-beta.19 - '@ai-sdk/provider-utils': 5.0.0-beta.49(zod@4.4.3) + '@ai-sdk/gateway': 4.0.0(zod@4.4.3) + '@ai-sdk/provider': 4.0.0 + '@ai-sdk/provider-utils': 5.0.0(zod@4.4.3) zod: 4.4.3 ajv@6.15.0: @@ -19395,7 +19408,7 @@ snapshots: chardet@2.1.1: {} - chat@4.31.0(ai@7.0.0-beta.178(zod@4.4.3))(zod@4.4.3): + chat@4.31.0(ai@7.0.0(zod@4.4.3))(zod@4.4.3): dependencies: '@workflow/serde': 4.1.0-beta.2 mdast-util-to-string: 4.0.0 @@ -19405,7 +19418,7 @@ snapshots: remend: 1.3.0 unified: 11.0.5 optionalDependencies: - ai: 7.0.0-beta.178(zod@4.4.3) + ai: 7.0.0(zod@4.4.3) zod: 4.4.3 transitivePeerDependencies: - supports-color @@ -20712,9 +20725,9 @@ snapshots: expect-type@1.3.0: {} - experimental-ai-sdk-code-mode@1.0.14(ai@7.0.0-beta.178(zod@4.4.3)): + experimental-ai-sdk-code-mode@1.0.14(ai@7.0.0(zod@4.4.3)): dependencies: - ai: 7.0.0-beta.178(zod@4.4.3) + ai: 7.0.0(zod@4.4.3) express@5.2.1: dependencies: @@ -23394,16 +23407,16 @@ snapshots: - yaml optional: true - nuxt@4.4.6(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.0))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.0))(@parcel/watcher@2.5.6)(@types/node@25.9.1)(@vercel/blob@2.4.0)(@vercel/functions@3.7.1(@aws-sdk/credential-provider-web-identity@3.972.49)(ws@8.21.0))(@vue/compiler-sfc@3.5.35)(cac@6.7.14)(db0@0.3.4)(eslint@10.4.0(jiti@2.7.0))(ioredis@5.11.0)(lightningcss@1.32.0)(magicast@0.5.3)(optionator@0.9.4)(oxlint@1.70.0)(rolldown@1.1.0)(rollup-plugin-visualizer@7.0.1(rolldown@1.1.0)(rollup@4.60.4))(rollup@4.60.4)(terser@5.48.0)(tsx@4.21.0)(typescript@6.0.3)(vite@8.0.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(terser@5.48.0)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0): + nuxt@4.4.6(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.0))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.0))(@parcel/watcher@2.5.6)(@types/node@25.9.1)(@vercel/blob@2.4.0)(@vercel/functions@3.7.1(@aws-sdk/credential-provider-web-identity@3.972.49)(ws@8.21.0))(@vue/compiler-sfc@3.5.35)(cac@6.7.14)(db0@0.3.4)(eslint@10.4.0(jiti@2.7.0))(ioredis@5.11.0)(lightningcss@1.32.0)(magicast@0.5.3)(optionator@0.9.4)(oxlint@1.70.0)(rolldown@1.1.0)(rollup-plugin-visualizer@7.0.1(rolldown@1.1.0)(rollup@4.60.4))(rollup@4.60.4)(srvx@0.11.16)(terser@5.48.0)(tsx@4.21.0)(typescript@6.0.3)(vite@8.0.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(terser@5.48.0)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0): dependencies: '@dxup/nuxt': 0.4.1(magicast@0.5.3)(typescript@6.0.3) '@nuxt/cli': 3.35.2(@nuxt/schema@4.4.6)(cac@6.7.14)(commander@14.0.3)(magicast@0.5.3) '@nuxt/devtools': 3.2.4(vite@8.0.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(terser@5.48.0)(tsx@4.21.0)(yaml@2.9.0))(vue@3.5.35(typescript@6.0.3)) '@nuxt/kit': 4.4.6(magicast@0.5.3) - '@nuxt/nitro-server': 4.4.6(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.0))(@vercel/blob@2.4.0)(@vercel/functions@3.7.1(@aws-sdk/credential-provider-web-identity@3.972.49)(ws@8.21.0))(db0@0.3.4)(ioredis@5.11.0)(magicast@0.5.3)(nuxt@4.4.6(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.0))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.0))(@parcel/watcher@2.5.6)(@types/node@25.9.1)(@vercel/blob@2.4.0)(@vercel/functions@3.7.1(@aws-sdk/credential-provider-web-identity@3.972.49)(ws@8.21.0))(@vue/compiler-sfc@3.5.35)(cac@6.7.14)(db0@0.3.4)(eslint@10.4.0(jiti@2.7.0))(ioredis@5.11.0)(lightningcss@1.32.0)(magicast@0.5.3)(optionator@0.9.4)(oxlint@1.70.0)(rolldown@1.1.0)(rollup-plugin-visualizer@7.0.1(rolldown@1.1.0)(rollup@4.60.4))(rollup@4.60.4)(terser@5.48.0)(tsx@4.21.0)(typescript@6.0.3)(vite@8.0.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(terser@5.48.0)(tsx@4.21.0)(yaml@2.9.0))(yaml@2.9.0))(oxc-parser@0.131.0)(rolldown@1.1.0)(typescript@6.0.3) + '@nuxt/nitro-server': 4.4.6(355aa972cbce473ecd0a6783b15860ed) '@nuxt/schema': 4.4.6 '@nuxt/telemetry': 2.8.0(@nuxt/kit@4.4.6(magicast@0.5.3)) - '@nuxt/vite-builder': 4.4.6(179cca41d7408deb23af4177246f82d1) + '@nuxt/vite-builder': 4.4.6(772227546e20b752c7ab17acaadd8237) '@unhead/vue': 2.1.15(vue@3.5.35(typescript@6.0.3)) '@vue/shared': 3.5.35 chokidar: 5.0.0 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index a2b11d54d..6e1b7fec9 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -18,20 +18,19 @@ allowBuilds: vue-demi: false catalog: - "@ai-sdk/anthropic": "4.0.0-beta.67" - "@ai-sdk/google": "4.0.0-beta.82" - "@ai-sdk/mcp": "2.0.0-beta.66" - "@ai-sdk/openai": "4.0.0-beta.74" - "@ai-sdk/otel": "1.0.0-beta.124" - "@ai-sdk/provider": "4.0.0-beta.19" - "@ai-sdk/provider-utils": "5.0.0-beta.49" - "@ai-sdk/react": "4.0.0-beta.182" + "@ai-sdk/anthropic": "^4.0.0" + "@ai-sdk/google": "^4.0.0" + "@ai-sdk/mcp": "^2.0.0" + "@ai-sdk/openai": "^4.0.0" + "@ai-sdk/otel": "^1.0.0" + "@ai-sdk/provider": "^4.0.0" + "@ai-sdk/provider-utils": "^5.0.0" "@types/node": "25.9.1" "@types/react": "19.2.15" "@types/react-dom": "19.2.3" "@vercel/connect": "0.2.2" "@vercel/sandbox": "2.2.1" - ai: "7.0.0-beta.178" + ai: "^7.0.0" next: "16.2.6" picocolors: "1.1.1" react: "19.2.6" @@ -45,6 +44,7 @@ minimumReleaseAge: 2880 # 2 days minimumReleaseAgeExclude: - "@ai-sdk/*" + - "@rolldown/*" - "@typescript/typescript-*" - "@turbo/*" - "@workflow/*" @@ -54,6 +54,8 @@ minimumReleaseAgeExclude: - experimental-ai-sdk-code-mode - eve - nitro + - rolldown - turbo - typescript - vercel + - workflow