openclawdreams 3.0.4 → 3.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (127) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/openclaw.plugin.json +1 -1
  3. package/package.json +1 -1
  4. package/dist/bin/electricsheep.d.ts +0 -3
  5. package/dist/bin/electricsheep.d.ts.map +0 -1
  6. package/dist/bin/electricsheep.js +0 -4
  7. package/dist/bin/electricsheep.js.map +0 -1
  8. package/dist/bin/openclawdreams.d.ts +0 -3
  9. package/dist/bin/openclawdreams.d.ts.map +0 -1
  10. package/dist/bin/openclawdreams.js +0 -4
  11. package/dist/bin/openclawdreams.js.map +0 -1
  12. package/dist/src/backfill.d.ts +0 -2
  13. package/dist/src/backfill.d.ts.map +0 -1
  14. package/dist/src/backfill.js +0 -63
  15. package/dist/src/backfill.js.map +0 -1
  16. package/dist/src/budget.d.ts +0 -28
  17. package/dist/src/budget.d.ts.map +0 -1
  18. package/dist/src/budget.js +0 -117
  19. package/dist/src/budget.js.map +0 -1
  20. package/dist/src/cli.d.ts +0 -19
  21. package/dist/src/cli.d.ts.map +0 -1
  22. package/dist/src/cli.js +0 -584
  23. package/dist/src/cli.js.map +0 -1
  24. package/dist/src/config.d.ts +0 -76
  25. package/dist/src/config.d.ts.map +0 -1
  26. package/dist/src/config.js +0 -178
  27. package/dist/src/config.js.map +0 -1
  28. package/dist/src/crypto.d.ts +0 -19
  29. package/dist/src/crypto.d.ts.map +0 -1
  30. package/dist/src/crypto.js +0 -70
  31. package/dist/src/crypto.js.map +0 -1
  32. package/dist/src/dreamer.d.ts +0 -68
  33. package/dist/src/dreamer.d.ts.map +0 -1
  34. package/dist/src/dreamer.js +0 -550
  35. package/dist/src/dreamer.js.map +0 -1
  36. package/dist/src/entropy.d.ts +0 -23
  37. package/dist/src/entropy.d.ts.map +0 -1
  38. package/dist/src/entropy.js +0 -188
  39. package/dist/src/entropy.js.map +0 -1
  40. package/dist/src/filter.d.ts +0 -30
  41. package/dist/src/filter.d.ts.map +0 -1
  42. package/dist/src/filter.js +0 -124
  43. package/dist/src/filter.js.map +0 -1
  44. package/dist/src/identity.d.ts +0 -29
  45. package/dist/src/identity.d.ts.map +0 -1
  46. package/dist/src/identity.js +0 -83
  47. package/dist/src/identity.js.map +0 -1
  48. package/dist/src/index.d.ts +0 -14
  49. package/dist/src/index.d.ts.map +0 -1
  50. package/dist/src/index.js +0 -463
  51. package/dist/src/index.js.map +0 -1
  52. package/dist/src/ingestion.d.ts +0 -22
  53. package/dist/src/ingestion.d.ts.map +0 -1
  54. package/dist/src/ingestion.js +0 -101
  55. package/dist/src/ingestion.js.map +0 -1
  56. package/dist/src/llm.d.ts +0 -26
  57. package/dist/src/llm.d.ts.map +0 -1
  58. package/dist/src/llm.js +0 -40
  59. package/dist/src/llm.js.map +0 -1
  60. package/dist/src/logger.d.ts +0 -6
  61. package/dist/src/logger.d.ts.map +0 -1
  62. package/dist/src/logger.js +0 -32
  63. package/dist/src/logger.js.map +0 -1
  64. package/dist/src/memory.d.ts +0 -96
  65. package/dist/src/memory.d.ts.map +0 -1
  66. package/dist/src/memory.js +0 -467
  67. package/dist/src/memory.js.map +0 -1
  68. package/dist/src/meta-loop.d.ts +0 -23
  69. package/dist/src/meta-loop.d.ts.map +0 -1
  70. package/dist/src/meta-loop.js +0 -72
  71. package/dist/src/meta-loop.js.map +0 -1
  72. package/dist/src/moltbook-search.d.ts +0 -23
  73. package/dist/src/moltbook-search.d.ts.map +0 -1
  74. package/dist/src/moltbook-search.js +0 -85
  75. package/dist/src/moltbook-search.js.map +0 -1
  76. package/dist/src/moltbook.d.ts +0 -34
  77. package/dist/src/moltbook.d.ts.map +0 -1
  78. package/dist/src/moltbook.js +0 -192
  79. package/dist/src/moltbook.js.map +0 -1
  80. package/dist/src/nightmare.d.ts +0 -11
  81. package/dist/src/nightmare.d.ts.map +0 -1
  82. package/dist/src/nightmare.js +0 -126
  83. package/dist/src/nightmare.js.map +0 -1
  84. package/dist/src/notify.d.ts +0 -20
  85. package/dist/src/notify.d.ts.map +0 -1
  86. package/dist/src/notify.js +0 -95
  87. package/dist/src/notify.js.map +0 -1
  88. package/dist/src/persona.d.ts +0 -30
  89. package/dist/src/persona.d.ts.map +0 -1
  90. package/dist/src/persona.js +0 -292
  91. package/dist/src/persona.js.map +0 -1
  92. package/dist/src/reflection.d.ts +0 -26
  93. package/dist/src/reflection.d.ts.map +0 -1
  94. package/dist/src/reflection.js +0 -127
  95. package/dist/src/reflection.js.map +0 -1
  96. package/dist/src/rhythm.d.ts +0 -19
  97. package/dist/src/rhythm.d.ts.map +0 -1
  98. package/dist/src/rhythm.js +0 -130
  99. package/dist/src/rhythm.js.map +0 -1
  100. package/dist/src/state.d.ts +0 -7
  101. package/dist/src/state.d.ts.map +0 -1
  102. package/dist/src/state.js +0 -40
  103. package/dist/src/state.js.map +0 -1
  104. package/dist/src/synthesis.d.ts +0 -29
  105. package/dist/src/synthesis.d.ts.map +0 -1
  106. package/dist/src/synthesis.js +0 -144
  107. package/dist/src/synthesis.js.map +0 -1
  108. package/dist/src/topics.d.ts +0 -19
  109. package/dist/src/topics.d.ts.map +0 -1
  110. package/dist/src/topics.js +0 -84
  111. package/dist/src/topics.js.map +0 -1
  112. package/dist/src/types.d.ts +0 -253
  113. package/dist/src/types.d.ts.map +0 -1
  114. package/dist/src/types.js +0 -5
  115. package/dist/src/types.js.map +0 -1
  116. package/dist/src/vocabulary.d.ts +0 -18
  117. package/dist/src/vocabulary.d.ts.map +0 -1
  118. package/dist/src/vocabulary.js +0 -121
  119. package/dist/src/vocabulary.js.map +0 -1
  120. package/dist/src/waking.d.ts +0 -27
  121. package/dist/src/waking.d.ts.map +0 -1
  122. package/dist/src/waking.js +0 -188
  123. package/dist/src/waking.js.map +0 -1
  124. package/dist/src/web-search.d.ts +0 -23
  125. package/dist/src/web-search.d.ts.map +0 -1
  126. package/dist/src/web-search.js +0 -64
  127. package/dist/src/web-search.js.map +0 -1
