From 801160930b5b38d6907c2abd42babd054a205e03 Mon Sep 17 00:00:00 2001 From: Autumn-27 <53844290+Autumn-27@users.noreply.github.com> Date: Wed, 9 Sep 2026 10:45:20 -0400 Subject: [PATCH] =?UTF-8?q?feat(planner):=20=E5=BF=83=E8=B7=B3=E5=94=A4?= =?UTF-8?q?=E9=86=92=E6=97=B6=E8=8B=A5=E6=97=A0=20open/running=20=E6=84=8F?= =?UTF-8?q?=E5=9B=BE=E5=88=99=E5=BC=BA=E5=88=B6=E8=A1=A5=E5=87=BA=E6=96=B0?= =?UTF-8?q?=E6=84=8F=E5=9B=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 停摆兜底:心跳/无变动唤醒且全图已无任何 open 或 running 意图时, 开场白改为停摆告警,明确告知 planner 无 worker 在跑、无排队方向, 本轮必须产出一个或多个与既有意图互不重复的新意图(不得产出 0 意图)。 --- agent/planner.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/agent/planner.go b/agent/planner.go index 1d89348..315d4d2 100644 --- a/agent/planner.go +++ b/agent/planner.go @@ -412,6 +412,11 @@ func (p *Planner) Plan(ctx context.Context, taskID int64, as *db.AssetStore, ts lead := "刚有具体变动(见下面的【本次触发本轮的实际变动】),据此规划下一步:" if len(triggers) == 0 { lead = "本轮是**定时巡检(心跳到点)/无具体变动信号**的唤醒——图不一定有新变动。顺带复查在跑意图:长时间无进展或跑偏的用 steer_work 纠偏、方向整个错的用 kill_work 止损;再判定目标、决定是否补方向:" + // 心跳/无变动唤醒时,若全图已无任何 open 或 running 意图 → 探索已停摆(没 worker 在跑、 + // 也没排队方向)。明确告知 planner 并强制其本轮补出新方向,别只复查在跑意图后空转一轮。 + if active, err := ts.HasActiveIntent(); err == nil && !active { + lead = "本轮是**定时巡检(心跳到点)**的唤醒,且当前**已没有任何 open 或 running 的意图**——没有 worker 在跑、也没有排队中的方向,探索已停摆。你**必须**在本轮产出一个或多个向目标推进、且与图中既有意图**互不重复**的新意图(不得产出 0 意图);先据下面的态势判定目标是否已达成,未达成则立即补方向:" + } } input := lead + situational + "\n\n据上面的态势,判定目标。目标已【真正达成】(已拿到目标成果/已确认目标漏洞)时用 prove_goal 逐个标记。**硬底线:只要目标尚未达成、且当前没有任何 open 或 running 意图(frontier_open=0 且 running_intents 为空),本轮就必须产出至少一个向目标推进的意图——此时没有在跑的 work 可等、也没有在排队的方向,产出 0 意图=任务停摆。仅当已有 open/running 意图在推进、或目标已达成时,本轮才可以不产出新意图。**" + renderPlannerTodos(opts.Todos.List())