From a59588a0ce35a8ac5e76323a58a08bf3dedea8d9 Mon Sep 17 00:00:00 2001 From: wangjia <809946525@qq.com> Date: Tue, 30 Jun 2026 08:02:22 +0800 Subject: [PATCH] =?UTF-8?q?fix(console):=20=E4=BE=A7=E6=A0=8F=E9=A1=B9?= =?UTF-8?q?=E7=9B=AE=20agent=20=E5=BE=BD=E6=A0=87=E6=94=B9=E7=94=A8=20s.ru?= =?UTF-8?q?nning=EF=BC=8C=E4=BF=AE=E5=A4=8D=20planner/spec=20=E9=98=B6?= =?UTF-8?q?=E6=AE=B5=E5=BE=BD=E6=A0=87=E7=BC=BA=E5=A4=B1=20(tsk=5F0u7OP3RF?= =?UTF-8?q?BAqr)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 侧栏项目 agent 计数徽标原绑定 s.executing(仅统计任务恰处 executing 状态), 与「运行中」青点(s.running)及 tooltip『N agents running』语义不一致。 当 Hard(analyzing/planner) 或 Medium(speccing) 任务有在途 agent 时,s.executing=0 导致徽标缺失(如 maestro 项目)。改取 s.running(runs.status=started,覆盖各阶段)。 新增 test/adapt.test.ts 锁定该映射。 Co-Authored-By: Claude Opus 4.8 --- app/src/adapt.js | 5 ++++- test/adapt.test.ts | 31 +++++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 test/adapt.test.ts diff --git a/app/src/adapt.js b/app/src/adapt.js index 66d03e5..d60848c 100644 --- a/app/src/adapt.js +++ b/app/src/adapt.js @@ -25,7 +25,10 @@ export function adaptProject(p) { return { id: p.id, name: p.name, path: shortPath(p.repoPath), branch: p.defaultBranch, autonomy: p.autonomy, concurrency: p.concurrency, hue: hueFor(p.name), - state, pending: s.attention || 0, agents: s.executing || 0, blocked: s.blocked || 0, + // agents 徽标 = 实际在途 agent 数(runs.status='started',含 planner/spec/executor 各阶段), + // 与「运行中」青点同源(s.running);不可用 s.executing——那只统计任务恰处 executing 状态, + // 会漏掉 analyzing(planner)/speccing(spec) 阶段正在跑的 agent,导致徽标缺失。 + state, pending: s.attention || 0, agents: s.running || 0, blocked: s.blocked || 0, // 透传给 ConfigPanel 用的原始字段 model: p.model, verifyCmd: p.verifyCmd, maxRetries: p.maxRetries, repoPath: p.repoPath, logo: p.logo, budgetUsd: p.budgetUsd ?? null, budgetPeriod: p.budgetPeriod ?? 'month', diff --git a/test/adapt.test.ts b/test/adapt.test.ts new file mode 100644 index 0000000..f0a9cae --- /dev/null +++ b/test/adapt.test.ts @@ -0,0 +1,31 @@ +import { test } from 'node:test'; +import assert from 'node:assert/strict'; +// adapt.js 是前端纯函数适配层(app/src),用 node:test 直接校验项目摘要映射。 +import { adaptProject } from '../app/src/adapt.js'; + +const baseProject = { + id: 'p1', name: 'maestro', repoPath: '/Users/x/dev/maestro', defaultBranch: 'main', + autonomy: 'auto-easy', concurrency: 2, status: 'active', +}; + +test('adaptProject: agents 徽标取 s.running(实际在途 agent),而非 s.executing', () => { + // planner/spec 阶段:有真实在途 run(running>0)但没有 executing 任务 → 徽标必须仍显示 agent 数 + const p = adaptProject({ ...baseProject, summary: { running: 1, executing: 0, blocked: 0, attention: 0 } }); + assert.equal(p.agents, 1, 'analyzing/speccing 阶段也应计入 agent 徽标'); + assert.equal(p.state, 'running'); +}); + +test('adaptProject: 无在途 run 时 agents 徽标为 0(即使有 executing 任务计数错位)', () => { + const p = adaptProject({ ...baseProject, summary: { running: 0, executing: 0, blocked: 2, attention: 1 } }); + assert.equal(p.agents, 0); + assert.equal(p.blocked, 2); + assert.equal(p.pending, 1); + assert.equal(p.state, 'blocked'); +}); + +test('adaptProject: summary 缺省时各计数回退 0', () => { + const p = adaptProject({ ...baseProject }); + assert.equal(p.agents, 0); + assert.equal(p.pending, 0); + assert.equal(p.blocked, 0); +});