| import { existsSync, mkdirSync, readFileSync, writeFileSync, readdirSync, rmSync } from "node:fs";
|
| import { join } from "node:path";
|
| import { resolveDataDir } from "../data-dir.mjs";
|
|
|
| function sessionsDir() {
|
| const dir = join(resolveDataDir(), "repl-sessions");
|
| if (!existsSync(dir)) mkdirSync(dir, { recursive: true });
|
| return dir;
|
| }
|
|
|
| export function saveSession(name, session) {
|
| const path = join(sessionsDir(), `${name}.json`);
|
| writeFileSync(
|
| path,
|
| JSON.stringify({ ...session, name, updatedAt: new Date().toISOString() }, null, 2)
|
| );
|
| }
|
|
|
| export function loadSession(name) {
|
| const path = join(sessionsDir(), `${name}.json`);
|
| if (!existsSync(path)) throw new Error(`session '${name}' not found`);
|
| return JSON.parse(readFileSync(path, "utf8"));
|
| }
|
|
|
| export function listSessions() {
|
| const dir = sessionsDir();
|
| return readdirSync(dir)
|
| .filter((f) => f.endsWith(".json"))
|
| .map((f) => {
|
| try {
|
| const data = JSON.parse(readFileSync(join(dir, f), "utf8"));
|
| return {
|
| name: data.name || f.replace(".json", ""),
|
| updatedAt: data.updatedAt,
|
| model: data.model,
|
| };
|
| } catch {
|
| return { name: f.replace(".json", ""), updatedAt: null, model: null };
|
| }
|
| });
|
| }
|
|
|
| export function autosave(session) {
|
| try {
|
| saveSession("autosave", session);
|
| } catch {
|
|
|
| }
|
| }
|
|
|
| export function deleteSession(name) {
|
| const path = join(sessionsDir(), `${name}.json`);
|
| if (existsSync(path)) rmSync(path);
|
| }
|
|
|