openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
126 lines (125 loc) • 4.88 kB
JavaScript
import { d as getAgentRunLifecycleGeneration } from "./agent-run-registry-BaxMDLZF.mjs";
import { n as validateAgentParams, r as validateAgentWaitParams } from "./src-l2dWvEsN.mjs";
import { t as ErrorCodes } from "./gateway-error-details-DIefe7Zy.mjs";
import { f as errorShape } from "./error-codes-Dh56LniQ.mjs";
import { o as operatorSessionCap } from "./operator-role-policy-Bsa4SHqC.mjs";
import { t as SessionMutationAuthorizationChangedError } from "./session-mutation-authorization-error-CCz8QGWh.mjs";
import { _ as resolveSessionSharingTarget, f as isGatewayAdmin } from "./session-sharing-policy-DBD0nzAz.mjs";
import { l as createSessionListEntryFilter } from "./session-sharing-target-read-B1Z4GF6o.mjs";
import "./session-sharing-C16h_pTr.mjs";
import { t as prepareAgentRequestPreflight } from "./agent-request-preflight-FZXZl9w-.mjs";
import { t as createAgentTurnService } from "./agent-turn-service-CVZmpyt7.mjs";
import { n as createAgentRuntimeAuthorityGuard } from "./agent-runtime-authority-Bf7e1KZt.mjs";
import { a as captureGatewayClientUploadCommitGuard } from "./upload-policy-B7cW3IFl.mjs";
import { t as assertValidParams } from "./validation-Bu27N0nv.mjs";
import { n as resolveAgentTurnRunObserver, t as captureAgentTurnPrincipal } from "./principal-B7HAaSAq.mjs";
//#region src/gateway/agent-turn/io.ts
function createAgentTurnIo(respond) {
const emit = (frame, meta) => {
if (meta === void 0) {
respond(...frame);
return;
}
respond(...frame, meta);
};
return {
emitAcceptance: emit,
emitFinal: emit
};
}
//#endregion
//#region src/gateway/server-methods/agent-run-handler.ts
const agentRunHandler = async ({ params, respond, context, client, isWebchatConnect, hasCurrentClientAuthority, sessionMutationCommitGuard }) => {
const assertUploadAllowed = captureGatewayClientUploadCommitGuard({
method: "agent",
requestParams: params,
client,
context
});
const assertAdmissionCurrent = () => {
sessionMutationCommitGuard?.();
if (hasCurrentClientAuthority?.() === false) throw new Error("Gateway caller authority is no longer active.");
};
assertAdmissionCurrent();
const io = createAgentTurnIo(respond);
if (!assertValidParams(params, validateAgentParams, "agent", (ok, payload, error, meta) => io.emitAcceptance([
ok,
payload,
error
], meta))) return;
const runtimeAuthority = createAgentRuntimeAuthorityGuard(client, context, respond, assertAdmissionCurrent);
if (!runtimeAuthority.ensureActive()) return;
const request = params;
const principal = captureAgentTurnPrincipal(client);
const preflight = prepareAgentRequestPreflight({
request,
context,
client: principal,
io
});
if (!preflight) return;
const onRunObserved = resolveAgentTurnRunObserver({
principal,
registerToolEventRecipient: context.registerToolEventRecipient
});
try {
await createAgentTurnService({
context,
isWebchatConnect
}).startTurn({
assertAdmissionCurrent: runtimeAuthority.commitGuard,
assertInputCommitAllowed: assertUploadAllowed,
hasCurrentClientAuthority,
preflight,
principal,
io,
onRunObserved
});
} catch (error) {
if (error instanceof SessionMutationAuthorizationChangedError) {
respond(false, void 0, error.error);
return;
}
runtimeAuthority.handleClosedError(error);
}
};
//#endregion
//#region src/gateway/server-methods/agent-wait.ts
const agentWaitHandler = async ({ params, respond, context, client, isWebchatConnect }) => {
if (!assertValidParams(params, validateAgentWaitParams, "agent.wait", respond)) return;
const gatewayClient = client ?? null;
const prepared = createAgentTurnService({
context,
isWebchatConnect
}).prepareWaitForTurn(params);
const authorizeWait = (run) => {
if (!gatewayClient?.authenticatedUserProfile || isGatewayAdmin(gatewayClient)) return true;
const cfg = context.getRuntimeConfig();
if (operatorSessionCap(gatewayClient, cfg) !== "none") return true;
const target = run?.sessionKey ? resolveSessionSharingTarget({
cfg,
sessionKey: run.sessionKey,
agentId: run.agentId
}) : null;
const visibilityFilter = createSessionListEntryFilter({
client: gatewayClient,
cfg
});
if (!target || run?.lifecycleGeneration !== getAgentRunLifecycleGeneration() || run?.sessionId !== void 0 && target.entry.sessionId !== run.sessionId || visibilityFilter?.(target.storeKey, target.entry) === false) {
respond(false, void 0, errorShape(ErrorCodes.INVALID_REQUEST, "agent run was not found"));
return false;
}
return true;
};
if (!authorizeWait(prepared.session)) return;
const observation = await prepared.wait();
if (authorizeWait(observation.session)) respond(true, observation.result);
};
//#endregion
//#region src/gateway/server-methods/agent.ts
const agentHandlers = {
agent: agentRunHandler,
"agent.wait": agentWaitHandler
};
//#endregion
export { agentHandlers };