dsh-cbm-autorefresh:按 Session 工作目录刷新 codebase-memory 索引

前言

在 DeepSeek Harness(DSH)里用 codebase-memory 做代码图与检索时,Harness 往往只为整个应用维持一条 MCP 连接,codebase-memory 侧难以知道「当前 Session 实际在哪个 workspace」。结果是各项目常见 watch.reason: not_session_project,索引不会随 Session 自动更新。若你依赖已建好的 codebase-memory 索引、又会在 DSH 里开多个 Session 或频繁切换工作目录,就需要在 Session 生命周期里显式把「当前目录」对应的索引刷新到最新。

下面介绍社区插件 dsh-cbm-autorefresh(维护者 xingbei437,SkillHub 分类为「记忆」):在 Session 创建、工作目录变更以及插件热加载时,针对该 Session 自己的工作目录调用 codebase-memory CLI 执行 refresh,而不常驻额外后台进程。

这是什么

dsh-cbm-autorefresh 是 DeepSeek Harness 插件,描述为:为每个 Session 在其自身 working directory 上刷新 codebase-memory 索引。源码与说明见 GitHub 仓库,社区目录页为 SkillHub。许可证 MIT;package.json 标明版本 0.1.0,运行环境要求 dsh >=0.2.0 且 <0.4.0、Node >=20。

它与「首次全量建索引」分工不同:插件不创建新索引,只刷新已存在且与 git 仓库根路径匹配的项目。

核心功能

根据 README,插件在以下时机触发刷新(每次为短时 CLI 调用,无变更时约 1–3 秒;重度索引由 codebase-memory 共享 daemon 承担,N 个 Session 不会对应 N 个常驻进程):

  1. session/created:刷新该 Session 当前工作目录对应的索引。
  2. working-directory/change:刷新切换到的新目录对应索引。
  3. 插件 (re)load:对当时已存在的 Session 做补偿刷新。

内部流程概览:从 Session 工作目录用 git rev-parse --show-toplevel 取仓库根;用 codebase-memory-mcp cli list_projects --format json 找 root_path 匹配的项目;再执行 codebase-memory-mcp cli index_repository --repo-path <root>。

行为与边界(节选):

情况 结果
Session 落在已索引仓库 刷新索引(无变更时约 1–3 s)
Session 切换到另一已索引仓库 刷新该仓库索引
仓库尚未建索引 跳过并记日志(首次索引需人工 deliberate)
非 git 工作目录 跳过并记日志
同目录在 minIntervalMs 内 节流跳过
同仓库已在刷新中 single-flight 跳过

已知限制:长时间在同一目录大量编辑、且既不新开会话也不换目录时,主要靠 session 开始时刷新;若需更密触发需自行扩展。本机须已安装 codebase-memory-mcp(配置项 binary 或环境变量 $CBM_BIN)。

安装与启用

在 DSH profile 目录(示例 ~/.dsh/profiles/desktop)安装依赖:

# in your DSH profile directory, e.g. ~/.dsh/profiles/desktop
pnpm add dsh-cbm-autorefresh

在 profile 的 package.json 里把 bundle 加入清单后重载 profile:

// package.json
{
  "dsh": {
    "profile": {
      "bundles": ["@deepseek-ai/dsh-base", "dsh-cbm-autorefresh"]
    }
  }
}

包内自带 cordis.patch.yml 会自动挂载;若要在 profile patch 里关闭:

- id: cbm-autorefresh
  disabled: true

配置

在 profile patch 中可覆盖插件配置(字段以 README 为准):

- id: cbm-autorefresh
  name: dsh-cbm-autorefresh
  config:
    enabled: true                 # false turns every trigger off
    binary: /path/to/codebase-memory-mcp   # default: $CBM_BIN, then ~/.local/bin/codebase-memory-mcp
    minIntervalMs: 300000         # per-directory throttle (default 5 minutes)
    timeoutMs: 600000             # per CLI call timeout (default 10 minutes)
    logFile: /tmp/cbm-autorefresh.log      # optional: also append every refresh line to a file

enabled: false 会关闭全部触发;minIntervalMs 默认 5 分钟,用于按目录节流;单次 CLI 超时默认 10 分钟。

典型用法

启用 bundle 并保证 codebase-memory-mcp 在 PATH 或通过 binary / $CBM_BIN 指定后,无需额外 API 调用:打开 DSH Session 或切换工作目录到已经纳入 codebase-memory 的 git 仓库时,插件会自动尝试 refresh。若目录未索引或非 git 仓库,可在日志或可选的 logFile 中查看跳过原因。

开发与自测方面,仓库提供:

npm test

适用场景与注意

适合:已在机器上为各项目建好 codebase-memory 索引,并在 DSH 中多 Session、多仓库切换,希望索引跟当前 Session 目录对齐而非长期 not_session_project 的场景。

安装前建议阅读 GitHub 源码 与 MIT 许可证;插件以当前 DSH 进程权限执行 git 与 codebase-memory CLI,profile 与 binary 路径应与你本机安全策略一致。SkillHub 等社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系,插件也不代表官方应用商店条目。

星标等目录元数据以 SkillHub 页面为准(抓取时为 0)。

结尾

dsh-cbm-autorefresh 补齐 Harness 单连接 MCP 下 codebase-memory 无法感知 Session 工作区的问题:按 Session 与工作目录刷新已有索引,短生命周期 CLI、共享 daemon 索引,适合作为 DSH「记忆」类能力链中的一环。

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

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

小夜