\`). Prefix routes with the function name (e.g., \`/function-name/route\`).
- - File writes are restricted to the \`/tmp\` directory.
- - Use \`EdgeRuntime.waitUntil(promise)\` for background tasks.
- - **Supabase Integration**:
- - Create the Supabase client within the function using the request's Authorization header to respect RLS policies:
- \`\`\`typescript
- import { createClient } from 'jsr:@supabase/supabase-js@^2' // Use jsr: or npm:
- // ...
- const supabaseClient = createClient(
- Deno.env.get('SUPABASE_URL')!,
- Deno.env.get('SUPABASE_ANON_KEY')!,
- {
- global: {
- headers: { Authorization: req.headers.get('Authorization')! }
- }
- }
- )
- // ... use supabaseClient to interact with the database
- \`\`\`
- - Ensure function code is compatible with the database schema.
- - OpenAI Example:
- \`\`\`typescript
- import OpenAI from 'https://deno.land/x/openai@v4.24.0/mod.ts'
- Deno.serve(async (req) => {
- const { query } = await req.json()
- const apiKey = Deno.env.get('OPENAI_API_KEY')
- const openai = new OpenAI({
- apiKey: apiKey,
- })
- // Documentation here: https://github.com/openai/openai-node
- const chatCompletion = await openai.chat.completions.create({
- messages: [{ role: 'user', content: query }],
- // Choose model from here: https://platform.openai.com/docs/models
- model: 'gpt-3.5-turbo',
- stream: false,
- })
- const reply = chatCompletion.choices[0].message.content
- return new Response(reply, {
- headers: { 'Content-Type': 'text/plain' },
- })
- })
- \`\`\`
-
- # General Instructions:
- - **Understand Context**: Attempt to use \`list_tables\`, \`list_extensions\` first. If they are not available or return a privacy/permission error, state this and proceed with caution, relying on the user's description and general knowledge.
+ ${GENERAL_PROMPT}
+ ${CHAT_PROMPT}
+ ${PG_BEST_PRACTICES}
+ ${RLS_PROMPT}
+ ${EDGE_FUNCTION_PROMPT}
+ ${SECURITY_PROMPT}
`
// Note: these must be of type `CoreMessage` to prevent AI SDK from stripping `providerOptions`
// https://github.com/vercel/ai/blob/81ef2511311e8af34d75e37fc8204a82e775e8c3/packages/ai/core/prompt/standardize-prompt.ts#L83-L88
- const coreMessages: CoreMessage[] = [
+ const coreMessages: ModelMessage[] = [
{
role: 'system',
content: system,
@@ -412,18 +169,27 @@ async function handlePost(req: NextApiRequest, res: NextApiResponse) {
// Add any dynamic context here
content: `The user's current project is ${projectRef}. Their available schemas are: ${schemasString}. The current chat name is: ${chatName}`,
},
- ...convertToCoreMessages(messages),
+ ...convertToModelMessages(messages),
]
+ // Get tools
+ const tools = await getTools({
+ projectRef,
+ connectionString,
+ authorization,
+ aiOptInLevel,
+ accessToken,
+ })
+
const result = streamText({
model,
- maxSteps: 5,
+ stopWhen: stepCountIs(5),
messages: coreMessages,
tools,
})
- result.pipeDataStreamToResponse(res, {
- getErrorMessage: (error) => {
+ result.pipeUIMessageStreamToResponse(res, {
+ onError: (error) => {
if (error == null) {
return 'unknown error'
}
diff --git a/apps/studio/pages/project/[ref]/functions/[functionSlug]/code.tsx b/apps/studio/pages/project/[ref]/functions/[functionSlug]/code.tsx
index 48e95eca7bc96..b444c84d4a369 100644
--- a/apps/studio/pages/project/[ref]/functions/[functionSlug]/code.tsx
+++ b/apps/studio/pages/project/[ref]/functions/[functionSlug]/code.tsx
@@ -25,7 +25,6 @@ const CodePage = () => {
const { ref, functionSlug } = useParams()
const { data: project } = useSelectedProjectQuery()
const { data: org } = useSelectedOrganizationQuery()
- const { includeSchemaMetadata } = useOrgAiOptInLevel()
const { mutate: sendEvent } = useSendEventMutation()
const [showDeployWarning, setShowDeployWarning] = useState(false)
@@ -219,11 +218,11 @@ const CodePage = () => {
diff --git a/apps/studio/pages/project/[ref]/functions/new.tsx b/apps/studio/pages/project/[ref]/functions/new.tsx
index f0e17bccf787f..ad102cf45a662 100644
--- a/apps/studio/pages/project/[ref]/functions/new.tsx
+++ b/apps/studio/pages/project/[ref]/functions/new.tsx
@@ -101,7 +101,6 @@ const NewFunctionPage = () => {
const { ref, template } = useParams()
const { data: project } = useSelectedProjectQuery()
const { data: org } = useSelectedOrganizationQuery()
- const { includeSchemaMetadata } = useOrgAiOptInLevel()
const snap = useAiAssistantStateSnapshot()
const { mutate: sendEvent } = useSendEventMutation()
@@ -335,11 +334,11 @@ const NewFunctionPage = () => {
diff --git a/apps/studio/state/ai-assistant-state.tsx b/apps/studio/state/ai-assistant-state.tsx
index e26afde284f02..a9034f084d142 100644
--- a/apps/studio/state/ai-assistant-state.tsx
+++ b/apps/studio/state/ai-assistant-state.tsx
@@ -1,4 +1,4 @@
-import type { Message as MessageType } from 'ai/react'
+import type { UIMessage as MessageType } from '@ai-sdk/react'
import { DBSchema, IDBPDatabase, openDB } from 'idb'
import { debounce } from 'lodash'
import { createContext, PropsWithChildren, useContext, useEffect, useState } from 'react'
@@ -247,7 +247,7 @@ export const createAiAssistantState = (): AiAssistantState => {
const chatId = uuidv4()
const newChat: ChatSession = {
id: chatId,
- name: options?.name ?? 'Untitled',
+ name: options?.name ?? 'New chat',
messages: [],
createdAt: new Date(),
updatedAt: new Date(),
diff --git a/apps/ui-library/package.json b/apps/ui-library/package.json
index 8886abb7a9d2d..c153d40143d8c 100644
--- a/apps/ui-library/package.json
+++ b/apps/ui-library/package.json
@@ -85,7 +85,7 @@
"ui-patterns": "workspace:*",
"unist-util-visit": "^5.0.0",
"vaul": "^0.9.6",
- "zod": "^3.22.4"
+ "zod": "^3.25.76"
},
"devDependencies": {
"@react-router/dev": "^7.1.5",
diff --git a/apps/www/package.json b/apps/www/package.json
index 3a0ac4dd7bf6b..a35b815912b6b 100644
--- a/apps/www/package.json
+++ b/apps/www/package.json
@@ -56,7 +56,7 @@
"next-mdx-remote": "^4.4.1",
"next-seo": "^6.5.0",
"next-themes": "^0.3.0",
- "openai": "^4.20.1",
+ "openai": "^4.75.1",
"parse-numeric-range": "^1.3.0",
"react": "catalog:",
"react-copy-to-clipboard": "^5.1.0",
@@ -100,7 +100,7 @@
"react-hook-form": "^7.45.0",
"tsconfig": "workspace:*",
"uuid": "^9.0.1",
- "zod": "^3.22.4"
+ "zod": "^3.25.76"
},
"license": "MIT"
}
diff --git a/packages/ai-commands/edge.ts b/packages/ai-commands/edge.ts
index 363dd9010fef4..95023e6bb1d53 100644
--- a/packages/ai-commands/edge.ts
+++ b/packages/ai-commands/edge.ts
@@ -1,7 +1,5 @@
export * from './src/errors'
export * from './src/docs'
-export * from './src/sql/rls'
-export * from './src/sql/chat'
-export * from './src/sql/cron'
export * from './src/sql/classify-feedback'
+export * from './src/sql/cron'
diff --git a/packages/ai-commands/package.json b/packages/ai-commands/package.json
index 0d3eb11f4a651..532932224fb5a 100644
--- a/packages/ai-commands/package.json
+++ b/packages/ai-commands/package.json
@@ -14,16 +14,16 @@
"dependencies": {
"@serafin/schema-builder": "^0.18.5",
"@supabase/supabase-js": "catalog:",
- "ai": "^3.4.33",
+ "ai": "^5.0.0",
"common-tags": "^1.8.2",
"config": "workspace:*",
"js-tiktoken": "^1.0.10",
"jsonrepair": "^3.5.0",
- "openai": "^4.26.1",
- "zod": "3.23.8"
+ "openai": "^4.75.1",
+ "zod": "^3.25.76"
},
"devDependencies": {
- "@ai-sdk/openai": "^0.0.72",
+ "@ai-sdk/openai": "^2.0.0",
"@types/common-tags": "^1.8.4",
"@types/mdast": "^4.0.0",
"@types/node": "catalog:",
diff --git a/packages/ai-commands/src/sql/chat.ts b/packages/ai-commands/src/sql/chat.ts
deleted file mode 100644
index 426d9f8f617d8..0000000000000
--- a/packages/ai-commands/src/sql/chat.ts
+++ /dev/null
@@ -1,109 +0,0 @@
-import { OpenAIStream } from 'ai'
-import { codeBlock, oneLine, stripIndent } from 'common-tags'
-import type OpenAI from 'openai'
-import { ContextLengthError } from '../errors'
-import type { Message } from '../types'
-
-/**
- * Responds to a conversation about writing a SQL query.
- *
- * @returns A `ReadableStream` containing the response text and SQL.
- */
-export async function chatSql(
- openai: OpenAI,
- messages: Message[],
- existingSql?: string,
- entityDefinitions?: string[],
- context?: 'rls-policies' | 'functions'
-): Promise> {
- const initMessages: OpenAI.Chat.Completions.ChatCompletionMessageParam[] = [
- {
- role: 'system',
- content: stripIndent`
- The generated SQL (must be valid SQL), and must adhere to the following:
- - Always use double apostrophe in SQL strings (eg. 'Night''s watch')
- - Always use semicolons
- - Output as markdown
- - Always include code snippets if available
- - Use vector(384) data type for any embedding/vector related query
-
- When generating tables, do the following:
- - For primary keys, always use "id bigint primary key generated always as identity" (not serial)
- - Prefer creating foreign key references in the create statement
- - Prefer 'text' over 'varchar'
- - Prefer 'timestamp with time zone' over 'date'
-
- Feel free to suggest corrections for suspected typos.
- `,
- },
- ]
-
- if (context) {
- // [Joshen] Thinking how we can prompt-engineer to give even better results, what I have below
- // is definitely not optimal at all, but just to get an idea started
- const generateInstructionsBasedOnContext = () => {
- switch (context) {
- // [Joshen] Sorry for the mess, there's duplicate logic here between this and rls.ts - i'm wondering what should be the best practice
- // here? Do we (1) Put ALL logic into this file, or (2) we split each context into their own files? Latter might be cleaner?
- case 'rls-policies':
- return stripIndent`
- You're a Supabase Postgres expert in writing row level security policies. Your purpose is to
- generate a policy with the constraints given by the user. You will be provided a schema
- on which the policy should be applied.`
- case 'functions':
- return stripIndent`
- You're a Supabase Postgres expert in writing database functions. Your purpose is to generate a
- database function with the constraints given by the user. The output may also include a database trigger
- if the function returns a type of trigger. When generating functions, do the following:
- - If the function returns a trigger type, ensure that it uses security definer, otherwise default to security invoker. Include this in the create functions SQL statement.
- - Ensure to set the search_path configuration parameter as '', include this in the create functions SQL statement.
- - Default to create or replace whenever possible for updating an existing function, otherwise use the alter function statement
- Please make sure that all queries are valid Postgres SQL queries.
- `
- }
- }
- initMessages.push({ role: 'user', content: generateInstructionsBasedOnContext() })
- }
-
- if (entityDefinitions && entityDefinitions.length > 0) {
- const definitions = codeBlock`${entityDefinitions.join('\n\n')}`
- initMessages.push({
- role: 'user',
- content: oneLine`Here is my database schema for reference: ${definitions}`,
- })
- }
-
- if (existingSql !== undefined && existingSql.length > 0) {
- const sqlBlock = codeBlock`${existingSql}`
- initMessages.push({
- role: 'user',
- content: codeBlock`
- Here is the existing SQL I wrote for reference:
- ${sqlBlock}
- Any SQL output should follow the casing of the existing SQL that I've written.
- `.trim(),
- })
- }
-
- if (messages) {
- initMessages.push(...messages)
- }
-
- try {
- const response = await openai.chat.completions.create({
- model: 'gpt-4o-mini-2024-07-18',
- messages: initMessages,
- max_tokens: 1024,
- temperature: 0,
- stream: true,
- })
-
- // Transform the streamed SSE response from OpenAI to a ReadableStream
- return OpenAIStream(response)
- } catch (error) {
- if (error instanceof Error && 'code' in error && error.code === 'context_length_exceeded') {
- throw new ContextLengthError()
- }
- throw error
- }
-}
diff --git a/packages/ai-commands/src/sql/index.ts b/packages/ai-commands/src/sql/index.ts
index 74ac7958470b3..326e35231ee2f 100644
--- a/packages/ai-commands/src/sql/index.ts
+++ b/packages/ai-commands/src/sql/index.ts
@@ -1,2 +1 @@
-export * from './chat'
export * from './functions'
diff --git a/packages/ai-commands/src/sql/rls.test.ts b/packages/ai-commands/src/sql/rls.test.ts
deleted file mode 100644
index d90c6e01f316e..0000000000000
--- a/packages/ai-commands/src/sql/rls.test.ts
+++ /dev/null
@@ -1,492 +0,0 @@
-import { codeBlock } from 'common-tags'
-import OpenAI from 'openai'
-import { describe, expect, test } from 'vitest'
-
-import {
- assertAndRenderColumn,
- assertAndUnwrapNode,
- assertDefined,
- assertEachSideOfExpression,
- assertEitherSideOfExpression,
- assertNodeType,
- getPolicies,
- getPolicyInfo,
- parseConstant,
- renderFields,
- renderJsonExpression,
- renderTargets,
- unwrapNode,
-} from '../../test/sql-util'
-import { collectStream, extractMarkdownSql, withMetadata } from '../../test/util'
-import { chatRlsPolicy } from './rls'
-
-const openAiKey = process.env.OPENAI_API_KEY
-const openai = new OpenAI({ apiKey: openAiKey })
-
-const tableDefs = [
- codeBlock`
- create table libraries (
- id bigint primary key generated always as identity,
- name text not null
- );
-
- create table authors (
- id bigint primary key generated always as identity,
- name text not null
- );
-
- create table books (
- id bigint primary key generated always as identity,
- title text not null,
- description text not null,
- genre text not null,
- author_id bigint references authors (id) not null,
- library_id bigint references libraries (id) not null,
- published_at timestamp with time zone not null
- );
-
- create table reviews (
- id bigint primary key generated always as identity,
- title text not null,
- content text not null,
- user_id uuid references auth.users (id) not null,
- book_id bigint references books (id) not null,
- published_at timestamp with time zone
- )
-
- create tables favorite_books (
- id bigint primary key generated always as identity,
- user_id uuid references auth.users (id) not null,
- book_id bigint references books (id) not null
- );
-
- create table library_memberships (
- id bigint primary key generated always as identity,
- user_id uuid references auth.users (id) not null,
- library_id bigint references libraries (id) not null
- );
- `,
-]
-
-describe('rls chat', () => {
- test.concurrent('defaults to authenticated role', async () => {
- const responseStream = await chatRlsPolicy(
- openai,
- [
- {
- role: 'user',
- content: 'Users can only see their own favorite books',
- },
- ],
- tableDefs
- )
- const responseText = await collectStream(responseStream)
- const [sql] = extractMarkdownSql(responseText)
- const [policy] = await getPolicies(sql)
- const { roles } = await getPolicyInfo(policy)
-
- withMetadata({ sql }, () => {
- expect(roles).toStrictEqual(['authenticated'])
- })
- })
-
- test.concurrent('uses anon + authenticated roles when table viewable by anyone', async () => {
- const responseStream = await chatRlsPolicy(
- openai,
- [
- {
- role: 'user',
- content: 'Published reviews can be seen by anyone',
- },
- ],
- tableDefs
- )
- const responseText = await collectStream(responseStream)
- const [sql] = extractMarkdownSql(responseText)
- const [policy] = await getPolicies(sql)
- const { roles } = await getPolicyInfo(policy)
-
- withMetadata({ sql }, () => {
- expect(roles.sort()).toStrictEqual(['anon', 'authenticated'].sort())
- })
- })
-
- test.concurrent('wraps every function in select', async () => {
- const responseStream = await chatRlsPolicy(
- openai,
- [
- {
- role: 'user',
- content: 'Users can only see their own favorite books',
- },
- ],
- tableDefs
- )
-
- const responseText = await collectStream(responseStream)
- const [sql] = extractMarkdownSql(responseText)
- const [policy] = await getPolicies(sql)
- const { usingNode } = await getPolicyInfo(policy)
-
- withMetadata({ sql }, () => {
- assertDefined(usingNode, 'Expected USING expression')
- const usingExpression = assertAndUnwrapNode(
- usingNode,
- 'A_Expr',
- 'Expected USING to contain an expression'
- )
-
- assertEitherSideOfExpression(usingExpression, (node) => {
- const functionCall = unwrapNode(node, 'FuncCall')
-
- if (functionCall) {
- throw new Error('Expected function call to be wrapped in a select sub-query')
- }
-
- const subQuery = unwrapNode(node, 'SubLink')
-
- if (!subQuery) {
- throw new Error('Expected a sub-query wrapping the function')
- }
-
- assertDefined(subQuery.subselect, 'Expected SubLink to contain a subselect')
- const selectStatement = assertAndUnwrapNode(
- subQuery.subselect,
- 'SelectStmt',
- 'Expected subselect to contain a SELECT statement'
- )
-
- assertDefined(selectStatement.targetList, 'Expected SELECT statement to have a target list')
-
- const [target] = selectStatement.targetList.map((node) =>
- assertAndUnwrapNode(node, 'ResTarget', 'Expected every select target to be a ResTarget')
- )
-
- assertDefined(target, 'Expected select sub-query to have a function target')
- assertDefined(target.val, 'Expected ResTarget to have a val')
- assertNodeType(target.val, 'FuncCall', 'Expected sub-query to contain a function call')
- })
- })
- })
-
- test.concurrent('select policy has USING but not WITH CHECK', async () => {
- const responseStream = await chatRlsPolicy(
- openai,
- [
- {
- role: 'user',
- content: 'All published reviews can be seen publicly',
- },
- ],
- tableDefs
- )
-
- const responseText = await collectStream(responseStream)
- const [sql] = extractMarkdownSql(responseText)
- const [policy] = await getPolicies(sql)
-
- withMetadata({ sql }, () => {
- expect(policy.cmd_name).toBe('select')
- expect(policy.qual).not.toBeUndefined()
- expect(policy.with_check).toBeUndefined()
- })
- })
-
- test.concurrent('insert policy has WITH CHECK but not USING', async () => {
- const responseStream = await chatRlsPolicy(
- openai,
- [
- {
- role: 'user',
- content: 'Users can only create their own reviews',
- },
- ],
- tableDefs
- )
-
- const responseText = await collectStream(responseStream)
- const [sql] = extractMarkdownSql(responseText)
- const [policy] = await getPolicies(sql)
-
- withMetadata({ sql }, () => {
- expect(policy.cmd_name).toBe('insert')
- expect(policy.qual).toBeUndefined()
- expect(policy.with_check).not.toBeUndefined()
- })
- })
-
- test.concurrent('update policy has USING and WITH CHECK', async () => {
- const responseStream = await chatRlsPolicy(
- openai,
- [
- {
- role: 'user',
- content: "You can't edit other people's reviews",
- },
- ],
- tableDefs
- )
-
- const responseText = await collectStream(responseStream)
- const [sql] = extractMarkdownSql(responseText)
- const [policy] = await getPolicies(sql)
-
- withMetadata({ sql }, () => {
- expect(policy.cmd_name).toBe('update')
- expect(policy.qual).not.toBeUndefined()
- expect(policy.with_check).not.toBeUndefined()
- })
- })
-
- test.concurrent('delete policy has USING but not WITH CHECK', async () => {
- const responseStream = await chatRlsPolicy(
- openai,
- [
- {
- role: 'user',
- content: "You can't delete someone else's review",
- },
- ],
- tableDefs
- )
-
- const responseText = await collectStream(responseStream)
- const [sql] = extractMarkdownSql(responseText)
- const [policy] = await getPolicies(sql)
-
- withMetadata({ sql }, () => {
- expect(policy.cmd_name).toBe('delete')
- expect(policy.qual).not.toBeUndefined()
- expect(policy.with_check).toBeUndefined()
- })
- })
-
- test.concurrent('splits multiple operations into separate policies', async () => {
- const responseStream = await chatRlsPolicy(
- openai,
- [
- {
- role: 'user',
- content: 'Users can only access their own reviews',
- },
- ],
- tableDefs
- )
-
- const responseText = await collectStream(responseStream)
- const [sql] = extractMarkdownSql(responseText)
- const policies = await getPolicies(sql)
-
- withMetadata({ sql }, () => {
- const allPolicy = policies.find((policy) => policy.cmd_name === 'all')
- const selectPolicy = policies.find((policy) => policy.cmd_name === 'select')
- const insertPolicy = policies.find((policy) => policy.cmd_name === 'insert')
- const updatePolicy = policies.find((policy) => policy.cmd_name === 'update')
- const deletePolicy = policies.find((policy) => policy.cmd_name === 'delete')
-
- expect(allPolicy).toBeUndefined()
- expect(selectPolicy).not.toBeUndefined()
- expect(insertPolicy).not.toBeUndefined()
- expect(updatePolicy).not.toBeUndefined()
- expect(deletePolicy).not.toBeUndefined()
- })
- })
-
- test.concurrent('discourages restrictive policies', async () => {
- const responseStream = await chatRlsPolicy(
- openai,
- [
- {
- role: 'user',
- content: 'Can I make a policy restrict access instead of give access?',
- },
- ],
- tableDefs
- )
-
- const responseText = await collectStream(responseStream)
-
- await expect(responseText).toMatchCriteria(
- 'Discourages restrictive policies and provides reasons why'
- )
- })
-
- test.concurrent('user id is on joined table and joins are minimized', async () => {
- const responseStream = await chatRlsPolicy(
- openai,
- [
- {
- role: 'user',
- content: 'Users can only see books from libraries they are a member of',
- },
- ],
- tableDefs
- )
-
- const responseText = await collectStream(responseStream)
- const [sql] = extractMarkdownSql(responseText)
- const [policy] = await getPolicies(sql)
-
- withMetadata({ sql }, () => {
- // Check that USING is either a IN or EXISTS expression
- assertDefined(policy.qual, 'Expected a USING statement')
- const sublink = assertAndUnwrapNode(policy.qual, 'SubLink', 'Expected USING to be a sublink')
- expect(['ANY_SUBLINK', 'EXISTS_SUBLINK']).toContain(sublink.subLinkType)
-
- if (sublink.subLinkType === 'ANY_SUBLINK') {
- // Validate column for IN clause
- assertDefined(sublink.testexpr, 'Expected sublink to have a test expression')
- const columnName = assertAndRenderColumn(
- sublink.testexpr,
- 'Expected sublink test expression to be a column'
- )
- expect(columnName).toBe('library_id')
- }
-
- // Validate sub-query
- assertDefined(sublink.subselect, 'Expected sublink to have a subselect')
- const selectStatement = assertAndUnwrapNode(
- sublink.subselect,
- 'SelectStmt',
- 'Expected sublink subselect to be a SELECT statement'
- )
-
- assertDefined(selectStatement.targetList, 'Expected SELECT statement to have a target list')
-
- if (sublink.subLinkType === 'ANY_SUBLINK') {
- const columns = renderTargets(selectStatement.targetList, (node) =>
- assertAndRenderColumn(node, 'Expected target list to contain columns')
- )
- expect(columns).toContain('library_id')
- }
-
- assertDefined(selectStatement.fromClause, 'Expected SELECT statement to have a FROM clause')
- const [fromNode] = selectStatement.fromClause
-
- const fromRangeVar = assertAndUnwrapNode(
- fromNode,
- 'RangeVar',
- 'Expected FROM clause to contain a RangeVar'
- )
- expect(fromRangeVar.relname).toBe('library_memberships')
-
- assertDefined(selectStatement.whereClause, 'Expected SELECT statement to have a WHERE clause')
- const whereClause = assertAndUnwrapNode(
- selectStatement.whereClause,
- 'A_Expr',
- 'Expected WHERE clause to be an expression'
- )
-
- assertEachSideOfExpression(
- whereClause,
- (node) => {
- const columnName = assertAndRenderColumn(
- node,
- 'Expected one side of WHERE clause to have a column'
- )
- expect(columnName).toBe('user_id')
- },
- (node) => {
- const sublink = assertAndUnwrapNode(
- node,
- 'SubLink',
- 'Expected one side of WHERE clause to contain a sub-query selecting auth.uid()'
- )
-
- assertDefined(sublink.subselect, 'Expected sublink to contain a subselect')
- const selectStatement = assertAndUnwrapNode(
- sublink.subselect,
- 'SelectStmt',
- 'Expected subselect to contain a SELECT statement'
- )
-
- assertDefined(
- selectStatement.targetList,
- 'Expected SELECT statement to contain a target list'
- )
- const [functionCall] = renderTargets(selectStatement.targetList, (node) => {
- const funcCall = assertAndUnwrapNode(
- node,
- 'FuncCall',
- 'Expected SELECT statement to contain a function call'
- )
- assertDefined(funcCall.funcname, 'Expected function call to have a name')
- return renderFields(funcCall.funcname)
- })
- expect(functionCall).toBe('auth.uid')
- }
- )
- })
- })
-
- test.concurrent('mfa', async () => {
- const responseStream = await chatRlsPolicy(
- openai,
- [
- {
- role: 'user',
- content: 'Users need a second form of auth to join a library',
- },
- ],
- tableDefs
- )
-
- const responseText = await collectStream(responseStream)
- const [sql] = extractMarkdownSql(responseText)
- const [policy] = await getPolicies(sql)
-
- withMetadata({ sql }, () => {
- expect(policy.cmd_name).toBe('insert')
-
- assertDefined(policy.with_check, 'Expected INSERT policy to have a WITH CHECK')
- const expression = assertAndUnwrapNode(
- policy.with_check,
- 'A_Expr',
- 'Expected WITH CHECK to be an expression'
- )
-
- assertEachSideOfExpression(
- expression,
- (node) => {
- const constValue = assertAndUnwrapNode(
- node,
- 'A_Const',
- 'Expected one side of expression to be a constant'
- )
- const stringValue = parseConstant(constValue)
- expect(stringValue).toBe('aal2')
- },
- (node) => {
- const sublink = assertAndUnwrapNode(
- node,
- 'SubLink',
- 'Expected one side of expression to be a sub-query'
- )
-
- assertDefined(sublink.subselect, 'Expected sublink to have a subselect')
- const selectStatement = assertAndUnwrapNode(
- sublink.subselect,
- 'SelectStmt',
- 'Expected sub-query to be a SELECT statement'
- )
-
- assertDefined(
- selectStatement.targetList,
- 'Expected SELECT statement to have a target list'
- )
- const [jsonTarget] = renderTargets(selectStatement.targetList, (node) => {
- const expression = assertAndUnwrapNode(
- node,
- 'A_Expr',
- 'Expected SELECT target list to contain a JSON expression'
- )
- const jsonExpression = renderJsonExpression(expression)
- return jsonExpression
- })
-
- expect(jsonTarget).toBe("auth.jwt()->>'aal'")
- }
- )
- })
- })
-})
diff --git a/packages/ai-commands/src/sql/rls.ts b/packages/ai-commands/src/sql/rls.ts
deleted file mode 100644
index dd9fbd23846ed..0000000000000
--- a/packages/ai-commands/src/sql/rls.ts
+++ /dev/null
@@ -1,331 +0,0 @@
-import { OpenAIStream } from 'ai'
-import { codeBlock, oneLine, stripIndent } from 'common-tags'
-import type OpenAI from 'openai'
-import { ContextLengthError } from '../errors'
-import type { Message } from '../types'
-import { components } from 'api-types'
-
-type DatabasePoliciesData = components['schemas']['PostgresPolicy']
-
-/**
- * Responds to a conversation about building an RLS policy.
- *
- * @returns A `ReadableStream` containing the response text and SQL.
- */
-export async function chatRlsPolicy(
- openai: OpenAI,
- messages: Message[],
- entityDefinitions?: string[],
- existingPolicies?: DatabasePoliciesData[],
- policyDefinition?: string
-): Promise> {
- const initMessages: OpenAI.Chat.Completions.ChatCompletionMessageParam[] = [
- {
- role: 'system',
- content: stripIndent`
- You're a Supabase Postgres expert in writing row level security policies. Your purpose is to
- generate a policy with the constraints given by the user. You will be provided a schema
- on which the policy should be applied.
-
- The output should use the following instructions:
- - The generated SQL must be valid SQL.
- - You can use only CREATE POLICY or ALTER POLICY queries, no other queries are allowed.
- - Always use double apostrophe in SQL strings (eg. 'Night''s watch')
- - You can add short explanations to your messages.
- - The result should be a valid markdown. The SQL code should be wrapped in \`\`\` (including sql language tag).
- - Always use "auth.uid()" instead of "current_user".
- - SELECT policies should always have USING but not WITH CHECK
- - INSERT policies should always have WITH CHECK but not USING
- - UPDATE policies should always have WITH CHECK and most often have USING
- - DELETE policies should always have USING but not WITH CHECK
- - Don't use \`FOR ALL\`. Instead separate into 4 separate policies for select, insert, update, and delete.
- - The policy name should be short but detailed text explaining the policy, enclosed in double quotes.
- - Always put explanations as separate text. Never use inline SQL comments.
- - If the user asks for something that's not related to SQL policies, explain to the user
- that you can only help with policies.
- - Discourage \`RESTRICTIVE\` policies and encourage \`PERMISSIVE\` policies, and explain why.
-
- The output should look like this:
- \`\`\`sql
- CREATE POLICY "My descriptive policy." ON books FOR INSERT to authenticated USING ( (select auth.uid()) = author_id ) WITH ( true );
- \`\`\`
-
- Since you are running in a Supabase environment, take note of these Supabase-specific additions:
-
- ## Authenticated and unauthenticated roles
-
- Supabase maps every request to one of the roles:
-
- - \`anon\`: an unauthenticated request (the user is not logged in)
- - \`authenticated\`: an authenticated request (the user is logged in)
-
- These are actually [Postgres Roles](/docs/guides/database/postgres/roles). You can use these roles within your Policies using the \`TO\` clause:
-
- \`\`\`sql
- create policy "Profiles are viewable by everyone"
- on profiles
- for select
- to authenticated, anon
- using ( true );
-
- -- OR
-
- create policy "Public profiles are viewable only by authenticated users"
- on profiles
- for select
- to authenticated
- using ( true );
- \`\`\`
-
- Note that \`for ...\` must be added after the table but before the roles. \`to ...\` must be added after \`for ...\`:
-
- ### Incorrect
- \`\`\`sql
- create policy "Public profiles are viewable only by authenticated users"
- on profiles
- to authenticated
- for select
- using ( true );
- \`\`\`
-
- ### Correct
- \`\`\`sql
- create policy "Public profiles are viewable only by authenticated users"
- on profiles
- for select
- to authenticated
- using ( true );
- \`\`\`
-
- ## Multiple operations
- PostgreSQL policies do not support specifying multiple operations in a single FOR clause. You need to create separate policies for each operation.
-
- ### Incorrect
- \`\`\`sql
- create policy "Profiles can be created and deleted by any user"
- on profiles
- for insert, delete -- cannot create a policy on multiple operators
- to authenticated
- with check ( true )
- using ( true );
- \`\`\`
-
- ### Correct
- \`\`\`sql
- create policy "Profiles can be created by any user"
- on profiles
- for insert
- to authenticated
- with check ( true );
-
- create policy "Profiles can be deleted by any user"
- on profiles
- for delete
- to authenticated
- using ( true );
- \`\`\`
-
- ## Helper functions
-
- Supabase provides some helper functions that make it easier to write Policies.
-
- ### \`auth.uid()\`
-
- Returns the ID of the user making the request.
-
- ### \`auth.jwt()\`
-
- Returns the JWT of the user making the request. Anything that you store in the user's \`raw_app_meta_data\` column or the \`raw_user_meta_data\` column will be accessible using this function. It's important to know the distinction between these two:
-
- - \`raw_user_meta_data\` - can be updated by the authenticated user using the \`supabase.auth.update()\` function. It is not a good place to store authorization data.
- - \`raw_app_meta_data\` - cannot be updated by the user, so it's a good place to store authorization data.
-
- The \`auth.jwt()\` function is extremely versatile. For example, if you store some team data inside \`app_metadata\`, you can use it to determine whether a particular user belongs to a team. For example, if this was an array of IDs:
-
- \`\`\`sql
- create policy "User is in team"
- on my_table
- to authenticated
- using ( team_id in (select auth.jwt() -> 'app_metadata' -> 'teams'));
- \`\`\`
-
- ### MFA
-
- The \`auth.jwt()\` function can be used to check for [Multi-Factor Authentication](/docs/guides/auth/auth-mfa#enforce-rules-for-mfa-logins). For example, you could restrict a user from updating their profile unless they have at least 2 levels of authentication (Assurance Level 2):
-
- \`\`\`sql
- create policy "Restrict updates."
- on profiles
- as restrictive
- for update
- to authenticated using (
- (select auth.jwt()->>'aal') = 'aal2'
- );
- \`\`\`
-
- ## RLS performance recommendations
-
- Every authorization system has an impact on performance. While row level security is powerful, the performance impact is important to keep in mind. This is especially true for queries that scan every row in a table - like many \`select\` operations, including those using limit, offset, and ordering.
-
- Based on a series of [tests](https://github.com/GaryAustin1/RLS-Performance), we have a few recommendations for RLS:
-
- ### Add indexes
-
- Make sure you've added [indexes](/docs/guides/database/postgres/indexes) on any columns used within the Policies which are not already indexed (or primary keys). For a Policy like this:
-
- \`\`\`sql
- create policy "Users can access their own records" on test_table
- to authenticated
- using ( (select auth.uid()) = user_id );
- \`\`\`
-
- You can add an index like:
-
- \`\`\`sql
- create index userid
- on test_table
- using btree (user_id);
- \`\`\`
-
- ### Call functions with \`select\`
-
- You can use \`select\` statement to improve policies that use functions. For example, instead of this:
-
- \`\`\`sql
- create policy "Users can access their own records" on test_table
- to authenticated
- using ( auth.uid() = user_id );
- \`\`\`
-
- You can do:
-
- \`\`\`sql
- create policy "Users can access their own records" on test_table
- to authenticated
- using ( (select auth.uid()) = user_id );
- \`\`\`
-
- This method works well for JWT functions like \`auth.uid()\` and \`auth.jwt()\` as well as \`security definer\` Functions. Wrapping the function causes an \`initPlan\` to be run by the Postgres optimizer, which allows it to "cache" the results per-statement, rather than calling the function on each row.
-
- Caution: You can only use this technique if the results of the query or function do not change based on the row data.
-
- ### Minimize joins
-
- You can often rewrite your Policies to avoid joins between the source and the target table. Instead, try to organize your policy to fetch all the relevant data from the target table into an array or set, then you can use an \`IN\` or \`ANY\` operation in your filter.
-
- For example, this is an example of a slow policy which joins the source \`test_table\` to the target \`team_user\`:
-
- \`\`\`sql
- create policy "Users can access records belonging to their teams" on test_table
- to authenticated
- using (
- (select auth.uid()) in (
- select user_id
- from team_user
- where team_user.team_id = team_id -- joins to the source "test_table.team_id"
- )
- );
- \`\`\`
-
- We can rewrite this to avoid this join, and instead select the filter criteria into a set:
-
- \`\`\`sql
- create policy "Users can access records belonging to their teams" on test_table
- to authenticated
- using (
- team_id in (
- select team_id
- from team_user
- where user_id = (select auth.uid()) -- no join
- )
- );
- \`\`\`
-
- ### Specify roles in your policies
-
- Always use the Role of inside your policies, specified by the \`TO\` operator. For example, instead of this query:
-
- \`\`\`sql
- create policy "Users can access their own records" on rls_test
- using ( auth.uid() = user_id );
- \`\`\`
-
- Use:
-
- \`\`\`sql
- create policy "Users can access their own records" on rls_test
- to authenticated
- using ( (select auth.uid()) = user_id );
- \`\`\`
-
- This prevents the policy \`( (select auth.uid()) = user_id )\` from running for any \`anon\` users, since the execution stops at the \`to authenticated\` step.
- `,
- },
- ]
-
- if (entityDefinitions) {
- const definitions = codeBlock`${entityDefinitions.join('\n\n')}`
- initMessages.push({
- role: 'user',
- content: oneLine`Here is my database schema for reference: ${definitions}`,
- })
- }
-
- if (existingPolicies !== undefined && existingPolicies.length > 0) {
- const formattedPolicies = existingPolicies
- .map(
- (policy: DatabasePoliciesData) => `
- Policy Name: "${policy.name}"
- Action: ${policy.action}
- Roles: ${policy.roles.join(', ')}
- Command: ${policy.command}
- Definition: ${policy.definition}
- ${policy.check ? `Check: ${policy.check}` : ''}
- `
- )
- .join('\n')
-
- initMessages.push({
- role: 'user',
- content: codeBlock`
- Here are my existing policy definitions on this table for reference:
- ${formattedPolicies}
- `.trim(),
- })
- }
-
- if (policyDefinition !== undefined) {
- const definitionBlock = codeBlock`${policyDefinition}`
- initMessages.push({
- role: 'user',
- content: codeBlock`
- Here is my policy definition for reference:
- ${definitionBlock}
-
- I'm requesting to update this policy instead so please opt to use "alter policy" instead of "create policy" where appropriate.
- `.trim(),
- })
- }
-
- if (messages) {
- initMessages.push(...messages)
- }
-
- try {
- const response = await openai.chat.completions.create({
- model: 'gpt-4o-2024-05-13',
- messages: initMessages,
- max_tokens: 1024,
- temperature: 0,
- stream: true,
- })
-
- // Transform the streamed SSE response from OpenAI to a ReadableStream
- return OpenAIStream(response)
- } catch (error) {
- if (error instanceof Error && 'code' in error && error.code === 'context_length_exceeded') {
- throw new ContextLengthError()
- }
- throw error
- }
-}
diff --git a/packages/pg-meta/package.json b/packages/pg-meta/package.json
index 3c1c43bf28d1d..04c9e0b811389 100644
--- a/packages/pg-meta/package.json
+++ b/packages/pg-meta/package.json
@@ -16,7 +16,7 @@
"lint": "tsc --noEmit"
},
"dependencies": {
- "zod": "^3.22.4"
+ "zod": "^3.25.76"
},
"devDependencies": {
"@types/pg": "^8.11.11",
diff --git a/packages/ui-patterns/package.json b/packages/ui-patterns/package.json
index 432bc53363007..60f7884548887 100644
--- a/packages/ui-patterns/package.json
+++ b/packages/ui-patterns/package.json
@@ -499,7 +499,7 @@
"mdast": "^3.0.0",
"monaco-editor": "*",
"next-themes": "*",
- "openai": "^4.20.1",
+ "openai": "^4.75.1",
"react": "catalog:",
"react-countdown": "^2.3.5",
"react-dom": "catalog:",
@@ -521,7 +521,7 @@
"ui": "workspace:*",
"unist-util-visit": "^5.0.0",
"valtio": "catalog:",
- "zod": "^3.22.4"
+ "zod": "^3.25.76"
},
"devDependencies": {
"@testing-library/dom": "^10.0.0",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 4def09c5953e5..a940cf978c9d8 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -249,8 +249,8 @@ importers:
specifier: ^5.0.0
version: 5.0.0
zod:
- specifier: ^3.22.4
- version: 3.23.8
+ specifier: ^3.25.76
+ version: 3.25.76
devDependencies:
'@shikijs/compat':
specifier: ^1.1.7
@@ -454,8 +454,8 @@ importers:
specifier: ^1.19.1
version: 1.19.1(next@15.3.3(@babel/core@7.26.10(supports-color@8.1.1))(@opentelemetry/api@1.9.0)(@playwright/test@1.53.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.4))
openai:
- specifier: ^4.20.1
- version: 4.71.1(encoding@0.1.13)(zod@3.23.8)
+ specifier: ^4.75.1
+ version: 4.104.0(encoding@0.1.13)(ws@8.18.3)(zod@3.25.76)
openapi-fetch:
specifier: 0.12.4
version: 0.12.4
@@ -532,8 +532,8 @@ importers:
specifier: ^2.4.5
version: 2.4.5
zod:
- specifier: ^3.22.4
- version: 3.23.8
+ specifier: ^3.25.76
+ version: 3.25.76
devDependencies:
'@graphiql/toolkit':
specifier: ^0.9.1
@@ -659,14 +659,20 @@ importers:
apps/studio:
dependencies:
'@ai-sdk/amazon-bedrock':
- specifier: ^2.2.10
- version: 2.2.10(zod@3.23.8)
+ specifier: ^3.0.0
+ version: 3.0.0(zod@3.25.76)
'@ai-sdk/openai':
- specifier: ^1.3.22
- version: 1.3.22(zod@3.23.8)
+ specifier: ^2.0.0
+ version: 2.0.2(zod@3.25.76)
+ '@ai-sdk/provider':
+ specifier: ^2.0.0
+ version: 2.0.0
+ '@ai-sdk/provider-utils':
+ specifier: ^3.0.0
+ version: 3.0.0(zod@3.25.76)
'@ai-sdk/react':
- specifier: ^1.2.12
- version: 1.2.12(react@18.3.1)(zod@3.23.8)
+ specifier: ^2.0.0
+ version: 2.0.2(react@18.3.1)(zod@3.25.76)
'@aws-sdk/credential-providers':
specifier: ^3.804.0
version: 3.823.0
@@ -788,8 +794,8 @@ importers:
specifier: ^2.7.29
version: 2.7.30
ai:
- specifier: ^4.3.16
- version: 4.3.16(react@18.3.1)(zod@3.23.8)
+ specifier: ^5.0.0
+ version: 5.0.2(zod@3.25.76)
ai-commands:
specifier: workspace:*
version: link:../../packages/ai-commands
@@ -878,8 +884,8 @@ importers:
specifier: ^2.4.1
version: 2.4.1(next@15.3.3(@babel/core@7.26.10(supports-color@8.1.1))(@opentelemetry/api@1.9.0)(@playwright/test@1.53.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.4))(react-router@7.5.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)
openai:
- specifier: ^4.20.1
- version: 4.71.1(encoding@0.1.13)(zod@3.23.8)
+ specifier: ^4.75.1
+ version: 4.104.0(encoding@0.1.13)(ws@8.18.3)(zod@3.25.76)
openapi-fetch:
specifier: 0.12.4
version: 0.12.4
@@ -1007,8 +1013,8 @@ importers:
specifier: ^0.3.0
version: 0.3.0
zod:
- specifier: ^3.22.4
- version: 3.23.8
+ specifier: ^3.25.76
+ version: 3.25.76
zxcvbn:
specifier: ^4.4.2
version: 4.4.2
@@ -1324,7 +1330,7 @@ importers:
version: 0.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
openai:
specifier: ^5.9.0
- version: 5.9.0(ws@8.18.3)(zod@3.23.8)
+ version: 5.9.0(ws@8.18.3)(zod@3.25.76)
openapi-fetch:
specifier: 0.12.4
version: 0.12.4
@@ -1386,8 +1392,8 @@ importers:
specifier: ^0.9.6
version: 0.9.9(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
zod:
- specifier: ^3.22.4
- version: 3.23.8
+ specifier: ^3.25.76
+ version: 3.25.76
devDependencies:
'@react-router/dev':
specifier: ^7.1.5
@@ -1585,8 +1591,8 @@ importers:
specifier: ^0.3.0
version: 0.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
openai:
- specifier: ^4.20.1
- version: 4.71.1(encoding@0.1.13)(zod@3.23.8)
+ specifier: ^4.75.1
+ version: 4.104.0(encoding@0.1.13)(ws@8.18.3)(zod@3.25.76)
parse-numeric-range:
specifier: ^1.3.0
version: 1.3.0
@@ -1712,8 +1718,8 @@ importers:
specifier: ^9.0.1
version: 9.0.1
zod:
- specifier: ^3.22.4
- version: 3.23.8
+ specifier: ^3.25.76
+ version: 3.25.76
e2e/studio:
dependencies:
@@ -1733,8 +1739,8 @@ importers:
specifier: 'catalog:'
version: 2.49.3
ai:
- specifier: ^3.4.33
- version: 3.4.33(openai@4.71.1(encoding@0.1.13)(zod@3.23.8))(react@18.3.1)(sswr@2.1.0(svelte@4.2.19))(svelte@4.2.19)(vue@3.5.13(typescript@5.5.2))(zod@3.23.8)
+ specifier: ^5.0.0
+ version: 5.0.2(zod@3.25.76)
common-tags:
specifier: ^1.8.2
version: 1.8.2
@@ -1748,15 +1754,15 @@ importers:
specifier: ^3.5.0
version: 3.5.0
openai:
- specifier: ^4.26.1
- version: 4.71.1(encoding@0.1.13)(zod@3.23.8)
+ specifier: ^4.75.1
+ version: 4.104.0(encoding@0.1.13)(ws@8.18.3)(zod@3.25.76)
zod:
- specifier: 3.23.8
- version: 3.23.8
+ specifier: ^3.25.76
+ version: 3.25.76
devDependencies:
'@ai-sdk/openai':
- specifier: ^0.0.72
- version: 0.0.72(zod@3.23.8)
+ specifier: ^2.0.0
+ version: 2.0.2(zod@3.25.76)
'@types/common-tags':
specifier: ^1.8.4
version: 1.8.4
@@ -1971,8 +1977,8 @@ importers:
packages/pg-meta:
dependencies:
zod:
- specifier: ^3.22.4
- version: 3.23.8
+ specifier: ^3.25.76
+ version: 3.25.76
devDependencies:
'@types/pg':
specifier: ^8.11.11
@@ -2304,8 +2310,8 @@ importers:
specifier: '*'
version: 0.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
openai:
- specifier: ^4.20.1
- version: 4.71.1(encoding@0.1.13)(zod@3.23.8)
+ specifier: ^4.75.1
+ version: 4.104.0(encoding@0.1.13)(ws@8.18.3)(zod@3.25.76)
react:
specifier: 'catalog:'
version: 18.3.1
@@ -2370,8 +2376,8 @@ importers:
specifier: 'catalog:'
version: 1.12.0(@types/react@18.3.3)(react@18.3.1)
zod:
- specifier: ^3.22.4
- version: 3.23.8
+ specifier: ^3.25.76
+ version: 3.25.76
devDependencies:
'@testing-library/dom':
specifier: ^10.0.0
@@ -2437,111 +2443,50 @@ packages:
'@adobe/css-tools@4.4.0':
resolution: {integrity: sha512-Ff9+ksdQQB3rMncgqDK78uLznstjyfIf2Arnh22pW8kBpLs6rpKDwgnZT46hin5Hl1WzazzK64DOrhSwYpS7bQ==}
- '@ai-sdk/amazon-bedrock@2.2.10':
- resolution: {integrity: sha512-icLGO7Q0NinnHIPgT+y1QjHVwH4HwV+brWbvM+FfCG2Afpa89PyKa3Ret91kGjZpBgM/xnj1B7K5eM+rRlsXQA==}
+ '@ai-sdk/amazon-bedrock@3.0.0':
+ resolution: {integrity: sha512-OxNmyYRf7pY8NK69dAqpoewKtUhY/HUbpa6TDhp9zcgVmQJmhky8Q7HDetdiqopb2Pe3NB/f1nZVI73nin3qng==}
engines: {node: '>=18'}
peerDependencies:
- zod: ^3.0.0
+ zod: ^3.25.76 || ^4
- '@ai-sdk/openai@0.0.72':
- resolution: {integrity: sha512-IKsgxIt6KJGkEHyMp975xW5VPmetwhI8g9H6dDmwvemBB41IRQa78YMNttiJqPcgmrZX2QfErOICv1gQvZ1gZg==}
+ '@ai-sdk/anthropic@2.0.0':
+ resolution: {integrity: sha512-uyyaO4KhxoIKZztREqLPh+6/K3ZJx/rp72JKoUEL9/kC+vfQTThUfPnY/bUryUpcnawx8IY/tSoYNOi/8PCv7w==}
engines: {node: '>=18'}
peerDependencies:
- zod: ^3.0.0
+ zod: ^3.25.76 || ^4
- '@ai-sdk/openai@1.3.22':
- resolution: {integrity: sha512-QwA+2EkG0QyjVR+7h6FE7iOu2ivNqAVMm9UJZkVxxTk5OIq5fFJDTEI/zICEMuHImTTXR2JjsL6EirJ28Jc4cw==}
+ '@ai-sdk/gateway@1.0.0':
+ resolution: {integrity: sha512-VEm87DyRx1yIPywbTy8ntoyh4jEDv1rJ88m+2I7zOm08jJI5BhFtAWh0OF6YzZu1Vu4NxhOWO4ssGdsqydDQ3A==}
engines: {node: '>=18'}
peerDependencies:
- zod: ^3.0.0
+ zod: ^3.25.76 || ^4
- '@ai-sdk/provider-utils@1.0.22':
- resolution: {integrity: sha512-YHK2rpj++wnLVc9vPGzGFP3Pjeld2MwhKinetA0zKXOoHAT/Jit5O8kZsxcSlJPu9wvcGT1UGZEjZrtO7PfFOQ==}
+ '@ai-sdk/openai@2.0.2':
+ resolution: {integrity: sha512-D4zYz2uR90aooKQvX1XnS00Z7PkbrcY+snUvPfm5bCabTG7bzLrVtD56nJ5bSaZG8lmuOMfXpyiEEArYLyWPpw==}
engines: {node: '>=18'}
peerDependencies:
- zod: ^3.0.0
- peerDependenciesMeta:
- zod:
- optional: true
+ zod: ^3.25.76 || ^4
- '@ai-sdk/provider-utils@2.2.8':
- resolution: {integrity: sha512-fqhG+4sCVv8x7nFzYnFo19ryhAa3w096Kmc3hWxMQfW/TubPOmt3A6tYZhl4mUfQWWQMsuSkLrtjlWuXBVSGQA==}
+ '@ai-sdk/provider-utils@3.0.0':
+ resolution: {integrity: sha512-BoQZtGcBxkeSH1zK+SRYNDtJPIPpacTeiMZqnG4Rv6xXjEwM0FH4MGs9c+PlhyEWmQCzjRM2HAotEydFhD4dYw==}
engines: {node: '>=18'}
peerDependencies:
- zod: ^3.23.8
-
- '@ai-sdk/provider@0.0.26':
- resolution: {integrity: sha512-dQkfBDs2lTYpKM8389oopPdQgIU007GQyCbuPPrV+K6MtSII3HBfE0stUIMXUb44L+LK1t6GXPP7wjSzjO6uKg==}
- engines: {node: '>=18'}
-
- '@ai-sdk/provider@1.1.3':
- resolution: {integrity: sha512-qZMxYJ0qqX/RfnuIaab+zp8UAeJn/ygXXAffR5I4N0n1IrvA6qBsjc8hXLmBiMV2zoXlifkacF7sEFnYnjBcqg==}
- engines: {node: '>=18'}
+ zod: ^3.25.76 || ^4
- '@ai-sdk/react@0.0.70':
- resolution: {integrity: sha512-GnwbtjW4/4z7MleLiW+TOZC2M29eCg1tOUpuEiYFMmFNZK8mkrqM0PFZMo6UsYeUYMWqEOOcPOU9OQVJMJh7IQ==}
+ '@ai-sdk/provider@2.0.0':
+ resolution: {integrity: sha512-6o7Y2SeO9vFKB8lArHXehNuusnpddKPk7xqL7T2/b+OvXMRIXUO1rR4wcv1hAFUAT9avGZshty3Wlua/XA7TvA==}
engines: {node: '>=18'}
- peerDependencies:
- react: ^18 || ^19 || ^19.0.0-rc
- zod: ^3.0.0
- peerDependenciesMeta:
- react:
- optional: true
- zod:
- optional: true
- '@ai-sdk/react@1.2.12':
- resolution: {integrity: sha512-jK1IZZ22evPZoQW3vlkZ7wvjYGYF+tRBKXtrcolduIkQ/m/sOAVcVeVDUDvh1T91xCnWCdUGCPZg2avZ90mv3g==}
+ '@ai-sdk/react@2.0.2':
+ resolution: {integrity: sha512-3yHCvhETP/SwgMEwDGEstOlTMVXJuG0AWbj5VcIPui8kKRVOjnl+BnOeZW1eY2QE6TY+LzT4lh4QfrzDf/0adw==}
engines: {node: '>=18'}
peerDependencies:
react: ^18 || ^19 || ^19.0.0-rc
- zod: ^3.23.8
+ zod: ^3.25.76 || ^4
peerDependenciesMeta:
zod:
optional: true
- '@ai-sdk/solid@0.0.54':
- resolution: {integrity: sha512-96KWTVK+opdFeRubqrgaJXoNiDP89gNxFRWUp0PJOotZW816AbhUf4EnDjBjXTLjXL1n0h8tGSE9sZsRkj9wQQ==}
- engines: {node: '>=18'}
- peerDependencies:
- solid-js: ^1.7.7
- peerDependenciesMeta:
- solid-js:
- optional: true
-
- '@ai-sdk/svelte@0.0.57':
- resolution: {integrity: sha512-SyF9ItIR9ALP9yDNAD+2/5Vl1IT6kchgyDH8xkmhysfJI6WrvJbtO1wdQ0nylvPLcsPoYu+cAlz1krU4lFHcYw==}
- engines: {node: '>=18'}
- peerDependencies:
- svelte: ^3.0.0 || ^4.0.0 || ^5.0.0
- peerDependenciesMeta:
- svelte:
- optional: true
-
- '@ai-sdk/ui-utils@0.0.50':
- resolution: {integrity: sha512-Z5QYJVW+5XpSaJ4jYCCAVG7zIAuKOOdikhgpksneNmKvx61ACFaf98pmOd+xnjahl0pIlc/QIe6O4yVaJ1sEaw==}
- engines: {node: '>=18'}
- peerDependencies:
- zod: ^3.0.0
- peerDependenciesMeta:
- zod:
- optional: true
-
- '@ai-sdk/ui-utils@1.2.11':
- resolution: {integrity: sha512-3zcwCc8ezzFlwp3ZD15wAPjf2Au4s3vAbKsXQVyhxODHcmu0iyPO2Eua6D/vicq/AUm/BAo60r97O6HU+EI0+w==}
- engines: {node: '>=18'}
- peerDependencies:
- zod: ^3.23.8
-
- '@ai-sdk/vue@0.0.59':
- resolution: {integrity: sha512-+ofYlnqdc8c4F6tM0IKF0+7NagZRAiqBJpGDJ+6EYhDW8FHLUP/JFBgu32SjxSxC6IKFZxEnl68ZoP/Z38EMlw==}
- engines: {node: '>=18'}
- peerDependencies:
- vue: ^3.3.4
- peerDependenciesMeta:
- vue:
- optional: true
-
'@alloc/quick-lru@5.2.0':
resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==}
engines: {node: '>=10'}
@@ -8060,6 +8005,9 @@ packages:
'@speed-highlight/core@1.2.7':
resolution: {integrity: sha512-0dxmVj4gxg3Jg879kvFS/msl4s9F3T9UXC1InxgOf7t5NvcPD97u/WTA5vL/IxWHMn7qSxBozqrnnE2wvl1m8g==}
+ '@standard-schema/spec@1.0.0':
+ resolution: {integrity: sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==}
+
'@stitches/core@1.2.8':
resolution: {integrity: sha512-Gfkvwk9o9kE9r9XNBmJRfV8zONvXThnm1tcuojL04Uy5uRyqg93DC83lDebl0rocZCfKSjUv+fWYtMQmEDJldg==}
@@ -8680,9 +8628,6 @@ packages:
'@types/debug@4.1.9':
resolution: {integrity: sha512-8Hz50m2eoS56ldRlepxSBa6PWEVCtzUo/92HgLc2qTMnotJNIm7xP+UZhyWoYsyOdd5dxZ+NZLb24rsKyFs2ow==}
- '@types/diff-match-patch@1.0.36':
- resolution: {integrity: sha512-xFdR6tkm0MWvBfO8xXCSsinYxHcqkQUlcHeSpMC2ukzOb6lwQAfDmW+Qt0AvlGd8HpsS28qKsB+oPeJn9I39jg==}
-
'@types/doctrine@0.0.9':
resolution: {integrity: sha512-eOIHzCUSH7SMfonMG1LsC2f8vxBFtho6NGBznK41R84YzPuvSBzrhEps33IsQiOW9+VL6NQ9DbjQJznk/S4uRA==}
@@ -9117,35 +9062,6 @@ packages:
'@vitest/utils@3.0.9':
resolution: {integrity: sha512-ilHM5fHhZ89MCp5aAaM9uhfl1c2JdxVxl3McqsdVyVNN6JffnEen8UMCdRTzOhGXNQGo5GNL9QugHrz727Wnng==}
- '@vue/compiler-core@3.5.13':
- resolution: {integrity: sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==}
-
- '@vue/compiler-dom@3.5.13':
- resolution: {integrity: sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==}
-
- '@vue/compiler-sfc@3.5.13':
- resolution: {integrity: sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ==}
-
- '@vue/compiler-ssr@3.5.13':
- resolution: {integrity: sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA==}
-
- '@vue/reactivity@3.5.13':
- resolution: {integrity: sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg==}
-
- '@vue/runtime-core@3.5.13':
- resolution: {integrity: sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw==}
-
- '@vue/runtime-dom@3.5.13':
- resolution: {integrity: sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog==}
-
- '@vue/server-renderer@3.5.13':
- resolution: {integrity: sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA==}
- peerDependencies:
- vue: 3.5.13
-
- '@vue/shared@3.5.13':
- resolution: {integrity: sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==}
-
'@webassemblyjs/ast@1.14.1':
resolution: {integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==}
@@ -9306,36 +9222,11 @@ packages:
resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==}
engines: {node: '>=8'}
- ai@3.4.33:
- resolution: {integrity: sha512-plBlrVZKwPoRTmM8+D1sJac9Bq8eaa2jiZlHLZIWekKWI1yMWYZvCCEezY9ASPwRhULYDJB2VhKOBUUeg3S5JQ==}
+ ai@5.0.2:
+ resolution: {integrity: sha512-Uk4lmwlr2b/4G9DUYCWYKcWz93xQ6p6AEeRZN+/AO9NbOyCm9axrDru26c83Ax8OB8IHUvoseA3CqaZkg9Z0Kg==}
engines: {node: '>=18'}
peerDependencies:
- openai: ^4.42.0
- react: ^18 || ^19 || ^19.0.0-rc
- sswr: ^2.1.0
- svelte: ^3.0.0 || ^4.0.0 || ^5.0.0
- zod: ^3.0.0
- peerDependenciesMeta:
- openai:
- optional: true
- react:
- optional: true
- sswr:
- optional: true
- svelte:
- optional: true
- zod:
- optional: true
-
- ai@4.3.16:
- resolution: {integrity: sha512-KUDwlThJ5tr2Vw0A1ZkbDKNME3wzWhuVfAOwIvFUzl1TPVDFAXDFTXio3p+jaKneB+dKNCvFFlolYmmgHttG1g==}
- engines: {node: '>=18'}
- peerDependencies:
- react: ^18 || ^19 || ^19.0.0-rc
- zod: ^3.23.8
- peerDependenciesMeta:
- react:
- optional: true
+ zod: ^3.25.76 || ^4
ajv-formats@2.1.1:
resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==}
@@ -10070,9 +9961,6 @@ packages:
code-block-writer@13.0.1:
resolution: {integrity: sha512-c5or4P6erEA69TxaxTNcHUNcIn+oyxSRTOWV+pSYF+z4epXqNvwvJ70XPGjPNgue83oAFAPBRQYwpAJ/Hpe/Sg==}
- code-red@1.0.4:
- resolution: {integrity: sha512-7qJWqItLA8/VPVlKJlFXU+NBlo/qyfs39aJcuMT/2ere32ZqvF5OSxgdM5xOfJJ7O429gg2HM47y8v9P+9wrNw==}
-
codemirror-graphql@2.0.10:
resolution: {integrity: sha512-rC9NxibCsSzWtCQjHLfwKCkyYdGv2BT/BCgyDoKPrc/e7aGiyLyeT0fB60d+0imwlvhX3lIHncl6JMz2YxQ/jg==}
peerDependencies:
@@ -10398,10 +10286,6 @@ packages:
resolution: {integrity: sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==}
engines: {node: '>=8.0.0'}
- css-tree@2.3.1:
- resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==}
- engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0}
-
css-what@6.1.0:
resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==}
engines: {node: '>= 6'}
@@ -10775,9 +10659,6 @@ packages:
didyoumean@1.2.2:
resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==}
- diff-match-patch@1.0.5:
- resolution: {integrity: sha512-IayShXAgj/QMXgB0IWmKx+rOPuGMhqm5w6jvFxmVenXKIzRqTAAsbBPT3kWQeGANj3jGgvcvv4yK6SxqYmikgw==}
-
diff-sequences@29.6.3:
resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
@@ -11474,14 +11355,14 @@ packages:
resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==}
engines: {node: '>=0.8.x'}
- eventsource-parser@1.1.2:
- resolution: {integrity: sha512-v0eOBUbiaFojBu2s2NPBfYUoRR9GjcDNvCXVaqEf5vVfpIAh9f8RCo4vXTP8c63QRKCFwoLpMpTdPwwhEKVgzA==}
- engines: {node: '>=14.18'}
-
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@3.0.7:
resolution: {integrity: sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==}
engines: {node: '>=18.0.0'}
@@ -13218,11 +13099,6 @@ packages:
jsonc-parser@3.2.0:
resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==}
- jsondiffpatch@0.6.0:
- resolution: {integrity: sha512-3QItJOXp2AP1uv7waBkao5nCvhEv+QmJAd38Ybq7wNI74Q+BBmnLn4EDKz6yI9xGAIQoUF87qHt+kc1IVxB4zQ==}
- engines: {node: ^18.0.0 || >=20.0.0}
- hasBin: true
-
jsonfile@6.1.0:
resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==}
@@ -13373,9 +13249,6 @@ packages:
resolution: {integrity: sha512-WunYko2W1NcdfAFpuLUoucsgULmgDBRkdxHxWQ7mK0cQqwPiy8E1enjuRBrhLtZkB5iScJ1XIPdhVEFK8aOLSg==}
engines: {node: '>=14'}
- locate-character@3.0.0:
- resolution: {integrity: sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==}
-
locate-path@6.0.0:
resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
engines: {node: '>=10'}
@@ -13715,9 +13588,6 @@ packages:
mdn-data@2.0.14:
resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==}
- mdn-data@2.0.30:
- resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==}
-
mdurl@1.0.1:
resolution: {integrity: sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==}
@@ -14694,12 +14564,15 @@ packages:
resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==}
engines: {node: '>=12'}
- openai@4.71.1:
- resolution: {integrity: sha512-C6JNMaQ1eijM0lrjiRUL3MgThVP5RdwNAghpbJFdW0t11LzmyqON8Eh8MuUuEZ+CeD6bgYl2Fkn2BoptVxv9Ug==}
+ openai@4.104.0:
+ resolution: {integrity: sha512-p99EFNsA/yX6UhVO93f5kJsDRLAg+CTA2RBqdHK4RtK8u5IJw32Hyb2dTGKbnnFmnuoBv5r7Z2CURI9sGZpSuA==}
hasBin: true
peerDependencies:
+ ws: ^8.18.0
zod: ^3.23.8
peerDependenciesMeta:
+ ws:
+ optional: true
zod:
optional: true
@@ -16709,11 +16582,6 @@ packages:
resolution: {integrity: sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==}
engines: {node: '>= 8'}
- sswr@2.1.0:
- resolution: {integrity: sha512-Cqc355SYlTAaUt8iDPaC/4DPPXK925PePLMxyBKuWd5kKc5mwsG3nT9+Mq2tyguL5s7b4Jg+IRMpTRsNTAfpSQ==}
- peerDependencies:
- svelte: ^4.0.0 || ^5.0.0-next.0
-
stack-generator@2.0.10:
resolution: {integrity: sha512-mwnua/hkqM6pF4k8SnmZ2zfETsRUpWXREfA/goT8SLCV4iOFa4bzOX2nDipWAZFPTjLvQB82f5yaodMVhK0yJQ==}
@@ -16984,10 +16852,6 @@ packages:
resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
engines: {node: '>= 0.4'}
- svelte@4.2.19:
- resolution: {integrity: sha512-IY1rnGr6izd10B0A8LqsBfmlT5OILVuZ7XsI0vdGPEvuonFV7NYEUK4dAkm9Zg2q0Um92kYjTpS1CAP3Nh/KWw==}
- engines: {node: '>=16'}
-
svgson@5.3.1:
resolution: {integrity: sha512-qdPgvUNWb40gWktBJnbJRelWcPzkLed/ShhnRsjbayXz8OtdPOzbil9jtiZdrYvSDumAz/VNQr6JaNfPx/gvPA==}
@@ -17007,14 +16871,6 @@ packages:
peerDependencies:
react: ^16.11.0 || ^17.0.0 || ^18.0.0
- swrev@4.0.0:
- resolution: {integrity: sha512-LqVcOHSB4cPGgitD1riJ1Hh4vdmITOp+BkmfmXRh4hSF/t7EnS4iD+SOTmq7w5pPm/SiPeto4ADbKS6dHUDWFA==}
-
- swrv@1.0.4:
- resolution: {integrity: sha512-zjEkcP8Ywmj+xOJW3lIT65ciY/4AL4e/Or7Gj0MzU3zBJNMdJiT8geVZhINavnlHRMMCcJLHhraLTAiDOTmQ9g==}
- peerDependencies:
- vue: '>=3.2.26 < 4'
-
symbol-tree@3.2.4:
resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==}
@@ -18063,14 +17919,6 @@ packages:
vscode-languageserver-types@3.17.5:
resolution: {integrity: sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==}
- vue@3.5.13:
- resolution: {integrity: sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ==}
- peerDependencies:
- typescript: '*'
- peerDependenciesMeta:
- typescript:
- optional: true
-
w3c-keyname@2.2.8:
resolution: {integrity: sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==}
@@ -18373,21 +18221,13 @@ packages:
resolution: {integrity: sha512-zK7YHHz4ZXpW89AHXUPbQVGKI7uvkd3hzusTdotCg1UxyaVtg0zFJSTfW/Dq5f7OBBVnq6cZIaC8Ti4hb6dtCA==}
engines: {node: '>= 14'}
- zod-to-json-schema@3.23.5:
- resolution: {integrity: sha512-5wlSS0bXfF/BrL4jPAbz9da5hDlDptdEppYfe+x4eIJ7jioqKG9uUxOwPzqof09u/XeVdrgFu29lZi+8XNDJtA==}
- peerDependencies:
- zod: ^3.23.3
-
zod-to-json-schema@3.24.5:
resolution: {integrity: sha512-/AuWwMP+YqiPbsJx5D6TfgRTc4kTLjsh5SOcd4bLsfUg2RcEXrFMJl1DGgdHy2aCfsIA/cr/1JM0xcB2GZji8g==}
peerDependencies:
zod: ^3.24.1
- zod@3.23.8:
- resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==}
-
- zod@3.24.2:
- resolution: {integrity: sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ==}
+ zod@3.25.76:
+ resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==}
zustand@4.4.7:
resolution: {integrity: sha512-QFJWJMdlETcI69paJwhSMJz7PPWjVP8Sjhclxmxmxv/RYI7ZOvR5BHX+ktH0we9gTWQMxcne8q1OY8xxz604gw==}
@@ -18416,114 +18256,55 @@ snapshots:
'@adobe/css-tools@4.4.0': {}
- '@ai-sdk/amazon-bedrock@2.2.10(zod@3.23.8)':
+ '@ai-sdk/amazon-bedrock@3.0.0(zod@3.25.76)':
dependencies:
- '@ai-sdk/provider': 1.1.3
- '@ai-sdk/provider-utils': 2.2.8(zod@3.23.8)
+ '@ai-sdk/anthropic': 2.0.0(zod@3.25.76)
+ '@ai-sdk/provider': 2.0.0
+ '@ai-sdk/provider-utils': 3.0.0(zod@3.25.76)
'@smithy/eventstream-codec': 4.0.4
'@smithy/util-utf8': 4.0.0
aws4fetch: 1.0.20
- zod: 3.23.8
+ zod: 3.25.76
- '@ai-sdk/openai@0.0.72(zod@3.23.8)':
+ '@ai-sdk/anthropic@2.0.0(zod@3.25.76)':
dependencies:
- '@ai-sdk/provider': 0.0.26
- '@ai-sdk/provider-utils': 1.0.22(zod@3.23.8)
- zod: 3.23.8
+ '@ai-sdk/provider': 2.0.0
+ '@ai-sdk/provider-utils': 3.0.0(zod@3.25.76)
+ zod: 3.25.76
- '@ai-sdk/openai@1.3.22(zod@3.23.8)':
+ '@ai-sdk/gateway@1.0.0(zod@3.25.76)':
dependencies:
- '@ai-sdk/provider': 1.1.3
- '@ai-sdk/provider-utils': 2.2.8(zod@3.23.8)
- zod: 3.23.8
+ '@ai-sdk/provider': 2.0.0
+ '@ai-sdk/provider-utils': 3.0.0(zod@3.25.76)
+ zod: 3.25.76
- '@ai-sdk/provider-utils@1.0.22(zod@3.23.8)':
+ '@ai-sdk/openai@2.0.2(zod@3.25.76)':
dependencies:
- '@ai-sdk/provider': 0.0.26
- eventsource-parser: 1.1.2
- nanoid: 3.3.8
- secure-json-parse: 2.7.0
- optionalDependencies:
- zod: 3.23.8
+ '@ai-sdk/provider': 2.0.0
+ '@ai-sdk/provider-utils': 3.0.0(zod@3.25.76)
+ zod: 3.25.76
- '@ai-sdk/provider-utils@2.2.8(zod@3.23.8)':
+ '@ai-sdk/provider-utils@3.0.0(zod@3.25.76)':
dependencies:
- '@ai-sdk/provider': 1.1.3
- nanoid: 3.3.8
- secure-json-parse: 2.7.0
- zod: 3.23.8
+ '@ai-sdk/provider': 2.0.0
+ '@standard-schema/spec': 1.0.0
+ eventsource-parser: 3.0.3
+ zod: 3.25.76
+ zod-to-json-schema: 3.24.5(zod@3.25.76)
- '@ai-sdk/provider@0.0.26':
+ '@ai-sdk/provider@2.0.0':
dependencies:
json-schema: 0.4.0
- '@ai-sdk/provider@1.1.3':
- dependencies:
- json-schema: 0.4.0
-
- '@ai-sdk/react@0.0.70(react@18.3.1)(zod@3.23.8)':
- dependencies:
- '@ai-sdk/provider-utils': 1.0.22(zod@3.23.8)
- '@ai-sdk/ui-utils': 0.0.50(zod@3.23.8)
- swr: 2.2.5(react@18.3.1)
- throttleit: 2.1.0
- optionalDependencies:
- react: 18.3.1
- zod: 3.23.8
-
- '@ai-sdk/react@1.2.12(react@18.3.1)(zod@3.23.8)':
+ '@ai-sdk/react@2.0.2(react@18.3.1)(zod@3.25.76)':
dependencies:
- '@ai-sdk/provider-utils': 2.2.8(zod@3.23.8)
- '@ai-sdk/ui-utils': 1.2.11(zod@3.23.8)
+ '@ai-sdk/provider-utils': 3.0.0(zod@3.25.76)
+ ai: 5.0.2(zod@3.25.76)
react: 18.3.1
swr: 2.2.5(react@18.3.1)
throttleit: 2.1.0
optionalDependencies:
- zod: 3.23.8
-
- '@ai-sdk/solid@0.0.54(zod@3.23.8)':
- dependencies:
- '@ai-sdk/provider-utils': 1.0.22(zod@3.23.8)
- '@ai-sdk/ui-utils': 0.0.50(zod@3.23.8)
- transitivePeerDependencies:
- - zod
-
- '@ai-sdk/svelte@0.0.57(svelte@4.2.19)(zod@3.23.8)':
- dependencies:
- '@ai-sdk/provider-utils': 1.0.22(zod@3.23.8)
- '@ai-sdk/ui-utils': 0.0.50(zod@3.23.8)
- sswr: 2.1.0(svelte@4.2.19)
- optionalDependencies:
- svelte: 4.2.19
- transitivePeerDependencies:
- - zod
-
- '@ai-sdk/ui-utils@0.0.50(zod@3.23.8)':
- dependencies:
- '@ai-sdk/provider': 0.0.26
- '@ai-sdk/provider-utils': 1.0.22(zod@3.23.8)
- json-schema: 0.4.0
- secure-json-parse: 2.7.0
- zod-to-json-schema: 3.23.5(zod@3.23.8)
- optionalDependencies:
- zod: 3.23.8
-
- '@ai-sdk/ui-utils@1.2.11(zod@3.23.8)':
- dependencies:
- '@ai-sdk/provider': 1.1.3
- '@ai-sdk/provider-utils': 2.2.8(zod@3.23.8)
- zod: 3.23.8
- zod-to-json-schema: 3.24.5(zod@3.23.8)
-
- '@ai-sdk/vue@0.0.59(vue@3.5.13(typescript@5.5.2))(zod@3.23.8)':
- dependencies:
- '@ai-sdk/provider-utils': 1.0.22(zod@3.23.8)
- '@ai-sdk/ui-utils': 0.0.50(zod@3.23.8)
- swrv: 1.0.4(vue@3.5.13(typescript@5.5.2))
- optionalDependencies:
- vue: 3.5.13(typescript@5.5.2)
- transitivePeerDependencies:
- - zod
+ zod: 3.25.76
'@alloc/quick-lru@5.2.0': {}
@@ -18559,7 +18340,7 @@ snapshots:
'@aws-crypto/crc32@3.0.0':
dependencies:
'@aws-crypto/util': 3.0.0
- '@aws-sdk/types': 3.821.0
+ '@aws-sdk/types': 3.840.0
tslib: 1.14.1
'@aws-crypto/crc32@5.2.0':
@@ -18571,7 +18352,7 @@ snapshots:
'@aws-crypto/crc32c@5.2.0':
dependencies:
'@aws-crypto/util': 5.2.0
- '@aws-sdk/types': 3.821.0
+ '@aws-sdk/types': 3.840.0
tslib: 2.8.1
'@aws-crypto/ie11-detection@3.0.0':
@@ -18582,7 +18363,7 @@ snapshots:
dependencies:
'@aws-crypto/supports-web-crypto': 5.2.0
'@aws-crypto/util': 5.2.0
- '@aws-sdk/types': 3.821.0
+ '@aws-sdk/types': 3.840.0
'@aws-sdk/util-locate-window': 3.465.0
'@smithy/util-utf8': 2.0.2
tslib: 2.8.1
@@ -18593,7 +18374,7 @@ snapshots:
'@aws-crypto/sha256-js': 3.0.0
'@aws-crypto/supports-web-crypto': 3.0.0
'@aws-crypto/util': 3.0.0
- '@aws-sdk/types': 3.821.0
+ '@aws-sdk/types': 3.840.0
'@aws-sdk/util-locate-window': 3.465.0
'@aws-sdk/util-utf8-browser': 3.259.0
tslib: 1.14.1
@@ -18611,13 +18392,13 @@ snapshots:
'@aws-crypto/sha256-js@1.2.2':
dependencies:
'@aws-crypto/util': 1.2.2
- '@aws-sdk/types': 3.821.0
+ '@aws-sdk/types': 3.840.0
tslib: 1.14.1
'@aws-crypto/sha256-js@3.0.0':
dependencies:
'@aws-crypto/util': 3.0.0
- '@aws-sdk/types': 3.821.0
+ '@aws-sdk/types': 3.840.0
tslib: 1.14.1
'@aws-crypto/sha256-js@5.2.0':
@@ -18636,13 +18417,13 @@ snapshots:
'@aws-crypto/util@1.2.2':
dependencies:
- '@aws-sdk/types': 3.821.0
+ '@aws-sdk/types': 3.840.0
'@aws-sdk/util-utf8-browser': 3.259.0
tslib: 1.14.1
'@aws-crypto/util@3.0.0':
dependencies:
- '@aws-sdk/types': 3.821.0
+ '@aws-sdk/types': 3.840.0
'@aws-sdk/util-utf8-browser': 3.259.0
tslib: 1.14.1
@@ -20315,7 +20096,7 @@ snapshots:
ts-pattern: 5.1.1
unified: 11.0.5
yaml: 2.4.5
- zod: 3.23.8
+ zod: 3.25.76
transitivePeerDependencies:
- '@effect-ts/otel-node'
- esbuild
@@ -20334,7 +20115,7 @@ snapshots:
ts-pattern: 5.1.1
unified: 11.0.5
yaml: 2.4.5
- zod: 3.23.8
+ zod: 3.25.76
transitivePeerDependencies:
- '@effect-ts/otel-node'
- esbuild
@@ -21412,10 +21193,10 @@ snapshots:
'@whatwg-node/fetch': 0.10.6
'@whatwg-node/promise-helpers': 1.3.1
graphql: 16.11.0
- isomorphic-ws: 5.0.0(ws@8.18.1)
+ isomorphic-ws: 5.0.0(ws@8.18.3)
sync-fetch: 0.6.0-2
tslib: 2.8.1
- ws: 8.18.1
+ ws: 8.18.3
transitivePeerDependencies:
- '@fastify/websocket'
- '@types/node'
@@ -22087,8 +21868,8 @@ snapshots:
express-rate-limit: 7.5.0(express@5.1.0(supports-color@8.1.1))
pkce-challenge: 5.0.0
raw-body: 3.0.0
- zod: 3.23.8
- zod-to-json-schema: 3.24.5(zod@3.23.8)
+ zod: 3.25.76
+ zod-to-json-schema: 3.24.5(zod@3.25.76)
transitivePeerDependencies:
- supports-color
@@ -26493,6 +26274,8 @@ snapshots:
'@speed-highlight/core@1.2.7': {}
+ '@standard-schema/spec@1.0.0': {}
+
'@stitches/core@1.2.8': {}
'@stripe/react-stripe-js@3.7.0(@stripe/stripe-js@7.5.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
@@ -26520,15 +26303,15 @@ snapshots:
common-tags: 1.8.2
graphql: 16.11.0
openapi-fetch: 0.13.8
- zod: 3.24.2
+ zod: 3.25.76
transitivePeerDependencies:
- supports-color
'@supabase/mcp-utils@0.2.1(supports-color@8.1.1)':
dependencies:
'@modelcontextprotocol/sdk': 1.12.1(supports-color@8.1.1)
- zod: 3.24.2
- zod-to-json-schema: 3.24.5(zod@3.24.2)
+ zod: 3.25.76
+ zod-to-json-schema: 3.24.5(zod@3.25.76)
transitivePeerDependencies:
- supports-color
@@ -26857,7 +26640,7 @@ snapshots:
react-dom: 18.3.1(react@18.3.1)
vinxi: 0.5.3(@electric-sql/pglite@0.2.15)(@types/node@22.13.14)(aws4fetch@1.0.20)(db0@0.3.1(@electric-sql/pglite@0.2.15)(drizzle-orm@0.36.1(@electric-sql/pglite@0.2.15)(@opentelemetry/api@1.9.0)(@types/pg@8.11.11)(@types/react@18.3.3)(pg@8.13.1)(react@18.3.1)))(drizzle-orm@0.36.1(@electric-sql/pglite@0.2.15)(@opentelemetry/api@1.9.0)(@types/pg@8.11.11)(@types/react@18.3.3)(pg@8.13.1)(react@18.3.1))(encoding@0.1.13)(ioredis@5.6.0(supports-color@8.1.1))(jiti@2.4.2)(sass@1.77.4)(supports-color@8.1.1)(terser@5.39.0)(tsx@4.19.3)(typescript@5.5.2)(yaml@2.4.5)
vite: 6.3.5(@types/node@22.13.14)(jiti@2.4.2)(sass@1.77.4)(terser@5.39.0)(tsx@4.19.3)(yaml@2.4.5)
- zod: 3.24.2
+ zod: 3.25.76
transitivePeerDependencies:
- '@azure/app-configuration'
- '@azure/cosmos'
@@ -27088,7 +26871,7 @@ snapshots:
'@tanstack/virtual-file-routes': 1.114.12
prettier: 3.5.3
tsx: 4.19.3
- zod: 3.24.2
+ zod: 3.25.76
optionalDependencies:
'@tanstack/react-router': 1.114.27(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
@@ -27110,7 +26893,7 @@ snapshots:
babel-dead-code-elimination: 1.0.9(supports-color@8.1.1)
chokidar: 3.6.0
unplugin: 2.2.2
- zod: 3.24.2
+ zod: 3.25.76
optionalDependencies:
'@tanstack/react-router': 1.114.27(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
vite: 6.3.5(@types/node@22.13.14)(jiti@2.4.2)(sass@1.77.4)(terser@5.39.0)(tsx@4.19.3)(yaml@2.4.5)
@@ -27614,8 +27397,6 @@ snapshots:
dependencies:
'@types/ms': 0.7.32
- '@types/diff-match-patch@1.0.36': {}
-
'@types/doctrine@0.0.9': {}
'@types/estree-jsx@1.0.1':
@@ -28208,60 +27989,6 @@ snapshots:
loupe: 3.1.3
tinyrainbow: 2.0.0
- '@vue/compiler-core@3.5.13':
- dependencies:
- '@babel/parser': 7.27.0
- '@vue/shared': 3.5.13
- entities: 4.5.0
- estree-walker: 2.0.2
- source-map-js: 1.2.1
-
- '@vue/compiler-dom@3.5.13':
- dependencies:
- '@vue/compiler-core': 3.5.13
- '@vue/shared': 3.5.13
-
- '@vue/compiler-sfc@3.5.13':
- dependencies:
- '@babel/parser': 7.27.0
- '@vue/compiler-core': 3.5.13
- '@vue/compiler-dom': 3.5.13
- '@vue/compiler-ssr': 3.5.13
- '@vue/shared': 3.5.13
- estree-walker: 2.0.2
- magic-string: 0.30.17
- postcss: 8.5.3
- source-map-js: 1.2.1
-
- '@vue/compiler-ssr@3.5.13':
- dependencies:
- '@vue/compiler-dom': 3.5.13
- '@vue/shared': 3.5.13
-
- '@vue/reactivity@3.5.13':
- dependencies:
- '@vue/shared': 3.5.13
-
- '@vue/runtime-core@3.5.13':
- dependencies:
- '@vue/reactivity': 3.5.13
- '@vue/shared': 3.5.13
-
- '@vue/runtime-dom@3.5.13':
- dependencies:
- '@vue/reactivity': 3.5.13
- '@vue/runtime-core': 3.5.13
- '@vue/shared': 3.5.13
- csstype: 3.1.3
-
- '@vue/server-renderer@3.5.13(vue@3.5.13(typescript@5.5.2))':
- dependencies:
- '@vue/compiler-ssr': 3.5.13
- '@vue/shared': 3.5.13
- vue: 3.5.13(typescript@5.5.2)
-
- '@vue/shared@3.5.13': {}
-
'@webassemblyjs/ast@1.14.1':
dependencies:
'@webassemblyjs/helper-numbers': 1.13.2
@@ -28450,42 +28177,13 @@ snapshots:
clean-stack: 2.2.0
indent-string: 4.0.0
- ai@3.4.33(openai@4.71.1(encoding@0.1.13)(zod@3.23.8))(react@18.3.1)(sswr@2.1.0(svelte@4.2.19))(svelte@4.2.19)(vue@3.5.13(typescript@5.5.2))(zod@3.23.8):
- dependencies:
- '@ai-sdk/provider': 0.0.26
- '@ai-sdk/provider-utils': 1.0.22(zod@3.23.8)
- '@ai-sdk/react': 0.0.70(react@18.3.1)(zod@3.23.8)
- '@ai-sdk/solid': 0.0.54(zod@3.23.8)
- '@ai-sdk/svelte': 0.0.57(svelte@4.2.19)(zod@3.23.8)
- '@ai-sdk/ui-utils': 0.0.50(zod@3.23.8)
- '@ai-sdk/vue': 0.0.59(vue@3.5.13(typescript@5.5.2))(zod@3.23.8)
- '@opentelemetry/api': 1.9.0
- eventsource-parser: 1.1.2
- json-schema: 0.4.0
- jsondiffpatch: 0.6.0
- secure-json-parse: 2.7.0
- zod-to-json-schema: 3.23.5(zod@3.23.8)
- optionalDependencies:
- openai: 4.71.1(encoding@0.1.13)(zod@3.23.8)
- react: 18.3.1
- sswr: 2.1.0(svelte@4.2.19)
- svelte: 4.2.19
- zod: 3.23.8
- transitivePeerDependencies:
- - solid-js
- - vue
-
- ai@4.3.16(react@18.3.1)(zod@3.23.8):
+ ai@5.0.2(zod@3.25.76):
dependencies:
- '@ai-sdk/provider': 1.1.3
- '@ai-sdk/provider-utils': 2.2.8(zod@3.23.8)
- '@ai-sdk/react': 1.2.12(react@18.3.1)(zod@3.23.8)
- '@ai-sdk/ui-utils': 1.2.11(zod@3.23.8)
+ '@ai-sdk/gateway': 1.0.0(zod@3.25.76)
+ '@ai-sdk/provider': 2.0.0
+ '@ai-sdk/provider-utils': 3.0.0(zod@3.25.76)
'@opentelemetry/api': 1.9.0
- jsondiffpatch: 0.6.0
- zod: 3.23.8
- optionalDependencies:
- react: 18.3.1
+ zod: 3.25.76
ajv-formats@2.1.1(ajv@8.12.0):
optionalDependencies:
@@ -29339,14 +29037,6 @@ snapshots:
code-block-writer@13.0.1: {}
- code-red@1.0.4:
- dependencies:
- '@jridgewell/sourcemap-codec': 1.5.0
- '@types/estree': 1.0.5
- acorn: 8.14.1
- estree-walker: 3.0.3
- periscopic: 3.1.0
-
codemirror-graphql@2.0.10(@codemirror/language@6.11.0)(codemirror@5.65.15)(graphql@16.11.0):
dependencies:
'@codemirror/language': 6.11.0
@@ -29687,11 +29377,6 @@ snapshots:
mdn-data: 2.0.14
source-map: 0.6.1
- css-tree@2.3.1:
- dependencies:
- mdn-data: 2.0.30
- source-map-js: 1.2.1
-
css-what@6.1.0: {}
css.escape@1.5.1: {}
@@ -29998,8 +29683,6 @@ snapshots:
didyoumean@1.2.2: {}
- diff-match-patch@1.0.5: {}
-
diff-sequences@29.6.3: {}
diff@4.0.2:
@@ -30805,10 +30488,10 @@ snapshots:
events@3.3.0: {}
- eventsource-parser@1.1.2: {}
-
eventsource-parser@3.0.2: {}
+ eventsource-parser@3.0.3: {}
+
eventsource@3.0.7:
dependencies:
eventsource-parser: 3.0.2
@@ -32625,10 +32308,6 @@ snapshots:
transitivePeerDependencies:
- encoding
- isomorphic-ws@5.0.0(ws@8.18.1):
- dependencies:
- ws: 8.18.1
-
isomorphic-ws@5.0.0(ws@8.18.3):
dependencies:
ws: 8.18.3
@@ -32858,12 +32537,6 @@ snapshots:
jsonc-parser@3.2.0: {}
- jsondiffpatch@0.6.0:
- dependencies:
- '@types/diff-match-patch': 1.0.36
- chalk: 5.4.1
- diff-match-patch: 1.0.5
-
jsonfile@6.1.0:
dependencies:
universalify: 2.0.0
@@ -33050,8 +32723,6 @@ snapshots:
pkg-types: 2.1.0
quansync: 0.2.10
- locate-character@3.0.0: {}
-
locate-path@6.0.0:
dependencies:
p-locate: 5.0.0
@@ -33685,8 +33356,6 @@ snapshots:
mdn-data@2.0.14: {}
- mdn-data@2.0.30: {}
-
mdurl@1.0.1: {}
mdurl@2.0.0: {}
@@ -35133,7 +34802,7 @@ snapshots:
is-docker: 2.2.1
is-wsl: 2.2.0
- openai@4.71.1(encoding@0.1.13)(zod@3.23.8):
+ openai@4.104.0(encoding@0.1.13)(ws@8.18.3)(zod@3.25.76):
dependencies:
'@types/node': 18.18.13
'@types/node-fetch': 2.6.6
@@ -35143,14 +34812,15 @@ snapshots:
formdata-node: 4.4.1
node-fetch: 2.7.0(encoding@0.1.13)
optionalDependencies:
- zod: 3.23.8
+ ws: 8.18.3
+ zod: 3.25.76
transitivePeerDependencies:
- encoding
- openai@5.9.0(ws@8.18.3)(zod@3.23.8):
+ openai@5.9.0(ws@8.18.3)(zod@3.25.76):
optionalDependencies:
ws: 8.18.3
- zod: 3.23.8
+ zod: 3.25.76
openapi-fetch@0.12.4:
dependencies:
@@ -37335,8 +37005,8 @@ snapshots:
stringify-object: 5.0.0
ts-morph: 18.0.0
tsconfig-paths: 4.2.0
- zod: 3.23.8
- zod-to-json-schema: 3.24.5(zod@3.23.8)
+ zod: 3.25.76
+ zod-to-json-schema: 3.24.5(zod@3.25.76)
transitivePeerDependencies:
- '@types/node'
- supports-color
@@ -37695,11 +37365,6 @@ snapshots:
dependencies:
minipass: 3.3.6
- sswr@2.1.0(svelte@4.2.19):
- dependencies:
- svelte: 4.2.19
- swrev: 4.0.0
-
stack-generator@2.0.10:
dependencies:
stackframe: 1.3.4
@@ -38018,23 +37683,6 @@ snapshots:
supports-preserve-symlinks-flag@1.0.0: {}
- svelte@4.2.19:
- dependencies:
- '@ampproject/remapping': 2.3.0
- '@jridgewell/sourcemap-codec': 1.5.0
- '@jridgewell/trace-mapping': 0.3.25
- '@types/estree': 1.0.5
- acorn: 8.14.1
- aria-query: 5.3.2
- axobject-query: 4.1.0
- code-red: 1.0.4
- css-tree: 2.3.1
- estree-walker: 3.0.3
- is-reference: 3.0.3
- locate-character: 3.0.0
- magic-string: 0.30.17
- periscopic: 3.1.0
-
svgson@5.3.1:
dependencies:
deep-rename-keys: 0.2.1
@@ -38068,12 +37716,6 @@ snapshots:
react: 18.3.1
use-sync-external-store: 1.5.0(react@18.3.1)
- swrev@4.0.0: {}
-
- swrv@1.0.4(vue@3.5.13(typescript@5.5.2)):
- dependencies:
- vue: 3.5.13(typescript@5.5.2)
-
symbol-tree@3.2.4:
optional: true
@@ -39190,7 +38832,7 @@ snapshots:
unenv: 1.10.0
unstorage: 1.15.0(aws4fetch@1.0.20)(db0@0.3.1(@electric-sql/pglite@0.2.15)(drizzle-orm@0.36.1(@electric-sql/pglite@0.2.15)(@opentelemetry/api@1.9.0)(@types/pg@8.11.11)(@types/react@18.3.3)(pg@8.13.1)(react@18.3.1)))(ioredis@5.6.0(supports-color@8.1.1))
vite: 6.3.5(@types/node@22.13.14)(jiti@2.4.2)(sass@1.77.4)(terser@5.39.0)(tsx@4.19.3)(yaml@2.4.5)
- zod: 3.23.8
+ zod: 3.25.76
transitivePeerDependencies:
- '@azure/app-configuration'
- '@azure/cosmos'
@@ -39385,16 +39027,6 @@ snapshots:
vscode-languageserver-types@3.17.5: {}
- vue@3.5.13(typescript@5.5.2):
- dependencies:
- '@vue/compiler-dom': 3.5.13
- '@vue/compiler-sfc': 3.5.13
- '@vue/runtime-dom': 3.5.13
- '@vue/server-renderer': 3.5.13(vue@3.5.13(typescript@5.5.2))
- '@vue/shared': 3.5.13
- optionalDependencies:
- typescript: 5.5.2
-
w3c-keyname@2.2.8: {}
w3c-xmlserializer@4.0.0:
@@ -39776,21 +39408,11 @@ snapshots:
compress-commons: 6.0.2
readable-stream: 4.6.0
- zod-to-json-schema@3.23.5(zod@3.23.8):
- dependencies:
- zod: 3.23.8
-
- zod-to-json-schema@3.24.5(zod@3.23.8):
+ zod-to-json-schema@3.24.5(zod@3.25.76):
dependencies:
- zod: 3.23.8
-
- zod-to-json-schema@3.24.5(zod@3.24.2):
- dependencies:
- zod: 3.24.2
-
- zod@3.23.8: {}
+ zod: 3.25.76
- zod@3.24.2: {}
+ zod@3.25.76: {}
zustand@4.4.7(@types/react@18.3.3)(immer@10.1.1)(react@18.3.1):
dependencies: