Five memory kinds
global and persona every turn.
DSH plugin · local-first memory
Long-term memory for DeepSeek Harness.
Every feature exists to answer one question.
global and persona every turn.
Only matching entries enter the prompt.
Each topic gets its own representative entries.
Ask for everything about a topic.
Inferences wait for your approval.
See the byte and token split.
Persona entries must be dated and anchored.
One fact, one entry.
One exe with Node embedded.
Every turn re-reads the store from disk.
Local store read every assembly (SQLite, JSON fallback).
CJK grams plus latin tokens.
Tag hits weigh the most.
Always-on first, then per cluster.
Labelled sections plus index.
Nothing is injected silently.
Windows 10/11.
Double-click the exe.
Tray ▸ Attach to DSH.
Bundles load at boot only.
:: attach the plugin to every detected DSH profile dsh-memory-manager.exe --install :: memory page only dsh-memory-manager.exe --start :: --stop / --restart / --status :: keep the store outside the plugin folder dsh-memory-manager.exe --store D:\dsh-memory-data :: port · language · diagnostics dsh-memory-manager.exe --port 7900 :: refuses a port already taken dsh-memory-manager.exe --lang zh-CN dsh-memory-manager.exe --dir / --data / --version
Program, source package and documentation are served from this site.
The single-file manager.
Full source release.
Install, configure, daily use and troubleshooting.
Feature overview and configuration table.
No.
One local database: SQLite (JSON fallback).
No, and that is deliberate.
Yes.
DSH Desktop, portable and CLI.
What changed, release by release. Entries are kept for reference only: historical versions are not offered for download here.
node:sqlite, WAL, zero dependencies); an existing JSON store is migrated read-only on first read, and the plugin falls back to JSON when the runtime has no node:sqlite.%APPDATA%\dsh-thirdparty-memory\), so updating the plugin no longer touches memory files.Earlier releases: see CHANGELOG in the repository.
Sorted by severity. Each entry states what broke, why it broke, and what changed in the code.
P levels
The profile's package.json was written as UTF-8 with a BOM. The host's readProfileManifest hands the file straight to JSON.parse without stripping the BOM, so it throws SyntaxError: Unexpected token '\uFEFF' and the app exits with code 1. After three consecutive crashes the host stops restarting it.
fixThe installer writes manifests without a BOM, the reader now tolerates a BOM, and -Repair rewrites existing manifests.
data/memory.json inside itThe store defaulted to data/memory.json inside the plugin's own directory, so unpacking a new version over the old one destroyed the memories together with the old code.
fixThe default data directory now lives outside the plugin folder; existing stores are copied during migration and the source file is left byte-for-byte unchanged.
attach.ps1 without -DataFile silently dropped the configured dataFile lineCalled without -DataFile, the script rewrote the profile config without that field, so the plugin quietly switched to another memory file: the old entries were still on disk but no longer read.
fixExisting configuration is preserved; the field is only written when the parameter is passed.