fix: 修复 Plan 模式转 Agent 模式的递归执行问题

- 删除 pendingPlanExecution 自动执行机制,避免任务重复执行
- planAction confirm 只做 UI 切换,后端 LLM 在同一对话中执行
- planAction modify/cancel 调用 handlePlanAction 处理
- submitAnswer 改为 void 明确不等待
This commit is contained in:
XiaoFeng
2026-01-12 16:01:21 +08:00
parent a1e88d473b
commit 1231ef0892
2 changed files with 11 additions and 79 deletions

View File

@ -10,7 +10,6 @@ import {
handleUserAnswer,
abortCurrentDialog,
handlePlanAction,
setPendingPlanExecution,
getCurrentTaskId,
setLastTaskId,
} from "../utils/messageHandler";
@ -282,7 +281,7 @@ export async function showICHelperPanel(
break;
// 新增:处理用户回答
case "submitAnswer":
handleUserAnswer(
void handleUserAnswer(
message.askId,
message.selected,
message.customInput
@ -328,27 +327,20 @@ export async function showICHelperPanel(
// 处理计划操作(只做模式切换,响应已通过 submitAnswer 发送)
case "planAction":
if (message.action === "confirm") {
// 确认执行:切换到 Agent 模式
// 确认执行:切换到 Agent 模式UI 切换)
panel.webview.postMessage({
command: "switchMode",
mode: "agent",
});
// 获取当前会话的 taskId用于复用知识图谱数据
const taskId = getCurrentTaskId();
if (taskId) {
// 设置待执行的计划,对话结束后自动执行(复用 taskId
setPendingPlanExecution(
panel,
message.planTitle || "计划",
context.extensionPath,
taskId,
message.model // 传递服务等级
);
} else {
console.warn(
"[ICHelperPanel] 无法获取当前 taskId知识图谱数据可能丢失"
);
}
// 注意:不再设置待执行计划;后端 LLM 会在同一对话中自动执行计划
} else if (message.action === "modify" || message.action === "cancel") {
void handlePlanAction(
panel,
message.action,
message.planTitle || "",
context.extensionPath,
message.model
);
}
break;
// 添加文件上下文 - 显示工作区文件列表