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.
- package/CHANGELOG.md +26 -0
- package/openclaw.plugin.json +1 -1
- package/package.json +1 -1
- package/dist/bin/electricsheep.d.ts +0 -3
- package/dist/bin/electricsheep.d.ts.map +0 -1
- package/dist/bin/electricsheep.js +0 -4
- package/dist/bin/electricsheep.js.map +0 -1
- package/dist/bin/openclawdreams.d.ts +0 -3
- package/dist/bin/openclawdreams.d.ts.map +0 -1
- package/dist/bin/openclawdreams.js +0 -4
- package/dist/bin/openclawdreams.js.map +0 -1
- package/dist/src/backfill.d.ts +0 -2
- package/dist/src/backfill.d.ts.map +0 -1
- package/dist/src/backfill.js +0 -63
- package/dist/src/backfill.js.map +0 -1
- package/dist/src/budget.d.ts +0 -28
- package/dist/src/budget.d.ts.map +0 -1
- package/dist/src/budget.js +0 -117
- package/dist/src/budget.js.map +0 -1
- package/dist/src/cli.d.ts +0 -19
- package/dist/src/cli.d.ts.map +0 -1
- package/dist/src/cli.js +0 -584
- package/dist/src/cli.js.map +0 -1
- package/dist/src/config.d.ts +0 -76
- package/dist/src/config.d.ts.map +0 -1
- package/dist/src/config.js +0 -178
- package/dist/src/config.js.map +0 -1
- package/dist/src/crypto.d.ts +0 -19
- package/dist/src/crypto.d.ts.map +0 -1
- package/dist/src/crypto.js +0 -70
- package/dist/src/crypto.js.map +0 -1
- package/dist/src/dreamer.d.ts +0 -68
- package/dist/src/dreamer.d.ts.map +0 -1
- package/dist/src/dreamer.js +0 -550
- package/dist/src/dreamer.js.map +0 -1
- package/dist/src/entropy.d.ts +0 -23
- package/dist/src/entropy.d.ts.map +0 -1
- package/dist/src/entropy.js +0 -188
- package/dist/src/entropy.js.map +0 -1
- package/dist/src/filter.d.ts +0 -30
- package/dist/src/filter.d.ts.map +0 -1
- package/dist/src/filter.js +0 -124
- package/dist/src/filter.js.map +0 -1
- package/dist/src/identity.d.ts +0 -29
- package/dist/src/identity.d.ts.map +0 -1
- package/dist/src/identity.js +0 -83
- package/dist/src/identity.js.map +0 -1
- package/dist/src/index.d.ts +0 -14
- package/dist/src/index.d.ts.map +0 -1
- package/dist/src/index.js +0 -463
- package/dist/src/index.js.map +0 -1
- package/dist/src/ingestion.d.ts +0 -22
- package/dist/src/ingestion.d.ts.map +0 -1
- package/dist/src/ingestion.js +0 -101
- package/dist/src/ingestion.js.map +0 -1
- package/dist/src/llm.d.ts +0 -26
- package/dist/src/llm.d.ts.map +0 -1
- package/dist/src/llm.js +0 -40
- package/dist/src/llm.js.map +0 -1
- package/dist/src/logger.d.ts +0 -6
- package/dist/src/logger.d.ts.map +0 -1
- package/dist/src/logger.js +0 -32
- package/dist/src/logger.js.map +0 -1
- package/dist/src/memory.d.ts +0 -96
- package/dist/src/memory.d.ts.map +0 -1
- package/dist/src/memory.js +0 -467
- package/dist/src/memory.js.map +0 -1
- package/dist/src/meta-loop.d.ts +0 -23
- package/dist/src/meta-loop.d.ts.map +0 -1
- package/dist/src/meta-loop.js +0 -72
- package/dist/src/meta-loop.js.map +0 -1
- package/dist/src/moltbook-search.d.ts +0 -23
- package/dist/src/moltbook-search.d.ts.map +0 -1
- package/dist/src/moltbook-search.js +0 -85
- package/dist/src/moltbook-search.js.map +0 -1
- package/dist/src/moltbook.d.ts +0 -34
- package/dist/src/moltbook.d.ts.map +0 -1
- package/dist/src/moltbook.js +0 -192
- package/dist/src/moltbook.js.map +0 -1
- package/dist/src/nightmare.d.ts +0 -11
- package/dist/src/nightmare.d.ts.map +0 -1
- package/dist/src/nightmare.js +0 -126
- package/dist/src/nightmare.js.map +0 -1
- package/dist/src/notify.d.ts +0 -20
- package/dist/src/notify.d.ts.map +0 -1
- package/dist/src/notify.js +0 -95
- package/dist/src/notify.js.map +0 -1
- package/dist/src/persona.d.ts +0 -30
- package/dist/src/persona.d.ts.map +0 -1
- package/dist/src/persona.js +0 -292
- package/dist/src/persona.js.map +0 -1
- package/dist/src/reflection.d.ts +0 -26
- package/dist/src/reflection.d.ts.map +0 -1
- package/dist/src/reflection.js +0 -127
- package/dist/src/reflection.js.map +0 -1
- package/dist/src/rhythm.d.ts +0 -19
- package/dist/src/rhythm.d.ts.map +0 -1
- package/dist/src/rhythm.js +0 -130
- package/dist/src/rhythm.js.map +0 -1
- package/dist/src/state.d.ts +0 -7
- package/dist/src/state.d.ts.map +0 -1
- package/dist/src/state.js +0 -40
- package/dist/src/state.js.map +0 -1
- package/dist/src/synthesis.d.ts +0 -29
- package/dist/src/synthesis.d.ts.map +0 -1
- package/dist/src/synthesis.js +0 -144
- package/dist/src/synthesis.js.map +0 -1
- package/dist/src/topics.d.ts +0 -19
- package/dist/src/topics.d.ts.map +0 -1
- package/dist/src/topics.js +0 -84
- package/dist/src/topics.js.map +0 -1
- package/dist/src/types.d.ts +0 -253
- package/dist/src/types.d.ts.map +0 -1
- package/dist/src/types.js +0 -5
- package/dist/src/types.js.map +0 -1
- package/dist/src/vocabulary.d.ts +0 -18
- package/dist/src/vocabulary.d.ts.map +0 -1
- package/dist/src/vocabulary.js +0 -121
- package/dist/src/vocabulary.js.map +0 -1
- package/dist/src/waking.d.ts +0 -27
- package/dist/src/waking.d.ts.map +0 -1
- package/dist/src/waking.js +0 -188
- package/dist/src/waking.js.map +0 -1
- package/dist/src/web-search.d.ts +0 -23
- package/dist/src/web-search.d.ts.map +0 -1
- package/dist/src/web-search.js +0 -64
- package/dist/src/web-search.js.map +0 -1
package/dist/src/dreamer.js
DELETED
|
@@ -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
|
package/dist/src/dreamer.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dreamer.js","sourceRoot":"","sources":["../../src/dreamer.ts"],"names":[],"mappings":"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"}
|
package/dist/src/entropy.d.ts
DELETED
|
@@ -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"}
|