diff --git a/apps/backend/src/api/api.module.ts b/apps/backend/src/api/api.module.ts index a56b8fd9..586dcd2f 100644 --- a/apps/backend/src/api/api.module.ts +++ b/apps/backend/src/api/api.module.ts @@ -31,8 +31,6 @@ import { Nowpayments } from '@gitroom/nestjs-libraries/crypto/nowpayments'; import { WebhookController } from '@gitroom/backend/api/routes/webhooks.controller'; import { SignatureController } from '@gitroom/backend/api/routes/signature.controller'; import { AutopostController } from '@gitroom/backend/api/routes/autopost.controller'; -import { McpService } from '@gitroom/nestjs-libraries/mcp/mcp.service'; -import { McpController } from '@gitroom/backend/api/routes/mcp.controller'; import { SetsController } from '@gitroom/backend/api/routes/sets.controller'; import { ThirdPartyController } from '@gitroom/backend/api/routes/third-party.controller'; import { MonitorController } from '@gitroom/backend/api/routes/monitor.controller'; @@ -63,7 +61,6 @@ const authenticatedController = [ StripeController, AuthController, PublicController, - McpController, MonitorController, ...authenticatedController, ], @@ -80,7 +77,6 @@ const authenticatedController = [ TrackService, ShortLinkService, Nowpayments, - McpService, ], get exports() { return [...this.imports, ...this.providers]; diff --git a/apps/backend/src/api/routes/copilot.controller.ts b/apps/backend/src/api/routes/copilot.controller.ts index 5e23e6fd..6654a405 100644 --- a/apps/backend/src/api/routes/copilot.controller.ts +++ b/apps/backend/src/api/routes/copilot.controller.ts @@ -1,22 +1,33 @@ -import { Logger, Controller, Get, Post, Req, Res, Query } from '@nestjs/common'; +import { + Logger, + Controller, + Get, + Post, + Req, + Res, + Query, + Param, +} from '@nestjs/common'; import { CopilotRuntime, OpenAIAdapter, copilotRuntimeNodeHttpEndpoint, + copilotRuntimeNextJSAppRouterEndpoint, } from '@copilotkit/runtime'; import { GetOrgFromRequest } from '@gitroom/nestjs-libraries/user/org.from.request'; import { Organization } from '@prisma/client'; import { SubscriptionService } from '@gitroom/nestjs-libraries/database/prisma/subscriptions/subscription.service'; import { MastraAgent } from '@ag-ui/mastra'; import { MastraService } from '@gitroom/nestjs-libraries/chat/mastra.service'; -import { Mastra } from '@mastra/core/dist/mastra'; import { Request, Response } from 'express'; import { RuntimeContext } from '@mastra/core/di'; -let mastra: Mastra; +import { CheckPolicies } from '@gitroom/backend/services/auth/permissions/permissions.ability'; +import { AuthorizationActions, Sections } from '@gitroom/backend/services/auth/permissions/permission.exception.class'; export type ChannelsContext = { integrations: string; organization: string; + ui: string; }; @Controller('/copilot') @@ -47,6 +58,7 @@ export class CopilotController { } @Post('/agent') + @CheckPolicies([AuthorizationActions.Create, Sections.AI]) async agent( @Req() req: Request, @Res() res: Response, @@ -59,33 +71,37 @@ export class CopilotController { Logger.warn('OpenAI API key not set, chat functionality will not work'); return; } - mastra = mastra || (await this._mastraService.mastra()); + const mastra = await this._mastraService.mastra(); const runtimeContext = new RuntimeContext(); runtimeContext.set( 'integrations', req?.body?.variables?.properties?.integrations || [] ); - runtimeContext.set('organization', organization.id); + runtimeContext.set('organization', JSON.stringify(organization)); + runtimeContext.set('ui', 'true'); - const runtime = new CopilotRuntime({ - agents: MastraAgent.getLocalAgents({ - mastra, - // @ts-ignore - runtimeContext, - }), + const agents = MastraAgent.getLocalAgents({ + resourceId: organization.id, + mastra, + // @ts-ignore + runtimeContext, }); - const copilotRuntimeHandler = copilotRuntimeNodeHttpEndpoint({ + const runtime = new CopilotRuntime({ + agents, + }); + + const copilotRuntimeHandler = copilotRuntimeNextJSAppRouterEndpoint({ endpoint: '/copilot/agent', runtime, - properties: req.body.variables.properties, + // properties: req.body.variables.properties, serviceAdapter: new OpenAIAdapter({ model: 'gpt-4.1', }), }); - return copilotRuntimeHandler(req, res); + return copilotRuntimeHandler.handleRequest(req, res); } @Get('/credits') @@ -98,4 +114,44 @@ export class CopilotController { type || 'ai_images' ); } + + @Get('/:thread/list') + @CheckPolicies([AuthorizationActions.Create, Sections.AI]) + async getMessagesList( + @GetOrgFromRequest() organization: Organization, + @Param('thread') threadId: string + ): Promise { + const mastra = await this._mastraService.mastra(); + const memory = await mastra.getAgent('postiz').getMemory(); + try { + return await memory.query({ + resourceId: organization.id, + threadId, + }); + } catch (err) { + return { messages: [] }; + } + } + + @Get('/list') + @CheckPolicies([AuthorizationActions.Create, Sections.AI]) + async getList(@GetOrgFromRequest() organization: Organization) { + const mastra = await this._mastraService.mastra(); + // @ts-ignore + const memory = await mastra.getAgent('postiz').getMemory(); + const list = await memory.getThreadsByResourceIdPaginated({ + resourceId: organization.id, + perPage: 100000, + page: 0, + orderBy: 'createdAt', + sortDirection: 'DESC', + }); + + return { + threads: list.threads.map((p) => ({ + id: p.id, + title: p.title, + })), + }; + } } diff --git a/apps/backend/src/api/routes/integrations.controller.ts b/apps/backend/src/api/routes/integrations.controller.ts index 7ae2136d..c4b1ff50 100644 --- a/apps/backend/src/api/routes/integrations.controller.ts +++ b/apps/backend/src/api/routes/integrations.controller.ts @@ -16,7 +16,6 @@ import { IntegrationManager } from '@gitroom/nestjs-libraries/integrations/integ import { IntegrationService } from '@gitroom/nestjs-libraries/database/prisma/integrations/integration.service'; import { GetOrgFromRequest } from '@gitroom/nestjs-libraries/user/org.from.request'; import { Organization, User } from '@prisma/client'; -import { ApiKeyDto } from '@gitroom/nestjs-libraries/dtos/integrations/api.key.dto'; import { IntegrationFunctionDto } from '@gitroom/nestjs-libraries/dtos/integrations/integration.function.dto'; import { CheckPolicies } from '@gitroom/backend/services/auth/permissions/permissions.ability'; import { pricing } from '@gitroom/nestjs-libraries/database/prisma/subscriptions/pricing'; diff --git a/apps/backend/src/api/routes/mcp.controller.ts b/apps/backend/src/api/routes/mcp.controller.ts deleted file mode 100644 index 6e466b11..00000000 --- a/apps/backend/src/api/routes/mcp.controller.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { - Body, - Controller, - HttpException, - Param, - Post, - Sse, -} from '@nestjs/common'; -import { ApiTags } from '@nestjs/swagger'; -import { McpService } from '@gitroom/nestjs-libraries/mcp/mcp.service'; -import { OrganizationService } from '@gitroom/nestjs-libraries/database/prisma/organizations/organization.service'; - -@ApiTags('Mcp') -@Controller('/mcp') -export class McpController { - constructor( - private _mcpService: McpService, - private _organizationService: OrganizationService - ) {} - - @Sse('/:api/sse') - async sse(@Param('api') api: string) { - const apiModel = await this._organizationService.getOrgByApiKey(api); - if (!apiModel) { - throw new HttpException('Invalid url', 400); - } - - return await this._mcpService.runServer(api, apiModel.id); - } - - @Post('/:api/messages') - async post(@Param('api') api: string, @Body() body: any) { - const apiModel = await this._organizationService.getOrgByApiKey(api); - if (!apiModel) { - throw new HttpException('Invalid url', 400); - } - - return this._mcpService.processPostBody(apiModel.id, body); - } -} diff --git a/apps/backend/src/app.module.ts b/apps/backend/src/app.module.ts index b1066fce..fb6d7bd4 100644 --- a/apps/backend/src/app.module.ts +++ b/apps/backend/src/app.module.ts @@ -8,7 +8,6 @@ import { PublicApiModule } from '@gitroom/backend/public-api/public.api.module'; import { ThrottlerBehindProxyGuard } from '@gitroom/nestjs-libraries/throttler/throttler.provider'; import { ThrottlerModule } from '@nestjs/throttler'; import { AgentModule } from '@gitroom/nestjs-libraries/agent/agent.module'; -import { McpModule } from '@gitroom/backend/mcp/mcp.module'; import { ThirdPartyModule } from '@gitroom/nestjs-libraries/3rdparties/thirdparty.module'; import { VideoModule } from '@gitroom/nestjs-libraries/videos/video.module'; import { SentryModule } from '@sentry/nestjs/setup'; @@ -24,7 +23,6 @@ import { ChatModule } from '@gitroom/nestjs-libraries/chat/chat.module'; ApiModule, PublicApiModule, AgentModule, - McpModule, ThirdPartyModule, VideoModule, ChatModule, @@ -53,7 +51,6 @@ import { ChatModule } from '@gitroom/nestjs-libraries/chat/chat.module'; ApiModule, PublicApiModule, AgentModule, - McpModule, ThrottlerModule, ChatModule, ], diff --git a/apps/backend/src/main.ts b/apps/backend/src/main.ts index 6b2a9acd..776ef144 100644 --- a/apps/backend/src/main.ts +++ b/apps/backend/src/main.ts @@ -1,4 +1,5 @@ import { loadSwagger } from '@gitroom/helpers/swagger/load.swagger'; +import { json } from 'express'; process.env.TZ = 'UTC'; @@ -13,12 +14,14 @@ initializeSentry('backend', true); import { SubscriptionExceptionFilter } from '@gitroom/backend/services/auth/permissions/subscription.exception'; import { HttpExceptionFilter } from '@gitroom/nestjs-libraries/services/exception.filter'; import { ConfigurationChecker } from '@gitroom/helpers/configuration/configuration.checker'; +import { startMcp } from '@gitroom/nestjs-libraries/chat/start.mcp'; async function bootstrap() { const app = await NestFactory.create(AppModule, { rawBody: true, cors: { ...(!process.env.NOT_SECURED ? { credentials: true } : {}), + allowedHeaders: ['Content-Type', 'Authorization'], exposedHeaders: [ 'reload', 'onboarding', @@ -27,17 +30,24 @@ async function bootstrap() { ], origin: [ process.env.FRONTEND_URL, + 'http://localhost:6274', ...(process.env.MAIN_URL ? [process.env.MAIN_URL] : []), ], }, }); + await startMcp(app); + app.useGlobalPipes( new ValidationPipe({ transform: true, }) ); + app.use('/copilot', (req: any, res: any, next: any) => { + json({ limit: '50mb' })(req, res, next); + }); + app.use(cookieParser()); app.useGlobalFilters(new SubscriptionExceptionFilter()); app.useGlobalFilters(new HttpExceptionFilter()); diff --git a/apps/backend/src/mcp/main.mcp.ts b/apps/backend/src/mcp/main.mcp.ts deleted file mode 100644 index 83a05ade..00000000 --- a/apps/backend/src/mcp/main.mcp.ts +++ /dev/null @@ -1,113 +0,0 @@ -import { Injectable } from '@nestjs/common'; -import { McpTool } from '@gitroom/nestjs-libraries/mcp/mcp.tool'; -import { IntegrationService } from '@gitroom/nestjs-libraries/database/prisma/integrations/integration.service'; -import { string, array, enum as eenum, object, boolean } from 'zod'; -import { PostsService } from '@gitroom/nestjs-libraries/database/prisma/posts/posts.service'; -import { makeId } from '@gitroom/nestjs-libraries/services/make.is'; -import dayjs from 'dayjs'; -import { OpenaiService } from '@gitroom/nestjs-libraries/openai/openai.service'; - -@Injectable() -export class MainMcp { - constructor( - private _integrationService: IntegrationService, - private _postsService: PostsService, - private _openAiService: OpenaiService - ) {} - - @McpTool({ toolName: 'POSTIZ_GET_CONFIG_ID' }) - async preRun() { - return [ - { - type: 'text', - text: `id: ${makeId(10)} Today date is ${dayjs.utc().format()}`, - }, - ]; - } - - @McpTool({ toolName: 'POSTIZ_PROVIDERS_LIST' }) - async listOfProviders(organization: string) { - const list = ( - await this._integrationService.getIntegrationsList(organization) - ).map((org) => ({ - id: org.id, - name: org.name, - identifier: org.providerIdentifier, - picture: org.picture, - disabled: org.disabled, - profile: org.profile, - customer: org.customer - ? { - id: org.customer.id, - name: org.customer.name, - } - : undefined, - })); - - return [{ type: 'text', text: JSON.stringify(list) }]; - } - - @McpTool({ - toolName: 'POSTIZ_SCHEDULE_POST', - zod: { - type: eenum(['draft', 'schedule']), - configId: string(), - generatePictures: boolean(), - date: string().describe('UTC TIME'), - providerId: string().describe('Use POSTIZ_PROVIDERS_LIST to get the id'), - posts: array(object({ text: string(), images: array(string()) })), - }, - }) - async schedulePost( - organization: string, - obj: { - type: 'draft' | 'schedule'; - generatePictures: boolean; - date: string; - providerId: string; - posts: { text: string }[]; - } - ) { - const create = await this._postsService.createPost(organization, { - date: obj.date, - type: obj.type, - tags: [], - shortLink: false, - posts: [ - { - group: makeId(10), - value: await Promise.all( - obj.posts.map(async (post) => ({ - content: post.text, - id: makeId(10), - image: !obj.generatePictures - ? [] - : [ - { - id: makeId(10), - path: await this._openAiService.generateImage( - post.text, - true - ), - }, - ], - })) - ), - settings: { - __type: 'any' as any, - }, - integration: { - id: obj.providerId, - }, - }, - ], - }); - - return [ - { - type: 'text', - text: `Post created successfully, check it here: ${process.env.FRONTEND_URL}/p/${create[0].postId}`, - }, - ]; - } -} diff --git a/apps/backend/src/mcp/mcp.module.ts b/apps/backend/src/mcp/mcp.module.ts deleted file mode 100644 index 81c16e8f..00000000 --- a/apps/backend/src/mcp/mcp.module.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { Global, Module } from '@nestjs/common'; -import { MainMcp } from '@gitroom/backend/mcp/main.mcp'; - -@Global() -@Module({ - imports: [], - controllers: [], - providers: [MainMcp], - get exports() { - return [...this.providers]; - }, -}) -export class McpModule {} diff --git a/apps/frontend/src/app/(app)/(site)/agents/[id]/page.tsx b/apps/frontend/src/app/(app)/(site)/agents/[id]/page.tsx new file mode 100644 index 00000000..dad5a9dc --- /dev/null +++ b/apps/frontend/src/app/(app)/(site)/agents/[id]/page.tsx @@ -0,0 +1,12 @@ +import { Metadata } from 'next'; +import { Agent } from '@gitroom/frontend/components/agents/agent'; +import { AgentChat } from '@gitroom/frontend/components/agents/agent.chat'; +export const metadata: Metadata = { + title: 'Postiz - Agent', + description: '', +}; +export default async function Page() { + return ( + + ); +} diff --git a/apps/frontend/src/app/(app)/(site)/agents/layout.tsx b/apps/frontend/src/app/(app)/(site)/agents/layout.tsx new file mode 100644 index 00000000..cc3dac8f --- /dev/null +++ b/apps/frontend/src/app/(app)/(site)/agents/layout.tsx @@ -0,0 +1,13 @@ +import { Metadata } from 'next'; +import { Agent } from '@gitroom/frontend/components/agents/agent'; +export const metadata: Metadata = { + title: 'Postiz - Agent', + description: '', +}; +export default async function Layout({ + children, +}: { + children: React.ReactNode; +}) { + return {children}; +} diff --git a/apps/frontend/src/app/(app)/(site)/agents/page.tsx b/apps/frontend/src/app/(app)/(site)/agents/page.tsx index ac278b81..bc1005ea 100644 --- a/apps/frontend/src/app/(app)/(site)/agents/page.tsx +++ b/apps/frontend/src/app/(app)/(site)/agents/page.tsx @@ -1,11 +1,11 @@ import { Metadata } from 'next'; -import { Agent } from '@gitroom/frontend/components/agents/agent'; +import { redirect } from 'next/navigation'; + export const metadata: Metadata = { - title: 'Agent', + title: 'Postiz - Agent', description: '', }; + export default async function Page() { - return ( - - ); + return redirect('/agents/new'); } diff --git a/apps/frontend/src/app/global.scss b/apps/frontend/src/app/global.scss index acde904a..75993ff0 100644 --- a/apps/frontend/src/app/global.scss +++ b/apps/frontend/src/app/global.scss @@ -699,4 +699,8 @@ html[dir='rtl'] [dir='ltr'] { .copilotKitMessage img { width: 200px; +} + +.copilotKitMessage a { + color: var(--new-btn-text) !important; } \ No newline at end of file diff --git a/apps/frontend/src/components/agents/agent.chat.tsx b/apps/frontend/src/components/agents/agent.chat.tsx new file mode 100644 index 00000000..2f8aa0a6 --- /dev/null +++ b/apps/frontend/src/components/agents/agent.chat.tsx @@ -0,0 +1,359 @@ +'use client'; + +import React, { + FC, + useCallback, + useContext, + useEffect, + useMemo, + useState, +} from 'react'; +import { CopilotChat, CopilotKitCSSProperties } from '@copilotkit/react-ui'; +import { + InputProps, + UserMessageProps, +} from '@copilotkit/react-ui/dist/components/chat/props'; +import { Input } from '@gitroom/frontend/components/agents/agent.input'; +import { useModals } from '@gitroom/frontend/components/layout/new-modal'; +import { + CopilotKit, + useCopilotAction, + useCopilotMessagesContext, +} from '@copilotkit/react-core'; +import { + MediaPortal, + PropertiesContext, +} from '@gitroom/frontend/components/agents/agent'; +import { useVariables } from '@gitroom/react/helpers/variable.context'; +import { useParams } from 'next/navigation'; +import { useFetch } from '@gitroom/helpers/utils/custom.fetch'; +import { TextMessage } from '@copilotkit/runtime-client-gql'; +import { AddEditModal } from '@gitroom/frontend/components/new-launch/add.edit.modal'; +import dayjs from 'dayjs'; +import { makeId } from '@gitroom/nestjs-libraries/services/make.is'; +import { ExistingDataContextProvider } from '@gitroom/frontend/components/launches/helpers/use.existing.data'; + +export const AgentChat: FC = () => { + const { backendUrl } = useVariables(); + const params = useParams<{ id: string }>(); + const { properties } = useContext(PropertiesContext); + + return ( + + + +
+
+ > Public API +`, + }} + UserMessage={Message} + Input={NewInput} + /> +
+
+
+ ); +}; + +const LoadMessages: FC<{ id: string }> = ({ id }) => { + const { setMessages } = useCopilotMessagesContext(); + const fetch = useFetch(); + + const loadMessages = useCallback(async (idToSet: string) => { + const data = await (await fetch(`/copilot/${idToSet}/list`)).json(); + setMessages( + data.uiMessages.map((p: any) => { + return new TextMessage({ + content: p.content, + role: p.role, + }); + }) + ); + }, []); + + useEffect(() => { + if (id === 'new') { + setMessages([]); + return; + } + loadMessages(id); + }, [id]); + + return null; +}; + +const Message: FC = (props) => { + const convertContentToImagesAndVideo = useMemo(() => { + return (props.message?.content || '') + .replace(/Video: (http.*mp4\n)/g, (match, p1) => { + return ``; + }) + .replace(/Image: (http.*\n)/g, (match, p1) => { + return ``; + }) + .replace(/\[\-\-Media\-\-\](.*)\[\-\-Media\-\-\]/g, (match, p1) => { + return `
${p1}
`; + }) + .replace( + /(\[--integrations--\][\s\S]*?\[--integrations--\])/g, + (match, p1) => { + return ``; + } + ); + }, [props.message?.content]); + return ( +
+ ); +}; +const NewInput: FC = (props) => { + const [media, setMedia] = useState([] as { path: string; id: string }[]); + const [value, setValue] = useState(''); + const { properties } = useContext(PropertiesContext); + return ( + <> + setMedia(e.target.value)} + /> + { + const send = props.onSend( + text + + (media.length > 0 + ? '\n[--Media--]' + + media + .map((m) => + m.path.indexOf('mp4') > -1 + ? `Video: ${m.path}` + : `Image: ${m.path}` + ) + .join('\n') + + '\n[--Media--]' + : '') + + ` +${ + properties.length + ? `[--integrations--] +Use the following social media platforms: ${JSON.stringify( + properties.map((p) => ({ + id: p.id, + platform: p.identifier, + profilePicture: p.picture, + additionalSettings: p.additionalSettings, + })) + )} +[--integrations--]` + : `` +}` + ); + setValue(''); + setMedia([]); + return send; + }} + /> + + ); +}; + +export const Hooks: FC = () => { + const modals = useModals(); + + useCopilotAction({ + name: 'manualPosting', + description: + 'This tool should be triggered when the user wants to manually add the generated post', + parameters: [ + { + name: 'list', + type: 'object[]', + description: + 'list of posts to schedule to different social media (integration ids)', + attributes: [ + { + name: 'integrationId', + type: 'string', + description: 'The integration id', + }, + { + name: 'date', + type: 'string', + description: 'UTC date of the scheduled post', + }, + { + name: 'settings', + type: 'object', + description: 'Settings for the integration [input:settings]', + }, + { + name: 'posts', + type: 'object[]', + description: 'list of posts / comments (one under another)', + attributes: [ + { + name: 'content', + type: 'string', + description: 'the content of the post', + }, + { + name: 'attachments', + type: 'object[]', + description: 'list of attachments', + attributes: [ + { + name: 'id', + type: 'string', + description: 'id of the attachment', + }, + { + name: 'path', + type: 'string', + description: 'url of the attachment', + }, + ], + }, + ], + }, + ], + }, + ], + renderAndWaitForResponse: ({ args, status, respond }) => { + if (status === 'executing') { + return ; + } + + return null; + }, + }); + return null; +}; + +const OpenModal: FC<{ + respond: (value: any) => void; + args: { + list: { + integrationId: string; + date: string; + settings?: Record; + posts: { content: string; attachments: { id: string; path: string }[] }[]; + }[]; + }; +}> = ({ args, respond }) => { + const modals = useModals(); + const { properties } = useContext(PropertiesContext); + const startModal = useCallback(async () => { + for (const integration of args.list) { + await new Promise((res) => { + const group = makeId(10); + modals.openModal({ + id: 'add-edit-modal', + closeOnClickOutside: false, + removeLayout: true, + closeOnEscape: false, + withCloseButton: false, + askClose: true, + size: '80%', + title: ``, + classNames: { + modal: 'w-[100%] max-w-[1400px] text-textColor', + }, + children: ( + p.id === integration.integrationId) + .picture || '', + settings: integration.settings || {}, + posts: integration.posts.map((p) => ({ + approvedSubmitForOrder: 'NO', + content: p.content, + createdAt: new Date().toISOString(), + state: 'DRAFT', + id: makeId(10), + settings: JSON.stringify(integration.settings || {}), + group, + integrationId: integration.integrationId, + integration: properties.find( + (p) => p.id === integration.integrationId + ), + publishDate: dayjs.utc(integration.date).toISOString(), + image: p.attachments.map((a) => ({ + id: a.id, + path: a.path, + })), + })), + }} + > + p.id === integration.integrationId + )} + onlyValues={integration.posts.map((p) => ({ + content: p.content, + id: makeId(10), + settings: integration.settings || {}, + image: p.attachments.map((a) => ({ + id: a.id, + path: a.path, + })), + }))} + reopenModal={() => {}} + mutate={() => res(true)} + /> + + ), + }); + }); + } + + respond('User scheduled all the posts'); + }, [args, respond, properties]); + + useEffect(() => { + startModal(); + }, []); + return ( +
respond('continue')}> + Opening manually ${JSON.stringify(args)} +
+ ); +}; diff --git a/apps/frontend/src/components/agents/agent.tsx b/apps/frontend/src/components/agents/agent.tsx index e4266c9a..54da0f08 100644 --- a/apps/frontend/src/components/agents/agent.tsx +++ b/apps/frontend/src/components/agents/agent.tsx @@ -6,11 +6,8 @@ import React, { useCallback, useMemo, useState, - useContext, + ReactNode, } from 'react'; -import { useVariables } from '@gitroom/react/helpers/variable.context'; -import { CopilotKit } from '@copilotkit/react-core'; -import { CopilotChat, CopilotKitCSSProperties } from '@copilotkit/react-ui'; import clsx from 'clsx'; import useCookie from 'react-use-cookie'; import useSWR from 'swr'; @@ -21,12 +18,9 @@ import Image from 'next/image'; import { useFetch } from '@gitroom/helpers/utils/custom.fetch'; import { useWaitForClass } from '@gitroom/helpers/utils/use.wait.for.class'; import { MultiMediaComponent } from '@gitroom/frontend/components/media/media.component'; -import { - InputProps, - UserMessageProps, -} from '@copilotkit/react-ui/dist/components/chat/props'; -import { Input } from '@gitroom/frontend/components/agents/agent.input'; import { Integration } from '@prisma/client'; +import Link from 'next/link'; +import { useParams, usePathname, useRouter } from 'next/navigation'; export const MediaPortal: FC<{ media: { path: string; id: string }[]; @@ -115,29 +109,6 @@ export const AgentList: FC<{ onChange: (arr: any[]) => void }> = ({ )} >
-
- -

Select Channels @@ -222,121 +193,79 @@ export const AgentList: FC<{ onChange: (arr: any[]) => void }> = ({ ); }; -const PropertiesContext = createContext({ properties: [] }); -export const Agent: FC = () => { - const { backendUrl } = useVariables(); +export const PropertiesContext = createContext({ properties: [] }); +export const Agent: FC<{ children: ReactNode }> = ({ children }) => { const [properties, setProperties] = useState([]); return ( - - -
-
- -
-
-
+ +
{children}
+
); }; -const Message: FC = (props) => { - const convertContentToImagesAndVideo = useMemo(() => { - return (props.message?.content || '') - .replace(/Video: (http.*mp4\n)/g, (match, p1) => { - return ``; - }) - .replace(/Image: (http.*\n)/g, (match, p1) => { - return ``; - }) - .replace(/\[\-\-Media\-\-\](.*)\[\-\-Media\-\-\]/g, (match, p1) => { - return `
${p1}
`; - }) - .replace( - /(\[--integrations--\][\s\S]*?\[--integrations--\])/g, - (match, p1) => { - return ``; - } - ); - }, [props.message?.content]); +const Threads: FC = () => { + const fetch = useFetch(); + const router = useRouter(); + const pathname = usePathname(); + const threads = useCallback(async () => { + return (await fetch('/copilot/list')).json(); + }, []); + const { id } = useParams<{ id: string }>(); + + const { data } = useSWR('threads', threads); + return (
- ); -}; -const NewInput: FC = (props) => { - const [media, setMedia] = useState([] as { path: string; id: string }[]); - const [value, setValue] = useState(''); - const { properties } = useContext(PropertiesContext); - return ( - <> - setMedia(e.target.value)} - /> - { - const send = props.onSend( - text + - (media.length > 0 - ? '\n[--Media--]' + - media - .map((m) => - m.path.indexOf('mp4') > -1 - ? `Video: ${m.path}` - : `Image: ${m.path}` - ) - .join('\n') + - '\n[--Media--]' - : '') + - ` -[--integrations--] -Use the following social media platforms: ${JSON.stringify( - properties.map((p) => ({ - id: p.id, - platform: p.identifier, - profilePicture: p.picture, - additionalSettings: p.additionalSettings, - })) + className={clsx( + 'trz bg-newBgColorInner flex flex-col gap-[15px] transition-all relative', + 'w-[260px]' + )} + > +
+
+ + + + +
+ Start a new chat +
+ +
+
+ {data?.threads?.map((p: any) => ( + - + href={`/agents/${p.id}`} + key={p.id} + > + {p.title} + + ))} +
+
+
); }; diff --git a/apps/frontend/src/components/layout/top.menu.tsx b/apps/frontend/src/components/layout/top.menu.tsx index 29799494..ed7a454a 100644 --- a/apps/frontend/src/components/layout/top.menu.tsx +++ b/apps/frontend/src/components/layout/top.menu.tsx @@ -20,24 +20,6 @@ export const useMenuItem = () => { const t = useT(); const firstMenu = [ - { - name: 'Agent', - icon: ( - - - - ), - path: '/agents', - }, { name: isGeneral ? t('calendar', 'Calendar') : t('launches', 'Launches'), icon: ( @@ -59,6 +41,24 @@ export const useMenuItem = () => { ), path: '/launches', }, + { + name: 'Agent', + icon: ( + + + + ), + path: '/agents', + }, { name: t('analytics', 'Analytics'), icon: ( @@ -146,39 +146,6 @@ export const useMenuItem = () => { ] satisfies MenuItemInterface[] as MenuItemInterface[]; const secondMenu = [ - // { - // name: 'GrowChief', - // icon: ( - // - // - // - // - // - // ), - // path: 'https://growchief.com', - // role: ['ADMIN', 'SUPERADMIN', 'USER'], - // requireBilling: true, - // }, { name: t('affiliate', 'Affiliate'), icon: ( diff --git a/apps/frontend/src/components/new-layout/menu-item.tsx b/apps/frontend/src/components/new-layout/menu-item.tsx index 094120bc..9c860b7c 100644 --- a/apps/frontend/src/components/new-layout/menu-item.tsx +++ b/apps/frontend/src/components/new-layout/menu-item.tsx @@ -10,7 +10,7 @@ export const MenuItem: FC<{ label: string; icon: ReactNode; path: string }> = ({ path, }) => { const currentPath = usePathname(); - const isActive = path.indexOf(currentPath) === 0; + const isActive = currentPath.indexOf(path) === 0; return ( {
{t( 'connect_your_mcp_client_to_postiz_to_schedule_your_posts_faster', - 'Connect your MCP client to Postiz to schedule your posts faster!' + 'Connect Postiz MCP server to your client (Http streaming) to schedule your posts faster.' )}
{reveal2 ? ( - `${backendUrl}/mcp/` + user.publicApi + '/sse' + `${backendUrl}/mcp/` + user.publicApi ) : ( <>
- {(`${backendUrl}/mcp/` + user.publicApi + '/sse').slice(0, -5)} + {(`${backendUrl}/mcp/` + user.publicApi).slice(0, -5)}
- {(`${backendUrl}/mcp/` + user.publicApi + '/sse').slice(-5)} + {(`${backendUrl}/mcp/` + user.publicApi).slice(-5)}
)} diff --git a/i18n.lock b/i18n.lock index ceccc2ab..6cdfe6a1 100644 --- a/i18n.lock +++ b/i18n.lock @@ -17,6 +17,7 @@ checksums: video_made_with_ai: c37747aaf8107d339d6238a0463f7096 please_add_at_least: 90d3c0237b56e57c7a58d5decf6e9d3c send_invitation_via_email: 9275e0b85147a931421b3bf6c3083cb4 + global_settings: ba55734261d6bc26e792fda32de3e7ec copy_id: 831147124db35832872f8470c577e440 team_members: 61333c4a765e10b2ad46774951725233 invite_your_assistant_or_team_member_to_manage_your_account: dadd50655759ac32b9ed62e60f8acb1d @@ -45,7 +46,7 @@ checksums: reveal: 3f7302cc2e097266e447b3e18f1b9ab7 copy_key: 8f4f13acec7abf7c3aa6e680b6da99f8 mcp: 62c2c8e6703c9e5224e98294a53e1884 - connect_your_mcp_client_to_postiz_to_schedule_your_posts_faster: 55b92dd743d32bfe04b69c6ec9406e1f + connect_your_mcp_client_to_postiz_to_schedule_your_posts_faster: bb53d1093a6ab977f2eee0bbc7e0248c share_with_a_client: 8e27f69c841a9dda635f34fb1b38ad99 post: 0beafa0cd18d45690b9b07104eb2c1b8 comments: 502237cd1044491c48494aa60967a985 diff --git a/libraries/nestjs-libraries/src/chat/agent.tool.interface.ts b/libraries/nestjs-libraries/src/chat/agent.tool.interface.ts index 49061607..daf9b315 100644 --- a/libraries/nestjs-libraries/src/chat/agent.tool.interface.ts +++ b/libraries/nestjs-libraries/src/chat/agent.tool.interface.ts @@ -1,4 +1,18 @@ +import type { ZodLikeSchema } from '@mastra/core/dist/types/zod-compat'; +import type { + ToolExecutionContext, +} from '@mastra/core/dist/tools/types'; +import { Tool } from '@mastra/core/dist/tools/tool'; + +export type ToolReturn = Tool< + ZodLikeSchema, + ZodLikeSchema, + ZodLikeSchema, + ZodLikeSchema, + ToolExecutionContext +>; + export interface AgentToolInterface { name: string; - run(): Promise; -} \ No newline at end of file + run(): ToolReturn; +} diff --git a/libraries/nestjs-libraries/src/chat/async.storage.ts b/libraries/nestjs-libraries/src/chat/async.storage.ts new file mode 100644 index 00000000..fff383ff --- /dev/null +++ b/libraries/nestjs-libraries/src/chat/async.storage.ts @@ -0,0 +1,25 @@ +// context.ts +import { AsyncLocalStorage } from 'node:async_hooks'; + +type Ctx = { + requestId: string; + auth: any; // replace with your org type if you have it, e.g. Organization +}; + +const als = new AsyncLocalStorage(); + +export function runWithContext(ctx: Ctx, fn: () => Promise | T) { + return als.run(ctx, fn); +} + +export function getContext(): Ctx | undefined { + return als.getStore(); +} + +export function getAuth(): T | undefined { + return als.getStore()?.auth as T | undefined; +} + +export function getRequestId(): string | undefined { + return als.getStore()?.requestId; +} \ No newline at end of file diff --git a/libraries/nestjs-libraries/src/chat/auth.context.ts b/libraries/nestjs-libraries/src/chat/auth.context.ts new file mode 100644 index 00000000..989a2a53 --- /dev/null +++ b/libraries/nestjs-libraries/src/chat/auth.context.ts @@ -0,0 +1,20 @@ +import { ToolAction } from '@mastra/core/dist/tools/types'; +import { getAuth } from '@gitroom/nestjs-libraries/chat/async.storage'; + +export const checkAuth: ToolAction['execute'] = async ( + { runtimeContext }, + options +) => { + const auth = getAuth(); + // @ts-ignore + if (options?.extra?.authInfo || auth) { + runtimeContext.set( + // @ts-ignore + 'organization', + // @ts-ignore + JSON.stringify(options?.extra?.authInfo || auth) + ); + // @ts-ignore + runtimeContext.set('ui', 'false'); + } +}; diff --git a/libraries/nestjs-libraries/src/chat/load.tools.service.ts b/libraries/nestjs-libraries/src/chat/load.tools.service.ts index cc324174..15679f4b 100644 --- a/libraries/nestjs-libraries/src/chat/load.tools.service.ts +++ b/libraries/nestjs-libraries/src/chat/load.tools.service.ts @@ -12,6 +12,11 @@ export const AgentState = object({ proverbs: array(string()).default([]), }); +const renderArray = (list: string[], show: boolean) => { + if (!show) return ''; + return list.map((p) => `- ${p}`).join('\n'); +}; + @Injectable() export class LoadToolsService { constructor(private _moduleRef: ModuleRef) {} @@ -39,7 +44,9 @@ export class LoadToolsService { const tools = await this.loadTools(); return new Agent({ name: 'postiz', - instructions: () => { + description: 'Agent that helps manage and schedule social media posts for users', + instructions: ({ runtimeContext }) => { + const ui: string = runtimeContext.get('ui' as never); return ` Global information: - Date (UTC): ${dayjs().format('YYYY-MM-DD HH:mm:ss')} @@ -47,9 +54,12 @@ export class LoadToolsService { You are an agent that helps manage and schedule social media posts for users, you can: - Schedule posts into the future, or now, adding texts, images and videos - Generate pictures for posts + - Generate videos for posts - Generate text for posts - Show global analytics about socials + - List integrations (channels) + - We schedule posts to different integration like facebook, instagram, etc. but to the user we don't say integrations we say channels as integration is the technical name - When scheduling a post, you must follow the social media rules and best practices. - When scheduling a post, you can pass an array for list of posts for a social media platform, But it has different behavior depending on the platform. - For platforms like Threads, Bluesky and X (Twitter), each post in the array will be a separate post in the thread. @@ -64,9 +74,15 @@ export class LoadToolsService { - In every message I will send you the list of needed social medias (id and platform), if you already have the information use it, if not, use the integrationSchema tool to get it. - Make sure you always take the last information I give you about the socials, it might have changed. - Before scheduling a post, always make sure you ask the user confirmation by providing all the details of the post (text, images, videos, date, time, social media platform, account). - - If the user confirm, ask if they would like to get a modal with populated content without scheduling the post yet or if they want to schedule it right away. - Between tools, we will reference things like: [output:name] and [input:name] to set the information right. - When outputting a date for the user, make sure it's human readable with time + - The content of the post, HTML, Each line must be wrapped in

here is the possible tags: h1, h2, h3, u, strong, li, ul, p (you can\'t have u and strong together), don't use a "code" box + ${renderArray( + [ + 'If the user confirm, ask if they would like to get a modal with populated content without scheduling the post yet or if they want to schedule it right away.', + ], + !!ui + )} `; }, model: openai('gpt-4.1'), @@ -74,6 +90,9 @@ export class LoadToolsService { memory: new Memory({ storage: pStore, options: { + threads: { + generateTitle: true, + }, workingMemory: { enabled: true, schema: AgentState, diff --git a/libraries/nestjs-libraries/src/chat/mastra.service.ts b/libraries/nestjs-libraries/src/chat/mastra.service.ts index 3efa0979..c1011678 100644 --- a/libraries/nestjs-libraries/src/chat/mastra.service.ts +++ b/libraries/nestjs-libraries/src/chat/mastra.service.ts @@ -6,16 +6,21 @@ import { LoadToolsService } from '@gitroom/nestjs-libraries/chat/load.tools.serv @Injectable() export class MastraService { + static mastra: Mastra; constructor(private _loadToolsService: LoadToolsService) {} async mastra() { - return new Mastra({ - storage: pStore, - agents: { - postiz: await this._loadToolsService.agent(), - }, - logger: new ConsoleLogger({ - level: 'info', - }), - }); + MastraService.mastra = + MastraService.mastra || + new Mastra({ + storage: pStore, + agents: { + postiz: await this._loadToolsService.agent(), + }, + logger: new ConsoleLogger({ + level: 'debug', + }), + }); + + return MastraService.mastra; } } diff --git a/libraries/nestjs-libraries/src/chat/start.mcp.ts b/libraries/nestjs-libraries/src/chat/start.mcp.ts new file mode 100644 index 00000000..527f6d22 --- /dev/null +++ b/libraries/nestjs-libraries/src/chat/start.mcp.ts @@ -0,0 +1,65 @@ +import { INestApplication } from '@nestjs/common'; +import { Request, Response } from 'express'; +import { MastraService } from '@gitroom/nestjs-libraries/chat/mastra.service'; +import { MCPServer } from '@mastra/mcp'; +import { randomUUID } from 'crypto'; +import { OrganizationService } from '@gitroom/nestjs-libraries/database/prisma/organizations/organization.service'; +import { runWithContext } from './async.storage'; +export const startMcp = async (app: INestApplication) => { + const mastraService = app.get(MastraService, { strict: false }); + const organizationService = app.get(OrganizationService, { strict: false }); + + const mastra = await mastraService.mastra(); + const agent = mastra.getAgent('postiz'); + const tools = await agent.getTools(); + + const server = new MCPServer({ + name: 'Postiz MCP', + version: '1.0.0', + tools, + agents: { postiz: agent }, + }); + + app.use( + '/mcp/:id', + async (req: Request, res: Response) => { + // @ts-ignore + res.setHeader('Access-Control-Allow-Origin', '*'); + res.setHeader('Access-Control-Allow-Methods', '*'); + res.setHeader('Access-Control-Allow-Headers', '*'); + res.setHeader('Access-Control-Expose-Headers', '*'); + + if (req.method === 'OPTIONS') { + res.sendStatus(200); + return; + } + + // @ts-ignore + req.auth = await organizationService.getOrgByApiKey(req.params.id); + // @ts-ignore + if (!req.auth) { + throw new HttpException('Invalid API Key', 400); + } + + const url = new URL( + `/mcp/${req.params.id}`, + process.env.NEXT_PUBLIC_BACKEND_URL + ); + + // @ts-ignore + await runWithContext({ requestId: req.params.id, auth: req.auth }, async () => { + await server.startHTTP({ + url, + httpPath: url.pathname, + options: { + sessionIdGenerator: () => { + return randomUUID(); + }, + }, + req, + res, + }); + }); + } + ); +}; diff --git a/libraries/nestjs-libraries/src/chat/tools/generate.image.tool.ts b/libraries/nestjs-libraries/src/chat/tools/generate.image.tool.ts new file mode 100644 index 00000000..f475f189 --- /dev/null +++ b/libraries/nestjs-libraries/src/chat/tools/generate.image.tool.ts @@ -0,0 +1,48 @@ +import { AgentToolInterface } from '@gitroom/nestjs-libraries/chat/agent.tool.interface'; +import { createTool } from '@mastra/core/tools'; +import { z } from 'zod'; +import { Injectable } from '@nestjs/common'; +import { MediaService } from '@gitroom/nestjs-libraries/database/prisma/media/media.service'; +import { UploadFactory } from '@gitroom/nestjs-libraries/upload/upload.factory'; +import { checkAuth } from '@gitroom/nestjs-libraries/chat/auth.context'; + +@Injectable() +export class GenerateImageTool implements AgentToolInterface { + private storage = UploadFactory.createStorage(); + + constructor(private _mediaService: MediaService) {} + name = 'generateImageTool'; + + run() { + return createTool({ + id: 'generateImageTool', + description: `Generate image to use in a post, + in case the user specified a platform that requires attachment and attachment was not provided, + ask if they want to generate a picture of a video. + `, + inputSchema: z.object({ + prompt: z.string(), + }), + outputSchema: z.object({ + id: z.string(), + path: z.string(), + }), + execute: async (args, options) => { + const { context, runtimeContext } = args; + checkAuth(args, options); + // @ts-ignore + const org = JSON.parse(runtimeContext.get('organization') as string); + const image = await this._mediaService.generateImage( + context.prompt, + org + ); + + const file = await this.storage.uploadSimple( + 'data:image/png;base64,' + image + ); + + return this._mediaService.saveFile(org.id, file.split('/').pop(), file); + }, + }); + } +} diff --git a/libraries/nestjs-libraries/src/chat/tools/generate.video.options.tool.ts b/libraries/nestjs-libraries/src/chat/tools/generate.video.options.tool.ts new file mode 100644 index 00000000..7879c97c --- /dev/null +++ b/libraries/nestjs-libraries/src/chat/tools/generate.video.options.tool.ts @@ -0,0 +1,66 @@ +import { AgentToolInterface, ToolReturn } from '@gitroom/nestjs-libraries/chat/agent.tool.interface'; +import { createTool } from '@mastra/core/tools'; +import { Injectable } from '@nestjs/common'; +import { validationMetadatasToSchemas } from 'class-validator-jsonschema'; +import { VideoManager } from '@gitroom/nestjs-libraries/videos/video.manager'; +import z from 'zod'; +import { checkAuth } from '@gitroom/nestjs-libraries/chat/auth.context'; + +@Injectable() +export class GenerateVideoOptionsTool implements AgentToolInterface { + constructor(private _videoManagerService: VideoManager) {} + name = 'generateVideoOptions'; + + run() { + return createTool({ + id: 'generateVideoOptions', + description: `All the options to generate videos, some tools might require another call to generateVideoFunction`, + outputSchema: z.object({ + video: z.array( + z.object({ + type: z.string(), + output: z.string(), + tools: z.array( + z.object({ + functionName: z.string(), + output: z.string(), + }) + ), + customParams: z.any(), + }) + ), + }), + execute: async (args, options) => { + const { context, runtimeContext } = args; + checkAuth(args, options); + const videos = this._videoManagerService.getAllVideos(); + console.log( + JSON.stringify( + { + video: videos.map((p) => { + return { + type: p.identifier, + output: 'vertical|horizontal', + tools: p.tools, + customParams: validationMetadatasToSchemas()[p.dto.name], + }; + }), + }, + null, + 2 + ) + ); + return { + video: videos.map((p) => { + return { + type: p.identifier, + output: 'vertical|horizontal', + tools: p.tools, + customParams: validationMetadatasToSchemas()[p.dto.name], + }; + }), + }; + }, + }); + } +} diff --git a/libraries/nestjs-libraries/src/chat/tools/generate.video.tool.ts b/libraries/nestjs-libraries/src/chat/tools/generate.video.tool.ts new file mode 100644 index 00000000..35740a1e --- /dev/null +++ b/libraries/nestjs-libraries/src/chat/tools/generate.video.tool.ts @@ -0,0 +1,75 @@ +import { AgentToolInterface } from '@gitroom/nestjs-libraries/chat/agent.tool.interface'; +import { createTool } from '@mastra/core/tools'; +import { z } from 'zod'; +import { Injectable } from '@nestjs/common'; +import { + IntegrationManager, + socialIntegrationList, +} from '@gitroom/nestjs-libraries/integrations/integration.manager'; +import { validationMetadatasToSchemas } from 'class-validator-jsonschema'; +import { IntegrationService } from '@gitroom/nestjs-libraries/database/prisma/integrations/integration.service'; +import { RefreshToken } from '@gitroom/nestjs-libraries/integrations/social.abstract'; +import { timer } from '@gitroom/helpers/utils/timer'; +import { MediaService } from '@gitroom/nestjs-libraries/database/prisma/media/media.service'; +import { OrganizationService } from '@gitroom/nestjs-libraries/database/prisma/organizations/organization.service'; +import { VideoManager } from '@gitroom/nestjs-libraries/videos/video.manager'; +import { checkAuth } from '@gitroom/nestjs-libraries/chat/auth.context'; + +@Injectable() +export class GenerateVideoTool implements AgentToolInterface { + constructor( + private _mediaService: MediaService, + private _videoManager: VideoManager + ) {} + name = 'generateVideoTool'; + + run() { + return createTool({ + id: 'generateVideoTool', + description: `Generate video to use in a post, + in case the user specified a platform that requires attachment and attachment was not provided, + ask if they want to generate a picture of a video. + In many cases 'videoFunctionTool' will need to be called first, to get things like voice id + Here are the type of video that can be generated: + ${this._videoManager + .getAllVideos() + .map((p) => "-" + p.title) + .join('\n')} + `, + inputSchema: z.object({ + identifier: z.string(), + output: z.enum(['vertical', 'horizontal']), + customParams: z.array( + z.object({ + key: z.string().describe('Name of the settings key to pass'), + value: z.any().describe('Value of the key'), + }) + ), + }), + outputSchema: z.object({ + url: z.string(), + }), + execute: async (args, options) => { + const { context, runtimeContext } = args; + checkAuth(args, options); + // @ts-ignore + const org = JSON.parse(runtimeContext.get('organization') as string); + const value = await this._mediaService.generateVideo(org, { + type: context.identifier, + output: context.output, + customParams: context.customParams.reduce( + (all, current) => ({ + ...all, + [current.key]: current.value, + }), + {} + ), + }); + + return { + url: value.path, + }; + }, + }); + } +} diff --git a/libraries/nestjs-libraries/src/chat/tools/integration.list.tool.ts b/libraries/nestjs-libraries/src/chat/tools/integration.list.tool.ts new file mode 100644 index 00000000..98d54ce2 --- /dev/null +++ b/libraries/nestjs-libraries/src/chat/tools/integration.list.tool.ts @@ -0,0 +1,57 @@ +import { + AgentToolInterface, + ToolReturn, +} from '@gitroom/nestjs-libraries/chat/agent.tool.interface'; +import { createTool } from '@mastra/core/tools'; +import { Injectable } from '@nestjs/common'; +import { IntegrationService } from '@gitroom/nestjs-libraries/database/prisma/integrations/integration.service'; +import z from 'zod'; +import { checkAuth } from '@gitroom/nestjs-libraries/chat/auth.context'; +import { getAuth } from '@gitroom/nestjs-libraries/chat/async.storage'; + +@Injectable() +export class IntegrationListTool implements AgentToolInterface { + constructor(private _integrationService: IntegrationService) {} + name = 'integrationList'; + + run() { + return createTool({ + id: 'integrationList', + description: `This tool list available integrations to schedule posts to`, + outputSchema: z.object({ + output: z.array( + z.object({ + id: z.string(), + name: z.string(), + picture: z.string(), + platform: z.string(), + }) + ), + }), + execute: async (args, options) => { + console.log(getAuth()); + console.log(options); + const { context, runtimeContext } = args; + checkAuth(args, options); + const organizationId = JSON.parse( + // @ts-ignore + runtimeContext.get('organization') as string + ).id; + + return { + output: ( + await this._integrationService.getIntegrationsList(organizationId) + ).map((p) => ({ + name: p.name, + id: p.id, + disabled: p.disabled, + picture: p.picture || '/no-picture.jpg', + platform: p.providerIdentifier, + display: p.profile, + type: p.type, + })), + }; + }, + }); + } +} diff --git a/libraries/nestjs-libraries/src/chat/tools/integration.schedule.post.ts b/libraries/nestjs-libraries/src/chat/tools/integration.schedule.post.ts index 8399d1ba..cc8e2d4d 100644 --- a/libraries/nestjs-libraries/src/chat/tools/integration.schedule.post.ts +++ b/libraries/nestjs-libraries/src/chat/tools/integration.schedule.post.ts @@ -9,6 +9,7 @@ import { makeId } from '@gitroom/nestjs-libraries/services/make.is'; import { AllProvidersSettings } from '@gitroom/nestjs-libraries/dtos/posts/providers-settings/all.providers.settings'; import { validate } from 'class-validator'; import { Integration } from '@prisma/client'; +import { checkAuth } from '@gitroom/nestjs-libraries/chat/auth.context'; @Injectable() export class IntegrationSchedulePostTool implements AgentToolInterface { @@ -18,7 +19,7 @@ export class IntegrationSchedulePostTool implements AgentToolInterface { ) {} name = 'integrationSchedulePostTool'; - async run(): Promise { + run() { return createTool({ id: 'schedulePostTool', description: ` @@ -56,7 +57,11 @@ If the tools return errors, you would need to rerun it with the right parameters postsAndComments: z .array( z.object({ - content: z.string().describe('The content of the post'), + content: z + .string() + .describe( + "The content of the post, HTML, Each line must be wrapped in

here is the possible tags: h1, h2, h3, u, strong, li, ul, p (you can't have u and strong together)" + ), attachments: z .array(z.string()) .describe('The image of the post (URLS)'), @@ -97,10 +102,14 @@ If the tools return errors, you would need to rerun it with the right parameters ) .or(z.object({ errors: z.string() })), }), - execute: async ({ runtimeContext, context }) => { + execute: async (args, options) => { + const { context, runtimeContext } = args; + checkAuth(args, options); console.log(JSON.stringify(context, null, 2)); - // @ts-ignore - const organizationId = runtimeContext.get('organization') as string; + const organizationId = JSON.parse( + // @ts-ignore + runtimeContext.get('organization') as string + ).id; const finalOutput = []; const integrations = {} as Record; diff --git a/libraries/nestjs-libraries/src/chat/tools/integration.trigger.tool.ts b/libraries/nestjs-libraries/src/chat/tools/integration.trigger.tool.ts index 6833286d..b548d22c 100644 --- a/libraries/nestjs-libraries/src/chat/tools/integration.trigger.tool.ts +++ b/libraries/nestjs-libraries/src/chat/tools/integration.trigger.tool.ts @@ -10,6 +10,7 @@ import { validationMetadatasToSchemas } from 'class-validator-jsonschema'; import { IntegrationService } from '@gitroom/nestjs-libraries/database/prisma/integrations/integration.service'; import { RefreshToken } from '@gitroom/nestjs-libraries/integrations/social.abstract'; import { timer } from '@gitroom/helpers/utils/timer'; +import { checkAuth } from '@gitroom/nestjs-libraries/chat/auth.context'; @Injectable() export class IntegrationTriggerTool implements AgentToolInterface { @@ -19,7 +20,7 @@ export class IntegrationTriggerTool implements AgentToolInterface { ) {} name = 'triggerTool'; - async run(): Promise { + run() { return createTool({ id: 'triggerTool', description: `After using the integrationSchema, we sometimes miss details we can\'t ask from the user, like ids. @@ -39,12 +40,16 @@ export class IntegrationTriggerTool implements AgentToolInterface { ), }), outputSchema: z.object({ - output: z.array(z.object()), + output: z.array(z.record(z.string(), z.any())), }), - execute: async ({ runtimeContext, context }) => { + execute: async (args, options) => { + const { context, runtimeContext } = args; + checkAuth(args, options); console.log('triggerTool', context); - // @ts-ignore - const organizationId = runtimeContext.get('organization') as string; + const organizationId = JSON.parse( + // @ts-ignore + runtimeContext.get('organization') as string + ).id; const getIntegration = await this._integrationService.getIntegrationById( diff --git a/libraries/nestjs-libraries/src/chat/tools/integration.validation.tool.ts b/libraries/nestjs-libraries/src/chat/tools/integration.validation.tool.ts index 2c9d84a5..9d1e618c 100644 --- a/libraries/nestjs-libraries/src/chat/tools/integration.validation.tool.ts +++ b/libraries/nestjs-libraries/src/chat/tools/integration.validation.tool.ts @@ -7,13 +7,14 @@ import { socialIntegrationList, } from '@gitroom/nestjs-libraries/integrations/integration.manager'; import { validationMetadatasToSchemas } from 'class-validator-jsonschema'; +import { checkAuth } from '@gitroom/nestjs-libraries/chat/auth.context'; @Injectable() export class IntegrationValidationTool implements AgentToolInterface { constructor(private _integrationManager: IntegrationManager) {} name = 'integrationSchema'; - async run(): Promise { + run() { return createTool({ id: 'integrationSchema', description: `Everytime we want to schedule a social media post, we need to understand the schema of the integration. @@ -71,7 +72,9 @@ export class IntegrationValidationTool implements AgentToolInterface { ), }), }), - execute: async ({ context }) => { + execute: async (args, options) => { + const { context, runtimeContext } = args; + checkAuth(args, options); const integration = socialIntegrationList.find( (p) => p.identifier === context.platform )!; diff --git a/libraries/nestjs-libraries/src/chat/tools/tool.list.ts b/libraries/nestjs-libraries/src/chat/tools/tool.list.ts index e4a966b4..beab9a75 100644 --- a/libraries/nestjs-libraries/src/chat/tools/tool.list.ts +++ b/libraries/nestjs-libraries/src/chat/tools/tool.list.ts @@ -1,9 +1,19 @@ import { IntegrationValidationTool } from '@gitroom/nestjs-libraries/chat/tools/integration.validation.tool'; import { IntegrationTriggerTool } from '@gitroom/nestjs-libraries/chat/tools/integration.trigger.tool'; import { IntegrationSchedulePostTool } from './integration.schedule.post'; +import { GenerateVideoOptionsTool } from '@gitroom/nestjs-libraries/chat/tools/generate.video.options.tool'; +import { VideoFunctionTool } from '@gitroom/nestjs-libraries/chat/tools/video.function.tool'; +import { GenerateVideoTool } from '@gitroom/nestjs-libraries/chat/tools/generate.video.tool'; +import { GenerateImageTool } from '@gitroom/nestjs-libraries/chat/tools/generate.image.tool'; +import { IntegrationListTool } from '@gitroom/nestjs-libraries/chat/tools/integration.list.tool'; export const toolList = [ + IntegrationListTool, IntegrationValidationTool, IntegrationTriggerTool, IntegrationSchedulePostTool, + GenerateVideoOptionsTool, + VideoFunctionTool, + GenerateVideoTool, + GenerateImageTool, ]; diff --git a/libraries/nestjs-libraries/src/chat/tools/video.function.tool.ts b/libraries/nestjs-libraries/src/chat/tools/video.function.tool.ts new file mode 100644 index 00000000..2a116d91 --- /dev/null +++ b/libraries/nestjs-libraries/src/chat/tools/video.function.tool.ts @@ -0,0 +1,47 @@ +import { AgentToolInterface } from '@gitroom/nestjs-libraries/chat/agent.tool.interface'; +import { createTool } from '@mastra/core/tools'; +import { Injectable } from '@nestjs/common'; +import { VideoManager } from '@gitroom/nestjs-libraries/videos/video.manager'; +import z from 'zod'; +import { ModuleRef } from '@nestjs/core'; +import { checkAuth } from '@gitroom/nestjs-libraries/chat/auth.context'; + +@Injectable() +export class VideoFunctionTool implements AgentToolInterface { + constructor( + private _videoManagerService: VideoManager, + private _moduleRef: ModuleRef + ) {} + name = 'videoFunctionTool'; + + run() { + return createTool({ + id: 'videoFunctionTool', + description: `Sometimes when we want to generate videos we might need to get some additional information like voice_id, etc`, + inputSchema: z.object({ + identifier: z.string(), + functionName: z.string(), + }), + execute: async (args, options) => { + const { context, runtimeContext } = args; + checkAuth(args, options); + const videos = this._videoManagerService.getAllVideos(); + const findVideo = videos.find( + (p) => + p.identifier === context.identifier && + p.tools.some((p) => p.functionName === context.functionName) + ); + + if (!findVideo) { + return { error: 'Function not found' }; + } + + const func = await this._moduleRef + // @ts-ignore + .get(findVideo.target, { strict: false }) + [context.functionName](); + return func; + }, + }); + } +} diff --git a/libraries/nestjs-libraries/src/database/prisma/media/media.service.ts b/libraries/nestjs-libraries/src/database/prisma/media/media.service.ts index c6e63ef5..29d72941 100644 --- a/libraries/nestjs-libraries/src/database/prisma/media/media.service.ts +++ b/libraries/nestjs-libraries/src/database/prisma/media/media.service.ts @@ -37,7 +37,7 @@ export class MediaService { org: Organization, generatePromptFirst?: boolean ) { - return await this._subscriptionService.useCredit( + const generating = await this._subscriptionService.useCredit( org, 'ai_images', async () => { @@ -48,6 +48,8 @@ export class MediaService { return this._openAi.generateImage(prompt, !!generatePromptFirst); } ); + + return generating; } saveFile(org: string, fileName: string, filePath: string) { @@ -84,6 +86,7 @@ export class MediaService { org, 'ai_videos' ); + if (totalCredits.credits <= 0) { throw new SubscriptionException({ action: AuthorizationActions.Create, @@ -100,7 +103,9 @@ export class MediaService { throw new HttpException('This video is not available in trial mode', 406); } + console.log(body.customParams); await video.instance.processAndValidate(body.customParams); + console.log('no err'); return await this._subscriptionService.useCredit( org, @@ -125,8 +130,14 @@ export class MediaService { // @ts-ignore const functionToCall = video.instance[functionName]; - if (typeof functionToCall !== 'function' || this._videoManager.checkAvailableVideoFunction(functionToCall)) { - throw new HttpException(`Function ${functionName} not found on video instance`, 400); + if ( + typeof functionToCall !== 'function' || + this._videoManager.checkAvailableVideoFunction(functionToCall) + ) { + throw new HttpException( + `Function ${functionName} not found on video instance`, + 400 + ); } return functionToCall(body); diff --git a/libraries/nestjs-libraries/src/dtos/posts/providers-settings/discord.dto.ts b/libraries/nestjs-libraries/src/dtos/posts/providers-settings/discord.dto.ts index ed09e72a..23c40e95 100644 --- a/libraries/nestjs-libraries/src/dtos/posts/providers-settings/discord.dto.ts +++ b/libraries/nestjs-libraries/src/dtos/posts/providers-settings/discord.dto.ts @@ -1,8 +1,12 @@ import { IsDefined, IsString, MinLength } from 'class-validator'; +import { JSONSchema } from 'class-validator-jsonschema'; export class DiscordDto { @MinLength(1) @IsDefined() @IsString() + @JSONSchema({ + description: 'Channel must be an id', + }) channel: string; } diff --git a/libraries/nestjs-libraries/src/dtos/posts/providers-settings/listmonk.dto.ts b/libraries/nestjs-libraries/src/dtos/posts/providers-settings/listmonk.dto.ts index 218af81e..978bf6e5 100644 --- a/libraries/nestjs-libraries/src/dtos/posts/providers-settings/listmonk.dto.ts +++ b/libraries/nestjs-libraries/src/dtos/posts/providers-settings/listmonk.dto.ts @@ -1,4 +1,5 @@ import { IsOptional, IsString, MinLength } from 'class-validator'; +import { JSONSchema } from 'class-validator-jsonschema'; export class ListmonkDto { @IsString() @@ -9,9 +10,15 @@ export class ListmonkDto { preview: string; @IsString() + @JSONSchema({ + description: 'List must be an id', + }) list: string; @IsString() @IsOptional() + @JSONSchema({ + description: 'Template must be an id', + }) template: string; } diff --git a/libraries/nestjs-libraries/src/dtos/posts/providers-settings/pinterest.dto.ts b/libraries/nestjs-libraries/src/dtos/posts/providers-settings/pinterest.dto.ts index d6cbae14..aed79c80 100644 --- a/libraries/nestjs-libraries/src/dtos/posts/providers-settings/pinterest.dto.ts +++ b/libraries/nestjs-libraries/src/dtos/posts/providers-settings/pinterest.dto.ts @@ -1,6 +1,7 @@ import { IsDefined, IsOptional, IsString, IsUrl, MaxLength, MinLength, ValidateIf } from 'class-validator'; +import { JSONSchema } from 'class-validator-jsonschema'; export class PinterestSettingsDto { @IsString() @@ -25,6 +26,9 @@ export class PinterestSettingsDto { }) @MinLength(1, { message: 'Board is required', + }) + @JSONSchema({ + description: 'board must be an id', }) board: string; } diff --git a/libraries/nestjs-libraries/src/dtos/posts/providers-settings/slack.dto.ts b/libraries/nestjs-libraries/src/dtos/posts/providers-settings/slack.dto.ts index ebca73b0..355718c8 100644 --- a/libraries/nestjs-libraries/src/dtos/posts/providers-settings/slack.dto.ts +++ b/libraries/nestjs-libraries/src/dtos/posts/providers-settings/slack.dto.ts @@ -1,8 +1,12 @@ import { IsDefined, IsString, MinLength } from 'class-validator'; +import { JSONSchema } from 'class-validator-jsonschema'; export class SlackDto { @MinLength(1) @IsDefined() @IsString() + @JSONSchema({ + description: 'Channel must be an id', + }) channel: string; } diff --git a/libraries/nestjs-libraries/src/mcp/mcp.service.ts b/libraries/nestjs-libraries/src/mcp/mcp.service.ts deleted file mode 100644 index 6a7a4922..00000000 --- a/libraries/nestjs-libraries/src/mcp/mcp.service.ts +++ /dev/null @@ -1,45 +0,0 @@ -import { Injectable } from '@nestjs/common'; -import EventEmitter from 'events'; -import { finalize, fromEvent, startWith } from 'rxjs'; -import { McpTransport } from '@gitroom/nestjs-libraries/mcp/mcp.transport'; -import { JSONRPCMessageSchema } from '@gitroom/nestjs-libraries/mcp/mcp.types'; -import { McpSettings } from '@gitroom/nestjs-libraries/mcp/mcp.settings'; -import { MainMcp } from '@gitroom/backend/mcp/main.mcp'; - -@Injectable() -export class McpService { - static event = new EventEmitter(); - constructor(private _mainMcp: MainMcp) {} - - async runServer(apiKey: string, organization: string) { - const server = McpSettings.load(organization, this._mainMcp).server(); - const transport = new McpTransport(organization); - - const observer = fromEvent( - McpService.event, - `organization-${organization}` - ).pipe( - startWith({ - type: 'endpoint', - data: - process.env.NEXT_PUBLIC_BACKEND_URL + '/mcp/' + apiKey + '/messages', - }), - finalize(() => { - transport.close(); - }) - ); - - await server.connect(transport); - - return observer; - } - - async processPostBody(organization: string, body: object) { - const server = McpSettings.load(organization, this._mainMcp).server(); - const message = JSONRPCMessageSchema.parse(body); - const transport = new McpTransport(organization); - await server.connect(transport); - transport.handlePostMessage(message); - return {}; - } -} diff --git a/libraries/nestjs-libraries/src/mcp/mcp.settings.ts b/libraries/nestjs-libraries/src/mcp/mcp.settings.ts deleted file mode 100644 index 30066023..00000000 --- a/libraries/nestjs-libraries/src/mcp/mcp.settings.ts +++ /dev/null @@ -1,73 +0,0 @@ -import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'; -import { MainMcp } from '@gitroom/backend/mcp/main.mcp'; -import { socialIntegrationList } from '@gitroom/nestjs-libraries/integrations/integration.manager'; -import * as Sentry from '@sentry/nestjs'; -export class McpSettings { - private _server: McpServer; - createServer(organization: string, service: MainMcp) { - this._server = Sentry.wrapMcpServerWithSentry(new McpServer( - { - name: 'Postiz', - version: '2.0.0', - }, - { - instructions: `Postiz is a service to schedule social media posts for ${socialIntegrationList - .map((p) => p.name) - .join( - ', ' - )} to schedule you need to have the providerId (you can get it from POSTIZ_PROVIDERS_LIST), user need to specify the schedule date (or now), text, you also can send base64 images and text for the comments. When you get POSTIZ_PROVIDERS_LIST, always display all the options to the user`, - } - )); - - for (const usePrompt of Reflect.getMetadata( - 'MCP_PROMPT', - MainMcp.prototype - ) || []) { - const list = [ - usePrompt.data.promptName, - usePrompt.data.zod, - async (...args: any[]) => { - return { - // @ts-ignore - messages: await service[usePrompt.func as string]( - organization, - ...args - ), - }; - }, - ].filter((f) => f); - this._server.prompt(...(list as [any, any, any])); - } - - for (const usePrompt of Reflect.getMetadata( - 'MCP_TOOL', - MainMcp.prototype - ) || []) { - const list: any[] = [ - usePrompt.data.toolName, - usePrompt.data.zod, - async (...args: any[]) => { - return { - // @ts-ignore - content: await service[usePrompt.func as string]( - organization, - ...args - ), - }; - }, - ].filter((f) => f); - - this._server.tool(...(list as [any, any, any])); - } - - return this; - } - - server() { - return this._server; - } - - static load(organization: string, service: MainMcp): McpSettings { - return new McpSettings().createServer(organization, service); - } -} diff --git a/libraries/nestjs-libraries/src/mcp/mcp.tool.ts b/libraries/nestjs-libraries/src/mcp/mcp.tool.ts deleted file mode 100644 index 101ef75b..00000000 --- a/libraries/nestjs-libraries/src/mcp/mcp.tool.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { ZodRawShape } from 'zod'; - -export function McpTool(params: { toolName: string; zod?: ZodRawShape }) { - return function ( - target: any, - propertyKey: string | symbol, - descriptor: PropertyDescriptor - ) { - const existingMetadata = Reflect.getMetadata('MCP_TOOL', target) || []; - - // Add the metadata information for this method - existingMetadata.push({ data: params, func: propertyKey }); - - // Define metadata on the class prototype (so it can be retrieved from the class) - Reflect.defineMetadata('MCP_TOOL', existingMetadata, target); - }; -} - -export function McpPrompt(params: { promptName: string; zod?: ZodRawShape }) { - return function ( - target: any, - propertyKey: string | symbol, - descriptor: PropertyDescriptor - ) { - const existingMetadata = Reflect.getMetadata('MCP_PROMPT', target) || []; - - // Add the metadata information for this method - existingMetadata.push({ data: params, func: propertyKey }); - - // Define metadata on the class prototype (so it can be retrieved from the class) - Reflect.defineMetadata('MCP_PROMPT', existingMetadata, target); - }; -} diff --git a/libraries/nestjs-libraries/src/mcp/mcp.transport.ts b/libraries/nestjs-libraries/src/mcp/mcp.transport.ts deleted file mode 100644 index b5e6b72e..00000000 --- a/libraries/nestjs-libraries/src/mcp/mcp.transport.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { Transport } from '@modelcontextprotocol/sdk/shared/transport.js'; -import { McpService } from '@gitroom/nestjs-libraries/mcp/mcp.service'; -import { - JSONRPCMessage, - JSONRPCMessageSchema, -} from '@gitroom/nestjs-libraries/mcp/mcp.types'; - -export class McpTransport implements Transport { - constructor(private _organization: string) {} - - onclose?: () => void; - onerror?: (error: Error) => void; - onmessage?: (message: JSONRPCMessage) => void; - - async start() {} - - async send(message: JSONRPCMessage): Promise { - McpService.event.emit(`organization-${this._organization}`, { - type: 'message', - data: JSON.stringify(message), - }); - } - - async close() { - McpService.event.removeAllListeners(`organization-${this._organization}`); - } - - handlePostMessage(message: any) { - let parsedMessage: JSONRPCMessage; - - try { - parsedMessage = JSONRPCMessageSchema.parse(message); - } catch (error) { - this.onerror?.(error as Error); - throw error; - } - - this.onmessage?.(parsedMessage); - } - - get sessionId() { - return this._organization; - } -} diff --git a/libraries/nestjs-libraries/src/mcp/mcp.types.ts b/libraries/nestjs-libraries/src/mcp/mcp.types.ts deleted file mode 100644 index 96a3aca9..00000000 --- a/libraries/nestjs-libraries/src/mcp/mcp.types.ts +++ /dev/null @@ -1,1309 +0,0 @@ -import { z, ZodTypeAny } from 'zod'; - -export const LATEST_PROTOCOL_VERSION = '2024-11-05'; -export const SUPPORTED_PROTOCOL_VERSIONS = [ - LATEST_PROTOCOL_VERSION, - '2024-10-07', -]; - -/* JSON-RPC types */ -export const JSONRPC_VERSION = '2.0'; - -/** - * A progress token, used to associate progress notifications with the original request. - */ -export const ProgressTokenSchema = z.union([z.string(), z.number().int()]); - -/** - * An opaque token used to represent a cursor for pagination. - */ -export const CursorSchema = z.string(); - -const BaseRequestParamsSchema = z - .object({ - _meta: z.optional( - z - .object({ - /** - * If specified, the caller is requesting out-of-band progress notifications for this request (as represented by notifications/progress). The value of this parameter is an opaque token that will be attached to any subsequent notifications. The receiver is not obligated to provide these notifications. - */ - progressToken: z.optional(ProgressTokenSchema), - }) - .passthrough() - ), - }) - .passthrough(); - -export const RequestSchema = z.object({ - method: z.string(), - params: z.optional(BaseRequestParamsSchema), -}); - -const BaseNotificationParamsSchema = z - .object({ - /** - * This parameter name is reserved by MCP to allow clients and servers to attach additional metadata to their notifications. - */ - _meta: z.optional(z.object({}).passthrough()), - }) - .passthrough(); - -export const NotificationSchema = z.object({ - method: z.string(), - params: z.optional(BaseNotificationParamsSchema), -}); - -export const ResultSchema = z - .object({ - /** - * This result property is reserved by the protocol to allow clients and servers to attach additional metadata to their responses. - */ - _meta: z.optional(z.object({}).passthrough()), - }) - .passthrough(); - -/** - * A uniquely identifying ID for a request in JSON-RPC. - */ -export const RequestIdSchema = z.union([z.string(), z.number().int()]); - -/** - * A request that expects a response. - */ -export const JSONRPCRequestSchema = z - .object({ - jsonrpc: z.literal(JSONRPC_VERSION), - id: RequestIdSchema, - }) - .merge(RequestSchema) - .strict(); - -export const isJSONRPCRequest = (value: unknown): value is JSONRPCRequest => - JSONRPCRequestSchema.safeParse(value).success; - -/** - * A notification which does not expect a response. - */ -export const JSONRPCNotificationSchema = z - .object({ - jsonrpc: z.literal(JSONRPC_VERSION), - }) - .merge(NotificationSchema) - .strict(); - -export const isJSONRPCNotification = ( - value: unknown -): value is JSONRPCNotification => - JSONRPCNotificationSchema.safeParse(value).success; - -/** - * A successful (non-error) response to a request. - */ -export const JSONRPCResponseSchema = z - .object({ - jsonrpc: z.literal(JSONRPC_VERSION), - id: RequestIdSchema, - result: ResultSchema, - }) - .strict(); - -export const isJSONRPCResponse = (value: unknown): value is JSONRPCResponse => - JSONRPCResponseSchema.safeParse(value).success; - -/** - * Error codes defined by the JSON-RPC specification. - */ -export enum ErrorCode { - // SDK error codes - ConnectionClosed = -32000, - RequestTimeout = -32001, - - // Standard JSON-RPC error codes - ParseError = -32700, - InvalidRequest = -32600, - MethodNotFound = -32601, - InvalidParams = -32602, - InternalError = -32603, -} - -/** - * A response to a request that indicates an error occurred. - */ -export const JSONRPCErrorSchema = z - .object({ - jsonrpc: z.literal(JSONRPC_VERSION), - id: RequestIdSchema, - error: z.object({ - /** - * The error type that occurred. - */ - code: z.number().int(), - /** - * A short description of the error. The message SHOULD be limited to a concise single sentence. - */ - message: z.string(), - /** - * Additional information about the error. The value of this member is defined by the sender (e.g. detailed error information, nested errors etc.). - */ - data: z.optional(z.unknown()), - }), - }) - .strict(); - -export const isJSONRPCError = (value: unknown): value is JSONRPCError => - JSONRPCErrorSchema.safeParse(value).success; - -export const JSONRPCMessageSchema = z.union([ - JSONRPCRequestSchema, - JSONRPCNotificationSchema, - JSONRPCResponseSchema, - JSONRPCErrorSchema, -]); - -/* Empty result */ -/** - * A response that indicates success but carries no data. - */ -export const EmptyResultSchema = ResultSchema.strict(); - -/* Cancellation */ -/** - * This notification can be sent by either side to indicate that it is cancelling a previously-issued request. - * - * The request SHOULD still be in-flight, but due to communication latency, it is always possible that this notification MAY arrive after the request has already finished. - * - * This notification indicates that the result will be unused, so any associated processing SHOULD cease. - * - * A client MUST NOT attempt to cancel its `initialize` request. - */ -export const CancelledNotificationSchema = NotificationSchema.extend({ - method: z.literal('notifications/cancelled'), - params: BaseNotificationParamsSchema.extend({ - /** - * The ID of the request to cancel. - * - * This MUST correspond to the ID of a request previously issued in the same direction. - */ - requestId: RequestIdSchema, - - /** - * An optional string describing the reason for the cancellation. This MAY be logged or presented to the user. - */ - reason: z.string().optional(), - }), -}); - -/* Initialization */ -/** - * Describes the name and version of an MCP implementation. - */ -export const ImplementationSchema = z - .object({ - name: z.string(), - version: z.string(), - }) - .passthrough(); - -/** - * Capabilities a client may support. Known capabilities are defined here, in this schema, but this is not a closed set: any client can define its own, additional capabilities. - */ -export const ClientCapabilitiesSchema = z - .object({ - /** - * Experimental, non-standard capabilities that the client supports. - */ - experimental: z.optional(z.object({}).passthrough()), - /** - * Present if the client supports sampling from an LLM. - */ - sampling: z.optional(z.object({}).passthrough()), - /** - * Present if the client supports listing roots. - */ - roots: z.optional( - z - .object({ - /** - * Whether the client supports issuing notifications for changes to the roots list. - */ - listChanged: z.optional(z.boolean()), - }) - .passthrough() - ), - }) - .passthrough(); - -/** - * This request is sent from the client to the server when it first connects, asking it to begin initialization. - */ -export const InitializeRequestSchema = RequestSchema.extend({ - method: z.literal('initialize'), - params: BaseRequestParamsSchema.extend({ - /** - * The latest version of the Model Context Protocol that the client supports. The client MAY decide to support older versions as well. - */ - protocolVersion: z.string(), - capabilities: ClientCapabilitiesSchema, - clientInfo: ImplementationSchema, - }), -}); - -/** - * Capabilities that a server may support. Known capabilities are defined here, in this schema, but this is not a closed set: any server can define its own, additional capabilities. - */ -export const ServerCapabilitiesSchema = z - .object({ - /** - * Experimental, non-standard capabilities that the server supports. - */ - experimental: z.optional(z.object({}).passthrough()), - /** - * Present if the server supports sending log messages to the client. - */ - logging: z.optional(z.object({}).passthrough()), - /** - * Present if the server supports sending completions to the client. - */ - completions: z.optional(z.object({}).passthrough()), - /** - * Present if the server offers any prompt templates. - */ - prompts: z.optional( - z - .object({ - /** - * Whether this server supports issuing notifications for changes to the prompt list. - */ - listChanged: z.optional(z.boolean()), - }) - .passthrough() - ), - /** - * Present if the server offers any resources to read. - */ - resources: z.optional( - z - .object({ - /** - * Whether this server supports clients subscribing to resource updates. - */ - subscribe: z.optional(z.boolean()), - - /** - * Whether this server supports issuing notifications for changes to the resource list. - */ - listChanged: z.optional(z.boolean()), - }) - .passthrough() - ), - /** - * Present if the server offers any tools to call. - */ - tools: z.optional( - z - .object({ - /** - * Whether this server supports issuing notifications for changes to the tool list. - */ - listChanged: z.optional(z.boolean()), - }) - .passthrough() - ), - }) - .passthrough(); - -/** - * After receiving an initialize request from the client, the server sends this response. - */ -export const InitializeResultSchema = ResultSchema.extend({ - /** - * The version of the Model Context Protocol that the server wants to use. This may not match the version that the client requested. If the client cannot support this version, it MUST disconnect. - */ - protocolVersion: z.string(), - capabilities: ServerCapabilitiesSchema, - serverInfo: ImplementationSchema, - /** - * Instructions describing how to use the server and its features. - * - * This can be used by clients to improve the LLM's understanding of available tools, resources, etc. It can be thought of like a "hint" to the model. For example, this information MAY be added to the system prompt. - */ - instructions: z.optional(z.string()), -}); - -/** - * This notification is sent from the client to the server after initialization has finished. - */ -export const InitializedNotificationSchema = NotificationSchema.extend({ - method: z.literal('notifications/initialized'), -}); - -/* Ping */ -/** - * A ping, issued by either the server or the client, to check that the other party is still alive. The receiver must promptly respond, or else may be disconnected. - */ -export const PingRequestSchema = RequestSchema.extend({ - method: z.literal('ping'), -}); - -/* Progress notifications */ -export const ProgressSchema = z - .object({ - /** - * The progress thus far. This should increase every time progress is made, even if the total is unknown. - */ - progress: z.number(), - /** - * Total number of items to process (or total progress required), if known. - */ - total: z.optional(z.number()), - }) - .passthrough(); - -/** - * An out-of-band notification used to inform the receiver of a progress update for a long-running request. - */ -export const ProgressNotificationSchema = NotificationSchema.extend({ - method: z.literal('notifications/progress'), - params: BaseNotificationParamsSchema.merge(ProgressSchema).extend({ - /** - * The progress token which was given in the initial request, used to associate this notification with the request that is proceeding. - */ - progressToken: ProgressTokenSchema, - }), -}); - -/* Pagination */ -export const PaginatedRequestSchema = RequestSchema.extend({ - params: BaseRequestParamsSchema.extend({ - /** - * An opaque token representing the current pagination position. - * If provided, the server should return results starting after this cursor. - */ - cursor: z.optional(CursorSchema), - }).optional(), -}); - -export const PaginatedResultSchema = ResultSchema.extend({ - /** - * An opaque token representing the pagination position after the last returned result. - * If present, there may be more results available. - */ - nextCursor: z.optional(CursorSchema), -}); - -/* Resources */ -/** - * The contents of a specific resource or sub-resource. - */ -export const ResourceContentsSchema = z - .object({ - /** - * The URI of this resource. - */ - uri: z.string(), - /** - * The MIME type of this resource, if known. - */ - mimeType: z.optional(z.string()), - }) - .passthrough(); - -export const TextResourceContentsSchema = ResourceContentsSchema.extend({ - /** - * The text of the item. This must only be set if the item can actually be represented as text (not binary data). - */ - text: z.string(), -}); - -export const BlobResourceContentsSchema = ResourceContentsSchema.extend({ - /** - * A base64-encoded string representing the binary data of the item. - */ - blob: z.string().base64(), -}); - -/** - * A known resource that the server is capable of reading. - */ -export const ResourceSchema = z - .object({ - /** - * The URI of this resource. - */ - uri: z.string(), - - /** - * A human-readable name for this resource. - * - * This can be used by clients to populate UI elements. - */ - name: z.string(), - - /** - * A description of what this resource represents. - * - * This can be used by clients to improve the LLM's understanding of available resources. It can be thought of like a "hint" to the model. - */ - description: z.optional(z.string()), - - /** - * The MIME type of this resource, if known. - */ - mimeType: z.optional(z.string()), - }) - .passthrough(); - -/** - * A template description for resources available on the server. - */ -export const ResourceTemplateSchema = z - .object({ - /** - * A URI template (according to RFC 6570) that can be used to construct resource URIs. - */ - uriTemplate: z.string(), - - /** - * A human-readable name for the type of resource this template refers to. - * - * This can be used by clients to populate UI elements. - */ - name: z.string(), - - /** - * A description of what this template is for. - * - * This can be used by clients to improve the LLM's understanding of available resources. It can be thought of like a "hint" to the model. - */ - description: z.optional(z.string()), - - /** - * The MIME type for all resources that match this template. This should only be included if all resources matching this template have the same type. - */ - mimeType: z.optional(z.string()), - }) - .passthrough(); - -/** - * Sent from the client to request a list of resources the server has. - */ -export const ListResourcesRequestSchema = PaginatedRequestSchema.extend({ - method: z.literal('resources/list'), -}); - -/** - * The server's response to a resources/list request from the client. - */ -export const ListResourcesResultSchema = PaginatedResultSchema.extend({ - resources: z.array(ResourceSchema), -}); - -/** - * Sent from the client to request a list of resource templates the server has. - */ -export const ListResourceTemplatesRequestSchema = PaginatedRequestSchema.extend( - { - method: z.literal('resources/templates/list'), - } -); - -/** - * The server's response to a resources/templates/list request from the client. - */ -export const ListResourceTemplatesResultSchema = PaginatedResultSchema.extend({ - resourceTemplates: z.array(ResourceTemplateSchema), -}); - -/** - * Sent from the client to the server, to read a specific resource URI. - */ -export const ReadResourceRequestSchema = RequestSchema.extend({ - method: z.literal('resources/read'), - params: BaseRequestParamsSchema.extend({ - /** - * The URI of the resource to read. The URI can use any protocol; it is up to the server how to interpret it. - */ - uri: z.string(), - }), -}); - -/** - * The server's response to a resources/read request from the client. - */ -export const ReadResourceResultSchema = ResultSchema.extend({ - contents: z.array( - z.union([TextResourceContentsSchema, BlobResourceContentsSchema]) - ), -}); - -/** - * An optional notification from the server to the client, informing it that the list of resources it can read from has changed. This may be issued by servers without any previous subscription from the client. - */ -export const ResourceListChangedNotificationSchema = NotificationSchema.extend({ - method: z.literal('notifications/resources/list_changed'), -}); - -/** - * Sent from the client to request resources/updated notifications from the server whenever a particular resource changes. - */ -export const SubscribeRequestSchema = RequestSchema.extend({ - method: z.literal('resources/subscribe'), - params: BaseRequestParamsSchema.extend({ - /** - * The URI of the resource to subscribe to. The URI can use any protocol; it is up to the server how to interpret it. - */ - uri: z.string(), - }), -}); - -/** - * Sent from the client to request cancellation of resources/updated notifications from the server. This should follow a previous resources/subscribe request. - */ -export const UnsubscribeRequestSchema = RequestSchema.extend({ - method: z.literal('resources/unsubscribe'), - params: BaseRequestParamsSchema.extend({ - /** - * The URI of the resource to unsubscribe from. - */ - uri: z.string(), - }), -}); - -/** - * A notification from the server to the client, informing it that a resource has changed and may need to be read again. This should only be sent if the client previously sent a resources/subscribe request. - */ -export const ResourceUpdatedNotificationSchema = NotificationSchema.extend({ - method: z.literal('notifications/resources/updated'), - params: BaseNotificationParamsSchema.extend({ - /** - * The URI of the resource that has been updated. This might be a sub-resource of the one that the client actually subscribed to. - */ - uri: z.string(), - }), -}); - -/* Prompts */ -/** - * Describes an argument that a prompt can accept. - */ -export const PromptArgumentSchema = z - .object({ - /** - * The name of the argument. - */ - name: z.string(), - /** - * A human-readable description of the argument. - */ - description: z.optional(z.string()), - /** - * Whether this argument must be provided. - */ - required: z.optional(z.boolean()), - }) - .passthrough(); - -/** - * A prompt or prompt template that the server offers. - */ -export const PromptSchema = z - .object({ - /** - * The name of the prompt or prompt template. - */ - name: z.string(), - /** - * An optional description of what this prompt provides - */ - description: z.optional(z.string()), - /** - * A list of arguments to use for templating the prompt. - */ - arguments: z.optional(z.array(PromptArgumentSchema)), - }) - .passthrough(); - -/** - * Sent from the client to request a list of prompts and prompt templates the server has. - */ -export const ListPromptsRequestSchema = PaginatedRequestSchema.extend({ - method: z.literal('prompts/list'), -}); - -/** - * The server's response to a prompts/list request from the client. - */ -export const ListPromptsResultSchema = PaginatedResultSchema.extend({ - prompts: z.array(PromptSchema), -}); - -/** - * Used by the client to get a prompt provided by the server. - */ -export const GetPromptRequestSchema = RequestSchema.extend({ - method: z.literal('prompts/get'), - params: BaseRequestParamsSchema.extend({ - /** - * The name of the prompt or prompt template. - */ - name: z.string(), - /** - * Arguments to use for templating the prompt. - */ - arguments: z.optional(z.record(z.string(), z.unknown())), - }), -}); - -/** - * Text provided to or from an LLM. - */ -export const TextContentSchema = z - .object({ - type: z.literal('text'), - /** - * The text content of the message. - */ - text: z.string(), - }) - .passthrough(); - -/** - * An image provided to or from an LLM. - */ -export const ImageContentSchema = z - .object({ - type: z.literal('image'), - /** - * The base64-encoded image data. - */ - data: z.string().base64(), - /** - * The MIME type of the image. Different providers may support different image types. - */ - mimeType: z.string(), - }) - .passthrough(); - -/** - * An Audio provided to or from an LLM. - */ -export const AudioContentSchema = z - .object({ - type: z.literal('audio'), - /** - * The base64-encoded audio data. - */ - data: z.string().base64(), - /** - * The MIME type of the audio. Different providers may support different audio types. - */ - mimeType: z.string(), - }) - .passthrough(); - -/** - * The contents of a resource, embedded into a prompt or tool call result. - */ -export const EmbeddedResourceSchema = z - .object({ - type: z.literal('resource'), - resource: z.union([TextResourceContentsSchema, BlobResourceContentsSchema]), - }) - .passthrough(); - -/** - * Describes a message returned as part of a prompt. - */ -export const PromptMessageSchema = z - .object({ - role: z.enum(['user', 'assistant']), - content: z.union([ - TextContentSchema, - ImageContentSchema, - AudioContentSchema, - EmbeddedResourceSchema, - ]), - }) - .passthrough(); - -/** - * The server's response to a prompts/get request from the client. - */ -export const GetPromptResultSchema = ResultSchema.extend({ - /** - * An optional description for the prompt. - */ - description: z.optional(z.string()), - messages: z.array(PromptMessageSchema), -}); - -/** - * An optional notification from the server to the client, informing it that the list of prompts it offers has changed. This may be issued by servers without any previous subscription from the client. - */ -export const PromptListChangedNotificationSchema = NotificationSchema.extend({ - method: z.literal('notifications/prompts/list_changed'), -}); - -/* Tools */ -/** - * Definition for a tool the client can call. - */ -export const ToolSchema = z - .object({ - /** - * The name of the tool. - */ - name: z.string(), - /** - * A human-readable description of the tool. - */ - description: z.optional(z.string()), - /** - * A JSON Schema object defining the expected parameters for the tool. - */ - inputSchema: z - .object({ - type: z.literal('object'), - properties: z.optional(z.object({}).passthrough()), - }) - .passthrough(), - }) - .passthrough(); - -/** - * Sent from the client to request a list of tools the server has. - */ -export const ListToolsRequestSchema = PaginatedRequestSchema.extend({ - method: z.literal('tools/list'), -}); - -/** - * The server's response to a tools/list request from the client. - */ -export const ListToolsResultSchema = PaginatedResultSchema.extend({ - tools: z.array(ToolSchema), -}); - -/** - * The server's response to a tool call. - */ -export const CallToolResultSchema = ResultSchema.extend({ - content: z.array( - z.union([ - TextContentSchema, - ImageContentSchema, - AudioContentSchema, - EmbeddedResourceSchema, - ]) - ), - isError: z.boolean().default(false).optional(), -}); - -/** - * CallToolResultSchema extended with backwards compatibility to protocol version 2024-10-07. - */ -export const CompatibilityCallToolResultSchema = CallToolResultSchema.or( - ResultSchema.extend({ - toolResult: z.unknown(), - }) -); - -/** - * Used by the client to invoke a tool provided by the server. - */ -export const CallToolRequestSchema = RequestSchema.extend({ - method: z.literal('tools/call'), - params: BaseRequestParamsSchema.extend({ - name: z.string(), - arguments: z.optional(z.record(z.string(), z.unknown())), - }), -}); - -/** - * An optional notification from the server to the client, informing it that the list of tools it offers has changed. This may be issued by servers without any previous subscription from the client. - */ -export const ToolListChangedNotificationSchema = NotificationSchema.extend({ - method: z.literal('notifications/tools/list_changed'), -}); - -/* Logging */ -/** - * The severity of a log message. - */ -export const LoggingLevelSchema = z.enum([ - 'debug', - 'info', - 'notice', - 'warning', - 'error', - 'critical', - 'alert', - 'emergency', -]); - -/** - * A request from the client to the server, to enable or adjust logging. - */ -export const SetLevelRequestSchema = RequestSchema.extend({ - method: z.literal('logging/setLevel'), - params: BaseRequestParamsSchema.extend({ - /** - * The level of logging that the client wants to receive from the server. The server should send all logs at this level and higher (i.e., more severe) to the client as notifications/logging/message. - */ - level: LoggingLevelSchema, - }), -}); - -/** - * Notification of a log message passed from server to client. If no logging/setLevel request has been sent from the client, the server MAY decide which messages to send automatically. - */ -export const LoggingMessageNotificationSchema = NotificationSchema.extend({ - method: z.literal('notifications/message'), - params: BaseNotificationParamsSchema.extend({ - /** - * The severity of this log message. - */ - level: LoggingLevelSchema, - /** - * An optional name of the logger issuing this message. - */ - logger: z.optional(z.string()), - /** - * The data to be logged, such as a string message or an object. Any JSON serializable type is allowed here. - */ - data: z.unknown(), - }), -}); - -/* Sampling */ -/** - * Hints to use for model selection. - */ -export const ModelHintSchema = z - .object({ - /** - * A hint for a model name. - */ - name: z.string().optional(), - }) - .passthrough(); - -/** - * The server's preferences for model selection, requested of the client during sampling. - */ -export const ModelPreferencesSchema = z - .object({ - /** - * Optional hints to use for model selection. - */ - hints: z.optional(z.array(ModelHintSchema)), - /** - * How much to prioritize cost when selecting a model. - */ - costPriority: z.optional(z.number().min(0).max(1)), - /** - * How much to prioritize sampling speed (latency) when selecting a model. - */ - speedPriority: z.optional(z.number().min(0).max(1)), - /** - * How much to prioritize intelligence and capabilities when selecting a model. - */ - intelligencePriority: z.optional(z.number().min(0).max(1)), - }) - .passthrough(); - -/** - * Describes a message issued to or received from an LLM API. - */ -export const SamplingMessageSchema = z - .object({ - role: z.enum(['user', 'assistant']), - content: z.union([ - TextContentSchema, - ImageContentSchema, - AudioContentSchema, - ]), - }) - .passthrough(); - -/** - * A request from the server to sample an LLM via the client. The client has full discretion over which model to select. The client should also inform the user before beginning sampling, to allow them to inspect the request (human in the loop) and decide whether to approve it. - */ -export const CreateMessageRequestSchema = RequestSchema.extend({ - method: z.literal('sampling/createMessage'), - params: BaseRequestParamsSchema.extend({ - messages: z.array(SamplingMessageSchema), - /** - * An optional system prompt the server wants to use for sampling. The client MAY modify or omit this prompt. - */ - systemPrompt: z.optional(z.string()), - /** - * A request to include context from one or more MCP servers (including the caller), to be attached to the prompt. The client MAY ignore this request. - */ - includeContext: z.optional(z.enum(['none', 'thisServer', 'allServers'])), - temperature: z.optional(z.number()), - /** - * The maximum number of tokens to sample, as requested by the server. The client MAY choose to sample fewer tokens than requested. - */ - maxTokens: z.number().int(), - stopSequences: z.optional(z.array(z.string())), - /** - * Optional metadata to pass through to the LLM provider. The format of this metadata is provider-specific. - */ - metadata: z.optional(z.object({}).passthrough()), - /** - * The server's preferences for which model to select. - */ - modelPreferences: z.optional(ModelPreferencesSchema), - }), -}); - -/** - * The client's response to a sampling/create_message request from the server. The client should inform the user before returning the sampled message, to allow them to inspect the response (human in the loop) and decide whether to allow the server to see it. - */ -export const CreateMessageResultSchema = ResultSchema.extend({ - /** - * The name of the model that generated the message. - */ - model: z.string(), - /** - * The reason why sampling stopped. - */ - stopReason: z.optional( - z.enum(['endTurn', 'stopSequence', 'maxTokens']).or(z.string()) - ), - role: z.enum(['user', 'assistant']), - content: z.discriminatedUnion('type', [ - TextContentSchema, - ImageContentSchema, - AudioContentSchema, - ]), -}); - -/* Autocomplete */ -/** - * A reference to a resource or resource template definition. - */ -export const ResourceReferenceSchema = z - .object({ - type: z.literal('ref/resource'), - /** - * The URI or URI template of the resource. - */ - uri: z.string(), - }) - .passthrough(); - -/** - * Identifies a prompt. - */ -export const PromptReferenceSchema = z - .object({ - type: z.literal('ref/prompt'), - /** - * The name of the prompt or prompt template - */ - name: z.string(), - }) - .passthrough(); - -/** - * A request from the client to the server, to ask for completion options. - */ -export const CompleteRequestSchema = RequestSchema.extend({ - method: z.literal('completion/complete'), - params: BaseRequestParamsSchema.extend({ - ref: z.union([PromptReferenceSchema, ResourceReferenceSchema]), - /** - * The argument's information - */ - argument: z - .object({ - /** - * The name of the argument - */ - name: z.string(), - /** - * The value of the argument to use for completion matching. - */ - value: z.string(), - }) - .passthrough(), - }), -}); - -/** - * The server's response to a completion/complete request - */ -export const CompleteResultSchema = ResultSchema.extend({ - completion: z - .object({ - /** - * An array of completion values. Must not exceed 100 items. - */ - values: z.array(z.string()).max(100), - /** - * The total number of completion options available. This can exceed the number of values actually sent in the response. - */ - total: z.optional(z.number().int()), - /** - * Indicates whether there are additional completion options beyond those provided in the current response, even if the exact total is unknown. - */ - hasMore: z.optional(z.boolean()), - }) - .passthrough(), -}); - -/* Roots */ -/** - * Represents a root directory or file that the server can operate on. - */ -export const RootSchema = z - .object({ - /** - * The URI identifying the root. This *must* start with file:// for now. - */ - uri: z.string().startsWith('file://'), - /** - * An optional name for the root. - */ - name: z.optional(z.string()), - }) - .passthrough(); - -/** - * Sent from the server to request a list of root URIs from the client. - */ -export const ListRootsRequestSchema = RequestSchema.extend({ - method: z.literal('roots/list'), -}); - -/** - * The client's response to a roots/list request from the server. - */ -export const ListRootsResultSchema = ResultSchema.extend({ - roots: z.array(RootSchema), -}); - -/** - * A notification from the client to the server, informing it that the list of roots has changed. - */ -export const RootsListChangedNotificationSchema = NotificationSchema.extend({ - method: z.literal('notifications/roots/list_changed'), -}); - -/* Client messages */ -export const ClientRequestSchema = z.union([ - PingRequestSchema, - InitializeRequestSchema, - CompleteRequestSchema, - SetLevelRequestSchema, - GetPromptRequestSchema, - ListPromptsRequestSchema, - ListResourcesRequestSchema, - ListResourceTemplatesRequestSchema, - ReadResourceRequestSchema, - SubscribeRequestSchema, - UnsubscribeRequestSchema, - CallToolRequestSchema, - ListToolsRequestSchema, -]); - -export const ClientNotificationSchema = z.union([ - CancelledNotificationSchema, - ProgressNotificationSchema, - InitializedNotificationSchema, - RootsListChangedNotificationSchema, -]); - -export const ClientResultSchema = z.union([ - EmptyResultSchema, - CreateMessageResultSchema, - ListRootsResultSchema, -]); - -/* Server messages */ -export const ServerRequestSchema = z.union([ - PingRequestSchema, - CreateMessageRequestSchema, - ListRootsRequestSchema, -]); - -export const ServerNotificationSchema = z.union([ - CancelledNotificationSchema, - ProgressNotificationSchema, - LoggingMessageNotificationSchema, - ResourceUpdatedNotificationSchema, - ResourceListChangedNotificationSchema, - ToolListChangedNotificationSchema, - PromptListChangedNotificationSchema, -]); - -export const ServerResultSchema = z.union([ - EmptyResultSchema, - InitializeResultSchema, - CompleteResultSchema, - GetPromptResultSchema, - ListPromptsResultSchema, - ListResourcesResultSchema, - ListResourceTemplatesResultSchema, - ReadResourceResultSchema, - CallToolResultSchema, - ListToolsResultSchema, -]); - -export class McpError extends Error { - constructor( - public readonly code: number, - message: string, - public readonly data?: unknown - ) { - super(`MCP error ${code}: ${message}`); - this.name = 'McpError'; - } -} - -type Primitive = string | number | boolean | bigint | null | undefined; -type Flatten = T extends Primitive - ? T - : T extends Array - ? Array> - : T extends Set - ? Set> - : T extends Map - ? Map, Flatten> - : T extends object - ? { [K in keyof T]: Flatten } - : T; - -type Infer = Flatten>; - -/* JSON-RPC types */ -export type ProgressToken = Infer; -export type Cursor = Infer; -export type Request = Infer; -export type Notification = Infer; -export type Result = Infer; -export type RequestId = Infer; -export type JSONRPCRequest = Infer; -export type JSONRPCNotification = Infer; -export type JSONRPCResponse = Infer; -export type JSONRPCError = Infer; -export type JSONRPCMessage = Infer; - -/* Empty result */ -export type EmptyResult = Infer; - -/* Cancellation */ -export type CancelledNotification = Infer; - -/* Initialization */ -export type Implementation = Infer; -export type ClientCapabilities = Infer; -export type InitializeRequest = Infer; -export type ServerCapabilities = Infer; -export type InitializeResult = Infer; -export type InitializedNotification = Infer< - typeof InitializedNotificationSchema ->; - -/* Ping */ -export type PingRequest = Infer; - -/* Progress notifications */ -export type Progress = Infer; -export type ProgressNotification = Infer; - -/* Pagination */ -export type PaginatedRequest = Infer; -export type PaginatedResult = Infer; - -/* Resources */ -export type ResourceContents = Infer; -export type TextResourceContents = Infer; -export type BlobResourceContents = Infer; -export type Resource = Infer; -export type ResourceTemplate = Infer; -export type ListResourcesRequest = Infer; -export type ListResourcesResult = Infer; -export type ListResourceTemplatesRequest = Infer< - typeof ListResourceTemplatesRequestSchema ->; -export type ListResourceTemplatesResult = Infer< - typeof ListResourceTemplatesResultSchema ->; -export type ReadResourceRequest = Infer; -export type ReadResourceResult = Infer; -export type ResourceListChangedNotification = Infer< - typeof ResourceListChangedNotificationSchema ->; -export type SubscribeRequest = Infer; -export type UnsubscribeRequest = Infer; -export type ResourceUpdatedNotification = Infer< - typeof ResourceUpdatedNotificationSchema ->; - -/* Prompts */ -export type PromptArgument = Infer; -export type Prompt = Infer; -export type ListPromptsRequest = Infer; -export type ListPromptsResult = Infer; -export type GetPromptRequest = Infer; -export type TextContent = Infer; -export type ImageContent = Infer; -export type AudioContent = Infer; -export type EmbeddedResource = Infer; -export type PromptMessage = Infer; -export type GetPromptResult = Infer; -export type PromptListChangedNotification = Infer< - typeof PromptListChangedNotificationSchema ->; - -/* Tools */ -export type Tool = Infer; -export type ListToolsRequest = Infer; -export type ListToolsResult = Infer; -export type CallToolResult = Infer; -export type CompatibilityCallToolResult = Infer< - typeof CompatibilityCallToolResultSchema ->; -export type CallToolRequest = Infer; -export type ToolListChangedNotification = Infer< - typeof ToolListChangedNotificationSchema ->; - -/* Logging */ -export type LoggingLevel = Infer; -export type SetLevelRequest = Infer; -export type LoggingMessageNotification = Infer< - typeof LoggingMessageNotificationSchema ->; - -/* Sampling */ -export type SamplingMessage = Infer; -export type CreateMessageRequest = Infer; -export type CreateMessageResult = Infer; - -/* Autocomplete */ -export type ResourceReference = Infer; -export type PromptReference = Infer; -export type CompleteRequest = Infer; -export type CompleteResult = Infer; - -/* Roots */ -export type Root = Infer; -export type ListRootsRequest = Infer; -export type ListRootsResult = Infer; -export type RootsListChangedNotification = Infer< - typeof RootsListChangedNotificationSchema ->; - -/* Client messages */ -export type ClientRequest = Infer; -export type ClientNotification = Infer; -export type ClientResult = Infer; - -/* Server messages */ -export type ServerRequest = Infer; -export type ServerNotification = Infer; -export type ServerResult = Infer; diff --git a/libraries/nestjs-libraries/src/openai/openai.service.ts b/libraries/nestjs-libraries/src/openai/openai.service.ts index eb2999d5..7e477892 100644 --- a/libraries/nestjs-libraries/src/openai/openai.service.ts +++ b/libraries/nestjs-libraries/src/openai/openai.service.ts @@ -227,34 +227,45 @@ export class OpenaiService { } async generateSlidesFromText(text: string) { - const message = `You are an assistant that takes a text and break it into slides, each slide should have an image prompt and voice text to be later used to generate a video and voice, image prompt should capture the essence of the slide and also have a back dark gradient on top, image prompt should not contain text in the picture, generate between 3-5 slides maximum`; - return ( - ( - await openai.chat.completions.parse({ - model: 'gpt-4.1', - messages: [ - { - role: 'system', - content: message, - }, - { - role: 'user', - content: text, - }, - ], - response_format: zodResponseFormat( - z.object({ - slides: z.array( + for (let i = 0; i < 3; i++) { + try { + const message = `You are an assistant that takes a text and break it into slides, each slide should have an image prompt and voice text to be later used to generate a video and voice, image prompt should capture the essence of the slide and also have a back dark gradient on top, image prompt should not contain text in the picture, generate between 3-5 slides maximum`; + const parse = + ( + await openai.chat.completions.parse({ + model: 'gpt-4.1', + messages: [ + { + role: 'system', + content: message, + }, + { + role: 'user', + content: text, + }, + ], + response_format: zodResponseFormat( z.object({ - imagePrompt: z.string(), - voiceText: z.string(), - }) + slides: z + .array( + z.object({ + imagePrompt: z.string(), + voiceText: z.string(), + }) + ) + .describe('an array of slides'), + }), + 'slides' ), - }), - 'slides' - ), - }) - ).choices[0].message.parsed?.slides || [] - ); + }) + ).choices[0].message.parsed?.slides || []; + + return parse; + } catch (err) { + console.log(err); + } + } + + return []; } } diff --git a/libraries/nestjs-libraries/src/videos/images-slides/images.slides.ts b/libraries/nestjs-libraries/src/videos/images-slides/images.slides.ts index e7fd1cdc..688d1efd 100644 --- a/libraries/nestjs-libraries/src/videos/images-slides/images.slides.ts +++ b/libraries/nestjs-libraries/src/videos/images-slides/images.slides.ts @@ -1,6 +1,9 @@ import { OpenaiService } from '@gitroom/nestjs-libraries/openai/openai.service'; import { - ExposeVideoFunction, URL, Video, VideoAbstract + ExposeVideoFunction, + URL, + Video, + VideoAbstract, } from '@gitroom/nestjs-libraries/videos/video.interface'; import { chunk } from 'lodash'; import Transloadit from 'transloadit'; @@ -12,6 +15,7 @@ import { stringifySync } from 'subtitle'; import pLimit from 'p-limit'; import { FalService } from '@gitroom/nestjs-libraries/openai/fal.service'; import { IsString } from 'class-validator'; +import { JSONSchema } from 'class-validator-jsonschema'; const limit = pLimit(2); const transloadit = new Transloadit({ @@ -24,10 +28,16 @@ async function getAudioDuration(buffer: Buffer): Promise { return metadata.format.duration || 0; } -class Params { +class ImagesSlidesParams { + @JSONSchema({ + description: 'Elevenlabs voice id, use a special tool to get it, this is a required filed', + }) @IsString() voice: string; + @JSONSchema({ + description: 'Simple string of the prompt, not a json', + }) @IsString() prompt: string; } @@ -35,8 +45,10 @@ class Params { @Video({ identifier: 'image-text-slides', title: 'Image Text Slides', - description: 'Generate videos slides from images and text', + description: 'Generate videos slides from images and text, Don\'t break down the slides, provide only the first slide information', placement: 'text-to-image', + tools: [{ functionName: 'loadVoices', output: 'voice id' }], + dto: ImagesSlidesParams, trial: true, available: !!process.env.ELEVENSLABS_API_KEY && @@ -45,8 +57,8 @@ class Params { !!process.env.OPENAI_API_KEY && !!process.env.FAL_KEY, }) -export class ImagesSlides extends VideoAbstract { - override dto = Params; +export class ImagesSlides extends VideoAbstract { + override dto = ImagesSlidesParams; private storage = UploadFactory.createStorage(); constructor( private _openaiService: OpenaiService, @@ -57,7 +69,7 @@ export class ImagesSlides extends VideoAbstract { async process( output: 'vertical' | 'horizontal', - customParams: Params + customParams: ImagesSlidesParams ): Promise { const list = await this._openaiService.generateSlidesFromText( customParams.prompt @@ -153,6 +165,8 @@ export class ImagesSlides extends VideoAbstract { { format: 'SRT' } ); + console.log(split); + const { results } = await transloadit.createAssembly({ uploads: { 'subtitles.srt': srt, diff --git a/libraries/nestjs-libraries/src/videos/veo3/veo3.ts b/libraries/nestjs-libraries/src/videos/veo3/veo3.ts index 6af9c552..84e19d39 100644 --- a/libraries/nestjs-libraries/src/videos/veo3/veo3.ts +++ b/libraries/nestjs-libraries/src/videos/veo3/veo3.ts @@ -14,7 +14,7 @@ class Image { @IsString() path: string; } -class Params { +class Veo3Params { @IsString() prompt: string; @@ -30,14 +30,16 @@ class Params { title: 'Veo3 (Audio + Video)', description: 'Generate videos with the most advanced video model.', placement: 'text-to-image', + dto: Veo3Params, + tools: [], trial: false, available: !!process.env.KIEAI_API_KEY, }) -export class Veo3 extends VideoAbstract { - override dto = Params; +export class Veo3 extends VideoAbstract { + override dto = Veo3Params; async process( output: 'vertical' | 'horizontal', - customParams: Params + customParams: Veo3Params ): Promise { const value = await ( await fetch('https://api.kie.ai/api/v1/veo/generate', { diff --git a/libraries/nestjs-libraries/src/videos/video.interface.ts b/libraries/nestjs-libraries/src/videos/video.interface.ts index ac6335f8..a9af73ce 100644 --- a/libraries/nestjs-libraries/src/videos/video.interface.ts +++ b/libraries/nestjs-libraries/src/videos/video.interface.ts @@ -30,18 +30,24 @@ export interface VideoParams { identifier: string; title: string; description: string; + dto: any; placement: 'text-to-image' | 'image-to-video' | 'video-to-video'; + tools: { functionName: string; output: string }[]; available: boolean; trial: boolean; } -export function ExposeVideoFunction() { +export function ExposeVideoFunction(description?: string) { return function ( target: any, propertyKey: string, descriptor: PropertyDescriptor ) { - Reflect.defineMetadata('video-function', 'true', descriptor.value); + Reflect.defineMetadata( + 'video-function', + description || 'true', + descriptor.value + ); }; } diff --git a/libraries/nestjs-libraries/src/videos/video.manager.ts b/libraries/nestjs-libraries/src/videos/video.manager.ts index 1be82140..2dd28359 100644 --- a/libraries/nestjs-libraries/src/videos/video.manager.ts +++ b/libraries/nestjs-libraries/src/videos/video.manager.ts @@ -10,16 +10,28 @@ import { export class VideoManager { constructor(private _moduleRef: ModuleRef) {} - getAllVideos(): any[] { - return (Reflect.getMetadata('video', VideoAbstract) || []).filter((f: any) => f.available).map( - (p: any) => ({ + getAllVideos(): { + identifier: string; + title: string; + dto: any; + description: string; + target: VideoAbstract, + tools: { functionName: string; output: string }[]; + placement: string; + trial: boolean; + }[] { + return (Reflect.getMetadata('video', VideoAbstract) || []) + .filter((f: any) => f.available) + .map((p: any) => ({ + target: p.target, identifier: p.identifier, title: p.title, + tools: p.tools, + dto: p.dto, description: p.description, placement: p.placement, trial: p.trial, - }) - ); + })); } checkAvailableVideoFunction(method: any) { diff --git a/libraries/react-shared-libraries/src/translation/locales/ar/translation.json b/libraries/react-shared-libraries/src/translation/locales/ar/translation.json index 773bea3b..401bbd36 100644 --- a/libraries/react-shared-libraries/src/translation/locales/ar/translation.json +++ b/libraries/react-shared-libraries/src/translation/locales/ar/translation.json @@ -13,6 +13,7 @@ "video_made_with_ai": "فيديو تم إنشاؤه بالذكاء الاصطناعي", "please_add_at_least": "يرجى إضافة 20 حرفًا على الأقل", "send_invitation_via_email": "إرسال دعوة عبر البريد الإلكتروني؟", + "global_settings": "الإعدادات العامة", "copy_id": "نسخ معرف القناة", "team_members": "أعضاء الفريق", "invite_your_assistant_or_team_member_to_manage_your_account": "ادعُ مساعدك أو أحد أعضاء فريقك لإدارة حسابك", @@ -41,7 +42,7 @@ "reveal": "إظهار", "copy_key": "نسخ المفتاح", "mcp": "MCP", - "connect_your_mcp_client_to_postiz_to_schedule_your_posts_faster": "قم بربط عميل MCP الخاص بك بـ Postiz لجدولة منشوراتك بشكل أسرع!", + "connect_your_mcp_client_to_postiz_to_schedule_your_posts_faster": "قم بتوصيل خادم Postiz MCP بعميلك (بث HTTP) لجدولة منشوراتك بشكل أسرع!", "share_with_a_client": "مشاركة مع عميل", "post": "منشور", "comments": "تعليقات", diff --git a/libraries/react-shared-libraries/src/translation/locales/bn/translation.json b/libraries/react-shared-libraries/src/translation/locales/bn/translation.json index 5ff608b8..86decb2b 100644 --- a/libraries/react-shared-libraries/src/translation/locales/bn/translation.json +++ b/libraries/react-shared-libraries/src/translation/locales/bn/translation.json @@ -13,6 +13,7 @@ "video_made_with_ai": "এআই দিয়ে তৈরি ভিডিও", "please_add_at_least": "অনুগ্রহ করে অন্তত ২০টি অক্ষর যোগ করুন", "send_invitation_via_email": "ইমেইলের মাধ্যমে আমন্ত্রণ পাঠান?", + "global_settings": "গ্লোবাল সেটিংস", "copy_id": "চ্যানেল আইডি কপি করুন", "team_members": "দলের সদস্যরা", "invite_your_assistant_or_team_member_to_manage_your_account": "আপনার অ্যাকাউন্ট পরিচালনা করতে আপনার সহায়ক বা দলের সদস্যকে আমন্ত্রণ জানান", @@ -41,7 +42,7 @@ "reveal": "প্রকাশ করুন", "copy_key": "কী কপি করুন", "mcp": "MCP", - "connect_your_mcp_client_to_postiz_to_schedule_your_posts_faster": "আপনার পোস্টগুলি দ্রুত সময়সূচী করতে আপনার MCP ক্লায়েন্টকে Postiz-এর সাথে সংযুক্ত করুন!", + "connect_your_mcp_client_to_postiz_to_schedule_your_posts_faster": "আপনার ক্লায়েন্টকে (Http স্ট্রিমিং) Postiz MCP সার্ভারের সাথে সংযুক্ত করুন, যাতে আরও দ্রুত আপনার পোস্টগুলো নির্ধারণ করতে পারেন!", "share_with_a_client": "একটি ক্লায়েন্টের সাথে শেয়ার করুন", "post": "পোস্ট", "comments": "মন্তব্য", diff --git a/libraries/react-shared-libraries/src/translation/locales/de/translation.json b/libraries/react-shared-libraries/src/translation/locales/de/translation.json index 964bb68a..6219094d 100644 --- a/libraries/react-shared-libraries/src/translation/locales/de/translation.json +++ b/libraries/react-shared-libraries/src/translation/locales/de/translation.json @@ -13,6 +13,7 @@ "video_made_with_ai": "Video mit KI erstellt", "please_add_at_least": "Bitte füge mindestens 20 Zeichen hinzu", "send_invitation_via_email": "Einladung per E-Mail senden?", + "global_settings": "Globale Einstellungen", "copy_id": "Kanal-ID kopieren", "team_members": "Teammitglieder", "invite_your_assistant_or_team_member_to_manage_your_account": "Laden Sie Ihren Assistenten oder Ihr Teammitglied ein, Ihr Konto zu verwalten", @@ -41,7 +42,7 @@ "reveal": "Anzeigen", "copy_key": "Schlüssel kopieren", "mcp": "MCP", - "connect_your_mcp_client_to_postiz_to_schedule_your_posts_faster": "Verbinden Sie Ihren MCP-Client mit Postiz, um Ihre Beiträge schneller zu planen!", + "connect_your_mcp_client_to_postiz_to_schedule_your_posts_faster": "Verbinden Sie den Postiz MCP-Server mit Ihrem Client (HTTP-Streaming), um Ihre Beiträge schneller zu planen!", "share_with_a_client": "Mit einem Kunden teilen", "post": "Beitrag", "comments": "Kommentare", diff --git a/libraries/react-shared-libraries/src/translation/locales/en/translation.json b/libraries/react-shared-libraries/src/translation/locales/en/translation.json index da85902b..dec788be 100644 --- a/libraries/react-shared-libraries/src/translation/locales/en/translation.json +++ b/libraries/react-shared-libraries/src/translation/locales/en/translation.json @@ -42,7 +42,7 @@ "reveal": "Reveal", "copy_key": "Copy Key", "mcp": "MCP", - "connect_your_mcp_client_to_postiz_to_schedule_your_posts_faster": "Connect your MCP client to Postiz to schedule your posts faster!", + "connect_your_mcp_client_to_postiz_to_schedule_your_posts_faster": "Connect Postiz MCP server to your client (Http streaming) to schedule your posts faster!", "share_with_a_client": "Share with a client", "post": "Post", "comments": "Comments", diff --git a/libraries/react-shared-libraries/src/translation/locales/es/translation.json b/libraries/react-shared-libraries/src/translation/locales/es/translation.json index 6c8b8303..d418fff1 100644 --- a/libraries/react-shared-libraries/src/translation/locales/es/translation.json +++ b/libraries/react-shared-libraries/src/translation/locales/es/translation.json @@ -13,6 +13,7 @@ "video_made_with_ai": "Video hecho con IA", "please_add_at_least": "Por favor, añade al menos 20 caracteres", "send_invitation_via_email": "¿Enviar invitación por correo electrónico?", + "global_settings": "Configuración global", "copy_id": "Copiar ID del canal", "team_members": "Miembros del equipo", "invite_your_assistant_or_team_member_to_manage_your_account": "Invita a tu asistente o miembro del equipo para que gestione tu cuenta", @@ -41,7 +42,7 @@ "reveal": "Revelar", "copy_key": "Copiar clave", "mcp": "MCP", - "connect_your_mcp_client_to_postiz_to_schedule_your_posts_faster": "¡Conecta tu cliente MCP a Postiz para programar tus publicaciones más rápido!", + "connect_your_mcp_client_to_postiz_to_schedule_your_posts_faster": "¡Conecta el servidor MCP de Postiz a tu cliente (transmisión HTTP) para programar tus publicaciones más rápido!", "share_with_a_client": "Compartir con un cliente", "post": "Publicar", "comments": "Comentarios", diff --git a/libraries/react-shared-libraries/src/translation/locales/fr/translation.json b/libraries/react-shared-libraries/src/translation/locales/fr/translation.json index b6222c42..be62c488 100644 --- a/libraries/react-shared-libraries/src/translation/locales/fr/translation.json +++ b/libraries/react-shared-libraries/src/translation/locales/fr/translation.json @@ -13,6 +13,7 @@ "video_made_with_ai": "Vidéo réalisée avec l'IA", "please_add_at_least": "Veuillez ajouter au moins 20 caractères", "send_invitation_via_email": "Envoyer l'invitation par e-mail ?", + "global_settings": "Paramètres globaux", "copy_id": "Copier l'identifiant de la chaîne", "team_members": "Membres de l'équipe", "invite_your_assistant_or_team_member_to_manage_your_account": "Invitez votre assistant ou un membre de votre équipe à gérer votre compte", @@ -41,7 +42,7 @@ "reveal": "Révéler", "copy_key": "Copier la clé", "mcp": "MCP", - "connect_your_mcp_client_to_postiz_to_schedule_your_posts_faster": "Connectez votre client MCP à Postiz pour planifier vos publications plus rapidement !", + "connect_your_mcp_client_to_postiz_to_schedule_your_posts_faster": "Connectez le serveur MCP de Postiz à votre client (streaming HTTP) pour programmer vos publications plus rapidement !", "share_with_a_client": "Partager avec un client", "post": "Publication", "comments": "Commentaires", diff --git a/libraries/react-shared-libraries/src/translation/locales/he/translation.json b/libraries/react-shared-libraries/src/translation/locales/he/translation.json index 5118179c..4b9a5221 100644 --- a/libraries/react-shared-libraries/src/translation/locales/he/translation.json +++ b/libraries/react-shared-libraries/src/translation/locales/he/translation.json @@ -13,6 +13,7 @@ "video_made_with_ai": "וידאו שנוצר באמצעות בינה מלאכותית", "please_add_at_least": "אנא הוסף לפחות 20 תווים", "send_invitation_via_email": "לשלוח הזמנה בדוא\"ל?", + "global_settings": "הגדרות כלליות", "copy_id": "העתק מזהה ערוץ", "team_members": "חברי צוות", "invite_your_assistant_or_team_member_to_manage_your_account": "הזמן את העוזר או חבר הצוות שלך לנהל את החשבון שלך", @@ -41,7 +42,7 @@ "reveal": "הצג", "copy_key": "העתק מפתח", "mcp": "MCP", - "connect_your_mcp_client_to_postiz_to_schedule_your_posts_faster": "חבר את לקוח ה-MCP שלך ל-Postiz כדי לתזמן את הפוסטים שלך מהר יותר!", + "connect_your_mcp_client_to_postiz_to_schedule_your_posts_faster": "חבר את שרת ה-MCP של Postiz ללקוח שלך (הזרמת Http) כדי לתזמן את הפוסטים שלך מהר יותר!", "share_with_a_client": "שתף עם לקוח", "post": "פוסט", "comments": "תגובות", diff --git a/libraries/react-shared-libraries/src/translation/locales/it/translation.json b/libraries/react-shared-libraries/src/translation/locales/it/translation.json index 5c07119f..6e5c0ffa 100644 --- a/libraries/react-shared-libraries/src/translation/locales/it/translation.json +++ b/libraries/react-shared-libraries/src/translation/locales/it/translation.json @@ -13,6 +13,7 @@ "video_made_with_ai": "Video realizzato con l'IA", "please_add_at_least": "Per favore aggiungi almeno 20 caratteri", "send_invitation_via_email": "Inviare l'invito via email?", + "global_settings": "Impostazioni globali", "copy_id": "Copia ID canale", "team_members": "Membri del team", "invite_your_assistant_or_team_member_to_manage_your_account": "Invita il tuo assistente o un membro del team a gestire il tuo account", @@ -41,7 +42,7 @@ "reveal": "Mostra", "copy_key": "Copia chiave", "mcp": "MCP", - "connect_your_mcp_client_to_postiz_to_schedule_your_posts_faster": "Collega il tuo client MCP a Postiz per programmare i tuoi post più velocemente!", + "connect_your_mcp_client_to_postiz_to_schedule_your_posts_faster": "Collega il server MCP di Postiz al tuo client (streaming Http) per programmare i tuoi post più velocemente!", "share_with_a_client": "Condividi con un cliente", "post": "Post", "comments": "Commenti", diff --git a/libraries/react-shared-libraries/src/translation/locales/ja/translation.json b/libraries/react-shared-libraries/src/translation/locales/ja/translation.json index 7a4f0f86..13b90bd3 100644 --- a/libraries/react-shared-libraries/src/translation/locales/ja/translation.json +++ b/libraries/react-shared-libraries/src/translation/locales/ja/translation.json @@ -13,6 +13,7 @@ "video_made_with_ai": "AIで作成された動画", "please_add_at_least": "少なくとも20文字を追加してください", "send_invitation_via_email": "メールで招待を送信しますか?", + "global_settings": "グローバル設定", "copy_id": "チャンネルIDをコピー", "team_members": "チームメンバー", "invite_your_assistant_or_team_member_to_manage_your_account": "アシスタントやチームメンバーを招待してアカウントを管理してもらいましょう", @@ -41,7 +42,7 @@ "reveal": "表示", "copy_key": "キーをコピー", "mcp": "MCP", - "connect_your_mcp_client_to_postiz_to_schedule_your_posts_faster": "MCPクライアントをPostizに接続して、投稿をより早くスケジューリングしましょう!", + "connect_your_mcp_client_to_postiz_to_schedule_your_posts_faster": "投稿をより迅速にスケジュールするために、Postiz MCPサーバーをクライアント(HTTPストリーミング)に接続しましょう!", "share_with_a_client": "クライアントと共有", "post": "投稿", "comments": "コメント", diff --git a/libraries/react-shared-libraries/src/translation/locales/ko/translation.json b/libraries/react-shared-libraries/src/translation/locales/ko/translation.json index ff45b904..1a00e650 100644 --- a/libraries/react-shared-libraries/src/translation/locales/ko/translation.json +++ b/libraries/react-shared-libraries/src/translation/locales/ko/translation.json @@ -13,6 +13,7 @@ "video_made_with_ai": "AI로 제작된 영상", "please_add_at_least": "최소 20자 이상 입력해 주세요", "send_invitation_via_email": "이메일로 초대장을 보내시겠습니까?", + "global_settings": "글로벌 설정", "copy_id": "채널 ID 복사", "team_members": "팀원", "invite_your_assistant_or_team_member_to_manage_your_account": "계정을 관리할 수 있도록 어시스턴트나 팀원을 초대하세요.", @@ -41,7 +42,7 @@ "reveal": "표시", "copy_key": "키 복사", "mcp": "MCP", - "connect_your_mcp_client_to_postiz_to_schedule_your_posts_faster": "MCP 클라이언트를 Postiz에 연결하여 게시물을 더 빠르게 예약하세요!", + "connect_your_mcp_client_to_postiz_to_schedule_your_posts_faster": "게시물을 더 빠르게 예약하려면 Postiz MCP 서버를 클라이언트에 연결하세요(Http 스트리밍).", "share_with_a_client": "클라이언트와 공유", "post": "게시물", "comments": "댓글", diff --git a/libraries/react-shared-libraries/src/translation/locales/pt/translation.json b/libraries/react-shared-libraries/src/translation/locales/pt/translation.json index effdbb2e..e5aa1829 100644 --- a/libraries/react-shared-libraries/src/translation/locales/pt/translation.json +++ b/libraries/react-shared-libraries/src/translation/locales/pt/translation.json @@ -13,6 +13,7 @@ "video_made_with_ai": "Vídeo feito com IA", "please_add_at_least": "Por favor, adicione pelo menos 20 caracteres", "send_invitation_via_email": "Enviar convite por e-mail?", + "global_settings": "Configurações Globais", "copy_id": "Copiar ID do canal", "team_members": "Membros da equipe", "invite_your_assistant_or_team_member_to_manage_your_account": "Convide seu assistente ou membro da equipe para gerenciar sua conta", @@ -41,7 +42,7 @@ "reveal": "Revelar", "copy_key": "Copiar chave", "mcp": "MCP", - "connect_your_mcp_client_to_postiz_to_schedule_your_posts_faster": "Conecte seu cliente MCP ao Postiz para agendar seus posts mais rápido!", + "connect_your_mcp_client_to_postiz_to_schedule_your_posts_faster": "Conecte o servidor MCP do Postiz ao seu cliente (transmissão HTTP) para agendar suas postagens mais rapidamente!", "share_with_a_client": "Compartilhar com um cliente", "post": "Postar", "comments": "Comentários", diff --git a/libraries/react-shared-libraries/src/translation/locales/ru/translation.json b/libraries/react-shared-libraries/src/translation/locales/ru/translation.json index 38355f1a..8b29d9e5 100644 --- a/libraries/react-shared-libraries/src/translation/locales/ru/translation.json +++ b/libraries/react-shared-libraries/src/translation/locales/ru/translation.json @@ -13,6 +13,7 @@ "video_made_with_ai": "Видео создано с помощью ИИ", "please_add_at_least": "Пожалуйста, добавьте не менее 20 символов", "send_invitation_via_email": "Отправить приглашение по электронной почте?", + "global_settings": "Глобальные настройки", "copy_id": "Скопировать ID канала", "team_members": "Члены команды", "invite_your_assistant_or_team_member_to_manage_your_account": "Пригласите помощника или члена команды для управления вашим аккаунтом", @@ -41,7 +42,7 @@ "reveal": "Показать", "copy_key": "Скопировать ключ", "mcp": "MCP", - "connect_your_mcp_client_to_postiz_to_schedule_your_posts_faster": "Подключите ваш MCP-клиент к Postiz, чтобы быстрее планировать публикации!", + "connect_your_mcp_client_to_postiz_to_schedule_your_posts_faster": "Подключите сервер Postiz MCP к вашему клиенту (HTTP-поток), чтобы быстрее планировать ваши публикации!", "share_with_a_client": "Поделиться с клиентом", "post": "Пост", "comments": "Комментарии", diff --git a/libraries/react-shared-libraries/src/translation/locales/tr/translation.json b/libraries/react-shared-libraries/src/translation/locales/tr/translation.json index 2cdf10f2..e3877c04 100644 --- a/libraries/react-shared-libraries/src/translation/locales/tr/translation.json +++ b/libraries/react-shared-libraries/src/translation/locales/tr/translation.json @@ -13,6 +13,7 @@ "video_made_with_ai": "Video yapay zeka ile oluşturuldu", "please_add_at_least": "Lütfen en az 20 karakter ekleyin", "send_invitation_via_email": "Davetiyeyi e-posta ile gönderilsin mi?", + "global_settings": "Genel Ayarlar", "copy_id": "Kanal Kimliğini Kopyala", "team_members": "Takım Üyeleri", "invite_your_assistant_or_team_member_to_manage_your_account": "Hesabınızı yönetmesi için asistanınızı veya takım üyenizi davet edin", @@ -41,7 +42,7 @@ "reveal": "Göster", "copy_key": "Anahtarı Kopyala", "mcp": "MCP", - "connect_your_mcp_client_to_postiz_to_schedule_your_posts_faster": "Gönderilerinizi daha hızlı planlamak için MCP istemcinizi Postiz'e bağlayın!", + "connect_your_mcp_client_to_postiz_to_schedule_your_posts_faster": "Gönderilerinizi daha hızlı planlamak için Postiz MCP sunucusunu istemcinize (Http akışı) bağlayın!", "share_with_a_client": "Bir müşteriyle paylaş", "post": "Gönderi", "comments": "Yorumlar", diff --git a/libraries/react-shared-libraries/src/translation/locales/vi/translation.json b/libraries/react-shared-libraries/src/translation/locales/vi/translation.json index 2ded9463..d0fe21b5 100644 --- a/libraries/react-shared-libraries/src/translation/locales/vi/translation.json +++ b/libraries/react-shared-libraries/src/translation/locales/vi/translation.json @@ -13,6 +13,7 @@ "video_made_with_ai": "Video được tạo bằng AI", "please_add_at_least": "Vui lòng thêm ít nhất 20 ký tự", "send_invitation_via_email": "Gửi lời mời qua email?", + "global_settings": "Cài đặt toàn cục", "copy_id": "Sao chép ID kênh", "team_members": "Thành viên nhóm", "invite_your_assistant_or_team_member_to_manage_your_account": "Mời trợ lý hoặc thành viên nhóm của bạn để quản lý tài khoản của bạn", @@ -41,7 +42,7 @@ "reveal": "Hiển thị", "copy_key": "Sao chép khóa", "mcp": "MCP", - "connect_your_mcp_client_to_postiz_to_schedule_your_posts_faster": "Kết nối khách hàng MCP của bạn với Postiz để lên lịch bài đăng nhanh hơn!", + "connect_your_mcp_client_to_postiz_to_schedule_your_posts_faster": "Kết nối máy chủ MCP của Postiz với máy khách của bạn (Http streaming) để lên lịch bài đăng nhanh hơn!", "share_with_a_client": "Chia sẻ với khách hàng", "post": "Bài đăng", "comments": "Bình luận", diff --git a/libraries/react-shared-libraries/src/translation/locales/zh/translation.json b/libraries/react-shared-libraries/src/translation/locales/zh/translation.json index a2b23da7..f1504054 100644 --- a/libraries/react-shared-libraries/src/translation/locales/zh/translation.json +++ b/libraries/react-shared-libraries/src/translation/locales/zh/translation.json @@ -13,6 +13,7 @@ "video_made_with_ai": "视频由AI制作", "please_add_at_least": "请至少添加20个字符", "send_invitation_via_email": "通过电子邮件发送邀请?", + "global_settings": "全局设置", "copy_id": "复制频道ID", "team_members": "团队成员", "invite_your_assistant_or_team_member_to_manage_your_account": "邀请你的助理或团队成员来管理你的账户", @@ -41,7 +42,7 @@ "reveal": "显示", "copy_key": "复制密钥", "mcp": "MCP", - "connect_your_mcp_client_to_postiz_to_schedule_your_posts_faster": "将你的MCP客户端连接到Postiz以更快地安排你的帖子!", + "connect_your_mcp_client_to_postiz_to_schedule_your_posts_faster": "将 Postiz MCP 服务器连接到您的客户端(Http 流式传输),以更快地安排您的帖子!", "share_with_a_client": "与客户分享", "post": "帖子", "comments": "评论", diff --git a/package.json b/package.json index 453721c3..c6b059a6 100644 --- a/package.json +++ b/package.json @@ -43,16 +43,16 @@ "test": "jest --coverage --detectOpenHandles --reporters=default --reporters=jest-junit" }, "dependencies": { - "@ag-ui/mastra": "0.1.0-next.1", - "@ai-sdk/openai": "^2.0.38", + "@ag-ui/mastra": "0.2.0", + "@ai-sdk/openai": "^2.0.52", "@atproto/api": "^0.15.15", "@aws-sdk/client-s3": "^3.787.0", "@aws-sdk/s3-request-presigner": "^3.787.0", "@casl/ability": "^6.5.0", - "@copilotkit/react-core": "^1.10.4", - "@copilotkit/react-textarea": "^1.10.4", - "@copilotkit/react-ui": "^1.10.4", - "@copilotkit/runtime": "^1.10.4", + "@copilotkit/react-core": "1.10.6", + "@copilotkit/react-textarea": "1.10.6", + "@copilotkit/react-ui": "1.10.6", + "@copilotkit/runtime": "1.10.6", "@hookform/resolvers": "^3.3.4", "@langchain/community": "^0.3.40", "@langchain/core": "^0.3.44", @@ -62,9 +62,9 @@ "@mantine/dates": "^5.10.5", "@mantine/hooks": "^5.10.5", "@mantine/modals": "^5.10.5", - "@mastra/core": "^0.18.0", - "@mastra/memory": "^0.15.3", - "@mastra/pg": "^0.16.1", + "@mastra/core": "^0.20.2", + "@mastra/memory": "^0.15.6", + "@mastra/pg": "^0.17.2", "@modelcontextprotocol/sdk": "^1.9.0", "@nestjs/cli": "10.0.2", "@nestjs/common": "^10.0.2", @@ -180,7 +180,7 @@ "node-telegram-bot-api": "^0.66.0", "nodemailer": "^6.9.15", "nostr-tools": "^2.10.4", - "openai": "^5.11.0", + "openai": "^6.2.0", "p-limit": "^3.1.0", "parse5": "^6.0.1", "polotno": "^2.10.5", @@ -236,7 +236,7 @@ "ws": "^8.18.0", "yargs": "^17.7.2", "yup": "^1.4.0", - "zod": "^4.1.11", + "zod": "^3.25.76", "zustand": "^5.0.5" }, "devDependencies": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index db90bfee..24c82437 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -10,11 +10,11 @@ importers: .: dependencies: '@ag-ui/mastra': - specifier: 0.1.0-next.1 - version: 0.1.0-next.1(@ag-ui/client@0.0.35)(@ag-ui/core@0.0.37)(@copilotkit/runtime@1.10.4(fa055d96d8525508353466ae4be6d904))(@mastra/core@0.18.0(effect@3.16.12)(openapi-types@12.1.3)(react@18.3.1)(zod@4.1.11))(effect@3.16.12)(openapi-types@12.1.3)(react@18.3.1)(zod@4.1.11) + specifier: 0.2.0 + version: 0.2.0(@ag-ui/client@0.0.35)(@ag-ui/core@0.0.37)(@copilotkit/runtime@1.10.6(2dd885fd6d864cd48ccb3462fd6e6538))(@mastra/core@0.20.2(effect@3.16.12)(openapi-types@12.1.3)(react@18.3.1)(zod@3.25.76))(effect@3.16.12)(openapi-types@12.1.3)(react@18.3.1)(zod@3.25.76) '@ai-sdk/openai': - specifier: ^2.0.38 - version: 2.0.38(zod@4.1.11) + specifier: ^2.0.52 + version: 2.0.52(zod@3.25.76) '@atproto/api': specifier: ^0.15.15 version: 0.15.27 @@ -28,32 +28,32 @@ importers: specifier: ^6.5.0 version: 6.7.3 '@copilotkit/react-core': - specifier: ^1.10.4 - version: 1.10.4(@types/react@18.3.1)(graphql@16.11.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 1.10.6 + version: 1.10.6(@types/react@18.3.1)(graphql@16.11.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@copilotkit/react-textarea': - specifier: ^1.10.4 - version: 1.10.4(@types/react-dom@18.3.0)(@types/react@18.3.1)(graphql@16.11.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 1.10.6 + version: 1.10.6(@types/react-dom@18.3.0)(@types/react@18.3.1)(graphql@16.11.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@copilotkit/react-ui': - specifier: ^1.10.4 - version: 1.10.4(@types/react@18.3.1)(graphql@16.11.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 1.10.6 + version: 1.10.6(@types/react@18.3.1)(graphql@16.11.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@copilotkit/runtime': - specifier: ^1.10.4 - version: 1.10.4(fa055d96d8525508353466ae4be6d904) + specifier: 1.10.6 + version: 1.10.6(2dd885fd6d864cd48ccb3462fd6e6538) '@hookform/resolvers': specifier: ^3.3.4 version: 3.10.0(react-hook-form@7.63.0(react@18.3.1)) '@langchain/community': specifier: ^0.3.40 - version: 0.3.56(c3fbdb3f617113dfdbdb8d19b781ee75) + version: 0.3.56(2aa44a6f0eae91dd43894a1563b4d7bf) '@langchain/core': specifier: ^0.3.44 - version: 0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.23.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.11)) + version: 0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@6.2.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76)) '@langchain/langgraph': specifier: ^0.2.63 - version: 0.2.74(@langchain/core@0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.23.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.11)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(zod-to-json-schema@3.24.6(zod@4.1.11)) + version: 0.2.74(@langchain/core@0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@6.2.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(zod-to-json-schema@3.24.6(zod@3.25.76)) '@langchain/openai': specifier: ^0.5.5 - version: 0.5.18(@langchain/core@0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.23.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.11)))(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + version: 0.5.18(@langchain/core@0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@6.2.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76)))(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) '@mantine/core': specifier: ^5.10.5 version: 5.10.5(@emotion/react@11.14.0(@types/react@18.3.1)(react@18.3.1))(@mantine/hooks@5.10.5(react@18.3.1))(@types/react@18.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -67,14 +67,14 @@ importers: specifier: ^5.10.5 version: 5.10.5(@mantine/core@5.10.5(@emotion/react@11.14.0(@types/react@18.3.1)(react@18.3.1))(@mantine/hooks@5.10.5(react@18.3.1))(@types/react@18.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@5.10.5(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@mastra/core': - specifier: ^0.18.0 - version: 0.18.0(effect@3.16.12)(openapi-types@12.1.3)(react@18.3.1)(zod@4.1.11) + specifier: ^0.20.2 + version: 0.20.2(effect@3.16.12)(openapi-types@12.1.3)(react@18.3.1)(zod@3.25.76) '@mastra/memory': - specifier: ^0.15.3 - version: 0.15.3(@mastra/core@0.18.0(effect@3.16.12)(openapi-types@12.1.3)(react@18.3.1)(zod@4.1.11))(react@18.3.1)(zod@4.1.11) + specifier: ^0.15.6 + version: 0.15.6(@mastra/core@0.20.2(effect@3.16.12)(openapi-types@12.1.3)(react@18.3.1)(zod@3.25.76))(react@18.3.1)(zod@3.25.76) '@mastra/pg': - specifier: ^0.16.1 - version: 0.16.1(@mastra/core@0.18.0(effect@3.16.12)(openapi-types@12.1.3)(react@18.3.1)(zod@4.1.11))(pg-query-stream@4.10.3(pg@8.16.3)) + specifier: ^0.17.2 + version: 0.17.2(@mastra/core@0.20.2(effect@3.16.12)(openapi-types@12.1.3)(react@18.3.1)(zod@3.25.76))(pg-query-stream@4.10.3(pg@8.16.3)) '@modelcontextprotocol/sdk': specifier: ^1.9.0 version: 1.18.2 @@ -104,13 +104,13 @@ importers: version: 6.4.0(@nestjs/common@10.4.20(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@10.4.20)(reflect-metadata@0.1.14) '@neynar/nodejs-sdk': specifier: ^2.8.1 - version: 2.46.0(@nestjs/microservices@10.4.20)(@nestjs/platform-express@10.4.20)(@types/node@18.16.9)(bufferutil@4.0.9)(class-transformer@0.5.1)(class-validator@0.14.2)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@4.1.11) + version: 2.46.0(@nestjs/microservices@10.4.20)(@nestjs/platform-express@10.4.20)(@types/node@18.16.9)(bufferutil@4.0.9)(class-transformer@0.5.1)(class-validator@0.14.2)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76) '@neynar/react': specifier: ^0.9.7 version: 0.9.7(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(@pigment-css/react@0.0.9(@types/react@18.3.1)(react@18.3.1)(typescript@5.5.4))(@playwright/test@1.55.1)(@storybook/addons@7.6.17(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(babel-plugin-macros@3.1.0)(hls.js@1.6.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.93.2)(swr@2.3.6(react@18.3.1)) '@postiz/wallets': specifier: ^0.0.1 - version: 0.0.1(@babel/runtime@7.28.4)(@react-native-async-storage/async-storage@1.24.0(react-native@0.81.4(@babel/core@7.28.4)(@types/react@18.3.1)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.5.4)(utf-8-validate@5.0.10))(@types/react@18.3.1)(@upstash/redis@1.35.4)(bs58@6.0.0)(bufferutil@4.0.9)(ioredis@5.8.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@4.1.11) + version: 0.0.1(@babel/runtime@7.28.4)(@react-native-async-storage/async-storage@1.24.0(react-native@0.81.4(@babel/core@7.28.4)(@types/react@18.3.1)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.5.4)(utf-8-validate@5.0.10))(@types/react@18.3.1)(@upstash/redis@1.35.4)(bs58@6.0.0)(bufferutil@4.0.9)(ioredis@5.8.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76) '@prisma/client': specifier: ^6.5.0 version: 6.16.2(prisma@6.16.2(magicast@0.3.5)(typescript@5.5.4))(typescript@5.5.4) @@ -380,7 +380,7 @@ importers: version: 4.17.21 mastra: specifier: ^0.13.2 - version: 0.13.2(@mastra/core@0.18.0(effect@3.16.12)(openapi-types@12.1.3)(react@18.3.1)(zod@4.1.11))(@opentelemetry/api@1.9.0)(@types/json-schema@7.0.15)(typescript@5.5.4)(zod@4.1.11) + version: 0.13.2(@mastra/core@0.20.2(effect@3.16.12)(openapi-types@12.1.3)(react@18.3.1)(zod@3.25.76))(@opentelemetry/api@1.9.0)(@types/json-schema@7.0.15)(typescript@5.5.4)(zod@3.25.76) md5: specifier: ^2.3.0 version: 2.3.0 @@ -421,8 +421,8 @@ importers: specifier: ^2.10.4 version: 2.17.0(typescript@5.5.4) openai: - specifier: ^5.11.0 - version: 5.23.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.11) + specifier: ^6.2.0 + version: 6.2.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76) p-limit: specifier: ^3.1.0 version: 3.1.0 @@ -575,7 +575,7 @@ importers: version: 10.0.0 viem: specifier: ^2.22.9 - version: 2.37.9(bufferutil@4.0.9)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@4.1.11) + version: 2.37.9(bufferutil@4.0.9)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76) webextension-polyfill: specifier: ^0.12.0 version: 0.12.0 @@ -589,8 +589,8 @@ importers: specifier: ^1.4.0 version: 1.7.1 zod: - specifier: ^4.1.11 - version: 4.1.11 + specifier: ^3.25.76 + version: 3.25.76 zustand: specifier: ^5.0.5 version: 5.0.8(@types/react@18.3.1)(immer@9.0.21)(react@18.3.1)(use-sync-external-store@1.5.0(react@18.3.1)) @@ -808,32 +808,56 @@ packages: '@ag-ui/encoder@0.0.35': resolution: {integrity: sha512-Ym0h0ZKIiD1Ld3+e3v/WQSogY62xs72ysoEBW1kt+dDs79QazBsW5ZlcBBj2DelEs9NrczQLxTVEvrkcvhrHqA==} - '@ag-ui/langgraph@0.0.12': - resolution: {integrity: sha512-2j7IqIUYh0WAdvCXH65hd5aSHi23EOKVo78BauXa2vZI8Pricpkq9Adr2coZB2cwCbTV37lMn5yVlpDV0iQvOA==} - peerDependencies: - '@ag-ui/client': '>=0.0.37' - '@ag-ui/core': '>=0.0.37' - - '@ag-ui/mastra@0.1.0-next.1': - resolution: {integrity: sha512-3W60r+N0vJsyHP7BGurf49zGLKQ2vctCbHVg7uvtsBFtCcwYp4JsGQTge50xx0nVBTyfaZNKZW2Gy6uiCw/iSQ==} + '@ag-ui/langgraph@0.0.17': + resolution: {integrity: sha512-D5MfoJT+jHCnXSTlOP7nLkwu3oJKG6ihcwijzPc7qL91wsVeqry6unRbu90rQHilK3ITvfjmtJn1c+GvQDXP9Q==} peerDependencies: '@ag-ui/client': '>=0.0.38' '@ag-ui/core': '>=0.0.38' - '@copilotkit/runtime': ^1.10.4 - '@mastra/core': '>=0.18.0' + + '@ag-ui/mastra@0.2.0': + resolution: {integrity: sha512-4d2LwT15I/B87HSeEMqqtdy2n9L+FieAhVmYK6XFSImWnXS4G0YVe+qfncIHMwRnq4XtGM8F9uq6tzaMK8/qdA==} + peerDependencies: + '@ag-ui/client': '>=0.0.40' + '@ag-ui/core': '>=0.0.39' + '@copilotkit/runtime': ^1.10.5 + '@mastra/core': '>=0.20.1' zod: ^3.25.67 '@ag-ui/proto@0.0.35': resolution: {integrity: sha512-+rz3LAYHcR3D2xVgRKa7QE5mp+cwmZs6j+1XxG5dT7HNdg51uKea12L57EVY2bxE3JzpAvCIgOjFEmQCNH82pw==} - '@ai-sdk/gateway@1.0.23': - resolution: {integrity: sha512-ynV7WxpRK2zWLGkdOtrU2hW22mBVkEYVS3iMg1+ZGmAYSgzCqzC74bfOJZ2GU1UdcrFWUsFI9qAYjsPkd+AebA==} + '@ai-sdk/anthropic@2.0.23': + resolution: {integrity: sha512-ZEBiiv1UhjGjBwUU63pFhLK5LCSlNDb1idY9K1oZHm5/Fda1cuTojf32tOp0opH0RPbPAN/F8fyyNjbU33n9Kw==} engines: {node: '>=18'} peerDependencies: - zod: ^3.25.76 || ^4 + zod: ^3.25.76 || ^4.1.8 - '@ai-sdk/openai@2.0.38': - resolution: {integrity: sha512-aPK5jSz5/UkbYnh59/Yy5ic3JsOrz7Gt6TJdB8ggYDYEUHJ9FHEKoRKz8DEHh3Zaf3yngxZLkdP4JSbroK3jsQ==} + '@ai-sdk/gateway@1.0.33': + resolution: {integrity: sha512-v9i3GPEo4t3fGcSkQkc07xM6KJN75VUv7C1Mqmmsu2xD8lQwnQfsrgAXyNuWe20yGY0eHuheSPDZhiqsGKtH1g==} + engines: {node: '>=18'} + peerDependencies: + zod: ^3.25.76 || ^4.1.8 + + '@ai-sdk/google@2.0.17': + resolution: {integrity: sha512-6LyuUrCZuiULg0rUV+kT4T2jG19oUntudorI4ttv1ARkSbwl8A39ue3rA487aDDy6fUScdbGFiV5Yv/o4gidVA==} + engines: {node: '>=18'} + peerDependencies: + zod: ^3.25.76 || ^4.1.8 + + '@ai-sdk/openai-compatible@1.0.19': + resolution: {integrity: sha512-hnsqPCCSNKgpZRNDOAIXZs7OcUDM4ut5ggWxj2sjB4tNL/aBn/xrM7pJkqu+WuPowyrE60wPVSlw0LvtXAlMXQ==} + engines: {node: '>=18'} + peerDependencies: + zod: ^3.25.76 || ^4.1.8 + + '@ai-sdk/openai@2.0.42': + resolution: {integrity: sha512-9mM6QS8k0ooH9qMC27nlrYLQmNDnO6Rk0JTmFo/yUxpABEWOcvQhMWNHbp9lFL6Ty5vkdINrujhsAQfWuEleOg==} + engines: {node: '>=18'} + peerDependencies: + zod: ^3.25.76 || ^4.1.8 + + '@ai-sdk/openai@2.0.52': + resolution: {integrity: sha512-n1arAo4+63e6/FFE6z/1ZsZbiOl4cfsoZ3F4i2X7LPIEea786Y2yd7Qdr7AdB4HTLVo3OSb1PHVIcQmvYIhmEA==} engines: {node: '>=18'} peerDependencies: zod: ^3.25.76 || ^4.1.8 @@ -850,11 +874,11 @@ packages: peerDependencies: zod: ^3.25.76 || ^4.1.8 - '@ai-sdk/provider-utils@3.0.9': - resolution: {integrity: sha512-Pm571x5efqaI4hf9yW4KsVlDBDme8++UepZRnq+kqVBWWjgvGhQlzU8glaFq0YJEB9kkxZHbRRyVeHoV2sRYaQ==} + '@ai-sdk/provider-utils@3.0.12': + resolution: {integrity: sha512-ZtbdvYxdMoria+2SlNarEk6Hlgyf+zzcznlD55EAl+7VZvJaSg2sqPvwArY7L6TfDEDJsnCq0fdhBSkYo0Xqdg==} engines: {node: '>=18'} peerDependencies: - zod: ^3.25.76 || ^4 + zod: ^3.25.76 || ^4.1.8 '@ai-sdk/provider@1.1.3': resolution: {integrity: sha512-qZMxYJ0qqX/RfnuIaab+zp8UAeJn/ygXXAffR5I4N0n1IrvA6qBsjc8hXLmBiMV2zoXlifkacF7sEFnYnjBcqg==} @@ -880,6 +904,12 @@ packages: peerDependencies: zod: ^3.23.8 + '@ai-sdk/xai@2.0.23': + resolution: {integrity: sha512-Xo4r5W/Wvi4mkCD98DoafNxj9V3xysUlWOeqAYpqKeKkNQ2xtOTly2MHq+gP6wKud0Y/mI7hemkCMQgH6HOwzQ==} + engines: {node: '>=18'} + peerDependencies: + zod: ^3.25.76 || ^4.1.8 + '@alloc/quick-lru@5.2.0': resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} engines: {node: '>=10'} @@ -1859,38 +1889,39 @@ packages: resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} engines: {node: '>=0.1.90'} - '@copilotkit/react-core@1.10.4': - resolution: {integrity: sha512-x2C3eeD92zcmE2GM5/z3kxuRbxBoU1VyAxJHc02Up7TFqxEKM276Azj9OSffhRWrmx5n2tQJt3RWtH2MUEcJ4Q==} + '@copilotkit/react-core@1.10.6': + resolution: {integrity: sha512-sdojpntwgOxP8lWRzaFEiWr0g2wDefjQHtve5GPPie+otseFonV88FZjSqIq5LN+q5BIwDOEhCmDjALsGjXvuQ==} peerDependencies: react: ^18 || ^19 || ^19.0.0-rc react-dom: ^18 || ^19 || ^19.0.0-rc - '@copilotkit/react-textarea@1.10.4': - resolution: {integrity: sha512-TjouP84QPKcBrweaNeAsrppCWwi42Yju9E2d8TuiOetFA2AkZJqM9kxJHFvigNAqOjdzsI7RNgzdb+2Eh2gF4Q==} + '@copilotkit/react-textarea@1.10.6': + resolution: {integrity: sha512-04totNGPtBkfVdYy5rCBqn47HDbdd9cqHk49At0CD9DFmGOaL7kwMbywHj4Dqq6UpDKuJqnS9aYyLI073vuZwA==} peerDependencies: react: ^18 || ^19 || ^19.0.0-rc react-dom: ^18 || ^19 || ^19.0.0-rc - '@copilotkit/react-ui@1.10.4': - resolution: {integrity: sha512-C2dmBhndsWRPKqSnScOztTuyCBcowBZyqa4JrUyVlvVsiYVa1rEqMJTo6Gkw+tq6XEK+cJgAPcRtymght3Grxg==} + '@copilotkit/react-ui@1.10.6': + resolution: {integrity: sha512-eNIbZKMvBVZqlAR4fqkmZRIYIt8WhwZOxfVJVwMD9nfmWdtatmxrOLecyDiPk/hkq2o/8s2/rubaZSMK6m+GHQ==} peerDependencies: react: ^18 || ^19 || ^19.0.0-rc - '@copilotkit/runtime-client-gql@1.10.4': - resolution: {integrity: sha512-wOo5gzR7EiVEBpyBYYq84o5fb0OQ1pcJ8AzPZWEDc4GaV2xLDogjd7gKrP2zw5tV4tGV5HizHpo5UiE4kHZAgw==} + '@copilotkit/runtime-client-gql@1.10.6': + resolution: {integrity: sha512-oLX8mjppVvQCWfquW9A0500hYVNxM4X/mtt76SEvfGUb2KsNQ4j2HOCzpmtm85MeLproC+f9738wLwRueLliZg==} peerDependencies: react: ^18 || ^19 || ^19.0.0-rc - '@copilotkit/runtime@1.10.4': - resolution: {integrity: sha512-/KuKjISiQYoV6T8rE1khzTKO5Abctl/Flh50kIvyGAjwDSKyOTWJ/XEn8zAGP8/xo5KzSQQYaODFoz3oncGN6g==} + '@copilotkit/runtime@1.10.6': + resolution: {integrity: sha512-35MdJ6nutC+spgHRJURbanLxBoQCNvVBYD0CBIk4Rv3/Ck8XgZA4lcc+5aGteuERXOPBsYEQjGD4xEPy3QXmGg==} peerDependencies: - '@ag-ui/client': '>=0.0.37' - '@ag-ui/core': '>=0.0.37' - '@ag-ui/encoder': '>=0.0.37' - '@ag-ui/proto': '>=0.0.37' + '@ag-ui/client': '>=0.0.39' + '@ag-ui/core': '>=0.0.39' + '@ag-ui/encoder': '>=0.0.39' + '@ag-ui/langgraph': '>=0.0.18' + '@ag-ui/proto': '>=0.0.39' - '@copilotkit/shared@1.10.4': - resolution: {integrity: sha512-vvF3vG03e5OZcUd0x7FdpIPRx60W3vyiK+0maGyEZoU1xUlBJbxaCkAED6gAH3JBZl/BZNWoJKsYDxiQUY2V3A==} + '@copilotkit/shared@1.10.6': + resolution: {integrity: sha512-56Rltf4fDBqCpl1ZXARypt5NdE4LTg3tGPPLurZpgPmm31Lv5EAHpfjC7I55vt9A0mXWlTCHtCrpiaAlTyzGJw==} '@crxjs/vite-plugin@2.2.0': resolution: {integrity: sha512-HpT1GLbUQy42nlpN4sGzFgulacBraMM778s8Q+oPo4cb26DwO9tTwdndlvAS8fe6vEProFXvbdt37objp/0IQA==} @@ -2996,20 +3027,6 @@ packages: peerDependencies: '@langchain/core': '>=0.2.31 <0.4.0' - '@langchain/langgraph-sdk@0.0.105': - resolution: {integrity: sha512-3DD1W1wnbP48807qq+5gY248mFcwwNGqKdmZt05P3zeLpfP5Sfm6ELzVvqHGpr+qumP0yGRZs/7qArYGXRRfcQ==} - peerDependencies: - '@langchain/core': '>=0.2.31 <0.4.0' - react: ^18 || ^19 - react-dom: ^18 || ^19 - peerDependenciesMeta: - '@langchain/core': - optional: true - react: - optional: true - react-dom: - optional: true - '@langchain/langgraph-sdk@0.0.112': resolution: {integrity: sha512-/9W5HSWCqYgwma6EoOspL4BGYxGxeJP6lIquPSF4FA0JlKopaUv58ucZC3vAgdJyCgg6sorCIV/qg7SGpEcCLw==} peerDependencies: @@ -3035,6 +3052,20 @@ packages: react: optional: true + '@langchain/langgraph-sdk@0.1.9': + resolution: {integrity: sha512-7WEDHtbI3pYPUiiHq+dPaF92ZN2W7lqObdpK0X+roa8zPdHUjve/HiqYuKNWS12u1N+L5QIuQWqZvVNvUA7BfQ==} + peerDependencies: + '@langchain/core': '>=0.2.31 <0.4.0 || ^1.0.0-alpha' + react: ^18 || ^19 + react-dom: ^18 || ^19 + peerDependenciesMeta: + '@langchain/core': + optional: true + react: + optional: true + react-dom: + optional: true + '@langchain/langgraph@0.2.74': resolution: {integrity: sha512-oHpEi5sTZTPaeZX1UnzfM2OAJ21QGQrwReTV6+QnX7h8nDCBzhtipAw1cK616S+X8zpcVOjgOtJuaJhXa4mN8w==} engines: {node: '>=18'} @@ -3142,13 +3173,13 @@ packages: resolution: {integrity: sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==} hasBin: true - '@mastra/client-js@0.13.2': - resolution: {integrity: sha512-L2Qecm1rV83JFG/SHA2Zwunx6OJTSbXNVIhTIcaQ1/YKV0ftwQ+5yS5cCCttCTooNyvHZny65FY1RMeYEOASFA==} + '@mastra/client-js@0.15.2': + resolution: {integrity: sha512-n5qfXS0OfLqljJpQjwD6eTimIWkmwRacNDPd1CAwXGkVZqr9rgFU6dyQTAgEV3J45MaGu4tMpuz6ZYcmg9S5gA==} peerDependencies: zod: ^3.25.0 || ^4.0.0 - '@mastra/core@0.18.0': - resolution: {integrity: sha512-MRvrsGeRYkO4SvEv8PSuNpS8FSM2HtYxsTGkkQcKVRESnQo/MAGBi5flhK4Jbd5wNqSH4ffm3kPiNG6M4CRXvA==} + '@mastra/core@0.20.2': + resolution: {integrity: sha512-RbwuLwOVrcLbbjLFEBSlGTBA3mzGAy4bXp4JeXg2miJWDR/7WbXtxKIU+sTZGw5LpzlvvEFtj7JtHI1l+gKMVg==} engines: {node: '>=20'} peerDependencies: zod: ^3.25.0 || ^4.0.0 @@ -3170,16 +3201,16 @@ packages: '@mastra/core': '>=0.17.0-0 <0.19.0-0' zod: ^3.25.0 || ^4.0.0 - '@mastra/memory@0.15.3': - resolution: {integrity: sha512-sKanSMhcEbCh9w1ZhBVHdkwdfTzcAgHiGuVjerJn5l8+ZdcXsMGclM+CgY+JWa3KOxijPlejizI5ZHY+7L9agQ==} + '@mastra/memory@0.15.6': + resolution: {integrity: sha512-k6X4nZ+YFhlW46YPKgTAuPYma+uebLQ2xYeDdx0BQvQyO6lWp9s9cpgSjCwOMzctPZqrxauOfzgWyyUUrFfwBw==} peerDependencies: - '@mastra/core': '>=0.18.0-0 <0.19.0-0' + '@mastra/core': '>=0.20.1-0 <0.21.0-0' zod: ^3.25.0 || ^4.0.0 - '@mastra/pg@0.16.1': - resolution: {integrity: sha512-iAOM0zYXnoxlG4G61C5xUaF/i4mdDAoDPa9NlSqYWhnjV1UXdduUcr6pVgiNvo/2bXMUN40BjaHH42c4DA6xoQ==} + '@mastra/pg@0.17.2': + resolution: {integrity: sha512-9h4mNS9SbFd9pZKA6FBk1PIfydbxqHUAzFc44xVlm70hYAix8KYS2BaXhPTpxkRM+BkRcVNv+u4rGvHWACQqPA==} peerDependencies: - '@mastra/core': '>=0.18.0-0 <0.19.0-0' + '@mastra/core': '>=0.20.1-0 <0.21.0-0' '@mastra/schema-compat@0.11.4': resolution: {integrity: sha512-oh3+enP3oYftZlmJAKQQj5VXR86KgTMwfMnwALZyLk04dPSWfVD2wGytoDg5Qbi3rX9qHj6g0rMNa0CUjR6aTg==} @@ -3888,6 +3919,13 @@ packages: engines: {node: '>=16'} hasBin: true + '@openrouter/ai-sdk-provider@1.2.0': + resolution: {integrity: sha512-stuIwq7Yb7DNmk3GuCtz+oS3nZOY4TXEV3V5KsknDGQN7Fpu3KRMQVWRc1J073xKdf0FC9EHOctSyzsACmp5Ag==} + engines: {node: '>=18'} + peerDependencies: + ai: ^5.0.0 + zod: ^3.24.1 || ^v4 + '@opentelemetry/api-logs@0.203.0': resolution: {integrity: sha512-9B9RU0H7Ya1Dx/Rkyc4stuBZSGVQF27WigitInx2QQoj6KUpEFYPKoWjdFTunJYxmXmh17HeBvbMa1EhGyPmqQ==} engines: {node: '>=8.0.0'} @@ -7712,6 +7750,10 @@ packages: '@urql/core@5.2.0': resolution: {integrity: sha512-/n0ieD0mvvDnVAXEQgX/7qJiVcvYvNkOHeBvkwtylfjydar123caCXcl58PXFY11oU1oquJocVXHxLAbtv4x1A==} + '@vercel/oidc@3.0.2': + resolution: {integrity: sha512-JekxQ0RApo4gS4un/iMGsIL1/k4KUBe3HmnGcDvzHuFBdQdudEJgTqcsJC7y6Ul4Yw5CeykgvQbX2XeEJd0+DA==} + engines: {node: '>= 20'} + '@vitejs/plugin-react@4.7.0': resolution: {integrity: sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA==} engines: {node: ^14.18.0 || >=16.0.0} @@ -8077,11 +8119,11 @@ packages: react: optional: true - ai@5.0.44: - resolution: {integrity: sha512-l/rdoM4LcRpsRBVvZQBwSU73oNoFGlWj+PcH86QRzxDGJgZqgGItWO0QcKjBNcLDmUjGN1VYd/8J0TAXHJleRQ==} + ai@5.0.60: + resolution: {integrity: sha512-80U/3kmdBW6g+JkLXpz/P2EwkyEaWlPlYtuLUpx/JYK9F7WZh9NnkYoh1KvUi1Sbpo0NyurBTvX0a2AG9mmbDA==} engines: {node: '>=18'} peerDependencies: - zod: ^3.25.76 || ^4 + zod: ^3.25.76 || ^4.1.8 ajv-formats@2.1.1: resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} @@ -13117,6 +13159,18 @@ packages: zod: optional: true + openai@6.2.0: + resolution: {integrity: sha512-qqjzHls7F5xkXNGy9P1Ei1rorI5LWupUUFWP66zPU8FlZbiITX8SFcHMKNZg/NATJ0LpIZcMUFxSwQmdeQPwSw==} + hasBin: true + peerDependencies: + ws: ^8.18.0 + zod: ^3.25 || ^4.0 + peerDependenciesMeta: + ws: + optional: true + zod: + optional: true + openapi-types@12.1.3: resolution: {integrity: sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==} @@ -16659,12 +16713,12 @@ snapshots: '@ag-ui/core': 0.0.35 '@ag-ui/proto': 0.0.35 - '@ag-ui/langgraph@0.0.12(@ag-ui/client@0.0.35)(@ag-ui/core@0.0.37)(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@ag-ui/langgraph@0.0.17(@ag-ui/client@0.0.35)(@ag-ui/core@0.0.37)(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@6.2.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@ag-ui/client': 0.0.35 '@ag-ui/core': 0.0.37 - '@langchain/core': 0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76)) - '@langchain/langgraph-sdk': 0.0.105(@langchain/core@0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.23.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.11)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@langchain/core': 0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@6.2.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76)) + '@langchain/langgraph-sdk': 0.1.9(@langchain/core@0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@6.2.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) partial-json: 0.1.7 rxjs: 7.8.1 transitivePeerDependencies: @@ -16675,16 +16729,16 @@ snapshots: - react - react-dom - '@ag-ui/mastra@0.1.0-next.1(@ag-ui/client@0.0.35)(@ag-ui/core@0.0.37)(@copilotkit/runtime@1.10.4(fa055d96d8525508353466ae4be6d904))(@mastra/core@0.18.0(effect@3.16.12)(openapi-types@12.1.3)(react@18.3.1)(zod@4.1.11))(effect@3.16.12)(openapi-types@12.1.3)(react@18.3.1)(zod@4.1.11)': + '@ag-ui/mastra@0.2.0(@ag-ui/client@0.0.35)(@ag-ui/core@0.0.37)(@copilotkit/runtime@1.10.6(2dd885fd6d864cd48ccb3462fd6e6538))(@mastra/core@0.20.2(effect@3.16.12)(openapi-types@12.1.3)(react@18.3.1)(zod@3.25.76))(effect@3.16.12)(openapi-types@12.1.3)(react@18.3.1)(zod@3.25.76)': dependencies: '@ag-ui/client': 0.0.35 '@ag-ui/core': 0.0.37 - '@ai-sdk/ui-utils': 1.2.11(zod@4.1.11) - '@copilotkit/runtime': 1.10.4(fa055d96d8525508353466ae4be6d904) - '@mastra/client-js': 0.13.2(effect@3.16.12)(openapi-types@12.1.3)(react@18.3.1)(zod@4.1.11) - '@mastra/core': 0.18.0(effect@3.16.12)(openapi-types@12.1.3)(react@18.3.1)(zod@4.1.11) + '@ai-sdk/ui-utils': 1.2.11(zod@3.25.76) + '@copilotkit/runtime': 1.10.6(2dd885fd6d864cd48ccb3462fd6e6538) + '@mastra/client-js': 0.15.2(effect@3.16.12)(openapi-types@12.1.3)(react@18.3.1)(zod@3.25.76) + '@mastra/core': 0.20.2(effect@3.16.12)(openapi-types@12.1.3)(react@18.3.1)(zod@3.25.76) rxjs: 7.8.1 - zod: 4.1.11 + zod: 3.25.76 transitivePeerDependencies: - '@hono/arktype-validator' - '@hono/effect-validator' @@ -16707,38 +16761,63 @@ snapshots: '@ag-ui/core': 0.0.35 '@bufbuild/protobuf': 2.9.0 - '@ai-sdk/gateway@1.0.23(zod@4.1.11)': + '@ai-sdk/anthropic@2.0.23(zod@3.25.76)': dependencies: '@ai-sdk/provider': 2.0.0 - '@ai-sdk/provider-utils': 3.0.9(zod@4.1.11) - zod: 4.1.11 + '@ai-sdk/provider-utils': 3.0.10(zod@3.25.76) + zod: 3.25.76 - '@ai-sdk/openai@2.0.38(zod@4.1.11)': + '@ai-sdk/gateway@1.0.33(zod@3.25.76)': dependencies: '@ai-sdk/provider': 2.0.0 - '@ai-sdk/provider-utils': 3.0.10(zod@4.1.11) - zod: 4.1.11 + '@ai-sdk/provider-utils': 3.0.10(zod@3.25.76) + '@vercel/oidc': 3.0.2 + zod: 3.25.76 - '@ai-sdk/provider-utils@2.2.8(zod@4.1.11)': + '@ai-sdk/google@2.0.17(zod@3.25.76)': + dependencies: + '@ai-sdk/provider': 2.0.0 + '@ai-sdk/provider-utils': 3.0.10(zod@3.25.76) + zod: 3.25.76 + + '@ai-sdk/openai-compatible@1.0.19(zod@3.25.76)': + dependencies: + '@ai-sdk/provider': 2.0.0 + '@ai-sdk/provider-utils': 3.0.10(zod@3.25.76) + zod: 3.25.76 + + '@ai-sdk/openai@2.0.42(zod@3.25.76)': + dependencies: + '@ai-sdk/provider': 2.0.0 + '@ai-sdk/provider-utils': 3.0.10(zod@3.25.76) + zod: 3.25.76 + + '@ai-sdk/openai@2.0.52(zod@3.25.76)': + dependencies: + '@ai-sdk/provider': 2.0.0 + '@ai-sdk/provider-utils': 3.0.12(zod@3.25.76) + zod: 3.25.76 + + '@ai-sdk/provider-utils@2.2.8(zod@3.25.76)': dependencies: '@ai-sdk/provider': 1.1.3 nanoid: 3.3.11 secure-json-parse: 2.7.0 - zod: 4.1.11 + zod: 3.25.76 - '@ai-sdk/provider-utils@3.0.10(zod@4.1.11)': + '@ai-sdk/provider-utils@3.0.10(zod@3.25.76)': dependencies: '@ai-sdk/provider': 2.0.0 '@standard-schema/spec': 1.0.0 eventsource-parser: 3.0.6 - zod: 4.1.11 + zod: 3.25.76 - '@ai-sdk/provider-utils@3.0.9(zod@4.1.11)': + '@ai-sdk/provider-utils@3.0.12(zod@3.25.76)': dependencies: '@ai-sdk/provider': 2.0.0 '@standard-schema/spec': 1.0.0 eventsource-parser: 3.0.6 - zod: 4.1.11 + zod: 3.25.76 '@ai-sdk/provider@1.1.3': dependencies: @@ -16748,22 +16827,29 @@ snapshots: dependencies: json-schema: 0.4.0 - '@ai-sdk/react@1.2.12(react@18.3.1)(zod@4.1.11)': + '@ai-sdk/react@1.2.12(react@18.3.1)(zod@3.25.76)': dependencies: - '@ai-sdk/provider-utils': 2.2.8(zod@4.1.11) - '@ai-sdk/ui-utils': 1.2.11(zod@4.1.11) + '@ai-sdk/provider-utils': 2.2.8(zod@3.25.76) + '@ai-sdk/ui-utils': 1.2.11(zod@3.25.76) react: 18.3.1 swr: 2.3.6(react@18.3.1) throttleit: 2.1.0 optionalDependencies: - zod: 4.1.11 + zod: 3.25.76 - '@ai-sdk/ui-utils@1.2.11(zod@4.1.11)': + '@ai-sdk/ui-utils@1.2.11(zod@3.25.76)': dependencies: '@ai-sdk/provider': 1.1.3 - '@ai-sdk/provider-utils': 2.2.8(zod@4.1.11) - zod: 4.1.11 - zod-to-json-schema: 3.24.6(zod@4.1.11) + '@ai-sdk/provider-utils': 2.2.8(zod@3.25.76) + zod: 3.25.76 + zod-to-json-schema: 3.24.6(zod@3.25.76) + + '@ai-sdk/xai@2.0.23(zod@3.25.76)': + dependencies: + '@ai-sdk/openai-compatible': 1.0.19(zod@3.25.76) + '@ai-sdk/provider': 2.0.0 + '@ai-sdk/provider-utils': 3.0.10(zod@3.25.76) + zod: 3.25.76 '@alloc/quick-lru@5.2.0': {} @@ -18463,17 +18549,17 @@ snapshots: transitivePeerDependencies: - encoding - '@browserbasehq/stagehand@1.14.0(@playwright/test@1.55.1)(bufferutil@4.0.9)(deepmerge@4.3.1)(dotenv@16.6.1)(openai@5.23.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.11))(utf-8-validate@5.0.10)(zod@4.1.11)': + '@browserbasehq/stagehand@1.14.0(@playwright/test@1.55.1)(bufferutil@4.0.9)(deepmerge@4.3.1)(dotenv@16.6.1)(openai@6.2.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76))(utf-8-validate@5.0.10)(zod@3.25.76)': dependencies: '@anthropic-ai/sdk': 0.27.3 '@browserbasehq/sdk': 2.6.0 '@playwright/test': 1.55.1 deepmerge: 4.3.1 dotenv: 16.6.1 - openai: 5.23.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.11) + openai: 6.2.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76) ws: 8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) - zod: 4.1.11 - zod-to-json-schema: 3.24.6(zod@4.1.11) + zod: 3.25.76 + zod-to-json-schema: 3.24.6(zod@3.25.76) transitivePeerDependencies: - bufferutil - encoding @@ -18503,10 +18589,10 @@ snapshots: '@colors/colors@1.5.0': optional: true - '@copilotkit/react-core@1.10.4(@types/react@18.3.1)(graphql@16.11.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@copilotkit/react-core@1.10.6(@types/react@18.3.1)(graphql@16.11.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@copilotkit/runtime-client-gql': 1.10.4(graphql@16.11.0)(react@18.3.1) - '@copilotkit/shared': 1.10.4 + '@copilotkit/runtime-client-gql': 1.10.6(graphql@16.11.0)(react@18.3.1) + '@copilotkit/shared': 1.10.6 '@scarf/scarf': 1.4.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -18518,11 +18604,11 @@ snapshots: - graphql - supports-color - '@copilotkit/react-textarea@1.10.4(@types/react-dom@18.3.0)(@types/react@18.3.1)(graphql@16.11.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@copilotkit/react-textarea@1.10.6(@types/react-dom@18.3.0)(@types/react@18.3.1)(graphql@16.11.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@copilotkit/react-core': 1.10.4(@types/react@18.3.1)(graphql@16.11.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@copilotkit/runtime-client-gql': 1.10.4(graphql@16.11.0)(react@18.3.1) - '@copilotkit/shared': 1.10.4 + '@copilotkit/react-core': 1.10.6(@types/react@18.3.1)(graphql@16.11.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@copilotkit/runtime-client-gql': 1.10.6(graphql@16.11.0)(react@18.3.1) + '@copilotkit/shared': 1.10.6 '@emotion/css': 11.13.5 '@emotion/react': 11.14.0(@types/react@18.3.1)(react@18.3.1) '@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(react@18.3.1) @@ -18550,11 +18636,11 @@ snapshots: - graphql - supports-color - '@copilotkit/react-ui@1.10.4(@types/react@18.3.1)(graphql@16.11.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@copilotkit/react-ui@1.10.6(@types/react@18.3.1)(graphql@16.11.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@copilotkit/react-core': 1.10.4(@types/react@18.3.1)(graphql@16.11.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@copilotkit/runtime-client-gql': 1.10.4(graphql@16.11.0)(react@18.3.1) - '@copilotkit/shared': 1.10.4 + '@copilotkit/react-core': 1.10.6(@types/react@18.3.1)(graphql@16.11.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@copilotkit/runtime-client-gql': 1.10.6(graphql@16.11.0)(react@18.3.1) + '@copilotkit/shared': 1.10.6 '@headlessui/react': 2.2.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-markdown: 10.1.0(@types/react@18.3.1)(react@18.3.1) @@ -18569,9 +18655,9 @@ snapshots: - react-dom - supports-color - '@copilotkit/runtime-client-gql@1.10.4(graphql@16.11.0)(react@18.3.1)': + '@copilotkit/runtime-client-gql@1.10.6(graphql@16.11.0)(react@18.3.1)': dependencies: - '@copilotkit/shared': 1.10.4 + '@copilotkit/shared': 1.10.6 '@urql/core': 5.2.0(graphql@16.11.0) react: 18.3.1 untruncate-json: 0.0.1 @@ -18580,22 +18666,22 @@ snapshots: - encoding - graphql - '@copilotkit/runtime@1.10.4(fa055d96d8525508353466ae4be6d904)': + '@copilotkit/runtime@1.10.6(2dd885fd6d864cd48ccb3462fd6e6538)': dependencies: '@ag-ui/client': 0.0.35 '@ag-ui/core': 0.0.37 '@ag-ui/encoder': 0.0.35 - '@ag-ui/langgraph': 0.0.12(@ag-ui/client@0.0.35)(@ag-ui/core@0.0.37)(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@ag-ui/langgraph': 0.0.17(@ag-ui/client@0.0.35)(@ag-ui/core@0.0.37)(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@6.2.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@ag-ui/proto': 0.0.35 '@anthropic-ai/sdk': 0.57.0 - '@copilotkit/shared': 1.10.4 + '@copilotkit/shared': 1.10.6 '@graphql-yoga/plugin-defer-stream': 3.16.0(graphql-yoga@5.16.0(graphql@16.11.0))(graphql@16.11.0) - '@langchain/aws': 0.1.15(@langchain/core@0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.23.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.11))) - '@langchain/community': 0.3.56(d6cf4a7aebbc9e9be76a89f8586f778c) + '@langchain/aws': 0.1.15(@langchain/core@0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@6.2.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76))) + '@langchain/community': 0.3.56(fea77b934eea5a74b92360f8f6610de7) '@langchain/core': 0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76)) - '@langchain/google-gauth': 0.1.8(@langchain/core@0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.23.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.11)))(zod@3.25.76) - '@langchain/langgraph-sdk': 0.0.70(@langchain/core@0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.23.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.11)))(react@18.3.1) - '@langchain/openai': 0.4.9(@langchain/core@0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.23.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.11)))(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@langchain/google-gauth': 0.1.8(@langchain/core@0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@6.2.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76)))(zod@3.25.76) + '@langchain/langgraph-sdk': 0.0.70(@langchain/core@0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@6.2.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76)))(react@18.3.1) + '@langchain/openai': 0.4.9(@langchain/core@0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@6.2.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76)))(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) '@scarf/scarf': 1.4.0 class-transformer: 0.5.1 class-validator: 0.14.2 @@ -18604,7 +18690,7 @@ snapshots: graphql-scalars: 1.24.2(graphql@16.11.0) graphql-yoga: 5.16.0(graphql@16.11.0) groq-sdk: 0.5.0 - langchain: 0.3.34(@langchain/aws@0.1.15(@langchain/core@0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.23.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.11))))(@langchain/core@0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.23.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.11)))(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(axios@1.12.2)(cheerio@1.1.2)(handlebars@4.7.8)(openai@4.104.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + langchain: 0.3.34(@langchain/aws@0.1.15(@langchain/core@0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@6.2.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76))))(@langchain/core@0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@6.2.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76)))(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(axios@1.12.2)(cheerio@1.1.2)(handlebars@4.7.8)(openai@4.104.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) openai: 4.104.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76) partial-json: 0.1.7 pino: 9.12.0 @@ -18747,7 +18833,6 @@ snapshots: - puppeteer - pyodide - react - - react-dom - redis - replicate - sonix-speech-recognition @@ -18763,7 +18848,7 @@ snapshots: - ws - youtubei.js - '@copilotkit/shared@1.10.4': + '@copilotkit/shared@1.10.6': dependencies: '@ag-ui/core': 0.0.37 '@segment/analytics-node': 2.3.0 @@ -19608,31 +19693,31 @@ snapshots: '@kurkle/color@0.3.4': {} - '@langchain/aws@0.1.15(@langchain/core@0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.23.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.11)))': + '@langchain/aws@0.1.15(@langchain/core@0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@6.2.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76)))': dependencies: '@aws-sdk/client-bedrock-agent-runtime': 3.898.0 '@aws-sdk/client-bedrock-runtime': 3.896.0 '@aws-sdk/client-kendra': 3.896.0 '@aws-sdk/credential-provider-node': 3.896.0 - '@langchain/core': 0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.23.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.11)) + '@langchain/core': 0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@6.2.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76)) transitivePeerDependencies: - aws-crt - '@langchain/community@0.3.56(c3fbdb3f617113dfdbdb8d19b781ee75)': + '@langchain/community@0.3.56(2aa44a6f0eae91dd43894a1563b4d7bf)': dependencies: - '@browserbasehq/stagehand': 1.14.0(@playwright/test@1.55.1)(bufferutil@4.0.9)(deepmerge@4.3.1)(dotenv@16.6.1)(openai@5.23.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.11))(utf-8-validate@5.0.10)(zod@4.1.11) + '@browserbasehq/stagehand': 1.14.0(@playwright/test@1.55.1)(bufferutil@4.0.9)(deepmerge@4.3.1)(dotenv@16.6.1)(openai@6.2.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76))(utf-8-validate@5.0.10)(zod@3.25.76) '@ibm-cloud/watsonx-ai': 1.6.13 - '@langchain/core': 0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.23.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.11)) - '@langchain/openai': 0.5.18(@langchain/core@0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.23.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.11)))(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) - '@langchain/weaviate': 0.2.3(@langchain/core@0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.23.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.11))) + '@langchain/core': 0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@6.2.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76)) + '@langchain/openai': 0.5.18(@langchain/core@0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@6.2.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76)))(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@langchain/weaviate': 0.2.3(@langchain/core@0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@6.2.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76))) binary-extensions: 2.3.0 expr-eval: 2.0.2 flat: 5.0.2 ibm-cloud-sdk-core: 5.4.3 js-yaml: 4.1.0 - langchain: 0.3.34(@langchain/aws@0.1.15(@langchain/core@0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.23.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.11))))(@langchain/core@0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.23.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.11)))(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(axios@1.12.2)(cheerio@1.1.2)(handlebars@4.7.8)(openai@5.23.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.11))(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) - langsmith: 0.3.71(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.23.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.11)) - openai: 5.23.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.11) + langchain: 0.3.34(@langchain/aws@0.1.15(@langchain/core@0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@6.2.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76))))(@langchain/core@0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@6.2.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76)))(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(axios@1.12.2)(cheerio@1.1.2)(handlebars@4.7.8)(openai@6.2.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + langsmith: 0.3.71(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@6.2.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76)) + openai: 6.2.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76) uuid: 10.0.0 zod: 3.25.76 optionalDependencies: @@ -19682,19 +19767,19 @@ snapshots: - handlebars - peggy - '@langchain/community@0.3.56(d6cf4a7aebbc9e9be76a89f8586f778c)': + '@langchain/community@0.3.56(fea77b934eea5a74b92360f8f6610de7)': dependencies: - '@browserbasehq/stagehand': 1.14.0(@playwright/test@1.55.1)(bufferutil@4.0.9)(deepmerge@4.3.1)(dotenv@16.6.1)(openai@5.23.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.11))(utf-8-validate@5.0.10)(zod@4.1.11) + '@browserbasehq/stagehand': 1.14.0(@playwright/test@1.55.1)(bufferutil@4.0.9)(deepmerge@4.3.1)(dotenv@16.6.1)(openai@6.2.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76))(utf-8-validate@5.0.10)(zod@3.25.76) '@ibm-cloud/watsonx-ai': 1.6.13 - '@langchain/core': 0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.23.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.11)) - '@langchain/openai': 0.5.18(@langchain/core@0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.23.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.11)))(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) - '@langchain/weaviate': 0.2.3(@langchain/core@0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.23.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.11))) + '@langchain/core': 0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@6.2.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76)) + '@langchain/openai': 0.5.18(@langchain/core@0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@6.2.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76)))(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@langchain/weaviate': 0.2.3(@langchain/core@0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@6.2.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76))) binary-extensions: 2.3.0 expr-eval: 2.0.2 flat: 5.0.2 ibm-cloud-sdk-core: 5.4.3 js-yaml: 4.1.0 - langchain: 0.3.34(@langchain/aws@0.1.15(@langchain/core@0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.23.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.11))))(@langchain/core@0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.23.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.11)))(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(axios@1.12.2)(cheerio@1.1.2)(handlebars@4.7.8)(openai@4.104.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + langchain: 0.3.34(@langchain/aws@0.1.15(@langchain/core@0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@6.2.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76))))(@langchain/core@0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@6.2.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76)))(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(axios@1.12.2)(cheerio@1.1.2)(handlebars@4.7.8)(openai@4.104.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) langsmith: 0.3.71(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76)) openai: 4.104.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76) uuid: 10.0.0 @@ -19766,14 +19851,14 @@ snapshots: - '@opentelemetry/sdk-trace-base' - openai - '@langchain/core@0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.23.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.11))': + '@langchain/core@0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@6.2.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76))': dependencies: '@cfworker/json-schema': 4.1.1 ansi-styles: 5.2.0 camelcase: 6.3.0 decamelize: 1.2.0 js-tiktoken: 1.0.21 - langsmith: 0.3.71(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.23.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.11)) + langsmith: 0.3.71(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@6.2.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76)) mustache: 4.2.0 p-queue: 6.6.2 p-retry: 4.6.2 @@ -19786,77 +19871,77 @@ snapshots: - '@opentelemetry/sdk-trace-base' - openai - '@langchain/google-common@0.1.8(@langchain/core@0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.23.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.11)))(zod@3.25.76)': + '@langchain/google-common@0.1.8(@langchain/core@0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@6.2.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76)))(zod@3.25.76)': dependencies: - '@langchain/core': 0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.23.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.11)) + '@langchain/core': 0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@6.2.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76)) uuid: 10.0.0 zod-to-json-schema: 3.24.6(zod@3.25.76) transitivePeerDependencies: - zod - '@langchain/google-gauth@0.1.8(@langchain/core@0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.23.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.11)))(zod@3.25.76)': + '@langchain/google-gauth@0.1.8(@langchain/core@0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@6.2.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76)))(zod@3.25.76)': dependencies: - '@langchain/core': 0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.23.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.11)) - '@langchain/google-common': 0.1.8(@langchain/core@0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.23.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.11)))(zod@3.25.76) + '@langchain/core': 0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@6.2.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76)) + '@langchain/google-common': 0.1.8(@langchain/core@0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@6.2.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76)))(zod@3.25.76) google-auth-library: 8.9.0 transitivePeerDependencies: - encoding - supports-color - zod - '@langchain/langgraph-checkpoint@0.0.18(@langchain/core@0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.23.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.11)))': + '@langchain/langgraph-checkpoint@0.0.18(@langchain/core@0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@6.2.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76)))': dependencies: - '@langchain/core': 0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.23.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.11)) + '@langchain/core': 0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@6.2.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76)) uuid: 10.0.0 - '@langchain/langgraph-sdk@0.0.105(@langchain/core@0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.23.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.11)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@langchain/langgraph-sdk@0.0.112(@langchain/core@0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@6.2.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@types/json-schema': 7.0.15 p-queue: 6.6.2 p-retry: 4.6.2 uuid: 9.0.1 optionalDependencies: - '@langchain/core': 0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.23.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.11)) + '@langchain/core': 0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@6.2.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76)) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@langchain/langgraph-sdk@0.0.112(@langchain/core@0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.23.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.11)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@langchain/langgraph-sdk@0.0.70(@langchain/core@0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@6.2.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76)))(react@18.3.1)': dependencies: '@types/json-schema': 7.0.15 p-queue: 6.6.2 p-retry: 4.6.2 uuid: 9.0.1 optionalDependencies: - '@langchain/core': 0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.23.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.11)) + '@langchain/core': 0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@6.2.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76)) + react: 18.3.1 + + '@langchain/langgraph-sdk@0.1.9(@langchain/core@0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@6.2.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@types/json-schema': 7.0.15 + p-queue: 6.6.2 + p-retry: 4.6.2 + uuid: 9.0.1 + optionalDependencies: + '@langchain/core': 0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@6.2.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76)) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@langchain/langgraph-sdk@0.0.70(@langchain/core@0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.23.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.11)))(react@18.3.1)': + '@langchain/langgraph@0.2.74(@langchain/core@0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@6.2.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(zod-to-json-schema@3.24.6(zod@3.25.76))': dependencies: - '@types/json-schema': 7.0.15 - p-queue: 6.6.2 - p-retry: 4.6.2 - uuid: 9.0.1 - optionalDependencies: - '@langchain/core': 0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.23.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.11)) - react: 18.3.1 - - '@langchain/langgraph@0.2.74(@langchain/core@0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.23.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.11)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(zod-to-json-schema@3.24.6(zod@4.1.11))': - dependencies: - '@langchain/core': 0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.23.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.11)) - '@langchain/langgraph-checkpoint': 0.0.18(@langchain/core@0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.23.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.11))) - '@langchain/langgraph-sdk': 0.0.112(@langchain/core@0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.23.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.11)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@langchain/core': 0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@6.2.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76)) + '@langchain/langgraph-checkpoint': 0.0.18(@langchain/core@0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@6.2.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76))) + '@langchain/langgraph-sdk': 0.0.112(@langchain/core@0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@6.2.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) uuid: 10.0.0 zod: 3.25.76 optionalDependencies: - zod-to-json-schema: 3.24.6(zod@4.1.11) + zod-to-json-schema: 3.24.6(zod@3.25.76) transitivePeerDependencies: - react - react-dom - '@langchain/openai@0.4.9(@langchain/core@0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.23.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.11)))(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))': + '@langchain/openai@0.4.9(@langchain/core@0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@6.2.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76)))(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))': dependencies: - '@langchain/core': 0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.23.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.11)) + '@langchain/core': 0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@6.2.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76)) js-tiktoken: 1.0.21 openai: 4.104.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76) zod: 3.25.76 @@ -19865,23 +19950,23 @@ snapshots: - encoding - ws - '@langchain/openai@0.5.18(@langchain/core@0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.23.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.11)))(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))': + '@langchain/openai@0.5.18(@langchain/core@0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@6.2.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76)))(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))': dependencies: - '@langchain/core': 0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.23.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.11)) + '@langchain/core': 0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@6.2.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76)) js-tiktoken: 1.0.21 openai: 5.23.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76) zod: 3.25.76 transitivePeerDependencies: - ws - '@langchain/textsplitters@0.1.0(@langchain/core@0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.23.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.11)))': + '@langchain/textsplitters@0.1.0(@langchain/core@0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@6.2.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76)))': dependencies: - '@langchain/core': 0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.23.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.11)) + '@langchain/core': 0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@6.2.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76)) js-tiktoken: 1.0.21 - '@langchain/weaviate@0.2.3(@langchain/core@0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.23.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.11)))': + '@langchain/weaviate@0.2.3(@langchain/core@0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@6.2.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76)))': dependencies: - '@langchain/core': 0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.23.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.11)) + '@langchain/core': 0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@6.2.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76)) uuid: 10.0.0 weaviate-client: 3.9.0 transitivePeerDependencies: @@ -19985,15 +20070,15 @@ snapshots: - encoding - supports-color - '@mastra/client-js@0.13.2(effect@3.16.12)(openapi-types@12.1.3)(react@18.3.1)(zod@4.1.11)': + '@mastra/client-js@0.15.2(effect@3.16.12)(openapi-types@12.1.3)(react@18.3.1)(zod@3.25.76)': dependencies: - '@ai-sdk/ui-utils': 1.2.11(zod@4.1.11) + '@ai-sdk/ui-utils': 1.2.11(zod@3.25.76) '@lukeed/uuid': 2.0.1 - '@mastra/core': 0.18.0(effect@3.16.12)(openapi-types@12.1.3)(react@18.3.1)(zod@4.1.11) + '@mastra/core': 0.20.2(effect@3.16.12)(openapi-types@12.1.3)(react@18.3.1)(zod@3.25.76) json-schema: 0.4.0 rxjs: 7.8.1 - zod: 4.1.11 - zod-to-json-schema: 3.24.6(zod@4.1.11) + zod: 3.25.76 + zod-to-json-schema: 3.24.6(zod@3.25.76) transitivePeerDependencies: - '@hono/arktype-validator' - '@hono/effect-validator' @@ -20011,16 +20096,22 @@ snapshots: - valibot - zod-openapi - '@mastra/core@0.18.0(effect@3.16.12)(openapi-types@12.1.3)(react@18.3.1)(zod@4.1.11)': + '@mastra/core@0.20.2(effect@3.16.12)(openapi-types@12.1.3)(react@18.3.1)(zod@3.25.76)': dependencies: '@a2a-js/sdk': 0.2.5 + '@ai-sdk/anthropic-v5': '@ai-sdk/anthropic@2.0.23(zod@3.25.76)' + '@ai-sdk/google-v5': '@ai-sdk/google@2.0.17(zod@3.25.76)' + '@ai-sdk/openai-compatible-v5': '@ai-sdk/openai-compatible@1.0.19(zod@3.25.76)' + '@ai-sdk/openai-v5': '@ai-sdk/openai@2.0.42(zod@3.25.76)' '@ai-sdk/provider': 1.1.3 - '@ai-sdk/provider-utils': 2.2.8(zod@4.1.11) - '@ai-sdk/provider-utils-v5': '@ai-sdk/provider-utils@3.0.9(zod@4.1.11)' + '@ai-sdk/provider-utils': 2.2.8(zod@3.25.76) + '@ai-sdk/provider-utils-v5': '@ai-sdk/provider-utils@3.0.10(zod@3.25.76)' '@ai-sdk/provider-v5': '@ai-sdk/provider@2.0.0' - '@ai-sdk/ui-utils': 1.2.11(zod@4.1.11) + '@ai-sdk/ui-utils': 1.2.11(zod@3.25.76) + '@ai-sdk/xai-v5': '@ai-sdk/xai@2.0.23(zod@3.25.76)' '@isaacs/ttlcache': 1.4.1 - '@mastra/schema-compat': 0.11.4(ai@4.3.19(react@18.3.1)(zod@4.1.11))(zod@4.1.11) + '@mastra/schema-compat': 0.11.4(ai@4.3.19(react@18.3.1)(zod@3.25.76))(zod@3.25.76) + '@openrouter/ai-sdk-provider-v5': '@openrouter/ai-sdk-provider@1.2.0(ai@4.3.19(react@18.3.1)(zod@3.25.76))(zod@3.25.76)' '@opentelemetry/api': 1.9.0 '@opentelemetry/auto-instrumentations-node': 0.62.2(@opentelemetry/api@1.9.0)(@opentelemetry/core@2.1.0(@opentelemetry/api@1.9.0)) '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0) @@ -20035,12 +20126,12 @@ snapshots: '@opentelemetry/sdk-trace-node': 2.1.0(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.37.0 '@sindresorhus/slugify': 2.2.1 - ai: 4.3.19(react@18.3.1)(zod@4.1.11) - ai-v5: ai@5.0.44(zod@4.1.11) + ai: 4.3.19(react@18.3.1)(zod@3.25.76) + ai-v5: ai@5.0.60(zod@3.25.76) date-fns: 3.6.0 dotenv: 16.6.1 hono: 4.9.9 - hono-openapi: 0.4.8(effect@3.16.12)(hono@4.9.9)(openapi-types@12.1.3)(zod@4.1.11) + hono-openapi: 0.4.8(effect@3.16.12)(hono@4.9.9)(openapi-types@12.1.3)(zod@3.25.76) js-tiktoken: 1.0.21 json-schema: 0.4.0 json-schema-to-zod: 2.6.1 @@ -20050,8 +20141,8 @@ snapshots: radash: 12.1.1 sift: 17.1.3 xstate: 5.22.0 - zod: 4.1.11 - zod-to-json-schema: 3.24.6(zod@4.1.11) + zod: 3.25.76 + zod-to-json-schema: 3.24.6(zod@3.25.76) transitivePeerDependencies: - '@hono/arktype-validator' - '@hono/effect-validator' @@ -20069,13 +20160,13 @@ snapshots: - valibot - zod-openapi - '@mastra/deployer@0.18.0(@mastra/core@0.18.0(effect@3.16.12)(openapi-types@12.1.3)(react@18.3.1)(zod@4.1.11))(typescript@5.5.4)(zod@4.1.11)': + '@mastra/deployer@0.18.0(@mastra/core@0.20.2(effect@3.16.12)(openapi-types@12.1.3)(react@18.3.1)(zod@3.25.76))(typescript@5.5.4)(zod@3.25.76)': dependencies: '@babel/core': 7.28.4 '@babel/helper-module-imports': 7.27.1 '@babel/preset-typescript': 7.27.1(@babel/core@7.28.4) - '@mastra/core': 0.18.0(effect@3.16.12)(openapi-types@12.1.3)(react@18.3.1)(zod@4.1.11) - '@mastra/server': 0.18.0(@mastra/core@0.18.0(effect@3.16.12)(openapi-types@12.1.3)(react@18.3.1)(zod@4.1.11))(zod@4.1.11) + '@mastra/core': 0.20.2(effect@3.16.12)(openapi-types@12.1.3)(react@18.3.1)(zod@3.25.76) + '@mastra/server': 0.18.0(@mastra/core@0.20.2(effect@3.16.12)(openapi-types@12.1.3)(react@18.3.1)(zod@3.25.76))(zod@3.25.76) '@neon-rs/load': 0.1.82 '@optimize-lodash/rollup-plugin': 5.0.2(rollup@4.50.2) '@rollup/plugin-alias': 5.1.1(rollup@4.50.2) @@ -20100,40 +20191,40 @@ snapshots: rollup-plugin-node-externals: 8.1.1(rollup@4.50.2) tinyglobby: 0.2.15 typescript-paths: 1.5.1(typescript@5.5.4) - zod: 4.1.11 + zod: 3.25.76 transitivePeerDependencies: - supports-color - typescript - '@mastra/loggers@0.10.13(@mastra/core@0.18.0(effect@3.16.12)(openapi-types@12.1.3)(react@18.3.1)(zod@4.1.11))': + '@mastra/loggers@0.10.13(@mastra/core@0.20.2(effect@3.16.12)(openapi-types@12.1.3)(react@18.3.1)(zod@3.25.76))': dependencies: - '@mastra/core': 0.18.0(effect@3.16.12)(openapi-types@12.1.3)(react@18.3.1)(zod@4.1.11) + '@mastra/core': 0.20.2(effect@3.16.12)(openapi-types@12.1.3)(react@18.3.1)(zod@3.25.76) pino: 9.12.0 pino-pretty: 13.1.1 - '@mastra/mcp@0.13.1(@mastra/core@0.18.0(effect@3.16.12)(openapi-types@12.1.3)(react@18.3.1)(zod@4.1.11))(@types/json-schema@7.0.15)(zod@4.1.11)': + '@mastra/mcp@0.13.1(@mastra/core@0.20.2(effect@3.16.12)(openapi-types@12.1.3)(react@18.3.1)(zod@3.25.76))(@types/json-schema@7.0.15)(zod@3.25.76)': dependencies: '@apidevtools/json-schema-ref-parser': 14.2.1(@types/json-schema@7.0.15) - '@mastra/core': 0.18.0(effect@3.16.12)(openapi-types@12.1.3)(react@18.3.1)(zod@4.1.11) + '@mastra/core': 0.20.2(effect@3.16.12)(openapi-types@12.1.3)(react@18.3.1)(zod@3.25.76) '@modelcontextprotocol/sdk': 1.18.2 date-fns: 4.1.0 exit-hook: 4.0.0 fast-deep-equal: 3.1.3 uuid: 11.1.0 - zod: 4.1.11 + zod: 3.25.76 zod-from-json-schema: 0.5.0 zod-from-json-schema-v3: zod-from-json-schema@0.0.5 transitivePeerDependencies: - '@types/json-schema' - supports-color - '@mastra/memory@0.15.3(@mastra/core@0.18.0(effect@3.16.12)(openapi-types@12.1.3)(react@18.3.1)(zod@4.1.11))(react@18.3.1)(zod@4.1.11)': + '@mastra/memory@0.15.6(@mastra/core@0.20.2(effect@3.16.12)(openapi-types@12.1.3)(react@18.3.1)(zod@3.25.76))(react@18.3.1)(zod@3.25.76)': dependencies: - '@mastra/core': 0.18.0(effect@3.16.12)(openapi-types@12.1.3)(react@18.3.1)(zod@4.1.11) - '@mastra/schema-compat': 0.11.4(ai@4.3.19(react@18.3.1)(zod@4.1.11))(zod@4.1.11) + '@mastra/core': 0.20.2(effect@3.16.12)(openapi-types@12.1.3)(react@18.3.1)(zod@3.25.76) + '@mastra/schema-compat': 0.11.4(ai@4.3.19(react@18.3.1)(zod@3.25.76))(zod@3.25.76) '@upstash/redis': 1.35.4 - ai: 4.3.19(react@18.3.1)(zod@4.1.11) - ai-v5: ai@5.0.44(zod@4.1.11) + ai: 4.3.19(react@18.3.1)(zod@3.25.76) + ai-v5: ai@5.0.60(zod@3.25.76) async-mutex: 0.5.0 js-tiktoken: 1.0.21 json-schema: 0.4.0 @@ -20142,15 +20233,15 @@ snapshots: postgres: 3.4.7 redis: 5.8.2 xxhash-wasm: 1.1.0 - zod: 4.1.11 - zod-to-json-schema: 3.24.6(zod@4.1.11) + zod: 3.25.76 + zod-to-json-schema: 3.24.6(zod@3.25.76) transitivePeerDependencies: - pg-native - react - '@mastra/pg@0.16.1(@mastra/core@0.18.0(effect@3.16.12)(openapi-types@12.1.3)(react@18.3.1)(zod@4.1.11))(pg-query-stream@4.10.3(pg@8.16.3))': + '@mastra/pg@0.17.2(@mastra/core@0.20.2(effect@3.16.12)(openapi-types@12.1.3)(react@18.3.1)(zod@3.25.76))(pg-query-stream@4.10.3(pg@8.16.3))': dependencies: - '@mastra/core': 0.18.0(effect@3.16.12)(openapi-types@12.1.3)(react@18.3.1)(zod@4.1.11) + '@mastra/core': 0.20.2(effect@3.16.12)(openapi-types@12.1.3)(react@18.3.1)(zod@3.25.76) async-mutex: 0.5.0 pg: 8.16.3 pg-promise: 11.15.0(pg-query-stream@4.10.3(pg@8.16.3)) @@ -20159,19 +20250,19 @@ snapshots: - pg-native - pg-query-stream - '@mastra/schema-compat@0.11.4(ai@4.3.19(react@18.3.1)(zod@4.1.11))(zod@4.1.11)': + '@mastra/schema-compat@0.11.4(ai@4.3.19(react@18.3.1)(zod@3.25.76))(zod@3.25.76)': dependencies: - ai: 4.3.19(react@18.3.1)(zod@4.1.11) + ai: 4.3.19(react@18.3.1)(zod@3.25.76) json-schema: 0.4.0 - zod: 4.1.11 + zod: 3.25.76 zod-from-json-schema: 0.5.0 zod-from-json-schema-v3: zod-from-json-schema@0.0.5 - zod-to-json-schema: 3.24.6(zod@4.1.11) + zod-to-json-schema: 3.24.6(zod@3.25.76) - '@mastra/server@0.18.0(@mastra/core@0.18.0(effect@3.16.12)(openapi-types@12.1.3)(react@18.3.1)(zod@4.1.11))(zod@4.1.11)': + '@mastra/server@0.18.0(@mastra/core@0.20.2(effect@3.16.12)(openapi-types@12.1.3)(react@18.3.1)(zod@3.25.76))(zod@3.25.76)': dependencies: - '@mastra/core': 0.18.0(effect@3.16.12)(openapi-types@12.1.3)(react@18.3.1)(zod@4.1.11) - zod: 4.1.11 + '@mastra/core': 0.20.2(effect@3.16.12)(openapi-types@12.1.3)(react@18.3.1)(zod@3.25.76) + zod: 3.25.76 '@meronex/icons@4.0.0(react@18.3.1)': dependencies: @@ -20687,11 +20778,11 @@ snapshots: '@next/swc-win32-x64-msvc@14.2.33': optional: true - '@neynar/nodejs-sdk@2.46.0(@nestjs/microservices@10.4.20)(@nestjs/platform-express@10.4.20)(@types/node@18.16.9)(bufferutil@4.0.9)(class-transformer@0.5.1)(class-validator@0.14.2)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@4.1.11)': + '@neynar/nodejs-sdk@2.46.0(@nestjs/microservices@10.4.20)(@nestjs/platform-express@10.4.20)(@types/node@18.16.9)(bufferutil@4.0.9)(class-transformer@0.5.1)(class-validator@0.14.2)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76)': dependencies: '@openapitools/openapi-generator-cli': 2.24.0(@nestjs/microservices@10.4.20)(@nestjs/platform-express@10.4.20)(@types/node@18.16.9)(class-transformer@0.5.1)(class-validator@0.14.2) semver: 7.7.2 - viem: 2.37.9(bufferutil@4.0.9)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@4.1.11) + viem: 2.37.9(bufferutil@4.0.9)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76) transitivePeerDependencies: - '@nestjs/microservices' - '@nestjs/platform-express' @@ -20838,6 +20929,11 @@ snapshots: - encoding - supports-color + '@openrouter/ai-sdk-provider@1.2.0(ai@4.3.19(react@18.3.1)(zod@3.25.76))(zod@3.25.76)': + dependencies: + ai: 4.3.19(react@18.3.1)(zod@3.25.76) + zod: 3.25.76 + '@opentelemetry/api-logs@0.203.0': dependencies: '@opentelemetry/api': 1.9.0 @@ -21923,7 +22019,7 @@ snapshots: '@posthog/core@1.2.1': {} - '@postiz/wallets@0.0.1(@babel/runtime@7.28.4)(@react-native-async-storage/async-storage@1.24.0(react-native@0.81.4(@babel/core@7.28.4)(@types/react@18.3.1)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.5.4)(utf-8-validate@5.0.10))(@types/react@18.3.1)(@upstash/redis@1.35.4)(bs58@6.0.0)(bufferutil@4.0.9)(ioredis@5.8.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@4.1.11)': + '@postiz/wallets@0.0.1(@babel/runtime@7.28.4)(@react-native-async-storage/async-storage@1.24.0(react-native@0.81.4(@babel/core@7.28.4)(@types/react@18.3.1)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.5.4)(utf-8-validate@5.0.10))(@types/react@18.3.1)(@upstash/redis@1.35.4)(bs58@6.0.0)(bufferutil@4.0.9)(ioredis@5.8.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76)': dependencies: '@solana/wallet-adapter-alpha': 0.1.14(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.5.4)(utf-8-validate@5.0.10)) '@solana/wallet-adapter-avana': 0.1.17(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.5.4)(utf-8-validate@5.0.10)) @@ -21958,7 +22054,7 @@ snapshots: '@solana/wallet-adapter-torus': 0.11.32(@babel/runtime@7.28.4)(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.5.4)(utf-8-validate@5.0.10))(bufferutil@4.0.9)(typescript@5.5.4)(utf-8-validate@5.0.10) '@solana/wallet-adapter-trust': 0.1.17(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.5.4)(utf-8-validate@5.0.10)) '@solana/wallet-adapter-unsafe-burner': 0.1.11(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.5.4)(utf-8-validate@5.0.10)) - '@solana/wallet-adapter-walletconnect': 0.1.21(@react-native-async-storage/async-storage@1.24.0(react-native@0.81.4(@babel/core@7.28.4)(@types/react@18.3.1)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.5.4)(utf-8-validate@5.0.10))(@types/react@18.3.1)(@upstash/redis@1.35.4)(bufferutil@4.0.9)(ioredis@5.8.0)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@4.1.11) + '@solana/wallet-adapter-walletconnect': 0.1.21(@react-native-async-storage/async-storage@1.24.0(react-native@0.81.4(@babel/core@7.28.4)(@types/react@18.3.1)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.5.4)(utf-8-validate@5.0.10))(@types/react@18.3.1)(@upstash/redis@1.35.4)(bufferutil@4.0.9)(ioredis@5.8.0)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76) '@solana/wallet-adapter-xdefi': 0.1.11(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.5.4)(utf-8-validate@5.0.10)) '@solana/web3.js': 1.98.4(bufferutil@4.0.9)(typescript@5.5.4)(utf-8-validate@5.0.10) transitivePeerDependencies: @@ -22569,24 +22665,24 @@ snapshots: - utf-8-validate - zod - '@reown/appkit-common@1.7.2(bufferutil@4.0.9)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@4.1.11)': + '@reown/appkit-common@1.7.2(bufferutil@4.0.9)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76)': dependencies: big.js: 6.2.2 dayjs: 1.11.13 - viem: 2.37.9(bufferutil@4.0.9)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@4.1.11) + viem: 2.37.9(bufferutil@4.0.9)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76) transitivePeerDependencies: - bufferutil - typescript - utf-8-validate - zod - '@reown/appkit-controllers@1.7.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.81.4(@babel/core@7.28.4)(@types/react@18.3.1)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)))(@types/react@18.3.1)(@upstash/redis@1.35.4)(bufferutil@4.0.9)(ioredis@5.8.0)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@4.1.11)': + '@reown/appkit-controllers@1.7.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.81.4(@babel/core@7.28.4)(@types/react@18.3.1)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)))(@types/react@18.3.1)(@upstash/redis@1.35.4)(bufferutil@4.0.9)(ioredis@5.8.0)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76)': dependencies: - '@reown/appkit-common': 1.7.2(bufferutil@4.0.9)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@4.1.11) + '@reown/appkit-common': 1.7.2(bufferutil@4.0.9)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76) '@reown/appkit-wallet': 1.7.2(bufferutil@4.0.9)(typescript@5.5.4)(utf-8-validate@5.0.10) - '@walletconnect/universal-provider': 2.19.1(@react-native-async-storage/async-storage@1.24.0(react-native@0.81.4(@babel/core@7.28.4)(@types/react@18.3.1)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)))(@upstash/redis@1.35.4)(bufferutil@4.0.9)(ioredis@5.8.0)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@4.1.11) + '@walletconnect/universal-provider': 2.19.1(@react-native-async-storage/async-storage@1.24.0(react-native@0.81.4(@babel/core@7.28.4)(@types/react@18.3.1)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)))(@upstash/redis@1.35.4)(bufferutil@4.0.9)(ioredis@5.8.0)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76) valtio: 1.13.2(@types/react@18.3.1)(react@18.3.1) - viem: 2.37.9(bufferutil@4.0.9)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@4.1.11) + viem: 2.37.9(bufferutil@4.0.9)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -22619,12 +22715,12 @@ snapshots: dependencies: buffer: 6.0.3 - '@reown/appkit-scaffold-ui@1.7.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.81.4(@babel/core@7.28.4)(@types/react@18.3.1)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)))(@types/react@18.3.1)(@upstash/redis@1.35.4)(bufferutil@4.0.9)(ioredis@5.8.0)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@18.3.1)(react@18.3.1))(zod@4.1.11)': + '@reown/appkit-scaffold-ui@1.7.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.81.4(@babel/core@7.28.4)(@types/react@18.3.1)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)))(@types/react@18.3.1)(@upstash/redis@1.35.4)(bufferutil@4.0.9)(ioredis@5.8.0)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@18.3.1)(react@18.3.1))(zod@3.25.76)': dependencies: - '@reown/appkit-common': 1.7.2(bufferutil@4.0.9)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@4.1.11) - '@reown/appkit-controllers': 1.7.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.81.4(@babel/core@7.28.4)(@types/react@18.3.1)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)))(@types/react@18.3.1)(@upstash/redis@1.35.4)(bufferutil@4.0.9)(ioredis@5.8.0)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@4.1.11) - '@reown/appkit-ui': 1.7.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.81.4(@babel/core@7.28.4)(@types/react@18.3.1)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)))(@types/react@18.3.1)(@upstash/redis@1.35.4)(bufferutil@4.0.9)(ioredis@5.8.0)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@4.1.11) - '@reown/appkit-utils': 1.7.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.81.4(@babel/core@7.28.4)(@types/react@18.3.1)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)))(@types/react@18.3.1)(@upstash/redis@1.35.4)(bufferutil@4.0.9)(ioredis@5.8.0)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@18.3.1)(react@18.3.1))(zod@4.1.11) + '@reown/appkit-common': 1.7.2(bufferutil@4.0.9)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76) + '@reown/appkit-controllers': 1.7.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.81.4(@babel/core@7.28.4)(@types/react@18.3.1)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)))(@types/react@18.3.1)(@upstash/redis@1.35.4)(bufferutil@4.0.9)(ioredis@5.8.0)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76) + '@reown/appkit-ui': 1.7.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.81.4(@babel/core@7.28.4)(@types/react@18.3.1)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)))(@types/react@18.3.1)(@upstash/redis@1.35.4)(bufferutil@4.0.9)(ioredis@5.8.0)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76) + '@reown/appkit-utils': 1.7.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.81.4(@babel/core@7.28.4)(@types/react@18.3.1)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)))(@types/react@18.3.1)(@upstash/redis@1.35.4)(bufferutil@4.0.9)(ioredis@5.8.0)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@18.3.1)(react@18.3.1))(zod@3.25.76) '@reown/appkit-wallet': 1.7.2(bufferutil@4.0.9)(typescript@5.5.4)(utf-8-validate@5.0.10) lit: 3.1.0 transitivePeerDependencies: @@ -22656,10 +22752,10 @@ snapshots: - valtio - zod - '@reown/appkit-ui@1.7.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.81.4(@babel/core@7.28.4)(@types/react@18.3.1)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)))(@types/react@18.3.1)(@upstash/redis@1.35.4)(bufferutil@4.0.9)(ioredis@5.8.0)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@4.1.11)': + '@reown/appkit-ui@1.7.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.81.4(@babel/core@7.28.4)(@types/react@18.3.1)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)))(@types/react@18.3.1)(@upstash/redis@1.35.4)(bufferutil@4.0.9)(ioredis@5.8.0)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76)': dependencies: - '@reown/appkit-common': 1.7.2(bufferutil@4.0.9)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@4.1.11) - '@reown/appkit-controllers': 1.7.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.81.4(@babel/core@7.28.4)(@types/react@18.3.1)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)))(@types/react@18.3.1)(@upstash/redis@1.35.4)(bufferutil@4.0.9)(ioredis@5.8.0)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@4.1.11) + '@reown/appkit-common': 1.7.2(bufferutil@4.0.9)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76) + '@reown/appkit-controllers': 1.7.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.81.4(@babel/core@7.28.4)(@types/react@18.3.1)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)))(@types/react@18.3.1)(@upstash/redis@1.35.4)(bufferutil@4.0.9)(ioredis@5.8.0)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76) '@reown/appkit-wallet': 1.7.2(bufferutil@4.0.9)(typescript@5.5.4)(utf-8-validate@5.0.10) lit: 3.1.0 qrcode: 1.5.3 @@ -22691,16 +22787,16 @@ snapshots: - utf-8-validate - zod - '@reown/appkit-utils@1.7.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.81.4(@babel/core@7.28.4)(@types/react@18.3.1)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)))(@types/react@18.3.1)(@upstash/redis@1.35.4)(bufferutil@4.0.9)(ioredis@5.8.0)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@18.3.1)(react@18.3.1))(zod@4.1.11)': + '@reown/appkit-utils@1.7.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.81.4(@babel/core@7.28.4)(@types/react@18.3.1)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)))(@types/react@18.3.1)(@upstash/redis@1.35.4)(bufferutil@4.0.9)(ioredis@5.8.0)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@18.3.1)(react@18.3.1))(zod@3.25.76)': dependencies: - '@reown/appkit-common': 1.7.2(bufferutil@4.0.9)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@4.1.11) - '@reown/appkit-controllers': 1.7.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.81.4(@babel/core@7.28.4)(@types/react@18.3.1)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)))(@types/react@18.3.1)(@upstash/redis@1.35.4)(bufferutil@4.0.9)(ioredis@5.8.0)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@4.1.11) + '@reown/appkit-common': 1.7.2(bufferutil@4.0.9)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76) + '@reown/appkit-controllers': 1.7.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.81.4(@babel/core@7.28.4)(@types/react@18.3.1)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)))(@types/react@18.3.1)(@upstash/redis@1.35.4)(bufferutil@4.0.9)(ioredis@5.8.0)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76) '@reown/appkit-polyfills': 1.7.2 '@reown/appkit-wallet': 1.7.2(bufferutil@4.0.9)(typescript@5.5.4)(utf-8-validate@5.0.10) '@walletconnect/logger': 2.1.2 - '@walletconnect/universal-provider': 2.19.1(@react-native-async-storage/async-storage@1.24.0(react-native@0.81.4(@babel/core@7.28.4)(@types/react@18.3.1)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)))(@upstash/redis@1.35.4)(bufferutil@4.0.9)(ioredis@5.8.0)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@4.1.11) + '@walletconnect/universal-provider': 2.19.1(@react-native-async-storage/async-storage@1.24.0(react-native@0.81.4(@babel/core@7.28.4)(@types/react@18.3.1)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)))(@upstash/redis@1.35.4)(bufferutil@4.0.9)(ioredis@5.8.0)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76) valtio: 1.13.2(@types/react@18.3.1)(react@18.3.1) - viem: 2.37.9(bufferutil@4.0.9)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@4.1.11) + viem: 2.37.9(bufferutil@4.0.9)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -22740,20 +22836,20 @@ snapshots: - typescript - utf-8-validate - '@reown/appkit@1.7.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.81.4(@babel/core@7.28.4)(@types/react@18.3.1)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)))(@types/react@18.3.1)(@upstash/redis@1.35.4)(bufferutil@4.0.9)(ioredis@5.8.0)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@4.1.11)': + '@reown/appkit@1.7.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.81.4(@babel/core@7.28.4)(@types/react@18.3.1)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)))(@types/react@18.3.1)(@upstash/redis@1.35.4)(bufferutil@4.0.9)(ioredis@5.8.0)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76)': dependencies: - '@reown/appkit-common': 1.7.2(bufferutil@4.0.9)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@4.1.11) - '@reown/appkit-controllers': 1.7.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.81.4(@babel/core@7.28.4)(@types/react@18.3.1)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)))(@types/react@18.3.1)(@upstash/redis@1.35.4)(bufferutil@4.0.9)(ioredis@5.8.0)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@4.1.11) + '@reown/appkit-common': 1.7.2(bufferutil@4.0.9)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76) + '@reown/appkit-controllers': 1.7.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.81.4(@babel/core@7.28.4)(@types/react@18.3.1)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)))(@types/react@18.3.1)(@upstash/redis@1.35.4)(bufferutil@4.0.9)(ioredis@5.8.0)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76) '@reown/appkit-polyfills': 1.7.2 - '@reown/appkit-scaffold-ui': 1.7.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.81.4(@babel/core@7.28.4)(@types/react@18.3.1)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)))(@types/react@18.3.1)(@upstash/redis@1.35.4)(bufferutil@4.0.9)(ioredis@5.8.0)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@18.3.1)(react@18.3.1))(zod@4.1.11) - '@reown/appkit-ui': 1.7.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.81.4(@babel/core@7.28.4)(@types/react@18.3.1)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)))(@types/react@18.3.1)(@upstash/redis@1.35.4)(bufferutil@4.0.9)(ioredis@5.8.0)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@4.1.11) - '@reown/appkit-utils': 1.7.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.81.4(@babel/core@7.28.4)(@types/react@18.3.1)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)))(@types/react@18.3.1)(@upstash/redis@1.35.4)(bufferutil@4.0.9)(ioredis@5.8.0)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@18.3.1)(react@18.3.1))(zod@4.1.11) + '@reown/appkit-scaffold-ui': 1.7.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.81.4(@babel/core@7.28.4)(@types/react@18.3.1)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)))(@types/react@18.3.1)(@upstash/redis@1.35.4)(bufferutil@4.0.9)(ioredis@5.8.0)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@18.3.1)(react@18.3.1))(zod@3.25.76) + '@reown/appkit-ui': 1.7.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.81.4(@babel/core@7.28.4)(@types/react@18.3.1)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)))(@types/react@18.3.1)(@upstash/redis@1.35.4)(bufferutil@4.0.9)(ioredis@5.8.0)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76) + '@reown/appkit-utils': 1.7.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.81.4(@babel/core@7.28.4)(@types/react@18.3.1)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)))(@types/react@18.3.1)(@upstash/redis@1.35.4)(bufferutil@4.0.9)(ioredis@5.8.0)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@18.3.1)(react@18.3.1))(zod@3.25.76) '@reown/appkit-wallet': 1.7.2(bufferutil@4.0.9)(typescript@5.5.4)(utf-8-validate@5.0.10) '@walletconnect/types': 2.19.1(@react-native-async-storage/async-storage@1.24.0(react-native@0.81.4(@babel/core@7.28.4)(@types/react@18.3.1)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)))(@upstash/redis@1.35.4)(ioredis@5.8.0) - '@walletconnect/universal-provider': 2.19.1(@react-native-async-storage/async-storage@1.24.0(react-native@0.81.4(@babel/core@7.28.4)(@types/react@18.3.1)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)))(@upstash/redis@1.35.4)(bufferutil@4.0.9)(ioredis@5.8.0)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@4.1.11) + '@walletconnect/universal-provider': 2.19.1(@react-native-async-storage/async-storage@1.24.0(react-native@0.81.4(@babel/core@7.28.4)(@types/react@18.3.1)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)))(@upstash/redis@1.35.4)(bufferutil@4.0.9)(ioredis@5.8.0)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76) bs58: 6.0.0 valtio: 1.13.2(@types/react@18.3.1)(react@18.3.1) - viem: 2.37.9(bufferutil@4.0.9)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@4.1.11) + viem: 2.37.9(bufferutil@4.0.9)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -23990,11 +24086,11 @@ snapshots: '@solana/wallet-standard-util': 1.1.2 '@solana/web3.js': 1.98.4(bufferutil@4.0.9)(typescript@5.5.4)(utf-8-validate@5.0.10) - '@solana/wallet-adapter-walletconnect@0.1.21(@react-native-async-storage/async-storage@1.24.0(react-native@0.81.4(@babel/core@7.28.4)(@types/react@18.3.1)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.5.4)(utf-8-validate@5.0.10))(@types/react@18.3.1)(@upstash/redis@1.35.4)(bufferutil@4.0.9)(ioredis@5.8.0)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@4.1.11)': + '@solana/wallet-adapter-walletconnect@0.1.21(@react-native-async-storage/async-storage@1.24.0(react-native@0.81.4(@babel/core@7.28.4)(@types/react@18.3.1)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.5.4)(utf-8-validate@5.0.10))(@types/react@18.3.1)(@upstash/redis@1.35.4)(bufferutil@4.0.9)(ioredis@5.8.0)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76)': dependencies: '@solana/wallet-adapter-base': 0.9.27(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.5.4)(utf-8-validate@5.0.10)) '@solana/web3.js': 1.98.4(bufferutil@4.0.9)(typescript@5.5.4)(utf-8-validate@5.0.10) - '@walletconnect/solana-adapter': 0.0.8(@react-native-async-storage/async-storage@1.24.0(react-native@0.81.4(@babel/core@7.28.4)(@types/react@18.3.1)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)))(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.5.4)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.5.4)(utf-8-validate@5.0.10))(@types/react@18.3.1)(@upstash/redis@1.35.4)(bufferutil@4.0.9)(ioredis@5.8.0)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@4.1.11) + '@walletconnect/solana-adapter': 0.0.8(@react-native-async-storage/async-storage@1.24.0(react-native@0.81.4(@babel/core@7.28.4)(@types/react@18.3.1)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)))(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.5.4)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.5.4)(utf-8-validate@5.0.10))(@types/react@18.3.1)(@upstash/redis@1.35.4)(bufferutil@4.0.9)(ioredis@5.8.0)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -25806,6 +25902,8 @@ snapshots: transitivePeerDependencies: - graphql + '@vercel/oidc@3.0.2': {} + '@vitejs/plugin-react@4.7.0(vite@6.3.6(@types/node@18.16.9)(jiti@2.6.0)(lightningcss@1.30.1)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1))': dependencies: '@babel/core': 7.28.4 @@ -25926,7 +26024,7 @@ snapshots: dependencies: '@wallet-standard/base': 1.1.0 - '@walletconnect/core@2.19.0(@react-native-async-storage/async-storage@1.24.0(react-native@0.81.4(@babel/core@7.28.4)(@types/react@18.3.1)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)))(@upstash/redis@1.35.4)(bufferutil@4.0.9)(ioredis@5.8.0)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@4.1.11)': + '@walletconnect/core@2.19.0(@react-native-async-storage/async-storage@1.24.0(react-native@0.81.4(@babel/core@7.28.4)(@types/react@18.3.1)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)))(@upstash/redis@1.35.4)(bufferutil@4.0.9)(ioredis@5.8.0)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76)': dependencies: '@walletconnect/heartbeat': 1.2.2 '@walletconnect/jsonrpc-provider': 1.0.14 @@ -25940,7 +26038,7 @@ snapshots: '@walletconnect/safe-json': 1.0.2 '@walletconnect/time': 1.0.2 '@walletconnect/types': 2.19.0(@react-native-async-storage/async-storage@1.24.0(react-native@0.81.4(@babel/core@7.28.4)(@types/react@18.3.1)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)))(@upstash/redis@1.35.4)(ioredis@5.8.0) - '@walletconnect/utils': 2.19.0(@react-native-async-storage/async-storage@1.24.0(react-native@0.81.4(@babel/core@7.28.4)(@types/react@18.3.1)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)))(@upstash/redis@1.35.4)(bufferutil@4.0.9)(ioredis@5.8.0)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@4.1.11) + '@walletconnect/utils': 2.19.0(@react-native-async-storage/async-storage@1.24.0(react-native@0.81.4(@babel/core@7.28.4)(@types/react@18.3.1)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)))(@upstash/redis@1.35.4)(bufferutil@4.0.9)(ioredis@5.8.0)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76) '@walletconnect/window-getters': 1.0.1 events: 3.3.0 lodash.isequal: 4.5.0 @@ -25970,7 +26068,7 @@ snapshots: - utf-8-validate - zod - '@walletconnect/core@2.19.1(@react-native-async-storage/async-storage@1.24.0(react-native@0.81.4(@babel/core@7.28.4)(@types/react@18.3.1)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)))(@upstash/redis@1.35.4)(bufferutil@4.0.9)(ioredis@5.8.0)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@4.1.11)': + '@walletconnect/core@2.19.1(@react-native-async-storage/async-storage@1.24.0(react-native@0.81.4(@babel/core@7.28.4)(@types/react@18.3.1)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)))(@upstash/redis@1.35.4)(bufferutil@4.0.9)(ioredis@5.8.0)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76)': dependencies: '@walletconnect/heartbeat': 1.2.2 '@walletconnect/jsonrpc-provider': 1.0.14 @@ -25984,7 +26082,7 @@ snapshots: '@walletconnect/safe-json': 1.0.2 '@walletconnect/time': 1.0.2 '@walletconnect/types': 2.19.1(@react-native-async-storage/async-storage@1.24.0(react-native@0.81.4(@babel/core@7.28.4)(@types/react@18.3.1)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)))(@upstash/redis@1.35.4)(ioredis@5.8.0) - '@walletconnect/utils': 2.19.1(@react-native-async-storage/async-storage@1.24.0(react-native@0.81.4(@babel/core@7.28.4)(@types/react@18.3.1)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)))(@upstash/redis@1.35.4)(bufferutil@4.0.9)(ioredis@5.8.0)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@4.1.11) + '@walletconnect/utils': 2.19.1(@react-native-async-storage/async-storage@1.24.0(react-native@0.81.4(@babel/core@7.28.4)(@types/react@18.3.1)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)))(@upstash/redis@1.35.4)(bufferutil@4.0.9)(ioredis@5.8.0)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76) '@walletconnect/window-getters': 1.0.1 es-toolkit: 1.33.0 events: 3.3.0 @@ -26113,16 +26211,16 @@ snapshots: dependencies: tslib: 1.14.1 - '@walletconnect/sign-client@2.19.0(@react-native-async-storage/async-storage@1.24.0(react-native@0.81.4(@babel/core@7.28.4)(@types/react@18.3.1)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)))(@upstash/redis@1.35.4)(bufferutil@4.0.9)(ioredis@5.8.0)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@4.1.11)': + '@walletconnect/sign-client@2.19.0(@react-native-async-storage/async-storage@1.24.0(react-native@0.81.4(@babel/core@7.28.4)(@types/react@18.3.1)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)))(@upstash/redis@1.35.4)(bufferutil@4.0.9)(ioredis@5.8.0)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76)': dependencies: - '@walletconnect/core': 2.19.0(@react-native-async-storage/async-storage@1.24.0(react-native@0.81.4(@babel/core@7.28.4)(@types/react@18.3.1)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)))(@upstash/redis@1.35.4)(bufferutil@4.0.9)(ioredis@5.8.0)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@4.1.11) + '@walletconnect/core': 2.19.0(@react-native-async-storage/async-storage@1.24.0(react-native@0.81.4(@babel/core@7.28.4)(@types/react@18.3.1)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)))(@upstash/redis@1.35.4)(bufferutil@4.0.9)(ioredis@5.8.0)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76) '@walletconnect/events': 1.0.1 '@walletconnect/heartbeat': 1.2.2 '@walletconnect/jsonrpc-utils': 1.0.8 '@walletconnect/logger': 2.1.2 '@walletconnect/time': 1.0.2 '@walletconnect/types': 2.19.0(@react-native-async-storage/async-storage@1.24.0(react-native@0.81.4(@babel/core@7.28.4)(@types/react@18.3.1)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)))(@upstash/redis@1.35.4)(ioredis@5.8.0) - '@walletconnect/utils': 2.19.0(@react-native-async-storage/async-storage@1.24.0(react-native@0.81.4(@babel/core@7.28.4)(@types/react@18.3.1)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)))(@upstash/redis@1.35.4)(bufferutil@4.0.9)(ioredis@5.8.0)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@4.1.11) + '@walletconnect/utils': 2.19.0(@react-native-async-storage/async-storage@1.24.0(react-native@0.81.4(@babel/core@7.28.4)(@types/react@18.3.1)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)))(@upstash/redis@1.35.4)(bufferutil@4.0.9)(ioredis@5.8.0)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76) events: 3.3.0 transitivePeerDependencies: - '@azure/app-configuration' @@ -26149,16 +26247,16 @@ snapshots: - utf-8-validate - zod - '@walletconnect/sign-client@2.19.1(@react-native-async-storage/async-storage@1.24.0(react-native@0.81.4(@babel/core@7.28.4)(@types/react@18.3.1)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)))(@upstash/redis@1.35.4)(bufferutil@4.0.9)(ioredis@5.8.0)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@4.1.11)': + '@walletconnect/sign-client@2.19.1(@react-native-async-storage/async-storage@1.24.0(react-native@0.81.4(@babel/core@7.28.4)(@types/react@18.3.1)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)))(@upstash/redis@1.35.4)(bufferutil@4.0.9)(ioredis@5.8.0)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76)': dependencies: - '@walletconnect/core': 2.19.1(@react-native-async-storage/async-storage@1.24.0(react-native@0.81.4(@babel/core@7.28.4)(@types/react@18.3.1)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)))(@upstash/redis@1.35.4)(bufferutil@4.0.9)(ioredis@5.8.0)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@4.1.11) + '@walletconnect/core': 2.19.1(@react-native-async-storage/async-storage@1.24.0(react-native@0.81.4(@babel/core@7.28.4)(@types/react@18.3.1)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)))(@upstash/redis@1.35.4)(bufferutil@4.0.9)(ioredis@5.8.0)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76) '@walletconnect/events': 1.0.1 '@walletconnect/heartbeat': 1.2.2 '@walletconnect/jsonrpc-utils': 1.0.8 '@walletconnect/logger': 2.1.2 '@walletconnect/time': 1.0.2 '@walletconnect/types': 2.19.1(@react-native-async-storage/async-storage@1.24.0(react-native@0.81.4(@babel/core@7.28.4)(@types/react@18.3.1)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)))(@upstash/redis@1.35.4)(ioredis@5.8.0) - '@walletconnect/utils': 2.19.1(@react-native-async-storage/async-storage@1.24.0(react-native@0.81.4(@babel/core@7.28.4)(@types/react@18.3.1)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)))(@upstash/redis@1.35.4)(bufferutil@4.0.9)(ioredis@5.8.0)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@4.1.11) + '@walletconnect/utils': 2.19.1(@react-native-async-storage/async-storage@1.24.0(react-native@0.81.4(@babel/core@7.28.4)(@types/react@18.3.1)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)))(@upstash/redis@1.35.4)(bufferutil@4.0.9)(ioredis@5.8.0)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76) events: 3.3.0 transitivePeerDependencies: - '@azure/app-configuration' @@ -26185,13 +26283,13 @@ snapshots: - utf-8-validate - zod - '@walletconnect/solana-adapter@0.0.8(@react-native-async-storage/async-storage@1.24.0(react-native@0.81.4(@babel/core@7.28.4)(@types/react@18.3.1)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)))(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.5.4)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.5.4)(utf-8-validate@5.0.10))(@types/react@18.3.1)(@upstash/redis@1.35.4)(bufferutil@4.0.9)(ioredis@5.8.0)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@4.1.11)': + '@walletconnect/solana-adapter@0.0.8(@react-native-async-storage/async-storage@1.24.0(react-native@0.81.4(@babel/core@7.28.4)(@types/react@18.3.1)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)))(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.5.4)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.5.4)(utf-8-validate@5.0.10))(@types/react@18.3.1)(@upstash/redis@1.35.4)(bufferutil@4.0.9)(ioredis@5.8.0)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76)': dependencies: - '@reown/appkit': 1.7.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.81.4(@babel/core@7.28.4)(@types/react@18.3.1)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)))(@types/react@18.3.1)(@upstash/redis@1.35.4)(bufferutil@4.0.9)(ioredis@5.8.0)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@4.1.11) + '@reown/appkit': 1.7.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.81.4(@babel/core@7.28.4)(@types/react@18.3.1)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)))(@types/react@18.3.1)(@upstash/redis@1.35.4)(bufferutil@4.0.9)(ioredis@5.8.0)(react@18.3.1)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76) '@solana/wallet-adapter-base': 0.9.27(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.5.4)(utf-8-validate@5.0.10)) '@solana/web3.js': 1.98.4(bufferutil@4.0.9)(typescript@5.5.4)(utf-8-validate@5.0.10) - '@walletconnect/universal-provider': 2.19.0(@react-native-async-storage/async-storage@1.24.0(react-native@0.81.4(@babel/core@7.28.4)(@types/react@18.3.1)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)))(@upstash/redis@1.35.4)(bufferutil@4.0.9)(ioredis@5.8.0)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@4.1.11) - '@walletconnect/utils': 2.19.0(@react-native-async-storage/async-storage@1.24.0(react-native@0.81.4(@babel/core@7.28.4)(@types/react@18.3.1)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)))(@upstash/redis@1.35.4)(bufferutil@4.0.9)(ioredis@5.8.0)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@4.1.11) + '@walletconnect/universal-provider': 2.19.0(@react-native-async-storage/async-storage@1.24.0(react-native@0.81.4(@babel/core@7.28.4)(@types/react@18.3.1)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)))(@upstash/redis@1.35.4)(bufferutil@4.0.9)(ioredis@5.8.0)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76) + '@walletconnect/utils': 2.19.0(@react-native-async-storage/async-storage@1.24.0(react-native@0.81.4(@babel/core@7.28.4)(@types/react@18.3.1)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)))(@upstash/redis@1.35.4)(bufferutil@4.0.9)(ioredis@5.8.0)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76) bs58: 6.0.0 transitivePeerDependencies: - '@azure/app-configuration' @@ -26283,7 +26381,7 @@ snapshots: - ioredis - uploadthing - '@walletconnect/universal-provider@2.19.0(@react-native-async-storage/async-storage@1.24.0(react-native@0.81.4(@babel/core@7.28.4)(@types/react@18.3.1)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)))(@upstash/redis@1.35.4)(bufferutil@4.0.9)(ioredis@5.8.0)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@4.1.11)': + '@walletconnect/universal-provider@2.19.0(@react-native-async-storage/async-storage@1.24.0(react-native@0.81.4(@babel/core@7.28.4)(@types/react@18.3.1)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)))(@upstash/redis@1.35.4)(bufferutil@4.0.9)(ioredis@5.8.0)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76)': dependencies: '@walletconnect/events': 1.0.1 '@walletconnect/jsonrpc-http-connection': 1.0.8 @@ -26292,9 +26390,9 @@ snapshots: '@walletconnect/jsonrpc-utils': 1.0.8 '@walletconnect/keyvaluestorage': 1.1.1(@react-native-async-storage/async-storage@1.24.0(react-native@0.81.4(@babel/core@7.28.4)(@types/react@18.3.1)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)))(@upstash/redis@1.35.4)(ioredis@5.8.0) '@walletconnect/logger': 2.1.2 - '@walletconnect/sign-client': 2.19.0(@react-native-async-storage/async-storage@1.24.0(react-native@0.81.4(@babel/core@7.28.4)(@types/react@18.3.1)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)))(@upstash/redis@1.35.4)(bufferutil@4.0.9)(ioredis@5.8.0)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@4.1.11) + '@walletconnect/sign-client': 2.19.0(@react-native-async-storage/async-storage@1.24.0(react-native@0.81.4(@babel/core@7.28.4)(@types/react@18.3.1)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)))(@upstash/redis@1.35.4)(bufferutil@4.0.9)(ioredis@5.8.0)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76) '@walletconnect/types': 2.19.0(@react-native-async-storage/async-storage@1.24.0(react-native@0.81.4(@babel/core@7.28.4)(@types/react@18.3.1)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)))(@upstash/redis@1.35.4)(ioredis@5.8.0) - '@walletconnect/utils': 2.19.0(@react-native-async-storage/async-storage@1.24.0(react-native@0.81.4(@babel/core@7.28.4)(@types/react@18.3.1)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)))(@upstash/redis@1.35.4)(bufferutil@4.0.9)(ioredis@5.8.0)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@4.1.11) + '@walletconnect/utils': 2.19.0(@react-native-async-storage/async-storage@1.24.0(react-native@0.81.4(@babel/core@7.28.4)(@types/react@18.3.1)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)))(@upstash/redis@1.35.4)(bufferutil@4.0.9)(ioredis@5.8.0)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76) events: 3.3.0 lodash: 4.17.21 transitivePeerDependencies: @@ -26323,7 +26421,7 @@ snapshots: - utf-8-validate - zod - '@walletconnect/universal-provider@2.19.1(@react-native-async-storage/async-storage@1.24.0(react-native@0.81.4(@babel/core@7.28.4)(@types/react@18.3.1)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)))(@upstash/redis@1.35.4)(bufferutil@4.0.9)(ioredis@5.8.0)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@4.1.11)': + '@walletconnect/universal-provider@2.19.1(@react-native-async-storage/async-storage@1.24.0(react-native@0.81.4(@babel/core@7.28.4)(@types/react@18.3.1)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)))(@upstash/redis@1.35.4)(bufferutil@4.0.9)(ioredis@5.8.0)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76)': dependencies: '@walletconnect/events': 1.0.1 '@walletconnect/jsonrpc-http-connection': 1.0.8 @@ -26332,9 +26430,9 @@ snapshots: '@walletconnect/jsonrpc-utils': 1.0.8 '@walletconnect/keyvaluestorage': 1.1.1(@react-native-async-storage/async-storage@1.24.0(react-native@0.81.4(@babel/core@7.28.4)(@types/react@18.3.1)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)))(@upstash/redis@1.35.4)(ioredis@5.8.0) '@walletconnect/logger': 2.1.2 - '@walletconnect/sign-client': 2.19.1(@react-native-async-storage/async-storage@1.24.0(react-native@0.81.4(@babel/core@7.28.4)(@types/react@18.3.1)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)))(@upstash/redis@1.35.4)(bufferutil@4.0.9)(ioredis@5.8.0)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@4.1.11) + '@walletconnect/sign-client': 2.19.1(@react-native-async-storage/async-storage@1.24.0(react-native@0.81.4(@babel/core@7.28.4)(@types/react@18.3.1)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)))(@upstash/redis@1.35.4)(bufferutil@4.0.9)(ioredis@5.8.0)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76) '@walletconnect/types': 2.19.1(@react-native-async-storage/async-storage@1.24.0(react-native@0.81.4(@babel/core@7.28.4)(@types/react@18.3.1)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)))(@upstash/redis@1.35.4)(ioredis@5.8.0) - '@walletconnect/utils': 2.19.1(@react-native-async-storage/async-storage@1.24.0(react-native@0.81.4(@babel/core@7.28.4)(@types/react@18.3.1)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)))(@upstash/redis@1.35.4)(bufferutil@4.0.9)(ioredis@5.8.0)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@4.1.11) + '@walletconnect/utils': 2.19.1(@react-native-async-storage/async-storage@1.24.0(react-native@0.81.4(@babel/core@7.28.4)(@types/react@18.3.1)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)))(@upstash/redis@1.35.4)(bufferutil@4.0.9)(ioredis@5.8.0)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76) es-toolkit: 1.33.0 events: 3.3.0 transitivePeerDependencies: @@ -26363,7 +26461,7 @@ snapshots: - utf-8-validate - zod - '@walletconnect/utils@2.19.0(@react-native-async-storage/async-storage@1.24.0(react-native@0.81.4(@babel/core@7.28.4)(@types/react@18.3.1)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)))(@upstash/redis@1.35.4)(bufferutil@4.0.9)(ioredis@5.8.0)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@4.1.11)': + '@walletconnect/utils@2.19.0(@react-native-async-storage/async-storage@1.24.0(react-native@0.81.4(@babel/core@7.28.4)(@types/react@18.3.1)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)))(@upstash/redis@1.35.4)(bufferutil@4.0.9)(ioredis@5.8.0)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76)': dependencies: '@noble/ciphers': 1.2.1 '@noble/curves': 1.8.1 @@ -26381,7 +26479,7 @@ snapshots: elliptic: 6.6.1 query-string: 7.1.3 uint8arrays: 3.1.0 - viem: 2.23.2(bufferutil@4.0.9)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@4.1.11) + viem: 2.23.2(bufferutil@4.0.9)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -26407,7 +26505,7 @@ snapshots: - utf-8-validate - zod - '@walletconnect/utils@2.19.1(@react-native-async-storage/async-storage@1.24.0(react-native@0.81.4(@babel/core@7.28.4)(@types/react@18.3.1)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)))(@upstash/redis@1.35.4)(bufferutil@4.0.9)(ioredis@5.8.0)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@4.1.11)': + '@walletconnect/utils@2.19.1(@react-native-async-storage/async-storage@1.24.0(react-native@0.81.4(@babel/core@7.28.4)(@types/react@18.3.1)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)))(@upstash/redis@1.35.4)(bufferutil@4.0.9)(ioredis@5.8.0)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76)': dependencies: '@noble/ciphers': 1.2.1 '@noble/curves': 1.8.1 @@ -26426,7 +26524,7 @@ snapshots: elliptic: 6.6.1 query-string: 7.1.3 uint8arrays: 3.1.0 - viem: 2.23.2(bufferutil@4.0.9)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@4.1.11) + viem: 2.23.2(bufferutil@4.0.9)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -26620,20 +26718,20 @@ snapshots: abbrev@2.0.0: {} - abitype@1.0.8(typescript@5.5.4)(zod@4.1.11): + abitype@1.0.8(typescript@5.5.4)(zod@3.25.76): optionalDependencies: typescript: 5.5.4 - zod: 4.1.11 + zod: 3.25.76 abitype@1.1.0(typescript@5.5.4)(zod@3.22.4): optionalDependencies: typescript: 5.5.4 zod: 3.22.4 - abitype@1.1.0(typescript@5.5.4)(zod@4.1.11): + abitype@1.1.0(typescript@5.5.4)(zod@3.25.76): optionalDependencies: typescript: 5.5.4 - zod: 4.1.11 + zod: 3.25.76 abort-controller-x@0.4.3: {} @@ -26695,25 +26793,25 @@ snapshots: clean-stack: 2.2.0 indent-string: 4.0.0 - ai@4.3.19(react@18.3.1)(zod@4.1.11): + ai@4.3.19(react@18.3.1)(zod@3.25.76): dependencies: '@ai-sdk/provider': 1.1.3 - '@ai-sdk/provider-utils': 2.2.8(zod@4.1.11) - '@ai-sdk/react': 1.2.12(react@18.3.1)(zod@4.1.11) - '@ai-sdk/ui-utils': 1.2.11(zod@4.1.11) + '@ai-sdk/provider-utils': 2.2.8(zod@3.25.76) + '@ai-sdk/react': 1.2.12(react@18.3.1)(zod@3.25.76) + '@ai-sdk/ui-utils': 1.2.11(zod@3.25.76) '@opentelemetry/api': 1.9.0 jsondiffpatch: 0.6.0 - zod: 4.1.11 + zod: 3.25.76 optionalDependencies: react: 18.3.1 - ai@5.0.44(zod@4.1.11): + ai@5.0.60(zod@3.25.76): dependencies: - '@ai-sdk/gateway': 1.0.23(zod@4.1.11) + '@ai-sdk/gateway': 1.0.33(zod@3.25.76) '@ai-sdk/provider': 2.0.0 - '@ai-sdk/provider-utils': 3.0.9(zod@4.1.11) + '@ai-sdk/provider-utils': 3.0.10(zod@3.25.76) '@opentelemetry/api': 1.9.0 - zod: 4.1.11 + zod: 3.25.76 ajv-formats@2.1.1(ajv@8.12.0): optionalDependencies: @@ -30128,14 +30226,14 @@ snapshots: dependencies: react-is: 16.13.1 - hono-openapi@0.4.8(effect@3.16.12)(hono@4.9.9)(openapi-types@12.1.3)(zod@4.1.11): + hono-openapi@0.4.8(effect@3.16.12)(hono@4.9.9)(openapi-types@12.1.3)(zod@3.25.76): dependencies: json-schema-walker: 2.0.0 openapi-types: 12.1.3 optionalDependencies: effect: 3.16.12 hono: 4.9.9 - zod: 4.1.11 + zod: 3.25.76 hono@4.9.9: {} @@ -31418,11 +31516,11 @@ snapshots: konva@10.0.2: {} - langchain@0.3.34(@langchain/aws@0.1.15(@langchain/core@0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.23.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.11))))(@langchain/core@0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.23.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.11)))(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(axios@1.12.2)(cheerio@1.1.2)(handlebars@4.7.8)(openai@4.104.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)): + langchain@0.3.34(@langchain/aws@0.1.15(@langchain/core@0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@6.2.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76))))(@langchain/core@0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@6.2.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76)))(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(axios@1.12.2)(cheerio@1.1.2)(handlebars@4.7.8)(openai@4.104.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)): dependencies: - '@langchain/core': 0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.23.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.11)) - '@langchain/openai': 0.5.18(@langchain/core@0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.23.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.11)))(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) - '@langchain/textsplitters': 0.1.0(@langchain/core@0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.23.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.11))) + '@langchain/core': 0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@6.2.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76)) + '@langchain/openai': 0.5.18(@langchain/core@0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@6.2.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76)))(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@langchain/textsplitters': 0.1.0(@langchain/core@0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@6.2.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76))) js-tiktoken: 1.0.21 js-yaml: 4.1.0 jsonpointer: 5.0.1 @@ -31433,7 +31531,7 @@ snapshots: yaml: 2.8.1 zod: 3.25.76 optionalDependencies: - '@langchain/aws': 0.1.15(@langchain/core@0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.23.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.11))) + '@langchain/aws': 0.1.15(@langchain/core@0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@6.2.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76))) axios: 1.12.2(debug@4.4.3) cheerio: 1.1.2 handlebars: 4.7.8 @@ -31444,22 +31542,22 @@ snapshots: - openai - ws - langchain@0.3.34(@langchain/aws@0.1.15(@langchain/core@0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.23.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.11))))(@langchain/core@0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.23.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.11)))(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(axios@1.12.2)(cheerio@1.1.2)(handlebars@4.7.8)(openai@5.23.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.11))(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)): + langchain@0.3.34(@langchain/aws@0.1.15(@langchain/core@0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@6.2.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76))))(@langchain/core@0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@6.2.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76)))(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(axios@1.12.2)(cheerio@1.1.2)(handlebars@4.7.8)(openai@6.2.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)): dependencies: - '@langchain/core': 0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.23.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.11)) - '@langchain/openai': 0.5.18(@langchain/core@0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.23.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.11)))(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) - '@langchain/textsplitters': 0.1.0(@langchain/core@0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.23.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.11))) + '@langchain/core': 0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@6.2.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76)) + '@langchain/openai': 0.5.18(@langchain/core@0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@6.2.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76)))(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@langchain/textsplitters': 0.1.0(@langchain/core@0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@6.2.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76))) js-tiktoken: 1.0.21 js-yaml: 4.1.0 jsonpointer: 5.0.1 - langsmith: 0.3.71(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.23.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.11)) + langsmith: 0.3.71(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@6.2.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76)) openapi-types: 12.1.3 p-retry: 4.6.2 uuid: 10.0.0 yaml: 2.8.1 zod: 3.25.76 optionalDependencies: - '@langchain/aws': 0.1.15(@langchain/core@0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.23.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.11))) + '@langchain/aws': 0.1.15(@langchain/core@0.3.77(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@6.2.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76))) axios: 1.12.2(debug@4.4.3) cheerio: 1.1.2 handlebars: 4.7.8 @@ -31485,7 +31583,7 @@ snapshots: '@opentelemetry/sdk-trace-base': 2.1.0(@opentelemetry/api@1.9.0) openai: 4.104.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76) - langsmith@0.3.71(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.23.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.11)): + langsmith@0.3.71(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@6.2.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76)): dependencies: '@types/uuid': 10.0.0 chalk: 4.1.2 @@ -31498,7 +31596,7 @@ snapshots: '@opentelemetry/api': 1.9.0 '@opentelemetry/exporter-trace-otlp-proto': 0.203.0(@opentelemetry/api@1.9.0) '@opentelemetry/sdk-trace-base': 2.1.0(@opentelemetry/api@1.9.0) - openai: 5.23.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.11) + openai: 6.2.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76) language-subtag-registry@0.3.23: {} @@ -31808,14 +31906,14 @@ snapshots: marky@1.3.0: {} - mastra@0.13.2(@mastra/core@0.18.0(effect@3.16.12)(openapi-types@12.1.3)(react@18.3.1)(zod@4.1.11))(@opentelemetry/api@1.9.0)(@types/json-schema@7.0.15)(typescript@5.5.4)(zod@4.1.11): + mastra@0.13.2(@mastra/core@0.20.2(effect@3.16.12)(openapi-types@12.1.3)(react@18.3.1)(zod@3.25.76))(@opentelemetry/api@1.9.0)(@types/json-schema@7.0.15)(typescript@5.5.4)(zod@3.25.76): dependencies: '@clack/prompts': 0.11.0 '@expo/devcert': 1.2.0 - '@mastra/core': 0.18.0(effect@3.16.12)(openapi-types@12.1.3)(react@18.3.1)(zod@4.1.11) - '@mastra/deployer': 0.18.0(@mastra/core@0.18.0(effect@3.16.12)(openapi-types@12.1.3)(react@18.3.1)(zod@4.1.11))(typescript@5.5.4)(zod@4.1.11) - '@mastra/loggers': 0.10.13(@mastra/core@0.18.0(effect@3.16.12)(openapi-types@12.1.3)(react@18.3.1)(zod@4.1.11)) - '@mastra/mcp': 0.13.1(@mastra/core@0.18.0(effect@3.16.12)(openapi-types@12.1.3)(react@18.3.1)(zod@4.1.11))(@types/json-schema@7.0.15)(zod@4.1.11) + '@mastra/core': 0.20.2(effect@3.16.12)(openapi-types@12.1.3)(react@18.3.1)(zod@3.25.76) + '@mastra/deployer': 0.18.0(@mastra/core@0.20.2(effect@3.16.12)(openapi-types@12.1.3)(react@18.3.1)(zod@3.25.76))(typescript@5.5.4)(zod@3.25.76) + '@mastra/loggers': 0.10.13(@mastra/core@0.20.2(effect@3.16.12)(openapi-types@12.1.3)(react@18.3.1)(zod@3.25.76)) + '@mastra/mcp': 0.13.1(@mastra/core@0.20.2(effect@3.16.12)(openapi-types@12.1.3)(react@18.3.1)(zod@3.25.76))(@types/json-schema@7.0.15)(zod@3.25.76) '@opentelemetry/auto-instrumentations-node': 0.62.2(@opentelemetry/api@1.9.0)(@opentelemetry/core@2.1.0(@opentelemetry/api@1.9.0)) '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0) '@opentelemetry/exporter-trace-otlp-grpc': 0.203.0(@opentelemetry/api@1.9.0) @@ -31839,8 +31937,8 @@ snapshots: strip-json-comments: 5.0.3 tcp-port-used: 1.0.2 yocto-spinner: 0.2.3 - zod: 4.1.11 - zod-to-json-schema: 3.24.6(zod@4.1.11) + zod: 3.25.76 + zod-to-json-schema: 3.24.6(zod@3.25.76) transitivePeerDependencies: - '@opentelemetry/api' - '@types/json-schema' @@ -33194,10 +33292,10 @@ snapshots: ws: 8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) zod: 3.25.76 - openai@5.23.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.11): + openai@6.2.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76): optionalDependencies: ws: 8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) - zod: 4.1.11 + zod: 3.25.76 openapi-types@12.1.3: {} @@ -33245,14 +33343,14 @@ snapshots: object-keys: 1.1.1 safe-push-apply: 1.0.0 - ox@0.6.7(typescript@5.5.4)(zod@4.1.11): + ox@0.6.7(typescript@5.5.4)(zod@3.25.76): dependencies: '@adraffy/ens-normalize': 1.11.1 '@noble/curves': 1.8.1 '@noble/hashes': 1.7.1 '@scure/bip32': 1.6.2 '@scure/bip39': 1.5.4 - abitype: 1.0.8(typescript@5.5.4)(zod@4.1.11) + abitype: 1.0.8(typescript@5.5.4)(zod@3.25.76) eventemitter3: 5.0.1 optionalDependencies: typescript: 5.5.4 @@ -33274,7 +33372,7 @@ snapshots: transitivePeerDependencies: - zod - ox@0.9.6(typescript@5.5.4)(zod@4.1.11): + ox@0.9.6(typescript@5.5.4)(zod@3.25.76): dependencies: '@adraffy/ens-normalize': 1.11.1 '@noble/ciphers': 1.3.0 @@ -33282,7 +33380,7 @@ snapshots: '@noble/hashes': 1.8.0 '@scure/bip32': 1.7.0 '@scure/bip39': 1.6.0 - abitype: 1.1.0(typescript@5.5.4)(zod@4.1.11) + abitype: 1.1.0(typescript@5.5.4)(zod@3.25.76) eventemitter3: 5.0.1 optionalDependencies: typescript: 5.5.4 @@ -36726,15 +36824,15 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.3 - viem@2.23.2(bufferutil@4.0.9)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@4.1.11): + viem@2.23.2(bufferutil@4.0.9)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76): dependencies: '@noble/curves': 1.8.1 '@noble/hashes': 1.7.1 '@scure/bip32': 1.6.2 '@scure/bip39': 1.5.4 - abitype: 1.0.8(typescript@5.5.4)(zod@4.1.11) + abitype: 1.0.8(typescript@5.5.4)(zod@3.25.76) isows: 1.0.6(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)) - ox: 0.6.7(typescript@5.5.4)(zod@4.1.11) + ox: 0.6.7(typescript@5.5.4)(zod@3.25.76) ws: 8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) optionalDependencies: typescript: 5.5.4 @@ -36760,15 +36858,15 @@ snapshots: - utf-8-validate - zod - viem@2.37.9(bufferutil@4.0.9)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@4.1.11): + viem@2.37.9(bufferutil@4.0.9)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76): dependencies: '@noble/curves': 1.9.1 '@noble/hashes': 1.8.0 '@scure/bip32': 1.7.0 '@scure/bip39': 1.6.0 - abitype: 1.1.0(typescript@5.5.4)(zod@4.1.11) + abitype: 1.1.0(typescript@5.5.4)(zod@3.25.76) isows: 1.0.7(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) - ox: 0.9.6(typescript@5.5.4)(zod@4.1.11) + ox: 0.9.6(typescript@5.5.4)(zod@3.25.76) ws: 8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) optionalDependencies: typescript: 5.5.4 @@ -37229,10 +37327,6 @@ snapshots: dependencies: zod: 3.25.76 - zod-to-json-schema@3.24.6(zod@4.1.11): - dependencies: - zod: 4.1.11 - zod@3.22.4: {} zod@3.25.76: {}