openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
105 lines (104 loc) • 5.39 kB
JavaScript
import { a as normalizeLowercaseStringOrEmpty, c as normalizeOptionalString } from "./string-coerce-mnp54Vah.js";
import "./agent-scope-MrLta7Pq.js";
import { c as parseAgentSessionKey, o as normalizeSessionKeyPreservingOpaquePeerIds } from "./session-key-utils-Bx3apsJ3.js";
import { d as normalizeMainKey, u as normalizeAgentId } from "./session-key-B_NoIfpX.js";
import { c as resolveDefaultAgentId, n as listAgentIds } from "./agent-scope-config-CgCYpZfK.js";
import { i as resolveMainSessionKey, t as canonicalizeMainSessionAlias } from "./main-session-Eahn-btj.js";
//#region src/gateway/session-store-key.ts
/** Canonicalize an opaque session key into the agent-scoped store namespace. */
function canonicalizeSessionKeyForAgent(agentId, key) {
const lowered = normalizeLowercaseStringOrEmpty(key);
if (lowered === "global" || lowered === "unknown") return lowered;
const normalized = normalizeSessionKeyPreservingOpaquePeerIds(key);
if (normalized.startsWith("agent:")) return normalized;
return `agent:${normalizeAgentId(agentId)}:${normalized}`;
}
function resolveDefaultStoreAgentId(cfg) {
return normalizeAgentId(resolveDefaultAgentId(cfg));
}
function shouldRemapLegacyDefaultMainAlias(cfg, parsed, options) {
if (normalizeAgentId(parsed.agentId) !== "main" || listAgentIds(cfg).includes("main")) return false;
const defaultAgentId = resolveDefaultStoreAgentId(cfg);
if (options?.storeAgentId && normalizeAgentId(options.storeAgentId) !== defaultAgentId) return false;
const rest = normalizeLowercaseStringOrEmpty(parsed.rest);
const mainKey = normalizeMainKey(cfg.session?.mainKey);
return rest === "main" || rest === mainKey;
}
function resolveParsedSessionStoreKey(cfg, raw, parsed, options) {
if (!shouldRemapLegacyDefaultMainAlias(cfg, parsed, options)) return {
agentId: normalizeAgentId(parsed.agentId),
sessionKey: normalizeSessionKeyPreservingOpaquePeerIds(raw)
};
const agentId = resolveDefaultStoreAgentId(cfg);
return {
agentId,
sessionKey: `agent:${agentId}:${normalizeLowercaseStringOrEmpty(parsed.rest)}`
};
}
/** Resolve any incoming session key into the canonical key used in persisted session stores. */
function resolveSessionStoreKey(params) {
const raw = normalizeOptionalString(params.sessionKey) ?? "";
if (!raw) return raw;
const rawLower = normalizeLowercaseStringOrEmpty(raw);
if (rawLower === "global" || rawLower === "unknown") return rawLower;
const parsed = parseAgentSessionKey(raw);
if (parsed) {
const resolved = resolveParsedSessionStoreKey(params.cfg, raw, parsed, { storeAgentId: params.storeAgentId });
const canonical = canonicalizeMainSessionAlias({
cfg: params.cfg,
agentId: resolved.agentId,
sessionKey: resolved.sessionKey
});
if (canonical !== resolved.sessionKey) return canonical;
return resolved.sessionKey;
}
const lowered = normalizeLowercaseStringOrEmpty(raw);
const rawMainKey = normalizeMainKey(params.cfg.session?.mainKey);
if (lowered === "main" || lowered === rawMainKey) return resolveMainSessionKey(params.cfg);
return canonicalizeSessionKeyForAgent(resolveDefaultStoreAgentId(params.cfg), raw);
}
/** Resolve the agent that owns a canonical session-store key. */
function resolveSessionStoreAgentId(cfg, canonicalKey) {
if (canonicalKey === "global" || canonicalKey === "unknown") return resolveDefaultStoreAgentId(cfg);
const parsed = parseAgentSessionKey(canonicalKey);
if (parsed?.agentId) return normalizeAgentId(parsed.agentId);
return resolveDefaultStoreAgentId(cfg);
}
/** Resolve a session key for lookup inside a specific agent's store. */
function resolveStoredSessionKeyForAgentStore(params) {
const raw = normalizeOptionalString(params.sessionKey) ?? "";
if (!raw) return raw;
const lowered = normalizeLowercaseStringOrEmpty(raw);
if (lowered === "global" || lowered === "unknown") return lowered;
const key = parseAgentSessionKey(raw) ? raw : canonicalizeSessionKeyForAgent(params.agentId, raw);
return resolveSessionStoreKey({
cfg: params.cfg,
sessionKey: key,
storeAgentId: params.agentId
});
}
/** Resolve the owner agent for a stored session key, returning null for global/unknown keys. */
function resolveStoredSessionOwnerAgentId(params) {
const canonicalKey = resolveStoredSessionKeyForAgentStore(params);
if (canonicalKey === "global" || canonicalKey === "unknown") return null;
return resolveSessionStoreAgentId(params.cfg, canonicalKey);
}
/** Canonicalize spawned-by parent references while preserving main-session aliases. */
function canonicalizeSpawnedByForAgent(cfg, agentId, spawnedBy) {
const raw = normalizeOptionalString(spawnedBy) ?? "";
if (!raw) return;
const lower = normalizeLowercaseStringOrEmpty(raw);
if (lower === "global" || lower === "unknown") return lower;
let result;
const normalized = normalizeSessionKeyPreservingOpaquePeerIds(raw);
if (normalized.startsWith("agent:")) result = normalized;
else result = `agent:${normalizeAgentId(agentId)}:${normalized}`;
const parsed = parseAgentSessionKey(result);
return canonicalizeMainSessionAlias({
cfg,
agentId: parsed?.agentId ? normalizeAgentId(parsed.agentId) : agentId,
sessionKey: result
});
}
//#endregion
export { resolveStoredSessionKeyForAgentStore as a, resolveSessionStoreKey as i, canonicalizeSpawnedByForAgent as n, resolveStoredSessionOwnerAgentId as o, resolveSessionStoreAgentId as r, canonicalizeSessionKeyForAgent as t };