CycleDetector 配置

wescode 的循环检测器配置:阈值、工具分类与两阶段终止协议。


终止哲学

引擎不因 counter 阈值终止正常运行的任务。CycleDetector 是唯一的引擎内终止来源——检测"可证明的死循环"(完全相同操作 + 完全相同结果),不是"你跑太久了"。


两阶段终止协议

阶段触发行为
自愈首次 CycleTerm注入 system 纠正消息 + 重置 counter
HITL第二次 CycleTerm问用户"怎么办",超时 60s 自动终止 + 保存进度

工具分类

CycleDetector 对工具的分类决定 streak 阈值和是否启用 halving。

四级 fallback 优先级

  1. 硬编码 map(wesgine 内置 ~20 个工具)
  2. ExtraCategories(消费方声明)
  3. ToolMeta 自动推断(ReadOnly=true → exploration)
  4. 默认:categoryAction

wescode 24 个自定义工具中 20 个实现了 BaseTool{Meta: ToolMeta{ReadOnly: true}},自动推断为 exploration——无需额外配置。


当前阈值

CycleDetectConfig{
    ExplorationTermThreshold: 100,  // 大代码库分析 40+ 文件正常
    ActionTermThreshold:      50,   // 大重构 edit 同文件 20+ 次正常
    IdenticalCallTermThreshold: 7,  // 完全相同调用 7 次是真循环
    ToolOverrides: map[string][2]int{
        "exec":        {30, 60},
        "exec:readonly": {50, 100},
        "edit":        {30, 60},
        "write":       {30, 60},
        "apply_patch": {30, 60},
        "plan":        {15, 30},
    },
}

扩展机制

CycleDetectConfig{
    // 显式声明工具分类
    ExtraCategories: map[string]wesgine.ToolCategoryHint{
        "my_readonly_tool": wesgine.CategoryExploration,
    },
    // 额外的 progress-aware 工具
    ExtraProgressAware: []string{"my_mutation_tool"},
}

相关文档