From 23269d2db53e43540fdd23c617280e73edc1ce50 Mon Sep 17 00:00:00 2001 From: Brian <95547369+zhuisDEV@users.noreply.github.com> Date: Mon, 13 Apr 2026 06:22:15 -0700 Subject: [PATCH] fix: report context-engine IDs in plugin inspect --- CHANGELOG.md | 1 + src/plugins/loader.test.ts | 6 ++++++ src/plugins/loader.ts | 1 + src/plugins/registry-types.ts | 1 + src/plugins/registry.ts | 4 ++++ src/plugins/status.test-helpers.ts | 1 + src/plugins/status.test.ts | 3 ++- src/plugins/status.ts | 5 ++++- 8 files changed, 20 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f8cbdfeecc9..e7d4c0e5536 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ Docs: https://docs.openclaw.ai - Agents/context engines: run opt-in turn maintenance as idle-aware background work so the next foreground turn no longer waits on proactive maintenance. (#65233) thanks @100yenadmin +- Plugins/status: report the registered context-engine IDs in `plugins inspect` instead of the owning plugin ID, so non-matching engine IDs and multi-engine plugins are classified correctly. (#58766) thanks @zhuisDEV ## 2026.4.12 ### Changes diff --git a/src/plugins/loader.test.ts b/src/plugins/loader.test.ts index c8ff13cd30f..f25ec8e78fe 100644 --- a/src/plugins/loader.test.ts +++ b/src/plugins/loader.test.ts @@ -2608,6 +2608,12 @@ module.exports = { id: "throws-after-import", register() {} };`, selectCount: () => 1, duplicateMessage: "context engine already registered: shared-context-engine-loader-test (plugin:context-engine-owner-a)", + assertPrimaryOwner: (registry: ReturnType) => { + expect( + registry.plugins.find((entry) => entry.id === "context-engine-owner-a") + ?.contextEngineIds, + ).toEqual(["shared-context-engine-loader-test"]); + }, assert: expectDuplicateRegistrationResult, }, { diff --git a/src/plugins/loader.ts b/src/plugins/loader.ts index 8e9ce34261b..5194c4c6224 100644 --- a/src/plugins/loader.ts +++ b/src/plugins/loader.ts @@ -733,6 +733,7 @@ function createPluginRecord(params: { musicGenerationProviderIds: [], webFetchProviderIds: [], webSearchProviderIds: [], + contextEngineIds: [], memoryEmbeddingProviderIds: [], agentHarnessIds: [], gatewayMethods: [], diff --git a/src/plugins/registry-types.ts b/src/plugins/registry-types.ts index fbd62a77b44..578bf42cdc2 100644 --- a/src/plugins/registry-types.ts +++ b/src/plugins/registry-types.ts @@ -246,6 +246,7 @@ export type PluginRecord = { musicGenerationProviderIds: string[]; webFetchProviderIds: string[]; webSearchProviderIds: string[]; + contextEngineIds?: string[]; memoryEmbeddingProviderIds: string[]; agentHarnessIds: string[]; gatewayMethods: string[]; diff --git a/src/plugins/registry.ts b/src/plugins/registry.ts index f30fe801399..fa6f241efbd 100644 --- a/src/plugins/registry.ts +++ b/src/plugins/registry.ts @@ -1220,6 +1220,10 @@ export function createPluginRegistry(registryParams: PluginRegistryParams) { source: record.source, message: `context engine already registered: ${id} (${result.existingOwner})`, }); + return; + } + if (!record.contextEngineIds?.includes(id)) { + record.contextEngineIds = [...(record.contextEngineIds ?? []), id]; } }, registerCompactionProvider: ( diff --git a/src/plugins/status.test-helpers.ts b/src/plugins/status.test-helpers.ts index d4b0d764dd6..d76edf74555 100644 --- a/src/plugins/status.test-helpers.ts +++ b/src/plugins/status.test-helpers.ts @@ -59,6 +59,7 @@ export function createPluginRecord( musicGenerationProviderIds: [], webFetchProviderIds: [], webSearchProviderIds: [], + contextEngineIds: [], memoryEmbeddingProviderIds: [], agentHarnessIds: [], gatewayMethods: [], diff --git a/src/plugins/status.test.ts b/src/plugins/status.test.ts index ceaa474d51b..bbed67b61b0 100644 --- a/src/plugins/status.test.ts +++ b/src/plugins/status.test.ts @@ -663,6 +663,7 @@ describe("plugin status reports", () => { id: "moon", name: "Moon", kind: "context-engine", + contextEngineIds: ["moon-engine"], hookCount: 1, }), ], @@ -676,7 +677,7 @@ describe("plugin status reports", () => { capabilityMode: "plain", capabilityKinds: ["context-engine"], }); - expect(inspect.capabilities).toEqual([{ kind: "context-engine", ids: ["moon"] }]); + expect(inspect.capabilities).toEqual([{ kind: "context-engine", ids: ["moon-engine"] }]); expect(inspect.compatibility).toEqual([]); expectNoCompatibilityWarnings(); }); diff --git a/src/plugins/status.ts b/src/plugins/status.ts index 0a10d662eb9..e8fee4010ef 100644 --- a/src/plugins/status.ts +++ b/src/plugins/status.ts @@ -253,7 +253,10 @@ function buildCapabilityEntries(plugin: PluginRegistry["plugins"][number]) { { kind: "agent-harness" as const, ids: plugin.agentHarnessIds }, { kind: "context-engine" as const, - ids: plugin.status === "loaded" && hasKind(plugin.kind, "context-engine") ? [plugin.id] : [], + ids: + plugin.status === "loaded" && hasKind(plugin.kind, "context-engine") + ? (plugin.contextEngineIds ?? []) + : [], }, { kind: "channel" as const, ids: plugin.channelIds }, ].filter((entry) => entry.ids.length > 0);