mirror of
https://github.com/openclaw/openclaw.git
synced 2026-10-03 09:39:25 +00:00
* fix(memory): keep legacy dreaming cron repair in Doctor Runtime reconciliation preserves historical and ambiguous dreaming rows and manages only canonical declarations. The memory plugin classifies historical jobs, while the cron store owns non-creating inventory, verified backup, current-authority checks and atomic partition-local repair. Preserve survivor IDs, ordering and runtime state; retain custom prompts and foreign declarations. Remove the old core payload migration and runtime adoption path. Published 2026.9.6 updater-child repair, exact backup retention and repeated Doctor idempotence passed, with the landed plugin-inventory handoff repair included in the proof candidate. * docs(plugins): clarify trusted Doctor cron repair authority * test: validate dreaming cron through public plugin boundaries * fix(memory): keep authored tags from blocking dreaming Warn about authored cron jobs that retain historical dreaming tags without blocking creation or updates of the canonical dreaming declaration. Keep Doctor responsible for recognized legacy and phase rows. Extend the registered SQLite regression and published-updater scenario to retain an independent authored tagged job through Doctor and real Gateway convergence, then verify a settled plugin reload and preserved history.
283 lines
8.4 KiB
JSON
283 lines
8.4 KiB
JSON
{
|
|
"id": "memory-core",
|
|
"categories": ["memory"],
|
|
"doctorContract": {
|
|
"stateMigrations": [
|
|
{ "id": "memory-core-host-events-jsonl-to-sqlite", "doctorOnly": true },
|
|
{ "id": "memory-core-dreams-json-to-sqlite" },
|
|
{ "id": "memory-core-dreaming-cron", "doctorOnly": true, "phase": "after-session-repair" },
|
|
{ "id": "memory-core-legacy-sidecar-index-to-agent-sqlite" },
|
|
{ "id": "memory-core-qmd-workspace-retired", "doctorOnly": true },
|
|
{ "id": "memory-core-qmd-file-locks-to-sqlite-leases" }
|
|
]
|
|
},
|
|
"name": "OpenClaw Memory",
|
|
"cliCommands": [
|
|
{
|
|
"name": "memory",
|
|
"description": "Search, inspect, and reindex memory files",
|
|
"hasSubcommands": true
|
|
}
|
|
],
|
|
"activation": {
|
|
"onStartup": false
|
|
},
|
|
"kind": "memory",
|
|
"contracts": {
|
|
"tools": ["intent", "memory_get", "memory_search"]
|
|
},
|
|
"toolMetadata": {
|
|
"intent": {
|
|
"profiles": ["coding", "messaging"]
|
|
},
|
|
"memory_get": {
|
|
"replaySafe": true
|
|
}
|
|
},
|
|
"commandAliases": [
|
|
{
|
|
"name": "dreaming",
|
|
"kind": "runtime-slash",
|
|
"cliCommand": "memory"
|
|
}
|
|
],
|
|
"uiHints": {
|
|
"dreaming.enabled": {
|
|
"label": "Dreaming Enabled",
|
|
"help": "Run the default background memory consolidation sweep. Disable to stop the managed schedule."
|
|
},
|
|
"dreaming.frequency": {
|
|
"label": "Dreaming Frequency",
|
|
"placeholder": "0 3 * * *",
|
|
"help": "Optional cron cadence for the full dreaming sweep (light, REM, then deep)."
|
|
},
|
|
"dreaming.model": {
|
|
"label": "Dreaming Model",
|
|
"placeholder": "anthropic/claude-sonnet-4-6",
|
|
"help": "Optional provider/model override for Dream Diary narrative subagent runs. Requires plugins.entries.memory-core.subagent.allowModelOverride."
|
|
},
|
|
"dreaming.phases.deep.maxPriorEntryLossFraction": {
|
|
"label": "Maximum Prior Entry Loss",
|
|
"help": "Maximum fraction of prior MEMORY.md entries an accepted consolidation rewrite may remove."
|
|
}
|
|
},
|
|
"configGroups": [
|
|
{
|
|
"id": "memory-policy",
|
|
"title": "Memory policy",
|
|
"order": 10,
|
|
"properties": ["memoryPolicy"]
|
|
},
|
|
{
|
|
"id": "dreaming",
|
|
"title": "Dreaming",
|
|
"order": 20,
|
|
"properties": ["dreaming"]
|
|
}
|
|
],
|
|
"configSchema": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"memoryPolicy": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"excludeSessions": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"hookExternalContentSources": {
|
|
"type": "array",
|
|
"items": { "type": "string" }
|
|
},
|
|
"channels": {
|
|
"type": "array",
|
|
"items": { "type": "string" }
|
|
},
|
|
"chatTypes": {
|
|
"type": "array",
|
|
"items": { "type": "string", "enum": ["direct", "group", "channel"] }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"dreaming": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"enabled": {
|
|
"type": "boolean",
|
|
"default": true
|
|
},
|
|
"frequency": {
|
|
"type": "string"
|
|
},
|
|
"model": {
|
|
"type": "string"
|
|
},
|
|
"timezone": {
|
|
"type": "string"
|
|
},
|
|
"verboseLogging": {
|
|
"type": "boolean"
|
|
},
|
|
"storage": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"mode": {
|
|
"type": "string",
|
|
"enum": ["inline", "separate", "both"]
|
|
},
|
|
"separateReports": {
|
|
"type": "boolean"
|
|
}
|
|
}
|
|
},
|
|
"execution": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"defaults": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"model": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"phases": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"light": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"enabled": {
|
|
"type": "boolean"
|
|
},
|
|
"lookbackDays": {
|
|
"type": "integer",
|
|
"minimum": 0
|
|
},
|
|
"limit": {
|
|
"type": "integer",
|
|
"minimum": 0
|
|
},
|
|
"dedupeSimilarity": {
|
|
"type": "number",
|
|
"minimum": 0,
|
|
"maximum": 1
|
|
},
|
|
"execution": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"model": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"deep": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"enabled": {
|
|
"type": "boolean"
|
|
},
|
|
"limit": {
|
|
"type": "integer",
|
|
"minimum": 0
|
|
},
|
|
"minScore": {
|
|
"type": "number",
|
|
"minimum": 0,
|
|
"maximum": 1,
|
|
"default": 0.75
|
|
},
|
|
"minRecallCount": {
|
|
"type": "integer",
|
|
"minimum": 0,
|
|
"default": 3
|
|
},
|
|
"minUniqueQueries": {
|
|
"type": "integer",
|
|
"minimum": 0,
|
|
"default": 3
|
|
},
|
|
"recencyHalfLifeDays": {
|
|
"type": "integer",
|
|
"minimum": 0
|
|
},
|
|
"maxAgeDays": {
|
|
"type": "integer",
|
|
"minimum": 1
|
|
},
|
|
"maxPromotedSnippetTokens": {
|
|
"type": "integer",
|
|
"minimum": 1,
|
|
"description": "Maximum estimated token count for each short-term recall snippet promoted into MEMORY.md. Provenance metadata remains attached to the entry."
|
|
},
|
|
"maxPriorEntryLossFraction": {
|
|
"type": "number",
|
|
"minimum": 0,
|
|
"maximum": 1,
|
|
"description": "Maximum fraction of prior MEMORY.md entries a consolidation rewrite may remove before OpenClaw rejects it and uses append-only fallback."
|
|
},
|
|
"execution": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"model": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"rem": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"enabled": {
|
|
"type": "boolean"
|
|
},
|
|
"lookbackDays": {
|
|
"type": "integer",
|
|
"minimum": 0
|
|
},
|
|
"limit": {
|
|
"type": "integer",
|
|
"minimum": 0
|
|
},
|
|
"minPatternStrength": {
|
|
"type": "number",
|
|
"minimum": 0,
|
|
"maximum": 1
|
|
},
|
|
"execution": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"model": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|