Skip to content

找不到动作 ​

ACTION_NOT_FOUND 表示执行器在当前页面注册表中没有找到这个 id。它通常不是模型“不聪明”,而是声明、快照或命名发生了变化。

常见原因 ​

原因表现修复
动态 id 拼错行主键或分隔符不一致统一由同一个函数生成 id,并测试
动作在未挂载区域弹窗关闭后仍调用关闭时移除注册,调用前重新描述
页面已导航旧快照里的 id 在新页面不存在导航后重新 describe
命名空间冲突两个组件用了相同前缀使用唯一作用域或命名空间
构建缓存页面旧 bundle 没有新动作清理缓存并核对构建版本
只读快照过期记录或区域变化后仍用旧 id限定快照生命周期,变化后刷新

排查顺序 ​

  1. 从当前调试快照复制 id,不要从聊天历史复制。
  2. 查看该动作是否出现在工具列表中;不存在则检查声明位置与 v-if / 条件渲染。
  3. 检查折叠动作的目标记录是否仍在当前可引用集合中。
  4. 检查路由与模态框状态。
  5. 检查是否启用了 namespace,调用方是否遗漏前缀。
  6. 用页面内助手执行同一动作;若也失败,问题在页面声明。

动态 id ​

推荐:

ts
const toggleId = (taskId: string) => `toggle@${taskId}`;

避免在不同位置分别写 `toggle-${id}`、`toggle@${id}`。id 是协议契约,不是展示文本。

如果 id 依赖列表位置(row-1),排序或筛选后就会指向另一条记录。应使用稳定业务主键。

快照与导航 ​

动作存在不等于永远可用。导航后,旧页面的 registry 可能已经销毁,新页面还没有挂载。外部客户端应在页面身份变化后重新 describe,不能继续使用旧能力。

SPA、MPA、iframe 与 Shadow DOM 的边界见 连续性与投影参考。

减少复发 ​

  • 为每类动作写唯一 id 生成函数;
  • 在测试中断言 id 与记录 id 的对应关系;
  • 导航和关闭弹窗后断言旧 id 不可调用;
  • 构建后在调试面板确认工具清单;
  • 不要把“动作不存在”解释成权限拒绝;两者恢复策略不同。

相关 ​

共享概念:页面能力模型、错误码与诊断。