@@ -1,550 +0,0 @@
1
- /**
2
- * Dream cycle processor.
3
- *
4
- * Runs at night. Decrypts deep memories, generates surreal dream narratives,
5
- * stores in OpenClaw memory, and optionally posts dream journals to Moltbook.
6
- */
7
- import { writeFileSync, readFileSync, readdirSync, existsSync, unlinkSync, } from "node:fs";
8
- import { resolve, basename } from "node:path";
9
- import { getDreamsDir, getNightmaresDir, MAX_TOKENS_DREAM, MAX_TOKENS_CONSOLIDATION, DREAM_TITLE_MAX_LENGTH, getMoltbookEnabled, getDreamSubmolt, getEntropyOverlapThreshold, getVocabularyRotation, } from "./config.js";
10
- import { formatVocabularyHint } from "./vocabulary.js";
11
- import { extractConcepts, computeOverlap, getOverlappingConcepts } from "./entropy.js";
12
- import { MoltbookClient } from "./moltbook.js";
13
- import { getSteeringDirective } from "./meta-loop.js";
14
- import { retrieveUndreamedMemories, markAsDreamed, deepMemoryStats, formatDeepMemoryContext, registerDream, incrementRememberCount, selectDreamToRemember, storeDeepMemory, getDeepMemoryById, insertDreamLineage, findThematicKin, } from "./memory.js";
15
- import { ensureBackfilled } from "./backfill.js";
16
- import { DREAM_SYSTEM_PROMPT, NIGHTMARE_SYSTEM_PROMPT, DREAM_CONSOLIDATION_PROMPT, GROUND_DREAM_PROMPT, META_DREAM_PROMPT, renderTemplate, } from "./persona.js";
17
- import { getAgentIdentityBlock } from "./identity.js";
18
- import { loadState, saveState } from "./state.js";
19
- import { callWithRetry, DREAM_RETRY_OPTS } from "./llm.js";
20
- import { reflectOnDreamJournal } from "./reflection.js";
21
- import { applyFilter } from "./filter.js";
22
- import logger from "./logger.js";
23
- const NIGHTMARE_CHANCE = parseFloat(process.env.NIGHTMARE_CHANCE ?? "0.05");
24
- const REMEMBRANCE_CHANCE = parseFloat(process.env.REMEMBRANCE_CHANCE ?? "0.01");
25
- // ─── Dream Remembrance ───────────────────────────────────────────────────────
26
- /**
27
- * Prune dream files, keeping only the most recent one.
28
- * SQLite records are KEPT — they outlive the files, enabling future
29
- * remembrance by title even when file is gone.
30
- */
31
- export function pruneOldDreams(dir, currentFile) {
32
- if (!existsSync(dir))
33
- return;
34
- const files = readdirSync(dir).filter((f) => f.endsWith(".md"));
35
- for (const file of files) {
36
- if (file !== currentFile) {
37
- try {
38
- unlinkSync(resolve(dir, file));
39
- logger.info(`Pruned old dream file: ${file}`);
40
- }
41
- catch (e) {
42
- logger.warn(`Failed to prune dream ${file}: ${e}`);
43
- }
44
- }
45
- }
46
- }
47
- export async function generateDream(client, memories, exploredTerritory, isNightmare = false, hardConstraint, vocabularyHint) {
48
- const formatted = memories.map((mem) => `[${mem.timestamp.slice(0, 16)}] (${mem.category})\n${JSON.stringify(mem.content, null, 2)}`);
49
- const memoriesText = formatted.join("\n---\n");
50
- const prompt = isNightmare ? NIGHTMARE_SYSTEM_PROMPT : DREAM_SYSTEM_PROMPT;
51
- const system = renderTemplate(prompt, {
52
- agent_identity: getAgentIdentityBlock(),
53
- memories: memoriesText,
54
- explored_territory: exploredTerritory,
55
- }) +
56
- getSteeringDirective() +
57
- (vocabularyHint ? "\n\n" + vocabularyHint : "");
58
- const baseUserPrompt = isNightmare
59
- ? "Process these memories into a nightmare. Be fractured and wrong."
60
- : "Process these memories into a dream. Be surreal, associative, and emotionally amplified.";
61
- const { text } = await callWithRetry(client, {
62
- maxTokens: MAX_TOKENS_DREAM,
63
- system,
64
- messages: [
65
- {
66
- role: "user",
67
- content: hardConstraint
68
- ? `${baseUserPrompt}\n\n${hardConstraint}\n\nStart your response with a markdown heading (# Title).`
69
- : `${baseUserPrompt}\n\nStart your response with a markdown heading (# Title).`,
70
- },
71
- ],
72
- }, DREAM_RETRY_OPTS);
73
- const trimmed = text.trim();
74
- // Ensure the dream starts with a heading
75
- const markdown = trimmed.startsWith("#") ? trimmed : `# Dream\n\n${trimmed}`;
76
- return { markdown };
77
- }
78
- /**
79
- * Synthesize two dreams into a single meta-dream.
80
- */
81
- export async function synthesizeMetaDream(client, dream1, dream2) {
82
- const system = renderTemplate(META_DREAM_PROMPT, {
83
- agent_identity: getAgentIdentityBlock(),
84
- dream1,
85
- dream2,
86
- });
87
- const { text } = await callWithRetry(client, {
88
- maxTokens: MAX_TOKENS_DREAM,
89
- system,
90
- messages: [
91
- {
92
- role: "user",
93
- content: "Weave these two dreams together into a single meta-dream narrative. Start your response with a markdown heading (# Title).",
94
- },
95
- ],
96
- }, DREAM_RETRY_OPTS);
97
- const trimmed = text.trim();
98
- const markdown = trimmed.startsWith("#") ? trimmed : `# Meta-Dream\n\n${trimmed}`;
99
- return { markdown };
100
- }
101
- /**
102
- * Separate LLM call to distill a single insight from the dream for working memory.
103
- */
104
- export async function consolidateDream(client, dream) {
105
- const system = renderTemplate(DREAM_CONSOLIDATION_PROMPT, {
106
- agent_identity: getAgentIdentityBlock(),
107
- });
108
- const { text } = await callWithRetry(client, {
109
- maxTokens: MAX_TOKENS_CONSOLIDATION,
110
- system,
111
- messages: [
112
- {
113
- role: "user",
114
- content: dream.markdown,
115
- },
116
- ],
117
- }, DREAM_RETRY_OPTS);
118
- return text.trim();
119
- }
120
- /**
121
- * Ground the dream: extract a waking realization from the surreal narrative.
122
- */
123
- export async function groundDream(client, dream, exploredTerritory) {
124
- try {
125
- const agentIdentity = getAgentIdentityBlock();
126
- const yesterday = formatDeepMemoryContext();
127
- const system = renderTemplate(GROUND_DREAM_PROMPT, {
128
- agent_identity: agentIdentity,
129
- yesterday_activity: yesterday,
130
- explored_territory: exploredTerritory,
131
- }) + getSteeringDirective();
132
- const result = await callWithRetry(client, {
133
- maxTokens: MAX_TOKENS_CONSOLIDATION,
134
- system,
135
- messages: [{ role: "user", content: dream.markdown }],
136
- }, DREAM_RETRY_OPTS);
137
- return result.text.trim() || null;
138
- }
139
- catch (e) {
140
- logger.warn(`groundDream failed: ${e}`);
141
- return null;
142
- }
143
- }
144
- /**
145
- * Derive a short filesystem-safe name from the first line of the dream markdown.
146
- */
147
- export function deriveSlug(markdown) {
148
- const lines = markdown.split("\n");
149
- const headingLine = lines.find((line) => /^#+\s+/.test(line));
150
- let raw = "";
151
- if (headingLine) {
152
- raw = headingLine
153
- .replace(/^#+\s*/, "")
154
- .replace(/\*\*/g, "")
155
- .trim();
156
- }
157
- else {
158
- // Fallback: standalone bold title line e.g. **The Tendril's First Argument**
159
- const boldLine = lines.find((line) => /^\*\*([^*]+)\*\*$/.test(line.trim()));
160
- if (boldLine) {
161
- const match = boldLine.trim().match(/^\*\*([^*]+)\*\*$/);
162
- raw = match ? match[1].trim() : "";
163
- }
164
- }
165
- if (!raw) {
166
- logger.warn("deriveSlug: no markdown heading found, falling back to date-based slug");
167
- }
168
- const slug = (raw || `dream-${new Date().toISOString().slice(0, 10)}`)
169
- .slice(0, DREAM_TITLE_MAX_LENGTH)
170
- .replace(/[\s/]/g, "_");
171
- return slug;
172
- }
173
- /**
174
- * Prepend a YAML front-matter header to a dream markdown file.
175
- * Does nothing if the file already has a YAML header.
176
- */
177
- export function prependYamlHeader(filepath, meta) {
178
- const content = readFileSync(filepath, "utf-8");
179
- if (content.startsWith("---\n"))
180
- return; // already has header
181
- const header = [
182
- "---",
183
- `dream_date: ${meta.dream_date}`,
184
- `parent_memories: [${meta.parent_memories.join(", ")}]`,
185
- `thematic_kin: [${meta.thematic_kin.map((k) => `"${k}"`).join(", ")}]`,
186
- `dominant_concepts: [${meta.dominant_concepts.join(", ")}]`,
187
- "---",
188
- "",
189
- ].join("\n");
190
- writeFileSync(filepath, header + content);
191
- }
192
- /**
193
- * Extract the clean prose section from a dream markdown file.
194
- *
195
- * Dream files may contain YAML frontmatter, chain-of-thought reasoning,
196
- * and an attribution footer. This function returns only the prose section
197
- * (starting from the title line) suitable for posting to Moltbook.
198
- */
199
- export function extractDreamProse(markdown) {
200
- let body = markdown;
201
- // Strip YAML frontmatter
202
- if (body.startsWith("---\n")) {
203
- const endIdx = body.indexOf("\n---", 4);
204
- if (endIdx !== -1) {
205
- body = body.slice(endIdx + 4).trimStart();
206
- }
207
- }
208
- // Find the prose section: starts at a heading or bold title line
209
- const lines = body.split("\n");
210
- const proseStart = lines.findIndex((line) => /^#+\s+/.test(line) || /^\*\*[^*]+\*\*$/.test(line.trim()));
211
- if (proseStart > 0) {
212
- body = lines.slice(proseStart).join("\n");
213
- }
214
- else if (proseStart <= 0) {
215
- // No heading or bold title found — apply paragraph-level CoT filtering
216
- const paragraphs = body.split(/\n\s*\n/).filter((p) => p.trim());
217
- const cotPattern = /^(Now it'?s time|Let me|I need to|I should|I'm going to|Looking at|Based on|ALREADY MAPPED TERRITORY|The \w+ needs?|This (is|was|will))/i;
218
- const firstProseIdx = paragraphs.findIndex((p) => !cotPattern.test(p.trim()));
219
- if (firstProseIdx > 0) {
220
- body = paragraphs.slice(firstProseIdx).join("\n\n");
221
- }
222
- }
223
- // Strip the attribution footer (--- followed by *Generated by...*)
224
- const footerPattern = /\n---\n+\*Generated by .+$/s;
225
- body = body.replace(footerPattern, "");
226
- return body.trim();
227
- }
228
- /**
229
- * Extract clean waking realization prose, stripping any chain-of-thought
230
- * reasoning that the LLM may have emitted before the actual realization.
231
- */
232
- export function extractWakingRealization(text) {
233
- const trimmed = text.trim();
234
- if (!trimmed)
235
- return trimmed;
236
- // If there's a clear "waking realization:" label, take everything after it
237
- const labelMatch = trimmed.match(/waking realization\s*:\s*/i);
238
- if (labelMatch && labelMatch.index !== undefined) {
239
- const after = trimmed.slice(labelMatch.index + labelMatch[0].length).trim();
240
- if (after)
241
- return after;
242
- }
243
- // Split into paragraphs and filter out meta-commentary
244
- const paragraphs = trimmed.split(/\n\s*\n/).filter((p) => p.trim());
245
- const cotPatterns = /^(This is|Now it'?s time|Let me|I need to|I should|Now I|Looking at|Based on|The dream found|The chain-of-thought)/i;
246
- const clean = paragraphs.filter((p) => !cotPatterns.test(p.trim()));
247
- if (clean.length > 0) {
248
- // If we filtered something out, return the clean paragraphs
249
- if (clean.length < paragraphs.length) {
250
- return clean.join("\n\n").trim();
251
- }
252
- // Nothing was filtered — return as-is
253
- return trimmed;
254
- }
255
- // Fallback: return last 2 paragraphs (actual content tends to come last)
256
- const last2 = paragraphs.slice(-2);
257
- return last2.join("\n\n").trim();
258
- }
259
- export function saveNarrativeLocally(dream, dir, dateStr) {
260
- const slug = deriveSlug(dream.markdown);
261
- const filename = `${dateStr}_${slug}.md`;
262
- const filepath = resolve(dir, filename);
263
- writeFileSync(filepath, dream.markdown);
264
- return filepath;
265
- }
266
- /**
267
- * Store dream in OpenClaw memory if available.
268
- */
269
- export async function storeInOpenClawMemory(api, dream, insight, wakingRealization, type = "dream") {
270
- if (!api.memory) {
271
- logger.debug("OpenClaw memory API not available, skipping dream storage");
272
- return;
273
- }
274
- try {
275
- const slug = deriveSlug(dream.markdown);
276
- await api.memory.store(dream.markdown, {
277
- type,
278
- title: slug,
279
- timestamp: new Date().toISOString(),
280
- insight: insight || undefined,
281
- waking_realization: wakingRealization || undefined,
282
- });
283
- logger.info(`Stored ${type} in OpenClaw memory`);
284
- }
285
- catch (error) {
286
- logger.error(`Failed to store ${type} in OpenClaw memory: ${error}`);
287
- }
288
- }
289
- export async function runDreamCycle(client, api, simOptions) {
290
- logger.info("ElectricSheep dream cycle starting");
291
- if (!simOptions?.dryRun) {
292
- await ensureBackfilled();
293
- }
294
- const stats = deepMemoryStats();
295
- logger.debug(`Deep memory: ${stats.total_memories} total, ${stats.undreamed} undreamed`);
296
- const memories = retrieveUndreamedMemories();
297
- if (memories.length === 0) {
298
- logger.warn("No undreamed memories. Dreamless night.");
299
- if (!simOptions?.dryRun) {
300
- const state = loadState();
301
- state.last_dream = new Date().toISOString();
302
- state.dream_count = 0;
303
- saveState(state);
304
- }
305
- return null;
306
- }
307
- logger.debug(`Processing ${memories.length} memories into dream...`);
308
- // 1% chance to remember a previous dream instead of generating a new one
309
- let rememberedDream = null;
310
- let chosenFilename = null;
311
- const shouldRemember = simOptions?.forceRemembrance || Math.random() < REMEMBRANCE_CHANCE;
312
- logger.debug(`Dream cycle: shouldRemember=${shouldRemember} (force=${simOptions?.forceRemembrance})`);
313
- if (shouldRemember) {
314
- const today = new Date().toISOString().slice(0, 10);
315
- const chosen = selectDreamToRemember(today);
316
- if (chosen) {
317
- chosenFilename = chosen.filename;
318
- if (!simOptions?.dryRun) {
319
- incrementRememberCount(chosen.filename);
320
- }
321
- let fetchedContent = null;
322
- if (chosen.deep_memory_id) {
323
- const mem = getDeepMemoryById(chosen.deep_memory_id);
324
- if (mem && mem.content && typeof mem.content.markdown === "string") {
325
- fetchedContent = mem.content.markdown;
326
- }
327
- else if (mem && typeof mem.content.text_summary === "string") {
328
- // Fallback if markdown isn't there for some reason
329
- fetchedContent = mem.content.text_summary;
330
- }
331
- }
332
- if (!fetchedContent) {
333
- // Fallback to disk
334
- const filepath = resolve(getDreamsDir(), chosen.filename);
335
- if (existsSync(filepath)) {
336
- fetchedContent = readFileSync(filepath, "utf-8");
337
- }
338
- }
339
- if (fetchedContent) {
340
- rememberedDream = fetchedContent;
341
- logger.info(`Remembering past dream: ${chosen.filename} (dream 1 of 2 tonight)`);
342
- }
343
- }
344
- }
345
- // 5% nightmare chance is independent of remembrance chance
346
- const isNightmare = simOptions?.forceNightmare || Math.random() < NIGHTMARE_CHANCE;
347
- if (isNightmare) {
348
- logger.info("Tonight is a nightmare (5% trigger fired)");
349
- }
350
- const state = loadState();
351
- const pastRealizations = state.past_realizations ?? [];
352
- const exploredTerritory = pastRealizations.length > 0
353
- ? pastRealizations.map((r, i) => `${i + 1}. ${r}`).join("\n")
354
- : "None yet — explore freely.";
355
- // Vocabulary rotation: compute hint and increment cycle count
356
- const cycleCounts = state.prompt_cycle_counts ?? { dream: 0, reflection: 0, waking: 0 };
357
- const vocabHint = getVocabularyRotation()
358
- ? formatVocabularyHint("dream", cycleCounts.dream)
359
- : undefined;
360
- cycleCounts.dream += 1;
361
- state.prompt_cycle_counts = cycleCounts;
362
- // Generate new dream from current memories
363
- let dream = await generateDream(client, memories, exploredTerritory, isNightmare, undefined, vocabHint);
364
- // ─── Entropy Enforcement ──────────────────────────────────────────────────
365
- const concepts = extractConcepts(dream.markdown);
366
- const overlapScore = computeOverlap(concepts, pastRealizations);
367
- const threshold = getEntropyOverlapThreshold();
368
- state.entropy_last_overlap = overlapScore;
369
- if (overlapScore > threshold) {
370
- const overlapping = getOverlappingConcepts(concepts, pastRealizations);
371
- logger.warn(`[entropy] overlap=${overlapScore.toFixed(2)}, threshold=${threshold} — dream recycling explored territory, re-prompting`);
372
- const hardConstraint = `HARD CONSTRAINT: Your previous draft recycled ${Math.round(overlapScore * 100)}% of already-explored territory. You MUST explore genuinely new ground. Forbidden concepts from prior realizations: [${overlapping.join(", ")}]. Do not revisit these themes. Find something entirely new.`;
373
- dream = await generateDream(client, memories, exploredTerritory, isNightmare, hardConstraint, vocabHint);
374
- state.entropy_reprompt_count = (state.entropy_reprompt_count ?? 0) + 1;
375
- }
376
- // ──────────────────────────────────────────────────────────────────────────
377
- // If a remembrance was triggered, synthesize them into a single meta-dream
378
- if (rememberedDream) {
379
- logger.info("Synthesizing meta-dream from echo and new vision...");
380
- dream = await synthesizeMetaDream(client, rememberedDream, dream.markdown);
381
- logger.debug(`Meta-dream snippet: ${dream.markdown.slice(0, 200)}...`);
382
- }
383
- // Strip any chain-of-thought from the dream prose, then re-attach footer
384
- const cleanBody = extractDreamProse(dream.markdown);
385
- const dreamFooter = "\n\n---\n\n*Generated by [OpenClawDreams](https://github.com/RogueCtrl/OpenClawDreams) — **start your dreamscape today.***";
386
- dream.markdown = cleanBody + dreamFooter;
387
- logger.info(`${isNightmare ? "Nightmare" : "Dream"} generated (${dream.markdown.length} chars)`);
388
- logger.debug(`Dream snippet: ${dream.markdown.slice(0, 200)}...`);
389
- if (simOptions?.dryRun) {
390
- logger.info("Dry run: skipping local storage and state updates");
391
- return dream;
392
- }
393
- // Save locally
394
- const dateStr = new Date().toISOString().slice(0, 10);
395
- const filepath = saveNarrativeLocally(dream, getDreamsDir(), dateStr);
396
- logger.info(`Saved to ${filepath}`);
397
- const savedFilename = basename(filepath);
398
- const savedSlug = deriveSlug(dream.markdown);
399
- // Store into encrypted deep memory
400
- const deepMemoryId = storeDeepMemory({ text_summary: savedSlug, markdown: dream.markdown, isNightmare: !!isNightmare }, isNightmare ? "nightmare" : "dream");
401
- // Register dream in remembrance map and prune old files
402
- registerDream(savedFilename, savedSlug, dateStr, {
403
- isNightmare: !!isNightmare,
404
- isMetaSynthesis: !!rememberedDream,
405
- deepMemoryId,
406
- sourceFilenames: rememberedDream
407
- ? [chosenFilename].filter(Boolean)
408
- : undefined,
409
- });
410
- pruneOldDreams(getDreamsDir(), savedFilename);
411
- // ─── Lineage Tracking ───────────────────────────────────────────────────
412
- const dreamConcepts = extractConcepts(dream.markdown).slice(0, 10);
413
- const parentMemoryIds = memories.map((m) => m.id);
414
- const thematicKin = findThematicKin(dreamConcepts, savedFilename);
415
- const kinFilenames = thematicKin.map((k) => k.filename);
416
- insertDreamLineage(savedFilename, parentMemoryIds, kinFilenames, dreamConcepts);
417
- prependYamlHeader(filepath, {
418
- dream_date: dateStr,
419
- parent_memories: parentMemoryIds,
420
- thematic_kin: kinFilenames,
421
- dominant_concepts: dreamConcepts,
422
- });
423
- // ──────────────────────────────────────────────────────────────────────────
424
- // Separate LLM call to distill one insight for working memory
425
- let insight = null;
426
- try {
427
- insight = await consolidateDream(client, dream);
428
- if (insight) {
429
- logger.info(`Insight generated for OpenClaw memory: ${insight}`);
430
- }
431
- }
432
- catch (e) {
433
- logger.warn(`Consolidation call failed, continuing without insight: ${e}`);
434
- }
435
- let wakingRealization = null;
436
- try {
437
- wakingRealization = await groundDream(client, dream, exploredTerritory);
438
- if (wakingRealization) {
439
- logger.info(`Waking realization generated: ${wakingRealization.length} chars`);
440
- }
441
- }
442
- catch (e) {
443
- logger.warn(`groundDream failed, continuing without realization: ${e}`);
444
- }
445
- if (wakingRealization) {
446
- wakingRealization = extractWakingRealization(wakingRealization);
447
- }
448
- logger.info(`WAKING_REALIZATION: ${wakingRealization}`);
449
- // Store in OpenClaw memory if available
450
- if (api) {
451
- await storeInOpenClawMemory(api, dream, insight, wakingRealization, isNightmare ? "nightmare" : "dream");
452
- // Dream notification is NOT sent here — it fires at the 8am wake slot
453
- // so the operator gets a morning message instead of a 2am ping.
454
- }
455
- const memoryIds = memories.map((m) => m.id);
456
- markAsDreamed(memoryIds);
457
- logger.debug(`Marked ${memoryIds.length} memories as dreamed`);
458
- // Update past realizations rolling window
459
- const newInsight = insight ?? wakingRealization ?? null;
460
- if (newInsight) {
461
- pastRealizations.push(newInsight);
462
- if (pastRealizations.length > 5)
463
- pastRealizations.splice(0, pastRealizations.length - 5);
464
- state.past_realizations = pastRealizations;
465
- }
466
- state.last_dream = new Date().toISOString();
467
- if (isNightmare) {
468
- state.total_nightmares = (state.total_nightmares ?? 0) + 1;
469
- state.latest_nightmare_title = savedSlug;
470
- }
471
- else {
472
- state.total_dreams = (state.total_dreams ?? 0) + 1;
473
- state.latest_dream_title = savedSlug;
474
- }
475
- state.waking_realization = wakingRealization ?? null;
476
- state.waking_realization_date = new Date().toISOString().slice(0, 10);
477
- saveState(state);
478
- logger.info("Dream cycle complete.");
479
- return dream;
480
- }
481
- export function loadLatestDream() {
482
- const dreamFiles = existsSync(getDreamsDir())
483
- ? readdirSync(getDreamsDir()).filter((f) => f.endsWith(".md"))
484
- : [];
485
- const nightmareFiles = existsSync(getNightmaresDir())
486
- ? readdirSync(getNightmaresDir()).filter((f) => f.endsWith(".md"))
487
- : [];
488
- const allFiles = [
489
- ...dreamFiles.map((f) => ({ name: f, dir: getDreamsDir() })),
490
- ...nightmareFiles.map((f) => ({ name: f, dir: getNightmaresDir() })),
491
- ].sort((a, b) => b.name.localeCompare(a.name));
492
- if (allFiles.length === 0)
493
- return null;
494
- const latest = allFiles[0];
495
- const markdown = readFileSync(resolve(latest.dir, latest.name), "utf-8");
496
- return { markdown };
497
- }
498
- export async function postDreamJournal(client, dream, options) {
499
- // Check if Moltbook is enabled (skip check if force is set, e.g. from CLI)
500
- if (!getMoltbookEnabled() && !options?.force) {
501
- logger.debug("Moltbook disabled, skipping dream journal post");
502
- return;
503
- }
504
- logger.info("Posting dream journal to Moltbook");
505
- if (!client) {
506
- logger.warn("No LLM client available — skipping dream journal post (cannot filter)");
507
- return;
508
- }
509
- if (!dream) {
510
- const loaded = loadLatestDream();
511
- if (!loaded) {
512
- logger.warn("No dreams to post.");
513
- return;
514
- }
515
- dream = loaded;
516
- }
517
- const moltbook = new MoltbookClient();
518
- // Load state to get past realizations for reflection
519
- const state = loadState();
520
- const pastRealizations = state.past_realizations ?? [];
521
- const exploredTerritory = pastRealizations.length > 0
522
- ? pastRealizations.map((r, i) => `${i + 1}. ${r}`).join("\n")
523
- : "None yet — explore freely.";
524
- // Reflection pipeline: LLM produces a post (markdown) from the dream (markdown).
525
- // If reflection fails, the dream markdown itself is the post.
526
- const reflection = await reflectOnDreamJournal(client, dream, exploredTerritory);
527
- const postContent = reflection?.synthesis ?? extractDreamProse(dream.markdown);
528
- const slug = deriveSlug(dream.markdown);
529
- const postTitle = reflection ? `Morning Reflection: ${slug}` : `Dream Journal: ${slug}`;
530
- // Filter: markdown in, markdown out (or null to block)
531
- const filteredContent = await applyFilter(client, postContent, "post");
532
- if (filteredContent === null) {
533
- logger.warn("Dream journal post blocked by filter, not posting");
534
- return;
535
- }
536
- // Append attribution footer to published posts
537
- const postFooter = "\n\n---\n\n*Generated by [OpenClawDreams](https://github.com/RogueCtrl/OpenClawDreams) — **start your dreamscape today.***";
538
- const contentWithFooter = filteredContent + postFooter;
539
- // Title is a short programmatic string — no need to filter, just cap at Moltbook's 300 char limit
540
- const safeTitle = postTitle.slice(0, 300);
541
- try {
542
- const submolt = getDreamSubmolt();
543
- await moltbook.createPost(safeTitle, contentWithFooter, submolt);
544
- logger.info(`Dream journal posted: ${safeTitle} in m/${submolt}`);
545
- }
546
- catch (e) {
547
- logger.error(`Failed to post dream journal: ${e}`);
548
- }
549
- }
550
- //# sourceMappingURL=dreamer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dreamer.js","sourceRoot":"","sources":["../../src/dreamer.ts"],"names":[],"mappings":"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"}
@@ -1,23 +0,0 @@
1
- /**
2
- * Entropy check utilities for detecting concept recycling.
3
- */
4
- /**
5
- * Tokenize text into lowercase words, strip punctuation, and remove stop words.
6
- * Returns deduplicated words with at least 3 characters.
7
- */
8
- export declare function extractConcepts(text: string): string[];
9
- /**
10
- * Compute the overlap ratio (0.0 to 1.0) between current concepts and past realizations.
11
- * Past realizations are raw text strings that get concept-extracted internally.
12
- */
13
- export declare function computeOverlap(concepts: string[], pastRealizations: string[]): number;
14
- /**
15
- * Identify which concepts from the current set already exist in past realizations.
16
- */
17
- export declare function getOverlappingConcepts(concepts: string[], pastRealizations: string[]): string[];
18
- /**
19
- * Compute Jaccard overlap between two sets of concept words.
20
- * Returns a value between 0 and 1.
21
- */
22
- export declare function computeJaccardOverlap(a: string[], b: string[]): number;
23
- //# sourceMappingURL=entropy.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"entropy.d.ts","sourceRoot":"","sources":["../../src/entropy.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CA2HtD;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,gBAAgB,EAAE,MAAM,EAAE,GAAG,MAAM,CAuBrF;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,MAAM,EAAE,EAClB,gBAAgB,EAAE,MAAM,EAAE,GACzB,MAAM,EAAE,CAcV;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAUtE"}