import type { OpenClawConfig } from "../config/config.js"; import type { ResolvedAgentRoute } from "../routing/resolve-route.js"; import { deriveLastRoutePolicy } from "../routing/resolve-route.js"; import { resolveAgentIdFromSessionKey } from "../routing/session-key.js"; import { ensureConfiguredAcpBindingReady, resolveConfiguredAcpBindingRecord, type ConfiguredAcpBindingChannel, type ResolvedConfiguredAcpBinding, } from "./persistent-bindings.js"; export function resolveConfiguredAcpRoute(params: { cfg: OpenClawConfig; route: ResolvedAgentRoute; channel: ConfiguredAcpBindingChannel; accountId: string; conversationId: string; parentConversationId?: string; }): { configuredBinding: ResolvedConfiguredAcpBinding | null; route: ResolvedAgentRoute; boundSessionKey?: string; boundAgentId?: string; } { const configuredBinding = resolveConfiguredAcpBindingRecord({ cfg: params.cfg, channel: params.channel, accountId: params.accountId, conversationId: params.conversationId, parentConversationId: params.parentConversationId, }); if (!configuredBinding) { return { configuredBinding: null, route: params.route, }; } const boundSessionKey = configuredBinding.record.targetSessionKey?.trim() ?? ""; if (!boundSessionKey) { return { configuredBinding, route: params.route, }; } const boundAgentId = resolveAgentIdFromSessionKey(boundSessionKey) || params.route.agentId; return { configuredBinding, boundSessionKey, boundAgentId, route: { ...params.route, sessionKey: boundSessionKey, agentId: boundAgentId, lastRoutePolicy: deriveLastRoutePolicy({ sessionKey: boundSessionKey, mainSessionKey: params.route.mainSessionKey, }), matchedBy: "binding.channel", }, }; } export async function ensureConfiguredAcpRouteReady(params: { cfg: OpenClawConfig; configuredBinding: ResolvedConfiguredAcpBinding | null; }): Promise<{ ok: true } | { ok: false; error: string }> { return ensureConfiguredAcpBindingReady({ cfg: params.cfg, configuredBinding: params.configuredBinding, }); }