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。
羽毛球分组比赛记分
小程序二维码

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

小夜