导航后任务丢失
整页导航会销毁旧 document 的运行时、注册表和元素引用。SPA 路由通常只替换组件,因此两类问题不能按同一方法修。
先判断导航类型
| 类型 | 现象 | 关键点 |
|---|---|---|
| SPA 路由 | 页面未刷新,但工具或区域消失 | 组件卸载、路由守卫、keep-alive |
| MPA 整页导航 | 对话历史与待处理请求消失 | 连续性检查点 |
| iframe 导航 | 父页面仍存在,子运行时重建 | 显式共享与作用域 |
| 多标签页 | 任务在另一标签页继续 | owner 租约与显式接管 |
SPA
- 检查动作是否声明在已卸载组件中。
- 检查路由切换后是否重新
describe。 - 检查
keep-alive是否留下旧注册。 - 检查每个路由是否使用唯一动作 id 或 namespace。
- 检查成功判据是否在导航前等待、导航后失效。
导航后应重新获取页面身份和能力。不要把旧路由的动作带进新路由。
MPA
MPA 不保留 DOM 引用,也不能恢复“已批准”状态。连续性检查点只应包含任务目标、摘要、近期事件和页面身份,不包含 Cookie、token、审批或敏感原文。
恢复策略:
ask:用户看到“继续上次任务”入口;auto:新页面就绪后发送受控继续消息;off:只恢复历史,不自动启动。
无论哪种策略,当前页面都必须重新声明能力。上一页存在的动作不会自动获得权限。
中断的执行
如果工具调用期间发生整页导航,结果可能未知。历史应出现合成结果,明确“页面在动作执行中导航,业务结果未确认”。随后先读取业务状态,不要猜测成功并重试写入。
跨标签页
跨标签页需要租约:同一时刻只有一个 owner 可以执行。跟随者可以查看,但不能静默接管。接管或分叉应由用户明确触发。存储中的共享字符串不足以构成所有权。
验收标准
- 导航后旧能力不可调用。
- 新页面重新描述后能力正确出现。
- 检查点不含凭证、审批或完整敏感值。
- 恢复不会重复提交中断的写入。
- owner 丢失、租约过期和任务完成的界面状态可区分。
- 多标签页不会同时写入同一任务。

