UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

55 lines (54 loc) 2.08 kB
import { a as resolveTrajectoryPointerFilePath, i as resolveTrajectoryFilePath, s as safeTrajectorySessionFileName } from "./paths-Biq9XkB5.js"; import path from "node:path"; import fs from "node:fs/promises"; //#region src/trajectory/runtime-file.ts function isRecord(value) { return Boolean(value) && typeof value === "object" && !Array.isArray(value); } async function isRegularNonSymlinkFile(filePath) { try { const linkStat = await fs.lstat(filePath); if (linkStat.isSymbolicLink() || !linkStat.isFile()) return false; const stat = await fs.stat(filePath); return stat.isFile() && stat.dev === linkStat.dev && stat.ino === linkStat.ino; } catch { return false; } } async function readRuntimePointerFile(sessionFile, sessionId) { const pointerPath = resolveTrajectoryPointerFilePath(sessionFile); if (!await isRegularNonSymlinkFile(pointerPath)) return; try { const parsed = JSON.parse(await fs.readFile(pointerPath, "utf8")); if (!isRecord(parsed)) return; if (parsed.sessionId !== sessionId || typeof parsed.runtimeFile !== "string") return; const runtimeFile = path.resolve(parsed.runtimeFile); const safeRuntimeFileName = `${safeTrajectorySessionFileName(sessionId)}.jsonl`; if (runtimeFile !== path.resolve(resolveTrajectoryFilePath({ env: {}, sessionFile, sessionId })) && path.basename(runtimeFile) !== safeRuntimeFileName) return; return runtimeFile; } catch { return; } } async function resolveTrajectoryRuntimeFile(params) { if (params.runtimeFile) return params.runtimeFile; const candidates = [ await readRuntimePointerFile(params.sessionFile, params.sessionId), resolveTrajectoryFilePath({ env: {}, sessionFile: params.sessionFile, sessionId: params.sessionId }), resolveTrajectoryFilePath({ sessionFile: params.sessionFile, sessionId: params.sessionId }) ].filter((candidate) => Boolean(candidate)); for (const candidate of candidates) if (await isRegularNonSymlinkFile(candidate)) return candidate; } //#endregion export { resolveTrajectoryRuntimeFile as n, isRegularNonSymlinkFile as t };