前言¶
用 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 反饋。