@ohos-cpf/3rdloop 0.0.2 → 0.0.4

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 +290 -244
  2. package/bin/3rdloop.mjs +46 -46
  3. package/lib/cli.js +781 -781
  4. package/lib/config-cmd.js +451 -451
  5. package/lib/config.js +318 -318
  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 +279 -279
  14. package/lib/workflow.js +308 -308
  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 -275
  33. package/vendor/Server/CLI/deveco-code/index.js +71 -71
  34. package/vendor/Server/CLI/deveco-code.js +5 -5
  35. package/vendor/Server/CLI/opencode/index.js +817 -818
  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 -203
  80. package/vendor/Server/Routes/sse/SseHub.js +308 -308
  81. package/vendor/Server/Skills/acceptance-check/SKILL.md +191 -191
  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 -70
  85. package/vendor/Server/Skills/arkts-code-check/SKILL.md +320 -320
  86. package/vendor/Server/Skills/arkts-code-check/references/CODE_CHECK_GUIDE.md +210 -210
  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 -233
  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 +192 -192
  393. package/vendor/Server/Agent/SkillSelector/types.js +0 -63
@@ -1,684 +1,684 @@
1
- # C++ TurboModule 层一致性检视指南
2
-
3
- 本指南定义 RN 鸿蒙化一致性检视中 **C++ TurboModule 层**(TurboModuleFactoryDelegate、TurboModule JSIBinder)的检视规范,确保 AI Agent 能系统性地读取和分析 C++ TurboModule 代码,检测 TurboModule 注册缺失、方法绑定不完整等问题。
4
-
5
- > 📖 **ArkTS TurboModule 层检视**(方法实现、Stub 检测、常量导出、回调逻辑等)已独立为 [ARKTS_TURBOMODULE_CHECK_GUIDE.md](ARKTS_TURBOMODULE_CHECK_GUIDE.md),本指南仅覆盖 C++ 层。
6
-
7
- ---
8
-
9
- ## 1. 适用条件与前置依赖
10
-
11
- ### 1.1 适用条件
12
-
13
- 当 `harmony/<module>/src/main/cpp/` 目录存在 TurboModule 相关文件时,必须执行本指南的检视流程。判定条件:
14
-
15
- | 条件 | 判定 |
16
- |------|------|
17
- | `generated/RNOH/generated/turbo_modules/` 目录存在 | ✅ Codegen TurboModule(必须检视) |
18
- | `cpp/` 下存在 `*TurboModule*FactoryDelegate*` 文件 | ✅ Legacy TurboModule(必须检视) |
19
- | 以上均不存在 | ⚠️ 无 TurboModule C++ 层,跳过本指南 |
20
-
21
- > 📖 **ArkTS TurboModule 实现检视**:当 `harmony/<module>/src/main/ets/*TurboModule.ets` 存在时,需额外执行 [ARKTS_TURBOMODULE_CHECK_GUIDE.md](ARKTS_TURBOMODULE_CHECK_GUIDE.md)。
22
-
23
- ### 1.2 前置依赖
24
-
25
- - Phase 0 中已定位的 TurboModule 名(从 Package 或 JS Spec 提取)
26
- - JS 层 TurboModule Spec 定义(`NativeRNCWebViewModule.ts` 等文件)
27
-
28
- ---
29
-
30
- ## 2. 文件定位与读取
31
-
32
- ### 2.1 TurboModuleFactoryDelegate 定位
33
-
34
- | 模式 | 文件位置 | 说明 |
35
- |------|----------|------|
36
- | Codegen | `generated/RNOH/generated/BaseReactNative*Package.h` 中的 `TurboModuleFactoryDelegate` 类 | 自动生成,包含所有 TurboModule 名 |
37
- | Legacy | `cpp/*TurboModuleFactoryDelegate.h` 或 `*Package.h/cpp` 中手写的 TurboModule 工厂 | 手动实现,需逐条件读取 |
38
-
39
- **必须读取的内容**:
40
-
41
- ```
42
- 1. createTurboModule(ctx, name) 方法
43
- → 提取所有 if (name == "TurboModule名") 条件
44
- → 每个条件对应一个注册的 TurboModule
45
-
46
- 2. 每个 TurboModule 的构造方式
47
- → std::make_shared<XxxTurboModule>(ctx, name)
48
- → 对应 ArkTS TurboModule 实现类
49
- ```
50
-
51
- **TurboModule 注册提取模板**:
52
-
53
- ```markdown
54
- | # | TurboModule 名 | C++ FactoryDelegate 注册 | C++ 文件:行号 | JS Spec 注册名 | 状态 |
55
- |---|--------------|------------------------|-------------|--------------|------|
56
- | 1 | `RNCWebViewModule` | ✅ if (name == "RNCWebViewModule") | `BaseReactNativeWebviewPackage.h:22` | `RNCWebViewModule` ✅ | ✅ 一致 |
57
- | 2 | `AIRMapManager` | ✅ if (name == "AIRMapManager") | `MapsPackage.h:18` | `AIRMapManager` ✅ | ✅ 一致 |
58
- ```
59
-
60
- > 📖 **ArkTS TurboModule 类名与 NAME 常量对比**详见 [ARKTS_TURBOMODULE_CHECK_GUIDE.md](ARKTS_TURBOMODULE_CHECK_GUIDE.md) 第 2.2 维度 A。
61
-
62
- ### 2.2 TurboModule JSIBinder 定位与读取
63
-
64
- | 模式 | 文件位置 |
65
- |------|----------|
66
- | Codegen | `generated/RNOH/generated/turbo_modules/TurboModuleNameJSIBinder.h`(若存在) |
67
- | Legacy | `cpp/TurboModuleNameJSIBinder.h` |
68
-
69
- **必须读取的内容**:
70
-
71
- ```
72
- 1. createJSIBinder() 方法
73
- → 提取所有方法名的 JSI HostFunction 注册
74
- → 每个方法对应一个 JS→C++ 的方法桥接
75
-
76
- 2. 方法签名
77
- → 提取每个 HostFunction 的参数数量和类型
78
- → 与 JS Spec 的方法签名对比
79
- ```
80
-
81
- > **注意**:部分 Codegen TurboModule 仅在 `turbo_modules/TurboModuleName.h` 中定义类声明,实际方法绑定在 `TurboModuleName.cpp` 中实现。需同时读取 `.h` 和 `.cpp` 文件。
82
-
83
- ### 2.3 ArkTS TurboModule generated 类型与实现
84
-
85
- > 📖 **ArkTS TurboModule 实现的完整检视流程**(generated Spec 类型读取、ArkTS 实现类读取、方法实现完整性、Stub 检测、常量导出、回调逻辑)已独立为 [ARKTS_TURBOMODULE_CHECK_GUIDE.md](ARKTS_TURBOMODULE_CHECK_GUIDE.md) 第 2 节。
86
-
87
- 本指南仅提取 C++→ArkTS 映射所需的关键信息:
88
-
89
- **C++ FactoryDelegate → ArkTS TurboModule 类映射**:
90
-
91
- ```
92
- 1. 从 C++ FactoryDelegate 的 createTurboModule() 方法中提取每个 TurboModule 的构造类名
93
- → std::make_shared<XxxTurboModule>(ctx, name) 中的 XxxTurboModule 类名
94
- → 此类名对应 ArkTS TurboModule 实现类(需在 ArkTS 层确认)
95
-
96
- 2. TurboModule 注册名→ArkTS NAME 常量映射
97
- → C++ if (name == "RNCWebViewModule") 对应 ArkTS TM.RNCWebViewModule.NAME
98
- → 需在 ArkTS 层确认 NAME 常量值是否与 C++ 注册名一致
99
- ```
100
-
101
- ---
102
-
103
- ## 3. 检视项与扣分规则
104
-
105
- > 本指南覆盖 `cppTM` 类型实体,检视项按三个关键检查点组织:**函数签名、返回值、实现逻辑**。每个检查点覆盖三个检视维度:**①契约一致性**、**②平台实现差异**、**③架构桥接一致性**。
106
-
107
- ### 3.1 检查点:函数签名(方法名、参数、注册名一致性)
108
-
109
- #### 检查项概要
110
-
111
- | 维度 | # | 检查项 | 致命度 |
112
- |------|---|--------|--------|
113
- | ①契约一致性 | 1 | TurboModule 名一致性 | 中等 |
114
- | ①契约一致性 | 2 | 方法名一致性 | 严重 |
115
- | ①契约一致性 | 3 | 方法存在性 | 致命 |
116
- | ①契约一致性 | 4 | 参数数量 | 致命 |
117
- | ①契约一致性 | 5 | 参数类型 | 致命 |
118
- | ①契约一致性 | 6 | 参数顺序 | 中等 |
119
- | ②平台实现差异 | 7 | 方法签名 vs Android | — |
120
- | ②平台实现差异 | 8 | 方法签名 vs iOS | — |
121
- | ③架构桥接一致性 | 9 | TurboModule 注册完整性 | 致命 |
122
-
123
- #### ①契约一致性
124
-
125
- ##### 检查项 1:TurboModule 名一致性
126
-
127
- - **检查项**:TurboModule 名一致性
128
- - **特征检索方式**:
129
- - C++ FactoryDelegate:grep `if (name == "XXX")` 或 `if (name ==` 于 `*Package.h`、`*TurboModuleFactoryDelegate.h/cpp`
130
- - JS Spec:grep `TurboModuleRegistry.getEnforcing` 于 `*.ts` Spec 文件
131
- - ArkTS:grep `NAME` 常量于 `*TurboModule.ets`(参考 [ARKTS_TURBOMODULE_CHECK_GUIDE.md](ARKTS_TURBOMODULE_CHECK_GUIDE.md))
132
- - **检视步骤**:
133
- 1. 读取 C++ FactoryDelegate.h/cpp 文件,定位 `createTurboModule(ctx, name)` 方法,提取所有 `if (name == "TurboModule名")` 条件 → 得到 C++ 注册名列表
134
- 2. 读取 JS Spec 文件,提取所有 `TurboModuleRegistry.getEnforcing<Spec>('模块名')` 调用 → 得到 JS 注册名列表
135
- 3. 读取 ArkTS TurboModule.ets,提取 `NAME` 常量值(如 `static readonly NAME = 'RNCWebViewModule'`) → 得到 ArkTS NAME 列表
136
- 4. 以 JS Spec 注册名为基准,逐一对比 C++ 注册名和 ArkTS NAME 常量
137
- 5. **判定规则**:三层注册名必须完全一致(大小写敏感);C++ 缺失注册名 → 致命问题归入检查项 9;JS Spec 缺失 → 标记为 JS 层遗漏;ArkTS NAME 不一致 → 归入 ArkTS 检视
138
- - **扣分规则**:不一致扣 5 分/个
139
- - **输出格式**:
140
-
141
- ```markdown
142
- | # | TurboModule 名 | C++ FactoryDelegate 注册名 | JS Spec 注册名 | ArkTS NAME 常量 | C++ 文件:行号 | JS Spec 文件:行号 | 状态 | 扣分 |
143
- |---|--------------|------------------------|--------------|--------------|-------------|-------------|------|------|
144
- | 1 | {TM名} | {if(name=="XXX")提取值} | {getEnforcing提取值} | {NAME常量值} | {文件:行号} | {文件:行号} | ✅一致 / ❌不一致 | {扣分} |
145
- ```
146
-
147
- ##### 检查项 2:方法名一致性
148
-
149
- - **检查项**:方法名一致性(C++ JSIBinder HostFunction 方法名 vs JS Spec 方法名)
150
- - **特征检索方式**:
151
- - C++ JSIBinder:grep `HostFunction` 或 `obj.setProperty(rt,` 于 `*JSIBinder.h/cpp`
152
- - JS Spec:读取 Spec 接口定义,提取所有方法名
153
- - **检视步骤**:
154
- 1. 读取 TurboModule JSIBinder.h/cpp 文件,定位 `createJSIBinder()` 方法,提取所有 `obj.setProperty(rt, "methodName", ...)` 注册 → 得到 C++ 方法名列表
155
- 2. 读取 JS Spec 文件,提取 Spec 接口中所有方法定义 → 得到 JS Spec 方法名列表
156
- 3. 以 JS Spec 方法名列表为基准,逐一检查 C++ JSIBinder 中是否存在同名 HostFunction 注册
157
- 4. **判定规则**:JS Spec 有但 C++ JSIBinder 无 → 方法缺失(归入检查项 3);C++ JSIBinder 有但 JS Spec 无 → C++ 多余绑定(标记为冗余);方法名拼写不一致 → 方法名不匹配
158
- - **扣分规则**:C++ JSIBinder 方法名不匹配扣 8 分/个
159
- - **输出格式**:
160
-
161
- ```markdown
162
- | # | 方法名 | JS Spec 方法名 | C++ JSIBinder 方法名 | C++ 文件:行号 | 状态 | 扣分 |
163
- |---|--------|-------------|-------------------|-------------|------|------|
164
- | 1 | {方法名} | {Spec中的方法名} | {JSIBinder中的方法名} | {文件:行号} | ✅一致 / ❌不匹配 | {扣分} |
165
- ```
166
-
167
- ##### 检查项 3:方法存在性(方法 JSI 绑定完整性)
168
-
169
- - **检查项**:JS Spec 方法是否在 C++ JSIBinder 中有 HostFunction 注册
170
- - **特征检索方式**:同检查项 2;在文档中搜索不支持标注
171
- - **检视步骤**:
172
- 1. 读取 JS Spec 文件,提取所有方法名 → 得到 JS Spec 完整方法列表
173
- 2. 读取 C++ JSIBinder.h/cpp,提取所有 `obj.setProperty(rt, "methodName", ...)` → 得到 C++ 已绑定方法列表
174
- 3. 逐一对比:对每个 JS Spec 方法,检查 C++ JSIBinder 中是否存在对应的 HostFunction 注册
175
- 4. **🟢 豁免检查(优先级高于扣分)**:对每个缺失的方法,检查文档是否标注不支持(接口规格说明、OHOS README、源码注释)
176
- 5. **判定规则**:
177
- - 🟢 **文档已标注不支持** → 豁免,0分,标注"🟢 文档标注不支持(来源:文件:行号)"
178
- - ❌ **文档未标注不支持** → 方法绑定缺失(致命),扣 10 分/个
179
- - **扣分规则**:C++ JSIBinder 方法缺失扣 10 分/个;文档标注不支持→豁免0分(不计入致命问题计数)
180
- - **输出格式**:
181
-
182
- ```markdown
183
- | # | 方法名 | JS Spec 定义 | C++ JSIBinder 绑定 | 文档标注不支持 | 文档来源 | 绑定状态 | 扣分 |
184
- |---|--------|-------------|------------------|--------------|---------|---------|------|
185
- | 1 | {方法名} | ✅ {Spec文件:行号} | ✅ {JSIBinder文件:行号} | — | — | ✅已绑定 | 0 |
186
- | 2 | `clearFormData` | ✅ | ❌ 无绑定 | ✅ Android only | README.md:380 | 🟢 豁免不扣分 | 0 |
187
- | 3 | {方法名} | ✅ | ❌ 无绑定 | ❌ 无标注 | — | ❌缺失 | -10 |
188
- ```
189
-
190
- ##### 检查项 4:参数数量
191
-
192
- - **检查项**:JS Spec 参数数量 vs C++ JSIBinder 参数数量
193
- - **特征检索方式**:
194
- - C++ JSIBinder:在 HostFunction lambda 中计数 `args[n]` 或 `argv[n]` 访问
195
- - JS Spec:从 Spec 接口方法签名中计数参数
196
- - **检视步骤**:
197
- 1. 读取 JS Spec,对每个方法提取参数列表 → 记录参数数量
198
- 2. 读取 C++ JSIBinder.h/cpp,对每个 HostFunction lambda 提取参数访问模式(如 `args[0]`、`args[1]`、`argv[0]`)→ 记录 C++ 实际使用的参数数量
199
- 3. 逐一对比每个方法的参数数量
200
- 4. **判定规则**:C++ 参数数量与 JS Spec 不匹配 → 致命;C++ 多于 JS Spec → 标记为冗余参数;C++ 少于 JS Spec → 标记为参数缺失
201
- - **扣分规则**:不匹配扣 8 分/个(致命度)
202
- - **输出格式**:
203
-
204
- ```markdown
205
- | # | 方法名 | JS Spec 参数数量 | JS Spec 参数列表 | C++ 参数数量 | C++ 参数访问 | C++ 文件:行号 | 状态 | 扣分 |
206
- |---|--------|-------------|-------------|-----------|-----------|-------------|------|------|
207
- | 1 | {方法名} | {数量} | {参数名列表} | {数量} | {args[n]列表} | {文件:行号} | ✅一致 / ❌不匹配 | {扣分} |
208
- ```
209
-
210
- ##### 检查项 5:参数类型
211
-
212
- - **检查项**:C++ JSIBinder 方法参数 napi 类型转换 vs JS Spec 参数类型
213
- - **特征检索方式**:
214
- - C++ JSIBinder:grep `napi_get_string_utf8`、`napi_get_double`、`napi_get_boolean`、`napi_get_value_int32`、`napi_get_object` 等类型转换函数于 `*JSIBinder.h/cpp`
215
- - JS Spec:从 Spec 接口提取参数类型声明(如 `string`、`boolean`、`number`、`Object`、`Function`)
216
- - **检视步骤**:
217
- 1. 读取 JS Spec,对每个方法的每个参数提取类型声明 → 得到 JS Spec 参数类型列表
218
- 2. 读取 C++ JSIBinder.h/cpp,对每个 HostFunction lambda 提取参数 napi 类型转换模式 → 建立映射表:
219
-
220
- ```
221
- JS Spec 类型 → 预期 napi 转换函数:
222
- string → napi_get_string_utf8 / napi_get_value_string_utf8
223
- boolean → napi_get_boolean / napi_get_value_bool
224
- number → napi_get_double / napi_get_value_double / napi_get_value_int32
225
- Object → napi_get_object / napi_get_value_object
226
- Function → napi_get_function / napi_get_value_function
227
- Array → napi_get_array / napi_get_value_array
228
- ```
229
-
230
- 3. 逐一对比每个参数的类型映射是否正确
231
- 4. **判定规则**:napi 类型转换函数与 JS Spec 参数类型不对应 → 类型致命错误
232
- - **扣分规则**:类型转换致命错误扣 10 分/个
233
- - **输出格式**:
234
-
235
- ```markdown
236
- | # | 方法名 | 参数名 | JS Spec 类型 | 预期 napi 转换 | C++ 实际 napi 转换 | C++ 文件:行号 | 状态 | 扣分 |
237
- |---|--------|------|-------------|-------------|-----------------|-------------|------|------|
238
- | 1 | {方法名} | {参数名} | {JS Spec类型} | {预期转换函数} | {实际转换函数} | {文件:行号} | ✅一致 / ❌类型错误 | {扣分} |
239
- ```
240
-
241
- ##### 检查项 6:参数顺序
242
-
243
- - **检查项**:JS Spec 参数位置 vs C++ JSIBinder 参数位置
244
- - **特征检索方式**:同检查项 4 和 5,关注参数索引顺序
245
- - **检视步骤**:
246
- 1. 读取 JS Spec,对每个方法按定义顺序提取参数列表 → 得到 JS Spec 参数顺序
247
- 2. 读取 C++ JSIBinder.h/cpp,对每个 HostFunction lambda 按 `args[n]` / `argv[n]` 索引顺序提取参数访问 → 得到 C++ 参数访问顺序
248
- 3. 逐一对比每个方法中参数的位置顺序:JS Spec 第 1 个参数应对应 C++ `args[0]`,第 2 个对应 `args[1]`,以此类推
249
- 4. **判定规则**:C++ 参数访问顺序与 JS Spec 参数定义顺序不一致 → 顺序错误
250
- - **扣分规则**:顺序错误扣 6 分/个
251
- - **输出格式**:
252
-
253
- ```markdown
254
- | # | 方法名 | JS Spec 参数顺序 | C++ args 索引顺序 | 顺序差异 | C++ 文件:行号 | 状态 | 扣分 |
255
- |---|--------|-------------|---------------|---------|-------------|------|------|
256
- | 1 | {方法名} | {参数1, 参数2, ...} | {args[0]=参数?, args[1]=参数?, ...} | {无 / 描述差异} | {文件:行号} | ✅一致 / ❌顺序错误 | {扣分} |
257
- ```
258
-
259
- #### ②平台实现差异
260
-
261
- ##### 检查项 7:方法签名 vs Android
262
-
263
- - **检查项**:C++ JSIBinder 方法签名 vs Android @ReactMethod 方法签名
264
- - **特征检索方式**:
265
- - C++ JSIBinder:grep HostFunction 注册于 `*JSIBinder.h/cpp`
266
- - Android:grep `@ReactMethod` 于 Java/Kotlin 文件
267
- - **检视步骤**:
268
- 1. 从 C++ JSIBinder 提取方法签名列表(方法名 + 参数数量/类型 + 返回值类型)
269
- 2. 从 Android Java/Kotlin 文件读取所有 `@ReactMethod` 注解方法及其签名
270
- 3. 对每个方法,对比 C++ 签名与 Android 签名的差异(参数数量、参数类型)
271
- 4. **判定规则**:C++ 与 Android 签名差异不独立扣分,与 JS Spec 一致性检查合并计算——如果 C++ 与 JS Spec 一致但与 Android 不一致,说明 Android 实现存在偏差;如果 C++ 与 JS Spec 也不一致,则以 JS Spec 检查项扣分为主
272
- - **扣分规则**:签名差异(参数数量/类型)与 JS Spec 一致性检查合并计算,不独立扣分
273
- - **输出格式**:
274
-
275
- ```markdown
276
- | # | 方法名 | JS Spec 签名 | C++ JSIBinder 签名 | Android @ReactMethod 签名 | C++ vs JS Spec 状态 | C++ vs Android 状态 | 备注 |
277
- |---|--------|-------------|-------------------|--------------------------|-------------------|-------------------|------|
278
- | 1 | {方法名} | {签名} | {签名} | {签名} | {一致/不一致} | {一致/不一致} | {合并扣分归属} |
279
- ```
280
-
281
- ##### 检查项 8:方法签名 vs iOS
282
-
283
- - **检查项**:C++ JSIBinder 方法签名 vs iOS RCT_EXPORT_METHOD 方法签名
284
- - **特征检索方式**:
285
- - C++ JSIBinder:grep HostFunction 注册于 `*JSIBinder.h/cpp`
286
- - iOS:grep `RCT_EXPORT_METHOD` 于 ObjC 文件或 Swift 方法导出声明
287
- - **检视步骤**:
288
- 1. 从 C++ JSIBinder 提取方法签名列表
289
- 2. 从 iOS Swift/ObjC 文件读取所有 `RCT_EXPORT_METHOD` 定义及其签名
290
- 3. 对每个方法,对比 C++ 签名与 iOS 签名的差异
291
- 4. **判定规则**:同检查项 7,差异与 JS Spec 一致性检查合并计算
292
- - **扣分规则**:签名差异与 JS Spec 一致性检查合并计算,不独立扣分
293
- - **输出格式**:
294
-
295
- ```markdown
296
- | # | 方法名 | JS Spec 签名 | C++ JSIBinder 签名 | iOS RCT_EXPORT_METHOD 签名 | C++ vs JS Spec 状态 | C++ vs iOS 状态 | 备注 |
297
- |---|--------|-------------|-------------------|--------------------------|-------------------|---------------|------|
298
- | 1 | {方法名} | {签名} | {签名} | {签名} | {一致/不一致} | {一致/不一致} | {合并扣分归属} |
299
- ```
300
-
301
- #### ③架构桥接一致性
302
-
303
- ##### 检查项 9:TurboModule 注册完整性
304
-
305
- - **检查项**:C++ FactoryDelegate 注册名 vs JS 层所有 TurboModuleRegistry 注册名
306
- - **特征检索方式**:
307
- - C++ FactoryDelegate:grep `if (name ==` 于 `*Package.h`、`*TurboModuleFactoryDelegate.h/cpp`
308
- - JS 层:grep `TurboModuleRegistry.getEnforcing` 或 `TurboModuleRegistry.get` 于所有 `*.ts` 文件
309
- - **检视步骤**:
310
- 1. 读取 C++ FactoryDelegate.h/cpp,从 `createTurboModule()` 方法中提取所有 `if (name == "TurboModule名")` 条件 → 得到 C++ 已注册 TurboModule 名列表
311
- 2. 在 JS 层所有 `.ts` 文件中搜索 `TurboModuleRegistry.getEnforcing<Spec>('模块名')` 和 `TurboModuleRegistry.get('模块名')` → 得到 JS 层所有 TurboModule 注册名列表
312
- 3. 以 JS 层注册名列表为基准,逐一检查 C++ FactoryDelegate 中是否有对应的注册条件
313
- 4. **判定规则**:JS 层注册了 TurboModule 但 C++ FactoryDelegate 无对应 `if (name == "XXX")` 条件 → C++ 缺失 TurboModule 注册(致命)
314
- - **扣分规则**:C++ 缺失 TurboModule 注册扣 10 分/个
315
- - **输出格式**:
316
-
317
- ```markdown
318
- | # | TurboModule 名 | JS 层 TurboModuleRegistry 注册 | C++ FactoryDelegate 注册 | C++ 文件:行号 | 状态 | 扣分 |
319
- |---|--------------|--------------------------|------------------------|-------------|------|------|
320
- | 1 | {TM名} | ✅ {JS文件:行号} | ✅ {C++文件:行号} / ❌ 无注册 | {文件:行号} | ✅已注册 / ❌缺失注册 | {扣分} |
321
- ```
322
-
323
- ---
324
-
325
- ### 3.2 检查点:返回值(返回值类型与语义一致性)
326
-
327
- #### 检查项概要
328
-
329
- | 维度 | # | 检查项 | 致命度 |
330
- |------|---|--------|--------|
331
- | ①契约一致性 | 1 | 返回值类型 | 致命 |
332
- | ①契约一致性 | 2 | 返回值语义 | 严重 |
333
- | ①契约一致性 | 3 | Promise 处理 | 中等 |
334
- | ①契约一致性 | 4 | C++ getConstants() | 中等 |
335
- | ②平台实现差异 | 5 | 返回值 vs Android | — |
336
- | ②平台实现差异 | 6 | 返回值 vs iOS | — |
337
- | ③架构桥接一致性 | — | 已在①中覆盖 | — |
338
-
339
- #### ①契约一致性
340
-
341
- ##### 检查项 1:返回值类型
342
-
343
- - **检查项**:C++ TurboModule 方法返回值 vs JS Spec 期望返回值
344
- - **特征检索方式**:
345
- - C++ JSIBinder:grep `napi_create_string_utf8`、`napi_create_double`、`napi_create_boolean`、`napi_create_object`、`napi_create_array`、`napi_create_promise`、`napi_create_null`、`napi_create_int32` 等返回值构造函数于 `*JSIBinder.h/cpp`
346
- - JS Spec:从 Spec 接口提取方法返回值类型声明
347
- - **检视步骤**:
348
- 1. 读取 JS Spec,对每个方法提取返回值类型 → 得到 JS Spec 期望返回值类型列表
349
- 2. 读取 C++ JSIBinder.h/cpp,对每个 HostFunction lambda 提取返回值构造模式 → 建立映射表:
350
-
351
- ```
352
- JS Spec 返回类型 → 预期 napi 构造函数:
353
- string → napi_create_string_utf8
354
- boolean → napi_create_boolean
355
- number → napi_create_double / napi_create_int32
356
- Object → napi_create_object
357
- Array → napi_create_array
358
- Promise<T> → napi_create_promise
359
- void → napi_create_null / napi_get_null
360
- null → napi_create_null / napi_get_null
361
- ```
362
-
363
- 3. 逐一对比每个方法的返回值类型映射
364
- 4. **判定规则**:C++ 返回值构造函数与 JS Spec 期望返回值类型不对应 → 返回值类型致命错误
365
- - **扣分规则**:返回值类型错误扣 10 分/个
366
- - **输出格式**:
367
-
368
- ```markdown
369
- | # | 方法名 | JS Spec 返回类型 | 预期 napi 构造 | C++ 实际 napi 构造 | C++ 文件:行号 | 状态 | 扣分 |
370
- |---|--------|-------------|-------------|-----------------|-------------|------|------|
371
- | 1 | {方法名} | {JS Spec返回类型} | {预期构造函数} | {实际构造函数} | {文件:行号} | ✅一致 / ❌类型错误 | {扣分} |
372
- ```
373
-
374
- ##### 检查项 2:返回值语义
375
-
376
- - **检查项**:C++ TurboModule 返回内容是否符合接口语义
377
- - **特征检索方式**:
378
- - C++ JSIBinder + TurboModule 实现:读取 HostFunction lambda 返回值构造的具体内容
379
- - JS Spec:读取方法语义描述和返回值文档
380
- - **检视步骤**:
381
- 1. 读取 C++ TurboModule 实现代码(JSIBinder 中的 HostFunction lambda 或 TurboModule.cpp 方法实现),验证返回值的具体内容是否正确
382
- 2. 读取 JS Spec,提取每个方法的语义描述(如方法名 `isFileUploadSupported` 应返回布尔值表示是否支持文件上传)
383
- 3. 对比 C++ 返回值内容与 JS Spec 语义描述是否一致
384
- 4. **判定规则**:返回值语义与 JS Spec 描述不一致 → 语义错误;例如方法名暗示返回布尔值但 C++ 固定返回 `napi_create_null`
385
- - **扣分规则**:语义错误扣 8 分/个
386
- - **输出格式**:
387
-
388
- ```markdown
389
- | # | 方法名 | JS Spec 返回语义 | C++ 返回值内容 | C++ 文件:行号 | 语义一致性 | 扣分 |
390
- |---|--------|-------------|-----------|-------------|---------|------|
391
- | 1 | {方法名} | {语义描述} | {实际返回内容} | {文件:行号} | ✅一致 / ❌语义错误 | {扣分} |
392
- ```
393
-
394
- ##### 检查项 3:Promise 处理
395
-
396
- - **检查项**:异步方法是否正确返回 Promise
397
- - **特征检索方式**:
398
- - C++ JSIBinder:grep `napi_create_promise`、`napi_resolve_deferred`、`napi_reject_deferred` 于 `*JSIBinder.h/cpp`
399
- - JS Spec:从 Spec 接口提取返回 `Promise<T>` 的方法
400
- - **检视步骤**:
401
- 1. 读取 JS Spec,识别所有返回值为 `Promise<T>` 的异步方法
402
- 2. 读取 C++ JSIBinder.h/cpp,对每个异步方法检查是否使用了 `napi_create_promise` 创建 Promise
403
- 3. 检查 Promise 的 resolve/reject 模式:是否有 `napi_resolve_deferred` 和 `napi_reject_deferred` 的正确调用
404
- 4. **判定规则**:JS Spec 标记为异步方法但 C++ 未使用 Promise 模式 → Promise 处理不正确;C++ 使用了 Promise 但未正确 resolve/reject → Promise 不完整
405
- - **扣分规则**:不正确扣 6 分/个
406
- - **输出格式**:
407
-
408
- ```markdown
409
- | # | 方法名 | JS Spec 返回类型 | C++ Promise 创建 | C++ resolve/reject | C++ 文件:行号 | 状态 | 扣分 |
410
- |---|--------|-------------|---------------|------------------|-------------|------|------|
411
- | 1 | {方法名} | Promise<T> | ✅ napi_create_promise / ❌ 未创建 | ✅ resolve+reject / ⚠️ 不完整 / ❌ 缺失 | {文件:行号} | ✅正确 / ❌不正确 | {扣分} |
412
- ```
413
-
414
- ##### 检查项 4:C++ getConstants()
415
-
416
- - **检查项**:C++ TurboModule getConstants() vs JS Spec 常量定义
417
- - **特征检索方式**:
418
- - C++ TurboModule:grep `getConstants` 于 `*TurboModule.h/cpp`,提取常量名和值
419
- - JS Spec:从 Spec 文件读取常量定义
420
- - **检视步骤**:
421
- 1. 读取 C++ TurboModule.h/cpp 文件,定位 `getConstants()` 方法,提取所有常量名及其值 → 得到 C++ 常量列表
422
- 2. 读取 JS Spec 文件,提取所有常量定义(通常在 Spec 接口的常量部分) → 得到 JS Spec 常量列表
423
- 3. 以 JS Spec 常量列表为基准,逐一检查 C++ getConstants() 中是否包含对应常量
424
- 4. **判定规则**:JS Spec 定义了常量但 C++ getConstants() 缺失该常量 → C++ 缺失常量
425
- - **扣分规则**:C++ 缺失常量扣 5 分/个
426
- - **输出格式**:
427
-
428
- ```markdown
429
- | # | 常量名 | JS Spec 常量定义 | C++ getConstants() 常量 | C++ 常量值 | C++ 文件:行号 | 状态 | 扣分 |
430
- |---|--------|-------------|-------------------|---------|-------------|------|------|
431
- | 1 | {常量名} | ✅ {Spec文件:行号} | ✅ 有 / ❌ 缺失 | {值} | {文件:行号} | ✅一致 / ❌缺失 | {扣分} |
432
- ```
433
-
434
- #### ②平台实现差异
435
-
436
- ##### 检查项 5:返回值 vs Android
437
-
438
- - **检查项**:C++ TurboModule 返回值 vs Android @ReactMethod 返回值
439
- - **特征检索方式**:
440
- - C++ JSIBinder:grep 返回值构造函数于 `*JSIBinder.h/cpp`
441
- - Android:grep `@ReactMethod` 注解方法返回类型于 Java/Kotlin 文件
442
- - **检视步骤**:
443
- 1. 从 C++ JSIBinder 提取方法返回值类型列表
444
- 2. 从 Android Java/Kotlin 文件读取 `@ReactMethod` 方法的返回值类型
445
- 3. 对每个方法,对比 C++ 返回值与 Android 返回值
446
- 4. **判定规则**:C++ 与 Android 返回值差异不独立扣分,与 JS Spec 一致性检查合并计算
447
- - **扣分规则**:与 JS Spec 一致性检查合并计算,不独立扣分
448
- - **输出格式**:
449
-
450
- ```markdown
451
- | # | 方法名 | JS Spec 返回类型 | C++ 返回值类型 | Android 返回值类型 | C++ vs JS Spec 状态 | C++ vs Android 状态 | 备注 |
452
- |---|--------|-------------|-------------|-----------------|-------------------|-------------------|------|
453
- | 1 | {方法名} | {类型} | {类型} | {类型} | {一致/不一致} | {一致/不一致} | {合并扣分归属} |
454
- ```
455
-
456
- ##### 检查项 6:返回值 vs iOS
457
-
458
- - **检查项**:C++ TurboModule 返回值 vs iOS RCT_EXPORT_METHOD 返回值
459
- - **特征检索方式**:
460
- - C++ JSIBinder:grep 返回值构造函数于 `*JSIBinder.h/cpp`
461
- - iOS:grep `RCT_EXPORT_METHOD` 返回类型于 ObjC/Swift 文件
462
- - **检视步骤**:
463
- 1. 从 C++ JSIBinder 提取方法返回值类型列表
464
- 2. 从 iOS Swift/ObjC 文件读取方法返回值类型
465
- 3. 对每个方法,对比 C++ 返回值与 iOS 返回值
466
- 4. **判定规则**:同检查项 5,差异与 JS Spec 一致性检查合并计算
467
- - **扣分规则**:与 JS Spec 一致性检查合并计算,不独立扣分
468
- - **输出格式**:
469
-
470
- ```markdown
471
- | # | 方法名 | JS Spec 返回类型 | C++ 返回值类型 | iOS 返回值类型 | C++ vs JS Spec 状态 | C++ vs iOS 状态 | 备注 |
472
- |---|--------|-------------|-------------|-------------|-------------------|---------------|------|
473
- | 1 | {方法名} | {类型} | {类型} | {类型} | {一致/不一致} | {一致/不一致} | {合并扣分归属} |
474
- ```
475
-
476
- #### ③架构桥接一致性
477
-
478
- (返回值的架构桥接在①契约一致性中已覆盖)
479
-
480
- ---
481
-
482
- ### 3.3 检查点:实现逻辑(C++→ArkTS 映射、回调绑定一致性)
483
-
484
- #### 检查项概要
485
-
486
- | 维度 | # | 检查项 | 致命度 |
487
- |------|---|--------|--------|
488
- | ①契约一致性 | — | N/A(实现逻辑不属于契约维度) | — |
489
- | ②平台实现差异 | 1 | C++→ArkTS 映射 | 严重 |
490
- | ②平台实现差异 | 2 | C++ 回调绑定 | 严重 |
491
- | ②平台实现差异 | 3 | C++ 回调参数类型 | 致命 |
492
- | ③架构桥接一致性 | — | 已在②中覆盖 | — |
493
-
494
- > 📖 **ArkTS TurboModule 方法实现完整性检视**(方法存在性、签名一致性、Stub 检测等)详见 [ARKTS_TURBOMODULE_CHECK_GUIDE.md](ARKTS_TURBOMODULE_CHECK_GUIDE.md) 第 3.2-3.3 节。
495
-
496
- #### ①契约一致性
497
-
498
- (实现逻辑不属于契约维度)
499
-
500
- #### ②平台实现差异
501
-
502
- ##### 检查项 1:C++→ArkTS 映射
503
-
504
- - **检查项**:C++ FactoryDelegate `std::make_shared<XxxTurboModule>` 类名 vs ArkTS 实际 TurboModule 类名
505
- - **特征检索方式**:
506
- - C++ FactoryDelegate:grep `std::make_shared<` 于 `*Package.h`、`*TurboModuleFactoryDelegate.h/cpp`
507
- - ArkTS TurboModule:读取 `*TurboModule.ets` 文件中的类声明
508
- - **检视步骤**:
509
- 1. 读取 C++ FactoryDelegate.h/cpp,从 `createTurboModule()` 方法中提取所有 `std::make_shared<XxxTurboModule>(ctx, name)` 构造调用 → 得到 C++ 构造类名列表
510
- 2. 读取 ArkTS TurboModule.ets 文件,提取 TurboModule 实现类名(如 `class RNCWebViewModule extends TurboModule`)→ 得到 ArkTS TurboModule 类名列表
511
- 3. 逐一对比每个 TurboModule 的 C++ 构造类名与 ArkTS 实际类名
512
- 4. **判定规则**:C++ `std::make_shared<XxxTurboModule>` 中的类名必须与 ArkTS TurboModule.ets 中的类名一致;不匹配 → 类名映射错误
513
- - **扣分规则**:不匹配扣 8 分/个
514
- - **输出格式**:
515
-
516
- ```markdown
517
- | # | TurboModule 名 | C++ 构造类名 | C++ 文件:行号 | ArkTS TurboModule 类名 | ArkTS 文件:行号 | 状态 | 扣分 |
518
- |---|--------------|------------|-------------|---------------------|-------------|------|------|
519
- | 1 | {TM名} | {std::make_shared<类名>} | {文件:行号} | {ArkTS class名} | {文件:行号} | ✅一致 / ❌不匹配 | {扣分} |
520
- ```
521
-
522
- ##### 检查项 2:C++ 回调绑定
523
-
524
- - **检查项**:JS Spec 回调方法是否在 C++ JSIBinder 中有 HostFunction 注册
525
- - **特征检索方式**:
526
- - JS Spec:识别接受 Function 类型参数的方法(回调方法)
527
- - C++ JSIBinder:grep `napi_get_function` 或 Function 参数处理于 `*JSIBinder.h/cpp`
528
- - **检视步骤**:
529
- 1. 读取 JS Spec,识别所有回调类型方法(方法参数类型包含 `Function` 或 `(callback: (...args) => void)` 的方法) → 得到 JS Spec 回调方法列表
530
- 2. 读取 C++ JSIBinder.h/cpp,检查这些回调方法是否有对应的 HostFunction 注册
531
- 3. 对每个回调方法,检查 C++ JSIBinder 中是否正确处理了 Function 参数(是否有 `napi_get_function` 提取回调函数并绑定)
532
- 4. **判定规则**:JS Spec 定义了回调方法但 C++ JSIBinder 无对应 HostFunction 注册 → 回调绑定缺失
533
- - **扣分规则**:C++ 缺失回调绑定扣 8 分/个
534
- - **输出格式**:
535
-
536
- ```markdown
537
- | # | 回调方法名 | JS Spec 回调参数 | C++ JSIBinder HostFunction | C++ 回调处理 | C++ 文件:行号 | 状态 | 扣分 |
538
- |---|----------|-------------|--------------------------|-----------|-------------|------|------|
539
- | 1 | {方法名} | {callback参数签名} | ✅ 有注册 / ❌ 无注册 | ✅ napi_get_function / ❌ 缺失 | {文件:行号} | ✅已绑定 / ❌缺失 | {扣分} |
540
- ```
541
-
542
- ##### 检查项 3:C++ 回调参数类型
543
-
544
- - **检查项**:C++ JSIBinder 回调参数类型映射
545
- - **特征检索方式**:
546
- - C++ JSIBinder:在回调 HostFunction lambda 中提取回调参数的 napi 类型转换模式
547
- - JS Spec:从回调方法的 Function 参数类型签名提取回调参数类型
548
- - **检视步骤**:
549
- 1. 读取 JS Spec,对每个回调方法提取 Function 参数的回调参数类型签名(如 `(success: boolean, error: string) => void`)→ 得到 JS Spec 回调参数类型列表
550
- 2. 读取 C++ JSIBinder.h/cpp,对每个回调 HostFunction 提取回调参数的 napi 类型转换模式(回调调用时的参数构造,如 `napi_create_boolean`、`napi_create_string_utf8`)→ 得到 C++ 回调参数类型映射列表
551
- 3. 逐一对比回调参数的类型映射
552
- 4. **判定规则**:C++ 回调参数 napi 类型与 JS Spec 回调参数类型不对应 → 回调参数类型致命错误
553
- - **扣分规则**:类型错误扣 10 分/个
554
- - **输出格式**:
555
-
556
- ```markdown
557
- | # | 回调方法名 | 回调参数名 | JS Spec 回调参数类型 | 预期 napi 构造 | C++ 实际 napi 构造 | C++ 文件:行号 | 状态 | 扣分 |
558
- |---|----------|---------|-------------|-------------|-----------------|-------------|------|------|
559
- | 1 | {方法名} | {参数名} | {类型} | {预期构造函数} | {实际构造函数} | {文件:行号} | ✅一致 / ❌类型错误 | {扣分} |
560
- ```
561
-
562
- #### ③架构桥接一致性
563
-
564
- (已在②平台实现差异中覆盖)
565
-
566
- > 📖 **ArkTS TurboModule 常量导出检视**详见 [ARKTS_TURBOMODULE_CHECK_GUIDE.md](ARKTS_TURBOMODULE_CHECK_GUIDE.md) 第 3.4 节。
567
- > 📖 **ArkTS TurboModule 回调/事件检视**详见 [ARKTS_TURBOMODULE_CHECK_GUIDE.md](ARKTS_TURBOMODULE_CHECK_GUIDE.md) 第 3.5 节。
568
-
569
- ---
570
-
571
- ## 4. 方法级对比格式
572
-
573
- ### 4.1 TurboModule 方法签名对比(C++ 层)
574
-
575
- > 📖 **ArkTS TurboModule 方法签名对比**详见 [ARKTS_TURBOMODULE_CHECK_GUIDE.md](ARKTS_TURBOMODULE_CHECK_GUIDE.md) 第 2.2 维度 B。
576
-
577
- ```markdown
578
- | # | 方法名 | JS Spec 签名 | C++ JSIBinder 签名 | C++ 文件:行号 | C++ 绑定状态 | 扣分 |
579
- |---|--------|-------------|-------------------|-------------|-------------|------|
580
- | 1 | `isFileUploadSupported` | `(): Promise<boolean>` | `SharedTurboModule → resolve bool` | `RNCWebViewModuleJSIBinder.h:12` | ✅ 一致 | 0 |
581
- | 2 | `shouldStartLoadWithLockIdentifier` | `(shouldStart: boolean, lockIdentifier: Double): void` | `(bool, double) → void` | `RNCWebViewModuleJSIBinder.h:18` | ✅ 一致 | 0 |
582
- ```
583
-
584
- ### 4.2 TurboModule 跨层一致性对比(C++ 层视角)
585
-
586
- > 📖 **ArkTS TurboModule Stub 检测**详见 [ARKTS_TURBOMODULE_CHECK_GUIDE.md](ARKTS_TURBOMODULE_CHECK_GUIDE.md) 第 2.2 维度 C。
587
-
588
- ```markdown
589
- | # | TurboModule 名 | JS Spec 定义 | JS Spec 注册名 | C++ FactoryDelegate | C++ JSIBinder | C++ 文件 | 状态 | 扣分 |
590
- |---|--------------|------------|--------------|--------------------|-------------|---------|------|------|
591
- | 1 | `RNCWebViewModule` | `NativeRNCWebViewModule.ts` | `RNCWebViewModule` | ✅ BaseReactNativeWebviewPackageTurboModuleFactoryDelegate | ✅ RNCWebViewModuleJSIBinder | `BaseReactNativeWebviewPackage.h:22` | ✅ C++ 层一致 | 0 |
592
- ```
593
-
594
- > 📖 **ArkTS TurboModule 层补充列**(ArkTS 实现类、ArkTS NAME 常量、ArkTS 方法签名)详见 [ARKTS_TURBOMODULE_CHECK_GUIDE.md](ARKTS_TURBOMODULE_CHECK_GUIDE.md) 第 5.1 节全链路对比表。
595
-
596
- ---
597
-
598
- ## 5. Stub 检测指引
599
-
600
- > 📖 **ArkTS TurboModule Stub 检测与合理性判定**已独立为 [ARKTS_TURBOMODULE_CHECK_GUIDE.md](ARKTS_TURBOMODULE_CHECK_GUIDE.md) 第 3.3 节和第 2.2 维度 C。
601
-
602
- 本指南(C++ 层)不直接执行 Stub 检测,因为 Stub 是 ArkTS TurboModule 实现层的概念。但 C++ JSIBinder 层可能存在以下问题:
603
-
604
- | C++ 层问题 | 识别方式 | 扣分 |
605
- |----------|----------|------|
606
- | C++ JSIBinder 方法缺失 | JS Spec 定义了方法但 C++ JSIBinder 无 HostFunction 注册 | -10/方法 |
607
- | C++ JSIBinder 参数类型错误 | napi 类型转换与 JS Spec 不一致 | -10/方法 |
608
- | C++ JSIBinder 方法名不匹配 | HostFunction 方法名与 JS Spec 方法名不一致 | -8/方法 |
609
-
610
- ---
611
-
612
- ## 6. 检视操作流程
613
-
614
- ### 6.1 Phase 0 补充步骤(TurboModule C++ 层定位)
615
-
616
- ```
617
- TM-1: 定位 TurboModuleFactoryDelegate
618
- → Codegen: 读取 generated/RNOH/generated/BaseReactNative*Package.h
619
- → Legacy: 读取 *Package.h 或 *TurboModuleFactoryDelegate.h
620
-
621
- TM-2: 提取 TurboModule 名列表
622
- → 从 createTurboModule() 方法的 if 条件中提取所有 TurboModule 名
623
- → 对比 JS 层 TurboModuleRegistry.getEnforcing<Spec>('XXX') 的模块名
624
-
625
- TM-3: 定位 TurboModule JSIBinder(若存在)
626
- → 搜索 generated/RNOH/generated/turbo_modules/*JSIBinder.h
627
- → 搜索 cpp/*TurboModule*JSIBinder.h
628
- ```
629
-
630
- > 📖 **ArkTS TurboModule 定位步骤**(TM-ARK-1~4)详见 [ARKTS_TURBOMODULE_CHECK_GUIDE.md](ARKTS_TURBOMODULE_CHECK_GUIDE.md) 第 6.1 节。
631
-
632
- ### 6.2 Phase 3 补充步骤(TurboModule C++ 层分析)
633
-
634
- ```
635
- TM-5: TurboModule 注册完整性对比
636
- → C++ FactoryDelegate TurboModule 名 vs JS Spec TurboModule 名
637
- → 标注缺失的 TurboModule 注册
638
-
639
- TM-6: TurboModule JSIBinder 方法级对比(C++ 层)
640
- → JS Spec 方法签名 vs C++ JSIBinder 方法签名
641
- → 标注 C++ JSIBinder 方法缺失、类型映射错误
642
-
643
- TM-7: TurboModule C++→ArkTS 映射对比
644
- → C++ FactoryDelegate 构造类名 vs ArkTS TurboModule 类名
645
- → C++ 注册名 vs ArkTS NAME 常量
646
- ```
647
-
648
- > 📖 **ArkTS TurboModule 分析步骤**(TM-ARK-5~11)详见 [ARKTS_TURBOMODULE_CHECK_GUIDE.md](ARKTS_TURBOMODULE_CHECK_GUIDE.md) 第 6.2 节。
649
-
650
- ---
651
-
652
- ## 7. 报告输出格式
653
-
654
- 在一致性检视报告的"5.8 RN 架构一致性检视"中增加以下子章节(C++ 层部分):
655
-
656
- > 📖 **ArkTS TurboModule 层报告输出格式**详见 [ARKTS_TURBOMODULE_CHECK_GUIDE.md](ARKTS_TURBOMODULE_CHECK_GUIDE.md) 第 7 节。
657
-
658
- ```markdown
659
- #### C++ TurboModule 层一致性(如适用)
660
-
661
- **C++ TurboModule 模式**:{Codegen / Legacy / ⚠️ 无 C++ TurboModule 层}
662
-
663
- | # | TurboModule 名 | JS Spec 注册名 | C++ FactoryDelegate | C++ JSIBinder | C++ 文件 | 状态 | 扣分 |
664
- |---|--------------|--------------|--------------------|-------------|---------|------|------|
665
- | ... | ... | ... | ... | ... | ... | ... | ... |
666
-
667
- **TurboModule JSIBinder 方法级对比(C++ 层)**:
668
-
669
- | # | 方法名 | JS Spec 签名 | C++ JSIBinder 签名 | C++ 文件:行号 | C++ 绑定状态 | 扣分 |
670
- |---|--------|-------------|-------------------|-------------|-------------|------|
671
- | ... | ... | ... | ... | ... | ... | ... |
672
- ```
673
-
674
- ---
675
-
676
- ## 8. 与 ARKTS_TURBOMODULE_CHECK_GUIDE 的协同
677
-
678
- 本指南仅覆盖 **C++ TurboModule 层**(FactoryDelegate + JSIBinder),ArkTS TurboModule 层(实现类 + 方法完整性 + Stub + 常量 + 回调)已独立为 [ARKTS_TURBOMODULE_CHECK_GUIDE.md](ARKTS_TURBOMODULE_CHECK_GUIDE.md)。
679
-
680
- 检视执行顺序建议:
681
-
682
- 1. **先执行本指南** → 获得 C++ FactoryDelegate 注册名、JSIBinder 方法列表
683
- 2. **再执行 ARKTS_TURBOMODULE_CHECK_GUIDE** → 获得 ArkTS TurboModule 类声明、方法实现、Stub 检测、常量导出、回调/事件
1
+ # C++ TurboModule 层一致性检视指南
2
+
3
+ 本指南定义 RN 鸿蒙化一致性检视中 **C++ TurboModule 层**(TurboModuleFactoryDelegate、TurboModule JSIBinder)的检视规范,确保 AI Agent 能系统性地读取和分析 C++ TurboModule 代码,检测 TurboModule 注册缺失、方法绑定不完整等问题。
4
+
5
+ > 📖 **ArkTS TurboModule 层检视**(方法实现、Stub 检测、常量导出、回调逻辑等)已独立为 [ARKTS_TURBOMODULE_CHECK_GUIDE.md](ARKTS_TURBOMODULE_CHECK_GUIDE.md),本指南仅覆盖 C++ 层。
6
+
7
+ ---
8
+
9
+ ## 1. 适用条件与前置依赖
10
+
11
+ ### 1.1 适用条件
12
+
13
+ 当 `harmony/<module>/src/main/cpp/` 目录存在 TurboModule 相关文件时,必须执行本指南的检视流程。判定条件:
14
+
15
+ | 条件 | 判定 |
16
+ |------|------|
17
+ | `generated/RNOH/generated/turbo_modules/` 目录存在 | ✅ Codegen TurboModule(必须检视) |
18
+ | `cpp/` 下存在 `*TurboModule*FactoryDelegate*` 文件 | ✅ Legacy TurboModule(必须检视) |
19
+ | 以上均不存在 | ⚠️ 无 TurboModule C++ 层,跳过本指南 |
20
+
21
+ > 📖 **ArkTS TurboModule 实现检视**:当 `harmony/<module>/src/main/ets/*TurboModule.ets` 存在时,需额外执行 [ARKTS_TURBOMODULE_CHECK_GUIDE.md](ARKTS_TURBOMODULE_CHECK_GUIDE.md)。
22
+
23
+ ### 1.2 前置依赖
24
+
25
+ - Phase 0 中已定位的 TurboModule 名(从 Package 或 JS Spec 提取)
26
+ - JS 层 TurboModule Spec 定义(`NativeRNCWebViewModule.ts` 等文件)
27
+
28
+ ---
29
+
30
+ ## 2. 文件定位与读取
31
+
32
+ ### 2.1 TurboModuleFactoryDelegate 定位
33
+
34
+ | 模式 | 文件位置 | 说明 |
35
+ |------|----------|------|
36
+ | Codegen | `generated/RNOH/generated/BaseReactNative*Package.h` 中的 `TurboModuleFactoryDelegate` 类 | 自动生成,包含所有 TurboModule 名 |
37
+ | Legacy | `cpp/*TurboModuleFactoryDelegate.h` 或 `*Package.h/cpp` 中手写的 TurboModule 工厂 | 手动实现,需逐条件读取 |
38
+
39
+ **必须读取的内容**:
40
+
41
+ ```
42
+ 1. createTurboModule(ctx, name) 方法
43
+ → 提取所有 if (name == "TurboModule名") 条件
44
+ → 每个条件对应一个注册的 TurboModule
45
+
46
+ 2. 每个 TurboModule 的构造方式
47
+ → std::make_shared<XxxTurboModule>(ctx, name)
48
+ → 对应 ArkTS TurboModule 实现类
49
+ ```
50
+
51
+ **TurboModule 注册提取模板**:
52
+
53
+ ```markdown
54
+ | # | TurboModule 名 | C++ FactoryDelegate 注册 | C++ 文件:行号 | JS Spec 注册名 | 状态 |
55
+ |---|--------------|------------------------|-------------|--------------|------|
56
+ | 1 | `RNCWebViewModule` | ✅ if (name == "RNCWebViewModule") | `BaseReactNativeWebviewPackage.h:22` | `RNCWebViewModule` ✅ | ✅ 一致 |
57
+ | 2 | `AIRMapManager` | ✅ if (name == "AIRMapManager") | `MapsPackage.h:18` | `AIRMapManager` ✅ | ✅ 一致 |
58
+ ```
59
+
60
+ > 📖 **ArkTS TurboModule 类名与 NAME 常量对比**详见 [ARKTS_TURBOMODULE_CHECK_GUIDE.md](ARKTS_TURBOMODULE_CHECK_GUIDE.md) 第 2.2 维度 A。
61
+
62
+ ### 2.2 TurboModule JSIBinder 定位与读取
63
+
64
+ | 模式 | 文件位置 |
65
+ |------|----------|
66
+ | Codegen | `generated/RNOH/generated/turbo_modules/TurboModuleNameJSIBinder.h`(若存在) |
67
+ | Legacy | `cpp/TurboModuleNameJSIBinder.h` |
68
+
69
+ **必须读取的内容**:
70
+
71
+ ```
72
+ 1. createJSIBinder() 方法
73
+ → 提取所有方法名的 JSI HostFunction 注册
74
+ → 每个方法对应一个 JS→C++ 的方法桥接
75
+
76
+ 2. 方法签名
77
+ → 提取每个 HostFunction 的参数数量和类型
78
+ → 与 JS Spec 的方法签名对比
79
+ ```
80
+
81
+ > **注意**:部分 Codegen TurboModule 仅在 `turbo_modules/TurboModuleName.h` 中定义类声明,实际方法绑定在 `TurboModuleName.cpp` 中实现。需同时读取 `.h` 和 `.cpp` 文件。
82
+
83
+ ### 2.3 ArkTS TurboModule generated 类型与实现
84
+
85
+ > 📖 **ArkTS TurboModule 实现的完整检视流程**(generated Spec 类型读取、ArkTS 实现类读取、方法实现完整性、Stub 检测、常量导出、回调逻辑)已独立为 [ARKTS_TURBOMODULE_CHECK_GUIDE.md](ARKTS_TURBOMODULE_CHECK_GUIDE.md) 第 2 节。
86
+
87
+ 本指南仅提取 C++→ArkTS 映射所需的关键信息:
88
+
89
+ **C++ FactoryDelegate → ArkTS TurboModule 类映射**:
90
+
91
+ ```
92
+ 1. 从 C++ FactoryDelegate 的 createTurboModule() 方法中提取每个 TurboModule 的构造类名
93
+ → std::make_shared<XxxTurboModule>(ctx, name) 中的 XxxTurboModule 类名
94
+ → 此类名对应 ArkTS TurboModule 实现类(需在 ArkTS 层确认)
95
+
96
+ 2. TurboModule 注册名→ArkTS NAME 常量映射
97
+ → C++ if (name == "RNCWebViewModule") 对应 ArkTS TM.RNCWebViewModule.NAME
98
+ → 需在 ArkTS 层确认 NAME 常量值是否与 C++ 注册名一致
99
+ ```
100
+
101
+ ---
102
+
103
+ ## 3. 检视项与扣分规则
104
+
105
+ > 本指南覆盖 `cppTM` 类型实体,检视项按三个关键检查点组织:**函数签名、返回值、实现逻辑**。每个检查点覆盖三个检视维度:**①契约一致性**、**②平台实现差异**、**③架构桥接一致性**。
106
+
107
+ ### 3.1 检查点:函数签名(方法名、参数、注册名一致性)
108
+
109
+ #### 检查项概要
110
+
111
+ | 维度 | # | 检查项 | 致命度 |
112
+ |------|---|--------|--------|
113
+ | ①契约一致性 | 1 | TurboModule 名一致性 | 中等 |
114
+ | ①契约一致性 | 2 | 方法名一致性 | 严重 |
115
+ | ①契约一致性 | 3 | 方法存在性 | 致命 |
116
+ | ①契约一致性 | 4 | 参数数量 | 致命 |
117
+ | ①契约一致性 | 5 | 参数类型 | 致命 |
118
+ | ①契约一致性 | 6 | 参数顺序 | 中等 |
119
+ | ②平台实现差异 | 7 | 方法签名 vs Android | — |
120
+ | ②平台实现差异 | 8 | 方法签名 vs iOS | — |
121
+ | ③架构桥接一致性 | 9 | TurboModule 注册完整性 | 致命 |
122
+
123
+ #### ①契约一致性
124
+
125
+ ##### 检查项 1:TurboModule 名一致性
126
+
127
+ - **检查项**:TurboModule 名一致性
128
+ - **特征检索方式**:
129
+ - C++ FactoryDelegate:grep `if (name == "XXX")` 或 `if (name ==` 于 `*Package.h`、`*TurboModuleFactoryDelegate.h/cpp`
130
+ - JS Spec:grep `TurboModuleRegistry.getEnforcing` 于 `*.ts` Spec 文件
131
+ - ArkTS:grep `NAME` 常量于 `*TurboModule.ets`(参考 [ARKTS_TURBOMODULE_CHECK_GUIDE.md](ARKTS_TURBOMODULE_CHECK_GUIDE.md))
132
+ - **检视步骤**:
133
+ 1. 读取 C++ FactoryDelegate.h/cpp 文件,定位 `createTurboModule(ctx, name)` 方法,提取所有 `if (name == "TurboModule名")` 条件 → 得到 C++ 注册名列表
134
+ 2. 读取 JS Spec 文件,提取所有 `TurboModuleRegistry.getEnforcing<Spec>('模块名')` 调用 → 得到 JS 注册名列表
135
+ 3. 读取 ArkTS TurboModule.ets,提取 `NAME` 常量值(如 `static readonly NAME = 'RNCWebViewModule'`) → 得到 ArkTS NAME 列表
136
+ 4. 以 JS Spec 注册名为基准,逐一对比 C++ 注册名和 ArkTS NAME 常量
137
+ 5. **判定规则**:三层注册名必须完全一致(大小写敏感);C++ 缺失注册名 → 致命问题归入检查项 9;JS Spec 缺失 → 标记为 JS 层遗漏;ArkTS NAME 不一致 → 归入 ArkTS 检视
138
+ - **扣分规则**:不一致扣 5 分/个
139
+ - **输出格式**:
140
+
141
+ ```markdown
142
+ | # | TurboModule 名 | C++ FactoryDelegate 注册名 | JS Spec 注册名 | ArkTS NAME 常量 | C++ 文件:行号 | JS Spec 文件:行号 | 状态 | 扣分 |
143
+ |---|--------------|------------------------|--------------|--------------|-------------|-------------|------|------|
144
+ | 1 | {TM名} | {if(name=="XXX")提取值} | {getEnforcing提取值} | {NAME常量值} | {文件:行号} | {文件:行号} | ✅一致 / ❌不一致 | {扣分} |
145
+ ```
146
+
147
+ ##### 检查项 2:方法名一致性
148
+
149
+ - **检查项**:方法名一致性(C++ JSIBinder HostFunction 方法名 vs JS Spec 方法名)
150
+ - **特征检索方式**:
151
+ - C++ JSIBinder:grep `HostFunction` 或 `obj.setProperty(rt,` 于 `*JSIBinder.h/cpp`
152
+ - JS Spec:读取 Spec 接口定义,提取所有方法名
153
+ - **检视步骤**:
154
+ 1. 读取 TurboModule JSIBinder.h/cpp 文件,定位 `createJSIBinder()` 方法,提取所有 `obj.setProperty(rt, "methodName", ...)` 注册 → 得到 C++ 方法名列表
155
+ 2. 读取 JS Spec 文件,提取 Spec 接口中所有方法定义 → 得到 JS Spec 方法名列表
156
+ 3. 以 JS Spec 方法名列表为基准,逐一检查 C++ JSIBinder 中是否存在同名 HostFunction 注册
157
+ 4. **判定规则**:JS Spec 有但 C++ JSIBinder 无 → 方法缺失(归入检查项 3);C++ JSIBinder 有但 JS Spec 无 → C++ 多余绑定(标记为冗余);方法名拼写不一致 → 方法名不匹配
158
+ - **扣分规则**:C++ JSIBinder 方法名不匹配扣 8 分/个
159
+ - **输出格式**:
160
+
161
+ ```markdown
162
+ | # | 方法名 | JS Spec 方法名 | C++ JSIBinder 方法名 | C++ 文件:行号 | 状态 | 扣分 |
163
+ |---|--------|-------------|-------------------|-------------|------|------|
164
+ | 1 | {方法名} | {Spec中的方法名} | {JSIBinder中的方法名} | {文件:行号} | ✅一致 / ❌不匹配 | {扣分} |
165
+ ```
166
+
167
+ ##### 检查项 3:方法存在性(方法 JSI 绑定完整性)
168
+
169
+ - **检查项**:JS Spec 方法是否在 C++ JSIBinder 中有 HostFunction 注册
170
+ - **特征检索方式**:同检查项 2;在文档中搜索不支持标注
171
+ - **检视步骤**:
172
+ 1. 读取 JS Spec 文件,提取所有方法名 → 得到 JS Spec 完整方法列表
173
+ 2. 读取 C++ JSIBinder.h/cpp,提取所有 `obj.setProperty(rt, "methodName", ...)` → 得到 C++ 已绑定方法列表
174
+ 3. 逐一对比:对每个 JS Spec 方法,检查 C++ JSIBinder 中是否存在对应的 HostFunction 注册
175
+ 4. **🟢 豁免检查(优先级高于扣分)**:对每个缺失的方法,检查文档是否标注不支持(接口规格说明、OHOS README、源码注释)
176
+ 5. **判定规则**:
177
+ - 🟢 **文档已标注不支持** → 豁免,0分,标注"🟢 文档标注不支持(来源:文件:行号)"
178
+ - ❌ **文档未标注不支持** → 方法绑定缺失(致命),扣 10 分/个
179
+ - **扣分规则**:C++ JSIBinder 方法缺失扣 10 分/个;文档标注不支持→豁免0分(不计入致命问题计数)
180
+ - **输出格式**:
181
+
182
+ ```markdown
183
+ | # | 方法名 | JS Spec 定义 | C++ JSIBinder 绑定 | 文档标注不支持 | 文档来源 | 绑定状态 | 扣分 |
184
+ |---|--------|-------------|------------------|--------------|---------|---------|------|
185
+ | 1 | {方法名} | ✅ {Spec文件:行号} | ✅ {JSIBinder文件:行号} | — | — | ✅已绑定 | 0 |
186
+ | 2 | `clearFormData` | ✅ | ❌ 无绑定 | ✅ Android only | README.md:380 | 🟢 豁免不扣分 | 0 |
187
+ | 3 | {方法名} | ✅ | ❌ 无绑定 | ❌ 无标注 | — | ❌缺失 | -10 |
188
+ ```
189
+
190
+ ##### 检查项 4:参数数量
191
+
192
+ - **检查项**:JS Spec 参数数量 vs C++ JSIBinder 参数数量
193
+ - **特征检索方式**:
194
+ - C++ JSIBinder:在 HostFunction lambda 中计数 `args[n]` 或 `argv[n]` 访问
195
+ - JS Spec:从 Spec 接口方法签名中计数参数
196
+ - **检视步骤**:
197
+ 1. 读取 JS Spec,对每个方法提取参数列表 → 记录参数数量
198
+ 2. 读取 C++ JSIBinder.h/cpp,对每个 HostFunction lambda 提取参数访问模式(如 `args[0]`、`args[1]`、`argv[0]`)→ 记录 C++ 实际使用的参数数量
199
+ 3. 逐一对比每个方法的参数数量
200
+ 4. **判定规则**:C++ 参数数量与 JS Spec 不匹配 → 致命;C++ 多于 JS Spec → 标记为冗余参数;C++ 少于 JS Spec → 标记为参数缺失
201
+ - **扣分规则**:不匹配扣 8 分/个(致命度)
202
+ - **输出格式**:
203
+
204
+ ```markdown
205
+ | # | 方法名 | JS Spec 参数数量 | JS Spec 参数列表 | C++ 参数数量 | C++ 参数访问 | C++ 文件:行号 | 状态 | 扣分 |
206
+ |---|--------|-------------|-------------|-----------|-----------|-------------|------|------|
207
+ | 1 | {方法名} | {数量} | {参数名列表} | {数量} | {args[n]列表} | {文件:行号} | ✅一致 / ❌不匹配 | {扣分} |
208
+ ```
209
+
210
+ ##### 检查项 5:参数类型
211
+
212
+ - **检查项**:C++ JSIBinder 方法参数 napi 类型转换 vs JS Spec 参数类型
213
+ - **特征检索方式**:
214
+ - C++ JSIBinder:grep `napi_get_string_utf8`、`napi_get_double`、`napi_get_boolean`、`napi_get_value_int32`、`napi_get_object` 等类型转换函数于 `*JSIBinder.h/cpp`
215
+ - JS Spec:从 Spec 接口提取参数类型声明(如 `string`、`boolean`、`number`、`Object`、`Function`)
216
+ - **检视步骤**:
217
+ 1. 读取 JS Spec,对每个方法的每个参数提取类型声明 → 得到 JS Spec 参数类型列表
218
+ 2. 读取 C++ JSIBinder.h/cpp,对每个 HostFunction lambda 提取参数 napi 类型转换模式 → 建立映射表:
219
+
220
+ ```
221
+ JS Spec 类型 → 预期 napi 转换函数:
222
+ string → napi_get_string_utf8 / napi_get_value_string_utf8
223
+ boolean → napi_get_boolean / napi_get_value_bool
224
+ number → napi_get_double / napi_get_value_double / napi_get_value_int32
225
+ Object → napi_get_object / napi_get_value_object
226
+ Function → napi_get_function / napi_get_value_function
227
+ Array → napi_get_array / napi_get_value_array
228
+ ```
229
+
230
+ 3. 逐一对比每个参数的类型映射是否正确
231
+ 4. **判定规则**:napi 类型转换函数与 JS Spec 参数类型不对应 → 类型致命错误
232
+ - **扣分规则**:类型转换致命错误扣 10 分/个
233
+ - **输出格式**:
234
+
235
+ ```markdown
236
+ | # | 方法名 | 参数名 | JS Spec 类型 | 预期 napi 转换 | C++ 实际 napi 转换 | C++ 文件:行号 | 状态 | 扣分 |
237
+ |---|--------|------|-------------|-------------|-----------------|-------------|------|------|
238
+ | 1 | {方法名} | {参数名} | {JS Spec类型} | {预期转换函数} | {实际转换函数} | {文件:行号} | ✅一致 / ❌类型错误 | {扣分} |
239
+ ```
240
+
241
+ ##### 检查项 6:参数顺序
242
+
243
+ - **检查项**:JS Spec 参数位置 vs C++ JSIBinder 参数位置
244
+ - **特征检索方式**:同检查项 4 和 5,关注参数索引顺序
245
+ - **检视步骤**:
246
+ 1. 读取 JS Spec,对每个方法按定义顺序提取参数列表 → 得到 JS Spec 参数顺序
247
+ 2. 读取 C++ JSIBinder.h/cpp,对每个 HostFunction lambda 按 `args[n]` / `argv[n]` 索引顺序提取参数访问 → 得到 C++ 参数访问顺序
248
+ 3. 逐一对比每个方法中参数的位置顺序:JS Spec 第 1 个参数应对应 C++ `args[0]`,第 2 个对应 `args[1]`,以此类推
249
+ 4. **判定规则**:C++ 参数访问顺序与 JS Spec 参数定义顺序不一致 → 顺序错误
250
+ - **扣分规则**:顺序错误扣 6 分/个
251
+ - **输出格式**:
252
+
253
+ ```markdown
254
+ | # | 方法名 | JS Spec 参数顺序 | C++ args 索引顺序 | 顺序差异 | C++ 文件:行号 | 状态 | 扣分 |
255
+ |---|--------|-------------|---------------|---------|-------------|------|------|
256
+ | 1 | {方法名} | {参数1, 参数2, ...} | {args[0]=参数?, args[1]=参数?, ...} | {无 / 描述差异} | {文件:行号} | ✅一致 / ❌顺序错误 | {扣分} |
257
+ ```
258
+
259
+ #### ②平台实现差异
260
+
261
+ ##### 检查项 7:方法签名 vs Android
262
+
263
+ - **检查项**:C++ JSIBinder 方法签名 vs Android @ReactMethod 方法签名
264
+ - **特征检索方式**:
265
+ - C++ JSIBinder:grep HostFunction 注册于 `*JSIBinder.h/cpp`
266
+ - Android:grep `@ReactMethod` 于 Java/Kotlin 文件
267
+ - **检视步骤**:
268
+ 1. 从 C++ JSIBinder 提取方法签名列表(方法名 + 参数数量/类型 + 返回值类型)
269
+ 2. 从 Android Java/Kotlin 文件读取所有 `@ReactMethod` 注解方法及其签名
270
+ 3. 对每个方法,对比 C++ 签名与 Android 签名的差异(参数数量、参数类型)
271
+ 4. **判定规则**:C++ 与 Android 签名差异不独立扣分,与 JS Spec 一致性检查合并计算——如果 C++ 与 JS Spec 一致但与 Android 不一致,说明 Android 实现存在偏差;如果 C++ 与 JS Spec 也不一致,则以 JS Spec 检查项扣分为主
272
+ - **扣分规则**:签名差异(参数数量/类型)与 JS Spec 一致性检查合并计算,不独立扣分
273
+ - **输出格式**:
274
+
275
+ ```markdown
276
+ | # | 方法名 | JS Spec 签名 | C++ JSIBinder 签名 | Android @ReactMethod 签名 | C++ vs JS Spec 状态 | C++ vs Android 状态 | 备注 |
277
+ |---|--------|-------------|-------------------|--------------------------|-------------------|-------------------|------|
278
+ | 1 | {方法名} | {签名} | {签名} | {签名} | {一致/不一致} | {一致/不一致} | {合并扣分归属} |
279
+ ```
280
+
281
+ ##### 检查项 8:方法签名 vs iOS
282
+
283
+ - **检查项**:C++ JSIBinder 方法签名 vs iOS RCT_EXPORT_METHOD 方法签名
284
+ - **特征检索方式**:
285
+ - C++ JSIBinder:grep HostFunction 注册于 `*JSIBinder.h/cpp`
286
+ - iOS:grep `RCT_EXPORT_METHOD` 于 ObjC 文件或 Swift 方法导出声明
287
+ - **检视步骤**:
288
+ 1. 从 C++ JSIBinder 提取方法签名列表
289
+ 2. 从 iOS Swift/ObjC 文件读取所有 `RCT_EXPORT_METHOD` 定义及其签名
290
+ 3. 对每个方法,对比 C++ 签名与 iOS 签名的差异
291
+ 4. **判定规则**:同检查项 7,差异与 JS Spec 一致性检查合并计算
292
+ - **扣分规则**:签名差异与 JS Spec 一致性检查合并计算,不独立扣分
293
+ - **输出格式**:
294
+
295
+ ```markdown
296
+ | # | 方法名 | JS Spec 签名 | C++ JSIBinder 签名 | iOS RCT_EXPORT_METHOD 签名 | C++ vs JS Spec 状态 | C++ vs iOS 状态 | 备注 |
297
+ |---|--------|-------------|-------------------|--------------------------|-------------------|---------------|------|
298
+ | 1 | {方法名} | {签名} | {签名} | {签名} | {一致/不一致} | {一致/不一致} | {合并扣分归属} |
299
+ ```
300
+
301
+ #### ③架构桥接一致性
302
+
303
+ ##### 检查项 9:TurboModule 注册完整性
304
+
305
+ - **检查项**:C++ FactoryDelegate 注册名 vs JS 层所有 TurboModuleRegistry 注册名
306
+ - **特征检索方式**:
307
+ - C++ FactoryDelegate:grep `if (name ==` 于 `*Package.h`、`*TurboModuleFactoryDelegate.h/cpp`
308
+ - JS 层:grep `TurboModuleRegistry.getEnforcing` 或 `TurboModuleRegistry.get` 于所有 `*.ts` 文件
309
+ - **检视步骤**:
310
+ 1. 读取 C++ FactoryDelegate.h/cpp,从 `createTurboModule()` 方法中提取所有 `if (name == "TurboModule名")` 条件 → 得到 C++ 已注册 TurboModule 名列表
311
+ 2. 在 JS 层所有 `.ts` 文件中搜索 `TurboModuleRegistry.getEnforcing<Spec>('模块名')` 和 `TurboModuleRegistry.get('模块名')` → 得到 JS 层所有 TurboModule 注册名列表
312
+ 3. 以 JS 层注册名列表为基准,逐一检查 C++ FactoryDelegate 中是否有对应的注册条件
313
+ 4. **判定规则**:JS 层注册了 TurboModule 但 C++ FactoryDelegate 无对应 `if (name == "XXX")` 条件 → C++ 缺失 TurboModule 注册(致命)
314
+ - **扣分规则**:C++ 缺失 TurboModule 注册扣 10 分/个
315
+ - **输出格式**:
316
+
317
+ ```markdown
318
+ | # | TurboModule 名 | JS 层 TurboModuleRegistry 注册 | C++ FactoryDelegate 注册 | C++ 文件:行号 | 状态 | 扣分 |
319
+ |---|--------------|--------------------------|------------------------|-------------|------|------|
320
+ | 1 | {TM名} | ✅ {JS文件:行号} | ✅ {C++文件:行号} / ❌ 无注册 | {文件:行号} | ✅已注册 / ❌缺失注册 | {扣分} |
321
+ ```
322
+
323
+ ---
324
+
325
+ ### 3.2 检查点:返回值(返回值类型与语义一致性)
326
+
327
+ #### 检查项概要
328
+
329
+ | 维度 | # | 检查项 | 致命度 |
330
+ |------|---|--------|--------|
331
+ | ①契约一致性 | 1 | 返回值类型 | 致命 |
332
+ | ①契约一致性 | 2 | 返回值语义 | 严重 |
333
+ | ①契约一致性 | 3 | Promise 处理 | 中等 |
334
+ | ①契约一致性 | 4 | C++ getConstants() | 中等 |
335
+ | ②平台实现差异 | 5 | 返回值 vs Android | — |
336
+ | ②平台实现差异 | 6 | 返回值 vs iOS | — |
337
+ | ③架构桥接一致性 | — | 已在①中覆盖 | — |
338
+
339
+ #### ①契约一致性
340
+
341
+ ##### 检查项 1:返回值类型
342
+
343
+ - **检查项**:C++ TurboModule 方法返回值 vs JS Spec 期望返回值
344
+ - **特征检索方式**:
345
+ - C++ JSIBinder:grep `napi_create_string_utf8`、`napi_create_double`、`napi_create_boolean`、`napi_create_object`、`napi_create_array`、`napi_create_promise`、`napi_create_null`、`napi_create_int32` 等返回值构造函数于 `*JSIBinder.h/cpp`
346
+ - JS Spec:从 Spec 接口提取方法返回值类型声明
347
+ - **检视步骤**:
348
+ 1. 读取 JS Spec,对每个方法提取返回值类型 → 得到 JS Spec 期望返回值类型列表
349
+ 2. 读取 C++ JSIBinder.h/cpp,对每个 HostFunction lambda 提取返回值构造模式 → 建立映射表:
350
+
351
+ ```
352
+ JS Spec 返回类型 → 预期 napi 构造函数:
353
+ string → napi_create_string_utf8
354
+ boolean → napi_create_boolean
355
+ number → napi_create_double / napi_create_int32
356
+ Object → napi_create_object
357
+ Array → napi_create_array
358
+ Promise<T> → napi_create_promise
359
+ void → napi_create_null / napi_get_null
360
+ null → napi_create_null / napi_get_null
361
+ ```
362
+
363
+ 3. 逐一对比每个方法的返回值类型映射
364
+ 4. **判定规则**:C++ 返回值构造函数与 JS Spec 期望返回值类型不对应 → 返回值类型致命错误
365
+ - **扣分规则**:返回值类型错误扣 10 分/个
366
+ - **输出格式**:
367
+
368
+ ```markdown
369
+ | # | 方法名 | JS Spec 返回类型 | 预期 napi 构造 | C++ 实际 napi 构造 | C++ 文件:行号 | 状态 | 扣分 |
370
+ |---|--------|-------------|-------------|-----------------|-------------|------|------|
371
+ | 1 | {方法名} | {JS Spec返回类型} | {预期构造函数} | {实际构造函数} | {文件:行号} | ✅一致 / ❌类型错误 | {扣分} |
372
+ ```
373
+
374
+ ##### 检查项 2:返回值语义
375
+
376
+ - **检查项**:C++ TurboModule 返回内容是否符合接口语义
377
+ - **特征检索方式**:
378
+ - C++ JSIBinder + TurboModule 实现:读取 HostFunction lambda 返回值构造的具体内容
379
+ - JS Spec:读取方法语义描述和返回值文档
380
+ - **检视步骤**:
381
+ 1. 读取 C++ TurboModule 实现代码(JSIBinder 中的 HostFunction lambda 或 TurboModule.cpp 方法实现),验证返回值的具体内容是否正确
382
+ 2. 读取 JS Spec,提取每个方法的语义描述(如方法名 `isFileUploadSupported` 应返回布尔值表示是否支持文件上传)
383
+ 3. 对比 C++ 返回值内容与 JS Spec 语义描述是否一致
384
+ 4. **判定规则**:返回值语义与 JS Spec 描述不一致 → 语义错误;例如方法名暗示返回布尔值但 C++ 固定返回 `napi_create_null`
385
+ - **扣分规则**:语义错误扣 8 分/个
386
+ - **输出格式**:
387
+
388
+ ```markdown
389
+ | # | 方法名 | JS Spec 返回语义 | C++ 返回值内容 | C++ 文件:行号 | 语义一致性 | 扣分 |
390
+ |---|--------|-------------|-----------|-------------|---------|------|
391
+ | 1 | {方法名} | {语义描述} | {实际返回内容} | {文件:行号} | ✅一致 / ❌语义错误 | {扣分} |
392
+ ```
393
+
394
+ ##### 检查项 3:Promise 处理
395
+
396
+ - **检查项**:异步方法是否正确返回 Promise
397
+ - **特征检索方式**:
398
+ - C++ JSIBinder:grep `napi_create_promise`、`napi_resolve_deferred`、`napi_reject_deferred` 于 `*JSIBinder.h/cpp`
399
+ - JS Spec:从 Spec 接口提取返回 `Promise<T>` 的方法
400
+ - **检视步骤**:
401
+ 1. 读取 JS Spec,识别所有返回值为 `Promise<T>` 的异步方法
402
+ 2. 读取 C++ JSIBinder.h/cpp,对每个异步方法检查是否使用了 `napi_create_promise` 创建 Promise
403
+ 3. 检查 Promise 的 resolve/reject 模式:是否有 `napi_resolve_deferred` 和 `napi_reject_deferred` 的正确调用
404
+ 4. **判定规则**:JS Spec 标记为异步方法但 C++ 未使用 Promise 模式 → Promise 处理不正确;C++ 使用了 Promise 但未正确 resolve/reject → Promise 不完整
405
+ - **扣分规则**:不正确扣 6 分/个
406
+ - **输出格式**:
407
+
408
+ ```markdown
409
+ | # | 方法名 | JS Spec 返回类型 | C++ Promise 创建 | C++ resolve/reject | C++ 文件:行号 | 状态 | 扣分 |
410
+ |---|--------|-------------|---------------|------------------|-------------|------|------|
411
+ | 1 | {方法名} | Promise<T> | ✅ napi_create_promise / ❌ 未创建 | ✅ resolve+reject / ⚠️ 不完整 / ❌ 缺失 | {文件:行号} | ✅正确 / ❌不正确 | {扣分} |
412
+ ```
413
+
414
+ ##### 检查项 4:C++ getConstants()
415
+
416
+ - **检查项**:C++ TurboModule getConstants() vs JS Spec 常量定义
417
+ - **特征检索方式**:
418
+ - C++ TurboModule:grep `getConstants` 于 `*TurboModule.h/cpp`,提取常量名和值
419
+ - JS Spec:从 Spec 文件读取常量定义
420
+ - **检视步骤**:
421
+ 1. 读取 C++ TurboModule.h/cpp 文件,定位 `getConstants()` 方法,提取所有常量名及其值 → 得到 C++ 常量列表
422
+ 2. 读取 JS Spec 文件,提取所有常量定义(通常在 Spec 接口的常量部分) → 得到 JS Spec 常量列表
423
+ 3. 以 JS Spec 常量列表为基准,逐一检查 C++ getConstants() 中是否包含对应常量
424
+ 4. **判定规则**:JS Spec 定义了常量但 C++ getConstants() 缺失该常量 → C++ 缺失常量
425
+ - **扣分规则**:C++ 缺失常量扣 5 分/个
426
+ - **输出格式**:
427
+
428
+ ```markdown
429
+ | # | 常量名 | JS Spec 常量定义 | C++ getConstants() 常量 | C++ 常量值 | C++ 文件:行号 | 状态 | 扣分 |
430
+ |---|--------|-------------|-------------------|---------|-------------|------|------|
431
+ | 1 | {常量名} | ✅ {Spec文件:行号} | ✅ 有 / ❌ 缺失 | {值} | {文件:行号} | ✅一致 / ❌缺失 | {扣分} |
432
+ ```
433
+
434
+ #### ②平台实现差异
435
+
436
+ ##### 检查项 5:返回值 vs Android
437
+
438
+ - **检查项**:C++ TurboModule 返回值 vs Android @ReactMethod 返回值
439
+ - **特征检索方式**:
440
+ - C++ JSIBinder:grep 返回值构造函数于 `*JSIBinder.h/cpp`
441
+ - Android:grep `@ReactMethod` 注解方法返回类型于 Java/Kotlin 文件
442
+ - **检视步骤**:
443
+ 1. 从 C++ JSIBinder 提取方法返回值类型列表
444
+ 2. 从 Android Java/Kotlin 文件读取 `@ReactMethod` 方法的返回值类型
445
+ 3. 对每个方法,对比 C++ 返回值与 Android 返回值
446
+ 4. **判定规则**:C++ 与 Android 返回值差异不独立扣分,与 JS Spec 一致性检查合并计算
447
+ - **扣分规则**:与 JS Spec 一致性检查合并计算,不独立扣分
448
+ - **输出格式**:
449
+
450
+ ```markdown
451
+ | # | 方法名 | JS Spec 返回类型 | C++ 返回值类型 | Android 返回值类型 | C++ vs JS Spec 状态 | C++ vs Android 状态 | 备注 |
452
+ |---|--------|-------------|-------------|-----------------|-------------------|-------------------|------|
453
+ | 1 | {方法名} | {类型} | {类型} | {类型} | {一致/不一致} | {一致/不一致} | {合并扣分归属} |
454
+ ```
455
+
456
+ ##### 检查项 6:返回值 vs iOS
457
+
458
+ - **检查项**:C++ TurboModule 返回值 vs iOS RCT_EXPORT_METHOD 返回值
459
+ - **特征检索方式**:
460
+ - C++ JSIBinder:grep 返回值构造函数于 `*JSIBinder.h/cpp`
461
+ - iOS:grep `RCT_EXPORT_METHOD` 返回类型于 ObjC/Swift 文件
462
+ - **检视步骤**:
463
+ 1. 从 C++ JSIBinder 提取方法返回值类型列表
464
+ 2. 从 iOS Swift/ObjC 文件读取方法返回值类型
465
+ 3. 对每个方法,对比 C++ 返回值与 iOS 返回值
466
+ 4. **判定规则**:同检查项 5,差异与 JS Spec 一致性检查合并计算
467
+ - **扣分规则**:与 JS Spec 一致性检查合并计算,不独立扣分
468
+ - **输出格式**:
469
+
470
+ ```markdown
471
+ | # | 方法名 | JS Spec 返回类型 | C++ 返回值类型 | iOS 返回值类型 | C++ vs JS Spec 状态 | C++ vs iOS 状态 | 备注 |
472
+ |---|--------|-------------|-------------|-------------|-------------------|---------------|------|
473
+ | 1 | {方法名} | {类型} | {类型} | {类型} | {一致/不一致} | {一致/不一致} | {合并扣分归属} |
474
+ ```
475
+
476
+ #### ③架构桥接一致性
477
+
478
+ (返回值的架构桥接在①契约一致性中已覆盖)
479
+
480
+ ---
481
+
482
+ ### 3.3 检查点:实现逻辑(C++→ArkTS 映射、回调绑定一致性)
483
+
484
+ #### 检查项概要
485
+
486
+ | 维度 | # | 检查项 | 致命度 |
487
+ |------|---|--------|--------|
488
+ | ①契约一致性 | — | N/A(实现逻辑不属于契约维度) | — |
489
+ | ②平台实现差异 | 1 | C++→ArkTS 映射 | 严重 |
490
+ | ②平台实现差异 | 2 | C++ 回调绑定 | 严重 |
491
+ | ②平台实现差异 | 3 | C++ 回调参数类型 | 致命 |
492
+ | ③架构桥接一致性 | — | 已在②中覆盖 | — |
493
+
494
+ > 📖 **ArkTS TurboModule 方法实现完整性检视**(方法存在性、签名一致性、Stub 检测等)详见 [ARKTS_TURBOMODULE_CHECK_GUIDE.md](ARKTS_TURBOMODULE_CHECK_GUIDE.md) 第 3.2-3.3 节。
495
+
496
+ #### ①契约一致性
497
+
498
+ (实现逻辑不属于契约维度)
499
+
500
+ #### ②平台实现差异
501
+
502
+ ##### 检查项 1:C++→ArkTS 映射
503
+
504
+ - **检查项**:C++ FactoryDelegate `std::make_shared<XxxTurboModule>` 类名 vs ArkTS 实际 TurboModule 类名
505
+ - **特征检索方式**:
506
+ - C++ FactoryDelegate:grep `std::make_shared<` 于 `*Package.h`、`*TurboModuleFactoryDelegate.h/cpp`
507
+ - ArkTS TurboModule:读取 `*TurboModule.ets` 文件中的类声明
508
+ - **检视步骤**:
509
+ 1. 读取 C++ FactoryDelegate.h/cpp,从 `createTurboModule()` 方法中提取所有 `std::make_shared<XxxTurboModule>(ctx, name)` 构造调用 → 得到 C++ 构造类名列表
510
+ 2. 读取 ArkTS TurboModule.ets 文件,提取 TurboModule 实现类名(如 `class RNCWebViewModule extends TurboModule`)→ 得到 ArkTS TurboModule 类名列表
511
+ 3. 逐一对比每个 TurboModule 的 C++ 构造类名与 ArkTS 实际类名
512
+ 4. **判定规则**:C++ `std::make_shared<XxxTurboModule>` 中的类名必须与 ArkTS TurboModule.ets 中的类名一致;不匹配 → 类名映射错误
513
+ - **扣分规则**:不匹配扣 8 分/个
514
+ - **输出格式**:
515
+
516
+ ```markdown
517
+ | # | TurboModule 名 | C++ 构造类名 | C++ 文件:行号 | ArkTS TurboModule 类名 | ArkTS 文件:行号 | 状态 | 扣分 |
518
+ |---|--------------|------------|-------------|---------------------|-------------|------|------|
519
+ | 1 | {TM名} | {std::make_shared<类名>} | {文件:行号} | {ArkTS class名} | {文件:行号} | ✅一致 / ❌不匹配 | {扣分} |
520
+ ```
521
+
522
+ ##### 检查项 2:C++ 回调绑定
523
+
524
+ - **检查项**:JS Spec 回调方法是否在 C++ JSIBinder 中有 HostFunction 注册
525
+ - **特征检索方式**:
526
+ - JS Spec:识别接受 Function 类型参数的方法(回调方法)
527
+ - C++ JSIBinder:grep `napi_get_function` 或 Function 参数处理于 `*JSIBinder.h/cpp`
528
+ - **检视步骤**:
529
+ 1. 读取 JS Spec,识别所有回调类型方法(方法参数类型包含 `Function` 或 `(callback: (...args) => void)` 的方法) → 得到 JS Spec 回调方法列表
530
+ 2. 读取 C++ JSIBinder.h/cpp,检查这些回调方法是否有对应的 HostFunction 注册
531
+ 3. 对每个回调方法,检查 C++ JSIBinder 中是否正确处理了 Function 参数(是否有 `napi_get_function` 提取回调函数并绑定)
532
+ 4. **判定规则**:JS Spec 定义了回调方法但 C++ JSIBinder 无对应 HostFunction 注册 → 回调绑定缺失
533
+ - **扣分规则**:C++ 缺失回调绑定扣 8 分/个
534
+ - **输出格式**:
535
+
536
+ ```markdown
537
+ | # | 回调方法名 | JS Spec 回调参数 | C++ JSIBinder HostFunction | C++ 回调处理 | C++ 文件:行号 | 状态 | 扣分 |
538
+ |---|----------|-------------|--------------------------|-----------|-------------|------|------|
539
+ | 1 | {方法名} | {callback参数签名} | ✅ 有注册 / ❌ 无注册 | ✅ napi_get_function / ❌ 缺失 | {文件:行号} | ✅已绑定 / ❌缺失 | {扣分} |
540
+ ```
541
+
542
+ ##### 检查项 3:C++ 回调参数类型
543
+
544
+ - **检查项**:C++ JSIBinder 回调参数类型映射
545
+ - **特征检索方式**:
546
+ - C++ JSIBinder:在回调 HostFunction lambda 中提取回调参数的 napi 类型转换模式
547
+ - JS Spec:从回调方法的 Function 参数类型签名提取回调参数类型
548
+ - **检视步骤**:
549
+ 1. 读取 JS Spec,对每个回调方法提取 Function 参数的回调参数类型签名(如 `(success: boolean, error: string) => void`)→ 得到 JS Spec 回调参数类型列表
550
+ 2. 读取 C++ JSIBinder.h/cpp,对每个回调 HostFunction 提取回调参数的 napi 类型转换模式(回调调用时的参数构造,如 `napi_create_boolean`、`napi_create_string_utf8`)→ 得到 C++ 回调参数类型映射列表
551
+ 3. 逐一对比回调参数的类型映射
552
+ 4. **判定规则**:C++ 回调参数 napi 类型与 JS Spec 回调参数类型不对应 → 回调参数类型致命错误
553
+ - **扣分规则**:类型错误扣 10 分/个
554
+ - **输出格式**:
555
+
556
+ ```markdown
557
+ | # | 回调方法名 | 回调参数名 | JS Spec 回调参数类型 | 预期 napi 构造 | C++ 实际 napi 构造 | C++ 文件:行号 | 状态 | 扣分 |
558
+ |---|----------|---------|-------------|-------------|-----------------|-------------|------|------|
559
+ | 1 | {方法名} | {参数名} | {类型} | {预期构造函数} | {实际构造函数} | {文件:行号} | ✅一致 / ❌类型错误 | {扣分} |
560
+ ```
561
+
562
+ #### ③架构桥接一致性
563
+
564
+ (已在②平台实现差异中覆盖)
565
+
566
+ > 📖 **ArkTS TurboModule 常量导出检视**详见 [ARKTS_TURBOMODULE_CHECK_GUIDE.md](ARKTS_TURBOMODULE_CHECK_GUIDE.md) 第 3.4 节。
567
+ > 📖 **ArkTS TurboModule 回调/事件检视**详见 [ARKTS_TURBOMODULE_CHECK_GUIDE.md](ARKTS_TURBOMODULE_CHECK_GUIDE.md) 第 3.5 节。
568
+
569
+ ---
570
+
571
+ ## 4. 方法级对比格式
572
+
573
+ ### 4.1 TurboModule 方法签名对比(C++ 层)
574
+
575
+ > 📖 **ArkTS TurboModule 方法签名对比**详见 [ARKTS_TURBOMODULE_CHECK_GUIDE.md](ARKTS_TURBOMODULE_CHECK_GUIDE.md) 第 2.2 维度 B。
576
+
577
+ ```markdown
578
+ | # | 方法名 | JS Spec 签名 | C++ JSIBinder 签名 | C++ 文件:行号 | C++ 绑定状态 | 扣分 |
579
+ |---|--------|-------------|-------------------|-------------|-------------|------|
580
+ | 1 | `isFileUploadSupported` | `(): Promise<boolean>` | `SharedTurboModule → resolve bool` | `RNCWebViewModuleJSIBinder.h:12` | ✅ 一致 | 0 |
581
+ | 2 | `shouldStartLoadWithLockIdentifier` | `(shouldStart: boolean, lockIdentifier: Double): void` | `(bool, double) → void` | `RNCWebViewModuleJSIBinder.h:18` | ✅ 一致 | 0 |
582
+ ```
583
+
584
+ ### 4.2 TurboModule 跨层一致性对比(C++ 层视角)
585
+
586
+ > 📖 **ArkTS TurboModule Stub 检测**详见 [ARKTS_TURBOMODULE_CHECK_GUIDE.md](ARKTS_TURBOMODULE_CHECK_GUIDE.md) 第 2.2 维度 C。
587
+
588
+ ```markdown
589
+ | # | TurboModule 名 | JS Spec 定义 | JS Spec 注册名 | C++ FactoryDelegate | C++ JSIBinder | C++ 文件 | 状态 | 扣分 |
590
+ |---|--------------|------------|--------------|--------------------|-------------|---------|------|------|
591
+ | 1 | `RNCWebViewModule` | `NativeRNCWebViewModule.ts` | `RNCWebViewModule` | ✅ BaseReactNativeWebviewPackageTurboModuleFactoryDelegate | ✅ RNCWebViewModuleJSIBinder | `BaseReactNativeWebviewPackage.h:22` | ✅ C++ 层一致 | 0 |
592
+ ```
593
+
594
+ > 📖 **ArkTS TurboModule 层补充列**(ArkTS 实现类、ArkTS NAME 常量、ArkTS 方法签名)详见 [ARKTS_TURBOMODULE_CHECK_GUIDE.md](ARKTS_TURBOMODULE_CHECK_GUIDE.md) 第 5.1 节全链路对比表。
595
+
596
+ ---
597
+
598
+ ## 5. Stub 检测指引
599
+
600
+ > 📖 **ArkTS TurboModule Stub 检测与合理性判定**已独立为 [ARKTS_TURBOMODULE_CHECK_GUIDE.md](ARKTS_TURBOMODULE_CHECK_GUIDE.md) 第 3.3 节和第 2.2 维度 C。
601
+
602
+ 本指南(C++ 层)不直接执行 Stub 检测,因为 Stub 是 ArkTS TurboModule 实现层的概念。但 C++ JSIBinder 层可能存在以下问题:
603
+
604
+ | C++ 层问题 | 识别方式 | 扣分 |
605
+ |----------|----------|------|
606
+ | C++ JSIBinder 方法缺失 | JS Spec 定义了方法但 C++ JSIBinder 无 HostFunction 注册 | -10/方法 |
607
+ | C++ JSIBinder 参数类型错误 | napi 类型转换与 JS Spec 不一致 | -10/方法 |
608
+ | C++ JSIBinder 方法名不匹配 | HostFunction 方法名与 JS Spec 方法名不一致 | -8/方法 |
609
+
610
+ ---
611
+
612
+ ## 6. 检视操作流程
613
+
614
+ ### 6.1 Phase 0 补充步骤(TurboModule C++ 层定位)
615
+
616
+ ```
617
+ TM-1: 定位 TurboModuleFactoryDelegate
618
+ → Codegen: 读取 generated/RNOH/generated/BaseReactNative*Package.h
619
+ → Legacy: 读取 *Package.h 或 *TurboModuleFactoryDelegate.h
620
+
621
+ TM-2: 提取 TurboModule 名列表
622
+ → 从 createTurboModule() 方法的 if 条件中提取所有 TurboModule 名
623
+ → 对比 JS 层 TurboModuleRegistry.getEnforcing<Spec>('XXX') 的模块名
624
+
625
+ TM-3: 定位 TurboModule JSIBinder(若存在)
626
+ → 搜索 generated/RNOH/generated/turbo_modules/*JSIBinder.h
627
+ → 搜索 cpp/*TurboModule*JSIBinder.h
628
+ ```
629
+
630
+ > 📖 **ArkTS TurboModule 定位步骤**(TM-ARK-1~4)详见 [ARKTS_TURBOMODULE_CHECK_GUIDE.md](ARKTS_TURBOMODULE_CHECK_GUIDE.md) 第 6.1 节。
631
+
632
+ ### 6.2 Phase 3 补充步骤(TurboModule C++ 层分析)
633
+
634
+ ```
635
+ TM-5: TurboModule 注册完整性对比
636
+ → C++ FactoryDelegate TurboModule 名 vs JS Spec TurboModule 名
637
+ → 标注缺失的 TurboModule 注册
638
+
639
+ TM-6: TurboModule JSIBinder 方法级对比(C++ 层)
640
+ → JS Spec 方法签名 vs C++ JSIBinder 方法签名
641
+ → 标注 C++ JSIBinder 方法缺失、类型映射错误
642
+
643
+ TM-7: TurboModule C++→ArkTS 映射对比
644
+ → C++ FactoryDelegate 构造类名 vs ArkTS TurboModule 类名
645
+ → C++ 注册名 vs ArkTS NAME 常量
646
+ ```
647
+
648
+ > 📖 **ArkTS TurboModule 分析步骤**(TM-ARK-5~11)详见 [ARKTS_TURBOMODULE_CHECK_GUIDE.md](ARKTS_TURBOMODULE_CHECK_GUIDE.md) 第 6.2 节。
649
+
650
+ ---
651
+
652
+ ## 7. 报告输出格式
653
+
654
+ 在一致性检视报告的"5.8 RN 架构一致性检视"中增加以下子章节(C++ 层部分):
655
+
656
+ > 📖 **ArkTS TurboModule 层报告输出格式**详见 [ARKTS_TURBOMODULE_CHECK_GUIDE.md](ARKTS_TURBOMODULE_CHECK_GUIDE.md) 第 7 节。
657
+
658
+ ```markdown
659
+ #### C++ TurboModule 层一致性(如适用)
660
+
661
+ **C++ TurboModule 模式**:{Codegen / Legacy / ⚠️ 无 C++ TurboModule 层}
662
+
663
+ | # | TurboModule 名 | JS Spec 注册名 | C++ FactoryDelegate | C++ JSIBinder | C++ 文件 | 状态 | 扣分 |
664
+ |---|--------------|--------------|--------------------|-------------|---------|------|------|
665
+ | ... | ... | ... | ... | ... | ... | ... | ... |
666
+
667
+ **TurboModule JSIBinder 方法级对比(C++ 层)**:
668
+
669
+ | # | 方法名 | JS Spec 签名 | C++ JSIBinder 签名 | C++ 文件:行号 | C++ 绑定状态 | 扣分 |
670
+ |---|--------|-------------|-------------------|-------------|-------------|------|
671
+ | ... | ... | ... | ... | ... | ... | ... |
672
+ ```
673
+
674
+ ---
675
+
676
+ ## 8. 与 ARKTS_TURBOMODULE_CHECK_GUIDE 的协同
677
+
678
+ 本指南仅覆盖 **C++ TurboModule 层**(FactoryDelegate + JSIBinder),ArkTS TurboModule 层(实现类 + 方法完整性 + Stub + 常量 + 回调)已独立为 [ARKTS_TURBOMODULE_CHECK_GUIDE.md](ARKTS_TURBOMODULE_CHECK_GUIDE.md)。
679
+
680
+ 检视执行顺序建议:
681
+
682
+ 1. **先执行本指南** → 获得 C++ FactoryDelegate 注册名、JSIBinder 方法列表
683
+ 2. **再执行 ARKTS_TURBOMODULE_CHECK_GUIDE** → 获得 ArkTS TurboModule 类声明、方法实现、Stub 检测、常量导出、回调/事件
684
684
  3. **合并两张表** → 以 TurboModule 名为主键,拼接 C++ 层列和 ArkTS 层列,生成完整全链路一致性分析