Skip to content

跨页面与标签页的任务连续性 ​

单页应用切换路由时,对话运行时通常还在内存中。整页导航不同:旧 document 的注册表、DOM 观察器、待处理工具调用和内存历史全部消失。连续性的作用,是把一个有界任务检查点交给下一页,而不是假装旧页面还存在。

传递什么 ​

检查点包含最初目标、有限的页面描述、近期消息与事件、摘要、任务状态,以及任务开始时的页面。它不包含 DOM 节点、元素句柄、截图、Cookie、访问令牌或未脱敏敏感值。新 document 必须重新声明自己的区域、记录、状态与能力。

这条区别是核心安全规则:恢复的模型得到上下文,不得到权限。上一页存在的动作,不会仅因 id 出现在对话里就再次可调用。当前页面必须重新暴露它,当前执行器必须确认它此刻可用。

三种范围 ​

连续性配置有三种实际范围。

范围共享单位适用场景
tab同一标签页、同一 origin经典 MPA 整页导航
browser同一 origin 内显式租用的跨标签页任务用户在多个标签页间移动并选择任务
remote宿主提供的权威协调器服务端所有权与跨设备协作

tab 是默认值,使用有界存储检查点。browser 增加共享权威,使一个任务同时只有一个标签页拥有执行权;跟随者可以观察,但不能自动执行。接管或分叉必须由用户显式发起。remote 要求宿主提供权威,框架不会凭空创建数据库或身份服务。

恢复策略 ​

resume 决定新 document 的行为:

  • ask 显示继续入口,等待用户;
  • auto 在新页面就绪后发送一条受控继续消息;
  • off 恢复上下文,但不启动任务。

自动续跑仍经过模型循环、当前页面观察、可用性检查和确认。它省掉的是重复说明,不是权限。如果旧 document 在工具执行期间消失,恢复后的历史会收到一条合成结果,说明页面在动作执行中导航、结果未知。重新观察比猜测成功并重试潜在副作用更安全。

跨标签页所有权 ​

跨标签页任务需要租约,而不只是 local storage 里的一段共享字符串。只有 owner 可以运行循环、写检查点或结束任务。Owner 仍存活时,跟随者不能静默接管。租约过期由宿主提供的权威处理,界面应清楚区分 owner、follower、租约丢失、任务完成与访问撤销。

不要把连续性存储当成审批队列。审批属于活跃会话和具体请求;把它跨导航持久化,可能让后续在不同上下文中发起的调用获得授权。审批、委托凭证与敏感值都不应进入检查点。

业务数据独立保存 ​

任务连续性不是应用持久化。业务记录仍属于应用自己的存储。检查点可以说“用户想修改备注”,但不能成为备注真值的来源。恢复后,页面读取当前业务状态,模型重新确认实际存在什么。

使用与应用、会话相匹配的存储 key。多个助手写同一个 key 会互相覆盖。测试时至少覆盖三种情况:未启用连续性、正常恢复、检查点过期。版本或页面身份无法验证时,应 fail-closed,并让用户回到干净状态。

连续性检查 ​

  • 每个 document 是否都重新创建注册表与执行器?
  • 恢复状态是否排除凭证、审批与敏感值?
  • 跟随者能否观察但不执行?
  • 接管是否显式且原子?
  • 中断的工具调用是否产生“结果未知”,而不是猜成成功?
  • 运维能否在不改业务数据库的情况下清除或过期检查点?

实现示例见 MPA 与任务连续性,API 边界见 连续性与投影。