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