OpenProgram / Web / 对话输入

队列与当前轮次引导

运行中输入的每条消息在发送时决定去处。回车和发送按钮是 steer:在支持的安全点向指定的当前执行添加文本。Cmd/Ctrl+回车是排队:对话在前一轮结束后把它作为一条后续消息发送。这两种队列操作都不会取消当前执行;取消由独立的停止控件负责。

参考与兼容性

Codex 提示 区分排队的后续消息与当前轮次输入。 Codex App Server 把 steering 绑定到预期的当前轮次,且不接受运行设置覆盖。OpenProgram 使用既有执行命令服务和安全点,不增加第二套 session 收件箱或 provider 专属 steering 传输。

投递

排队文本 → 执行身份与当前版本 → 持久化 execution.steer 命令 → 下一个安全点 → 持久化 steering 用户消息

队列保留条目,直到匹配的 applied 回执确认用户消息已持久化。accepted 或 applying 命令使用同一命令信封自动检查。命令只携带消息、精确执行身份、版本和幂等键,不改变权限、模型、工具或当前程序。不支持或已结束的执行让条目继续排队;空闲时的协调按 FIFO 顺序发送普通后续消息。

发送前,客户端保留不可变命令信封。确认丢失时,投递状态保持未确认:条目仍可见,普通队列处理不能再次发送,自动确认重试复用同一信封。每个排队条目使用一个确认计时器,从 1.5 秒开始,传输失败后退避到最多 30 秒。确定回执清除重试状态;不确定投递不能转为普通重复发送。确认的旧版本拒绝允许依据新快照创建新信封。错误可见;传输失败后总会释放 injected 标志。

归属与界面

当前 session 及其运行执行决定目标,不得临时选择其他 session 或关联子 Agent。不再有常驻的排队或注入偏好,发送时按的键决定去处。排队消息显示为贴在输入框上方的一张浮起卡片。标题统计条数和其中正在插入当前轮的条数,并可折叠卡片。每行一行:标签(steer 在途时为“插入当前轮”,等待时为“下一轮”,失败后为“未发送”或“待确认”)、正文第一行,以及悬停或键盘聚焦时出现的操作。操作包括不取消执行的“插入当前轮”、重试、编辑,以及投递并非不确定时的移除。点击正文展开完整消息和附件。“全部清除”一次写入移除所有行,正在投递或编辑的行除外,因此清除不会把将被移除的行发送出去。附件保留既有草稿行为;steering 在规范命令大小限制内接受文本。

普通后续消息准入先从持久 session head 确定 predecessor,再更新服务端对话镜像。它包含前一条助手回复、工具结果和已投递 steering 输入;显式分支 predecessor 保持不变。

被取消或中断的助手轮次保留部分内容并显示终态,包括空回复。取消提示不推断取消由谁发起。

存储边界

队列条目仍只存在于当前 renderer。待定 steering 条目在确定确认解析命令前不能作为普通消息发送。规范的接受操作把命令持久化到服务端;应用命令时持久化用户消息。执行结束后,未投递 steering 命令被拒绝,对应条目可恢复普通排队。已完成的工具批次不会仅因 steering 消息到达而被跳过。本次改动不使用新消息代理替换普通聊天传输。

验收

实现状态

实现使用规范执行命令和不取消执行的队列控件。Agent 命令应用通过当前回复分支中已持久化的用户输入确认;仅安全点准入仍处于 applying。owner 过期不能授权迟到输入写入。执行关闭会处理未投递命令,即使执行正等待 effect 协调。验收使用默认 App 与真实请求处理;静态检查不能替代运行验收。

steering 确认丢失后的自动恢复及助手终态提示正在实现与验证。既有队列归属和命令幂等性不变。

函数重试确认

每次重试携带请求身份,分发确认或拒绝时回传。接受计时器在分发被接受时结束,而不是等函数执行完成。拒绝或断线发送只恢复对应待处理卡片,并报告一次真实原因。缺少确认保持不确定,不自动重新提交。历史和界面验证仍具权威性。

Steer 生命周期审查约束

补充消息绑定用户请求时选中的执行。版本冲突只允许更新该执行的版本,不能选择替代执行。Stop 保留尚未完成接收的补充消息;未确认命令保持原始内容和身份,禁止作为普通消息重复发送。

仅将文本 steer 命令及停止、目标结束后保留的草稿保存到当前窗口的 session storage。刷新后恢复原命令,待会话状态加载后继续确认,不发送普通对话。普通未发送队列和附件仍仅存在于内存。浏览器禁止存储时尽力保留当前内存状态;服务端命令记录仍是权威来源。

验收覆盖查询和版本重试期间停止、目标执行替换、确认丢失与刷新、多条补充消息、文本与思考生成、无输出等待、工具、暂停与继续、取消及历史恢复、附件与长度限制、跨会话授权。

生命周期修复通过独立规格及质量复核。合并版本的完整验证包括 3,279 项 Python 测试通过、2 项既有跳过、964 项 Web 测试通过、8 项浏览器测试通过;静态检查、TypeScript 和文档链接均通过。精确实现版本和安装 App 的验收分别记录在本地发布记录中。

审查覆盖范围

验收矩阵覆盖输入准备、执行身份、重复与未确认命令、接收前停止、刷新恢复、流式文本与思考、工具与暂停、命令持久化及历史恢复。具体测试文件和对应行为见英文版的同一矩阵。