@ohos-cpf/3rdloop 0.0.1

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 (389) hide show
  1. package/README.md +425 -0
  2. package/bin/3rdloop.mjs +48 -0
  3. package/lib/cli.js +741 -0
  4. package/lib/config.js +318 -0
  5. package/lib/doctor.js +114 -0
  6. package/lib/exit-codes.js +31 -0
  7. package/lib/opencode.js +156 -0
  8. package/lib/orch.js +427 -0
  9. package/lib/queries.js +264 -0
  10. package/lib/runner.js +979 -0
  11. package/lib/step.js +326 -0
  12. package/lib/ui.js +223 -0
  13. package/lib/workflow.js +291 -0
  14. package/lib/workflows.js +132 -0
  15. package/package.json +50 -0
  16. package/vendor/Server/Agent/SkillSelector/README.md +344 -0
  17. package/vendor/Server/Agent/SkillSelector/core/Agent.js +207 -0
  18. package/vendor/Server/Agent/SkillSelector/index.js +14 -0
  19. package/vendor/Server/Agent/SkillSelector/llm/llmClient.js +313 -0
  20. package/vendor/Server/Agent/SkillSelector/llm/prompts.js +161 -0
  21. package/vendor/Server/Agent/SkillSelector/llm/reactSteps.js +144 -0
  22. package/vendor/Server/Agent/SkillSelector/matcher/fuzzyMatcher.js +433 -0
  23. package/vendor/Server/Agent/SkillSelector/scanner/skillScanner.js +382 -0
  24. package/vendor/Server/Agent/SkillSelector/types.js +63 -0
  25. package/vendor/Server/Agent/SkillSelector/utils/actionWords.js +60 -0
  26. package/vendor/Server/Brain/AnalysisStrategies.js +422 -0
  27. package/vendor/Server/Brain/Brain.js +686 -0
  28. package/vendor/Server/Brain/DecompositionStrategies.js +621 -0
  29. package/vendor/Server/Brain/PlanPersistence.js +196 -0
  30. package/vendor/Server/Brain/SkillExecutor.js +251 -0
  31. package/vendor/Server/Brain/index.js +11 -0
  32. package/vendor/Server/CLI/cli.js +243 -0
  33. package/vendor/Server/CLI/opencode/index.js +804 -0
  34. package/vendor/Server/CLI/opencode.js +5 -0
  35. package/vendor/Server/DbUse/MessageArchive.js +61 -0
  36. package/vendor/Server/DbUse/StorageManager.js +107 -0
  37. package/vendor/Server/DbUse/adapters/BaseAdapter.js +94 -0
  38. package/vendor/Server/DbUse/adapters/FileAdapter.js +138 -0
  39. package/vendor/Server/DbUse/adapters/JsonAdapter.js +138 -0
  40. package/vendor/Server/DbUse/adapters/JsonlAdapter.js +114 -0
  41. package/vendor/Server/DbUse/adapters/SqliteAdapter.js +157 -0
  42. package/vendor/Server/DbUse/index.js +160 -0
  43. package/vendor/Server/DbUse/stores/SessionStore.js +279 -0
  44. package/vendor/Server/DbUse/stores/TaskExecutionStore.js +133 -0
  45. package/vendor/Server/DbUse/stores/TaskRegistryStore.js +262 -0
  46. package/vendor/Server/DbUse/stores/TaskStepStore.js +279 -0
  47. package/vendor/Server/FlexRunner/FlexRunner.js +1759 -0
  48. package/vendor/Server/FlexRunner/index.js +12 -0
  49. package/vendor/Server/Knowledge/KnowledgeImporter.js +523 -0
  50. package/vendor/Server/Knowledge/KnowledgeManager.js +341 -0
  51. package/vendor/Server/Knowledge/index.js +33 -0
  52. package/vendor/Server/LoopEngine/LoopEngine.js +1133 -0
  53. package/vendor/Server/LoopEngine/index.js +11 -0
  54. package/vendor/Server/Orchestrator/Orchestrator.js +1425 -0
  55. package/vendor/Server/Orchestrator/StepNode.js +312 -0
  56. package/vendor/Server/Orchestrator/index.js +13 -0
  57. package/vendor/Server/Routes/controllers/BrainController.js +241 -0
  58. package/vendor/Server/Routes/controllers/FlexRunnerController.js +1125 -0
  59. package/vendor/Server/Routes/controllers/HealthController.js +44 -0
  60. package/vendor/Server/Routes/controllers/KnowledgeImportController.js +355 -0
  61. package/vendor/Server/Routes/controllers/LoopEngineController.js +788 -0
  62. package/vendor/Server/Routes/controllers/OrchestratorController.js +911 -0
  63. package/vendor/Server/Routes/controllers/StatsController.js +57 -0
  64. package/vendor/Server/Routes/controllers/StreamController.js +67 -0
  65. package/vendor/Server/Routes/library/logger.js +179 -0
  66. package/vendor/Server/Routes/library/zipArchive.js +172 -0
  67. package/vendor/Server/Routes/router/Router.js +204 -0
  68. package/vendor/Server/Routes/routes/brain.js +47 -0
  69. package/vendor/Server/Routes/routes/flexrunner.js +72 -0
  70. package/vendor/Server/Routes/routes/health.js +28 -0
  71. package/vendor/Server/Routes/routes/index.js +57 -0
  72. package/vendor/Server/Routes/routes/knowledge.js +55 -0
  73. package/vendor/Server/Routes/routes/loopengine.js +58 -0
  74. package/vendor/Server/Routes/routes/orchestrator.js +61 -0
  75. package/vendor/Server/Routes/routes/registry.js +98 -0
  76. package/vendor/Server/Routes/routes/stats.js +23 -0
  77. package/vendor/Server/Routes/routes/stream.js +30 -0
  78. package/vendor/Server/Routes/server.js +202 -0
  79. package/vendor/Server/Routes/sse/SseHub.js +308 -0
  80. package/vendor/Server/Skills/acceptance-check/SKILL.md +174 -0
  81. package/vendor/Server/Skills/acceptance-check/references/PHASE1_ARTIFACT_COLLECTION.md +52 -0
  82. package/vendor/Server/Skills/acceptance-check/references/PHASE2_CRITERIA_EVALUATION.md +77 -0
  83. package/vendor/Server/Skills/arkts-code-check/SKILL.md +314 -0
  84. package/vendor/Server/Skills/arkts-code-check/references/CODE_CHECK_GUIDE.md +160 -0
  85. package/vendor/Server/Skills/arkts-code-check/references/FILE_TYPE_GUIDE.md +29 -0
  86. package/vendor/Server/Skills/arkts-code-check/references/PHASE1_INFO_COLLECTION.md +222 -0
  87. package/vendor/Server/Skills/arkts-code-check/references/REPORT_TEMPLATE.md +220 -0
  88. package/vendor/Server/Skills/arkts-library-compile-validate/SKILL.md +329 -0
  89. package/vendor/Server/Skills/arkts-library-compile-validate/scripts/build.ps1 +93 -0
  90. package/vendor/Server/Skills/arkts-library-compile-validate/scripts/code-linter.cjs +433 -0
  91. package/vendor/Server/Skills/arkts-library-compile-validate/scripts/migrate.cjs +851 -0
  92. package/vendor/Server/Skills/arkts-library-compile-validate/scripts/ohpm-switch.cjs +789 -0
  93. package/vendor/Server/Skills/arkts-library-demo-code/SKILL.md +291 -0
  94. package/vendor/Server/Skills/arkts-library-demo-code/references/API_SIGNATURE_CHECKS.md +68 -0
  95. package/vendor/Server/Skills/arkts-library-demo-code/references/BUILD_VALIDATION.md +184 -0
  96. package/vendor/Server/Skills/arkts-library-demo-code/references/CODE_STANDARDS.md +337 -0
  97. package/vendor/Server/Skills/arkts-library-demo-code/references/EXAMPLES.md +400 -0
  98. package/vendor/Server/Skills/arkts-library-demo-code/references/SYSTEM_API_LOOKUP.md +99 -0
  99. package/vendor/Server/Skills/arkts-library-demo-code/references/TEMPLATE.md +544 -0
  100. package/vendor/Server/Skills/arkts-library-demo-code/scripts/build.ps1 +93 -0
  101. package/vendor/Server/Skills/arkts-library-demo-code/scripts/code-linter.cjs +433 -0
  102. package/vendor/Server/Skills/arkts-library-demo-code/scripts/migrate.cjs +851 -0
  103. package/vendor/Server/Skills/arkts-library-demo-code/scripts/ohpm-switch.cjs +789 -0
  104. package/vendor/Server/Skills/arkts-library-demo-coverage/SKILL.md +174 -0
  105. package/vendor/Server/Skills/arkts-library-demo-scenario/SKILL.md +321 -0
  106. package/vendor/Server/Skills/arkts-library-demo-scenario/references/EXAMPLES.md +100 -0
  107. package/vendor/Server/Skills/arkts-library-demo-scenario/references/TEMPLATE.md +185 -0
  108. package/vendor/Server/Skills/arkts-library-documentation-quality-check/SKILL.md +234 -0
  109. package/vendor/Server/Skills/arkts-library-documentation-quality-check/assets/REPORT_TEMPLATE.md +103 -0
  110. package/vendor/Server/Skills/arkts-library-documentation-quality-check/references/CHECK_DIMENSIONS.md +89 -0
  111. package/vendor/Server/Skills/arkts-library-documentation-quality-check/references/COMPLIANCE_CHECKLIST.md +62 -0
  112. package/vendor/Server/Skills/arkts-library-documentation-quality-check/references/KB_QUERY_GUIDE.md +108 -0
  113. package/vendor/Server/Skills/arkts-library-documentation-quality-check/references/MCP_TOOL_DISCOVERY.md +124 -0
  114. package/vendor/Server/Skills/arkts-library-documentation-quality-check/references/REPORT_TEMPLATE.md +90 -0
  115. package/vendor/Server/Skills/arkts-library-documentation-quality-check/references/SCORING_FORMULA.md +57 -0
  116. package/vendor/Server/Skills/arkts-library-documentation-quality-check/scripts/validate-skill.cjs +259 -0
  117. package/vendor/Server/Skills/arkts-library-interface-spec/SKILL.md +97 -0
  118. package/vendor/Server/Skills/arkts-library-memory-leak-check/SKILL.md +392 -0
  119. package/vendor/Server/Skills/arkts-library-source-clone/SKILL.md +113 -0
  120. package/vendor/Server/Skills/arkts-library-stability-check/SKILL.md +313 -0
  121. package/vendor/Server/Skills/arkts-library-stability-check/assets/REPORT_TEMPLATE.md +154 -0
  122. package/vendor/Server/Skills/arkts-library-stability-check/references/CHECKLIST.md +166 -0
  123. package/vendor/Server/Skills/arkts-library-stability-check/references/CODE_EXAMPLES.md +309 -0
  124. package/vendor/Server/Skills/arkts-library-stability-check/references/SCORING_RULES.md +90 -0
  125. package/vendor/Server/Skills/arkts-library-stability-check/scripts/validate-skill.cjs +282 -0
  126. package/vendor/Server/Skills/arkts-library-test-coverage-check/SKILL.md +361 -0
  127. package/vendor/Server/Skills/arkts-library-test-coverage-check/assets/REPORT_TEMPLATE.md +146 -0
  128. package/vendor/Server/Skills/arkts-library-test-coverage-check/references/CHECKLIST.md +253 -0
  129. package/vendor/Server/Skills/arkts-library-test-coverage-check/references/MCP_TOOL_USAGE.md +115 -0
  130. package/vendor/Server/Skills/arkts-library-test-coverage-check/scripts/validate-skill.cjs +263 -0
  131. package/vendor/Server/Skills/arkts-library-xts-code/SKILL.md +455 -0
  132. package/vendor/Server/Skills/arkts-library-xts-code/assets/report-template.md +60 -0
  133. package/vendor/Server/Skills/arkts-library-xts-code/references/ACCESS_MODIFIER_PRECHECK.md +76 -0
  134. package/vendor/Server/Skills/arkts-library-xts-code/references/BUILD_VERIFICATION.md +200 -0
  135. package/vendor/Server/Skills/arkts-library-xts-code/references/CODE_STANDARDS.md +519 -0
  136. package/vendor/Server/Skills/arkts-library-xts-code/references/SUBAGENT_PROMPT_TEMPLATE.md +276 -0
  137. package/vendor/Server/Skills/arkts-library-xts-code/references/SYSTEM_API_LOOKUP.md +93 -0
  138. package/vendor/Server/Skills/arkts-library-xts-code/references/XTS_TEMPLATE.md +767 -0
  139. package/vendor/Server/Skills/arkts-library-xts-code/scripts/build.ps1 +93 -0
  140. package/vendor/Server/Skills/arkts-library-xts-code/scripts/code-linter.cjs +433 -0
  141. package/vendor/Server/Skills/arkts-library-xts-code/scripts/migrate.cjs +851 -0
  142. package/vendor/Server/Skills/arkts-library-xts-code/scripts/ohpm-switch.cjs +789 -0
  143. package/vendor/Server/Skills/arkts-library-xts-code/scripts/precheck-access-modifiers.cjs +221 -0
  144. package/vendor/Server/Skills/arkts-library-xts-code-fix/SKILL.md +229 -0
  145. package/vendor/Server/Skills/arkts-library-xts-coverage/SKILL.md +97 -0
  146. package/vendor/Server/Skills/arkts-library-xts-doc/SKILL.md +194 -0
  147. package/vendor/Server/Skills/arkts-library-xts-doc/references/EXAMPLES.md +576 -0
  148. package/vendor/Server/Skills/arkts-library-xts-doc/references/TEMPLATE.md +575 -0
  149. package/vendor/Server/Skills/arkts-library-xts-doc/references/TESTABILITY_GUIDE.md +182 -0
  150. package/vendor/Server/Skills/arkts-library-xts-execution/SKILL.md +491 -0
  151. package/vendor/Server/Skills/arkts-library-xts-execution/references/error-fixing-examples.md +217 -0
  152. package/vendor/Server/Skills/arkts-library-xts-execution/scripts/build.ps1 +93 -0
  153. package/vendor/Server/Skills/arkts-library-xts-execution/scripts/code-linter.cjs +433 -0
  154. package/vendor/Server/Skills/arkts-library-xts-execution/scripts/migrate.cjs +851 -0
  155. package/vendor/Server/Skills/arkts-library-xts-execution/scripts/ohpm-switch.cjs +789 -0
  156. package/vendor/Server/Skills/flutter-code-check/SKILL.md +299 -0
  157. package/vendor/Server/Skills/flutter-code-check/assets/OUTPUT_TEMPLATE.md +312 -0
  158. package/vendor/Server/Skills/flutter-code-check/references/CHECKLIST.md +190 -0
  159. package/vendor/Server/Skills/flutter-code-check/references/PLATFORMS.md +134 -0
  160. package/vendor/Server/Skills/flutter-code-check/scripts/validate-skill.cjs +259 -0
  161. package/vendor/Server/Skills/flutter-interface/README.md +75 -0
  162. package/vendor/Server/Skills/flutter-interface/SKILL.md +291 -0
  163. package/vendor/Server/Skills/flutter-interface/references/EXAMPLES.md +336 -0
  164. package/vendor/Server/Skills/flutter-interface/references/GIT_CLONE_GUIDE.md +190 -0
  165. package/vendor/Server/Skills/flutter-interface/references/SCRIPT_REFERENCE.md +258 -0
  166. package/vendor/Server/Skills/flutter-interface/references/TEMPLATE.md +254 -0
  167. package/vendor/Server/Skills/flutter-library-consistency-check/SKILL.md +518 -0
  168. package/vendor/Server/Skills/flutter-library-consistency-check/references/CHECKLIST.md +382 -0
  169. package/vendor/Server/Skills/flutter-library-consistency-check/references/FUNCTION_COMPARISON_GUIDE.md +342 -0
  170. package/vendor/Server/Skills/flutter-library-consistency-check/references/PLATFORM_LIMITATION_GUIDE.md +71 -0
  171. package/vendor/Server/Skills/flutter-library-documentation-quality-check/SKILL.md +519 -0
  172. package/vendor/Server/Skills/flutter-library-documentation-quality-check/references/CHECKLIST.md +407 -0
  173. package/vendor/Server/Skills/flutter-library-memory-leak-check/SKILL.md +653 -0
  174. package/vendor/Server/Skills/flutter-library-memory-leak-check/references/CHECKLIST.md +397 -0
  175. package/vendor/Server/Skills/flutter-library-stability-check/SKILL.md +745 -0
  176. package/vendor/Server/Skills/flutter-library-stability-check/references/CHECKLIST.md +721 -0
  177. package/vendor/Server/Skills/flutter-library-test-coverage-check/SKILL.md +414 -0
  178. package/vendor/Server/Skills/flutter-library-test-coverage-check/assets/REPORT_TEMPLATE.md +150 -0
  179. package/vendor/Server/Skills/flutter-library-test-coverage-check/references/CHECKLIST.md +304 -0
  180. package/vendor/Server/Skills/flutter-library-test-coverage-check/references/SCORING_RULES.md +265 -0
  181. package/vendor/Server/Skills/flutter-library-test-coverage-check/references/SCRIPT_USAGE.md +286 -0
  182. package/vendor/Server/Skills/knowledge-import/SKILL.md +383 -0
  183. package/vendor/Server/Skills/knowledge-import/references/MCP_TOOL_USAGE.md +165 -0
  184. package/vendor/Server/Skills/knowledge-import/references/SKILL_LOCATOR_GUIDE.md +91 -0
  185. package/vendor/Server/Skills/knowledge-import/references/SKILL_OPTIMIZATION_GUIDE.md +127 -0
  186. package/vendor/Server/Skills/ohos-lib-pr-push/SKILL.md +301 -0
  187. package/vendor/Server/Skills/ohos-lib-pr-push/assets/PR_ISSUE_TEMPLATE.md +105 -0
  188. package/vendor/Server/Skills/ohos-lib-pr-push/references/GITCODE_API.md +127 -0
  189. package/vendor/Server/Skills/ohos-lib-pr-push/scripts/gitcode-api.cjs +208 -0
  190. package/vendor/Server/Skills/rn-code-check/SKILL.md +321 -0
  191. package/vendor/Server/Skills/rn-code-check/references/API-GUIDE.md +235 -0
  192. package/vendor/Server/Skills/rn-code-check/references/CHECKLIST.md +189 -0
  193. package/vendor/Server/Skills/rn-code-check/references/REPORT-TEMPLATE.md +247 -0
  194. package/vendor/Server/Skills/rn-lib-add-example/SKILL.md +198 -0
  195. package/vendor/Server/Skills/rn-lib-add-example/references/APP_RENAME_GUIDE.md +40 -0
  196. package/vendor/Server/Skills/rn-lib-add-example/references/SHELL_ADAPTATION_CHECKLIST.md +78 -0
  197. package/vendor/Server/Skills/rn-lib-add-example/references/TEMPLATE_REPO_GUIDE.md +70 -0
  198. package/vendor/Server/Skills/rn-lib-add-example/references/VERIFICATION_GUIDE.md +47 -0
  199. package/vendor/Server/Skills/rn-lib-add-example/scripts/create-example.cjs +252 -0
  200. package/vendor/Server/Skills/rn-lib-update-doc/SKILL.md +176 -0
  201. package/vendor/Server/Skills/rn-lib-update-doc/config.json +5 -0
  202. package/vendor/Server/Skills/rn-lib-update-doc/references/changelog-template.md +35 -0
  203. package/vendor/Server/Skills/rn-lib-update-doc/references/format-diff.md +137 -0
  204. package/vendor/Server/Skills/rn-lib-update-doc/references/link-registry.json +33 -0
  205. package/vendor/Server/Skills/rn-lib-update-doc/references/model-0.4.2-overview.md +40 -0
  206. package/vendor/Server/Skills/rn-lib-update-doc/references/model-0.4.2.md +429 -0
  207. package/vendor/Server/Skills/rn-lib-update-doc/scripts/detect-readme-format.cjs +105 -0
  208. package/vendor/Server/Skills/rn-lib-update-doc/scripts/find-usage-doc.cjs +90 -0
  209. package/vendor/Server/Skills/rn-lib-update-doc/scripts/link-verify.cjs +213 -0
  210. package/vendor/Server/Skills/rn-lib-update-doc/scripts/normalize-changelog.cjs +73 -0
  211. package/vendor/Server/Skills/rn-lib-update-doc/scripts/normalize-package-meta.cjs +258 -0
  212. package/vendor/Server/Skills/rn-lib-update-doc/scripts/normalize-readme-links.cjs +341 -0
  213. package/vendor/Server/Skills/rn-lib-update-doc/scripts/resolve-usage-docs.cjs +67 -0
  214. package/vendor/Server/Skills/rn-library-consistency-check/SKILL.md +299 -0
  215. package/vendor/Server/Skills/rn-library-consistency-check/assets/REPORT_TEMPLATE.md +293 -0
  216. package/vendor/Server/Skills/rn-library-consistency-check/references/ARKTS_COMPONENT_CHECK_GUIDE.md +857 -0
  217. package/vendor/Server/Skills/rn-library-consistency-check/references/ARKTS_TURBOMODULE_CHECK_GUIDE.md +856 -0
  218. package/vendor/Server/Skills/rn-library-consistency-check/references/CHECKLIST.md +157 -0
  219. package/vendor/Server/Skills/rn-library-consistency-check/references/CPP_COMPONENT_CHECK_GUIDE.md +801 -0
  220. package/vendor/Server/Skills/rn-library-consistency-check/references/CPP_TURBOMODULE_CHECK_GUIDE.md +684 -0
  221. package/vendor/Server/Skills/rn-library-consistency-check/references/FUNCTION_COMPARISON_GUIDE.md +233 -0
  222. package/vendor/Server/Skills/rn-library-consistency-check/references/NATIVE_COMPONENT_IDENTIFICATION.md +1373 -0
  223. package/vendor/Server/Skills/rn-library-consistency-check/references/SCORING_STANDARD.md +220 -0
  224. package/vendor/Server/Skills/rn-library-consistency-check/scripts/validate-skill.py +245 -0
  225. package/vendor/Server/Skills/rn-library-documentation-quality-check/SKILL.md +263 -0
  226. package/vendor/Server/Skills/rn-library-documentation-quality-check/assets/MODEL.md +414 -0
  227. package/vendor/Server/Skills/rn-library-documentation-quality-check/assets/MODEL_en.md +413 -0
  228. package/vendor/Server/Skills/rn-library-documentation-quality-check/assets/REPORT_TEMPLATE.md +311 -0
  229. package/vendor/Server/Skills/rn-library-documentation-quality-check/references/CHECK_CHECKLIST.md +355 -0
  230. package/vendor/Server/Skills/rn-library-documentation-quality-check/references/CROSS_VALIDATION_GUIDE.md +115 -0
  231. package/vendor/Server/Skills/rn-library-documentation-quality-check/references/DOC_COLLECTION_GUIDE.md +139 -0
  232. package/vendor/Server/Skills/rn-library-documentation-quality-check/references/EXAMPLES.md +586 -0
  233. package/vendor/Server/Skills/rn-library-documentation-quality-check/references/GOTCHAS.md +57 -0
  234. package/vendor/Server/Skills/rn-library-documentation-quality-check/scripts/validate-skill.py +259 -0
  235. package/vendor/Server/Skills/rn-library-interface-analyzer/SKILL.md +301 -0
  236. package/vendor/Server/Skills/rn-library-interface-analyzer/assets/REPORT_TEMPLATE.md +148 -0
  237. package/vendor/Server/Skills/rn-library-interface-analyzer/references/DOC_ANNOTATION_GUIDE.md +118 -0
  238. package/vendor/Server/Skills/rn-library-interface-analyzer/references/SCRIPT_USAGE_GUIDE.md +168 -0
  239. package/vendor/Server/Skills/rn-library-interface-analyzer/references/URL_PARSING_RULES.md +176 -0
  240. package/vendor/Server/Skills/rn-library-issue-generalizer/SKILL.md +274 -0
  241. package/vendor/Server/Skills/rn-library-issue-generalizer/assets/case-template.md +45 -0
  242. package/vendor/Server/Skills/rn-library-issue-generalizer/assets/rule-template.md +25 -0
  243. package/vendor/Server/Skills/rn-library-issue-generalizer/references/PR_FETCH_GUIDE.md +61 -0
  244. package/vendor/Server/Skills/rn-library-issue-generalizer/references/RULE_TEMPLATE_GUIDE.md +165 -0
  245. package/vendor/Server/Skills/rn-library-issue-generalizer/scripts/fetch-pr-info.py +239 -0
  246. package/vendor/Server/Skills/rn-library-known-issue-check/SKILL.md +263 -0
  247. package/vendor/Server/Skills/rn-library-known-issue-check/assets/REPORT_TEMPLATE.md +96 -0
  248. package/vendor/Server/Skills/rn-library-known-issue-check/references/COMPLIANCE_CHECKLIST.md +58 -0
  249. package/vendor/Server/Skills/rn-library-known-issue-check/references/INSPECTION_GUIDE.md +99 -0
  250. package/vendor/Server/Skills/rn-library-known-issue-check/references/PRESCREEN_GUIDE.md +64 -0
  251. package/vendor/Server/Skills/rn-library-known-issue-check/references/SOURCE_PREP_GUIDE.md +75 -0
  252. package/vendor/Server/Skills/rn-library-known-issue-check/scripts/validate-known-issue-report.py +164 -0
  253. package/vendor/Server/Skills/rn-library-memory-leak-check/SKILL.md +339 -0
  254. package/vendor/Server/Skills/rn-library-memory-leak-check/assets/REPORT_TEMPLATE.md +83 -0
  255. package/vendor/Server/Skills/rn-library-memory-leak-check/references/CHECKLIST.md +859 -0
  256. package/vendor/Server/Skills/rn-library-memory-leak-check/references/HARMONY_CODE_PATTERNS.md +122 -0
  257. package/vendor/Server/Skills/rn-library-memory-leak-check/scripts/scan_harmony_code.py +279 -0
  258. package/vendor/Server/Skills/rn-library-stability-check/SKILL.md +273 -0
  259. package/vendor/Server/Skills/rn-library-stability-check/assets/REPORT_TEMPLATE.md +129 -0
  260. package/vendor/Server/Skills/rn-library-stability-check/references/CHECKLIST.md +581 -0
  261. package/vendor/Server/Skills/rn-library-stability-check/references/SCORING_RULES.md +138 -0
  262. package/vendor/Server/Skills/rn-library-stability-check/scripts/scan-harmony-code.py +168 -0
  263. package/vendor/Server/Skills/rn-library-test-coverage-check/SKILL.md +506 -0
  264. package/vendor/Server/Skills/rn-library-test-coverage-check/references/CHECKLIST.md +280 -0
  265. package/vendor/Server/Skills/rn-library-test-coverage-check/references/DEMO_LOCATION.md +221 -0
  266. package/vendor/Server/Skills/rn-library-test-coverage-check/references/REPORT_TEMPLATE.md +209 -0
  267. package/vendor/Server/Skills/rn-library-test-coverage-check/references/SCRIPT_USAGE.md +325 -0
  268. package/vendor/Server/Skills/rn-ohos-xts-generator/SKILL.md +279 -0
  269. package/vendor/Server/Skills/rn-ohos-xts-generator/assets/TEST_FILE_TEMPLATES.md +404 -0
  270. package/vendor/Server/Skills/rn-ohos-xts-generator/references/BUILD_TROUBLESHOOTING.md +185 -0
  271. package/vendor/Server/Skills/rn-ohos-xts-generator/references/BUILD_WORKFLOW.md +265 -0
  272. package/vendor/Server/Skills/rn-ohos-xts-generator/references/COMMON_CONFIG.md +189 -0
  273. package/vendor/Server/Skills/rn-ohos-xts-generator/references/CONFIG_GUIDE.md +203 -0
  274. package/vendor/Server/Skills/rn-ohos-xts-generator/references/COVERAGE_ANALYZER.md +147 -0
  275. package/vendor/Server/Skills/rn-ohos-xts-generator/references/DESIGN_DOC_GUIDE.md +148 -0
  276. package/vendor/Server/Skills/rn-ohos-xts-generator/references/GENERATION_FLOW.md +165 -0
  277. package/vendor/Server/Skills/rn-ohos-xts-generator/references/GENERATION_STRATEGY.md +195 -0
  278. package/vendor/Server/Skills/rn-ohos-xts-generator/references/HARMONY_SCANNER.md +249 -0
  279. package/vendor/Server/Skills/rn-ohos-xts-generator/references/JEST_FRAMEWORK.md +235 -0
  280. package/vendor/Server/Skills/rn-ohos-xts-generator/references/PLATFORM_COMPAT.md +161 -0
  281. package/vendor/Server/Skills/rn-ohos-xts-generator/references/RN_TEST_PATTERNS.md +413 -0
  282. package/vendor/Server/Skills/rn-ohos-xts-generator/references/SOURCE_PARSER.md +235 -0
  283. package/vendor/Server/Skills/rn-ohos-xts-generator/references/TEST_CONVENTIONS.md +245 -0
  284. package/vendor/Server/Skills/rn-ohos-xts-generator/references/TROUBLESHOOTING.md +282 -0
  285. package/vendor/Server/Skills/rn-ohos-xts-generator/references/USAGE_GUIDE.md +251 -0
  286. package/vendor/Server/Skills/rnoh-cptf-api-test/SKILL.md +469 -0
  287. package/vendor/Server/Skills/rnoh-cptf-api-test/assets/CPTF_TEST_TEMPLATE.md +310 -0
  288. package/vendor/Server/Skills/rnoh-cptf-api-test/assets/DEMO_PAGE_TEMPLATE.md +303 -0
  289. package/vendor/Server/Skills/rnoh-cptf-api-test/references/CPTF_TEST_GENERATION_GUIDE.md +421 -0
  290. package/vendor/Server/Skills/rnoh-cptf-api-test/references/DEMO_GENERATION_GUIDE.md +358 -0
  291. package/vendor/Server/Skills/rnoh-cptf-api-test/references/QUALITY_CHECKLIST.md +114 -0
  292. package/vendor/Server/Skills/rnoh-cptf-api-test/references/SPEC_PARSING_GUIDE.md +274 -0
  293. package/vendor/Server/Skills/rnoh-cptf-api-test/scripts/validate-rnoh-cptf-api-test.sh +185 -0
  294. package/vendor/Server/Skills/rnoh-cptf-demo-test/SKILL.md +191 -0
  295. package/vendor/Server/Skills/rnoh-cptf-demo-test/assets/TEST_TEMPLATE.md +216 -0
  296. package/vendor/Server/Skills/rnoh-cptf-demo-test/references/CPTF_SETUP.md +107 -0
  297. package/vendor/Server/Skills/rnoh-cptf-demo-test/references/DEMO_ANALYSIS.md +120 -0
  298. package/vendor/Server/Skills/rnoh-cptf-demo-test/scripts/validate-rnoh-cptf-test.sh +108 -0
  299. package/vendor/Server/Skills/rnoh-cptf-test-run/SKILL.md +237 -0
  300. package/vendor/Server/Skills/rnoh-cptf-test-run/references/DEBUG_PLAYBOOK.md +261 -0
  301. package/vendor/Server/Skills/rnoh-cptf-test-run/scripts/validate-run-env.sh +112 -0
  302. package/vendor/Server/Skills/rnoh-lib-code-adapt/SKILL.md +498 -0
  303. package/vendor/Server/Skills/rnoh-lib-code-adapt/references/adapt-checklist.md +270 -0
  304. package/vendor/Server/Skills/rnoh-lib-code-adapt/references/api-migration-checklist.md +164 -0
  305. package/vendor/Server/Skills/rnoh-lib-code-adapt/references/common-compile-errors.md +556 -0
  306. package/vendor/Server/Skills/rnoh-lib-code-adapt/references/deveco-cli-tools.md +459 -0
  307. package/vendor/Server/Skills/rnoh-lib-code-adapt/references/edge-cases.md +65 -0
  308. package/vendor/Server/Skills/rnoh-lib-code-adapt/references/har-tgz-build.md +512 -0
  309. package/vendor/Server/Skills/rnoh-lib-code-adapt/references/version-compat-matrix.md +132 -0
  310. package/vendor/Server/Skills/rnoh-lib-code-adapt/scripts/auto-integrate.sh +424 -0
  311. package/vendor/Server/Skills/rnoh-lib-demo-coverage/SKILL.md +137 -0
  312. package/vendor/Server/Skills/rnoh-lib-demo-create/SKILL.md +306 -0
  313. package/vendor/Server/Skills/rnoh-lib-demo-create/assets/DEMO_PAGE_TEMPLATE.md +485 -0
  314. package/vendor/Server/Skills/rnoh-lib-demo-create/assets/INDEX_TEMPLATE.md +172 -0
  315. package/vendor/Server/Skills/rnoh-lib-demo-create/references/DEMO_CODE_RULES.md +422 -0
  316. package/vendor/Server/Skills/rnoh-lib-demo-create/references/QUALITY_CHECKLIST.md +95 -0
  317. package/vendor/Server/Skills/rnoh-lib-demo-create/references/SOURCE_EXPLORATION.md +169 -0
  318. package/vendor/Server/Skills/rnoh-lib-demo-doc/SKILL.md +554 -0
  319. package/vendor/Server/Skills/rnoh-lib-demo-doc/assets/DEMO_DOC_TEMPLATE.md +106 -0
  320. package/vendor/Server/Skills/rnoh-lib-demo-doc/references/COVERAGE_INCREMENTAL.md +216 -0
  321. package/vendor/Server/Skills/rnoh-lib-demo-doc/references/DEMO_DESIGN_RULES.md +413 -0
  322. package/vendor/Server/Skills/rnoh-lib-demo-doc/references/OUTPUT_FORMAT.md +269 -0
  323. package/vendor/Server/Skills/rnoh-lib-demo-doc/references/QUALITY_CHECKLIST.md +98 -0
  324. package/vendor/Server/Skills/rnoh-lib-func-test/SKILL.md +337 -0
  325. package/vendor/Server/Skills/rnoh-lib-rnt-search/SKILL.md +722 -0
  326. package/vendor/Server/Skills/rnoh-lib-rnt-search/assets/PORT_REPORT_TEMPLATE.md +219 -0
  327. package/vendor/Server/Skills/rnoh-lib-rnt-search/references/DEMO_PORTING_GUIDE.md +345 -0
  328. package/vendor/Server/Skills/rnoh-lib-rnt-search/references/PORT_VERIFICATION.md +269 -0
  329. package/vendor/Server/Skills/rnoh-lib-rnt-search/references/RNT_PROJECT_STRUCTURE.md +173 -0
  330. package/vendor/Server/Skills/rnoh-lib-rnt-search/scripts/analyze-demo-deps.cjs +267 -0
  331. package/vendor/Server/Skills/rnoh-lib-rnt-search/scripts/detect-rnoh-version.cjs +174 -0
  332. package/vendor/Server/Skills/rnoh-lib-rnt-search/scripts/find-rnt-demo.sh +111 -0
  333. package/vendor/Server/Skills/rnoh-lib-rnt-search/scripts/port-demo.sh +186 -0
  334. package/vendor/Server/Skills/rnoh-lib-rnt-search/scripts/read-lib-meta.cjs +150 -0
  335. package/vendor/Server/Skills/rnoh-lib-test-align/SKILL.md +296 -0
  336. package/vendor/Server/Skills/rnoh-lib-test-align/references/jest-troubleshooting.md +371 -0
  337. package/vendor/Server/Skills/rnoh-lib-test-align/references/port-test-demo-guide.md +212 -0
  338. package/vendor/Server/Skills/rnoh-lib-test-align/references/runtime-troubleshooting.md +345 -0
  339. package/vendor/Server/Skills/rnoh-lib-test-align/references/unit-test-template.md +223 -0
  340. package/vendor/Server/Skills/rnoh-lib-test-align/scripts/port-test-demo.sh +1053 -0
  341. package/vendor/Server/Skills/rnoh-lib-version-diff/SKILL.md +255 -0
  342. package/vendor/Server/Skills/rnoh-lib-version-diff/references/OHOS_ADAPTATION.md +77 -0
  343. package/vendor/Server/Skills/rnoh-lib-version-diff/references/OHOS_API_LOOKUP.md +224 -0
  344. package/vendor/Server/Skills/rnoh-lib-version-diff/references/script-reference.md +174 -0
  345. package/vendor/Server/Skills/rnoh-lib-version-diff/scripts/detect-upstream-version.js +967 -0
  346. package/vendor/Server/Skills/rnoh-lib-version-diff/scripts/generate-diff.js +1798 -0
  347. package/vendor/Server/Skills/rnoh-lib-version-diff/scripts/package.json +5 -0
  348. package/vendor/Server/Skills/rnoh-lib-version-diff/templates/report-template.md +137 -0
  349. package/vendor/Server/Skills/rnoh-lib-xts-coverage/SKILL.md +145 -0
  350. package/vendor/Server/Skills/skill-generator/SKILL.md +365 -0
  351. package/vendor/Server/Skills/skill-generator/assets/SKILL_TEMPLATE.md +183 -0
  352. package/vendor/Server/Skills/skill-generator/references/COMPLIANCE_CHECKLIST.md +82 -0
  353. package/vendor/Server/Skills/skill-generator/references/KB_QUERY_GUIDE.md +110 -0
  354. package/vendor/Server/Skills/skill-generator/references/MCP_TOOL_DISCOVERY.md +122 -0
  355. package/vendor/Server/Skills/skill-generator/references/SKILL_SPEC.md +121 -0
  356. package/vendor/Server/Skills/skill-generator/scripts/validate-skill.cjs +259 -0
  357. package/vendor/Server/Skills/task-analysis/SKILL.md +234 -0
  358. package/vendor/Server/Skills/task-analysis/assets/OUTPUT_EXAMPLES.md +160 -0
  359. package/vendor/Server/Skills/task-analysis/references/ACCEPTANCE_CRITERIA_GUIDE.md +190 -0
  360. package/vendor/Server/Skills/task-analysis/references/ANALYSIS_SCHEMA.md +224 -0
  361. package/vendor/Server/Skills/task-analysis/references/INTEGRATION_CONTEXT.md +162 -0
  362. package/vendor/Server/Skills/task-analysis/references/LESSONS_LEARNED.md +55 -0
  363. package/vendor/Server/Skills/task-analysis/references/REPLAN_CONTEXT_GUIDE.md +126 -0
  364. package/vendor/Server/Skills/task-analysis/scripts/validate-analysis-output.sh +256 -0
  365. package/vendor/Server/Skills/task-decomposition/SKILL.md +529 -0
  366. package/vendor/Server/Skills/task-decomposition/assets/OUTPUT_EXAMPLES.md +451 -0
  367. package/vendor/Server/Skills/task-decomposition/references/ACCEPTANCE_CRITERIA_GUIDE.md +179 -0
  368. package/vendor/Server/Skills/task-decomposition/references/DEPENDENCY_GRAPH_GUIDE.md +152 -0
  369. package/vendor/Server/Skills/task-decomposition/references/INTEGRATION_CONTEXT.md +175 -0
  370. package/vendor/Server/Skills/task-decomposition/references/REPLAN_CONTEXT_GUIDE.md +195 -0
  371. package/vendor/Server/Skills/task-decomposition/references/TASK_DECOMPOSITION_TEMPLATES.md +226 -0
  372. package/vendor/Server/Skills/task-decomposition/scripts/list-available-skills.cjs +263 -0
  373. package/vendor/Server/Skills/task-decomposition/scripts/skill-blacklist.json +29 -0
  374. package/vendor/Server/Skills/task-decomposition/scripts/validate-decomposition-output.cjs +376 -0
  375. package/vendor/Server/Skills/task-decomposition/scripts/validate-param-consistency.cjs +259 -0
  376. package/vendor/Server/Skills/task-decomposition/scripts/validate-specified-skills.cjs +216 -0
  377. package/vendor/Server/Skills/task-decomposition/scripts/validate-step-graph.cjs +425 -0
  378. package/vendor/Server/Skills/tpc-cpp-check/SKILL.md +427 -0
  379. package/vendor/Server/Skills/tpc-cpp-check/references/CHECKLIST.md +214 -0
  380. package/vendor/Server/Skills/tpc-cpp-check/references/HPKBUILD_GUIDE.md +235 -0
  381. package/vendor/Server/Skills/tpc-cpp-check/references/REPORT_TEMPLATE.md +250 -0
  382. package/vendor/Server/TestCheck/TestCheck.js +775 -0
  383. package/vendor/Server/TestCheck/index.js +11 -0
  384. package/vendor/Server/library/McpToolGuide.js +280 -0
  385. package/vendor/Server/library/StatsService.js +127 -0
  386. package/vendor/Server/library/cstTime.js +16 -0
  387. package/vendor/Server/package.json +17 -0
  388. package/vendor/VERSION +3 -0
  389. package/workflows/pr-check.mjs +106 -0
