UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

113 lines (112 loc) 4.31 kB
import { H as formatMemoryDreamingDay } from "./dreaming-SqhFI2Et.js"; import "./memory-core-host-status-DVjlVr90.js"; import { n as appendMemoryHostEvent } from "./events-DvaHlgwL.js"; import "./memory-host-events-Bq7C7Kfo.js"; import { n as withTrailingNewline, t as replaceManagedMarkdownBlock } from "./memory-host-markdown-mHNl3RAL.js"; import { n as resolveMemoryCoreTimestamp, t as resolveMemoryCoreNowMs } from "./time-DhPCijtC.js"; import { t as updateDeepDreamsFile } from "./dreaming-dreams-file-B_M23tp8.js"; import path from "node:path"; import fs from "node:fs/promises"; //#region extensions/memory-core/src/dreaming-markdown.ts const DAILY_PHASE_HEADINGS = { light: "## Light Sleep", rem: "## REM Sleep" }; const DAILY_PHASE_LABELS = { light: "light", rem: "rem" }; function resolvePhaseMarkers(phase) { const label = DAILY_PHASE_LABELS[phase]; return { start: `<!-- openclaw:dreaming:${label}:start -->`, end: `<!-- openclaw:dreaming:${label}:end -->` }; } function resolveDailyMemoryPath(workspaceDir, epochMs, timezone) { const isoDay = formatMemoryDreamingDay(epochMs, timezone); return path.join(workspaceDir, "memory", `${isoDay}.md`); } function resolveSeparateReportPath(workspaceDir, phase, epochMs, timezone) { const isoDay = formatMemoryDreamingDay(epochMs, timezone); return path.join(workspaceDir, "memory", "dreaming", phase, `${isoDay}.md`); } function shouldWriteInline(storage) { return storage.mode === "inline" || storage.mode === "both"; } function shouldWriteSeparate(storage) { return storage.mode === "separate" || storage.mode === "both" || storage.separateReports; } async function writeDailyDreamingPhaseBlock(params) { const nowMs = resolveMemoryCoreNowMs(params.nowMs); const body = params.bodyLines.length > 0 ? params.bodyLines.join("\n") : "- No notable updates."; let inlinePath; let reportPath; if (shouldWriteInline(params.storage)) { inlinePath = resolveDailyMemoryPath(params.workspaceDir, nowMs, params.timezone); await fs.mkdir(path.dirname(inlinePath), { recursive: true }); const original = await fs.readFile(inlinePath, "utf-8").catch((err) => { if (err?.code === "ENOENT") return ""; throw err; }); const markers = resolvePhaseMarkers(params.phase); const updated = replaceManagedMarkdownBlock({ original, heading: DAILY_PHASE_HEADINGS[params.phase], startMarker: markers.start, endMarker: markers.end, body }); await fs.writeFile(inlinePath, withTrailingNewline(updated), "utf-8"); } if (shouldWriteSeparate(params.storage)) { reportPath = resolveSeparateReportPath(params.workspaceDir, params.phase, nowMs, params.timezone); await fs.mkdir(path.dirname(reportPath), { recursive: true }); const report = [ `# ${params.phase === "light" ? "Light Sleep" : "REM Sleep"}`, "", body, "" ].join("\n"); await fs.writeFile(reportPath, report, "utf-8"); } await appendMemoryHostEvent(params.workspaceDir, { type: "memory.dream.completed", timestamp: resolveMemoryCoreTimestamp(nowMs), phase: params.phase, ...inlinePath ? { inlinePath } : {}, ...reportPath ? { reportPath } : {}, lineCount: params.bodyLines.length, storageMode: params.storage.mode }); return { ...inlinePath ? { inlinePath } : {}, ...reportPath ? { reportPath } : {} }; } async function writeDeepDreamingReport(params) { const nowMs = resolveMemoryCoreNowMs(params.nowMs); const body = params.bodyLines.length > 0 ? params.bodyLines.join("\n") : "- No durable changes."; const inlinePath = await updateDeepDreamsFile({ workspaceDir: params.workspaceDir, bodyLines: params.bodyLines }); let reportPath; if (shouldWriteSeparate(params.storage)) { reportPath = resolveSeparateReportPath(params.workspaceDir, "deep", nowMs, params.timezone); await fs.mkdir(path.dirname(reportPath), { recursive: true }); await fs.writeFile(reportPath, `# Deep Sleep\n\n${body}\n`, "utf-8"); } await appendMemoryHostEvent(params.workspaceDir, { type: "memory.dream.completed", timestamp: resolveMemoryCoreTimestamp(nowMs), phase: "deep", inlinePath, ...reportPath ? { reportPath } : {}, lineCount: params.bodyLines.length, storageMode: params.storage.mode }); return reportPath; } //#endregion export { writeDeepDreamingReport as n, writeDailyDreamingPhaseBlock as t };