From 96ff07579e8adfe8b720b1908b9c69c8ce3dcb47 Mon Sep 17 00:00:00 2001 From: Autumn-27 <53844290+Autumn-27@users.noreply.github.com> Date: Thu, 17 Sep 2026 08:52:52 -0400 Subject: [PATCH] =?UTF-8?q?fix(digest):=20=E7=BB=99=20per-task=20planner?= =?UTF-8?q?=20=E6=8E=A5=E4=B8=8A=20Compactor=EF=BC=8C=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E5=86=B7=E8=8A=82=E7=82=B9=E5=8E=8B=E7=BC=A9=E4=BB=8E=E4=B8=8D?= =?UTF-8?q?=E8=A7=A6=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 引擎经权威解析器实际驱动的是 agentsForTask 构建的 per-task planner,但 cold-digest 落地时只在 buildPlannerWorker(全局 fallback pair)接了 SetCompactor,而该 pair 被解析器旁路、从不跑规划轮。结果 per-task planner 的 compactor 恒为 nil,OnPlannerRound 每轮直接 no-op —— round_no 不递增、 cold_since_round 从不盖章、digest 从不生成,与阈值无关。 在 agentsForTask 补上 SetCompactor,provider 用 plannerRuntime、model 用 task-router,与该 planner 实际运行所用模型一致(§4)。 --- server/task_llm.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/server/task_llm.go b/server/task_llm.go index f538cbb..0856f75 100644 --- a/server/task_llm.go +++ b/server/task_llm.go @@ -582,6 +582,11 @@ func (s *Server) agentsForTask(t *Task) *taskAgentBundle { pl.SetProxy(s.m.ProxyAddr(), s.m.ProxyCACert()) pl.SetWebSearch(s.webSearchFor("planner")) pl.SetConstraintInject(s.constraintInjectPlanner) // 操作约束注入 planner(可配置,默认开) + // cold-digest §7: 冷节点后台压缩。引擎经权威解析器实际驱动的就是这套 per-task planner + // (agentsForTask),所以 Compactor 必须接在这里;buildPlannerWorker 那套全局 pair 被解析器 + // 旁路、从不跑规划轮,接在那里等于不生效。走任务路由的 planner provider(§4:与 agent 同模型), + // 压缩用 Complete 一次性生成 body。 + pl.SetCompactor(agent.NewCompactor(plannerRuntime, "task-router")) main := agent.NewMainAgent(mainRuntime, "task-router", s.m.dir, tx, mainRuntime.CompactionWindow(), s.agentMaxTurns("mainagent")) main.SetFindingRecorder(s.evidenceStore()) main.SetCompactionWindowResolver(mainRuntime.CompactionWindow)