dsh-lens:让 DeepSeek Harness 里的智能体边写码边拿到诊断

前言

用 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_dumplsp_navigationlens_diagnostic_mark,以及 pi_lens_activate_tools——它在 dsh 上是一个 no-op 目录,因为所有工具本来就已激活。

其中 lens_diagnosticsast_grep_searchsymbol_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/resultturn/end/lens-widget-toggle 的 widget-state 折叠而来,不追加自定义 session 事件,所以持久化不会拒绝日志。

Skills

ctx.skills 存在时,插件会注册四个上游 pi-lens skills:

  • pi-lens-ast-grep
  • pi-lens-lsp-navigation
  • pi-lens-write-ast-grep-rule
  • pi-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 反馈。

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

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

小夜