@yun-zero/claw-memory 0.1.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 (131) hide show
  1. package/.claude/settings.local.json +68 -0
  2. package/README.md +323 -0
  3. package/dist/config/llm.d.ts +13 -0
  4. package/dist/config/llm.d.ts.map +1 -0
  5. package/dist/config/llm.js +96 -0
  6. package/dist/config/llm.js.map +1 -0
  7. package/dist/config/plugin.d.ts +15 -0
  8. package/dist/config/plugin.d.ts.map +1 -0
  9. package/dist/config/plugin.js +32 -0
  10. package/dist/config/plugin.js.map +1 -0
  11. package/dist/db/entityRepository.d.ts +21 -0
  12. package/dist/db/entityRepository.d.ts.map +1 -0
  13. package/dist/db/entityRepository.js +55 -0
  14. package/dist/db/entityRepository.js.map +1 -0
  15. package/dist/db/repository.d.ts +22 -0
  16. package/dist/db/repository.d.ts.map +1 -0
  17. package/dist/db/repository.js +77 -0
  18. package/dist/db/repository.js.map +1 -0
  19. package/dist/db/schema.d.ts +5 -0
  20. package/dist/db/schema.d.ts.map +1 -0
  21. package/dist/db/schema.js +112 -0
  22. package/dist/db/schema.js.map +1 -0
  23. package/dist/db/todoRepository.d.ts +26 -0
  24. package/dist/db/todoRepository.d.ts.map +1 -0
  25. package/dist/db/todoRepository.js +54 -0
  26. package/dist/db/todoRepository.js.map +1 -0
  27. package/dist/hooks/bootstrap.d.ts +3 -0
  28. package/dist/hooks/bootstrap.d.ts.map +1 -0
  29. package/dist/hooks/bootstrap.js +28 -0
  30. package/dist/hooks/bootstrap.js.map +1 -0
  31. package/dist/hooks/message.d.ts +18 -0
  32. package/dist/hooks/message.d.ts.map +1 -0
  33. package/dist/hooks/message.js +52 -0
  34. package/dist/hooks/message.js.map +1 -0
  35. package/dist/index.d.ts +3 -0
  36. package/dist/index.d.ts.map +1 -0
  37. package/dist/index.js +46 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/mcp/tools.d.ts +26 -0
  40. package/dist/mcp/tools.d.ts.map +1 -0
  41. package/dist/mcp/tools.js +360 -0
  42. package/dist/mcp/tools.js.map +1 -0
  43. package/dist/plugin.d.ts +18 -0
  44. package/dist/plugin.d.ts.map +1 -0
  45. package/dist/plugin.js +62 -0
  46. package/dist/plugin.js.map +1 -0
  47. package/dist/services/entityGraphService.d.ts +87 -0
  48. package/dist/services/entityGraphService.d.ts.map +1 -0
  49. package/dist/services/entityGraphService.js +271 -0
  50. package/dist/services/entityGraphService.js.map +1 -0
  51. package/dist/services/memory.d.ts +26 -0
  52. package/dist/services/memory.d.ts.map +1 -0
  53. package/dist/services/memory.js +281 -0
  54. package/dist/services/memory.js.map +1 -0
  55. package/dist/services/memoryIndex.d.ts +34 -0
  56. package/dist/services/memoryIndex.d.ts.map +1 -0
  57. package/dist/services/memoryIndex.js +100 -0
  58. package/dist/services/memoryIndex.js.map +1 -0
  59. package/dist/services/metadataExtractor.d.ts +16 -0
  60. package/dist/services/metadataExtractor.d.ts.map +1 -0
  61. package/dist/services/metadataExtractor.js +75 -0
  62. package/dist/services/metadataExtractor.js.map +1 -0
  63. package/dist/services/retrieval.d.ts +24 -0
  64. package/dist/services/retrieval.d.ts.map +1 -0
  65. package/dist/services/retrieval.js +40 -0
  66. package/dist/services/retrieval.js.map +1 -0
  67. package/dist/services/scheduler.d.ts +122 -0
  68. package/dist/services/scheduler.d.ts.map +1 -0
  69. package/dist/services/scheduler.js +434 -0
  70. package/dist/services/scheduler.js.map +1 -0
  71. package/dist/services/summarizer.d.ts +43 -0
  72. package/dist/services/summarizer.d.ts.map +1 -0
  73. package/dist/services/summarizer.js +252 -0
  74. package/dist/services/summarizer.js.map +1 -0
  75. package/dist/services/tagService.d.ts +64 -0
  76. package/dist/services/tagService.d.ts.map +1 -0
  77. package/dist/services/tagService.js +281 -0
  78. package/dist/services/tagService.js.map +1 -0
  79. package/dist/tools/memory.d.ts +3 -0
  80. package/dist/tools/memory.d.ts.map +1 -0
  81. package/dist/tools/memory.js +114 -0
  82. package/dist/tools/memory.js.map +1 -0
  83. package/dist/types.d.ts +128 -0
  84. package/dist/types.d.ts.map +1 -0
  85. package/dist/types.js +6 -0
  86. package/dist/types.js.map +1 -0
  87. package/docs/plans/2026-03-02-claw-memory-design.md +445 -0
  88. package/docs/plans/2026-03-02-incremental-summary-design.md +157 -0
  89. package/docs/plans/2026-03-02-incremental-summary-implementation.md +468 -0
  90. package/docs/plans/2026-03-02-memory-index-design.md +163 -0
  91. package/docs/plans/2026-03-02-memory-index-implementation.md +836 -0
  92. package/docs/plans/2026-03-02-mvp-implementation.md +1703 -0
  93. package/docs/plans/2026-03-02-testing-implementation.md +395 -0
  94. package/docs/plans/2026-03-02-testing-plan.md +93 -0
  95. package/docs/plans/2026-03-03-claw-memory-openclaw-plugin-design.md +285 -0
  96. package/docs/plans/2026-03-03-claw-memory-plugin-implementation.md +642 -0
  97. package/docs/plans/2026-03-03-entity-graph-design.md +121 -0
  98. package/docs/plans/2026-03-03-entity-graph-implementation.md +687 -0
  99. package/docs/plans/2026-03-03-llm-generic-config-design.md +43 -0
  100. package/docs/plans/2026-03-03-llm-generic-config-implementation.md +186 -0
  101. package/docs/plans/2026-03-03-memory-e2e-stress-test-design.md +110 -0
  102. package/docs/plans/2026-03-03-memory-e2e-stress-test-implementation.md +464 -0
  103. package/docs/plans/2026-03-03-minimax-llm-fix.md +156 -0
  104. package/docs/plans/2026-03-03-scheduler-design.md +165 -0
  105. package/docs/plans/2026-03-03-scheduler-implementation.md +777 -0
  106. package/docs/plans/2026-03-03-tags-visualization-design.md +73 -0
  107. package/docs/plans/2026-03-03-tags-visualization-implementation.md +539 -0
  108. package/openclaw.plugin.json +11 -0
  109. package/package.json +41 -0
  110. package/src/config/llm.ts +129 -0
  111. package/src/config/plugin.ts +47 -0
  112. package/src/db/entityRepository.ts +80 -0
  113. package/src/db/repository.ts +106 -0
  114. package/src/db/schema.ts +121 -0
  115. package/src/db/todoRepository.ts +76 -0
  116. package/src/hooks/bootstrap.ts +36 -0
  117. package/src/hooks/message.ts +84 -0
  118. package/src/index.ts +50 -0
  119. package/src/plugin.ts +85 -0
  120. package/src/services/entityGraphService.ts +367 -0
  121. package/src/services/memory.ts +338 -0
  122. package/src/services/memoryIndex.ts +140 -0
  123. package/src/services/metadataExtractor.ts +89 -0
  124. package/src/services/retrieval.ts +71 -0
  125. package/src/services/scheduler.ts +529 -0
  126. package/src/services/summarizer.ts +318 -0
  127. package/src/services/tagService.ts +335 -0
  128. package/src/tools/memory.ts +137 -0
  129. package/src/types.ts +139 -0
  130. package/tsconfig.json +20 -0
  131. package/vitest.config.ts +16 -0
