VSCode Copilot Model Bridge: 扩展桥接模型

VSCode 扩展桥接 Copilot 模型 通过 VSCode 扩展可以将 GitHub Copilot 中的 Claude 模型桥接出来,供外部 AI Agent 调用。这种实现方式主要基于以下技术方案: 实现原理 VSCode Extension API 使用 VSCode 扩展开发框架创建自定义扩展 通过 vscode.languages 和 vscode.commands API 注册命令和服务 利用 Language Server Protocol (LSP) 实现与外部通信 GitHub Copilot API 调用 扩展内部通过 Copilot 的内部 API 访问 Claude 模型 使用 vscode.authentication 获取 GitHub 认证令牌 调用 Copilot Chat API 发送请求并接收响应 MCP (Model Context Protocol) 服务器 在扩展中实现 MCP 服务器,暴露标准化的接口 MCP 定义了统一的消息格式和通信协议 支持通过 stdio、HTTP 或 WebSocket 与外部 Agent 通信 核心实现步骤 创建 VSCode 扩展 // extension.ts import * as vscode from 'vscode'; export function activate(context: vscode.ExtensionContext) { // 启动 MCP 服务器 const mcpServer = new MCPServer(); mcpServer.start(); // 注册命令处理 Copilot 请求 context.subscriptions.push( vscode.commands.registerCommand('extension.queryCopilot', async (prompt) => { return await queryCopilotModel(prompt); }) ); } 实现 MCP 服务器 // mcp-server.ts import { Server } from '@modelcontextprotocol/sdk/server/index.js'; import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'; class MCPServer { private server: Server; constructor() { this.server = new Server({ name: 'copilot-bridge', version: '1.0.0' }, { capabilities: { resources: {}, tools: {}, prompts: {} } }); // 注册工具 this.server.setRequestHandler(ListToolsRequestSchema, async () => ({ tools: [{ name: 'query_claude', description: 'Query Claude model via Copilot', inputSchema: { /* ... */ } }] })); } async start() { const transport = new StdioServerTransport(); await this.server.connect(transport); } } 桥接 Copilot API // copilot-bridge.ts async function queryCopilotModel(prompt: string) { // 获取 Copilot Chat API const copilot = await vscode.lm.selectChatModels({ vendor: 'copilot', family: 'claude' }); // 发送请求 const messages = [ vscode.LanguageModelChatMessage.User(prompt) ]; const response = await copilot[0].sendRequest(messages); // 收集响应流 let result = ''; for await (const chunk of response.text) { result += chunk; } return result; } 外部 Agent 调用 # external_agent.py from mcp import ClientSession, StdioServerParameters from mcp.client.stdio import stdio_client async def call_copilot_claude(prompt: str): # 连接到 VSCode 扩展的 MCP 服务器 server_params = StdioServerParameters( command="code", args=["--extensionDevelopmentPath=/path/to/extension"] ) async with stdio_client(server_params) as (read, write): async with ClientSession(read, write) as session: # 初始化连接 await session.initialize() # 调用工具 result = await session.call_tool("query_claude", { "prompt": prompt }) return result 关键技术点 认证与权限 ...

Created 26266-04-26 · Updated 23236-07-23 · 2 min · 417 words · -

VS Code Agent Hand Off

Hand Off 是什么 VS Code Copilot Chat 在 Agent 模式下提供 “Hand off a session to another agent” 功能,将当前对话的完整上下文移交给另一个 agent 继续处理。 移交时,接收方 agent 会获得: 完整的对话历史记录 已收集的文件上下文 前一个 agent 的中间结论和工具输出 接收方 agent 可以直接从当前状态继续,而不需要从头重建上下文。 与普通切换 Agent 的区别 普通切换 Hand off 上下文 丢失,重新开始 完整传递 用途 新任务 同一任务的延续 历史记录 不带过去 带上全部历史 为什么要切换 Agent,而不是在主 Agent 里继续? Fan-out 并行(最核心的理由) 主 agent 收集完上下文后,同时把同一份上下文发给多个子 agent 做不同的事: 主 agent 分析完代码库 ├── 子 agent A → 写单元测试 ├── 子 agent B → 写文档 └── 子 agent C → 做安全审查 主 agent 是单线程的,无法并行处理多个子任务。Fan-out 到多个子 agent 是最强的切换理由。 ...

Created 3036-04-03 · Updated 3036-04-03 · 3 min · 598 words · -

vscode basic,vscode, visual studio code

vscode basic,vscode, visual studio code linux vscode 配置 echo "--enable-features=UseOzonePlatform --ozone-platform=wayland" >> ~/.config/code-flags.conf debian install visual studio code install from repo https://linuxize.com/post/how-to-install-visual-studio-code-on-debian-9/ download deb https://code.visualstudio.com/# vscode 列编辑 Alt+Shift+鼠标左键拖动, 选中拖动的区域内容 https://blog.csdn.net/u011127019/article/details/74039598 vscode remote ssh, A> ssh> B A 安装插件 “Remote - SSH” 在 B 主机上配置ssh 公钥 私钥放在 C:\Users\user0\.ssh 里 A, 点击 vscode左下角,选择 remote-ssh: connect to host 字体 打开 VSCode,Windows 下按 Ctrl + ,,macOS 下按 Cmd + ,,进入设定。在上方搜索框搜索 editor.fontFamily,在 Editor: Font Family Controls the font family. 下方的框框填入 font-family 即可。 ...

Created 1016-09-01 · Updated 1016-09-01 · 2 min · 302 words · -