dsh-web
zhu1090093659/dsh-webDeepSeek Harness(DSH)Web 插件聚合生态包 · 一切皆插件,创意工坊分发(dsh-market.com)
DeepSeek Harness (DSH) 原生 Devin CLI LLM 适配器插件
通过本地 Stdio ACP 协议,直接连接本机 Devin CLI 关联的 210+ 款模型,为 DSH 提供零多余网络抽象的流式对话支持。
/model 或点击底部模型下拉选择器,无缝调用已激活的任意 Devin 模型。devin acp 通信,无需额外外部代理。prepareCall(provider, model, signal),完美兼容最新版 DSH (dsh-llm 0.1.2-rc.1+)。swe-1-7 等模型精准声明 inputModalities: ['text', 'image'],支持视觉多模态能力。tool/call 与 tool/result 卡片消息体,工具执行细节清晰直观,思考流(Reasoning)保持纯净无杂质。~/.dsh/devin-settings.json,插件更新升级不丢失配置。pnpm run mount / pnpm run unmount 脚本,便于 AI Agent(如 Claude Code、Cursor、Antigravity、Windsurf)0 门槛自动完成安装与挂载。本节专为 AI Agent(以及希望快速部署的开发者)设计。Agent 可直接按顺序执行下列步骤与检查命令。
请在执行安装前通过以下命令验证环境:
| 依赖项 | 检查命令 | 最低版本要求 | 常见修复方式 |
|---|---|---|---|
| Node.js | node -v | >= 22.19.0 | 安装 Node 22+ (nvm / fnm) |
| pnpm | pnpm -v | >= 9.0.0 | npm install -g pnpm |
| Devin CLI | devin --version | 需全局可用 | 安装 Devin CLI 并配置 PATH |
| Devin 登录态 | devin auth whoami | 需返回有效用户 | 运行 devin auth login |
| DSH 环境 | dsh --version | >= 0.1.0-rc.6 | 确保已安装并初始化过 DSH (~/.dsh) |
# Agent 一键环境自检
node -e "console.log('Node:', process.version)" && pnpm -v && devin --version
# 1. 克隆代码仓库
git clone https://github.com/AtWhuhu/dsh-devin-cli.git
cd dsh-devin-cli
# 2. 安装依赖并构建产物 (包含 TypeScript 后端与 Client 微前端包装)
pnpm install
pnpm run check
构建成功后,lib/ 目录下将生成:
lib/index.mjs (Cordis 后端插件入口)lib/client.js (微前端微模块容器,调用 window.__ModuleLoader__.load)仓库内置了跨平台的自动挂载脚本,可自动定位 ~/.dsh/profiles/ 下的配置并以符号链接注入:
pnpm run mount
输出示例:
🔍 检测 DSH 环境目录: C:\Users\liuwan\.dsh
✅ [web] 成功挂载插件到: C:\Users\liuwan\.dsh\profiles\web\package.json
└─ 链接路径: link:C:/Users/liuwan/dsh-devin-cli
🎉 挂载完成!共更新 1 个 DSH Profile。
提示:若需要从 DSH 中卸载此插件,只需执行
pnpm run unmount。
如需手动配置,修改 ~/.dsh/profiles/web/package.json(或桌面版对应 profile):
{
"name": "dsh-profile-web",
"dsh": {
"profile": {
"bundles": [
// ... 原有 bundles
"dsh-devin-cli" // 👈 1. 添加此项
]
}
},
"dependencies": {
// ... 原有 dependencies
"dsh-devin-cli": "link:/绝对路径/dsh-devin-cli" // 👈 2. 添加 link 依赖 (Windows 使用正斜杠 /)
}
}
启动 DSH Web 宿主:
dsh --profile web
插件不再监听任何本地端口。设置面板的状态查询、模型探测与保存全部通过 DSH 原生 connection.rpc(共享 /api 通道)完成,自动复用宿主的浏览器认证与 Host/Origin 信任栅栏——只有已登录的 DSH Web 会话可以调用。
# Agent 验证方式:确认构建产物存在且插件成功挂载
pnpm run check
# 启动后观察 DSH 日志,预期输出:
# [dsh-devin-cli] Successfully registered Devin LLM adapter
在浏览器访问 DSH Web(通常为 http://localhost:3080):
glm-5-2, swe-1-7 等);~/.dsh/devin-settings.json 并动态注册到 DSH 模型注册表中。/model,在弹出的模型列表中选中你的 Devin 模型;┌────────────────────────────────────────────────────────────┐
│ DSH Web 前端 (浏览器) │
│ ┌──────────────────────────┐ ┌───────────────────────┐ │
│ │ Devin CLI Settings Slot │ │ /model 切换模型 │ │
│ └────────────┬─────────────┘ └───────────┬───────────┘ │
└────────────────┼────────────────────────────┼──────────────┘
│ DSH 原生 /api RPC(浏览器认证)│ DSH RPC
┌────────────────▼────────────────────────────▼──────────────┐
│ DSH 插件后端 (Cordis) │
│ ┌──────────────────────────┐ ┌───────────────────────┐ │
│ │ DevinRpc (connection) │ │ DevinAdapter │ │
│ │ (原生 RPC 状态/配置) │ │ (LlmAdapter 实现) │ │
│ └────────────┬─────────────┘ └───────────┬───────────┘ │
└────────────────┼────────────────────────────┼──────────────┘
│ 独立持久化 │ Stdio (JSON-RPC)
┌────────────────▼─────────────┐ ┌───────────▼──────────────┐
│ ~/.dsh/devin-settings.json │ │ 本地 devin acp 进程 │
└──────────────────────────────┘ └──────────────────────────┘
lib/client.js 与 window.__ModuleLoader__.load 契约挂载;inject = ['llm'] 精准管理。devin acp --model <model>;initialize → authenticate → session/new → session/prompt;session/update 实时转为 DSH 的 StreamChunk;signal.abort)。dsh-devin-cli/
├── src/
│ ├── index.ts # Cordis 插件入口,注册 DevinAdapter 与原生 RPC 端点
│ ├── DevinAdapter.ts # LlmAdapter 标准实现 (prepareCall, stream, listModels)
│ ├── rpc.ts # DSH 原生 connection.rpc 管理端点(/api 通道)
│ ├── storage.ts # 用户设置独立持久化 (~/.dsh/devin-settings.json)
│ ├── credentials.ts # 本地 ~/.devin/credentials.toml 凭据解析
│ ├── client/
│ │ └── index.ts # 浏览器端 Slot 注入(Devin CLI 专属设置面板)
│ └── acp/
│ ├── protocol.ts # ACP 协议定义 (JSON-RPC 2.0)
│ └── AcpStdioClient.ts # Stdio 进程通信与流解析器
├── scripts/
│ ├── build-client.js # 微前端打包器(将 CJS 产物打包进 ModuleLoader)
│ ├── mount.mjs # 自动化挂载脚本 (Agent-Ready)
│ └── unmount.mjs # 自动化卸载脚本
├── cordis.patch.yml # DSH Profile 补丁配置文件
├── package.json # 插件元信息与依赖声明
└── tsconfig.json # TypeScript 编译配置
在 cordis.patch.yml 或 DSH 配置中支持以下可选属性:
| 字段 | 默认值 | 说明 |
|---|---|---|
devinBin | devin | 本机 Devin CLI 可执行文件路径 |
workspace | . | ACP Session 启动的当前工作目录 |
streamIdleTimeoutMs | 300000 | ACP 数据流空闲超时时间(毫秒) |
token | "" | 可选的指定 Token(留空时自动读取本机 credentials.toml) |
defaultContextWindow | 200000 | 默认上下文窗口大小 |
defaultMaxTokens | 65536 | 默认最大单次输出 Token |
retryPolicy | normal ×3 | 请求遇到瞬时异常时的重试策略 |
解答:管理通道走 DSH 原生
/apiRPC 并复用浏览器登录态。请确认浏览器已正常登录 DSH Web(若 Cookie 过期请重新打开带令牌的入口 URL),并确认插件已随 DSH 启动(日志中出现Successfully registered Devin LLM adapter)。
registration.adapter.prepareCall is not a function?解答:最新版
dsh-llm要求必须显式实现prepareCall方法。本项目在DevinAdapter中已完备实现,若依然出现此提示,请运行pnpm run check重新打包。
解答:在「Devin CLI」设置面板中勾选完模型后,请务必点击右上角的 「保存」 按钮。保存后后端会立即重新加载可用模型列表。如果聊天页面下拉菜单未即时变更,按
F5刷新浏览器页面即可。
解答:
pnpm run mount脚本自动将 Windows 反斜杠\转换为正斜杠/,保证在 Windows、macOS 和 Linux 上均可安全运行link:路径。
本项目基于 MIT License 开源。