Third-party project Independent open-source project — not affiliated with DeepSeek, Doubao or their official teams, and not authorised or endorsed by them.

DSH plugin · local-first memory

Memory that
earns its place
in the prompt

Long-term memory for DeepSeek Harness.

  • 5memory kinds
  • 3languages
  • 0dependencies
  • ~34MBsingle file
  • MITlicense
01 / features

What it actually does

Every feature exists to answer one question.

Five memory kinds

global and persona every turn.

Relevance, not bulk

Only matching entries enter the prompt.

Multi-topic coverage

Each topic gets its own representative entries.

Explicit recall

Ask for everything about a topic.

Review inbox

Inferences wait for your approval.

Token dashboard

See the byte and token split.

Model decides, with evidence

Persona entries must be dated and anchored.

Update, never duplicate

One fact, one entry.

Single-file manager

One exe with Node embedded.

02 / how it works

From one message to one prompt

Every turn re-reads the store from disk.

Read the store

Local store read every assembly (SQLite, JSON fallback).

Tokenize the message

CJK grams plus latin tokens.

Score and gate

Tag hits weigh the most.

Budget the bytes

Always-on first, then per cluster.

Render the section

Labelled sections plus index.

Nothing is injected silently.

03 / quick start

Running in three steps

Windows 10/11.

  1. 1

    Run the manager

    Double-click the exe.

  2. 2

    Attach to DSH

    Tray ▸ Attach to DSH.

  3. 3

    Restart DSH, then talk

    Bundles load at boot only.

same thing from a terminal
:: 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
04 / download

Everything is pre-hosted here

Program, source package and documentation are served from this site.

dsh-memory-manager.exe

…

The single-file manager.

dsh-thirdparty-memory-0.4.0.zip

…

Full source release.

Tutorial

Markdown · TXT · 3 languages

Install, configure, daily use and troubleshooting.

README

Markdown · TXT · 3 languages

Feature overview and configuration table.

05 / faq

The questions that come up

Do I have to restart DSH to change a memory?

No.

Where is my data stored?

One local database: SQLite (JSON fallback).

Can it delete everything at once?

No, and that is deliberate.

Does it work on a machine without Node?

Yes.

Which DSH builds are supported?

DSH Desktop, portable and CLI.

06 / changelog

Version history

What changed, release by release. Entries are kept for reference only: historical versions are not offered for download here.

  1. v0.4.0 2026-11-09
    • Storage moved to SQLite (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.
    • New local vector index: character / word n-gram hashing with TF weights, vectors stored as Float32 BLOBs in SQLite, retrieval scored by cosine similarity blended with keyword hits.
    • Default data directory moved out of the plugin folder (%APPDATA%\dsh-thirdparty-memory\), so updating the plugin no longer touches memory files.
  2. v0.3.0 2026-11-09
    • Five memory kinds, an inbox for reviewing inferred entries, and keyword-relevant injection.
    • Memory page plus a single-file manager exe.
    • Documentation in three languages, English as the root.

Earlier releases: see CHANGELOG in the repository.

07 / bug fixes

Fixed bugs

Sorted by severity. Each entry states what broke, why it broke, and what changed in the code.

P levels

  • P0crash / data loss
  • P1feature unavailable
  • P2UX / edge cases
  1. P0

    Store/MSIX DSH Desktop crashed on every restart after installing

    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.

  2. P1

    Replacing the plugin folder also overwrote data/memory.json inside it

    The 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.

  3. P2

    attach.ps1 without -DataFile silently dropped the configured dataFile line

    Called 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.