v0.16.11: Plan Mode 最小必要性清理 — 删除进度注入和死代码链

删除项:
- Plan Mode 每轮进度注入代码(formatPlanStatus() 主动注入到 user 消息)
  AI 改为从 plan_track mark_done/status 工具返回值自行推断进度
- _lastPlanStatus 死代码链(agent-engine.ts 2 处保存 + input-area.ts 2 处清空)
  保存后从未被读取使用,纯死代码
- formatPlanStatus import(已无调用点)
- _lastPlanStatus 和 _planLastInjectedDone StateKey 声明

简化项:
- "计划已批准"消息移除 (web_search、write_file 等) 工具名列举,让 AI 自行判断

修正项:
- L2431 注释从"AI 可通过 formatPlanStatus() 看到剩余步骤"
  改为"AI 通过 plan_track mark_done/status 的工具返回值获知进度"

总计 8 文件变更
This commit is contained in:
紫影233
2026-07-16 16:56:32 +08:00
parent 80581deb37
commit 45b50e4dc7
8 changed files with 12 additions and 40 deletions
+4 -25
View File
@@ -13,7 +13,6 @@ import {
needsConfirmation,
initPlanTracker,
getPlanTracker,
formatPlanStatus,
clearPlanTracker,
} from './tool-registry.js';
import {
@@ -1484,20 +1483,8 @@ async function handleThinking(
ctx.thinking = '';
ctx.toolCalls.length = 0;
// ── Plan Mode 执行进度注入 — 仅在进度变化时注入,避免每轮重复 ──
if (ctx.mode === 'plan' && ctx.loopCount >= 1) {
const tracker = getPlanTracker();
if (tracker.active && tracker.steps.length > 0) {
const lastDone = state.get<number>('_planLastInjectedDone', -1);
if (tracker.done !== lastDone) {
const status = formatPlanStatus();
if (status) {
ctx.messages.push({ role: 'user', content: status, ephemeral: true });
state.set('_planLastInjectedDone', tracker.done);
}
}
}
}
// Plan Mode 进度注入已删除 — AI 调用 plan_track mark_done 后工具返回值已含进度,
// AI 应从上下文自行推断或主动调用 plan_track status 查询
const abortController = registerAbortController();
@@ -2371,7 +2358,7 @@ async function handleReflecting(
}
ctx.messages.push({
role: 'user',
content: '计划已批准。现在开始执行——请直接调用工具web_search、write_file 等)来完成每一步。不要描述计划,直接行动。',
content: '计划已批准。现在开始执行——请直接调用工具来完成每一步。不要描述计划,直接行动。',
ephemeral: true,
});
transition(ctx, S.THINKING);
@@ -2440,17 +2427,10 @@ async function handleReflecting(
// Completion Gate 已删除 — 所有检查项(notThinking/toolResultReview/contextEfficiency/planModeCompletion)均已删除
// AI 应基于工具结果和上下文自行判断是否需要继续或完成
// Plan Mode 下 AI 通过 formatPlanStatus() 看到剩余步骤,应自行决定是否继续
// Plan Mode 下 AI 通过 plan_track mark_done/status 的工具返回值获知进度,应自行决定是否继续
logInfo('模型停止工具调用 → ReAct Agent Loop 结束');
// ── 保存 Plan Mode 最终进度到状态,供下一轮 Loop 注入历史 ──
// 注意:不在此处 clearPlanTracker,由 finally 块统一处理(保存 resumeData 后清理)
if (ctx.mode === 'plan') {
const tracker = getPlanTracker();
if (tracker.active && tracker.steps.length > 0) {
state.set('_lastPlanStatus', formatPlanStatus());
}
}
// ── 自动记忆提取(异步,不阻塞用户看到回复)──
// P3 #12 修复:在 cleanupAbortController 之前捕获 signal 引用,避免竞态
@@ -2730,7 +2710,6 @@ default:
savedAt: Date.now(),
};
state.set('_planResumeData', resumeData);
state.set('_lastPlanStatus', formatPlanStatus());
}
}
clearPlanTracker();