dsh-hindsight-bank-router:將 Hindsight 的 bank 身份錨定到遠程倉庫名

前言

在 DeepSeek Harness (DSH) 的記憶生態中,@vectorize-io/hindsight-coding-agents 爲每個倉庫提供長期記憶,但其 bank 名稱默認取自本地目錄名。這導致同一個倉庫因克隆目錄不同(例如 payments-app 與 mobile-client)而分叉成互不相通的記憶庫。

本插件 dsh-hindsight-bank-router 由 j62268781-alt 維護,是一個 MIT 協議的開源插件。它的核心作用是:把 Hindsight 編碼插件的 bank 身份錨定到遠程倉庫名,而不是本地目錄名,從而讓同一倉庫的每個克隆都共享同一個記憶庫。

核心功能

插件通過動態生成 mapPathToBank 配置,實現以下能力:

  • 錨定遠程倉庫名:無論本地目錄叫什麼,都統一解析爲 git::<遠程倉庫名>。
  • 聲明式優先級鏈:支持用戶級工作區文件、倉庫內 .hindsight.json、git 遠程名、本地目錄名的優先級覆蓋。
  • 雙開關啓用機制:必須同時滿足用戶級 enableBankRouter 和部署級 enabled 爲 true 才生效。
  • 絕不覆蓋用戶配置:sidecar 狀態文件記錄管理範圍,僅刪除自己生成的條目。
  • 零子進程開銷:直接讀取 .git/config,不 spawn git 進程,避免超時和負載問題。
  • 中文倉庫名支持:正確處理 URL 解碼,支持中文倉庫名映射。
  • 失敗開放:任何異常只記日誌,不阻斷 DSH 啓動。

路由規則與優先級鏈

插件在處理 bank 映射時,遵循嚴格的優先級順序,一旦命中即停止後續查找:

  1. 用戶級工作區文件:~/.hindsight/workspaces/<目錄名>.json 中的 bankId(優先級最高)。
  2. 倉庫內配置:<工作區>/.hindsight.json 中的 bankId。
  3. Git 遠程倉庫名:檢測到 .git 目錄且存在 origin 遠程地址時,生成 git::<遠程倉庫名>。
  4. 本地目錄名:非 Git 目錄或無 origin 的倉庫,回退到默認行爲。
  5. 非 Git 目錄默認:當配置允許時,爲根目錄的直接子目錄生成 workspace::<目錄名>。

注意:顯式配置(第 1、2 項)優先級最高,無論是否爲 Git 倉庫都會覆蓋後續規則。這是用戶手動干預的“逃生艙”。

啓用開關

默認情況下路由功能是關閉的,必須顯式開啓。這要求兩個開關同時爲 true:
* 用戶級總閘:在 ~/.hindsight/coding-agent.json 中設置 "enableBankRouter": true。
* 部署級開關:在 cordis.patch.yml 的 config 中設置 enabled: true(通常由 DSH profile 控制)。

安裝

本插件是 Hindsight 的補充,需先安裝 Hindsight 編碼插件。

dsh plugin --profile desktop add @j62268781-alt/dsh-hindsight-b

配置示例

插件會在 DSH 啓動時自動掃描併合並配置。你可以通過顯式配置來覆蓋默認行爲:

{
  "bankId": "custom::my-bank"
}

此配置會被寫入 ~/.hindsight/coding-agent.json 的 mapPathToBank 字段中。

安全與限制

  • 不遞歸掃描:只處理根目錄的直接子目錄,遇到 .git 目錄即停止向下遞歸。
  • 非 Git 目錄限制:非 Git 目錄的 bank 名仍是目錄名,不同人同名目錄可能映射到同一個 bank(插件不處理此場景)。
  • 配置損壞保護:如果配置文件存在但 JSON 解析失敗,插件會跳過並告警,不會覆蓋現有內容。
  • 無 origin 處理:沒有遠程地址的倉庫不生成映射,交回 Hindsight 的默認邏輯。

總結

對於使用 DSH 的開發者而言,dsh-hindsight-bank-router 解決了 Hindsight 在多終端協作中的記憶分叉問題。通過將 bank 錨定到客觀的遠程倉庫名,它確保了團隊成員對同一倉庫的記憶是共享且一致的。

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

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

小夜