diff --git a/apps/studio/components/ui/AIAssistantPanel/AIAssistant.tsx b/apps/studio/components/ui/AIAssistantPanel/AIAssistant.tsx index ad60d7afc75b8..fc93abf135ee9 100644 --- a/apps/studio/components/ui/AIAssistantPanel/AIAssistant.tsx +++ b/apps/studio/components/ui/AIAssistantPanel/AIAssistant.tsx @@ -1,6 +1,6 @@ import type { UIMessage as MessageType } from '@ai-sdk/react' import { useChat } from '@ai-sdk/react' -import { DefaultChatTransport } from 'ai' +import { DefaultChatTransport, lastAssistantMessageIsCompleteWithToolCalls } from 'ai' import { AnimatePresence, motion } from 'framer-motion' import { Eraser, Info, Pencil, X } from 'lucide-react' import { useRouter } from 'next/router' @@ -106,6 +106,21 @@ export const AIAssistant = ({ className }: AIAssistantProps) => { const { mutate: sendEvent } = useSendEventMutation() + const updateMessage = useCallback( + ({ + messageId, + resultId, + results, + }: { + messageId: string + resultId?: string + results: any[] + }) => { + snap.updateMessage({ id: messageId, resultId, results }) + }, + [snap] + ) + // Handle completion of the assistant's response const handleChatFinish = useCallback( ({ message }: { message: MessageType }) => { @@ -122,6 +137,17 @@ export const AIAssistant = ({ className }: AIAssistantProps) => { // TODO(refactor): This useChat hook should be moved down into each chat session. // That way we won't have to disable switching chats while the chat is loading, // and don't run the risk of messages getting mixed up between chats. + // Sanitize messages to remove Valtio proxy wrappers that can't be cloned + const sanitizedMessages = useMemo(() => { + if (!snap.activeChat?.messages) return undefined + + return snap.activeChat.messages.map((msg: any) => { + // Convert proxy objects to plain objects + const plainMessage = JSON.parse(JSON.stringify(msg)) + return plainMessage + }) + }, [snap.activeChat?.messages]) + const { messages: chatMessages, status: chatStatus, @@ -133,25 +159,31 @@ export const AIAssistant = ({ className }: AIAssistantProps) => { regenerate, } = useChat({ id: snap.activeChatId, - // [Alaister] typecast is needed here because valtio returns readonly arrays - // and useChat expects a mutable array - messages: snap.activeChat?.messages as unknown as MessageType[] | undefined, + sendAutomaticallyWhen: lastAssistantMessageIsCompleteWithToolCalls, + messages: sanitizedMessages, async onToolCall({ toolCall }) { + if (toolCall.dynamic) { + return + } + if (toolCall.toolName === 'rename_chat') { const { newName } = toolCall.input as { newName: string } + if (snap.activeChatId && newName?.trim()) { snap.renameChat(snap.activeChatId, newName.trim()) + addToolResult({ tool: toolCall.toolName, toolCallId: toolCall.toolCallId, output: 'Chat renamed', }) + } else { + addToolResult({ + tool: toolCall.toolName, + toolCallId: toolCall.toolCallId, + output: 'Failed to rename chat: Invalid chat or name', + }) } - addToolResult({ - tool: toolCall.toolName, - toolCallId: toolCall.toolCallId, - output: 'Failed to rename chat: Invalid chat or name', - }) } }, transport: new DefaultChatTransport({ @@ -160,7 +192,7 @@ export const AIAssistant = ({ className }: AIAssistantProps) => { // [Joshen] Specifically limiting the chat history that get's sent to reduce the // size of the context that goes into the model. This should always be an odd number // as much as possible so that the first message is always the user's - const MAX_CHAT_HISTORY = 5 + const MAX_CHAT_HISTORY = 7 const slicedMessages = messages.slice(-MAX_CHAT_HISTORY) @@ -198,21 +230,6 @@ export const AIAssistant = ({ className }: AIAssistantProps) => { const isChatLoading = chatStatus === 'submitted' || chatStatus === 'streaming' - const updateMessage = useCallback( - ({ - messageId, - resultId, - results, - }: { - messageId: string - resultId?: string - results: any[] - }) => { - snap.updateMessage({ id: messageId, resultId, results }) - }, - [snap] - ) - const deleteMessageFromHere = useCallback( (messageId: string) => { // Find the message index in current chatMessages @@ -299,7 +316,6 @@ export const AIAssistant = ({ className }: AIAssistantProps) => { ) const hasMessages = chatMessages.length > 0 - const isShowingOnboarding = !hasMessages && isApiKeySet const sendMessageToAssistant = (finalContent: string) => { if (editingMessageId) { @@ -391,18 +407,17 @@ export const AIAssistant = ({ className }: AIAssistantProps) => { ]} >
- - - - {hasMessages && ( + + {hasMessages ? ( + {renderedMessages} {error && ( @@ -442,14 +457,24 @@ export const AIAssistant = ({ className }: AIAssistantProps) => { )} - )} - - - + + + ) : ( + setValue(val)} + onFocusInput={() => inputRef.current?.focus()} + /> + )} {editingMessageId && ( @@ -519,19 +544,6 @@ export const AIAssistant = ({ className }: AIAssistantProps) => { /> )} - {isShowingOnboarding && ( - setValue(val)} - onFocusInput={() => inputRef.current?.focus()} - /> - )} - lint.level === LINTER_LEVELS.ERROR) ?? [] + const [securityErrorLints, performanceErrorLints] = partition( + errorLints, + (lint) => lint.categories?.[0] === 'SECURITY' + ) + return ( -
-
-

How can I assist you?

-

- Generate SQL, RLS policies and edge functions, debug issues or check on your project - health. -

-
-
- {prompts.map((item, index) => ( - - - - ))} +
+
+
+

How can I assist you?

+ {suggestions?.prompts?.length ? ( + <> +

Suggestions

+ {prompts.map((item, index) => ( + + + + ))} + + ) : ( + <> + {isLintsLoading ? ( +
+ {Array.from({ length: 6 }).map((_, index) => ( + + ))} +
+ ) : ( + <> + {performanceErrorLints.length > 0 && ( +
+

+ Improve Performance +

+ {performanceErrorLints.map((lint, index) => { + return ( + + ) + })} +
+ )} + + {securityErrorLints.length > 0 && ( +
+

+ Improve Security +

+ {securityErrorLints.map((lint, index) => { + return ( + + ) + })} +
+ )} + +
+

Ideas

+ {prompts.map((item, index) => ( + + ))} +
+ + )} + + )} +
) diff --git a/apps/studio/lib/ai/model.test.ts b/apps/studio/lib/ai/model.test.ts index 7b5c58a4ae35f..70a4626d529e3 100644 --- a/apps/studio/lib/ai/model.test.ts +++ b/apps/studio/lib/ai/model.test.ts @@ -4,7 +4,7 @@ import * as bedrockModule from './bedrock' import { getModel, ModelErrorMessage } from './model' vi.mock('@ai-sdk/openai', () => ({ - openai: { chat: vi.fn(() => 'openai-model') }, + openai: vi.fn(() => 'openai-model'), })) vi.mock('./bedrock', async () => ({ @@ -68,7 +68,7 @@ describe('getModel', () => { expect(model).toEqual('openai-model') // Default openai model in registry is gpt-5-mini - expect(openai.chat).toHaveBeenCalledWith('gpt-5-mini') + expect(openai).toHaveBeenCalledWith('gpt-5-mini') expect(promptProviderOptions).toBeUndefined() }) @@ -94,6 +94,6 @@ describe('getModel', () => { expect(error).toBeUndefined() expect(model).toEqual('openai-model') - expect(openai.chat).toHaveBeenCalledWith('gpt-5') + expect(openai).toHaveBeenCalledWith('gpt-5') }) }) diff --git a/apps/studio/lib/ai/model.ts b/apps/studio/lib/ai/model.ts index 0bb966f48b862..ff878b6297da2 100644 --- a/apps/studio/lib/ai/model.ts +++ b/apps/studio/lib/ai/model.ts @@ -100,7 +100,7 @@ export async function getModel({ return { error: new Error('OPENAI_API_KEY not available') } } return { - model: openai.chat(chosenModelId as OpenAIModel), + model: openai(chosenModelId as OpenAIModel), promptProviderOptions: models[chosenModelId as OpenAIModel]?.promptProviderOptions, providerOptions: providerRegistry.providerOptions, } diff --git a/apps/studio/lib/ai/model.utils.ts b/apps/studio/lib/ai/model.utils.ts index d876d926b428f..bdd3d83d03ac2 100644 --- a/apps/studio/lib/ai/model.utils.ts +++ b/apps/studio/lib/ai/model.utils.ts @@ -54,7 +54,7 @@ export const PROVIDERS: ProviderRegistry = { }, providerOptions: { openai: { - reasoningEffort: 'low', + reasoningEffort: 'minimal', textVerbosity: 'low', }, }, diff --git a/apps/studio/lib/ai/tool-filter.test.ts b/apps/studio/lib/ai/tool-filter.test.ts index c419c119e47d1..5ca60c9b7f3c1 100644 --- a/apps/studio/lib/ai/tool-filter.test.ts +++ b/apps/studio/lib/ai/tool-filter.test.ts @@ -8,7 +8,6 @@ import { filterToolsByOptInLevel, createPrivacyMessageTool, toolSetValidationSchema, - transformToolResult, } from './tool-filter' describe('TOOL_CATEGORY_MAP', () => { @@ -237,56 +236,6 @@ describe('createPrivacyMessageTool', () => { }) }) -describe('transformToolResult', () => { - it('should wrap a tool with a result transformation function', async () => { - const originalResult = { data: 'original' } - - const mockTool = { - description: 'Test tool', - execute: vitest.fn().mockResolvedValue(originalResult), - } as unknown as Tool - - const transformFn = vitest.fn((result: typeof originalResult) => ({ - data: `${result.data} - transformed`, - })) - - const transformedTool = transformToolResult(mockTool, transformFn) - - // Tool properties should be preserved - expect(transformedTool.description).toBe(mockTool.description) - - // Execute the transformed tool - const args = { key: 'value' } - const options = {} as any - - if (!transformedTool.execute) { - throw new Error('Transformed tool does not have an execute function') - } - - const result = await transformedTool.execute(args, options) - - // Original tool should have been called with the same arguments - expect(mockTool.execute).toHaveBeenCalledWith(args, options) - - // Transform function should have been called with the original result - expect(transformFn).toHaveBeenCalledWith(originalResult) - - // Final result should be the transformed value - expect(result).toEqual({ data: 'original - transformed' }) - }) - - it('should throw an error if tool is null', () => { - expect(() => transformToolResult(null as any, () => ({}))).toThrow('Tool is required') - }) - - it('should throw an error if tool does not have an execute function', () => { - const invalidTool = { name: 'invalid' } as any - expect(() => transformToolResult(invalidTool, () => ({}))).toThrow( - 'Tool does not have an execute function' - ) - }) -}) - describe('toolSetValidationSchema', () => { it('should accept subset of known tools', () => { const validSubset = { diff --git a/apps/studio/lib/ai/tool-filter.ts b/apps/studio/lib/ai/tool-filter.ts index 33d5f07c7fa0d..a344b3f03e066 100644 --- a/apps/studio/lib/ai/tool-filter.ts +++ b/apps/studio/lib/ai/tool-filter.ts @@ -42,31 +42,6 @@ export const toolSetValidationSchema = z.record( basicToolSchema ) -/** - * Transforms the result of a tool execution to a new output. - */ -export function transformToolResult( - tool: Tool, - execute: (result: OriginalResult) => NewResult -): Tool { - if (!tool) { - throw new Error('Tool is required') - } - - if (!tool.execute) { - throw new Error('Tool does not have an execute function') - } - - // Intercept the tool to add a custom execute function - return { - ...tool, - execute: async (args: any, options: any) => { - const result = await tool.execute!(args, options) - return execute(result) - }, - } as unknown as Tool -} - /** * Tool categories based on the data they access */ diff --git a/apps/studio/package.json b/apps/studio/package.json index e9e53af5cfcd3..7cb777345f687 100644 --- a/apps/studio/package.json +++ b/apps/studio/package.json @@ -26,10 +26,10 @@ }, "dependencies": { "@ai-sdk/amazon-bedrock": "^3.0.0", - "@ai-sdk/openai": "^2.0.0", + "@ai-sdk/openai": "2.0.32", "@ai-sdk/provider": "^2.0.0", "@ai-sdk/provider-utils": "^3.0.0", - "@ai-sdk/react": "^2.0.0", + "@ai-sdk/react": "2.0.45", "@aws-sdk/credential-providers": "^3.804.0", "@dagrejs/dagre": "^1.0.4", "@deno/eszip": "0.83.0", @@ -70,7 +70,7 @@ "@vercel/functions": "^2.1.0", "@vitejs/plugin-react": "^4.3.4", "@zip.js/zip.js": "^2.7.29", - "ai": "^5.0.0", + "ai": "5.0.45", "ai-commands": "workspace:*", "awesome-debounce-promise": "^2.1.0", "common": "workspace:*", diff --git a/apps/studio/pages/api/ai/sql/generate-v4.ts b/apps/studio/pages/api/ai/sql/generate-v4.ts index 91540460a04b0..83bbef96852f7 100644 --- a/apps/studio/pages/api/ai/sql/generate-v4.ts +++ b/apps/studio/pages/api/ai/sql/generate-v4.ts @@ -72,26 +72,6 @@ async function handlePost(req: NextApiRequest, res: NextApiResponse) { const { messages: rawMessages, projectRef, connectionString, orgSlug, chatName } = data - // Server-side safety: limit to last 7 messages and remove `results` property to prevent accidental leakage. - // Results property is used to cache results client-side after queries are run - // Tool results will still be included in history sent to model - const messages = (rawMessages || []).slice(-7).map((msg: any) => { - if (msg && msg.role === 'assistant' && 'results' in msg) { - const cleanedMsg = { ...msg } - delete cleanedMsg.results - return cleanedMsg - } - // [Joshen] Am also filtering out any tool calls which state is "input-streaming" - // this happens when a user stops the assistant response while the tool is being called - if (msg && msg.role === 'assistant' && msg.parts) { - const cleanedParts = msg.parts.filter((part: any) => { - return !(part.type.startsWith('tool-') && part.state === 'input-streaming') - }) - return { ...msg, parts: cleanedParts } - } - return msg - }) - let aiOptInLevel: AiOptInLevel = 'disabled' let isLimited = false @@ -117,6 +97,28 @@ async function handlePost(req: NextApiRequest, res: NextApiResponse) { } } + // Only returns last 7 messages + // Filters out tools with invalid states + // Filters out tool outputs based on opt-in level using renderingToolOutputParser + const messages = (rawMessages || []).slice(-7).map((msg: any) => { + if (msg && msg.role === 'assistant' && 'results' in msg) { + const cleanedMsg = { ...msg } + delete cleanedMsg.results + return cleanedMsg + } + if (msg && msg.role === 'assistant' && msg.parts) { + const cleanedParts = msg.parts.filter((part: any) => { + if (part.type.startsWith('tool-')) { + const invalidStates = ['input-streaming', 'input-available', 'output-error'] + return !invalidStates.includes(part.state) + } + return true + }) + return { ...msg, parts: cleanedParts } + } + return msg + }) + const { model, error: modelError, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 96ed29bc398fd..6a59749143a07 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -709,8 +709,8 @@ importers: specifier: ^3.0.0 version: 3.0.0(zod@3.25.76) '@ai-sdk/openai': - specifier: ^2.0.0 - version: 2.0.2(zod@3.25.76) + specifier: 2.0.32 + version: 2.0.32(zod@3.25.76) '@ai-sdk/provider': specifier: ^2.0.0 version: 2.0.0 @@ -718,8 +718,8 @@ importers: specifier: ^3.0.0 version: 3.0.0(zod@3.25.76) '@ai-sdk/react': - specifier: ^2.0.0 - version: 2.0.2(react@18.3.1)(zod@3.25.76) + specifier: 2.0.45 + version: 2.0.45(react@18.3.1)(zod@3.25.76) '@aws-sdk/credential-providers': specifier: ^3.804.0 version: 3.823.0 @@ -841,8 +841,8 @@ importers: specifier: ^2.7.29 version: 2.7.30 ai: - specifier: ^5.0.0 - version: 5.0.2(zod@3.25.76) + specifier: 5.0.45 + version: 5.0.45(zod@3.25.76) ai-commands: specifier: workspace:* version: link:../../packages/ai-commands @@ -1839,7 +1839,7 @@ importers: devDependencies: openapi-typescript: specifier: ^7.4.3 - version: 7.5.2(encoding@0.1.13)(typescript@5.7.3) + version: 7.5.2(encoding@0.1.13)(typescript@5.5.2) prettier: specifier: 3.2.4 version: 3.2.4 @@ -1948,10 +1948,10 @@ importers: version: 0.1.9 '@tailwindcss/forms': specifier: ^0.5.0 - version: 0.5.6(tailwindcss@3.4.1(ts-node@10.9.2(@types/node@22.13.14)(typescript@5.7.3))) + version: 0.5.6(tailwindcss@3.4.1(ts-node@10.9.2(@types/node@22.13.14)(typescript@5.5.2))) '@tailwindcss/typography': specifier: ^0.5.9 - version: 0.5.10(tailwindcss@3.4.1(ts-node@10.9.2(@types/node@22.13.14)(typescript@5.7.3))) + version: 0.5.10(tailwindcss@3.4.1(ts-node@10.9.2(@types/node@22.13.14)(typescript@5.5.2))) deepmerge: specifier: ^4.2.2 version: 4.3.1 @@ -1964,16 +1964,16 @@ importers: devDependencies: tailwindcss: specifier: ^3.4.1 - version: 3.4.1(ts-node@10.9.2(@types/node@22.13.14)(typescript@5.7.3)) + version: 3.4.1(ts-node@10.9.2(@types/node@22.13.14)(typescript@5.5.2)) tailwindcss-animate: specifier: ^1.0.6 - version: 1.0.7(tailwindcss@3.4.1(ts-node@10.9.2(@types/node@22.13.14)(typescript@5.7.3))) + version: 1.0.7(tailwindcss@3.4.1(ts-node@10.9.2(@types/node@22.13.14)(typescript@5.5.2))) packages/eslint-config-supabase: dependencies: eslint-config-next: specifier: 15.3.1 - version: 15.3.1(eslint@8.57.0(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.7.3) + version: 15.3.1(eslint@8.57.0(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.5.2) eslint-config-prettier: specifier: ^9.1.0 version: 9.1.0(eslint@8.57.0(supports-color@8.1.1)) @@ -2508,24 +2508,42 @@ packages: peerDependencies: zod: ^3.25.76 || ^4 + '@ai-sdk/gateway@1.0.23': + resolution: {integrity: sha512-ynV7WxpRK2zWLGkdOtrU2hW22mBVkEYVS3iMg1+ZGmAYSgzCqzC74bfOJZ2GU1UdcrFWUsFI9qAYjsPkd+AebA==} + engines: {node: '>=18'} + peerDependencies: + zod: ^3.25.76 || ^4 + '@ai-sdk/openai@2.0.2': resolution: {integrity: sha512-D4zYz2uR90aooKQvX1XnS00Z7PkbrcY+snUvPfm5bCabTG7bzLrVtD56nJ5bSaZG8lmuOMfXpyiEEArYLyWPpw==} engines: {node: '>=18'} peerDependencies: zod: ^3.25.76 || ^4 + '@ai-sdk/openai@2.0.32': + resolution: {integrity: sha512-p7giSkCs66Q1qYO/NPYI41CrSg65mcm8R2uAdF86+Y1D1/q4mUrWMyf5UTOJ0bx/z4jIPiNgGDCg2Kabi5zrKQ==} + engines: {node: '>=18'} + peerDependencies: + zod: ^3.25.76 || ^4 + '@ai-sdk/provider-utils@3.0.0': resolution: {integrity: sha512-BoQZtGcBxkeSH1zK+SRYNDtJPIPpacTeiMZqnG4Rv6xXjEwM0FH4MGs9c+PlhyEWmQCzjRM2HAotEydFhD4dYw==} engines: {node: '>=18'} peerDependencies: zod: ^3.25.76 || ^4 + '@ai-sdk/provider-utils@3.0.9': + resolution: {integrity: sha512-Pm571x5efqaI4hf9yW4KsVlDBDme8++UepZRnq+kqVBWWjgvGhQlzU8glaFq0YJEB9kkxZHbRRyVeHoV2sRYaQ==} + engines: {node: '>=18'} + peerDependencies: + zod: ^3.25.76 || ^4 + '@ai-sdk/provider@2.0.0': resolution: {integrity: sha512-6o7Y2SeO9vFKB8lArHXehNuusnpddKPk7xqL7T2/b+OvXMRIXUO1rR4wcv1hAFUAT9avGZshty3Wlua/XA7TvA==} engines: {node: '>=18'} - '@ai-sdk/react@2.0.2': - resolution: {integrity: sha512-3yHCvhETP/SwgMEwDGEstOlTMVXJuG0AWbj5VcIPui8kKRVOjnl+BnOeZW1eY2QE6TY+LzT4lh4QfrzDf/0adw==} + '@ai-sdk/react@2.0.45': + resolution: {integrity: sha512-jrTeBQpIsueV6EB/L6KNdH/yadK/Ehx1qCus+9RC29kRikVhjgj8xNvHfH3qHCwsfGqLX9ljj69dCRLrmzpvnw==} engines: {node: '>=18'} peerDependencies: react: ^18 || ^19 || ^19.0.0-rc @@ -9272,6 +9290,12 @@ packages: peerDependencies: zod: ^3.25.76 || ^4 + ai@5.0.45: + resolution: {integrity: sha512-go6J78B1oTXZMN2XLlNJnrFxwcqXQtpPqUVyk1wvzvpb2dk5nP9yNuxqqOX9HrrKuf5U9M6rSezEJWr1eEG9RA==} + engines: {node: '>=18'} + peerDependencies: + zod: ^3.25.76 || ^4 + ajv-formats@2.1.1: resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} peerDependencies: @@ -11397,14 +11421,14 @@ packages: resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} engines: {node: '>=0.8.x'} - eventsource-parser@3.0.2: - resolution: {integrity: sha512-6RxOBZ/cYgd8usLwsEl+EC09Au/9BcmCKYF2/xbml6DNczf7nv0MQb+7BA2F+li6//I+28VNlQR37XfQtcAJuA==} - engines: {node: '>=18.0.0'} - eventsource-parser@3.0.3: resolution: {integrity: sha512-nVpZkTMM9rF6AQ9gPJpFsNAMt48wIzB5TQgiTLdHiuO8XEDhUgZEhqKlZWXbIzo9VmJ/HvysHqEaVeD5v9TPvA==} engines: {node: '>=20.0.0'} + eventsource-parser@3.0.6: + resolution: {integrity: sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg==} + engines: {node: '>=18.0.0'} + eventsource@3.0.7: resolution: {integrity: sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==} engines: {node: '>=18.0.0'} @@ -17378,11 +17402,6 @@ packages: engines: {node: '>=14.17'} hasBin: true - typescript@5.7.3: - resolution: {integrity: sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==} - engines: {node: '>=14.17'} - hasBin: true - ua-parser-js@1.0.40: resolution: {integrity: sha512-z6PJ8Lml+v3ichVojCiB8toQJBuwR42ySM4ezjXIqXK3M0HczmKQ3LF4rhU55PfD99KEEXQG6yb7iOMyvYuHew==} hasBin: true @@ -18282,12 +18301,24 @@ snapshots: '@ai-sdk/provider-utils': 3.0.0(zod@3.25.76) zod: 3.25.76 + '@ai-sdk/gateway@1.0.23(zod@3.25.76)': + dependencies: + '@ai-sdk/provider': 2.0.0 + '@ai-sdk/provider-utils': 3.0.9(zod@3.25.76) + zod: 3.25.76 + '@ai-sdk/openai@2.0.2(zod@3.25.76)': dependencies: '@ai-sdk/provider': 2.0.0 '@ai-sdk/provider-utils': 3.0.0(zod@3.25.76) zod: 3.25.76 + '@ai-sdk/openai@2.0.32(zod@3.25.76)': + dependencies: + '@ai-sdk/provider': 2.0.0 + '@ai-sdk/provider-utils': 3.0.9(zod@3.25.76) + zod: 3.25.76 + '@ai-sdk/provider-utils@3.0.0(zod@3.25.76)': dependencies: '@ai-sdk/provider': 2.0.0 @@ -18296,14 +18327,21 @@ snapshots: zod: 3.25.76 zod-to-json-schema: 3.24.5(zod@3.25.76) + '@ai-sdk/provider-utils@3.0.9(zod@3.25.76)': + dependencies: + '@ai-sdk/provider': 2.0.0 + '@standard-schema/spec': 1.0.0 + eventsource-parser: 3.0.6 + zod: 3.25.76 + '@ai-sdk/provider@2.0.0': dependencies: json-schema: 0.4.0 - '@ai-sdk/react@2.0.2(react@18.3.1)(zod@3.25.76)': + '@ai-sdk/react@2.0.45(react@18.3.1)(zod@3.25.76)': dependencies: - '@ai-sdk/provider-utils': 3.0.0(zod@3.25.76) - ai: 5.0.2(zod@3.25.76) + '@ai-sdk/provider-utils': 3.0.9(zod@3.25.76) + ai: 5.0.45(zod@3.25.76) react: 18.3.1 swr: 2.2.5(react@18.3.1) throttleit: 2.1.0 @@ -26302,11 +26340,6 @@ snapshots: mini-svg-data-uri: 1.4.4 tailwindcss: 3.4.1(ts-node@10.9.2(@types/node@22.13.14)(typescript@5.5.2)) - '@tailwindcss/forms@0.5.6(tailwindcss@3.4.1(ts-node@10.9.2(@types/node@22.13.14)(typescript@5.7.3)))': - dependencies: - mini-svg-data-uri: 1.4.4 - tailwindcss: 3.4.1(ts-node@10.9.2(@types/node@22.13.14)(typescript@5.7.3)) - '@tailwindcss/typography@0.5.10(tailwindcss@3.4.1(ts-node@10.9.2(@types/node@22.13.14)(typescript@5.5.2)))': dependencies: lodash.castarray: 4.4.0 @@ -26315,14 +26348,6 @@ snapshots: postcss-selector-parser: 6.0.10 tailwindcss: 3.4.1(ts-node@10.9.2(@types/node@22.13.14)(typescript@5.5.2)) - '@tailwindcss/typography@0.5.10(tailwindcss@3.4.1(ts-node@10.9.2(@types/node@22.13.14)(typescript@5.7.3)))': - dependencies: - lodash.castarray: 4.4.0 - lodash.isplainobject: 4.0.6 - lodash.merge: 4.6.2 - postcss-selector-parser: 6.0.10 - tailwindcss: 3.4.1(ts-node@10.9.2(@types/node@22.13.14)(typescript@5.7.3)) - '@tanstack/directive-functions-plugin@1.114.12(@types/node@22.13.14)(babel-plugin-macros@3.1.0)(jiti@2.4.2)(sass@1.77.4)(supports-color@8.1.1)(terser@5.39.0)(tsx@4.19.3)(yaml@2.4.5)': dependencies: '@babel/code-frame': 7.26.2 @@ -27505,42 +27530,42 @@ snapshots: '@types/zxcvbn@4.4.2': {} - '@typescript-eslint/eslint-plugin@8.34.1(@typescript-eslint/parser@7.2.0(eslint@8.57.0(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.7.3))(eslint@8.57.0(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.7.3)': + '@typescript-eslint/eslint-plugin@8.34.1(@typescript-eslint/parser@7.2.0(eslint@8.57.0(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.5.2))(eslint@8.57.0(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.5.2)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 7.2.0(eslint@8.57.0(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.7.3) + '@typescript-eslint/parser': 7.2.0(eslint@8.57.0(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.5.2) '@typescript-eslint/scope-manager': 8.34.1 - '@typescript-eslint/type-utils': 8.34.1(eslint@8.57.0(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.7.3) - '@typescript-eslint/utils': 8.34.1(eslint@8.57.0(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.7.3) + '@typescript-eslint/type-utils': 8.34.1(eslint@8.57.0(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.5.2) + '@typescript-eslint/utils': 8.34.1(eslint@8.57.0(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.5.2) '@typescript-eslint/visitor-keys': 8.34.1 eslint: 8.57.0(supports-color@8.1.1) graphemer: 1.4.0 ignore: 7.0.3 natural-compare: 1.4.0 - ts-api-utils: 2.1.0(typescript@5.7.3) - typescript: 5.7.3 + ts-api-utils: 2.1.0(typescript@5.5.2) + typescript: 5.5.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@7.2.0(eslint@8.57.0(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.7.3)': + '@typescript-eslint/parser@7.2.0(eslint@8.57.0(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.5.2)': dependencies: '@typescript-eslint/scope-manager': 7.2.0 '@typescript-eslint/types': 7.2.0 - '@typescript-eslint/typescript-estree': 7.2.0(supports-color@8.1.1)(typescript@5.7.3) + '@typescript-eslint/typescript-estree': 7.2.0(supports-color@8.1.1)(typescript@5.5.2) '@typescript-eslint/visitor-keys': 7.2.0 debug: 4.4.0(supports-color@8.1.1) eslint: 8.57.0(supports-color@8.1.1) optionalDependencies: - typescript: 5.7.3 + typescript: 5.5.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.34.1(supports-color@8.1.1)(typescript@5.7.3)': + '@typescript-eslint/project-service@8.34.1(supports-color@8.1.1)(typescript@5.5.2)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.34.1(typescript@5.7.3) + '@typescript-eslint/tsconfig-utils': 8.34.1(typescript@5.5.2) '@typescript-eslint/types': 8.34.1 debug: 4.4.0(supports-color@8.1.1) - typescript: 5.7.3 + typescript: 5.5.2 transitivePeerDependencies: - supports-color @@ -27554,18 +27579,18 @@ snapshots: '@typescript-eslint/types': 8.34.1 '@typescript-eslint/visitor-keys': 8.34.1 - '@typescript-eslint/tsconfig-utils@8.34.1(typescript@5.7.3)': + '@typescript-eslint/tsconfig-utils@8.34.1(typescript@5.5.2)': dependencies: - typescript: 5.7.3 + typescript: 5.5.2 - '@typescript-eslint/type-utils@8.34.1(eslint@8.57.0(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.7.3)': + '@typescript-eslint/type-utils@8.34.1(eslint@8.57.0(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.5.2)': dependencies: - '@typescript-eslint/typescript-estree': 8.34.1(supports-color@8.1.1)(typescript@5.7.3) - '@typescript-eslint/utils': 8.34.1(eslint@8.57.0(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.7.3) + '@typescript-eslint/typescript-estree': 8.34.1(supports-color@8.1.1)(typescript@5.5.2) + '@typescript-eslint/utils': 8.34.1(eslint@8.57.0(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.5.2) debug: 4.4.0(supports-color@8.1.1) eslint: 8.57.0(supports-color@8.1.1) - ts-api-utils: 2.1.0(typescript@5.7.3) - typescript: 5.7.3 + ts-api-utils: 2.1.0(typescript@5.5.2) + typescript: 5.5.2 transitivePeerDependencies: - supports-color @@ -27573,7 +27598,7 @@ snapshots: '@typescript-eslint/types@8.34.1': {} - '@typescript-eslint/typescript-estree@7.2.0(supports-color@8.1.1)(typescript@5.7.3)': + '@typescript-eslint/typescript-estree@7.2.0(supports-color@8.1.1)(typescript@5.5.2)': dependencies: '@typescript-eslint/types': 7.2.0 '@typescript-eslint/visitor-keys': 7.2.0 @@ -27582,16 +27607,16 @@ snapshots: is-glob: 4.0.3 minimatch: 9.0.3 semver: 7.7.1 - ts-api-utils: 1.0.3(typescript@5.7.3) + ts-api-utils: 1.0.3(typescript@5.5.2) optionalDependencies: - typescript: 5.7.3 + typescript: 5.5.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@8.34.1(supports-color@8.1.1)(typescript@5.7.3)': + '@typescript-eslint/typescript-estree@8.34.1(supports-color@8.1.1)(typescript@5.5.2)': dependencies: - '@typescript-eslint/project-service': 8.34.1(supports-color@8.1.1)(typescript@5.7.3) - '@typescript-eslint/tsconfig-utils': 8.34.1(typescript@5.7.3) + '@typescript-eslint/project-service': 8.34.1(supports-color@8.1.1)(typescript@5.5.2) + '@typescript-eslint/tsconfig-utils': 8.34.1(typescript@5.5.2) '@typescript-eslint/types': 8.34.1 '@typescript-eslint/visitor-keys': 8.34.1 debug: 4.4.0(supports-color@8.1.1) @@ -27599,19 +27624,19 @@ snapshots: is-glob: 4.0.3 minimatch: 9.0.5 semver: 7.7.1 - ts-api-utils: 2.1.0(typescript@5.7.3) - typescript: 5.7.3 + ts-api-utils: 2.1.0(typescript@5.5.2) + typescript: 5.5.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.34.1(eslint@8.57.0(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.7.3)': + '@typescript-eslint/utils@8.34.1(eslint@8.57.0(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.5.2)': dependencies: '@eslint-community/eslint-utils': 4.7.0(eslint@8.57.0(supports-color@8.1.1)) '@typescript-eslint/scope-manager': 8.34.1 '@typescript-eslint/types': 8.34.1 - '@typescript-eslint/typescript-estree': 8.34.1(supports-color@8.1.1)(typescript@5.7.3) + '@typescript-eslint/typescript-estree': 8.34.1(supports-color@8.1.1)(typescript@5.5.2) eslint: 8.57.0(supports-color@8.1.1) - typescript: 5.7.3 + typescript: 5.5.2 transitivePeerDependencies: - supports-color @@ -28027,6 +28052,14 @@ snapshots: '@opentelemetry/api': 1.9.0 zod: 3.25.76 + ai@5.0.45(zod@3.25.76): + dependencies: + '@ai-sdk/gateway': 1.0.23(zod@3.25.76) + '@ai-sdk/provider': 2.0.0 + '@ai-sdk/provider-utils': 3.0.9(zod@3.25.76) + '@opentelemetry/api': 1.9.0 + zod: 3.25.76 + ajv-formats@2.1.1(ajv@8.12.0): optionalDependencies: ajv: 8.12.0 @@ -29997,21 +30030,21 @@ snapshots: eslint-barrel-file-utils-win32-ia32-msvc: 0.0.10 eslint-barrel-file-utils-win32-x64-msvc: 0.0.10 - eslint-config-next@15.3.1(eslint@8.57.0(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.7.3): + eslint-config-next@15.3.1(eslint@8.57.0(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.5.2): dependencies: '@next/eslint-plugin-next': 15.3.1 '@rushstack/eslint-patch': 1.10.3 - '@typescript-eslint/eslint-plugin': 8.34.1(@typescript-eslint/parser@7.2.0(eslint@8.57.0(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.7.3))(eslint@8.57.0(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.7.3) - '@typescript-eslint/parser': 7.2.0(eslint@8.57.0(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.7.3) + '@typescript-eslint/eslint-plugin': 8.34.1(@typescript-eslint/parser@7.2.0(eslint@8.57.0(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.5.2))(eslint@8.57.0(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.5.2) + '@typescript-eslint/parser': 7.2.0(eslint@8.57.0(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.5.2) eslint: 8.57.0(supports-color@8.1.1) eslint-import-resolver-node: 0.3.9(supports-color@8.1.1) - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.2.0(eslint@8.57.0(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.7.3))(eslint-import-resolver-node@0.3.9(supports-color@8.1.1))(eslint-plugin-import@2.31.0)(eslint@8.57.0(supports-color@8.1.1))(supports-color@8.1.1) - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@7.2.0(eslint@8.57.0(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.7.3))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0(supports-color@8.1.1))(supports-color@8.1.1) + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.2.0(eslint@8.57.0(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.5.2))(eslint-import-resolver-node@0.3.9(supports-color@8.1.1))(eslint-plugin-import@2.31.0)(eslint@8.57.0(supports-color@8.1.1))(supports-color@8.1.1) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@7.2.0(eslint@8.57.0(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.5.2))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0(supports-color@8.1.1))(supports-color@8.1.1) eslint-plugin-jsx-a11y: 6.10.2(eslint@8.57.0(supports-color@8.1.1)) eslint-plugin-react: 7.37.5(eslint@8.57.0(supports-color@8.1.1)) eslint-plugin-react-hooks: 5.2.0(eslint@8.57.0(supports-color@8.1.1)) optionalDependencies: - typescript: 5.7.3 + typescript: 5.5.2 transitivePeerDependencies: - eslint-import-resolver-webpack - supports-color @@ -30033,13 +30066,13 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.2.0(eslint@8.57.0(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.7.3))(eslint-import-resolver-node@0.3.9(supports-color@8.1.1))(eslint-plugin-import@2.31.0)(eslint@8.57.0(supports-color@8.1.1))(supports-color@8.1.1): + eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.2.0(eslint@8.57.0(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.5.2))(eslint-import-resolver-node@0.3.9(supports-color@8.1.1))(eslint-plugin-import@2.31.0)(eslint@8.57.0(supports-color@8.1.1))(supports-color@8.1.1): dependencies: debug: 4.4.0(supports-color@8.1.1) enhanced-resolve: 5.18.1 eslint: 8.57.0(supports-color@8.1.1) - eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.2.0(eslint@8.57.0(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.7.3))(eslint-import-resolver-node@0.3.9(supports-color@8.1.1))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0(supports-color@8.1.1))(supports-color@8.1.1) - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@7.2.0(eslint@8.57.0(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.7.3))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0(supports-color@8.1.1))(supports-color@8.1.1) + eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.2.0(eslint@8.57.0(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.5.2))(eslint-import-resolver-node@0.3.9(supports-color@8.1.1))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0(supports-color@8.1.1))(supports-color@8.1.1) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@7.2.0(eslint@8.57.0(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.5.2))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0(supports-color@8.1.1))(supports-color@8.1.1) fast-glob: 3.3.3 get-tsconfig: 4.10.0 is-core-module: 2.16.1 @@ -30050,25 +30083,25 @@ snapshots: - eslint-import-resolver-webpack - supports-color - eslint-module-utils@2.12.0(@typescript-eslint/parser@7.2.0(eslint@8.57.0(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.7.3))(eslint-import-resolver-node@0.3.9(supports-color@8.1.1))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0(supports-color@8.1.1))(supports-color@8.1.1): + eslint-module-utils@2.12.0(@typescript-eslint/parser@7.2.0(eslint@8.57.0(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.5.2))(eslint-import-resolver-node@0.3.9(supports-color@8.1.1))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0(supports-color@8.1.1))(supports-color@8.1.1): dependencies: debug: 3.2.7(supports-color@8.1.1) optionalDependencies: - '@typescript-eslint/parser': 7.2.0(eslint@8.57.0(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.7.3) + '@typescript-eslint/parser': 7.2.0(eslint@8.57.0(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.5.2) eslint: 8.57.0(supports-color@8.1.1) eslint-import-resolver-node: 0.3.9(supports-color@8.1.1) - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.2.0(eslint@8.57.0(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.7.3))(eslint-import-resolver-node@0.3.9(supports-color@8.1.1))(eslint-plugin-import@2.31.0)(eslint@8.57.0(supports-color@8.1.1))(supports-color@8.1.1) + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.2.0(eslint@8.57.0(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.5.2))(eslint-import-resolver-node@0.3.9(supports-color@8.1.1))(eslint-plugin-import@2.31.0)(eslint@8.57.0(supports-color@8.1.1))(supports-color@8.1.1) transitivePeerDependencies: - supports-color - eslint-module-utils@2.8.1(@typescript-eslint/parser@7.2.0(eslint@8.57.0(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.7.3))(eslint-import-resolver-node@0.3.9(supports-color@8.1.1))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0(supports-color@8.1.1))(supports-color@8.1.1): + eslint-module-utils@2.8.1(@typescript-eslint/parser@7.2.0(eslint@8.57.0(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.5.2))(eslint-import-resolver-node@0.3.9(supports-color@8.1.1))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0(supports-color@8.1.1))(supports-color@8.1.1): dependencies: debug: 3.2.7(supports-color@8.1.1) optionalDependencies: - '@typescript-eslint/parser': 7.2.0(eslint@8.57.0(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.7.3) + '@typescript-eslint/parser': 7.2.0(eslint@8.57.0(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.5.2) eslint: 8.57.0(supports-color@8.1.1) eslint-import-resolver-node: 0.3.9(supports-color@8.1.1) - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.2.0(eslint@8.57.0(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.7.3))(eslint-import-resolver-node@0.3.9(supports-color@8.1.1))(eslint-plugin-import@2.31.0)(eslint@8.57.0(supports-color@8.1.1))(supports-color@8.1.1) + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.2.0(eslint@8.57.0(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.5.2))(eslint-import-resolver-node@0.3.9(supports-color@8.1.1))(eslint-plugin-import@2.31.0)(eslint@8.57.0(supports-color@8.1.1))(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -30078,7 +30111,7 @@ snapshots: eslint-barrel-file-utils: 0.0.10 requireindex: 1.2.0 - eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.2.0(eslint@8.57.0(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.7.3))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0(supports-color@8.1.1))(supports-color@8.1.1): + eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.2.0(eslint@8.57.0(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.5.2))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0(supports-color@8.1.1))(supports-color@8.1.1): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.8 @@ -30089,7 +30122,7 @@ snapshots: doctrine: 2.1.0 eslint: 8.57.0(supports-color@8.1.1) eslint-import-resolver-node: 0.3.9(supports-color@8.1.1) - eslint-module-utils: 2.12.0(@typescript-eslint/parser@7.2.0(eslint@8.57.0(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.7.3))(eslint-import-resolver-node@0.3.9(supports-color@8.1.1))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0(supports-color@8.1.1))(supports-color@8.1.1) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@7.2.0(eslint@8.57.0(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.5.2))(eslint-import-resolver-node@0.3.9(supports-color@8.1.1))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0(supports-color@8.1.1))(supports-color@8.1.1) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -30101,7 +30134,7 @@ snapshots: string.prototype.trimend: 1.0.8 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 7.2.0(eslint@8.57.0(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.7.3) + '@typescript-eslint/parser': 7.2.0(eslint@8.57.0(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.5.2) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack @@ -30317,13 +30350,13 @@ snapshots: events@3.3.0: {} - eventsource-parser@3.0.2: {} - eventsource-parser@3.0.3: {} + eventsource-parser@3.0.6: {} + eventsource@3.0.7: dependencies: - eventsource-parser: 3.0.2 + eventsource-parser: 3.0.6 execa@1.0.0: dependencies: @@ -34617,14 +34650,14 @@ snapshots: openapi-typescript-helpers@0.0.15: {} - openapi-typescript@7.5.2(encoding@0.1.13)(typescript@5.7.3): + openapi-typescript@7.5.2(encoding@0.1.13)(typescript@5.5.2): dependencies: '@redocly/openapi-core': 1.27.2(encoding@0.1.13)(supports-color@9.4.0) ansi-colors: 4.1.3 change-case: 5.4.4 parse-json: 8.1.0 supports-color: 9.4.0 - typescript: 5.7.3 + typescript: 5.5.2 yargs-parser: 21.1.1 transitivePeerDependencies: - encoding @@ -35137,14 +35170,6 @@ snapshots: postcss: 8.5.3 ts-node: 10.9.2(@types/node@22.13.14)(typescript@5.5.2) - postcss-load-config@4.0.1(postcss@8.5.3)(ts-node@10.9.2(@types/node@22.13.14)(typescript@5.7.3)): - dependencies: - lilconfig: 2.1.0 - yaml: 2.4.5 - optionalDependencies: - postcss: 8.5.3 - ts-node: 10.9.2(@types/node@22.13.14)(typescript@5.7.3) - postcss-nested@6.0.1(postcss@8.5.3): dependencies: postcss: 8.5.3 @@ -37462,9 +37487,9 @@ snapshots: tailwind-merge@1.14.0: {} - tailwindcss-animate@1.0.7(tailwindcss@3.4.1(ts-node@10.9.2(@types/node@22.13.14)(typescript@5.7.3))): + tailwindcss-animate@1.0.7(tailwindcss@3.4.1(ts-node@10.9.2(@types/node@22.13.14)(typescript@5.5.2))): dependencies: - tailwindcss: 3.4.1(ts-node@10.9.2(@types/node@22.13.14)(typescript@5.7.3)) + tailwindcss: 3.4.1(ts-node@10.9.2(@types/node@22.13.14)(typescript@5.5.2)) tailwindcss-radix@2.8.0: {} @@ -37495,33 +37520,6 @@ snapshots: transitivePeerDependencies: - ts-node - tailwindcss@3.4.1(ts-node@10.9.2(@types/node@22.13.14)(typescript@5.7.3)): - dependencies: - '@alloc/quick-lru': 5.2.0 - arg: 5.0.2 - chokidar: 3.5.3 - didyoumean: 1.2.2 - dlv: 1.1.3 - fast-glob: 3.3.2 - glob-parent: 6.0.2 - is-glob: 4.0.3 - jiti: 1.20.0 - lilconfig: 2.1.0 - micromatch: 4.0.8 - normalize-path: 3.0.0 - object-hash: 3.0.0 - picocolors: 1.0.1 - postcss: 8.5.3 - postcss-import: 15.1.0(postcss@8.5.3) - postcss-js: 4.0.1(postcss@8.5.3) - postcss-load-config: 4.0.1(postcss@8.5.3)(ts-node@10.9.2(@types/node@22.13.14)(typescript@5.7.3)) - postcss-nested: 6.0.1(postcss@8.5.3) - postcss-selector-parser: 6.0.13 - resolve: 1.22.8 - sucrase: 3.34.0 - transitivePeerDependencies: - - ts-node - tapable@2.2.1: {} tar-fs@2.1.3: @@ -37761,13 +37759,13 @@ snapshots: dependencies: utf8-byte-length: 1.0.5 - ts-api-utils@1.0.3(typescript@5.7.3): + ts-api-utils@1.0.3(typescript@5.5.2): dependencies: - typescript: 5.7.3 + typescript: 5.5.2 - ts-api-utils@2.1.0(typescript@5.7.3): + ts-api-utils@2.1.0(typescript@5.5.2): dependencies: - typescript: 5.7.3 + typescript: 5.5.2 ts-easing@0.2.0: {} @@ -37808,25 +37806,6 @@ snapshots: yn: 3.1.1 optional: true - ts-node@10.9.2(@types/node@22.13.14)(typescript@5.7.3): - dependencies: - '@cspotcode/source-map-support': 0.8.1 - '@tsconfig/node10': 1.0.11 - '@tsconfig/node12': 1.0.11 - '@tsconfig/node14': 1.0.3 - '@tsconfig/node16': 1.0.4 - '@types/node': 22.13.14 - acorn: 8.14.1 - acorn-walk: 8.3.4 - arg: 4.1.3 - create-require: 1.1.1 - diff: 4.0.2 - make-error: 1.3.6 - typescript: 5.7.3 - v8-compile-cache-lib: 3.0.1 - yn: 3.1.1 - optional: true - ts-pattern@5.1.1: {} tsconfck@3.0.3(typescript@5.5.2): @@ -38025,8 +38004,6 @@ snapshots: typescript@5.5.2: {} - typescript@5.7.3: {} - ua-parser-js@1.0.40: {} uc.micro@1.0.6: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index c2bf0c707f41e..1fe15fdc9284f 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -18,3 +18,6 @@ catalog: 'zod': '^3.25.76' minimumReleaseAge: 10080 +minimumReleaseAgeExclude: + - 'ai' + - '@ai-sdk/*'