You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Implements the K/E decoupling pattern from arxiv:2602.05665 §III-C and §V-E:
static reference data (profile, preferences, entities, patterns) and
trajectory data (events, cases) now travel separately through decay and
retrieval without splitting storage.
Changes:
- classifyMemoryType() in src/memory-categories.ts — deterministic 6-cat
(+ legacy) → knowledge/experience mapping
- memory_type threaded through SmartMemoryMetadata with lazy-backfill on
legacy entries in parseSmartMetadata
- DecayEngine applies per-type half-life multipliers (knowledge 3.0x,
experience 0.7x by default; set both to 1.0 to disable)
- analyzeIntent returns memoryType hint; new "experience" rule
(last time / 上次 / 之前) routes trajectory queries
- applyMemoryTypeBoost() promotes matching-type results after the
existing category boost in the auto-recall path
- memory_recall tool accepts type: "knowledge" | "experience" | "both"
- openclaw.plugin.json schema exposes the two multipliers
Backward-compat: old memories backfill on read; unconfigured callers
keep working (type defaults to knowledge, which decays slower — safer
than losing data).
Also registers the pre-existing test/hook-dedup-phase1.test.mjs in
verify-ci-test-manifest.mjs EXPECTED_BASELINE (was in the runtime
manifest but missing from the baseline check, so `npm test` was failing
the manifest-verify step on master).
Verified: 197/197 tests pass (npm test, full suite).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Copy file name to clipboardExpand all lines: openclaw.plugin.json
+24Lines changed: 24 additions & 0 deletions
Original file line number
Diff line number
Diff line change
@@ -496,6 +496,20 @@
496
496
"minimum": 0,
497
497
"maximum": 1,
498
498
"default": 0.5
499
+
},
500
+
"knowledgeHalfLifeMultiplier": {
501
+
"type": "number",
502
+
"minimum": 0.1,
503
+
"maximum": 10,
504
+
"default": 3.0,
505
+
"description": "Half-life multiplier for knowledge-type memories (profile / preferences / entities / patterns). >1 makes knowledge decay slower. Set both multipliers to 1.0 to disable K/E decoupling (arxiv:2602.05665 §V-E)."
506
+
},
507
+
"experienceHalfLifeMultiplier": {
508
+
"type": "number",
509
+
"minimum": 0.1,
510
+
"maximum": 10,
511
+
"default": 0.7,
512
+
"description": "Half-life multiplier for experience-type memories (events / cases). <1 makes trajectory logs decay faster. Set both multipliers to 1.0 to disable K/E decoupling."
499
513
}
500
514
}
501
515
},
@@ -1162,6 +1176,16 @@
1162
1176
"help": "Weibull beta for peripheral memories.",
1163
1177
"advanced": true
1164
1178
},
1179
+
"decay.knowledgeHalfLifeMultiplier": {
1180
+
"label": "Knowledge Half-Life Multiplier",
1181
+
"help": "Multiplier applied to the half-life of knowledge-type memories (profile, preferences, entities, patterns). >1 makes them decay slower. Set to 1.0 to disable K/E decoupling.",
1182
+
"advanced": true
1183
+
},
1184
+
"decay.experienceHalfLifeMultiplier": {
1185
+
"label": "Experience Half-Life Multiplier",
1186
+
"help": "Multiplier applied to the half-life of experience-type memories (events, cases). <1 makes trajectory logs fade faster.",
1187
+
"advanced": true
1188
+
},
1165
1189
"tier.coreAccessThreshold": {
1166
1190
"label": "Core Access Threshold",
1167
1191
"help": "Minimum recall count before promoting to core.",
0 commit comments