从处理器到协议线都类型安全
使用 Rust 类型注册协议功能。lspf 从同一份注册信息推导能力声明,让行为与元数据始终一致。
简体中文
RUST / LSP / IDE → AGENT
从编辑器每天依赖的语言功能出发。用类型化 Rust 服务器接入 IDE,再通过同一套语言服务器协议,将语言能力扩展到 Agent 工具。
类型化客户端与服务器 · 原生与 WASM
textDocument/hover类型化请求 → 语言服务器 → 类型化结果
从编辑器的语言体验出发,再扩展到 Agent 工具。
使用 Rust 类型注册协议功能。lspf 从同一份注册信息推导能力声明,让行为与元数据始终一致。
通过处理器收到的上下文读取已同步文档、笔记本、工作区根目录、配置和客户端连接。
在有限资源策略下并发处理请求,并用取消令牌停止工作;API 从一开始就面向生产环境的资源所有权。
可直接使用 stdio、TCP、WebSocket 或浏览器与 Node Worker;也可以实现公开的消息帧传输 trait。
从 IDE 开始:在 lspf 服务器中实现悬停、补全、诊断等语言功能。框架负责 LSP 生命周期、文档同步、能力声明与取消,处理器负责语言分析。
再通过 lspf 的类型化 Client 扩展这份基础:Agent 宿主可以连接语言服务器,复用它的 LSP 功能。工具选择、模型调用以及是否应用编辑的决策,仍由宿主应用负责。
连接已初始化,已注册 hover 处理器和一个用户 Layer。
{ "jsonrpc": "2.0", "id": 41, "method": "textDocument/hover", "params": { "textDocument": { "uri": "file:///workspace/main.rs" }, "position": { "line": 0, "character": 3 } } }request #41: admitted params: decoded stack: panic isolation → tracing → concurrency limitmethod: textDocument/hover action: forward the decoded callroute: textDocument/hover input: Arc<State> + ServerContext + HoverParams + CancellationToken{ "contents": { "kind": "plaintext", "value": "fn main()" } }response #41: encoded budgets: message count + encoded bytes writer: Transport{ "jsonrpc": "2.0", "id": 41, "result": { "contents": { "kind": "plaintext", "value": "fn main()" } } }↓ 顺序示意,不代表耗时或实时抓包。只有蓝色 ↔ 行是线上 JSON-RPC 消息;绿色 ◇ 为框架内部事件,紫色 { } 为应用扩展。传输分帧和错误分支已省略。
let server = Server::builder(State)
.feature(lspf::features::hover(), hover)
.feature(lspf::features::completion(options), complete)
.command("acme.organize", organize)
.build()?;
let outcome = lspf::stdio(server).serve().await?;框架负责 JSON-RPC、初始化、文档同步、能力声明、取消和关闭流程。你的处理器只需接收类型化参数并返回类型化结果。
稳定功能目录覆盖 LSP 3.18 请求与通知。原生服务器可以使用 stdio、TCP 或 WebSocket;浏览器和 Node Worker 使用 Worker Channel;嵌入式宿主可以实现公开传输 trait。框架还提供类型化出站客户端、文档与笔记本同步、工作区状态、有界并发、取消、进度和协议测试工具。