feat: 集成后端通信和前端交互功能
- 重构消息处理器(src/utils/messageHandler.ts) - 集成 DialogService 实现后端对话管理 - 添加流式消息处理和 SSE 事件监听 - 实现工具执行状态的实时更新 - 支持用户问题的交互处理 - 添加对话中止和错误处理机制 - 更新 ICHelperPanel(src/panels/ICHelperPanel.ts) - 添加 submitAnswer 消息处理,支持用户答案提交 - 添加 abortDialog 消息处理,支持对话中止 - 与后端服务进行双向通信 - 更新 ICViewProvider(src/views/ICViewProvider.ts) - 同步更新消息处理逻辑 - 添加 extensionPath 参数传递 - 支持新的消息类型和事件处理 完成前后端通信的完整集成,实现: - AI 对话的流式响应 - 工具调用的实时反馈 - 用户交互的双向通信 - 错误处理和状态管理
This commit is contained in:
@ -5,12 +5,17 @@ import {
|
||||
insertCodeToEditor,
|
||||
handleReadFile,
|
||||
handleCreateFile,
|
||||
handleUpdateFile,
|
||||
handleRenameFile,
|
||||
handleReplaceInFile,
|
||||
handleUserAnswer,
|
||||
abortCurrentDialog,
|
||||
} from "../utils/messageHandler";
|
||||
|
||||
/**
|
||||
* 创建并显示IC 侧边栏视图
|
||||
*/
|
||||
export function showICHelperPanel(content: vscode.ExtensionContext) {
|
||||
export function showICHelperPanel(context: vscode.ExtensionContext) {
|
||||
// 创建WebView面板
|
||||
const panel = vscode.window.createWebviewPanel(
|
||||
"icCoder", // 面板ID
|
||||
@ -19,20 +24,20 @@ export function showICHelperPanel(content: vscode.ExtensionContext) {
|
||||
{
|
||||
enableScripts: true,
|
||||
retainContextWhenHidden: true,
|
||||
localResourceRoots: [vscode.Uri.joinPath(content.extensionUri, "media")],
|
||||
localResourceRoots: [vscode.Uri.joinPath(context.extensionUri, "media")],
|
||||
}
|
||||
);
|
||||
|
||||
// 设置标签页图标
|
||||
panel.iconPath = vscode.Uri.joinPath(
|
||||
content.extensionUri,
|
||||
context.extensionUri,
|
||||
"media",
|
||||
"图案(方底).png"
|
||||
);
|
||||
|
||||
// 获取页面内图标URI
|
||||
const iconUri = panel.webview.asWebviewUri(
|
||||
vscode.Uri.joinPath(content.extensionUri, "media", "图案(方底).png")
|
||||
vscode.Uri.joinPath(context.extensionUri, "media", "图案(方底).png")
|
||||
);
|
||||
// 设置HTML内容
|
||||
panel.webview.html = getWebviewContent(iconUri.toString());
|
||||
@ -42,11 +47,20 @@ export function showICHelperPanel(content: vscode.ExtensionContext) {
|
||||
(message) => {
|
||||
switch (message.command) {
|
||||
case "sendMessage":
|
||||
handleUserMessage(panel, message.text);
|
||||
handleUserMessage(panel, message.text, context.extensionPath);
|
||||
break;
|
||||
case "readFile":
|
||||
handleReadFile(panel, message.filePath);
|
||||
break;
|
||||
case "updateFile":
|
||||
handleUpdateFile(panel, message.filePath, message.content);
|
||||
break;
|
||||
case "renameFile":
|
||||
handleRenameFile(panel, message.oldPath, message.newPath);
|
||||
break;
|
||||
case "replaceInFile":
|
||||
handleReplaceInFile(panel, message.filePath, message.searchText, message.replaceText);
|
||||
break;
|
||||
case "insertCode":
|
||||
insertCodeToEditor(message.code);
|
||||
break;
|
||||
@ -61,10 +75,18 @@ export function showICHelperPanel(content: vscode.ExtensionContext) {
|
||||
case "showInfo":
|
||||
vscode.window.showInformationMessage(message.text);
|
||||
break;
|
||||
// 新增:处理用户回答
|
||||
case "submitAnswer":
|
||||
handleUserAnswer(message.askId, message.selected, message.customInput);
|
||||
break;
|
||||
// 新增:中止对话
|
||||
case "abortDialog":
|
||||
abortCurrentDialog();
|
||||
break;
|
||||
}
|
||||
},
|
||||
undefined,
|
||||
content.subscriptions
|
||||
context.subscriptions
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user