Bundle
llm-wiki-sidebar
LLM Wiki workbench for dsh-better-sidebar: browse and lint a Karpathy-style interlinked markdown wiki, open pages with the native markdown viewer, clickable [[wikilinks]] and provenance/relative .md links, and backlinks. Ships the llm-wiki agent skill.
- Source
- ApeInCodeMountain
- stars
- 1 stars
- License
- MIT
- Updated
- Updated yesterday
Readme
# llm-wiki-sidebar
English | [简体中文](README.zh-CN.md)
[](LICENSE)


[LLM Wiki](https://gist.github.com/karpathy/442a6bf555914893e9891c11519de94f) workbench for
[dsh-better-sidebar](https://github.com/omdsh-dev/DSH-better-sidebar): browse and lint a
Karpathy-style interlinked markdown wiki directly in the DSH sidebar, with full-fidelity page
preview/editing, clickable `[[wikilinks]]` and provenance links, backlinks, and the `llm-wiki`
agent skill that drives ingest/query/maintenance — packaged as one DSH plugin.
## Features
- **📚 LLM Wiki sidebar tab** — sectioned page catalog (entities / concepts / comparisons /
queries), search by slug/title/tag, quality markers (`conf: low`, `contested`), one-click open
via `betterSidebar.openFile`, and a refresh button that re-reads the wiki from disk.
- **Native markdown viewer** — wiki pages render through dsh-better-sidebar's built-in markdown
viewer (Mermaid, shiki, KaTeX, TOC, embedded HTML) with the stock preview/edit toolbar and
Ctrl/Cmd+S save. Nothing about the native viewer is replaced; the plugin only decorates its
output.
- **Clickable `[[wikilinks]]`** — preview-mode DOM decoration resolves `[[target]]` /
`[[target|label]]` against the wiki map and jumps via `openFile` (page text is never modified,
so editing/saving stays safe). Unresolvable links render struck-through with a tooltip.
- **Clickable provenance & relative `.md` links** — provenance markers (`^([来源](raw/...))`) and
any in-site relative markdown link are clickable in the preview and open through the same
`openFile` path as the catalog. The shared markdown renderer drops relative link destinations,
so the plugin pairs source-parsed links with their rendered label text instead — `fp.content`
is never rewritten, keeping edit-mode saves byte-identical.
- **Backlinks** — "🔗 Linked here (N)" bar under each wiki page.
- **Lint report** — the full 12 checks (broken links, orphans, index completeness, frontmatter
validation, stale pages, contested, quality signals, sha256 source drift, page size, tag
taxonomy, log rotation) grouped by severity; error+warn count shows as a tab badge. The same
checks are available on the CLI via the packaged `scripts/wiki_lint.py`.
- **Ships the `llm-wiki` skill** — `skills/llm-wiki/SKILL.md` + `scripts/wiki_lint.py` are
mounted by a dedicated `dsh-skill-filesystem` instance scoped to this package, so the plugin
and its skill install and uninstall as one unit.
## Requirements
- [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) 0.1.2-rc.1+
- [dsh-better-sidebar](https://github.com/omdsh-dev/DSH-better-sidebar) ≥ 0.16.0 (`openFile`
capability; tested against 0.18.0)
- Node.js ≥ 20
## Install
The wiki lives at `<session workspace>/wiki` (the sidebar file routes enforce the workspace
fence, so workspace-relative is the supported location).
### From GitHub (official bundle CLI)
```sh
dsh plugin --profile web add "github:ApeInCodeMountain/llm-wiki-sidebar"
```
Then restart `dsh --profile web` and hard-refresh the browser.
### From npm
```sh
dsh plugin --profile web add llm-wiki-sidebar
```
### Local development install
```sh
git clone https://github.com/ApeInCodeMountain/llm-wiki-sidebar
cp -r llm-wiki-sidebar ~/.dsh/profiles/web/
ln -sfn ../llm-wiki-sidebar ~/.dsh/profiles/web/node_modules/llm-wiki-sidebar
# register as a link: dependency so pnpm keeps the symlink
node -e "const fs=require('fs');const f=process.env.HOME+'/.dsh/profiles/web/package.json';const j=JSON.parse(fs.readFileSync(f));j.dependencies['llm-wiki-sidebar']='link:llm-wiki-sidebar';fs.writeFileSync(f,JSON.stringify(j,null,2)+'\n')"
```
Then restart `dsh --profile web` and hard-refresh the browser (Cmd/Ctrl+Shift+R).
### Uninstall
Remove the package via `dsh plugin --profile web remove llm-wiki-sidebar` (or delete both rows
from `~/.dsh/profiles/web/cordis.patch.yml`, the profile `package.json` entry, the
`node_modules/llm-wiki-sidebar` symlink and the `~/.dsh/profiles/web/llm-wiki-sidebar`
directory); restart DSH. Uninstalling also withdraws the packaged `llm-wiki` skill (it lives
inside the plugin directory).
## Usage
1. Tell the agent: “帮我在这个工作区初始化一个 wiki” (or "create a wiki here") — the packaged
`llm-wiki` skill creates `wiki/` with `SCHEMA.md`, `index.md`, `log.md` and the layered
directories, then ingests sources.
2. Open the **📚 LLM Wiki** tab in the sidebar: the catalog, search, and the **Lint** button.
3. Open any page for the native preview — `[[wikilinks]]`, provenance links and backlinks are
clickable; editing in the sidebar writes the file directly (bump `updated`).
## Routes (host half)
| Route | Body | Purpose |
|---|---|---|
| `POST /llm-wiki/api/scan` | `{ cwd }` | wiki page catalog |
| `POST /llm-wiki/api/lint` | `{ cwd }` | lint report |
| `POST /llm-wiki/api/map` | `{ cwd }` | slug→page map + backlink graph + raw index |
All routes enforce the same browser-trust fence as the `/api` gateway
(loopback/trusted Host + same-origin markers) and read only through the
sandbox-aware `fs` service. The plugin never writes to disk.
## Development
```sh
node --check lib/client.js && node --check lib/index.js # syntax
node test/impl.test.mjs # unit + regression (no DOM required)
```
The design notes for the clickable-link pipeline (why it pairs source links with rendered
label text instead of intercepting anchors) live in
[`docs/design-source-link-navigation-v2.md`](docs/design-source-link-navigation-v2.md).
## License
[MIT](LICENSE)
## Acknowledgments
- [Karpathy's LLM Wiki pattern](https://gist.github.com/karpathy/442a6bf555914893e9891c11519de94f)
and the MIT-licensed `llm-wiki` skill from the hermes-agent project — the packaged
`skills/llm-wiki` skill is a DSH edition of that pattern.
- [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) (MIT) — the host
runtime; the browser-trust fence in `lib/index.js` is a behavioral port of the
`/api` gateway's fence from `@deepseek-ai/dsh-client-connection` (MIT).
- [dsh-better-sidebar](https://github.com/omdsh-dev/DSH-better-sidebar) (MIT) — the sidebar
workbench this plugin extends, and the provider of the `betterSidebar` service.
Install
dsh plugin --profile web add github:ApeInCodeMountain/llm-wiki-sidebar
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 llm-wiki-sidebar from the hub
- This source has no pinned commit, so a later push upstream changes what installs. Prefer pinning a commit.