Files
qwen-code/cclsp-integration-plan.md
2026-01-05 01:42:05 +08:00

6.8 KiB
Raw Blame History

Qwen Code CLI LSP 集成实现方案分析

1. 项目概述

本方案旨在将 LSPLanguage Server Protocol能力原生集成到 Qwen Code CLI 中,使 AI 代理能够利用代码导航、定义查找、引用查找等功能。LSP 将作为与 MCP 并行的一级扩展机制实现。

2. 技术方案对比

2.1 Piebald-AI/claude-code-lsps 方案

  • 架构: 客户端直接与每个 LSP 通信,通过 .lsp.json 配置文件声明服务器命令/参数、stdio 传输和文件扩展名路由
  • 用户配置: 低摩擦,只需放置 .lsp.json 配置并确保 LSP 二进制文件已安装
  • 安全: LSP 子进程以用户权限运行,无内置信任门控
  • 功能覆盖: 可以暴露完整的 LSP 表面hover、诊断、代码操作、重命名等

2.2 原生 LSP 客户端方案(推荐方案)

  • 架构: Qwen Code CLI 直接作为 LSP 客户端,与语言服务器建立 JSON-RPC 连接
  • 用户配置: 支持内置预设 + 用户自定义 .lsp.json 配置
  • 安全: 与 MCP 共享相同的安全控制(信任工作区、允许/拒绝列表、确认提示)
  • 功能覆盖: 暴露完整的 LSP 功能(流式诊断、代码操作、重命名、语义标记等)

2.3 cclsp + MCP 方案(备选)

  • 架构: 通过 MCP 协议调用 cclsp 作为 LSP 桥接
  • 用户配置: 需要 MCP 配置
  • 安全: 通过 MCP 安全控制
  • 功能覆盖: 依赖于 cclsp 映射的 MCP 工具

3. 原生 LSP 集成详细计划

3.1 方案选择

  • 推荐方案: 原生 LSP 客户端作为主要路径,因为它提供完整 LSP 功能、更低延迟和更好的用户体验
  • 兼容层: 保留 cclsp+MCP 作为现有 MCP 工作流的兼容桥接
  • 并行架构: LSP 和 MCP 作为独立的扩展机制共存,共享安全策略

3.2 实现步骤

3.2.1 创建原生 LSP 服务

packages/cli/src/services/lsp/ 目录下创建 NativeLspService 类,处理:

  • 工作区语言检测
  • 自动发现和启动语言服务器
  • 与现有文档/编辑模型同步
  • LSP 能力直接暴露给代理

3.2.2 配置支持

  • 支持内置预设配置(常见语言服务器)
  • 支持用户自定义 .lsp.json 配置文件
  • 与 MCP 配置共存,共享信任控制

3.2.3 集成启动流程

  • packages/cli/src/config/config.ts 中的 loadCliConfig 函数内集成
  • 确保 LSP 服务与 MCP 服务共享相同的安全控制机制
  • 处理沙箱预检和主运行的重复调用问题

3.2.4 功能标志配置

  • packages/cli/src/config/settingsSchema.ts 中添加新的设置项
  • 提供全局开关(如 lsp.enabled=false)允许用户禁用 LSP 功能
  • 尊重 mcp.allowed/mcp.excluded 和文件夹信任设置

3.2.5 安全控制

  • 与 MCP 共享相同的安全控制机制
  • 在信任工作区中自动启用,在非信任工作区中提示用户
  • 实现路径允许列表和进程启动确认

3.2.6 错误处理与用户通知

  • 检测缺失的语言服务器并提供安装命令
  • 通过现有 MCP 状态 UI 显示错误信息
  • 实现重试/退避机制,检测沙箱环境并抑制自动启动

