cann-workbench 0.0.0-stage → 0.0.2-alpha

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (408) hide show
  1. package/README.md +183 -2
  2. package/THIRD_PARTY_NOTICES.md +85 -0
  3. package/cordis.patch.yml +3 -0
  4. package/doctor/LICENSE +202 -0
  5. package/doctor/NOTICE +12 -0
  6. package/doctor/README.md +18 -0
  7. package/lib/client.js +94437 -0
  8. package/lib/index.d.ts +722 -0
  9. package/lib/index.js +33711 -0
  10. package/locale/en.json +6 -0
  11. package/locale/zh.json +6 -0
  12. package/package.json +171 -4
  13. package/skills/asc-tools/tool-ops-tune/INSTALL.md +52 -0
  14. package/skills/asc-tools/tool-ops-tune/LICENSE +38 -0
  15. package/skills/asc-tools/tool-ops-tune/README.md +167 -0
  16. package/skills/asc-tools/tool-ops-tune/SKILL.md +93 -0
  17. package/skills/asc-tools/tool-ops-tune/agent/AGENTS.md +195 -0
  18. package/skills/asc-tools/tool-ops-tune/agent/agents/perf-implementer.md +68 -0
  19. package/skills/asc-tools/tool-ops-tune/agent/agents/perf-reviewer.md +86 -0
  20. package/skills/asc-tools/tool-ops-tune/agent/workflows/task-prompts.md +362 -0
  21. package/skills/asc-tools/tool-ops-tune/agent/workflows/troubleshooting.md +43 -0
  22. package/skills/asc-tools/tool-ops-tune/docs/figures/opstune-architecture.png +0 -0
  23. package/skills/asc-tools/tool-ops-tune/docs/figures/opstune-architecture.svg +253 -0
  24. package/skills/asc-tools/tool-ops-tune/docs/ops-tune-design.md +404 -0
  25. package/skills/asc-tools/tool-ops-tune/docs//347/224/250/344/276/213/346/236/204/345/273/272.md +730 -0
  26. package/skills/asc-tools/tool-ops-tune/docs//347/237/245/350/257/206/345/272/223/350/247/204/350/214/203.md +103 -0
  27. package/skills/asc-tools/tool-ops-tune/evals/evals.json +242 -0
  28. package/skills/asc-tools/tool-ops-tune/ops-collect/SKILL.md +146 -0
  29. package/skills/asc-tools/tool-ops-tune/ops-collect/references/tool-routing.md +86 -0
  30. package/skills/asc-tools/tool-ops-tune/ops-collect/scripts/collect_board.sh +458 -0
  31. package/skills/asc-tools/tool-ops-tune/ops-collect/scripts/collect_cases.py +368 -0
  32. package/skills/asc-tools/tool-ops-tune/ops-collect/scripts/collect_sim.sh +134 -0
  33. package/skills/asc-tools/tool-ops-tune/ops-collect/scripts/csv_to_db.py +314 -0
  34. package/skills/asc-tools/tool-ops-tune/ops-collect/scripts/db_bench.py +545 -0
  35. package/skills/asc-tools/tool-ops-tune/ops-collect/scripts/facts_bridge.py +1102 -0
  36. package/skills/asc-tools/tool-ops-tune/ops-collect/scripts/isolation_test.py +452 -0
  37. package/skills/asc-tools/tool-ops-tune/ops-collect/scripts/jsonl_to_cases.py +163 -0
  38. package/skills/asc-tools/tool-ops-tune/ops-family/SKILL.md +76 -0
  39. package/skills/asc-tools/tool-ops-tune/ops-family/references/broadcast/advanced_tiling.md +92 -0
  40. package/skills/asc-tools/tool-ops-tune/ops-family/references/broadcast/broadcast_design.md +160 -0
  41. package/skills/asc-tools/tool-ops-tune/ops-family/references/broadcast/code/broadcast_add_kernel.cpp +126 -0
  42. package/skills/asc-tools/tool-ops-tune/ops-family/references/broadcast/code/broadcast_add_tiling.cpp +144 -0
  43. package/skills/asc-tools/tool-ops-tune/ops-family/references/broadcast/code/broadcast_tiling_common.h +401 -0
  44. package/skills/asc-tools/tool-ops-tune/ops-family/references/broadcast/code/onedim_add_kernel.cpp +107 -0
  45. package/skills/asc-tools/tool-ops-tune/ops-family/references/broadcast/code/onedim_add_tiling.cpp +64 -0
  46. package/skills/asc-tools/tool-ops-tune/ops-family/references/broadcast/datacopypad_design.md +46 -0
  47. package/skills/asc-tools/tool-ops-tune/ops-family/references/broadcast/guide.md +14 -0
  48. package/skills/asc-tools/tool-ops-tune/ops-family/references/broadcast/nddma_design.md +53 -0
  49. package/skills/asc-tools/tool-ops-tune/ops-family/references/broadcast/onedim_design.md +114 -0
  50. package/skills/asc-tools/tool-ops-tune/ops-family/references/broadcast/ub_broadcast_design.md +67 -0
  51. package/skills/asc-tools/tool-ops-tune/ops-family/references/common/datacopy_optimization_design.md +351 -0
  52. package/skills/asc-tools/tool-ops-tune/ops-family/references/common/index.md +9 -0
  53. package/skills/asc-tools/tool-ops-tune/ops-family/references/common/tail_block_design.md +268 -0
  54. package/skills/asc-tools/tool-ops-tune/ops-family/references/common/timing_harness/index.md +38 -0
  55. package/skills/asc-tools/tool-ops-tune/ops-family/references/common/timing_harness/timing_harness_aclrt_event.cpp +199 -0
  56. package/skills/asc-tools/tool-ops-tune/ops-family/references/common/timing_harness/timing_harness_torch_event.py +130 -0
  57. package/skills/asc-tools/tool-ops-tune/ops-family/references/common/ub_resident_design.md +342 -0
  58. package/skills/asc-tools/tool-ops-tune/ops-family/references/conversion/guide.md +69 -0
  59. package/skills/asc-tools/tool-ops-tune/ops-family/references/conversion/index.md +4 -0
  60. package/skills/asc-tools/tool-ops-tune/ops-family/references/conversion/templates/dav3510/transpose_base.template +81 -0
  61. package/skills/asc-tools/tool-ops-tune/ops-family/references/conversion/templates/dav3510/transpose_big_dim.template +217 -0
  62. package/skills/asc-tools/tool-ops-tune/ops-family/references/conversion/templates/dav3510/transpose_cut_one_axis.template +336 -0
  63. package/skills/asc-tools/tool-ops-tune/ops-family/references/conversion/templates/dav3510/transpose_cut_two_axis.template +781 -0
  64. package/skills/asc-tools/tool-ops-tune/ops-family/references/conversion/templates/dav3510/transpose_n_last.template +340 -0
  65. package/skills/asc-tools/tool-ops-tune/ops-family/references/conversion/templates/dav3510/transpose_small_shape.template +321 -0
  66. package/skills/asc-tools/tool-ops-tune/ops-family/references/conversion/templates/dav3510/transpose_tensor_move.template +102 -0
  67. package/skills/asc-tools/tool-ops-tune/ops-family/references/conversion/templates/dav3510/transpose_transdata_5hd.template +480 -0
  68. package/skills/asc-tools/tool-ops-tune/ops-family/references/conversion/templates/dav3510/transpose_transdata_5hd_021axis.template +533 -0
  69. package/skills/asc-tools/tool-ops-tune/ops-family/references/conversion/templates/dav3510/transpose_with_gather.template +688 -0
  70. package/skills/asc-tools/tool-ops-tune/ops-family/references/conversion/templates/transpose_tiling_data.template +192 -0
  71. package/skills/asc-tools/tool-ops-tune/ops-family/references/conversion/transpose_big_dim.md +220 -0
  72. package/skills/asc-tools/tool-ops-tune/ops-family/references/conversion/transpose_cut_one_axis.md +175 -0
  73. package/skills/asc-tools/tool-ops-tune/ops-family/references/conversion/transpose_cut_two_axis.md +177 -0
  74. package/skills/asc-tools/tool-ops-tune/ops-family/references/conversion/transpose_fusion_design.md +398 -0
  75. package/skills/asc-tools/tool-ops-tune/ops-family/references/conversion/transpose_gather.md +191 -0
  76. package/skills/asc-tools/tool-ops-tune/ops-family/references/conversion/transpose_n_last.md +276 -0
  77. package/skills/asc-tools/tool-ops-tune/ops-family/references/conversion/transpose_small_shape.md +315 -0
  78. package/skills/asc-tools/tool-ops-tune/ops-family/references/conversion/transpose_tensor_move.md +203 -0
  79. package/skills/asc-tools/tool-ops-tune/ops-family/references/conversion/transpose_tiling_data.md +176 -0
  80. package/skills/asc-tools/tool-ops-tune/ops-family/references/conversion/transpose_vconv_021.md +206 -0
  81. package/skills/asc-tools/tool-ops-tune/ops-family/references/conversion/transpose_vconv_5hd.md +179 -0
  82. package/skills/asc-tools/tool-ops-tune/ops-family/references/elementwise/double_buffer_design.md +288 -0
  83. package/skills/asc-tools/tool-ops-tune/ops-family/references/elementwise/guide.md +46 -0
  84. package/skills/asc-tools/tool-ops-tune/ops-family/references/elementwise/index.md +10 -0
  85. package/skills/asc-tools/tool-ops-tune/ops-family/references/elementwise/templates/add_custom/CMakeLists.txt +131 -0
  86. package/skills/asc-tools/tool-ops-tune/ops-family/references/elementwise/templates/add_custom/README.md +55 -0
  87. package/skills/asc-tools/tool-ops-tune/ops-family/references/elementwise/templates/add_custom/op_extension/add_custom_torch.cpp +80 -0
  88. package/skills/asc-tools/tool-ops-tune/ops-family/references/elementwise/templates/add_custom/op_extension/ops.h +23 -0
  89. package/skills/asc-tools/tool-ops-tune/ops-family/references/elementwise/templates/add_custom/op_extension/register.cpp +30 -0
  90. package/skills/asc-tools/tool-ops-tune/ops-family/references/elementwise/templates/add_custom/op_host/add_custom.asc +149 -0
  91. package/skills/asc-tools/tool-ops-tune/ops-family/references/elementwise/templates/add_custom/op_host/data_utils.h +97 -0
  92. package/skills/asc-tools/tool-ops-tune/ops-family/references/elementwise/templates/add_custom/op_kernel/add_custom_kernel.asc +136 -0
  93. package/skills/asc-tools/tool-ops-tune/ops-family/references/elementwise/templates/add_custom/op_kernel/add_custom_tiling.h +31 -0
  94. package/skills/asc-tools/tool-ops-tune/ops-family/references/elementwise/templates/add_custom/run.sh +87 -0
  95. package/skills/asc-tools/tool-ops-tune/ops-family/references/elementwise/templates/add_custom/scripts/gen_data.py +70 -0
  96. package/skills/asc-tools/tool-ops-tune/ops-family/references/elementwise/templates/add_custom/scripts/golden.py +34 -0
  97. package/skills/asc-tools/tool-ops-tune/ops-family/references/elementwise/templates/add_custom/scripts/test_torch.py +99 -0
  98. package/skills/asc-tools/tool-ops-tune/ops-family/references/elementwise/templates/add_custom/scripts/verify_result.py +56 -0
  99. package/skills/asc-tools/tool-ops-tune/ops-family/references/elementwise/templates/usage_guide.md +61 -0
  100. package/skills/asc-tools/tool-ops-tune/ops-family/references/elementwise/vector_efficiency_design.md +203 -0
  101. package/skills/asc-tools/tool-ops-tune/ops-family/references/fa/fa_mixed_kernel_design.md +174 -0
  102. package/skills/asc-tools/tool-ops-tune/ops-family/references/fa/fa_roofline_design.md +141 -0
  103. package/skills/asc-tools/tool-ops-tune/ops-family/references/fa/guide.md +87 -0
  104. package/skills/asc-tools/tool-ops-tune/ops-family/references/knowledge_gaps.json +56 -0
  105. package/skills/asc-tools/tool-ops-tune/ops-family/references/matmul/best-practices-guide.md +14 -0
  106. package/skills/asc-tools/tool-ops-tune/ops-family/references/matmul/fullload_design.md +344 -0
  107. package/skills/asc-tools/tool-ops-tune/ops-family/references/matmul/guide.md +52 -0
  108. package/skills/asc-tools/tool-ops-tune/ops-family/references/matmul/mte2_preload_design.md +320 -0
  109. package/skills/asc-tools/tool-ops-tune/ops-family/references/matmul/pingpong_design.md +254 -0
  110. package/skills/asc-tools/tool-ops-tune/ops-family/references/matmul/scale_coalescing_design.md +282 -0
  111. package/skills/asc-tools/tool-ops-tune/ops-family/references/matmul/streamk_design.md +374 -0
  112. package/skills/asc-tools/tool-ops-tune/ops-family/references/matmul/swat_design.md +423 -0
  113. package/skills/asc-tools/tool-ops-tune/ops-family/references/matmul/templates/matmul_basic_blaze.template +165 -0
  114. package/skills/asc-tools/tool-ops-tune/ops-family/references/matmul/templates/usage_guide.md +29 -0
  115. package/skills/asc-tools/tool-ops-tune/ops-family/references/mc2/best-practices-guide.md +43 -0
  116. package/skills/asc-tools/tool-ops-tune/ops-family/references/mc2/guide.md +42 -0
  117. package/skills/asc-tools/tool-ops-tune/ops-family/references/mc2/local_matmul_design.md +130 -0
  118. package/skills/asc-tools/tool-ops-tune/ops-family/references/mc2/pipeline_balancing_design.md +502 -0
  119. package/skills/asc-tools/tool-ops-tune/ops-family/references/reduce/guide.md +178 -0
  120. package/skills/asc-tools/tool-ops-tune/ops-family/references/reduce/templates/dav310/kernel_utils.template +75 -0
  121. package/skills/asc-tools/tool-ops-tune/ops-family/references/reduce/templates/dav310/softmax_v2_ar_full_load.template +429 -0
  122. package/skills/asc-tools/tool-ops-tune/ops-family/references/reduce/templates/dav310/softmax_v2_ar_recompute.template +485 -0
  123. package/skills/asc-tools/tool-ops-tune/ops-family/references/reduce/templates/dav310/softmax_v2_ar_small_r.template +348 -0
  124. package/skills/asc-tools/tool-ops-tune/ops-family/references/reduce/templates/dav310/softmax_v2_ara_full_load.template +574 -0
  125. package/skills/asc-tools/tool-ops-tune/ops-family/references/reduce/templates/dav310/softmax_v2_ara_online.template +324 -0
  126. package/skills/asc-tools/tool-ops-tune/ops-family/references/reduce/templates/dav310/softmax_v2_ara_recompute.template +436 -0
  127. package/skills/asc-tools/tool-ops-tune/ops-family/references/reduce/templates/dav310/softmax_v2_base.template +950 -0
  128. package/skills/asc-tools/tool-ops-tune/ops-family/references/reduce/templates/fused_attention_online_softmax_design.md +428 -0
  129. package/skills/asc-tools/tool-ops-tune/ops-family/references/reduce/templates/softmax_v2_ar_full_load.md +137 -0
  130. package/skills/asc-tools/tool-ops-tune/ops-family/references/reduce/templates/softmax_v2_ar_recompute.md +135 -0
  131. package/skills/asc-tools/tool-ops-tune/ops-family/references/reduce/templates/softmax_v2_ar_small_r.md +122 -0
  132. package/skills/asc-tools/tool-ops-tune/ops-family/references/reduce/templates/softmax_v2_ara_full_load.md +144 -0
  133. package/skills/asc-tools/tool-ops-tune/ops-family/references/reduce/templates/softmax_v2_ara_online.md +185 -0
  134. package/skills/asc-tools/tool-ops-tune/ops-family/references/reduce/templates/softmax_v2_ara_recompute.md +163 -0
  135. package/skills/asc-tools/tool-ops-tune/ops-family/references/reduce/templates/softmax_v2_tiling.template +460 -0
  136. package/skills/asc-tools/tool-ops-tune/ops-family/references/reduce/templates/softmax_v2_tiling_data.template +278 -0
  137. package/skills/asc-tools/tool-ops-tune/ops-family/references/reduce/templates/state_resident_design.md +337 -0
  138. package/skills/asc-tools/tool-ops-tune/ops-family/references/reduce/templates/usage_guide.md +253 -0
  139. package/skills/asc-tools/tool-ops-tune/ops-family/references/scalar/coding_principles.md +476 -0
  140. package/skills/asc-tools/tool-ops-tune/ops-family/references/scalar/conv_scalar.md +163 -0
  141. package/skills/asc-tools/tool-ops-tune/ops-family/references/scalar/guide.md +30 -0
  142. package/skills/asc-tools/tool-ops-tune/ops-family/references/simt/guide.md +91 -0
  143. package/skills/asc-tools/tool-ops-tune/ops-family/references/simt/optimization-guide.md +110 -0
  144. package/skills/asc-tools/tool-ops-tune/ops-family/references/sort/guide.md +83 -0
  145. package/skills/asc-tools/tool-ops-tune/ops-family/references/sort/radix_sort.md +354 -0
  146. package/skills/asc-tools/tool-ops-tune/ops-family/scripts/family_asset_audit.py +68 -0
  147. package/skills/asc-tools/tool-ops-tune/ops-family/scripts/tiling_candidates.py +419 -0
  148. package/skills/asc-tools/tool-ops-tune/ops-mechanism/SKILL.md +23 -0
  149. package/skills/asc-tools/tool-ops-tune/ops-mechanism/cases/ascendc/case_groupedmatmul_pipeline.md +23 -0
  150. package/skills/asc-tools/tool-ops-tune/ops-mechanism/cases/ascendc/case_triton_atomic_revert.md +19 -0
  151. package/skills/asc-tools/tool-ops-tune/ops-mechanism/cases/mc2/case_mc2_fusion.md +19 -0
  152. package/skills/asc-tools/tool-ops-tune/ops-mechanism/references/optimize/api-usage.md +70 -0
  153. package/skills/asc-tools/tool-ops-tune/ops-mechanism/references/optimize/ascendc-regbase-vf.md +45 -0
  154. package/skills/asc-tools/tool-ops-tune/ops-mechanism/references/optimize/ascendc-tiling.md +51 -0
  155. package/skills/asc-tools/tool-ops-tune/ops-mechanism/references/optimize/data-copy.md +67 -0
  156. package/skills/asc-tools/tool-ops-tune/ops-mechanism/references/optimize/index.md +45 -0
  157. package/skills/asc-tools/tool-ops-tune/ops-mechanism/references/optimize/mc2-balancing.md +77 -0
  158. package/skills/asc-tools/tool-ops-tune/ops-mechanism/references/optimize/mc2.md +103 -0
  159. package/skills/asc-tools/tool-ops-tune/ops-mechanism/references/optimize/memory-hierarchy.md +40 -0
  160. package/skills/asc-tools/tool-ops-tune/ops-mechanism/references/optimize/pipeline.md +95 -0
  161. package/skills/asc-tools/tool-ops-tune/ops-mechanism/scripts/case_backfill.py +170 -0
  162. package/skills/asc-tools/tool-ops-tune/ops-mechanism/scripts/log_gap.py +145 -0
  163. package/skills/asc-tools/tool-ops-tune/ops-mechanism/scripts/mc2_search.py +367 -0
  164. package/skills/asc-tools/tool-ops-tune/ops-report/SKILL.md +77 -0
  165. package/skills/asc-tools/tool-ops-tune/ops-verdict/evals/run_evals.py +963 -0
  166. package/skills/asc-tools/tool-ops-tune/ops-verdict/evals/smoke/install-hooks.sh +65 -0
  167. package/skills/asc-tools/tool-ops-tune/ops-verdict/evals/smoke/run_smoke.sh +535 -0
  168. package/skills/asc-tools/tool-ops-tune/ops-verdict/fixtures/core_tail_a5.csv +25 -0
  169. package/skills/asc-tools/tool-ops-tune/ops-verdict/fixtures/few_cores_a5.csv +5 -0
  170. package/skills/asc-tools/tool-ops-tune/ops-verdict/fixtures/mte2_bound_a2.csv +17 -0
  171. package/skills/asc-tools/tool-ops-tune/ops-verdict/fixtures/multi_kernel_mix_a5.csv +7 -0
  172. package/skills/asc-tools/tool-ops-tune/ops-verdict/fixtures/no_bound_a5.csv +9 -0
  173. package/skills/asc-tools/tool-ops-tune/ops-verdict/fixtures/serial_no_overlap_a2.csv +9 -0
  174. package/skills/asc-tools/tool-ops-tune/ops-verdict/fixtures/vec_bound_a5.csv +9 -0
  175. package/skills/asc-tools/tool-ops-tune/ops-verdict/references/io-contracts.md +94 -0
  176. package/skills/asc-tools/tool-ops-tune/ops-verdict/references/rule-schema.md +130 -0
  177. package/skills/asc-tools/tool-ops-tune/ops-verdict/references/scope-schema.md +61 -0
  178. package/skills/asc-tools/tool-ops-tune/ops-verdict/references/soc-spec.yaml +140 -0
  179. package/skills/asc-tools/tool-ops-tune/ops-verdict/rules/L0-instruction.yaml +67 -0
  180. package/skills/asc-tools/tool-ops-tune/ops-verdict/rules/L1-single-core.yaml +316 -0
  181. package/skills/asc-tools/tool-ops-tune/ops-verdict/rules/L2-inter-core.yaml +173 -0
  182. package/skills/asc-tools/tool-ops-tune/ops-verdict/rules/L3-inter-card.yaml +156 -0
  183. package/skills/asc-tools/tool-ops-tune/ops-verdict/scripts/batch_pipeline.py +466 -0
  184. package/skills/asc-tools/tool-ops-tune/ops-verdict/scripts/calibrate.py +249 -0
  185. package/skills/asc-tools/tool-ops-tune/ops-verdict/scripts/delta_compare.py +278 -0
  186. package/skills/asc-tools/tool-ops-tune/ops-verdict/scripts/render_html.py +304 -0
  187. package/skills/asc-tools/tool-ops-tune/ops-verdict/scripts/snapshot.py +200 -0
  188. package/skills/asc-tools/tool-ops-tune/ops-verdict/scripts/trace_bubble.py +331 -0
  189. package/skills/asc-tools/tool-ops-tune/ops-verdict/scripts/verdict.py +1094 -0
  190. package/skills/asc-tools/tool-ops-tune/scripts/diff_audit.py +281 -0
  191. package/skills/asc-tools/tool-precision-debug/LICENSE +38 -0
  192. package/skills/asc-tools/tool-precision-debug/README.md +190 -0
  193. package/skills/asc-tools/tool-precision-debug/scripts/install.sh +475 -0
  194. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/LICENSE +38 -0
  195. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/SKILL.md +136 -0
  196. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/evals/evals.json +932 -0
  197. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/diagnosis/baseline.md +69 -0
  198. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/diagnosis/checkpoint-design.md +82 -0
  199. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/diagnosis/dumptensor.md +83 -0
  200. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/diagnosis/hypothesis-experiment.md +114 -0
  201. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/diagnosis/index.md +20 -0
  202. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/diagnosis/localization.md +85 -0
  203. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/diagnosis/numerical-modeling.md +94 -0
  204. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/diagnosis/operator-modeling.md +116 -0
  205. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/diagnosis/progressive-error-analysis.md +86 -0
  206. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/diagnosis/reporting.md +140 -0
  207. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/diagnosis/reproducibility.md +121 -0
  208. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/diagnosis/semantic-bisection.md +72 -0
  209. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/diagnosis/sensitive-points.md +146 -0
  210. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/patterns/cases/fp16-promotion-boundary.md +46 -0
  211. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/patterns/cases/fused-rmsnorm-gelu-residual.md +162 -0
  212. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/patterns/cases/index.md +16 -0
  213. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/patterns/cases/integer-float-collision.md +44 -0
  214. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/patterns/cases/partial-statistics-merge.md +30 -0
  215. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/patterns/cases/softplus-v2-grad-family.md +156 -0
  216. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/patterns/cases/sync-dataflow-handshake.md +89 -0
  217. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/patterns/cases/tail-valid-region-state.md +30 -0
  218. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/patterns/cases/thnn-fused-gru-bias-reduction.md +73 -0
  219. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/patterns/index.md +34 -0
  220. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/patterns/mechanisms/accumulation-order.md +108 -0
  221. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/patterns/mechanisms/algorithm-parameter-contract.md +118 -0
  222. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/patterns/mechanisms/buffer-lifetime-alias.md +133 -0
  223. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/patterns/mechanisms/cast-rounding.md +76 -0
  224. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/patterns/mechanisms/complex-operator-boundary.md +48 -0
  225. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/patterns/mechanisms/data-movement-alignment.md +104 -0
  226. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/patterns/mechanisms/golden-host-contract.md +84 -0
  227. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/patterns/mechanisms/index-address-ownership.md +57 -0
  228. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/patterns/mechanisms/index.md +32 -0
  229. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/patterns/mechanisms/multicore-ownership.md +117 -0
  230. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/patterns/mechanisms/pipeline-sync-visibility.md +146 -0
  231. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/patterns/mechanisms/precision-mode-approximation.md +90 -0
  232. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/patterns/mechanisms/shape-boundary-contract.md +57 -0
  233. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/patterns/mechanisms/special-values.md +122 -0
  234. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/patterns/mechanisms/tiling-tail-state.md +146 -0
  235. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/patterns/operators/broadcast-transpose.md +64 -0
  236. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/patterns/operators/convolution.md +60 -0
  237. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/patterns/operators/dynamic-quant.md +47 -0
  238. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/patterns/operators/index.md +18 -0
  239. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/patterns/operators/matmul-mmad.md +131 -0
  240. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/patterns/operators/normalization.md +145 -0
  241. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/patterns/operators/reduction.md +167 -0
  242. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/patterns/operators/softplus-v2-grad.md +58 -0
  243. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/patterns/operators/sort-merge.md +65 -0
  244. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/tools/index.md +18 -0
  245. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/tools/kernel-debug-data.md +133 -0
  246. package/skills/asc-tools/tool-precision-debug/skills/tool-precision-debug/references/tools/msobjdump.md +150 -0
  247. package/skills/cann-doctor/SKILL.md +15 -0
  248. package/skills/catalog.json +79 -0
  249. package/skills/mattpocock/GLOSSARY.md +30 -0
  250. package/skills/mattpocock/LICENSE +21 -0
  251. package/skills/mattpocock/README.md +258 -0
  252. package/skills/mattpocock/SCOPE.md +35 -0
  253. package/skills/mattpocock/docs/agents/triage-labels.md +15 -0
  254. package/skills/mattpocock/docs/engineering/ask-matt.md +91 -0
  255. package/skills/mattpocock/docs/engineering/code-review.md +101 -0
  256. package/skills/mattpocock/docs/engineering/codebase-design.md +88 -0
  257. package/skills/mattpocock/docs/engineering/diagnosing-bugs.md +94 -0
  258. package/skills/mattpocock/docs/engineering/domain-modeling.md +86 -0
  259. package/skills/mattpocock/docs/engineering/grill-with-docs.md +82 -0
  260. package/skills/mattpocock/docs/engineering/implement-spec.md +86 -0
  261. package/skills/mattpocock/docs/engineering/implement.md +97 -0
  262. package/skills/mattpocock/docs/engineering/improve-codebase-architecture.md +113 -0
  263. package/skills/mattpocock/docs/engineering/pr.md +79 -0
  264. package/skills/mattpocock/docs/engineering/prototype.md +67 -0
  265. package/skills/mattpocock/docs/engineering/research.md +73 -0
  266. package/skills/mattpocock/docs/engineering/resolving-merge-conflicts.md +53 -0
  267. package/skills/mattpocock/docs/engineering/retro.md +81 -0
  268. package/skills/mattpocock/docs/engineering/setup-matt-pocock-skills.md +94 -0
  269. package/skills/mattpocock/docs/engineering/tdd.md +94 -0
  270. package/skills/mattpocock/docs/engineering/to-spec.md +81 -0
  271. package/skills/mattpocock/docs/engineering/to-tickets.md +99 -0
  272. package/skills/mattpocock/docs/engineering/triage.md +109 -0
  273. package/skills/mattpocock/docs/engineering/wayfinder.md +103 -0
  274. package/skills/mattpocock/docs/engineering/wizard.md +96 -0
  275. package/skills/mattpocock/docs/productivity/grill-me.md +76 -0
  276. package/skills/mattpocock/docs/productivity/grilling.md +87 -0
  277. package/skills/mattpocock/docs/productivity/handoff.md +76 -0
  278. package/skills/mattpocock/docs/productivity/teach.md +97 -0
  279. package/skills/mattpocock/docs/productivity/to-questionnaire.md +78 -0
  280. package/skills/mattpocock/docs/productivity/wait-what.md +36 -0
  281. package/skills/mattpocock/docs/productivity/writing-for-agents.md +70 -0
  282. package/skills/mattpocock/scripts/link-skills.sh +62 -0
  283. package/skills/mattpocock/scripts/list-skills.sh +7 -0
  284. package/skills/mattpocock/scripts/sync-plugin-version.mjs +41 -0
  285. package/skills/mattpocock/skills/deprecated/README.md +3 -0
  286. package/skills/mattpocock/skills/engineering/README.md +34 -0
  287. package/skills/mattpocock/skills/engineering/ask-matt/PHASE-BOUNDARIES.md +55 -0
  288. package/skills/mattpocock/skills/engineering/ask-matt/SKILL.md +97 -0
  289. package/skills/mattpocock/skills/engineering/ask-matt/agents/openai.yaml +5 -0
  290. package/skills/mattpocock/skills/engineering/code-review/SKILL.md +89 -0
  291. package/skills/mattpocock/skills/engineering/code-review/agents/openai.yaml +3 -0
  292. package/skills/mattpocock/skills/engineering/codebase-design/DEEPENING.md +37 -0
  293. package/skills/mattpocock/skills/engineering/codebase-design/DESIGN-IT-TWICE.md +44 -0
  294. package/skills/mattpocock/skills/engineering/codebase-design/SKILL.md +114 -0
  295. package/skills/mattpocock/skills/engineering/codebase-design/agents/openai.yaml +3 -0
  296. package/skills/mattpocock/skills/engineering/diagnosing-bugs/SKILL.md +138 -0
  297. package/skills/mattpocock/skills/engineering/diagnosing-bugs/agents/openai.yaml +3 -0
  298. package/skills/mattpocock/skills/engineering/diagnosing-bugs/scripts/hitl-loop.template.sh +44 -0
  299. package/skills/mattpocock/skills/engineering/domain-modeling/ADR-FORMAT.md +47 -0
  300. package/skills/mattpocock/skills/engineering/domain-modeling/GLOSSARY-FORMAT.md +60 -0
  301. package/skills/mattpocock/skills/engineering/domain-modeling/SKILL.md +74 -0
  302. package/skills/mattpocock/skills/engineering/domain-modeling/agents/openai.yaml +3 -0
  303. package/skills/mattpocock/skills/engineering/grill-with-docs/SKILL.md +7 -0
  304. package/skills/mattpocock/skills/engineering/grill-with-docs/agents/openai.yaml +5 -0
  305. package/skills/mattpocock/skills/engineering/implement/SKILL.md +17 -0
  306. package/skills/mattpocock/skills/engineering/implement/agents/openai.yaml +5 -0
  307. package/skills/mattpocock/skills/engineering/implement-spec/SKILL.md +42 -0
  308. package/skills/mattpocock/skills/engineering/implement-spec/agents/openai.yaml +5 -0
  309. package/skills/mattpocock/skills/engineering/improve-codebase-architecture/HTML-REPORT.md +123 -0
  310. package/skills/mattpocock/skills/engineering/improve-codebase-architecture/SKILL.md +71 -0
  311. package/skills/mattpocock/skills/engineering/improve-codebase-architecture/agents/openai.yaml +5 -0
  312. package/skills/mattpocock/skills/engineering/pr/CREDITS.md +3 -0
  313. package/skills/mattpocock/skills/engineering/pr/SKILL.md +170 -0
  314. package/skills/mattpocock/skills/engineering/pr/agents/openai.yaml +3 -0
  315. package/skills/mattpocock/skills/engineering/prototype/LOGIC.md +67 -0
  316. package/skills/mattpocock/skills/engineering/prototype/SKILL.md +26 -0
  317. package/skills/mattpocock/skills/engineering/prototype/UI.md +112 -0
  318. package/skills/mattpocock/skills/engineering/prototype/agents/openai.yaml +3 -0
  319. package/skills/mattpocock/skills/engineering/research/SKILL.md +12 -0
  320. package/skills/mattpocock/skills/engineering/research/agents/openai.yaml +3 -0
  321. package/skills/mattpocock/skills/engineering/retro/SKILL.md +44 -0
  322. package/skills/mattpocock/skills/engineering/retro/agents/openai.yaml +5 -0
  323. package/skills/mattpocock/skills/engineering/setup-matt-pocock-skills/SKILL.md +120 -0
  324. package/skills/mattpocock/skills/engineering/setup-matt-pocock-skills/agents/openai.yaml +5 -0
  325. package/skills/mattpocock/skills/engineering/setup-matt-pocock-skills/domain.md +51 -0
  326. package/skills/mattpocock/skills/engineering/setup-matt-pocock-skills/issue-tracker-github.md +50 -0
  327. package/skills/mattpocock/skills/engineering/setup-matt-pocock-skills/issue-tracker-gitlab.md +46 -0
  328. package/skills/mattpocock/skills/engineering/setup-matt-pocock-skills/issue-tracker-local.md +30 -0
  329. package/skills/mattpocock/skills/engineering/setup-matt-pocock-skills/triage-labels.md +15 -0
  330. package/skills/mattpocock/skills/engineering/tdd/SKILL.md +38 -0
  331. package/skills/mattpocock/skills/engineering/tdd/agents/openai.yaml +3 -0
  332. package/skills/mattpocock/skills/engineering/tdd/mocking.md +59 -0
  333. package/skills/mattpocock/skills/engineering/tdd/tests.md +77 -0
  334. package/skills/mattpocock/skills/engineering/to-spec/SKILL.md +75 -0
  335. package/skills/mattpocock/skills/engineering/to-spec/agents/openai.yaml +5 -0
  336. package/skills/mattpocock/skills/engineering/to-tickets/SKILL.md +105 -0
  337. package/skills/mattpocock/skills/engineering/to-tickets/agents/openai.yaml +5 -0
  338. package/skills/mattpocock/skills/engineering/triage/AGENT-BRIEF.md +207 -0
  339. package/skills/mattpocock/skills/engineering/triage/OUT-OF-SCOPE.md +105 -0
  340. package/skills/mattpocock/skills/engineering/triage/SKILL.md +112 -0
  341. package/skills/mattpocock/skills/engineering/triage/agents/openai.yaml +5 -0
  342. package/skills/mattpocock/skills/engineering/wayfinder/SKILL.md +128 -0
  343. package/skills/mattpocock/skills/engineering/wayfinder/agents/openai.yaml +5 -0
  344. package/skills/mattpocock/skills/engineering/wizard/SKILL.md +44 -0
  345. package/skills/mattpocock/skills/engineering/wizard/agents/openai.yaml +3 -0
  346. package/skills/mattpocock/skills/engineering/wizard/template.sh +223 -0
  347. package/skills/mattpocock/skills/in-progress/README.md +17 -0
  348. package/skills/mattpocock/skills/in-progress/chief-of-staff/SKILL.md +75 -0
  349. package/skills/mattpocock/skills/in-progress/chief-of-staff/agents/openai.yaml +5 -0
  350. package/skills/mattpocock/skills/in-progress/claude-handoff/SKILL.md +18 -0
  351. package/skills/mattpocock/skills/in-progress/claude-handoff/agents/openai.yaml +5 -0
  352. package/skills/mattpocock/skills/in-progress/loop-me/SKILL.md +32 -0
  353. package/skills/mattpocock/skills/in-progress/loop-me/agents/openai.yaml +5 -0
  354. package/skills/mattpocock/skills/in-progress/setup-ts-deep-modules/SKILL.md +102 -0
  355. package/skills/mattpocock/skills/in-progress/setup-ts-deep-modules/agents/openai.yaml +5 -0
  356. package/skills/mattpocock/skills/in-progress/setup-ts-deep-modules/dependency-cruiser.config.cjs +95 -0
  357. package/skills/mattpocock/skills/in-progress/software-factory/EXAMPLE-TASKS.md +80 -0
  358. package/skills/mattpocock/skills/in-progress/software-factory/GIT-HOSTS.md +84 -0
  359. package/skills/mattpocock/skills/in-progress/software-factory/OBSERVABILITY-PLATFORMS.md +75 -0
  360. package/skills/mattpocock/skills/in-progress/software-factory/RUNNERS.md +94 -0
  361. package/skills/mattpocock/skills/in-progress/software-factory/SKILL.md +98 -0
  362. package/skills/mattpocock/skills/in-progress/software-factory/TICKET-TRACKERS.md +85 -0
  363. package/skills/mattpocock/skills/in-progress/writing-beats/SKILL.md +67 -0
  364. package/skills/mattpocock/skills/in-progress/writing-beats/agents/openai.yaml +5 -0
  365. package/skills/mattpocock/skills/in-progress/writing-fragments/SKILL.md +79 -0
  366. package/skills/mattpocock/skills/in-progress/writing-fragments/agents/openai.yaml +5 -0
  367. package/skills/mattpocock/skills/in-progress/writing-shape/SKILL.md +79 -0
  368. package/skills/mattpocock/skills/in-progress/writing-shape/agents/openai.yaml +5 -0
  369. package/skills/mattpocock/skills/misc/README.md +8 -0
  370. package/skills/mattpocock/skills/misc/git-guardrails-claude-code/SKILL.md +95 -0
  371. package/skills/mattpocock/skills/misc/git-guardrails-claude-code/agents/openai.yaml +3 -0
  372. package/skills/mattpocock/skills/misc/git-guardrails-claude-code/scripts/block-dangerous-git.sh +25 -0
  373. package/skills/mattpocock/skills/misc/migrate-to-shoehorn/SKILL.md +118 -0
  374. package/skills/mattpocock/skills/misc/migrate-to-shoehorn/agents/openai.yaml +3 -0
  375. package/skills/mattpocock/skills/misc/scaffold-exercises/SKILL.md +106 -0
  376. package/skills/mattpocock/skills/misc/scaffold-exercises/agents/openai.yaml +3 -0
  377. package/skills/mattpocock/skills/misc/setup-pre-commit/SKILL.md +91 -0
  378. package/skills/mattpocock/skills/misc/setup-pre-commit/agents/openai.yaml +3 -0
  379. package/skills/mattpocock/skills/productivity/README.md +20 -0
  380. package/skills/mattpocock/skills/productivity/grill-me/SKILL.md +7 -0
  381. package/skills/mattpocock/skills/productivity/grill-me/agents/openai.yaml +5 -0
  382. package/skills/mattpocock/skills/productivity/grilling/SKILL.md +30 -0
  383. package/skills/mattpocock/skills/productivity/grilling/agents/openai.yaml +3 -0
  384. package/skills/mattpocock/skills/productivity/handoff/SKILL.md +16 -0
  385. package/skills/mattpocock/skills/productivity/handoff/agents/openai.yaml +5 -0
  386. package/skills/mattpocock/skills/productivity/teach/GLOSSARY-FORMAT.md +35 -0
  387. package/skills/mattpocock/skills/productivity/teach/LEARNING-RECORD-FORMAT.md +46 -0
  388. package/skills/mattpocock/skills/productivity/teach/MISSION-FORMAT.md +31 -0
  389. package/skills/mattpocock/skills/productivity/teach/RESOURCES-FORMAT.md +32 -0
  390. package/skills/mattpocock/skills/productivity/teach/SKILL.md +140 -0
  391. package/skills/mattpocock/skills/productivity/teach/agents/openai.yaml +5 -0
  392. package/skills/mattpocock/skills/productivity/to-questionnaire/SKILL.md +54 -0
  393. package/skills/mattpocock/skills/productivity/to-questionnaire/agents/openai.yaml +5 -0
  394. package/skills/mattpocock/skills/productivity/wait-what/SKILL.md +7 -0
  395. package/skills/mattpocock/skills/productivity/wait-what/agents/openai.yaml +5 -0
  396. package/skills/mattpocock/skills/productivity/writing-for-agents/SKILL-MECHANICS.md +22 -0
  397. package/skills/mattpocock/skills/productivity/writing-for-agents/SKILL.md +81 -0
  398. package/skills/mattpocock/skills/productivity/writing-for-agents/agents/openai.yaml +3 -0
  399. package/skills/task-agents/operator-development/Agent.md +71 -0
  400. package/skills/task-agents/operator-development/skills.json +120 -0
  401. package/skills/task-agents/operator-development/stages.schema.json +532 -0
  402. package/skills/task-agents/performance-optimization/Agent.md +78 -0
  403. package/skills/task-agents/performance-optimization/skills.json +64 -0
  404. package/skills/task-agents/response-protocol.md +35 -0
  405. package/skills/task-agents/sidebar-contracts.schema.json +4168 -0
  406. package/skills/task-agents/sidebar-selection.schema.json +971 -0
  407. package/skills/task-agents/visuals/components.json +283 -0
  408. package/skills/task-agents/visuals/contracts.schema.json +3628 -0
