@ohos-cpf/3rdloop 0.0.1 → 0.0.3

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 (393) hide show
  1. package/README.md +245 -425
  2. package/bin/3rdloop.mjs +46 -46
  3. package/lib/cli.js +781 -740
  4. package/lib/config-cmd.js +452 -0
  5. package/lib/config.js +318 -317
  6. package/lib/doctor.js +113 -113
  7. package/lib/exit-codes.js +30 -30
  8. package/lib/opencode.js +155 -155
  9. package/lib/orch.js +426 -426
  10. package/lib/queries.js +263 -263
  11. package/lib/step.js +325 -325
  12. package/lib/ui.js +222 -222
  13. package/lib/update.js +280 -0
  14. package/lib/workflow.js +308 -290
  15. package/lib/workflows.js +131 -131
  16. package/package.json +50 -50
  17. package/vendor/Server/Agent/SkillSelector/README.md +343 -343
  18. package/vendor/Server/Agent/SkillSelector/core/Agent.js +207 -207
  19. package/vendor/Server/Agent/SkillSelector/index.js +14 -14
  20. package/vendor/Server/Agent/SkillSelector/llm/llmClient.js +313 -313
  21. package/vendor/Server/Agent/SkillSelector/llm/prompts.js +161 -161
  22. package/vendor/Server/Agent/SkillSelector/llm/reactSteps.js +144 -144
  23. package/vendor/Server/Agent/SkillSelector/matcher/fuzzyMatcher.js +433 -433
  24. package/vendor/Server/Agent/SkillSelector/scanner/skillScanner.js +382 -382
  25. package/vendor/Server/Agent/SkillSelector/utils/actionWords.js +59 -59
  26. package/vendor/Server/Brain/AnalysisStrategies.js +422 -422
  27. package/vendor/Server/Brain/Brain.js +686 -686
  28. package/vendor/Server/Brain/DecompositionStrategies.js +621 -621
  29. package/vendor/Server/Brain/PlanPersistence.js +196 -196
  30. package/vendor/Server/Brain/SkillExecutor.js +251 -251
  31. package/vendor/Server/Brain/index.js +11 -11
  32. package/vendor/Server/CLI/cli.js +275 -243
  33. package/vendor/Server/CLI/deveco-code/index.js +71 -0
  34. package/vendor/Server/CLI/deveco-code.js +5 -0
  35. package/vendor/Server/CLI/opencode/index.js +817 -804
  36. package/vendor/Server/CLI/opencode.js +5 -5
  37. package/vendor/Server/DbUse/MessageArchive.js +61 -61
  38. package/vendor/Server/DbUse/StorageManager.js +107 -107
  39. package/vendor/Server/DbUse/adapters/BaseAdapter.js +94 -94
  40. package/vendor/Server/DbUse/adapters/FileAdapter.js +138 -138
  41. package/vendor/Server/DbUse/adapters/JsonAdapter.js +138 -138
  42. package/vendor/Server/DbUse/adapters/JsonlAdapter.js +114 -114
  43. package/vendor/Server/DbUse/adapters/SqliteAdapter.js +157 -157
  44. package/vendor/Server/DbUse/index.js +160 -160
  45. package/vendor/Server/DbUse/stores/SessionStore.js +279 -279
  46. package/vendor/Server/DbUse/stores/TaskExecutionStore.js +133 -133
  47. package/vendor/Server/DbUse/stores/TaskRegistryStore.js +262 -262
  48. package/vendor/Server/DbUse/stores/TaskStepStore.js +279 -279
  49. package/vendor/Server/FlexRunner/FlexRunner.js +1759 -1759
  50. package/vendor/Server/FlexRunner/index.js +12 -12
  51. package/vendor/Server/Knowledge/KnowledgeImporter.js +523 -523
  52. package/vendor/Server/Knowledge/KnowledgeManager.js +341 -341
  53. package/vendor/Server/Knowledge/index.js +33 -33
  54. package/vendor/Server/LoopEngine/LoopEngine.js +1133 -1133
  55. package/vendor/Server/LoopEngine/index.js +11 -11
  56. package/vendor/Server/Orchestrator/Orchestrator.js +0 -3
  57. package/vendor/Server/Orchestrator/StepNode.js +312 -312
  58. package/vendor/Server/Orchestrator/index.js +13 -13
  59. package/vendor/Server/Routes/controllers/BrainController.js +241 -241
  60. package/vendor/Server/Routes/controllers/FlexRunnerController.js +1125 -1125
  61. package/vendor/Server/Routes/controllers/HealthController.js +44 -44
  62. package/vendor/Server/Routes/controllers/KnowledgeImportController.js +355 -355
  63. package/vendor/Server/Routes/controllers/LoopEngineController.js +788 -788
  64. package/vendor/Server/Routes/controllers/StatsController.js +57 -57
  65. package/vendor/Server/Routes/controllers/StreamController.js +67 -67
  66. package/vendor/Server/Routes/library/logger.js +179 -179
  67. package/vendor/Server/Routes/library/zipArchive.js +172 -172
  68. package/vendor/Server/Routes/router/Router.js +204 -204
  69. package/vendor/Server/Routes/routes/brain.js +47 -47
  70. package/vendor/Server/Routes/routes/flexrunner.js +72 -72
  71. package/vendor/Server/Routes/routes/health.js +28 -28
  72. package/vendor/Server/Routes/routes/index.js +57 -57
  73. package/vendor/Server/Routes/routes/knowledge.js +55 -55
  74. package/vendor/Server/Routes/routes/loopengine.js +58 -58
  75. package/vendor/Server/Routes/routes/orchestrator.js +61 -61
  76. package/vendor/Server/Routes/routes/registry.js +97 -97
  77. package/vendor/Server/Routes/routes/stats.js +23 -23
  78. package/vendor/Server/Routes/routes/stream.js +30 -30
  79. package/vendor/Server/Routes/server.js +203 -202
  80. package/vendor/Server/Routes/sse/SseHub.js +308 -308
  81. package/vendor/Server/Skills/acceptance-check/SKILL.md +191 -174
  82. package/vendor/Server/Skills/acceptance-check/references/PHASE1_ARTIFACT_COLLECTION.md +52 -52
  83. package/vendor/Server/Skills/acceptance-check/references/PHASE2_CRITERIA_EVALUATION.md +77 -77
  84. package/vendor/Server/Skills/acceptance-check/references/PHASE2_EVIDENCE_VERIFICATION.md +70 -0
  85. package/vendor/Server/Skills/arkts-code-check/SKILL.md +320 -313
  86. package/vendor/Server/Skills/arkts-code-check/references/CODE_CHECK_GUIDE.md +210 -159
  87. package/vendor/Server/Skills/arkts-code-check/references/FILE_TYPE_GUIDE.md +28 -28
  88. package/vendor/Server/Skills/arkts-code-check/references/PHASE1_INFO_COLLECTION.md +233 -222
  89. package/vendor/Server/Skills/arkts-code-check/references/REPORT_TEMPLATE.md +219 -219
  90. package/vendor/Server/Skills/arkts-library-compile-validate/SKILL.md +328 -328
  91. package/vendor/Server/Skills/arkts-library-compile-validate/scripts/build.ps1 +93 -93
  92. package/vendor/Server/Skills/arkts-library-compile-validate/scripts/code-linter.cjs +432 -432
  93. package/vendor/Server/Skills/arkts-library-compile-validate/scripts/migrate.cjs +851 -851
  94. package/vendor/Server/Skills/arkts-library-compile-validate/scripts/ohpm-switch.cjs +788 -788
  95. package/vendor/Server/Skills/arkts-library-demo-code/SKILL.md +291 -291
  96. package/vendor/Server/Skills/arkts-library-demo-code/references/API_SIGNATURE_CHECKS.md +68 -68
  97. package/vendor/Server/Skills/arkts-library-demo-code/references/BUILD_VALIDATION.md +184 -184
  98. package/vendor/Server/Skills/arkts-library-demo-code/references/CODE_STANDARDS.md +337 -337
  99. package/vendor/Server/Skills/arkts-library-demo-code/references/EXAMPLES.md +400 -400
  100. package/vendor/Server/Skills/arkts-library-demo-code/references/SYSTEM_API_LOOKUP.md +98 -98
  101. package/vendor/Server/Skills/arkts-library-demo-code/references/TEMPLATE.md +544 -544
  102. package/vendor/Server/Skills/arkts-library-demo-code/scripts/build.ps1 +93 -93
  103. package/vendor/Server/Skills/arkts-library-demo-code/scripts/code-linter.cjs +432 -432
  104. package/vendor/Server/Skills/arkts-library-demo-code/scripts/migrate.cjs +851 -851
  105. package/vendor/Server/Skills/arkts-library-demo-code/scripts/ohpm-switch.cjs +788 -788
  106. package/vendor/Server/Skills/arkts-library-demo-coverage/SKILL.md +174 -174
  107. package/vendor/Server/Skills/arkts-library-demo-scenario/SKILL.md +321 -321
  108. package/vendor/Server/Skills/arkts-library-demo-scenario/references/EXAMPLES.md +100 -100
  109. package/vendor/Server/Skills/arkts-library-demo-scenario/references/TEMPLATE.md +185 -185
  110. package/vendor/Server/Skills/arkts-library-documentation-quality-check/SKILL.md +233 -233
  111. package/vendor/Server/Skills/arkts-library-documentation-quality-check/assets/REPORT_TEMPLATE.md +102 -102
  112. package/vendor/Server/Skills/arkts-library-documentation-quality-check/references/CHECK_DIMENSIONS.md +89 -89
  113. package/vendor/Server/Skills/arkts-library-documentation-quality-check/references/COMPLIANCE_CHECKLIST.md +62 -62
  114. package/vendor/Server/Skills/arkts-library-documentation-quality-check/references/KB_QUERY_GUIDE.md +107 -107
  115. package/vendor/Server/Skills/arkts-library-documentation-quality-check/references/MCP_TOOL_DISCOVERY.md +124 -124
  116. package/vendor/Server/Skills/arkts-library-documentation-quality-check/references/REPORT_TEMPLATE.md +90 -90
  117. package/vendor/Server/Skills/arkts-library-documentation-quality-check/references/SCORING_FORMULA.md +57 -57
  118. package/vendor/Server/Skills/arkts-library-documentation-quality-check/scripts/validate-skill.cjs +259 -259
  119. package/vendor/Server/Skills/arkts-library-interface-spec/SKILL.md +97 -97
  120. package/vendor/Server/Skills/arkts-library-memory-leak-check/SKILL.md +391 -391
  121. package/vendor/Server/Skills/arkts-library-source-clone/SKILL.md +113 -113
  122. package/vendor/Server/Skills/arkts-library-stability-check/SKILL.md +312 -312
  123. package/vendor/Server/Skills/arkts-library-stability-check/assets/REPORT_TEMPLATE.md +154 -154
  124. package/vendor/Server/Skills/arkts-library-stability-check/references/CHECKLIST.md +165 -165
  125. package/vendor/Server/Skills/arkts-library-stability-check/references/CODE_EXAMPLES.md +308 -308
  126. package/vendor/Server/Skills/arkts-library-stability-check/references/SCORING_RULES.md +90 -90
  127. package/vendor/Server/Skills/arkts-library-stability-check/scripts/validate-skill.cjs +282 -282
  128. package/vendor/Server/Skills/arkts-library-test-coverage-check/SKILL.md +360 -360
  129. package/vendor/Server/Skills/arkts-library-test-coverage-check/assets/REPORT_TEMPLATE.md +145 -145
  130. package/vendor/Server/Skills/arkts-library-test-coverage-check/references/CHECKLIST.md +252 -252
  131. package/vendor/Server/Skills/arkts-library-test-coverage-check/references/MCP_TOOL_USAGE.md +114 -114
  132. package/vendor/Server/Skills/arkts-library-test-coverage-check/scripts/validate-skill.cjs +262 -262
  133. package/vendor/Server/Skills/arkts-library-xts-code/SKILL.md +455 -455
  134. package/vendor/Server/Skills/arkts-library-xts-code/assets/report-template.md +60 -60
  135. package/vendor/Server/Skills/arkts-library-xts-code/references/ACCESS_MODIFIER_PRECHECK.md +76 -76
  136. package/vendor/Server/Skills/arkts-library-xts-code/references/BUILD_VERIFICATION.md +200 -200
  137. package/vendor/Server/Skills/arkts-library-xts-code/references/CODE_STANDARDS.md +518 -518
  138. package/vendor/Server/Skills/arkts-library-xts-code/references/SUBAGENT_PROMPT_TEMPLATE.md +276 -276
  139. package/vendor/Server/Skills/arkts-library-xts-code/references/SYSTEM_API_LOOKUP.md +92 -92
  140. package/vendor/Server/Skills/arkts-library-xts-code/references/XTS_TEMPLATE.md +767 -767
  141. package/vendor/Server/Skills/arkts-library-xts-code/scripts/build.ps1 +93 -93
  142. package/vendor/Server/Skills/arkts-library-xts-code/scripts/code-linter.cjs +432 -432
  143. package/vendor/Server/Skills/arkts-library-xts-code/scripts/migrate.cjs +851 -851
  144. package/vendor/Server/Skills/arkts-library-xts-code/scripts/ohpm-switch.cjs +788 -788
  145. package/vendor/Server/Skills/arkts-library-xts-code/scripts/precheck-access-modifiers.cjs +221 -221
  146. package/vendor/Server/Skills/arkts-library-xts-code-fix/SKILL.md +228 -228
  147. package/vendor/Server/Skills/arkts-library-xts-coverage/SKILL.md +97 -97
  148. package/vendor/Server/Skills/arkts-library-xts-doc/SKILL.md +194 -194
  149. package/vendor/Server/Skills/arkts-library-xts-doc/references/EXAMPLES.md +575 -575
  150. package/vendor/Server/Skills/arkts-library-xts-doc/references/TEMPLATE.md +574 -574
  151. package/vendor/Server/Skills/arkts-library-xts-doc/references/TESTABILITY_GUIDE.md +182 -182
  152. package/vendor/Server/Skills/arkts-library-xts-execution/SKILL.md +490 -490
  153. package/vendor/Server/Skills/arkts-library-xts-execution/references/error-fixing-examples.md +217 -217
  154. package/vendor/Server/Skills/arkts-library-xts-execution/scripts/build.ps1 +93 -93
  155. package/vendor/Server/Skills/arkts-library-xts-execution/scripts/code-linter.cjs +432 -432
  156. package/vendor/Server/Skills/arkts-library-xts-execution/scripts/migrate.cjs +851 -851
  157. package/vendor/Server/Skills/arkts-library-xts-execution/scripts/ohpm-switch.cjs +788 -788
  158. package/vendor/Server/Skills/flutter-code-check/SKILL.md +299 -299
  159. package/vendor/Server/Skills/flutter-code-check/assets/OUTPUT_TEMPLATE.md +311 -311
  160. package/vendor/Server/Skills/flutter-code-check/references/CHECKLIST.md +190 -190
  161. package/vendor/Server/Skills/flutter-code-check/references/PLATFORMS.md +133 -133
  162. package/vendor/Server/Skills/flutter-code-check/scripts/validate-skill.cjs +259 -259
  163. package/vendor/Server/Skills/flutter-interface/README.md +75 -75
  164. package/vendor/Server/Skills/flutter-interface/SKILL.md +291 -291
  165. package/vendor/Server/Skills/flutter-interface/references/EXAMPLES.md +336 -336
  166. package/vendor/Server/Skills/flutter-interface/references/GIT_CLONE_GUIDE.md +190 -190
  167. package/vendor/Server/Skills/flutter-interface/references/SCRIPT_REFERENCE.md +258 -258
  168. package/vendor/Server/Skills/flutter-interface/references/TEMPLATE.md +254 -254
  169. package/vendor/Server/Skills/flutter-library-consistency-check/SKILL.md +517 -517
  170. package/vendor/Server/Skills/flutter-library-consistency-check/references/CHECKLIST.md +381 -381
  171. package/vendor/Server/Skills/flutter-library-consistency-check/references/FUNCTION_COMPARISON_GUIDE.md +341 -341
  172. package/vendor/Server/Skills/flutter-library-consistency-check/references/PLATFORM_LIMITATION_GUIDE.md +71 -71
  173. package/vendor/Server/Skills/flutter-library-documentation-quality-check/SKILL.md +518 -518
  174. package/vendor/Server/Skills/flutter-library-documentation-quality-check/references/CHECKLIST.md +406 -406
  175. package/vendor/Server/Skills/flutter-library-memory-leak-check/SKILL.md +652 -652
  176. package/vendor/Server/Skills/flutter-library-memory-leak-check/references/CHECKLIST.md +396 -396
  177. package/vendor/Server/Skills/flutter-library-stability-check/SKILL.md +744 -744
  178. package/vendor/Server/Skills/flutter-library-stability-check/references/CHECKLIST.md +720 -720
  179. package/vendor/Server/Skills/flutter-library-test-coverage-check/SKILL.md +414 -414
  180. package/vendor/Server/Skills/flutter-library-test-coverage-check/assets/REPORT_TEMPLATE.md +150 -150
  181. package/vendor/Server/Skills/flutter-library-test-coverage-check/references/CHECKLIST.md +304 -304
  182. package/vendor/Server/Skills/flutter-library-test-coverage-check/references/SCORING_RULES.md +265 -265
  183. package/vendor/Server/Skills/flutter-library-test-coverage-check/references/SCRIPT_USAGE.md +286 -286
  184. package/vendor/Server/Skills/knowledge-import/SKILL.md +383 -383
  185. package/vendor/Server/Skills/knowledge-import/references/MCP_TOOL_USAGE.md +165 -165
  186. package/vendor/Server/Skills/knowledge-import/references/SKILL_LOCATOR_GUIDE.md +91 -91
  187. package/vendor/Server/Skills/knowledge-import/references/SKILL_OPTIMIZATION_GUIDE.md +127 -127
  188. package/vendor/Server/Skills/ohos-lib-pr-push/SKILL.md +453 -301
  189. package/vendor/Server/Skills/ohos-lib-pr-push/assets/PR_CHECKLIST.md +151 -0
  190. package/vendor/Server/Skills/ohos-lib-pr-push/assets/PR_ISSUE_TEMPLATE.md +257 -105
  191. package/vendor/Server/Skills/ohos-lib-pr-push/references/GITCODE_API.md +191 -127
  192. package/vendor/Server/Skills/ohos-lib-pr-push/scripts/gitcode-api.cjs +317 -208
  193. package/vendor/Server/Skills/rn-code-check/SKILL.md +320 -320
  194. package/vendor/Server/Skills/rn-code-check/references/API-GUIDE.md +234 -234
  195. package/vendor/Server/Skills/rn-code-check/references/CHECKLIST.md +188 -188
  196. package/vendor/Server/Skills/rn-code-check/references/REPORT-TEMPLATE.md +246 -246
  197. package/vendor/Server/Skills/rn-lib-add-example/SKILL.md +198 -198
  198. package/vendor/Server/Skills/rn-lib-add-example/references/APP_RENAME_GUIDE.md +40 -40
  199. package/vendor/Server/Skills/rn-lib-add-example/references/SHELL_ADAPTATION_CHECKLIST.md +78 -78
  200. package/vendor/Server/Skills/rn-lib-add-example/references/TEMPLATE_REPO_GUIDE.md +70 -70
  201. package/vendor/Server/Skills/rn-lib-add-example/references/VERIFICATION_GUIDE.md +47 -47
  202. package/vendor/Server/Skills/rn-lib-add-example/scripts/create-example.cjs +252 -252
  203. package/vendor/Server/Skills/rn-lib-update-doc/SKILL.md +176 -176
  204. package/vendor/Server/Skills/rn-lib-update-doc/config.json +5 -5
  205. package/vendor/Server/Skills/rn-lib-update-doc/references/changelog-template.md +35 -35
  206. package/vendor/Server/Skills/rn-lib-update-doc/references/format-diff.md +137 -137
  207. package/vendor/Server/Skills/rn-lib-update-doc/references/link-registry.json +33 -33
  208. package/vendor/Server/Skills/rn-lib-update-doc/references/model-0.4.2-overview.md +40 -40
  209. package/vendor/Server/Skills/rn-lib-update-doc/references/model-0.4.2.md +429 -429
  210. package/vendor/Server/Skills/rn-lib-update-doc/scripts/detect-readme-format.cjs +105 -105
  211. package/vendor/Server/Skills/rn-lib-update-doc/scripts/find-usage-doc.cjs +90 -90
  212. package/vendor/Server/Skills/rn-lib-update-doc/scripts/link-verify.cjs +213 -213
  213. package/vendor/Server/Skills/rn-lib-update-doc/scripts/normalize-changelog.cjs +73 -73
  214. package/vendor/Server/Skills/rn-lib-update-doc/scripts/normalize-package-meta.cjs +258 -258
  215. package/vendor/Server/Skills/rn-lib-update-doc/scripts/normalize-readme-links.cjs +341 -341
  216. package/vendor/Server/Skills/rn-lib-update-doc/scripts/resolve-usage-docs.cjs +67 -67
  217. package/vendor/Server/Skills/rn-library-consistency-check/SKILL.md +299 -299
  218. package/vendor/Server/Skills/rn-library-consistency-check/assets/REPORT_TEMPLATE.md +293 -293
  219. package/vendor/Server/Skills/rn-library-consistency-check/references/ARKTS_COMPONENT_CHECK_GUIDE.md +857 -857
  220. package/vendor/Server/Skills/rn-library-consistency-check/references/ARKTS_TURBOMODULE_CHECK_GUIDE.md +856 -856
  221. package/vendor/Server/Skills/rn-library-consistency-check/references/CHECKLIST.md +157 -157
  222. package/vendor/Server/Skills/rn-library-consistency-check/references/CPP_COMPONENT_CHECK_GUIDE.md +801 -801
  223. package/vendor/Server/Skills/rn-library-consistency-check/references/CPP_TURBOMODULE_CHECK_GUIDE.md +683 -683
  224. package/vendor/Server/Skills/rn-library-consistency-check/references/FUNCTION_COMPARISON_GUIDE.md +233 -233
  225. package/vendor/Server/Skills/rn-library-consistency-check/references/NATIVE_COMPONENT_IDENTIFICATION.md +1373 -1373
  226. package/vendor/Server/Skills/rn-library-consistency-check/references/SCORING_STANDARD.md +220 -220
  227. package/vendor/Server/Skills/rn-library-consistency-check/scripts/validate-skill.py +245 -245
  228. package/vendor/Server/Skills/rn-library-documentation-quality-check/SKILL.md +263 -263
  229. package/vendor/Server/Skills/rn-library-documentation-quality-check/assets/MODEL.md +414 -414
  230. package/vendor/Server/Skills/rn-library-documentation-quality-check/assets/MODEL_en.md +413 -413
  231. package/vendor/Server/Skills/rn-library-documentation-quality-check/assets/REPORT_TEMPLATE.md +311 -311
  232. package/vendor/Server/Skills/rn-library-documentation-quality-check/references/CHECK_CHECKLIST.md +355 -355
  233. package/vendor/Server/Skills/rn-library-documentation-quality-check/references/CROSS_VALIDATION_GUIDE.md +115 -115
  234. package/vendor/Server/Skills/rn-library-documentation-quality-check/references/DOC_COLLECTION_GUIDE.md +139 -139
  235. package/vendor/Server/Skills/rn-library-documentation-quality-check/references/EXAMPLES.md +586 -586
  236. package/vendor/Server/Skills/rn-library-documentation-quality-check/references/GOTCHAS.md +57 -57
  237. package/vendor/Server/Skills/rn-library-documentation-quality-check/scripts/validate-skill.py +259 -259
  238. package/vendor/Server/Skills/rn-library-interface-analyzer/SKILL.md +301 -301
  239. package/vendor/Server/Skills/rn-library-interface-analyzer/assets/REPORT_TEMPLATE.md +148 -148
  240. package/vendor/Server/Skills/rn-library-interface-analyzer/references/DOC_ANNOTATION_GUIDE.md +118 -118
  241. package/vendor/Server/Skills/rn-library-interface-analyzer/references/SCRIPT_USAGE_GUIDE.md +168 -168
  242. package/vendor/Server/Skills/rn-library-interface-analyzer/references/URL_PARSING_RULES.md +176 -176
  243. package/vendor/Server/Skills/rn-library-issue-generalizer/SKILL.md +274 -274
  244. package/vendor/Server/Skills/rn-library-issue-generalizer/assets/case-template.md +45 -45
  245. package/vendor/Server/Skills/rn-library-issue-generalizer/assets/rule-template.md +25 -25
  246. package/vendor/Server/Skills/rn-library-issue-generalizer/references/PR_FETCH_GUIDE.md +61 -61
  247. package/vendor/Server/Skills/rn-library-issue-generalizer/references/RULE_TEMPLATE_GUIDE.md +165 -165
  248. package/vendor/Server/Skills/rn-library-issue-generalizer/scripts/fetch-pr-info.py +239 -239
  249. package/vendor/Server/Skills/rn-library-known-issue-check/SKILL.md +263 -263
  250. package/vendor/Server/Skills/rn-library-known-issue-check/assets/REPORT_TEMPLATE.md +96 -96
  251. package/vendor/Server/Skills/rn-library-known-issue-check/references/COMPLIANCE_CHECKLIST.md +57 -57
  252. package/vendor/Server/Skills/rn-library-known-issue-check/references/INSPECTION_GUIDE.md +99 -99
  253. package/vendor/Server/Skills/rn-library-known-issue-check/references/PRESCREEN_GUIDE.md +64 -64
  254. package/vendor/Server/Skills/rn-library-known-issue-check/references/SOURCE_PREP_GUIDE.md +74 -74
  255. package/vendor/Server/Skills/rn-library-known-issue-check/scripts/validate-known-issue-report.py +164 -164
  256. package/vendor/Server/Skills/rn-library-memory-leak-check/SKILL.md +356 -339
  257. package/vendor/Server/Skills/rn-library-memory-leak-check/assets/REPORT_TEMPLATE.md +85 -83
  258. package/vendor/Server/Skills/rn-library-memory-leak-check/references/CHECKLIST.md +905 -859
  259. package/vendor/Server/Skills/rn-library-memory-leak-check/references/HARMONY_CODE_PATTERNS.md +124 -122
  260. package/vendor/Server/Skills/rn-library-memory-leak-check/scripts/scan_harmony_code.py +287 -279
  261. package/vendor/Server/Skills/rn-library-stability-check/SKILL.md +273 -273
  262. package/vendor/Server/Skills/rn-library-stability-check/assets/REPORT_TEMPLATE.md +129 -129
  263. package/vendor/Server/Skills/rn-library-stability-check/references/CHECKLIST.md +581 -581
  264. package/vendor/Server/Skills/rn-library-stability-check/references/SCORING_RULES.md +138 -138
  265. package/vendor/Server/Skills/rn-library-stability-check/scripts/scan-harmony-code.py +168 -168
  266. package/vendor/Server/Skills/rn-library-test-coverage-check/SKILL.md +526 -506
  267. package/vendor/Server/Skills/rn-library-test-coverage-check/references/CHECKLIST.md +321 -280
  268. package/vendor/Server/Skills/rn-library-test-coverage-check/references/DEMO_LOCATION.md +221 -221
  269. package/vendor/Server/Skills/rn-library-test-coverage-check/references/REPORT_TEMPLATE.md +220 -209
  270. package/vendor/Server/Skills/rn-library-test-coverage-check/references/SCRIPT_USAGE.md +325 -325
  271. package/vendor/Server/Skills/rn-ohos-xts-generator/SKILL.md +279 -279
  272. package/vendor/Server/Skills/rn-ohos-xts-generator/assets/TEST_FILE_TEMPLATES.md +404 -404
  273. package/vendor/Server/Skills/rn-ohos-xts-generator/references/BUILD_TROUBLESHOOTING.md +185 -185
  274. package/vendor/Server/Skills/rn-ohos-xts-generator/references/BUILD_WORKFLOW.md +265 -265
  275. package/vendor/Server/Skills/rn-ohos-xts-generator/references/COMMON_CONFIG.md +189 -189
  276. package/vendor/Server/Skills/rn-ohos-xts-generator/references/CONFIG_GUIDE.md +203 -203
  277. package/vendor/Server/Skills/rn-ohos-xts-generator/references/COVERAGE_ANALYZER.md +147 -147
  278. package/vendor/Server/Skills/rn-ohos-xts-generator/references/DESIGN_DOC_GUIDE.md +148 -148
  279. package/vendor/Server/Skills/rn-ohos-xts-generator/references/GENERATION_FLOW.md +165 -165
  280. package/vendor/Server/Skills/rn-ohos-xts-generator/references/GENERATION_STRATEGY.md +195 -195
  281. package/vendor/Server/Skills/rn-ohos-xts-generator/references/HARMONY_SCANNER.md +249 -249
  282. package/vendor/Server/Skills/rn-ohos-xts-generator/references/JEST_FRAMEWORK.md +235 -235
  283. package/vendor/Server/Skills/rn-ohos-xts-generator/references/PLATFORM_COMPAT.md +161 -161
  284. package/vendor/Server/Skills/rn-ohos-xts-generator/references/RN_TEST_PATTERNS.md +413 -413
  285. package/vendor/Server/Skills/rn-ohos-xts-generator/references/SOURCE_PARSER.md +235 -235
  286. package/vendor/Server/Skills/rn-ohos-xts-generator/references/TEST_CONVENTIONS.md +245 -245
  287. package/vendor/Server/Skills/rn-ohos-xts-generator/references/TROUBLESHOOTING.md +282 -282
  288. package/vendor/Server/Skills/rn-ohos-xts-generator/references/USAGE_GUIDE.md +251 -251
  289. package/vendor/Server/Skills/rnoh-cptf-api-test/SKILL.md +469 -469
  290. package/vendor/Server/Skills/rnoh-cptf-api-test/assets/CPTF_TEST_TEMPLATE.md +310 -310
  291. package/vendor/Server/Skills/rnoh-cptf-api-test/assets/DEMO_PAGE_TEMPLATE.md +303 -303
  292. package/vendor/Server/Skills/rnoh-cptf-api-test/references/CPTF_TEST_GENERATION_GUIDE.md +421 -421
  293. package/vendor/Server/Skills/rnoh-cptf-api-test/references/DEMO_GENERATION_GUIDE.md +358 -358
  294. package/vendor/Server/Skills/rnoh-cptf-api-test/references/QUALITY_CHECKLIST.md +114 -114
  295. package/vendor/Server/Skills/rnoh-cptf-api-test/references/SPEC_PARSING_GUIDE.md +274 -274
  296. package/vendor/Server/Skills/rnoh-cptf-api-test/scripts/validate-rnoh-cptf-api-test.sh +185 -185
  297. package/vendor/Server/Skills/rnoh-cptf-demo-test/SKILL.md +191 -191
  298. package/vendor/Server/Skills/rnoh-cptf-demo-test/assets/TEST_TEMPLATE.md +216 -216
  299. package/vendor/Server/Skills/rnoh-cptf-demo-test/references/CPTF_SETUP.md +107 -107
  300. package/vendor/Server/Skills/rnoh-cptf-demo-test/references/DEMO_ANALYSIS.md +120 -120
  301. package/vendor/Server/Skills/rnoh-cptf-demo-test/scripts/validate-rnoh-cptf-test.sh +108 -108
  302. package/vendor/Server/Skills/rnoh-cptf-test-run/SKILL.md +237 -237
  303. package/vendor/Server/Skills/rnoh-cptf-test-run/references/DEBUG_PLAYBOOK.md +261 -261
  304. package/vendor/Server/Skills/rnoh-cptf-test-run/scripts/validate-run-env.sh +112 -112
  305. package/vendor/Server/Skills/rnoh-lib-code-adapt/SKILL.md +497 -497
  306. package/vendor/Server/Skills/rnoh-lib-code-adapt/references/adapt-checklist.md +270 -270
  307. package/vendor/Server/Skills/rnoh-lib-code-adapt/references/api-migration-checklist.md +164 -164
  308. package/vendor/Server/Skills/rnoh-lib-code-adapt/references/common-compile-errors.md +556 -556
  309. package/vendor/Server/Skills/rnoh-lib-code-adapt/references/deveco-cli-tools.md +459 -459
  310. package/vendor/Server/Skills/rnoh-lib-code-adapt/references/edge-cases.md +65 -65
  311. package/vendor/Server/Skills/rnoh-lib-code-adapt/references/har-tgz-build.md +512 -512
  312. package/vendor/Server/Skills/rnoh-lib-code-adapt/references/version-compat-matrix.md +132 -132
  313. package/vendor/Server/Skills/rnoh-lib-code-adapt/scripts/auto-integrate.sh +424 -424
  314. package/vendor/Server/Skills/rnoh-lib-demo-coverage/SKILL.md +137 -137
  315. package/vendor/Server/Skills/rnoh-lib-demo-create/SKILL.md +306 -306
  316. package/vendor/Server/Skills/rnoh-lib-demo-create/assets/DEMO_PAGE_TEMPLATE.md +485 -485
  317. package/vendor/Server/Skills/rnoh-lib-demo-create/assets/INDEX_TEMPLATE.md +172 -172
  318. package/vendor/Server/Skills/rnoh-lib-demo-create/references/DEMO_CODE_RULES.md +422 -422
  319. package/vendor/Server/Skills/rnoh-lib-demo-create/references/QUALITY_CHECKLIST.md +95 -95
  320. package/vendor/Server/Skills/rnoh-lib-demo-create/references/SOURCE_EXPLORATION.md +169 -169
  321. package/vendor/Server/Skills/rnoh-lib-demo-doc/SKILL.md +554 -554
  322. package/vendor/Server/Skills/rnoh-lib-demo-doc/assets/DEMO_DOC_TEMPLATE.md +106 -106
  323. package/vendor/Server/Skills/rnoh-lib-demo-doc/references/COVERAGE_INCREMENTAL.md +216 -216
  324. package/vendor/Server/Skills/rnoh-lib-demo-doc/references/DEMO_DESIGN_RULES.md +413 -413
  325. package/vendor/Server/Skills/rnoh-lib-demo-doc/references/OUTPUT_FORMAT.md +269 -269
  326. package/vendor/Server/Skills/rnoh-lib-demo-doc/references/QUALITY_CHECKLIST.md +98 -98
  327. package/vendor/Server/Skills/rnoh-lib-func-test/SKILL.md +337 -337
  328. package/vendor/Server/Skills/rnoh-lib-rnt-search/SKILL.md +722 -722
  329. package/vendor/Server/Skills/rnoh-lib-rnt-search/assets/PORT_REPORT_TEMPLATE.md +219 -219
  330. package/vendor/Server/Skills/rnoh-lib-rnt-search/references/DEMO_PORTING_GUIDE.md +345 -345
  331. package/vendor/Server/Skills/rnoh-lib-rnt-search/references/PORT_VERIFICATION.md +269 -269
  332. package/vendor/Server/Skills/rnoh-lib-rnt-search/references/RNT_PROJECT_STRUCTURE.md +173 -173
  333. package/vendor/Server/Skills/rnoh-lib-rnt-search/scripts/analyze-demo-deps.cjs +267 -267
  334. package/vendor/Server/Skills/rnoh-lib-rnt-search/scripts/detect-rnoh-version.cjs +174 -174
  335. package/vendor/Server/Skills/rnoh-lib-rnt-search/scripts/find-rnt-demo.sh +111 -111
  336. package/vendor/Server/Skills/rnoh-lib-rnt-search/scripts/port-demo.sh +186 -186
  337. package/vendor/Server/Skills/rnoh-lib-rnt-search/scripts/read-lib-meta.cjs +150 -150
  338. package/vendor/Server/Skills/rnoh-lib-test-align/SKILL.md +296 -296
  339. package/vendor/Server/Skills/rnoh-lib-test-align/references/jest-troubleshooting.md +371 -371
  340. package/vendor/Server/Skills/rnoh-lib-test-align/references/port-test-demo-guide.md +212 -212
  341. package/vendor/Server/Skills/rnoh-lib-test-align/references/runtime-troubleshooting.md +345 -345
  342. package/vendor/Server/Skills/rnoh-lib-test-align/references/unit-test-template.md +223 -223
  343. package/vendor/Server/Skills/rnoh-lib-test-align/scripts/port-test-demo.sh +1053 -1053
  344. package/vendor/Server/Skills/rnoh-lib-version-diff/SKILL.md +295 -255
  345. package/vendor/Server/Skills/rnoh-lib-version-diff/references/OHOS_ADAPTATION.md +82 -77
  346. package/vendor/Server/Skills/rnoh-lib-version-diff/references/OHOS_API_LOOKUP.md +224 -224
  347. package/vendor/Server/Skills/rnoh-lib-version-diff/references/script-reference.md +175 -174
  348. package/vendor/Server/Skills/rnoh-lib-version-diff/scripts/detect-upstream-version.js +967 -967
  349. package/vendor/Server/Skills/rnoh-lib-version-diff/scripts/generate-diff.js +1798 -1798
  350. package/vendor/Server/Skills/rnoh-lib-version-diff/scripts/package.json +5 -5
  351. package/vendor/Server/Skills/rnoh-lib-version-diff/templates/report-template.md +180 -137
  352. package/vendor/Server/Skills/rnoh-lib-xts-coverage/SKILL.md +145 -145
  353. package/vendor/Server/Skills/skill-generator/SKILL.md +365 -365
  354. package/vendor/Server/Skills/skill-generator/assets/SKILL_TEMPLATE.md +183 -183
  355. package/vendor/Server/Skills/skill-generator/references/COMPLIANCE_CHECKLIST.md +82 -82
  356. package/vendor/Server/Skills/skill-generator/references/KB_QUERY_GUIDE.md +110 -110
  357. package/vendor/Server/Skills/skill-generator/references/MCP_TOOL_DISCOVERY.md +122 -122
  358. package/vendor/Server/Skills/skill-generator/references/SKILL_SPEC.md +121 -121
  359. package/vendor/Server/Skills/skill-generator/scripts/validate-skill.cjs +259 -259
  360. package/vendor/Server/Skills/task-analysis/SKILL.md +234 -234
  361. package/vendor/Server/Skills/task-analysis/assets/OUTPUT_EXAMPLES.md +160 -160
  362. package/vendor/Server/Skills/task-analysis/references/ACCEPTANCE_CRITERIA_GUIDE.md +190 -190
  363. package/vendor/Server/Skills/task-analysis/references/ANALYSIS_SCHEMA.md +224 -224
  364. package/vendor/Server/Skills/task-analysis/references/INTEGRATION_CONTEXT.md +162 -162
  365. package/vendor/Server/Skills/task-analysis/references/LESSONS_LEARNED.md +55 -55
  366. package/vendor/Server/Skills/task-analysis/references/REPLAN_CONTEXT_GUIDE.md +126 -126
  367. package/vendor/Server/Skills/task-analysis/scripts/validate-analysis-output.sh +256 -256
  368. package/vendor/Server/Skills/task-decomposition/SKILL.md +528 -528
  369. package/vendor/Server/Skills/task-decomposition/assets/OUTPUT_EXAMPLES.md +451 -451
  370. package/vendor/Server/Skills/task-decomposition/references/ACCEPTANCE_CRITERIA_GUIDE.md +179 -179
  371. package/vendor/Server/Skills/task-decomposition/references/DEPENDENCY_GRAPH_GUIDE.md +152 -152
  372. package/vendor/Server/Skills/task-decomposition/references/INTEGRATION_CONTEXT.md +175 -175
  373. package/vendor/Server/Skills/task-decomposition/references/REPLAN_CONTEXT_GUIDE.md +195 -195
  374. package/vendor/Server/Skills/task-decomposition/references/TASK_DECOMPOSITION_TEMPLATES.md +226 -226
  375. package/vendor/Server/Skills/task-decomposition/scripts/list-available-skills.cjs +263 -263
  376. package/vendor/Server/Skills/task-decomposition/scripts/skill-blacklist.json +29 -29
  377. package/vendor/Server/Skills/task-decomposition/scripts/validate-decomposition-output.cjs +376 -376
  378. package/vendor/Server/Skills/task-decomposition/scripts/validate-param-consistency.cjs +259 -259
  379. package/vendor/Server/Skills/task-decomposition/scripts/validate-specified-skills.cjs +216 -216
  380. package/vendor/Server/Skills/task-decomposition/scripts/validate-step-graph.cjs +424 -424
  381. package/vendor/Server/Skills/tpc-cpp-check/SKILL.md +427 -427
  382. package/vendor/Server/Skills/tpc-cpp-check/references/CHECKLIST.md +214 -214
  383. package/vendor/Server/Skills/tpc-cpp-check/references/HPKBUILD_GUIDE.md +235 -235
  384. package/vendor/Server/Skills/tpc-cpp-check/references/REPORT_TEMPLATE.md +250 -250
  385. package/vendor/Server/TestCheck/TestCheck.js +775 -775
  386. package/vendor/Server/TestCheck/index.js +11 -11
  387. package/vendor/Server/library/McpToolGuide.js +280 -280
  388. package/vendor/Server/library/StatsService.js +126 -126
  389. package/vendor/Server/library/cstTime.js +16 -16
  390. package/vendor/VERSION +3 -3
  391. package/workflows/pr-check.mjs +105 -105
  392. package/workflows/pr-push.mjs +193 -0
  393. package/vendor/Server/Agent/SkillSelector/types.js +0 -63
