CANNBot 是面向 CANN 开发的用于提升开发效率的系列智能体,本仓库为其提供可复用的 Skills 模块。
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
feat(ascendc-port-orchestrator): PR4/5 双层知识库载荷 (RFC #364, +OKF卡) +marketplace 激活(合并原 PR5) Co-authored-by: JamesCao2048<junmingcao@foxmail.com> # message auto-generated for no-merge-commit merge: !611 merge ascendc-port/04-kb into master feat(ascendc-port-orchestrator): PR4/5 双层知识库载荷 (RFC #364, +OKF卡) +marketplace 激活(合并原 PR5) Created-by: junming222 Commit-by: JamesCao2048 Merged-by: cann-robot Description: ## 本 PR 范围 - 提供两个工作流所需的精选知识库: arch22 → arch35 迁移与“前向算子 → 反向算子”生成。 - 保留标准 AscendC FA/L4 模板组装、迁移相关知识、候选卡和 target archive/prior-art 建议材料。 - 目标侧材料只能作为带来源记录的建议,不能替代迁移源 NPU 真值、反向 CPU fp64 autograd 真值,也不能直接作为生成答案。 ## 本地验证 - strict KB audit:717 entries;orphan、duplicate、missing applies_to、dangling ref、ID sequence、SoC scope、template scope 均为 0。 - 模板文件许可证头已补齐;changed-source 许可证头 3/3。 - diff check 与术语内容/路径检查通过。 See merge request: cann/cannbot-skills!611 | 8 天前 | |
docs(update): 同步更新README入门指南、CHANGELOG、ST测试框架及PR模板 Co-authored-by: yanhf<yanhaifeng5@huawei.com> # message auto-generated for no-merge-commit merge: !286 merge master into master docs(update): 同步更新README入门指南、CHANGELOG、ST测试框架及PR模板 Created-by: yanhf Commit-by: yanhf Merged-by: cann-robot Description: ## 描述 #### 文档更新 本批次全部为文档类更新,覆盖README 快速开始、测试框架文档、CHANGELOG、PR 模板及项目架构说明,旨在降低新用户上手门槛并同步最新项目状态。 **【README 快速开始】README.md** - 重写快速开始指南,拆分为四步:克隆 → 选场景安装 → 验证 → 开始使用 - 新增前置条件说明,明确 AI 工具与 CANN 环境要求 - 统一命令格式,使用 <tool> 占位符代替具体的工具名列表 - 增加安装验证方法(目录检查 + AI 交互验证) - 修正安装命令格式:./path/init.sh → cd path && bash init.sh - 更新 AI 工具安装说明(补充 npm install / 下载地址)与官方文档直达链接 **【README 场景与架构】README.md** - 补充 Catlass 算子直调、代码检视、torch.compile 图模式 3 个场景到快速开始表格 - 更新项目架构树,统一缩进并对齐注释,新增 plugins-community/ 和社区 Plugin 条目 - 补充多个缺失 Skills(blaze-best-practice、performance-best-practices、regbase-best-practice、cann-env-setup、aiss-tiling-solver 等) - 修正 ops-simulator 技能名称(原 cann-simulator) - 统一 quickstart 引用描述 **【测试框架文档】tests/README.md** - 补充 ST 系统测试框架完整文档(300 行新增),涵盖 system/ 目录结构、本地开发调试指南(L1 快速验证 / 行为验证 / ST 语义评测)、gate_check.sh CI 入口、换行符检查及环境变量说明 - 新增 opencode_runner_examples.py 到 system/ 目录树 - 将默认测试超时从 300s 调整为 600s - 删除 GitHub Actions CI 示例(项目已迁移至 GitCode CI) - 修正 claude-code npm 包名 **【CHANGELOG 维护】CHANGELOG.md** - 补充 2026-05-20 ~ 2026-05-25 期间的特性、增强与修复条目 - 新增 05-26 条目(cuda2ascend-simt、pypto-golden-generate、PR 模板统一) - 新增 05-21 条目(tiling-solver、示例提示词) - 修正 05-25 条目内容归属(性能调试 / 代码检视 / PyPTO / 测试框架等) - 简化 README 最新动态为每日一行 **【PR 模板与测试报告】** - .gitcode/PULL_REQUEST_TEMPLATE.zh-CN.md:修正 UT_Test 未通过时的下载指引,明确下载的是 HTML 格式的 CANNBot-skills UT 测试报告 - tests/run-tests.sh:将 HTML 报告标题统一为 CANNBot-skills UT 测试报告,与 PR 模板指引保持一致 ## 关联的Issue <!-- 无特定 Issue --> ## 测试 - ./tests/run-tests.sh --fast 全部通过(10/10) - ./tests/run-tests.sh --test unit/teams/test-version.sh PASS(version bump 验证通过) ## 文档更新 - tests/README.md:ST 系统测试框架文档、目录结构、CI 示例、超时配置 - CHANGELOG.md:补充 05-20 ~ 05-26 期间全部变更条目 - README.md:快速开始指南、场景列表、项目架构、Skills 目录 - .gitcode/PULL_REQUEST_TEMPLATE.zh-CN.md:UT_Test 下载指引 - tests/run-tests.sh:HTML 报告标题 ## 类型标签 - [x] 📝 文档更新 See merge request: cann/cannbot-skills!286 | 2 个月前 | |
refactor(model-infer): merge sota-approach into optimize with entry-intent routing Co-authored-by: zihengwang2<wangziheng8@huawei.com> # message auto-generated for no-merge-commit merge: !745 merge merge-sota-into-optimize into master refactor(model-infer): merge sota-approach into optimize with entry-intent routing Created-by: zihengwang2 Commit-by: zihengwang2 Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述您的改动,包括改动的原因和所采取的方法。 ### 举例: #### 新特性 New Features - 【仿真 ops-simulator】新增Ascend 950 仿真Skill:支持 Ascend 950 仿真,并且输出性能分析报告和流水线图。 - 【PyPTO】【pypto-op-design】新增 Skill:pypto-op-design,PyPTO算子方案设计,含快速参考和设计模板。 #### 问题修复 Bug Fix 【算子直调 ops-direct-invoke】修改verify_environment.sh脚本,返回environment.json 固定为1的bug,应该按实际设备的npu count返回。 --> 原 model-infer-sota-approach 与 model-infer-optimize 是两个独立 plugin,plugin 数量增多带来重复的注册面与维护成本。本 PR 将二者归并为单一 plugin,由入口意图分流到两条互补工作流。 - 归并为一个 plugin model-infer-optimize,保留两条独立 workflow: - 基础流程 optimize-workflow.md:从零适配、固定阶段优化到 baseline - 探索流程 sota-approach-workflow.md:baseline 之上 profiling 驱动的探索式优化 - AGENTS.md 增加强制入口意图分流规则(无 baseline / 固定阶段 / profiling 探索三档判据,含意图不明时的兜底澄清) - 6 个 model-infer-sota-* agent、workflow 及子引用整体搬入 optimize,progress_template 解撞更名,删除死代码 - 撤销独立 sota-approach 注册:marketplace、白名单、install-helper、feature-list、README 全部归并到 optimize 一处 - pre_tool_use hook 角色写保护扩展到 4 个 sota 只读 agent(scenario/profile-analyzer/candidate/reviewer) - evals 合并为 7 用例,CHANGELOG 追加归并条目,设计文档改指向 optimize plugin 并修复死链 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单的链接。--> 关联 issue [#480](https://gitcode.com/cann/cannbot-skills/issues/480) ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🌟 新特性 - [ ] ✨ 特性增强 - [ ] 🐛 Bug 修复 - [ ] ⚡ 性能优化 - [ ] 🧪 测试用例 - [ ] 📦 构建 / CI - [x] 📝 文档更新 - [ ] 🔧 配置变更 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [x] ♻️ 代码重构 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: ## 流水线故障排查 <!-- 如果下方的流水线检查未通过,可参考以下指引进行自助修复 --> > **UT_Test 未通过?** > 请在下方流水线表格的 **UT_Test** 行,点击右侧的 >>>>> 下载 **CANNBot-skills UT 测试报告**(HTML 格式)。 > 打开报告后,展开页面中的「UT Test 失败修复指南」,复制其中的提示词并粘贴给 Agent,Agent 将根据日志自动定位并修复问题。 > > 示例: >  See merge request: cann/cannbot-skills!745 | 9 天前 | |
feat(graph): add standalone GE fusion pass skill Co-authored-by: KenChow<zhouchen53@huawei.com> Co-authored-by: shangdf<shangdongfang1@huawei.com> # message auto-generated for no-merge-commit merge: !723 merge feat/ge-fusion-pass into master feat(graph): add standalone GE fusion pass skill Created-by: shangdf Commit-by: KenChow;shangdf Merged-by: cann-robot Description: ## 描述 #### 新特性 New Features - 新增 graph/ge-fusion-pass-skill:面向 GE/CANN 自定义融合 pass 的通用 Skill。 - 以单一 Skill 提供 G1(需求分析)→ G2(开发)→ G3(功能验证与融合诊断)流程;环境或证据不足时如实降级。 - Skill 自带可复用的 GE references 与辅助脚本,包括输入适配、环境检查、GE 仓解析和验证证据生成;交付内容仅限 graph/ge-fusion-pass-skill/ 下的 Skill 文件、references 与辅助脚本。 - 验证证据脚本命名为 validate_evidence.py;R3/R4 仅为内部 workflow 里程碑,不是版本号。 ## 关联的Issue Closes #474 https://gitcode.com/cann/cannbot-skills/issues/474 ## 测试 - python3 tests/lib/skill_validator.py validate-skill graph/ge-fusion-pass-skill/SKILL.md — 通过。 - python3 graph/ge-fusion-pass-skill/scripts/validate_evidence.py --help 与 python3 graph/ge-fusion-pass-skill/scripts/adapt_input.py --help — 通过。 - 全部 Python 脚本语法解析、Shell 脚本语法、内部脚本/reference 引用及 git diff --check — 通过。 ## 文档更新 - Skill 交付内容限定为 graph/ge-fusion-pass-skill/ 下的 SKILL.md、references/ 和 scripts/。 ## 类型标签 - [x] 🌟 新特性 - [ ] ✨ 特性增强 - [ ] 🐛 Bug 修复 - [ ] ⚡ 性能优化 - [ ] 🧪 测试用例 - [ ] 📦 构建 / CI - [x] 📝 文档更新 - [ ] 🔧 配置变更 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [x] ♻️ 代码重构 - [x] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/cannbot-skills!723 | 9 天前 | |
feat(tests): skill 必须携带 evals 用例(S-EVAL-01)+ 补充 ST 用例(已修正检视意见) Co-authored-by: hello_simida<wangyi206@huawei.com> # message auto-generated for no-merge-commit merge: !735 merge master into master feat(tests): skill 必须携带 evals 用例(S-EVAL-01)+ 补充 ST 用例(已修正检视意见) Created-by: hello_simida Commit-by: hello_simida Merged-by: cann-robot Description: ## 描述 本 PR 完善 ST 测试体系,包含两部分: ### 1. 新增 L1 硬性门禁 S-EVAL-01 - 新增 tests/unit/skills/test-evals-required.sh(S-EVAL-01):所有 skill 必须携带 evals/evals.json(文件存在 + 合法 JSON + 顶层 skill_name 字段),缺失或损坏即拦截 CI,并在 run-tests.sh 的 unit 与 incremental 测试清单中登记。 - 修复失效的 S-STR-20 规则(skill_validator.py):由检查过时的 evals/evals.md 改为校验 evals/evals.json,消除对存量 skill 的误报警告。 - 存量补齐:为 12 个缺失评测用例的 Skill 补充 evals/evals.json(cannbot-skill-reviewer、pypto-docs-search、pypto-general-debug、pypto-memory-template、pypto-op-construct、pypto-op-knowledge、pypto-op-plan、pypto-op-review、pypto-op-verify、pypto-orchestration-manual、triton-simulator-optimizer、runtime_migration);修复 ascendc-mc2-best-practice 损坏的 evals/evals.json(尾随逗号)。新增用例均设 "disabled": true,ST 执行时跳过,后续逐个启用。 ### 2. 补充 ST 用例覆盖率规范文档 新增 tests/system/docs/ST_COVERAGE_SPECIFICATION.md,定义针对 AI Agent Skill 的三维覆盖率规范(触发关键词覆盖率、使用场景覆盖率、内容章节覆盖率),包含覆盖等级定义(优秀/良好/需改善/不足)与综合得分计算方式。 ### 检视意见修正(wangyi_ws 评审,本次提交) - 综合得分交叉引用由「附录 C」修正为「附录 A」(公式实际位于附录 A)。 - 综合得分公式移除末尾 /100:各维度覆盖率产出 [0,1] 区间分数,权重和 40+35+25=100 已天然归一化到 [0,100],避免得分被错误缩小 100 倍导致覆盖等级判定失效。 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> ## 测试 L1 单元测试通过:./tests/run-tests.sh --fast(含 S-EVAL-01 全量校验)。 ## 文档更新 - 新增 tests/system/docs/ST_COVERAGE_SPECIFICATION.md - 更新 CHANGELOG.md ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [x] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [x] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [x] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/cannbot-skills!735 | 10 天前 | |
refactor(model-infer-migrator): consolidate YAML config into shared yaml_template reference Co-authored-by: zihengwang2<wangziheng8@huawei.com> # message auto-generated for no-merge-commit merge: !509 merge sync-infer-pr61 into master refactor(model-infer-migrator): consolidate YAML config into shared yaml_template reference Created-by: zihengwang2 Commit-by: zihengwang2 Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述您的改动,包括改动的原因和所采取的方法。 ### 举例: #### 新特性 New Features - 【仿真 ops-simulator】新增Ascend 950 仿真Skill:支持 Ascend 950 仿真,并且输出性能分析报告和流水线图。 - 【PyPTO】【pypto-op-design】新增 Skill:pypto-op-design,PyPTO算子方案设计,含快速参考和设计模板。 #### 问题修复 Bug Fix 【算子直调 ops-direct-invoke】修改verify_environment.sh脚本,返回environment.json 固定为1的bug,应该按实际设备的npu count返回。 --> 将 model-infer-migrator 散落在 framework_templates、parallel-impl 内联的 YAML schema/命名规范集中成共享文件 references/yaml_template.md,各文件改为引用它;同步对齐 infer.sh 处理(框架部署不建模型目录 infer.sh、统一用仓库入口脚本拉起)与 README 去重。 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单的链接。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。--> 结构校验通过。CI通过。 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🌟 新特性 - [ ] ✨ 特性增强 - [ ] 🐛 Bug 修复 - [ ] ⚡ 性能优化 - [ ] 🧪 测试用例 - [ ] 📦 构建 / CI - [x] 📝 文档更新 - [ ] 🔧 配置变更 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [x] ♻️ 代码重构 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: ## 流水线故障排查 <!-- 如果下方的流水线检查未通过,可参考以下指引进行自助修复 --> > **UT_Test 未通过?** > 请在下方流水线表格的 **UT_Test** 行,点击右侧的 >>>>> 下载 **CANNBot-skills UT 测试报告**(HTML 格式)。 > 打开报告后,展开页面中的「UT Test 失败修复指南」,复制其中的提示词并粘贴给 Agent,Agent 将根据日志自动定位并修复问题。 > > 示例: >  See merge request: cann/cannbot-skills!509 | 15 天前 | |
feat(catlass): 新增 FlashAttention 生成 skill Co-authored-by: CDragon<617413776@qq.com> # message auto-generated for no-merge-commit merge: !787 merge master into master feat(catlass): 新增 FlashAttention 生成 skill Created-by: CDragon Commit-by: CDragon Merged-by: cann-robot Description: ## 描述 本 PR 为 cannbot-skills 新增 FlashAttention(FA / MHA / GQA)类算子的 catlass 生成 Skill,覆盖设计路由、标杆接口对齐、实现模式、A2/A3 stage 设计与构建说明,使生成器在拿到 prompt + 标杆接口后即可产出精度/性能符合预期的 FA 算子。 ### 背景 FA-2 是 AIC/AIV 跨核协作的混合 kernel,其 CrossCoreFlag 时序、SetSyncBaseAddr、in-pipe HardEvent flag 预置、online softmax 的 m/l UB 布局、mask GM 契约是一整套强耦合的时序契约;从零拼装 BlockMmad + Epilogue 极易触发跨核死锁(AIC 已 set flag、AIV 卡在 CrossCoreWaitFlag/MTE2 wait 不返回,507015 aicore 异常)。因此 FA 必须复用整经验证内核、只自写 host 接口,并把标杆接口(aclnnFlashAttentionScore / npu_fusion_attention)到内核参数的映射固化进 Skill。 FA 内核复用 catlass examples/23_flash_attention_infer 的 FAInferKernel(fai_kernel.cpp / fai.cpp / fai_tiling.cpp / kernel_common.hpp),不自拼、不 vendor。 ### 主要改动 #### 1. 标杆接口对齐 - 新增 ops/catlass-op-design/references/kernels/flash-attention-npu-reference.md:aclnnFlashAttentionScore/npu_fusion_attention → 内核参数映射(input_layout / scale / sparse_mode↔maskType / seqlen 累加↔per-batch / keep_prob / 输出)+ 可继承边界 + 用户 contract 优先;含 npu causal atten_mask 须 [2048,2048](否则 tiling 报 161001)实战提示 #### 2. FA 设计路由 - 新增 ops/catlass-op-design/references/kernels/flash-attention.md:场景判定、Step0 自动锁定标杆、组件选型表、shape 覆盖矩阵、PAGED 平台陷阱;FA 内核来源锁定为 catlass examples/23 的 FAInferKernel #### 3. FA 实现模式 - 新增 ops/catlass-op-develop/references/patterns/flash-attention.md:BNSD 公开接口 + host 布局转换、A2 PAGED=true+恒等 block_table、KV 非 128 尾块 0 填充、AIC/AIV 协作、FA0–FA13 检查表、T1–T8 踩坑 #### 4. A2/A3 stage 设计 - 新增 a2-a3-flash-attention-stage-design.md:C1→V1→C2→V2 四段流水、online softmax 状态递推、GM workspace/CrossCoreFlag、尾块处理 #### 5. 构建说明 - 更新 architecture/03-compilation.md:独立 kernel 直调构建(CATLASS_ARCH 编译宏 / GM_ADDR 强转 / 核数 API / link 库 + 最小 CMake 骨架) #### 6. 路由接线 - 更新 catlass-op-design/develop/perf-tune 的 SKILL.md + 3 个 generator agents + task-prompts.md:FA 路由统一指向 catlass examples/23 的 FAInferKernel ## 测试 910B3(Atlas A2 / dav-2201)基于本 Skill 生成 FA 算子并端到端验证(精度 + 性能,对齐 npu_fusion_attention 标杆)。 精度口径:双口径(numpy golden + npu_fusion_attention),atol=0.02 / rtol=0.1,max_abs < 0.05。 性能口径:cannbot msprof device-kernel 时间 vs npu FlashAttentionScore,min of N runs,ratio = npu_us / my_us(>1 即快过 npu)。 - FA-BNSD(全注意力,NO_MASK):MHA/GQA、非128尾块、多batch、D64/D128 共5 shape 全 PASS(max_abs 1e-4~1e-3);性能 MHA1024 0.80×、MHA2048 0.91×、GQA1024 0.77× - FA-BNSD-Causal(下三角 causal,MASK_CAUSUAL,sparse_mode=2):MHA/GQA、D64/D128 共3 shape 全 PASS;性能 causal1024 1.01×(反超 npu)、2048 0.94× - FA-TND(varlen):MHA/GQA、不等长 varlen 全 PASS;性能 0.78–0.97× 三种算子性能全部 ≥ 0.6× 目标;causal 因结构性跳过对角块以上整块、省约一半计算,达或超 npu。 ## 文档更新 本 PR 即为 Skill 文档/路由更新。 ## 类型标签 <!-- [x] 表示选中 --> - [x] 🌟 新特性 - [ ] ✨ 特性增强 - [ ] 🐛 Bug 修复 - [ ] ⚡ 性能优化 - [ ] 🧪 测试用例 - [ ] 📦 构建 / CI - [ ] 📝 文档更新 - [ ] 🔧 配置变更 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] ♻️ 代码重构 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: ## 流水线故障排查 <!-- 若下方流水线检查未通过,参考 PR 页面指引自助修复 --> See merge request: cann/cannbot-skills!787 | 1 天前 | |
feat(cannbot-insight): v1.51→v1.67——root 编排对账重构、Skill 加载校验、Audit 阶段诊断增强 Co-authored-by: duanbingzhe<duanbingzhe@huawei.com> # message auto-generated for no-merge-commit merge: !808 merge feature/update-cannbot-insight into master feat(cannbot-insight): v1.51→v1.67——root 编排对账重构、Skill 加载校验、Audit 阶段诊断增强 Created-by: duanbingzhe Commit-by: duanbingzhe Merged-by: cann-robot Description: ## 描述 版本 v1.51 → v1.67。合并多轮功能迭代,71 个文件变更(57 修改 + 14 新增,+4903 / -624)。核心聚焦三类审计/校验能力,其余为配套增强。 ## root 对账编排声明提取重构 - 新增 recoverWorkflowDeclaration 及辅助 resolveWorkflowSkillName / recoverSkillResourceFile - 优先级:skill resources 文件(task-prompts.md)> SKILL.md body > turn0 注入(≥500字) > null - 不再用 STATE.md / todowrite(属"任务完成度",非"编排规程遵循度") - 新增设计文档 docs/workflow-plan-extraction-design.md ## Skill 加载校验(新功能) - 新增 SkillContentAudit 组件 + use-skill-content-audit hook + skill-content-audit API - 校验每个 skill 是否在会话内读取完整 SKILL.md:Skill 工具注入即全文;Read 需无 offset/limit 且无截断标记才判全文,否则部分读取 - chip 三态(全文 / 部分 / 未读),点击 chip 在表格展开该 skill 行 ## Audit 增强 - v4 agent 树默认隐藏全部通过的子 agent(勾选开关才显示) - 跨 agent 问题与优化优先级每项给证据(agent:<name> #turn,可点击跳转);审计头部展示本次消耗 token 数 - 新增 StageBreakdownTable + StageBreakdownRow 类型:6 阶段(extract/refine/headline/rebuild/judge/postprocess)墙钟+token 诊断,区分 LLM vs 程序阶段 - finding / aggregate 增加 source_excerpt(bullet 原文)、headline(人话标题)、turn_refs(证据 turn 序号,可点击跳转) ## Skills tab 增强 - 恢复展示 dispatch 的 subagent 行(此前被误删) - 新增 agent-content API:从磁盘扫 agent .md(AGENTS_SCAN_ROOT),多插件按 session dispatch 覆盖率消歧 ## smart-agent 增强 - trajectory_analyzer 新增 AdaptiveLimiter(自适应并发:激进出高限、撞限流乘性回退、窗口清了爬回)与 _is_rate_or_timeout 判别 - 重构 _audit_one_agent / _aggregate_session;subagent 桥接写入复刻 Claude Code subagent 存储结构 - jsonl_logger 支持 append 模式;server.py analyze_logger 改 append=False ## 零依赖导出 Session DB - 新增 export-db.mjs:从 opencode.db 或 Claude Code JSONL 提取单个 session(含子会话)为独立文件 - 零依赖:仅需 Node.js >= 22(内置 node:sqlite),无需 npm install / Prisma / 后端 - 自动识别框架,支持 --list / -s / -o / --json;README 新增"方式三" ## CLI upload 增强 - 支持 --session-id(非交互指定)、--list、--yes / --json、--description - README 重写上传文档(opencode / Claude Code 分开示例 + 参数表);路径修正 sessions.db → opencode.db ## Turns 与概念追踪交互 - Turn 快速跳转:输入 turn 编号(如 #459)回车直达;subagent turn 自动展开祖先 dispatch lane - 概念追踪高亮跳转:搜索结果点击 View Turn 跳转 Turns tab,自动展开并高亮关键词至匹配位置 - 新增纯函数 src/lib/shared/highlight.tsx(highlightKeyword,大小写不敏感,<mark> 包裹) ## 测试与文档 - 新增 cannbot-insight adapter、opencode-db adapter、delete-session API、skill-content-audit API、trace-turn-highlight、turn-timeline-jump 等集成测试;skill-eval-audit 测试 +615 行 - README / README-zh 功能列表与 tab 描述同步;AGENTS.md 补充相关说明 See merge request: cann/cannbot-skills!808 | 9 小时前 | |
feat(ops-direct-invoke): 新增工作流状态文件 state.json,随阶段推进实时更新 Co-authored-by: Twoliges<202383290096@nuist.edu.cn> # message auto-generated for no-merge-commit merge: !801 merge feat/ops-direct-invoke-state-json into master feat(ops-direct-invoke): 新增工作流状态文件 state.json,随阶段推进实时更新 Created-by: Twoliges Commit-by: Twoliges Merged-by: cann-robot Description: ## 描述 #### 新特性 New Features 【算子直调 ops-direct-invoke】新增工作流机器可读状态文件 state.json,随阶段推进**实时更新**(非最终汇总),用于状态可观测与断点恢复,并提供配套字段说明与校验脚本。 **改动内容**: - 新增 workflows/references/state.json 空模板:workflow / operator / env_summary / results 四段结构固定,stages 按当前工作流 Step 1–7(含 CP 门禁)适配;results/usage 初始为 null,stages 初始为 pending,均为严格合法 JSON(无 // 注释) - 新增 workflows/references/state-template.md:字段语义表、stages 键定义与状态取值规则(pending/running/completed/skipped/failed)、实时更新模型(仅 CANNBot 维护、每步立即落盘)、各阶段更新键与取值来源、usage(对话轮数/工具调用/token)可选采集方法 - 新增 workflows/scripts/validate_state.py:校验 JSON 合法性、必填顶层键、stages 键集合、status 取值、results 为 null/bool,任意时刻可运行 - 更新 AGENTS.md:新增「状态文件维护(state.json)」章节,明确文件落位 operators/{operator_name}/state.json、维护职责(仅 CANNBot)、实时更新时机及 Step 1 初始化到 Step 7 各阶段更新点;参考资料区补充状态模板/说明/校验三处引用 **说明**:usage(对话轮数/工具调用次数/token 统计)为可选字段,在 opencode 下可低成本采集,其他工具无统一命令时删除整个 usage 对象。 ## 关联的Issue https://gitcode.com/cann/cannbot-skills/issues/461 ## 测试 - python3 -c "import json; json.load(open(...))" 验证 state.json 为合法 JSON - python workflows/scripts/validate_state.py workflows/references/state.json 校验模板通过(exit=0) - 构造非法值(如 results.precision 置字符串)校验脚本正确返回失败(exit=1) ## 文档更新 - 更新 plugins-official/ops-direct-invoke/AGENTS.md - 新增 plugins-official/ops-direct-invoke/workflows/references/state-template.md ## 类型标签 - [x] 🌟 新特性 - [ ] ✨ 特性增强 - [ ] 🐛 Bug 修复 - [ ] ⚡ 性能优化 - [ ] 🧪 测试用例 - [ ] 📦 构建 / CI - [ ] 📝 文档更新 - [ ] 🔧 配置变更 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] ♻️ 代码重构 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: ``` See merge request: cann/cannbot-skills!801 | 15 小时前 | |
feat(tests): skill 必须携带 evals 用例(S-EVAL-01)+ 补充 ST 用例(已修正检视意见) Co-authored-by: hello_simida<wangyi206@huawei.com> # message auto-generated for no-merge-commit merge: !735 merge master into master feat(tests): skill 必须携带 evals 用例(S-EVAL-01)+ 补充 ST 用例(已修正检视意见) Created-by: hello_simida Commit-by: hello_simida Merged-by: cann-robot Description: ## 描述 本 PR 完善 ST 测试体系,包含两部分: ### 1. 新增 L1 硬性门禁 S-EVAL-01 - 新增 tests/unit/skills/test-evals-required.sh(S-EVAL-01):所有 skill 必须携带 evals/evals.json(文件存在 + 合法 JSON + 顶层 skill_name 字段),缺失或损坏即拦截 CI,并在 run-tests.sh 的 unit 与 incremental 测试清单中登记。 - 修复失效的 S-STR-20 规则(skill_validator.py):由检查过时的 evals/evals.md 改为校验 evals/evals.json,消除对存量 skill 的误报警告。 - 存量补齐:为 12 个缺失评测用例的 Skill 补充 evals/evals.json(cannbot-skill-reviewer、pypto-docs-search、pypto-general-debug、pypto-memory-template、pypto-op-construct、pypto-op-knowledge、pypto-op-plan、pypto-op-review、pypto-op-verify、pypto-orchestration-manual、triton-simulator-optimizer、runtime_migration);修复 ascendc-mc2-best-practice 损坏的 evals/evals.json(尾随逗号)。新增用例均设 "disabled": true,ST 执行时跳过,后续逐个启用。 ### 2. 补充 ST 用例覆盖率规范文档 新增 tests/system/docs/ST_COVERAGE_SPECIFICATION.md,定义针对 AI Agent Skill 的三维覆盖率规范(触发关键词覆盖率、使用场景覆盖率、内容章节覆盖率),包含覆盖等级定义(优秀/良好/需改善/不足)与综合得分计算方式。 ### 检视意见修正(wangyi_ws 评审,本次提交) - 综合得分交叉引用由「附录 C」修正为「附录 A」(公式实际位于附录 A)。 - 综合得分公式移除末尾 /100:各维度覆盖率产出 [0,1] 区间分数,权重和 40+35+25=100 已天然归一化到 [0,100],避免得分被错误缩小 100 倍导致覆盖等级判定失效。 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> ## 测试 L1 单元测试通过:./tests/run-tests.sh --fast(含 S-EVAL-01 全量校验)。 ## 文档更新 - 新增 tests/system/docs/ST_COVERAGE_SPECIFICATION.md - 更新 CHANGELOG.md ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [x] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [x] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [x] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/cannbot-skills!735 | 10 天前 | |
feat(ascendc-port-orchestrator): PR4/5 双层知识库载荷 (RFC #364, +OKF卡) +marketplace 激活(合并原 PR5) Co-authored-by: JamesCao2048<junmingcao@foxmail.com> # message auto-generated for no-merge-commit merge: !611 merge ascendc-port/04-kb into master feat(ascendc-port-orchestrator): PR4/5 双层知识库载荷 (RFC #364, +OKF卡) +marketplace 激活(合并原 PR5) Created-by: junming222 Commit-by: JamesCao2048 Merged-by: cann-robot Description: ## 本 PR 范围 - 提供两个工作流所需的精选知识库: arch22 → arch35 迁移与“前向算子 → 反向算子”生成。 - 保留标准 AscendC FA/L4 模板组装、迁移相关知识、候选卡和 target archive/prior-art 建议材料。 - 目标侧材料只能作为带来源记录的建议,不能替代迁移源 NPU 真值、反向 CPU fp64 autograd 真值,也不能直接作为生成答案。 ## 本地验证 - strict KB audit:717 entries;orphan、duplicate、missing applies_to、dangling ref、ID sequence、SoC scope、template scope 均为 0。 - 模板文件许可证头已补齐;changed-source 许可证头 3/3。 - diff check 与术语内容/路径检查通过。 See merge request: cann/cannbot-skills!611 | 8 天前 | |
fix(init.sh): 修复 ops-lab 目录缺失导致安装失败及补齐 6 工具全量测试看护 Co-authored-by: jiangyixuan2<124090275@link.cuhk.edu.cn> # message auto-generated for no-merge-commit merge: !581 merge fix/tilelang2ascendc-init-ops-lab-missing into master fix(init.sh): 修复 ops-lab 目录缺失导致安装失败及补齐 6 工具全量测试看护 Created-by: jiangyixuan2 Commit-by: jiangyixuan2 Merged-by: cann-robot Description: ## 问题背景 ### #406:ops-lab 目录缺失导致 init.sh 安装失败 tilelang2ascendc-ops-generator/init.sh 硬编码引用 ../../ops-lab,该目录已迁移至 plugins-community/tilelang-op-orchestrator。set -e 下 cd 到不存在的目录导致脚本早期退出,OpenCode 环境无法完成配置。 ### 附带修复的问题 | # | 问题 | 影响范围 | |---|------|----------| | 1 | 11 个插件 $(cd ... && pwd) 无 if [ -d ] 保护,CI 环境下 set -e 提前退出 | catlass / model-infer-optimize / model-infer-sota-approach / ops-code-reviewer / ops-direct-invoke / ops-direct-invoke-flash / ops-registry-invoke / pypto-op-orchestrator / tilelang-op-orchestrator / torch-compile / triton-op-generator | | 2 | model-infer-sota-approach 缺少 CodeArts 适配(7f2f45b 遗漏) | model-infer-sota-approach | | 3 | 5 个 init.sh 首行缺少 shebang,MSYS2/noacl 下 test -x 失败 | catlass-op-generator / ops-code-reviewer / ops-direct-invoke / pypto-op-orchestrator / tilelang-op-orchestrator | | 4 | 3 个 init.sh 用 find -exec basename 生成 manifest,大环境下 fork 失败导致 installed_agents 为空 | model-infer-optimize / model-infer-sota-approach / ops-direct-invoke-flash | | 5 | 10 个 init.sh 用 basename "$d" 外部命令生成 manifest,同上 fork 限制 | ops-direct-invoke / catlass / ops-code-reviewer / torch-compile / tilelang-op-orchestrator / pypto-op-orchestrator / triton-op-generator / tilelang2ascendc-ops-generator / ops-perf-optimize / cuda2ascend | | 6 | cuda2ascend case 语句显式列出工具名,supports_tool() grep 误判为支持 | cuda2ascend | ### 看护缺口 测试只扫描 plugins-official,完全不覆盖 plugins-community;无 CodeArts 静态看护;无 $(cd ... && pwd) 目录存在性检查。 ## 改动清单 ### Bug 修复(14 个 init.sh) | 改动 | 文件 | |------|------| | ops-lab + ops 路径加 if [ -d ] 保护 | tilelang2ascendc-ops-generator | | SHARED/INFRA/MODEL/ASCEND_AGENT_ROOT 加 if [ -d ] 保护 | 11 个插件 | | CodeArts 适配(参数解析 / CONFIG_ROOT / Quick Start / 健康检查) | model-infer-sota-approach(9 处)、ops-perf-optimize | | 添加 #!/bin/bash 首行 | 5 个插件 | | find -exec basename -> find -printf '%f\n'(无需 fork) | 3 个插件 | | basename "$d" -> ${d##*/}(纯 bash 参数展开) | 10 个插件 | | claude|trae|... -> c[l]aude|t[r]ae|...(字符类避免 grep 误判) | cuda2ascend | ### 测试看护补齐 | 改动 | 说明 | |------|------| | test-init-install.sh 扫描 plugins-official + plugins-community | 修复漏检根因 | | 新增 Check 6:静态检查 $(cd ... && pwd) 引用目录存在性 | 防止此类 bug 再次遗漏 | | test-init-behavior.sh 扫描扩展到两个目录 + supports_tool 跳过逻辑 | 覆盖社区插件 | | 新增 5 个静态 UT(L1):claude / copilot / cursor / trae / opencode | 6 工具全覆盖 | | 新增 18 个 scenario(L2):6 工具 x project/global(trae 含 ide/plugin/cli 变体) | 行为测试全覆盖 | | run-tests.sh fast 列表加入 5 个 tool UT | CI 自动执行 | | 12 个插件 .gitignore 添加 .github 和 .copilot | CO-07 合规 | ### 其他 - .gitattributes:加 *.xml text eol=lf(OAT.xml CRLF 修复) ## 测试覆盖 ### 静态 UT(L1)- 6 工具全覆盖 | 测试 | 规则 | 结果 | |------|------|------| | test-init-opencode.sh | OC-01 ~ OC-07 | 98 passed | | test-init-claude.sh | CL-01 ~ CL-07 | 91 passed | | test-init-trae.sh | TR-01 ~ TR-07 | 84 passed | | test-init-cursor.sh | CU-01 ~ CU-07 | 84 passed | | test-init-copilot.sh | CO-01 ~ CO-07 | 84 passed | | test-init-codearts.sh | CA-01 ~ CA-07 | 91 passed | | test-init-install.sh | Check 1 ~ 6 | 267 passed | | test-safe-install.sh | — | 14 passed | ### 行为测试(L2)- 6 工具 x 18 scenario | 工具 | scenario 数 | |------|------------| | opencode | project + global = 2 | | claude | project + global = 2 | | trae | project(ide/plugin/cli) + global(ide/plugin/cli/unknown/priority) = 8 | | codearts | project + global = 2 | | cursor | project + global = 2 | | copilot | project + global = 2 | ## 变更统计 38 files changed, 2159 insertions(+), 124 deletions(-) Closes #406 See merge request: cann/cannbot-skills!581 | 27 天前 | |
feat(catlass-op): 新增精度验证模板、优化开发流程文档与串讲机制 Co-authored-by: Haoran Xia<haoran.xia@qq.com> # message auto-generated for no-merge-commit merge: !644 merge dev-xhr into master feat(catlass-op): 新增精度验证模板、优化开发流程文档与串讲机制 Created-by: tireudy Commit-by: Haoran Xia Merged-by: cann-robot Description: 描述: ## 变更内容 - 新增 verify_result_template.py 精度验证脚本模板,供算子开发阶段直接复用 - 更新 precision-verification.md 精度验证参考文档,补充验证标准与流程说明 - 完善 AGENTS.md 串讲流程与仲裁机制说明 - task-prompts.md 补充设计串讲(Step 2.5)步骤模板 ## 目的 统一 catlass 算子开发流程中精度验证的标准化模板,并补全设计串讲环节的 prompt 模板,使 CANNBot 工作流各阶段衔接更完整。 See merge request: cann/cannbot-skills!644 | 16 天前 | |
fix(docs): 清理全仓库 ops-lab/ 历史废弃目录的残留引用 Co-authored-by: jiangyixuan2<124090275@link.cuhk.edu.cn> Co-authored-by: gitcode-bot<noreply@gitcode.com> # message auto-generated for no-merge-commit merge: !645 merge fix/issue-435-remove-ops-lab-refs into master fix(docs): 清理全仓库 ops-lab/ 历史废弃目录的残留引用 Created-by: jiangyixuan2 Commit-by: gitcode-bot;jiangyixuan2 Merged-by: cann-robot Description: ### 描述 ops-lab/ 为历史废弃目录,此前已被整体移除,但全仓库仍有大量文件残留对该目录的引用(目录结构图、路径引用、扫描配置、脚本逻辑等),误导用户。本次统一清理这些失效引用。 ### 修改范围 15 个文件,+23/-32 行。 #### 一、目录结构图与规范表(删除 ops-lab/ 条目) | 文件 | 修改 | |------|------| | README.md | 删除目录结构图中 ├── ops-lab/ 行 | | AGENTS.md | 删除目录结构图中 ├── ops-lab/ 行 | | docs/architecture-design.md | 删除目录结构图中 ├── ops-lab/ 行 | | docs/STANDARDS.md | 删除目录规范表中 ops-lab/ 行 | | docs/CONTRIBUTING.md | 删除"实验性 Skill"整行(原指向 ops-lab/)| #### 二、ST 测试指南 | 文件 | 修改 | |------|------| | tests/system/docs/ST_DESIGN_AND_DEVELOPMENT_GUIDE.md | 删除 skill_dirs 配置中 "ops-lab";§3.9 标题由 ops-lab/ 改为 ops/ — TileLang 算子开发,5 个 TileLang skill 路径由 ops-lab/tilelang/skills/xxx 改为实际位置 ops/xxx | #### 三、其他文档 | 文件 | 修改 | |------|------| | ops/ascendc-registry-invoke-template/references/binary-json-dtype-guide.md | 删除"ops-lab 模板不适用"说明 | | plugins-community/tilelang2ascendc-ops-generator/quickstart.md | 修正错误目录名 ascendc-ops-lab-developer → tilelang2ascendc-ops-generator | #### 四、代码与配置(移除 ops-lab 扫描目录与处理分支) | 文件 | 修改 | |------|------| | infra/cannbot-skill-reviewer/scripts/review_skill.py | 路径前缀元组移除 "ops-lab/" | | plugins-community/install-helper/scripts/gen-embedded.cjs | SCAN_DIRS 移除 "ops-lab" | | plugins-community/install-helper/src/config/repository.yaml | scanDirs 移除 - ops-lab | | plugins-community/install-helper/src/core/scanner.ts | 默认 skillDirs 移除 "ops-lab"(2 处)| | plugins-community/tilelang2ascendc-ops-generator/init.sh | 删除 ops-lab 目录检查块、移除 SHARED_SKILL_ROOT_OPS_LAB 变量及 5 个 for 循环引用 | | tests/run-tests.sh | 注释移除 ops-lab/*/skills/ 模式 | #### 五、变更日志 | 文件 | 修改 | |------|------| | CHANGELOG.md | 新增 2026-07-20 清理 ops-lab 记录(历史记录中的 ops-lab 引用保持原样)| ## 关联 Issue Issue [#435](https://gitcode.com/cann/cannbot-skills/issues/435) See merge request: cann/cannbot-skills!645 | 23 天前 | |
feat(ops/ops-profiling): 新增 msopprof-visualization 子技能 Co-authored-by: 逋客<2981655710@qq.com> # message auto-generated for no-merge-commit merge: !718 merge feat/ops-profiling-msopprof-visualization into master feat(ops/ops-profiling): 新增 msopprof-visualization 子技能 Created-by: buke0719 Commit-by: 逋客 Merged-by: cann-robot Description: ## 描述 【ops-profiling】新增子技能 ascendc-msopprof-visualization:将上板采集的算子性能数据(msOpProf)渲染为交互式 HTML 性能报告,包含 Details、Roofline、Timeline、Cache、Source、片上内存、Warp Stall、指令时间线、Raw Data 页面。 改动原因:现有 ops-profiling 链路输出 CSV + markdown,缺少交互式可视化能力;本子技能作为 profiling 的补充,与现有 bash 采集链双路并行、互不替代(加速比对比 / 批量 / MC² 场景仍走 msprof_profile_run.sh)。 - 最小非重复采集:BasicInfo 预检、replay 语义去重、进程组隔离与熔断保护、已完成采集安全复用 - 基于已有采集目录(collection_manifest.json)可直接重渲染,不重复上板 - 主 SKILL.md 增加可视化路由:仅当用户提到可视化且存在上板数据时加载本子技能 - evals 追加 2 个路由用例(正向可视化路由、负向对比测试不路由) ## 关联的Issue #473 ## 测试 - scripts/self_check.py 静态结构检查 + 真实采集数据集成测试全部通过(9 页面渲染、不可用模块诊断页、JS 语法、性能门禁 3.3s / 256MiB) - 仓库 tests/run-tests.sh 的 unit/skills/test-structure.sh 与 unit/skills/test-content.sh 通过 - 浏览器冒烟(jsdom):78 项检查通过,无 JS 错误 ## 文档更新 - ops/ops-profiling/SKILL.md(新增可视化路由章节) - 新增 ops/ops-profiling/ascendc-msopprof-visualization/SKILL.md 及 references/ 5 篇参考文档 ## 类型标签 - [x] 🌟 新特性 See merge request: cann/cannbot-skills!718 | 9 天前 | |
Initial commit | 4 个月前 | |
【collaborative-agent-kernel-evolution】新增 CAKE2 进化式 AscendC 算子生成 Team(仅 Vector 算子) Co-authored-by: Junyifannnn<fan.junyi@huawei.com> # message auto-generated for no-merge-commit merge: !313 merge feat/add-cake-plugin into master 【collaborative-agent-kernel-evolution】新增 CAKE2 进化式 AscendC 算子生成 Team(仅 Vector 算子) Created-by: gcw_P2Mh5H1S Commit-by: Junyifannnn Merged-by: cann-robot Description: ## 描述 **新特性**: 【collaborative-agent-kernel-evolution】新增 plugins-community/collaborative-agent-kernel-evolution —— 进化式 AscendC 算子生成 Team(仅 Vector 算子)。 含 3 个 Agent 与 19 个内置 Skill,覆盖「算子描述生成 → PyTorch 参考 → functional 转换 → AscendDSL baseline → DSL lowering 到 AscendC → 编译评估 →(可选)进化式多变体性能优化」全流程: - cake(primary):标准单算子生成主流程 - cake-evo(primary):并行多变体进化优化 - cake-partial(subagent):被 cake-evo 调度的半程生成子任务 自包含单插件(目录 plugins-community/collaborative-agent-kernel-evolution/,对齐 ops-easyasc-dsl 自包含形态) ## 关联的Issue 关联 Issue [#230](https://gitcode.com/cann/cannbot-skills/issues/230) ## 测试 - **L1 结构门禁 skill_validator.py**:19 skills + 3 agents **0 error**(warn-only:6× S-CON-05、2× S-CON-06「缺错误处理章节」,不阻断) - **tests/run-tests.sh --fast**:10 项全过(初次 test-line-endings 报 6 个 CRLF 文件,均为插件内 vendored 外部文档,已全部转 LF,复跑 PASS) ## 文档更新 - 新增 plugins-community/collaborative-agent-kernel-evolution/(含 README / docs / tests) - 根 .claude-plugin/marketplace.json 注册 cake(source ./plugins-community/collaborative-agent-kernel-evolution,category development) - 更新根 CHANGELOG.md(2026-06-02 条目) ## 类型标签 - [x] 🌟 新特性 ## AscendC 算子评测结果 | Operator | Job ID | Cases | Score | Avg speedup | Rel path | |---|---|---:|---:|---:|---|---| | apply_rotary_pos_emb | job_940a45830a2f | 20/20 | 63.339075 | 0.355671 | level2/apply_rotary_pos_emb | | softmax | job_5ec935012955 | 20/20 | 68.015671 | 0.661441 | level2/softmax | | topk | job_bc7b660e83a6 | 20/20 | 54.233631 | 0.119558 | level3/top_k | ## apply_rotary_pos_emb - Job: job_940a45830a2f; operator: ApplyRotaryPosEmb; cases: 20/20; score: 63.339075; avg_speedup: 0.355671. | # | Case ID | Elapsed us | Baseline us | HW limit us | Speedup | Speedup vs HW | Perf score | |---:|---|---:|---:|---:|---:|---:|---:| | 1 | level2/apply_rotary_pos_emb_1 | 182.06 | 89.56 | 35.02 | 0.491926 | 0.192354 | 0.270563 | | 2 | level2/apply_rotary_pos_emb_2 | 779.98 | 113.24 | 59.22 | 0.145183 | 0.075925 | 0.069723 | | 3 | level2/apply_rotary_pos_emb_3 | 125.34 | 78.24 | 14.56 | 0.624222 | 0.116164 | 0.365012 | | 4 | level2/apply_rotary_pos_emb_4 | 140.26 | 246.2 | 32.77 | 1.755312 | 0.233638 | 0.665057 | | 5 | level2/apply_rotary_pos_emb_5 | 3001.06 | 391.07 | 140.36 | 0.130311 | 0.04677 | 0.080578 | | 6 | level2/apply_rotary_pos_emb_6 | 654.54 | 347.8 | 34.78 | 0.531366 | 0.053137 | 0.335578 | | 7 | level2/apply_rotary_pos_emb_7 | 146.94 | 73.08 | 23.1 | 0.497346 | 0.157207 | 0.287539 | | 8 | level2/apply_rotary_pos_emb_8 | 360.54 | 74.4 | 26.64 | 0.206357 | 0.073889 | 0.125138 | | 9 | level2/apply_rotary_pos_emb_9 | 178.12 | 198.1 | 19.81 | 1.112172 | 0.111217 | 0.529679 | | 10 | level2/apply_rotary_pos_emb_10 | 274.06 | 163 | 16.3 | 0.59476 | 0.059476 | 0.362706 | | 11 | level2/apply_rotary_pos_emb_11 | 1398.00 | 186.7 | 98.62 | 0.133548 | 0.070544 | 0.063483 | | 12 | level2/apply_rotary_pos_emb_12 | 896.26 | 48 | 4.8 | 0.053556 | 0.005356 | 0.04622 | | 13 | level2/apply_rotary_pos_emb_13 | 595.38 | 425.07 | 100 | 0.713947 | 0.16796 | 0.396209 | | 14 | level2/apply_rotary_pos_emb_14 | 27.18 | 10 | 1 | 0.367918 | 0.036792 | 0.255827 | | 15 | level2/apply_rotary_pos_emb_15 | 86.22 | 21.7 | 2.17 | 0.251682 | 0.025168 | 0.18855 | | 16 | level2/apply_rotary_pos_emb_16 | 82.48 | 41.34 | 4.17 | 0.501212 | 0.050558 | 0.321874 | | 17 | level2/apply_rotary_pos_emb_17 | 5265.48 | 2621.60 | 262.16 | 0.497884 | 0.049788 | 0.320456 | | 18 | level2/apply_rotary_pos_emb_18 | 97.2 | 43.9 | 4.39 | 0.451646 | 0.045165 | 0.298594 | | 19 | level2/apply_rotary_pos_emb_19 | 27.12 | 10 | 1 | 0.368732 | 0.036873 | 0.256264 | | 20 | level2/apply_rotary_pos_emb_20 | 1260.70 | 183.04 | 54.04 | 0.145189 | 0.042865 | 0.096581 | ## softmax - Job: job_5ec935012955; operator: Softmax; cases: 20/20; score: 68.015671; avg_speedup: 0.661441. | # | Case ID | Elapsed us | Baseline us | HW limit us | Speedup | Speedup vs HW | Perf score | |---:|---|---:|---:|---:|---:|---:|---:| | 1 | level2/softmax_1 | 19.42 | 15.7 | 1.57 | 0.808445 | 0.080844 | 0.441839 | | 2 | level2/softmax_2 | 30.96 | 37.98 | 8.74 | 1.226744 | 0.2823 | 0.568208 | | 3 | level2/softmax_3 | 104.2 | 91.76 | 25.17 | 0.880614 | 0.241555 | 0.457286 | | 4 | level2/softmax_4 | 2175.34 | 1006.60 | 100.66 | 0.462732 | 0.046273 | 0.303943 | | 5 | level2/softmax_5 | 458.2 | 422.73 | 139.81 | 0.922588 | 0.305129 | 0.470506 | | 6 | level2/softmax_6 | 1907.08 | 786.04 | 101.69 | 0.412169 | 0.053322 | 0.274868 | | 7 | level2/softmax_7 | 22.42 | 20.04 | 3.14 | 0.893845 | 0.140054 | 0.467109 | | 8 | level2/softmax_8 | 61.92 | 58.12 | 17.49 | 0.93863 | 0.282461 | 0.477663 | | 9 | level2/softmax_9 | 1044.48 | 412.79 | 50.08 | 0.395211 | 0.047947 | 0.267266 | | 10 | level2/softmax_10 | 21.82 | 14.2 | 1.55 | 0.650779 | 0.071036 | 0.384265 | | 11 | level2/softmax_11 | 2669.88 | 1063.10 | 108.09 | 0.398183 | 0.040485 | 0.271557 | | 12 | level2/softmax_12 | 61.3 | 62.58 | 14.59 | 1.020881 | 0.23801 | 0.506758 | | 13 | level2/softmax_13 | 2246.58 | 30 | 3 | 0.013354 | 0.001335 | 0.011891 | | 14 | level2/softmax_14 | 238.52 | 227.3 | 22.73 | 0.95296 | 0.095296 | 0.486654 | | 15 | level2/softmax_15 | 30.6 | 30.46 | 4.56 | 0.995425 | 0.14902 | 0.498652 | | 16 | level2/softmax_16 | 115.28 | 15.7 | 1.57 | 0.13619 | 0.013619 | 0.110529 | | 17 | level2/softmax_17 | 19.98 | 18.64 | 4.35 | 0.932933 | 0.217718 | 0.477607 | | 18 | level2/softmax_18 | 24.9 | 20.12 | 3.14 | 0.808032 | 0.126104 | 0.438307 | | 19 | level2/softmax_19 | 119.64 | 31.3 | 3.13 | 0.261618 | 0.026162 | 0.194706 | | 20 | level2/softmax_20 | 1870.84 | 219.8 | 21.98 | 0.117487 | 0.011749 | 0.096654 | ## topk - Job: job_bc7b660e83a6; operator: TopK; cases: 20/20; score: 54.233631; avg_speedup: 0.119558. | # | Case ID | Elapsed us | Baseline us | HW limit us | Speedup | Speedup vs HW | Perf score | |---:|---|---:|---:|---:|---:|---:|---:| | 1 | level3/top_k_1 | 2431.10 | 10.9 | 1.09 | 0.004484 | 0.000448 | 0.004021 | | 2 | level3/top_k_2 | 279.02 | 21.8 | 2.18 | 0.078131 | 0.007813 | 0.066181 | | 3 | level3/top_k_3 | 995.88 | 174.8 | 17.48 | 0.175523 | 0.017552 | 0.13852 | | 4 | level3/top_k_4 | 281395.82 | 1398.10 | 139.81 | 0.004968 | 0.000497 | 0.004454 | | 5 | level3/top_k_5 | 2508.46 | 1398.10 | 139.81 | 0.557354 | 0.055735 | 0.346929 | | 6 | level3/top_k_6 | 6939698.16 | 1398.10 | 139.81 | 0.000201 | 2.015e-05 | 0.000181 | | 7 | level3/top_k_7 | 74.9 | 10.9 | 1.09 | 0.145527 | 0.014553 | 0.117316 | | 8 | level3/top_k_8 | 3213.32 | 21.5 | 2.15 | 0.006691 | 0.000669 | 0.00599 | | 9 | level3/top_k_9 | 97.66 | 13.8 | 1.38 | 0.141307 | 0.014131 | 0.114259 | | 10 | level3/top_k_10 | 95309.40 | 1035.20 | 103.52 | 0.010861 | 0.001086 | 0.009691 | | 11 | level3/top_k_11 | 104.16 | 10.9 | 1.09 | 0.104647 | 0.010465 | 0.086906 | | 12 | level3/top_k_12 | 111.12 | 22.8 | 2.28 | 0.205184 | 0.020518 | 0.158627 | | 13 | level3/top_k_13 | 4755.26 | 14.3 | 1.43 | 0.003007 | 0.000301 | 0.0027 | | 14 | level3/top_k_14 | 2448.26 | 20.8 | 2.08 | 0.008496 | 0.00085 | 0.007595 | | 15 | level3/top_k_15 | 19245.22 | 170.5 | 17.05 | 0.008859 | 0.000886 | 0.007917 | | 16 | level3/top_k_16 | 211.92 | 126.8 | 12.68 | 0.598339 | 0.059834 | 0.364182 | | 17 | level3/top_k_17 | 80.84 | 21.9 | 2.19 | 0.270905 | 0.027091 | 0.200386 | | 18 | level3/top_k_18 | 6133.36 | 24.4 | 2.44 | 0.003978 | 0.000398 | 0.003569 | | 19 | level3/top_k_19 | 184.64 | 10.9 | 1.09 | 0.059034 | 0.005903 | 0.050734 | | 20 | level3/top_k_20 | 5940.70 | 21.8 | 2.18 | 0.00367 | 0.000367 | 0.003293 | ## 未来三个月的计划 ### 第 1 个月 —— 完善 补全 reduce类,数学函数类,排序类算子的生成与优化skill和harness ### 第 2 个月 —— 拓展CV融合算子 增加对CV类融合算子如quant_batch_matmul,grouped_matmul_swiglu_quant等的生成适配,保障生成精度 ### 第 3 个月 —— 拓展attention算子 增加对attention类算子的适配 See merge request: cann/cannbot-skills!313 | 23 天前 | |
refactor(model-infer): merge sota-approach into optimize with entry-intent routing Co-authored-by: zihengwang2<wangziheng8@huawei.com> # message auto-generated for no-merge-commit merge: !745 merge merge-sota-into-optimize into master refactor(model-infer): merge sota-approach into optimize with entry-intent routing Created-by: zihengwang2 Commit-by: zihengwang2 Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述您的改动,包括改动的原因和所采取的方法。 ### 举例: #### 新特性 New Features - 【仿真 ops-simulator】新增Ascend 950 仿真Skill:支持 Ascend 950 仿真,并且输出性能分析报告和流水线图。 - 【PyPTO】【pypto-op-design】新增 Skill:pypto-op-design,PyPTO算子方案设计,含快速参考和设计模板。 #### 问题修复 Bug Fix 【算子直调 ops-direct-invoke】修改verify_environment.sh脚本,返回environment.json 固定为1的bug,应该按实际设备的npu count返回。 --> 原 model-infer-sota-approach 与 model-infer-optimize 是两个独立 plugin,plugin 数量增多带来重复的注册面与维护成本。本 PR 将二者归并为单一 plugin,由入口意图分流到两条互补工作流。 - 归并为一个 plugin model-infer-optimize,保留两条独立 workflow: - 基础流程 optimize-workflow.md:从零适配、固定阶段优化到 baseline - 探索流程 sota-approach-workflow.md:baseline 之上 profiling 驱动的探索式优化 - AGENTS.md 增加强制入口意图分流规则(无 baseline / 固定阶段 / profiling 探索三档判据,含意图不明时的兜底澄清) - 6 个 model-infer-sota-* agent、workflow 及子引用整体搬入 optimize,progress_template 解撞更名,删除死代码 - 撤销独立 sota-approach 注册:marketplace、白名单、install-helper、feature-list、README 全部归并到 optimize 一处 - pre_tool_use hook 角色写保护扩展到 4 个 sota 只读 agent(scenario/profile-analyzer/candidate/reviewer) - evals 合并为 7 用例,CHANGELOG 追加归并条目,设计文档改指向 optimize plugin 并修复死链 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单的链接。--> 关联 issue [#480](https://gitcode.com/cann/cannbot-skills/issues/480) ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🌟 新特性 - [ ] ✨ 特性增强 - [ ] 🐛 Bug 修复 - [ ] ⚡ 性能优化 - [ ] 🧪 测试用例 - [ ] 📦 构建 / CI - [x] 📝 文档更新 - [ ] 🔧 配置变更 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [x] ♻️ 代码重构 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: ## 流水线故障排查 <!-- 如果下方的流水线检查未通过,可参考以下指引进行自助修复 --> > **UT_Test 未通过?** > 请在下方流水线表格的 **UT_Test** 行,点击右侧的 >>>>> 下载 **CANNBot-skills UT 测试报告**(HTML 格式)。 > 打开报告后,展开页面中的「UT Test 失败修复指南」,复制其中的提示词并粘贴给 Agent,Agent 将根据日志自动定位并修复问题。 > > 示例: >  See merge request: cann/cannbot-skills!745 | 9 天前 | |
feat(install-helper): 跨平台声明式安装引擎(Linux/macOS/Windows)+ npm 多包分发 + 安全性修复 + 测试用例覆盖 Co-authored-by: yanhf<yanhaifeng5@huawei.com> # message auto-generated for no-merge-commit merge: !489 merge master into master feat(install-helper): 跨平台声明式安装引擎(Linux/macOS/Windows)+ npm 多包分发 + 安全性修复 + 测试用例覆盖 Created-by: yanhf Commit-by: yanhf Merged-by: cann-robot Description: ## 描述 本 PR 对 install-helper 工具进行了系统性重构,实现跨平台声明式安装、npm 多包分发、安全性修复和代码质量全面提升,并补充完善的测试覆盖。共 98 个 commit,修改 74 个文件,+4301 / -753 行。 ### 新特性 #### 1. 声明式 Plugin 安装引擎(plugin-installer.ts) - 新增 plugin-installer.ts,通过 Node.js 原生执行安装(symlink + 外部仓库克隆 + manifest 写入),无需 bash/sh - 安装清单统一到 plugins.d/*.yml,不再侵入插件目录(删除 10 个 plugin-manifest.json) - PluginEntry 类型合并安装清单字段(installSkills/installAgents/configFile/externalRepos/configRootConfigLink/configRootLink) - 外部仓库双 symlink(configRoot + 项目根目录)+ workflows symlink,通过 configRootConfigLink/configRootLink 字段精确控制,与 init.sh 行为完全一致 - symlink → copy 自动降级(Windows 非 Developer Mode) - installer.ts 优先走 manifest 引擎,无安装清单时 fallback 到 init.sh - **per-plugin manifest**:每个插件写入独立的 ${pluginId}-manifest.json,多插件安装不再互相覆盖 #### 2. npm optionalDependencies 跨平台分发 - 主包 @cannbot-ai/install-helper 包含 wrapper 脚本 + JS fallback - 5 个平台子包 @cannbot-ai/install-helper-{linux/darwin/windows}-{x64/arm64},Bun 编译独立二进制 - bin/install-helper.js wrapper:优先执行平台二进制,fallback 到 JS - npm 自动安装匹配平台的子包(os+cpu 约束) #### 3. 跨平台零依赖安装 + 通道选择 - install.sh(Linux/macOS):从 npm registry 下载 tarball 解压二进制,无需 Node.js - macOS 兼容:grep -oP → grep -o + sed,/dev/tty 直接重定向,codesign 本地重签名 - 下载进度条(--progress-bar) - curl | bash 管道模式下通过 /dev/tty 重定向自动启动向导 - PATH 自动写入 .bashrc/.zshrc(去重 + RC 文件存在性检查) - npmjs.org + npmmirror 双源镜像回退 - install.ps1(Windows 原生):PowerShell 脚本,通过 gitcode raw 分发(iwr -useb | iex) - TLS 1.2 设置(PS 5.1 兼容),$ProgressPreference = "SilentlyContinue" 解决下载性能问题 - $ErrorActionPreference = "Stop" + 全局 trap 错误捕获(防止窗口闪退) - ExecutionPolicy 自动修复(Restricted → RemoteSigned,CurrentUser scope) - 镜像回退 + 错误列表收集 - **通道选择机制**:用户显式指定安装通道,不再跨 tag 比较 semver - latest(默认):仅查询 latest tag - beta:仅查询 beta tag - 显式版本号:直接使用,跳过查询 - install.sh: bash -s -- beta,install.ps1: $env:CANNBOT_CHANNEL = "beta" - **版本检查跳过下载**:本地版本与远程版本相同时跳过下载(install.sh Path A + Path B + install.ps1),秒级启动 #### 4. Bun 编译独立二进制 - scripts/build-npm-packages.cjs:一键构建 5 个平台子包 + 自动同步 optionalDependencies - scripts/publish-npm.cjs:一键发布子包(间隔 12s)+ 主包 - 构建时注入版本号(--define INSTALL_HELPER_VERSION) - i18n locale + plugins 数据内嵌到二进制(embedded-plugins.json) - build-binaries.sh:改用 gen-embedded.cjs 生成完整 embedded-plugins.json(删除覆盖完整输出的内联 JS) #### 5. Plugin 安装改为单选 - checkbox(多选)改为 select(单选),每个插件有独立 AGENTS.md,禁止同时安装多个 ### Bug 修复 #### 安全性(P0) - **S1**:parseFrontmatter 验证 skill name 仅允许 [a-zA-Z0-9._-],防止路径遍历 - **S2**:symlink 安装时 realpathSync 移到 unlinkSync 之前,防止源损坏时丢失已有链接 - **S3**:uninstall 增加 isSafePath 过滤(path.sep 替代硬编码 /),仅允许 configRoot/installPath 范围内路径被删除 - **S4**:createBackup 失败时中止安装并警告,不再静默覆盖 AGENTS.md #### 错误处理(P1) - **E1**:git pull 失败时 warn 提示使用缓存数据 - **E2**:config/record/YAML 解析失败时 warn 提示文件损坏 - **E3**:record 写入失败时 warn 提示卸载可能不可用 - **E4**:新增 atomicWriteFileSync(write-temp + rename),config/record/cache 改为原子写 - **E5**:install/update 取消操作统一输出提示 #### 跨平台(P0/P1) - **C1**:install.sh grep -oP → grep -o + sed(macOS BSD grep 兼容) - **C2**:uninstall.ts isSafePath base + "/" → base + sep(Windows 路径分隔符) - **C3**:installer.ts findShell() 检测 bash/sh 可用性(Windows 无 sh 时提示) - **X1**:Windows 上 bash → sh → findShell() 检测 - **X2**:Windows 上 which → where - **X3**:symlink EPERM 失败时提示开启 Windows 开发者模式 - **X4**:split("/") 改为 basename() 适配 Windows 路径分隔符 - **M2**:git clone 失败时删除 partial 目录,防止下次跳过克隆 - **M3**:installConfigFile 先 realpathSync 成功再 unlinkSync,防止源损坏时丢失配置 - **M6**:SIGINT handler 退出码 0 → 130(标准 SIGINT 退出码) - **M7**:CANNBOT_REPO_PATH/customPath 指定的仓库跳过 git pull,不破坏用户工作区 - **M8**:wrapper exit code 用 code ?? (signal ? 1 : 0),信号死亡不再误报成功 - **M9**:scanInstalledFiles 接受 externalRepoNames 参数,从 YAML 动态获取 - **macOS Gatekeeper**:下载后 codesign --sign - --force 本地重签名 + 运行检测 + npx fallback - **Ctrl+C**:增加 unhandledRejection 处理(Bun 兼容),优雅退出不抛堆栈 - **Windows 路径拼接**:configRoot + "/skills/" → join(configRoot, "skills") #### 代码审查修复(Critical/High/Medium) - **C1**:types/index.ts 删除孤立的重复 PluginEntry 接口体(TypeScript 语法错误) - **H1**:manifest.ts verifyPluginFilesExist 使用 getAgentsFileName(tool) 替代硬编码 AGENTS.md,project level 路径统一(修复 Claude/Trae/Cursor/Copilot 安装检测) - **H2**:plugin-installer.ts manifest 写入改为 per-plugin ${pluginId}-manifest.json(防止多插件安装互相覆盖) - **H3**:build-binaries.sh 删除覆盖完整输出的内联 JS,改用 gen-embedded.cjs - **M1**:7 个 plugins.d/*.yml 文件的 skills/agents 计数修正(与实际 installSkills/installAgents 一致) - **M5**:installer.ts 重新安装同一插件时也创建备份(不仅限于不同插件) #### 安装脚本 Windows 兼容性修复 - install.ps1 exit N → return(irm | iex 上下文中 exit 关闭整个 PowerShell 进程) - install.ps1 & npm → & npm.cmd(Node.js v24 生成 npm.ps1 被 ExecutionPolicy 阻止) - install.ps1 移除 2>&1(npm stderr 触发 ErrorActionPreference=Stop 终止性错误) - install.ps1 全局 trap 错误捕获(防止未预期错误导致窗口闪退) - install.ps1 ExecutionPolicy 自动修复(Restricted → RemoteSigned) - install.ps1 纯英文消息(irm 用 Latin-1 解码 UTF-8 中文会乱码) - install.ps1/install.sh 从 jsDelivr CDN 改为 gitcode raw(国内访问稳定 + 无 CDN 缓存问题) #### symlink 同源跳过(Windows EPERM 修复) - **skill-installer.ts**:installSkills 中检测 symlink 已指向相同源 → 跳过(使用 readlinkSync 替代 realpathSync 避免 Windows EPERM) - **plugin-installer.ts**:installLink 中检测 symlink 已指向相同源 → 返回 "skipped"(同样使用 readlinkSync) - 路径比较用 replace(/\\/g, "/").toLowerCase() 规范化(跨平台) - readlinkSync 失败时也跳过(不尝试 unlinkSync 避免 EPERM) - rmdirSync → rmSync(废弃 API 替换) - startsWith("/") → isAbsolute()(Windows 绝对路径检测) ### 代码重构 - 消除 6 组重复函数(isSymlink×3, isDirectory×2, getAgentsFileName×2 等),提取到 utils/fs-helpers.ts - 删除 22 个死导出 + 7 个死 i18n key - 工具数组硬编码 5 处统一引用 VALID_TOOLS - magic string __back__/__cancel__ 提取到 utils/constants.ts - readAllRecords 硬编码 plugin ID 改用 getAllPlugins() - 版本号从 package.json 动态读取,消除双源 - list 命令移除 Skills/Agents 计数列,替换为描述列 - 统一插件配置到 YAML(删除 10 个 plugin-manifest.json) - tsc --noEmit 0 错误(修复 externalRepos undefined 类型) ### i18n 改进 - skill category 名随语言切换(zh_CN/en_US) - 10+ 硬编码英文错误字符串提取为 i18n key - uninstall 全角括号改为 i18n 模板 ### 架构优化 - ensureRepoAndScan 自动 git pull + mergeDynamicPlugins(用户指定路径时跳过 pull) - scanner 新增 runtime scanDir + 插件根级 SKILL.md 扫描 - registry 新增 mergeDynamicPlugins 动态插件发现 - scan cache TTL 可配置 ### 新增测试(148 个测试用例,14 个文件) - scanner.test.ts(8):parseFrontmatter 安全验证(S1 路径遍历防护) - registry.test.ts(7):插件发现 + 别名匹配 - skill-registry.test.ts(11):skill 注册表 + 类别 - paths.test.ts(9):路径验证 + 工具检测 - plugin-installer.test.ts(9):symlink 安装、configRootConfigLink、workflows、skill rename、manifest 写入、多插件不覆盖 - record.test.ts(9):读写一致性、损坏处理、动态 externalRepoNames、skill 去重 - skill-installer.test.ts(10):resolveSkillSourcePath、S2 安全修复、同源跳过、异源更新、损坏修复 - uninstall.test.ts(6):isSafePath C2 安全修复验证 - backup.test.ts(8):备份创建/解析/恢复/删除 - fs.test.ts(9):原子写、符号链接检测、目录检测 - i18n.test.ts(7):翻译、语言切换、常量值 - manifest.test.ts(4):readAllManifests 读取 legacy/per-plugin manifest、writeCannbotManifest per-plugin 写入、多插件不覆盖 - install-scripts.test.ts(27):版本比较、跳过下载决策、镜像排序、架构映射、ExecutionPolicy 决策、安装路径决策、通道解析、通道感知跳过 - bin-wrapper.test.ts(11):平台映射、二进制名、fallback 逻辑 ### 文档优化 - docs/installation-guide.md:按平台分代码块 + 精简冗余说明 - plugins-community/install-helper/README.md:按平台分组 + 删除冗余内容(322→164 行) - README.md:安装部分增加 Windows 安装命令(gitcode raw) ## 关联的Issue 无 ## 测试 - **tsc --noEmit**:0 错误 - **npm test**:148/148 测试通过(14 个文件) - **Linux arm64**:install.sh 全流程 + 10 个插件 install/uninstall 全通过 - **Windows x64**:iwr -useb | iex 安装 + 通道选择(latest/beta)+ 版本跳过下载 + Plugin 安装(ops-direct-invoke 19 skills, 4 agents)+ Skill 安装 + 交互向导 + Ctrl+C 优雅退出全通过 - **Windows 多插件**:先安装 ops-direct-invoke 再安装 ops-direct-invoke-flash,共享 skill 跳过(不报 EPERM 错误) - **外部仓库验证**:asc-devkit/pypto/tilelang-ascend/cann-recipes-infer 的 configRoot + 项目根目录 symlink 全部正确(configRootConfigLink/configRootLink 精确控制) - **workflows symlink**:ops-direct-invoke/catlass-op-generator/model-infer-optimize 正确 - **安全修复验证**:S1(路径遍历)、S2(symlink 数据丢失)、C2(Windows 路径分隔符)、M9(动态 repo 记录)全部有测试覆盖 ## 文档更新 - docs/installation-guide.md:按平台分代码块,精简冗余说明 - plugins-community/install-helper/README.md:按平台分组,322→164 行 - README.md:安装部分增加 Windows 安装命令(gitcode raw) ## 类型标签 - [x] 🌟 新特性 - [x] 🐛 Bug 修复 - [x] 🔒 安全修复 - [x] ♻️ 代码重构 - [x] 🧹 代码清理 - [x] 📝 文档更新 - [x] 🧪 测试用例 - [x] 📦 构建 / CI See merge request: cann/cannbot-skills!489 | 1 个月前 | |
feat(install-helper): 跨平台声明式安装引擎(Linux/macOS/Windows)+ npm 多包分发 + 安全性修复 + 测试用例覆盖 Co-authored-by: yanhf<yanhaifeng5@huawei.com> # message auto-generated for no-merge-commit merge: !489 merge master into master feat(install-helper): 跨平台声明式安装引擎(Linux/macOS/Windows)+ npm 多包分发 + 安全性修复 + 测试用例覆盖 Created-by: yanhf Commit-by: yanhf Merged-by: cann-robot Description: ## 描述 本 PR 对 install-helper 工具进行了系统性重构,实现跨平台声明式安装、npm 多包分发、安全性修复和代码质量全面提升,并补充完善的测试覆盖。共 98 个 commit,修改 74 个文件,+4301 / -753 行。 ### 新特性 #### 1. 声明式 Plugin 安装引擎(plugin-installer.ts) - 新增 plugin-installer.ts,通过 Node.js 原生执行安装(symlink + 外部仓库克隆 + manifest 写入),无需 bash/sh - 安装清单统一到 plugins.d/*.yml,不再侵入插件目录(删除 10 个 plugin-manifest.json) - PluginEntry 类型合并安装清单字段(installSkills/installAgents/configFile/externalRepos/configRootConfigLink/configRootLink) - 外部仓库双 symlink(configRoot + 项目根目录)+ workflows symlink,通过 configRootConfigLink/configRootLink 字段精确控制,与 init.sh 行为完全一致 - symlink → copy 自动降级(Windows 非 Developer Mode) - installer.ts 优先走 manifest 引擎,无安装清单时 fallback 到 init.sh - **per-plugin manifest**:每个插件写入独立的 ${pluginId}-manifest.json,多插件安装不再互相覆盖 #### 2. npm optionalDependencies 跨平台分发 - 主包 @cannbot-ai/install-helper 包含 wrapper 脚本 + JS fallback - 5 个平台子包 @cannbot-ai/install-helper-{linux/darwin/windows}-{x64/arm64},Bun 编译独立二进制 - bin/install-helper.js wrapper:优先执行平台二进制,fallback 到 JS - npm 自动安装匹配平台的子包(os+cpu 约束) #### 3. 跨平台零依赖安装 + 通道选择 - install.sh(Linux/macOS):从 npm registry 下载 tarball 解压二进制,无需 Node.js - macOS 兼容:grep -oP → grep -o + sed,/dev/tty 直接重定向,codesign 本地重签名 - 下载进度条(--progress-bar) - curl | bash 管道模式下通过 /dev/tty 重定向自动启动向导 - PATH 自动写入 .bashrc/.zshrc(去重 + RC 文件存在性检查) - npmjs.org + npmmirror 双源镜像回退 - install.ps1(Windows 原生):PowerShell 脚本,通过 gitcode raw 分发(iwr -useb | iex) - TLS 1.2 设置(PS 5.1 兼容),$ProgressPreference = "SilentlyContinue" 解决下载性能问题 - $ErrorActionPreference = "Stop" + 全局 trap 错误捕获(防止窗口闪退) - ExecutionPolicy 自动修复(Restricted → RemoteSigned,CurrentUser scope) - 镜像回退 + 错误列表收集 - **通道选择机制**:用户显式指定安装通道,不再跨 tag 比较 semver - latest(默认):仅查询 latest tag - beta:仅查询 beta tag - 显式版本号:直接使用,跳过查询 - install.sh: bash -s -- beta,install.ps1: $env:CANNBOT_CHANNEL = "beta" - **版本检查跳过下载**:本地版本与远程版本相同时跳过下载(install.sh Path A + Path B + install.ps1),秒级启动 #### 4. Bun 编译独立二进制 - scripts/build-npm-packages.cjs:一键构建 5 个平台子包 + 自动同步 optionalDependencies - scripts/publish-npm.cjs:一键发布子包(间隔 12s)+ 主包 - 构建时注入版本号(--define INSTALL_HELPER_VERSION) - i18n locale + plugins 数据内嵌到二进制(embedded-plugins.json) - build-binaries.sh:改用 gen-embedded.cjs 生成完整 embedded-plugins.json(删除覆盖完整输出的内联 JS) #### 5. Plugin 安装改为单选 - checkbox(多选)改为 select(单选),每个插件有独立 AGENTS.md,禁止同时安装多个 ### Bug 修复 #### 安全性(P0) - **S1**:parseFrontmatter 验证 skill name 仅允许 [a-zA-Z0-9._-],防止路径遍历 - **S2**:symlink 安装时 realpathSync 移到 unlinkSync 之前,防止源损坏时丢失已有链接 - **S3**:uninstall 增加 isSafePath 过滤(path.sep 替代硬编码 /),仅允许 configRoot/installPath 范围内路径被删除 - **S4**:createBackup 失败时中止安装并警告,不再静默覆盖 AGENTS.md #### 错误处理(P1) - **E1**:git pull 失败时 warn 提示使用缓存数据 - **E2**:config/record/YAML 解析失败时 warn 提示文件损坏 - **E3**:record 写入失败时 warn 提示卸载可能不可用 - **E4**:新增 atomicWriteFileSync(write-temp + rename),config/record/cache 改为原子写 - **E5**:install/update 取消操作统一输出提示 #### 跨平台(P0/P1) - **C1**:install.sh grep -oP → grep -o + sed(macOS BSD grep 兼容) - **C2**:uninstall.ts isSafePath base + "/" → base + sep(Windows 路径分隔符) - **C3**:installer.ts findShell() 检测 bash/sh 可用性(Windows 无 sh 时提示) - **X1**:Windows 上 bash → sh → findShell() 检测 - **X2**:Windows 上 which → where - **X3**:symlink EPERM 失败时提示开启 Windows 开发者模式 - **X4**:split("/") 改为 basename() 适配 Windows 路径分隔符 - **M2**:git clone 失败时删除 partial 目录,防止下次跳过克隆 - **M3**:installConfigFile 先 realpathSync 成功再 unlinkSync,防止源损坏时丢失配置 - **M6**:SIGINT handler 退出码 0 → 130(标准 SIGINT 退出码) - **M7**:CANNBOT_REPO_PATH/customPath 指定的仓库跳过 git pull,不破坏用户工作区 - **M8**:wrapper exit code 用 code ?? (signal ? 1 : 0),信号死亡不再误报成功 - **M9**:scanInstalledFiles 接受 externalRepoNames 参数,从 YAML 动态获取 - **macOS Gatekeeper**:下载后 codesign --sign - --force 本地重签名 + 运行检测 + npx fallback - **Ctrl+C**:增加 unhandledRejection 处理(Bun 兼容),优雅退出不抛堆栈 - **Windows 路径拼接**:configRoot + "/skills/" → join(configRoot, "skills") #### 代码审查修复(Critical/High/Medium) - **C1**:types/index.ts 删除孤立的重复 PluginEntry 接口体(TypeScript 语法错误) - **H1**:manifest.ts verifyPluginFilesExist 使用 getAgentsFileName(tool) 替代硬编码 AGENTS.md,project level 路径统一(修复 Claude/Trae/Cursor/Copilot 安装检测) - **H2**:plugin-installer.ts manifest 写入改为 per-plugin ${pluginId}-manifest.json(防止多插件安装互相覆盖) - **H3**:build-binaries.sh 删除覆盖完整输出的内联 JS,改用 gen-embedded.cjs - **M1**:7 个 plugins.d/*.yml 文件的 skills/agents 计数修正(与实际 installSkills/installAgents 一致) - **M5**:installer.ts 重新安装同一插件时也创建备份(不仅限于不同插件) #### 安装脚本 Windows 兼容性修复 - install.ps1 exit N → return(irm | iex 上下文中 exit 关闭整个 PowerShell 进程) - install.ps1 & npm → & npm.cmd(Node.js v24 生成 npm.ps1 被 ExecutionPolicy 阻止) - install.ps1 移除 2>&1(npm stderr 触发 ErrorActionPreference=Stop 终止性错误) - install.ps1 全局 trap 错误捕获(防止未预期错误导致窗口闪退) - install.ps1 ExecutionPolicy 自动修复(Restricted → RemoteSigned) - install.ps1 纯英文消息(irm 用 Latin-1 解码 UTF-8 中文会乱码) - install.ps1/install.sh 从 jsDelivr CDN 改为 gitcode raw(国内访问稳定 + 无 CDN 缓存问题) #### symlink 同源跳过(Windows EPERM 修复) - **skill-installer.ts**:installSkills 中检测 symlink 已指向相同源 → 跳过(使用 readlinkSync 替代 realpathSync 避免 Windows EPERM) - **plugin-installer.ts**:installLink 中检测 symlink 已指向相同源 → 返回 "skipped"(同样使用 readlinkSync) - 路径比较用 replace(/\\/g, "/").toLowerCase() 规范化(跨平台) - readlinkSync 失败时也跳过(不尝试 unlinkSync 避免 EPERM) - rmdirSync → rmSync(废弃 API 替换) - startsWith("/") → isAbsolute()(Windows 绝对路径检测) ### 代码重构 - 消除 6 组重复函数(isSymlink×3, isDirectory×2, getAgentsFileName×2 等),提取到 utils/fs-helpers.ts - 删除 22 个死导出 + 7 个死 i18n key - 工具数组硬编码 5 处统一引用 VALID_TOOLS - magic string __back__/__cancel__ 提取到 utils/constants.ts - readAllRecords 硬编码 plugin ID 改用 getAllPlugins() - 版本号从 package.json 动态读取,消除双源 - list 命令移除 Skills/Agents 计数列,替换为描述列 - 统一插件配置到 YAML(删除 10 个 plugin-manifest.json) - tsc --noEmit 0 错误(修复 externalRepos undefined 类型) ### i18n 改进 - skill category 名随语言切换(zh_CN/en_US) - 10+ 硬编码英文错误字符串提取为 i18n key - uninstall 全角括号改为 i18n 模板 ### 架构优化 - ensureRepoAndScan 自动 git pull + mergeDynamicPlugins(用户指定路径时跳过 pull) - scanner 新增 runtime scanDir + 插件根级 SKILL.md 扫描 - registry 新增 mergeDynamicPlugins 动态插件发现 - scan cache TTL 可配置 ### 新增测试(148 个测试用例,14 个文件) - scanner.test.ts(8):parseFrontmatter 安全验证(S1 路径遍历防护) - registry.test.ts(7):插件发现 + 别名匹配 - skill-registry.test.ts(11):skill 注册表 + 类别 - paths.test.ts(9):路径验证 + 工具检测 - plugin-installer.test.ts(9):symlink 安装、configRootConfigLink、workflows、skill rename、manifest 写入、多插件不覆盖 - record.test.ts(9):读写一致性、损坏处理、动态 externalRepoNames、skill 去重 - skill-installer.test.ts(10):resolveSkillSourcePath、S2 安全修复、同源跳过、异源更新、损坏修复 - uninstall.test.ts(6):isSafePath C2 安全修复验证 - backup.test.ts(8):备份创建/解析/恢复/删除 - fs.test.ts(9):原子写、符号链接检测、目录检测 - i18n.test.ts(7):翻译、语言切换、常量值 - manifest.test.ts(4):readAllManifests 读取 legacy/per-plugin manifest、writeCannbotManifest per-plugin 写入、多插件不覆盖 - install-scripts.test.ts(27):版本比较、跳过下载决策、镜像排序、架构映射、ExecutionPolicy 决策、安装路径决策、通道解析、通道感知跳过 - bin-wrapper.test.ts(11):平台映射、二进制名、fallback 逻辑 ### 文档优化 - docs/installation-guide.md:按平台分代码块 + 精简冗余说明 - plugins-community/install-helper/README.md:按平台分组 + 删除冗余内容(322→164 行) - README.md:安装部分增加 Windows 安装命令(gitcode raw) ## 关联的Issue 无 ## 测试 - **tsc --noEmit**:0 错误 - **npm test**:148/148 测试通过(14 个文件) - **Linux arm64**:install.sh 全流程 + 10 个插件 install/uninstall 全通过 - **Windows x64**:iwr -useb | iex 安装 + 通道选择(latest/beta)+ 版本跳过下载 + Plugin 安装(ops-direct-invoke 19 skills, 4 agents)+ Skill 安装 + 交互向导 + Ctrl+C 优雅退出全通过 - **Windows 多插件**:先安装 ops-direct-invoke 再安装 ops-direct-invoke-flash,共享 skill 跳过(不报 EPERM 错误) - **外部仓库验证**:asc-devkit/pypto/tilelang-ascend/cann-recipes-infer 的 configRoot + 项目根目录 symlink 全部正确(configRootConfigLink/configRootLink 精确控制) - **workflows symlink**:ops-direct-invoke/catlass-op-generator/model-infer-optimize 正确 - **安全修复验证**:S1(路径遍历)、S2(symlink 数据丢失)、C2(Windows 路径分隔符)、M9(动态 repo 记录)全部有测试覆盖 ## 文档更新 - docs/installation-guide.md:按平台分代码块,精简冗余说明 - plugins-community/install-helper/README.md:按平台分组,322→164 行 - README.md:安装部分增加 Windows 安装命令(gitcode raw) ## 类型标签 - [x] 🌟 新特性 - [x] 🐛 Bug 修复 - [x] 🔒 安全修复 - [x] ♻️ 代码重构 - [x] 🧹 代码清理 - [x] 📝 文档更新 - [x] 🧪 测试用例 - [x] 📦 构建 / CI See merge request: cann/cannbot-skills!489 | 1 个月前 |
CANNBot Skills
📖 安装指南 · 📋 功能清单 · 🏗️ 架构设计 · 🔥 CHANGELOG · 💬 使用样例
📢 项目概述
CANNBot 是面向 CANN 开发的系列智能体,本仓库提供可复用的 Agent Skills 模块,覆盖 Ascend C / Catlass / PyPTO / TileLang / Triton 算子开发、torch.compile 图模式优化、NPU 模型推理端到端优化、Runtime 开发适配等场景。
面向用户:CANN / 昇腾 NPU 各领域开发者(算子开发、图模式、模型推理、Runtime 等),同时欢迎社区开发者共建 Skills 和 Agents。
🚀 快速开始
前置条件
- 任选一种 AI 编程工具:OpenCode / Claude Code / Trae / Cursor / GitHub Copilot / CodeArts
安装
完整安装(推荐,含 Skills + Agents + Workflows,适合端到端开发流程编排):
Linux / macOS
curl -fsSL https://raw.gitcode.com/cann/cannbot-skills/raw/master/install.sh | bash
Windows
iwr -useb https://raw.gitcode.com/cann/cannbot-skills/raw/master/install.ps1 | iex
安装后运行 install-helper 启动交互式向导,或 npx @cannbot-ai/install-helper 免安装运行。
独立 Skill 安装(仅需单个能力,遵循 Agent Skills 开放标准):
# 浏览可用 Skills
npx skills add https://gitcode.com/cann/cannbot-skills.git --list
# 安装单个 Skill(交互式选择目标工具)
npx skills add https://gitcode.com/cann/cannbot-skills.git --skill ascendc-env-check --agent opencode
安装后使用
启动 AI 编程工具,直接用自然语言描述需求:
"检查环境"
"开发一个 Abs 算子,输入 float16,输出 float16"
📖 完整命令参考、手动脚本安装与故障排查详见 安装指南。
📐 开发路径与核心能力
全量 Skills/Agents 清单见 功能清单,使用样例见 Skills 使用样例。
| 领域 / 路径 | 适用场景 | 入口插件 |
|---|---|---|
| Ascend C 直调 | <<<>>> 直接调用核函数 |
ops-direct-invoke / ops-direct-invoke-flash |
| Ascend C 注册调用 | ACLNN/GEIR 接入框架的标准算子 | ops-registry-invoke |
| Catlass | Cube/Matmul 高阶模板拼装 pipeline | catlass-op-generator |
| PyPTO | 昇腾原生 Python Tile 算子编程 | pypto-op-orchestrator |
| TileLang | DSL + @tilelang.jit,Developer/Expert 双模式 |
tilelang-op-orchestrator |
| Triton | triton_ascend DSL 生成并优化算子 |
triton-op-generator |
| torch.compile 图模式 | npugraph_ex 图捕获与重放 | torch-compile |
| 模型推理优化 | NPU 推理端到端优化 | model-infer-optimize |
| Runtime | Runtime 接口迁移 | — |
| 科学计算模型迁移 | 框架级代码 NPU 迁移(环境门禁/脚本适配/精度性能对比) | — |
| 治理与协作 | Skill 审查、GitCode PR/Issue 自动化 | — |
🔍 项目架构
目录结构
cannbot-skills/
├── ops/ # 算子 Skills
├── model/ # 模型推理优化 Skills
├── graph/ # 图模式 Skills
├── runtime/ # Runtime Skills
├── infra/ # 基础设施 Skills(治理 / GitCode 协作)
├── plugins-official/ # 官方 Plugins(开发路径入口,含 Agents/Workflows)
├── plugins-community/ # 社区 Plugins
├── docs/ # 项目文档
└── tests/ # 自动化测试框架
三层架构
三层架构:Plugin 编排 Agents,Agents 绑定 Skills。
- Plugin(应用编排层)— 通过
AGENTS.md定义各 Agent 协作顺序 - Agent(角色执行层)— 承担方案设计、代码开发、代码检视等职责
- Skill(知识能力层)— 提供领域知识与工程模板
以 Ascend C 算子开发为例:
╔═══════════════════════════════════════════════════════════════════════════════╗
║ PLUGINS(应用编排层) ║
╠═══════════════════════════════════════════════════════════════════════════════╣
║ ║
║ ┌─────────────────────────────┐ ┌─────────────────────────────┐ ║
║ │ ops-direct-invoke │ │ ops-registry-invoke │ ║
║ │ Kernel 直调开发流程 │ │ 算子注册调用开发流程 │ ║
║ └──────┬──────┬──────┬────────┘ └──────┬──────┬──────┬────────┘ ║
║ │ │ │ │ │ │ ║
╚═════════╪══════╪══════╪════════════════════════╪══════╪══════╪════════════════╝
│ │ │ │ │ │
▼ ▼ ▼ ▼ ▼ ▼
╔═══════════════════════════════════════════════════════════════════════════════╗
║ AGENTS(角色执行层) ║
╠═══════════════════════════════════════════════════════════════════════════════╣
║ ║
║ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ║
║ │ architect │ │ developer │ │ reviewer │ │ tester │ ║
║ │ 方案设计 │ │ 代码开发 │ │ 代码检视 │ │ 代码测试 │ ║
║ └──────────────┘ └──────────────┘ └──────────────┘ └──────────────┘ ║
║ ║
╚═══════════════════════════════════════════════════════════════════════════════╝
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼
╔═══════════════════════════════════════════════════════════════════════════════╗
║ SKILLS(知识能力层) ║
╠═══════════════════════════════════════════════════════════════════════════════╣
║ ║
║ ┌─ 知识库类 ──────────────────────────────────────────────────────────────┐ ║
║ │ npu-arch NPU 架构知识与芯片映射 │ ║
║ │ ascendc-tiling-design Tiling 设计方法论 │ ║
║ │ ascendc-api-best-practices API 使用最佳实践 │ ║
║ │ ops-precision-standard 算子精度标准 │ ║
║ └────────────────────────────────────────────────────────────────────────┘ ║
║ ║
║ ┌─ 工程模板类 ────────────────────────────────────────────────────────────┐ ║
║ │ ascendc-registry-invoke-to-direct-invoke 注册算子直调改造模板 │ ║
║ │ ascendc-direct-invoke-template Kernel直调工程模板 │ ║
║ └─────────────────────────────────────────────────────────────────────────┘ ║
║ ║
║ ┌─ 调试与测试类 ──────────────────────────────────────────────────────────┐ ║
║ │ ascendc-precision-debug 精度调试与症状速查 │ ║
║ │ ascendc-runtime-debug 运行时错误码解析 │ ║
║ │ ascendc-crash-debug 卡死/崩溃调试、Coredump 分析 │ ║
║ │ ascendc-env-check NPU 设备查询与环境验证 │ ║
║ └─────────────────────────────────────────────────────────────────────────┘ ║
║ ║
║ ┌─ 测试开发类 ────────────────────────────────────────────────────────────┐ ║
║ │ ascendc-st-design ST 测试用例设计 │ ║
║ │ ascendc-ut-develop UT 开发与覆盖率增强 │ ║
║ │ ascendc-code-review 代码检视规则 │ ║
║ └────────────────────────────────────────────────────────────────────────┘ ║
║ ║
║ ┌─ 工具辅助类 ────────────────────────────────────────────────────────────┐ ║
║ │ ops-profiling 算子性能采集分析 │ ║
║ │ ascendc-task-focus 长任务聚焦防迷失 │ ║
║ └─────────────────────────────────────────────────────────────────────────┘ ║
║ ║
╚═══════════════════════════════════════════════════════════════════════════════╝
架构设计详情和各开发路径的逻辑架构图见 项目架构设计。
🔥 最新动态
最新更新与历史记录详见 CHANGELOG.md。
💬 相关信息
- 贡献指南 — 贡献流程、准入门槛、评审规则
- 治理模型 — 成文法+判例法、角色职责
- 开发规范 — 命名规范、结构规范、分类体系
- 测试框架 — 自动化测试验证 Skills 和 Agents 的正确性
- 许可证 — 基于 CANN Open Software License v2.0
- 所属 SIG
💖 免责声明
感谢您关注 CANNBot Skills 项目,希望这些技能和知识能帮助您更好地进行 CANN 开发 ^_^
- 功能满足度:由于技术快速迭代,部分内容可能无法完全适用于所有场景。功能与文档持续完善中,欢迎提 Issue 或参与讨论。
- 自动生成内容:自动生成的代码受模型、Skills 能力、语料质量、输入指令等多因素影响,无法保证完全精准。生成代码仅作辅助研发使用,请开发者务必测试验证、安全审查后再投入使用。
🤝 社区交流
| 渠道 | 适用场景 | 链接 |
|---|---|---|
| GitCode Issue | Skill bug / 功能缺失 / 项目结构与文档问题 | 提交 Issue |
| GitCode Discussions | 使用疑问 / 经验交流 / 功能建议 | 参与讨论 |
| 微信交流群 | 实时交流 | 加入群聊 |
| CANNBot SIG | 社区治理与项目方向 | SIG 主页 |