dsh-codebase-memory
DeepSeek Harness plugin: connects the codebase-memory-mcp code graph, nudges the model at the decision point, corrects failed MCP calls, and indexes repositories by itself.
- Stars
- 0
- Language
- JavaScript
- Created
- Oct 8, 2026
- Updated
- Oct 14, 2026
Introduction
dsh-codebase-memory
English | 中文
把 codebase-memory-mcp 的代码图接进 DeepSeek Harness —— 不只是接上,而是让模型真的用它。
代码图工具最常见的失败不是「接不上」,而是「接上了没人用」:提示写在 system prompt 开头,而决策发生在第 50 步。本插件把该做的事放到决策点上,包括替模型建索引。
安装
-
先装
codebase-memory-mcp(见其上游 README),确认可用:codebase-memory-mcp --version -
在 DSH 的插件管理器里安装本插件(官方流程会同时完成包安装与 bundle 选择):
github:smter/dsh-codebase-memory#663d24657256321a82934289f5ba3a281be677f4已固定到该 commit;升级时换成新 commit,或改用 tag
v1.0.0。 -
重启
dsh web。之后 Settings 里会出现本插件两个行的选项。
codebase-memory-mcp不在 PATH 上时,改设置里的autoIndexCommand,以及 MCP 行的command。 若要顺带自愈「旧 daemon 世代」(见「已知限制」),把这两处指向本仓库自带的bin/cbm-mcp-preflight。
它做什么
一个 bundle,三行:
| 行 | 作用 |
|---|---|
codebase-memory-mcp | 连接本地 stdio MCP 服务,工具以 mcp__codebase-memory-mcp__* 暴露 |
codebase-memory-reminder | 往 system prompt 注入一段提示,每个 model step 都在 |
codebase-memory-nudge | 在工具管线里按需出手:纠正报错、决策点提醒、自动建索引 |
codebase-memory-nudge 的三件事,每件都有实测依据:
- 纠正失败的 MCP 调用 —— 报错时在下一次决策点注入「这次该怎么改」。
实测:某项目 17 次
search_graph中,带semantic_query键的 10 次全部失败(空数组[]也算),不带的 7 次全部成功;一个子代理因此连续重试 8 次后彻底放弃该工具。 - 决策点提醒 —— 刚 grep 源码、或刚读满 100 行以上源码时,在那次结果后面附一句。 实测:只放 system prompt 时,某会话 12 次 MCP 调用中 10 次失败并很快放弃,另一会话 228 次工具调用里 0 次使用代码图。
- 自动建索引 —— 发现正在读的路径属于未索引的 git 仓库时,插件自己跑
codebase-memory-mcp cli index_repository,然后把准确的 project 名和可直接粘贴的调用交给模型。 实测:某会话被要求建索引后,先建错了仓库、再建对,正确解析出 project 名、写下「use the daily graph」,然后一次都没查。所以这一步不让模型做。
前置条件
- DSH
0.2.0-rc.1(本插件在该版本上验证) codebase-memory-mcp已安装:MCP 行通过官方StdioClientTransport启动它,自动索引复用同一个可执行文件的cli一次性模式
设置
两个行都声明了 Config schema,选项会在 Settings 页自动成表单。常用几项:
| 设置 | 默认 | 说明 |
|---|---|---|
autoIndex | true | 自动为未索引的 git 仓库建索引 |
autoIndexMode | fast | fast / moderate / full |
autoIndexMaxFiles | 20000 | 超过此文件数的仓库不自动索引 |
autoIndexCommand | codebase-memory-mcp | 可执行文件路径(走 PATH) |
minLines | 100 | 读多少行以上算「读长源码」 |
cooldown | 6 | 第 1 次提醒后每隔几次符合条件的调用再提醒 |
correctMCP | true | 是否纠正失败的 MCP 调用 |
完整字段见 Settings 页,或 index.js / hook.js 里的 Config。
开发与测试
pnpm install
pnpm test
57 个用例,不需要网络或真实索引:
test/triggers.test.mjs— 30 例:行数阈值、源码过滤器正反例、提醒节奏、消息形状test/corrections.test.mjs— 13 例:用真实报错文本驱动纠正规则(含 2026-10-14 的 daemon 世代冲突两条)test/autoindex.test.mjs— 14 例:用桩可执行文件驱动完整索引链路与全部 guard
设置 CBM_DEBUG=1 可看到自动索引被跳过的原因。
已知限制
-
PTC 模式下 Tool SDK 把多数 MCP 工具的参数渲染成
unknown,模型只能靠描述猜参数名。本插件用 system prompt 写明调用签名来绕过;根因在渲染侧,值得上游修。 -
worktree 会被索引成独立 project(worktree 里
.git是文件)。这通常正是想要的,但主 checkout 的索引不会自动覆盖 worktree,反之亦然。 -
autoIndexMaxFiles是有界遍历估算(不读.gitignore),只是粗粒度护栏。 -
旧 daemon 世代会锁死一切写入,而读调用照常成功 —— 二进制升级后,上一世代的
codebase-memory-mcpdaemon 可能仍然活着:index_repository报active daemon coordination could not be verified safely(CLI 则拒绝启动,称存在pre-coordination or unverifieddaemon),但list_projects/get_file_outline/search_graph全部正常返回 —— 因此极易被误判成「这个仓库没被索引 / 索引不支持这个语言」。本仓库自带bin/cbm-mcp-preflight:启动前探一次,健康即原样exec,冲突则杀掉旧 daemon、重探、再exec(探针上限 ~4s,任何情况下都不挡住工具面;每次自愈写~/.cache/codebase-memory-mcp/logs/repairs.log)。# 让 MCP 行与自动索引都走它(两边都要改;自动索引那次 spawn 是静默的) codebase-memory-mcp.command = /path/to/bin/cbm-mcp-preflight codebase-memory-nudge.autoIndexCommand = /path/to/bin/cbm-mcp-preflight手工兜底:
pkill -f 'codebase-memory-mcp --cbm-daemon-internal',然后原样重试原调用(CLI 会自建新世代)。codebase-memory-nudge也会在报错文本里认出这两种串,就地注入上面这条修法。