dsh-memento
Bounded, layered, approval-gated, auditable cross-session memory for DeepSeek Harness — a capability seam (ctx.memory service + local SQLite provider + memory tool + frozen snapshot injection), not another memory warehouse
AI Analysis
适合需要跨会话持久化记忆、审批式写入和本地审计的用户。
Install
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:PerryLink/dsh-mementoREADME
Read the full README ↗Configuration
All tunables are Schemastery Config fields (changeable from cordis.yml). Invalid values fail loudly at load. Override under the memento row.
Settings panel. When the DSH settings service is mounted, every field below (except enabled) is editable from the plugin's own dsh-memento entry in the DSH settings sidebar (a top-level section, like General or Plugins); edits land in the settings user layer (settings.yaml) and need no file editing. Nearly everything applies live (write policies, language, budgets, limits, proposals, panel, dbPath / auditRetentionDays via a store reopen, retrieval.vector via a retriever swap) — only snapshotOrder needs a DSH reload. Without the settings service everything falls back to the composed cordis config, exactly as before. The floating panel button can be hidden from the same page (panel.enabled).
| Key | Default | Meaning |
|---|---|---|
enabled | true | Master switch; false removes the service, tools, snapshot, command, panel, and answerer (not editable from the settings page — a disabled plugin has no settings entry) |
panel.enabled | true | Show the web panel's floating button; saving false from the settings page hides the 🧠 entry immediately, no reload needed (the settings page itself stays reachable) |
dbPath | '' → $DSH_HOME/dsh-memento/memory.db | Absolute, or relative to $DSH_HOME (falls back to ~/.dsh on Windows) |
budgets.user.userGlobal | 2000 | Hard character budget for the user track's user-global layer |
budgets.user.workspace | 2000 | Hard character budget for the user track's workspace layer |
budgets.agent.userGlobal | 4000 | Hard character budget for the agent track's user-global layer |
budgets.agent.workspace | 4000 | Hard character budget for the agent track's workspace layer |
writePolicy | 'ask' | Default write policy: ask / auto / off (model-invisible) |
writePolicies | {} | Per-track/scope or per-source overrides (e.g. user/workspace, source:claude) |
language | 'en' | Model-visible and command output language: en / zh |
snapshotOrder | -50 | Snapshot section order (after harness identity, before persona) |
maxEntriesPerQuery | 20 | Default per-query result cap (hard-capped at 1000) |
commandListLimit | 50 | Entries rendered per /memory list / query |
commandAuditLimit | 10 | Audit rows rendered per /memory audit |
recall.historyLimitDefault | 8 | memory_recall sessions scanned by default |
recall.snippetCap | 5 | memory_recall snippets per session |
recall.snippetChars | 300 | memory_recall snippet characters |
recall.windowDays | 30 | memory_recall recency window in days |
retrieval.vector | false | Semantic recall switch: true enables memory_recall vector recall (fake hash embedding) when an embedding provider is available; otherwise degrades to substring |
panelEntriesLimit | 200 | Web panel entries page size |
panelAuditLimit | 20 | Web panel audit rows by default |
auditRetentionDays | 0 | Audit retention (0 = keep forever) |
proposals.enabled | true | Auto-capture a memory proposal after each successful compaction |
proposals.maxChars | 2000 | Proposal character cap |
proposals.maxPending | 8 | Pending proposal cap |