3.3 需要确认的不确定项

  1. 启动集成点:在 loadCliConfig 中集成原生 LSP 服务,需确保与 MCP 服务的协调

  2. 配置优先级:如果用户已有 cclsp MCP 配置,应保持并存还是优先使用原生 LSP

  3. 功能开关设计开关应该是全局级别的LSP 和 MCP 可独立启用/禁用

  4. 共享安全模型:如何在代码中复用 MCP 的信任/安全控制逻辑

  5. 语言服务器管理:如何管理 LSP 服务器生命周期并与文档编辑模型同步

  6. 依赖检测机制:检测 LSP 服务器可用性,失败时提供降级选项

  7. 测试策略:需要测试 LSP 与 MCP 的并行运行,以及共享安全控制

3.4 安全考虑

  • 与 MCP 共享相同的安全控制模型
  • 仅在受信任工作区中启用自动 LSP 功能
  • 提供用户确认机制用于启动新的 LSP 服务器
  • 防止路径劫持,使用安全的路径解析

3.5 高级 LSP 功能支持

  • 完整 LSP 功能: 支持流式诊断、代码操作、重命名、语义高亮、工作区编辑等
  • 兼容 Claude 配置: 支持导入 Claude Code 风格的 .lsp.json 配置
  • 性能优化: 优化 LSP 服务器启动时间和内存使用

3.6 用户体验

  • 提供安装提示而非自动安装
  • 在统一的状态界面显示 LSP 和 MCP 服务器状态
  • 提供独立开关让用户控制 LSP 和 MCP 功能
  • 为只读/沙箱环境提供安全的配置处理和清晰的错误消息

4. 实施总结

4.1 已完成的工作

  1. NativeLspService 类创建了核心服务类包含语言检测、配置合并、LSP 连接管理等功能
  2. LSP 连接工厂:实现了基于 stdio 的 LSP 连接创建和管理
  3. 语言检测机制:实现了基于文件扩展名和项目配置文件的语言自动检测
  4. 配置系统:实现了内置预设、用户配置和 Claude 兼容配置的合并
  5. 安全控制:实现了与 MCP 共享的安全控制机制,包括信任检查、用户确认、路径安全验证
  6. CLI 集成:在 loadCliConfig 函数中集成了 LSP 服务初始化点

4.2 关键组件

4.2.1 LspConnectionFactory

  • 使用 vscode-jsonrpcvscode-languageserver-protocol 实现 LSP 连接
  • 支持 stdio 传输方式,可以扩展支持 TCP 传输
  • 提供连接创建、初始化和关闭的完整生命周期管理

4.2.2 NativeLspService

  • 语言检测:扫描项目文件和配置文件来识别编程语言
  • 配置合并:按优先级合并内置预设、用户配置和兼容层配置
  • LSP 服务器管理:启动、停止和状态管理
  • 安全控制:与 MCP 共享的信任和确认机制

4.2.3 配置架构

  • 内置预设:为常见语言提供默认 LSP 服务器配置
  • 用户配置:支持 .lsp.json 文件格式
  • Claude 兼容:可导入 Claude Code 的 LSP 配置

4.3 依赖管理

  • 使用 vscode-languageserver-protocol 进行 LSP 协议通信
  • 使用 vscode-jsonrpc 进行 JSON-RPC 消息传递
  • 使用 vscode-languageserver-textdocument 管理文档版本

4.4 安全特性

  • 工作区信任检查
  • 用户确认机制(对于非信任工作区)
  • 命令存在性验证
  • 路径安全性检查

5. 总结

原生 LSP 客户端是当前最符合 Qwen Code 架构的选择,它提供了完整的 LSP 功能、更低的延迟和更好的用户体验。LSP 作为与 MCP 并行的一级扩展机制,将与 MCP 共享安全控制策略但提供更丰富的代码智能功能。cclsp+MCP 可作为兼容层保留,以支持现有的 MCP 工作流。

该实现方案将使 Qwen Code CLI 具备完整的 LSP 功能,包括代码跳转、引用查找、自动补全、代码诊断等,为 AI 代理提供更丰富的代码理解能力。