关于 validating-flow
Robomotion 技能,用于在运行或提交前按包架构检查 TypeScript 工作流。它会报告结构化错误并检查 Designer 可读性,但连线和业务逻辑仍需人工审查。
主要功能
- 01检查节点 ID、类型和属性
- 02验证端口与包依赖
- 03检查 Flow Designer 可读性
- 04按节点报告结构化错误
- 05迭代修复并重新验证
适用场景
- 01编辑后检查工作流
- 02运行前查找架构错误
- 03提交前验证工作流
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ robomotionio/ agent-skills --skill validating-flow安装后在 Claude Code 中输入/validating-flow确认已加载。
附带文件config.json
详细介绍
验证 Robomotion 流程
根据 pspec 架构构建并验证流程,包括所有子流程。
适用场景
- 使用 TypeScript SDK 编写或编辑流程后
- 运行或提交流程前
- 迭代过程中进行紧密的“验证后修复”循环
用法
robomotion validate <flow-dir> # e.g. robomotion validate write-to-clipboard
robomotion validate # defaults to main.ts in cwd
robomotion validate path/to/main.ts # also accepts a file
成功时,以退出码 0 结束,并在 stderr 输出 ✔ <folder> validated——<folder> 是存放 main.ts 的文件夹名称,而不是流程名称——且不输出任何 stdout 内容。可与其他命令无缝组合:
robomotion validate write-to-clipboard/ && robomotion run write-to-clipboard/
失败时,以退出码 1 结束,并在 stderr 输出结构化的逐节点错误。验证时不会写入 Designer 侧文件(*.designer.ts)——需要 JSON 输出或刷新 Designer 文件时,请使用 robomotion build。(与 build 类似,如果某个 subflows/<id>.ts 未被任何 SubFlow 节点引用,它也会将其删除并提示。)
检查内容
- 节点 ID 为 6 位小写十六进制字符,且不重复
- 节点类型存在于其所属包的 pspec 中
- 节点属性名称符合 pspec 架构(可捕获拼写错误、大小写错误或虚构的属性)
- 端口编号正确(连线接入没有输入端口的节点,或从节点不存在的端口连出)
f.addDependency()的命名空间和版本符合包索引- Designer 能读取文件——只导入一次
@robomotion/sdk,节点写在create回调内,不使用展开语法或辅助函数,否则会提示“Flow Designer 无法读取该文件” - 函数代码便于阅读——会检查“多条语句写在同一行”“整段代码写在同一行”以及同一代码块被粘贴到多个 Function 节点中的情况
不检查的内容
- 从触发器出发的路径是否能到达
Core.Flow.Stop。 从 robomotion 26.9.8 开始,如果流程完全没有 Stop,validate 会发出警告(warning: no Core.Flow.Stop node);但 Chat In 或 App Action 流程除外。验证仍会通过。未连接任何连线的 Stop 不会被捕获。没有可达 Stop 的流程会在机器人上一直运行(下次运行会因忙碌而被拒绝)。请自行检查连线——参见检查清单。 - 与通往
Stop的路径并行分支出的叶节点(Debug、Log)——验证会通过,但 Stop 可能会在叶节点运行前结束流程 - 循环连线模式(Goto→Label)——需手动检查
- 缺少必填属性——需手动检查
- 变量引用(
Message('varName')是否匹配上游写入)——需手动检查 - 业务逻辑是否正确
验证后修复循环
robomotion validate write-to-clipboard/ # exit 1, error report on stderr
# read the error, edit main.ts to fix, then:
robomotion validate write-to-clipboard/ # exit 0
常见错误及修复方法
| 错误片段 | 修复方法 |
|---|---|
Unknown property 'inCode' | 使用 robomotion describe node <type> 查看实际属性列表。 |
Node type X not found in pspec | 使用 robomotion get nodes <keyword> 查找正确名称。 |
Invalid output port N | 使用 robomotion describe node <type> 检查节点的输出端口数量。 |
Could not load pspec for Package | 检查命名空间拼写;使用 robomotion get packages <keyword>。 |
the Flow Designer cannot read it | 将文件写成声明形式:只导入一次 @robomotion/sdk,所有节点都放在 create 回调内,不使用展开语法。参见 creating-flow 的 docs/reference/project-format.md。 |
several statements on one line / a whole block on one line | 将 Function 的 func 中每条语句各放一行。参见 creating-flow 的 docs/reference/function-nodes.md。 |
运行前检查清单
-
robomotion validate以退出码 0 结束——这也表示 Designer 能读取该文件,且每个 Function 的格式都正确 - 从触发器出发的路径能到达
Core.Flow.Stop(没有任何 Stop 时,validate 只会发出警告;连线需自行检查):沿着连线从触发器开始检查;每条路径都以 Stop 结束,且Debug/Log叶节点必须从最后一步之前的节点分支出来,不能与 Stop 并列。完全没有 Stop 只适用于两种流程:应用后端(Robomotion.Apps.Action,每条路径都以App Respond结束)和聊天流程(Robomotion.ChatAssistant.ChatIn,每轮对话都以Chat Out结束) - 循环有 Goto→Label 连线(手动检查)
- 已设置必填属性(手动检查)
- 多输出节点的端口编号正确
相关技能
creating-flow— 生成工作流running-flow— 验证后执行searching-packages— 查找正确的节点类型 / 软件包
评论
支持 Markdown