openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
119 lines (118 loc) • 3.77 kB
JavaScript
import { S as isAcpSessionKey, f as resolveAgentIdFromSessionKey } from "./session-key-BnWWjqNc.js";
import "./session-accessor-YsytfDtG.js";
import { a as resolveSessionEntryAccessTarget } from "./session-accessor.entry-CQ2WPpfn.js";
import { c as resolveAcpSessionTarget } from "./manager.utils-sCXNDTX4.js";
import { n as readAcpSessionEntry } from "./session-meta-dzG4VkYo.js";
import { a as resolveConfiguredAcpBindingSpecFromRecord } from "./persistent-bindings.types--DEYLak-.js";
import { n as resolveConfiguredAcpBindingSpecBySessionKey } from "./persistent-bindings.resolve-DIgtURe3.js";
import { n as ensureConfiguredAcpBindingSession, t as ensureConfiguredAcpBindingReadyCore } from "./persistent-bindings.lifecycle-Ctiq_jNa.js";
import { s as performGatewaySessionReset } from "./session-reset-service-DsSXKjai.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 target = resolveAcpSessionTarget(params);
if (readAcpSessionEntry({
cfg: params.cfg,
...target
})?.acp) return {
kind: "stateful",
driverId: "acp",
...target
};
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 ensureConfiguredAcpBindingReadyCore({
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) {
if (resolveSessionEntryAccessTarget({
cfg: params.cfg,
sessionKey: params.sessionKey,
agentId: params.bindingTarget.agentId
}).entry?.incognito === true) return {
ok: false,
error: "Incognito sessions cannot reset in place."
};
const result = await performGatewaySessionReset({
key: params.sessionKey,
agentId: params.bindingTarget.agentId,
operatorRoleActor: { kind: "system" },
reason: params.reason,
commandSource: params.commandSource ?? "stateful-target:acp-reset-in-place",
armSessionDiffBaselineCapture: true
});
if (result.ok) {
if ("incognitoDeleted" in result) return {
ok: true,
sessionKey: result.key,
storePath: result.storePath
};
return {
ok: true,
sessionKey: result.key,
sessionId: result.entry.sessionId,
storePath: result.storePath
};
}
return {
ok: false,
error: result.error.message
};
}
const acpStatefulBindingTargetDriver = {
id: "acp",
ensureReady: ensureAcpTargetReady,
ensureSession: ensureAcpTargetSession,
resolveTargetBySessionKey: toAcpStatefulBindingTargetDescriptor,
resetInPlace: resetAcpTargetInPlace
};
//#endregion
export { acpStatefulBindingTargetDriver };