前言¶
在 DeepSeek Harness(DSH)里让智能体改代码,常见收尾是整仓搜索、逐个打开相关文件,再跑一遍全量类型检查或测试。问题往往不是不想做完整验证,而是每次都靠扫描来猜影响面。
社区插件 dsh-code-impact(维护者 Locael123,目录分类为工作流)把仓库关系预先建成内存里的符号索引与引用图;改完文件后只重解析变更处,用查询和校验工具给出 file:line、置信度以及未验证部分,而不是再 grep 一遍。下面介绍它是什么、怎么装、怎么用。
这是什么¶
dsh-code-impact 面向 DSH 智能体的编辑后影响检查:维护符号索引、引用图和继承模型,用索引回答问题「这次编辑碰到了什么」,而不是「重新扫全仓再跑一切」。
实现上是无依赖的启发式引擎(README 标注支持 TypeScript、JavaScript、Go),作为 DSH host bundle 注册工具,并在设置里提供可浏览的同一套索引页面(Settings → Code Impact)。
核心功能¶
两个会话工具¶
每个 agent 会话会注册两个工具。
code_query¶
按 op 查询索引,常见操作包括:
op |
作用 |
|---|---|
find |
定位符号(如 addNode、Graph.addNode、ts:src/x.ts#Graph.addNode) |
outline |
单文件声明骨架:行范围、导出、继承子句 |
refs |
谁引用了该符号(逐处解析,同名局部变量不算) |
hierarchy |
继承 / 实现 / 子类型 / 成员(自有、继承、重写) |
search |
在名称与签名上做子串匹配 |
status |
索引规模、根目录、缓存位置、引擎模式、解析失败项 |
README 中的 find 示例:
find "parseTimeout" — 1 match
ts:src/config.ts#parseTimeout
variable src/config.ts:1-1 exported refs:3
parseTimeout = 30 ;
refs 会列出引用站点及置信度分类(exact / resolved / heuristic / unresolved mentions)。
code_verify¶
在编辑后调用,替代全仓重扫。只重解析磁盘上变更(及新发现)的文件,并报告符号级差异。
verdict 四级:
clean:无变更internal:仅实现层(如 body-only,签名未变、调用方不受影响)contract:签名或导出变更,调用方可能需要改breaking:曾有引用指向的符号消失,出现 dangling 引用
规则要点(来自 README):例如 const timeout = 30 改为 = 60 记为 value change / body-only,不会当成 contract;容器类型(class / interface / struct)本身不单独罗列,由成员变化表达。code_verify 是增量的:相对上次索引同步报告变化;连续两次调用且中间未再编辑,第二次应为 clean。
internal 示例:
verify — verdict: internal
1 file changed (0 deleted) · +0 -0 symbols · 1 body-only
body-only (signature unchanged, callers unaffected):
ts:src/config.ts#parseTimeout refs:6
breaking 示例会列出消失的符号与无法再解析的引用。
索引浏览页¶
Settings → Code Impact 与工具共用同一索引,无需重新扫描即可查看:
| 视图 | 内容 |
|---|---|
| Architecture | 按符号数加权的目录 treemap,按语言着色 |
| Imports | 文件级 import 图(弦图) |
| Inheritance | 类型层次,implements 为虚线 |
| Sessions | 各会话对插件的调用记录 |
页头有文件 / 符号 / 语言等统计、索引构建时间与跳过文件警告,以及 Refresh。Sessions 记录每次 code_query / code_verify(写入 $DSH_HOME/cache/code-index/usage.json,重启后仍可读;Clear 只清空使用记录,不动索引)。Open full page 打开 /code-impact/app 全屏视图。
可在页头输入绝对路径为第二个工作区建索引并切换;agent 在某 cwd 下首次调用 code_query 也会隐式索引该工作区。读接口仅允许已索引目录或会话工作目录;POST /code-impact/api/index 在请求时构建缓存,拒绝相对路径、缺失目录与普通文件,且不在仓库内写入。
安装与启用¶
安装命令以 README 为准:
# from GitHub (or any published tarball / registry package)
dsh plugin --profile desktop add github:Locael123/dsh-code-impact
dsh web # restart: the host half of a plugin is imported once, at boot
本地 checkout 可用:
plugin_manager install_bundle <absolute path>/dsh-code-impact
插件为 Cordis/DSH bundle(package.json 当前版本 0.2.2),零依赖、纯 ESM。安装后需重启 Web 侧(dsh web),host 半部在启动时加载一次。
典型用法¶
- 改代码前或定位时,用
code_query的find/refs/hierarchy查清符号定义与引用链。 - 保存编辑后调用
code_verify,根据verdict决定是否需要改调用方或跑针对性检查。 - 在 Settings → Code Impact 查看架构、导入与继承关系,或在 Sessions 里核对本会话查询历史。
循环设计是:每改一次就问一次 verify;第二次无新编辑时应得到 clean。
适用场景与注意¶
适合在 DSH 智能体工作流里做改后影响面判断:重命名、改默认值、删方法、改导出或签名时,先拿 contract / breaking 与具体行号,再决定是否全量测试。
范围与限制以 README Scope & limits 为准:语言覆盖为 TS / JS / Go;启发式解析会有未解析或 heuristic 项,答案会标明 unverified 部分,避免「大概没事」式结论。
插件在当前 dsh 进程权限下读盘、建缓存;安装前请自行查看 GitHub 仓库 源码与 LICENSE,确认符合你的合规要求。社区目录 skillhub.cn 插件页 为独立收录站点,与 DeepSeek / 幻方无官方从属关系。
结尾¶
dsh-code-impact 把「改完再扫全仓」换成「索引里一次查询 + 增量 verify」,让智能体在 DSH 里用结构化结论回答「碰到了什么」。可从目录页了解收录信息,从 GitHub README(含 中文文档 README.zh.md)查看完整 API 与路由说明。