From 34bfae28511a77cf5a309f755700743fc2d339fe Mon Sep 17 00:00:00 2001 From: paisley <8197966+su8su@users.noreply.github.com> Date: Fri, 15 May 2026 17:13:43 +0800 Subject: [PATCH] Upgrade openclaw to 5.12 (#1023) --- .github/workflows/check.yml | 10 + .github/workflows/comms-regression.yml | 5 + .github/workflows/electron-e2e.yml | 5 + .github/workflows/harness.yml | 5 + .github/workflows/package-win-manual.yml | 5 + .github/workflows/release.yml | 5 + .github/workflows/win-build-test.yml | 5 + electron/api/routes/channels.ts | 27 +- electron/gateway/config-sync.ts | 22 +- electron/gateway/ws-client.ts | 6 +- electron/utils/channel-config.ts | 139 +- electron/utils/openclaw-auth.ts | 42 + electron/utils/plugin-install.ts | 23 +- package.json | 13 +- pnpm-lock.yaml | 2027 +++++++++-------- scripts/after-pack.cjs | 3 + scripts/bundle-openclaw-plugins.mjs | 6 + .../channels/ChannelConfigModal.tsx | 20 +- tests/unit/channel-config.test.ts | 96 +- tests/unit/channel-routes.test.ts | 47 +- tests/unit/gateway-ws-client.test.ts | 4 + 21 files changed, 1522 insertions(+), 993 deletions(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 411595a..f46c3e8 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -25,6 +25,11 @@ jobs: node-version: '24' cache: 'pnpm' + - name: Prefer HTTPS for public GitHub git dependencies + run: | + git config --global "url.https://github.com/.insteadOf" "git@github.com:" + git config --global --add "url.https://github.com/.insteadOf" "ssh://git@github.com/" + - name: Install dependencies run: pnpm install --frozen-lockfile @@ -69,6 +74,11 @@ jobs: node-version: '24' cache: 'pnpm' + - name: Prefer HTTPS for public GitHub git dependencies + run: | + git config --global "url.https://github.com/.insteadOf" "git@github.com:" + git config --global --add "url.https://github.com/.insteadOf" "ssh://git@github.com/" + - name: Install dependencies run: pnpm install --frozen-lockfile diff --git a/.github/workflows/comms-regression.yml b/.github/workflows/comms-regression.yml index 6adf7b0..26bf5f9 100644 --- a/.github/workflows/comms-regression.yml +++ b/.github/workflows/comms-regression.yml @@ -35,6 +35,11 @@ jobs: node-version: '24' cache: 'pnpm' + - name: Prefer HTTPS for public GitHub git dependencies + run: | + git config --global "url.https://github.com/.insteadOf" "git@github.com:" + git config --global --add "url.https://github.com/.insteadOf" "ssh://git@github.com/" + - name: Install dependencies run: pnpm install --frozen-lockfile diff --git a/.github/workflows/electron-e2e.yml b/.github/workflows/electron-e2e.yml index 1ab5a17..2ebddc7 100644 --- a/.github/workflows/electron-e2e.yml +++ b/.github/workflows/electron-e2e.yml @@ -37,6 +37,11 @@ jobs: node-version: '24' cache: 'pnpm' + - name: Prefer HTTPS for public GitHub git dependencies + run: | + git config --global "url.https://github.com/.insteadOf" "git@github.com:" + git config --global --add "url.https://github.com/.insteadOf" "ssh://git@github.com/" + - name: Install dependencies run: pnpm install --frozen-lockfile diff --git a/.github/workflows/harness.yml b/.github/workflows/harness.yml index 36968a9..e6f2417 100644 --- a/.github/workflows/harness.yml +++ b/.github/workflows/harness.yml @@ -33,6 +33,11 @@ jobs: node-version: '24' cache: 'pnpm' + - name: Prefer HTTPS for public GitHub git dependencies + run: | + git config --global "url.https://github.com/.insteadOf" "git@github.com:" + git config --global --add "url.https://github.com/.insteadOf" "ssh://git@github.com/" + - name: Install dependencies run: pnpm install --frozen-lockfile diff --git a/.github/workflows/package-win-manual.yml b/.github/workflows/package-win-manual.yml index 537ba7e..da9f985 100644 --- a/.github/workflows/package-win-manual.yml +++ b/.github/workflows/package-win-manual.yml @@ -43,6 +43,11 @@ jobs: restore-keys: | ${{ runner.os }}-pnpm-store- + - name: Prefer HTTPS for public GitHub git dependencies + run: | + git config --global "url.https://github.com/.insteadOf" "git@github.com:" + git config --global --add "url.https://github.com/.insteadOf" "ssh://git@github.com/" + - name: Install dependencies run: pnpm install diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 3bc3f03..1c45197 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -57,6 +57,11 @@ jobs: node-version: '24' cache: 'pnpm' + - name: Prefer HTTPS for public GitHub git dependencies + run: | + git config --global "url.https://github.com/.insteadOf" "git@github.com:" + git config --global --add "url.https://github.com/.insteadOf" "ssh://git@github.com/" + - name: Install dependencies run: pnpm install diff --git a/.github/workflows/win-build-test.yml b/.github/workflows/win-build-test.yml index 6a0f371..f9d6d8f 100644 --- a/.github/workflows/win-build-test.yml +++ b/.github/workflows/win-build-test.yml @@ -31,6 +31,11 @@ jobs: node-version: "24" cache: "pnpm" + - name: Prefer HTTPS for public GitHub git dependencies + run: | + git config --global "url.https://github.com/.insteadOf" "git@github.com:" + git config --global --add "url.https://github.com/.insteadOf" "ssh://git@github.com/" + - name: Install dependencies run: pnpm install diff --git a/electron/api/routes/channels.ts b/electron/api/routes/channels.ts index b7bd6aa..c8251b6 100644 --- a/electron/api/routes/channels.ts +++ b/electron/api/routes/channels.ts @@ -25,10 +25,13 @@ import { listAgentsSnapshotFromConfig, } from '../../utils/agent-config'; import { + ensureDiscordPluginInstalled, ensureDingTalkPluginInstalled, ensureFeishuPluginInstalled, + ensureQQBotPluginInstalled, ensureWeChatPluginInstalled, ensureWeComPluginInstalled, + ensureWhatsAppPluginInstalled, } from '../../utils/plugin-install'; import { computeChannelRuntimeStatus, @@ -1471,7 +1474,28 @@ export async function handleChannelRoutes( return true; } } - // QQBot is a built-in channel since OpenClaw 3.31 — no plugin install needed + if (storedChannelType === 'discord') { + const installResult = await ensureDiscordPluginInstalled(); + if (!installResult.installed) { + sendJson(res, 500, { success: false, error: installResult.warning || 'Discord plugin install failed' }); + return true; + } + } + if (storedChannelType === 'qqbot') { + const installResult = await ensureQQBotPluginInstalled(); + if (!installResult.installed) { + sendJson(res, 500, { success: false, error: installResult.warning || 'QQBot plugin install failed' }); + return true; + } + } + if (storedChannelType === 'whatsapp') { + const installResult = await ensureWhatsAppPluginInstalled(); + if (!installResult.installed) { + sendJson(res, 500, { success: false, error: installResult.warning || 'WhatsApp plugin install failed' }); + return true; + } + } + // QQBot is installed as an official external channel plugin for this OpenClaw version. if (storedChannelType === 'feishu') { const installResult = await ensureFeishuPluginInstalled(); if (!installResult.installed) { @@ -1489,6 +1513,7 @@ export async function handleChannelRoutes( const existingValues = await getChannelFormValues(body.channelType, body.accountId); if (isSameConfigValues(existingValues, body.config)) { await ensureScopedChannelBinding(body.channelType, body.accountId); + scheduleGatewayChannelSaveRefresh(ctx, storedChannelType, `channel:saveConfigNoChange:${storedChannelType}`); sendJson(res, 200, { success: true, noChange: true }); return true; } diff --git a/electron/gateway/config-sync.ts b/electron/gateway/config-sync.ts index b10753a..7a75ac7 100644 --- a/electron/gateway/config-sync.ts +++ b/electron/gateway/config-sync.ts @@ -33,7 +33,7 @@ import { buildProxyEnv, resolveProxySettings } from '../utils/proxy'; import { syncProxyConfigToOpenClaw } from '../utils/openclaw-proxy'; import { logger } from '../utils/logger'; import { prependPathEntry } from '../utils/env-path'; -import { copyPluginFromNodeModules, fixupPluginManifest, cpSyncSafe } from '../utils/plugin-install'; +import { copyPluginFromNodeModules, fixupPluginManifest, cpSyncSafe, buildCandidateSources } from '../utils/plugin-install'; import { stripSystemdSupervisorEnv } from './config-sync-env'; import { cleanupAgentsSymlinkedSkills, cleanupStalePluginRuntimeDeps } from './skills-symlink-cleanup'; import { @@ -71,6 +71,9 @@ const CHANNEL_PLUGIN_MAP: Record = dingtalk: { dirName: 'dingtalk', npmName: '@soimy/dingtalk' }, wecom: { dirName: 'wecom', npmName: '@wecom/wecom-openclaw-plugin' }, feishu: { dirName: 'feishu-openclaw-plugin', npmName: '@larksuite/openclaw-lark' }, + discord: { dirName: 'discord', npmName: '@openclaw/discord' }, + qqbot: { dirName: 'qqbot', npmName: '@openclaw/qqbot' }, + whatsapp: { dirName: 'whatsapp', npmName: '@openclaw/whatsapp' }, 'openclaw-weixin': { dirName: 'openclaw-weixin', npmName: '@tencent-weixin/openclaw-weixin' }, }; @@ -107,19 +110,6 @@ function readPluginVersion(pkgJsonPath: string): string | null { } } -function buildBundledPluginSources(pluginDirName: string): string[] { - return app.isPackaged - ? [ - join(process.resourcesPath, 'openclaw-plugins', pluginDirName), - join(process.resourcesPath, 'app.asar.unpacked', 'build', 'openclaw-plugins', pluginDirName), - join(process.resourcesPath, 'app.asar.unpacked', 'openclaw-plugins', pluginDirName), - ] - : [ - join(app.getAppPath(), 'build', 'openclaw-plugins', pluginDirName), - join(process.cwd(), 'build', 'openclaw-plugins', pluginDirName), - ]; -} - function measureSync(timings: Record, key: string, fn: () => T): T { const startedAt = Date.now(); try { @@ -164,7 +154,7 @@ function ensureConfiguredPluginsUpgraded(configuredChannels: string[]): boolean const installedVersion = isInstalled ? readPluginVersion(join(targetDir, 'package.json')) : null; // Try bundled sources first (packaged mode or if bundle-plugins was run) - const bundledSources = buildBundledPluginSources(dirName); + const bundledSources = buildCandidateSources(dirName); const bundledDir = bundledSources.find((dir) => existsSync(fsPath(join(dir, 'openclaw.plugin.json')))); if (bundledDir) { @@ -249,7 +239,7 @@ function buildPluginSourceSignatures(configuredChannels: string[]): Record existsSync(fsPath(join(dir, 'openclaw.plugin.json')))); const devPkgPath = join(process.cwd(), 'node_modules', ...pluginInfo.npmName.split('/')); const sourceDir = bundledDir || (!app.isPackaged ? devPkgPath : ''); diff --git a/electron/gateway/ws-client.ts b/electron/gateway/ws-client.ts index e2c9e5e..28df689 100644 --- a/electron/gateway/ws-client.ts +++ b/electron/gateway/ws-client.ts @@ -102,6 +102,8 @@ export async function waitForGatewayReady(options: { throw new Error(`Gateway failed to start after ${retries} retries (port ${options.port})`); } +const GATEWAY_PROTOCOL_VERSION = 4; + export function buildGatewayConnectFrame(options: { challengeNonce: string; token: string; @@ -145,8 +147,8 @@ export function buildGatewayConnectFrame(options: { id: connectId, method: 'connect', params: { - minProtocol: 3, - maxProtocol: 3, + minProtocol: GATEWAY_PROTOCOL_VERSION, + maxProtocol: GATEWAY_PROTOCOL_VERSION, client: { id: clientId, displayName: 'ClawX', diff --git a/electron/utils/channel-config.ts b/electron/utils/channel-config.ts index 0870783..2ae99b0 100644 --- a/electron/utils/channel-config.ts +++ b/electron/utils/channel-config.ts @@ -32,6 +32,28 @@ const DEFAULT_ACCOUNT_ID = 'default'; // schema validation errors. ClawX falls back to DEFAULT_ACCOUNT_ID // when `defaultAccount` is absent. const CHANNELS_OMIT_DEFAULT_ACCOUNT_KEY = new Set(['dingtalk']); + +// Channels whose schema accepts a top-level default account and account map, +// but whose account payload contains nested strict-schema objects that ClawX +// can accidentally make invalid by adding UI convenience fields. Keep this +// sanitization narrowly scoped to known nested maps so local config remains +// OpenClaw-compatible after a save. +const DISCORD_GUILD_CHANNEL_KEYS_TO_KEEP = new Set([ + 'autoArchiveDuration', + 'autoThread', + 'autoThreadName', + 'enabled', + 'ignoreOtherMentions', + 'includeThreadStarter', + 'requireMention', + 'roles', + 'skills', + 'systemPrompt', + 'tools', + 'toolsBySender', + 'users', +]); +const DISCORD_CHANNEL_ALLOW_FLAG_KEYS = new Set(['allow']); const CHANNEL_TOP_LEVEL_KEYS_TO_KEEP = new Set(['accounts', 'defaultAccount', 'enabled']); const WECHAT_STATE_DIR = join(OPENCLAW_DIR, WECHAT_PLUGIN_ID); const WECHAT_ACCOUNT_INDEX_FILE = join(WECHAT_STATE_DIR, 'accounts.json'); @@ -40,8 +62,8 @@ const LEGACY_WECHAT_CREDENTIALS_DIR = join(OPENCLAW_DIR, 'credentials', WECHAT_P const LEGACY_WECHAT_SYNC_DIR = join(OPENCLAW_DIR, 'agents', 'default', 'sessions', '.openclaw-weixin-sync'); // Channels that are managed as plugins (config goes under plugins.entries, not channels) -const PLUGIN_CHANNELS: string[] = []; -const LEGACY_BUILTIN_CHANNEL_PLUGIN_IDS = new Set(['whatsapp']); +const PLUGIN_CHANNELS: string[] = ['discord', 'qqbot', 'whatsapp']; +const LEGACY_BUILTIN_CHANNEL_PLUGIN_IDS = new Set(); const BUILTIN_CHANNEL_IDS = new Set([ 'discord', 'telegram', @@ -78,6 +100,57 @@ const CHANNEL_UNIQUE_CREDENTIAL_KEY: Record = { // ── Helpers ────────────────────────────────────────────────────── +function sanitizeDiscordGuildChannelConfig(channelConfig: unknown): void { + if (!channelConfig || typeof channelConfig !== 'object' || Array.isArray(channelConfig)) { + return; + } + + const record = channelConfig as Record; + + // Backward compatibility for the older ClawX-generated shape: + // channels: { "123": { allow: true, requireMention: true } } + // OpenClaw's current DiscordGuildChannelConfig does not include `allow`; + // represent deny/allow using `enabled` instead. + if (record.allow === false && record.enabled === undefined) { + record.enabled = false; + } + + for (const key of Object.keys(record)) { + if (DISCORD_CHANNEL_ALLOW_FLAG_KEYS.has(key)) { + delete record[key]; + continue; + } + if (!DISCORD_GUILD_CHANNEL_KEYS_TO_KEEP.has(key)) { + delete record[key]; + } + } +} + +function sanitizeDiscordGuilds(config: unknown): void { + if (!config || typeof config !== 'object' || Array.isArray(config)) { + return; + } + + const record = config as Record; + const guilds = record.guilds; + if (!guilds || typeof guilds !== 'object' || Array.isArray(guilds)) { + return; + } + + for (const guildConfig of Object.values(guilds as Record)) { + if (!guildConfig || typeof guildConfig !== 'object' || Array.isArray(guildConfig)) { + continue; + } + const channels = (guildConfig as Record).channels; + if (!channels || typeof channels !== 'object' || Array.isArray(channels)) { + continue; + } + for (const channelConfig of Object.values(channels as Record)) { + sanitizeDiscordGuildChannelConfig(channelConfig); + } + } +} + /** * Strip `defaultAccount` from channel sections whose plugin schema * declares additionalProperties:false without listing `defaultAccount`. @@ -92,6 +165,17 @@ function sanitizeChannelSectionsBeforeWrite(config: OpenClawConfig): void { delete section.defaultAccount; } } + + const discordSection = config.channels.discord; + if (discordSection) { + sanitizeDiscordGuilds(discordSection); + const accounts = getChannelAccountsMap(discordSection); + if (accounts) { + for (const accountConfig of Object.values(accounts)) { + sanitizeDiscordGuilds(accountConfig); + } + } + } } async function fileExists(p: string): Promise { @@ -421,6 +505,10 @@ async function ensurePluginAllowlist(currentConfig: OpenClawConfig, channelType: ensurePluginRegistration(currentConfig, channelType); } + if (channelType === 'discord' || channelType === 'qqbot' || channelType === 'whatsapp') { + ensurePluginRegistration(currentConfig, channelType); + } + if (channelType === 'feishu') { const feishuPluginId = await resolveFeishuPluginId(); if (!currentConfig.plugins) { @@ -578,11 +666,11 @@ function transformChannelConfig( if (channelId && typeof channelId === 'string' && channelId.trim()) { guildConfig.channels = { - [channelId.trim()]: { allow: true, requireMention: true } + [channelId.trim()]: { requireMention: true } }; } else { guildConfig.channels = { - '*': { allow: true, requireMention: true } + '*': { requireMention: true } }; } @@ -623,6 +711,16 @@ function transformChannelConfig( transformedConfig.allowFrom = allowFrom; } + if (channelType === 'whatsapp') { + // The WhatsApp plugin stores QR/session state on disk and does not + // require static credentials, but the runtime still needs an enabled + // plugin config entry for the channel account to appear in status. + transformedConfig = { + ...transformedConfig, + enabled: transformedConfig.enabled ?? true, + }; + } + if (channelType === 'dingtalk') { // The per-account schema uses additionalProperties:false and does // NOT include these legacy/obsolete fields. Strip them before @@ -750,22 +848,8 @@ export async function saveChannelConfig( await ensurePluginAllowlist(currentConfig, resolvedChannelType); syncBuiltinChannelsWithPluginAllowlist(currentConfig, [resolvedChannelType]); - // Plugin-based channels (e.g. WhatsApp) go under plugins.entries, not channels - if (PLUGIN_CHANNELS.includes(resolvedChannelType)) { - ensurePluginRegistration(currentConfig, resolvedChannelType); - currentConfig.plugins!.entries![resolvedChannelType] = { - ...currentConfig.plugins!.entries![resolvedChannelType], - enabled: config.enabled ?? true, - }; - await writeOpenClawConfig(currentConfig); - logger.info('Plugin channel config saved', { - channelType: resolvedChannelType, - configFile: CONFIG_FILE, - path: `plugins.entries.${resolvedChannelType}`, - }); - console.log(`Saved plugin channel config for ${resolvedChannelType}`); - return; - } + // Plugin-based channels are mirrored into plugins.entries. below, + // but ClawX still keeps channels. as the local account-list source. if (!currentConfig.channels) { currentConfig.channels = {}; @@ -812,6 +896,21 @@ export async function saveChannelConfig( // read channels..enabled still work. channelSection.enabled = transformedConfig.enabled ?? channelSection.enabled ?? true; + // Plugin-backed channel packages read their activation/config from + // plugins.entries.. Mirror the enabled flag and account map there + // while preserving channels. for ClawX's account list UI. + if (PLUGIN_CHANNELS.includes(resolvedChannelType)) { + ensurePluginRegistration(currentConfig, resolvedChannelType); + const pluginEntry = currentConfig.plugins!.entries![resolvedChannelType]; + const pluginAccounts = ensureChannelAccountsMap(pluginEntry); + pluginEntry.defaultAccount = channelSection.defaultAccount; + pluginEntry.enabled = channelSection.enabled; + pluginAccounts[resolvedAccountId] = { + ...pluginAccounts[resolvedAccountId], + ...accounts[resolvedAccountId], + }; + } + // Most OpenClaw channel plugins/built-ins also read the default // account's credentials from the top level of `channels.` // (e.g. channels.feishu.appId). Mirror them there so the diff --git a/electron/utils/openclaw-auth.ts b/electron/utils/openclaw-auth.ts index 5f64b2e..d13a464 100644 --- a/electron/utils/openclaw-auth.ts +++ b/electron/utils/openclaw-auth.ts @@ -2485,6 +2485,48 @@ export async function sanitizeOpenClawConfig(): Promise { modified = true; console.log(`[sanitize] Mirrored ${channelType} default account credentials to top-level channels.${channelType}`); } + + if (channelType === 'discord') { + const sanitizeDiscordGuildChannelConfig = (channelConfig: unknown): boolean => { + if (!channelConfig || typeof channelConfig !== 'object' || Array.isArray(channelConfig)) return false; + const channelRecord = channelConfig as Record; + let channelModified = false; + if (channelRecord.allow === false && channelRecord.enabled === undefined) { + channelRecord.enabled = false; + channelModified = true; + } + for (const key of ['allow']) { + if (key in channelRecord) { + delete channelRecord[key]; + channelModified = true; + } + } + return channelModified; + }; + const sanitizeDiscordGuilds = (target: Record): boolean => { + const guilds = target.guilds; + if (!guilds || typeof guilds !== 'object' || Array.isArray(guilds)) return false; + let guildsModified = false; + for (const guildConfig of Object.values(guilds as Record)) { + if (!guildConfig || typeof guildConfig !== 'object' || Array.isArray(guildConfig)) continue; + const channels = (guildConfig as Record).channels; + if (!channels || typeof channels !== 'object' || Array.isArray(channels)) continue; + for (const channelConfig of Object.values(channels as Record)) { + guildsModified = sanitizeDiscordGuildChannelConfig(channelConfig) || guildsModified; + } + } + return guildsModified; + }; + + const sanitizedTopLevel = sanitizeDiscordGuilds(section); + const sanitizedAccounts = Object.values(accounts ?? {}).some((accountConfig) => ( + accountConfig && typeof accountConfig === 'object' && sanitizeDiscordGuilds(accountConfig) + )); + if (sanitizedTopLevel || sanitizedAccounts) { + modified = true; + console.log('[sanitize] Removed incompatible Discord channel allow flags'); + } + } } } diff --git a/electron/utils/plugin-install.ts b/electron/utils/plugin-install.ts index 6c294b0..2c4de90 100644 --- a/electron/utils/plugin-install.ts +++ b/electron/utils/plugin-install.ts @@ -2,11 +2,8 @@ * Shared OpenClaw Plugin Install Utilities * * Provides version-aware install/upgrade logic for bundled OpenClaw plugins - * (DingTalk, WeCom, Feishu, WeChat). Used both at app startup (to auto-upgrade + * (DingTalk, WeCom, Feishu, WeChat, Discord, QQBot, WhatsApp). Used both at app startup (to auto-upgrade * stale plugins) and when a user configures a channel. - * - * Note: QQBot was moved to a built-in channel in OpenClaw 3.31 and is no longer - * managed as a plugin. */ import { app } from 'electron'; import path from 'node:path'; @@ -234,6 +231,9 @@ const PLUGIN_NPM_NAMES: Record = { dingtalk: '@soimy/dingtalk', wecom: '@wecom/wecom-openclaw-plugin', 'feishu-openclaw-plugin': '@larksuite/openclaw-lark', + discord: '@openclaw/discord', + qqbot: '@openclaw/qqbot', + whatsapp: '@openclaw/whatsapp', 'openclaw-weixin': '@tencent-weixin/openclaw-weixin', }; @@ -517,6 +517,18 @@ export function ensureWeChatPluginInstalled(): { installed: boolean; warning?: s return ensurePluginInstalled('openclaw-weixin', buildCandidateSources('openclaw-weixin'), 'WeChat'); } +export function ensureDiscordPluginInstalled(): { installed: boolean; warning?: string } { + return ensurePluginInstalled('discord', buildCandidateSources('discord'), 'Discord'); +} + +export function ensureQQBotPluginInstalled(): { installed: boolean; warning?: string } { + return ensurePluginInstalled('qqbot', buildCandidateSources('qqbot'), 'QQBot'); +} + +export function ensureWhatsAppPluginInstalled(): { installed: boolean; warning?: string } { + return ensurePluginInstalled('whatsapp', buildCandidateSources('whatsapp'), 'WhatsApp'); +} + // ── Bulk startup installer ─────────────────────────────────────────────────── /** @@ -528,6 +540,9 @@ const ALL_BUNDLED_PLUGINS = [ { fn: ensureFeishuPluginInstalled, label: 'Feishu' }, { fn: ensureWeChatPluginInstalled, label: 'WeChat' }, + { fn: ensureDiscordPluginInstalled, label: 'Discord' }, + { fn: ensureQQBotPluginInstalled, label: 'QQBot' }, + { fn: ensureWhatsAppPluginInstalled, label: 'WhatsApp' }, ] as const; /** diff --git a/package.json b/package.json index 0402cdd..8e23b26 100644 --- a/package.json +++ b/package.json @@ -106,8 +106,11 @@ "@grammyjs/runner": "^2.0.3", "@grammyjs/transformer-throttler": "^1.2.1", "@homebridge/ciao": "^1.3.7", - "@larksuite/openclaw-lark": "2026.4.8", + "@larksuite/openclaw-lark": "2026.5.12", "@larksuiteoapi/node-sdk": "^1.61.1", + "@openclaw/discord": "2026.5.12", + "@openclaw/qqbot": "2026.5.12", + "@openclaw/whatsapp": "2026.5.12", "@playwright/test": "^1.56.1", "@radix-ui/react-dialog": "^1.1.15", "@radix-ui/react-dropdown-menu": "^2.1.16", @@ -121,9 +124,9 @@ "@radix-ui/react-tabs": "^1.1.13", "@radix-ui/react-toast": "^1.2.15", "@radix-ui/react-tooltip": "^1.2.8", - "@soimy/dingtalk": "^3.5.3", + "@soimy/dingtalk": "^3.6.2", "@tencent-connect/qqbot-connector": "^1.1.0", - "@tencent-weixin/openclaw-weixin": "^2.1.9", + "@tencent-weixin/openclaw-weixin": "^2.4.3", "@testing-library/jest-dom": "^6.9.1", "@testing-library/react": "^16.3.2", "@types/node": "^25.3.0", @@ -133,7 +136,7 @@ "@typescript-eslint/eslint-plugin": "^8.56.0", "@typescript-eslint/parser": "^8.56.0", "@vitejs/plugin-react": "^5.1.4", - "@wecom/wecom-openclaw-plugin": "^2026.4.23", + "@wecom/wecom-openclaw-plugin": "^2026.5.7", "@whiskeysockets/baileys": "7.0.0-rc.9", "acpx": "0.5.3", "autoprefixer": "^10.4.24", @@ -153,7 +156,7 @@ "jsdom": "^28.1.0", "lucide-react": "^0.563.0", "mpg123-decoder": "^1.0.3", - "openclaw": "2026.4.23", + "openclaw": "2026.5.12", "opusscript": "^0.1.1", "playwright-core": "1.59.1", "png2icons": "^2.0.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7615f48..992f8e8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -94,11 +94,20 @@ importers: specifier: ^1.3.7 version: 1.3.7 '@larksuite/openclaw-lark': - specifier: 2026.4.8 - version: 2026.4.8(openclaw@2026.4.23(@napi-rs/canvas@0.1.100)(encoding@0.1.13)) + specifier: 2026.5.12 + version: 2026.5.12(openclaw@2026.5.12(encoding@0.1.13)) '@larksuiteoapi/node-sdk': specifier: ^1.61.1 version: 1.62.0 + '@openclaw/discord': + specifier: 2026.5.12 + version: 2026.5.12(@emnapi/core@1.10.0)(@emnapi/runtime@1.9.1)(openclaw@2026.5.12(encoding@0.1.13)) + '@openclaw/qqbot': + specifier: 2026.5.12 + version: 2026.5.12(openclaw@2026.5.12(encoding@0.1.13)) + '@openclaw/whatsapp': + specifier: 2026.5.12 + version: 2026.5.12(openclaw@2026.5.12(encoding@0.1.13))(sharp@0.34.5) '@playwright/test': specifier: ^1.56.1 version: 1.59.0 @@ -139,14 +148,14 @@ importers: specifier: ^1.2.8 version: 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@soimy/dingtalk': - specifier: ^3.5.3 - version: 3.5.3(openclaw@2026.4.23(@napi-rs/canvas@0.1.100)(encoding@0.1.13)) + specifier: ^3.6.2 + version: 3.6.2(openclaw@2026.5.12(encoding@0.1.13)) '@tencent-connect/qqbot-connector': specifier: ^1.1.0 version: 1.1.0 '@tencent-weixin/openclaw-weixin': - specifier: ^2.1.9 - version: 2.1.9 + specifier: ^2.4.3 + version: 2.4.3(openclaw@2026.5.12(encoding@0.1.13)) '@testing-library/jest-dom': specifier: ^6.9.1 version: 6.9.1 @@ -173,13 +182,13 @@ importers: version: 8.57.2(eslint@10.1.0(jiti@1.21.7))(typescript@5.9.3) '@vitejs/plugin-react': specifier: ^5.1.4 - version: 5.2.0(vite@7.3.1(@types/node@25.5.0)(jiti@1.21.7)(tsx@4.21.0)(yaml@2.8.3)) + version: 5.2.0(vite@7.3.1(@types/node@25.5.0)(jiti@1.21.7)(tsx@4.21.0)(yaml@2.9.0)) '@wecom/wecom-openclaw-plugin': - specifier: ^2026.4.23 - version: 2026.4.2201 + specifier: ^2026.5.7 + version: 2026.5.14(openclaw@2026.5.12(encoding@0.1.13)) '@whiskeysockets/baileys': specifier: 7.0.0-rc.9 - version: 7.0.0-rc.9(jimp@1.6.1)(sharp@0.34.5) + version: 7.0.0-rc.9(audio-decode@2.2.3)(jimp@1.6.1)(sharp@0.34.5) acpx: specifier: 0.5.3 version: 0.5.3 @@ -235,8 +244,8 @@ importers: specifier: ^1.0.3 version: 1.0.3 openclaw: - specifier: 2026.4.23 - version: 2026.4.23(@napi-rs/canvas@0.1.100)(encoding@0.1.13) + specifier: 2026.5.12 + version: 2026.5.12(encoding@0.1.13) opusscript: specifier: ^0.1.1 version: 0.1.1 @@ -284,10 +293,10 @@ importers: version: 3.5.0 tailwindcss: specifier: ^3.4.19 - version: 3.4.19(tsx@4.21.0)(yaml@2.8.3) + version: 3.4.19(tsx@4.21.0)(yaml@2.9.0) tailwindcss-animate: specifier: ^1.0.7 - version: 1.0.7(tailwindcss@3.4.19(tsx@4.21.0)(yaml@2.8.3)) + version: 1.0.7(tailwindcss@3.4.19(tsx@4.21.0)(yaml@2.9.0)) typescript: specifier: ^5.9.3 version: 5.9.3 @@ -299,7 +308,7 @@ importers: version: 1.1.3(react@19.2.4) vite: specifier: ^7.3.1 - version: 7.3.1(@types/node@25.5.0)(jiti@1.21.7)(tsx@4.21.0)(yaml@2.8.3) + version: 7.3.1(@types/node@25.5.0)(jiti@1.21.7)(tsx@4.21.0)(yaml@2.9.0) vite-plugin-electron: specifier: ^0.29.0 version: 0.29.1(vite-plugin-electron-renderer@0.14.6) @@ -308,7 +317,7 @@ importers: version: 0.14.6 vitest: specifier: ^4.0.18 - version: 4.1.1(@types/node@25.5.0)(jsdom@28.1.0(@noble/hashes@2.0.1))(vite@7.3.1(@types/node@25.5.0)(jiti@1.21.7)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.1.1(@types/node@25.5.0)(jsdom@28.1.0(@noble/hashes@2.0.1))(vite@7.3.1(@types/node@25.5.0)(jiti@1.21.7)(tsx@4.21.0)(yaml@2.9.0)) zustand: specifier: ^5.0.11 version: 5.0.12(@types/react@19.2.14)(react@19.2.4)(use-sync-external-store@1.6.0(react@19.2.4)) @@ -334,8 +343,8 @@ packages: peerDependencies: zod: ^3.25.0 || ^4.0.0 - '@agentclientprotocol/sdk@0.19.0': - resolution: {integrity: sha512-U9I8ws9WTOk6jCBAWpXefGSDgVXn14/kV6HFzwWGcstQ02mOQgClMAROHmoIn9GqZbDBDEOkdIbP4P4TEMQdug==} + '@agentclientprotocol/sdk@0.21.0': + resolution: {integrity: sha512-ONj+Q8qOdNQp5XbH5jnMwzT9IKZJsSN0p0lkceS4GtUtNOPVLpNzSS8gqQdGMKfBvA0ESbkL8BTaSN1Rc9miEw==} peerDependencies: zod: ^3.25.0 || ^4.0.0 @@ -343,8 +352,8 @@ packages: resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} engines: {node: '>=10'} - '@anthropic-ai/sdk@0.90.0': - resolution: {integrity: sha512-MzZtPabJF1b0FTDl6Z6H5ljphPwACLGP13lu8MTiB8jXaW/YXlpOp+Po2cVou3MPM5+f5toyLnul9whKCy7fBg==} + '@anthropic-ai/sdk@0.91.1': + resolution: {integrity: sha512-LAmu761tSN9r66ixvmciswUj/ZC+1Q4iAfpedTfSVLeswRwnY3n2Nb6Tsk+cLPP28aLOPWeMgIuTuCcMC6W/iw==} hasBin: true peerDependencies: zod: ^3.25.0 || ^4.0.0 @@ -352,9 +361,6 @@ packages: zod: optional: true - '@anthropic-ai/vertex-sdk@0.16.0': - resolution: {integrity: sha512-ntxemtRkwPsjVzGQJsmBPRW38tfas6VuVlD1v6pHffDJKLPtCdaiN9KUQeraJ/F34tjxEWlsaCnl3t/orJm1Xw==} - '@ark/schema@0.56.0': resolution: {integrity: sha512-ECg3hox/6Z/nLajxXqNhgPtNdHWC9zNsDyskwO28WinoFEnWow4IsERNz9AnXRhTZJnYIlAJ4uGn3nlLk65vZA==} @@ -388,44 +394,44 @@ packages: '@aws-crypto/util@5.2.0': resolution: {integrity: sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==} - '@aws-sdk/client-bedrock-runtime@3.1035.0': - resolution: {integrity: sha512-XELIQk+znh53J2Bj0EmOftgcKRLw3tvI/P4WHLgSbSBWPh+wg0SvHu+bgIlzMHARbOC9auA0lsH+Eb9JwF1yjA==} + '@aws-sdk/client-bedrock-runtime@3.1042.0': + resolution: {integrity: sha512-uYJ/HDSQvorlgYqZSwRFGolEx5wygqyuBRfemXJ3Bla2yiRj9maSVOvWP88i/hDC2BKoH6NQw8GPB9Z4RYAnwQ==} engines: {node: '>=20.0.0'} - '@aws-sdk/core@3.974.4': - resolution: {integrity: sha512-EbVgyzQ83/Lf6oh1O4vYY47tuYw3Aosthh865LNU77KyotKz+uvEBNmsl/bSVS/vG+IU39mCqcOHrnhmhF4lug==} + '@aws-sdk/core@3.974.10': + resolution: {integrity: sha512-ZGFFlYynBR78Y/F8b/7y4i4sgW/iGwJSjoM7AZo5Et6vyr4/L0bunN+uzKMsvecCZyqcPp4RRK7Rs17l0kMujg==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-env@3.972.30': - resolution: {integrity: sha512-dHpeqa29a0cBYq/h59IC2EK3AphLY96nKy4F35kBtiz9GuKDc32UYRTgjZaF8uuJCnqgw9omUZKR+9myyDHC2A==} + '@aws-sdk/credential-provider-env@3.972.36': + resolution: {integrity: sha512-gE+CGuPZD1eqUWGSrM8CXDjlwuPujIuwI+IlorD1wE2RcANKKT4jscB9GY1nTJbjmXzD18sycsYbgCG5m3n4/g==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-http@3.972.32': - resolution: {integrity: sha512-A+ZTT//Mswkf9DFEM6XlngwOtYdD8X4CUcoZ2wdpgI8cCs9mcGeuhgTwbGJvealub/MeONOaUr3FbRPMKmTDjg==} + '@aws-sdk/credential-provider-http@3.972.38': + resolution: {integrity: sha512-cHZo3bV6zN9joDQ2AYVctfzHTKStxWKwnGu0z7GwCUC+DAtB3qL/+26l+a63RbmFbVvb1JK+0vJKodN3hRMwyw==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-ini@3.972.34': - resolution: {integrity: sha512-MoRc7tLnx3JpFkV2R826enEfBUVN8o9Cc7y3hnbMwiWzL/VJhgfxRQzHkEL9vWorMWP7tibltsRcLoid9fsVdw==} + '@aws-sdk/credential-provider-ini@3.972.40': + resolution: {integrity: sha512-0NFGS9I3PD2yMveQqqpwpRdyZVStzgk0Yr2rZHh80kV/QNqQCK5lSrksvU3nBcRNSUF5Uk8rL3Xk0EVR+UVAnA==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-login@3.972.34': - resolution: {integrity: sha512-XVSklkRRQ/CQDmv3VVFdZRl5hTFgncFhZrLyi0Ai4LZk5o3jpY5HIfuTK7ad7tixPKa+iQmL9+vg9qNyYZB+nw==} + '@aws-sdk/credential-provider-login@3.972.40': + resolution: {integrity: sha512-IEIl+UQnrEjZP53TSl91e8LBephi4i1Mt9WZrMgN8pOg6xPOLZdkN1GhsEzjkMD1TQy4Fp2dwWA/9ToTQFOlLA==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-node@3.972.35': - resolution: {integrity: sha512-nVrY7AdGfzYgAa/jd9m06p3ES7QQDaB7zN9c+vXnVXxBRkAs9MjRDPB5AKogWuC6phddltfvHGFqLDJmyU9u/A==} + '@aws-sdk/credential-provider-node@3.972.41': + resolution: {integrity: sha512-h6BlclpsPGkx7Pv7ukr8oKVqN3jvxnH5n9ZIUQa8focr1ZkKd2MYiPJ2Nv9GI97dohJVJBfZAsTp/qoZL5R1pw==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-process@3.972.30': - resolution: {integrity: sha512-McJPomNTSEo+C6UA3Zq6pFrcyTUaVsoPPBOvbOHAoIFPc8Z2CMLndqFJOnB+9bVFiBTWQLutlVGmrocBbvv4MQ==} + '@aws-sdk/credential-provider-process@3.972.36': + resolution: {integrity: sha512-eDQ6X7clTAOxXegOx4rGT1hyfusGEYdJGCGo0Ym2+CKeMQBjk+SJSxSVev11NJew5xJHJ/c3hryl2awKaxuSEA==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-sso@3.972.34': - resolution: {integrity: sha512-WngYb2K+/yhkDOmDfAOjoCa9Ja3he0DZiAraboKwgWoVRkajDIcDYBCVbUTxtTUldvQoe7VvHLTrBNxvftN1aQ==} + '@aws-sdk/credential-provider-sso@3.972.40': + resolution: {integrity: sha512-jaABbsoOkGlKg5kaHetYmUV6mWM57H89ia0Yksom1XxC847mfjmEVb4p7VijS1sjPbXjUii4cftJuwsl4MXkRg==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-web-identity@3.972.34': - resolution: {integrity: sha512-5KLUH+XmSNRj6amJiJSrPsCxU5l/PYDfxyqPa1MxWhHoQC3sxvGPrSib3IE+HQlfRA4e2kO0bnJy7HJdjvpuuA==} + '@aws-sdk/credential-provider-web-identity@3.972.40': + resolution: {integrity: sha512-bfIrM8IIzbRtXRQWx/vNEUBLTImLZyX5uKk8uSdeSAZ4Mj3Yi4UnRJLK4FkQLWErbM3McpVLQ1DaM6XO66Ed5g==} engines: {node: '>=20.0.0'} '@aws-sdk/eventstream-handler-node@3.972.14': @@ -436,56 +442,52 @@ packages: resolution: {integrity: sha512-QUqLs7Af1II9X4fCRAu+EGHG3KHyOp4RkuLhRKoA3NuFlh6TL8i+zXBl8w2LUxqm44B/Kom45hgSlwA1SpTsXQ==} engines: {node: '>=20.0.0'} - '@aws-sdk/middleware-host-header@3.972.10': - resolution: {integrity: sha512-IJSsIMeVQ8MMCPbuh1AbltkFhLBLXn7aejzfX5YKT/VLDHn++Dcz8886tXckE+wQssyPUhaXrJhdakO2VilRhg==} + '@aws-sdk/middleware-host-header@3.972.11': + resolution: {integrity: sha512-CBC6+tVYaOJo7QXgN1zJ4Ba2f3/Cpy4eRViYFimXW/O5Mn8hBmgXXzHu4vy4ubT80YWnp8aCFygr7dTOa14yQg==} engines: {node: '>=20.0.0'} '@aws-sdk/middleware-logger@3.972.10': resolution: {integrity: sha512-OOuGvvz1Dm20SjZo5oEBePFqxt5nf8AwkNDSyUHvD9/bfNASmstcYxFAHUowy4n6Io7mWUZ04JURZwSBvyQanQ==} engines: {node: '>=20.0.0'} - '@aws-sdk/middleware-recursion-detection@3.972.11': - resolution: {integrity: sha512-+zz6f79Kj9V5qFK2P+D8Ehjnw4AhphAlCAsPjUqEcInA9umtSSKMrHbSagEeOIsDNuvVrH98bjRHcyQukTrhaQ==} + '@aws-sdk/middleware-recursion-detection@3.972.12': + resolution: {integrity: sha512-5eltYxKB4MfdQv7/VhWxRbAVQKow5dz9votRFigTYrWJHMQXwLMltlbk7KFWSZh5NDBySfmjT7Jv/DWfYCmDng==} engines: {node: '>=20.0.0'} - '@aws-sdk/middleware-sdk-s3@3.972.33': - resolution: {integrity: sha512-n8Eh/+kq3u/EodLr8n6sQupu03QGjf122RHXCTGLaHSkavz/2beSKpRlq2oDgfmJZNkAkWF113xbyaUmyOd+YA==} - engines: {node: '>=20.0.0'} - - '@aws-sdk/middleware-user-agent@3.972.34': - resolution: {integrity: sha512-jrmJHyYlTQocR7H4VhvSFhaoedMb2rmlOTvFWD6tNBQ/EVQhTsrNfQUYFuPiOc2wUGxbm5LgCHtnvVmCPgODHw==} + '@aws-sdk/middleware-user-agent@3.972.40': + resolution: {integrity: sha512-QLpD+HNQtL1Mc49/GRa6RmZvi/TEYBWPevC9F3L+j96IoG3xOSRctdQfbkX0lETb3TX9QQXU1oGYDmAB+YJprA==} engines: {node: '>=20.0.0'} '@aws-sdk/middleware-websocket@3.972.16': resolution: {integrity: sha512-86+S9oCyRVGzoMRpQhxkArp7kD2K75GPmaNevd9B6EyNhWoNvnCZZ3WbgN4j7ZT+jvtvBCGZvI2XHsWZJ+BRIg==} engines: {node: '>= 14.0.0'} - '@aws-sdk/nested-clients@3.997.2': - resolution: {integrity: sha512-uGGQO08YetrqfInOKG5atRMrCDRQWRuZ9gGfKY6svPmuE4K7ac+XcbCkpWpjcA7yCYsBaKB/Nly4XKgPXUO1PA==} + '@aws-sdk/nested-clients@3.997.8': + resolution: {integrity: sha512-/Vw2M27w+0APfMDzDpvv8auA4WiJ4D22+lC61pMS2M8Wk+4IydeRqh5utbrh+A5gQRxgUYd/xz3tdv8nQlmiHg==} engines: {node: '>=20.0.0'} - '@aws-sdk/region-config-resolver@3.972.13': - resolution: {integrity: sha512-CvJ2ZIjK/jVD/lbOpowBVElJyC1YxLTIJ13yM0AEo0t2v7swOzGjSA6lJGH+DwZXQhcjUjoYwc8bVYCX5MDr1A==} + '@aws-sdk/region-config-resolver@3.972.14': + resolution: {integrity: sha512-VuLXVmm7+lKVxqFcOItPkXhjbJ02iUfxkxheRu41SfWf6/xrZup2A2SwHZos/LeQGu3SBHeqTQht80Uo3ienPA==} engines: {node: '>=20.0.0'} - '@aws-sdk/signature-v4-multi-region@3.996.21': - resolution: {integrity: sha512-3EpT+C0QdmTMB5aVeJ5odWSLt9vg2oGzUXl1xvUazKGlkr9OBYnegNWqhhjGgZdv8RmSi5eS8nqqB+euNP2aqA==} + '@aws-sdk/signature-v4-multi-region@3.996.26': + resolution: {integrity: sha512-2N62veqdMZBCwQUHsbhtnaovOFjOa5Dn3dAD1nRqFTUXR4QmirT3HZnfus/L1DS08Vm5CkoKmL0iMVt6YbqEag==} engines: {node: '>=20.0.0'} - '@aws-sdk/token-providers@3.1035.0': - resolution: {integrity: sha512-E6IO3Cn+OzBe6Sb5pnubd5Y8qSUMAsVKkD5QSwFfIx5fV1g5SkYwUDRDyPlm90RuIVcCo28wpMJU6W8wXH46Aw==} + '@aws-sdk/token-providers@3.1042.0': + resolution: {integrity: sha512-rOEGTVOrceb/1CfIWK0zl1v2WS70f/i5bDirLl5xdFAbVQ5znub6Ezf2ugmJEg+rionO0IkwbKX3Dh3T/oZjbA==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/token-providers@3.1047.0': + resolution: {integrity: sha512-GwJUeMijpeO2SOGGLRg4q2Nj9foBUBd7hTALYVId+m8fQmA4P2hITp5dmrZFd4AjEkSVmt2eFqmk3TttF7HZeQ==} engines: {node: '>=20.0.0'} '@aws-sdk/types@3.973.8': resolution: {integrity: sha512-gjlAdtHMbtR9X5iIhVUvbVcy55KnznpC6bkDUWW9z915bi0ckdUr5cjf16Kp6xq0bP5HBD2xzgbL9F9Quv5vUw==} engines: {node: '>=20.0.0'} - '@aws-sdk/util-arn-parser@3.972.3': - resolution: {integrity: sha512-HzSD8PMFrvgi2Kserxuff5VitNq2sgf3w9qxmskKDiDTThWfVteJxuCS9JXiPIPtmCrp+7N9asfIaVhBFORllA==} - engines: {node: '>=20.0.0'} - - '@aws-sdk/util-endpoints@3.996.8': - resolution: {integrity: sha512-oOZHcRDihk5iEe5V25NVWg45b3qEA8OpHWVdU/XQh8Zj4heVPAJqWvMphQnU7LkufmUo10EpvFPZuQMiFLJK3g==} + '@aws-sdk/util-endpoints@3.996.9': + resolution: {integrity: sha512-ibx8Vd73rCTHekNGeXX8cpGWoBKbNAlwKHL3yjSxxttu5QnNDaSAM7/0MFYDjU31/F4lyrPoQcGirT0ew61xcg==} engines: {node: '>=20.0.0'} '@aws-sdk/util-format-url@3.972.10': @@ -496,11 +498,11 @@ packages: resolution: {integrity: sha512-WhlJNNINQB+9qtLtZJcpQdgZw3SCDCpXdUJP7cToGwHbCWCnRckGlc6Bx/OhWwIYFNAn+FIydY8SZ0QmVu3xTQ==} engines: {node: '>=20.0.0'} - '@aws-sdk/util-user-agent-browser@3.972.10': - resolution: {integrity: sha512-FAzqXvfEssGdSIz8ejatan0bOdx1qefBWKF/gWmVBXIP1HkS7v/wjjaqrAGGKvyihrXTXW00/2/1nTJtxpXz7g==} + '@aws-sdk/util-user-agent-browser@3.972.11': + resolution: {integrity: sha512-kq3RS6XQtHMrLFShbkem6h+8fxazB3jEIsbMC6aaSInOciRGE+eGAqTgJ+obO7Euo/pjM8thVqLiLISEH9X9DA==} - '@aws-sdk/util-user-agent-node@3.973.20': - resolution: {integrity: sha512-owEqyKr0z5hWwk+uHwudwNhyFMZ9f9eSWr/k/XD6yeDCI7hHyc56s4UOY1iBQmoramTbdAY4UCuLLEuKmjVXrg==} + '@aws-sdk/util-user-agent-node@3.973.26': + resolution: {integrity: sha512-9bHR/EERjhrUGyo1qW620ogbGBtCglYB/pEtcm85sVd4/Ah+bwdLI3g1aJf75oNwNwh7+fw+8wOk/OCWHjzVmA==} engines: {node: '>=20.0.0'} peerDependencies: aws-crt: '>=1.0.0' @@ -508,8 +510,8 @@ packages: aws-crt: optional: true - '@aws-sdk/xml-builder@3.972.18': - resolution: {integrity: sha512-BMDNVG1ETXRhl1tnisQiYBef3RShJ1kfZA7x7afivTFMLirfHNTb6U71K569HNXhSXbQZsweHvSDZ6euBw8hPA==} + '@aws-sdk/xml-builder@3.972.24': + resolution: {integrity: sha512-V8z5YcDPfsvzrBlj0xR1vhRtocblhYbqdreCJB/voGd4Sr5zjNAeWxexbnqVtskTJe0vFb5KMqbSL++ePl+zRw==} engines: {node: '>=20.0.0'} '@aws/lambda-invoke-store@0.2.4': @@ -629,12 +631,20 @@ packages: '@clack/core@1.2.0': resolution: {integrity: sha512-qfxof/3T3t9DPU/Rj3OmcFyZInceqj/NVtO9rwIuJqCUgh32gwPjpFQQp/ben07qKlhpwq7GzfWpST4qdJ5Drg==} + '@clack/core@1.3.0': + resolution: {integrity: sha512-xJPHpAmEQUBrXSLx0gF+q5K/IyihXpsHZcha+jB+tyahsKRK3Dxo4D0coZDewHo12NhiuzC3dTtMPbm53GEAAA==} + engines: {node: '>= 20.12.0'} + '@clack/prompts@0.11.0': resolution: {integrity: sha512-pMN5FcrEw9hUkZA4f+zLlzivQSeQf5dRGJjSUbvVYDLvpKCdQx5OaknvKzgbtXOizhP+SJJJjqEbOe55uKKfAw==} '@clack/prompts@1.2.0': resolution: {integrity: sha512-4jmztR9fMqPMjz6H/UZXj0zEmE43ha1euENwkckKKel4XpSfokExPo5AiVStdHSAlHekz4d0CA/r45Ok1E4D3w==} + '@clack/prompts@1.3.0': + resolution: {integrity: sha512-GgcWwRCs/xPtaqlMy8qRhPnZf9vlWcWZNHAitnVQ3yk7JmSralSiq5q07yaffYE8SogtDm7zFeKccx1QNVARpw==} + engines: {node: '>= 20.12.0'} + '@cloudflare/workers-types@4.20260405.1': resolution: {integrity: sha512-PokTmySa+D6MY01R1UfYH48korsN462NK/fl3aw47Hg7XuLuSo/RTpjT0vtWaJhJoFY5tHGOBBIbDcIc8wltLg==} @@ -682,6 +692,24 @@ packages: resolution: {integrity: sha512-3yJ255e4ag3wfZu/DSxeOZK1UtnqNxnspmLaQetGT0pDkThNZoHs+Zg6dgZZ19JEVomXygvfHn9lNpICZuYtEA==} engines: {node: '>=22.12.0'} + '@earendil-works/pi-agent-core@0.74.0': + resolution: {integrity: sha512-6GMR7/wwjEJ1EsXLWEz03QOWin4AMrJ/AZoMpgm5DJ6GHsF6q6GOhQbj5Zip4dow3vo/TmBAVqM+vmGfrjGAFQ==} + engines: {node: '>=20.0.0'} + + '@earendil-works/pi-ai@0.74.0': + resolution: {integrity: sha512-7M7qcrZY/KEkH4wFkX3eqzvmKru4O88wezNKoN0KD2m4aAOmp9tdW2xCmUgSTSWlKB7b2Xw9QtAgrzHtg6t6iw==} + engines: {node: '>=20.0.0'} + hasBin: true + + '@earendil-works/pi-coding-agent@0.74.0': + resolution: {integrity: sha512-Q5GikbB5vRBrsrrf/uvet53rPSQ1sn5I5mO+l7sIobdXYpS04/X2oOc2UHFm90fNdkl3yU+ANTZL0zOtHbnqRw==} + engines: {node: '>=20.6.0'} + hasBin: true + + '@earendil-works/pi-tui@0.74.0': + resolution: {integrity: sha512-1aIfXZp7D/z+1VlZX8BZcs6pgO8rjmil7kwyhctNDsWvce3Yfl8GVgu4eq+I0Mjhr8Cj+ipBiv9CLIzdoyCOIQ==} + engines: {node: '>=20.0.0'} + '@electron/asar@3.4.1': resolution: {integrity: sha512-i4/rNPRS84t0vSRa2HorerGRXWyF4vThfHesw0dmcWHp+cspK743UanA0suA5Q5y8kzY2y6YKrvbIUn69BCAiA==} engines: {node: '>=10.12.0'} @@ -953,8 +981,17 @@ packages: '@floating-ui/utils@0.2.11': resolution: {integrity: sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==} - '@google/genai@1.49.0': - resolution: {integrity: sha512-hO69Zl0H3x+L0KL4stl1pLYgnqnwHoLqtKy6MRlNnW8TAxjqMdOUVafomKd4z1BePkzoxJWbYILny9a2Zk43VQ==} + '@google/genai@1.52.0': + resolution: {integrity: sha512-gwSvbpiN/17O9TbsqSsE/OzZcpv5Fo4RQjdngGgogtuB9RsyJ8ZHhX5KjHj1bp5N9snN2eK8LDGXSaWW2hof8Q==} + engines: {node: '>=20.0.0'} + peerDependencies: + '@modelcontextprotocol/sdk': ^1.25.2 + peerDependenciesMeta: + '@modelcontextprotocol/sdk': + optional: true + + '@google/genai@2.0.1': + resolution: {integrity: sha512-trxxbVePM9J8Cuni5x7+xvApoqb2y6Zk27/wugjT2cuwHOT78nFGdf/Ni29MkDxzWwrj90OQpno1Ana6dm3D2A==} engines: {node: '>=20.0.0'} peerDependencies: '@modelcontextprotocol/sdk': ^1.25.2 @@ -987,6 +1024,10 @@ packages: resolution: {integrity: sha512-ncvcXQe4vrqBLNqnVjQjke5NpNin6SO9bStfBZ4jgZk/xIjD9GMcH8vp8XKd7hw5akIzwITMiDMysIKvE5rHBw==} hasBin: true + '@homebridge/ciao@1.3.8': + resolution: {integrity: sha512-lNhpCsZVbdbjz2trFjQdzQ3cUIMZQMIMksi7wd3ntTIYgdaGLqT1Ms97DfVIJYHzRuduf56ISvgU8RRLTpK/ng==} + hasBin: true + '@hono/node-server@1.19.13': resolution: {integrity: sha512-TsQLe4i2gvoTtrHje625ngThGBySOgSK3Xo2XRYOdqGN1teR8+I7vchQC46uLJi8OF62YTYA3AhSpumtkhsaKQ==} engines: {node: '>=18.14.1'} @@ -1307,8 +1348,8 @@ packages: '@keyv/serialize@1.1.1': resolution: {integrity: sha512-dXn3FZhPv0US+7dtJsIi2R+c7qWYiReoEh5zUntWCf4oSpMNib8FDhSoed6m3QyZdx5hK7iLFkYk3rNxwt8vTA==} - '@larksuite/openclaw-lark@2026.4.8': - resolution: {integrity: sha512-HHIwDBQPtEZSLHHCnV52ip5WL8mag/qBUucIyH+pbyMHAAXyKtPHTfXFGTm1/HVMC0ZH2km5f11QvNyy85SDGw==} + '@larksuite/openclaw-lark@2026.5.12': + resolution: {integrity: sha512-+Huw9PYq42U8vrEH8V8zsoXB8CDXpowfAqyxYdutFh0i/XNmybcTk1trpH20ONCEcEFWxvSUZQ0PvyHTJYFfsQ==} engines: {node: '>=22'} hasBin: true peerDependencies: @@ -1361,109 +1402,74 @@ packages: resolution: {integrity: sha512-9QOtNffcOF/c1seMCDnjckb3R9WHcG34tky+FHpNKKCW0wc/scYLwMtO+ptyGUfMW0/b/n4qRiALlaFHc9Oj7Q==} engines: {node: '>= 10.0.0'} - '@mariozechner/clipboard-darwin-arm64@0.3.3': - resolution: {integrity: sha512-+zhuZGXqVrdkbIRdnwiZNbTJ7V3elq/A+C5d5laJoyhJgWs41eO5NUMkBkj6f23F2L4PRXEhdn5/ktlPx+bG3Q==} + '@mariozechner/clipboard-darwin-arm64@0.3.2': + resolution: {integrity: sha512-uBf6K7Je1ihsgvmWxA8UCGCeI+nbRVRXoarZdLjl6slz94Zs1tNKFZqx7aCI5O1i3e0B6ja82zZ06BWrl0MCVw==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@mariozechner/clipboard-darwin-universal@0.3.3': - resolution: {integrity: sha512-x9aRfTyndVqpEQ44LNNCK/EXZd9y8rWkLQgNhmWpby9PXrjPhNxfjUc2Db4mt4nJjU/4zzO8F5v/XyzlUGSdhQ==} + '@mariozechner/clipboard-darwin-universal@0.3.2': + resolution: {integrity: sha512-mxSheKTW2U9LsBdXy0SdmdCAE5HqNS9QUmpNHLnfJ+SsbFKALjEZc5oRrVMXxGQSirDvYf5bjmRyT0QYYonnlg==} engines: {node: '>= 10'} os: [darwin] - '@mariozechner/clipboard-darwin-x64@0.3.3': - resolution: {integrity: sha512-6ut/NawB0KiYPCwrirgNp6Br62LntL978q7G6d/Rs2pmPvQb53bP96eUMYl+Y3a7Qk13bGZ4w9rVPFxRE9m9ag==} + '@mariozechner/clipboard-darwin-x64@0.3.2': + resolution: {integrity: sha512-U1BcVEoidvwIp95+HJswSW+xr28EQiHR7rZjH6pn8Sja5yO4Yoe3yCN0Zm8Lo72BbSOK/fTSq0je7CJpaPCspg==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@mariozechner/clipboard-linux-arm64-gnu@0.3.3': - resolution: {integrity: sha512-gf3dH4kBddU1AOyHVB53mjLUFfJAKlTmxTMw51jdeg7eE7IjfEBXVvM4bifMtBxbWkT0eA0FUZ1C0KQ6Z5l6pw==} + '@mariozechner/clipboard-linux-arm64-gnu@0.3.2': + resolution: {integrity: sha512-BsinwG3yWTIjdgNCxsFlip7LkfwPk+ruw/aFCXHUg/fb5XC/Ksp+YMQ7u0LUtiKzIv/7LMXgZInJQH6gxbAaqQ==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] libc: [glibc] - '@mariozechner/clipboard-linux-arm64-musl@0.3.3': - resolution: {integrity: sha512-o1paj2+zmAQ/LaPS85XJCxhNowNQpxYM2cGY6pWvB5Kqmz6hZjl6CzDg5tbf1hZkn/Em6jpOaE2UtMxKdELBDA==} + '@mariozechner/clipboard-linux-arm64-musl@0.3.2': + resolution: {integrity: sha512-0/Gi5Xq2V6goXBop19ePoHvXsmJD9SzFlO3S+d6+T2b+BlPcpOu3Oa0wTjl+cZrLAAEzA86aPNBI+VVAFDFPKw==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] libc: [musl] - '@mariozechner/clipboard-linux-riscv64-gnu@0.3.3': - resolution: {integrity: sha512-dkEhE4ekePJwMbBq9HP1//CFMNmDzA/iV9AXqBfvL5CWmmDIRXqh4A3YZt3tWO/HdMerX+xNCEiR7WiOsIG+UA==} + '@mariozechner/clipboard-linux-riscv64-gnu@0.3.2': + resolution: {integrity: sha512-2AFFiXB24qf0zOZsxI1GJGb9wQGlOJyN6UwoXqmKS3dpQi/l6ix30IzDDA4c4ZcCcx4D+9HLYXhC1w7Sov8pXA==} engines: {node: '>= 10'} cpu: [riscv64] os: [linux] libc: [glibc] - '@mariozechner/clipboard-linux-x64-gnu@0.3.3': - resolution: {integrity: sha512-lT2yANtTLlEtFBIH3uGoRa/CQas/eBoLNi3qr9axQFoRgF4RGPSJ66yHOSnMECBneTIb1Iqv3UxokTfX27CdoQ==} + '@mariozechner/clipboard-linux-x64-gnu@0.3.2': + resolution: {integrity: sha512-v6fVnsn7WMGg73Dab8QMwyFce7tzGfgEixKgzLP8f1GJqkJZi5zO4k4FOHzSgUufgLil63gnxvMpjWkgfeQN7A==} engines: {node: '>= 10'} cpu: [x64] os: [linux] libc: [glibc] - '@mariozechner/clipboard-linux-x64-musl@0.3.3': - resolution: {integrity: sha512-saq/MCB0QHK/7ZZLjAZ0QkbY944dyjOsur8gneGCfMitt+GOiE1CU4OUipHC4b6x8UDY9bRLsR4aBaxu22OFPA==} + '@mariozechner/clipboard-linux-x64-musl@0.3.2': + resolution: {integrity: sha512-xVUtnoMQ8v2JVyfJLKKXACA6avdnchdbBkTsZs8BgJQo29qwCp5NIHAUO8gbJ40iaEGToW5RlmVk2M9V0HsHEw==} engines: {node: '>= 10'} cpu: [x64] os: [linux] libc: [musl] - '@mariozechner/clipboard-win32-arm64-msvc@0.3.3': - resolution: {integrity: sha512-cGuvSj0/2X2w983yEcKw+i+r1EBej6ZZIN+fXG3eY2G/HaIQpbXpLvMxKyZ9LKtbZx+Z6q/gELEoSBMLML6BaQ==} + '@mariozechner/clipboard-win32-arm64-msvc@0.3.2': + resolution: {integrity: sha512-AEgg95TNi8TGgak2wSXZkXKCvAUTjWoU1Pqb0ON7JHrX78p616XUFNTJohtIon3e0w6k0pYPZeCuqRCza/Tqeg==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@mariozechner/clipboard-win32-x64-msvc@0.3.3': - resolution: {integrity: sha512-5hvaEq/bgYovTIGx43O/S7loIHYV3ue90WcV1dz0wdMXroVKZKeU/yfwM0PALQA1OcrEHiGXGySFReXr72lGtA==} + '@mariozechner/clipboard-win32-x64-msvc@0.3.2': + resolution: {integrity: sha512-tGRuYpZwDOD7HBrCpyRuhGnHHSCknELvqwKKUG4JSfSB7JIU7LKRh6zx6fMUOQd8uISK35TjFg5UcNih+vJhFA==} engines: {node: '>= 10'} cpu: [x64] os: [win32] - '@mariozechner/clipboard@0.3.3': - resolution: {integrity: sha512-e7jASirzfm+ROiOGFh843+cFZTy3DfzP+jldCvh8RnEk0C3QihDTn7dd7Yh7KAJydwIJ18FJSZ2swHvCJhk18g==} + '@mariozechner/clipboard@0.3.5': + resolution: {integrity: sha512-D3F+UrU9CR7roJt0zDLp6Oc+4/KlLDIrN4frH+6V90SJNW2KKUec1oCQIPaaDjCqeOsQyX9dyqYbImIQIM45PA==} engines: {node: '>= 10'} - '@mariozechner/jiti@2.6.5': - resolution: {integrity: sha512-faGUlTcXka5l7rv0lP3K3vGW/ejRuOS24RR2aSFWREUQqzjgdsuWNo/IiPqL3kWRGt6Ahl2+qcDAwtdeWeuGUw==} - hasBin: true - - '@mariozechner/pi-agent-core@0.70.0': - resolution: {integrity: sha512-ZwfM5QPvSwza/apZhPIXjrI/blJBFqbVpK30ma4zNwH8VAyseKlzGDExCx/k+81Xydg60sQuG2BQVkYGmofuSg==} - engines: {node: '>=20.0.0'} - - '@mariozechner/pi-agent-core@0.70.2': - resolution: {integrity: sha512-g1hIdKyDwmQOoBGO0R4OhpemKeMENeK0vE5FJtuQKqEcsdCAkVBgZAK6aZUARYZVxMA718JS6WPLFWoddzjD7g==} - engines: {node: '>=20.0.0'} - - '@mariozechner/pi-ai@0.70.0': - resolution: {integrity: sha512-lVT9bb0eFkNr5YXvZ5r00TNA5r110fOO8uJV9VLCQ5GdtunWIjcptWitzIjjl2MF0/NDs7Kb2EwZctXQWWP7eA==} - engines: {node: '>=20.0.0'} - hasBin: true - - '@mariozechner/pi-ai@0.70.2': - resolution: {integrity: sha512-+30LRPjXsXF+oI96DvGWMbdPGeqoLJvadh6UPev7wx2DzhC9FEqXkQcoMZ0usbCm7E9pl8ua8a9s/pQ5ikaUbg==} - engines: {node: '>=20.0.0'} - hasBin: true - - '@mariozechner/pi-coding-agent@0.70.0': - resolution: {integrity: sha512-Sw5odG9BYIcRItb/o4Gmq0nSIgoWfx61Isjk3Gk4KqocxHZAOwZZYQ4mgb4GCsevqOMmAzX/H6PC52/TiN76fw==} - engines: {node: '>=20.6.0'} - hasBin: true - - '@mariozechner/pi-tui@0.70.0': - resolution: {integrity: sha512-x/CwIMP8v9KNrmgEFA0+AWIwSWeNAitEI4eVQtQ6q2a0PpE+vx1+j2oc+iDPe7E1YqrMHXaNlHJVCaVAv/UYrg==} - engines: {node: '>=20.0.0'} - - '@mariozechner/pi-tui@0.70.2': - resolution: {integrity: sha512-PtKC0NepnrYcqMx6MXkWTrBzC9tI62KeC6w940oT46lCbfvgmfqXciR15+9BZpxxc1H4jd3CMrKsmOPVeUqZ0A==} - engines: {node: '>=20.0.0'} - '@mistralai/mistralai@2.2.1': resolution: {integrity: sha512-uKU8CZmL2RzYKmplsU01hii4p3pe4HqJefpWNRWXm1Tcm0Sm4xXfwSLIy4k7ZCPlbETCGcp69E7hZs+WOJ5itQ==} @@ -1645,6 +1651,9 @@ packages: resolution: {integrity: sha512-XlOlEbQcE9fmuXxrVTXCTlG2nlRXa9Rj3rr5Ue/+tX+nmkgbX720YHh0VR3hBF9xDvwnb8D2shVGOwNx+ulArw==} engines: {node: '>= 20.19.0'} + '@nodable/entities@2.1.0': + resolution: {integrity: sha512-nyT7T3nbMyBI/lvr6L5TyWbFJAI9FTgVRakNoBqCD+PmID8DzFrrNdLLtHMwMszOtqZa8PAOV24ZqDnQrhQINA==} + '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -1665,6 +1674,34 @@ packages: resolution: {integrity: sha512-/xGlezI6xfGO9NwuJlnwz/K14qD1kCSAGtacBHnGzeAIuJGazcp45KP5NuyARXoKb7cwulAGWVsbeSxdG/cb0Q==} engines: {node: ^18.17.0 || >=20.5.0} + '@openclaw/discord@2026.5.12': + resolution: {integrity: sha512-nyB2wDpSyHcXbDwWnGQ+KjnPXcbAOj8MiLe8YS6IJbZUjcqjtObuUn5vh72Srcixupugu1PzNZT0WntO8J4n0A==} + peerDependencies: + openclaw: '>=2026.5.12' + peerDependenciesMeta: + openclaw: + optional: true + + '@openclaw/fs-safe@0.2.4': + resolution: {integrity: sha512-Fo3WTQhxu0asD/rZqIKBqhX6fuZfjyHxSW5yTKfcRx+D9BRAcz0AGoVh+3ur/4XRvZkvsh3Ud8XTw006yRYLgg==} + engines: {node: '>=20.11'} + + '@openclaw/qqbot@2026.5.12': + resolution: {integrity: sha512-oDRgv+nnTtT75WhONQ1zmYsh529X3ZE0IywnVzdVBR0Pcw3Dq/0Y5+6YPsvIdYwWkgTtXRehVaTzBNyrctFQbg==} + peerDependencies: + openclaw: '>=2026.5.12' + peerDependenciesMeta: + openclaw: + optional: true + + '@openclaw/whatsapp@2026.5.12': + resolution: {integrity: sha512-eJKPIJOe6NFMbzQHP6O007l/85+HZgLU7EJ/sy6TzLvMdv61MxHvEAN9Q8gAPOZeUR/e0/v85Bx4/yfvqtH2cQ==} + peerDependencies: + openclaw: '>=2026.5.12' + peerDependenciesMeta: + openclaw: + optional: true + '@pinojs/redact@0.4.0': resolution: {integrity: sha512-k2ENnmBugE/rzQfEcdWHcCY+/FM3VLzH9cYEsbdsoqrvzAKRhUZeRNhAZvB8OitQJ1TBed3yqWtdjzS6wJKBwg==} @@ -1689,6 +1726,9 @@ packages: '@protobufjs/codegen@2.0.4': resolution: {integrity: sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==} + '@protobufjs/codegen@2.0.5': + resolution: {integrity: sha512-zgXFLzW3Ap33e6d0Wlj4MGIm6Ce8O89n/apUaGNB/jx+hw+ruWEp7EwGUshdLKVRCxZW12fp9r40E1mQrf/34g==} + '@protobufjs/eventemitter@1.1.0': resolution: {integrity: sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==} @@ -1701,6 +1741,9 @@ packages: '@protobufjs/inquire@1.1.0': resolution: {integrity: sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==} + '@protobufjs/inquire@1.1.1': + resolution: {integrity: sha512-mnzgDV26ueAvk7rsbt9L7bE0SuAoqyuys/sMMrmVcN5x9VsxpcG3rqAUSgDyLp0UZlmNfIbQ4fHfCtreVBk8Ew==} + '@protobufjs/path@1.1.2': resolution: {integrity: sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==} @@ -1710,6 +1753,9 @@ packages: '@protobufjs/utf8@1.1.0': resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==} + '@protobufjs/utf8@1.1.1': + resolution: {integrity: sha512-oOAWABowe8EAbMyWKM0tYDKi8Yaox52D+HWZhAIJqQXbqe0xI/GV7FhLWqlEKreMkfDjshR5FKgi3mnle0h6Eg==} + '@radix-ui/number@1.1.1': resolution: {integrity: sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g==} @@ -2317,12 +2363,12 @@ packages: resolution: {integrity: sha512-TzDZcAnhTyAHbXVxWZo7/tEcrIeFq20IBk8So3OLOetWpR8EwY/yEqBMBFaJMeyEiREDq4NfEl+qO3OAUD+vbQ==} engines: {node: '>=18.0.0'} - '@smithy/core@3.23.16': - resolution: {integrity: sha512-JStomOrINQA1VqNEopLsgcdgwd42au7mykKqVr30XFw89wLt9sDxJDi4djVPRwQmmzyTGy/uOvTc2ultMpFi1w==} + '@smithy/core@3.24.2': + resolution: {integrity: sha512-IKS7qX59fAGCYBmt5JChcDswQDupZqT2Yn2ZBA3UgTlsjRNNkQzZobbn95xoAAdtTyJmBiJB3Y02qR3rgy3Zog==} engines: {node: '>=18.0.0'} - '@smithy/credential-provider-imds@4.2.14': - resolution: {integrity: sha512-Au28zBN48ZAoXdooGUHemuVBrkE+Ie6RPmGNIAJsFqj33Vhb6xAgRifUydZ2aY+M+KaMAETAlKk5NC5h1G7wpg==} + '@smithy/credential-provider-imds@4.3.2': + resolution: {integrity: sha512-iYr9ekBjmZ+FwkiHEopqGscBbl78X62cq3p5Dd0eC+gNd7fybNZFQQdDuOQjTVmFymleuA8YRWZnuXWZ8B3kKA==} engines: {node: '>=18.0.0'} '@smithy/eventstream-codec@4.2.14': @@ -2345,8 +2391,8 @@ packages: resolution: {integrity: sha512-lWyt4T2XQZUZgK3tQ3Wn0w3XBvZsK/vjTuJl6bXbnGZBHH0ZUSONTYiK9TgjTTzU54xQr3DRFwpjmhp0oLm3gg==} engines: {node: '>=18.0.0'} - '@smithy/fetch-http-handler@5.3.17': - resolution: {integrity: sha512-bXOvQzaSm6MnmLaWA1elgfQcAtN4UP3vXqV97bHuoOrHQOJiLT3ds6o9eo5bqd0TJfRFpzdGnDQdW3FACiAVdw==} + '@smithy/fetch-http-handler@5.4.2': + resolution: {integrity: sha512-3wF40g8OOCA5BnwQUvwtzZqYBbWWftDjpAlWIUo6Yld3ZzJaMAKqg7MWQBPjE8oLaqvZQUE7tVGlZPsae6A4bQ==} engines: {node: '>=18.0.0'} '@smithy/hash-node@4.2.14': @@ -2369,16 +2415,16 @@ packages: resolution: {integrity: sha512-xhHq7fX4/3lv5NHxLUk3OeEvl0xZ+Ek3qIbWaCL4f9JwgDZEclPBElljaZCAItdGPQl/kSM4LPMOpy1MYgprpw==} engines: {node: '>=18.0.0'} - '@smithy/middleware-endpoint@4.4.31': - resolution: {integrity: sha512-KJPdCIN2kOE2aGmqZd7eUTr4WQwOGgtLWgUkswGJggs7rBcQYQjcZMEDa3C0DwbOiXS9L8/wDoQHkfxBYLfiLw==} + '@smithy/middleware-endpoint@4.5.2': + resolution: {integrity: sha512-1aiE05F2Er+ZYvGfrfI0+JRNeFY4M+hSjUp0SIKyq98k9iC0Lo71XwLbKWcFgFBZuhg5n6i+MQzRVmeCDlWOjw==} engines: {node: '>=18.0.0'} - '@smithy/middleware-retry@4.5.4': - resolution: {integrity: sha512-/z7nIFK+ZRW3Ie/l3NEVGdy34LvmEOzBrtBAvgWZ/4PrKX0xP3kWm8pkfcwUk523SqxZhdbQP9JSXgjF77Uhpw==} + '@smithy/middleware-retry@4.6.2': + resolution: {integrity: sha512-ovt2p0LV3sSRpt8EBajI6imGMz/kq8F73P0eSOq6bhtvcOZM3xODFOjk6Lz2KvKfe7dVlxpNIiOYYyVe8ofv0A==} engines: {node: '>=18.0.0'} - '@smithy/middleware-serde@4.2.19': - resolution: {integrity: sha512-Q6y+W9h3iYVMCKWDoVge+OC1LKFqbEKaq8SIWG2X2bWJRpd/6dDLyICcNLT6PbjH3Rr6bmg/SeDB25XFOFfeEw==} + '@smithy/middleware-serde@4.3.2': + resolution: {integrity: sha512-hM3b9/JgMjohYHcgh5780ymND7RWGvYuyjNDtQL6P/DawtdbUu5m4oon4FHas+rmjdQ2DHee3cmAetTgU6keJw==} engines: {node: '>=18.0.0'} '@smithy/middleware-stack@4.2.14': @@ -2389,8 +2435,8 @@ packages: resolution: {integrity: sha512-S+gFjyo/weSVL0P1b9Ts8C/CwIfNCgUPikk3sl6QVsfE/uUuO+QsF+NsE/JkpvWqqyz1wg7HFdiaZuj5CoBMRg==} engines: {node: '>=18.0.0'} - '@smithy/node-http-handler@4.6.0': - resolution: {integrity: sha512-P734cAoTFtuGfWa/R3jgBnGlURt2w9bYEBwQNMKf58sRM9RShirB2mKwLsVP+jlG/wxpCu8abv8NxdUts8tdLA==} + '@smithy/node-http-handler@4.7.2': + resolution: {integrity: sha512-EdksTZ8UXYxGUgQ4mpIKrHoaj9WVGsp66TpZuixLAz1Jex8YDLnS4RH9ktGED5aOpN0OJlEtrsC9IGt76go1eA==} engines: {node: '>=18.0.0'} '@smithy/property-provider@4.2.14': @@ -2409,20 +2455,16 @@ packages: resolution: {integrity: sha512-hr+YyqBD23GVvRxGGrcc/oOeNlK3PzT5Fu4dzrDXxzS1LpFiuL2PQQqKPs87M79aW7ziMs+nvB3qdw77SqE7Lw==} engines: {node: '>=18.0.0'} - '@smithy/service-error-classification@4.3.0': - resolution: {integrity: sha512-9jKsBYQRPR0xBLgc2415RsA5PIcP2sis4oBdN9s0D13cg1B1284mNTjx9Yc+BEERXzuPm5ObktI96OxsKh8E9A==} - engines: {node: '>=18.0.0'} - '@smithy/shared-ini-file-loader@4.4.9': resolution: {integrity: sha512-495/V2I15SHgedSJoDPD23JuSfKAp726ZI1V0wtjB07Wh7q/0tri/0e0DLefZCHgxZonrGKt/OCTpAtP1wE1kQ==} engines: {node: '>=18.0.0'} - '@smithy/signature-v4@5.3.14': - resolution: {integrity: sha512-1D9Y/nmlVjCeSivCbhZ7hgEpmHyY1h0GvpSZt3l0xcD9JjmjVC1CHOozS6+Gh+/ldMH8JuJ6cujObQqfayAVFA==} + '@smithy/signature-v4@5.4.2': + resolution: {integrity: sha512-1km1OjdLRFuITWpCPofjFqzZ+tbeWuB72ZhcYjbjkCxZ21tTPfIs4GUxRrelMyKMLxLghGD58RENnXorU/O8cw==} engines: {node: '>=18.0.0'} - '@smithy/smithy-client@4.12.12': - resolution: {integrity: sha512-daO7SJn4eM6ArbmrEs+/BTbH7af8AEbSL3OMQdcRvvn8tuUcR5rU2n6DgxIV53aXMS42uwK8NgKKCh5XgqYOPQ==} + '@smithy/smithy-client@4.13.2': + resolution: {integrity: sha512-lK+Ssl8FzZHvdiPwB6qWLlPV6ih8FCr2BbRV+6/7QWabtMoiTbMTiGrrKsfKu6fcYzt+5akGAY7Xqna+EySq5g==} engines: {node: '>=18.0.0'} '@smithy/types@4.14.1': @@ -2457,12 +2499,12 @@ packages: resolution: {integrity: sha512-dWU03V3XUprJwaUIFVv4iOnS1FC9HnMHDfUrlNDSh4315v0cWyaIErP8KiqGVbf5z+JupoVpNM7ZB3jFiTejvQ==} engines: {node: '>=18.0.0'} - '@smithy/util-defaults-mode-browser@4.3.48': - resolution: {integrity: sha512-hxVRVPYaRDWa6YQdse1aWX1qrksmLsvNyGBKdc32q4jFzSjxYVNWfstknAfR228TnzS4tzgswXRuYIbhXBuXFQ==} + '@smithy/util-defaults-mode-browser@4.4.2': + resolution: {integrity: sha512-e9TZwwffgUFLgafwzyx4wNnxtgbipHG515xHmurkmjtuyJyCRkAn+Tbd4+iF/fnoCyeJXsZAzPX/OSo2nW9XOQ==} engines: {node: '>=18.0.0'} - '@smithy/util-defaults-mode-node@4.2.53': - resolution: {integrity: sha512-ybgCk+9JdBq8pYC8Y6U5fjyS8e4sboyAShetxPNL0rRBtaVl56GSFAxsolVBIea1tXR4LPIzL8i6xqmcf0+DCQ==} + '@smithy/util-defaults-mode-node@4.3.2': + resolution: {integrity: sha512-RsmNY73PM8iO8iRreeXxE3MwY/kRRvBlbJpfm3VKMJc6MQ7vN+LulWj+VrDh+Wf5jCLdQyP43OrTSEH8d/lpCA==} engines: {node: '>=18.0.0'} '@smithy/util-endpoints@3.4.2': @@ -2477,12 +2519,12 @@ packages: resolution: {integrity: sha512-1Su2vj9RYNDEv/V+2E+jXkkwGsgR7dc4sfHn9Z7ruzQHJIEni9zzw5CauvRXlFJfmgcqYP8fWa0dkh2Q2YaQyw==} engines: {node: '>=18.0.0'} - '@smithy/util-retry@4.3.3': - resolution: {integrity: sha512-idjUvd4M9Jj6rXkhqw4H4reHoweuK4ZxYWyOrEp4N2rOF5VtaOlQGLDQJva/8WanNXk9ScQtsAb7o5UHGvFm4A==} + '@smithy/util-retry@4.4.2': + resolution: {integrity: sha512-CwOWVLoMWyeHxaFM9a6jpq47yFKx2awaa8oFzQ6e+c5qlIATVc8MX0aN2PGuTgCaTZw//BDgHSjdAFaSbdbJRg==} engines: {node: '>=18.0.0'} - '@smithy/util-stream@4.5.24': - resolution: {integrity: sha512-na5vv2mBSDzXewLEEoWGI7LQQkfpmFEomBsmOpzLFjqGctm0iMwXY5lAwesY9pIaErkccW0qzEOUcYP+WKneXg==} + '@smithy/util-stream@4.6.2': + resolution: {integrity: sha512-b5kyVsNM3pU36cJGyxwAQajGxs4JkNuaKKNufDu7oASWmzKG5gtXEdVK1rvz99O2JV1B85Pp9bAcN7fXWbN6Aw==} engines: {node: '>=18.0.0'} '@smithy/util-uri-escape@4.2.2': @@ -2497,10 +2539,6 @@ packages: resolution: {integrity: sha512-75MeYpjdWRe8M5E3AW0O4Cx3UadweS+cwdXjwYGBW5h/gxxnbeZ877sLPX/ZJA9GVTlL/qG0dXP29JWFCD1Ayw==} engines: {node: '>=18.0.0'} - '@smithy/uuid@1.1.2': - resolution: {integrity: sha512-O/IEdcCUKkubz60tFbGA7ceITTAJsty+lBjNoorP4Z6XRqaFb/OjQjZODophEcuq68nKm6/0r+6/lLQ+XVpk8g==} - engines: {node: '>=18.0.0'} - '@snazzah/davey-android-arm-eabi@0.1.11': resolution: {integrity: sha512-T1RYbNYKN6tLOcGIDKJd8OI6FBSEemwL7DOYdTMmhqfhhMr3YVN8WOhfoxGg63OcnpTN2e2c5tdY2bAx25RmQQ==} engines: {node: '>= 10'} @@ -2592,8 +2630,8 @@ packages: resolution: {integrity: sha512-oBN+msHzPnm1M5DDx3wVD7iBwpNXFUtkh2MrAbUJu0OhKjliLChi28hq++mu1+qdMpAVQO5JKAvQQxYVbyneiw==} engines: {node: '>= 10'} - '@soimy/dingtalk@3.5.3': - resolution: {integrity: sha512-I8y57KVic6Gjg/BmaZBcoV+ktW/riM/TFW/XzqhqL4beNicYcy8nxuyxqpLuFQNw0f4KU363aZl0BkmW07Wmjg==} + '@soimy/dingtalk@3.6.2': + resolution: {integrity: sha512-DBumOFOqNgpPEjDQLcJ1/OGxtNldF2tWJkbVZCi7bJCuoModqetaUQhLgRqoneCV8RBsfSFfwffZYS5tKn4g4A==} peerDependencies: openclaw: '>=2026.3.28' peerDependenciesMeta: @@ -2611,9 +2649,11 @@ packages: resolution: {integrity: sha512-3nQ2mdyzPRKpBHjd3QiKZDwNzw1F7fBN+rSq8Xms2gg+JWZR4SY2Zdf+doqTyXdyVjG4Y0QM7IA4U42zT9xxzw==} engines: {node: '>=18.0.0'} - '@tencent-weixin/openclaw-weixin@2.1.9': - resolution: {integrity: sha512-5dLvKCFebSMRNQ2l0Lqx78gyuL0Msdg1NVmcN6fuxtZiaQiOx4IkIl8+9WPN+e26jR8XM5qIfW2sgf7pe7M1ew==} + '@tencent-weixin/openclaw-weixin@2.4.3': + resolution: {integrity: sha512-dPQbidUNWigC6V10vGW4i+GLH09x+6zUhafZRjuxkJ9GDu8o62WBsnUTojp4KqUH756hz+t2v9khiCRSi0dBDw==} engines: {node: '>=22'} + peerDependencies: + openclaw: '>=2026.3.22' '@testing-library/dom@10.4.1': resolution: {integrity: sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==} @@ -2638,6 +2678,14 @@ packages: '@types/react-dom': optional: true + '@thi.ng/bitstream@2.4.49': + resolution: {integrity: sha512-Cy4xOdJlhk80pZEBdkw44incZJWUhjIQZntgLEZ/VcrC18MW11KX18JDxUHdNhZ+82vIRJTlJOeOQlUjVVSnNw==} + engines: {node: '>=18'} + + '@thi.ng/errors@2.6.11': + resolution: {integrity: sha512-l5eXCzZuHKyz2Lcf/i0JfgQeZ1kL6rTQ2oHfivNG5GxBqRrLfDT1ZJyj3DZx37gm6tGUDIOTSg4kF3ZXhqjxyA==} + engines: {node: '>=18'} + '@tokenizer/inflate@0.4.1': resolution: {integrity: sha512-2mAv+8pkG6GIZiF1kNg1jAjh27IDxEPKwdGul3snfztFerfPGI1LjDezZp3i7BElXompqEtPmoPx6c2wgtWsOA==} engines: {node: '>=18'} @@ -2712,9 +2760,6 @@ packages: '@types/keyv@3.1.4': resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} - '@types/long@4.0.2': - resolution: {integrity: sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==} - '@types/mdast@4.0.4': resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} @@ -2724,9 +2769,6 @@ packages: '@types/ms@2.1.0': resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} - '@types/node@10.17.60': - resolution: {integrity: sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==} - '@types/node@16.9.1': resolution: {integrity: sha512-QpLcX9ZSsq3YYUUnD3nFDY8H7wctAhQj/TFKL8Ya8v5fMm3CFXxo8zStsLAl780ltoYoo1WvKUVGBQK+1ifr7g==} @@ -2836,11 +2878,6 @@ packages: '@ungap/structured-clone@1.3.0': resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} - '@vincentkoc/qrcode-tui@0.2.1': - resolution: {integrity: sha512-F2XVHMfasJ0q8G93gtcyU9Px0wMH6o6nIZLrZYSHc6dm9Pq3oCbHuVYYG/UQvJD0rhrGH3P9B6qgpCAqSDUw5w==} - engines: {node: '>=20'} - hasBin: true - '@vitejs/plugin-react@5.2.0': resolution: {integrity: sha512-YmKkfhOAi3wsB1PhJq5Scj3GXMn3WvtQ/JC0xoopuHoXSdmtdStOpFrYaT1kie2YgFBcIe64ROzMYRjCrYOdYw==} engines: {node: ^20.19.0 || >=22.12.0} @@ -2879,11 +2916,25 @@ packages: '@wasm-audio-decoders/common@9.0.7': resolution: {integrity: sha512-WRaUuWSKV7pkttBygml/a6dIEpatq2nnZGFIoPTc5yPLkxL6Wk4YaslPM98OPQvWacvNZ+Py9xROGDtrFBDzag==} + '@wasm-audio-decoders/flac@0.2.10': + resolution: {integrity: sha512-YfcyoD2rYRBa6ffawZKNi5qvV5HArJmNmuMVUPoutuZ2hhGi6WNSWIzgvbROGmPbFivLL764Am7xxJENWJDhjw==} + + '@wasm-audio-decoders/ogg-vorbis@0.1.20': + resolution: {integrity: sha512-zaQPasU5usRjUDXtXOHYED5tfkR4QMXd+EH3Nrz1+4+M5pCsdD+s9YxJqb0oqnTyRu/KUujOmu5Z/m/NT47vwg==} + + '@wasm-audio-decoders/opus-ml@0.0.2': + resolution: {integrity: sha512-58rWEqDGg+CKCyEeKm2KoxxSwTWtHh/NLTW9ObR4K8CGF6VwuuGudEI1CtniS/oSRmL1nJq/eh8MKARiluw4DQ==} + '@wecom/aibot-node-sdk@1.0.6': resolution: {integrity: sha512-WZJN3Q+s+94Qjc0VW8d5W1cVkA3emYxiqf+mNRO9UEHoF40puHvizreNMtudjFhm7mmkYiK5ue/QzNiCk+xwLA==} - '@wecom/wecom-openclaw-plugin@2026.4.2201': - resolution: {integrity: sha512-bbRGmijtMyflxLLkijeESnKu3pIOjetT9UPChdNfweanCo9l1I5fBfVerV016/FyY7k71RfUyvPiUAsChaGXvw==} + '@wecom/wecom-openclaw-plugin@2026.5.14': + resolution: {integrity: sha512-z5fhanCn0PT3m8lHDMQATljFXzIsML2r2nq0nEu3KM93E163CmgbDzcXr3R766du4B0y3i65ZdIPh+tWAFeA8g==} + peerDependencies: + openclaw: '>=2026.3.28' + peerDependenciesMeta: + openclaw: + optional: true '@whiskeysockets/baileys@7.0.0-rc.9': resolution: {integrity: sha512-YFm5gKXfDP9byCXCW3OPHKXLzrAKzolzgVUlRosHHgwbnf2YOO3XknkMm6J7+F0ns8OA0uuSBhgkRHTDtqkacw==} @@ -2901,10 +2952,6 @@ packages: link-preview-js: optional: true - '@whiskeysockets/libsignal-node@https://codeload.github.com/whiskeysockets/libsignal-node/tar.gz/1c30d7d7e76a3b0aa120b04dc6a26f5a12dccf67': - resolution: {tarball: https://codeload.github.com/whiskeysockets/libsignal-node/tar.gz/1c30d7d7e76a3b0aa120b04dc6a26f5a12dccf67} - version: 2.0.1 - '@xmldom/xmldom@0.8.11': resolution: {integrity: sha512-cQzWCtO6C8TQiYl1ruKNn2U6Ao4o4WBBcbL61yJl84x+j5sOWWFU9X7DpND8XZG3daDppSsigMdfAIl2upQBRw==} engines: {node: '>=10.0.0'} @@ -2967,6 +3014,9 @@ packages: ajv@8.18.0: resolution: {integrity: sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==} + ajv@8.20.0: + resolution: {integrity: sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==} + ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} @@ -3033,6 +3083,9 @@ packages: arktype@2.2.0: resolution: {integrity: sha512-t54MZ7ti5BhOEvzEkgKnWvqj+UbDfWig+DHr5I34xatymPusKLS0lQpNJd8M6DzmIto2QGszHfNKoFIT8tMCZQ==} + asn1.js@5.4.1: + resolution: {integrity: sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==} + assert-plus@1.0.0: resolution: {integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==} engines: {node: '>=0.8'} @@ -3073,6 +3126,16 @@ packages: atomically@2.1.1: resolution: {integrity: sha512-P4w9o2dqARji6P7MHprklbfiArZAWvo07yW7qs3pdljb3BWr12FIB7W+p0zJiuiVsUpRO0iZn1kFFcpPegg0tQ==} + audio-buffer@5.0.0: + resolution: {integrity: sha512-gsDyj1wwUp8u7NBB+eW6yhLb9ICf+0eBmDX8NGaAS00w8/fLqFdxUlL5Ge/U8kB64DlQhdonxYC59dXy1J7H/w==} + + audio-decode@2.2.3: + resolution: {integrity: sha512-Z0lHvMayR/Pad9+O9ddzaBJE0DrhZkQlStrC1RwcAHF3AhQAsdwKHeLGK8fYKyp2DDU6xHxzGb4CLMui12yVrg==} + + audio-type@2.4.1: + resolution: {integrity: sha512-dK9Z/P83C/rBfTrXXgPD3jZ+aXxx2o/P4rq8+H1JqxbXklitEeJw4CrcwMC5CkON3CX3yy2gaWnIEVYejYh0zQ==} + engines: {node: '>=14'} + autoprefixer@10.4.27: resolution: {integrity: sha512-NP9APE+tO+LuJGn7/9+cohklunJsXWiaWEfV3si4Gi/XHDwVNgkwr1J3RQYFIvPy76GmJ9/bW8vyoU1LcxwKHA==} engines: {node: ^10 || ^12 || >=14} @@ -3098,6 +3161,22 @@ packages: bail@2.0.2: resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} + baileys@7.0.0-rc11: + resolution: {integrity: sha512-yi7An4f5DmShjb75L8eSttrA6HLy7PYoP3XIQBmvQ5yH8vVZWBXZDogDxfGQQL6N98ELRwznG7puhjyLEa5CQg==} + engines: {node: '>=20.0.0'} + peerDependencies: + audio-decode: ^2.1.3 + jimp: ^1.6.1 + link-preview-js: ^3.0.0 + sharp: '*' + peerDependenciesMeta: + audio-decode: + optional: true + jimp: + optional: true + link-preview-js: + optional: true + balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} @@ -3178,6 +3257,9 @@ packages: bmp-ts@1.0.9: resolution: {integrity: sha512-cTEHk2jLrPyi+12M3dhpEbnnPOsaZuq7C45ylbbQIiWgDFZq4UVYPEY5mlqjvsj/6gJv9qX5sa+ebDzLXT28Vw==} + bn.js@4.12.3: + resolution: {integrity: sha512-fGTi3gxV/23FTYdAoUtLYp6qySe2KE3teyZitipKNRuVYcBkoP/bB3guXN/XVKUe9mxCHXnc9C4ocyz8OmgN0g==} + body-parser@2.2.2: resolution: {integrity: sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==} engines: {node: '>=18'} @@ -3386,6 +3468,9 @@ packages: resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} engines: {node: '>=6'} + codec-parser@2.5.0: + resolution: {integrity: sha512-Ru9t80fV8B0ZiixQl8xhMTLru+dzuis/KQld32/x5T/+3LwZb0/YvQdSKytX9JqCnRdiupvAvyYJINKrXieziQ==} + codepage@1.15.0: resolution: {integrity: sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==} engines: {node: '>=0.8'} @@ -3968,24 +4053,36 @@ packages: 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-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.0: + resolution: {integrity: sha512-rLV8JHxTyhVmFYhBJuMujcrHqOT2cnO5Zxj37qROj23CP39GXubJRBUFF0z8KFK77Uc0SukZUf7JZhsVEQ6n8w==} + fast-xml-builder@1.1.4: resolution: {integrity: sha512-f2jhpN4Eccy0/Uz9csxh3Nu6q4ErKxf0XIsasomfOihuSUa3/xw6w8dnOtCDgEItQFJG8KyXPzQXzcODDrrbOg==} + fast-xml-builder@1.2.0: + resolution: {integrity: sha512-00aAWieqff+ZJhsXA4g1g7M8k+7AYoMUUHF+/zFb5U6Uv/P0Vl4QZo84/IcufzYalLuEj9928bXN9PbbFzMF0Q==} + fast-xml-parser@5.5.10: resolution: {integrity: sha512-go2J2xODMc32hT+4Xr/bBGXMaIoiCwrwp2mMtAvKyvEFW6S/v5Gn2pBmE4nvbwNjGhpcAiOwEv7R6/GZ6XRa9w==} hasBin: true - fast-xml-parser@5.5.8: - resolution: {integrity: sha512-Z7Fh2nVQSb2d+poDViM063ix2ZGt9jmY1nWhPfHBOK2Hgnb/OW3P4Et3P/81SEej0J7QbWtJqxO05h8QYfK7LQ==} + fast-xml-parser@5.7.3: + resolution: {integrity: sha512-C0AaNuC+mscy6vrAQKAc/rMq+zAPHodfHGZu4sGVehvAQt/JLG1O5zEcYcXSY5zSqr4YVgxsB+pHXTq0i7eDlg==} hasBin: true fastq@1.20.1: @@ -4149,18 +4246,10 @@ packages: function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - gaxios@6.7.1: - resolution: {integrity: sha512-LDODD4TMYx7XXdpwxAVRAIAuB0bzv0s+ywFonY46k126qzQHT9ygyoa9tncmOiQmmDrik65UYsEkv3lbfqQ3yQ==} - engines: {node: '>=14'} - gaxios@7.1.4: resolution: {integrity: sha512-bTIgTsM2bWn3XklZISBTQX7ZSddGW+IO3bMdGaemHZ3tbqExMENHLx6kKZ/KlejgrMtj8q7wBItt51yegqalrA==} engines: {node: '>=18'} - gcp-metadata@6.1.1: - resolution: {integrity: sha512-a4tiq7E0/5fTjxPAaH4jpjkSv/uCaU2p5KC6HVGrvl0cDjA8iBZv4vv1gyzlmK0ZUKqwpOyQMKzZQe3lTit77A==} - engines: {node: '>=14'} - gcp-metadata@8.1.2: resolution: {integrity: sha512-zV/5HKTfCeKWnxG0Dmrw51hEWFGfcF2xiXqcA3+J90WDuP0SvoiSO5ORvcBsifmx/FoIjgQN3oNOGaQ5PhLFkg==} engines: {node: '>=18'} @@ -4232,6 +4321,10 @@ packages: resolution: {integrity: sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==} engines: {node: '>=10.0'} + global-agent@4.1.3: + resolution: {integrity: sha512-KUJEViiuFT3I97t+GYMikLPJS2Lfo/S2F+DQuBWzuzaMPnvt5yyZePzArx36fBzpGTxZjIpDbXLeySLgh+k76g==} + engines: {node: '>=10.0'} + globals@17.4.0: resolution: {integrity: sha512-hjrNztw/VajQwOLsMNT1cbJiH2muO3OROCHnbehc8eY5JyD2gqz4AcMHPqgaOR59DjgUjYAYLeH699g/eWi2jw==} engines: {node: '>=18'} @@ -4244,14 +4337,6 @@ packages: resolution: {integrity: sha512-e27Z6EThmVNNvtYASwQxose/G57rkRuaRbQyxM2bvYLLX/GqWZ5chWq2EBoUchJbCc57eC9ArzO5wMsEmWftCw==} engines: {node: '>=18'} - google-auth-library@9.15.1: - resolution: {integrity: sha512-Jb6Z0+nvECVz+2lzSMt9u98UsoakXxA2HGHMCxh+so3n90XgYWkq5dur19JAJV7ONiJY22yBTyJB1TSkvPq9Ng==} - engines: {node: '>=14'} - - google-logging-utils@0.0.2: - resolution: {integrity: sha512-NEgUnEcBiP5HrPzufUkBzJOD/Sxsco3rLNo1F1TNf7ieU8ryUzBhqba8r756CjLX7rn3fHl6iLEwPYuqpoKgQQ==} - engines: {node: '>=14'} - google-logging-utils@1.1.3: resolution: {integrity: sha512-eAmLkjDjAFCVXg7A1unxHsLf961m6y17QFqXqAXGj/gVkKFrEICfStRfwUlGNfeCEjNRa32JEWOUTlYXPyyKvA==} engines: {node: '>=14'} @@ -4271,10 +4356,6 @@ packages: resolution: {integrity: sha512-1AdCge+AkjSdp2FwfICSFnVbl8Mq3KVHJDy+DgTI9+D6keJ0zWALPRKas5jv/8psiCzL4N2cEOcGW7O45Kn39g==} engines: {node: ^12.20.0 || >=14.13.1} - gtoken@7.1.0: - resolution: {integrity: sha512-pCcEwRi+TKpMlxAQObHDQ56KawURgyAf6jtIY046fJ5tIv3zDe/LEIubckAO8fj6JnAxLdmWkUfNyulQ2iKdEw==} - engines: {node: '>=14.0.0'} - has-flag@4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} @@ -4390,6 +4471,10 @@ packages: resolution: {integrity: sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==} engines: {node: '>=10.19.0'} + http_ece@1.2.0: + resolution: {integrity: sha512-JrF8SSLVmcvc5NducxgyOrKXe3EsyHMgBFgSaIUGmArKe+rwr0uphRkRXvwiom3I+fpIfoItveHrfudL8/rxuA==} + engines: {node: '>=16'} + https-proxy-agent@7.0.6: resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} engines: {node: '>= 14'} @@ -4467,8 +4552,8 @@ packages: resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} engines: {node: '>= 0.10'} - ipaddr.js@2.3.0: - resolution: {integrity: sha512-Zv/pA+ciVFbCSBBjGfaKUya/CcGmUHzTydLMaTwrUUEM2DIEO3iZvueGxmacvmN50fGpGVKeTXpb2LcYQxeVdg==} + ipaddr.js@2.4.0: + resolution: {integrity: sha512-9VGk3HGanVE6JoZXHiCpnGy5X0jYDnN4EA4lntFPj+1vIWlFhIylq2CrrCOJH9EAhc5CYhq18F2Av2tgoAPsYQ==} engines: {node: '>= 10'} is-alphabetical@2.0.1: @@ -4529,10 +4614,6 @@ packages: is-promise@4.0.0: resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==} - is-stream@2.0.1: - resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} - engines: {node: '>=8'} - is-unicode-supported@0.1.0: resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} engines: {node: '>=10'} @@ -4575,6 +4656,10 @@ packages: resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} hasBin: true + jiti@2.7.0: + resolution: {integrity: sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==} + hasBin: true + jose@6.2.2: resolution: {integrity: sha512-d7kPDd34KO/YnzaDOlikGpOurfF0ByC2sEV4cANCtdqLlTfBlw2p14O/5d/zv40gJPbIQxfES3nSx1/oYNyuZQ==} @@ -4660,6 +4745,10 @@ packages: koffi@2.15.2: resolution: {integrity: sha512-r9tjJLVRSOhCRWdVyQlF3/Ugzeg13jlzS4czS82MAgLff4W+BcYOW7g8Y62t9O5JYjYOLAjAovAZDNlDfZNu+g==} + kysely@0.29.0: + resolution: {integrity: sha512-LrQfPUeTW7MXbMvT62moEMnpMTuj9TO3lqjCeLKjM975PJ4Alrl/43f2tlDX7xOsNptKgH4LSNGwIbXwEkLg4g==} + engines: {node: '>=22.0.0'} + lazy-val@1.0.5: resolution: {integrity: sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q==} @@ -4667,6 +4756,13 @@ packages: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} + libsignal@6.0.0: + resolution: {integrity: sha512-d/5V3YFtDljbFMufz4ncyUYGYhJl+vzAe+c2EFFBQ6bz1h8Q3IOMEGXYMzlibU60I+e8GagMMpji18iez3P1hA==} + + libsignal@https://codeload.github.com/whiskeysockets/libsignal-node/tar.gz/bcea72df9ec34d9d9140ab30619cf479c7c144c7: + resolution: {gitHosted: true, tarball: https://codeload.github.com/whiskeysockets/libsignal-node/tar.gz/bcea72df9ec34d9d9140ab30619cf479c7c144c7} + version: 6.0.0 + lie@3.3.0: resolution: {integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==} @@ -4724,9 +4820,6 @@ packages: resolution: {integrity: sha512-ja1E3yCr9i/0hmBVaM0bfwDjnGy8I/s6PP4DFp+yP+a+mrHO4Rm7DtmnqROTUkHIkqffC84YY7AeqX6oFk0WFg==} engines: {node: '>=18'} - long@4.0.0: - resolution: {integrity: sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==} - long@5.3.2: resolution: {integrity: sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==} @@ -4800,6 +4893,10 @@ packages: resolution: {integrity: sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==} engines: {node: '>=10'} + matcher@4.0.0: + resolution: {integrity: sha512-S6x5wmcDmsDRRU/c2dkccDwQPXoFczc5+HpQ2lON8pnvHlnvHAHj5WlLVvw6n6vNyHuVugYrFohYxbS+pvFpKQ==} + engines: {node: '>=10'} + math-intrinsics@1.1.0: resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} engines: {node: '>= 0.4'} @@ -5018,10 +5115,17 @@ packages: resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} engines: {node: '>=4'} + minimalistic-assert@1.0.1: + resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} + minimatch@10.2.4: resolution: {integrity: sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==} engines: {node: 18 || 20 || >=22} + minimatch@10.2.5: + resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==} + engines: {node: 18 || 20 || >=22} + minimatch@3.1.5: resolution: {integrity: sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==} @@ -5130,6 +5234,10 @@ packages: node-addon-api@1.7.2: resolution: {integrity: sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==} + node-addon-api@8.7.0: + resolution: {integrity: sha512-9MdFxmkKaOYVTV+XVRG8ArDwwQ77XIgIPyKASB1k3JPq3M8fGQQQE3YpMOrKm6g//Ktx8ivZr8xo1Qmtqub+GA==} + engines: {node: ^18 || ^20 || >= 21} + node-api-version@0.2.1: resolution: {integrity: sha512-2xP/IGGMmmSQpI1+O/k72jF/ykvZ89JeuKX3TLJAYPDVLUalrshrLHkeVcCCZqG/eEa635cr8IBYzgnDvM2O8Q==} @@ -5138,6 +5246,10 @@ packages: engines: {node: '>=10.5.0'} deprecated: Use your platform's native DOMException instead + node-edge-tts@1.2.10: + resolution: {integrity: sha512-bV2i4XU54D45+US0Zm1HcJRkifuB3W438dWyuJEHLQdKxnuqlI1kim2MOvR6Q3XUQZvfF9PoDyR1Rt7aeXhPdQ==} + hasBin: true + node-fetch@2.7.0: resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} engines: {node: 4.x || >=6.0.0} @@ -5151,6 +5263,10 @@ packages: resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + node-gyp-build@4.8.4: + resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==} + hasBin: true + node-gyp@11.5.0: resolution: {integrity: sha512-ra7Kvlhxn5V9Slyus0ygMa2h+UqExPqUIkfk7Pc8QTLT956JLSy51uWFwHtIYy0vI8cB4BDhc/S03+880My/LQ==} engines: {node: ^18.17.0 || >=20.5.0} @@ -5162,6 +5278,10 @@ packages: node-releases@2.0.36: resolution: {integrity: sha512-TdC8FSgHz8Mwtw9g5L4gR/Sh9XhSP/0DEkQxfEFXOpiul5IiHgHan2VhYYb6agDSfp4KuvltmGApc8HMgUrIkA==} + node-wav@0.0.2: + resolution: {integrity: sha512-M6Rm/bbG6De/gKGxOpeOobx/dnGuP0dz40adqx38boqHhlWssBJZgLCPBNtb9NkrmnKYiV04xELq+R6PFOnoLA==} + engines: {node: '>=4.4.0'} + nopt@8.1.0: resolution: {integrity: sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A==} engines: {node: ^18.17.0 || >=20.5.0} @@ -5197,6 +5317,9 @@ packages: obug@2.1.1: resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==} + ogg-opus-decoder@1.7.3: + resolution: {integrity: sha512-w47tiZpkLgdkpa+34VzYD8mHUj8I9kfWVZa82mBbNwDvB1byfLXSSzW/HxA4fI3e9kVlICSpXGFwMLV1LPdjwg==} + omggif@1.0.10: resolution: {integrity: sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw==} @@ -5231,8 +5354,8 @@ packages: zod: optional: true - openai@6.34.0: - resolution: {integrity: sha512-yEr2jdGf4tVFYG6ohmr3pF6VJuveP0EA/sS8TBx+4Eq5NT10alu5zg2dmxMXMgqpihRDQlFGpRt2XwsGj+Fyxw==} + openai@6.37.0: + resolution: {integrity: sha512-0H5dEGFmmLv6KSd0W1w2nyL8WsLkX6yoLeQpU+dZAOuGcany5qkYQMmj35ZrKgb6yiyYqpUzFOpR8mZQkgqeEQ==} hasBin: true peerDependencies: ws: ^8.18.0 @@ -5243,16 +5366,10 @@ packages: zod: optional: true - openclaw@2026.4.23: - resolution: {integrity: sha512-Er5q6z4bBFgO2T+YwJcL7WqhH8dQfB0X4h2sEO2K2C1HiEGQ3Wt9qjeNWRoGDSkGsSxAY59vtOxU8JPzZ0SgjQ==} - engines: {node: '>=22.14.0'} + openclaw@2026.5.12: + resolution: {integrity: sha512-hHg88OFSF0rhDNUbmjMEJO0UdnGn4mNq0F23Hk/NmTKY3OaPCUXiHutd8Ea6S5TGouponytMMWCYgPRrwsW2Xg==} + engines: {node: '>=22.16.0'} hasBin: true - peerDependencies: - '@napi-rs/canvas': ^0.1.89 - node-llama-cpp: 3.18.1 - peerDependenciesMeta: - node-llama-cpp: - optional: true option@0.2.4: resolution: {integrity: sha512-pkEqbDyl8ou5cpq+VsnQbe/WlEy5qS7xPzMS1U55OCG9KPvwFD46zDbxQIj3egJSFc3D+XhYOPUzz49zQAVy7A==} @@ -5261,6 +5378,9 @@ packages: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} + opus-decoder@0.7.11: + resolution: {integrity: sha512-+e+Jz3vGQLxRTBHs8YJQPRPc1Tr+/aC6coV/DlZylriA29BdHQAYXhvNRKtjftof17OFng0+P4wsFIqQu3a48A==} + opusscript@0.1.1: resolution: {integrity: sha512-mL0fZZOUnXdZ78woRXp18lApwpp0lF5tozJOD1Wut0dgrA9WuQTgSels/CSmFleaAZrJi/nci5KOVtbuxeWoQA==} @@ -5272,10 +5392,6 @@ packages: resolution: {integrity: sha512-lBX72MWFduWEf7v7uWf5DHp9Jn5BI8bNPGuFgtXMmr2uDz2Gz2749y3am3agSDdkhHPHYmmxEGSKH85ZLGzgXw==} engines: {node: '>=20'} - osc-progress@0.3.0: - resolution: {integrity: sha512-4/8JfsetakdeEa4vAYV45FW20aY+B/+K8NEXp5Eiar3wR8726whgHrbSg5Ar/ZY1FLJ/AGtUqV7W2IVF+Gvp9A==} - engines: {node: '>=20'} - p-cancelable@2.1.1: resolution: {integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==} engines: {node: '>=8'} @@ -5386,6 +5502,10 @@ packages: resolution: {integrity: sha512-d7gQQmLvAKXKXE2GeP9apIGbMYKz88zWdsn/BN2HRWVQsDFdUY36WSLTY0Jvd4HWi7Fb30gQ62oAOzdgJA6fZw==} engines: {node: '>=14.0.0'} + path-expression-matcher@1.5.0: + resolution: {integrity: sha512-cbrerZV+6rvdQrrD+iGMcZFEiiSrbv9Tfdkvnusy6y0x0GKBXREFg/Y65GhIfm0tnLntThhzCnfKwp1WRjeCyQ==} + engines: {node: '>=14.0.0'} + path-is-absolute@1.0.1: resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} engines: {node: '>=0.10.0'} @@ -5478,6 +5598,11 @@ packages: engines: {node: '>=18'} hasBin: true + playwright-core@1.60.0: + resolution: {integrity: sha512-9bW6zvX/m0lEbgTKJ6YppOKx8H3VOPBMOCFh2irXFOT4BbHgrx5hPjwJYLT40Lu+4qtD36qKc/Hn56StUW57IA==} + engines: {node: '>=18'} + hasBin: true + playwright@1.59.0: resolution: {integrity: sha512-wihGScriusvATUxmhfENxg0tj1vHEFeIwxlnPFKQTOQVd7aG08mUfvvniRP/PtQOC+2Bs52kBOC/Up1jTXeIbw==} engines: {node: '>=18'} @@ -5613,14 +5738,14 @@ packages: property-information@7.1.0: resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==} - protobufjs@6.8.8: - resolution: {integrity: sha512-AAmHtD5pXgZfi7GMpllpO3q1Xw1OYldr+dMUlAnffGTAhqkg72WdmSY71uKBF/JuyiKs8psYbtKrhi0ASCD8qw==} - hasBin: true - protobufjs@7.5.4: resolution: {integrity: sha512-CvexbZtbov6jW2eXAvLukXjXUW1TzFaivC46BpWc/3BpcCysb5Vffu+B3XHMm8lVEuy2Mm4XGex8hBSg1yapPg==} engines: {node: '>=12.0.0'} + protobufjs@7.5.8: + resolution: {integrity: sha512-dvpCIeLPbXZS/Ete7yLaO7RenOdken2NHKykBXbsaGxZT0UTltcarBciw+A78SRQs9iMAAVpsYA+l8b1hTePIA==} + engines: {node: '>=12.0.0'} + proxy-addr@2.0.7: resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} engines: {node: '>= 0.10'} @@ -5655,6 +5780,9 @@ packages: resolution: {integrity: sha512-4q61YgkHbY6gmwkqm0BsxyLDO3UYdrdiJTJ7JiaZb3xpW1duxn135SB7KqUEkCiuu5O4W+TtwEWP2VjmSRanvA==} engines: {node: '>=20'} + qoa-format@1.0.1: + resolution: {integrity: sha512-dMB0Z6XQjdpz/Cw4Rf6RiBpQvUSPCfYlQMWvmuWlWkAT7nDQD29cVZ1SwDUB6DYJSitHENwbt90lqfI+7bvMcw==} + qrcode-terminal@0.12.0: resolution: {integrity: sha512-EXtzRZmC+YGmGlDFbXKxQiMZNwCLEO6BANKXG4iCtSIM0yqc/pappSx3RIKr4r0uh5JsBckOXeKrB3Iz7mdQpQ==} hasBin: true @@ -5946,6 +6074,10 @@ packages: resolution: {integrity: sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==} engines: {node: '>=10'} + serialize-error@8.1.0: + resolution: {integrity: sha512-3NnuWfM6vBYoy5gZFvHiYsVbafvI9vZv/+jlIigFn4oP4zjNPK3LhcY0xSCgeb1a5L8jO71Mit9LlNoi2UfDDQ==} + engines: {node: '>=10'} + serve-static@2.2.1: resolution: {integrity: sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==} engines: {node: '>= 18'} @@ -6126,9 +6258,6 @@ packages: resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==} engines: {node: '>= 0.8'} - std-env@3.10.0: - resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==} - std-env@4.0.0: resolution: {integrity: sha512-zUMPtQ/HBY3/50VbpkupYHbRroTRZJPRLvreamgErJVys0ceuzMkD44J/QjqhHjOzK42GQ3QZIeFG1OYfOtKqQ==} @@ -6175,6 +6304,9 @@ packages: strnum@2.2.2: resolution: {integrity: sha512-DnR90I+jtXNSTXWdwrEy9FakW7UX+qUZg28gj5fk2vxxl7uS/3bpI4fjFYVmdK9etptYBPNkpahuQnEwhwECqA==} + strnum@2.3.0: + resolution: {integrity: sha512-ums3KNd42PGyx5xaoVTO1mjU1bH3NpY4vsrVlnv9PNGqQj8wd7rJ6nEypLrJ7z5vxK5RP0yMLo6J/Gsm62DI5Q==} + strtok3@10.3.5: resolution: {integrity: sha512-ki4hZQfh5rX0QDLLkOCj+h+CVNkqmp/CMf8v8kZpkNVK6jGQooMytqzLZYUVYIZcFZ6yDB70EfD8POcFXiF5oA==} engines: {node: '>=18'} @@ -6239,6 +6371,10 @@ packages: resolution: {integrity: sha512-tOG/7GyXpFevhXVh8jOPJrmtRpOTsYqUIkVdVooZYJS/z8WhfQUX8RJILmeuJNinGAMSu1veBr4asSHFt5/hng==} engines: {node: '>=18'} + tar@7.5.15: + resolution: {integrity: sha512-dzGK0boVlC4W5QFuQN1EFSl3bIDYsk7Tj40U6eIBnK2k/8ml7TZ5agbI5j5+qnoVcAA+rNtBml8SEiLxZpNqRQ==} + engines: {node: '>=18'} + teex@1.0.1: resolution: {integrity: sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg==} @@ -6312,6 +6448,11 @@ packages: resolution: {integrity: sha512-dRXchy+C0IgK8WPC6xvCHFRIWYUbqqdEIKPaKo/AcTUNzwLTK6AH7RjdLWsEZcAN/TBdtfUw3PYEgPr5VPr6ww==} engines: {node: '>=14.16'} + tokenjuice@0.7.0: + resolution: {integrity: sha512-RZIyFmzztf/8V4q1cUS5L+q8UISMSfsjzh4UoWVxQbE7/zX91SfNmHpNqopqyB4oc5hwH4XqC9O/yakVzJCu8g==} + engines: {node: '>=20'} + hasBin: true + tough-cookie@6.0.1: resolution: {integrity: sha512-LktZQb3IeoUWB9lqR5EWTHgW/VTITCXg4D21M+lvybRVdylLrRMnqaIONLVb5mav8vM19m44HIcGq4qASeu2Qw==} engines: {node: '>=16'} @@ -6323,6 +6464,14 @@ packages: resolution: {integrity: sha512-bLVMLPtstlZ4iMQHpFHTR7GAGj2jxi8Dg0s2h2MafAE4uSWF98FC/3MomU51iQAMf8/qDUbKWf5GxuvvVcXEhw==} engines: {node: '>=20'} + tree-sitter-bash@0.25.1: + resolution: {integrity: sha512-7hMytuYIMoXOq24yRulgIxthE9YmggZIOHCyPTTuJcu6EU54tYD+4G39cUb28kxC6jMf/AbPfWGLQtgPTdh3xw==} + peerDependencies: + tree-sitter: ^0.25.0 + peerDependenciesMeta: + tree-sitter: + optional: true + trim-lines@3.0.1: resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} @@ -6364,6 +6513,10 @@ packages: resolution: {integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==} engines: {node: '>=10'} + type-fest@0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + type-fest@5.5.0: resolution: {integrity: sha512-PlBfpQwiUvGViBNX84Yxwjsdhd1TUlXr6zjX7eoirtCPIr08NAmxwa+fcYBTeRQxHo9YC9wwF3m9i700sHma8g==} engines: {node: '>=20'} @@ -6372,11 +6525,8 @@ packages: resolution: {integrity: sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==} engines: {node: '>= 0.6'} - typebox@1.1.28: - resolution: {integrity: sha512-OqHTHRfBpQHWPipoeFVkNgxKjjXhGY49UgekFrOuaC9O59/Hws8KHjGa1AUfNYnxWSfuNRkTB81FAL/QbTWFrg==} - - typebox@1.1.33: - resolution: {integrity: sha512-+/MWwlQ1q2GSVwoxi/+u5JsHkgLQKcCN2Nsjree9c+K7GJu40qbaHrFETmfV1i9Fs1TcOVfynW+jJvIWcXtvjw==} + typebox@1.1.38: + resolution: {integrity: sha512-pZ0aQPmMmXoUvSbeuWf/Hzsc+avNw/Zd6VeE8CFgkVGWyuHPJvqeJJDeJqLve+K70LvjYIoleGcoJHPT17cWoA==} typescript@5.9.3: resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} @@ -6405,6 +6555,9 @@ packages: undici-types@7.19.2: resolution: {integrity: sha512-qYVnV5OEm2AW8cJMCpdV20CDyaN3g0AjDlOGf1OW4iaDEx8MwdtChUp4zu4H0VP3nDRF/8RKWH+IPp9uW0YGZg==} + undici-types@8.3.0: + resolution: {integrity: sha512-j375ScV60dom+YkPFIfTLcOiPxkN/buHz5GobjLhixFuANaNs3C9l4GmrWqejgXWJ7BbJcFYpTEUkS1Ge8bpZQ==} + undici@7.24.6: resolution: {integrity: sha512-Xi4agocCbRzt0yYMZGMA6ApD7gvtUFaxm4ZmeacWI4cZxaF6C+8I8QfofC20NAePiB/IcvZmzkJ7XPa471AEtA==} engines: {node: '>=20.18.1'} @@ -6413,6 +6566,10 @@ packages: resolution: {integrity: sha512-E9MkTS4xXLnRPYqxH2e6Hr2/49e7WFDKczKcCaFH4VaZs2iNvHMqeIkyUAD9vM8kujy9TjVrRlQ5KkdEJxB2pw==} engines: {node: '>=22.19.0'} + undici@8.2.0: + resolution: {integrity: sha512-Z+4Hx9GE26Lh9Upwfnc8C7SsrpBPGaM/Gm6kMFtiG7c+5IvQKlXi/t+9x9DrrCh29cww5TSP9YdVaBcnLDs5fQ==} + engines: {node: '>=22.19.0'} + unified@11.0.5: resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} @@ -6509,11 +6666,6 @@ packages: resolution: {integrity: sha512-Qo+uWgilfSmAhXCMav1uYFynlQO7fMFiMVZsQqZRMIXp0O7rR7qjkj+cPvBHLgBqi960QCoo/PH2/6ZtVqKvrg==} hasBin: true - uuid@9.0.1: - resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} - deprecated: uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028). - hasBin: true - vary@1.1.2: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} @@ -6631,10 +6783,18 @@ packages: web-namespaces@2.0.1: resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} + web-push@3.6.7: + resolution: {integrity: sha512-OpiIUe8cuGjrj3mMBFWY+e4MMIkW3SVT+7vEIjvD9kejGUypv8GPDf84JdPWskK8zMRIJ6xYGm+Kxr8YkPyA0A==} + engines: {node: '>= 16'} + hasBin: true + web-streams-polyfill@3.3.3: resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} engines: {node: '>= 8'} + web-tree-sitter@0.26.8: + resolution: {integrity: sha512-4sUwi7ZyOrIk5KLgYLkc2A/F0LFMQnBhfb+2Cdl7ik4ePJ6JD+fk4ofI2sA5eGawBKBaK4Vntt7Ww5KcEsay4A==} + webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} @@ -6642,6 +6802,9 @@ packages: resolution: {integrity: sha512-BMhLD/Sw+GbJC21C/UgyaZX41nPt8bUTg+jWyDeg7e7YN4xOM05YPSIXceACnXVtqyEw/LMClUQMtMZ+PGGpqQ==} engines: {node: '>=20'} + whatsapp-rust-bridge@0.5.4: + resolution: {integrity: sha512-yYO1qSs0Fe7tGtnxOFHomocUD6IZtoAgmA4oDFyGIRZ67D3QZk3w7swA6XXFXNQngiyrg2k7tul6IrM3eUFh7A==} + whatwg-mimetype@5.0.0: resolution: {integrity: sha512-sXcNcHOC51uPGF0P/D4NVtrkjSU2fNsm9iog4ZvZJsL3rjoDAzXZhkm2MWt1y+PUdggKAYVoMAIYcs78wJ51Cw==} engines: {node: '>=20'} @@ -6725,6 +6888,10 @@ packages: resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==} engines: {node: '>=18'} + xml-naming@0.1.0: + resolution: {integrity: sha512-k8KO9hrMyNk6tUWqUfkTEZbezRRpONVOzUTnc97VnCvyj6Tf9lyUR9EDAIeiVLv56jsMcoXEwjW8Kv5yPY52lw==} + engines: {node: '>=16.0.0'} + xml-parse-from-string@1.0.1: resolution: {integrity: sha512-ErcKwJTF54uRzzNMXq2X5sMIy88zJvfN2DmdoQvy7PAFJ+tPRU6ydWuOKNMyfmOjdyBQTFREi60s0Y0SyI0G0g==} @@ -6764,8 +6931,8 @@ packages: resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==} engines: {node: '>=18'} - yaml@2.8.3: - resolution: {integrity: sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg==} + yaml@2.9.0: + resolution: {integrity: sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==} engines: {node: '>= 14.6'} hasBin: true @@ -6821,6 +6988,9 @@ packages: zod@4.3.6: resolution: {integrity: sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==} + zod@4.4.3: + resolution: {integrity: sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==} + zustand@5.0.12: resolution: {integrity: sha512-i77ae3aZq4dhMlRhJVCYgMLKuSiZAaUPAct2AksxQ+gOtimhGMdXljRT21P5BNpeT4kXlLIckvkPM029OljD7g==} engines: {node: '>=12.20.0'} @@ -6859,26 +7029,17 @@ snapshots: dependencies: zod: 4.3.6 - '@agentclientprotocol/sdk@0.19.0(zod@4.3.6)': + '@agentclientprotocol/sdk@0.21.0(zod@4.4.3)': dependencies: - zod: 4.3.6 + zod: 4.4.3 '@alloc/quick-lru@5.2.0': {} - '@anthropic-ai/sdk@0.90.0(zod@4.3.6)': + '@anthropic-ai/sdk@0.91.1(zod@4.4.3)': dependencies: json-schema-to-ts: 3.1.1 optionalDependencies: - zod: 4.3.6 - - '@anthropic-ai/vertex-sdk@0.16.0(encoding@0.1.13)(zod@4.3.6)': - dependencies: - '@anthropic-ai/sdk': 0.90.0(zod@4.3.6) - google-auth-library: 9.15.1(encoding@0.1.13) - transitivePeerDependencies: - - encoding - - supports-color - - zod + zod: 4.4.3 '@ark/schema@0.56.0': dependencies: @@ -6936,174 +7097,156 @@ snapshots: '@smithy/util-utf8': 2.3.0 tslib: 2.8.1 - '@aws-sdk/client-bedrock-runtime@3.1035.0': + '@aws-sdk/client-bedrock-runtime@3.1042.0': dependencies: '@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.974.4 - '@aws-sdk/credential-provider-node': 3.972.35 + '@aws-sdk/core': 3.974.10 + '@aws-sdk/credential-provider-node': 3.972.41 '@aws-sdk/eventstream-handler-node': 3.972.14 '@aws-sdk/middleware-eventstream': 3.972.10 - '@aws-sdk/middleware-host-header': 3.972.10 + '@aws-sdk/middleware-host-header': 3.972.11 '@aws-sdk/middleware-logger': 3.972.10 - '@aws-sdk/middleware-recursion-detection': 3.972.11 - '@aws-sdk/middleware-user-agent': 3.972.34 + '@aws-sdk/middleware-recursion-detection': 3.972.12 + '@aws-sdk/middleware-user-agent': 3.972.40 '@aws-sdk/middleware-websocket': 3.972.16 - '@aws-sdk/region-config-resolver': 3.972.13 - '@aws-sdk/token-providers': 3.1035.0 + '@aws-sdk/region-config-resolver': 3.972.14 + '@aws-sdk/token-providers': 3.1042.0 '@aws-sdk/types': 3.973.8 - '@aws-sdk/util-endpoints': 3.996.8 - '@aws-sdk/util-user-agent-browser': 3.972.10 - '@aws-sdk/util-user-agent-node': 3.973.20 + '@aws-sdk/util-endpoints': 3.996.9 + '@aws-sdk/util-user-agent-browser': 3.972.11 + '@aws-sdk/util-user-agent-node': 3.973.26 '@smithy/config-resolver': 4.4.17 - '@smithy/core': 3.23.16 + '@smithy/core': 3.24.2 '@smithy/eventstream-serde-browser': 4.2.14 '@smithy/eventstream-serde-config-resolver': 4.3.14 '@smithy/eventstream-serde-node': 4.2.14 - '@smithy/fetch-http-handler': 5.3.17 + '@smithy/fetch-http-handler': 5.4.2 '@smithy/hash-node': 4.2.14 '@smithy/invalid-dependency': 4.2.14 '@smithy/middleware-content-length': 4.2.14 - '@smithy/middleware-endpoint': 4.4.31 - '@smithy/middleware-retry': 4.5.4 - '@smithy/middleware-serde': 4.2.19 + '@smithy/middleware-endpoint': 4.5.2 + '@smithy/middleware-retry': 4.6.2 + '@smithy/middleware-serde': 4.3.2 '@smithy/middleware-stack': 4.2.14 '@smithy/node-config-provider': 4.3.14 - '@smithy/node-http-handler': 4.6.0 + '@smithy/node-http-handler': 4.7.2 '@smithy/protocol-http': 5.3.14 - '@smithy/smithy-client': 4.12.12 + '@smithy/smithy-client': 4.13.2 '@smithy/types': 4.14.1 '@smithy/url-parser': 4.2.14 '@smithy/util-base64': 4.3.2 '@smithy/util-body-length-browser': 4.2.2 '@smithy/util-body-length-node': 4.2.3 - '@smithy/util-defaults-mode-browser': 4.3.48 - '@smithy/util-defaults-mode-node': 4.2.53 + '@smithy/util-defaults-mode-browser': 4.4.2 + '@smithy/util-defaults-mode-node': 4.3.2 '@smithy/util-endpoints': 3.4.2 '@smithy/util-middleware': 4.2.14 - '@smithy/util-retry': 4.3.3 - '@smithy/util-stream': 4.5.24 + '@smithy/util-retry': 4.4.2 + '@smithy/util-stream': 4.6.2 '@smithy/util-utf8': 4.2.2 tslib: 2.8.1 transitivePeerDependencies: - aws-crt - '@aws-sdk/core@3.974.4': + '@aws-sdk/core@3.974.10': dependencies: '@aws-sdk/types': 3.973.8 - '@aws-sdk/xml-builder': 3.972.18 - '@smithy/core': 3.23.16 - '@smithy/node-config-provider': 4.3.14 - '@smithy/property-provider': 4.2.14 - '@smithy/protocol-http': 5.3.14 - '@smithy/signature-v4': 5.3.14 - '@smithy/smithy-client': 4.12.12 - '@smithy/types': 4.14.1 - '@smithy/util-base64': 4.3.2 - '@smithy/util-middleware': 4.2.14 - '@smithy/util-retry': 4.3.3 - '@smithy/util-utf8': 4.2.2 - tslib: 2.8.1 - - '@aws-sdk/credential-provider-env@3.972.30': - dependencies: - '@aws-sdk/core': 3.974.4 - '@aws-sdk/types': 3.973.8 - '@smithy/property-provider': 4.2.14 + '@aws-sdk/xml-builder': 3.972.24 + '@smithy/core': 3.24.2 + '@smithy/signature-v4': 5.4.2 '@smithy/types': 4.14.1 tslib: 2.8.1 - '@aws-sdk/credential-provider-http@3.972.32': + '@aws-sdk/credential-provider-env@3.972.36': dependencies: - '@aws-sdk/core': 3.974.4 + '@aws-sdk/core': 3.974.10 '@aws-sdk/types': 3.973.8 - '@smithy/fetch-http-handler': 5.3.17 - '@smithy/node-http-handler': 4.6.0 - '@smithy/property-provider': 4.2.14 - '@smithy/protocol-http': 5.3.14 - '@smithy/smithy-client': 4.12.12 + '@smithy/core': 3.24.2 '@smithy/types': 4.14.1 - '@smithy/util-stream': 4.5.24 tslib: 2.8.1 - '@aws-sdk/credential-provider-ini@3.972.34': + '@aws-sdk/credential-provider-http@3.972.38': dependencies: - '@aws-sdk/core': 3.974.4 - '@aws-sdk/credential-provider-env': 3.972.30 - '@aws-sdk/credential-provider-http': 3.972.32 - '@aws-sdk/credential-provider-login': 3.972.34 - '@aws-sdk/credential-provider-process': 3.972.30 - '@aws-sdk/credential-provider-sso': 3.972.34 - '@aws-sdk/credential-provider-web-identity': 3.972.34 - '@aws-sdk/nested-clients': 3.997.2 + '@aws-sdk/core': 3.974.10 '@aws-sdk/types': 3.973.8 - '@smithy/credential-provider-imds': 4.2.14 - '@smithy/property-provider': 4.2.14 - '@smithy/shared-ini-file-loader': 4.4.9 + '@smithy/core': 3.24.2 + '@smithy/fetch-http-handler': 5.4.2 + '@smithy/node-http-handler': 4.7.2 + '@smithy/types': 4.14.1 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-ini@3.972.40': + dependencies: + '@aws-sdk/core': 3.974.10 + '@aws-sdk/credential-provider-env': 3.972.36 + '@aws-sdk/credential-provider-http': 3.972.38 + '@aws-sdk/credential-provider-login': 3.972.40 + '@aws-sdk/credential-provider-process': 3.972.36 + '@aws-sdk/credential-provider-sso': 3.972.40 + '@aws-sdk/credential-provider-web-identity': 3.972.40 + '@aws-sdk/nested-clients': 3.997.8 + '@aws-sdk/types': 3.973.8 + '@smithy/core': 3.24.2 + '@smithy/credential-provider-imds': 4.3.2 '@smithy/types': 4.14.1 tslib: 2.8.1 transitivePeerDependencies: - aws-crt - '@aws-sdk/credential-provider-login@3.972.34': + '@aws-sdk/credential-provider-login@3.972.40': dependencies: - '@aws-sdk/core': 3.974.4 - '@aws-sdk/nested-clients': 3.997.2 + '@aws-sdk/core': 3.974.10 + '@aws-sdk/nested-clients': 3.997.8 '@aws-sdk/types': 3.973.8 - '@smithy/property-provider': 4.2.14 - '@smithy/protocol-http': 5.3.14 - '@smithy/shared-ini-file-loader': 4.4.9 + '@smithy/core': 3.24.2 '@smithy/types': 4.14.1 tslib: 2.8.1 transitivePeerDependencies: - aws-crt - '@aws-sdk/credential-provider-node@3.972.35': + '@aws-sdk/credential-provider-node@3.972.41': dependencies: - '@aws-sdk/credential-provider-env': 3.972.30 - '@aws-sdk/credential-provider-http': 3.972.32 - '@aws-sdk/credential-provider-ini': 3.972.34 - '@aws-sdk/credential-provider-process': 3.972.30 - '@aws-sdk/credential-provider-sso': 3.972.34 - '@aws-sdk/credential-provider-web-identity': 3.972.34 + '@aws-sdk/credential-provider-env': 3.972.36 + '@aws-sdk/credential-provider-http': 3.972.38 + '@aws-sdk/credential-provider-ini': 3.972.40 + '@aws-sdk/credential-provider-process': 3.972.36 + '@aws-sdk/credential-provider-sso': 3.972.40 + '@aws-sdk/credential-provider-web-identity': 3.972.40 '@aws-sdk/types': 3.973.8 - '@smithy/credential-provider-imds': 4.2.14 - '@smithy/property-provider': 4.2.14 - '@smithy/shared-ini-file-loader': 4.4.9 + '@smithy/core': 3.24.2 + '@smithy/credential-provider-imds': 4.3.2 '@smithy/types': 4.14.1 tslib: 2.8.1 transitivePeerDependencies: - aws-crt - '@aws-sdk/credential-provider-process@3.972.30': + '@aws-sdk/credential-provider-process@3.972.36': dependencies: - '@aws-sdk/core': 3.974.4 + '@aws-sdk/core': 3.974.10 '@aws-sdk/types': 3.973.8 - '@smithy/property-provider': 4.2.14 - '@smithy/shared-ini-file-loader': 4.4.9 + '@smithy/core': 3.24.2 '@smithy/types': 4.14.1 tslib: 2.8.1 - '@aws-sdk/credential-provider-sso@3.972.34': + '@aws-sdk/credential-provider-sso@3.972.40': dependencies: - '@aws-sdk/core': 3.974.4 - '@aws-sdk/nested-clients': 3.997.2 - '@aws-sdk/token-providers': 3.1035.0 + '@aws-sdk/core': 3.974.10 + '@aws-sdk/nested-clients': 3.997.8 + '@aws-sdk/token-providers': 3.1047.0 '@aws-sdk/types': 3.973.8 - '@smithy/property-provider': 4.2.14 - '@smithy/shared-ini-file-loader': 4.4.9 + '@smithy/core': 3.24.2 '@smithy/types': 4.14.1 tslib: 2.8.1 transitivePeerDependencies: - aws-crt - '@aws-sdk/credential-provider-web-identity@3.972.34': + '@aws-sdk/credential-provider-web-identity@3.972.40': dependencies: - '@aws-sdk/core': 3.974.4 - '@aws-sdk/nested-clients': 3.997.2 + '@aws-sdk/core': 3.974.10 + '@aws-sdk/nested-clients': 3.997.8 '@aws-sdk/types': 3.973.8 - '@smithy/property-provider': 4.2.14 - '@smithy/shared-ini-file-loader': 4.4.9 + '@smithy/core': 3.24.2 '@smithy/types': 4.14.1 tslib: 2.8.1 transitivePeerDependencies: @@ -7123,10 +7266,10 @@ snapshots: '@smithy/types': 4.14.1 tslib: 2.8.1 - '@aws-sdk/middleware-host-header@3.972.10': + '@aws-sdk/middleware-host-header@3.972.11': dependencies: '@aws-sdk/types': 3.973.8 - '@smithy/protocol-http': 5.3.14 + '@smithy/core': 3.24.2 '@smithy/types': 4.14.1 tslib: 2.8.1 @@ -7136,40 +7279,21 @@ snapshots: '@smithy/types': 4.14.1 tslib: 2.8.1 - '@aws-sdk/middleware-recursion-detection@3.972.11': + '@aws-sdk/middleware-recursion-detection@3.972.12': dependencies: '@aws-sdk/types': 3.973.8 '@aws/lambda-invoke-store': 0.2.4 - '@smithy/protocol-http': 5.3.14 + '@smithy/core': 3.24.2 '@smithy/types': 4.14.1 tslib: 2.8.1 - '@aws-sdk/middleware-sdk-s3@3.972.33': + '@aws-sdk/middleware-user-agent@3.972.40': dependencies: - '@aws-sdk/core': 3.974.4 + '@aws-sdk/core': 3.974.10 '@aws-sdk/types': 3.973.8 - '@aws-sdk/util-arn-parser': 3.972.3 - '@smithy/core': 3.23.16 - '@smithy/node-config-provider': 4.3.14 - '@smithy/protocol-http': 5.3.14 - '@smithy/signature-v4': 5.3.14 - '@smithy/smithy-client': 4.12.12 + '@aws-sdk/util-endpoints': 3.996.9 + '@smithy/core': 3.24.2 '@smithy/types': 4.14.1 - '@smithy/util-config-provider': 4.2.2 - '@smithy/util-middleware': 4.2.14 - '@smithy/util-stream': 4.5.24 - '@smithy/util-utf8': 4.2.2 - tslib: 2.8.1 - - '@aws-sdk/middleware-user-agent@3.972.34': - dependencies: - '@aws-sdk/core': 3.974.4 - '@aws-sdk/types': 3.973.8 - '@aws-sdk/util-endpoints': 3.996.8 - '@smithy/core': 3.23.16 - '@smithy/protocol-http': 5.3.14 - '@smithy/types': 4.14.1 - '@smithy/util-retry': 4.3.3 tslib: 2.8.1 '@aws-sdk/middleware-websocket@3.972.16': @@ -7178,80 +7302,57 @@ snapshots: '@aws-sdk/util-format-url': 3.972.10 '@smithy/eventstream-codec': 4.2.14 '@smithy/eventstream-serde-browser': 4.2.14 - '@smithy/fetch-http-handler': 5.3.17 + '@smithy/fetch-http-handler': 5.4.2 '@smithy/protocol-http': 5.3.14 - '@smithy/signature-v4': 5.3.14 + '@smithy/signature-v4': 5.4.2 '@smithy/types': 4.14.1 '@smithy/util-base64': 4.3.2 '@smithy/util-hex-encoding': 4.2.2 '@smithy/util-utf8': 4.2.2 tslib: 2.8.1 - '@aws-sdk/nested-clients@3.997.2': + '@aws-sdk/nested-clients@3.997.8': dependencies: '@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.974.4 - '@aws-sdk/middleware-host-header': 3.972.10 + '@aws-sdk/core': 3.974.10 + '@aws-sdk/middleware-host-header': 3.972.11 '@aws-sdk/middleware-logger': 3.972.10 - '@aws-sdk/middleware-recursion-detection': 3.972.11 - '@aws-sdk/middleware-user-agent': 3.972.34 - '@aws-sdk/region-config-resolver': 3.972.13 - '@aws-sdk/signature-v4-multi-region': 3.996.21 + '@aws-sdk/middleware-recursion-detection': 3.972.12 + '@aws-sdk/middleware-user-agent': 3.972.40 + '@aws-sdk/region-config-resolver': 3.972.14 + '@aws-sdk/signature-v4-multi-region': 3.996.26 '@aws-sdk/types': 3.973.8 - '@aws-sdk/util-endpoints': 3.996.8 - '@aws-sdk/util-user-agent-browser': 3.972.10 - '@aws-sdk/util-user-agent-node': 3.973.20 - '@smithy/config-resolver': 4.4.17 - '@smithy/core': 3.23.16 - '@smithy/fetch-http-handler': 5.3.17 - '@smithy/hash-node': 4.2.14 - '@smithy/invalid-dependency': 4.2.14 - '@smithy/middleware-content-length': 4.2.14 - '@smithy/middleware-endpoint': 4.4.31 - '@smithy/middleware-retry': 4.5.4 - '@smithy/middleware-serde': 4.2.19 - '@smithy/middleware-stack': 4.2.14 - '@smithy/node-config-provider': 4.3.14 - '@smithy/node-http-handler': 4.6.0 - '@smithy/protocol-http': 5.3.14 - '@smithy/smithy-client': 4.12.12 + '@aws-sdk/util-endpoints': 3.996.9 + '@aws-sdk/util-user-agent-browser': 3.972.11 + '@aws-sdk/util-user-agent-node': 3.973.26 + '@smithy/core': 3.24.2 + '@smithy/fetch-http-handler': 5.4.2 + '@smithy/node-http-handler': 4.7.2 '@smithy/types': 4.14.1 - '@smithy/url-parser': 4.2.14 - '@smithy/util-base64': 4.3.2 - '@smithy/util-body-length-browser': 4.2.2 - '@smithy/util-body-length-node': 4.2.3 - '@smithy/util-defaults-mode-browser': 4.3.48 - '@smithy/util-defaults-mode-node': 4.2.53 - '@smithy/util-endpoints': 3.4.2 - '@smithy/util-middleware': 4.2.14 - '@smithy/util-retry': 4.3.3 - '@smithy/util-utf8': 4.2.2 tslib: 2.8.1 transitivePeerDependencies: - aws-crt - '@aws-sdk/region-config-resolver@3.972.13': + '@aws-sdk/region-config-resolver@3.972.14': dependencies: '@aws-sdk/types': 3.973.8 - '@smithy/config-resolver': 4.4.17 - '@smithy/node-config-provider': 4.3.14 + '@smithy/core': 3.24.2 '@smithy/types': 4.14.1 tslib: 2.8.1 - '@aws-sdk/signature-v4-multi-region@3.996.21': + '@aws-sdk/signature-v4-multi-region@3.996.26': dependencies: - '@aws-sdk/middleware-sdk-s3': 3.972.33 '@aws-sdk/types': 3.973.8 - '@smithy/protocol-http': 5.3.14 - '@smithy/signature-v4': 5.3.14 + '@smithy/core': 3.24.2 + '@smithy/signature-v4': 5.4.2 '@smithy/types': 4.14.1 tslib: 2.8.1 - '@aws-sdk/token-providers@3.1035.0': + '@aws-sdk/token-providers@3.1042.0': dependencies: - '@aws-sdk/core': 3.974.4 - '@aws-sdk/nested-clients': 3.997.2 + '@aws-sdk/core': 3.974.10 + '@aws-sdk/nested-clients': 3.997.8 '@aws-sdk/types': 3.973.8 '@smithy/property-provider': 4.2.14 '@smithy/shared-ini-file-loader': 4.4.9 @@ -7260,21 +7361,27 @@ snapshots: transitivePeerDependencies: - aws-crt + '@aws-sdk/token-providers@3.1047.0': + dependencies: + '@aws-sdk/core': 3.974.10 + '@aws-sdk/nested-clients': 3.997.8 + '@aws-sdk/types': 3.973.8 + '@smithy/core': 3.24.2 + '@smithy/types': 4.14.1 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + '@aws-sdk/types@3.973.8': dependencies: '@smithy/types': 4.14.1 tslib: 2.8.1 - '@aws-sdk/util-arn-parser@3.972.3': - dependencies: - tslib: 2.8.1 - - '@aws-sdk/util-endpoints@3.996.8': + '@aws-sdk/util-endpoints@3.996.9': dependencies: '@aws-sdk/types': 3.973.8 + '@smithy/core': 3.24.2 '@smithy/types': 4.14.1 - '@smithy/url-parser': 4.2.14 - '@smithy/util-endpoints': 3.4.2 tslib: 2.8.1 '@aws-sdk/util-format-url@3.972.10': @@ -7288,26 +7395,26 @@ snapshots: dependencies: tslib: 2.8.1 - '@aws-sdk/util-user-agent-browser@3.972.10': + '@aws-sdk/util-user-agent-browser@3.972.11': dependencies: '@aws-sdk/types': 3.973.8 '@smithy/types': 4.14.1 bowser: 2.14.1 tslib: 2.8.1 - '@aws-sdk/util-user-agent-node@3.973.20': + '@aws-sdk/util-user-agent-node@3.973.26': dependencies: - '@aws-sdk/middleware-user-agent': 3.972.34 + '@aws-sdk/middleware-user-agent': 3.972.40 '@aws-sdk/types': 3.973.8 - '@smithy/node-config-provider': 4.3.14 + '@smithy/core': 3.24.2 '@smithy/types': 4.14.1 - '@smithy/util-config-provider': 4.2.2 tslib: 2.8.1 - '@aws-sdk/xml-builder@3.972.18': + '@aws-sdk/xml-builder@3.972.24': dependencies: + '@nodable/entities': 2.1.0 '@smithy/types': 4.14.1 - fast-xml-parser: 5.5.8 + fast-xml-parser: 5.7.3 tslib: 2.8.1 '@aws/lambda-invoke-store@0.2.4': {} @@ -7480,6 +7587,11 @@ snapshots: fast-wrap-ansi: 0.1.6 sisteransi: 1.0.5 + '@clack/core@1.3.0': + dependencies: + fast-wrap-ansi: 0.2.0 + sisteransi: 1.0.5 + '@clack/prompts@0.11.0': dependencies: '@clack/core': 0.5.0 @@ -7493,6 +7605,13 @@ snapshots: fast-wrap-ansi: 0.1.6 sisteransi: 1.0.5 + '@clack/prompts@1.3.0': + dependencies: + '@clack/core': 1.3.0 + fast-string-width: 3.0.2 + fast-wrap-ansi: 0.2.0 + sisteransi: 1.0.5 + '@cloudflare/workers-types@4.20260405.1': optional: true @@ -7543,6 +7662,85 @@ snapshots: - opusscript - utf-8-validate + '@earendil-works/pi-agent-core@0.74.0(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(ws@8.20.0)(zod@4.4.3)': + dependencies: + '@earendil-works/pi-ai': 0.74.0(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(ws@8.20.0)(zod@4.4.3) + typebox: 1.1.38 + transitivePeerDependencies: + - '@modelcontextprotocol/sdk' + - aws-crt + - bufferutil + - supports-color + - utf-8-validate + - ws + - zod + + '@earendil-works/pi-ai@0.74.0(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(ws@8.20.0)(zod@4.4.3)': + dependencies: + '@anthropic-ai/sdk': 0.91.1(zod@4.4.3) + '@aws-sdk/client-bedrock-runtime': 3.1042.0 + '@google/genai': 1.52.0(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3)) + '@mistralai/mistralai': 2.2.1 + chalk: 5.6.2 + openai: 6.26.0(ws@8.20.0)(zod@4.4.3) + partial-json: 0.1.7 + proxy-agent: 6.5.0 + typebox: 1.1.38 + undici: 7.24.6 + zod-to-json-schema: 3.25.1(zod@4.4.3) + transitivePeerDependencies: + - '@modelcontextprotocol/sdk' + - aws-crt + - bufferutil + - supports-color + - utf-8-validate + - ws + - zod + + '@earendil-works/pi-coding-agent@0.74.0(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(ws@8.20.0)(zod@4.4.3)': + dependencies: + '@earendil-works/pi-agent-core': 0.74.0(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(ws@8.20.0)(zod@4.4.3) + '@earendil-works/pi-ai': 0.74.0(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(ws@8.20.0)(zod@4.4.3) + '@earendil-works/pi-tui': 0.74.0 + '@silvia-odwyer/photon-node': 0.3.4 + chalk: 5.6.2 + cli-highlight: 2.1.11 + diff: 8.0.4 + extract-zip: 2.0.1 + file-type: 21.3.4 + glob: 13.0.6 + hosted-git-info: 9.0.2 + ignore: 7.0.5 + jiti: 2.7.0 + marked: 15.0.12 + minimatch: 10.2.5 + proper-lockfile: 4.1.2 + strip-ansi: 7.2.0 + typebox: 1.1.38 + undici: 7.24.6 + uuid: 14.0.0 + yaml: 2.9.0 + optionalDependencies: + '@mariozechner/clipboard': 0.3.5 + transitivePeerDependencies: + - '@modelcontextprotocol/sdk' + - aws-crt + - bufferutil + - supports-color + - utf-8-validate + - ws + - zod + + '@earendil-works/pi-tui@0.74.0': + dependencies: + '@types/mime-types': 2.1.4 + chalk: 5.6.2 + get-east-asian-width: 1.5.0 + marked: 15.0.12 + mime-types: 3.0.2 + optionalDependencies: + koffi: 2.15.2 + '@electron/asar@3.4.1': dependencies: commander: 5.1.0 @@ -7794,14 +7992,27 @@ snapshots: '@floating-ui/utils@0.2.11': {} - '@google/genai@1.49.0(@modelcontextprotocol/sdk@1.29.0(zod@4.3.6))': + '@google/genai@1.52.0(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))': dependencies: google-auth-library: 10.6.2 p-retry: 4.6.2 - protobufjs: 7.5.4 + protobufjs: 7.5.8 ws: 8.20.0 optionalDependencies: - '@modelcontextprotocol/sdk': 1.29.0(zod@4.3.6) + '@modelcontextprotocol/sdk': 1.29.0(zod@4.4.3) + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + '@google/genai@2.0.1(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))': + dependencies: + google-auth-library: 10.6.2 + p-retry: 4.6.2 + protobufjs: 7.5.8 + ws: 8.20.0 + optionalDependencies: + '@modelcontextprotocol/sdk': 1.29.0(zod@4.4.3) transitivePeerDependencies: - bufferutil - supports-color @@ -7834,6 +8045,15 @@ snapshots: transitivePeerDependencies: - supports-color + '@homebridge/ciao@1.3.8': + dependencies: + debug: 4.4.3 + fast-deep-equal: 3.1.3 + source-map-support: 0.5.21 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + '@hono/node-server@1.19.13(hono@4.12.12)': dependencies: hono: 4.12.12 @@ -7969,7 +8189,6 @@ snapshots: mime: 3.0.0 transitivePeerDependencies: - supports-color - optional: true '@jimp/diff@1.6.1': dependencies: @@ -7979,10 +8198,8 @@ snapshots: pixelmatch: 5.3.0 transitivePeerDependencies: - supports-color - optional: true - '@jimp/file-ops@1.6.1': - optional: true + '@jimp/file-ops@1.6.1': {} '@jimp/js-bmp@1.6.1': dependencies: @@ -7992,7 +8209,6 @@ snapshots: bmp-ts: 1.0.9 transitivePeerDependencies: - supports-color - optional: true '@jimp/js-gif@1.6.1': dependencies: @@ -8002,7 +8218,6 @@ snapshots: omggif: 1.0.10 transitivePeerDependencies: - supports-color - optional: true '@jimp/js-jpeg@1.6.1': dependencies: @@ -8011,7 +8226,6 @@ snapshots: jpeg-js: 0.4.4 transitivePeerDependencies: - supports-color - optional: true '@jimp/js-png@1.6.1': dependencies: @@ -8020,7 +8234,6 @@ snapshots: pngjs: 7.0.0 transitivePeerDependencies: - supports-color - optional: true '@jimp/js-tiff@1.6.1': dependencies: @@ -8029,14 +8242,12 @@ snapshots: utif2: 4.1.0 transitivePeerDependencies: - supports-color - optional: true '@jimp/plugin-blit@1.6.1': dependencies: '@jimp/types': 1.6.1 '@jimp/utils': 1.6.1 zod: 3.25.76 - optional: true '@jimp/plugin-blur@1.6.1': dependencies: @@ -8044,13 +8255,11 @@ snapshots: '@jimp/utils': 1.6.1 transitivePeerDependencies: - supports-color - optional: true '@jimp/plugin-circle@1.6.1': dependencies: '@jimp/types': 1.6.1 zod: 3.25.76 - optional: true '@jimp/plugin-color@1.6.1': dependencies: @@ -8061,7 +8270,6 @@ snapshots: zod: 3.25.76 transitivePeerDependencies: - supports-color - optional: true '@jimp/plugin-contain@1.6.1': dependencies: @@ -8073,7 +8281,6 @@ snapshots: zod: 3.25.76 transitivePeerDependencies: - supports-color - optional: true '@jimp/plugin-cover@1.6.1': dependencies: @@ -8084,7 +8291,6 @@ snapshots: zod: 3.25.76 transitivePeerDependencies: - supports-color - optional: true '@jimp/plugin-crop@1.6.1': dependencies: @@ -8094,32 +8300,27 @@ snapshots: zod: 3.25.76 transitivePeerDependencies: - supports-color - optional: true '@jimp/plugin-displace@1.6.1': dependencies: '@jimp/types': 1.6.1 '@jimp/utils': 1.6.1 zod: 3.25.76 - optional: true '@jimp/plugin-dither@1.6.1': dependencies: '@jimp/types': 1.6.1 - optional: true '@jimp/plugin-fisheye@1.6.1': dependencies: '@jimp/types': 1.6.1 '@jimp/utils': 1.6.1 zod: 3.25.76 - optional: true '@jimp/plugin-flip@1.6.1': dependencies: '@jimp/types': 1.6.1 zod: 3.25.76 - optional: true '@jimp/plugin-hash@1.6.1': dependencies: @@ -8135,13 +8336,11 @@ snapshots: any-base: 1.1.0 transitivePeerDependencies: - supports-color - optional: true '@jimp/plugin-mask@1.6.1': dependencies: '@jimp/types': 1.6.1 zod: 3.25.76 - optional: true '@jimp/plugin-print@1.6.1': dependencies: @@ -8157,13 +8356,11 @@ snapshots: zod: 3.25.76 transitivePeerDependencies: - supports-color - optional: true '@jimp/plugin-quantize@1.6.1': dependencies: image-q: 4.0.0 zod: 3.25.76 - optional: true '@jimp/plugin-resize@1.6.1': dependencies: @@ -8172,7 +8369,6 @@ snapshots: zod: 3.25.76 transitivePeerDependencies: - supports-color - optional: true '@jimp/plugin-rotate@1.6.1': dependencies: @@ -8184,7 +8380,6 @@ snapshots: zod: 3.25.76 transitivePeerDependencies: - supports-color - optional: true '@jimp/plugin-threshold@1.6.1': dependencies: @@ -8196,18 +8391,15 @@ snapshots: zod: 3.25.76 transitivePeerDependencies: - supports-color - optional: true '@jimp/types@1.6.1': dependencies: zod: 3.25.76 - optional: true '@jimp/utils@1.6.1': dependencies: '@jimp/types': 1.6.1 tinycolor2: 1.6.0 - optional: true '@jridgewell/gen-mapping@0.3.13': dependencies: @@ -8236,14 +8428,15 @@ snapshots: '@keyv/serialize@1.1.1': {} - '@larksuite/openclaw-lark@2026.4.8(openclaw@2026.4.23(@napi-rs/canvas@0.1.100)(encoding@0.1.13))': + '@larksuite/openclaw-lark@2026.5.12(openclaw@2026.5.12(encoding@0.1.13))': dependencies: '@larksuiteoapi/node-sdk': 1.62.0 '@sinclair/typebox': 0.34.48 image-size: 2.0.2 - zod: 4.3.6 + undici-types: 8.3.0 + zod: 4.4.3 optionalDependencies: - openclaw: 2026.4.23(@napi-rs/canvas@0.1.100)(encoding@0.1.13) + openclaw: 2026.5.12(encoding@0.1.13) transitivePeerDependencies: - bufferutil - debug @@ -8303,193 +8496,64 @@ snapshots: transitivePeerDependencies: - supports-color - '@mariozechner/clipboard-darwin-arm64@0.3.3': + '@mariozechner/clipboard-darwin-arm64@0.3.2': optional: true - '@mariozechner/clipboard-darwin-universal@0.3.3': + '@mariozechner/clipboard-darwin-universal@0.3.2': optional: true - '@mariozechner/clipboard-darwin-x64@0.3.3': + '@mariozechner/clipboard-darwin-x64@0.3.2': optional: true - '@mariozechner/clipboard-linux-arm64-gnu@0.3.3': + '@mariozechner/clipboard-linux-arm64-gnu@0.3.2': optional: true - '@mariozechner/clipboard-linux-arm64-musl@0.3.3': + '@mariozechner/clipboard-linux-arm64-musl@0.3.2': optional: true - '@mariozechner/clipboard-linux-riscv64-gnu@0.3.3': + '@mariozechner/clipboard-linux-riscv64-gnu@0.3.2': optional: true - '@mariozechner/clipboard-linux-x64-gnu@0.3.3': + '@mariozechner/clipboard-linux-x64-gnu@0.3.2': optional: true - '@mariozechner/clipboard-linux-x64-musl@0.3.3': + '@mariozechner/clipboard-linux-x64-musl@0.3.2': optional: true - '@mariozechner/clipboard-win32-arm64-msvc@0.3.3': + '@mariozechner/clipboard-win32-arm64-msvc@0.3.2': optional: true - '@mariozechner/clipboard-win32-x64-msvc@0.3.3': + '@mariozechner/clipboard-win32-x64-msvc@0.3.2': optional: true - '@mariozechner/clipboard@0.3.3': + '@mariozechner/clipboard@0.3.5': optionalDependencies: - '@mariozechner/clipboard-darwin-arm64': 0.3.3 - '@mariozechner/clipboard-darwin-universal': 0.3.3 - '@mariozechner/clipboard-darwin-x64': 0.3.3 - '@mariozechner/clipboard-linux-arm64-gnu': 0.3.3 - '@mariozechner/clipboard-linux-arm64-musl': 0.3.3 - '@mariozechner/clipboard-linux-riscv64-gnu': 0.3.3 - '@mariozechner/clipboard-linux-x64-gnu': 0.3.3 - '@mariozechner/clipboard-linux-x64-musl': 0.3.3 - '@mariozechner/clipboard-win32-arm64-msvc': 0.3.3 - '@mariozechner/clipboard-win32-x64-msvc': 0.3.3 + '@mariozechner/clipboard-darwin-arm64': 0.3.2 + '@mariozechner/clipboard-darwin-universal': 0.3.2 + '@mariozechner/clipboard-darwin-x64': 0.3.2 + '@mariozechner/clipboard-linux-arm64-gnu': 0.3.2 + '@mariozechner/clipboard-linux-arm64-musl': 0.3.2 + '@mariozechner/clipboard-linux-riscv64-gnu': 0.3.2 + '@mariozechner/clipboard-linux-x64-gnu': 0.3.2 + '@mariozechner/clipboard-linux-x64-musl': 0.3.2 + '@mariozechner/clipboard-win32-arm64-msvc': 0.3.2 + '@mariozechner/clipboard-win32-x64-msvc': 0.3.2 optional: true - '@mariozechner/jiti@2.6.5': - dependencies: - std-env: 3.10.0 - yoctocolors: 2.1.2 - - '@mariozechner/pi-agent-core@0.70.0(@modelcontextprotocol/sdk@1.29.0(zod@4.3.6))(ws@8.20.0)(zod@4.3.6)': - dependencies: - '@mariozechner/pi-ai': 0.70.2(@modelcontextprotocol/sdk@1.29.0(zod@4.3.6))(ws@8.20.0)(zod@4.3.6) - typebox: 1.1.33 - transitivePeerDependencies: - - '@modelcontextprotocol/sdk' - - aws-crt - - bufferutil - - supports-color - - utf-8-validate - - ws - - zod - - '@mariozechner/pi-agent-core@0.70.2(@modelcontextprotocol/sdk@1.29.0(zod@4.3.6))(ws@8.20.0)(zod@4.3.6)': - dependencies: - '@mariozechner/pi-ai': 0.70.2(@modelcontextprotocol/sdk@1.29.0(zod@4.3.6))(ws@8.20.0)(zod@4.3.6) - typebox: 1.1.33 - transitivePeerDependencies: - - '@modelcontextprotocol/sdk' - - aws-crt - - bufferutil - - supports-color - - utf-8-validate - - ws - - zod - - '@mariozechner/pi-ai@0.70.0(@modelcontextprotocol/sdk@1.29.0(zod@4.3.6))(ws@8.20.0)(zod@4.3.6)': - dependencies: - '@anthropic-ai/sdk': 0.90.0(zod@4.3.6) - '@aws-sdk/client-bedrock-runtime': 3.1035.0 - '@google/genai': 1.49.0(@modelcontextprotocol/sdk@1.29.0(zod@4.3.6)) - '@mistralai/mistralai': 2.2.1 - chalk: 5.6.2 - openai: 6.26.0(ws@8.20.0)(zod@4.3.6) - partial-json: 0.1.7 - proxy-agent: 6.5.0 - typebox: 1.1.33 - undici: 7.24.6 - zod-to-json-schema: 3.25.1(zod@4.3.6) - transitivePeerDependencies: - - '@modelcontextprotocol/sdk' - - aws-crt - - bufferutil - - supports-color - - utf-8-validate - - ws - - zod - - '@mariozechner/pi-ai@0.70.2(@modelcontextprotocol/sdk@1.29.0(zod@4.3.6))(ws@8.20.0)(zod@4.3.6)': - dependencies: - '@anthropic-ai/sdk': 0.90.0(zod@4.3.6) - '@aws-sdk/client-bedrock-runtime': 3.1035.0 - '@google/genai': 1.49.0(@modelcontextprotocol/sdk@1.29.0(zod@4.3.6)) - '@mistralai/mistralai': 2.2.1 - chalk: 5.6.2 - openai: 6.26.0(ws@8.20.0)(zod@4.3.6) - partial-json: 0.1.7 - proxy-agent: 6.5.0 - typebox: 1.1.33 - undici: 7.24.6 - zod-to-json-schema: 3.25.1(zod@4.3.6) - transitivePeerDependencies: - - '@modelcontextprotocol/sdk' - - aws-crt - - bufferutil - - supports-color - - utf-8-validate - - ws - - zod - - '@mariozechner/pi-coding-agent@0.70.0(@modelcontextprotocol/sdk@1.29.0(zod@4.3.6))(ws@8.20.0)(zod@4.3.6)': - dependencies: - '@mariozechner/jiti': 2.6.5 - '@mariozechner/pi-agent-core': 0.70.2(@modelcontextprotocol/sdk@1.29.0(zod@4.3.6))(ws@8.20.0)(zod@4.3.6) - '@mariozechner/pi-ai': 0.70.2(@modelcontextprotocol/sdk@1.29.0(zod@4.3.6))(ws@8.20.0)(zod@4.3.6) - '@mariozechner/pi-tui': 0.70.2 - '@silvia-odwyer/photon-node': 0.3.4 - chalk: 5.6.2 - cli-highlight: 2.1.11 - diff: 8.0.4 - extract-zip: 2.0.1 - file-type: 21.3.4 - glob: 13.0.6 - hosted-git-info: 9.0.2 - ignore: 7.0.5 - marked: 15.0.12 - minimatch: 10.2.4 - proper-lockfile: 4.1.2 - strip-ansi: 7.2.0 - typebox: 1.1.33 - undici: 7.24.6 - uuid: 14.0.0 - yaml: 2.8.3 - optionalDependencies: - '@mariozechner/clipboard': 0.3.3 - transitivePeerDependencies: - - '@modelcontextprotocol/sdk' - - aws-crt - - bufferutil - - supports-color - - utf-8-validate - - ws - - zod - - '@mariozechner/pi-tui@0.70.0': - dependencies: - '@types/mime-types': 2.1.4 - chalk: 5.6.2 - get-east-asian-width: 1.5.0 - marked: 15.0.12 - mime-types: 3.0.2 - optionalDependencies: - koffi: 2.15.2 - - '@mariozechner/pi-tui@0.70.2': - dependencies: - '@types/mime-types': 2.1.4 - chalk: 5.6.2 - get-east-asian-width: 1.5.0 - marked: 15.0.12 - mime-types: 3.0.2 - optionalDependencies: - koffi: 2.15.2 - '@mistralai/mistralai@2.2.1': dependencies: ws: 8.20.0 - zod: 4.3.6 - zod-to-json-schema: 3.25.1(zod@4.3.6) + zod: 4.4.3 + zod-to-json-schema: 3.25.1(zod@4.4.3) transitivePeerDependencies: - bufferutil - utf-8-validate - '@modelcontextprotocol/sdk@1.29.0(zod@4.3.6)': + '@modelcontextprotocol/sdk@1.29.0(zod@4.4.3)': dependencies: '@hono/node-server': 1.19.13(hono@4.12.12) - ajv: 8.18.0 - ajv-formats: 3.0.1(ajv@8.18.0) + 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 @@ -8502,8 +8566,8 @@ snapshots: json-schema-typed: 8.0.2 pkce-challenge: 5.0.1 raw-body: 3.0.2 - zod: 4.3.6 - zod-to-json-schema: 3.25.1(zod@4.3.6) + zod: 4.4.3 + zod-to-json-schema: 3.25.1(zod@4.4.3) transitivePeerDependencies: - supports-color @@ -8596,6 +8660,7 @@ snapshots: '@napi-rs/canvas-linux-x64-musl': 0.1.100 '@napi-rs/canvas-win32-arm64-msvc': 0.1.100 '@napi-rs/canvas-win32-x64-msvc': 0.1.100 + optional: true '@napi-rs/canvas@0.1.80': optionalDependencies: @@ -8620,6 +8685,8 @@ snapshots: '@noble/hashes@2.0.1': optional: true + '@nodable/entities@2.1.0': {} + '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 @@ -8646,6 +8713,62 @@ snapshots: dependencies: semver: 7.7.4 + '@openclaw/discord@2026.5.12(@emnapi/core@1.10.0)(@emnapi/runtime@1.9.1)(openclaw@2026.5.12(encoding@0.1.13))': + dependencies: + '@discordjs/voice': 0.19.2(@emnapi/core@1.10.0)(@emnapi/runtime@1.9.1)(opusscript@0.1.1) + discord-api-types: 0.38.47 + https-proxy-agent: 9.0.0 + opusscript: 0.1.1 + typebox: 1.1.38 + undici: 8.2.0 + ws: 8.20.0 + optionalDependencies: + openclaw: 2026.5.12(encoding@0.1.13) + transitivePeerDependencies: + - '@discordjs/opus' + - '@emnapi/core' + - '@emnapi/runtime' + - bufferutil + - ffmpeg-static + - node-opus + - supports-color + - utf-8-validate + + '@openclaw/fs-safe@0.2.4': + optionalDependencies: + jszip: 3.10.1 + tar: 7.5.13 + + '@openclaw/qqbot@2026.5.12(openclaw@2026.5.12(encoding@0.1.13))': + dependencies: + '@tencent-connect/qqbot-connector': 1.1.0 + mpg123-decoder: 1.0.3 + silk-wasm: 3.7.1 + ws: 8.20.0 + zod: 4.4.3 + optionalDependencies: + openclaw: 2026.5.12(encoding@0.1.13) + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + '@openclaw/whatsapp@2026.5.12(openclaw@2026.5.12(encoding@0.1.13))(sharp@0.34.5)': + dependencies: + audio-decode: 2.2.3 + baileys: 7.0.0-rc11(audio-decode@2.2.3)(jimp@1.6.1)(sharp@0.34.5) + https-proxy-agent: 9.0.0 + jimp: 1.6.1 + typebox: 1.1.38 + undici: 8.2.0 + optionalDependencies: + openclaw: 2026.5.12(encoding@0.1.13) + transitivePeerDependencies: + - bufferutil + - link-preview-js + - sharp + - supports-color + - utf-8-validate + '@pinojs/redact@0.4.0': {} '@pkgjs/parseargs@0.11.0': @@ -8665,6 +8788,8 @@ snapshots: '@protobufjs/codegen@2.0.4': {} + '@protobufjs/codegen@2.0.5': {} + '@protobufjs/eventemitter@1.1.0': {} '@protobufjs/fetch@1.1.0': @@ -8676,12 +8801,16 @@ snapshots: '@protobufjs/inquire@1.1.0': {} + '@protobufjs/inquire@1.1.1': {} + '@protobufjs/path@1.1.2': {} '@protobufjs/pool@1.1.0': {} '@protobufjs/utf8@1.1.0': {} + '@protobufjs/utf8@1.1.1': {} + '@radix-ui/number@1.1.1': {} '@radix-ui/primitive@1.1.3': {} @@ -9221,25 +9350,16 @@ snapshots: '@smithy/util-middleware': 4.2.14 tslib: 2.8.1 - '@smithy/core@3.23.16': + '@smithy/core@3.24.2': dependencies: - '@smithy/protocol-http': 5.3.14 + '@aws-crypto/crc32': 5.2.0 '@smithy/types': 4.14.1 - '@smithy/url-parser': 4.2.14 - '@smithy/util-base64': 4.3.2 - '@smithy/util-body-length-browser': 4.2.2 - '@smithy/util-middleware': 4.2.14 - '@smithy/util-stream': 4.5.24 - '@smithy/util-utf8': 4.2.2 - '@smithy/uuid': 1.1.2 tslib: 2.8.1 - '@smithy/credential-provider-imds@4.2.14': + '@smithy/credential-provider-imds@4.3.2': dependencies: - '@smithy/node-config-provider': 4.3.14 - '@smithy/property-provider': 4.2.14 + '@smithy/core': 3.24.2 '@smithy/types': 4.14.1 - '@smithy/url-parser': 4.2.14 tslib: 2.8.1 '@smithy/eventstream-codec@4.2.14': @@ -9272,12 +9392,10 @@ snapshots: '@smithy/types': 4.14.1 tslib: 2.8.1 - '@smithy/fetch-http-handler@5.3.17': + '@smithy/fetch-http-handler@5.4.2': dependencies: - '@smithy/protocol-http': 5.3.14 - '@smithy/querystring-builder': 4.2.14 + '@smithy/core': 3.24.2 '@smithy/types': 4.14.1 - '@smithy/util-base64': 4.3.2 tslib: 2.8.1 '@smithy/hash-node@4.2.14': @@ -9306,35 +9424,19 @@ snapshots: '@smithy/types': 4.14.1 tslib: 2.8.1 - '@smithy/middleware-endpoint@4.4.31': + '@smithy/middleware-endpoint@4.5.2': dependencies: - '@smithy/core': 3.23.16 - '@smithy/middleware-serde': 4.2.19 - '@smithy/node-config-provider': 4.3.14 - '@smithy/shared-ini-file-loader': 4.4.9 - '@smithy/types': 4.14.1 - '@smithy/url-parser': 4.2.14 - '@smithy/util-middleware': 4.2.14 + '@smithy/core': 3.24.2 tslib: 2.8.1 - '@smithy/middleware-retry@4.5.4': + '@smithy/middleware-retry@4.6.2': dependencies: - '@smithy/core': 3.23.16 - '@smithy/node-config-provider': 4.3.14 - '@smithy/protocol-http': 5.3.14 - '@smithy/service-error-classification': 4.3.0 - '@smithy/smithy-client': 4.12.12 - '@smithy/types': 4.14.1 - '@smithy/util-middleware': 4.2.14 - '@smithy/util-retry': 4.3.3 - '@smithy/uuid': 1.1.2 + '@smithy/core': 3.24.2 tslib: 2.8.1 - '@smithy/middleware-serde@4.2.19': + '@smithy/middleware-serde@4.3.2': dependencies: - '@smithy/core': 3.23.16 - '@smithy/protocol-http': 5.3.14 - '@smithy/types': 4.14.1 + '@smithy/core': 3.24.2 tslib: 2.8.1 '@smithy/middleware-stack@4.2.14': @@ -9349,10 +9451,9 @@ snapshots: '@smithy/types': 4.14.1 tslib: 2.8.1 - '@smithy/node-http-handler@4.6.0': + '@smithy/node-http-handler@4.7.2': dependencies: - '@smithy/protocol-http': 5.3.14 - '@smithy/querystring-builder': 4.2.14 + '@smithy/core': 3.24.2 '@smithy/types': 4.14.1 tslib: 2.8.1 @@ -9377,34 +9478,21 @@ snapshots: '@smithy/types': 4.14.1 tslib: 2.8.1 - '@smithy/service-error-classification@4.3.0': - dependencies: - '@smithy/types': 4.14.1 - '@smithy/shared-ini-file-loader@4.4.9': dependencies: '@smithy/types': 4.14.1 tslib: 2.8.1 - '@smithy/signature-v4@5.3.14': + '@smithy/signature-v4@5.4.2': dependencies: - '@smithy/is-array-buffer': 4.2.2 - '@smithy/protocol-http': 5.3.14 + '@smithy/core': 3.24.2 '@smithy/types': 4.14.1 - '@smithy/util-hex-encoding': 4.2.2 - '@smithy/util-middleware': 4.2.14 - '@smithy/util-uri-escape': 4.2.2 - '@smithy/util-utf8': 4.2.2 tslib: 2.8.1 - '@smithy/smithy-client@4.12.12': + '@smithy/smithy-client@4.13.2': dependencies: - '@smithy/core': 3.23.16 - '@smithy/middleware-endpoint': 4.4.31 - '@smithy/middleware-stack': 4.2.14 - '@smithy/protocol-http': 5.3.14 + '@smithy/core': 3.24.2 '@smithy/types': 4.14.1 - '@smithy/util-stream': 4.5.24 tslib: 2.8.1 '@smithy/types@4.14.1': @@ -9445,21 +9533,14 @@ snapshots: dependencies: tslib: 2.8.1 - '@smithy/util-defaults-mode-browser@4.3.48': + '@smithy/util-defaults-mode-browser@4.4.2': dependencies: - '@smithy/property-provider': 4.2.14 - '@smithy/smithy-client': 4.12.12 - '@smithy/types': 4.14.1 + '@smithy/core': 3.24.2 tslib: 2.8.1 - '@smithy/util-defaults-mode-node@4.2.53': + '@smithy/util-defaults-mode-node@4.3.2': dependencies: - '@smithy/config-resolver': 4.4.17 - '@smithy/credential-provider-imds': 4.2.14 - '@smithy/node-config-provider': 4.3.14 - '@smithy/property-provider': 4.2.14 - '@smithy/smithy-client': 4.12.12 - '@smithy/types': 4.14.1 + '@smithy/core': 3.24.2 tslib: 2.8.1 '@smithy/util-endpoints@3.4.2': @@ -9477,21 +9558,14 @@ snapshots: '@smithy/types': 4.14.1 tslib: 2.8.1 - '@smithy/util-retry@4.3.3': + '@smithy/util-retry@4.4.2': dependencies: - '@smithy/service-error-classification': 4.3.0 - '@smithy/types': 4.14.1 + '@smithy/core': 3.24.2 tslib: 2.8.1 - '@smithy/util-stream@4.5.24': + '@smithy/util-stream@4.6.2': dependencies: - '@smithy/fetch-http-handler': 5.3.17 - '@smithy/node-http-handler': 4.6.0 - '@smithy/types': 4.14.1 - '@smithy/util-base64': 4.3.2 - '@smithy/util-buffer-from': 4.2.2 - '@smithy/util-hex-encoding': 4.2.2 - '@smithy/util-utf8': 4.2.2 + '@smithy/core': 3.24.2 tslib: 2.8.1 '@smithy/util-uri-escape@4.2.2': @@ -9508,10 +9582,6 @@ snapshots: '@smithy/util-buffer-from': 4.2.2 tslib: 2.8.1 - '@smithy/uuid@1.1.2': - dependencies: - tslib: 2.8.1 - '@snazzah/davey-android-arm-eabi@0.1.11': optional: true @@ -9579,7 +9649,7 @@ snapshots: - '@emnapi/core' - '@emnapi/runtime' - '@soimy/dingtalk@3.5.3(openclaw@2026.4.23(@napi-rs/canvas@0.1.100)(encoding@0.1.13))': + '@soimy/dingtalk@3.6.2(openclaw@2026.5.12(encoding@0.1.13))': dependencies: axios: 1.13.6(debug@4.4.3) dingtalk-stream: 2.1.5 @@ -9588,7 +9658,7 @@ snapshots: pdf-parse: 2.4.5 zod: 4.3.6 optionalDependencies: - openclaw: 2026.4.23(@napi-rs/canvas@0.1.100)(encoding@0.1.13) + openclaw: 2026.5.12(encoding@0.1.13) transitivePeerDependencies: - bufferutil - debug @@ -9605,8 +9675,9 @@ snapshots: dependencies: qrcode-terminal: 0.12.0 - '@tencent-weixin/openclaw-weixin@2.1.9': + '@tencent-weixin/openclaw-weixin@2.4.3(openclaw@2026.5.12(encoding@0.1.13))': dependencies: + openclaw: 2026.5.12(encoding@0.1.13) qrcode-terminal: 0.12.0 zod: 4.3.6 @@ -9640,6 +9711,12 @@ snapshots: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) + '@thi.ng/bitstream@2.4.49': + dependencies: + '@thi.ng/errors': 2.6.11 + + '@thi.ng/errors@2.6.11': {} + '@tokenizer/inflate@0.4.1': dependencies: debug: 4.4.3 @@ -9732,8 +9809,6 @@ snapshots: dependencies: '@types/node': 25.5.0 - '@types/long@4.0.2': {} - '@types/mdast@4.0.4': dependencies: '@types/unist': 3.0.3 @@ -9742,10 +9817,7 @@ snapshots: '@types/ms@2.1.0': {} - '@types/node@10.17.60': {} - - '@types/node@16.9.1': - optional: true + '@types/node@16.9.1': {} '@types/node@24.12.0': dependencies: @@ -9891,11 +9963,7 @@ snapshots: '@ungap/structured-clone@1.3.0': {} - '@vincentkoc/qrcode-tui@0.2.1': - dependencies: - qrcode: 1.5.4 - - '@vitejs/plugin-react@5.2.0(vite@7.3.1(@types/node@25.5.0)(jiti@1.21.7)(tsx@4.21.0)(yaml@2.8.3))': + '@vitejs/plugin-react@5.2.0(vite@7.3.1(@types/node@25.5.0)(jiti@1.21.7)(tsx@4.21.0)(yaml@2.9.0))': dependencies: '@babel/core': 7.29.0 '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.29.0) @@ -9903,7 +9971,7 @@ snapshots: '@rolldown/pluginutils': 1.0.0-rc.3 '@types/babel__core': 7.20.5 react-refresh: 0.18.0 - vite: 7.3.1(@types/node@25.5.0)(jiti@1.21.7)(tsx@4.21.0)(yaml@2.8.3) + vite: 7.3.1(@types/node@25.5.0)(jiti@1.21.7)(tsx@4.21.0)(yaml@2.9.0) transitivePeerDependencies: - supports-color @@ -9916,13 +9984,13 @@ snapshots: chai: 6.2.2 tinyrainbow: 3.1.0 - '@vitest/mocker@4.1.1(vite@7.3.1(@types/node@25.5.0)(jiti@1.21.7)(tsx@4.21.0)(yaml@2.8.3))': + '@vitest/mocker@4.1.1(vite@7.3.1(@types/node@25.5.0)(jiti@1.21.7)(tsx@4.21.0)(yaml@2.9.0))': dependencies: '@vitest/spy': 4.1.1 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 7.3.1(@types/node@25.5.0)(jiti@1.21.7)(tsx@4.21.0)(yaml@2.8.3) + vite: 7.3.1(@types/node@25.5.0)(jiti@1.21.7)(tsx@4.21.0)(yaml@2.9.0) '@vitest/pretty-format@4.1.1': dependencies: @@ -9953,6 +10021,20 @@ snapshots: '@eshaz/web-worker': 1.2.2 simple-yenc: 1.0.4 + '@wasm-audio-decoders/flac@0.2.10': + dependencies: + '@wasm-audio-decoders/common': 9.0.7 + codec-parser: 2.5.0 + + '@wasm-audio-decoders/ogg-vorbis@0.1.20': + dependencies: + '@wasm-audio-decoders/common': 9.0.7 + codec-parser: 2.5.0 + + '@wasm-audio-decoders/opus-ml@0.0.2': + dependencies: + '@wasm-audio-decoders/common': 9.0.7 + '@wecom/aibot-node-sdk@1.0.6': dependencies: axios: 1.13.6(debug@4.4.3) @@ -9963,25 +10045,27 @@ snapshots: - debug - utf-8-validate - '@wecom/wecom-openclaw-plugin@2026.4.2201': + '@wecom/wecom-openclaw-plugin@2026.5.14(openclaw@2026.5.12(encoding@0.1.13))': dependencies: '@wecom/aibot-node-sdk': 1.0.6 fast-xml-parser: 5.5.10 file-type: 21.3.4 undici: 7.24.6 zod: 4.3.6 + optionalDependencies: + openclaw: 2026.5.12(encoding@0.1.13) transitivePeerDependencies: - bufferutil - debug - supports-color - utf-8-validate - '@whiskeysockets/baileys@7.0.0-rc.9(jimp@1.6.1)(sharp@0.34.5)': + '@whiskeysockets/baileys@7.0.0-rc.9(audio-decode@2.2.3)(jimp@1.6.1)(sharp@0.34.5)': dependencies: '@cacheable/node-cache': 1.7.6 '@hapi/boom': 9.1.4 async-mutex: 0.5.0 - libsignal: '@whiskeysockets/libsignal-node@https://codeload.github.com/whiskeysockets/libsignal-node/tar.gz/1c30d7d7e76a3b0aa120b04dc6a26f5a12dccf67' + libsignal: https://codeload.github.com/whiskeysockets/libsignal-node/tar.gz/bcea72df9ec34d9d9140ab30619cf479c7c144c7 lru-cache: 11.2.7 music-metadata: 11.12.3 p-queue: 9.1.0 @@ -9990,17 +10074,13 @@ snapshots: sharp: 0.34.5 ws: 8.20.0 optionalDependencies: + audio-decode: 2.2.3 jimp: 1.6.1 transitivePeerDependencies: - bufferutil - supports-color - utf-8-validate - '@whiskeysockets/libsignal-node@https://codeload.github.com/whiskeysockets/libsignal-node/tar.gz/1c30d7d7e76a3b0aa120b04dc6a26f5a12dccf67': - dependencies: - curve25519-js: 0.0.4 - protobufjs: 6.8.8 - '@xmldom/xmldom@0.8.11': {} abbrev@3.0.1: {} @@ -10042,6 +10122,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 @@ -10060,6 +10144,13 @@ snapshots: json-schema-traverse: 1.0.0 require-from-string: 2.0.2 + ajv@8.20.0: + dependencies: + fast-deep-equal: 3.1.3 + fast-uri: 3.1.0 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + ansi-regex@5.0.1: {} ansi-regex@6.2.2: {} @@ -10072,8 +10163,7 @@ snapshots: ansi-styles@6.2.3: {} - any-base@1.1.0: - optional: true + any-base@1.1.0: {} any-promise@1.3.0: {} @@ -10155,6 +10245,13 @@ snapshots: '@ark/util': 0.56.0 arkregex: 0.0.5 + asn1.js@5.4.1: + dependencies: + bn.js: 4.12.3 + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + safer-buffer: 2.1.2 + assert-plus@1.0.0: optional: true @@ -10186,6 +10283,21 @@ snapshots: stubborn-fs: 2.0.0 when-exit: 2.1.5 + audio-buffer@5.0.0: {} + + audio-decode@2.2.3: + dependencies: + '@wasm-audio-decoders/flac': 0.2.10 + '@wasm-audio-decoders/ogg-vorbis': 0.1.20 + audio-buffer: 5.0.0 + audio-type: 2.4.1 + mpg123-decoder: 1.0.3 + node-wav: 0.0.2 + ogg-opus-decoder: 1.7.3 + qoa-format: 1.0.1 + + audio-type@2.4.1: {} + autoprefixer@10.4.27(postcss@8.5.8): dependencies: browserslist: 4.28.1 @@ -10195,8 +10307,7 @@ snapshots: postcss: 8.5.8 postcss-value-parser: 4.2.0 - await-to-js@3.0.0: - optional: true + await-to-js@3.0.0: {} axios@1.13.6(debug@4.4.3): dependencies: @@ -10210,6 +10321,28 @@ snapshots: bail@2.0.2: {} + baileys@7.0.0-rc11(audio-decode@2.2.3)(jimp@1.6.1)(sharp@0.34.5): + dependencies: + '@cacheable/node-cache': 1.7.6 + '@hapi/boom': 9.1.4 + async-mutex: 0.5.0 + libsignal: 6.0.0 + lru-cache: 11.2.7 + music-metadata: 11.12.3 + p-queue: 9.1.0 + pino: 9.14.0 + protobufjs: 7.5.8 + sharp: 0.34.5 + whatsapp-rust-bridge: 0.5.4 + ws: 8.20.0 + optionalDependencies: + audio-decode: 2.2.3 + jimp: 1.6.1 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + balanced-match@1.0.2: {} balanced-match@4.0.4: {} @@ -10268,8 +10401,9 @@ snapshots: bluebird@3.4.7: {} - bmp-ts@1.0.9: - optional: true + bmp-ts@1.0.9: {} + + bn.js@4.12.3: {} body-parser@2.2.2: dependencies: @@ -10537,6 +10671,8 @@ snapshots: clsx@2.1.1: {} + codec-parser@2.5.0: {} + codepage@1.15.0: {} color-convert@2.0.1: @@ -10696,14 +10832,12 @@ snapshots: es-define-property: 1.0.1 es-errors: 1.3.0 gopd: 1.2.0 - optional: true define-properties@1.2.1: dependencies: define-data-property: 1.1.4 has-property-descriptors: 1.0.2 object-keys: 1.1.1 - optional: true degenerator@5.0.1: dependencies: @@ -11128,8 +11262,7 @@ snapshots: dependencies: eventsource-parser: 3.0.6 - exif-parser@0.1.12: - optional: true + exif-parser@0.1.12: {} expect-type@1.3.0: {} @@ -11206,31 +11339,47 @@ snapshots: fast-string-truncated-width@1.2.1: {} + fast-string-truncated-width@3.0.3: {} + fast-string-width@1.1.0: dependencies: fast-string-truncated-width: 1.2.1 + fast-string-width@3.0.2: + dependencies: + fast-string-truncated-width: 3.0.3 + fast-uri@3.1.0: {} fast-wrap-ansi@0.1.6: dependencies: fast-string-width: 1.1.0 + fast-wrap-ansi@0.2.0: + dependencies: + fast-string-width: 3.0.2 + fast-xml-builder@1.1.4: dependencies: path-expression-matcher: 1.2.1 + fast-xml-builder@1.2.0: + dependencies: + path-expression-matcher: 1.5.0 + xml-naming: 0.1.0 + fast-xml-parser@5.5.10: dependencies: fast-xml-builder: 1.1.4 path-expression-matcher: 1.2.1 strnum: 2.2.2 - fast-xml-parser@5.5.8: + fast-xml-parser@5.7.3: dependencies: - fast-xml-builder: 1.1.4 - path-expression-matcher: 1.2.1 - strnum: 2.2.2 + '@nodable/entities': 2.1.0 + fast-xml-builder: 1.2.0 + path-expression-matcher: 1.5.0 + strnum: 2.3.0 fastq@1.20.1: dependencies: @@ -11402,17 +11551,6 @@ snapshots: function-bind@1.1.2: {} - gaxios@6.7.1(encoding@0.1.13): - dependencies: - extend: 3.0.2 - https-proxy-agent: 7.0.6 - is-stream: 2.0.1 - node-fetch: 2.7.0(encoding@0.1.13) - uuid: 9.0.1 - transitivePeerDependencies: - - encoding - - supports-color - gaxios@7.1.4: dependencies: extend: 3.0.2 @@ -11421,15 +11559,6 @@ snapshots: transitivePeerDependencies: - supports-color - gcp-metadata@6.1.1(encoding@0.1.13): - dependencies: - gaxios: 6.7.1(encoding@0.1.13) - google-logging-utils: 0.0.2 - json-bigint: 1.0.0 - transitivePeerDependencies: - - encoding - - supports-color - gcp-metadata@8.1.2: dependencies: gaxios: 7.1.4 @@ -11492,7 +11621,6 @@ snapshots: dependencies: image-q: 4.0.0 omggif: 1.0.10 - optional: true glob-parent@5.1.2: dependencies: @@ -11513,7 +11641,7 @@ snapshots: glob@13.0.6: dependencies: - minimatch: 10.2.4 + minimatch: 10.2.5 minipass: 7.1.3 path-scurry: 2.0.2 @@ -11536,13 +11664,19 @@ snapshots: serialize-error: 7.0.1 optional: true + global-agent@4.1.3: + dependencies: + globalthis: 1.0.4 + matcher: 4.0.0 + semver: 7.7.4 + serialize-error: 8.1.0 + globals@17.4.0: {} globalthis@1.0.4: dependencies: define-properties: 1.2.1 gopd: 1.2.0 - optional: true google-auth-library@10.6.2: dependencies: @@ -11555,20 +11689,6 @@ snapshots: transitivePeerDependencies: - supports-color - google-auth-library@9.15.1(encoding@0.1.13): - dependencies: - base64-js: 1.5.1 - ecdsa-sig-formatter: 1.0.11 - gaxios: 6.7.1(encoding@0.1.13) - gcp-metadata: 6.1.1(encoding@0.1.13) - gtoken: 7.1.0(encoding@0.1.13) - jws: 4.0.1 - transitivePeerDependencies: - - encoding - - supports-color - - google-logging-utils@0.0.2: {} - google-logging-utils@1.1.3: {} gopd@1.2.0: {} @@ -11599,20 +11719,11 @@ snapshots: - encoding - supports-color - gtoken@7.1.0(encoding@0.1.13): - dependencies: - gaxios: 6.7.1(encoding@0.1.13) - jws: 4.0.1 - transitivePeerDependencies: - - encoding - - supports-color - has-flag@4.0.0: {} has-property-descriptors@1.0.2: dependencies: es-define-property: 1.0.1 - optional: true has-symbols@1.1.0: {} @@ -11780,6 +11891,8 @@ snapshots: quick-lru: 5.1.1 resolve-alpn: 1.2.1 + http_ece@1.2.0: {} + https-proxy-agent@7.0.6: dependencies: agent-base: 7.1.4 @@ -11823,7 +11936,6 @@ snapshots: image-q@4.0.0: dependencies: '@types/node': 16.9.1 - optional: true image-size@2.0.2: {} @@ -11846,7 +11958,7 @@ snapshots: ipaddr.js@1.9.1: {} - ipaddr.js@2.3.0: {} + ipaddr.js@2.4.0: {} is-alphabetical@2.0.1: {} @@ -11889,8 +12001,6 @@ snapshots: is-promise@4.0.0: {} - is-stream@2.0.1: {} - is-unicode-supported@0.1.0: {} is-unicode-supported@2.1.0: {} @@ -11946,16 +12056,16 @@ snapshots: '@jimp/utils': 1.6.1 transitivePeerDependencies: - supports-color - optional: true jiti@1.21.7: {} jiti@2.6.1: {} + jiti@2.7.0: {} + jose@6.2.2: {} - jpeg-js@0.4.4: - optional: true + jpeg-js@0.4.4: {} js-tokens@4.0.0: {} @@ -12059,6 +12169,8 @@ snapshots: koffi@2.15.2: optional: true + kysely@0.29.0: {} + lazy-val@1.0.5: {} levn@0.4.1: @@ -12066,6 +12178,16 @@ snapshots: prelude-ls: 1.2.1 type-check: 0.4.0 + libsignal@6.0.0: + dependencies: + curve25519-js: 0.0.4 + protobufjs: 7.5.8 + + libsignal@https://codeload.github.com/whiskeysockets/libsignal-node/tar.gz/bcea72df9ec34d9d9140ab30619cf479c7c144c7: + dependencies: + curve25519-js: 0.0.4 + protobufjs: 7.5.8 + lie@3.3.0: dependencies: immediate: 3.0.6 @@ -12116,8 +12238,6 @@ snapshots: is-unicode-supported: 2.1.0 yoctocolors: 2.1.2 - long@4.0.0: {} - long@5.3.2: {} longest-streak@3.1.0: {} @@ -12203,6 +12323,10 @@ snapshots: escape-string-regexp: 4.0.0 optional: true + matcher@4.0.0: + dependencies: + escape-string-regexp: 4.0.0 + math-intrinsics@1.1.0: {} mdast-util-find-and-replace@3.0.2: @@ -12618,8 +12742,7 @@ snapshots: mime@2.6.0: {} - mime@3.0.0: - optional: true + mime@3.0.0: {} mime@4.1.0: {} @@ -12633,10 +12756,16 @@ snapshots: min-indent@1.0.1: {} + minimalistic-assert@1.0.1: {} + minimatch@10.2.4: dependencies: brace-expansion: 5.0.5 + minimatch@10.2.5: + dependencies: + brace-expansion: 5.0.5 + minimatch@3.1.5: dependencies: brace-expansion: 1.1.12 @@ -12751,12 +12880,24 @@ snapshots: node-addon-api@1.7.2: optional: true + node-addon-api@8.7.0: {} + node-api-version@0.2.1: dependencies: semver: 7.7.4 node-domexception@1.0.0: {} + node-edge-tts@1.2.10: + dependencies: + https-proxy-agent: 7.0.6 + ws: 8.20.0 + yargs: 17.7.2 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + node-fetch@2.7.0(encoding@0.1.13): dependencies: whatwg-url: 5.0.0 @@ -12769,6 +12910,8 @@ snapshots: fetch-blob: 3.2.0 formdata-polyfill: 4.0.10 + node-gyp-build@4.8.4: {} + node-gyp@11.5.0: dependencies: env-paths: 2.2.1 @@ -12788,6 +12931,8 @@ snapshots: node-releases@2.0.36: {} + node-wav@0.0.2: {} + nopt@8.1.0: dependencies: abbrev: 3.0.1 @@ -12806,13 +12951,18 @@ snapshots: object-inspect@1.13.4: {} - object-keys@1.1.1: - optional: true + object-keys@1.1.1: {} obug@2.1.1: {} - omggif@1.0.10: - optional: true + ogg-opus-decoder@1.7.3: + dependencies: + '@wasm-audio-decoders/common': 9.0.7 + '@wasm-audio-decoders/opus-ml': 0.0.2 + codec-parser: 2.5.0 + opus-decoder: 0.7.11 + + omggif@1.0.10: {} on-exit-leak-free@2.1.2: {} @@ -12832,61 +12982,71 @@ snapshots: dependencies: mimic-function: 5.0.1 - openai@6.26.0(ws@8.20.0)(zod@4.3.6): + openai@6.26.0(ws@8.20.0)(zod@4.4.3): optionalDependencies: ws: 8.20.0 - zod: 4.3.6 + zod: 4.4.3 - openai@6.34.0(ws@8.20.0)(zod@4.3.6): + openai@6.37.0(ws@8.20.0)(zod@4.4.3): optionalDependencies: ws: 8.20.0 - zod: 4.3.6 + zod: 4.4.3 - openclaw@2026.4.23(@napi-rs/canvas@0.1.100)(encoding@0.1.13): + openclaw@2026.5.12(encoding@0.1.13): dependencies: - '@agentclientprotocol/sdk': 0.19.0(zod@4.3.6) - '@anthropic-ai/vertex-sdk': 0.16.0(encoding@0.1.13)(zod@4.3.6) - '@clack/prompts': 1.2.0 - '@homebridge/ciao': 1.3.7 + '@agentclientprotocol/sdk': 0.21.0(zod@4.4.3) + '@clack/core': 1.3.0 + '@clack/prompts': 1.3.0 + '@earendil-works/pi-agent-core': 0.74.0(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(ws@8.20.0)(zod@4.4.3) + '@earendil-works/pi-ai': 0.74.0(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(ws@8.20.0)(zod@4.4.3) + '@earendil-works/pi-coding-agent': 0.74.0(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(ws@8.20.0)(zod@4.4.3) + '@earendil-works/pi-tui': 0.74.0 + '@google/genai': 2.0.1(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3)) + '@grammyjs/runner': 2.0.3(grammy@1.42.0(encoding@0.1.13)) + '@grammyjs/transformer-throttler': 1.2.1(grammy@1.42.0(encoding@0.1.13)) + '@homebridge/ciao': 1.3.8 '@lydell/node-pty': 1.2.0-beta.12 - '@mariozechner/pi-agent-core': 0.70.0(@modelcontextprotocol/sdk@1.29.0(zod@4.3.6))(ws@8.20.0)(zod@4.3.6) - '@mariozechner/pi-ai': 0.70.0(@modelcontextprotocol/sdk@1.29.0(zod@4.3.6))(ws@8.20.0)(zod@4.3.6) - '@mariozechner/pi-coding-agent': 0.70.0(@modelcontextprotocol/sdk@1.29.0(zod@4.3.6))(ws@8.20.0)(zod@4.3.6) - '@mariozechner/pi-tui': 0.70.0 - '@modelcontextprotocol/sdk': 1.29.0(zod@4.3.6) + '@modelcontextprotocol/sdk': 1.29.0(zod@4.4.3) '@mozilla/readability': 0.6.0 - '@napi-rs/canvas': 0.1.100 - '@vincentkoc/qrcode-tui': 0.2.1 - ajv: 8.18.0 + '@openclaw/fs-safe': 0.2.4 + ajv: 8.20.0 chalk: 5.6.2 chokidar: 5.0.0 - cli-highlight: 2.1.11 commander: 14.0.3 croner: 10.0.1 dotenv: 17.4.2 express: 5.2.1 file-type: 22.0.1 + global-agent: 4.1.3 + grammy: 1.42.0(encoding@0.1.13) https-proxy-agent: 9.0.0 - ipaddr.js: 2.3.0 - jiti: 2.6.1 + ipaddr.js: 2.4.0 + jiti: 2.7.0 json5: 2.2.3 jszip: 3.10.1 + kysely: 0.29.0 linkedom: 0.18.12 markdown-it: 14.1.1 - openai: 6.34.0(ws@8.20.0)(zod@4.3.6) - osc-progress: 0.3.0 + minimatch: 10.2.5 + node-edge-tts: 1.2.10 + openai: 6.37.0(ws@8.20.0)(zod@4.4.3) pdfjs-dist: 5.7.284 + playwright-core: 1.60.0 proxy-agent: 8.0.1 - semver: 7.7.4 - sharp: 0.34.5 - sqlite-vec: 0.1.9 - tar: 7.5.13 + qrcode: 1.5.4 + tar: 7.5.15 + tokenjuice: 0.7.0 + tree-sitter-bash: 0.25.1 tslog: 4.10.2 - typebox: 1.1.28 - undici: 8.1.0 + typebox: 1.1.38 + undici: 8.2.0 + web-push: 3.6.7 + web-tree-sitter: 0.26.8 ws: 8.20.0 - yaml: 2.8.3 - zod: 4.3.6 + yaml: 2.9.0 + zod: 4.4.3 + optionalDependencies: + sqlite-vec: 0.1.9 transitivePeerDependencies: - '@cfworker/json-schema' - aws-crt @@ -12894,6 +13054,7 @@ snapshots: - canvas - encoding - supports-color + - tree-sitter - utf-8-validate option@0.2.4: {} @@ -12907,6 +13068,10 @@ snapshots: type-check: 0.4.0 word-wrap: 1.2.5 + opus-decoder@0.7.11: + dependencies: + '@wasm-audio-decoders/common': 9.0.7 + opusscript@0.1.1: {} ora@5.4.1: @@ -12932,8 +13097,6 @@ snapshots: stdin-discarder: 0.3.1 string-width: 8.2.0 - osc-progress@0.3.0: {} - p-cancelable@2.1.1: {} p-limit@2.3.0: @@ -13013,17 +13176,14 @@ snapshots: pako@1.0.11: {} - parse-bmfont-ascii@1.0.6: - optional: true + parse-bmfont-ascii@1.0.6: {} - parse-bmfont-binary@1.0.6: - optional: true + parse-bmfont-binary@1.0.6: {} parse-bmfont-xml@1.1.6: dependencies: xml-parse-from-string: 1.0.1 xml2js: 0.5.0 - optional: true parse-entities@4.0.2: dependencies: @@ -13059,6 +13219,8 @@ snapshots: path-expression-matcher@1.2.1: {} + path-expression-matcher@1.5.0: {} + path-is-absolute@1.0.1: {} path-key@3.1.1: {} @@ -13129,7 +13291,6 @@ snapshots: pixelmatch@5.3.0: dependencies: pngjs: 6.0.0 - optional: true pkce-challenge@5.0.1: {} @@ -13137,6 +13298,8 @@ snapshots: playwright-core@1.59.1: {} + playwright-core@1.60.0: {} + playwright@1.59.0: dependencies: playwright-core: 1.59.0 @@ -13153,11 +13316,9 @@ snapshots: pngjs@5.0.0: {} - pngjs@6.0.0: - optional: true + pngjs@6.0.0: {} - pngjs@7.0.0: - optional: true + pngjs@7.0.0: {} postcss-import@15.1.0(postcss@8.5.8): dependencies: @@ -13171,14 +13332,14 @@ snapshots: camelcase-css: 2.0.1 postcss: 8.5.8 - postcss-load-config@6.0.1(jiti@1.21.7)(postcss@8.5.8)(tsx@4.21.0)(yaml@2.8.3): + postcss-load-config@6.0.1(jiti@1.21.7)(postcss@8.5.8)(tsx@4.21.0)(yaml@2.9.0): dependencies: lilconfig: 3.1.3 optionalDependencies: jiti: 1.21.7 postcss: 8.5.8 tsx: 4.21.0 - yaml: 2.8.3 + yaml: 2.9.0 postcss-nested@6.2.0(postcss@8.5.8): dependencies: @@ -13240,22 +13401,6 @@ snapshots: property-information@7.1.0: {} - protobufjs@6.8.8: - dependencies: - '@protobufjs/aspromise': 1.1.2 - '@protobufjs/base64': 1.1.2 - '@protobufjs/codegen': 2.0.4 - '@protobufjs/eventemitter': 1.1.0 - '@protobufjs/fetch': 1.1.0 - '@protobufjs/float': 1.0.2 - '@protobufjs/inquire': 1.1.0 - '@protobufjs/path': 1.1.2 - '@protobufjs/pool': 1.1.0 - '@protobufjs/utf8': 1.1.0 - '@types/long': 4.0.2 - '@types/node': 10.17.60 - long: 4.0.0 - protobufjs@7.5.4: dependencies: '@protobufjs/aspromise': 1.1.2 @@ -13271,6 +13416,21 @@ snapshots: '@types/node': 25.6.0 long: 5.3.2 + protobufjs@7.5.8: + dependencies: + '@protobufjs/aspromise': 1.1.2 + '@protobufjs/base64': 1.1.2 + '@protobufjs/codegen': 2.0.5 + '@protobufjs/eventemitter': 1.1.0 + '@protobufjs/fetch': 1.1.0 + '@protobufjs/float': 1.0.2 + '@protobufjs/inquire': 1.1.1 + '@protobufjs/path': 1.1.2 + '@protobufjs/pool': 1.1.0 + '@protobufjs/utf8': 1.1.1 + '@types/node': 25.6.0 + long: 5.3.2 + proxy-addr@2.0.7: dependencies: forwarded: 0.2.0 @@ -13319,6 +13479,10 @@ snapshots: dependencies: hookified: 2.1.0 + qoa-format@1.0.1: + dependencies: + '@thi.ng/bitstream': 2.4.49 + qrcode-terminal@0.12.0: {} qrcode@1.5.4: @@ -13679,6 +13843,10 @@ snapshots: type-fest: 0.13.1 optional: true + serialize-error@8.1.0: + dependencies: + type-fest: 0.20.2 + serve-static@2.2.1: dependencies: encodeurl: 2.0.0 @@ -13773,8 +13941,7 @@ snapshots: dependencies: semver: 7.7.4 - simple-xml-to-json@1.2.7: - optional: true + simple-xml-to-json@1.2.7: {} simple-yenc@1.0.4: {} @@ -13868,6 +14035,7 @@ snapshots: sqlite-vec-linux-arm64: 0.1.9 sqlite-vec-linux-x64: 0.1.9 sqlite-vec-windows-x64: 0.1.9 + optional: true ssf@0.11.2: dependencies: @@ -13885,8 +14053,6 @@ snapshots: statuses@2.0.2: {} - std-env@3.10.0: {} - std-env@4.0.0: {} stdin-discarder@0.3.1: {} @@ -13944,6 +14110,8 @@ snapshots: strnum@2.2.2: {} + strnum@2.3.0: {} + strtok3@10.3.5: dependencies: '@tokenizer/token': 0.3.0 @@ -13990,11 +14158,11 @@ snapshots: tailwind-merge@3.5.0: {} - tailwindcss-animate@1.0.7(tailwindcss@3.4.19(tsx@4.21.0)(yaml@2.8.3)): + tailwindcss-animate@1.0.7(tailwindcss@3.4.19(tsx@4.21.0)(yaml@2.9.0)): dependencies: - tailwindcss: 3.4.19(tsx@4.21.0)(yaml@2.8.3) + tailwindcss: 3.4.19(tsx@4.21.0)(yaml@2.9.0) - tailwindcss@3.4.19(tsx@4.21.0)(yaml@2.8.3): + tailwindcss@3.4.19(tsx@4.21.0)(yaml@2.9.0): dependencies: '@alloc/quick-lru': 5.2.0 arg: 5.0.2 @@ -14013,7 +14181,7 @@ snapshots: postcss: 8.5.8 postcss-import: 15.1.0(postcss@8.5.8) postcss-js: 4.1.0(postcss@8.5.8) - postcss-load-config: 6.0.1(jiti@1.21.7)(postcss@8.5.8)(tsx@4.21.0)(yaml@2.8.3) + postcss-load-config: 6.0.1(jiti@1.21.7)(postcss@8.5.8)(tsx@4.21.0)(yaml@2.9.0) postcss-nested: 6.2.0(postcss@8.5.8) postcss-selector-parser: 6.1.2 resolve: 1.22.11 @@ -14050,6 +14218,14 @@ snapshots: minizlib: 3.1.0 yallist: 5.0.0 + tar@7.5.15: + dependencies: + '@isaacs/fs-minipass': 4.0.1 + chownr: 3.0.0 + minipass: 7.1.3 + minizlib: 3.1.0 + yallist: 5.0.0 + teex@1.0.1: dependencies: streamx: 2.25.0 @@ -14093,8 +14269,7 @@ snapshots: tinybench@2.9.0: {} - tinycolor2@1.6.0: - optional: true + tinycolor2@1.6.0: {} tinyexec@1.0.4: {} @@ -14129,6 +14304,8 @@ snapshots: '@tokenizer/token': 0.3.0 ieee754: 1.2.1 + tokenjuice@0.7.0: {} + tough-cookie@6.0.1: dependencies: tldts: 7.0.27 @@ -14139,6 +14316,11 @@ snapshots: dependencies: punycode: 2.3.1 + tree-sitter-bash@0.25.1: + dependencies: + node-addon-api: 8.7.0 + node-gyp-build: 4.8.4 + trim-lines@3.0.1: {} trough@2.2.0: {} @@ -14173,6 +14355,8 @@ snapshots: type-fest@0.13.1: optional: true + type-fest@0.20.2: {} + type-fest@5.5.0: dependencies: tagged-tag: 1.0.0 @@ -14183,9 +14367,7 @@ snapshots: media-typer: 1.1.0 mime-types: 3.0.2 - typebox@1.1.28: {} - - typebox@1.1.33: {} + typebox@1.1.38: {} typescript@5.9.3: {} @@ -14203,10 +14385,14 @@ snapshots: undici-types@7.19.2: {} + undici-types@8.3.0: {} + undici@7.24.6: {} undici@8.1.0: {} + undici@8.2.0: {} + unified@11.0.5: dependencies: '@types/unist': 3.0.3 @@ -14302,14 +14488,11 @@ snapshots: utif2@4.1.0: dependencies: pako: 1.0.11 - optional: true util-deprecate@1.0.2: {} uuid@14.0.0: {} - uuid@9.0.1: {} - vary@1.1.2: {} verror@1.10.1: @@ -14340,7 +14523,7 @@ snapshots: optionalDependencies: vite-plugin-electron-renderer: 0.14.6 - vite@7.3.1(@types/node@25.5.0)(jiti@1.21.7)(tsx@4.21.0)(yaml@2.8.3): + vite@7.3.1(@types/node@25.5.0)(jiti@1.21.7)(tsx@4.21.0)(yaml@2.9.0): dependencies: esbuild: 0.27.4 fdir: 6.5.0(picomatch@4.0.4) @@ -14353,12 +14536,12 @@ snapshots: fsevents: 2.3.3 jiti: 1.21.7 tsx: 4.21.0 - yaml: 2.8.3 + yaml: 2.9.0 - vitest@4.1.1(@types/node@25.5.0)(jsdom@28.1.0(@noble/hashes@2.0.1))(vite@7.3.1(@types/node@25.5.0)(jiti@1.21.7)(tsx@4.21.0)(yaml@2.8.3)): + vitest@4.1.1(@types/node@25.5.0)(jsdom@28.1.0(@noble/hashes@2.0.1))(vite@7.3.1(@types/node@25.5.0)(jiti@1.21.7)(tsx@4.21.0)(yaml@2.9.0)): dependencies: '@vitest/expect': 4.1.1 - '@vitest/mocker': 4.1.1(vite@7.3.1(@types/node@25.5.0)(jiti@1.21.7)(tsx@4.21.0)(yaml@2.8.3)) + '@vitest/mocker': 4.1.1(vite@7.3.1(@types/node@25.5.0)(jiti@1.21.7)(tsx@4.21.0)(yaml@2.9.0)) '@vitest/pretty-format': 4.1.1 '@vitest/runner': 4.1.1 '@vitest/snapshot': 4.1.1 @@ -14375,7 +14558,7 @@ snapshots: tinyexec: 1.0.4 tinyglobby: 0.2.15 tinyrainbow: 3.1.0 - vite: 7.3.1(@types/node@25.5.0)(jiti@1.21.7)(tsx@4.21.0)(yaml@2.8.3) + vite: 7.3.1(@types/node@25.5.0)(jiti@1.21.7)(tsx@4.21.0)(yaml@2.9.0) why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 25.5.0 @@ -14395,12 +14578,26 @@ snapshots: web-namespaces@2.0.1: {} + web-push@3.6.7: + dependencies: + asn1.js: 5.4.1 + http_ece: 1.2.0 + https-proxy-agent: 7.0.6 + jws: 4.0.1 + minimist: 1.2.8 + transitivePeerDependencies: + - supports-color + web-streams-polyfill@3.3.3: {} + web-tree-sitter@0.26.8: {} + webidl-conversions@3.0.1: {} webidl-conversions@8.0.1: {} + whatsapp-rust-bridge@0.5.4: {} + whatwg-mimetype@5.0.0: {} whatwg-url@16.0.1(@noble/hashes@2.0.1): @@ -14475,19 +14672,18 @@ snapshots: xml-name-validator@5.0.0: {} - xml-parse-from-string@1.0.1: - optional: true + xml-naming@0.1.0: {} + + xml-parse-from-string@1.0.1: {} xml2js@0.5.0: dependencies: sax: 1.6.0 xmlbuilder: 11.0.1 - optional: true xmlbuilder@10.1.1: {} - xmlbuilder@11.0.1: - optional: true + xmlbuilder@11.0.1: {} xmlbuilder@15.1.1: {} @@ -14503,7 +14699,7 @@ snapshots: yallist@5.0.0: {} - yaml@2.8.3: {} + yaml@2.9.0: {} yargs-parser@18.1.3: dependencies: @@ -14557,19 +14753,20 @@ snapshots: yoctocolors@2.1.2: {} - zod-to-json-schema@3.25.1(zod@4.3.6): + zod-to-json-schema@3.25.1(zod@4.4.3): dependencies: - zod: 4.3.6 + zod: 4.4.3 zod-validation-error@4.0.2(zod@4.3.6): dependencies: zod: 4.3.6 - zod@3.25.76: - optional: true + zod@3.25.76: {} zod@4.3.6: {} + zod@4.4.3: {} + zustand@5.0.12(@types/react@19.2.14)(react@19.2.4)(use-sync-external-store@1.6.0(react@19.2.4)): optionalDependencies: '@types/react': 19.2.14 diff --git a/scripts/after-pack.cjs b/scripts/after-pack.cjs index f843ed6..6373d58 100644 --- a/scripts/after-pack.cjs +++ b/scripts/after-pack.cjs @@ -606,6 +606,9 @@ exports.default = async function afterPack(context) { { npmName: '@soimy/dingtalk', pluginId: 'dingtalk' }, { npmName: '@wecom/wecom-openclaw-plugin', pluginId: 'wecom' }, { npmName: '@larksuite/openclaw-lark', pluginId: 'feishu-openclaw-plugin' }, + { npmName: '@openclaw/discord', pluginId: 'discord' }, + { npmName: '@openclaw/qqbot', pluginId: 'qqbot' }, + { npmName: '@openclaw/whatsapp', pluginId: 'whatsapp' }, { npmName: '@tencent-weixin/openclaw-weixin', pluginId: 'openclaw-weixin' }, ]; diff --git a/scripts/bundle-openclaw-plugins.mjs b/scripts/bundle-openclaw-plugins.mjs index 1d34992..9388ade 100644 --- a/scripts/bundle-openclaw-plugins.mjs +++ b/scripts/bundle-openclaw-plugins.mjs @@ -7,6 +7,9 @@ * Current plugins: * - @soimy/dingtalk -> build/openclaw-plugins/dingtalk * - @wecom/wecom-openclaw-plugin -> build/openclaw-plugins/wecom + * - @openclaw/discord -> build/openclaw-plugins/discord + * - @openclaw/qqbot -> build/openclaw-plugins/qqbot + * - @openclaw/whatsapp -> build/openclaw-plugins/whatsapp * - @tencent-weixin/openclaw-weixin -> build/openclaw-plugins/openclaw-weixin * * The output plugin directory contains: @@ -39,6 +42,9 @@ const PLUGINS = [ { npmName: '@soimy/dingtalk', pluginId: 'dingtalk' }, { npmName: '@wecom/wecom-openclaw-plugin', pluginId: 'wecom' }, { npmName: '@larksuite/openclaw-lark', pluginId: 'feishu-openclaw-plugin' }, + { npmName: '@openclaw/discord', pluginId: 'discord' }, + { npmName: '@openclaw/qqbot', pluginId: 'qqbot' }, + { npmName: '@openclaw/whatsapp', pluginId: 'whatsapp' }, { npmName: '@tencent-weixin/openclaw-weixin', pluginId: 'openclaw-weixin' }, ]; diff --git a/src/components/channels/ChannelConfigModal.tsx b/src/components/channels/ChannelConfigModal.tsx index e435c22..9b663ac 100644 --- a/src/components/channels/ChannelConfigModal.tsx +++ b/src/components/channels/ChannelConfigModal.tsx @@ -81,7 +81,7 @@ export function ChannelConfigModal({ onChannelSaved, }: ChannelConfigModalProps) { const { t } = useTranslation('channels'); - const { channels, addChannel, fetchChannels } = useChannelsStore(); + const { fetchChannels } = useChannelsStore(); const [selectedType, setSelectedType] = useState(initialSelectedType); const [configValues, setConfigValues] = useState>({}); const [channelName, setChannelName] = useState(''); @@ -192,23 +192,9 @@ export function ChannelConfigModal({ }, [selectedType, loadingConfig, showChannelName]); const finishSave = useCallback(async (channelType: ChannelType) => { - const displayName = showChannelName && channelName.trim() - ? channelName.trim() - : CHANNEL_NAMES[channelType]; - const existingChannel = channels.find((channel) => channel.type === channelType); - - if (!existingChannel) { - await addChannel({ - type: channelType, - name: displayName, - token: meta?.configFields[0]?.key ? configValues[meta.configFields[0].key] : undefined, - }); - } else { - await fetchChannels(); - } - + await fetchChannels(); await onChannelSaved?.(channelType); - }, [addChannel, channelName, channels, configValues, fetchChannels, meta?.configFields, onChannelSaved, showChannelName]); + }, [fetchChannels, onChannelSaved]); const finishSaveRef = useRef(finishSave); const onCloseRef = useRef(onClose); diff --git a/tests/unit/channel-config.test.ts b/tests/unit/channel-config.test.ts index 4a868d7..cdcb60e 100644 --- a/tests/unit/channel-config.test.ts +++ b/tests/unit/channel-config.test.ts @@ -188,21 +188,24 @@ describe('WeCom plugin configuration', () => { expect(plugins.entries['feishu-openclaw-plugin']).toBeUndefined(); }); - it('saves whatsapp as a built-in channel instead of a plugin', async () => { + it('saves whatsapp as an external plugin-backed channel', async () => { const { saveChannelConfig } = await import('@electron/utils/channel-config'); await saveChannelConfig('whatsapp', { enabled: true }, 'default'); const config = await readOpenClawJson(); const channels = config.channels as Record }>; + const plugins = config.plugins as { allow: string[]; entries: Record }> }; expect(channels.whatsapp.enabled).toBe(true); expect(channels.whatsapp.defaultAccount).toBe('default'); expect(channels.whatsapp.accounts?.default?.enabled).toBe(true); - expect(config.plugins).toBeUndefined(); + expect(plugins.allow).toContain('whatsapp'); + expect(plugins.entries.whatsapp.enabled).toBe(true); + expect(plugins.entries.whatsapp.accounts?.default?.enabled).toBe(true); }); - it('cleans up stale whatsapp plugin registration when saving built-in config', async () => { + it('keeps whatsapp plugin registration when saving plugin-backed config', async () => { const { saveChannelConfig, writeOpenClawConfig } = await import('@electron/utils/channel-config'); await writeOpenClawConfig({ @@ -218,12 +221,15 @@ describe('WeCom plugin configuration', () => { await saveChannelConfig('whatsapp', { enabled: true }, 'default'); const config = await readOpenClawJson(); - expect(config.plugins).toBeUndefined(); const channels = config.channels as Record; + const plugins = config.plugins as { allow?: string[]; entries?: Record }; + expect(channels.whatsapp.enabled).toBe(true); + expect(plugins.allow).toContain('whatsapp'); + expect(plugins.entries?.whatsapp?.enabled).toBe(true); }); - it('saves qqbot as a built-in channel without plugin registration (OpenClaw 3.31+)', async () => { + it('saves qqbot and discord as external plugin-backed channels', async () => { const { saveChannelConfig } = await import('@electron/utils/channel-config'); await saveChannelConfig('discord', { token: 'discord-token' }, 'default'); @@ -232,16 +238,82 @@ describe('WeCom plugin configuration', () => { const config = await readOpenClawJson(); const channels = config.channels as Record }>; + const plugins = config.plugins as { entries?: Record }> }; - // QQBot config should be saved under channels.qqbot expect(channels.qqbot.accounts?.default).toBeDefined(); + expect(plugins.entries?.discord?.accounts?.default).toBeDefined(); + expect(plugins.entries?.qqbot?.accounts?.default).toBeDefined(); + expect(plugins.entries?.whatsapp?.accounts?.default).toBeDefined(); + }); - // QQBot should NOT appear in plugins.entries (built-in channel) - const plugins = config.plugins as { entries?: Record } | undefined; - if (plugins?.entries) { - expect(plugins.entries['openclaw-qqbot']).toBeUndefined(); - expect(plugins.entries['qqbot']).toBeUndefined(); - } + it('saves discord guild channel allowlist without schema-invalid allow flags', async () => { + const { saveChannelConfig } = await import('@electron/utils/channel-config'); + + await saveChannelConfig( + 'discord', + { token: 'discord-token', guildId: '1438451181474287618', channelId: '1438452657525100686' }, + 'default', + ); + + const config = await readOpenClawJson(); + const channels = config.channels as Record> }>; + accounts?: Record> }>; + }>; + }>; + + const topLevelChannel = channels.discord.guilds?.['1438451181474287618'].channels?.['1438452657525100686']; + const accountChannel = channels.discord.accounts?.default.guilds?.['1438451181474287618'].channels?.['1438452657525100686']; + + expect(topLevelChannel).toEqual({ requireMention: true }); + expect(accountChannel).toEqual({ requireMention: true }); + }); + + it('sanitizes legacy discord guild channel allow flags before writing', async () => { + const { saveChannelConfig, writeOpenClawConfig } = await import('@electron/utils/channel-config'); + + await writeOpenClawConfig({ + channels: { + discord: { + enabled: true, + defaultAccount: 'default', + token: 'discord-token', + guilds: { + '1438451181474287618': { + channels: { + '*': { allow: true, requireMention: true }, + }, + }, + }, + accounts: { + default: { + token: 'discord-token', + guilds: { + '1438451181474287618': { + channels: { + '*': { allow: true, requireMention: true }, + }, + }, + }, + }, + }, + }, + }, + }); + + await saveChannelConfig('discord', { token: 'discord-token', guildId: '1438451181474287618' }, 'default'); + + const config = await readOpenClawJson(); + const channels = config.channels as Record> }>; + accounts?: Record> }>; + }>; + }>; + + expect(channels.discord.guilds?.['1438451181474287618'].channels?.['*']).not.toHaveProperty('allow'); + expect(channels.discord.accounts?.default.guilds?.['1438451181474287618'].channels?.['*']).not.toHaveProperty('allow'); }); }); diff --git a/tests/unit/channel-routes.test.ts b/tests/unit/channel-routes.test.ts index 8492c0f..e7032d5 100644 --- a/tests/unit/channel-routes.test.ts +++ b/tests/unit/channel-routes.test.ts @@ -11,6 +11,7 @@ const listAgentsSnapshotMock = vi.fn(); const sendJsonMock = vi.fn(); const proxyAwareFetchMock = vi.fn(); const saveChannelConfigMock = vi.fn(); +const getChannelFormValuesMock = vi.fn(); const setChannelDefaultAccountMock = vi.fn(); const assignChannelAccountToAgentMock = vi.fn(); const clearChannelBindingMock = vi.fn(); @@ -21,7 +22,7 @@ vi.mock('@electron/utils/channel-config', () => ({ cleanupDanglingWeChatPluginState: vi.fn(), deleteChannelAccountConfig: vi.fn(), deleteChannelConfig: vi.fn(), - getChannelFormValues: vi.fn(), + getChannelFormValues: (...args: unknown[]) => getChannelFormValuesMock(...args), listConfiguredChannelAccounts: (...args: unknown[]) => listConfiguredChannelAccountsMock(...args), listConfiguredChannelAccountsFromConfig: (...args: unknown[]) => listConfiguredChannelAccountsMock(...args), listConfiguredChannels: (...args: unknown[]) => listConfiguredChannelsMock(...args), @@ -43,10 +44,13 @@ vi.mock('@electron/utils/agent-config', () => ({ })); vi.mock('@electron/utils/plugin-install', () => ({ + ensureDiscordPluginInstalled: vi.fn(), ensureDingTalkPluginInstalled: vi.fn(), ensureFeishuPluginInstalled: vi.fn(), + ensureQQBotPluginInstalled: vi.fn(), ensureWeChatPluginInstalled: vi.fn(), ensureWeComPluginInstalled: vi.fn(), + ensureWhatsAppPluginInstalled: vi.fn(), })); vi.mock('@electron/utils/wechat-login', () => ({ @@ -99,6 +103,7 @@ describe('handleChannelRoutes', () => { rmSync(testOpenClawConfigDir, { recursive: true, force: true }); proxyAwareFetchMock.mockReset(); parseJsonBodyMock.mockResolvedValue({}); + getChannelFormValuesMock.mockResolvedValue(undefined); listConfiguredChannelAccountsMock.mockReturnValue({}); listAgentsSnapshotMock.mockResolvedValue({ agents: [], @@ -1389,4 +1394,44 @@ describe('handleChannelRoutes', () => { }), ); }); + + it('restarts gateway after a no-change channel config save', async () => { + parseJsonBodyMock.mockResolvedValue({ + channelType: 'telegram', + accountId: 'default', + config: { botToken: 'telegram-token', allowedUsers: '123456' }, + }); + getChannelFormValuesMock.mockResolvedValue({ botToken: 'telegram-token', allowedUsers: '123456' }); + listConfiguredChannelAccountsMock.mockReturnValue({ + telegram: { + defaultAccountId: 'default', + accountIds: ['default'], + }, + }); + const debouncedRestart = vi.fn(); + + const { handleChannelRoutes } = await import('@electron/api/routes/channels'); + const handled = await handleChannelRoutes( + { method: 'POST' } as IncomingMessage, + {} as ServerResponse, + new URL('http://127.0.0.1:13210/api/channels/config'), + { + gatewayManager: { + rpc: vi.fn(), + getStatus: () => ({ state: 'running' }), + debouncedReload: vi.fn(), + debouncedRestart, + }, + } as never, + ); + + expect(handled).toBe(true); + expect(saveChannelConfigMock).not.toHaveBeenCalled(); + expect(debouncedRestart).toHaveBeenCalledWith(150); + expect(sendJsonMock).toHaveBeenCalledWith( + expect.anything(), + 200, + expect.objectContaining({ success: true, noChange: true }), + ); + }); }); diff --git a/tests/unit/gateway-ws-client.test.ts b/tests/unit/gateway-ws-client.test.ts index ee6d6b9..e1d2f07 100644 --- a/tests/unit/gateway-ws-client.test.ts +++ b/tests/unit/gateway-ws-client.test.ts @@ -131,6 +131,10 @@ describe('connectGatewaySocket', () => { expect(socket.sentFrames).toHaveLength(1); const connectFrame = JSON.parse(socket.sentFrames[0]) as { id: string; method: string }; expect(connectFrame.method).toBe('connect'); + expect((connectFrame as { params?: { minProtocol?: number; maxProtocol?: number } }).params).toMatchObject({ + minProtocol: 4, + maxProtocol: 4, + }); expect(pendingRequests.size).toBe(1); await vi.advanceTimersByTimeAsync(GATEWAY_CONNECT_HANDSHAKE_TIMEOUT_MS - 1_000);