用途与实际影响
这项功能怎样使用
为什么需要它
只把聊天记录复制到手机,不能证明手机看到的还是电脑上的同一个任务。旧设计必须先核对任务身份和电脑端是否已经接上,再允许第一条手机要求。
举个实际例子
我想从手机接着电脑上的同一个任务,而不是另开一份聊天。历史设计会先确认手机看到的任务已经在电脑端落稳,才放行第一条要求;当前 Remote 仍冻结不可用,本页只解释这个防重复机制,不创建或连接任务。
最后我会得到什么
历史资料能说明当时如何保持同一任务;当前 Remote 不能连接电脑、开始新任务或继续旧任务。
正常时
历史上,手机和电脑确认是同一个任务后才允许交互;当前只读查看这份证据。
发现问题时
旧设计遇到断线或重复请求会先核对原任务,不自动另开;当前不会做运行态查询。
入口不可用或证据不足时
当前控制入口冻结且不可用,只能阅读获准的历史材料;恢复须由本人另行明确启动独立项目并重新验收。
从哪里开始
当前 Codex Remote 控制入口冻结且不可用,不能从手机开始或恢复任务。本页只能阅读历史设计;恢复须由用户另行明确启动独立项目。
需要准备什么
- 想了解的历史同任务场景;当前不能连接
从开始到拿到结果
- 1
当前只读看历史
页面说明过去怎样认准电脑上的同一任务,不发起连接。
- 2
理解当时的门槛
历史设计要先证明电脑端已接上任务,手机才允许发第一条要求。
- 3
恢复另做验收
当前不创建或恢复任何任务;未来新项目必须重新证明两端确实共享同一任务。
技术实现与依据
这里保留实现、关键条件、精确入口、历史记录和验证结果。
当前控制入口不可用且冻结;v0.1.5 与历史真实多端验收仅证明曾经走通,源码 CI 仍按原观察单列关键规则与设计选择
把 threadId(任务标识) / turnId(轮次标识) 作为同步事实,不把相似标题当成同一任务。
手机首轮必须晚于 Desktop resume 屏障。
Sidecar(认证侧车服务) 离线不创建第二个 app-server(任务协议服务),也不终止 Desktop。
身份不清时宁可拒绝新执行,也不制造重复任务。
本模块用到的名词
- threadId(任务标识)
- 同一持久任务的稳定身份;标题和最近时间不能替代。
- turnId(轮次标识)
- 一次用户输入到完成回答的运行身份,用来区分当前轮和下一轮。
- resume barrier(恢复订阅屏障)
- Desktop 确认已经订阅任务后,手机才允许启动首轮。
- projectless task(无项目任务)
- 在隔离、有界临时根中运行,不冒充已登记项目。
专业定义
历史实现用同一 threadId(任务标识)、turnId(轮次标识)、单一 app-server(任务协议服务) 与 Desktop 订阅屏障维持身份;当前控制冻结,不创建、恢复或查询任务。
解决什么
解决手机与 Desktop 各跑一份任务、空任务壳未持久化、订阅丢失和断线后重复首轮。
当前怎样实现
- Broker(代理服务) 独占一个 app-server(任务协议服务),并把 Desktop 与 Sidecar(认证侧车服务) 作为两个独立 WebSocket client。
- 连接级 subscription 不共享,因此每端都必须显式 thread/resume。
- 手机新任务必要时用隐藏 thread/name/set 让空壳进入持久记录。
- coordinator 在 Desktop resume barrier 完成前阻塞 turn/start。
- loaded-thread registry(登记清单) 合并 Desktop 与 Sidecar(认证侧车服务) 的真实运行任务,不截断前三条。
执行流程
- 1
以下是已保留源码所定义的历史流程,用于理解曾经做成的能力,不是当前操作步骤;运行时冻结期间不执行、不探测,也不因旧测试或截图解除冻结。
- 2
解析已登记项目或创建隔离无项目根。
- 3
调用 app-server(任务协议服务) 创建或恢复 thread。
- 4
必要时给空任务壳设置隐藏名称以持久化。
- 5
等待 Desktop 对同一 thread 完成 resume。
- 6
核对 threadId(任务标识)、turnId(轮次标识) 与项目身份。
- 7
放行首轮并通过 SSE 向浏览器投影事件。
- 8
断线后按权威快照恢复,而不是创建替代任务。
边界
- 当前控制入口不可用且冻结:不调用 Status、Open、Close、重启、登记、回滚、dispatcher(分派器)、计划任务、Sidecar(认证侧车)、Broker(共享代理)或公网端点,也不走替代启动路径。仅可只读查看获准的具名源码、文档、测试定义与历史图片;恢复须由用户另行明确启动独立项目并重新完成端到端验收。
- 手机不能在 Desktop 缺席时偷偷创建一条独立生产任务。
- Web 队列不是 Desktop 原生未发送草稿。
- Sidecar(认证侧车服务) loss 不应让 Desktop 任务退出。
- 页面不以截图或相似标题证明同一任务。
失败与恢复
- 当前入口冻结
- 当前控制入口不可用且冻结:不调用 Status、Open、Close、重启、登记、回滚、dispatcher(分派器)、计划任务、Sidecar(认证侧车)、Broker(共享代理)或公网端点,也不走替代启动路径。仅可只读查看获准的具名源码、文档、测试定义与历史图片;恢复须由用户另行明确启动独立项目并重新完成端到端验收。
- Desktop 未连接
- 拒绝手机首轮,保留任务壳和明确错误。
- resume barrier 超时
- 不调用 turn/start,等待重新取得 Desktop 订阅证据。
- 重复创建请求
- 用幂等身份回读已有 thread,不再创建第二份。
- Sidecar(认证侧车服务) 断开
- Desktop 继续通过 Broker(代理服务) 使用现有 app-server(任务协议服务);浏览器进入断线态。
真实入口
docs/architecture.md定义单一 app-server(任务协议服务)、连接级订阅、任务壳持久化和 Desktop 屏障。
apps/broker/src/coordinator.ts实现 Desktop/Sidecar(认证侧车服务) 协调与首轮放行。
apps/broker/src/coordinator.test.ts验证 Desktop 缺席、屏障阻塞和 Sidecar(认证侧车服务) 缺席边界。
如何验证
- v0.1.5 的 coordinator 与 thread lifecycle 测试通过。
- 历史真实验收确认手机创建的任务出现在 Desktop,并保持相同 thread/turn。
- 本轮只读审查没有调用 Remote runtime(运行环境);当前结论为不可用且冻结,不以未验证在线替代这一明确状态。
与其他模块的关系
它是对话控制、子智能体导航、审批、文件、实时架构与安全模块的身份基础:只有先证明手机和 Desktop 指向同一任务,后续操作和父子关系才有明确对象。
