openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
93 lines (92 loc) • 4.83 kB
JavaScript
import { h as stringifyRouteThreadId } from "./channel-route-D7X5briz.js";
import { c as normalizeAccountId } from "./delivery-context.shared-CpAdEETO.js";
import { d as updateSessionStore } from "./store-Qsgtu-0y.js";
import { o as resolveMessageChannel } from "./message-channel-normalize-BLLf0ubu.js";
import "./message-channel-BiOeMu0l.js";
import { r as mergeSessionEntry } from "./types-D8S_uNvu.js";
import { d as stripInternalRuntimeContext, l as hasInternalRuntimeContext } from "./internal-runtime-context-BH_40W4f.js";
import { g as formatAgentInternalEventsForPrompt, h as formatAgentInternalEventsForPlainPrompt } from "./subagent-announce-delivery-B2BgoPnM.js";
//#region src/agents/command/attempt-execution.shared.ts
/**
* Shared session persistence and prompt-body helpers for agent attempt
* execution paths.
*/
/** Persists one session entry while keeping the caller's in-memory store aligned. */
function normalizeTranscriptMarkerUpdatedAt(value) {
return typeof value === "number" && Number.isFinite(value) && value >= 0 ? value : void 0;
}
async function persistSessionEntry(params) {
const persisted = await updateSessionStore(params.storePath, (store) => {
const current = store[params.sessionKey];
if (params.shouldPersist && !params.shouldPersist(current)) return current;
const merged = mergeSessionEntry(store[params.sessionKey], params.entry);
if (params.preserveTranscriptMarkerUpdatedAt) {
const currentUpdatedAt = normalizeTranscriptMarkerUpdatedAt(current?.updatedAt);
const markerUpdatedAt = normalizeTranscriptMarkerUpdatedAt(params.entry.updatedAt);
if (markerUpdatedAt !== void 0) merged.updatedAt = Math.max(currentUpdatedAt ?? 0, markerUpdatedAt);
}
for (const field of params.clearedFields ?? []) if (!Object.hasOwn(params.entry, field)) Reflect.deleteProperty(merged, field);
store[params.sessionKey] = merged;
return merged;
}, {
resolveSingleEntryPersistence: (entry) => entry ? {
sessionKey: params.sessionKey,
entry
} : null,
takeCacheOwnership: true
});
if (persisted) params.sessionStore[params.sessionKey] = persisted;
else delete params.sessionStore[params.sessionKey];
return persisted;
}
/** Prepends hidden internal event context unless the body already carries it. */
function prependInternalEventContext(body, events) {
if (hasInternalRuntimeContext(body)) return body;
const renderedEvents = formatAgentInternalEventsForPrompt(events);
if (!renderedEvents) return body;
return [renderedEvents, body].filter(Boolean).join("\n\n");
}
function resolvePlainInternalEventBody(body, events) {
const renderedEvents = formatAgentInternalEventsForPlainPrompt(events);
if (!renderedEvents) return body;
return [renderedEvents, stripInternalRuntimeContext(body).trim()].filter(Boolean).join("\n\n") || body;
}
/** Resolves the prompt body submitted to ACP runtimes. */
function resolveAcpPromptBody(body, events) {
return events?.length ? resolvePlainInternalEventBody(body, events) : body;
}
/** Resolves the body stored in transcripts after internal event rendering. */
function resolveInternalEventTranscriptBody(body, events) {
if (!hasInternalRuntimeContext(body)) return body;
return resolvePlainInternalEventBody(body, events);
}
//#endregion
//#region src/agents/command/run-context.ts
/**
* Resolves channel/account/thread run context for agent command execution.
*/
/** Merges explicit run context with command routing options. */
function resolveAgentRunContext(opts) {
const merged = opts.runContext ? { ...opts.runContext } : {};
const normalizedChannel = resolveMessageChannel(merged.messageChannel ?? opts.messageChannel, opts.replyChannel ?? opts.channel);
if (normalizedChannel) merged.messageChannel = normalizedChannel;
const normalizedAccountId = normalizeAccountId(merged.accountId ?? opts.accountId);
if (normalizedAccountId) merged.accountId = normalizedAccountId;
const groupId = (merged.groupId ?? opts.groupId)?.toString().trim();
if (groupId) merged.groupId = groupId;
const groupChannel = (merged.groupChannel ?? opts.groupChannel)?.toString().trim();
if (groupChannel) merged.groupChannel = groupChannel;
const groupSpace = (merged.groupSpace ?? opts.groupSpace)?.toString().trim();
if (groupSpace) merged.groupSpace = groupSpace;
if (merged.currentThreadTs == null && opts.threadId != null && opts.threadId !== "" && opts.threadId !== null) {
const threadId = stringifyRouteThreadId(opts.threadId);
if (threadId) merged.currentThreadTs = threadId;
}
if (!merged.currentChannelId && opts.to) {
const trimmedTo = opts.to.trim();
if (trimmedTo) merged.currentChannelId = trimmedTo;
}
return merged;
}
//#endregion
export { resolveInternalEventTranscriptBody as a, resolveAcpPromptBody as i, persistSessionEntry as n, prependInternalEventContext as r, resolveAgentRunContext as t };