From 06266cb4d2d52df4e9042e750e3f351c6c3a435e Mon Sep 17 00:00:00 2001 From: paisley <8197966+su8su@users.noreply.github.com> Date: Thu, 2 Apr 2026 11:23:24 +0800 Subject: [PATCH] Upgrade openclaw to 4.1 (#742) --- electron/api/routes/channels.ts | 9 +- electron/gateway/config-sync.ts | 6 +- electron/main/index.ts | 3 +- electron/main/ipc-handlers.ts | 18 +- electron/utils/channel-config.ts | 35 +- electron/utils/openclaw-auth.ts | 38 +- electron/utils/openclaw-sdk.ts | 2 +- electron/utils/plugin-install.ts | 13 +- package.json | 7 +- pnpm-lock.yaml | 679 ++++------------------------ scripts/after-pack.cjs | 58 ++- scripts/bundle-openclaw-plugins.mjs | 1 - scripts/bundle-openclaw.mjs | 102 +---- src/i18n/locales/en/channels.json | 2 +- src/i18n/locales/ja/channels.json | 2 +- src/i18n/locales/zh/channels.json | 2 +- src/types/channel.ts | 1 - tests/unit/channel-config.test.ts | 14 +- tests/unit/channel-routes.test.ts | 1 - 19 files changed, 208 insertions(+), 785 deletions(-) diff --git a/electron/api/routes/channels.ts b/electron/api/routes/channels.ts index 4e106ea9d..1be1b4fc2 100644 --- a/electron/api/routes/channels.ts +++ b/electron/api/routes/channels.ts @@ -24,7 +24,6 @@ import { import { ensureDingTalkPluginInstalled, ensureFeishuPluginInstalled, - ensureQQBotPluginInstalled, ensureWeChatPluginInstalled, ensureWeComPluginInstalled, } from '../../utils/plugin-install'; @@ -1198,13 +1197,7 @@ export async function handleChannelRoutes( return true; } } - if (storedChannelType === 'qqbot') { - const installResult = await ensureQQBotPluginInstalled(); - if (!installResult.installed) { - sendJson(res, 500, { success: false, error: installResult.warning || 'QQ Bot plugin install failed' }); - return true; - } - } + // QQBot is a built-in channel since OpenClaw 3.31 — no plugin install needed if (storedChannelType === 'feishu') { const installResult = await ensureFeishuPluginInstalled(); if (!installResult.installed) { diff --git a/electron/gateway/config-sync.ts b/electron/gateway/config-sync.ts index b230f974a..4f92e4141 100644 --- a/electron/gateway/config-sync.ts +++ b/electron/gateway/config-sync.ts @@ -49,7 +49,7 @@ 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' }, - qqbot: { dirName: 'qqbot', npmName: '@tencent-connect/openclaw-qqbot' }, + 'openclaw-weixin': { dirName: 'openclaw-weixin', npmName: '@tencent-weixin/openclaw-weixin' }, }; @@ -59,7 +59,7 @@ const CHANNEL_PLUGIN_MAP: Record = * ~/.openclaw/extensions/, the broken copy overrides the working built-in * plugin and must be removed. */ -const BUILTIN_CHANNEL_EXTENSIONS = ['discord', 'telegram']; +const BUILTIN_CHANNEL_EXTENSIONS = ['discord', 'telegram', 'qqbot']; function cleanupStaleBuiltInExtensions(): void { for (const ext of BUILTIN_CHANNEL_EXTENSIONS) { @@ -208,7 +208,7 @@ export async function syncGatewayConfigBeforeLaunch( pluginIdToChannel[info.dirName] = channelType; } // Known manifest IDs that differ from their dirName/channelType - pluginIdToChannel['openclaw-qqbot'] = 'qqbot'; + pluginIdToChannel['openclaw-lark'] = 'feishu'; pluginIdToChannel['feishu-openclaw-plugin'] = 'feishu'; diff --git a/electron/main/index.ts b/electron/main/index.ts index 6fbc1522c..69e4c7e57 100644 --- a/electron/main/index.ts +++ b/electron/main/index.ts @@ -372,8 +372,9 @@ async function initialize(): Promise { }); } - // Pre-deploy/upgrade bundled OpenClaw plugins (dingtalk, wecom, qqbot, feishu, wechat) + // Pre-deploy/upgrade bundled OpenClaw plugins (dingtalk, wecom, feishu, wechat) // to ~/.openclaw/extensions/ so they are always up-to-date after an app update. + // Note: qqbot was moved to a built-in channel in OpenClaw 3.31. if (!isE2EMode) { void ensureAllBundledPluginsInstalled().catch((error) => { logger.warn('Failed to install/upgrade bundled plugins:', error); diff --git a/electron/main/ipc-handlers.ts b/electron/main/ipc-handlers.ts index c572e78d6..9ef7e49f6 100644 --- a/electron/main/ipc-handlers.ts +++ b/electron/main/ipc-handlers.ts @@ -37,7 +37,6 @@ import { checkUvInstalled, installUv, setupManagedPython } from '../utils/uv-set import { ensureDingTalkPluginInstalled, ensureFeishuPluginInstalled, - ensureQQBotPluginInstalled, ensureWeComPluginInstalled, } from '../utils/plugin-install'; import { updateSkillConfig, getSkillConfig, getAllSkillConfigs } from '../utils/skill-config'; @@ -1498,22 +1497,7 @@ function registerOpenClawHandlers(gatewayManager: GatewayManager): void { warning: installResult.warning, }; } - if (channelType === 'qqbot') { - const installResult = await ensureQQBotPluginInstalled(); - if (!installResult.installed) { - return { - success: false, - error: installResult.warning || 'QQ Bot plugin install failed', - }; - } - await saveChannelConfig(channelType, config); - scheduleGatewayChannelSaveRefresh(channelType, `channel:saveConfig (${channelType})`); - return { - success: true, - pluginInstalled: installResult.installed, - warning: installResult.warning, - }; - } + // QQBot is a built-in channel since OpenClaw 3.31 — no plugin install needed if (channelType === 'feishu') { const installResult = await ensureFeishuPluginInstalled(); if (!installResult.installed) { diff --git a/electron/utils/channel-config.ts b/electron/utils/channel-config.ts index 9a7a2a18e..ee4b16d2a 100644 --- a/electron/utils/channel-config.ts +++ b/electron/utils/channel-config.ts @@ -22,7 +22,7 @@ import { const OPENCLAW_DIR = join(homedir(), '.openclaw'); const CONFIG_FILE = join(OPENCLAW_DIR, 'openclaw.json'); const WECOM_PLUGIN_ID = 'wecom'; -const QQBOT_PLUGIN_ID = 'openclaw-qqbot'; +// Note: QQBot is a built-in channel since OpenClaw 3.31 — no plugin ID needed. const WECHAT_PLUGIN_ID = OPENCLAW_WECHAT_CHANNEL_TYPE; const FEISHU_PLUGIN_ID_CANDIDATES = ['openclaw-lark', 'feishu-openclaw-plugin'] as const; const DEFAULT_ACCOUNT_ID = 'default'; @@ -48,6 +48,7 @@ const BUILTIN_CHANNEL_IDS = new Set([ 'msteams', 'googlechat', 'mattermost', + 'qqbot', ]); // Unique credential key per channel type – used for duplicate bot detection. @@ -464,37 +465,7 @@ async function ensurePluginAllowlist(currentConfig: OpenClawConfig, channelType: } } - if (channelType === 'qqbot') { - if (!currentConfig.plugins) { - currentConfig.plugins = { - allow: [QQBOT_PLUGIN_ID], - enabled: true, - entries: { - [QQBOT_PLUGIN_ID]: { enabled: true } - } - }; - } else { - currentConfig.plugins.enabled = true; - const allow: string[] = Array.isArray(currentConfig.plugins.allow) - ? (currentConfig.plugins.allow as string[]) - : []; - // Normalize: remove bare 'qqbot' and ensure the actual manifest ID is present. - const normalizedAllow = allow.filter((pluginId) => pluginId !== 'qqbot'); - if (!normalizedAllow.includes(QQBOT_PLUGIN_ID)) { - currentConfig.plugins.allow = [...normalizedAllow, QQBOT_PLUGIN_ID]; - } else if (normalizedAllow.length !== allow.length) { - currentConfig.plugins.allow = normalizedAllow; - } - - if (!currentConfig.plugins.entries) { - currentConfig.plugins.entries = {}; - } - if (!currentConfig.plugins.entries[QQBOT_PLUGIN_ID]) { - currentConfig.plugins.entries[QQBOT_PLUGIN_ID] = {}; - } - currentConfig.plugins.entries[QQBOT_PLUGIN_ID].enabled = true; - } - } + // Note: QQBot is a built-in channel since OpenClaw 3.31 — no plugin registration needed. if (channelType === WECHAT_PLUGIN_ID) { if (!currentConfig.plugins) { diff --git a/electron/utils/openclaw-auth.ts b/electron/utils/openclaw-auth.ts index dd7b0d05b..b3037996f 100644 --- a/electron/utils/openclaw-auth.ts +++ b/electron/utils/openclaw-auth.ts @@ -222,6 +222,7 @@ const BUILTIN_CHANNEL_IDS = new Set([ 'msteams', 'googlechat', 'mattermost', + 'qqbot', ]); const AUTH_PROFILE_PROVIDER_KEY_MAP: Record = { 'openai-codex': 'openai', @@ -1507,34 +1508,21 @@ export async function sanitizeOpenClawConfig(): Promise { modified = true; } - // ── qqbot → openclaw-qqbot migration ──────────────────────── - // The qqbot npm package (@tencent-connect/openclaw-qqbot) declares - // id="openclaw-qqbot" in its manifest, but older ClawX versions - // wrote bare "qqbot" into plugins.allow. Migrate to the manifest ID - // so the Gateway can resolve the plugin correctly. - const LEGACY_QQBOT_ID = 'qqbot'; - const NEW_QQBOT_ID = 'openclaw-qqbot'; - if (Array.isArray(pluginsObj.allow)) { - const allowArr = pluginsObj.allow as string[]; - const legacyIdx = allowArr.indexOf(LEGACY_QQBOT_ID); - if (legacyIdx !== -1) { - if (!allowArr.includes(NEW_QQBOT_ID)) { - allowArr[legacyIdx] = NEW_QQBOT_ID; - } else { - allowArr.splice(legacyIdx, 1); - } - console.log(`[sanitize] Migrated plugins.allow: ${LEGACY_QQBOT_ID} → ${NEW_QQBOT_ID}`); + // ── qqbot built-in channel cleanup ────────────────────────── + // OpenClaw 3.31 moved qqbot from a third-party plugin to a built-in + // channel. Clean up legacy plugin entries (both bare "qqbot" and + // manifest-declared "openclaw-qqbot") from plugins.entries. + // plugins.allow is left untouched — having openclaw-qqbot there is harmless. + // The channel config under channels.qqbot is preserved and works + // identically with the built-in channel. + const QQBOT_PLUGIN_IDS = ['qqbot', 'openclaw-qqbot'] as const; + for (const qqbotId of QQBOT_PLUGIN_IDS) { + if (pEntries?.[qqbotId]) { + delete pEntries[qqbotId]; + console.log(`[sanitize] Removed built-in channel plugin from plugins.entries: ${qqbotId}`); modified = true; } } - if (pEntries?.[LEGACY_QQBOT_ID]) { - if (!pEntries[NEW_QQBOT_ID]) { - pEntries[NEW_QQBOT_ID] = pEntries[LEGACY_QQBOT_ID]; - } - delete pEntries[LEGACY_QQBOT_ID]; - console.log(`[sanitize] Migrated plugins.entries: ${LEGACY_QQBOT_ID} → ${NEW_QQBOT_ID}`); - modified = true; - } // ── qwen-portal → modelstudio migration ──────────────────── // OpenClaw 2026.3.28 deprecated qwen-portal OAuth (portal.qwen.ai) diff --git a/electron/utils/openclaw-sdk.ts b/electron/utils/openclaw-sdk.ts index 7b1314a73..16374a3b8 100644 --- a/electron/utils/openclaw-sdk.ts +++ b/electron/utils/openclaw-sdk.ts @@ -37,7 +37,7 @@ const _discordSdk = requireOpenClawSdk('openclaw/plugin-sdk/discord') as { normalizeDiscordMessagingTarget: (target: string) => string | undefined; }; -const _telegramSdk = requireOpenClawSdk('openclaw/plugin-sdk/telegram') as { +const _telegramSdk = requireOpenClawSdk('openclaw/plugin-sdk/telegram-surface') as { listTelegramDirectoryGroupsFromConfig: (...args: unknown[]) => Promise; listTelegramDirectoryPeersFromConfig: (...args: unknown[]) => Promise; normalizeTelegramMessagingTarget: (target: string) => string | undefined; diff --git a/electron/utils/plugin-install.ts b/electron/utils/plugin-install.ts index 1c5daac33..6c294b0d3 100644 --- a/electron/utils/plugin-install.ts +++ b/electron/utils/plugin-install.ts @@ -2,8 +2,11 @@ * Shared OpenClaw Plugin Install Utilities * * Provides version-aware install/upgrade logic for bundled OpenClaw plugins - * (DingTalk, WeCom, QQBot, Feishu, WeChat). Used both at app startup (to auto-upgrade + * (DingTalk, WeCom, Feishu, WeChat). 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'; @@ -231,7 +234,7 @@ const PLUGIN_NPM_NAMES: Record = { dingtalk: '@soimy/dingtalk', wecom: '@wecom/wecom-openclaw-plugin', 'feishu-openclaw-plugin': '@larksuite/openclaw-lark', - qqbot: '@tencent-connect/openclaw-qqbot', + 'openclaw-weixin': '@tencent-weixin/openclaw-weixin', }; @@ -508,9 +511,7 @@ export function ensureFeishuPluginInstalled(): { installed: boolean; warning?: s ); } -export function ensureQQBotPluginInstalled(): { installed: boolean; warning?: string } { - return ensurePluginInstalled('qqbot', buildCandidateSources('qqbot'), 'QQ Bot'); -} + export function ensureWeChatPluginInstalled(): { installed: boolean; warning?: string } { return ensurePluginInstalled('openclaw-weixin', buildCandidateSources('openclaw-weixin'), 'WeChat'); @@ -524,7 +525,7 @@ export function ensureWeChatPluginInstalled(): { installed: boolean; warning?: s const ALL_BUNDLED_PLUGINS = [ { fn: ensureDingTalkPluginInstalled, label: 'DingTalk' }, { fn: ensureWeComPluginInstalled, label: 'WeCom' }, - { fn: ensureQQBotPluginInstalled, label: 'QQ Bot' }, + { fn: ensureFeishuPluginInstalled, label: 'Feishu' }, { fn: ensureWeChatPluginInstalled, label: 'WeChat' }, ] as const; diff --git a/package.json b/package.json index 08c3e7b99..f9503b437 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "clawx", - "version": "0.3.4", + "version": "0.3.5-beta.0", "pnpm": { "onlyBuiltDependencies": [ "@discordjs/opus", @@ -79,7 +79,7 @@ }, "devDependencies": { "@eslint/js": "^10.0.1", - "@larksuite/openclaw-lark": "2026.3.30", + "@larksuite/openclaw-lark": "2026.3.31", "@radix-ui/react-dialog": "^1.1.15", "@radix-ui/react-dropdown-menu": "^2.1.16", "@radix-ui/react-label": "^2.1.8", @@ -94,7 +94,6 @@ "@radix-ui/react-tooltip": "^1.2.8", "@playwright/test": "^1.56.1", "@soimy/dingtalk": "^3.5.1", - "@tencent-connect/openclaw-qqbot": "^1.6.7", "@tencent-weixin/openclaw-weixin": "^2.1.1", "@testing-library/jest-dom": "^6.9.1", "@testing-library/react": "^16.3.2", @@ -120,7 +119,7 @@ "i18next": "^25.8.11", "jsdom": "^28.1.0", "lucide-react": "^0.563.0", - "openclaw": "2026.3.28", + "openclaw": "2026.4.1", "png2icons": "^2.0.1", "postcss": "^8.5.6", "react": "^19.2.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1a2e7197b..4f1c155ae 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -44,8 +44,8 @@ importers: specifier: ^10.0.1 version: 10.0.1(eslint@10.1.0(jiti@1.21.7)) '@larksuite/openclaw-lark': - specifier: 2026.3.30 - version: 2026.3.30(openclaw@2026.3.28(@napi-rs/canvas@0.1.97)(encoding@0.1.13)) + specifier: 2026.3.31 + version: 2026.3.31(openclaw@2026.4.1(@napi-rs/canvas@0.1.97)(encoding@0.1.13)) '@playwright/test': specifier: ^1.56.1 version: 1.59.0 @@ -87,10 +87,7 @@ importers: 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.1 - version: 3.5.1(openclaw@2026.3.28(@napi-rs/canvas@0.1.97)(encoding@0.1.13)) - '@tencent-connect/openclaw-qqbot': - specifier: ^1.6.7 - version: 1.6.7(openclaw@2026.3.28(@napi-rs/canvas@0.1.97)(encoding@0.1.13)) + version: 3.5.1(openclaw@2026.4.1(@napi-rs/canvas@0.1.97)(encoding@0.1.13)) '@tencent-weixin/openclaw-weixin': specifier: ^2.1.1 version: 2.1.1 @@ -167,8 +164,8 @@ importers: specifier: ^0.563.0 version: 0.563.0(react@19.2.4) openclaw: - specifier: 2026.3.28 - version: 2026.3.28(@napi-rs/canvas@0.1.97)(encoding@0.1.13) + specifier: 2026.4.1 + version: 2026.4.1(@napi-rs/canvas@0.1.97)(encoding@0.1.13) png2icons: specifier: ^2.0.1 version: 2.0.1 @@ -244,8 +241,8 @@ packages: '@adobe/css-tools@4.4.4': resolution: {integrity: sha512-Elp+iwUx5rN5+Y8xLt5/GRoG20WGoDCQ/1Fb+1LiGtvwbDavuSk0jhD/eZdckHAuzcDzccnkv+rEjyWfRx18gg==} - '@agentclientprotocol/sdk@0.17.0': - resolution: {integrity: sha512-inBMYAEd9t4E+ULZK2os9kmLG5jbPvMLbPvY71XDDem1YteW/uDwkahg6OwsGR3tvvgVhYbRJ9mJCp2VXqG4xQ==} + '@agentclientprotocol/sdk@0.17.1': + resolution: {integrity: sha512-yjyIn8POL18IOXioLySYiL0G44kZ/IZctAls7vS3AC3X+qLhFXbWmzABSZehwRnWFShMXT+ODa/HJG1+mGXZ1A==} peerDependencies: zod: ^3.25.0 || ^4.0.0 @@ -311,78 +308,38 @@ packages: resolution: {integrity: sha512-V7WiV46SfpViL0zsgh6mUesVflKbneyrpQfM15dC86fdYjLdehbM6qjiwB3d5XKXuh+Tnh6xEWOZFB71MBgSdg==} engines: {node: '>=20.0.0'} - '@aws-sdk/client-bedrock@3.1020.0': - resolution: {integrity: sha512-OIM38upZjWsi62070cOm2nZAJsIeZC26KhOFDt8T6gmzbfcoz7XgkJ6eK9/JFfFagoFykUvXX0nfbcqtryWY0A==} - engines: {node: '>=20.0.0'} - - '@aws-sdk/core@3.973.24': - resolution: {integrity: sha512-vvf82RYQu2GidWAuQq+uIzaPz9V0gSCXVqdVzRosgl5rXcspXOpSD3wFreGGW6AYymPr97Z69kjVnLePBxloDw==} - engines: {node: '>=20.0.0'} - '@aws-sdk/core@3.973.26': resolution: {integrity: sha512-A/E6n2W42ruU+sfWk+mMUOyVXbsSgGrY3MJ9/0Az5qUdG67y8I6HYzzoAa+e/lzxxl1uCYmEL6BTMi9ZiZnplQ==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-env@3.972.22': - resolution: {integrity: sha512-cXp0VTDWT76p3hyK5D51yIKEfpf6/zsUvMfaB8CkyqadJxMQ8SbEeVroregmDlZbtG31wkj9ei0WnftmieggLg==} - engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-env@3.972.24': resolution: {integrity: sha512-FWg8uFmT6vQM7VuzELzwVo5bzExGaKHdubn0StjgrcU5FvuLExUe+k06kn/40uKv59rYzhez8eFNM4yYE/Yb/w==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-http@3.972.24': - resolution: {integrity: sha512-h694K7+tRuepSRJr09wTvQfaEnjzsKZ5s7fbESrVds02GT/QzViJ94/HCNwM7bUfFxqpPXHxulZfL6Cou0dwPg==} - engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-http@3.972.26': resolution: {integrity: sha512-CY4ppZ+qHYqcXqBVi//sdHST1QK3KzOEiLtpLsc9W2k2vfZPKExGaQIsOwcyvjpjUEolotitmd3mUNY56IwDEA==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-ini@3.972.24': - resolution: {integrity: sha512-O46fFmv0RDFWiWEA9/e6oW92BnsyAXuEgTTasxHligjn2RCr9L/DK773m/NoFaL3ZdNAUz8WxgxunleMnHAkeQ==} - engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-ini@3.972.27': resolution: {integrity: sha512-Um26EsNSUfVUX0wUXnUA1W3wzKhVy6nviEElsh5lLZUYj9bk6DXOPnpte0gt+WHubcVfVsRk40bbm4KaroTEag==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-login@3.972.24': - resolution: {integrity: sha512-sIk8oa6AzDoUhxsR11svZESqvzGuXesw62Rl2oW6wguZx8i9cdGCvkFg+h5K7iucUZP8wyWibUbJMc+J66cu5g==} - engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-login@3.972.27': resolution: {integrity: sha512-t3ehEtHomGZwg5Gixw4fYbYtG9JBnjfAjSDabxhPEu/KLLUp0BB37/APX7MSKXQhX6ZH7pseuACFJ19NrAkNdg==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-node@3.972.25': - resolution: {integrity: sha512-m7dR0Dsva2P+VUpL+VkC0WwiDby5pgmWXkRVDB5rlwv0jXJrQJf7YMtCoM8Wjk0H9jPeCYOxOXXcIgp/qp5Alg==} - engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-node@3.972.28': resolution: {integrity: sha512-rren+P6k5rShG5PX61iVi40kKdueyuMLBRTctQbyR5LooO9Ygr5L6R7ilG7RF1957NSH3KC3TU206fZuKwjSpQ==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-process@3.972.22': - resolution: {integrity: sha512-Os32s8/4gTZjBk5BtoS/cuTILaj+K72d0dVG7TCJX/fC4598cxwLDmf1AEHEpER5oL3K//yETjvFaz0V8oO5Xw==} - engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-process@3.972.24': resolution: {integrity: sha512-Q2k/XLrFXhEztPHqj4SLCNID3hEPdlhh1CDLBpNnM+1L8fq7P+yON9/9M1IGN/dA5W45v44ylERfXtDAlmMNmw==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-sso@3.972.24': - resolution: {integrity: sha512-PaFv7snEfypU2yXkpvfyWgddEbDLtgVe51wdZlinhc2doubBjUzJZZpgwuF2Jenl1FBydMhNpMjD6SBUM3qdSA==} - engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-sso@3.972.27': resolution: {integrity: sha512-CWXeGjlbBuHcm9appZUgXKP2zHDyTti0/+gXpSFJ2J3CnSwf1KWjicjN0qG2ozkMH6blrrzMrimeIOEYNl238Q==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-web-identity@3.972.24': - resolution: {integrity: sha512-J6H4R1nvr3uBTqD/EeIPAskrBtET4WFfNhpFySr2xW7bVZOXpQfPjrLSIx65jcNjBmLXzWq8QFLdVoGxiGG/SA==} - engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-web-identity@3.972.27': resolution: {integrity: sha512-CUY4hQIFswdQNEsRGEzGBUKGMK5KpqmNDdu2ROMgI+45PLFS8H0y3Tm7kvM16uvvw3n1pVxk85tnRVUTgtaa1w==} engines: {node: '>=20.0.0'} @@ -403,18 +360,10 @@ packages: resolution: {integrity: sha512-CWl5UCM57WUFaFi5kB7IBY1UmOeLvNZAZ2/OZ5l20ldiJ3TiIz1pC65gYj8X0BCPWkeR1E32mpsCk1L1I4n+lA==} engines: {node: '>=20.0.0'} - '@aws-sdk/middleware-recursion-detection@3.972.8': - resolution: {integrity: sha512-BnnvYs2ZEpdlmZ2PNlV2ZyQ8j8AEkMTjN79y/YA475ER1ByFYrkVR85qmhni8oeTaJcDqbx364wDpitDAA/wCA==} - engines: {node: '>=20.0.0'} - '@aws-sdk/middleware-recursion-detection@3.972.9': resolution: {integrity: sha512-/Wt5+CT8dpTFQxEJ9iGy/UGrXr7p2wlIOEHvIr/YcHYByzoLjrqkYqXdJjd9UIgWjv7eqV2HnFJen93UTuwfTQ==} engines: {node: '>=20.0.0'} - '@aws-sdk/middleware-user-agent@3.972.25': - resolution: {integrity: sha512-QxiMPofvOt8SwSynTOmuZfvvPM1S9QfkESBxB22NMHTRXCJhR5BygLl8IXfC4jELiisQgwsgUby21GtXfX3f/g==} - engines: {node: '>=20.0.0'} - '@aws-sdk/middleware-user-agent@3.972.27': resolution: {integrity: sha512-TIRLO5UR2+FVUGmhYoAwVkKhcVzywEDX/5LzR9tjy1h8FQAXOtFg2IqgmwvxU7y933rkTn9rl6AdgcAUgQ1/Kg==} engines: {node: '>=20.0.0'} @@ -423,10 +372,6 @@ packages: resolution: {integrity: sha512-Gp6EWIqHX5wmsOR5ZxWyyzEU8P0xBdSxkm6VHEwXwBqScKZ7QWRoj6ZmHpr+S44EYb5tuzGya4ottsogSu2W3A==} engines: {node: '>= 14.0.0'} - '@aws-sdk/nested-clients@3.996.14': - resolution: {integrity: sha512-fSESKvh1VbfjtV3QMnRkCPZWkUbQof6T/DOpiLp33yP2wA+rbwwnZeG3XT3Ekljgw2I8X4XaQPnw+zSR8yxJ5Q==} - engines: {node: '>=20.0.0'} - '@aws-sdk/nested-clients@3.996.17': resolution: {integrity: sha512-7B0HIX0tEFmOSJuWzdHZj1WhMXSryM+h66h96ZkqSncoY7J6wq61KOu4Kr57b/YnJP3J/EeQYVFulgR281h+7A==} engines: {node: '>=20.0.0'} @@ -435,14 +380,6 @@ packages: resolution: {integrity: sha512-1dq9ToC6e070QvnVhhbAs3bb5r6cQ10gTVc6cyRV5uvQe7P138TV2uG2i6+Yok4bAkVAcx5AqkTEBUvWEtBlsQ==} engines: {node: '>=20.0.0'} - '@aws-sdk/region-config-resolver@3.972.9': - resolution: {integrity: sha512-eQ+dFU05ZRC/lC2XpYlYSPlXtX3VT8sn5toxN2Fv7EXlMoA2p9V7vUBKqHunfD4TRLpxUq8Y8Ol/nCqiv327Ng==} - engines: {node: '>=20.0.0'} - - '@aws-sdk/token-providers@3.1015.0': - resolution: {integrity: sha512-3OSD4y110nisRhHzFOjoEeHU4GQL4KpzkX9PxzWaiZe0Yg2+thZKM0Pn9DjYwezH5JYfh/K++xK/SE0IHGrmCQ==} - engines: {node: '>=20.0.0'} - '@aws-sdk/token-providers@3.1017.0': resolution: {integrity: sha512-xqssisjxtK64VhyqKm6+mlGF/un0q/t2xYCMj1tfW/BrL3yZ+pAAS+zGwkjMiMhvtVcAV/h5UeLNWLHuEPwDKw==} engines: {node: '>=20.0.0'} @@ -470,15 +407,6 @@ packages: '@aws-sdk/util-user-agent-browser@3.972.8': resolution: {integrity: sha512-B3KGXJviV2u6Cdw2SDY2aDhoJkVfY/Q/Trwk2CMSkikE1Oi6gRzxhvhIfiRpHfmIsAhV4EA54TVEX8K6CbHbkA==} - '@aws-sdk/util-user-agent-node@3.973.11': - resolution: {integrity: sha512-1qdXbXo2s5MMLpUvw00284LsbhtlQ4ul7Zzdn5n+7p4WVgCMLqhxImpHIrjSoc72E/fyc4Wq8dLtUld2Gsh+lA==} - engines: {node: '>=20.0.0'} - peerDependencies: - aws-crt: '>=1.0.0' - peerDependenciesMeta: - aws-crt: - optional: true - '@aws-sdk/util-user-agent-node@3.973.13': resolution: {integrity: sha512-s1dCJ0J9WU9UPkT3FFqhKTSquYTkqWXGRaapHFyWwwJH86ZussewhNST5R5TwXVL1VSHq4aJVl9fWK+svaRVCQ==} engines: {node: '>=20.0.0'} @@ -488,10 +416,6 @@ packages: aws-crt: optional: true - '@aws-sdk/xml-builder@3.972.15': - resolution: {integrity: sha512-PxMRlCFNiQnke9YR29vjFQwz4jq+6Q04rOVFeTDR2K7Qpv9h9FOWOxG+zJjageimYbWqE3bTuLjmryWHAWbvaA==} - engines: {node: '>=20.0.0'} - '@aws-sdk/xml-builder@3.972.16': resolution: {integrity: sha512-iu2pyvaqmeatIJLURLqx9D+4jKAdTH20ntzB6BFwjyN7V960r4jK32mx0Zf7YbtOYAbmbtQfDNuL60ONinyw7A==} engines: {node: '>=20.0.0'} @@ -933,8 +857,8 @@ packages: '@hapi/hoek@9.3.0': resolution: {integrity: sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==} - '@homebridge/ciao@1.3.5': - resolution: {integrity: sha512-f7MAw7YuoEYgJEQ1VyRcLHGuVmCpmXi65GVR8CAtPWPqIZf/HFr4vHzVpOfQMpEQw9Pt5uh07guuLt5HE8ruog==} + '@homebridge/ciao@1.3.6': + resolution: {integrity: sha512-2F9N/15Q/GnoBXimr8PFg7fb1QrAQBvuZpaW2kseWOOy14Lzc3yZB1mT9N1Ju/4hlkboU33uHxtOxZkvkPoE/w==} hasBin: true '@hono/node-server@1.19.11': @@ -1145,8 +1069,8 @@ packages: '@keyv/serialize@1.1.1': resolution: {integrity: sha512-dXn3FZhPv0US+7dtJsIi2R+c7qWYiReoEh5zUntWCf4oSpMNib8FDhSoed6m3QyZdx5hK7iLFkYk3rNxwt8vTA==} - '@larksuite/openclaw-lark@2026.3.30': - resolution: {integrity: sha512-PAOcXOwEK5BsXASDSXCGCzqhF0TBmF0qzNmEKuPQWleqeeUNpEv55bHeCNWOGFRu8K+HXJn+phamZ/8Vr1r4lw==} + '@larksuite/openclaw-lark@2026.3.31': + resolution: {integrity: sha512-5rq4w5WX12UXFZg0NXU/H+atTG8QcV2yp/SoDBY75TYhIyLMclptm+2zG0Qv6svi69HOBfrlJ2BwhXccYlBs5w==} engines: {node: '>=22'} hasBin: true peerDependencies: @@ -1275,22 +1199,22 @@ packages: resolution: {integrity: sha512-faGUlTcXka5l7rv0lP3K3vGW/ejRuOS24RR2aSFWREUQqzjgdsuWNo/IiPqL3kWRGt6Ahl2+qcDAwtdeWeuGUw==} hasBin: true - '@mariozechner/pi-agent-core@0.63.1': - resolution: {integrity: sha512-h0B20xfs/iEVR2EC4gwiE8hKI1TPeB8REdRJMgV+uXKH7gpeIZ9+s8Dp9nX35ZR0QUjkNey2+ULk2DxQtdg14Q==} + '@mariozechner/pi-agent-core@0.64.0': + resolution: {integrity: sha512-IN/sIxWOD0v1OFVXHB605SGiZhO5XdEWG5dO8EAV08n3jz/p12o4OuYGvhGXmHhU28WXa/FGWC+FO5xiIih8Uw==} engines: {node: '>=20.0.0'} - '@mariozechner/pi-ai@0.63.1': - resolution: {integrity: sha512-wjgwY+yfrFO6a9QdAfjWpH7iSrDean6GsKDDMohNcLCy6PreMxHOZvNM0NwJARL1tZoZovr7ikAQfLGFZbnjsw==} + '@mariozechner/pi-ai@0.64.0': + resolution: {integrity: sha512-Z/Jnf+JSVDPLRcxJsa8XhYTJKIqKekNueaCpBLGQHgizL1F9RQ1Rur3rIfZpfXkt2cLu/AIPtOs223ueuoWaWg==} engines: {node: '>=20.0.0'} hasBin: true - '@mariozechner/pi-coding-agent@0.63.1': - resolution: {integrity: sha512-XSoMyLtuMA7ePK1UBWqSJ/BBdtBdJUHY9nbtnNyG6GeW7Gbgd+iqljIuwmAUf8wlYL981UIfYM/WIPQ6t/dIxw==} + '@mariozechner/pi-coding-agent@0.64.0': + resolution: {integrity: sha512-Q4tcqSqFGQtOgCtRyIp1D80Nv2if13Q2pfbnrOlaT/mix90mLcZGML9jKVnT1jGSy5GMYudU1HsS7cx53kxb0g==} engines: {node: '>=20.6.0'} hasBin: true - '@mariozechner/pi-tui@0.63.1': - resolution: {integrity: sha512-G5p+eh1EPkFCNaaggX6vRrqttnDscK6npgmEOknoCQXZtch8XNgh9Lf3VJ0A2lZXSgR7IntG5dfXHPH/Ki64wA==} + '@mariozechner/pi-tui@0.64.0': + resolution: {integrity: sha512-W1qLry9MAuN/V3YJmMv/BJa0VaYv721NkXPg/DGItdqWxuDc+1VdNbyAnRwxblNkIpXVUWL26x64BlyFXpxmkg==} engines: {node: '>=20.0.0'} '@matrix-org/matrix-sdk-crypto-nodejs@0.4.0': @@ -1304,8 +1228,8 @@ packages: '@mistralai/mistralai@1.14.1': resolution: {integrity: sha512-IiLmmZFCCTReQgPAT33r7KQ1nYo5JPdvGkrkZqA8qQ2qB1GHgs5LoP5K2ICyrjnpw2n8oSxMM/VP+liiKcGNlQ==} - '@modelcontextprotocol/sdk@1.28.0': - resolution: {integrity: sha512-gmloF+i+flI8ouQK7MWW4mOwuMh4RePBuPFAEPC6+pdqyWOUMDOixb6qZ69owLJpz6XmyllCouc4t8YWO+E2Nw==} + '@modelcontextprotocol/sdk@1.29.0': + resolution: {integrity: sha512-zo37mZA9hJWpULgkRpowewez1y6ML5GsXJPY8FI0tBBCd77HEvza4jDqRKOXgHNn867PVGCyTdzqpz0izu5ZjQ==} engines: {node: '>=18'} peerDependencies: '@cfworker/json-schema': ^4.1.1 @@ -2126,22 +2050,17 @@ packages: '@sinclair/typebox@0.34.48': resolution: {integrity: sha512-kKJTNuK3AQOrgjjotVxMrCn1sUJwM76wMszfq1kdU4uYVJjvEWuFQ6HgvLt4Xz3fSmZlTOxJ/Ie13KnIcWQXFA==} + '@sinclair/typebox@0.34.49': + resolution: {integrity: sha512-brySQQs7Jtn0joV8Xh9ZV/hZb9Ozb0pmazDIASBkYKCjXrXU3mpcFahmK/z4YDhGkQvP9mWJbVyahdtU5wQA+A==} + '@sindresorhus/is@4.6.0': resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} engines: {node: '>=10'} - '@smithy/abort-controller@4.2.12': - resolution: {integrity: sha512-xolrFw6b+2iYGl6EcOL7IJY71vvyZ0DJ3mcKtpykqPe2uscwtzDZJa1uVQXyP7w9Dd+kGwYnPbMsJrGISKiY/Q==} - engines: {node: '>=18.0.0'} - '@smithy/config-resolver@4.4.13': resolution: {integrity: sha512-iIzMC5NmOUP6WL6o8iPBjFhUhBZ9pPjpUpQYWMUFQqKyXXzOftbfK8zcQCz/jFV1Psmf05BK5ypx4K2r4Tnwdg==} engines: {node: '>=18.0.0'} - '@smithy/core@3.23.12': - resolution: {integrity: sha512-o9VycsYNtgC+Dy3I0yrwCqv9CWicDnke0L7EVOrZtJpjb2t0EjaEofmMrYc0T1Kn3yk32zm6cspxF9u9Bj7e5w==} - engines: {node: '>=18.0.0'} - '@smithy/core@3.23.13': resolution: {integrity: sha512-J+2TT9D6oGsUVXVEMvz8h2EmdVnkBiy2auCie4aSJMvKlzUtO5hqjEzXhoCUkIMo7gAYjbQcN0g/MMSXEhDs1Q==} engines: {node: '>=18.0.0'} @@ -2194,26 +2113,14 @@ packages: resolution: {integrity: sha512-YE58Yz+cvFInWI/wOTrB+DbvUVz/pLn5mC5MvOV4fdRUc6qGwygyngcucRQjAhiCEbmfLOXX0gntSIcgMvAjmA==} engines: {node: '>=18.0.0'} - '@smithy/middleware-endpoint@4.4.27': - resolution: {integrity: sha512-T3TFfUgXQlpcg+UdzcAISdZpj4Z+XECZ/cefgA6wLBd6V4lRi0svN2hBouN/be9dXQ31X4sLWz3fAQDf+nt6BA==} - engines: {node: '>=18.0.0'} - '@smithy/middleware-endpoint@4.4.28': resolution: {integrity: sha512-p1gfYpi91CHcs5cBq982UlGlDrxoYUX6XdHSo91cQ2KFuz6QloHosO7Jc60pJiVmkWrKOV8kFYlGFFbQ2WUKKQ==} engines: {node: '>=18.0.0'} - '@smithy/middleware-retry@4.4.44': - resolution: {integrity: sha512-Y1Rav7m5CFRPQyM4CI0koD/bXjyjJu3EQxZZhtLGD88WIrBrQ7kqXM96ncd6rYnojwOo/u9MXu57JrEvu/nLrA==} - engines: {node: '>=18.0.0'} - '@smithy/middleware-retry@4.4.45': resolution: {integrity: sha512-td1PxpwDIaw5/oP/xIRxBGxJKoF1L4DBAwbZ8wjMuXBYOP/r2ZE/Ocou+mBHx/yk9knFEtDBwhSrYVn+Mz4pHw==} engines: {node: '>=18.0.0'} - '@smithy/middleware-serde@4.2.15': - resolution: {integrity: sha512-ExYhcltZSli0pgAKOpQQe1DLFBLryeZ22605y/YS+mQpdNWekum9Ujb/jMKfJKgjtz1AZldtwA/wCYuKJgjjlg==} - engines: {node: '>=18.0.0'} - '@smithy/middleware-serde@4.2.16': resolution: {integrity: sha512-beqfV+RZ9RSv+sQqor3xroUUYgRFCGRw6niGstPG8zO9LgTl0B0MCucxjmrH/2WwksQN7UUgI7KNANoZv+KALA==} engines: {node: '>=18.0.0'} @@ -2226,10 +2133,6 @@ packages: resolution: {integrity: sha512-tr2oKX2xMcO+rBOjobSwVAkV05SIfUKz8iI53rzxEmgW3GOOPOv0UioSDk+J8OpRQnpnhsO3Af6IEBabQBVmiw==} engines: {node: '>=18.0.0'} - '@smithy/node-http-handler@4.5.0': - resolution: {integrity: sha512-Rnq9vQWiR1+/I6NZZMNzJHV6pZYyEHt2ZnuV3MG8z2NNenC4i/8Kzttz7CjZiHSmsN5frhXhg17z3Zqjjhmz1A==} - engines: {node: '>=18.0.0'} - '@smithy/node-http-handler@4.5.1': resolution: {integrity: sha512-ejjxdAXjkPIs9lyYyVutOGNOraqUE9v/NjGMKwwFrfOM354wfSD8lmlj8hVwUzQmlLLF4+udhfCX9Exnbmvfzw==} engines: {node: '>=18.0.0'} @@ -2262,10 +2165,6 @@ packages: resolution: {integrity: sha512-B/FBwO3MVOL00DaRSXfXfa/TRXRheagt/q5A2NM13u7q+sHS59EOVGQNfG7DkmVtdQm5m3vOosoKAXSqn/OEgw==} engines: {node: '>=18.0.0'} - '@smithy/smithy-client@4.12.7': - resolution: {integrity: sha512-q3gqnwml60G44FECaEEsdQMplYhDMZYCtYhMCzadCnRnnHIobZJjegmdoUo6ieLQlPUzvrMdIJUpx6DoPmzANQ==} - engines: {node: '>=18.0.0'} - '@smithy/smithy-client@4.12.8': resolution: {integrity: sha512-aJaAX7vHe5i66smoSSID7t4rKY08PbD8EBU7DOloixvhOozfYWdcSYE4l6/tjkZ0vBZhGjheWzB2mh31sLgCMA==} engines: {node: '>=18.0.0'} @@ -2302,18 +2201,10 @@ packages: resolution: {integrity: sha512-dWU03V3XUprJwaUIFVv4iOnS1FC9HnMHDfUrlNDSh4315v0cWyaIErP8KiqGVbf5z+JupoVpNM7ZB3jFiTejvQ==} engines: {node: '>=18.0.0'} - '@smithy/util-defaults-mode-browser@4.3.43': - resolution: {integrity: sha512-Qd/0wCKMaXxev/z00TvNzGCH2jlKKKxXP1aDxB6oKwSQthe3Og2dMhSayGCnsma1bK/kQX1+X7SMP99t6FgiiQ==} - engines: {node: '>=18.0.0'} - '@smithy/util-defaults-mode-browser@4.3.44': resolution: {integrity: sha512-eZg6XzaCbVr2S5cAErU5eGBDaOVTuTo1I65i4tQcHENRcZ8rMWhQy1DaIYUSLyZjsfXvmCqZrstSMYyGFocvHA==} engines: {node: '>=18.0.0'} - '@smithy/util-defaults-mode-node@4.2.47': - resolution: {integrity: sha512-qSRbYp1EQ7th+sPFuVcVO05AE0QH635hycdEXlpzIahqHHf2Fyd/Zl+8v0XYMJ3cgDVPa0lkMefU7oNUjAP+DQ==} - engines: {node: '>=18.0.0'} - '@smithy/util-defaults-mode-node@4.2.48': resolution: {integrity: sha512-FqOKTlqSaoV3nzO55pMs5NBnZX8EhoI0DGmn9kbYeXWppgHD6dchyuj2HLqp4INJDJbSrj6OFYJkAh/WhSzZPg==} engines: {node: '>=18.0.0'} @@ -2334,10 +2225,6 @@ packages: resolution: {integrity: sha512-1zopLDUEOwumjcHdJ1mwBHddubYF8GMQvstVCLC54Y46rqoHwlIU+8ZzUeaBcD+WCJHyDGSeZ2ml9YSe9aqcoQ==} engines: {node: '>=18.0.0'} - '@smithy/util-stream@4.5.20': - resolution: {integrity: sha512-4yXLm5n/B5SRBR2p8cZ90Sbv4zL4NKsgxdzCzp/83cXw2KxLEumt5p+GAVyRNZgQOSrzXn9ARpO0lUe8XSlSDw==} - engines: {node: '>=18.0.0'} - '@smithy/util-stream@4.5.21': resolution: {integrity: sha512-KzSg+7KKywLnkoKejRtIBXDmwBfjGvg1U1i/etkC7XSWUyFCoLno1IohV2c74IzQqdhX5y3uE44r/8/wuK+A7Q==} engines: {node: '>=18.0.0'} @@ -2373,16 +2260,6 @@ packages: '@telegraf/types@7.1.0': resolution: {integrity: sha512-kGevOIbpMcIlCDeorKGpwZmdH7kHbqlk/Yj6dEpJMKEQw5lk0KVQY0OLXaCswy8GqlIVLd5625OB+rAntP9xVw==} - '@tencent-connect/openclaw-qqbot@1.6.7': - resolution: {integrity: sha512-0SynvYuS+/QZ5nmX1mTw46zR07Hiqzeo9SZqZPy2T39gLpxbg2Ifey01BfZDhM+KbRzIG+M0k2/R8jj0OzFxVA==} - hasBin: true - peerDependencies: - openclaw: '*' - bundledDependencies: - - mpg123-decoder - - silk-wasm - - ws - '@tencent-weixin/openclaw-weixin@2.1.1': resolution: {integrity: sha512-lSiTI+9eQQuvZXehuteNps3Ia4/ih5zml6QEgICwA2+9xT1sd5z8C+ldgRfrYd8lZTxYWC8ffkLtG0EVo2E7Ag==} engines: {node: '>=22'} @@ -4335,8 +4212,8 @@ packages: matrix-events-sdk@0.0.1: resolution: {integrity: sha512-1QEOsXO+bhyCroIe2/A5OwaxHvBm7EsSQ46DEDn8RBIfQwN5HWBpFvyWWR4QY0KHPPnnJdI99wgRiAl7Ad5qaA==} - matrix-js-sdk@41.2.0: - resolution: {integrity: sha512-kVLDKm/bUlwlHoDKRemshs27LCnOnNpmsVKtbCOM5F5D/E1SkrKldou+vQ/lk4PyXTvu9/qglkd2m0pBwJ5opg==} + matrix-js-sdk@41.3.0-rc.0: + resolution: {integrity: sha512-HTGqU6ZWAB9Dl3U9wUQDbk0aq77a6JFVdATTRX3Yy9eLytcK3RSLI6bPwFBrKgV2qRz+gy7bfsqXVDWTXng7jA==} engines: {node: '>=22.0.0'} matrix-widget-api@1.17.0: @@ -4750,8 +4627,8 @@ packages: zod: optional: true - openclaw@2026.3.28: - resolution: {integrity: sha512-n7ZS3zdimB2H/GfnylyG8xWXVrmlsSPHZdNEIEPe54Sl5XYuYD5yxilGYV0DWowgtsM5ysFEQMMMArdC/O77Jw==} + openclaw@2026.4.1: + resolution: {integrity: sha512-+1KF+Fp3WjILT0OqnoIYncQif0HmrVDUOzn7Ir1vS6nulYiVw0GKhcizWFWlCbR1wiDZjB6BTaoj7JRnWPd3LQ==} engines: {node: '>=22.14.0'} hasBin: true peerDependencies: @@ -4899,8 +4776,8 @@ packages: resolution: {integrity: sha512-DlOzet0HO7OEnmUmB6wWGJrrdvbyJKftI1bhMitK7O2N8W2gc757yyYBbINy9IDafXAV9wmKr9t7xsTaNKRG5Q==} engines: {node: '>=20.16.0 || >=22.3.0'} - pdfjs-dist@5.5.207: - resolution: {integrity: sha512-WMqqw06w1vUt9ZfT0gOFhMf3wHsWhaCrxGrckGs5Cci6ybDW87IvPaOd2pnBwT6BJuP/CzXDZxjFgmSULLdsdw==} + pdfjs-dist@5.6.205: + resolution: {integrity: sha512-tlUj+2IDa7G1SbvBNN74UHRLJybZDWYom+k6p5KIZl7huBvsA4APi6mKL+zCxd3tLjN5hOOEE9Tv7VdzO88pfg==} engines: {node: '>=20.19.0 || >=22.13.0 || >=24'} pe-library@0.4.1: @@ -5479,33 +5356,33 @@ packages: sprintf-js@1.1.3: resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} - sqlite-vec-darwin-arm64@0.1.7: - resolution: {integrity: sha512-dQ7u4GKPdOPi3IfZ44K7HHdYup2JssM6fuKR9zgqRzW137uFOQmRhbYChNu+ZfW+yhJutsPgfNRFsuWKmy627w==} + sqlite-vec-darwin-arm64@0.1.9: + resolution: {integrity: sha512-jSsZpE42OfBkGL/ItyJTVCUwl6o6Ka3U5rc4j+UBDIQzC1ulSSKMEhQLthsOnF/MdAf1MuAkYhkdKmmcjaIZQg==} cpu: [arm64] os: [darwin] - sqlite-vec-darwin-x64@0.1.7: - resolution: {integrity: sha512-MDoczft1BriQcGMEz+CqeSCkB0OsAf12ytZOapS6MaB7zgNzLLSLH6Sxe3yzcPWUyDuCWgK7WzyRIo8u1vAIVA==} + sqlite-vec-darwin-x64@0.1.9: + resolution: {integrity: sha512-KDlVyqQT7pnOhU1ymB9gs7dMbSoVmKHitT+k1/xkjarcX8bBqPxWrGlK/R+C5WmWkfvWwyq5FfXfiBYCBs6PlA==} cpu: [x64] os: [darwin] - sqlite-vec-linux-arm64@0.1.7: - resolution: {integrity: sha512-V429sYT/gwr9PgtT8rbjQd6ls7CFchFpiS45TKSf7rU7wxt9MBmCVorUcheD4kEZb4VeZ6PnFXXCqPMeaHkaUw==} + sqlite-vec-linux-arm64@0.1.9: + resolution: {integrity: sha512-5wXVJ9c9kR4CHm/wVqXb/R+XUHTdpZ4nWbPHlS+gc9qQFVHs92Km4bPnCKX4rtcPMzvNis+SIzMJR1SCEwpuUw==} cpu: [arm64] os: [linux] - sqlite-vec-linux-x64@0.1.7: - resolution: {integrity: sha512-wZL+lXeW7y63DLv6FYU6Q4nv2lP5F94cWt7bJCWNiHmZ6NdKIgz/p0QlyuJA/51b8TyoDvsTdusLVlZz9cIh5A==} + sqlite-vec-linux-x64@0.1.9: + resolution: {integrity: sha512-w3tCH8xK2finW8fQJ/m8uqKodXUZ9KAuAar2UIhz4BHILfpE0WM/MTGCRfa7RjYbrYim5Luk3guvMOGI7T7JQA==} cpu: [x64] os: [linux] - sqlite-vec-windows-x64@0.1.7: - resolution: {integrity: sha512-FEZMjMT03irJxwqMQg+A+4hHCiFslxISOAkQ0eYn2lP7GdpppkgYveaT5Xnw/2V+GLq2MXOJb0nDGFNethHSkg==} + sqlite-vec-windows-x64@0.1.9: + resolution: {integrity: sha512-y3gEIyy/17bq2QFPQOWLE68TYWcRZkBQVA2XLrTPHNTOp55xJi/BBBmOm40tVMDMjtP+Elpk6UBUXdaq+46b0Q==} cpu: [x64] os: [win32] - sqlite-vec@0.1.7: - resolution: {integrity: sha512-1Sge9uRc3B6wDKR4J6sGFi/E2ai9SAU5FenDki3OmhdP/a49PO2Juy1U5yQnx2bZP5t+C3BYJTkG+KkDi3q9Xg==} + sqlite-vec@0.1.9: + resolution: {integrity: sha512-L7XJWRIBNvR9O5+vh1FQ+IGkh/3D2AzVksW5gdtk28m78Hy8skFD0pqReKH1Yp0/BUKRGcffgKvyO/EON5JXpA==} ssri@12.0.0: resolution: {integrity: sha512-S7iGNosepx9RadX82oimUkvr0Ct7IjJbEbs4mJcTxst8um95J3sDYU1RBEOvdu6oL1Wek2ODI5i4MAw+dZ6cAQ==} @@ -6161,7 +6038,7 @@ snapshots: '@adobe/css-tools@4.4.4': {} - '@agentclientprotocol/sdk@0.17.0(zod@4.3.6)': + '@agentclientprotocol/sdk@0.17.1(zod@4.3.6)': dependencies: zod: 4.3.6 @@ -6248,72 +6125,26 @@ snapshots: dependencies: '@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.973.24 - '@aws-sdk/credential-provider-node': 3.972.25 + '@aws-sdk/core': 3.973.26 + '@aws-sdk/credential-provider-node': 3.972.28 '@aws-sdk/eventstream-handler-node': 3.972.11 '@aws-sdk/middleware-eventstream': 3.972.8 '@aws-sdk/middleware-host-header': 3.972.8 '@aws-sdk/middleware-logger': 3.972.8 - '@aws-sdk/middleware-recursion-detection': 3.972.8 - '@aws-sdk/middleware-user-agent': 3.972.25 - '@aws-sdk/middleware-websocket': 3.972.13 - '@aws-sdk/region-config-resolver': 3.972.9 - '@aws-sdk/token-providers': 3.1017.0 - '@aws-sdk/types': 3.973.6 - '@aws-sdk/util-endpoints': 3.996.5 - '@aws-sdk/util-user-agent-browser': 3.972.8 - '@aws-sdk/util-user-agent-node': 3.973.11 - '@smithy/config-resolver': 4.4.13 - '@smithy/core': 3.23.12 - '@smithy/eventstream-serde-browser': 4.2.12 - '@smithy/eventstream-serde-config-resolver': 4.3.12 - '@smithy/eventstream-serde-node': 4.2.12 - '@smithy/fetch-http-handler': 5.3.15 - '@smithy/hash-node': 4.2.12 - '@smithy/invalid-dependency': 4.2.12 - '@smithy/middleware-content-length': 4.2.12 - '@smithy/middleware-endpoint': 4.4.27 - '@smithy/middleware-retry': 4.4.44 - '@smithy/middleware-serde': 4.2.15 - '@smithy/middleware-stack': 4.2.12 - '@smithy/node-config-provider': 4.3.12 - '@smithy/node-http-handler': 4.5.0 - '@smithy/protocol-http': 5.3.12 - '@smithy/smithy-client': 4.12.7 - '@smithy/types': 4.13.1 - '@smithy/url-parser': 4.2.12 - '@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.43 - '@smithy/util-defaults-mode-node': 4.2.47 - '@smithy/util-endpoints': 3.3.3 - '@smithy/util-middleware': 4.2.12 - '@smithy/util-retry': 4.2.12 - '@smithy/util-stream': 4.5.20 - '@smithy/util-utf8': 4.2.2 - tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - - '@aws-sdk/client-bedrock@3.1020.0': - dependencies: - '@aws-crypto/sha256-browser': 5.2.0 - '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.973.26 - '@aws-sdk/credential-provider-node': 3.972.28 - '@aws-sdk/middleware-host-header': 3.972.8 - '@aws-sdk/middleware-logger': 3.972.8 '@aws-sdk/middleware-recursion-detection': 3.972.9 '@aws-sdk/middleware-user-agent': 3.972.27 + '@aws-sdk/middleware-websocket': 3.972.13 '@aws-sdk/region-config-resolver': 3.972.10 - '@aws-sdk/token-providers': 3.1020.0 + '@aws-sdk/token-providers': 3.1017.0 '@aws-sdk/types': 3.973.6 '@aws-sdk/util-endpoints': 3.996.5 '@aws-sdk/util-user-agent-browser': 3.972.8 '@aws-sdk/util-user-agent-node': 3.973.13 '@smithy/config-resolver': 4.4.13 '@smithy/core': 3.23.13 + '@smithy/eventstream-serde-browser': 4.2.12 + '@smithy/eventstream-serde-config-resolver': 4.3.12 + '@smithy/eventstream-serde-node': 4.2.12 '@smithy/fetch-http-handler': 5.3.15 '@smithy/hash-node': 4.2.12 '@smithy/invalid-dependency': 4.2.12 @@ -6336,27 +6167,12 @@ snapshots: '@smithy/util-endpoints': 3.3.3 '@smithy/util-middleware': 4.2.12 '@smithy/util-retry': 4.2.12 + '@smithy/util-stream': 4.5.21 '@smithy/util-utf8': 4.2.2 tslib: 2.8.1 transitivePeerDependencies: - aws-crt - '@aws-sdk/core@3.973.24': - dependencies: - '@aws-sdk/types': 3.973.6 - '@aws-sdk/xml-builder': 3.972.15 - '@smithy/core': 3.23.12 - '@smithy/node-config-provider': 4.3.12 - '@smithy/property-provider': 4.2.12 - '@smithy/protocol-http': 5.3.12 - '@smithy/signature-v4': 5.3.12 - '@smithy/smithy-client': 4.12.7 - '@smithy/types': 4.13.1 - '@smithy/util-base64': 4.3.2 - '@smithy/util-middleware': 4.2.12 - '@smithy/util-utf8': 4.2.2 - tslib: 2.8.1 - '@aws-sdk/core@3.973.26': dependencies: '@aws-sdk/types': 3.973.6 @@ -6373,14 +6189,6 @@ snapshots: '@smithy/util-utf8': 4.2.2 tslib: 2.8.1 - '@aws-sdk/credential-provider-env@3.972.22': - dependencies: - '@aws-sdk/core': 3.973.24 - '@aws-sdk/types': 3.973.6 - '@smithy/property-provider': 4.2.12 - '@smithy/types': 4.13.1 - tslib: 2.8.1 - '@aws-sdk/credential-provider-env@3.972.24': dependencies: '@aws-sdk/core': 3.973.26 @@ -6389,19 +6197,6 @@ snapshots: '@smithy/types': 4.13.1 tslib: 2.8.1 - '@aws-sdk/credential-provider-http@3.972.24': - dependencies: - '@aws-sdk/core': 3.973.24 - '@aws-sdk/types': 3.973.6 - '@smithy/fetch-http-handler': 5.3.15 - '@smithy/node-http-handler': 4.5.0 - '@smithy/property-provider': 4.2.12 - '@smithy/protocol-http': 5.3.12 - '@smithy/smithy-client': 4.12.7 - '@smithy/types': 4.13.1 - '@smithy/util-stream': 4.5.20 - tslib: 2.8.1 - '@aws-sdk/credential-provider-http@3.972.26': dependencies: '@aws-sdk/core': 3.973.26 @@ -6415,25 +6210,6 @@ snapshots: '@smithy/util-stream': 4.5.21 tslib: 2.8.1 - '@aws-sdk/credential-provider-ini@3.972.24': - dependencies: - '@aws-sdk/core': 3.973.24 - '@aws-sdk/credential-provider-env': 3.972.22 - '@aws-sdk/credential-provider-http': 3.972.24 - '@aws-sdk/credential-provider-login': 3.972.24 - '@aws-sdk/credential-provider-process': 3.972.22 - '@aws-sdk/credential-provider-sso': 3.972.24 - '@aws-sdk/credential-provider-web-identity': 3.972.24 - '@aws-sdk/nested-clients': 3.996.14 - '@aws-sdk/types': 3.973.6 - '@smithy/credential-provider-imds': 4.2.12 - '@smithy/property-provider': 4.2.12 - '@smithy/shared-ini-file-loader': 4.4.7 - '@smithy/types': 4.13.1 - tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - '@aws-sdk/credential-provider-ini@3.972.27': dependencies: '@aws-sdk/core': 3.973.26 @@ -6453,19 +6229,6 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/credential-provider-login@3.972.24': - dependencies: - '@aws-sdk/core': 3.973.24 - '@aws-sdk/nested-clients': 3.996.14 - '@aws-sdk/types': 3.973.6 - '@smithy/property-provider': 4.2.12 - '@smithy/protocol-http': 5.3.12 - '@smithy/shared-ini-file-loader': 4.4.7 - '@smithy/types': 4.13.1 - tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - '@aws-sdk/credential-provider-login@3.972.27': dependencies: '@aws-sdk/core': 3.973.26 @@ -6479,23 +6242,6 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/credential-provider-node@3.972.25': - dependencies: - '@aws-sdk/credential-provider-env': 3.972.22 - '@aws-sdk/credential-provider-http': 3.972.24 - '@aws-sdk/credential-provider-ini': 3.972.24 - '@aws-sdk/credential-provider-process': 3.972.22 - '@aws-sdk/credential-provider-sso': 3.972.24 - '@aws-sdk/credential-provider-web-identity': 3.972.24 - '@aws-sdk/types': 3.973.6 - '@smithy/credential-provider-imds': 4.2.12 - '@smithy/property-provider': 4.2.12 - '@smithy/shared-ini-file-loader': 4.4.7 - '@smithy/types': 4.13.1 - tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - '@aws-sdk/credential-provider-node@3.972.28': dependencies: '@aws-sdk/credential-provider-env': 3.972.24 @@ -6513,15 +6259,6 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/credential-provider-process@3.972.22': - dependencies: - '@aws-sdk/core': 3.973.24 - '@aws-sdk/types': 3.973.6 - '@smithy/property-provider': 4.2.12 - '@smithy/shared-ini-file-loader': 4.4.7 - '@smithy/types': 4.13.1 - tslib: 2.8.1 - '@aws-sdk/credential-provider-process@3.972.24': dependencies: '@aws-sdk/core': 3.973.26 @@ -6531,19 +6268,6 @@ snapshots: '@smithy/types': 4.13.1 tslib: 2.8.1 - '@aws-sdk/credential-provider-sso@3.972.24': - dependencies: - '@aws-sdk/core': 3.973.24 - '@aws-sdk/nested-clients': 3.996.14 - '@aws-sdk/token-providers': 3.1015.0 - '@aws-sdk/types': 3.973.6 - '@smithy/property-provider': 4.2.12 - '@smithy/shared-ini-file-loader': 4.4.7 - '@smithy/types': 4.13.1 - tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - '@aws-sdk/credential-provider-sso@3.972.27': dependencies: '@aws-sdk/core': 3.973.26 @@ -6557,18 +6281,6 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/credential-provider-web-identity@3.972.24': - dependencies: - '@aws-sdk/core': 3.973.24 - '@aws-sdk/nested-clients': 3.996.14 - '@aws-sdk/types': 3.973.6 - '@smithy/property-provider': 4.2.12 - '@smithy/shared-ini-file-loader': 4.4.7 - '@smithy/types': 4.13.1 - tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - '@aws-sdk/credential-provider-web-identity@3.972.27': dependencies: '@aws-sdk/core': 3.973.26 @@ -6608,14 +6320,6 @@ snapshots: '@smithy/types': 4.13.1 tslib: 2.8.1 - '@aws-sdk/middleware-recursion-detection@3.972.8': - dependencies: - '@aws-sdk/types': 3.973.6 - '@aws/lambda-invoke-store': 0.2.4 - '@smithy/protocol-http': 5.3.12 - '@smithy/types': 4.13.1 - tslib: 2.8.1 - '@aws-sdk/middleware-recursion-detection@3.972.9': dependencies: '@aws-sdk/types': 3.973.6 @@ -6624,17 +6328,6 @@ snapshots: '@smithy/types': 4.13.1 tslib: 2.8.1 - '@aws-sdk/middleware-user-agent@3.972.25': - dependencies: - '@aws-sdk/core': 3.973.24 - '@aws-sdk/types': 3.973.6 - '@aws-sdk/util-endpoints': 3.996.5 - '@smithy/core': 3.23.12 - '@smithy/protocol-http': 5.3.12 - '@smithy/types': 4.13.1 - '@smithy/util-retry': 4.2.12 - tslib: 2.8.1 - '@aws-sdk/middleware-user-agent@3.972.27': dependencies: '@aws-sdk/core': 3.973.26 @@ -6661,49 +6354,6 @@ snapshots: '@smithy/util-utf8': 4.2.2 tslib: 2.8.1 - '@aws-sdk/nested-clients@3.996.14': - dependencies: - '@aws-crypto/sha256-browser': 5.2.0 - '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.973.24 - '@aws-sdk/middleware-host-header': 3.972.8 - '@aws-sdk/middleware-logger': 3.972.8 - '@aws-sdk/middleware-recursion-detection': 3.972.8 - '@aws-sdk/middleware-user-agent': 3.972.25 - '@aws-sdk/region-config-resolver': 3.972.9 - '@aws-sdk/types': 3.973.6 - '@aws-sdk/util-endpoints': 3.996.5 - '@aws-sdk/util-user-agent-browser': 3.972.8 - '@aws-sdk/util-user-agent-node': 3.973.11 - '@smithy/config-resolver': 4.4.13 - '@smithy/core': 3.23.12 - '@smithy/fetch-http-handler': 5.3.15 - '@smithy/hash-node': 4.2.12 - '@smithy/invalid-dependency': 4.2.12 - '@smithy/middleware-content-length': 4.2.12 - '@smithy/middleware-endpoint': 4.4.27 - '@smithy/middleware-retry': 4.4.44 - '@smithy/middleware-serde': 4.2.15 - '@smithy/middleware-stack': 4.2.12 - '@smithy/node-config-provider': 4.3.12 - '@smithy/node-http-handler': 4.5.0 - '@smithy/protocol-http': 5.3.12 - '@smithy/smithy-client': 4.12.7 - '@smithy/types': 4.13.1 - '@smithy/url-parser': 4.2.12 - '@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.43 - '@smithy/util-defaults-mode-node': 4.2.47 - '@smithy/util-endpoints': 3.3.3 - '@smithy/util-middleware': 4.2.12 - '@smithy/util-retry': 4.2.12 - '@smithy/util-utf8': 4.2.2 - tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - '@aws-sdk/nested-clients@3.996.17': dependencies: '@aws-crypto/sha256-browser': 5.2.0 @@ -6755,30 +6405,10 @@ snapshots: '@smithy/types': 4.13.1 tslib: 2.8.1 - '@aws-sdk/region-config-resolver@3.972.9': - dependencies: - '@aws-sdk/types': 3.973.6 - '@smithy/config-resolver': 4.4.13 - '@smithy/node-config-provider': 4.3.12 - '@smithy/types': 4.13.1 - tslib: 2.8.1 - - '@aws-sdk/token-providers@3.1015.0': - dependencies: - '@aws-sdk/core': 3.973.24 - '@aws-sdk/nested-clients': 3.996.14 - '@aws-sdk/types': 3.973.6 - '@smithy/property-provider': 4.2.12 - '@smithy/shared-ini-file-loader': 4.4.7 - '@smithy/types': 4.13.1 - tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - '@aws-sdk/token-providers@3.1017.0': dependencies: - '@aws-sdk/core': 3.973.24 - '@aws-sdk/nested-clients': 3.996.14 + '@aws-sdk/core': 3.973.26 + '@aws-sdk/nested-clients': 3.996.17 '@aws-sdk/types': 3.973.6 '@smithy/property-provider': 4.2.12 '@smithy/shared-ini-file-loader': 4.4.7 @@ -6830,15 +6460,6 @@ snapshots: bowser: 2.14.1 tslib: 2.8.1 - '@aws-sdk/util-user-agent-node@3.973.11': - dependencies: - '@aws-sdk/middleware-user-agent': 3.972.25 - '@aws-sdk/types': 3.973.6 - '@smithy/node-config-provider': 4.3.12 - '@smithy/types': 4.13.1 - '@smithy/util-config-provider': 4.2.2 - tslib: 2.8.1 - '@aws-sdk/util-user-agent-node@3.973.13': dependencies: '@aws-sdk/middleware-user-agent': 3.972.27 @@ -6848,12 +6469,6 @@ snapshots: '@smithy/util-config-provider': 4.2.2 tslib: 2.8.1 - '@aws-sdk/xml-builder@3.972.15': - dependencies: - '@smithy/types': 4.13.1 - fast-xml-parser: 5.5.8 - tslib: 2.8.1 - '@aws-sdk/xml-builder@3.972.16': dependencies: '@smithy/types': 4.13.1 @@ -7285,14 +6900,14 @@ snapshots: '@floating-ui/utils@0.2.11': {} - '@google/genai@1.46.0(@modelcontextprotocol/sdk@1.28.0(zod@4.3.6))': + '@google/genai@1.46.0(@modelcontextprotocol/sdk@1.29.0(zod@4.3.6))': dependencies: google-auth-library: 10.6.2 p-retry: 4.6.2 protobufjs: 7.5.4 ws: 8.20.0 optionalDependencies: - '@modelcontextprotocol/sdk': 1.28.0(zod@4.3.6) + '@modelcontextprotocol/sdk': 1.29.0(zod@4.3.6) transitivePeerDependencies: - bufferutil - supports-color @@ -7304,7 +6919,7 @@ snapshots: '@hapi/hoek@9.3.0': {} - '@homebridge/ciao@1.3.5': + '@homebridge/ciao@1.3.6': dependencies: debug: 4.4.3 fast-deep-equal: 3.1.3 @@ -7464,14 +7079,14 @@ snapshots: '@keyv/serialize@1.1.1': {} - '@larksuite/openclaw-lark@2026.3.30(openclaw@2026.3.28(@napi-rs/canvas@0.1.97)(encoding@0.1.13))': + '@larksuite/openclaw-lark@2026.3.31(openclaw@2026.4.1(@napi-rs/canvas@0.1.97)(encoding@0.1.13))': dependencies: '@larksuiteoapi/node-sdk': 1.60.0 '@sinclair/typebox': 0.34.48 image-size: 2.0.2 zod: 4.3.6 optionalDependencies: - openclaw: 2026.3.28(@napi-rs/canvas@0.1.97)(encoding@0.1.13) + openclaw: 2026.4.1(@napi-rs/canvas@0.1.97)(encoding@0.1.13) transitivePeerDependencies: - bufferutil - debug @@ -7588,9 +7203,9 @@ snapshots: std-env: 3.10.0 yoctocolors: 2.1.2 - '@mariozechner/pi-agent-core@0.63.1(@modelcontextprotocol/sdk@1.28.0(zod@4.3.6))(ws@8.20.0)(zod@4.3.6)': + '@mariozechner/pi-agent-core@0.64.0(@modelcontextprotocol/sdk@1.29.0(zod@4.3.6))(ws@8.20.0)(zod@4.3.6)': dependencies: - '@mariozechner/pi-ai': 0.63.1(@modelcontextprotocol/sdk@1.28.0(zod@4.3.6))(ws@8.20.0)(zod@4.3.6) + '@mariozechner/pi-ai': 0.64.0(@modelcontextprotocol/sdk@1.29.0(zod@4.3.6))(ws@8.20.0)(zod@4.3.6) transitivePeerDependencies: - '@modelcontextprotocol/sdk' - aws-crt @@ -7600,13 +7215,13 @@ snapshots: - ws - zod - '@mariozechner/pi-ai@0.63.1(@modelcontextprotocol/sdk@1.28.0(zod@4.3.6))(ws@8.20.0)(zod@4.3.6)': + '@mariozechner/pi-ai@0.64.0(@modelcontextprotocol/sdk@1.29.0(zod@4.3.6))(ws@8.20.0)(zod@4.3.6)': dependencies: '@anthropic-ai/sdk': 0.73.0(zod@4.3.6) '@aws-sdk/client-bedrock-runtime': 3.1017.0 - '@google/genai': 1.46.0(@modelcontextprotocol/sdk@1.28.0(zod@4.3.6)) + '@google/genai': 1.46.0(@modelcontextprotocol/sdk@1.29.0(zod@4.3.6)) '@mistralai/mistralai': 1.14.1 - '@sinclair/typebox': 0.34.48 + '@sinclair/typebox': 0.34.49 ajv: 8.18.0 ajv-formats: 3.0.1(ajv@8.18.0) chalk: 5.6.2 @@ -7624,12 +7239,12 @@ snapshots: - ws - zod - '@mariozechner/pi-coding-agent@0.63.1(@modelcontextprotocol/sdk@1.28.0(zod@4.3.6))(ws@8.20.0)(zod@4.3.6)': + '@mariozechner/pi-coding-agent@0.64.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.63.1(@modelcontextprotocol/sdk@1.28.0(zod@4.3.6))(ws@8.20.0)(zod@4.3.6) - '@mariozechner/pi-ai': 0.63.1(@modelcontextprotocol/sdk@1.28.0(zod@4.3.6))(ws@8.20.0)(zod@4.3.6) - '@mariozechner/pi-tui': 0.63.1 + '@mariozechner/pi-agent-core': 0.64.0(@modelcontextprotocol/sdk@1.29.0(zod@4.3.6))(ws@8.20.0)(zod@4.3.6) + '@mariozechner/pi-ai': 0.64.0(@modelcontextprotocol/sdk@1.29.0(zod@4.3.6))(ws@8.20.0)(zod@4.3.6) + '@mariozechner/pi-tui': 0.64.0 '@silvia-odwyer/photon-node': 0.3.4 ajv: 8.18.0 chalk: 5.6.2 @@ -7657,7 +7272,7 @@ snapshots: - ws - zod - '@mariozechner/pi-tui@0.63.1': + '@mariozechner/pi-tui@0.64.0': dependencies: '@types/mime-types': 2.1.4 chalk: 5.6.2 @@ -7686,7 +7301,7 @@ snapshots: - bufferutil - utf-8-validate - '@modelcontextprotocol/sdk@1.28.0(zod@4.3.6)': + '@modelcontextprotocol/sdk@1.29.0(zod@4.3.6)': dependencies: '@hono/node-server': 1.19.11(hono@4.12.9) ajv: 8.18.0 @@ -8390,12 +8005,9 @@ snapshots: '@sinclair/typebox@0.34.48': {} - '@sindresorhus/is@4.6.0': {} + '@sinclair/typebox@0.34.49': {} - '@smithy/abort-controller@4.2.12': - dependencies: - '@smithy/types': 4.13.1 - tslib: 2.8.1 + '@sindresorhus/is@4.6.0': {} '@smithy/config-resolver@4.4.13': dependencies: @@ -8406,19 +8018,6 @@ snapshots: '@smithy/util-middleware': 4.2.12 tslib: 2.8.1 - '@smithy/core@3.23.12': - dependencies: - '@smithy/protocol-http': 5.3.12 - '@smithy/types': 4.13.1 - '@smithy/url-parser': 4.2.12 - '@smithy/util-base64': 4.3.2 - '@smithy/util-body-length-browser': 4.2.2 - '@smithy/util-middleware': 4.2.12 - '@smithy/util-stream': 4.5.20 - '@smithy/util-utf8': 4.2.2 - '@smithy/uuid': 1.1.2 - tslib: 2.8.1 - '@smithy/core@3.23.13': dependencies: '@smithy/protocol-http': 5.3.12 @@ -8504,17 +8103,6 @@ snapshots: '@smithy/types': 4.13.1 tslib: 2.8.1 - '@smithy/middleware-endpoint@4.4.27': - dependencies: - '@smithy/core': 3.23.12 - '@smithy/middleware-serde': 4.2.15 - '@smithy/node-config-provider': 4.3.12 - '@smithy/shared-ini-file-loader': 4.4.7 - '@smithy/types': 4.13.1 - '@smithy/url-parser': 4.2.12 - '@smithy/util-middleware': 4.2.12 - tslib: 2.8.1 - '@smithy/middleware-endpoint@4.4.28': dependencies: '@smithy/core': 3.23.13 @@ -8526,18 +8114,6 @@ snapshots: '@smithy/util-middleware': 4.2.12 tslib: 2.8.1 - '@smithy/middleware-retry@4.4.44': - dependencies: - '@smithy/node-config-provider': 4.3.12 - '@smithy/protocol-http': 5.3.12 - '@smithy/service-error-classification': 4.2.12 - '@smithy/smithy-client': 4.12.7 - '@smithy/types': 4.13.1 - '@smithy/util-middleware': 4.2.12 - '@smithy/util-retry': 4.2.12 - '@smithy/uuid': 1.1.2 - tslib: 2.8.1 - '@smithy/middleware-retry@4.4.45': dependencies: '@smithy/node-config-provider': 4.3.12 @@ -8550,13 +8126,6 @@ snapshots: '@smithy/uuid': 1.1.2 tslib: 2.8.1 - '@smithy/middleware-serde@4.2.15': - dependencies: - '@smithy/core': 3.23.12 - '@smithy/protocol-http': 5.3.12 - '@smithy/types': 4.13.1 - tslib: 2.8.1 - '@smithy/middleware-serde@4.2.16': dependencies: '@smithy/core': 3.23.13 @@ -8576,14 +8145,6 @@ snapshots: '@smithy/types': 4.13.1 tslib: 2.8.1 - '@smithy/node-http-handler@4.5.0': - dependencies: - '@smithy/abort-controller': 4.2.12 - '@smithy/protocol-http': 5.3.12 - '@smithy/querystring-builder': 4.2.12 - '@smithy/types': 4.13.1 - tslib: 2.8.1 - '@smithy/node-http-handler@4.5.1': dependencies: '@smithy/protocol-http': 5.3.12 @@ -8632,16 +8193,6 @@ snapshots: '@smithy/util-utf8': 4.2.2 tslib: 2.8.1 - '@smithy/smithy-client@4.12.7': - dependencies: - '@smithy/core': 3.23.12 - '@smithy/middleware-endpoint': 4.4.27 - '@smithy/middleware-stack': 4.2.12 - '@smithy/protocol-http': 5.3.12 - '@smithy/types': 4.13.1 - '@smithy/util-stream': 4.5.20 - tslib: 2.8.1 - '@smithy/smithy-client@4.12.8': dependencies: '@smithy/core': 3.23.13 @@ -8690,13 +8241,6 @@ snapshots: dependencies: tslib: 2.8.1 - '@smithy/util-defaults-mode-browser@4.3.43': - dependencies: - '@smithy/property-provider': 4.2.12 - '@smithy/smithy-client': 4.12.7 - '@smithy/types': 4.13.1 - tslib: 2.8.1 - '@smithy/util-defaults-mode-browser@4.3.44': dependencies: '@smithy/property-provider': 4.2.12 @@ -8704,16 +8248,6 @@ snapshots: '@smithy/types': 4.13.1 tslib: 2.8.1 - '@smithy/util-defaults-mode-node@4.2.47': - dependencies: - '@smithy/config-resolver': 4.4.13 - '@smithy/credential-provider-imds': 4.2.12 - '@smithy/node-config-provider': 4.3.12 - '@smithy/property-provider': 4.2.12 - '@smithy/smithy-client': 4.12.7 - '@smithy/types': 4.13.1 - tslib: 2.8.1 - '@smithy/util-defaults-mode-node@4.2.48': dependencies: '@smithy/config-resolver': 4.4.13 @@ -8745,17 +8279,6 @@ snapshots: '@smithy/types': 4.13.1 tslib: 2.8.1 - '@smithy/util-stream@4.5.20': - dependencies: - '@smithy/fetch-http-handler': 5.3.15 - '@smithy/node-http-handler': 4.5.0 - '@smithy/types': 4.13.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 - tslib: 2.8.1 - '@smithy/util-stream@4.5.21': dependencies: '@smithy/fetch-http-handler': 5.3.15 @@ -8785,13 +8308,13 @@ snapshots: dependencies: tslib: 2.8.1 - '@soimy/dingtalk@3.5.1(openclaw@2026.3.28(@napi-rs/canvas@0.1.97)(encoding@0.1.13))': + '@soimy/dingtalk@3.5.1(openclaw@2026.4.1(@napi-rs/canvas@0.1.97)(encoding@0.1.13))': dependencies: axios: 1.13.6(debug@4.4.3) dingtalk-stream: 2.1.5 form-data: 4.0.5 mammoth: 1.12.0 - openclaw: 2026.3.28(@napi-rs/canvas@0.1.97)(encoding@0.1.13) + openclaw: 2026.4.1(@napi-rs/canvas@0.1.97)(encoding@0.1.13) pdf-parse: 2.4.5 zod: 4.3.6 transitivePeerDependencies: @@ -8809,10 +8332,6 @@ snapshots: '@telegraf/types@7.1.0': optional: true - '@tencent-connect/openclaw-qqbot@1.6.7(openclaw@2026.3.28(@napi-rs/canvas@0.1.97)(encoding@0.1.13))': - dependencies: - openclaw: 2026.3.28(@napi-rs/canvas@0.1.97)(encoding@0.1.13) - '@tencent-weixin/openclaw-weixin@2.1.1': dependencies: qrcode-terminal: 0.12.0 @@ -11102,7 +10621,7 @@ snapshots: matrix-events-sdk@0.0.1: {} - matrix-js-sdk@41.2.0: + matrix-js-sdk@41.3.0-rc.0: dependencies: '@babel/runtime': 7.29.2 '@matrix-org/matrix-sdk-crypto-wasm': 18.0.0 @@ -11715,23 +11234,23 @@ snapshots: ws: 8.20.0 zod: 4.3.6 - openclaw@2026.3.28(@napi-rs/canvas@0.1.97)(encoding@0.1.13): + openclaw@2026.4.1(@napi-rs/canvas@0.1.97)(encoding@0.1.13): dependencies: - '@agentclientprotocol/sdk': 0.17.0(zod@4.3.6) + '@agentclientprotocol/sdk': 0.17.1(zod@4.3.6) '@anthropic-ai/vertex-sdk': 0.14.4(encoding@0.1.13)(zod@4.3.6) - '@aws-sdk/client-bedrock': 3.1020.0 '@clack/prompts': 1.1.0 - '@homebridge/ciao': 1.3.5 + '@homebridge/ciao': 1.3.6 '@line/bot-sdk': 10.6.0 '@lydell/node-pty': 1.2.0-beta.3 - '@mariozechner/pi-agent-core': 0.63.1(@modelcontextprotocol/sdk@1.28.0(zod@4.3.6))(ws@8.20.0)(zod@4.3.6) - '@mariozechner/pi-ai': 0.63.1(@modelcontextprotocol/sdk@1.28.0(zod@4.3.6))(ws@8.20.0)(zod@4.3.6) - '@mariozechner/pi-coding-agent': 0.63.1(@modelcontextprotocol/sdk@1.28.0(zod@4.3.6))(ws@8.20.0)(zod@4.3.6) - '@mariozechner/pi-tui': 0.63.1 - '@modelcontextprotocol/sdk': 1.28.0(zod@4.3.6) + '@mariozechner/pi-agent-core': 0.64.0(@modelcontextprotocol/sdk@1.29.0(zod@4.3.6))(ws@8.20.0)(zod@4.3.6) + '@mariozechner/pi-ai': 0.64.0(@modelcontextprotocol/sdk@1.29.0(zod@4.3.6))(ws@8.20.0)(zod@4.3.6) + '@mariozechner/pi-coding-agent': 0.64.0(@modelcontextprotocol/sdk@1.29.0(zod@4.3.6))(ws@8.20.0)(zod@4.3.6) + '@mariozechner/pi-tui': 0.64.0 + '@matrix-org/matrix-sdk-crypto-wasm': 18.0.0 + '@modelcontextprotocol/sdk': 1.29.0(zod@4.3.6) '@mozilla/readability': 0.6.0 '@napi-rs/canvas': 0.1.97 - '@sinclair/typebox': 0.34.48 + '@sinclair/typebox': 0.34.49 ajv: 8.18.0 chalk: 5.6.2 chokidar: 5.0.0 @@ -11750,14 +11269,14 @@ snapshots: linkedom: 0.18.12 long: 5.3.2 markdown-it: 14.1.1 - matrix-js-sdk: 41.2.0 + matrix-js-sdk: 41.3.0-rc.0 node-edge-tts: 1.2.10 osc-progress: 0.3.0 - pdfjs-dist: 5.5.207 + pdfjs-dist: 5.6.205 playwright-core: 1.58.2 qrcode-terminal: 0.12.0 sharp: 0.34.5 - sqlite-vec: 0.1.7 + sqlite-vec: 0.1.9 tar: 7.5.13 tslog: 4.10.2 undici: 7.24.6 @@ -11935,7 +11454,7 @@ snapshots: optionalDependencies: '@napi-rs/canvas': 0.1.97 - pdfjs-dist@5.5.207: + pdfjs-dist@5.6.205: optionalDependencies: '@napi-rs/canvas': 0.1.97 node-readable-to-web-readable-stream: 0.4.2 @@ -12605,28 +12124,28 @@ snapshots: sprintf-js@1.1.3: optional: true - sqlite-vec-darwin-arm64@0.1.7: + sqlite-vec-darwin-arm64@0.1.9: optional: true - sqlite-vec-darwin-x64@0.1.7: + sqlite-vec-darwin-x64@0.1.9: optional: true - sqlite-vec-linux-arm64@0.1.7: + sqlite-vec-linux-arm64@0.1.9: optional: true - sqlite-vec-linux-x64@0.1.7: + sqlite-vec-linux-x64@0.1.9: optional: true - sqlite-vec-windows-x64@0.1.7: + sqlite-vec-windows-x64@0.1.9: optional: true - sqlite-vec@0.1.7: + sqlite-vec@0.1.9: optionalDependencies: - sqlite-vec-darwin-arm64: 0.1.7 - sqlite-vec-darwin-x64: 0.1.7 - sqlite-vec-linux-arm64: 0.1.7 - sqlite-vec-linux-x64: 0.1.7 - sqlite-vec-windows-x64: 0.1.7 + sqlite-vec-darwin-arm64: 0.1.9 + sqlite-vec-darwin-x64: 0.1.9 + sqlite-vec-linux-arm64: 0.1.9 + sqlite-vec-linux-x64: 0.1.9 + sqlite-vec-windows-x64: 0.1.9 ssri@12.0.0: dependencies: diff --git a/scripts/after-pack.cjs b/scripts/after-pack.cjs index b8eb62ba3..e3184e5a6 100644 --- a/scripts/after-pack.cjs +++ b/scripts/after-pack.cjs @@ -575,7 +575,6 @@ exports.default = async function afterPack(context) { const BUNDLED_PLUGINS = [ { npmName: '@soimy/dingtalk', pluginId: 'dingtalk' }, { npmName: '@wecom/wecom-openclaw-plugin', pluginId: 'wecom' }, - { npmName: '@tencent-connect/openclaw-qqbot', pluginId: 'qqbot' }, { npmName: '@larksuite/openclaw-lark', pluginId: 'feishu-openclaw-plugin' }, { npmName: '@tencent-weixin/openclaw-weixin', pluginId: 'openclaw-weixin' }, ]; @@ -597,6 +596,63 @@ exports.default = async function afterPack(context) { } } + // 1.2 Copy built-in extension node_modules that electron-builder skipped. + // OpenClaw 3.31+ ships built-in extensions (discord, qqbot, etc.) under + // dist/extensions//node_modules/. These are skipped by extraResources + // because .gitignore contains "node_modules/". + // + // Extension code is loaded via shared chunks in dist/ (e.g. outbound-*.js) + // which resolve modules from the top-level openclaw/node_modules/, NOT from + // the extension's own node_modules/. So we must merge extension deps into + // the top-level node_modules/ as well. + const buildExtDir = join(__dirname, '..', 'build', 'openclaw', 'dist', 'extensions'); + const packExtDir = join(openclawRoot, 'dist', 'extensions'); + if (existsSync(buildExtDir)) { + let extNMCount = 0; + let mergedPkgCount = 0; + for (const extEntry of readdirSync(buildExtDir, { withFileTypes: true })) { + if (!extEntry.isDirectory()) continue; + const srcNM = join(buildExtDir, extEntry.name, 'node_modules'); + if (!existsSync(srcNM)) continue; + + // Copy to extension's own node_modules (for direct requires from extension code) + const destExtNM = join(packExtDir, extEntry.name, 'node_modules'); + if (!existsSync(destExtNM)) { + cpSync(srcNM, destExtNM, { recursive: true }); + } + extNMCount++; + + // Merge into top-level openclaw/node_modules/ (for shared chunks in dist/) + for (const pkgEntry of readdirSync(srcNM, { withFileTypes: true })) { + if (!pkgEntry.isDirectory() || pkgEntry.name === '.bin') continue; + const srcPkg = join(srcNM, pkgEntry.name); + const destPkg = join(dest, pkgEntry.name); + + if (pkgEntry.name.startsWith('@')) { + // Scoped package — iterate sub-entries + for (const scopeEntry of readdirSync(srcPkg, { withFileTypes: true })) { + if (!scopeEntry.isDirectory()) continue; + const srcScoped = join(srcPkg, scopeEntry.name); + const destScoped = join(destPkg, scopeEntry.name); + if (!existsSync(destScoped)) { + mkdirSync(dirname(destScoped), { recursive: true }); + cpSync(srcScoped, destScoped, { recursive: true }); + mergedPkgCount++; + } + } + } else { + if (!existsSync(destPkg)) { + cpSync(srcPkg, destPkg, { recursive: true }); + mergedPkgCount++; + } + } + } + } + if (extNMCount > 0) { + console.log(`[after-pack] ✅ Copied node_modules for ${extNMCount} built-in extension(s), merged ${mergedPkgCount} packages into top-level.`); + } + } + // 2. General cleanup on the full openclaw directory (not just node_modules) console.log('[after-pack] 🧹 Cleaning up unnecessary files ...'); const removedRoot = cleanupUnnecessaryFiles(openclawRoot); diff --git a/scripts/bundle-openclaw-plugins.mjs b/scripts/bundle-openclaw-plugins.mjs index e5a0ac462..1d349926a 100644 --- a/scripts/bundle-openclaw-plugins.mjs +++ b/scripts/bundle-openclaw-plugins.mjs @@ -38,7 +38,6 @@ function normWin(p) { const PLUGINS = [ { npmName: '@soimy/dingtalk', pluginId: 'dingtalk' }, { npmName: '@wecom/wecom-openclaw-plugin', pluginId: 'wecom' }, - { npmName: '@tencent-connect/openclaw-qqbot', pluginId: 'qqbot' }, { npmName: '@larksuite/openclaw-lark', pluginId: 'feishu-openclaw-plugin' }, { npmName: '@tencent-weixin/openclaw-weixin', pluginId: 'openclaw-weixin' }, ]; diff --git a/scripts/bundle-openclaw.mjs b/scripts/bundle-openclaw.mjs index 7371dc861..f4ca823d3 100644 --- a/scripts/bundle-openclaw.mjs +++ b/scripts/bundle-openclaw.mjs @@ -458,34 +458,7 @@ function patchBrokenModules(nodeModulesDir) { ].join('\n'), }; const replacePatches = [ - { - rel: '@mariozechner/pi-coding-agent/dist/core/bash-executor.js', - search: ` const child = spawn(shell, [...args, command], { - detached: true, - env: getShellEnv(), - stdio: ["ignore", "pipe", "pipe"], - });`, - replace: ` const child = spawn(shell, [...args, command], { - detached: true, - env: getShellEnv(), - stdio: ["ignore", "pipe", "pipe"], - windowsHide: true, - });`, - }, - { - rel: '@mariozechner/pi-coding-agent/dist/core/exec.js', - search: ` const proc = spawn(command, args, { - cwd, - shell: false, - stdio: ["ignore", "pipe", "pipe"], - });`, - replace: ` const proc = spawn(command, args, { - cwd, - shell: false, - stdio: ["ignore", "pipe", "pipe"], - windowsHide: true, - });`, - }, + // Note: @mariozechner/pi-coding-agent is no longer a dep of openclaw 3.31. ]; let count = 0; @@ -671,76 +644,9 @@ function patchBundledRuntime(outputDir) { \t\t}) ? { shell: true } : {} \t});`, }, - { - label: 'agent scope command runner', - target: () => findFirstFileByName(path.join(outputDir, 'dist', 'plugin-sdk'), /^agent-scope-.*\.js$/), - search: `\tconst child = spawn(resolvedCommand, finalArgv.slice(1), { -\t\tstdio, -\t\tcwd, -\t\tenv: resolvedEnv, -\t\twindowsVerbatimArguments, -\t\t...shouldSpawnWithShell({ -\t\t\tresolvedCommand, -\t\t\tplatform: process$1.platform -\t\t}) ? { shell: true } : {} -\t});`, - replace: `\tconst child = spawn(resolvedCommand, finalArgv.slice(1), { -\t\tstdio, -\t\tcwd, -\t\tenv: resolvedEnv, -\t\twindowsVerbatimArguments, -\t\twindowsHide: true, -\t\t...shouldSpawnWithShell({ -\t\t\tresolvedCommand, -\t\t\tplatform: process$1.platform -\t\t}) ? { shell: true } : {} -\t});`, - }, - { - label: 'chrome launcher', - target: () => findFirstFileByName(path.join(outputDir, 'dist', 'plugin-sdk'), /^chrome-.*\.js$/), - search: `\t\treturn spawn(exe.path, args, { -\t\t\tstdio: "pipe", -\t\t\tenv: { -\t\t\t\t...process.env, -\t\t\t\tHOME: os.homedir() -\t\t\t} -\t\t});`, - replace: `\t\treturn spawn(exe.path, args, { -\t\t\tstdio: "pipe", -\t\t\twindowsHide: true, -\t\t\tenv: { -\t\t\t\t...process.env, -\t\t\t\tHOME: os.homedir() -\t\t\t} -\t\t});`, - }, - { - label: 'qmd runner', - target: () => findFirstFileByName(path.join(outputDir, 'dist', 'plugin-sdk'), /^qmd-manager-.*\.js$/), - search: `\t\t\tconst child = spawn(resolveWindowsCommandShim(this.qmd.command), args, { -\t\t\t\tenv: this.env, -\t\t\t\tcwd: this.workspaceDir -\t\t\t});`, - replace: `\t\t\tconst child = spawn(resolveWindowsCommandShim(this.qmd.command), args, { -\t\t\t\tenv: this.env, -\t\t\t\tcwd: this.workspaceDir, -\t\t\t\twindowsHide: true -\t\t\t});`, - }, - { - label: 'mcporter runner', - target: () => findFirstFileByName(path.join(outputDir, 'dist', 'plugin-sdk'), /^qmd-manager-.*\.js$/), - search: `\t\t\tconst child = spawn(resolveWindowsCommandShim("mcporter"), args, { -\t\t\t\tenv: this.env, -\t\t\t\tcwd: this.workspaceDir -\t\t\t});`, - replace: `\t\t\tconst child = spawn(resolveWindowsCommandShim("mcporter"), args, { -\t\t\t\tenv: this.env, -\t\t\t\tcwd: this.workspaceDir, -\t\t\t\twindowsHide: true -\t\t\t});`, - }, + // Note: OpenClaw 3.31 removed the hash-suffixed agent-scope-*.js, chrome-*.js, + // and qmd-manager-*.js files from dist/plugin-sdk/. Patches for those spawn + // sites are no longer needed — the runtime now uses windowsHide natively. ]; let count = 0; diff --git a/src/i18n/locales/en/channels.json b/src/i18n/locales/en/channels.json index 241c6e32f..1c59cc5e9 100644 --- a/src/i18n/locales/en/channels.json +++ b/src/i18n/locales/en/channels.json @@ -368,7 +368,7 @@ ] }, "qqbot": { - "description": "Connect QQ Bot via @tencent-connect/openclaw-qqbot plugin", + "description": "Connect QQ Bot channel (built-in since OpenClaw 3.31)", "docsUrl": "https://icnnp7d0dymg.feishu.cn/wiki/KPIJwlyiGiupMrkiS9ice39Zn2c", "fields": { "appId": { diff --git a/src/i18n/locales/ja/channels.json b/src/i18n/locales/ja/channels.json index e6a6f2723..d7e31f3a2 100644 --- a/src/i18n/locales/ja/channels.json +++ b/src/i18n/locales/ja/channels.json @@ -368,7 +368,7 @@ "docsUrl": "https://docs.openclaw.ai/channels/mattermost" }, "qqbot": { - "description": "@tencent-connect/openclaw-qqbot プラグイン経由で QQ ボットに接続します", + "description": "QQ ボットチャンネルに接続します(OpenClaw 3.31 より内蔵)", "fields": { "appId": { "label": "App ID", diff --git a/src/i18n/locales/zh/channels.json b/src/i18n/locales/zh/channels.json index 38f77b65a..78dfb031c 100644 --- a/src/i18n/locales/zh/channels.json +++ b/src/i18n/locales/zh/channels.json @@ -369,7 +369,7 @@ ] }, "qqbot": { - "description": "通过 @tencent-connect/openclaw-qqbot 插件连接 QQ 机器人", + "description": "连接 QQ 机器人频道(OpenClaw 3.31 起内置)", "docsUrl": "https://icnnp7d0dymg.feishu.cn/wiki/KPIJwlyiGiupMrkiS9ice39Zn2c", "fields": { "appId": { diff --git a/src/types/channel.ts b/src/types/channel.ts index 7832da421..c323c3cac 100644 --- a/src/types/channel.ts +++ b/src/types/channel.ts @@ -151,7 +151,6 @@ export const CHANNEL_META: Record = { 'channels:meta.qqbot.instructions.1', 'channels:meta.qqbot.instructions.2', ], - isPlugin: true, }, dingtalk: { id: 'dingtalk', diff --git a/tests/unit/channel-config.test.ts b/tests/unit/channel-config.test.ts index 9cc542647..b66bb1bfe 100644 --- a/tests/unit/channel-config.test.ts +++ b/tests/unit/channel-config.test.ts @@ -194,7 +194,7 @@ describe('WeCom plugin configuration', () => { expect(channels.whatsapp.enabled).toBe(true); }); - it('keeps configured built-in channels in plugins.allow when a plugin-backed channel is enabled', async () => { + it('saves qqbot as a built-in channel without plugin registration (OpenClaw 3.31+)', async () => { const { saveChannelConfig } = await import('@electron/utils/channel-config'); await saveChannelConfig('discord', { token: 'discord-token' }, 'default'); @@ -202,9 +202,17 @@ describe('WeCom plugin configuration', () => { await saveChannelConfig('qqbot', { appId: 'qq-app', token: 'qq-token', appSecret: 'qq-secret' }, 'default'); const config = await readOpenClawJson(); - const plugins = config.plugins as { allow: string[] }; + const channels = config.channels as Record }>; - expect(plugins.allow).toEqual(expect.arrayContaining(['openclaw-qqbot', 'discord', 'whatsapp'])); + // QQBot config should be saved under channels.qqbot + expect(channels.qqbot.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(); + } }); }); diff --git a/tests/unit/channel-routes.test.ts b/tests/unit/channel-routes.test.ts index f87e37e25..a67c17ee8 100644 --- a/tests/unit/channel-routes.test.ts +++ b/tests/unit/channel-routes.test.ts @@ -37,7 +37,6 @@ vi.mock('@electron/utils/agent-config', () => ({ vi.mock('@electron/utils/plugin-install', () => ({ ensureDingTalkPluginInstalled: vi.fn(), ensureFeishuPluginInstalled: vi.fn(), - ensureQQBotPluginInstalled: vi.fn(), ensureWeChatPluginInstalled: vi.fn(), ensureWeComPluginInstalled: vi.fn(), }));