fango19961106-dotcom
dsh-knowledge-graph
Durable knowledge tools for DeepSeek Harness: kg_remember/kg_search/kg_recent — zero-dependency node:sqlite FTS5, one file, survives session ends
- Stars
- 0
- Language
- TypeScript
- Created
- Aug 17, 2026
- Updated
- Aug 17, 2026
Introduction
dsh-knowledge-graph
Durable knowledge graph plugin for DeepSeek Harness (DSH).
Gives every agent session three model-facing tools backed by one embedded FTS5 database — so lessons, patterns and decisions survive session ends, preset switches and process restarts:
| Tool | Purpose |
|---|---|
kg_remember | Persist a lesson / pattern / decision / field note / false positive |
kg_search | BM25 full-text recall across everything ever remembered |
kg_recent | Newest entries — cheap context refresh at session start |
Extracted from the agent-knowledge-graph architecture (L1 entries → L3 BM25 recall → L4 memory), compressed into a single zero-dependency plugin.
Features
- Zero npm dependencies — storage is Node's built-in
node:sqlite(FTS5, WAL mode, porter tokenizer) - One file, one store —
~/.local/share/dsh-knowledge-graph/knowledge.db(respects$XDG_DATA_HOME), shared by every session and preset in the profile - Triggers keep FTS in sync — insert/delete triggers, no manual reindex
- Sanitized MATCH input — model-supplied queries are stripped of FTS operators; malformed input falls back to recent-listing instead of erroring
- Clean unload — the DB handle closes when the plugin unloads (Cordis effect unwinding)
Install
Requires Node >= 22.5 (for node:sqlite).
# from a checkout
git clone https://github.com/fango19961106-dotcom/dsh-knowledge-graph
cd dsh-knowledge-graph
Then add to a DSH profile (a running dsh is a plugin tree composed of bundles — add this as an out-of-tree plugin):
mkdir -p ~/.dsh/plugins
cp -r . ~/.dsh/plugins/dsh-knowledge-graph
and list it in your profile's cordis.patch.yml:
- insert:
- id: knowledge-graph
name: '~/.dsh/plugins/dsh-knowledge-graph/src/index.ts'
(or install from npm once published: npm i dsh-knowledge-graph, then reference dsh-knowledge-graph by name in the patch file).
Tool contract
kg_remember:
{
"kind": "lesson | pattern | decision | field_note | false_positive",
"title": "One-line imperative summary",
"body": "Self-contained note: what happened, the rule, the evidence",
"tags": ["optional", "keywords"],
"project": "optional-scope"
}
kg_search / kg_recent return ranked hits with «highlighted» snippets (FTS5 snippet()).
Verify without a model
node --experimental-strip-types -e "
import('./src/store.ts').then(async m => {
const s = new m.KnowledgeStore('/tmp/kg-test.db');
s.remember('lesson', 'Pin third-party action SHAs', 'Tag-pinned actions can be mutated; @vX tags are moveable refs.', ['supply-chain'], 'dsh-plugin');
console.log(JSON.stringify(s.search('supply chain'), null, 1));
s.close();
})"
License
MIT