dsh-web
zhu1090093659/dsh-webDeepSeek Harness(DSH)Web 插件聚合生态包 · 一切皆插件,创意工坊分发(dsh-market.com)
DSHACP is a plugin for DeepSeek Harness (DSH). Once installed, you can chat with DeepSeek directly inside the Zed editor and have it read files, write code, and run commands for you.
In one sentence: DSHACP is the "translator" between Zed and DeepSeek.
You (typing questions in Zed)
│
▼
Zed editor (agent panel)
│ ← talks over the ACP protocol
▼
dsh --profile dshacp (DSH with the DSHACP plugin)
│
▼
DeepSeek (the model that actually answers and writes code)
Out of the box, Zed knows how to talk to Claude, GPT, and a few others. Once you add the DSHACP plugin to DSH, Zed gains a new external agent named DSH, backed by DeepSeek.
dsh --profile acp?Since DSH 0.1.2, npm ships both @deepseek-ai/dsh-acp (dsh --profile acp) and this plugin
@hanxu131/dshacp (dsh --profile dshacp). Both speak ACP v1 over stdio, but they target
different jobs — do not install both bridges into the same profile.
Official @deepseek-ai/dsh-acp | DSHACP (this plugin) | |
|---|---|---|
| Launch | dsh --profile acp | dsh --profile dshacp |
| Audience | CI, scripts, automation pipelines | Interactive ACP clients such as Zed |
| Sessions | Basic new / prompt / cancel | Full lifecycle: list / load / resume / delete / close |
| Streaming | Mostly turn-level text | Token-level assistant/chunk, reasoning, tool I/O |
| Approval | Minimal | Pushes request_permission to the client (allow once / always) |
| Config | None | Zed panel: model / thinking / permission / mode (agent presets) |
| Extras | None | Slash commands, plans, ask_user_question (elicitation), HTTP MCP forwarding, optional hybrid file writes |
| Install | Bundled with official profile | dsh plugin --profile dshacp add @hanxu131/dshacp |
In short: official ACP is deliberately narrow for machines; DSHACP is a widened bridge for humans in Zed.
Zed ──ACP──► dsh --profile dshacp ──► @hanxu131/dshacp (this plugin)
CI ──ACP──► dsh --profile acp ──► @deepseek-ai/dsh-acp (official — keep separate)
Open a terminal and run:
dsh --version
If it prints a version number, DSH is ready. If it says command not found,
install DSH first:
npm install -g @deepseek-ai/dsh
The DeepSeek API key is configured on the DSH side by the maintainer — you don't need to worry about it in this tutorial.
Download and install it from https://zed.dev. This plugin only works with Zed.
In a terminal, run this one command:
dsh plugin --profile dshacp add @hanxu131/dshacp
First-time installs fetch the latest version (
latest) directly — no version number needed.
If you already installed it and want to upgrade, prefer the update command
(no version number needed):
dsh plugin --profile dshacp update @hanxu131/dshacp
For this to work reliably, permanently disable the release-age gate in the
profile's pnpm-workspace.yaml by adding one line:
# open ~/.dsh/profiles/dshacp/pnpm-workspace.yaml, add below the autoInstallPeers line:
minimumReleaseAge: 0
Without this line, a version released only recently (pnpm's default "minimum release age" is a few days) gets blocked by supply-chain gating and
updatewrongly reportsAlready up to date. Setting it to0disables the gate permanently, soupdatealways fetches the latest version.
After upgrading, quit and reopen the DSH session in Zed (or restart the
dsh --profile dshacp process) so the new code is actually loaded.
Alternative: if you'd rather not edit the config, you can pin the version explicitly —
dsh plugin --profile dshacp add "@hanxu131/dshacp@^0.2.0". But because of pnpm's lock behavior,updateis the easier day-to-day choice.
acp profile (0.2.0+)Since DSH 0.1.2, official dsh --profile acp is reserved for @deepseek-ai/dsh-acp
(automation-only ACP). DSHACP uses its own profile dshacp — do not install both
bridges into the same profile.
If you previously installed into ~/.dsh/profiles/acp:
dsh plugin --profile acp remove @hanxu131/dshacp
dsh plugin --profile dshacp add @hanxu131/dshacp
Then change Zed's "args": ["--profile", "acp"] to "dshacp" and restart the DSH session.
Breaking it down:
dsh plugin = use DSH's plugin manager--profile dshacp = install into a profile named dshacp (created automatically if missing)add @hanxu131/dshacp = install the DSHACP pluginHow to know it worked: the command finishes without error, ending with
something like Done in Xs.
To double-check, run
dsh --profile dshacp --dump-config— you should seedshacp-related config rows in the output.
Remote SSH is optional and not included by default. If you want it, add one more plugin:
dsh plugin --profile dshacp add @linxin666/dsh-ssh
Cmd + , (macOS) or Ctrl + , to open Settings.{
"agent_servers": {
"DSH": {
"type": "custom",
"command": "dsh",
"args": ["--profile", "dshacp"],
"env": {}
}
}
}
Here
commandisdsh(notdshacp): Zed launchesdsh --profile dshacp, which boots the profile we just installed. Leaveenvempty.
How to know it worked: an option named DSH appears in Zed's agent list.
Hi, tell me what you can do.
How to know it worked:
If it gets stuck, see "Troubleshooting" below.
command not found: dshDSH isn't installed. Go back to "Before you start" item 1 and run
npm install -g @deepseek-ai/dsh. If you use a version manager like nvm, open a
new terminal window and try again.
The key is configured on the DSH side (the maintainer's responsibility), not by this plugin — ask the maintainer to add the DeepSeek API key to DSH.
dev: open acp logs to look for errorsConversations are saved under a .sessions folder in the current project
directory (a new project = a new set of conversations). To store them all in
one place, set the DSH_SESSIONS_ROOT environment variable (see below).
add doesn't upgrade to the new versionThis is pnpm's version-locking / release-age gating, not a mistake in the command:
dsh plugin add wraps pnpm's add. Once the profile's pnpm-lock.yaml has
pinned a version, add won't jump to a newer version even if one exists on
npm — it just prints Already up to date.update shows Already up to date
too.Recommended fix: disable the gate permanently and use update (see
"Step 1 → Updating to a newer version"). Add minimumReleaseAge: 0 to
~/.dsh/profiles/dshacp/pnpm-workspace.yaml, then the upgrade command is simply:
dsh plugin --profile dshacp update @hanxu131/dshacp
If you'd rather not edit the config, pin the version explicitly instead (profile
acp, package @hanxu131/dshacp, upgrading 0.1.3 → 0.1.4):
# ✅ Works ad hoc: pin the target range explicitly
dsh plugin --profile dshacp add "@hanxu131/dshacp@^0.1.4"
# ❌ Does NOT work: no version, or only @latest — both are blocked by locking/gating
dsh plugin --profile dshacp add @hanxu131/dshacp
dsh plugin --profile dshacp add "@hanxu131/dshacp@latest"
After upgrading, restart the DSH session in Zed (or restart the
dsh --profile dshacp process) so the new code takes effect.
| Variable | Effect |
|---|---|
DSH_SESSIONS_ROOT | Where sessions are stored (default ./.sessions) |
DSH_PERMISSION_MODE | workspace-write (default, shows confirmations) or danger-full-access (no confirmations) |
DSHACP_HYBRID | Set to 1 to enable hybrid mode: file writes are delegated to Zed as reviewable diffs |
Once installed, you can pick model, thinking strength, Permissions, and mode directly in Zed's DSH panel. You can also pin defaults in the config (the example below is illustrative — use whatever the panel actually shows):
"DSH": {
"type": "custom",
"command": "dsh",
"args": ["--profile", "dshacp"],
"env": {},
"default_config_options": {
"model": "deepseek-official:deepseek-v4-pro",
"thought_level": "high",
"permission": "workspace-write"
}
}
The model value is provider:model; a bare model id also works and resolves
to the provider that owns it.
Permissions (permission) controls the sandbox and approval policy. Typical values:
workspace-write (default): sandbox restricts writes outside the workspace; sensitive operations prompt for confirmationdanger-full-access: no sandbox restrictions and no confirmation promptsmode is the agent preset (tooling / skill set) and is separate from Permissions; do not confuse it with the ACP doc example where a mode option controls permission behavior.
If you'd rather not use a DSH profile, you can install the standalone dshacp
command instead:
npm install -g @hanxu131/dshacp
Then in Zed set command to dshacp with an empty args. The functionality is
identical to the plugin method.
git clone git@github.com:ECHOUniverse/dshacp.git
cd dshacp
npm install
npm run build # compile TypeScript
npm test # run tests
Do not npm link the source tree — it pulls the repo's node_modules/ into the
profile, which duplicates Cordis plugins (deployment:persona already registered)
or breaks imports (schemastery not found).
From the repo root:
./scripts/dev-link-dsh-profile.sh # build → npm pack → install into ~/.dsh/profiles/dshacp
After code changes, re-run that script and restart your Zed DSH session. To restore the registry release:
./scripts/dev-unlink-dsh-profile.sh
uv/uvx and the
qwenmm plugin, you can paste screenshots into Zed for the model to "see". See
docs/P5-image-paste-qwenmm.md.dsh plugin --profile dshacp add @linxin666/dsh-ssh.DSHACP_HYBRID=1 — file edits appear as reviewable diffs.initialize, session/new, session/load, session/resume,
session/list, session/delete, session/close, session/set_config_option,
session/prompt, session/cancelsession/request_permission, session/request_elicitation,
session/updateauthenticate/logout, session/set_mode,
fs/*, terminal/*src/bin.ts — entry point for the standalone binarysrc/index.ts — app plugin (the ACP bridge)src/bridge.ts — ACP v1 bridge (sessions, streaming, approval, …)src/codec.ts — codecscordis.yml / cordis.patch.yml / dshacp.patch.yml — composition config
(cordis.patch.yml is the layer applied by the plugin install)tests/ — testsdocs/DESIGN.md*-fact-sheet.md files under docs/MIT — see LICENSE.