mirror of
https://github.com/dtzp555-max/memory-continuity.git
synced 2026-07-19 09:42:42 +00:00
- C1: Remove regex g flag in cmdSearch (skipped matches due to lastIndex) - C2: Escape user input in RegExp constructor (crash on special chars) - C3: Convert STATE_TEMPLATE to stateTemplate() function (stale timestamp) - C4: Validate ignorePatterns length to prevent ReDoS - W3: Path traversal guard on agentId in resolveAgentWorkspace + discoverAgents - W7: Correct ISO 8601 week number calculation at year boundaries - W8: Fix false tag dedup with section-specific regex extraction - Add context-engine-evaluation.md (decision: hooks-only, no CE variant) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
150 lines
5.1 KiB
JSON
150 lines
5.1 KiB
JSON
{
|
|
"id": "memory-continuity",
|
|
"name": "Memory Continuity",
|
|
"description": "Preserves working state across /new, reset, compaction, and gateway restarts via a simple markdown checkpoint file.",
|
|
"version": "5.0.1",
|
|
"author": { "name": "dtzp555-max", "url": "https://github.com/dtzp555-max" },
|
|
"license": "MIT",
|
|
"repository": "https://github.com/dtzp555-max/memory-continuity",
|
|
"category": "memory",
|
|
"tags": ["memory", "continuity", "state", "recovery", "markdown", "zero-dependency"],
|
|
"icon": "brain",
|
|
"minOpenClawVersion": "2026.3.0",
|
|
"source": "https://github.com/dtzp555-max/memory-continuity",
|
|
"interop": {
|
|
"complements": [
|
|
{
|
|
"id": "lossless-claw",
|
|
"reason": "MC uses lifecycle hooks for working-state recovery; lossless-claw uses the contextEngine slot for lossless context compression. They occupy different plugin slots and serve different purposes — install both for best results."
|
|
}
|
|
],
|
|
"conflicts": [],
|
|
"slot": "hooks-only",
|
|
"slotNote": "Does NOT occupy the contextEngine slot. Safe to run alongside any context engine."
|
|
},
|
|
"configSchema": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"maxStateLines": {
|
|
"type": "number",
|
|
"default": 50,
|
|
"description": "Max lines for CURRENT_STATE.md before auto-compress warning"
|
|
},
|
|
"archiveOnNew": {
|
|
"type": "boolean",
|
|
"default": true,
|
|
"description": "Archive CURRENT_STATE.md to session_archive/ on /new"
|
|
},
|
|
"autoExtract": {
|
|
"type": "boolean",
|
|
"default": true,
|
|
"description": "Auto-extract working state from conversation at agent_end"
|
|
},
|
|
"maxArchiveCount": {
|
|
"type": "number",
|
|
"default": 20,
|
|
"description": "Maximum number of archive files to keep in session_archive/"
|
|
},
|
|
"ignorePatterns": {
|
|
"type": "array",
|
|
"default": [],
|
|
"description": "Regex patterns to ignore sessions (e.g. cron jobs, subagent noise). Matched against first user message."
|
|
},
|
|
"sessionLogging": {
|
|
"type": "boolean",
|
|
"default": true,
|
|
"description": "Write session summaries to memory/sessions/ daily logs"
|
|
},
|
|
"tailProtectCount": {
|
|
"type": "number",
|
|
"default": 3,
|
|
"description": "Number of recent critical message pairs to protect during compaction"
|
|
},
|
|
"summaryEnabled": {
|
|
"type": "boolean",
|
|
"default": true,
|
|
"description": "Generate daily and weekly summaries from session logs"
|
|
},
|
|
"relevanceInjection": {
|
|
"type": "boolean",
|
|
"default": true,
|
|
"description": "Inject relevant historical context at session start"
|
|
},
|
|
"maxRelevanceItems": {
|
|
"type": "number",
|
|
"default": 3,
|
|
"description": "Maximum number of relevant history items to inject"
|
|
},
|
|
"archiveDecayDays": {
|
|
"type": "number",
|
|
"default": 30,
|
|
"description": "Days before archives move to cold storage (0 = disabled)"
|
|
},
|
|
"subagentSeed": {
|
|
"type": "boolean",
|
|
"default": true,
|
|
"description": "Inject parent working state into subagent context at startup"
|
|
},
|
|
"subagentRecovery": {
|
|
"type": "boolean",
|
|
"default": true,
|
|
"description": "Recover unsurfaced results from completed subagents back to parent"
|
|
}
|
|
}
|
|
},
|
|
"uiHints": {
|
|
"maxStateLines": {
|
|
"label": "Max state file lines",
|
|
"help": "Keep checkpoint small for fast recovery"
|
|
},
|
|
"archiveOnNew": {
|
|
"label": "Archive on /new",
|
|
"help": "Save a snapshot before session reset"
|
|
},
|
|
"autoExtract": {
|
|
"label": "Auto-extract state",
|
|
"help": "Automatically save working state when conversation ends"
|
|
},
|
|
"maxArchiveCount": {
|
|
"label": "Max archive files",
|
|
"help": "Old archives are auto-deleted when this limit is reached"
|
|
},
|
|
"ignorePatterns": {
|
|
"label": "Ignore patterns",
|
|
"help": "Skip state extraction for sessions matching these patterns (regex)"
|
|
},
|
|
"sessionLogging": {
|
|
"label": "Session logging",
|
|
"help": "Append session summaries to daily markdown logs"
|
|
},
|
|
"tailProtectCount": {
|
|
"label": "Tail protect count",
|
|
"help": "Keep N recent user/assistant pairs visible after compaction"
|
|
},
|
|
"summaryEnabled": {
|
|
"label": "Summary generation",
|
|
"help": "Auto-generate daily/weekly summaries from session logs"
|
|
},
|
|
"relevanceInjection": {
|
|
"label": "Relevance injection",
|
|
"help": "Inject related history when starting a new session"
|
|
},
|
|
"maxRelevanceItems": {
|
|
"label": "Max relevance items",
|
|
"help": "How many related history entries to inject (2-5)"
|
|
},
|
|
"archiveDecayDays": {
|
|
"label": "Archive decay days",
|
|
"help": "Move archives older than N days to cold/ subfolder (0 to disable)"
|
|
},
|
|
"subagentSeed": {
|
|
"label": "Subagent seeding",
|
|
"help": "Give subagents parent context so they understand the broader task"
|
|
},
|
|
"subagentRecovery": {
|
|
"label": "Subagent recovery",
|
|
"help": "Pull completed subagent results back into parent state"
|
|
}
|
|
}
|
|
} |