dsh-codeowners:在 DSH 裏只讀匹配 CODEOWNERS 路由

前言

在多人協作倉庫裏,改動的文件該由誰關注,往往寫在根目錄或 .github 下的 CODEOWNERS 裏。GitHub 會按「最後一條匹配規則生效」(last-match-wins)把路徑映射到負責人。DeepSeek Harness(DSH)側若要做審查分流、提示「這些文件對應哪些 owner」,需要同樣的匹配語義,但不必也不應在本機重複走 GitHub API 或分支保護邏輯。

下面介紹社區插件 dsh-codeowners(維護者 lengrufeng2008,分類 admin-security)。它在 DSH 生態裏提供 只讀 的文件路徑到 owner 的路由輔助,規則風格與 GitHub 的 last-match-wins 一致;SkillHub 目錄頁見 skillhub.cn/plugins/lengrufeng2008/dsh-codeowners,源碼與說明在 GitHub。社區目錄爲獨立站點,與 DeepSeek / 幻方無官方從屬關係;DSH 本身強調「一切皆插件」,本插件是其中一條小型、可自審的匹配實現(MIT,package.json 版本 0.1.0,Node >=20)。

這是什麼

dsh-codeowners 一句話定位:Read-only CODEOWNERS matching for DSH with GitHub-style last-match-wins patterns(只讀 CODEOWNERS 匹配,last-match-wins 模式)。

它解決的是「給定倉庫根目錄與一組變更文件路徑,按 CODEOWNERS 規則算出對應 owner」的問題,用作 routing helper,不是審批或強制門禁。README 明確:不做 GitHub API、owner 校驗或 branch protection;glob 爲實用子集,非常規 pattern 建議自行跑測試驗證。

核心功能

  1. GitHub 風格 last-match-wins:多條規則命中時,以最後匹配爲準,與常見 CODEOWNERS 語義對齊。
  2. 只讀匹配:僅解析本地 CODEOWNERS 並對路徑做匹配,不修改倉庫、不調用遠端。
  3. 雙入口:
    - 命令行:bin/dsh-codeowners.mjs(npm 包名 dsh-codeowners,bin 同名)。
    - DSH 內:通過 codeowners_lookup,傳入 root=. 與變更文件列表(見 README Use 節)。
  4. 可導出模塊:package.json 中 exports 含 ./codeowners、./plugin 等,供插件 bundle 與 Cordis patch(dsh.bundle.patch: ./plugin/cordis.patch.yml)集成。
  5. 自帶測試:npm test 運行 node --test test/*.test.mjs。

安裝與啓用

已抓取 README 與 package.json 未給出 dsh plugin add … 一類官方安裝命令,本文不憑倉庫名拼接安裝語句。若要從社區安裝,請以 SkillHub 目錄頁 與倉庫 README 當時記載爲準。

本地驗證或集成開發時,可在克隆或解壓後的倉庫根目錄使用 Node 20+ 直接調用 CLI(與 README 一致):

node bin/dsh-codeowners.mjs --root . docs/a.md src/a.js
node bin/dsh-codeowners.mjs --root . --json

第一條對指定文件做匹配;第二條以 JSON 形式輸出(便於腳本或智能體消費)。在 DSH 進程內啓用插件 bundle 後,按文檔使用 codeowners_lookup,並傳入倉庫 root 與變更文件列表。

安全提示:插件隨當前 DSH 進程權限運行,安裝或啓用前請閱讀源碼、LICENSE(MIT)與 NOTICE.md,確認只讀匹配範圍符合你的環境策略。

典型用法

命令行:指定 root 與文件

在倉庫根目錄執行,對 docs/a.md、src/a.js 做 owner 路由查詢:

node bin/dsh-codeowners.mjs --root . docs/a.md src/a.js

需要結構化結果時加 --json:

node bin/dsh-codeowners.mjs --root . --json

在 DSH 中

README 說明:

Use codeowners_lookup with root=. and the changed files.

即:將倉庫根設爲 root(示例爲 .),並把本次變更的文件路徑交給 codeowners_lookup,由插件按 CODEOWNERS 做 last-match-wins 匹配。

開發自測

npm test

適用場景與注意

適合誰

  • 已在倉庫維護 CODEOWNERS,希望在 DSH 工作流裏 只讀 地把「改了哪些文件 → 對應哪些 owner」算出來,用於提示、分流或審查上下文。
  • 需要與 GitHub 常見 last-match-wins 行爲一致、又不想在本機插件裏綁 GitHub API 的團隊。

務必注意(來自 README Limits)

項 說明
角色 Routing helper,不是 approval / enforcement
外部依賴 無 GitHub API、無 owner 驗證、無 branch protection
Glob 實用子集; unusual patterns 請用測試或 CLI 實測
權限 以 DSH 進程權限讀文件;安裝前檢查源碼與許可證

結尾

dsh-codeowners 把 CODEOWNERS 的 last-match-wins 只讀匹配搬進 DSH,CLI 與 codeowners_lookup 兩條路徑即可復現 README 中的用法;邊界清晰——路由輔助,而非平臺級強制。進一步信息:

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

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

小夜