🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

语言服务工具 KeynoWu/dsh-lsp-plugin

DeepSeek Harness
KeynoWu77 天前有提交已提供中文文档扫描:含敏感能力

让 agent 语义级查错、找定义、看类型与引用

27.9/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/9/17 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add KeynoWu/dsh-lsp-plugin
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么[目录]—
dsh 原生插件 · dev
暂无时间戳·判据 →
装得上吗[实装验证]✓
本站已真实安装成功
非静态推断
L4 · 真实安装等级说明 →
数据截至 2026/09/26·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/05·判据 →
还在维护吗[仓库]—
更新放缓:最近一次提交在 77 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →

可信度证据

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 15 处,展示前 15 条)
  • 读取本地文件
    scratch-lsp-plugin/src/catalog.ts:360
    return readdirSync(dir).some((name) => name.toLowerCase().endsWith(suffix))
  • 读取本地文件
    scratch-lsp-plugin/src/catalog.ts:373
    return existsSync(`${dir}/${marker}`)
  • 发起网络请求
    scratch-lsp-plugin/src/client.ts:113
    const result = await this.request('initialize', {
  • 发起网络请求
    scratch-lsp-plugin/src/client.ts:229
    return this.request('textDocument/diagnostic', {
  • 发起网络请求
    scratch-lsp-plugin/src/client.ts:297
    await this.request('shutdown', null, 5000)
  • 读取本地文件
    scratch-lsp-plugin/src/detect.ts:27
    accessSync(file, fsConstants.X_OK)
  • 读取本地文件
    scratch-lsp-plugin/src/detect.ts:28
    return existsSync(file)
  • 执行外部命令来自配置/变量
    scratch-lsp-plugin/src/detect.ts:65
    const out = execFileSync(binary, versionArgs, { encoding: 'utf8', timeout: 5000, stdio: ['ignore', 'pipe', 'ignore'] })
  • 读取本地文件
    scratch-lsp-plugin/src/tools.ts:70
    return (readFileSync(file, 'utf8').split('\n')[line] ?? '').trim()
  • 读取本地文件
    scratch-lsp-plugin/src/tools.ts:110
    source = readFileSync(file, 'utf8')
  • 发起网络请求
    scratch-lsp-plugin/src/tools.ts:157
    const def = await s.client.request('textDocument/definition', {
  • 发起网络请求
    scratch-lsp-plugin/src/tools.ts:208
    const hover = await s.client.request('textDocument/hover', {
  • 发起网络请求
    scratch-lsp-plugin/src/tools.ts:241
    const refs = await s.client.request('textDocument/references', {
  • 读取本地文件
    scratch-lsp-plugin/src/tools.ts:294
    const source = readFileSync(file, 'utf8')
  • 发起网络请求
    scratch-lsp-plugin/src/tools.ts:377
    const result = await s.client.request('textDocument/rename', {
扫描于 2026/11/5(0 天前) · 范围 全包扫描 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

社区实装还没有人打卡 · 装过的第一个就是你
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 语义级查错
  • 查找定义与引用
  • 查看类型信息

README

由 DeepSeek 最新模型翻译生成
[!IMPORTANT] 本仓库已归档,不再维护。 功能已融合进 dsh-omp-tools(模块化融合仓库,LSP 为迭代 1 模块),请前往新仓库获取最新版本。 dsh-lsp-plugin 给 DeepSeek Harness 装上真正的语言智能:内置语言服务器检测与进程池,让 agent 在 coding 时拥有语义级的「查错 / 找定义 / 找引用 / 看类型」能力——不再靠猜。 状态:M1–M4 已实现并通过验证(设计文档:lsp-plugin-design.md v2) 为什么需要它:DSH 原本只有「文本级近似」 没有 LSP 时,agent 在代码库里是这样工作的: | 想做的事 | 没有 LSP(现状) | 有了 LSP(本插件) | | 写完代码查错 | 手动跑编译器/测试——慢、要搭命令、输出噪音大 | lsp_diagnostics:毫秒级增量诊断,精确到行,改完 A 立刻知道有没有破坏 B | | 找定义 / 引用 | grep 字符串匹配——漏别名/重导出/动态分发,混进注释和字符串噪音 | lsp_definition / lsp_references:语义精确匹配,穿透 import 别名、重导出、动态分发,不含噪音 | | 理解类型签名 | read 文件自己推断 | lsp_hover:直接给出类型签名与文档 |
展开完整文档(README 剩余 1 节)
[!IMPORTANT]
本仓库已归档,不再维护。 功能已融合进 dsh-omp-tools(模块化融合仓库,LSP 为迭代 1 模块),请前往新仓库获取最新版本。

dsh-lsp-plugin

给 DeepSeek Harness 装上真正的语言智能:内置语言服务器检测与进程池,让 agent 在 coding 时拥有语义级的「查错 / 找定义 / 找引用 / 看类型」能力——不再靠猜。

状态:M1–M4 已实现并通过验证(设计文档:lsp-plugin-design.md v2)

为什么需要它:DSH 原本只有「文本级近似」

没有 LSP 时,agent 在代码库里是这样工作的:

| 想做的事 | 没有 LSP(现状) | 有了 LSP(本插件) |
| 写完代码查错 | 手动跑编译器/测试——慢、要搭命令、输出噪音大 | lsp_diagnostics:毫秒级增量诊断,精确到行,改完 A 立刻知道有没有破坏 B |
| 找定义 / 引用 | grep 字符串匹配——漏别名/重导出/动态分发,混进注释和字符串噪音 | lsp_definition / lsp_references:语义精确匹配,穿透 import 别名、重导出、动态分发,不含噪音 |
| 理解类型签名 | read 文件自己推断 | lsp_hover:直接给出类型签名与文档 |
| 大代码库导航 | 凭文件名和 grep 猜位置 | 按语言服务器解析的真实符号表定位,跨文件引用一次到位 |

核心区别一句话:没有 LSP 的 agent 在「猜」代码,有 LSP 的 agent 在「读」代码。 语义分析是每种语言的重活,不该由 LLM 猜测,也不该让 grep 硬凑——交给专业语言服务器(tsserver / pyright / gopls / rust-analyzer…),agent 只负责「问」和「用答案」。

它最值钱的使用场景:agent 在长会话、大代码库里「行动前先验证、行动后先查错」——这正是当前 coding agent 最常出错、最需要精确信息的地方。

能力

五个工具(四个只读 + 一个写操作,全部基于 LSP 语义分析,非文本搜索):

| 工具 | 作用 |
| lsp_diagnostics | 文件级语言诊断(增量分析,按 severity 排序)——收益最大,写完先查错 |
| lsp_definition | 符号定义位置(穿透别名/重导出/动态分发) |
| lsp_references | 全部引用(含声明,语义精确,不含注释/字符串噪音) |
| lsp_hover | 类型签名/文档(Markdown 扁平化) |
| lsp_rename | 语义重命名(跨文件引用同步,WorkspaceEdit 经 DSH 文件 seam 应用,走写审批) |

内置 16 种语言目录(前端/后端/Android/iOS/数据岗位全覆盖):TypeScript、Vue、HTML、CSS、Python(pyright)、Go、Rust、Java、C#、PHP、Ruby、C/C++、Kotlin、Swift、SQL、R。

- 默认全部不启用——在设置页勾选你要用的岗位语言即可,零资源浪费
- 勾选后当前会话即时生效,无需重启
- 语言服务器不随插件安装:检测本机已有二进制(node_modules/.bin → $PATH);缺失时设置页显示状态,可一键安装引导(每语言内置安装命令,用户级目录安装)

工程化生命周期:懒启动(不勾选不 spawn)、command:projectRoot 进程池(同一项目共享一个服务器实例)、就绪等待独立预算(重语言如 rust-analyzer/sourcekit-lsp 首启不卡工具超时,实测独立超时生效)、idle 回收(空闲自动释放,in-flight 不打断)、崩溃自动重启(上限 1,避免打转)、并发上限(maxConcurrentServers 默认 4,超限明确拒绝)。

快速开始

1. 克隆本仓库,链接插件到目标 profile(以 web profile 为例)
mkdir -p ~/.dsh/profiles/web/node_modules
ln -s "$(pwd)/scratch-lsp-plugin" ~/.dsh/profiles/web/node_modules/dsh-lsp-plugin

2. 在 ~/.dsh/profiles/web/cordis.patch.yml 挂载:
- insert:
- id: dsh-lsp-plugin
name: dsh-lsp-plugin
config:
enabled:
typescript: true

3. 重启 dsh web,开始享受语义级 coding

建议先装好常用语言的服务器(插件负责检测与启动,安装交给包管理器):

npm i -g typescript-language-server pyright # TS/JS + Python(P0,最成熟)
其他语言:gopls / rust-analyzer / clangd / sourcekit-lsp 等按需安装

设置

设置 → LSP 语言:按岗位分组的 16 语言勾选 + 空闲回收超时 + 并发上限;每行显示状态徽标(可用 ✓版本 / 缺失 ⚠ + 安装按钮)。也可直接编辑 ~/.dsh/settings.yaml(外部编辑自动生效):

lsp:
enabled:
typescript: true
python: true
idleTimeoutMs: 300000
maxConcurrentServers: 4

开发与验证

cd scratch-lsp-plugin && npx tsc --noEmit # 类型检查
node scripts/build-client.mjs # client bundle(DSH ModuleLoader 格式)bash
npm run build:status # host remote gateway(装饰器转译)

各里程碑的验证结论(沙箱 spawn、双向 JSON-RPC、五工具 TS/Python 9/9、崩溃重试、settings 接线、慢启动独立预算、并发上限、pyright 噪音修复)记录在设计文档 lsp-plugin-design.md §11.3;开发期验证脚本依赖本机 DSH 安装,保存在仓库历史中,需要时从 git 历史找回。

里程碑

- M0 ✅ 风险验证(沙箱可 spawn 外部二进制、双向 JSON-RPC、环境 scrub)
- M1 ✅ 端到端最小(lsp_definition,agent 实测返回正确定义位置)
- M2 ✅ 四工具 + 生命周期 + 全量目录(9/9 + 崩溃重试 PASS)
- M3 ✅ host settings 接线 + client 设置页(esbuild ModuleLoader bundle,浏览器验收通过)
- M4 ✅ host remote 状态数据源 + 安装引导 + lsp_rename(ctx.fs 写审批)+ pyright 噪音修复 + 慢启动实测 + 并发上限(workspace 诊断按需)

License

MIT
预览分享卡片长什么样 ↓KeynoWu/dsh-lsp-plugin
分享 · DeepSeek Harness Hub
KeynoWu/dsh-lsp-plugin

让 agent 语义级查错、找定义、看类型与引用

这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。
认领条目 →
回到顶部