diff --git a/CHANGELOG.md b/CHANGELOG.md index 13808f21703..9be56b00d81 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ Docs: https://docs.openclaw.ai - Plugins/models: wire manifest `modelCatalog.aliases` and `modelCatalog.suppressions` into model-catalog planning and built-in model suppression, with OpenAI stale Spark suppression now declared in the plugin manifest before runtime fallback. Thanks @shakkernerd. - Channels/Yuanbao: register the Tencent Yuanbao external channel plugin (`openclaw-plugin-yuanbao`) in the official channel catalog, contract suites, and community plugin docs, with a new `docs/channels/yuanbao.md` quick-start guide for WebSocket bot DMs and group chats. (#72756) Thanks @loongfay. - Channels/QQBot: add full group chat support (history tracking, @-mention gating, activation modes, per-group config, FIFO message queue with deliver debounce), C2C `stream_messages` streaming with a `StreamingController` lifecycle manager, unified `sendMedia` with chunked upload for large files, and refactor the engine into pipeline stages, focused outbound submodules, builtin slash-command modules, and explicit DI ports via `createEngineAdapters()`. (#70624) Thanks @cxyhhhhh. +- Gateway/startup: reuse lookup-table plugin manifests when loading startup plugins so Gateway boot avoids rebuilding plugin discovery and manifest metadata. Thanks @shakkernerd. - Gateway/runtime: reuse the current plugin metadata snapshot for provider discovery so repeated model-provider discovery avoids rebuilding plugin manifest metadata. Thanks @shakkernerd. - Gateway/startup: pass the plugin metadata snapshot from config validation into plugin bootstrap so startup reuses one manifest product instead of rebuilding plugin metadata. Thanks @shakkernerd. - Plugin SDK/testing: move core-only channel contract fixtures under the channel contract test tree and retire the old `test/helpers/channels` bridge directory so plugin tests stay on focused SDK surfaces. Thanks @vincentkoc. diff --git a/src/gateway/server-plugins.test.ts b/src/gateway/server-plugins.test.ts index 179f8b83730..f6e54ad3682 100644 --- a/src/gateway/server-plugins.test.ts +++ b/src/gateway/server-plugins.test.ts @@ -450,6 +450,7 @@ describe("loadGatewayPlugins", () => { }); expect(loadOpenClawPlugins).toHaveBeenCalledWith( expect.objectContaining({ + manifestRegistry, onlyPluginIds: ["telegram"], }), ); @@ -1279,6 +1280,7 @@ describe("loadGatewayPlugins", () => { }); expect(loadOpenClawPlugins).toHaveBeenCalledWith( expect.objectContaining({ + manifestRegistry, onlyPluginIds: ["discord"], }), ); diff --git a/src/gateway/server-plugins.ts b/src/gateway/server-plugins.ts index 6bc76a0ede1..ca87d0e7225 100644 --- a/src/gateway/server-plugins.ts +++ b/src/gateway/server-plugins.ts @@ -581,6 +581,9 @@ export function loadGatewayPlugins(params: { }, preferSetupRuntimeForChannelPlugins: params.preferSetupRuntimeForChannelPlugins, bundledRuntimeDepsInstaller: params.bundledRuntimeDepsInstaller, + ...(params.pluginLookUpTable?.manifestRegistry + ? { manifestRegistry: params.pluginLookUpTable.manifestRegistry } + : {}), }); const pluginMethods = Object.keys(pluginRegistry.gatewayHandlers); const gatewayMethods = Array.from(new Set([...params.baseMethods, ...pluginMethods]));