| 名称 | nemo-relay-migrate-from-flow |
| 描述 | 当用户需要将现有的 NeMo Flow 应用、示例、集成、文档、清单或仓库代码迁移到 NeMo Relay,并涉及 Python、Rust、Node.js、Go、C FFI、CLI、配置和可观测性层面时,使用本技能。 |
| 开源协议 | Apache-2.0 metadata: |
| 作者 | NVIDIA Corporation and Affiliates |
从 NeMo Flow 迁移到 NeMo Relay
当用户已有 NeMo Flow 代码或文档并希望转换为 NeMo Relay 时,使用此技能。将迁移视为机械性重命名加语言特定验证,而不是行为重写。在进行广泛重命名之前,先明确兼容性例外。
默认工作流程
- 检查工作树并确定所涉及的层面:Rust、Python、Node.js、Go、C FFI、CLI/配置、文档或集成。
- 将 SKILL_DIR 解析为包含此 SKILL.md 的绝对目录,将 TARGET_PATH 解析为源仓库或目标项目。在编辑之前,以 dry-run 模式运行捆绑的辅助脚本:
python3 "$SKILL_DIR/scripts/migrate_from_nemo_flow.py" "$TARGET_PATH" --rename-paths - 与用户一起审查报告的文本编辑、路径重命名和旧项目配置警告。不要将项目本地的
.nemo-flow/config.toml或.nemo-flow/plugins.toml迁移到.nemo-relay。审查后,手动将这些设置移动到受支持的用户或显式配置路径。 - 在获得用户对已解析目标根目录的明确确认后,使用
--write、--rename-paths和--confirm-root "$TARGET_PATH"参数重新运行。 - 对包管理器锁文件、生成工件和公共 API 示例执行特定语言清理。
- 搜索剩余的 Flow 名称并验证受影响的语言层面。
机械重命名映射
- 品牌与仓库:
NeMo Flow->NeMo Relay,NeMo-Flow->NeMo-Relay - Python:
nemo-flow->nemo-relay,nemo_flow->nemo_relay,python/nemo_flow->python/nemo_relay - Rust:
nemo-flow->nemo-relay,nemo-flow-adaptive->nemo-relay-adaptive,nemo_flow::->nemo_relay:: - Node.js:
nemo-flow-node->nemo-relay-node,包括相关入口点,如/typed、/plugin、/adaptive和/observability - Go:
github.com/NVIDIA/NeMo-Flow/go/nemo_flow->github.com/NVIDIA/NeMo-Relay/go/nemo_relay,包别名nemo_flow->nemo_relay,源目录go/nemo_flow->go/nemo_relay - C FFI:
nemo_flow.h->nemo_relay.h,nemo_flow_*->nemo_relay_*,NemoFlow*->NemoRelay*,NEMO_FLOW_*->NEMO_RELAY_* - CLI/配置:
nemo-flow->nemo-relay,~/.config/nemo-flow->~/.config/nemo-relay,NEMO_FLOW_*->NEMO_RELAY_*,x-nemo-flow-*->x-nemo-relay-*。不要盲目地将项目本地的.nemo-flow/config.toml或.nemo-flow/plugins.toml重命名为.nemo-relay;这些文件需要手动迁移到受支持的用户或显式配置路径。
不要替换单独的 flow、Flow 或 FlowError。这些可能是领域词汇或故意的兼容性名称。
语言清理
- Python:更新
pyproject.toml、导入、类型桩、集成包路径、额外依赖和原生模块名称。在源代码编辑后,使用用户的包工作流重新生成或刷新锁文件。 - Rust:更新
Cargo.toml中的 crate 名称、工作区依赖、包引用以及use nemo_relay::...导入。当依赖变化时,让 Cargo 重新生成Cargo.lock。 - Node.js:更新
package.json、工作区名称、package-lock 条目、原生插件工件名称以及从nemo-relay-node的导入。运行包管理器刷新锁文件。 - Go:更新
go.mod、导入路径、包声明、别名以及go/nemo_relay下的本地目录布局。 - C FFI:更新头文件包含、导出符号名称、状态和回调类型名称、宏常量、加载器路径以及下游绑定。
- 文档和示例:更新徽章、包安装命令、仓库链接、托管文档 URL、CLI 命令、配置路径和集成名称。
自动化辅助
使用 $SKILL_DIR/scripts/migrate_from_nemo_flow.py 进行第一轮编辑。该辅助程序:
- 除非传入
--write,否则以 dry-run 模式运行 - 跳过常见的 vendor、构建、缓存和生成目录
- 除非传入
--include-lockfiles,否则跳过锁文件 - 跳过符号链接和包含凭证的 dotenv 文件
- 检测项目本地的
.nemo-flow/config.toml和.nemo-flow/plugins.toml,将其保持不变,并报告它们需要手动迁移到受支持的用户或显式配置路径 - 在写入前要求已审查的目标根目录与
--confirm-root重复,且拒绝写入文件系统根目录或主目录 - 将写入和重命名锚定到经验证的目录句柄,不跟随符号链接,并拒绝在无法提供这些保证的平台上使用写入模式
- 使用原子式无替换路径重命名,并在任何请求的变更失败时以非零状态退出
- 可以使用
--rename-paths报告或执行路径重命名 - 仅重写显式的 NeMo Flow 标识符、包名、仓库名、配置路径、头文件、环境变量和 FFI 类型前缀
该辅助程序不会把任意 JSON、YAML、TOML 或 INI 文件分类为秘密。请审查 dry-run 报告中的每个配置文件。如果任何报告的文件未经审查或包含凭证,请勿在该根目录使用 --write。手动应用已审查的更改,并保持含秘密的文件不变,不要读取或显示其值。
在调用辅助程序之前设置 shell 安全的绝对路径。将示例值替换为已解析的技能目录以及源仓库或用户的目标项目:
SKILL_DIR="/resolved/absolute/path/to/nemo-relay-migrate-from-flow"
TARGET_PATH="/resolved/absolute/path/to/target-project"
python3 "$SKILL_DIR/scripts/migrate_from_nemo_flow.py" "$TARGET_PATH" --rename-paths
python3 "$SKILL_DIR/scripts/migrate_from_nemo_flow.py" "$TARGET_PATH" \
--write --rename-paths --confirm-root "$TARGET_PATH"
仅当用户希望直接编辑锁文件时,才使用 --include-lockfiles;否则请使用 Cargo、uv/pip、npm 或 Go 工具重新生成它们。
验证
- 搜索剩余的显式 Flow 标识符:
rg -n "NeMo Flow|NeMo-Flow|nemo_flow|nemo-flow|NEMO_FLOW|NemoFlow|nemo_flow\\.h|nemo_flow_" - 为每个受影响的语言层面运行针对性测试。
- 对于 Rust 更改,运行
cargo test或仓库的 Rust 测试配方。 - 对于 Python 更改,在目标环境中运行相关导入检查和测试。
- 对于 Node.js 更改,运行包安装、类型检查和包测试。
- 对于 Go 更改,从更新后的模块运行
go test ./...。 - 对于仅文档迁移,如果站点导航、安装命令或 API 引用发生更改,请构建或检查文档链接。
相关技能
nemo-relay-get-startednemo-relay-instrument-callsnemo-relay-debug-runtime-integration