diff --git a/apps/backend/src/api/api.module.ts b/apps/backend/src/api/api.module.ts index 0e26cc8129..57791dea9c 100644 --- a/apps/backend/src/api/api.module.ts +++ b/apps/backend/src/api/api.module.ts @@ -16,6 +16,8 @@ import { IntegrationManager } from '@gitroom/nestjs-libraries/integrations/integ import { SettingsController } from '@gitroom/backend/api/routes/settings.controller'; import { PostsController } from '@gitroom/backend/api/routes/posts.controller'; import { MediaController } from '@gitroom/backend/api/routes/media.controller'; +import { MediaWidgetController } from '@gitroom/backend/api/routes/media.widget.controller'; +import { UploadWidgetAuthMiddleware } from '@gitroom/backend/services/auth/upload.widget.auth.middleware'; import { UploadModule } from '@gitroom/nestjs-libraries/upload/upload.module'; import { BillingController } from '@gitroom/backend/api/routes/billing.controller'; import { NotificationsController } from '@gitroom/backend/api/routes/notifications.controller'; @@ -79,7 +81,7 @@ const authenticatedController = [ @Module({ imports: [UploadModule, EcosystemModule], controllers: process.env.MCP_ONLY - ? [RootController, OAuthController] + ? [RootController, OAuthController, MediaWidgetController] : [ RootController, PaymentController, @@ -90,6 +92,7 @@ const authenticatedController = [ EnterpriseController, NoAuthIntegrationsController, OAuthController, + MediaWidgetController, ...authenticatedController, ], providers: [ @@ -101,6 +104,7 @@ const authenticatedController = [ OpenaiService, ExtractContentService, AuthMiddleware, + UploadWidgetAuthMiddleware, PoliciesGuard, PermissionsService, CodesService, @@ -124,5 +128,6 @@ const authenticatedController = [ export class ApiModule implements NestModule { configure(consumer: MiddlewareConsumer) { consumer.apply(AuthMiddleware).forRoutes(...authenticatedController); + consumer.apply(UploadWidgetAuthMiddleware).forRoutes(MediaWidgetController); } } diff --git a/apps/backend/src/api/routes/auth.controller.ts b/apps/backend/src/api/routes/auth.controller.ts index 809e441b62..5d6adf74ae 100644 --- a/apps/backend/src/api/routes/auth.controller.ts +++ b/apps/backend/src/api/routes/auth.controller.ts @@ -7,7 +7,10 @@ import { Query, Req, Res, + UseGuards, } from '@nestjs/common'; +import { Throttle } from '@nestjs/throttler'; +import { ThrottlerRealIpGuard } from '@gitroom/nestjs-libraries/throttler/throttler.provider'; import { Response, Request } from 'express'; import { CreateOrgUserDto } from '@gitroom/nestjs-libraries/dtos/auth/create.org.user.dto'; @@ -24,6 +27,7 @@ import { UserAgent } from '@gitroom/nestjs-libraries/user/user.agent'; import { Provider } from '@prisma/client'; import { makeId } from '@gitroom/nestjs-libraries/services/make.is'; import * as Sentry from '@sentry/nestjs'; +import { FarcasterProvider } from '@gitroom/nestjs-libraries/integrations/social/farcaster.provider'; @ApiTags('Auth') @Controller('/auth') @@ -295,6 +299,30 @@ export class AuthController { } } + // public and creates a signer at Neynar per call, so cap it per client + @UseGuards(ThrottlerRealIpGuard) + @Throttle({ default: { limit: 30, ttl: 3600000 } }) + @Post('/farcaster/signer') + async farcasterSigner() { + try { + return await new FarcasterProvider().createSigner(); + } catch (err: any) { + return { error: err.message || 'Failed to create signer' }; + } + } + + // the modal polls every 2s for up to 10 minutes, so leave room for that + @UseGuards(ThrottlerRealIpGuard) + @Throttle({ default: { limit: 1000, ttl: 3600000 } }) + @Get('/farcaster/signer') + async farcasterSignerStatus(@Query('signerUuid') signerUuid: string) { + try { + return await new FarcasterProvider().signerStatus(signerUuid); + } catch (err: any) { + return { error: err.message || 'Failed to check signer' }; + } + } + @Post('/oauth/:provider/redirect') oauthRedirect( @Param('provider') provider: string, diff --git a/apps/backend/src/api/routes/copilot.controller.ts b/apps/backend/src/api/routes/copilot.controller.ts index 61577bd07f..29c88ed234 100644 --- a/apps/backend/src/api/routes/copilot.controller.ts +++ b/apps/backend/src/api/routes/copilot.controller.ts @@ -8,12 +8,10 @@ import { Query, Param, } from '@nestjs/common'; -import OpenAI from 'openai'; import { CopilotRuntime, OpenAIAdapter, copilotRuntimeNodeHttpEndpoint, - copilotRuntimeNextJSAppRouterEndpoint, } from '@copilotkit/runtime'; import { GetOrgFromRequest } from '@gitroom/nestjs-libraries/user/org.from.request'; import { Organization } from '@prisma/client'; @@ -24,6 +22,7 @@ import { Request, Response } from 'express'; import { RequestContext } from '@mastra/core/di'; import { CheckPolicies } from '@gitroom/backend/services/auth/permissions/permissions.ability'; import { AuthorizationActions, Sections } from '@gitroom/backend/services/auth/permissions/permission.exception.class'; +import OpenAI from 'openai'; export type ChannelsContext = { integrations: string; @@ -31,6 +30,16 @@ export type ChannelsContext = { ui: string; }; +// the copilot runtime writes its own CORS headers on the response, keep them aligned with main.ts +const copilotCors = () => ({ + origin: [ + process.env.FRONTEND_URL, + 'http://localhost:6274', + ...(process.env.MAIN_URL ? [process.env.MAIN_URL] : []), + ], + credentials: !process.env.NOT_SECURED, +}); + @Controller('/copilot') export class CopilotController { constructor( @@ -54,6 +63,7 @@ export class CopilotController { const copilotRuntimeHandler = copilotRuntimeNodeHttpEndpoint({ endpoint: '/copilot/chat', + cors: copilotCors(), runtime: new CopilotRuntime(), serviceAdapter: new OpenAIAdapter({ openai: openai as any, @@ -82,7 +92,7 @@ export class CopilotController { const requestContext = new RequestContext(); requestContext.set( 'integrations', - req?.body?.variables?.properties?.integrations || [] + req?.body?.body?.forwardedProps?.integrations || [] ); requestContext.set('organization', JSON.stringify(organization)); @@ -103,17 +113,17 @@ export class CopilotController { ...(process.env.OPENAI_BASE_URL ? { baseURL: process.env.OPENAI_BASE_URL } : {}), }); - const copilotRuntimeHandler = copilotRuntimeNextJSAppRouterEndpoint({ + const copilotRuntimeHandler = copilotRuntimeNodeHttpEndpoint({ endpoint: '/copilot/agent', + cors: copilotCors(), runtime, - // properties: req.body.variables.properties, serviceAdapter: new OpenAIAdapter({ openai: openai as any, model: process.env.OPENAI_MODEL_NAME || 'gpt-4.1', }), }); - return copilotRuntimeHandler.handleRequest(req, res); + return copilotRuntimeHandler(req, res); } @Get('/credits') diff --git a/apps/backend/src/api/routes/media.controller.ts b/apps/backend/src/api/routes/media.controller.ts index 6d5b557a1f..3c6902e881 100644 --- a/apps/backend/src/api/routes/media.controller.ts +++ b/apps/backend/src/api/routes/media.controller.ts @@ -1,4 +1,5 @@ import { + BadRequestException, Body, Controller, Delete, @@ -10,7 +11,6 @@ import { Res, UploadedFile, UseInterceptors, - UsePipes, } from '@nestjs/common'; import { Request, Response } from 'express'; import { GetOrgFromRequest } from '@gitroom/nestjs-libraries/user/org.from.request'; @@ -19,7 +19,7 @@ import { MediaService } from '@gitroom/nestjs-libraries/database/prisma/media/me import { ApiTags } from '@nestjs/swagger'; import handleR2Upload from '@gitroom/nestjs-libraries/upload/r2.uploader'; import { FileInterceptor } from '@nestjs/platform-express'; -import { CustomFileValidationPipe } from '@gitroom/nestjs-libraries/upload/custom.upload.validation'; +import { streamUploadOptions } from '@gitroom/nestjs-libraries/upload/multer.stream.engine'; import { SubscriptionService } from '@gitroom/nestjs-libraries/database/prisma/subscriptions/subscription.service'; import { UploadFactory } from '@gitroom/nestjs-libraries/upload/upload.factory'; import { SaveMediaInformationDto } from '@gitroom/nestjs-libraries/dtos/media/save.media.information.dto'; @@ -85,19 +85,19 @@ export class MediaController { } @Post('/upload-server') - @UseInterceptors(FileInterceptor('file')) - @UsePipes(new CustomFileValidationPipe()) + @UseInterceptors(FileInterceptor('file', streamUploadOptions())) async uploadServer( @GetOrgFromRequest() org: Organization, @UploadedFile() file: Express.Multer.File ) { - const originalName = file?.originalname || ''; - const uploadedFile = await this.storage.uploadFile(file); + if (!file) { + throw new BadRequestException('No file provided'); + } return this._mediaService.saveFile( org.id, - uploadedFile.originalname, - uploadedFile.path, - originalName + file.filename, + file.path, + file.originalname ); } @@ -128,26 +128,25 @@ export class MediaController { } @Post('/upload-simple') - @UseInterceptors(FileInterceptor('file')) - @UsePipes(new CustomFileValidationPipe()) + @UseInterceptors(FileInterceptor('file', streamUploadOptions())) async uploadSimple( @GetOrgFromRequest() org: Organization, @UploadedFile('file') file: Express.Multer.File, @Body('preventSave') preventSave: string = 'false' ) { - const originalName = file.originalname; - const getFile = await this.storage.uploadFile(file); + if (!file) { + throw new BadRequestException('No file provided'); + } if (preventSave === 'true') { - const { path } = getFile; - return { path }; + return { path: file.path }; } return this._mediaService.saveFile( org.id, - getFile.originalname, - getFile.path, - originalName + file.filename, + file.path, + file.originalname ); } @@ -159,7 +158,8 @@ export class MediaController { @Param('endpoint') endpoint: string ) { const upload = await handleR2Upload(endpoint, req, res); - if (endpoint !== 'complete-multipart-upload') { + // a rejected or failed completion has already answered with its own status + if (endpoint !== 'complete-multipart-upload' || res.headersSent) { return upload; } @@ -167,7 +167,7 @@ export class MediaController { const name = upload.Location.split('/').pop(); const originalName = req.body?.file?.name; - const saveFile = await this._mediaService.saveFile( + const saveFile = await this._mediaService.saveUploadedFile( org.id, name, // @ts-ignore @@ -178,6 +178,14 @@ export class MediaController { res.status(200).json({ ...upload, saved: saveFile }); } + @Get('/:id/status') + getMediaStatus( + @GetOrgFromRequest() org: Organization, + @Param('id') id: string + ) { + return this._mediaService.getMediaStatus(org.id, id); + } + @Get('/') getMedia( @GetOrgFromRequest() org: Organization, diff --git a/apps/backend/src/api/routes/media.widget.controller.ts b/apps/backend/src/api/routes/media.widget.controller.ts new file mode 100644 index 0000000000..c194d4d172 --- /dev/null +++ b/apps/backend/src/api/routes/media.widget.controller.ts @@ -0,0 +1,48 @@ +import { + BadRequestException, + Controller, + Get, + Post, + Req, + UploadedFile, + UseInterceptors, +} from '@nestjs/common'; +import { Request } from 'express'; +import { ApiTags } from '@nestjs/swagger'; +import { Organization } from '@prisma/client'; +import { FileInterceptor } from '@nestjs/platform-express'; +import { GetOrgFromRequest } from '@gitroom/nestjs-libraries/user/org.from.request'; +import { MediaService } from '@gitroom/nestjs-libraries/database/prisma/media/media.service'; +import { streamUploadOptions } from '@gitroom/nestjs-libraries/upload/multer.stream.engine'; + +@ApiTags('Media') +@Controller('/media-widget') +export class MediaWidgetController { + constructor(private _mediaService: MediaService) {} + + @Post('/upload') + @UseInterceptors(FileInterceptor('file', streamUploadOptions())) + async upload( + @GetOrgFromRequest() org: Organization, + @Req() req: Request, + @UploadedFile() file: Express.Multer.File + ) { + if (!file) { + throw new BadRequestException('No file provided'); + } + return this._mediaService.saveUploadSessionFile( + org.id, + // @ts-ignore + req.uploadSession, + file.filename, + file.path, + file.originalname + ); + } + + @Get('/status') + status(@GetOrgFromRequest() org: Organization, @Req() req: Request) { + // @ts-ignore + return this._mediaService.getUploadSession(org.id, req.uploadSession); + } +} diff --git a/apps/backend/src/api/routes/oauth.controller.ts b/apps/backend/src/api/routes/oauth.controller.ts index cb179e1566..822e8bf1c5 100644 --- a/apps/backend/src/api/routes/oauth.controller.ts +++ b/apps/backend/src/api/routes/oauth.controller.ts @@ -28,6 +28,7 @@ import { import { TokenExchangeDto } from '@gitroom/nestjs-libraries/dtos/oauth/token-exchange.dto'; import { RegisterClientDto } from '@gitroom/nestjs-libraries/dtos/oauth/register-client.dto'; import { RevokeTokenDto } from '@gitroom/nestjs-libraries/dtos/oauth/revoke-token.dto'; +import { extractBasicCredentials } from '@gitroom/nestjs-libraries/chat/oauth-types'; @ApiTags('OAuth') @Controller('/oauth') @@ -65,7 +66,10 @@ export class OAuthController { } @Post('/token') - async token(@Body() body: TokenExchangeDto) { + async token( + @Body() body: TokenExchangeDto, + @Headers('authorization') authorization?: string + ) { if (body.grant_type !== 'authorization_code') { throw new HttpException( { error: 'unsupported_grant_type' }, @@ -73,10 +77,21 @@ export class OAuthController { ); } + // client_secret_basic puts the credentials in the Authorization header, + // client_secret_post and public clients put them in the body + const basic = extractBasicCredentials(authorization); + const clientId = basic?.clientId || body.client_id; + if (!clientId) { + throw new HttpException( + { error: 'invalid_client' }, + HttpStatus.UNAUTHORIZED + ); + } + return this._oauthService.exchangeCodeForToken( body.code, - body.client_id, - body.client_secret, + clientId, + basic?.clientSecret || body.client_secret, body.code_verifier, body.redirect_uri ); diff --git a/apps/backend/src/main.ts b/apps/backend/src/main.ts index a7579e9bb7..a35569b1a9 100644 --- a/apps/backend/src/main.ts +++ b/apps/backend/src/main.ts @@ -33,6 +33,8 @@ async function start() { 'auth', 'showorg', 'impersonate', + 'x-postiz-org', + 'x-postiz-include-deleted', 'x-copilotkit-runtime-client-gql-version', ], exposedHeaders: [ diff --git a/apps/backend/src/public-api/routes/v1/public.integrations.controller.ts b/apps/backend/src/public-api/routes/v1/public.integrations.controller.ts index a2371240b2..0258beb2cf 100644 --- a/apps/backend/src/public-api/routes/v1/public.integrations.controller.ts +++ b/apps/backend/src/public-api/routes/v1/public.integrations.controller.ts @@ -1,4 +1,5 @@ import { + BadRequestException, Body, Controller, Delete, @@ -11,20 +12,16 @@ import { UploadedFile, UseGuards, UseInterceptors, - UsePipes, } from '@nestjs/common'; -import { - CustomFileValidationPipe, - getMaxSize, -} from '@gitroom/nestjs-libraries/upload/custom.upload.validation'; +import { streamUploadOptions } from '@gitroom/nestjs-libraries/upload/multer.stream.engine'; import { ApiTags } from '@nestjs/swagger'; import { GetOrgFromRequest } from '@gitroom/nestjs-libraries/user/org.from.request'; +import { GetIncludeDeletedFromRequest } from '@gitroom/nestjs-libraries/user/include.deleted.from.request'; import { Organization } from '@prisma/client'; import { IntegrationService } from '@gitroom/nestjs-libraries/database/prisma/integrations/integration.service'; import { CheckPolicies } from '@gitroom/backend/services/auth/permissions/permissions.ability'; import { PostsService } from '@gitroom/nestjs-libraries/database/prisma/posts/posts.service'; import { FileInterceptor } from '@nestjs/platform-express'; -import { UploadFactory } from '@gitroom/nestjs-libraries/upload/upload.factory'; import { MediaService } from '@gitroom/nestjs-libraries/database/prisma/media/media.service'; import { GetPostsDto } from '@gitroom/nestjs-libraries/dtos/posts/get.posts.dto'; import { ChangePostStatusDto } from '@gitroom/nestjs-libraries/dtos/posts/change.post.status.dto'; @@ -38,21 +35,6 @@ import { VideoFunctionDto } from '@gitroom/nestjs-libraries/dtos/videos/video.fu import { UploadDto } from '@gitroom/nestjs-libraries/dtos/media/upload.dto'; import { NotificationService } from '@gitroom/nestjs-libraries/database/prisma/notifications/notification.service'; import { GetNotificationsDto } from '@gitroom/nestjs-libraries/dtos/notifications/get.notifications.dto'; -import { Readable } from 'stream'; -import { ssrfSafeDispatcher } from '@gitroom/nestjs-libraries/dtos/webhooks/ssrf.safe.dispatcher'; -// eslint-disable-next-line @typescript-eslint/no-var-requires -const { fileTypeFromBuffer } = require('file-type'); - -const PUBLIC_API_ALLOWED_MIME = new Set([ - 'image/jpeg', - 'image/png', - 'image/gif', - 'image/webp', - 'image/avif', - 'image/bmp', - 'image/tiff', - 'video/mp4', -]); import * as Sentry from '@sentry/nestjs'; import { socialIntegrationList, @@ -66,12 +48,14 @@ import { UsersService } from '@gitroom/nestjs-libraries/database/prisma/users/us import { SuperAdminGuard } from '@gitroom/backend/services/auth/super.admin.guard'; import { timer } from '@gitroom/helpers/utils/timer'; import { ioRedis } from '@gitroom/nestjs-libraries/redis/redis.service'; +import { AdminStatsService } from '@gitroom/nestjs-libraries/database/prisma/admin-stats/admin-stats.service'; +import { OrganizationService } from '@gitroom/nestjs-libraries/database/prisma/organizations/organization.service'; +import { GetOrgActivityDto } from '@gitroom/nestjs-libraries/dtos/analytics/get.org.activity.dto'; +import dayjs from 'dayjs'; @ApiTags('Public API') @Controller('/public/v1') export class PublicIntegrationsController { - private storage = UploadFactory.createStorage(); - constructor( private _integrationService: IntegrationService, private _postsService: PostsService, @@ -79,12 +63,13 @@ export class PublicIntegrationsController { private _notificationService: NotificationService, private _integrationManager: IntegrationManager, private _refreshIntegrationService: RefreshIntegrationService, - private _usersService: UsersService + private _usersService: UsersService, + private _adminStatsService: AdminStatsService, + private _organizationService: OrganizationService ) {} @Post('/upload') - @UseInterceptors(FileInterceptor('file')) - @UsePipes(new CustomFileValidationPipe()) + @UseInterceptors(FileInterceptor('file', streamUploadOptions())) async uploadSimple( @GetOrgFromRequest() org: Organization, @UploadedFile('file') file: Express.Multer.File @@ -94,12 +79,7 @@ export class PublicIntegrationsController { throw new HttpException({ msg: 'No file provided' }, 400); } - const getFile = await this.storage.uploadFile(file); - return this._mediaService.saveFile( - org.id, - getFile.originalname, - getFile.path - ); + return this._mediaService.saveFile(org.id, file.filename, file.path); } @Post('/upload-from-url') @@ -108,62 +88,15 @@ export class PublicIntegrationsController { @Body() body: UploadDto ) { Sentry.metrics.count('public_api-request', 1); - let response: globalThis.Response; try { - response = await fetch(body.url, { - // @ts-ignore — undici option, not in lib.dom fetch types - dispatcher: ssrfSafeDispatcher, - }); - } catch { - // Network-level failure (DNS, connection refused, SSRF block, etc.) — - // fetch rejects rather than returning a non-ok response. - throw new HttpException({ msg: 'Failed to fetch URL' }, 400); - } - if (!response.ok) { - throw new HttpException({ msg: 'Failed to fetch URL' }, 400); - } - - // Guard against OOM: bail out before buffering the whole body into memory. - // Content-Length may be absent or wrong, so we re-check the real size after - // download too. The type isn't known yet (sniffed below), so the pre-check - // uses the largest allowed cap (video). - const maxDownloadSize = getMaxSize('video/mp4'); - const declaredSize = Number(response.headers.get('content-length')); - if (declaredSize && declaredSize > maxDownloadSize) { - throw new HttpException({ msg: 'File is too large.' }, 400); - } - - const buffer = Buffer.from(await response.arrayBuffer()); - const detected = await fileTypeFromBuffer(buffer); - if (!detected || !PUBLIC_API_ALLOWED_MIME.has(detected.mime)) { - throw new HttpException({ msg: 'Unsupported file type.' }, 400); - } - - if (buffer.length > getMaxSize(detected.mime)) { - throw new HttpException({ msg: 'File is too large.' }, 400); + return await this._mediaService.uploadFromUrl(org.id, body.url); + } catch (err) { + // Validation failures keep this route's { msg } error shape + if (err instanceof BadRequestException) { + throw new HttpException({ msg: err.message }, 400); + } + throw err; } - - const mimetype = detected.mime; - const ext = detected.ext; - - const getFile = await this.storage.uploadFile({ - buffer, - mimetype, - size: buffer.length, - path: '', - fieldname: '', - destination: '', - stream: new Readable(), - filename: '', - originalname: `upload.${ext}`, - encoding: '', - }); - - return this._mediaService.saveFile( - org.id, - getFile.originalname, - getFile.path - ); } @Get('/find-slot/:id') @@ -388,7 +321,72 @@ export class PublicIntegrationsController { @Query('name') name: string ) { Sentry.metrics.count('public_api-request', 1); - return this._usersService.getImpersonateUser(name); + const term = name?.trim(); + + if (!term) { + throw new HttpException({ msg: 'A search term is required' }, 400); + } + + return this._usersService.getImpersonateUser(term); + } + + @Get('/debug/posts/:id') + @UseGuards(SuperAdminGuard) + async getPostTimeline( + @GetOrgFromRequest() org: Organization, + @Param('id') id: string + ) { + Sentry.metrics.count('public_api-request', 1); + const timeline = await this._postsService.getPostTimeline(id, org.id); + + if (!timeline) { + throw new HttpException({ msg: 'Post not found' }, 404); + } + + return timeline; + } + + @Get('/debug/account') + @UseGuards(SuperAdminGuard) + async getAccountOverview(@GetOrgFromRequest() org: Organization) { + Sentry.metrics.count('public_api-request', 1); + const account = await this._organizationService.getAccountOverview(org.id); + + if (!account) { + throw new HttpException({ msg: 'Organization not found' }, 404); + } + + return account; + } + + @Get('/debug/channels') + @UseGuards(SuperAdminGuard) + async getChannelHealth( + @GetOrgFromRequest() org: Organization, + @GetIncludeDeletedFromRequest() includeDeleted: boolean + ) { + Sentry.metrics.count('public_api-request', 1); + return this._integrationService.getChannelHealth(org.id, includeDeleted); + } + + @Get('/debug/activity') + @UseGuards(SuperAdminGuard) + async getOrgActivity( + @GetOrgFromRequest() org: Organization, + @GetIncludeDeletedFromRequest() includeDeleted: boolean, + @Query() query: GetOrgActivityDto + ) { + Sentry.metrics.count('public_api-request', 1); + + const from = query.from ? dayjs(query.from) : dayjs().subtract(30, 'day'); + const to = query.to ? dayjs(query.to) : dayjs(); + + return this._adminStatsService.getOrgActivity({ + organizationId: org.id, + from: from.startOf('day').toDate(), + to: to.endOf('day').toDate(), + includeDeleted, + }); } @Get('/notifications') diff --git a/apps/backend/src/services/auth/providers/farcaster.provider.ts b/apps/backend/src/services/auth/providers/farcaster.provider.ts index 8d66631680..d3c5675f03 100644 --- a/apps/backend/src/services/auth/providers/farcaster.provider.ts +++ b/apps/backend/src/services/auth/providers/farcaster.provider.ts @@ -10,8 +10,10 @@ const client = new NeynarAPIClient({ @AuthProvider({ provider: 'FARCASTER' }) export class FarcasterProvider extends AuthProviderAbstract { - generateLink() { - return ''; + // no OAuth redirect here, the frontend only needs the state nonce that + // pairs with the oauth_state cookie set by /auth/oauth/FARCASTER + generateLink(query?: { state?: string }) { + return query?.state || ''; } async getToken(code: string, _redirectUri?: string) { diff --git a/apps/backend/src/services/auth/public.auth.middleware.ts b/apps/backend/src/services/auth/public.auth.middleware.ts index 36353de88a..7cbcee3868 100644 --- a/apps/backend/src/services/auth/public.auth.middleware.ts +++ b/apps/backend/src/services/auth/public.auth.middleware.ts @@ -1,5 +1,6 @@ -import { HttpStatus, Injectable, NestMiddleware } from '@nestjs/common'; +import { HttpStatus, Injectable, Logger, NestMiddleware } from '@nestjs/common'; import { Request, Response, NextFunction } from 'express'; +import { Organization } from '@prisma/client'; import { OrganizationService } from '@gitroom/nestjs-libraries/database/prisma/organizations/organization.service'; import { OAuthService } from '@gitroom/nestjs-libraries/database/prisma/oauth/oauth.service'; import { HttpForbiddenException } from '@gitroom/nestjs-libraries/services/exception.filter'; @@ -7,10 +8,18 @@ import { setSentryUserContext } from '@gitroom/nestjs-libraries/sentry/initializ @Injectable() export class PublicAuthMiddleware implements NestMiddleware { + private readonly _logger = new Logger(PublicAuthMiddleware.name); + constructor( private _organizationService: OrganizationService, private _oauthService: OAuthService ) {} + + private setOrg(req: Request, org: Organization) { + // @ts-ignore + req.org = { ...org, users: [{ users: { role: 'SUPERADMIN' } }] }; + } + async use(req: Request, res: Response, next: NextFunction) { const auth = (req.headers.authorization || req.headers.Authorization) as string; @@ -19,7 +28,13 @@ export class PublicAuthMiddleware implements NestMiddleware { return; } try { - if (auth.startsWith('pos_')) { + let org: Organization & { subscription?: unknown }; + const isOAuthApp = auth.startsWith('pos_'); + + // @ts-ignore + req.isOAuthApp = isOAuthApp; + + if (isOAuthApp) { const authorization = await this._oauthService.getOrgByOAuthToken(auth); if (!authorization) { res @@ -28,34 +43,60 @@ export class PublicAuthMiddleware implements NestMiddleware { return; } - const org = authorization.organization; - if (!!process.env.STRIPE_SECRET_KEY && !org.subscription) { - res - .status(HttpStatus.UNAUTHORIZED) - .json({ msg: 'No subscription found' }); - return; - } - - // @ts-ignore - req.org = { ...org, users: [{ users: { role: 'SUPERADMIN' } }] }; + org = authorization.organization; } else { - const org = await this._organizationService.getOrgByApiKey(auth); + org = await this._organizationService.getOrgByApiKey(auth); if (!org) { res .status(HttpStatus.UNAUTHORIZED) .json({ msg: 'Invalid API key' }); return; } + } - if (!!process.env.STRIPE_SECRET_KEY && !org.subscription) { + if (!!process.env.STRIPE_SECRET_KEY && !org.subscription) { + res + .status(HttpStatus.UNAUTHORIZED) + .json({ msg: 'No subscription found' }); + return; + } + + this.setOrg(req, org); + const includeDeleted = + (req.headers['x-postiz-include-deleted'] as string)?.trim() === 'true'; + // @ts-ignore + req.authOrgId = org.id; + // @ts-ignore + req.includeDeleted = includeDeleted; + + const overrideOrgId = (req.headers['x-postiz-org'] as string)?.trim(); + + if (overrideOrgId) { + if ( + isOAuthApp || + !(await this._organizationService.canUseSuperAdminApi(org.id)) + ) { + res.status(HttpStatus.FORBIDDEN).json({ msg: 'Unauthorized' }); + return; + } + + const overrideOrg = + await this._organizationService.getOrgByIdWithSubscription( + overrideOrgId + ); + + if (!overrideOrg || (overrideOrg.deletedAt && !includeDeleted)) { res - .status(HttpStatus.UNAUTHORIZED) - .json({ msg: 'No subscription found' }); + .status(HttpStatus.NOT_FOUND) + .json({ msg: 'Organization not found' }); return; } - // @ts-ignore - req.org = { ...org, users: [{ users: { role: 'SUPERADMIN' } }] }; + this.setOrg(req, overrideOrg); + + this._logger.log( + `Organization override performed by organization ${org.id}: acting as ${overrideOrg.id} on ${req.method} ${req.path}` + ); } } catch (err) { throw new HttpForbiddenException(); diff --git a/apps/backend/src/services/auth/super.admin.guard.ts b/apps/backend/src/services/auth/super.admin.guard.ts index 323d661e47..b52e5c44a2 100644 --- a/apps/backend/src/services/auth/super.admin.guard.ts +++ b/apps/backend/src/services/auth/super.admin.guard.ts @@ -16,11 +16,19 @@ export class SuperAdminGuard implements CanActivate { const request: Request = context.switchToHttp().getRequest(); // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-expect-error - const { org }: { org: Organization } = request; + const { + org, + isOAuthApp, + authOrgId, + }: { org: Organization; isOAuthApp?: boolean; authOrgId?: string } = + request; + + const orgId = authOrgId || org?.id; if ( - !org || - !(await this._organizationService.hasSuperAdminUser(org.id)) + !orgId || + isOAuthApp || + !(await this._organizationService.canUseSuperAdminApi(orgId)) ) { throw new HttpException({ msg: 'Unauthorized' }, 403); } diff --git a/apps/backend/src/services/auth/upload.widget.auth.middleware.ts b/apps/backend/src/services/auth/upload.widget.auth.middleware.ts new file mode 100644 index 0000000000..9529cd7290 --- /dev/null +++ b/apps/backend/src/services/auth/upload.widget.auth.middleware.ts @@ -0,0 +1,34 @@ +import { HttpStatus, Injectable, NestMiddleware } from '@nestjs/common'; +import { Request, Response, NextFunction } from 'express'; +import { MediaService } from '@gitroom/nestjs-libraries/database/prisma/media/media.service'; + +// The MCP upload widget runs in the host's sandboxed iframe (a foreign origin +// without our cookies), so it authenticates with a short-lived ticket. It is +// checked here, before the multipart interceptor streams anything to storage +@Injectable() +export class UploadWidgetAuthMiddleware implements NestMiddleware { + constructor(private _mediaService: MediaService) {} + async use(req: Request, res: Response, next: NextFunction) { + // Not part of the global cors() allowlist on purpose: that one allows + // credentials, and the sandbox origins are shared with every other connector. + // The global cors() answers every preflight itself, so the widget has to stay + // on "simple" requests (GET / multipart POST, no custom headers) + res.setHeader('Access-Control-Allow-Origin', '*'); + + const ticket = + typeof req.query.ticket === 'string' && + (await this._mediaService.getUploadTicket(req.query.ticket)); + if (!ticket) { + res + .status(HttpStatus.UNAUTHORIZED) + .json({ msg: 'Upload ticket not found or expired' }); + return; + } + + // @ts-ignore + req.org = { id: ticket.org }; + // @ts-ignore + req.uploadSession = ticket.sessionId; + next(); + } +} diff --git a/apps/frontend/src/app/(app)/auth/layout.tsx b/apps/frontend/src/app/(app)/auth/layout.tsx index 8157e6b131..9711cb886e 100644 --- a/apps/frontend/src/app/(app)/auth/layout.tsx +++ b/apps/frontend/src/app/(app)/auth/layout.tsx @@ -4,6 +4,8 @@ export const dynamic = 'force-dynamic'; import { ReactNode } from 'react'; import loadDynamic from 'next/dynamic'; import { TestimonialComponent } from '@gitroom/frontend/components/auth/testimonial.component'; +import { MantineWrapper } from '@gitroom/react/helpers/mantine.wrapper'; +import { Toaster } from '@gitroom/react/toaster/toaster'; import { LogoTextComponent } from '@gitroom/frontend/components/ui/logo-text.component'; import { getBrandNameServerSide } from '@gitroom/helpers/utils/is.general.server.side'; import { LanguageComponent } from '@gitroom/frontend/components/layout/language.component'; @@ -19,6 +21,8 @@ export default async function AuthLayout({ const brandName = getBrandNameServerSide(); return ( + +
@@ -41,5 +45,6 @@ export default async function AuthLayout({
+
); } diff --git a/apps/frontend/src/app/(app)/layout.tsx b/apps/frontend/src/app/(app)/layout.tsx index b0e9ed280e..5e4852d884 100644 --- a/apps/frontend/src/app/(app)/layout.tsx +++ b/apps/frontend/src/app/(app)/layout.tsx @@ -92,6 +92,11 @@ export default async function AppLayout({ children }: { children: ReactNode }) { googleAdsId={process.env.NEXT_PUBLIC_GTM_ID} googleAdsTrialTracking={process.env.NEXT_PUBLIC_TRACKING_TRIAL} language={language} + mediaProcessing={ + process.env.STORAGE_PROVIDER === 'cloudflare' && + !!process.env.RUNPOD_API_KEY && + !!process.env.RUNPOD_ENDPOINT_ID + } transloadit={ process.env.TRANSLOADIT_AUTH && process.env.TRANSLOADIT_TEMPLATE ? [ diff --git a/apps/frontend/src/app/(extension)/layout.tsx b/apps/frontend/src/app/(extension)/layout.tsx index 998461d46d..5bc8cc5789 100644 --- a/apps/frontend/src/app/(extension)/layout.tsx +++ b/apps/frontend/src/app/(extension)/layout.tsx @@ -60,6 +60,11 @@ export default async function AppLayout({ children }: { children: ReactNode }) { disableXAnalytics={!!process.env.DISABLE_X_ANALYTICS} sentryDsn={process.env.NEXT_PUBLIC_SENTRY_DSN!} extensionId={process.env.EXTENSION_ID || ''} + mediaProcessing={ + process.env.STORAGE_PROVIDER === 'cloudflare' && + !!process.env.RUNPOD_API_KEY && + !!process.env.RUNPOD_ENDPOINT_ID + } transloadit={ process.env.TRANSLOADIT_AUTH && process.env.TRANSLOADIT_TEMPLATE ? [ diff --git a/apps/frontend/src/app/(provider)/layout.tsx b/apps/frontend/src/app/(provider)/layout.tsx index 888bdcc3cd..2c20db68d9 100644 --- a/apps/frontend/src/app/(provider)/layout.tsx +++ b/apps/frontend/src/app/(provider)/layout.tsx @@ -62,6 +62,11 @@ export default async function AppLayout({ children }: { children: ReactNode }) { disableXAnalytics={!!process.env.DISABLE_X_ANALYTICS} sentryDsn={process.env.NEXT_PUBLIC_SENTRY_DSN!} extensionId={process.env.EXTENSION_ID || ''} + mediaProcessing={ + process.env.STORAGE_PROVIDER === 'cloudflare' && + !!process.env.RUNPOD_API_KEY && + !!process.env.RUNPOD_ENDPOINT_ID + } transloadit={ process.env.TRANSLOADIT_AUTH && process.env.TRANSLOADIT_TEMPLATE ? [ diff --git a/apps/frontend/src/app/global.scss b/apps/frontend/src/app/global.scss index 1b7000c5a7..a900a44d4f 100644 --- a/apps/frontend/src/app/global.scss +++ b/apps/frontend/src/app/global.scss @@ -524,6 +524,12 @@ div div .set-font-family { display: none !important; } +.hideChatbase #chatbase-bubble-button, +.hideChatbase #chatbase-bubble-window, +.hideChatbase #chatbase-message-bubbles { + display: none !important; +} + html[dir='rtl'] .rbox { direction: rtl !important; } diff --git a/apps/frontend/src/components/admin/admin-stats.component.tsx b/apps/frontend/src/components/admin/admin-stats.component.tsx index 1b5a51659f..2673eaa3bd 100644 --- a/apps/frontend/src/components/admin/admin-stats.component.tsx +++ b/apps/frontend/src/components/admin/admin-stats.component.tsx @@ -27,6 +27,7 @@ interface StatsResponse { scheduledAccounts?: StatsBlock; publishingChannels?: StatsBlock; scheduledChannels?: StatsBlock; + activeOrgsBySource?: StatsBlock; } const isoDaysAgo = (days: number) => { @@ -280,6 +281,14 @@ export const AdminStatsComponent: FC = () => { /> )} + {data.activeOrgsBySource && ( +
+ +
+ )}
@@ -337,6 +346,14 @@ export const AdminStatsComponent: FC = () => { />
)} + {data.activeOrgsBySource && ( +
+ +
+ )} )} diff --git a/apps/frontend/src/components/agents/agent.chat.tsx b/apps/frontend/src/components/agents/agent.chat.tsx index b12cdc85fe..80168237a7 100644 --- a/apps/frontend/src/components/agents/agent.chat.tsx +++ b/apps/frontend/src/components/agents/agent.chat.tsx @@ -9,11 +9,12 @@ import React, { useRef, useState, } from 'react'; -import { CopilotChat, CopilotKitCSSProperties } from '@copilotkit/react-ui'; import { + CopilotChat, + CopilotKitCSSProperties, InputProps, UserMessageProps, -} from '@copilotkit/react-ui/dist/components/chat/props'; +} from '@copilotkit/react-ui'; import { Input } from '@gitroom/frontend/components/agents/agent.input'; import { useModals } from '@gitroom/frontend/components/layout/new-modal'; import { @@ -50,6 +51,7 @@ export const AgentChat: FC = () => { {...(params.id === 'new' ? {} : { threadId: params.id })} credentials="include" runtimeUrl={backendUrl + '/copilot/agent'} + useSingleEndpoint={true} showDevConsole={false} agent="postiz" properties={{ @@ -104,7 +106,11 @@ const LoadMessages: FC<{ id: string }> = ({ id }) => { const data = await (await fetch(`/copilot/${idToSet}/list`)).json(); const list = data.messages.map((p: any) => { return new TextMessage({ - content: p.content.content, + content: + p.content.content || + (p.content.parts || []) + .map((part: any) => (part.type === 'text' ? part.text : '')) + .join(''), role: p.role, }); }); @@ -150,7 +156,13 @@ const LoadMessages: FC<{ id: string }> = ({ id }) => { const Message: FC = (props) => { const convertContentToImagesAndVideo = useMemo(() => { - return (props.message?.content || '') + const content = props.message?.content || ''; + const text = + typeof content === 'string' + ? content + : content.map((p) => (p.type === 'text' ? p.text : '')).join(''); + + return text .replace(/Video: (http.*mp4\n)/g, (match, p1) => { return ``; }) diff --git a/apps/frontend/src/components/agents/agent.input.tsx b/apps/frontend/src/components/agents/agent.input.tsx index 85d22b9b05..7e59cc5693 100644 --- a/apps/frontend/src/components/agents/agent.input.tsx +++ b/apps/frontend/src/components/agents/agent.input.tsx @@ -1,8 +1,11 @@ import React, { useMemo, useRef, useState } from 'react'; -import { useCopilotContext, useCopilotReadable } from '@copilotkit/react-core'; +import { + useCopilotChatInternal, + useCopilotContext, + useCopilotReadable, +} from '@copilotkit/react-core'; import AutoResizingTextarea from '@gitroom/frontend/components/agents/agent.textarea'; -import { useChatContext } from '@copilotkit/react-ui'; -import { InputProps } from '@copilotkit/react-ui/dist/components/chat/props'; +import { useChatContext, InputProps } from '@copilotkit/react-ui'; const MAX_NEWLINES = 6; export const Input = ({ @@ -49,14 +52,10 @@ export const Input = ({ ? context.icons.stopIcon : context.icons.sendIcon; + const { interrupt } = useCopilotChatInternal(); const canSend = useMemo(() => { - const interruptEvent = copilotContext.langGraphInterruptAction?.event; - const interruptInProgress = - interruptEvent?.name === 'LangGraphInterruptEvent' && - !interruptEvent?.response; - - return !isInProgress && text.trim().length > 0 && !interruptInProgress; - }, [copilotContext.langGraphInterruptAction?.event, isInProgress, text]); + return !isInProgress && text.trim().length > 0 && !interrupt; + }, [interrupt, isInProgress, text]); const canStop = useMemo(() => { return isInProgress && !hideStopButton; diff --git a/apps/frontend/src/components/auth/nayner.auth.button.tsx b/apps/frontend/src/components/auth/nayner.auth.button.tsx deleted file mode 100644 index da450b6df6..0000000000 --- a/apps/frontend/src/components/auth/nayner.auth.button.tsx +++ /dev/null @@ -1,85 +0,0 @@ -'use client'; - -import React, { - useCallback, - useEffect, - useState, - useRef, - FC, - ReactNode, -} from 'react'; -import { useNeynarContext } from '@neynar/react'; -export const NeynarAuthButton: FC<{ - children: ReactNode; - onLogin: (code: string) => void; -}> = (props) => { - const { children, onLogin } = props; - const { client_id } = useNeynarContext(); - const [showModal, setShowModal] = useState(false); - const authWindowRef = useRef(null); - const neynarLoginUrl = `${ - process.env.NEYNAR_LOGIN_URL ?? 'https://app.neynar.com/login' - }?client_id=${client_id}`; - const authOrigin = new URL(neynarLoginUrl).origin; - const modalRef = useRef(null); - const handleMessage = useCallback( - async (event: MessageEvent) => { - if ( - event.origin === authOrigin && - event.data && - event.data.is_authenticated - ) { - authWindowRef.current?.close(); - window.removeEventListener('message', handleMessage); // Remove listener here - delete event.data.user.profile; - const _user = { - signer_uuid: event.data.signer_uuid, - ...event.data.user, - }; - onLogin(Buffer.from(JSON.stringify(_user)).toString('base64')); - } - }, - [client_id, onLogin] - ); - const handleSignIn = useCallback(() => { - const width = 600, - height = 700; - const left = window.screen.width / 2 - width / 2; - const top = window.screen.height / 2 - height / 2; - const windowFeatures = `width=${width},height=${height},top=${top},left=${left}`; - authWindowRef.current = window.open( - neynarLoginUrl, - '_blank', - windowFeatures - ); - if (!authWindowRef.current) { - console.error( - 'Failed to open the authentication window. Please check your pop-up blocker settings.' - ); - return; - } - window.addEventListener('message', handleMessage, false); - }, [client_id, handleMessage]); - const closeModal = () => setShowModal(false); - useEffect(() => { - return () => { - window.removeEventListener('message', handleMessage); // Cleanup function to remove listener - }; - }, [handleMessage]); - const handleOutsideClick = useCallback((event: any) => { - if (modalRef.current && !modalRef.current.contains(event.target)) { - closeModal(); - } - }, []); - useEffect(() => { - if (showModal) { - document.addEventListener('mousedown', handleOutsideClick); - } else { - document.removeEventListener('mousedown', handleOutsideClick); - } - return () => { - document.removeEventListener('mousedown', handleOutsideClick); - }; - }, [showModal, handleOutsideClick]); - return
{children}
; -}; diff --git a/apps/frontend/src/components/auth/providers/farcaster.provider.tsx b/apps/frontend/src/components/auth/providers/farcaster.provider.tsx index 683b67e224..9c1cb3b0c9 100644 --- a/apps/frontend/src/components/auth/providers/farcaster.provider.tsx +++ b/apps/frontend/src/components/auth/providers/farcaster.provider.tsx @@ -1,59 +1,205 @@ 'use client'; -import { FC, useCallback } from 'react'; -import { useVariables } from '@gitroom/react/helpers/variable.context'; -import { NeynarContextProvider, Theme, useNeynarContext } from '@neynar/react'; -import { NeynarAuthButton } from '@gitroom/frontend/components/auth/nayner.auth.button'; +import { FC, useCallback, useEffect, useRef, useState } from 'react'; +import { useFetch } from '@gitroom/helpers/utils/custom.fetch'; +import { timer } from '@gitroom/helpers/utils/timer'; +import { useToaster } from '@gitroom/react/toaster/toaster'; import { useT } from '@gitroom/react/translation/get.transation.service.client'; +import { useModals } from '@gitroom/frontend/components/layout/new-modal'; +import { Button } from '@gitroom/react/form/button'; +import copy from 'copy-to-clipboard'; +import Loading from '@gitroom/frontend/components/layout/loading'; export const FarcasterProvider = () => { + const fetch = useFetch(); + const modal = useModals(); + const t = useT(); const gotoLogin = useCallback(async (code: string) => { - window.location.href = `/auth?provider=FARCASTER&code=${code}`; + const state = await (await fetch('/auth/oauth/FARCASTER')).text(); + window.location.href = `/auth?provider=FARCASTER&code=${encodeURIComponent(code)}&state=${state}`; + }, []); + const open = useCallback(() => { + modal.openModal({ + title: t('farcaster', 'Farcaster'), + withCloseButton: true, + classNames: { + modal: 'bg-transparent text-textColor', + }, + children: (close) => ( + + ), + }); }, []); - return ; + return ( +
+ + + + + + + + + + + +
{t('farcaster', 'Farcaster')}
+
+ ); }; -export const ButtonCaster: FC<{ +export const FarcasterApproval: FC<{ login: (code: string) => void; + onFail: () => void; }> = (props) => { - const { login } = props; - const { neynarClientId } = useVariables(); + const { login, onFail } = props; + const fetch = useFetch(); + const toaster = useToaster(); const t = useT(); + const activeSigner = useRef(''); + const [approvalUrl, setApprovalUrl] = useState(''); + const [qrCode, setQrCode] = useState(''); + + async function* load(signerUuid: string) { + while (true) { + try { + yield await ( + await fetch( + `/auth/farcaster/signer?signerUuid=${encodeURIComponent( + signerUuid + )}` + ) + ).json(); + } catch (err) { + // network blip, keep polling until approved or timed out + yield {}; + } + } + } + + const poll = async (signerUuid: string) => { + activeSigner.current = signerUuid; + const startedAt = Date.now(); + const generator = load(signerUuid); + for await (const data of generator) { + if (activeSigner.current !== signerUuid) { + return; + } + if (data.status === 'approved') { + login(data.code); + return; + } + if (data.status === 'revoked') { + toaster.show( + t( + 'farcaster_signer_revoked', + 'The Farcaster approval was revoked, please try again' + ), + 'warning' + ); + onFail(); + return; + } + if (Date.now() - startedAt > 10 * 60 * 1000) { + toaster.show( + t( + 'farcaster_approval_timeout', + 'Farcaster approval timed out, please try again' + ), + 'warning' + ); + onFail(); + return; + } + await timer(2000); + } + }; + + const start = async () => { + try { + const data = await ( + await fetch('/auth/farcaster/signer', { method: 'POST' }) + ).json(); + if (!data.approvalUrl) { + toaster.show( + data.error || + t( + 'farcaster_signer_failed', + 'Failed to start the Farcaster connection' + ), + 'warning' + ); + onFail(); + return; + } + setApprovalUrl(data.approvalUrl); + setQrCode(data.qrCode); + poll(data.signerUuid); + } catch (err) { + toaster.show( + t('farcaster_signer_failed', 'Failed to start the Farcaster connection'), + 'warning' + ); + onFail(); + } + }; + + const copyLink = useCallback(() => { + copy(approvalUrl); + toaster.show( + t('link_copied_to_clipboard', 'Link copied to clipboard'), + 'success' + ); + }, [approvalUrl]); + + useEffect(() => { + start(); + return () => { + activeSigner.current = ''; + }; + }, []); + + if (!approvalUrl) { + return ( +
+ +
+ ); + } + return ( - - -
- - - - - - - - - - - -
{t('farcaster', 'Farcaster')}
-
-
-
+
+ +
+ {t( + 'farcaster_scan_instructions', + 'Scan the QR code with your phone, or copy the link and open it on your phone, then approve Postiz in the Farcaster app.' + )} +
+ +
+ + {t('farcaster_waiting_for_approval', 'Waiting for your approval...')} +
+
); }; diff --git a/apps/frontend/src/components/launches/add.provider.component.tsx b/apps/frontend/src/components/launches/add.provider.component.tsx index b47070b11e..bc46c6e97e 100644 --- a/apps/frontend/src/components/launches/add.provider.component.tsx +++ b/apps/frontend/src/components/launches/add.provider.component.tsx @@ -453,7 +453,7 @@ export const AddProviderComponent: FC<{ > { - window.location.href = `/integrations/social/${identifier}?code=${code}&state=${newState}${ + window.location.href = `/integrations/social/${identifier}?code=${encodeURIComponent(code)}&state=${newState}${ onboarding ? '&onboarding=true' : '' }`; }} diff --git a/apps/frontend/src/components/launches/customer.modal.tsx b/apps/frontend/src/components/launches/customer.modal.tsx index 07b7b83a93..591a719bd7 100644 --- a/apps/frontend/src/components/launches/customer.modal.tsx +++ b/apps/frontend/src/components/launches/customer.modal.tsx @@ -3,7 +3,6 @@ import React, { FC, useCallback, useEffect, useState } from 'react'; import { useModals } from '@gitroom/frontend/components/layout/new-modal'; import { Integration } from '@prisma/client'; -import { Autocomplete } from '@mantine/core'; import useSWR from 'swr'; import { useFetch } from '@gitroom/helpers/utils/custom.fetch'; import { Button } from '@gitroom/react/form/button'; @@ -50,17 +49,24 @@ export const CustomerModal: FC<{ const { data } = useSWR('/customers', loadCustomers); return (
-
- + + setCustomer(e.target.value)} placeholder={t('start_typing', 'Start typing...')} - data={data?.map((p: any) => p.name) || []} + autoComplete="off" + className="bg-newBgColorInner h-[42px] border-newTableBorder border rounded-[8px] text-textColor placeholder-textColor px-[16px] text-[14px] outline-none" /> + + {(data?.map((p: any) => p.name) || []).map((name: string) => ( +
diff --git a/apps/frontend/src/components/launches/information.component.tsx b/apps/frontend/src/components/launches/information.component.tsx index c734429f45..718a8eb643 100644 --- a/apps/frontend/src/components/launches/information.component.tsx +++ b/apps/frontend/src/components/launches/information.component.tsx @@ -1,6 +1,6 @@ 'use client'; -import React, { FC, Fragment, useMemo } from 'react'; +import React, { FC, Fragment, useCallback, useMemo } from 'react'; import { useLaunchStore } from '@gitroom/frontend/components/new-launch/store'; import { useShallow } from 'zustand/react/shallow'; import clsx from 'clsx'; @@ -8,6 +8,7 @@ import SafeImage from '@gitroom/react/helpers/safe.image'; import { capitalize } from 'lodash'; import { useT } from '@gitroom/react/translation/get.transation.service.client'; import { hasLinks } from '@gitroom/helpers/utils/strip.links'; +import { countLength } from '@gitroom/helpers/utils/count.length'; const Valid: FC = () => { return ( @@ -91,6 +92,13 @@ export const InformationComponent: FC<{ const showStripLinkWarning = stripLinkNames.length > 0; + const countFor = useCallback( + (identifier?: string) => countLength(identifier || '', text || ''), + [text] + ); + + const currentChars = countFor(currentIntegration?.identifier); + const isInternal = useMemo(() => { if (!isGlobal) { return []; @@ -113,11 +121,11 @@ export const InformationComponent: FC<{ return false; } - if (totalChars > totalAllowedChars && !isGlobal) { + if (currentChars > totalAllowedChars && !isGlobal) { return false; } - if (totalChars <= totalAllowedChars && !isGlobal) { + if (currentChars <= totalAllowedChars && !isGlobal) { return true; } @@ -127,7 +135,10 @@ export const InformationComponent: FC<{ return false; } - return totalChars > (chars?.[p.integration.id] || 0); + return ( + countFor(p.integration.identifier) > + (chars?.[p.integration.id] || 0) + ); }) ) { return false; @@ -137,6 +148,8 @@ export const InformationComponent: FC<{ }, [ totalAllowedChars, totalChars, + currentChars, + countFor, isInternal, isPicture, chars, @@ -152,11 +165,11 @@ export const InformationComponent: FC<{ const limits = selectedIntegrations .map((p, index) => ({ limit: chars?.[p.integration.id] || 0, + count: countFor(p.integration.identifier), isInternal: isInternal[index], })) .filter((item) => !item.isInternal && item.limit > 0) - .map((item) => item.limit) - .sort((a, b) => a - b); + .sort((a, b) => a.limit - b.limit); if (!limits.length) { return null; @@ -164,9 +177,9 @@ export const InformationComponent: FC<{ // Find the smallest limit that hasn't been exceeded yet // If all are exceeded, show the smallest one - const validLimit = limits.find((limit) => totalChars <= limit); + const validLimit = limits.find((item) => item.count <= item.limit); return validLimit ?? limits[0]; - }, [isGlobal, selectedIntegrations, chars, isInternal, totalChars]); + }, [isGlobal, selectedIntegrations, chars, isInternal, countFor]); return (
- {totalChars}/{totalAllowedChars} + {currentChars}/{totalAllowedChars}
)} {isGlobal && globalDisplayLimit !== null && (
- {totalChars}/{globalDisplayLimit} + {globalDisplayLimit.count}/{globalDisplayLimit.limit}
)} {((isGlobal && selectedIntegrations.length) || !isValid) && ( @@ -237,7 +250,8 @@ export const InformationComponent: FC<{ 'whitespace-nowrap', isInternal?.[index] ? '' - : totalChars > (chars?.[p.integration.id] || 0) + : countFor(p.integration.identifier) > + (chars?.[p.integration.id] || 0) ? 'text-[#FF3F3F]' : '' )} @@ -250,14 +264,17 @@ export const InformationComponent: FC<{ 'whitespace-nowrap', isInternal?.[index] ? '' - : totalChars > (chars?.[p.integration.id] || 0) + : countFor(p.integration.identifier) > + (chars?.[p.integration.id] || 0) ? 'text-[#FF3F3F]' : '' )} > {isInternal?.[index] ? t('internal_edit', 'Internal Edit') - : `${totalChars}/${chars?.[p.integration.id] || 0}`} + : `${countFor(p.integration.identifier)}/${ + chars?.[p.integration.id] || 0 + }`}
))} diff --git a/apps/frontend/src/components/launches/launches.component.tsx b/apps/frontend/src/components/launches/launches.component.tsx index 8544a3e77f..bb8d9ce6d7 100644 --- a/apps/frontend/src/components/launches/launches.component.tsx +++ b/apps/frontend/src/components/launches/launches.component.tsx @@ -1,6 +1,9 @@ 'use client'; -import { AddProviderButton } from '@gitroom/frontend/components/launches/add.provider.component'; +import { + AddProviderButton, + CustomVariables, +} from '@gitroom/frontend/components/launches/add.provider.component'; import { FC, useCallback, useEffect, useMemo, useState } from 'react'; import SafeImage from '@gitroom/react/helpers/safe.image'; import { capitalize, groupBy, orderBy } from 'lodash'; @@ -26,6 +29,7 @@ import { useT } from '@gitroom/react/translation/get.transation.service.client'; import { useIntegrationList } from '@gitroom/frontend/components/launches/helpers/use.integration.list'; import useCookie from 'react-use-cookie'; import { Onboarding } from '@gitroom/frontend/components/onboarding/onboarding'; +import { useModals } from '@gitroom/frontend/components/layout/new-modal'; export const SVGLine = () => { return ( @@ -358,6 +362,7 @@ export const LaunchesComponent = () => { const toast = useToaster(); const fireEvents = useFireEvents(); const t = useT(); + const modal = useModals(); const [reload, setReload] = useState(false); const [collapseMenu, setCollapseMenu] = useCookie('collapseMenu', '0'); const [mode] = useCookie('mode', 'dark'); @@ -441,9 +446,31 @@ export const LaunchesComponent = () => { ( integration: Integration & { identifier: string; + isCustomFields?: boolean; + customFields?: any[]; } ) => async () => { + // Custom-fields providers (Bluesky, etc.) have no OAuth URL to redirect + // to: reconnect by re-entering the credentials, like the menu does. + if (integration.isCustomFields) { + modal.openModal({ + title: t('custom_url', 'Custom URL'), + withCloseButton: false, + classNames: { + modal: 'md', + }, + children: ( + router.push(url)} + variables={integration.customFields || []} + /> + ), + }); + return; + } + const { url } = await ( await fetch( `/integrations/social/${integration.identifier}?refresh=${integration.internalId}`, diff --git a/apps/frontend/src/components/launches/web3/providers/telegram.provider.tsx b/apps/frontend/src/components/launches/web3/providers/telegram.provider.tsx index 8ade765367..94f77a5703 100644 --- a/apps/frontend/src/components/launches/web3/providers/telegram.provider.tsx +++ b/apps/frontend/src/components/launches/web3/providers/telegram.provider.tsx @@ -1,6 +1,5 @@ 'use client'; -import '@neynar/react/dist/style.css'; import React, { FC, useCallback, useEffect, useRef, useState } from 'react'; import { Web3ProviderInterface } from '@gitroom/frontend/components/launches/web3/web3.provider.interface'; import { useFetch } from '@gitroom/helpers/utils/custom.fetch'; diff --git a/apps/frontend/src/components/launches/web3/providers/wrapcaster.provider.tsx b/apps/frontend/src/components/launches/web3/providers/wrapcaster.provider.tsx index c3814ac9cd..fec71e5f8a 100644 --- a/apps/frontend/src/components/launches/web3/providers/wrapcaster.provider.tsx +++ b/apps/frontend/src/components/launches/web3/providers/wrapcaster.provider.tsx @@ -1,20 +1,10 @@ 'use client'; -import '@neynar/react/dist/style.css'; -import React, { FC, useMemo, useState, useCallback, useEffect } from 'react'; +import React, { FC, useState, useCallback } from 'react'; import { Web3ProviderInterface } from '@gitroom/frontend/components/launches/web3/web3.provider.interface'; -import { useVariables } from '@gitroom/react/helpers/variable.context'; -import { TopTitle } from '@gitroom/frontend/components/launches/helpers/top.title.component'; -import { useModals } from '@gitroom/frontend/components/layout/new-modal'; import { LoadingComponent } from '@gitroom/frontend/components/layout/loading'; -import { - NeynarAuthButton, - NeynarContextProvider, - Theme, - useNeynarContext, -} from '@neynar/react'; -import { INeynarAuthenticatedUser } from '@neynar/react/dist/types/common'; -import { ButtonCaster } from '@gitroom/frontend/components/auth/providers/farcaster.provider'; +import { useModals } from '@gitroom/frontend/components/layout/new-modal'; +import { FarcasterApproval } from '@gitroom/frontend/components/auth/providers/farcaster.provider'; export const WrapcasterProvider: FC = (props) => { const [_, state] = props.nonce.split('||'); const modal = useModals(); @@ -33,9 +23,8 @@ export const WrapcasterProvider: FC = (props) => {
) : ( -
-
Click on the bottom below to start the process
- +
+
)}
diff --git a/apps/frontend/src/components/media/media.component.tsx b/apps/frontend/src/components/media/media.component.tsx index 2dbbd83fc1..901e9e5400 100644 --- a/apps/frontend/src/components/media/media.component.tsx +++ b/apps/frontend/src/components/media/media.component.tsx @@ -170,28 +170,30 @@ export const Pagination: FC<{ ); }; export const ShowMediaBoxModal: FC = () => { - const [showModal, setShowModal] = useState(false); - const [callBack, setCallBack] = - useState<(params: { id: string; path: string }[]) => void | undefined>(); - const closeModal = useCallback(() => { - setShowModal(false); - setCallBack(undefined); - }, []); + const modals = useModals(); + const t = useT(); useEffect(() => { showModalEmitter.on('show-modal', (cCallback) => { - setShowModal(true); - setCallBack(() => cCallback); + modals.openModal({ + title: t('media_library', 'Media Library'), + askClose: false, + closeOnEscape: true, + fullScreen: true, + size: 'calc(100% - 80px)', + height: 'calc(100% - 80px)', + children: (close) => ( + cCallback(media[0])} + closeModal={close} + /> + ), + }); }); return () => { showModalEmitter.removeAllListeners('show-modal'); }; }, []); - if (!showModal) return null; - return ( -
- -
- ); + return null; }; export const showMediaBox = ( callback: (params: { id: string; path: string }) => void diff --git a/apps/frontend/src/components/media/new.uploader.tsx b/apps/frontend/src/components/media/new.uploader.tsx index cde95e738a..532dc0132a 100644 --- a/apps/frontend/src/components/media/new.uploader.tsx +++ b/apps/frontend/src/components/media/new.uploader.tsx @@ -3,7 +3,10 @@ import React, { useCallback, useEffect, useMemo, useState } from 'react'; import Uppy, { BasePlugin, UploadResult, UppyFile } from '@uppy/core'; // @ts-ignore import { useFetch } from '@gitroom/helpers/utils/custom.fetch'; -import { getUppyUploadPlugin } from '@gitroom/react/helpers/uppy.upload'; +import { + getUppyUploadPlugin, + WaitForMediaProcessing, +} from '@gitroom/react/helpers/uppy.upload'; import { Dashboard, FileInput, ProgressBar } from '@uppy/react'; // Uppy styles @@ -44,8 +47,14 @@ export function useUppyUploader(props: { }) { const setLocked = useLaunchStore((state) => state.setLocked); const toast = useToaster(); - const { storageProvider, backendUrl, disableImageCompression, transloadit } = - useVariables(); + const t = useT(); + const { + storageProvider, + backendUrl, + disableImageCompression, + transloadit, + mediaProcessing, + } = useVariables(); const { onUploadSuccess, allowedFileTypes } = props; const fetch = useFetch(); return useMemo(() => { @@ -84,6 +93,10 @@ export function useUppyUploader(props: { if (type === 'video/*') { return ['video/mp4', 'video/mpeg', 'video/quicktime']; } + // the normalizer turns QuickTime into mp4, nothing else is accepted by the bucket + if (type === 'video/mp4' && mediaProcessing) { + return ['video/mp4', 'video/quicktime']; + } if (type === 'video/mp4' && transloadit && transloadit.length > 0) { return ['video/mp4', 'video/mpeg', 'video/quicktime']; } @@ -167,15 +180,31 @@ export function useUppyUploader(props: { }); }); + // The normalizer takes precedence over Transloadit, so both can stay + // configured and turning the normalizer off falls back to Transloadit + const useTransloadit = !mediaProcessing && transloadit.length > 0; const { plugin, options } = getUppyUploadPlugin( - transloadit.length > 0 ? 'transloadit' : storageProvider, + useTransloadit ? 'transloadit' : storageProvider, fetch, backendUrl, transloadit ); uppy2.use(plugin, options); - if (!disableImageCompression) { + // installed whenever the record can come back "processing", so the backend + // decides; it passes files through untouched when the row is already ready + if (storageProvider === 'cloudflare' && !useTransloadit) { + uppy2.use(WaitForMediaProcessing, { + fetch, + processingMessage: t('processing', 'Processing...'), + fallbackMessage: t( + 'could_not_optimize_file', + 'Could not optimize the file, the original will be used' + ), + }); + } + // the normalizer resizes on the server, shrinking first would only make it upscale a blurry copy + if (!disableImageCompression && !mediaProcessing) { uppy2.use(CompressionWrapper, { convertTypes: ['image/jpeg', 'image/png', 'image/webp'], maxWidth: 1000, @@ -222,7 +251,7 @@ export function useUppyUploader(props: { return; } - if (transloadit.length > 0) { + if (useTransloadit) { // @ts-ignore const allRes = result.transloadit[0].results; const toSave = uniqBy<{ name: string; originalName: string; order: number }>( diff --git a/apps/frontend/src/components/new-launch/add.edit.modal.tsx b/apps/frontend/src/components/new-launch/add.edit.modal.tsx index a974e4bf5a..7de3d565d9 100644 --- a/apps/frontend/src/components/new-launch/add.edit.modal.tsx +++ b/apps/frontend/src/components/new-launch/add.edit.modal.tsx @@ -52,6 +52,13 @@ export const AddEditModal: FC = (props) => { setIsCreateSet(!!props.addEditSets); }, []); + useEffect(() => { + document.querySelector('body')?.classList.add('hideChatbase'); + return () => { + document.querySelector('body')?.classList.remove('hideChatbase'); + }; + }, []); + if (!integrations.length) { return null; } diff --git a/apps/frontend/src/components/new-launch/providers/reddit/subreddit.tsx b/apps/frontend/src/components/new-launch/providers/reddit/subreddit.tsx index c3bdd53ffb..ae3b2d5a4f 100644 --- a/apps/frontend/src/components/new-launch/providers/reddit/subreddit.tsx +++ b/apps/frontend/src/components/new-launch/providers/reddit/subreddit.tsx @@ -90,6 +90,7 @@ export const Subreddit: FC<{ ...restrictions, type: restrictions.allow[0], media: [], + url: '', }, }, }); diff --git a/apps/frontend/src/components/new-layout/layout.component.tsx b/apps/frontend/src/components/new-layout/layout.component.tsx index 18b7e651fd..6d47d15f41 100644 --- a/apps/frontend/src/components/new-layout/layout.component.tsx +++ b/apps/frontend/src/components/new-layout/layout.component.tsx @@ -81,6 +81,7 @@ export const LayoutComponent = ({ children }: { children: ReactNode }) => { diff --git a/apps/frontend/src/components/preview/preview.wrapper.tsx b/apps/frontend/src/components/preview/preview.wrapper.tsx index f2922aba19..85df00de49 100644 --- a/apps/frontend/src/components/preview/preview.wrapper.tsx +++ b/apps/frontend/src/components/preview/preview.wrapper.tsx @@ -27,6 +27,7 @@ export const PreviewWrapper = ({ children }: { children: ReactNode }) => { diff --git a/apps/orchestrator/src/activities/media.activity.ts b/apps/orchestrator/src/activities/media.activity.ts new file mode 100644 index 0000000000..beff47318f --- /dev/null +++ b/apps/orchestrator/src/activities/media.activity.ts @@ -0,0 +1,26 @@ +import { Injectable } from '@nestjs/common'; +import { Activity, ActivityMethod } from 'nestjs-temporal-core'; +import { MediaService } from '@gitroom/nestjs-libraries/database/prisma/media/media.service'; + +@Injectable() +@Activity() +export class MediaActivity { + constructor(private _mediaService: MediaService) {} + + // Returns the processor job id, or null when there is nothing to process + @ActivityMethod() + async submitMediaProcessing(mediaId: string) { + return this._mediaService.submitProcessing(mediaId); + } + + // Returns true once the media record is final (ready or failed) + @ActivityMethod() + async checkMediaProcessing(mediaId: string, jobId: string) { + return this._mediaService.checkProcessing(mediaId, jobId); + } + + @ActivityMethod() + async failMediaProcessing(mediaId: string, error: string) { + return this._mediaService.failProcessing(mediaId, error); + } +} diff --git a/apps/orchestrator/src/activities/post.activity.ts b/apps/orchestrator/src/activities/post.activity.ts index 271213f2aa..5c18c34759 100644 --- a/apps/orchestrator/src/activities/post.activity.ts +++ b/apps/orchestrator/src/activities/post.activity.ts @@ -498,7 +498,10 @@ export class PostActivity { return; } - const post = await this._postService.getPostByForWebhookId(postId); + const post = await this._postService.getPostByForWebhookId( + postId, + integrationId + ); await Promise.all( webhooks.map(async (webhook) => { try { diff --git a/apps/orchestrator/src/app.module.ts b/apps/orchestrator/src/app.module.ts index e2707b93ce..4c0af35bca 100644 --- a/apps/orchestrator/src/app.module.ts +++ b/apps/orchestrator/src/app.module.ts @@ -6,6 +6,7 @@ import { AutopostService } from '@gitroom/nestjs-libraries/database/prisma/autop import { EmailActivity } from '@gitroom/orchestrator/activities/email.activity'; import { IntegrationsActivity } from '@gitroom/orchestrator/activities/integrations.activity'; import { VideoActivity } from '@gitroom/orchestrator/activities/video.activity'; +import { MediaActivity } from '@gitroom/orchestrator/activities/media.activity'; import { VideoModule } from '@gitroom/nestjs-libraries/videos/video.module'; import { HealthController } from '@gitroom/orchestrator/health.controller'; @@ -15,6 +16,7 @@ const activities = [ EmailActivity, IntegrationsActivity, VideoActivity, + MediaActivity, ]; @Module({ imports: [ diff --git a/apps/orchestrator/src/workflows/index.ts b/apps/orchestrator/src/workflows/index.ts index a949c98937..4d902a0177 100644 --- a/apps/orchestrator/src/workflows/index.ts +++ b/apps/orchestrator/src/workflows/index.ts @@ -17,3 +17,4 @@ export * from './send.email.workflow'; export * from './refresh.token.workflow'; export * from './streak.workflow'; export * from './generate.video.workflow'; +export * from './process.media.workflow'; diff --git a/apps/orchestrator/src/workflows/process.media.workflow.ts b/apps/orchestrator/src/workflows/process.media.workflow.ts new file mode 100644 index 0000000000..7b6b30614b --- /dev/null +++ b/apps/orchestrator/src/workflows/process.media.workflow.ts @@ -0,0 +1,66 @@ +import { ActivityFailure, proxyActivities, sleep } from '@temporalio/workflow'; +import { MediaActivity } from '@gitroom/orchestrator/activities/media.activity'; + +// Submitting is a plain POST with no idempotency key, so a retry after the +// queue accepted the job would run it twice; one attempt, and a failure +// releases the media instead +const { submitMediaProcessing } = proxyActivities({ + startToCloseTimeout: '2 minute', + taskQueue: 'main', + retry: { + maximumAttempts: 1, + }, +}); + +// Polling is idempotent: ride out a queue API outage of a few minutes. +// Terminal answers are recorded by the activity itself and never throw +const { checkMediaProcessing, failMediaProcessing } = + proxyActivities({ + startToCloseTimeout: '2 minute', + taskQueue: 'main', + retry: { + maximumAttempts: 10, + backoffCoefficient: 2, + initialInterval: '10 seconds', + maximumInterval: '2 minutes', + }, + }); + +// the workflow only sees the activity failure wrapper; the reason is its cause +const reason = (err: any, fallback: string) => + (err instanceof ActivityFailure ? err.cause?.message : err?.message) || + fallback; + +// Polls a job on the media normalization service; the service has no callbacks, +// and the RunPod job TTL is one hour so polling past it is pointless +const POLL_INTERVAL = 5000; +const MAX_POLLS = (60 * 60 * 1000) / POLL_INTERVAL; + +export async function processMediaWorkflow({ mediaId }: { mediaId: string }) { + let jobId: string | null; + try { + jobId = await submitMediaProcessing(mediaId); + } catch (err: any) { + await failMediaProcessing(mediaId, reason(err, 'Could not submit job')); + return; + } + + // nothing to run: the activity already released the media as ready + if (!jobId) { + return; + } + + for (let i = 0; i < MAX_POLLS; i++) { + await sleep(POLL_INTERVAL); + try { + if (await checkMediaProcessing(mediaId, jobId)) { + return; + } + } catch (err: any) { + await failMediaProcessing(mediaId, reason(err, 'Could not check job')); + return; + } + } + + await failMediaProcessing(mediaId, 'Processing timed out'); +} diff --git a/chatgpt-app-submission.json b/chatgpt-app-submission.json index de60c3e5e0..6f8e45cbf2 100644 --- a/chatgpt-app-submission.json +++ b/chatgpt-app-submission.json @@ -163,6 +163,42 @@ "open_world_justification": "Reads from a public URL and stores the resulting media through external storage.", "destructive_justification": "Does not delete or overwrite existing media, revoke access, or publish content." } + }, + "uploadWidgetTool": { + "annotations": { + "readOnlyHint": false, + "openWorldHint": false, + "destructiveHint": false + }, + "justifications": { + "read_only_justification": "Opens an upload session and shows a widget the user uploads media to their own media library with.", + "open_world_justification": "Only creates an upload session inside the user's Postiz workspace; nothing is published or sent to a third party.", + "destructive_justification": "Does not delete or overwrite existing media, revoke access, or publish content." + } + }, + "uploadWidgetTicketTool": { + "annotations": { + "readOnlyHint": false, + "openWorldHint": false, + "destructiveHint": false + }, + "justifications": { + "read_only_justification": "Creates a short-lived upload ticket for the upload widget; it is only callable by the widget, not by the model.", + "open_world_justification": "The ticket only allows uploads into the user's own Postiz media library; no public or third-party state changes.", + "destructive_justification": "Does not delete or overwrite anything, revoke access, or publish content." + } + }, + "uploadWidgetStatusTool": { + "annotations": { + "readOnlyHint": true, + "openWorldHint": false, + "destructiveHint": false + }, + "justifications": { + "read_only_justification": "Only reads the media uploaded in an upload widget session.", + "open_world_justification": "Reads internal Postiz data for the user's workspace only.", + "destructive_justification": "Read-only; it cannot change or delete anything." + } } }, "test_cases": [ diff --git a/i18n.lock b/i18n.lock index 8d227e15b8..88840d1e14 100644 --- a/i18n.lock +++ b/i18n.lock @@ -579,7 +579,16 @@ checksums: email_address: 0ee22bbbe989a0c61a18023407d12dc2 email_already_exists: ad25f0ca7a16c0d37e566a9c090a0fd2 google: 6cc462fb53d90d404f48d5a6695c1de1 + apple: 4e2ced07ca66bd1cf0562882d019aff2 farcaster: b09af25fcb497663e8594b9fc514b969 + farcaster_approve_instructions: 97061425f4de396ed7fdbca1f59fe702 + farcaster_open_in_farcaster: cc32bd29fef8129fbd9a30385b163c49 + farcaster_waiting_for_approval: 2ee1cd6c0ff8d0db1a4924c08b80e498 + farcaster_signer_revoked: 0eff3e12951a952f8db78f54be25cf2d + farcaster_signer_failed: d3274186449d73fb6ffb37b2f47bb9d4 + farcaster_scan_instructions: 28fdf8386de75fc770b3c2585a3cf8bc + farcaster_copy_link: 3bf926fddc31ea08755160e6abce8674 + farcaster_approval_timeout: 2a434e0962661820d56dba28a88ec18d edit_autopost: 2cde36144cddda0acc069e6913e095f9 add_autopost_title: d018d5d12c9f41c0b610da4b101d77e9 webhook_deleted_successfully: fcefd247ec76a372002d2cffac3c5b0f @@ -697,10 +706,31 @@ checksums: connected_channels: b64d400364bb3ccb4b1d4b547673f4c3 continue: 3cfba90b4600131e82fc4260c568d044 continue_without_channels: fa9c2e19c59e2eac86c1fcac35611337 + connect_agents: 3272e6e7b043cd9bd5626dc57892b4b2 + connect_your_ai_agent: 29cfdf27911e816ade81f5dc3ba948eb + connect_agent_description: 087b814876d35ea71d2f63d54cc39788 + agent_access_unavailable: 80a529742f86d7cacb9bb44d5e06be04 + sign_in_no_api_key: b17680d7465d120632114d25217e0e2e + oauth_sign_in_hint: 92797174fbc54b56b7c81f485dc9008b + add_to_cursor: da1a4472a29f82361b48e26842c05a0e + cli: 6bfaaf925aa1c902820f2059a234e467 + other_agents: e85458e10eb4bd29157a1f77568a3845 + documentation: 1563fcb5ddb5037b0709ccd3dd384a92 + read_the_api_docs: 016e8f560539f8c57727cab2b2e4fc1d + api_key_onboarding_description: 426162950cd838b5ebd90d22151ae4b0 + api_onboarding_description: 97cc31ad6bfe6ef3f479e72987ea69a4 + chat: 1171b63c16b3431dca319af1804de2a0 + chat_onboarding_description: 9da74037342cd6adb283e8205299b986 + connector: 7abb5584501ce0e3cc51ba19f0561ca8 + connector_onboarding_description: eb8027296b46bf58475f6b4925bd6351 + mcp_onboarding_description: 5b33036d174222d86ac50039a3a31724 + cli_onboarding_description: b4aba065e5a8410ee2c365ee4d7aa87c + agent_settings_later: bbdd45a80cc5218809363348e0b03a32 watch_tutorial: 7f202b82c805285109187f099d22e863 watch_tutorial_title: c3c0d814f10a3325a7fd52a7fb44ae38 watch_tutorial_description: 25dd65235d9603f6d65d62f953791722 back: f541015a827e37cb3b1234e56bc2aa3c + continue_skip: 82edfa21507a88b8788d33cc632d64af get_started: 1d5f030c4ec9c869e647ae060518b948 kick_select_channel: 13fa95c439addeb6674e571e37c96b79 annual: 5d4f1c56f4e9e579ec9967ca68cc64ac diff --git a/libraries/helpers/src/utils/count.length.ts b/libraries/helpers/src/utils/count.length.ts index 4a97255f53..d44dca1b91 100644 --- a/libraries/helpers/src/utils/count.length.ts +++ b/libraries/helpers/src/utils/count.length.ts @@ -37,3 +37,15 @@ export const textSlicer = ( export const weightedLength = (text: string): number => { return twitter.parseTweet(text).weightedLength; }; + +export const countLength = (integrationType: string, text: string): number => { + if (integrationType === 'x') { + return weightedLength(text); + } + + if (integrationType === 'threads') { + return new TextEncoder().encode(text).length; + } + + return text.length; +}; diff --git a/libraries/nestjs-libraries/src/chat/agent.tool.interface.ts b/libraries/nestjs-libraries/src/chat/agent.tool.interface.ts index 42de607588..e3bea8b468 100644 --- a/libraries/nestjs-libraries/src/chat/agent.tool.interface.ts +++ b/libraries/nestjs-libraries/src/chat/agent.tool.interface.ts @@ -4,5 +4,7 @@ export type ToolReturn = ToolAction; export interface AgentToolInterface { name: string; + // needs an MCP host (e.g. renders a ui:// widget), so the in-app agent doesn't get it + mcpOnly?: boolean; run(): ToolReturn; } diff --git a/libraries/nestjs-libraries/src/chat/load.tools.service.ts b/libraries/nestjs-libraries/src/chat/load.tools.service.ts index 3e2c11cb1e..2b31e605bf 100644 --- a/libraries/nestjs-libraries/src/chat/load.tools.service.ts +++ b/libraries/nestjs-libraries/src/chat/load.tools.service.ts @@ -6,6 +6,7 @@ import { pStore } from '@gitroom/nestjs-libraries/chat/mastra.store'; import { array, object, string } from 'zod'; import { ModuleRef } from '@nestjs/core'; import { toolList } from '@gitroom/nestjs-libraries/chat/tools/tool.list'; +import { AgentToolInterface } from '@gitroom/nestjs-libraries/chat/agent.tool.interface'; import dayjs from 'dayjs'; import { getBrandConfig } from '@gitroom/helpers/utils/brand.config'; @@ -22,11 +23,15 @@ const renderArray = (list: string[], show: boolean) => { export class LoadToolsService { constructor(private _moduleRef: ModuleRef) {} - async loadTools() { + async loadTools(mcpOnly = false) { const directTools = ( await Promise.all<{ name: string; tool: any }>( toolList - .map((p) => this._moduleRef.get(p, { strict: false })) + .map( + (p) => + this._moduleRef.get(p, { strict: false }) as AgentToolInterface + ) + .filter((p) => !!p.mcpOnly === mcpOnly) .map(async (p) => ({ name: p.name as string, tool: await p.run(), diff --git a/libraries/nestjs-libraries/src/chat/oauth-types.ts b/libraries/nestjs-libraries/src/chat/oauth-types.ts index 67b4ec4486..720625c84f 100644 --- a/libraries/nestjs-libraries/src/chat/oauth-types.ts +++ b/libraries/nestjs-libraries/src/chat/oauth-types.ts @@ -92,6 +92,36 @@ export function generateProtectedResourceMetadata(config: MCPServerOAuthConfig): }; } +// RFC 6749 §2.3.1 client_secret_basic: "Basic base64(urlencode(id):urlencode(secret))" +export function extractBasicCredentials( + authHeader: string | null | undefined, +): { clientId: string; clientSecret: string } | undefined { + if (!authHeader) return undefined; + + const prefix = 'basic '; + if (authHeader.length <= prefix.length) return undefined; + if (authHeader.slice(0, prefix.length).toLowerCase() !== prefix) return undefined; + + let decoded: string; + try { + decoded = Buffer.from(authHeader.slice(prefix.length).trim(), 'base64').toString('utf8'); + } catch { + return undefined; + } + + const separator = decoded.indexOf(':'); + if (separator <= 0) return undefined; + + try { + return { + clientId: decodeURIComponent(decoded.slice(0, separator)), + clientSecret: decodeURIComponent(decoded.slice(separator + 1)), + }; + } catch { + return undefined; + } +} + export function extractBearerToken(authHeader: string | null | undefined): string | undefined { if (!authHeader) return undefined; diff --git a/libraries/nestjs-libraries/src/chat/start.mcp.ts b/libraries/nestjs-libraries/src/chat/start.mcp.ts index 1d52aa83f2..8430dad5b8 100644 --- a/libraries/nestjs-libraries/src/chat/start.mcp.ts +++ b/libraries/nestjs-libraries/src/chat/start.mcp.ts @@ -1,12 +1,14 @@ import { INestApplication } from '@nestjs/common'; import { Request, Response } from 'express'; import { MastraService } from '@gitroom/nestjs-libraries/chat/mastra.service'; +import { LoadToolsService } from '@gitroom/nestjs-libraries/chat/load.tools.service'; import { MCPServer } from '@mastra/mcp'; import { OrganizationService } from '@gitroom/nestjs-libraries/database/prisma/organizations/organization.service'; import { OAuthService } from '@gitroom/nestjs-libraries/database/prisma/oauth/oauth.service'; import { runWithContext } from './async.storage'; import { createOAuthMiddleware } from './oauth-middleware'; import { getBrandConfig } from '@gitroom/helpers/utils/brand.config'; +import { UPLOAD_WIDGET_URI, uploadWidgetHtml } from '@gitroom/nestjs-libraries/chat/ui/upload.widget'; const fixAcceptHeader = (req: Request) => { const value = 'application/json, text/event-stream'; req.headers.accept = value; @@ -30,6 +32,7 @@ export const startMcp = async (app: INestApplication) => { const mastraService = app.get(MastraService, { strict: false }); const organizationService = app.get(OrganizationService, { strict: false }); const oauthService = app.get(OAuthService, { strict: false }); + const loadToolsService = app.get(LoadToolsService, { strict: false }); const resolveAuth = async (token: string) => { if (token.startsWith('pos_')) { @@ -42,7 +45,11 @@ export const startMcp = async (app: INestApplication) => { const mastra = await mastraService.mastra(); const agent = mastra.getAgent('postiz'); - const tools = await agent.listTools(); + const tools = { + ...(await agent.listTools()), + // tools that only make sense inside an MCP host (ui:// widgets) + ...(await loadToolsService.loadTools(true)), + }; const brand = getBrandConfig(); // The Claude connector directory does not accept AI media generation tools, @@ -66,6 +73,25 @@ export const startMcp = async (app: INestApplication) => { const claudeTools = Object.fromEntries( Object.entries(tools).filter(([name]) => !claudeHiddenTools.includes(name)) ) as typeof tools; + + const backendUrl = process.env.NEXT_PUBLIC_OVERRIDE_BACKEND_URL || process.env.NEXT_PUBLIC_BACKEND_URL; + + // MCP Apps widgets (ui:// resources). They run in the host's sandboxed iframe, + // which can only reach the domains listed in the csp + const appResources = { + [UPLOAD_WIDGET_URI]: { + name: 'Upload Media', + description: 'Upload an image or video from the device to the media library', + html: uploadWidgetHtml(backendUrl!), + meta: { + csp: { connectDomains: [new URL(backendUrl!).origin] }, + // the "Copy link" button of the uploaded media + permissions: { clipboardWrite: {} }, + prefersBorder: true, + }, + }, + }; + const serverConfig = { name: `${brand.name} MCP`, version: '1.0.0', @@ -76,6 +102,7 @@ export const startMcp = async (app: INestApplication) => { crove_post: agent, post: agent, }, + appResources, }; const server = new MCPServer(serverConfig); @@ -87,24 +114,61 @@ export const startMcp = async (app: INestApplication) => { name: `${brand.name} MCP`, version: '1.0.0', tools, + appResources, }); const claudeOauthServer = new MCPServer({ name: `${brand.name} MCP`, version: '1.0.0', tools: claudeTools, + appResources, }); - const oauthResource = new URL('/mcp-oauth', process.env.NEXT_PUBLIC_BACKEND_URL!).toString(); + // Two RFC 8414 path-based issuers backed by the same endpoints and code. + // /mcp-oauth-chatgpt is what the ChatGPT app submission points at: it does + // not advertise a registration_endpoint, so the OpenAI builder defaults to + // the pre-defined client credentials instead of DCR (a fresh path, because + // OpenAI kept serving its cached copy of the old /mcp-oauth metadata). + // /mcp-oauth-dynamic keeps DCR for Claude, Cursor and every other + // self-registering client + const authorizationServers: Record = { + '/mcp-oauth-chatgpt': { + issuer: new URL('/mcp-oauth-chatgpt', process.env.NEXT_PUBLIC_BACKEND_URL!).toString(), + registration: false, + }, + '/mcp-oauth-dynamic': { + issuer: new URL('/mcp-oauth-dynamic', process.env.NEXT_PUBLIC_BACKEND_URL!).toString(), + registration: true, + }, + }; + + const authorizationServerMetadata = (server: { issuer: string; registration: boolean }) => ({ + // RFC 8414: metadata served at /.well-known/oauth-authorization-server/ + // belongs to the path-based issuer / + issuer: server.issuer, + authorization_endpoint: `${process.env.FRONTEND_URL}/oauth/authorize`, + token_endpoint: `${backendUrl}/oauth/token`, + ...(server.registration && { + registration_endpoint: `${backendUrl}/oauth/register`, + }), + ...(enableOidcEmailClaims && { + userinfo_endpoint: `${backendUrl}/oauth/userinfo`, + }), + response_types_supported: ['code'], + grant_types_supported: ['authorization_code'], + token_endpoint_auth_methods_supported: ['client_secret_basic', 'client_secret_post', 'none'], + code_challenge_methods_supported: ['S256'], + scopes_supported: oauthScopes, + }); - // Every OAuth-protected MCP path is its own RFC 9728 protected resource, but - // they all share the /mcp-oauth authorization server (the token endpoint - // ignores the RFC 8707 resource param, so one AS covers all of them) - const createResourceMiddleware = (mcpPath: string) => + // Every OAuth-protected MCP path is its own RFC 9728 protected resource + // (the token endpoint ignores the RFC 8707 resource param, so the issuers + // above cover all of them) + const createResourceMiddleware = (mcpPath: string, authorizationServer: string) => createOAuthMiddleware({ oauth: { resource: new URL(mcpPath, process.env.NEXT_PUBLIC_BACKEND_URL!).toString(), - authorizationServers: [oauthResource], + authorizationServers: [authorizationServers[authorizationServer].issuer], scopesSupported: oauthScopes, validateToken: async (token: string) => { const org = await resolveAuth(token); @@ -121,13 +185,15 @@ export const startMcp = async (app: INestApplication) => { string, { middleware: ReturnType; mcpServer: MCPServer } > = { - // ChatGPT app submission - '/mcp-oauth': { middleware: createResourceMiddleware('/mcp-oauth'), mcpServer: oauthServer }, + // ChatGPT app submission (pre-defined client credentials, no DCR) + '/mcp-oauth-chatgpt': { middleware: createResourceMiddleware('/mcp-oauth-chatgpt', '/mcp-oauth-chatgpt'), mcpServer: oauthServer }, + // Former ChatGPT path, kept for connectors that were created against it + '/mcp-oauth': { middleware: createResourceMiddleware('/mcp-oauth', '/mcp-oauth-dynamic'), mcpServer: oauthServer }, // Claude connector directory submission - '/mcp-oauth-claude': { middleware: createResourceMiddleware('/mcp-oauth-claude'), mcpServer: claudeOauthServer }, + '/mcp-oauth-claude': { middleware: createResourceMiddleware('/mcp-oauth-claude', '/mcp-oauth-dynamic'), mcpServer: claudeOauthServer }, // Clients that register themselves through DCR (/oauth/register) - not // directory-reviewed, so they get the full toolset (media generation included) - '/mcp-oauth-dynamic': { middleware: createResourceMiddleware('/mcp-oauth-dynamic'), mcpServer: oauthServer }, + '/mcp-oauth-dynamic': { middleware: createResourceMiddleware('/mcp-oauth-dynamic', '/mcp-oauth-dynamic'), mcpServer: oauthServer }, }; if (process.env.OPENAI_APP_CHALLANGE) { @@ -152,7 +218,8 @@ export const startMcp = async (app: INestApplication) => { }); app.use('/.well-known/oauth-authorization-server', async (req: Request, res: Response, next: () => void) => { - if (req.path !== '/mcp-oauth') { + const server = authorizationServers[req.path]; + if (!server) { next(); return; } @@ -167,26 +234,12 @@ export const startMcp = async (app: INestApplication) => { } res.setHeader('Content-Type', 'application/json'); res.setHeader('Cache-Control', 'max-age=3600'); - res.json({ - // RFC 8414: metadata served at /.well-known/oauth-authorization-server/mcp-oauth - // belongs to the path-based issuer /mcp-oauth - issuer: oauthResource, - authorization_endpoint: `${process.env.FRONTEND_URL}/oauth/authorize`, - token_endpoint: `${process.env.NEXT_PUBLIC_OVERRIDE_BACKEND_URL || process.env.NEXT_PUBLIC_BACKEND_URL}/oauth/token`, - registration_endpoint: `${process.env.NEXT_PUBLIC_OVERRIDE_BACKEND_URL || process.env.NEXT_PUBLIC_BACKEND_URL}/oauth/register`, - ...(enableOidcEmailClaims && { - userinfo_endpoint: `${process.env.NEXT_PUBLIC_OVERRIDE_BACKEND_URL || process.env.NEXT_PUBLIC_BACKEND_URL}/oauth/userinfo`, - }), - response_types_supported: ['code'], - grant_types_supported: ['authorization_code'], - token_endpoint_auth_methods_supported: ['client_secret_post', 'none'], - code_challenge_methods_supported: ['S256'], - scopes_supported: oauthScopes, - }); + res.json(authorizationServerMetadata(server)); }); app.use('/.well-known/openid-configuration', async (req: Request, res: Response, next: () => void) => { - if (req.path !== '/mcp-oauth' || !enableOidcEmailClaims) { + const server = authorizationServers[req.path]; + if (!server || !enableOidcEmailClaims) { next(); return; } @@ -202,16 +255,7 @@ export const startMcp = async (app: INestApplication) => { res.setHeader('Content-Type', 'application/json'); res.setHeader('Cache-Control', 'max-age=3600'); res.json({ - issuer: oauthResource, - authorization_endpoint: `${process.env.FRONTEND_URL}/oauth/authorize`, - token_endpoint: `${process.env.NEXT_PUBLIC_OVERRIDE_BACKEND_URL || process.env.NEXT_PUBLIC_BACKEND_URL}/oauth/token`, - registration_endpoint: `${process.env.NEXT_PUBLIC_OVERRIDE_BACKEND_URL || process.env.NEXT_PUBLIC_BACKEND_URL}/oauth/register`, - userinfo_endpoint: `${process.env.NEXT_PUBLIC_OVERRIDE_BACKEND_URL || process.env.NEXT_PUBLIC_BACKEND_URL}/oauth/userinfo`, - response_types_supported: ['code'], - grant_types_supported: ['authorization_code'], - token_endpoint_auth_methods_supported: ['client_secret_post', 'none'], - code_challenge_methods_supported: ['S256'], - scopes_supported: oauthScopes, + ...authorizationServerMetadata(server), subject_types_supported: ['public'], claims_supported: ['sub', 'email', 'email_verified'], }); diff --git a/libraries/nestjs-libraries/src/chat/tools/tool.list.ts b/libraries/nestjs-libraries/src/chat/tools/tool.list.ts index dc5fc98934..c1c5a4bf7d 100644 --- a/libraries/nestjs-libraries/src/chat/tools/tool.list.ts +++ b/libraries/nestjs-libraries/src/chat/tools/tool.list.ts @@ -11,6 +11,9 @@ import { GroupListTool } from '@gitroom/nestjs-libraries/chat/tools/group.list.t import { UploadFromUrlTool } from '@gitroom/nestjs-libraries/chat/tools/upload.from.url.tool'; import { PostsListTool } from '@gitroom/nestjs-libraries/chat/tools/posts.list.tool'; import { PostSettingsTool } from '@gitroom/nestjs-libraries/chat/tools/post.settings.tool'; +import { UploadWidgetTool } from '@gitroom/nestjs-libraries/chat/tools/upload.widget.tool'; +import { UploadWidgetTicketTool } from '@gitroom/nestjs-libraries/chat/tools/upload.widget.ticket.tool'; +import { UploadWidgetStatusTool } from '@gitroom/nestjs-libraries/chat/tools/upload.widget.status.tool'; export const toolList = [ IntegrationListTool, @@ -26,4 +29,7 @@ export const toolList = [ VideoStatusTool, GenerateImageTool, UploadFromUrlTool, + UploadWidgetTool, + UploadWidgetTicketTool, + UploadWidgetStatusTool, ]; diff --git a/libraries/nestjs-libraries/src/chat/tools/upload.from.url.tool.ts b/libraries/nestjs-libraries/src/chat/tools/upload.from.url.tool.ts index 3d99c365e3..7b7fb4dbb1 100644 --- a/libraries/nestjs-libraries/src/chat/tools/upload.from.url.tool.ts +++ b/libraries/nestjs-libraries/src/chat/tools/upload.from.url.tool.ts @@ -3,30 +3,10 @@ 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 { getMaxSize } from '@gitroom/nestjs-libraries/upload/custom.upload.validation'; import { checkAuth } from '@gitroom/nestjs-libraries/chat/auth.context'; -import { ssrfSafeDispatcher } from '@gitroom/nestjs-libraries/dtos/webhooks/ssrf.safe.dispatcher'; -import { Readable } from 'stream'; -// eslint-disable-next-line @typescript-eslint/no-var-requires -const { fileTypeFromBuffer } = require('file-type'); - -// Same allow-list as the public API /upload-from-url route. -const ALLOWED_MIME = new Set([ - 'image/jpeg', - 'image/png', - 'image/gif', - 'image/webp', - 'image/avif', - 'image/bmp', - 'image/tiff', - 'video/mp4', -]); @Injectable() export class UploadFromUrlTool implements AgentToolInterface { - private storage = UploadFactory.createStorage(); - constructor(private _mediaService: MediaService) {} name = 'uploadFromUrlTool'; @@ -68,75 +48,27 @@ so the attachment passes the upload-domain validation. Returns the hosted media (context?.requestContext as any)?.get('organization') as string ); - const response = await fetch(inputData.url, { - // @ts-ignore — undici option, not in lib.dom fetch types - dispatcher: ssrfSafeDispatcher, - }); - - if (!response.ok) { - return { error: 'Failed to fetch URL' }; - } - - // Guard against OOM: bail out before buffering the whole body into - // memory. Content-Length may be absent or wrong, so we re-check the - // real size after download too. The type isn't known yet (sniffed - // below), so the pre-check uses the largest allowed cap (video). - const maxDownloadSize = getMaxSize('video/mp4'); - const declaredSize = Number(response.headers.get('content-length')); - if (declaredSize && declaredSize > maxDownloadSize) { - return { - error: `File is too large: ${declaredSize} bytes (max ${maxDownloadSize} bytes).`, - }; - } - - const buffer = Buffer.from(await response.arrayBuffer()); - const detected = await fileTypeFromBuffer(buffer); - if (!detected || !ALLOWED_MIME.has(detected.mime)) { - return { error: 'Unsupported file type.' }; - } - - const maxSize = getMaxSize(detected.mime); - if (buffer.length > maxSize) { - return { - error: `File is too large: ${buffer.length} bytes (max ${maxSize} bytes).`, - }; - } - - const getFile = await this.storage.uploadFile({ - buffer, - mimetype: detected.mime, - size: buffer.length, - path: '', - fieldname: '', - destination: '', - stream: new Readable(), - filename: '', - originalname: `upload.${detected.ext}`, - encoding: '', - }); - - return await this._mediaService.saveFile( - org.id, - getFile.originalname, - getFile.path - ); + return await this._mediaService.uploadFromUrl(org.id, inputData.url); } catch (err) { // undici's fetch rejects with a generic TypeError('fetch failed') // and hides the real reason (DNS, TLS, SSRF block, ...) in - // err.cause, so surface it for the agent. Error.cause isn't in the - // es2020 lib typings this repo compiles against, hence the cast. - const cause = - err instanceof Error - ? (err as Error & { cause?: unknown }).cause - : undefined; - const causeText = - cause instanceof Error && cause.message - ? ` (${cause.message})` - : ''; + // err.cause, which the service wraps once more, so walk the chain + // and surface it for the agent. Error.cause isn't in the es2020 + // lib typings this repo compiles against, hence the cast + const message = + err instanceof Error ? err.message : 'Unexpected error'; + const causes: string[] = []; + let cause = (err as Error & { cause?: unknown })?.cause; + while (cause instanceof Error) { + if (cause.message) { + causes.push(cause.message); + } + cause = (cause as Error & { cause?: unknown }).cause; + } + const causeText = causes.length ? ` (${causes.join(': ')})` : ''; + return { - error: `Failed to upload media from URL: ${ - err instanceof Error ? err.message : 'Unexpected error' - }${causeText}`, + error: `Failed to upload media from URL: ${message}${causeText}`, }; } }, diff --git a/libraries/nestjs-libraries/src/chat/tools/upload.widget.status.tool.ts b/libraries/nestjs-libraries/src/chat/tools/upload.widget.status.tool.ts new file mode 100644 index 0000000000..ce32d12597 --- /dev/null +++ b/libraries/nestjs-libraries/src/chat/tools/upload.widget.status.tool.ts @@ -0,0 +1,72 @@ +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 { checkAuth } from '@gitroom/nestjs-libraries/chat/auth.context'; + +@Injectable() +export class UploadWidgetStatusTool implements AgentToolInterface { + constructor(private _mediaService: MediaService) {} + name = 'uploadWidgetStatusTool'; + mcpOnly = true; + + run() { + return createTool({ + id: 'uploadWidgetStatusTool', + description: `List the media the user uploaded with the upload widget, using the sessionId returned by uploadWidgetTool. +An empty list means the user did not upload anything yet. A media with the status "processing" is still being prepared: wait about 10 seconds and call again. +A media with the status "ready" can be used as a post attachment with its { id, path }.`, + mcp: { + annotations: { + title: 'Upload Widget Status', + readOnlyHint: true, + destructiveHint: false, + idempotentHint: true, + openWorldHint: false, + }, + }, + inputSchema: z.object({ + sessionId: z + .string() + .describe('The sessionId returned by uploadWidgetTool'), + }), + outputSchema: z.object({ + media: z + .array( + z.object({ + id: z.string(), + path: z.string(), + status: z.string(), + error: z.string().optional(), + }) + ) + .optional(), + error: z.string().optional(), + }), + execute: async (inputData, context) => { + checkAuth(inputData, context); + try { + const org = JSON.parse( + (context?.requestContext as any)?.get('organization') as string + ); + const media = await this._mediaService.getUploadSession( + org.id, + inputData.sessionId + ); + return { + media: media.map((p) => ({ + id: p.id, + path: p.path, + status: p.status, + ...(p.processingError ? { error: p.processingError } : {}), + })), + }; + } catch (err) { + const message = err instanceof Error ? err.message : String(err); + return { error: `Upload session lookup failed: ${message}` }; + } + }, + }); + } +} diff --git a/libraries/nestjs-libraries/src/chat/tools/upload.widget.ticket.tool.ts b/libraries/nestjs-libraries/src/chat/tools/upload.widget.ticket.tool.ts new file mode 100644 index 0000000000..f716a2126f --- /dev/null +++ b/libraries/nestjs-libraries/src/chat/tools/upload.widget.ticket.tool.ts @@ -0,0 +1,63 @@ +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 { checkAuth } from '@gitroom/nestjs-libraries/chat/auth.context'; + +// Meant for the upload widget itself: visibility "app" asks the host to keep it +// away from the model, so the upload credential stays out of the conversation. +// It is a hint only - the ticket is still scoped to the caller's own organization +@Injectable() +export class UploadWidgetTicketTool implements AgentToolInterface { + constructor(private _mediaService: MediaService) {} + name = 'uploadWidgetTicketTool'; + mcpOnly = true; + + run() { + return createTool({ + id: 'uploadWidgetTicketTool', + description: `Used by the upload widget to get a short-lived upload ticket for the sessionId returned by uploadWidgetTool.`, + mcp: { + annotations: { + title: 'Upload Widget Ticket', + readOnlyHint: false, + destructiveHint: false, + idempotentHint: false, + openWorldHint: false, + }, + _meta: { + ui: { + visibility: ['app'], + }, + }, + }, + inputSchema: z.object({ + sessionId: z + .string() + .describe('The sessionId returned by uploadWidgetTool'), + }), + outputSchema: z.object({ + ticket: z.string().optional(), + error: z.string().optional(), + }), + execute: async (inputData, context) => { + checkAuth(inputData, context); + try { + const org = JSON.parse( + (context?.requestContext as any)?.get('organization') as string + ); + return { + ticket: await this._mediaService.createUploadTicket( + org.id, + inputData.sessionId + ), + }; + } catch (err) { + const message = err instanceof Error ? err.message : String(err); + return { error: `Failed to create an upload ticket: ${message}` }; + } + }, + }); + } +} diff --git a/libraries/nestjs-libraries/src/chat/tools/upload.widget.tool.ts b/libraries/nestjs-libraries/src/chat/tools/upload.widget.tool.ts new file mode 100644 index 0000000000..826b927ad2 --- /dev/null +++ b/libraries/nestjs-libraries/src/chat/tools/upload.widget.tool.ts @@ -0,0 +1,57 @@ +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 { checkAuth } from '@gitroom/nestjs-libraries/chat/auth.context'; +import { UPLOAD_WIDGET_URI } from '@gitroom/nestjs-libraries/chat/ui/upload.widget'; + +@Injectable() +export class UploadWidgetTool implements AgentToolInterface { + constructor(private _mediaService: MediaService) {} + name = 'uploadWidgetTool'; + mcpOnly = true; + + run() { + return createTool({ + id: 'uploadWidgetTool', + description: `Show the user an upload widget to add images or videos from their own device to the media library. +Use this when the user wants to attach a local file to a post. When the media is already available on a public URL, use uploadFromUrlTool instead. +The widget is only displayed by apps that support MCP Apps (interactive UI); in any other app no widget appears and uploadFromUrlTool with a public URL is the way to add media. +Returns a sessionId: the files the user uploads are reported in the conversation, and can also be read with uploadWidgetStatusTool.`, + mcp: { + annotations: { + title: 'Upload Media From Device', + readOnlyHint: false, + destructiveHint: false, + idempotentHint: false, + openWorldHint: false, + }, + _meta: { + ui: { + resourceUri: UPLOAD_WIDGET_URI, + }, + }, + }, + inputSchema: z.object({}), + outputSchema: z.object({ + sessionId: z.string().optional(), + error: z.string().optional(), + }), + execute: async (inputData, context) => { + checkAuth(inputData, context); + try { + const org = JSON.parse( + (context?.requestContext as any)?.get('organization') as string + ); + return { + sessionId: await this._mediaService.createUploadSession(org.id), + }; + } catch (err) { + const message = err instanceof Error ? err.message : String(err); + return { error: `Failed to open the upload widget: ${message}` }; + } + }, + }); + } +} diff --git a/libraries/nestjs-libraries/src/chat/ui/upload.widget.ts b/libraries/nestjs-libraries/src/chat/ui/upload.widget.ts new file mode 100644 index 0000000000..b25e709c84 --- /dev/null +++ b/libraries/nestjs-libraries/src/chat/ui/upload.widget.ts @@ -0,0 +1,318 @@ +import { getMaxSize } from '@gitroom/nestjs-libraries/upload/custom.upload.validation'; + +const megabytes = (mime: string) => Math.floor(getMaxSize(mime) / 1024 / 1024); + +export const UPLOAD_WIDGET_URI = 'ui://postiz/upload'; + +// MCP Apps (SEP-1865) widget: a single self-contained HTML document rendered by +// the host inside a sandboxed iframe. It can't load our bundles or cookies, so +// it talks to the host over postMessage JSON-RPC and to the backend over fetch: +// uploadWidgetTool result (sessionId) -> uploadWidgetTicketTool (ticket, through +// the host) -> POST /media-widget/upload -> report the media back to the model. +// The upload is a plain multipart fetch on purpose: no custom headers and no +// XHR progress listeners, so the browser never sends a CORS preflight +export const uploadWidgetHtml = (backendUrl: string) => ` + + + + + + + + +
+
+ + +`; diff --git a/libraries/nestjs-libraries/src/database/prisma/admin-stats/admin-stats.repository.ts b/libraries/nestjs-libraries/src/database/prisma/admin-stats/admin-stats.repository.ts index 7e875f213f..fded269d23 100644 --- a/libraries/nestjs-libraries/src/database/prisma/admin-stats/admin-stats.repository.ts +++ b/libraries/nestjs-libraries/src/database/prisma/admin-stats/admin-stats.repository.ts @@ -6,6 +6,15 @@ export interface StatsParams { from: Date; to: Date; unknownOnly?: boolean; + organizationId?: string; + includeDeleted?: boolean; +} + +export interface OrgActivityParams { + from: Date; + to: Date; + organizationId: string; + includeDeleted?: boolean; } // Unknown errors are stored as the serialized error payload, e.g. @@ -17,6 +26,24 @@ interface PerSocial { count: number; } +interface PerState { + state: string; + count: number; +} + +export interface OrgActivityResponse { + from: string; + to: string; + organizationId: string; + errors: { total: number; perSocial: PerSocial[] }; + posts: { total: number; perSocial: PerSocial[] }; + connectedInRange: { total: number; perSocial: PerSocial[] }; + channels: { total: number; perSocial: PerSocial[] }; + postsByState: PerState[]; + firstActivityAt: string | null; + lastActivityAt: string | null; +} + export interface StatsResponse { from: string; to: string; @@ -27,6 +54,7 @@ export interface StatsResponse { scheduledAccounts: { total: number; perSocial: PerSocial[] }; publishingChannels: { total: number; perSocial: PerSocial[] }; scheduledChannels: { total: number; perSocial: PerSocial[] }; + activeOrgsBySource: { total: number; perSocial: PerSocial[] }; } const sortDesc = (list: PerSocial[]) => @@ -46,6 +74,9 @@ export class AdminStatsRepository { ...(params.unknownOnly ? { message: { contains: UNKNOWN_ERROR_TOKEN } } : {}), + ...(params.organizationId + ? { organizationId: params.organizationId } + : {}), }; const [total, grouped] = await Promise.all([ @@ -74,8 +105,11 @@ export class AdminStatsRepository { const where: Prisma.PostWhereInput = { state: 'PUBLISHED', parentPostId: null, - deletedAt: null, + ...(params.includeDeleted ? {} : { deletedAt: null }), publishDate: { gte: params.from, lte: params.to }, + ...(params.organizationId + ? { organizationId: params.organizationId } + : {}), }; const [total, grouped] = await Promise.all([ @@ -212,10 +246,50 @@ export class AdminStatsRepository { }; } + // Distinct organizations with at least one top-level scheduled, published + // or failed post in the range, per creation source (web, API, MCP, ...). + // The total is distinct across all sources combined, not a summation. + private async sourceStats(params: StatsParams) { + const where: Prisma.PostWhereInput = { + parentPostId: null, + deletedAt: null, + publishDate: { gte: params.from, lte: params.to }, + state: { in: ['QUEUE', 'PUBLISHED', 'ERROR'] }, + }; + + const groups = await this._post.model.post.groupBy({ + by: ['organizationId', 'creationMethod'], + where, + }); + + const allOrgs = new Set(); + const orgsBySource = new Map>(); + for (const g of groups) { + if (!orgsBySource.has(g.creationMethod)) { + orgsBySource.set(g.creationMethod, new Set()); + } + orgsBySource.get(g.creationMethod)!.add(g.organizationId); + allOrgs.add(g.organizationId); + } + + return { + total: allOrgs.size, + perSocial: sortDesc( + [...orgsBySource.entries()].map(([provider, orgs]) => ({ + provider, + count: orgs.size, + })) + ), + }; + } + private async connectedStats(params: StatsParams) { const where: Prisma.IntegrationWhereInput = { - deletedAt: null, + ...(params.includeDeleted ? {} : { deletedAt: null }), createdAt: { gte: params.from, lte: params.to }, + ...(params.organizationId + ? { organizationId: params.organizationId } + : {}), }; const [total, grouped] = await Promise.all([ @@ -238,14 +312,108 @@ export class AdminStatsRepository { }; } - async getStats(params: StatsParams): Promise { - const [errors, posts, accounts, connected] = await Promise.all([ - this.errorStats(params), - this.postStats(params), - this.accountStats(params), - this.connectedStats(params), + private async postStateStats(params: OrgActivityParams) { + const grouped = await this._post.model.post.groupBy({ + by: ['state'], + where: { + organizationId: params.organizationId, + parentPostId: null, + ...(params.includeDeleted ? {} : { deletedAt: null }), + publishDate: { gte: params.from, lte: params.to }, + }, + _count: { _all: true }, + }); + + return grouped + .map((g) => ({ state: g.state as string, count: g._count._all })) + .sort((a, b) => b.count - a.count || a.state.localeCompare(b.state)); + } + + private async currentChannelStats( + organizationId: string, + includeDeleted?: boolean + ) { + const where: Prisma.IntegrationWhereInput = { + organizationId, + ...(includeDeleted ? {} : { deletedAt: null }), + }; + + const [total, grouped] = await Promise.all([ + this._integration.model.integration.count({ where }), + this._integration.model.integration.groupBy({ + by: ['providerIdentifier'], + where, + _count: { _all: true }, + }), ]); + return { + total, + perSocial: sortDesc( + grouped.map((g) => ({ + provider: g.providerIdentifier, + count: g._count._all, + })) + ), + }; + } + + private async activityRange( + organizationId: string, + includeDeleted?: boolean + ) { + const { _min, _max } = await this._post.model.post.aggregate({ + where: { + organizationId, + state: 'PUBLISHED', + ...(includeDeleted ? {} : { deletedAt: null }), + }, + _min: { publishDate: true }, + _max: { publishDate: true }, + }); + + return { + firstActivityAt: _min.publishDate?.toISOString() || null, + lastActivityAt: _max.publishDate?.toISOString() || null, + }; + } + + async getOrgActivity( + params: OrgActivityParams + ): Promise { + const [errors, posts, connectedInRange, channels, postsByState, activity] = + await Promise.all([ + this.errorStats(params), + this.postStats(params), + this.connectedStats(params), + this.currentChannelStats(params.organizationId, params.includeDeleted), + this.postStateStats(params), + this.activityRange(params.organizationId, params.includeDeleted), + ]); + + return { + from: params.from.toISOString(), + to: params.to.toISOString(), + organizationId: params.organizationId, + errors, + posts, + connectedInRange, + channels, + postsByState, + ...activity, + }; + } + + async getStats(params: StatsParams): Promise { + const [errors, posts, accounts, connected, activeOrgsBySource] = + await Promise.all([ + this.errorStats(params), + this.postStats(params), + this.accountStats(params), + this.connectedStats(params), + this.sourceStats(params), + ]); + return { from: params.from.toISOString(), to: params.to.toISOString(), @@ -256,6 +424,7 @@ export class AdminStatsRepository { scheduledAccounts: accounts.scheduledAccounts, publishingChannels: accounts.publishingChannels, scheduledChannels: accounts.scheduledChannels, + activeOrgsBySource, }; } } diff --git a/libraries/nestjs-libraries/src/database/prisma/admin-stats/admin-stats.service.ts b/libraries/nestjs-libraries/src/database/prisma/admin-stats/admin-stats.service.ts index e1af176bb6..62c024c3a5 100644 --- a/libraries/nestjs-libraries/src/database/prisma/admin-stats/admin-stats.service.ts +++ b/libraries/nestjs-libraries/src/database/prisma/admin-stats/admin-stats.service.ts @@ -1,6 +1,7 @@ import { Injectable } from '@nestjs/common'; import { AdminStatsRepository, + OrgActivityParams, StatsParams, } from '@gitroom/nestjs-libraries/database/prisma/admin-stats/admin-stats.repository'; @@ -11,4 +12,8 @@ export class AdminStatsService { getStats(params: StatsParams) { return this._adminStatsRepository.getStats(params); } + + getOrgActivity(params: OrgActivityParams) { + return this._adminStatsRepository.getOrgActivity(params); + } } diff --git a/libraries/nestjs-libraries/src/database/prisma/integrations/integration.repository.ts b/libraries/nestjs-libraries/src/database/prisma/integrations/integration.repository.ts index aa241ff24c..37274a6f37 100644 --- a/libraries/nestjs-libraries/src/database/prisma/integrations/integration.repository.ts +++ b/libraries/nestjs-libraries/src/database/prisma/integrations/integration.repository.ts @@ -2,7 +2,7 @@ import { PrismaRepository } from '@gitroom/nestjs-libraries/database/prisma/pris import { Injectable } from '@nestjs/common'; import { createHash } from 'crypto'; import dayjs from 'dayjs'; -import { Integration } from '@prisma/client'; +import { Integration, Prisma } from '@prisma/client'; import { makeId } from '@gitroom/nestjs-libraries/services/make.is'; import { IntegrationTimeDto } from '@gitroom/nestjs-libraries/dtos/integrations/integration.time.dto'; import { UploadFactory } from '@gitroom/nestjs-libraries/upload/upload.factory'; @@ -560,6 +560,152 @@ export class IntegrationRepository { }); } + private async latestPostsFor( + org: string, + state: 'PUBLISHED' | 'ERROR', + field: 'publishDate' | 'updatedAt', + options: { topLevelOnly: boolean; includeDeleted: boolean }, + groups: { integrationId: string; date: Date | null }[] + ) { + const matches = groups.filter((group) => group.date); + + if (!matches.length) { + return []; + } + + return this._posts.model.post.findMany({ + where: { + organizationId: org, + state, + ...(options.includeDeleted ? {} : { deletedAt: null }), + ...(options.topLevelOnly ? { parentPostId: null } : {}), + OR: matches.map( + (group) => + ({ + integrationId: group.integrationId, + [field]: group.date, + } as Prisma.PostWhereInput) + ), + }, + orderBy: { + id: 'asc', + }, + select: { + id: true, + integrationId: true, + publishDate: true, + updatedAt: true, + releaseURL: true, + error: true, + }, + }); + } + + private firstPerIntegration(posts: T[]) { + const byIntegration = new Map(); + + for (const post of posts) { + if (!byIntegration.has(post.integrationId)) { + byIntegration.set(post.integrationId, post); + } + } + + return byIntegration; + } + + async getChannelHealth(org: string, includeDeleted = false) { + const [integrations, lastPublished, lastErrored] = await Promise.all([ + this._integration.model.integration.findMany({ + where: { + organizationId: org, + }, + orderBy: { + createdAt: 'asc', + }, + select: { + id: true, + internalId: true, + name: true, + providerIdentifier: true, + type: true, + disabled: true, + refreshNeeded: true, + inBetweenSteps: true, + tokenExpiration: true, + deletedAt: true, + createdAt: true, + updatedAt: true, + customer: { + select: { + id: true, + name: true, + }, + }, + }, + }), + this._posts.model.post.groupBy({ + by: ['integrationId'], + where: { + organizationId: org, + state: 'PUBLISHED', + ...(includeDeleted ? {} : { deletedAt: null }), + parentPostId: null, + }, + _max: { publishDate: true }, + }), + this._posts.model.post.groupBy({ + by: ['integrationId'], + where: { + organizationId: org, + state: 'ERROR', + ...(includeDeleted ? {} : { deletedAt: null }), + }, + _max: { updatedAt: true }, + }), + ]); + + const [publishedPosts, erroredPosts] = await Promise.all([ + this.latestPostsFor( + org, + 'PUBLISHED', + 'publishDate', + { topLevelOnly: true, includeDeleted }, + lastPublished.map((group) => ({ + integrationId: group.integrationId, + date: group._max.publishDate, + })) + ), + this.latestPostsFor( + org, + 'ERROR', + 'updatedAt', + { topLevelOnly: false, includeDeleted }, + lastErrored.map((group) => ({ + integrationId: group.integrationId, + date: group._max.updatedAt, + })) + ), + ]); + + const publishedByIntegration = this.firstPerIntegration(publishedPosts); + const erroredByIntegration = this.firstPerIntegration(erroredPosts); + + return integrations.map((integration) => { + const published = publishedByIntegration.get(integration.id); + const errored = erroredByIntegration.get(integration.id); + + return { + ...integration, + lastPublishedAt: published?.publishDate || null, + lastPublishedPostId: published?.id || null, + lastPublishedUrl: published?.releaseURL || null, + lastErrorAt: errored?.updatedAt || null, + lastErrorPostId: errored?.id || null, + lastError: errored?.error || null, + }; + }); + } + async disableChannel(org: string, id: string) { await this._integration.model.integration.update({ where: { diff --git a/libraries/nestjs-libraries/src/database/prisma/integrations/integration.service.ts b/libraries/nestjs-libraries/src/database/prisma/integrations/integration.service.ts index ff23bc540a..8e4bf24c1f 100644 --- a/libraries/nestjs-libraries/src/database/prisma/integrations/integration.service.ts +++ b/libraries/nestjs-libraries/src/database/prisma/integrations/integration.service.ts @@ -155,6 +155,10 @@ export class IntegrationService { return this._integrationRepository.getIntegrationsList(org); } + getChannelHealth(org: string, includeDeleted = false) { + return this._integrationRepository.getChannelHealth(org, includeDeleted); + } + getIntegrationForOrder(id: string, order: string, user: string, org: string) { return this._integrationRepository.getIntegrationForOrder( id, diff --git a/libraries/nestjs-libraries/src/database/prisma/media/media.repository.ts b/libraries/nestjs-libraries/src/database/prisma/media/media.repository.ts index 208def20f6..7f05d20b39 100644 --- a/libraries/nestjs-libraries/src/database/prisma/media/media.repository.ts +++ b/libraries/nestjs-libraries/src/database/prisma/media/media.repository.ts @@ -25,6 +25,53 @@ export class MediaRepository { path: true, thumbnail: true, alt: true, + status: true, + }, + }); + } + + startProcessing(org: string, id: string) { + return this._media.model.media.update({ + where: { id, organizationId: org }, + data: { status: 'processing', processingError: null }, + select: { id: true, status: true }, + }); + } + + finishProcessing( + org: string, + id: string, + data: { name?: string; path?: string; fileSize?: number; error?: string } + ) { + return this._media.model.media.update({ + where: { id, organizationId: org }, + data: { + ...(data.name ? { name: data.name } : {}), + ...(data.path ? { path: data.path } : {}), + ...(data.fileSize ? { fileSize: data.fileSize } : {}), + status: data.error ? 'failed' : 'ready', + processingError: data.error || null, + }, + select: { id: true, status: true }, + }); + } + + getMediaStatus(org: string, id: string) { + return this._media.model.media.findFirst({ + where: { + id, + organizationId: org, + deletedAt: null, + }, + select: { + id: true, + name: true, + originalName: true, + path: true, + thumbnail: true, + alt: true, + status: true, + processingError: true, }, }); } @@ -89,6 +136,7 @@ export class MediaRepository { id: org, }, deletedAt: null, + status: { not: 'processing' }, ...searchFilter, }, }; @@ -97,6 +145,8 @@ export class MediaRepository { where: { organizationId: org, deletedAt: null, + // still being normalized: it shows up once the workflow releases it + status: { not: 'processing' }, ...searchFilter, }, orderBy: { 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 c56534b85e..bdeaf1f8da 100644 --- a/libraries/nestjs-libraries/src/database/prisma/media/media.service.ts +++ b/libraries/nestjs-libraries/src/database/prisma/media/media.service.ts @@ -1,4 +1,4 @@ -import { HttpException, Injectable } from '@nestjs/common'; +import { BadRequestException, HttpException, Injectable } from '@nestjs/common'; import { MediaRepository } from '@gitroom/nestjs-libraries/database/prisma/media/media.repository'; import { OpenaiService } from '@gitroom/nestjs-libraries/openai/openai.service'; import { generationError } from '@gitroom/nestjs-libraries/openai/generation.error'; @@ -17,10 +17,74 @@ import { TemporalService } from 'nestjs-temporal-core'; import { TypedSearchAttributes } from '@temporalio/common'; import { organizationId } from '@gitroom/nestjs-libraries/temporal/temporal.search.attribute'; import { makeId } from '@gitroom/nestjs-libraries/services/make.is'; +import { MediaProcessorJob } from '@gitroom/nestjs-libraries/upload/media.processor.interface'; +import { extname } from 'path'; +import { randomBytes } from 'crypto'; +import { ioRedis } from '@gitroom/nestjs-libraries/redis/redis.service'; +import { ssrfSafeDispatcher } from '@gitroom/nestjs-libraries/dtos/webhooks/ssrf.safe.dispatcher'; +import { + getMaxSize, + uploadStreamToStorage, +} from '@gitroom/nestjs-libraries/upload/custom.upload.validation'; + +// What every upload is normalized to before a provider ever sees it. The +// service applies exactly these, so a platform-specific need belongs in the +// provider, not here. +const VIDEO_RULES: MediaProcessorJob['rules'] = { + short_side_min: 1080, + short_side_max: 1080, + long_side_max: 1920, + video: { + container: 'mp4', + video_codec: 'h264', + profile: 'high', + pixel_format: 'yuv420p', + fps_max: 60, + quality: 23, + audio_codec: 'aac', + audio_bitrate_kbps: 128, + audio_sample_rate: 48000, + faststart: true, + }, +}; +const IMAGE_RULES: MediaProcessorJob['rules'] = { + short_side_min: 1, + short_side_max: 1080, + long_side_max: 1920, + image: { jpeg_quality: 90, keep_format: true }, +}; +const LIMITS: MediaProcessorJob['limits'] = { + max_input_bytes: 1073741824, + max_duration_seconds: 900, + timeout_seconds: 1200, +}; +// Extension of the normalized file and the content type the presigned PUT is +// minted for; anything else (gif, avif, ...) is stored as uploaded +const PROCESSABLE: Record< + string, + { type: 'video' | 'image'; ext: string; contentType: string } +> = { + '.mp4': { type: 'video', ext: 'mp4', contentType: 'video/mp4' }, + '.mov': { type: 'video', ext: 'mp4', contentType: 'video/mp4' }, + '.jpg': { type: 'image', ext: 'jpg', contentType: 'image/jpeg' }, + '.jpeg': { type: 'image', ext: 'jpg', contentType: 'image/jpeg' }, + '.png': { type: 'image', ext: 'png', contentType: 'image/png' }, + '.webp': { type: 'image', ext: 'webp', contentType: 'image/webp' }, +}; +// Formats a post can carry without normalization; anything else only exists to be converted +const USABLE_AS_IS = new Set([ + '.mp4', + '.jpg', + '.jpeg', + '.png', + '.webp', + '.gif', +]); @Injectable() export class MediaService { private storage = UploadFactory.createStorage(); + private processor = UploadFactory.createProcessor(); constructor( private _mediaRepository: MediaRepository, @@ -62,8 +126,336 @@ export class MediaService { } } - saveFile(org: string, fileName: string, filePath: string, originalName?: string) { - return this._mediaRepository.saveFile(org, fileName, filePath, originalName); + // Streams the remote body straight into storage: only the sniffing prefix + // and a few upload parts are ever in memory, so a 1 GB video does not cost + // 1 GB of heap + async uploadFromUrl(org: string, url: string) { + let response: globalThis.Response; + try { + response = await fetch(url, { + // @ts-ignore — undici option, not in lib.dom fetch types + dispatcher: ssrfSafeDispatcher, + }); + } catch (err) { + // Network-level failure (DNS, connection refused, SSRF block, etc.) — + // fetch rejects rather than returning a non-ok response. Keep the real + // reason reachable for callers that want to surface it + throw new BadRequestException('Failed to fetch URL', { cause: err }); + } + if (!response.ok || !response.body) { + throw new BadRequestException('Failed to fetch URL'); + } + + // Cheap early exit when the server declares the size; Content-Length may + // be absent or wrong, so the stream cap below is what really enforces it. + // The type isn't known yet (sniffed below), so this uses the largest cap + const declaredSize = Number(response.headers.get('content-length')); + if (declaredSize && declaredSize > getMaxSize('video/mp4')) { + await response.body.cancel(); + throw new BadRequestException('File is too large.'); + } + + const uploaded = await uploadStreamToStorage( + this.storage, + response.body, + declaredSize + ); + return this.saveFile(org, uploaded.originalname, uploaded.path); + } + + saveFile( + org: string, + fileName: string, + filePath: string, + originalName?: string + ) { + return this._mediaRepository.saveFile( + org, + fileName, + filePath, + originalName + ); + } + + // Saves an upload and, when a normalizer is configured, hands it to the + // processing workflow; the caller polls getMediaStatus until it is ready + async saveUploadedFile( + org: string, + fileName: string, + filePath: string, + originalName?: string + ) { + const media = await this.saveFile(org, fileName, filePath, originalName); + const client = this._temporalService.client.getRawClient(); + if ( + !this.processor || + !PROCESSABLE[extname(fileName).toLowerCase()] || + !client + ) { + return media; + } + + await this._mediaRepository.startProcessing(org, media.id); + try { + await client.workflow.start('processMediaWorkflow', { + workflowId: `media_${media.id}`, + taskQueue: 'main', + args: [{ mediaId: media.id }], + typedSearchAttributes: new TypedSearchAttributes([ + { + key: organizationId, + value: org, + }, + ]), + }); + } catch (err) { + // no workflow means nothing will ever flip the status + return this.releaseUnprocessed(org, media.id, media.name); + } + + return { ...media, status: 'processing' }; + } + + // Lets go of a media the normalizer will not touch. A source the platforms + // accept as-is (mp4, png, ...) becomes ready; one that only exists to be + // converted (mov) is failed, since nothing downstream can use it + private async releaseUnprocessed(org: string, id: string, name: string) { + const convertOnly = !USABLE_AS_IS.has(extname(name).toLowerCase()); + await this._mediaRepository.finishProcessing(org, id, { + ...(convertOnly + ? { error: 'No media processor is available to convert this file' } + : {}), + }); + return this._mediaRepository.getMediaStatus(org, id); + } + + // Upload widget (MCP Apps): the session id is what the model sees and polls, + // the ticket is the credential the widget uploads with. It is handed to the + // widget only, so it doesn't end up in the conversation + async createUploadSession(org: string) { + const sessionId = randomBytes(16).toString('hex'); + await ioRedis.set(`uploadSession:${sessionId}`, org, 'EX', 3600); + return sessionId; + } + + private async checkUploadSession(org: string, sessionId: string) { + if ((await ioRedis.get(`uploadSession:${sessionId}`)) !== org) { + throw new HttpException('Upload session not found or expired', 404); + } + } + + async createUploadTicket(org: string, sessionId: string) { + await this.checkUploadSession(org, sessionId); + const ticket = randomBytes(32).toString('hex'); + await ioRedis.set( + `uploadTicket:${ticket}`, + JSON.stringify({ org, sessionId }), + 'EX', + 600 + ); + return ticket; + } + + // A ticket never outlives its session: the file is streamed to storage right + // after this check, so an expired session has to be refused here + async getUploadTicket(ticket: string) { + const found = JSON.parse( + (await ioRedis.get(`uploadTicket:${ticket}`)) || 'null' + ) as { org: string; sessionId: string } | null; + if ( + !found || + (await ioRedis.get(`uploadSession:${found.sessionId}`)) !== found.org + ) { + return null; + } + return found; + } + + async saveUploadSessionFile( + org: string, + sessionId: string, + fileName: string, + filePath: string, + originalName?: string + ) { + await this.checkUploadSession(org, sessionId); + const media = await this.saveUploadedFile( + org, + fileName, + filePath, + originalName + ); + // a list, so parallel uploads of the same session can't overwrite each other + await ioRedis.rpush(`uploadSessionMedia:${sessionId}`, media.id); + await ioRedis.expire(`uploadSessionMedia:${sessionId}`, 3600); + return media; + } + + async getUploadSession(org: string, sessionId: string) { + await this.checkUploadSession(org, sessionId); + const list = await ioRedis.lrange(`uploadSessionMedia:${sessionId}`, 0, -1); + return ( + await Promise.all( + list.map((id) => this._mediaRepository.getMediaStatus(org, id)) + ) + ).filter((f) => f); + } + + async getMediaStatus(org: string, id: string) { + const media = await this._mediaRepository.getMediaStatus(org, id); + if (!media) { + throw new HttpException('Media not found', 404); + } + + return media; + } + + // The normalized file overwrites the original in place; only a container + // change (mov -> mp4, jpeg -> jpg) lands under a new key. Either way the + // polling side needs nothing but the media record to know where it is + private normalizedName(name: string) { + const ext = extname(name).toLowerCase(); + return `${name.slice(0, -ext.length)}.${PROCESSABLE[ext].ext}`; + } + + // Returns the processor job id; when this process has nothing to run the + // media (already marked processing by the upload) is released as ready, so + // a worker without the processor configured never leaves an upload hanging + async submitProcessing(mediaId: string) { + const media = await this._mediaRepository.getMediaById(mediaId); + if (!media) { + return null; + } + + const processable = PROCESSABLE[extname(media.name).toLowerCase()]; + if ( + !this.processor || + !processable || + !this.storage.signDownloadUrl || + !this.storage.signUploadUrl + ) { + await this.releaseUnprocessed(media.organizationId, media.id, media.name); + return null; + } + + const outputName = this.normalizedName(media.name); + return this.processor.submit({ + version: 1, + type: processable.type, + reference: media.id, + source: { url: await this.storage.signDownloadUrl(media.name) }, + output: { + url: await this.storage.signUploadUrl( + outputName, + processable.contentType + ), + content_type: processable.contentType, + }, + rules: processable.type === 'video' ? VIDEO_RULES : IMAGE_RULES, + limits: LIMITS, + }); + } + + // Returns true once the record is final. A transport error throws so the + // activity retries the poll; a terminal answer from the queue or the service + // marks the media failed and keeps the original usable + async checkProcessing(mediaId: string, jobId: string) { + const media = await this._mediaRepository.getMediaById(mediaId); + if (!media) { + return true; + } + + // a retried activity after the record was already finalized must not + // derive the output key a second time from the rewritten name + if (media.status !== 'processing') { + return true; + } + + const org = media.organizationId; + if (!this.processor) { + await this.releaseUnprocessed(org, mediaId, media.name); + return true; + } + + const job = await this.processor.status(jobId); + if (job.status === 'pending') { + return false; + } + + if (job.status === 'failed') { + await this._mediaRepository.finishProcessing(org, mediaId, { + error: job.error, + }); + return true; + } + + const { result } = job; + if ( + !result || + !['completed', 'unchanged', 'failed'].includes(result.status) + ) { + await this._mediaRepository.finishProcessing(org, mediaId, { + error: `Unexpected processor result: ${JSON.stringify(result).slice( + 0, + 500 + )}`, + }); + return true; + } + + if (result.status === 'failed') { + // the stderr tail is the only way to know what ffmpeg objected to + await this._mediaRepository.finishProcessing(org, mediaId, { + error: [ + `${result.failure?.code || 'FAILED'}: ${ + result.failure?.message || '' + }`, + result.failure?.stderr_tail, + ] + .filter(Boolean) + .join('\n') + .slice(0, 4000), + }); + return true; + } + + if (result.status === 'unchanged') { + await this._mediaRepository.finishProcessing(org, mediaId, {}); + return true; + } + + const outputName = this.normalizedName(media.name); + await this._mediaRepository.finishProcessing(org, mediaId, { + name: outputName, + path: media.path.slice(0, media.path.lastIndexOf('/') + 1) + outputName, + fileSize: result.output?.bytes, + }); + + // a same-key output already replaced the original; a stray object after a + // container change is harmless, so a failed delete never fails the media + if (outputName !== media.name) { + try { + await this.storage.removeFile(media.name); + } catch (err) { + console.error(`Could not remove original media ${media.name}:`, err); + } + } + return true; + } + + async failProcessing(mediaId: string, error: string) { + const media = await this._mediaRepository.getMediaById(mediaId); + if (!media) { + return; + } + + return this._mediaRepository.finishProcessing( + media.organizationId, + mediaId, + { + error, + } + ); } getMedia(org: string, page: number, search?: string) { diff --git a/libraries/nestjs-libraries/src/database/prisma/oauth/oauth.repository.ts b/libraries/nestjs-libraries/src/database/prisma/oauth/oauth.repository.ts index 48f54206a6..123712aed0 100644 --- a/libraries/nestjs-libraries/src/database/prisma/oauth/oauth.repository.ts +++ b/libraries/nestjs-libraries/src/database/prisma/oauth/oauth.repository.ts @@ -281,6 +281,8 @@ export class OAuthRepository { oauthApp: { select: { clientId: true, + dynamic: true, + redirectUris: true, }, }, organization: { diff --git a/libraries/nestjs-libraries/src/database/prisma/oauth/oauth.service.ts b/libraries/nestjs-libraries/src/database/prisma/oauth/oauth.service.ts index 94a2c7110d..87f50f666c 100644 --- a/libraries/nestjs-libraries/src/database/prisma/oauth/oauth.service.ts +++ b/libraries/nestjs-libraries/src/database/prisma/oauth/oauth.service.ts @@ -7,18 +7,21 @@ import { makeId } from '@gitroom/nestjs-libraries/services/make.is'; import { AuthService } from '@gitroom/helpers/auth/auth.service'; import { extractBearerToken } from '@gitroom/nestjs-libraries/chat/oauth-types'; import { createHash } from 'crypto'; +import { OAuthApp } from '@prisma/client'; const openAiOAuthClientId = () => process.env.OPENAI_OAUTH_CLIENT_ID?.trim(); const enableOidcEmailClaims = () => Boolean(openAiOAuthClientId()); -const oauthScope = (clientId: string) => - [ - ...(clientId === openAiOAuthClientId() ? ['openid', 'email'] : []), - 'mcp:read', - 'mcp:write', - ].join(' '); +// Verified-domain match: exact host or a subdomain of it (spoof-safe, the +// leading dot means evilclaude.ai and claude.ai.evil.com are both rejected) +const isVerifiedHost = (host: string, verifiedDomains: string[]) => + verifiedDomains.some( + (domain) => host === domain || host.endsWith('.' + domain) + ); + +type EmailClaimsApp = Pick; // Schemes a browser would execute instead of navigating away from the // consent screen, so they can never be a redirect_uri @@ -152,10 +155,7 @@ export class OAuthService { } const host = parsed.hostname.toLowerCase(); - const isVerified = verifiedDomains.some( - (domain) => host === domain || host.endsWith('.' + domain) - ); - if (!isVerified) { + if (!isVerifiedHost(host, verifiedDomains)) { throw new HttpException( { error: 'invalid_redirect_uri', @@ -180,6 +180,13 @@ export class OAuthService { .catch(() => {}); const isPublicClient = dto.token_endpoint_auth_method === 'none'; + // The token endpoint accepts the secret from either place; the stored + // method only mirrors back what the client asked for + const tokenEndpointAuthMethod = isPublicClient + ? 'none' + : dto.token_endpoint_auth_method === 'client_secret_basic' + ? 'client_secret_basic' + : 'client_secret_post'; const clientId = 'pcd_' + makeId(32); const clientSecret = isPublicClient ? undefined : 'pcs_' + makeId(48); @@ -189,7 +196,7 @@ export class OAuthService { redirectUris: JSON.stringify(redirectUris), clientId, clientSecret: clientSecret && AuthService.fixedEncryption(clientSecret), - tokenEndpointAuthMethod: isPublicClient ? 'none' : 'client_secret_post', + tokenEndpointAuthMethod, }); return { @@ -198,13 +205,60 @@ export class OAuthService { client_id_issued_at: Math.floor(app.createdAt.getTime() / 1000), client_name: app.name, redirect_uris: redirectUris, - token_endpoint_auth_method: isPublicClient ? 'none' : 'client_secret_post', + token_endpoint_auth_method: tokenEndpointAuthMethod, grant_types: ['authorization_code'], response_types: ['code'], scope: 'mcp:read mcp:write', }; } + // Email claims (openid/email scope + userinfo) go to the static ChatGPT app + // and to dynamically registered clients whose web callbacks all live on a + // verified domain (DCR_VERIFIED_DOMAINS). Everything else, including every + // dynamic client on a self-hosted install with no verified domains, only + // gets the mcp scopes + private allowsEmailClaims(app: EmailClaimsApp) { + if (!enableOidcEmailClaims()) { + return false; + } + if (app.clientId === openAiOAuthClientId()) { + return true; + } + if (!app.dynamic) { + return false; + } + + const verifiedDomains = this.verifiedDomainList(); + if (!verifiedDomains.length) { + return false; + } + + const webHosts: string[] = []; + for (const uri of JSON.parse(app.redirectUris || '[]') as string[]) { + try { + const parsed = new URL(uri); + if (parsed.protocol === 'https:') { + webHosts.push(parsed.hostname.toLowerCase()); + } + } catch { + return false; + } + } + + return ( + webHosts.length > 0 && + webHosts.every((host) => isVerifiedHost(host, verifiedDomains)) + ); + } + + private grantedScope(app: EmailClaimsApp) { + return [ + ...(this.allowsEmailClaims(app) ? ['openid', 'email'] : []), + 'mcp:read', + 'mcp:write', + ].join(' '); + } + async validateAuthorizationRequest( clientId: string, options?: { @@ -359,7 +413,7 @@ export class OAuthService { cus: paymentId, access_token: token, token_type: 'bearer', - scope: oauthScope(clientId), + scope: this.grantedScope(app), }; } @@ -395,7 +449,7 @@ export class OAuthService { ); } - if (authorizationRecord.oauthApp.clientId !== openAiOAuthClientId()) { + if (!this.allowsEmailClaims(authorizationRecord.oauthApp)) { throw new HttpException( { error: 'insufficient_scope', diff --git a/libraries/nestjs-libraries/src/database/prisma/organizations/organization.repository.ts b/libraries/nestjs-libraries/src/database/prisma/organizations/organization.repository.ts index 30c528a650..b263134cbc 100644 --- a/libraries/nestjs-libraries/src/database/prisma/organizations/organization.repository.ts +++ b/libraries/nestjs-libraries/src/database/prisma/organizations/organization.repository.ts @@ -88,6 +88,22 @@ export class OrganizationRepository { }); } + getPrivilegedNonSuperAdminUser(orgId: string) { + return this._userOrg.model.userOrganization.findFirst({ + where: { + organizationId: orgId, + disabled: false, + role: { + in: [Role.SUPERADMIN, Role.ADMIN], + }, + user: { + isSuperAdmin: false, + deletedAt: null, + }, + }, + }); + } + getUserOrg(id: string) { return this._userOrg.model.userOrganization.findFirst({ where: { @@ -288,6 +304,98 @@ export class OrganizationRepository { }); } + async getAccountOverview(orgId: string) { + const [organization, members] = await Promise.all([ + this._organization.model.organization.findUnique({ + where: { + id: orgId, + }, + select: { + id: true, + name: true, + createdAt: true, + deletedAt: true, + allowTrial: true, + isTrailing: true, + subscription: { + select: { + subscriptionTier: true, + period: true, + identifier: true, + totalChannels: true, + isLifetime: true, + cancelAt: true, + createdAt: true, + updatedAt: true, + deletedAt: true, + }, + }, + }, + }), + this._userOrg.model.userOrganization.findMany({ + where: { + organizationId: orgId, + }, + orderBy: { + createdAt: 'asc', + }, + select: { + role: true, + disabled: true, + createdAt: true, + user: { + select: { + id: true, + email: true, + activated: true, + providerName: true, + lastOnline: true, + createdAt: true, + }, + }, + }, + }), + ]); + + if (!organization) { + return null; + } + + const owner = members.find((member) => member.role === Role.SUPERADMIN); + const lastOnlineMax = members.reduce( + (latest, member) => + !latest || member.user.lastOnline > latest + ? member.user.lastOnline + : latest, + null + ); + + return { + organization: { + id: organization.id, + name: organization.name, + createdAt: organization.createdAt, + deletedAt: organization.deletedAt, + allowTrial: organization.allowTrial, + isTrailing: organization.isTrailing, + }, + subscription: organization.subscription || null, + owner: owner + ? { + ...owner.user, + role: owner.role, + memberSince: owner.createdAt, + } + : null, + users: { + total: members.length, + activated: members.filter((member) => member.user.activated).length, + disabled: members.filter((member) => member.disabled).length, + lastOnlineMax, + }, + }; + } + getUsersByEmail(email: string) { return this._user.model.user.findMany({ where: { diff --git a/libraries/nestjs-libraries/src/database/prisma/organizations/organization.service.ts b/libraries/nestjs-libraries/src/database/prisma/organizations/organization.service.ts index eac2e9df1c..6734cfcbad 100644 --- a/libraries/nestjs-libraries/src/database/prisma/organizations/organization.service.ts +++ b/libraries/nestjs-libraries/src/database/prisma/organizations/organization.service.ts @@ -57,12 +57,21 @@ export class OrganizationService { return this._organizationRepository.getOrgByIdWithSubscription(id); } + getAccountOverview(orgId: string) { + return this._organizationRepository.getAccountOverview(orgId); + } + getOrgByApiKey(api: string) { return this._organizationRepository.getOrgByApiKey(api); } - async hasSuperAdminUser(orgId: string) { - return !!(await this._organizationRepository.getSuperAdminUser(orgId)); + async canUseSuperAdminApi(orgId: string) { + const [superAdmin, privilegedOther] = await Promise.all([ + this._organizationRepository.getSuperAdminUser(orgId), + this._organizationRepository.getPrivilegedNonSuperAdminUser(orgId), + ]); + + return !!superAdmin && !privilegedOther; } getUserOrg(id: string) { diff --git a/libraries/nestjs-libraries/src/database/prisma/posts/posts.repository.ts b/libraries/nestjs-libraries/src/database/prisma/posts/posts.repository.ts index 4d6e240f6a..1aa9e1538f 100644 --- a/libraries/nestjs-libraries/src/database/prisma/posts/posts.repository.ts +++ b/libraries/nestjs-libraries/src/database/prisma/posts/posts.repository.ts @@ -734,6 +734,59 @@ export class PostsRepository { }); } + private get postTimelineSelect() { + return { + id: true, + state: true, + publishDate: true, + createdAt: true, + updatedAt: true, + deletedAt: true, + releaseId: true, + releaseURL: true, + error: true, + creationMethod: true, + group: true, + parentPostId: true, + } as const; + } + + getPostTimeline(id: string, org: string) { + return this._post.model.post.findFirst({ + where: { + id, + organizationId: org, + }, + select: { + ...this.postTimelineSelect, + integration: { + select: { + id: true, + name: true, + providerIdentifier: true, + disabled: true, + refreshNeeded: true, + deletedAt: true, + }, + }, + childrenPost: { + select: this.postTimelineSelect, + orderBy: { publishDate: 'asc' as const }, + }, + errors: { + select: { + id: true, + platform: true, + message: true, + body: true, + createdAt: true, + }, + orderBy: { createdAt: 'desc' as const }, + }, + }, + }); + } + findAllExistingCategories() { return this._popularPosts.model.popularPosts.findMany({ select: { @@ -884,29 +937,51 @@ export class PostsRepository { }); } - async getPostByForWebhookId(postId: string) { - return this._post.model.post.findMany({ + async getPostByForWebhookId(postId: string, integrationId: string) { + const select = { + id: true, + content: true, + publishDate: true, + releaseURL: true, + state: true, + integration: { + select: { + id: true, + name: true, + providerIdentifier: true, + picture: true, + type: true, + }, + }, + }; + + const posts = await this._post.model.post.findMany({ where: { id: postId, deletedAt: null, parentPostId: null, }, - select: { - id: true, - content: true, - publishDate: true, - releaseURL: true, - state: true, - integration: { - select: { - id: true, - name: true, - providerIdentifier: true, - picture: true, - type: true, - }, - }, + select, + }); + + if (posts.length) { + return posts; + } + + // The running workflows pass the platform's post id, which updatePost + // already stored on the row as releaseId before the webhook is sent. + return this._post.model.post.findMany({ + where: { + releaseId: postId, + integrationId, + deletedAt: null, + parentPostId: null, + }, + orderBy: { + updatedAt: 'desc' as const, }, + take: 1, + select, }); } diff --git a/libraries/nestjs-libraries/src/database/prisma/posts/posts.service.ts b/libraries/nestjs-libraries/src/database/prisma/posts/posts.service.ts index 13e684f813..5d5508bc6b 100644 --- a/libraries/nestjs-libraries/src/database/prisma/posts/posts.service.ts +++ b/libraries/nestjs-libraries/src/database/prisma/posts/posts.service.ts @@ -53,7 +53,7 @@ import { stripLinks } from '@gitroom/helpers/utils/strip.links'; import { validate } from 'class-validator'; import { plainToInstance } from 'class-transformer'; import { stripHtmlValidation } from '@gitroom/helpers/utils/strip.html.validation'; -import { weightedLength } from '@gitroom/helpers/utils/count.length'; +import { countLength } from '@gitroom/helpers/utils/count.length'; type PostWithConditionals = Post & { integration?: Integration; @@ -146,6 +146,10 @@ export class PostsService { return this._postRepository.getPostById(postId, orgId); } + async getPostTimeline(postId: string, orgId: string) { + return this._postRepository.getPostTimeline(postId, orgId); + } + async updateReleaseId(orgId: string, postId: string, releaseId: string) { return this._postRepository.updateReleaseId(postId, orgId, releaseId); } @@ -349,11 +353,23 @@ export class PostsService { ( await Promise.all( (imagesList || []).map(async (p: any) => { - if (!p.path && p.id) { + if (!p.id) { + return p; + } + + if (!p.path) { imageUpdateNeeded = true; return this._mediaService.getMediaById(p.id); } + // the normalizer may have replaced the file after the post was + // composed; a record still processing publishes the original + const fresh = await this._mediaService.getMediaById(p.id); + if (fresh?.status === 'ready' && fresh.path !== p.path) { + imageUpdateNeeded = true; + return { ...p, name: fresh.name, path: fresh.path }; + } + return p; }) ) @@ -688,8 +704,8 @@ export class PostsService { return this._postRepository.countPostsFromDay(orgId, date); } - getPostByForWebhookId(id: string) { - return this._postRepository.getPostByForWebhookId(id); + getPostByForWebhookId(id: string, integrationId: string) { + return this._postRepository.getPostByForWebhookId(id, integrationId); } async startWorkflow( @@ -827,20 +843,17 @@ export class PostsService { } const maximumCharacters = provider.maxLength(additionalSettings, settings); - const isX = integration.providerIdentifier === 'x'; const emptyContent = (post.value || []).some((a) => { const strip = stripHtmlValidation('normal', a.content || '', true); - const length = isX ? weightedLength(strip) : strip.length; + const length = countLength(integration.providerIdentifier, strip); return length === 0 && (a.image || []).length === 0; }); const tooLong = (post.value || []).some((a) => { const strip = stripHtmlValidation('normal', a.content || '', true); - const weighted = isX ? weightedLength(strip) : strip.length; - const totalCharacters = - weighted > strip.length ? weighted : strip.length; - return totalCharacters > (maximumCharacters || 1000000); + const counted = countLength(integration.providerIdentifier, strip); + return counted > (maximumCharacters || 1000000); }); return { diff --git a/libraries/nestjs-libraries/src/database/prisma/schema.prisma b/libraries/nestjs-libraries/src/database/prisma/schema.prisma index f3ba6dbf40..60dee99c9f 100644 --- a/libraries/nestjs-libraries/src/database/prisma/schema.prisma +++ b/libraries/nestjs-libraries/src/database/prisma/schema.prisma @@ -225,6 +225,8 @@ model Media { thumbnail String? alt String? thumbnailTimestamp Int? + status String @default("ready") + processingError String? organization Organization @relation(fields: [organizationId], references: [id]) agencies SocialMediaAgency[] userPicture User[] diff --git a/libraries/nestjs-libraries/src/dtos/analytics/get.org.activity.dto.ts b/libraries/nestjs-libraries/src/dtos/analytics/get.org.activity.dto.ts new file mode 100644 index 0000000000..6311b1d925 --- /dev/null +++ b/libraries/nestjs-libraries/src/dtos/analytics/get.org.activity.dto.ts @@ -0,0 +1,11 @@ +import { IsDateString, IsOptional } from 'class-validator'; + +export class GetOrgActivityDto { + @IsOptional() + @IsDateString() + from?: string; + + @IsOptional() + @IsDateString() + to?: string; +} diff --git a/libraries/nestjs-libraries/src/dtos/oauth/token-exchange.dto.ts b/libraries/nestjs-libraries/src/dtos/oauth/token-exchange.dto.ts index 36a3c22bf4..ca3b3b7fe2 100644 --- a/libraries/nestjs-libraries/src/dtos/oauth/token-exchange.dto.ts +++ b/libraries/nestjs-libraries/src/dtos/oauth/token-exchange.dto.ts @@ -9,9 +9,12 @@ export class TokenExchangeDto { @IsDefined() code: string; + // Optional here because client_secret_basic clients send the id and secret + // in the Authorization header; the controller merges the two sources and + // the service rejects a request that ends up without a client_id @IsString() - @IsDefined() - client_id: string; + @IsOptional() + client_id?: string; // Optional to allow PKCE-only public clients (dynamic registration); // the service still enforces it for confidential clients diff --git a/libraries/nestjs-libraries/src/dtos/posts/providers-settings/reddit.dto.ts b/libraries/nestjs-libraries/src/dtos/posts/providers-settings/reddit.dto.ts index 4a8f2a13fe..f4d4d813c1 100644 --- a/libraries/nestjs-libraries/src/dtos/posts/providers-settings/reddit.dto.ts +++ b/libraries/nestjs-libraries/src/dtos/posts/providers-settings/reddit.dto.ts @@ -2,6 +2,7 @@ import { ArrayMinSize, IsBoolean, IsDefined, + IsIn, IsString, IsUrl, Matches, @@ -37,10 +38,11 @@ export class RedditSettingsDtoInner { title: string; @IsString() - @MinLength(2) + @IsIn(['self', 'link', 'media']) @IsDefined() @JSONSchema({ - description: 'Must be any of link, self (normal post), image, video, videogif', + description: + "Must be one of self (text post), link (requires url), media (uploads the post's first attached image or mp4 video)", }) type: string; diff --git a/libraries/nestjs-libraries/src/integrations/social/bluesky.provider.ts b/libraries/nestjs-libraries/src/integrations/social/bluesky.provider.ts index cb7ff2c3a1..4efd91c26d 100644 --- a/libraries/nestjs-libraries/src/integrations/social/bluesky.provider.ts +++ b/libraries/nestjs-libraries/src/integrations/social/bluesky.provider.ts @@ -371,8 +371,22 @@ export class BlueskyProvider extends SocialAbstract implements SocialProvider { identifier: body.identifier, password: body.password, }); - } catch (err) { - throw new RefreshToken('bluesky', JSON.stringify(err), {} as BodyInit); + } catch (err: any) { + // Only a definite 4xx (bad password, account taken down) means the + // credentials are broken. A 5xx or network error is Bluesky being + // unavailable: let it propagate as a transient failure instead of + // marking the channel as disconnected. + const status = err?.status; + if ( + typeof status === 'number' && + status >= 400 && + status < 500 && + status !== 429 + ) { + throw new RefreshToken('bluesky', JSON.stringify(err), {} as BodyInit); + } + + throw err; } return agent; @@ -612,11 +626,12 @@ export class BlueskyProvider extends SocialAbstract implements SocialProvider { // this is safe and beats exhausting the check budget into a misleading // "check your account" warning. if ((pendingData.prepFailures || 0) >= 4) { + const reason = (err as any)?.message || String(err); throw new BadBody( 'bluesky', - JSON.stringify({}), + JSON.stringify({ message: reason }), {} as any, - 'Could not prepare the post for Bluesky, nothing was published, please try again' + `Could not prepare the post for Bluesky, nothing was published: ${reason}` ); } diff --git a/libraries/nestjs-libraries/src/integrations/social/facebook.provider.ts b/libraries/nestjs-libraries/src/integrations/social/facebook.provider.ts index eabed2bafe..e009bd65b6 100644 --- a/libraries/nestjs-libraries/src/integrations/social/facebook.provider.ts +++ b/libraries/nestjs-libraries/src/integrations/social/facebook.provider.ts @@ -83,6 +83,28 @@ export class FacebookProvider extends SocialAbstract implements SocialProvider { }; } + // The token is valid but belongs to the user, not to the page - the page + // was never granted to the app, so only reconnecting can fix it + if ( + body.indexOf( + 'Unpublished posts must be posted to a page as the page itself' + ) > -1 + ) { + return { + type: 'refresh-token' as const, + value: + 'Postiz is not authorized to publish as this page, please reconnect the channel', + }; + } + + if (body.indexOf('(#200)') > -1) { + return { + type: 'bad-body' as const, + value: + 'Facebook rejected the post due to missing permissions. Make sure your Facebook account has full content access to the Page, then reconnect the channel.', + }; + } + if (body.indexOf('1366046') > -1) { return { type: 'bad-body' as const, @@ -1008,6 +1030,19 @@ export class FacebookProvider extends SocialAbstract implements SocialProvider { ): Promise { const today = dayjs().format('YYYY-MM-DD'); + // The stored id (releaseId) shape depends on the post type set in post(): + // - feed post -> `{pageid}_{postid}` (contains `_`), has an `insights` edge + // - reel/video -> bare numeric video id, NO `insights` edge (only `video_insights`) + // - story -> bare story id, no usable insights via this path + // There is no separate stored type, so id shape is the discriminator. Calling + // `/{videoId}/insights` on a video/story node returns + // `(#100) Tried accessing nonexisting field (insights)`, which is what surfaced + // in prod as "Error fetching Facebook post analytics: ApplicationFailure". Route + // bare ids to the video-only edge instead. + if (!postId.includes('_')) { + return this.videoPostAnalytics(accessToken, postId, today); + } + try { // Fetch post insights from Facebook Graph API. // post_impressions_unique was deprecated by Meta on 2026-06-15; it is replaced @@ -1078,4 +1113,89 @@ export class FacebookProvider extends SocialAbstract implements SocialProvider { return []; } } + + // Video/reel posts store a bare video id whose node has no `insights` edge; their + // analytics live on the `/{videoId}/video_insights` edge instead. Story posts also + // store a bare id but have no usable insights here — the video_insights call comes + // back with an `error` (or empty data), which we swallow to an empty result so a + // single story/video can't break the statistics page. + private async videoPostAnalytics( + accessToken: string, + videoId: string, + today: string + ): Promise { + try { + // Metric names verified against the Graph API v23.0 video_insights docs: + // - total_video_impressions: times the video was shown + // - total_video_views: 3s+ (or full, if shorter) plays + // - total_video_reactions_by_type_total: reactions object, keyed by type + // Use plain fetch (not this.fetch) so a `(#100) nonexisting field` / story + // response doesn't throw an ApplicationFailure — we want a quiet `[]` instead. + const { data, error } = await ( + await fetch( + `https://graph.facebook.com/${META_GRAPH_API_VERSION}/${videoId}/video_insights?metric=total_video_impressions,total_video_views,total_video_reactions_by_type_total&access_token=${accessToken}` + ) + ).json(); + + // Stories (and videos without this edge) come back with an error / no data — + // return an empty result quietly rather than logging a scary error. But a + // `nonexisting field (video_insights)` is the only "expected" error here; any + // other error (bad metric name, token, permissions) means the fix is silently + // returning empty when it shouldn't be, so surface it as a warning (not a throw, + // not a scary error) so it's diagnosable without breaking the statistics page. + if (error || !data || data.length === 0) { + if (error && !/nonexisting field/i.test(error.message || '')) { + console.warn('Facebook video_insights returned an error:', { + videoId, + error, + }); + } + return []; + } + + const result: AnalyticsData[] = []; + + for (const metric of data) { + const value = metric.values?.[0]?.value; + if (value === undefined) continue; + + let label = ''; + let total = ''; + + switch (metric.name) { + case 'total_video_impressions': + label = 'Impressions'; + total = String(value); + break; + case 'total_video_views': + label = 'Views'; + total = String(value); + break; + case 'total_video_reactions_by_type_total': + // This returns an object with reaction types + if (typeof value === 'object') { + const totalReactions = Object.values( + value as Record + ).reduce((sum: number, v: number) => sum + v, 0); + label = 'Reactions'; + total = String(totalReactions); + } + break; + } + + if (label) { + result.push({ + label, + percentageChange: 0, + data: [{ total, date: today }], + }); + } + } + + return result; + } catch (err) { + console.error('Error fetching Facebook video post analytics:', err); + return []; + } + } } diff --git a/libraries/nestjs-libraries/src/integrations/social/farcaster.provider.ts b/libraries/nestjs-libraries/src/integrations/social/farcaster.provider.ts index 0e237c4015..c61a265ce4 100644 --- a/libraries/nestjs-libraries/src/integrations/social/farcaster.provider.ts +++ b/libraries/nestjs-libraries/src/integrations/social/farcaster.provider.ts @@ -15,11 +15,26 @@ import { Integration } from '@prisma/client'; import { FarcasterDto } from '@gitroom/nestjs-libraries/dtos/posts/providers-settings/farcaster.dto'; import { Tool } from '@gitroom/nestjs-libraries/integrations/tool.decorator'; import { Rules } from '@gitroom/nestjs-libraries/chat/rules.description.decorator'; +import { mnemonicToAccount } from 'viem/accounts'; +import { toDataURL } from 'qrcode'; const client = new NeynarAPIClient({ apiKey: process.env.NEYNAR_SECRET_KEY || '00000000-000-0000-000-000000000000', }); +const SIGNED_KEY_REQUEST_VALIDATOR_EIP_712_DOMAIN = { + name: 'Farcaster SignedKeyRequestValidator', + version: '1', + chainId: 10, + verifyingContract: '0x00000000fc700472606ed4fa22623acf62c60553', +} as const; + +const SIGNED_KEY_REQUEST_TYPE = [ + { name: 'requestFid', type: 'uint256' }, + { name: 'key', type: 'bytes' }, + { name: 'deadline', type: 'uint256' }, +] as const; + @Rules( 'Farcaster/Warpcast can only accept pictures' ) @@ -73,6 +88,76 @@ export class FarcasterProvider }; } + async createSigner(): Promise<{ + signerUuid: string; + approvalUrl: string; + qrCode: string; + }> { + if (!process.env.NEYNAR_APP_FID || !process.env.NEYNAR_APP_MNEMONIC) { + throw new Error( + 'Farcaster is not configured: set NEYNAR_APP_FID and NEYNAR_APP_MNEMONIC' + ); + } + + const appFid = Number(process.env.NEYNAR_APP_FID); + const signer = await client.createSigner(); + const deadline = Math.floor(Date.now() / 1000) + 24 * 60 * 60; + const signature = await mnemonicToAccount( + process.env.NEYNAR_APP_MNEMONIC + ).signTypedData({ + domain: SIGNED_KEY_REQUEST_VALIDATOR_EIP_712_DOMAIN, + types: { SignedKeyRequest: SIGNED_KEY_REQUEST_TYPE }, + primaryType: 'SignedKeyRequest', + message: { + requestFid: BigInt(appFid), + key: signer.public_key as `0x${string}`, + deadline: BigInt(deadline), + }, + }); + + const registered = await client.registerSignedKey({ + signerUuid: signer.signer_uuid, + appFid, + deadline, + signature, + ...(process.env.NEYNAR_SPONSOR_SIGNERS === 'true' + ? { sponsor: { sponsored_by_neynar: true } } + : {}), + }); + + return { + signerUuid: registered.signer_uuid, + approvalUrl: registered.signer_approval_url!, + qrCode: await toDataURL(registered.signer_approval_url!), + }; + } + + async signerStatus( + signerUuid: string + ): Promise<{ status: string; code?: string }> { + const signer = await client.lookupSigner({ signerUuid }); + if (signer.status !== 'approved') { + return { status: signer.status }; + } + + const { + users: [user], + } = await client.fetchBulkUsers({ fids: [signer.fid!] }); + + return { + status: signer.status, + code: Buffer.from( + JSON.stringify({ + signer_uuid: signerUuid, + fid: signer.fid, + username: user.username, + display_name: user.display_name, + pfp_url: user.pfp_url, + }) + ).toString('base64'), + }; + } + async authenticate(params: { code: string; codeVerifier: string; diff --git a/libraries/nestjs-libraries/src/integrations/social/instagram.provider.ts b/libraries/nestjs-libraries/src/integrations/social/instagram.provider.ts index 81b7cc8802..f8c9aa08cb 100644 --- a/libraries/nestjs-libraries/src/integrations/social/instagram.provider.ts +++ b/libraries/nestjs-libraries/src/integrations/social/instagram.provider.ts @@ -308,6 +308,14 @@ export class InstagramProvider }; } + if (body.indexOf('(#200)') > -1) { + return { + type: 'bad-body' as const, + value: + 'Facebook rejected the post due to missing permissions. Make sure your Facebook account has full content access to the Page linked to this Instagram account, then reconnect the channel.', + }; + } + if (body.indexOf('Not enough permissions to post') > -1) { return { type: 'bad-body' as const, @@ -597,6 +605,12 @@ export class InstagramProvider }; } + // Instagram rejects collaborator handles that carry a leading @ with + // error_subcode 2207018, and the tag input stores whatever the user typed. + private stripHandle(handle: string) { + return handle.replace(/^@+/, ''); + } + // Single, read-only status check of a media container - the polling loops // that used to live inside post() are now driven by the post workflow. private async igContainerStatus( @@ -656,6 +670,16 @@ export class InstagramProvider const [accessToken] = token.split('___'); const [firstPost] = postDetails; const isStory = firstPost.settings.post_type === 'story'; + const collaborators = + firstPost?.settings?.collaborators?.length && !isStory + ? `&collaborators=${encodeURIComponent( + JSON.stringify( + firstPost?.settings?.collaborators.map((p) => + this.stripHandle(p.label) + ) + ) + )}` + : ``; const isTrialReel = this.assetBoolean(firstPost.settings.is_trial_reel); const medias = await Promise.all( firstPost?.media?.map(async (m) => { @@ -692,12 +716,10 @@ export class InstagramProvider )}` : ``; - const collaborators = - firstPost?.settings?.collaborators?.length && !isStory - ? `&collaborators=${JSON.stringify( - firstPost?.settings?.collaborators.map((p) => p.label) - )}` - : ``; + // collaborators are not allowed on carousel child items, + // they go on the carousel container instead + const itemCollaborators = + firstPost?.media?.length === 1 ? collaborators : ``; // audio_configuration is only supported for Reels (single video, not a story) // and only with Facebook Login (not Instagram Login / graph.instagram.com) @@ -724,7 +746,7 @@ export class InstagramProvider const { id: photoId } = await ( await this.fetch( - `https://${type}/${META_GRAPH_API_VERSION}/${id}/media?${mediaType}${isCarousel}${collaborators}${trialParams}${audioConfiguration}&access_token=${accessToken}${caption}`, + `https://${type}/${META_GRAPH_API_VERSION}/${id}/media?${mediaType}${isCarousel}${itemCollaborators}${trialParams}${audioConfiguration}&access_token=${accessToken}${caption}`, { method: 'POST', } @@ -754,6 +776,13 @@ export class InstagramProvider : 'carousel', containers: medias, message: firstPost?.message || '', + ...(collaborators + ? { + collaborators: firstPost.settings.collaborators!.map((p) => + this.stripHandle(p.label) + ), + } + : {}), }, }, ]; @@ -767,6 +796,7 @@ export class InstagramProvider containers: string[]; message?: string; carouselId?: string; + collaborators?: string[]; }, integration: Integration ): Promise { @@ -833,6 +863,7 @@ export class InstagramProvider containers: string[]; message?: string; carouselId?: string; + collaborators?: string[]; }, integration: Integration ): Promise { @@ -889,7 +920,13 @@ export class InstagramProvider pendingData.message || '' )}&media_type=CAROUSEL&children=${encodeURIComponent( pendingData.containers.join(',') - )}&access_token=${accessToken}`, + )}${ + pendingData.collaborators?.length + ? `&collaborators=${encodeURIComponent( + JSON.stringify(pendingData.collaborators) + )}` + : `` + }&access_token=${accessToken}`, { method: 'POST', } diff --git a/libraries/nestjs-libraries/src/integrations/social/linkedin.page.provider.ts b/libraries/nestjs-libraries/src/integrations/social/linkedin.page.provider.ts index 36bbdce5b5..0e933e1d97 100644 --- a/libraries/nestjs-libraries/src/integrations/social/linkedin.page.provider.ts +++ b/libraries/nestjs-libraries/src/integrations/social/linkedin.page.provider.ts @@ -260,7 +260,9 @@ export class LinkedinPageProvider ).json(); return { - id: id, + // namespaced placeholder so the in-between row never collides with the + // personal LinkedIn channel row (same org + same member sub) + id: `${this.identifier}_${id}`, accessToken, refreshToken, expiresIn, diff --git a/libraries/nestjs-libraries/src/integrations/social/pinterest.provider.ts b/libraries/nestjs-libraries/src/integrations/social/pinterest.provider.ts index 3317cd5075..7de3797745 100644 --- a/libraries/nestjs-libraries/src/integrations/social/pinterest.provider.ts +++ b/libraries/nestjs-libraries/src/integrations/social/pinterest.provider.ts @@ -639,40 +639,43 @@ export class PinterestProvider const result: AnalyticsData[] = []; const metrics = data.all; - if (metrics.lifetime_metrics) { - const lifetimeMetrics = metrics.lifetime_metrics; + // The requested metric types are period metrics: Pinterest returns them + // in summary_metrics, never in lifetime_metrics (that only ever carries + // TOTAL_COMMENTS / TOTAL_REACTIONS). + if (metrics.summary_metrics) { + const summaryMetrics = metrics.summary_metrics; - if (lifetimeMetrics.IMPRESSION !== undefined) { + if (summaryMetrics.IMPRESSION !== undefined) { result.push({ label: 'Impressions', percentageChange: 0, - data: [{ total: String(lifetimeMetrics.IMPRESSION), date: today }], + data: [{ total: String(summaryMetrics.IMPRESSION), date: today }], }); } - if (lifetimeMetrics.PIN_CLICK !== undefined) { + if (summaryMetrics.PIN_CLICK !== undefined) { result.push({ label: 'Pin Clicks', percentageChange: 0, - data: [{ total: String(lifetimeMetrics.PIN_CLICK), date: today }], + data: [{ total: String(summaryMetrics.PIN_CLICK), date: today }], }); } - if (lifetimeMetrics.OUTBOUND_CLICK !== undefined) { + if (summaryMetrics.OUTBOUND_CLICK !== undefined) { result.push({ label: 'Outbound Clicks', percentageChange: 0, data: [ - { total: String(lifetimeMetrics.OUTBOUND_CLICK), date: today }, + { total: String(summaryMetrics.OUTBOUND_CLICK), date: today }, ], }); } - if (lifetimeMetrics.SAVE !== undefined) { + if (summaryMetrics.SAVE !== undefined) { result.push({ label: 'Saves', percentageChange: 0, - data: [{ total: String(lifetimeMetrics.SAVE), date: today }], + data: [{ total: String(summaryMetrics.SAVE), date: today }], }); } } diff --git a/libraries/nestjs-libraries/src/integrations/social/reddit.provider.ts b/libraries/nestjs-libraries/src/integrations/social/reddit.provider.ts index 627645b360..3d4eac5852 100644 --- a/libraries/nestjs-libraries/src/integrations/social/reddit.provider.ts +++ b/libraries/nestjs-libraries/src/integrations/social/reddit.provider.ts @@ -443,7 +443,7 @@ export class RedditProvider extends SocialAbstract implements SocialProvider { // finds the armed marker and asks Reddit instead of resubmitting blindly. const value = data.subreddits[data.cursor].value; data.armed = { - sr: value.subreddit.replace('/r/', '').toLowerCase(), + sr: value.subreddit.replace(/^\/?r\//, '').replace(/^\/+|\/+$/g, '').toLowerCase(), title: value.title || '', armedAt: Date.now(), media: value.type === 'media', @@ -502,7 +502,7 @@ export class RedditProvider extends SocialAbstract implements SocialProvider { } : {}), text: data.message, - sr: value.subreddit.replace('/r/', '').toLowerCase(), + sr: value.subreddit.replace(/^\/?r\//, '').replace(/^\/+|\/+$/g, '').toLowerCase(), }; const all = await ( diff --git a/libraries/nestjs-libraries/src/integrations/social/tiktok.provider.ts b/libraries/nestjs-libraries/src/integrations/social/tiktok.provider.ts index 654d6285c9..2ce190280f 100644 --- a/libraries/nestjs-libraries/src/integrations/social/tiktok.provider.ts +++ b/libraries/nestjs-libraries/src/integrations/social/tiktok.provider.ts @@ -68,6 +68,22 @@ export class TiktokProvider extends SocialAbstract implements SocialProvider { ) { return 'You need one media'; } + + // TikTok fails the whole photo post when a single image is oversized, and + // the status only says `picture_size_check_failed` without naming it. + if (firstItems?.every((p) => (p?.path?.indexOf?.('mp4') ?? -1) === -1)) { + const dimensions = await Promise.all( + firstItems?.map((p) => this.getImageDimensions(p?.path)) ?? [] + ); + const tooBig = dimensions.findIndex( + (p) => Math.min(p?.width ?? 0, p?.height ?? 0) > 1080 + ); + if (tooBig > -1) { + return `Image ${tooBig + 1} is ${dimensions[tooBig]?.width}x${ + dimensions[tooBig]?.height + }, TikTok allows a maximum of 1080px on the shorter side`; + } + } return true; } @@ -260,7 +276,8 @@ export class TiktokProvider extends SocialAbstract implements SocialProvider { if (body.indexOf('picture_size_check_failed') > -1) { return { type: 'bad-body' as const, - value: 'Video must be at least 720p, Picture must no exceed 1080p', + value: + 'Media size not supported by TikTok: images up to 1080px on the shorter side, videos at least 360px on both sides', }; } diff --git a/libraries/nestjs-libraries/src/redis/redis.service.ts b/libraries/nestjs-libraries/src/redis/redis.service.ts index 92a95a6a4c..c54b142de4 100644 --- a/libraries/nestjs-libraries/src/redis/redis.service.ts +++ b/libraries/nestjs-libraries/src/redis/redis.service.ts @@ -18,6 +18,20 @@ class MockRedis { return 1; } + async rpush(key: string, value: any) { + this.data.set(key, [...(this.data.get(key) || []), value]); + return this.data.get(key).length; + } + + async lrange(key: string, start: number, end: number) { + const list = this.data.get(key) || []; + return list.slice(start, end === -1 ? undefined : end + 1); + } + + async expire() { + return 1; + } + // Add other Redis methods as needed for your tests } diff --git a/libraries/nestjs-libraries/src/sentry/initialize.sentry.ts b/libraries/nestjs-libraries/src/sentry/initialize.sentry.ts index 34e69a3e0c..c59c598a4c 100644 --- a/libraries/nestjs-libraries/src/sentry/initialize.sentry.ts +++ b/libraries/nestjs-libraries/src/sentry/initialize.sentry.ts @@ -63,7 +63,14 @@ export const initializeSentry = (appName: string, allowLogs = false) => { recordOutputs: true, }), ], - tracesSampleRate: 1.0, + tracesSampler: ({ name, attributes, normalizedRequest, inheritOrSampleWith }) => { + const path = String( + normalizedRequest?.url || attributes?.['http.target'] || attributes?.['url.path'] || name || '' + ); + return inheritOrSampleWith( + path.includes('/public/v1/analytics/') ? 0.01 : 0.2 + ); + }, enableLogs: true, // Bootstrap payloads and ticket exchanges must not enter telemetry. beforeSend(event) { @@ -86,8 +93,7 @@ export const initializeSentry = (appName: string, allowLogs = false) => { }, // Profiling - profileSessionSampleRate: - process.env.NODE_ENV === 'development' ? 1.0 : 0.3, + profileSessionSampleRate: process.env.NODE_ENV === 'development' ? 1.0 : 0.2, profileLifecycle: 'trace', }); } catch (err) { diff --git a/libraries/nestjs-libraries/src/throttler/throttler.provider.ts b/libraries/nestjs-libraries/src/throttler/throttler.provider.ts index 72b218d559..db506f9ffd 100644 --- a/libraries/nestjs-libraries/src/throttler/throttler.provider.ts +++ b/libraries/nestjs-libraries/src/throttler/throttler.provider.ts @@ -23,3 +23,15 @@ export class ThrottlerBehindProxyGuard extends ThrottlerGuard { ); } } + +// route-level guard for public endpoints, keyed by the client address the +// proxy forwards rather than the org the global guard expects +@Injectable() +export class ThrottlerRealIpGuard extends ThrottlerGuard { + protected override async getTracker( + req: Record + ): Promise { + const forwarded = String(req.headers?.['x-forwarded-for'] || ''); + return forwarded.split(',')[0].trim() || req.ip; + } +} diff --git a/libraries/nestjs-libraries/src/upload/cloudflare.storage.ts b/libraries/nestjs-libraries/src/upload/cloudflare.storage.ts index e01438aad9..6fc597d5c7 100644 --- a/libraries/nestjs-libraries/src/upload/cloudflare.storage.ts +++ b/libraries/nestjs-libraries/src/upload/cloudflare.storage.ts @@ -1,10 +1,18 @@ -import { S3Client, PutObjectCommand } from '@aws-sdk/client-s3'; +import { + S3Client, + PutObjectCommand, + GetObjectCommand, + DeleteObjectCommand, +} from '@aws-sdk/client-s3'; +import { getSignedUrl } from '@aws-sdk/s3-request-presigner'; +import { Upload } from '@aws-sdk/lib-storage'; +import { Readable } from 'stream'; import 'multer'; import { makeId } from '@gitroom/nestjs-libraries/services/make.is'; import mime from 'mime-types'; // @ts-ignore import { getExtension } from 'mime'; -import { IUploadProvider } from './upload.interface'; +import { IUploadProvider, UploadedStream } from './upload.interface'; import axios from 'axios'; import { isSafePublicHttpsUrl } from '@gitroom/nestjs-libraries/dtos/webhooks/webhook.url.validator'; import { ssrfSafeDispatcher } from '@gitroom/nestjs-libraries/dtos/webhooks/ssrf.safe.dispatcher'; @@ -154,14 +162,77 @@ class CloudflareStorage implements IUploadProvider { } } - // Implement the removeFile method from IUploadProvider + async uploadStream( + stream: Readable, + mimetype: string, + ext: string + ): Promise { + try { + if (!ALLOWED_MIME_TYPES.has(mimetype)) { + throw new Error('Unsupported file type.'); + } + const id = makeId(10); + const key = `${id}.${ext}`; + + // Multipart upload holds only a few parts in memory at a time instead + // of the whole body, and does not need to know the length up front + const upload = new Upload({ + client: this._client, + params: { + Bucket: this._bucketName, + ACL: 'public-read', + Key: key, + Body: stream, + ContentType: mimetype, + }, + }); + await upload.done(); + + return { + filename: key, + mimetype, + originalname: key, + path: `${this._uploadUrl}/${key}`, + }; + } catch (err) { + console.error('Error streaming file to Cloudflare R2:', err); + throw err; + } + } + + async signDownloadUrl(fileName: string) { + return getSignedUrl( + this._client, + new GetObjectCommand({ Bucket: this._bucketName, Key: fileName }), + { expiresIn: 3 * 3600 } + ); + } + + async signUploadUrl(fileName: string, contentType: string) { + return getSignedUrl( + this._client, + new PutObjectCommand({ + Bucket: this._bucketName, + Key: fileName, + ContentType: contentType, + }), + { expiresIn: 3 * 3600 } + ); + } + + // Accepts either the public URL or the bare key async removeFile(filePath: string): Promise { - // const fileName = filePath.split('/').pop(); // Extract the filename from the path - // const command = new DeleteObjectCommand({ - // Bucket: this._bucketName, - // Key: fileName, - // }); - // await this._client.send(command); + const fileName = filePath.split('/').pop(); + if (!fileName) { + return; + } + + await this._client.send( + new DeleteObjectCommand({ + Bucket: this._bucketName, + Key: fileName, + }) + ); } } diff --git a/libraries/nestjs-libraries/src/upload/custom.upload.validation.ts b/libraries/nestjs-libraries/src/upload/custom.upload.validation.ts index 1e3c5d1441..788473b8a1 100644 --- a/libraries/nestjs-libraries/src/upload/custom.upload.validation.ts +++ b/libraries/nestjs-libraries/src/upload/custom.upload.validation.ts @@ -1,12 +1,12 @@ -import { - BadRequestException, - Injectable, - PipeTransform, -} from '@nestjs/common'; +import { BadRequestException } from '@nestjs/common'; +import { pipeline, Readable, Transform } from 'stream'; +import { IUploadProvider } from './upload.interface'; // eslint-disable-next-line @typescript-eslint/no-var-requires -const { fileTypeFromBuffer } = require('file-type'); +const { fileTypeStream } = require('file-type'); -const ALLOWED_MIME_TYPES = new Set([ +// What users may put in the media library, whether by multipart upload or +// from a remote URL; narrower than what storage itself accepts, no audio +export const UPLOAD_ALLOWED_MIME = new Set([ 'image/jpeg', 'image/png', 'image/gif', @@ -17,46 +17,6 @@ const ALLOWED_MIME_TYPES = new Set([ 'video/mp4', ]); -@Injectable() -export class CustomFileValidationPipe implements PipeTransform { - async transform(value: any) { - if (!value || typeof value !== 'object') { - return value; - } - - // Skip non-file parameters (org, body, query, etc.) - if (!('buffer' in value) && !('mimetype' in value) && !('fieldname' in value)) { - return value; - } - - if (!value.buffer || !Buffer.isBuffer(value.buffer)) { - throw new BadRequestException('Invalid file upload.'); - } - - const detected = await fileTypeFromBuffer(value.buffer); - if (!detected || !ALLOWED_MIME_TYPES.has(detected.mime)) { - throw new BadRequestException('Unsupported file type.'); - } - - const maxSize = getMaxSize(detected.mime); - if (value.size > maxSize) { - throw new BadRequestException( - `File size exceeds the maximum allowed size of ${maxSize} bytes.` - ); - } - - value.mimetype = detected.mime; - const safeBase = (value.originalname || 'upload') - .replace(/\.[^./\\]*$/, '') - .replace(/[\\/]/g, '_') - .slice(0, 100) || 'upload'; - value.originalname = `${safeBase}.${detected.ext}`; - - return value; - } - -} - export function getMaxSize(mimeType: string): number { if (mimeType.startsWith('image/')) { return 10 * 1024 * 1024; // 10 MB @@ -66,3 +26,68 @@ export function getMaxSize(mimeType: string): number { throw new BadRequestException('Unsupported file type.'); } } + +// Passes bytes through and fails once they exceed maxSize, so a body with a +// missing or lying Content-Length cannot be streamed into storage unbounded +export function maxSizeStream(maxSize: number) { + let total = 0; + return new Transform({ + transform(chunk: Buffer, _encoding, callback) { + total += chunk.length; + if (total > maxSize) { + return callback(new BadRequestException('File is too large.')); + } + callback(null, chunk); + }, + }); +} + +// Sniffs the real type from the first bytes, applies the per-type size cap +// and streams the rest into storage, so only the sniffing prefix and a few +// upload parts are ever in memory. Rejections are BadRequestException with +// the same messages the old buffer validation used. `declaredSize` is the +// Content-Length when the sender gave one; it may be absent or wrong, so the +// stream cap is what really enforces the limit +export async function uploadStreamToStorage( + storage: IUploadProvider, + webStream: ReadableStream, + declaredSize = 0 +) { + let sniffed: ReadableStream & { fileType?: { mime: string; ext: string } }; + try { + sniffed = await fileTypeStream(webStream); + } catch (err) { + throw new BadRequestException('Failed to read file', { cause: err }); + } + const detected = sniffed.fileType; + if (!detected || !UPLOAD_ALLOWED_MIME.has(detected.mime)) { + await sniffed.cancel(); + throw new BadRequestException('Unsupported file type.'); + } + + const maxSize = getMaxSize(detected.mime); + if (declaredSize > maxSize) { + await sniffed.cancel(); + throw new BadRequestException('File is too large.'); + } + + // pipeline (not pipe) so failing the cap also tears down the source + const body = pipeline( + Readable.fromWeb(sniffed as any), + maxSizeStream(maxSize), + () => {} + ); + + try { + const uploaded = await storage.uploadStream( + body, + detected.mime, + detected.ext + ); + return { ...uploaded, ext: detected.ext }; + } catch (err) { + // The size cap rejects mid-upload with its own BadRequestException + body.destroy(); + throw err; + } +} diff --git a/libraries/nestjs-libraries/src/upload/local.storage.ts b/libraries/nestjs-libraries/src/upload/local.storage.ts index 3351253a02..6a4452e1fa 100644 --- a/libraries/nestjs-libraries/src/upload/local.storage.ts +++ b/libraries/nestjs-libraries/src/upload/local.storage.ts @@ -1,5 +1,7 @@ -import { IUploadProvider } from './upload.interface'; -import { mkdirSync, unlink, writeFileSync } from 'fs'; +import { IUploadProvider, UploadedStream } from './upload.interface'; +import { createWriteStream, mkdirSync, unlink, writeFileSync } from 'fs'; +import { Readable } from 'stream'; +import { pipeline } from 'stream/promises'; import { isSafePublicHttpsUrl } from '@gitroom/nestjs-libraries/dtos/webhooks/webhook.url.validator'; import { ssrfSafeDispatcher } from '@gitroom/nestjs-libraries/dtos/webhooks/ssrf.safe.dispatcher'; import { parseDataUrl } from '@gitroom/nestjs-libraries/upload/data.url'; @@ -23,6 +25,30 @@ const LOCAL_STORAGE_ALLOWED_MIME = new Set([ export class LocalStorage implements IUploadProvider { constructor(private uploadDirectory: string) {} + // Files live under /YYYY/MM/DD with a random name; creates the folder + private newFilePath(ext: string) { + const now = new Date(); + const year = now.getFullYear(); + const month = String(now.getMonth() + 1).padStart(2, '0'); + const day = String(now.getDate()).padStart(2, '0'); + + const innerPath = `/${year}/${month}/${day}`; + const dir = `${this.uploadDirectory}${innerPath}`; + mkdirSync(dir, { recursive: true }); + + const randomName = Array(32) + .fill(null) + .map(() => Math.round(Math.random() * 16).toString(16)) + .join(''); + + const filename = `${randomName}.${ext}`; + return { + filename, + filePath: `${dir}/${filename}`, + path: process.env.FRONTEND_URL + '/uploads' + `${innerPath}/${filename}`, + }; + } + async uploadSimple(path: string) { const dataUrl = path.startsWith('data:') ? parseDataUrl(path) : null; @@ -49,28 +75,12 @@ export class LocalStorage implements IUploadProvider { if (!detected || !LOCAL_STORAGE_ALLOWED_MIME.has(detected.mime)) { throw new Error('Unsupported file type.'); } - const findExtension = detected.ext; - - const now = new Date(); - const year = now.getFullYear(); - const month = String(now.getMonth() + 1).padStart(2, '0'); - const day = String(now.getDate()).padStart(2, '0'); - const innerPath = `/${year}/${month}/${day}`; - const dir = `${this.uploadDirectory}${innerPath}`; - mkdirSync(dir, { recursive: true }); - - const randomName = Array(32) - .fill(null) - .map(() => Math.round(Math.random() * 16).toString(16)) - .join(''); - - const filePath = `${dir}/${randomName}.${findExtension}`; - const publicPath = `${innerPath}/${randomName}.${findExtension}`; + const { filePath, path: publicUrl } = this.newFilePath(detected.ext); // Logic to save the file to the filesystem goes here writeFileSync(filePath, body); - return process.env.FRONTEND_URL + '/uploads' + publicPath; + return publicUrl; } async uploadFile(file: Express.Multer.File): Promise { @@ -79,33 +89,16 @@ export class LocalStorage implements IUploadProvider { if (!detected || !LOCAL_STORAGE_ALLOWED_MIME.has(detected.mime)) { throw new Error('Unsupported file type.'); } - const safeExt = `.${detected.ext}`; const safeMime = detected.mime; - const now = new Date(); - const year = now.getFullYear(); - const month = String(now.getMonth() + 1).padStart(2, '0'); - const day = String(now.getDate()).padStart(2, '0'); - - const innerPath = `/${year}/${month}/${day}`; - const dir = `${this.uploadDirectory}${innerPath}`; - mkdirSync(dir, { recursive: true }); - - const randomName = Array(32) - .fill(null) - .map(() => Math.round(Math.random() * 16).toString(16)) - .join(''); - - const filePath = `${dir}/${randomName}${safeExt}`; - const publicPath = `${innerPath}/${randomName}${safeExt}`; - + const { filename, filePath, path } = this.newFilePath(detected.ext); writeFileSync(filePath, file.buffer); return { - filename: `${randomName}${safeExt}`, - path: process.env.FRONTEND_URL + '/uploads' + publicPath, + filename, + path, mimetype: safeMime, - originalname: `${randomName}${safeExt}`, + originalname: filename, }; } catch (err) { console.error('Error uploading file to Local Storage:', err); @@ -113,10 +106,46 @@ export class LocalStorage implements IUploadProvider { } } + async uploadStream( + stream: Readable, + mimetype: string, + ext: string + ): Promise { + try { + if (!LOCAL_STORAGE_ALLOWED_MIME.has(mimetype)) { + throw new Error('Unsupported file type.'); + } + + const { filename, filePath, path } = this.newFilePath(ext); + try { + await pipeline(stream, createWriteStream(filePath)); + } catch (err) { + // Don't leave a truncated file behind (size cap hit, remote closed, ...) + await this.removeFile(filePath).catch(() => {}); + throw err; + } + + return { + filename, + path, + mimetype, + originalname: filename, + }; + } catch (err) { + console.error('Error streaming file to Local Storage:', err); + throw err; + } + } + + // Accepts either the public URL or the filesystem path async removeFile(filePath: string): Promise { + const publicPrefix = process.env.FRONTEND_URL + '/uploads'; + const localPath = filePath.startsWith(publicPrefix) + ? this.uploadDirectory + filePath.slice(publicPrefix.length) + : filePath; // Logic to remove the file from the filesystem goes here return new Promise((resolve, reject) => { - unlink(filePath, (err) => { + unlink(localPath, (err) => { if (err) { reject(err); } else { diff --git a/libraries/nestjs-libraries/src/upload/media.processor.interface.ts b/libraries/nestjs-libraries/src/upload/media.processor.interface.ts new file mode 100644 index 0000000000..1d705b600f --- /dev/null +++ b/libraries/nestjs-libraries/src/upload/media.processor.interface.ts @@ -0,0 +1,69 @@ +// Contract of the media normalization service (postiz-uploader schema/v1). +// The service knows nothing about Postiz: URLs in, metadata out. +export interface MediaProcessorJob { + version: 1; + type: 'video' | 'image'; + reference: string; + source: { url: string; content_type?: string }; + output: { url: string; content_type: string }; + thumbnail?: { + url: string; + timestamp_seconds?: number; + content_type?: 'image/jpeg'; + }; + rules: { + short_side_min: number; + short_side_max: number; + long_side_max: number; + video?: { + container?: 'mp4'; + video_codec?: 'h264'; + profile?: string; + pixel_format?: string; + fps_max?: number; + quality?: number; + audio_codec?: string; + audio_bitrate_kbps?: number; + audio_sample_rate?: number; + faststart?: boolean; + }; + image?: { jpeg_quality?: number; keep_format?: boolean }; + }; + limits?: { + max_input_bytes?: number; + max_duration_seconds?: number; + timeout_seconds?: number; + }; +} + +export interface MediaProcessorResult { + version: 1; + reference: string; + status: 'completed' | 'unchanged' | 'failed'; + actions: string[]; + output?: { + width: number; + height: number; + duration_seconds?: number; + bytes: number; + content_type: string; + }; + thumbnail?: { width: number; height: number; bytes: number } | null; + failure?: { + code: string; + message: string; + retryable: boolean; + stderr_tail?: string; + } | null; +} + +export type MediaProcessorStatus = + | { status: 'pending' } + | { status: 'completed'; result: MediaProcessorResult } + // the queue itself failed (crash, expired job); retryable by the caller + | { status: 'failed'; error: string }; + +export interface IMediaProcessor { + submit(job: MediaProcessorJob): Promise; + status(jobId: string): Promise; +} diff --git a/libraries/nestjs-libraries/src/upload/multer.stream.engine.ts b/libraries/nestjs-libraries/src/upload/multer.stream.engine.ts new file mode 100644 index 0000000000..2d5d205a06 --- /dev/null +++ b/libraries/nestjs-libraries/src/upload/multer.stream.engine.ts @@ -0,0 +1,67 @@ +import { Request } from 'express'; +import { StorageEngine } from 'multer'; +import { Readable } from 'stream'; +import { IUploadProvider } from './upload.interface'; +import { UploadFactory } from './upload.factory'; +import { getMaxSize, uploadStreamToStorage } from './custom.upload.validation'; + +// Multer storage engine that streams each incoming file straight into +// storage instead of multer's default of buffering it whole in memory. +// `file.filename` / `file.path` end up as the stored key and public URL, +// `file.originalname` keeps the sender's name with the detected extension +export class MulterStreamEngine implements StorageEngine { + constructor(private storage: IUploadProvider) {} + + _handleFile( + req: Request, + file: Express.Multer.File, + cb: (error?: any, info?: Partial) => void + ) { + uploadStreamToStorage( + this.storage, + Readable.toWeb(file.stream) as any + ).then( + (uploaded) => { + const safeBase = + (file.originalname || 'upload') + .replace(/\.[^./\\]*$/, '') + .replace(/[\\/]/g, '_') + .slice(0, 100) || 'upload'; + cb(null, { + filename: uploaded.filename, + path: uploaded.path, + mimetype: uploaded.mimetype, + originalname: `${safeBase}.${uploaded.ext}`, + }); + }, + (err) => cb(err) + ); + } + + // Multer calls this when the request fails after the file was already + // stored (e.g. another part hit a limit), so the orphan is dropped + _removeFile( + req: Request, + file: Express.Multer.File, + cb: (error: Error | null) => void + ) { + this.storage.removeFile(file.path).then( + () => cb(null), + (err) => cb(err) + ); + } +} + +let engine: MulterStreamEngine; + +// Options for FileInterceptor on the multipart upload routes. Multer's own +// limit sits one byte above the largest allowed type so the in-stream cap is +// what rejects (a uniform 400 that aborts the upload) rather than multer +// truncating the file, storing it whole and only then failing with a 413 +export function streamUploadOptions() { + engine = engine || new MulterStreamEngine(UploadFactory.createStorage()); + return { + storage: engine, + limits: { fileSize: getMaxSize('video/mp4') + 1 }, + }; +} diff --git a/libraries/nestjs-libraries/src/upload/r2.uploader.ts b/libraries/nestjs-libraries/src/upload/r2.uploader.ts index ef2ed4fb5b..3164d5ed81 100644 --- a/libraries/nestjs-libraries/src/upload/r2.uploader.ts +++ b/libraries/nestjs-libraries/src/upload/r2.uploader.ts @@ -14,6 +14,7 @@ import { Request, Response } from 'express'; import crypto from 'crypto'; import path from 'path'; import { makeId } from '@gitroom/nestjs-libraries/services/make.is'; +import { UploadFactory } from '@gitroom/nestjs-libraries/upload/upload.factory'; // eslint-disable-next-line @typescript-eslint/no-var-requires const { fileTypeFromBuffer } = require('file-type'); @@ -30,9 +31,18 @@ const ALLOWED_EXT_TO_MIME: Record = { '.mp4': 'video/mp4', }; +// Multipart uploads go through the normalizer, so they may also carry +// QuickTime, which it turns into an mp4; simple uploads never do +function multipartExtToMime(): Record { + return { + ...ALLOWED_EXT_TO_MIME, + ...(UploadFactory.processorEnabled() ? { '.mov': 'video/quicktime' } : {}), + }; +} + function normalizeExtension(filename: string): string | null { const ext = path.extname(filename || '').toLowerCase(); - return ALLOWED_EXT_TO_MIME[ext] ? ext : null; + return multipartExtToMime()[ext] ? ext : null; } const { @@ -111,7 +121,7 @@ export async function createMultipartUpload(req: Request, res: Response) { if (!safeExt) { return res.status(400).json({ message: 'Unsupported file type.' }); } - const safeContentType = ALLOWED_EXT_TO_MIME[safeExt]; + const safeContentType = multipartExtToMime()[safeExt]; const randomFilename = generateRandomString() + safeExt; try { @@ -205,7 +215,7 @@ export async function completeMultipartUpload(req: Request, res: Response) { ); return res.status(400).json({ message: 'Unsupported file type.' }); } - const expectedMime = ALLOWED_EXT_TO_MIME[safeExt]; + const expectedMime = multipartExtToMime()[safeExt]; const head = await R2.send( new GetObjectCommand({ @@ -222,7 +232,10 @@ export async function completeMultipartUpload(req: Request, res: Response) { const prefix = Buffer.concat(chunks); const detected = await fileTypeFromBuffer(prefix); - if (!detected || detected.mime !== expectedMime) { + // a .mov with an ISO brand sniffs as video/mp4; the normalizer reads both + const acceptedMimes = + safeExt === '.mov' ? ['video/quicktime', 'video/mp4'] : [expectedMime]; + if (!detected || !acceptedMimes.includes(detected.mime)) { await R2.send( new DeleteObjectCommand({ Bucket: CLOUDFLARE_BUCKETNAME, Key: key }) ); diff --git a/libraries/nestjs-libraries/src/upload/runpod.media.processor.ts b/libraries/nestjs-libraries/src/upload/runpod.media.processor.ts new file mode 100644 index 0000000000..2366957726 --- /dev/null +++ b/libraries/nestjs-libraries/src/upload/runpod.media.processor.ts @@ -0,0 +1,66 @@ +import { + IMediaProcessor, + MediaProcessorJob, + MediaProcessorStatus, +} from './media.processor.interface'; + +// RunPod Serverless wraps every request as { input } and every result as +// { id, status, output }. The worker returns failures as a normal result with +// status "failed" inside, so a RunPod-level FAILED is only an unhandled crash. +export class RunPodMediaProcessor implements IMediaProcessor { + private _baseUrl: string; + + constructor(private _apiKey: string, endpointId: string) { + this._baseUrl = `https://api.runpod.ai/v2/${endpointId}`; + } + + private async request(path: string, init?: RequestInit) { + const response = await fetch(`${this._baseUrl}${path}`, { + ...init, + headers: { + Authorization: `Bearer ${this._apiKey}`, + 'Content-Type': 'application/json', + ...(init?.headers || {}), + }, + signal: AbortSignal.timeout(30000), + }); + + if (!response.ok) { + throw new Error( + `RunPod ${response.status}: ${(await response.text()).slice(0, 500)}` + ); + } + + return response.json(); + } + + async submit(job: MediaProcessorJob): Promise { + const { id } = await this.request('/run', { + method: 'POST', + body: JSON.stringify({ input: job }), + }); + + if (!id) { + throw new Error('RunPod accepted the job without returning an id'); + } + + return id; + } + + async status(jobId: string): Promise { + const { status, output, error } = await this.request(`/status/${jobId}`, { + method: 'GET', + }); + + switch (status) { + case 'COMPLETED': + return { status: 'completed', result: output }; + case 'FAILED': + case 'CANCELLED': + case 'TIMED_OUT': + return { status: 'failed', error: error || status }; + default: + return { status: 'pending' }; + } + } +} diff --git a/libraries/nestjs-libraries/src/upload/upload.factory.ts b/libraries/nestjs-libraries/src/upload/upload.factory.ts index f89d310a8c..a66332110f 100644 --- a/libraries/nestjs-libraries/src/upload/upload.factory.ts +++ b/libraries/nestjs-libraries/src/upload/upload.factory.ts @@ -1,6 +1,8 @@ import { CloudflareStorage } from './cloudflare.storage'; import { IUploadProvider } from './upload.interface'; import { LocalStorage } from './local.storage'; +import { IMediaProcessor } from './media.processor.interface'; +import { RunPodMediaProcessor } from './runpod.media.processor'; export class UploadFactory { static createStorage(): IUploadProvider { @@ -22,4 +24,24 @@ export class UploadFactory { throw new Error(`Invalid storage type ${storageProvider}`); } } + + // Normalization needs presigned URLs, so it is only available on cloud storage + static processorEnabled() { + return ( + process.env.STORAGE_PROVIDER === 'cloudflare' && + !!process.env.RUNPOD_API_KEY && + !!process.env.RUNPOD_ENDPOINT_ID + ); + } + + static createProcessor(): IMediaProcessor | null { + if (!UploadFactory.processorEnabled()) { + return null; + } + + return new RunPodMediaProcessor( + process.env.RUNPOD_API_KEY!, + process.env.RUNPOD_ENDPOINT_ID! + ); + } } diff --git a/libraries/nestjs-libraries/src/upload/upload.interface.ts b/libraries/nestjs-libraries/src/upload/upload.interface.ts index 52c2f030f5..3fda973527 100644 --- a/libraries/nestjs-libraries/src/upload/upload.interface.ts +++ b/libraries/nestjs-libraries/src/upload/upload.interface.ts @@ -1,5 +1,26 @@ +import { Readable } from 'stream'; + +export interface UploadedStream { + filename: string; + originalname: string; + path: string; + mimetype: string; +} + export interface IUploadProvider { uploadSimple(path: string): Promise; uploadFile(file: Express.Multer.File): Promise; + // Streams the body straight into storage without buffering it. The caller + // has already sniffed the real type from the first bytes, so it passes the + // detected mime/ext instead of the provider re-sniffing a buffer + uploadStream( + stream: Readable, + mimetype: string, + ext: string + ): Promise; removeFile(filePath: string): Promise; + // Presigned URLs handed to the media processor, which has no storage + // credentials; only cloud storage can mint them + signDownloadUrl?(fileName: string): Promise; + signUploadUrl?(fileName: string, contentType: string): Promise; } diff --git a/libraries/nestjs-libraries/src/upload/upload.module.ts b/libraries/nestjs-libraries/src/upload/upload.module.ts index aa03d86e69..2853315ad7 100644 --- a/libraries/nestjs-libraries/src/upload/upload.module.ts +++ b/libraries/nestjs-libraries/src/upload/upload.module.ts @@ -1,10 +1,9 @@ import { Global, Module } from '@nestjs/common'; import { UploadFactory } from './upload.factory'; -import { CustomFileValidationPipe } from '@gitroom/nestjs-libraries/upload/custom.upload.validation'; @Global() @Module({ - providers: [UploadFactory, CustomFileValidationPipe], - exports: [UploadFactory, CustomFileValidationPipe], + providers: [UploadFactory], + exports: [UploadFactory], }) export class UploadModule {} diff --git a/libraries/nestjs-libraries/src/user/include.deleted.from.request.ts b/libraries/nestjs-libraries/src/user/include.deleted.from.request.ts new file mode 100644 index 0000000000..904c4219f7 --- /dev/null +++ b/libraries/nestjs-libraries/src/user/include.deleted.from.request.ts @@ -0,0 +1,8 @@ +import { createParamDecorator, ExecutionContext } from '@nestjs/common'; + +export const GetIncludeDeletedFromRequest = createParamDecorator( + (data: unknown, ctx: ExecutionContext) => { + const request = ctx.switchToHttp().getRequest(); + return !!request.includeDeleted; + } +); diff --git a/libraries/react-shared-libraries/src/helpers/uppy.upload.ts b/libraries/react-shared-libraries/src/helpers/uppy.upload.ts index 12af1cd579..acece4e7d7 100644 --- a/libraries/react-shared-libraries/src/helpers/uppy.upload.ts +++ b/libraries/react-shared-libraries/src/helpers/uppy.upload.ts @@ -2,6 +2,110 @@ import XHRUpload from '@uppy/xhr-upload'; import AwsS3Multipart from '@uppy/aws-s3'; import sha256 from 'sha256'; import Transloadit from '@uppy/transloadit'; +import { BasePlugin } from '@uppy/core'; + +const sleep = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms)); + +// Keeps a file in the "processing" state after it reached the bucket until the +// media normalization workflow marks the record ready, the same way +// Transloadit's waitForEncoding holds the dashboard until the assembly is done. +// Files whose record is already ready (no normalizer, gif, ...) pass through. +// The bytes are already stored, so giving up never fails the upload: the +// original file is used instead. +export class WaitForMediaProcessing extends BasePlugin { + constructor( + uppy: any, + opts: { + fetch: any; + processingMessage: string; + fallbackMessage: string; + interval?: number; + maxWait?: number; + } + ) { + super(uppy, opts); + this.id = 'WaitForMediaProcessing'; + this.type = 'modifier'; + } + + install() { + this.uppy.addPostProcessor(this.process); + } + + uninstall() { + this.uppy.removePostProcessor(this.process); + } + + process = async (fileIDs: string[]) => { + await Promise.all(fileIDs.map((id) => this.waitForFile(id))); + }; + + waitForFile = async (id: string) => { + const file: any = this.uppy.getFile(id); + const saved = file?.response?.body?.saved; + if (saved?.status !== 'processing') { + return; + } + + this.uppy.emit('postprocess-progress', file, { + mode: 'indeterminate', + message: this.opts.processingMessage, + }); + + const interval = this.opts.interval || 2000; + const deadline = Date.now() + (this.opts.maxWait || 20 * 60 * 1000); + let failures = 0; + let media: any = saved; + // the file disappears when the user cancels, so stop polling with it + while (this.uppy.getFile(id) && Date.now() < deadline && failures < 5) { + await sleep(interval); + + try { + const response = await ( + await this.opts.fetch(`/media/${saved.id}/status`) + ).json(); + // a 4xx body has no status; treat it like a failed poll + if (!response?.status) { + throw new Error(response?.message || 'Media not found'); + } + media = response; + failures = 0; + } catch (err) { + failures++; + continue; + } + + if (media.status !== 'processing') { + break; + } + } + + const current: any = this.uppy.getFile(id); + if (!current) { + return; + } + + if (media.status !== 'ready') { + // a file that only existed to be converted has nothing to fall back to + const usable = /\.(png|jpe?g|gif|webp|mp4)$/i.test(media.name || ''); + if (!usable) { + this.uppy.info(media.processingError || this.opts.fallbackMessage, 'error', 5000); + this.uppy.setFileState(id, { error: media.processingError || 'failed' } as any); + this.uppy.emit('postprocess-complete', this.uppy.getFile(id)); + return; + } + this.uppy.info(this.opts.fallbackMessage, 'warning', 5000); + } + + this.uppy.setFileState(id, { + response: { + ...current.response, + body: { ...current.response.body, saved: media }, + }, + } as any); + this.uppy.emit('postprocess-complete', this.uppy.getFile(id)); + }; +} const fetchUploadApiEndpoint = async ( fetch: any, endpoint: string, diff --git a/libraries/react-shared-libraries/src/helpers/variable.context.tsx b/libraries/react-shared-libraries/src/helpers/variable.context.tsx index 9313789235..f84252109e 100644 --- a/libraries/react-shared-libraries/src/helpers/variable.context.tsx +++ b/libraries/react-shared-libraries/src/helpers/variable.context.tsx @@ -40,6 +40,7 @@ export interface VariableContextInterface { language: string; dub: boolean; transloadit: string[]; + mediaProcessing: boolean; sentryDsn: string; extensionId: string; googleAdsId?: string; @@ -82,6 +83,7 @@ const VariableContext = createContext({ language: '', dub: false, transloadit: [], + mediaProcessing: false, sentryDsn: '', extensionId: '', brandConfig: defaultBrandWithCustom, diff --git a/libraries/react-shared-libraries/src/sentry/initialize.sentry.client.ts b/libraries/react-shared-libraries/src/sentry/initialize.sentry.client.ts index 60c2317136..48016b1fd6 100644 --- a/libraries/react-shared-libraries/src/sentry/initialize.sentry.client.ts +++ b/libraries/react-shared-libraries/src/sentry/initialize.sentry.client.ts @@ -38,8 +38,8 @@ export const initializeSentryClient = (environment: string, dsn: string) => }), Sentry.replayCanvasIntegration(), ], - replaysSessionSampleRate: 1.0, + replaysSessionSampleRate: 0.4, replaysOnErrorSampleRate: 1.0, - profilesSampleRate: environment === 'development' ? 1.0 : 0.75, + profilesSampleRate: environment === 'development' ? 1.0 : 0.60, }); diff --git a/libraries/react-shared-libraries/src/sentry/initialize.sentry.next.basic.ts b/libraries/react-shared-libraries/src/sentry/initialize.sentry.next.basic.ts index 29853bc81d..cde3b58c26 100644 --- a/libraries/react-shared-libraries/src/sentry/initialize.sentry.next.basic.ts +++ b/libraries/react-shared-libraries/src/sentry/initialize.sentry.next.basic.ts @@ -16,8 +16,19 @@ export const initializeSentryBasic = ( /^Load failed .*/i, /^NetworkError when attempting to fetch resource\.$/i, /^NetworkError when attempting to fetch resource\. .*/i, + /^Object captured as promise rejection with keys: code, message$/i, ]; + // Browser wallet extensions (Phantom, MetaMask, etc.) reject with a plain + // { code, message } object instead of an Error when the user closes their popup. + // Those rejections happen inside the extension's injected script, not in our code. + const isWalletExtensionRejection = (exception: unknown) => + !!exception && + typeof exception === 'object' && + !(exception instanceof Error) && + 'code' in exception && + 'message' in exception; + try { Sentry.init({ initialScope: { @@ -44,7 +55,7 @@ export const initializeSentryBasic = ( sendDefaultPii: true, ...extension, debug: environment === 'development', - tracesSampleRate: 1.0, + tracesSampleRate: 0.2, // Server tracing starts before the proxy exchanges the launch ticket. beforeSendTransaction(event) { @@ -64,6 +75,10 @@ export const initializeSentryBasic = ( ) ) return null; + if (isWalletExtensionRejection(hint?.originalException)) { + return null; // Ignore the event + } + if (event.exception && event.exception.values) { for (const exception of event.exception.values) { if (exception.value) { 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 a5008647fa..edebb4fa8c 100644 --- a/libraries/react-shared-libraries/src/translation/locales/ar/translation.json +++ b/libraries/react-shared-libraries/src/translation/locales/ar/translation.json @@ -575,7 +575,16 @@ "email_address": "عنوان البريد الإلكتروني", "email_already_exists": "البريد الإلكتروني موجود بالفعل", "google": "جوجل", + "apple": "تفاحة", "farcaster": "فاركاستر", + "farcaster_approve_instructions": "امسح رمز الاستجابة السريعة (QR) بهاتفك، أو افتح الرابط على هاتفك، ثم وافق على Postiz في تطبيق Farcaster.", + "farcaster_open_in_farcaster": "افتح في Farcaster", + "farcaster_waiting_for_approval": "بانتظار موافقتك...", + "farcaster_signer_revoked": "تم إلغاء موافقة Farcaster، يرجى المحاولة مرة أخرى", + "farcaster_signer_failed": "فشل بدء الاتصال بـ Farcaster", + "farcaster_scan_instructions": "امسح رمز الاستجابة السريعة (QR) بهاتفك، أو انسخ الرابط وافتحه على هاتفك، ثم وافق على Postiz في تطبيق Farcaster.", + "farcaster_copy_link": "انسخ رابط Farcaster", + "farcaster_approval_timeout": "انتهت مهلة موافقة Farcaster، يرجى المحاولة مرة أخرى", "edit_autopost": "تعديل النشر التلقائي", "add_autopost_title": "إضافة نشر تلقائي", "webhook_deleted_successfully": "تم حذف الويب هوك بنجاح", @@ -693,10 +702,31 @@ "connected_channels": "القنوات المتصلة", "continue": "متابعة", "continue_without_channels": "متابعة بدون قنوات", + "connect_agents": "ربط الوكلاء", + "connect_your_ai_agent": "اربط وكيل الذكاء الاصطناعي الخاص بك", + "connect_agent_description": "اختر الوكيل الذي تستخدمه ودعه ينشئ وجدول المنشورات نيابة عنك", + "agent_access_unavailable": "الوصول إلى الوكيل غير متاح في خطتك الحالية أو دورك. يمكنك إعداده لاحقًا من الإعدادات > المطورون.", + "sign_in_no_api_key": "تسجيل الدخول مع Postiz (بدون مفتاح API)", + "oauth_sign_in_hint": "سيفتح وكيلك نافذة متصفح لتسجيل الدخول إلى Postiz.", + "add_to_cursor": "أضف إلى المؤشر", + "cli": "CLI", + "other_agents": "وكلاء آخرون", + "documentation": "التوثيق", + "read_the_api_docs": "اقرأ مستندات واجهة برمجة التطبيقات", + "api_key_onboarding_description": "أرسلها كـ Authorization header في كل طلب", + "api_onboarding_description": "استخدم واجهة برمجة تطبيقات Postiz من كودك الخاص، n8n أو أي أتمتة أخرى", + "chat": "الدردشة", + "chat_onboarding_description": "لا حاجة لإعدادات MCP أو CLI. الصق هذا في الدردشة، سيقوم الوكيل بتثبيت Postiz CLI ويطلب منك مفتاح API الخاص بك.", + "connector": "موصل", + "connector_onboarding_description": "الأسرع: أضف Postiz بنقرة واحدة، سيطلب منك تسجيل الدخول", + "mcp_onboarding_description": "زود وكيلك بأدوات Postiz لإنشاء وجدولة وإدارة المنشورات", + "cli_onboarding_description": "ثبّت Postiz CLI والمهارة التي تعلم وكيلك كيفية استخدامها", + "agent_settings_later": "المزيد من الوكلاء والتعليمات الكاملة متوفرة في الإعدادات > المطورون", "watch_tutorial": "مشاهدة الدليل", "watch_tutorial_title": "تعلم كيفية استخدام Postiz", "watch_tutorial_description": "شاهد هذا الفيديو القصير لتتعلم كيف تستفيد من Postiz بأفضل شكل", "back": "رجوع", + "continue_skip": "متابعة / تخطي", "get_started": "ابدأ", "kick_select_channel": "اختر القناة", "annual": "سنوي", 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 2747b13b45..c4b21d5cd0 100644 --- a/libraries/react-shared-libraries/src/translation/locales/bn/translation.json +++ b/libraries/react-shared-libraries/src/translation/locales/bn/translation.json @@ -575,7 +575,16 @@ "email_address": "ইমেইল ঠিকানা", "email_already_exists": "ইমেইল ইতিমধ্যে বিদ্যমান", "google": "গুগল", + "apple": "আপেল", "farcaster": "ফারকাস্টার", + "farcaster_approve_instructions": "আপনার ফোন দিয়ে QR কোডটি স্ক্যান করুন অথবা লিঙ্কটি ফোনে খুলুন, তারপর Farcaster অ্যাপে Postiz অনুমোদন করুন।", + "farcaster_open_in_farcaster": "Farcaster-এ খুলুন", + "farcaster_waiting_for_approval": "আপনার অনুমোদনের জন্য অপেক্ষা করা হচ্ছে...", + "farcaster_signer_revoked": "Farcaster অনুমোদন বাতিল করা হয়েছে, অনুগ্রহ করে আবার চেষ্টা করুন", + "farcaster_signer_failed": "Farcaster সংযোগ শুরু করতে ব্যর্থ হয়েছে", + "farcaster_scan_instructions": "আপনার ফোন দিয়ে QR কোডটি স্ক্যান করুন, অথবা লিঙ্কটি কপি করে আপনার ফোনে খুলুন, এরপর Farcaster অ্যাপে Postiz অনুমোদন দিন।", + "farcaster_copy_link": "Farcaster লিঙ্ক কপি করুন", + "farcaster_approval_timeout": "Farcaster অনুমোদন সময় শেষ হয়েছে, অনুগ্রহ করে আবার চেষ্টা করুন", "edit_autopost": "অটোপোস্ট সম্পাদনা করুন", "add_autopost_title": "অটোপোস্ট যোগ করুন", "webhook_deleted_successfully": "ওয়েবহুক সফলভাবে মুছে ফেলা হয়েছে", @@ -693,10 +702,31 @@ "connected_channels": "সংযুক্ত চ্যানেলসমূহ", "continue": "চালিয়ে যান", "continue_without_channels": "চ্যানেল ছাড়াই চালিয়ে যান", + "connect_agents": "এজেন্ট সংযুক্ত করুন", + "connect_your_ai_agent": "আপনার AI এজেন্ট সংযুক্ত করুন", + "connect_agent_description": "আপনার ব্যবহৃত এজেন্টটি নির্বাচন করুন এবং তাকে পোস্ট তৈরি ও নির্ধারিত করতে দিন", + "agent_access_unavailable": "আপনার বর্তমান প্ল্যান বা ভূমিকার জন্য এজেন্ট অ্যাক্সেস উপলব্ধ নয়। আপনি পরে সেটিংস > ডেভেলপারস-এ সেট আপ করতে পারেন।", + "sign_in_no_api_key": "Postiz-এ সাইন ইন করুন (কোনো API কী ছাড়াই)", + "oauth_sign_in_hint": "আপনার এজেন্ট Postiz-এ সাইন ইন করার জন্য একটি ব্রাউজার উইন্ডো খুলবে।", + "add_to_cursor": "কার্সারে যোগ করুন", + "cli": "CLI", + "other_agents": "অন্যান্য এজেন্ট", + "documentation": "ডকুমেন্টেশন", + "read_the_api_docs": "API ডকুমেন্টেশন পড়ুন", + "api_key_onboarding_description": "প্রত্যেক অনুরোধের সাথে এটিকে Authorization হেডার হিসেবে পাঠান", + "api_onboarding_description": "নিজের কোড, n8n বা অন্য কোনো অটোমেশনের মাধ্যমে Postiz API ব্যবহার করুন", + "chat": "চ্যাট", + "chat_onboarding_description": "MCP বা CLI সেটিংসের প্রয়োজন নেই। এটি চ্যাটে পেস্ট করুন, এজেন্টটি Postiz CLI ইনস্টল করবে এবং আপনার API কী চাইবে।", + "connector": "কনেক্টর", + "connector_onboarding_description": "সবচেয়ে দ্রুত উপায়: এক ক্লিকে Postiz যোগ করুন, আপনাকে সাইন ইন করতে বলা হবে", + "mcp_onboarding_description": "আপনার এজেন্টকে Postiz টুল দিন যাতে সে পোস্ট তৈরি, নির্ধারণ এবং পরিচালনা করতে পারে", + "cli_onboarding_description": "Postiz CLI এবং সেই স্কিল ইনস্টল করুন যা আপনার এজেন্টকে এটি ব্যবহার করতে শেখায়", + "agent_settings_later": "আরও এজেন্ট এবং সম্পূর্ণ নির্দেশিকা সেটিংস > ডেভেলপারস-এ পাওয়া যাবে", "watch_tutorial": "টিউটোরিয়াল দেখুন", "watch_tutorial_title": "Postiz ব্যবহারের উপায় শিখুন", "watch_tutorial_description": "Postiz সর্বোচ্চভাবে কাজে লাগাতে এই সংক্ষিপ্ত ভিডিওটি দেখুন", "back": "পেছনে যান", + "continue_skip": "চালিয়ে যান / বাদ দিন", "get_started": "শুরু করুন", "kick_select_channel": "চ্যানেল নির্বাচন করুন", "annual": "বার্ষিক", 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 38203a66be..1d2f5347fb 100644 --- a/libraries/react-shared-libraries/src/translation/locales/de/translation.json +++ b/libraries/react-shared-libraries/src/translation/locales/de/translation.json @@ -575,7 +575,16 @@ "email_address": "E-Mail-Adresse", "email_already_exists": "E-Mail existiert bereits", "google": "Google", + "apple": "Apfel", "farcaster": "Farcaster", + "farcaster_approve_instructions": "Scanne den QR-Code mit deinem Handy oder öffne den Link auf deinem Handy und bestätige dann Postiz in der Farcaster-App.", + "farcaster_open_in_farcaster": "In Farcaster öffnen", + "farcaster_waiting_for_approval": "Warte auf deine Bestätigung...", + "farcaster_signer_revoked": "Die Farcaster-Bestätigung wurde widerrufen, bitte versuche es erneut.", + "farcaster_signer_failed": "Die Verbindung zu Farcaster konnte nicht gestartet werden.", + "farcaster_scan_instructions": "Scannen Sie den QR-Code mit Ihrem Handy oder kopieren Sie den Link und öffnen Sie ihn auf Ihrem Handy. Genehmigen Sie dann Postiz in der Farcaster-App.", + "farcaster_copy_link": "Farcaster-Link kopieren", + "farcaster_approval_timeout": "Zeitüberschreitung bei der Farcaster-Bestätigung, bitte versuche es erneut.", "edit_autopost": "Autopost bearbeiten", "add_autopost_title": "Autopost hinzufügen", "webhook_deleted_successfully": "Webhook erfolgreich gelöscht", @@ -693,10 +702,31 @@ "connected_channels": "Verbundene Kanäle", "continue": "Weiter", "continue_without_channels": "Ohne Kanäle fortfahren", + "connect_agents": "Agenten verbinden", + "connect_your_ai_agent": "Verbinde deinen KI-Agenten", + "connect_agent_description": "Wähle den Agenten, den du nutzt, damit er Beiträge für dich erstellen und planen kann.", + "agent_access_unavailable": "Agentenzugriff ist für deinen aktuellen Plan oder deine Rolle nicht verfügbar. Du kannst ihn später unter Einstellungen > Entwickler einrichten.", + "sign_in_no_api_key": "Mit Postiz anmelden (kein API-Schlüssel)", + "oauth_sign_in_hint": "Dein Agent öffnet ein Browserfenster, um sich bei Postiz anzumelden.", + "add_to_cursor": "Zum Cursor hinzufügen", + "cli": "CLI", + "other_agents": "Weitere Agenten", + "documentation": "Dokumentation", + "read_the_api_docs": "Lies die API-Dokumentation", + "api_key_onboarding_description": "Sende ihn bei jeder Anfrage als Authorization-Header mit.", + "api_onboarding_description": "Nutze die Postiz API aus deinem eigenen Code, n8n oder einer anderen Automatisierungslösung.", + "chat": "Chat", + "chat_onboarding_description": "Kein MCP oder CLI Setup nötig. Füge das in den Chat ein und der Agent installiert das Postiz CLI und fragt dich nach deinem API-Schlüssel.", + "connector": "Konnektor", + "connector_onboarding_description": "Am schnellsten: Füge Postiz mit einem Klick hinzu, du wirst zur Anmeldung aufgefordert.", + "mcp_onboarding_description": "Gib deinem Agenten Postiz-Tools, um Beiträge zu erstellen, zu planen und zu verwalten.", + "cli_onboarding_description": "Installiere das Postiz CLI und das Skill, das deinem Agenten beibringt, wie es zu nutzen ist.", + "agent_settings_later": "Weitere Agenten und vollständige Anweisungen findest du unter Einstellungen > Entwickler.", "watch_tutorial": "Tutorial ansehen", "watch_tutorial_title": "Lerne, wie du Postiz benutzt", "watch_tutorial_description": "Sieh dir dieses kurze Video an, um das Beste aus Postiz herauszuholen", "back": "Zurück", + "continue_skip": "Weiter / Überspringen", "get_started": "Loslegen", "kick_select_channel": "Kanal auswählen", "annual": "Jährlich", 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 2d9252f525..eafd8f855f 100644 --- a/libraries/react-shared-libraries/src/translation/locales/en/translation.json +++ b/libraries/react-shared-libraries/src/translation/locales/en/translation.json @@ -578,6 +578,14 @@ "google": "Google", "apple": "Apple", "farcaster": "Farcaster", + "farcaster_approve_instructions": "Scan the QR code with your phone, or open the link on your phone, then approve Postiz in the Farcaster app.", + "farcaster_open_in_farcaster": "Open in Farcaster", + "farcaster_waiting_for_approval": "Waiting for your approval...", + "farcaster_signer_revoked": "The Farcaster approval was revoked, please try again", + "farcaster_signer_failed": "Failed to start the Farcaster connection", + "farcaster_scan_instructions": "Scan the QR code with your phone, or copy the link and open it on your phone, then approve Postiz in the Farcaster app.", + "farcaster_copy_link": "Copy Farcaster link", + "farcaster_approval_timeout": "Farcaster approval timed out, please try again", "edit_autopost": "Edit Autopost", "add_autopost_title": "Add Autopost", "webhook_deleted_successfully": "Webhook deleted successfully", 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 c8302a9601..341056dc46 100644 --- a/libraries/react-shared-libraries/src/translation/locales/es/translation.json +++ b/libraries/react-shared-libraries/src/translation/locales/es/translation.json @@ -575,7 +575,16 @@ "email_address": "Dirección de correo electrónico", "email_already_exists": "El correo electrónico ya existe", "google": "Google", + "apple": "Manzana", "farcaster": "Farcaster", + "farcaster_approve_instructions": "Escanee el código QR con su teléfono o abra el enlace en su teléfono, luego apruebe Postiz en la app de Farcaster.", + "farcaster_open_in_farcaster": "Abrir en Farcaster", + "farcaster_waiting_for_approval": "Esperando su aprobación...", + "farcaster_signer_revoked": "La aprobación de Farcaster fue revocada, intente nuevamente", + "farcaster_signer_failed": "No se pudo iniciar la conexión con Farcaster", + "farcaster_scan_instructions": "Escanea el código QR con tu teléfono, o copia el enlace y ábrelo en tu teléfono, luego aprueba Postiz en la app de Farcaster.", + "farcaster_copy_link": "Copiar enlace de Farcaster", + "farcaster_approval_timeout": "El tiempo de aprobación de Farcaster se agotó, intente nuevamente", "edit_autopost": "Editar autopublicación", "add_autopost_title": "Agregar autopublicación", "webhook_deleted_successfully": "Webhook eliminado correctamente", @@ -693,10 +702,31 @@ "connected_channels": "Canales conectados", "continue": "Continuar", "continue_without_channels": "Continuar sin canales", + "connect_agents": "Conectar agentes", + "connect_your_ai_agent": "Conecta tu agente de IA", + "connect_agent_description": "Elige el agente que usas y deja que cree y programe publicaciones por ti", + "agent_access_unavailable": "El acceso del agente no está disponible para tu plan o rol actual. Puedes configurarlo más tarde en Configuración > Desarrolladores.", + "sign_in_no_api_key": "Inicia sesión con Postiz (sin clave API)", + "oauth_sign_in_hint": "Tu agente abrirá una ventana en el navegador para iniciar sesión en Postiz.", + "add_to_cursor": "Agregar al Cursor", + "cli": "CLI", + "other_agents": "Otros agentes", + "documentation": "Documentación", + "read_the_api_docs": "Lee la documentación del API", + "api_key_onboarding_description": "Envíala como el encabezado de Autorización en cada solicitud", + "api_onboarding_description": "Usa el API de Postiz desde tu propio código, n8n o cualquier otra automatización", + "chat": "Chat", + "chat_onboarding_description": "No necesitas configuraciones de MCP ni de CLI. Pega esto en el chat, el agente instalará el CLI de Postiz y te pedirá tu clave API.", + "connector": "Conector", + "connector_onboarding_description": "La forma más rápida: agrega Postiz con un clic, se te pedirá iniciar sesión", + "mcp_onboarding_description": "Dale a tu agente las herramientas de Postiz para crear, programar y gestionar publicaciones", + "cli_onboarding_description": "Instala el CLI de Postiz y la habilidad que enseña a tu agente cómo utilizarlo", + "agent_settings_later": "Más agentes y las instrucciones completas están disponibles en Configuración > Desarrolladores", "watch_tutorial": "Ver tutorial", "watch_tutorial_title": "Aprende a usar Postiz", "watch_tutorial_description": "Mira este breve video para aprender a sacar el máximo provecho de Postiz", "back": "Atrás", + "continue_skip": "Continuar / Omitir", "get_started": "Comenzar", "kick_select_channel": "Seleccionar canal", "annual": "Anual", 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 ebb0e8d479..5289e94fa5 100644 --- a/libraries/react-shared-libraries/src/translation/locales/fr/translation.json +++ b/libraries/react-shared-libraries/src/translation/locales/fr/translation.json @@ -575,7 +575,16 @@ "email_address": "Adresse e-mail", "email_already_exists": "L'adresse e-mail existe déjà", "google": "Google", + "apple": "Pomme", "farcaster": "Farcaster", + "farcaster_approve_instructions": "Scannez le code QR avec votre téléphone, ou ouvrez le lien sur votre téléphone, puis approuvez Postiz dans l’application Farcaster.", + "farcaster_open_in_farcaster": "Ouvrir dans Farcaster", + "farcaster_waiting_for_approval": "En attente de votre approbation...", + "farcaster_signer_revoked": "L’approbation Farcaster a été révoquée, veuillez réessayer", + "farcaster_signer_failed": "Échec de la connexion à Farcaster", + "farcaster_scan_instructions": "Scannez le code QR avec votre téléphone, ou copiez le lien et ouvrez-le sur votre téléphone, puis approuvez Postiz dans l’application Farcaster.", + "farcaster_copy_link": "Copier le lien Farcaster", + "farcaster_approval_timeout": "Le délai d’approbation Farcaster est dépassé, veuillez réessayer", "edit_autopost": "Modifier l'autopost", "add_autopost_title": "Ajouter un autopost", "webhook_deleted_successfully": "Webhook supprimé avec succès", @@ -693,10 +702,31 @@ "connected_channels": "Canaux connectés", "continue": "Continuer", "continue_without_channels": "Continuer sans canaux", + "connect_agents": "Connecter des agents", + "connect_your_ai_agent": "Connectez votre agent IA", + "connect_agent_description": "Choisissez l’agent que vous utilisez et laissez-le créer et programmer des publications pour vous", + "agent_access_unavailable": "L’accès agent n’est pas disponible pour votre plan ou votre rôle actuel. Vous pouvez le configurer plus tard dans Paramètres > Développeurs.", + "sign_in_no_api_key": "Se connecter avec Postiz (pas de clé API)", + "oauth_sign_in_hint": "Votre agent ouvrira une fenêtre de navigateur pour se connecter à Postiz.", + "add_to_cursor": "Ajouter au curseur", + "cli": "CLI", + "other_agents": "Autres agents", + "documentation": "Documentation", + "read_the_api_docs": "Lire la documentation de l’API", + "api_key_onboarding_description": "Envoyez-la en tant qu’en-tête Authorization à chaque requête", + "api_onboarding_description": "Utilisez l’API Postiz depuis votre propre code, n8n ou toute autre automatisation", + "chat": "Chat", + "chat_onboarding_description": "Aucun paramétrage MCP ou CLI nécessaire. Collez ceci dans le chat, l’agent installe le CLI Postiz et vous demande votre clé API.", + "connector": "Connecteur", + "connector_onboarding_description": "La façon la plus rapide : ajoutez Postiz en un clic, vous serez invité à vous connecter", + "mcp_onboarding_description": "Donnez à votre agent des outils Postiz pour créer, programmer et gérer des publications", + "cli_onboarding_description": "Installez le CLI Postiz et la compétence qui apprend à votre agent à l’utiliser", + "agent_settings_later": "Plus d’agents et les instructions complètes sont disponibles dans Paramètres > Développeurs", "watch_tutorial": "Regarder le tutoriel", "watch_tutorial_title": "Apprenez à utiliser Postiz", "watch_tutorial_description": "Regardez cette courte vidéo pour apprendre à tirer le meilleur parti de Postiz", "back": "Retour", + "continue_skip": "Continuer / Passer", "get_started": "Commencer", "kick_select_channel": "Sélectionner le canal", "annual": "Annuel", 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 4b963c59e9..c80453e5e5 100644 --- a/libraries/react-shared-libraries/src/translation/locales/he/translation.json +++ b/libraries/react-shared-libraries/src/translation/locales/he/translation.json @@ -575,7 +575,16 @@ "email_address": "כתובת אימייל", "email_already_exists": "האימייל כבר קיים", "google": "גוגל", + "apple": "תפוח", "farcaster": "Farcaster", + "farcaster_approve_instructions": "סרקו את קוד ה-QR עם הטלפון שלכם, או פתחו את הקישור בטלפון ואז אשרו את Postiz באפליקציית Farcaster.", + "farcaster_open_in_farcaster": "פתחו ב-Farcaster", + "farcaster_waiting_for_approval": "מחכים לאישור ממך...", + "farcaster_signer_revoked": "האישור של Farcaster בוטל, נא לנסות שוב", + "farcaster_signer_failed": "החיבור ל-Farcaster נכשל", + "farcaster_scan_instructions": "סרוק את קוד ה-QR עם הטלפון שלך, או העתק את הקישור ופתח אותו בטלפון, ואז אשר את Postiz באפליקציית Farcaster.", + "farcaster_copy_link": "העתק קישור Farcaster", + "farcaster_approval_timeout": "פג תוקף האישור מ-Farcaster, נא לנסות שוב", "edit_autopost": "ערוך פרסום אוטומטי", "add_autopost_title": "הוסף פרסום אוטומטי", "webhook_deleted_successfully": "ה-Webhook נמחק בהצלחה", @@ -693,10 +702,31 @@ "connected_channels": "ערוצים מחוברים", "continue": "המשך", "continue_without_channels": "המשך ללא ערוצים", + "connect_agents": "חברו סוכנים", + "connect_your_ai_agent": "חברו את סוכן ה-AI שלכם", + "connect_agent_description": "בחרו את הסוכן שאתם משתמשים בו ותנו לו ליצור ולתזמן פוסטים עבורכם", + "agent_access_unavailable": "הגישה לסוכן אינה זמינה בתוכנית או בתפקיד הנוכחיים שלכם. ניתן להגדיר זאת מאוחר יותר בהגדרות > מפתחים.", + "sign_in_no_api_key": "התחברו ל-Postiz (ללא מפתח API)", + "oauth_sign_in_hint": "הסוכן שלכם יפתח חלון דפדפן כדי להיכנס ל-Postiz.", + "add_to_cursor": "הוסיפו ל-Cursor", + "cli": "CLI", + "other_agents": "סוכנים נוספים", + "documentation": "תיעוד", + "read_the_api_docs": "קראו את מסמכי ה-API", + "api_key_onboarding_description": "שלחו אותו בכותרת Authorization בכל בקשה", + "api_onboarding_description": "השתמשו ב-API של Postiz מהקוד שלכם, n8n או כל אוטומציה אחרת", + "chat": "צ'אט", + "chat_onboarding_description": "אין צורך ב-MCP או הגדרות CLI. העתיקו את זה לצ'אט, הסוכן יתקין את Postiz CLI וישאל אתכם את מפתח ה-API שלכם.", + "connector": "מחבר", + "connector_onboarding_description": "הדרך המהירה ביותר: הוסיפו את Postiz בלחיצה אחת, תתבקשו להתחבר", + "mcp_onboarding_description": "העניקו לסוכן שלכם כלים של Postiz ליצירת, תזמון וניהול פוסטים", + "cli_onboarding_description": "התקינו את Postiz CLI ואת המיומנות שמלמדת את הסוכן איך להשתמש בו", + "agent_settings_later": "סוכנים נוספים והוראות מלאות זמינים תחת הגדרות > מפתחים", "watch_tutorial": "צפה במדריך", "watch_tutorial_title": "למד כיצד להשתמש ב-Postiz", "watch_tutorial_description": "צפה בסרטון הקצר הזה ולמד כיצד להפיק את המרב מ-Postiz", "back": "חזרה", + "continue_skip": "המשך / דלג", "get_started": "התחלה", "kick_select_channel": "בחר ערוץ", "annual": "שנתי", 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 2e4cd0717c..8c12fd08df 100644 --- a/libraries/react-shared-libraries/src/translation/locales/it/translation.json +++ b/libraries/react-shared-libraries/src/translation/locales/it/translation.json @@ -575,7 +575,16 @@ "email_address": "Indirizzo email", "email_already_exists": "L'email esiste già", "google": "Google", + "apple": "Mela", "farcaster": "Farcaster", + "farcaster_approve_instructions": "Scansiona il codice QR con il tuo telefono, oppure apri il link sul tuo telefono e poi approva Postiz nell'app Farcaster.", + "farcaster_open_in_farcaster": "Apri in Farcaster", + "farcaster_waiting_for_approval": "In attesa della tua approvazione...", + "farcaster_signer_revoked": "L'approvazione di Farcaster è stata revocata, riprova", + "farcaster_signer_failed": "Impossibile avviare la connessione con Farcaster", + "farcaster_scan_instructions": "Scansiona il codice QR con il tuo telefono, oppure copia il link e aprilo sul tuo telefono, quindi approva Postiz nell'app Farcaster.", + "farcaster_copy_link": "Copia il link di Farcaster", + "farcaster_approval_timeout": "L'approvazione di Farcaster è scaduta, riprova", "edit_autopost": "Modifica autopost", "add_autopost_title": "Aggiungi autopost", "webhook_deleted_successfully": "Webhook eliminato con successo", @@ -693,10 +702,31 @@ "connected_channels": "Canali collegati", "continue": "Continua", "continue_without_channels": "Continua senza canali", + "connect_agents": "Collega Agenti", + "connect_your_ai_agent": "Collega il tuo agente AI", + "connect_agent_description": "Scegli l'agente che usi e lascia che crei e programmi post per te", + "agent_access_unavailable": "L'accesso agli agenti non è disponibile per il tuo attuale piano o ruolo. Puoi configurarlo più tardi in Impostazioni > Sviluppatori.", + "sign_in_no_api_key": "Accedi con Postiz (nessuna API key)", + "oauth_sign_in_hint": "Il tuo agente aprirà una finestra del browser per accedere a Postiz.", + "add_to_cursor": "Aggiungi al Cursor", + "cli": "CLI", + "other_agents": "Altri agenti", + "documentation": "Documentazione", + "read_the_api_docs": "Leggi la documentazione API", + "api_key_onboarding_description": "Invialo come header Authorization in ogni richiesta", + "api_onboarding_description": "Usa le API di Postiz dal tuo codice, n8n o qualsiasi altra automazione", + "chat": "Chat", + "chat_onboarding_description": "Nessuna impostazione MCP o CLI necessaria. Incolla questo nella chat, l'agente installerà il Postiz CLI e ti chiederà la tua API key.", + "connector": "Connettore", + "connector_onboarding_description": "Il modo più veloce: aggiungi Postiz con un clic, ti verrà chiesto di accedere", + "mcp_onboarding_description": "Dai al tuo agente gli strumenti Postiz per creare, programmare e gestire post", + "cli_onboarding_description": "Installa il Postiz CLI e la skill che insegna al tuo agente come usarlo", + "agent_settings_later": "Altri agenti e istruzioni complete sono disponibili in Impostazioni > Sviluppatori", "watch_tutorial": "Guarda il tutorial", "watch_tutorial_title": "Scopri come usare Postiz", "watch_tutorial_description": "Guarda questo breve video per imparare a sfruttare al meglio Postiz", "back": "Indietro", + "continue_skip": "Continua / Salta", "get_started": "Inizia", "kick_select_channel": "Seleziona canale", "annual": "Annuale", 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 155a3d1a64..0ce5b6b737 100644 --- a/libraries/react-shared-libraries/src/translation/locales/ja/translation.json +++ b/libraries/react-shared-libraries/src/translation/locales/ja/translation.json @@ -575,7 +575,16 @@ "email_address": "メールアドレス", "email_already_exists": "メールアドレスは既に存在します", "google": "Google", + "apple": "アップル", "farcaster": "Farcaster", + "farcaster_approve_instructions": "スマートフォンでQRコードをスキャンするか、リンクをスマートフォンで開き、FarcasterアプリでPostizを承認してください。", + "farcaster_open_in_farcaster": "Farcasterで開く", + "farcaster_waiting_for_approval": "承認をお待ちしています...", + "farcaster_signer_revoked": "Farcasterの承認が取り消されました。もう一度お試しください。", + "farcaster_signer_failed": "Farcaster接続の開始に失敗しました", + "farcaster_scan_instructions": "QRコードをスマートフォンでスキャンするか、リンクをコピーしてスマートフォンで開き、FarcasterアプリでPostizを承認してください。", + "farcaster_copy_link": "Farcasterのリンクをコピー", + "farcaster_approval_timeout": "Farcasterの承認がタイムアウトしました。もう一度お試しください。", "edit_autopost": "自動投稿を編集", "add_autopost_title": "自動投稿を追加", "webhook_deleted_successfully": "Webhookが正常に削除されました", @@ -693,10 +702,31 @@ "connected_channels": "接続済みチャンネル", "continue": "続行", "continue_without_channels": "チャンネルなしで続行", + "connect_agents": "エージェントを接続", + "connect_your_ai_agent": "AIエージェントを接続", + "connect_agent_description": "利用するエージェントを選んで、投稿の作成・スケジュール管理を任せましょう", + "agent_access_unavailable": "現在のプランまたはロールではエージェントアクセスをご利用いただけません。設定 > 開発者 で後から設定することもできます。", + "sign_in_no_api_key": "Postizでサインイン(APIキー不要)", + "oauth_sign_in_hint": "エージェントがPostizにサインインするためのブラウザウィンドウを開きます。", + "add_to_cursor": "カーソルに追加", + "cli": "CLI", + "other_agents": "その他のエージェント", + "documentation": "ドキュメント", + "read_the_api_docs": "APIドキュメントを読む", + "api_key_onboarding_description": "すべてのリクエストで Authorization ヘッダーとして送信してください。", + "api_onboarding_description": "Postiz APIを自分のコードやn8n、その他の自動化から利用できます。", + "chat": "チャット", + "chat_onboarding_description": "MCPやCLIの設定は不要です。これをチャットに貼り付けるだけで、エージェントがPostiz CLIをインストールし、APIキーを尋ねます。", + "connector": "コネクタ", + "connector_onboarding_description": "最速の方法: ワンクリックでPostizを追加、サインインが求められます。", + "mcp_onboarding_description": "エージェントにPostizのツールを使わせて、投稿の作成やスケジュール管理をさせましょう。", + "cli_onboarding_description": "Postiz CLIと、それを使い方をエージェントに教えるスキルをインストールします。", + "agent_settings_later": "その他のエージェントや詳細な手順は、設定 > 開発者 から利用できます。", "watch_tutorial": "チュートリアルを見る", "watch_tutorial_title": "Postizの使い方を学ぶ", "watch_tutorial_description": "この短い動画を見て、Postizを最大限に活用する方法を学びましょう", "back": "戻る", + "continue_skip": "続行 / スキップ", "get_started": "開始", "kick_select_channel": "チャンネルを選択", "annual": "年額", 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 f2234dcefe..9dc6d1049d 100644 --- a/libraries/react-shared-libraries/src/translation/locales/ko/translation.json +++ b/libraries/react-shared-libraries/src/translation/locales/ko/translation.json @@ -575,7 +575,16 @@ "email_address": "이메일 주소", "email_already_exists": "이미 존재하는 이메일입니다", "google": "구글", + "apple": "애플", "farcaster": "파캐스터", + "farcaster_approve_instructions": "휴대폰으로 QR 코드를 스캔하거나, 링크를 휴대폰에서 열어 Farcaster 앱에서 Postiz 승인을 진행하세요.", + "farcaster_open_in_farcaster": "Farcaster에서 열기", + "farcaster_waiting_for_approval": "승인을 기다리는 중...", + "farcaster_signer_revoked": "Farcaster 승인이 취소되었습니다. 다시 시도해 주세요.", + "farcaster_signer_failed": "Farcaster 연결을 시작하지 못했습니다.", + "farcaster_scan_instructions": "휴대폰으로 QR 코드를 스캔하거나 링크를 복사해서 휴대폰에서 연 다음, Farcaster 앱에서 Postiz를 승인하세요.", + "farcaster_copy_link": "Farcaster 링크 복사", + "farcaster_approval_timeout": "Farcaster 승인 시간이 초과되었습니다. 다시 시도해 주세요.", "edit_autopost": "자동 게시 수정", "add_autopost_title": "자동 게시 추가", "webhook_deleted_successfully": "웹훅이 성공적으로 삭제되었습니다", @@ -693,10 +702,31 @@ "connected_channels": "연결된 채널", "continue": "계속하기", "continue_without_channels": "채널 없이 계속하기", + "connect_agents": "에이전트 연결", + "connect_your_ai_agent": "AI 에이전트 연결", + "connect_agent_description": "사용할 에이전트를 선택하면, 게시물을 생성하고 예약할 수 있습니다.", + "agent_access_unavailable": "현재 요금제 또는 역할에서는 에이전트 접근이 불가능합니다. 설정 > 개발자에서 나중에 설정할 수 있습니다.", + "sign_in_no_api_key": "Postiz로 로그인 (API 키 불필요)", + "oauth_sign_in_hint": "에이전트가 Postiz 로그인을 위해 브라우저 창을 엽니다.", + "add_to_cursor": "Cursor에 추가", + "cli": "CLI", + "other_agents": "기타 에이전트", + "documentation": "문서", + "read_the_api_docs": "API 문서 읽기", + "api_key_onboarding_description": "모든 요청에 Authorization 헤더로 전송하세요.", + "api_onboarding_description": "Postiz API를 직접 코드, n8n, 또는 다른 자동화 도구에서 사용하세요.", + "chat": "채팅", + "chat_onboarding_description": "MCP나 CLI 설정이 필요 없습니다. 채팅에 이 내용을 붙여넣으면 에이전트가 Postiz CLI를 설치하고 API 키를 입력받습니다.", + "connector": "커넥터", + "connector_onboarding_description": "가장 빠른 방법: 한 번의 클릭으로 Postiz를 추가하고, 로그인 요청을 받게 됩니다.", + "mcp_onboarding_description": "에이전트에게 Postiz 도구를 제공해 게시물을 생성, 예약, 관리할 수 있습니다.", + "cli_onboarding_description": "Postiz CLI와 에이전트에게 사용법을 알려주는 스킬을 설치하세요.", + "agent_settings_later": "더 많은 에이전트와 전체 안내는 설정 > 개발자에서 볼 수 있습니다.", "watch_tutorial": "튜토리얼 보기", "watch_tutorial_title": "Postiz 사용법 배우기", "watch_tutorial_description": "이 짧은 영상을 통해 Postiz를 최대한 활용하는 방법을 알아보세요", "back": "뒤로가기", + "continue_skip": "계속 / 건너뛰기", "get_started": "시작하기", "kick_select_channel": "채널 선택", "annual": "연간", 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 0c6e50fbef..08b003921b 100644 --- a/libraries/react-shared-libraries/src/translation/locales/pt/translation.json +++ b/libraries/react-shared-libraries/src/translation/locales/pt/translation.json @@ -575,7 +575,16 @@ "email_address": "Endereço de e-mail", "email_already_exists": "O e-mail já existe", "google": "Google", + "apple": "Maçã", "farcaster": "Farcaster", + "farcaster_approve_instructions": "Escaneie o código QR com seu celular, ou abra o link no seu celular, depois aprove o Postiz no app Farcaster.", + "farcaster_open_in_farcaster": "Abrir no Farcaster", + "farcaster_waiting_for_approval": "Aguardando sua aprovação...", + "farcaster_signer_revoked": "A aprovação do Farcaster foi revogada, por favor, tente novamente", + "farcaster_signer_failed": "Falha ao iniciar a conexão com o Farcaster", + "farcaster_scan_instructions": "Escaneie o código QR com seu celular ou copie o link e abra-o no seu celular, depois aprove o Postiz no aplicativo Farcaster.", + "farcaster_copy_link": "Copiar link do Farcaster", + "farcaster_approval_timeout": "A aprovação do Farcaster expirou, por favor, tente novamente", "edit_autopost": "Editar autopost", "add_autopost_title": "Adicionar autopost", "webhook_deleted_successfully": "Webhook excluído com sucesso", @@ -693,10 +702,31 @@ "connected_channels": "Canais conectados", "continue": "Continuar", "continue_without_channels": "Continuar sem canais", + "connect_agents": "Conectar Agentes", + "connect_your_ai_agent": "Conecte Seu Agente de IA", + "connect_agent_description": "Escolha o agente que você usa e deixe-o criar e agendar posts para você", + "agent_access_unavailable": "O acesso ao agente não está disponível para seu plano ou função atual. Você pode configurá-lo mais tarde em Configurações > Desenvolvedores.", + "sign_in_no_api_key": "Entrar com o Postiz (sem chave de API)", + "oauth_sign_in_hint": "Seu agente abrirá uma janela do navegador para fazer login no Postiz.", + "add_to_cursor": "Adicionar ao Cursor", + "cli": "CLI", + "other_agents": "Outros agentes", + "documentation": "Documentação", + "read_the_api_docs": "Leia a documentação da API", + "api_key_onboarding_description": "Envie como o cabeçalho Authorization em todas as requisições", + "api_onboarding_description": "Use a API do Postiz a partir do seu próprio código, n8n ou qualquer outra automação", + "chat": "Chat", + "chat_onboarding_description": "Não precisa de configurações MCP ou CLI. Cole isso no chat, o agente instala o Postiz CLI e pede sua chave de API.", + "connector": "Conector", + "connector_onboarding_description": "A forma mais rápida: adicione o Postiz com um clique, será solicitado que você faça login", + "mcp_onboarding_description": "Dê ao seu agente as ferramentas Postiz para criar, agendar e gerenciar posts", + "cli_onboarding_description": "Instale o Postiz CLI e a skill que ensina seu agente como usá-lo", + "agent_settings_later": "Mais agentes e instruções completas estão disponíveis em Configurações > Desenvolvedores", "watch_tutorial": "Assistir ao tutorial", "watch_tutorial_title": "Aprenda a usar o Postiz", "watch_tutorial_description": "Assista a este vídeo curto para aprender a tirar o máximo proveito do Postiz", "back": "Voltar", + "continue_skip": "Continuar / Pular", "get_started": "Começar", "kick_select_channel": "Selecionar canal", "annual": "Anual", 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 7a89b62dc5..532f03dee1 100644 --- a/libraries/react-shared-libraries/src/translation/locales/ru/translation.json +++ b/libraries/react-shared-libraries/src/translation/locales/ru/translation.json @@ -575,7 +575,16 @@ "email_address": "Адрес электронной почты", "email_already_exists": "Электронная почта уже существует", "google": "Google", + "apple": "Яблоко", "farcaster": "Farcaster", + "farcaster_approve_instructions": "Отсканируйте QR-код с помощью телефона или откройте ссылку на своём телефоне, затем одобрите Postiz в приложении Farcaster.", + "farcaster_open_in_farcaster": "Открыть в Farcaster", + "farcaster_waiting_for_approval": "Ожидание вашего одобрения...", + "farcaster_signer_revoked": "Одобрение Farcaster было отозвано, попробуйте ещё раз", + "farcaster_signer_failed": "Не удалось запустить соединение с Farcaster", + "farcaster_scan_instructions": "Просканируйте QR-код с помощью телефона или скопируйте ссылку и откройте её на телефоне, затем подтвердите Postiz в приложении Farcaster.", + "farcaster_copy_link": "Скопировать ссылку Farcaster", + "farcaster_approval_timeout": "Время ожидания одобрения Farcaster истекло, попробуйте ещё раз", "edit_autopost": "Редактировать автопост", "add_autopost_title": "Добавить автопост", "webhook_deleted_successfully": "Вебхук успешно удалён", @@ -693,10 +702,31 @@ "connected_channels": "Подключенные каналы", "continue": "Продолжить", "continue_without_channels": "Продолжить без каналов", + "connect_agents": "Подключить агентов", + "connect_your_ai_agent": "Подключите вашего ИИ-агента", + "connect_agent_description": "Выберите используемого агента, чтобы он мог создавать и планировать публикации за вас", + "agent_access_unavailable": "Доступ к агенту недоступен для вашего текущего тарифа или роли. Позже вы сможете настроить это в Настройки > Разработчики.", + "sign_in_no_api_key": "Войти через Postiz (без API-ключа)", + "oauth_sign_in_hint": "Ваш агент откроет окно браузера для входа в Postiz.", + "add_to_cursor": "Добавить в Cursor", + "cli": "CLI", + "other_agents": "Другие агенты", + "documentation": "Документация", + "read_the_api_docs": "Прочитайте документацию по API", + "api_key_onboarding_description": "Передавайте его в заголовке Authorization при каждом запросе", + "api_onboarding_description": "Используйте API Postiz в своём коде, n8n или другой автоматизации", + "chat": "Чат", + "chat_onboarding_description": "Не нужны MCP или настройки CLI. Вставьте это в чат, агент установит Postiz CLI и спросит у вас API-ключ.", + "connector": "Коннектор", + "connector_onboarding_description": "Самый быстрый способ: добавьте Postiz одним кликом, вам предложат войти в систему", + "mcp_onboarding_description": "Дайте вашему агенту инструменты Postiz для создания, планирования и управления публикациями", + "cli_onboarding_description": "Установите Postiz CLI и навык, который научит вашего агента им пользоваться", + "agent_settings_later": "Больше агентов и полные инструкции доступны в разделе Настройки > Разработчики", "watch_tutorial": "Смотреть обучение", "watch_tutorial_title": "Узнайте, как пользоваться Postiz", "watch_tutorial_description": "Посмотрите это короткое видео, чтобы узнать, как получить максимум от Postiz", "back": "Назад", + "continue_skip": "Продолжить / Пропустить", "get_started": "Начать", "kick_select_channel": "Выберите канал", "annual": "Годовой", 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 1435f18913..32b5af7077 100644 --- a/libraries/react-shared-libraries/src/translation/locales/tr/translation.json +++ b/libraries/react-shared-libraries/src/translation/locales/tr/translation.json @@ -575,7 +575,16 @@ "email_address": "E-posta Adresi", "email_already_exists": "E-posta zaten mevcut", "google": "Google", + "apple": "Elma", "farcaster": "Farcaster", + "farcaster_approve_instructions": "Telefonunuzla QR kodunu tarayın veya bağlantıyı telefonunuzda açın, ardından Postiz'i Farcaster uygulamasında onaylayın.", + "farcaster_open_in_farcaster": "Farcaster'da Aç", + "farcaster_waiting_for_approval": "Onayınızı bekliyoruz...", + "farcaster_signer_revoked": "Farcaster onayı iptal edildi, lütfen tekrar deneyin", + "farcaster_signer_failed": "Farcaster bağlantısı başlatılamadı", + "farcaster_scan_instructions": "QR kodunu telefonunla tara ya da bağlantıyı kopyalayıp telefonunda aç, ardından Farcaster uygulamasında Postiz'i onayla.", + "farcaster_copy_link": "Farcaster bağlantısını kopyala", + "farcaster_approval_timeout": "Farcaster onayı zaman aşımına uğradı, lütfen tekrar deneyin", "edit_autopost": "Otomatik Gönderiyi Düzenle", "add_autopost_title": "Otomatik Gönderi Ekle", "webhook_deleted_successfully": "Webhook başarıyla silindi", @@ -693,10 +702,31 @@ "connected_channels": "Bağlı Kanallar", "continue": "Devam Et", "continue_without_channels": "Kanallar olmadan devam et", + "connect_agents": "Ajanları Bağla", + "connect_your_ai_agent": "Yapay Zeka Ajanınızı Bağlayın", + "connect_agent_description": "Kullandığınız ajanı seçin ve gönderi oluşturup zamanlamasına izin verin", + "agent_access_unavailable": "Ajan erişimi mevcut planınızda veya rolünüzde mevcut değil. Daha sonra Ayarlar > Geliştiriciler bölümünden kurabilirsiniz.", + "sign_in_no_api_key": "Postiz ile oturum aç (API anahtarı yok)", + "oauth_sign_in_hint": "Ajanınız, Postiz'e giriş yapmanız için bir tarayıcı penceresi açacak.", + "add_to_cursor": "Imlece Ekle", + "cli": "CLI", + "other_agents": "Diğer ajanlar", + "documentation": "Dokümantasyon", + "read_the_api_docs": "API dokümantasyonunu okuyun", + "api_key_onboarding_description": "Her istekte Authorization başlığı olarak gönderin", + "api_onboarding_description": "Postiz API'sini kendi kodunuzdan, n8n veya başka bir otomasyondan kullanın", + "chat": "Sohbet", + "chat_onboarding_description": "MCP veya CLI ayarlarına gerek yok. Bunu sohbete yapıştırın, ajan Postiz CLI'yı yükler ve sizden API anahtarınızı ister.", + "connector": "Konnektör", + "connector_onboarding_description": "En hızlı yol: Postiz'i tek tıkla ekleyin, giriş yapmanız istenecektir", + "mcp_onboarding_description": "Ajanınıza gönderi oluşturma, zamanlama ve yönetme araçları verin", + "cli_onboarding_description": "Postiz CLI ve ajanınıza bunun nasıl kullanılacağını öğreten beceriyi kurun", + "agent_settings_later": "Daha fazla ajan ve tam talimatlar Ayarlar > Geliştiriciler bölümünde mevcuttur", "watch_tutorial": "Eğitimi İzle", "watch_tutorial_title": "Postiz'i Nasıl Kullanacağınızı Öğrenin", "watch_tutorial_description": "Postiz'den en iyi şekilde yararlanmayı öğrenmek için bu kısa videoyu izleyin", "back": "Geri", + "continue_skip": "Devam Et / Atla", "get_started": "Başlayın", "kick_select_channel": "Kanal Seç", "annual": "Yıllık", 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 42a159b6b7..4aac09315c 100644 --- a/libraries/react-shared-libraries/src/translation/locales/vi/translation.json +++ b/libraries/react-shared-libraries/src/translation/locales/vi/translation.json @@ -575,7 +575,16 @@ "email_address": "Địa chỉ email", "email_already_exists": "Email đã tồn tại", "google": "Google", + "apple": "Apple", "farcaster": "Farcaster", + "farcaster_approve_instructions": "Quét mã QR bằng điện thoại của bạn hoặc mở liên kết trên điện thoại, sau đó phê duyệt Postiz trong ứng dụng Farcaster.", + "farcaster_open_in_farcaster": "Mở trong Farcaster", + "farcaster_waiting_for_approval": "Đang chờ bạn phê duyệt...", + "farcaster_signer_revoked": "Phê duyệt Farcaster đã bị thu hồi, vui lòng thử lại", + "farcaster_signer_failed": "Không thể bắt đầu kết nối với Farcaster", + "farcaster_scan_instructions": "Quét mã QR bằng điện thoại của bạn, hoặc sao chép liên kết và mở nó trên điện thoại, sau đó phê duyệt Postiz trong ứng dụng Farcaster.", + "farcaster_copy_link": "Sao chép liên kết Farcaster", + "farcaster_approval_timeout": "Phê duyệt Farcaster đã hết thời gian, vui lòng thử lại", "edit_autopost": "Chỉnh sửa tự động đăng", "add_autopost_title": "Thêm tự động đăng", "webhook_deleted_successfully": "Đã xóa webhook thành công", @@ -693,10 +702,31 @@ "connected_channels": "Các kênh đã kết nối", "continue": "Tiếp tục", "continue_without_channels": "Tiếp tục mà không có kênh", + "connect_agents": "Kết nối Agent", + "connect_your_ai_agent": "Kết nối Agent AI của bạn", + "connect_agent_description": "Chọn Agent bạn sử dụng và để nó tạo, lên lịch bài đăng cho bạn", + "agent_access_unavailable": "Truy cập Agent không khả dụng với gói hoặc vai trò hiện tại của bạn. Bạn có thể thiết lập sau tại Cài đặt > Nhà phát triển.", + "sign_in_no_api_key": "Đăng nhập với Postiz (không cần API key)", + "oauth_sign_in_hint": "Agent của bạn sẽ mở một cửa sổ trình duyệt để đăng nhập vào Postiz.", + "add_to_cursor": "Thêm vào Cursor", + "cli": "CLI", + "other_agents": "Các Agent khác", + "documentation": "Tài liệu", + "read_the_api_docs": "Đọc tài liệu API", + "api_key_onboarding_description": "Gửi nó như header Authorization cho mọi yêu cầu", + "api_onboarding_description": "Sử dụng API Postiz từ mã của bạn, n8n hoặc bất kỳ giải pháp tự động hóa nào khác", + "chat": "Chat", + "chat_onboarding_description": "Không cần cài đặt MCP hoặc CLI. Dán dòng này vào chat, Agent sẽ cài đặt Postiz CLI và yêu cầu API key của bạn.", + "connector": "Connector", + "connector_onboarding_description": "Nhanh nhất: thêm Postiz chỉ với một cú nhấp, bạn sẽ được yêu cầu đăng nhập", + "mcp_onboarding_description": "Cung cấp cho Agent của bạn các công cụ của Postiz để tạo, lên lịch và quản lý bài đăng", + "cli_onboarding_description": "Cài đặt Postiz CLI và kỹ năng hướng dẫn Agent của bạn cách sử dụng nó", + "agent_settings_later": "Thêm nhiều Agent và hướng dẫn đầy đủ có tại Cài đặt > Nhà phát triển", "watch_tutorial": "Xem hướng dẫn", "watch_tutorial_title": "Tìm hiểu cách sử dụng Postiz", "watch_tutorial_description": "Xem video ngắn này để biết cách tận dụng tối đa Postiz", "back": "Quay lại", + "continue_skip": "Tiếp tục / Bỏ qua", "get_started": "Bắt đầu", "kick_select_channel": "Chọn kênh", "annual": "Hàng năm", 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 330f1c3353..e3c218598e 100644 --- a/libraries/react-shared-libraries/src/translation/locales/zh/translation.json +++ b/libraries/react-shared-libraries/src/translation/locales/zh/translation.json @@ -575,7 +575,16 @@ "email_address": "电子邮件地址", "email_already_exists": "电子邮件已存在", "google": "Google", + "apple": "苹果", "farcaster": "Farcaster", + "farcaster_approve_instructions": "请用手机扫描二维码,或在手机上打开链接,然后在 Farcaster 应用内批准 Postiz。", + "farcaster_open_in_farcaster": "在 Farcaster 中打开", + "farcaster_waiting_for_approval": "正在等待您的批准...", + "farcaster_signer_revoked": "Farcaster 的批准已被撤销,请重试", + "farcaster_signer_failed": "无法启动 Farcaster 连接", + "farcaster_scan_instructions": "请使用手机扫描二维码,或复制链接并在手机上打开,然后在 Farcaster 应用中批准 Postiz。", + "farcaster_copy_link": "复制 Farcaster 链接", + "farcaster_approval_timeout": "Farcaster 批准超时,请重试", "edit_autopost": "编辑自动发布", "add_autopost_title": "添加自动发布", "webhook_deleted_successfully": "Webhook 删除成功", @@ -693,10 +702,31 @@ "connected_channels": "已连接频道", "continue": "继续", "continue_without_channels": "继续但不添加频道", + "connect_agents": "连接代理", + "connect_your_ai_agent": "连接您的 AI 代理", + "connect_agent_description": "选择您使用的代理,让它为您创建和安排帖子", + "agent_access_unavailable": "您的当前套餐或角色无法使用代理访问。您可以稍后在 设置 > 开发者 中进行设置。", + "sign_in_no_api_key": "使用 Postiz 登录(无需 API 密钥)", + "oauth_sign_in_hint": "您的代理将会打开一个浏览器窗口用于登录 Postiz。", + "add_to_cursor": "添加到光标", + "cli": "CLI 命令行工具", + "other_agents": "其他代理", + "documentation": "文档", + "read_the_api_docs": "阅读 API 文档", + "api_key_onboarding_description": "在每次请求中,将其作为 Authorization header 发送", + "api_onboarding_description": "从您自己的代码、n8n 或任何其他自动化工具中使用 Postiz API", + "chat": "聊天", + "chat_onboarding_description": "无需 MCP 或 CLI 设置。将此粘贴到聊天中,代理会安装 Postiz CLI 并向您索取 API 密钥。", + "connector": "连接器", + "connector_onboarding_description": "最快捷的方法:一键添加 Postiz,系统会要求您登录", + "mcp_onboarding_description": "为您的代理提供 Postiz 工具,以创建、安排和管理帖子", + "cli_onboarding_description": "安装 Postiz CLI 以及教您的代理如何使用的技能", + "agent_settings_later": "更多代理和完整说明可在 设置 > 开发者 下查看", "watch_tutorial": "观看教程", "watch_tutorial_title": "学习如何使用Postiz", "watch_tutorial_description": "观看这个简短的视频,学习如何最大程度地利用Postiz", "back": "返回", + "continue_skip": "继续 / 跳过", "get_started": "开始使用", "kick_select_channel": "选择频道", "annual": "年度", diff --git a/package.json b/package.json index 7cd17040b1..169e3e5e6c 100644 --- a/package.json +++ b/package.json @@ -42,16 +42,16 @@ "test": "jest --coverage --detectOpenHandles --reporters=default --reporters=jest-junit" }, "dependencies": { - "@ag-ui/mastra": "^1.0.1", + "@ag-ui/mastra": "^1.1.4", "@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.6", - "@copilotkit/react-textarea": "1.10.6", - "@copilotkit/react-ui": "1.10.6", - "@copilotkit/runtime": "1.10.6", + "@copilotkit/react-core": "1.72.0", + "@copilotkit/react-textarea": "1.72.0", + "@copilotkit/react-ui": "1.72.0", + "@copilotkit/runtime": "1.72.0", "@dub/analytics": "^0.0.32", "@hookform/resolvers": "^3.3.4", "@langchain/community": "^1.1.27", @@ -63,10 +63,10 @@ "@mantine/dates": "^5.10.5", "@mantine/hooks": "^5.10.5", "@mantine/modals": "^5.10.5", - "@mastra/core": "^1.21.0", - "@mastra/mcp": "^1.4.1", - "@mastra/memory": "^1.13.0", - "@mastra/pg": "^1.8.5", + "@mastra/core": "^1.67.0", + "@mastra/mcp": "^1.18.0", + "@mastra/memory": "^1.30.0", + "@mastra/pg": "^1.25.0", "@meronex/icons": "^4.0.0", "@modelcontextprotocol/sdk": "^1.22.0", "@nest-lab/throttler-storage-redis": "^1.2.0", @@ -183,7 +183,7 @@ "jsonwebtoken": "^9.0.2", "lodash": "^4.17.21", "lucide-react": "^1.31.0", - "mastra": "^1.3.19", + "mastra": "^1.30.0", "md5": "^2.3.0", "mime": "^3.0.0", "mime-types": "^2.1.35", @@ -255,7 +255,10 @@ "yargs": "^17.7.2", "yup": "^1.4.0", "zod": "^3.25.76", - "zustand": "^5.0.5" + "zustand": "^5.0.5", + "@aws-sdk/lib-storage": "^3.1003.0", + "@copilotkit/runtime-client-gql": "1.72.0", + "qrcode": "^1.5.4" }, "devDependencies": { "@crxjs/vite-plugin": "^2.7.1", @@ -313,7 +316,9 @@ "typescript": "5.5.4", "vite": "^8.2.1", "vite-tsconfig-paths": "^5.1.4", - "vitest": "3.1.4" + "vitest": "3.1.4", + "@types/express": "^5.0.6", + "@types/qrcode": "^1.5.5" }, "volta": { "node": "20.17.0" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 534dc91744..8ccb5cd8ba 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -18,8 +18,8 @@ importers: .: dependencies: '@ag-ui/mastra': - specifier: ^1.0.1 - version: 1.0.1(@ag-ui/client@0.0.47)(@ag-ui/core@0.0.47)(@copilotkit/runtime@1.10.6(c5ef6e30f9cb72b0a9db20b1502179b1))(@mastra/client-js@0.15.2(openapi-types@12.1.3)(react@19.2.4)(zod@3.25.76))(@mastra/core@1.21.0(@cfworker/json-schema@4.1.1)(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@3.25.76))(@types/json-schema@7.0.15)(bufferutil@4.1.0)(openapi-types@12.1.3)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76) + specifier: ^1.1.4 + version: 1.1.4(@ag-ui/client@0.0.59)(@ag-ui/core@0.0.59)(@copilotkit/runtime@1.72.0(060090e105863d9983aa04d300df3d3a))(@mastra/client-js@0.15.2(openapi-types@12.1.3)(react@19.2.4)(zod@3.25.76))(@mastra/core@1.67.0(@bufbuild/protobuf@2.11.0)(@grpc/grpc-js@1.14.3)(ai@4.3.19(react@19.2.4)(zod@3.25.76))(bufferutil@4.1.0)(express@5.2.1)(rxjs@7.8.2)(utf-8-validate@5.0.10)(zod@3.25.76)) '@ai-sdk/openai': specifier: ^2.0.52 version: 2.0.98(zod@3.25.76) @@ -29,6 +29,9 @@ importers: '@aws-sdk/client-s3': specifier: ^3.787.0 version: 3.1003.0 + '@aws-sdk/lib-storage': + specifier: ^3.1003.0 + version: 3.1003.0(@aws-sdk/client-s3@3.1003.0) '@aws-sdk/s3-request-presigner': specifier: ^3.787.0 version: 3.1003.0 @@ -36,17 +39,20 @@ importers: specifier: ^6.5.0 version: 6.8.0 '@copilotkit/react-core': - specifier: 1.10.6 - version: 1.10.6(@types/react@19.1.8)(graphql@16.13.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + specifier: 1.72.0 + version: 1.72.0(@cfworker/json-schema@4.1.1)(@types/mdast@4.0.4)(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(graphql@16.13.1)(micromark-util-types@2.0.2)(micromark@4.0.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@3.25.76) '@copilotkit/react-textarea': - specifier: 1.10.6 - version: 1.10.6(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(graphql@16.13.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + specifier: 1.72.0 + version: 1.72.0(@ag-ui/core@0.0.59)(@cfworker/json-schema@4.1.1)(@types/mdast@4.0.4)(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(graphql@16.13.1)(micromark-util-types@2.0.2)(micromark@4.0.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@3.25.76) '@copilotkit/react-ui': - specifier: 1.10.6 - version: 1.10.6(@types/react@19.1.8)(graphql@16.13.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + specifier: 1.72.0 + version: 1.72.0(@ag-ui/core@0.0.59)(@cfworker/json-schema@4.1.1)(@types/mdast@4.0.4)(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(graphql@16.13.1)(micromark-util-types@2.0.2)(micromark@4.0.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@3.25.76) '@copilotkit/runtime': - specifier: 1.10.6 - version: 1.10.6(c5ef6e30f9cb72b0a9db20b1502179b1) + specifier: 1.72.0 + version: 1.72.0(060090e105863d9983aa04d300df3d3a) + '@copilotkit/runtime-client-gql': + specifier: 1.72.0 + version: 1.72.0(@ag-ui/core@0.0.59)(graphql@16.13.1)(react@19.2.4) '@dub/analytics': specifier: ^0.0.32 version: 0.0.32 @@ -55,13 +61,13 @@ importers: version: 3.10.0(react-hook-form@7.71.2(react@19.2.4)) '@langchain/community': specifier: ^1.1.27 - version: 1.1.27(877e75223018bd2be751ee722fb15fb5) + version: 1.1.27(66046857593e81cf94589e5d63e1e984) '@langchain/core': specifier: ^1.1.39 version: 1.1.39(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)) '@langchain/langgraph': specifier: ^1.2.8 - version: 1.2.8(@langchain/core@1.1.39(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76) + version: 1.2.8(@langchain/core@1.1.39(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod-to-json-schema@3.25.2(zod@3.25.76))(zod@3.25.76) '@langchain/openai': specifier: ^1.4.3 version: 1.4.3(@langchain/core@1.1.39(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)) @@ -81,17 +87,17 @@ importers: specifier: ^5.10.5 version: 5.10.5(@mantine/core@5.10.5(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.2.4))(@mantine/hooks@5.10.5(react@19.2.4))(@types/react@19.1.8)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@mantine/hooks@5.10.5(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@mastra/core': - specifier: ^1.21.0 - version: 1.21.0(@cfworker/json-schema@4.1.1)(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@3.25.76))(@types/json-schema@7.0.15)(bufferutil@4.1.0)(openapi-types@12.1.3)(utf-8-validate@5.0.10)(zod@3.25.76) + specifier: ^1.67.0 + version: 1.67.0(@bufbuild/protobuf@2.11.0)(@grpc/grpc-js@1.14.3)(ai@4.3.19(react@19.2.4)(zod@3.25.76))(bufferutil@4.1.0)(express@5.2.1)(rxjs@7.8.2)(utf-8-validate@5.0.10)(zod@3.25.76) '@mastra/mcp': - specifier: ^1.4.1 - version: 1.4.1(@cfworker/json-schema@4.1.1)(@mastra/core@1.21.0(@cfworker/json-schema@4.1.1)(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@3.25.76))(@types/json-schema@7.0.15)(bufferutil@4.1.0)(openapi-types@12.1.3)(utf-8-validate@5.0.10)(zod@3.25.76))(@types/json-schema@7.0.15)(zod@3.25.76) + specifier: ^1.18.0 + version: 1.18.0(@cfworker/json-schema@4.1.1)(@mastra/core@1.67.0(@bufbuild/protobuf@2.11.0)(@grpc/grpc-js@1.14.3)(ai@4.3.19(react@19.2.4)(zod@3.25.76))(bufferutil@4.1.0)(express@5.2.1)(rxjs@7.8.2)(utf-8-validate@5.0.10)(zod@3.25.76))(express@5.2.1)(hono@4.12.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@3.25.76) '@mastra/memory': - specifier: ^1.13.0 - version: 1.13.0(@mastra/core@1.21.0(@cfworker/json-schema@4.1.1)(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@3.25.76))(@types/json-schema@7.0.15)(bufferutil@4.1.0)(openapi-types@12.1.3)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76) + specifier: ^1.30.0 + version: 1.30.0(@mastra/core@1.67.0(@bufbuild/protobuf@2.11.0)(@grpc/grpc-js@1.14.3)(ai@4.3.19(react@19.2.4)(zod@3.25.76))(bufferutil@4.1.0)(express@5.2.1)(rxjs@7.8.2)(utf-8-validate@5.0.10)(zod@3.25.76)) '@mastra/pg': - specifier: ^1.8.5 - version: 1.8.5(@mastra/core@1.21.0(@cfworker/json-schema@4.1.1)(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@3.25.76))(@types/json-schema@7.0.15)(bufferutil@4.1.0)(openapi-types@12.1.3)(utf-8-validate@5.0.10)(zod@3.25.76)) + specifier: ^1.25.0 + version: 1.25.0(@mastra/core@1.67.0(@bufbuild/protobuf@2.11.0)(@grpc/grpc-js@1.14.3)(ai@4.3.19(react@19.2.4)(zod@3.25.76))(bufferutil@4.1.0)(express@5.2.1)(rxjs@7.8.2)(utf-8-validate@5.0.10)(zod@3.25.76)) '@meronex/icons': specifier: ^4.0.0 version: 4.0.0(react@19.2.4) @@ -103,7 +109,7 @@ importers: version: 1.2.0(@nestjs/common@11.1.21(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.21)(@nestjs/throttler@6.5.0(@nestjs/common@11.1.21(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.21)(reflect-metadata@0.2.2))(ioredis@5.10.0)(reflect-metadata@0.2.2) '@nestjs/cli': specifier: ^11.0.21 - version: 11.0.21(@swc/cli@0.3.14(@swc/core@1.5.7(@swc/helpers@0.5.13))(chokidar@4.0.3))(@swc/core@1.5.7(@swc/helpers@0.5.13))(@types/node@18.16.9)(esbuild@0.27.7)(prettier@2.8.8) + version: 11.0.21(@swc/cli@0.3.14(@swc/core@1.5.7(@swc/helpers@0.5.13))(chokidar@4.0.3))(@swc/core@1.5.7(@swc/helpers@0.5.13))(@types/node@18.16.9)(esbuild@0.28.2)(prettier@2.8.8) '@nestjs/common': specifier: ^11.1.21 version: 11.1.21(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.2.2)(rxjs@7.8.2) @@ -130,13 +136,13 @@ importers: version: 3.137.0(@nestjs/microservices@11.1.21)(@nestjs/platform-express@11.1.21)(bufferutil@4.1.0)(class-transformer@0.5.1)(class-validator@0.14.4)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76) '@neynar/react': specifier: ^1.2.22 - version: 1.2.22(@farcaster/miniapp-sdk@0.2.3(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(swr@2.4.1(react@19.2.4))(typescript@5.5.4) + version: 1.2.22(@farcaster/miniapp-sdk@0.3.0(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(swr@2.4.1(react@19.2.4))(typescript@5.5.4) '@pigment-css/react': specifier: ^0.0.30 version: 0.0.30(@types/react@19.1.8)(react@19.2.4)(typescript@5.5.4) '@postiz/wallets': specifier: ^0.0.1 - version: 0.0.1(@babel/runtime@7.28.6)(@react-native-async-storage/async-storage@1.24.0(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10))(@types/react@19.1.8)(@upstash/redis@1.36.3)(bs58@6.0.0)(bufferutil@4.1.0)(ioredis@5.10.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76) + version: 0.0.1(@babel/runtime@7.28.6)(@react-native-async-storage/async-storage@1.24.0(react-native@0.84.1(@babel/core@8.0.5)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10))(@types/react@19.1.8)(@upstash/redis@1.36.3)(bs58@6.0.0)(bufferutil@4.1.0)(ioredis@5.10.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76) '@prisma/client': specifier: 6.5.0 version: 6.5.0(prisma@6.5.0(typescript@5.5.4))(typescript@5.5.4) @@ -145,7 +151,7 @@ importers: version: 10.45.0(@nestjs/common@11.1.21(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.21) '@sentry/nextjs': specifier: ^10.26.0 - version: 10.45.0(@opentelemetry/context-async-hooks@2.6.0(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.6.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(next@16.3.1(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(@types/node@18.16.9)(babel-plugin-macros@3.1.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.3))(react@19.2.4)(webpack@5.105.4(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.27.7)) + version: 10.45.0(@opentelemetry/context-async-hooks@2.6.0(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.6.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(next@16.3.1(@babel/core@8.0.5)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(@types/node@18.16.9)(babel-plugin-macros@3.1.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.3))(react@19.2.4)(webpack@5.105.4(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.28.2)) '@sentry/profiling-node': specifier: ^10.25.0 version: 10.45.0 @@ -154,10 +160,10 @@ importers: version: 10.45.0(react@19.2.4) '@solana/wallet-adapter-react': specifier: ^0.15.35 - version: 0.15.39(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10))(bs58@6.0.0)(fastestsmallesttextencoderdecoder@1.0.22)(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4)(typescript@5.5.4) + version: 0.15.39(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10))(bs58@6.0.0)(fastestsmallesttextencoderdecoder@1.0.22)(react-native@0.84.1(@babel/core@8.0.5)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4)(typescript@5.5.4) '@solana/wallet-adapter-react-ui': specifier: ^0.9.35 - version: 0.9.39(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10))(bs58@6.0.0)(fastestsmallesttextencoderdecoder@1.0.22)(react-dom@19.2.4(react@19.2.4))(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4)(typescript@5.5.4) + version: 0.9.39(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10))(bs58@6.0.0)(fastestsmallesttextencoderdecoder@1.0.22)(react-dom@19.2.4(react@19.2.4))(react-native@0.84.1(@babel/core@8.0.5)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4)(typescript@5.5.4) '@stripe/react-stripe-js': specifier: ^5.4.1 version: 5.6.1(@stripe/stripe-js@8.9.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) @@ -184,7 +190,7 @@ importers: version: 1.15.0 '@temporalio/worker': specifier: ^1.14.0 - version: 1.15.0(@swc/helpers@0.5.13)(esbuild@0.27.7)(tslib@2.8.1) + version: 1.15.0(@swc/helpers@0.5.13)(esbuild@0.28.2)(tslib@2.8.1) '@temporalio/workflow': specifier: ^1.14.0 version: 1.15.0 @@ -439,10 +445,10 @@ importers: version: 4.17.23 lucide-react: specifier: ^1.31.0 - version: 1.31.0(react@19.2.4) + version: 1.47.0(react@19.2.4) mastra: - specifier: ^1.3.19 - version: 1.3.19(@mastra/core@1.21.0(@cfworker/json-schema@4.1.1)(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@3.25.76))(@types/json-schema@7.0.15)(bufferutil@4.1.0)(openapi-types@12.1.3)(utf-8-validate@5.0.10)(zod@3.25.76))(typescript@5.5.4)(zod@3.25.76) + specifier: ^1.30.0 + version: 1.30.0(@hono/node-server@1.19.11(hono@4.12.10))(@mastra/core@1.67.0(@bufbuild/protobuf@2.11.0)(@grpc/grpc-js@1.14.3)(ai@4.3.19(react@19.2.4)(zod@3.25.76))(bufferutil@4.1.0)(express@5.2.1)(rxjs@7.8.2)(utf-8-validate@5.0.10)(zod@3.25.76))(bufferutil@4.1.0)(rxjs@7.8.2)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76) md5: specifier: ^2.3.0 version: 2.3.0 @@ -466,13 +472,13 @@ importers: version: 3.0.1(@nestjs/common@11.1.21(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.2.2)(rxjs@7.8.2)) nestjs-temporal-core: specifier: ^3.2.0 - version: 3.2.3(@nestjs/common@11.1.21(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.21)(@temporalio/client@1.15.0)(@temporalio/common@1.15.0)(@temporalio/worker@1.15.0(@swc/helpers@0.5.13)(esbuild@0.27.7)(tslib@2.8.1))(@temporalio/workflow@1.15.0)(reflect-metadata@0.2.2)(rxjs@7.8.2) + version: 3.2.3(@nestjs/common@11.1.21(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.21)(@temporalio/client@1.15.0)(@temporalio/common@1.15.0)(@temporalio/worker@1.15.0(@swc/helpers@0.5.13)(esbuild@0.28.2)(tslib@2.8.1))(@temporalio/workflow@1.15.0)(reflect-metadata@0.2.2)(rxjs@7.8.2) next: specifier: 16.3.1 - version: 16.3.1(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(@types/node@18.16.9)(babel-plugin-macros@3.1.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.3) + version: 16.3.1(@babel/core@8.0.5)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(@types/node@18.16.9)(babel-plugin-macros@3.1.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.3) next-plausible: specifier: ^3.12.0 - version: 3.12.5(next@16.3.1(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(@types/node@18.16.9)(babel-plugin-macros@3.1.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.3))(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 3.12.5(next@16.3.1(@babel/core@8.0.5)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(@types/node@18.16.9)(babel-plugin-macros@3.1.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.3))(react-dom@19.2.4(react@19.2.4))(react@19.2.4) node-fetch: specifier: ^3.3.2 version: 3.3.2 @@ -496,10 +502,13 @@ importers: version: 6.0.1 polotno: specifier: ^3.0.0-beta.25 - version: 3.0.0-beta.25(@types/react@19.1.8)(@types/sortablejs@1.15.9)(konva@10.2.0)(react-dom@19.2.4(react@19.2.4))(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4)(typescript@5.5.4) + version: 3.0.0-beta.25(@types/react@19.1.8)(@types/sortablejs@1.15.9)(konva@10.2.0)(react-dom@19.2.4(react@19.2.4))(react-native@0.84.1(@babel/core@8.0.5)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4)(typescript@5.5.4) posthog-js: specifier: ^1.178.0 version: 1.359.1 + qrcode: + specifier: ^1.5.4 + version: 1.5.4 react: specifier: 19.2.4 version: 19.2.4 @@ -529,7 +538,7 @@ importers: version: 5.2.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4) react-i18next: specifier: ^15.5.2 - version: 15.7.4(i18next@25.8.14(typescript@5.5.4))(react-dom@19.2.4(react@19.2.4))(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4)(typescript@5.5.4) + version: 15.7.4(i18next@25.8.14(typescript@5.5.4))(react-dom@19.2.4(react@19.2.4))(react-native@0.84.1(@babel/core@8.0.5)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4)(typescript@5.5.4) react-loading: specifier: ^2.0.3 version: 2.0.3(prop-types@15.8.1)(react@19.2.4) @@ -662,7 +671,7 @@ importers: devDependencies: '@crxjs/vite-plugin': specifier: ^2.7.1 - version: 2.7.1(vite@8.2.1(@types/node@18.16.9)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3)) + version: 2.7.1(vite@8.2.1(@types/node@18.16.9)(esbuild@0.28.2)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.1)) '@nestjs/schematics': specifier: ^11.1.0 version: 11.1.0(chokidar@4.0.3)(prettier@2.8.8)(typescript@5.5.4) @@ -671,7 +680,7 @@ importers: version: 11.1.21(@nestjs/common@11.1.21(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.21)(@nestjs/microservices@11.1.21)(@nestjs/platform-express@11.1.21) '@pmmmwh/react-refresh-webpack-plugin': specifier: ^0.5.7 - version: 0.5.17(react-refresh@0.10.0)(type-fest@4.41.0)(webpack@5.105.4(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.27.7)) + version: 0.5.17(react-refresh@0.10.0)(type-fest@4.41.0)(webpack@5.105.4(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.28.2)) '@svgr/webpack': specifier: ^8.0.1 version: 8.1.0(typescript@5.5.4) @@ -686,7 +695,7 @@ importers: version: 1.5.7(@swc/helpers@0.5.13) '@tailwindcss/vite': specifier: ^4.0.17 - version: 4.2.1(vite@8.2.1(@types/node@18.16.9)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3)) + version: 4.2.1(vite@8.2.1(@types/node@18.16.9)(esbuild@0.28.2)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.1)) '@testing-library/react': specifier: 16.3.0 version: 16.3.0(@testing-library/dom@10.4.1)(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) @@ -702,6 +711,9 @@ importers: '@types/cookie-parser': specifier: ^1.4.6 version: 1.4.10(@types/express@5.0.6) + '@types/express': + specifier: ^5.0.6 + version: 5.0.6 '@types/jest': specifier: 29.5.12 version: 29.5.12 @@ -711,6 +723,9 @@ importers: '@types/node-telegram-bot-api': specifier: ^0.64.7 version: 0.64.14 + '@types/qrcode': + specifier: ^1.5.5 + version: 1.5.5 '@types/react': specifier: 19.1.8 version: 19.1.8 @@ -734,7 +749,7 @@ importers: version: 7.18.0(eslint@8.57.0)(typescript@5.5.4) '@vitejs/plugin-react': specifier: ^6.0.5 - version: 6.0.5(vite@8.2.1(@types/node@18.16.9)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3)) + version: 6.0.5(vite@8.2.1(@types/node@18.16.9)(esbuild@0.28.2)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.1)) '@vitest/coverage-v8': specifier: 1.6.0 version: 1.6.0(vitest@3.1.4) @@ -746,7 +761,7 @@ importers: version: 10.4.27(postcss@8.5.26) babel-jest: specifier: 29.7.0 - version: 29.7.0(@babel/core@7.29.0) + version: 29.7.0(@babel/core@8.0.5) cross-env: specifier: ^10.0.0 version: 10.1.0 @@ -809,25 +824,25 @@ importers: version: 0.10.0 ts-jest: specifier: ^29.1.0 - version: 29.4.6(@babel/core@7.29.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.29.0))(esbuild@0.27.7)(jest-util@29.7.0)(jest@29.7.0(@types/node@18.16.9)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.5.7(@swc/helpers@0.5.13))(@types/node@18.16.9)(typescript@5.5.4)))(typescript@5.5.4) + version: 29.4.6(@babel/core@8.0.5)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@8.0.5))(esbuild@0.28.2)(jest-util@29.7.0)(jest@29.7.0(@types/node@18.16.9)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.5.7(@swc/helpers@0.5.13))(@types/node@18.16.9)(typescript@5.5.4)))(typescript@5.5.4) ts-node: specifier: 10.9.2 version: 10.9.2(@swc/core@1.5.7(@swc/helpers@0.5.13))(@types/node@18.16.9)(typescript@5.5.4) tsup: specifier: ^8.5.0 - version: 8.5.1(@swc/core@1.5.7(@swc/helpers@0.5.13))(jiti@2.6.1)(postcss@8.5.26)(typescript@5.5.4)(yaml@2.8.3) + version: 8.5.1(@swc/core@1.5.7(@swc/helpers@0.5.13))(jiti@2.6.1)(postcss@8.5.26)(typescript@5.5.4)(yaml@2.9.1) typescript: specifier: 5.5.4 version: 5.5.4 vite: specifier: ^8.2.1 - version: 8.2.1(@types/node@18.16.9)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3) + version: 8.2.1(@types/node@18.16.9)(esbuild@0.28.2)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.1) vite-tsconfig-paths: specifier: ^5.1.4 - version: 5.1.4(typescript@5.5.4)(vite@8.2.1(@types/node@18.16.9)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3)) + version: 5.1.4(typescript@5.5.4)(vite@8.2.1(@types/node@18.16.9)(esbuild@0.28.2)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.1)) vitest: specifier: 3.1.4 - version: 3.1.4(@types/debug@4.1.12)(@types/node@18.16.9)(@vitest/ui@1.6.0)(happy-dom@15.11.7)(jiti@2.6.1)(jsdom@22.1.0(bufferutil@4.1.0)(canvas@2.11.2)(utf-8-validate@5.0.10))(lightningcss@1.33.0)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3) + version: 3.1.4(@types/debug@4.1.12)(@types/node@18.16.9)(@vitest/ui@1.6.0)(happy-dom@15.11.7)(jiti@2.6.1)(jsdom@22.1.0(bufferutil@4.1.0)(canvas@2.11.2)(utf-8-validate@5.0.10))(lightningcss@1.33.0)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.1) apps/backend: {} @@ -861,38 +876,95 @@ packages: resolution: {integrity: sha512-VTDuRS5V0ATbJ/LkaQlisMnTAeYKXAK6scMguVBstf+KIBQ7HIuKhiXLv+G/hvejkV+THoXzoNifInAkU81P1g==} engines: {node: '>=18'} + '@a2a-js/sdk@0.3.14': + resolution: {integrity: sha512-F6Ew1AtPzCLhTn8h9yiqTe7DiDf6XVrSnq9V1YqSl9eWqPm6anMveTiKdCSb/76cW0YiJc24rNaUrVezFFHbqQ==} + engines: {node: '>=18'} + peerDependencies: + '@bufbuild/protobuf': ^2.10.2 + '@grpc/grpc-js': ^1.11.0 + express: ^4.21.2 || ^5.1.0 + peerDependenciesMeta: + '@bufbuild/protobuf': + optional: true + '@grpc/grpc-js': + optional: true + express: + optional: true + + '@a2a-js/sdk@1.0.1': + resolution: {integrity: sha512-CJQdh3Wzwo8qIx5UUkSJ7+7BEI16PB+MXMHHNSmx8JQsQed2HlQgvx1ENOiKUfYA3PlcEvxIwv14dBblhDuPmw==} + engines: {node: '>=20'} + peerDependencies: + '@bufbuild/protobuf': ^2.10.2 + '@grpc/grpc-js': ^1.11.0 + express: ^4.21.2 || ^5.1.0 + peerDependenciesMeta: + '@bufbuild/protobuf': + optional: true + '@grpc/grpc-js': + optional: true + express: + optional: true + + '@a2ui/web_core@0.10.4': + resolution: {integrity: sha512-sahOUSKZIGv9ZtnHjfzWR8o/F1XfSTp4sQAX5/auSenQYBYDRaY0+vrZIkddc/IEzpXJob6cFJT2r5/mLzAvqg==} + '@adraffy/ens-normalize@1.11.1': resolution: {integrity: sha512-nhCBV3quEgesuf7c7KYfperqSS14T8bYuvJ8PcLJp6znkZpFc0AuW4qBtr8eKVyPPe/8RSr7sglCWPU5eaxwKQ==} - '@ag-ui/client@0.0.47': - resolution: {integrity: sha512-zciVwYV6gmYzdMyWwSDR/VBcOj5x1lHPG/ZGDKyxDHbCeIdGp7sKoGORKHAiPAsfUhReGLKXsR/4IknqwY2PgQ==} + '@ag-ui/a2ui-middleware@0.0.10': + resolution: {integrity: sha512-2BQFUQ9vJzUAQSR0dNW/ijhyH8KpiRWISSLTP6mIe6ENyQ2cM1/XLG38/Dcb69olcs36gtZADZzAQWcno5H6fA==} + peerDependencies: + '@ag-ui/client': '>=0.0.40' + rxjs: 7.8.1 - '@ag-ui/core@0.0.37': - resolution: {integrity: sha512-7bmjPn1Ol0Zo00F+MrPr0eOwH4AFZbhmq/ZMhCsrMILtVYBiBLcLU9QFBpBL3Zm9MCHha8b79N7JE2FzwcMaVA==} + '@ag-ui/a2ui-toolkit@0.0.4': + resolution: {integrity: sha512-9VPmgpCAsFVICk7z23kh+Kp/BwYMxw0D0KGjOiKXhm1MAH+Wid2iC3yKsXso+q7UZZiyhWgeDUSgaAkltyLmGg==} - '@ag-ui/core@0.0.47': - resolution: {integrity: sha512-fHat7ZErAH028R90psYclTWaj6PdcvN2GJxzwWPF/j1c5ceqbF2+6xe+t06Psg+gCzZneI9QE3IkOkdJNplZ5A==} + '@ag-ui/client@0.0.59': + resolution: {integrity: sha512-d7++r8sBAq6z9G/D/WKrMznQ1Mdvew14pCqOVATReFIvl06mCi1BPqTwmos3zCDGAIiSgcvxc/8m472rYQgFFQ==} - '@ag-ui/encoder@0.0.47': - resolution: {integrity: sha512-AgKTM/DEHtaNrcbMa0z1UQ7lKiKtalbFAjBTTP0vCh+lJ6JWIu9LrpCJQ4EjON1IRoAZtJBORlCj1KY+F14HXQ==} + '@ag-ui/core@0.0.59': + resolution: {integrity: sha512-hDgy4ipTqXieT8YG8Mr917Y+FD/f11VK1GefZ5CwTDCuNqS/oTwjJ5l/DZkicThgS8hQW/Y7wPylPBMBJ8BkUg==} - '@ag-ui/langgraph@0.0.24': - resolution: {integrity: sha512-ebTYpUw28fvbmhqbpAbmfsDTfEqm1gSeZaBcnxMGHFivJLCzsJ/C9hYw6aV8yRKV3lMFBwh/QFxn1eRcr7yRkQ==} + '@ag-ui/encoder@0.0.59': + resolution: {integrity: sha512-wQCzBsStyZMm8nzhTdTx1G0B1C8yv5rbzZLnz1ka/l5LcJEsK3KTounU8CR9l+7QtcpOUUDJKd0xAbyI6gNcSw==} + + '@ag-ui/langgraph@0.0.43': + resolution: {integrity: sha512-eG8FBd7jQeo7lfraAz9fbuYM/sFJILnO7yFioCa/++cFygd5CpqpvVoUI1d/WEOzHYTwiuXYM5fPOQ8ZzQuYog==} peerDependencies: '@ag-ui/client': '>=0.0.42' '@ag-ui/core': '>=0.0.42' - '@ag-ui/mastra@1.0.1': - resolution: {integrity: sha512-8XcsAdZVweiQU7HeZW4sD9x4oXOk3VJ7piK3eihwIzVkEvd8YtfiPgwNlOzNxT6my8IHaHIuKtAlxLS/wo3TKQ==} + '@ag-ui/mastra@1.1.4': + resolution: {integrity: sha512-4snACp7ZSNRgHnSa0OIASoOMv6ytmEPWT4C+36yLc2c3YC4Heth84bhfnZhQBJ2Erjs1AluExzcpbB5CdVh2Yg==} peerDependencies: - '@ag-ui/client': '>=0.0.44' - '@ag-ui/core': '>=0.0.44' - '@copilotkit/runtime': 0.0.0-mme-ag-ui-0-0-46-20260227141603 + '@ag-ui/client': '>=0.0.58' + '@ag-ui/core': '>=0.0.58' + '@copilotkit/runtime': ^1.60.1 '@mastra/client-js': '>=1.0.0-0 <2.0.0-0' - '@mastra/core': '>=1.0.0-0 <2.0.0-0' + '@mastra/core': '>=1.29.0 <2.0.0-0' + + '@ag-ui/mcp-apps-middleware@0.1.1': + resolution: {integrity: sha512-bX02Hly+9oKTsBT+4RG7ntY9HSF1O+ysRHgXbkKY+ZNVYTCrtpiwgzUfQ1MqMPhBLbZUaVBh9uNfLVxU0maaNQ==} + peerDependencies: + '@ag-ui/client': '>=0.0.40' + rxjs: 7.8.1 + + '@ag-ui/mcp-middleware@0.0.2': + resolution: {integrity: sha512-+CwY9SUjXTvk1h77/nqpXEPj79i/Gt0G7ZEcZLlYsJHJkYYC8IG9yN/tiR++HS1Qb1R46btomrgoBfpBvpGwDw==} + peerDependencies: + '@ag-ui/client': '>=0.0.40' + rxjs: 7.8.1 - '@ag-ui/proto@0.0.47': - resolution: {integrity: sha512-+KCrkeVeR6MulWoYUq9Fwm22gFlI9aKG50eKYRtbTM/Yuei/Che5vjbF297XfSnGUunzScrOmdnTeTCprrtb7A==} + '@ag-ui/proto@0.0.59': + resolution: {integrity: sha512-X+uvDaegLEHw5kJu8tv2eSqHH8ouat+JCfFokGV1uuMquY8qCEQSlGsM7xzexwX9fujuxgHOWumg5kJDqa0+RA==} + + '@ai-sdk/anthropic@2.0.102': + resolution: {integrity: sha512-OGECnK9zIfZQQ++/py3lMDtFT1u43WQO7Js5V5esTOa2iu1E9gDYO5FsJq3DRHZiQlMwBUwIrKNKJfFk2zqgqw==} + engines: {node: '>=18'} + peerDependencies: + zod: ^3.25.76 || ^4.1.8 '@ai-sdk/anthropic@2.0.23': resolution: {integrity: sha512-ZEBiiv1UhjGjBwUU63pFhLK5LCSlNDb1idY9K1oZHm5/Fda1cuTojf32tOp0opH0RPbPAN/F8fyyNjbU33n9Kw==} @@ -900,24 +972,66 @@ packages: peerDependencies: zod: ^3.25.76 || ^4.1.8 + '@ai-sdk/anthropic@3.0.118': + resolution: {integrity: sha512-5j8Cc9owORxhhZxFtpznXPTdLxeWm6bPCVbndM0e+NdvGVxe9GDgNqQq1V0KqOV54hZ6hyQVEXHkgTRPyXzcQg==} + engines: {node: '>=18'} + peerDependencies: + zod: ^3.25.76 || ^4.1.8 + '@ai-sdk/gateway@1.0.33': resolution: {integrity: sha512-v9i3GPEo4t3fGcSkQkc07xM6KJN75VUv7C1Mqmmsu2xD8lQwnQfsrgAXyNuWe20yGY0eHuheSPDZhiqsGKtH1g==} engines: {node: '>=18'} peerDependencies: zod: ^3.25.76 || ^4.1.8 + '@ai-sdk/gateway@3.0.196': + resolution: {integrity: sha512-YMsbvS2UiPKDdg+dSusbC+SR9KkKyWEvRcURysYrsGK9A3ZIzC7n+Pi+67exlXT2FXC+yvCP1O8z8bbvOJ2ABA==} + engines: {node: '>=18'} + peerDependencies: + zod: ^3.25.76 || ^4.1.8 + + '@ai-sdk/google-vertex@3.0.174': + resolution: {integrity: sha512-L1DniqC5AwiTR/6k6NPrDbyZce5bjQbcTsR5ANQqLjz2ntnbtQaAtK6SNuOD/6jLayoqXVuO/MLqQEoIyDeuVg==} + 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/google@2.0.97': + resolution: {integrity: sha512-IGv9wGvbeuNBUVXzqwuOZTHXZUUEuO/aUKfSw2iv7smhalBC1FFuth5WLapJQHb1nusoDup5nELopzXV28vcxA==} + engines: {node: '>=18'} + peerDependencies: + zod: ^3.25.76 || ^4.1.8 + + '@ai-sdk/google@3.0.123': + resolution: {integrity: sha512-5r6Ie37dBzJltNwA4WkJV5xDMv9ntJHYjxTgO/11TtOjY4jJJA721w8wdsFZcpkIhtA4rRvCw/S1VYbtdqNvbQ==} + engines: {node: '>=18'} + peerDependencies: + zod: ^3.25.76 || ^4.1.8 + + '@ai-sdk/mcp@1.0.81': + resolution: {integrity: sha512-jy9DkejXJXylaXb0m69Klqipny4FVABaCqzRgD4avLrikPj9Br0cIAS/QyB4mHdX37Bw05aaeBhaWRqzBHUtCg==} + 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-compatible@1.0.54': + resolution: {integrity: sha512-3wY1L21FLhfKN6I1nQeWgFzDCeBiRxXwU2guE9BCixSLfOPtkJ0vyF7zo7lbnAg1y7tz6RDPq/o+AJf6QSL55g==} + 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'} @@ -930,6 +1044,12 @@ packages: peerDependencies: zod: ^3.25.76 || ^4.1.8 + '@ai-sdk/openai@3.0.113': + resolution: {integrity: sha512-/T3z8ECzxfU5PqoC4i9/yzIqjQw2yRJOgeedGzBJ1RdFH9ZfL7TcDKStAiXJ5nZwFO50FUkqf6SgujhOrMGJKA==} + engines: {node: '>=18'} + peerDependencies: + zod: ^3.25.76 || ^4.1.8 + '@ai-sdk/provider-utils@2.2.8': resolution: {integrity: sha512-fqhG+4sCVv8x7nFzYnFo19ryhAa3w096Kmc3hWxMQfW/TubPOmt3A6tYZhl4mUfQWWQMsuSkLrtjlWuXBVSGQA==} engines: {node: '>=18'} @@ -942,24 +1062,36 @@ packages: peerDependencies: zod: ^3.25.76 || ^4.1.8 - '@ai-sdk/provider-utils@3.0.20': - resolution: {integrity: sha512-iXHVe0apM2zUEzauqJwqmpC37A5rihrStAih5Ks+JE32iTe4LZ58y17UGBjpQQTCRw9YxMeo2UFLxLpBluyvLQ==} + '@ai-sdk/provider-utils@3.0.22': + resolution: {integrity: sha512-fFT1KfUUKktfAFm5mClJhS1oux9tP2qgzmEZVl5UdwltQ1LO/s8hd7znVrgKzivwv1s1FIPza0s9OpJaNB/vHw==} engines: {node: '>=18'} peerDependencies: zod: ^3.25.76 || ^4.1.8 - '@ai-sdk/provider-utils@3.0.22': - resolution: {integrity: sha512-fFT1KfUUKktfAFm5mClJhS1oux9tP2qgzmEZVl5UdwltQ1LO/s8hd7znVrgKzivwv1s1FIPza0s9OpJaNB/vHw==} + '@ai-sdk/provider-utils@3.0.37': + resolution: {integrity: sha512-mLx1SgE20xKQ87xME+9uG6pFlYPTqGDrMFrZ6XcytDnmbWGwmCIh2Xb9zFrfXUrKycSFRDet4Zovj388L9b1dg==} engines: {node: '>=18'} peerDependencies: zod: ^3.25.76 || ^4.1.8 - '@ai-sdk/provider-utils@4.0.0': - resolution: {integrity: sha512-HyCyOls9I3a3e38+gtvOJOEjuw9KRcvbBnCL5GBuSmJvS9Jh9v3fz7pRC6ha1EUo/ZH1zwvLWYXBMtic8MTguA==} + '@ai-sdk/provider-utils@4.0.40': + resolution: {integrity: sha512-OL5IrpUm9Y8Dwy+w/vvFwPotS6m52O9W0op2oXgXdCROMJIBalBI0oro6OIBYkPxvm5Xg02GSkoQN25RlR0bnw==} engines: {node: '>=18'} peerDependencies: zod: ^3.25.76 || ^4.1.8 + '@ai-sdk/provider-utils@4.0.51': + resolution: {integrity: sha512-ukLTs9x1Xm6lxSIwbJIxYQxbZHmVeIczNntARZrBcOa6pjdBhqeZnATNnJMHa7M9dZ8Ji5NJbpKpvz7o5XyBtg==} + engines: {node: '>=18.17'} + peerDependencies: + zod: ^3.25.76 || ^4.1.8 + + '@ai-sdk/provider-utils@5.0.13': + resolution: {integrity: sha512-fScDJMDnTbx32kLDQqp0MvPjvwkgiwvlBxlmIg7XW5PbS91LG6JjH3PQG+34oMFglqfpQA355e24OdGj5PPoDw==} + engines: {node: '>=22'} + peerDependencies: + zod: ^3.25.76 || ^4.1.8 + '@ai-sdk/provider@1.1.3': resolution: {integrity: sha512-qZMxYJ0qqX/RfnuIaab+zp8UAeJn/ygXXAffR5I4N0n1IrvA6qBsjc8hXLmBiMV2zoXlifkacF7sEFnYnjBcqg==} engines: {node: '>=18'} @@ -972,14 +1104,26 @@ packages: resolution: {integrity: sha512-KCUwswvsC5VsW2PWFqF8eJgSCu5Ysj7m1TxiHTVA6g7k360bk0RNQENT8KTMAYEs+8fWPD3Uu4dEmzGHc+jGng==} engines: {node: '>=18'} - '@ai-sdk/provider@3.0.0': - resolution: {integrity: sha512-m9ka3ptkPQbaHHZHqDXDF9C9B5/Mav0KTdky1k2HZ3/nrW2t1AgObxIVPyGDWQNS9FXT/FS6PIoSjpcP/No8rQ==} + '@ai-sdk/provider@2.0.3': + resolution: {integrity: sha512-h88OPkavHTiN9tMn2l5awAznGB0lXzjcLhgR1/rvjB2zlLprsNxbM2tt6OJsHUxduLC3klq0/eqaSf6fX5XVww==} engines: {node: '>=18'} - '@ai-sdk/provider@3.0.5': - resolution: {integrity: sha512-2Xmoq6DBJqmSl80U6V9z5jJSJP7ehaJJQMy2iFUqTay06wdCqTnPVBBQbtEL8RCChenL+q5DC5H5WzU3vV3v8w==} + '@ai-sdk/provider@2.0.4': + resolution: {integrity: sha512-B0M50w0W43jTzZGyZrNwwaK1M79aKPw6PD/dQhkBR7vkR68yCINWBo2CbBLJrbrqYc46TaiSfsTiT+S9EmVl0w==} engines: {node: '>=18'} + '@ai-sdk/provider@3.0.14': + resolution: {integrity: sha512-5X1k57JBJ4H7H1QjX7CnJYAB1I19r/trVZTMcSms7/kLNZ8RaU4Nt2agcwZzv82Hfx6Q7/TOLU7agAKeFfc8cA==} + engines: {node: '>=18'} + + '@ai-sdk/provider@3.0.16': + resolution: {integrity: sha512-9Av6kg0t/IN/dcYAAmEJ4B9OPhcEJqwSR+GfHEA8olRkindXpUHadc3p3cyvgFUQFTVm1G5thtsmgZ9yVb2w3A==} + engines: {node: '>=18'} + + '@ai-sdk/provider@4.0.4': + resolution: {integrity: sha512-tbHKNLirllUNF3ZlkCsXnwab2ZV1Sl4b1H/Cp9ruCce15IBmskE8Gwkk0yo9xDWY+jho2of7lVXtwSsyrq7cwQ==} + engines: {node: '>=22'} + '@ai-sdk/react@1.2.12': resolution: {integrity: sha512-jK1IZZ22evPZoQW3vlkZ7wvjYGYF+tRBKXtrcolduIkQ/m/sOAVcVeVDUDvh1T91xCnWCdUGCPZg2avZ90mv3g==} engines: {node: '>=18'} @@ -1028,6 +1172,9 @@ packages: resolution: {integrity: sha512-lnw+ZM1Io+cJAkReC0NPDjqObL8NtKzKIkdgEEKC8CUmkhurYhedbicN8Y8NYHgG1uLd2GozW3+/QqPRZaN+Lw==} engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} + '@antfu/install-pkg@2.1.0': + resolution: {integrity: sha512-sdg9NxU3zR4Mnawfbc/x6GB5Wf17WYud5qOuEuxXjaKpYpMkISSJEjItGebXJ2bQ4DIcly4NYH23mtkGJjvKUw==} + '@anthropic-ai/sdk@0.27.3': resolution: {integrity: sha512-IjLt0gd3L4jlOfilxVXTifn42FnVffMgDC04RJK1KDZpmkBWLv0XC92MVVmkxrFZNS/7l3xWgP/I3nqtX1sQHw==} @@ -1039,12 +1186,6 @@ packages: resolution: {integrity: sha512-60vepv88RwcJtSHrD6MjIL6Ta3SOYbgfnkHb+ppAVK+o9mXprRtulx7VlRl3lN3bbvysAfCS7WMVfhUYemB0IQ==} engines: {node: '>= 16'} - '@apidevtools/json-schema-ref-parser@14.2.1': - resolution: {integrity: sha512-HmdFw9CDYqM6B25pqGBpNeLCKvGPlIx1EbLrVL0zPvj50CJQUHyBNBw45Muk0kEIkogo1VZvOKHajdMuAzSxRg==} - engines: {node: '>= 20'} - peerDependencies: - '@types/json-schema': ^7.0.15 - '@asamuzakjp/css-color@5.1.11': resolution: {integrity: sha512-KVw6qIiCTUQhByfTd78h2yD1/00waTmm9uy/R7Ck/ctUyAPj+AEDLkQIdJW0T8+qGgj3j5bpNKK7Q3G+LedJWg==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} @@ -1170,6 +1311,12 @@ packages: resolution: {integrity: sha512-g2Z9s6Y4iNh0wICaEqutgYgt/Pmhv5Ev9G3eKGFe2w9VuZDhc76vYdop6I5OocmpHV79d4TuLG+JWg5rQIVDVA==} engines: {node: '>=20.0.0'} + '@aws-sdk/lib-storage@3.1003.0': + resolution: {integrity: sha512-tyc2WazRhlBNdJu1Vpi7v9Oak8gl4zo0521MYOZustCmdSvGmV8kJdOEa4VK8pUPvm2D7mRgdiNRqesy87gcuQ==} + engines: {node: '>=20.0.0'} + peerDependencies: + '@aws-sdk/client-s3': ^3.1003.0 + '@aws-sdk/middleware-bucket-endpoint@3.972.7': resolution: {integrity: sha512-goX+axlJ6PQlRnzE2bQisZ8wVrlm6dXJfBzMJhd8LhAIBan/w1Kl73fJnalM/S+18VnpzIHumyV6DtgmvqG5IA==} engines: {node: '>=20.0.0'} @@ -1282,32 +1429,62 @@ packages: resolution: {integrity: sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==} engines: {node: '>=6.9.0'} + '@babel/code-frame@8.0.0': + resolution: {integrity: sha512-dYYg153EyN2Ekbqw2zAsbd6/JR+9N2SEoC7YV2GyyqMM7x9bLDTjBD6XBhSMLH0wtIVyJj03jWNriQhaN+eoCw==} + engines: {node: ^22.18.0 || >=24.11.0} + '@babel/compat-data@7.29.0': resolution: {integrity: sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==} engines: {node: '>=6.9.0'} + '@babel/compat-data@8.0.5': + resolution: {integrity: sha512-YLsYoQMvL8l8WrGpN3Zj7O1wK5LEBN+cQtux7BcuHyxIXve724XG+zuJ1n3U1cUweRtTzQOA4IHbuQw3N34SZw==} + engines: {node: ^22.18.0 || >=24.11.0} + '@babel/core@7.29.0': resolution: {integrity: sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==} engines: {node: '>=6.9.0'} + '@babel/core@8.0.5': + resolution: {integrity: sha512-2/oWkgTbBYoqioCWAE4XJobOrzwxTDa5/XjDP3tJ1BhDr/owcd9qnXBp4xc3/2G5X4bvXM04nrxbRJxFcXAxFQ==} + engines: {node: ^22.18.0 || >=24.11.0} + '@babel/generator@7.29.1': resolution: {integrity: sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==} engines: {node: '>=6.9.0'} + '@babel/generator@8.0.5': + resolution: {integrity: sha512-f/TuhuMAxJqhwxEGNsJrswuG9VHmh0oNFoQoo6TbpgtFAz9wYZXcTAcWZMHfp7ljesr0RG04bp3Aos9GI59L7w==} + engines: {node: ^22.18.0 || >=24.11.0} + '@babel/helper-annotate-as-pure@7.27.3': resolution: {integrity: sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==} engines: {node: '>=6.9.0'} + '@babel/helper-annotate-as-pure@8.0.0': + resolution: {integrity: sha512-NSpMkMsvvZqzThJ0p1B02cbtA2ObEyfBvq950bmNkyxsxvcxwhvvCB036rKhlEnuBBo30bOrk13u3FzlKSoRrw==} + engines: {node: ^22.18.0 || >=24.11.0} + '@babel/helper-compilation-targets@7.28.6': resolution: {integrity: sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==} engines: {node: '>=6.9.0'} + '@babel/helper-compilation-targets@8.0.5': + resolution: {integrity: sha512-Qk8ahMGooH5mz6uuhoDvfZGkUf/Mf3RTBucVVl4MKx4LKMTv872TeW8O92h15iVtlN8wAROBIpI1aV6x1z0LCQ==} + engines: {node: ^22.18.0 || >=24.11.0} + '@babel/helper-create-class-features-plugin@7.28.6': resolution: {integrity: sha512-dTOdvsjnG3xNT9Y0AUg1wAl38y+4Rl4sf9caSQZOXdNqVn+H+HbbJ4IyyHaIqNR6SW9oJpA/RuRjsjCw2IdIow==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 + '@babel/helper-create-class-features-plugin@8.0.5': + resolution: {integrity: sha512-ckUE7tmolBbW4QV02lD874sWSPy8da2A09i/h0qS+IWolR+WiNhpq7C/rHZm00uOIkUb0Cp6+0Cy1ku/wj5uQQ==} + engines: {node: ^22.18.0 || >=24.11.0} + peerDependencies: + '@babel/core': ^8.0.0 + '@babel/helper-create-regexp-features-plugin@7.28.5': resolution: {integrity: sha512-N1EhvLtHzOvj7QQOUCCS3NrPJP8c5W6ZXCHDn7Yialuy1iu4r5EmIYkXlKNqT99Ciw+W0mDqWoR6HWMZlFP3hw==} engines: {node: '>=6.9.0'} @@ -1323,28 +1500,56 @@ packages: resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} engines: {node: '>=6.9.0'} + '@babel/helper-globals@8.0.0': + resolution: {integrity: sha512-lLozHOM6sWWlxNo8CYqHy4MBZeTvHXNgVPBfPOGsjPKUzHC2Az9QwB6gxdQmpwHl6GlQtbGgS+lj5887guDiLw==} + engines: {node: ^22.18.0 || >=24.11.0} + '@babel/helper-member-expression-to-functions@7.28.5': resolution: {integrity: sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg==} engines: {node: '>=6.9.0'} + '@babel/helper-member-expression-to-functions@8.0.5': + resolution: {integrity: sha512-GLe05QD98BkNFTkjaqeqF9QSRoHLKrrB4tpoplyQuuPrQJ72rtmkM4wvqJLX/sjZPqkbK5MUYSsuUTqdJoOVjA==} + engines: {node: ^22.18.0 || >=24.11.0} + '@babel/helper-module-imports@7.28.6': resolution: {integrity: sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==} engines: {node: '>=6.9.0'} + '@babel/helper-module-imports@8.0.0': + resolution: {integrity: sha512-NZ7mSS93o4ndX4KrbD7W8Sf3QT8Qe24PrnFyUcuOPDzK6faqDFKjY9RG7he7+I7FdiQ4llpnosFqzrXa+Vy3Ew==} + engines: {node: ^22.18.0 || >=24.11.0} + '@babel/helper-module-transforms@7.28.6': resolution: {integrity: sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 + '@babel/helper-module-transforms@8.0.5': + resolution: {integrity: sha512-lUsSqMD0l5cJKl+3vlTV/hPDA/IvNkcHWVI3zFud2Vur+C9bCKdpqbpkN9eABembedbdWwF0qow6nbdIpNlpcw==} + engines: {node: ^22.18.0 || >=24.11.0} + peerDependencies: + '@babel/core': ^8.0.0 + '@babel/helper-optimise-call-expression@7.27.1': resolution: {integrity: sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==} engines: {node: '>=6.9.0'} + '@babel/helper-optimise-call-expression@8.0.0': + resolution: {integrity: sha512-3W6satvtPuCUkUx63S2jMoW9EQNYkADgs1HTfufmL7gCmAulHMKupA/12WNz4A0GMMFn/YnWWwqOT9IZrJHQjg==} + engines: {node: ^22.18.0 || >=24.11.0} + '@babel/helper-plugin-utils@7.28.6': resolution: {integrity: sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==} engines: {node: '>=6.9.0'} + '@babel/helper-plugin-utils@8.0.1': + resolution: {integrity: sha512-3PKFgjTyPlhFhorfP+SjKQxLViIL++zWjFOO4hGriYU+Bsm983DxEM1JmDRJVWXV0O9npu+xXRqz7Pbd3mh70g==} + engines: {node: ^22.18.0 || >=24.11.0} + peerDependencies: + '@babel/core': ^8.0.0 + '@babel/helper-remap-async-to-generator@7.27.1': resolution: {integrity: sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA==} engines: {node: '>=6.9.0'} @@ -1357,22 +1562,44 @@ packages: peerDependencies: '@babel/core': ^7.0.0 + '@babel/helper-replace-supers@8.0.1': + resolution: {integrity: sha512-B1SZADIcy3tmH8CmWvj4SHi/oAPom4UL3uknTc2QRNsPVLFk/sPnZvQL/8kj7Y5omvjMqie0vklvs6XM4OLW5Q==} + engines: {node: ^22.18.0 || >=24.11.0} + peerDependencies: + '@babel/core': ^8.0.0 + '@babel/helper-skip-transparent-expression-wrappers@7.27.1': resolution: {integrity: sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==} engines: {node: '>=6.9.0'} + '@babel/helper-skip-transparent-expression-wrappers@8.0.0': + resolution: {integrity: sha512-xmCA9kP3IhySsqhzwIdWGlDN/1A4cCKNBO/uwZx/3YzmDoMePwno2Q5/Bq0q+tYaKbeF940YiKV/kaW8Mzvpjw==} + engines: {node: ^22.18.0 || >=24.11.0} + '@babel/helper-string-parser@7.27.1': resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} engines: {node: '>=6.9.0'} + '@babel/helper-string-parser@8.0.0': + resolution: {integrity: sha512-6mJgmFFFIIO82vvoLt9XtRC7/TkzXfts1t/SpRX4IHSzMgqoPYCWesVu1udUPUWioAE/2fcG6WuI8zrkE1gwrg==} + engines: {node: ^22.18.0 || >=24.11.0} + '@babel/helper-validator-identifier@7.28.5': resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} engines: {node: '>=6.9.0'} + '@babel/helper-validator-identifier@8.0.4': + resolution: {integrity: sha512-4wFaiLd0bVo4cIoTXI3zKI038NIWE/cr3jvBjejOVYVxV/m8Ltav1USiGzG1fmS5J2RhgEOgXNNK46cRPnRsrg==} + engines: {node: ^22.18.0 || >=24.11.0} + '@babel/helper-validator-option@7.27.1': resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} engines: {node: '>=6.9.0'} + '@babel/helper-validator-option@8.0.0': + resolution: {integrity: sha512-U4Dybxh4WESWHt5XhBeExi4DrY0/DNK1aHpQbsrQXCUbFHuMweT0TpLEWKvaraV2Y6fS+ZXunsZ8zIuZIgvF2Q==} + engines: {node: ^22.18.0 || >=24.11.0} + '@babel/helper-wrap-function@7.28.6': resolution: {integrity: sha512-z+PwLziMNBeSQJonizz2AGnndLsP2DeGHIxDAn+wdHOGuo4Fo1x1HBPPXeE9TAOPHNNWQKCSlA2VZyYyyibDnQ==} engines: {node: '>=6.9.0'} @@ -1381,11 +1608,20 @@ packages: resolution: {integrity: sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==} engines: {node: '>=6.9.0'} + '@babel/helpers@8.0.5': + resolution: {integrity: sha512-fQtPOXjYOYv85PIdwotp2TJGVYOycX0PQq+l844fFAxOULtBy8BVF35GyeueX0r4KvDthqPH5xAI1clQPk/2uA==} + engines: {node: ^22.18.0 || >=24.11.0} + '@babel/parser@7.29.0': resolution: {integrity: sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==} engines: {node: '>=6.0.0'} hasBin: true + '@babel/parser@8.0.5': + resolution: {integrity: sha512-51RXvQNFakaS0bTpYiGkxNbUVwkPO4kONv6EVLorZABxsx+KZ6Z7uSYvi/wmKS/+X+rfj9RvOw0/ZNh+cmI0Rw==} + engines: {node: ^22.18.0 || >=24.11.0} + hasBin: true + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.28.5': resolution: {integrity: sha512-87GDMS3tsmMSi/3bWOte1UblL+YUTFMV8SZPZ2eSEL17s74Cw/l63rR6NmGVKMYW2GYi85nE+/d6Hw5N0bEk2Q==} engines: {node: '>=6.9.0'} @@ -1519,6 +1755,12 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-typescript@8.0.3': + resolution: {integrity: sha512-jmTPwps7oSQSZaV1SxkQ3C12UWyufGysGc5OzDpZzvPAIX4mO7dJT3hoqkWVrSImvkcMiknir1iLN1SNV/CZzg==} + engines: {node: ^22.18.0 || >=24.11.0} + peerDependencies: + '@babel/core': ^8.0.0 + '@babel/plugin-syntax-unicode-sets-regex@7.18.6': resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} engines: {node: '>=6.9.0'} @@ -1675,6 +1917,12 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-modules-commonjs@8.0.1': + resolution: {integrity: sha512-PMuzulWrrzFNmY3lXSk/tV9NRb7y0eZZLJY4UEo2TKszroxvUZHAPPi+T9FDyrQhod+TQA+t+8/QYaaMpiEuhA==} + engines: {node: ^22.18.0 || >=24.11.0} + peerDependencies: + '@babel/core': ^8.0.0 + '@babel/plugin-transform-modules-systemjs@7.29.0': resolution: {integrity: sha512-PrujnVFbOdUpw4UHiVwKvKRLMMic8+eC0CuNlxjsyZUiBjhFdPsewdXCkveh2KqBA9/waD0W1b4hXSOBQJezpQ==} engines: {node: '>=6.9.0'} @@ -1843,6 +2091,12 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-typescript@8.0.5': + resolution: {integrity: sha512-o6XW6OngFfpEQat3J1MxUDEd94Rjh80BZQqWmOXa9YTtoyDnk8Zim3NXcx3RTgGiOgkoayCMYp+Xk5NxEmzoMg==} + engines: {node: ^22.18.0 || >=24.11.0} + peerDependencies: + '@babel/core': ^8.0.0 + '@babel/plugin-transform-unicode-escapes@7.27.1': resolution: {integrity: sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg==} engines: {node: '>=6.9.0'} @@ -1890,6 +2144,12 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/preset-typescript@8.0.1': + resolution: {integrity: sha512-qrPhQIN1NLrPmzgazF9XKQqXrOcp/WJly+K+6ReFonn24FZqRJO7clxOJo6Ni75L+2vAqI3cHVU2OJLBxoPp5A==} + engines: {node: ^22.18.0 || >=24.11.0} + peerDependencies: + '@babel/core': ^8.0.0 + '@babel/runtime@7.28.6': resolution: {integrity: sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==} engines: {node: '>=6.9.0'} @@ -1898,14 +2158,26 @@ packages: resolution: {integrity: sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==} engines: {node: '>=6.9.0'} + '@babel/template@8.0.0': + resolution: {integrity: sha512-eAD0QW/AlbamBbw0FeGiwasbCVPq5ncW0HNVyLP3B9czqLyh4gvw+5JTSNt6le9+ziAU7mqDZsKTHf3jTb4chQ==} + engines: {node: ^22.18.0 || >=24.11.0} + '@babel/traverse@7.29.0': resolution: {integrity: sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==} engines: {node: '>=6.9.0'} + '@babel/traverse@8.0.5': + resolution: {integrity: sha512-XFfnuvapSc/vJOcUO7kwORSvpBIvraofKEZ2dhT0PjiF21BRCD7YbAFC8UEeDJNeLoQz82/gVqzgX5hCzkCbdg==} + engines: {node: ^22.18.0 || >=24.11.0} + '@babel/types@7.29.0': resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==} engines: {node: '>=6.9.0'} + '@babel/types@8.0.5': + resolution: {integrity: sha512-eVdMqi3ej5aHhyQ2Si6yD2cAWeV8FJK9UrhK5aL0Sd8hu5GhT+YswhVNbVheOGVYMg8kuGuMaUpkB3stjj4z8A==} + engines: {node: ^22.18.0 || >=24.11.0} + '@bcoe/v8-coverage@0.2.3': resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} @@ -1949,6 +2221,9 @@ packages: '@borewit/text-codec@0.2.2': resolution: {integrity: sha512-DDaRehssg1aNrH4+2hnj1B7vnUGEjU6OIlyRdkMd0aUdIUvKXrJfXsy8LVtXAy7DRvYVluWbMspsRhz2lcW0mQ==} + '@braintree/sanitize-url@7.1.2': + resolution: {integrity: sha512-jigsZK+sMF/cuiB7sERuo9V7N9jx+dhmHHnQyDSVdpZwVutaBu7WvNYqMDLSgFgfB30n452TP3vjDAvFC973mA==} + '@bramus/specificity@2.4.2': resolution: {integrity: sha512-ctxtJ/eA+t+6q2++vj5j7FYX3nRu311q1wfYH3xjlLOsczhlhxAg2FWNUXhpGvAw3BWo1xBcvOV6/YLc2r5FJw==} hasBin: true @@ -1977,49 +2252,147 @@ packages: '@cfworker/json-schema@4.1.1': resolution: {integrity: sha512-gAmrUZSGtKc3AiBL71iNWxDsyUC5uMaKKGdvzYsBoTW/xi42JQHl7eKV2OYzCUqvc+D2RCcf7EXY2iCyFIk6og==} - '@clack/core@1.2.0': - resolution: {integrity: sha512-qfxof/3T3t9DPU/Rj3OmcFyZInceqj/NVtO9rwIuJqCUgh32gwPjpFQQp/ben07qKlhpwq7GzfWpST4qdJ5Drg==} + '@chevrotain/types@11.1.2': + resolution: {integrity: sha512-U+HFai5+zmJCkK86QsaJtoITlboZHBqrVketcO2ROv865xfCMSFpELQoz1GkX5GzME8pTa+3kbKrZHQtI0gdbw==} - '@clack/prompts@1.2.0': - resolution: {integrity: sha512-4jmztR9fMqPMjz6H/UZXj0zEmE43ha1euENwkckKKel4XpSfokExPo5AiVStdHSAlHekz4d0CA/r45Ok1E4D3w==} + '@clack/core@1.5.1': + resolution: {integrity: sha512-iHTrHA8MtVuLl2TfZySmcKv1qO2PoyC9Z7pfSDozEuV5vtY3/wcOPKJXlqJ5Oq2Cx5DDGQGAMVx6HZfRRoVEbQ==} + engines: {node: '>= 20.12.0'} + + '@clack/prompts@1.8.1': + resolution: {integrity: sha512-dlT1m5e/0yUL0kRNcQn7yGLVThkgbB0Ga/1AmfDDC/8ik6AIiSf2QLQO2zPYvefsHP0aFgxO93cVLCCfDp7kzQ==} + engines: {node: '>= 20.12.0'} '@colors/colors@1.5.0': resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} engines: {node: '>=0.1.90'} - '@copilotkit/react-core@1.10.6': - resolution: {integrity: sha512-sdojpntwgOxP8lWRzaFEiWr0g2wDefjQHtve5GPPie+otseFonV88FZjSqIq5LN+q5BIwDOEhCmDjALsGjXvuQ==} + '@copilotkit/a2ui-renderer@1.72.0': + resolution: {integrity: sha512-i+dNKpWp9E3UyhWqORTS9deOdloppse1jr7xVQnxiT1Loar2LOzAcqdGbqXHRUYORNs2DHRNHCtQZEaE0laX7g==} peerDependencies: react: 19.2.4 react-dom: 19.2.4 + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true - '@copilotkit/react-textarea@1.10.6': - resolution: {integrity: sha512-04totNGPtBkfVdYy5rCBqn47HDbdd9cqHk49At0CD9DFmGOaL7kwMbywHj4Dqq6UpDKuJqnS9aYyLI073vuZwA==} + '@copilotkit/channels-core@0.10.0': + resolution: {integrity: sha512-dmj1JDWzGR7TQu4TLKua/9qd6GaTjySppOQpGdkG+ake63Dwdw7yJn64iGXuYETsECk1jLsZWSF6R7qVvIfltg==} + peerDependencies: + vitest: ^4.0.0 + peerDependenciesMeta: + vitest: + optional: true + + '@copilotkit/channels-intelligence@0.10.0': + resolution: {integrity: sha512-Z1e+kdT9eB+nLNkPIpxL6MZ4Rnmp1abyOnBW6RwxuYF+B4wxcLAuBLpXPHQ0E72NxwVMbJ8qjwH8473rAm+LTQ==} + + '@copilotkit/channels-slack@0.10.0': + resolution: {integrity: sha512-zmojMtOwooAF3FVFQglYcq/icNZMdDpwk2HtBmFYZ2o44Sof77VQg7G3cdnb9UJuDyvOOMTSNRC2VOlXjXOK/g==} + + '@copilotkit/channels-teams@0.10.0': + resolution: {integrity: sha512-6CZ6wcnjZr/AB2zMOJUVzrjixLeUGQ6GSOaXMwWrBrR3Ik3dIMzUaNeIMFLuKE7cCUb30v0DUetDpNHsP1WNBQ==} + peerDependencies: + '@microsoft/agents-activity': ^1.5.3 + '@microsoft/agents-hosting': ^1.5.3 + express: ^4.21.2 || ^5.0.0 + peerDependenciesMeta: + '@microsoft/agents-activity': + optional: true + '@microsoft/agents-hosting': + optional: true + express: + optional: true + + '@copilotkit/channels-ui@0.10.0': + resolution: {integrity: sha512-SpldPYXtP6j+n70srKlYYCHsyZsOt8Frr7RcnwRjFwmaqukPlOqc4AVg0UM8lxRmlascN679a4fQyg5Hxr2NEw==} + + '@copilotkit/core@1.72.0': + resolution: {integrity: sha512-0kTTakTO20ZXwQu+YYxbwQoVA6QgDqKyl2vECDcGuX3etEGYGCKgrKf4r0aKc3WxeCiuvhwutXfPPxnCCC0sIA==} + engines: {node: '>=20'} + + '@copilotkit/license-verifier@0.5.0': + resolution: {integrity: sha512-vrwKtIpYwF0FT9ZoYASH8owa2cGV0dhDvJGaCRaRMStwDxpc6DRdydKkhx8cWZXyBRxEYcq/Vygv4JvevhQQdQ==} + + '@copilotkit/mcp-apps-renderer@1.72.0': + resolution: {integrity: sha512-gM6wK88doMybljXQPz3T4IbmyV/N6+wWukNAS+lOabo2L2ROHn2MevDTdAX1MNx7/HJ2PrcwpU3IDuGNk+ITQA==} + peerDependencies: + '@ag-ui/client': 0.0.59 + zod: '>=3.25' + + '@copilotkit/react-core@1.72.0': + resolution: {integrity: sha512-TFQx5kk64gY2qIhaC7qrcMbnSRmS2+mKlQ7Yp63lFiSbBENwcmPxx6GvphvkolwrpwzC/wBY1xNGe6OHs68C4g==} peerDependencies: react: 19.2.4 react-dom: 19.2.4 + zod: '>=3.25' - '@copilotkit/react-ui@1.10.6': - resolution: {integrity: sha512-eNIbZKMvBVZqlAR4fqkmZRIYIt8WhwZOxfVJVwMD9nfmWdtatmxrOLecyDiPk/hkq2o/8s2/rubaZSMK6m+GHQ==} + '@copilotkit/react-textarea@1.72.0': + resolution: {integrity: sha512-YKkZWkGBO1mEwpAj0UzzvfTw+8JuWJDr6luiXyl2XIUZxDqsK4Nme1Bbaw1nVQGNZ0QXjU6FTxiGvck+si/tBQ==} peerDependencies: react: 19.2.4 + react-dom: 19.2.4 - '@copilotkit/runtime-client-gql@1.10.6': - resolution: {integrity: sha512-oLX8mjppVvQCWfquW9A0500hYVNxM4X/mtt76SEvfGUb2KsNQ4j2HOCzpmtm85MeLproC+f9738wLwRueLliZg==} + '@copilotkit/react-ui@1.72.0': + resolution: {integrity: sha512-nCVAr2E8evnOvB6XXN7WKWBDgsYn07iWjuuI1h7U3zfdlS/d/oz3vob7w6Uq987lEGxWEmUf8KNuCj6kGFQZpg==} peerDependencies: react: 19.2.4 - '@copilotkit/runtime@1.10.6': - resolution: {integrity: sha512-35MdJ6nutC+spgHRJURbanLxBoQCNvVBYD0CBIk4Rv3/Ck8XgZA4lcc+5aGteuERXOPBsYEQjGD4xEPy3QXmGg==} + '@copilotkit/runtime-client-gql@1.72.0': + resolution: {integrity: sha512-ThXg3l+u71tt9l30f1cXaMLtJbKyDCeKDJ/zKpiLHnbemBxF7I0Ms9bjEYF2iCDviYTlQQ/8QUlfAjuq/Ohrww==} peerDependencies: - '@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' + react: 19.2.4 - '@copilotkit/shared@1.10.6': - resolution: {integrity: sha512-56Rltf4fDBqCpl1ZXARypt5NdE4LTg3tGPPLurZpgPmm31Lv5EAHpfjC7I55vt9A0mXWlTCHtCrpiaAlTyzGJw==} + '@copilotkit/runtime@1.72.0': + resolution: {integrity: sha512-XTler40g1iONbr5euHkB5t3e6A/MzPKb26KHlyl220fb6mzgDUk0fBUfwlsBpXw/g8AXY1LiPGIP0+0eXQ7GUg==} + engines: {node: '>=20'} + peerDependencies: + '@anthropic-ai/sdk': '>=0.57.0' + '@langchain/aws': '>=0.1.9' + '@langchain/community': '>=0.3.58' + '@langchain/core': '>=0.3.66' + '@langchain/google-gauth': '>=0.1.0' + '@langchain/langgraph-sdk': '>=0.1.2' + '@langchain/openai': '>=0.4.2' + groq-sdk: '>=0.3.0 <1.0.0' + langchain: '>=0.3.3' + openai: ^4.85.1 || >=5.0.0 + peerDependenciesMeta: + '@anthropic-ai/sdk': + optional: true + '@langchain/aws': + optional: true + '@langchain/community': + optional: true + '@langchain/google-gauth': + optional: true + '@langchain/langgraph-sdk': + optional: true + '@langchain/openai': + optional: true + groq-sdk: + optional: true + langchain: + optional: true + openai: + optional: true + + '@copilotkit/shared@1.72.0': + resolution: {integrity: sha512-lqt2V2P063vEfb9xGIX4JWnuyNRJHz3MAUgwfTLpdpHU7k1nNcStbWlUCZUc7oSxLXaZ+cGj1Ncx/jcgNd7FFQ==} + peerDependencies: + '@ag-ui/core': '>=0.0.48' + + '@copilotkit/web-components@1.72.0': + resolution: {integrity: sha512-4pdhsZj3f3LJoTCJIc7MPJihKDFm/R9GhYVmdRGzWU5iQKKdQDdVg4Z7PZm7Y+hZ51ud1hCtmIwFKZFBmy8GAg==} + engines: {node: '>=20'} + peerDependencies: + lit: ^3.3.2 + + '@copilotkit/web-inspector@1.72.0': + resolution: {integrity: sha512-l+739387Gef/lbpj8Kf8G90+VYUKgTFsBTtWy4bqiGNBAFbRcerwNRx+C1xackFCmQCR/7TzBBy6HvzsgDLQHw==} + engines: {node: '>=20'} '@crxjs/vite-plugin@2.7.1': resolution: {integrity: sha512-mn77Lc1ilIvbO7ZqijjNy+AnRgc8srkfHOtV6HrGrYZgRe8YI3aIcSjHJCU5Kq75SejEZGrdAoHdn3gBGeKpEA==} @@ -2076,9 +2449,6 @@ packages: resolution: {integrity: sha512-hauBrOdvu08vOsagkZ/Aju5XuiZx6ldsLfByg1htFeldhex+PeMrYauANzFsMJeAA0+dyPLbDoX2OYuvVoLDkQ==} engines: {node: '>= 6'} - '@datastructures-js/deque@1.0.8': - resolution: {integrity: sha512-PSBhJ2/SmeRPRHuBv7i/fHWIdSC3JTyq56qb+Rq0wjOagi0/fdV5/B/3Md5zFZus/W6OkSPMaxMKKMNMrSmubg==} - '@dub/analytics@0.0.32': resolution: {integrity: sha512-jmZrgbArOX08/kz+hi1s9ggt0k64WzRErt6jM6TfuqUHlXQYNNNRcefvKrmd9vwmbvNGR/GxZnYeyco6Zyw4fg==} @@ -2178,8 +2548,8 @@ packages: cpu: [ppc64] os: [aix] - '@esbuild/aix-ppc64@0.27.7': - resolution: {integrity: sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==} + '@esbuild/aix-ppc64@0.28.2': + resolution: {integrity: sha512-XExcO+dvLKvVtNTibSTBej1NCAbaGhWn9Ww1ZPx80qsahhPFe/8jgWP0IchNe0F3HwkU7n8ejhH8bjonqht8mQ==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] @@ -2196,8 +2566,8 @@ packages: cpu: [arm64] os: [android] - '@esbuild/android-arm64@0.27.7': - resolution: {integrity: sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==} + '@esbuild/android-arm64@0.28.2': + resolution: {integrity: sha512-5YfKeeI8qWfBZIX+u2xZC3Zlb3Os/gLS2sbEKM+I4ZOcsWmHS2WLysCcQZDAFRslDUU5Oiq44gf6PYN1vGwG5A==} engines: {node: '>=18'} cpu: [arm64] os: [android] @@ -2214,8 +2584,8 @@ packages: cpu: [arm] os: [android] - '@esbuild/android-arm@0.27.7': - resolution: {integrity: sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==} + '@esbuild/android-arm@0.28.2': + resolution: {integrity: sha512-kXXoiPVVGQcnIYGOeaovwOURpniDBpSq4A03qkQ+BMQqtGG6HYap3xne9C1O1yo4TR3qxlCX5IqqmX6fFo2Lqg==} engines: {node: '>=18'} cpu: [arm] os: [android] @@ -2232,8 +2602,8 @@ packages: cpu: [x64] os: [android] - '@esbuild/android-x64@0.27.7': - resolution: {integrity: sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==} + '@esbuild/android-x64@0.28.2': + resolution: {integrity: sha512-O387ite7SzUyCcy3JQX4P4bLtEA7bLLkx+esve5JHnyYfNTxcVpXZo9jhdB0lTKN44gztELTdU7nS8Nr16Fs1Q==} engines: {node: '>=18'} cpu: [x64] os: [android] @@ -2250,8 +2620,8 @@ packages: cpu: [arm64] os: [darwin] - '@esbuild/darwin-arm64@0.27.7': - resolution: {integrity: sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==} + '@esbuild/darwin-arm64@0.28.2': + resolution: {integrity: sha512-n4KqkOQrraxHJcgjM1RvwbigfQKIKJVpM7xp+KsxiyUSrRdIXnt73VhrPAx0fV44hgfmIVKjxMN9J1t5jySVkw==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] @@ -2268,8 +2638,8 @@ packages: cpu: [x64] os: [darwin] - '@esbuild/darwin-x64@0.27.7': - resolution: {integrity: sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==} + '@esbuild/darwin-x64@0.28.2': + resolution: {integrity: sha512-uq6suIWYP37qzGddBKPw5QEQPi6HiLGsO7UmkpfyaYNQ3D+rN6w6WfwH+nuqcGXWvawGwxOEroO4YGnFh95azw==} engines: {node: '>=18'} cpu: [x64] os: [darwin] @@ -2286,8 +2656,8 @@ packages: cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-arm64@0.27.7': - resolution: {integrity: sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==} + '@esbuild/freebsd-arm64@0.28.2': + resolution: {integrity: sha512-n+I0BTSRIoy+d6RPKnEVwql5UwBJolytvY4mAOIEJorKlqgPII8ix6slVVrfZ5Tnj7glIZvloylbB/EJPMWEXw==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] @@ -2304,8 +2674,8 @@ packages: cpu: [x64] os: [freebsd] - '@esbuild/freebsd-x64@0.27.7': - resolution: {integrity: sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==} + '@esbuild/freebsd-x64@0.28.2': + resolution: {integrity: sha512-78XJTJkvPs0kz2w61301PJjXl4g7q3JqiYMZ/M/yVI73EHBrCRTgkhu9oqG7vPqq+a/yadEW8aD+agKlk5xrmg==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] @@ -2322,8 +2692,8 @@ packages: cpu: [arm64] os: [linux] - '@esbuild/linux-arm64@0.27.7': - resolution: {integrity: sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==} + '@esbuild/linux-arm64@0.28.2': + resolution: {integrity: sha512-pW4AC0P3it8c7do9MVM4p51FzHzdM/TZrerurgRcHJ2WTa1VQ1CIq18xncfpBJw4ojkiZZrKW2yIBWBP92j6Ug==} engines: {node: '>=18'} cpu: [arm64] os: [linux] @@ -2340,8 +2710,8 @@ packages: cpu: [arm] os: [linux] - '@esbuild/linux-arm@0.27.7': - resolution: {integrity: sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==} + '@esbuild/linux-arm@0.28.2': + resolution: {integrity: sha512-XlDnu2q5yoqems+xay6wSAcg9DDD7K9RLKZEBOMZm3ckNpJBvOX20tSfby8KfrrhINDyv9V2YVZKY/SpoGJI8w==} engines: {node: '>=18'} cpu: [arm] os: [linux] @@ -2358,8 +2728,8 @@ packages: cpu: [ia32] os: [linux] - '@esbuild/linux-ia32@0.27.7': - resolution: {integrity: sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==} + '@esbuild/linux-ia32@0.28.2': + resolution: {integrity: sha512-CYbnj78HsIeA+DhgUKgFCfvNsTHFhMMrinUrMZpDXJXKN8T3XViTZ/+wtHeVxEWY8ewSzTFN+nRmSwO2tZaLUQ==} engines: {node: '>=18'} cpu: [ia32] os: [linux] @@ -2376,8 +2746,8 @@ packages: cpu: [loong64] os: [linux] - '@esbuild/linux-loong64@0.27.7': - resolution: {integrity: sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==} + '@esbuild/linux-loong64@0.28.2': + resolution: {integrity: sha512-buwkd8nsph4R+ajRvw0qM5Hja/TXQow3ptzWO2EbG/cqcIkHloRrdlBtQlshyYGTNFvfkfJ5tpPLVkY4DtsPfQ==} engines: {node: '>=18'} cpu: [loong64] os: [linux] @@ -2394,8 +2764,8 @@ packages: cpu: [mips64el] os: [linux] - '@esbuild/linux-mips64el@0.27.7': - resolution: {integrity: sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==} + '@esbuild/linux-mips64el@0.28.2': + resolution: {integrity: sha512-ZVykbDyk7519VwiNb9Lcj9m8XM6v5V9uKPvrEMkkEedVewf+0itkhahp4HDpgERXhwLRpWFypsGbG/J8s0QjJA==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] @@ -2412,8 +2782,8 @@ packages: cpu: [ppc64] os: [linux] - '@esbuild/linux-ppc64@0.27.7': - resolution: {integrity: sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==} + '@esbuild/linux-ppc64@0.28.2': + resolution: {integrity: sha512-CAXl+Dtd9UUuJd8pKKdwh6MLm3MUMiqMPmhZ3tTSXPqfyQ3vDl6R5hZdZ/kYojK4ofXtdfSv1tFq8XzWx3heNQ==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] @@ -2430,8 +2800,8 @@ packages: cpu: [riscv64] os: [linux] - '@esbuild/linux-riscv64@0.27.7': - resolution: {integrity: sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==} + '@esbuild/linux-riscv64@0.28.2': + resolution: {integrity: sha512-GeXCej4IQtU1B+QlDV8W/RRvbzI3O/Stss+/bCXv4lZls5WGRtu2a+3JkA3i4qIUlMXpcHebWpF8AkJhATowuA==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] @@ -2448,8 +2818,8 @@ packages: cpu: [s390x] os: [linux] - '@esbuild/linux-s390x@0.27.7': - resolution: {integrity: sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==} + '@esbuild/linux-s390x@0.28.2': + resolution: {integrity: sha512-3H1weTYZPxt/WOhByszQZybS9w5lKzUn1FDMsgEChbHWQwHYQQRfBxgCcZvPhjHfKyJjIievvMmEUawJrdY9Dg==} engines: {node: '>=18'} cpu: [s390x] os: [linux] @@ -2466,8 +2836,8 @@ packages: cpu: [x64] os: [linux] - '@esbuild/linux-x64@0.27.7': - resolution: {integrity: sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==} + '@esbuild/linux-x64@0.28.2': + resolution: {integrity: sha512-4xTZr1FUmSoQW4XIWmit3tzQrUTZM+N3P0XV8xROKYF50XfI7xeO90+1bZvNwxIufQ9hDQVRJH5YhgPVF8A/HQ==} engines: {node: '>=18'} cpu: [x64] os: [linux] @@ -2484,8 +2854,8 @@ packages: cpu: [arm64] os: [netbsd] - '@esbuild/netbsd-arm64@0.27.7': - resolution: {integrity: sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==} + '@esbuild/netbsd-arm64@0.28.2': + resolution: {integrity: sha512-sSATRjPeDBg3pdgHoQfoYBob11Kk1FGa9lui5RIHZCoCkJa9QKlvl3/vKz2usCmYYjs7ymJR/2Nnsqe+Hjt5nw==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] @@ -2502,8 +2872,8 @@ packages: cpu: [x64] os: [netbsd] - '@esbuild/netbsd-x64@0.27.7': - resolution: {integrity: sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==} + '@esbuild/netbsd-x64@0.28.2': + resolution: {integrity: sha512-lqnzCV+mM0gIADaKihiCg6ifgfU2L3h5E33rNQBN1Y4MaVGnzryzmvvf7UHxprpQdE8hpqLolJ9Rl+SkIRDpyw==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] @@ -2520,8 +2890,8 @@ packages: cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-arm64@0.27.7': - resolution: {integrity: sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==} + '@esbuild/openbsd-arm64@0.28.2': + resolution: {integrity: sha512-AL2qJILH7lNjrDmCQDvdxMfAUIv8KMNZOvrwAQ8i8//ntL9FflhOyMJ8OZSMBb8/AWXe3/5v5S20y3zCoZWKoQ==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] @@ -2538,8 +2908,8 @@ packages: cpu: [x64] os: [openbsd] - '@esbuild/openbsd-x64@0.27.7': - resolution: {integrity: sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==} + '@esbuild/openbsd-x64@0.28.2': + resolution: {integrity: sha512-QtiuPytchRyC4rwUKhexJdQKvDuZ6hWloi3igqPQNUJCS1/v9EiO3UTOXR6A3FoMo4fnAKbWJdqaIwhOzh8qEw==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] @@ -2556,8 +2926,8 @@ packages: cpu: [arm64] os: [openharmony] - '@esbuild/openharmony-arm64@0.27.7': - resolution: {integrity: sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==} + '@esbuild/openharmony-arm64@0.28.2': + resolution: {integrity: sha512-WkhYDmpTjLvGlScA1rwjRUmhl4k8oXR3cIbtqWmELgU/dFeHHlEllxDvdWcNJV9rbzCexB5vz8gtNewWLgCT7Q==} engines: {node: '>=18'} cpu: [arm64] os: [openharmony] @@ -2574,8 +2944,8 @@ packages: cpu: [x64] os: [sunos] - '@esbuild/sunos-x64@0.27.7': - resolution: {integrity: sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==} + '@esbuild/sunos-x64@0.28.2': + resolution: {integrity: sha512-GPMSkTOtMnv2U2F8gxe4Io6qmVs+YKyp832Etqqxr0hFngmXQ3rzwytelm3GIn7T4VviRUlf3sOgBOiTdvaf7g==} engines: {node: '>=18'} cpu: [x64] os: [sunos] @@ -2592,8 +2962,8 @@ packages: cpu: [arm64] os: [win32] - '@esbuild/win32-arm64@0.27.7': - resolution: {integrity: sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==} + '@esbuild/win32-arm64@0.28.2': + resolution: {integrity: sha512-PIhhEkE9uPBleRBrQEJpUn7MBnibZzbGzYWPmY3x+YoVg/95zbjB4CxPPOQ8l5tYYM4mMaCthF8/1DIfBQQyWQ==} engines: {node: '>=18'} cpu: [arm64] os: [win32] @@ -2610,8 +2980,8 @@ packages: cpu: [ia32] os: [win32] - '@esbuild/win32-ia32@0.27.7': - resolution: {integrity: sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==} + '@esbuild/win32-ia32@0.28.2': + resolution: {integrity: sha512-YmJbfTlvU7Sdn9BB+4PRES4oB6pxgS37MAONj+hBr/cpXS1aBPKXxNnDbu+QCWPj0o9dgyxeq79g6c5P8KeuYA==} engines: {node: '>=18'} cpu: [ia32] os: [win32] @@ -2628,8 +2998,8 @@ packages: cpu: [x64] os: [win32] - '@esbuild/win32-x64@0.27.7': - resolution: {integrity: sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==} + '@esbuild/win32-x64@0.28.2': + resolution: {integrity: sha512-5ebpxr3nWMzrL/rnUI755Jkuee0bHL/Gq0WTF9lvcpv73wAp5eu8MfBUgWK9bhWvZjj7yX8etf/8tI8Ney695g==} engines: {node: '>=18'} cpu: [x64] os: [win32] @@ -2676,17 +3046,21 @@ packages: '@expo/sudo-prompt@9.3.2': resolution: {integrity: sha512-HHQigo3rQWKMDzYDLkubN5WQOYXJJE2eNqIQC2axC2iO3mHdwnIR7FgZVvHWtBwAdzBgAP0ECp8KqS8TiMKvgw==} - '@farcaster/miniapp-core@0.5.1': - resolution: {integrity: sha512-5QFn9zTV8GHUqZF31X9iwq9tNlnoOgP/o0UXb+QmdNeJsWXrhUFBKYl+C7KQOhVw2xqWKhBSDgYIHOkSRua3vg==} + '@farcaster/miniapp-core@0.6.0': + resolution: {integrity: sha512-sgDQdU6fQDXYbNbjuvvwhww1rwf/S0JCnKsp/o2K+ubtboA3SOiy3Wrc+taBnAh56CCxVbZN9Hck3OpYh9wINw==} - '@farcaster/miniapp-sdk@0.2.3': - resolution: {integrity: sha512-FwxqGcYCXw3HyGfDuchFUmQN9Gd49jTJs585zzQv6l1Oba6A/vVVCYohEG6QxRT6b/UrdemImpNMGTnqAZ3hKw==} + '@farcaster/miniapp-sdk@0.3.0': + resolution: {integrity: sha512-mxze24B5SSLwqpPqUmzthfsGGPeevJvDuOEbLJay1DDgPS/B0LswA0XXfz4d6pViA7Y4TkbeAPMAfuVZ9nIqgQ==} '@farcaster/quick-auth@0.0.6': resolution: {integrity: sha512-tiZndhpfDtEhaKlkmS5cVDuS+A/tafqZT3y9I44rC69m3beJok6e8dIH2JhxVy3EvOWTyTBnrmNn6GOOh+qK6A==} peerDependencies: typescript: 5.8.3 + '@fastify/busboy@2.1.1': + resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==} + engines: {node: '>=14'} + '@fastify/busboy@3.2.0': resolution: {integrity: sha512-m9FVDXU3GT2ITSe0UaMA5rU3QkfC/UXtCU8y0gSN/GugTqtVldOBWIB5V6V3sbmenVZUIpU6f+mPEO2+m5iTaA==} @@ -2819,6 +3193,13 @@ packages: peerDependencies: hono: ^4 + '@hono/node-ws@1.3.1': + resolution: {integrity: sha512-vo/MwCnpJAVHBkGzWjCJ28wF45fYHAfbPZcH2rodZODHtch2GHA94KtMfusmVycTUtsLAsaNsHhtY6P8X3RQsA==} + engines: {node: '>=18.14.1'} + peerDependencies: + '@hono/node-server': ^1.19.11 + hono: ^4.6.0 + '@hookform/resolvers@3.10.0': resolution: {integrity: sha512-79Dv+3mDF7i+2ajj7SkypSKHhl1cbln1OGavqrsF7p6mbUv11xpqpacPsGDCTRvCSjEEIez2ef1NveSVL3b0Ag==} peerDependencies: @@ -2841,6 +3222,12 @@ packages: resolution: {integrity: sha512-farwTW1ffFt3NVvqZQIcd0VBKByLK6ctnfn4XM7Rf9Mf5JJbNwVPV1Wll046E/MlKAaZEM6sFDGAh+JCnnmqyQ==} engines: {node: '>=20.0.0'} + '@iconify/types@2.0.0': + resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} + + '@iconify/utils@3.1.7': + resolution: {integrity: sha512-JZHlwdID+dy+lTgbYC8NEC4zeugqeYsc6jewvzb4c58kHauJn+X7rNwQjxz5p2qSjqaEeQoLkCIQ9v/H4PK0/w==} + '@img/colour@1.1.0': resolution: {integrity: sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==} engines: {node: '>=18'} @@ -3258,8 +3645,8 @@ packages: resolution: {integrity: sha512-RQgQ4uQ+pLbqXfOmieB91ejmLwvSgv9nLx6sT6sD83s7umBypgg+OIBOBbEUiJXrfpnp9j0mRhYYdzp9uqq3lA==} engines: {node: '>=12'} - '@isaacs/ttlcache@2.1.4': - resolution: {integrity: sha512-7kMz0BJpMvgAMkyglums7B2vtrn5g0a0am77JY0GjkZZNetOBCFn7AG7gKCwT0QPiXyxW7YIQSgtARknUEOcxQ==} + '@isaacs/ttlcache@2.1.5': + resolution: {integrity: sha512-VwGZqqjAWPICTmxUZnbpEfO60LhPWzquik+bmyXGY7pYRn6diEvCI5i6Ca+J6o2y4vS73HrpuMTo2dOvUevH8w==} engines: {node: '>=12'} '@istanbuljs/load-nyc-config@1.1.0': @@ -3340,9 +3727,15 @@ packages: resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jetbrains/websandbox@1.4.1': + resolution: {integrity: sha512-7FcQ9flzW0H+AjLlCRdhAE47zZxLtCwEcZjHvxtNLa0LbKMwEBBp0cQIaJ3vowCoUh6wqmSUXUCMtQzdv/SpLg==} + '@jridgewell/gen-mapping@0.3.13': resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} + '@jridgewell/gen-mapping@0.4.0-beta.0': + resolution: {integrity: sha512-JdGNkbE4GlNPYQhM0L95fBQr7ctLZJ276QXQLTad4t1oSdnnCI3fDq9DW3BqYAWv8Wc3+HS+4Gsii1oPMCfz1w==} + '@jridgewell/remapping@2.3.5': resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} @@ -3356,6 +3749,9 @@ packages: '@jridgewell/sourcemap-codec@1.5.5': resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} + '@jridgewell/sourcemap-codec@1.6.0': + resolution: {integrity: sha512-T7jf+5zgsZHwNJ4lvQ7/aezbyk0nNX+zJVWpmHA7VYsEx7a7qr5Rg5IbtJFqkgze5Y2sruq1RUY8Q837Od7iFw==} + '@jridgewell/trace-mapping@0.3.31': resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} @@ -3540,136 +3936,131 @@ packages: typeorm: optional: true - '@langchain/community@0.3.59': - resolution: {integrity: sha512-lYoVFC9wArWMXaixDgIadTE22jk4ZYAvSHHmwaMRagkGr5f4kyqMeJ83UUeW76XPx2cBy2fRSO+acSgqSuWE6A==} - engines: {node: '>=18'} + '@langchain/community@1.1.27': + resolution: {integrity: sha512-s2U3w7QV7QpkFtY1eZMni4poz+nKLFclpDi3a7hUbZ67ttsGaU9WkZ2BiLuzLIs+IFaUvON/KcGkE8EqAl9aPA==} + engines: {node: '>=20'} deprecated: This package has been deprecated. See https://github.com/langchain-ai/langchainjs-community/issues/61 for more info peerDependencies: - '@arcjet/redact': ^v1.0.0-alpha.23 + '@arcjet/redact': ^v1.2.0 '@aws-crypto/sha256-js': ^5.0.0 - '@aws-sdk/client-bedrock-agent-runtime': ^3.749.0 - '@aws-sdk/client-bedrock-runtime': ^3.749.0 - '@aws-sdk/client-dynamodb': ^3.749.0 - '@aws-sdk/client-kendra': ^3.749.0 - '@aws-sdk/client-lambda': ^3.749.0 - '@aws-sdk/client-s3': ^3.749.0 - '@aws-sdk/client-sagemaker-runtime': ^3.749.0 - '@aws-sdk/client-sfn': ^3.749.0 + '@aws-sdk/client-dynamodb': ^3.1001.0 + '@aws-sdk/client-lambda': ^3.1001.0 + '@aws-sdk/client-s3': ^3.1001.0 + '@aws-sdk/client-sagemaker-runtime': ^3.1001.0 + '@aws-sdk/client-sfn': ^3.1001.0 '@aws-sdk/credential-provider-node': ^3.388.0 '@aws-sdk/dsql-signer': '*' - '@azure/search-documents': ^12.0.0 - '@azure/storage-blob': ^12.15.0 + '@azure/search-documents': ^12.2.0 + '@azure/storage-blob': ^12.31.0 '@browserbasehq/sdk': '*' '@browserbasehq/stagehand': ^1.0.0 '@clickhouse/client': ^0.2.5 - '@cloudflare/ai': '*' '@datastax/astra-db-ts': ^1.0.0 '@elastic/elasticsearch': ^8.4.0 '@getmetal/metal-sdk': '*' '@getzep/zep-cloud': ^1.0.6 - '@getzep/zep-js': ^0.9.0 - '@gomomento/sdk': ^1.51.1 - '@gomomento/sdk-core': ^1.51.1 - '@google-ai/generativelanguage': '*' + '@getzep/zep-js': ^2.0.2 + '@gomomento/sdk-core': ^1.117.2 '@google-cloud/storage': ^6.10.1 || ^7.7.0 '@gradientai/nodejs-sdk': ^1.2.0 - '@huggingface/inference': ^4.0.5 - '@huggingface/transformers': ^3.5.2 + '@huggingface/inference': ^4.13.14 + '@huggingface/transformers': ^3.8.1 '@ibm-cloud/watsonx-ai': '*' '@lancedb/lancedb': ^0.19.1 - '@langchain/core': '>=0.3.58 <0.4.0' + '@langchain/core': ^1.1.38 '@layerup/layerup-security': ^1.5.12 - '@libsql/client': ^0.14.0 - '@mendable/firecrawl-js': ^1.4.3 + '@libsql/client': ^0.17.0 + '@mendable/firecrawl-js': ^4.15.2 '@mlc-ai/web-llm': '*' '@mozilla/readability': '*' '@neondatabase/serverless': '*' - '@notionhq/client': ^2.2.10 + '@notionhq/client': ^5.11.1 '@opensearch-project/opensearch': '*' '@pinecone-database/pinecone': '*' '@planetscale/database': ^1.8.0 '@premai/prem-sdk': ^0.3.25 - '@qdrant/js-client-rest': ^1.15.0 + '@qdrant/js-client-rest': '*' '@raycast/api': ^1.55.2 '@rockset/client': ^0.9.1 - '@smithy/eventstream-codec': ^2.0.5 - '@smithy/protocol-http': ^3.0.6 - '@smithy/signature-v4': ^2.0.10 - '@smithy/util-utf8': ^2.0.0 - '@spider-cloud/spider-client': ^0.0.21 + '@smithy/eventstream-codec': ^4.2.10 + '@smithy/protocol-http': ^5.3.10 + '@smithy/signature-v4': ^5.3.10 + '@smithy/util-utf8': ^4.2.2 + '@spider-cloud/spider-client': ^0.2.0 '@supabase/supabase-js': ^2.45.0 '@tensorflow-models/universal-sentence-encoder': '*' - '@tensorflow/tfjs-converter': '*' '@tensorflow/tfjs-core': '*' '@upstash/ratelimit': ^1.1.3 || ^2.0.3 '@upstash/redis': ^1.20.6 '@upstash/vector': ^1.1.1 '@vercel/kv': '*' '@vercel/postgres': '*' - '@writerai/writer-sdk': ^0.40.2 - '@xata.io/client': ^0.28.0 + '@writerai/writer-sdk': ^3.6.0 + '@xata.io/client': ^0.30.1 + '@xenova/transformers': '*' '@zilliz/milvus2-sdk-node': '>=2.3.5' - apify-client: ^2.7.1 - assemblyai: ^4.6.0 - azion: ^1.11.1 - better-sqlite3: '>=9.4.0 <12.0.0' + apify-client: ^2.22.2 + assemblyai: ^4.25.1 + azion: ^3.1.2 + better-sqlite3: '>=9.4.0 <13.0.0' cassandra-driver: ^4.7.2 - cborg: ^4.1.1 - cheerio: ^1.0.0-rc.12 + cborg: ^4.5.8 + cheerio: ^1.2.0 chromadb: '*' closevector-common: 0.1.3 closevector-node: 0.1.6 closevector-web: 0.1.6 cohere-ai: '*' - convex: ^1.3.1 + convex: ^1.32.0 + couchbase: ^4.6.1 crypto-js: ^4.2.0 - d3-dsv: ^2.0.0 - discord.js: ^14.14.1 + d3-dsv: ^3.0.1 + discord.js: ^14.25.1 duck-duck-scrape: ^2.2.5 epub2: ^3.0.1 + faiss-node: '*' fast-xml-parser: '*' - firebase-admin: ^11.9.0 || ^12.0.0 || ^13.0.0 + firebase-admin: ^13.6.1 google-auth-library: '*' googleapis: '*' hnswlib-node: ^3.0.0 html-to-text: ^9.0.5 ibm-cloud-sdk-core: '*' - ignore: ^5.2.0 - interface-datastore: ^8.2.11 + ignore: ^7.0.5 + interface-datastore: ^9.0.2 ioredis: ^5.3.2 it-all: ^3.0.4 jsdom: '*' - jsonwebtoken: ^9.0.2 - llmonitor: ^0.5.9 - lodash: ^4.17.21 + jsonwebtoken: ^9.0.3 + lodash: ^4.17.23 lunary: ^0.7.10 - mammoth: ^1.6.0 - mariadb: ^3.4.0 - mem0ai: ^2.1.8 - mongodb: ^6.17.0 - mysql2: ^3.9.8 + mammoth: ^1.11.0 + mariadb: ^3.5.1 + mem0ai: ^2.2.4 + mongodb: '*' + mysql2: ^3.19.1 neo4j-driver: '*' + node-llama-cpp: '>=3.0.0' notion-to-md: ^3.1.0 - officeparser: ^4.0.4 + officeparser: ^6.0.4 openai: '*' - pdf-parse: 1.1.1 + pdf-parse: 2.4.5 pg: ^8.11.0 - pg-copy-streams: ^6.0.5 + pg-copy-streams: ^7.0.0 pickleparser: ^0.2.1 - playwright: ^1.32.1 - portkey-ai: ^0.1.11 + playwright: ^1.58.2 + portkey-ai: ^3.0.3 puppeteer: '*' pyodide: '>=0.24.1 <0.27.0' redis: '*' replicate: '*' sonix-speech-recognition: ^2.1.1 srt-parser-2: ^1.2.3 - typeorm: ^0.3.20 - typesense: ^1.5.3 + typeorm: ^0.3.28 + typesense: ^3.0.1 usearch: ^1.1.1 - voy-search: 0.6.2 - weaviate-client: ^3.5.2 - web-auth-library: ^1.0.3 + voy-search: 0.6.3 + weaviate-client: '*' word-extractor: '*' ws: ^8.14.2 youtubei.js: '*' @@ -3678,14 +4069,8 @@ packages: optional: true '@aws-crypto/sha256-js': optional: true - '@aws-sdk/client-bedrock-agent-runtime': - optional: true - '@aws-sdk/client-bedrock-runtime': - optional: true '@aws-sdk/client-dynamodb': optional: true - '@aws-sdk/client-kendra': - optional: true '@aws-sdk/client-lambda': optional: true '@aws-sdk/client-s3': @@ -3706,8 +4091,6 @@ packages: optional: true '@clickhouse/client': optional: true - '@cloudflare/ai': - optional: true '@datastax/astra-db-ts': optional: true '@elastic/elasticsearch': @@ -3718,12 +4101,8 @@ packages: optional: true '@getzep/zep-js': optional: true - '@gomomento/sdk': - optional: true '@gomomento/sdk-core': optional: true - '@google-ai/generativelanguage': - optional: true '@google-cloud/storage': optional: true '@gradientai/nodejs-sdk': @@ -3776,8 +4155,6 @@ packages: optional: true '@tensorflow-models/universal-sentence-encoder': optional: true - '@tensorflow/tfjs-converter': - optional: true '@tensorflow/tfjs-core': optional: true '@upstash/ratelimit': @@ -3794,6 +4171,8 @@ packages: optional: true '@xata.io/client': optional: true + '@xenova/transformers': + optional: true '@zilliz/milvus2-sdk-node': optional: true apify-client: @@ -3822,6 +4201,8 @@ packages: optional: true convex: optional: true + couchbase: + optional: true crypto-js: optional: true d3-dsv: @@ -3831,374 +4212,8 @@ packages: duck-duck-scrape: optional: true epub2: - optional: true - fast-xml-parser: - optional: true - firebase-admin: - optional: true - google-auth-library: - optional: true - googleapis: - optional: true - hnswlib-node: - optional: true - html-to-text: - optional: true - ignore: - optional: true - interface-datastore: - optional: true - ioredis: - optional: true - it-all: - optional: true - jsdom: - optional: true - jsonwebtoken: - optional: true - llmonitor: - optional: true - lodash: - optional: true - lunary: - optional: true - mammoth: - optional: true - mariadb: - optional: true - mem0ai: - optional: true - mongodb: - optional: true - mysql2: - optional: true - neo4j-driver: - optional: true - notion-to-md: - optional: true - officeparser: - optional: true - pdf-parse: - optional: true - pg: - optional: true - pg-copy-streams: - optional: true - pickleparser: - optional: true - playwright: - optional: true - portkey-ai: - optional: true - puppeteer: - optional: true - pyodide: - optional: true - redis: - optional: true - replicate: - optional: true - sonix-speech-recognition: - optional: true - srt-parser-2: - optional: true - typeorm: - optional: true - typesense: - optional: true - usearch: - optional: true - voy-search: - optional: true - weaviate-client: - optional: true - web-auth-library: - optional: true - word-extractor: - optional: true - ws: - optional: true - youtubei.js: - optional: true - - '@langchain/community@1.1.27': - resolution: {integrity: sha512-s2U3w7QV7QpkFtY1eZMni4poz+nKLFclpDi3a7hUbZ67ttsGaU9WkZ2BiLuzLIs+IFaUvON/KcGkE8EqAl9aPA==} - engines: {node: '>=20'} - deprecated: This package has been deprecated. See https://github.com/langchain-ai/langchainjs-community/issues/61 for more info - peerDependencies: - '@arcjet/redact': ^v1.2.0 - '@aws-crypto/sha256-js': ^5.0.0 - '@aws-sdk/client-dynamodb': ^3.1001.0 - '@aws-sdk/client-lambda': ^3.1001.0 - '@aws-sdk/client-s3': ^3.1001.0 - '@aws-sdk/client-sagemaker-runtime': ^3.1001.0 - '@aws-sdk/client-sfn': ^3.1001.0 - '@aws-sdk/credential-provider-node': ^3.388.0 - '@aws-sdk/dsql-signer': '*' - '@azure/search-documents': ^12.2.0 - '@azure/storage-blob': ^12.31.0 - '@browserbasehq/sdk': '*' - '@browserbasehq/stagehand': ^1.0.0 - '@clickhouse/client': ^0.2.5 - '@datastax/astra-db-ts': ^1.0.0 - '@elastic/elasticsearch': ^8.4.0 - '@getmetal/metal-sdk': '*' - '@getzep/zep-cloud': ^1.0.6 - '@getzep/zep-js': ^2.0.2 - '@gomomento/sdk-core': ^1.117.2 - '@google-cloud/storage': ^6.10.1 || ^7.7.0 - '@gradientai/nodejs-sdk': ^1.2.0 - '@huggingface/inference': ^4.13.14 - '@huggingface/transformers': ^3.8.1 - '@ibm-cloud/watsonx-ai': '*' - '@lancedb/lancedb': ^0.19.1 - '@langchain/core': ^1.1.38 - '@layerup/layerup-security': ^1.5.12 - '@libsql/client': ^0.17.0 - '@mendable/firecrawl-js': ^4.15.2 - '@mlc-ai/web-llm': '*' - '@mozilla/readability': '*' - '@neondatabase/serverless': '*' - '@notionhq/client': ^5.11.1 - '@opensearch-project/opensearch': '*' - '@pinecone-database/pinecone': '*' - '@planetscale/database': ^1.8.0 - '@premai/prem-sdk': ^0.3.25 - '@qdrant/js-client-rest': '*' - '@raycast/api': ^1.55.2 - '@rockset/client': ^0.9.1 - '@smithy/eventstream-codec': ^4.2.10 - '@smithy/protocol-http': ^5.3.10 - '@smithy/signature-v4': ^5.3.10 - '@smithy/util-utf8': ^4.2.2 - '@spider-cloud/spider-client': ^0.2.0 - '@supabase/supabase-js': ^2.45.0 - '@tensorflow-models/universal-sentence-encoder': '*' - '@tensorflow/tfjs-core': '*' - '@upstash/ratelimit': ^1.1.3 || ^2.0.3 - '@upstash/redis': ^1.20.6 - '@upstash/vector': ^1.1.1 - '@vercel/kv': '*' - '@vercel/postgres': '*' - '@writerai/writer-sdk': ^3.6.0 - '@xata.io/client': ^0.30.1 - '@xenova/transformers': '*' - '@zilliz/milvus2-sdk-node': '>=2.3.5' - apify-client: ^2.22.2 - assemblyai: ^4.25.1 - azion: ^3.1.2 - better-sqlite3: '>=9.4.0 <13.0.0' - cassandra-driver: ^4.7.2 - cborg: ^4.5.8 - cheerio: ^1.2.0 - chromadb: '*' - closevector-common: 0.1.3 - closevector-node: 0.1.6 - closevector-web: 0.1.6 - cohere-ai: '*' - convex: ^1.32.0 - couchbase: ^4.6.1 - crypto-js: ^4.2.0 - d3-dsv: ^3.0.1 - discord.js: ^14.25.1 - duck-duck-scrape: ^2.2.5 - epub2: ^3.0.1 - faiss-node: '*' - fast-xml-parser: '*' - firebase-admin: ^13.6.1 - google-auth-library: '*' - googleapis: '*' - hnswlib-node: ^3.0.0 - html-to-text: ^9.0.5 - ibm-cloud-sdk-core: '*' - ignore: ^7.0.5 - interface-datastore: ^9.0.2 - ioredis: ^5.3.2 - it-all: ^3.0.4 - jsdom: '*' - jsonwebtoken: ^9.0.3 - lodash: ^4.17.23 - lunary: ^0.7.10 - mammoth: ^1.11.0 - mariadb: ^3.5.1 - mem0ai: ^2.2.4 - mongodb: '*' - mysql2: ^3.19.1 - neo4j-driver: '*' - node-llama-cpp: '>=3.0.0' - notion-to-md: ^3.1.0 - officeparser: ^6.0.4 - openai: '*' - pdf-parse: 2.4.5 - pg: ^8.11.0 - pg-copy-streams: ^7.0.0 - pickleparser: ^0.2.1 - playwright: ^1.58.2 - portkey-ai: ^3.0.3 - puppeteer: '*' - pyodide: '>=0.24.1 <0.27.0' - redis: '*' - replicate: '*' - sonix-speech-recognition: ^2.1.1 - srt-parser-2: ^1.2.3 - typeorm: ^0.3.28 - typesense: ^3.0.1 - usearch: ^1.1.1 - voy-search: 0.6.3 - weaviate-client: '*' - word-extractor: '*' - ws: ^8.14.2 - youtubei.js: '*' - peerDependenciesMeta: - '@arcjet/redact': - optional: true - '@aws-crypto/sha256-js': - optional: true - '@aws-sdk/client-dynamodb': - optional: true - '@aws-sdk/client-lambda': - optional: true - '@aws-sdk/client-s3': - optional: true - '@aws-sdk/client-sagemaker-runtime': - optional: true - '@aws-sdk/client-sfn': - optional: true - '@aws-sdk/credential-provider-node': - optional: true - '@aws-sdk/dsql-signer': - optional: true - '@azure/search-documents': - optional: true - '@azure/storage-blob': - optional: true - '@browserbasehq/sdk': - optional: true - '@clickhouse/client': - optional: true - '@datastax/astra-db-ts': - optional: true - '@elastic/elasticsearch': - optional: true - '@getmetal/metal-sdk': - optional: true - '@getzep/zep-cloud': - optional: true - '@getzep/zep-js': - optional: true - '@gomomento/sdk-core': - optional: true - '@google-cloud/storage': - optional: true - '@gradientai/nodejs-sdk': - optional: true - '@huggingface/inference': - optional: true - '@huggingface/transformers': - optional: true - '@lancedb/lancedb': - optional: true - '@layerup/layerup-security': - optional: true - '@libsql/client': - optional: true - '@mendable/firecrawl-js': - optional: true - '@mlc-ai/web-llm': - optional: true - '@mozilla/readability': - optional: true - '@neondatabase/serverless': - optional: true - '@notionhq/client': - optional: true - '@opensearch-project/opensearch': - optional: true - '@pinecone-database/pinecone': - optional: true - '@planetscale/database': - optional: true - '@premai/prem-sdk': - optional: true - '@qdrant/js-client-rest': - optional: true - '@raycast/api': - optional: true - '@rockset/client': - optional: true - '@smithy/eventstream-codec': - optional: true - '@smithy/protocol-http': - optional: true - '@smithy/signature-v4': - optional: true - '@smithy/util-utf8': - optional: true - '@spider-cloud/spider-client': - optional: true - '@supabase/supabase-js': - optional: true - '@tensorflow-models/universal-sentence-encoder': - optional: true - '@tensorflow/tfjs-core': - optional: true - '@upstash/ratelimit': - optional: true - '@upstash/redis': - optional: true - '@upstash/vector': - optional: true - '@vercel/kv': - optional: true - '@vercel/postgres': - optional: true - '@writerai/writer-sdk': - optional: true - '@xata.io/client': - optional: true - '@xenova/transformers': - optional: true - '@zilliz/milvus2-sdk-node': - optional: true - apify-client: - optional: true - assemblyai: - optional: true - azion: - optional: true - better-sqlite3: - optional: true - cassandra-driver: - optional: true - cborg: - optional: true - cheerio: - optional: true - chromadb: - optional: true - closevector-common: - optional: true - closevector-node: - optional: true - closevector-web: - optional: true - cohere-ai: - optional: true - convex: - optional: true - couchbase: - optional: true - crypto-js: - optional: true - d3-dsv: - optional: true - discord.js: - optional: true - duck-duck-scrape: - optional: true - epub2: - optional: true - faiss-node: + optional: true + faiss-node: optional: true fast-xml-parser: optional: true @@ -4287,14 +4302,14 @@ packages: youtubei.js: optional: true - '@langchain/core@0.3.80': - resolution: {integrity: sha512-vcJDV2vk1AlCwSh3aBm/urQ1ZrlXFFBocv11bz/NBUfLWD5/UDNMzwPdaAd2dKvNmTWa9FM2lirLU3+JCf4cRA==} - engines: {node: '>=18'} - '@langchain/core@1.1.39': resolution: {integrity: sha512-DP9c7TREy6iA7HnywstmUAsNyJNYTFpRg2yBfQ+6H0l1HnvQzei9GsQ36GeOLxgRaD3vm9K8urCcawSC7yQpCw==} engines: {node: '>=20'} + '@langchain/core@1.2.11': + resolution: {integrity: sha512-8yuWLLloTSYA453akm2JSadOVa8kGDY8v+kTzQ6kTY6aIETTEIxgysjZWyKrWQLo3UazctsSoGJ8JrdCGFL4/w==} + engines: {node: '>=20'} + '@langchain/google-common@0.1.8': resolution: {integrity: sha512-8auqWw2PMPhcHQHS+nMN3tVZrUPgSLckUaFeOHDOeSBiDvBd4KCybPwyl2oCwMDGvmyIxvOOckkMdeGaJ92vpQ==} engines: {node: '>=18'} @@ -4313,26 +4328,19 @@ packages: peerDependencies: '@langchain/core': ^1.0.1 - '@langchain/langgraph-sdk@0.0.70': - resolution: {integrity: sha512-O8I12bfeMVz5fOrXnIcK4IdRf50IqyJTO458V56wAIHLNoi4H8/JHM+2M+Y4H2PtslXIGnvomWqlBd0eY5z/Og==} + '@langchain/langgraph-checkpoint@1.1.5': + resolution: {integrity: sha512-BwDwl5VeTOh6CVuiIPgsUgfK51vTJDMSbFcSCUfjJWsl8/DPdK/mbv+ejxJstkSk/BlSPMP4JfXWcN6jD2ea2Q==} + engines: {node: '>=18'} peerDependencies: - '@langchain/core': '>=0.2.31 <0.4.0' - react: 19.2.4 - peerDependenciesMeta: - '@langchain/core': - optional: true - react: - optional: true + '@langchain/core': ^1.1.48 - '@langchain/langgraph-sdk@0.1.10': - resolution: {integrity: sha512-9srSCb2bSvcvehMgjA2sMMwX0o1VUgPN6ghwm5Fwc9JGAKsQa6n1S4eCwy1h4abuYxwajH5n3spBw+4I2WYbgw==} + '@langchain/langgraph-sdk@1.11.0': + resolution: {integrity: sha512-Gk6mrCs2fbqKr3luQxVM5ZEcpjK35QO5w/Tr9h/RQPzeKqrsHyPrP4NR9udfgy1ycu7KvvoZ3V0t3beN/edx0g==} peerDependencies: - '@langchain/core': '>=0.2.31 <0.4.0 || ^1.0.0-alpha' + '@langchain/core': ^1.1.48 react: 19.2.4 react-dom: 19.2.4 peerDependenciesMeta: - '@langchain/core': - optional: true react: optional: true react-dom: @@ -4369,17 +4377,12 @@ packages: zod-to-json-schema: optional: true - '@langchain/openai@0.4.9': - resolution: {integrity: sha512-NAsaionRHNdqaMjVLPkFCyjUDze+OqRHghA1Cn4fPoAafz+FXcl9c7LlEl9Xo0FH6/8yiCl7Rw2t780C/SBVxQ==} + '@langchain/langgraph@1.4.15': + resolution: {integrity: sha512-QG8led1xbFfgikAIF9E5G1Kp1KLtq/xv7YASWy+wnPftQw0Hxu0kpPXl0Q1U2Dfpwb8w/Vfz0QarUR8eI/xtRw==} engines: {node: '>=18'} peerDependencies: - '@langchain/core': '>=0.3.39 <0.4.0' - - '@langchain/openai@0.5.18': - resolution: {integrity: sha512-CX1kOTbT5xVFNdtLjnM0GIYNf+P7oMSu+dGCFxxWRa3dZwWiuyuBXCm+dToUGxDLnsHuV1bKBtIzrY1mLq/A1Q==} - engines: {node: '>=18'} - peerDependencies: - '@langchain/core': '>=0.3.58 <0.4.0' + '@langchain/core': ^1.1.48 + zod: ^3.25.32 || ^4.2.0 '@langchain/openai@1.4.1': resolution: {integrity: sha512-jaHk4TnLqWrQ1KYmavvwCImW6x8pBy6LLTK73tzSMg7HBLbq0g/l7EkpMcxZWDOvyufuCXUqO2bj47apcOhw6Q==} @@ -4393,30 +4396,21 @@ packages: peerDependencies: '@langchain/core': ^1.1.39 + '@langchain/protocol@0.0.19': + resolution: {integrity: sha512-9hKcRrH7cBX6gfutdfXPoft1OCchHe4FEpALoDJMl5Qu+n/YG5ynZmyu8+8cxORlPwHBoKTxggvXz+76M1yX1Q==} + '@langchain/tavily@1.2.0': resolution: {integrity: sha512-aPLPgtw8+b/Rnr3H+X8H8z98T/Y7JuCE4B5eqRDHoEWgZvMDUFF7divqwQqCTMq2deQttlVrm5bN5JbKaAR7/w==} engines: {node: '>=20'} peerDependencies: '@langchain/core': ^1.0.0 - '@langchain/textsplitters@0.1.0': - resolution: {integrity: sha512-djI4uw9rlkAb5iMhtLED+xJebDdAG935AdP4eRTB02R7OB/act55Bj9wsskhZsvuyQRpO4O1wQOp85s6T6GWmw==} - engines: {node: '>=18'} - peerDependencies: - '@langchain/core': '>=0.2.21 <0.4.0' - '@langchain/textsplitters@1.0.1': resolution: {integrity: sha512-rheJlB01iVtrOUzttscutRgLybPH9qR79EyzBEbf1u97ljWyuxQfCwIWK+SjoQTM9O8M7GGLLRBSYE26Jmcoww==} engines: {node: '>=20'} peerDependencies: '@langchain/core': ^1.0.0 - '@langchain/weaviate@0.2.3': - resolution: {integrity: sha512-WqNGn1eSrI+ZigJd7kZjCj3fvHBYicKr054qts2nNJ+IyO5dWmY3oFTaVHFq1OLFVZJJxrFeDnxSEOC3JnfP0w==} - engines: {node: '>=18'} - peerDependencies: - '@langchain/core': '>=0.2.21 <0.4.0' - '@ledgerhq/devices@8.10.0': resolution: {integrity: sha512-ytT66KI8MizFX6dGJKthOzPDw5uNRmmg+RaMta62jbFePKYqfXtYTp6Wc0ErTXaL8nFS3IujHENwKthPmsj6jw==} @@ -4501,44 +4495,41 @@ packages: peerDependencies: zod: ^3.25.0 || ^4.0.0 - '@mastra/core@1.21.0': - resolution: {integrity: sha512-DgFZpdvR1XR6tE/ocX+bhjlzGfjuSDPfiF0aWFYXpmvs66fKeLE/S/tWxkhWOPGr64e3fCU6U1GGOaPI1nh7OA==} + '@mastra/core@1.67.0': + resolution: {integrity: sha512-Z+kVa5SXpZ7c1xrycGOZ8tGFTDAeXYR+6rC8gAKY/m6Ac9dOPDaPCfQRmFHFxAgKIuxDj+bsauFPTnpkl9S4lw==} engines: {node: '>=22.13.0'} peerDependencies: zod: ^3.25.0 || ^4.0.0 - '@mastra/deployer@1.21.0': - resolution: {integrity: sha512-+B9z1bNCS+cXHHy8GRtNzYP9N5zjRucK3MicSc28fzPCxGib7SbqDJdLvUIRdtaxBLG9chKqM2enToPuALKwSQ==} + '@mastra/deployer@1.67.0': + resolution: {integrity: sha512-C1pDaZowdY0Kv337/A9rv7+HEWLYFTiRkLy5YLAAlz8JetssnMRNwHu2ftV6lIE54HQtqopMwKtlKyJaYXZ0jQ==} engines: {node: '>=22.13.0'} peerDependencies: - '@mastra/core': '>=1.0.0-0 <2.0.0-0' - zod: ^3.25.0 || ^4.0.0 + '@mastra/core': '>=1.50.0-0 <2.0.0-0' - '@mastra/loggers@1.1.0': - resolution: {integrity: sha512-SwEsBsckP3/00th4iV80k5/rj2OjaArIR8fedPq4MMnWS1a6HurXjnFF4ISGHuiTVvsx15a+3sRVy0IfSFp+QQ==} + '@mastra/loggers@1.3.2': + resolution: {integrity: sha512-8rw+hVlXFiw28UjZ6uaKlyXqsn55aOtyA3n+tVzPGU7+mg0FJmuGNKsIFDz+gaATi5b5vZPjPDgOXWZGRFYoAg==} engines: {node: '>=22.13.0'} peerDependencies: '@mastra/core': '>=1.0.0-0 <2.0.0-0' - '@mastra/mcp@1.4.1': - resolution: {integrity: sha512-LvFSh7NlKB7sMNfJKy/38h4QNN49Kqo6MmeM4mT6l3D8obUyYaFtrscmosuEoD7JnRx0ASuptGWKW0x+Afxp1Q==} + '@mastra/mcp@1.18.0': + resolution: {integrity: sha512-t9oO9N4YKgdW04h9dQ0M0WysE2INxRGEn8zkqcIrHkVg6kLSpu4pFMoI37v09cXrgzjcAI7uWRFAgBgRz2Kxwg==} engines: {node: '>=22.13.0'} peerDependencies: - '@mastra/core': '>=1.0.0-0 <2.0.0-0' - zod: ^3.25.0 || ^4.0.0 + '@mastra/core': '>=1.64.0-0 <2.0.0-0' - '@mastra/memory@1.13.0': - resolution: {integrity: sha512-fNAQ/C2ArKhmZwcRoy8oD1dEDKdIXyZrFMFX52GJzPcntlKx5YsL58BOB3kilFi/kFzfEE6h3nemv0CgI7l+SA==} + '@mastra/memory@1.30.0': + resolution: {integrity: sha512-rzl1tQLorwvHU6Ayi9T0ZiEiE/zKJGgPIpxmnZXTTJ9mn+Bs5FQ7tB4DHPidHNy1SVHRUwg3HRtqMX+nAeREaQ==} engines: {node: '>=22.13.0'} peerDependencies: '@mastra/core': '>=1.4.1-0 <2.0.0-0' - zod: ^3.25.0 || ^4.0.0 - '@mastra/pg@1.8.5': - resolution: {integrity: sha512-TNHA1KfgLrFjkjxuCDvn0s2Kqd9J4ivxbqGxOG4LA43SP8djYVoergigk5Us1JDktFIxGQru/HmS3HIOti0/tg==} + '@mastra/pg@1.25.0': + resolution: {integrity: sha512-RRgIRMBIKeCT/i5Mr8zFB1Pu6h9nLGui5Sd4C0wY454rOflexuHp1pUwlGsLRc3sB/79PhpAzPzyPkOoOV9ufQ==} engines: {node: '>=22.13.0'} peerDependencies: - '@mastra/core': '>=1.4.0-0 <2.0.0-0' + '@mastra/core': '>=1.63.1-0 <2.0.0-0' '@mastra/schema-compat@0.11.4': resolution: {integrity: sha512-oh3+enP3oYftZlmJAKQQj5VXR86KgTMwfMnwALZyLk04dPSWfVD2wGytoDg5Qbi3rX9qHj6g0rMNa0CUjR6aTg==} @@ -4546,19 +4537,22 @@ packages: ai: ^4.0.0 || ^5.0.0 zod: ^3.25.0 || ^4.0.0 - '@mastra/schema-compat@1.2.7': - resolution: {integrity: sha512-t63E0f5HcH8neXPfs3D5x4qqQM6Pf/pbhFUVk0cTC0bFo6609sT/+189I+2HY4sbAF3uzurOgy2fXIS4vfMkOA==} + '@mastra/schema-compat@1.3.10': + resolution: {integrity: sha512-ZrjvutWy3QJoJROA5PeSFdeFwDgyfGN1sOOObFirex9h9c/R4ReqRllCojNHSN0cKsKxkRlH6zBbWVTiybamUw==} engines: {node: '>=22.13.0'} peerDependencies: zod: ^3.25.0 || ^4.0.0 - '@mastra/server@1.21.0': - resolution: {integrity: sha512-VZTzNlsumEpibXjvDDyTbY9UzBgwa+TGO7CRReP+oaqfxu+kFi98ni9LuVGRQ8Hm9RhzuaO+PeRaVkxKgLN9oQ==} + '@mastra/server@1.67.0': + resolution: {integrity: sha512-tHez2qnKWMhfmjZrz6jFgSYxGAgIxm5Cb840qB7XmCr7o6Cjf1vlwOwCR4+112osBKu2lrnO0FNeNyg/7ueL/w==} engines: {node: '>=22.13.0'} peerDependencies: - '@mastra/core': '>=1.13.2-0 <2.0.0-0' + '@mastra/core': '>=1.50.0-0 <2.0.0-0' zod: ^3.25.0 || ^4.0.0 + '@mermaid-js/parser@1.2.1': + resolution: {integrity: sha512-n12NohV3mrUyUL2o93IgG/ifeW9FTyeJn3zDxkhwa8MJ9Fxg3HQMlA3RiGmD/3UnJvheztkjjQAjA2T4LmUcpw==} + '@meronex/icons@4.0.0': resolution: {integrity: sha512-WnoxUT02qawZSvsoPSwe7YOqOk0APysIHugiD3dYdc/QNeoigN4PD8mmmtmZFKlv8/Z7eERub0BmPkWcJ1BI+w==} peerDependencies: @@ -4567,6 +4561,38 @@ packages: '@microsoft/tsdoc@0.16.0': resolution: {integrity: sha512-xgAyonlVVS+q7Vc7qLW0UrJU7rSFcETRWsqdXZtjzRU8dF+6CkozTK4V4y1LwOX7j8r/vHphjDeMeGI4tNGeGA==} + '@modelcontextprotocol/client@2.0.0': + resolution: {integrity: sha512-8f1OghQ2rjzIOfqgUCP+8GiUWqRs89njoWLNqAe8kWmDePv3s1fZXseej+QXemssEuuOvLLmLO/kqM3IQHtISw==} + engines: {node: '>=20'} + + '@modelcontextprotocol/core@2.0.0': + resolution: {integrity: sha512-pJCEwGG7Lfr/+PQp9ZTwKXNeO5wzbfKL7H3MYpCorM4oFBoQrdjnBgEoqG+RjhsvS1FKrDbKux+M1HhlnGWqcA==} + engines: {node: '>=20'} + + '@modelcontextprotocol/ext-apps@1.7.5': + resolution: {integrity: sha512-TjPH2S2y5UEGKhmI6+XGFuqfqOV4ppe1x6DA3txnUaEWkgtA4G5vo14jGKFZmegdkZ1H4QMLyujLvoU1BEdnAg==} + engines: {node: '>=20'} + peerDependencies: + '@modelcontextprotocol/sdk': ^1.29.0 + react: 19.2.4 + react-dom: 19.2.4 + zod: ^3.25.0 || ^4.0.0 + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + + '@modelcontextprotocol/node@2.0.0': + resolution: {integrity: sha512-Y4hAC2XdGDUdDOCbLDOCA4+aL3NUldjsOWlDL/YwpAxrPhRm1xHd7lZ+mLacvZ9t3PaH28wgNoaLQGrIk1P2pg==} + engines: {node: '>=20'} + peerDependencies: + '@modelcontextprotocol/server': ^2.0.0 + hono: ^4.11.4 + peerDependenciesMeta: + hono: + optional: true + '@modelcontextprotocol/sdk@1.27.1': resolution: {integrity: sha512-sr6GbP+4edBwFndLbM60gf07z0FQ79gaExpnsjMGePXqFcSSb7t6iscpjk9DhFhwd+mTEQrzNafGP8/iGGFYaA==} engines: {node: '>=18'} @@ -4577,6 +4603,30 @@ packages: '@cfworker/json-schema': optional: true + '@modelcontextprotocol/sdk@1.30.0': + resolution: {integrity: sha512-xKd8OIzlqNzcqcNumGAa6g+PW2kjD5vrpcKOnfldAUPP3j7lnqMPwlTXQm8gF+UwH72z0lqaRbjr9hqGz0eITA==} + engines: {node: '>=18'} + peerDependencies: + '@cfworker/json-schema': ^4.1.1 + zod: ^3.25 || ^4.0 + peerDependenciesMeta: + '@cfworker/json-schema': + optional: true + + '@modelcontextprotocol/server-legacy@2.0.0': + resolution: {integrity: sha512-LnffC1BSqFMHtMQxEz92lqDpHWma+ErV3ghdHDgdkCyYzVcCYKcUT5loq4kflty+Bf9C9qjJqbnphyBWyCqo8Q==} + engines: {node: '>=20'} + deprecated: This package is a frozen copy of v1's SSE transport and OAuth Authorization Server helpers for migration purposes only. Use StreamableHTTP from @modelcontextprotocol/server and a dedicated OAuth server in production. Will not receive new features. + peerDependencies: + express: ^4.18.0 || ^5.0.0 + peerDependenciesMeta: + express: + optional: true + + '@modelcontextprotocol/server@2.0.0': + resolution: {integrity: sha512-YhHWdHfpFMQfd0prsEnxKeS3Qz3ytIGmsS0sth4KDjnacIT7hxk6hXHkJ9KysxlkvTM+WZAtQbbcUhdoP4Hvtw==} + engines: {node: '>=20'} + '@mole-inc/bin-wrapper@8.0.1': resolution: {integrity: sha512-sTGoeZnjI8N4KS+sW2AN95gDBErhAguvkw/tWdCjeM8bvxpz5lqrnd0vOJABA1A+Ic3zED7PYoLP/RANLgVotA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -4707,6 +4757,12 @@ packages: '@types/react': optional: true + '@napi-rs/lzma-linux-x64-gnu@1.5.1': + resolution: {integrity: sha512-oTXEIha4SsuXdTA4Iyskj0kpdx2yVXdhd75c2v3xGrHFfVMsbhTPZU/nMPL4sWKo4pBHm3aucLaqGlF696dTyQ==} + engines: {node: ^22.20 || ^24.12 || >=25} + cpu: [x64] + os: [linux] + '@napi-rs/nice-android-arm-eabi@1.1.1': resolution: {integrity: sha512-kjirL3N6TnRPv5iuHw36wnucNqXAO46dzK9oPb0wj076R5Xm8PfUVA9nAFB5ZNMmfJQJVKACAPd/Z2KYMppthw==} engines: {node: '>= 10'} @@ -6053,18 +6109,24 @@ packages: '@posthog/core@1.23.2': resolution: {integrity: sha512-zTDdda9NuSHrnwSOfFMxX/pyXiycF4jtU1kTr8DL61dHhV+7LF6XF1ndRZZTuaGGbfbb/GJYkEsjEX9SXfNZeQ==} - '@posthog/core@1.7.1': - resolution: {integrity: sha512-kjK0eFMIpKo9GXIbts8VtAknsoZ18oZorANdtuTj1CbgS28t4ZVq//HAWhnxEuXRTrtkd+SUJ6Ux3j2Af8NCuA==} + '@posthog/core@1.54.2': + resolution: {integrity: sha512-p0NuMjiZkploKG/aASj4nw4QDuhF87SIFWkelaFRrr3G0Myb7KWWUZot2hm5qXpPx7zKozVZJrJkGzC2kGBqbg==} '@posthog/types@1.359.1': resolution: {integrity: sha512-oQihoHWLnOkSkzOToCWKNigbJ7UZcIkl+rSJuq2PLwL7EB0Q/r1UGSbVCkrPH8xtPbYpi7w4TVpMrg41TMT+LQ==} + '@posthog/types@1.412.1': + resolution: {integrity: sha512-FxXsb9YOOME8bJI5K09qKeSvLjnZQ2dPV7wZpI7a8sERQtXkAuhBcPB/balCnVE7TYwhgtHj5NQss9BgQ5bAfQ==} + '@postiz/wallets@0.0.1': resolution: {integrity: sha512-zCkg5ZXHZkyCREvoAtxQAp5IoCYfSQs9xonzyMvV/LoY32KjudV5wc4rb4R7NYNdPTGfcni1R8ETojASnK6oUw==} engines: {node: '>=16'} peerDependencies: '@solana/web3.js': ^1.77.3 + '@preact/signals-core@1.14.4': + resolution: {integrity: sha512-HNB6HYeYKhQbJ1aKl+YRjrS4+QWHLKX6qKoUsfS/m0vqzsVaEBiZiaKbG/e+NKk2ch5ALQr/ihWaMHxiCuuWHA==} + '@prisma/client@6.5.0': resolution: {integrity: sha512-M6w1Ql/BeiGoZmhMdAZUXHu5sz5HubyVcKukbLs3l0ELcQb8hTUJxtGEChhv4SVJ0QJlwtLnwOLgIRQhpsm9dw==} engines: {node: '>=18.18'} @@ -6149,6 +6211,35 @@ packages: '@radix-ui/primitive@1.1.3': resolution: {integrity: sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==} + '@radix-ui/primitive@1.1.7': + resolution: {integrity: sha512-rqWnm76nYT8HoNNqEjpgJ7Pw/DrBj5iBTrmEPo6HTX5+VJyBNOqTdv4g89G63HuR5g0AaENoAcH7Is5fF2kZ8Q==} + + '@radix-ui/react-arrow@1.1.15': + resolution: {integrity: sha512-v4zggRcjadnI+ClKDuijlQEW4tw3NoaeHc/PwpKnLoLLKNUG4InLegkstooLcRIUWCs+8L22dGURCVuFfOKfnA==} + peerDependencies: + '@types/react': 19.1.8 + '@types/react-dom': 19.1.6 + react: 19.2.4 + react-dom: 19.2.4 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-collection@1.1.15': + resolution: {integrity: sha512-9W+B9NPF0NaaPh/1NJd3+KqsnlLqU9H7T2rvww+fp+T/evVXdNAyYcnfRQZFOjkR1ajQp3yORlqnI8soawLvNA==} + peerDependencies: + '@types/react': 19.1.8 + '@types/react-dom': 19.1.6 + react: 19.2.4 + react-dom: 19.2.4 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-compose-refs@1.0.0': resolution: {integrity: sha512-0KaSv6sx787/hK3eF53iOkiSLwAGlFMx5lotrqD2pTjB18KbybKoEIgkNZTKC60YECDQTKGTRcDBILwZVqVKvA==} peerDependencies: @@ -6163,6 +6254,15 @@ packages: '@types/react': optional: true + '@radix-ui/react-compose-refs@1.1.5': + resolution: {integrity: sha512-+48PbAAbq3didjJxa+OaWY2ZwgAKsNiRGyeHKszblZMQ+kcpd9pAaT11cMkGEie0vsOi3QdeTE6d5Fe3Gn61kA==} + peerDependencies: + '@types/react': 19.1.8 + react: 19.2.4 + peerDependenciesMeta: + '@types/react': + optional: true + '@radix-ui/react-context@1.0.0': resolution: {integrity: sha512-1pVM9RfOQ+n/N5PJK33kRSKsr1glNxomxONs5c49MliinBY6Yw2Q995qfBUUo0/Mbg05B/sGA0gkgPI7kmSHBg==} peerDependencies: @@ -6177,6 +6277,15 @@ packages: '@types/react': optional: true + '@radix-ui/react-context@1.2.2': + resolution: {integrity: sha512-RHCUGwKHDr0hDGg4X7ma4JG4/+12qxw8rkh5QKdDldlCvtja6nUx1Ef/8HVrJze81lEsgLQlqjzjGNHantgnQA==} + peerDependencies: + '@types/react': 19.1.8 + react: 19.2.4 + peerDependenciesMeta: + '@types/react': + optional: true + '@radix-ui/react-dialog@1.0.0': resolution: {integrity: sha512-Yn9YU+QlHYLWwV1XfKiqnGVpWYWk6MeBVM6x/bcoyPvxgjQGoeT35482viLPctTMWoMw0PoHgqfSox7Ig+957Q==} peerDependencies: @@ -6201,6 +6310,15 @@ packages: peerDependencies: react: 19.2.4 + '@radix-ui/react-direction@1.1.4': + resolution: {integrity: sha512-5pzg4FGQNpExhnhT2zlrP1wZFaYCd1K0nYWoFAdcYoYK868IEigqMX3B3f8yIoRlAhAeDWciLI6ZdCKHF9P4Vg==} + peerDependencies: + '@types/react': 19.1.8 + react: 19.2.4 + peerDependenciesMeta: + '@types/react': + optional: true + '@radix-ui/react-dismissable-layer@1.0.0': resolution: {integrity: sha512-n7kDRfx+LB1zLueRDvZ1Pd0bxdJWDUZNQ/GWoxDn2prnuJKRdxsjulejX/ePkOsLi2tTm6P24mDqlMSgQpsT6g==} peerDependencies: @@ -6220,6 +6338,32 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-dismissable-layer@1.1.19': + resolution: {integrity: sha512-8g4pfOL9HoKKLWGiypT+dphVqjFfmcXO5GBnhsG6zI+lxAx/8feQpr+1LSN8Re3hiZ+XkLNS4O9ztK11/LzQ6w==} + peerDependencies: + '@types/react': 19.1.8 + '@types/react-dom': 19.1.6 + react: 19.2.4 + react-dom: 19.2.4 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-dropdown-menu@2.1.24': + resolution: {integrity: sha512-geq8l2rJkxvkXsT9RMgtUE3P8pITFpTsvYpbySi1IH4fZEABD/Gp85myayFgxk0ktljGMJnCbeFkyTusvSvv7g==} + peerDependencies: + '@types/react': 19.1.8 + '@types/react-dom': 19.1.6 + react: 19.2.4 + react-dom: 19.2.4 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-focus-guards@1.0.0': resolution: {integrity: sha512-UagjDk4ijOAnGu4WMUPj9ahi7/zJJqNZ9ZAiGPp7waUWJO0O1aWXi/udPphI0IUjvrhBsZJGSN66dR2dsueLWQ==} peerDependencies: @@ -6234,12 +6378,34 @@ packages: '@types/react': optional: true + '@radix-ui/react-focus-guards@1.1.6': + resolution: {integrity: sha512-RNOJjfZMTyBM6xYmV3IVGXkPjIhcBAuv48POevAXwrGJhkWZ9p1rFoIS1JFooPuT193AZmRsCPhpoVJxx6OPoQ==} + peerDependencies: + '@types/react': 19.1.8 + react: 19.2.4 + peerDependenciesMeta: + '@types/react': + optional: true + '@radix-ui/react-focus-scope@1.0.0': resolution: {integrity: sha512-C4SWtsULLGf/2L4oGeIHlvWQx7Rf+7cX/vKOAD2dXW0A1b5QXwi3wWeaEgW+wn+SEVrraMUk05vLU9fZZz5HbQ==} peerDependencies: react: 19.2.4 react-dom: 19.2.4 + '@radix-ui/react-focus-scope@1.1.16': + resolution: {integrity: sha512-wmRZ2WWLvmt6KHy2rNPOdPUjwq5xOHY02+m+udwJTn0aNIox/rkskAvJTyTLGhPK6KgrUjlJUJpgmx/+wFiFIQ==} + peerDependencies: + '@types/react': 19.1.8 + '@types/react-dom': 19.1.6 + react: 19.2.4 + react-dom: 19.2.4 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-focus-scope@1.1.7': resolution: {integrity: sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==} peerDependencies: @@ -6267,6 +6433,15 @@ packages: '@types/react': optional: true + '@radix-ui/react-id@1.1.4': + resolution: {integrity: sha512-TMQp2llA+RYn7JcjnrMnz7wN4pcVttPZnRZo52PLQsoLVKzNlVwUeHmfePgTgRluXFvlD3GD5g5MOVVTJCO0qA==} + peerDependencies: + '@types/react': 19.1.8 + react: 19.2.4 + peerDependenciesMeta: + '@types/react': + optional: true + '@radix-ui/react-label@2.1.8': resolution: {integrity: sha512-FmXs37I6hSBVDlO4y764TNz1rLgKwjJMQ0EGte6F3Cb3f4bIuHB/iLa/8I9VKkmOy+gNHq8rql3j686ACVV21A==} peerDependencies: @@ -6280,12 +6455,51 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-menu@2.1.24': + resolution: {integrity: sha512-uW7RVuU6Lp/ZtfeY4b3kL32zccgEWvPv1+cf17ubYzHa9cL8AHokmk36cG/XEiH/smbQvumnieXX9j/e9RqJWA==} + peerDependencies: + '@types/react': 19.1.8 + '@types/react-dom': 19.1.6 + react: 19.2.4 + react-dom: 19.2.4 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-popper@1.3.7': + resolution: {integrity: sha512-UsJrrd7w4wuKKTdvd/DNERVlwSlUcyXzjhyDwBk+3aPOsCjOY6ZSbxuw8E6lZTjjfP8Cpd0J8VVkrYUWyGYXyg==} + peerDependencies: + '@types/react': 19.1.8 + '@types/react-dom': 19.1.6 + react: 19.2.4 + react-dom: 19.2.4 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-portal@1.0.0': resolution: {integrity: sha512-a8qyFO/Xb99d8wQdu4o7qnigNjTPG123uADNecz0eX4usnQEj7o+cG4ZX4zkqq98NYekT7UoEQIjxBNWIFuqTA==} peerDependencies: react: 19.2.4 react-dom: 19.2.4 + '@radix-ui/react-portal@1.1.17': + resolution: {integrity: sha512-vKQLcWypUnwZVvfV7UkGahH2g6ySe8M8R+zYBwPrv5byZ9QAW6cQVvNKo7GgmD+p8aYb6D9JBuvy8/WhOno2wQ==} + peerDependencies: + '@types/react': 19.1.8 + '@types/react-dom': 19.1.6 + react: 19.2.4 + react-dom: 19.2.4 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-portal@1.1.9': resolution: {integrity: sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==} peerDependencies: @@ -6305,6 +6519,19 @@ packages: react: 19.2.4 react-dom: 19.2.4 + '@radix-ui/react-presence@1.1.10': + resolution: {integrity: sha512-3wyzCQ6+ubRA+D4uv9m95JYLXxmOHp05qjrkjeA7uKHHtjpPggQzc6DAb0URl7j67oR0K2foO4ip27TiX037Bw==} + peerDependencies: + '@types/react': 19.1.8 + '@types/react-dom': 19.1.6 + react: 19.2.4 + react-dom: 19.2.4 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-presence@1.1.5': resolution: {integrity: sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==} peerDependencies: @@ -6330,6 +6557,19 @@ packages: react: 19.2.4 react-dom: 19.2.4 + '@radix-ui/react-primitive@2.1.10': + resolution: {integrity: sha512-MucOnzh6hR5mid6VpkbglRAMYMjKLqRnGBbjXkzjK52fuQDd1qbkx78a5P40mkcnVXJdEVxm26E9OPAiUq7nBg==} + peerDependencies: + '@types/react': 19.1.8 + '@types/react-dom': 19.1.6 + react: 19.2.4 + react-dom: 19.2.4 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-primitive@2.1.3': resolution: {integrity: sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==} peerDependencies: @@ -6356,6 +6596,19 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-roving-focus@1.1.19': + resolution: {integrity: sha512-V9jI6hDjT7l3jsCQD9bLNvDLM3tH/gdbOTp7Tefp3hbbgCGQoK7tUvrWiRlcoBHIZ809ElXwNQwVo0B98LuTXQ==} + peerDependencies: + '@types/react': 19.1.8 + '@types/react-dom': 19.1.6 + react: 19.2.4 + react-dom: 19.2.4 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-scroll-area@1.0.2': resolution: {integrity: sha512-k8VseTxI26kcKJaX0HPwkvlNBPTs56JRdYzcZ/vzrNUkDlvXBy8sMc7WvCpYzZkHgb+hd72VW9MqkqecGtuNgg==} peerDependencies: @@ -6403,6 +6656,28 @@ packages: '@types/react': optional: true + '@radix-ui/react-slot@1.3.3': + resolution: {integrity: sha512-qx7oqnYbxnK9kYI9m317qmFmEgo6ywqWvbTogdj7cL9p3/yx4M48p7Rnw5z3H890cL/ow/EeWJsuTykeZVXP5Q==} + peerDependencies: + '@types/react': 19.1.8 + react: 19.2.4 + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-tooltip@1.2.16': + resolution: {integrity: sha512-6EamKFRRnlpdadndbZ6LMwycfwkwPte1B42hs6QA0gYhjaOKqW4PZ4pjaW9UrlDX5eVt/OjncE7BFTPL5nmZhg==} + peerDependencies: + '@types/react': 19.1.8 + '@types/react-dom': 19.1.6 + react: 19.2.4 + react-dom: 19.2.4 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-use-callback-ref@1.0.0': resolution: {integrity: sha512-GZtyzoHz95Rhs6S63D2t/eqvdFCm7I+yHMLVQheKM7nBD8mbZIt+ct1jz4536MDnaOGKIxynJ8eHTkVGVVkoTg==} peerDependencies: @@ -6417,6 +6692,15 @@ packages: '@types/react': optional: true + '@radix-ui/react-use-callback-ref@1.1.4': + resolution: {integrity: sha512-R6OUY2e2fA6Yn6s+VSx5KBV6Nx8LQEhu+cz7LCej18rQ1HLyg9PSC9jP/ZNx0o6FAIK9c0F1kHylzSxKsdlkrQ==} + peerDependencies: + '@types/react': 19.1.8 + react: 19.2.4 + peerDependenciesMeta: + '@types/react': + optional: true + '@radix-ui/react-use-controllable-state@1.0.0': resolution: {integrity: sha512-FohDoZvk3mEXh9AWAVyRTYR4Sq7/gavuofglmiXB2g1aKyboUD4YtgWxKj8O5n+Uak52gXQ4wKz5IFST4vtJHg==} peerDependencies: @@ -6431,6 +6715,15 @@ packages: '@types/react': optional: true + '@radix-ui/react-use-controllable-state@1.2.6': + resolution: {integrity: sha512-uEQJGT97ZA/TgP/Hydw47lHu+/vQj6z/0jA+WeTbK1o9Rx45GImjpD0tc3W5ad3D6XTSR6e1yEO0FvGq6WQfVQ==} + peerDependencies: + '@types/react': 19.1.8 + react: 19.2.4 + peerDependenciesMeta: + '@types/react': + optional: true + '@radix-ui/react-use-effect-event@0.0.2': resolution: {integrity: sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==} peerDependencies: @@ -6440,6 +6733,15 @@ packages: '@types/react': optional: true + '@radix-ui/react-use-effect-event@0.0.5': + resolution: {integrity: sha512-7cshFL8HGS/7HEiHH+9kL9HBwp2sa9yX18Knwek6KYWmXwM7pegMgta2AXMQKI+rq3JnfSj9x8wYqFMTdG1Jgg==} + peerDependencies: + '@types/react': 19.1.8 + react: 19.2.4 + peerDependenciesMeta: + '@types/react': + optional: true + '@radix-ui/react-use-escape-keydown@1.0.0': resolution: {integrity: sha512-JwfBCUIfhXRxKExgIqGa4CQsiMemo1Xt0W/B4ei3fpzpvPENKpMKQ8mZSB6Acj3ebrAEgi2xiQvcI1PAAodvyg==} peerDependencies: @@ -6454,6 +6756,15 @@ packages: '@types/react': optional: true + '@radix-ui/react-use-is-hydrated@0.1.3': + resolution: {integrity: sha512-umO/aJ+82CpOnhDZUTbILCQf7kU/g0iv+oGs/Q8jw7IkhWBzaEP4sA268PhFAJTFetbwp3ICc6ktpI4TqtxcIw==} + peerDependencies: + '@types/react': 19.1.8 + react: 19.2.4 + peerDependenciesMeta: + '@types/react': + optional: true + '@radix-ui/react-use-layout-effect@1.0.0': resolution: {integrity: sha512-6Tpkq+R6LOlmQb1R5NNETLG0B4YP0wc+klfXafpUCj6JGyaUc8il7/kUZ7m59rGbXGczE9Bs+iz2qloqsZBduQ==} peerDependencies: @@ -6468,6 +6779,49 @@ packages: '@types/react': optional: true + '@radix-ui/react-use-layout-effect@1.1.4': + resolution: {integrity: sha512-K20DkRkUwDnxEYMBPcg3Y6voLkEy5p5QQmszZgLngKKiC7dzBR/aEuK3w1qlx2JWDUNH6FluahYdgR3BP+QbYw==} + peerDependencies: + '@types/react': 19.1.8 + react: 19.2.4 + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-rect@1.1.4': + resolution: {integrity: sha512-cSOCh6JlkmfjLyNcLiu2nB4v+nm+dkZ+Q5KHWk/soo4U7ZLiEQFKHK9/YmtBHjfCEaU43IBKQOc4/uJmCaiCTQ==} + peerDependencies: + '@types/react': 19.1.8 + react: 19.2.4 + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-size@1.1.4': + resolution: {integrity: sha512-D3anSY15EJoxrihpsXI6SMrmmonnQtR2ni7arO+Lfdg3O95b9hNXxONk8jA5C8ANdF/h5HMAxejgs8PWJ6rlhw==} + peerDependencies: + '@types/react': 19.1.8 + react: 19.2.4 + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-visually-hidden@1.2.11': + resolution: {integrity: sha512-NFS86RYYZb4/exihaESBGOpMJFz8MGLAfu3mOBSGByVnVPC9JPASfYubxd/8KbkQK0sYAv8lVQDEQukDX/qXvQ==} + peerDependencies: + '@types/react': 19.1.8 + '@types/react-dom': 19.1.6 + react: 19.2.4 + react-dom: 19.2.4 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/rect@1.1.3': + resolution: {integrity: sha512-JtyZR+mqgBibTo8xea3B6ZRmzZiM/YeVBtUkas6zMuXjAlfIFIW2FgqeM9eLyvEaYX66vr6DJMK+4U6LV0KhNw==} + '@react-aria/focus@3.21.5': resolution: {integrity: sha512-V18fwCyf8zqgJdpLQeDU5ZRNd9TeOfBbhLgmX77Zr5ae9XwaoJ1R3SFJG1wCJX60t34AW+aLZSEEK+saQElf3Q==} peerDependencies: @@ -6614,6 +6968,9 @@ packages: '@remirror/core-constants@3.0.0': resolution: {integrity: sha512-42aWfPrimMfDKDi4YegyS7x+/0tlzaqwPQCULLanv3DMIlu96KTJR0fM5isWX2UViOqlGnX6YFgqWepcX+XMNg==} + '@remix-run/node-fetch-server@0.13.3': + resolution: {integrity: sha512-UfjOXed/DQteaM5VyTfqTeGpHwyL2J5aoRGY6cydip4tt1ehNNeSwuXCC7AEGE0RWBs/7bgKxYkL/B/+UDe4AA==} + '@reown/appkit-common@1.7.2': resolution: {integrity: sha512-DZkl3P5+Iw3TmsitWmWxYbuSCox8iuzngNp/XhbNDJd7t4Cj4akaIUxSEeCajNDiGHlu4HZnfyM1swWsOJ0cOw==} @@ -6730,15 +7087,6 @@ packages: '@rolldown/pluginutils@1.0.1': resolution: {integrity: sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==} - '@rollup/plugin-alias@6.0.0': - resolution: {integrity: sha512-tPCzJOtS7uuVZd+xPhoy5W4vThe6KWXNmsFCNktaAh5RTqcLiSfT4huPQIXkgJ6YCOjJHvecOAzQxLFhPxKr+g==} - engines: {node: '>=20.19.0'} - peerDependencies: - rollup: '>=4.0.0' - peerDependenciesMeta: - rollup: - optional: true - '@rollup/plugin-commonjs@28.0.1': resolution: {integrity: sha512-+tNWdlWKbpB3WgBN7ijjYkq9X5uhjmcvyjEght4NmH5fAU++zfQzAJ6wumLS+dNcvwEZhKx2Z+skY8m7v0wGSA==} engines: {node: '>=16.0.0 || 14 >= 14.17'} @@ -6807,126 +7155,251 @@ packages: cpu: [arm] os: [android] + '@rollup/rollup-android-arm-eabi@4.63.3': + resolution: {integrity: sha512-w3Jnvi1ocaVm/c7yVPpfB98XeSRBMyzp6njL5MVVbGyXjpmUkN+s6Hp4t0PqhGCCaI1ZHMKXt/w0lA1RCaLVcw==} + cpu: [arm] + os: [android] + '@rollup/rollup-android-arm64@4.59.0': resolution: {integrity: sha512-hZ+Zxj3SySm4A/DylsDKZAeVg0mvi++0PYVceVyX7hemkw7OreKdCvW2oQ3T1FMZvCaQXqOTHb8qmBShoqk69Q==} cpu: [arm64] os: [android] + '@rollup/rollup-android-arm64@4.63.3': + resolution: {integrity: sha512-uI/ESiaIbbRYAEhzy8PCUWDp1hB0bjAqM06mW9flOoNO4Q8DQpeoREhBR5Hegfl+wpXiguyJv6XSPzEN7OxyHQ==} + cpu: [arm64] + os: [android] + '@rollup/rollup-darwin-arm64@4.59.0': resolution: {integrity: sha512-W2Psnbh1J8ZJw0xKAd8zdNgF9HRLkdWwwdWqubSVk0pUuQkoHnv7rx4GiF9rT4t5DIZGAsConRE3AxCdJ4m8rg==} cpu: [arm64] os: [darwin] + '@rollup/rollup-darwin-arm64@4.63.3': + resolution: {integrity: sha512-oxhrd1jmXLwWZ83eQYDXxuqRdkqkzrjR3JobKeuUyfdNZo11FuQIvqEOZhyIT7OBHxXoGslDDjN0cQcM6T0TqQ==} + cpu: [arm64] + os: [darwin] + '@rollup/rollup-darwin-x64@4.59.0': resolution: {integrity: sha512-ZW2KkwlS4lwTv7ZVsYDiARfFCnSGhzYPdiOU4IM2fDbL+QGlyAbjgSFuqNRbSthybLbIJ915UtZBtmuLrQAT/w==} cpu: [x64] os: [darwin] + '@rollup/rollup-darwin-x64@4.63.3': + resolution: {integrity: sha512-7/YiIMghVE8DrxKvNdorAaJVdriOFgOIpdStnPx8ppx5zfTwC3jBCSEAIzB7JD5404m65THl6H93UTTVUvypmg==} + cpu: [x64] + os: [darwin] + '@rollup/rollup-freebsd-arm64@4.59.0': resolution: {integrity: sha512-EsKaJ5ytAu9jI3lonzn3BgG8iRBjV4LxZexygcQbpiU0wU0ATxhNVEpXKfUa0pS05gTcSDMKpn3Sx+QB9RlTTA==} cpu: [arm64] os: [freebsd] + '@rollup/rollup-freebsd-arm64@4.63.3': + resolution: {integrity: sha512-GXFZRRoMAytaI5z6N3Zhfw0WL18Q0M8r95D5hlC4GqE/lGk8pbSJNUBoOWDfbm6dTciqHj2nU87tI5f6XhQiOg==} + cpu: [arm64] + os: [freebsd] + '@rollup/rollup-freebsd-x64@4.59.0': resolution: {integrity: sha512-d3DuZi2KzTMjImrxoHIAODUZYoUUMsuUiY4SRRcJy6NJoZ6iIqWnJu9IScV9jXysyGMVuW+KNzZvBLOcpdl3Vg==} cpu: [x64] os: [freebsd] + '@rollup/rollup-freebsd-x64@4.63.3': + resolution: {integrity: sha512-77W+8X3ddYgPxUpB8nZFQs2Mq+wc4HVlcSRtApXLjYBcnPMkttrSnU8VwKQjeWYhMsITHFs5cWBQ8vz1Q+5RHQ==} + cpu: [x64] + os: [freebsd] + '@rollup/rollup-linux-arm-gnueabihf@4.59.0': resolution: {integrity: sha512-t4ONHboXi/3E0rT6OZl1pKbl2Vgxf9vJfWgmUoCEVQVxhW6Cw/c8I6hbbu7DAvgp82RKiH7TpLwxnJeKv2pbsw==} cpu: [arm] os: [linux] + '@rollup/rollup-linux-arm-gnueabihf@4.63.3': + resolution: {integrity: sha512-FVkwK+iUC+mq+GipVK46rRVticfAPtvPUNlqlGXUDxdVk/UGjQiiiUVPUrEXdSpU2ufU0XxLGyTqDtBidDOVmg==} + cpu: [arm] + os: [linux] + '@rollup/rollup-linux-arm-musleabihf@4.59.0': resolution: {integrity: sha512-CikFT7aYPA2ufMD086cVORBYGHffBo4K8MQ4uPS/ZnY54GKj36i196u8U+aDVT2LX4eSMbyHtyOh7D7Zvk2VvA==} cpu: [arm] os: [linux] + '@rollup/rollup-linux-arm-musleabihf@4.63.3': + resolution: {integrity: sha512-+aGU1t3398yQOVj1Bz8o3e+KtswxAPvO+mtxtNdfXYMkXIHu7XhhkCD7/DEH9q8tF8uhDnMWvfpUKI8y1sZJsg==} + cpu: [arm] + os: [linux] + '@rollup/rollup-linux-arm64-gnu@4.59.0': resolution: {integrity: sha512-jYgUGk5aLd1nUb1CtQ8E+t5JhLc9x5WdBKew9ZgAXg7DBk0ZHErLHdXM24rfX+bKrFe+Xp5YuJo54I5HFjGDAA==} cpu: [arm64] os: [linux] + '@rollup/rollup-linux-arm64-gnu@4.63.3': + resolution: {integrity: sha512-cR0kjpRXR2KJ2oQK8E2KTPtphs+b9hZ8IhTZubNryt/RsqgdOZBQ2Zq0q5UedtiIi0rs3jVhJh55RE1ZHUVGUA==} + cpu: [arm64] + os: [linux] + '@rollup/rollup-linux-arm64-musl@4.59.0': resolution: {integrity: sha512-peZRVEdnFWZ5Bh2KeumKG9ty7aCXzzEsHShOZEFiCQlDEepP1dpUl/SrUNXNg13UmZl+gzVDPsiCwnV1uI0RUA==} cpu: [arm64] os: [linux] + '@rollup/rollup-linux-arm64-musl@4.63.3': + resolution: {integrity: sha512-y1RYi4Q3/9ByVWSSt9kX2ustE0B7kFYbJ6zZdVZVyqopZs3yhCTwRfrjIX4vezUJInma/Gs6BOFDJg7yZmJ0IQ==} + cpu: [arm64] + os: [linux] + '@rollup/rollup-linux-loong64-gnu@4.59.0': resolution: {integrity: sha512-gbUSW/97f7+r4gHy3Jlup8zDG190AuodsWnNiXErp9mT90iCy9NKKU0Xwx5k8VlRAIV2uU9CsMnEFg/xXaOfXg==} cpu: [loong64] os: [linux] + '@rollup/rollup-linux-loong64-gnu@4.63.3': + resolution: {integrity: sha512-DNhEA5viIj3Z5bZLE4z4oV8N5ozWqDwyt7T6KG7VdLDJ0nW+rNOYlphBl4/3HQkK75qipPLsVOfStHHOwN9WSg==} + cpu: [loong64] + os: [linux] + '@rollup/rollup-linux-loong64-musl@4.59.0': resolution: {integrity: sha512-yTRONe79E+o0FWFijasoTjtzG9EBedFXJMl888NBEDCDV9I2wGbFFfJQQe63OijbFCUZqxpHz1GzpbtSFikJ4Q==} cpu: [loong64] os: [linux] + '@rollup/rollup-linux-loong64-musl@4.63.3': + resolution: {integrity: sha512-17gQCqrIpXBX2Cmi9/TygnVOqGbzsba/iaqcYSL8FY7lNugg+7AiYNs5c5nKWD+NRQha36Sa0CqkJqH4XVHwnQ==} + cpu: [loong64] + os: [linux] + '@rollup/rollup-linux-ppc64-gnu@4.59.0': resolution: {integrity: sha512-sw1o3tfyk12k3OEpRddF68a1unZ5VCN7zoTNtSn2KndUE+ea3m3ROOKRCZxEpmT9nsGnogpFP9x6mnLTCaoLkA==} cpu: [ppc64] os: [linux] + '@rollup/rollup-linux-ppc64-gnu@4.63.3': + resolution: {integrity: sha512-6LwVnZRIyINpdku/yOcI8Tm9YqLmhHK5emmlOOnW9tO0SYEm1FmKPcsSAGp0NBlqR2P04xaND4jvN6sTHqhq8A==} + cpu: [ppc64] + os: [linux] + '@rollup/rollup-linux-ppc64-musl@4.59.0': resolution: {integrity: sha512-+2kLtQ4xT3AiIxkzFVFXfsmlZiG5FXYW7ZyIIvGA7Bdeuh9Z0aN4hVyXS/G1E9bTP/vqszNIN/pUKCk/BTHsKA==} cpu: [ppc64] os: [linux] + '@rollup/rollup-linux-ppc64-musl@4.63.3': + resolution: {integrity: sha512-xMUqkTXlEUtI/p5AAukMwBRr1enU3efsTeF+bskeFfk8t1C9rcC8sLREcZXmTfAXEbvRdJVSonVJez3TMlbR3w==} + cpu: [ppc64] + os: [linux] + '@rollup/rollup-linux-riscv64-gnu@4.59.0': resolution: {integrity: sha512-NDYMpsXYJJaj+I7UdwIuHHNxXZ/b/N2hR15NyH3m2qAtb/hHPA4g4SuuvrdxetTdndfj9b1WOmy73kcPRoERUg==} cpu: [riscv64] os: [linux] + '@rollup/rollup-linux-riscv64-gnu@4.63.3': + resolution: {integrity: sha512-S3E94co9F9WRRqEaUoQZ38K1gCz6KiM+nL7/3ijq7fDGF3OznjS5TasgYITlvl27GQKtu4lOAOsr5MFwkijvOA==} + cpu: [riscv64] + os: [linux] + '@rollup/rollup-linux-riscv64-musl@4.59.0': resolution: {integrity: sha512-nLckB8WOqHIf1bhymk+oHxvM9D3tyPndZH8i8+35p/1YiVoVswPid2yLzgX7ZJP0KQvnkhM4H6QZ5m0LzbyIAg==} cpu: [riscv64] os: [linux] + '@rollup/rollup-linux-riscv64-musl@4.63.3': + resolution: {integrity: sha512-1QtRDwG42x5BJI3s9mxu5rEjDnfbSnk20HQ9/ylTAYnSwYwxMVb+Vgu34wzzTQ7ogqBybebgQNUDAvZVQ38DbA==} + cpu: [riscv64] + os: [linux] + '@rollup/rollup-linux-s390x-gnu@4.59.0': resolution: {integrity: sha512-oF87Ie3uAIvORFBpwnCvUzdeYUqi2wY6jRFWJAy1qus/udHFYIkplYRW+wo+GRUP4sKzYdmE1Y3+rY5Gc4ZO+w==} cpu: [s390x] os: [linux] + '@rollup/rollup-linux-s390x-gnu@4.63.3': + resolution: {integrity: sha512-BQhejF6ZXOpxbngiNTP12GCGQeaDVL2QXGeBVViKIYzFHM5RKxTxwUMB1fr1BeNFphFMpnRqC5QSXFSa4z6UQw==} + cpu: [s390x] + os: [linux] + '@rollup/rollup-linux-x64-gnu@4.59.0': resolution: {integrity: sha512-3AHmtQq/ppNuUspKAlvA8HtLybkDflkMuLK4DPo77DfthRb71V84/c4MlWJXixZz4uruIH4uaa07IqoAkG64fg==} cpu: [x64] os: [linux] + '@rollup/rollup-linux-x64-gnu@4.63.3': + resolution: {integrity: sha512-SXagRwnI2Wlwlitllu59UK/nGVbD1CKPcNqDplHwIC4BqJcpXFjD32d1R/RbuISa95HdQrZM3/7v4bKiowFaLA==} + cpu: [x64] + os: [linux] + '@rollup/rollup-linux-x64-musl@4.59.0': resolution: {integrity: sha512-2UdiwS/9cTAx7qIUZB/fWtToJwvt0Vbo0zmnYt7ED35KPg13Q0ym1g442THLC7VyI6JfYTP4PiSOWyoMdV2/xg==} cpu: [x64] os: [linux] + '@rollup/rollup-linux-x64-musl@4.63.3': + resolution: {integrity: sha512-2IPozoEALRCziGqE8O9KMK60PMu5TS1huv4fwoeCexj+WjmcwFtX9CTOVbfXCUqcELAubEwRFPYlzb/WvwY2HQ==} + cpu: [x64] + os: [linux] + '@rollup/rollup-openbsd-x64@4.59.0': resolution: {integrity: sha512-M3bLRAVk6GOwFlPTIxVBSYKUaqfLrn8l0psKinkCFxl4lQvOSz8ZrKDz2gxcBwHFpci0B6rttydI4IpS4IS/jQ==} cpu: [x64] os: [openbsd] + '@rollup/rollup-openbsd-x64@4.63.3': + resolution: {integrity: sha512-AoxqosUHT9IX54hFn2TiN6A7d6ZKTtE6pd2bqWtqkkNJ6HJGaU6FRouGX8L1O7R/ZwsnCnpQrHzb4pDEx+UHRQ==} + cpu: [x64] + os: [openbsd] + '@rollup/rollup-openharmony-arm64@4.59.0': resolution: {integrity: sha512-tt9KBJqaqp5i5HUZzoafHZX8b5Q2Fe7UjYERADll83O4fGqJ49O1FsL6LpdzVFQcpwvnyd0i+K/VSwu/o/nWlA==} cpu: [arm64] os: [openharmony] + '@rollup/rollup-openharmony-arm64@4.63.3': + resolution: {integrity: sha512-d+CaftKgmkFBzCwezMqqy1d0QNNYugqLCMcYVQWBy5SS2YfeMP8Q8ripkgx9O8IyBXXLHrJ+aaCV4U96usv6Yg==} + cpu: [arm64] + os: [openharmony] + '@rollup/rollup-win32-arm64-msvc@4.59.0': resolution: {integrity: sha512-V5B6mG7OrGTwnxaNUzZTDTjDS7F75PO1ae6MJYdiMu60sq0CqN5CVeVsbhPxalupvTX8gXVSU9gq+Rx1/hvu6A==} cpu: [arm64] os: [win32] + '@rollup/rollup-win32-arm64-msvc@4.63.3': + resolution: {integrity: sha512-xXlDF6nR1eOuXbdDy5Hl5fmtY7teUDevF/k0O7IPoZe4Tpmdv+lgdE5JRsnhQtt37ql9P0VF2kAN9a0OCZdo+Q==} + cpu: [arm64] + os: [win32] + '@rollup/rollup-win32-ia32-msvc@4.59.0': resolution: {integrity: sha512-UKFMHPuM9R0iBegwzKF4y0C4J9u8C6MEJgFuXTBerMk7EJ92GFVFYBfOZaSGLu6COf7FxpQNqhNS4c4icUPqxA==} cpu: [ia32] os: [win32] + '@rollup/rollup-win32-ia32-msvc@4.63.3': + resolution: {integrity: sha512-YtXAgLN+JP7Ay6qG3eWhc7IHMQPzLc8r3uvhAvlJIoCz/4Q32+Bl9Fmnywidh8v1GOIMmymjovfqY9ETAtysvA==} + cpu: [ia32] + os: [win32] + '@rollup/rollup-win32-x64-gnu@4.59.0': resolution: {integrity: sha512-laBkYlSS1n2L8fSo1thDNGrCTQMmxjYY5G0WFWjFFYZkKPjsMBsgJfGf4TLxXrF6RyhI60L8TMOjBMvXiTcxeA==} cpu: [x64] os: [win32] + '@rollup/rollup-win32-x64-gnu@4.63.3': + resolution: {integrity: sha512-WuWtSJRNo549vzcfZyEgfqb6zeSgn1F+UE5kQ+BCjzz0W4MGCjntUHkZVc1VRuAM7+ULaSyhiPxD1spyewFvkQ==} + cpu: [x64] + os: [win32] + '@rollup/rollup-win32-x64-msvc@4.59.0': resolution: {integrity: sha512-2HRCml6OztYXyJXAvdDXPKcawukWY2GpR5/nxKp4iBgiO3wcoEGkAaqctIbZcNB6KlUQBIqt8VYkNSj2397EfA==} cpu: [x64] os: [win32] + '@rollup/rollup-win32-x64-msvc@4.63.3': + resolution: {integrity: sha512-+lIKX7O0+IGe7WuhATaAMMeT7B76vfhXH/l9wLQL+nvyhbw2ohYCKIdWL56JfDu75CWt5oKRP4QFH/jkMtBquA==} + cpu: [x64] + os: [win32] + '@rtsao/scc@1.1.0': resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} @@ -7145,6 +7618,27 @@ packages: peerDependencies: webpack: '>=5.0.0' + '@shikijs/core@3.23.0': + resolution: {integrity: sha512-NSWQz0riNb67xthdm5br6lAkvpDJRTgB36fxlo37ZzM2yq0PQFFzbd8psqC2XMPgCzo1fW6cVi18+ArJ44wqgA==} + + '@shikijs/engine-javascript@3.23.0': + resolution: {integrity: sha512-aHt9eiGFobmWR5uqJUViySI1bHMqrAgamWE1TYSUoftkAeCCAiGawPMwM+VCadylQtF4V3VNOZ5LmfItH5f3yA==} + + '@shikijs/engine-oniguruma@3.23.0': + resolution: {integrity: sha512-1nWINwKXxKKLqPibT5f4pAFLej9oZzQTsby8942OTlsJzOBZ0MWKiwzMsd+jhzu8YPCHAswGnnN1YtQfirL35g==} + + '@shikijs/langs@3.23.0': + resolution: {integrity: sha512-2Ep4W3Re5aB1/62RSYQInK9mM3HsLeB91cHqznAJMuylqjzNVAVCMnNWRHFtcNHXsoNRayP9z1qj4Sq3nMqYXg==} + + '@shikijs/themes@3.23.0': + resolution: {integrity: sha512-5qySYa1ZgAT18HR/ypENL9cUSGOeI2x+4IvYJu4JgVJdizn6kG4ia5Q1jDEOi7gTbN4RbuYtmHh0W3eccOrjMA==} + + '@shikijs/types@3.23.0': + resolution: {integrity: sha512-3JZ5HXOZfYjsYSk0yPwBrkupyYSLpAE26Qc0HLghhZNGTZg/SKxXIIgoxOpmmeQP0RRSDJTk1/vPfw9tbw+jSQ==} + + '@shikijs/vscode-textmate@10.0.2': + resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} + '@sinclair/typebox@0.27.10': resolution: {integrity: sha512-MTBk/3jGLNB2tVxv6uLlFh1iu64iYOQ2PbdOSK3NW8JZsmlaOh2q6sdtKowBhfw8QFLmYNzTW4/oK4uATIi6ZA==} @@ -7170,6 +7664,32 @@ packages: '@sinonjs/fake-timers@10.3.0': resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} + '@slack/bolt@4.7.3': + resolution: {integrity: sha512-bODs8q/yNDWUPoxmQhFrRqLMA5vhB/PDizYWqb6CkQhLWEUo5JFtfJcmeU4ElGl6qSt++OKjSYNa4MPc77CleQ==} + engines: {node: '>=18', npm: '>=8.6.0'} + peerDependencies: + '@types/express': ^5.0.0 + + '@slack/logger@4.0.1': + resolution: {integrity: sha512-6cmdPrV/RYfd2U0mDGiMK8S7OJqpCTm7enMLRR3edccsPX8j7zXTLnaEF4fhxxJJTAIOil6+qZrnUPTuaLvwrQ==} + engines: {node: '>= 18', npm: '>= 8.6.0'} + + '@slack/oauth@3.0.5': + resolution: {integrity: sha512-exqFQySKhNDptWYSWhvRUJ4/+ndu2gayIy7vg/JfmJq3wGtGdHk531P96fAZyBm5c1Le3yaPYqv92rL4COlU3A==} + engines: {node: '>=18', npm: '>=8.6.0'} + + '@slack/socket-mode@2.0.7': + resolution: {integrity: sha512-qYy07je71WnEHgRwmw12DlAnZLi5HXmdlI2WUzUK2LH/rYXQpP6uEg462S5CwfE8FoCKUdIigHtYnOOfzZH1lQ==} + engines: {node: '>= 18', npm: '>= 8.6.0'} + + '@slack/types@2.22.0': + resolution: {integrity: sha512-sZ9lIgJhPX2qft/tKWiklFlc0o1FWeI7QtciZJfW1+ErH1eGGHvOZ8e73sleTCFEFJp1q/R0WeS8Oa7AsiDprg==} + engines: {node: '>= 12.13.0', npm: '>= 6.12.0'} + + '@slack/web-api@7.19.0': + resolution: {integrity: sha512-ItjyjEZml+LDH8CjcCLRLJHh7VZtevPKExrRN3l5KWyBliyDnGAeoO4Y+K+fFBmRpKLYVPgqWMX4THldv2HVtA==} + engines: {node: '>= 18', npm: '>= 8.6.0'} + '@smithy/abort-controller@4.2.11': resolution: {integrity: sha512-Hj4WoYWMJnSpM6/kchsm4bUNTL9XiSyhvoMb2KIq4VJzyDt7JpGHUZHkVNPZVC7YE1tf8tPeVauxpFBKGW4/KQ==} engines: {node: '>=18.0.0'} @@ -7310,6 +7830,10 @@ packages: resolution: {integrity: sha512-COuLsZILbbQsdrwKQpkkpyep7lCsByxwj7m0Mg5v66/ZTyenlfBc40/QFQ5chO0YN/PNEH1Bi3fGtfXPnYNeDw==} engines: {node: '>=18.0.0'} + '@smithy/types@4.18.0': + resolution: {integrity: sha512-CgB6HHWer/vrKps24ulRIbpcpb7K4xAU7SkZ7YHzBPlwHsvsrCJFEXK421s+cJzX+ZrqtA/TuU5w1HzI7k9N8A==} + engines: {node: '>=18.0.0'} + '@smithy/url-parser@4.2.11': resolution: {integrity: sha512-oTAGGHo8ZYc5VZsBREzuf5lf2pAurJQsccMusVZ85wDkX66ojEc/XauiGjzCj50A61ObFTPe6d7Pyt6UBYaing==} engines: {node: '>=18.0.0'} @@ -7745,67 +8269,6 @@ packages: peerDependencies: '@solana/web3.js': '*' - '@standard-community/standard-json@0.3.5': - resolution: {integrity: sha512-4+ZPorwDRt47i+O7RjyuaxHRK/37QY/LmgxlGrRrSTLYoFatEOzvqIc85GTlM18SFZ5E91C+v0o/M37wZPpUHA==} - peerDependencies: - '@standard-schema/spec': ^1.0.0 - '@types/json-schema': ^7.0.15 - '@valibot/to-json-schema': ^1.3.0 - arktype: ^2.1.20 - effect: ^3.16.8 - quansync: ^0.2.11 - sury: ^10.0.0 - typebox: ^1.0.17 - valibot: ^1.1.0 - zod: ^3.25.0 || ^4.0.0 - zod-to-json-schema: ^3.24.5 - peerDependenciesMeta: - '@valibot/to-json-schema': - optional: true - arktype: - optional: true - effect: - optional: true - sury: - optional: true - typebox: - optional: true - valibot: - optional: true - zod: - optional: true - zod-to-json-schema: - optional: true - - '@standard-community/standard-openapi@0.2.9': - resolution: {integrity: sha512-htj+yldvN1XncyZi4rehbf9kLbu8os2Ke/rfqoZHCMHuw34kiF3LP/yQPdA0tQ940y8nDq3Iou8R3wG+AGGyvg==} - peerDependencies: - '@standard-community/standard-json': ^0.3.5 - '@standard-schema/spec': ^1.0.0 - arktype: ^2.1.20 - effect: ^3.17.14 - openapi-types: ^12.1.3 - sury: ^10.0.0 - typebox: ^1.0.0 - valibot: ^1.1.0 - zod: ^3.25.0 || ^4.0.0 - zod-openapi: ^4 - peerDependenciesMeta: - arktype: - optional: true - effect: - optional: true - sury: - optional: true - typebox: - optional: true - valibot: - optional: true - zod: - optional: true - zod-openapi: - optional: true - '@standard-schema/spec@1.1.0': resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} @@ -8113,12 +8576,24 @@ packages: peerDependencies: vite: ^5.2.0 || ^6 || ^7 + '@tanstack/devtools-event-client@0.4.4': + resolution: {integrity: sha512-6T5Yop/793YI+H+5J8Hsyj4kCih9sl4t3ElLgKioW5hk3ocn+ZdSJ94tT7vL7uabxSugWYBZlOTMPzEw2puvQw==} + engines: {node: '>=18'} + hasBin: true + + '@tanstack/pacer@0.20.1': + resolution: {integrity: sha512-ZNQ1bIL6eUXVKdic0tiImvBVkWrg/IoSK6VIacTrO3d3HAGnd70qFJNJagR/YOJIOw4EKGWnodwpYZkN1pWuVQ==} + engines: {node: '>=18'} + '@tanstack/react-virtual@3.13.21': resolution: {integrity: sha512-SYXFrmrbPgXBvf+HsOsKhFgqSe4M6B29VHOsX9Jih9TlNkNkDWx0hWMiMLUghMEzyUz772ndzdEeCEBx+3GIZw==} peerDependencies: react: 19.2.4 react-dom: 19.2.4 + '@tanstack/store@0.9.3': + resolution: {integrity: sha512-8reSzl/qGWGGVKhBoxXPMWzATSbZLZFWhwBAFO9NAyp0TxzfBP0mIrGb8CP8KrQTmvzXlR/vFPPUrHTLBGyFyw==} + '@tanstack/virtual-core@3.13.21': resolution: {integrity: sha512-ww+fmLHyCbPSf7JNbWZP3g7wl6SdNo3ah5Aiw+0e9FDErkVHLKprYUrwTm7dF646FtEkN/KkAKPYezxpmvOjxw==} @@ -8487,6 +8962,99 @@ packages: '@types/cors@2.8.19': resolution: {integrity: sha512-mFNylyeyqN93lfe/9CSxOGREz8cpzAhH+E93xJ4xWQf62V8sQ/24reV2nyzUWM6H6Xji+GGHpkbLe7pVoUEskg==} + '@types/d3-array@3.2.2': + resolution: {integrity: sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw==} + + '@types/d3-axis@3.0.6': + resolution: {integrity: sha512-pYeijfZuBd87T0hGn0FO1vQ/cgLk6E1ALJjfkC0oJ8cbwkZl3TpgS8bVBLZN+2jjGgg38epgxb2zmoGtSfvgMw==} + + '@types/d3-brush@3.0.6': + resolution: {integrity: sha512-nH60IZNNxEcrh6L1ZSMNA28rj27ut/2ZmI3r96Zd+1jrZD++zD3LsMIjWlvg4AYrHn/Pqz4CF3veCxGjtbqt7A==} + + '@types/d3-chord@3.0.6': + resolution: {integrity: sha512-LFYWWd8nwfwEmTZG9PfQxd17HbNPksHBiJHaKuY1XeqscXacsS2tyoo6OdRsjf+NQYeB6XrNL3a25E3gH69lcg==} + + '@types/d3-color@3.1.3': + resolution: {integrity: sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==} + + '@types/d3-contour@3.0.6': + resolution: {integrity: sha512-BjzLgXGnCWjUSYGfH1cpdo41/hgdWETu4YxpezoztawmqsvCeep+8QGfiY6YbDvfgHz/DkjeIkkZVJavB4a3rg==} + + '@types/d3-delaunay@6.0.4': + resolution: {integrity: sha512-ZMaSKu4THYCU6sV64Lhg6qjf1orxBthaC161plr5KuPHo3CNm8DTHiLw/5Eq2b6TsNP0W0iJrUOFscY6Q450Hw==} + + '@types/d3-dispatch@3.0.7': + resolution: {integrity: sha512-5o9OIAdKkhN1QItV2oqaE5KMIiXAvDWBDPrD85e58Qlz1c1kI/J0NcqbEG88CoTwJrYe7ntUCVfeUl2UJKbWgA==} + + '@types/d3-drag@3.0.7': + resolution: {integrity: sha512-HE3jVKlzU9AaMazNufooRJ5ZpWmLIoc90A37WU2JMmeq28w1FQqCZswHZ3xR+SuxYftzHq6WU6KJHvqxKzTxxQ==} + + '@types/d3-dsv@3.0.7': + resolution: {integrity: sha512-n6QBF9/+XASqcKK6waudgL0pf/S5XHPPI8APyMLLUHd8NqouBGLsU8MgtO7NINGtPBtk9Kko/W4ea0oAspwh9g==} + + '@types/d3-ease@3.0.2': + resolution: {integrity: sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==} + + '@types/d3-fetch@3.0.7': + resolution: {integrity: sha512-fTAfNmxSb9SOWNB9IoG5c8Hg6R+AzUHDRlsXsDZsNp6sxAEOP0tkP3gKkNSO/qmHPoBFTxNrjDprVHDQDvo5aA==} + + '@types/d3-force@3.0.10': + resolution: {integrity: sha512-ZYeSaCF3p73RdOKcjj+swRlZfnYpK1EbaDiYICEEp5Q6sUiqFaFQ9qgoshp5CzIyyb/yD09kD9o2zEltCexlgw==} + + '@types/d3-format@3.0.4': + resolution: {integrity: sha512-fALi2aI6shfg7vM5KiR1wNJnZ7r6UuggVqtDA+xiEdPZQwy/trcQaHnwShLuLdta2rTymCNpxYTiMZX/e09F4g==} + + '@types/d3-geo@3.1.1': + resolution: {integrity: sha512-65Emv9fQiQQqphLlRkuQ5ypPsOmWPhtBGCMv61JDPEPMvsx+gzhGf74yw1a78xFKPj6zw4AgQICJoQv0vK9M2w==} + + '@types/d3-hierarchy@3.1.7': + resolution: {integrity: sha512-tJFtNoYBtRtkNysX1Xq4sxtjK8YgoWUNpIiUee0/jHGRwqvzYxkq0hGVbbOGSz+JgFxxRu4K8nb3YpG3CMARtg==} + + '@types/d3-interpolate@3.0.4': + resolution: {integrity: sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==} + + '@types/d3-path@3.1.1': + resolution: {integrity: sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==} + + '@types/d3-polygon@3.0.2': + resolution: {integrity: sha512-ZuWOtMaHCkN9xoeEMr1ubW2nGWsp4nIql+OPQRstu4ypeZ+zk3YKqQT0CXVe/PYqrKpZAi+J9mTs05TKwjXSRA==} + + '@types/d3-quadtree@3.0.6': + resolution: {integrity: sha512-oUzyO1/Zm6rsxKRHA1vH0NEDG58HrT5icx/azi9MF1TWdtttWl0UIUsjEQBBh+SIkrpd21ZjEv7ptxWys1ncsg==} + + '@types/d3-random@3.0.4': + resolution: {integrity: sha512-UHYId5WTCx4L4YNel7NU00XUXXgvgpgZOvp10PuvsQENjMDXhh2RyFc0KBjO7B45ne4Ha1yVH7ii0vnzKkuzWA==} + + '@types/d3-scale-chromatic@3.1.0': + resolution: {integrity: sha512-iWMJgwkK7yTRmWqRB5plb1kadXyQ5Sj8V/zYlFGMUBbIPKQScw+Dku9cAAMgJG+z5GYDoMjWGLVOvjghDEFnKQ==} + + '@types/d3-scale@4.0.9': + resolution: {integrity: sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==} + + '@types/d3-selection@3.0.12': + resolution: {integrity: sha512-Qe/KWYhEiIIxGs7HrAAjMfShxKldx19SJtr5zu53f3afPsdZNz7HHtdTLXo/kqeiWNXVycI24kSnfzBYkTzpgw==} + + '@types/d3-shape@3.2.0': + resolution: {integrity: sha512-kVd74ta9eof3eJOvbNd1vGKS/XERRyQbT26Og63hIsvDO84cjD5gEOhsXf26w3FSoNlPVz84DOFcKv/oou+fMw==} + + '@types/d3-time-format@4.0.3': + resolution: {integrity: sha512-5xg9rC+wWL8kdDj153qZcsJ0FWiFt0J5RB6LYUNZjwSnesfblqrI/bJ1wBdJ8OQfncgbJG5+2F+qfqnqyzYxyg==} + + '@types/d3-time@3.0.4': + resolution: {integrity: sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==} + + '@types/d3-timer@3.0.2': + resolution: {integrity: sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==} + + '@types/d3-transition@3.0.9': + resolution: {integrity: sha512-uZS5shfxzO3rGlu0cC3bjmMFKsXv+SmZZcgp0KD22ts4uGXp5EVYGzu/0YdwZeKmddhcAccYtREJKkPfXkZuCg==} + + '@types/d3-zoom@3.0.8': + resolution: {integrity: sha512-iqMC4/YlFCSlO8+2Ii1GGGliCAY4XdeG748w5vQUbevlbDu0zSjH/+jojorQVBK/se0j6DUFNPBGSqD3YWYnDw==} + + '@types/d3@7.4.3': + resolution: {integrity: sha512-lZXZ9ckh5R8uiFVt8ogUNf+pIrK4EsWrx2Np75WvF/eTpJ0FMHNhjXk8CKEx/+gpHbNQyJWehbFaTvqmHWB3ww==} + '@types/debug@4.1.12': resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} @@ -8511,6 +9079,9 @@ packages: '@types/estree@1.0.8': resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + '@types/estree@1.0.9': + resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==} + '@types/express-serve-static-core@4.19.8': resolution: {integrity: sha512-02S5fmqeoKzVZCHPZid4b8JH2eM5HzQLZWN2FohQEy/0eXTq8VXZfSN6Pcr3F6N9R/vNrj7cpgbhjie6m/1tCA==} @@ -8532,6 +9103,12 @@ packages: '@types/filewriter@0.0.33': resolution: {integrity: sha512-xFU8ZXTw4gd358lb2jw25nxY9QAgqn2+bKKjKOYfNCzN4DKCFetK7sPtrlpg66Ywe3vWY9FNxprZawAh9wfJ3g==} + '@types/gensync@1.0.5': + resolution: {integrity: sha512-MbsRCT7mTikHwKZ0X+LVUTLRrZZRLipTuXEO9qOYO+zmjMVk81axyClMROf6uoPD9MRVu46bx8zoR0Ad9q3NAg==} + + '@types/geojson@7946.0.16': + resolution: {integrity: sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==} + '@types/graceful-fs@4.1.9': resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} @@ -8568,6 +9145,9 @@ packages: '@types/jsdom@20.0.1': resolution: {integrity: sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==} + '@types/jsesc@2.5.1': + resolution: {integrity: sha512-9VN+6yxLOPLOav+7PwjZbxiID2bVaeq0ED4qSQmdQTdjnXJSaCVKTR58t15oqH1H5t8Ng2ZX1SabJVoN9Q34bw==} + '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} @@ -8682,6 +9262,9 @@ packages: '@types/prop-types@15.7.15': resolution: {integrity: sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==} + '@types/qrcode@1.5.5': + resolution: {integrity: sha512-CdfBi/e3Qk+3Z/fXYShipBT13OJ2fDO2Q2w5CIP5anLTLIndQG9z6P1cnm+8zCWSpm5dnxMFd/uREtb0EXuQzg==} + '@types/qs@6.15.0': resolution: {integrity: sha512-JawvT8iBVWpzTrz3EGw9BTQFg3BQNmwERdKE22vlTxawwtbyUSlMppvZYKLZzB5zgACXdXxbD3m1bXaMqP/9ow==} @@ -9248,6 +9831,9 @@ packages: peerDependencies: '@uppy/core': ^4.5.2 + '@upsetjs/venn.js@2.0.0': + resolution: {integrity: sha512-WbBhLrooyePuQ1VZxrJjtLvTc4NVfpOyKx0sKqioq9bX1C1m7Jgykkn8gLrtwumBioXIqam8DLxp88Adbue6Hw==} + '@upstash/redis@1.36.3': resolution: {integrity: sha512-wxo1ei4OHDHm4UGMgrNVz9QUEela9N/Iwi4p1JlHNSowQiPi+eljlGnfbZVkV0V4PIrjGtGFJt5GjWM5k28enA==} @@ -9508,6 +10094,12 @@ packages: resolution: {integrity: sha512-kMwLlxUbduttIgaPdSkmEarFpP+mSY8FEm+QWMBRJwxOHWkri+cxd8KZHO9EMrB9vgUuz+5WEaCawaL5wGVoXg==} engines: {node: '>=18.0.0'} + '@workflow/serde@4.1.0': + resolution: {integrity: sha512-pav4F2BoirECWR7Nf1TKt+2eETcBj7jj4cBefQ8VXQCA6NPkaKeLfj/zMgi+3zYV5ZIBT4GuUiphsj0/b9hPQQ==} + + '@workflow/serde@4.1.0-beta.2': + resolution: {integrity: sha512-8kkeoQKLDaKXefjV5dbhBj2aErfKp1Mc4pb6tj8144cF+Em5SPbyMbyLCHp+BVrFfFVCBluCtMx+jjvaFVZGww==} + '@wyw-in-js/processor-utils@0.5.5': resolution: {integrity: sha512-L3IcAfoowhM0fw9Cnv2CNzfjWNLKpYl2CFqam6NvwpiXNR1kXz/GpO0AOiKvCs5h4Ps5kWxE2e8knXLpk8q/2g==} engines: {node: '>=16.0.0'} @@ -9526,9 +10118,6 @@ packages: '@xtuc/long@4.2.2': resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} - '@zeit/schemas@2.36.0': - resolution: {integrity: sha512-7kjMwcChYEzMKjeex9ZFXkt1AyNov9R5HZtjBKVsmVpw7pa7ZtlCGvCBC2vnnXctaYN+aRI61HjIqeetZW5ROg==} - abab@2.0.6: resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==} deprecated: Use your platform's native atob() and btoa() methods instead @@ -9562,12 +10151,6 @@ packages: zod: optional: true - abort-controller-x@0.4.3: - resolution: {integrity: sha512-VtUwTNU8fpMwvWGn4xE93ywbogTYsuT+AUxAXOeelbXuQVIwNmC5YLeho9sH4vZ4ITW8414TTAOG1nW6uIVHCA==} - - abort-controller-x@0.5.0: - resolution: {integrity: sha512-yTt9CI0x+nRfX6BFMenEGP8ooPvErGH6AbFz20C2IeOLIlDsrw/VHpgne3GsCEuTA410IiFiaLVFKmgM4bKEPQ==} - abort-controller@3.0.0: resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} engines: {node: '>=6.5'} @@ -9643,6 +10226,12 @@ packages: peerDependencies: zod: ^3.25.76 || ^4.1.8 + ai@6.0.285: + resolution: {integrity: sha512-WfcHLHP8TvheInKofMlfpNzssKJ8HrqUNcQcjzAU28f9SFCYwEHhSjRu6m5saSvGcrObRG2ozXEv0IJWlEWVxA==} + engines: {node: '>=18'} + peerDependencies: + zod: ^3.25.76 || ^4.1.8 + ajv-formats@2.1.1: resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} peerDependencies: @@ -9675,12 +10264,12 @@ packages: ajv@8.18.0: resolution: {integrity: sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==} + ajv@8.20.0: + resolution: {integrity: sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==} + anser@1.4.10: resolution: {integrity: sha512-hCv9AqTQ8ycjpSd3upOJd7vFwW1JaoYQ7tpham03GJ1ca8/65rqn0RpaWpItOAd6ylW9wAw6luXYPJIyPFVOww==} - ansi-align@3.0.1: - resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} - ansi-colors@4.1.3: resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} engines: {node: '>=6'} @@ -9737,6 +10326,10 @@ packages: arch@2.2.0: resolution: {integrity: sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==} + archiver@8.0.0: + resolution: {integrity: sha512-fV1orZfsnPn9BaSByR/qE67rJCLJEy2Ox5bq7nJh+jquWaNh6Sfec75kJ2T6PtdGUbPQlrVoSVCEOa5SdiTQ1g==} + engines: {node: '>=18'} + are-we-there-yet@2.0.0: resolution: {integrity: sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==} engines: {node: '>=10'} @@ -9856,6 +10449,9 @@ packages: async-mutex@0.5.0: resolution: {integrity: sha512-1A94B18jkJ3DYq284ohPxoXbfTA5HsQ7/Mf4DEhcyLx3Bz27Rh59iScbB6EPiP+B+joue6YCxcMXSbFC1tZKwA==} + async@3.2.6: + resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} + asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} @@ -9902,6 +10498,14 @@ packages: resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} engines: {node: '>= 0.4'} + b4a@1.9.0: + resolution: {integrity: sha512-dpfcF9fDNR6++cthXR67iyhgqWy9CBouAvIWhIntzBG6cvK/cnIPiZQjBwi/ZqjjBEDGfoNDtmB0kTjroOJ3pQ==} + peerDependencies: + react-native-b4a: '*' + peerDependenciesMeta: + react-native-b4a: + optional: true + babel-jest@29.7.0: resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -9965,6 +10569,43 @@ packages: resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} engines: {node: 18 || 20 || >=22} + bare-events@2.9.2: + resolution: {integrity: sha512-AIPKioV7/Y/8KfZ3AAhjPJxLLbY49S64Ym5DakZlUg75qQiTgUq9hEJoEwa4eUezPUlXRy/i5NpsKvo9jgKmoA==} + peerDependencies: + bare-abort-controller: '*' + peerDependenciesMeta: + bare-abort-controller: + optional: true + + bare-fs@4.8.1: + resolution: {integrity: sha512-N1nnXdHZAOSstz0XiHikGS4HGMH4CnSwhqWdGQQMqqdvp4Jybm9sE3R1WVnpWVd4SFkc8ryPDBLViNLwiEqECg==} + engines: {bare: '>=1.28.0'} + peerDependencies: + bare-buffer: '*' + peerDependenciesMeta: + bare-buffer: + optional: true + + bare-path@3.1.2: + resolution: {integrity: sha512-ZyKbsuuqK6Ag0K8pX6V5Txq6XeJRvY+wXucnFGRjiyVYP9YWDpIQugk/b+enRYrEYBJaqLzghRQpXPMR7341Nw==} + + bare-stream@2.13.4: + resolution: {integrity: sha512-PcrQ8lVLbiJscNm1Kez+Yp4Gy4AHGcN1lzwjvf5NybWen7VvEgUfyfnXYJ2zNqWnzOfCb1Abq6lH8ti0syQszA==} + peerDependencies: + bare-abort-controller: '*' + bare-buffer: '*' + bare-events: '*' + peerDependenciesMeta: + bare-abort-controller: + optional: true + bare-buffer: + optional: true + bare-events: + optional: true + + bare-url@2.5.4: + resolution: {integrity: sha512-Gxa7UVWBr0/edU1b+TJhn/AZvMQUj9OGspvYsaTYQrAbZA4BOTZGL3LiZxvD+CeMlDH4juwD84+eTAp/bLYW5g==} + base-x@3.0.11: resolution: {integrity: sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==} @@ -10075,10 +10716,6 @@ packages: bowser@2.14.1: resolution: {integrity: sha512-tzPjzCxygAKWFOJP011oxFHs57HzIhOEracIgAePE4pqB3LikALKnSzUyU4MGs9/iCEUuHlAJTjTc5M+u7YEGg==} - boxen@7.0.0: - resolution: {integrity: sha512-j//dBVuyacJbvW+tvZ9HuH03fZ46QcaKvvhZickZqtB271DxJ7SNRSNxrV/dZX0085m7hISRZWbzWlJvx/rHSg==} - engines: {node: '>=14.16'} - brace-expansion@1.1.12: resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} @@ -10140,6 +10777,10 @@ packages: bser@2.1.1: resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} + buffer-crc32@1.0.0: + resolution: {integrity: sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w==} + engines: {node: '>=8.0.0'} + buffer-equal-constant-time@1.0.1: resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==} @@ -10149,6 +10790,9 @@ packages: buffer-xor@1.0.3: resolution: {integrity: sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==} + buffer@5.6.0: + resolution: {integrity: sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==} + buffer@5.7.1: resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} @@ -10223,10 +10867,6 @@ packages: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} - camelcase@7.0.1: - resolution: {integrity: sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==} - engines: {node: '>=14.16'} - caniuse-lite@1.0.30001777: resolution: {integrity: sha512-tmN+fJxroPndC74efCdp12j+0rk0RHwV5Jwa1zWaFVyw2ZxAuPeG8ZgWC3Wz7uSjT3qMRQ5XHZ4COgQmsCMJAQ==} @@ -10250,18 +10890,10 @@ packages: resolution: {integrity: sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==} engines: {node: '>=18'} - chalk-template@0.4.0: - resolution: {integrity: sha512-/ghrgmhfY8RaSdeo43hNXxpoHAtxdbskUHjPpfqUWGttFgycUhYPGx3YZBCnUCvOa7Doivn1IZec3DEGFoMgLg==} - engines: {node: '>=12'} - chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} - chalk@5.0.1: - resolution: {integrity: sha512-Fo07WOYGqMfCWHOzSXOt2CxDbC6skS/jO9ynEcmpANMoPrD+W1r1K6Vx7iNm+AQmETU1Xr2t+n8nzkV9t6xh3w==} - engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - chalk@5.6.2: resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} @@ -10276,21 +10908,12 @@ packages: character-entities-html4@2.1.0: resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} - character-entities-legacy@1.1.4: - resolution: {integrity: sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==} - character-entities-legacy@3.0.0: resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} - character-entities@1.2.4: - resolution: {integrity: sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==} - character-entities@2.0.2: resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} - character-reference-invalid@1.1.4: - resolution: {integrity: sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==} - character-reference-invalid@2.0.1: resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==} @@ -10304,6 +10927,21 @@ packages: resolution: {integrity: sha512-GIjfiT9dbmHRiYi6Nl2yFCq7kkwdkp1W/lp2J99rX0yo9tgJGn3lKQATztIjb5tVtevcBtIdICNWqlq5+E8/Pw==} engines: {pnpm: '>=8'} + chat@4.40.0: + resolution: {integrity: sha512-slu3VDxItlelEZ8A5vqzlmtT2WErqj2YCGuhhcNx+Ev0+wHeBUqUDUA7hXkca+BfFtW1ZX7ECcySCTG2q2gefg==} + engines: {node: '>=20'} + peerDependencies: + ai: ^6.0.182 || ^7.0.0 + workflow: ^5.0.0-beta.35 + zod: ^3.0.0 || ^4.0.0 + peerDependenciesMeta: + ai: + optional: true + workflow: + optional: true + zod: + optional: true + check-error@2.1.3: resolution: {integrity: sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA==} engines: {node: '>= 16'} @@ -10360,6 +10998,10 @@ packages: cjs-module-lexer@2.2.0: resolution: {integrity: sha512-4bHTS2YuzUvtoLjdy+98ykbNB5jS0+07EvFNXerqZQJ89F7DI6ET7OQo/HJuW6K0aVsKA9hj9/RVb2kQVOrPDQ==} + clarinet@0.12.6: + resolution: {integrity: sha512-0FR+TrvLbYHLjhzs9oeIbd3yfZmd4u2DzYQEjUTm2dNfh4Y/9RIRWPjsm3aBtrVEpjKI7+lWa4ouqEXoml84mQ==} + engines: {chrome: '>=16.0.912', firefox: '>=0.8.0', node: '>=0.3.6'} + class-transformer@0.5.1: resolution: {integrity: sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw==} @@ -10375,6 +11017,9 @@ packages: class-variance-authority@0.6.1: resolution: {integrity: sha512-eurOEGc7YVx3majOrOb099PNKgO3KnKSApOprXI4BTq6bcfbqbQXPN2u+rPPmIJ2di23bMwhk0SxCCthBmszEQ==} + class-variance-authority@0.7.1: + resolution: {integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==} + classnames@2.3.1: resolution: {integrity: sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA==} @@ -10385,10 +11030,6 @@ packages: resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} engines: {node: '>=6'} - cli-boxes@3.0.0: - resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==} - engines: {node: '>=10'} - cli-cursor@3.1.0: resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} engines: {node: '>=8'} @@ -10408,10 +11049,6 @@ packages: client-only@0.0.1: resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} - clipboardy@3.0.0: - resolution: {integrity: sha512-Su+uU5sr1jkUy1sGRpLKjKrvEOVXgSgiSInwa/qeID6aJ07yh+5NWc3h2QfjHjBnfX4LhtFcuAWKUsJ3r+fjbg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - cliui@6.0.0: resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} @@ -10490,9 +11127,6 @@ packages: comlink@4.4.2: resolution: {integrity: sha512-OxGdvBmJuNKSCMO4NTl1L47VRp6xn2wG4F/2hYzB6tiCb709otOxtEYCSvK80PtjODfXXZu8ds+Nw5kVCjqd2g==} - comma-separated-tokens@1.0.8: - resolution: {integrity: sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==} - comma-separated-tokens@2.0.3: resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} @@ -10545,6 +11179,10 @@ packages: resolution: {integrity: sha512-4m5s3Me2xxlVKG9PkZpQqHQR7bgpnN7joDMJ4yvVkVXngjoITG76IaZmzmywSeRTeTpc6N6r3H3+KyUurV8OYw==} engines: {node: '>=18'} + compress-commons@7.0.1: + resolution: {integrity: sha512-g0S8KAD8qf4+V//pr3BfB1aBnARLXNz2Gx+jmHU0LEriUuoQUOPOulVquHKTJ8+EAIIO7fhseNDr9wK5Q9FKBQ==} + engines: {node: '>=18'} + compressible@2.0.18: resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} engines: {node: '>= 0.6'} @@ -10594,9 +11232,6 @@ packages: console-control-strings@1.1.0: resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==} - console-table-printer@2.15.0: - resolution: {integrity: sha512-SrhBq4hYVjLCkBVOWaTzceJalvn5K1Zq5aQA6wXC/cYjI3frKWNPEMK3sZsJfNNQApvCQmgBcc13ZKmFj8qExw==} - console.table@0.10.0: resolution: {integrity: sha512-dPyZofqggxuvSf7WXvNjuRfnsOk1YazkVP8FdxH4tcH2c37wc79/Yl6Bhr7Lsu00KMgy2ql/qCMuNu8xctZM8g==} engines: {node: '> 0.10'} @@ -10683,6 +11318,12 @@ packages: resolution: {integrity: sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw==} engines: {node: '>= 0.10'} + cose-base@1.0.3: + resolution: {integrity: sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg==} + + cose-base@2.2.0: + resolution: {integrity: sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g==} + cosmiconfig@7.1.0: resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} engines: {node: '>=10'} @@ -10696,6 +11337,15 @@ packages: typescript: optional: true + crc-32@1.2.2: + resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} + engines: {node: '>=0.8'} + hasBin: true + + crc32-stream@7.0.1: + resolution: {integrity: sha512-IBWsY8xznyQrcHn8h4bC8/4ErNke5elzgG8GcqF4RFPw6aHkWWRc7Tgw6upjaTX/CT/yQgqYENkxYsTYN+hW2g==} + engines: {node: '>=18'} + crc@3.8.0: resolution: {integrity: sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==} @@ -10723,6 +11373,10 @@ packages: resolution: {integrity: sha512-fkdfq+b+AHI4cKdhZlppHveI/mgz2qpiYxcm+t5E5TsxX7QrLS1VE0+7GENEk9z0EeGPcpSciGv6ez24duWhwQ==} engines: {node: '>=18.x'} + croner@10.0.1: + resolution: {integrity: sha512-ixNtAJndqh173VQ4KodSdJEI6nuioBWI0V1ITNKhZZsO0pEMoDxz539T4FTTbSZ/xIOSuDnzxLVRqBVSvPNE2g==} + engines: {node: '>=18.0'} + cropperjs@1.6.2: resolution: {integrity: sha512-nhymn9GdnV3CqiEHJVai54TULFAE3VshJTXSqSJKa8yXAKyBKDWdhHarnlIPrshJ0WMFTGuFvG02YjLXfPiuOA==} @@ -10827,6 +11481,162 @@ packages: custom-error-instance@2.1.1: resolution: {integrity: sha512-p6JFxJc3M4OTD2li2qaHkDCw9SfMw82Ldr6OC9Je1aXiGfhx2W8p3GaoeaGrPJTUN9NirTM/KTxHWMUdR1rsUg==} + cytoscape-cose-bilkent@4.1.0: + resolution: {integrity: sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ==} + peerDependencies: + cytoscape: ^3.2.0 + + cytoscape-fcose@2.2.0: + resolution: {integrity: sha512-ki1/VuRIHFCzxWNrsshHYPs6L7TvLu3DL+TyIGEsRcvVERmxokbf5Gdk7mFxZnTdiGtnA4cfSmjZJMviqSuZrQ==} + peerDependencies: + cytoscape: ^3.2.0 + + cytoscape@3.34.3: + resolution: {integrity: sha512-yfYGhRcGAntq6YBD583j4n0Eg3jIxvWmZtz/5uz9UYkeIStSlMxuUja+ec5j3iBD8nv1rwaOAYMW09tBdkSeaQ==} + engines: {node: '>=0.10'} + + d3-array@2.12.1: + resolution: {integrity: sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==} + + d3-array@3.2.4: + resolution: {integrity: sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==} + engines: {node: '>=12'} + + d3-axis@3.0.0: + resolution: {integrity: sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==} + engines: {node: '>=12'} + + d3-brush@3.0.0: + resolution: {integrity: sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==} + engines: {node: '>=12'} + + d3-chord@3.0.1: + resolution: {integrity: sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==} + engines: {node: '>=12'} + + d3-color@3.1.0: + resolution: {integrity: sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==} + engines: {node: '>=12'} + + d3-contour@4.0.2: + resolution: {integrity: sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==} + engines: {node: '>=12'} + + d3-delaunay@6.0.4: + resolution: {integrity: sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==} + engines: {node: '>=12'} + + d3-dispatch@3.0.1: + resolution: {integrity: sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==} + engines: {node: '>=12'} + + d3-drag@3.0.0: + resolution: {integrity: sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==} + engines: {node: '>=12'} + + d3-dsv@3.0.1: + resolution: {integrity: sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==} + engines: {node: '>=12'} + hasBin: true + + d3-ease@3.0.1: + resolution: {integrity: sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==} + engines: {node: '>=12'} + + d3-fetch@3.0.1: + resolution: {integrity: sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==} + engines: {node: '>=12'} + + d3-force@3.0.0: + resolution: {integrity: sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==} + engines: {node: '>=12'} + + d3-format@3.1.2: + resolution: {integrity: sha512-AJDdYOdnyRDV5b6ArilzCPPwc1ejkHcoyFarqlPqT7zRYjhavcT3uSrqcMvsgh2CgoPbK3RCwyHaVyxYcP2Arg==} + engines: {node: '>=12'} + + d3-geo@3.1.1: + resolution: {integrity: sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q==} + engines: {node: '>=12'} + + d3-hierarchy@3.1.2: + resolution: {integrity: sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==} + engines: {node: '>=12'} + + d3-interpolate@3.0.1: + resolution: {integrity: sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==} + engines: {node: '>=12'} + + d3-path@1.0.9: + resolution: {integrity: sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==} + + d3-path@3.1.0: + resolution: {integrity: sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==} + engines: {node: '>=12'} + + d3-polygon@3.0.1: + resolution: {integrity: sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==} + engines: {node: '>=12'} + + d3-quadtree@3.0.1: + resolution: {integrity: sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==} + engines: {node: '>=12'} + + d3-random@3.0.1: + resolution: {integrity: sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==} + engines: {node: '>=12'} + + d3-sankey@0.12.3: + resolution: {integrity: sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ==} + + d3-scale-chromatic@3.1.0: + resolution: {integrity: sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ==} + engines: {node: '>=12'} + + d3-scale@4.0.2: + resolution: {integrity: sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==} + engines: {node: '>=12'} + + d3-selection@3.0.0: + resolution: {integrity: sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==} + engines: {node: '>=12'} + + d3-shape@1.3.7: + resolution: {integrity: sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==} + + d3-shape@3.2.0: + resolution: {integrity: sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==} + engines: {node: '>=12'} + + d3-time-format@4.1.0: + resolution: {integrity: sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==} + engines: {node: '>=12'} + + d3-time@3.1.0: + resolution: {integrity: sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==} + engines: {node: '>=12'} + + d3-timer@3.0.1: + resolution: {integrity: sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==} + engines: {node: '>=12'} + + d3-transition@3.0.1: + resolution: {integrity: sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==} + engines: {node: '>=12'} + peerDependencies: + d3-selection: 2 - 3 + + d3-zoom@3.0.0: + resolution: {integrity: sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==} + engines: {node: '>=12'} + + d3@7.9.0: + resolution: {integrity: sha512-e1U46jVP+w7Iut8Jt8ri1YsPOvFpg46k+K8TpCb0P+zjCkjkPnV7WzfDJzMHy1LnA+wj5pLT1wjO901gLXeEhA==} + engines: {node: '>=12'} + + dagre-d3-es@7.0.14: + resolution: {integrity: sha512-P4rFMVq9ESWqmOgK+dlXvOtLwYg0i7u0HBGJER0LZDJT2VHIPAMZ/riPxqJceWMStH5+E61QxFra9kIS3AqdMg==} + damerau-levenshtein@1.0.8: resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} @@ -10869,6 +11679,9 @@ packages: date-fns@3.6.0: resolution: {integrity: sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==} + date-fns@4.4.0: + resolution: {integrity: sha512-+1UMbeh68lH1SegH83CGWwpb6OHHbpSgr3+s5Eww5M4CAgswBpoWS0AjTOfEJ33HiYKz1hdj/KTFprzXHmq/6w==} + dateformat@4.6.3: resolution: {integrity: sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==} @@ -10878,6 +11691,9 @@ packages: dayjs@1.11.19: resolution: {integrity: sha512-t5EcLVS6QPBNqM2z8fakk/NKel+Xzshgt8FFKAn+qwlD1pzZWxh0nVCrvFK7ZDb6XucZeF9z8C7CBWTRIVApAw==} + dayjs@1.11.23: + resolution: {integrity: sha512-QDTCU0M0MxR3hQfnlDJfwekQiaanm1ubOD231u73WBckQ/fsamwRLiE2GBz6D3a/xF1NgfiDLJjXBa1hYOYTtQ==} + debug@2.6.9: resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} peerDependencies: @@ -10941,10 +11757,6 @@ packages: resolution: {integrity: sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==} engines: {node: '>= 0.4'} - deep-extend@0.6.0: - resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} - engines: {node: '>=4.0.0'} - deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} @@ -10978,6 +11790,9 @@ packages: resolution: {integrity: sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==} engines: {node: '>= 14'} + delaunator@5.1.0: + resolution: {integrity: sha512-AGrQ4QSgssa1NGmWmLPqN5NY2KajF5MqxetNEO+o0n3ZwZZeTmt7bBnvzHWrmkZFxGgr4HdyFgelzgi06otLuQ==} + delay@5.0.0: resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==} engines: {node: '>=10'} @@ -11057,6 +11872,10 @@ packages: resolution: {integrity: sha512-vtcDfH3TOjP8UekytvnHH1o1P4FcUdt4eQ1Y+Abap1tk/OB2MWQvcwS2ClCd1zuIhc3JKOx6p3kod8Vfys3E+A==} engines: {node: '>=0.3.1'} + diff@8.0.4: + resolution: {integrity: sha512-DPi0FmjiSU5EvQV0++GFDOJ9ASQUVFh5kD+OzOnYdi7n3Wpm9hWWGfB/O2blfHcMVTL5WkQXSnRiK9makhrcnw==} + engines: {node: '>=0.3.1'} + diffie-hellman@5.0.3: resolution: {integrity: sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==} @@ -11206,6 +12025,10 @@ packages: resolution: {integrity: sha512-i6UzDscO/XfAcNYD75CfICkmfLedpyPDdozrLMmQc5ORaQcdMoc21OnlEylMIqI7U8eniKrPMxxtj8k0vhmJhA==} engines: {node: '>=14'} + empathic@2.0.1: + resolution: {integrity: sha512-YGRs8knHhKHVShLkFET/rWAU8kmHbOV5LwN938RHI0pljAJ1Gf6SzXsSmRaEzcXTtOOmVqJ5+WtQPL5uigY50Q==} + engines: {node: '>=14'} + encode-utf8@1.0.3: resolution: {integrity: sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==} @@ -11306,6 +12129,9 @@ packages: es-toolkit@1.33.0: resolution: {integrity: sha512-X13Q/ZSc+vsO1q600bvNK4bxgXMkHcf//RxCmYDaRY5DAcT+eoXjY5hoAPGMdRnWQjvyLEcyauG3b6hz76LNqg==} + es-toolkit@1.52.0: + resolution: {integrity: sha512-XTNEJQh1tY1ZJVcf6ayP/2n4ZPyaHlW2FWs7xvw5ddPuhUVjLD3olQVQS7kf58JbAB48iL0uL/jerTrjtV3lDA==} + es6-promise@4.2.8: resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==} @@ -11327,8 +12153,8 @@ packages: engines: {node: '>=18'} hasBin: true - esbuild@0.27.7: - resolution: {integrity: sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==} + esbuild@0.28.2: + resolution: {integrity: sha512-HKVLS8dvII+xoKW9kmqxbRKrnWEXfJJr/FZhhJmiqIB0e053QNYFqOBouTMO/k5sID4MvCiUCvv8b9M4h32wIA==} engines: {node: '>=18'} hasBin: true @@ -11557,6 +12383,9 @@ packages: eventemitter3@5.0.4: resolution: {integrity: sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==} + events-universal@1.0.1: + resolution: {integrity: sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==} + events@3.3.0: resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} engines: {node: '>=0.8.x'} @@ -11565,6 +12394,10 @@ packages: resolution: {integrity: sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg==} engines: {node: '>=18.0.0'} + eventsource-parser@3.1.1: + resolution: {integrity: sha512-EKN1vKAMcZ8MlYMpaNuxN6R9yakzH6uajHcHVTqWJzvu5pWw9DyhbP35HH8MVBQ+dZjAfDxk+A8NiR9KWaXiyQ==} + engines: {node: '>=18.0.0'} + eventsource@3.0.7: resolution: {integrity: sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==} engines: {node: '>=18.0.0'} @@ -11675,6 +12508,9 @@ packages: resolution: {integrity: sha512-jt2DW/aNFNwke7AUd+Z+e6pz39KO5rzdbbFCg2sGafS4mk13MI7Z8O5z9cADNn5lhGODIgLwug6TZO2ctf7kcw==} engines: {node: '>=6.0.0'} + fast-fifo@1.3.2: + resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==} + fast-glob@3.3.1: resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} engines: {node: '>=8.6.0'} @@ -11702,11 +12538,11 @@ packages: fast-stable-stringify@1.0.0: resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==} - fast-string-truncated-width@1.2.1: - resolution: {integrity: sha512-Q9acT/+Uu3GwGj+5w/zsGuQjh9O1TyywhIwAxHudtWrgF09nHOPrvTLhQevPbttcxjr/SNN7mJmfOw/B1bXgow==} + fast-string-truncated-width@3.0.3: + resolution: {integrity: sha512-0jjjIEL6+0jag3l2XWWizO64/aZVtpiGE3t0Zgqxv0DPuxiMjvB3M24fCyhZUO4KomJQPj3LTSUnDP3GpdwC0g==} - fast-string-width@1.1.0: - resolution: {integrity: sha512-O3fwIVIH5gKB38QNbdg+3760ZmGz0SZMgvwJbA1b2TGXceKE6A2cOlfogh1iw8lr049zPyd7YADHy+B7U4W9bQ==} + fast-string-width@3.0.2: + resolution: {integrity: sha512-gX8LrtNEI5hq8DVUfRQMbr5lpaS4nMIWV+7XEbXk2b8kiQIizgnlr12B4dA3ZEx3308ze0O4Q1R+cHts8kyUJg==} fast-text-encoding@1.0.6: resolution: {integrity: sha512-VhXlQgj9ioXCqGstD37E/HBeqEGV/qOD/kmbVG8h5xKBYvM1L3lR1Zn4555cQ8GkYbJa8aJSipLPndE1k6zK2w==} @@ -11714,8 +12550,8 @@ packages: fast-uri@3.1.0: resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==} - fast-wrap-ansi@0.1.6: - resolution: {integrity: sha512-HlUwET7a5gqjURj70D5jl7aC3Zmy4weA1SHUfM0JFI0Ptq987NH2TwbBFLoERhfwk+E+eaq4EK3jXoT+R3yp3w==} + fast-wrap-ansi@0.2.2: + resolution: {integrity: sha512-7F2Fl+TjRSenLqlU3UjSH0iyqopqoZIu7eZVpEirP2g1GtWa2G/ecEmBdgz31+Mxr+ELclgg6sokpSFIQiZ02Q==} fast-xml-builder@1.0.0: resolution: {integrity: sha512-fpZuDogrAgnyt9oDDz+5DBz0zgPdPZz6D4IR7iESxRXElrlGTRkHJ9eEt+SACRJwT0FNFrt71DFQIUFBJfX/uQ==} @@ -11731,6 +12567,9 @@ packages: resolution: {integrity: sha512-BQ30U1mKkvXQXXkAGcuyUA/GA26oEB7NzOtsxCDtyu62sjGw5QraKFhx2Em3WQNjPw9PG6MQ9yuIIgkSDfGu5A==} hasBin: true + fastdom@1.0.12: + resolution: {integrity: sha512-LB+xjSTEbjHE1cWsxu+tN2Xqr1kpi+V9aADI7sVM5ZMaXyYGPHULQMzpJMYqOTULK/73pUkWVzzObFRBkPr+hg==} + fastestsmallesttextencoderdecoder@1.0.22: resolution: {integrity: sha512-Pb8d48e+oIuY4MaM64Cd7OW1gt4nxCHs7/ddPPZ/Ic3sg8yVGM7O9wDvZ7us6ScaUupzM+pfBolwtYhN1IxBIw==} @@ -12017,6 +12856,10 @@ packages: resolution: {integrity: sha512-LDODD4TMYx7XXdpwxAVRAIAuB0bzv0s+ywFonY46k126qzQHT9ygyoa9tncmOiQmmDrik65UYsEkv3lbfqQ3yQ==} engines: {node: '>=14'} + gaxios@7.3.1: + resolution: {integrity: sha512-kB3rzJV7d9juLZh8/56QTXCwQfxyhdOMdyYk1HdQKFtF8TJTDTZQJtixWIwXdE9Jji91mC41DUNpjleo4L4eAQ==} + engines: {node: '>=18'} + gcp-metadata@5.3.0: resolution: {integrity: sha512-FNTkdNEnBdlqF2oatizolQqNANMrcqJt6AAYt99B3y1aLLC8Hc5IOBb+ZnnzllodEEf6xMBp6wRcBbc16fa65w==} engines: {node: '>=12'} @@ -12025,6 +12868,10 @@ packages: resolution: {integrity: sha512-a4tiq7E0/5fTjxPAaH4jpjkSv/uCaU2p5KC6HVGrvl0cDjA8iBZv4vv1gyzlmK0ZUKqwpOyQMKzZQe3lTit77A==} engines: {node: '>=14'} + gcp-metadata@8.1.2: + resolution: {integrity: sha512-zV/5HKTfCeKWnxG0Dmrw51hEWFGfcF2xiXqcA3+J90WDuP0SvoiSO5ORvcBsifmx/FoIjgQN3oNOGaQ5PhLFkg==} + engines: {node: '>=18'} + generator-function@2.0.1: resolution: {integrity: sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==} engines: {node: '>= 0.4'} @@ -12041,6 +12888,10 @@ packages: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} + get-east-asian-width@1.7.0: + resolution: {integrity: sha512-XjH1AECxf0giL2V1aU8vKyRR2ppRUb5c0EvT7zuJTokQ74bNo52zOtghqdWIqrhUD79fo3x0WfKZdOqxF6LG1Q==} + engines: {node: '>=18'} + get-func-name@2.0.2: resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} @@ -12152,6 +13003,10 @@ packages: globrex@0.1.2: resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} + google-auth-library@10.9.1: + resolution: {integrity: sha512-i1ydyHrqcIxXkWh/uBmVkzCvIuq5yiK2ATndIe5XxKholrG/MTYP9xGYka4sQhrbIAgGjL2B6NOE7rFaiF3fXw==} + engines: {node: '>=18'} + google-auth-library@8.9.0: resolution: {integrity: sha512-f7aQCJODJFmYWN6PeNKzgvy9LI2tYmXnzpNDHEjG5sDNPgGb2FXQyTBnXeSH+PAtpKESFD+LmHw3Ox3mN7e1Fg==} engines: {node: '>=12'} @@ -12164,6 +13019,10 @@ packages: resolution: {integrity: sha512-NEgUnEcBiP5HrPzufUkBzJOD/Sxsco3rLNo1F1TNf7ieU8ryUzBhqba8r756CjLX7rn3fHl6iLEwPYuqpoKgQQ==} engines: {node: '>=14'} + google-logging-utils@1.1.3: + resolution: {integrity: sha512-eAmLkjDjAFCVXg7A1unxHsLf961m6y17QFqXqAXGj/gVkKFrEICfStRfwUlGNfeCEjNRa32JEWOUTlYXPyyKvA==} + engines: {node: '>=14'} + google-p12-pem@4.0.1: resolution: {integrity: sha512-WPkN4yGtz05WZ5EhtlxNDWPhC4JIic6G8ePitwUWy4l+XPVYec+a0j0Ts47PDtW59y3RwAhUd9/h9ZZ63px6RQ==} engines: {node: '>=12.0.0'} @@ -12201,11 +13060,6 @@ packages: peerDependencies: graphql: ^14.6.0 || ^15.0.0 || ^16.0.0 - graphql-request@6.1.0: - resolution: {integrity: sha512-p+XPfS4q7aIpKVcgmnZKhMNqhltk20hfXtkaIkTfjjmiKMJ5xrt5c743cL03y/K7y1rg3WrIC49xGiEQ4mxdNw==} - peerDependencies: - graphql: 14 - 16 - graphql-scalars@1.25.0: resolution: {integrity: sha512-b0xyXZeRFkne4Eq7NAnL400gStGqG/Sx9VqX0A05nHyEbv57UJnWKsjNnrpVqv5e/8N1MUxkt0wwcRXbiyKcFg==} engines: {node: '>=10'} @@ -12240,6 +13094,9 @@ packages: h3@1.15.5: resolution: {integrity: sha512-xEyq3rSl+dhGX2Lm0+eFQIAzlDN6Fs0EcC4f7BNUmzaRX/PTzeuM+Tr2lHB8FoXggsQIeXLj8EDVgs5ywxyxmg==} + hachure-fill@0.5.2: + resolution: {integrity: sha512-3GKBOn+m2LX9iq+JC1064cSFprJY4jL1jCXTcpnfER5HYE2l/4EfWSGzkPa/ZDBmYI0ZOEj5VHV/eKnPGkHuOg==} + handlebars@4.7.8: resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==} engines: {node: '>=0.4.7'} @@ -12320,6 +13177,12 @@ packages: resolution: {integrity: sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==} engines: {node: '>= 0.4'} + hast-util-from-dom@5.0.1: + resolution: {integrity: sha512-N+LqofjR2zuzTjCPzyDUdSshy4Ma6li7p/c3pA78uTwzFgENbgbUrm2ugwsOdcjI1muO+o6Dgzp9p8WHtn/39Q==} + + hast-util-from-html-isomorphic@2.0.0: + resolution: {integrity: sha512-zJfpXq44yff2hmE0XmwEOzdWin5xwH+QIhMLOScpX91e/NSGPsAzNCvLQDIEPyO2TXi+lBmU6hjLIhV8MwP2kw==} + hast-util-from-html@2.0.3: resolution: {integrity: sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw==} @@ -12335,9 +13198,6 @@ packages: hast-util-is-element@3.0.0: resolution: {integrity: sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==} - hast-util-parse-selector@2.2.5: - resolution: {integrity: sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==} - hast-util-parse-selector@3.1.1: resolution: {integrity: sha512-jdlwBjEexy1oGz0aJ2f4GKMaVKkA9jwjr4MjAAI22E5fM/TXVZHuS5OpONtdeIkRKqAaryQ2E9xNQxijoThSZA==} @@ -12347,6 +13207,9 @@ packages: hast-util-raw@9.1.0: resolution: {integrity: sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw==} + hast-util-sanitize@5.0.2: + resolution: {integrity: sha512-3yTWghByc50aGS7JlGhk61SPenfE/p1oaFeNwkOOyrscaOkMGrcW9+Cy/QAIOBpZxP1yqDIzFMR0+Np0i0+usg==} + hast-util-select@6.0.4: resolution: {integrity: sha512-RqGS1ZgI0MwxLaKLDxjprynNzINEkRHY2i8ln4DDjgv9ZhcYVIHN9rlpiYsqtFwrgpYU361SyWDQcGNIBVu3lw==} @@ -12362,14 +13225,18 @@ packages: hast-util-to-string@3.0.1: resolution: {integrity: sha512-XelQVTDWvqcl3axRfI0xSeoVKzyIFPwsAGSLIsKdJKQMXDYJS4WYrBNF/8J7RdhIcFI2BOHgAifggsvsxp/3+A==} + hast-util-to-text@4.0.2: + resolution: {integrity: sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A==} + hast-util-whitespace@2.0.1: resolution: {integrity: sha512-nAxA0v8+vXSBDt3AnRUNjyRIQ0rD+ntpbAp4LnPkumc5M9yUbSMa4XDU9Q6etY4f1Wp4bNgvc1yjiZtsTTrSng==} hast-util-whitespace@3.0.0: resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} - hastscript@6.0.0: - resolution: {integrity: sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==} + hast@1.0.0: + resolution: {integrity: sha512-vFUqlRV5C+xqP76Wwq2SrM0kipnmpxJm7OfvVXpB35Fp+Fn4MV+ozr+JZr5qFvyR1q/U+Foim2x+3P+x9S1PLA==} + deprecated: Renamed to rehype hastscript@7.2.0: resolution: {integrity: sha512-TtYPq24IldU8iKoJQqvZOuhi5CyCQRAbvDOX0x1eW6rsHSxa/1i2CCiptNTotGHJ3VoHRGmqiv6/D3q113ikkw==} @@ -12418,8 +13285,8 @@ packages: highlightjs-vue@1.0.0: resolution: {integrity: sha512-PDEfEF102G23vHmPhLyPboFCD+BkMGu+GuJe2d9/eH4FsCwvgBpnc9n0pGE+ffKdph38s6foEZiEjdgHdzp+IA==} - hls.js@1.6.15: - resolution: {integrity: sha512-E3a5VwgXimGHwpRGV+WxRTKeSp2DW5DI5MWv34ulL3t5UNmyJWCQ1KmLEHbYzcfThfXG8amBL+fCYPneGHC4VA==} + hls.js@1.7.3: + resolution: {integrity: sha512-MsPlx6yVW4Qv4C7mEVou4/gk/5cN2dVxOTnrNjPSmyH2f0Ln+/UkG10Ax1PE6OvrmTVPKgQYozTtBaPOuCzq7A==} hmac-drbg@1.0.1: resolution: {integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==} @@ -12472,21 +13339,6 @@ packages: zod-openapi: optional: true - hono-openapi@1.3.0: - resolution: {integrity: sha512-xDvCWpWEIv0weEmnl3EjRQzqbHIO8LnfzMuYOCmbuyE5aes6aXxLg4vM3ybnoZD5TiTUkA6PuRQPJs3R7WRBig==} - peerDependencies: - '@hono/standard-validator': ^0.2.0 - '@standard-community/standard-json': ^0.3.5 - '@standard-community/standard-openapi': ^0.2.9 - '@types/json-schema': ^7.0.15 - hono: ^4.8.3 - openapi-types: ^12.1.3 - peerDependenciesMeta: - '@hono/standard-validator': - optional: true - hono: - optional: true - hono@4.12.10: resolution: {integrity: sha512-mx/p18PLy5og9ufies2GOSUqep98Td9q4i/EF6X7yJgAiIopxqdfIO3jbqsi3jRgTgw88jMDEzVKi+V2EF+27w==} engines: {node: '>=16.9.0'} @@ -12640,11 +13492,6 @@ packages: engines: {node: '>=16.x'} hasBin: true - image-size@2.0.2: - resolution: {integrity: sha512-IRqXKlaXwgSMAMtpNzZa1ZAe8m+Sa1770Dhk8VkSsP9LS+iHD62Zd8FQKs8fbPiagBE7BzoFX23cxFnwshpV6w==} - engines: {node: '>=16.x'} - hasBin: true - image-to-pdf@3.0.2: resolution: {integrity: sha512-6/IQCt4f384zjQ1w8P7FHIN/tF0mau8RbAIydT/+wyfZ1RAb8E2fiKe9t/k0V880h0d3zRpw9Q1bM5AIgVL/4g==} @@ -12673,6 +13520,9 @@ packages: engines: {node: '>=8'} hasBin: true + import-meta-resolve@4.2.0: + resolution: {integrity: sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==} + imurmurhash@0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} @@ -12704,6 +13554,13 @@ packages: resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} engines: {node: '>= 0.4'} + internmap@1.0.1: + resolution: {integrity: sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==} + + internmap@2.0.3: + resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==} + engines: {node: '>=12'} + into-stream@6.0.0: resolution: {integrity: sha512-XHbaOAvP+uFKUFsOgoNPRjLkwB+I22JFPFe5OjTkQ0nwgj6+pSjb4NmB6VMxaPshLiOf+zcpOCBQuLwC1KHhZA==} engines: {node: '>=10'} @@ -12726,15 +13583,9 @@ packages: iron-webcrypto@1.2.1: resolution: {integrity: sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==} - is-alphabetical@1.0.4: - resolution: {integrity: sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==} - is-alphabetical@2.0.1: resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==} - is-alphanumerical@1.0.4: - resolution: {integrity: sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==} - is-alphanumerical@2.0.1: resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==} @@ -12798,9 +13649,6 @@ packages: resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==} engines: {node: '>= 0.4'} - is-decimal@1.0.4: - resolution: {integrity: sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==} - is-decimal@2.0.1: resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} @@ -12809,6 +13657,9 @@ packages: engines: {node: '>=8'} hasBin: true + is-electron@2.2.2: + resolution: {integrity: sha512-FO/Rhvz5tuw4MCWkpMzHFKWD2LsfHzIb7i6MdPYZ/KW7AlxawyLkqdy+jPZP1WubqEADE3O4FUENlJHDfQASRg==} + is-extendable@0.1.1: resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==} engines: {node: '>=0.10.0'} @@ -12841,9 +13692,6 @@ packages: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} - is-hexadecimal@1.0.4: - resolution: {integrity: sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==} - is-hexadecimal@2.0.1: resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} @@ -12908,10 +13756,6 @@ packages: resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} engines: {node: '>=0.10.0'} - is-port-reachable@4.0.0: - resolution: {integrity: sha512-9UoipoxYmSk6Xy7QFgRv2HDyaysmgSG75TFQs6S+3pDM7ZhKTF/bskZV+0UlABHzKjNVhPjYCLfeZUEg1wXxig==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - is-potential-custom-element-name@1.0.1: resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} @@ -13244,6 +14088,9 @@ packages: jose@6.2.0: resolution: {integrity: sha512-xsfE1TcSCbUdo6U07tR0mvhg0flGxU8tPLbF03mirl2ukGQENhUg4ubGYQnhVH0b5stLlPM+WOqDkEl1R1y5sQ==} + jose@6.2.12: + resolution: {integrity: sha512-9NiFmJEex0sy2Dk58j2UGBSHgUs2ypF9eZSu4L6vjOX3Dp96Sw1F3uL+H+D1sx02jZZdzUT0HgvCy59CuvXcWw==} + joycon@3.1.1: resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} engines: {node: '>=10'} @@ -13252,6 +14099,9 @@ packages: resolution: {integrity: sha512-a+bKEcCjtuW5WTdgeXFzswSrdqi0jk4XlEtZlx5A94wCoBpFjfFTbo/Tra5SpNCl/YFZPvcV1dJc+TAYeg6ROQ==} deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + jpeg-js@0.4.4: + resolution: {integrity: sha512-WZzeDOEtTOBK4Mdsar0IqEU5sMr3vSV2RqkAIzUEV2BHnUfKGyswWFPFwK5EeDo93K3FohSHbLAjj0s1Wzd+dg==} + js-base64@2.6.4: resolution: {integrity: sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==} @@ -13276,6 +14126,9 @@ packages: js-tiktoken@1.0.21: resolution: {integrity: sha512-biOj/6M5qdgx5TKjDnFT1ymSpM5tbd3ylwDtrQvFQSu0Z7bBYko2dF+W/aUkXUPuk6IVpRxk/3Q2sHOzGlS36g==} + js-tokens@10.0.0: + resolution: {integrity: sha512-lM/UBzQmfJRo9ABXbPWemivdCW8V2G8FHaHdypQaIy523snUjog0W71ayWXTjiR+ixeMyVHN2XcpnTd/liPg/Q==} + js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -13433,6 +14286,10 @@ packages: resolution: {integrity: sha512-S0+riEvy1CK4VKse1ivMff8gmabe/prY7sKB3njjhyoLLsNFDQYtKNgXrbWUggGDCJBz7Fctl5i8fLCESHXzSg==} hasBin: true + katex@0.16.47: + resolution: {integrity: sha512-Eeo8Ys1doU1z+x8AZsPpQu+p/QcZBI5PeOo7QGQdy2x2m0MU/hYagBbGOmXwr5KVbEfVuWv9LpnQWeehogurjg==} + hasBin: true + keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} @@ -13442,6 +14299,9 @@ packages: keyvaluestorage-interface@1.0.0: resolution: {integrity: sha512-8t6Q3TclQ4uZynJY9IGr2+SsIGwK9JHcO6ootkHCGA0CrQCRy+VkouYNO2xicET6b9al7QKzpebNow+gkpCL8g==} + khroma@2.1.0: + resolution: {integrity: sha512-Ls993zuzfayK269Svk9hzpeGUKob/sIgZzyHYdjQoAdQetRKpOLj+k/QQQ/6Qi0Yz65mlROrfd+Ev+1+7dz9Kw==} + kind-of@6.0.3: resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} engines: {node: '>=0.10.0'} @@ -13457,80 +14317,11 @@ packages: konva@10.2.0: resolution: {integrity: sha512-JBoz0Xjbf49UPxCZegZ4WseqOzJ+C4AUDOtJ9eBve5RS5Fcq/u8TdBD5fDl/uPFInpC3a9uycm0sRyZpF4hheg==} - langchain@0.3.37: - resolution: {integrity: sha512-1jPsZ6xsxkcQPUvqRjvfuOLwZLLyt49hzcOK7OYAJovIkkOxd5gzK4Yw6giPUQ8g4XHyvULNlWBz+subdkcokw==} - engines: {node: '>=18'} - peerDependencies: - '@langchain/anthropic': '*' - '@langchain/aws': '*' - '@langchain/cerebras': '*' - '@langchain/cohere': '*' - '@langchain/core': '>=0.3.58 <0.4.0' - '@langchain/deepseek': '*' - '@langchain/google-genai': '*' - '@langchain/google-vertexai': '*' - '@langchain/google-vertexai-web': '*' - '@langchain/groq': '*' - '@langchain/mistralai': '*' - '@langchain/ollama': '*' - '@langchain/xai': '*' - axios: '*' - cheerio: '*' - handlebars: ^4.7.8 - peggy: ^3.0.2 - typeorm: '*' - peerDependenciesMeta: - '@langchain/anthropic': - optional: true - '@langchain/aws': - optional: true - '@langchain/cerebras': - optional: true - '@langchain/cohere': - optional: true - '@langchain/deepseek': - optional: true - '@langchain/google-genai': - optional: true - '@langchain/google-vertexai': - optional: true - '@langchain/google-vertexai-web': - optional: true - '@langchain/groq': - optional: true - '@langchain/mistralai': - optional: true - '@langchain/ollama': - optional: true - '@langchain/xai': - optional: true - axios: - optional: true - cheerio: - optional: true - handlebars: - optional: true - peggy: - optional: true - typeorm: - optional: true - - langsmith@0.3.87: - resolution: {integrity: sha512-XXR1+9INH8YX96FKWc5tie0QixWz6tOqAsAKfcJyPkE0xPep+NDz0IQLR32q4bn10QK3LqD2HN6T3n6z1YLW7Q==} + langchain@1.5.11: + resolution: {integrity: sha512-6Sx9N5ylAJ11WrP1QnJLSIo75UABZbshzTJgG28H4mXuGcDk+w+7ZaNLkmGIh9sy/3PZcYS8UrI2rvH6A8NYIg==} + engines: {node: '>=20'} peerDependencies: - '@opentelemetry/api': '*' - '@opentelemetry/exporter-trace-otlp-proto': '*' - '@opentelemetry/sdk-trace-base': '*' - openai: '*' - peerDependenciesMeta: - '@opentelemetry/api': - optional: true - '@opentelemetry/exporter-trace-otlp-proto': - optional: true - '@opentelemetry/sdk-trace-base': - optional: true - openai: - optional: true + '@langchain/core': ^1.2.10 langsmith@0.5.17: resolution: {integrity: sha512-/MEqTL50YH2SUZJtRl4+xI/tIgvu8OG5v6PMALKNkznjIelzf9q9kw0xxj1PC+r/ammMjVD1V2z9JmiT3AMqsQ==} @@ -13562,6 +14353,16 @@ packages: resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==} engines: {node: '>=0.10'} + layout-base@1.0.2: + resolution: {integrity: sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg==} + + layout-base@2.0.1: + resolution: {integrity: sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg==} + + lazystream@1.0.1: + resolution: {integrity: sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==} + engines: {node: '>= 0.6.3'} + leac@0.6.0: resolution: {integrity: sha512-y+SqErxb8h7nE/fiEX07jsbuhrpO9lL8eca7/Y1nuWV2moNlXhyd59iDGcRf6moVyDMbmTNzL40SUyrFU/yDpg==} @@ -13744,6 +14545,9 @@ packages: lit@3.1.0: resolution: {integrity: sha512-rzo/hmUqX8zmOdamDAeydfjsGXbbdtAFqMhmocnh2j9aDYqbu0fjXygjCa0T99Od9VQ/2itwaGrjZz/ZELVl7w==} + lit@3.3.3: + resolution: {integrity: sha512-fycuvZg/hkpozL00lm1pEJH5nN/lr9ZXd6mJI2HSN4+Bzc+LDNdEApJ6HFbPkdFNHLvOplIIuJvxkS4XUxqirw==} + load-esm@1.0.3: resolution: {integrity: sha512-v5xlu8eHD1+6r8EHTg6hfmO97LN8ugKtiXcy5e6oN72iD2r6u0RPfLl6fxM+7Wnh2ZRq15o0russMst44WauPA==} engines: {node: '>=13.2.0'} @@ -13904,10 +14708,6 @@ packages: lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} - lru-cache@11.2.7: - resolution: {integrity: sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA==} - engines: {node: 20 || >=22} - lru-cache@11.3.5: resolution: {integrity: sha512-NxVFwLAnrd9i7KUBxC4DrUhmgjzOs+1Qm50D3oF1/oL+r1NpZ4gA7xvG0/zJ8evR7zIKn4vLf7qTNduWFtCrRw==} engines: {node: 20 || >=22} @@ -13931,11 +14731,24 @@ packages: peerDependencies: react: 19.2.4 - lucide-react@1.31.0: - resolution: {integrity: sha512-G8u2eEtoHUnUa9f8lbvqDhCiORMnYLdUEo06EEG9MQvHQrInKcX3Pa2TH39MM5qyzRcWETxB0+aOwAPI1g1kEg==} + lucide-react@0.525.0: + resolution: {integrity: sha512-Tm1txJ2OkymCGkvwoHt33Y2JpN5xucVq1slHcgE6Lk0WjDfjgKWor5CdVER8U6DvcfMwh4M8XxmpTiyzfmfDYQ==} + peerDependencies: + react: 19.2.4 + + lucide-react@0.542.0: + resolution: {integrity: sha512-w3hD8/SQB7+lzU2r4VdFyzzOzKnUjTZIF/MQJGSSvni7Llewni4vuViRppfRAa2guOsY5k4jZyxw/i9DQHv+dw==} + peerDependencies: + react: 19.2.4 + + lucide-react@1.47.0: + resolution: {integrity: sha512-o8C23aXpNQypRY73W7fW02EyvWJinEMXgKeGjFoKym0zj3Q73hD97A1IQps1g8C14HTGsOpZL0Am+xjfgFZAbg==} peerDependencies: react: 19.2.4 + lucide@0.525.0: + resolution: {integrity: sha512-sfehWlaE/7NVkcEQ4T9JD3eID8RNMIGJBBUq9wF3UFiJIrcMKRbU3g1KGfDk4svcW7yw8BtDLXaXo02scDtUYQ==} + luxon@3.7.2: resolution: {integrity: sha512-vtEhXh/gNjI9Yg1u4jX/0YVPMvxzHuGgCm6tC5kZyb08yjGWGnqAjGJvcXbqQR2P3MyMEFnRbpcdFS6PBcLqew==} engines: {node: '>=12'} @@ -13974,16 +14787,25 @@ packages: markdown-table@3.0.4: resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==} + marked@12.0.2: + resolution: {integrity: sha512-qXUm7e/YKFoqFPYPa3Ukg9xlI5cyAtGmyEIzMfW//m6kXwCy2Ps9DYf5ioijFKQ8qyuscrHoY04iJGctu2Kg0Q==} + engines: {node: '>= 18'} + hasBin: true + + marked@16.4.2: + resolution: {integrity: sha512-TI3V8YYWvkVf3KJe1dRkpnjs68JUPyEa5vjKrp1XEEJUAOaQc+Qj+L1qWbPd0SJuAdQkFU0h73sXXqwDYxsiDA==} + engines: {node: '>= 20'} + hasBin: true + marky@1.3.0: resolution: {integrity: sha512-ocnPZQLNpvbedwTy9kNrQEsknEfgvcLMvOtz3sFeWApDq1MXH1TqkCIx58xlpESsfwQOnuBO9beyQuNGzVvuhQ==} - mastra@1.3.19: - resolution: {integrity: sha512-ZN1ZQ4mjK2t9KNdD/kSBNr4m2TlEfcbGxWGHtnVQ5bU6Vn0YywCDhESEa+4djIVO88jkqb+8ETFavsTiCecLsg==} + mastra@1.30.0: + resolution: {integrity: sha512-fed0N9+0PuXfit8lEDDk+EP3amwczgon6W1EVlXV5ZB7ZyJyz+dzzcRh1TIeugVls34zBJvRjgbaqy0v6IJXlA==} engines: {node: '>=22.13.0'} hasBin: true peerDependencies: - '@mastra/core': '>=1.1.0-0 <2.0.0-0' - zod: ^3.25.0 || ^4.0.0 + '@mastra/core': '>=1.50.0-0 <2.0.0-0' material-icons@1.13.14: resolution: {integrity: sha512-kZOfc7xCC0rAT8Q3DQixYAeT+tBqZnxkseQtp2bxBxz7q5pMAC+wmit7vJn1g/l7wRU+HEPq23gER4iPjGs5Cg==} @@ -14121,6 +14943,9 @@ packages: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} + mermaid@11.17.2: + resolution: {integrity: sha512-V6K3C8EBdEsPFZXSKMJe6ppQOENxuHARr9GvHX4hh47lAbhMRD9qf4oEK7LoaRQxULMa80/qt5gHO73aCleBBg==} + methods@1.1.2: resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} engines: {node: '>= 0.6'} @@ -14189,6 +15014,35 @@ packages: micromark-core-commonmark@2.0.3: resolution: {integrity: sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==} + micromark-extension-cjk-friendly-gfm-strikethrough@1.2.3: + resolution: {integrity: sha512-gSPnxgHDDqXYOBvQRq6lerrq9mjDhdtKn+7XETuXjxWcL62yZEfUdA28Ml1I2vDIPfAOIKLa0h2XDSGkInGHFQ==} + engines: {node: '>=16'} + peerDependencies: + micromark: ^4.0.0 + micromark-util-types: ^2.0.0 + peerDependenciesMeta: + micromark-util-types: + optional: true + + micromark-extension-cjk-friendly-util@2.1.1: + resolution: {integrity: sha512-egs6+12JU2yutskHY55FyR48ZiEcFOJFyk9rsiyIhcJ6IvWB6ABBqVrBw8IobqJTDZ/wdSr9eoXDPb5S2nW1bg==} + engines: {node: '>=16'} + peerDependencies: + micromark-util-types: '*' + peerDependenciesMeta: + micromark-util-types: + optional: true + + micromark-extension-cjk-friendly@1.2.3: + resolution: {integrity: sha512-gRzVLUdjXBLX6zNPSnHGDoo+ZTp5zy+MZm0g3sv+3chPXY7l9gW+DnrcHcZh/jiPR6MjPKO4AEJNp4Aw6V9z5Q==} + engines: {node: '>=16'} + peerDependencies: + micromark: ^4.0.0 + micromark-util-types: ^2.0.0 + peerDependenciesMeta: + micromark-util-types: + optional: true + micromark-extension-gfm-autolink-literal@2.1.0: resolution: {integrity: sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==} @@ -14635,15 +15489,6 @@ packages: resolution: {integrity: sha512-hAWn8Hh2eewpB5McXR5EW81R3pR/ziuGhKCF3wFyUVCklanPqrIgMNr7jKCbzXeNVad0nUDfWpFRqh2u+zxQtw==} engines: {node: '>= 18.0.0'} - nice-grpc-client-middleware-retry@3.1.13: - resolution: {integrity: sha512-Q9I/wm5lYkDTveKFirrTHBkBY137yavXZ4xQDXTPIycUp7aLXD8xPTHFhqtAFWUw05aS91uffZZRgdv3HS0y/g==} - - nice-grpc-common@2.0.2: - resolution: {integrity: sha512-7RNWbls5kAL1QVUOXvBsv1uO0wPQK3lHv+cY1gwkTzirnG1Nop4cBJZubpgziNbaVc/bl9QJcyvsf/NQxa3rjQ==} - - nice-grpc@2.1.14: - resolution: {integrity: sha512-GK9pKNxlvnU5FAdaw7i2FFuR9CqBspcE+if2tqnKXBcE0R8525wj4BZvfcwj7FjvqbssqKxRHt2nwedalbJlww==} - no-case@3.0.4: resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} @@ -14840,6 +15685,10 @@ packages: resolution: {integrity: sha512-szyd0ou0T8nsAqHtprRcP3WidfsN1TnAR5yWXf2mFCEr5ek3LEOkT6EZ/92Xfs74HIdyhG5WkGxIssMU0jBaeg==} engines: {node: '>=16'} + obug@2.2.1: + resolution: {integrity: sha512-XrsrhT5sybtKI6wakr2SPOlGZWWYbUXZ7a0jT8/QOeAPau+1X/bSegNe5YR75oJmEZQbKningirmGOEJCIk61Q==} + engines: {node: '>=12.20.0'} + ofetch@1.5.1: resolution: {integrity: sha512-2W4oUZlVaqAPAil6FUg/difl6YhqhUR7x2eZY4bQCko22UXg3hptq9KLQdqFClV+Wu85UX7hNtdGTngi/1BxcA==} @@ -14869,34 +15718,16 @@ packages: resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} engines: {node: '>=6'} + oniguruma-parser@0.12.2: + resolution: {integrity: sha512-6HVa5oIrgMC6aA6WF6XyyqbhRPJrKR02L20+2+zpDtO5QAzGHAUGw5TKQvwi5vctNnRHkJYmjAhRVQF2EKdTQw==} + + oniguruma-to-es@4.3.6: + resolution: {integrity: sha512-csuQ9x3Yr0cEIs/Zgx/OEt9iBw9vqIunAPQkx19R/fiMq2oGVTgcMqO/V3Ybqefr1TBvosI6jU539ksaBULJyA==} + open@7.4.2: resolution: {integrity: sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==} engines: {node: '>=8'} - openai@4.104.0: - resolution: {integrity: sha512-p99EFNsA/yX6UhVO93f5kJsDRLAg+CTA2RBqdHK4RtK8u5IJw32Hyb2dTGKbnnFmnuoBv5r7Z2CURI9sGZpSuA==} - hasBin: true - peerDependencies: - ws: ^8.18.0 - zod: ^3.23.8 - peerDependenciesMeta: - ws: - optional: true - zod: - optional: true - - openai@5.23.2: - resolution: {integrity: sha512-MQBzmTulj+MM5O8SKEk/gL8a7s5mktS9zUtAkU257WjvobGc9nKcBuVwjyEEcb9SI8a8Y2G/mzn3vm9n1Jlleg==} - hasBin: true - peerDependencies: - ws: ^8.18.0 - zod: ^3.23.8 - peerDependenciesMeta: - ws: - optional: true - zod: - optional: true - openai@6.27.0: resolution: {integrity: sha512-osTKySlrdYrLYTt0zjhY8yp0JUBmWDCN+Q+QxsV4xMQnnoVFpylgKGgxwN8sSdTNw0G4y+WUXs4eCMWpyDNWZQ==} hasBin: true @@ -14921,9 +15752,15 @@ packages: zod: optional: true + openapi-fetch@0.17.0: + resolution: {integrity: sha512-PsbZR1wAPcG91eEthKhN+Zn92FMHxv+/faECIwjXdxfTODGSGegYv0sc1Olz+HYPvKOuoXfp+0pA2XVt2cI0Ig==} + openapi-types@12.1.3: resolution: {integrity: sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==} + openapi-typescript-helpers@0.1.0: + resolution: {integrity: sha512-OKTGPthhivLw/fHz6c3OPtg72vi86qaMlqbJuVJ23qOvQ+53uw1n7HdmkJFibloF7QEjDrDkzJiOJuockM/ljw==} + openapi3-ts@3.2.0: resolution: {integrity: sha512-/ykNWRV5Qs0Nwq7Pc0nJ78fgILvOT/60OxEmB3v7yQ8a8Bwcm43D4diaYazG/KBn6czA+52XYy931WFLMCUeSg==} @@ -14954,14 +15791,6 @@ packages: typescript: optional: true - ox@0.4.4: - resolution: {integrity: sha512-oJPEeCDs9iNiPs6J0rTx+Y0KGeCGyCAA3zo94yZhm8G5WpOxrwUtn2Ie/Y8IyARSqqY/j9JTKA3Fc1xs1DvFnw==} - peerDependencies: - typescript: '>=5.4.0' - peerDependenciesMeta: - typescript: - optional: true - ox@0.6.7: resolution: {integrity: sha512-17Gk/eFsFRAZ80p5eKqv89a57uXjd3NgIf1CaXojATPBuujVc/fQSVhBeAU9JCRB+k7J50WQAyWTxK19T9GgbA==} peerDependencies: @@ -15057,6 +15886,9 @@ packages: package-json-from-dist@1.0.1: resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + package-manager-detector@1.8.0: + resolution: {integrity: sha512-yQA4H19AmPEoMUeavPMDIe1higySl/gH/yaQrkT/s07Qp+7pp2hYz30N3z2l5BkjVkF9Ow6o0wjJamm2y7Sn0A==} + pako@0.2.9: resolution: {integrity: sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==} @@ -15074,9 +15906,6 @@ packages: resolution: {integrity: sha512-fIYNuZ/HastSb80baGOuPRo1O9cf4baWw5WsAp7dBuUzeTD/BoaG8sVTdlPFksBE2lF21dN+A1AnrpIjSWqHHg==} engines: {node: '>= 0.10'} - parse-entities@2.0.0: - resolution: {integrity: sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==} - parse-entities@4.0.2: resolution: {integrity: sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==} @@ -15122,6 +15951,9 @@ packages: path-case@3.0.4: resolution: {integrity: sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg==} + path-data-parser@0.1.0: + resolution: {integrity: sha512-NOnmBpt5Y2RWbuv0LMzsayp3lVylAHLPUTut412ZA3l+C4uw4ZVkQbjShYCQ8TCpUMdPapr4YjUqLYD6v68j+w==} + path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} @@ -15207,30 +16039,36 @@ packages: performance-now@2.1.0: resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==} - pg-cloudflare@1.3.0: - resolution: {integrity: sha512-6lswVVSztmHiRtD6I8hw4qP/nDm1EJbKMRhf3HCYaqud7frGysPv7FYJ5noZQdhQtN2xJnimfMtvQq21pdbzyQ==} + pg-cloudflare@1.4.0: + resolution: {integrity: sha512-Vo7z/6rrQYxpNRylp4Tlob2elzbh+N/MOQbxFVWCxS7oEx6jF53GTJFxK2WWpKuBRkmiin4Mt+xofFDjx09R0A==} pg-connection-string@2.12.0: resolution: {integrity: sha512-U7qg+bpswf3Cs5xLzRqbXbQl85ng0mfSV/J0nnA31MCLgvEaAo7CIhmeyrmJpOr7o+zm0rXK+hNnT5l9RHkCkQ==} + pg-connection-string@2.14.0: + resolution: {integrity: sha512-XwWDGcLRGCXAR8F/AM5bG7Q+A3Wm2s6QeEjlOKZLlH3UYcguiqCWKyWXVag5TLTIjR7oOJUY8kcADaZgWPyLeg==} + pg-int8@1.0.1: resolution: {integrity: sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==} engines: {node: '>=4.0.0'} - pg-pool@3.13.0: - resolution: {integrity: sha512-gB+R+Xud1gLFuRD/QgOIgGOBE2KCQPaPwkzBBGC9oG69pHTkhQeIuejVIk3/cnDyX39av2AxomQiyPT13WKHQA==} + pg-pool@3.14.0: + resolution: {integrity: sha512-gKtPkFdQPU3DksooVLi9LsjZxrsBUZIpa+7aVx+LV5pNh0KzP4Zleud2po+ConrxbuXGBJ6Hfer6hdgpIBpBaw==} peerDependencies: pg: '>=8.0' pg-protocol@1.13.0: resolution: {integrity: sha512-zzdvXfS6v89r6v7OcFCHfHlyG/wvry1ALxZo4LqgUoy7W9xhBDMaqOuMiF3qEV45VqsN6rdlcehHrfDtlCPc8w==} + pg-protocol@1.16.0: + resolution: {integrity: sha512-sILXutLVjCLjcDuOmvhX5e2Z4cS5qG/6Bu3VkpFwdf/633ElGLpEh9bgmuI5I4sqKqkifQiGyiCcx1HdtrK7tg==} + pg-types@2.2.0: resolution: {integrity: sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==} engines: {node: '>=4'} - pg@8.20.0: - resolution: {integrity: sha512-ldhMxz2r8fl/6QkXnBD3CR9/xg694oT6DZQ2s6c/RI28OjtSOpxnPrUCGOBJ46RCUxcWdx3p6kw/xnDHjKvaRA==} + pg@8.23.0: + resolution: {integrity: sha512-Ip2EQCngowJLGOfCwkFhPXU7/ljlhn6Rxlmy4XYfL2Y+vyRM59+8uR2xqRWKdYmbXmxCFOAmKxBuSUCdF34qLg==} engines: {node: '>= 16.0.0'} peerDependencies: pg-native: '>=3.0.1' @@ -15241,6 +16079,9 @@ packages: pgpass@1.0.5: resolution: {integrity: sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==} + phoenix@1.8.14: + resolution: {integrity: sha512-erAGbssrbK7xe4l/tWXZTdsstCY+ufGTt/Kdin4uwceaP2TVqSL6v4s3flQOvIxShpwQx2/8NcOcBXOqgQ+ltw==} + picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} @@ -15248,10 +16089,6 @@ packages: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} - picomatch@4.0.3: - resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} - engines: {node: '>=12'} - picomatch@4.0.4: resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==} engines: {node: '>=12'} @@ -15341,6 +16178,12 @@ packages: resolution: {integrity: sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==} engines: {node: '>=10.13.0'} + points-on-curve@0.2.0: + resolution: {integrity: sha512-0mYKnYYe9ZcqMCWhUjItv/oHjvgEsfKvnUTg8sAtnHr3GVy7rGkXCb6d5cSyqrWqL4k81b9CPg3urd+T7aop3A==} + + points-on-path@0.2.1: + resolution: {integrity: sha512-25ClnWWuw7JbWZcgqY/gJ4FQWadKxGWk+3kR/7kD0tCaDtPPMj7oHu2ToLaVhfpnHrZzYby2w6tUA0eOIuUg8g==} + polotno@3.0.0-beta.25: resolution: {integrity: sha512-r1MyrHQ7lpQ7zNflXLfNbCZP1kYAtstiA2ez1GAu05goxg7TTnNGyT0Q8PYF/G3PpKoompAS7CXrUq5tXWdRWw==} peerDependencies: @@ -15433,9 +16276,14 @@ packages: posthog-js@1.359.1: resolution: {integrity: sha512-Gy/eX02im6ON0zMxfTR61GNk1sjgLT9rVGfBQ5C757/WS4mN3vTUJveQYoX9jr3y0pqPZ57DqCcf6zcw++bpzQ==} - posthog-node@5.17.2: - resolution: {integrity: sha512-lz3YJOr0Nmiz0yHASaINEDHqoV+0bC3eD8aZAG+Ky292dAnVYul+ga/dMX8KCBXg8hHfKdxw0SztYD5j6dgUqQ==} - engines: {node: '>=20'} + posthog-node@5.52.4: + resolution: {integrity: sha512-P3p4OouGQfw/ouv+Px4gcVWLNwYsFB4JPyksYmxv7QRX4niwp1/C9XjQSUyl0nt+KoQnK14zFDfONHWVthwKDA==} + engines: {node: ^20.20.0 || >=22.22.0} + peerDependencies: + rxjs: ^7.0.0 + peerDependenciesMeta: + rxjs: + optional: true preact@10.28.4: resolution: {integrity: sha512-uKFfOHWuSNpRFVTnljsCluEFq57OKT+0QdOiQo8XWnQ/pSvg7OpX5eNOejELXJMWy+BwM2nobz0FkvzmnpCNsQ==} @@ -15449,11 +16297,6 @@ packages: engines: {node: '>=10.13.0'} hasBin: true - prettier@3.8.1: - resolution: {integrity: sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==} - engines: {node: '>=14'} - hasBin: true - pretty-bytes@6.1.1: resolution: {integrity: sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ==} engines: {node: ^14.13.1 || >=16.0.0} @@ -15480,10 +16323,6 @@ packages: typescript: optional: true - prismjs@1.27.0: - resolution: {integrity: sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA==} - engines: {node: '>=6'} - prismjs@1.30.0: resolution: {integrity: sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==} engines: {node: '>=6'} @@ -15532,9 +16371,6 @@ packages: property-expr@2.0.6: resolution: {integrity: sha512-SVtmxhRE/CGkn3eZY1T6pC8Nln6Fr/lu1mKSgRud0eC73whjGfoAogbn78LkD8aFL0zz3bAFerKSnOl7NlErBA==} - property-information@5.6.0: - resolution: {integrity: sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==} - property-information@6.5.0: resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==} @@ -15756,10 +16592,6 @@ packages: resolution: {integrity: sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==} engines: {node: '>= 0.10'} - rc@1.2.8: - resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} - hasBin: true - react-colorful@5.6.1: resolution: {integrity: sha512-1exovf0uGTGyq5mXQT0zgQ80uvj2PCwvF8zY1RN9/vbJVSjSo3fsB/4L3ObbF7u70NduSiK4xu4Y6q1MHoUGEw==} peerDependencies: @@ -15984,8 +16816,9 @@ packages: '@types/react': optional: true - react-syntax-highlighter@15.6.6: - resolution: {integrity: sha512-DgXrc+AZF47+HvAPEmn7Ua/1p10jNoVZVI/LoPiYdtY+OM+/nG5yefLHKJwdKqY1adMuHFbeyBaG9j64ML7vTw==} + react-syntax-highlighter@16.1.1: + resolution: {integrity: sha512-PjVawBGy80C6YbC5DDZJeUjBmC7skaoEUdvfFQediQHgCL7aKyVHe57SaJGfQsloGDac+gCpTfRdtxzWWKmCXA==} + engines: {node: '>= 16.20.2'} peerDependencies: react: 19.2.4 @@ -16053,6 +16886,10 @@ packages: resolution: {integrity: sha512-9nX56alTf5bwXQ3ZDipHJhusu9NTQJ/CVPtb/XHAJCXihZeitfJvIRS4GqQ/mfIoOE3IelHMrpayVrosdHBuLw==} engines: {node: '>=8'} + readdir-glob@3.0.0: + resolution: {integrity: sha512-AhNB2KgKeVJr16nK9LLZbJNWnYoT23ZrumNKFDebHBdkC8KHSqWo871JAUhoWC/RtjEVdqNMFpM6qrwRbaUqpw==} + engines: {node: '>=18'} + readdirp@3.6.0: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} @@ -16094,9 +16931,6 @@ packages: resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} engines: {node: '>= 0.4'} - refractor@3.6.0: - resolution: {integrity: sha512-MY9W41IOWxxk31o+YvFCNyNzdkc9M20NoZK5vq6jkv4I/uh2zkWcfudj0Q1fovjUQJrNewS9NMzeTtqPf+n5EA==} - refractor@4.9.0: resolution: {integrity: sha512-nEG1SPXFoGGx+dcjftjv8cAjEusIh6ED1xhf5DG3C0x/k+rmZ2duKnc3QLpt6qeHv5fPb8uwN3VWN2BT7fr3Og==} @@ -16113,6 +16947,15 @@ packages: regenerator-runtime@0.13.11: resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} + regex-recursion@6.0.2: + resolution: {integrity: sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==} + + regex-utilities@2.3.0: + resolution: {integrity: sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==} + + regex@6.1.0: + resolution: {integrity: sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg==} + regexp.prototype.flags@1.5.4: resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} engines: {node: '>= 0.4'} @@ -16121,13 +16964,6 @@ packages: resolution: {integrity: sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA==} engines: {node: '>=4'} - registry-auth-token@3.3.2: - resolution: {integrity: sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==} - - registry-url@3.1.0: - resolution: {integrity: sha512-ZbgR5aZEdf4UKZVBPYIgaglBmSF2Hi94s2PcIHhRGFjKYu+chjJdYfHn4rt3hB6eCKLJ8giVIIfgMa1ehDfZKA==} - engines: {node: '>=0.10.0'} - regjsgen@0.8.0: resolution: {integrity: sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==} @@ -16142,10 +16978,16 @@ packages: rehype-autolink-headings@7.1.0: resolution: {integrity: sha512-rItO/pSdvnvsP4QRB1pmPiNHUskikqtPojZKJPPPAVx9Hj8i8TwMBhofrrAYRhYOOBZH9tgmG5lPqDLuIWPWmw==} + rehype-harden@1.1.8: + resolution: {integrity: sha512-Qn7vR1xrf6fZCrkm9TDWi/AB4ylrHy+jqsNm1EHOAmbARYA6gsnVJBq/sdBh6kmT4NEZxH5vgIjrscefJAOXcw==} + rehype-ignore@2.0.3: resolution: {integrity: sha512-IzhP6/u/6sm49sdktuYSmeIuObWB+5yC/5eqVws8BhuGA9kY25/byz6uCy/Ravj6lXUShEd2ofHM5MyAIj86Sg==} engines: {node: '>=16'} + rehype-katex@7.0.1: + resolution: {integrity: sha512-OiM2wrZ/wuhKkigASodFoo8wimG3H12LWQaH8qSPVJn9apWKFSH3YOCtbKpBorTVw/eI7cuT21XBbvwEswbIOA==} + rehype-parse@9.0.1: resolution: {integrity: sha512-ksCzCD0Fgfh7trPDxr2rSylbwq9iYDkSn8TCDmEJ49ljEUBxDVCzCHv7QNzZOfODanX4+bWQ4WZqLCRWYLfhag==} @@ -16162,6 +17004,9 @@ packages: resolution: {integrity: sha512-L/FO96EOzSA6bzOam4DVu61/PB3AGKcSPXpa53yMIozoxH4qg1+bVZDF8zh1EsuxtSauAhzt5cCnvoplAaSLrw==} engines: {node: '>=16.0.0'} + rehype-sanitize@6.0.0: + resolution: {integrity: sha512-CsnhKNsyI8Tub6L4sm5ZFsme4puGfc6pYylvXo1AeqaGbjOYyzNv3qZPwvs0oMJ39eryyeOdmxwUIo94IpEhqg==} + rehype-slug@6.0.0: resolution: {integrity: sha512-lWyvf/jwu+oS5+hL5eClVd3hNdmwM1kAC0BUvEGD19pajQMIzcNUd/k9GsfQ+FfECvX+JE+e9/btsKH0EjJT6A==} @@ -16171,6 +17016,26 @@ packages: rehype@13.0.2: resolution: {integrity: sha512-j31mdaRFrwFRUIlxGeuPXXKWQxet52RBQRvCmzl5eCefn/KGbomK5GMHNMsOJf55fgo3qw5tST5neDuarDYR2A==} + remark-cjk-friendly-gfm-strikethrough@1.2.3: + resolution: {integrity: sha512-bXfMZtsaomK6ysNN/UGRIcasQAYkC10NtPmP0oOHOV8YOhA2TXmwRXCku4qOzjIFxAPfish5+XS0eIug2PzNZA==} + engines: {node: '>=16'} + peerDependencies: + '@types/mdast': ^4.0.0 + unified: ^11.0.0 + peerDependenciesMeta: + '@types/mdast': + optional: true + + remark-cjk-friendly@1.2.3: + resolution: {integrity: sha512-UvAgxwlNk+l9Oqgl/9MWK2eWRS7zgBW/nXX9AthV7nd/3lNejF138E7Xbmk9Zs4WjTJGs721r7fAEc7tNFoH7g==} + engines: {node: '>=16'} + peerDependencies: + '@types/mdast': ^4.0.0 + unified: ^11.0.0 + peerDependenciesMeta: + '@types/mdast': + optional: true + remark-gfm@4.0.1: resolution: {integrity: sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==} @@ -16196,6 +17061,12 @@ packages: remark-stringify@11.0.0: resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==} + remend@1.0.1: + resolution: {integrity: sha512-152puVH0qMoRJQFnaMG+rVDdf01Jq/CaED+MBuXExurJgdbkLp0c3TIe4R12o28Klx8uyGsjvFNG05aFG69G9w==} + + remend@1.3.1: + resolution: {integrity: sha512-N3DiY5qbRPoa5vkxn1oDLMyXOVTeo6Hp+XOj6SIqJAYUgLS0Q587gILPMom/qm86AQ/ZrcOdwEIzCz8V3J0nxQ==} + remove-markdown@0.5.5: resolution: {integrity: sha512-lMR8tOtDqazFT6W2bZidoXwkptMdF3pCxpri0AEokHg0sZlC2GdoLqnoaxsEj1o7/BtXV1MKtT3YviA1t7rW7g==} @@ -16308,6 +17179,9 @@ packages: resolution: {integrity: sha512-5Di9UC0+8h1L6ZD2d7awM7E/T4uA1fJRlx6zk/NvdCCVEoAnFqvHmCuNeIKoCeIixBX/q8uM+6ycDvF8woqosA==} engines: {node: '>= 0.8'} + robust-predicates@3.0.3: + resolution: {integrity: sha512-NS3levdsRIUOmiJ8FZWCP7LG3QpJyrs/TE0Zpf1yvZu8cAJJ6QMW92H1c7kWpdIHo8RvmLxN/o2JXTKHp74lUA==} + rolldown@1.2.4: resolution: {integrity: sha512-rSr7irW0K7QRWzjdJXqZowkcRdDtjRduh43rBltnVKd0VFq839l1lJoDvGJb6gl7+4rTTCrPWu+YfujUL8Ug7w==} engines: {node: ^20.19.0 || >=22.12.0} @@ -16330,9 +17204,17 @@ packages: engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true + rollup@4.63.3: + resolution: {integrity: sha512-1i2XreiAoMMXuPGD6Msj2xWrMMkHojNRKivInxGQcg7/1KuPuYlfUutLyh4drnOxUTHX9cHI4wFoat8D/NKaBw==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + rope-sequence@1.3.4: resolution: {integrity: sha512-UT5EDe2cu2E/6O4igUr5PSFs23nvvukicWHx6GnOPlHAiiYbzNuCRQCuiUdHJQcqKalLKlrYJnjY0ySGsXNQXQ==} + roughjs@4.6.6: + resolution: {integrity: sha512-ZUz/69+SYpFN/g/lUlo2FXcIjRkSu3nDarreVdGGndHEBJ6cXPdKguS8JGxwj5HA5xIbVKSmLgr5b3AWxtRfvQ==} + router@2.2.0: resolution: {integrity: sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==} engines: {node: '>= 18'} @@ -16357,6 +17239,9 @@ packages: run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + rw@1.3.3: + resolution: {integrity: sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==} + rxjs@6.6.7: resolution: {integrity: sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==} engines: {npm: '>=2.0.0'} @@ -16503,11 +17388,6 @@ packages: resolution: {integrity: sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==} engines: {node: '>= 18'} - serve@14.2.6: - resolution: {integrity: sha512-QEjUSA+sD4Rotm1znR8s50YqA3kYpRGPmtd5GlFxbaL9n/FdUNbqMhxClqdditSk0LlZyA/dhud6XNRTOC9x2Q==} - engines: {node: '>= 14'} - hasBin: true - server-only@0.0.1: resolution: {integrity: sha512-qepMx2JxAa5jjfzxG79yPPq+8BuFToHd1hm7kI+Z4zAq1ftQiP7HcxMhDDItrbtwVeLg/cY2JnKnrcFkmiswNA==} @@ -16573,6 +17453,9 @@ packages: resolution: {integrity: sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==} engines: {node: '>= 0.4'} + shiki@3.23.0: + resolution: {integrity: sha512-55Dj73uq9ZXL5zyeRPzHQsK7Nbyt6Y10k5s7OjuFZGMhpp4r/rsLBH0o/0fstIzX1Lep9VxefWljK/SKCzygIA==} + side-channel-list@1.0.0: resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} engines: {node: '>= 0.4'} @@ -16618,9 +17501,6 @@ packages: resolution: {integrity: sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==} engines: {node: '>=10'} - simple-wcswidth@1.1.2: - resolution: {integrity: sha512-j7piyCjAeTDSjzTSQ7DokZtMNwNlEAyxqSZeCS+CXH7fJ4jx3FuJ/mTW3mE+6JLs4VJBbcll0Kjn+KXI5t21Iw==} - sirv@2.0.4: resolution: {integrity: sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==} engines: {node: '>= 10'} @@ -16723,9 +17603,6 @@ packages: resolution: {integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==} engines: {node: '>= 12'} - space-separated-tokens@1.1.5: - resolution: {integrity: sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==} - space-separated-tokens@2.0.2: resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} @@ -16802,14 +17679,25 @@ packages: stream-shift@1.0.3: resolution: {integrity: sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==} + streamdown@1.6.11: + resolution: {integrity: sha512-Y38fwRx5kCKTluwM+Gf27jbbi9q6Qy+WC9YrC1YbCpMkktT3PsRBJHMWiqYeF8y/JzLpB1IzDoeaB6qkQEDnAA==} + peerDependencies: + react: 19.2.4 + streamsearch@1.1.0: resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} engines: {node: '>=10.0.0'} + streamx@2.28.1: + resolution: {integrity: sha512-zEzXb0s5Cds7tqMH6rhZ05lcJydCWiQPEwiNngVqzsxCc962vLY4Uw+mW7od8kDH258k2Uz/JrOkdIAAhSh9VA==} + strict-uri-encode@2.0.0: resolution: {integrity: sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==} engines: {node: '>=4'} + strictdom@1.0.1: + resolution: {integrity: sha512-cEmp9QeXXRmjj/rVp9oyiqcvyocWab/HaoN4+bwFeZ7QzykJD6L3yD4v12K1x0tHpqRqVpJevN3gW7kyM39Bqg==} + string-length@4.0.2: resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} engines: {node: '>=10'} @@ -16886,10 +17774,6 @@ packages: resolution: {integrity: sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==} engines: {node: '>=18'} - strip-json-comments@2.0.1: - resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} - engines: {node: '>=0.10.0'} - strip-json-comments@3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} @@ -17042,6 +17926,9 @@ packages: tailwind-merge@1.14.0: resolution: {integrity: sha512-3mFKyCo/MBcgyOTlrY8T7odzZFx+w+qKSMAmdFzRvqBfLlSigU6TZnlFHK0lkMwj9Bj8OYU+9yW9lmGuS0QEnQ==} + tailwind-merge@3.7.0: + resolution: {integrity: sha512-XPPUyAc+cvspz3lHTcR/QgPfW2A0lv/xQNIjX3HGhLR+Nq2lHaLq5MtTesHn8GUr3W3DguT2KT5x3NVgRtYwmA==} + tailwind-scrollbar@3.1.0: resolution: {integrity: sha512-pmrtDIZeHyu2idTejfV59SbaJyvp1VRjYxAjZBH0jnyrPRo6HL1kD5Glz8VPagasqr6oAx6M05+Tuw429Z8jxg==} engines: {node: '>=12.13.0'} @@ -17063,11 +17950,17 @@ packages: resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==} engines: {node: '>=6'} + tar-stream@3.2.1: + resolution: {integrity: sha512-nqsEO8zLZJvrOMdEwkA0QdCLFbetHMn95Zqu4fKwX+hkaTWJPZZOrxx/PwtxoK0MMGQmBQNRW3CPs8IFYQz4cQ==} + tar@6.2.1: resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} engines: {node: '>=10'} deprecated: Old versions of tar are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me + teex@1.0.1: + resolution: {integrity: sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg==} + terser-webpack-plugin@5.3.17: resolution: {integrity: sha512-YR7PtUp6GMU91BgSJmlaX/rS2lGDbAF7D+Wtq7hRO+MiljNmodYvqslzCFiYVAgW+Qoaaia/QUIP4lGXufjdZw==} engines: {node: '>= 10.13.0'} @@ -17093,6 +17986,9 @@ packages: resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} engines: {node: '>=8'} + text-decoder@1.2.7: + resolution: {integrity: sha512-vlLytXkeP4xvEq2otHeJfSQIRyWxo/oZGEbXrtEEF9Hnmrdly59sUbzZ/QgyWuLYHctCHxFF4tRQZNQ9k60ExQ==} + text-encoding-utf-8@1.0.2: resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==} @@ -17156,6 +18052,10 @@ packages: tinyexec@0.3.2: resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} + tinyexec@1.3.1: + resolution: {integrity: sha512-GCvB3aoys96IuDFBMcTB46JOR6mdMtAToqwiW8JlWhsoh1mhHi/xn9ss/Dg7N555GiJyEt2qzoG/NHCwM6h1EA==} + engines: {node: '>=18'} + tinyglobby@0.2.15: resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} engines: {node: '>=12.0.0'} @@ -17308,8 +18208,9 @@ packages: peerDependencies: typescript: '>=4.8.4' - ts-error@1.0.6: - resolution: {integrity: sha512-tLJxacIQUM82IR7JO1UUkKlYuUTmoY9HBJAmNWFzheSlDS5SPMcNIepejHJa4BpPQLAcbRhRf3GDJzyj6rbKvA==} + ts-dedent@2.3.0: + resolution: {integrity: sha512-JfJeIHke7y2egdGGgRAvpCwYFUsHlM2gPcrVOxFkznt/4uzQ7HFmvE63iFHVLBJNDuyDOQgijDK/tXH/f6Msjg==} + engines: {node: '>=6.10'} ts-essentials@10.1.1: resolution: {integrity: sha512-4aTB7KLHKmUvkjNj8V+EdnmuVTiECzn3K+zIbRthumvHu+j44x3w63xpfs0JL3NGIzGXqoQ7AV591xHO+XrOTw==} @@ -17406,6 +18307,10 @@ packages: tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + tsscmp@1.0.6: + resolution: {integrity: sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==} + engines: {node: '>=0.6.x'} + tsup@8.5.1: resolution: {integrity: sha512-xtgkqwdhpKWr3tKPmCkvYmS9xnQK3m3XgxZHwSUjvfTjp7YfXe5tT3GgWi0F2N+ZSMsOeWeZFh7ZZFg5iPhing==} engines: {node: '>=18'} @@ -17435,6 +18340,9 @@ packages: resolution: {integrity: sha512-ZLeYmjrkaU1fUsKbIi8JML52uAocjEZtBx4DKjRrqzrZa0O4MYwT6db+oqePlspV+FxXJAyFBc/L5gwUi2OFsg==} engines: {node: '>=18'} + tw-animate-css@1.4.0: + resolution: {integrity: sha512-7bziOlRqH0hJx80h/3mbicLW7o8qLsH5+RaLR2t+OHM3D0JlWGODQKQ4cxbK7WlvmUxpcj6Kgu6EKqjrGFe3QQ==} + tweetnacl@0.14.5: resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==} @@ -17523,10 +18431,10 @@ packages: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.0.0' - typescript-paths@1.5.1: - resolution: {integrity: sha512-lYErSLCON2MSplVV5V/LBgD4UNjMgY3guATdFCZY2q1Nr6OZEu4q6zX/rYMsG1TaWqqQSszg6C9EU7AGWMDrIw==} + typescript-paths@1.5.2: + resolution: {integrity: sha512-s5iiRIWOSw80dBgPACm0asPQZHHQcbPz69f26eRq01dStusuD11idZ0NDcAbkj6WuUGcRwJediPOsrArIS92eg==} peerDependencies: - typescript: ^4.7.2 || ^5 + typescript: ^4.7.2 || ^5 || ^6 typescript@5.5.4: resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==} @@ -17579,6 +18487,14 @@ packages: undici-types@6.21.0: resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} + undici@5.29.0: + resolution: {integrity: sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==} + engines: {node: '>=14.0'} + + undici@6.28.1: + resolution: {integrity: sha512-zWpdTVD54H48CIybL0rWQ3ukpb9d23wM7eH5RtfdmeP70cWHNjtfo7P4vZX+5CoDcO53J4Pu5uXp7lNfjc6DRA==} + engines: {node: '>=18.17'} + undici@7.25.0: resolution: {integrity: sha512-xXnp4kTyor2Zq+J1FfPI6Eq3ew5h6Vl0F/8d9XU5zZQf1tX9s2Su1/3PiMmUANFULpmksxkClamIZcaUqryHsQ==} engines: {node: '>=20.18.1'} @@ -17631,6 +18547,9 @@ packages: unist-util-filter@5.0.1: resolution: {integrity: sha512-pHx7D4Zt6+TsfwylH9+lYhBhzyhEnCXs/lbq/Hstxno5z4gVdyc2WEW0asfjGKPyG4pEKrnBv5hdkO6+aRnQJw==} + unist-util-find-after@5.0.0: + resolution: {integrity: sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==} + unist-util-generated@2.0.1: resolution: {integrity: sha512-qF72kLmPxAw0oN2fwpWIqbXAVyEqUzDHMsbtPvOudIlUzXYFIeQIuxXQCRCFh22B7cixvU0MG7m3MW8FTq/S+A==} @@ -17763,9 +18682,6 @@ packages: peerDependencies: browserslist: '>= 4.21.0' - update-check@1.5.4: - resolution: {integrity: sha512-5YHsflzHP4t1G+8WGPlvKbJEbAJGCgw+Em+dGR1KmBUbr1J36SJBqlHLjR7oob7sco5hWHGQVcr9B2poIVDDTQ==} - upper-case-first@2.0.2: resolution: {integrity: sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==} @@ -17853,6 +18769,11 @@ packages: '@types/react': optional: true + use-stick-to-bottom@1.1.6: + resolution: {integrity: sha512-z3Up8jYQGTkUCsGBnwg6/wj70KgXoW5Kz1AAc1j8MtQuYMBo6ZsdhrIXoegxa7gaMMilgQYyTohTrt3p94jHog==} + peerDependencies: + react: 19.2.4 + use-sync-external-store@1.2.0: resolution: {integrity: sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==} peerDependencies: @@ -17945,6 +18866,10 @@ packages: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} + verkit@0.3.2: + resolution: {integrity: sha512-zj/ob3UsvJGN0whEAKFp53REA5X66hvffVqoCtVQAakJKnKlH+/PcOfMoFwIG/o4rElqLv/ycAFlx8ZlXUorCg==} + engines: {node: '>=18.12.0'} + verror@1.10.0: resolution: {integrity: sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==} engines: {'0': node >=0.6.0} @@ -18135,10 +19060,6 @@ packages: wcwidth@1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} - weaviate-client@3.12.0: - resolution: {integrity: sha512-z61T1WA44meNMbabzQ6GSXWkZyc/wGcC17X8DTB5tPs0ojatwFmdySLtXLzSvvgmIeLn+PI0+7eZgg42XYbAIw==} - engines: {node: '>=20.0.0'} - web-namespaces@2.0.1: resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} @@ -18275,10 +19196,6 @@ packages: wide-align@1.1.5: resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==} - widest-line@4.0.1: - resolution: {integrity: sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==} - engines: {node: '>=12'} - wildcard@1.1.2: resolution: {integrity: sha512-DXukZJxpHA8LuotRwL0pP1+rS6CS7FF2qStDDE1C7DDg2rLud2PXRMuEDYIPhgEezwnlHNL4c+N6MfMTjCGTng==} @@ -18362,8 +19279,8 @@ packages: utf-8-validate: optional: true - ws@8.21.0: - resolution: {integrity: sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==} + ws@8.21.3: + resolution: {integrity: sha512-201TZ/kPWxoPr/OKWjquZR1SWKXcvxdH+e1xrx89b3YbmzLMFCLfnaG1HFIgWzJOEWZ7MvpK++odZufgYR50Rw==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 @@ -18447,6 +19364,11 @@ packages: engines: {node: '>= 14.6'} hasBin: true + yaml@2.9.1: + resolution: {integrity: sha512-3NxN8+78OdzbT7C/WjGsyfPAtJaN3FNDsWxv7Y7mcDsT/oOmgW8BpyQQFFBnvZE3j9Y2Sdz1ULFLezL7Eb2yFw==} + engines: {node: '>= 14.6'} + hasBin: true + yargs-parser@18.1.3: resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} engines: {node: '>=6'} @@ -18486,6 +19408,10 @@ packages: yup@1.7.1: resolution: {integrity: sha512-GKHFX2nXul2/4Dtfxhozv701jLQHdf6J34YDh2cEkpqoo8le5Mg6/LrdseVLrFarmFygZTlfIhHx/QKfb/QWXw==} + zip-stream@7.0.5: + resolution: {integrity: sha512-dSvYKdvLsAHCDqPOhIwk/q5CvuWtTB3Dgpoe0uVEFjTzIOAmsQpprX25InCvrvJsirEbu1OHyy67n/kAj1Sw/w==} + engines: {node: '>=18'} + zod-from-json-schema@0.0.5: resolution: {integrity: sha512-zYEoo86M1qpA1Pq6329oSyHLS785z/mTwfr9V1Xf/ZLhuuBGaMlDGu/pDVGVUe4H4oa1EFgWZT53DP0U3oT9CQ==} @@ -18497,6 +19423,11 @@ packages: peerDependencies: zod: ^3.25 || ^4 + zod-to-json-schema@3.25.2: + resolution: {integrity: sha512-O/PgfnpT1xKSDeQYSCfRI5Gy3hPf91mKVDuYLUHZJMiDFptvP41MSnWofm8dnCm0256ZNfZIM7DSzuSMAFnjHA==} + peerDependencies: + zod: ^3.25.28 || ^4 + zod-validation-error@4.0.2: resolution: {integrity: sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ==} engines: {node: '>=18.0.0'} @@ -18509,8 +19440,8 @@ packages: zod@3.25.76: resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} - zod@4.3.6: - resolution: {integrity: sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==} + zod@4.6.5: + resolution: {integrity: sha512-v5l/aFXZQeai4awLbOpSoHecE9UiMrnfx75tEXLjNonXVARxQ5mOeipTjROUchszUNCqnE+hqAMujRsRHsut2Q==} zustand@5.0.11: resolution: {integrity: sha512-fdZY+dk7zn/vbWNCYmzZULHRrss0jx5pPFiOuMZ/5HJN6Yv3u+1Wswy/4MpZEkEGhtNH+pwxZB8OKgUBPzYAGg==} @@ -18550,13 +19481,46 @@ snapshots: transitivePeerDependencies: - supports-color + '@a2a-js/sdk@0.3.14(@bufbuild/protobuf@2.11.0)(@grpc/grpc-js@1.14.3)(express@5.2.1)': + dependencies: + uuid: 11.1.0 + optionalDependencies: + '@bufbuild/protobuf': 2.11.0 + '@grpc/grpc-js': 1.14.3 + express: 5.2.1 + + '@a2a-js/sdk@1.0.1(@bufbuild/protobuf@2.11.0)(@grpc/grpc-js@1.14.3)(express@5.2.1)': + dependencies: + jose: 6.2.12 + uuid: 11.1.0 + optionalDependencies: + '@bufbuild/protobuf': 2.11.0 + '@grpc/grpc-js': 1.14.3 + express: 5.2.1 + + '@a2ui/web_core@0.10.4': + dependencies: + '@preact/signals-core': 1.14.4 + date-fns: 4.4.0 + zod: 3.25.76 + zod-to-json-schema: 3.25.2(zod@3.25.76) + '@adraffy/ens-normalize@1.11.1': {} - '@ag-ui/client@0.0.47': + '@ag-ui/a2ui-middleware@0.0.10(@ag-ui/client@0.0.59)(rxjs@7.8.1)': + dependencies: + '@ag-ui/a2ui-toolkit': 0.0.4 + '@ag-ui/client': 0.0.59 + clarinet: 0.12.6 + rxjs: 7.8.1 + + '@ag-ui/a2ui-toolkit@0.0.4': {} + + '@ag-ui/client@0.0.59': dependencies: - '@ag-ui/core': 0.0.47 - '@ag-ui/encoder': 0.0.47 - '@ag-ui/proto': 0.0.47 + '@ag-ui/core': 0.0.59 + '@ag-ui/encoder': 0.0.59 + '@ag-ui/proto': 0.0.59 '@types/uuid': 10.0.0 compare-versions: 6.1.1 fast-json-patch: 3.1.1 @@ -18565,27 +19529,23 @@ snapshots: uuid: 11.1.0 zod: 3.25.76 - '@ag-ui/core@0.0.37': - dependencies: - rxjs: 7.8.1 - zod: 3.25.76 - - '@ag-ui/core@0.0.47': + '@ag-ui/core@0.0.59': dependencies: - rxjs: 7.8.1 zod: 3.25.76 - '@ag-ui/encoder@0.0.47': + '@ag-ui/encoder@0.0.59': dependencies: - '@ag-ui/core': 0.0.47 - '@ag-ui/proto': 0.0.47 + '@ag-ui/core': 0.0.59 + '@ag-ui/proto': 0.0.59 - '@ag-ui/langgraph@0.0.24(@ag-ui/client@0.0.47)(@ag-ui/core@0.0.47)(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@ag-ui/langgraph@0.0.43(@ag-ui/client@0.0.59)(@ag-ui/core@0.0.59)(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(ws@8.21.3(bufferutil@4.1.0)(utf-8-validate@5.0.10))': dependencies: - '@ag-ui/client': 0.0.47 - '@ag-ui/core': 0.0.47 - '@langchain/core': 0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76)) - '@langchain/langgraph-sdk': 0.1.10(@langchain/core@0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76)))(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@ag-ui/a2ui-toolkit': 0.0.4 + '@ag-ui/client': 0.0.59 + '@ag-ui/core': 0.0.59 + '@langchain/core': 1.2.11(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.21.3(bufferutil@4.1.0)(utf-8-validate@5.0.10)) + '@langchain/langgraph-sdk': 1.8.8(@langchain/core@1.2.11(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.21.3(bufferutil@4.1.0)(utf-8-validate@5.0.10)))(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + langchain: 1.5.11(@langchain/core@1.2.11(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.21.3(bufferutil@4.1.0)(utf-8-validate@5.0.10)))(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(ws@8.21.3(bufferutil@4.1.0)(utf-8-validate@5.0.10)) partial-json: 0.1.7 rxjs: 7.8.1 transitivePeerDependencies: @@ -18595,31 +19555,67 @@ snapshots: - openai - react - react-dom + - svelte + - vue + - ws - '@ag-ui/mastra@1.0.1(@ag-ui/client@0.0.47)(@ag-ui/core@0.0.47)(@copilotkit/runtime@1.10.6(c5ef6e30f9cb72b0a9db20b1502179b1))(@mastra/client-js@0.15.2(openapi-types@12.1.3)(react@19.2.4)(zod@3.25.76))(@mastra/core@1.21.0(@cfworker/json-schema@4.1.1)(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@3.25.76))(@types/json-schema@7.0.15)(bufferutil@4.1.0)(openapi-types@12.1.3)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76)': + '@ag-ui/mastra@1.1.4(@ag-ui/client@0.0.59)(@ag-ui/core@0.0.59)(@copilotkit/runtime@1.72.0(060090e105863d9983aa04d300df3d3a))(@mastra/client-js@0.15.2(openapi-types@12.1.3)(react@19.2.4)(zod@3.25.76))(@mastra/core@1.67.0(@bufbuild/protobuf@2.11.0)(@grpc/grpc-js@1.14.3)(ai@4.3.19(react@19.2.4)(zod@3.25.76))(bufferutil@4.1.0)(express@5.2.1)(rxjs@7.8.2)(utf-8-validate@5.0.10)(zod@3.25.76))': dependencies: - '@ag-ui/client': 0.0.47 - '@ag-ui/core': 0.0.47 + '@ag-ui/a2ui-toolkit': 0.0.4 + '@ag-ui/client': 0.0.59 + '@ag-ui/core': 0.0.59 '@ai-sdk/ui-utils': 1.2.11(zod@3.25.76) - '@copilotkit/runtime': 1.10.6(c5ef6e30f9cb72b0a9db20b1502179b1) + '@copilotkit/runtime': 1.72.0(060090e105863d9983aa04d300df3d3a) '@mastra/client-js': 0.15.2(openapi-types@12.1.3)(react@19.2.4)(zod@3.25.76) - '@mastra/core': 1.21.0(@cfworker/json-schema@4.1.1)(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@3.25.76))(@types/json-schema@7.0.15)(bufferutil@4.1.0)(openapi-types@12.1.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@mastra/core': 1.67.0(@bufbuild/protobuf@2.11.0)(@grpc/grpc-js@1.14.3)(ai@4.3.19(react@19.2.4)(zod@3.25.76))(bufferutil@4.1.0)(express@5.2.1)(rxjs@7.8.2)(utf-8-validate@5.0.10)(zod@3.25.76) + fast-json-patch: 3.1.1 + rxjs: 7.8.1 + zod: 3.25.76 + + '@ag-ui/mcp-apps-middleware@0.1.1(@ag-ui/client@0.0.59)(@cfworker/json-schema@4.1.1)(rxjs@7.8.1)(zod@3.25.76)': + dependencies: + '@ag-ui/client': 0.0.59 + '@modelcontextprotocol/sdk': 1.30.0(@cfworker/json-schema@4.1.1)(zod@3.25.76) rxjs: 7.8.1 transitivePeerDependencies: + - '@cfworker/json-schema' + - supports-color - zod - '@ag-ui/proto@0.0.47': + '@ag-ui/mcp-middleware@0.0.2(@ag-ui/client@0.0.59)(@cfworker/json-schema@4.1.1)(rxjs@7.8.1)(zod@3.25.76)': dependencies: - '@ag-ui/core': 0.0.47 + '@ag-ui/client': 0.0.59 + '@modelcontextprotocol/sdk': 1.30.0(@cfworker/json-schema@4.1.1)(zod@3.25.76) + rxjs: 7.8.1 + transitivePeerDependencies: + - '@cfworker/json-schema' + - supports-color + - zod + + '@ag-ui/proto@0.0.59': + dependencies: + '@ag-ui/core': 0.0.59 '@bufbuild/protobuf': 2.11.0 '@protobuf-ts/protoc': 2.11.1 + '@ai-sdk/anthropic@2.0.102(zod@3.25.76)': + dependencies: + '@ai-sdk/provider': 2.0.4 + '@ai-sdk/provider-utils': 3.0.37(zod@3.25.76) + zod: 3.25.76 + '@ai-sdk/anthropic@2.0.23(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/anthropic@3.0.118(zod@3.25.76)': + dependencies: + '@ai-sdk/provider': 3.0.16 + '@ai-sdk/provider-utils': 4.0.51(zod@3.25.76) + zod: 3.25.76 + '@ai-sdk/gateway@1.0.33(zod@3.25.76)': dependencies: '@ai-sdk/provider': 2.0.0 @@ -18627,18 +19623,63 @@ snapshots: '@vercel/oidc': 3.2.0 zod: 3.25.76 + '@ai-sdk/gateway@3.0.196(zod@3.25.76)': + dependencies: + '@ai-sdk/provider': 3.0.16 + '@ai-sdk/provider-utils': 4.0.51(zod@3.25.76) + '@vercel/oidc': 3.2.0 + zod: 3.25.76 + + '@ai-sdk/google-vertex@3.0.174(zod@3.25.76)': + dependencies: + '@ai-sdk/anthropic': 2.0.102(zod@3.25.76) + '@ai-sdk/google': 2.0.97(zod@3.25.76) + '@ai-sdk/openai-compatible': 1.0.54(zod@3.25.76) + '@ai-sdk/provider': 2.0.4 + '@ai-sdk/provider-utils': 3.0.37(zod@3.25.76) + google-auth-library: 10.9.1 + zod: 3.25.76 + transitivePeerDependencies: + - supports-color + '@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/google@2.0.97(zod@3.25.76)': + dependencies: + '@ai-sdk/provider': 2.0.4 + '@ai-sdk/provider-utils': 3.0.37(zod@3.25.76) + zod: 3.25.76 + + '@ai-sdk/google@3.0.123(zod@3.25.76)': + dependencies: + '@ai-sdk/provider': 3.0.16 + '@ai-sdk/provider-utils': 4.0.51(zod@3.25.76) + zod: 3.25.76 + + '@ai-sdk/mcp@1.0.81(zod@3.25.76)': + dependencies: + '@ai-sdk/provider': 3.0.16 + '@ai-sdk/provider-utils': 4.0.51(zod@3.25.76) + cross-spawn: 7.0.6 + pkce-challenge: 5.0.1 + 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-compatible@1.0.54(zod@3.25.76)': + dependencies: + '@ai-sdk/provider': 2.0.4 + '@ai-sdk/provider-utils': 3.0.37(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 @@ -18651,6 +19692,12 @@ snapshots: '@ai-sdk/provider-utils': 3.0.22(zod@3.25.76) zod: 3.25.76 + '@ai-sdk/openai@3.0.113(zod@3.25.76)': + dependencies: + '@ai-sdk/provider': 3.0.16 + '@ai-sdk/provider-utils': 4.0.51(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 @@ -18662,28 +19709,45 @@ snapshots: dependencies: '@ai-sdk/provider': 2.0.0 '@standard-schema/spec': 1.1.0 - eventsource-parser: 3.0.6 + eventsource-parser: 3.1.1 zod: 3.25.76 - '@ai-sdk/provider-utils@3.0.20(zod@3.25.76)': + '@ai-sdk/provider-utils@3.0.22(zod@3.25.76)': dependencies: '@ai-sdk/provider': 2.0.1 '@standard-schema/spec': 1.1.0 eventsource-parser: 3.0.6 zod: 3.25.76 - '@ai-sdk/provider-utils@3.0.22(zod@3.25.76)': + '@ai-sdk/provider-utils@3.0.37(zod@3.25.76)': dependencies: - '@ai-sdk/provider': 2.0.1 + '@ai-sdk/provider': 2.0.4 '@standard-schema/spec': 1.1.0 - eventsource-parser: 3.0.6 + eventsource-parser: 3.1.1 + undici: 5.29.0 zod: 3.25.76 - '@ai-sdk/provider-utils@4.0.0(zod@3.25.76)': + '@ai-sdk/provider-utils@4.0.40(zod@3.25.76)': dependencies: - '@ai-sdk/provider': 3.0.0 + '@ai-sdk/provider': 3.0.14 '@standard-schema/spec': 1.1.0 - eventsource-parser: 3.0.6 + eventsource-parser: 3.1.1 + zod: 3.25.76 + + '@ai-sdk/provider-utils@4.0.51(zod@3.25.76)': + dependencies: + '@ai-sdk/provider': 3.0.16 + '@standard-schema/spec': 1.1.0 + eventsource-parser: 3.1.1 + undici: 6.28.1 + zod: 3.25.76 + + '@ai-sdk/provider-utils@5.0.13(zod@3.25.76)': + dependencies: + '@ai-sdk/provider': 4.0.4 + '@standard-schema/spec': 1.1.0 + '@workflow/serde': 4.1.0 + eventsource-parser: 3.1.1 zod: 3.25.76 '@ai-sdk/provider@1.1.3': @@ -18698,11 +19762,23 @@ snapshots: dependencies: json-schema: 0.4.0 - '@ai-sdk/provider@3.0.0': + '@ai-sdk/provider@2.0.3': + dependencies: + json-schema: 0.4.0 + + '@ai-sdk/provider@2.0.4': + dependencies: + json-schema: 0.4.0 + + '@ai-sdk/provider@3.0.14': + dependencies: + json-schema: 0.4.0 + + '@ai-sdk/provider@3.0.16': dependencies: json-schema: 0.4.0 - '@ai-sdk/provider@3.0.5': + '@ai-sdk/provider@4.0.4': dependencies: json-schema: 0.4.0 @@ -18770,6 +19846,11 @@ snapshots: transitivePeerDependencies: - chokidar + '@antfu/install-pkg@2.1.0': + dependencies: + package-manager-detector: 1.8.0 + tinyexec: 1.3.1 + '@anthropic-ai/sdk@0.27.3': dependencies: '@types/node': 18.16.9 @@ -18782,7 +19863,8 @@ snapshots: transitivePeerDependencies: - encoding - '@anthropic-ai/sdk@0.57.0': {} + '@anthropic-ai/sdk@0.57.0': + optional: true '@apidevtools/json-schema-ref-parser@11.9.3': dependencies: @@ -18790,11 +19872,6 @@ snapshots: '@types/json-schema': 7.0.15 js-yaml: 4.1.1 - '@apidevtools/json-schema-ref-parser@14.2.1(@types/json-schema@7.0.15)': - dependencies: - '@types/json-schema': 7.0.15 - js-yaml: 4.1.1 - '@asamuzakjp/css-color@5.1.11': dependencies: '@asamuzakjp/generational-cache': 1.0.1 @@ -18953,7 +20030,7 @@ snapshots: '@smithy/node-http-handler': 4.4.14 '@smithy/protocol-http': 5.3.11 '@smithy/smithy-client': 4.12.2 - '@smithy/types': 4.13.0 + '@smithy/types': 4.18.0 '@smithy/url-parser': 4.2.11 '@smithy/util-base64': 4.3.2 '@smithy/util-body-length-browser': 4.2.2 @@ -18967,6 +20044,7 @@ snapshots: tslib: 2.8.1 transitivePeerDependencies: - aws-crt + optional: true '@aws-sdk/client-bedrock-runtime@3.1003.0': dependencies: @@ -19004,7 +20082,7 @@ snapshots: '@smithy/node-http-handler': 4.4.14 '@smithy/protocol-http': 5.3.11 '@smithy/smithy-client': 4.12.2 - '@smithy/types': 4.13.0 + '@smithy/types': 4.18.0 '@smithy/url-parser': 4.2.11 '@smithy/util-base64': 4.3.2 '@smithy/util-body-length-browser': 4.2.2 @@ -19019,6 +20097,7 @@ snapshots: tslib: 2.8.1 transitivePeerDependencies: - aws-crt + optional: true '@aws-sdk/client-kendra@3.1003.0': dependencies: @@ -19049,7 +20128,7 @@ snapshots: '@smithy/node-http-handler': 4.4.14 '@smithy/protocol-http': 5.3.11 '@smithy/smithy-client': 4.12.2 - '@smithy/types': 4.13.0 + '@smithy/types': 4.18.0 '@smithy/url-parser': 4.2.11 '@smithy/util-base64': 4.3.2 '@smithy/util-body-length-browser': 4.2.2 @@ -19063,6 +20142,7 @@ snapshots: tslib: 2.8.1 transitivePeerDependencies: - aws-crt + optional: true '@aws-sdk/client-s3@3.1003.0': dependencies: @@ -19193,7 +20273,7 @@ snapshots: '@smithy/property-provider': 4.2.11 '@smithy/protocol-http': 5.3.11 '@smithy/shared-ini-file-loader': 4.4.6 - '@smithy/types': 4.13.0 + '@smithy/types': 4.18.0 tslib: 2.8.1 transitivePeerDependencies: - aws-crt @@ -19253,7 +20333,19 @@ snapshots: dependencies: '@aws-sdk/types': 3.973.5 '@smithy/eventstream-codec': 4.2.11 - '@smithy/types': 4.13.0 + '@smithy/types': 4.18.0 + tslib: 2.8.1 + optional: true + + '@aws-sdk/lib-storage@3.1003.0(@aws-sdk/client-s3@3.1003.0)': + dependencies: + '@aws-sdk/client-s3': 3.1003.0 + '@smithy/abort-controller': 4.2.11 + '@smithy/middleware-endpoint': 4.4.22 + '@smithy/smithy-client': 4.12.2 + buffer: 5.6.0 + events: 3.3.0 + stream-browserify: 3.0.0 tslib: 2.8.1 '@aws-sdk/middleware-bucket-endpoint@3.972.7': @@ -19270,8 +20362,9 @@ snapshots: dependencies: '@aws-sdk/types': 3.973.5 '@smithy/protocol-http': 5.3.11 - '@smithy/types': 4.13.0 + '@smithy/types': 4.18.0 tslib: 2.8.1 + optional: true '@aws-sdk/middleware-expect-continue@3.972.7': dependencies: @@ -19366,11 +20459,12 @@ snapshots: '@smithy/fetch-http-handler': 5.3.13 '@smithy/protocol-http': 5.3.11 '@smithy/signature-v4': 5.3.11 - '@smithy/types': 4.13.0 + '@smithy/types': 4.18.0 '@smithy/util-base64': 4.3.2 '@smithy/util-hex-encoding': 4.2.2 '@smithy/util-utf8': 4.2.2 tslib: 2.8.1 + optional: true '@aws-sdk/nested-clients@3.996.6': dependencies: @@ -19400,7 +20494,7 @@ snapshots: '@smithy/node-http-handler': 4.4.14 '@smithy/protocol-http': 5.3.11 '@smithy/smithy-client': 4.12.2 - '@smithy/types': 4.13.0 + '@smithy/types': 4.18.0 '@smithy/url-parser': 4.2.11 '@smithy/util-base64': 4.3.2 '@smithy/util-body-length-browser': 4.2.2 @@ -19450,7 +20544,7 @@ snapshots: '@aws-sdk/types': 3.973.5 '@smithy/property-provider': 4.2.11 '@smithy/shared-ini-file-loader': 4.4.6 - '@smithy/types': 4.13.0 + '@smithy/types': 4.18.0 tslib: 2.8.1 transitivePeerDependencies: - aws-crt @@ -19512,8 +20606,15 @@ snapshots: js-tokens: 4.0.0 picocolors: 1.1.1 + '@babel/code-frame@8.0.0': + dependencies: + '@babel/helper-validator-identifier': 8.0.4 + js-tokens: 10.0.0 + '@babel/compat-data@7.29.0': {} + '@babel/compat-data@8.0.5': {} + '@babel/core@7.29.0': dependencies: '@babel/code-frame': 7.29.0 @@ -19534,6 +20635,25 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/core@8.0.5': + dependencies: + '@babel/code-frame': 8.0.0 + '@babel/generator': 8.0.5 + '@babel/helper-compilation-targets': 8.0.5 + '@babel/helpers': 8.0.5 + '@babel/parser': 8.0.5 + '@babel/template': 8.0.0 + '@babel/traverse': 8.0.5 + '@babel/types': 8.0.5 + '@types/gensync': 1.0.5 + convert-source-map: 2.0.0 + empathic: 2.0.1 + gensync: 1.0.0-beta.2 + import-meta-resolve: 4.2.0 + json5: 2.2.3 + obug: 2.2.1 + verkit: 0.3.2 + '@babel/generator@7.29.1': dependencies: '@babel/parser': 7.29.0 @@ -19542,10 +20662,23 @@ snapshots: '@jridgewell/trace-mapping': 0.3.31 jsesc: 3.1.0 + '@babel/generator@8.0.5': + dependencies: + '@babel/parser': 8.0.5 + '@babel/types': 8.0.5 + '@jridgewell/gen-mapping': 0.4.0-beta.0 + '@jridgewell/trace-mapping': 0.3.31 + '@types/jsesc': 2.5.1 + jsesc: 3.1.0 + '@babel/helper-annotate-as-pure@7.27.3': dependencies: '@babel/types': 7.29.0 + '@babel/helper-annotate-as-pure@8.0.0': + dependencies: + '@babel/types': 8.0.5 + '@babel/helper-compilation-targets@7.28.6': dependencies: '@babel/compat-data': 7.29.0 @@ -19554,6 +20687,14 @@ snapshots: lru-cache: 5.1.1 semver: 6.3.1 + '@babel/helper-compilation-targets@8.0.5': + dependencies: + '@babel/compat-data': 8.0.5 + '@babel/helper-validator-option': 8.0.0 + browserslist: 4.28.1 + lru-cache: 11.3.5 + verkit: 0.3.2 + '@babel/helper-create-class-features-plugin@7.28.6(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 @@ -19567,6 +20708,17 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/helper-create-class-features-plugin@8.0.5(@babel/core@8.0.5)': + dependencies: + '@babel/core': 8.0.5 + '@babel/helper-annotate-as-pure': 8.0.0 + '@babel/helper-member-expression-to-functions': 8.0.5 + '@babel/helper-optimise-call-expression': 8.0.0 + '@babel/helper-replace-supers': 8.0.1(@babel/core@8.0.5) + '@babel/helper-skip-transparent-expression-wrappers': 8.0.0 + '@babel/traverse': 8.0.5 + verkit: 0.3.2 + '@babel/helper-create-regexp-features-plugin@7.28.5(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 @@ -19587,6 +20739,8 @@ snapshots: '@babel/helper-globals@7.28.0': {} + '@babel/helper-globals@8.0.0': {} + '@babel/helper-member-expression-to-functions@7.28.5': dependencies: '@babel/traverse': 7.29.0 @@ -19594,6 +20748,11 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/helper-member-expression-to-functions@8.0.5': + dependencies: + '@babel/traverse': 8.0.5 + '@babel/types': 8.0.5 + '@babel/helper-module-imports@7.28.6': dependencies: '@babel/traverse': 7.29.0 @@ -19601,6 +20760,11 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/helper-module-imports@8.0.0': + dependencies: + '@babel/traverse': 8.0.5 + '@babel/types': 8.0.5 + '@babel/helper-module-transforms@7.28.6(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 @@ -19610,12 +20774,27 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/helper-module-transforms@8.0.5(@babel/core@8.0.5)': + dependencies: + '@babel/core': 8.0.5 + '@babel/helper-module-imports': 8.0.0 + '@babel/helper-validator-identifier': 8.0.4 + '@babel/traverse': 8.0.5 + '@babel/helper-optimise-call-expression@7.27.1': dependencies: '@babel/types': 7.29.0 + '@babel/helper-optimise-call-expression@8.0.0': + dependencies: + '@babel/types': 8.0.5 + '@babel/helper-plugin-utils@7.28.6': {} + '@babel/helper-plugin-utils@8.0.1(@babel/core@8.0.5)': + dependencies: + '@babel/core': 8.0.5 + '@babel/helper-remap-async-to-generator@7.27.1(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 @@ -19634,6 +20813,13 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/helper-replace-supers@8.0.1(@babel/core@8.0.5)': + dependencies: + '@babel/core': 8.0.5 + '@babel/helper-member-expression-to-functions': 8.0.5 + '@babel/helper-optimise-call-expression': 8.0.0 + '@babel/traverse': 8.0.5 + '@babel/helper-skip-transparent-expression-wrappers@7.27.1': dependencies: '@babel/traverse': 7.29.0 @@ -19641,12 +20827,23 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/helper-skip-transparent-expression-wrappers@8.0.0': + dependencies: + '@babel/traverse': 8.0.5 + '@babel/types': 8.0.5 + '@babel/helper-string-parser@7.27.1': {} + '@babel/helper-string-parser@8.0.0': {} + '@babel/helper-validator-identifier@7.28.5': {} + '@babel/helper-validator-identifier@8.0.4': {} + '@babel/helper-validator-option@7.27.1': {} + '@babel/helper-validator-option@8.0.0': {} + '@babel/helper-wrap-function@7.28.6': dependencies: '@babel/template': 7.28.6 @@ -19660,10 +20857,19 @@ snapshots: '@babel/template': 7.28.6 '@babel/types': 7.29.0 + '@babel/helpers@8.0.5': + dependencies: + '@babel/template': 8.0.0 + '@babel/types': 8.0.5 + '@babel/parser@7.29.0': dependencies: '@babel/types': 7.29.0 + '@babel/parser@8.0.5': + dependencies: + '@babel/types': 8.0.5 + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.28.5(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 @@ -19708,21 +20914,41 @@ snapshots: '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@8.0.5)': + dependencies: + '@babel/core': 8.0.5 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-syntax-bigint@7.8.3(@babel/core@8.0.5)': + dependencies: + '@babel/core': 8.0.5 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@8.0.5)': + dependencies: + '@babel/core': 8.0.5 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@8.0.5)': + dependencies: + '@babel/core': 8.0.5 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-syntax-import-assertions@7.28.6(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 @@ -19733,16 +20959,31 @@ snapshots: '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-syntax-import-attributes@7.28.6(@babel/core@8.0.5)': + dependencies: + '@babel/core': 8.0.5 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@8.0.5)': + dependencies: + '@babel/core': 8.0.5 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@8.0.5)': + dependencies: + '@babel/core': 8.0.5 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 @@ -19753,46 +20994,91 @@ snapshots: '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@8.0.5)': + dependencies: + '@babel/core': 8.0.5 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@8.0.5)': + dependencies: + '@babel/core': 8.0.5 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@8.0.5)': + dependencies: + '@babel/core': 8.0.5 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@8.0.5)': + dependencies: + '@babel/core': 8.0.5 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@8.0.5)': + dependencies: + '@babel/core': 8.0.5 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@8.0.5)': + dependencies: + '@babel/core': 8.0.5 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@8.0.5)': + dependencies: + '@babel/core': 8.0.5 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@8.0.5)': + dependencies: + '@babel/core': 8.0.5 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-syntax-typescript@7.28.6(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-syntax-typescript@8.0.3(@babel/core@8.0.5)': + dependencies: + '@babel/core': 8.0.5 + '@babel/helper-plugin-utils': 8.0.1(@babel/core@8.0.5) + '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 @@ -19967,6 +21253,12 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-transform-modules-commonjs@8.0.1(@babel/core@8.0.5)': + dependencies: + '@babel/core': 8.0.5 + '@babel/helper-module-transforms': 8.0.5(@babel/core@8.0.5) + '@babel/helper-plugin-utils': 8.0.1(@babel/core@8.0.5) + '@babel/plugin-transform-modules-systemjs@7.29.0(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 @@ -20154,6 +21446,15 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-transform-typescript@8.0.5(@babel/core@8.0.5)': + dependencies: + '@babel/core': 8.0.5 + '@babel/helper-annotate-as-pure': 8.0.0 + '@babel/helper-create-class-features-plugin': 8.0.5(@babel/core@8.0.5) + '@babel/helper-plugin-utils': 8.0.1(@babel/core@8.0.5) + '@babel/helper-skip-transparent-expression-wrappers': 8.0.0 + '@babel/plugin-syntax-typescript': 8.0.3(@babel/core@8.0.5) + '@babel/plugin-transform-unicode-escapes@7.27.1(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 @@ -20283,6 +21584,14 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/preset-typescript@8.0.1(@babel/core@8.0.5)': + dependencies: + '@babel/core': 8.0.5 + '@babel/helper-plugin-utils': 8.0.1(@babel/core@8.0.5) + '@babel/helper-validator-option': 8.0.0 + '@babel/plugin-transform-modules-commonjs': 8.0.1(@babel/core@8.0.5) + '@babel/plugin-transform-typescript': 8.0.5(@babel/core@8.0.5) + '@babel/runtime@7.28.6': {} '@babel/template@7.28.6': @@ -20291,6 +21600,12 @@ snapshots: '@babel/parser': 7.29.0 '@babel/types': 7.29.0 + '@babel/template@8.0.0': + dependencies: + '@babel/code-frame': 8.0.0 + '@babel/parser': 8.0.5 + '@babel/types': 8.0.5 + '@babel/traverse@7.29.0': dependencies: '@babel/code-frame': 7.29.0 @@ -20303,11 +21618,26 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/traverse@8.0.5': + dependencies: + '@babel/code-frame': 8.0.0 + '@babel/generator': 8.0.5 + '@babel/helper-globals': 8.0.0 + '@babel/parser': 8.0.5 + '@babel/template': 8.0.0 + '@babel/types': 8.0.5 + obug: 2.2.1 + '@babel/types@7.29.0': dependencies: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.28.5 + '@babel/types@8.0.5': + dependencies: + '@babel/helper-string-parser': 8.0.0 + '@babel/helper-validator-identifier': 8.0.4 + '@bcoe/v8-coverage@0.2.3': {} '@blueprintjs/colors@5.1.16': @@ -20357,6 +21687,8 @@ snapshots: '@borewit/text-codec@0.2.2': {} + '@braintree/sanitize-url@7.1.2': {} + '@bramus/specificity@2.4.2': dependencies: css-tree: 3.2.1 @@ -20381,9 +21713,9 @@ snapshots: deepmerge: 4.3.1 dotenv: 16.6.1 openai: 6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76) - ws: 8.21.0(bufferutil@4.1.0)(utf-8-validate@5.0.10) + ws: 8.21.3(bufferutil@4.1.0)(utf-8-validate@5.0.10) zod: 3.25.76 - zod-to-json-schema: 3.25.1(zod@3.25.76) + zod-to-json-schema: 3.25.2(zod@3.25.76) transitivePeerDependencies: - bufferutil - encoding @@ -20402,41 +21734,194 @@ snapshots: '@cfworker/json-schema@4.1.1': {} - '@clack/core@1.2.0': + '@chevrotain/types@11.1.2': {} + + '@clack/core@1.5.1': dependencies: - fast-wrap-ansi: 0.1.6 + fast-wrap-ansi: 0.2.2 sisteransi: 1.0.5 - '@clack/prompts@1.2.0': + '@clack/prompts@1.8.1': dependencies: - '@clack/core': 1.2.0 - fast-string-width: 1.1.0 - fast-wrap-ansi: 0.1.6 + '@clack/core': 1.5.1 + fast-string-width: 3.0.2 + fast-wrap-ansi: 0.2.2 sisteransi: 1.0.5 '@colors/colors@1.5.0': optional: true - '@copilotkit/react-core@1.10.6(@types/react@19.1.8)(graphql@16.13.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@copilotkit/a2ui-renderer@1.72.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@a2ui/web_core': 0.10.4 + clsx: 2.1.1 + lit: 3.3.3 + zod: 3.25.76 + zod-to-json-schema: 3.25.1(zod@3.25.76) + optionalDependencies: + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + + '@copilotkit/channels-core@0.10.0(vitest@3.1.4)(zod@3.25.76)': + dependencies: + '@ag-ui/client': 0.0.59 + '@ag-ui/core': 0.0.59 + '@copilotkit/channels-ui': 0.10.0(@ag-ui/core@0.0.59) + '@copilotkit/core': 1.72.0(@ag-ui/core@0.0.59)(zod@3.25.76) + '@copilotkit/shared': 1.72.0(@ag-ui/core@0.0.59) + zod-to-json-schema: 3.25.1(zod@3.25.76) + optionalDependencies: + vitest: 3.1.4(@types/debug@4.1.12)(@types/node@18.16.9)(@vitest/ui@1.6.0)(happy-dom@15.11.7)(jiti@2.6.1)(jsdom@22.1.0(bufferutil@4.1.0)(canvas@2.11.2)(utf-8-validate@5.0.10))(lightningcss@1.33.0)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.1) + transitivePeerDependencies: + - encoding + - zod + + '@copilotkit/channels-intelligence@0.10.0(@ag-ui/core@0.0.59)(@types/express@4.17.25)(bufferutil@4.1.0)(express@4.22.1)(utf-8-validate@5.0.10)(vitest@3.1.4)(zod@3.25.76)': + dependencies: + '@ag-ui/client': 0.0.59 + '@copilotkit/channels-core': 0.10.0(vitest@3.1.4)(zod@3.25.76) + '@copilotkit/channels-slack': 0.10.0(@types/express@4.17.25)(bufferutil@4.1.0)(utf-8-validate@5.0.10)(vitest@3.1.4)(zod@3.25.76) + '@copilotkit/channels-teams': 0.10.0(express@4.22.1)(vitest@3.1.4)(zod@3.25.76) + '@copilotkit/channels-ui': 0.10.0(@ag-ui/core@0.0.59) + phoenix: 1.8.14 + transitivePeerDependencies: + - '@ag-ui/core' + - '@microsoft/agents-activity' + - '@microsoft/agents-hosting' + - '@types/express' + - bufferutil + - debug + - encoding + - express + - supports-color + - utf-8-validate + - vitest + - zod + + '@copilotkit/channels-slack@0.10.0(@types/express@4.17.25)(bufferutil@4.1.0)(utf-8-validate@5.0.10)(vitest@3.1.4)(zod@3.25.76)': + dependencies: + '@ag-ui/client': 0.0.59 + '@ag-ui/core': 0.0.59 + '@copilotkit/channels-core': 0.10.0(vitest@3.1.4)(zod@3.25.76) + '@copilotkit/channels-ui': 0.10.0(@ag-ui/core@0.0.59) + '@copilotkit/core': 1.72.0(@ag-ui/core@0.0.59)(zod@3.25.76) + '@copilotkit/shared': 1.72.0(@ag-ui/core@0.0.59) + '@slack/bolt': 4.7.3(@types/express@4.17.25)(bufferutil@4.1.0)(utf-8-validate@5.0.10) + '@slack/types': 2.22.0 + '@slack/web-api': 7.19.0 + rxjs: 7.8.2 + transitivePeerDependencies: + - '@types/express' + - bufferutil + - debug + - encoding + - supports-color + - utf-8-validate + - vitest + - zod + + '@copilotkit/channels-teams@0.10.0(express@4.22.1)(vitest@3.1.4)(zod@3.25.76)': dependencies: - '@copilotkit/runtime-client-gql': 1.10.6(graphql@16.13.1)(react@19.2.4) - '@copilotkit/shared': 1.10.6 + '@ag-ui/client': 0.0.59 + '@ag-ui/core': 0.0.59 + '@copilotkit/channels-core': 0.10.0(vitest@3.1.4)(zod@3.25.76) + '@copilotkit/channels-ui': 0.10.0(@ag-ui/core@0.0.59) + '@copilotkit/core': 1.72.0(@ag-ui/core@0.0.59)(zod@3.25.76) + '@copilotkit/shared': 1.72.0(@ag-ui/core@0.0.59) + rxjs: 7.8.2 + optionalDependencies: + express: 4.22.1 + transitivePeerDependencies: + - encoding + - vitest + - zod + + '@copilotkit/channels-ui@0.10.0(@ag-ui/core@0.0.59)': + dependencies: + '@copilotkit/shared': 1.72.0(@ag-ui/core@0.0.59) + transitivePeerDependencies: + - '@ag-ui/core' + - encoding + + '@copilotkit/core@1.72.0(@ag-ui/core@0.0.59)(zod@3.25.76)': + dependencies: + '@ag-ui/client': 0.0.59 + '@copilotkit/shared': 1.72.0(@ag-ui/core@0.0.59) + '@tanstack/pacer': 0.20.1 + phoenix: 1.8.14 + rxjs: 7.8.1 + zod-to-json-schema: 3.25.1(zod@3.25.76) + transitivePeerDependencies: + - '@ag-ui/core' + - encoding + - zod + + '@copilotkit/license-verifier@0.5.0': {} + + '@copilotkit/mcp-apps-renderer@1.72.0(@ag-ui/client@0.0.59)(@ag-ui/core@0.0.59)(@cfworker/json-schema@4.1.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@3.25.76)': + dependencies: + '@ag-ui/client': 0.0.59 + '@copilotkit/shared': 1.72.0(@ag-ui/core@0.0.59) + '@modelcontextprotocol/ext-apps': 1.7.5(@modelcontextprotocol/sdk@1.30.0(@cfworker/json-schema@4.1.1)(zod@3.25.76))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@3.25.76) + '@modelcontextprotocol/sdk': 1.30.0(@cfworker/json-schema@4.1.1)(zod@3.25.76) + zod: 3.25.76 + transitivePeerDependencies: + - '@ag-ui/core' + - '@cfworker/json-schema' + - encoding + - react + - react-dom + - supports-color + + '@copilotkit/react-core@1.72.0(@cfworker/json-schema@4.1.1)(@types/mdast@4.0.4)(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(graphql@16.13.1)(micromark-util-types@2.0.2)(micromark@4.0.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@3.25.76)': + dependencies: + '@ag-ui/client': 0.0.59 + '@ag-ui/core': 0.0.59 + '@copilotkit/a2ui-renderer': 1.72.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@copilotkit/core': 1.72.0(@ag-ui/core@0.0.59)(zod@3.25.76) + '@copilotkit/mcp-apps-renderer': 1.72.0(@ag-ui/client@0.0.59)(@ag-ui/core@0.0.59)(@cfworker/json-schema@4.1.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@3.25.76) + '@copilotkit/runtime-client-gql': 1.72.0(@ag-ui/core@0.0.59)(graphql@16.13.1)(react@19.2.4) + '@copilotkit/shared': 1.72.0(@ag-ui/core@0.0.59) + '@copilotkit/web-components': 1.72.0(lit@3.3.3) + '@copilotkit/web-inspector': 1.72.0(@ag-ui/core@0.0.59)(zod@3.25.76) + '@jetbrains/websandbox': 1.4.1 + '@radix-ui/react-dropdown-menu': 2.1.24(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-slot': 1.2.4(@types/react@19.1.8)(react@19.2.4) + '@radix-ui/react-tooltip': 1.2.16(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@scarf/scarf': 1.4.0 + '@tanstack/react-virtual': 3.13.21(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + class-variance-authority: 0.7.1 + clsx: 2.1.1 + katex: 0.16.35 + lit: 3.3.3 + lucide-react: 0.525.0(react@19.2.4) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) react-markdown: 8.0.7(@types/react@19.1.8)(react@19.2.4) + rxjs: 7.8.1 + streamdown: 1.6.11(@types/mdast@4.0.4)(micromark-util-types@2.0.2)(micromark@4.0.2)(react@19.2.4) + tailwind-merge: 3.7.0 + tw-animate-css: 1.4.0 untruncate-json: 0.0.1 + use-stick-to-bottom: 1.1.6(react@19.2.4) + zod: 3.25.76 + zod-to-json-schema: 3.25.1(zod@3.25.76) transitivePeerDependencies: + - '@cfworker/json-schema' + - '@types/mdast' - '@types/react' + - '@types/react-dom' - encoding - graphql + - micromark + - micromark-util-types - supports-color - '@copilotkit/react-textarea@1.10.6(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(graphql@16.13.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@copilotkit/react-textarea@1.72.0(@ag-ui/core@0.0.59)(@cfworker/json-schema@4.1.1)(@types/mdast@4.0.4)(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(graphql@16.13.1)(micromark-util-types@2.0.2)(micromark@4.0.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@3.25.76)': dependencies: - '@copilotkit/react-core': 1.10.6(@types/react@19.1.8)(graphql@16.13.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@copilotkit/runtime-client-gql': 1.10.6(graphql@16.13.1)(react@19.2.4) - '@copilotkit/shared': 1.10.6 + '@copilotkit/react-core': 1.72.0(@cfworker/json-schema@4.1.1)(@types/mdast@4.0.4)(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(graphql@16.13.1)(micromark-util-types@2.0.2)(micromark@4.0.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@3.25.76) + '@copilotkit/runtime-client-gql': 1.72.0(@ag-ui/core@0.0.59)(graphql@16.13.1)(react@19.2.4) + '@copilotkit/shared': 1.72.0(@ag-ui/core@0.0.59) '@emotion/css': 11.13.5 '@emotion/react': 11.14.0(@types/react@19.1.8)(react@19.2.4) '@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.2.4))(@types/react@19.1.8)(react@19.2.4) @@ -20458,237 +21943,166 @@ snapshots: slate-react: 0.98.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(slate@0.94.1) tailwind-merge: 1.14.0 transitivePeerDependencies: + - '@ag-ui/core' + - '@cfworker/json-schema' + - '@types/mdast' - '@types/react' - '@types/react-dom' - encoding - graphql + - micromark + - micromark-util-types - supports-color + - zod - '@copilotkit/react-ui@1.10.6(@types/react@19.1.8)(graphql@16.13.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@copilotkit/react-ui@1.72.0(@ag-ui/core@0.0.59)(@cfworker/json-schema@4.1.1)(@types/mdast@4.0.4)(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(graphql@16.13.1)(micromark-util-types@2.0.2)(micromark@4.0.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@3.25.76)': dependencies: - '@copilotkit/react-core': 1.10.6(@types/react@19.1.8)(graphql@16.13.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@copilotkit/runtime-client-gql': 1.10.6(graphql@16.13.1)(react@19.2.4) - '@copilotkit/shared': 1.10.6 + '@copilotkit/react-core': 1.72.0(@cfworker/json-schema@4.1.1)(@types/mdast@4.0.4)(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(graphql@16.13.1)(micromark-util-types@2.0.2)(micromark@4.0.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@3.25.76) + '@copilotkit/runtime-client-gql': 1.72.0(@ag-ui/core@0.0.59)(graphql@16.13.1)(react@19.2.4) + '@copilotkit/shared': 1.72.0(@ag-ui/core@0.0.59) '@headlessui/react': 2.2.9(react-dom@19.2.4(react@19.2.4))(react@19.2.4) react: 19.2.4 react-markdown: 10.1.0(@types/react@19.1.8)(react@19.2.4) - react-syntax-highlighter: 15.6.6(react@19.2.4) + react-syntax-highlighter: 16.1.1(react@19.2.4) rehype-raw: 7.0.0 + rehype-sanitize: 6.0.0 remark-gfm: 4.0.1 remark-math: 6.0.0 transitivePeerDependencies: + - '@ag-ui/core' + - '@cfworker/json-schema' + - '@types/mdast' - '@types/react' + - '@types/react-dom' - encoding - graphql + - micromark + - micromark-util-types - react-dom - supports-color + - zod - '@copilotkit/runtime-client-gql@1.10.6(graphql@16.13.1)(react@19.2.4)': + '@copilotkit/runtime-client-gql@1.72.0(@ag-ui/core@0.0.59)(graphql@16.13.1)(react@19.2.4)': dependencies: - '@copilotkit/shared': 1.10.6 + '@copilotkit/shared': 1.72.0(@ag-ui/core@0.0.59) '@urql/core': 5.2.0(graphql@16.13.1) react: 19.2.4 untruncate-json: 0.0.1 urql: 4.2.2(@urql/core@5.2.0(graphql@16.13.1))(react@19.2.4) transitivePeerDependencies: + - '@ag-ui/core' - encoding - graphql - '@copilotkit/runtime@1.10.6(c5ef6e30f9cb72b0a9db20b1502179b1)': - dependencies: - '@ag-ui/client': 0.0.47 - '@ag-ui/core': 0.0.47 - '@ag-ui/encoder': 0.0.47 - '@ag-ui/langgraph': 0.0.24(@ag-ui/client@0.0.47)(@ag-ui/core@0.0.47)(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@ag-ui/proto': 0.0.47 - '@anthropic-ai/sdk': 0.57.0 - '@copilotkit/shared': 1.10.6 + '@copilotkit/runtime@1.72.0(060090e105863d9983aa04d300df3d3a)': + dependencies: + '@ag-ui/a2ui-middleware': 0.0.10(@ag-ui/client@0.0.59)(rxjs@7.8.1) + '@ag-ui/client': 0.0.59 + '@ag-ui/core': 0.0.59 + '@ag-ui/encoder': 0.0.59 + '@ag-ui/langgraph': 0.0.43(@ag-ui/client@0.0.59)(@ag-ui/core@0.0.59)(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(ws@8.21.3(bufferutil@4.1.0)(utf-8-validate@5.0.10)) + '@ag-ui/mcp-apps-middleware': 0.1.1(@ag-ui/client@0.0.59)(@cfworker/json-schema@4.1.1)(rxjs@7.8.1)(zod@3.25.76) + '@ag-ui/mcp-middleware': 0.0.2(@ag-ui/client@0.0.59)(@cfworker/json-schema@4.1.1)(rxjs@7.8.1)(zod@3.25.76) + '@ai-sdk/anthropic': 3.0.118(zod@3.25.76) + '@ai-sdk/google': 3.0.123(zod@3.25.76) + '@ai-sdk/google-vertex': 3.0.174(zod@3.25.76) + '@ai-sdk/mcp': 1.0.81(zod@3.25.76) + '@ai-sdk/openai': 3.0.113(zod@3.25.76) + '@cfworker/json-schema': 4.1.1 + '@copilotkit/channels-core': 0.10.0(vitest@3.1.4)(zod@3.25.76) + '@copilotkit/channels-intelligence': 0.10.0(@ag-ui/core@0.0.59)(@types/express@4.17.25)(bufferutil@4.1.0)(express@4.22.1)(utf-8-validate@5.0.10)(vitest@3.1.4)(zod@3.25.76) + '@copilotkit/license-verifier': 0.5.0 + '@copilotkit/shared': 1.72.0(@ag-ui/core@0.0.59) '@graphql-yoga/plugin-defer-stream': 3.18.0(graphql-yoga@5.18.0(graphql@16.13.1))(graphql@16.13.1) - '@langchain/aws': 0.1.15(@langchain/core@1.1.39(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))) - '@langchain/community': 0.3.59(bde0b9db2f2a07fbe92f00b76fe0eadb) - '@langchain/core': 0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76)) - '@langchain/google-gauth': 0.1.8(@langchain/core@0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76)))(zod@3.25.76) - '@langchain/langgraph-sdk': 0.0.70(@langchain/core@0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76)))(react@19.2.4) - '@langchain/openai': 0.4.9(@langchain/core@0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76)))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)) + '@hono/node-server': 1.19.11(hono@4.12.10) + '@langchain/core': 1.1.39(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)) + '@modelcontextprotocol/sdk': 1.30.0(@cfworker/json-schema@4.1.1)(zod@3.25.76) + '@remix-run/node-fetch-server': 0.13.3 '@scarf/scarf': 1.4.0 + '@segment/analytics-node': 2.3.0 + '@types/cors': 2.8.19 + '@types/express': 4.17.25 + ai: 6.0.285(zod@3.25.76) + clarinet: 0.12.6 class-transformer: 0.5.1 class-validator: 0.14.4 + cors: 2.8.6 express: 4.22.1 graphql: 16.13.1 graphql-scalars: 1.25.0(graphql@16.13.1) graphql-yoga: 5.18.0(graphql@16.13.1) - groq-sdk: 0.5.0 - langchain: 0.3.37(@langchain/aws@0.1.15(@langchain/core@0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))))(@langchain/core@0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.19.0(bufferutil@4.1.0)(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.6.0(@opentelemetry/api@1.9.0))(axios@1.19.0)(cheerio@1.2.0)(handlebars@4.7.9)(openai@4.104.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)) - openai: 4.104.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76) + hono: 4.12.10 partial-json: 0.1.7 - pino: 9.14.0 + phoenix: 1.8.14 + pino: 10.3.1 pino-pretty: 11.3.0 reflect-metadata: 0.2.2 rxjs: 7.8.1 type-graphql: 2.0.0-rc.1(class-validator@0.14.4)(graphql-scalars@1.25.0(graphql@16.13.1))(graphql@16.13.1) + uuid: 11.1.0 + ws: 8.21.3(bufferutil@4.1.0)(utf-8-validate@5.0.10) zod: 3.25.76 + optionalDependencies: + '@anthropic-ai/sdk': 0.57.0 + '@langchain/aws': 0.1.15(@langchain/core@1.1.39(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))) + '@langchain/community': 1.1.27(66046857593e81cf94589e5d63e1e984) + '@langchain/google-gauth': 0.1.8(@langchain/core@1.1.39(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)))(zod@3.25.76) + '@langchain/langgraph-sdk': 1.11.0(@langchain/core@1.1.39(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)))(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@langchain/openai': 1.4.3(@langchain/core@1.1.39(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)) + groq-sdk: 0.5.0 + langchain: 1.5.11(@langchain/core@1.1.39(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)))(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)) + openai: 6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76) transitivePeerDependencies: - - '@arcjet/redact' - - '@aws-crypto/sha256-js' - - '@aws-sdk/client-bedrock-agent-runtime' - - '@aws-sdk/client-bedrock-runtime' - - '@aws-sdk/client-dynamodb' - - '@aws-sdk/client-kendra' - - '@aws-sdk/client-lambda' - - '@aws-sdk/client-s3' - - '@aws-sdk/client-sagemaker-runtime' - - '@aws-sdk/client-sfn' - - '@aws-sdk/credential-provider-node' - - '@aws-sdk/dsql-signer' - - '@azure/search-documents' - - '@azure/storage-blob' - - '@browserbasehq/sdk' - - '@browserbasehq/stagehand' - - '@clickhouse/client' - - '@cloudflare/ai' - - '@datastax/astra-db-ts' - - '@elastic/elasticsearch' - - '@getmetal/metal-sdk' - - '@getzep/zep-cloud' - - '@getzep/zep-js' - - '@gomomento/sdk' - - '@gomomento/sdk-core' - - '@google-ai/generativelanguage' - - '@google-cloud/storage' - - '@gradientai/nodejs-sdk' - - '@huggingface/inference' - - '@huggingface/transformers' - - '@ibm-cloud/watsonx-ai' - - '@lancedb/lancedb' - - '@langchain/anthropic' - - '@langchain/cerebras' - - '@langchain/cohere' - - '@langchain/deepseek' - - '@langchain/google-genai' - - '@langchain/google-vertexai' - - '@langchain/google-vertexai-web' - - '@langchain/groq' - - '@langchain/mistralai' - - '@langchain/ollama' - - '@langchain/xai' - - '@layerup/layerup-security' - - '@libsql/client' - - '@mendable/firecrawl-js' - - '@mlc-ai/web-llm' - - '@mozilla/readability' - - '@neondatabase/serverless' - - '@notionhq/client' - - '@opensearch-project/opensearch' + - '@microsoft/agents-activity' + - '@microsoft/agents-hosting' - '@opentelemetry/api' - '@opentelemetry/exporter-trace-otlp-proto' - '@opentelemetry/sdk-trace-base' - - '@pinecone-database/pinecone' - - '@planetscale/database' - - '@premai/prem-sdk' - - '@qdrant/js-client-rest' - - '@raycast/api' - - '@rockset/client' - - '@smithy/eventstream-codec' - - '@smithy/protocol-http' - - '@smithy/signature-v4' - - '@smithy/util-utf8' - - '@spider-cloud/spider-client' - - '@supabase/supabase-js' - - '@tensorflow-models/universal-sentence-encoder' - - '@tensorflow/tfjs-converter' - - '@tensorflow/tfjs-core' - - '@upstash/ratelimit' - - '@upstash/redis' - - '@upstash/vector' - - '@vercel/kv' - - '@vercel/postgres' - - '@writerai/writer-sdk' - - '@xata.io/client' - - '@zilliz/milvus2-sdk-node' - - apify-client - - assemblyai - - aws-crt - - axios - - azion - - better-sqlite3 - - cassandra-driver - - cborg - - cheerio - - chromadb - - closevector-common - - closevector-node - - closevector-web - - cohere-ai - - convex - - crypto-js - - d3-dsv - - discord.js - - duck-duck-scrape + - bufferutil + - debug - encoding - - epub2 - - fast-xml-parser - - firebase-admin - - google-auth-library - - googleapis - - handlebars - - hnswlib-node - - html-to-text - - ibm-cloud-sdk-core - - ignore - - interface-datastore - - ioredis - - it-all - - jsdom - - jsonwebtoken - - llmonitor - - lodash - - lunary - - mammoth - - mariadb - - mem0ai - - mongodb - - mysql2 - - neo4j-driver - - notion-to-md - - officeparser - - pdf-parse - - peggy - - pg - - pg-copy-streams - - pickleparser - - playwright - - portkey-ai - - puppeteer - - pyodide - react - - redis - - replicate - - sonix-speech-recognition - - srt-parser-2 - - supports-color - - typeorm - - typesense - - usearch - - voy-search - - weaviate-client - - web-auth-library - - word-extractor - - ws - - youtubei.js + - react-dom + - supports-color + - svelte + - utf-8-validate + - vitest + - vue - '@copilotkit/shared@1.10.6': + '@copilotkit/shared@1.72.0(@ag-ui/core@0.0.59)': dependencies: - '@ag-ui/core': 0.0.37 + '@ag-ui/client': 0.0.59 + '@ag-ui/core': 0.0.59 + '@copilotkit/license-verifier': 0.5.0 '@segment/analytics-node': 2.3.0 + '@standard-schema/spec': 1.1.0 chalk: 4.1.2 graphql: 16.13.1 - uuid: 10.0.0 + partial-json: 0.1.7 + uuid: 11.1.0 zod: 3.25.76 - zod-to-json-schema: 3.25.1(zod@3.25.76) + zod-to-json-schema: 3.25.2(zod@3.25.76) transitivePeerDependencies: - encoding - '@crxjs/vite-plugin@2.7.1(vite@8.2.1(@types/node@18.16.9)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3))': + '@copilotkit/web-components@1.72.0(lit@3.3.3)': + dependencies: + lit: 3.3.3 + + '@copilotkit/web-inspector@1.72.0(@ag-ui/core@0.0.59)(zod@3.25.76)': + dependencies: + '@ag-ui/client': 0.0.59 + '@copilotkit/core': 1.72.0(@ag-ui/core@0.0.59)(zod@3.25.76) + '@copilotkit/shared': 1.72.0(@ag-ui/core@0.0.59) + lit: 3.3.3 + lucide: 0.525.0 + marked: 12.0.2 + transitivePeerDependencies: + - '@ag-ui/core' + - encoding + - zod + + '@crxjs/vite-plugin@2.7.1(vite@8.2.1(@types/node@18.16.9)(esbuild@0.28.2)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.1))': dependencies: '@webcomponents/custom-elements': 1.6.0 acorn-walk: 8.3.5 @@ -20704,7 +22118,7 @@ snapshots: rollup: 2.80.0 rxjs: 7.5.7 tinyglobby: 0.2.17 - vite: 8.2.1(@types/node@18.16.9)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3) + vite: 8.2.1(@types/node@18.16.9)(esbuild@0.28.2)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.1) transitivePeerDependencies: - supports-color @@ -20767,8 +22181,6 @@ snapshots: tunnel-agent: 0.6.0 uuid: 8.3.2 - '@datastructures-js/deque@1.0.8': {} - '@dub/analytics@0.0.32': dependencies: server-only: 0.0.1 @@ -20912,7 +22324,7 @@ snapshots: '@esbuild/aix-ppc64@0.27.3': optional: true - '@esbuild/aix-ppc64@0.27.7': + '@esbuild/aix-ppc64@0.28.2': optional: true '@esbuild/android-arm64@0.25.12': @@ -20921,7 +22333,7 @@ snapshots: '@esbuild/android-arm64@0.27.3': optional: true - '@esbuild/android-arm64@0.27.7': + '@esbuild/android-arm64@0.28.2': optional: true '@esbuild/android-arm@0.25.12': @@ -20930,7 +22342,7 @@ snapshots: '@esbuild/android-arm@0.27.3': optional: true - '@esbuild/android-arm@0.27.7': + '@esbuild/android-arm@0.28.2': optional: true '@esbuild/android-x64@0.25.12': @@ -20939,7 +22351,7 @@ snapshots: '@esbuild/android-x64@0.27.3': optional: true - '@esbuild/android-x64@0.27.7': + '@esbuild/android-x64@0.28.2': optional: true '@esbuild/darwin-arm64@0.25.12': @@ -20948,7 +22360,7 @@ snapshots: '@esbuild/darwin-arm64@0.27.3': optional: true - '@esbuild/darwin-arm64@0.27.7': + '@esbuild/darwin-arm64@0.28.2': optional: true '@esbuild/darwin-x64@0.25.12': @@ -20957,7 +22369,7 @@ snapshots: '@esbuild/darwin-x64@0.27.3': optional: true - '@esbuild/darwin-x64@0.27.7': + '@esbuild/darwin-x64@0.28.2': optional: true '@esbuild/freebsd-arm64@0.25.12': @@ -20966,7 +22378,7 @@ snapshots: '@esbuild/freebsd-arm64@0.27.3': optional: true - '@esbuild/freebsd-arm64@0.27.7': + '@esbuild/freebsd-arm64@0.28.2': optional: true '@esbuild/freebsd-x64@0.25.12': @@ -20975,7 +22387,7 @@ snapshots: '@esbuild/freebsd-x64@0.27.3': optional: true - '@esbuild/freebsd-x64@0.27.7': + '@esbuild/freebsd-x64@0.28.2': optional: true '@esbuild/linux-arm64@0.25.12': @@ -20984,7 +22396,7 @@ snapshots: '@esbuild/linux-arm64@0.27.3': optional: true - '@esbuild/linux-arm64@0.27.7': + '@esbuild/linux-arm64@0.28.2': optional: true '@esbuild/linux-arm@0.25.12': @@ -20993,7 +22405,7 @@ snapshots: '@esbuild/linux-arm@0.27.3': optional: true - '@esbuild/linux-arm@0.27.7': + '@esbuild/linux-arm@0.28.2': optional: true '@esbuild/linux-ia32@0.25.12': @@ -21002,7 +22414,7 @@ snapshots: '@esbuild/linux-ia32@0.27.3': optional: true - '@esbuild/linux-ia32@0.27.7': + '@esbuild/linux-ia32@0.28.2': optional: true '@esbuild/linux-loong64@0.25.12': @@ -21011,7 +22423,7 @@ snapshots: '@esbuild/linux-loong64@0.27.3': optional: true - '@esbuild/linux-loong64@0.27.7': + '@esbuild/linux-loong64@0.28.2': optional: true '@esbuild/linux-mips64el@0.25.12': @@ -21020,7 +22432,7 @@ snapshots: '@esbuild/linux-mips64el@0.27.3': optional: true - '@esbuild/linux-mips64el@0.27.7': + '@esbuild/linux-mips64el@0.28.2': optional: true '@esbuild/linux-ppc64@0.25.12': @@ -21029,7 +22441,7 @@ snapshots: '@esbuild/linux-ppc64@0.27.3': optional: true - '@esbuild/linux-ppc64@0.27.7': + '@esbuild/linux-ppc64@0.28.2': optional: true '@esbuild/linux-riscv64@0.25.12': @@ -21038,7 +22450,7 @@ snapshots: '@esbuild/linux-riscv64@0.27.3': optional: true - '@esbuild/linux-riscv64@0.27.7': + '@esbuild/linux-riscv64@0.28.2': optional: true '@esbuild/linux-s390x@0.25.12': @@ -21047,7 +22459,7 @@ snapshots: '@esbuild/linux-s390x@0.27.3': optional: true - '@esbuild/linux-s390x@0.27.7': + '@esbuild/linux-s390x@0.28.2': optional: true '@esbuild/linux-x64@0.25.12': @@ -21056,7 +22468,7 @@ snapshots: '@esbuild/linux-x64@0.27.3': optional: true - '@esbuild/linux-x64@0.27.7': + '@esbuild/linux-x64@0.28.2': optional: true '@esbuild/netbsd-arm64@0.25.12': @@ -21065,7 +22477,7 @@ snapshots: '@esbuild/netbsd-arm64@0.27.3': optional: true - '@esbuild/netbsd-arm64@0.27.7': + '@esbuild/netbsd-arm64@0.28.2': optional: true '@esbuild/netbsd-x64@0.25.12': @@ -21074,7 +22486,7 @@ snapshots: '@esbuild/netbsd-x64@0.27.3': optional: true - '@esbuild/netbsd-x64@0.27.7': + '@esbuild/netbsd-x64@0.28.2': optional: true '@esbuild/openbsd-arm64@0.25.12': @@ -21083,7 +22495,7 @@ snapshots: '@esbuild/openbsd-arm64@0.27.3': optional: true - '@esbuild/openbsd-arm64@0.27.7': + '@esbuild/openbsd-arm64@0.28.2': optional: true '@esbuild/openbsd-x64@0.25.12': @@ -21092,7 +22504,7 @@ snapshots: '@esbuild/openbsd-x64@0.27.3': optional: true - '@esbuild/openbsd-x64@0.27.7': + '@esbuild/openbsd-x64@0.28.2': optional: true '@esbuild/openharmony-arm64@0.25.12': @@ -21101,7 +22513,7 @@ snapshots: '@esbuild/openharmony-arm64@0.27.3': optional: true - '@esbuild/openharmony-arm64@0.27.7': + '@esbuild/openharmony-arm64@0.28.2': optional: true '@esbuild/sunos-x64@0.25.12': @@ -21110,7 +22522,7 @@ snapshots: '@esbuild/sunos-x64@0.27.3': optional: true - '@esbuild/sunos-x64@0.27.7': + '@esbuild/sunos-x64@0.28.2': optional: true '@esbuild/win32-arm64@0.25.12': @@ -21119,7 +22531,7 @@ snapshots: '@esbuild/win32-arm64@0.27.3': optional: true - '@esbuild/win32-arm64@0.27.7': + '@esbuild/win32-arm64@0.28.2': optional: true '@esbuild/win32-ia32@0.25.12': @@ -21128,7 +22540,7 @@ snapshots: '@esbuild/win32-ia32@0.27.3': optional: true - '@esbuild/win32-ia32@0.27.7': + '@esbuild/win32-ia32@0.28.2': optional: true '@esbuild/win32-x64@0.25.12': @@ -21137,7 +22549,7 @@ snapshots: '@esbuild/win32-x64@0.27.3': optional: true - '@esbuild/win32-x64@0.27.7': + '@esbuild/win32-x64@0.28.2': optional: true '@eslint-community/eslint-utils@4.9.1(eslint@8.57.0)': @@ -21183,24 +22595,24 @@ snapshots: '@expo/sudo-prompt@9.3.2': {} - '@farcaster/miniapp-core@0.5.1(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10)': + '@farcaster/miniapp-core@0.6.0(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10)': dependencies: '@solana/web3.js': 1.98.4(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10) - ox: 0.4.4(typescript@5.5.4)(zod@3.25.76) - zod: 3.25.76 + ox: 0.14.0(typescript@5.5.4)(zod@4.6.5) + zod: 4.6.5 transitivePeerDependencies: - bufferutil - encoding - typescript - utf-8-validate - '@farcaster/miniapp-sdk@0.2.3(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76)': + '@farcaster/miniapp-sdk@0.3.0(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76)': dependencies: - '@farcaster/miniapp-core': 0.5.1(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10) + '@farcaster/miniapp-core': 0.6.0(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10) '@farcaster/quick-auth': 0.0.6(typescript@5.5.4) comlink: 4.4.2 eventemitter3: 5.0.4 - ox: 0.4.4(typescript@5.5.4)(zod@3.25.76) + ox: 0.14.0(typescript@5.5.4)(zod@3.25.76) transitivePeerDependencies: - bufferutil - encoding @@ -21214,6 +22626,8 @@ snapshots: typescript: 5.5.4 zod: 3.25.76 + '@fastify/busboy@2.1.1': {} + '@fastify/busboy@3.2.0': {} '@fastify/otel@0.17.1(@opentelemetry/api@1.9.0)': @@ -21375,10 +22789,23 @@ snapshots: react-dom: 19.2.4(react@19.2.4) use-sync-external-store: 1.6.0(react@19.2.4) + '@hono/node-server@1.19.11(hono@4.12.10)': + dependencies: + hono: 4.12.10 + '@hono/node-server@1.19.11(hono@4.12.5)': dependencies: hono: 4.12.5 + '@hono/node-ws@1.3.1(@hono/node-server@1.19.11(hono@4.12.10))(bufferutil@4.1.0)(hono@4.12.10)(utf-8-validate@5.0.10)': + dependencies: + '@hono/node-server': 1.19.11(hono@4.12.10) + hono: 4.12.10 + ws: 8.21.3(bufferutil@4.1.0)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - bufferutil + - utf-8-validate + '@hookform/resolvers@3.10.0(react-hook-form@7.71.2(react@19.2.4))': dependencies: react-hook-form: 7.71.2(react@19.2.4) @@ -21404,6 +22831,14 @@ snapshots: transitivePeerDependencies: - supports-color + '@iconify/types@2.0.0': {} + + '@iconify/utils@3.1.7': + dependencies: + '@antfu/install-pkg': 2.1.0 + '@iconify/types': 2.0.0 + import-meta-resolve: 4.2.0 + '@img/colour@1.1.0': optional: true @@ -21768,7 +23203,7 @@ snapshots: '@isaacs/ttlcache@1.4.1': {} - '@isaacs/ttlcache@2.1.4': {} + '@isaacs/ttlcache@2.1.5': {} '@istanbuljs/load-nyc-config@1.1.0': dependencies: @@ -21946,11 +23381,18 @@ snapshots: '@types/yargs': 17.0.35 chalk: 4.1.2 + '@jetbrains/websandbox@1.4.1': {} + '@jridgewell/gen-mapping@0.3.13': dependencies: '@jridgewell/sourcemap-codec': 1.5.5 '@jridgewell/trace-mapping': 0.3.31 + '@jridgewell/gen-mapping@0.4.0-beta.0': + dependencies: + '@jridgewell/sourcemap-codec': 1.6.0 + '@jridgewell/trace-mapping': 0.3.31 + '@jridgewell/remapping@2.3.5': dependencies: '@jridgewell/gen-mapping': 0.3.13 @@ -21965,6 +23407,8 @@ snapshots: '@jridgewell/sourcemap-codec@1.5.5': {} + '@jridgewell/sourcemap-codec@1.6.0': {} + '@jridgewell/trace-mapping@0.3.31': dependencies: '@jridgewell/resolve-uri': 3.1.2 @@ -22167,6 +23611,7 @@ snapshots: '@langchain/core': 1.1.39(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)) transitivePeerDependencies: - aws-crt + optional: true '@langchain/classic@1.0.27(@langchain/core@1.1.39(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)))(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(cheerio@1.2.0)(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))': dependencies: @@ -22190,69 +23635,7 @@ snapshots: - openai - ws - '@langchain/community@0.3.59(bde0b9db2f2a07fbe92f00b76fe0eadb)': - dependencies: - '@browserbasehq/stagehand': 1.14.0(@playwright/test@1.58.2)(bufferutil@4.1.0)(deepmerge@4.3.1)(dotenv@16.6.1)(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(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.7.9 - '@langchain/core': 0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76)) - '@langchain/openai': 0.5.18(@langchain/core@0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76)))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)) - '@langchain/weaviate': 0.2.3(@langchain/core@0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))) - binary-extensions: 2.3.0 - flat: 5.0.2 - ibm-cloud-sdk-core: 5.4.8 - js-yaml: 4.1.1 - langchain: 0.3.37(@langchain/aws@0.1.15(@langchain/core@0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))))(@langchain/core@0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.19.0(bufferutil@4.1.0)(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.6.0(@opentelemetry/api@1.9.0))(axios@1.19.0)(cheerio@1.2.0)(handlebars@4.7.9)(openai@4.104.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)) - langsmith: 0.3.87(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76)) - math-expression-evaluator: 2.0.7 - openai: 4.104.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76) - uuid: 10.0.0 - zod: 3.25.76 - optionalDependencies: - '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/client-bedrock-agent-runtime': 3.1003.0 - '@aws-sdk/client-bedrock-runtime': 3.1003.0 - '@aws-sdk/client-kendra': 3.1003.0 - '@aws-sdk/client-s3': 3.1003.0 - '@aws-sdk/credential-provider-node': 3.972.17 - '@browserbasehq/sdk': 2.7.0 - '@upstash/redis': 1.36.3 - cheerio: 1.2.0 - crypto-js: 4.2.0 - fast-xml-parser: 5.11.0 - google-auth-library: 9.15.1 - googleapis: 137.1.0 - html-to-text: 9.0.5 - ioredis: 5.10.0 - jsdom: 22.1.0(bufferutil@4.1.0)(canvas@2.11.2)(utf-8-validate@5.0.10) - jsonwebtoken: 9.0.3 - lodash: 4.17.23 - pg: 8.20.0 - playwright: 1.58.2 - redis: 4.7.1 - weaviate-client: 3.12.0 - ws: 8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10) - transitivePeerDependencies: - - '@langchain/anthropic' - - '@langchain/aws' - - '@langchain/cerebras' - - '@langchain/cohere' - - '@langchain/deepseek' - - '@langchain/google-genai' - - '@langchain/google-vertexai' - - '@langchain/google-vertexai-web' - - '@langchain/groq' - - '@langchain/mistralai' - - '@langchain/ollama' - - '@langchain/xai' - - '@opentelemetry/api' - - '@opentelemetry/exporter-trace-otlp-proto' - - '@opentelemetry/sdk-trace-base' - - axios - - encoding - - handlebars - - peggy - - '@langchain/community@1.1.27(877e75223018bd2be751ee722fb15fb5)': + '@langchain/community@1.1.27(66046857593e81cf94589e5d63e1e984)': dependencies: '@browserbasehq/stagehand': 1.14.0(@playwright/test@1.58.2)(bufferutil@4.1.0)(deepmerge@4.3.1)(dotenv@16.6.1)(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(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.7.9 @@ -22273,21 +23656,26 @@ snapshots: '@aws-sdk/client-s3': 3.1003.0 '@aws-sdk/credential-provider-node': 3.972.17 '@browserbasehq/sdk': 2.7.0 + '@smithy/eventstream-codec': 4.2.11 + '@smithy/protocol-http': 5.3.11 + '@smithy/signature-v4': 5.3.11 + '@smithy/util-utf8': 4.2.2 '@upstash/redis': 1.36.3 cheerio: 1.2.0 crypto-js: 4.2.0 + d3-dsv: 3.0.1 fast-xml-parser: 5.11.0 google-auth-library: 9.15.1 googleapis: 137.1.0 html-to-text: 9.0.5 + ignore: 7.0.5 ioredis: 5.10.0 jsdom: 22.1.0(bufferutil@4.1.0)(canvas@2.11.2)(utf-8-validate@5.0.10) jsonwebtoken: 9.0.3 lodash: 4.17.23 - pg: 8.20.0 + pg: 8.23.0 playwright: 1.58.2 redis: 4.7.1 - weaviate-client: 3.12.0 ws: 8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10) transitivePeerDependencies: - '@opentelemetry/api' @@ -22295,58 +23683,34 @@ snapshots: - '@opentelemetry/sdk-trace-base' - peggy - '@langchain/core@0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.19.0(bufferutil@4.1.0)(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.87(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76)) - mustache: 4.2.0 - p-queue: 6.6.2 - p-retry: 4.6.2 - uuid: 10.0.0 - zod: 3.25.76 - zod-to-json-schema: 3.25.1(zod@3.25.76) - transitivePeerDependencies: - - '@opentelemetry/api' - - '@opentelemetry/exporter-trace-otlp-proto' - - '@opentelemetry/sdk-trace-base' - - openai - - '@langchain/core@0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))': + '@langchain/core@1.1.39(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))': dependencies: '@cfworker/json-schema': 4.1.1 + '@standard-schema/spec': 1.1.0 ansi-styles: 5.2.0 camelcase: 6.3.0 decamelize: 1.2.0 js-tiktoken: 1.0.21 - langsmith: 0.3.87(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76)) + langsmith: 0.5.17(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)) mustache: 4.2.0 p-queue: 6.6.2 - p-retry: 4.6.2 - uuid: 10.0.0 + uuid: 11.1.0 zod: 3.25.76 - zod-to-json-schema: 3.25.1(zod@3.25.76) transitivePeerDependencies: - '@opentelemetry/api' - '@opentelemetry/exporter-trace-otlp-proto' - '@opentelemetry/sdk-trace-base' - openai + - ws - '@langchain/core@1.1.39(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))': + '@langchain/core@1.2.11(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.21.3(bufferutil@4.1.0)(utf-8-validate@5.0.10))': dependencies: '@cfworker/json-schema': 4.1.1 '@standard-schema/spec': 1.1.0 - ansi-styles: 5.2.0 - camelcase: 6.3.0 - decamelize: 1.2.0 js-tiktoken: 1.0.21 - langsmith: 0.5.17(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)) + langsmith: 0.5.17(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.21.3(bufferutil@4.1.0)(utf-8-validate@5.0.10)) mustache: 4.2.0 p-queue: 6.6.2 - uuid: 11.1.0 zod: 3.25.76 transitivePeerDependencies: - '@opentelemetry/api' @@ -22355,47 +23719,60 @@ snapshots: - openai - ws - '@langchain/google-common@0.1.8(@langchain/core@0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76)))(zod@3.25.76)': + '@langchain/google-common@0.1.8(@langchain/core@1.1.39(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)))(zod@3.25.76)': dependencies: - '@langchain/core': 0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76)) + '@langchain/core': 1.1.39(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)) uuid: 10.0.0 - zod-to-json-schema: 3.25.1(zod@3.25.76) + zod-to-json-schema: 3.25.2(zod@3.25.76) transitivePeerDependencies: - zod + optional: true - '@langchain/google-gauth@0.1.8(@langchain/core@0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76)))(zod@3.25.76)': + '@langchain/google-gauth@0.1.8(@langchain/core@1.1.39(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)))(zod@3.25.76)': dependencies: - '@langchain/core': 0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76)) - '@langchain/google-common': 0.1.8(@langchain/core@0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76)))(zod@3.25.76) + '@langchain/core': 1.1.39(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)) + '@langchain/google-common': 0.1.8(@langchain/core@1.1.39(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)))(zod@3.25.76) google-auth-library: 8.9.0 transitivePeerDependencies: - encoding - supports-color - zod + optional: true '@langchain/langgraph-checkpoint@1.0.1(@langchain/core@1.1.39(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)))': dependencies: '@langchain/core': 1.1.39(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)) uuid: 10.0.0 - '@langchain/langgraph-sdk@0.0.70(@langchain/core@0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76)))(react@19.2.4)': + '@langchain/langgraph-checkpoint@1.1.5(@langchain/core@1.1.39(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)))': dependencies: + '@langchain/core': 1.1.39(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)) + optional: true + + '@langchain/langgraph-checkpoint@1.1.5(@langchain/core@1.2.11(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.21.3(bufferutil@4.1.0)(utf-8-validate@5.0.10)))': + dependencies: + '@langchain/core': 1.2.11(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.21.3(bufferutil@4.1.0)(utf-8-validate@5.0.10)) + + '@langchain/langgraph-sdk@1.11.0(@langchain/core@1.1.39(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@langchain/core': 1.1.39(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)) + '@langchain/protocol': 0.0.19 '@types/json-schema': 7.0.15 - p-queue: 6.6.2 - p-retry: 4.6.2 - uuid: 9.0.1 + p-queue: 9.1.2 + p-retry: 7.1.1 optionalDependencies: - '@langchain/core': 0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76)) react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + optional: true - '@langchain/langgraph-sdk@0.1.10(@langchain/core@0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76)))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@langchain/langgraph-sdk@1.11.0(@langchain/core@1.2.11(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.21.3(bufferutil@4.1.0)(utf-8-validate@5.0.10)))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: + '@langchain/core': 1.2.11(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.21.3(bufferutil@4.1.0)(utf-8-validate@5.0.10)) + '@langchain/protocol': 0.0.19 '@types/json-schema': 7.0.15 - p-queue: 6.6.2 - p-retry: 4.6.2 - uuid: 9.0.1 + p-queue: 9.1.2 + p-retry: 7.1.1 optionalDependencies: - '@langchain/core': 0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76)) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) @@ -22410,7 +23787,18 @@ snapshots: react: 19.2.4 react-dom: 19.2.4(react@19.2.4) - '@langchain/langgraph@1.2.8(@langchain/core@1.1.39(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76)': + '@langchain/langgraph-sdk@1.8.8(@langchain/core@1.2.11(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.21.3(bufferutil@4.1.0)(utf-8-validate@5.0.10)))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@types/json-schema': 7.0.15 + p-queue: 9.1.2 + p-retry: 7.1.1 + uuid: 13.0.0 + optionalDependencies: + '@langchain/core': 1.2.11(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.21.3(bufferutil@4.1.0)(utf-8-validate@5.0.10)) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + + '@langchain/langgraph@1.2.8(@langchain/core@1.1.39(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod-to-json-schema@3.25.2(zod@3.25.76))(zod@3.25.76)': dependencies: '@langchain/core': 1.1.39(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)) '@langchain/langgraph-checkpoint': 1.0.1(@langchain/core@1.1.39(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))) @@ -22419,32 +23807,37 @@ snapshots: uuid: 10.0.0 zod: 3.25.76 optionalDependencies: - zod-to-json-schema: 3.25.1(zod@3.25.76) + zod-to-json-schema: 3.25.2(zod@3.25.76) transitivePeerDependencies: - react - react-dom - svelte - vue - '@langchain/openai@0.4.9(@langchain/core@0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76)))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))': + '@langchain/langgraph@1.4.15(@langchain/core@1.1.39(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@3.25.76)': dependencies: - '@langchain/core': 0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76)) - js-tiktoken: 1.0.21 - openai: 4.104.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76) + '@langchain/core': 1.1.39(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)) + '@langchain/langgraph-checkpoint': 1.1.5(@langchain/core@1.1.39(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))) + '@langchain/langgraph-sdk': 1.11.0(@langchain/core@1.1.39(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)))(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@langchain/protocol': 0.0.19 + '@standard-schema/spec': 1.1.0 zod: 3.25.76 - zod-to-json-schema: 3.25.1(zod@3.25.76) transitivePeerDependencies: - - encoding - - ws + - react + - react-dom + optional: true - '@langchain/openai@0.5.18(@langchain/core@0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76)))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))': + '@langchain/langgraph@1.4.15(@langchain/core@1.2.11(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.21.3(bufferutil@4.1.0)(utf-8-validate@5.0.10)))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@3.25.76)': dependencies: - '@langchain/core': 0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76)) - js-tiktoken: 1.0.21 - openai: 5.23.2(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76) + '@langchain/core': 1.2.11(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.21.3(bufferutil@4.1.0)(utf-8-validate@5.0.10)) + '@langchain/langgraph-checkpoint': 1.1.5(@langchain/core@1.2.11(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.21.3(bufferutil@4.1.0)(utf-8-validate@5.0.10))) + '@langchain/langgraph-sdk': 1.11.0(@langchain/core@1.2.11(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.21.3(bufferutil@4.1.0)(utf-8-validate@5.0.10)))(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@langchain/protocol': 0.0.19 + '@standard-schema/spec': 1.1.0 zod: 3.25.76 transitivePeerDependencies: - - ws + - react + - react-dom '@langchain/openai@1.4.1(@langchain/core@1.1.39(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))': dependencies: @@ -22464,29 +23857,18 @@ snapshots: transitivePeerDependencies: - ws + '@langchain/protocol@0.0.19': {} + '@langchain/tavily@1.2.0(@langchain/core@1.1.39(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)))': dependencies: '@langchain/core': 1.1.39(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)) zod: 3.25.76 - '@langchain/textsplitters@0.1.0(@langchain/core@0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76)))': - dependencies: - '@langchain/core': 0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76)) - js-tiktoken: 1.0.21 - '@langchain/textsplitters@1.0.1(@langchain/core@1.1.39(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)))': dependencies: '@langchain/core': 1.1.39(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)) js-tiktoken: 1.0.21 - '@langchain/weaviate@0.2.3(@langchain/core@0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76)))': - dependencies: - '@langchain/core': 0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76)) - uuid: 10.0.0 - weaviate-client: 3.12.0 - transitivePeerDependencies: - - encoding - '@ledgerhq/devices@8.10.0': dependencies: '@ledgerhq/errors': 6.29.0 @@ -22593,7 +23975,7 @@ snapshots: json-schema: 0.4.0 rxjs: 7.8.1 zod: 3.25.76 - zod-to-json-schema: 3.25.1(zod@3.25.76) + zod-to-json-schema: 3.25.2(zod@3.25.76) transitivePeerDependencies: - '@hono/arktype-validator' - '@hono/effect-validator' @@ -22657,7 +24039,7 @@ snapshots: sift: 17.1.3 xstate: 5.28.0 zod: 3.25.76 - zod-to-json-schema: 3.25.1(zod@3.25.76) + zod-to-json-schema: 3.25.2(zod@3.25.76) transitivePeerDependencies: - '@hono/arktype-validator' - '@hono/effect-validator' @@ -22675,123 +24057,137 @@ snapshots: - valibot - zod-openapi - '@mastra/core@1.21.0(@cfworker/json-schema@4.1.1)(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@3.25.76))(@types/json-schema@7.0.15)(bufferutil@4.1.0)(openapi-types@12.1.3)(utf-8-validate@5.0.10)(zod@3.25.76)': + '@mastra/core@1.67.0(@bufbuild/protobuf@2.11.0)(@grpc/grpc-js@1.14.3)(ai@4.3.19(react@19.2.4)(zod@3.25.76))(bufferutil@4.1.0)(express@5.2.1)(rxjs@7.8.2)(utf-8-validate@5.0.10)(zod@3.25.76)': dependencies: - '@a2a-js/sdk': 0.2.5 - '@ai-sdk/provider-utils-v5': '@ai-sdk/provider-utils@3.0.20(zod@3.25.76)' - '@ai-sdk/provider-utils-v6': '@ai-sdk/provider-utils@4.0.0(zod@3.25.76)' - '@ai-sdk/provider-v5': '@ai-sdk/provider@2.0.1' - '@ai-sdk/provider-v6': '@ai-sdk/provider@3.0.5' - '@ai-sdk/ui-utils-v5': '@ai-sdk/ui-utils@1.2.11(zod@3.25.76)' - '@isaacs/ttlcache': 2.1.4 + '@a2a-js/sdk-v0_3': '@a2a-js/sdk@0.3.14(@bufbuild/protobuf@2.11.0)(@grpc/grpc-js@1.14.3)(express@5.2.1)' + '@a2a-js/sdk-v1': '@a2a-js/sdk@1.0.1(@bufbuild/protobuf@2.11.0)(@grpc/grpc-js@1.14.3)(express@5.2.1)' + '@ai-sdk/provider-utils-v6': '@ai-sdk/provider-utils@4.0.40(zod@3.25.76)' + '@ai-sdk/provider-utils-v7': '@ai-sdk/provider-utils@5.0.13(zod@3.25.76)' + '@ai-sdk/provider-v5': '@ai-sdk/provider@2.0.3' + '@ai-sdk/provider-v6': '@ai-sdk/provider@3.0.14' + '@ai-sdk/provider-v7': '@ai-sdk/provider@4.0.4' + '@isaacs/ttlcache': 2.1.5 '@lukeed/uuid': 2.0.1 - '@mastra/schema-compat': 1.2.7(zod@3.25.76) - '@modelcontextprotocol/sdk': 1.27.1(@cfworker/json-schema@4.1.1)(zod@3.25.76) + '@mastra/schema-compat': 1.3.10(zod@3.25.76) + '@modelcontextprotocol/server': 2.0.0 '@sindresorhus/slugify': 2.2.1 '@standard-schema/spec': 1.1.0 - ajv: 8.18.0 + ajv: 8.20.0 + chat: 4.40.0(ai@4.3.19(react@19.2.4)(zod@3.25.76))(zod@3.25.76) + croner: 10.0.1 dotenv: 17.4.0 execa: 9.6.1 + fastq: 1.20.1 gray-matter: 4.0.3 - hono: 4.12.10 - hono-openapi: 1.3.0(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@3.25.76))(@types/json-schema@7.0.15)(hono@4.12.10)(openapi-types@12.1.3) ignore: 7.0.5 - js-tiktoken: 1.0.21 + jpeg-js: 0.4.4 json-schema: 0.4.0 - lru-cache: 11.2.7 + lru-cache: 11.3.5 p-map: 7.0.4 p-retry: 7.1.1 - picomatch: 4.0.3 - radash: 12.1.1 + picomatch: 4.0.5 + posthog-node: 5.52.4(rxjs@7.8.2) tokenx: 1.3.0 - ws: 8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10) + ws: 8.21.3(bufferutil@4.1.0)(utf-8-validate@5.0.10) xxhash-wasm: 1.1.0 zod: 3.25.76 transitivePeerDependencies: - - '@cfworker/json-schema' - - '@hono/standard-validator' - - '@standard-community/standard-json' - - '@standard-community/standard-openapi' - - '@types/json-schema' + - '@bufbuild/protobuf' + - '@grpc/grpc-js' + - ai - bufferutil - - openapi-types + - express + - rxjs - supports-color - utf-8-validate - - '@mastra/deployer@1.21.0(@mastra/core@1.21.0(@cfworker/json-schema@4.1.1)(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@3.25.76))(@types/json-schema@7.0.15)(bufferutil@4.1.0)(openapi-types@12.1.3)(utf-8-validate@5.0.10)(zod@3.25.76))(typescript@5.5.4)(zod@3.25.76)': - dependencies: - '@babel/core': 7.29.0 - '@babel/preset-typescript': 7.28.5(@babel/core@7.29.0) - '@babel/traverse': 7.29.0 - '@mastra/core': 1.21.0(@cfworker/json-schema@4.1.1)(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@3.25.76))(@types/json-schema@7.0.15)(bufferutil@4.1.0)(openapi-types@12.1.3)(utf-8-validate@5.0.10)(zod@3.25.76) - '@mastra/server': 1.21.0(@mastra/core@1.21.0(@cfworker/json-schema@4.1.1)(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@3.25.76))(@types/json-schema@7.0.15)(bufferutil@4.1.0)(openapi-types@12.1.3)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76) - '@optimize-lodash/rollup-plugin': 5.1.0(rollup@4.59.0) - '@rollup/plugin-alias': 6.0.0(rollup@4.59.0) - '@rollup/plugin-commonjs': 29.0.2(rollup@4.59.0) - '@rollup/plugin-esm-shim': 0.1.8(rollup@4.59.0) - '@rollup/plugin-json': 6.1.0(rollup@4.59.0) - '@rollup/plugin-node-resolve': 16.0.3(rollup@4.59.0) - '@rollup/plugin-virtual': 3.0.2(rollup@4.59.0) + - workflow + + '@mastra/deployer@1.67.0(@hono/node-server@1.19.11(hono@4.12.10))(@mastra/core@1.67.0(@bufbuild/protobuf@2.11.0)(@grpc/grpc-js@1.14.3)(ai@4.3.19(react@19.2.4)(zod@3.25.76))(bufferutil@4.1.0)(express@5.2.1)(rxjs@7.8.2)(utf-8-validate@5.0.10)(zod@3.25.76))(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76)': + dependencies: + '@babel/core': 8.0.5 + '@babel/preset-typescript': 8.0.1(@babel/core@8.0.5) + '@babel/traverse': 8.0.5 + '@hono/node-ws': 1.3.1(@hono/node-server@1.19.11(hono@4.12.10))(bufferutil@4.1.0)(hono@4.12.10)(utf-8-validate@5.0.10) + '@mastra/core': 1.67.0(@bufbuild/protobuf@2.11.0)(@grpc/grpc-js@1.14.3)(ai@4.3.19(react@19.2.4)(zod@3.25.76))(bufferutil@4.1.0)(express@5.2.1)(rxjs@7.8.2)(utf-8-validate@5.0.10)(zod@3.25.76) + '@mastra/server': 1.67.0(@mastra/core@1.67.0(@bufbuild/protobuf@2.11.0)(@grpc/grpc-js@1.14.3)(ai@4.3.19(react@19.2.4)(zod@3.25.76))(bufferutil@4.1.0)(express@5.2.1)(rxjs@7.8.2)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76) + '@optimize-lodash/rollup-plugin': 5.1.0(rollup@4.63.3) + '@rollup/plugin-commonjs': 29.0.2(rollup@4.63.3) + '@rollup/plugin-esm-shim': 0.1.8(rollup@4.63.3) + '@rollup/plugin-json': 6.1.0(rollup@4.63.3) + '@rollup/plugin-node-resolve': 16.0.3(rollup@4.63.3) + '@rollup/plugin-virtual': 3.0.2(rollup@4.63.3) '@sindresorhus/slugify': 2.2.1 - '@types/babel__traverse': 7.28.0 empathic: 2.0.0 - esbuild: 0.27.7 + esbuild: 0.28.2 find-workspaces: 0.3.1 - fs-extra: 11.3.4 + fs-extra: 11.4.0 + gray-matter: 4.0.3 hono: 4.12.10 local-pkg: 1.1.2 - resolve-from: 5.0.0 resolve.exports: 2.0.3 - rollup: 4.59.0 - rollup-plugin-esbuild: 6.2.1(esbuild@0.27.7)(rollup@4.59.0) + rollup: 4.63.3 + rollup-plugin-esbuild: 6.2.1(esbuild@0.28.2)(rollup@4.63.3) strip-json-comments: 5.0.3 - tinyglobby: 0.2.15 - typescript-paths: 1.5.1(typescript@5.5.4) - zod: 3.25.76 + tinyglobby: 0.2.17 + typescript-paths: 1.5.2(typescript@5.5.4) + ws: 8.21.3(bufferutil@4.1.0)(utf-8-validate@5.0.10) + yaml: 2.9.1 transitivePeerDependencies: + - '@hono/node-server' + - bufferutil - supports-color - typescript + - utf-8-validate + - zod - '@mastra/loggers@1.1.0(@mastra/core@1.21.0(@cfworker/json-schema@4.1.1)(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@3.25.76))(@types/json-schema@7.0.15)(bufferutil@4.1.0)(openapi-types@12.1.3)(utf-8-validate@5.0.10)(zod@3.25.76))': + '@mastra/loggers@1.3.2(@mastra/core@1.67.0(@bufbuild/protobuf@2.11.0)(@grpc/grpc-js@1.14.3)(ai@4.3.19(react@19.2.4)(zod@3.25.76))(bufferutil@4.1.0)(express@5.2.1)(rxjs@7.8.2)(utf-8-validate@5.0.10)(zod@3.25.76))': dependencies: - '@mastra/core': 1.21.0(@cfworker/json-schema@4.1.1)(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@3.25.76))(@types/json-schema@7.0.15)(bufferutil@4.1.0)(openapi-types@12.1.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@mastra/core': 1.67.0(@bufbuild/protobuf@2.11.0)(@grpc/grpc-js@1.14.3)(ai@4.3.19(react@19.2.4)(zod@3.25.76))(bufferutil@4.1.0)(express@5.2.1)(rxjs@7.8.2)(utf-8-validate@5.0.10)(zod@3.25.76) pino: 10.3.1 pino-pretty: 13.1.3 - '@mastra/mcp@1.4.1(@cfworker/json-schema@4.1.1)(@mastra/core@1.21.0(@cfworker/json-schema@4.1.1)(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@3.25.76))(@types/json-schema@7.0.15)(bufferutil@4.1.0)(openapi-types@12.1.3)(utf-8-validate@5.0.10)(zod@3.25.76))(@types/json-schema@7.0.15)(zod@3.25.76)': + '@mastra/mcp@1.18.0(@cfworker/json-schema@4.1.1)(@mastra/core@1.67.0(@bufbuild/protobuf@2.11.0)(@grpc/grpc-js@1.14.3)(ai@4.3.19(react@19.2.4)(zod@3.25.76))(bufferutil@4.1.0)(express@5.2.1)(rxjs@7.8.2)(utf-8-validate@5.0.10)(zod@3.25.76))(express@5.2.1)(hono@4.12.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@3.25.76)': dependencies: - '@apidevtools/json-schema-ref-parser': 14.2.1(@types/json-schema@7.0.15) - '@mastra/core': 1.21.0(@cfworker/json-schema@4.1.1)(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@3.25.76))(@types/json-schema@7.0.15)(bufferutil@4.1.0)(openapi-types@12.1.3)(utf-8-validate@5.0.10)(zod@3.25.76) - '@modelcontextprotocol/sdk': 1.27.1(@cfworker/json-schema@4.1.1)(zod@3.25.76) + '@mastra/core': 1.67.0(@bufbuild/protobuf@2.11.0)(@grpc/grpc-js@1.14.3)(ai@4.3.19(react@19.2.4)(zod@3.25.76))(bufferutil@4.1.0)(express@5.2.1)(rxjs@7.8.2)(utf-8-validate@5.0.10)(zod@3.25.76) + '@modelcontextprotocol/client': 2.0.0 + '@modelcontextprotocol/core': 2.0.0 + '@modelcontextprotocol/ext-apps': 1.7.5(@modelcontextprotocol/sdk@1.30.0(@cfworker/json-schema@4.1.1)(zod@3.25.76))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@3.25.76) + '@modelcontextprotocol/node': 2.0.0(@modelcontextprotocol/server@2.0.0)(hono@4.12.10) + '@modelcontextprotocol/sdk': 1.30.0(@cfworker/json-schema@4.1.1)(zod@3.25.76) + '@modelcontextprotocol/server': 2.0.0 + '@modelcontextprotocol/server-legacy': 2.0.0(express@5.2.1) exit-hook: 5.1.0 fast-deep-equal: 3.1.3 - uuid: 13.0.0 - zod: 3.25.76 transitivePeerDependencies: - '@cfworker/json-schema' - - '@types/json-schema' + - express + - hono + - react + - react-dom - supports-color + - zod - '@mastra/memory@1.13.0(@mastra/core@1.21.0(@cfworker/json-schema@4.1.1)(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@3.25.76))(@types/json-schema@7.0.15)(bufferutil@4.1.0)(openapi-types@12.1.3)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76)': + '@mastra/memory@1.30.0(@mastra/core@1.67.0(@bufbuild/protobuf@2.11.0)(@grpc/grpc-js@1.14.3)(ai@4.3.19(react@19.2.4)(zod@3.25.76))(bufferutil@4.1.0)(express@5.2.1)(rxjs@7.8.2)(utf-8-validate@5.0.10)(zod@3.25.76))': dependencies: - '@mastra/core': 1.21.0(@cfworker/json-schema@4.1.1)(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@3.25.76))(@types/json-schema@7.0.15)(bufferutil@4.1.0)(openapi-types@12.1.3)(utf-8-validate@5.0.10)(zod@3.25.76) - '@mastra/schema-compat': 1.2.7(zod@3.25.76) + '@mastra/core': 1.67.0(@bufbuild/protobuf@2.11.0)(@grpc/grpc-js@1.14.3)(ai@4.3.19(react@19.2.4)(zod@3.25.76))(bufferutil@4.1.0)(express@5.2.1)(rxjs@7.8.2)(utf-8-validate@5.0.10)(zod@3.25.76) + '@mastra/schema-compat': 1.3.10(zod@4.6.5) async-mutex: 0.5.0 - image-size: 2.0.2 + diff: 8.0.4 json-schema: 0.4.0 - lru-cache: 11.2.7 + lru-cache: 11.3.5 probe-image-size: 7.2.3 tokenx: 1.3.0 xxhash-wasm: 1.1.0 - zod: 3.25.76 + zod: 4.6.5 transitivePeerDependencies: - supports-color - '@mastra/pg@1.8.5(@mastra/core@1.21.0(@cfworker/json-schema@4.1.1)(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@3.25.76))(@types/json-schema@7.0.15)(bufferutil@4.1.0)(openapi-types@12.1.3)(utf-8-validate@5.0.10)(zod@3.25.76))': + '@mastra/pg@1.25.0(@mastra/core@1.67.0(@bufbuild/protobuf@2.11.0)(@grpc/grpc-js@1.14.3)(ai@4.3.19(react@19.2.4)(zod@3.25.76))(bufferutil@4.1.0)(express@5.2.1)(rxjs@7.8.2)(utf-8-validate@5.0.10)(zod@3.25.76))': dependencies: - '@mastra/core': 1.21.0(@cfworker/json-schema@4.1.1)(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@3.25.76))(@types/json-schema@7.0.15)(bufferutil@4.1.0)(openapi-types@12.1.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@mastra/core': 1.67.0(@bufbuild/protobuf@2.11.0)(@grpc/grpc-js@1.14.3)(ai@4.3.19(react@19.2.4)(zod@3.25.76))(bufferutil@4.1.0)(express@5.2.1)(rxjs@7.8.2)(utf-8-validate@5.0.10)(zod@3.25.76) async-mutex: 0.5.0 - pg: 8.20.0 + pg: 8.23.0 + pg-connection-string: 2.12.0 xxhash-wasm: 1.1.0 transitivePeerDependencies: - pg-native @@ -22803,22 +24199,30 @@ snapshots: zod: 3.25.76 zod-from-json-schema: 0.5.2 zod-from-json-schema-v3: zod-from-json-schema@0.0.5 - zod-to-json-schema: 3.25.1(zod@3.25.76) + zod-to-json-schema: 3.25.2(zod@3.25.76) - '@mastra/schema-compat@1.2.7(zod@3.25.76)': + '@mastra/schema-compat@1.3.10(zod@3.25.76)': dependencies: json-schema-to-zod: 2.7.0 zod: 3.25.76 zod-from-json-schema: 0.5.2 - zod-from-json-schema-v3: zod-from-json-schema@0.0.5 - zod-to-json-schema: 3.25.1(zod@3.25.76) - '@mastra/server@1.21.0(@mastra/core@1.21.0(@cfworker/json-schema@4.1.1)(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@3.25.76))(@types/json-schema@7.0.15)(bufferutil@4.1.0)(openapi-types@12.1.3)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76)': + '@mastra/schema-compat@1.3.10(zod@4.6.5)': dependencies: - '@mastra/core': 1.21.0(@cfworker/json-schema@4.1.1)(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@3.25.76))(@types/json-schema@7.0.15)(bufferutil@4.1.0)(openapi-types@12.1.3)(utf-8-validate@5.0.10)(zod@3.25.76) + json-schema-to-zod: 2.7.0 + zod: 4.6.5 + zod-from-json-schema: 0.5.2 + + '@mastra/server@1.67.0(@mastra/core@1.67.0(@bufbuild/protobuf@2.11.0)(@grpc/grpc-js@1.14.3)(ai@4.3.19(react@19.2.4)(zod@3.25.76))(bufferutil@4.1.0)(express@5.2.1)(rxjs@7.8.2)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76)': + dependencies: + '@mastra/core': 1.67.0(@bufbuild/protobuf@2.11.0)(@grpc/grpc-js@1.14.3)(ai@4.3.19(react@19.2.4)(zod@3.25.76))(bufferutil@4.1.0)(express@5.2.1)(rxjs@7.8.2)(utf-8-validate@5.0.10)(zod@3.25.76) hono: 4.12.10 zod: 3.25.76 + '@mermaid-js/parser@1.2.1': + dependencies: + '@chevrotain/types': 11.1.2 + '@meronex/icons@4.0.0(react@19.2.4)': dependencies: camelcase: 5.3.1 @@ -22827,6 +24231,36 @@ snapshots: '@microsoft/tsdoc@0.16.0': {} + '@modelcontextprotocol/client@2.0.0': + dependencies: + '@modelcontextprotocol/core': 2.0.0 + cross-spawn: 7.0.6 + eventsource: 3.0.7 + eventsource-parser: 3.0.6 + jose: 6.2.0 + pkce-challenge: 5.0.1 + zod: 4.6.5 + + '@modelcontextprotocol/core@2.0.0': + dependencies: + zod: 4.6.5 + + '@modelcontextprotocol/ext-apps@1.7.5(@modelcontextprotocol/sdk@1.30.0(@cfworker/json-schema@4.1.1)(zod@3.25.76))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@3.25.76)': + dependencies: + '@modelcontextprotocol/sdk': 1.30.0(@cfworker/json-schema@4.1.1)(zod@3.25.76) + '@standard-schema/spec': 1.1.0 + zod: 3.25.76 + optionalDependencies: + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + + '@modelcontextprotocol/node@2.0.0(@modelcontextprotocol/server@2.0.0)(hono@4.12.10)': + dependencies: + '@hono/node-server': 1.19.11(hono@4.12.10) + '@modelcontextprotocol/server': 2.0.0 + optionalDependencies: + hono: 4.12.10 + '@modelcontextprotocol/sdk@1.27.1(@cfworker/json-schema@4.1.1)(zod@3.25.76)': dependencies: '@hono/node-server': 1.19.11(hono@4.12.5) @@ -22851,6 +24285,47 @@ snapshots: transitivePeerDependencies: - supports-color + '@modelcontextprotocol/sdk@1.30.0(@cfworker/json-schema@4.1.1)(zod@3.25.76)': + dependencies: + '@hono/node-server': 1.19.11(hono@4.12.10) + ajv: 8.20.0 + ajv-formats: 3.0.1(ajv@8.20.0) + content-type: 1.0.5 + cors: 2.8.6 + cross-spawn: 7.0.6 + eventsource: 3.0.7 + eventsource-parser: 3.1.1 + express: 5.2.1 + express-rate-limit: 8.3.0(express@5.2.1) + hono: 4.12.10 + jose: 6.2.12 + json-schema-typed: 8.0.2 + pkce-challenge: 5.0.1 + raw-body: 3.0.2 + zod: 3.25.76 + zod-to-json-schema: 3.25.1(zod@3.25.76) + optionalDependencies: + '@cfworker/json-schema': 4.1.1 + transitivePeerDependencies: + - supports-color + + '@modelcontextprotocol/server-legacy@2.0.0(express@5.2.1)': + dependencies: + '@modelcontextprotocol/core': 2.0.0 + content-type: 1.0.5 + cors: 2.8.6 + express-rate-limit: 8.3.0(express@5.2.1) + pkce-challenge: 5.0.1 + raw-body: 3.0.2 + zod: 4.6.5 + optionalDependencies: + express: 5.2.1 + + '@modelcontextprotocol/server@2.0.0': + dependencies: + '@modelcontextprotocol/core': 2.0.0 + zod: 4.6.5 + '@mole-inc/bin-wrapper@8.0.1': dependencies: bin-check: 4.1.0 @@ -22988,6 +24463,9 @@ snapshots: optionalDependencies: '@types/react': 19.1.8 + '@napi-rs/lzma-linux-x64-gnu@1.5.1': + optional: true + '@napi-rs/nice-android-arm-eabi@1.1.1': optional: true @@ -23082,7 +24560,7 @@ snapshots: axios: 1.19.0(debug@4.4.3) rxjs: 7.8.2 - '@nestjs/cli@11.0.21(@swc/cli@0.3.14(@swc/core@1.5.7(@swc/helpers@0.5.13))(chokidar@4.0.3))(@swc/core@1.5.7(@swc/helpers@0.5.13))(@types/node@18.16.9)(esbuild@0.27.7)(prettier@2.8.8)': + '@nestjs/cli@11.0.21(@swc/cli@0.3.14(@swc/core@1.5.7(@swc/helpers@0.5.13))(chokidar@4.0.3))(@swc/core@1.5.7(@swc/helpers@0.5.13))(@types/node@18.16.9)(esbuild@0.28.2)(prettier@2.8.8)': dependencies: '@angular-devkit/core': 19.2.24(chokidar@4.0.3) '@angular-devkit/schematics': 19.2.24(chokidar@4.0.3) @@ -23093,14 +24571,14 @@ snapshots: chokidar: 4.0.3 cli-table3: 0.6.5 commander: 4.1.1 - fork-ts-checker-webpack-plugin: 9.1.0(typescript@5.9.3)(webpack@5.106.0(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.27.7)) + fork-ts-checker-webpack-plugin: 9.1.0(typescript@5.9.3)(webpack@5.106.0(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.28.2)) glob: 13.0.6 node-emoji: 1.11.0 ora: 5.4.1 tsconfig-paths: 4.2.0 tsconfig-paths-webpack-plugin: 4.2.0 typescript: 5.9.3 - webpack: 5.106.0(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.27.7) + webpack: 5.106.0(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.28.2) webpack-node-externals: 3.0.0 optionalDependencies: '@swc/cli': 0.3.14(@swc/core@1.5.7(@swc/helpers@0.5.13))(chokidar@4.0.3) @@ -23317,10 +24795,10 @@ snapshots: - utf-8-validate - zod - '@neynar/react@1.2.22(@farcaster/miniapp-sdk@0.2.3(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(swr@2.4.1(react@19.2.4))(typescript@5.5.4)': + '@neynar/react@1.2.22(@farcaster/miniapp-sdk@0.3.0(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(swr@2.4.1(react@19.2.4))(typescript@5.5.4)': dependencies: - '@farcaster/miniapp-sdk': 0.2.3(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76) - hls.js: 1.6.15 + '@farcaster/miniapp-sdk': 0.3.0(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76) + hls.js: 1.7.3 mipd: 0.0.7(typescript@5.5.4) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) @@ -24443,11 +25921,11 @@ snapshots: '@opentelemetry/api': 1.9.0 '@opentelemetry/core': 2.6.0(@opentelemetry/api@1.9.0) - '@optimize-lodash/rollup-plugin@5.1.0(rollup@4.59.0)': + '@optimize-lodash/rollup-plugin@5.1.0(rollup@4.63.3)': dependencies: '@optimize-lodash/transform': 3.0.6 - '@rollup/pluginutils': 5.3.0(rollup@4.59.0) - rollup: 4.59.0 + '@rollup/pluginutils': 5.3.0(rollup@4.63.3) + rollup: 4.63.3 '@optimize-lodash/transform@3.0.6': dependencies: @@ -24500,7 +25978,7 @@ snapshots: detect-libc: 2.1.2 is-glob: 4.0.3 node-addon-api: 7.1.1 - picomatch: 4.0.4 + picomatch: 4.0.5 optionalDependencies: '@parcel/watcher-android-arm64': 2.5.6 '@parcel/watcher-darwin-arm64': 2.5.6 @@ -24582,7 +26060,7 @@ snapshots: dependencies: playwright: 1.58.2 - '@pmmmwh/react-refresh-webpack-plugin@0.5.17(react-refresh@0.10.0)(type-fest@4.41.0)(webpack@5.105.4(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.27.7))': + '@pmmmwh/react-refresh-webpack-plugin@0.5.17(react-refresh@0.10.0)(type-fest@4.41.0)(webpack@5.105.4(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.28.2))': dependencies: ansi-html: 0.0.9 core-js-pure: 3.48.0 @@ -24592,7 +26070,7 @@ snapshots: react-refresh: 0.10.0 schema-utils: 4.3.3 source-map: 0.7.6 - webpack: 5.105.4(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.27.7) + webpack: 5.105.4(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.28.2) optionalDependencies: type-fest: 4.41.0 @@ -24604,13 +26082,15 @@ snapshots: dependencies: cross-spawn: 7.0.6 - '@posthog/core@1.7.1': + '@posthog/core@1.54.2': dependencies: - cross-spawn: 7.0.6 + '@posthog/types': 1.412.1 '@posthog/types@1.359.1': {} - '@postiz/wallets@0.0.1(@babel/runtime@7.28.6)(@react-native-async-storage/async-storage@1.24.0(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10))(@types/react@19.1.8)(@upstash/redis@1.36.3)(bs58@6.0.0)(bufferutil@4.1.0)(ioredis@5.10.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76)': + '@posthog/types@1.412.1': {} + + '@postiz/wallets@0.0.1(@babel/runtime@7.28.6)(@react-native-async-storage/async-storage@1.24.0(react-native@0.84.1(@babel/core@8.0.5)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10))(@types/react@19.1.8)(@upstash/redis@1.36.3)(bs58@6.0.0)(bufferutil@4.1.0)(ioredis@5.10.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(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.1.0)(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.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10)) @@ -24645,7 +26125,7 @@ snapshots: '@solana/wallet-adapter-torus': 0.11.32(@babel/runtime@7.28.6)(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10))(bufferutil@4.1.0)(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.1.0)(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.1.0)(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.84.1(@babel/core@7.29.0)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10))(@types/react@19.1.8)(@upstash/redis@1.36.3)(bufferutil@4.1.0)(ioredis@5.10.0)(react@19.2.4)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76) + '@solana/wallet-adapter-walletconnect': 0.1.21(@react-native-async-storage/async-storage@1.24.0(react-native@0.84.1(@babel/core@8.0.5)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10))(@types/react@19.1.8)(@upstash/redis@1.36.3)(bufferutil@4.1.0)(ioredis@5.10.0)(react@19.2.4)(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.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10)) '@solana/web3.js': 1.98.4(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10) transitivePeerDependencies: @@ -24681,6 +26161,8 @@ snapshots: - utf-8-validate - zod + '@preact/signals-core@1.14.4': {} + '@prisma/client@6.5.0(prisma@6.5.0(typescript@5.5.4))(typescript@5.5.4)': optionalDependencies: prisma: 6.5.0(typescript@5.5.4) @@ -24688,8 +26170,8 @@ snapshots: '@prisma/config@6.5.0': dependencies: - esbuild: 0.27.3 - esbuild-register: 3.6.0(esbuild@0.27.3) + esbuild: 0.28.2 + esbuild-register: 3.6.0(esbuild@0.28.2) transitivePeerDependencies: - supports-color @@ -24762,6 +26244,29 @@ snapshots: '@radix-ui/primitive@1.1.3': {} + '@radix-ui/primitive@1.1.7': {} + + '@radix-ui/react-arrow@1.1.15(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@radix-ui/react-primitive': 2.1.10(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + optionalDependencies: + '@types/react': 19.1.8 + '@types/react-dom': 19.1.6(@types/react@19.1.8) + + '@radix-ui/react-collection@1.1.15(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.5(@types/react@19.1.8)(react@19.2.4) + '@radix-ui/react-context': 1.2.2(@types/react@19.1.8)(react@19.2.4) + '@radix-ui/react-primitive': 2.1.10(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-slot': 1.3.3(@types/react@19.1.8)(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + optionalDependencies: + '@types/react': 19.1.8 + '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@radix-ui/react-compose-refs@1.0.0(react@19.2.4)': dependencies: '@babel/runtime': 7.28.6 @@ -24773,6 +26278,12 @@ snapshots: optionalDependencies: '@types/react': 19.1.8 + '@radix-ui/react-compose-refs@1.1.5(@types/react@19.1.8)(react@19.2.4)': + dependencies: + react: 19.2.4 + optionalDependencies: + '@types/react': 19.1.8 + '@radix-ui/react-context@1.0.0(react@19.2.4)': dependencies: '@babel/runtime': 7.28.6 @@ -24784,6 +26295,12 @@ snapshots: optionalDependencies: '@types/react': 19.1.8 + '@radix-ui/react-context@1.2.2(@types/react@19.1.8)(react@19.2.4)': + dependencies: + react: 19.2.4 + optionalDependencies: + '@types/react': 19.1.8 + '@radix-ui/react-dialog@1.0.0(@types/react@19.1.8)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: '@babel/runtime': 7.28.6 @@ -24833,6 +26350,12 @@ snapshots: '@babel/runtime': 7.28.6 react: 19.2.4 + '@radix-ui/react-direction@1.1.4(@types/react@19.1.8)(react@19.2.4)': + dependencies: + react: 19.2.4 + optionalDependencies: + '@types/react': 19.1.8 + '@radix-ui/react-dismissable-layer@1.0.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: '@babel/runtime': 7.28.6 @@ -24857,6 +26380,34 @@ snapshots: '@types/react': 19.1.8 '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@radix-ui/react-dismissable-layer@1.1.19(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@radix-ui/primitive': 1.1.7 + '@radix-ui/react-compose-refs': 1.1.5(@types/react@19.1.8)(react@19.2.4) + '@radix-ui/react-primitive': 2.1.10(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-callback-ref': 1.1.4(@types/react@19.1.8)(react@19.2.4) + '@radix-ui/react-use-effect-event': 0.0.5(@types/react@19.1.8)(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + optionalDependencies: + '@types/react': 19.1.8 + '@types/react-dom': 19.1.6(@types/react@19.1.8) + + '@radix-ui/react-dropdown-menu@2.1.24(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@radix-ui/primitive': 1.1.7 + '@radix-ui/react-compose-refs': 1.1.5(@types/react@19.1.8)(react@19.2.4) + '@radix-ui/react-context': 1.2.2(@types/react@19.1.8)(react@19.2.4) + '@radix-ui/react-id': 1.1.4(@types/react@19.1.8)(react@19.2.4) + '@radix-ui/react-menu': 2.1.24(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.10(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.6(@types/react@19.1.8)(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + optionalDependencies: + '@types/react': 19.1.8 + '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@radix-ui/react-focus-guards@1.0.0(react@19.2.4)': dependencies: '@babel/runtime': 7.28.6 @@ -24868,6 +26419,12 @@ snapshots: optionalDependencies: '@types/react': 19.1.8 + '@radix-ui/react-focus-guards@1.1.6(@types/react@19.1.8)(react@19.2.4)': + dependencies: + react: 19.2.4 + optionalDependencies: + '@types/react': 19.1.8 + '@radix-ui/react-focus-scope@1.0.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: '@babel/runtime': 7.28.6 @@ -24877,6 +26434,17 @@ snapshots: react: 19.2.4 react-dom: 19.2.4(react@19.2.4) + '@radix-ui/react-focus-scope@1.1.16(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.5(@types/react@19.1.8)(react@19.2.4) + '@radix-ui/react-primitive': 2.1.10(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-callback-ref': 1.1.4(@types/react@19.1.8)(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + optionalDependencies: + '@types/react': 19.1.8 + '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@radix-ui/react-focus-scope@1.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.8)(react@19.2.4) @@ -24901,6 +26469,13 @@ snapshots: optionalDependencies: '@types/react': 19.1.8 + '@radix-ui/react-id@1.1.4(@types/react@19.1.8)(react@19.2.4)': + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.4(@types/react@19.1.8)(react@19.2.4) + react: 19.2.4 + optionalDependencies: + '@types/react': 19.1.8 + '@radix-ui/react-label@2.1.8(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: '@radix-ui/react-primitive': 2.1.4(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) @@ -24910,6 +26485,50 @@ snapshots: '@types/react': 19.1.8 '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@radix-ui/react-menu@2.1.24(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@radix-ui/primitive': 1.1.7 + '@radix-ui/react-collection': 1.1.15(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-compose-refs': 1.1.5(@types/react@19.1.8)(react@19.2.4) + '@radix-ui/react-context': 1.2.2(@types/react@19.1.8)(react@19.2.4) + '@radix-ui/react-direction': 1.1.4(@types/react@19.1.8)(react@19.2.4) + '@radix-ui/react-dismissable-layer': 1.1.19(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-focus-guards': 1.1.6(@types/react@19.1.8)(react@19.2.4) + '@radix-ui/react-focus-scope': 1.1.16(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-id': 1.1.4(@types/react@19.1.8)(react@19.2.4) + '@radix-ui/react-popper': 1.3.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-portal': 1.1.17(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-presence': 1.1.10(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.10(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-roving-focus': 1.1.19(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-slot': 1.3.3(@types/react@19.1.8)(react@19.2.4) + '@radix-ui/react-use-callback-ref': 1.1.4(@types/react@19.1.8)(react@19.2.4) + aria-hidden: 1.2.6 + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + react-remove-scroll: 2.7.2(@types/react@19.1.8)(react@19.2.4) + optionalDependencies: + '@types/react': 19.1.8 + '@types/react-dom': 19.1.6(@types/react@19.1.8) + + '@radix-ui/react-popper@1.3.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@floating-ui/react-dom': 2.1.8(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-arrow': 1.1.15(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-compose-refs': 1.1.5(@types/react@19.1.8)(react@19.2.4) + '@radix-ui/react-context': 1.2.2(@types/react@19.1.8)(react@19.2.4) + '@radix-ui/react-primitive': 2.1.10(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-callback-ref': 1.1.4(@types/react@19.1.8)(react@19.2.4) + '@radix-ui/react-use-layout-effect': 1.1.4(@types/react@19.1.8)(react@19.2.4) + '@radix-ui/react-use-rect': 1.1.4(@types/react@19.1.8)(react@19.2.4) + '@radix-ui/react-use-size': 1.1.4(@types/react@19.1.8)(react@19.2.4) + '@radix-ui/rect': 1.1.3 + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + optionalDependencies: + '@types/react': 19.1.8 + '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@radix-ui/react-portal@1.0.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: '@babel/runtime': 7.28.6 @@ -24917,6 +26536,16 @@ snapshots: react: 19.2.4 react-dom: 19.2.4(react@19.2.4) + '@radix-ui/react-portal@1.1.17(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@radix-ui/react-primitive': 2.1.10(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-layout-effect': 1.1.4(@types/react@19.1.8)(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + optionalDependencies: + '@types/react': 19.1.8 + '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@radix-ui/react-portal@1.1.9(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) @@ -24935,6 +26564,15 @@ snapshots: react: 19.2.4 react-dom: 19.2.4(react@19.2.4) + '@radix-ui/react-presence@1.1.10(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.4(@types/react@19.1.8)(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + optionalDependencies: + '@types/react': 19.1.8 + '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@radix-ui/react-presence@1.1.5(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.8)(react@19.2.4) @@ -24959,6 +26597,15 @@ snapshots: react: 19.2.4 react-dom: 19.2.4(react@19.2.4) + '@radix-ui/react-primitive@2.1.10(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@radix-ui/react-slot': 1.3.3(@types/react@19.1.8)(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + optionalDependencies: + '@types/react': 19.1.8 + '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@radix-ui/react-primitive@2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: '@radix-ui/react-slot': 1.2.3(@types/react@19.1.8)(react@19.2.4) @@ -24977,6 +26624,25 @@ snapshots: '@types/react': 19.1.8 '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@radix-ui/react-roving-focus@1.1.19(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@radix-ui/primitive': 1.1.7 + '@radix-ui/react-collection': 1.1.15(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-compose-refs': 1.1.5(@types/react@19.1.8)(react@19.2.4) + '@radix-ui/react-context': 1.2.2(@types/react@19.1.8)(react@19.2.4) + '@radix-ui/react-direction': 1.1.4(@types/react@19.1.8)(react@19.2.4) + '@radix-ui/react-id': 1.1.4(@types/react@19.1.8)(react@19.2.4) + '@radix-ui/react-primitive': 2.1.10(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-callback-ref': 1.1.4(@types/react@19.1.8)(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.6(@types/react@19.1.8)(react@19.2.4) + '@radix-ui/react-use-is-hydrated': 0.1.3(@types/react@19.1.8)(react@19.2.4) + '@radix-ui/react-use-layout-effect': 1.1.4(@types/react@19.1.8)(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + optionalDependencies: + '@types/react': 19.1.8 + '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@radix-ui/react-scroll-area@1.0.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: '@babel/runtime': 7.28.6 @@ -25027,6 +26693,34 @@ snapshots: optionalDependencies: '@types/react': 19.1.8 + '@radix-ui/react-slot@1.3.3(@types/react@19.1.8)(react@19.2.4)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.5(@types/react@19.1.8)(react@19.2.4) + react: 19.2.4 + optionalDependencies: + '@types/react': 19.1.8 + + '@radix-ui/react-tooltip@1.2.16(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@radix-ui/primitive': 1.1.7 + '@radix-ui/react-compose-refs': 1.1.5(@types/react@19.1.8)(react@19.2.4) + '@radix-ui/react-context': 1.2.2(@types/react@19.1.8)(react@19.2.4) + '@radix-ui/react-dismissable-layer': 1.1.19(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-id': 1.1.4(@types/react@19.1.8)(react@19.2.4) + '@radix-ui/react-popper': 1.3.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-portal': 1.1.17(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-presence': 1.1.10(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 2.1.10(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-slot': 1.3.3(@types/react@19.1.8)(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.2.6(@types/react@19.1.8)(react@19.2.4) + '@radix-ui/react-use-layout-effect': 1.1.4(@types/react@19.1.8)(react@19.2.4) + '@radix-ui/react-visually-hidden': 1.2.11(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + optionalDependencies: + '@types/react': 19.1.8 + '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@radix-ui/react-use-callback-ref@1.0.0(react@19.2.4)': dependencies: '@babel/runtime': 7.28.6 @@ -25038,6 +26732,12 @@ snapshots: optionalDependencies: '@types/react': 19.1.8 + '@radix-ui/react-use-callback-ref@1.1.4(@types/react@19.1.8)(react@19.2.4)': + dependencies: + react: 19.2.4 + optionalDependencies: + '@types/react': 19.1.8 + '@radix-ui/react-use-controllable-state@1.0.0(react@19.2.4)': dependencies: '@babel/runtime': 7.28.6 @@ -25052,6 +26752,15 @@ snapshots: optionalDependencies: '@types/react': 19.1.8 + '@radix-ui/react-use-controllable-state@1.2.6(@types/react@19.1.8)(react@19.2.4)': + dependencies: + '@radix-ui/primitive': 1.1.7 + '@radix-ui/react-use-effect-event': 0.0.5(@types/react@19.1.8)(react@19.2.4) + '@radix-ui/react-use-layout-effect': 1.1.4(@types/react@19.1.8)(react@19.2.4) + react: 19.2.4 + optionalDependencies: + '@types/react': 19.1.8 + '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.1.8)(react@19.2.4)': dependencies: '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.8)(react@19.2.4) @@ -25059,6 +26768,13 @@ snapshots: optionalDependencies: '@types/react': 19.1.8 + '@radix-ui/react-use-effect-event@0.0.5(@types/react@19.1.8)(react@19.2.4)': + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.4(@types/react@19.1.8)(react@19.2.4) + react: 19.2.4 + optionalDependencies: + '@types/react': 19.1.8 + '@radix-ui/react-use-escape-keydown@1.0.0(react@19.2.4)': dependencies: '@babel/runtime': 7.28.6 @@ -25072,6 +26788,12 @@ snapshots: optionalDependencies: '@types/react': 19.1.8 + '@radix-ui/react-use-is-hydrated@0.1.3(@types/react@19.1.8)(react@19.2.4)': + dependencies: + react: 19.2.4 + optionalDependencies: + '@types/react': 19.1.8 + '@radix-ui/react-use-layout-effect@1.0.0(react@19.2.4)': dependencies: '@babel/runtime': 7.28.6 @@ -25083,6 +26805,37 @@ snapshots: optionalDependencies: '@types/react': 19.1.8 + '@radix-ui/react-use-layout-effect@1.1.4(@types/react@19.1.8)(react@19.2.4)': + dependencies: + react: 19.2.4 + optionalDependencies: + '@types/react': 19.1.8 + + '@radix-ui/react-use-rect@1.1.4(@types/react@19.1.8)(react@19.2.4)': + dependencies: + '@radix-ui/rect': 1.1.3 + react: 19.2.4 + optionalDependencies: + '@types/react': 19.1.8 + + '@radix-ui/react-use-size@1.1.4(@types/react@19.1.8)(react@19.2.4)': + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.4(@types/react@19.1.8)(react@19.2.4) + react: 19.2.4 + optionalDependencies: + '@types/react': 19.1.8 + + '@radix-ui/react-visually-hidden@1.2.11(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@radix-ui/react-primitive': 2.1.10(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + optionalDependencies: + '@types/react': 19.1.8 + '@types/react-dom': 19.1.6(@types/react@19.1.8) + + '@radix-ui/rect@1.1.3': {} + '@react-aria/focus@3.21.5(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: '@react-aria/interactions': 3.27.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4) @@ -25133,17 +26886,17 @@ snapshots: react-dom: 19.2.4(react@19.2.4) react-promise-suspense: 0.3.4 - '@react-native-async-storage/async-storage@1.24.0(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10))': + '@react-native-async-storage/async-storage@1.24.0(react-native@0.84.1(@babel/core@8.0.5)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10))': dependencies: merge-options: 3.0.4 - react-native: 0.84.1(@babel/core@7.29.0)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10) + react-native: 0.84.1(@babel/core@8.0.5)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10) optional: true '@react-native/assets-registry@0.84.1': {} - '@react-native/codegen@0.84.1(@babel/core@7.29.0)': + '@react-native/codegen@0.84.1(@babel/core@8.0.5)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 8.0.5 '@babel/parser': 7.29.0 hermes-parser: 0.32.0 invariant: 2.2.4 @@ -25200,12 +26953,12 @@ snapshots: '@react-native/normalize-colors@0.84.1': {} - '@react-native/virtualized-lists@0.84.1(@types/react@19.1.8)(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4)': + '@react-native/virtualized-lists@0.84.1(@types/react@19.1.8)(react-native@0.84.1(@babel/core@8.0.5)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4)': dependencies: invariant: 2.2.4 nullthrows: 1.1.1 react: 19.2.4 - react-native: 0.84.1(@babel/core@7.29.0)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10) + react-native: 0.84.1(@babel/core@8.0.5)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10) optionalDependencies: '@types/react': 19.1.8 @@ -25250,6 +27003,8 @@ snapshots: '@remirror/core-constants@3.0.0': {} + '@remix-run/node-fetch-server@0.13.3': {} + '@reown/appkit-common@1.7.2(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.22.4)': dependencies: big.js: 6.2.2 @@ -25272,11 +27027,11 @@ snapshots: - utf-8-validate - zod - '@reown/appkit-controllers@1.7.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@types/react@19.1.8)(@upstash/redis@1.36.3)(bufferutil@4.1.0)(ioredis@5.10.0)(react@19.2.4)(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.84.1(@babel/core@8.0.5)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@types/react@19.1.8)(@upstash/redis@1.36.3)(bufferutil@4.1.0)(ioredis@5.10.0)(react@19.2.4)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76)': dependencies: '@reown/appkit-common': 1.7.2(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76) '@reown/appkit-wallet': 1.7.2(bufferutil@4.1.0)(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.84.1(@babel/core@7.29.0)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@upstash/redis@1.36.3)(bufferutil@4.1.0)(ioredis@5.10.0)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76) + '@walletconnect/universal-provider': 2.19.1(@react-native-async-storage/async-storage@1.24.0(react-native@0.84.1(@babel/core@8.0.5)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@upstash/redis@1.36.3)(bufferutil@4.1.0)(ioredis@5.10.0)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76) valtio: 1.13.2(@types/react@19.1.8)(react@19.2.4) viem: 2.47.0(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76) transitivePeerDependencies: @@ -25311,12 +27066,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.84.1(@babel/core@7.29.0)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@types/react@19.1.8)(@upstash/redis@1.36.3)(bufferutil@4.1.0)(ioredis@5.10.0)(react@19.2.4)(typescript@5.5.4)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@19.1.8)(react@19.2.4))(zod@3.25.76)': + '@reown/appkit-scaffold-ui@1.7.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.84.1(@babel/core@8.0.5)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@types/react@19.1.8)(@upstash/redis@1.36.3)(bufferutil@4.1.0)(ioredis@5.10.0)(react@19.2.4)(typescript@5.5.4)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@19.1.8)(react@19.2.4))(zod@3.25.76)': dependencies: '@reown/appkit-common': 1.7.2(bufferutil@4.1.0)(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.84.1(@babel/core@7.29.0)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@types/react@19.1.8)(@upstash/redis@1.36.3)(bufferutil@4.1.0)(ioredis@5.10.0)(react@19.2.4)(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.84.1(@babel/core@7.29.0)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@types/react@19.1.8)(@upstash/redis@1.36.3)(bufferutil@4.1.0)(ioredis@5.10.0)(react@19.2.4)(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.84.1(@babel/core@7.29.0)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@types/react@19.1.8)(@upstash/redis@1.36.3)(bufferutil@4.1.0)(ioredis@5.10.0)(react@19.2.4)(typescript@5.5.4)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@19.1.8)(react@19.2.4))(zod@3.25.76) + '@reown/appkit-controllers': 1.7.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.84.1(@babel/core@8.0.5)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@types/react@19.1.8)(@upstash/redis@1.36.3)(bufferutil@4.1.0)(ioredis@5.10.0)(react@19.2.4)(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.84.1(@babel/core@8.0.5)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@types/react@19.1.8)(@upstash/redis@1.36.3)(bufferutil@4.1.0)(ioredis@5.10.0)(react@19.2.4)(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.84.1(@babel/core@8.0.5)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@types/react@19.1.8)(@upstash/redis@1.36.3)(bufferutil@4.1.0)(ioredis@5.10.0)(react@19.2.4)(typescript@5.5.4)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@19.1.8)(react@19.2.4))(zod@3.25.76) '@reown/appkit-wallet': 1.7.2(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10) lit: 3.1.0 transitivePeerDependencies: @@ -25348,10 +27103,10 @@ snapshots: - valtio - zod - '@reown/appkit-ui@1.7.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@types/react@19.1.8)(@upstash/redis@1.36.3)(bufferutil@4.1.0)(ioredis@5.10.0)(react@19.2.4)(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.84.1(@babel/core@8.0.5)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@types/react@19.1.8)(@upstash/redis@1.36.3)(bufferutil@4.1.0)(ioredis@5.10.0)(react@19.2.4)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76)': dependencies: '@reown/appkit-common': 1.7.2(bufferutil@4.1.0)(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.84.1(@babel/core@7.29.0)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@types/react@19.1.8)(@upstash/redis@1.36.3)(bufferutil@4.1.0)(ioredis@5.10.0)(react@19.2.4)(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.84.1(@babel/core@8.0.5)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@types/react@19.1.8)(@upstash/redis@1.36.3)(bufferutil@4.1.0)(ioredis@5.10.0)(react@19.2.4)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76) '@reown/appkit-wallet': 1.7.2(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10) lit: 3.1.0 qrcode: 1.5.3 @@ -25383,14 +27138,14 @@ snapshots: - utf-8-validate - zod - '@reown/appkit-utils@1.7.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@types/react@19.1.8)(@upstash/redis@1.36.3)(bufferutil@4.1.0)(ioredis@5.10.0)(react@19.2.4)(typescript@5.5.4)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@19.1.8)(react@19.2.4))(zod@3.25.76)': + '@reown/appkit-utils@1.7.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.84.1(@babel/core@8.0.5)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@types/react@19.1.8)(@upstash/redis@1.36.3)(bufferutil@4.1.0)(ioredis@5.10.0)(react@19.2.4)(typescript@5.5.4)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@19.1.8)(react@19.2.4))(zod@3.25.76)': dependencies: '@reown/appkit-common': 1.7.2(bufferutil@4.1.0)(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.84.1(@babel/core@7.29.0)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@types/react@19.1.8)(@upstash/redis@1.36.3)(bufferutil@4.1.0)(ioredis@5.10.0)(react@19.2.4)(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.84.1(@babel/core@8.0.5)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@types/react@19.1.8)(@upstash/redis@1.36.3)(bufferutil@4.1.0)(ioredis@5.10.0)(react@19.2.4)(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.1.0)(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.84.1(@babel/core@7.29.0)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@upstash/redis@1.36.3)(bufferutil@4.1.0)(ioredis@5.10.0)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76) + '@walletconnect/universal-provider': 2.19.1(@react-native-async-storage/async-storage@1.24.0(react-native@0.84.1(@babel/core@8.0.5)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@upstash/redis@1.36.3)(bufferutil@4.1.0)(ioredis@5.10.0)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76) valtio: 1.13.2(@types/react@19.1.8)(react@19.2.4) viem: 2.47.0(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76) transitivePeerDependencies: @@ -25432,17 +27187,17 @@ snapshots: - typescript - utf-8-validate - '@reown/appkit@1.7.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@types/react@19.1.8)(@upstash/redis@1.36.3)(bufferutil@4.1.0)(ioredis@5.10.0)(react@19.2.4)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76)': + '@reown/appkit@1.7.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.84.1(@babel/core@8.0.5)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@types/react@19.1.8)(@upstash/redis@1.36.3)(bufferutil@4.1.0)(ioredis@5.10.0)(react@19.2.4)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76)': dependencies: '@reown/appkit-common': 1.7.2(bufferutil@4.1.0)(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.84.1(@babel/core@7.29.0)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@types/react@19.1.8)(@upstash/redis@1.36.3)(bufferutil@4.1.0)(ioredis@5.10.0)(react@19.2.4)(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.84.1(@babel/core@8.0.5)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@types/react@19.1.8)(@upstash/redis@1.36.3)(bufferutil@4.1.0)(ioredis@5.10.0)(react@19.2.4)(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.84.1(@babel/core@7.29.0)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@types/react@19.1.8)(@upstash/redis@1.36.3)(bufferutil@4.1.0)(ioredis@5.10.0)(react@19.2.4)(typescript@5.5.4)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@19.1.8)(react@19.2.4))(zod@3.25.76) - '@reown/appkit-ui': 1.7.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@types/react@19.1.8)(@upstash/redis@1.36.3)(bufferutil@4.1.0)(ioredis@5.10.0)(react@19.2.4)(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.84.1(@babel/core@7.29.0)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@types/react@19.1.8)(@upstash/redis@1.36.3)(bufferutil@4.1.0)(ioredis@5.10.0)(react@19.2.4)(typescript@5.5.4)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@19.1.8)(react@19.2.4))(zod@3.25.76) + '@reown/appkit-scaffold-ui': 1.7.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.84.1(@babel/core@8.0.5)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@types/react@19.1.8)(@upstash/redis@1.36.3)(bufferutil@4.1.0)(ioredis@5.10.0)(react@19.2.4)(typescript@5.5.4)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@19.1.8)(react@19.2.4))(zod@3.25.76) + '@reown/appkit-ui': 1.7.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.84.1(@babel/core@8.0.5)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@types/react@19.1.8)(@upstash/redis@1.36.3)(bufferutil@4.1.0)(ioredis@5.10.0)(react@19.2.4)(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.84.1(@babel/core@8.0.5)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@types/react@19.1.8)(@upstash/redis@1.36.3)(bufferutil@4.1.0)(ioredis@5.10.0)(react@19.2.4)(typescript@5.5.4)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@19.1.8)(react@19.2.4))(zod@3.25.76) '@reown/appkit-wallet': 1.7.2(bufferutil@4.1.0)(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.84.1(@babel/core@7.29.0)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@upstash/redis@1.36.3)(ioredis@5.10.0) - '@walletconnect/universal-provider': 2.19.1(@react-native-async-storage/async-storage@1.24.0(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@upstash/redis@1.36.3)(bufferutil@4.1.0)(ioredis@5.10.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.84.1(@babel/core@8.0.5)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@upstash/redis@1.36.3)(ioredis@5.10.0) + '@walletconnect/universal-provider': 2.19.1(@react-native-async-storage/async-storage@1.24.0(react-native@0.84.1(@babel/core@8.0.5)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@upstash/redis@1.36.3)(bufferutil@4.1.0)(ioredis@5.10.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@19.1.8)(react@19.2.4) viem: 2.47.0(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76) @@ -25520,144 +27275,223 @@ snapshots: '@rolldown/pluginutils@1.0.1': {} - '@rollup/plugin-alias@6.0.0(rollup@4.59.0)': - optionalDependencies: - rollup: 4.59.0 - '@rollup/plugin-commonjs@28.0.1(rollup@4.59.0)': dependencies: '@rollup/pluginutils': 5.3.0(rollup@4.59.0) commondir: 1.0.1 estree-walker: 2.0.2 - fdir: 6.5.0(picomatch@4.0.4) + fdir: 6.5.0(picomatch@4.0.5) is-reference: 1.2.1 magic-string: 0.30.21 - picomatch: 4.0.4 + picomatch: 4.0.5 optionalDependencies: rollup: 4.59.0 - '@rollup/plugin-commonjs@29.0.2(rollup@4.59.0)': + '@rollup/plugin-commonjs@29.0.2(rollup@4.63.3)': dependencies: - '@rollup/pluginutils': 5.3.0(rollup@4.59.0) + '@rollup/pluginutils': 5.3.0(rollup@4.63.3) commondir: 1.0.1 estree-walker: 2.0.2 - fdir: 6.5.0(picomatch@4.0.4) + fdir: 6.5.0(picomatch@4.0.5) is-reference: 1.2.1 magic-string: 0.30.21 - picomatch: 4.0.4 + picomatch: 4.0.5 optionalDependencies: - rollup: 4.59.0 + rollup: 4.63.3 - '@rollup/plugin-esm-shim@0.1.8(rollup@4.59.0)': + '@rollup/plugin-esm-shim@0.1.8(rollup@4.63.3)': dependencies: magic-string: 0.30.21 mlly: 1.8.1 optionalDependencies: - rollup: 4.59.0 + rollup: 4.63.3 - '@rollup/plugin-json@6.1.0(rollup@4.59.0)': + '@rollup/plugin-json@6.1.0(rollup@4.63.3)': dependencies: - '@rollup/pluginutils': 5.3.0(rollup@4.59.0) + '@rollup/pluginutils': 5.3.0(rollup@4.63.3) optionalDependencies: - rollup: 4.59.0 + rollup: 4.63.3 - '@rollup/plugin-node-resolve@16.0.3(rollup@4.59.0)': + '@rollup/plugin-node-resolve@16.0.3(rollup@4.63.3)': dependencies: - '@rollup/pluginutils': 5.3.0(rollup@4.59.0) + '@rollup/pluginutils': 5.3.0(rollup@4.63.3) '@types/resolve': 1.20.2 deepmerge: 4.3.1 is-module: 1.0.0 resolve: 1.22.11 optionalDependencies: - rollup: 4.59.0 + rollup: 4.63.3 - '@rollup/plugin-virtual@3.0.2(rollup@4.59.0)': + '@rollup/plugin-virtual@3.0.2(rollup@4.63.3)': optionalDependencies: - rollup: 4.59.0 + rollup: 4.63.3 '@rollup/pluginutils@5.3.0(rollup@4.59.0)': dependencies: '@types/estree': 1.0.8 estree-walker: 2.0.2 - picomatch: 4.0.4 + picomatch: 4.0.5 optionalDependencies: rollup: 4.59.0 + '@rollup/pluginutils@5.3.0(rollup@4.63.3)': + dependencies: + '@types/estree': 1.0.8 + estree-walker: 2.0.2 + picomatch: 4.0.5 + optionalDependencies: + rollup: 4.63.3 + '@rollup/rollup-android-arm-eabi@4.59.0': optional: true + '@rollup/rollup-android-arm-eabi@4.63.3': + optional: true + '@rollup/rollup-android-arm64@4.59.0': optional: true + '@rollup/rollup-android-arm64@4.63.3': + optional: true + '@rollup/rollup-darwin-arm64@4.59.0': optional: true + '@rollup/rollup-darwin-arm64@4.63.3': + optional: true + '@rollup/rollup-darwin-x64@4.59.0': optional: true + '@rollup/rollup-darwin-x64@4.63.3': + optional: true + '@rollup/rollup-freebsd-arm64@4.59.0': optional: true + '@rollup/rollup-freebsd-arm64@4.63.3': + optional: true + '@rollup/rollup-freebsd-x64@4.59.0': optional: true + '@rollup/rollup-freebsd-x64@4.63.3': + optional: true + '@rollup/rollup-linux-arm-gnueabihf@4.59.0': optional: true + '@rollup/rollup-linux-arm-gnueabihf@4.63.3': + optional: true + '@rollup/rollup-linux-arm-musleabihf@4.59.0': optional: true + '@rollup/rollup-linux-arm-musleabihf@4.63.3': + optional: true + '@rollup/rollup-linux-arm64-gnu@4.59.0': optional: true + '@rollup/rollup-linux-arm64-gnu@4.63.3': + optional: true + '@rollup/rollup-linux-arm64-musl@4.59.0': optional: true + '@rollup/rollup-linux-arm64-musl@4.63.3': + optional: true + '@rollup/rollup-linux-loong64-gnu@4.59.0': optional: true + '@rollup/rollup-linux-loong64-gnu@4.63.3': + optional: true + '@rollup/rollup-linux-loong64-musl@4.59.0': optional: true + '@rollup/rollup-linux-loong64-musl@4.63.3': + optional: true + '@rollup/rollup-linux-ppc64-gnu@4.59.0': optional: true + '@rollup/rollup-linux-ppc64-gnu@4.63.3': + optional: true + '@rollup/rollup-linux-ppc64-musl@4.59.0': optional: true + '@rollup/rollup-linux-ppc64-musl@4.63.3': + optional: true + '@rollup/rollup-linux-riscv64-gnu@4.59.0': optional: true + '@rollup/rollup-linux-riscv64-gnu@4.63.3': + optional: true + '@rollup/rollup-linux-riscv64-musl@4.59.0': optional: true + '@rollup/rollup-linux-riscv64-musl@4.63.3': + optional: true + '@rollup/rollup-linux-s390x-gnu@4.59.0': optional: true + '@rollup/rollup-linux-s390x-gnu@4.63.3': + optional: true + '@rollup/rollup-linux-x64-gnu@4.59.0': optional: true + '@rollup/rollup-linux-x64-gnu@4.63.3': + optional: true + '@rollup/rollup-linux-x64-musl@4.59.0': optional: true + '@rollup/rollup-linux-x64-musl@4.63.3': + optional: true + '@rollup/rollup-openbsd-x64@4.59.0': optional: true + '@rollup/rollup-openbsd-x64@4.63.3': + optional: true + '@rollup/rollup-openharmony-arm64@4.59.0': optional: true + '@rollup/rollup-openharmony-arm64@4.63.3': + optional: true + '@rollup/rollup-win32-arm64-msvc@4.59.0': optional: true + '@rollup/rollup-win32-arm64-msvc@4.63.3': + optional: true + '@rollup/rollup-win32-ia32-msvc@4.59.0': optional: true + '@rollup/rollup-win32-ia32-msvc@4.63.3': + optional: true + '@rollup/rollup-win32-x64-gnu@4.59.0': optional: true + '@rollup/rollup-win32-x64-gnu@4.63.3': + optional: true + '@rollup/rollup-win32-x64-msvc@4.59.0': optional: true + '@rollup/rollup-win32-x64-msvc@4.63.3': + optional: true + '@rtsao/scc@1.1.0': {} '@scarf/scarf@1.4.0': {} @@ -25848,7 +27682,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@sentry/nextjs@10.45.0(@opentelemetry/context-async-hooks@2.6.0(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.6.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(next@16.3.1(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(@types/node@18.16.9)(babel-plugin-macros@3.1.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.3))(react@19.2.4)(webpack@5.105.4(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.27.7))': + '@sentry/nextjs@10.45.0(@opentelemetry/context-async-hooks@2.6.0(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.6.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(next@16.3.1(@babel/core@8.0.5)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(@types/node@18.16.9)(babel-plugin-macros@3.1.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.3))(react@19.2.4)(webpack@5.105.4(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.28.2))': dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/semantic-conventions': 1.40.0 @@ -25860,8 +27694,8 @@ snapshots: '@sentry/opentelemetry': 10.45.0(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@2.6.0(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.6.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.40.0) '@sentry/react': 10.45.0(react@19.2.4) '@sentry/vercel-edge': 10.45.0 - '@sentry/webpack-plugin': 5.1.1(webpack@5.105.4(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.27.7)) - next: 16.3.1(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(@types/node@18.16.9)(babel-plugin-macros@3.1.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.3) + '@sentry/webpack-plugin': 5.1.1(webpack@5.105.4(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.28.2)) + next: 16.3.1(@babel/core@8.0.5)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(@types/node@18.16.9)(babel-plugin-macros@3.1.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.3) rollup: 4.59.0 stacktrace-parser: 0.1.11 transitivePeerDependencies: @@ -25956,15 +27790,48 @@ snapshots: '@opentelemetry/resources': 2.6.0(@opentelemetry/api@1.9.0) '@sentry/core': 10.45.0 - '@sentry/webpack-plugin@5.1.1(webpack@5.105.4(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.27.7))': + '@sentry/webpack-plugin@5.1.1(webpack@5.105.4(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.28.2))': dependencies: '@sentry/bundler-plugin-core': 5.1.1 uuid: 9.0.1 - webpack: 5.105.4(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.27.7) + webpack: 5.105.4(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.28.2) transitivePeerDependencies: - encoding - supports-color + '@shikijs/core@3.23.0': + dependencies: + '@shikijs/types': 3.23.0 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + hast-util-to-html: 9.0.5 + + '@shikijs/engine-javascript@3.23.0': + dependencies: + '@shikijs/types': 3.23.0 + '@shikijs/vscode-textmate': 10.0.2 + oniguruma-to-es: 4.3.6 + + '@shikijs/engine-oniguruma@3.23.0': + dependencies: + '@shikijs/types': 3.23.0 + '@shikijs/vscode-textmate': 10.0.2 + + '@shikijs/langs@3.23.0': + dependencies: + '@shikijs/types': 3.23.0 + + '@shikijs/themes@3.23.0': + dependencies: + '@shikijs/types': 3.23.0 + + '@shikijs/types@3.23.0': + dependencies: + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + + '@shikijs/vscode-textmate@10.0.2': {} + '@sinclair/typebox@0.27.10': {} '@sindresorhus/is@4.6.0': {} @@ -25988,9 +27855,77 @@ snapshots: dependencies: '@sinonjs/commons': 3.0.1 + '@slack/bolt@4.7.3(@types/express@4.17.25)(bufferutil@4.1.0)(utf-8-validate@5.0.10)': + dependencies: + '@slack/logger': 4.0.1 + '@slack/oauth': 3.0.5 + '@slack/socket-mode': 2.0.7(bufferutil@4.1.0)(utf-8-validate@5.0.10) + '@slack/types': 2.22.0 + '@slack/web-api': 7.19.0 + '@types/express': 4.17.25 + axios: 1.19.0(debug@4.4.3) + express: 5.2.1 + path-to-regexp: 8.4.2 + raw-body: 3.0.2 + tsscmp: 1.0.6 + transitivePeerDependencies: + - bufferutil + - debug + - supports-color + - utf-8-validate + + '@slack/logger@4.0.1': + dependencies: + '@types/node': 18.16.9 + + '@slack/oauth@3.0.5': + dependencies: + '@slack/logger': 4.0.1 + '@slack/web-api': 7.19.0 + '@types/jsonwebtoken': 9.0.10 + '@types/node': 18.16.9 + jsonwebtoken: 9.0.3 + transitivePeerDependencies: + - debug + - supports-color + + '@slack/socket-mode@2.0.7(bufferutil@4.1.0)(utf-8-validate@5.0.10)': + dependencies: + '@slack/logger': 4.0.1 + '@slack/web-api': 7.19.0 + '@types/node': 18.16.9 + '@types/ws': 8.18.1 + eventemitter3: 5.0.4 + ws: 8.21.3(bufferutil@4.1.0)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - bufferutil + - debug + - supports-color + - utf-8-validate + + '@slack/types@2.22.0': {} + + '@slack/web-api@7.19.0': + dependencies: + '@slack/logger': 4.0.1 + '@slack/types': 2.22.0 + '@types/node': 18.16.9 + '@types/retry': 0.12.0 + axios: 1.19.0(debug@4.4.3) + eventemitter3: 5.0.4 + form-data: 4.0.6 + is-electron: 2.2.2 + is-stream: 2.0.1 + p-queue: 6.6.2 + p-retry: 4.6.2 + retry: 0.13.1 + transitivePeerDependencies: + - debug + - supports-color + '@smithy/abort-controller@4.2.11': dependencies: - '@smithy/types': 4.13.0 + '@smithy/types': 4.18.0 tslib: 2.8.1 '@smithy/chunked-blob-reader-native@4.2.3': @@ -26035,7 +27970,7 @@ snapshots: '@smithy/eventstream-codec@4.2.11': dependencies: '@aws-crypto/crc32': 5.2.0 - '@smithy/types': 4.13.0 + '@smithy/types': 4.18.0 '@smithy/util-hex-encoding': 4.2.2 tslib: 2.8.1 @@ -26219,6 +28154,10 @@ snapshots: dependencies: tslib: 2.8.1 + '@smithy/types@4.18.0': + dependencies: + tslib: 2.8.1 + '@smithy/url-parser@4.2.11': dependencies: '@smithy/querystring-parser': 4.2.11 @@ -26328,9 +28267,9 @@ snapshots: '@socket.io/component-emitter@3.1.2': {} - '@solana-mobile/mobile-wallet-adapter-protocol-web3js@2.2.5(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4)(typescript@5.5.4)': + '@solana-mobile/mobile-wallet-adapter-protocol-web3js@2.2.5(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(react-native@0.84.1(@babel/core@8.0.5)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4)(typescript@5.5.4)': dependencies: - '@solana-mobile/mobile-wallet-adapter-protocol': 2.2.5(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10))(bs58@5.0.0)(fastestsmallesttextencoderdecoder@1.0.22)(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4)(typescript@5.5.4) + '@solana-mobile/mobile-wallet-adapter-protocol': 2.2.5(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10))(bs58@5.0.0)(fastestsmallesttextencoderdecoder@1.0.22)(react-native@0.84.1(@babel/core@8.0.5)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4)(typescript@5.5.4) '@solana/web3.js': 1.98.4(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10) bs58: 5.0.0 js-base64: 3.7.8 @@ -26341,14 +28280,14 @@ snapshots: - react-native - typescript - '@solana-mobile/mobile-wallet-adapter-protocol@2.2.5(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10))(bs58@5.0.0)(fastestsmallesttextencoderdecoder@1.0.22)(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4)(typescript@5.5.4)': + '@solana-mobile/mobile-wallet-adapter-protocol@2.2.5(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10))(bs58@5.0.0)(fastestsmallesttextencoderdecoder@1.0.22)(react-native@0.84.1(@babel/core@8.0.5)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4)(typescript@5.5.4)': dependencies: '@solana/codecs-strings': 4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.5.4) '@solana/wallet-standard': 1.1.4(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10))(bs58@5.0.0)(react@19.2.4) '@solana/wallet-standard-util': 1.1.2 '@wallet-standard/core': 1.1.1 js-base64: 3.7.8 - react-native: 0.84.1(@babel/core@7.29.0)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10) + react-native: 0.84.1(@babel/core@8.0.5)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10) transitivePeerDependencies: - '@solana/wallet-adapter-base' - '@solana/web3.js' @@ -26357,25 +28296,25 @@ snapshots: - react - typescript - '@solana-mobile/wallet-adapter-mobile@2.2.5(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4)(typescript@5.5.4)': + '@solana-mobile/wallet-adapter-mobile@2.2.5(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(react-native@0.84.1(@babel/core@8.0.5)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4)(typescript@5.5.4)': dependencies: - '@solana-mobile/mobile-wallet-adapter-protocol-web3js': 2.2.5(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4)(typescript@5.5.4) - '@solana-mobile/wallet-standard-mobile': 0.4.4(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4)(typescript@5.5.4) + '@solana-mobile/mobile-wallet-adapter-protocol-web3js': 2.2.5(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(react-native@0.84.1(@babel/core@8.0.5)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4)(typescript@5.5.4) + '@solana-mobile/wallet-standard-mobile': 0.4.4(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(react-native@0.84.1(@babel/core@8.0.5)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4)(typescript@5.5.4) '@solana/wallet-adapter-base': 0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10)) '@solana/wallet-standard-features': 1.3.0 '@solana/web3.js': 1.98.4(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10) js-base64: 3.7.8 optionalDependencies: - '@react-native-async-storage/async-storage': 1.24.0(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)) + '@react-native-async-storage/async-storage': 1.24.0(react-native@0.84.1(@babel/core@8.0.5)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)) transitivePeerDependencies: - fastestsmallesttextencoderdecoder - react - react-native - typescript - '@solana-mobile/wallet-standard-mobile@0.4.4(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4)(typescript@5.5.4)': + '@solana-mobile/wallet-standard-mobile@0.4.4(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(react-native@0.84.1(@babel/core@8.0.5)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4)(typescript@5.5.4)': dependencies: - '@solana-mobile/mobile-wallet-adapter-protocol': 2.2.5(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10))(bs58@5.0.0)(fastestsmallesttextencoderdecoder@1.0.22)(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4)(typescript@5.5.4) + '@solana-mobile/mobile-wallet-adapter-protocol': 2.2.5(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10))(bs58@5.0.0)(fastestsmallesttextencoderdecoder@1.0.22)(react-native@0.84.1(@babel/core@8.0.5)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4)(typescript@5.5.4) '@solana/wallet-standard-chains': 1.1.1 '@solana/wallet-standard-features': 1.3.0 '@wallet-standard/base': 1.1.0 @@ -26447,9 +28386,9 @@ snapshots: '@solana/wallet-adapter-base': 0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10)) '@solana/web3.js': 1.98.4(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10) - '@solana/wallet-adapter-base-ui@0.1.6(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10))(bs58@6.0.0)(fastestsmallesttextencoderdecoder@1.0.22)(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4)(typescript@5.5.4)': + '@solana/wallet-adapter-base-ui@0.1.6(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10))(bs58@6.0.0)(fastestsmallesttextencoderdecoder@1.0.22)(react-native@0.84.1(@babel/core@8.0.5)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4)(typescript@5.5.4)': dependencies: - '@solana/wallet-adapter-react': 0.15.39(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10))(bs58@6.0.0)(fastestsmallesttextencoderdecoder@1.0.22)(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4)(typescript@5.5.4) + '@solana/wallet-adapter-react': 0.15.39(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10))(bs58@6.0.0)(fastestsmallesttextencoderdecoder@1.0.22)(react-native@0.84.1(@babel/core@8.0.5)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4)(typescript@5.5.4) '@solana/web3.js': 1.98.4(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10) react: 19.2.4 transitivePeerDependencies: @@ -26583,11 +28522,11 @@ snapshots: '@solana/wallet-adapter-base': 0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10)) '@solana/web3.js': 1.98.4(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10) - '@solana/wallet-adapter-react-ui@0.9.39(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10))(bs58@6.0.0)(fastestsmallesttextencoderdecoder@1.0.22)(react-dom@19.2.4(react@19.2.4))(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4)(typescript@5.5.4)': + '@solana/wallet-adapter-react-ui@0.9.39(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10))(bs58@6.0.0)(fastestsmallesttextencoderdecoder@1.0.22)(react-dom@19.2.4(react@19.2.4))(react-native@0.84.1(@babel/core@8.0.5)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4)(typescript@5.5.4)': dependencies: '@solana/wallet-adapter-base': 0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10)) - '@solana/wallet-adapter-base-ui': 0.1.6(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10))(bs58@6.0.0)(fastestsmallesttextencoderdecoder@1.0.22)(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4)(typescript@5.5.4) - '@solana/wallet-adapter-react': 0.15.39(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10))(bs58@6.0.0)(fastestsmallesttextencoderdecoder@1.0.22)(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4)(typescript@5.5.4) + '@solana/wallet-adapter-base-ui': 0.1.6(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10))(bs58@6.0.0)(fastestsmallesttextencoderdecoder@1.0.22)(react-native@0.84.1(@babel/core@8.0.5)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4)(typescript@5.5.4) + '@solana/wallet-adapter-react': 0.15.39(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10))(bs58@6.0.0)(fastestsmallesttextencoderdecoder@1.0.22)(react-native@0.84.1(@babel/core@8.0.5)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4)(typescript@5.5.4) '@solana/web3.js': 1.98.4(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) @@ -26597,9 +28536,9 @@ snapshots: - react-native - typescript - '@solana/wallet-adapter-react@0.15.39(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10))(bs58@6.0.0)(fastestsmallesttextencoderdecoder@1.0.22)(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4)(typescript@5.5.4)': + '@solana/wallet-adapter-react@0.15.39(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10))(bs58@6.0.0)(fastestsmallesttextencoderdecoder@1.0.22)(react-native@0.84.1(@babel/core@8.0.5)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4)(typescript@5.5.4)': dependencies: - '@solana-mobile/wallet-adapter-mobile': 2.2.5(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4)(typescript@5.5.4) + '@solana-mobile/wallet-adapter-mobile': 2.2.5(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(react-native@0.84.1(@babel/core@8.0.5)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4)(typescript@5.5.4) '@solana/wallet-adapter-base': 0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10)) '@solana/wallet-standard-wallet-adapter-react': 1.1.4(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10))(bs58@6.0.0)(react@19.2.4) '@solana/web3.js': 1.98.4(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10) @@ -26691,11 +28630,11 @@ snapshots: '@solana/wallet-standard-util': 1.1.2 '@solana/web3.js': 1.98.4(bufferutil@4.1.0)(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.84.1(@babel/core@7.29.0)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10))(@types/react@19.1.8)(@upstash/redis@1.36.3)(bufferutil@4.1.0)(ioredis@5.10.0)(react@19.2.4)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76)': + '@solana/wallet-adapter-walletconnect@0.1.21(@react-native-async-storage/async-storage@1.24.0(react-native@0.84.1(@babel/core@8.0.5)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10))(@types/react@19.1.8)(@upstash/redis@1.36.3)(bufferutil@4.1.0)(ioredis@5.10.0)(react@19.2.4)(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.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10)) '@solana/web3.js': 1.98.4(bufferutil@4.1.0)(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.84.1(@babel/core@7.29.0)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10))(@types/react@19.1.8)(@upstash/redis@1.36.3)(bufferutil@4.1.0)(ioredis@5.10.0)(react@19.2.4)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76) + '@walletconnect/solana-adapter': 0.0.8(@react-native-async-storage/async-storage@1.24.0(react-native@0.84.1(@babel/core@8.0.5)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10))(@types/react@19.1.8)(@upstash/redis@1.36.3)(bufferutil@4.1.0)(ioredis@5.10.0)(react@19.2.4)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -26857,23 +28796,6 @@ snapshots: eventemitter3: 5.0.4 uuid: 9.0.1 - '@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76)': - dependencies: - '@standard-schema/spec': 1.1.0 - '@types/json-schema': 7.0.15 - quansync: 0.2.11 - optionalDependencies: - zod: 3.25.76 - zod-to-json-schema: 3.25.1(zod@3.25.76) - - '@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@3.25.76)': - dependencies: - '@standard-community/standard-json': 0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76) - '@standard-schema/spec': 1.1.0 - openapi-types: 12.1.3 - optionalDependencies: - zod: 3.25.76 - '@standard-schema/spec@1.1.0': {} '@stripe/react-stripe-js@5.6.1(@stripe/stripe-js@8.9.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': @@ -27159,12 +29081,19 @@ snapshots: postcss: 8.5.26 tailwindcss: 4.2.1 - '@tailwindcss/vite@4.2.1(vite@8.2.1(@types/node@18.16.9)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3))': + '@tailwindcss/vite@4.2.1(vite@8.2.1(@types/node@18.16.9)(esbuild@0.28.2)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.1))': dependencies: '@tailwindcss/node': 4.2.1 '@tailwindcss/oxide': 4.2.1 tailwindcss: 4.2.1 - vite: 8.2.1(@types/node@18.16.9)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3) + vite: 8.2.1(@types/node@18.16.9)(esbuild@0.28.2)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.1) + + '@tanstack/devtools-event-client@0.4.4': {} + + '@tanstack/pacer@0.20.1': + dependencies: + '@tanstack/devtools-event-client': 0.4.4 + '@tanstack/store': 0.9.3 '@tanstack/react-virtual@3.13.21(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: @@ -27172,6 +29101,8 @@ snapshots: react: 19.2.4 react-dom: 19.2.4(react@19.2.4) + '@tanstack/store@0.9.3': {} + '@tanstack/virtual-core@3.13.21': {} '@temporalio/activity@1.15.0': @@ -27215,7 +29146,7 @@ snapshots: long: 5.3.2 protobufjs: 7.5.4 - '@temporalio/worker@1.15.0(@swc/helpers@0.5.13)(esbuild@0.27.7)(tslib@2.8.1)': + '@temporalio/worker@1.15.0(@swc/helpers@0.5.13)(esbuild@0.28.2)(tslib@2.8.1)': dependencies: '@grpc/grpc-js': 1.14.3 '@swc/core': 1.5.7(@swc/helpers@0.5.13) @@ -27234,11 +29165,11 @@ snapshots: protobufjs: 7.5.4 rxjs: 7.8.2 source-map: 0.7.6 - source-map-loader: 4.0.2(webpack@5.105.4(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.27.7)) + source-map-loader: 4.0.2(webpack@5.105.4(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.28.2)) supports-color: 8.1.1 - swc-loader: 0.2.7(@swc/core@1.5.7(@swc/helpers@0.5.13))(webpack@5.105.4(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.27.7)) + swc-loader: 0.2.7(@swc/core@1.5.7(@swc/helpers@0.5.13))(webpack@5.105.4(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.28.2)) unionfs: 4.6.0 - webpack: 5.105.4(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.27.7) + webpack: 5.105.4(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.28.2) transitivePeerDependencies: - '@swc/helpers' - esbuild @@ -27671,6 +29602,123 @@ snapshots: dependencies: '@types/node': 18.16.9 + '@types/d3-array@3.2.2': {} + + '@types/d3-axis@3.0.6': + dependencies: + '@types/d3-selection': 3.0.12 + + '@types/d3-brush@3.0.6': + dependencies: + '@types/d3-selection': 3.0.12 + + '@types/d3-chord@3.0.6': {} + + '@types/d3-color@3.1.3': {} + + '@types/d3-contour@3.0.6': + dependencies: + '@types/d3-array': 3.2.2 + '@types/geojson': 7946.0.16 + + '@types/d3-delaunay@6.0.4': {} + + '@types/d3-dispatch@3.0.7': {} + + '@types/d3-drag@3.0.7': + dependencies: + '@types/d3-selection': 3.0.12 + + '@types/d3-dsv@3.0.7': {} + + '@types/d3-ease@3.0.2': {} + + '@types/d3-fetch@3.0.7': + dependencies: + '@types/d3-dsv': 3.0.7 + + '@types/d3-force@3.0.10': {} + + '@types/d3-format@3.0.4': {} + + '@types/d3-geo@3.1.1': + dependencies: + '@types/geojson': 7946.0.16 + + '@types/d3-hierarchy@3.1.7': {} + + '@types/d3-interpolate@3.0.4': + dependencies: + '@types/d3-color': 3.1.3 + + '@types/d3-path@3.1.1': {} + + '@types/d3-polygon@3.0.2': {} + + '@types/d3-quadtree@3.0.6': {} + + '@types/d3-random@3.0.4': {} + + '@types/d3-scale-chromatic@3.1.0': {} + + '@types/d3-scale@4.0.9': + dependencies: + '@types/d3-time': 3.0.4 + + '@types/d3-selection@3.0.12': {} + + '@types/d3-shape@3.2.0': + dependencies: + '@types/d3-path': 3.1.1 + + '@types/d3-time-format@4.0.3': {} + + '@types/d3-time@3.0.4': {} + + '@types/d3-timer@3.0.2': {} + + '@types/d3-transition@3.0.9': + dependencies: + '@types/d3-selection': 3.0.12 + + '@types/d3-zoom@3.0.8': + dependencies: + '@types/d3-interpolate': 3.0.4 + '@types/d3-selection': 3.0.12 + + '@types/d3@7.4.3': + dependencies: + '@types/d3-array': 3.2.2 + '@types/d3-axis': 3.0.6 + '@types/d3-brush': 3.0.6 + '@types/d3-chord': 3.0.6 + '@types/d3-color': 3.1.3 + '@types/d3-contour': 3.0.6 + '@types/d3-delaunay': 6.0.4 + '@types/d3-dispatch': 3.0.7 + '@types/d3-drag': 3.0.7 + '@types/d3-dsv': 3.0.7 + '@types/d3-ease': 3.0.2 + '@types/d3-fetch': 3.0.7 + '@types/d3-force': 3.0.10 + '@types/d3-format': 3.0.4 + '@types/d3-geo': 3.1.1 + '@types/d3-hierarchy': 3.1.7 + '@types/d3-interpolate': 3.0.4 + '@types/d3-path': 3.1.1 + '@types/d3-polygon': 3.0.2 + '@types/d3-quadtree': 3.0.6 + '@types/d3-random': 3.0.4 + '@types/d3-scale': 4.0.9 + '@types/d3-scale-chromatic': 3.1.0 + '@types/d3-selection': 3.0.12 + '@types/d3-shape': 3.2.0 + '@types/d3-time': 3.0.4 + '@types/d3-time-format': 4.0.3 + '@types/d3-timer': 3.0.2 + '@types/d3-transition': 3.0.9 + '@types/d3-zoom': 3.0.8 + '@types/debug@4.1.12': dependencies: '@types/ms': 2.1.0 @@ -27699,6 +29747,8 @@ snapshots: '@types/estree@1.0.8': {} + '@types/estree@1.0.9': {} + '@types/express-serve-static-core@4.19.8': dependencies: '@types/node': 18.16.9 @@ -27734,6 +29784,10 @@ snapshots: '@types/filewriter@0.0.33': {} + '@types/gensync@1.0.5': {} + + '@types/geojson@7946.0.16': {} + '@types/graceful-fs@4.1.9': dependencies: '@types/node': 18.16.9 @@ -27775,6 +29829,8 @@ snapshots: '@types/tough-cookie': 4.0.5 parse5: 7.3.0 + '@types/jsesc@2.5.1': {} + '@types/json-schema@7.0.15': {} '@types/json5@0.0.29': {} @@ -27844,7 +29900,7 @@ snapshots: '@types/node-fetch@2.6.13': dependencies: '@types/node': 18.16.9 - form-data: 4.0.5 + form-data: 4.0.6 '@types/node-telegram-bot-api@0.64.14': dependencies: @@ -27886,7 +29942,7 @@ snapshots: '@types/pg@8.15.5': dependencies: '@types/node': 18.16.9 - pg-protocol: 1.13.0 + pg-protocol: 1.16.0 pg-types: 2.2.0 '@types/pg@8.15.6': @@ -27899,6 +29955,10 @@ snapshots: '@types/prop-types@15.7.15': {} + '@types/qrcode@1.5.5': + dependencies: + '@types/node': 18.16.9 + '@types/qs@6.15.0': {} '@types/range-parser@1.2.7': {} @@ -28163,8 +30223,8 @@ snapshots: '@typescript-eslint/visitor-keys': 8.57.2 debug: 4.4.3(supports-color@5.5.0) minimatch: 10.2.4 - semver: 7.7.4 - tinyglobby: 0.2.15 + semver: 7.8.5 + tinyglobby: 0.2.17 ts-api-utils: 2.5.0(typescript@5.5.4) typescript: 5.5.4 transitivePeerDependencies: @@ -28586,6 +30646,11 @@ snapshots: '@uppy/utils': 6.2.2 preact: 10.28.4 + '@upsetjs/venn.js@2.0.0': + optionalDependencies: + d3-selection: 3.0.0 + d3-transition: 3.0.1(d3-selection@3.0.0) + '@upstash/redis@1.36.3': dependencies: uncrypto: 0.1.3 @@ -28600,10 +30665,10 @@ snapshots: '@vercel/oidc@3.2.0': {} - '@vitejs/plugin-react@6.0.5(vite@8.2.1(@types/node@18.16.9)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3))': + '@vitejs/plugin-react@6.0.5(vite@8.2.1(@types/node@18.16.9)(esbuild@0.28.2)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.1))': dependencies: '@rolldown/pluginutils': 1.0.1 - vite: 8.2.1(@types/node@18.16.9)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3) + vite: 8.2.1(@types/node@18.16.9)(esbuild@0.28.2)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.1) '@vitest/coverage-v8@1.6.0(vitest@3.1.4)': dependencies: @@ -28620,7 +30685,7 @@ snapshots: std-env: 3.10.0 strip-literal: 2.1.1 test-exclude: 6.0.0 - vitest: 3.1.4(@types/debug@4.1.12)(@types/node@18.16.9)(@vitest/ui@1.6.0)(happy-dom@15.11.7)(jiti@2.6.1)(jsdom@22.1.0(bufferutil@4.1.0)(canvas@2.11.2)(utf-8-validate@5.0.10))(lightningcss@1.33.0)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3) + vitest: 3.1.4(@types/debug@4.1.12)(@types/node@18.16.9)(@vitest/ui@1.6.0)(happy-dom@15.11.7)(jiti@2.6.1)(jsdom@22.1.0(bufferutil@4.1.0)(canvas@2.11.2)(utf-8-validate@5.0.10))(lightningcss@1.33.0)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.1) transitivePeerDependencies: - supports-color @@ -28631,13 +30696,13 @@ snapshots: chai: 5.3.3 tinyrainbow: 2.0.0 - '@vitest/mocker@3.1.4(vite@6.4.1(@types/node@18.16.9)(jiti@2.6.1)(lightningcss@1.33.0)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3))': + '@vitest/mocker@3.1.4(vite@6.4.1(@types/node@18.16.9)(jiti@2.6.1)(lightningcss@1.33.0)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.1))': dependencies: '@vitest/spy': 3.1.4 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 6.4.1(@types/node@18.16.9)(jiti@2.6.1)(lightningcss@1.33.0)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3) + vite: 6.4.1(@types/node@18.16.9)(jiti@2.6.1)(lightningcss@1.33.0)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.1) '@vitest/pretty-format@3.1.4': dependencies: @@ -28671,7 +30736,7 @@ snapshots: pathe: 1.1.2 picocolors: 1.1.1 sirv: 2.0.4 - vitest: 3.1.4(@types/debug@4.1.12)(@types/node@18.16.9)(@vitest/ui@1.6.0)(happy-dom@15.11.7)(jiti@2.6.1)(jsdom@22.1.0(bufferutil@4.1.0)(canvas@2.11.2)(utf-8-validate@5.0.10))(lightningcss@1.33.0)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3) + vitest: 3.1.4(@types/debug@4.1.12)(@types/node@18.16.9)(@vitest/ui@1.6.0)(happy-dom@15.11.7)(jiti@2.6.1)(jsdom@22.1.0(bufferutil@4.1.0)(canvas@2.11.2)(utf-8-validate@5.0.10))(lightningcss@1.33.0)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.1) '@vitest/utils@1.6.0': dependencies: @@ -28713,21 +30778,21 @@ 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.84.1(@babel/core@7.29.0)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@upstash/redis@1.36.3)(bufferutil@4.1.0)(ioredis@5.10.0)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76)': + '@walletconnect/core@2.19.0(@react-native-async-storage/async-storage@1.24.0(react-native@0.84.1(@babel/core@8.0.5)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@upstash/redis@1.36.3)(bufferutil@4.1.0)(ioredis@5.10.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 '@walletconnect/jsonrpc-types': 1.0.4 '@walletconnect/jsonrpc-utils': 1.0.8 '@walletconnect/jsonrpc-ws-connection': 1.0.16(bufferutil@4.1.0)(utf-8-validate@5.0.10) - '@walletconnect/keyvaluestorage': 1.1.1(@react-native-async-storage/async-storage@1.24.0(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@upstash/redis@1.36.3)(ioredis@5.10.0) + '@walletconnect/keyvaluestorage': 1.1.1(@react-native-async-storage/async-storage@1.24.0(react-native@0.84.1(@babel/core@8.0.5)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@upstash/redis@1.36.3)(ioredis@5.10.0) '@walletconnect/logger': 2.1.2 '@walletconnect/relay-api': 1.0.11 '@walletconnect/relay-auth': 1.1.0 '@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.84.1(@babel/core@7.29.0)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@upstash/redis@1.36.3)(ioredis@5.10.0) - '@walletconnect/utils': 2.19.0(@react-native-async-storage/async-storage@1.24.0(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@upstash/redis@1.36.3)(bufferutil@4.1.0)(ioredis@5.10.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.84.1(@babel/core@8.0.5)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@upstash/redis@1.36.3)(ioredis@5.10.0) + '@walletconnect/utils': 2.19.0(@react-native-async-storage/async-storage@1.24.0(react-native@0.84.1(@babel/core@8.0.5)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@upstash/redis@1.36.3)(bufferutil@4.1.0)(ioredis@5.10.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 @@ -28757,21 +30822,21 @@ snapshots: - utf-8-validate - zod - '@walletconnect/core@2.19.1(@react-native-async-storage/async-storage@1.24.0(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@upstash/redis@1.36.3)(bufferutil@4.1.0)(ioredis@5.10.0)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76)': + '@walletconnect/core@2.19.1(@react-native-async-storage/async-storage@1.24.0(react-native@0.84.1(@babel/core@8.0.5)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@upstash/redis@1.36.3)(bufferutil@4.1.0)(ioredis@5.10.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 '@walletconnect/jsonrpc-types': 1.0.4 '@walletconnect/jsonrpc-utils': 1.0.8 '@walletconnect/jsonrpc-ws-connection': 1.0.16(bufferutil@4.1.0)(utf-8-validate@5.0.10) - '@walletconnect/keyvaluestorage': 1.1.1(@react-native-async-storage/async-storage@1.24.0(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@upstash/redis@1.36.3)(ioredis@5.10.0) + '@walletconnect/keyvaluestorage': 1.1.1(@react-native-async-storage/async-storage@1.24.0(react-native@0.84.1(@babel/core@8.0.5)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@upstash/redis@1.36.3)(ioredis@5.10.0) '@walletconnect/logger': 2.1.2 '@walletconnect/relay-api': 1.0.11 '@walletconnect/relay-auth': 1.1.0 '@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.84.1(@babel/core@7.29.0)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@upstash/redis@1.36.3)(ioredis@5.10.0) - '@walletconnect/utils': 2.19.1(@react-native-async-storage/async-storage@1.24.0(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@upstash/redis@1.36.3)(bufferutil@4.1.0)(ioredis@5.10.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.84.1(@babel/core@8.0.5)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@upstash/redis@1.36.3)(ioredis@5.10.0) + '@walletconnect/utils': 2.19.1(@react-native-async-storage/async-storage@1.24.0(react-native@0.84.1(@babel/core@8.0.5)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@upstash/redis@1.36.3)(bufferutil@4.1.0)(ioredis@5.10.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 @@ -28852,13 +30917,13 @@ snapshots: - bufferutil - utf-8-validate - '@walletconnect/keyvaluestorage@1.1.1(@react-native-async-storage/async-storage@1.24.0(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@upstash/redis@1.36.3)(ioredis@5.10.0)': + '@walletconnect/keyvaluestorage@1.1.1(@react-native-async-storage/async-storage@1.24.0(react-native@0.84.1(@babel/core@8.0.5)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@upstash/redis@1.36.3)(ioredis@5.10.0)': dependencies: '@walletconnect/safe-json': 1.0.2 idb-keyval: 6.2.2 unstorage: 1.17.4(@upstash/redis@1.36.3)(idb-keyval@6.2.2)(ioredis@5.10.0) optionalDependencies: - '@react-native-async-storage/async-storage': 1.24.0(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)) + '@react-native-async-storage/async-storage': 1.24.0(react-native@0.84.1(@babel/core@8.0.5)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -28900,16 +30965,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.84.1(@babel/core@7.29.0)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@upstash/redis@1.36.3)(bufferutil@4.1.0)(ioredis@5.10.0)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76)': + '@walletconnect/sign-client@2.19.0(@react-native-async-storage/async-storage@1.24.0(react-native@0.84.1(@babel/core@8.0.5)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@upstash/redis@1.36.3)(bufferutil@4.1.0)(ioredis@5.10.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.84.1(@babel/core@7.29.0)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@upstash/redis@1.36.3)(bufferutil@4.1.0)(ioredis@5.10.0)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76) + '@walletconnect/core': 2.19.0(@react-native-async-storage/async-storage@1.24.0(react-native@0.84.1(@babel/core@8.0.5)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@upstash/redis@1.36.3)(bufferutil@4.1.0)(ioredis@5.10.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.84.1(@babel/core@7.29.0)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@upstash/redis@1.36.3)(ioredis@5.10.0) - '@walletconnect/utils': 2.19.0(@react-native-async-storage/async-storage@1.24.0(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@upstash/redis@1.36.3)(bufferutil@4.1.0)(ioredis@5.10.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.84.1(@babel/core@8.0.5)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@upstash/redis@1.36.3)(ioredis@5.10.0) + '@walletconnect/utils': 2.19.0(@react-native-async-storage/async-storage@1.24.0(react-native@0.84.1(@babel/core@8.0.5)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@upstash/redis@1.36.3)(bufferutil@4.1.0)(ioredis@5.10.0)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76) events: 3.3.0 transitivePeerDependencies: - '@azure/app-configuration' @@ -28936,16 +31001,16 @@ snapshots: - utf-8-validate - zod - '@walletconnect/sign-client@2.19.1(@react-native-async-storage/async-storage@1.24.0(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@upstash/redis@1.36.3)(bufferutil@4.1.0)(ioredis@5.10.0)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76)': + '@walletconnect/sign-client@2.19.1(@react-native-async-storage/async-storage@1.24.0(react-native@0.84.1(@babel/core@8.0.5)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@upstash/redis@1.36.3)(bufferutil@4.1.0)(ioredis@5.10.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.84.1(@babel/core@7.29.0)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@upstash/redis@1.36.3)(bufferutil@4.1.0)(ioredis@5.10.0)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76) + '@walletconnect/core': 2.19.1(@react-native-async-storage/async-storage@1.24.0(react-native@0.84.1(@babel/core@8.0.5)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@upstash/redis@1.36.3)(bufferutil@4.1.0)(ioredis@5.10.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.84.1(@babel/core@7.29.0)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@upstash/redis@1.36.3)(ioredis@5.10.0) - '@walletconnect/utils': 2.19.1(@react-native-async-storage/async-storage@1.24.0(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@upstash/redis@1.36.3)(bufferutil@4.1.0)(ioredis@5.10.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.84.1(@babel/core@8.0.5)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@upstash/redis@1.36.3)(ioredis@5.10.0) + '@walletconnect/utils': 2.19.1(@react-native-async-storage/async-storage@1.24.0(react-native@0.84.1(@babel/core@8.0.5)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@upstash/redis@1.36.3)(bufferutil@4.1.0)(ioredis@5.10.0)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76) events: 3.3.0 transitivePeerDependencies: - '@azure/app-configuration' @@ -28972,13 +31037,13 @@ snapshots: - utf-8-validate - zod - '@walletconnect/solana-adapter@0.0.8(@react-native-async-storage/async-storage@1.24.0(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10))(@types/react@19.1.8)(@upstash/redis@1.36.3)(bufferutil@4.1.0)(ioredis@5.10.0)(react@19.2.4)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76)': + '@walletconnect/solana-adapter@0.0.8(@react-native-async-storage/async-storage@1.24.0(react-native@0.84.1(@babel/core@8.0.5)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10))(@types/react@19.1.8)(@upstash/redis@1.36.3)(bufferutil@4.1.0)(ioredis@5.10.0)(react@19.2.4)(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.84.1(@babel/core@7.29.0)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@types/react@19.1.8)(@upstash/redis@1.36.3)(bufferutil@4.1.0)(ioredis@5.10.0)(react@19.2.4)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76) + '@reown/appkit': 1.7.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.84.1(@babel/core@8.0.5)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@types/react@19.1.8)(@upstash/redis@1.36.3)(bufferutil@4.1.0)(ioredis@5.10.0)(react@19.2.4)(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.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10)) '@solana/web3.js': 1.98.4(bufferutil@4.1.0)(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.84.1(@babel/core@7.29.0)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@upstash/redis@1.36.3)(bufferutil@4.1.0)(ioredis@5.10.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.84.1(@babel/core@7.29.0)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@upstash/redis@1.36.3)(bufferutil@4.1.0)(ioredis@5.10.0)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76) + '@walletconnect/universal-provider': 2.19.0(@react-native-async-storage/async-storage@1.24.0(react-native@0.84.1(@babel/core@8.0.5)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@upstash/redis@1.36.3)(bufferutil@4.1.0)(ioredis@5.10.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.84.1(@babel/core@8.0.5)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@upstash/redis@1.36.3)(bufferutil@4.1.0)(ioredis@5.10.0)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76) bs58: 6.0.0 transitivePeerDependencies: - '@azure/app-configuration' @@ -29012,12 +31077,12 @@ snapshots: dependencies: tslib: 1.14.1 - '@walletconnect/types@2.19.0(@react-native-async-storage/async-storage@1.24.0(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@upstash/redis@1.36.3)(ioredis@5.10.0)': + '@walletconnect/types@2.19.0(@react-native-async-storage/async-storage@1.24.0(react-native@0.84.1(@babel/core@8.0.5)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@upstash/redis@1.36.3)(ioredis@5.10.0)': dependencies: '@walletconnect/events': 1.0.1 '@walletconnect/heartbeat': 1.2.2 '@walletconnect/jsonrpc-types': 1.0.4 - '@walletconnect/keyvaluestorage': 1.1.1(@react-native-async-storage/async-storage@1.24.0(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@upstash/redis@1.36.3)(ioredis@5.10.0) + '@walletconnect/keyvaluestorage': 1.1.1(@react-native-async-storage/async-storage@1.24.0(react-native@0.84.1(@babel/core@8.0.5)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@upstash/redis@1.36.3)(ioredis@5.10.0) '@walletconnect/logger': 2.1.2 events: 3.3.0 transitivePeerDependencies: @@ -29041,12 +31106,12 @@ snapshots: - ioredis - uploadthing - '@walletconnect/types@2.19.1(@react-native-async-storage/async-storage@1.24.0(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@upstash/redis@1.36.3)(ioredis@5.10.0)': + '@walletconnect/types@2.19.1(@react-native-async-storage/async-storage@1.24.0(react-native@0.84.1(@babel/core@8.0.5)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@upstash/redis@1.36.3)(ioredis@5.10.0)': dependencies: '@walletconnect/events': 1.0.1 '@walletconnect/heartbeat': 1.2.2 '@walletconnect/jsonrpc-types': 1.0.4 - '@walletconnect/keyvaluestorage': 1.1.1(@react-native-async-storage/async-storage@1.24.0(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@upstash/redis@1.36.3)(ioredis@5.10.0) + '@walletconnect/keyvaluestorage': 1.1.1(@react-native-async-storage/async-storage@1.24.0(react-native@0.84.1(@babel/core@8.0.5)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@upstash/redis@1.36.3)(ioredis@5.10.0) '@walletconnect/logger': 2.1.2 events: 3.3.0 transitivePeerDependencies: @@ -29070,18 +31135,18 @@ snapshots: - ioredis - uploadthing - '@walletconnect/universal-provider@2.19.0(@react-native-async-storage/async-storage@1.24.0(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@upstash/redis@1.36.3)(bufferutil@4.1.0)(ioredis@5.10.0)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76)': + '@walletconnect/universal-provider@2.19.0(@react-native-async-storage/async-storage@1.24.0(react-native@0.84.1(@babel/core@8.0.5)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@upstash/redis@1.36.3)(bufferutil@4.1.0)(ioredis@5.10.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 '@walletconnect/jsonrpc-provider': 1.0.14 '@walletconnect/jsonrpc-types': 1.0.4 '@walletconnect/jsonrpc-utils': 1.0.8 - '@walletconnect/keyvaluestorage': 1.1.1(@react-native-async-storage/async-storage@1.24.0(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@upstash/redis@1.36.3)(ioredis@5.10.0) + '@walletconnect/keyvaluestorage': 1.1.1(@react-native-async-storage/async-storage@1.24.0(react-native@0.84.1(@babel/core@8.0.5)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@upstash/redis@1.36.3)(ioredis@5.10.0) '@walletconnect/logger': 2.1.2 - '@walletconnect/sign-client': 2.19.0(@react-native-async-storage/async-storage@1.24.0(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@upstash/redis@1.36.3)(bufferutil@4.1.0)(ioredis@5.10.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.84.1(@babel/core@7.29.0)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@upstash/redis@1.36.3)(ioredis@5.10.0) - '@walletconnect/utils': 2.19.0(@react-native-async-storage/async-storage@1.24.0(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@upstash/redis@1.36.3)(bufferutil@4.1.0)(ioredis@5.10.0)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76) + '@walletconnect/sign-client': 2.19.0(@react-native-async-storage/async-storage@1.24.0(react-native@0.84.1(@babel/core@8.0.5)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@upstash/redis@1.36.3)(bufferutil@4.1.0)(ioredis@5.10.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.84.1(@babel/core@8.0.5)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@upstash/redis@1.36.3)(ioredis@5.10.0) + '@walletconnect/utils': 2.19.0(@react-native-async-storage/async-storage@1.24.0(react-native@0.84.1(@babel/core@8.0.5)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@upstash/redis@1.36.3)(bufferutil@4.1.0)(ioredis@5.10.0)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76) events: 3.3.0 lodash: 4.17.21 transitivePeerDependencies: @@ -29110,18 +31175,18 @@ snapshots: - utf-8-validate - zod - '@walletconnect/universal-provider@2.19.1(@react-native-async-storage/async-storage@1.24.0(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@upstash/redis@1.36.3)(bufferutil@4.1.0)(ioredis@5.10.0)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76)': + '@walletconnect/universal-provider@2.19.1(@react-native-async-storage/async-storage@1.24.0(react-native@0.84.1(@babel/core@8.0.5)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@upstash/redis@1.36.3)(bufferutil@4.1.0)(ioredis@5.10.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 '@walletconnect/jsonrpc-provider': 1.0.14 '@walletconnect/jsonrpc-types': 1.0.4 '@walletconnect/jsonrpc-utils': 1.0.8 - '@walletconnect/keyvaluestorage': 1.1.1(@react-native-async-storage/async-storage@1.24.0(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@upstash/redis@1.36.3)(ioredis@5.10.0) + '@walletconnect/keyvaluestorage': 1.1.1(@react-native-async-storage/async-storage@1.24.0(react-native@0.84.1(@babel/core@8.0.5)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@upstash/redis@1.36.3)(ioredis@5.10.0) '@walletconnect/logger': 2.1.2 - '@walletconnect/sign-client': 2.19.1(@react-native-async-storage/async-storage@1.24.0(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@upstash/redis@1.36.3)(bufferutil@4.1.0)(ioredis@5.10.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.84.1(@babel/core@7.29.0)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@upstash/redis@1.36.3)(ioredis@5.10.0) - '@walletconnect/utils': 2.19.1(@react-native-async-storage/async-storage@1.24.0(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@upstash/redis@1.36.3)(bufferutil@4.1.0)(ioredis@5.10.0)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76) + '@walletconnect/sign-client': 2.19.1(@react-native-async-storage/async-storage@1.24.0(react-native@0.84.1(@babel/core@8.0.5)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@upstash/redis@1.36.3)(bufferutil@4.1.0)(ioredis@5.10.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.84.1(@babel/core@8.0.5)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@upstash/redis@1.36.3)(ioredis@5.10.0) + '@walletconnect/utils': 2.19.1(@react-native-async-storage/async-storage@1.24.0(react-native@0.84.1(@babel/core@8.0.5)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@upstash/redis@1.36.3)(bufferutil@4.1.0)(ioredis@5.10.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: @@ -29150,18 +31215,18 @@ snapshots: - utf-8-validate - zod - '@walletconnect/utils@2.19.0(@react-native-async-storage/async-storage@1.24.0(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@upstash/redis@1.36.3)(bufferutil@4.1.0)(ioredis@5.10.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.84.1(@babel/core@8.0.5)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@upstash/redis@1.36.3)(bufferutil@4.1.0)(ioredis@5.10.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 '@noble/hashes': 1.7.1 '@walletconnect/jsonrpc-utils': 1.0.8 - '@walletconnect/keyvaluestorage': 1.1.1(@react-native-async-storage/async-storage@1.24.0(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@upstash/redis@1.36.3)(ioredis@5.10.0) + '@walletconnect/keyvaluestorage': 1.1.1(@react-native-async-storage/async-storage@1.24.0(react-native@0.84.1(@babel/core@8.0.5)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@upstash/redis@1.36.3)(ioredis@5.10.0) '@walletconnect/relay-api': 1.0.11 '@walletconnect/relay-auth': 1.1.0 '@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.84.1(@babel/core@7.29.0)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@upstash/redis@1.36.3)(ioredis@5.10.0) + '@walletconnect/types': 2.19.0(@react-native-async-storage/async-storage@1.24.0(react-native@0.84.1(@babel/core@8.0.5)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@upstash/redis@1.36.3)(ioredis@5.10.0) '@walletconnect/window-getters': 1.0.1 '@walletconnect/window-metadata': 1.0.1 detect-browser: 5.3.0 @@ -29194,18 +31259,18 @@ snapshots: - utf-8-validate - zod - '@walletconnect/utils@2.19.1(@react-native-async-storage/async-storage@1.24.0(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@upstash/redis@1.36.3)(bufferutil@4.1.0)(ioredis@5.10.0)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76)': + '@walletconnect/utils@2.19.1(@react-native-async-storage/async-storage@1.24.0(react-native@0.84.1(@babel/core@8.0.5)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@upstash/redis@1.36.3)(bufferutil@4.1.0)(ioredis@5.10.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 '@noble/hashes': 1.7.1 '@walletconnect/jsonrpc-utils': 1.0.8 - '@walletconnect/keyvaluestorage': 1.1.1(@react-native-async-storage/async-storage@1.24.0(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@upstash/redis@1.36.3)(ioredis@5.10.0) + '@walletconnect/keyvaluestorage': 1.1.1(@react-native-async-storage/async-storage@1.24.0(react-native@0.84.1(@babel/core@8.0.5)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@upstash/redis@1.36.3)(ioredis@5.10.0) '@walletconnect/relay-api': 1.0.11 '@walletconnect/relay-auth': 1.1.0 '@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.84.1(@babel/core@7.29.0)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@upstash/redis@1.36.3)(ioredis@5.10.0) + '@walletconnect/types': 2.19.1(@react-native-async-storage/async-storage@1.24.0(react-native@0.84.1(@babel/core@8.0.5)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@upstash/redis@1.36.3)(ioredis@5.10.0) '@walletconnect/window-getters': 1.0.1 '@walletconnect/window-metadata': 1.0.1 bs58: 6.0.0 @@ -29359,6 +31424,10 @@ snapshots: '@whatwg-node/promise-helpers': 1.3.2 tslib: 2.8.1 + '@workflow/serde@4.1.0': {} + + '@workflow/serde@4.1.0-beta.2': {} + '@wyw-in-js/processor-utils@0.5.5': dependencies: '@babel/generator': 7.29.1 @@ -29399,8 +31468,6 @@ snapshots: '@xtuc/long@4.2.2': {} - '@zeit/schemas@2.36.0': {} - abab@2.0.6: {} abbrev@1.1.1: {} @@ -29422,9 +31489,10 @@ snapshots: typescript: 5.5.4 zod: 3.25.76 - abort-controller-x@0.4.3: {} - - abort-controller-x@0.5.0: {} + abitype@1.2.3(typescript@5.5.4)(zod@4.6.5): + optionalDependencies: + typescript: 5.5.4 + zod: 4.6.5 abort-controller@3.0.0: dependencies: @@ -29504,6 +31572,14 @@ snapshots: '@opentelemetry/api': 1.9.0 zod: 3.25.76 + ai@6.0.285(zod@3.25.76): + dependencies: + '@ai-sdk/gateway': 3.0.196(zod@3.25.76) + '@ai-sdk/provider': 3.0.16 + '@ai-sdk/provider-utils': 4.0.51(zod@3.25.76) + '@opentelemetry/api': 1.9.0 + zod: 3.25.76 + ajv-formats@2.1.1(ajv@8.18.0): optionalDependencies: ajv: 8.18.0 @@ -29512,6 +31588,10 @@ snapshots: optionalDependencies: ajv: 8.18.0 + ajv-formats@3.0.1(ajv@8.20.0): + optionalDependencies: + ajv: 8.20.0 + ajv-keywords@3.5.2(ajv@6.14.0): dependencies: ajv: 6.14.0 @@ -29535,11 +31615,14 @@ snapshots: json-schema-traverse: 1.0.0 require-from-string: 2.0.2 - anser@1.4.10: {} - - ansi-align@3.0.1: + ajv@8.20.0: dependencies: - string-width: 4.2.3 + fast-deep-equal: 3.1.3 + fast-uri: 3.1.0 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + + anser@1.4.10: {} ansi-colors@4.1.3: {} @@ -29578,6 +31661,22 @@ snapshots: arch@2.2.0: {} + archiver@8.0.0: + dependencies: + async: 3.2.6 + buffer-crc32: 1.0.0 + is-stream: 4.0.1 + lazystream: 1.0.1 + normalize-path: 3.0.0 + readable-stream: 4.7.0 + readdir-glob: 3.0.0 + tar-stream: 3.2.1 + zip-stream: 7.0.5 + transitivePeerDependencies: + - bare-abort-controller + - bare-buffer + - react-native-b4a + are-we-there-yet@2.0.0: dependencies: delegates: 1.0.0 @@ -29687,7 +31786,8 @@ snapshots: get-intrinsic: 1.3.0 is-array-buffer: 3.0.5 - arrify@2.0.1: {} + arrify@2.0.1: + optional: true asap@2.0.6: {} @@ -29727,6 +31827,8 @@ snapshots: dependencies: tslib: 2.8.1 + async@3.2.6: {} + asynckit@0.4.0: {} atomic-sleep@1.0.0: {} @@ -29768,6 +31870,8 @@ snapshots: axobject-query@4.1.0: {} + b4a@1.9.0: {} + babel-jest@29.7.0(@babel/core@7.29.0): dependencies: '@babel/core': 7.29.0 @@ -29781,6 +31885,19 @@ snapshots: transitivePeerDependencies: - supports-color + babel-jest@29.7.0(@babel/core@8.0.5): + dependencies: + '@babel/core': 8.0.5 + '@jest/transform': 29.7.0 + '@types/babel__core': 7.20.5 + babel-plugin-istanbul: 6.1.1 + babel-preset-jest: 29.6.3(@babel/core@8.0.5) + chalk: 4.1.2 + graceful-fs: 4.2.11 + slash: 3.0.0 + transitivePeerDependencies: + - supports-color + babel-merge@3.0.0(@babel/core@7.29.0): dependencies: '@babel/core': 7.29.0 @@ -29857,18 +31974,72 @@ snapshots: '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.29.0) '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.29.0) + babel-preset-current-node-syntax@1.2.0(@babel/core@8.0.5): + dependencies: + '@babel/core': 8.0.5 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@8.0.5) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@8.0.5) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@8.0.5) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@8.0.5) + '@babel/plugin-syntax-import-attributes': 7.28.6(@babel/core@8.0.5) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@8.0.5) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@8.0.5) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@8.0.5) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@8.0.5) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@8.0.5) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@8.0.5) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@8.0.5) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@8.0.5) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@8.0.5) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@8.0.5) + babel-preset-jest@29.6.3(@babel/core@7.29.0): dependencies: '@babel/core': 7.29.0 babel-plugin-jest-hoist: 29.6.3 babel-preset-current-node-syntax: 1.2.0(@babel/core@7.29.0) + babel-preset-jest@29.6.3(@babel/core@8.0.5): + dependencies: + '@babel/core': 8.0.5 + babel-plugin-jest-hoist: 29.6.3 + babel-preset-current-node-syntax: 1.2.0(@babel/core@8.0.5) + bail@2.0.2: {} balanced-match@1.0.2: {} balanced-match@4.0.4: {} + bare-events@2.9.2: {} + + bare-fs@4.8.1: + dependencies: + bare-events: 2.9.2 + bare-path: 3.1.2 + bare-stream: 2.13.4(bare-events@2.9.2) + bare-url: 2.5.4 + fast-fifo: 1.3.2 + transitivePeerDependencies: + - bare-abort-controller + - react-native-b4a + + bare-path@3.1.2: {} + + bare-stream@2.13.4(bare-events@2.9.2): + dependencies: + b4a: 1.9.0 + streamx: 2.28.1 + teex: 1.0.1 + optionalDependencies: + bare-events: 2.9.2 + transitivePeerDependencies: + - react-native-b4a + + bare-url@2.5.4: + dependencies: + bare-path: 3.1.2 + base-x@3.0.11: dependencies: safe-buffer: 5.2.1 @@ -29921,7 +32092,7 @@ snapshots: bin-version-check@5.1.0: dependencies: bin-version: 6.0.0 - semver: 7.7.4 + semver: 7.8.5 semver-truncate: 3.0.0 bin-version@6.0.0: @@ -29993,17 +32164,6 @@ snapshots: bowser@2.14.1: {} - boxen@7.0.0: - dependencies: - ansi-align: 3.0.1 - camelcase: 7.0.1 - chalk: 5.6.2 - cli-boxes: 3.0.0 - string-width: 5.1.2 - type-fest: 2.19.0 - widest-line: 4.0.1 - wrap-ansi: 8.1.0 - brace-expansion@1.1.12: dependencies: balanced-match: 1.0.2 @@ -30101,12 +32261,19 @@ snapshots: dependencies: node-int64: 0.4.0 + buffer-crc32@1.0.0: {} + buffer-equal-constant-time@1.0.1: {} buffer-from@1.1.2: {} buffer-xor@1.0.3: {} + buffer@5.6.0: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + buffer@5.7.1: dependencies: base64-js: 1.5.1 @@ -30183,8 +32350,6 @@ snapshots: camelcase@6.3.0: {} - camelcase@7.0.1: {} - caniuse-lite@1.0.30001777: {} canvas@2.11.2: @@ -30216,17 +32381,11 @@ snapshots: loupe: 3.2.1 pathval: 2.0.1 - chalk-template@0.4.0: - dependencies: - chalk: 4.1.2 - chalk@4.1.2: dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 - chalk@5.0.1: {} - chalk@5.6.2: {} change-case@4.1.2: @@ -30248,16 +32407,10 @@ snapshots: character-entities-html4@2.1.0: {} - character-entities-legacy@1.1.4: {} - character-entities-legacy@3.0.0: {} - character-entities@1.2.4: {} - character-entities@2.0.2: {} - character-reference-invalid@1.1.4: {} - character-reference-invalid@2.0.1: {} chardet@2.1.1: {} @@ -30268,6 +32421,21 @@ snapshots: dependencies: '@kurkle/color': 0.3.4 + chat@4.40.0(ai@4.3.19(react@19.2.4)(zod@3.25.76))(zod@3.25.76): + dependencies: + '@workflow/serde': 4.1.0-beta.2 + mdast-util-to-string: 4.0.0 + remark-gfm: 4.0.1 + remark-parse: 11.0.0 + remark-stringify: 11.0.0 + remend: 1.3.1 + unified: 11.0.5 + optionalDependencies: + ai: 4.3.19(react@19.2.4)(zod@3.25.76) + zod: 3.25.76 + transitivePeerDependencies: + - supports-color + check-error@2.1.3: {} cheerio-select@2.1.0: @@ -30353,6 +32521,8 @@ snapshots: cjs-module-lexer@2.2.0: {} + clarinet@0.12.6: {} + class-transformer@0.5.1: {} class-validator-jsonschema@5.1.0(class-transformer@0.5.1)(class-validator@0.14.4): @@ -30375,14 +32545,16 @@ snapshots: dependencies: clsx: 1.2.1 + class-variance-authority@0.7.1: + dependencies: + clsx: 2.1.1 + classnames@2.3.1: {} classnames@2.5.1: {} clean-stack@2.2.0: {} - cli-boxes@3.0.0: {} - cli-cursor@3.1.0: dependencies: restore-cursor: 3.1.0 @@ -30399,12 +32571,6 @@ snapshots: client-only@0.0.1: {} - clipboardy@3.0.0: - dependencies: - arch: 2.2.0 - execa: 5.1.1 - is-wsl: 2.2.0 - cliui@6.0.0: dependencies: string-width: 4.2.3 @@ -30476,8 +32642,6 @@ snapshots: comlink@4.4.2: {} - comma-separated-tokens@1.0.8: {} - comma-separated-tokens@2.0.3: {} commander@10.0.1: {} @@ -30509,6 +32673,14 @@ snapshots: component-emitter@2.0.0: {} + compress-commons@7.0.1: + dependencies: + crc-32: 1.2.2 + crc32-stream: 7.0.1 + is-stream: 4.0.1 + normalize-path: 3.0.0 + readable-stream: 4.7.0 + compressible@2.0.18: dependencies: mime-db: 1.54.0 @@ -30574,10 +32746,6 @@ snapshots: console-control-strings@1.1.0: {} - console-table-printer@2.15.0: - dependencies: - simple-wcswidth: 1.1.2 - console.table@0.10.0: dependencies: easy-table: 1.1.0 @@ -30646,6 +32814,14 @@ snapshots: object-assign: 4.1.1 vary: 1.1.2 + cose-base@1.0.3: + dependencies: + layout-base: 1.0.2 + + cose-base@2.2.0: + dependencies: + layout-base: 2.0.1 + cosmiconfig@7.1.0: dependencies: '@types/parse-json': 4.0.2 @@ -30672,6 +32848,13 @@ snapshots: optionalDependencies: typescript: 5.9.3 + crc-32@1.2.2: {} + + crc32-stream@7.0.1: + dependencies: + crc-32: 1.2.2 + readable-stream: 4.7.0 + crc@3.8.0: dependencies: buffer: 5.7.1 @@ -30722,6 +32905,8 @@ snapshots: '@types/luxon': 3.7.1 luxon: 3.7.2 + croner@10.0.1: {} + cropperjs@1.6.2: {} cross-env@10.1.0: @@ -30836,6 +33021,190 @@ snapshots: custom-error-instance@2.1.1: {} + cytoscape-cose-bilkent@4.1.0(cytoscape@3.34.3): + dependencies: + cose-base: 1.0.3 + cytoscape: 3.34.3 + + cytoscape-fcose@2.2.0(cytoscape@3.34.3): + dependencies: + cose-base: 2.2.0 + cytoscape: 3.34.3 + + cytoscape@3.34.3: {} + + d3-array@2.12.1: + dependencies: + internmap: 1.0.1 + + d3-array@3.2.4: + dependencies: + internmap: 2.0.3 + + d3-axis@3.0.0: {} + + d3-brush@3.0.0: + dependencies: + d3-dispatch: 3.0.1 + d3-drag: 3.0.0 + d3-interpolate: 3.0.1 + d3-selection: 3.0.0 + d3-transition: 3.0.1(d3-selection@3.0.0) + + d3-chord@3.0.1: + dependencies: + d3-path: 3.1.0 + + d3-color@3.1.0: {} + + d3-contour@4.0.2: + dependencies: + d3-array: 3.2.4 + + d3-delaunay@6.0.4: + dependencies: + delaunator: 5.1.0 + + d3-dispatch@3.0.1: {} + + d3-drag@3.0.0: + dependencies: + d3-dispatch: 3.0.1 + d3-selection: 3.0.0 + + d3-dsv@3.0.1: + dependencies: + commander: 7.2.0 + iconv-lite: 0.6.3 + rw: 1.3.3 + + d3-ease@3.0.1: {} + + d3-fetch@3.0.1: + dependencies: + d3-dsv: 3.0.1 + + d3-force@3.0.0: + dependencies: + d3-dispatch: 3.0.1 + d3-quadtree: 3.0.1 + d3-timer: 3.0.1 + + d3-format@3.1.2: {} + + d3-geo@3.1.1: + dependencies: + d3-array: 3.2.4 + + d3-hierarchy@3.1.2: {} + + d3-interpolate@3.0.1: + dependencies: + d3-color: 3.1.0 + + d3-path@1.0.9: {} + + d3-path@3.1.0: {} + + d3-polygon@3.0.1: {} + + d3-quadtree@3.0.1: {} + + d3-random@3.0.1: {} + + d3-sankey@0.12.3: + dependencies: + d3-array: 2.12.1 + d3-shape: 1.3.7 + + d3-scale-chromatic@3.1.0: + dependencies: + d3-color: 3.1.0 + d3-interpolate: 3.0.1 + + d3-scale@4.0.2: + dependencies: + d3-array: 3.2.4 + d3-format: 3.1.2 + d3-interpolate: 3.0.1 + d3-time: 3.1.0 + d3-time-format: 4.1.0 + + d3-selection@3.0.0: {} + + d3-shape@1.3.7: + dependencies: + d3-path: 1.0.9 + + d3-shape@3.2.0: + dependencies: + d3-path: 3.1.0 + + d3-time-format@4.1.0: + dependencies: + d3-time: 3.1.0 + + d3-time@3.1.0: + dependencies: + d3-array: 3.2.4 + + d3-timer@3.0.1: {} + + d3-transition@3.0.1(d3-selection@3.0.0): + dependencies: + d3-color: 3.1.0 + d3-dispatch: 3.0.1 + d3-ease: 3.0.1 + d3-interpolate: 3.0.1 + d3-selection: 3.0.0 + d3-timer: 3.0.1 + + d3-zoom@3.0.0: + dependencies: + d3-dispatch: 3.0.1 + d3-drag: 3.0.0 + d3-interpolate: 3.0.1 + d3-selection: 3.0.0 + d3-transition: 3.0.1(d3-selection@3.0.0) + + d3@7.9.0: + dependencies: + d3-array: 3.2.4 + d3-axis: 3.0.0 + d3-brush: 3.0.0 + d3-chord: 3.0.1 + d3-color: 3.1.0 + d3-contour: 4.0.2 + d3-delaunay: 6.0.4 + d3-dispatch: 3.0.1 + d3-drag: 3.0.0 + d3-dsv: 3.0.1 + d3-ease: 3.0.1 + d3-fetch: 3.0.1 + d3-force: 3.0.0 + d3-format: 3.1.2 + d3-geo: 3.1.1 + d3-hierarchy: 3.1.2 + d3-interpolate: 3.0.1 + d3-path: 3.1.0 + d3-polygon: 3.0.1 + d3-quadtree: 3.0.1 + d3-random: 3.0.1 + d3-scale: 4.0.2 + d3-scale-chromatic: 3.1.0 + d3-selection: 3.0.0 + d3-shape: 3.2.0 + d3-time: 3.1.0 + d3-time-format: 4.1.0 + d3-timer: 3.0.1 + d3-transition: 3.0.1(d3-selection@3.0.0) + d3-zoom: 3.0.0 + + dagre-d3-es@7.0.14: + dependencies: + d3: 7.9.0 + lodash-es: 4.17.23 + damerau-levenshtein@1.0.8: {} dashdash@1.14.1: @@ -30885,12 +33254,16 @@ snapshots: date-fns@3.6.0: {} + date-fns@4.4.0: {} + dateformat@4.6.3: {} dayjs@1.11.13: {} dayjs@1.11.19: {} + dayjs@1.11.23: {} + debug@2.6.9: dependencies: ms: 2.0.0 @@ -30950,8 +33323,6 @@ snapshots: which-collection: 1.0.2 which-typed-array: 1.1.20 - deep-extend@0.6.0: {} - deep-is@0.1.4: {} deepmerge@2.2.1: {} @@ -30984,6 +33355,10 @@ snapshots: escodegen: 2.1.0 esprima: 4.0.1 + delaunator@5.1.0: + dependencies: + robust-predicates: 3.0.3 + delay@5.0.0: {} delayed-stream@1.0.0: {} @@ -31035,6 +33410,8 @@ snapshots: diff@5.2.2: {} + diff@8.0.4: {} + diffie-hellman@5.0.3: dependencies: bn.js: 4.12.3 @@ -31166,7 +33543,7 @@ snapshots: '@one-ini/wasm': 0.1.1 commander: 10.0.1 minimatch: 9.0.9 - semver: 7.7.4 + semver: 7.8.5 ee-first@1.1.1: {} @@ -31197,6 +33574,8 @@ snapshots: empathic@2.0.0: {} + empathic@2.0.1: {} + encode-utf8@1.0.3: {} encodeurl@1.0.2: {} @@ -31372,16 +33751,18 @@ snapshots: es-toolkit@1.33.0: {} + es-toolkit@1.52.0: {} + es6-promise@4.2.8: {} es6-promisify@5.0.0: dependencies: es6-promise: 4.2.8 - esbuild-register@3.6.0(esbuild@0.27.3): + esbuild-register@3.6.0(esbuild@0.28.2): dependencies: debug: 4.4.3(supports-color@5.5.0) - esbuild: 0.27.3 + esbuild: 0.28.2 transitivePeerDependencies: - supports-color @@ -31443,34 +33824,34 @@ snapshots: '@esbuild/win32-ia32': 0.27.3 '@esbuild/win32-x64': 0.27.3 - esbuild@0.27.7: - optionalDependencies: - '@esbuild/aix-ppc64': 0.27.7 - '@esbuild/android-arm': 0.27.7 - '@esbuild/android-arm64': 0.27.7 - '@esbuild/android-x64': 0.27.7 - '@esbuild/darwin-arm64': 0.27.7 - '@esbuild/darwin-x64': 0.27.7 - '@esbuild/freebsd-arm64': 0.27.7 - '@esbuild/freebsd-x64': 0.27.7 - '@esbuild/linux-arm': 0.27.7 - '@esbuild/linux-arm64': 0.27.7 - '@esbuild/linux-ia32': 0.27.7 - '@esbuild/linux-loong64': 0.27.7 - '@esbuild/linux-mips64el': 0.27.7 - '@esbuild/linux-ppc64': 0.27.7 - '@esbuild/linux-riscv64': 0.27.7 - '@esbuild/linux-s390x': 0.27.7 - '@esbuild/linux-x64': 0.27.7 - '@esbuild/netbsd-arm64': 0.27.7 - '@esbuild/netbsd-x64': 0.27.7 - '@esbuild/openbsd-arm64': 0.27.7 - '@esbuild/openbsd-x64': 0.27.7 - '@esbuild/openharmony-arm64': 0.27.7 - '@esbuild/sunos-x64': 0.27.7 - '@esbuild/win32-arm64': 0.27.7 - '@esbuild/win32-ia32': 0.27.7 - '@esbuild/win32-x64': 0.27.7 + esbuild@0.28.2: + optionalDependencies: + '@esbuild/aix-ppc64': 0.28.2 + '@esbuild/android-arm': 0.28.2 + '@esbuild/android-arm64': 0.28.2 + '@esbuild/android-x64': 0.28.2 + '@esbuild/darwin-arm64': 0.28.2 + '@esbuild/darwin-x64': 0.28.2 + '@esbuild/freebsd-arm64': 0.28.2 + '@esbuild/freebsd-x64': 0.28.2 + '@esbuild/linux-arm': 0.28.2 + '@esbuild/linux-arm64': 0.28.2 + '@esbuild/linux-ia32': 0.28.2 + '@esbuild/linux-loong64': 0.28.2 + '@esbuild/linux-mips64el': 0.28.2 + '@esbuild/linux-ppc64': 0.28.2 + '@esbuild/linux-riscv64': 0.28.2 + '@esbuild/linux-s390x': 0.28.2 + '@esbuild/linux-x64': 0.28.2 + '@esbuild/netbsd-arm64': 0.28.2 + '@esbuild/netbsd-x64': 0.28.2 + '@esbuild/openbsd-arm64': 0.28.2 + '@esbuild/openbsd-x64': 0.28.2 + '@esbuild/openharmony-arm64': 0.28.2 + '@esbuild/sunos-x64': 0.28.2 + '@esbuild/win32-arm64': 0.28.2 + '@esbuild/win32-ia32': 0.28.2 + '@esbuild/win32-x64': 0.28.2 escalade@3.2.0: {} @@ -31811,10 +34192,18 @@ snapshots: eventemitter3@5.0.4: {} + events-universal@1.0.1: + dependencies: + bare-events: 2.9.2 + transitivePeerDependencies: + - bare-abort-controller + events@3.3.0: {} eventsource-parser@3.0.6: {} + eventsource-parser@3.1.1: {} + eventsource@3.0.7: dependencies: eventsource-parser: 3.0.6 @@ -32003,6 +34392,8 @@ snapshots: fast-equals@5.4.0: {} + fast-fifo@1.3.2: {} + fast-glob@3.3.1: dependencies: '@nodelib/fs.stat': 2.0.5 @@ -32031,19 +34422,20 @@ snapshots: fast-stable-stringify@1.0.0: {} - fast-string-truncated-width@1.2.1: {} + fast-string-truncated-width@3.0.3: {} - fast-string-width@1.1.0: + fast-string-width@3.0.2: dependencies: - fast-string-truncated-width: 1.2.1 + fast-string-truncated-width: 3.0.3 - fast-text-encoding@1.0.6: {} + fast-text-encoding@1.0.6: + optional: true fast-uri@3.1.0: {} - fast-wrap-ansi@0.1.6: + fast-wrap-ansi@0.2.2: dependencies: - fast-string-width: 1.1.0 + fast-string-width: 3.0.2 fast-xml-builder@1.0.0: {} @@ -32066,6 +34458,10 @@ snapshots: fast-xml-builder: 1.0.0 strnum: 2.2.0 + fastdom@1.0.12: + dependencies: + strictdom: 1.0.1 + fastestsmallesttextencoderdecoder@1.0.22: {} fastq@1.20.1: @@ -32082,13 +34478,9 @@ snapshots: dependencies: bser: 2.1.1 - fdir@6.5.0(picomatch@4.0.3): - optionalDependencies: - picomatch: 4.0.3 - - fdir@6.5.0(picomatch@4.0.4): + fdir@6.5.0(picomatch@4.0.5): optionalDependencies: - picomatch: 4.0.4 + picomatch: 4.0.5 fetch-blob@3.2.0: dependencies: @@ -32225,7 +34617,7 @@ snapshots: dependencies: fast-glob: 3.3.3 pkg-types: 1.3.1 - yaml: 2.8.2 + yaml: 2.9.1 first-match@0.0.1: {} @@ -32276,7 +34668,7 @@ snapshots: forever-agent@0.6.1: {} - fork-ts-checker-webpack-plugin@9.1.0(typescript@5.9.3)(webpack@5.106.0(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.27.7)): + fork-ts-checker-webpack-plugin@9.1.0(typescript@5.9.3)(webpack@5.106.0(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.28.2)): dependencies: '@babel/code-frame': 7.29.0 chalk: 4.1.2 @@ -32291,7 +34683,7 @@ snapshots: semver: 7.7.4 tapable: 2.3.0 typescript: 5.9.3 - webpack: 5.106.0(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.27.7) + webpack: 5.106.0(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.28.2) form-data-encoder@1.7.2: {} @@ -32426,6 +34818,7 @@ snapshots: transitivePeerDependencies: - encoding - supports-color + optional: true gaxios@6.7.1: dependencies: @@ -32438,6 +34831,14 @@ snapshots: - encoding - supports-color + gaxios@7.3.1: + dependencies: + extend: 3.0.2 + https-proxy-agent: 7.0.6 + node-fetch: 3.3.2 + transitivePeerDependencies: + - supports-color + gcp-metadata@5.3.0: dependencies: gaxios: 5.1.3 @@ -32445,6 +34846,7 @@ snapshots: transitivePeerDependencies: - encoding - supports-color + optional: true gcp-metadata@6.1.1: dependencies: @@ -32455,6 +34857,14 @@ snapshots: - encoding - supports-color + gcp-metadata@8.1.2: + dependencies: + gaxios: 7.3.1 + google-logging-utils: 1.1.3 + json-bigint: 1.0.0 + transitivePeerDependencies: + - supports-color + generator-function@2.0.1: {} generic-pool@3.9.0: {} @@ -32463,6 +34873,8 @@ snapshots: get-caller-file@2.0.5: {} + get-east-asian-width@1.7.0: {} + get-func-name@2.0.2: {} get-intrinsic@1.3.0: @@ -32592,6 +35004,17 @@ snapshots: globrex@0.1.2: {} + google-auth-library@10.9.1: + dependencies: + base64-js: 1.5.1 + ecdsa-sig-formatter: 1.0.11 + gaxios: 7.3.1 + gcp-metadata: 8.1.2 + google-logging-utils: 1.1.3 + jws: 4.0.1 + transitivePeerDependencies: + - supports-color + google-auth-library@8.9.0: dependencies: arrify: 2.0.1 @@ -32606,6 +35029,7 @@ snapshots: transitivePeerDependencies: - encoding - supports-color + optional: true google-auth-library@9.15.1: dependencies: @@ -32621,9 +35045,12 @@ snapshots: google-logging-utils@0.0.2: {} + google-logging-utils@1.1.3: {} + google-p12-pem@4.0.1: dependencies: node-forge: 1.3.3 + optional: true googleapis-common@7.2.0: dependencies: @@ -32672,14 +35099,6 @@ snapshots: graphql: 16.13.1 lodash.get: 4.4.2 - graphql-request@6.1.0(graphql@16.13.1): - dependencies: - '@graphql-typed-document-node/core': 3.2.0(graphql@16.13.1) - cross-fetch: 3.2.0 - graphql: 16.13.1 - transitivePeerDependencies: - - encoding - graphql-scalars@1.25.0(graphql@16.13.1): dependencies: graphql: 16.13.1 @@ -32722,6 +35141,7 @@ snapshots: web-streams-polyfill: 3.3.3 transitivePeerDependencies: - encoding + optional: true gtoken@6.1.2: dependencies: @@ -32731,6 +35151,7 @@ snapshots: transitivePeerDependencies: - encoding - supports-color + optional: true gtoken@7.1.0: dependencies: @@ -32752,6 +35173,8 @@ snapshots: ufo: 1.6.3 uncrypto: 0.1.3 + hachure-fill@0.5.2: {} + handlebars@4.7.8: dependencies: minimist: 1.2.8 @@ -32836,6 +35259,19 @@ snapshots: dependencies: function-bind: 1.1.2 + hast-util-from-dom@5.0.1: + dependencies: + '@types/hast': 3.0.4 + hastscript: 9.0.1 + web-namespaces: 2.0.1 + + hast-util-from-html-isomorphic@2.0.0: + dependencies: + '@types/hast': 3.0.4 + hast-util-from-dom: 5.0.1 + hast-util-from-html: 2.0.3 + unist-util-remove-position: 5.0.0 + hast-util-from-html@2.0.3: dependencies: '@types/hast': 3.0.4 @@ -32868,8 +35304,6 @@ snapshots: dependencies: '@types/hast': 3.0.4 - hast-util-parse-selector@2.2.5: {} - hast-util-parse-selector@3.1.1: dependencies: '@types/hast': 2.3.10 @@ -32894,6 +35328,12 @@ snapshots: web-namespaces: 2.0.1 zwitch: 2.0.4 + hast-util-sanitize@5.0.2: + dependencies: + '@types/hast': 3.0.4 + '@ungap/structured-clone': 1.3.0 + unist-util-position: 5.0.0 + hast-util-select@6.0.4: dependencies: '@types/hast': 3.0.4 @@ -32960,19 +35400,20 @@ snapshots: dependencies: '@types/hast': 3.0.4 + hast-util-to-text@4.0.2: + dependencies: + '@types/hast': 3.0.4 + '@types/unist': 3.0.3 + hast-util-is-element: 3.0.0 + unist-util-find-after: 5.0.0 + hast-util-whitespace@2.0.1: {} hast-util-whitespace@3.0.0: dependencies: '@types/hast': 3.0.4 - hastscript@6.0.0: - dependencies: - '@types/hast': 2.3.10 - comma-separated-tokens: 1.0.8 - hast-util-parse-selector: 2.2.5 - property-information: 5.6.0 - space-separated-tokens: 1.1.5 + hast@1.0.0: {} hastscript@7.2.0: dependencies: @@ -33025,7 +35466,7 @@ snapshots: highlightjs-vue@1.0.0: {} - hls.js@1.6.15: {} + hls.js@1.7.3: {} hmac-drbg@1.0.1: dependencies: @@ -33045,15 +35486,6 @@ snapshots: hono: 4.12.10 zod: 3.25.76 - hono-openapi@1.3.0(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@3.25.76))(@types/json-schema@7.0.15)(hono@4.12.10)(openapi-types@12.1.3): - dependencies: - '@standard-community/standard-json': 0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76) - '@standard-community/standard-openapi': 0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@3.25.76) - '@types/json-schema': 7.0.15 - openapi-types: 12.1.3 - optionalDependencies: - hono: 4.12.10 - hono@4.12.10: {} hono@4.12.5: {} @@ -33242,8 +35674,6 @@ snapshots: dependencies: queue: 6.0.2 - image-size@2.0.2: {} - image-to-pdf@3.0.2: dependencies: pdfkit: 0.15.2 @@ -33283,6 +35713,8 @@ snapshots: pkg-dir: 4.2.0 resolve-cwd: 3.0.0 + import-meta-resolve@4.2.0: {} + imurmurhash@0.1.4: {} indent-string@4.0.0: {} @@ -33311,6 +35743,10 @@ snapshots: hasown: 2.0.2 side-channel: 1.1.0 + internmap@1.0.1: {} + + internmap@2.0.3: {} + into-stream@6.0.0: dependencies: from2: 2.3.0 @@ -33340,15 +35776,8 @@ snapshots: iron-webcrypto@1.2.1: {} - is-alphabetical@1.0.4: {} - is-alphabetical@2.0.1: {} - is-alphanumerical@1.0.4: - dependencies: - is-alphabetical: 1.0.4 - is-decimal: 1.0.4 - is-alphanumerical@2.0.1: dependencies: is-alphabetical: 2.0.1 @@ -33398,7 +35827,7 @@ snapshots: is-bun-module@2.0.0: dependencies: - semver: 7.7.4 + semver: 7.8.5 is-callable@1.2.7: {} @@ -33417,12 +35846,12 @@ snapshots: call-bound: 1.0.4 has-tostringtag: 1.0.2 - is-decimal@1.0.4: {} - is-decimal@2.0.1: {} is-docker@2.2.1: {} + is-electron@2.2.2: {} + is-extendable@0.1.1: {} is-extendable@1.0.1: @@ -33451,8 +35880,6 @@ snapshots: dependencies: is-extglob: 2.1.1 - is-hexadecimal@1.0.4: {} - is-hexadecimal@2.0.1: {} is-hotkey@0.1.8: {} @@ -33496,8 +35923,6 @@ snapshots: is-plain-object@5.0.0: {} - is-port-reachable@4.0.0: {} - is-potential-custom-element-name@1.0.1: {} is-promise@4.0.0: {} @@ -33615,7 +36040,7 @@ snapshots: '@babel/parser': 7.29.0 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 - semver: 7.7.4 + semver: 7.8.5 transitivePeerDependencies: - supports-color @@ -33976,7 +36401,7 @@ snapshots: jest-util: 29.7.0 natural-compare: 1.4.0 pretty-format: 29.7.0 - semver: 7.7.4 + semver: 7.8.5 transitivePeerDependencies: - supports-color @@ -34042,10 +36467,14 @@ snapshots: jose@6.2.0: {} + jose@6.2.12: {} + joycon@3.1.1: {} jpeg-exif@1.1.4: {} + jpeg-js@0.4.4: {} + js-base64@2.6.4: {} js-base64@3.7.8: {} @@ -34068,6 +36497,8 @@ snapshots: dependencies: base64-js: 1.5.1 + js-tokens@10.0.0: {} + js-tokens@4.0.0: {} js-tokens@9.0.1: {} @@ -34298,6 +36729,10 @@ snapshots: dependencies: commander: 8.3.0 + katex@0.16.47: + dependencies: + commander: 8.3.0 + keyv@4.5.4: dependencies: json-buffer: 3.0.1 @@ -34308,6 +36743,8 @@ snapshots: keyvaluestorage-interface@1.0.0: {} + khroma@2.1.0: {} + kind-of@6.0.3: {} kleur@3.0.3: {} @@ -34316,61 +36753,51 @@ snapshots: konva@10.2.0: {} - langchain@0.3.37(@langchain/aws@0.1.15(@langchain/core@0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))))(@langchain/core@0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.19.0(bufferutil@4.1.0)(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.6.0(@opentelemetry/api@1.9.0))(axios@1.19.0)(cheerio@1.2.0)(handlebars@4.7.9)(openai@4.104.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)): + langchain@1.5.11(@langchain/core@1.1.39(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)))(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)): dependencies: - '@langchain/core': 0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76)) - '@langchain/openai': 0.5.18(@langchain/core@0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76)))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)) - '@langchain/textsplitters': 0.1.0(@langchain/core@0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))) - js-tiktoken: 1.0.21 - js-yaml: 4.1.1 - jsonpointer: 5.0.1 - langsmith: 0.3.87(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.19.0(bufferutil@4.1.0)(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.2 + '@langchain/core': 1.1.39(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)) + '@langchain/langgraph': 1.4.15(@langchain/core@1.1.39(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@3.25.76) + '@langchain/langgraph-checkpoint': 1.1.5(@langchain/core@1.1.39(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))) + langsmith: 0.5.17(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)) zod: 3.25.76 - optionalDependencies: - '@langchain/aws': 0.1.15(@langchain/core@1.1.39(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))) - axios: 1.19.0(debug@4.4.3) - cheerio: 1.2.0 - handlebars: 4.7.9 transitivePeerDependencies: - '@opentelemetry/api' - '@opentelemetry/exporter-trace-otlp-proto' - '@opentelemetry/sdk-trace-base' - openai + - react + - react-dom - ws + optional: true - langsmith@0.3.87(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76)): + langchain@1.5.11(@langchain/core@1.2.11(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.21.3(bufferutil@4.1.0)(utf-8-validate@5.0.10)))(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(ws@8.21.3(bufferutil@4.1.0)(utf-8-validate@5.0.10)): dependencies: - '@types/uuid': 10.0.0 - chalk: 4.1.2 - console-table-printer: 2.15.0 - p-queue: 6.6.2 - semver: 7.7.4 - uuid: 10.0.0 - optionalDependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/exporter-trace-otlp-proto': 0.203.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-base': 2.6.0(@opentelemetry/api@1.9.0) - openai: 4.104.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76) + '@langchain/core': 1.2.11(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.21.3(bufferutil@4.1.0)(utf-8-validate@5.0.10)) + '@langchain/langgraph': 1.4.15(@langchain/core@1.2.11(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.21.3(bufferutil@4.1.0)(utf-8-validate@5.0.10)))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@3.25.76) + '@langchain/langgraph-checkpoint': 1.1.5(@langchain/core@1.2.11(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.21.3(bufferutil@4.1.0)(utf-8-validate@5.0.10))) + langsmith: 0.5.17(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.21.3(bufferutil@4.1.0)(utf-8-validate@5.0.10)) + zod: 3.25.76 + transitivePeerDependencies: + - '@opentelemetry/api' + - '@opentelemetry/exporter-trace-otlp-proto' + - '@opentelemetry/sdk-trace-base' + - openai + - react + - react-dom + - ws - langsmith@0.3.87(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76)): + langsmith@0.5.17(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)): dependencies: - '@types/uuid': 10.0.0 - chalk: 4.1.2 - console-table-printer: 2.15.0 p-queue: 6.6.2 - semver: 7.7.4 uuid: 10.0.0 optionalDependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/exporter-trace-otlp-proto': 0.203.0(@opentelemetry/api@1.9.0) '@opentelemetry/sdk-trace-base': 2.6.0(@opentelemetry/api@1.9.0) openai: 6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76) + ws: 8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10) - langsmith@0.5.17(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)): + langsmith@0.5.17(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.21.3(bufferutil@4.1.0)(utf-8-validate@5.0.10)): dependencies: p-queue: 6.6.2 uuid: 10.0.0 @@ -34379,7 +36806,7 @@ snapshots: '@opentelemetry/exporter-trace-otlp-proto': 0.203.0(@opentelemetry/api@1.9.0) '@opentelemetry/sdk-trace-base': 2.6.0(@opentelemetry/api@1.9.0) openai: 6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76) - ws: 8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10) + ws: 8.21.3(bufferutil@4.1.0)(utf-8-validate@5.0.10) language-subtag-registry@0.3.23: {} @@ -34391,6 +36818,14 @@ snapshots: dependencies: language-subtag-registry: 0.3.23 + layout-base@1.0.2: {} + + layout-base@2.0.1: {} + + lazystream@1.0.1: + dependencies: + readable-stream: 2.3.8 + leac@0.6.0: {} leven@3.1.0: {} @@ -34538,6 +36973,12 @@ snapshots: lit-element: 4.2.2 lit-html: 3.3.2 + lit@3.3.3: + dependencies: + '@lit/reactive-element': 2.1.2 + lit-element: 4.2.2 + lit-html: 3.3.2 + load-esm@1.0.3: {} load-tsconfig@0.2.5: {} @@ -34670,8 +37111,6 @@ snapshots: lru-cache@10.4.3: {} - lru-cache@11.2.7: {} - lru-cache@11.3.5: {} lru-cache@4.1.5: @@ -34686,6 +37125,7 @@ snapshots: lru-cache@6.0.0: dependencies: yallist: 4.0.0 + optional: true lru-cache@7.18.3: {} @@ -34693,10 +37133,20 @@ snapshots: dependencies: react: 19.2.4 - lucide-react@1.31.0(react@19.2.4): + lucide-react@0.525.0(react@19.2.4): + dependencies: + react: 19.2.4 + + lucide-react@0.542.0(react@19.2.4): dependencies: react: 19.2.4 + lucide-react@1.47.0(react@19.2.4): + dependencies: + react: 19.2.4 + + lucide@0.525.0: {} + luxon@3.7.2: {} lz-string@1.5.0: {} @@ -34721,7 +37171,7 @@ snapshots: make-dir@4.0.0: dependencies: - semver: 7.7.4 + semver: 7.8.5 make-error@1.3.6: {} @@ -34740,34 +37190,47 @@ snapshots: markdown-table@3.0.4: {} + marked@12.0.2: {} + + marked@16.4.2: {} + marky@1.3.0: {} - mastra@1.3.19(@mastra/core@1.21.0(@cfworker/json-schema@4.1.1)(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@3.25.76))(@types/json-schema@7.0.15)(bufferutil@4.1.0)(openapi-types@12.1.3)(utf-8-validate@5.0.10)(zod@3.25.76))(typescript@5.5.4)(zod@3.25.76): + mastra@1.30.0(@hono/node-server@1.19.11(hono@4.12.10))(@mastra/core@1.67.0(@bufbuild/protobuf@2.11.0)(@grpc/grpc-js@1.14.3)(ai@4.3.19(react@19.2.4)(zod@3.25.76))(bufferutil@4.1.0)(express@5.2.1)(rxjs@7.8.2)(utf-8-validate@5.0.10)(zod@3.25.76))(bufferutil@4.1.0)(rxjs@7.8.2)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76): dependencies: - '@clack/prompts': 1.2.0 + '@babel/parser': 8.0.5 + '@babel/types': 8.0.5 + '@clack/prompts': 1.8.1 '@expo/devcert': 1.2.1 - '@mastra/core': 1.21.0(@cfworker/json-schema@4.1.1)(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@3.25.76))(@types/json-schema@7.0.15)(bufferutil@4.1.0)(openapi-types@12.1.3)(utf-8-validate@5.0.10)(zod@3.25.76) - '@mastra/deployer': 1.21.0(@mastra/core@1.21.0(@cfworker/json-schema@4.1.1)(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@3.25.76))(@types/json-schema@7.0.15)(bufferutil@4.1.0)(openapi-types@12.1.3)(utf-8-validate@5.0.10)(zod@3.25.76))(typescript@5.5.4)(zod@3.25.76) - '@mastra/loggers': 1.1.0(@mastra/core@1.21.0(@cfworker/json-schema@4.1.1)(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@3.25.76))(@types/json-schema@7.0.15)(bufferutil@4.1.0)(openapi-types@12.1.3)(utf-8-validate@5.0.10)(zod@3.25.76)) + '@mastra/core': 1.67.0(@bufbuild/protobuf@2.11.0)(@grpc/grpc-js@1.14.3)(ai@4.3.19(react@19.2.4)(zod@3.25.76))(bufferutil@4.1.0)(express@5.2.1)(rxjs@7.8.2)(utf-8-validate@5.0.10)(zod@3.25.76) + '@mastra/deployer': 1.67.0(@hono/node-server@1.19.11(hono@4.12.10))(@mastra/core@1.67.0(@bufbuild/protobuf@2.11.0)(@grpc/grpc-js@1.14.3)(ai@4.3.19(react@19.2.4)(zod@3.25.76))(bufferutil@4.1.0)(express@5.2.1)(rxjs@7.8.2)(utf-8-validate@5.0.10)(zod@3.25.76))(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76) + '@mastra/loggers': 1.3.2(@mastra/core@1.67.0(@bufbuild/protobuf@2.11.0)(@grpc/grpc-js@1.14.3)(ai@4.3.19(react@19.2.4)(zod@3.25.76))(bufferutil@4.1.0)(express@5.2.1)(rxjs@7.8.2)(utf-8-validate@5.0.10)(zod@3.25.76)) + archiver: 8.0.0 commander: 14.0.3 dotenv: 17.4.0 execa: 9.6.1 - fs-extra: 11.3.4 + fs-extra: 11.4.0 get-port: 7.1.0 local-pkg: 1.1.2 + openapi-fetch: 0.17.0 picocolors: 1.1.1 - posthog-node: 5.17.2 - prettier: 3.8.1 - semver: 7.7.4 - serve: 14.2.6 + posthog-node: 5.52.4(rxjs@7.8.2) + semver: 7.8.5 serve-handler: 6.1.7 - shell-quote: 1.8.3 strip-json-comments: 5.0.3 + tinyglobby: 0.2.17 yocto-spinner: 1.1.0 - zod: 3.25.76 transitivePeerDependencies: + - '@hono/node-server' + - bare-abort-controller + - bare-buffer + - bufferutil + - react-native-b4a + - rxjs - supports-color - typescript + - utf-8-validate + - zod material-icons@1.13.14: {} @@ -35047,6 +37510,31 @@ snapshots: merge2@1.4.1: {} + mermaid@11.17.2: + dependencies: + '@braintree/sanitize-url': 7.1.2 + '@iconify/utils': 3.1.7 + '@mermaid-js/parser': 1.2.1 + '@types/d3': 7.4.3 + '@upsetjs/venn.js': 2.0.0 + cytoscape: 3.34.3 + cytoscape-cose-bilkent: 4.1.0(cytoscape@3.34.3) + cytoscape-fcose: 2.2.0(cytoscape@3.34.3) + d3: 7.9.0 + d3-sankey: 0.12.3 + dagre-d3-es: 7.0.14 + dayjs: 1.11.23 + dompurify: 3.4.1 + es-toolkit: 1.52.0 + fastdom: 1.0.12 + katex: 0.16.47 + khroma: 2.1.0 + marked: 16.4.2 + roughjs: 4.6.6 + stylis: 4.3.6 + ts-dedent: 2.3.0 + uuid: 13.0.0 + methods@1.1.2: {} metro-babel-transformer@0.83.5: @@ -35080,7 +37568,7 @@ snapshots: metro-cache: 0.83.5 metro-core: 0.83.5 metro-runtime: 0.83.5 - yaml: 2.8.3 + yaml: 2.9.1 transitivePeerDependencies: - bufferutil - supports-color @@ -35261,6 +37749,38 @@ snapshots: micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.2 + micromark-extension-cjk-friendly-gfm-strikethrough@1.2.3(micromark-util-types@2.0.2)(micromark@4.0.2): + dependencies: + devlop: 1.1.0 + get-east-asian-width: 1.7.0 + micromark: 4.0.2 + micromark-extension-cjk-friendly-util: 2.1.1(micromark-util-types@2.0.2) + micromark-util-character: 2.1.1 + micromark-util-chunked: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-symbol: 2.0.1 + optionalDependencies: + micromark-util-types: 2.0.2 + + micromark-extension-cjk-friendly-util@2.1.1(micromark-util-types@2.0.2): + dependencies: + get-east-asian-width: 1.7.0 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + optionalDependencies: + micromark-util-types: 2.0.2 + + micromark-extension-cjk-friendly@1.2.3(micromark-util-types@2.0.2)(micromark@4.0.2): + dependencies: + devlop: 1.1.0 + micromark: 4.0.2 + micromark-extension-cjk-friendly-util: 2.1.1(micromark-util-types@2.0.2) + micromark-util-chunked: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-symbol: 2.0.1 + optionalDependencies: + micromark-util-types: 2.0.2 + micromark-extension-gfm-autolink-literal@2.1.0: dependencies: micromark-util-character: 2.1.1 @@ -35647,14 +38167,14 @@ snapshots: pkg-types: 1.3.1 ufo: 1.6.3 - mobx-react-lite@4.1.1(mobx@6.15.0)(react-dom@19.2.4(react@19.2.4))(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4): + mobx-react-lite@4.1.1(mobx@6.15.0)(react-dom@19.2.4(react@19.2.4))(react-native@0.84.1(@babel/core@8.0.5)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4): dependencies: mobx: 6.15.0 react: 19.2.4 use-sync-external-store: 1.6.0(react@19.2.4) optionalDependencies: react-dom: 19.2.4(react@19.2.4) - react-native: 0.84.1(@babel/core@7.29.0)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10) + react-native: 0.84.1(@babel/core@8.0.5)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10) mobx-state-tree@7.0.2(mobx@6.15.0)(typescript@5.5.4): dependencies: @@ -35763,13 +38283,13 @@ snapshots: '@nestjs/common': 11.1.21(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.2.2)(rxjs@7.8.2) '@supercharge/request-ip': 1.2.0 - nestjs-temporal-core@3.2.3(@nestjs/common@11.1.21(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.21)(@temporalio/client@1.15.0)(@temporalio/common@1.15.0)(@temporalio/worker@1.15.0(@swc/helpers@0.5.13)(esbuild@0.27.7)(tslib@2.8.1))(@temporalio/workflow@1.15.0)(reflect-metadata@0.2.2)(rxjs@7.8.2): + nestjs-temporal-core@3.2.3(@nestjs/common@11.1.21(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.21)(@temporalio/client@1.15.0)(@temporalio/common@1.15.0)(@temporalio/worker@1.15.0(@swc/helpers@0.5.13)(esbuild@0.28.2)(tslib@2.8.1))(@temporalio/workflow@1.15.0)(reflect-metadata@0.2.2)(rxjs@7.8.2): dependencies: '@nestjs/common': 11.1.21(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.2.2)(rxjs@7.8.2) '@nestjs/core': 11.1.21(@nestjs/common@11.1.21(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/microservices@11.1.21)(@nestjs/platform-express@11.1.21)(reflect-metadata@0.2.2)(rxjs@7.8.2) '@temporalio/client': 1.15.0 '@temporalio/common': 1.15.0 - '@temporalio/worker': 1.15.0(@swc/helpers@0.5.13)(esbuild@0.27.7)(tslib@2.8.1) + '@temporalio/worker': 1.15.0(@swc/helpers@0.5.13)(esbuild@0.28.2)(tslib@2.8.1) '@temporalio/workflow': 1.15.0 ms: 2.1.3 reflect-metadata: 0.2.2 @@ -35777,13 +38297,13 @@ snapshots: netmask@2.0.2: {} - next-plausible@3.12.5(next@16.3.1(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(@types/node@18.16.9)(babel-plugin-macros@3.1.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.3))(react-dom@19.2.4(react@19.2.4))(react@19.2.4): + next-plausible@3.12.5(next@16.3.1(@babel/core@8.0.5)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(@types/node@18.16.9)(babel-plugin-macros@3.1.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.3))(react-dom@19.2.4(react@19.2.4))(react@19.2.4): dependencies: - next: 16.3.1(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(@types/node@18.16.9)(babel-plugin-macros@3.1.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.3) + next: 16.3.1(@babel/core@8.0.5)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(@types/node@18.16.9)(babel-plugin-macros@3.1.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.3) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) - next@16.3.1(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(@types/node@18.16.9)(babel-plugin-macros@3.1.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.3): + next@16.3.1(@babel/core@8.0.5)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(@types/node@18.16.9)(babel-plugin-macros@3.1.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.3): dependencies: '@next/env': 16.3.1 '@swc/helpers': 0.5.23 @@ -35792,7 +38312,7 @@ snapshots: postcss: 8.5.23 react: 19.2.4 react-dom: 19.2.4(react@19.2.4) - styled-jsx: 5.1.6(@babel/core@7.29.0)(babel-plugin-macros@3.1.0)(react@19.2.4) + styled-jsx: 5.1.6(@babel/core@8.0.5)(babel-plugin-macros@3.1.0)(react@19.2.4) optionalDependencies: '@next/swc-darwin-arm64': 16.3.1 '@next/swc-darwin-x64': 16.3.1 @@ -35813,21 +38333,6 @@ snapshots: nexus-rpc@0.0.1: {} - nice-grpc-client-middleware-retry@3.1.13: - dependencies: - abort-controller-x: 0.4.3 - nice-grpc-common: 2.0.2 - - nice-grpc-common@2.0.2: - dependencies: - ts-error: 1.0.6 - - nice-grpc@2.1.14: - dependencies: - '@grpc/grpc-js': 1.14.3 - abort-controller-x: 0.4.3 - nice-grpc-common: 2.0.2 - no-case@3.0.4: dependencies: lower-case: 2.0.2 @@ -35835,7 +38340,7 @@ snapshots: node-abi@3.87.0: dependencies: - semver: 7.7.4 + semver: 7.8.5 node-abort-controller@3.1.1: {} @@ -35869,7 +38374,8 @@ snapshots: fetch-blob: 3.2.0 formdata-polyfill: 4.0.10 - node-forge@1.3.3: {} + node-forge@1.3.3: + optional: true node-gyp-build@4.8.4: {} @@ -36039,6 +38545,8 @@ snapshots: oblivious-set@1.4.0: {} + obug@2.2.1: {} + ofetch@1.5.1: dependencies: destr: 2.0.5 @@ -36067,31 +38575,19 @@ snapshots: dependencies: mimic-fn: 2.1.0 + oniguruma-parser@0.12.2: {} + + oniguruma-to-es@4.3.6: + dependencies: + oniguruma-parser: 0.12.2 + regex: 6.1.0 + regex-recursion: 6.0.2 + open@7.4.2: dependencies: is-docker: 2.2.1 is-wsl: 2.2.0 - openai@4.104.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76): - dependencies: - '@types/node': 18.16.9 - '@types/node-fetch': 2.6.13 - abort-controller: 3.0.0 - agentkeepalive: 4.6.0 - form-data-encoder: 1.7.2 - formdata-node: 4.4.1 - node-fetch: 2.7.0 - optionalDependencies: - ws: 8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10) - zod: 3.25.76 - transitivePeerDependencies: - - encoding - - openai@5.23.2(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76): - optionalDependencies: - ws: 8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10) - zod: 3.25.76 - openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76): optionalDependencies: ws: 8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10) @@ -36102,8 +38598,14 @@ snapshots: ws: 8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10) zod: 3.25.76 + openapi-fetch@0.17.0: + dependencies: + openapi-typescript-helpers: 0.1.0 + openapi-types@12.1.3: {} + openapi-typescript-helpers@0.1.0: {} + openapi3-ts@3.2.0: dependencies: yaml: 2.8.2 @@ -36171,14 +38673,15 @@ snapshots: transitivePeerDependencies: - zod - ox@0.4.4(typescript@5.5.4)(zod@3.25.76): + ox@0.14.0(typescript@5.5.4)(zod@4.6.5): dependencies: '@adraffy/ens-normalize': 1.11.1 - '@noble/curves': 1.9.7 + '@noble/ciphers': 1.3.0 + '@noble/curves': 1.9.1 '@noble/hashes': 1.8.0 '@scure/bip32': 1.7.0 '@scure/bip39': 1.6.0 - abitype: 1.2.3(typescript@5.5.4)(zod@3.25.76) + abitype: 1.2.3(typescript@5.5.4)(zod@4.6.5) eventemitter3: 5.0.1 optionalDependencies: typescript: 5.5.4 @@ -36287,6 +38790,8 @@ snapshots: package-json-from-dist@1.0.1: {} + package-manager-detector@1.8.0: {} + pako@0.2.9: {} param-case@3.0.4: @@ -36308,15 +38813,6 @@ snapshots: pbkdf2: 3.1.5 safe-buffer: 5.2.1 - parse-entities@2.0.0: - dependencies: - character-entities: 1.2.4 - character-entities-legacy: 1.1.4 - character-reference-invalid: 1.1.4 - is-alphanumerical: 1.0.4 - is-decimal: 1.0.4 - is-hexadecimal: 1.0.4 - parse-entities@4.0.2: dependencies: '@types/unist': 2.0.11 @@ -36378,6 +38874,8 @@ snapshots: dot-case: 3.0.4 tslib: 2.8.1 + path-data-parser@0.1.0: {} + path-exists@4.0.0: {} path-expression-matcher@1.6.2: {} @@ -36445,19 +38943,23 @@ snapshots: performance-now@2.1.0: {} - pg-cloudflare@1.3.0: + pg-cloudflare@1.4.0: optional: true pg-connection-string@2.12.0: {} + pg-connection-string@2.14.0: {} + pg-int8@1.0.1: {} - pg-pool@3.13.0(pg@8.20.0): + pg-pool@3.14.0(pg@8.23.0): dependencies: - pg: 8.20.0 + pg: 8.23.0 pg-protocol@1.13.0: {} + pg-protocol@1.16.0: {} + pg-types@2.2.0: dependencies: pg-int8: 1.0.1 @@ -36466,26 +38968,26 @@ snapshots: postgres-date: 1.0.7 postgres-interval: 1.2.0 - pg@8.20.0: + pg@8.23.0: dependencies: - pg-connection-string: 2.12.0 - pg-pool: 3.13.0(pg@8.20.0) - pg-protocol: 1.13.0 + pg-connection-string: 2.14.0 + pg-pool: 3.14.0(pg@8.23.0) + pg-protocol: 1.16.0 pg-types: 2.2.0 pgpass: 1.0.5 optionalDependencies: - pg-cloudflare: 1.3.0 + pg-cloudflare: 1.4.0 pgpass@1.0.5: dependencies: split2: 4.2.0 + phoenix@1.8.14: {} + picocolors@1.1.1: {} picomatch@2.3.1: {} - picomatch@4.0.3: {} - picomatch@4.0.4: {} picomatch@4.0.5: {} @@ -36622,7 +39124,14 @@ snapshots: pngjs@5.0.0: {} - polotno@3.0.0-beta.25(@types/react@19.1.8)(@types/sortablejs@1.15.9)(konva@10.2.0)(react-dom@19.2.4(react@19.2.4))(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4)(typescript@5.5.4): + points-on-curve@0.2.0: {} + + points-on-path@0.2.1: + dependencies: + path-data-parser: 0.1.0 + points-on-curve: 0.2.0 + + polotno@3.0.0-beta.25(@types/react@19.1.8)(@types/sortablejs@1.15.9)(konva@10.2.0)(react-dom@19.2.4(react@19.2.4))(react-native@0.84.1(@babel/core@8.0.5)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4)(typescript@5.5.4): dependencies: '@blueprintjs/core': 6.10.0(@types/react@19.1.8)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@blueprintjs/icons': 6.8.0(@types/react@19.1.8)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) @@ -36633,7 +39142,7 @@ snapshots: mediabunny: 1.40.1 mensch: 0.3.4 mobx: 6.15.0 - mobx-react-lite: 4.1.1(mobx@6.15.0)(react-dom@19.2.4(react@19.2.4))(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4) + mobx-react-lite: 4.1.1(mobx@6.15.0)(react-dom@19.2.4(react@19.2.4))(react-native@0.84.1(@babel/core@8.0.5)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4) mobx-state-tree: 7.0.2(mobx@6.15.0)(typescript@5.5.4) nanoid: 3.3.11 quill: 2.0.3 @@ -36678,13 +39187,13 @@ snapshots: postcss: 8.5.26 ts-node: 10.9.2(@swc/core@1.5.7(@swc/helpers@0.5.13))(@types/node@18.16.9)(typescript@5.5.4) - postcss-load-config@6.0.1(jiti@2.6.1)(postcss@8.5.26)(yaml@2.8.3): + postcss-load-config@6.0.1(jiti@2.6.1)(postcss@8.5.26)(yaml@2.9.1): dependencies: lilconfig: 3.1.3 optionalDependencies: jiti: 2.6.1 postcss: 8.5.26 - yaml: 2.8.3 + yaml: 2.9.1 postcss-nested@6.2.0(postcss@8.5.26): dependencies: @@ -36736,9 +39245,11 @@ snapshots: query-selector-shadow-dom: 1.0.1 web-vitals: 5.1.0 - posthog-node@5.17.2: + posthog-node@5.52.4(rxjs@7.8.2): dependencies: - '@posthog/core': 1.7.1 + '@posthog/core': 1.54.2 + optionalDependencies: + rxjs: 7.8.2 preact@10.28.4: {} @@ -36746,8 +39257,6 @@ snapshots: prettier@2.8.8: {} - prettier@3.8.1: {} - pretty-bytes@6.1.1: {} pretty-format@27.5.1: @@ -36776,8 +39285,6 @@ snapshots: transitivePeerDependencies: - supports-color - prismjs@1.27.0: {} - prismjs@1.30.0: {} probe-image-size@7.2.3: @@ -36828,10 +39335,6 @@ snapshots: property-expr@2.0.6: {} - property-information@5.6.0: - dependencies: - xtend: 4.0.2 - property-information@6.5.0: {} property-information@7.1.0: {} @@ -37125,13 +39628,6 @@ snapshots: iconv-lite: 0.7.2 unpipe: 1.0.0 - rc@1.2.8: - dependencies: - deep-extend: 0.6.0 - ini: 1.3.8 - minimist: 1.2.8 - strip-json-comments: 2.0.1 - react-colorful@5.6.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4): dependencies: react: 19.2.4 @@ -37188,7 +39684,7 @@ snapshots: react: 19.2.4 react-dom: 19.2.4(react@19.2.4) - react-i18next@15.7.4(i18next@25.8.14(typescript@5.5.4))(react-dom@19.2.4(react@19.2.4))(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4)(typescript@5.5.4): + react-i18next@15.7.4(i18next@25.8.14(typescript@5.5.4))(react-dom@19.2.4(react@19.2.4))(react-native@0.84.1(@babel/core@8.0.5)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4)(typescript@5.5.4): dependencies: '@babel/runtime': 7.28.6 html-parse-stringify: 3.0.1 @@ -37196,7 +39692,7 @@ snapshots: react: 19.2.4 optionalDependencies: react-dom: 19.2.4(react@19.2.4) - react-native: 0.84.1(@babel/core@7.29.0)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10) + react-native: 0.84.1(@babel/core@8.0.5)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10) typescript: 5.5.4 react-is@16.13.1: {} @@ -37300,20 +39796,20 @@ snapshots: react-lifecycles-compat: 3.0.4 warning: 4.0.3 - react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10): + react-native@0.84.1(@babel/core@8.0.5)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10): dependencies: '@jest/create-cache-key-function': 29.7.0 '@react-native/assets-registry': 0.84.1 - '@react-native/codegen': 0.84.1(@babel/core@7.29.0) + '@react-native/codegen': 0.84.1(@babel/core@8.0.5) '@react-native/community-cli-plugin': 0.84.1(bufferutil@4.1.0)(utf-8-validate@5.0.10) '@react-native/gradle-plugin': 0.84.1 '@react-native/js-polyfills': 0.84.1 '@react-native/normalize-colors': 0.84.1 - '@react-native/virtualized-lists': 0.84.1(@types/react@19.1.8)(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4) + '@react-native/virtualized-lists': 0.84.1(@types/react@19.1.8)(react-native@0.84.1(@babel/core@8.0.5)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10))(react@19.2.4) abort-controller: 3.0.0 anser: 1.4.10 ansi-regex: 5.0.1 - babel-jest: 29.7.0(@babel/core@7.29.0) + babel-jest: 29.7.0(@babel/core@8.0.5) babel-plugin-syntax-hermes-parser: 0.32.0 base64-js: 1.5.1 commander: 12.1.0 @@ -37424,7 +39920,7 @@ snapshots: optionalDependencies: '@types/react': 19.1.8 - react-syntax-highlighter@15.6.6(react@19.2.4): + react-syntax-highlighter@16.1.1(react@19.2.4): dependencies: '@babel/runtime': 7.28.6 highlight.js: 10.7.3 @@ -37432,7 +39928,7 @@ snapshots: lowlight: 1.20.0 prismjs: 1.30.0 react: 19.2.4 - refractor: 3.6.0 + refractor: 5.0.0 react-tag-autocomplete@7.5.1(react@19.2.4): dependencies: @@ -37512,6 +40008,10 @@ snapshots: dependencies: readable-stream: 4.7.0 + readdir-glob@3.0.0: + dependencies: + minimatch: 10.2.4 + readdirp@3.6.0: dependencies: picomatch: 2.3.1 @@ -37556,12 +40056,6 @@ snapshots: get-proto: 1.0.1 which-builtin-type: 1.2.1 - refractor@3.6.0: - dependencies: - hastscript: 6.0.0 - parse-entities: 2.0.0 - prismjs: 1.27.0 - refractor@4.9.0: dependencies: '@types/hast': 2.3.10 @@ -37584,6 +40078,16 @@ snapshots: regenerator-runtime@0.13.11: {} + regex-recursion@6.0.2: + dependencies: + regex-utilities: 2.3.0 + + regex-utilities@2.3.0: {} + + regex@6.1.0: + dependencies: + regex-utilities: 2.3.0 + regexp.prototype.flags@1.5.4: dependencies: call-bind: 1.0.8 @@ -37602,15 +40106,6 @@ snapshots: unicode-match-property-ecmascript: 2.0.0 unicode-match-property-value-ecmascript: 2.2.1 - registry-auth-token@3.3.2: - dependencies: - rc: 1.2.8 - safe-buffer: 5.2.1 - - registry-url@3.1.0: - dependencies: - rc: 1.2.8 - regjsgen@0.8.0: {} regjsparser@0.13.0: @@ -37631,12 +40126,26 @@ snapshots: unified: 11.0.5 unist-util-visit: 5.1.0 + rehype-harden@1.1.8: + dependencies: + unist-util-visit: 5.1.0 + rehype-ignore@2.0.3: dependencies: hast-util-select: 6.0.4 unified: 11.0.5 unist-util-visit: 5.1.0 + rehype-katex@7.0.1: + dependencies: + '@types/hast': 3.0.4 + '@types/katex': 0.16.8 + hast-util-from-html-isomorphic: 2.0.0 + hast-util-to-text: 4.0.2 + katex: 0.16.35 + unist-util-visit-parents: 6.0.2 + vfile: 6.0.3 + rehype-parse@9.0.1: dependencies: '@types/hast': 3.0.4 @@ -37673,6 +40182,11 @@ snapshots: unified: 11.0.5 unist-util-visit: 5.1.0 + rehype-sanitize@6.0.0: + dependencies: + '@types/hast': 3.0.4 + hast-util-sanitize: 5.0.2 + rehype-slug@6.0.0: dependencies: '@types/hast': 3.0.4 @@ -37694,6 +40208,26 @@ snapshots: rehype-stringify: 10.0.1 unified: 11.0.5 + remark-cjk-friendly-gfm-strikethrough@1.2.3(@types/mdast@4.0.4)(micromark-util-types@2.0.2)(micromark@4.0.2)(unified@11.0.5): + dependencies: + micromark-extension-cjk-friendly-gfm-strikethrough: 1.2.3(micromark-util-types@2.0.2)(micromark@4.0.2) + unified: 11.0.5 + optionalDependencies: + '@types/mdast': 4.0.4 + transitivePeerDependencies: + - micromark + - micromark-util-types + + remark-cjk-friendly@1.2.3(@types/mdast@4.0.4)(micromark-util-types@2.0.2)(micromark@4.0.2)(unified@11.0.5): + dependencies: + micromark-extension-cjk-friendly: 1.2.3(micromark-util-types@2.0.2)(micromark@4.0.2) + unified: 11.0.5 + optionalDependencies: + '@types/mdast': 4.0.4 + transitivePeerDependencies: + - micromark + - micromark-util-types + remark-gfm@4.0.1: dependencies: '@types/mdast': 4.0.4 @@ -37756,6 +40290,10 @@ snapshots: mdast-util-to-markdown: 2.1.2 unified: 11.0.5 + remend@1.0.1: {} + + remend@1.3.1: {} + remove-markdown@0.5.5: {} request-promise-core@1.1.3(request@2.88.2): @@ -37877,6 +40415,8 @@ snapshots: hash-base: 3.1.2 inherits: 2.0.4 + robust-predicates@3.0.3: {} + rolldown@1.2.4: dependencies: '@oxc-project/types': 0.144.0 @@ -37897,13 +40437,13 @@ snapshots: '@rolldown/binding-win32-arm64-msvc': 1.2.4 '@rolldown/binding-win32-x64-msvc': 1.2.4 - rollup-plugin-esbuild@6.2.1(esbuild@0.27.7)(rollup@4.59.0): + rollup-plugin-esbuild@6.2.1(esbuild@0.28.2)(rollup@4.63.3): dependencies: debug: 4.4.3(supports-color@5.5.0) es-module-lexer: 1.7.0 - esbuild: 0.27.7 + esbuild: 0.28.2 get-tsconfig: 4.13.6 - rollup: 4.59.0 + rollup: 4.63.3 unplugin-utils: 0.2.5 transitivePeerDependencies: - supports-color @@ -37943,8 +40483,47 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.59.0 fsevents: 2.3.3 + rollup@4.63.3: + dependencies: + '@types/estree': 1.0.9 + optionalDependencies: + '@napi-rs/lzma-linux-x64-gnu': 1.5.1 + '@rollup/rollup-android-arm-eabi': 4.63.3 + '@rollup/rollup-android-arm64': 4.63.3 + '@rollup/rollup-darwin-arm64': 4.63.3 + '@rollup/rollup-darwin-x64': 4.63.3 + '@rollup/rollup-freebsd-arm64': 4.63.3 + '@rollup/rollup-freebsd-x64': 4.63.3 + '@rollup/rollup-linux-arm-gnueabihf': 4.63.3 + '@rollup/rollup-linux-arm-musleabihf': 4.63.3 + '@rollup/rollup-linux-arm64-gnu': 4.63.3 + '@rollup/rollup-linux-arm64-musl': 4.63.3 + '@rollup/rollup-linux-loong64-gnu': 4.63.3 + '@rollup/rollup-linux-loong64-musl': 4.63.3 + '@rollup/rollup-linux-ppc64-gnu': 4.63.3 + '@rollup/rollup-linux-ppc64-musl': 4.63.3 + '@rollup/rollup-linux-riscv64-gnu': 4.63.3 + '@rollup/rollup-linux-riscv64-musl': 4.63.3 + '@rollup/rollup-linux-s390x-gnu': 4.63.3 + '@rollup/rollup-linux-x64-gnu': 4.63.3 + '@rollup/rollup-linux-x64-musl': 4.63.3 + '@rollup/rollup-openbsd-x64': 4.63.3 + '@rollup/rollup-openharmony-arm64': 4.63.3 + '@rollup/rollup-win32-arm64-msvc': 4.63.3 + '@rollup/rollup-win32-ia32-msvc': 4.63.3 + '@rollup/rollup-win32-x64-gnu': 4.63.3 + '@rollup/rollup-win32-x64-msvc': 4.63.3 + fsevents: 2.3.3 + rope-sequence@1.3.4: {} + roughjs@4.6.6: + dependencies: + hachure-fill: 0.5.2 + path-data-parser: 0.1.0 + points-on-curve: 0.2.0 + points-on-path: 0.2.1 + router@2.2.0: dependencies: debug: 4.4.3(supports-color@5.5.0) @@ -37963,7 +40542,7 @@ snapshots: buffer: 6.0.3 eventemitter3: 5.0.4 uuid: 11.1.0 - ws: 8.19.0(bufferutil@4.1.0)(utf-8-validate@6.0.6) + ws: 8.21.3(bufferutil@4.1.0)(utf-8-validate@6.0.6) optionalDependencies: bufferutil: 4.1.0 utf-8-validate: 6.0.6 @@ -37985,6 +40564,8 @@ snapshots: dependencies: queue-microtask: 1.2.3 + rw@1.3.3: {} + rxjs@6.6.7: dependencies: tslib: 1.14.1 @@ -38092,7 +40673,7 @@ snapshots: semver-truncate@3.0.0: dependencies: - semver: 7.7.4 + semver: 7.8.5 semver@6.3.1: {} @@ -38172,22 +40753,6 @@ snapshots: transitivePeerDependencies: - supports-color - serve@14.2.6: - dependencies: - '@zeit/schemas': 2.36.0 - ajv: 8.18.0 - arg: 5.0.2 - boxen: 7.0.0 - chalk: 5.0.1 - chalk-template: 0.4.0 - clipboardy: 3.0.0 - compression: 1.8.1 - is-port-reachable: 4.0.0 - serve-handler: 6.1.7 - update-check: 1.5.4 - transitivePeerDependencies: - - supports-color - server-only@0.0.1: {} set-blocking@2.0.0: {} @@ -38303,6 +40868,17 @@ snapshots: shell-quote@1.8.3: {} + shiki@3.23.0: + dependencies: + '@shikijs/core': 3.23.0 + '@shikijs/engine-javascript': 3.23.0 + '@shikijs/engine-oniguruma': 3.23.0 + '@shikijs/langs': 3.23.0 + '@shikijs/themes': 3.23.0 + '@shikijs/types': 3.23.0 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + side-channel-list@1.0.0: dependencies: es-errors: 1.3.0 @@ -38357,8 +40933,6 @@ snapshots: dependencies: semver: 7.7.4 - simple-wcswidth@1.1.2: {} - sirv@2.0.4: dependencies: '@polka/url': 1.0.0-next.29 @@ -38382,7 +40956,7 @@ snapshots: direction: 1.0.4 is-hotkey: 0.1.8 is-plain-object: 5.0.0 - lodash: 4.17.23 + lodash: 4.18.1 react: 19.2.4 react-dom: 19.2.4(react@19.2.4) scroll-into-view-if-needed: 2.2.31 @@ -38455,11 +41029,11 @@ snapshots: source-map-js@1.2.1: {} - source-map-loader@4.0.2(webpack@5.105.4(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.27.7)): + source-map-loader@4.0.2(webpack@5.105.4(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.28.2)): dependencies: iconv-lite: 0.6.3 source-map-js: 1.2.1 - webpack: 5.105.4(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.27.7) + webpack: 5.105.4(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.28.2) source-map-support@0.5.13: dependencies: @@ -38479,8 +41053,6 @@ snapshots: source-map@0.7.6: {} - space-separated-tokens@1.1.5: {} - space-separated-tokens@2.0.2: {} split-on-first@1.1.0: {} @@ -38553,10 +41125,53 @@ snapshots: stream-shift@1.0.3: {} + streamdown@1.6.11(@types/mdast@4.0.4)(micromark-util-types@2.0.2)(micromark@4.0.2)(react@19.2.4): + dependencies: + clsx: 2.1.1 + hast: 1.0.0 + hast-util-to-jsx-runtime: 2.3.6 + html-url-attributes: 3.0.1 + katex: 0.16.35 + lucide-react: 0.542.0(react@19.2.4) + marked: 16.4.2 + mermaid: 11.17.2 + react: 19.2.4 + rehype-harden: 1.1.8 + rehype-katex: 7.0.1 + rehype-raw: 7.0.0 + rehype-sanitize: 6.0.0 + remark-cjk-friendly: 1.2.3(@types/mdast@4.0.4)(micromark-util-types@2.0.2)(micromark@4.0.2)(unified@11.0.5) + remark-cjk-friendly-gfm-strikethrough: 1.2.3(@types/mdast@4.0.4)(micromark-util-types@2.0.2)(micromark@4.0.2)(unified@11.0.5) + remark-gfm: 4.0.1 + remark-math: 6.0.0 + remark-parse: 11.0.0 + remark-rehype: 11.1.2 + remend: 1.0.1 + shiki: 3.23.0 + tailwind-merge: 3.7.0 + unified: 11.0.5 + unist-util-visit: 5.1.0 + transitivePeerDependencies: + - '@types/mdast' + - micromark + - micromark-util-types + - supports-color + streamsearch@1.1.0: {} + streamx@2.28.1: + dependencies: + events-universal: 1.0.1 + fast-fifo: 1.3.2 + text-decoder: 1.2.7 + transitivePeerDependencies: + - bare-abort-controller + - react-native-b4a + strict-uri-encode@2.0.0: {} + strictdom@1.0.1: {} + string-length@4.0.2: dependencies: char-regex: 1.0.2 @@ -38657,8 +41272,6 @@ snapshots: strip-final-newline@4.0.0: {} - strip-json-comments@2.0.1: {} - strip-json-comments@3.1.1: {} strip-json-comments@5.0.3: {} @@ -38711,12 +41324,12 @@ snapshots: dependencies: inline-style-parser: 0.2.7 - styled-jsx@5.1.6(@babel/core@7.29.0)(babel-plugin-macros@3.1.0)(react@19.2.4): + styled-jsx@5.1.6(@babel/core@8.0.5)(babel-plugin-macros@3.1.0)(react@19.2.4): dependencies: client-only: 0.0.1 react: 19.2.4 optionalDependencies: - '@babel/core': 7.29.0 + '@babel/core': 8.0.5 babel-plugin-macros: 3.1.0 stylis-plugin-rtl@2.1.1(stylis@4.3.6): @@ -38744,7 +41357,7 @@ snapshots: lines-and-columns: 1.2.4 mz: 2.7.0 pirates: 4.0.7 - tinyglobby: 0.2.15 + tinyglobby: 0.2.17 ts-interface-checker: 0.1.13 superstruct@2.0.2: {} @@ -38781,11 +41394,11 @@ snapshots: dependencies: '@scarf/scarf': 1.4.0 - swc-loader@0.2.7(@swc/core@1.5.7(@swc/helpers@0.5.13))(webpack@5.105.4(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.27.7)): + swc-loader@0.2.7(@swc/core@1.5.7(@swc/helpers@0.5.13))(webpack@5.105.4(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.28.2)): dependencies: '@swc/core': 1.5.7(@swc/helpers@0.5.13) '@swc/counter': 0.1.3 - webpack: 5.105.4(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.27.7) + webpack: 5.105.4(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.28.2) sweetalert2@11.4.8: {} @@ -38803,6 +41416,8 @@ snapshots: tailwind-merge@1.14.0: {} + tailwind-merge@3.7.0: {} + tailwind-scrollbar@3.1.0(tailwindcss@3.4.17(ts-node@10.9.2(@swc/core@1.5.7(@swc/helpers@0.5.13))(@types/node@18.16.9)(typescript@5.5.4))): dependencies: tailwindcss: 3.4.17(ts-node@10.9.2(@swc/core@1.5.7(@swc/helpers@0.5.13))(@types/node@18.16.9)(typescript@5.5.4)) @@ -38840,6 +41455,17 @@ snapshots: tapable@2.3.0: {} + tar-stream@3.2.1: + dependencies: + b4a: 1.9.0 + bare-fs: 4.8.1 + fast-fifo: 1.3.2 + streamx: 2.28.1 + transitivePeerDependencies: + - bare-abort-controller + - bare-buffer + - react-native-b4a + tar@6.2.1: dependencies: chownr: 2.0.0 @@ -38849,27 +41475,34 @@ snapshots: mkdirp: 1.0.4 yallist: 4.0.0 - terser-webpack-plugin@5.3.17(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.27.7)(webpack@5.105.4(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.27.7)): + teex@1.0.1: + dependencies: + streamx: 2.28.1 + transitivePeerDependencies: + - bare-abort-controller + - react-native-b4a + + terser-webpack-plugin@5.3.17(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.28.2)(webpack@5.105.4(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.28.2)): dependencies: '@jridgewell/trace-mapping': 0.3.31 jest-worker: 27.5.1 schema-utils: 4.3.3 terser: 5.46.0 - webpack: 5.105.4(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.27.7) + webpack: 5.105.4(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.28.2) optionalDependencies: '@swc/core': 1.5.7(@swc/helpers@0.5.13) - esbuild: 0.27.7 + esbuild: 0.28.2 - terser-webpack-plugin@5.3.17(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.27.7)(webpack@5.106.0(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.27.7)): + terser-webpack-plugin@5.3.17(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.28.2)(webpack@5.106.0(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.28.2)): dependencies: '@jridgewell/trace-mapping': 0.3.31 jest-worker: 27.5.1 schema-utils: 4.3.3 terser: 5.46.0 - webpack: 5.106.0(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.27.7) + webpack: 5.106.0(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.28.2) optionalDependencies: '@swc/core': 1.5.7(@swc/helpers@0.5.13) - esbuild: 0.27.7 + esbuild: 0.28.2 terser@5.46.0: dependencies: @@ -38884,6 +41517,12 @@ snapshots: glob: 7.2.3 minimatch: 3.1.5 + text-decoder@1.2.7: + dependencies: + b4a: 1.9.0 + transitivePeerDependencies: + - react-native-b4a + text-encoding-utf-8@1.0.2: {} text-table@0.2.0: {} @@ -38934,15 +41573,17 @@ snapshots: tinyexec@0.3.2: {} + tinyexec@1.3.1: {} + tinyglobby@0.2.15: dependencies: - fdir: 6.5.0(picomatch@4.0.4) - picomatch: 4.0.4 + fdir: 6.5.0(picomatch@4.0.5) + picomatch: 4.0.5 tinyglobby@0.2.17: dependencies: - fdir: 6.5.0(picomatch@4.0.4) - picomatch: 4.0.4 + fdir: 6.5.0(picomatch@4.0.5) + picomatch: 4.0.5 tinypool@1.1.1: {} @@ -39078,7 +41719,7 @@ snapshots: dependencies: typescript: 5.5.4 - ts-error@1.0.6: {} + ts-dedent@2.3.0: {} ts-essentials@10.1.1(typescript@5.5.4): optionalDependencies: @@ -39094,7 +41735,7 @@ snapshots: dependencies: tslib: 2.8.1 - ts-jest@29.4.6(@babel/core@7.29.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.29.0))(esbuild@0.27.7)(jest-util@29.7.0)(jest@29.7.0(@types/node@18.16.9)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.5.7(@swc/helpers@0.5.13))(@types/node@18.16.9)(typescript@5.5.4)))(typescript@5.5.4): + ts-jest@29.4.6(@babel/core@8.0.5)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@8.0.5))(esbuild@0.28.2)(jest-util@29.7.0)(jest@29.7.0(@types/node@18.16.9)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.5.7(@swc/helpers@0.5.13))(@types/node@18.16.9)(typescript@5.5.4)))(typescript@5.5.4): dependencies: bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 @@ -39108,11 +41749,11 @@ snapshots: typescript: 5.5.4 yargs-parser: 21.1.1 optionalDependencies: - '@babel/core': 7.29.0 + '@babel/core': 8.0.5 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - babel-jest: 29.7.0(@babel/core@7.29.0) - esbuild: 0.27.7 + babel-jest: 29.7.0(@babel/core@8.0.5) + esbuild: 0.28.2 jest-util: 29.7.0 ts-node@10.9.2(@swc/core@1.5.7(@swc/helpers@0.5.13))(@types/node@18.16.9)(typescript@5.5.4): @@ -39165,7 +41806,9 @@ snapshots: tslib@2.8.1: {} - tsup@8.5.1(@swc/core@1.5.7(@swc/helpers@0.5.13))(jiti@2.6.1)(postcss@8.5.26)(typescript@5.5.4)(yaml@2.8.3): + tsscmp@1.0.6: {} + + tsup@8.5.1(@swc/core@1.5.7(@swc/helpers@0.5.13))(jiti@2.6.1)(postcss@8.5.26)(typescript@5.5.4)(yaml@2.9.1): dependencies: bundle-require: 5.1.0(esbuild@0.27.3) cac: 6.7.14 @@ -39176,7 +41819,7 @@ snapshots: fix-dts-default-cjs-exports: 1.0.1 joycon: 3.1.1 picocolors: 1.1.1 - postcss-load-config: 6.0.1(jiti@2.6.1)(postcss@8.5.26)(yaml@2.8.3) + postcss-load-config: 6.0.1(jiti@2.6.1)(postcss@8.5.26)(yaml@2.9.1) resolve-from: 5.0.0 rollup: 4.59.0 source-map: 0.7.6 @@ -39218,6 +41861,8 @@ snapshots: proper-lockfile: 4.1.2 url-parse: 1.5.10 + tw-animate-css@1.4.0: {} + tweetnacl@0.14.5: {} tweetnacl@1.0.3: {} @@ -39257,7 +41902,7 @@ snapshots: graphql: 16.13.1 graphql-query-complexity: 0.12.0(graphql@16.13.1) graphql-scalars: 1.25.0(graphql@16.13.1) - semver: 7.7.4 + semver: 7.8.5 tslib: 2.8.1 optionalDependencies: class-validator: 0.14.4 @@ -39319,7 +41964,7 @@ snapshots: transitivePeerDependencies: - supports-color - typescript-paths@1.5.1(typescript@5.5.4): + typescript-paths@1.5.2(typescript@5.5.4): dependencies: typescript: 5.5.4 @@ -39363,6 +42008,12 @@ snapshots: undici-types@6.21.0: {} + undici@5.29.0: + dependencies: + '@fastify/busboy': 2.1.1 + + undici@6.28.1: {} + undici@7.25.0: {} undici@7.29.0: @@ -39427,6 +42078,11 @@ snapshots: unist-util-is: 6.0.1 unist-util-visit-parents: 6.0.2 + unist-util-find-after@5.0.0: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.1 + unist-util-generated@2.0.1: {} unist-util-is@5.2.1: @@ -39497,7 +42153,7 @@ snapshots: unplugin-utils@0.2.5: dependencies: pathe: 2.0.3 - picomatch: 4.0.4 + picomatch: 4.0.5 unrs-resolver@1.11.1: dependencies: @@ -39546,11 +42202,6 @@ snapshots: escalade: 3.2.0 picocolors: 1.1.1 - update-check@1.5.4: - dependencies: - registry-auth-token: 3.3.2 - registry-url: 3.1.0 - upper-case-first@2.0.2: dependencies: tslib: 2.8.1 @@ -39626,6 +42277,10 @@ snapshots: optionalDependencies: '@types/react': 19.1.8 + use-stick-to-bottom@1.1.6(react@19.2.4): + dependencies: + react: 19.2.4 + use-sync-external-store@1.2.0(react@19.2.4): dependencies: react: 19.2.4 @@ -39700,6 +42355,8 @@ snapshots: vary@1.1.2: {} + verkit@0.3.2: {} + verror@1.10.0: dependencies: assert-plus: 1.0.0 @@ -39784,13 +42441,13 @@ snapshots: - utf-8-validate - zod - vite-node@3.1.4(@types/node@18.16.9)(jiti@2.6.1)(lightningcss@1.33.0)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3): + vite-node@3.1.4(@types/node@18.16.9)(jiti@2.6.1)(lightningcss@1.33.0)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.1): dependencies: cac: 6.7.14 debug: 4.4.3(supports-color@5.5.0) es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: 6.4.1(@types/node@18.16.9)(jiti@2.6.1)(lightningcss@1.33.0)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3) + vite: 6.4.1(@types/node@18.16.9)(jiti@2.6.1)(lightningcss@1.33.0)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.1) transitivePeerDependencies: - '@types/node' - jiti @@ -39805,25 +42462,25 @@ snapshots: - tsx - yaml - vite-tsconfig-paths@5.1.4(typescript@5.5.4)(vite@8.2.1(@types/node@18.16.9)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3)): + vite-tsconfig-paths@5.1.4(typescript@5.5.4)(vite@8.2.1(@types/node@18.16.9)(esbuild@0.28.2)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.1)): dependencies: debug: 4.4.3(supports-color@5.5.0) globrex: 0.1.2 tsconfck: 3.1.6(typescript@5.5.4) optionalDependencies: - vite: 8.2.1(@types/node@18.16.9)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3) + vite: 8.2.1(@types/node@18.16.9)(esbuild@0.28.2)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.1) transitivePeerDependencies: - supports-color - typescript - vite@6.4.1(@types/node@18.16.9)(jiti@2.6.1)(lightningcss@1.33.0)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3): + vite@6.4.1(@types/node@18.16.9)(jiti@2.6.1)(lightningcss@1.33.0)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.1): dependencies: esbuild: 0.25.12 - fdir: 6.5.0(picomatch@4.0.3) - picomatch: 4.0.3 + fdir: 6.5.0(picomatch@4.0.5) + picomatch: 4.0.5 postcss: 8.5.26 rollup: 4.59.0 - tinyglobby: 0.2.15 + tinyglobby: 0.2.17 optionalDependencies: '@types/node': 18.16.9 fsevents: 2.3.3 @@ -39831,9 +42488,9 @@ snapshots: lightningcss: 1.33.0 sass: 1.97.3 terser: 5.46.0 - yaml: 2.8.3 + yaml: 2.9.1 - vite@8.2.1(@types/node@18.16.9)(esbuild@0.27.7)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3): + vite@8.2.1(@types/node@18.16.9)(esbuild@0.28.2)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.1): dependencies: lightningcss: 1.33.0 picomatch: 4.0.5 @@ -39842,17 +42499,17 @@ snapshots: tinyglobby: 0.2.17 optionalDependencies: '@types/node': 18.16.9 - esbuild: 0.27.7 + esbuild: 0.28.2 fsevents: 2.3.3 jiti: 2.6.1 sass: 1.97.3 terser: 5.46.0 - yaml: 2.8.3 + yaml: 2.9.1 - vitest@3.1.4(@types/debug@4.1.12)(@types/node@18.16.9)(@vitest/ui@1.6.0)(happy-dom@15.11.7)(jiti@2.6.1)(jsdom@22.1.0(bufferutil@4.1.0)(canvas@2.11.2)(utf-8-validate@5.0.10))(lightningcss@1.33.0)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3): + vitest@3.1.4(@types/debug@4.1.12)(@types/node@18.16.9)(@vitest/ui@1.6.0)(happy-dom@15.11.7)(jiti@2.6.1)(jsdom@22.1.0(bufferutil@4.1.0)(canvas@2.11.2)(utf-8-validate@5.0.10))(lightningcss@1.33.0)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.1): dependencies: '@vitest/expect': 3.1.4 - '@vitest/mocker': 3.1.4(vite@6.4.1(@types/node@18.16.9)(jiti@2.6.1)(lightningcss@1.33.0)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3)) + '@vitest/mocker': 3.1.4(vite@6.4.1(@types/node@18.16.9)(jiti@2.6.1)(lightningcss@1.33.0)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.1)) '@vitest/pretty-format': 3.2.4 '@vitest/runner': 3.1.4 '@vitest/snapshot': 3.1.4 @@ -39869,8 +42526,8 @@ snapshots: tinyglobby: 0.2.15 tinypool: 1.1.1 tinyrainbow: 2.0.0 - vite: 6.4.1(@types/node@18.16.9)(jiti@2.6.1)(lightningcss@1.33.0)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3) - vite-node: 3.1.4(@types/node@18.16.9)(jiti@2.6.1)(lightningcss@1.33.0)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3) + vite: 6.4.1(@types/node@18.16.9)(jiti@2.6.1)(lightningcss@1.33.0)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.1) + vite-node: 3.1.4(@types/node@18.16.9)(jiti@2.6.1)(lightningcss@1.33.0)(sass@1.97.3)(terser@5.46.0)(yaml@2.9.1) why-is-node-running: 2.3.0 optionalDependencies: '@types/debug': 4.1.12 @@ -39923,20 +42580,6 @@ snapshots: dependencies: defaults: 1.0.4 - weaviate-client@3.12.0: - dependencies: - '@datastructures-js/deque': 1.0.8 - abort-controller-x: 0.5.0 - graphql: 16.13.1 - graphql-request: 6.1.0(graphql@16.13.1) - long: 5.3.2 - nice-grpc: 2.1.14 - nice-grpc-client-middleware-retry: 3.1.13 - nice-grpc-common: 2.0.2 - uuid: 9.0.1 - transitivePeerDependencies: - - encoding - web-namespaces@2.0.1: {} web-streams-polyfill@3.3.3: {} @@ -39957,7 +42600,7 @@ snapshots: webpack-sources@3.3.4: {} - webpack@5.105.4(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.27.7): + webpack@5.105.4(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.28.2): dependencies: '@types/eslint-scope': 3.7.7 '@types/estree': 1.0.8 @@ -39981,7 +42624,7 @@ snapshots: neo-async: 2.6.2 schema-utils: 4.3.3 tapable: 2.3.0 - terser-webpack-plugin: 5.3.17(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.27.7)(webpack@5.105.4(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.27.7)) + terser-webpack-plugin: 5.3.17(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.28.2)(webpack@5.105.4(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.28.2)) watchpack: 2.5.1 webpack-sources: 3.3.4 transitivePeerDependencies: @@ -39989,7 +42632,7 @@ snapshots: - esbuild - uglify-js - webpack@5.106.0(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.27.7): + webpack@5.106.0(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.28.2): dependencies: '@types/eslint-scope': 3.7.7 '@types/estree': 1.0.8 @@ -40013,7 +42656,7 @@ snapshots: neo-async: 2.6.2 schema-utils: 4.3.3 tapable: 2.3.0 - terser-webpack-plugin: 5.3.17(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.27.7)(webpack@5.106.0(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.27.7)) + terser-webpack-plugin: 5.3.17(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.28.2)(webpack@5.106.0(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.28.2)) watchpack: 2.5.1 webpack-sources: 3.3.4 transitivePeerDependencies: @@ -40127,10 +42770,6 @@ snapshots: dependencies: string-width: 4.2.3 - widest-line@4.0.1: - dependencies: - string-width: 5.1.2 - wildcard@1.1.2: {} win-guid@0.2.1: {} @@ -40186,15 +42825,15 @@ snapshots: bufferutil: 4.1.0 utf-8-validate: 5.0.10 - ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@6.0.6): + ws@8.21.3(bufferutil@4.1.0)(utf-8-validate@5.0.10): optionalDependencies: bufferutil: 4.1.0 - utf-8-validate: 6.0.6 + utf-8-validate: 5.0.10 - ws@8.21.0(bufferutil@4.1.0)(utf-8-validate@5.0.10): + ws@8.21.3(bufferutil@4.1.0)(utf-8-validate@6.0.6): optionalDependencies: bufferutil: 4.1.0 - utf-8-validate: 5.0.10 + utf-8-validate: 6.0.6 xml-name-validator@4.0.0: {} @@ -40239,6 +42878,8 @@ snapshots: yaml@2.8.3: {} + yaml@2.9.1: {} + yargs-parser@18.1.3: dependencies: camelcase: 5.3.1 @@ -40289,18 +42930,28 @@ snapshots: toposort: 2.0.2 type-fest: 2.19.0 + zip-stream@7.0.5: + dependencies: + compress-commons: 7.0.1 + normalize-path: 3.0.0 + readable-stream: 4.7.0 + zod-from-json-schema@0.0.5: dependencies: zod: 3.25.76 zod-from-json-schema@0.5.2: dependencies: - zod: 4.3.6 + zod: 4.6.5 zod-to-json-schema@3.25.1(zod@3.25.76): dependencies: zod: 3.25.76 + zod-to-json-schema@3.25.2(zod@3.25.76): + dependencies: + zod: 3.25.76 + zod-validation-error@4.0.2(zod@3.25.76): dependencies: zod: 3.25.76 @@ -40309,7 +42960,7 @@ snapshots: zod@3.25.76: {} - zod@4.3.6: {} + zod@4.6.5: {} zustand@5.0.11(@types/react@19.1.8)(immer@9.0.21)(react@19.2.4)(use-sync-external-store@1.6.0(react@19.2.4)): optionalDependencies: