openclaw-cortex-memory 0.1.0-Alpha.30 → 0.1.0-Alpha.32

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 (79) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +46 -12
  3. package/SIGNATURE.md +7 -0
  4. package/SKILL.md +18 -3
  5. package/dist/index.d.ts +8 -0
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +148 -6
  8. package/dist/index.js.map +1 -1
  9. package/dist/openclaw.plugin.json +120 -4
  10. package/dist/src/engine/memory_engine.d.ts +5 -1
  11. package/dist/src/engine/memory_engine.d.ts.map +1 -1
  12. package/dist/src/engine/ts_engine.d.ts +116 -0
  13. package/dist/src/engine/ts_engine.d.ts.map +1 -1
  14. package/dist/src/engine/ts_engine.js +417 -102
  15. package/dist/src/engine/ts_engine.js.map +1 -1
  16. package/dist/src/engine/types.d.ts +17 -0
  17. package/dist/src/engine/types.d.ts.map +1 -1
  18. package/dist/src/graph/ontology.d.ts +23 -1
  19. package/dist/src/graph/ontology.d.ts.map +1 -1
  20. package/dist/src/graph/ontology.js +743 -70
  21. package/dist/src/graph/ontology.js.map +1 -1
  22. package/dist/src/quality/llm_output_validator.d.ts +20 -2
  23. package/dist/src/quality/llm_output_validator.d.ts.map +1 -1
  24. package/dist/src/quality/llm_output_validator.js +296 -41
  25. package/dist/src/quality/llm_output_validator.js.map +1 -1
  26. package/dist/src/store/archive_store.d.ts +8 -0
  27. package/dist/src/store/archive_store.d.ts.map +1 -1
  28. package/dist/src/store/archive_store.js +244 -84
  29. package/dist/src/store/archive_store.js.map +1 -1
  30. package/dist/src/store/graph_memory_store.d.ts +72 -2
  31. package/dist/src/store/graph_memory_store.d.ts.map +1 -1
  32. package/dist/src/store/graph_memory_store.js +723 -50
  33. package/dist/src/store/graph_memory_store.js.map +1 -1
  34. package/dist/src/store/read_store.d.ts +3 -0
  35. package/dist/src/store/read_store.d.ts.map +1 -1
  36. package/dist/src/store/read_store.js +1004 -209
  37. package/dist/src/store/read_store.js.map +1 -1
  38. package/dist/src/store/vector_store.d.ts +1 -0
  39. package/dist/src/store/vector_store.d.ts.map +1 -1
  40. package/dist/src/store/vector_store.js +1 -0
  41. package/dist/src/store/vector_store.js.map +1 -1
  42. package/dist/src/store/write_store.d.ts +2 -0
  43. package/dist/src/store/write_store.d.ts.map +1 -1
  44. package/dist/src/store/write_store.js +45 -3
  45. package/dist/src/store/write_store.js.map +1 -1
  46. package/dist/src/sync/session_sync.d.ts +20 -1
  47. package/dist/src/sync/session_sync.d.ts.map +1 -1
  48. package/dist/src/sync/session_sync.js +1810 -161
  49. package/dist/src/sync/session_sync.js.map +1 -1
  50. package/dist/src/wiki/wiki_linter.d.ts +25 -0
  51. package/dist/src/wiki/wiki_linter.d.ts.map +1 -0
  52. package/dist/src/wiki/wiki_linter.js +268 -0
  53. package/dist/src/wiki/wiki_linter.js.map +1 -0
  54. package/dist/src/wiki/wiki_logger.d.ts +10 -0
  55. package/dist/src/wiki/wiki_logger.d.ts.map +1 -0
  56. package/dist/src/wiki/wiki_logger.js +78 -0
  57. package/dist/src/wiki/wiki_logger.js.map +1 -0
  58. package/dist/src/wiki/wiki_maintainer.d.ts +36 -0
  59. package/dist/src/wiki/wiki_maintainer.d.ts.map +1 -0
  60. package/dist/src/wiki/wiki_maintainer.js +38 -0
  61. package/dist/src/wiki/wiki_maintainer.js.map +1 -0
  62. package/dist/src/wiki/wiki_projector.d.ts +33 -0
  63. package/dist/src/wiki/wiki_projector.d.ts.map +1 -0
  64. package/dist/src/wiki/wiki_projector.js +633 -0
  65. package/dist/src/wiki/wiki_projector.js.map +1 -0
  66. package/dist/src/wiki/wiki_queue.d.ts +29 -0
  67. package/dist/src/wiki/wiki_queue.d.ts.map +1 -0
  68. package/dist/src/wiki/wiki_queue.js +137 -0
  69. package/dist/src/wiki/wiki_queue.js.map +1 -0
  70. package/openclaw.plugin.json +120 -4
  71. package/package.json +8 -4
  72. package/schema/graph.schema.yaml +188 -33
  73. package/skills/cortex-memory/SKILL.md +49 -0
  74. package/skills/cortex-memory/references/agent-manual.md +115 -0
  75. package/skills/cortex-memory/references/configuration.md +92 -0
  76. package/skills/cortex-memory/references/publish-checklist.md +46 -0
  77. package/skills/cortex-memory/references/system-prompt-template.md +27 -0
  78. package/skills/cortex-memory/references/tools.md +181 -0
  79. package/skills/cortex-memory/scripts/smoke-check.ps1 +56 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 deki18
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -28,6 +28,8 @@ OpenClaw 长期记忆插件 - 专为 OpenClaw AI 助手设计的智能记忆系
28
28
  - 图谱独立层:`graph/memory.jsonl` 独立于 archive 文本层
