DSH Plugin Store
Back to home

chancelu

dsh-llmwiki

Local Markdown wiki as long-term memory for DeepSeek Harness — RRF-fused retrieval (keyword + wikilink graph + temporal), token-budget injection, auto-capture. Ported from llmwiki.

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

Introduction

dsh-llmwiki

Context Window = RAM, Local Wiki = Disk — long-term memory for DeepSeek Harness, powered by your local Markdown vault.

TypeScript port of llmwiki, packaged as a native dsh plugin.

What it does

Mechanismdsh extension point
Inject relevant wiki knowledge into the same turn's model requestsession/event (agent/inbox/spliced, pre-assembly live event) → ctx.systemPrompt.context()
Teach the model about memoryctx.systemPrompt.section()
memory_search — model recalls prior sessions / curated notesctx.tools.register()
memory_save — model persists durable insightsctx.tools.register()
Auto-capture every turn to chronicle/daily/YYYY-MM-DD.mdsession/event (turn/end)

Retrieval: keyword + wikilink graph + temporal strategies fused with RRF (Reciprocal Rank Fusion), assembled under a token budget, with an LRU + TTL cache. Zero runtime dependencies beyond Node.js.

Vault layout (created automatically)

my-vault/
├── raw/               # Layer 1: session dumps
├── chronicle/daily/   # Layer 2: auto-captured daily logs
├── entities/          # Layer 3: compiled knowledge
├── concepts/
├── comparisons/
├── projects/
└── queries/

Open it with Obsidian, curate Layer-3 notes with [[wikilinks]] — the graph strategy follows them.

Install

Requires Node.js ≥ 22 (same as dsh itself) and a working dsh CLI (npm install -g @deepseek-ai/dsh) with pnpm on PATH.

# from npm
dsh plugin --profile web add dsh-llmwiki

# or from a tarball
dsh plugin --profile web add ./dsh-llmwiki-0.1.1.tgz

# verify the layer, then boot
dsh --profile web --dump-config   # shows a "# == dsh-llmwiki" layer
dsh web                           # logs: [dsh-llmwiki] memory plugin loaded, vault: ...

The package declares dsh.bundle, so dsh plugin add activates it automatically — no manual patching needed.

Configure

The plugin works zero-config (vault defaults to ~/llmwiki-vault). To override, add a row to your profile's cordis.patch.yml (or a --patch overlay) — note the override restates the row by id without insert:

- id: llmwiki
  config:
    vaultPath: /path/to/your/vault   # Obsidian vault welcome
    tokenBudget: 2000
    strategies: [keyword, graph, temporal]
    daysBack: 7
    topK: 5
    autoInject: true
    autoCapture: true

A patch replaces the row's entire config, so restate every key you want to keep.

Config

KeyDefaultMeaning
vaultPath~/llmwiki-vaultMarkdown vault path; structure created if missing
tokenBudget2000Max tokens of injected wiki context
strategies[keyword, graph, temporal]Enabled recall strategies
daysBack7Temporal look-back window
topK5Results per retrieval
priorityrelevanceAssembly priority: relevance / recency / diversity / structured
cacheTtl300Cache TTL seconds
autoInjecttrueInject wiki context on each user message
autoCapturetrueAppend each turn to the daily chronicle

How the pieces map from the Python original

Python (llmwiki)TypeScript (dsh-llmwiki)
core/retriever.pysrc/retriever.ts
core/assembler.pysrc/assembler.ts
core/cache.pysrc/cache.ts
vault/capture.pysrc/capture.ts
search/python_engine.pymerged into retriever.ts (keeps the package zero-dep)
OpenClawMemoryHook adapterthe dsh plugin itself (src/index.ts)

Not yet ported: ripgrep / SQLite FTS engines (the pure-JS engine keeps installs dependency-free — contributions welcome), the LLM-driven curate pipeline (run the Python CLI alongside for now).

License

MIT