DSH Plugin Store
← Back to home

Towzai

dsh-memory

Cross-session memory plugin for DeepSeek Harness (dsh): embedding search + automatic system-prompt injection

Stars
0
Language
TypeScript
Created
Aug 13, 2026
Updated
Aug 13, 2026
Other
GitHub repo

Introduction

dsh-memory 🧠

Cross-session memory plugin for DeepSeek Harness (dsh).

YAML-backed remember / recall / forget / pin tools with embedding search and automatic system-prompt injection β€” the agent "naturally carries" memory without having to remember to call a tool.

English | δΈ­ζ–‡

✨ Features

FeatureDescription
remember / recall / forget / pinFour tools for write, semantic search, soft-delete, and force-inject pinning
Embedding searchHybridSearch (keyword 2-gram + local embedding via ollama, RRF fusion) β€” catches paraphrases keyword search misses
Automatic injectionsystemPrompt.context() at order -50: high-importance + recent memories injected every session, visible in the WebUI as a "δΈŠδΈ‹ζ–‡ζ³¨ε…₯" row
Dynamic topic injectionagent/pre-step listener retrieves memories matching the user's current message (with a retrieval gate that skips "ε₯½/葌/ok" chatter)
Provenance labelingInjected memories are prefixed "Retrieved memories from the memory store (not conversation history)" so the model never mistakes them for dialogue
Data safetySerialized write queue (no lost updates), corrupt-file quarantine + backup, atomic writes, mtime cache invalidation

πŸ“¦ Install

# From source (inside a dsh checkout)
pnpm install
pnpm run build

# Register in your profile patch (e.g. ~/.dsh/profiles/web/cordis.patch.yml)
- insert:
    - id: dsh-memory
      name: '@towzai/dsh-memory'
      config:
        file: /path/to/memory.yaml
        injectLimit: 8

Requires a local ollama instance with an embedding model (default qwen3-embedding:0.6b; override via DSH_MEMORY_EMBED_MODEL).

πŸ› οΈ Tools

ToolPurpose
rememberSave a memory (content / category / tags / importance / forceInject / source)
recallHybrid search (keyword + embedding) top-N
forgetSoft-delete (marks retired, keeps history)
pinToggle forceInject β€” pinned memories always appear at session start

πŸ—‚οΈ Storage

Single YAML file (default memory.yaml). Each entry:

- id: MEM-20260814-001
  content: "..."
  category: preference | project | lesson | fact
  tags: [tag1, tag2]
  importance: high | normal | low
  created: 2026-08-14
  updated: 2026-08-14
  source: user | agent | conversation
  retired: false
  forceInject: false
  vector: [...]   # 1024-dim embedding, auto-computed on write

πŸ”§ Architecture

src/
β”œβ”€β”€ index.ts    # plugin entry: tools + injection + pre-step listener
β”œβ”€β”€ storage.ts  # Storage interface + YamlStorage (queue, mtime cache, quarantine)
β”œβ”€β”€ search.ts   # KeywordSearch / EmbeddingSearch / HybridSearch (RRF) / OllamaEmbedder
β”œβ”€β”€ inject.ts   # selectForInjection / renderSection / buildMemorySectionSync
β”œβ”€β”€ dynamic.ts  # DynamicInjector (per-session dedup + retrieval gate)
└── types.ts    # data model (+ reserved fields: vector/scope/weight for future)

Design doc: docs/2026-08-13-dsh-memory-design.md.

⚠️ Notes

  • Embedding model change invalidates stored vectors (dimension mismatch is detected and logged)
  • The plugin is developed against dsh v0.1.0-rc.5; peer dependency ranges may need bumping

πŸ”— References

This plugin is part of the DeepSeek Harness (dsh) plugin ecosystem.

πŸ“„ License

MIT