An extension suite for the DeepSeek Harness (DSH) Web GUI: an MCP client hub (stdio / Streamable HTTP / SSE) with a web management console, plus skill, slash command, project & global memory, and prompt management. Plain ESM JavaScript, no build step.
Connects MCP servers over stdio, Streamable HTTP and SSE. Per-server state machine (connecting / connected / reconnecting / error), live logs (ring buffer + $DSH_HOME/dshext/logs/mcp-.log), discovered-tool list, automatic reconnect with exponential backoff. Discovered tools are bridged to the model as native tools named mcp____. Model tools: mcp_status, mcp_restart.
Memory
dshx/memory
Global memory ($DSH_HOME/dshext/memory/*.md) and project memory (/.dsh/memory/*.md), injected into the system prompt before every model step. Model tools: memory_list, memory_read, memory_write, memory_delete. Project-scope writes follow the session sandbox policy (approval + sandbox_permissions escalation, same as the built-in write tool).
Skills
dshx/skills
Creates / edits / deletes skill bundles in the roots the harness skill registry already discovers ($DSH_HOME/skills, /.dsh/skills); changes appear in the session skill catalog immediately. Model tools: skill_create, skill_edit, skill_delete.
Commands
dshx/commands
User-defined slash commands as YAML files ($DSH_HOME/dshext/commands/*.yaml, /.dsh/commands/*.yaml). Named commands are registered eagerly; a universal dispatcher resolves the calling session's project dir, so project commands work in every workspace. is replaced with the typed input. Model tool: .
dshx · DSH Hub
/cmd [args]
{{args}}
command_define
Prompts
dshx/prompts
Prompt library ($DSH_HOME/dshext/prompts/*.md) registered as ordered system-prompt sections (dshx:prompts/, configurable order / enable), a supplementary persona ($DSH_HOME/dshext/persona.md), and an assembled system-prompt inspector (rendered with a live agent scope so variables like {{model}} resolve).
Manager
dshx/manager
Serves the web management console at http://127.0.0.1:3080/dshext/ (five tabs: MCP / Skills / Commands / Memory / Prompts, plus a JSON API under /dshext/api/*) and injects a floating "⚙ 扩展管理" button into the Web GUI.
Installation
Method 1 — install as a dsh bundle (persistent)
dsh plugin --profile web add github:YZz-S/dshx
Restart dsh web. The dsh.bundle entry in package.json applies
cordis.patch.yml, which mounts the six rows above.
If you previously added the dshx rows manually to your profile's
cordis.patch.yml (the local ./packages/dshx/... variant), remove those
rows first — both share the row ids dshx-* and mounting them twice would
register the tools and routes twice.
Method 2 — manual local install (no npm / GitHub)
Copy lib/*.mjs to a directory inside your profile, e.g.
$DSH_HOME/profiles/web/packages/dshx/lib/;
Add the rows from cordis.patch.yml to $DSH_HOME/profiles/web/cordis.patch.yml,
replacing name: dshx/ with name: ./packages/dshx/lib/.mjs;
Restart dsh web (or let the patch watcher hot-apply it).
Dependencies (@deepseek-ai/*, @modelcontextprotocol/sdk, chokidar,
js-yaml) all ship with every dsh installation and resolve through the
profile's node_modules — the plugin itself has no npm dependencies.
Quick start
Open the Web GUI and click the floating ⚙ 扩展管理 button (or visit
http://127.0.0.1:3080/dshext/).
MCP tab → 添加 MCP 服务器 → pick a transport:
stdio: command npx, args -y @modelcontextprotocol/server-github
(env GITHUB_TOKEN as JSON);
The card turns green (connected, N 个工具) and the model can call
mcp____ immediately. Logs and the tool list are on the card.
Use the other tabs to write memory / skills / commands / prompt sections,
or just ask the model to do it (memory_write, skill_create,
command_define, …).
MCP server configuration
Server configs live in $DSH_HOME/dshext/mcp.json (managed by the console or
the model tools) — example:
# $DSH_HOME/dshext/commands/review.yaml
name: review
description: Review the current changes
hint: '[path]'
prompt: |
Review {{args}} and output an issue list ordered by severity.
User-level commands register as /review; project commands are callable via
/cmd review (and /cmd alone lists everything).
Model-facing tools
mcp_status · mcp_restart · memory_list · memory_read · memory_write ·
memory_delete · skill_create · skill_edit · skill_delete ·
command_define — plus every discovered MCP tool as mcp____.
Data files
Feature
Location
MCP server config
$DSH_HOME/dshext/mcp.json
MCP logs
$DSH_HOME/dshext/logs/mcp-.log
Global memory
$DSH_HOME/dshext/memory/*.md
Project memory
/.dsh/memory/*.md
User skills
$DSH_HOME/skills//SKILL.md
Project skills
/.dsh/skills//SKILL.md
User commands
$DSH_HOME/dshext/commands/.yaml
Project commands
/.dsh/commands/.yaml
Prompt sections
$DSH_HOME/dshext/prompts/.md
Supplementary persona
$DSH_HOME/dshext/persona.md
Development & tests
# syntax check every module
node --check lib/*.mjs
# 18 smoke checks (mock cordis ctx; real file round-trips; needs the dsh
# dependency tree resolvable — run from an installed copy, or give this
# package a node_modules junction to $DSH_HOME/profiles/node_modules)
node test/selfcheck.mjs
# fixture stdio MCP server used to verify the hub end to end
node test/test-mcp-server.mjs # then add it in the console:
# transport stdio, command
, args
Security
See SECURITY.md. Credentials are environment variables /
config values only — nothing is hardcoded; the console binds to the same
local-only DSH web server (127.0.0.1).