OpenProgram Docs

活动与控制

Activity 在首次加载、重连或游标重新同步期间不显示错误提示。只有当前会话已经确认的请求失败才显示错误;切换会话不会显示上一会话的错误。真实读取失败时保留已取得的记录并自动重试。

这里说明三件事:统计什么、什么时候需要你处理、暂停或停止后会发生什么。

Activity 按会话分支统计。在同一分支继续发消息,不会多出一条 History。

恢复时只处理仍对应当前执行检查点的已结束等待。旧问题的答案不能恢复、取消或结束后续的新等待;重复恢复不会重复执行。回归覆盖第一个等待已回答、第二个等待未回答或已回答两种情况。本恢复修正已通过规格与质量审查,受控测试覆盖连续等待及重复启动恢复。

恢复同一轮运行

恢复 Agent 时重新绑定原会话、轮次、回复、运行环境和工具配置,并在完成、暂停或错误时释放绑定。浏览器页面凭据仍属于原来的调用方,不接受其他调用方的凭据。浏览器拒绝作为明确的工具错误返回,保留原原因。达到配置的迭代上限时记录为未成功完成,保留此前文字和操作记录。

只有权威执行更新确认消息属于当前会话和当前执行时,才在该助手消息旁显示等待审批;审批操作仍在原输入区域进行。重连或恢复待回答问题时请求现有执行快照,依据快照中的消息归属恢复状态,并兼容旧事件格式。缺少归属证据时,不将其他运行的审批显示在该消息上。

验收覆盖暂停后恢复、使用新取得的页面凭据观察原页面、异常时释放绑定、拒绝其他调用方凭据、迭代上限,以及审批在消息和会话之间的隔离。实现状态:规格与质量审查通过。受控回归验证恢复后的页面凭据归属、明确的浏览器错误、绑定释放、迭代耗尽时的失败状态,以及审批提示的消息归属。默认 App 实机验收作为独立发布检查。

重启恢复期限

关闭视图不停止后台任务。worker 关闭时先停止调度并请求协作暂停;新实例按持久化的中断时刻计算恢复期限,execution.auto_resume_window_seconds 默认 -1(不限时间),0 时禁用,正整数设置显式期限;无限期限保存为 null,升级前已保存的有限期限保持不变。普通可恢复 Agent 在模型和工具完成处保存 checkpoint;无未确认效果的失去所有权任务恢复为暂停,通过原有 continue 命令继续。过期、用户暂停、取消、审批等待及不兼容契约保持可核对状态。期限和恢复命令身份保存在 canonical execution events 中,不另设数据库或调度器。

恢复时保存新 attempt 使用的 checkpoint 身份;在新效果产生前再次中断仍可使用该 checkpoint。关闭请求遇到 checkpoint 版本竞争时,仅对同一 attempt 最多尝试三次,保留原期限。Job 在准入时保存自身稳定的用户消息与回复 ID,恢复继续校验同一消息关系。暂停释放资源时,使用 Job waiter 保存的 attempt 和资源租约身份,不从已清除的 execution ownership 中读取。

启动时先核对失去所有权的任务,由初始化后的 runner 统一执行有期限的恢复策略。仅模型请求中断或尚未激活的会话可从不可变输入继续,期限从原活动时刻计算。未知外部工具结果保持待核对状态,不虚构未执行回执。没有重启意图的旧暂停记录需要手动继续。

自更新后的任务继续使用同一时限设置,从已结束更新的最后持久化活动时刻计算。固定期限和过期状态保存在现有更新目录中,继续执行、契约变化后的重新规划和原会话唤醒均受此约束。仍在持续执行的更新不会仅因超过恢复时限而停止。

1. 先分清三个对象

对象含义显示在哪里
会话分支一条连续的对话路径。真正分叉时,才产生另一条路径。Activity 中的一项。
一次执行一次任务运行,例如回答一条消息。放在分支详情中。暂停、继续、取消等操作用它的 ID 确定目标。
受管理的进程工具启动的一条命令,例如运行脚本。归属于启动它的那次执行,可单独查看输出或停止。

2. 分支怎样计数

例子计数详情
发一条消息,再说“继续”。1两次执行仍属于同一个分支。
从前面的某个位置创建另一条回复。2原分支和新分支各显示一项。
同一分支后面的一次执行失败。1失败保留在详情中,不会因此创建分支。
两个分支有相同的早期消息。2共同的早期执行可出现在两边的详情中,但不会额外计数。

History 统计已结束的分支。需要处理或仍在运行的分支,显示在对应区域。

3. 应该显示什么状态?

情况所在区域含义
等待审批、回答、暂停处理,或工具结果尚未查明。Needs attention打开详情查看实际请求。发新消息不会自动撤销它。
执行、子任务或所属进程仍在运行。In progressAgent 回答完了,不代表后台进程也停止了。
分支已结束,没有运行中的工作或待处理请求。History失败记录和输出仍可在详情中查看。
执行者已结束,只缺模型响应记录;也没有实际等待或待处理的非取消操作。History显示“已结束 · 响应记录不完整”。遗留的取消请求不会使它变成待确认事项。只有子任务仍在运行时才保留 Cancel。这不表示任务成功。

