dshplugin.devDeepSeek Harness Plugins
DSH Paseo plugin logo
DeepSeek Harness Plugin

DSH Paseo

1
Published by renat3u

DSH 的paseo插件扩展支持

Developer Toolsdeepseek-harnessdshdsh-pluginpaseo

Get this plugin

Review the source, then continue to the publisher.

dsh plugin add dsh-paseo@latest
Get this plugin
Share on X ↗

About this plugin

Source snapshot 8/13/2026

dsh-paseo

把 dsh(DeepSeek Harness)作为 Paseo 的 ACP provider:在 Paseo 界面里并行运行和管理多个 dsh agent,并稳定地拉起 dsh。

English


特性

  • Paseo:dsh 注册为 Paseo 的 ACP provider(Agent Client Protocol over stdio JSON-RPC),在 Paseo 的桌面 / Web / 手机客户端里直接选择 "DSH (DeepSeek Harness)" 创建会话。
  • 并行 agent:每个 dsh 会话是一个独立 dsh 进程(独立会话日志、独立 workspace、独立取消路径),Paseo 的 attach / logs / send / stop / delete 全部可用。
  • 稳定拉起:launcher 自动解析 dsh 安装、自愈初始化 paseo profile、转发信号、保持 stdout 协议纯净;Paseo 杀进程 / 断连都能干净收尾。
  • 不改 dsh 源码:dsh 侧通过官方 profile bundle 机制注入一个 ACP 桥插件,只消费公开接缝(ctx.agents / ctx.sessions / ctx.approval)。
  • 模型可组合:默认继承所连接 dsh 服务的默认模型;通过派生 provider + 环境变量可显式覆盖出任意模型 / 端点配置(flash、pro、自定义 baseURL 等)。
  • 权限可控:默认 workspace-write 沙箱 + 一次性权限询问(Paseo 界面 allow-once / reject),可选 danger-full-access

架构

Paseo daemon(桌面 / Web / 手机 / CLI 客户端)
   │  每个 dsh 会话 spawn 一个进程,ACP over stdio(JSON-RPC 2.0)
   ▼
bin/dsh-paseo-launch.mjs        ← 稳定拉起:解析 dsh → 自愈 profile → 信号转发
   (位于 bundle 包内:packages/dsh-paseo/bin/)
   ▼
dsh --profile paseo             ← bundles: [@deepseek-ai/dsh-base, @deepseek-ai/dsh-paseo]
   └─ paseo-acp 桥插件           ← initialize / session/new / prompt / cancel / request_permission

环境要求

依赖版本说明
Node.js≥ 22.19launcher 与构建脚本
pnpm11.xdsh plugin 内部转发(profile 安装);dsh 源码仓库根运行 pnpm dsh web 启动 Web 界面
dsh当前 rc源码快照(仓库根 pnpm dsh web 启动 Web 界面);launcher 解析 dsh 可执行:PATH → ~/.dsh/source/current
Paseo≥ 0.3@getpaseo/clinpm install -g @getpaseo/cli)或桌面版
DeepSeek API Key走 dsh 侧凭据:环境变量 / ~/.dsh/.env / ~/.dsh/.credentials.yaml

安装

# 1) 构建 bundle(把 vendored @deepseek-ai/cordis / dsh seam / ACP SDK 链接进 node_modules)
cd <dsh-paseo 仓库根>
node scripts/build.mjs

# 2) 注册 Paseo provider(幂等,带备份;写入 $PASEO_HOME/config.json,默认 ~/.paseo)
node packages/dsh-paseo/scripts/install-paseo-provider.mjs

# 3) 安装 dsh 侧 profile(launcher 首次拉起时会自动做,也可手动;在 dsh 源码仓库根执行)
pnpm dsh plugin --profile paseo add <dsh-paseo 仓库根>/packages/dsh-paseo
pnpm dsh --profile paseo --dump-config | grep -A5 paseo-acp   # 验证组合配置

