UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

33 lines (32 loc) 2.29 kB
import { r as resolveHomeRelativePath } from "./home-dir-BPhrG-aM.js"; import { r as isPathInside } from "./path-guards-Cp-mGr3-.js"; import { n as parseSqliteSessionFileMarker } from "./legacy-sqlite-marker-COPKCuIN.js"; import path from "node:path"; //#region src/trajectory/paths.ts const TRAJECTORY_RUNTIME_CAPTURE_MAX_BYTES = 10485760; const TRAJECTORY_RUNTIME_FILE_MAX_BYTES = 52428800; const TRAJECTORY_RUNTIME_EVENT_MAX_BYTES = 262144; const TRAJECTORY_POINTER_FILE_MAX_BYTES = 65536; function safeTrajectorySessionFileName(sessionId) { const safe = sessionId.replaceAll(/[^A-Za-z0-9_-]/g, "_").slice(0, 120); return /[A-Za-z0-9]/u.test(safe) ? safe : "session"; } function resolveContainedPath(baseDir, fileName) { const resolvedBase = path.resolve(baseDir); const resolvedFile = path.resolve(resolvedBase, fileName); if (resolvedFile === resolvedBase || !isPathInside(resolvedBase, resolvedFile)) throw new Error("Trajectory file path escaped its configured directory"); return resolvedFile; } function resolveTrajectoryFilePath(params) { const dirOverride = (params.env ?? process.env).OPENCLAW_TRAJECTORY_DIR?.trim(); if (dirOverride) return resolveContainedPath(resolveHomeRelativePath(dirOverride), `${safeTrajectorySessionFileName(params.sessionId)}.jsonl`); if (!params.sessionFile) return path.join(process.cwd(), `${safeTrajectorySessionFileName(params.sessionId)}.trajectory.jsonl`); const sqliteMarker = parseSqliteSessionFileMarker(params.sessionFile); if (sqliteMarker) return path.join(path.dirname(path.resolve(sqliteMarker.storePath)), "trajectory", `${safeTrajectorySessionFileName(sqliteMarker.sessionId)}.jsonl`); return params.sessionFile.endsWith(".jsonl") ? `${params.sessionFile.slice(0, -6)}.trajectory.jsonl` : `${params.sessionFile}.trajectory.jsonl`; } function resolveTrajectoryPointerFilePath(sessionFile) { return sessionFile.endsWith(".jsonl") ? `${sessionFile.slice(0, -6)}.trajectory-path.json` : `${sessionFile}.trajectory-path.json`; } //#endregion export { resolveTrajectoryFilePath as a, TRAJECTORY_RUNTIME_FILE_MAX_BYTES as i, TRAJECTORY_RUNTIME_CAPTURE_MAX_BYTES as n, resolveTrajectoryPointerFilePath as o, TRAJECTORY_RUNTIME_EVENT_MAX_BYTES as r, safeTrajectorySessionFileName as s, TRAJECTORY_POINTER_FILE_MAX_BYTES as t };