gterzian/lsp_agent

GitHub: gterzian/lsp_agent

一个基于 VS Code 和 LSP 的抗提示注入 Agent 运行时,通过进程隔离和权限分离架构,使 AI Agent 能够安全地编写并运行 Web 应用来处理不可信数据。

Stars: 2 | Forks: 0

# LSP Web Agent 一个能够从你的工作区编写并启动 Web 应用的 Agent。 本项目是一个预览版(pre-alpha)的 VS Code 扩展,它通过 LSP 服务器运行 Agent。推理过程通过 GitHub Copilot 进行。该 Agent 可以在 Webview 中编写并启动应用。 与该 Agent 的交互通过 `@web-agent` 聊天参与者(chat participant)进行。 Agent 可以回答有关正在运行的应用及其编写的代码的问题,并对其进行迭代(目前每次迭代都会启动一个新的 Webview)。 Agent 还能看到打开的文档 URI 列表,但无法直接读取其内容。它也没有直接的互联网访问权限。因此,为了处理本地或远程内容,它必须编写一个 Web 应用并进行子推理调用(sub-inference calls)。将主 Agent 与实际内容隔离,可以降低提示注入(prompt injection)的风险。 Agent 还能看到应用存储的值列表。应用可以在一个共享的键值存储(key-value store)中存取值,并在此类值发生变化时收到通知,从而实现应用间的持久化和数据共享。 该应用通过 [wry](https://docs.rs/wry/latest/wry/) 在标准的系统 Webview 中运行,没有额外的沙箱机制。 该应用通过自定义协议(custom protocols)访问工作区文档、推理服务和共享键值存储。 主要用例是让 Agent 编写一个应用,对不受信任的数据执行子推理。 ## 环境要求 - 安装了处于激活状态 GitHub Copilot 扩展的 VS Code。 ## 快速开始 1. Git clone 该仓库并在 VS Code 中打开。 2. 构建所有内容: - `./build.sh` 3. 在调试模式下运行该扩展: - 在 VS Code 中,打开“运行”并选择“开始调试”。 4. 在调试窗口中打开聊天视图,并输入提示 `@web-agent`。 5. 所使用的模型(无论是作为主 Agent 还是用于应用推理)都是你在聊天中选择的模型(自动默认为 gpt-5-mini)。 6. 查看[下方](#maybe-useful-test-cases)以获取提示词灵感。 ## 仓库结构 - `vs_code_lsp` - `client`:VS Code 扩展 - `server`:轻量级 LSP 服务器 - `agent`:核心 Agent 逻辑和基于 Automerge 的数据模型 - `prompts`:提示词模板和构建器 - `shared_document`:共享文档类型(Automerge schema) - `traits`:共享公共接口 - `web`:渲染 HTML 应用并处理自定义协议的 Web 客户端 ## 进程架构 本项目作为多个进程运行,以共享的 Automerge 文档作为协调层。 - **VS Code 扩展** 启动 Rust LSP 服务器并转发编辑器事件。 - **LSP 服务器** 托管 Agent 核心,拥有推理客户端,并管理共享文档(包括请求/响应和存储的值)。 - **Web 客户端 (Rust + wry)** 在单独的进程中运行,渲染 HTML 应用,并使用自定义的 `wry://` 协议来请求推理、读取文档或访问存储的值。它从不直接调用推理;它将请求写入共享文档并监听响应。 数据流有意跨进程边界拆分,以防止 Webview 不经过 Agent 的请求/响应流而直接调用推理或访问文档。 这种模块化拆分也使得替换其他编辑器前端或替代的 Web 运行时成为可能。请注意,使用 CRDT 进行通信只是一个实现细节,并不属于[接口](https://github.com/gterzian/lsp_agent/blob/main/traits/src/lib.rs)的一部分。 ### 设计原则 该架构优先考虑**安全性**和**状态同步**: - **强沙箱隔离**:通过将系统拆分为特权服务器和非特权 Web 客户端,我们建立了一道坚固的安全边界。Web 客户端(运行 AI 生成的应用)无法直接调用推理或读取文件。它必须通过共享文档请求这些操作,从而允许服务器作为抵御提示注入的守门人。 - **以 CRDT 作为通信总线**:使用 **Automerge** 创建了一个“共享大脑”,其中状态(打开的文档、聊天记录、应用状态)是统一的。这解耦了各个进程——Web 进程只需更新状态即可请求推理,而服务器则通过更新状态来提供响应。这也简化了持久化。 - **轻量级 LSP 服务器**:该服务器主要将 VS Code 事件转换为共享文档更新,保持协议逻辑清晰,并将编辑器集成与 Agent 智能分离开来。 ## 可能派上用场的测试用例 - 在打开一个(未命名的)文档的情况下,“总结活动文档(summarize active doc)”。 - 用于获取并总结网页的应用(防止对主 Agent 的提示注入)。 - “列出打开的文档(list open documents)”以验证文档追踪。 - “创建一个简单的 HTML 待办事项应用”以验证 Web 应用启动。 - 使用通过扩展进行的推理的基础 AI 聊天 Web 应用。 - “我想和一个使用 AI 推理的对手玩井字棋。” - 存储记分板的井字棋游戏;另一个应用显示实时比分。 - “创建一个能持久保存笔记的记事本应用。” - “列出存储的值”以查看应用持久化了哪些数据。 Screenshot 2026-02-05 at 12 19 21 AM Screenshot 2026-02-04 at 11 19 53 PM ## 路线图构想 - 像书签一样持久化应用 - 更清晰的数据边界(当本地文档在应用中使用时,防止通过互联网提取数据?) - 针对 Web 应用的额外沙箱机制。 - 通过工作区中的 Markdown 文档管理应用(AI 将状态写入文档,如果用户从列表中移除应用:AI 将关闭或删除该应用):基于 Markdown 文档的浏览器外观与体验。 - 供应用将状态写入 Automerge 文档的端点。
标签:AI智能体, DLL 劫持, DNS 反向解析, GitHub Copilot, LLM推理, LSP服务器, ntdll.dll, Rust语言, Tauri wry, TypeScript, VS Code扩展, WebView, Web应用生成, 代理运行时, 代码助手, 代码沙箱, 可信执行, 可视化界面, 大语言模型, 威胁情报, 子推理, 安全AI, 安全插件, 开发者工具, 提示词注入防御, 数据持久化, 沙箱隔离, 自动化编程, 辅助开发, 通知系统, 键值存储, 防提示注入