openclaw-cortex-memory 0.1.0-Alpha.3 → 0.1.0-Alpha.31

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 (110) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +296 -203
  3. package/SIGNATURE.md +7 -0
  4. package/SKILL.md +92 -268
  5. package/dist/index.d.ts +100 -22
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +1249 -1252
  8. package/dist/index.js.map +1 -1
  9. package/dist/openclaw.plugin.json +501 -16
  10. package/dist/src/dedup/three_stage_deduplicator.d.ts +25 -0
  11. package/dist/src/dedup/three_stage_deduplicator.d.ts.map +1 -0
  12. package/dist/src/dedup/three_stage_deduplicator.js +224 -0
  13. package/dist/src/dedup/three_stage_deduplicator.js.map +1 -0
  14. package/dist/src/engine/memory_engine.d.ts +6 -1
  15. package/dist/src/engine/memory_engine.d.ts.map +1 -1
  16. package/dist/src/engine/ts_engine.d.ts +242 -0
  17. package/dist/src/engine/ts_engine.d.ts.map +1 -1
  18. package/dist/src/engine/ts_engine.js +1468 -52
  19. package/dist/src/engine/ts_engine.js.map +1 -1
  20. package/dist/src/engine/types.d.ts +29 -0
  21. package/dist/src/engine/types.d.ts.map +1 -1
  22. package/dist/src/graph/ontology.d.ts +125 -0
  23. package/dist/src/graph/ontology.d.ts.map +1 -0
  24. package/dist/src/graph/ontology.js +1237 -0
  25. package/dist/src/graph/ontology.js.map +1 -0
  26. package/dist/src/net/http_post.d.ts +17 -0
  27. package/dist/src/net/http_post.d.ts.map +1 -0
  28. package/dist/src/net/http_post.js +56 -0
  29. package/dist/src/net/http_post.js.map +1 -0
  30. package/dist/src/quality/llm_output_validator.d.ts +66 -0
  31. package/dist/src/quality/llm_output_validator.d.ts.map +1 -0
  32. package/dist/src/quality/llm_output_validator.js +659 -0
  33. package/dist/src/quality/llm_output_validator.js.map +1 -0
  34. package/dist/src/reflect/reflector.d.ts +7 -0
  35. package/dist/src/reflect/reflector.d.ts.map +1 -1
  36. package/dist/src/reflect/reflector.js +352 -8
  37. package/dist/src/reflect/reflector.js.map +1 -1
  38. package/dist/src/rules/rule_store.d.ts.map +1 -1
  39. package/dist/src/rules/rule_store.js +75 -16
  40. package/dist/src/rules/rule_store.js.map +1 -1
  41. package/dist/src/session/session_end.d.ts +33 -0
  42. package/dist/src/session/session_end.d.ts.map +1 -1
  43. package/dist/src/session/session_end.js +67 -64
  44. package/dist/src/session/session_end.js.map +1 -1
  45. package/dist/src/store/archive_store.d.ts +136 -0
  46. package/dist/src/store/archive_store.d.ts.map +1 -0
  47. package/dist/src/store/archive_store.js +635 -0
  48. package/dist/src/store/archive_store.js.map +1 -0
  49. package/dist/src/store/embedding_utils.d.ts +32 -0
  50. package/dist/src/store/embedding_utils.d.ts.map +1 -0
  51. package/dist/src/store/embedding_utils.js +173 -0
  52. package/dist/src/store/embedding_utils.js.map +1 -0
  53. package/dist/src/store/graph_memory_store.d.ts +114 -0
  54. package/dist/src/store/graph_memory_store.d.ts.map +1 -0
  55. package/dist/src/store/graph_memory_store.js +841 -0
  56. package/dist/src/store/graph_memory_store.js.map +1 -0
  57. package/dist/src/store/read_store.d.ts +89 -0
  58. package/dist/src/store/read_store.d.ts.map +1 -1
  59. package/dist/src/store/read_store.js +2459 -28
  60. package/dist/src/store/read_store.js.map +1 -1
  61. package/dist/src/store/vector_store.d.ts +45 -0
  62. package/dist/src/store/vector_store.d.ts.map +1 -0
  63. package/dist/src/store/vector_store.js +202 -0
  64. package/dist/src/store/vector_store.js.map +1 -0
  65. package/dist/src/store/write_store.d.ts +54 -0
  66. package/dist/src/store/write_store.d.ts.map +1 -1
  67. package/dist/src/store/write_store.js +284 -6
  68. package/dist/src/store/write_store.js.map +1 -1
  69. package/dist/src/sync/session_sync.d.ts +119 -2
  70. package/dist/src/sync/session_sync.d.ts.map +1 -1
  71. package/dist/src/sync/session_sync.js +2377 -31
  72. package/dist/src/sync/session_sync.js.map +1 -1
  73. package/dist/src/utils/runtime_env.d.ts +4 -0
  74. package/dist/src/utils/runtime_env.d.ts.map +1 -0
  75. package/dist/src/utils/runtime_env.js +51 -0
  76. package/dist/src/utils/runtime_env.js.map +1 -0
  77. package/dist/src/wiki/wiki_linter.d.ts +25 -0
  78. package/dist/src/wiki/wiki_linter.d.ts.map +1 -0
  79. package/dist/src/wiki/wiki_linter.js +268 -0
  80. package/dist/src/wiki/wiki_linter.js.map +1 -0
  81. package/dist/src/wiki/wiki_logger.d.ts +10 -0
  82. package/dist/src/wiki/wiki_logger.d.ts.map +1 -0
  83. package/dist/src/wiki/wiki_logger.js +78 -0
  84. package/dist/src/wiki/wiki_logger.js.map +1 -0
  85. package/dist/src/wiki/wiki_maintainer.d.ts +36 -0
  86. package/dist/src/wiki/wiki_maintainer.d.ts.map +1 -0
  87. package/dist/src/wiki/wiki_maintainer.js +38 -0
  88. package/dist/src/wiki/wiki_maintainer.js.map +1 -0
  89. package/dist/src/wiki/wiki_projector.d.ts +33 -0
  90. package/dist/src/wiki/wiki_projector.d.ts.map +1 -0
  91. package/dist/src/wiki/wiki_projector.js +633 -0
  92. package/dist/src/wiki/wiki_projector.js.map +1 -0
  93. package/dist/src/wiki/wiki_queue.d.ts +29 -0
  94. package/dist/src/wiki/wiki_queue.d.ts.map +1 -0
  95. package/dist/src/wiki/wiki_queue.js +137 -0
  96. package/dist/src/wiki/wiki_queue.js.map +1 -0
  97. package/openclaw.plugin.json +501 -16
  98. package/package.json +58 -7
  99. package/schema/graph.schema.yaml +330 -0
  100. package/scripts/cli.js +19 -14
  101. package/scripts/repair-memory.js +321 -0
  102. package/scripts/uninstall.js +22 -5
  103. package/skills/cortex-memory/SKILL.md +49 -0
  104. package/skills/cortex-memory/references/agent-manual.md +115 -0
  105. package/skills/cortex-memory/references/configuration.md +92 -0
  106. package/skills/cortex-memory/references/publish-checklist.md +46 -0
  107. package/skills/cortex-memory/references/system-prompt-template.md +27 -0
  108. package/skills/cortex-memory/references/tools.md +181 -0
  109. package/skills/cortex-memory/scripts/smoke-check.ps1 +56 -0
  110. package/index.ts +0 -2142
