@openma/deepseek-harness-acp
ACP profile plugin and standalone stdio server for using the full DSH agent from Zed and other ACP clients while sharing DSH credentials and sessions.
Install
dsh plugin --profile web add @openma/deepseek-harness-acp
Sandbox test results
| Stage | Result |
|---|---|
| 1 install | ✓ |
| 2 list | ✓ |
| 3 mount | ✓ |
| 4 boot | — |
Four stages run in an isolated sandbox: install (network on) → list → mount → boot (last three with no network).
README
<p align="center">
<img src="assets/acp-x-deepseek.svg" width="520" alt="Agent Client Protocol × DeepSeek Harness" />
</p>
<h1 align="center">deepseek-harness-acp</h1>
<p align="center">
Use <a href="https://github.com/deepseek-ai/deepseek-harness">DeepSeek Harness</a> from
<a href="https://agentclientprotocol.com/">Agent Client Protocol</a> clients such as
<a href="https://zed.dev">Zed</a> and
<a href="https://github.com/openma-ai/backchat">Backchat</a>.
</p>
<p align="center">
<a href="https://www.npmjs.com/package/@openma/deepseek-harness-acp"><img src="https://img.shields.io/npm/v/%40openma%2Fdeepseek-harness-acp?logo=npm&color=cb3837" alt="npm version" /></a>
<a href="https://www.npmjs.com/package/@openma/deepseek-harness-acp"><img src="https://img.shields.io/npm/dm/%40openma%2Fdeepseek-harness-acp" alt="npm downloads" /></a>
<a href="https://github.com/openma-ai/deepseek-harness-acp/actions/workflows/ci.yml"><img src="https://github.com/openma-ai/deepseek-harness-acp/actions/workflows/ci.yml/badge.svg" alt="CI" /></a>
<a href="https://agentclientprotocol.com/"><img src="https://img.shields.io/badge/ACP-protocol%20v1-6f42c1" alt="ACP protocol v1" /></a>
<a href="LICENSE"><img src="https://img.shields.io/badge/license-Apache--2.0-blue" alt="Apache-2.0" /></a>
<img src="https://img.shields.io/node/v/%40openma%2Fdeepseek-harness-acp" alt="node >= 22.15" />
</p>
The adapter composes the harness in-process and maps its session-event log
onto the full ACP vocabulary: streamed text and reasoning, tool calls with
diffs and display terminals, plans, permission requests, session modes,
config options, slash commands, skills, and MCP servers. Credentials never
touch your editor config — it reuses the key you saved in the dsh Web UI, or
dsh-acp login saves one to the same store.
One package, standalone or plugin
· A · dsh profile plugin (recommended) · B · Standalone server
Best for · Normal installation and upgrades · Connecting an ACP client without managing a dsh profile
Install · dsh plugin --profile acp add @openma/deepseek-harness-acp@latest · npm i -g @openma/deepseek-harness-acp
Zed runs · dsh --profile acp · dsh-acp
Harness · The dsh that owns the profile · Your installed dsh, then the package's locked private runtime
Composition · dsh-base + this bundle + your profile's own patches · dsh-base + this bundle (profile machinery booted in-process)
Both shapes share $DSH_HOME: the same credential store, settings, presets,
and session logs as dsh web — conversations started in the Web UI can be
listed and loaded from the editor.
Other dsh surfaces can mount the transport-independent
@openma/deepseek-harness-acp/plugin on their Base Host tree and own the
transport adapter. The TUI profile uses this path: it starts a separate TUI
Client process and connects ACP over that process's standard stdin/stdout; it
does not start dsh-acp or use an in-process Client stream.
The package is therefore not only a CLI wrapper. It is also the ACP surface
plugin used by other dsh applications: one Host composition can expose the
same sessions, tools, presets, skills, and persistence through a transport
chosen by the surface.
DSH compatibility
This release supports @deepseek-ai/dsh >=0.1.7-rc.2 — a minimum-version
floor declared in engines.dsh (the field dsh's own plugin loader checks, with
prereleases included), never an exact-version list. It is deliberately not a
@deepseek-ai/dsh peer dependency: npm and pnpm match peer ranges without
prereleases, so a peer floor would reject every dsh prerelease. A newer dsh is
always attempted: API differences between dsh generations are feature-detected
where they are used (for example dsh 0.2.1's subagents.drainDescendants
versus 0.2.0's drainContinuableDescendants), and a dsh newer than the newest
tested version (0.2.1-rc.2) only logs a warning. Only a dsh below the floor
is refused. CI exercises the tested profile matrix (runtime/compatibility.json)
plus the next dist-tag. The bundled runtime is
DSH 0.2.0-rc.2, including the upstream cross-process session write lock.
Runtime selection has exactly two rules (Martty issue #157):
- Standalone (
dsh-acpbin): the packaged runtime is always used —
ambient installs in the invoking directory, on PATH, or in global npm are
never consulted. An explicit --dsh-path/DSH_PATH/DSH_ACP_HOST
(or the literal value bundled) selects an installation instead, and is
refused with a message naming the version found, its source, and the
supported range when it falls outside it.
- Plugin mode (
dsh plugin add, Martty launched as a dsh plugin): the
hosting dsh is the runtime, checked against the same range at mount time;
an out-of-range host fails with the same refusal message.
The resolved runtime is always reported: the launcher logs
harness host: @deepseek-ai/dsh <version> via <source> to stderr, and the
initialize response carries agentCapabilities._meta.dsh.runtime
({base, version, source}) for clients to display.
A competing load/resume returns a standard JSON-RPC error. Closing the
session or exiting the owner process allows another process to resume it.
Every process writing shared sessions must use a fixed backend; older hosts
do not participate in this lock.
Restoring historical sessions uses the host's V3 migration, which preserves
the original log. Upgraded sessions cannot be read by older hosts.
Multi-root workspaces remain unsupported.
A · dsh profile plugin (recommended)
npm install -g @deepseek-ai/dsh dsh web # save your API key once dsh plugin --profile acp add @openma/deepseek-harness-acp@latest
// Zed settings.json
{
"agent_servers": {
"DeepSeek Harness": { "command": "dsh", "args": ["--profile", "acp"] }
}
}
The plugin command creates `$DSH_HOME/profi
…(truncated)
Rendered from the README published on npm. Formatted only, not edited.
Versions
Published on npm::50,最后更新 2026-10-26