分支的一般状态取最新一次执行,同时检查真实等待、子任务和所属进程。无法关联的记录会单独保留,不猜测它属于哪个分支。

4. 每个操作会做什么?

操作结果限制
Pause请求在下一个安全位置暂停。当前动作可能先完成,不是停在任意一行代码上。
Continue从已保存的进度继续同一次执行。必须有有效的保存状态,且该执行支持继续。
Step执行一个已定义的步骤,再次暂停。步骤可以是一次工具动作,不等于一行代码。
Steer补充后续工作要遵守的指令。不改写已经完成的工作。
Cancel结束选中的执行及其下属执行。不能撤销已经完成的外部操作。受管理的进程另有独立控制。
Fork / Retry从允许的保存位置创建独立的后续执行。原历史保留。聊天 Agent 的新执行先暂停,需点击 Continue;其他类型遵循各自调度规则。

界面只提供该执行支持的操作。“已接收”表示请求已保存;“已生效”才表示操作完成。

5. 重启后保留什么?

记录简单解释作用
检查点在规定位置保存的执行进度。继续时从这里开始,不恢复被冻结的线程。
操作结果记录模型或工具请求是否结束,以及已确认的结果。不盲目重复已确认的操作;外部动作结果不明时先核对。
本次运行的所有权当前哪个 worker 有权更新这次执行。旧 worker 不能覆盖接替它的新 worker 的状态。

命令完成与终态同步并发时保持幂等:比较并交换发生冲突后,服务只接受属于同一执行、结果版本相同且已应用的命令,保留持久化回执,继续报告其他冲突。验收通过公开取消入口的观察器确定性插入终态同步,并确认拒绝或版本不匹配的结果仍然报错。

工程参考:标识和安全规则
标识用途
session_id确定会话范围和访问权限,不能直接作为执行控制目标。
run_id关联原执行及其分叉、重试执行。
execution_id精确控制目标。暂停、继续保留它;分叉或重试创建新 ID。
attempt_idworker 的一次实际运行;恢复时可创建新的 attempt。
revision_id程序及其运行规则的不可变版本。
command_id + expected_version防止重复操作,并拒绝基于旧状态发出的命令。
  • 各入口使用同一个命令服务。先保存请求,再由执行者处理;界面状态不能代替权限检查。
  • 取消优先于暂停、单步、继续和补充指令。只有当前执行者可提交进度或最终状态。
  • 已返回的模型错误和中止会登记响应。工具结果未知时仍需核对,History 标签不会清除它。
  • 分叉前验证保存位置、程序版本和权限。修改程序、模型或工具规则,仍需独立审批。
  • Agent 和后台 Job 使用同一套执行管理。Job 的 job_id 等于 execution_id。资源分配与执行状态分开管理。
  • 分支归属取自已有会话图和消息 ID。压缩上下文后仍保留早期关联;加载项目会话时读取最新保存位置。
  • 读取和控制限制在有权访问的会话内。重连使用已保存的版本和事件位置,不重复创建任务。
  • 受管理进程保留 ID、归属和有上限的输出。重启后检查监督进程,不能只凭保存的 PID 发送终止信号。

6. 实现与验证

部分已有实现怎样验收
分支统计按真实会话分支显示,每次执行保留在详情中。连续会话 → History 1;确有三个分支的会话 → History 3。
待处理状态区分单纯缺模型记录、真实等待和工具结果不明。真实审批仍显示;已结束的模型请求不会单独要求确认。
执行控制已有统一命令、检查点和版本控制;不同执行支持的能力不同。只验证该执行声明支持的操作;强制工具、spawn 和 merge 路径仍有限制。
进程与恢复默认 macOS App 已验收进程归属、独立停止、输出保留和刷新。这些验收不能证明 Windows 或 Linux 的实际运行结果。

限制:不恢复任意线程栈,不自动撤销操作,也不补造从未保存的进程记录。普通函数内部提问仍需预先声明交互边界;等待的最长时间和 Job 的运行预算,尚未统一接入资源管理。

参考与相关设计
参考采用的思路
调试适配器协议把查看和控制分开,明确支持哪些操作。
Temporal 工作流执行持久保存执行状态。
Temporal 工作流暂停暂停不会撤销已经开始的工作。
LangGraph 持久化在检查点保存进度。
LangGraph 中断在规定位置等待输入,再恢复。
LangGraph 历史状态回溯创建其他执行方案时保留原历史。
Kubernetes Pod 生命周期先请求终止,再确认执行者退出。

运行中会话自动继续

正常执行时在已有记录中保存每次模型决策、工具结果和下一步位置,不增加退出前保存流程。启动后使用原执行、会话和回复身份继续之前运行中的 Agent;手动暂停、取消和已完成任务不自动运行。已完成工具不重复执行,结果不确定的外部操作先核对。首个模型响应尚未完成时使用已有输入继续。

