前言¶
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。