openclaw-cortex-memory 0.1.0-Alpha.8 → 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 (106) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +347 -299
  3. package/SIGNATURE.md +7 -0
  4. package/SKILL.md +96 -350
  5. package/dist/index.d.ts +93 -23
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +1234 -1318
  8. package/dist/index.js.map +1 -1
  9. package/dist/openclaw.plugin.json +377 -18
  10. package/dist/src/dedup/three_stage_deduplicator.d.ts.map +1 -1
  11. package/dist/src/dedup/three_stage_deduplicator.js +13 -3
  12. package/dist/src/dedup/three_stage_deduplicator.js.map +1 -1
  13. package/dist/src/engine/memory_engine.d.ts +6 -1
  14. package/dist/src/engine/memory_engine.d.ts.map +1 -1
  15. package/dist/src/engine/ts_engine.d.ts +208 -0
  16. package/dist/src/engine/ts_engine.d.ts.map +1 -1
  17. package/dist/src/engine/ts_engine.js +1353 -84
  18. package/dist/src/engine/ts_engine.js.map +1 -1
  19. package/dist/src/engine/types.d.ts +27 -0
  20. package/dist/src/engine/types.d.ts.map +1 -1
  21. package/dist/src/graph/ontology.d.ts +87 -15
  22. package/dist/src/graph/ontology.d.ts.map +1 -1
  23. package/dist/src/graph/ontology.js +999 -12
  24. package/dist/src/graph/ontology.js.map +1 -1
  25. package/dist/src/net/http_post.d.ts +17 -0
  26. package/dist/src/net/http_post.d.ts.map +1 -0
  27. package/dist/src/net/http_post.js +56 -0
  28. package/dist/src/net/http_post.js.map +1 -0
  29. package/dist/src/quality/llm_output_validator.d.ts +65 -0
  30. package/dist/src/quality/llm_output_validator.d.ts.map +1 -0
  31. package/dist/src/quality/llm_output_validator.js +635 -0
  32. package/dist/src/quality/llm_output_validator.js.map +1 -0
  33. package/dist/src/reflect/reflector.d.ts.map +1 -1
  34. package/dist/src/reflect/reflector.js +296 -26
  35. package/dist/src/reflect/reflector.js.map +1 -1
  36. package/dist/src/rules/rule_store.d.ts.map +1 -1
  37. package/dist/src/rules/rule_store.js +75 -16
  38. package/dist/src/rules/rule_store.js.map +1 -1
  39. package/dist/src/session/session_end.d.ts +20 -42
  40. package/dist/src/session/session_end.d.ts.map +1 -1
  41. package/dist/src/session/session_end.js +31 -214
  42. package/dist/src/session/session_end.js.map +1 -1
  43. package/dist/src/store/archive_store.d.ts +52 -7
  44. package/dist/src/store/archive_store.d.ts.map +1 -1
  45. package/dist/src/store/archive_store.js +526 -96
  46. package/dist/src/store/archive_store.js.map +1 -1
  47. package/dist/src/store/embedding_utils.d.ts +32 -0
  48. package/dist/src/store/embedding_utils.d.ts.map +1 -0
  49. package/dist/src/store/embedding_utils.js +173 -0
  50. package/dist/src/store/embedding_utils.js.map +1 -0
  51. package/dist/src/store/graph_memory_store.d.ts +115 -0
  52. package/dist/src/store/graph_memory_store.d.ts.map +1 -0
  53. package/dist/src/store/graph_memory_store.js +1061 -0
  54. package/dist/src/store/graph_memory_store.js.map +1 -0
  55. package/dist/src/store/read_store.d.ts +95 -0
  56. package/dist/src/store/read_store.d.ts.map +1 -1
  57. package/dist/src/store/read_store.js +2108 -268
  58. package/dist/src/store/read_store.js.map +1 -1
  59. package/dist/src/store/vector_store.d.ts +15 -0
  60. package/dist/src/store/vector_store.d.ts.map +1 -1
  61. package/dist/src/store/vector_store.js +75 -1
  62. package/dist/src/store/vector_store.js.map +1 -1
  63. package/dist/src/store/write_store.d.ts +46 -0
  64. package/dist/src/store/write_store.d.ts.map +1 -1
  65. package/dist/src/store/write_store.js +399 -50
  66. package/dist/src/store/write_store.js.map +1 -1
  67. package/dist/src/sync/session_sync.d.ts +115 -2
  68. package/dist/src/sync/session_sync.d.ts.map +1 -1
  69. package/dist/src/sync/session_sync.js +2497 -44
  70. package/dist/src/sync/session_sync.js.map +1 -1
  71. package/dist/src/utils/runtime_env.d.ts +4 -0
  72. package/dist/src/utils/runtime_env.d.ts.map +1 -0
  73. package/dist/src/utils/runtime_env.js +51 -0
  74. package/dist/src/utils/runtime_env.js.map +1 -0
  75. package/dist/src/wiki/wiki_linter.d.ts +26 -0
  76. package/dist/src/wiki/wiki_linter.d.ts.map +1 -0
  77. package/dist/src/wiki/wiki_linter.js +339 -0
  78. package/dist/src/wiki/wiki_linter.js.map +1 -0
  79. package/dist/src/wiki/wiki_logger.d.ts +10 -0
  80. package/dist/src/wiki/wiki_logger.d.ts.map +1 -0
  81. package/dist/src/wiki/wiki_logger.js +78 -0
  82. package/dist/src/wiki/wiki_logger.js.map +1 -0
  83. package/dist/src/wiki/wiki_maintainer.d.ts +39 -0
  84. package/dist/src/wiki/wiki_maintainer.d.ts.map +1 -0
  85. package/dist/src/wiki/wiki_maintainer.js +38 -0
  86. package/dist/src/wiki/wiki_maintainer.js.map +1 -0
  87. package/dist/src/wiki/wiki_projector.d.ts +35 -0
  88. package/dist/src/wiki/wiki_projector.d.ts.map +1 -0
  89. package/dist/src/wiki/wiki_projector.js +1151 -0
  90. package/dist/src/wiki/wiki_projector.js.map +1 -0
  91. package/dist/src/wiki/wiki_queue.d.ts +29 -0
  92. package/dist/src/wiki/wiki_queue.d.ts.map +1 -0
  93. package/dist/src/wiki/wiki_queue.js +137 -0
  94. package/dist/src/wiki/wiki_queue.js.map +1 -0
  95. package/openclaw.plugin.json +377 -18
  96. package/package.json +52 -5
  97. package/schema/graph.schema.yaml +330 -0
  98. package/scripts/cli.js +80 -26
  99. package/scripts/repair-memory.js +321 -0
  100. package/scripts/uninstall.js +7 -1
  101. package/skills/cortex-memory/SKILL.md +83 -0
  102. package/skills/cortex-memory/references/agent-manual.md +127 -0
  103. package/skills/cortex-memory/references/configuration.md +109 -0
  104. package/skills/cortex-memory/references/publish-checklist.md +45 -0
  105. package/skills/cortex-memory/references/system-prompt-template.md +27 -0
  106. 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,350 +1,96 @@
