UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

89 lines (88 loc) 3.38 kB
import { a as normalizeLowercaseStringOrEmpty, c as normalizeOptionalString } from "./string-coerce-mnp54Vah.js"; import { i as formatErrorMessage } from "./errors-BXgSefBE.js"; import { r as logVerbose } from "./globals-GTrXU4s9.js"; import { t as getAcpSessionManager } from "./manager-D3LiuKaT.js"; import "./session-meta-BuCj-TpW.js"; import { o as buildConfiguredAcpSessionKey } from "./binding-registry-DEX4J6tW.js"; import "./persistent-bindings.resolve-BqprpTKz.js"; //#region src/acp/persistent-bindings.lifecycle.ts /** Ensures configured channel-to-ACP bindings have live sessions and matching runtime options. */ function sessionMatchesConfiguredBinding(params) { if (params.meta.state === "error") return false; const desiredAgent = normalizeLowercaseStringOrEmpty(params.spec.acpAgentId ?? params.spec.agentId); const currentAgent = normalizeLowercaseStringOrEmpty(params.meta.agent); if (!currentAgent || currentAgent !== desiredAgent) return false; if (params.meta.mode !== params.spec.mode) return false; const desiredBackend = normalizeOptionalString(params.spec.backend) ?? normalizeOptionalString(params.cfg.acp?.backend) ?? ""; if (desiredBackend) { const currentBackend = (params.meta.backend ?? "").trim(); if (!currentBackend || currentBackend !== desiredBackend) return false; } const desiredCwd = normalizeOptionalString(params.spec.cwd); if (desiredCwd !== void 0) { if (desiredCwd !== (params.meta.runtimeOptions?.cwd ?? params.meta.cwd ?? "").trim()) return false; } return true; } /** Creates or replaces the ACP session required by one configured binding. */ async function ensureConfiguredAcpBindingSession(params) { const sessionKey = buildConfiguredAcpSessionKey(params.spec); const acpManager = getAcpSessionManager(); try { const resolution = acpManager.resolveSession({ cfg: params.cfg, sessionKey }); if (resolution.kind === "ready" && sessionMatchesConfiguredBinding({ cfg: params.cfg, spec: params.spec, meta: resolution.meta })) return { ok: true, sessionKey }; if (resolution.kind !== "none") await acpManager.closeSession({ cfg: params.cfg, sessionKey, reason: "config-binding-reconfigure", clearMeta: false, allowBackendUnavailable: true, requireAcpSession: false }); await acpManager.initializeSession({ cfg: params.cfg, sessionKey, agent: params.spec.acpAgentId ?? params.spec.agentId, mode: params.spec.mode, cwd: params.spec.cwd, backendId: params.spec.backend }); return { ok: true, sessionKey }; } catch (error) { const message = formatErrorMessage(error); logVerbose(`acp-configured-binding: failed ensuring ${params.spec.channel}:${params.spec.accountId}:${params.spec.conversationId} -> ${sessionKey}: ${message}`); return { ok: false, sessionKey, error: message }; } } /** Resolves a configured binding for a conversation and ensures its ACP session exists. */ async function ensureConfiguredAcpBindingReady(params) { if (!params.configuredBinding) return { ok: true }; const ensured = await ensureConfiguredAcpBindingSession({ cfg: params.cfg, spec: params.configuredBinding.spec }); if (ensured.ok) return { ok: true }; return { ok: false, error: ensured.error ?? "unknown error" }; } //#endregion export { ensureConfiguredAcpBindingSession as n, ensureConfiguredAcpBindingReady as t };