openclaw-cortex-memory 0.1.0-Alpha.1 → 0.1.0-Alpha.11

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 (65) hide show
  1. package/README.md +118 -28
  2. package/SKILL.md +112 -31
  3. package/dist/index.d.ts +48 -2
  4. package/dist/index.d.ts.map +1 -1
  5. package/dist/index.js +359 -19
  6. package/dist/index.js.map +1 -1
  7. package/dist/openclaw.plugin.json +157 -5
  8. package/dist/src/dedup/three_stage_deduplicator.d.ts +25 -0
  9. package/dist/src/dedup/three_stage_deduplicator.d.ts.map +1 -0
  10. package/dist/src/dedup/three_stage_deduplicator.js +225 -0
  11. package/dist/src/dedup/three_stage_deduplicator.js.map +1 -0
  12. package/dist/src/engine/memory_engine.d.ts +2 -1
  13. package/dist/src/engine/memory_engine.d.ts.map +1 -1
  14. package/dist/src/engine/ts_engine.d.ts +95 -0
  15. package/dist/src/engine/ts_engine.d.ts.map +1 -1
  16. package/dist/src/engine/ts_engine.js +869 -33
  17. package/dist/src/engine/ts_engine.js.map +1 -1
  18. package/dist/src/engine/types.d.ts +11 -0
  19. package/dist/src/engine/types.d.ts.map +1 -1
  20. package/dist/src/graph/ontology.d.ts +53 -0
  21. package/dist/src/graph/ontology.d.ts.map +1 -0
  22. package/dist/src/graph/ontology.js +252 -0
  23. package/dist/src/graph/ontology.js.map +1 -0
  24. package/dist/src/reflect/reflector.d.ts +7 -0
  25. package/dist/src/reflect/reflector.d.ts.map +1 -1
  26. package/dist/src/reflect/reflector.js +75 -1
  27. package/dist/src/reflect/reflector.js.map +1 -1
  28. package/dist/src/session/session_end.d.ts +56 -0
  29. package/dist/src/session/session_end.d.ts.map +1 -1
  30. package/dist/src/session/session_end.js +270 -55
  31. package/dist/src/session/session_end.js.map +1 -1
  32. package/dist/src/store/archive_store.d.ts +115 -0
  33. package/dist/src/store/archive_store.d.ts.map +1 -0
  34. package/dist/src/store/archive_store.js +446 -0
  35. package/dist/src/store/archive_store.js.map +1 -0
  36. package/dist/src/store/embedding_utils.d.ts +32 -0
  37. package/dist/src/store/embedding_utils.d.ts.map +1 -0
  38. package/dist/src/store/embedding_utils.js +173 -0
  39. package/dist/src/store/embedding_utils.js.map +1 -0
  40. package/dist/src/store/read_store.d.ts +59 -0
  41. package/dist/src/store/read_store.d.ts.map +1 -1
  42. package/dist/src/store/read_store.js +1114 -17
  43. package/dist/src/store/read_store.js.map +1 -1
  44. package/dist/src/store/vector_store.d.ts +43 -0
  45. package/dist/src/store/vector_store.d.ts.map +1 -0
  46. package/dist/src/store/vector_store.js +186 -0
  47. package/dist/src/store/vector_store.js.map +1 -0
  48. package/dist/src/store/write_store.d.ts +45 -0
  49. package/dist/src/store/write_store.d.ts.map +1 -1
  50. package/dist/src/store/write_store.js +230 -0
  51. package/dist/src/store/write_store.js.map +1 -1
  52. package/dist/src/sync/session_sync.d.ts +52 -2
  53. package/dist/src/sync/session_sync.d.ts.map +1 -1
  54. package/dist/src/sync/session_sync.js +474 -22
  55. package/dist/src/sync/session_sync.js.map +1 -1
  56. package/dist/src/utils/runtime_env.d.ts +4 -0
  57. package/dist/src/utils/runtime_env.d.ts.map +1 -0
  58. package/dist/src/utils/runtime_env.js +51 -0
  59. package/dist/src/utils/runtime_env.js.map +1 -0
  60. package/openclaw.plugin.json +157 -5
  61. package/package.json +21 -6
  62. package/scripts/cli.js +19 -14
  63. package/scripts/uninstall.js +22 -5
  64. package/index.ts +0 -2071
  65. package/scripts/install.js +0 -27
package/README.md CHANGED
@@ -1,7 +1,8 @@
1
1
  # OpenClaw Cortex Memory
2
2
 
3
- OpenClaw 长期记忆插件,提供跨会话检索、事件存储、规则反思、增量同步与运行诊断能力。
4
- 可作为 OpenClaw 的 memory slot 直接接入,支持从历史会话持续沉淀可复用记忆。
3
+ 面向 OpenClaw 的长期记忆插件,集成多路检索、事件归档、图谱关系、向量化与反衰减排序,支持历史增量导入、规则反思和可观测诊断,帮助 Agent 在跨会话中持续积累并稳定调用高价值记忆。
4
+
5
+ 发布签名见 [SIGNATURE.md]
5
6
 
