UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

195 lines (194 loc) 7.52 kB
import { t as formatErrorMessage } from "./errors-Db3Ymjlb.js"; import { t as createSubsystemLogger } from "./subsystem-Dy2tqXOS.js"; import { c as executionIdentitySpawnAdmission } from "./execution-identity-admission-Ch95Lxwv.js"; import { a as withPostAdmissionExecutionOwnerBinding } from "./execution-owner-binding-DvQsTSTS.js"; import { a as prepareAgentRunAdmission, i as getAdmittedRunDelegatedAuthority, r as createOperationalRunInstanceRef } from "./admitted-run-context-CHY5SdVF.js"; import { n as commitMainSessionRecovery } from "./main-session-recovery-store-jMegHmAf.js"; //#region src/agents/agent-command-admission-facts.ts const factsByIngress = /* @__PURE__ */ new WeakMap(); function attachAgentCommandAdmissionFacts(ingress, facts) { factsByIngress.set(ingress, facts); } function getAgentCommandAdmissionFacts(ingress) { return factsByIngress.get(ingress); } /** Records the exact system attribution only after the recovery owner admits the attempt. */ function attachAgentCommandRecoveryAdmissionFacts(ingress) { attachAgentCommandAdmissionFacts(ingress, { ingress: { kind: "recovery", boundary: "gateway.main-session-recovery", state: "present" }, invoker: { state: "present", kind: "system", rawPrincipalRef: "openclaw.main-session-recovery" }, assurance: [{ kind: "runtime-binding", rawEvidenceRef: "gateway.main-session-recovery-owner", strength: "boundary-verified" }] }); } //#endregion //#region src/agents/agent-command-execution-identity-spawn.ts const EXECUTION_IDENTITY_SPAWN_FACTS = Symbol("executionIdentitySpawnFacts"); /** Attach authenticated spawn facts without widening the public AgentCommandOpts contract. */ function withAgentCommandExecutionIdentitySpawnFacts(opts, facts) { if (!facts) return opts; return { ...opts, [EXECUTION_IDENTITY_SPAWN_FACTS]: facts }; } function readAgentCommandExecutionIdentitySpawnFacts(opts) { return opts[EXECUTION_IDENTITY_SPAWN_FACTS]; } function withoutAgentCommandExecutionIdentitySpawnFacts(opts) { return { ...opts, [EXECUTION_IDENTITY_SPAWN_FACTS]: void 0 }; } //#endregion //#region src/agents/agent-command-execution-identity.ts const log = createSubsystemLogger("agents/agent-command"); const LOCAL_CLI_ADMISSION_INGRESS = { kind: "local-cli", boundary: "agent-command.local", state: "present" }; function systemIngress(boundary) { return { kind: "system", boundary, state: "present" }; } function prepareAgentCommandRunAdmission(params) { return prepareAgentCommandRunAdmissionWithSpawnFacts(params); } function prepareAgentCommandRunAdmissionWithSpawnFacts(params, spawnFacts) { const admissionFacts = getAgentCommandAdmissionFacts(params.operationalRunInstance) ?? { ingress: params.ingress }; const applicableGrants = spawnFacts?.applicableGrants; const assurance = spawnFacts?.assurance ?? admissionFacts.assurance; return prepareAgentRunAdmission({ cfg: params.cfg, operationalRunInstance: params.operationalRunInstance, facts: executionIdentitySpawnAdmission({ operation: "attach", value: { runId: params.runId, agentId: params.agentId, ingress: spawnFacts?.ingress ?? admissionFacts.ingress, ...spawnFacts?.invoker ?? admissionFacts.invoker ? { invoker: spawnFacts?.invoker ?? admissionFacts.invoker } : {}, ...applicableGrants ? { applicableGrants } : {}, ...assurance ? { assurance } : {} }, extra: spawnFacts?.spawnAdmission }), ...params.admission ? { recovery: params.admission } : {}, ...params.onAdmitted ? { onAdmitted: params.onAdmitted } : {} }); } async function commitAgentCommandRecoveryState(params) { try { const bound = await commitMainSessionRecovery({ command: params.command, expectedSessionId: params.command.sessionId, requireWriteSuccess: true, shouldContinue: params.isActive, target: { sessionKey: params.sessionKey, storePath: params.storePath } }); if (bound.transition.kind === "rejected") log.warn(`failed to ${params.command.kind}: ${bound.transition.reason}`); } catch (error) { log.warn(`failed to ${params.command.kind}: ${formatErrorMessage(error)}`); } } function prepareAgentCommandExecutionIdentity(params) { const { opts, prepared } = params; const operationalRunInstance = opts.operationalRunInstance ?? createOperationalRunInstanceRef(prepared.runId); const admissionFacts = getAgentCommandAdmissionFacts(params.opts.runContext ?? params.opts); if (admissionFacts) attachAgentCommandAdmissionFacts(operationalRunInstance, admissionFacts); const cycleId = prepared.sessionEntry?.mainRestartRecovery?.cycleId; const recovery = opts.mainRestartRecoveryAdmitted === true && opts.mainRestartRecoveryAttempt !== void 0 && cycleId && prepared.sessionKey && prepared.storePath ? { owner: { attempt: opts.mainRestartRecoveryAttempt, cycleId, lifecycleGeneration: params.lifecycleGeneration, runId: prepared.runId, sessionId: prepared.sessionId }, sessionKey: prepared.sessionKey, storePath: prepared.storePath } : void 0; let admittedContext; let turnRegistration; const isActive = () => admittedContext !== void 0 && !opts.abortSignal?.aborted && getAdmittedRunDelegatedAuthority(admittedContext) !== void 0; const admissionParams = { admission: opts.executionIdentityAdmission, agentId: prepared.sessionAgentId, cfg: prepared.cfg, ingress: params.ingress, operationalRunInstance, runId: prepared.runId, onAdmitted: async (admittedRunContext) => { await opts.onAdmittedRunContext?.(admittedRunContext); admittedContext = admittedRunContext; if (!recovery || !admittedRunContext.executionIdentityToken) return; await commitAgentCommandRecoveryState({ ...recovery, command: { kind: "bind_admitted_execution_identity", ...recovery.owner, token: admittedRunContext.executionIdentityToken }, isActive }); } }; const spawnFacts = readAgentCommandExecutionIdentitySpawnFacts(opts); const preparedAdmission = spawnFacts ? prepareAgentCommandRunAdmissionWithSpawnFacts(admissionParams, spawnFacts) : executionIdentity.prepare(admissionParams); const admission = opts.onPostAdmittedRunContext ? withPostAdmissionExecutionOwnerBinding(preparedAdmission, opts.onPostAdmittedRunContext) : preparedAdmission; return Object.freeze({ ...admission, finish: () => Promise.resolve(turnRegistration).finally(admission.close), onRuntimeTurnStarted: () => { if (!recovery || !isActive()) return; return turnRegistration ??= commitAgentCommandRecoveryState({ ...recovery, command: { kind: "register_recovery_turn", ...recovery.owner }, isActive }); } }); } function sanitizePublicAgentCommandIngressOpts(opts) { return withoutAgentCommandExecutionIdentitySpawnFacts({ ...opts, senderIsOwner: false, mainRestartRecoveryOwnerLease: void 0, mainRestartRecoveryAdmitted: void 0, mainRestartRecoveryAttempt: void 0, executionIdentityAdmission: void 0, operationalRunInstance: void 0, cronCreatorAuthorityCapability: void 0, onAdmittedRunContext: void 0, onPostAdmittedRunContext: void 0 }); } const executionIdentity = { localIngress: LOCAL_CLI_ADMISSION_INGRESS, prepare: prepareAgentCommandRunAdmission, systemIngress }; //#endregion export { attachAgentCommandAdmissionFacts as a, withAgentCommandExecutionIdentitySpawnFacts as i, prepareAgentCommandExecutionIdentity as n, attachAgentCommandRecoveryAdmissionFacts as o, sanitizePublicAgentCommandIngressOpts as r, executionIdentity as t };