界面重连保留已有聊天内容,后台退出不写入错误回复,不增加重启或恢复 loading。真实错误保持原有显示。验收使用隔离数据库和受控执行入口,不重启正在使用的 App 复现问题。

实现状态:已实现,规格与质量审查均通过。受控验证覆盖重复启动、原回复身份、完整模型上下文、已完成工具操作与独立会话控制;完整非浏览器、非外部服务 Python 测试及 Web、Desktop、文档和静态检查均通过。

函数版本与断点继续

先由用户设置代码变化时继续原版本或切换最新版本,全局默认继续原版本,单个执行可覆盖。判断当前函数及相关依赖是否改变,不以仓库其他文件变化代替。策略调整通过带版本校验的执行命令保存。

手动调用和聊天中的函数调用共用恢复机制,但保留不同结果去向:前者更新原函数记录,后者将结果返回原工具调用位置,再继续聊天。函数与外层聊天分别保存代码版本和恢复身份;结果已保存但未交付时,只补交结果。

持久化保存原代码及依赖身份、输入、已完成步骤与结果、下一安全位置、中间状态及未确认操作。原版本必须实际可加载。切换新版本时保留旧结果来源,核对步骤对应关系及状态兼容性;需要转换时显式处理,无法兼容时暂停。原代码缺失、依赖不可用、状态不可序列化或执行边界不受支持时,不能擅自从头运行。

已完成操作不重复执行;正在执行且结果未知的步骤先核对。嵌套调用保留父子关系,并行分支分别保存进度,重复恢复和再次中断不得重复已接受的操作。两小时自动恢复期限、用户取消、手动暂停、审批、权限和资源准入继续生效。选择新版本后不兼容时,不自动改回旧版本。

持久化步骤检查边界后、注册操作或准入派发前收到暂停时,通过既有待应用 Pause 命令挂起函数。只有真实暂停命令仍待应用,才能将 admission_closed 冲突转换为挂起;其他冲突、失效执行者和终态准入失败保留原错误。同一执行者已登记但从未派发的 planned intent,在发布暂停前保存 not_started 回执。取消优先。成功派发的操作不能标记为未开始;已完成结果保留,未知结果仍须核对。显式 Continue 保留函数调用位置并复用已提交步骤。此边界处理不自动继续用户暂停的执行。

实现使用同步 step、嵌套 workflow 和命名 parallel 边界,从已保存结果重建局部 JSON 状态。执行事件、状态对象、检查点和外部操作记录共同保存进度,不另建调度器或数据库。Continue 命令保存版本策略;新版本通过已有进度检查并执行剩余工作后,成为后续重启所保留的版本。Python 辅助函数源码递归保存;辅助函数内部导入及非标准库模块、类对象依赖会在外部步骤前被拒绝。原生调用栈、异步编排和活动句柄不属于该恢复约定。

实现状态

验收要求包括独立规格与质量审查、手动与聊天恢复的受控检查,以及完整发布检查。该约定仅适用于显式声明的同步可恢复函数;现有 Agent 重启恢复不等同于任意 Python 函数已支持这些能力。

Workflow 提问

运行中的 Python Workflow 在原进程中等待回答。执行器绑定精确 execution、attempt、generation 和进程实例,使用现有问题存储与问题卡片,不保存 Workflow 检查点。回答后原调用继续,刷新浏览器后可重新显示待答问题。

只有有效运行中的执行者可以创建与接收回答。取消、进程退出或执行者失效会取消问题;重启 worker 不重放 Workflow。预声明 Agent 问题保留原有持久化恢复行为。意外的提问错误必须传播,不能变成用户未回答。

验收包含实际显示问题、回答后原调用继续、刷新、归属隔离、重复回答和取消。

对话输出中的用户决定

待处理用户确认在所属会话输入框上方显示;题号、选项行与 Back/Next/Submit 流程依照用户提供的 Claude 截图。切题、折叠保留草稿且不发送命令,最后提交沿用现有命令确认语义;Skip 拒绝整组问题。终态回执留在对话中,批准范围、讨论、会话归属、普通草稿和焦点沿用现有规则。

提问、确认、表单和权限批准作为当前会话中的独立输出卡片显示。每张卡片拥有自己的回答字段、提交按钮和送达状态。普通输入框保留草稿、附件、函数表单、焦点及正常发送或排队语义。新问题不占用输入框,不转移焦点。

点击提交后立即显示实际提交的回答与提交中状态。命令确认成功后显示回答回执;送达未知时保留同一命令及答案供重试。拒绝或过期不能显示为批准。并发问题按标识分别显示,并绑定原会话与执行,分屏同样适用。现有批准范围和讨论行为保持一致。

复用问题事件与执行命令。会话内回执不是 Workflow 检查点;刷新恢复待回答问题,本次不新增历史回执持久化。回答后原进程继续,不新增执行栈保存或重启续跑。验收覆盖输入框隔离、即时反馈、首次回答成功、未确认重试不重复执行以及原生界面。

实现状态

输出卡片复用问题渲染器与规范命令回执。验证范围包括输入框隔离、回答反馈、会话归属、重试标识与原生验收。

Last updated · 2026-10-10