29
29
  - 关系追溯:每条关系可追溯 `source_event_id`
30
30
  - 关系查询:`query_graph` 支持方向、关系类型、路径搜索
31
+ - 冲突治理:单值事实冲突进入队列,支持人工 `accept/reject` 闭环
32
+ - 可视化导出:`export_graph_view` 输出状态化图谱快照(含来源证据)
31
33
  - 质量门禁:`graphQualityMode` 支持 `off/warn/strict`
32
34
 
33
35
  ### 4) 规则演进
@@ -38,6 +40,7 @@ OpenClaw 长期记忆插件 - 专为 OpenClaw AI 助手设计的智能记忆系
38
40
  ### 5) 运维诊断
39
41
  - `diagnostics`:模型连通、层级状态、字段对齐检查
40
42
  - `backfill_embeddings`:支持 `incremental / vector_only / full`
43
+ - `lint_memory_wiki`:Wiki/图谱一致性巡检与修复建议
41
44
  - 完整状态文件:便于快速定位同步、回填、质量问题
42
45
 
43
46
  ---
@@ -47,6 +50,10 @@ OpenClaw 长期记忆插件 - 专为 OpenClaw AI 助手设计的智能记忆系
47
50
  - `search_memory`
48
51
  - `store_event`
49
52
  - `query_graph`
53
+ - `export_graph_view`
54
+ - `lint_memory_wiki`
55
+ - `list_graph_conflicts`
56
+ - `resolve_graph_conflict`
50
57
  - `get_hot_context`
51
58
  - `get_auto_context`
52
59
  - `reflect_memory`
@@ -62,9 +69,16 @@ OpenClaw 长期记忆插件 - 专为 OpenClaw AI 助手设计的智能记忆系
62
69
  | `search_memory` | `query`, `top_k` |
63
70
  | `store_event` | `summary`, `entities`, `entity_types`, `outcome`, `relations` |
64
71
  | `query_graph` | `entity`, `rel`, `dir`, `path_to`, `max_depth` |
72
+ | `export_graph_view` | `write_snapshot` |
73
+ | `lint_memory_wiki` | 无 |
74
+ | `list_graph_conflicts` | `status`, `limit` |
75
+ | `resolve_graph_conflict` | `conflict_id`, `action`, `note` |
65
76
  | `get_hot_context` | `limit` |
