Menghuan1918
d8bc6566df
feat(tasks): 适配 DSH 0.1.7 的 Agent Teams(读 projection + 写路由对接真实服务)
团队功能在 0.1.7 上整条失效:team-routes.ts 当初镜像的是 0.1.6 的 Remote 词汇
(remoteView / remoteCreateTask / remoteUpdateTask),而 0.1.7 把这三个方法删掉了,
读路径改到 Lead Session 的 `agentTeam` Session projection。真机 3080 复现:
teams.view 对带团队的会话返回 400 "membership.svc.remoteView is not a function",
于是 TeamBoard 从不渲染、节点富化与任务窗连带失效。
- 读:删掉 teams.view 与 5s 轮询,改读 SessionListState.projectionsBySession[root]
.values.agentTeam(与 subagentCatalog 同源,推送式);新增 client/team-projection.ts
做纯适配器,成员运行状态由 subagents.live 的 running 叠加、Lead 回退 session list
(官方 README 的 "overlays activity from Session status")。projection 缺席 =
这里没有团队,与旧的 {available:false}/{team:null} 合并成同一静默降级。
- 写:taskCreate/taskUpdate 改调 0.1.7 的 createTask/updateTask(返回已提交的 view,
拒绝改为抛 TeamError),TEAM_TASK_STALE_REVISION → 409 team-conflict,其余 → 400
team-error(wire 新增 team-conflict)。api.ts 的 writeTask 把失败信封还原成
{ok:false,code,message} —— 原先窗口永远走不到该分支(readEnvelope 是抛)。
- 任务窗:外壳换成上一轮的 FloatingWindow(可拖拽/可拉伸/只在关闭或 Esc 时消失),
动作行下沉到 shell 的 footer,长描述不再把动作推出视野。
- 真机抓到的两个单测抓不到的问题:
1. 队列中任务的「完成」被宿主状态机拒绝(pending → claim → in_progress →
complete → completed → reopen)→ 动作行跟随状态,pending 出「认领」;
2. 认领后 Tag 变「阻塞」—— ready 的语义只是「pending 且无未完成 blocker」,
对所有非 pending 任务都是 false → 抽出唯一规则 taskBlocked/taskStatusLabel/
taskTone/taskDotState,四处展示点全部改走它。
- i18n:新增 teamTaskClaim / taskWindowCreate / taskWindowDetail /
tasksStateProvisioning 词条 ×20 词典。
验证:typecheck / lint 通过;pnpm test 1276 passed / 9 skipped;
pnpm test:mount 7/7(真实 DSH 0.1.7-rc.2 挂载 + tab 全扫无崩溃)。
真机 3080(0.1.7-rc.1 + Agent Teams 实验层):看板从 projection 渲染、
队列任务「认领」→「完成」全链路写通(负责人 lead / 进行中 / 已完成)、
外部点击不关窗、Escape 关窗,截图见 docs/plans/2026-09-27-agent-teams-dsh-0.1.7-adaptation.md。
(cherry picked from commit dbc524e0b350c5d3564843f4776cd15d797506d8)
2026-09-27 22:19:05 +08:00
..
2026-08-10 16:46:01 +08:00
2026-08-16 19:14:57 +08:00
2026-08-10 16:46:01 +08:00
2026-08-10 16:46:01 +08:00
2026-08-21 21:39:59 +08:00
2026-08-16 23:35:57 +08:00
2026-08-20 02:09:36 +08:00
2026-08-13 10:26:57 +08:00
2026-08-18 01:22:28 +08:00
2026-09-02 23:26:04 +08:00
2026-08-12 23:04:30 +08:00
2026-08-14 23:04:25 +08:00
2026-08-17 00:06:20 +08:00
2026-08-18 10:50:30 +08:00
2026-08-14 14:53:03 +08:00
2026-08-22 19:10:02 +08:00
2026-08-15 15:05:06 +08:00
2026-08-18 23:23:17 +08:00
2026-08-18 01:22:28 +08:00
2026-08-19 04:04:44 +08:00
2026-09-02 23:37:40 +08:00
2026-08-21 01:28:17 +08:00
2026-09-06 00:59:03 +08:00
2026-09-04 20:28:35 +08:00
2026-08-24 01:19:43 +08:00
2026-08-23 22:02:47 +08:00
2026-08-24 00:59:27 +08:00
2026-09-03 09:56:31 +08:00
2026-08-26 21:40:32 +08:00
2026-08-26 18:21:43 +08:00
2026-08-29 15:49:19 +08:00
2026-09-02 23:13:57 +08:00
2026-09-01 16:07:33 +08:00
2026-09-03 21:21:22 +08:00
2026-09-04 22:08:02 +08:00
2026-09-06 23:48:25 +08:00
2026-09-08 00:04:25 +08:00
2026-09-08 22:20:15 +08:00
2026-09-08 21:21:29 +08:00
2026-09-10 17:13:32 +08:00
2026-09-10 22:26:02 +08:00
2026-09-09 13:15:49 +08:00
2026-09-10 17:13:32 +08:00
2026-09-10 14:54:19 +08:00
2026-09-11 16:58:29 +08:00
2026-09-11 16:20:58 +08:00
2026-09-27 22:19:05 +08:00
2026-09-27 22:18:19 +08:00
2026-09-21 21:00:09 +08:00
2026-09-23 23:58:59 +08:00
2026-09-23 23:58:59 +08:00
2026-09-27 22:19:05 +08:00
2026-09-27 22:18:57 +08:00
2026-09-27 22:18:57 +08:00