openclaw/extensions/memory-core/openclaw.plugin.json
Peter Steinberger fc2a110841
fix(memory): preserve historical dreaming jobs until Doctor repair (#157616)
* 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.
2026-09-25 01:35:42 -07:00

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"
}
}
}
}
}
}
}
}
}
}
}
}