@@ -0,0 +1,285 @@
1
+ # Claw-Memory OpenClaw 插件设计
2
+
3
+ > **Design Date:** 2026-03-03
4
+
5
+ **Goal:** 开发 OpenClaw 插件,实现自动保存对话到记忆,并在会话开始时注入记忆摘要
6
+
7
+ **Architecture:** 完全集成到 OpenClaw 插件系统,使用 OpenClaw 内置 LLM 进行元数据提取,直接操作本地 SQLite
8
+
9
+ **Tech Stack:** TypeScript, OpenClaw Plugin SDK, SQLite
10
+
11
+ ---
12
+
13
+ ## 1. 概述
14
+
15
+ ### 1.1 目标
16
+
17
+ 开发一个 OpenClaw 插件(`@openclaw/claw-memory`),实现:
18
+
19
+ 1. **自动保存对话**:每条消息触发时,自动提取 Q&A 并保存到记忆
20
+ 2. **会话开始时注入摘要**:使用 `agent:bootstrap` 钩子,在上下文构建前注入记忆摘要
21
+ 3. **定时任务**:每日/每周/每月自动生成总结,自动去重
22
+ 4. **提供工具**:注册 Agent 工具供主动调用
23
+
24
+ ### 1.2 架构
25
+
26
+ ```
27
+ ┌─────────────────────────────────────────────────────────────────┐
28
+ │ OpenClaw Gateway │
29
+ │ │
30
+ │ ┌─────────────────────────────────────────────────────────┐ │
31
+ │ │ @openclaw/claw-memory-plugin │ │
32
+ │ │ │ │
33
+ │ │ Hooks: │ │
34
+ │ │ ├── message:sent ──▶ 提取 Q&A,保存记忆 │ │
35
+ │ │ └── agent:bootstrap ──▶ 注入记忆摘要到上下文 │ │
36
+ │ │ │ │
37
+ │ │ Tools: │ │
38
+ │ │ ├── memory_save 保存记忆(带 LLM 元数据提取) │ │
39
+ │ │ ├── memory_search 搜索记忆 │ │
40
+ │ │ └── memory_summary 获取记忆摘要 │ │
41
+ │ │ │ │
42
+ │ │ Scheduler: │ │
43
+ │ │ ├── 01:00 去重任务 │ │
44
+ │ │ ├── 02:00 每日总结 │ │
45
+ │ │ ├── 03:00 每周总结 │ │
46
+ │ │ └── 04:00 每月总结 │ │
47
+ │ │ │ │
48
+ │ │ 内置 LLM 调用(复用 OpenClaw 配置) │ │
49
+ │ └─────────────────────────────────────────────────────────┘ │
50
+ │ │ │
51
+ │ ▼ │
52
+ │ ┌───────────────────────────────────┐ │
53
+ │ │ ~/.openclaw/claw-memory/ │ │
54
+ │ │ ├── memory.db (SQLite) │ │
55
+ │ │ └── memories/ (对话文件) │ │
56
+ │ └───────────────────────────────────┘ │
57
+ └─────────────────────────────────────────────────────────────────┘
58
+ ```
59
+
60
+ ---
61
+
62
+ ## 2. 配置
63
+
64
+ ### 2.1 插件配置
65
+
66
+ ```json
67
+ {
68
+ "plugins": {
69
+ "claw-memory": {
70
+ "enabled": true,
71
+ "autoSave": true,
72
+ "saveMode": "qa",
73
+ "dataDir": "~/.openclaw/claw-memory",
74
+ "scheduler": {
75
+ "enabled": true,
76
+ "deduplicateTime": "01:00",
77
+ "dailyTime": "02:00",
78
+ "weeklyTime": "03:00",
79
+ "monthlyTime": "04:00"
80
+ }
81
+ }
82
+ }
83
+ }
84
+ ```
85
+
86
+ ### 2.2 配置说明
87
+
88
+ | 配置项 | 默认值 | 说明 |
89
+ |--------|--------|------|
90
+ | `enabled` | `true` | 是否启用插件 |
91
+ | `autoSave` | `true` | 是否自动保存对话 |
92
+ | `saveMode` | `"qa"` | 保存模式:`qa` 仅 Q&A,`full` 完整对话 |
93
+ | `dataDir` | `~/.openclaw/claw-memory` | 数据存储目录 |
94
+ | `scheduler.enabled` | `true` | 是否启用定时任务 |
95
+ | `scheduler.deduplicateTime` | `"01:00"` | 去重任务执行时间 |
96
+ | `scheduler.dailyTime` | `"02:00"` | 每日总结执行时间 |
97
+ | `scheduler.weeklyTime` | `"03:00"` | 每周总结执行时间 |
98
+ | `scheduler.monthlyTime` | `"04:00"` | 每月总结执行时间 |
99
+
100
+ ---
101
+
102
+ ## 3. 功能模块
103
+
104
+ ### 3.1 Hooks
105
+
106
+ #### 3.1.1 message:sent
107
+
108
+ - **触发时机**: 消息发送时
109
+ - **功能**:
110
+ 1. 解析消息内容,提取 Q&A 对
111
+ 2. 调用 OpenClaw 内置 LLM 提取元数据(tags, keywords, importance)
112
+ 3. 保存到 SQLite 数据库
113
+ - **错误处理**: 静默失败,不阻塞消息发送
114
+
115
+ #### 3.1.2 agent:bootstrap
116
+
117
+ - **触发时机**: Agent 上下文构建前
118
+ - **功能**:
119
+ 1. 调用 `get_summary` 获取本周记忆摘要
120
+ 2. 注入到 bootstrap 上下文
121
+ - **注入内容**:
122
+ ```markdown
123
+ ## 记忆摘要
124
+
125
+ 本周主要讨论了:
126
+ - 技术话题:React Hooks, TypeScript
127
+ - 项目进展:完成了用户认证模块
128
+
129
+ 重要事项:
130
+ - 需要 review 代码
131
+ ```
132
+
133
+ ### 3.2 Agent Tools
134
+
135
+ | 工具 | 描述 | 参数 |
136
+ |------|------|------|
137
+ | `memory_save` | 保存对话到记忆 | `content`, `metadata` |
138
+ | `memory_search` | 搜索记忆 | `query`, `timeRange`, `tags`, `limit` |
139
+ | `memory_summary` | 获取记忆摘要 | `period`, `date` |
140
+ | `memory_context` | 获取加权上下文 | `query`, `maxTokens` |
141
+
142
+ ### 3.3 Scheduler
143
+
144
+ | 任务 | 时间 | 功能 |
145
+ |------|------|------|
146
+ | 去重 | 01:00 | 查找相似记忆,标记重复 |
147
+ | 日总结 | 02:00 | 生成当日记忆摘要 |
148
+ | 周总结 | 03:00 | 生成本周记忆摘要 |
149
+ | 月总结 | 04:00 | 生成本月记忆摘要 |
150
+
151
+ ---
152
+
153
+ ## 4. 数据模型
154
+
155
+ ### 4.1 数据库表
156
+
157
+ ```sql
158
+ -- 记忆表
159
+ CREATE TABLE memories (
160
+ id TEXT PRIMARY KEY,
161
+ content_path TEXT NOT NULL,
162
+ created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
163
+ importance REAL DEFAULT 0.5,
164
+ access_count INTEGER DEFAULT 0,
165
+ token_count INTEGER DEFAULT 0,
166
+ summary TEXT,
167
+ integrated_summary TEXT,
168
+ is_archived INTEGER DEFAULT 0,
169
+ is_duplicate INTEGER DEFAULT 0,
170
+ duplicate_of TEXT
171
+ );
172
+
173
+ -- 实体表
174
+ CREATE TABLE entities (
175
+ id TEXT PRIMARY KEY,
176
+ name TEXT NOT NULL,
177
+ type TEXT NOT NULL,
178
+ parent_id TEXT,
179
+ level INTEGER DEFAULT 0,
180
+ embedding BLOB,
181
+ created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
182
+ FOREIGN KEY (parent_id) REFERENCES entities(id)
183
+ );
184
+
185
+ -- 记忆-实体关联
186
+ CREATE TABLE memory_entities (
187
+ memory_id TEXT NOT NULL,
188
+ entity_id TEXT NOT NULL,
189
+ relevance REAL DEFAULT 1.0,
190
+ PRIMARY KEY (memory_id, entity_id),
191
+ FOREIGN KEY (memory_id) REFERENCES memories(id),
192
+ FOREIGN KEY (entity_id) REFERENCES entities(id)
193
+ );
194
+
195
+ -- 实体关系图
196
+ CREATE TABLE entity_relations (
197
+ source_id TEXT NOT NULL,
198
+ target_id TEXT NOT NULL,
199
+ relation_type TEXT NOT NULL,
200
+ weight REAL DEFAULT 1.0,
201
+ PRIMARY KEY (source_id, target_id, relation_type),
202
+ FOREIGN KEY (source_id) REFERENCES entities(id),
203
+ FOREIGN KEY (target_id) REFERENCES entities(id)
204
+ );
205
+
206
+ -- 时间桶(总结)
207
+ CREATE TABLE time_buckets (
208
+ date TEXT PRIMARY KEY,
209
+ memory_count INTEGER DEFAULT 0,
210
+ summary TEXT,
211
+ summary_generated_at DATETIME
212
+ );
213
+
214
+ -- 待办
215
+ CREATE TABLE todos (
216
+ id TEXT PRIMARY KEY,
217
+ content TEXT NOT NULL,
218
+ period TEXT NOT NULL,
219
+ period_date TEXT NOT NULL,
220
+ completed_at DATETIME,
221
+ created_at DATETIME DEFAULT CURRENT_TIMESTAMP
222
+ );
223
+ ```
224
+
225
+ ---
226
+
227
+ ## 5. 目录结构
228
+
229
+ ```
230
+ claw-memory-plugin/
231
+ ├── src/
232
+ │ ├── index.ts # 插件入口
233
+ │ ├── config.ts # 配置管理
234
+ │ ├── hooks/
235
+ │ │ └── message.ts # message:sent Hook
236
+ │ ├── tools/
237
+ │ │ └── memory.ts # Agent 工具
238
+ │ ├── services/
239
+ │ │ ├── storage.ts # SQLite 存储
240
+ │ │ ├── llm.ts # LLM 元数据提取
241
+ │ │ ├── summarizer.ts # 总结生成
242
+ │ │ └── scheduler.ts # 定时任务
243
+ │ └── types.ts # 类型定义
244
+ ├── openclaw.plugin.json # 插件清单
245
+ ├── package.json
246
+ └── tsconfig.json
247
+ ```
248
+
249
+ ---
250
+
251
+ ## 6. 安装使用
252
+
253
+ ```bash
254
+ # 安装插件
255
+ openclaw plugins install @openclaw/claw-memory
256
+
257
+ # 配置
258
+ openclaw config set plugins.claw-memory.enabled true
259
+
260
+ # 重启
261
+ openclaw gateway restart
262
+ ```
263
+
264
+ ---
265
+
266
+ ## 7. 实施阶段
267
+
268
+ ### Phase 1: 基础功能
269
+ 1. 插件骨架搭建
270
+ 2. SQLite 存储服务
271
+ 3. message:sent Hook 实现
272
+
273
+ ### Phase 2: 工具注册
274
+ 4. Agent Tools 注册
275
+ 5. agent:bootstrap Hook 实现
276
+
277
+ ### Phase 3: 定时任务
278
+ 6. Scheduler 服务
279
+ 7. 总结生成逻辑
280
+ 8. 去重逻辑
281
+
282
+ ### Phase 4: 发布
283
+ 9. 完善配置
284
+ 10. 测试和文档
285
+ 11. npm 发布