# dsh-acp-for-bitfun

> 把 BitFun agent 通过 ACP 协议接入 DSH，会话中可用 subagent_bitfun 工具把任务委托给 BitFun 执行。

## Metadata

- Author: [@bobleer](https://github.com/bobleer)
- Repo: <https://github.com/bobleer/dsh-acp-for-bitfun.git>
- GitHub: [bobleer/dsh-acp-for-bitfun](https://github.com/bobleer/dsh-acp-for-bitfun)
- Stars: 10
- Language: JavaScript
- License: [MIT](https://spdx.org/licenses/MIT.html)
- Topics: `bitfun`, `dsh`, `dsh-plugin`
- Forks: 1
- Open Issues: 0
- Last push: 2026-08-13T13:38:31.000Z
- Added: 2026-08-13T00:00:00.000Z

## Install

```bash
dsh plugin --profile web add github:bobleer/dsh-acp-for-bitfun
```

## Wiki

## 一句话定位
把 BitFun 这个本地 agent 通过 ACP（Agent Client Protocol）接入 DSH，让模型在 dsh 会话里通过 `subagent_bitfun` 工具把任务转交给 BitFun 执行，免去手动在两个工具之间来回切换。

## 核心能力
- 在 DSH 里注册 BitFun 作为 subagent provider，模型可以直接调用
- 每次委托启动一个独立的 `bitfun acp` 子进程，跑完自动回收
- 通过流式通道回传 BitFun 的 `agent_message_chunk`，主会话能看到过程
- 加载时探测 `bitfun` CLI 是否可用，缺失直接 fail loud，避免运行中才报错
- 支持覆盖工具名、权限应答策略、子进程参数和环境变量
- 复用 dsh 官方 `subagent-acp` 与 `tool-subagent` 两个包，无需自己实现 ACP 客户端

## 技术实现
- **语言**: JavaScript（ESM，`"type": "module"`）
- **关键依赖**: `@deepseek-ai/dsh-subagent-acp`（ACP 客户端）、`@deepseek-ai/dsh-tool-subagent`（挂载模型可见工具）、`@deepseek-ai/schemastery`（配置 schema）
- **架构模式**: DSH Cordis bundle patch —— `cordis.patch.yml` 注入一个 `bitfun-acp` 插件节点，`index.js` 的 `apply(ctx, config)` 在节点挂载时探测 CLI、注册 provider、再挂载工具
- **入口文件**: `index.js`

## 适用场景
你已经在用 BitFun 做日常编码/重构，又同时使用 DSH 做 AI 协作，希望让 DSH 的模型把"派给 BitFun"的活儿在一次对话里自动完成，不用中途切窗口、复制粘贴。同时也适合把 BitFun 接到 DSH 的多 agent 流水线里，让它作为下游执行单元被调度。

## 前置依赖与兼容性
| 依赖 | 最低版本 | 说明 |
|---|---|---|
| DeepSeek Harness (dsh) | >= 0.1.0-rc.6 | 与插件依赖的 subagent 包对齐 |
| BitFun CLI | >= 0.2.17 | 内置 ACP v1 server，需通过 `bitfun acp doctor` 自检 |
| Node.js | 未声明 | 源码未声明，由宿主 dsh 决定 |
| 平台 | 跨平台 | 纯 JS + Node 子进程，未声明 OS/CPU 限制 |
| 原生模块 | 无 | 依赖均为纯 JS |

## 安装方式
```bash
dsh plugin --profile web add github:bobleer/dsh-acp-for-bitfun
```

## 配置项
| 配置 | 类型 | 说明 | 默认值 |
|---|---|---|---|
| `command` | 字符串 | BitFun CLI 可执行文件：PATH 上的命令名或绝对路径 | `bitfun` |
| `providerName` | 字符串 | DSH 里这个 provider 的注册名，用于工具路由 | `bitfun` |
| `toolName` | 字符串 | 模型在会话里看到的工具调用名 | `subagent_bitfun` |
| `permission` | `allow` / `reject` | BitFun 询问权限时自动应答的策略 | `reject` |
| `acpArgs` | 字符串数组 | 跟在 `command` 后面的额外参数 | `['acp']` |
| `env` | 键值对 | 透传给 BitFun 子进程的环境变量 | `{}` |
| `checkOnStart` | 布尔 | 加载插件时是否探测 CLI 是否可用 | `true` |

## 常见问题

**Q: 用这个插件需要先装 BitFun 吗？**

A: 是的。插件加载时会探测 `bitfun` 命令，找不到就直接报错退出，不会等到第一次委托才失败。请按 README 装好 BitFun CLI，并跑 `bitfun acp doctor` 确认 ACP server 正常。

**Q: 模型在会话里看到的是什么工具名？**

A: 默认是 `subagent_bitfun`。如果你启用了其他 subagent 工具想避免重名，可以把配置里的 `toolName` 改成别的名字。

**Q: BitFun 不在 PATH 里怎么办？**

A: 在 profile 配置里把 `command` 改成 BitFun 可执行文件的绝对路径，比如 `/usr/local/bin/bitfun`，插件就不会再依赖 PATH 查找。

**Q: BitFun 在执行中弹出权限请求怎么处理？**

A: 配置项 `permission` 控制自动应答。默认 `reject`（拒绝），保守安全；如果跑的是批量脚本不希望被打断，可以改成 `allow` 一律放行。

**Q: dsh 主版本要求是什么？**

A: 需要 `>= 0.1.0-rc.6`，和插件依赖的 subagent 包版本严格对齐。deepseek-harness 目前还是 developer preview，升级 dsh 时建议同步升级这个 bundle。

**Q: 任务数据存在哪里？**

A: BitFun 子进程自己负责持久化，dsh 这边只负责启子进程、回传结果、回收子进程。具体存哪、用什么格式，由 BitFun 自己决定。

**Q: 怎么卸载？**

A: 在对应 profile 里把 `dsh-acp-for-bitfun` 这一行从 `cordis.patch.yml` 移除，或用 `dsh plugin remove` 卸载；之前产生的 BitFun 会话数据不受影响。

## 上手难度
入门 — 只要装好 BitFun CLI 并把 bundle 加到 profile，模型就能在下次会话直接调用 `subagent_bitfun`，零代码门槛；进阶场景（自定义路径、权限放行、批量任务）只需改几行 YAML。

## 已知问题与限制
- 暂未发布到 npm registry，目前需要从 GitHub 安装（来源：TODO.md）
- 没有自动化冒烟测试覆盖 ACP 协议层的 initialize/prompt 往返（来源：TODO.md）
- 当前依赖锁定在 `0.1.0-rc.6`，需随 dsh rc 节奏手动升级（来源：TODO.md）
- 每次委托都冷启动一个 `bitfun acp` 子进程，没有连接复用，长任务频繁调度时开销较大（来源：TODO.md）
- `checkOnStart=true` 时，BitFun CLI 缺失会让插件加载直接失败而非优雅降级（来源：index.js:74-84）

---

This document is auto-generated by [deepseek-plugin.org](https://deepseek-plugin.org). HTML page: [dsh-acp-for-bitfun](https://deepseek-plugin.org/plugins/bobleer/dsh-acp-for-bitfun)
Wiki generated by AI (model: `MiniMax-M3`)
