From 848348f423b54db196aff88adb3723251f269c97 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Mon, 20 Apr 2026 14:01:54 +0100 Subject: [PATCH] refactor: share active plugin runtime lookup --- src/plugins/active-runtime-registry.ts | 28 ++++++++++++++++++++++++++ src/plugins/cli-backends.runtime.ts | 26 ++---------------------- src/plugins/text-transforms.runtime.ts | 26 ++---------------------- 3 files changed, 32 insertions(+), 48 deletions(-) create mode 100644 src/plugins/active-runtime-registry.ts diff --git a/src/plugins/active-runtime-registry.ts b/src/plugins/active-runtime-registry.ts new file mode 100644 index 00000000000..336248801a2 --- /dev/null +++ b/src/plugins/active-runtime-registry.ts @@ -0,0 +1,28 @@ +import { createRequire } from "node:module"; +import type { PluginRegistry } from "./registry-types.js"; + +type PluginRuntimeModule = Pick; + +const require = createRequire(import.meta.url); +const RUNTIME_MODULE_CANDIDATES = ["./runtime.js", "./runtime.ts"] as const; + +let pluginRuntimeModule: PluginRuntimeModule | undefined; + +function loadPluginRuntime(): PluginRuntimeModule | null { + if (pluginRuntimeModule) { + return pluginRuntimeModule; + } + for (const candidate of RUNTIME_MODULE_CANDIDATES) { + try { + pluginRuntimeModule = require(candidate) as PluginRuntimeModule; + return pluginRuntimeModule; + } catch { + // Try built/runtime source candidates in order. + } + } + return null; +} + +export function getActiveRuntimePluginRegistry(): PluginRegistry | null { + return loadPluginRuntime()?.getActivePluginRegistry() ?? null; +} diff --git a/src/plugins/cli-backends.runtime.ts b/src/plugins/cli-backends.runtime.ts index 63d2eda60c7..bdd19855305 100644 --- a/src/plugins/cli-backends.runtime.ts +++ b/src/plugins/cli-backends.runtime.ts @@ -1,34 +1,12 @@ -import { createRequire } from "node:module"; +import { getActiveRuntimePluginRegistry } from "./active-runtime-registry.js"; import type { CliBackendPlugin } from "./cli-backend.types.js"; export type PluginCliBackendEntry = CliBackendPlugin & { pluginId: string; }; -type PluginRuntimeModule = Pick; - -const require = createRequire(import.meta.url); -const RUNTIME_MODULE_CANDIDATES = ["./runtime.js", "./runtime.ts"] as const; - -let pluginRuntimeModule: PluginRuntimeModule | undefined; - -function loadPluginRuntime(): PluginRuntimeModule | null { - if (pluginRuntimeModule) { - return pluginRuntimeModule; - } - for (const candidate of RUNTIME_MODULE_CANDIDATES) { - try { - pluginRuntimeModule = require(candidate) as PluginRuntimeModule; - return pluginRuntimeModule; - } catch { - // Try source/runtime candidates in order. - } - } - return null; -} - export function resolveRuntimeCliBackends(): PluginCliBackendEntry[] { - return (loadPluginRuntime()?.getActivePluginRegistry()?.cliBackends ?? []).map((entry) => + return (getActiveRuntimePluginRegistry()?.cliBackends ?? []).map((entry) => Object.assign({}, entry.backend, { pluginId: entry.pluginId }), ); } diff --git a/src/plugins/text-transforms.runtime.ts b/src/plugins/text-transforms.runtime.ts index 7c5f0185f92..5a6fd91ec89 100644 --- a/src/plugins/text-transforms.runtime.ts +++ b/src/plugins/text-transforms.runtime.ts @@ -1,31 +1,9 @@ -import { createRequire } from "node:module"; import { mergePluginTextTransforms } from "../agents/plugin-text-transforms.js"; +import { getActiveRuntimePluginRegistry } from "./active-runtime-registry.js"; import type { PluginTextTransforms } from "./types.js"; -type PluginRuntimeModule = Pick; - -const require = createRequire(import.meta.url); -const RUNTIME_MODULE_CANDIDATES = ["./runtime.js", "./runtime.ts"] as const; - -let pluginRuntimeModule: PluginRuntimeModule | undefined; - -function loadPluginRuntime(): PluginRuntimeModule | null { - if (pluginRuntimeModule) { - return pluginRuntimeModule; - } - for (const candidate of RUNTIME_MODULE_CANDIDATES) { - try { - pluginRuntimeModule = require(candidate) as PluginRuntimeModule; - return pluginRuntimeModule; - } catch { - // Try source/runtime candidates in order. - } - } - return null; -} - export function resolveRuntimeTextTransforms(): PluginTextTransforms | undefined { - const registry = loadPluginRuntime()?.getActivePluginRegistry(); + const registry = getActiveRuntimePluginRegistry(); const pluginTextTransforms = Array.isArray(registry?.textTransforms) ? registry.textTransforms.map((entry) => entry.transforms) : [];