import os from "node:os"; import path from "node:path"; import type { SessionEntry } from "./types.js"; import { DEFAULT_AGENT_ID, normalizeAgentId } from "../../routing/session-key.js"; import { resolveStateDir } from "../paths.js"; function resolveAgentSessionsDir( agentId?: string, env: NodeJS.ProcessEnv = process.env, homedir: () => string = os.homedir, ): string { const root = resolveStateDir(env, homedir); const id = normalizeAgentId(agentId ?? DEFAULT_AGENT_ID); return path.join(root, "agents", id, "sessions"); } export function resolveSessionTranscriptsDir( env: NodeJS.ProcessEnv = process.env, homedir: () => string = os.homedir, ): string { return resolveAgentSessionsDir(DEFAULT_AGENT_ID, env, homedir); } export function resolveSessionTranscriptsDirForAgent( agentId?: string, env: NodeJS.ProcessEnv = process.env, homedir: () => string = os.homedir, ): string { return resolveAgentSessionsDir(agentId, env, homedir); } export function resolveDefaultSessionStorePath(agentId?: string): string { return path.join(resolveAgentSessionsDir(agentId), "sessions.json"); } export function resolveSessionTranscriptPath( sessionId: string, agentId?: string, topicId?: string | number, ): string { const safeTopicId = typeof topicId === "string" ? encodeURIComponent(topicId) : typeof topicId === "number" ? String(topicId) : undefined; const fileName = safeTopicId !== undefined ? `${sessionId}-topic-${safeTopicId}.jsonl` : `${sessionId}.jsonl`; return path.join(resolveAgentSessionsDir(agentId), fileName); } export function resolveSessionFilePath( sessionId: string, entry?: SessionEntry, opts?: { agentId?: string }, ): string { const candidate = entry?.sessionFile?.trim(); return candidate ? candidate : resolveSessionTranscriptPath(sessionId, opts?.agentId); } export function resolveStorePath(store?: string, opts?: { agentId?: string }) { const agentId = normalizeAgentId(opts?.agentId ?? DEFAULT_AGENT_ID); if (!store) { return resolveDefaultSessionStorePath(agentId); } if (store.includes("{agentId}")) { const expanded = store.replaceAll("{agentId}", agentId); if (expanded.startsWith("~")) { return path.resolve(expanded.replace(/^~(?=$|[\\/])/, os.homedir())); } return path.resolve(expanded); } if (store.startsWith("~")) { return path.resolve(store.replace(/^~(?=$|[\\/])/, os.homedir())); } return path.resolve(store); }