跳到主要内容

Language Server Protocol - CLI

Tuanjie AI 通过 LSP(Language Server Protocol)提升 Agent 对代码的理解能力。LSP Server 负责解析项目代码、维护符号索引,并向 Tuanjie AI 提供定义跳转、引用查找、Hover 信息、符号搜索、实现查找和调用层级等能力。

工作链路

Tuanjie AI Agent / 用户命令
-> Tuanjie AI 内置 LSP Client
-> LSP Extension 配置
-> 外部 LSP Server
-> 项目源码

Codely CLI 内置通用 LSP Client,但不直接内置所有语言的 LSP Server。要使用完整的 LSP 功能,用户还需要在 Tuanjie AI marketplace 下载对应语言的 Extension,以及对应语言的 LSP Server。LSP Extension 中有推荐的 LSP Server 的下载路径,用户可以手动下载。

使用前准备

  1. 下载并安装LSP extension
/extensions install <extension_path>

如果 Extension 已启用,Tuanjie AI 会在启动时加载其中的 LSP 配置并初始化 LSP Manager。刷新 Extension 后也会重新加载 LSP 配置。

/extensions refresh

当然用户也可在 Tuanjie AI marketplace 中下载需要的 LSP Extension

/extensions explore

Agent 如何使用 LSP

LSP 能力会以 lsp 工具注册到 Tuanjie AI 的工具系统中。Agent 在需要理解代码结构时,会自动调用它完成。在Cli环境下,用户通常上不需要手动使用 LSP 功能。LSP client为Agent提供以下能力:

  • definition 跳转定义:确认符号真实定义位置。
  • refs 查找引用:分析改动影响面。
  • hover Hover:读取类型、文档和签名信息。
  • symbols 文档符号:查看单个文件内的类、函数、字段等结构。
  • ws-symbol 工作区符号:跨项目搜索符号。
  • impl 实现查找:定位接口、抽象类或虚方法的实现。
  • incoming/outgoing 调用层级:分析函数的 incoming / outgoing call hierarchy。

用户也可以通过 /lsp 命令手动调试同样的能力。

/lsp 命令

/lsp definition <file> <line> <char> 
/lsp refs <file> <line> <char>
/lsp hover <file> <line> <char>
/lsp symbols <file>
/lsp ws-symbol <file> [query]
/lsp impl <file> <line> <char>
/lsp prepare <file> <line> <char>
/lsp incoming <file> <line> <char>
/lsp outgoing <file> <line> <char>
/lsp status

参数说明:

  • <file> 可以是相对路径或绝对路径。相对路径会按当前 Tuanjie AI 工作目录解析。
  • <line><char> 都是从 1 开始计数。
  • ws-symbol[query] 可选,不传时会发送空查询。

示例:

/lsp definition src/index.ts 10 5
/lsp refs src/index.ts 10 5
/lsp hover src/index.ts 10 5
/lsp symbols src/index.ts
/lsp ws-symbol src/index.ts UserService
/lsp impl src/types.ts 8 12
/lsp prepare src/service.ts 20 3
/lsp incoming src/service.ts 20 3
/lsp outgoing src/service.ts 20 3

排障

如果 /lsp status 显示 No LSP servers configured,说明当前没有启用任何包含 lspServers 的 Extension。

如果 server 启动失败,请检查:

  • command 是否在当前 shell 的 PATH 中。
  • args 是否符合该 LSP Server 的启动方式。
  • workspaceFolder 是否存在。
  • extensionToLanguage 是否包含当前文件扩展名。
  • 目标文件是否在当前项目目录下,且文件大小不超过 LSP 工具限制。