Skip to content

feat(acp): add native DeepSeek Harness support - #2272

Merged
wgqqqqq merged 1 commit into
GCWing:mainfrom
bobleer:bob/feat-dsh-acp
Aug 14, 2026
Merged

feat(acp): add native DeepSeek Harness support#2272
wgqqqqq merged 1 commit into
GCWing:mainfrom
bobleer:bob/feat-dsh-acp

Conversation

@bobleer

@bobleer bobleer commented Aug 13, 2026

Copy link
Copy Markdown
Collaborator

Summary

  • register DeepSeek Harness (dsh) as a built-in native ACP client
  • launch the official dsh-acp-demo stdio server directly, with no protocol adapter
  • let BitFun install @deepseek-ai/dsh-acp-demo@next locally or on a remote workspace host
  • expose the preset in ACP settings and call out the absolute --config path needed for a DSH cordis.yml
  • cover built-in metadata, Web UI rendering, and remote-workspace default resolution

Validation

  • cargo test -p bitfun-acp (114 passed)
  • cargo check -p bitfun-acp --no-default-features --features client
  • cargo check -p bitfun-acp --no-default-features --features server
  • pnpm --dir src/web-ui run test:run src/infrastructure/config/components/AcpAgentsConfig.test.tsx (11 passed)
  • pnpm run type-check:web
  • pnpm run check:repo-hygiene
  • real local cross-project smoke: BitFun AcpClientService launched published dsh-acp-demo 0.1.0-rc.6 and completed initialize -> session/new -> session/prompt, receiving the replayed PONG response

Remote scenarios

  • local workspace: exercised with a real DSH ACP subprocess and prompt round trip
  • remote workspace: built-in config fallback is covered by a focused regression test; no live SSH host was exercised
  • remote control, Peer Device Mode, and Detached Dispatch: unchanged and not exercised

@bobleer
bobleer requested a review from wgqqqqq August 13, 2026 18:19
@wgqqqqq
wgqqqqq merged commit 76f8b89 into GCWing:main Aug 14, 2026
7 checks passed
wgqqqqq added a commit that referenced this pull request Aug 14, 2026
The harness has no ACP entry point of its own, and the published
@deepseek-ai/dsh-acp is an automation surface: it withholds tool calls,
reasoning, and mode selection, because a script does not need to watch an
agent think. An IDE needs exactly those.

So add packages/dsh-acp and ship it as a dsh PROFILE rather than as
something the user installs separately. dsh symlinks its whole dependency
closure into $DSH_HOME/profiles/node_modules on every launch, so a profile
resolves every harness plugin out of the user's own installation. BitFun
therefore carries a compiled bridge, not a second copy of the harness, and
launches `dsh --profile bitfun-acp`.

The model and the key stay in dsh. cordis.yml mounts the harness's own
settings, credentials, and default-model rows, so whatever the user picked
in dsh's Models page is what an IDE session runs on. BitFun stores nothing
about the account.

This replaces the `dsh` preset from #2272, which launched the automation
surface under the same id.

Two of the changes here are not dsh-specific and apply to every ACP agent:
tool calls now render as BitFun's native Bash/Read/Edit cards grouped by
round, and the model picker handles an agent that publishes a `mode`
option instead of models, collapsing to a locked entry once a conversation
has fixed its mode.

packages/dsh-acp is deliberately not a pnpm workspace member: it pins the
whole harness 0.1.0-rc.6 train and carries its own package-lock.json, so
installing the harness is the desktop bundle build's cost rather than
every contributor's. prepare-dsh-profile.mjs fails the build rather than
shipping a bridgeless app, since the two are indistinguishable until a
user starts a session.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants