@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.
- package/.claude/settings.local.json +68 -0
- package/README.md +323 -0
- package/dist/config/llm.d.ts +13 -0
- package/dist/config/llm.d.ts.map +1 -0
- package/dist/config/llm.js +96 -0
- package/dist/config/llm.js.map +1 -0
- package/dist/config/plugin.d.ts +15 -0
- package/dist/config/plugin.d.ts.map +1 -0
- package/dist/config/plugin.js +32 -0
- package/dist/config/plugin.js.map +1 -0
- package/dist/db/entityRepository.d.ts +21 -0
- package/dist/db/entityRepository.d.ts.map +1 -0
- package/dist/db/entityRepository.js +55 -0
- package/dist/db/entityRepository.js.map +1 -0
- package/dist/db/repository.d.ts +22 -0
- package/dist/db/repository.d.ts.map +1 -0
- package/dist/db/repository.js +77 -0
- package/dist/db/repository.js.map +1 -0
- package/dist/db/schema.d.ts +5 -0
- package/dist/db/schema.d.ts.map +1 -0
- package/dist/db/schema.js +112 -0
- package/dist/db/schema.js.map +1 -0
- package/dist/db/todoRepository.d.ts +26 -0
- package/dist/db/todoRepository.d.ts.map +1 -0
- package/dist/db/todoRepository.js +54 -0
- package/dist/db/todoRepository.js.map +1 -0
- package/dist/hooks/bootstrap.d.ts +3 -0
- package/dist/hooks/bootstrap.d.ts.map +1 -0
- package/dist/hooks/bootstrap.js +28 -0
- package/dist/hooks/bootstrap.js.map +1 -0
- package/dist/hooks/message.d.ts +18 -0
- package/dist/hooks/message.d.ts.map +1 -0
- package/dist/hooks/message.js +52 -0
- package/dist/hooks/message.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +46 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/tools.d.ts +26 -0
- package/dist/mcp/tools.d.ts.map +1 -0
- package/dist/mcp/tools.js +360 -0
- package/dist/mcp/tools.js.map +1 -0
- package/dist/plugin.d.ts +18 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/plugin.js +62 -0
- package/dist/plugin.js.map +1 -0
- package/dist/services/entityGraphService.d.ts +87 -0
- package/dist/services/entityGraphService.d.ts.map +1 -0
- package/dist/services/entityGraphService.js +271 -0
- package/dist/services/entityGraphService.js.map +1 -0
- package/dist/services/memory.d.ts +26 -0
- package/dist/services/memory.d.ts.map +1 -0
- package/dist/services/memory.js +281 -0
- package/dist/services/memory.js.map +1 -0
- package/dist/services/memoryIndex.d.ts +34 -0
- package/dist/services/memoryIndex.d.ts.map +1 -0
- package/dist/services/memoryIndex.js +100 -0
- package/dist/services/memoryIndex.js.map +1 -0
- package/dist/services/metadataExtractor.d.ts +16 -0
- package/dist/services/metadataExtractor.d.ts.map +1 -0
- package/dist/services/metadataExtractor.js +75 -0
- package/dist/services/metadataExtractor.js.map +1 -0
- package/dist/services/retrieval.d.ts +24 -0
- package/dist/services/retrieval.d.ts.map +1 -0
- package/dist/services/retrieval.js +40 -0
- package/dist/services/retrieval.js.map +1 -0
- package/dist/services/scheduler.d.ts +122 -0
- package/dist/services/scheduler.d.ts.map +1 -0
- package/dist/services/scheduler.js +434 -0
- package/dist/services/scheduler.js.map +1 -0
- package/dist/services/summarizer.d.ts +43 -0
- package/dist/services/summarizer.d.ts.map +1 -0
- package/dist/services/summarizer.js +252 -0
- package/dist/services/summarizer.js.map +1 -0
- package/dist/services/tagService.d.ts +64 -0
- package/dist/services/tagService.d.ts.map +1 -0
- package/dist/services/tagService.js +281 -0
- package/dist/services/tagService.js.map +1 -0
- package/dist/tools/memory.d.ts +3 -0
- package/dist/tools/memory.d.ts.map +1 -0
- package/dist/tools/memory.js +114 -0
- package/dist/tools/memory.js.map +1 -0
- package/dist/types.d.ts +128 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- package/docs/plans/2026-03-02-claw-memory-design.md +445 -0
- package/docs/plans/2026-03-02-incremental-summary-design.md +157 -0
- package/docs/plans/2026-03-02-incremental-summary-implementation.md +468 -0
- package/docs/plans/2026-03-02-memory-index-design.md +163 -0
- package/docs/plans/2026-03-02-memory-index-implementation.md +836 -0
- package/docs/plans/2026-03-02-mvp-implementation.md +1703 -0
- package/docs/plans/2026-03-02-testing-implementation.md +395 -0
- package/docs/plans/2026-03-02-testing-plan.md +93 -0
- package/docs/plans/2026-03-03-claw-memory-openclaw-plugin-design.md +285 -0
- package/docs/plans/2026-03-03-claw-memory-plugin-implementation.md +642 -0
- package/docs/plans/2026-03-03-entity-graph-design.md +121 -0
- package/docs/plans/2026-03-03-entity-graph-implementation.md +687 -0
- package/docs/plans/2026-03-03-llm-generic-config-design.md +43 -0
- package/docs/plans/2026-03-03-llm-generic-config-implementation.md +186 -0
- package/docs/plans/2026-03-03-memory-e2e-stress-test-design.md +110 -0
- package/docs/plans/2026-03-03-memory-e2e-stress-test-implementation.md +464 -0
- package/docs/plans/2026-03-03-minimax-llm-fix.md +156 -0
- package/docs/plans/2026-03-03-scheduler-design.md +165 -0
- package/docs/plans/2026-03-03-scheduler-implementation.md +777 -0
- package/docs/plans/2026-03-03-tags-visualization-design.md +73 -0
- package/docs/plans/2026-03-03-tags-visualization-implementation.md +539 -0
- package/openclaw.plugin.json +11 -0
- package/package.json +41 -0
- package/src/config/llm.ts +129 -0
- package/src/config/plugin.ts +47 -0
- package/src/db/entityRepository.ts +80 -0
- package/src/db/repository.ts +106 -0
- package/src/db/schema.ts +121 -0
- package/src/db/todoRepository.ts +76 -0
- package/src/hooks/bootstrap.ts +36 -0
- package/src/hooks/message.ts +84 -0
- package/src/index.ts +50 -0
- package/src/plugin.ts +85 -0
- package/src/services/entityGraphService.ts +367 -0
- package/src/services/memory.ts +338 -0
- package/src/services/memoryIndex.ts +140 -0
- package/src/services/metadataExtractor.ts +89 -0
- package/src/services/retrieval.ts +71 -0
- package/src/services/scheduler.ts +529 -0
- package/src/services/summarizer.ts +318 -0
- package/src/services/tagService.ts +335 -0
- package/src/tools/memory.ts +137 -0
- package/src/types.ts +139 -0
- package/tsconfig.json +20 -0
- 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 发布
|