6
7
  ## 功能特性
7
8
 
@@ -9,11 +10,42 @@ OpenClaw 长期记忆插件,提供跨会话检索、事件存储、规则反
9
10
  |------|------|
10
11
  | 语义检索 | `search_memory` 支持 query + top_k |
11
12
  | 事件存储 | `store_event` 将摘要写入归档 |
13
+ | 全文分块向量化 | Active 与 Archive 统一按 `chunk_size/chunk_overlap` 做全文分块向量化 |
12
14
  | 上下文注入 | `get_hot_context` / `get_auto_context` |
13
- | 增量同步 | `sync_memory` 按状态文件增量导入 |
15
+ | 增量同步 | `sync_memory` 按状态文件增量导入,并统一走 LLM 提取后写入事件/图谱 |
16
+ | 向量回填重建 | `backfill_embeddings` 支持 incremental / vector_only / full 三种模式 |
14
17
  | 规则演进 | `reflect_memory` 更新 `CORTEX_RULES.md` |
15
18
  | 运行诊断 | `diagnostics` 检查本地存储状态 |
16
19
 
20
+ ## 记忆库组成与特点
21
+
22
+ ### 组成结构
23
+
24
+ | 层级 | 核心文件/数据 | 作用 |
25
+ |------|---------------|------|
26
+ | 会话记忆层 | `sessions/active/sessions.jsonl` | 存储最近会话消息,支撑实时检索与上下文注入 |
27
+ | 事件归档层 | `sessions/archive/sessions.jsonl` | 存储已沉淀事件(摘要、实体、结果),用于长期回顾 |
28
+ | 实体关系层 | 基于归档事件中的 `entities` / `relations` 字段动态构图 | 支撑 `query_graph` 的实体共现与关系查询(派生图谱,不单独落盘) |
29
+ | 向量检索层 | `vector/lancedb`(可用时)或 `vector/lancedb_events.jsonl`(回退) | 存储 active/archive 全文分块向量(含 `source_memory_id` 与 chunk 元信息),用于语义检索与同源融合 |
30
+ | 规则知识层 | `CORTEX_RULES.md` | 存储由反思生成的可复用规则,供后续任务复用 |
31
+ | 运行状态层 | `.sync_state.json` / `.session_end_state.json` / `.rule_store_state.json` / `.dedup_index.json` / `graph/mutation_log.jsonl` | 记录增量同步、session_end 幂等、规则去重、三阶段去重索引、图谱变更审计日志 |
32
+ | 说明与入口层 | `MEMORY.md` | 记忆库说明与使用约定入口 |
33
+
34
+ ### 核心特点
35
+
36
+ - 分层记忆:把“原始会话、结构化事件、抽象规则”拆分存储,便于分别检索与治理
37
+ - 图谱派生:实体关系来自事件层的 `entities` / `relations`,查询时动态生成图结构
38
+ - 图谱治理:写入前按 `schema/graph.schema.yaml` 做 event/relation 规范化与关系规则校验
39
+ - 会话结束写入:message hook 默认仅缓存,会在 `session_end` 后批量抽取并落盘
40
+ - 严格导入门禁:历史导入内容必须经 LLM 提取判定后才写入事件层与图谱层
41
+ - 增量导入:通过状态文件只处理新增会话内容,避免全量重复扫描
42
+ - 幂等去重:对 session_end 事件和规则写入做签名判重,减少重复沉淀
43
+ - 三阶段去重:SimHash 预过滤 → MinHash 精比对 → 向量余弦相似度
44
+ - 全文分块向量化:active/archive 两层统一使用可配置 chunk 策略(默认 `600/100`,语义断句优先)
45
+ - 混合检索:关键词/BM25 + 向量召回统一融合重排,并支持长度归一化防止长文本天然占优
46
+ - 自动演进:可结合 `autoSync`、`autoReflect` 持续把会话经验转化为长期可复用记忆
47
+ - 可观测可诊断:通过 `diagnostics` 与状态文件快速定位数据目录、同步与反思异常
48
+
17
49
  ## 安装
18
50
 
19
51
  ### 前置要求
@@ -23,29 +55,51 @@ OpenClaw 长期记忆插件,提供跨会话检索、事件存储、规则反
23
55
 
24
56
  ### 安装步骤
25
57
 
26
- 快速安装(推荐):
58
+ 命令前缀说明:
59
+ - 若你是全局安装 OpenClaw,请直接使用 `openclaw ...`
60
+ - 若你使用源码安装的 OpenClaw ,请使用 `pnpm openclaw ...`
61
+
62
+ 快速安装(推荐,显式来源):
63
+
64
+ ```bash
65
+ cd ~/openclaw
66
+ openclaw plugins install clawhub:openclaw-cortex-memory
67
+ openclaw plugins enable openclaw-cortex-memory
68
+ ```
69
+
70
+ npm 安装方式:
71
+
72
+ ```bash
73
+ cd ~/openclaw
74
+ openclaw plugins install openclaw-cortex-memory@alpha
75
+ openclaw plugins enable openclaw-cortex-memory
76
+ ```
77
+
78
+ 第三种安装方式(当 ClawHub/npm 解析受网络影响时):
27
79
 