@@ -0,0 +1,475 @@
1
+ #!/usr/bin/env bash
2
+ # ----------------------------------------------------------------------------------------------------------
3
+ # Copyright (c) 2026 Huawei Technologies Co., Ltd.
4
+ # This program is free software, you can redistribute it and/or modify it under the terms and conditions of
5
+ # CANN Open Software License Agreement Version 2.0 (the "License").
6
+ # Please refer to the License for details. You may not use this file except in compliance with the License.
7
+ # THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED,
8
+ # INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE.
9
+ # See LICENSE in the root of the software repository for the full text of the License.
10
+ # ----------------------------------------------------------------------------------------------------------
11
+
12
+ # Install the precision Skill and optional CANN knowledge consumers locally or globally.
13
+ # This file is self-contained so it can also be downloaded and executed directly.
14
+ set -euo pipefail
15
+ python_bin="${CANNBOT_PYTHON:-python3}"
16
+ python_next=false
17
+ for argument in "$@"; do
18
+ if [[ "$python_next" == true ]]; then
19
+ python_bin="$argument"
20
+ python_next=false
21
+ elif [[ "$argument" == --python ]]; then
22
+ python_next=true
23
+ elif [[ "$argument" == --python=* ]]; then
24
+ python_bin="${argument#--python=}"
25
+ fi
26
+ done
27
+ command -v "$python_bin" >/dev/null 2>&1 || { echo 'Python 3.10 or newer is required; select it with --python.' >&2; exit 2; }
28
+ exec "$python_bin" - "${BASH_SOURCE[0]:-}" "$@" <<'PY'
29
+ from __future__ import annotations
30
+
31
+ import argparse
32
+ import hashlib
33
+ import importlib.metadata
34
+ import json
35
+ import os
36
+ from pathlib import Path, PurePosixPath
37
+ import re
38
+ import shlex
39
+ import shutil
40
+ import subprocess
41
+ import sys
42
+ import tempfile
43
+ from urllib.parse import urlsplit
44
+
45
+ SKILL = "tool-precision-debug"
46
+ PACKAGE_REPOSITORY = "https://gitcode.com/cann/asc-tools.git"
47
+ PACKAGE_REF = "master"
48
+ PACKAGE_DIRECTORY = "asc-tools"
49
+ QUERIES = ("knowledge-query", "ascendc-api-knowledge-query")
50
+ # OpenCode discovers .agents/skills directly; only Claude needs a client alias.
51
+ ADAPTERS = {"codex": None, "claude": ".claude/skills", "opencode": None}
52
+ ROOT_KEY = "CANNBOT_KNOWLEDGE_ROOT"
53
+ PLATFORM_KEY = "CANNBOT_KNOWLEDGE_PLATFORM"
54
+
55
+
56
+ def global_skill_directory(client, user_directory):
57
+ if client == "codex":
58
+ config_directory = user_directory / ".agents"
59
+ elif client == "claude":
60
+ config_directory = Path(os.environ.get("CLAUDE_CONFIG_DIR") or user_directory / ".claude")
61
+ else:
62
+ xdg_directory = Path(os.environ.get("XDG_CONFIG_HOME") or user_directory / ".config")
63
+ config_directory = Path(os.environ.get("OPENCODE_CONFIG_DIR") or xdg_directory / "opencode")
64
+ config_directory = config_directory.expanduser()
65
+ if not config_directory.is_absolute():
66
+ raise ValueError("Global client configuration directory must be an absolute path.")
67
+ return config_directory.resolve() / "skills"
68
+
69
+
70
+ def run(command, *, cwd=None, env=None):
71
+ environment = {**(os.environ if env is None else env), "PYTHONDONTWRITEBYTECODE": "1"}
72
+ result = subprocess.run(command, cwd=cwd, env=environment, text=True, capture_output=True)
73
+ if result.returncode:
74
+ detail = (result.stderr or result.stdout).strip()
75
+ detail = re.sub(r"(https?://)[^/\s@]+@", r"\1<redacted>@", detail)
76
+ raise ValueError(f"{Path(command[0]).name} failed: {detail[-2000:]}")
77
+ return result.stdout
78
+
79
+
80
+ def config_values(path):
81
+ if not path.is_file():
82
+ return {}
83
+ values = {}
84
+ for line in path.read_text(encoding="utf-8").splitlines():
85
+ tokens = shlex.split(line, comments=True)
86
+ if tokens and tokens[0] == "export":
87
+ tokens = tokens[1:]
88
+ if len(tokens) == 1 and "=" in tokens[0]:
89
+ key, value = tokens[0].split("=", 1)
90
+ values.setdefault(key, value)
91
+ return values
92
+
93
+
94
+ def within_project(project, target):
95
+ if not target.parent.resolve().is_relative_to(project):
96
+ raise ValueError(f"Installation path escapes the project through a symlink: {target}")
97
+ for parent in (target.parent, *target.parent.parents):
98
+ if parent == project:
99
+ break
100
+ if parent.exists() and not parent.is_dir():
101
+ raise ValueError(f"Installation directory is occupied by a file: {parent}")
102
+
103
+
104
+ def preflight_link(project, target, source, replace_sources=()):
105
+ within_project(project, target)
106
+ # Aggregating installers may already have copied the pure Skill here.
107
+ if target.is_dir() and target.resolve() == source.resolve():
108
+ return
109
+ if target.is_symlink() and target.resolve() == source.resolve():
110
+ return
111
+ if target.is_symlink() and target.resolve() in replace_sources:
112
+ return
113
+ if target.exists() or target.is_symlink():
114
+ raise ValueError(f"Existing path conflicts with this installation; original content was preserved: {target}")
115
+
116
+
117
+ def repository(path, url, ref, *, offline, update, sparse=None, quiet=False):
118
+ parsed = urlsplit(url)
119
+ if parsed.username or parsed.password or parsed.query or parsed.fragment:
120
+ raise ValueError("Repository URLs must not contain credentials or query parameters; use configured Git authentication.")
121
+ run(["git", "check-ref-format", "--branch", ref])
122
+ if path.is_symlink():
123
+ raise ValueError(f"Managed repository must not be a symlink: {path}")
124
+ if path.exists():
125
+ if not path.is_dir():
126
+ raise ValueError(f"Repository path is not a directory: {path}")
127
+ top = run(["git", "-C", str(path), "rev-parse", "--show-toplevel"]).strip()
128
+ if Path(top).resolve() != path.resolve():
129
+ raise ValueError("Managed path is not an independent Git repository; its parent repository was not used.")
130
+ origin = run(["git", "-C", str(path), "remote", "get-url", "origin"]).strip()
131
+ if origin.removesuffix(".git").rstrip("/") != url.removesuffix(".git").rstrip("/"):
132
+ raise ValueError("Repository origin does not match; the existing repository was not updated.")
133
+ branch = run(["git", "-C", str(path), "branch", "--show-current"]).strip()
134
+ if branch != ref:
135
+ raise ValueError("Current branch does not match the requested branch; no branch was switched.")
136
+ if run(["git", "-C", str(path), "status", "--porcelain", "--untracked-files=no"]).strip():
137
+ if update or sparse:
138
+ raise ValueError("Repository has local changes; update and sparse checkout were skipped.")
139
+ if sparse:
140
+ run(["git", "-C", str(path), "sparse-checkout", "set", "--no-cone", f"/{sparse}/"])
141
+ if update:
142
+ if not quiet:
143
+ print(f"Updating {path.name}...", flush=True)
144
+ run(["git", "-C", str(path), "fetch", "origin", ref])
145
+ run(["git", "-C", str(path), "merge", "--ff-only", "FETCH_HEAD"])
146
+ else:
147
+ if offline:
148
+ raise ValueError(f"Offline installation requires a local repository: {path}")
149
+ path.parent.mkdir(parents=True, exist_ok=True)
150
+ if not quiet:
151
+ print(f"Fetching {path.name}...", flush=True)
152
+ with tempfile.TemporaryDirectory(prefix=".precision-clone-", dir=path.parent) as tmp:
153
+ staged = Path(tmp) / "checkout"
154
+ command = ["git", "clone", "--depth", "1", "--single-branch", "--branch", ref]
155
+ if sparse:
156
+ command += ["--filter=blob:none", "--no-checkout"]
157
+ run([*command, "--", url, str(staged)])
158
+ if sparse:
159
+ run(["git", "-C", str(staged), "sparse-checkout", "set", "--no-cone", f"/{sparse}/"])
160
+ run(["git", "-C", str(staged), "checkout", ref])
161
+ if path.exists() or path.is_symlink():
162
+ raise ValueError("Destination changed during cloning; existing content was preserved.")
163
+ staged.rename(path)
164
+
165
+
166
+ def validate_package(package):
167
+ entry = package / "SKILL.md"
168
+ if not entry.is_file() or not re.search(rf"(?m)^name:\s*{SKILL}\s*$", entry.read_text(encoding="utf-8")):
169
+ raise ValueError("No tool-precision-debug release found; build development sources with scripts/install-dev.sh first.")
170
+ if {path.name for path in package.iterdir()} != {"SKILL.md", "references", "evals"} or list(package.rglob("viz.html")):
171
+ raise ValueError("Expected a pure Skill directory containing only SKILL.md, references and evals.")
172
+
173
+
174
+ def package_digest(package):
175
+ digest = hashlib.sha256()
176
+ for path in sorted(package.rglob("*")):
177
+ if path.is_symlink():
178
+ raise ValueError(f"Managed Skill content must not contain symlinks: {path}")
179
+ digest.update(path.relative_to(package).as_posix().encode() + b"\0")
180
+ digest.update(b"F" + hashlib.sha256(path.read_bytes()).digest() if path.is_file() else b"D")
181
+ return digest.hexdigest()
182
+
183
+
184
+ def install_package(project, package, url, ref, skill_path, *, offline, update):
185
+ """Keep only the pure Skill; use a temporary checkout for downloads and updates."""
186
+ state = package.parent / f".{SKILL}.json"
187
+ within_project(project, package)
188
+ within_project(project, state)
189
+ if package.is_symlink() or state.is_symlink():
190
+ raise ValueError("Managed Skill and installation state must not be symlinks.")
191
+ requested = {"repository": url, "ref": ref, "skill_path": skill_path.as_posix()}
192
+ previous_state = None
193
+ if package.exists() or state.exists():
194
+ if not package.is_dir() or not state.is_file():
195
+ raise ValueError("Existing Skill has no matching installation state; existing files were preserved.")
196
+ previous_state = state.read_bytes()
197
+ recorded = json.loads(previous_state)
198
+ if not isinstance(recorded, dict) or any(recorded.get(key) != value for key, value in requested.items()):
199
+ raise ValueError("Skill source does not match this installation; existing files were preserved.")
200
+ validate_package(package)
201
+ if recorded.get("digest") != package_digest(package):
202
+ raise ValueError("Managed Skill contains local changes; existing files were preserved.")
203
+ if not update:
204
+ return
205
+ elif offline:
206
+ raise ValueError(f"Offline installation requires an existing Skill: {package}")
207
+ package.parent.mkdir(parents=True, exist_ok=True)
208
+ print(f"{'Updating' if package.exists() else 'Fetching'} {SKILL}...", flush=True)
209
+ # Stage beside the destination so replacing the directory stays on one filesystem.
210
+ with tempfile.TemporaryDirectory(prefix=f".{SKILL}-", dir=package.parent) as temporary:
211
+ staging = Path(temporary)
212
+ checkout = staging / "checkout"
213
+ repository(checkout, url, ref, offline=False, update=False, sparse=skill_path.as_posix(), quiet=True)
214
+ downloaded = checkout / str(skill_path)
215
+ if downloaded.is_symlink() or not downloaded.resolve().is_relative_to(checkout.resolve()):
216
+ raise ValueError("Downloaded Skill path escapes the repository or is a symlink.")
217
+ validate_package(downloaded)
218
+ staged_state = staging / "state.json"
219
+ staged_state.write_text(json.dumps({**requested, "digest": package_digest(downloaded)}) + "\n", encoding="utf-8")
220
+ within_project(project, package)
221
+ if package.is_symlink() or state.is_symlink():
222
+ raise ValueError("Installation paths changed during download; existing files were preserved.")
223
+ if previous_state is None:
224
+ if package.exists() or state.exists():
225
+ raise ValueError("Installation destination appeared during download; existing files were preserved.")
226
+ elif (not package.is_dir() or not state.is_file() or state.read_bytes() != previous_state
227
+ or package_digest(package) != recorded["digest"]):
228
+ raise ValueError("Installed Skill changed during download; existing files were preserved.")
229
+ backup = staging / "previous"
230
+ if package.exists():
231
+ package.rename(backup)
232
+ try:
233
+ downloaded.rename(package)
234
+ os.replace(staged_state, state)
235
+ except BaseException:
236
+ if package.exists():
237
+ shutil.rmtree(package)
238
+ if backup.exists():
239
+ backup.rename(package)
240
+ raise
241
+
242
+
243
+ def check_runtime(knowledge, offline):
244
+ def ready():
245
+ required = [("PyYAML", 6, 7)]
246
+ if sys.version_info < (3, 11):
247
+ required.append(("tomli", 2, 3))
248
+ try:
249
+ return all(low <= int(importlib.metadata.version(name).split(".")[0]) < high for name, low, high in required)
250
+ except (importlib.metadata.PackageNotFoundError, ValueError):
251
+ return False
252
+
253
+ if ready():
254
+ return
255
+ if offline:
256
+ raise ValueError("Selected Python is missing dependencies; install the knowledge repository requirements.txt in the same environment.")
257
+ print("Installing knowledge query dependencies...", flush=True)
258
+ run([sys.executable, "-m", "pip", "install", "-r", str(knowledge / "requirements.txt")])
259
+ if not ready():
260
+ raise ValueError("Runtime dependencies are still unavailable; check the selected Python environment.")
261
+
262
+
263
+ def write_config(path, knowledge, platform):
264
+ previous = path.read_bytes() if path.exists() else None
265
+ path.parent.mkdir(parents=True, exist_ok=True)
266
+ updates = {ROOT_KEY: os.path.relpath(knowledge.resolve(), path.parent.resolve())}
267
+ if platform:
268
+ updates[PLATFORM_KEY] = platform
269
+ lines = (previous.decode("utf-8").splitlines() if previous is not None else [])
270
+ kept = [line for line in lines if not any(re.match(rf"^\s*(?:export\s+)?{key}=", line) for key in updates)]
271
+ content = "\n".join([*kept, *(f"{key}={shlex.quote(value)}" for key, value in updates.items())]) + "\n"
272
+ if previous == content.encode():
273
+ return
274
+ descriptor, temporary = tempfile.mkstemp(prefix=".knowledge-env-", dir=path.parent)
275
+ try:
276
+ with os.fdopen(descriptor, "w", encoding="utf-8") as stream:
277
+ stream.write(content)
278
+ if path.exists():
279
+ os.chmod(temporary, path.stat().st_mode & 0o777)
280
+ os.replace(temporary, path)
281
+ finally:
282
+ if os.path.exists(temporary):
283
+ os.unlink(temporary)
284
+
285
+
286
+ def remove_opencode_aliases(project, canonical):
287
+ """Remove redundant links from earlier installs, preserving unrelated entries."""
288
+ removed = False
289
+ for target, _ in canonical:
290
+ alias = project / ".opencode/skills" / target.name
291
+ if alias.parent.resolve() == target.parent.resolve():
292
+ continue # A shared parent must not turn alias cleanup into Skill deletion.
293
+ if not alias.is_symlink() or alias.resolve() != target.resolve():
294
+ continue
295
+ try:
296
+ within_project(project, alias)
297
+ alias.unlink()
298
+ except (OSError, ValueError):
299
+ print(f"Could not remove the old client link; it was preserved: {alias}", file=sys.stderr)
300
+ else:
301
+ removed = True
302
+ if removed:
303
+ for directory in (project / ".opencode/skills", project / ".opencode"):
304
+ if not directory.is_symlink():
305
+ try:
306
+ directory.rmdir()
307
+ except OSError:
308
+ pass # Keep Agent configuration, reference files and user content.
309
+
310
+
311
+ def main():
312
+ parser = argparse.ArgumentParser(description="Install the precision debugging Skill and CANN knowledge queries in the current project or globally.")
313
+ parser.add_argument("client", choices=ADAPTERS)
314
+ parser.add_argument("project", nargs="?", type=Path, help="existing project directory (default: current directory)")
315
+ parser.add_argument("--global", dest="global_install", action="store_true", help="install for the current user across projects")
316
+ parser.add_argument("--python", help="Python for installation and checks; defaults to CANNBOT_PYTHON or python3")
317
+ parser.add_argument("--package-root", type=Path, help="reuse a local tool-precision-debug release")
318
+ parser.add_argument("--knowledge-root", type=Path, help="reuse a complete local knowledge repository without automatic updates")
319
+ parser.add_argument("--platform", help="optional default platform ID for project installations")
320
+ parser.add_argument("--without-knowledge", action="store_true", help="install only the precision Skill")
321
+ parser.add_argument("--with-sources", choices=("docs", "code", "all"), help="also fetch original documentation or operator sources")
322
+ parser.add_argument("--offline", action="store_true", help="use existing local files and dependencies; local index building is allowed")
323
+ parser.add_argument("--update", action="store_true", help="update the managed Skill and knowledge repository")
324
+ parser.add_argument("--repository", default=PACKAGE_REPOSITORY, help="Git repository containing the precision release")
325
+ parser.add_argument("--ref", default=PACKAGE_REF, help="branch containing the precision release")
326
+ parser.add_argument("--skill-path", default=f"skills/{SKILL}/skills/{SKILL}", help="relative path of the pure Skill inside the repository")
327
+ parser.add_argument("--knowledge-repository", default="https://gitcode.com/cann/cannbot-knowledge.git")
328
+ parser.add_argument("--knowledge-ref", default="master")
329
+ args = parser.parse_args(sys.argv[2:])
330
+ skill_path = PurePosixPath(args.skill_path)
331
+ if (not skill_path.parts or skill_path.is_absolute() or ".." in skill_path.parts
332
+ or re.search(r"[\x00-\x1f*?\[\]\\]", args.skill_path)):
333
+ parser.error("--skill-path must be a relative repository path without wildcards.")
334
+ if sys.version_info < (3, 10):
335
+ parser.error("Python 3.10 or newer is required.")
336
+ if args.offline and (args.update or args.with_sources):
337
+ parser.error("--offline cannot be combined with --update or --with-sources.")
338
+ if args.without_knowledge and (args.with_sources or args.platform or args.knowledge_root):
339
+ parser.error("--without-knowledge cannot be combined with knowledge or platform options.")
340
+ if args.global_install and args.project is not None:
341
+ parser.error("--global cannot be combined with a project directory; omit the directory argument.")
342
+ if args.global_install and args.platform:
343
+ parser.error("--platform is a project setting; select the target platform when querying a global installation.")
344
+ project = (Path.home() if args.global_install else args.project or Path.cwd()).expanduser().resolve(strict=True)
345
+ if not project.is_dir():
346
+ parser.error("Installation root must be a directory.")
347
+ skill_directory = global_skill_directory(args.client, project) if args.global_install else project / ".agents/skills"
348
+ link_root = skill_directory.parent if args.global_install else project
349
+ # The independent knowledge-query dependency still reads this fixed path.
350
+ config = project / ".cannbot/knowledge.env"
351
+ existing = {}
352
+ if not args.without_knowledge:
353
+ within_project(project, config)
354
+ if config.is_symlink() or (config.exists() and not config.is_file()):
355
+ raise ValueError("Knowledge configuration path is a symlink or directory; it was not overwritten.")
356
+ existing = config_values(config)
357
+ knowledge_checkout = (config.parent / "cannbot-knowledge").resolve()
358
+ package = args.package_root
359
+ if package is None and sys.argv[1] and Path(sys.argv[1]).is_file():
360
+ adjacent = Path(sys.argv[1]).resolve().parent.parent / "skills" / SKILL
361
+ if (adjacent / "SKILL.md").is_file():
362
+ package = adjacent
363
+ package = package.expanduser().resolve() if package else None
364
+ remote_package = package is None
365
+ legacy_packages = set()
366
+ if remote_package:
367
+ package = project / ".asc-tools" / SKILL
368
+ legacy_packages = {(project / directory / PACKAGE_DIRECTORY / str(skill_path)).resolve()
369
+ for directory in (".cannbot/precision-debug", ".asc-tools/precision-debug")}
370
+ knowledge = None
371
+ managed_knowledge = False
372
+ if not args.without_knowledge:
373
+ if args.knowledge_root:
374
+ knowledge = args.knowledge_root.expanduser().resolve()
375
+ elif existing.get(ROOT_KEY):
376
+ value = Path(existing[ROOT_KEY]).expanduser()
377
+ knowledge = (value if value.is_absolute() else config.parent / value).resolve()
378
+ elif os.environ.get(ROOT_KEY):
379
+ knowledge = Path(os.environ[ROOT_KEY]).expanduser().resolve()
380
+ else:
381
+ knowledge = knowledge_checkout
382
+ # Keep an existing managed knowledge checkout updateable at its old location.
383
+ managed_knowledge = knowledge in {
384
+ knowledge_checkout, (config.parent / "precision-debug/cannbot-knowledge").resolve(),
385
+ }
386
+ override = os.environ.get(ROOT_KEY)
387
+ if override and Path(override).expanduser().resolve() != knowledge:
388
+ raise ValueError("CANNBOT_KNOWLEDGE_ROOT conflicts with the project configuration; unset it in this shell and retry.")
389
+ links = [(skill_directory / SKILL, package)]
390
+ if knowledge:
391
+ links += [(skill_directory / name, knowledge / ".agents/skills" / name) for name in QUERIES]
392
+ canonical = list(links)
393
+ if not args.global_install and ADAPTERS[args.client]:
394
+ links += [(project / ADAPTERS[args.client] / target.name, target) for target, _ in canonical]
395
+ precision_link = canonical[0][0]
396
+ for target, source in links:
397
+ preflight_link(link_root, target, source, legacy_packages if target == precision_link else ())
398
+ if remote_package:
399
+ within_project(project, package)
400
+ if managed_knowledge:
401
+ within_project(project, knowledge)
402
+ if (remote_package or knowledge) and not shutil.which("git"):
403
+ raise ValueError("Git is required to fetch repositories and prepare the query index.")
404
+ if remote_package:
405
+ install_package(project, package, args.repository, args.ref, skill_path, offline=args.offline, update=args.update)
406
+ validate_package(package)
407
+ if knowledge:
408
+ if managed_knowledge:
409
+ repository(knowledge, args.knowledge_repository, args.knowledge_ref, offline=args.offline, update=args.update)
410
+ required = ["knowledge/index.md", "requirements.txt", "governance/contracts/knowledge.py", "governance/schemas/registries.yaml", ".agents/skills/knowledge-query/scripts/knowledge_query.py", ".agents/skills/knowledge-query/scripts/knowledge_index.py", ".agents/skills/ascendc-api-knowledge-query/scripts/resolve_resources.py"]
411
+ required += [f".agents/skills/{name}/SKILL.md" for name in QUERIES]
412
+ if any(not (knowledge / value).is_file() for value in required):
413
+ raise ValueError("Incomplete knowledge repository; --knowledge-root must point to a complete cannbot-knowledge checkout.")
414
+ check_runtime(knowledge, args.offline)
415
+ if args.platform:
416
+ import yaml
417
+ registry = yaml.safe_load((knowledge / "governance/schemas/registries.yaml").read_text())
418
+ if args.platform not in registry["platforms"]:
419
+ raise ValueError("--platform is not registered in this knowledge repository.")
420
+ if args.with_sources:
421
+ print(f"Fetching source resources: {args.with_sources}", flush=True)
422
+ run(["bash", str(knowledge / "get_resources.sh"), f"--{args.with_sources}"], env={**os.environ, "CANNBOT_PYTHON": sys.executable})
423
+ index = knowledge / ".agents/skills/knowledge-query/scripts/knowledge_index.py"
424
+ check = subprocess.run([sys.executable, str(index), "--knowledge-root", str(knowledge), "verify", "--level", "quick"], capture_output=True)
425
+ if check.returncode:
426
+ print("Building knowledge query index...", flush=True)
427
+ run([sys.executable, str(index), "--knowledge-root", str(knowledge), "build"])
428
+ run([sys.executable, str(index), "--knowledge-root", str(knowledge), "verify", "--level", "quick"])
429
+ query = knowledge / ".agents/skills/knowledge-query/scripts/knowledge_query.py"
430
+ run([sys.executable, str(query), "--knowledge-root", str(knowledge), "discover"], cwd=project)
431
+ created = []
432
+ try:
433
+ if knowledge:
434
+ within_project(project, config)
435
+ if config.is_symlink() or (config.exists() and not config.is_file()):
436
+ raise ValueError("Knowledge configuration path changed during preparation; project entries were not written.")
437
+ for target, source in links:
438
+ preflight_link(link_root, target, source, legacy_packages if target == precision_link else ())
439
+ if target.is_dir() and target.resolve() == source.resolve():
440
+ continue
441
+ previous_link = os.readlink(target) if target.is_symlink() else None
442
+ target.parent.mkdir(parents=True, exist_ok=True)
443
+ try:
444
+ with tempfile.TemporaryDirectory(prefix=".skill-link-", dir=target.parent) as temporary:
445
+ staged = Path(temporary) / target.name
446
+ staged.symlink_to(os.path.relpath(source, target.parent.resolve()), target_is_directory=True)
447
+ os.replace(staged, target)
448
+ except OSError as exc:
449
+ raise ValueError(f"Cannot create Skill link: {target} ({exc.strerror})") from exc
450
+ created.append((target, source, previous_link))
451
+ if knowledge:
452
+ write_config(config, knowledge, args.platform)
453
+ except BaseException:
454
+ for target, source, previous_link in reversed(created):
455
+ if target.is_symlink() and target.resolve() == source.resolve():
456
+ target.unlink()
457
+ if previous_link is not None:
458
+ target.symlink_to(previous_link, target_is_directory=True)
459
+ raise
460
+ if not args.global_install and args.client == "opencode":
461
+ remove_opencode_aliases(project, canonical)
462
+ print(f"Installed{' globally' if args.global_install else ''}: {project}")
463
+ print(f"{SKILL}: {precision_link}")
464
+ print(f"Python: {sys.executable}")
465
+ if knowledge:
466
+ print(f"Knowledge: {knowledge}")
467
+ print("Restart your client to load the Skill.")
468
+
469
+
470
+ try:
471
+ main()
472
+ except (OSError, ValueError, subprocess.SubprocessError) as exc:
473
+ print(f"Installation failed: {exc}", file=sys.stderr)
474
+ raise SystemExit(2)
475
+ PY
@@ -0,0 +1,38 @@
1
+ CANN Open Software License Agreement Version 2.0
2
+
3
+ This CANN Open Software License Agreement Version 2.0 (hereinafter referred to as this "Agreement") is a legal agreement between you and Huawei, and it governs your use, modification, or distribution of CANN Open Software (hereinafter referred to as "Software"). Please read this Agreement carefully.
4
+
5
+ If you are entering into this Agreement on behalf of a company or other legal entity, you represent that you have the legal authority to bind that entity to this Agreement, in which case "you" will mean the entity you represent.
6
+
7
+ BY DOWNLOADING, INSTALLING, OR USING THE SOFTWARE, YOU AGREE YOU HAVE FULLY UNDERSTOOD AND ACCEPTED THE TERMS CONTAINED HEREIN. IF YOU DO NOT AGREE TO ANY OF THE TERMS OF THIS AGREEMENT, OR IF YOU DO NOT QUALIFY FOR AGREEING TO THIS AGREEMENT, YOU ARE NOT AUTHORIZED TO AND SHALL NOT DOWNLOAD, INSTALL, OR MAKE ANY USE OF THE SOFTWARE.
8
+
9
+ 1. Definition
10
+
11
+ 1.1 Software means the APIs, source code files, binaries, and related documents of Compute Architecture for Neural Networks("CANN") that are licensable by Huawei, and provided and licensed under this Agreement.
12
+
13
+ 1.2 Huawei AI Processors mean AI chipsets (i) branded with "Ascend", "Kirin"," Yueying" or other brands owned or controlled by Huawei; or (ii) manufactured (including have manufactured), supplied (including have supplied) or designed (including have designed) by Huawei.
14
+
15
+ 2. Grant of Intellectual Property Rights
16
+ 2.1 Subject to the terms and conditions of this Agreement, including your full compliance thereof, Huawei hereby grants you a limited, worldwide, royalty-free, non-transferable, non-sublicensable, and revocable license for you to (i) download, use, modify, integrate, and distribute the Software or its derivative works for the purpose of developing software solely for use in systems with Huawei AI Processors and/or Software, and (ii) distribute any software developed based upon Software and/or its derivative works solely for use in systems with Huawei AI Processors and/or Software.
17
+
18
+ 3. Restrictions
19
+ 3.1 You are not authorized to, and shall not use, modify, or distribute this Software or its derivative works for any other purposes than those expressly permitted by this Agreement. You shall not make any use of the Software or its derivative works to develop or distribute any software for use in systems with processors other than Huawei AI Processors. All rights not expressly granted herein are expressly reserved by Huawei.
20
+
21
+ 3.2 You are not authorized to, and shall not remove, obscure, or alter any copyright or other notices in this Software or any part of it.
22
+
23
+ 3.3 Distribution Restrictions
24
+ You may distribute the Software or its derivative works in any medium, whether in source or executable forms, for the purpose stipulated in Section 2; provided that you provide recipients with a copy of this Agreement, and retain all notices in the Software.
25
+
26
+ 4. Disclaimer of Warranty and Limitation of Liability
27
+ THE SOFTWARE IS PROVIDED WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED. IN NO EVENT SHALL HUAWEI OR ANY OTHER COPYRIGHT HOLDER BE LIABLE TO YOU FOR ANY DAMAGES, INCLUDING, BUT NOT LIMITED TO ANY DIRECT, OR INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES ARISING FROM YOUR USE OR INABILITY TO USE THE SOFTWARE, IN WHOLE OR IN PART, NO MATTER HOW IT IS CAUSED OR THE LEGAL THEORY IT IS BASED ON, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
28
+
29
+ 5. Termination
30
+ 5.1 This Agreement will continue to apply until terminated by either you or Huawei as described below:
31
+ a.You may terminate this Agreement by ceasing your use of the Software;
32
+ b. Huawei may at any time, terminate this Agreement if: (i) you fail to comply with any term of this Agreement; or (ii) you directly or indirectly initiate any legal proceeding against any individual or entity by alleging that the Software or any part of it infringes your intellectual property rights.
33
+ 5.2 By termination, all the rights granted to you under this Agreement are terminated, and you shall cease to use and delete this Software or any derivative works immediately. All rights granted to you under this Agreement shall hereby be void ab initio in the event of termination in accordance with Section 5.1. b above. Huawei reserves the right to pursue any and all legal remedies available to enforce the terms and conditions of this Agreement or to protect Huawei’s intellectual property rights for such breach or violation. All provisions shall survive the termination of this Agreement except for Section 2 and Section 3.3.
34
+
35
+ 6. MISCELLANEOUS
36
+ If the application of any provision of this Agreement to any particular facts or circumstances is held to be invalid or unenforceable by a court of competent jurisdiction, then (a) the validity and enforceability of such provision as applied to any other particular facts or circumstances and the validity of other provisions of this Agreement shall not in any way be affected or impaired thereby and (b) such provision shall be enforced to the maximum extent possible so as to affect the intent of the you and Huawei and reformed without further action by you and Huawei to the extent necessary to make such provision valid and enforceable.
37
+
38
+ END OF THE TERMS AND CONDITIONS