已合并
fix(ops-direct-invoke): 对齐 DSL Skill 正式目录引用 #135
xutianze创建于 14 天前
fix(ops-direct-invoke): 对齐 DSL Skill 正式目录引用 #135
已合并
共 5 个文件变更+18-11
| @@ -2,10 +2,15 @@ | |||
| 2 | 2 | ||
| 3 | ## 新特性 | 3 | ## 新特性 |
| 4 | 4 | ||
| 5 | +### 【2026-10-13】 | ||
| 6 | + | ||
| 7 | +- 对齐 [cannbot-skills PR1360](https://gitcode.com/cann/cannbot-skills/merge_requests/1360):六个 `cannbot-dsl-*` Skill 从公共仓的 `ops/` 安装,名称与工作流入口不变;`ops-design-paradigms` 已由 [PR1359](https://gitcode.com/cann/cannbot-skills/merge_requests/1359) 迁入同一正式目录。 | ||
| 8 | +- 方案设计节点显式向设计 Skill 提供规格文件路径、调用与导出契约及范式资料。所选 skills 版本需包含上述迁移;统一 init 默认自动更新,指定 SHA 或本地 skills 仓时由调用方选择兼容版本。 | ||
| 9 | + | ||
| 5 | ### 【2026-09-30】 | 10 | ### 【2026-09-30】 |
| 6 | 11 | ||
| 7 | - 新增 **CANNBot-DSL 算子开发支持**:按开发语言选择 DSL 工作流,支持设计、动态实现子图生成、开发与验收。 | 12 | - 新增 **CANNBot-DSL 算子开发支持**:按开发语言选择 DSL 工作流,支持设计、动态实现子图生成、开发与验收。 |
| 8 | -- DSL 的环境节点检查环境后生成对应 wheel 的 API 参考;性能优化完成后再生成最终版本的文档。 | 13 | +- DSL 的环境节点记录环境证据,并使用本轮 `cannbot-dsl/docs` 作为 API 参考;性能优化完成后再生成最终版本的文档。 |
| 9 | - 提供 `ops-direct-invoke-maintain`,按模块记录工作流设计与维护约定。 | 14 | - 提供 `ops-direct-invoke-maintain`,按模块记录工作流设计与维护约定。 |
| 10 | - 回归测试随维护 Skill 分发,修改工作流后运行完整测试;检查自身脚本和 harness 调用衔接,不重复验证框架内部调度。 | 15 | - 回归测试随维护 Skill 分发,修改工作流后运行完整测试;检查自身脚本和 harness 调用衔接,不重复验证框架内部调度。 |
| 11 | - 安装与使用统一见 [QUICKSTART.md](QUICKSTART.md)。 | 16 | - 安装与使用统一见 [QUICKSTART.md](QUICKSTART.md)。 |
| @@ -21,12 +21,12 @@ | |||
| 21 | "vendor/cannbot-skills/ops/ascendc-ut-develop", | 21 | "vendor/cannbot-skills/ops/ascendc-ut-develop", |
| 22 | "vendor/cannbot-skills/ops/ascendc-whitebox-design", | 22 | "vendor/cannbot-skills/ops/ascendc-whitebox-design", |
| 23 | "vendor/cannbot-skills/ops/cann-env-setup", | 23 | "vendor/cannbot-skills/ops/cann-env-setup", |
| 24 | - "vendor/cannbot-skills/community/ops/cannbot-dsl-env-check", | 24 | + "vendor/cannbot-skills/ops/cannbot-dsl-env-check", |
| 25 | - "vendor/cannbot-skills/community/ops/cannbot-dsl-op-design", | 25 | + "vendor/cannbot-skills/ops/cannbot-dsl-op-design", |
| 26 | - "vendor/cannbot-skills/community/ops/cannbot-dsl-unit-planner", | 26 | + "vendor/cannbot-skills/ops/cannbot-dsl-unit-planner", |
| 27 | - "vendor/cannbot-skills/community/ops/cannbot-dsl-test-generator", | 27 | + "vendor/cannbot-skills/ops/cannbot-dsl-test-generator", |
| 28 | - "vendor/cannbot-skills/community/ops/cannbot-dsl-best-practice", | 28 | + "vendor/cannbot-skills/ops/cannbot-dsl-best-practice", |
| 29 | - "vendor/cannbot-skills/community/ops/cannbot-dsl-code-reviewer", | 29 | + "vendor/cannbot-skills/ops/cannbot-dsl-code-reviewer", |
| 30 | "vendor/cannbot-skills/ops/npu-arch", | 30 | "vendor/cannbot-skills/ops/npu-arch", |
| 31 | "vendor/cannbot-skills/ops/ops-precision-standard", | 31 | "vendor/cannbot-skills/ops/ops-precision-standard", |
| 32 | "vendor/cannbot-skills/ops/ops-profiling", | 32 | "vendor/cannbot-skills/ops/ops-profiling", |
| @@ -100,7 +100,7 @@ AscendC 过程报告写入 `$WORK_DIR/`;CANNBotDSL 执行与验收过程报告 | |||
| 100 | 100 | ||
| 101 | ## cannbot-dsl 内容引用模板 | 101 | ## cannbot-dsl 内容引用模板 |
| 102 | 102 | ||
| 103 | -Skill 源路径统一在插件的 [plugin-sources.json](../../plugin-sources.json) 的 `skills` 列表维护;DSL 能力从 `vendor/cannbot-skills/community/ops/` 与 `vendor/cannbot-skills/ops/`(ops-design-paradigms)导入。安装器按目录名注册 Skill,task 与动态实现子图只引用其 `SKILL.md` 中的名称。迁移 Skill 时同步源路径和调用名称,并确认依赖仓版本已包含这些目录。 | 103 | +Skill 源路径统一在插件的 [plugin-sources.json](../../plugin-sources.json) 的 `skills` 列表维护;六个 `cannbot-dsl-*` Skill 与 `ops-design-paradigms` 均从 `vendor/cannbot-skills/ops/` 导入。安装器按目录名注册 Skill,task 与动态实现子图只引用其 `SKILL.md` 中的名称。迁移 Skill 时同步源路径,并在名称变化时更新调用名称;确认依赖仓版本已包含这些目录。 |
| 104 | 104 | ||
| 105 | [op-dev](workflows/cannbot-dsl/op-dev.yaml) 是完整工作流模板:节点 id、depends_on、executor、verifier、max_retries、on_exhaust、rollback_to 和 subgraph 节点全部留在模板中,语义 id 不参与重新编号;normal 节点通过 `yaml` 键引用 `tasks/cannbot-dsl/` 下的内容 task,task 只含 title、goal、approach、procedure(可选)、acceptance、out_of_scope 六个内容字段,不包含任何调度字段。组装时按模板文件位置解析 task 路径,将内容字段合并进节点后剥离 `yaml` 键;模板与 task 同时定义同一字段、task 缺字段或合并后出现未知字段都会拒绝组装。内容字段为空列表的节点在组装时输出 warning 列出待补字段,不阻断生成。 | 105 | [op-dev](workflows/cannbot-dsl/op-dev.yaml) 是完整工作流模板:节点 id、depends_on、executor、verifier、max_retries、on_exhaust、rollback_to 和 subgraph 节点全部留在模板中,语义 id 不参与重新编号;normal 节点通过 `yaml` 键引用 `tasks/cannbot-dsl/` 下的内容 task,task 只含 title、goal、approach、procedure(可选)、acceptance、out_of_scope 六个内容字段,不包含任何调度字段。组装时按模板文件位置解析 task 路径,将内容字段合并进节点后剥离 `yaml` 键;模板与 task 同时定义同一字段、task 缺字段或合并后出现未知字段都会拒绝组装。内容字段为空列表的节点在组装时输出 warning 列出待补字段,不阻断生成。 |
| 106 | - 所有组装输出都使用新文件,拒绝覆盖。恢复使用原完整 YAML 和 work_dir;新一轮使用新目录,保留前轮状态与证据。 | 106 | - 所有组装输出都使用新文件,拒绝覆盖。恢复使用原完整 YAML 和 work_dir;新一轮使用新目录,保留前轮状态与证据。 |
| @@ -5,9 +5,9 @@ approach: | |||
| 5 | - 读取 `$WORK_DIR/design/doc/spec.yaml`、`$WORK_DIR/environment/environment.yaml` 和 `$WORK_DIR/environment/env_selected_soc.yaml`。环境为 `FAIL/blocked` 时按工作流政策停止。 | 5 | - 读取 `$WORK_DIR/design/doc/spec.yaml`、`$WORK_DIR/environment/environment.yaml` 和 `$WORK_DIR/environment/env_selected_soc.yaml`。环境为 `FAIL/blocked` 时按工作流政策停止。 |
| 6 | - '`PASS/full` 时,读取选定 SoC 并结合 `npu-arch` 与运行时证据形成 `$WORK_DIR/environment/soc-info.yaml`;SKU 相关的核数、容量和带宽以实际证据为准。' | 6 | - '`PASS/full` 时,读取选定 SoC 并结合 `npu-arch` 与运行时证据形成 `$WORK_DIR/environment/soc-info.yaml`;SKU 相关的核数、容量和带宽以实际证据为准。' |
| 7 | - '`WARNING/compile_only` 时,在设计中说明可设计和编译、不可执行 NPU 验证;按本工作流政策在设计后停止,不编造 SoC 或实测数据。' | 7 | - '`WARNING/compile_only` 时,在设计中说明可设计和编译、不可执行 NPU 验证;按本工作流政策在设计后停止,不编造 SoC 或实测数据。' |
| 8 | -- 消费冻结的 `spec.yaml` 分类和语义,将环境、`$WORK_DIR/cannbot-dsl/docs` 文档目录、SoC 信息作为设计输入提供给 `cannbot-dsl-op-design`;不要求 Skill 接收固定路径、证据 schema 或调用其他 Skill。 | ||
| 9 | - 加载 `cannbot-dsl-best-practice` 的整体实现参考,提取公开调用与导出契约、共享构建依赖、资源存续范围及产物识别的验收条件,纳入 HostLaunch、API、Validation 和 DevView;具体接口示例注明版本与适用前提,支持的导出变体、Native 收集与产物命中转为后续实现和验证的明确义务。影响正确性、接口或实现可行性的依赖必须在本节点确认;无法确认时记录证据并终止。 | 8 | - 加载 `cannbot-dsl-best-practice` 的整体实现参考,提取公开调用与导出契约、共享构建依赖、资源存续范围及产物识别的验收条件,纳入 HostLaunch、API、Validation 和 DevView;具体接口示例注明版本与适用前提,支持的导出变体、Native 收集与产物命中转为后续实现和验证的明确义务。影响正确性、接口或实现可行性的依赖必须在本节点确认;无法确认时记录证据并终止。 |
| 10 | - 加载 `ops-design-paradigms` Skill,提供冻结的 `op.paradigms` 与路由所需的 `dsl`,按 Skill 当前的组合优先、语言适配和按需展开规则获取设计知识;语言声明与匹配记录写入节点报告,资料的算法、能力与约束用于核对方案及其适用前提,沿用规格中的范式。 | 9 | - 加载 `ops-design-paradigms` Skill,提供冻结的 `op.paradigms` 与路由所需的 `dsl`,按 Skill 当前的组合优先、语言适配和按需展开规则获取设计知识;语言声明与匹配记录写入节点报告,资料的算法、能力与约束用于核对方案及其适用前提,沿用规格中的范式。 |
| 10 | +- 加载 `cannbot-dsl-op-design`,提供规格文件 `$WORK_DIR/design/doc/spec.yaml`、环境、`$WORK_DIR/cannbot-dsl/docs` 文档目录、SoC 信息,以及本节点获取的调用与导出契约和范式资料,按其要求执行。规格文件路径由本工作流约定,范式资料由本节点提供;不要求设计 Skill 自行调用其他 Skill 或产出范式文档。 | ||
| 11 | - 设计正文以数学表达式、任务坐标、数据流、资源模型及算法伪代码描述方案;目标语言与 API 资料用于确认执行能力、接口与产物契约,参考代码保留适用范围、来源和抽象占位说明。 | 11 | - 设计正文以数学表达式、任务坐标、数据流、资源模型及算法伪代码描述方案;目标语言与 API 资料用于确认执行能力、接口与产物契约,参考代码保留适用范围、来源和抽象占位说明。 |
| 12 | - 指定 `$WORK_DIR/design/doc/` 为设计输出目录,生成 `INDEX.md`、索引列出的主题文件及 `branches/DESIGN-BRANCH-*.md`。设计内容覆盖算法、接口、执行路径、资源、并行与同步、API、精度和边界验证。 | 12 | - 指定 `$WORK_DIR/design/doc/` 为设计输出目录,生成 `INDEX.md`、索引列出的主题文件及 `branches/DESIGN-BRANCH-*.md`。设计内容覆盖算法、接口、执行路径、资源、并行与同步、API、精度和边界验证。 |
| 13 | - 在 Kernel 定义阶段调用次数、计算量、各层搬运量及重复次数,推导共用资源负载、串行依赖和预计瓶颈;在 TemplatePartition 代入代表规模比较可行候选,在 LaunchData 核对物理资源,在 Validation 给确认或推翻成本假设的观测。耗时估算与实测分别注明依据。 | 13 | - 在 Kernel 定义阶段调用次数、计算量、各层搬运量及重复次数,推导共用资源负载、串行依赖和预计瓶颈;在 TemplatePartition 代入代表规模比较可行候选,在 LaunchData 核对物理资源,在 Validation 给确认或推翻成本假设的观测。耗时估算与实测分别注明依据。 |
| @@ -324,8 +324,10 @@ for (const source of sources) { | |||
| 324 | const localSkills = readdirSync(join(repositoryRoot, "plugins-official", "ops-direct-invoke", "skills")) | 324 | const localSkills = readdirSync(join(repositoryRoot, "plugins-official", "ops-direct-invoke", "skills")) |
| 325 | .filter((name) => existsSync(join(repositoryRoot, "plugins-official", "ops-direct-invoke", "skills", name, "SKILL.md"))); | 325 | .filter((name) => existsSync(join(repositoryRoot, "plugins-official", "ops-direct-invoke", "skills", name, "SKILL.md"))); |
| 326 | assert.equal(record.skills.length, configured.skills.length + localSkills.length); | 326 | assert.equal(record.skills.length, configured.skills.length + localSkills.length); |
| 327 | - for (const name of ["cannbot-dsl-env-check", "cannbot-dsl-op-design", "cannbot-dsl-unit-planner", "cannbot-dsl-test-generator", "cannbot-dsl-best-practice", "cannbot-dsl-code-reviewer"]) { | 327 | + for (const name of ["cannbot-dsl-env-check", "cannbot-dsl-op-design", "cannbot-dsl-unit-planner", "cannbot-dsl-test-generator", "cannbot-dsl-best-practice", "cannbot-dsl-code-reviewer", "ops-design-paradigms"]) { |
| 328 | - assert.equal(existsSync(join(skillRoot(target, tool), name, "SKILL.md")), true, name); | 328 | + const installedSkill = join(skillRoot(target, tool), name); |
| 329 | + assert.equal(existsSync(join(installedSkill, "SKILL.md")), true, name); | ||
| 330 | + assertSkillInstallation(installedSkill, source, "ops-direct-invoke", name); | ||
| 329 | } | 331 | } |
| 330 | assert.equal(record.agents.length, 3); | 332 | assert.equal(record.agents.length, 3); |
| 331 | assert.equal(record.sourcePackage, sourcePackage); | 333 | assert.equal(record.sourcePackage, sourcePackage); |