dsh-onfail: 在 DSH 中處理 GitHub Actions 失敗

智能體開發中,CI 失敗往往需要打斷當前任務去瀏覽器或終端查看日誌。切換上下文增加了心智負擔。dsh-onfail 插件直接在 DSH Web 界面中暴露失敗狀態,讓你無需離開當前會話即可修復問題。

插件簡介

這是 DeepSeek Harness (DSH) 的聯網工具插件,由 ZZZjf13960 維護。它通過輪詢機制,獲取當前工作區 GitHub 倉庫的 Actions 運行狀態(當前分支或開放 PR 的 HEAD),將新的失敗檢查顯示爲側邊欄卡片。點擊卡片後,插件會讀取日誌上下文,調用當前會話的 session.prompt 接口,在當前任務中繼續處理錯誤。

核心功能

  1. 輪詢 GitHub Actions 失敗狀態
    插件不依賴 Webhook,而是通過定時輪詢(默認間隔 60 秒)檢查倉庫的 Actions 運行記錄。它過濾出當前分支或 PR HEAD 的失敗 Job,並記錄已展示過的 Job ID 以避免重複堆疊。

  2. 側邊欄卡片展示
    失敗的檢查會以卡片形式出現在 DSH Web 的側邊欄底部或覆蓋層中。卡片內容包含 Job 名稱、提交 SHA 以及截取的日誌片段(默認截取 4000 字符)。

  3. 點擊繼續當前會話
    點擊卡片不會創建新會話或打斷當前任務。它調用當前會話的 session.prompt(..., 'queue') 方法,將失敗 Job 的上下文(倉庫、Job ID、SHA、日誌)推入當前隊列,實現無縫修復。

  4. 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 的解析優先級如下:

  1. 插件配置中的 token 字段
  2. gh auth token(如果 gh 命令可用)
  3. 環境變量 DSH_ONFAIL_TOKEN
  4. 環境變量 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 崩潰。

羽毛球分组比赛记分
小程序二维码

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

小夜