Skip to content
dsh.fish
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

  • 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.
Source