v0.16.10: 最小必要性清理 — 删除非必要校验和注入提示

按"让 AI 自己判断"原则,删除所有"工程师判断"性质的校验代码和注入提示,
只保留安全防护(路径沙箱/命令安全/参数消毒)和必要的上下文管理(压缩/截断)。

删除项:
- completion-gate.ts 整个文件(notThinking/toolResultReview/contextEfficiency/planModeCompletion)
- verifyToolResult 工具结果核验函数 + TOOLS_NEED_VERIFY 常量
- 跨轮次死循环检测器(recordLoopSignature/detectLoopDeadlock/resetLoopDeadlockDetector)
- R77 checkRateLimit 速率限制 + R87 isToolCircuitBroken 熔断器 + R104 isDuplicateToolResult 去重
- R56 目标对齐验证 + R63 速率限制 + R87 熔断器 + R104 去重检测 + R119 优先级排序
- agent-metrics recordCompletionGate + completionGatePassed + avgCompletionScore 相关代码
- context-manager 低价值关键词黑名单 + 快速摘要改用 user role
- LoopContext 的 completionGateFailCount/verifyWarnings 字段

修复项:
- R76 路径沙箱 replace bug:用 startsWith 前缀锚定替代 replace,避免子串误判
- R28 命令注入检测:缩小匹配范围,仅拦截命令替换中包含危险命令的情况

总计 13 文件变更,+46/-1124 行
This commit is contained in:
紫影233
2026-07-16 16:44:04 +08:00
parent a4b82b45bc
commit 80581deb37
13 changed files with 46 additions and 1124 deletions
+4 -10
View File
@@ -295,19 +295,12 @@ export function scoreMessageImportance(msg: OllamaMessage): number {
/完成|done|✓|success|成功|结果|result/i,
/项目|project|工作空间|workspace|git|repo|仓库/i,
];
// R10: 修复低价值模式误报 — 移除单字“好”(匹配几乎所有中文文本
// 仅匹配明确的短语回复,且仅对短消息(<100字)生效
const lowValuePatterns = [/^(好的|明白|ok|知道了|嗯|哦|好[的呀吧]|收到)$/i,
/^(继续|请继续|帮帮我|可以吗|行吗|好的谢谢)$/i,
/^(谢谢|感谢|不客气|多谢|thanks?)$/i,
];
// 低价值关键词黑名单已删除 — 误伤边界情况(如"好的,我发现了一个 bug"
// AI 应自行判断消息价值,长度加分机制已足够区分短回复
for (const p of highValuePatterns) {
if (p.test(content)) { score += 1; break; }
}
for (const p of lowValuePatterns) {
if (p.test(content) && content.length < 100) { score -= 2; break; }
}
// 工具调用 → 高价值
if (msg.tool_calls?.length) score += 2;
@@ -850,8 +843,9 @@ function summarizeOlderMessages(messages: OllamaMessage[], batchSize: number): O
for (let i = 0; i < messages.length; i += batchSize) {
const batch = messages.slice(i, i + batchSize);
const summary = createQuickSummary(batch);
// 使用 user role 而非 system role — 摘要是对话历史的延续,用 system 会与系统指令语义混淆
summaries.push({
role: 'system',
role: 'user',
content: `【更早的对话摘要(第 ${Math.floor(i / batchSize) + 1} 部分)】\n${summary}`,
compressed: true
});