File size: 1,287 Bytes
76289e7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import type { OpenClawConfig } from "../config/types.js";
import {
  normalizePluginId,
  normalizePluginsConfig,
  resolveSelectedContextEnginePluginIdFromConfig,
} from "../plugins/config-state.js";
import type { ContextEngineRegistration } from "../plugins/registry-contribution-types.js";
import { defaultSlotIdForKey } from "../plugins/slots.js";
import { pluginIdFromContextEngineOwner } from "./registry-adoption.js";

/** Applies canonical plugin policy to a registered engine without changing its engine ID. */
export function resolveEffectiveContextEngineId(
  config: OpenClawConfig | undefined,
  entries: ReadonlyMap<string, ContextEngineRegistration>,
): string {
  const plugins = normalizePluginsConfig(config?.plugins);
  const engineId = plugins.slots.contextEngine;
  const defaultEngineId = defaultSlotIdForKey("contextEngine");
  if (!engineId || engineId === defaultEngineId) {
    return defaultEngineId;
  }
  const entry = entries.get(engineId);
  // An absent registration retains the existing equal-ID selection contract and failure path.
  const pluginId = (entry && pluginIdFromContextEngineOwner(entry.owner)) ?? engineId;
  return resolveSelectedContextEnginePluginIdFromConfig(plugins, normalizePluginId(pluginId))
    ? engineId
    : defaultEngineId;
}