refactor: keep legacy session json paths out of runtime

This commit is contained in:
Peter Steinberger
2026-05-08 10:39:09 +01:00
parent 154e64f6e0
commit ccc9f3774a
2 changed files with 15 additions and 40 deletions

View File

@@ -1,7 +1,7 @@
import fs from "node:fs";
import os from "node:os";
import path from "node:path";
import { expandHomePrefix, resolveRequiredHomeDir } from "../../infra/home-dir.js";
import { resolveRequiredHomeDir } from "../../infra/home-dir.js";
import { DEFAULT_AGENT_ID, normalizeAgentId } from "../../routing/session-key.js";
import { normalizeLowercaseStringOrEmpty } from "../../shared/string-coerce.js";
import { resolveStateDir } from "../paths.js";
@@ -283,38 +283,3 @@ export function resolveSessionFilePath(
}
return resolveSessionTranscriptPathInDir(sessionId, sessionsDir);
}
export function resolveLegacySessionStorePath(
store?: string,
opts?: { agentId?: string; env?: NodeJS.ProcessEnv },
) {
const agentId = normalizeAgentId(opts?.agentId ?? DEFAULT_AGENT_ID);
const env = opts?.env ?? process.env;
const homedir = () => resolveRequiredHomeDir(env, os.homedir);
if (!store) {
return path.join(resolveAgentSessionsDir(agentId, env, homedir), "sessions.json");
}
if (store.includes("{agentId}")) {
const expanded = store.replaceAll("{agentId}", agentId);
if (expanded.startsWith("~")) {
return path.resolve(
expandHomePrefix(expanded, {
home: resolveRequiredHomeDir(env, homedir),
env,
homedir,
}),
);
}
return path.resolve(expanded);
}
if (store.startsWith("~")) {
return path.resolve(
expandHomePrefix(store, {
home: resolveRequiredHomeDir(env, homedir),
env,
homedir,
}),
);
}
return path.resolve(store);
}

View File

@@ -5,7 +5,7 @@ import { afterEach, describe, expect, it } from "vitest";
import { writeTextAtomic } from "../../infra/json-files.js";
import { closeOpenClawAgentDatabasesForTest } from "../../state/openclaw-agent-db.js";
import { closeOpenClawStateDatabaseForTest } from "../../state/openclaw-state-db.js";
import { resolveLegacySessionStorePath } from "./paths.js";
import { resolveSessionTranscriptsDirForAgent } from "./paths.js";
import {
importJsonSessionStoreToSqlite,
loadSqliteSessionEntries,
@@ -26,6 +26,16 @@ function createTempDir(): string {
return fs.mkdtempSync(path.join(os.tmpdir(), "openclaw-sqlite-session-store-"));
}
function resolveLegacySessionJsonFixturePath(params: {
agentId: string;
env: NodeJS.ProcessEnv;
}): string {
return path.join(
resolveSessionTranscriptsDirForAgent(params.agentId, params.env),
"sessions.json",
);
}
afterEach(() => {
closeOpenClawAgentDatabasesForTest();
closeOpenClawStateDatabaseForTest();
@@ -113,7 +123,7 @@ describe("SQLite session store backend", () => {
it("routes the production session row API through SQLite", () => {
const stateDir = createTempDir();
const env = { OPENCLAW_STATE_DIR: stateDir };
const storePath = resolveLegacySessionStorePath(undefined, {
const storePath = resolveLegacySessionJsonFixturePath({
agentId: "ops",
env,
});
@@ -226,7 +236,7 @@ describe("SQLite session store backend", () => {
it("uses SQLite by default for canonical per-agent session rows", () => {
const stateDir = createTempDir();
const env = { OPENCLAW_STATE_DIR: stateDir };
const storePath = resolveLegacySessionStorePath(undefined, {
const storePath = resolveLegacySessionJsonFixturePath({
agentId: "ops",
env,
});
@@ -247,7 +257,7 @@ describe("SQLite session store backend", () => {
it("does not import a legacy canonical sessions.json on first SQLite open", async () => {
const stateDir = createTempDir();
process.env.OPENCLAW_STATE_DIR = stateDir;
const storePath = resolveLegacySessionStorePath(undefined, {
const storePath = resolveLegacySessionJsonFixturePath({
agentId: "ops",
env: process.env,
});