DeepSeek Harness Hub
← 返回列表

PerryLink/dsh-lsp-actions

DeepSeek Harnessspec-screened在 GitHub 查看 ↗
✓ 可直接安装

🛰️ dsh-lsp-actions

自动检查通过:npm 包已发布且 engines 声明满足基线(声明 Node ^22.19.0 || >=24.0.0);该结论来自程序自动检查,未经人工实机验证。 · 最近上游提交 2026/9/12 · 已提供中文文档

DeepSeek Harness 的 LSP 操作界面:基于语言服务器的诊断、格式化、补全、代码操作、符号、签名帮助、内联提示和重命名工具

综合分
42.9
GitHub 分
42.9
用户评分
★ Stars
19
周下载量
安装插件(需先安装 dsh CLI 引擎:npm install -g @deepseek-ai/dsh)
dsh plugin --profile web add dsh-lsp-actions
npm 包 dsh-lsp-actions 已校验归属本仓库,走 npm 安装最省事
数据截至 2026/9/17(元数据每日更新 · 实装验证按队列轮转,单条结论的验证时间见上方)
安装兼容性检查✓ 自动检查通过

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

npm 包dsh-lsp-actions @ 0.5.1
Node 引擎要求 ^22.19.0 || >=24.0.0 · 基线 Node 22.19 满足
dsh CLI 依赖未声明 dsh 版本约束
入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后验证 2026/9/17 16:25:17

依赖的 DSH / Cordis 模块
@deepseek-ai/dsh-attachment@deepseek-ai/cordis@deepseek-ai/cordis-plugin-include@deepseek-ai/cordis-plugin-loader@deepseek-ai/dsh-fs@deepseek-ai/dsh-llm@deepseek-ai/dsh-lsp@deepseek-ai/dsh-sandbox@deepseek-ai/dsh-sandbox-policy@deepseek-ai/dsh-subprocess@deepseek-ai/dsh-timeout@deepseek-ai/dsh-tools
用户评分
还没有人投票,来当第一个
订阅周报,不错过优质插件更新
每周一封 · 高评分插件 + 新用户活动

README

🛰️ dsh-lsp-actions
- 1024 商店频道:先执行一次 npm i -g dsh1024,然后执行 dsh1024 plugin --profile web add dsh-lsp-actions(计入 deepseek1024.com 安装排名)。
Gitee

DeepSeek Harness 的 LSP 操作界面——真实语言服务器、真实反馈,以及面向编辑器的 IDE 集成后端。

为你的智能体编辑器循环提供诊断、格式化、补全、代码操作、符号、签名帮助、内联提示和重命名——外加稳定的编辑器操作协议(lsp.actions.),让任何编辑器都能直接消费这些能力。*

License
DSH plugin
dsh-doctor
Node
CI
Version
npm version
npm downloads

English · 简体中文 · Español · Português · हिन्दी

兼容性

