openclaw-cortex-memory 0.1.0-Alpha.9 → 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/LICENSE +21 -0
- package/README.md +347 -290
- package/SIGNATURE.md +7 -0
- package/SKILL.md +96 -345
- package/dist/index.d.ts +69 -23
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1130 -1330
- package/dist/index.js.map +1 -1
- package/dist/openclaw.plugin.json +377 -18
- package/dist/src/dedup/three_stage_deduplicator.d.ts.map +1 -1
- package/dist/src/dedup/three_stage_deduplicator.js +13 -3
- package/dist/src/dedup/three_stage_deduplicator.js.map +1 -1
- package/dist/src/engine/memory_engine.d.ts +5 -1
- package/dist/src/engine/memory_engine.d.ts.map +1 -1
- package/dist/src/engine/ts_engine.d.ts +149 -0
- package/dist/src/engine/ts_engine.d.ts.map +1 -1
- package/dist/src/engine/ts_engine.js +863 -203
- package/dist/src/engine/ts_engine.js.map +1 -1
- package/dist/src/engine/types.d.ts +20 -0
- package/dist/src/engine/types.d.ts.map +1 -1
- package/dist/src/graph/ontology.d.ts +87 -15
- package/dist/src/graph/ontology.d.ts.map +1 -1
- package/dist/src/graph/ontology.js +999 -12
- package/dist/src/graph/ontology.js.map +1 -1
- package/dist/src/net/http_post.d.ts +17 -0
- package/dist/src/net/http_post.d.ts.map +1 -0
- package/dist/src/net/http_post.js +56 -0
- package/dist/src/net/http_post.js.map +1 -0
- package/dist/src/quality/llm_output_validator.d.ts +65 -0
- package/dist/src/quality/llm_output_validator.d.ts.map +1 -0
- package/dist/src/quality/llm_output_validator.js +635 -0
- package/dist/src/quality/llm_output_validator.js.map +1 -0
- package/dist/src/reflect/reflector.d.ts.map +1 -1
- package/dist/src/reflect/reflector.js +296 -26
- package/dist/src/reflect/reflector.js.map +1 -1
- package/dist/src/rules/rule_store.d.ts.map +1 -1
- package/dist/src/rules/rule_store.js +75 -16
- package/dist/src/rules/rule_store.js.map +1 -1
- package/dist/src/session/session_end.d.ts +20 -42
- package/dist/src/session/session_end.d.ts.map +1 -1
- package/dist/src/session/session_end.js +21 -218
- package/dist/src/session/session_end.js.map +1 -1
- package/dist/src/store/archive_store.d.ts +28 -7
- package/dist/src/store/archive_store.d.ts.map +1 -1
- package/dist/src/store/archive_store.js +367 -130
- package/dist/src/store/archive_store.js.map +1 -1
- package/dist/src/store/graph_memory_store.d.ts +115 -0
- package/dist/src/store/graph_memory_store.d.ts.map +1 -0
- package/dist/src/store/graph_memory_store.js +1061 -0
- package/dist/src/store/graph_memory_store.js.map +1 -0
- package/dist/src/store/read_store.d.ts +75 -0
- package/dist/src/store/read_store.d.ts.map +1 -1
- package/dist/src/store/read_store.js +1837 -312
- package/dist/src/store/read_store.js.map +1 -1
- package/dist/src/store/vector_store.d.ts +2 -0
- package/dist/src/store/vector_store.d.ts.map +1 -1
- package/dist/src/store/vector_store.js +19 -3
- package/dist/src/store/vector_store.js.map +1 -1
- package/dist/src/store/write_store.d.ts +11 -0
- package/dist/src/store/write_store.d.ts.map +1 -1
- package/dist/src/store/write_store.js +242 -42
- package/dist/src/store/write_store.js.map +1 -1
- package/dist/src/sync/session_sync.d.ts +72 -1
- package/dist/src/sync/session_sync.d.ts.map +1 -1
- package/dist/src/sync/session_sync.js +2246 -126
- package/dist/src/sync/session_sync.js.map +1 -1
- package/dist/src/wiki/wiki_linter.d.ts +26 -0
- package/dist/src/wiki/wiki_linter.d.ts.map +1 -0
- package/dist/src/wiki/wiki_linter.js +339 -0
- package/dist/src/wiki/wiki_linter.js.map +1 -0
- package/dist/src/wiki/wiki_logger.d.ts +10 -0
- package/dist/src/wiki/wiki_logger.d.ts.map +1 -0
- package/dist/src/wiki/wiki_logger.js +78 -0
- package/dist/src/wiki/wiki_logger.js.map +1 -0
- package/dist/src/wiki/wiki_maintainer.d.ts +39 -0
- package/dist/src/wiki/wiki_maintainer.d.ts.map +1 -0
- package/dist/src/wiki/wiki_maintainer.js +38 -0
- package/dist/src/wiki/wiki_maintainer.js.map +1 -0
- package/dist/src/wiki/wiki_projector.d.ts +35 -0
- package/dist/src/wiki/wiki_projector.d.ts.map +1 -0
- package/dist/src/wiki/wiki_projector.js +1151 -0
- package/dist/src/wiki/wiki_projector.js.map +1 -0
- package/dist/src/wiki/wiki_queue.d.ts +29 -0
- package/dist/src/wiki/wiki_queue.d.ts.map +1 -0
- package/dist/src/wiki/wiki_queue.js +137 -0
- package/dist/src/wiki/wiki_queue.js.map +1 -0
- package/openclaw.plugin.json +377 -18
- package/package.json +52 -6
- package/schema/graph.schema.yaml +330 -0
- package/scripts/cli.js +67 -13
- package/scripts/repair-memory.js +321 -0
- package/skills/cortex-memory/SKILL.md +83 -0
- package/skills/cortex-memory/references/agent-manual.md +127 -0
- package/skills/cortex-memory/references/configuration.md +109 -0
- package/skills/cortex-memory/references/publish-checklist.md +45 -0
- package/skills/cortex-memory/references/system-prompt-template.md +27 -0
- package/skills/cortex-memory/references/tools.md +191 -0
package/SIGNATURE.md
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# Publisher Signature
|
|
2
|
+
|
|
3
|
+
- Maintainer: deki18
|
|
4
|
+
- Repository: https://github.com/deki18/openclaw-cortex-memory
|
|
5
|
+
- npm Package: https://www.npmjs.com/package/openclaw-cortex-memory
|
|
6
|
+
- ClawHub ID: openclaw-cortex-memory
|
|
7
|
+
- Signature Intent: This repository and published artifacts are maintained and released by deki18.
|
package/SKILL.md
CHANGED
|
@@ -1,345 +1,96 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: cortex-memory
|
|
3
|
-
description:
|
|
4
|
-
homepage: https://github.com/deki18/openclaw-cortex-memory
|
|
5
|
-
metadata:
|
|
6
|
-
{
|
|
7
|
-
"openclaw": {
|
|
8
|
-
"emoji": "🧠",
|
|
9
|
-
"os": ["darwin", "linux", "win32"],
|
|
10
|
-
"requires": {
|
|
11
|
-
"env": ["EMBEDDING_API_KEY", "LLM_API_KEY", "RERANKER_API_KEY"]
|
|
12
|
-
},
|
|
13
|
-
"primaryEnv": "EMBEDDING_API_KEY"
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
---
|
|
17
|
-
|
|
18
|
-
# Cortex Memory
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
-
|
|
29
|
-
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
-
|
|
41
|
-
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
-
|
|
85
|
-
-
|
|
86
|
-
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
```
|
|
98
|
-
|
|
99
|
-
### 本地开发模式(无安装记录)
|
|
100
|
-
|
|
101
|
-
```bash
|
|
102
|
-
cd ~/.openclaw/extensions
|
|
103
|
-
git clone https://github.com/deki18/openclaw-cortex-memory.git
|
|
104
|
-
cd openclaw-cortex-memory
|
|
105
|
-
npm install
|
|
106
|
-
```
|
|
107
|
-
|
|
108
|
-
### 配置
|
|
109
|
-
|
|
110
|
-
在 `openclaw.json` 中配置插件:
|
|
111
|
-
|
|
112
|
-
```json
|
|
113
|
-
{
|
|
114
|
-
"plugins": {
|
|
115
|
-
"allow": ["openclaw-cortex-memory"],
|
|
116
|
-
"slots": { "memory": "openclaw-cortex-memory" },
|
|
117
|
-
"entries": {
|
|
118
|
-
"openclaw-cortex-memory": {
|
|
119
|
-
"enabled": true,
|
|
120
|
-
"config": {
|
|
121
|
-
"engineMode": "ts",
|
|
122
|
-
"dbPath": "<optional-memory-dir>",
|
|
123
|
-
"autoSync": true,
|
|
124
|
-
"autoReflect": false,
|
|
125
|
-
"autoReflectIntervalMinutes": 30,
|
|
126
|
-
"readFusion": {
|
|
127
|
-
"enabled": true,
|
|
128
|
-
"authoritative": true
|
|
129
|
-
},
|
|
130
|
-
"memoryDecay": {
|
|
131
|
-
"enabled": true,
|
|
132
|
-
"antiDecay": {
|
|
133
|
-
"enabled": true
|
|
134
|
-
}
|
|
135
|
-
},
|
|
136
|
-
"embedding": {
|
|
137
|
-
"provider": "api",
|
|
138
|
-
"model": "text-embedding-3-large",
|
|
139
|
-
"apiKey": "${EMBEDDING_API_KEY}",
|
|
140
|
-
"baseURL": "https://your-embedding-endpoint/v1",
|
|
141
|
-
"dimensions": 3072
|
|
142
|
-
},
|
|
143
|
-
"llm": {
|
|
144
|
-
"provider": "api",
|
|
145
|
-
"model": "gpt-4",
|
|
146
|
-
"apiKey": "${LLM_API_KEY}",
|
|
147
|
-
"baseURL": "https://your-llm-endpoint/v1"
|
|
148
|
-
},
|
|
149
|
-
"reranker": {
|
|
150
|
-
"provider": "api",
|
|
151
|
-
"model": "BAAI/bge-reranker-v2-m3",
|
|
152
|
-
"apiKey": "${RERANKER_API_KEY}",
|
|
153
|
-
"baseURL": "https://your-reranker-endpoint/v1/rerank"
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
```
|
|
161
|
-
|
|
162
|
-
关键功能开关(建议显式配置):
|
|
163
|
-
|
|
164
|
-
- `readFusion.enabled`:开启多路召回后的 LLM 融合
|
|
165
|
-
- `readFusion.authoritative`:仅返回融合后的权威记忆包
|
|
166
|
-
- `memoryDecay.enabled`:开启按事件类型的半衰期衰减
|
|
167
|
-
- `memoryDecay.antiDecay.enabled`:开启命中频次反衰减
|
|
168
|
-
- `autoReflect`:建议验证稳定后再开启(默认 false)
|
|
169
|
-
|
|
170
|
-
### 启动
|
|
171
|
-
|
|
172
|
-
```bash
|
|
173
|
-
openclaw config validate
|
|
174
|
-
openclaw gateway restart
|
|
175
|
-
```
|
|
176
|
-
|
|
177
|
-
### 主Agent注入说明
|
|
178
|
-
|
|
179
|
-
首次接入后,建议把下面这段发给主 Agent,确保其按统一记忆工作流调用工具:
|
|
180
|
-
|
|
181
|
-
```text
|
|
182
|
-
你已接入 Cortex Memory。请遵循以下规则:
|
|
183
|
-
1) 当用户询问历史对话、偏好、项目上下文时,先调用 search_memory 再回答。
|
|
184
|
-
2) 需要当前会话热上下文时调用 get_hot_context。
|
|
185
|
-
3) 需要自动召回相关记忆时调用 get_auto_context。
|
|
186
|
-
4) 在一件重要事情结束并形成明确结果后,再调用 store_event 记录(不要在过程进行中频繁记录)。
|
|
187
|
-
5) 需要实体关联关系时调用 query_graph。
|
|
188
|
-
6) 当任务经历“失败→调整→最终成功”时,优先用 store_event 记录失败原因与成功方案,再调用 reflect_memory 沉淀可复用规则。
|
|
189
|
-
7) 需要导入历史会话时调用 sync_memory。
|
|
190
|
-
8) 当 diagnostics 显示 active/archive 存在未向量化记录,或迁移后需要重建向量层时,调用 backfill_embeddings(按需选择 incremental/vector_only/full)。
|
|
191
|
-
9) 出现配置校验失败、记忆读写异常、检索结果异常或数据目录问题时,优先调用 diagnostics。
|
|
192
|
-
10) 同一任务内不要反复调用 store_event 或 reflect_memory;仅在关键节点或任务收尾时触发一次。
|
|
193
|
-
11) 不要臆造历史事实;无法确认时必须先检索。
|
|
194
|
-
```
|
|
195
|
-
|
|
196
|
-
## 可用工具
|
|
197
|
-
|
|
198
|
-
### search_memory
|
|
199
|
-
|
|
200
|
-
语义搜索长期记忆。
|
|
201
|
-
|
|
202
|
-
**参数:**
|
|
203
|
-
| 参数 | 类型 | 必需 | 说明 |
|
|
204
|
-
|------|------|------|------|
|
|
205
|
-
| query | string | 是 | 搜索查询 |
|
|
206
|
-
| top_k | number | 否 | 返回数量,默认 3 |
|
|
207
|
-
|
|
208
|
-
### store_event
|
|
209
|
-
|
|
210
|
-
写入事件摘要到归档记忆。
|
|
211
|
-
|
|
212
|
-
**参数:**
|
|
213
|
-
| 参数 | 类型 | 必需 | 说明 |
|
|
214
|
-
|------|------|------|------|
|
|
215
|
-
| summary | string | 是 | 事件摘要 |
|
|
216
|
-
| entities | array | 否 | 相关实体列表 |
|
|
217
|
-
| outcome | string | 否 | 事件结果 |
|
|
218
|
-
| relations | array | 否 | 实体关系 |
|
|
219
|
-
|
|
220
|
-
### query_graph
|
|
221
|
-
|
|
222
|
-
查询归档事件中的实体关系(relations 优先,共现关系回退)。
|
|
223
|
-
|
|
224
|
-
**参数:**
|
|
225
|
-
| 参数 | 类型 | 必需 | 说明 |
|
|
226
|
-
|------|------|------|------|
|
|
227
|
-
| entity | string | 是 | 实体名称 |
|
|
228
|
-
| rel | string | 否 | 关系类型过滤(如 `depends_on`) |
|
|
229
|
-
| dir | string | 否 | 方向过滤:`incoming` / `outgoing` / `both` |
|
|
230
|
-
| path_to | string | 否 | 查询从 `entity` 到目标实体的路径 |
|
|
231
|
-
| max_depth | number | 否 | 路径最大深度(2~4) |
|
|
232
|
-
|
|
233
|
-
### get_hot_context
|
|
234
|
-
|
|
235
|
-
获取当前热上下文(CORTEX_RULES.md + 近期会话)。
|
|
236
|
-
|
|
237
|
-
**参数:**
|
|
238
|
-
| 参数 | 类型 | 必需 | 说明 |
|
|
239
|
-
|------|------|------|------|
|
|
240
|
-
| limit | number | 否 | 最大条目数,默认 20 |
|
|
241
|
-
|
|
242
|
-
### get_auto_context
|
|
243
|
-
|
|
244
|
-
自动检索相关记忆(基于近期消息)。
|
|
245
|
-
|
|
246
|
-
**参数:**
|
|
247
|
-
| 参数 | 类型 | 必需 | 说明 |
|
|
248
|
-
|------|------|------|------|
|
|
249
|
-
| include_hot | boolean | 否 | 包含热上下文,默认 true |
|
|
250
|
-
|
|
251
|
-
### reflect_memory
|
|
252
|
-
|
|
253
|
-
将归档事件反思为规则并写入 `CORTEX_RULES.md`。
|
|
254
|
-
|
|
255
|
-
### sync_memory
|
|
256
|
-
|
|
257
|
-
增量同步会话记录,且必须经 LLM 提取判定后才写入事件/图谱记忆(无参数)。
|
|
258
|
-
|
|
259
|
-
### backfill_embeddings
|
|
260
|
-
|
|
261
|
-
按层回填或重建向量,支持全文分块向量重建。
|
|
262
|
-
|
|
263
|
-
**参数:**
|
|
264
|
-
| 参数 | 类型 | 必需 | 说明 |
|
|
265
|
-
|------|------|------|------|
|
|
266
|
-
| layer | string | 否 | `active` / `archive` / `all` |
|
|
267
|
-
| batch_size | number | 否 | 每批处理数量 |
|
|
268
|
-
| max_retries | number | 否 | 失败重试上限 |
|
|
269
|
-
| retry_failed_only | boolean | 否 | 仅处理失败记录 |
|
|
270
|
-
| rebuild_mode | string | 否 | `incremental` / `vector_only` / `full` |
|
|
271
|
-
|
|
272
|
-
### delete_memory
|
|
273
|
-
|
|
274
|
-
删除指定记忆。
|
|
275
|
-
|
|
276
|
-
**参数:**
|
|
277
|
-
| 参数 | 类型 | 必需 | 说明 |
|
|
278
|
-
|------|------|------|------|
|
|
279
|
-
| memory_id | string | 是 | 记忆 ID |
|
|
280
|
-
|
|
281
|
-
### diagnostics
|
|
282
|
-
|
|
283
|
-
运行本地系统诊断,检查数据目录、分层状态与 embedding/LLM/reranker 连通性。
|
|
284
|
-
|
|
285
|
-
## 配置选项
|
|
286
|
-
|
|
287
|
-
| 选项 | 必需 | 默认值 | 说明 |
|
|
288
|
-
|------|------|--------|------|
|
|
289
|
-
| embedding.provider | 是 | - | `api`(推荐) |
|
|
290
|
-
| embedding.model | 是 | - | Embedding 模型名称 |
|
|
291
|
-
| embedding.apiKey | 是 | ${EMBEDDING_API_KEY} | Embedding API Key |
|
|
292
|
-
| embedding.baseURL | 是 | - | Embedding API 端点 |
|
|
293
|
-
| llm.provider | 是 | - | `api`(推荐) |
|
|
294
|
-
| llm.model | 是 | - | LLM 模型名称 |
|
|
295
|
-
| llm.apiKey | 是 | ${LLM_API_KEY} | LLM API Key |
|
|
296
|
-
| llm.baseURL | 是 | - | LLM API 端点 |
|
|
297
|
-
| reranker.provider | 否 | - | `api`(推荐) |
|
|
298
|
-
| reranker.model | 是 | - | Reranker 模型 |
|
|
299
|
-
| reranker.apiKey | 是 | ${RERANKER_API_KEY} | Reranker API Key |
|
|
300
|
-
| reranker.baseURL | 是 | - | Reranker API 端点 |
|
|
301
|
-
| dbPath | 否 | `<plugin-dir>/data/memory` | 记忆目录路径 |
|
|
302
|
-
| engineMode | 否 | `ts` | 固定为 TS 引擎 |
|
|
303
|
-
| autoSync | 否 | true | 会话结束自动同步 |
|
|
304
|
-
| autoReflect | 否 | false | 自动触发反思 |
|
|
305
|
-
| autoReflectIntervalMinutes | 否 | 30 | 自动反思扫描间隔(分钟) |
|
|
306
|
-
| readFusion.enabled | 否 | true | 启用检索重排后的 LLM 融合 |
|
|
307
|
-
| readFusion.authoritative | 否 | true | 仅返回融合权威记忆包 |
|
|
308
|
-
| memoryDecay.enabled | 否 | true | 启用按事件类型半衰期衰减 |
|
|
309
|
-
| memoryDecay.antiDecay.enabled | 否 | true | 启用命中频次反衰减 |
|
|
310
|
-
|
|
311
|
-
## 数据文件
|
|
312
|
-
|
|
313
|
-
| 路径 | 说明 |
|
|
314
|
-
|------|------|
|
|
315
|
-
| `<dbPath>/MEMORY.md` | 记忆说明文件 |
|
|
316
|
-
| `<dbPath>/CORTEX_RULES.md` | 规则文件 |
|
|
317
|
-
| `<dbPath>/sessions/active/sessions.jsonl` | 活跃会话记忆 |
|
|
318
|
-
| `<dbPath>/sessions/archive/sessions.jsonl` | 归档事件 |
|
|
319
|
-
| `<dbPath>/vector/lancedb` | LanceDB 向量表(可用时) |
|
|
320
|
-
| `<dbPath>/vector/lancedb_events.jsonl` | 向量回退存储(LanceDB 不可用时) |
|
|
321
|
-
| `<dbPath>/.sync_state.json` | 同步增量状态 |
|
|
322
|
-
| `<dbPath>/.session_end_state.json` | session_end 幂等状态 |
|
|
323
|
-
| `<dbPath>/.rule_store_state.json` | 规则去重状态 |
|
|
324
|
-
| `<dbPath>/.dedup_index.json` | 三阶段去重索引 |
|
|
325
|
-
| `<dbPath>/.read_hit_stats.json` | 检索命中频次统计(反衰减) |
|
|
326
|
-
| `<dbPath>/graph/mutation_log.jsonl` | 图谱变更审计日志 |
|
|
327
|
-
|
|
328
|
-
## 错误处理
|
|
329
|
-
|
|
330
|
-
| 错误代码 | 说明 | 处理方式 |
|
|
331
|
-
|----------|------|----------|
|
|
332
|
-
| E203 | 重复记忆 | 相似度 > 0.95,已跳过 |
|
|
333
|
-
| E204 | 质量评分过低 | 信息密度不足,未存储 |
|
|
334
|
-
|
|
335
|
-
## 相关文件
|
|
336
|
-
|
|
337
|
-
- `index.ts` - 插件入口与工具注册
|
|
338
|
-
- `src/engine/ts_engine.ts` - TS 引擎实现
|
|
339
|
-
- `src/store/read_store.ts` - 读取能力
|
|
340
|
-
- `src/store/write_store.ts` - 写入能力
|
|
341
|
-
|
|
342
|
-
## 依赖
|
|
343
|
-
|
|
344
|
-
- Node.js >= 22
|
|
345
|
-
- EMBEDDING_API_KEY、LLM_API_KEY、RERANKER_API_KEY(或兼容 API 配置)
|
|
1
|
+
---
|
|
2
|
+
name: cortex-memory
|
|
3
|
+
description: OpenClaw 长期记忆系统(TypeScript)。用于跨会话上下文复用、偏好记忆、历史追溯与图谱关系检索。
|
|
4
|
+
homepage: https://github.com/deki18/openclaw-cortex-memory
|
|
5
|
+
metadata:
|
|
6
|
+
{
|
|
7
|
+
"openclaw": {
|
|
8
|
+
"emoji": "🧠",
|
|
9
|
+
"os": ["darwin", "linux", "win32"],
|
|
10
|
+
"requires": {
|
|
11
|
+
"env": ["EMBEDDING_API_KEY", "LLM_API_KEY", "RERANKER_API_KEY"]
|
|
12
|
+
},
|
|
13
|
+
"primaryEnv": "EMBEDDING_API_KEY"
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
# Cortex Memory
|
|
19
|
+
|
|
20
|
+
## 使用场景
|
|
21
|
+
|
|
22
|
+
推荐使用:
|
|
23
|
+
- 需要跨会话记住用户偏好、项目背景、历史决策
|
|
24
|
+
- 需要查询实体关系(依赖、上下游、关联)
|
|
25
|
+
- 需要把对话沉淀成可复用规则
|
|
26
|
+
|
|
27
|
+
不建议使用:
|
|
28
|
+
- 仅当前会话的一次性临时信息
|
|
29
|
+
- 实时互联网数据查询(天气、新闻、股价)
|
|
30
|
+
|
|
31
|
+
## 可用工具(与代码一致)
|
|
32
|
+
|
|
33
|
+
- `search_memory`
|
|
34
|
+
- `store_event`
|
|
35
|
+
- `query_graph`
|
|
36
|
+
- `export_graph_view`
|
|
37
|
+
- `lint_memory_wiki`
|
|
38
|
+
- `list_graph_conflicts`
|
|
39
|
+
- `resolve_graph_conflict`
|
|
40
|
+
- `get_hot_context`
|
|
41
|
+
- `get_auto_context`
|
|
42
|
+
- `reflect_memory`
|
|
43
|
+
- `sync_memory`
|
|
44
|
+
- `backfill_embeddings`
|
|
45
|
+
- `delete_memory`
|
|
46
|
+
- `cortex_diagnostics`
|
|
47
|
+
|
|
48
|
+
### 参数速览
|
|
49
|
+
|
|
50
|
+
| 工具 | 关键参数 |
|
|
51
|
+
|------|------|
|
|
52
|
+
| `search_memory` | `query`, `top_k`, `fusion_mode`, `track_hits` |
|
|
53
|
+
| `store_event` | `summary`, `entities`, `entity_types`, `outcome`, `relations` |
|
|
54
|
+
| `query_graph` | `entity`, `rel`, `dir`, `path_to`, `max_depth` |
|
|
55
|
+
| `export_graph_view` | `write_snapshot` |
|
|
56
|
+
| `lint_memory_wiki` | 无 |
|
|
57
|
+
| `list_graph_conflicts` | `status`, `limit` |
|
|
58
|
+
| `resolve_graph_conflict` | `conflict_id`, `action`, `note` |
|
|
59
|
+
| `get_hot_context` | `limit` |
|
|
60
|
+
| `get_auto_context` | `include_hot` |
|
|
61
|
+
| `reflect_memory` | 无 |
|
|
62
|
+
| `sync_memory` | 无 |
|
|
63
|
+
| `backfill_embeddings` | `layer`, `batch_size`, `max_retries`, `retry_failed_only`, `rebuild_mode` |
|
|
64
|
+
| `cortex_diagnostics` | 无 |
|
|
65
|
+
| `delete_memory` | `memory_id` |
|
|
66
|
+
|
|
67
|
+
## 使用建议
|
|
68
|
+
|
|
69
|
+
1. 回答历史问题前先调 `search_memory`。
|
|
70
|
+
2. 涉及实体关系优先调 `query_graph`。
|
|
71
|
+
3. 如命中冲突事实(`conflict_hint`),先调 `list_graph_conflicts`,再让用户确认后执行 `resolve_graph_conflict`。
|
|
72
|
+
4. 需要图谱状态快照或排查投影不一致时,调 `export_graph_view` 与 `lint_memory_wiki`。
|
|
73
|
+
5. 会话收尾或批量导入后再调 `sync_memory` / `reflect_memory`。
|
|
74
|
+
6. 诊断发现向量缺失时调 `backfill_embeddings`。
|
|
75
|
+
7. 调试检索时可用 `fusion_mode: "candidates"` 保留候选明细;评测或诊断时可用 `track_hits: false` 避免更新 anti-decay 命中统计。
|
|
76
|
+
|
|
77
|
+
## 配置策略
|
|
78
|
+
|
|
79
|
+
先用最小配置跑通:`embedding`、`llm`、`reranker` + `autoSync`。
|
|
80
|
+
高级项(`readFusion`、`memoryDecay`、`vectorChunking`、`writePolicy`、`syncPolicy`、`readTuning`)都有默认值,不需要一开始就调整。历史导入的图谱质量门禁默认使用 `syncPolicy.graphQualityMode: "strict"`,手动写入仍可按全局 `graphQualityMode` 调整。
|
|
81
|
+
|
|
82
|
+
## 安全与端点声明
|
|
83
|
+
|
|
84
|
+
- 本插件需要外部端点:`/embeddings`、`/chat/completions`、`/rerank`
|
|
85
|
+
- 凭证来源:环境变量或插件配置中的 `*.apiKey`
|
|
86
|
+
- 仅发送推理所需文本片段,不主动上传本地配置文件全集或环境变量全集
|
|
87
|
+
|
|
88
|
+
## 关键事实
|
|
89
|
+
|
|
90
|
+
- `backfill_embeddings` 已实现且已注册。
|
|
91
|
+
- `query_graph` 支持参数:`entity`、`rel`、`dir`、`path_to`、`max_depth`。
|
|
92
|
+
- `query_graph` 会返回 `wiki_refs`、`evidence_ids`,冲突时返回 `conflict_hint`。
|
|
93
|
+
- `search_memory` 兼容返回 `vector_semantic_results` / `vector_keyword_results`,并额外返回 `channel_results`,其中 `keyword` 是跨 archive/rules/graph/vector 的全局关键词通道。
|
|
94
|
+
- Wiki 是图谱关系的投影页,不是第二套记忆库;`search_memory` 命中图谱事实时可返回 `wiki_ref` / `wiki_refs` 展示链接,但事实读取以 graph 存储为准。
|
|
95
|
+
- 图谱治理工具:`export_graph_view`、`lint_memory_wiki`、`list_graph_conflicts`、`resolve_graph_conflict`。
|
|
96
|
+
- Wiki 投影页应包含结论、近期变化、状态分组/事件流和证据摘录;`lint_memory_wiki` 会检查缺失结构与旧式泛化 Summary。
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import type { EngineMode } from "./src/engine/types";
|
|
2
1
|
interface EmbeddingConfig {
|
|
3
2
|
provider: string;
|
|
4
3
|
model: string;
|
|
@@ -25,13 +24,21 @@ interface RerankerConfig {
|
|
|
25
24
|
}
|
|
26
25
|
interface CortexMemoryConfig {
|
|
27
26
|
enabled?: boolean;
|
|
27
|
+
fallbackToBuiltin?: boolean;
|
|
28
28
|
embedding: EmbeddingConfig;
|
|
29
29
|
llm: LLMConfig;
|
|
30
30
|
reranker: RerankerConfig;
|
|
31
31
|
dbPath?: string;
|
|
32
32
|
autoSync?: boolean;
|
|
33
|
+
llmRequiredForWrite?: boolean;
|
|
33
34
|
autoReflect?: boolean;
|
|
34
35
|
autoReflectIntervalMinutes?: number;
|
|
36
|
+
graphQualityMode?: "off" | "warn" | "strict";
|
|
37
|
+
wikiProjection?: {
|
|
38
|
+
enabled?: boolean;
|
|
39
|
+
mode?: "off" | "incremental" | "rebuild";
|
|
40
|
+
maxBatch?: number;
|
|
41
|
+
};
|
|
35
42
|
readFusion?: {
|
|
36
43
|
enabled?: boolean;
|
|
37
44
|
maxCandidates?: number;
|
|
@@ -60,6 +67,19 @@ interface CortexMemoryConfig {
|
|
|
60
67
|
vectorChunking?: {
|
|
61
68
|
chunkSize?: number;
|
|
62
69
|
chunkOverlap?: number;
|
|
70
|
+
evidenceMaxChunks?: number;
|
|
71
|
+
};
|
|
72
|
+
writePolicy?: {
|
|
73
|
+
archiveMinConfidence?: number;
|
|
74
|
+
archiveMinQualityScore?: number;
|
|
75
|
+
activeMinQualityScore?: number;
|
|
76
|
+
activeDedupTailLines?: number;
|
|
77
|
+
activeTextMaxChars?: number;
|
|
78
|
+
archiveSourceTextMaxChars?: number;
|
|
79
|
+
};
|
|
80
|
+
syncPolicy?: {
|
|
81
|
+
includeLocalActiveInput?: boolean;
|
|
82
|
+
graphQualityMode?: "off" | "warn" | "strict";
|
|
63
83
|
};
|
|
64
84
|
memoryDecay?: {
|
|
65
85
|
enabled?: boolean;
|
|
@@ -73,26 +93,38 @@ interface CortexMemoryConfig {
|
|
|
73
93
|
recentWindowDays?: number;
|
|
74
94
|
};
|
|
75
95
|
};
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
96
|
+
readTuning?: {
|
|
97
|
+
scoring?: {
|
|
98
|
+
lexicalWeight?: number;
|
|
99
|
+
bm25Scale?: number;
|
|
100
|
+
semanticWeight?: number;
|
|
101
|
+
recencyWeight?: number;
|
|
102
|
+
qualityWeight?: number;
|
|
103
|
+
typeMatchWeight?: number;
|
|
104
|
+
graphMatchWeight?: number;
|
|
105
|
+
};
|
|
106
|
+
rrf?: {
|
|
107
|
+
k?: number;
|
|
108
|
+
weight?: number;
|
|
109
|
+
};
|
|
110
|
+
recency?: {
|
|
111
|
+
buckets?: Array<{
|
|
112
|
+
maxAgeHours: number;
|
|
113
|
+
score: number;
|
|
114
|
+
bonus: number;
|
|
115
|
+
}>;
|
|
116
|
+
};
|
|
117
|
+
autoContext?: {
|
|
118
|
+
queryMaxChars?: number;
|
|
119
|
+
lightweightSearch?: boolean;
|
|
120
|
+
};
|
|
121
|
+
};
|
|
79
122
|
}
|
|
80
123
|
interface ToolContext {
|
|
81
124
|
agentId: string;
|
|
82
125
|
sessionId?: string;
|
|
83
126
|
workspaceId: string;
|
|
84
127
|
}
|
|
85
|
-
interface ToolResult {
|
|
86
|
-
success: boolean;
|
|
87
|
-
data?: unknown;
|
|
88
|
-
error?: string;
|
|
89
|
-
errorCode?: string;
|
|
90
|
-
}
|
|
91
|
-
interface BuiltinMemory {
|
|
92
|
-
search: (query: string, limit?: number) => Promise<unknown[]>;
|
|
93
|
-
store: (content: string, metadata?: Record<string, unknown>) => Promise<string>;
|
|
94
|
-
delete: (id: string) => Promise<boolean>;
|
|
95
|
-
}
|
|
96
128
|
interface Logger {
|
|
97
129
|
debug: (message: string, ...args: unknown[]) => void;
|
|
98
130
|
info: (message: string, ...args: unknown[]) => void;
|
|
@@ -100,15 +132,17 @@ interface Logger {
|
|
|
100
132
|
error: (message: string, ...args: unknown[]) => void;
|
|
101
133
|
}
|
|
102
134
|
interface OpenClawPluginApi {
|
|
135
|
+
logger?: Logger;
|
|
136
|
+
config?: Record<string, unknown>;
|
|
137
|
+
pluginConfig?: Record<string, unknown>;
|
|
103
138
|
registerTool(tool: {
|
|
104
139
|
name: string;
|
|
105
140
|
description: string;
|
|
106
141
|
parameters: Record<string, unknown>;
|
|
107
|
-
execute?: (params:
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
handler?: (...params: unknown[]) => Promise<ToolResult>;
|
|
142
|
+
execute?: (...params: unknown[]) => Promise<unknown>;
|
|
143
|
+
handler?: (...params: unknown[]) => Promise<unknown>;
|
|
144
|
+
}, options?: {
|
|
145
|
+
optional?: boolean;
|
|
112
146
|
}): void;
|
|
113
147
|
unregisterTool?(name: string): void;
|
|
114
148
|
registerHook(hook: {
|
|
@@ -121,15 +155,27 @@ interface OpenClawPluginApi {
|
|
|
121
155
|
off?(event: string, handler: (payload: unknown, context: ToolContext) => Promise<void> | void): void;
|
|
122
156
|
unregisterHook?(event: string): void;
|
|
123
157
|
getLogger?(): Logger;
|
|
124
|
-
getBuiltinMemory?():
|
|
158
|
+
getBuiltinMemory?(): {
|
|
159
|
+
search: (query: string, topK?: number) => Promise<unknown[]>;
|
|
160
|
+
store: (text: string, metadata?: Record<string, unknown>) => Promise<string>;
|
|
161
|
+
delete: (id: string) => Promise<boolean>;
|
|
162
|
+
} | null;
|
|
125
163
|
}
|
|
126
164
|
export declare function enable(): Promise<void>;
|
|
127
165
|
export declare function disable(): Promise<void>;
|
|
128
166
|
export declare function getStatus(): {
|
|
129
167
|
enabled: boolean;
|
|
130
|
-
serviceRunning: boolean;
|
|
131
168
|
};
|
|
132
169
|
export declare function unregister(): Promise<void>;
|
|
133
170
|
export declare function register(pluginApi: OpenClawPluginApi, userConfig?: Partial<CortexMemoryConfig>): void;
|
|
134
|
-
|
|
171
|
+
declare const pluginEntry: {
|
|
172
|
+
id: string;
|
|
173
|
+
name: string;
|
|
174
|
+
register: typeof register;
|
|
175
|
+
unregister: typeof unregister;
|
|
176
|
+
enable: typeof enable;
|
|
177
|
+
disable: typeof disable;
|
|
178
|
+
getStatus: typeof getStatus;
|
|
179
|
+
};
|
|
180
|
+
export default pluginEntry;
|
|
135
181
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAiBA,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
|