前言¶
在 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 映射時,遵循嚴格的優先級順序,一旦命中即停止後續查找:
- 用戶級工作區文件:
~/.hindsight/workspaces/<目錄名>.json中的bankId(優先級最高)。 - 倉庫內配置:
<工作區>/.hindsight.json中的bankId。 - Git 遠程倉庫名:檢測到
.git目錄且存在origin遠程地址時,生成git::<遠程倉庫名>。 - 本地目錄名:非 Git 目錄或無
origin的倉庫,回退到默認行爲。 - 非 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 錨定到客觀的遠程倉庫名,它確保了團隊成員對同一倉庫的記憶是共享且一致的。
- 插件目錄:dsh-hindsight-bank-router
- 源碼地址:GitHub