# 4) 启动 / 重启 Paseo daemon
paseo start --relay --listen 0.0.0.0:6767 --hostnames true

注意paseo restart 不会保留 --listen 等启动参数(会退回 127.0.0.1,手机将无法直连)。重启请使用完整参数:paseo restart --relay --listen 0.0.0.0:6767 --hostnames true

手机连接(可选)

  1. 手机安装 Paseo app(App Store / Google Play 搜索 "Paseo")。
  2. 在 daemon 机器上生成配对码:paseo daemon pair(输出 QR / 配对链接)。
  3. 手机打开配对链接(或扫码)完成配对,即可在手机上看到这台 host 并操作 dsh agent。

--relay 开启后手机与 daemon 无需同一网络(端到端加密走 relay.paseo.sh);--listen 0.0.0.0:6767 供局域网直连。

快速开始

# 在 Paseo 里跑一个 dsh agent
paseo run --provider dsh "实现用户认证"

# 或:GUI / 手机 app 里新建会话 → provider 选 "DSH (DeepSeek Harness)" → 输入任务

首次拉起时 launcher 会自动完成 dsh 侧 profile 安装,无需手工步骤。

使用

并行运行

每开一个 dsh 会话 = 一个独立 dsh 进程。paseo ls 查看所有 agent,paseo attach <id> 流式查看输出,paseo send <id> "任务" 跟进,paseo stop <id> 中断(实测:工具调用被 ABORTED,turn 以 aborted/user 收尾)。

模型选择

模型路由由 dsh 侧配置决定(单一事实源),与所连接的 dsh 服务保持一致: 未显式覆盖时,Paseo agent 继承 dsh 服务的默认模型选择agent-default-model 行 → $DSH_HOME/settings.yaml / Web Models 页,默认 deepseek-v4-flash)。 需要单独选模型时,Paseo 侧用派生 provider + 环境变量显式覆盖:

// ~/.paseo/config.json —— command 由 `node packages/dsh-paseo/scripts/install-paseo-provider.mjs`
// 自动写入 launcher 绝对路径(Windows 为 [node, launcher]);以下为示意
{
  "agents": { "providers": {
    "dsh":        { "extends": "acp", "label": "DSH (DeepSeek Harness)",
                     "command": ["/absolute/path/to/dsh-paseo/packages/dsh-paseo/bin/dsh-paseo-launch.mjs"],
                     "params": { "supportsMcpServers": false } },
    "dsh-pro":    { "extends": "acp", "label": "DSH Pro",
                     "command": ["/absolute/path/to/dsh-paseo/packages/dsh-paseo/bin/dsh-paseo-launch.mjs"],
                     "params": { "supportsMcpServers": false },
                     "env": { "DSH_PASEO_MODEL": "deepseek-v4-pro" } }
  } }
}

改完配置后重启 daemon(带完整参数)。实测:默认 dsh provider 的 agent 自报 deepseek-v4-flash(跟随服务默认);env.DSH_PASEO_MODEL 显式覆盖后自报对应模型。

权限模式

模式行为
workspace-write(默认)bash / 文件工具被沙箱围栏在工作区内;越界触发一次性权限询问(Paseo 界面 allow-once / reject,可开 Auto Accept)
danger-full-access完全访问(仅可信机器);在 provider 的 env 里设 DSH_PERMISSION_MODE=danger-full-access

会话与日志

  • dsh 会话日志落在 $DSH_HOME/sessions/,可被 dsh 其他界面查询 / 回放。
  • ACP 桥为 fresh-sessions-only(不支持 resume / load / list,与官方 dsh-acp 一致)。
  • 桥只输出已提交的助手文本agent_message_chunk),不逐 token 流式;reasoning / 工具活动留在 dsh 会话日志。

配置参考

