前言¶
DSH 目前处于 developer preview,官方明示会有破坏性变更(breaking changes)。在开发调试时,查看命令执行进度通常需要暂停对话。dsh-cmdwatch 插件通过实时流机制,解决了这个问题,它能在面板上实时滚动显示前台命令与后台任务的执行输出。
插件定位¶
dsh-cmdwatch 是一个客户端插件,由 GavinQiEr 维护,遵循 MIT 许可证。它为 dsh 的 web profile 提供一个「命令监视」面板,支持前台命令与后台任务的实时输出显示。
安装与启用¶
安装后重启 web profile(dsh web),输入框上方会出现「命令监视」面板。
- 执行官方推荐的安装命令:
dsh plugin --profile web add github:GavinQiEr/dsh-cmdwatch
若
dsh不在 PATH 中,可用npx '@deepseek-ai/dsh' plugin --profile web add github:GavinQiEr/dsh-cmdwatch代替。
- 安装完成后,重启 web profile 即可生效。
核心功能¶
该插件主要提供以下能力:
- 后台任务实时进度:开启
run_in_background: true后,命令行、进度、状态、时间会逐行滚动显示。 - 前台命令实时滚动:命令发出后立即在面板出现,执行过程中实时滚动。
- 会话隔离:不同会话的面板各看各的命令,互不串扰。
- 自动滚动:输出区自动滚到最新一行。
- 长命令缩短:对过长的命令进行压缩显示(前 60% + … + 尾部 40%),悬停可查看全文。
- 命令净化:自动检测并插入
Tee与PYTHONUNBUFFERED,确保输出实时显示的同时,保留原管道语义(如Select-Object -Last或tail仍只返回最后 N 行)。
典型用法¶
- 前台命令:插件会自动插入
Tee捕获输出。
python -m pytest tests/... -q
- 后台任务:设置运行模式。
run_in_background: true
- 关闭自动改写:若不想让插件包装命令,可设置配置项。
config: { rewrite: false }
配置¶
在 cordis.patch.yml 的插件行中添加 config 配置项。
| 配置项 | 默认值 | 说明 |
|---|---|---|
rewrite |
true |
后台命令存在收集/重定向段时,是否插入 Tee 实时输出 |
pythonUnbuffered |
true |
命中 python 时是否注入 PYTHONUNBUFFERED |
foregroundStream |
true |
前台命令是否插入 Tee 落盘并实时显示 |
warn |
true |
是否对无法处理的管道(如 -First)显示警示 |
debug |
false |
向宿主终端输出 [cmdmon] 诊断日志 |
注意事项¶
- 输出流冲突:实时流开启时,后台任务的输出增量会被插件消费,dsh 的
job_output工具将读到空增量((no new output))。如果需要 dsh 亲自读取输出,需先关闭面板上的「实时流」。 - 非持久化日志:记录保存在宿主进程内存中,进程重启后清空。
- 后台任务显示:后台任务会显示两条记录:一条是工具调用行(标签为「工具」),一条是任务行(标签为「任务」)。实时输出只进入任务行。
- 日志文件:日志文件位于工作区/临时目录,文件名通常为
.cmdmon-<callId>.log。