package/SKILL.md CHANGED
@@ -1,268 +1,92 @@
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": ["OPENAI_API_KEY"]
12
- },
13
- "primaryEnv": "OPENAI_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
- 快速安装(推荐,npm 发布版):
40
-
41
- ```bash
42
- cd ~/openclaw
43
- pnpm openclaw plugins install openclaw-cortex-memory@alpha
44
- pnpm openclaw plugins enable openclaw-cortex-memory
45
- pnpm openclaw gateway restart
46
- ```
47
-
48
- ### 后续更新
49
-
50
- ```bash
51
- cd ~/openclaw
52
- pnpm openclaw plugins install openclaw-cortex-memory@alpha
53
- pnpm openclaw gateway restart
54
- ```
55
-
56
- 安装前如果 `openclaw.json` 已经提前写了 `allow/slots/entries` 指向本插件,先临时移除,安装后再加回,避免安装前校验报 `plugin not found`。
57
-
58
- ### 本地打包安装(源码模式)
59
-
60
- ```bash
61
- git clone https://github.com/deki18/openclaw-cortex-memory.git ~/openclaw-cortex-memory-src
62
- cd ~/openclaw-cortex-memory-src
63
- npm install && npm run build && npm pack
64
- cd ~/openclaw
65
- pnpm openclaw plugins install ~/openclaw-cortex-memory-src/openclaw-cortex-memory-0.1.0-Alpha.1.tgz
66
- pnpm openclaw gateway restart
67
- ```
68
-
69
- ### 本地开发模式(无安装记录)
70
-
71
- ```bash
72
- cd ~/.openclaw/extensions
73
- git clone https://github.com/deki18/openclaw-cortex-memory.git
74
- cd openclaw-cortex-memory
75
- npm install
76
- ```
77
-
78
- ### 配置
79
-
80
- 在 `openclaw.json` 中配置插件:
81
-
82
- ```json
83
- {
84
- "plugins": {
85
- "slots": { "memory": "openclaw-cortex-memory" },
86
- "entries": {
87
- "openclaw-cortex-memory": {
88
- "enabled": true,
89
- "config": {
90
- "engineMode": "ts",
91
- "dbPath": "<optional-memory-dir>",
92
- "autoSync": true,
93
- "autoReflect": true,
94
- "embedding": {
95
- "provider": "api",
96
- "model": "text-embedding-3-large",
97
- "apiKey": "${EMBEDDING_API_KEY}",
98
- "baseURL": "https://your-embedding-endpoint/v1",
99
- "dimensions": 3072
100
- },
101
- "llm": {
102
- "provider": "api",
103
- "model": "gpt-4",
104
- "apiKey": "${LLM_API_KEY}",
105
- "baseURL": "https://your-llm-endpoint/v1"
106
- },
107
- "reranker": {
108
- "provider": "api",
109
- "model": "BAAI/bge-reranker-v2-m3",
110
- "apiKey": "${RERANKER_API_KEY}",
111
- "baseURL": "https://your-reranker-endpoint/v1/rerank"
112
- }
113
- }
114
- }
115
- }
116
- }
117
- }
118
- ```
119
-
120
- ### 启动
121
-
122
- ```bash
123
- openclaw config validate
124
- openclaw gateway restart
125
- ```
126
-
127
- ### 主Agent注入说明
128
-
129
- 首次接入后,建议把下面这段发给主 Agent,确保它会主动使用记忆工具:
130
-
131
- ```text
132
- 你已接入 Cortex Memory。请遵循以下规则:
133
- 1) 当用户询问历史对话、偏好、项目上下文时,先调用 search_memory 再回答。
134
- 2) 需要当前会话热上下文时调用 get_hot_context。
135
- 3) 需要自动召回相关记忆时调用 get_auto_context。
136
- 4) 在一件重要事情结束并形成明确结果后,再调用 store_event 记录(不要在过程进行中频繁记录)。
137
- 5) 需要实体关联关系时调用 query_graph。
138
- 6) 当任务经历“失败→调整→最终成功”时,优先用 store_event 记录失败原因与成功方案,再调用 reflect_memory 沉淀可复用规则。
139
- 7) 需要导入历史会话时调用 sync_memory。
140
- 8) 出现配置校验失败、记忆读写异常、检索结果异常或数据目录问题时,优先调用 diagnostics。
141
- 9) 同一任务内不要反复调用 store_event 或 reflect_memory;仅在关键节点或任务收尾时触发一次。
142
- 10) 不要臆造历史事实;无法确认时必须先检索。
143
- ```
144
-
145
- ## 可用工具
146
-
147
- ### search_memory
148
-
149
- 语义搜索长期记忆。
150
-
151
- **参数:**
152
- | 参数 | 类型 | 必需 | 说明 |
153
- |------|------|------|------|
154
- | query | string | 是 | 搜索查询 |
155
- | top_k | number | 否 | 返回数量,默认 3 |
156
-
157
- ### store_event
158
-
159
- 写入事件摘要到归档记忆。
160
-
161
- **参数:**
162
- | 参数 | 类型 | 必需 | 说明 |
163
- |------|------|------|------|
164
- | summary | string | 是 | 事件摘要 |
165
- | entities | array | 否 | 相关实体列表 |
166
- | outcome | string | 否 | 事件结果 |
167
- | relations | array | 否 | 实体关系 |
168
-
169
- ### query_graph
170
-
171
- 查询归档事件中的实体共现关系。
172
-
173
- **参数:**
174
- | 参数 | 类型 | 必需 | 说明 |
175
- |------|------|------|------|
176
- | entity | string | 是 | 实体名称 |
177
-
178
- ### get_hot_context
179
-
180
- 获取当前热上下文(CORTEX_RULES.md + 近期会话)。
181
-
182
- **参数:**
183
- | 参数 | 类型 | 必需 | 说明 |
184
- |------|------|------|------|
185
- | limit | number | 否 | 最大条目数,默认 20 |
186
-
187
- ### get_auto_context
188
-
189
- 自动检索相关记忆(基于近期消息)。
190
-
191
- **参数:**
192
- | 参数 | 类型 | 必需 | 说明 |
193
- |------|------|------|------|
194
- | include_hot | boolean | 否 | 包含热上下文,默认 true |
195
-
196
- ### reflect_memory
197
-
198
- 将归档事件反思为规则并写入 `CORTEX_RULES.md`。
199
-
200
- ### sync_memory
201
-
202
- 增量同步会话记录到本地记忆(无参数)。
203
-
204
- ### delete_memory
205
-
206
- 删除指定记忆。
207
-
208
- **参数:**
209
- | 参数 | 类型 | 必需 | 说明 |
210
- |------|------|------|------|
211
- | memory_id | string | 是 | 记忆 ID |
212
-
213
- ### diagnostics
214
-
215
- 运行本地系统诊断,检查数据目录与基础状态。
216
-
217
- ## 配置选项
218
-
219
- | 选项 | 必需 | 默认值 | 说明 |
220
- |------|------|--------|------|
221
- | embedding.provider | 是 | - | `api`(推荐) |
222
- | embedding.model | 是 | - | Embedding 模型名称 |
223
- | embedding.dimensions | 否 | 3072 | 向量维度 |
224
- | embedding.apiKey | 是 | ${EMBEDDING_API_KEY} | Embedding API Key |
225
- | embedding.baseURL | 是 | - | Embedding API 端点 |
226
- | llm.provider | 是 | - | `api`(推荐) |
227
- | llm.model | 是 | - | LLM 模型名称 |
228
- | llm.apiKey | 是 | ${LLM_API_KEY} | LLM API Key |
229
- | llm.baseURL | 是 | - | LLM API 端点 |
230
- | reranker.provider | 否 | - | `api`(推荐) |
231
- | reranker.model | 是 | - | Reranker 模型 |
232
- | reranker.apiKey | 是 | ${RERANKER_API_KEY} | Reranker API Key |
233
- | reranker.baseURL | 是 | - | Reranker API 端点 |
234
- | dbPath | 否 | `<plugin-dir>/data/memory` | 记忆目录路径 |
235
- | engineMode | 否 | `ts` | 固定为 TS 引擎 |
236
- | autoSync | 否 | true | 会话结束自动同步 |
237
- | autoReflect | 否 | false | 自动触发反思 |
238
-
239
- ## 数据文件
240
-
241
- | 路径 | 说明 |
242
- |------|------|
243
- | `<dbPath>/MEMORY.md` | 记忆说明文件 |
244
- | `<dbPath>/CORTEX_RULES.md` | 规则文件 |
245
- | `<dbPath>/sessions/active/sessions.jsonl` | 活跃会话记忆 |
246
- | `<dbPath>/sessions/archive/sessions.jsonl` | 归档事件 |
247
- | `<dbPath>/.sync_state.json` | 同步增量状态 |
248
- | `<dbPath>/.session_end_state.json` | session_end 幂等状态 |
249
- | `<dbPath>/.rule_store_state.json` | 规则去重状态 |
250
-
251
- ## 错误处理
252
-
253
- | 错误代码 | 说明 | 处理方式 |
254
- |----------|------|----------|
255
- | E203 | 重复记忆 | 相似度 > 0.95,已跳过 |
256
- | E204 | 质量评分过低 | 信息密度不足,未存储 |
257
-
258
- ## 相关文件
259
-
260
- - `index.ts` - 插件入口与工具注册
261
- - `src/engine/ts_engine.ts` - TS 引擎实现
262
- - `src/store/read_store.ts` - 读取能力
263
- - `src/store/write_store.ts` - 写入能力
264
-
265
- ## 依赖
266
-
267
- - Node.js >= 22
268
- - OPENAI_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
+ - `diagnostics`
47
+
48
+ ### 参数速览
49
+
50
+ | 工具 | 关键参数 |
51
+ |------|------|
52
+ | `search_memory` | `query`, `top_k` |
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
+ | `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
+
76
+ ## 配置策略
77
+
78
+ 先用最小配置跑通:`embedding`、`llm`、`reranker` + `autoSync`。
79
+ 高级项(`readFusion`、`memoryDecay`、`vectorChunking`、`writePolicy`、`readTuning`)都有默认值,不需要一开始就调整。
80
+
81
+ ## 安全与端点声明
82
+
83
+ - 本插件需要外部端点:`/embeddings`、`/chat/completions`、`/rerank`
84
+ - 凭证来源:环境变量或插件配置中的 `*.apiKey`
85
+ - 仅发送推理所需文本片段,不主动上传本地配置文件全集或环境变量全集
86
+
87
+ ## 关键事实
88
+
89
+ - `backfill_embeddings` 已实现且已注册。
90
+ - `query_graph` 支持参数:`entity`、`rel`、`dir`、`path_to`、`max_depth`。
91
+ - `query_graph` 会返回 `wiki_refs`、`evidence_ids`,冲突时返回 `conflict_hint`。
92
+ - 新增图谱治理工具:`export_graph_view`、`lint_memory_wiki`、`list_graph_conflicts`、`resolve_graph_conflict`。
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;
@@ -6,6 +5,8 @@ interface EmbeddingConfig {
6
5
  baseURL?: string;
7
6
  baseUrl?: string;
8
7
  dimensions?: number;
8
+ timeoutMs?: number;
9
+ maxRetries?: number;
9
10
  }
10
11
  interface LLMConfig {
11
12
  provider: string;
@@ -23,32 +24,106 @@ interface RerankerConfig {
23
24
  }
24
25
  interface CortexMemoryConfig {
25
26
  enabled?: boolean;
27
+ fallbackToBuiltin?: boolean;
26
28
  embedding: EmbeddingConfig;
27
29
  llm: LLMConfig;
28
30
  reranker: RerankerConfig;
29
31
  dbPath?: string;
30
32
  autoSync?: boolean;
33
+ llmRequiredForWrite?: boolean;
31
34
  autoReflect?: boolean;
32
- fallbackToBuiltin?: boolean;
33
- apiUrl?: string;
34
- engineMode?: EngineMode;
35
+ autoReflectIntervalMinutes?: number;
36
+ graphQualityMode?: "off" | "warn" | "strict";
37
+ wikiProjection?: {
38
+ enabled?: boolean;
39
+ mode?: "off" | "incremental" | "rebuild";
40
+ maxBatch?: number;
41
+ };
42
+ readFusion?: {
43
+ enabled?: boolean;
44
+ maxCandidates?: number;
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
+ };
83
+ memoryDecay?: {
84
+ enabled?: boolean;
85
+ minFloor?: number;
86
+ defaultHalfLifeDays?: number;
87
+ halfLifeByEventType?: Record<string, number>;
88
+ antiDecay?: {
89
+ enabled?: boolean;
90
+ maxBoost?: number;
91
+ hitWeight?: number;
92
+ recentWindowDays?: number;
93
+ };
94
+ };
95
+ readTuning?: {
96
+ scoring?: {
97
+ lexicalWeight?: number;
98
+ bm25Scale?: number;
99
+ semanticWeight?: number;
100
+ recencyWeight?: number;
101
+ qualityWeight?: number;
102
+ typeMatchWeight?: number;
103
+ graphMatchWeight?: number;
104
+ };
105
+ rrf?: {
106
+ k?: number;
107
+ weight?: number;
108
+ };
109
+ recency?: {
110
+ buckets?: Array<{
111
+ maxAgeHours: number;
112
+ score: number;
113
+ bonus: number;
114
+ }>;
115
+ };
116
+ autoContext?: {
117
+ queryMaxChars?: number;
118
+ lightweightSearch?: boolean;
119
+ };
120
+ };
35
121
  }
36
122
  interface ToolContext {
37
123
  agentId: string;
38
124
  sessionId?: string;
39
125
  workspaceId: string;
40
126
  }
41
- interface ToolResult {
42
- success: boolean;
43
- data?: unknown;
44
- error?: string;
45
- errorCode?: string;
46
- }
47
- interface BuiltinMemory {
48
- search: (query: string, limit?: number) => Promise<unknown[]>;
49
- store: (content: string, metadata?: Record<string, unknown>) => Promise<string>;
50
- delete: (id: string) => Promise<boolean>;
51
- }
52
127
  interface Logger {
53
128
  debug: (message: string, ...args: unknown[]) => void;
54
129
  info: (message: string, ...args: unknown[]) => void;
@@ -56,15 +131,15 @@ interface Logger {
56
131
  error: (message: string, ...args: unknown[]) => void;
57
132
  }
58
133
  interface OpenClawPluginApi {
134
+ logger?: Logger;
135
+ config?: Record<string, unknown>;
136
+ pluginConfig?: Record<string, unknown>;
59
137
  registerTool(tool: {
60
138
  name: string;
61
139
  description: string;
62
140
  parameters: Record<string, unknown>;
63
- execute?: (params: {
64
- args?: Record<string, unknown>;
65
- context: ToolContext;
66
- }) => Promise<ToolResult>;
67
- handler?: (...params: unknown[]) => Promise<ToolResult>;
141
+ execute?: (...params: unknown[]) => Promise<unknown>;
142
+ handler?: (...params: unknown[]) => Promise<unknown>;
68
143
  }): void;
69
144
  unregisterTool?(name: string): void;
70
145
  registerHook(hook: {
@@ -77,13 +152,16 @@ interface OpenClawPluginApi {
77
152
  off?(event: string, handler: (payload: unknown, context: ToolContext) => Promise<void> | void): void;
78
153
  unregisterHook?(event: string): void;
79
154
  getLogger?(): Logger;
80
- getBuiltinMemory?(): BuiltinMemory;
155
+ getBuiltinMemory?(): {
156
+ search: (query: string, topK?: number) => Promise<unknown[]>;
157
+ store: (text: string, metadata?: Record<string, unknown>) => Promise<string>;
158
+ delete: (id: string) => Promise<boolean>;
159
+ } | null;
81
160
  }
82
161
  export declare function enable(): Promise<void>;
83
162
  export declare function disable(): Promise<void>;
84
163
  export declare function getStatus(): {
85
164
  enabled: boolean;
86
- serviceRunning: boolean;
87
165
  };
88
166
  export declare function unregister(): Promise<void>;
89
167
  export declare function register(pluginApi: OpenClawPluginApi, userConfig?: Partial<CortexMemoryConfig>): void;
@@ -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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"}