Paseo provider 字段(~/.paseo/config.jsonagents.providers.dsh

字段说明
extends"acp"泛型 ACP provider
commandlauncher 绝对路径Paseo 每 agent spawn 一次
params.supportsMcpServersfalse必须为 false:dsh 桥拒绝非空 mcpServers(Paseo 默认会注入内部工具 MCP)
env任意透传给 dsh 进程的环境变量(模型 / 权限选择等)
label / description字符串界面显示名

环境变量(dsh 进程侧)

变量默认说明
DSH_PASEO_MODEL继承 dsh 服务默认显式覆盖桥创建的 agent 的模型(每进程求值);未设置时跟随 dsh 服务默认(settings.yaml / Models 页)
DSH_PASEO_PROVIDER继承 dsh 服务默认显式覆盖 llm 路由;可改 openai / anthropic 等(llm-pi-ai)
DSH_PERMISSION_MODEworkspace-write沙箱模式(同时决定 approval ask/never)
DSH_PASEO_DSH自动解析显式指定 dsh 可执行文件路径
DSH_HOME~/.dshdsh 主目录(profile / 会话 / 凭据)
DEEPSEEK_API_KEY / DEEPSEEK_BASE_URL环境 / .env密钥与 API 端点(也可在 settings.yaml 配置)。当前版本 DEEPSEEK_BASE_URL 只从进程环境读取,.env 不再允许覆盖

dsh settings.yaml(热重载,无需重启)

$DSH_HOME/settings.yamlllm-deepseek: 段可覆盖模型目录、默认模型、API 地址baseURL)、思考级别等:

llm-deepseek:
  baseURL: https://your-gateway.example/v1
  reasoningEffort: max
  models:
    - id: deepseek-v4-flash
    - id: deepseek-v4-pro

验证(端到端测试)

# 不经过 Paseo,直接验证 dsh 的 ACP 服务(隔离问题用)
node tools/acp-smoke-client.mjs          # 走 launcher
node tools/acp-smoke-client.mjs --direct # 直接 spawn dsh(不走 launcher)

# 经过 Paseo 验证
paseo run --provider dsh "Reply with exactly: PONG"
paseo logs <agent-id>                    # 应看到 [User] 提问 + PONG
paseo ls                                 # agent 状态 idle/completed

# 单测
node scripts/test.mjs

预期输出(实测):smoke 打印 PASS: full ACP round-trip succeededpaseo logs 显示 PONG

目录结构

packages/dsh-paseo/          dsh 侧 Cordis bundle
  src/index.ts               ACP 桥插件(改编自 @deepseek-ai/dsh-acp,BSD-3-Clause)
  src/codec.ts               prompt 展平 / turn 结束 → stop reason 映射
  bin/dsh-paseo-launch.mjs   Paseo 的 spawn 入口(稳定拉起 dsh)
  cordis.patch.yml           注入层:paseo-acp 行 + persona 覆盖
packages/dsh-paseo/scripts/install-paseo-provider.mjs  注册 provider 到 Paseo config.json
scripts/build.mjs            构建(链接依赖 + snapshot tsc + 产物校验)
scripts/test.mjs             单测入口
paseo/provider.dsh.json      provider 配置模板
tools/acp-smoke-client.mjs   ACP 端到端冒烟客户端
docs/                        架构细节与排障文档

已知限制

  • 每个 dsh agent 是一个完整 harness 进程(boot ~2-4s,内存 ~150-250MB)——进程级并行的固有成本,与 Paseo 对其他 agent 的处理一致。
  • 不支持会话 resume / load / list(fresh sessions only)。
  • 桥只输出已提交文本(不逐 token 流式)。
  • Paseo UI 内模型选择器为 cosmetic:实际路由由 dsh 侧配置 / DSH_PASEO_MODEL 决定。
  • 构建期依赖 dsh 快照(~/.dsh/source/currentDSH_MONOREPO);换快照后需重跑 node scripts/build.mjs

故障排查

docs/troubleshooting.md(症状速查表:provider 不显示、unavailable、MCP 报错、密钥缺失、模型不对、端口监听丢失等)。

License

MIT(ACP 桥改编自 @deepseek-ai/dsh-acp,BSD-3-Clause,见文件头与 LICENSE)。