如何在VSCode扩展中检测Copilot Chat请求状态(待处理/已完成)
如何在VSCode扩展中监听Copilot Chat的回复生成状态
你目前通过workbench.action.chat.open命令调用Copilot Chat的方式无法直接跟踪AI的回复生成状态,原因是VSCode内部用于跟踪请求的_pendingRequests是私有字段,既没有公共API可以访问,也无法获取对应的sessionId。要实现状态监听,推荐使用VSCode官方提供的公共Chat API,而非依赖内部私有实现。
解决方案:使用官方公共Chat API跟踪状态
VSCode的vscode.chat模块提供了创建会话、发送消息以及监听会话状态的公共API,通过这些API可以直接获取AI的生成状态:
实现步骤
- 创建Copilot专属的聊天会话
- 监听会话的
onDidFinishProcessing事件,该事件会在AI完成回复生成时触发 - 发送消息后通过自定义逻辑更新状态UI
代码示例
import * as vscode from 'vscode'; async function sendCopilotMessageWithStatusTracking() { // 创建Copilot聊天会话(模型ID为github.copilot) const chatSession = await vscode.chat.createChatSession('github.copilot'); if (!chatSession) { vscode.window.showErrorMessage('无法初始化Copilot会话'); return; } // 标记AI正在生成回复,更新UI状态 let isGenerating = true; updateExtensionStatus(isGenerating); // 监听回复完成事件 const finishListener = chatSession.onDidFinishProcessing(() => { isGenerating = false; updateExtensionStatus(isGenerating); finishListener.dispose(); // 完成后销毁监听 }); // 发送请求到Copilot await chatSession.sendRequest('add feature'); } // 自定义状态更新逻辑(示例:状态栏提示) function updateExtensionStatus(isGenerating: boolean) { if (isGenerating) { vscode.window.setStatusBarMessage('Copilot正在生成回复...', Infinity); } else { vscode.window.setStatusBarMessage('Copilot已完成回复', 3000); } }
不推荐的方案:依赖私有字段
若坚持使用原命令调用方式,理论上可以通过反射访问VSCode内部的私有字段,但这种方法存在严重的版本兼容性问题——私有字段的命名或结构可能随VSCode版本更新而变化,导致扩展失效,因此不建议采用。
内容的提问来源于stack exchange,提问作者Lucky_boy
相关产品推荐
相关产品推荐

