You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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的生成状态:

实现步骤

  1. 创建Copilot专属的聊天会话
  2. 监听会话的onDidFinishProcessing事件,该事件会在AI完成回复生成时触发
  3. 发送消息后通过自定义逻辑更新状态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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 20:22:22