feat(tasks): 目标完成后支持主 agent 直投意图执行(goalless)
所有目标达成后,主 agent 经 add_intent 下发的意图可被 worker 直接执行、跑完 即止;planner 在任务无 open 目标时不再运行,避免其重判目标达成而 cancelExec 杀掉直投意图;frontier 抽干后任务回到 done。 - db: 新增 HasOpenGoal 谓词(零迁移,读现有 goal 状态) - engine: plannerLoop 加 goalless 门(无 open 目标则不进 planner,抽干则收尾) - tools: add_intent 成功后调 resumeTask 复活任务(仅主 agent 生效,planner 为 nil) - mainagent: 提示加入「目标达成后反问是否登记为正式目标」引导 - orchestration: reseedMainAgentPrompt 让旧库收到新提示(一次性,同构 reseedGoalsPrompt) 已知边角问题(paused/exhausted 意图的收官判据、零 goal 窗口、TOCTOU 等) 待后续讨论后再修。
This commit is contained in:
1 parent
43edb86720
commit
01018a2161
5 files changed
+71
-1
No files matched your search
@@ -1016,6 +1016,7 @@ func (t *ToolSet) addIntent() actool.CoreTool {
|
||||
|
||||
ids := make([]int64, len(items))
|
||||
errs := map[string]string{}
|
||||
createdAny := false
|
||||
for i, it := range items {
|
||||
id, err := t.addOneIntent(it)
|
||||
if err != nil {
|
||||
@@ -1023,6 +1024,15 @@ func (t *ToolSet) addIntent() actool.CoreTool {
|
||||
continue
|
||||
}
|
||||
ids[i] = id
|
||||
createdAny = true
|
||||
}
|
||||
|
||||
// 人经主 agent 直投意图 → 若任务已 done(无 open 目标的 goalless 分支),把它
|
||||
// 拉回 running,worker 才能领这条意图执行。resumeTask 仅由主 agent 的 Chat 接入
|
||||
// (SetResumeTask);planner 的 ToolSet 为 nil,故 planner 自己调 add_intent 时此段
|
||||
// no-op,不影响其正常产意图。意图节点已在上面建好(open),复活时不会被误判抽干。
|
||||
if createdAny && t.resumeTask != nil {
|
||||
t.resumeTask()
|
||||
}
|
||||
|
||||
if !batch { // 单条:保持原返回
|
||||
|
||||
Reference in new issue
Block a user