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:
@@ -893,7 +893,10 @@ function hasPathTraversal(path: string): boolean {
|
||||
return false;
|
||||
}
|
||||
|
||||
/** R28: 命令注入检测 — 检查命令中是否包含危险的 shell 注入模式 */
|
||||
/** R28: 危险命令关键词 — 命令替换中包含这些词才拦截 */
|
||||
const DANGEROUS_CMD_KEYWORDS = 'rm|del|format|mkfs|dd|fdisk|shred|umount|chmod\\s+777|chown|shutdown|reboot|halt';
|
||||
|
||||
/** R28: 命令注入检测 — 仅拦截命令替换中包含危险命令的情况,避免误伤 $(date) 等合法用法 */
|
||||
function hasCommandInjection(command: string): boolean {
|
||||
if (!command) return false;
|
||||
const dangerousPatterns = [
|
||||
@@ -901,8 +904,9 @@ function hasCommandInjection(command: string): boolean {
|
||||
/\|\s*(rm|del|format|mkfs)\s/i, // 管道到删除操作
|
||||
/&&\s*(rm|del|format|mkfs)\s/i, // AND链中的删除操作
|
||||
/\$\{.*IFS.*\}/i, // IFS 变量注入
|
||||
/\$\([^)]*\)/, // 命令替换 $(...)
|
||||
/`[^`]*`/, // 反引号命令替换
|
||||
// 仅拦截命令替换中包含危险命令的情况,放行 $(date) 等合法用法
|
||||
new RegExp(`\\$\\([^)]*\\b(?:${DANGEROUS_CMD_KEYWORDS})\\b[^)]*\\)`, 'i'),
|
||||
new RegExp('`[^`]*\\b(?:' + DANGEROUS_CMD_KEYWORDS + ')\\b[^`]*`', 'i'),
|
||||
/\x00/, // null 字节注入
|
||||
];
|
||||
return dangerousPatterns.some(p => p.test(command));
|
||||
|
||||
Reference in New Issue
Block a user