28
80
  ```bash
29
- git clone https://github.com/deki18/openclaw-cortex-memory.git ~/openclaw-cortex-memory-src
30
- cd ~/openclaw-cortex-memory-src
31
- npm install && npm run build && npm pack
81
+ curl -L -o /tmp/cortex.tgz https://registry.npmjs.org/openclaw-cortex-memory/-/openclaw-cortex-memory-0.1.0-Alpha.11.tgz
32
82
  cd ~/openclaw
33
- pnpm openclaw plugins install ~/openclaw-cortex-memory-src/openclaw-cortex-memory-0.1.0-Alpha.1.tgz
34
- pnpm openclaw plugins enable openclaw-cortex-memory
35
- pnpm openclaw gateway restart
83
+ openclaw plugins install /tmp/cortex.tgz
84
+ openclaw plugins enable openclaw-cortex-memory
85
+ rm -f /tmp/cortex.tgz
36
86
  ```
37
87
 
38
- 后续更新(同一套流程):
88
+ 后续更新:
39
89
 
40
90
  ```bash
41
- cd ~/openclaw-cortex-memory-src
42
- git pull && npm install && npm run build && npm pack
43
91
  cd ~/openclaw
44
- pnpm openclaw plugins install ~/openclaw-cortex-memory-src/openclaw-cortex-memory-0.1.0-Alpha.1.tgz
45
- pnpm openclaw gateway restart
92
+ openclaw plugins uninstall openclaw-cortex-memory
93
+ openclaw plugins install clawhub:openclaw-cortex-memory
94
+ openclaw plugins enable openclaw-cortex-memory
46
95
  ```
47
96
 
48
- 安装前如果 `openclaw.json` 已经提前写了 `allow/slots/entries` 指向本插件,先临时移除,安装后再加回,避免安装前校验报 `plugin not found`。
97
+ 说明:
98
+ - 推荐显式安装来源,减少 ClawHub-first 时代的来源歧义。
99
+ - 使用 `plugins install` 的安装记录方式,避免 `loaded without install/load-path provenance`。
100
+ - 保持 `plugins.allow` 显式包含 `openclaw-cortex-memory`,避免运行时把插件判定为未绑定信任源。
101
+ - 若 `plugins install openclaw-cortex-memory` 在 ClawHub 解析阶段失败,可使用上述 tgz 方式直接安装。
102
+
49
103
 
50
104
  ### 本地开发模式(无安装记录)
51
105
 
@@ -56,7 +110,7 @@ cd openclaw-cortex-memory
56
110
  npm install
57
111
  ```
58
112
 
59
- `npm install` 会自动执行 TypeScript 构建并生成 `dist/`,但这种方式默认不写 OpenClaw 安装记录。
113
+ `npm install` 不会自动构建 `dist/`,源码模式请显式执行 `npm run build`,且这种方式默认不写 OpenClaw 安装记录。
60
114
 
61
115
  ## 配置
62
116
 
@@ -65,15 +119,26 @@ npm install
65
119
  ```json
