UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

78 lines (77 loc) 3.47 kB
import { c as normalizeOptionalString } from "./string-coerce-mnp54Vah.js"; import { y as resolveStateDir } from "./paths-mvMm5bYV.js"; import "./agent-scope-MrLta7Pq.js"; import { d as normalizeMainKey, u as normalizeAgentId } from "./session-key-B_NoIfpX.js"; import { c as resolveDefaultAgentId } from "./agent-scope-config-CgCYpZfK.js"; import { Nn as record, Rn as string, Zn as unknown } from "./schemas-6cH6bZ7o.js"; import { t as safeParseJsonWithSchema } from "./zod-parse-Bip-sZi_.js"; import { t as normalizePersistedSessionEntryShape } from "./store-entry-shape-Tq8towhZ.js"; import fs from "node:fs"; import path from "node:path"; //#region src/config/sessions/store-read.ts const SessionStoreSchema = record(string(), unknown()); /** Reads a session store without mutating it and drops malformed entries. */ function readSessionStoreReadOnly(storePath) { try { const raw = fs.readFileSync(storePath, "utf-8"); if (!raw.trim()) return {}; const parsed = safeParseJsonWithSchema(SessionStoreSchema, raw) ?? {}; return Object.fromEntries(Object.entries(parsed).flatMap(([key, entry]) => { const normalized = normalizePersistedSessionEntryShape(entry); return normalized ? [[key, normalized]] : []; })); } catch { return {}; } } //#endregion //#region src/gateway/agent-list.ts function listExistingAgentIdsFromDisk() { const root = resolveStateDir(); const agentsDir = path.join(root, "agents"); try { return fs.readdirSync(agentsDir, { withFileTypes: true }).filter((entry) => entry.isDirectory()).map((entry) => normalizeAgentId(entry.name)).filter(Boolean); } catch { return []; } } function listConfiguredAgentIds(cfg) { const ids = /* @__PURE__ */ new Set(); const defaultId = normalizeAgentId(resolveDefaultAgentId(cfg)); ids.add(defaultId); for (const entry of cfg.agents?.list ?? []) if (entry?.id) ids.add(normalizeAgentId(entry.id)); for (const id of listExistingAgentIdsFromDisk()) ids.add(id); const sorted = Array.from(ids).filter(Boolean); sorted.sort((a, b) => a.localeCompare(b)); return sorted.includes(defaultId) ? [defaultId, ...sorted.filter((id) => id !== defaultId)] : sorted; } /** Lists gateway-visible agent ids with default/main session metadata. */ function listGatewayAgentsBasic(cfg) { const defaultId = normalizeAgentId(resolveDefaultAgentId(cfg)); const mainKey = normalizeMainKey(cfg.session?.mainKey); const scope = cfg.session?.scope ?? "per-sender"; const configuredById = /* @__PURE__ */ new Map(); for (const entry of cfg.agents?.list ?? []) { if (!entry?.id) continue; const configuredName = normalizeOptionalString(entry.name); const identityName = normalizeOptionalString(entry.identity?.name); configuredById.set(normalizeAgentId(entry.id), { name: configuredName ?? identityName }); } const explicitIds = new Set((cfg.agents?.list ?? []).map((entry) => entry?.id ? normalizeAgentId(entry.id) : "").filter(Boolean)); const allowedIds = explicitIds.size > 0 ? new Set([...explicitIds, defaultId]) : null; let agentIds = listConfiguredAgentIds(cfg).filter((id) => allowedIds ? allowedIds.has(id) : true); if (mainKey && !agentIds.includes(mainKey) && (!allowedIds || allowedIds.has(mainKey))) agentIds = [...agentIds, mainKey]; return { defaultId, mainKey, scope, agents: agentIds.map((id) => { return { id, name: configuredById.get(id)?.name }; }) }; } //#endregion export { readSessionStoreReadOnly as n, listGatewayAgentsBasic as t };