openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
95 lines (94 loc) • 3.03 kB
JavaScript
import { n as isAcpSessionKey } from "./session-key-utils-Bx3apsJ3.js";
import { f as resolveAgentIdFromSessionKey } from "./session-key-B_NoIfpX.js";
import { n as readAcpSessionEntry } from "./session-meta-BuCj-TpW.js";
import { c as resolveConfiguredAcpBindingSpecFromRecord } from "./binding-registry-DEX4J6tW.js";
import { c as performGatewaySessionReset } from "./session-reset-service-DG5dw0Ix.js";
import { n as resolveConfiguredAcpBindingSpecBySessionKey } from "./persistent-bindings.resolve-BqprpTKz.js";
import { n as ensureConfiguredAcpBindingSession, t as ensureConfiguredAcpBindingReady } from "./persistent-bindings.lifecycle-DjX50R8D.js";
//#region src/channels/plugins/acp-stateful-target-driver.ts
/**
* ACP stateful target driver for configured bindings.
*
* Ensures ACP-backed bound sessions exist, are ready, and can be reset by Gateway.
*/
function toAcpStatefulBindingTargetDescriptor(params) {
const sessionKey = params.sessionKey.trim();
if (!sessionKey) return null;
const metaAgentId = (readAcpSessionEntry({
...params,
sessionKey
})?.acp)?.agent?.trim();
if (metaAgentId) return {
kind: "stateful",
driverId: "acp",
sessionKey,
agentId: metaAgentId
};
const spec = resolveConfiguredAcpBindingSpecBySessionKey({
...params,
sessionKey
});
if (!spec) {
if (!isAcpSessionKey(sessionKey)) return null;
return {
kind: "stateful",
driverId: "acp",
sessionKey,
agentId: resolveAgentIdFromSessionKey(sessionKey)
};
}
return {
kind: "stateful",
driverId: "acp",
sessionKey,
agentId: spec.agentId,
...spec.label ? { label: spec.label } : {}
};
}
async function ensureAcpTargetReady(params) {
const configuredBinding = resolveConfiguredAcpBindingSpecFromRecord(params.bindingResolution.record);
if (!configuredBinding) return {
ok: false,
error: "Configured ACP binding unavailable"
};
return await ensureConfiguredAcpBindingReady({
cfg: params.cfg,
configuredBinding: {
spec: configuredBinding,
record: params.bindingResolution.record
}
});
}
async function ensureAcpTargetSession(params) {
const spec = resolveConfiguredAcpBindingSpecFromRecord(params.bindingResolution.record);
if (!spec) return {
ok: false,
sessionKey: params.bindingResolution.statefulTarget.sessionKey,
error: "Configured ACP binding unavailable"
};
return await ensureConfiguredAcpBindingSession({
cfg: params.cfg,
spec
});
}
async function resetAcpTargetInPlace(params) {
const result = await performGatewaySessionReset({
key: params.sessionKey,
reason: params.reason,
commandSource: params.commandSource ?? "stateful-target:acp-reset-in-place"
});
if (result.ok) return { ok: true };
return {
ok: false,
error: result.error.message
};
}
const acpStatefulBindingTargetDriver = {
id: "acp",
ensureReady: ensureAcpTargetReady,
ensureSession: ensureAcpTargetSession,
resolveTargetBySessionKey: toAcpStatefulBindingTargetDescriptor,
resetInPlace: resetAcpTargetInPlace
};
//#endregion
export { acpStatefulBindingTargetDriver };