66
77
  | `get_auto_context` | `include_hot` |
78
+ | `reflect_memory` | 无 |
79
+ | `sync_memory` | 无 |
67
80
  | `backfill_embeddings` | `layer`, `batch_size`, `max_retries`, `retry_failed_only`, `rebuild_mode` |
81
+ | `diagnostics` | 无 |
68
82
  | `delete_memory` | `memory_id` |
69
83
 
70
84
  ---
@@ -93,6 +107,8 @@ OpenClaw 长期记忆插件 - 专为 OpenClaw AI 助手设计的智能记忆系
93
107
  14. 调用任意 Cortex Memory 工具前,先确认当前运行环境可见该工具;若工具不可见,必须立即报告“当前 lane 不可用”,不得虚构执行结果。
94
108
  15. `sync_memory` 属于关键路径任务:执行前后应避免并发重复触发;若已有同任务进行中,复用当前结果或等待完成。
95
109
  16. 当用户明确请求 Cortex Memory 任务(如 `sync_memory` / `search_memory` / `store_event`)时,禁止切换到无关流程(如心跳巡检、日报、闲聊任务);若被系统任务打断,先完成用户请求再处理后台任务。
110
+ 17. 当 `query_graph` 返回 `conflict_hint` 时,不得静默覆盖冲突事实;应先调用 `list_graph_conflicts`,并与用户确认后再 `resolve_graph_conflict`。
111
+ 18. 需要解释图谱状态分布或排查投影异常时,优先调用 `export_graph_view` 与 `lint_memory_wiki`。
96
112
 
97
113
  ---
98
114
 
@@ -109,23 +125,23 @@ openclaw plugins enable openclaw-cortex-memory
109
125
  如果 `clawhub:` 安装出现 `fetch failed`,可改用 npm 包本地安装(推荐兜底):
110
126
 
111
127
  ```bash
112
- npm pack openclaw-cortex-memory@0.1.0-Alpha.30
113
- openclaw plugins install ./openclaw-cortex-memory-0.1.0-Alpha.30.tgz
128
+ npm pack openclaw-cortex-memory@0.1.0-Alpha.32
129
+ openclaw plugins install ./openclaw-cortex-memory-0.1.0-Alpha.32.tgz
114
130
  openclaw plugins enable openclaw-cortex-memory
115
- rm ./openclaw-cortex-memory-0.1.0-Alpha.30.tgz
131
+ rm ./openclaw-cortex-memory-0.1.0-Alpha.32.tgz
116
132
  ```
117
133
 
118
- 完成安装后,请先按下方“最小配置”示例配置 `openclaw.json`,确认配置无误后再启动 gateway。
134
+ 完成安装后,请先按下方"最小配置"示例配置 `openclaw.json`,确认配置无误后再启动 gateway。
119
135
 
120
136
  ### 更新
121
137
 
122
138
  ```bash
123
139
  rm -r ~/.openclaw/extensions/openclaw-cortex-memory
124
- npm pack openclaw-cortex-memory@0.1.0-Alpha.30
125
- openclaw plugins install ./openclaw-cortex-memory-0.1.0-Alpha.30.tgz
140
+ npm pack openclaw-cortex-memory@0.1.0-Alpha.32
141
+ openclaw plugins install ./openclaw-cortex-memory-0.1.0-Alpha.32.tgz
126
142
  openclaw plugins enable openclaw-cortex-memory
127
- rm ./openclaw-cortex-memory-0.1.0-Alpha.30.tgz
128
- openclaw plugins list
143
+ rm ./openclaw-cortex-memory-0.1.0-Alpha.32.tgz
144
+ openclaw plugins list --enabled
129
145
  openclaw gateway restart
130
146
  ```
131
147
 
@@ -159,6 +175,11 @@ openclaw plugins uninstall openclaw-cortex-memory --keep-data
159
175
  "autoSync": true,
160
176
  "autoReflect": false,
