dsh-cmdwatch:实时查看 dsh 命令执行进度

前言

DSH 目前处于 developer preview,官方明示会有破坏性变更(breaking changes)。在开发调试时,查看命令执行进度通常需要暂停对话。dsh-cmdwatch 插件通过实时流机制,解决了这个问题,它能在面板上实时滚动显示前台命令与后台任务的执行输出。

插件定位

dsh-cmdwatch 是一个客户端插件,由 GavinQiEr 维护,遵循 MIT 许可证。它为 dsh 的 web profile 提供一个「命令监视」面板,支持前台命令与后台任务的实时输出显示。

安装与启用

安装后重启 web profile(dsh web),输入框上方会出现「命令监视」面板。

  1. 执行官方推荐的安装命令:
dsh plugin --profile web add github:GavinQiEr/dsh-cmdwatch

若 dsh 不在 PATH 中,可用 npx '@deepseek-ai/dsh' plugin --profile web add github:GavinQiEr/dsh-cmdwatch 代替。

  1. 安装完成后,重启 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。
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