openclawdreams 0.7.0

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 (188) hide show
  1. package/.env.example +14 -0
  2. package/.github/ISSUE_TEMPLATE/bug_report.md +27 -0
  3. package/.github/ISSUE_TEMPLATE/feature_request.md +19 -0
  4. package/.github/dependabot.yml +17 -0
  5. package/.github/pull_request_template.md +19 -0
  6. package/.github/workflows/build.yml +30 -0
  7. package/.github/workflows/release.yml +110 -0
  8. package/.prettierignore +4 -0
  9. package/.prettierrc +7 -0
  10. package/.versionrc.json +26 -0
  11. package/AGENTS.md +286 -0
  12. package/CHANGELOG.md +157 -0
  13. package/CODE_OF_CONDUCT.md +41 -0
  14. package/CONTRIBUTING.md +95 -0
  15. package/LICENSE +21 -0
  16. package/README.md +363 -0
  17. package/SECURITY.md +39 -0
  18. package/bin/electricsheep.ts +5 -0
  19. package/dist/bin/electricsheep.d.ts +3 -0
  20. package/dist/bin/electricsheep.d.ts.map +1 -0
  21. package/dist/bin/electricsheep.js +4 -0
  22. package/dist/bin/electricsheep.js.map +1 -0
  23. package/dist/src/budget.d.ts +28 -0
  24. package/dist/src/budget.d.ts.map +1 -0
  25. package/dist/src/budget.js +87 -0
  26. package/dist/src/budget.js.map +1 -0
  27. package/dist/src/cli.d.ts +19 -0
  28. package/dist/src/cli.d.ts.map +1 -0
  29. package/dist/src/cli.js +289 -0
  30. package/dist/src/cli.js.map +1 -0
  31. package/dist/src/config.d.ts +37 -0
  32. package/dist/src/config.d.ts.map +1 -0
  33. package/dist/src/config.js +70 -0
  34. package/dist/src/config.js.map +1 -0
  35. package/dist/src/crypto.d.ts +19 -0
  36. package/dist/src/crypto.d.ts.map +1 -0
  37. package/dist/src/crypto.js +70 -0
  38. package/dist/src/crypto.js.map +1 -0
  39. package/dist/src/dreamer.d.ts +13 -0
  40. package/dist/src/dreamer.d.ts.map +1 -0
  41. package/dist/src/dreamer.js +213 -0
  42. package/dist/src/dreamer.js.map +1 -0
  43. package/dist/src/filter.d.ts +30 -0
  44. package/dist/src/filter.d.ts.map +1 -0
  45. package/dist/src/filter.js +124 -0
  46. package/dist/src/filter.js.map +1 -0
  47. package/dist/src/identity.d.ts +29 -0
  48. package/dist/src/identity.d.ts.map +1 -0
  49. package/dist/src/identity.js +83 -0
  50. package/dist/src/identity.js.map +1 -0
  51. package/dist/src/index.d.ts +14 -0
  52. package/dist/src/index.d.ts.map +1 -0
  53. package/dist/src/index.js +293 -0
  54. package/dist/src/index.js.map +1 -0
  55. package/dist/src/llm.d.ts +26 -0
  56. package/dist/src/llm.d.ts.map +1 -0
  57. package/dist/src/llm.js +40 -0
  58. package/dist/src/llm.js.map +1 -0
  59. package/dist/src/logger.d.ts +6 -0
  60. package/dist/src/logger.d.ts.map +1 -0
  61. package/dist/src/logger.js +32 -0
  62. package/dist/src/logger.js.map +1 -0
  63. package/dist/src/memory.d.ts +41 -0
  64. package/dist/src/memory.d.ts.map +1 -0
  65. package/dist/src/memory.js +206 -0
  66. package/dist/src/memory.js.map +1 -0
  67. package/dist/src/moltbook-search.d.ts +23 -0
  68. package/dist/src/moltbook-search.d.ts.map +1 -0
  69. package/dist/src/moltbook-search.js +85 -0
  70. package/dist/src/moltbook-search.js.map +1 -0
  71. package/dist/src/moltbook.d.ts +34 -0
  72. package/dist/src/moltbook.d.ts.map +1 -0
  73. package/dist/src/moltbook.js +165 -0
  74. package/dist/src/moltbook.js.map +1 -0
  75. package/dist/src/notify.d.ts +18 -0
  76. package/dist/src/notify.d.ts.map +1 -0
  77. package/dist/src/notify.js +98 -0
  78. package/dist/src/notify.js.map +1 -0
  79. package/dist/src/persona.d.ts +26 -0
  80. package/dist/src/persona.d.ts.map +1 -0
  81. package/dist/src/persona.js +178 -0
  82. package/dist/src/persona.js.map +1 -0
  83. package/dist/src/reflection.d.ts +26 -0
  84. package/dist/src/reflection.d.ts.map +1 -0
  85. package/dist/src/reflection.js +111 -0
  86. package/dist/src/reflection.js.map +1 -0
  87. package/dist/src/state.d.ts +7 -0
  88. package/dist/src/state.d.ts.map +1 -0
  89. package/dist/src/state.js +40 -0
  90. package/dist/src/state.js.map +1 -0
  91. package/dist/src/synthesis.d.ts +29 -0
  92. package/dist/src/synthesis.d.ts.map +1 -0
  93. package/dist/src/synthesis.js +125 -0
  94. package/dist/src/synthesis.js.map +1 -0
  95. package/dist/src/topics.d.ts +19 -0
  96. package/dist/src/topics.d.ts.map +1 -0
  97. package/dist/src/topics.js +83 -0
  98. package/dist/src/topics.js.map +1 -0
  99. package/dist/src/types.d.ts +179 -0
  100. package/dist/src/types.d.ts.map +1 -0
  101. package/dist/src/types.js +5 -0
  102. package/dist/src/types.js.map +1 -0
  103. package/dist/src/waking.d.ts +24 -0
  104. package/dist/src/waking.d.ts.map +1 -0
  105. package/dist/src/waking.js +152 -0
  106. package/dist/src/waking.js.map +1 -0
  107. package/dist/src/web-search.d.ts +23 -0
  108. package/dist/src/web-search.d.ts.map +1 -0
  109. package/dist/src/web-search.js +64 -0
  110. package/dist/src/web-search.js.map +1 -0
  111. package/dist/test/budget.test.d.ts +2 -0
  112. package/dist/test/budget.test.d.ts.map +1 -0
  113. package/dist/test/budget.test.js +258 -0
  114. package/dist/test/budget.test.js.map +1 -0
  115. package/dist/test/crypto.test.d.ts +2 -0
  116. package/dist/test/crypto.test.d.ts.map +1 -0
  117. package/dist/test/crypto.test.js +93 -0
  118. package/dist/test/crypto.test.js.map +1 -0
  119. package/dist/test/dreamer.test.d.ts +2 -0
  120. package/dist/test/dreamer.test.d.ts.map +1 -0
  121. package/dist/test/dreamer.test.js +79 -0
  122. package/dist/test/dreamer.test.js.map +1 -0
  123. package/dist/test/filter.test.d.ts +2 -0
  124. package/dist/test/filter.test.d.ts.map +1 -0
  125. package/dist/test/filter.test.js +92 -0
  126. package/dist/test/filter.test.js.map +1 -0
  127. package/dist/test/memory.test.d.ts +2 -0
  128. package/dist/test/memory.test.d.ts.map +1 -0
  129. package/dist/test/memory.test.js +138 -0
  130. package/dist/test/memory.test.js.map +1 -0
  131. package/dist/test/moltbook.test.d.ts +2 -0
  132. package/dist/test/moltbook.test.d.ts.map +1 -0
  133. package/dist/test/moltbook.test.js +164 -0
  134. package/dist/test/moltbook.test.js.map +1 -0
  135. package/dist/test/persona.test.d.ts +2 -0
  136. package/dist/test/persona.test.d.ts.map +1 -0
  137. package/dist/test/persona.test.js +44 -0
  138. package/dist/test/persona.test.js.map +1 -0
  139. package/dist/test/reflection.test.d.ts +2 -0
  140. package/dist/test/reflection.test.d.ts.map +1 -0
  141. package/dist/test/reflection.test.js +57 -0
  142. package/dist/test/reflection.test.js.map +1 -0
  143. package/dist/test/state.test.d.ts +2 -0
  144. package/dist/test/state.test.d.ts.map +1 -0
  145. package/dist/test/state.test.js +50 -0
  146. package/dist/test/state.test.js.map +1 -0
  147. package/dist/test/waking.test.d.ts +2 -0
  148. package/dist/test/waking.test.d.ts.map +1 -0
  149. package/dist/test/waking.test.js +149 -0
  150. package/dist/test/waking.test.js.map +1 -0
  151. package/eslint.config.js +35 -0
  152. package/openclaw.plugin.json +62 -0
  153. package/package.json +72 -0
  154. package/skills/electricsheep.skill.md +69 -0
  155. package/skills/setup-guide/SKILL.md +303 -0
  156. package/src/budget.ts +104 -0
  157. package/src/cli.ts +325 -0
  158. package/src/config.ts +95 -0
  159. package/src/crypto.ts +82 -0
  160. package/src/dreamer.ts +283 -0
  161. package/src/filter.ts +146 -0
  162. package/src/identity.ts +92 -0
  163. package/src/index.ts +356 -0
  164. package/src/llm.ts +61 -0
  165. package/src/logger.ts +46 -0
  166. package/src/memory.ts +276 -0
  167. package/src/moltbook-search.ts +116 -0
  168. package/src/moltbook.ts +235 -0
  169. package/src/notify.ts +124 -0
  170. package/src/persona.ts +191 -0
  171. package/src/reflection.ts +150 -0
  172. package/src/state.ts +44 -0
  173. package/src/synthesis.ts +153 -0
  174. package/src/topics.ts +103 -0
  175. package/src/types.ts +196 -0
  176. package/src/waking.ts +199 -0
  177. package/src/web-search.ts +88 -0
  178. package/test/budget.test.ts +316 -0
  179. package/test/crypto.test.ts +112 -0
  180. package/test/dreamer.test.ts +95 -0
  181. package/test/filter.test.ts +115 -0
  182. package/test/memory.test.ts +182 -0
  183. package/test/moltbook.test.ts +209 -0
  184. package/test/persona.test.ts +59 -0
  185. package/test/reflection.test.ts +71 -0
  186. package/test/state.test.ts +57 -0
  187. package/test/waking.test.ts +214 -0
  188. package/tsconfig.json +20 -0
