CycleDetector 配置
wescode 的循环检测器配置:阈值、工具分类与两阶段终止协议。
终止哲学
引擎不因 counter 阈值终止正常运行的任务。CycleDetector 是唯一的引擎内终止来源——检测"可证明的死循环"(完全相同操作 + 完全相同结果),不是"你跑太久了"。
两阶段终止协议
| 阶段 | 触发 | 行为 |
|---|---|---|
| 自愈 | 首次 CycleTerm | 注入 system 纠正消息 + 重置 counter |
| HITL | 第二次 CycleTerm | 问用户"怎么办",超时 60s 自动终止 + 保存进度 |
工具分类
CycleDetector 对工具的分类决定 streak 阈值和是否启用 halving。
四级 fallback 优先级
- 硬编码 map(wesgine 内置 ~20 个工具)
ExtraCategories(消费方声明)ToolMeta自动推断(ReadOnly=true→ exploration)- 默认:
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"},
}
相关文档
- Run 生命周期 → engine
run-lifecycle.md - HITL 交互 → engine
hitl.md - 基准评测 →
bench.md