dsh-ci-cd-bot:把 GitHub issues/PRs 接入 DSH 的執行與評審隊列

前言

在 DSH Web UI 中,agent 已經可以執行編碼任務;如果賬號下有多個 GitHub 倉庫,issues、PR、本地修復、審查和回寫 GitHub 之間仍需要人工串聯。dsh-ci-cd-bot 是一個 DSH Web UI 插件,用於監聽賬號倉庫的 issues/PRs,把本地已有 checkout 的 bug 自動修復,並把 PR、feature request 和其他事項放入看板,供一鍵執行、評審和推送。

下面介紹它的定位、能力、安裝方式和注意事項。

這是什麼

dsh-ci-cd-bot 是 bkMoon1024 維護的 DSH Web UI 插件,採用 MIT 許可證。它由 host half 和 browser half 兩部分組成:host 側輪詢 GitHub、匹配本地倉庫並執行 agent;browser 側在 DSH Web UI 注入 CI/CD 側欄入口和中間列看板。

它適合需要把 GitHub issues/PRs 與本地 DSH 工作流接起來的場景。運行要求是 Node.js ≥ 22,且 dsh 版本爲 0.1.0-rc.6package.json 聲明的 engines 爲 Node.js ^22.19.0 || >=24.0.0

核心功能

先做監聽,再做分類和本地匹配,最後進入看板執行或自動修復。

輸入 處理方式
Bug issue,倉庫已在本地 checkout 自動入隊;agent 在本地 checkout 中修復並自測;插件提交、推送,可選創建 PR,並回復 issue
Feature request 進入看板隊列;點擊 Run;agent 實現;推送;回覆 issue
Other issue 進入看板隊列;如果本地 checkout 存在,則實現並推送;否則 agent 起草回覆,插件以評論發佈
Pull request 進入看板隊列;點擊 Review;拉取 diff;agent 評審;提交 APPROVE / REQUEST_CHANGES / COMMENT;approve 時可自動合併

幾個關鍵約束:

  • 輪詢對象是賬號下的倉庫,issues/PRs 的輪詢間隔可配置。
  • 首次輪詢使用 watermark,只補最近幾天。
  • 分類基於 label rules 以及 title/body keywords。
  • 本地匹配會在配置的 scan roots 和 DSH workspaces 下查找 git checkout。
  • 每次運行都是真實 agent session,會保留在 session list 中查看 transcript。
  • git 分支、commit、push 由插件執行;agent prompt 中禁止 git。
  • push policy 可以是 auto,也可以在 board 中選擇 confirm
  • 修復後開 PR 默認開啓且可配置。
  • approve 後自動合併默認開啓且可配置。

安裝與啓用

包已發佈在 npm,推薦從 npm 安裝。

dsh plugin --profile web add dsh-ci-cd-bot
dsh web

首次使用時,在看板打開設置:粘貼 GitHub token(repo scope),按需配置 scan roots,然後保存。

可以確認配置層是否掛載:

dsh --profile web --dump-config | grep ci-cd-bot

從源碼構建

如果要從源碼構建,可以使用項目倉庫中的構建和測試命令:

git clone https://github.com/bkMoon1024/dsh-ci-cd-bot.git
cd dsh-ci-cd-bot
npm install --ignore-scripts
npm run build
npm test

構建完成後以 link 方式安裝:

dsh plugin --profile web add link:$(pwd)
dsh web

手動安裝與切換

手動安裝時,可以把當前目錄鏈接到 DSH profile 的 node_modules

ln -sfn "$(pwd)" ~/.dsh/profiles/node_modules/dsh-ci-cd-bot
dsh web

從手動安裝切換到 dsh plugin add 前,先移除手動添加的 insert 條目,避免重複行。

卸載

dsh plugin --profile web remove dsh-ci-cd-bot
dsh web

手動安裝則刪除 symlink 和 insert 條目。

典型用法

以本地 bug 爲例,插件會先找到本地 checkout,然後讓 agent 修復並自測。之後插件執行固定 git 流程:

fetch → checkout ghbot/#<n>-<slug> → add → commit → push

如果開啓“修復後開 PR”,插件會推送 ghbot/… 分支並創建 PR;如果不開啓,則推送 ghbot/… 分支但不創建 PR。插件還會回覆 issue。

對 feature request,通常在看板點擊 Run。agent 實現後,插件按 push policy 推送並回復 issue。若 push policy 爲 confirm,運行會停在看板確認環節。

對其他 issue,如果本地 checkout 存在,插件會安排實現並推送;如果沒有本地 checkout,agent 會起草回覆,插件將回復作爲評論發佈。

對 PR,點擊 Review 後,插件拉取 diff,agent 給出評審結果,並提交 APPROVEREQUEST_CHANGESCOMMENT。如果 approve 後自動合併開啓,插件會執行合併。

配置與安全

配置保存在:

~/.dsh/dsh-ci-cd-bot.json

狀態保存在:

~/.dsh/dsh-ci-cd-bot-state.json

GUI 設置頁通過 loopback-fenced /api/dsh-ghbot/* 路由族編輯配置;配置文件權限爲 0600。GitHub token 是 host 側保留的 PAT(repo scope),不會發送到 browser。

可配置項包括 scan roots、include/exclude repo filters、run concurrency、run timeout、announceToAgent 等。其中 announceToAgent 僅通過 JSON/API 配置。

適用場景與注意

這個插件適合:

  • 需要跟蹤自己 GitHub 賬號下多倉庫 issues/PRs;
  • 本地已有相關倉庫 checkout 或 DSH workspaces;
  • 希望 agent 執行後由插件統一提交、推送、回覆或評審。

注意:

  • 插件會以當前 dsh 進程權限運行,安裝前應檢查源碼與許可證。
  • 插件會執行 git branch、commit、push 操作;如果要求人工確認,可將 push policy 設爲 confirm in the board
  • GitHub token 需要 repo scope;只放在 host 側。
  • 從手動安裝切換到 dsh plugin add 時,必須先移除手動添加的 insert 條目。

鏈接

  • GitHub:https://github.com/bkMoon1024/dsh-ci-cd-bot
羽毛球分组比赛记分
小程序二维码

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

小夜