UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

83 lines (82 loc) 3.31 kB
import { t as createSubsystemLogger } from "./subsystem-BzXSmsuh.js"; //#region src/agents/harness/registry.ts /** * Registry for native agent harness implementations and lifecycle cleanup. */ /** * Process-wide registry for agent harnesses contributed by core and runtime plugins. * * The registry is global-symbol backed so repeated imports, test module resets, and plugin lazy * loads share one harness table inside a running gateway process. */ const AGENT_HARNESS_REGISTRY_STATE = Symbol.for("openclaw.agentHarnessRegistryState"); const log = createSubsystemLogger("agents/harness"); function getAgentHarnessRegistryState() { const globalState = globalThis; globalState[AGENT_HARNESS_REGISTRY_STATE] ??= { harnesses: /* @__PURE__ */ new Map() }; return globalState[AGENT_HARNESS_REGISTRY_STATE]; } /** Registers or replaces an agent harness under its trimmed id. */ function registerAgentHarness(harness, options) { const id = harness.id.trim(); getAgentHarnessRegistryState().harnesses.set(id, { harness: { ...harness, id, pluginId: harness.pluginId ?? options?.ownerPluginId }, ownerPluginId: options?.ownerPluginId }); } /** Returns the harness plus plugin ownership metadata for registry diagnostics. */ function getRegisteredAgentHarness(id) { return getAgentHarnessRegistryState().harnesses.get(id.trim()); } /** Lists registered harness ids in insertion order. */ function listAgentHarnessIds() { return [...getAgentHarnessRegistryState().harnesses.keys()]; } /** Lists registered harness records for selection and lifecycle fan-out. */ function listRegisteredAgentHarnesses() { return Array.from(getAgentHarnessRegistryState().harnesses.values()); } /** Clears all harnesses; intended for tests and controlled registry reloads. */ function clearAgentHarnesses() { getAgentHarnessRegistryState().harnesses.clear(); } /** Restores a prior harness snapshot after tests temporarily replace the registry. */ function restoreRegisteredAgentHarnesses(entries) { const map = getAgentHarnessRegistryState().harnesses; map.clear(); for (const entry of entries) map.set(entry.harness.id, entry); } /** Calls each registered harness session-reset hook without letting one failure stop the fan-out. */ async function resetRegisteredAgentHarnessSessions(params) { await Promise.all(listRegisteredAgentHarnesses().map(async (entry) => { if (!entry.harness.reset) return; try { await entry.harness.reset(params); } catch (error) { log.warn(`${entry.harness.label} session reset hook failed`, { harnessId: entry.harness.id, error }); } })); } /** Calls each registered harness dispose hook during registry shutdown or reload. */ async function disposeRegisteredAgentHarnesses() { await Promise.all(listRegisteredAgentHarnesses().map(async (entry) => { if (!entry.harness.dispose) return; try { await entry.harness.dispose(); } catch (error) { log.warn(`${entry.harness.label} dispose hook failed`, { harnessId: entry.harness.id, error }); } })); } //#endregion export { listRegisteredAgentHarnesses as a, restoreRegisteredAgentHarnesses as c, listAgentHarnessIds as i, disposeRegisteredAgentHarnesses as n, registerAgentHarness as o, getRegisteredAgentHarness as r, resetRegisteredAgentHarnessSessions as s, clearAgentHarnesses as t };