前言¶
在使用 DeepSeek Harness(DSH)开发智能体时,智能体经常会启动后台服务(如数据库、API 服务)。这些进程通常通过 shell 命令或 Start-Process 启动,开发者难以在 Web GUI 中直观地看到“哪个对话启动了哪些服务”,也无法快速查看日志或进行启停操作。
dsh-process-board 插件解决了这个问题。它是一个 DSH 服务面板插件,可以在 Web GUI 侧边栏查看服务归属、进行启停管理、实时查看日志,并支持启动参数的重放。
核心能力¶
该插件提供以下功能:
- 会话归属:通过 DSH 宿主注入的
DSH_SESSION_ID环境变量,结合进程树血缘,将每个服务归属到启动它的对话。面板会按会话的中文标题分组显示。 - 服务视图:内置三道过滤逻辑(端口/日志标记闸门、剔除 npm/cross-env 启动器壳、合并 nginx master-worker),只展示真正的服务进程,避免刷屏。
- 三态探测:提供三种状态展示。
running:端口处于监听状态。pid-alive:进程存在但端口未监听(如 Java 冷启动阶段)。stopped:进程已结束。- 支持通过 HTTP 探测检查服务的响应码。
- 启停管理:停止服务时采用礼貌终止(SIGTERM/taskkill),给予宽限期后对进程树进行强杀。当服务状态为
stopped时,行内会出现「启动」按钮,可重放登记的启动参数。 - 日志查看:启动时注入
DSH_PB_LOG环境标记。面板采用分栏设计,实时tail日志流。支持 ERROR 红色高亮和 WARN 黄色高亮,每 4 秒自动刷新,且支持滚动吸底。 - 全屏模式:面板 ⛶ 铺满视口;日志 ⛶ 覆盖整个面板。支持按 Esc 逐级退出(日志全屏 → 面板全屏 → 关闭)。
安装与启用¶
前置条件是已安装 DSH(dsh 命令可用)。
使用以下命令安装插件:
dsh plugin --profile web add dsh-process-board
安装完成后,必须重启 DSH 宿主(重新执行 dsh web),并在浏览器刷新页面。此时侧边栏会出现「进程面板」入口。
典型用法¶
要让面板正确显示服务和日志,需要正确启动服务。
1. 带日志标记启动(Shell/Bash)
启动服务时,通过环境变量 DSH_PB_LOG 指定日志文件,并将标准输出重定向到该文件。
export DSH_PB_LOG=/tmp/my-service.log
java -jar app.jar >> /tmp/my-service.log 2>&1 &
2. 显式登记并启动(API)
如果需要更精细的控制,可以通过 API 显式登记服务信息(名称、启动参数、工作目录、端口、日志文件),之后面板可直接点击「启动」按钮重放。
curl -X POST http://127.0.0.1:3080/api/plugins/process-board/start \
-H 'content-type: application/json' \
-d '{"name":"my-svc","argv":["java","-jar","app.jar"],"cwd":"/path/to/app","port":8080,"logFile":"/tmp/my-svc.log"}'
3. PowerShell 启动
在 Windows PowerShell 中,可以使用 Start-Process 并配合重定向。
$env:DSH_PB_LOG = "$env:TEMP\my-service.log"
Start-Process java -ArgumentList '-jar','app.jar' -RedirectStandardOutput $env:DSH_PB_LOG -WindowStyle Hidden
注意事项¶
- Mac 平台限制:当前版本在 Mac 上安装后插件可加载,但扫描器返回空。原因是
scanner.js中存在process.platform !== 'win32'的提前返回逻辑。探测和停止层已跨平台就绪,但进程扫描功能暂未在 Mac 上生效。 - 安装路径限制:使用
link:方式安装时,只接受本地目录路径。例如dsh plugin --profile web add link:~/dsh-process-board是有效的,而link:https://...会被解析失败。 - 运行时依赖:插件客户端为纯 DOM 实现,零运行时依赖。
结语¶
dsh-process-board 是一个面向 DSH 开发者的实用工具,通过环境变量和进程树分析,实现了服务归属的可视化与标准化管理。对于需要频繁管理后台服务的智能体开发场景,它能够显著提升调试和运维效率。