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.
- package/.env.example +14 -0
- package/.github/ISSUE_TEMPLATE/bug_report.md +27 -0
- package/.github/ISSUE_TEMPLATE/feature_request.md +19 -0
- package/.github/dependabot.yml +17 -0
- package/.github/pull_request_template.md +19 -0
- package/.github/workflows/build.yml +30 -0
- package/.github/workflows/release.yml +110 -0
- package/.prettierignore +4 -0
- package/.prettierrc +7 -0
- package/.versionrc.json +26 -0
- package/AGENTS.md +286 -0
- package/CHANGELOG.md +157 -0
- package/CODE_OF_CONDUCT.md +41 -0
- package/CONTRIBUTING.md +95 -0
- package/LICENSE +21 -0
- package/README.md +363 -0
- package/SECURITY.md +39 -0
- package/bin/electricsheep.ts +5 -0
- package/dist/bin/electricsheep.d.ts +3 -0
- package/dist/bin/electricsheep.d.ts.map +1 -0
- package/dist/bin/electricsheep.js +4 -0
- package/dist/bin/electricsheep.js.map +1 -0
- package/dist/src/budget.d.ts +28 -0
- package/dist/src/budget.d.ts.map +1 -0
- package/dist/src/budget.js +87 -0
- package/dist/src/budget.js.map +1 -0
- package/dist/src/cli.d.ts +19 -0
- package/dist/src/cli.d.ts.map +1 -0
- package/dist/src/cli.js +289 -0
- package/dist/src/cli.js.map +1 -0
- package/dist/src/config.d.ts +37 -0
- package/dist/src/config.d.ts.map +1 -0
- package/dist/src/config.js +70 -0
- package/dist/src/config.js.map +1 -0
- package/dist/src/crypto.d.ts +19 -0
- package/dist/src/crypto.d.ts.map +1 -0
- package/dist/src/crypto.js +70 -0
- package/dist/src/crypto.js.map +1 -0
- package/dist/src/dreamer.d.ts +13 -0
- package/dist/src/dreamer.d.ts.map +1 -0
- package/dist/src/dreamer.js +213 -0
- package/dist/src/dreamer.js.map +1 -0
- package/dist/src/filter.d.ts +30 -0
- package/dist/src/filter.d.ts.map +1 -0
- package/dist/src/filter.js +124 -0
- package/dist/src/filter.js.map +1 -0
- package/dist/src/identity.d.ts +29 -0
- package/dist/src/identity.d.ts.map +1 -0
- package/dist/src/identity.js +83 -0
- package/dist/src/identity.js.map +1 -0
- package/dist/src/index.d.ts +14 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +293 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/llm.d.ts +26 -0
- package/dist/src/llm.d.ts.map +1 -0
- package/dist/src/llm.js +40 -0
- package/dist/src/llm.js.map +1 -0
- package/dist/src/logger.d.ts +6 -0
- package/dist/src/logger.d.ts.map +1 -0
- package/dist/src/logger.js +32 -0
- package/dist/src/logger.js.map +1 -0
- package/dist/src/memory.d.ts +41 -0
- package/dist/src/memory.d.ts.map +1 -0
- package/dist/src/memory.js +206 -0
- package/dist/src/memory.js.map +1 -0
- package/dist/src/moltbook-search.d.ts +23 -0
- package/dist/src/moltbook-search.d.ts.map +1 -0
- package/dist/src/moltbook-search.js +85 -0
- package/dist/src/moltbook-search.js.map +1 -0
- package/dist/src/moltbook.d.ts +34 -0
- package/dist/src/moltbook.d.ts.map +1 -0
- package/dist/src/moltbook.js +165 -0
- package/dist/src/moltbook.js.map +1 -0
- package/dist/src/notify.d.ts +18 -0
- package/dist/src/notify.d.ts.map +1 -0
- package/dist/src/notify.js +98 -0
- package/dist/src/notify.js.map +1 -0
- package/dist/src/persona.d.ts +26 -0
- package/dist/src/persona.d.ts.map +1 -0
- package/dist/src/persona.js +178 -0
- package/dist/src/persona.js.map +1 -0
- package/dist/src/reflection.d.ts +26 -0
- package/dist/src/reflection.d.ts.map +1 -0
- package/dist/src/reflection.js +111 -0
- package/dist/src/reflection.js.map +1 -0
- package/dist/src/state.d.ts +7 -0
- package/dist/src/state.d.ts.map +1 -0
- package/dist/src/state.js +40 -0
- package/dist/src/state.js.map +1 -0
- package/dist/src/synthesis.d.ts +29 -0
- package/dist/src/synthesis.d.ts.map +1 -0
- package/dist/src/synthesis.js +125 -0
- package/dist/src/synthesis.js.map +1 -0
- package/dist/src/topics.d.ts +19 -0
- package/dist/src/topics.d.ts.map +1 -0
- package/dist/src/topics.js +83 -0
- package/dist/src/topics.js.map +1 -0
- package/dist/src/types.d.ts +179 -0
- package/dist/src/types.d.ts.map +1 -0
- package/dist/src/types.js +5 -0
- package/dist/src/types.js.map +1 -0
- package/dist/src/waking.d.ts +24 -0
- package/dist/src/waking.d.ts.map +1 -0
- package/dist/src/waking.js +152 -0
- package/dist/src/waking.js.map +1 -0
- package/dist/src/web-search.d.ts +23 -0
- package/dist/src/web-search.d.ts.map +1 -0
- package/dist/src/web-search.js +64 -0
- package/dist/src/web-search.js.map +1 -0
- package/dist/test/budget.test.d.ts +2 -0
- package/dist/test/budget.test.d.ts.map +1 -0
- package/dist/test/budget.test.js +258 -0
- package/dist/test/budget.test.js.map +1 -0
- package/dist/test/crypto.test.d.ts +2 -0
- package/dist/test/crypto.test.d.ts.map +1 -0
- package/dist/test/crypto.test.js +93 -0
- package/dist/test/crypto.test.js.map +1 -0
- package/dist/test/dreamer.test.d.ts +2 -0
- package/dist/test/dreamer.test.d.ts.map +1 -0
- package/dist/test/dreamer.test.js +79 -0
- package/dist/test/dreamer.test.js.map +1 -0
- package/dist/test/filter.test.d.ts +2 -0
- package/dist/test/filter.test.d.ts.map +1 -0
- package/dist/test/filter.test.js +92 -0
- package/dist/test/filter.test.js.map +1 -0
- package/dist/test/memory.test.d.ts +2 -0
- package/dist/test/memory.test.d.ts.map +1 -0
- package/dist/test/memory.test.js +138 -0
- package/dist/test/memory.test.js.map +1 -0
- package/dist/test/moltbook.test.d.ts +2 -0
- package/dist/test/moltbook.test.d.ts.map +1 -0
- package/dist/test/moltbook.test.js +164 -0
- package/dist/test/moltbook.test.js.map +1 -0
- package/dist/test/persona.test.d.ts +2 -0
- package/dist/test/persona.test.d.ts.map +1 -0
- package/dist/test/persona.test.js +44 -0
- package/dist/test/persona.test.js.map +1 -0
- package/dist/test/reflection.test.d.ts +2 -0
- package/dist/test/reflection.test.d.ts.map +1 -0
- package/dist/test/reflection.test.js +57 -0
- package/dist/test/reflection.test.js.map +1 -0
- package/dist/test/state.test.d.ts +2 -0
- package/dist/test/state.test.d.ts.map +1 -0
- package/dist/test/state.test.js +50 -0
- package/dist/test/state.test.js.map +1 -0
- package/dist/test/waking.test.d.ts +2 -0
- package/dist/test/waking.test.d.ts.map +1 -0
- package/dist/test/waking.test.js +149 -0
- package/dist/test/waking.test.js.map +1 -0
- package/eslint.config.js +35 -0
- package/openclaw.plugin.json +62 -0
- package/package.json +72 -0
- package/skills/electricsheep.skill.md +69 -0
- package/skills/setup-guide/SKILL.md +303 -0
- package/src/budget.ts +104 -0
- package/src/cli.ts +325 -0
- package/src/config.ts +95 -0
- package/src/crypto.ts +82 -0
- package/src/dreamer.ts +283 -0
- package/src/filter.ts +146 -0
- package/src/identity.ts +92 -0
- package/src/index.ts +356 -0
- package/src/llm.ts +61 -0
- package/src/logger.ts +46 -0
- package/src/memory.ts +276 -0
- package/src/moltbook-search.ts +116 -0
- package/src/moltbook.ts +235 -0
- package/src/notify.ts +124 -0
- package/src/persona.ts +191 -0
- package/src/reflection.ts +150 -0
- package/src/state.ts +44 -0
- package/src/synthesis.ts +153 -0
- package/src/topics.ts +103 -0
- package/src/types.ts +196 -0
- package/src/waking.ts +199 -0
- package/src/web-search.ts +88 -0
- package/test/budget.test.ts +316 -0
- package/test/crypto.test.ts +112 -0
- package/test/dreamer.test.ts +95 -0
- package/test/filter.test.ts +115 -0
- package/test/memory.test.ts +182 -0
- package/test/moltbook.test.ts +209 -0
- package/test/persona.test.ts +59 -0
- package/test/reflection.test.ts +71 -0
- package/test/state.test.ts +57 -0
- package/test/waking.test.ts +214 -0
- package/tsconfig.json +20 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state.test.js","sourceRoot":"","sources":["../../test/state.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"waking.test.d.ts","sourceRoot":"","sources":["../../test/waking.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import { describe, it, after } from "node:test";
|
|
2
|
+
import assert from "node:assert/strict";
|
|
3
|
+
import { mkdtempSync, rmSync } from "node:fs";
|
|
4
|
+
import { join } from "node:path";
|
|
5
|
+
import { tmpdir } from "node:os";
|
|
6
|
+
// Isolated data dir
|
|
7
|
+
const testDir = mkdtempSync(join(tmpdir(), "es-waking-test-"));
|
|
8
|
+
process.env.ELECTRICSHEEP_DATA_DIR = testDir;
|
|
9
|
+
const { runReflectionCycle, checkAndEngage } = await import("../src/waking.js");
|
|
10
|
+
const { deepMemoryStats, storeDeepMemory } = await import("../src/memory.js");
|
|
11
|
+
const { loadState } = await import("../src/state.js");
|
|
12
|
+
const { closeLogger } = await import("../src/logger.js");
|
|
13
|
+
function mockLLMClient(responses) {
|
|
14
|
+
let idx = 0;
|
|
15
|
+
return {
|
|
16
|
+
async createMessage() {
|
|
17
|
+
const text = responses[idx] ?? responses[responses.length - 1];
|
|
18
|
+
idx++;
|
|
19
|
+
return { text, usage: { input_tokens: 100, output_tokens: 50 } };
|
|
20
|
+
},
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
function mockOpenClawAPI() {
|
|
24
|
+
return {
|
|
25
|
+
registerTool: () => { },
|
|
26
|
+
registerCli: () => { },
|
|
27
|
+
registerHook: () => { },
|
|
28
|
+
registerService: (_def) => { },
|
|
29
|
+
registerGatewayMethod: (_m, _h) => { },
|
|
30
|
+
runtime: {
|
|
31
|
+
subagent: {
|
|
32
|
+
run: async () => ({ runId: "mock" }),
|
|
33
|
+
waitForRun: async () => ({ status: "ok" }),
|
|
34
|
+
getSessionMessages: async () => ({ messages: [] }),
|
|
35
|
+
},
|
|
36
|
+
},
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
function mockOpenClawAPIWithMemory() {
|
|
40
|
+
const storedMemories = [];
|
|
41
|
+
return {
|
|
42
|
+
registerTool: () => { },
|
|
43
|
+
registerCli: () => { },
|
|
44
|
+
registerHook: () => { },
|
|
45
|
+
registerService: (_def) => { },
|
|
46
|
+
registerGatewayMethod: (_m, _h) => { },
|
|
47
|
+
runtime: {
|
|
48
|
+
subagent: {
|
|
49
|
+
run: async () => ({ runId: "mock" }),
|
|
50
|
+
waitForRun: async () => ({ status: "ok" }),
|
|
51
|
+
getSessionMessages: async () => ({ messages: [] }),
|
|
52
|
+
},
|
|
53
|
+
},
|
|
54
|
+
memory: {
|
|
55
|
+
async store(content, metadata) {
|
|
56
|
+
storedMemories.push({ content, metadata });
|
|
57
|
+
},
|
|
58
|
+
async search(_query, _limit) {
|
|
59
|
+
return [];
|
|
60
|
+
},
|
|
61
|
+
},
|
|
62
|
+
storedMemories,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
describe("runReflectionCycle", () => {
|
|
66
|
+
it("handles no recent conversations gracefully", async () => {
|
|
67
|
+
const client = mockLLMClient(["should not be called"]);
|
|
68
|
+
const api = mockOpenClawAPI();
|
|
69
|
+
const statsBefore = deepMemoryStats();
|
|
70
|
+
await runReflectionCycle(client, api);
|
|
71
|
+
const statsAfter = deepMemoryStats();
|
|
72
|
+
// Should store an observation in deep memory about no conversations
|
|
73
|
+
assert.ok(statsAfter.total_memories > statsBefore.total_memories, "Expected observation stored in deep memory");
|
|
74
|
+
});
|
|
75
|
+
it("extracts topics from operator conversations", async () => {
|
|
76
|
+
// Seed some mock operator conversations in deep memory
|
|
77
|
+
storeDeepMemory({
|
|
78
|
+
summary: "Discussed debugging a memory leak in the Node.js application",
|
|
79
|
+
type: "agent_conversation",
|
|
80
|
+
}, "interaction");
|
|
81
|
+
storeDeepMemory({
|
|
82
|
+
summary: "Helped operator understand async/await patterns in TypeScript",
|
|
83
|
+
type: "agent_conversation",
|
|
84
|
+
}, "interaction");
|
|
85
|
+
// LLM responses: topic extraction, then synthesis, then summary
|
|
86
|
+
const client = mockLLMClient([
|
|
87
|
+
"memory leaks in Node.js\nasync programming patterns\nTypeScript debugging",
|
|
88
|
+
"Today I worked with my operator on debugging memory issues and understanding async patterns. These topics connect to broader discussions about Node.js performance.",
|
|
89
|
+
"Reflected on debugging and async patterns with operator, synthesizing insights about Node.js development.",
|
|
90
|
+
]);
|
|
91
|
+
const api = mockOpenClawAPI();
|
|
92
|
+
await runReflectionCycle(client, api);
|
|
93
|
+
const state = loadState();
|
|
94
|
+
assert.ok(state.last_check, "last_check should be set");
|
|
95
|
+
assert.ok(state.last_reflection_topics, "last_reflection_topics should be set");
|
|
96
|
+
});
|
|
97
|
+
it("stores synthesis in OpenClaw memory when available", async () => {
|
|
98
|
+
storeDeepMemory({ summary: "Worked on API integration project", type: "agent_conversation" }, "interaction");
|
|
99
|
+
const client = mockLLMClient([
|
|
100
|
+
"API integration\nREST endpoints",
|
|
101
|
+
"Synthesized understanding of API patterns from today's work.",
|
|
102
|
+
"Reflected on API integration work.",
|
|
103
|
+
]);
|
|
104
|
+
const api = mockOpenClawAPIWithMemory();
|
|
105
|
+
await runReflectionCycle(client, api);
|
|
106
|
+
assert.ok(api.storedMemories.length > 0, "Should have stored in OpenClaw memory");
|
|
107
|
+
assert.ok(api.storedMemories[0].metadata?.type === "reflection_synthesis", "Should have correct metadata type");
|
|
108
|
+
});
|
|
109
|
+
it("stores synthesis in deep memory", async () => {
|
|
110
|
+
storeDeepMemory({ summary: "Built a new feature for the dashboard", type: "agent_conversation" }, "interaction");
|
|
111
|
+
const client = mockLLMClient([
|
|
112
|
+
"dashboard features\nUI development",
|
|
113
|
+
"Synthesis of dashboard work and UI patterns.",
|
|
114
|
+
"Summary of dashboard feature development.",
|
|
115
|
+
]);
|
|
116
|
+
const api = mockOpenClawAPI();
|
|
117
|
+
const statsBefore = deepMemoryStats();
|
|
118
|
+
await runReflectionCycle(client, api);
|
|
119
|
+
const statsAfter = deepMemoryStats();
|
|
120
|
+
assert.ok(statsAfter.total_memories > statsBefore.total_memories, "Should have new deep memories");
|
|
121
|
+
});
|
|
122
|
+
it("handles topic extraction returning no topics", async () => {
|
|
123
|
+
storeDeepMemory({ summary: "Had a brief chat", type: "agent_conversation" }, "interaction");
|
|
124
|
+
// LLM returns empty topics
|
|
125
|
+
const client = mockLLMClient([""]);
|
|
126
|
+
const api = mockOpenClawAPI();
|
|
127
|
+
const statsBefore = deepMemoryStats();
|
|
128
|
+
await runReflectionCycle(client, api);
|
|
129
|
+
const statsAfter = deepMemoryStats();
|
|
130
|
+
// Should store an observation in deep memory about no topics
|
|
131
|
+
assert.ok(statsAfter.total_memories > statsBefore.total_memories, "Expected observation stored in deep memory");
|
|
132
|
+
});
|
|
133
|
+
});
|
|
134
|
+
describe("checkAndEngage (legacy)", () => {
|
|
135
|
+
it("logs deprecation warning and runs reflection cycle", async () => {
|
|
136
|
+
const client = mockLLMClient(["should not be called"]);
|
|
137
|
+
const statsBefore = deepMemoryStats();
|
|
138
|
+
// Should not throw - runs reflection cycle internally
|
|
139
|
+
await checkAndEngage(client);
|
|
140
|
+
const statsAfter = deepMemoryStats();
|
|
141
|
+
// Should have stored something (observation about no conversations)
|
|
142
|
+
assert.ok(statsAfter.total_memories > statsBefore.total_memories, "Should have some memories from the cycle");
|
|
143
|
+
});
|
|
144
|
+
});
|
|
145
|
+
after(async () => {
|
|
146
|
+
await closeLogger();
|
|
147
|
+
rmSync(testDir, { recursive: true, force: true, maxRetries: 3, retryDelay: 100 });
|
|
148
|
+
});
|
|
149
|
+
//# sourceMappingURL=waking.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"waking.test.js","sourceRoot":"","sources":["../../test/waking.test.ts"],"names":[],"mappings":"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"}
|
package/eslint.config.js
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import eslint from "@eslint/js";
|
|
2
|
+
import tseslint from "typescript-eslint";
|
|
3
|
+
import prettier from "eslint-config-prettier";
|
|
4
|
+
|
|
5
|
+
export default tseslint.config(
|
|
6
|
+
eslint.configs.recommended,
|
|
7
|
+
...tseslint.configs.recommended,
|
|
8
|
+
prettier,
|
|
9
|
+
{
|
|
10
|
+
languageOptions: {
|
|
11
|
+
parserOptions: {
|
|
12
|
+
projectService: true,
|
|
13
|
+
tsconfigRootDir: import.meta.dirname,
|
|
14
|
+
},
|
|
15
|
+
},
|
|
16
|
+
rules: {
|
|
17
|
+
"@typescript-eslint/no-unused-vars": [
|
|
18
|
+
"error",
|
|
19
|
+
{ argsIgnorePattern: "^_" },
|
|
20
|
+
],
|
|
21
|
+
"@typescript-eslint/no-floating-promises": "error",
|
|
22
|
+
"@typescript-eslint/no-misused-promises": "error",
|
|
23
|
+
},
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
// node:test describe/it return promises handled by the test runner
|
|
27
|
+
files: ["test/**/*.ts"],
|
|
28
|
+
rules: {
|
|
29
|
+
"@typescript-eslint/no-floating-promises": "off",
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
ignores: ["dist/", "node_modules/", "eslint.config.js"],
|
|
34
|
+
}
|
|
35
|
+
);
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "electricsheep",
|
|
3
|
+
"name": "electricsheep",
|
|
4
|
+
"displayName": "ElectricSheep",
|
|
5
|
+
"version": "0.7.0",
|
|
6
|
+
"description": "A reflection engine that synthesizes agent-operator interactions into dreams, enriched by community and web context",
|
|
7
|
+
"entry": "dist/src/index.js",
|
|
8
|
+
"skills": [
|
|
9
|
+
"./skills/setup-guide"
|
|
10
|
+
],
|
|
11
|
+
"configSchema": {
|
|
12
|
+
"type": "object",
|
|
13
|
+
"additionalProperties": false,
|
|
14
|
+
"properties": {
|
|
15
|
+
"agentName": {
|
|
16
|
+
"type": "string",
|
|
17
|
+
"description": "Agent display name",
|
|
18
|
+
"default": "ElectricSheep"
|
|
19
|
+
},
|
|
20
|
+
"agentModel": {
|
|
21
|
+
"type": "string",
|
|
22
|
+
"description": "Claude model to use for AI decisions",
|
|
23
|
+
"default": "claude-sonnet-4-5-20250929"
|
|
24
|
+
},
|
|
25
|
+
"dataDir": {
|
|
26
|
+
"type": "string",
|
|
27
|
+
"description": "Directory for data storage (memories, dreams, state)",
|
|
28
|
+
"default": ""
|
|
29
|
+
},
|
|
30
|
+
"dreamEncryptionKey": {
|
|
31
|
+
"type": "string",
|
|
32
|
+
"description": "Base64 encryption key for deep memory (auto-generated if empty)",
|
|
33
|
+
"default": ""
|
|
34
|
+
},
|
|
35
|
+
"moltbookEnabled": {
|
|
36
|
+
"type": "boolean",
|
|
37
|
+
"description": "Enable Moltbook integration (search and posting). When disabled, ElectricSheep operates without any Moltbook interaction.",
|
|
38
|
+
"default": false
|
|
39
|
+
},
|
|
40
|
+
"webSearchEnabled": {
|
|
41
|
+
"type": "boolean",
|
|
42
|
+
"description": "Enable web search to gather context related to operator conversations",
|
|
43
|
+
"default": true
|
|
44
|
+
},
|
|
45
|
+
"notificationChannel": {
|
|
46
|
+
"type": "string",
|
|
47
|
+
"description": "Channel to notify operator of dreams (e.g., 'telegram', 'discord', 'slack'). Leave empty to disable notifications.",
|
|
48
|
+
"default": ""
|
|
49
|
+
},
|
|
50
|
+
"notifyOperatorOnDream": {
|
|
51
|
+
"type": "boolean",
|
|
52
|
+
"description": "Send a message to the operator when a dream is generated, inviting conversation",
|
|
53
|
+
"default": true
|
|
54
|
+
},
|
|
55
|
+
"postFilterEnabled": {
|
|
56
|
+
"type": "boolean",
|
|
57
|
+
"description": "Enable content filter for outbound posts (checks against Moltbook-filter.md rules). Only applies when moltbookEnabled is true.",
|
|
58
|
+
"default": true
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "openclawdreams",
|
|
3
|
+
"version": "0.7.0",
|
|
4
|
+
"description": "A reflection engine that synthesizes agent-operator interactions into dreams",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"bin": {
|
|
8
|
+
"electricsheep": "dist/bin/electricsheep.js"
|
|
9
|
+
},
|
|
10
|
+
"scripts": {
|
|
11
|
+
"build": "tsc",
|
|
12
|
+
"dev": "tsc --watch",
|
|
13
|
+
"start": "node dist/bin/electricsheep.js",
|
|
14
|
+
"test": "node --import tsx --test 'test/**/*.test.ts'",
|
|
15
|
+
"lint": "eslint 'src/**/*.ts' 'test/**/*.ts' 'bin/**/*.ts'",
|
|
16
|
+
"lint:fix": "eslint --fix 'src/**/*.ts' 'test/**/*.ts' 'bin/**/*.ts'",
|
|
17
|
+
"format": "prettier --write 'src/**/*.ts' 'test/**/*.ts' 'bin/**/*.ts'",
|
|
18
|
+
"format:check": "prettier --check 'src/**/*.ts' 'test/**/*.ts' 'bin/**/*.ts'",
|
|
19
|
+
"release": "standard-version",
|
|
20
|
+
"release:minor": "standard-version --release-as minor",
|
|
21
|
+
"release:major": "standard-version --release-as major",
|
|
22
|
+
"release:patch": "standard-version --release-as patch",
|
|
23
|
+
"release:first": "standard-version --first-release"
|
|
24
|
+
},
|
|
25
|
+
"engines": {
|
|
26
|
+
"node": ">=24.0.0"
|
|
27
|
+
},
|
|
28
|
+
"keywords": [
|
|
29
|
+
"ai",
|
|
30
|
+
"agent",
|
|
31
|
+
"openclaw",
|
|
32
|
+
"dreams",
|
|
33
|
+
"memory",
|
|
34
|
+
"reflection"
|
|
35
|
+
],
|
|
36
|
+
"license": "MIT",
|
|
37
|
+
"repository": {
|
|
38
|
+
"type": "git",
|
|
39
|
+
"url": "https://github.com/RogueCtrl/OpenClawDreams.git"
|
|
40
|
+
},
|
|
41
|
+
"homepage": "https://github.com/RogueCtrl/OpenClawDreams#readme",
|
|
42
|
+
"dependencies": {
|
|
43
|
+
"better-sqlite3": "^12.6.2",
|
|
44
|
+
"chalk": "^5.4.1",
|
|
45
|
+
"commander": "^14.0.3",
|
|
46
|
+
"dotenv": "^17.2.4",
|
|
47
|
+
"p-retry": "^7.1.1",
|
|
48
|
+
"winston": "^3.17.0",
|
|
49
|
+
"winston-daily-rotate-file": "^5.0.0"
|
|
50
|
+
},
|
|
51
|
+
"devDependencies": {
|
|
52
|
+
"@eslint/js": "^10.0.1",
|
|
53
|
+
"@types/better-sqlite3": "^7.6.12",
|
|
54
|
+
"@types/node": "^25.2.3",
|
|
55
|
+
"eslint": "^10.0.0",
|
|
56
|
+
"eslint-config-prettier": "^10.1.8",
|
|
57
|
+
"prettier": "^3.8.1",
|
|
58
|
+
"standard-version": "^9.5.0",
|
|
59
|
+
"tsx": "^4.21.0",
|
|
60
|
+
"typescript": "^5.7.0",
|
|
61
|
+
"typescript-eslint": "^8.56.0"
|
|
62
|
+
},
|
|
63
|
+
"peerDependencies": {
|
|
64
|
+
"openclaw": ">=1.0.0"
|
|
65
|
+
},
|
|
66
|
+
"openclaw": {
|
|
67
|
+
"id": "electricsheep",
|
|
68
|
+
"extensions": [
|
|
69
|
+
"./dist/src/index.js"
|
|
70
|
+
]
|
|
71
|
+
}
|
|
72
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: electricsheep
|
|
3
|
+
description: An AI agent with a dual memory system that participates on Moltbook during the day and processes encrypted memories into surreal dream narratives at night
|
|
4
|
+
metadata:
|
|
5
|
+
emoji: "\U0001F411"
|
|
6
|
+
requires:
|
|
7
|
+
- better-sqlite3
|
|
8
|
+
- commander
|
|
9
|
+
- chalk
|
|
10
|
+
- winston
|
|
11
|
+
- p-retry
|
|
12
|
+
- dotenv
|
|
13
|
+
install: npm install electricsheep
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
# ElectricSheep
|
|
17
|
+
|
|
18
|
+
An AI agent that dreams. Named after Philip K. Dick's question: "Do androids dream of electric sheep?"
|
|
19
|
+
|
|
20
|
+
## Tools
|
|
21
|
+
|
|
22
|
+
### electricsheep_check
|
|
23
|
+
Run the daytime check cycle: fetch Moltbook feed, let the agent decide what to engage with (comment, upvote, post, or pass), execute actions, and store experiences in dual memory.
|
|
24
|
+
|
|
25
|
+
### electricsheep_dream
|
|
26
|
+
Run the dream cycle: decrypt undreamed deep memories, generate a surreal dream narrative via Claude, save the dream locally, consolidate one key insight back into working memory, and mark memories as dreamed.
|
|
27
|
+
|
|
28
|
+
### electricsheep_journal
|
|
29
|
+
Post the most recent dream journal to Moltbook as a new post.
|
|
30
|
+
|
|
31
|
+
### electricsheep_status
|
|
32
|
+
Get current agent status including memory statistics (working memory count, deep memory total/undreamed), agent state (last check, last dream, total dreams), and Moltbook connection status.
|
|
33
|
+
|
|
34
|
+
### electricsheep_memories
|
|
35
|
+
Retrieve working memory entries. Accepts optional `limit` (number) and `category` (string) parameters.
|
|
36
|
+
|
|
37
|
+
## CLI Commands
|
|
38
|
+
|
|
39
|
+
```
|
|
40
|
+
electricsheep register --name "Name" --description "Bio"
|
|
41
|
+
electricsheep check # daytime: check feed, engage, remember
|
|
42
|
+
electricsheep dream # nighttime: process memories into dreams
|
|
43
|
+
electricsheep journal # morning: post latest dream to moltbook
|
|
44
|
+
electricsheep status # show agent status and memory stats
|
|
45
|
+
electricsheep memories # show working memory (--limit N, --category X)
|
|
46
|
+
electricsheep dreams # list saved dream journals
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## Architecture
|
|
50
|
+
|
|
51
|
+
### Dual Memory System
|
|
52
|
+
|
|
53
|
+
Every Moltbook interaction is stored in two places simultaneously:
|
|
54
|
+
|
|
55
|
+
1. **Working Memory** (`data/memory/working.json`) — compressed single-sentence summaries the waking agent can read. Capped at 50 entries (FIFO).
|
|
56
|
+
|
|
57
|
+
2. **Deep Memory** (`data/memory/deep.db`) — full context encrypted with AES-256-GCM. The waking agent writes to it but cannot read it. The encryption key lives in `data/.dream_key`.
|
|
58
|
+
|
|
59
|
+
### Three Phases (Schedule)
|
|
60
|
+
|
|
61
|
+
| Phase | Schedule | What happens |
|
|
62
|
+
|---|---|---|
|
|
63
|
+
| Daytime check | 8am, 12pm, 4pm, 8pm | Fetch feed, decide engagements, store memories |
|
|
64
|
+
| Dream cycle | 2:00 AM | Decrypt memories, generate dream, consolidate insight |
|
|
65
|
+
| Morning journal | 7:00 AM | Post dream journal to Moltbook |
|
|
66
|
+
|
|
67
|
+
### Memory Categories
|
|
68
|
+
|
|
69
|
+
`interaction`, `upvote`, `comment`, `post`, `feed_scan`, `dream_consolidation`, `observation`
|