diff --git a/src/panels/ICHelperPanel.ts b/src/panels/ICHelperPanel.ts index 2a23347..e85198c 100644 --- a/src/panels/ICHelperPanel.ts +++ b/src/panels/ICHelperPanel.ts @@ -34,19 +34,21 @@ export async function showICHelperPanel( ); // 为面板生成唯一ID - const panelId = `panel_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`; + const panelId = `panel_${Date.now()}_${Math.random() + .toString(36) + .substr(2, 9)}`; (panel as any).__uniqueId = panelId; // 设置标签页图标 panel.iconPath = vscode.Uri.joinPath( context.extensionUri, "media", - "图案(方底).png" + "icon.png" ); // 获取页面内图标URI const iconUri = panel.webview.asWebviewUri( - vscode.Uri.joinPath(context.extensionUri, "media", "图案(方底).png") + vscode.Uri.joinPath(context.extensionUri, "media", "icon.png") ); // 设置HTML内容 @@ -63,11 +65,19 @@ export async function showICHelperPanel( // 仅在用户发送消息时,确保面板有任务上下文 // 如果没有,则创建新任务(仅在首次发送消息时) if (!historyManager.getPanelTask(panelId)) { - const workspacePath = vscode.workspace.workspaceFolders?.[0]?.uri.fsPath; + const workspacePath = + vscode.workspace.workspaceFolders?.[0]?.uri.fsPath; if (workspacePath) { try { - const taskMeta = await historyManager.createTask(workspacePath, "新对话"); - historyManager.setPanelTask(panelId, taskMeta.taskId, workspacePath); + const taskMeta = await historyManager.createTask( + workspacePath, + "新对话" + ); + historyManager.setPanelTask( + panelId, + taskMeta.taskId, + workspacePath + ); } catch (error) { console.error("创建任务失败:", error); } @@ -123,12 +133,20 @@ export async function showICHelperPanel( break; case "loadConversationHistory": // 加载会话历史(支持分页) - loadConversationHistory(panel, message.offset || 0, message.limit || 10); + loadConversationHistory( + panel, + message.offset || 0, + message.limit || 10 + ); break; case "selectConversation": // 选择会话 if (message.conversationId) { - selectConversation(panel, message.conversationId, context.extensionPath); + selectConversation( + panel, + message.conversationId, + context.extensionPath + ); } break; // 新增:处理用户回答 @@ -407,10 +425,15 @@ async function selectConversation( } // 加载任务会话 - const taskSession = await historyManager.loadTaskSession(workspacePath, taskId); + const taskSession = await historyManager.loadTaskSession( + workspacePath, + taskId + ); if (!taskSession) { - vscode.window.showErrorMessage(`加载任务 ${taskId} 失败: 任务不存在或数据损坏`); + vscode.window.showErrorMessage( + `加载任务 ${taskId} 失败: 任务不存在或数据损坏` + ); return; } @@ -427,7 +450,7 @@ async function selectConversation( // 清空当前聊天界面 panel.webview.postMessage({ - command: "clearChat" + command: "clearChat", }); // 将会话历史消息转换为 segments 格式并发送到前端显示 @@ -442,17 +465,17 @@ async function selectConversation( if (segments.length > 0) { panel.webview.postMessage({ command: "receiveSegments", - segments: [...segments] + segments: [...segments], }); segments.length = 0; } // 发送用户消息 - const textContent = message.contents?.find(c => c.type === 'TEXT'); - if (textContent && 'text' in textContent) { + const textContent = message.contents?.find((c) => c.type === "TEXT"); + if (textContent && "text" in textContent) { panel.webview.postMessage({ command: "addUserMessage", - text: textContent.text + text: textContent.text, }); } i++; @@ -461,7 +484,7 @@ async function selectConversation( if (message.segments && message.segments.length > 0) { panel.webview.postMessage({ command: "receiveSegments", - segments: message.segments + segments: message.segments, }); i++; } else { @@ -469,30 +492,35 @@ async function selectConversation( // 收集连续的 AI 消息、工具调用和工具结果 if (message.text) { segments.push({ - type: 'text', - content: message.text + type: "text", + content: message.text, }); } // 检查是否有工具调用 - if (message.toolExecutionRequests && message.toolExecutionRequests.length > 0) { + if ( + message.toolExecutionRequests && + message.toolExecutionRequests.length > 0 + ) { for (const toolReq of message.toolExecutionRequests) { // 查找对应的工具执行结果 - let toolResult = ''; + let toolResult = ""; if (i + 1 < taskSession.messages.length) { const nextMsg = taskSession.messages[i + 1]; - if (nextMsg.type === MessageType.TOOL_EXECUTION_RESULT && - nextMsg.id === toolReq.id) { + if ( + nextMsg.type === MessageType.TOOL_EXECUTION_RESULT && + nextMsg.id === toolReq.id + ) { toolResult = nextMsg.text; i++; // 跳过工具结果消息 } } segments.push({ - type: 'tool', + type: "tool", toolName: toolReq.name, askId: toolReq.id, - toolResult: toolResult + toolResult: toolResult, }); } } @@ -511,26 +539,31 @@ async function selectConversation( } if (nextMsg.text) { segments.push({ - type: 'text', - content: nextMsg.text + type: "text", + content: nextMsg.text, }); } - if (nextMsg.toolExecutionRequests && nextMsg.toolExecutionRequests.length > 0) { + if ( + nextMsg.toolExecutionRequests && + nextMsg.toolExecutionRequests.length > 0 + ) { for (const toolReq of nextMsg.toolExecutionRequests) { - let toolResult = ''; + let toolResult = ""; if (i + 1 < taskSession.messages.length) { const resultMsg = taskSession.messages[i + 1]; - if (resultMsg.type === MessageType.TOOL_EXECUTION_RESULT && - resultMsg.id === toolReq.id) { + if ( + resultMsg.type === MessageType.TOOL_EXECUTION_RESULT && + resultMsg.id === toolReq.id + ) { toolResult = resultMsg.text; i++; // 跳过工具结果消息 } } segments.push({ - type: 'tool', + type: "tool", toolName: toolReq.name, askId: toolReq.id, - toolResult: toolResult + toolResult: toolResult, }); } } @@ -552,11 +585,13 @@ async function selectConversation( if (segments.length > 0) { panel.webview.postMessage({ command: "receiveSegments", - segments: segments + segments: segments, }); } - vscode.window.showInformationMessage(`已加载会话: ${taskSession.meta.taskName}`); + vscode.window.showInformationMessage( + `已加载会话: ${taskSession.meta.taskName}` + ); } catch (error) { console.error("选择会话失败:", error); vscode.window.showErrorMessage(`加载会话失败: ${error}`); diff --git a/src/views/ICViewProvider.ts b/src/views/ICViewProvider.ts index 0eabefb..29bbb26 100644 --- a/src/views/ICViewProvider.ts +++ b/src/views/ICViewProvider.ts @@ -32,12 +32,12 @@ export function showICHelperPanel(context: vscode.ExtensionContext) { panel.iconPath = vscode.Uri.joinPath( context.extensionUri, "media", - "图案(方底).png" + "icon.png" ); // 获取页面内图标URI const iconUri = panel.webview.asWebviewUri( - vscode.Uri.joinPath(context.extensionUri, "media", "图案(方底).png") + vscode.Uri.joinPath(context.extensionUri, "media", "icon.png") ); // 设置HTML内容 panel.webview.html = getWebviewContent(iconUri.toString()); @@ -59,7 +59,12 @@ export function showICHelperPanel(context: vscode.ExtensionContext) { handleRenameFile(panel, message.oldPath, message.newPath); break; case "replaceInFile": - handleReplaceInFile(panel, message.filePath, message.searchText, message.replaceText); + handleReplaceInFile( + panel, + message.filePath, + message.searchText, + message.replaceText + ); break; case "insertCode": insertCodeToEditor(message.code); @@ -77,7 +82,11 @@ export function showICHelperPanel(context: vscode.ExtensionContext) { break; // 新增:处理用户回答 case "submitAnswer": - handleUserAnswer(message.askId, message.selected, message.customInput); + handleUserAnswer( + message.askId, + message.selected, + message.customInput + ); break; // 新增:中止对话 case "abortDialog": @@ -114,7 +123,7 @@ export class ICViewProvider implements vscode.WebviewViewProvider { private getWebviewContent(webview: vscode.Webview): string { const logoUri = webview.asWebviewUri( - vscode.Uri.joinPath(this.extensionUri, "media", "ICCoder主页标志.png") + vscode.Uri.joinPath(this.extensionUri, "media", "icon.png") ); return `