前言¶
在 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