Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

dsh-llmwiki

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

TypeScript port of llmwiki (Python: llmwiki-harness on PyPI), packaged as a native dsh plugin.

What it does

Mechanism dsh extension point
Inject relevant wiki knowledge into the same turn's model request session/event (agent/inbox/spliced, pre-assembly live event) → ctx.systemPrompt.context()
Teach the model about memory ctx.systemPrompt.section()
memory_search — model recalls prior sessions / curated notes ctx.tools.register()
memory_save — model persists durable insights ctx.tools.register()
Auto-capture every turn to chronicle/daily/YYYY-MM-DD.md session/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

Key Default Meaning
vaultPath ~/llmwiki-vault Markdown vault path; structure created if missing
tokenBudget 2000 Max tokens of injected wiki context
strategies [keyword, graph, temporal] Enabled recall strategies
daysBack 7 Temporal look-back window
topK 5 Results per retrieval
priority relevance Assembly priority: relevance / recency / diversity / structured
cacheTtl 300 Cache TTL seconds
autoInject true Inject wiki context on each user message
autoCapture true Append each turn to the daily chronicle

How the pieces map from the Python original

Python (llmwiki) TypeScript (dsh-llmwiki)
core/retriever.py src/retriever.ts
core/assembler.py src/assembler.ts
core/cache.py src/cache.ts
vault/capture.py src/capture.ts
search/python_engine.py merged into retriever.ts (keeps the package zero-dep)
OpenClawMemoryHook adapter the 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

About

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.

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages