- apes:tasks 接 jobsBySession + running sessions(live 任务列表: label/status/kind/耗时 + owner 归属,复用 collectTreeJobs/orderJobs) - apes:agents 接 subagent 拓扑(rootAncestor + subagentsByParent 目录, parent→children activity running/inactive, 降级用 byId origin 过滤) - apes:profile 接 byId[current](当前会话画像: title/cwd/running + agent 状态) - apes:apps 展示 cwd/workspace 信息(无 DSH host feed, 保留说明) 数据源: ctx.sessions.list (useSyncExternalStore, uSES 安全订阅) 复用 pure helper: subagent-lineage.ts (rootAncestor/isSideThreadSummary) + subagent-jobs.ts (collectTreeJobs/orderJobs/isJobLive/jobDotState) UI 独立内联样式, 不耦合 builtin CSS module / StateDot (保持 apes/ 隔离) locales: 加 status/duration/empty/workspace 文案 (zh+en, 含 {param} 插值) gate: 1250 passed | typecheck exit 0 | tsdown build complete
- tabs.tsx: +FiGrid icon, +AppsView placeholder, +apes:apps descriptor (order 902, profile 推到 903) - locales.ts: +apesApps/apesAppsTitle/apesAppsHint zh/en 4 key - tests: 3→4 tab 断言 (id 列表/contract/order 严格递增/disposer/i18n zh+en) 4 个 apes:* tab: tasks(900) / agents(901) / apps(902) / profile(903) gate: typecheck + build + test 1250 passed / 9 skipped / 0 failed (无回归)
- 独立 src/client/apes/ 模块 (D1=B), index.tsx 仅 3 处最小改动 - 3 个静态占位 tab (react-icons FiList/FiCpu/FiUser), order 900+ 排在上游 builtins 之后 - 隔离 i18n 命名空间 'apes' (不碰上游 betterSidebar 字典), zh/en 双语 - index.tsx: attachApesLocale + 字典注册 + registerApesTabs effect - tests/apes-tabs.spec.ts: 9 测试 (注册契约 + disposer + i18n zh/en/兜底) gate: typecheck + build + test 1250 passed / 9 skipped / 0 failed apps tab 延后 Phase 1b, messages 已砍 (无 DSH message-stream API)