@@ -1,413 +1,413 @@
1
- # Demo 设计规则
2
-
3
- > 本文档详细说明 Demo 的分组原则、五要素规范、平台过滤规则、双计数器模式和 useState 强制规则。
4
-
5
- ---
6
-
7
- ## 1. Demo 分组原则
8
-
9
- ### 原则一:一函数至少一个 Demo
10
-
11
- 每个**待生成**接口(Phase 4 过滤后)必须被至少一个 Demo 覆盖。
12
-
13
- - **全量模式**:覆盖所有 HarmonyOS 平台可用的导出函数/方法/组件
14
- - **增量模式**:仅覆盖 Demo 覆盖率报告中未覆盖的接口
15
-
16
- ### 原则二:关联接口可合并
17
-
18
- 满足以下任一条件的接口可合并到同一 Demo:
19
-
20
- | 合并条件 | 示例 |
21
- |----------|------|
22
- | 存在明确的调用依赖关系 | `init()` → `execute()` → `release()` |
23
- | 共同完成一个完整业务场景 | "创建实例 → 配置参数 → 执行操作 → 获取结果" |
24
- | 属于同一主题功能簇 | 所有播放控制相关方法 |
25
- | 一个接口的输出是另一个接口的输入 | `scan()` 返回设备列表 → `connect(deviceId)` 使用列表中的 ID |
26
- | 事件注册与移除配对 | `addListener()` 与 `removeListener()` |
27
-
28
- > **增量模式特殊规则**:若未覆盖接口与已覆盖接口存在调用依赖,可将未覆盖接口合并到新 Demo 中独立描述。新 Demo 的步骤应自包含,不依赖已覆盖接口的 Demo 步骤。例如:若 `connect()` 已覆盖但 `writeData()` 未覆盖,`writeData()` 的 Demo 步骤中可包含简化的连接步骤作为前置条件,但重点是 `writeData()` 的验证。
29
-
30
- ### 原则三:禁止无关合并
31
-
32
- 不同功能方向、无调用关系的接口不得强行合并到同一 Demo。
33
-
34
- ### 原则四:HarmonyOS 平台过滤
35
-
36
- > ⚠️ **过滤依据**:仅依据 README 文档的「HarmonyOS Support」列标注。**禁止**通过源码(`Platform.OS` 分支、TurboModule Spec、原生实现是否存在)进行过滤。源码中缺失鸿蒙实现可能是适配遗漏,需通过 Demo 验证发现。
37
-
38
- - **排除 README 标注 `no` 的接口**:README「HarmonyOS Support」列明确标注为 `no` 的接口,代表鸿蒙化维护者已确认不支持,不生成 Demo
39
- - **保留 README 未列出的接口**:上游新增但鸿蒙化 README 未收录的接口,视为无平台标注,默认跨平台,生成 Demo 并在描述中标注"建议验证 HarmonyOS 平台实际可用性"
40
- - **保留无平台标注的接口**:README 有接口但无「HarmonyOS Support」列时,默认视为跨平台,生成 Demo 但建议验证
41
- - **优先生成 README 标注 `yes` 的接口**:标记为 "跨平台"、"通用"、"Cross Platform"、"HarmonyOS 支持" 的接口优先生成 Demo
42
- - **平台差异说明**:在相关 Demo 步骤中标注 "本功能在 HarmonyOS 平台验证"
43
- - **适配遗漏诊断**:对于 README 未列出的接口,在预期结果中设计诊断指标(如"若回调未触发,可能为鸿蒙化适配遗漏"),通过双计数器模式诊断接口实际可用性
44
-
45
- ---
46
-
47
- ## 2. Demo 五要素规范
48
-
49
- ### ① 测试 Demo 名称
50
-
51
- - 格式:`[功能动词/名词][操作对象][特征/场景]Demo`
52
- - 限制:不超过 20 字
53
- - 避免泛化词语(如"基础Demo"、"测试Demo")
54
-
55
- | 场景 | 推荐名称 |
56
- |------|---------|
57
- | 单一核心功能 | `蓝牙扫描控制Demo` |
58
- | 生命周期管理 | `模块初始化与释放Demo` |
59
- | 配置类接口 | `参数配置与验证Demo` |
60
- | 异步 Promise | `异步数据加载Demo` |
61
- | 事件监听 | `原生事件订阅与回调Demo` |
62
- | 错误处理 | `异常捕获与错误码处理Demo` |
63
- | 多接口组合 | `完整业务流程Demo` |
64
- | React 组件 | `自定义组件渲染与交互Demo` |
65
-
66
- ### ② 测试 Demo 描述
67
-
68
- 模板:
69
- ```
70
- {Demo名称}展示了如何使用 {接口名称} 实现 {功能描述}。
71
- 通过本 Demo,开发者可以了解 {接口的核心用法/参数含义/返回值处理方式}。
72
- [可选:本 Demo 同时涵盖 {其他关联接口},展示 {它们之间的调用关系/业务场景}。]
73
- [标注:本 Demo 针对 HarmonyOS 平台的特性/限制。]
74
- ```
75
-
76
- 要求:2-4 句话,说明功能、目的、覆盖接口,明确标注 HarmonyOS 平台特性。
77
-
78
- ### ③ 测试 Demo 步骤
79
-
80
- 步骤结构模板:
81
- ```
82
- 1. 创建函数式组件 Demo 页面(DemoScreen.tsx),使用 useState 声明所需状态变量
83
- [状态变量列举:const [result, setResult] = useState(''); const [callCount, setCallCount] = useState(0);],
84
- 使用 useEffect 处理组件挂载/卸载逻辑(事件订阅、资源初始化/释放等),
85
- 布局中添加 [UI组件列表:TouchableOpacity 按钮、TextInput 输入框、Text 展示区、ScrollView 列表等]。
86
- 2. [用户操作],触发 `{接口名称}({参数示例})` 调用,
87
- 在 Promise.then() / await 后 / 事件回调中执行 setXxx() 更新状态变量。
88
- 3. 将接口返回值 / 状态变化以 <Text>{value}</Text> 形式展示在 [展示区域名称]。
89
- 4. [下一步操作,如有],验证 [具体行为]。
90
- [可选] 5. 对比 / 补充验证步骤。
91
- ```
92
-
93
- 步骤描述维度要求:
94
-
95
- | 维度 | 要求 | 示例 |
96
- |------|------|------|
97
- | 组件构建 | 说明需要哪些 RN 组件 | "使用 View 布局、TouchableOpacity 按钮、Text 显示结果" |
98
- | 状态声明 | 明确 useState 变量及初始值 | `const [status, setStatus] = useState('未初始化')` |
99
- | 交互触发 | 明确用户操作和调用时机 | "点击'开始扫描'按钮,调用 `BluetoothModule.startScan(5000)`" |
100
- | 参数传递 | 说明传入参数来源/示例值 | "传入 timeout=5000(毫秒)" |
101
- | 状态更新 | 说明如何通过 setXxx() 更新 | "在 .then() 回调中执行 `setResult(JSON.stringify(data))`" |
102
- | 结果展示 | 说明如何在页面显示结果 | "以 `<Text>{result}</Text>` 展示返回数据" |
103
- | 验证方式 | 说明如何判断成功 | "确认 Text 显示有效的设备列表,无崩溃" |
104
- | HarmonyOS 平台说明 | 标注特殊行为或限制 | "本功能在 HarmonyOS 平台验证" |
105
-
106
- ### ④ 测试 Demo 预期结果
107
-
108
- 模板:
109
- ```
110
- 1. [页面/UI 状态]:{可观测的界面变化描述}。
111
- 2. [接口返回值]:{返回值类型/内容/范围} 符合预期。
112
- 3. [功能效果]:{功能方面的可验证效果}。
113
- 4. [异常/边界]:{无异常抛出 / 错误信息正确展示 / Promise reject 被捕获}。
114
- [可选] 5. [平台差异]:{HarmonyOS 平台表现说明}。
115
- ```
116
-
117
- 要求:每条预期结果可观测、可判断,特别标注 HarmonyOS 平台的预期行为。
118
-
119
- ### ⑤ 对应函数接口
120
-
121
- 列出该 Demo 涉及的所有函数/方法/组件名称。
122
-
123
- 格式:
124
- - 函数:`` `funcName(paramType): ReturnType` ``
125
- - 组件:`` `<ComponentName prop={type} />` ``
126
- - 多个接口用换行分隔
127
-
128
- ---
129
-
130
- ## 3. HarmonyOS 可验证性前置规则(强制)
131
-
132
- 在为任何接口编写步骤和预期结果之前,必须先判断:**该接口在 HarmonyOS 设备上能否产生可被用户观测到的输出?**
133
-
134
- > **判断依据**:仅依据 README 文档的「HarmonyOS Support」列标注。不通过源码判断(源码缺失实现可能是适配遗漏)。
135
-
136
- | 情况 | 处理方式 |
137
- |------|----------|
138
- | README 标注 `yes` 或跨平台 | 正常作为主步骤,预期结果描述可观测指标 |
139
- | README 标注 `no` | **排除**该接口,不生成 Demo |
140
- | README 标注 `partially` | 正常作为主步骤,预期结果中标注哪些子功能可用 |
141
- | README 中未列出该接口 | 正常作为主步骤,预期结果描述可观测指标 + 诊断指标(如"若回调未触发,可能为鸿蒙化适配遗漏") |
142
- | README 有接口但无 Support 列 | 正常作为主步骤,预期结果描述可观测指标,建议开发者验证 |
143
- | 接口无任何可观测输出 | 合并到相关流程 Demo 中,通过其他接口的状态变化间接验证 |
144
-
145
- **禁止「死按钮」**:Demo 中每个按钮(每个步骤中调用的接口)必须对应至少一条 UI 上可观测的预期结果。若无法提供,该按钮/步骤必须删除或改为平台限制说明。
146
-
147
- ---
148
-
149
- ## 4. useState 强制规则
150
-
151
- Demo 步骤中包含「计数器(如回调次数、调用次数)」或「状态标志(如是否已初始化)」等运行时变化量时,在步骤或预期结果描述中**必须**注明:
152
-
153
- > **该变量须通过 `setXxx()` 更新**
154
-
155
- 否则 React Native 不会触发重新渲染,计数器将始终显示初始值(如永远显示 0),导致 Demo 验证逻辑完全失效。
156
-
157
- 正确示例:
158
- ```
159
- const [checkCount, setCheckCount] = useState(0);
160
- // 点击按钮时:
161
- setCheckCount(c => c + 1); // ✅ 通过 setter 更新
162
- ```
163
-
164
- ---
165
-
166
- ## 5. 异步回调链双计数器诊断模式(强制)
167
-
168
- 对任何 Demo 中涉及「调用库函数 → 等待 Promise / 监听事件回调」的异步链路,**必须**在 Demo 设计中规划双计数器:
169
-
170
- | 计数器位置 | 变量名建议 | 说明 |
171
- |-----------|----------|------|
172
- | 调用/触发前(在触发代码中) | `xxxCallCount` | 接口调用动作的执行次数(通过 `setXxxCallCount(c => c + 1)` 更新) |
173
- | 回调/resolve 内部 | `xxxCallbackCount` | Promise resolve 或事件回调实际触发的次数(通过 `setXxxCallbackCount(c => c + 1)` 更新) |
174
-
175
- 两个计数器都必须在 Demo 页面的**验证区域**中展示(使用 `<Text>` 组件),且**必须通过 `useState` 的 setter 函数更新**。
176
-
177
- ### 诊断规则
178
-
179
- | 计数器状态 | 诊断结论 |
180
- |-----------|----------|
181
- | `callCount > 0` 且 `callbackCount = 0` | 调用成功但回调未触发,问题在回调注册或原生事件链 |
182
- | `callCount = 0` | 触发代码未执行,问题在 Demo 的触发逻辑 |
183
- | `callCount = callbackCount > 0` | 链路完全正常 |
184
-
185
- ### 步骤写作规范
186
-
187
- ```
188
- 步骤示例:
189
- 1. 在组件中声明计数器:
190
- const [xxxCallCount, setXxxCallCount] = useState(0);
191
- const [xxxCallbackCount, setXxxCallbackCount] = useState(0);
192
- 2. 触发按钮:setXxxCallCount(c => c + 1),然后调用 module.doXxx()
193
- 3. 在 .then() / await 后 / 事件回调中:setXxxCallbackCount(c => c + 1),更新其他 UI 状态
194
- 4. 验证区域展示:
195
- <Text>调用次数: {xxxCallCount}</Text>
196
- <Text>回调次数: {xxxCallbackCount}</Text>
197
- ```
198
-
199
- ---
200
-
201
- ## 6. RN 常用接口调用模式速查
202
-
203
- ### 6.1 接口模式分类总表
204
-
205
- RN 三方库的导出接口并非都是"按钮触发 → 函数调用 → 结果展示"模式。不同接口模式需要不同的 Demo 设计策略:
206
-
207
- | 模式 | 特征 | 调用时机 | 计数器需求 | Demo 步骤要点 |
208
- |------|------|----------|-----------|--------------|
209
- | **NativeModules 方法** | `NativeModules.Xxx.doXxx()` | 用户交互触发 | 双计数器(call + callback) | 按钮触发 → await → 展示结果 |
210
- | **Promise 异步** | `await func()` 返回 Promise | 用户交互触发 | 双计数器(call + callback) | 按钮触发 → await → catch 错误 → 展示 |
211
- | **NativeEventEmitter 事件** | `addListener('event', cb)` | useEffect 注册 | 双计数器(注册 + 回调触发) | useEffect 注册 → 触发事件 → 回调更新 |
212
- | **React 组件事件回调** | `<Comp onEvent={} />` | 渲染时绑定 | 双计数器(渲染 + 回调触发) | 渲染组件 → 触发事件 → 回调更新 |
213
- | **Hook** | `const x = useXxx()` | 组件顶层调用 | **无需双计数器**(同步返回,非异步链路) | 顶层调用 → 渲染时直接展示返回值 |
214
- | **Context Consumer** | `<Context.Consumer>{(val) => ...}</Context.Consumer>` | 渲染时自动消费 | **无需双计数器**(Context 传递,非异步链路) | Provider 包裹 → Consumer 子渲染函数接收值 → 展示 |
215
- | **HOC(高阶组件)** | `withXxx(WrappedComp)` | 模块顶层定义 | 单计数器(验证渲染次数即可) | 定义 HOC → 渲染被包装组件 → 验证注入的 props |
216
- | **常量/变量导出** | `export const X = ...` | 模块加载时求值 | **无需计数器**(静态值,非调用) | 直接读取 → useEffect 中展示 → 对比预期 |
217
- | **Context 对象引用** | `export const Ctx = createContext(...)` | 模块加载时创建 | **无需计数器**(引用比较) | `===` 引用比较 → 展示布尔结果 |
218
- | **废弃别名** | `export const alias = original` | 同底层接口 | 同底层接口模式 | 验证别名与原始接口行为一致 + `@deprecated` 标注 |
219
-
220
- ### 6.2 Hook 模式
221
-
222
- Hook 在组件顶层调用,返回值在渲染阶段即可获取,**不是异步链路**,无需双计数器。
223
-
224
- **步骤范式**:
225
- ```
226
- 1. 在组件顶层调用 Hook:const value = useXxx()
227
- 2. 将返回值直接渲染:<Text>{JSON.stringify(value)}</Text>
228
- 3. [可选] 按钮触发状态变化验证 Hook 响应:setRefreshCount(c => c + 1)
229
- ```
230
-
231
- **示例**:
232
- ```typescript
233
- // Hook 必须在组件顶层调用,不可在事件回调中调用
234
- const insets = useSafeAreaInsets();
235
-
236
- return (
237
- <View>
238
- <Text>insets: {JSON.stringify(insets)}</Text>
239
- </View>
240
- );
241
- ```
242
-
243
- > ⚠️ Hook 不能放在按钮 onPress 回调中,必须在组件函数体顶层调用。
244
-
245
- ### 6.3 Context Consumer 模式
246
-
247
- 使用 React Context 的 Consumer 组件,通过 render props 子渲染函数接收 Context 值。**非异步链路**,无需双计数器。
248
-
249
- **步骤范式**:
250
- ```
251
- 1. 外层用 <Provider> 包裹确保 Context 有值
252
- 2. 使用 <XxxConsumer>{(value) => <Text>{JSON.stringify(value)}</Text>}</XxxConsumer>
253
- 3. 验证 Consumer 子渲染函数接收到的 value 非空
254
- ```
255
-
256
- **示例**:
257
- ```typescript
258
- <SafeAreaProvider>
259
- <SafeAreaConsumer>
260
- {(insets) => <Text>Consumer value: {JSON.stringify(insets)}</Text>}
261
- </SafeAreaConsumer>
262
- </SafeAreaProvider>
263
- ```
264
-
265
- ### 6.4 HOC(高阶组件)模式
266
-
267
- 高阶组件在模块顶层定义,将被包装组件包装后渲染。验证 HOC 注入的 props 是否正确传递。
268
-
269
- **步骤范式**:
270
- ```
271
- 1. 定义被包装组件:function InnerComp(props) { return <Text>{JSON.stringify(props.injected)}</Text> }
272
- 2. 用 HOC 包装:const Wrapped = withXxx(InnerComp)
273
- 3. 在 Provider 内渲染 <Wrapped />
274
- 4. 验证 InnerComp 接收到 HOC 注入的 props
275
- ```
276
-
277
- **示例**:
278
- ```typescript
279
- function InnerComponent({ insets }: { insets: EdgeInsets }) {
280
- return <Text>HOC injected insets: {JSON.stringify(insets)}</Text>;
281
- }
282
- const WrappedComponent = withSafeAreaInsets(InnerComponent);
283
-
284
- // 渲染
285
- <SafeAreaProvider>
286
- <WrappedComponent />
287
- </SafeAreaProvider>
288
- ```
289
-
290
- ### 6.5 常量/变量导出模式
291
-
292
- 模块加载时求值的静态导出值,直接读取即可。**非异步链路,非交互触发**,无需计数器。
293
-
294
- **步骤范式**:
295
- ```
296
- 1. 在 useEffect 中读取常量值(避免渲染期间副作用)
297
- 2. 通过 setXxx() 更新状态展示
298
- 3. 验证返回值符合预期类型和内容
299
- ```
300
-
301
- **示例**:
302
- ```typescript
303
- const [metricsText, setMetricsText] = useState('未获取');
304
-
305
- useEffect(() => {
306
- setMetricsText(initialWindowMetrics ? JSON.stringify(initialWindowMetrics) : 'null');
307
- }, []);
308
-
309
- return <Text>initialWindowMetrics: {metricsText}</Text>;
310
- ```
311
-
312
- ### 6.6 Context 对象引用模式
313
-
314
- 验证两个 Context 对象是否指向同一引用(废弃别名常见场景)。使用 `===` 严格比较。
315
-
316
- **步骤范式**:
317
- ```
318
- 1. 声明状态:const [isSame, setIsSame] = useState(false)
319
- 2. 按钮触发比较:setIsSame(ContextA === ContextB)
320
- 3. 展示布尔结果:<Text>相同引用: {isSame.toString()}</Text>
321
- ```
322
-
323
- **示例**:
324
- ```typescript
325
- const [isSameContext, setIsSameContext] = useState(false);
326
-
327
- const handleVerify = () => {
328
- setIsSameContext(SafeAreaContext === SafeAreaInsetsContext);
329
- };
330
-
331
- return <Text>Context 相同: {isSameContext.toString()}</Text>;
332
- ```
333
-
334
- ### 6.7 废弃别名模式
335
-
336
- `@deprecated` 废弃别名接口的 Demo 设计,核心是验证别名与底层接口行为一致。
337
-
338
- **步骤范式**:
339
- ```
340
- 1. 同时引入废弃别名和非废弃原始接口
341
- 2. 分别调用/使用两者
342
- 3. 对比返回值或行为是否一致
343
- 4. 若为对象引用(Context/变量),用 === 验证同一性
344
- 5. 在 Demo 描述中标注"废弃接口兼容性验证"
345
- ```
346
-
347
- **示例**:
348
- ```typescript
349
- // useSafeArea 是 useSafeAreaInsets 的废弃别名
350
- const insetsFromAlias = useSafeArea();
351
- const insetsFromOriginal = useSafeAreaInsets();
352
-
353
- // 验证返回值一致
354
- <Text>别名返回: {JSON.stringify(insetsFromAlias)}</Text>
355
- <Text>原始返回: {JSON.stringify(insetsFromOriginal)}</Text>
356
- ```
357
-
358
- ### 6.8 NativeModules 调用模式
359
-
360
- ```typescript
361
- import { NativeModules } from 'react-native';
362
- const { XxxModule } = NativeModules;
363
-
364
- // Promise
365
- const result = await XxxModule.someMethod(param);
366
-
367
- // Callback
368
- XxxModule.someMethod(param, (error, result) => { ... });
369
- ```
370
-
371
- ### 6.9 NativeEventEmitter 事件监听模式
372
-
373
- ```typescript
374
- import { NativeModules, NativeEventEmitter } from 'react-native';
375
- const eventEmitter = new NativeEventEmitter(NativeModules.XxxModule);
376
-
377
- // 订阅事件(在 useEffect 中注册)
378
- const subscription = eventEmitter.addListener('eventName', (data) => {
379
- setXxx(data);
380
- setCallbackCount(c => c + 1);
381
- });
382
-
383
- // 取消订阅(在清理函数中)
384
- return () => subscription.remove();
385
- ```
386
-
387
- ### 6.10 async/await Promise 调用模式
388
-
389
- ```typescript
390
- const handlePress = async () => {
391
- setCallCount(c => c + 1);
392
- try {
393
- const result = await SomeModule.doSomething(param);
394
- setResult(JSON.stringify(result));
395
- setCallbackCount(c => c + 1);
396
- } catch (error) {
397
- setErrorMsg((error as Error).message);
398
- }
399
- };
400
- ```
401
-
402
- ### 6.11 React 组件事件回调模式
403
-
404
- ```typescript
405
- <SomeNativeComponent
406
- prop1={value1}
407
- onEvent={(data) => {
408
- setCallbackCount(c => c + 1);
409
- setResult(JSON.stringify(data));
410
- }}
411
- onError={(err) => setErrorMsg(err.message)}
412
- />
413
- ```
1
+ # Demo 设计规则
2
+
3
+ > 本文档详细说明 Demo 的分组原则、五要素规范、平台过滤规则、双计数器模式和 useState 强制规则。
4
+
5
+ ---
6
+
7
+ ## 1. Demo 分组原则
8
+
9
+ ### 原则一:一函数至少一个 Demo
10
+
11
+ 每个**待生成**接口(Phase 4 过滤后)必须被至少一个 Demo 覆盖。
12
+
13
+ - **全量模式**:覆盖所有 HarmonyOS 平台可用的导出函数/方法/组件
14
+ - **增量模式**:仅覆盖 Demo 覆盖率报告中未覆盖的接口
15
+
16
+ ### 原则二:关联接口可合并
17
+
18
+ 满足以下任一条件的接口可合并到同一 Demo:
19
+
20
+ | 合并条件 | 示例 |
21
+ |----------|------|
22
+ | 存在明确的调用依赖关系 | `init()` → `execute()` → `release()` |
23
+ | 共同完成一个完整业务场景 | "创建实例 → 配置参数 → 执行操作 → 获取结果" |
24
+ | 属于同一主题功能簇 | 所有播放控制相关方法 |
25
+ | 一个接口的输出是另一个接口的输入 | `scan()` 返回设备列表 → `connect(deviceId)` 使用列表中的 ID |
26
+ | 事件注册与移除配对 | `addListener()` 与 `removeListener()` |
27
+
28
+ > **增量模式特殊规则**:若未覆盖接口与已覆盖接口存在调用依赖,可将未覆盖接口合并到新 Demo 中独立描述。新 Demo 的步骤应自包含,不依赖已覆盖接口的 Demo 步骤。例如:若 `connect()` 已覆盖但 `writeData()` 未覆盖,`writeData()` 的 Demo 步骤中可包含简化的连接步骤作为前置条件,但重点是 `writeData()` 的验证。
29
+
30
+ ### 原则三:禁止无关合并
31
+
32
+ 不同功能方向、无调用关系的接口不得强行合并到同一 Demo。
33
+
34
+ ### 原则四:HarmonyOS 平台过滤
35
+
36
+ > ⚠️ **过滤依据**:仅依据 README 文档的「HarmonyOS Support」列标注。**禁止**通过源码(`Platform.OS` 分支、TurboModule Spec、原生实现是否存在)进行过滤。源码中缺失鸿蒙实现可能是适配遗漏,需通过 Demo 验证发现。
37
+
38
+ - **排除 README 标注 `no` 的接口**:README「HarmonyOS Support」列明确标注为 `no` 的接口,代表鸿蒙化维护者已确认不支持,不生成 Demo
39
+ - **保留 README 未列出的接口**:上游新增但鸿蒙化 README 未收录的接口,视为无平台标注,默认跨平台,生成 Demo 并在描述中标注"建议验证 HarmonyOS 平台实际可用性"
40
+ - **保留无平台标注的接口**:README 有接口但无「HarmonyOS Support」列时,默认视为跨平台,生成 Demo 但建议验证
41
+ - **优先生成 README 标注 `yes` 的接口**:标记为 "跨平台"、"通用"、"Cross Platform"、"HarmonyOS 支持" 的接口优先生成 Demo
42
+ - **平台差异说明**:在相关 Demo 步骤中标注 "本功能在 HarmonyOS 平台验证"
43
+ - **适配遗漏诊断**:对于 README 未列出的接口,在预期结果中设计诊断指标(如"若回调未触发,可能为鸿蒙化适配遗漏"),通过双计数器模式诊断接口实际可用性
44
+
45
+ ---
46
+
47
+ ## 2. Demo 五要素规范
48
+
49
+ ### ① 测试 Demo 名称
50
+
51
+ - 格式:`[功能动词/名词][操作对象][特征/场景]Demo`
52
+ - 限制:不超过 20 字
53
+ - 避免泛化词语(如"基础Demo"、"测试Demo")
54
+
55
+ | 场景 | 推荐名称 |
56
+ |------|---------|
57
+ | 单一核心功能 | `蓝牙扫描控制Demo` |
58
+ | 生命周期管理 | `模块初始化与释放Demo` |
59
+ | 配置类接口 | `参数配置与验证Demo` |
60
+ | 异步 Promise | `异步数据加载Demo` |
61
+ | 事件监听 | `原生事件订阅与回调Demo` |
62
+ | 错误处理 | `异常捕获与错误码处理Demo` |
63
+ | 多接口组合 | `完整业务流程Demo` |
64
+ | React 组件 | `自定义组件渲染与交互Demo` |
65
+
66
+ ### ② 测试 Demo 描述
67
+
68
+ 模板:
69
+ ```
70
+ {Demo名称}展示了如何使用 {接口名称} 实现 {功能描述}。
71
+ 通过本 Demo,开发者可以了解 {接口的核心用法/参数含义/返回值处理方式}。
72
+ [可选:本 Demo 同时涵盖 {其他关联接口},展示 {它们之间的调用关系/业务场景}。]
73
+ [标注:本 Demo 针对 HarmonyOS 平台的特性/限制。]
74
+ ```
75
+
76
+ 要求:2-4 句话,说明功能、目的、覆盖接口,明确标注 HarmonyOS 平台特性。
77
+
78
+ ### ③ 测试 Demo 步骤
79
+
80
+ 步骤结构模板:
81
+ ```
82
+ 1. 创建函数式组件 Demo 页面(DemoScreen.tsx),使用 useState 声明所需状态变量
83
+ [状态变量列举:const [result, setResult] = useState(''); const [callCount, setCallCount] = useState(0);],
84
+ 使用 useEffect 处理组件挂载/卸载逻辑(事件订阅、资源初始化/释放等),
85
+ 布局中添加 [UI组件列表:TouchableOpacity 按钮、TextInput 输入框、Text 展示区、ScrollView 列表等]。
86
+ 2. [用户操作],触发 `{接口名称}({参数示例})` 调用,
87
+ 在 Promise.then() / await 后 / 事件回调中执行 setXxx() 更新状态变量。
88
+ 3. 将接口返回值 / 状态变化以 <Text>{value}</Text> 形式展示在 [展示区域名称]。
89
+ 4. [下一步操作,如有],验证 [具体行为]。
90
+ [可选] 5. 对比 / 补充验证步骤。
91
+ ```
92
+
93
+ 步骤描述维度要求:
94
+
95
+ | 维度 | 要求 | 示例 |
96
+ |------|------|------|
97
+ | 组件构建 | 说明需要哪些 RN 组件 | "使用 View 布局、TouchableOpacity 按钮、Text 显示结果" |
98
+ | 状态声明 | 明确 useState 变量及初始值 | `const [status, setStatus] = useState('未初始化')` |
99
+ | 交互触发 | 明确用户操作和调用时机 | "点击'开始扫描'按钮,调用 `BluetoothModule.startScan(5000)`" |
100
+ | 参数传递 | 说明传入参数来源/示例值 | "传入 timeout=5000(毫秒)" |
101
+ | 状态更新 | 说明如何通过 setXxx() 更新 | "在 .then() 回调中执行 `setResult(JSON.stringify(data))`" |
102
+ | 结果展示 | 说明如何在页面显示结果 | "以 `<Text>{result}</Text>` 展示返回数据" |
103
+ | 验证方式 | 说明如何判断成功 | "确认 Text 显示有效的设备列表,无崩溃" |
104
+ | HarmonyOS 平台说明 | 标注特殊行为或限制 | "本功能在 HarmonyOS 平台验证" |
105
+
106
+ ### ④ 测试 Demo 预期结果
107
+
108
+ 模板:
109
+ ```
110
+ 1. [页面/UI 状态]:{可观测的界面变化描述}。
111
+ 2. [接口返回值]:{返回值类型/内容/范围} 符合预期。
112
+ 3. [功能效果]:{功能方面的可验证效果}。
113
+ 4. [异常/边界]:{无异常抛出 / 错误信息正确展示 / Promise reject 被捕获}。
114
+ [可选] 5. [平台差异]:{HarmonyOS 平台表现说明}。
115
+ ```
116
+
117
+ 要求:每条预期结果可观测、可判断,特别标注 HarmonyOS 平台的预期行为。
118
+
119
+ ### ⑤ 对应函数接口
120
+
121
+ 列出该 Demo 涉及的所有函数/方法/组件名称。
122
+
123
+ 格式:
124
+ - 函数:`` `funcName(paramType): ReturnType` ``
125
+ - 组件:`` `<ComponentName prop={type} />` ``
126
+ - 多个接口用换行分隔
127
+
128
+ ---
129
+
130
+ ## 3. HarmonyOS 可验证性前置规则(强制)
131
+
132
+ 在为任何接口编写步骤和预期结果之前,必须先判断:**该接口在 HarmonyOS 设备上能否产生可被用户观测到的输出?**
133
+
134
+ > **判断依据**:仅依据 README 文档的「HarmonyOS Support」列标注。不通过源码判断(源码缺失实现可能是适配遗漏)。
135
+
136
+ | 情况 | 处理方式 |
137
+ |------|----------|
138
+ | README 标注 `yes` 或跨平台 | 正常作为主步骤,预期结果描述可观测指标 |
139
+ | README 标注 `no` | **排除**该接口,不生成 Demo |
140
+ | README 标注 `partially` | 正常作为主步骤,预期结果中标注哪些子功能可用 |
141
+ | README 中未列出该接口 | 正常作为主步骤,预期结果描述可观测指标 + 诊断指标(如"若回调未触发,可能为鸿蒙化适配遗漏") |
142
+ | README 有接口但无 Support 列 | 正常作为主步骤,预期结果描述可观测指标,建议开发者验证 |
143
+ | 接口无任何可观测输出 | 合并到相关流程 Demo 中,通过其他接口的状态变化间接验证 |
144
+
145
+ **禁止「死按钮」**:Demo 中每个按钮(每个步骤中调用的接口)必须对应至少一条 UI 上可观测的预期结果。若无法提供,该按钮/步骤必须删除或改为平台限制说明。
146
+
147
+ ---
148
+
149
+ ## 4. useState 强制规则
150
+
151
+ Demo 步骤中包含「计数器(如回调次数、调用次数)」或「状态标志(如是否已初始化)」等运行时变化量时,在步骤或预期结果描述中**必须**注明:
152
+
153
+ > **该变量须通过 `setXxx()` 更新**
154
+
155
+ 否则 React Native 不会触发重新渲染,计数器将始终显示初始值(如永远显示 0),导致 Demo 验证逻辑完全失效。
156
+
157
+ 正确示例:
158
+ ```
159
+ const [checkCount, setCheckCount] = useState(0);
160
+ // 点击按钮时:
161
+ setCheckCount(c => c + 1); // ✅ 通过 setter 更新
162
+ ```
163
+
164
+ ---
165
+
166
+ ## 5. 异步回调链双计数器诊断模式(强制)
167
+
168
+ 对任何 Demo 中涉及「调用库函数 → 等待 Promise / 监听事件回调」的异步链路,**必须**在 Demo 设计中规划双计数器:
169
+
170
+ | 计数器位置 | 变量名建议 | 说明 |
171
+ |-----------|----------|------|
172
+ | 调用/触发前(在触发代码中) | `xxxCallCount` | 接口调用动作的执行次数(通过 `setXxxCallCount(c => c + 1)` 更新) |
173
+ | 回调/resolve 内部 | `xxxCallbackCount` | Promise resolve 或事件回调实际触发的次数(通过 `setXxxCallbackCount(c => c + 1)` 更新) |
174
+
175
+ 两个计数器都必须在 Demo 页面的**验证区域**中展示(使用 `<Text>` 组件),且**必须通过 `useState` 的 setter 函数更新**。
176
+
177
+ ### 诊断规则
178
+
179
+ | 计数器状态 | 诊断结论 |
180
+ |-----------|----------|
181
+ | `callCount > 0` 且 `callbackCount = 0` | 调用成功但回调未触发,问题在回调注册或原生事件链 |
182
+ | `callCount = 0` | 触发代码未执行,问题在 Demo 的触发逻辑 |
183
+ | `callCount = callbackCount > 0` | 链路完全正常 |
184
+
185
+ ### 步骤写作规范
186
+
187
+ ```
188
+ 步骤示例:
189
+ 1. 在组件中声明计数器:
190
+ const [xxxCallCount, setXxxCallCount] = useState(0);
191
+ const [xxxCallbackCount, setXxxCallbackCount] = useState(0);
192
+ 2. 触发按钮:setXxxCallCount(c => c + 1),然后调用 module.doXxx()
193
+ 3. 在 .then() / await 后 / 事件回调中:setXxxCallbackCount(c => c + 1),更新其他 UI 状态
194
+ 4. 验证区域展示:
195
+ <Text>调用次数: {xxxCallCount}</Text>
196
+ <Text>回调次数: {xxxCallbackCount}</Text>
197
+ ```
198
+
199
+ ---
200
+
201
+ ## 6. RN 常用接口调用模式速查
202
+
203
+ ### 6.1 接口模式分类总表
204
+
205
+ RN 三方库的导出接口并非都是"按钮触发 → 函数调用 → 结果展示"模式。不同接口模式需要不同的 Demo 设计策略:
206
+
207
+ | 模式 | 特征 | 调用时机 | 计数器需求 | Demo 步骤要点 |
208
+ |------|------|----------|-----------|--------------|
209
+ | **NativeModules 方法** | `NativeModules.Xxx.doXxx()` | 用户交互触发 | 双计数器(call + callback) | 按钮触发 → await → 展示结果 |
210
+ | **Promise 异步** | `await func()` 返回 Promise | 用户交互触发 | 双计数器(call + callback) | 按钮触发 → await → catch 错误 → 展示 |
211
+ | **NativeEventEmitter 事件** | `addListener('event', cb)` | useEffect 注册 | 双计数器(注册 + 回调触发) | useEffect 注册 → 触发事件 → 回调更新 |
212
+ | **React 组件事件回调** | `<Comp onEvent={} />` | 渲染时绑定 | 双计数器(渲染 + 回调触发) | 渲染组件 → 触发事件 → 回调更新 |
213
+ | **Hook** | `const x = useXxx()` | 组件顶层调用 | **无需双计数器**(同步返回,非异步链路) | 顶层调用 → 渲染时直接展示返回值 |
214
+ | **Context Consumer** | `<Context.Consumer>{(val) => ...}</Context.Consumer>` | 渲染时自动消费 | **无需双计数器**(Context 传递,非异步链路) | Provider 包裹 → Consumer 子渲染函数接收值 → 展示 |
215
+ | **HOC(高阶组件)** | `withXxx(WrappedComp)` | 模块顶层定义 | 单计数器(验证渲染次数即可) | 定义 HOC → 渲染被包装组件 → 验证注入的 props |
216
+ | **常量/变量导出** | `export const X = ...` | 模块加载时求值 | **无需计数器**(静态值,非调用) | 直接读取 → useEffect 中展示 → 对比预期 |
217
+ | **Context 对象引用** | `export const Ctx = createContext(...)` | 模块加载时创建 | **无需计数器**(引用比较) | `===` 引用比较 → 展示布尔结果 |
218
+ | **废弃别名** | `export const alias = original` | 同底层接口 | 同底层接口模式 | 验证别名与原始接口行为一致 + `@deprecated` 标注 |
219
+
220
+ ### 6.2 Hook 模式
221
+
222
+ Hook 在组件顶层调用,返回值在渲染阶段即可获取,**不是异步链路**,无需双计数器。
223
+
224
+ **步骤范式**:
225
+ ```
226
+ 1. 在组件顶层调用 Hook:const value = useXxx()
227
+ 2. 将返回值直接渲染:<Text>{JSON.stringify(value)}</Text>
228
+ 3. [可选] 按钮触发状态变化验证 Hook 响应:setRefreshCount(c => c + 1)
229
+ ```
230
+
231
+ **示例**:
232
+ ```typescript
233
+ // Hook 必须在组件顶层调用,不可在事件回调中调用
234
+ const insets = useSafeAreaInsets();
235
+
236
+ return (
237
+ <View>
238
+ <Text>insets: {JSON.stringify(insets)}</Text>
239
+ </View>
240
+ );
241
+ ```
242
+
243
+ > ⚠️ Hook 不能放在按钮 onPress 回调中,必须在组件函数体顶层调用。
244
+
245
+ ### 6.3 Context Consumer 模式
246
+
247
+ 使用 React Context 的 Consumer 组件,通过 render props 子渲染函数接收 Context 值。**非异步链路**,无需双计数器。
248
+
249
+ **步骤范式**:
250
+ ```
251
+ 1. 外层用 <Provider> 包裹确保 Context 有值
252
+ 2. 使用 <XxxConsumer>{(value) => <Text>{JSON.stringify(value)}</Text>}</XxxConsumer>
253
+ 3. 验证 Consumer 子渲染函数接收到的 value 非空
254
+ ```
255
+
256
+ **示例**:
257
+ ```typescript
258
+ <SafeAreaProvider>
259
+ <SafeAreaConsumer>
260
+ {(insets) => <Text>Consumer value: {JSON.stringify(insets)}</Text>}
261
+ </SafeAreaConsumer>
262
+ </SafeAreaProvider>
263
+ ```
264
+
265
+ ### 6.4 HOC(高阶组件)模式
266
+
267
+ 高阶组件在模块顶层定义,将被包装组件包装后渲染。验证 HOC 注入的 props 是否正确传递。
268
+
269
+ **步骤范式**:
270
+ ```
271
+ 1. 定义被包装组件:function InnerComp(props) { return <Text>{JSON.stringify(props.injected)}</Text> }
272
+ 2. 用 HOC 包装:const Wrapped = withXxx(InnerComp)
273
+ 3. 在 Provider 内渲染 <Wrapped />
274
+ 4. 验证 InnerComp 接收到 HOC 注入的 props
275
+ ```
276
+
277
+ **示例**:
278
+ ```typescript
279
+ function InnerComponent({ insets }: { insets: EdgeInsets }) {
280
+ return <Text>HOC injected insets: {JSON.stringify(insets)}</Text>;
281
+ }
282
+ const WrappedComponent = withSafeAreaInsets(InnerComponent);
283
+
284
+ // 渲染
285
+ <SafeAreaProvider>
286
+ <WrappedComponent />
287
+ </SafeAreaProvider>
288
+ ```
289
+
290
+ ### 6.5 常量/变量导出模式
291
+
292
+ 模块加载时求值的静态导出值,直接读取即可。**非异步链路,非交互触发**,无需计数器。
293
+
294
+ **步骤范式**:
295
+ ```
296
+ 1. 在 useEffect 中读取常量值(避免渲染期间副作用)
297
+ 2. 通过 setXxx() 更新状态展示
298
+ 3. 验证返回值符合预期类型和内容
299
+ ```
300
+
301
+ **示例**:
302
+ ```typescript
303
+ const [metricsText, setMetricsText] = useState('未获取');
304
+
305
+ useEffect(() => {
306
+ setMetricsText(initialWindowMetrics ? JSON.stringify(initialWindowMetrics) : 'null');
307
+ }, []);
308
+
309
+ return <Text>initialWindowMetrics: {metricsText}</Text>;
310
+ ```
311
+
312
+ ### 6.6 Context 对象引用模式
313
+
314
+ 验证两个 Context 对象是否指向同一引用(废弃别名常见场景)。使用 `===` 严格比较。
315
+
316
+ **步骤范式**:
317
+ ```
318
+ 1. 声明状态:const [isSame, setIsSame] = useState(false)
319
+ 2. 按钮触发比较:setIsSame(ContextA === ContextB)
320
+ 3. 展示布尔结果:<Text>相同引用: {isSame.toString()}</Text>
321
+ ```
322
+
323
+ **示例**:
324
+ ```typescript
325
+ const [isSameContext, setIsSameContext] = useState(false);
326
+
327
+ const handleVerify = () => {
328
+ setIsSameContext(SafeAreaContext === SafeAreaInsetsContext);
329
+ };
330
+
331
+ return <Text>Context 相同: {isSameContext.toString()}</Text>;
332
+ ```
333
+
334
+ ### 6.7 废弃别名模式
335
+
336
+ `@deprecated` 废弃别名接口的 Demo 设计,核心是验证别名与底层接口行为一致。
337
+
338
+ **步骤范式**:
339
+ ```
340
+ 1. 同时引入废弃别名和非废弃原始接口
341
+ 2. 分别调用/使用两者
342
+ 3. 对比返回值或行为是否一致
343
+ 4. 若为对象引用(Context/变量),用 === 验证同一性
344
+ 5. 在 Demo 描述中标注"废弃接口兼容性验证"
345
+ ```
346
+
347
+ **示例**:
348
+ ```typescript
349
+ // useSafeArea 是 useSafeAreaInsets 的废弃别名
350
+ const insetsFromAlias = useSafeArea();
351
+ const insetsFromOriginal = useSafeAreaInsets();
352
+
353
+ // 验证返回值一致
354
+ <Text>别名返回: {JSON.stringify(insetsFromAlias)}</Text>
355
+ <Text>原始返回: {JSON.stringify(insetsFromOriginal)}</Text>
356
+ ```
357
+
358
+ ### 6.8 NativeModules 调用模式
359
+
360
+ ```typescript
361
+ import { NativeModules } from 'react-native';
362
+ const { XxxModule } = NativeModules;
363
+
364
+ // Promise
365
+ const result = await XxxModule.someMethod(param);
366
+
367
+ // Callback
368
+ XxxModule.someMethod(param, (error, result) => { ... });
369
+ ```
370
+
371
+ ### 6.9 NativeEventEmitter 事件监听模式
372
+
373
+ ```typescript
374
+ import { NativeModules, NativeEventEmitter } from 'react-native';
375
+ const eventEmitter = new NativeEventEmitter(NativeModules.XxxModule);
376
+
377
+ // 订阅事件(在 useEffect 中注册)
378
+ const subscription = eventEmitter.addListener('eventName', (data) => {
379
+ setXxx(data);
380
+ setCallbackCount(c => c + 1);
381
+ });
382
+
383
+ // 取消订阅(在清理函数中)
384
+ return () => subscription.remove();
385
+ ```
386
+
387
+ ### 6.10 async/await Promise 调用模式
388
+
389
+ ```typescript
390
+ const handlePress = async () => {
391
+ setCallCount(c => c + 1);
392
+ try {
393
+ const result = await SomeModule.doSomething(param);
394
+ setResult(JSON.stringify(result));
395
+ setCallbackCount(c => c + 1);
396
+ } catch (error) {
397
+ setErrorMsg((error as Error).message);
398
+ }
399
+ };
400
+ ```
401
+
402
+ ### 6.11 React 组件事件回调模式
403
+
404
+ ```typescript
405
+ <SomeNativeComponent
406
+ prop1={value1}
407
+ onEvent={(data) => {
408
+ setCallbackCount(c => c + 1);
409
+ setResult(JSON.stringify(data));
410
+ }}
411
+ onError={(err) => setErrorMsg(err.message)}
412
+ />
413
+ ```