From fbf0a29195e54a4624207aacc16d7e179c0ef8f0 Mon Sep 17 00:00:00 2001 From: Shakker Date: Mon, 27 Apr 2026 07:24:16 +0100 Subject: [PATCH] refactor: expand plugin lookup owner maps --- src/plugins/plugin-lookup-table.test.ts | 20 +++++++++++++++++++ src/plugins/plugin-lookup-table.ts | 26 +++++++++++++++++++++++++ 2 files changed, 46 insertions(+) diff --git a/src/plugins/plugin-lookup-table.test.ts b/src/plugins/plugin-lookup-table.test.ts index 8905c6c5acb..e12175d9770 100644 --- a/src/plugins/plugin-lookup-table.test.ts +++ b/src/plugins/plugin-lookup-table.test.ts @@ -106,11 +106,27 @@ describe("loadPluginLookUpTable", () => { id: "telegram", origin: "bundled", channels: ["telegram"], + channelConfigs: { + telegram: { + schema: { type: "object" }, + }, + }, + commandAliases: [{ name: "telegram-send" }], + contracts: { + tools: ["telegram.send"], + }, }), createManifestRecord({ id: "openai", origin: "bundled", providers: ["openai", "openai-codex"], + modelCatalog: { + providers: { + openai: { + models: [{ id: "gpt-test" }], + }, + }, + }, cliBackends: ["codex-cli"], setup: { providers: [{ id: "openai" }], @@ -146,9 +162,13 @@ describe("loadPluginLookUpTable", () => { expect(table.byPluginId.get("telegram")?.id).toBe("telegram"); expect(table.normalizePluginId("openai-codex")).toBe("openai"); expect(table.owners.channels.get("telegram")).toEqual(["telegram"]); + expect(table.owners.channelConfigs.get("telegram")).toEqual(["telegram"]); expect(table.owners.providers.get("openai")).toEqual(["openai"]); + expect(table.owners.modelCatalogProviders.get("openai")).toEqual(["openai"]); expect(table.owners.cliBackends.get("codex-cli")).toEqual(["openai"]); expect(table.owners.setupProviders.get("openai")).toEqual(["openai"]); + expect(table.owners.commandAliases.get("telegram-send")).toEqual(["telegram"]); + expect(table.owners.contracts.get("tools")).toEqual(["telegram"]); expect(table.startup.channelPluginIds).toEqual(["telegram"]); expect(table.startup.configuredDeferredChannelPluginIds).toEqual([]); expect(table.startup.pluginIds).toEqual(["telegram"]); diff --git a/src/plugins/plugin-lookup-table.ts b/src/plugins/plugin-lookup-table.ts index cf4615e8d15..3ff905e1805 100644 --- a/src/plugins/plugin-lookup-table.ts +++ b/src/plugins/plugin-lookup-table.ts @@ -17,9 +17,13 @@ import { export type PluginLookUpTableOwnerMaps = { channels: ReadonlyMap; + channelConfigs: ReadonlyMap; providers: ReadonlyMap; + modelCatalogProviders: ReadonlyMap; cliBackends: ReadonlyMap; setupProviders: ReadonlyMap; + commandAliases: ReadonlyMap; + contracts: ReadonlyMap; }; export type PluginLookUpTableStartupPlan = { @@ -66,30 +70,52 @@ function freezeOwnerMap(owners: Map): ReadonlyMap(); + const channelConfigs = new Map(); const providers = new Map(); + const modelCatalogProviders = new Map(); const cliBackends = new Map(); const setupProviders = new Map(); + const commandAliases = new Map(); + const contracts = new Map(); for (const plugin of plugins) { for (const channelId of plugin.channels) { appendOwner(channels, channelId, plugin.id); } + for (const channelId of Object.keys(plugin.channelConfigs ?? {})) { + appendOwner(channelConfigs, channelId, plugin.id); + } for (const providerId of plugin.providers) { appendOwner(providers, providerId, plugin.id); } + for (const providerId of Object.keys(plugin.modelCatalog?.providers ?? {})) { + appendOwner(modelCatalogProviders, providerId, plugin.id); + } for (const cliBackendId of plugin.cliBackends) { appendOwner(cliBackends, cliBackendId, plugin.id); } for (const setupProvider of plugin.setup?.providers ?? []) { appendOwner(setupProviders, setupProvider.id, plugin.id); } + for (const commandAlias of plugin.commandAliases ?? []) { + appendOwner(commandAliases, commandAlias.name, plugin.id); + } + for (const [contract, values] of Object.entries(plugin.contracts ?? {})) { + if (Array.isArray(values) && values.length > 0) { + appendOwner(contracts, contract, plugin.id); + } + } } return { channels: freezeOwnerMap(channels), + channelConfigs: freezeOwnerMap(channelConfigs), providers: freezeOwnerMap(providers), + modelCatalogProviders: freezeOwnerMap(modelCatalogProviders), cliBackends: freezeOwnerMap(cliBackends), setupProviders: freezeOwnerMap(setupProviders), + commandAliases: freezeOwnerMap(commandAliases), + contracts: freezeOwnerMap(contracts), }; }