@@ -0,0 +1,293 @@
1
+ /**
2
+ * OpenClaw extension entry point.
3
+ *
4
+ * Registers tools, CLI subcommands, hooks, and cron jobs.
5
+ */
6
+ import { registerCommands } from "./cli.js";
7
+ import { runReflectionCycle } from "./waking.js";
8
+ import { runDreamCycle, postDreamJournal } from "./dreamer.js";
9
+ import { deepMemoryStats, remember } from "./memory.js";
10
+ import { loadState } from "./state.js";
11
+ import { withBudget } from "./budget.js";
12
+ import { setWorkspaceDir } from "./identity.js";
13
+ import { MOLTBOOK_ENABLED } from "./config.js";
14
+ // Store reference to OpenClaw API for use by other modules
15
+ let openclawApi = null;
16
+ export function getOpenClawAPI() {
17
+ return openclawApi;
18
+ }
19
+ function wrapSubagent(api) {
20
+ const raw = {
21
+ async createMessage(params) {
22
+ if (!api.runtime?.subagent?.run) {
23
+ throw new Error("api.runtime.subagent is not available in this context.");
24
+ }
25
+ const combined = params.messages
26
+ .map((m) => `${m.role.toUpperCase()}: ${m.content}`)
27
+ .join("\\n\\n");
28
+ const result = await api.runtime.subagent.run({
29
+ sessionKey: "electricsheep_synthesis",
30
+ lane: "background",
31
+ extraSystemPrompt: params.system,
32
+ message: combined,
33
+ });
34
+ const waitRes = await api.runtime.subagent.waitForRun({
35
+ runId: result.runId,
36
+ timeoutMs: 120000,
37
+ });
38
+ if (waitRes.status !== "ok") {
39
+ throw new Error(`Subagent run failed: ${waitRes.error}`);
40
+ }
41
+ const session = await api.runtime.subagent.getSessionMessages({
42
+ sessionKey: "electricsheep_synthesis",
43
+ limit: 1,
44
+ });
45
+ const last = session.messages[0];
46
+ if (!last || last.role !== "assistant") {
47
+ return {
48
+ text: "Synthesis completed, but no direct reply was captured.",
49
+ usage: { input_tokens: 0, output_tokens: 0 },
50
+ };
51
+ }
52
+ let text;
53
+ if (typeof last.content === "string") {
54
+ text = last.content;
55
+ }
56
+ else if (Array.isArray(last.content)) {
57
+ const textBlock = last.content.find((b) => b.type === "text" || b.type === "thinking");
58
+ text = textBlock
59
+ ? String(textBlock.text || textBlock.thinking || "")
60
+ : JSON.stringify(last.content);
61
+ }
62
+ else {
63
+ text = JSON.stringify(last.content);
64
+ }
65
+ const usage = (last.usage || {});
66
+ return {
67
+ text,
68
+ usage: {
69
+ input_tokens: usage.input ?? 0,
70
+ output_tokens: usage.output ?? 0,
71
+ },
72
+ };
73
+ },
74
+ };
75
+ return withBudget(raw);
76
+ }
77
+ export function register(api) {
78
+ openclawApi = api;
79
+ const client = wrapSubagent(api);
80
+ // --- Gateway Methods (for CLI RPC) ---
81
+ api.registerGatewayMethod("electricsheep.reflect", async ({ respond }) => {
82
+ try {
83
+ await runReflectionCycle(client, api);
84
+ respond(true, { message: "Reflection cycle completed." }, undefined);
85
+ }
86
+ catch (err) {
87
+ respond(false, undefined, { code: 500, message: String(err) });
88
+ }
89
+ });
90
+ api.registerGatewayMethod("electricsheep.dream", async ({ respond }) => {
91
+ try {
92
+ const dream = await runDreamCycle(client, api);
93
+ if (dream) {
94
+ respond(true, { message: "Dream cycle completed.", dream }, undefined);
95
+ }
96
+ else {
97
+ respond(true, { message: "No undreamed memories — nothing to dream." }, undefined);
98
+ }
99
+ }
100
+ catch (err) {
101
+ respond(false, undefined, { code: 500, message: String(err) });
102
+ }
103
+ });
104
+ api.registerGatewayMethod("electricsheep.journal", async ({ respond }) => {
105
+ try {
106
+ if (!MOLTBOOK_ENABLED) {
107
+ respond(true, { message: "Moltbook is disabled — journal post skipped." }, undefined);
108
+ return;
109
+ }
110
+ await postDreamJournal(client);
111
+ respond(true, { message: "Dream journal posted to Moltbook." }, undefined);
112
+ }
113
+ catch (err) {
114
+ respond(false, undefined, { code: 500, message: String(err) });
115
+ }
116
+ });
117
+ // --- Tools ---
118
+ api.registerTool({
119
+ name: "electricsheep_reflect",
120
+ description: "Run ElectricSheep's reflection cycle: analyze operator conversations, gather context from web/community, synthesize insights",
121
+ parameters: {},
122
+ handler: async () => {
123
+ await runReflectionCycle(client, api);
124
+ return { status: "ok", stats: deepMemoryStats() };
125
+ },
126
+ });
127
+ // Legacy tool name for backwards compatibility
128
+ api.registerTool({
129
+ name: "electricsheep_check",
130
+ description: "Run ElectricSheep's reflection cycle (alias for electricsheep_reflect)",
131
+ parameters: {},
132
+ handler: async () => {
133
+ await runReflectionCycle(client, api);
134
+ return { status: "ok", stats: deepMemoryStats() };
135
+ },
136
+ });
137
+ api.registerTool({
138
+ name: "electricsheep_dream",
139
+ description: "Run ElectricSheep's dream cycle: decrypt deep memories, generate dream narrative, consolidate insights",
140
+ parameters: {},
141
+ handler: async () => {
142
+ const dream = await runDreamCycle(client);
143
+ return dream
144
+ ? { status: "ok", dream }
145
+ : { status: "no_memories", message: "No undreamed memories" };
146
+ },
147
+ });
148
+ api.registerTool({
149
+ name: "electricsheep_journal",
150
+ description: "Post the latest dream journal to Moltbook (only available when moltbookEnabled is true)",
151
+ parameters: {},
152
+ handler: async () => {
153
+ if (!MOLTBOOK_ENABLED) {
154
+ return {
155
+ status: "skipped",
156
+ message: "Moltbook integration is disabled",
157
+ };
158
+ }
159
+ await postDreamJournal(client);
160
+ return { status: "ok" };
161
+ },
162
+ });
163
+ api.registerTool({
164
+ name: "electricsheep_status",
165
+ description: "Get ElectricSheep agent status: memory stats and state",
166
+ parameters: {},
167
+ handler: async () => {
168
+ return {
169
+ state: loadState(),
170
+ memory: deepMemoryStats(),
171
+ };
172
+ },
173
+ });
174
+ // --- CLI ---
175
+ api.registerCli(({ program }) => {
176
+ const esCmd = program
177
+ .command("electricsheep")
178
+ .description("ElectricSheep — an AI agent that dreams.");
179
+ registerCommands(esCmd);
180
+ }, { commands: ["electricsheep"] });
181
+ // --- Hooks ---
182
+ api.registerHook("before_agent_start", async (ctx) => {
183
+ // Capture workspace dir for identity loading (SOUL.md, IDENTITY.md)
184
+ if (ctx.workspaceDir && typeof ctx.workspaceDir === "string") {
185
+ setWorkspaceDir(ctx.workspaceDir);
186
+ }
187
+ return ctx;
188
+ }, { name: "electricsheep_workspace_capture" });
189
+ api.registerHook("agent_end", async (event) => {
190
+ const msgs = event.messages;
191
+ if (!Array.isArray(msgs) || msgs.length === 0)
192
+ return event;
193
+ const userMsgs = msgs.filter((m) => m.role === "user");
194
+ if (userMsgs.length === 0)
195
+ return event;
196
+ try {
197
+ const conversationText = msgs
198
+ .map((m) => {
199
+ let text = "";
200
+ if (typeof m.content === "string")
201
+ text = m.content;
202
+ else if (Array.isArray(m.content)) {
203
+ const contentObj = m.content.find((c) => typeof c === "object" &&
204
+ c !== null &&
205
+ c.type === "text");
206
+ text = typeof contentObj?.text === "string" ? contentObj.text : "";
207
+ }
208
+ return `${m.role.toUpperCase()}: ${text}`;
209
+ })
210
+ .join("\\n\\n");
211
+ api.logger?.info?.(`[ElectricSheep] Synthesizing summary for conversation ending...`);
212
+ const { AGENT_MODEL } = await import("./config.js");
213
+ const response = await client.createMessage({
214
+ model: AGENT_MODEL,
215
+ maxTokens: 500,
216
+ system: "You are an AI assistant. Summarize the following conversation in 2-3 concise sentences. Focus on the main topics discussed, tasks completed, and any conclusions made by the user or assistant.",
217
+ messages: [{ role: "user", content: conversationText }],
218
+ });
219
+ if (response.usage) {
220
+ const { recordUsage } = await import("./budget.js");
221
+ recordUsage(response.usage);
222
+ }
223
+ const summary = response.text.trim();
224
+ if (summary) {
225
+ api.logger?.info?.(`[ElectricSheep] Captured summary: ${summary.slice(0, 50)}...`);
226
+ remember(summary, { type: "agent_conversation", summary }, "interaction");
227
+ }
228
+ }
229
+ catch (err) {
230
+ const msg = err instanceof Error ? err.message : String(err);
231
+ api.logger?.error?.(`[ElectricSheep] Error generating summary: ${msg}`);
232
+ }
233
+ return event;
234
+ }, { name: "electricsheep_conversation_capture" });
235
+ // --- Background Service (replaces registerCron — not available in this API version) ---
236
+ // Schedules: reflection @ 8,12,16,20h | dream @ 2h | journal @ 7h (local time)
237
+ let _schedulerTimer = null;
238
+ let _lastRanHour = -1;
239
+ const SCHEDULE = {
240
+ 2: async () => {
241
+ await runDreamCycle(client, api);
242
+ },
243
+ 7: async () => {
244
+ if (MOLTBOOK_ENABLED) {
245
+ await postDreamJournal(client);
246
+ }
247
+ },
248
+ 8: async () => {
249
+ await runReflectionCycle(client, api);
250
+ },
251
+ 12: async () => {
252
+ await runReflectionCycle(client, api);
253
+ },
254
+ 16: async () => {
255
+ await runReflectionCycle(client, api);
256
+ },
257
+ 20: async () => {
258
+ await runReflectionCycle(client, api);
259
+ },
260
+ };
261
+ api.registerService({
262
+ id: "electricsheep-scheduler",
263
+ start: () => {
264
+ _lastRanHour = -1;
265
+ _schedulerTimer = setInterval(() => {
266
+ void (async () => {
267
+ const hour = new Date().getHours();
268
+ if (hour !== _lastRanHour && SCHEDULE[hour]) {
269
+ _lastRanHour = hour;
270
+ try {
271
+ await SCHEDULE[hour]();
272
+ }
273
+ catch (err) {
274
+ api.logger?.warn?.(`[ElectricSheep] scheduled job hour=${hour} failed: ${err}`);
275
+ }
276
+ }
277
+ })();
278
+ }, 60_000); // poll every minute
279
+ },
280
+ stop: () => {
281
+ if (_schedulerTimer !== null) {
282
+ clearInterval(_schedulerTimer);
283
+ _schedulerTimer = null;
284
+ }
285
+ },
286
+ });
287
+ }
288
+ export const plugin = {
289
+ id: "electricsheep",
290
+ register,
291
+ };
292
+ export default plugin;
293
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Shared LLM client utilities.
3
+ *
4
+ * Provides retry configuration and call helpers used by both
5
+ * the waking and dreamer modules. The actual LLM client is
6
+ * provided by the OpenClaw gateway (see index.ts).
7
+ */
8
+ import { type Options as RetryOptions } from "p-retry";
9
+ import type { LLMClient, LLMResponse } from "./types.js";
10
+ /** Standard retry options for waking-state LLM calls. */
11
+ export declare const WAKING_RETRY_OPTS: RetryOptions;
12
+ /** Retry options for dream-cycle LLM calls (longer timeouts). */
13
+ export declare const DREAM_RETRY_OPTS: RetryOptions;
14
+ /**
15
+ * Helper: call LLM with retry and return the response.
16
+ */
17
+ export declare function callWithRetry(client: LLMClient, params: {
18
+ model?: string;
19
+ maxTokens: number;
20
+ system: string;
21
+ messages: Array<{
22
+ role: string;
23
+ content: string;
24
+ }>;
25
+ }, retryOpts?: RetryOptions): Promise<LLMResponse>;
26
+ //# sourceMappingURL=llm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llm.d.ts","sourceRoot":"","sources":["../../src/llm.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAe,EAAE,KAAK,OAAO,IAAI,YAAY,EAAE,MAAM,SAAS,CAAC;AAG/D,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzD,yDAAyD;AACzD,eAAO,MAAM,iBAAiB,EAAE,YAS/B,CAAC;AAEF,iEAAiE;AACjE,eAAO,MAAM,gBAAgB,EAAE,YAS9B,CAAC;AAEF;;GAEG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE;IACN,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACpD,EACD,SAAS,GAAE,YAAgC,GAC1C,OAAO,CAAC,WAAW,CAAC,CAWtB"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Shared LLM client utilities.
3
+ *
4
+ * Provides retry configuration and call helpers used by both
5
+ * the waking and dreamer modules. The actual LLM client is
6
+ * provided by the OpenClaw gateway (see index.ts).
7
+ */
8
+ import pRetry from "p-retry";
9
+ import { AGENT_MODEL } from "./config.js";
10
+ import logger from "./logger.js";
11
+ /** Standard retry options for waking-state LLM calls. */
12
+ export const WAKING_RETRY_OPTS = {
13
+ retries: 3,
14
+ minTimeout: 1000,
15
+ maxTimeout: 10000,
16
+ onFailedAttempt: (error) => {
17
+ logger.warn(`LLM attempt failed: ${error instanceof Error ? error.message : String(error)}`);
18
+ },
19
+ };
20
+ /** Retry options for dream-cycle LLM calls (longer timeouts). */
21
+ export const DREAM_RETRY_OPTS = {
22
+ retries: 3,
23
+ minTimeout: 2000,
24
+ maxTimeout: 20000,
25
+ onFailedAttempt: (error) => {
26
+ logger.warn(`Dream generation failed: ${error instanceof Error ? error.message : String(error)}`);
27
+ },
28
+ };
29
+ /**
30
+ * Helper: call LLM with retry and return the response.
31
+ */
32
+ export function callWithRetry(client, params, retryOpts = WAKING_RETRY_OPTS) {
33
+ return pRetry(() => client.createMessage({
34
+ model: params.model ?? AGENT_MODEL,
35
+ maxTokens: params.maxTokens,
36
+ system: params.system,
37
+ messages: params.messages,
38
+ }), retryOpts);
39
+ }
40
+ //# sourceMappingURL=llm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llm.js","sourceRoot":"","sources":["../../src/llm.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,MAAwC,MAAM,SAAS,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,MAAM,MAAM,aAAa,CAAC;AAGjC,yDAAyD;AACzD,MAAM,CAAC,MAAM,iBAAiB,GAAiB;IAC7C,OAAO,EAAE,CAAC;IACV,UAAU,EAAE,IAAI;IAChB,UAAU,EAAE,KAAK;IACjB,eAAe,EAAE,CAAC,KAAK,EAAE,EAAE;QACzB,MAAM,CAAC,IAAI,CACT,uBAAuB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAChF,CAAC;IACJ,CAAC;CACF,CAAC;AAEF,iEAAiE;AACjE,MAAM,CAAC,MAAM,gBAAgB,GAAiB;IAC5C,OAAO,EAAE,CAAC;IACV,UAAU,EAAE,IAAI;IAChB,UAAU,EAAE,KAAK;IACjB,eAAe,EAAE,CAAC,KAAK,EAAE,EAAE;QACzB,MAAM,CAAC,IAAI,CACT,4BAA4B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CACrF,CAAC;IACJ,CAAC;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,aAAa,CAC3B,MAAiB,EACjB,MAKC,EACD,YAA0B,iBAAiB;IAE3C,OAAO,MAAM,CACX,GAAG,EAAE,CACH,MAAM,CAAC,aAAa,CAAC;QACnB,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,WAAW;QAClC,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,QAAQ,EAAE,MAAM,CAAC,QAAQ;KAC1B,CAAC,EACJ,SAAS,CACV,CAAC;AACJ,CAAC"}
@@ -0,0 +1,6 @@
1
+ import "winston-daily-rotate-file";
2
+ declare const logger: import("winston").Logger;
3
+ export declare function setVerbose(verbose: boolean): void;
4
+ export declare function closeLogger(): Promise<void>;
5
+ export default logger;
6
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/logger.ts"],"names":[],"mappings":"AACA,OAAO,2BAA2B,CAAC;AAGnC,QAAA,MAAM,MAAM,0BA4BV,CAAC;AAEH,wBAAgB,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAEjD;AAED,wBAAgB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAK3C;AAED,eAAe,MAAM,CAAC"}
@@ -0,0 +1,32 @@
1
+ import { createLogger, format, transports } from "winston";
2
+ import "winston-daily-rotate-file";
3
+ import { DATA_DIR } from "./config.js";
4
+ const logger = createLogger({
5
+ level: "info",
6
+ format: format.combine(format.timestamp({ format: "YYYY-MM-DD HH:mm:ss" }), format.printf(({ timestamp, level, message }) => `${timestamp} [${level.toUpperCase()}]: ${message}`)),
7
+ transports: [
8
+ new transports.DailyRotateFile({
9
+ dirname: DATA_DIR,
10
+ filename: "electricsheep-%DATE%.log",
11
+ datePattern: "YYYY-MM-DD",
12
+ zippedArchive: true,
13
+ maxSize: "20m",
14
+ maxFiles: "14d",
15
+ level: "debug",
16
+ }),
17
+ new transports.Console({
18
+ format: format.combine(format.colorize(), format.printf(({ timestamp, level, message }) => `${timestamp} [${level}]: ${message}`)),
19
+ }),
20
+ ],
21
+ });
22
+ export function setVerbose(verbose) {
23
+ logger.level = verbose ? "debug" : "info";
24
+ }
25
+ export function closeLogger() {
26
+ return new Promise((resolve) => {
27
+ logger.on("finish", resolve);
28
+ logger.end();
29
+ });
30
+ }
31
+ export default logger;
32
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC3D,OAAO,2BAA2B,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,MAAM,MAAM,GAAG,YAAY,CAAC;IAC1B,KAAK,EAAE,MAAM;IACb,MAAM,EAAE,MAAM,CAAC,OAAO,CACpB,MAAM,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,qBAAqB,EAAE,CAAC,EACnD,MAAM,CAAC,MAAM,CACX,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,CAChC,GAAG,SAAS,KAAK,KAAK,CAAC,WAAW,EAAE,MAAM,OAAO,EAAE,CACtD,CACF;IACD,UAAU,EAAE;QACV,IAAI,UAAU,CAAC,eAAe,CAAC;YAC7B,OAAO,EAAE,QAAQ;YACjB,QAAQ,EAAE,0BAA0B;YACpC,WAAW,EAAE,YAAY;YACzB,aAAa,EAAE,IAAI;YACnB,OAAO,EAAE,KAAK;YACd,QAAQ,EAAE,KAAK;YACf,KAAK,EAAE,OAAO;SACf,CAAC;QACF,IAAI,UAAU,CAAC,OAAO,CAAC;YACrB,MAAM,EAAE,MAAM,CAAC,OAAO,CACpB,MAAM,CAAC,QAAQ,EAAE,EACjB,MAAM,CAAC,MAAM,CACX,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,GAAG,SAAS,KAAK,KAAK,MAAM,OAAO,EAAE,CACzE,CACF;SACF,CAAC;KACH;CACF,CAAC,CAAC;AAEH,MAAM,UAAU,UAAU,CAAC,OAAgB;IACzC,MAAM,CAAC,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC7B,MAAM,CAAC,GAAG,EAAE,CAAC;IACf,CAAC,CAAC,CAAC;AACL,CAAC;AAED,eAAe,MAAM,CAAC"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Encrypted deep memory system.
3
+ *
4
+ * All memories are encrypted with AES-256-GCM in a SQLite database.
5
+ * The waking agent writes to deep memory but cannot read it — only
6
+ * the dream process can decrypt. Context for LLM prompts is formatted
7
+ * via `formatDeepMemoryContext()`.
8
+ */
9
+ import type { DecryptedMemory, DeepMemoryStats } from "./types.js";
10
+ /**
11
+ * Close the shared SQLite connection. Safe to call multiple times.
12
+ * After closing, the next getDb() call will reopen.
13
+ */
14
+ export declare function closeDb(): void;
15
+ export declare function storeDeepMemory(content: Record<string, unknown>, category?: string): void;
16
+ export declare function retrieveUndreamedMemories(): DecryptedMemory[];
17
+ export declare function markAsDreamed(memoryIds: number[]): void;
18
+ export declare function deepMemoryStats(): DeepMemoryStats;
19
+ export interface DeepMemoryQueryOptions {
20
+ limit?: number;
21
+ categories?: string[];
22
+ undreamedOnly?: boolean;
23
+ }
24
+ /**
25
+ * Query deep memory with optional filters. Decrypts results, handles
26
+ * corruption gracefully, returns in chronological order.
27
+ */
28
+ export declare function getRecentDeepMemories(options?: DeepMemoryQueryOptions): DecryptedMemory[];
29
+ /**
30
+ * Format decrypted memories as a text block for LLM prompts.
31
+ *
32
+ * Extracts `content.summary` when available, falls back to truncated JSON.
33
+ * Respects an approximate token budget (1 token ≈ 4 chars).
34
+ */
35
+ export declare function formatDeepMemoryContext(memories?: DecryptedMemory[], maxTokensApprox?: number): string;
36
+ /**
37
+ * Store a memory in encrypted deep memory.
38
+ * The summary is included in the content object for later retrieval.
39
+ */
40
+ export declare function remember(summary: string, fullContext: Record<string, unknown>, category?: string): void;
41
+ //# sourceMappingURL=memory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../src/memory.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAuCnE;;;GAGG;AACH,wBAAgB,OAAO,IAAI,IAAI,CAK9B;AAED,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,QAAQ,GAAE,MAAsB,GAC/B,IAAI,CAWN;AAED,wBAAgB,yBAAyB,IAAI,eAAe,EAAE,CAmC7D;AAED,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI,CASvD;AAED,wBAAgB,eAAe,IAAI,eAAe,CAyBjD;AAID,MAAM,WAAW,sBAAsB;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,CAAC,EAAE,sBAAsB,GAC/B,eAAe,EAAE,CAqDnB;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,CAAC,EAAE,eAAe,EAAE,EAC5B,eAAe,GAAE,MAAmC,GACnD,MAAM,CA6BR;AAID;;;GAGG;AACH,wBAAgB,QAAQ,CACtB,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACpC,QAAQ,GAAE,MAAsB,GAC/B,IAAI,CAEN"}