2026-02-19 14:59:34 -08:00

67 lines
1.7 KiB
TypeScript

import { readFileSync, readdirSync, existsSync } from "node:fs";
import { join } from "node:path";
import { resolveOpenClawStateDir, resolveWorkspaceRoot } from "@/lib/workspace";
export const dynamic = "force-dynamic";
type MemoryFile = {
name: string;
path: string;
sizeBytes: number;
};
export async function GET() {
const stateDir = resolveOpenClawStateDir();
const workspaceDir = resolveWorkspaceRoot() ?? join(stateDir, "workspace");
let mainMemory: string | null = null;
const dailyLogs: MemoryFile[] = [];
// Read main MEMORY.md
for (const filename of ["MEMORY.md", "memory.md"]) {
const memPath = join(workspaceDir, filename);
if (existsSync(memPath)) {
try {
mainMemory = readFileSync(memPath, "utf-8");
} catch {
// skip unreadable
}
break;
}
}
// Scan daily log files
const memoryDir = join(workspaceDir, "memory");
if (existsSync(memoryDir)) {
try {
const entries = readdirSync(memoryDir, { withFileTypes: true });
for (const entry of entries) {
if (!entry.isFile() || !entry.name.endsWith(".md")) {
continue;
}
const filePath = join(memoryDir, entry.name);
try {
const content = readFileSync(filePath, "utf-8");
dailyLogs.push({
name: entry.name,
path: filePath,
sizeBytes: Buffer.byteLength(content, "utf-8"),
});
} catch {
// skip
}
}
} catch {
// dir unreadable
}
}
// Sort daily logs by name (date-based filenames sort chronologically)
dailyLogs.sort((a, b) => b.name.localeCompare(a.name));
return Response.json({
mainMemory,
dailyLogs,
workspaceDir,
});
}