| 接口面 | 状态 |
|---|---|
| Harness | DeepSeek Harness dsh-v0.1.5-rc.2(兼容性声明为 >=0.1.2-rc.1 =0.1.5-alpha.1 =24.0.0 |
| 平台 | 全部(纯宿主;子进程 + 文件系统,无网络) |
| 模型 | 任意(工具与模型无关;该插件从不调用模型) |

你将获得

dsh-lsp-actions 作为单个宿主行挂载(id: lsp-actions、name: dsh-lsp-actions、inject: [tools, fs, subprocess])。官方 DeepSeek Harness 的 ctx.lsp 接缝覆盖导航(转到定义、引用、实现、悬停);本插件补全了操作界面——即智能体在编写和修复代码时所需的反馈循环:

1. 八个 lsp_ 工具——诊断、格式化、补全、代码操作、符号、签名帮助、内联提示和重命名,全部由你的 IDE 所使用的同一批语言服务器提供支持。
2. 编辑器操作协议 v1 —— 一个稳定的 JSON-RPC 接口(lsp.actions.list / lsp.actions.run / lsp.events),让任何编辑器(首先是 VS Code)能够直接消费这些能力。
3. 真实服务器验证 —— 真实的 typescript-language-server 运行是测试套件的一部分(自包含,在 Linux、Windows 和 macOS 上针对 Node 22/24 进行 CI),而不仅仅是 mock。

快速开始

1. 将 bundle 安装到你的 profile 中
dsh plugin --profile web add "github:PerryLink/dsh-lsp-actions#main"

或者从 npm 安装(已发布的版本)
dsh plugin --profile web add dsh-lsp-actions

2. 重启并验证该行
dsh --profile web --dump-config | grep -A3 'id: lsp-actions'

安装与卸载

- git 渠道(最新的 main):dsh plugin --profile web add "github:PerryLink/dsh-lsp-actions#main" —— prepare 脚本会执行构建(tsc --noEmitOnError && node scripts/fix-dts.mjs)。
- npm 渠道(已发布的版本):dsh plugin --profile web add dsh-lsp-actions。
- tarball 渠道:在本仓库中运行 pnpm pack,然后执行 dsh plugin --profile web add ./dsh-lsp-actions-.tgz。
- 卸载:dsh plugin --profile web remove dsh-lsp-actions(或从 profile patch 中移除该行)。

配置

所有可调项都是 Schemastery Config 字段(可从 cordis.yml 修改)。以 id 为目标的覆盖会替换整行 —— 你需要重新声明所需的每一个键。cordis.patch.yml 内联记录了每个键。

| 键 | 默认值 | 含义 |
|---|---|---|
| servers | {} | 具名语言服务器;空表不会激活任何服务器 |
| editor.enabled | false | 通过 JSON-RPC stdio 提供编辑器操作协议(仅限无头后端) |
| editor.requestTimeoutMs | 60000 | 编辑器协议每次运行的超时预算(毫秒) |
| editor.diagnosticsCacheMaxFiles | 64 | 有界 LRU 诊断缓存大小(文件数) |
| maxDiagnostics | 200 | 每个结果的诊断上限 |
| maxCompletionItems | 20 | 每个结果的补全项上限 |
| maxCodeActions | 50 | 每个结果的代码操作上限 |
| maxSymbols | 100 | 符号结果上限 |
| maxSignatures | 10 | 签名帮助上限 |
| maxInlayHints | 200 | 内联提示上限 |
| maxResultChars | 16000 | 渲染结果上限(字符数) |
| maxDocumentBytes | 4000000 | 文档读取上限(字节数) |
| timeoutMs | 60000 | 每次调用的超时,由官方超时策略强制执行 |

每个 servers 条目都是一个 LspServerEntry:command(加载时在 PATH 上解析的可执行文件)和 extensionToLanguage(".ts" → typescript)是必需的;可选的 fileGlobs、projectMarkers、args、env、initializationOptions、configuration、formattingOptions、maxMessageBytes、maxStderrBytes、killGraceMs、shutdownTimeoutMs、diagnosticsSettleMs、diagnosticsDebounceMs 和 idleTimeoutMs(0 = 保持服务器进程存活)用于调整内置的 stdio 客户端。
路由是确定性的,并且由配置驱动。每个文件都从以下来源中取第一个匹配项:(1) 一个 fileGlobs 与该路径匹配的服务器条目;(2) 最近的祖先目录——向上查找到工作区根目录——该目录包含某个条目的 projectMarkers 中列出的项目配置文件,并与同样映射该文件扩展名的条目进行匹配;(3) 其 extensionToLanguage 映射该文件扩展名的条目,按配置顺序。因此,一个包含 apps/node-app/{package.json,tsconfig.json,src/main.ts} 和 apps/deno-app/{deno.json,src/main.ts} 的工作区,会从各自项目的服务器提供每个 main.ts,无需维护路径规则,并且在添加、重命名或移动项目时也无需更改任何内容:

servers:
typescript:
command: typescript-language-server
args: ["--stdio"]
extensionToLanguage: { ".ts": typescript, ".tsx": typescriptreact }
projectMarkers: ["package.json", "tsconfig.json"]
deno:
command: deno
args: ["lsp"]
extensionToLanguage: { ".ts": typescript, ".tsx": typescriptreact }
projectMarkers: ["deno.json", "deno.jsonc"]

项目标记只会在已经映射该文件扩展名的服务器之间进行选择(它绝不会扩大某个条目的文件类型范围);向上查找永远不会离开工作区根目录,并且一个目录中的项目配置绝不会应用于同级目录。步骤 (1) 的优先级高于项目标记:fileGlobs 与该路径匹配的条目仍然胜出,因此当你采用 projectMarkers 时,请移除项目级 glob——残留的 /.ts glob 会继续占用这些文件。这些规则管理内置的 stdio 客户端——挂载的 ctx.lsp 接缝提供程序会自行决定其路由。

工具与界面

| 界面 | 类型 | 备注 |
|---|---|---|
| lsp_diagnostics | 工具 |  — 编译器/分析器错误、警告和提示,包含严重性、范围、消息和来源服务器(只读) |
| lsp_format | 工具 |  [range?] — 通过语言服务器格式化文件/选区并应用,返回差异(通过 fs/write-intent 写入) |
| lsp_completion | 工具 |    — 光标位置的补全建议,包括插入文本(只读) |
| lsp_code_action | 工具 |  [range?] [only?] — 经服务器验证的快速修复/重构及其编辑,针对某个范围或第一个诊断(仅供参考) |
| lsp_symbols | 工具 |   — 按名称进行工作区范围的符号搜索,或某个文件的大纲(只读) |
| lsp_signature | 工具 |    — 调用内部的签名帮助(参数和文档)(只读) |
| lsp_inlay_hints | 工具 |  [range?] — 来自服务器的类型注解和参数名提示(只读) |
| lsp_rename | 工具 |     — 经服务器验证的重命名,在工作区范围内应用,并提供每个文件的差异(通过 fs/write-intent 写入) |
| lsp.actions. | protocol | 编辑器操作协议 v1:基于 JSON-RPC 的 lsp.actions.list / lsp.actions.run / lsp.events |
| examples/vscode/ | extension | 仅 UI 的 VS Code 扩展,以及它所连接的无头后端组合 |

编辑器操作协议 v1

当在专用无头组合中设置 editor.enabled: true 时,dsh-lsp-actions 会通过换行分隔的 JSON-RPC 2.0(与官方 SDK/ACP 传输相同的线路帧格式)提供稳定的编辑器协议:

| 方法 | 作用 |
|---|---|
| lsp.actions.list | 返回 lsp-actions/v1 协议版本、操作目录(diagnostics.get、completion.get、quickfix.apply、format——每项都标记了 writes),以及可寻址的 DSH 会话 |
| lsp.actions.run | 使用结构化的 { requestId, action, status, result \| error } 信封执行一个操作;错误携带稳定的 LSP_ACTION_ 代码 |
| lsp.events | 订阅流式 lsp.event 通知:diagnostics.updated、action.status、file.changed、sessions.changed |

所有写入操作(quickfix.apply、format)都经过官方权限预设和审批:read-only 会话在任何服务器往返之前就会以 LSP_ACTION_READ_ONLY 被拒绝,编辑会经过 fs/write-intent 瀑布流,而 sandbox_permissions + justification 升级对会通过官方 approveEscalation 询问来解决(当没有应答者可以决定时故障关闭)。完整线路规范,双语:docs/editor-protocol.md · docs/editor-protocol.zh-CN.md。

版本管理与向后兼容承诺

- 协议是版本化的——lsp.actions.list 返回 protocol: "lsp-actions/v1"、version: 1。v1 已冻结: 字段名、操作 ID、事件类型和错误代码永远保持稳定。
- 演进仅限增量:新操作、字段和事件类型无需版本升级即可加入;现有语义绝不原地更改;破坏性变更在新的 protocol 版本下发布,服务器可以同时提供多个版本。
- 客户端必须忽略未知字段、未知事件类型和未知操作,并基于稳定的错误 code 进行路由,绝不基于消息文本。

错误代码

每个失败都携带稳定的 code;模型和调用方基于代码进行路由,绝不基于消息文本。

| 代码 | 含义 |
|---|---|
| LSP_ACTION_UNAVAILABLE | 没有服务器条目,也没有接缝提供者处理此文件 |
| LSP_ACTION_UNSUPPORTED | 服务器(或接缝提供者)未声明支持该操作 |
| LSP_ACTION_SERVER_FAILED | 服务器失败(附带其 stderr 尾部);启动失败会重试一次 |
| LSP_ACTION_MALFORMED_RESPONSE | 服务器发送了结构无效的负载 |
| LSP_ACTION_CONFLICT | 文件自读取后已更改,或编辑重叠 / 越界 / 离开工作区 |
| LSP_ACTION_READ_ONLY | 会话的沙箱模式禁止格式化/重命名写入 |
| LSP_ACTION_WORKSPACE_REQUIRED | 调用会话没有可用于作为服务器根目录的工作区 cwd |
| LSP_ACTION_NO_SYMBOL | 服务器在光标位置未找到可重命名的符号 |
| LSP_ACTION_UNKNOWN | 编辑器协议:未知的操作 id,或没有代码操作匹配 title/index |
| LSP_ACTION_INVALID_ARGS | 编辑器协议:格式错误的操作参数 |
| LSP_ACTION_APPROVAL_UNAVAILABLE | 编辑器协议:审批路径无法授予更宽的沙箱模式(故障关闭) |
| LSP_PROTOCOL_VERSION_UNSUPPORTED | 编辑器协议:所声明的协议版本不受支持 |

VS Code 扩展

examples/vscode/ 附带了一个仅 UI 的扩展(侧边栏包含 DSH 会话、诊断列表、一键快速修复应用、按范围打开以及格式化),以及它通过 ACP 风格 JSON-RPC 连接的无头后端组合(backend/cordis.yml)。该扩展不实现任何 LSP 逻辑——每一项能力和每一个写入的字节都属于插件。安装步骤、设置以及演示 gif 录制脚本位于 examples/vscode/README.md。

编辑器演示

权限与数据

- 权限:格式化和重命名遵循官方权限预设和审批——fs/write-intent 瀑布流以及通过 ctx.approval 解析的 sandbox_permissions / justification 升级对。该插件在其 workshop 清单中声明了 fs:read、fs:write、subprocess:spawn 和 network:none。
- 数据:磁盘上不存储任何内容;工具结果仅存在于会话日志中(无跨会话持久化)。编辑器协议保留一个有界的内存 LRU 诊断缓存,带有新鲜度标记,且从不跨重启持久化。
- 无网络:该插件不发起任何网络请求;它通过本地子进程 stdio 与语言服务器通信。

安全边界

- 默认只读。 八个工具中有六个仅用于引用;只有 lsp_format 和 lsp_rename 会进行变更,并且它们以真实的 write/edit 变更方式执行。
- 使用官方接缝,而非重新实现。 每一个字节都经过 fs/write-intent 瀑布流(观察 → 受保护写入 → 观察)和每次调用的沙箱策略;升级与官方 write/edit 工具一致。
- 响亮、快速、结构化地失败。 空的 servers + 无 ctx.lsp 接缝 → LSP_ACTION_UNAVAILABLE;只读会话 → 在任何服务器往返之前返回 LSP_ACTION_READ_ONLY;命令形式会被报告且从不执行。
- 冲突绝不覆盖。 文件在读取后于磁盘上发生更改会以 LSP_ACTION_CONFLICT 失败;lsp_rename 在首次写入前会对每个被编辑的文件进行预检。
- 有界工作。 结果上限、字节上限以及平台的超时策略约束每一次调用;诊断缓存是有界 LRU。
- 模型路径上不缓存任何内容。 工具结果仅存在于会话日志中;诊断缓存从不跨重启持久化。
- 坏服务器会大声失败。 缺失的可执行文件在加载时失败;启动时死亡的服务器会让调用失败并返回 LSP_ACTION_SERVER_FAILED 以及其 stderr 尾部(在一次全新生成重试之后)。
- 提示词卫生。 该插件不会向会话系统提示词注入任何角色设定或提示词文本——其面向模型的表面是八个工具 schema。

架构

操作以官方接缝优先运行,并回退到插件自己的最小 stdio 客户端:

lsp_diagnostics / lsp_format / lsp_completion / lsp_code_action /
lsp_symbols / lsp_signature / lsp_inlay_hints / lsp_rename
│
▼
ctx.lsp seam (extended: diagnostics / formatDocument / completion)
│  absent · legacy · no provider for this file
▼
built-in stdio client  ←  servers table (ctx.subprocess.spawn + JSON-RPC)

接缝扩展已向上游提出(upstream/lsp-action-seam.patch,PR 描述见 upstream/PR-description.md)。一旦它落地,该插件无需更改即可继续工作——内置客户端只是不再被使用。内置客户端保留为 servers 表的独立回退。编辑器协议运行在同一个 runner、同一条写入路径和同一套权限机制之上。完整的研究和设计说明:docs/seam-extension-notes.md。

操作后端位于一个公共 provider 接口之后——ActionRunner(从该包导出)——由捆绑的 runner 实现,并对第三方 provider 开放:这八个工具只消费该接口,从不消费具体客户端。

已知限制

- 常驻文档。 每个文档打开一次,并在服务器实例的整个生命周期内保持打开——之后使用已更改源代码的请求会发送一次全文档 didChange,而进程关闭会关闭每个文档——因此像 tsls 这样基于项目的服务器会提供 textDocument/signatureHelp 和不依赖文档的 workspace/symbol,而不是在刚关闭的文档上回答 null。常驻集合受工作区限制,并随实例清除(空闲驱逐或插件处置)。
- 范围格式化需要服务器的范围 provider。 仅声明支持全文档格式化的服务器会以 LSP_ACTION_UNSUPPORTED 使范围请求失败。
- 重命名仅应用文本编辑。 服务器重命名应答中的资源操作(创建/删除/重命名文件)会以 LSP_ACTION_UNSUPPORTED 被拒绝,而工作区之外的编辑会在写入任何内容之前以 LSP_ACTION_CONFLICT 失败。

开发

pnpm install            # node ^22.19 || >=24
pnpm run lint           # oxlint over src/ and tests/
pnpm test               # vitest: unit + fixture-server integration + editor-protocol e2e + real tsls e2e
pnpm run test:coverage  # coverage gate
pnpm build              # tsc --noEmitOnError && node scripts/fix-dts.mjs → lib/
pnpm run prepare        # tsc --noEmitOnError && node scripts/fix-dts.mjs (runs on install)
pnpm run prepublishOnly # tsc --noEmitOnError && node scripts/fix-dts.mjs(在发布前运行)

主题

dsh、dsh-plugin、deepseek-harness、lsp、language-server、diagnostics、formatting、completion、code-action、symbols、signature-help、inlay-hints、rename、refactor、ide、editor、vscode、acp、json-rpc

贡献者

- @PerryLink — 创建者与维护者:LSP 操作客户端与服务器生命周期、全部八个工具、编辑器操作协议、测试、CI,以及五种语言的文档。

PerryLink DSH 插件家族

本项目是由 PerryLink 维护的 40 个 DeepSeek Harness 插件之一。如果这个插件对你有帮助,其他的很可能也会:

| 插件 | 一句话简介 |
|---|---|
| dsh-auto-review | 在审批链上进行第二模型自动审查,默认故障关闭 | |
| dsh-background-agents | 持久化的后台子代理,带 Web UI 侧边栏、消息传递与中断 | |
| dsh-budget | DeepSeek Harness 的成本治理:预算、碳排与延迟集于一个面板。 | |
| dsh-checkpoint-rewind | 等同于 Claude Code /rewind:快照、会话分叉、一次性恢复 | |
| dsh-claude-move | 将 Claude Code 会话、记忆、技能与 CLAUDE.md 迁移到 DSH | |
| dsh-click | 面向 DeepSeek Harness 的跨平台原生桌面控制——Windows 优先。 | |
| dsh-composer-history | Web 编辑器的终端风格输入历史:方向键、Ctrl+R 搜索 | |
| dsh-data-quality | 数据集质量检查与引用交叉核对(此处消费的可选数值桥接) | |
| dsh-defend | 面向 DeepSeek Harness 的提示注入、越狱与机密泄露防御。 | |
| dsh-doublecheck | 工程纪律守卫:需求拷问、测试门禁、对手审查 | |
| dsh-draw | 面向 DeepSeek Harness 的统一静态图像生成路由。 | |
| dsh-fast | 面向 DeepSeek Harness 的只读性能诊断。 | |
| dsh-fund-research | 面向中国公募基金的确定性研究报告 | |
| dsh-github | 面向 DSH 的 GitHub PR/issue 集成,每次写入均需审批 | |
| dsh-industry-research | 行业研究编排,通过本插件的 ctx.researchReport.assemble 封存其交付物 | |
| dsh-library | 用于 DeepSeek Harness 的本地文档知识库。 | |
| dsh-local-ai | 用于 DeepSeek Harness 的本地模型(Ollama)集成。 | |
| dsh-mask | PII 脱敏中间件:在模型边界处匿名化,在展示层还原 | |
| dsh-mcp-panel | 只读 MCP 运行时面板:/mcp 命令 + 设置选项卡,含状态、工具与错误 | |
| dsh-memento | 需审批的跨会话记忆:ctx.memory 接缝 + SQLite + memory 工具 | |
| dsh-observe | 用于 DeepSeek Harness 的 OpenTelemetry 与 Langfuse 可观测性导出器。 | |
| dsh-output-styles | 等效于 Claude Code outputStyles 的运行时样式切换 | |
| dsh-reach | 多渠道审批/提问桥接:微信/Telegram/飞书,会话控制台 | |
| dsh-permission-rules | Claude Code 风格的声明式 allow/deny/ask 权限规则,带审计 | |
| dsh-personal-directive | 带顶栏开关的个人指令注入器(框架版) | |
| dsh-plugin-guide | 作为按需智能体技能的插件开发知识库 | |
| dsh-plugin-doctor | 用于 DSH 插件的零依赖静态 + 沙箱冒烟检测器 | |
| dsh-research-report | 可验证的研究报告引擎:内容寻址的证据账本与封存版本 | |
| dsh-score | 用于 DeepSeek Harness 插件的多维度质量评分。 | |
| dsh-session-pin | 在 Web 侧边栏中固定会话,并保持持久排序 | |
| dsh-session-sync | 用于 DeepSeek Harness 的跨设备会话同步——你会话存储的专用 git 镜像。 | |
| dsh-skill-pack-security | 安全审计技能包:密钥扫描、依赖与供应链审查 | |
| dsh-talk | 用于 DeepSeek Harness 的语音优先会话循环:对它说话,听它回答。 | |
| dsh-test-drive | 用于 DeepSeek Harness 插件的隔离安装与冒烟测试驱动。 | |
| dsh-ticktick | TickTick/滴答清单任务桥接:会话头部面板 + 11 个工具 |
| dsh-translate | 面向 DeepSeek Harness 的供应商参数转换与确定性 JSON 修复。 | |
| dsh-wechat | 微信 ↔ DSH 桥接(腾讯 iLink 机器人):文本/图片/文件/语音,聊天内审批 |
| dsh-autotier | 自动进行强/廉价模型层级路由,具备确定性风险防护与 /tier 命令 | |
| dsh-catalog | PerryLink 系列的 DSH Desktop Market 标准目录源 | |
| dsh-cert-mcp | 只读 MCP 服务器,公开认证注册表:等级、快照与五维证据 | |
| dsh-kit | 一键安装核心系列入门包 | |
| dsh-plugin-certification | 社区认证注册表,提供可复现校验的等级与徽章 | |
| dsh-plugin-kit | 面向 PerryLink DSH 插件的共享零运行时依赖工具包 | |
| dsh-plugin-portal | 零依赖静态门户,将整个插件系列渲染为单页 | |
| dsh-plugin-upgrade-015 | 合并的 0.1.3-alpha.1 → 0.1.5-rc.1 升级通道卡片,外加零依赖接缝扫描器 | |
| dsh-team-rooms | 跨会话团队房间:共享消息总线、任务板与时间线 | |

从 DSH Desktop Market 安装

所有 PerryLink 插件均可在内置的 DSH Desktop Market 中浏览:Market → Sources → add source → 粘贴 https://perrylink-dsh-catalog.perrylink.workers.dev/catalog-source.json → 选择它。安装仍会经过 Market 的 npm 身份验证与你的确认。

许可证

Apache License 2.0 © 2026 dsh-lsp-actions contributors

上游仓库有新提交时邮件通知你(每天最多一封,无更新不打扰),随时一键退订。

💬 加入 DPharness 群聊

插件用法、部署报错、新插件第一时间同步——群里问,比一个人翻文档快。

点击加入 QQ 群
DPharness 群聊二维码,手机 QQ 扫码进群
扫码进群