智能體開發中,CI 失敗往往需要打斷當前任務去瀏覽器或終端查看日誌。切換上下文增加了心智負擔。dsh-onfail 插件直接在 DSH Web 界面中暴露失敗狀態,讓你無需離開當前會話即可修復問題。
插件簡介¶
這是 DeepSeek Harness (DSH) 的聯網工具插件,由 ZZZjf13960 維護。它通過輪詢機制,獲取當前工作區 GitHub 倉庫的 Actions 運行狀態(當前分支或開放 PR 的 HEAD),將新的失敗檢查顯示爲側邊欄卡片。點擊卡片後,插件會讀取日誌上下文,調用當前會話的 session.prompt 接口,在當前任務中繼續處理錯誤。
核心功能¶
-
輪詢 GitHub Actions 失敗狀態
插件不依賴 Webhook,而是通過定時輪詢(默認間隔 60 秒)檢查倉庫的 Actions 運行記錄。它過濾出當前分支或 PR HEAD 的失敗 Job,並記錄已展示過的 Job ID 以避免重複堆疊。 -
側邊欄卡片展示
失敗的檢查會以卡片形式出現在 DSH Web 的側邊欄底部或覆蓋層中。卡片內容包含 Job 名稱、提交 SHA 以及截取的日誌片段(默認截取 4000 字符)。 -
點擊繼續當前會話
點擊卡片不會創建新會話或打斷當前任務。它調用當前會話的session.prompt(..., 'queue')方法,將失敗 Job 的上下文(倉庫、Job ID、SHA、日誌)推入當前隊列,實現無縫修復。 -
Fixture 模式
支持在無 Token 或測試環境下使用。通過配置開啓或設置環境變量DSH_ONFAIL_FIXTURE=1,插件會加載內置的fixtures/failed-run.json數據進行演示。
安裝與啓用¶
安裝該插件需要先配置一個 DSH Web Profile。
1、執行以下命令安裝插件:
dsh plugin --profile web add github:ZZZjf13960/dsh-onfail
2、啓動或重啓 DSH Web UI:
dsh --profile web
3、在插件設置卡片中,應能看到 Onfail (GitHub Actions) 選項。側邊欄底部會出現一個 CI 控制項,失敗的檢查會渲染爲卡片。
配置與使用¶
基礎配置¶
在插件設置卡片或 cordis.patch.yml 中可配置以下參數:
| 配置項 | 默認值 | 說明 |
|---|---|---|
repo |
自動 | 自動從 git remote get-url origin 獲取,或手動指定 owner/name。留空則自動。 |
token |
空 | GitHub Token。優先使用 gh auth login 獲取。 |
pollIntervalMs |
60000 |
輪詢間隔,單位毫秒。 |
logTailChars |
4000 |
日誌截取字符數。 |
fixture |
false |
是否開啓 Fixture 模式。 |
Token 權限與解析¶
插件需要讀取 GitHub Actions 的權限。Token 的解析優先級如下:
- 插件配置中的
token字段 gh auth token(如果gh命令可用)- 環境變量
DSH_ONFAIL_TOKEN - 環境變量
GITHUB_TOKEN
對於精細權限的 Personal Access Token (PAT),必須授予 Actions: Read 權限。
Fixture 模式測試¶
在測試或無 Token 環境下,可以通過以下方式開啓 Fixture 模式:
- 在設置卡片中勾選 Fixture mode
- 設置環境變量
DSH_ONFAIL_FIXTURE=1 - 在 loader 配置中設置
config.fixture: true
開啓後,插件將加載 fixtures/failed-run.json 數據來模擬失敗卡片展示。
適用場景與注意事項¶
適用場景:
* 需要“原地”修復 CI 錯誤,不想在瀏覽器和 DSH 之間切換。
* 在 DSH Web 界面中集中管理開發與調試流程。
注意事項:
* 插件必須在一個已存在的 DSH Web Profile 環境下運行。
* 點擊卡片繼續會話的前提是當前必須存在一個活躍會話。如果沒有活躍會話,卡片會顯示 role=status 錯誤信息,而不是成功狀態。
* 插件本身不會崩潰。如果 Token 缺失且 gh 命令不可用,插件會顯示可讀的錯誤信息,而不會導致 Harness 崩潰。