前言¶
用 DSH(DeepSeek Harness)做编码智能体时有个常见困扰:模型每次 write / edit / bash 之后,改出来的代码有没有类型错误、有没有违反 lint 规则,要等你自己跑一遍工具链才知道。问题发现得晚,修复成本就高。
在 Pi 宿主里,pi-lens 已经解决了这件事:引擎在智能体写码的同时运行 LSP、linter、formatter、类型检查和结构分析。dsh-lens 做的就是把同一套引擎接到 dsh 上。下面介绍它的定位、能力、安装和配置。
这是什么¶
dsh-lens 是 pi-lens 的 dsh 宿主原生适配器,由 NexusAgentX 维护,MIT 许可。分析引擎仍留在 pi-lens,这个插件只负责适配:接住 dsh 的写文件事件,跑同一条管线,再把结果喂回模型。
它解决的问题是让智能体在下一轮请求里就看到自己刚引入的错误,而不是等人来发现。
每次变更后跑什么¶
每当发生 write / edit / bash 变更,插件运行与 pi-lens 相同的管线:
1、format 队列 / 安全自动修复;
2、LSP 文件同步与诊断;
3、ast-grep、tree-sitter、fact 规则与语言扫描器;
4、对疑似相邻文件做级联诊断;
5、回合末汇总 blocker 与建议,注入下一轮模型请求。
也就是说,模型在写下一个动作之前,已经知道自己上一轮留下了什么问题。
注册的工具¶
常驻工具包括:
lens_diagnostics:缓存 / 项目级诊断状态,支持delta/all/full三种视图;lsp_diagnostics:按文件或目录取 LSP 诊断;symbol_search:带排序的标识符搜索;module_report/project_report:模块与项目报告;read_symbol/read_enclosing:按符号读代码。
另有一批工具也注册为可见(原因是 dsh 没有动态工具 API):ast_grep_search / ast_grep_replace / ast_grep_outline / ast_grep_dump、lsp_navigation、lens_diagnostic_mark,以及 pi_lens_activate_tools——它在 dsh 上是一个 no-op 目录,因为所有工具本来就已激活。
其中 lens_diagnostics、ast_grep_search、symbol_search 以搜索卡片形式呈现,并支持文件跟随。
官方 lsp 工具没有被改动:简单的 go-to 继续用官方 lsp,需要完整 IDE 面时再用 lsp_navigation。
/lens-* 命令¶
| 命令 | 作用 |
|---|---|
/lens-toggle |
为当前会话开关整条管线 |
/lens-context-toggle |
保留工具 / LSP / format,但停止向下一轮注入 |
/lens-widget-toggle |
显示或隐藏 WebUI 的芯片与 dock |
/lens-health |
会话健康、LSP 列表、级联、事件循环、noisy rules |
/lens-perf |
进程与机器级 p50/p99 阶段排名 |
/lens-tools |
按来源分组的安装器状态 |
/lens-tdi |
技术债指数 |
/lens-map |
写出 HTML 依赖图,芯片会获得 Open map 动作 |
/lens-allow-edit <path> |
一次性的读保护豁免 |
WebUI¶
在 dsh 官方 web profile 上,插件带一个浏览器端(dsh.client):
- 会话标题旁的 lens 芯片,挂载点是
conversation.session.header.actions; - 输入框上方的 dock,挂载点是
conversation.input.dock; - 使用官方
Menu/Tooltip/StateDot原语、chevron 与 CSS modules,提供 zh/en locale。
实现上有一点值得注意:芯片读取的是 lens session projection,从 tool/result、turn/end 和 /lens-widget-toggle 的 widget-state 折叠而来,不追加自定义 session 事件,所以持久化不会拒绝日志。
Skills¶
当 ctx.skills 存在时,插件会注册四个上游 pi-lens skills:
pi-lens-ast-greppi-lens-lsp-navigationpi-lens-write-ast-grep-rulepi-lens-write-tree-sitter-rule
安装与启用¶
官方安装命令:
dsh plugin --profile web add dsh-lens
也可以从 git 安装:
dsh plugin --profile web add github:NexusAgentX/dsh-lens
环境要求 Node.js >= 20。安装后不要在同一 workspace 上再挂 pi-lens-mcp 或官方 MCP 封装的 pi-lens,那会双开语言服务器。
配置¶
配置文件沿用 pi-lens 的两处:
- 项目级:
.pi-lens.json; - 全局:
~/.pi-lens/config.json。
也可以在 Cordis 条目里直接写开关,省略的键会回落到 .pi-lens.json 或环境变量:
- id: dsh-lens
name: dsh-lens
config:
cwd: /path/to/workspace
enabled: true
lsp: true
format: true
autofix: true
guard: false
readGuard: true
这些布尔键映射到 pi-lens 的同名旗标,比如 --no-lsp、--lens-guard、--immediate-format。
独立 CLI¶
不进会话也能用。两条命令:
npx dsh-lens build-graph --cwd .
npx dsh-lens status
build-graph 产出与 pi-lens build-graph 相同的 review graph;status 查看当前状态。
适用场景与注意¶
适合的场景:在 dsh 上跑编码智能体、希望错误在下一轮就被模型自己修掉、同时想要 ast-grep 规则与依赖图这类结构分析的团队和个人。
使用前有几点需要清楚:
1、插件以当前 dsh 进程的权限运行,安装前应自行检查源码与许可证(MIT);
2、dsh 在分发前冻结工具参数,Pi 的 in-flight edit autopatch 无法改写 old_string;dsh 自身已有先读后改(read-before-edit)的观察策略;
3、部分 Pi 宿主面没有被克隆:TUI footer、交互式 LSP 安装提示、会话 fork / 跨进程 nudge、官方 Settings 卡片,以及上游仍搁置的 /lens-booboo;
4、版本号资料里存在出入(README 标注 dsh-lens@0.2.0,package.json 写 0.2.5),以仓库实际发布为准。
结尾¶
dsh-lens 的价值在于把「写完再查」变成「边写边查」:管线在每次变更后运行,blocker 在回合末注入下一轮请求,模型拿到的反馈是即时的。配置和引擎都与 pi-lens 对齐,Pi 用户迁移到 dsh 时成本很低。
目录页:https://www.skillhub.cn/plugins/NexusAgentX/dsh-lens
GitHub:https://github.com/NexusAgentX/dsh-lens
目录是独立的社区站点,与 DeepSeek / 幻方没有官方从属关系;安装和使用中的问题,建议到仓库 issues 反馈。