66
120
  {
67
121
  "plugins": {
122
+ "allow": ["openclaw-cortex-memory"],
68
123
  "slots": { "memory": "openclaw-cortex-memory" },
69
124
  "entries": {
70
125
  "openclaw-cortex-memory": {
71
126
  "enabled": true,
72
127
  "config": {
73
128
  "engineMode": "ts",
74
- "dbPath": "<optional-memory-dir>",
75
129
  "autoSync": true,
76
- "autoReflect": true,
130
+ "autoReflect": false,
131
+ "autoReflectIntervalMinutes": 30,
132
+ "readFusion": {
133
+ "enabled": true,
134
+ "authoritative": true
135
+ },
136
+ "memoryDecay": {
137
+ "enabled": true,
138
+ "antiDecay": {
139
+ "enabled": true
140
+ }
141
+ },
77
142
  "embedding": {
78
143
  "provider": "api",
79
144
  "model": "text-embedding-3-large",
@@ -100,13 +165,23 @@ npm install
100
165
  }
101
166
  ```
102
167
 
168
+ ### 关键功能开关(建议显式配置)
169
+
170
+ - `readFusion.enabled`:开启多路召回后 LLM 融合
171
+ - `readFusion.authoritative`:开启后仅返回融合后的权威记忆包
172
+ - `readFusion.channelWeights/channelTopK`:控制各召回通道权重与配额
173
+ - `readFusion.lengthNorm`:长度归一化参数,抑制超长文本得分偏置
174
+ - `vectorChunking.chunkSize/chunkOverlap`:全文分块向量化参数(默认 `600/100`)
175
+ - `memoryDecay.enabled`:开启按 `event_type` 半衰期衰减
176
+ - `memoryDecay.antiDecay.enabled`:开启命中频次反衰减,避免高价值老记忆被过度衰减
177
+ - `autoReflect`:建议在验证稳定后再开启;默认 `false`
178
+
103
179
  ### 配置项说明
104
180
 
105
181
  | 配置项 | 必填 | 说明 |
106
182
  |--------|------|------|
107
183
  | `embedding.provider` | 是 | 建议使用 `api`(统一第三方接口模式) |
108
184
  | `embedding.model` | 是 | 嵌入模型名称 |
109
- | `embedding.dimensions` | 否 | 向量维度,需与模型匹配 |
110
185
  | `embedding.apiKey` | 是 | Embedding API Key(建议 `${EMBEDDING_API_KEY}`) |
111
186
  | `embedding.baseURL` | 是 | Embedding API 端点 |
112
187
  | `llm.provider` | 是 | 建议使用 `api` |
@@ -121,6 +196,11 @@ npm install
121
196
  | `dbPath` | 否 | 数据目录,默认 `<plugin-dir>/data/memory` |
122
197
  | `autoSync` | 否 | 会话结束时自动同步历史记录,默认 `true` |
123
198
  | `autoReflect` | 否 | 自动触发记忆反思,默认 `false` |
199
+ | `autoReflectIntervalMinutes` | 否 | 自动反思扫描间隔(分钟),默认 `30`,最小 `5` |
200
+ | `readFusion.enabled` | 否 | 启用重排后 LLM 融合,默认 `true` |
201
+ | `readFusion.authoritative` | 否 | 仅返回融合权威记忆包,默认 `true` |
202
+ | `memoryDecay.enabled` | 否 | 启用按 `event_type` 的半衰期衰减,默认 `true` |
203
+ | `memoryDecay.antiDecay.enabled` | 否 | 启用命中频次反衰减,默认 `true` |
124
204
 
125
205
  ### 启动
126
206
 
@@ -142,9 +222,10 @@ openclaw gateway restart
142
222
  5) 需要实体关联关系时调用 query_graph。
143
223
  6) 当任务经历“失败→调整→最终成功”时,优先用 store_event 记录失败原因与成功方案,再调用 reflect_memory 沉淀可复用规则。
144
224
  7) 需要导入历史会话时调用 sync_memory。
145
- 8) 出现配置校验失败、记忆读写异常、检索结果异常或数据目录问题时,优先调用 diagnostics
146
- 9) 同一任务内不要反复调用 store_event 或 reflect_memory;仅在关键节点或任务收尾时触发一次。
147
- 10) 不要臆造历史事实;无法确认时必须先检索。
225
+ 8) diagnostics 显示 active/archive 存在未向量化记录,或迁移后需要重建向量层时,调用 backfill_embeddings(按需选择 incremental/vector_only/full)。
226
+ 9) 出现配置校验失败、记忆读写异常、检索结果异常或数据目录问题时,优先调用 diagnostics。
227
+ 10) 同一任务内不要反复调用 store_event 或 reflect_memory;仅在关键节点或任务收尾时触发一次。
228
+ 11) 不要臆造历史事实;无法确认时必须先检索。
148
229
  ```
149
230
 
150
231
  ## 可用工具
@@ -153,13 +234,14 @@ openclaw gateway restart
153
234
  |------|------|
154
235
  | `search_memory` | 语义搜索记忆库,支持 top_k 参数 |
155
236
  | `store_event` | 存储事件,可包含实体和关系 |
156
- | `query_graph` | 查询实体关系图谱 |
237
+ | `query_graph` | 查询实体关系图谱,支持关系过滤、方向过滤与路径查询 |
157
238
  | `get_hot_context` | 获取热上下文(CORTEX_RULES.md + 近期会话) |
158
239
  | `get_auto_context` | 自动检索相关记忆 + 热上下文 |
159
240
  | `reflect_memory` | 触发记忆反思,将事件转化为规则 |
160
- | `sync_memory` | 同步 OpenClaw 历史会话(增量) |
241
+ | `sync_memory` | 同步 OpenClaw 历史会话(增量),并通过 LLM 判定后写入事件/图谱 |
242
+ | `backfill_embeddings` | 向量回填/重建(支持 `incremental`、`vector_only`、`full`) |
161
243
  | `delete_memory` | 删除指定记忆 |
162
- | `diagnostics` | 系统诊断 |
244
+ | `diagnostics` | 系统诊断(含 embedding/LLM/reranker 连通性检查) |
163
245
 
164
246
  ## CLI 命令
165
247
 
@@ -182,16 +264,24 @@ npx cortex-memory help # 查看命令帮助
182
264
  | `<dbPath>/CORTEX_RULES.md` | 规则文件 |
183
265
  | `<dbPath>/sessions/active/sessions.jsonl` | 活跃会话 |
184
266
  | `<dbPath>/sessions/archive/sessions.jsonl` | 归档事件 |
267
+ | `<dbPath>/vector/lancedb` | LanceDB 向量表(可用时) |
268
+ | `<dbPath>/vector/lancedb_events.jsonl` | 向量回退存储(LanceDB不可用时) |
185
269
  | `<dbPath>/.sync_state.json` | 同步增量状态 |
186
270
  | `<dbPath>/.session_end_state.json` | session_end 幂等状态 |
187
271
  | `<dbPath>/.rule_store_state.json` | 规则去重状态 |
272
+ | `<dbPath>/.dedup_index.json` | 三阶段去重索引 |
273
+ | `<dbPath>/.read_hit_stats.json` | 检索命中频次统计(用于反衰减增益) |
274
+ | `<dbPath>/graph/mutation_log.jsonl` | 图谱写入审计日志(canonical_id/source_event_id/actor/timestamp) |
188
275
 
189
276
  ## 注意事项
190
277
 
191
- 1. **API Key 安全**:使用环境变量 `${OPENAI_API_KEY}` 而非硬编码
278
+ 1. **API Key 安全**:使用 `${EMBEDDING_API_KEY}`、`${LLM_API_KEY}`、`${RERANKER_API_KEY}` 等环境变量而非硬编码
192
279
  2. **向量维度**:必须与嵌入模型匹配,如 `text-embedding-3-large` 为 3072
193
280
  3. **重排序**:可选配置 `reranker` 以提升检索精度
194
- 4. **单栈运行**:当前版本为纯 TS,无 Python 运行时依赖
281
+ 4. **外部传输**:检索与反思会调用你配置的 embedding/llm/reranker endpoint,请使用可信服务并最小化密钥权限
282
+ 5. **会话数据**:启用 `autoSync` 时会读取 OpenClaw 会话文件并写入本地记忆目录,生产环境建议先小范围验证
283
+ 6. **历史导入来源**:`sync_memory` 会同时导入 `<openclaw_base>/agents/main/sessions/*.jsonl` 与 `<openclaw_base>/workspace/memory/*.md`
284
+ 7. **重复导入防护**:每日总结 `.md` 会按文件内容哈希标记在 `.sync_state.json`,未变化文件不会重复导入
195
285
 
196
286
  ## 许可证
197
287
 
package/SKILL.md CHANGED
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: cortex-memory
3
- description: 长期记忆系统(纯 TypeScript)。Use when user asks about past conversations, preferences, project history, or needs to remember information across sessions.
3
+ description: 长期记忆系统(纯 TypeScript)。适用于历史对话回溯、偏好记忆、项目上下文延续与跨会话信息复用场景。
4
4
  homepage: https://github.com/deki18/openclaw-cortex-memory
5
5
  metadata:
6
6
  {
@@ -8,27 +8,27 @@ metadata:
8
8
  "emoji": "🧠",
9
9
  "os": ["darwin", "linux", "win32"],
10
10
  "requires": {
11
- "env": ["OPENAI_API_KEY"]
11
+ "env": ["EMBEDDING_API_KEY", "LLM_API_KEY", "RERANKER_API_KEY"]
12
12
  },
13
- "primaryEnv": "OPENAI_API_KEY"
13
+ "primaryEnv": "EMBEDDING_API_KEY"
14
14
  }
15
15
  }
16
16
  ---
17
17
 
18
- # Cortex Memory - 长期记忆系统
18
+ # Cortex Memory · 长期记忆系统
19
19
 
20
- 为 OpenClaw Agent 提供持久化记忆能力,当前为纯 TypeScript 单栈实现。
20
+ 为 OpenClaw Agent 提供稳定的跨会话记忆能力。
21
21
 
22
22
  ## 使用场景
23
23
 
24
- **USE when:**
24
+ **建议使用场景(USE when):**
25
25
  - 用户询问过去的对话内容或决策
26
26
  - 需要记住用户偏好、项目信息
27
27
  - 跨会话保持上下文
28
28
  - 查询实体关系(人物、项目、技术)
29
29
  - 存储重要事件或里程碑
30
30
 
31
- **DON'T use when:**
31
+ **不建议使用场景(DON'T use when):**
32
32
  - 仅需当前会话的临时信息
33
33
  - 查询实时数据(天气、新闻等)
34
34
 
@@ -36,30 +36,65 @@ metadata:
36
36
 
37
37
  ### 安装
38
38
 
39
- 快速安装(推荐):
39
+ 命令前缀说明:
40
+ - 若你是全局安装 OpenClaw,请直接使用 `openclaw ...`
41
+ - 若你使用源码安装的 OpenClaw ,请使用 `pnpm openclaw ...`
42
+
43
+ 快速安装(推荐,显式来源):
40
44
 
41
45
  ```bash
42
- git clone https://github.com/deki18/openclaw-cortex-memory.git ~/openclaw-cortex-memory-src
43
- cd ~/openclaw-cortex-memory-src
44
- npm install && npm run build && npm pack
45
46
  cd ~/openclaw
46
- pnpm openclaw plugins install ~/openclaw-cortex-memory-src/openclaw-cortex-memory-0.1.0-Alpha.1.tgz
47
- pnpm openclaw plugins enable openclaw-cortex-memory
48
- pnpm openclaw gateway restart
47
+ openclaw plugins install clawhub:openclaw-cortex-memory
48
+ openclaw plugins enable openclaw-cortex-memory
49
+ openclaw gateway restart
49
50
  ```
50
51
 
51
- ### 后续更新
52
+ npm 安装方式:
52
53
 
53
54
  ```bash
54
- cd ~/openclaw-cortex-memory-src
55
- git pull && npm install && npm run build && npm pack
55
+ cd ~/openclaw
56
+ openclaw plugins install openclaw-cortex-memory@alpha
57
+ openclaw plugins enable openclaw-cortex-memory
58
+ openclaw gateway restart
59
+ ```
56
60
 
61
+ 第三种安装方式(当 ClawHub/npm 解析受网络影响时):
62
+
63
+ ```bash
64
+ curl -L -o /tmp/cortex.tgz https://registry.npmjs.org/openclaw-cortex-memory/-/openclaw-cortex-memory-0.1.0-Alpha.11.tgz
65
+ cd ~/openclaw
66
+ openclaw plugins install /tmp/cortex.tgz
67
+ openclaw plugins enable openclaw-cortex-memory
68
+ openclaw gateway restart
69
+ rm -f /tmp/cortex.tgz
70
+ ```
71
+
72
+ ### 后续更新
73
+
74
+ ```bash
57
75
  cd ~/openclaw
58
- pnpm openclaw plugins install ~/openclaw-cortex-memory-src/openclaw-cortex-memory-0.1.0-Alpha.1.tgz
59
- pnpm openclaw gateway restart
76
+ openclaw plugins uninstall openclaw-cortex-memory
77
+ openclaw plugins install clawhub:openclaw-cortex-memory
78
+ openclaw plugins enable openclaw-cortex-memory
79
+ openclaw gateway restart
60
80
  ```
61
81
 
62
- 安装前如果 `openclaw.json` 已经提前写了 `allow/slots/entries` 指向本插件,先临时移除,安装后再加回,避免安装前校验报 `plugin not found`。
82
+ 说明:
83
+ - 推荐显式安装来源,减少 ClawHub-first 时代的来源歧义。
84
+ - 使用 `plugins install` 的安装记录方式,避免 `loaded without install/load-path provenance`。
85
+ - 保持 `plugins.allow` 显式包含 `openclaw-cortex-memory`,避免运行时把插件判定为未绑定信任源。
86
+ - 若 `plugins install openclaw-cortex-memory` 在 ClawHub 解析阶段失败,可使用上述 tgz 方式直接安装。
87
+
88
+ ### 本地打包安装(源码模式)
89
+
90
+ ```bash
91
+ git clone https://github.com/deki18/openclaw-cortex-memory.git ~/openclaw-cortex-memory-src
92
+ cd ~/openclaw-cortex-memory-src
93
+ npm install && npm run build && npm pack
94
+ cd ~/openclaw
95
+ openclaw plugins install ~/openclaw-cortex-memory-src/openclaw-cortex-memory-0.1.0-Alpha.11.tgz
96
+ openclaw gateway restart
97
+ ```
63
98
 
64
99
  ### 本地开发模式(无安装记录)
65
100
 
@@ -77,15 +112,26 @@ npm install
77
112
  ```json
78
113
  {
79
114
  "plugins": {
115
+ "allow": ["openclaw-cortex-memory"],
80
116
  "slots": { "memory": "openclaw-cortex-memory" },
81
117
  "entries": {
82
118
  "openclaw-cortex-memory": {
83
119
  "enabled": true,
84
120
  "config": {
85
121
  "engineMode": "ts",
86
- "dbPath": "<optional-memory-dir>",
87
122
  "autoSync": true,
88
- "autoReflect": true,
123
+ "autoReflect": false,
124
+ "autoReflectIntervalMinutes": 30,
125
+ "readFusion": {
126
+ "enabled": true,
127
+ "authoritative": true
128
+ },
129
+ "memoryDecay": {
130
+ "enabled": true,
131
+ "antiDecay": {
132
+ "enabled": true
133
+ }
134
+ },
89
135
  "embedding": {
90
136
  "provider": "api",
91
137
  "model": "text-embedding-3-large",
@@ -112,6 +158,14 @@ npm install
112
158
  }
113
159
  ```
114
160
 
161
+ 关键功能开关(建议显式配置):
162
+
163
+ - `readFusion.enabled`:开启多路召回后的 LLM 融合
164
+ - `readFusion.authoritative`:仅返回融合后的权威记忆包
165
+ - `memoryDecay.enabled`:开启按事件类型的半衰期衰减
166
+ - `memoryDecay.antiDecay.enabled`:开启命中频次反衰减
167
+ - `autoReflect`:建议验证稳定后再开启(默认 false)
168
+
115
169
  ### 启动
116
170
 
117
171
  ```bash
@@ -121,7 +175,7 @@ openclaw gateway restart
121
175
 
122
176
  ### 主Agent注入说明
123
177
 
124
- 首次接入后,建议把下面这段发给主 Agent,确保它会主动使用记忆工具:
178
+ 首次接入后,建议把下面这段发给主 Agent,确保其按统一记忆工作流调用工具:
125
179
 
126
180
  ```text
127
181
  你已接入 Cortex Memory。请遵循以下规则:
@@ -132,9 +186,10 @@ openclaw gateway restart
132
186
  5) 需要实体关联关系时调用 query_graph。
133
187
  6) 当任务经历“失败→调整→最终成功”时,优先用 store_event 记录失败原因与成功方案,再调用 reflect_memory 沉淀可复用规则。
134
188
  7) 需要导入历史会话时调用 sync_memory。
135
- 8) 出现配置校验失败、记忆读写异常、检索结果异常或数据目录问题时,优先调用 diagnostics
136
- 9) 同一任务内不要反复调用 store_event 或 reflect_memory;仅在关键节点或任务收尾时触发一次。
137
- 10) 不要臆造历史事实;无法确认时必须先检索。
189
+ 8) diagnostics 显示 active/archive 存在未向量化记录,或迁移后需要重建向量层时,调用 backfill_embeddings(按需选择 incremental/vector_only/full)。
190
+ 9) 出现配置校验失败、记忆读写异常、检索结果异常或数据目录问题时,优先调用 diagnostics。
191
+ 10) 同一任务内不要反复调用 store_event 或 reflect_memory;仅在关键节点或任务收尾时触发一次。
192
+ 11) 不要臆造历史事实;无法确认时必须先检索。
138
193
  ```
139
194
 
140
195
  ## 可用工具
@@ -163,12 +218,16 @@ openclaw gateway restart
163
218
 
164
219
  ### query_graph
165
220
 
166
- 查询归档事件中的实体共现关系。
221
+ 查询归档事件中的实体关系(relations 优先,共现关系回退)。
167
222
 
168
223
  **参数:**
169
224
  | 参数 | 类型 | 必需 | 说明 |
170
225
  |------|------|------|------|
171
226
  | entity | string | 是 | 实体名称 |
227
+ | rel | string | 否 | 关系类型过滤(如 `depends_on`) |
228
+ | dir | string | 否 | 方向过滤:`incoming` / `outgoing` / `both` |
229
+ | path_to | string | 否 | 查询从 `entity` 到目标实体的路径 |
230
+ | max_depth | number | 否 | 路径最大深度(2~4) |
172
231
 
173
232
  ### get_hot_context
174
233
 
@@ -194,7 +253,20 @@ openclaw gateway restart
194
253
 
195
254
  ### sync_memory
196
255
 
197
- 增量同步会话记录到本地记忆(无参数)。
256
+ 增量同步会话记录,且必须经 LLM 提取判定后才写入事件/图谱记忆(无参数)。
257
+
258
+ ### backfill_embeddings
259
+
260
+ 按层回填或重建向量,支持全文分块向量重建。
261
+
262
+ **参数:**
263
+ | 参数 | 类型 | 必需 | 说明 |
264
+ |------|------|------|------|
265
+ | layer | string | 否 | `active` / `archive` / `all` |
266
+ | batch_size | number | 否 | 每批处理数量 |
267
+ | max_retries | number | 否 | 失败重试上限 |
268
+ | retry_failed_only | boolean | 否 | 仅处理失败记录 |
269
+ | rebuild_mode | string | 否 | `incremental` / `vector_only` / `full` |
198
270
 
199
271
  ### delete_memory
200
272
 
@@ -207,7 +279,7 @@ openclaw gateway restart
207
279
 
208
280
  ### diagnostics
209
281
 
210
- 运行本地系统诊断,检查数据目录与基础状态。
282
+ 运行本地系统诊断,检查数据目录、分层状态与 embedding/LLM/reranker 连通性。
211
283
 
212
284
  ## 配置选项
213
285
 
@@ -215,7 +287,6 @@ openclaw gateway restart
215
287
  |------|------|--------|------|
216
288
  | embedding.provider | 是 | - | `api`(推荐) |
217
289
  | embedding.model | 是 | - | Embedding 模型名称 |
218
- | embedding.dimensions | 否 | 3072 | 向量维度 |
219
290
  | embedding.apiKey | 是 | ${EMBEDDING_API_KEY} | Embedding API Key |
220
291
  | embedding.baseURL | 是 | - | Embedding API 端点 |
221
292
  | llm.provider | 是 | - | `api`(推荐) |
@@ -230,6 +301,11 @@ openclaw gateway restart
230
301
  | engineMode | 否 | `ts` | 固定为 TS 引擎 |
231
302
  | autoSync | 否 | true | 会话结束自动同步 |
232
303
  | autoReflect | 否 | false | 自动触发反思 |
304
+ | autoReflectIntervalMinutes | 否 | 30 | 自动反思扫描间隔(分钟) |
305
+ | readFusion.enabled | 否 | true | 启用检索重排后的 LLM 融合 |
306
+ | readFusion.authoritative | 否 | true | 仅返回融合权威记忆包 |
307
+ | memoryDecay.enabled | 否 | true | 启用按事件类型半衰期衰减 |
308
+ | memoryDecay.antiDecay.enabled | 否 | true | 启用命中频次反衰减 |
233
309
 
234
310
  ## 数据文件
235
311
 
@@ -239,9 +315,14 @@ openclaw gateway restart
239
315
  | `<dbPath>/CORTEX_RULES.md` | 规则文件 |
240
316
  | `<dbPath>/sessions/active/sessions.jsonl` | 活跃会话记忆 |
241
317
  | `<dbPath>/sessions/archive/sessions.jsonl` | 归档事件 |
318
+ | `<dbPath>/vector/lancedb` | LanceDB 向量表(可用时) |
319
+ | `<dbPath>/vector/lancedb_events.jsonl` | 向量回退存储(LanceDB 不可用时) |
242
320
  | `<dbPath>/.sync_state.json` | 同步增量状态 |
243
321
  | `<dbPath>/.session_end_state.json` | session_end 幂等状态 |
244
322
  | `<dbPath>/.rule_store_state.json` | 规则去重状态 |
323
+ | `<dbPath>/.dedup_index.json` | 三阶段去重索引 |
324
+ | `<dbPath>/.read_hit_stats.json` | 检索命中频次统计(反衰减) |
325
+ | `<dbPath>/graph/mutation_log.jsonl` | 图谱变更审计日志 |
245
326
 
246
327
  ## 错误处理
247
328
 
@@ -260,4 +341,4 @@ openclaw gateway restart
260
341
  ## 依赖
261
342
 
262
343
  - Node.js >= 22
263
- - OPENAI_API_KEY(或兼容 API 配置)
344
+ - EMBEDDING_API_KEY、LLM_API_KEY、RERANKER_API_KEY(或兼容 API 配置)
package/dist/index.d.ts CHANGED
@@ -6,6 +6,8 @@ interface EmbeddingConfig {
6
6
  baseURL?: string;
7
7
  baseUrl?: string;
8
8
  dimensions?: number;
9
+ timeoutMs?: number;
10
+ maxRetries?: number;
9
11
  }
10
12
  interface LLMConfig {
11
13
  provider: string;
@@ -28,7 +30,50 @@ interface CortexMemoryConfig {
28
30
  reranker: RerankerConfig;
29
31
  dbPath?: string;
30
32
  autoSync?: boolean;
33
+ llmRequiredForWrite?: boolean;
31
34
  autoReflect?: boolean;
35
+ autoReflectIntervalMinutes?: number;
36
+ readFusion?: {
37
+ enabled?: boolean;
38
+ maxCandidates?: number;
39
+ authoritative?: boolean;
40
+ channelWeights?: {
41
+ rules?: number;
42
+ archive?: number;
43
+ vector?: number;
44
+ graph?: number;
45
+ };
46
+ channelTopK?: {
47
+ rules?: number;
48
+ archive?: number;
49
+ vector?: number;
50
+ graph?: number;
51
+ };
52
+ minLexicalHits?: number;
53
+ minSemanticHits?: number;
54
+ lengthNorm?: {
55
+ enabled?: boolean;
56
+ pivotChars?: number;
57
+ strength?: number;
58
+ minFactor?: number;
59
+ };
60
+ };
61
+ vectorChunking?: {
62
+ chunkSize?: number;
63
+ chunkOverlap?: number;
64
+ };
65
+ memoryDecay?: {
66
+ enabled?: boolean;
67
+ minFloor?: number;
68
+ defaultHalfLifeDays?: number;
69
+ halfLifeByEventType?: Record<string, number>;
70
+ antiDecay?: {
71
+ enabled?: boolean;
72
+ maxBoost?: number;
73
+ hitWeight?: number;
74
+ recentWindowDays?: number;
75
+ };
76
+ };
32
77
  fallbackToBuiltin?: boolean;
33
78
  apiUrl?: string;
34
79
  engineMode?: EngineMode;
@@ -60,10 +105,11 @@ interface OpenClawPluginApi {
60
105
  name: string;
61
106
  description: string;
62
107
  parameters: Record<string, unknown>;
63
- execute: (params: {
64
- args: Record<string, unknown>;
108
+ execute?: (params: {
109
+ args?: Record<string, unknown>;
65
110
  context: ToolContext;
66
111
  }) => Promise<ToolResult>;
112
+ handler?: (...params: unknown[]) => Promise<ToolResult>;
67
113
  }): void;
68
114
  unregisterTool?(name: string): void;
69
115
  registerHook(hook: {
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}