前言¶
在 DeepSeek Harness(DSH)里做 C/C++ 或 CMake 类项目时,本地环境未必与目标机一致:内核版本、依赖库、算力或公司内网里的专用构建机,往往才是「真」编译环境。若每次都要自己开终端、scp 源码、逐条执行 configure / build / test,再回到聊天窗口贴日志,上下文很容易被拆散。
下面介绍社区工作流插件 dsh-build-servers(仓库 ji-tz/dsh-build-servers):在 Web UI 与当前会话中绑定一台远程构建机,上传本地源码,按阶段跑 configure → build → install → test,查看实时状态与输出,并可在同一会话里打开 SSH 终端;智能体还能通过同名工具驱动同一台机器。README 明确说明:它不是 CI 系统,而是面向「一次只桥接一台机器」的小型、可检视桥梁;在 Windows 上对 RHEL 8 构建主机做过测试(当前 bundle 状态 v1.2.0)。
这是什么¶
dsh-build-servers 由维护者 ji-tz 发布,在 SkillHub 插件目录 中归类为工作流。package.json 标明版本 1.2.0、许可证 MIT,面向 DSH 0.2.x bundle API(engines.dsh: >=0.2.0 <0.3.0)。
浏览器不直接连 SSH:页面通过同源 Host 路由 /build-servers 访问,由 Host 进程维护服务器列表、探测缓存、流水线任务与终端会话;远程侧只需 OpenSSH 与 POSIX shell。
核心功能¶
构建机面板与认证¶
左侧 Build servers 面板只登记网络信息:显示名、SSH 目标(别名 / user@host / IP)、端口、认证方式、启用/禁用,以及在线 OS/IP 探测;不在服务器条目里保存路径或命令。
- 密钥:默认走 ssh-agent 与本地 SSH 配置,或为每台机器从
~/.ssh选一把密钥(或手写路径),以ssh -i且IdentitiesOnly=yes连接。 - 密码:通过短生命周期
SSH_ASKPASS辅助进程把密码交给 OpenSSH,避免出现在命令行;密码以明文保存在本地配置文件中,且不会回传给浏览器。
按会话绑定与编译设置¶
每个对话绑定一台服务器。新会话默认 Local;在输入区工具栏权限控件旁的服务器选择器里切换。工作区会记录上次用过的服务器,但新会话不会自动继承。
Compile settings(编译设置)按会话保存:本地源码目录、同步路径(远端解压位置)、构建路径(默认 <sync path>/build)、上传排除规则,以及各阶段命令。某阶段命令为空时,默认依次为 cmake ..、cmake --build . -j$(nproc)、cmake --install .、ctest。
上传与流水线¶
流程为:本地 tar 经管道传入 ssh … tar -x,再按配置用 bash -lc 执行各阶段;任一阶段失败即停止,也可中途停止。界面展示阶段状态、退出码、耗时与输出。
绑定服务器后,输入区下方出现状态芯片(本地会话无芯片):绿灯加 Ready / Upload / Configure / Build / Install / Test / Reconnecting / Disconnected;点击可查看负载、内存、磁盘、运行时间及状态条,并从此处或选择器菜单进入 Compile settings。
SSH 终端与智能体工具¶
每台服务器维护一个持久的 ssh -tt … bash -l 会话,供 UI、终端标签页与智能体共用;行模式终端(非全屏 TUI)。右侧引导区提供 New remote terminal 卡片,可在标签页打开当前会话的构建机 shell。
智能体工具包括:
build_server:status/run/pipeline/stopremote_terminal:list/open/send/read/close
与 UI 使用同一会话绑定与同一条 SSH 通路。
安装与启用¶
依赖:已安装带 Web UI 与 plugin_manager 的 DSH;本机 OpenSSH 客户端(密钥模式建议 8.4+ 以支持 SSH_ASKPASS_REQUIRE);本机与构建机均需 tar;构建机需 POSIX shell(探测会 opportunistically 使用 /proc、hostname、sed、awk、find、df、git 等)。
从 npm 安装最新稳定版:
plugin_manager install_bundle
target: dsh-build-servers@latest
从本地 checkout:
plugin_manager install_bundle
target: D:\path\to\dsh-build-servers
或指定 Git 提交:
plugin_manager install_bundle
target: git+https://github.com/ji-tz/dsh-build-servers.git#<commit>
若包位于大仓库子目录,在 Git 地址后追加 &path:/build-servers。
安装后插件即启用。若侧栏或输入区未出现新入口,刷新页面一次(Ctrl+R);客户端以 bundle 形式提供。
也可在 Settings → Plugins → Discover 中加入市场索引(需启用实验性 plugin-market bundle):
https://raw.githubusercontent.com/ji-tz/dsh-build-servers/main/market/index.json
索引指向 npm registry 版本。
安装前请自行审阅 GitHub 仓库 源码与 MIT 许可证。插件在当前 DSH Host 进程权限下执行 SSH、读写本地 ~/.dsh(Windows 为 %USERPROFILE%\.dsh)配置;这并非沙箱化的第三方市场应用,能力等同于你本机用户能做的事。
典型用法¶
- 打开左侧 Build servers,添加服务器:名称、SSH 目标、可选端口、密钥或密码认证。
- 在新会话中,于输入区选择器将 Local 切换为目标构建机;通过状态芯片或选择器菜单打开 Compile settings,填写本地源码路径(默认当前工作区)、同步路径、构建路径、排除规则与阶段命令。
- 绑定后观察状态芯片阶段变化;需要时打开远程终端或在对话中让智能体调用
build_server/remote_terminal工具。
远端仅会收到上传的源码以及你在各阶段配置的命令所产生的改动;服务器网络条目本身不存储命令。
本地存储与安全要点¶
| 文件 | 内容 |
|---|---|
build-servers.json |
网络条目:id、name、target、port、enabled、auth、密钥路径;密码模式下含明文密码 |
build-server-bindings.json |
按会话绑定与按工作区上次使用的服务器 |
build-server-settings.json |
按会话的路径、排除规则与阶段命令 |
GET /servers 对密码仅返回 hasPassword,不返回明文。编辑时密码留空表示保留原密码;改回密钥认证会删除已存密码。
密钥认证使用 BatchMode=yes,需已知主机密钥;密码模式对新主机使用 StrictHostKeyChecking=accept-new,主机密钥变更仍会被拒绝。Host 为浏览器列出 ~/.ssh 下候选密钥文件名与类型,不把密钥材料送到浏览器。
适用场景与注意¶
适合:需要在对话上下文中完成「选机 → 传源码 → 跑 CMake 风格流水线 → 看日志 / 开 shell」的开发者;希望智能体与 UI 共用同一远程环境的 DSH 用户。
不适合:替代 Jenkins、GitHub Actions 等多机 CI;README 强调一次只桥接一台机器。
SkillHub 等社区目录与 DeepSeek / 幻方无官方从属关系;插件列表反映社区贡献,安装与信任边界由你自己把握。
结尾¶
dsh-build-servers 把远程构建机收进 DSH 会话:绑定、上传、分阶段编译测试、状态可视化和 SSH 终端在同一套 Host 路由与智能体工具下完成,减少在聊天与终端之间来回切换。