用途与实际影响
这项功能怎样使用
为什么需要它
长任务会把工作分给多层子智能体。如果页面只显示最新一条活动、只查当前列表或允许手机直接向只读子任务写入,用户既会漏掉已完成结果,也可能把要求送到错误的执行边界。
举个实际例子
我想看看两个子智能体各自做到哪一步。历史界面允许我从父任务点进已完成项,核对消息、工具和文件变化,再回父任务补充要求;当前只能从静态材料理解这段旅程,Remote 冻结不可用,不加载任务也不发送消息。
最后我会得到什么
历史资料说明怎样在父任务下查看运行中和已结束的子任务;返回父任务的页面路径曾受测,准确回到原阅读位置仍是单独缺口。当前不能打开真实任务树。
正常时
历史上,父子关系和已读完的历史都能确认时才显示完整任务树;当前只读材料。
发现问题时
旧设计会把尚未读完的历史明确标为不完整;当前不会连接补页。
入口不可用或证据不足时
当前控制入口冻结且不可用,只能阅读获准的历史材料;恢复须由本人另行明确启动独立项目并重新验收。
从哪里开始
当前入口冻结且不可用,不能在手机打开真实任务树;只能阅读本页保存的父子任务界面设计。
需要准备什么
- 想了解的历史父子任务查看场景;当前不能打开
从开始到拿到结果
- 1
读父子关系
历史界面从父任务列出子任务、状态和未读完的分页。
- 2
读子任务结果
过去可只读看公开消息、工具与文件活动,补充要求仍回父任务转交。
- 3
当前停在说明
本页不连接任务树;未来恢复要核对完整历史及返回父任务的位置。
技术实现与依据
这里保留实现、关键条件、精确入口、历史记录和验证结果。
当前控制入口不可用且冻结;父子导航、历史完整性与只读子任务保留源码/测试,精确返回阅读位置仍缺独立验收关键规则与设计选择
已完成子智能体进入归档流,但不会从父任务导航中凭空消失。
运行中、等待审批、已完成和失败是任务状态,不用颜色或更新时间猜测。
子任务详情展示消息、公开摘要、工具和文件变更,但不直接获得控制入口。
转交补充要求的 owner 是仍可控制的父任务,不是手机对子任务的旁路写入。
只有第一页到末页连续闭合且来源一致时,界面才显示‘已显示全部子智能体’。
本模块用到的名词
- parentThreadId(父任务标识)
- 把一个任务连接到直接父任务;沿链可计算多层深度。
- history integrity(历史完整性)
- 说明当前看到的是全部、部分、未知还是读取失败,不用短列表猜测完整。
- archived stream(归档流)
- 承载已经归档的终态子任务,与当前流合并后仍可导航。
- read-only handoff(只读转交)
- 子任务本身不接收手机输入;用户返回父任务,由父智能体决定怎样转交。
专业定义
历史任务树保留父子层级、当前/归档历史和终态记录,子任务只读、要求回父任务转交;当前冻结,不连接真实任务树。
解决什么
解决父子关系被扁平化、终态子任务丢失、短分页冒充完整历史、子任务误开放写入,以及断线时把不可执行按钮继续留在界面。
当前怎样实现
- SubagentSummary 公开 threadId(任务标识)、parentThreadId、depth、state、updatedAt 与 isDirectlyControllable。
- domain service 合并当前与归档 thread/list 流,并从父任务内的 subAgentActivity 递归发现仍有记录的后代。
- 缺失祖先用有界并发 thread/read 补齐;calculateDepth 与 isDescendantOf 按 parentThreadId 还原层级并防循环。
- Web 将 idle、running、waiting-for-approval、failed、complete 显示为空闲、运行中、等待审批、失败、已完成。
- X-Subagent-History-Integrity 传递 complete、partial、unknown(未验证)、failed 以及 current(当前状态)/archived 流状态;后续成功页不能覆盖较早页的风险。
- 子任务路由复用完整 ThreadDetail 与持久历史读取,隐藏 composer(输入器)和 Desktop 接入,只显示返回父对话。
- 产品设计要求返回父任务时恢复滚动位置;当前源码已有任务内历史锚点保持,但现有子任务 E2E(端到端验证) 只验证路由返回,没有单独证明跨父子路由的精确 scroll offset(滚动偏移)。
执行流程
- 1
以下是已保留源码所定义的历史流程,用于理解曾经做成的能力,不是当前操作步骤;运行时冻结期间不执行、不探测,也不因旧测试或截图解除冻结。
- 2
父任务页读取子智能体第一页及历史完整性。
- 3
合并 current(当前状态) 与 archived,补齐祖先并计算缩进层级。
- 4
列表按状态显示运行中、等待审批、已完成或失败;有游标时由用户继续加载。
- 5
点开子任务,读取它的消息、公开摘要、工具、文件变更和最终结果。
- 6
子任务保持只读;需要补充要求时点击返回父任务,再由父智能体转交。
- 7
返回父任务时恢复原阅读位置是产品合同;若当前位置证据不足,保持诚实的验收缺口。
- 8
断线或身份不明时继续显示已载入记录,但禁用会产生远端影响的入口。
边界
- 当前控制入口不可用且冻结:不调用 Status、Open、Close、重启、登记、回滚、dispatcher(分派器)、计划任务、Sidecar(认证侧车)、Broker(共享代理)或公网端点,也不走替代启动路径。仅可只读查看获准的具名源码、文档、测试定义与历史图片;恢复须由用户另行明确启动独立项目并重新完成端到端验收。
- 不显示隐藏思维链,只展示 Codex 公开的消息、摘要、工具和文件活动。
- isDirectlyControllable 元数据不授权 Web 直接写子任务;当前产品统一回父任务。
- 完整性 header 缺失兼容旧 Sidecar(认证侧车服务),但有下一页时仍不能声称历史完整。
- 父任务路由返回与精确滚动位置恢复是两个证据层,前者通过不能替代后者。
- 本轮没有访问真实任务树、当前连接或安装中的 Sidecar(认证侧车服务)。
失败与恢复
- 当前入口冻结
- 当前控制入口不可用且冻结:不调用 Status、Open、Close、重启、登记、回滚、dispatcher(分派器)、计划任务、Sidecar(认证侧车)、Broker(共享代理)或公网端点,也不走替代启动路径。仅可只读查看获准的具名源码、文档、测试定义与历史图片;恢复须由用户另行明确启动独立项目并重新完成端到端验收。
- current(当前状态) 或 archived 分页仍有下一页
- 显示已获取数量和‘历史尚未确认完整’,由用户加载下一页。
- 历史读取失败或被截断
- 保留已验证记录,维持 failed/partial 风险,不用后来成功页覆盖。
- 父级记录暂时缺失
- 有界读取祖先;仍无法确认时保持未知,不把子任务挂到猜测的父级。
- 子任务需要新要求
- 不出现直接输入框;返回仍可控制的父任务后再转交。
- 浏览器断线或轮次身份不清
- 记录仍可看,输入、转交与停止入口禁用,恢复连接后重新回读。
- 返回父任务但位置恢复未独立验收
- 承认当前证据只证明成功返回,补做精确滚动位置浏览器场景后再升级结论。
真实入口
docs/product-design.md定义父子层级、终态保留、只读转交、断线禁用与返回父任务旅程。
packages/domain/src/service.ts合并当前/归档流、发现后代、补齐祖先、计算深度并生成历史完整性。
apps/web/src/App.tsx呈现状态树、分页提示、子任务详情、只读边界与返回父对话入口。
tests/e2e/journey.spec.ts验证手机打开子智能体、读取历史内容并返回父任务的合成浏览器旅程。
如何验证
- domain projection 与 service 测试覆盖 parentThreadId、depth、当前/归档合并、祖先补读和状态折叠。
- api-subagent-history 与 App state 测试覆盖完整性 header、连续分页、风险累积和失败提示。
- Chromium(浏览器内核) journey 场景验证进入子任务、看到消息/工具/结果并返回父任务;响应式场景验证子智能体触控目标。
- 本轮只读审查没有连接真实 Desktop/Sidecar(认证侧车服务),也没有取得精确父任务滚动位置恢复的专项 E2E(端到端验证)。
与其他模块的关系
它依赖同一任务模块提供稳定父子身份,读取共享架构投影的任务历史;补充要求回到对话控制模块,版本与证据模块负责标注实现、浏览器验收和当前在线之间的边界。
