openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
100 lines (99 loc) • 4.08 kB
JavaScript
import { a as normalizeOptionalAgentRuntimeId, r as isDefaultAgentRuntimeId } from "./agent-runtime-id-DiL2DId7.js";
import { n as resolveAgentHarnessPolicy } from "./harness-runtimes-B7OdBY2U.js";
import { g as resolveOwningPluginIdsForProviderRef, o as resolveActivatableProviderOwnerPluginIds, s as resolveBundledProviderCompatPluginIds } from "./plugin-auto-enable-pAtqig-B.js";
import { r as withActivatedPluginIds } from "./activation-context-DZa7Hp0V.js";
//#region src/agents/harness/runtime-plugin.ts
/**
* Lazy-loads plugin-backed harness runtimes before selection.
*
* Only cold-loadable runtimes live here; always-loaded core/openclaw runtimes should not trigger
* plugin registry scans on every embedded-agent turn.
*/
const COLD_LOADABLE_HARNESS_PLUGIN_IDS = new Set(["codex", "copilot"]);
function dedupePluginIds(values) {
const seen = /* @__PURE__ */ new Set();
const result = [];
for (const value of values) {
const pluginId = value.trim();
if (!pluginId || seen.has(pluginId)) continue;
seen.add(pluginId);
result.push(pluginId);
}
return result;
}
function restrictiveAllowlistOmitsPlugin(config, pluginId) {
const allow = config?.plugins?.allow ?? [];
return allow.length > 0 && !allow.includes(pluginId);
}
function resolveHarnessPluginIds(params) {
if (params.runtime !== "codex") return [params.runtime];
if (restrictiveAllowlistOmitsPlugin(params.config, "codex")) return ["codex"];
const providerOwnerPluginIds = dedupePluginIds(resolveOwningPluginIdsForProviderRef({
provider: params.provider,
config: params.config,
workspaceDir: params.workspaceDir
}) ?? []);
if (providerOwnerPluginIds.length === 0) return ["codex"];
const safeProviderOwnerPluginIds = dedupePluginIds([...resolveBundledProviderCompatPluginIds({
config: params.config,
workspaceDir: params.workspaceDir,
onlyPluginIds: providerOwnerPluginIds
}), ...resolveActivatableProviderOwnerPluginIds({
pluginIds: providerOwnerPluginIds,
config: params.config,
workspaceDir: params.workspaceDir
})]);
return dedupePluginIds(["codex", ...providerOwnerPluginIds.filter((pluginId) => pluginId !== "codex" && safeProviderOwnerPluginIds.includes(pluginId))]);
}
function withRuntimePluginIdsAllowed(params) {
if (params.pluginIds.length === 0) return params.config;
if (restrictiveAllowlistOmitsPlugin(params.config, params.requiredPluginId)) return params.config;
const allow = dedupePluginIds([...params.config?.plugins?.allow ?? [], ...params.pluginIds]);
return {
...params.config,
plugins: {
...params.config?.plugins,
allow
}
};
}
/** Ensures the plugin that owns the selected harness runtime is loaded before harness selection. */
async function ensureSelectedAgentHarnessPlugin(params) {
const runtimeOverride = normalizeOptionalAgentRuntimeId(params.agentHarnessRuntimeOverride);
const policy = resolveAgentHarnessPolicy({
provider: params.provider,
modelId: params.modelId,
config: params.config,
agentId: params.agentId,
sessionKey: params.sessionKey
});
const runtime = runtimeOverride && !isDefaultAgentRuntimeId(runtimeOverride) ? runtimeOverride : policy.runtime;
if (isDefaultAgentRuntimeId(runtime) || runtime === "openclaw" || !COLD_LOADABLE_HARNESS_PLUGIN_IDS.has(runtime)) return;
const { ensurePluginRegistryLoaded } = await import("./runtime-registry-loader-PUy5EEon.js");
const pluginIds = resolveHarnessPluginIds({
runtime,
provider: params.provider,
config: params.config,
workspaceDir: params.workspaceDir
});
const configWithAllowedRuntimePlugins = withRuntimePluginIdsAllowed({
config: params.config,
requiredPluginId: runtime,
pluginIds
});
const activatedConfig = withActivatedPluginIds({
config: configWithAllowedRuntimePlugins,
pluginIds
}) ?? configWithAllowedRuntimePlugins;
ensurePluginRegistryLoaded({
scope: "all",
...activatedConfig ? {
config: activatedConfig,
activationSourceConfig: activatedConfig
} : {},
workspaceDir: params.workspaceDir,
onlyPluginIds: pluginIds
});
}
//#endregion
export { ensureSelectedAgentHarnessPlugin as t };