DSH-Plugs
A monorepo of plugins for the DeepSeek Harness (DSH) — one folder = one plugin.
Plugins
@just-genius/dsh-session-navigator
A Codex-style message navigator rail: a vertical tick rail on the conversation transcript with one tick per user message, active highlight, stepped hover, and smooth jump.

@just-genius/dsh-codex
The consolidated Codex shell: settings, Codex-style navigation, the right-side side.panel host, and a Warp-style Terminal panel backed by a real login-shell PTY at /dsh-codex/terminal/ws.
@just-genius/dsh-model-custom-ex
Replaces the official Models settings page (fork of ui-settings-models) to add per-model dropdown multi-selects for vision (input) and thinking strength (reasoningEfforts) — the two controls the stock page punts to settings.yaml.

@just-genius/dsh-plugin-marketplace
Adds a Marketplace tab to Settings → Plugins. It browses this repo plus the awesome-dsh-plugin catalog, marks already-installed plugins, and can copy or run the catalog install command (restart required).
@just-genius/dsh-desktop-update
A DSH-Desktop update badge next to the sidebar Settings button, driven by window.dshDesktop (Electron preload bridge). Idle state is a quiet question-mark that opens versions and auto-check gates; when an update is available it turns into an accent arrow. App updates jump to GitHub Releases; DSH runtime updates install in place (pnpm) and ask for a restart. Skip a version and the prompt returns only when a newer one appears. In a plain browser (no bridge) it renders nothing.

@just-genius/dsh-wechat-chat
Turns the web surface into a WeChat-style messenger: chat list, green/white bubbles, and an agent that texts short progress updates while it works. Switch back from 我.
Repository layout
DSH-Plugs/
├── package.json # root workspace (shared build/type toolchain)
├── pnpm-workspace.yaml # packages: ['plugins/*']
├── tsconfig.base.json # shared TS config
└── plugins/
└── session-navigator/ # one plugin per folder
What a plugin is
A plugin is a Cordis plugin npm package split in two halves:
| Half | Source | Output | Role |
|---|---|---|---|
| node | src/index.ts |
lib/index.js |
Host entry (usually an empty apply for pure UI plugins) |
| browser | src/client/index.tsx |
lib/client.js |
Browser entry, registered via window.__ModuleLoader__.load({ id, factory }) and mounting React panels with ctx.slots.register in apply |
Two key declarations in package.json:
dsh.client— declares the browser-side injection (injectlists the client package names it depends on;platform: web).dsh.bundle.patch— points atcordis.patch.yml, so installing the package automatically inserts its loader row into the profile.
Commands
pnpm install # install dependencies
pnpm build # build all plugins (src → lib)
pnpm watch # watch and rebuild
pnpm typecheck # type-check
pnpm clean # remove all lib/
Adding a plugin
- Copy a
plugins/*folder and rename it to your plugin name. - Set
package.json'sname(keep the@just-genius/dsh-*prefix). - Edit
src/index.ts(node half) andsrc/client/index.tsx(browser half). pnpm build.
Installing a plugin
# Link a local folder into the profile (relative paths anchor to the current directory)
dsh plugin --profile web add ./plugins/session-navigator
Because the package declares dsh.bundle.patch, it joins the profile's bundle layer automatically on install; refresh the web page to see it.
Uninstall:
dsh plugin --profile web remove @just-genius/dsh-session-navigator
No comments yet. Be the first to write one.