161
177
  "graphQualityMode": "warn",
178
+ "wikiProjection": {
179
+ "enabled": true,
180
+ "mode": "incremental",
181
+ "maxBatch": 100
182
+ },
162
183
  "embedding": {
163
184
  "provider": "api",
164
185
  "model": "text-embedding-3-large",
@@ -226,11 +247,14 @@ openclaw plugins uninstall openclaw-cortex-memory --keep-data
226
247
 
227
248
  ## 数据目录
228
249
 
229
- 默认情况下(未配置 `dbPath`),数据目录为:
250
+ 默认情况下(未配置 `dbPath`),数据目录为 OpenClaw workspace 下:
251
+
252
+ - Linux/macOS: `~/.openclaw/workspace/memory/openclaw-cortex-memory`
253
+ - Windows: `%USERPROFILE%\\.openclaw\\workspace\\memory\\openclaw-cortex-memory`
254
+
255
+ 如果当前进程无法识别 OpenClaw 基础目录(例如离线脚本直接运行且无相关环境变量),会回退到项目目录:
230
256
 
231
- - Linux: `~/.openclaw/extensions/openclaw-cortex-memory/data/memory`
232
- - macOS: `~/.openclaw/extensions/openclaw-cortex-memory/data/memory`
233
- - Windows: `%USERPROFILE%\\.openclaw\\extensions\\openclaw-cortex-memory\\data\\memory`
257
+ - `<projectRoot>/data/memory`
234
258
 
235
259
  如果在插件配置里设置了 `dbPath`,则以下文件都会写到你指定的 `dbPath` 下:
236
260
 
@@ -240,6 +264,16 @@ openclaw plugins uninstall openclaw-cortex-memory --keep-data
240
264
  - `<memoryRoot>/sessions/archive/sessions.jsonl`
241
265
  - `<memoryRoot>/graph/memory.jsonl`
242
266
  - `<memoryRoot>/graph/mutation_log.jsonl`
267
+ - `<memoryRoot>/graph/conflict_queue.jsonl`
268
+ - `<memoryRoot>/graph/superseded_relations.jsonl`
269
+ - `<memoryRoot>/wiki/index.md`
270
+ - `<memoryRoot>/wiki/log.md`
271
+ - `<memoryRoot>/wiki/entities/*.md`
272
+ - `<memoryRoot>/wiki/topics/*.md`
273
+ - `<memoryRoot>/wiki/graph/view.json`
274
+ - `<memoryRoot>/wiki/graph/timeline.jsonl`
275
+ - `<memoryRoot>/wiki/.projection_index.json`
276
+ - `<memoryRoot>/wiki/.rebuild_queue.jsonl`
243
277
  - `<memoryRoot>/vector/lancedb`
244
278
  - `<memoryRoot>/vector/lancedb_events.jsonl`
245
279
  - `<memoryRoot>/.sync_state.json`
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
@@ -33,6 +33,10 @@ metadata:
33
33
  - `search_memory`
34
34
  - `store_event`
35
35
  - `query_graph`
36
+ - `export_graph_view`
37
+ - `lint_memory_wiki`
38
+ - `list_graph_conflicts`
39
+ - `resolve_graph_conflict`
36
40
  - `get_hot_context`
37
41
  - `get_auto_context`
38
42
  - `reflect_memory`
@@ -48,17 +52,26 @@ metadata:
48
52
  | `search_memory` | `query`, `top_k` |
49
53
  | `store_event` | `summary`, `entities`, `entity_types`, `outcome`, `relations` |
50
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` |
51
59
  | `get_hot_context` | `limit` |
52
60
  | `get_auto_context` | `include_hot` |
61
+ | `reflect_memory` | 无 |
62
+ | `sync_memory` | 无 |
53
63
  | `backfill_embeddings` | `layer`, `batch_size`, `max_retries`, `retry_failed_only`, `rebuild_mode` |
64
+ | `diagnostics` | 无 |
54
65
  | `delete_memory` | `memory_id` |
55
66
 
56
67
  ## 使用建议
57
68
 
58
69
  1. 回答历史问题前先调 `search_memory`。
59
70
  2. 涉及实体关系优先调 `query_graph`。
60
- 3. 会话收尾或批量导入后再调 `sync_memory` / `reflect_memory`。
61
- 4. 诊断发现向量缺失时调 `backfill_embeddings`。
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`。
62
75
 
63
76
  ## 配置策略
64
77
 
@@ -74,4 +87,6 @@ metadata:
74
87
  ## 关键事实
75
88
 
76
89
  - `backfill_embeddings` 已实现且已注册。
77
- - `query_graph` 支持参数:`entity`、`rel`、`dir`、`path_to`、`max_depth`。
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
@@ -34,6 +34,11 @@ interface CortexMemoryConfig {
34
34
  autoReflect?: boolean;
35
35
  autoReflectIntervalMinutes?: number;
36
36
  graphQualityMode?: "off" | "warn" | "strict";
37
+ wikiProjection?: {
38
+ enabled?: boolean;
39
+ mode?: "off" | "incremental" | "rebuild";
40
+ maxBatch?: number;
41
+ };
37
42
  readFusion?: {
38
43
  enabled?: boolean;
39
44
  maxCandidates?: number;
@@ -72,6 +77,9 @@ interface CortexMemoryConfig {
72
77
  activeTextMaxChars?: number;
73
78
  archiveSourceTextMaxChars?: number;
74
79
  };
80
+ syncPolicy?: {
81
+ includeLocalActiveInput?: boolean;
82
+ };
75
83
  memoryDecay?: {
76
84
  enabled?: boolean;
77
85
  minFloor?: number;
@@ -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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"}
package/dist/index.js CHANGED
@@ -80,6 +80,11 @@ const defaultConfig = {
80
80
  autoReflect: false,
81
81
  autoReflectIntervalMinutes: 30,
82
82
  graphQualityMode: "warn",
83
+ wikiProjection: {
84
+ enabled: false,
85
+ mode: "off",
86
+ maxBatch: 100,
87
+ },
83
88
  readFusion: {
84
89
  enabled: true,
85
90
  maxCandidates: 10,
@@ -115,8 +120,11 @@ const defaultConfig = {
115
120
  archiveMinQualityScore: 0.4,
116
121
  activeMinQualityScore: 0.45,
117
122
  activeDedupTailLines: 200,
118
- activeTextMaxChars: 4000,
119
- archiveSourceTextMaxChars: 8000,
123
+ activeTextMaxChars: 200000,
124
+ archiveSourceTextMaxChars: 500000,
125
+ },
126
+ syncPolicy: {
127
+ includeLocalActiveInput: false,
120
128
  },
121
129
  memoryDecay: {
122
130
  enabled: true,
@@ -202,9 +210,40 @@ let processHandlersRegistered = false;
202
210
  let memoryEngine = null;
203
211
  let builtinMemory = null;
204
212
  const TOOL_TRACE_PAYLOAD_MAX_CHARS = 1500;
213
+ function inferOpenClawBasePathForWorkspace() {
214
+ const explicitConfigPath = (0, runtime_env_1.getEnvValue)("OPENCLAW_CONFIG_PATH").trim();
215
+ if (explicitConfigPath) {
216
+ return path.dirname(path.resolve(explicitConfigPath));
217
+ }
218
+ const stateDir = (0, runtime_env_1.getEnvValue)("OPENCLAW_STATE_DIR").trim();
219
+ if (stateDir) {
220
+ return path.resolve(stateDir);
221
+ }
222
+ const basePath = (0, runtime_env_1.getEnvValue)("OPENCLAW_BASE_PATH").trim();
223
+ if (basePath) {
224
+ return path.resolve(basePath);
225
+ }
226
+ const discoveredConfigPath = findOpenClawConfig();
227
+ if (discoveredConfigPath) {
228
+ return path.dirname(path.resolve(discoveredConfigPath));
229
+ }
230
+ return null;
231
+ }
232
+ function resolveDefaultMemoryRoot(projectRoot) {
233
+ const openClawBasePath = inferOpenClawBasePathForWorkspace();
234
+ if (openClawBasePath) {
235
+ return path.join(openClawBasePath, "workspace", "memory", PLUGIN_ID);
236
+ }
237
+ return path.join(projectRoot, "data", "memory");
238
+ }
239
+ function resolveConfiguredMemoryRoot(configuredDbPath) {
240
+ if (typeof configuredDbPath === "string" && configuredDbPath.trim()) {
241
+ return path.resolve(configuredDbPath.trim());
242
+ }
243
+ return resolveDefaultMemoryRoot(findProjectRoot());
244
+ }
205
245
  function getMemoryRoot() {
206
- const projectRoot = findProjectRoot();
207
- return config?.dbPath ? path.resolve(config.dbPath) : path.join(projectRoot, "data", "memory");
246
+ return resolveConfiguredMemoryRoot(config?.dbPath);
208
247
  }
209
248
  function getArchiveMarker() {
210
249
  try {
@@ -310,6 +349,7 @@ function resolveEngine() {
310
349
  memoryRoot,
311
350
  logger,
312
351
  qualityMode: config.graphQualityMode || "warn",
352
+ wikiProjection: config.wikiProjection,
313
353
  });
314
354
  const sessionSync = (0, session_sync_1.createSessionSync)({
315
355
  projectRoot,
@@ -319,6 +359,7 @@ function resolveEngine() {
319
359
  graphQualityMode: config.graphQualityMode || "warn",
320
360
  requireLlmForWrite: config.llmRequiredForWrite ?? true,
321
361
  writePolicy: config.writePolicy,
362
+ syncPolicy: config.syncPolicy,
322
363
  archiveStore,
323
364
  graphMemoryStore,
324
365
  writeStore,
@@ -657,6 +698,16 @@ function validateConfig(cfg) {
657
698
  errors.push("graphQualityMode must be one of: off, warn, strict.");
658
699
  }
659
700
  }
701
+ if (cfg.wikiProjection?.mode !== undefined) {
702
+ if (!["off", "incremental", "rebuild"].includes(cfg.wikiProjection.mode)) {
703
+ errors.push("wikiProjection.mode must be one of: off, incremental, rebuild.");
704
+ }
705
+ }
706
+ if (cfg.wikiProjection?.maxBatch !== undefined) {
707
+ if (!Number.isFinite(cfg.wikiProjection.maxBatch) || cfg.wikiProjection.maxBatch < 1) {
708
+ errors.push("wikiProjection.maxBatch must be >= 1.");
709
+ }
710
+ }
660
711
  if (cfg.readFusion?.channelWeights) {
661
712
  const weights = cfg.readFusion.channelWeights;
662
713
  for (const [key, value] of Object.entries(weights)) {
@@ -707,6 +758,11 @@ function validateConfig(cfg) {
707
758
  errors.push("writePolicy.archiveSourceTextMaxChars must be >= 1000.");
708
759
  }
709
760
  }
761
+ if (cfg.syncPolicy && cfg.syncPolicy.includeLocalActiveInput !== undefined) {
762
+ if (typeof cfg.syncPolicy.includeLocalActiveInput !== "boolean") {
763
+ errors.push("syncPolicy.includeLocalActiveInput must be boolean.");
764
+ }
765
+ }
710
766
  if (cfg.memoryDecay) {
711
767
  if (typeof cfg.memoryDecay.minFloor === "number" && (!Number.isFinite(cfg.memoryDecay.minFloor) || cfg.memoryDecay.minFloor < 0 || cfg.memoryDecay.minFloor > 1)) {
712
768
  errors.push("memoryDecay.minFloor must be between 0 and 1.");
@@ -749,7 +805,9 @@ function validateConfig(cfg) {
749
805
  const buckets = cfg.readTuning.recency.buckets;
750
806
  for (let i = 0; i < buckets.length; i += 1) {
751
807
  const bucket = buckets[i];
752
- if (!Number.isFinite(bucket.maxAgeHours) || bucket.maxAgeHours <= 0) {
808
+ const maxAgeHours = bucket.maxAgeHours;
809
+ const finiteOrInfinity = Number.isFinite(maxAgeHours) || maxAgeHours === Number.POSITIVE_INFINITY;
810
+ if (!finiteOrInfinity || maxAgeHours <= 0) {
753
811
  errors.push(`readTuning.recency.buckets[${i}].maxAgeHours must be > 0.`);
754
812
  }
755
813
  if (!Number.isFinite(bucket.score) || bucket.score < 0) {
@@ -981,6 +1039,9 @@ function registerTools() {
981
1039
  type: "object",
982
1040
  properties: {
983
1041
  summary: { type: "string", description: "Event summary" },
1042
+ cause: { type: "string", description: "What triggered the event (task/request/problem statement)" },
1043
+ process: { type: "string", description: "How the task was handled (steps/attempts/iterations)" },
1044
+ result: { type: "string", description: "Final result and acceptance outcome" },
984
1045
  entities: {
985
1046
  type: "array",
986
1047
  description: "Involved entities",
@@ -1059,6 +1120,78 @@ function registerTools() {
1059
1120
  return resolveEngine().queryGraph(args, params.context);
1060
1121
  },
1061
1122
  },
1123
+ {
1124
+ name: "export_graph_view",
1125
+ description: "Export status-aware graph view and optionally write wiki graph snapshots",
1126
+ parameters: {
1127
+ type: "object",
1128
+ properties: {
1129
+ write_snapshot: {
1130
+ type: "boolean",
1131
+ description: "When true (default), write data/memory/wiki/graph/view.json and timeline.jsonl",
1132
+ },
1133
+ },
1134
+ required: [],
1135
+ additionalProperties: false,
1136
+ },
1137
+ execute: async (params) => {
1138
+ const args = params.args || params;
1139
+ return resolveEngine().exportGraphView(args, params.context);
1140
+ },
1141
+ },
1142
+ {
1143
+ name: "lint_memory_wiki",
1144
+ description: "Run wiki memory lint checks and return structured repair guidance",
1145
+ parameters: {
1146
+ type: "object",
1147
+ properties: {},
1148
+ required: [],
1149
+ additionalProperties: false,
1150
+ },
1151
+ execute: async (params) => {
1152
+ const args = params.args || params;
1153
+ return resolveEngine().lintMemoryWiki(args, params.context);
1154
+ },
1155
+ },
1156
+ {
1157
+ name: "list_graph_conflicts",
1158
+ description: "List pending/handled graph memory conflicts that require user confirmation",
1159
+ parameters: {
1160
+ type: "object",
1161
+ properties: {
1162
+ status: {
1163
+ type: "string",
1164
+ enum: ["pending", "accepted", "rejected", "all"],
1165
+ description: "Filter conflict status",
1166
+ },
1167
+ limit: { type: "integer", description: "Maximum returned conflicts" },
1168
+ },
1169
+ required: [],
1170
+ additionalProperties: false,
1171
+ },
1172
+ execute: async (params) => {
1173
+ const args = params.args || params;
1174
+ return resolveEngine().listGraphConflicts(args, params.context);
1175
+ },
1176
+ },
1177
+ {
1178
+ name: "resolve_graph_conflict",
1179
+ description: "Resolve a graph conflict by accepting or rejecting the new candidate fact",
1180
+ parameters: {
1181
+ type: "object",
1182
+ properties: {
1183
+ conflict_id: { type: "string", description: "Conflict ID from list_graph_conflicts" },
1184
+ action: { type: "string", enum: ["accept", "reject"], description: "Resolution action" },
1185
+ note: { type: "string", description: "Optional note for audit trail" },
1186
+ },
1187
+ required: ["conflict_id", "action"],
1188
+ additionalProperties: false,
1189
+ },
1190
+ execute: async (params) => {
1191
+ const args = params.args || params;
1192
+ return resolveEngine().resolveGraphConflict(args, params.context);
1193
+ },
1194
+ },
1062
1195
  {
1063
1196
  name: "get_hot_context",
1064
1197
  description: "Get hot memory context for current session",
@@ -1653,6 +1786,7 @@ function register(pluginApi, userConfig) {
1653
1786
  const pluginEntry = openclawConfig?.plugins?.entries?.[PLUGIN_ID];
1654
1787
  const pluginConfig = Object.keys(apiPluginConfig).length > 0 ? apiPluginConfig : (pluginEntry?.config || {});
1655
1788
  const effectiveConfig = userConfig || pluginConfig || {};
1789
+ const resolvedDbPath = resolveConfiguredMemoryRoot(typeof effectiveConfig.dbPath === "string" ? effectiveConfig.dbPath : undefined);
1656
1790
  const embeddingConfigRaw = (effectiveConfig.embedding || { provider: "openai-compatible", model: "" });
1657
1791
  const llmConfigRaw = (effectiveConfig.llm || { provider: "openai", model: "" });
1658
1792
  const rerankerConfigRaw = (effectiveConfig.reranker || { provider: "", model: "" });
@@ -1672,11 +1806,16 @@ function register(pluginApi, userConfig) {
1672
1806
  embedding: embeddingConfig,
1673
1807
  llm: llmConfig,
1674
1808
  reranker: rerankerConfig,
1675
- dbPath: effectiveConfig.dbPath,
1809
+ dbPath: resolvedDbPath,
1676
1810
  autoSync: effectiveConfig.autoSync ?? defaultConfig.autoSync,
1677
1811
  autoReflect: effectiveConfig.autoReflect ?? defaultConfig.autoReflect,
1678
1812
  autoReflectIntervalMinutes: effectiveConfig.autoReflectIntervalMinutes ?? defaultConfig.autoReflectIntervalMinutes,
1679
1813
  graphQualityMode: effectiveConfig.graphQualityMode ?? defaultConfig.graphQualityMode,
1814
+ wikiProjection: {
1815
+ enabled: effectiveConfig.wikiProjection?.enabled ?? defaultConfig.wikiProjection?.enabled,
1816
+ mode: effectiveConfig.wikiProjection?.mode ?? defaultConfig.wikiProjection?.mode,
1817
+ maxBatch: effectiveConfig.wikiProjection?.maxBatch ?? defaultConfig.wikiProjection?.maxBatch,
1818
+ },
1680
1819
  readFusion: {
1681
1820
  enabled: effectiveConfig.readFusion?.enabled ?? defaultConfig.readFusion?.enabled,
1682
1821
  maxCandidates: effectiveConfig.readFusion?.maxCandidates ?? defaultConfig.readFusion?.maxCandidates,
@@ -1705,6 +1844,9 @@ function register(pluginApi, userConfig) {
1705
1844
  activeTextMaxChars: effectiveConfig.writePolicy?.activeTextMaxChars ?? defaultConfig.writePolicy?.activeTextMaxChars,
1706
1845
  archiveSourceTextMaxChars: effectiveConfig.writePolicy?.archiveSourceTextMaxChars ?? defaultConfig.writePolicy?.archiveSourceTextMaxChars,
1707
1846
  },
1847
+ syncPolicy: {
1848
+ includeLocalActiveInput: effectiveConfig.syncPolicy?.includeLocalActiveInput ?? defaultConfig.syncPolicy?.includeLocalActiveInput,
1849
+ },
1708
1850
  memoryDecay: {
1709
1851
  enabled: effectiveConfig.memoryDecay?.enabled ?? defaultConfig.memoryDecay?.enabled,
1710
1852
  minFloor: effectiveConfig.memoryDecay?.minFloor ?? defaultConfig.memoryDecay?.minFloor,