@@ -0,0 +1,216 @@
1
+ # CPTF 测试文件模板
2
+
3
+ > Phase 3 生成测试文件时复制此模板,替换 `{占位符}`。模板来自 react-native-get-random-values 实战验证版本(18 步骤全部通过的结构)。
4
+
5
+ ## 1. 完整文件骨架
6
+
7
+ ```typescript
8
+ /*
9
+ * Copyright {year} {author}
10
+ * SPDX-License-Identifier: MIT
11
+ */
12
+
13
+ import 'reflect-metadata';
14
+ import { Test, Step, FunctionalTest, NavigationStrategyFactory } from '@cptf/framework';
15
+ import type { UIElement } from '@cptf/framework';
16
+
17
+ /**
18
+ * {libName} (RNOH) 自动化功能测试
19
+ *
20
+ * 被测应用: {bundleId} (testerino 单页 Demo)
21
+ * 覆盖能力:
22
+ * 1. {能力分组 1}
23
+ * 2. {能力分组 2}
24
+ * ...
25
+ *
26
+ * 实现说明:
27
+ * - Demo 为单页应用(无 module-list 首页、无 deep link scheme),
28
+ * 注册自定义 'single-page' 导航策略:启动应用后直接等待 testerino
29
+ * 面板就绪,跳过框架默认的 deep link / 点击导航。
30
+ * - Demo 按钮未设置 testID,全部通过按钮文本(textContains)定位;
31
+ * 结果验证依赖点击后出现的业务文本。
32
+ * - {N} 个 TestCase 位于 ScrollView 中,屏幕外的按钮需智能滚动查找。
33
+ */
34
+
35
+ // ─── 单页应用导航策略 ───────────────────────────────────────────────
36
+ NavigationStrategyFactory.registerStrategy('single-page', () => ({
37
+ id: 'single-page',
38
+ async navigateToTestScene(ctx): Promise<void> {
39
+ ctx.logger.debug('[single-page] 单页应用,跳过场景导航,等待 testerino 面板就绪');
40
+ // 等待 testerino 统计面板出现(TOTAL 计数文本),最长 15s
41
+ const deadline = Date.now() + 15000;
42
+ while (Date.now() < deadline) {
43
+ const panel = await ctx.ui.findByText('TOTAL');
44
+ if (panel) {
45
+ ctx.logger.debug('[single-page] testerino 面板已就绪');
46
+ return;
47
+ }
48
+ await ctx.ui.sleep(500);
49
+ }
50
+ ctx.logger.warn('[single-page] 未检测到 testerino 面板,继续执行');
51
+ },
52
+ async returnFromTestScene(_ctx): Promise<void> {
53
+ // 单页应用无需返回上级
54
+ },
55
+ }));
56
+
57
+ // ─── 用例定义 ───────────────────────────────────────────────────────
58
+ @Test({
59
+ id: '{lib-short-name}-func',
60
+ name: '{libName} 功能测试',
61
+ module: 'functional',
62
+ platform: 'harmony',
63
+ category: '{分类}',
64
+ description: '覆盖 {libName} 的 {能力概述}',
65
+ navigationStrategy: 'single-page',
66
+ captureScreenshots: true,
67
+ waitAfterAction: 300,
68
+ })
69
+ class {LibName}Test extends FunctionalTest {
70
+ /** 滚动查找并点击指定文本按钮(屏幕外元素自动滚动定位) */
71
+ private async scrollAndClick(textKey: string, stepLabel: string): Promise<void> {
72
+ const btn = await this.ui!.scrollToFindElement(
73
+ { textContains: textKey, type: 'Button' },
74
+ { maxScrolls: 12, waitAfterScroll: 300 },
75
+ );
76
+ if (!btn) {
77
+ throw new Error(`未找到按钮: ${stepLabel} (关键字: ${textKey})`);
78
+ }
79
+ const ok = await this.ui!.clickElement(btn);
80
+ if (!ok) {
81
+ throw new Error(`点击按钮失败: ${stepLabel}`);
82
+ }
83
+ await this.sleep(600);
84
+ }
85
+
86
+ /** 断言屏幕上出现包含 expectedSub 的文本(带轮询重试) */
87
+ private async waitForText(expectedSub: string, timeout = 8000): Promise<UIElement | null> {
88
+ const deadline = Date.now() + timeout;
89
+ while (Date.now() < deadline) {
90
+ const el = await this.ui!.findByText(expectedSub);
91
+ if (el) return el;
92
+ await this.sleep(400);
93
+ }
94
+ return null;
95
+ }
96
+
97
+ /** 收集步骤结果并登记失败(供报告呈现) */
98
+ private report(passed: boolean, details: string): void {
99
+ this.currentStepResult = {
100
+ stepName: this.currentStepResult?.stepName || '校验',
101
+ passed,
102
+ details,
103
+ };
104
+ if (!passed) {
105
+ throw new Error(details);
106
+ }
107
+ }
108
+
109
+ // ── 1. {能力分组 1} ────────────────────────────────────────────────
110
+
111
+ @Step('{步骤描述}', { captureScreenshot: false, stepTimeout: 30000 })
112
+ async stepMethodName(): Promise<void> {
113
+ await this.scrollAndClick('{按钮 title 唯一子串}', '{按钮语义标签}');
114
+ // {断言策略说明:前缀文本 / 快照差集 / 值域校验}
115
+ const el = await this.waitForText('{结果文本前缀,源码逐字符复制}');
116
+ if (!el) {
117
+ throw new Error('点击后未出现{结果}文本');
118
+ }
119
+ const text = this.getChildText(el) || el.text || '';
120
+ this.report(text.includes('{期望值}'), `结果: "${text.trim()}"`);
121
+ }
122
+
123
+ // ... 每个 TestCase 一个 @Step
124
+
125
+ // ── 辅助: 快照差集收集无前缀结果(如裸数字) ──────────────────────
126
+ private lastSnapshot: Set<string> = new Set();
127
+
128
+ private async snapshotAllTexts(): Promise<Set<string>> {
129
+ const elements = await this.ui!.getLayout(true);
130
+ const texts = new Set<string>();
131
+ for (const el of elements) {
132
+ if (el.text && el.text.trim()) {
133
+ texts.add(el.text.trim());
134
+ }
135
+ }
136
+ return texts;
137
+ }
138
+
139
+ private async collectNumbersAfter(caseTitle: string): Promise<number[]> {
140
+ const after = await this.snapshotAllTexts();
141
+ const added: string[] = [];
142
+ for (const t of after) {
143
+ if (!this.lastSnapshot.has(t)) {
144
+ added.push(t);
145
+ }
146
+ }
147
+ this.lastSnapshot = after;
148
+ // 数字文本(可能为负)
149
+ const nums = added
150
+ .filter(t => /^-?\d+$/.test(t))
151
+ .map(t => parseInt(t, 10));
152
+ return nums;
153
+ }
154
+ }
155
+
156
+ export const testCaseExecutor = new {LibName}Test();
157
+ ```
158
+
159
+ ## 2. 各断言策略的 @Step 写法
160
+
161
+ ### 2.1 固定前缀文本断言(最常见)
162
+
163
+ ```typescript
164
+ @Step('{描述}', { captureScreenshot: false, stepTimeout: 30000 })
165
+ async xxx(): Promise<void> {
166
+ await this.scrollAndClick('{按钮子串}', '{标签}');
167
+ const el = await this.waitForText('错误信息'); // ← 前缀,可省略冒号
168
+ if (!el) throw new Error('点击后未出现错误信息文本');
169
+ const errText = this.getChildText(errEl) || errEl.text || '';
170
+ this.report(/ExpectedError/i.test(errText), `错误信息: "${errText.trim().substring(0, 120)}"`);
171
+ }
172
+ ```
173
+
174
+ ### 2.2 快照差集断言(无前缀裸值)
175
+
176
+ ```typescript
177
+ @Step('{描述}', { captureScreenshot: false, stepTimeout: 30000 })
178
+ async xxx(): Promise<void> {
179
+ await this.scrollAndClick('{按钮子串}', '{标签}');
180
+ const nums = await this.collectNumbersAfter('{caseTitle}');
181
+ this.report(
182
+ nums.length >= 1 && nums.every(n => n >= {min} && n <= {max}),
183
+ `生成 ${nums.length} 个: [${nums.join(', ')}],均在 [{min},{max}]`,
184
+ );
185
+ }
186
+ ```
187
+
188
+ ### 2.3 demo 已知 bug 容错断言
189
+
190
+ ```typescript
191
+ @Step('{描述}', { captureScreenshot: false, stepTimeout: 30000 })
192
+ async xxx(): Promise<void> {
193
+ await this.scrollAndClick('{按钮子串}', '{标签}');
194
+ const errEl = await this.waitForText('错误信息');
195
+ if (!errEl) throw new Error('点击后未出现错误信息文本');
196
+ const errText = this.getChildText(errEl) || errEl.text || '';
197
+ // 注: demo 已知渲染 bug('Text strings must be rendered within a <Text>'),
198
+ // 错误信息可能被 LogBox 覆盖,此处仅验证错误场景触发了错误输出。
199
+ const hasExpected = /ExpectedError/i.test(errText);
200
+ const hasRenderIssue = /<Text>|rendered within/i.test(errText);
201
+ this.report(hasExpected || hasRenderIssue, `错误信息: "${errText.trim().substring(0, 120)}"`);
202
+ }
203
+ ```
204
+
205
+ ## 3. 编码规则速查
206
+
207
+ | 规则 | 原因 |
208
+ |------|------|
209
+ | 文件首行 `import 'reflect-metadata'` | 装饰器运行时依赖 |
210
+ | 每个 @Step 显式 `stepTimeout: 30000` | 默认 10s 不够滚动+点击+等待 |
211
+ | 断言文本从 demo 源码逐字符复制 | 全角/半角冒号差异是头号失败根因 |
212
+ | `captureScreenshot: false`(常规步骤) | 减少耗时;失败步骤框架自动截图 |
213
+ | 文件末尾 `export const testCaseExecutor` | CLI 用例发现约定 |
214
+ | 步骤名含中文+关键 API 名 | 报告可读性 |
215
+ | scrollAndClick 后 `sleep(600)` | 等待点击生效+渲染 |
216
+ | waitForText 轮询 400ms×20 次(8s) | 渲染时延容错 |
@@ -0,0 +1,107 @@
1
+ # CPTF 测试工程搭建指南
2
+
3
+ > Phase 2 的详细操作手册。核心解决两个问题:模块解析(link 依赖)与设备/应用配置。
4
+
5
+ ## 1. 前置检查
6
+
7
+ ```bash
8
+ # 1. CPTF 框架源码位置(全局 pnpm link 安装)
9
+ ls -la ~/Library/pnpm/global/5/node_modules/@cptf/framework # 应为 symlink → 框架源码
10
+
11
+ # 2. hdc 工具与设备
12
+ hdc list targets # 应输出设备 SN(如 026PMV25CH125405)
13
+
14
+ # 3. demo hap 构建产物
15
+ ls {demoPath}/harmony/entry/build/default/outputs/default/entry-default-signed.hap
16
+
17
+ # 4. demo bundleId
18
+ cat {demoPath}/AppScope/app.json5 | grep bundleName
19
+ ```
20
+
21
+ ## 2. cptf.config.json 完整配置
22
+
23
+ ```json
24
+ {
25
+ "bundleId": "com.example.xxx",
26
+ "reportDir": "test-reports",
27
+ "reportFormat": "html",
28
+ "casesDir": "tests/cases",
29
+ "enableAlerts": true,
30
+ "platforms": {
31
+ "harmony": {
32
+ "toolPath": "hdc",
33
+ "bundleId": "com.example.xxx",
34
+ "appPath": "<demoPath 绝对路径>/harmony/entry/build/default/outputs/default/entry-default-signed.hap",
35
+ "devices": [
36
+ {
37
+ "id": "<设备SN>",
38
+ "screenWidth": 1280,
39
+ "screenHeight": 2832
40
+ }
41
+ ]
42
+ }
43
+ }
44
+ }
45
+ ```
46
+
47
+ **字段说明**:
48
+ - `appPath` 必须是**绝对路径**(signed hap)
49
+ - `screenWidth/screenHeight` 影响滚动与坐标计算,从 `hdc shell hidumper -s RenderService` 或设备规格获取
50
+ - `casesDir` 相对 workspace 根;测试文件放 `tests/cases/functional/` 下自动被发现
51
+
52
+ ## 3. link 依赖建立(关键步骤)
53
+
54
+ ### 3.1 为什么不能用全局安装直接跑
55
+
56
+ cptf CLI shim(`~/.pnpm/global/5/.bin/cptf`)通过 NODE_PATH 注入模块路径,其中包含 `.pnpm/node_modules` 等目录——**pnpm link 全局安装后这些目录可能不存在**。测试文件(位于独立 workspace)的 `require('@cptf/framework')` 解析失败,报:
57
+
58
+ ```
59
+ Error: Cannot find module '@cptf/framework'
60
+ ```
61
+
62
+ ### 3.2 正确做法:workspace 本地 link
63
+
64
+ `{workspaceDir}/package.json`:
65
+
66
+ ```json
67
+ {
68
+ "name": "cptf-workspace",
69
+ "version": "1.0.0",
70
+ "private": true,
71
+ "description": "CPTF 测试工程: <libName> RNOH 功能测试",
72
+ "dependencies": {
73
+ "@cptf/framework": "link:<frameworkPath 绝对路径>",
74
+ "reflect-metadata": "link:<frameworkPath>/node_modules/reflect-metadata"
75
+ }
76
+ }
77
+ ```
78
+
79
+ > `reflect-metadata` 是 `@Step`/`@Test` 装饰器的运行时依赖,必须与框架内版本一致,故同样 link 框架 node_modules 内的副本。
80
+
81
+ ```bash
82
+ cd {workspaceDir}
83
+ pnpm install
84
+ # 验证
85
+ node -e "console.log(require.resolve('@cptf/framework'))"
86
+ # 应输出 {workspaceDir}/node_modules/@cptf/framework/...
87
+ ```
88
+
89
+ ### 3.3 TS 支持
90
+
91
+ 框架 CLI 内置 `registerTsNode()`(ts-node transpileOnly,module: commonjs,target: ES2020,esModuleInterop),测试文件直接写 `.ts`,无需本地配置 tsconfig。
92
+
93
+ ## 4. 用例发现机制
94
+
95
+ - CLI 扫描 `{casesDir}` 下所有 `.ts` 文件
96
+ - 文件必须 `export const testCaseExecutor = new XxxTest()`(实例化 FunctionalTest 子类)
97
+ - `@Test({ id: '...' })` 的 id 用于 `-t` 过滤:`cptf run -p harmony -t <id>`
98
+
99
+ ## 5. 常见搭建故障
100
+
101
+ | 现象 | 原因 | 修复 |
102
+ |------|------|------|
103
+ | `Cannot find module '@cptf/framework'` | shim NODE_PATH 失效 | 按 3.2 本地 link |
104
+ | `Cannot find module 'reflect-metadata'` | 漏配 reflect-metadata link | 补 package.json 第二个 link 依赖 |
105
+ | 装饰器不生效(@Step 未注册) | 未 import 'reflect-metadata'(文件首行) | 测试文件第一行加 import |
106
+ | 设备连接失败 | hdc 未授权/未插 | `hdc list targets` 检查,重新授权 |
107
+ | hap 安装失败 | appPath 非绝对路径/未签名 | 核对 entry-default-signed.hap |
@@ -0,0 +1,120 @@
1
+ # Demo 源码勘察指南
2
+
3
+ > Phase 1 的详细操作手册。目标是产出一份"逐字符精确"的用例清单,作为测试文件生成的唯一事实来源。
4
+
5
+ ## 1. 定位用例文件
6
+
7
+ ```bash
8
+ # testerino 用例通常集中在单个 tsx 文件
9
+ grep -rl 'TestCase\|TestSuite' {demoPath}/src/ --include='*.tsx'
10
+ ```
11
+
12
+ 典型结构(react-native-get-random-values 实例):
13
+
14
+ ```tsx
15
+ <Tester>
16
+ <TestSuite name="getRandomValues">
17
+ <TestCase itShould="..." tags={['C_API', '...']} arrange={({setState}) => {...}} assert={...} />
18
+ ...
19
+ </TestSuite>
20
+ </Tester>
21
+ ```
22
+
23
+ ## 2. 三要素提取方法
24
+
25
+ ### 2.1 按钮 title 提取
26
+
27
+ ```bash
28
+ grep -n 'title=' {demoPath}/src/**/*.tsx
29
+ ```
30
+
31
+ 输出示例(记录完整 title,含中文括号/空格):
32
+
33
+ ```
34
+ 63: title="点击获取随机数(Int8Array)(范围:-128到127)"
35
+ 264: title="测试普通数组应抛出 TypeMismatchError"
36
+ 615: title="multiple calls should generate different values"
37
+ ```
38
+
39
+ **注意**:
40
+ - title 可能很长,`textContains` 只需唯一子串即可(如 `点击获取随机数(Int8Array)`),但必须验证该子串在所有按钮中唯一
41
+ - 长数字串(如 `-2147483648到2147483647`)在终端显示可能换行,以文件读取为准
42
+
43
+ ### 2.2 结果文本提取
44
+
45
+ ```bash
46
+ grep -n '<Text>' {demoPath}/src/**/*.tsx
47
+ ```
48
+
49
+ 对每条 `<Text>` 记录:
50
+ - **前缀字面量**(含冒号——全角 `:` 或半角 `:`,原样保留)
51
+ - **动态部分**(state 变量名 → 推断点击后的可能取值)
52
+
53
+ 实战实例对照表:
54
+
55
+ | 源码 Text | 冒号 | waitForText 参数 | 点击后动态值 |
56
+ |-----------|------|------------------|--------------|
57
+ | `<Text>错误信息:{errorInfo}</Text>` | **全角** | `'错误信息'`(不带冒号更稳) | error.toString() |
58
+ | `<Text>数组长度:{length}</Text>` | **全角** | `'数组长度:'` | 数字 |
59
+ | `<Text>视图长度:{length}</Text>` | **全角** | `'视图长度:'` | 数字 |
60
+ | `<Text>当前值:{item} 是否大于等于0:{String(...)}</Text>` | 半角 | `'是否大于等于0:true'` | true/false |
61
+ | `<Text>两次生成数据是否一致:{isSameState ? '' : 'false'}</Text>` | 半角 | `'两次生成数据是否一致'` | 空串或 'false' |
62
+ | `<Text>空数组result:{result}</Text>` | 半角 | `'空数组result:'` | JSON 字符串 |
63
+
64
+ **安全策略**:断言搜索串可省略冒号(如 `'错误信息'`),同时兼容两种冒号;但解析结果值时仍需按源码格式。
65
+
66
+ ### 2.3 testID 检查
67
+
68
+ ```bash
69
+ grep -c 'testID' {demoPath}/src/**/*.tsx
70
+ ```
71
+
72
+ - 有 testID → 优先 `findElement({ testID })` 定位(最稳定)
73
+ - 无 testID(testerino demo 常见)→ 全部走 `textContains` 文本定位 + `type: 'Button'` 过滤
74
+
75
+ ## 3. 结构特征识别
76
+
77
+ ### 3.1 单页 vs 多页
78
+
79
+ | 特征 | 判断方法 | 导航策略 |
80
+ |------|----------|----------|
81
+ | 单页 ScrollView | 所有 TestSuite 直接渲染,无 Router/Navigation | 注册 `single-page` 自定义策略 |
82
+ | 有 deep link | demo 的 module.json5 有 scheme 配置 | 框架默认策略 |
83
+ | 有模块首页列表 | 首页是可点击的模块列表 | 默认点击导航 |
84
+
85
+ ### 3.2 testerino 面板就绪标志
86
+
87
+ 单页策略的 `navigateToTestScene` 等待锚点文本:
88
+
89
+ - `TOTAL`(testerino 统计面板的用例总数标签)——最通用
90
+ - 备选:第一个 TestSuite 的 name
91
+
92
+ ### 3.3 结果渲染位置(决定断言策略)
93
+
94
+ | 渲染方式 | 实例 | 断言策略 |
95
+ |----------|------|----------|
96
+ | 固定前缀文本 | `错误信息:{...}` | `waitForText(前缀)` + 值校验 |
97
+ | map 渲染多行 | `{arr.map(item => <Text>当前值:{item}...</Text>)}` | waitForText 固定标志片段 |
98
+ | **裸值无前缀** | `{arr.map(item => <Text>{item}</Text>)}` | **快照差集**:点击前后全量文本差 |
99
+ | 无渲染仅 assert | 结果只在内部 state | 无法 UI 断言,跳过或降级为仅点击验证 |
100
+
101
+ ## 4. 已知 demo bug 识别
102
+
103
+ 点击按钮后若 demo 本身抛 RN 渲染错误(截图/日志出现 `"Text strings must be rendered within a <Text> component"`),说明该 TestCase 的 arrange 存在 bug(如 setState 传了非字符串对象直接渲染)。
104
+
105
+ 处理原则:
106
+ 1. **不改 demo**(测试对象是三方库行为,不是 demo 质量)
107
+ 2. 断言放宽为"错误输出已触发"(错误文本非空 或 匹配渲染错误特征)
108
+ 3. 测试代码注释注明:`// 注: demo 已知渲染 bug,此处仅验证错误场景触发`
109
+
110
+ ## 5. 勘察产出物
111
+
112
+ Phase 1 结束时必须产出下表(测试文件生成的输入):
113
+
114
+ ```markdown
115
+ | # | 按钮 title(定位子串) | 结果文本前缀(精确含冒号) | 预期断言 | 备注 |
116
+ |---|------------------------|---------------------------|----------|------|
117
+ | 1 | 点击获取随机数(Int8Array) | 无前缀(裸数字×4) | 快照差集+值域 | |
118
+ | 2 | 测试普通数组应抛出 | 错误信息:(全角) | 含 Error 即通过 | demo 渲染 bug |
119
+ | ... |
120
+ ```
@@ -0,0 +1,108 @@
1
+ #!/bin/bash
2
+ # @tool validate-rnoh-cptf-test
3
+ # @description 校验 CPTF 测试工程结构完整性(config/package.json/测试文件骨架),并输出快速诊断
4
+ # @param workspaceDir: string - CPTF 测试工程目录绝对路径
5
+
6
+ ARGS_JSON="$1"
7
+ workspaceDir=$(python3 -c "import sys,json; print(json.loads(sys.argv[1]).get('workspaceDir',''))" "$ARGS_JSON" 2>/dev/null || echo "")
8
+
9
+ if [ -z "$workspaceDir" ]; then
10
+ echo "Usage: validate-rnoh-cptf-test.sh <workspaceDir>"
11
+ echo "Error: workspaceDir parameter is required"
12
+ exit 1
13
+ fi
14
+
15
+ if [ ! -d "$workspaceDir" ]; then
16
+ echo "Error: Directory does not exist: $workspaceDir"
17
+ exit 1
18
+ fi
19
+
20
+ PASS=0
21
+ FAIL=0
22
+
23
+ check_pass() { echo " ✅ $1"; PASS=$((PASS + 1)); }
24
+ check_fail() { echo " ❌ $1"; FAIL=$((FAIL + 1)); }
25
+
26
+ echo "=== CPTF 测试工程校验 ==="
27
+ echo "目录: $workspaceDir"
28
+ echo ""
29
+
30
+ # ─── 1. 配置文件 ───
31
+ echo "--- 1. 配置文件检查 ---"
32
+ if [ -f "$workspaceDir/cptf.config.json" ]; then
33
+ check_pass "cptf.config.json 存在"
34
+ # 检查关键字段
35
+ python3 - "$workspaceDir/cptf.config.json" <<'EOF'
36
+ import json, sys
37
+ with open(sys.argv[1]) as f:
38
+ cfg = json.load(f)
39
+ issues = []
40
+ if 'bundleId' not in cfg: issues.append('缺少 bundleId')
41
+ if 'casesDir' not in cfg: issues.append('缺少 casesDir')
42
+ h = cfg.get('platforms', {}).get('harmony', {})
43
+ if 'appPath' not in h: issues.append('缺少 platforms.harmony.appPath')
44
+ elif not h['appPath'].startswith('/'): issues.append('appPath 非绝对路径')
45
+ if not h.get('devices'): issues.append('缺少 platforms.harmony.devices')
46
+ for i in issues:
47
+ print(f" ❌ cptf.config.json: {i}")
48
+ if not issues:
49
+ print(" ✅ cptf.config.json 关键字段完整")
50
+ sys.exit(1 if issues else 0)
51
+ EOF
52
+ [ $? -eq 0 ] && PASS=$((PASS + 1)) || FAIL=$((FAIL + 1))
53
+ else
54
+ check_fail "cptf.config.json 不存在"
55
+ fi
56
+
57
+ # ─── 2. package.json link 依赖 ───
58
+ echo ""
59
+ echo "--- 2. link 依赖检查 ---"
60
+ if [ -f "$workspaceDir/package.json" ]; then
61
+ if grep -q '"@cptf/framework": "link:' "$workspaceDir/package.json"; then
62
+ check_pass "package.json 声明 @cptf/framework link 依赖"
63
+ else
64
+ check_fail "package.json 未声明 @cptf/framework link 依赖(将触发 Cannot find module)"
65
+ fi
66
+ if grep -q '"reflect-metadata": "link:' "$workspaceDir/package.json"; then
67
+ check_pass "package.json 声明 reflect-metadata link 依赖"
68
+ else
69
+ check_fail "package.json 未声明 reflect-metadata link 依赖(装饰器将不生效)"
70
+ fi
71
+ else
72
+ check_fail "package.json 不存在"
73
+ fi
74
+
75
+ # ─── 3. node_modules 解析验证 ───
76
+ echo ""
77
+ echo "--- 3. 模块解析检查 ---"
78
+ if [ -d "$workspaceDir/node_modules/@cptf/framework" ]; then
79
+ check_pass "node_modules/@cptf/framework 已建立"
80
+ else
81
+ check_fail "node_modules/@cptf/framework 不存在(运行 pnpm install)"
82
+ fi
83
+
84
+ # ─── 4. 测试文件骨架 ───
85
+ echo ""
86
+ echo "--- 4. 测试文件检查 ---"
87
+ testFiles=$(find "$workspaceDir/tests/cases" -name '*.test.ts' 2>/dev/null)
88
+ if [ -n "$testFiles" ]; then
89
+ check_pass "发现测试文件: $(echo "$testFiles" | wc -l | tr -d ' ') 个"
90
+ for tf in $testFiles; do
91
+ echo " 检查: $(basename "$tf")"
92
+ grep -q "import 'reflect-metadata'" "$tf" && check_pass " 首行 import reflect-metadata" || check_fail " 缺少 import 'reflect-metadata'"
93
+ grep -q 'stepTimeout' "$tf" && check_pass " 已设置 stepTimeout" || check_fail " 存在未设置 stepTimeout 的步骤风险(全文件无 stepTimeout)"
94
+ grep -q 'testCaseExecutor' "$tf" && check_pass " 导出 testCaseExecutor" || check_fail " 缺少 testCaseExecutor 导出(CLI 无法发现用例)"
95
+ # 全角冒号风险扫描:waitForText 参数含半角冒号且同文件有全角文本
96
+ halfwidth=$(grep -o "waitForText('[^']*:[^']*')" "$tf" | head -5)
97
+ if [ -n "$halfwidth" ]; then
98
+ echo " ⚠️ 以下 waitForText 含半角冒号,请核对 demo 源码是否为全角:"
99
+ echo "$halfwidth" | sed 's/^/ /'
100
+ fi
101
+ done
102
+ else
103
+ check_fail "tests/cases 下未发现 .test.ts 文件"
104
+ fi
105
+
106
+ echo ""
107
+ echo "=== 结果: PASS=$PASS FAIL=$FAIL ==="
108
+ [ $FAIL -eq 0 ] && exit 0 || exit 1