diff --git a/src/config/paths.ts b/src/config/paths.ts index 81d092d9e..1f6558625 100644 --- a/src/config/paths.ts +++ b/src/config/paths.ts @@ -27,8 +27,9 @@ export function resolveStateDir( env: NodeJS.ProcessEnv = process.env, homedir: () => string = os.homedir, ): string { - const override = env.CLAWDBOT_STATE_DIR?.trim(); - if (override) return override; + const override = + env.CLAWDBOT_STATE_DIR?.trim() || env.CLAWDIS_STATE_DIR?.trim(); + if (override) return resolveUserPath(override); return path.join(homedir(), ".clawdbot"); } diff --git a/src/config/sessions.test.ts b/src/config/sessions.test.ts index 599a5b57b..982c6e918 100644 --- a/src/config/sessions.test.ts +++ b/src/config/sessions.test.ts @@ -8,6 +8,7 @@ import { deriveSessionKey, loadSessionStore, resolveSessionKey, + resolveSessionTranscriptsDir, updateLastRoute, } from "./sessions.js"; @@ -127,4 +128,20 @@ describe("sessions", () => { expect(store.main?.lastChannel).toBe("telegram"); expect(store.main?.lastTo).toBe("12345"); }); + + it("derives session transcripts dir from CLAWDBOT_STATE_DIR", () => { + const dir = resolveSessionTranscriptsDir( + { CLAWDBOT_STATE_DIR: "/custom/state" } as NodeJS.ProcessEnv, + () => "/home/ignored", + ); + expect(dir).toBe("/custom/state/sessions"); + }); + + it("falls back to CLAWDIS_STATE_DIR for session transcripts dir", () => { + const dir = resolveSessionTranscriptsDir( + { CLAWDIS_STATE_DIR: "/legacy/state" } as NodeJS.ProcessEnv, + () => "/home/ignored", + ); + expect(dir).toBe("/legacy/state/sessions"); + }); }); diff --git a/src/config/sessions.ts b/src/config/sessions.ts index 3aa691832..e7ff6a2f5 100644 --- a/src/config/sessions.ts +++ b/src/config/sessions.ts @@ -7,6 +7,7 @@ import type { Skill } from "@mariozechner/pi-coding-agent"; import JSON5 from "json5"; import type { MsgContext } from "../auto-reply/templating.js"; import { normalizeE164 } from "../utils.js"; +import { resolveStateDir } from "./paths.js"; export type SessionScope = "per-sender" | "global"; @@ -84,8 +85,11 @@ export type SessionSkillSnapshot = { resolvedSkills?: Skill[]; }; -export function resolveSessionTranscriptsDir(): string { - return path.join(os.homedir(), ".clawdbot", "sessions"); +export function resolveSessionTranscriptsDir( + env: NodeJS.ProcessEnv = process.env, + homedir: () => string = os.homedir, +): string { + return path.join(resolveStateDir(env, homedir), "sessions"); } export function resolveDefaultSessionStorePath(): string {