UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

81 lines (80 loc) 3.19 kB
//#region src/context-engine/host-compat.ts /** Return whether an engine implements the durable method matching its declared contract. */ function supportsContextEngineDurableTurnAdvancement(engine) { return engine.info.transcriptSemantics?.turnAdvancementIdempotency === "atomic-idempotent-v1" && typeof engine.commitTurn === "function"; } const GENERIC_CLI_CONTEXT_ENGINE_HOST_CAPABILITIES = [ "bootstrap", "after-turn", "maintain" ]; const OPENCLAW_EMBEDDED_CONTEXT_ENGINE_HOST = { id: "openclaw-embedded", label: "OpenClaw embedded runner", capabilities: [ "bootstrap", "assemble-before-prompt", "after-turn", "maintain", "compact", "runtime-llm-complete" ] }; const CODEX_APP_SERVER_CONTEXT_ENGINE_HOST = { id: "codex-app-server", label: "Codex app-server harness", capabilities: [ "bootstrap", "assemble-before-prompt", "after-turn", "maintain", "compact", "runtime-llm-complete", "thread-bootstrap-projection" ] }; /** Build the default host support advertised by the generic CLI runner. */ function buildGenericCliContextEngineHostSupport(params) { return { id: `cli:${params.backendId}`, label: `CLI backend "${params.backendId}"`, capabilities: params.capabilities ?? GENERIC_CLI_CONTEXT_ENGINE_HOST_CAPABILITIES }; } /** Evaluate whether a context-engine host can safely run the requested operation. */ function evaluateContextEngineHostSupport(params) { const requirements = params.contextEngineInfo.hostRequirements?.[params.operation]; if (!requirements || requirements.requiredCapabilities.length === 0) return { ok: true, requirements, missingCapabilities: [] }; const supported = new Set(params.host.capabilities); const missingCapabilities = requirements.requiredCapabilities.filter((capability) => !supported.has(capability)); if (missingCapabilities.length === 0) return { ok: true, requirements, missingCapabilities: [] }; return { ok: false, requirements, missingCapabilities }; } /** Assert that a context engine can safely run under the supplied host. */ function assertContextEngineHostSupport(params) { const evaluation = evaluateContextEngineHostSupport({ contextEngineInfo: params.contextEngine.info, operation: params.operation, host: params.host }); if (evaluation.ok) return; const engineId = params.contextEngine.info.id; const required = evaluation.requirements.requiredCapabilities.join(", "); const actual = params.host.capabilities.length > 0 ? params.host.capabilities.join(", ") : "(none)"; const guidance = evaluation.requirements.unsupportedMessage ? ` ${evaluation.requirements.unsupportedMessage}` : ""; throw new Error(`Context engine "${engineId}" cannot run operation "${params.operation}" on ${params.host.label}. Missing host capabilities: ${evaluation.missingCapabilities.join(", ")}. Required capabilities: ${required}. Host capabilities: ${actual}.${guidance}`); } //#endregion export { evaluateContextEngineHostSupport as a, buildGenericCliContextEngineHostSupport as i, OPENCLAW_EMBEDDED_CONTEXT_ENGINE_HOST as n, supportsContextEngineDurableTurnAdvancement as o, assertContextEngineHostSupport as r, CODEX_APP_SERVER_CONTEXT_ENGINE_HOST as t };