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 锚定到客观的远程仓库名,它确保了团队成员对同一仓库的记忆是共享且一致的。

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

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

Xiaoye