用途与实际影响
这项功能怎样使用
为什么需要它
运行中的 steer、停止当前回复和排队下一轮看起来都像“发一句话”,实际却改变不同状态。若不先核对轮次、能力和队列版本,断线、连点或多端编辑会造成发错轮、覆盖设置或重复执行。
举个实际例子
我在手机上补一句“先别改配置,只分析原因”。历史产品会先判断这句话还来得及影响当前回复,还是应该排到下一轮;断线后结果说不清就停住,不会自动重发。当前 Remote 冻结不可用,这里只展示这套处理逻辑,不发送文字或恢复队列。
最后我会得到什么
历史设计分清当前补充、停止与下一轮待发,并在断线时避免重复发送。当前没有任何文字会通过 Remote 发出或排队。
正常时
历史上先核对目标任务、正在进行的轮次和本人选的动作,再发送并看接收结果。
发现问题时
旧设计遇到多端修改或回执丢失会先保留草稿核对;当前不恢复或重放队列。
入口不可用或证据不足时
当前控制入口冻结且不可用,只能阅读获准的历史材料;恢复须由本人另行明确启动独立项目并重新验收。
从哪里开始
当前入口冻结且不可用,不能发送 steer、interrupt 或下一轮队列;本页只解释旧设计中三种动作如何区分。
需要准备什么
- 想了解的历史当前轮或下一轮动作;当前不能发送
从开始到拿到结果
- 1
先分清想影响哪一轮
历史设计把给当前回复补要求、停止当前回复和留给下一轮分开。
- 2
有结果才确认发送
两端同时改草稿或传输中断时先核对原任务,不能自动重发同一句话。
- 3
当前没有发送入口
冻结期间本页不会投递、排队或恢复任何文字。
技术实现与依据
这里保留实现、关键条件、精确入口、历史记录和验证结果。
当前控制入口不可用且冻结;steer、interrupt 与持久队列保留源码、测试和历史实测,不是当前可用操作关键规则与设计选择
输入事实固定包括 threadId(任务标识)、active turnId(轮次标识)、availableActions、text、连接状态、queue revision、clientUserMessageId 与 next-turn settings。
当前轮只有运行时真实允许时才调用 turn/steer;停止只对精确 active turnId(轮次标识) 调用 interrupt。
下一轮消息按任务 FIFO 保存,模型、思考、速度、权限和审批选择也只绑定下一轮。
编辑、排序、删除和手动发送必须携带最新 revision,过期多端操作失败关闭。
正常终态后才派发下一项;失败、异常结束或未知状态暂停后续队列。
断线不等于失败也不等于成功;先按 clientUserMessageId 对账,ambiguous 时停止自动重放。
本模块用到的名词
- steer(当前轮引导)
- 把补充要求送入仍在运行的精确 turn;它不创建下一轮,也不改变已完成回复。
- interrupt(停止当前轮)
- 请求精确 active turn 停止;终态仍由 app-server(任务协议服务) 事件决定,按钮点击本身不是完成证据。
- queue revision(队列修订号)
- 每次队列变化递增的并发版本;编辑、排序和删除只能基于最新快照。
- clientUserMessageId(客户端消息稳定标识)
- 跨 HTTP 重试、turn/start 和重启对账使用的同一逻辑消息身份。
- ambiguous(发送结果不明)
- 无法证明 app-server(任务协议服务) 已接收或未接收;停止自动重试,避免重复执行。
- DPAPI outbox(Windows 加密待发箱)
- Sidecar(认证侧车服务) 用当前 Windows 用户的 DPAPI 保存未派发正文,并以原子文件承载队列状态。
专业定义
历史实现区分当前轮 steer/interrupt 与加密持久下一轮队列;当前冻结,不能发送、排队、停止、对账或恢复。
解决什么
解决当前轮与下一轮语义混淆、多端同时改队列、未落盘就显示成功、断线后重复 turn/start,以及模型设置热切换造成的不可解释结果。
当前怎样实现
- Web 根据 active turnId(轮次标识)、availableActions.steer / interrupt 和连接状态决定显示哪些当前轮动作,不补造运行时能力。
- DurableTurnOutbox 在返回成功前先保护 prompt 与附件、分配稳定 clientUserMessageId、递增 revision 并原子替换 turn-outbox.json。
- 生产运行时使用 Windows 当前用户 DPAPI;SSE 只发布不含正文的队列摘要,待发正文不写浏览器队列存储。
- enqueue、edit、reorder、remove、resume 与 steer 都保存幂等 receipt(执行回执);revision 不匹配时返回冲突,要求重新同步。
- TurnQueueDispatcher 只在权威线程为 idle 且 gate 可放行时 claim FIFO 首项,turn/start 接受后才清除受保护正文。
- 重启后用 clientUserMessageId 查询 app-server(任务协议服务) 权威任务快照;accepted、active、completed、failed、absent 与 unknown(未验证) 分别收敛,无法判定则 ambiguous。
执行流程
- 1
以下是已保留源码所定义的历史流程,用于理解曾经做成的能力,不是当前操作步骤;运行时冻结期间不执行、不探测,也不因旧测试或截图解除冻结。
- 2
读取 threadId(任务标识)、active turnId(轮次标识)、availableActions、连接状态、输入 text 与 next-turn settings。
- 3
用户选择当前轮 steer、当前轮 interrupt 或加入下一轮,界面不替用户混合三种语义。
- 4
队列路径先加密持久化正文、附件、稳定 id 和 revision,再向浏览器确认已排队。
- 5
后续编辑、排序或删除以 expectedRevision 做并发检查,并把新快照同步到已登录 Web/手机。
- 6
当前 turn 正常完成并回到 idle 后,串行 claim FIFO 首项并携带 clientUserMessageId 启动下一轮。
- 7
收到 userMessage/turn 事件后确认 accepted 与 turnId(轮次标识);失败终态暂停余项,正常终态继续下一项。
- 8
传输中断或重启时先读 authority snapshot(权威快照)对账;结果不明就停止重放并等待显式处理。
边界
- 当前控制入口不可用且冻结:不调用 Status、Open、Close、重启、登记、回滚、dispatcher(分派器)、计划任务、Sidecar(认证侧车)、Broker(共享代理)或公网端点,也不走替代启动路径。仅可只读查看获准的具名源码、文档、测试定义与历史图片;恢复须由用户另行明确启动独立项目并重新完成端到端验收。
- Web 队列只在已登录 Web/手机之间同步;真正派发前不会冒充 Desktop 原生未发送输入。
- turn/steer 返回 turnId(轮次标识) 只证明当前轮接收;项目不向 Desktop 注入伪造用户气泡。
- 模型、思考、速度、权限与审批设置只作用于下一轮,不热切换当前轮。
- 断线期间审批、停止和 steer 等实时动作失败关闭;草稿和已持久化队列可保留。
失败与恢复
- 当前入口冻结
- 当前控制入口不可用且冻结:不调用 Status、Open、Close、重启、登记、回滚、dispatcher(分派器)、计划任务、Sidecar(认证侧车)、Broker(共享代理)或公网端点,也不走替代启动路径。仅可只读查看获准的具名源码、文档、测试定义与历史图片;恢复须由用户另行明确启动独立项目并重新完成端到端验收。
- active turnId(轮次标识) 或 availableActions 与界面缓存不一致
- 不发送 steer/interrupt,重新读取同一任务快照并保留输入文字。
- queue revision 已被另一端更新
- 返回冲突并刷新完整 FIFO;不覆盖另一端的编辑、排序或删除。
- turn/start 或 turn/steer 在响应前断线
- 保留加密正文并按 clientUserMessageId 对账;仍无法判定时标记 ambiguous,停止自动重发。
- 前一轮失败或非正常结束
- 暂停后续队列并保留原因,由用户检查后显式恢复或删除。
- Sidecar(认证侧车服务) 重启时只看到未确认的 queued/dispatching 状态
- 先检查权威 thread lifecycle;没有充分证据的待发项保持暂停。
真实入口
docs/product-design.md定义当前回复、下一轮队列、Desktop 可见性和状态不明停止重试的产品语义。
docs/architecture.md定义共享 thread/turn、下一轮参数、FIFO、revision、client id 与 at-most-once 偏好。
docs/acceptance-todo.md记录 steer、interrupt、排队一次、刷新恢复与发送边界不明的历史真实验收。
apps/sidecar/src/turn-outbox.ts实现持久队列、幂等 receipt(执行回执)、revision、编辑排序删除、状态门与重启收敛。
apps/sidecar/src/prompt-protector.ts以 stdin 调用 Windows 当前用户 DPAPI 保护和还原待发正文,不把明文放进命令行参数。
apps/sidecar/src/turn-queue-dispatcher.ts实现终态后派发、steer claim、clientUserMessageId 对账与 ambiguous 停止重放。
如何验证
- 产品设计 6.2、架构 6 和验收 P0-03 对当前轮/下一轮、队列可见性和未知结果边界一致。
- turn-outbox 测试覆盖加密持久化、FIFO、幂等 enqueue、revision 冲突、编辑排序删除、steer 确认和 ambiguous 手动恢复。
- dispatcher 测试覆盖正常终态后启动下一项、失败终态暂停、响应丢失不重发和重启后按 client id 对账。
- 历史真实验收证明 steer 被模型接收、interrupt 三端收敛、未发送队列刷新后恢复;本轮没有访问运行态。
与其他模块的关系
它建立在同一任务身份之上,把用户文字准确分到当前轮或下一轮;子智能体模块只允许经父任务转交,模型审批、文件引用和实时架构分别提供设置、附件与权威事件。
