deepseek-harness
deepseek-ai
DeepSeek Harness: Everything is a Plugin.
PROJECT TOPICS
PROJECT README
中文 | English
Conversation outline for DeepSeek Harness Web — a right-side topic sidebar (TOC) like the DeepSeek web app, with scroll-spy highlighting and click-to-jump navigation.
dsh-conversation-toc is a browser-side plugin for DeepSeek Harness Web. After installation, an 「Outline」 button appears on the right side of the session header, and a conversation outline panel (or a collapsed minimap rail) floats on the right of the chat — the same reading experience as the DeepSeek web app's right sidebar:
steering follow-ups are indented sub-topics, and ## / ### headings inside assistant answers become third-level topics, so you can jump into any section of a long answer;Works on Windows / macOS / Linux — everything runs in the browser: no host service, no settings page, no platform-specific code.


expanded panel → minimap rail → hidden; the choice is remembered in localStorage.steering follow-up (level 2, indented) → assistant answer headings ## / ### (level 3).[data-chat-anchor-key] / [data-conversation-scroll]) — no private stylesheets, resilient across DSH updates.chat.order / chat.nodes), so new messages and streaming output are reflected automatically.localStorage.Either method works and is equivalent. We recommend the one-command install.
Published on npm — install with a single command:
dsh plugin --profile web add dsh-conversation-toc
Restart the dsh web service after installation.
Prefer installing from source? This GitHub repository or a local tarball work too:
# from GitHub dsh plugin --profile web add git+https://github.com/twelvecarbon/dsh-conversation-toc.git # or from a local tarball dsh plugin --profile web add C:\path\to\dsh-conversation-toc-0.1.1.tgz
Follow the detailed manual / wiring / uninstall guide below.
One npm package = a host half (an empty Cordis plugin row, lib/index.js — the feature is purely browser-side) + a client half (the outline UI, lib/client.js).
The package integrates with DSH through two declarations:
| Declaration | Purpose |
|---|---|
dsh.bundle.patch (cordis.patch.yml) |
Lets DSH recognize it as a standard bundle plugin package: dsh plugin --profile <name> add <package> installs and wires it in one command, no manual config editing |
dsh.client + exports["./client"] |
Lets the web client auto-load the outline UI at /plugins/<package>/client.js |
So for users, installation is one command — no YAML editing, no manual file copying.
npm install -g @deepseek-ai/dsh, a desktop app built on it, or npx @deepseek-ai/dsh web).npm install -g pnpm (or corepack enable).dsh is on PATH.dsh plugin --profile web add dsh-conversation-toc
This does three things (all automatic):
~/.dsh/profiles/web (auto-initializes the profile on first use);dsh.bundle declaration and writes the package name into the profile's dsh.profile.bundles layer list;cordis.patch.yml and mounts the plugin row into the app tree — no manual config editing.Same for other profiles (replace web with your profile name, e.g. dsh plugin --profile headless add ...; dsh web equals dsh --profile web).
Test a local tarball:
dsh plugin --profile web add C:\path\to\dsh-conversation-toc-0.1.1.tgz
dsh plugin)B1. Install the dependency:
cd ~/.dsh/profiles/web
pnpm add dsh-conversation-toc
# or from a local folder / tarball
# pnpm add C:\path\to\dsh-conversation-toc
B2. Wire it up (once, idempotent): append the package name to the profile's dsh.profile.bundles in ~/.dsh/profiles/web/package.json:
"dsh": {
"profile": {
"bundles": [
"@deepseek-ai/dsh-base",
"@deepseek-ai/dsh-web-app",
"dsh-conversation-toc"
]
}
}
B3. Mount the plugin row: append to ~/.dsh/profiles/web/cordis.patch.yml (create it if missing):
- insert:
- id: conversation-toc
name: 'dsh-conversation-toc'
B4. Restart the dsh web service.
dsh plugin --profile web remove dsh-conversation-toc
Or manually: remove the dependency, the dsh.profile.bundles entry, and the cordis.patch.yml row, then restart.
useSession selectors over chat.order / chat.nodes), so topics stay in sync with new messages and streaming output;[data-chat-anchor-key] anchors and the [data-conversation-scroll] scrollport, no private class names;lib/index.js is an empty host row that exists only so the package mounts as a standard DSH bundle plugin and its client bundle is discovered by the web boot graph.dsh-conversation-toc/
├── package.json # dsh.bundle.patch + dsh.client declarations
├── cordis.patch.yml # host plugin row (mount layer)
├── lib/
│ ├── index.js # host half (empty — no host service)
│ └── client.js # client half (the whole feature)
├── scripts/
│ ├── check-package.js # pre-publish contract gate (npm run check)
│ ├── smoke-test.cjs # pure-logic smoke tests (npm run test)
│ └── generate-screenshots.ps1 # regenerates docs/assets mockups (Windows)
├── docs/assets/ # README screenshots
├── CHANGELOG.md
├── LICENSE
├── README.md # English
└── README.zh.md # 中文
See CHANGELOG.md.
CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。当前命中: 无有效分类标签。