Bundle
dsh-llmwiki
Local Markdown wiki as long-term memory for DeepSeek Harness — ported from llmwiki
- Source
- chancelu
- stars
- 2 stars
- License
- MIT
- Updated
- Updated 11 days ago
Readme
# dsh-llmwiki
> **Context Window = RAM, Local Wiki = Disk** — long-term memory for [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness), powered by your local Markdown vault.
TypeScript port of [llmwiki](https://github.com/chancelu/llmwiki-harness) (Python: [`llmwiki-harness`](https://pypi.org/project/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.
```sh
# 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`:
```yaml
- 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
Install
dsh plugin --profile web add github:chancelu/dsh-llmwiki
Profile: web
With the hub plugin installed, ask your agent to install it by name — it resolves the same plan shown here.
dsh plugin --profile web add github:stvlynn/dsh.fish#path:packages/dsh-plugin-hub
install dsh-llmwiki from the hub
- This package builds from source on install. pnpm will ask you to allow its build script — that is permission to run the package’s code on your machine, outside the agent sandbox. Only allow sources you trust.
- This source has no pinned commit, so a later push upstream changes what installs. Prefer pinning a commit.