1
- ---
2
- name: cortex-memory
3
- description: 长期记忆系统(纯 TypeScript)。Use when user asks about past conversations, preferences, project history, or needs to remember information across sessions.
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
- OpenClaw Agent 提供持久化记忆能力,当前为纯 TypeScript 单栈实现。
21
-
22
- ## 使用场景
23
-
24
- **USE when:**
25
- - 用户询问过去的对话内容或决策
26
- - 需要记住用户偏好、项目信息
27
- - 跨会话保持上下文
28
- - 查询实体关系(人物、项目、技术)
29
- - 存储重要事件或里程碑
30
-
31
- **DON'T use when:**
32
- - 仅需当前会话的临时信息
33
- - 查询实时数据(天气、新闻等)
34
-
35
- ## 快速开始
36
-
37
- ### 安装
38
-
39
- 快速安装(推荐,显式来源):
40
-
41
- ```bash
42
- cd ~/openclaw
43
- pnpm openclaw plugins install clawhub:openclaw-cortex-memory
44
- pnpm openclaw plugins enable openclaw-cortex-memory
45
- pnpm openclaw gateway restart
46
- ```
47
-
48
- npm 安装方式:
49
-
50
- ```bash
51
- cd ~/openclaw
52
- pnpm openclaw plugins install openclaw-cortex-memory@alpha
53
- pnpm openclaw plugins enable openclaw-cortex-memory
54
- pnpm openclaw gateway restart
55
- ```
56
-
57
- 第三种安装方式(当 ClawHub/npm 解析受网络影响时):
58
-
59
- ```bash
60
- curl -L -o /tmp/cortex.tgz https://registry.npmjs.org/openclaw-cortex-memory/-/openclaw-cortex-memory-0.1.0-Alpha.8.tgz
61
- cd ~/openclaw
62
- pnpm openclaw plugins install /tmp/cortex.tgz
63
- pnpm openclaw plugins enable openclaw-cortex-memory
64
- pnpm openclaw gateway restart
65
- rm -f /tmp/cortex.tgz
66
- ```
67
-
68
- ### 后续更新
69
-
70
- ```bash
71
- cd ~/openclaw
72
- pnpm openclaw plugins uninstall openclaw-cortex-memory
73
- pnpm openclaw plugins install clawhub:openclaw-cortex-memory
74
- pnpm openclaw plugins enable openclaw-cortex-memory
75
- pnpm openclaw gateway restart
76
- ```
77
-
78
- 说明:
79
- - 推荐显式安装来源,减少 ClawHub-first 时代的来源歧义。
80
- - 使用 `plugins install` 的安装记录方式,避免 `loaded without install/load-path provenance`。
81
- - 保持 `plugins.allow` 显式包含 `openclaw-cortex-memory`,避免运行时把插件判定为未绑定信任源。
82
- - 若 `plugins install openclaw-cortex-memory` 在 ClawHub 解析阶段失败,可使用上述 tgz 方式直接安装。
83
-
84
- ### 本地打包安装(源码模式)
85
-
86
- ```bash
87
- git clone https://github.com/deki18/openclaw-cortex-memory.git ~/openclaw-cortex-memory-src
88
- cd ~/openclaw-cortex-memory-src
89
- npm install && npm run build && npm pack
90
- cd ~/openclaw
91
- pnpm openclaw plugins install ~/openclaw-cortex-memory-src/openclaw-cortex-memory-0.1.0-Alpha.8.tgz
92
- pnpm openclaw gateway restart
93
- ```
94
-
95
- ### 本地开发模式(无安装记录)
96
-
97
- ```bash
98
- cd ~/.openclaw/extensions
99
- git clone https://github.com/deki18/openclaw-cortex-memory.git
100
- cd openclaw-cortex-memory
101
- npm install
102
- ```
103
-
104
- ### 配置
105
-
106
- 在 `openclaw.json` 中配置插件:
107
-
108
- ```json
109
- {
110
- "plugins": {
111
- "allow": ["openclaw-cortex-memory"],
112
- "slots": { "memory": "openclaw-cortex-memory" },
113
- "entries": {
114
- "openclaw-cortex-memory": {
115
- "enabled": true,
116
- "config": {
117
- "engineMode": "ts",
118
- "dbPath": "<optional-memory-dir>",
119
- "autoSync": true,
120
- "autoReflect": false,
121
- "autoReflectIntervalMinutes": 30,
122
- "readFusion": {
123
- "enabled": true,
124
- "maxCandidates": 10,
125
- "authoritative": true
126
- },
127
- "memoryDecay": {
128
- "enabled": true,
129
- "minFloor": 0.15,
130
- "defaultHalfLifeDays": 90,
131
- "halfLifeByEventType": {
132
- "issue": 30,
133
- "fix": 30,
134
- "action_item": 30,
135
- "decision": 120,
136
- "preference": 240,
137
- "constraint": 240,
138
- "requirement": 240
139
- },
140
- "antiDecay": {
141
- "enabled": true,
142
- "maxBoost": 1.6,
143
- "hitWeight": 0.08,
144
- "recentWindowDays": 30
145
- }
146
- },
147
- "embedding": {
148
- "provider": "api",
149
- "model": "text-embedding-3-large",
150
- "apiKey": "${EMBEDDING_API_KEY}",
151
- "baseURL": "https://your-embedding-endpoint/v1",
152
- "dimensions": 3072
153
- },
154
- "llm": {
155
- "provider": "api",
156
- "model": "gpt-4",
157
- "apiKey": "${LLM_API_KEY}",
158
- "baseURL": "https://your-llm-endpoint/v1"
159
- },
160
- "reranker": {
161
- "provider": "api",
162
- "model": "BAAI/bge-reranker-v2-m3",
163
- "apiKey": "${RERANKER_API_KEY}",
164
- "baseURL": "https://your-reranker-endpoint/v1/rerank"
165
- }
166
- }
167
- }
168
- }
169
- }
170
- }
171
- ```
172
-
173
- 关键功能开关(建议显式配置):
174
-
175
- - `readFusion.enabled`:开启多路召回后的 LLM 融合
176
- - `readFusion.authoritative`:仅返回融合后的权威记忆包
177
- - `memoryDecay.enabled`:开启按事件类型的半衰期衰减
178
- - `memoryDecay.antiDecay.enabled`:开启命中频次反衰减
179
- - `autoReflect`:建议验证稳定后再开启(默认 false)
180
-
181
- ### 启动
182
-
183
- ```bash
184
- openclaw config validate
185
- openclaw gateway restart
186
- ```
187
-
188
- ### 主Agent注入说明
189
-
190
- 首次接入后,建议把下面这段发给主 Agent,确保它会主动使用记忆工具:
191
-
192
- ```text
193
- 你已接入 Cortex Memory。请遵循以下规则:
194
- 1) 当用户询问历史对话、偏好、项目上下文时,先调用 search_memory 再回答。
195
- 2) 需要当前会话热上下文时调用 get_hot_context。
196
- 3) 需要自动召回相关记忆时调用 get_auto_context。
197
- 4) 在一件重要事情结束并形成明确结果后,再调用 store_event 记录(不要在过程进行中频繁记录)。
198
- 5) 需要实体关联关系时调用 query_graph。
199
- 6) 当任务经历“失败→调整→最终成功”时,优先用 store_event 记录失败原因与成功方案,再调用 reflect_memory 沉淀可复用规则。
200
- 7) 需要导入历史会话时调用 sync_memory。
201
- 8) 出现配置校验失败、记忆读写异常、检索结果异常或数据目录问题时,优先调用 diagnostics。
202
- 9) 同一任务内不要反复调用 store_event 或 reflect_memory;仅在关键节点或任务收尾时触发一次。
203
- 10) 不要臆造历史事实;无法确认时必须先检索。
204
- ```
205
-
206
- ## 可用工具
207
-
208
- ### search_memory
209
-
210
- 语义搜索长期记忆。
211
-
212
- **参数:**
213
- | 参数 | 类型 | 必需 | 说明 |
214
- |------|------|------|------|
215
- | query | string | 是 | 搜索查询 |
216
- | top_k | number | 否 | 返回数量,默认 3 |
217
-
218
- ### store_event
219
-
220
- 写入事件摘要到归档记忆。
221
-
222
- **参数:**
223
- | 参数 | 类型 | 必需 | 说明 |
224
- |------|------|------|------|
225
- | summary | string | 是 | 事件摘要 |
226
- | entities | array | 否 | 相关实体列表 |
227
- | outcome | string | 否 | 事件结果 |
228
- | relations | array | 否 | 实体关系 |
229
-
230
- ### query_graph
231
-
232
- 查询归档事件中的实体关系(relations 优先,共现关系回退)。
233
-
234
- **参数:**
235
- | 参数 | 类型 | 必需 | 说明 |
236
- |------|------|------|------|
237
- | entity | string | 是 | 实体名称 |
238
- | rel | string | 否 | 关系类型过滤(如 `depends_on`) |
239
- | dir | string | 否 | 方向过滤:`incoming` / `outgoing` / `both` |
240
- | path_to | string | 否 | 查询从 `entity` 到目标实体的路径 |
241
- | max_depth | number | 否 | 路径最大深度(2~4) |
242
-
243
- ### get_hot_context
244
-
245
- 获取当前热上下文(CORTEX_RULES.md + 近期会话)。
246
-
247
- **参数:**
248
- | 参数 | 类型 | 必需 | 说明 |
249
- |------|------|------|------|
250
- | limit | number | 否 | 最大条目数,默认 20 |
251
-
252
- ### get_auto_context
253
-
254
- 自动检索相关记忆(基于近期消息)。
255
-
256
- **参数:**
257
- | 参数 | 类型 | 必需 | 说明 |
258
- |------|------|------|------|
259
- | include_hot | boolean | 否 | 包含热上下文,默认 true |
260
-
261
- ### reflect_memory
262
-
263
- 将归档事件反思为规则并写入 `CORTEX_RULES.md`。
264
-
265
- ### sync_memory
266
-
267
- 增量同步会话记录到本地记忆(无参数)。
268
-
269
- ### delete_memory
270
-
271
- 删除指定记忆。
272
-
273
- **参数:**
274
- | 参数 | 类型 | 必需 | 说明 |
275
- |------|------|------|------|
276
- | memory_id | string | 是 | 记忆 ID |
277
-
278
- ### diagnostics
279
-
280
- 运行本地系统诊断,检查数据目录与基础状态。
281
-
282
- ## 配置选项
283
-
284
- | 选项 | 必需 | 默认值 | 说明 |
285
- |------|------|--------|------|
286
- | embedding.provider | 是 | - | `api`(推荐) |
287
- | embedding.model | 是 | - | Embedding 模型名称 |
288
- | embedding.dimensions | 否 | 3072 | 向量维度 |
289
- | embedding.apiKey | 是 | ${EMBEDDING_API_KEY} | Embedding API Key |
290
- | embedding.baseURL | 是 | - | Embedding API 端点 |
291
- | llm.provider | 是 | - | `api`(推荐) |
292
- | llm.model | 是 | - | LLM 模型名称 |
293
- | llm.apiKey | 是 | ${LLM_API_KEY} | LLM API Key |
294
- | llm.baseURL | 是 | - | LLM API 端点 |
295
- | reranker.provider | 否 | - | `api`(推荐) |
296
- | reranker.model | 是 | - | Reranker 模型 |
297
- | reranker.apiKey | 是 | ${RERANKER_API_KEY} | Reranker API Key |
298
- | reranker.baseURL | 是 | - | Reranker API 端点 |
299
- | dbPath | 否 | `<plugin-dir>/data/memory` | 记忆目录路径 |
300
- | engineMode | 否 | `ts` | 固定为 TS 引擎 |
301
- | autoSync | 否 | true | 会话结束自动同步 |
302
- | autoReflect | 否 | false | 自动触发反思 |
303
- | autoReflectIntervalMinutes | 否 | 30 | 自动反思扫描间隔(分钟) |
304
- | readFusion.enabled | 否 | true | 启用检索重排后的 LLM 融合 |
305
- | readFusion.maxCandidates | 否 | 10 | 融合候选上限 |
306
- | readFusion.authoritative | 否 | true | 仅返回融合权威记忆包 |
307
- | memoryDecay.enabled | 否 | true | 启用按事件类型半衰期衰减 |
308
- | memoryDecay.minFloor | 否 | 0.15 | 衰减系数下限 |
309
- | memoryDecay.defaultHalfLifeDays | 否 | 90 | 未配置类型默认半衰期(天) |
310
- | memoryDecay.halfLifeByEventType | 否 | - | 各事件类型半衰期覆盖配置 |
311
- | memoryDecay.antiDecay.enabled | 否 | true | 启用命中频次反衰减 |
312
- | memoryDecay.antiDecay.maxBoost | 否 | 1.6 | 反衰减最大增益 |
313
- | memoryDecay.antiDecay.hitWeight | 否 | 0.08 | 命中次数增益系数 |
314
- | memoryDecay.antiDecay.recentWindowDays | 否 | 30 | 命中新鲜度窗口(天) |
315
-
316
- ## 数据文件
317
-
318
- | 路径 | 说明 |
319
- |------|------|
320
- | `<dbPath>/MEMORY.md` | 记忆说明文件 |
321
- | `<dbPath>/CORTEX_RULES.md` | 规则文件 |
322
- | `<dbPath>/sessions/active/sessions.jsonl` | 活跃会话记忆 |
323
- | `<dbPath>/sessions/archive/sessions.jsonl` | 归档事件 |
324
- | `<dbPath>/vector/lancedb` | LanceDB 向量表(可用时) |
325
- | `<dbPath>/vector/lancedb_events.jsonl` | 向量回退存储(LanceDB 不可用时) |
326
- | `<dbPath>/.sync_state.json` | 同步增量状态 |
327
- | `<dbPath>/.session_end_state.json` | session_end 幂等状态 |
328
- | `<dbPath>/.rule_store_state.json` | 规则去重状态 |
329
- | `<dbPath>/.dedup_index.json` | 三阶段去重索引 |
330
- | `<dbPath>/.read_hit_stats.json` | 检索命中频次统计(反衰减) |
331
- | `<dbPath>/graph/mutation_log.jsonl` | 图谱变更审计日志 |
332
-
333
- ## 错误处理
334
-
335
- | 错误代码 | 说明 | 处理方式 |
336
- |----------|------|----------|
337
- | E203 | 重复记忆 | 相似度 > 0.95,已跳过 |
338
- | E204 | 质量评分过低 | 信息密度不足,未存储 |
339
-
340
- ## 相关文件
341
-
342
- - `index.ts` - 插件入口与工具注册
343
- - `src/engine/ts_engine.ts` - TS 引擎实现
344
- - `src/store/read_store.ts` - 读取能力
345
- - `src/store/write_store.ts` - 写入能力
346
-
347
- ## 依赖
348
-
349
- - Node.js >= 22
350
- - 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,17 +24,62 @@ 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;
38
45
  authoritative?: boolean;
46
+ channelWeights?: {
47
+ rules?: number;
48
+ archive?: number;
49
+ vector?: number;
50
+ graph?: number;
51
+ };
52
+ channelTopK?: {
53
+ rules?: number;
54
+ archive?: number;
55
+ vector?: number;
56
+ graph?: number;
57
+ };
58
+ minLexicalHits?: number;
59
+ minSemanticHits?: number;
60
+ lengthNorm?: {
61
+ enabled?: boolean;
62
+ pivotChars?: number;
63
+ strength?: number;
64
+ minFactor?: number;
65
+ };
66
+ };
67
+ vectorChunking?: {
68
+ chunkSize?: number;
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";
39
83
  };
40
84
  memoryDecay?: {
41
85
  enabled?: boolean;
@@ -49,26 +93,38 @@ interface CortexMemoryConfig {
49
93
  recentWindowDays?: number;
50
94
  };
51
95
  };
52
- fallbackToBuiltin?: boolean;
53
- apiUrl?: string;
54
- engineMode?: EngineMode;
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
+ };
55
122
  }
56
123
  interface ToolContext {
57
124
  agentId: string;
58
125
  sessionId?: string;
59
126
  workspaceId: string;
60
127
  }
61
- interface ToolResult {
62
- success: boolean;
63
- data?: unknown;
64
- error?: string;
65
- errorCode?: string;
66
- }
67
- interface BuiltinMemory {
68
- search: (query: string, limit?: number) => Promise<unknown[]>;
69
- store: (content: string, metadata?: Record<string, unknown>) => Promise<string>;
70
- delete: (id: string) => Promise<boolean>;
71
- }
72
128
  interface Logger {
73
129
  debug: (message: string, ...args: unknown[]) => void;
74
130
  info: (message: string, ...args: unknown[]) => void;
@@ -76,15 +132,17 @@ interface Logger {
76
132
  error: (message: string, ...args: unknown[]) => void;
77
133
  }
78
134
  interface OpenClawPluginApi {
135
+ logger?: Logger;
136
+ config?: Record<string, unknown>;
137
+ pluginConfig?: Record<string, unknown>;
79
138
  registerTool(tool: {
80
139
  name: string;
81
140
  description: string;
82
141
  parameters: Record<string, unknown>;
83
- execute?: (params: {
84
- args?: Record<string, unknown>;
85
- context: ToolContext;
86
- }) => Promise<ToolResult>;
87
- handler?: (...params: unknown[]) => Promise<ToolResult>;
142
+ execute?: (...params: unknown[]) => Promise<unknown>;
143
+ handler?: (...params: unknown[]) => Promise<unknown>;
144
+ }, options?: {
145
+ optional?: boolean;
88
146
  }): void;
89
147
  unregisterTool?(name: string): void;
90
148
  registerHook(hook: {
@@ -97,15 +155,27 @@ interface OpenClawPluginApi {
97
155
  off?(event: string, handler: (payload: unknown, context: ToolContext) => Promise<void> | void): void;
98
156
  unregisterHook?(event: string): void;
99
157
  getLogger?(): Logger;
100
- getBuiltinMemory?(): BuiltinMemory;
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;
101
163
  }
102
164
  export declare function enable(): Promise<void>;
103
165
  export declare function disable(): Promise<void>;
104
166
  export declare function getStatus(): {
105
167
  enabled: boolean;
106
- serviceRunning: boolean;
107
168
  };
108
169
  export declare function unregister(): Promise<void>;
109
170
  export declare function register(pluginApi: OpenClawPluginApi, userConfig?: Partial<CortexMemoryConfig>): void;
110
- export {};
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;
111
181
  //# sourceMappingURL=index.d.ts.map
@@ -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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"}