@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.
- package/README.md +290 -244
- package/bin/3rdloop.mjs +46 -46
- package/lib/cli.js +781 -781
- package/lib/config-cmd.js +451 -451
- package/lib/config.js +318 -318
- package/lib/doctor.js +113 -113
- package/lib/exit-codes.js +30 -30
- package/lib/opencode.js +155 -155
- package/lib/orch.js +426 -426
- package/lib/queries.js +263 -263
- package/lib/step.js +325 -325
- package/lib/ui.js +222 -222
- package/lib/update.js +279 -279
- package/lib/workflow.js +308 -308
- package/lib/workflows.js +131 -131
- package/package.json +50 -50
- package/vendor/Server/Agent/SkillSelector/README.md +343 -343
- package/vendor/Server/Agent/SkillSelector/core/Agent.js +207 -207
- package/vendor/Server/Agent/SkillSelector/index.js +14 -14
- package/vendor/Server/Agent/SkillSelector/llm/llmClient.js +313 -313
- package/vendor/Server/Agent/SkillSelector/llm/prompts.js +161 -161
- package/vendor/Server/Agent/SkillSelector/llm/reactSteps.js +144 -144
- package/vendor/Server/Agent/SkillSelector/matcher/fuzzyMatcher.js +433 -433
- package/vendor/Server/Agent/SkillSelector/scanner/skillScanner.js +382 -382
- package/vendor/Server/Agent/SkillSelector/utils/actionWords.js +59 -59
- package/vendor/Server/Brain/AnalysisStrategies.js +422 -422
- package/vendor/Server/Brain/Brain.js +686 -686
- package/vendor/Server/Brain/DecompositionStrategies.js +621 -621
- package/vendor/Server/Brain/PlanPersistence.js +196 -196
- package/vendor/Server/Brain/SkillExecutor.js +251 -251
- package/vendor/Server/Brain/index.js +11 -11
- package/vendor/Server/CLI/cli.js +275 -275
- package/vendor/Server/CLI/deveco-code/index.js +71 -71
- package/vendor/Server/CLI/deveco-code.js +5 -5
- package/vendor/Server/CLI/opencode/index.js +817 -818
- package/vendor/Server/CLI/opencode.js +5 -5
- package/vendor/Server/DbUse/MessageArchive.js +61 -61
- package/vendor/Server/DbUse/StorageManager.js +107 -107
- package/vendor/Server/DbUse/adapters/BaseAdapter.js +94 -94
- package/vendor/Server/DbUse/adapters/FileAdapter.js +138 -138
- package/vendor/Server/DbUse/adapters/JsonAdapter.js +138 -138
- package/vendor/Server/DbUse/adapters/JsonlAdapter.js +114 -114
- package/vendor/Server/DbUse/adapters/SqliteAdapter.js +157 -157
- package/vendor/Server/DbUse/index.js +160 -160
- package/vendor/Server/DbUse/stores/SessionStore.js +279 -279
- package/vendor/Server/DbUse/stores/TaskExecutionStore.js +133 -133
- package/vendor/Server/DbUse/stores/TaskRegistryStore.js +262 -262
- package/vendor/Server/DbUse/stores/TaskStepStore.js +279 -279
- package/vendor/Server/FlexRunner/FlexRunner.js +1759 -1759
- package/vendor/Server/FlexRunner/index.js +12 -12
- package/vendor/Server/Knowledge/KnowledgeImporter.js +523 -523
- package/vendor/Server/Knowledge/KnowledgeManager.js +341 -341
- package/vendor/Server/Knowledge/index.js +33 -33
- package/vendor/Server/LoopEngine/LoopEngine.js +1133 -1133
- package/vendor/Server/LoopEngine/index.js +11 -11
- package/vendor/Server/Orchestrator/Orchestrator.js +0 -3
- package/vendor/Server/Orchestrator/StepNode.js +312 -312
- package/vendor/Server/Orchestrator/index.js +13 -13
- package/vendor/Server/Routes/controllers/BrainController.js +241 -241
- package/vendor/Server/Routes/controllers/FlexRunnerController.js +1125 -1125
- package/vendor/Server/Routes/controllers/HealthController.js +44 -44
- package/vendor/Server/Routes/controllers/KnowledgeImportController.js +355 -355
- package/vendor/Server/Routes/controllers/LoopEngineController.js +788 -788
- package/vendor/Server/Routes/controllers/StatsController.js +57 -57
- package/vendor/Server/Routes/controllers/StreamController.js +67 -67
- package/vendor/Server/Routes/library/logger.js +179 -179
- package/vendor/Server/Routes/library/zipArchive.js +172 -172
- package/vendor/Server/Routes/router/Router.js +204 -204
- package/vendor/Server/Routes/routes/brain.js +47 -47
- package/vendor/Server/Routes/routes/flexrunner.js +72 -72
- package/vendor/Server/Routes/routes/health.js +28 -28
- package/vendor/Server/Routes/routes/index.js +57 -57
- package/vendor/Server/Routes/routes/knowledge.js +55 -55
- package/vendor/Server/Routes/routes/loopengine.js +58 -58
- package/vendor/Server/Routes/routes/orchestrator.js +61 -61
- package/vendor/Server/Routes/routes/registry.js +97 -97
- package/vendor/Server/Routes/routes/stats.js +23 -23
- package/vendor/Server/Routes/routes/stream.js +30 -30
- package/vendor/Server/Routes/server.js +203 -203
- package/vendor/Server/Routes/sse/SseHub.js +308 -308
- package/vendor/Server/Skills/acceptance-check/SKILL.md +191 -191
- package/vendor/Server/Skills/acceptance-check/references/PHASE1_ARTIFACT_COLLECTION.md +52 -52
- package/vendor/Server/Skills/acceptance-check/references/PHASE2_CRITERIA_EVALUATION.md +77 -77
- package/vendor/Server/Skills/acceptance-check/references/PHASE2_EVIDENCE_VERIFICATION.md +70 -70
- package/vendor/Server/Skills/arkts-code-check/SKILL.md +320 -320
- package/vendor/Server/Skills/arkts-code-check/references/CODE_CHECK_GUIDE.md +210 -210
- package/vendor/Server/Skills/arkts-code-check/references/FILE_TYPE_GUIDE.md +28 -28
- package/vendor/Server/Skills/arkts-code-check/references/PHASE1_INFO_COLLECTION.md +233 -233
- package/vendor/Server/Skills/arkts-code-check/references/REPORT_TEMPLATE.md +219 -219
- package/vendor/Server/Skills/arkts-library-compile-validate/SKILL.md +328 -328
- package/vendor/Server/Skills/arkts-library-compile-validate/scripts/build.ps1 +93 -93
- package/vendor/Server/Skills/arkts-library-compile-validate/scripts/code-linter.cjs +432 -432
- package/vendor/Server/Skills/arkts-library-compile-validate/scripts/migrate.cjs +851 -851
- package/vendor/Server/Skills/arkts-library-compile-validate/scripts/ohpm-switch.cjs +788 -788
- package/vendor/Server/Skills/arkts-library-demo-code/SKILL.md +291 -291
- package/vendor/Server/Skills/arkts-library-demo-code/references/API_SIGNATURE_CHECKS.md +68 -68
- package/vendor/Server/Skills/arkts-library-demo-code/references/BUILD_VALIDATION.md +184 -184
- package/vendor/Server/Skills/arkts-library-demo-code/references/CODE_STANDARDS.md +337 -337
- package/vendor/Server/Skills/arkts-library-demo-code/references/EXAMPLES.md +400 -400
- package/vendor/Server/Skills/arkts-library-demo-code/references/SYSTEM_API_LOOKUP.md +98 -98
- package/vendor/Server/Skills/arkts-library-demo-code/references/TEMPLATE.md +544 -544
- package/vendor/Server/Skills/arkts-library-demo-code/scripts/build.ps1 +93 -93
- package/vendor/Server/Skills/arkts-library-demo-code/scripts/code-linter.cjs +432 -432
- package/vendor/Server/Skills/arkts-library-demo-code/scripts/migrate.cjs +851 -851
- package/vendor/Server/Skills/arkts-library-demo-code/scripts/ohpm-switch.cjs +788 -788
- package/vendor/Server/Skills/arkts-library-demo-coverage/SKILL.md +174 -174
- package/vendor/Server/Skills/arkts-library-demo-scenario/SKILL.md +321 -321
- package/vendor/Server/Skills/arkts-library-demo-scenario/references/EXAMPLES.md +100 -100
- package/vendor/Server/Skills/arkts-library-demo-scenario/references/TEMPLATE.md +185 -185
- package/vendor/Server/Skills/arkts-library-documentation-quality-check/SKILL.md +233 -233
- package/vendor/Server/Skills/arkts-library-documentation-quality-check/assets/REPORT_TEMPLATE.md +102 -102
- package/vendor/Server/Skills/arkts-library-documentation-quality-check/references/CHECK_DIMENSIONS.md +89 -89
- package/vendor/Server/Skills/arkts-library-documentation-quality-check/references/COMPLIANCE_CHECKLIST.md +62 -62
- package/vendor/Server/Skills/arkts-library-documentation-quality-check/references/KB_QUERY_GUIDE.md +107 -107
- package/vendor/Server/Skills/arkts-library-documentation-quality-check/references/MCP_TOOL_DISCOVERY.md +124 -124
- package/vendor/Server/Skills/arkts-library-documentation-quality-check/references/REPORT_TEMPLATE.md +90 -90
- package/vendor/Server/Skills/arkts-library-documentation-quality-check/references/SCORING_FORMULA.md +57 -57
- package/vendor/Server/Skills/arkts-library-documentation-quality-check/scripts/validate-skill.cjs +259 -259
- package/vendor/Server/Skills/arkts-library-interface-spec/SKILL.md +97 -97
- package/vendor/Server/Skills/arkts-library-memory-leak-check/SKILL.md +391 -391
- package/vendor/Server/Skills/arkts-library-source-clone/SKILL.md +113 -113
- package/vendor/Server/Skills/arkts-library-stability-check/SKILL.md +312 -312
- package/vendor/Server/Skills/arkts-library-stability-check/assets/REPORT_TEMPLATE.md +154 -154
- package/vendor/Server/Skills/arkts-library-stability-check/references/CHECKLIST.md +165 -165
- package/vendor/Server/Skills/arkts-library-stability-check/references/CODE_EXAMPLES.md +308 -308
- package/vendor/Server/Skills/arkts-library-stability-check/references/SCORING_RULES.md +90 -90
- package/vendor/Server/Skills/arkts-library-stability-check/scripts/validate-skill.cjs +282 -282
- package/vendor/Server/Skills/arkts-library-test-coverage-check/SKILL.md +360 -360
- package/vendor/Server/Skills/arkts-library-test-coverage-check/assets/REPORT_TEMPLATE.md +145 -145
- package/vendor/Server/Skills/arkts-library-test-coverage-check/references/CHECKLIST.md +252 -252
- package/vendor/Server/Skills/arkts-library-test-coverage-check/references/MCP_TOOL_USAGE.md +114 -114
- package/vendor/Server/Skills/arkts-library-test-coverage-check/scripts/validate-skill.cjs +262 -262
- package/vendor/Server/Skills/arkts-library-xts-code/SKILL.md +455 -455
- package/vendor/Server/Skills/arkts-library-xts-code/assets/report-template.md +60 -60
- package/vendor/Server/Skills/arkts-library-xts-code/references/ACCESS_MODIFIER_PRECHECK.md +76 -76
- package/vendor/Server/Skills/arkts-library-xts-code/references/BUILD_VERIFICATION.md +200 -200
- package/vendor/Server/Skills/arkts-library-xts-code/references/CODE_STANDARDS.md +518 -518
- package/vendor/Server/Skills/arkts-library-xts-code/references/SUBAGENT_PROMPT_TEMPLATE.md +276 -276
- package/vendor/Server/Skills/arkts-library-xts-code/references/SYSTEM_API_LOOKUP.md +92 -92
- package/vendor/Server/Skills/arkts-library-xts-code/references/XTS_TEMPLATE.md +767 -767
- package/vendor/Server/Skills/arkts-library-xts-code/scripts/build.ps1 +93 -93
- package/vendor/Server/Skills/arkts-library-xts-code/scripts/code-linter.cjs +432 -432
- package/vendor/Server/Skills/arkts-library-xts-code/scripts/migrate.cjs +851 -851
- package/vendor/Server/Skills/arkts-library-xts-code/scripts/ohpm-switch.cjs +788 -788
- package/vendor/Server/Skills/arkts-library-xts-code/scripts/precheck-access-modifiers.cjs +221 -221
- package/vendor/Server/Skills/arkts-library-xts-code-fix/SKILL.md +228 -228
- package/vendor/Server/Skills/arkts-library-xts-coverage/SKILL.md +97 -97
- package/vendor/Server/Skills/arkts-library-xts-doc/SKILL.md +194 -194
- package/vendor/Server/Skills/arkts-library-xts-doc/references/EXAMPLES.md +575 -575
- package/vendor/Server/Skills/arkts-library-xts-doc/references/TEMPLATE.md +574 -574
- package/vendor/Server/Skills/arkts-library-xts-doc/references/TESTABILITY_GUIDE.md +182 -182
- package/vendor/Server/Skills/arkts-library-xts-execution/SKILL.md +490 -490
- package/vendor/Server/Skills/arkts-library-xts-execution/references/error-fixing-examples.md +217 -217
- package/vendor/Server/Skills/arkts-library-xts-execution/scripts/build.ps1 +93 -93
- package/vendor/Server/Skills/arkts-library-xts-execution/scripts/code-linter.cjs +432 -432
- package/vendor/Server/Skills/arkts-library-xts-execution/scripts/migrate.cjs +851 -851
- package/vendor/Server/Skills/arkts-library-xts-execution/scripts/ohpm-switch.cjs +788 -788
- package/vendor/Server/Skills/flutter-code-check/SKILL.md +299 -299
- package/vendor/Server/Skills/flutter-code-check/assets/OUTPUT_TEMPLATE.md +311 -311
- package/vendor/Server/Skills/flutter-code-check/references/CHECKLIST.md +190 -190
- package/vendor/Server/Skills/flutter-code-check/references/PLATFORMS.md +133 -133
- package/vendor/Server/Skills/flutter-code-check/scripts/validate-skill.cjs +259 -259
- package/vendor/Server/Skills/flutter-interface/README.md +75 -75
- package/vendor/Server/Skills/flutter-interface/SKILL.md +291 -291
- package/vendor/Server/Skills/flutter-interface/references/EXAMPLES.md +336 -336
- package/vendor/Server/Skills/flutter-interface/references/GIT_CLONE_GUIDE.md +190 -190
- package/vendor/Server/Skills/flutter-interface/references/SCRIPT_REFERENCE.md +258 -258
- package/vendor/Server/Skills/flutter-interface/references/TEMPLATE.md +254 -254
- package/vendor/Server/Skills/flutter-library-consistency-check/SKILL.md +517 -517
- package/vendor/Server/Skills/flutter-library-consistency-check/references/CHECKLIST.md +381 -381
- package/vendor/Server/Skills/flutter-library-consistency-check/references/FUNCTION_COMPARISON_GUIDE.md +341 -341
- package/vendor/Server/Skills/flutter-library-consistency-check/references/PLATFORM_LIMITATION_GUIDE.md +71 -71
- package/vendor/Server/Skills/flutter-library-documentation-quality-check/SKILL.md +518 -518
- package/vendor/Server/Skills/flutter-library-documentation-quality-check/references/CHECKLIST.md +406 -406
- package/vendor/Server/Skills/flutter-library-memory-leak-check/SKILL.md +652 -652
- package/vendor/Server/Skills/flutter-library-memory-leak-check/references/CHECKLIST.md +396 -396
- package/vendor/Server/Skills/flutter-library-stability-check/SKILL.md +744 -744
- package/vendor/Server/Skills/flutter-library-stability-check/references/CHECKLIST.md +720 -720
- package/vendor/Server/Skills/flutter-library-test-coverage-check/SKILL.md +414 -414
- package/vendor/Server/Skills/flutter-library-test-coverage-check/assets/REPORT_TEMPLATE.md +150 -150
- package/vendor/Server/Skills/flutter-library-test-coverage-check/references/CHECKLIST.md +304 -304
- package/vendor/Server/Skills/flutter-library-test-coverage-check/references/SCORING_RULES.md +265 -265
- package/vendor/Server/Skills/flutter-library-test-coverage-check/references/SCRIPT_USAGE.md +286 -286
- package/vendor/Server/Skills/knowledge-import/SKILL.md +383 -383
- package/vendor/Server/Skills/knowledge-import/references/MCP_TOOL_USAGE.md +165 -165
- package/vendor/Server/Skills/knowledge-import/references/SKILL_LOCATOR_GUIDE.md +91 -91
- package/vendor/Server/Skills/knowledge-import/references/SKILL_OPTIMIZATION_GUIDE.md +127 -127
- package/vendor/Server/Skills/ohos-lib-pr-push/SKILL.md +453 -301
- package/vendor/Server/Skills/ohos-lib-pr-push/assets/PR_CHECKLIST.md +151 -0
- package/vendor/Server/Skills/ohos-lib-pr-push/assets/PR_ISSUE_TEMPLATE.md +257 -105
- package/vendor/Server/Skills/ohos-lib-pr-push/references/GITCODE_API.md +191 -127
- package/vendor/Server/Skills/ohos-lib-pr-push/scripts/gitcode-api.cjs +317 -208
- package/vendor/Server/Skills/rn-code-check/SKILL.md +320 -320
- package/vendor/Server/Skills/rn-code-check/references/API-GUIDE.md +234 -234
- package/vendor/Server/Skills/rn-code-check/references/CHECKLIST.md +188 -188
- package/vendor/Server/Skills/rn-code-check/references/REPORT-TEMPLATE.md +246 -246
- package/vendor/Server/Skills/rn-lib-add-example/SKILL.md +198 -198
- package/vendor/Server/Skills/rn-lib-add-example/references/APP_RENAME_GUIDE.md +40 -40
- package/vendor/Server/Skills/rn-lib-add-example/references/SHELL_ADAPTATION_CHECKLIST.md +78 -78
- package/vendor/Server/Skills/rn-lib-add-example/references/TEMPLATE_REPO_GUIDE.md +70 -70
- package/vendor/Server/Skills/rn-lib-add-example/references/VERIFICATION_GUIDE.md +47 -47
- package/vendor/Server/Skills/rn-lib-add-example/scripts/create-example.cjs +252 -252
- package/vendor/Server/Skills/rn-lib-update-doc/SKILL.md +176 -176
- package/vendor/Server/Skills/rn-lib-update-doc/config.json +5 -5
- package/vendor/Server/Skills/rn-lib-update-doc/references/changelog-template.md +35 -35
- package/vendor/Server/Skills/rn-lib-update-doc/references/format-diff.md +137 -137
- package/vendor/Server/Skills/rn-lib-update-doc/references/link-registry.json +33 -33
- package/vendor/Server/Skills/rn-lib-update-doc/references/model-0.4.2-overview.md +40 -40
- package/vendor/Server/Skills/rn-lib-update-doc/references/model-0.4.2.md +429 -429
- package/vendor/Server/Skills/rn-lib-update-doc/scripts/detect-readme-format.cjs +105 -105
- package/vendor/Server/Skills/rn-lib-update-doc/scripts/find-usage-doc.cjs +90 -90
- package/vendor/Server/Skills/rn-lib-update-doc/scripts/link-verify.cjs +213 -213
- package/vendor/Server/Skills/rn-lib-update-doc/scripts/normalize-changelog.cjs +73 -73
- package/vendor/Server/Skills/rn-lib-update-doc/scripts/normalize-package-meta.cjs +258 -258
- package/vendor/Server/Skills/rn-lib-update-doc/scripts/normalize-readme-links.cjs +341 -341
- package/vendor/Server/Skills/rn-lib-update-doc/scripts/resolve-usage-docs.cjs +67 -67
- package/vendor/Server/Skills/rn-library-consistency-check/SKILL.md +299 -299
- package/vendor/Server/Skills/rn-library-consistency-check/assets/REPORT_TEMPLATE.md +293 -293
- package/vendor/Server/Skills/rn-library-consistency-check/references/ARKTS_COMPONENT_CHECK_GUIDE.md +857 -857
- package/vendor/Server/Skills/rn-library-consistency-check/references/ARKTS_TURBOMODULE_CHECK_GUIDE.md +856 -856
- package/vendor/Server/Skills/rn-library-consistency-check/references/CHECKLIST.md +157 -157
- package/vendor/Server/Skills/rn-library-consistency-check/references/CPP_COMPONENT_CHECK_GUIDE.md +801 -801
- package/vendor/Server/Skills/rn-library-consistency-check/references/CPP_TURBOMODULE_CHECK_GUIDE.md +683 -683
- package/vendor/Server/Skills/rn-library-consistency-check/references/FUNCTION_COMPARISON_GUIDE.md +233 -233
- package/vendor/Server/Skills/rn-library-consistency-check/references/NATIVE_COMPONENT_IDENTIFICATION.md +1373 -1373
- package/vendor/Server/Skills/rn-library-consistency-check/references/SCORING_STANDARD.md +220 -220
- package/vendor/Server/Skills/rn-library-consistency-check/scripts/validate-skill.py +245 -245
- package/vendor/Server/Skills/rn-library-documentation-quality-check/SKILL.md +263 -263
- package/vendor/Server/Skills/rn-library-documentation-quality-check/assets/MODEL.md +414 -414
- package/vendor/Server/Skills/rn-library-documentation-quality-check/assets/MODEL_en.md +413 -413
- package/vendor/Server/Skills/rn-library-documentation-quality-check/assets/REPORT_TEMPLATE.md +311 -311
- package/vendor/Server/Skills/rn-library-documentation-quality-check/references/CHECK_CHECKLIST.md +355 -355
- package/vendor/Server/Skills/rn-library-documentation-quality-check/references/CROSS_VALIDATION_GUIDE.md +115 -115
- package/vendor/Server/Skills/rn-library-documentation-quality-check/references/DOC_COLLECTION_GUIDE.md +139 -139
- package/vendor/Server/Skills/rn-library-documentation-quality-check/references/EXAMPLES.md +586 -586
- package/vendor/Server/Skills/rn-library-documentation-quality-check/references/GOTCHAS.md +57 -57
- package/vendor/Server/Skills/rn-library-documentation-quality-check/scripts/validate-skill.py +259 -259
- package/vendor/Server/Skills/rn-library-interface-analyzer/SKILL.md +301 -301
- package/vendor/Server/Skills/rn-library-interface-analyzer/assets/REPORT_TEMPLATE.md +148 -148
- package/vendor/Server/Skills/rn-library-interface-analyzer/references/DOC_ANNOTATION_GUIDE.md +118 -118
- package/vendor/Server/Skills/rn-library-interface-analyzer/references/SCRIPT_USAGE_GUIDE.md +168 -168
- package/vendor/Server/Skills/rn-library-interface-analyzer/references/URL_PARSING_RULES.md +176 -176
- package/vendor/Server/Skills/rn-library-issue-generalizer/SKILL.md +274 -274
- package/vendor/Server/Skills/rn-library-issue-generalizer/assets/case-template.md +45 -45
- package/vendor/Server/Skills/rn-library-issue-generalizer/assets/rule-template.md +25 -25
- package/vendor/Server/Skills/rn-library-issue-generalizer/references/PR_FETCH_GUIDE.md +61 -61
- package/vendor/Server/Skills/rn-library-issue-generalizer/references/RULE_TEMPLATE_GUIDE.md +165 -165
- package/vendor/Server/Skills/rn-library-issue-generalizer/scripts/fetch-pr-info.py +239 -239
- package/vendor/Server/Skills/rn-library-known-issue-check/SKILL.md +263 -263
- package/vendor/Server/Skills/rn-library-known-issue-check/assets/REPORT_TEMPLATE.md +96 -96
- package/vendor/Server/Skills/rn-library-known-issue-check/references/COMPLIANCE_CHECKLIST.md +57 -57
- package/vendor/Server/Skills/rn-library-known-issue-check/references/INSPECTION_GUIDE.md +99 -99
- package/vendor/Server/Skills/rn-library-known-issue-check/references/PRESCREEN_GUIDE.md +64 -64
- package/vendor/Server/Skills/rn-library-known-issue-check/references/SOURCE_PREP_GUIDE.md +74 -74
- package/vendor/Server/Skills/rn-library-known-issue-check/scripts/validate-known-issue-report.py +164 -164
- package/vendor/Server/Skills/rn-library-memory-leak-check/SKILL.md +356 -339
- package/vendor/Server/Skills/rn-library-memory-leak-check/assets/REPORT_TEMPLATE.md +85 -83
- package/vendor/Server/Skills/rn-library-memory-leak-check/references/CHECKLIST.md +905 -859
- package/vendor/Server/Skills/rn-library-memory-leak-check/references/HARMONY_CODE_PATTERNS.md +124 -122
- package/vendor/Server/Skills/rn-library-memory-leak-check/scripts/scan_harmony_code.py +287 -279
- package/vendor/Server/Skills/rn-library-stability-check/SKILL.md +273 -273
- package/vendor/Server/Skills/rn-library-stability-check/assets/REPORT_TEMPLATE.md +129 -129
- package/vendor/Server/Skills/rn-library-stability-check/references/CHECKLIST.md +581 -581
- package/vendor/Server/Skills/rn-library-stability-check/references/SCORING_RULES.md +138 -138
- package/vendor/Server/Skills/rn-library-stability-check/scripts/scan-harmony-code.py +168 -168
- package/vendor/Server/Skills/rn-library-test-coverage-check/SKILL.md +526 -506
- package/vendor/Server/Skills/rn-library-test-coverage-check/references/CHECKLIST.md +321 -280
- package/vendor/Server/Skills/rn-library-test-coverage-check/references/DEMO_LOCATION.md +221 -221
- package/vendor/Server/Skills/rn-library-test-coverage-check/references/REPORT_TEMPLATE.md +220 -209
- package/vendor/Server/Skills/rn-library-test-coverage-check/references/SCRIPT_USAGE.md +325 -325
- package/vendor/Server/Skills/rn-ohos-xts-generator/SKILL.md +279 -279
- package/vendor/Server/Skills/rn-ohos-xts-generator/assets/TEST_FILE_TEMPLATES.md +404 -404
- package/vendor/Server/Skills/rn-ohos-xts-generator/references/BUILD_TROUBLESHOOTING.md +185 -185
- package/vendor/Server/Skills/rn-ohos-xts-generator/references/BUILD_WORKFLOW.md +265 -265
- package/vendor/Server/Skills/rn-ohos-xts-generator/references/COMMON_CONFIG.md +189 -189
- package/vendor/Server/Skills/rn-ohos-xts-generator/references/CONFIG_GUIDE.md +203 -203
- package/vendor/Server/Skills/rn-ohos-xts-generator/references/COVERAGE_ANALYZER.md +147 -147
- package/vendor/Server/Skills/rn-ohos-xts-generator/references/DESIGN_DOC_GUIDE.md +148 -148
- package/vendor/Server/Skills/rn-ohos-xts-generator/references/GENERATION_FLOW.md +165 -165
- package/vendor/Server/Skills/rn-ohos-xts-generator/references/GENERATION_STRATEGY.md +195 -195
- package/vendor/Server/Skills/rn-ohos-xts-generator/references/HARMONY_SCANNER.md +249 -249
- package/vendor/Server/Skills/rn-ohos-xts-generator/references/JEST_FRAMEWORK.md +235 -235
- package/vendor/Server/Skills/rn-ohos-xts-generator/references/PLATFORM_COMPAT.md +161 -161
- package/vendor/Server/Skills/rn-ohos-xts-generator/references/RN_TEST_PATTERNS.md +413 -413
- package/vendor/Server/Skills/rn-ohos-xts-generator/references/SOURCE_PARSER.md +235 -235
- package/vendor/Server/Skills/rn-ohos-xts-generator/references/TEST_CONVENTIONS.md +245 -245
- package/vendor/Server/Skills/rn-ohos-xts-generator/references/TROUBLESHOOTING.md +282 -282
- package/vendor/Server/Skills/rn-ohos-xts-generator/references/USAGE_GUIDE.md +251 -251
- package/vendor/Server/Skills/rnoh-cptf-api-test/SKILL.md +469 -469
- package/vendor/Server/Skills/rnoh-cptf-api-test/assets/CPTF_TEST_TEMPLATE.md +310 -310
- package/vendor/Server/Skills/rnoh-cptf-api-test/assets/DEMO_PAGE_TEMPLATE.md +303 -303
- package/vendor/Server/Skills/rnoh-cptf-api-test/references/CPTF_TEST_GENERATION_GUIDE.md +421 -421
- package/vendor/Server/Skills/rnoh-cptf-api-test/references/DEMO_GENERATION_GUIDE.md +358 -358
- package/vendor/Server/Skills/rnoh-cptf-api-test/references/QUALITY_CHECKLIST.md +114 -114
- package/vendor/Server/Skills/rnoh-cptf-api-test/references/SPEC_PARSING_GUIDE.md +274 -274
- package/vendor/Server/Skills/rnoh-cptf-api-test/scripts/validate-rnoh-cptf-api-test.sh +185 -185
- package/vendor/Server/Skills/rnoh-cptf-demo-test/SKILL.md +191 -191
- package/vendor/Server/Skills/rnoh-cptf-demo-test/assets/TEST_TEMPLATE.md +216 -216
- package/vendor/Server/Skills/rnoh-cptf-demo-test/references/CPTF_SETUP.md +107 -107
- package/vendor/Server/Skills/rnoh-cptf-demo-test/references/DEMO_ANALYSIS.md +120 -120
- package/vendor/Server/Skills/rnoh-cptf-demo-test/scripts/validate-rnoh-cptf-test.sh +108 -108
- package/vendor/Server/Skills/rnoh-cptf-test-run/SKILL.md +237 -237
- package/vendor/Server/Skills/rnoh-cptf-test-run/references/DEBUG_PLAYBOOK.md +261 -261
- package/vendor/Server/Skills/rnoh-cptf-test-run/scripts/validate-run-env.sh +112 -112
- package/vendor/Server/Skills/rnoh-lib-code-adapt/SKILL.md +497 -497
- package/vendor/Server/Skills/rnoh-lib-code-adapt/references/adapt-checklist.md +270 -270
- package/vendor/Server/Skills/rnoh-lib-code-adapt/references/api-migration-checklist.md +164 -164
- package/vendor/Server/Skills/rnoh-lib-code-adapt/references/common-compile-errors.md +556 -556
- package/vendor/Server/Skills/rnoh-lib-code-adapt/references/deveco-cli-tools.md +459 -459
- package/vendor/Server/Skills/rnoh-lib-code-adapt/references/edge-cases.md +65 -65
- package/vendor/Server/Skills/rnoh-lib-code-adapt/references/har-tgz-build.md +512 -512
- package/vendor/Server/Skills/rnoh-lib-code-adapt/references/version-compat-matrix.md +132 -132
- package/vendor/Server/Skills/rnoh-lib-code-adapt/scripts/auto-integrate.sh +424 -424
- package/vendor/Server/Skills/rnoh-lib-demo-coverage/SKILL.md +137 -137
- package/vendor/Server/Skills/rnoh-lib-demo-create/SKILL.md +306 -306
- package/vendor/Server/Skills/rnoh-lib-demo-create/assets/DEMO_PAGE_TEMPLATE.md +485 -485
- package/vendor/Server/Skills/rnoh-lib-demo-create/assets/INDEX_TEMPLATE.md +172 -172
- package/vendor/Server/Skills/rnoh-lib-demo-create/references/DEMO_CODE_RULES.md +422 -422
- package/vendor/Server/Skills/rnoh-lib-demo-create/references/QUALITY_CHECKLIST.md +95 -95
- package/vendor/Server/Skills/rnoh-lib-demo-create/references/SOURCE_EXPLORATION.md +169 -169
- package/vendor/Server/Skills/rnoh-lib-demo-doc/SKILL.md +554 -554
- package/vendor/Server/Skills/rnoh-lib-demo-doc/assets/DEMO_DOC_TEMPLATE.md +106 -106
- package/vendor/Server/Skills/rnoh-lib-demo-doc/references/COVERAGE_INCREMENTAL.md +216 -216
- package/vendor/Server/Skills/rnoh-lib-demo-doc/references/DEMO_DESIGN_RULES.md +413 -413
- package/vendor/Server/Skills/rnoh-lib-demo-doc/references/OUTPUT_FORMAT.md +269 -269
- package/vendor/Server/Skills/rnoh-lib-demo-doc/references/QUALITY_CHECKLIST.md +98 -98
- package/vendor/Server/Skills/rnoh-lib-func-test/SKILL.md +337 -337
- package/vendor/Server/Skills/rnoh-lib-rnt-search/SKILL.md +722 -722
- package/vendor/Server/Skills/rnoh-lib-rnt-search/assets/PORT_REPORT_TEMPLATE.md +219 -219
- package/vendor/Server/Skills/rnoh-lib-rnt-search/references/DEMO_PORTING_GUIDE.md +345 -345
- package/vendor/Server/Skills/rnoh-lib-rnt-search/references/PORT_VERIFICATION.md +269 -269
- package/vendor/Server/Skills/rnoh-lib-rnt-search/references/RNT_PROJECT_STRUCTURE.md +173 -173
- package/vendor/Server/Skills/rnoh-lib-rnt-search/scripts/analyze-demo-deps.cjs +267 -267
- package/vendor/Server/Skills/rnoh-lib-rnt-search/scripts/detect-rnoh-version.cjs +174 -174
- package/vendor/Server/Skills/rnoh-lib-rnt-search/scripts/find-rnt-demo.sh +111 -111
- package/vendor/Server/Skills/rnoh-lib-rnt-search/scripts/port-demo.sh +186 -186
- package/vendor/Server/Skills/rnoh-lib-rnt-search/scripts/read-lib-meta.cjs +150 -150
- package/vendor/Server/Skills/rnoh-lib-test-align/SKILL.md +296 -296
- package/vendor/Server/Skills/rnoh-lib-test-align/references/jest-troubleshooting.md +371 -371
- package/vendor/Server/Skills/rnoh-lib-test-align/references/port-test-demo-guide.md +212 -212
- package/vendor/Server/Skills/rnoh-lib-test-align/references/runtime-troubleshooting.md +345 -345
- package/vendor/Server/Skills/rnoh-lib-test-align/references/unit-test-template.md +223 -223
- package/vendor/Server/Skills/rnoh-lib-test-align/scripts/port-test-demo.sh +1053 -1053
- package/vendor/Server/Skills/rnoh-lib-version-diff/SKILL.md +295 -255
- package/vendor/Server/Skills/rnoh-lib-version-diff/references/OHOS_ADAPTATION.md +82 -77
- package/vendor/Server/Skills/rnoh-lib-version-diff/references/OHOS_API_LOOKUP.md +224 -224
- package/vendor/Server/Skills/rnoh-lib-version-diff/references/script-reference.md +175 -174
- package/vendor/Server/Skills/rnoh-lib-version-diff/scripts/detect-upstream-version.js +967 -967
- package/vendor/Server/Skills/rnoh-lib-version-diff/scripts/generate-diff.js +1798 -1798
- package/vendor/Server/Skills/rnoh-lib-version-diff/scripts/package.json +5 -5
- package/vendor/Server/Skills/rnoh-lib-version-diff/templates/report-template.md +180 -137
- package/vendor/Server/Skills/rnoh-lib-xts-coverage/SKILL.md +145 -145
- package/vendor/Server/Skills/skill-generator/SKILL.md +365 -365
- package/vendor/Server/Skills/skill-generator/assets/SKILL_TEMPLATE.md +183 -183
- package/vendor/Server/Skills/skill-generator/references/COMPLIANCE_CHECKLIST.md +82 -82
- package/vendor/Server/Skills/skill-generator/references/KB_QUERY_GUIDE.md +110 -110
- package/vendor/Server/Skills/skill-generator/references/MCP_TOOL_DISCOVERY.md +122 -122
- package/vendor/Server/Skills/skill-generator/references/SKILL_SPEC.md +121 -121
- package/vendor/Server/Skills/skill-generator/scripts/validate-skill.cjs +259 -259
- package/vendor/Server/Skills/task-analysis/SKILL.md +234 -234
- package/vendor/Server/Skills/task-analysis/assets/OUTPUT_EXAMPLES.md +160 -160
- package/vendor/Server/Skills/task-analysis/references/ACCEPTANCE_CRITERIA_GUIDE.md +190 -190
- package/vendor/Server/Skills/task-analysis/references/ANALYSIS_SCHEMA.md +224 -224
- package/vendor/Server/Skills/task-analysis/references/INTEGRATION_CONTEXT.md +162 -162
- package/vendor/Server/Skills/task-analysis/references/LESSONS_LEARNED.md +55 -55
- package/vendor/Server/Skills/task-analysis/references/REPLAN_CONTEXT_GUIDE.md +126 -126
- package/vendor/Server/Skills/task-analysis/scripts/validate-analysis-output.sh +256 -256
- package/vendor/Server/Skills/task-decomposition/SKILL.md +528 -528
- package/vendor/Server/Skills/task-decomposition/assets/OUTPUT_EXAMPLES.md +451 -451
- package/vendor/Server/Skills/task-decomposition/references/ACCEPTANCE_CRITERIA_GUIDE.md +179 -179
- package/vendor/Server/Skills/task-decomposition/references/DEPENDENCY_GRAPH_GUIDE.md +152 -152
- package/vendor/Server/Skills/task-decomposition/references/INTEGRATION_CONTEXT.md +175 -175
- package/vendor/Server/Skills/task-decomposition/references/REPLAN_CONTEXT_GUIDE.md +195 -195
- package/vendor/Server/Skills/task-decomposition/references/TASK_DECOMPOSITION_TEMPLATES.md +226 -226
- package/vendor/Server/Skills/task-decomposition/scripts/list-available-skills.cjs +263 -263
- package/vendor/Server/Skills/task-decomposition/scripts/skill-blacklist.json +29 -29
- package/vendor/Server/Skills/task-decomposition/scripts/validate-decomposition-output.cjs +376 -376
- package/vendor/Server/Skills/task-decomposition/scripts/validate-param-consistency.cjs +259 -259
- package/vendor/Server/Skills/task-decomposition/scripts/validate-specified-skills.cjs +216 -216
- package/vendor/Server/Skills/task-decomposition/scripts/validate-step-graph.cjs +424 -424
- package/vendor/Server/Skills/tpc-cpp-check/SKILL.md +427 -427
- package/vendor/Server/Skills/tpc-cpp-check/references/CHECKLIST.md +214 -214
- package/vendor/Server/Skills/tpc-cpp-check/references/HPKBUILD_GUIDE.md +235 -235
- package/vendor/Server/Skills/tpc-cpp-check/references/REPORT_TEMPLATE.md +250 -250
- package/vendor/Server/TestCheck/TestCheck.js +775 -775
- package/vendor/Server/TestCheck/index.js +11 -11
- package/vendor/Server/library/McpToolGuide.js +280 -280
- package/vendor/Server/library/StatsService.js +126 -126
- package/vendor/Server/library/cstTime.js +16 -16
- package/vendor/VERSION +3 -3
- package/workflows/pr-check.mjs +105 -105
- package/workflows/pr-push.mjs +192 -192
- package/vendor/Server/Agent/SkillSelector/types.js +0 -63
|
@@ -1,722 +1,722 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: rnoh-lib-rnt-search
|
|
3
|
-
description: >-
|
|
4
|
-
从 rnt(React Native Tester)工程中定位 RN 鸿蒙三方库的 demo 并增量迁移到指定 RN 目标工程的 example/src 下。读取目标库 package.json 元数据生成候选名,扫描 {rnt-root}/*/rn-tester/examples/ 匹配 demo 目录,分析 demo 结构与外部依赖,复制 demo 文件(增量添加,不覆盖目标已有文件)并修正 import 路径与依赖。当用户需要从 rnt 工程查找并迁移 demo 到 RN 鸿蒙三方库 example 工程、单独执行 demo 查找/迁移步骤、向 example/src 增量添加 demo、分析 rnt demo 依赖时使用。适用于 rnt demo 定位、demo 迁移、demo 依赖分析、example 内容增量添加等场景。
|
|
5
|
-
license: Apache-2.0
|
|
6
|
-
compatibility: 需要 bash、node、npm;目标 RN 工程需已有 example/ 目录(缺失时引导使用 rn-lib-add-example 创建)
|
|
7
|
-
allowed-tools: Bash Read Grep Glob Edit Write
|
|
8
|
-
metadata:
|
|
9
|
-
version: "1.0.0"
|
|
10
|
-
category: rn-demo-porting
|
|
11
|
-
language: JavaScript/TypeScript
|
|
12
|
-
consumed-by: rnohLibAddExampleSkill
|
|
13
|
-
---
|
|
14
|
-
|
|
15
|
-
# RN 鸿蒙三方库 rnt Demo 查找与迁移
|
|
16
|
-
|
|
17
|
-
从 rnt(React Native Tester)工程中定位目标 RN 三方库的 demo 目录,迁移到指定 RN 目标工程的 `example/src/`,并完成 import 路径与依赖的修正。
|
|
18
|
-
|
|
19
|
-
> ⚠️ **核心原则**:
|
|
20
|
-
> 1. 通过 RNOH 框架版本(git 分支或元数据)自动对齐库与 rnt,版本一致时自动选择 demo 并直接迁移,无需人工确认。
|
|
21
|
-
> 2. 本 SKILL 只负责「查找 + 迁移 demo 内容」,不创建/重建 example 工程模板、不做 Harmony 壳层(RNPackagesFactory/CMakeLists/build-profile 等)适配——这些由 `rn-lib-add-example` 完成。
|
|
22
|
-
> 3. **增量添加,不覆盖**:迁移时目标 `example/src/` 已有的文件**保留不动**,仅添加 demo 中目标不存在的文件。冲突文件保留目标版本,在报告中列出供人工确认。
|
|
23
|
-
> 4. 迁移完成后必须输出迁移报告,列出 demo 来源、文件清单、依赖增量、冲突文件(保留目标版本)、待人工确认项。
|
|
24
|
-
|
|
25
|
-
---
|
|
26
|
-
|
|
27
|
-
## 路径约定
|
|
28
|
-
|
|
29
|
-
`{SKILL_DIR}` = 本技能根目录(本 SKILL.md 所在目录)。命令均在 `{SKILL_DIR}` 下执行,使用 `scripts/...`、`references/...` 相对路径。
|
|
30
|
-
|
|
31
|
-
## 何时使用
|
|
32
|
-
|
|
33
|
-
- 用户要求从 rnt 工程查找并迁移某个 RN 三方库的 demo。
|
|
34
|
-
- 用户要求向已有 RN 工程的 `example/src/` **增量添加** demo 内容(不覆盖已有文件)。
|
|
35
|
-
- 用户在 `rn-lib-add-example` 流程中需要单独执行 Step 2(demo 查找与迁移)。
|
|
36
|
-
- 用户想分析 rnt demo 的外部依赖,决定 example 需要补哪些包。
|
|
37
|
-
- 用户拿到一个 rnt 工程根路径,想自动定位某个库的 demo 子目录。
|
|
38
|
-
|
|
39
|
-
## 最小必要输入
|
|
40
|
-
|
|
41
|
-
| 参数 | 类型 | 必填 | 说明 |
|
|
42
|
-
|------|------|------|------|
|
|
43
|
-
| `libPath` | string | ✅ | 目标 RN 三方库根目录(含 `package.json`) |
|
|
44
|
-
| `rntPath` | string | ✅* | rnt 工程根目录(含多个子工程,每个有 `rn-tester/examples/`) |
|
|
45
|
-
| `demoPath` | string | ✅* | demo 目录绝对路径(用户已明确时直接传入,跳过扫描) |
|
|
46
|
-
| `targetExampleSrc` | string | ❌ | 目标 RN 工程 `example/src/` 路径;缺省时按 `libPath/example/src` 推断 |
|
|
47
|
-
| `cleanTarget` | boolean | ❌ | 迁移前是否清空目标 `example/src/`;默认 `false`(**增量添加,不覆盖已有文件**) |
|
|
48
|
-
| `rnohVersion` | string | ❌ | 目标 RNOH 框架版本号(如 "0.82")。未提供时自动从 rnt 分支检测。用于版本对齐与分支切换。 |
|
|
49
|
-
|
|
50
|
-
> `rntPath` 与 `demoPath` 二选一:用户已明确 demo 路径时传 `demoPath` 跳过扫描;否则必须传 `rntPath` 由脚本扫描定位。
|
|
51
|
-
|
|
52
|
-
**派生变量**:
|
|
53
|
-
- `skillDir`:本 SKILL 所在目录
|
|
54
|
-
- `libMeta`:`read-lib-meta.cjs` 输出的库元数据 JSON
|
|
55
|
-
- `libVersion`:库的 RNOH 版本(`detect-rnoh-version.cjs` 输出)
|
|
56
|
-
- `rntVersion`:rnt 的 RNOH 版本(`detect-rnoh-version.cjs` 输出)
|
|
57
|
-
- `demoFiles`:demo 目录下待迁移的源文件清单
|
|
58
|
-
- `demoDeps`:`analyze-demo-deps.cjs` 输出的外部依赖清单
|
|
59
|
-
|
|
60
|
-
## 输入依赖
|
|
61
|
-
|
|
62
|
-
- **前置SKILL**:无(可独立调用)。若目标 RN 工程 `example/` 不存在,引导用户先执行 `rn-lib-add-example` 创建模板。
|
|
63
|
-
- **输入文件**:目标库 `package.json`、rnt 工程目录树、demo 源码目录。
|
|
64
|
-
- **输出文件**:迁移后的 `example/src/` 文件 + 迁移报告 Markdown。
|
|
65
|
-
|
|
66
|
-
---
|
|
67
|
-
|
|
68
|
-
## 工作流程概览
|
|
69
|
-
|
|
70
|
-
```
|
|
71
|
-
Phase 1: 读取库元数据(read-lib-meta.cjs)
|
|
72
|
-
↓
|
|
73
|
-
Phase 2: 版本检测与对齐(detect-rnoh-version.cjs,自动切换分支)
|
|
74
|
-
↓
|
|
75
|
-
Phase 3: 扫描 rnt 工程定位 demo(find-rnt-demo.sh,版本一致时自动选择)
|
|
76
|
-
↓
|
|
77
|
-
Phase 4: 分析 demo 结构与外部依赖(analyze-demo-deps.cjs)
|
|
78
|
-
4.1 外部依赖存在性检查(example/package.json 是否已声明)
|
|
79
|
-
4.2 从 rnt 工程提取缺失依赖的版本信息
|
|
80
|
-
↓
|
|
81
|
-
Phase 5: 迁移 demo 到目标 example/src(port-demo.sh)
|
|
82
|
-
5.1 build-profile.json5 模块路径越界检查
|
|
83
|
-
5.2 .har 文件路径验证
|
|
84
|
-
↓
|
|
85
|
-
Phase 6: 修正 import 路径与 displayName + 入口接入
|
|
86
|
-
6.1 相对路径修正
|
|
87
|
-
6.2 入口文件对齐
|
|
88
|
-
6.3 目标库引用对齐
|
|
89
|
-
6.4 入口文件接入
|
|
90
|
-
6.5 Navigation.tsx 硬编码标题修正
|
|
91
|
-
6.6 孤立文件检测与接入
|
|
92
|
-
6.7 菜单容器 ScrollView 适配
|
|
93
|
-
6.8 保留原有 App.tsx 入口
|
|
94
|
-
6.9 入口链路端到端验证
|
|
95
|
-
↓
|
|
96
|
-
Phase 7: 生成迁移报告并交付
|
|
97
|
-
```
|
|
98
|
-
|
|
99
|
-
> rnt 工程结构与 demo 目录约定详见 [references/RNT_PROJECT_STRUCTURE.md](references/RNT_PROJECT_STRUCTURE.md)。
|
|
100
|
-
|
|
101
|
-
---
|
|
102
|
-
|
|
103
|
-
## Phase 1:读取库元数据
|
|
104
|
-
|
|
105
|
-
读取目标库 `package.json`,提取用于 demo 搜索的候选名与鸿蒙化字段。
|
|
106
|
-
|
|
107
|
-
```bash
|
|
108
|
-
node scripts/read-lib-meta.cjs <libPath>
|
|
109
|
-
```
|
|
110
|
-
|
|
111
|
-
**关注字段**:
|
|
112
|
-
|
|
113
|
-
| 字段 | 用途 |
|
|
114
|
-
|------|------|
|
|
115
|
-
| `packageName` | npm 包名,写入 example `dependencies` |
|
|
116
|
-
| `alias` | `harmony.alias`,候选搜索名之一 |
|
|
117
|
-
| `scoped` | 去掉 scope 的短名,候选搜索名之一 |
|
|
118
|
-
| `dirBase` | 目录名,候选搜索名之一 |
|
|
119
|
-
| `searchNames` | 候选搜索名数组(去重) |
|
|
120
|
-
| `autolinkingResolved` | 鸿蒙化模块信息(供下游 `rn-lib-add-example` 壳层适配使用,本 SKILL 不直接处理) |
|
|
121
|
-
|
|
122
|
-
> 脚本详情与字段说明参见 [references/DEMO_PORTING_GUIDE.md](references/DEMO_PORTING_GUIDE.md) 的「库元数据字段」章节。
|
|
123
|
-
|
|
124
|
-
---
|
|
125
|
-
|
|
126
|
-
## Phase 2:版本检测与对齐
|
|
127
|
-
|
|
128
|
-
检测目标库与 rnt 工程的 RNOH 框架版本,当版本不一致时自动切换分支对齐。版本一致后直接进入 Phase 3,**无需用户确认**。
|
|
129
|
-
|
|
130
|
-
### 2.1 版本检测
|
|
131
|
-
|
|
132
|
-
```bash
|
|
133
|
-
# 检测库版本
|
|
134
|
-
node scripts/detect-rnoh-version.cjs <libPath>
|
|
135
|
-
|
|
136
|
-
# 检测 rnt 版本
|
|
137
|
-
node scripts/detect-rnoh-version.cjs <rntPath>
|
|
138
|
-
```
|
|
139
|
-
|
|
140
|
-
**版本检测优先级**:
|
|
141
|
-
|
|
142
|
-
| 优先级 | 来源 | 示例 |
|
|
143
|
-
|--------|------|------|
|
|
144
|
-
| 1 | Git 分支名 | `br_rnoh0.82` → `0.82` |
|
|
145
|
-
| 2 | example/package.json | `react-native-harmony: npm:@react-native-oh/react-native-harmony@0.77.72` → `0.77` |
|
|
146
|
-
| 3 | harmony subdirs oh-package.json5 | `@react-native-oh/*` 依赖版本 |
|
|
147
|
-
| 4 | package.json peerDependencies | `react-native: *` |
|
|
148
|
-
|
|
149
|
-
> 非 Git 仓库时自动降级到 package.json / oh-package.json5 检测。
|
|
150
|
-
|
|
151
|
-
### 2.2 版本对齐
|
|
152
|
-
|
|
153
|
-
| 场景 | 处理 |
|
|
154
|
-
|------|------|
|
|
155
|
-
| 库与 rnt 版本一致 | ✅ 直接进入 Phase 3 |
|
|
156
|
-
| 库版本 ≠ rnt 版本,库有对应分支 | 自动 `git checkout` 切换库分支 |
|
|
157
|
-
| 库版本 ≠ rnt 版本,rnt 有对应分支 | 自动 `git checkout` 切换 rnt 分支 |
|
|
158
|
-
| 两者都无法切换到一致版本 | 报错终止,列出可用分支供用户参考 |
|
|
159
|
-
|
|
160
|
-
**分支切换前必须检查工作区是否干净**:
|
|
161
|
-
|
|
162
|
-
```bash
|
|
163
|
-
# 检查是否有未提交的修改
|
|
164
|
-
git -C <path> status --short
|
|
165
|
-
```
|
|
166
|
-
|
|
167
|
-
| 工作区状态 | 处理 |
|
|
168
|
-
|-----------|------|
|
|
169
|
-
| 干净(无输出) | 直接 `git checkout` |
|
|
170
|
-
| 有未提交修改 | `git stash` 暂存 → `git checkout` → 迁移完成后 `git stash pop` 恢复 |
|
|
171
|
-
|
|
172
|
-
### 2.3 example/package.json 版本一致性检测
|
|
173
|
-
|
|
174
|
-
版本对齐后,检查 `example/package.json` 中的 `react-native` / `react-native-harmony` 版本是否与目标 RNOH 版本匹配:
|
|
175
|
-
|
|
176
|
-
```bash
|
|
177
|
-
# 读取 example/package.json 中的 react-native 版本
|
|
178
|
-
node -e "const p=require('./example/package.json'); console.log(p.dependencies['react-native'], p.dependencies['react-native-harmony'])"
|
|
179
|
-
```
|
|
180
|
-
|
|
181
|
-
| 匹配状态 | 处理 |
|
|
182
|
-
|---------|------|
|
|
183
|
-
| ✅ 版本匹配 | 直接进入 Phase 3 |
|
|
184
|
-
| ❌ 版本不匹配 | 在报告中标注「example/package.json react-native 版本与目标 RNOH 版本不一致」,由 `rn-lib-add-example` 更新 |
|
|
185
|
-
|
|
186
|
-
> 版本不一致不阻塞迁移,但在报告中标记为高优先级待确认项。
|
|
187
|
-
|
|
188
|
-
**分支切换示例**:
|
|
189
|
-
|
|
190
|
-
```bash
|
|
191
|
-
# 列出库的可用分支及版本
|
|
192
|
-
node scripts/detect-rnoh-version.cjs <libPath> --list-branches
|
|
193
|
-
|
|
194
|
-
# 切换到目标版本分支
|
|
195
|
-
git -C <libPath> stash # 如有未提交修改
|
|
196
|
-
git -C <libPath> checkout br_rnoh0.82
|
|
197
|
-
git -C <libPath> stash pop # 恢复暂存(如有)
|
|
198
|
-
```
|
|
199
|
-
|
|
200
|
-
> ⚠️ 版本对齐自动执行,不暂停等待用户确认。Agent 检测到版本不一致时直接切换分支使其对齐。
|
|
201
|
-
|
|
202
|
-
---
|
|
203
|
-
|
|
204
|
-
## Phase 3:扫描 rnt 工程定位 demo
|
|
205
|
-
|
|
206
|
-
版本对齐完成后,扫描 rnt 工程定位目标库的 demo 目录。当版本一致且命中唯一 demo 时**自动选择**,无需用户确认。
|
|
207
|
-
|
|
208
|
-
若用户已提供 `demoPath`,跳过本步直接进入 Phase 4。
|
|
209
|
-
|
|
210
|
-
```bash
|
|
211
|
-
bash scripts/find-rnt-demo.sh \
|
|
212
|
-
--lib-path <libPath> \
|
|
213
|
-
--rnt-path <rntPath>
|
|
214
|
-
```
|
|
215
|
-
|
|
216
|
-
**扫描规则**(详见 [references/RNT_PROJECT_STRUCTURE.md](references/RNT_PROJECT_STRUCTURE.md)):
|
|
217
|
-
|
|
218
|
-
1. 读取 `read-lib-meta.cjs` 的 `searchNames` 作为候选名
|
|
219
|
-
2. 遍历 `{rntPath}/*/rn-tester/examples/{候选名}/`
|
|
220
|
-
3. 命中后做大小写不敏感兜底匹配
|
|
221
|
-
4. 输出每个 demo 路径一行;退出码:`0` = 唯一命中、`1` = 未找到、`2` = 多个命中
|
|
222
|
-
|
|
223
|
-
**自动选择规则**:
|
|
224
|
-
|
|
225
|
-
| 命中数 | 处理 |
|
|
226
|
-
|--------|------|
|
|
227
|
-
| 0 | 报错终止,提示用户手动提供 `--demo-path` 或检查 rnt 工程路径 |
|
|
228
|
-
| 1 | ✅ 自动选择,直接进入 Phase 4 |
|
|
229
|
-
| 多个 | 自动选择第一个命中项,报告中标注全部命中路径;用户可通过 `--demo-path` 指定其他 |
|
|
230
|
-
|
|
231
|
-
> 版本一致 + 唯一命中 = 自动选择,不暂停等待用户确认。
|
|
232
|
-
|
|
233
|
-
---
|
|
234
|
-
|
|
235
|
-
## Phase 4:分析 demo 结构与外部依赖
|
|
236
|
-
|
|
237
|
-
扫描 demo 目录的源文件(`.ts`/`.tsx`/`.js`/`.jsx`),提取:
|
|
238
|
-
|
|
239
|
-
1. **文件清单**:待迁移文件树(用于报告与迁移校验)
|
|
240
|
-
2. **外部依赖**:从 `import ... from 'pkg'` 与 `require('pkg')` 中提取所有非相对路径的包名
|
|
241
|
-
3. **目标库引用方式**:demo 中如何引用目标库(alias / 包名 / 相对路径)
|
|
242
|
-
4. **入口文件**:`App.tsx` / `index.tsx` 位置与 `displayName` / `title` 取值
|
|
243
|
-
|
|
244
|
-
```bash
|
|
245
|
-
node scripts/analyze-demo-deps.cjs <demoPath> [--lib-name <packageName>] [--alias <harmony.alias>]
|
|
246
|
-
```
|
|
247
|
-
|
|
248
|
-
输出 JSON:
|
|
249
|
-
|
|
250
|
-
```json
|
|
251
|
-
{
|
|
252
|
-
"files": ["App.tsx", "index.tsx", "tests/index.tsx", "camera/CameraDemo.tsx"],
|
|
253
|
-
"externalDeps": ["@react-native-community/cli", "react-native-svg"],
|
|
254
|
-
"libReferences": [
|
|
255
|
-
{ "kind": "named", "module": "react-native-camera-kit", "names": ["Camera", "CameraType"] }
|
|
256
|
-
],
|
|
257
|
-
"entryFiles": { "app": "App.tsx", "index": "index.tsx", "displayName": "CameraKitDemo" }
|
|
258
|
-
}
|
|
259
|
-
```
|
|
260
|
-
|
|
261
|
-
**依赖分类**:
|
|
262
|
-
|
|
263
|
-
| 类别 | 判定 | 处理 |
|
|
264
|
-
|------|------|------|
|
|
265
|
-
| 目标库本身 | `module === alias` 或 `packageName` | 迁移后改为 `file:../<tgz>` 引用(由 `rn-lib-add-example` 完成) |
|
|
266
|
-
| RNOH 框架 | `@react-native-oh/*` / `@rnoh/*` | 对齐目标 RNOH 版本,写入 example `dependencies` |
|
|
267
|
-
| 通用 RN 依赖 | `react-native-*` / `@react-native-*` | 写入 example `dependencies`,版本与 example 模板对齐 |
|
|
268
|
-
| 业务无关依赖 | 与目标库 demo 无关 | 列入「待人工确认」清单,不自动写入 |
|
|
269
|
-
|
|
270
|
-
### 4.1 外部依赖存在性检查(必须执行)
|
|
271
|
-
|
|
272
|
-
`analyze-demo-deps.cjs` 输出的 `externalDeps` 中每个包,**必须逐一检查**是否已在 `example/package.json` 的 `dependencies` 或 `devDependencies` 中声明:
|
|
273
|
-
|
|
274
|
-
```bash
|
|
275
|
-
# 读取 example/package.json 已声明的依赖
|
|
276
|
-
node -e "const p=require('<libPath>/example/package.json'); const all={...p.dependencies,...p.devDependencies}; console.log(JSON.stringify(Object.keys(all)))"
|
|
277
|
-
```
|
|
278
|
-
|
|
279
|
-
| 检查结果 | 处理 |
|
|
280
|
-
|---------|------|
|
|
281
|
-
| 依赖已在 example/package.json 中声明 | ✅ 无需处理 |
|
|
282
|
-
| 依赖未声明,属于 RNOH/RN 通用包 | ⚠️ **高优先级**:在报告中标注「缺少依赖」,并从 rnt 工程的 `package.json` 中查找该包的版本与引用方式(如 `file:./rnoh_package/xxx.tgz`),在报告依赖增量清单中给出建议的写入值 |
|
|
283
|
-
| 依赖未声明,属于业务无关包 | 列入「待人工确认」清单 |
|
|
284
|
-
|
|
285
|
-
> ⚠️ **缺失依赖会导致运行时崩溃**。例如 demo 引用 `@rnoh/testerino` 但 example/package.json 未声明,所有使用 `Tester`/`TestCase`/`TestSuite` 的组件均无法渲染。此检查是**必执行项**,不可跳过。
|
|
286
|
-
|
|
287
|
-
### 4.2 从 rnt 工程提取缺失依赖的版本信息
|
|
288
|
-
|
|
289
|
-
当发现 example 缺少的依赖时,从 rnt 工程的 `package.json` 中提取该包的版本与引用方式:
|
|
290
|
-
|
|
291
|
-
```bash
|
|
292
|
-
# 在 rnt 子工程的 package.json 中搜索缺失依赖
|
|
293
|
-
grep -r "<missingDep>" <rntPath>/*/package.json
|
|
294
|
-
```
|
|
295
|
-
|
|
296
|
-
常见情况:
|
|
297
|
-
- `@rnoh/testerino` → rnt 工程中以 `file:./rnoh_package/testerino/rnoh-testerino-<version>.tgz` 形式引用,需将 tgz 复制到 example 目录并同样以 `file:` 方式引用
|
|
298
|
-
- 其他 `@rnoh/*` 或 `@react-native-ohos/*` 包 → 从 rnt 工程或 npm registry 获取版本
|
|
299
|
-
|
|
300
|
-
> 详细依赖处理规则参见 [references/DEMO_PORTING_GUIDE.md](references/DEMO_PORTING_GUIDE.md) 的「依赖分析与写入」章节。
|
|
301
|
-
|
|
302
|
-
---
|
|
303
|
-
|
|
304
|
-
## Phase 5:迁移 demo 到目标 example/src
|
|
305
|
-
|
|
306
|
-
```bash
|
|
307
|
-
bash scripts/port-demo.sh \
|
|
308
|
-
--demo-path <demoPath> \
|
|
309
|
-
--target <targetExampleSrc> \
|
|
310
|
-
[--clean] \
|
|
311
|
-
[--exclude 'node_modules,build,__tests__']
|
|
312
|
-
```
|
|
313
|
-
|
|
314
|
-
**脚本行为**:
|
|
315
|
-
|
|
316
|
-
1. 校验 `demoPath` 与 `targetExampleSrc` 存在
|
|
317
|
-
2. `--clean` 时清空目标 `example/src/`(**默认不清空**,避免误删用户已有内容;执行前必须由用户确认)
|
|
318
|
-
3. 默认排除 `node_modules/`、`build/`、`__tests__/`、`.cxx/`、`oh_modules/`
|
|
319
|
-
4. 使用 `rsync -a --ignore-existing` 保留文件元数据,**仅添加目标不存在的文件**,已有文件保留不动
|
|
320
|
-
5. 冲突文件(demo 与目标同名)保留目标版本,在输出中列出供 Agent 写入报告
|
|
321
|
-
6. 输出迁移文件清单(相对路径)+ 冲突文件清单
|
|
322
|
-
|
|
323
|
-
**迁移后目录约定**(典型 demo 结构):
|
|
324
|
-
|
|
325
|
-
```
|
|
326
|
-
example/src/
|
|
327
|
-
├── App.tsx # demo 入口(含 displayName)
|
|
328
|
-
├── index.tsx # 导出 demo 给 testerino 注册
|
|
329
|
-
├── tests/
|
|
330
|
-
│ └── index.tsx # testerino 测试用例注册(修正相对路径)
|
|
331
|
-
├── camera/ # demo 功能子目录
|
|
332
|
-
├── scanCode/
|
|
333
|
-
└── components/ # demo 复用组件
|
|
334
|
-
```
|
|
335
|
-
|
|
336
|
-
> 迁移细节与边界情况(已有文件冲突处理、保留通用组件 `Navigation.tsx` 等)参见 [references/DEMO_PORTING_GUIDE.md](references/DEMO_PORTING_GUIDE.md)。**默认增量添加,冲突文件保留目标版本。**
|
|
337
|
-
|
|
338
|
-
### 5.1 build-profile.json5 模块路径越界检查(必须执行)
|
|
339
|
-
|
|
340
|
-
迁移后检查 `example/harmony/build-profile.json5` 与 `example/harmony/build-profile.template.json5` 中的 `modules[].srcPath`,确保所有模块路径**不越出** `example/harmony/` 工程根目录:
|
|
341
|
-
|
|
342
|
-
```bash
|
|
343
|
-
# 读取 build-profile.json5 中的模块路径
|
|
344
|
-
node -e "const fs=require('fs'); const c=fs.readFileSync('example/harmony/build-profile.json5','utf8'); const m=c.match(/srcPath:\s*'([^']+)'/g); console.log(m)"
|
|
345
|
-
```
|
|
346
|
-
|
|
347
|
-
| 路径形式 | 判定 | 处理 |
|
|
348
|
-
|---------|------|------|
|
|
349
|
-
| `./entry`、`./safe_area` 等 `./` 开头 | ✅ 工程内路径 | 无需处理 |
|
|
350
|
-
| `../../harmony/xxx` 等 `../` 开头 | ❌ **越界**,hvigor 报错 `Path escapes project root` | 见下方修正 |
|
|
351
|
-
|
|
352
|
-
**越界路径修正步骤**:
|
|
353
|
-
|
|
354
|
-
1. 将越界引用的模块目录**物理复制**到 `example/harmony/` 下(如 `cp -R ../../harmony/safe_area ./safe_area`)
|
|
355
|
-
2. 修改 `build-profile.json5` 与 `build-profile.template.json5` 中的 `srcPath` 为工程内相对路径(如 `'../../harmony/safe_area'` → `'./safe_area'`)
|
|
356
|
-
3. 同步修正被复制模块自身的 `oh-package.json5` 中 `file:` 引用路径(见 5.2)
|
|
357
|
-
|
|
358
|
-
> ⚠️ **符号链接不可行**:hvigor 不跟随 symlink,必须物理复制目录。
|
|
359
|
-
|
|
360
|
-
### 5.2 .har 文件路径验证(必须执行)
|
|
361
|
-
|
|
362
|
-
被复制的模块(或原有模块)的 `oh-package.json5` 中 `file:` 引用的 `.har` 文件,**必须逐一验证存在性**:
|
|
363
|
-
|
|
364
|
-
```bash
|
|
365
|
-
# 读取模块 oh-package.json5 中的 file: 引用
|
|
366
|
-
grep -o "file:[^,\"]*" example/harmony/<module>/oh-package.json5
|
|
367
|
-
|
|
368
|
-
# 逐一验证文件存在
|
|
369
|
-
ls -la example/harmony/<module>/../../node_modules/@react-native-oh/<pkg>/<xxx>.har
|
|
370
|
-
```
|
|
371
|
-
|
|
372
|
-
| 检查结果 | 处理 |
|
|
373
|
-
|---------|------|
|
|
374
|
-
| `.har` 文件存在于 `file:` 指定路径 | ✅ 无需处理 |
|
|
375
|
-
| 路径多/少一层子目录(如 `harmony/react_native_openharmony.har` vs `react_native_openharmony.har`) | ❌ 修正 `oh-package.json5` 中的路径,使其指向实际 `.har` 文件位置 |
|
|
376
|
-
| `.har` 文件不存在 | ❌ 报告标注,由 `rn-lib-add-example` 处理 |
|
|
377
|
-
|
|
378
|
-
> ⚠️ `.har` 路径错误会导致 `ohpm install` 静默跳过该依赖,编译时报 `Cannot find module`。
|
|
379
|
-
|
|
380
|
-
---
|
|
381
|
-
|
|
382
|
-
## Phase 6:修正 import 路径与 displayName
|
|
383
|
-
|
|
384
|
-
迁移后**必须**检查并修正以下内容(使用 `Edit` 工具逐文件处理)。
|
|
385
|
-
|
|
386
|
-
> ⚠️ **仅修正本次新增的文件**:如果某文件是目标已有的(冲突保留项),**不修改它**,仅在报告中标注需人工处理。
|
|
387
|
-
|
|
388
|
-
### 6.1 相对路径修正
|
|
389
|
-
|
|
390
|
-
`tests/index.tsx` 等子目录文件中引用 demo 内容的相对路径可能失效。常见修正:
|
|
391
|
-
|
|
392
|
-
| 错误写法 | 正确写法 | 原因 |
|
|
393
|
-
|----------|----------|------|
|
|
394
|
-
| `./camera/CameraDemo` | `../camera/CameraDemo` | `tests/` 下的文件引用上级目录 |
|
|
395
|
-
| `./components/Nav` | `../components/Nav` | 同上 |
|
|
396
|
-
|
|
397
|
-
### 6.2 入口文件对齐
|
|
398
|
-
|
|
399
|
-
- `example/src/App.tsx`:`displayName` / `title` 与 demo 名称一致
|
|
400
|
-
- `example/src/index.tsx`:`export` 路径与迁入的 demo 目录结构一致
|
|
401
|
-
|
|
402
|
-
### 6.3 目标库引用对齐
|
|
403
|
-
|
|
404
|
-
确认 demo 中目标库的引用方式与 example 的 `metro.config.js` 别名一致:
|
|
405
|
-
|
|
406
|
-
- demo 用 `import { X } from '<alias>'` → example `metro.config.js` 的 `extraNodeModules['<alias>']` 指向 `node_modules/<ohPackageName>`
|
|
407
|
-
- demo 用 `import { X } from '<packageName>'` → 同步更新 `tsconfig.json` 的 `paths`
|
|
408
|
-
|
|
409
|
-
> 完整路径修正检查清单参见 [references/DEMO_PORTING_GUIDE.md](references/DEMO_PORTING_GUIDE.md) 的「路径修正」章节。
|
|
410
|
-
|
|
411
|
-
### 6.4 入口文件接入
|
|
412
|
-
|
|
413
|
-
迁移后检查 demo 入口文件(如 `testCase/App.tsx`)是否已被 `example/src/index.tsx` 引用。若未接入,**仅在 `index.tsx` 是本次新增文件时**才更新它;若 `index.tsx` 是目标已有文件,不覆盖,在报告中标注需人工接入。
|
|
414
|
-
|
|
415
|
-
| 场景 | 处理 |
|
|
416
|
-
|------|------|
|
|
417
|
-
| `index.tsx` 已引用 demo 入口 | ✅ 无需处理 |
|
|
418
|
-
| `index.tsx` 是本次新增文件,未引用 demo 入口 | 更新 `index.tsx`,re-export demo 入口的默认导出和元数据 |
|
|
419
|
-
| `index.tsx` 是目标已有文件,未引用 demo 入口 | ❌ 不覆盖;报告中标注「入口未接入,需人工在已有 index.tsx 中添加 re-export」 |
|
|
420
|
-
| demo 入口即为 `index.tsx` | ✅ 无需处理 |
|
|
421
|
-
|
|
422
|
-
**示例**(demo 入口在 `testCase/App.tsx`,`index.tsx` 原有独立内容):
|
|
423
|
-
|
|
424
|
-
```tsx
|
|
425
|
-
// index.tsx — 更新为 re-export demo 入口
|
|
426
|
-
export {
|
|
427
|
-
default,
|
|
428
|
-
displayName,
|
|
429
|
-
framework,
|
|
430
|
-
category,
|
|
431
|
-
title,
|
|
432
|
-
documentationURL,
|
|
433
|
-
description,
|
|
434
|
-
examples,
|
|
435
|
-
} from './testCase/App';
|
|
436
|
-
```
|
|
437
|
-
|
|
438
|
-
**检查方法**:
|
|
439
|
-
|
|
440
|
-
```bash
|
|
441
|
-
# 确认 index.tsx 是否引用了 demo 入口
|
|
442
|
-
grep -l "testCase/App\|demo/App\|./App" example/src/index.tsx
|
|
443
|
-
```
|
|
444
|
-
|
|
445
|
-
> 入口接入是迁移完成的必要步骤——未接入的 demo 入口不会在运行时生效。
|
|
446
|
-
|
|
447
|
-
### 6.5 Navigation.tsx 硬编码标题修正
|
|
448
|
-
|
|
449
|
-
rnt demo 中的 `Navigation.tsx`(或类似共享组件)常包含**其他库的硬编码标题**(如 `"RN Svg Capi Tester"`),是从 rnt 共享代码中遗留的。迁移后**必须**检测并修正。
|
|
450
|
-
|
|
451
|
-
**检测**:`analyze-demo-deps.cjs` 的 `hardcodedTitles` 字段列出所有匹配 `RN <Xxx> (Capi )?Tester` 模式的硬编码文本。
|
|
452
|
-
|
|
453
|
-
**修正规则**:
|
|
454
|
-
|
|
455
|
-
| 字段 | 值 |
|
|
456
|
-
|------|-----|
|
|
457
|
-
| 匹配模式 | `RN\s+\w+(?:\s+\w+)*\s+(?:Capi\s+)?Tester` |
|
|
458
|
-
| 替换值 | `RN <Alias> Tester`(Alias 从 `libMeta.alias` 取,首字母大写) |
|
|
459
|
-
| 替换范围 | 仅替换 `hardcodedTitles` 中列出的**本次新增**文件;目标已有文件不修改,在报告中标注 |
|
|
460
|
-
|
|
461
|
-
**示例**:
|
|
462
|
-
|
|
463
|
-
```tsx
|
|
464
|
-
// ❌ 迁移前(Navigation.tsx 遗留的 Svg 库标题)
|
|
465
|
-
<Text>RN Svg Capi Tester</Text>
|
|
466
|
-
|
|
467
|
-
// ✅ 迁移后(修正为 PDF 库标题,alias = "react-native-pdf")
|
|
468
|
-
<Text>RN Pdf Tester</Text>
|
|
469
|
-
```
|
|
470
|
-
|
|
471
|
-
**执行**:Agent 使用 `Edit` 工具,逐个替换 `hardcodedTitles` 中列出的**本次新增**文件里的硬编码文本。目标已有文件中的硬编码标题不修改,在报告中标注「需人工修正」。
|
|
472
|
-
|
|
473
|
-
> 未修正的硬编码标题会导致 demo 界面显示错误的库名,属于必修正项。
|
|
474
|
-
|
|
475
|
-
### 6.6 孤立文件检测与接入(必须执行)
|
|
476
|
-
|
|
477
|
-
迁移后**必须**检查每个迁移的 `.tsx`/`.ts` 文件是否被入口文件(`index.tsx` 或 `App.tsx`)直接或间接引用。未被引用的文件为「孤立文件」,用户无法通过导航访问到这些 demo。
|
|
478
|
-
|
|
479
|
-
**检测方法**:
|
|
480
|
-
|
|
481
|
-
```bash
|
|
482
|
-
# 列出迁移的所有 .tsx/.ts 文件
|
|
483
|
-
find example/src -name "*.tsx" -o -name "*.ts" | grep -v node_modules | sort
|
|
484
|
-
|
|
485
|
-
# 从入口文件开始,检查 import 链是否覆盖所有文件
|
|
486
|
-
grep -rn "from '\./" example/src/index.tsx example/src/App.tsx
|
|
487
|
-
```
|
|
488
|
-
|
|
489
|
-
| 文件状态 | 处理 |
|
|
490
|
-
|---------|------|
|
|
491
|
-
| 文件被入口直接/间接引用 | ✅ 无需处理 |
|
|
492
|
-
| 文件有 `export` 但未被入口引用(如 `demo03.tsx`、`demo05.tsx`) | ⚠️ **必须接入**:将组件加入 `index.tsx` 的 `demos` 数组(或 `App.tsx` 的菜单),确保用户可导航到 |
|
|
493
|
-
| 文件无 `export`(纯内部模块) | 检查是否被其他文件引用;若确实无用,在报告中标注 |
|
|
494
|
-
|
|
495
|
-
**接入示例**(孤立文件 `demo03.tsx` 导出 `SafeAreaProviderProp`):
|
|
496
|
-
|
|
497
|
-
```tsx
|
|
498
|
-
// index.tsx — 将孤立文件组件加入 demos 数组
|
|
499
|
-
import { SafeAreaProviderProp } from './demo03';
|
|
500
|
-
|
|
501
|
-
const demos: IDemoItem[] = [
|
|
502
|
-
// ... 已有 demo ...
|
|
503
|
-
{ Component: SafeAreaProviderProp, name: 'SafeAreaProviderProp (demo03)', key: 'SafeAreaProviderPropDemo03' },
|
|
504
|
-
];
|
|
505
|
-
```
|
|
506
|
-
|
|
507
|
-
> ⚠️ 孤立文件不会在运行时被加载,用户无法访问其中的 demo。此检查是**必执行项**,不可跳过。
|
|
508
|
-
|
|
509
|
-
### 6.7 菜单容器 ScrollView 适配(必须执行)
|
|
510
|
-
|
|
511
|
-
当 `demos` 数组条目数 > 5 时,菜单内容可能超出屏幕高度。此时**必须**将菜单容器从 `<View>` 改为 `<ScrollView>`,否则底部的 demo 条目不可见、不可点击。
|
|
512
|
-
|
|
513
|
-
**检测方法**:
|
|
514
|
-
|
|
515
|
-
```bash
|
|
516
|
-
# 统计 demos 数组条目数
|
|
517
|
-
grep -c "Component:" example/src/index.tsx
|
|
518
|
-
```
|
|
519
|
-
|
|
520
|
-
| 条目数 | 处理 |
|
|
521
|
-
|--------|------|
|
|
522
|
-
| ≤ 5 | ✅ `<View>` 即可 |
|
|
523
|
-
| > 5 | ⚠️ **必须**将菜单容器改为 `<ScrollView>` |
|
|
524
|
-
|
|
525
|
-
**修正示例**:
|
|
526
|
-
|
|
527
|
-
```tsx
|
|
528
|
-
// ❌ 迁移前(View 不支持滚动,底部 demo 不可见)
|
|
529
|
-
<View style={styles.demoNav}>{demoMenu}</View>
|
|
530
|
-
|
|
531
|
-
// ✅ 迁移后(ScrollView 支持滚动)
|
|
532
|
-
<ScrollView style={styles.demoNav}>{demoMenu}</ScrollView>
|
|
533
|
-
```
|
|
534
|
-
|
|
535
|
-
> 确保 `ScrollView` 已从 `react-native` 导入。仅修改本次新增的 `index.tsx`;若 `index.tsx` 是目标已有文件,在报告中标注需人工修改。
|
|
536
|
-
|
|
537
|
-
### 6.8 保留原有 App.tsx 入口(必须执行)
|
|
538
|
-
|
|
539
|
-
迁移 rnt demo 的 `index.tsx` 后,**必须**检查目标工程原有的 `App.tsx` 是否仍可访问。直接替换 `index.js` 的入口注册会丢失原有 demo。
|
|
540
|
-
|
|
541
|
-
**检查方法**:
|
|
542
|
-
|
|
543
|
-
```bash
|
|
544
|
-
# 查看 index.js 注册的入口
|
|
545
|
-
grep "registerComponent" example/index.js
|
|
546
|
-
```
|
|
547
|
-
|
|
548
|
-
| 场景 | 处理 |
|
|
549
|
-
|------|------|
|
|
550
|
-
| `index.js` 注册的是 `./src/App`(原有入口) | ⚠️ 若要使用 rnt 的 `index.tsx` 作为新入口,**必须**将原有 `App.tsx` 作为一个菜单项接入 `index.tsx` 的 `demos` 数组,确保用户可跳转到原有 demo |
|
|
551
|
-
| `index.js` 注册的是 `./src/index`(rnt 入口) | 检查 `index.tsx` 是否已包含原有 `App.tsx` 的入口;若未包含,按下方示例接入 |
|
|
552
|
-
| 无原有 `App.tsx` | ✅ 无需处理 |
|
|
553
|
-
|
|
554
|
-
**接入示例**(将原有 App.tsx 作为菜单项):
|
|
555
|
-
|
|
556
|
-
```tsx
|
|
557
|
-
// index.tsx — 保留原有 App.tsx 入口
|
|
558
|
-
import OriginalApp from './App';
|
|
559
|
-
|
|
560
|
-
const demos: IDemoItem[] = [
|
|
561
|
-
{ Component: OriginalApp, name: 'Original Demo (App.tsx)', key: 'OriginalApp' },
|
|
562
|
-
// ... rnt 迁移的 demo ...
|
|
563
|
-
];
|
|
564
|
-
```
|
|
565
|
-
|
|
566
|
-
同时更新 `index.js`:
|
|
567
|
-
|
|
568
|
-
```js
|
|
569
|
-
// index.js — 指向 rnt 迁移的 index.tsx
|
|
570
|
-
import Demo from './src/index';
|
|
571
|
-
AppRegistry.registerComponent(appName, () => Demo);
|
|
572
|
-
```
|
|
573
|
-
|
|
574
|
-
> ⚠️ 丢失原有 App.tsx 入口会导致已有 demo 不可访问。此检查是**必执行项**。
|
|
575
|
-
|
|
576
|
-
### 6.9 入口链路端到端验证(必须执行)
|
|
577
|
-
|
|
578
|
-
迁移完成后,**必须**验证从 `index.js` 到每个 demo 组件的完整引用链路畅通:
|
|
579
|
-
|
|
580
|
-
```
|
|
581
|
-
index.js → src/index.tsx → Demo 组件 → demos 数组 → 各 Test 组件 → ./demo/ 子组件
|
|
582
|
-
```
|
|
583
|
-
|
|
584
|
-
**验证清单**:
|
|
585
|
-
|
|
586
|
-
| # | 检查项 | 验证方法 | 通过标准 |
|
|
587
|
-
|---|--------|---------|---------|
|
|
588
|
-
| 1 | `index.js` 注册的入口存在 | `grep "registerComponent" example/index.js` 然后检查指向的文件存在 | 文件存在且可导入 |
|
|
589
|
-
| 2 | `index.tsx` 的 `demos` 数组覆盖所有迁移组件 | 对比 `demos` 数组与迁移文件列表 | 所有有 `export` 的组件都在 `demos` 中 |
|
|
590
|
-
| 3 | 每个 Test 组件引用的 `./demo/XxxExample` 路径存在 | 逐一 `ls` 验证 | 文件存在 |
|
|
591
|
-
| 4 | 菜单容器支持滚动(当条目 > 5) | 检查 `index.tsx` 中菜单容器是 `ScrollView` | ✅ |
|
|
592
|
-
| 5 | Back 按钮可返回菜单 | 检查 `backClickHandle` 重置 `currentDemoKey` | ✅ |
|
|
593
|
-
|
|
594
|
-
> 入口链路断裂会导致白屏或部分 demo 不可访问。此验证是**必执行项**。
|
|
595
|
-
|
|
596
|
-
---
|
|
597
|
-
|
|
598
|
-
## Phase 7:生成迁移报告
|
|
599
|
-
|
|
600
|
-
按模板生成 Markdown 报告,记录迁移全过程与待办项。
|
|
601
|
-
|
|
602
|
-
```bash
|
|
603
|
-
# 报告模板位于 assets/PORT_REPORT_TEMPLATE.md
|
|
604
|
-
# Agent 读取模板后填充实际值并写入:
|
|
605
|
-
# {libPath}/rn-lib-ohos/rnt-demo-port-report.md (若处于 rn-lib-ohos 流程中)
|
|
606
|
-
# 或 {libPath}/rnt-demo-port-report.md (独立调用时)
|
|
607
|
-
```
|
|
608
|
-
|
|
609
|
-
**报告必含**:
|
|
610
|
-
|
|
611
|
-
1. **版本信息**:库分支、rnt 分支、RNOH 版本、example/package.json 版本一致性
|
|
612
|
-
2. **demo 来源**:rnt 工程路径、demo 子目录、命中候选名
|
|
613
|
-
3. **迁移文件清单**:相对路径列表 + 文件数(区分「本次新增」与「冲突保留目标版本」)
|
|
614
|
-
4. **冲突文件清单**:demo 与目标同名的文件列表,标注「目标版本已保留,demo 版本未写入」
|
|
615
|
-
5. **依赖增量**:新增依赖、版本、来源(demo import 分析);**标注 example/package.json 中缺失的依赖**(Phase 4.1 检查结果)
|
|
616
|
-
6. **路径修正记录**:每个修正的文件与改动(仅本次新增文件;含入口接入、Navigation.tsx 标题修正、孤立文件接入、ScrollView 适配、原有 App.tsx 保留)
|
|
617
|
-
7. **构建前置检查结果**:
|
|
618
|
-
- build-profile.json5 模块路径越界检查(Phase 5.1)
|
|
619
|
-
- .har 文件路径验证(Phase 5.2)
|
|
620
|
-
- 外部依赖缺失清单(Phase 4.1)
|
|
621
|
-
- 入口链路验证结果(Phase 6.9)
|
|
622
|
-
8. **待人工确认项**:业务无关依赖、版本不一致、冲突文件需人工合并、入口文件需人工接入等
|
|
623
|
-
9. **后续步骤**:建议执行 `rn-lib-add-example` 完成 Harmony 壳层适配与依赖写入;执行 `npm i` → `ohpm install` → `npm run dev` → `devecocli build` 编译验证
|
|
624
|
-
|
|
625
|
-
> 报告模板参见 [assets/PORT_REPORT_TEMPLATE.md](assets/PORT_REPORT_TEMPLATE.md)。
|
|
626
|
-
|
|
627
|
-
---
|
|
628
|
-
|
|
629
|
-
## 与其他 SKILL 的协作
|
|
630
|
-
|
|
631
|
-
| 协作 SKILL | 关系 | 调用时机 |
|
|
632
|
-
|-----------|------|---------|
|
|
633
|
-
| `rn-lib-add-example` | **下游** | 本 SKILL 完成 demo 迁移后,由 `rn-lib-add-example` 完成 example 模板创建(若缺失)、Harmony 壳层适配、依赖写入、License/OAT、构建验证 |
|
|
634
|
-
| `rn-lib-ohos` | **父流程** | 在 `rn-lib-ohos` Step 5 中调用本 SKILL 执行 demo 查找与迁移,再由 `rn-lib-add-example` 完成壳层适配 |
|
|
635
|
-
| `rnoh-lib-demo-coverage` | **下游(可选)** | 迁移完成后可调用覆盖率分析脚本评估 demo 对库 API 的覆盖程度 |
|
|
636
|
-
|
|
637
|
-
**职责边界**:
|
|
638
|
-
|
|
639
|
-
| 任务 | 负责SKILL |
|
|
640
|
-
|------|----------|
|
|
641
|
-
| 查找 rnt demo | 本 SKILL |
|
|
642
|
-
| 分析 demo 依赖 | 本 SKILL |
|
|
643
|
-
| 迁移 demo 文件 | 本 SKILL |
|
|
644
|
-
| 修正 import 路径 | 本 SKILL |
|
|
645
|
-
| 创建 example 模板 | `rn-lib-add-example` |
|
|
646
|
-
| 写入 example/package.json 依赖 | `rn-lib-add-example` |
|
|
647
|
-
| Harmony 壳层(RNPackagesFactory/CMakeLists/build-profile) | `rn-lib-add-example` |
|
|
648
|
-
| License 头 / OAT.xml | `rn-lib-add-example` |
|
|
649
|
-
| `npm run dev` 构建验证 | `rn-lib-add-example` |
|
|
650
|
-
|
|
651
|
-
---
|
|
652
|
-
|
|
653
|
-
## 常见边界情况
|
|
654
|
-
|
|
655
|
-
- **目标 example/ 不存在**:提示用户先执行 `rn-lib-add-example` 创建模板,本 SKILL 终止。
|
|
656
|
-
- **rnt 工程无 `rn-tester/examples/` 子目录**:报告终止,提示用户检查 rnt 根路径。
|
|
657
|
-
- **demo 与已有 example/src 内容冲突**:**增量添加,不覆盖**。冲突文件保留目标版本,demo 版本不写入,在报告中列出供人工确认是否合并。
|
|
658
|
-
- **版本无法对齐**:库与 rnt 均无对应版本分支时报错终止,列出可用分支供用户参考。
|
|
659
|
-
- **工作区有未提交修改**:切换分支前自动 `git stash`,迁移完成后 `git stash pop` 恢复。
|
|
660
|
-
- **example/package.json 版本不匹配**:example 的 react-native/react-native-harmony 版本与目标 RNOH 版本不一致时,报告中标注为高优先级待确认项,不阻塞迁移。
|
|
661
|
-
- **Navigation.tsx 含硬编码标题**:自动检测并替换为目标库的 alias(Phase 6.5)。
|
|
662
|
-
- **demo 入口未被 index.tsx 引用**:自动检测并接入(Phase 6.4)。
|
|
663
|
-
- **demo 引用了目标库的内部路径**(如 `react-native-camera-kit/src/internal`):列入「待人工确认」,不自动改写。
|
|
664
|
-
- **demo 含原生代码**(`.ets`/`.cpp`):本 SKILL 仅迁移 JS/TS 层;原生代码由 `rn-lib-add-example` 壳层适配处理,报告标注。
|
|
665
|
-
- **rnt 工程路径跨盘/网络挂载**:`rsync` 可能较慢,建议本地拷贝 rnt 工程后执行。
|
|
666
|
-
- **demo 引用 rnt 特有外部依赖(如 @rnoh/testerino)**:example/package.json 未声明该依赖时,所有使用该依赖的组件运行时崩溃。Phase 4.1 检查并从 rnt 工程提取版本信息,在报告中标注为高优先级缺失项。
|
|
667
|
-
- **build-profile.json5 模块路径越界**:`modules[].srcPath` 以 `../` 开头时 hvigor 报错 `Path escapes project root`。Phase 5.1 检测并物理复制模块到工程内,修正路径。符号链接不可行(hvigor 不跟随 symlink)。
|
|
668
|
-
- **oh-package.json5 中 .har 路径错误**:`file:` 引用的 `.har` 路径多/少一层子目录时,`ohpm install` 静默跳过该依赖。Phase 5.2 逐一验证 .har 文件存在性。
|
|
669
|
-
- **迁移的独立 demo 文件未被入口引用**:如 `demo03.tsx`、`demo05.tsx` 已迁移但未被 `index.tsx` 的 `demos` 数组引用,用户无法访问。Phase 6.6 检测并接入。
|
|
670
|
-
- **菜单条目过多无法滚动**:demo 条目 > 5 且菜单容器为 `<View>` 时,底部条目不可见。Phase 6.7 检测并改为 `<ScrollView>`。
|
|
671
|
-
- **替换入口丢失原有 App.tsx demo**:`index.js` 改为注册 `./src/index` 后,原有 `App.tsx` 的 demo 不可访问。Phase 6.8 将原有 App.tsx 作为菜单项接入。
|
|
672
|
-
|
|
673
|
-
> 完整边界情况与处理策略参见 [references/PORT_VERIFICATION.md](references/PORT_VERIFICATION.md)。
|
|
674
|
-
|
|
675
|
-
---
|
|
676
|
-
|
|
677
|
-
## 需向用户确认的信息
|
|
678
|
-
|
|
679
|
-
| # | 节点 | 说明 |
|
|
680
|
-
|---|------|------|
|
|
681
|
-
| 1 | 目标库根目录路径 | 若未通过参数传入 |
|
|
682
|
-
| 2 | rnt 工程路径 | 若未通过参数传入 |
|
|
683
|
-
| 3 | 版本无法自动对齐 | 库与 rnt 均无对应版本分支时,提示用户手动指定 |
|
|
684
|
-
| 4 | 是否清空目标 example/src | `--clean` 启用时必须确认 |
|
|
685
|
-
| 5 | 业务无关依赖是否写入 | 列出后请用户决策 |
|
|
686
|
-
| 6 | 冲突文件是否需要合并 | demo 与目标同名文件保留目标版本后,询问用户是否需要手动合并 |
|
|
687
|
-
|
|
688
|
-
---
|
|
689
|
-
|
|
690
|
-
## Agent 禁止事项
|
|
691
|
-
|
|
692
|
-
- **禁止**在版本未对齐时跳过版本检测直接迁移(必须先执行 Phase 2 确认版本一致或已切换分支)。
|
|
693
|
-
- **禁止**在有未提交修改时直接 `git checkout`(必须先 `git stash`)。
|
|
694
|
-
- **禁止**自动启用 `--clean` 清空目标 `example/src/`(必须用户明确同意)。
|
|
695
|
-
- **禁止**覆盖目标 `example/src/` 已有文件(默认 `--ignore-existing`,冲突文件保留目标版本)。
|
|
696
|
-
- **禁止**修改目标已有的文件(路径修正、入口接入、标题修正仅针对本次新增文件)。
|
|
697
|
-
- **禁止**修改目标库 `src/`、`harmony/` 源码(本 SKILL 只动 `example/src/`)。
|
|
698
|
-
- **禁止**自动写入 `example/package.json` 依赖(由 `rn-lib-add-example` 统一处理;本 SKILL 只产出依赖增量清单供下游使用)。
|
|
699
|
-
- **禁止**跳过迁移报告生成。
|
|
700
|
-
- **禁止**跳过入口文件接入检查(Phase 6.4 必须执行)。
|
|
701
|
-
- **禁止**跳过 Navigation.tsx 硬编码标题修正(Phase 6.5 必须执行,仅针对本次新增文件)。
|
|
702
|
-
- **禁止**跳过外部依赖存在性检查(Phase 4.1 必须执行,缺失依赖会导致运行时崩溃)。
|
|
703
|
-
- **禁止**跳过 build-profile.json5 路径越界检查(Phase 5.1 必须执行,越界路径导致编译失败)。
|
|
704
|
-
- **禁止**跳过 .har 文件路径验证(Phase 5.2 必须执行,路径错误导致 ohpm 静默跳过依赖)。
|
|
705
|
-
- **禁止**跳过孤立文件检测(Phase 6.6 必须执行,孤立文件用户无法访问)。
|
|
706
|
-
- **禁止**跳过菜单 ScrollView 适配(Phase 6.7 必须执行,条目 > 5 时不滚动导致底部不可见)。
|
|
707
|
-
- **禁止**替换入口时丢失原有 App.tsx demo(Phase 6.8 必须执行,原有入口必须作为菜单项保留)。
|
|
708
|
-
- **禁止**跳过入口链路端到端验证(Phase 6.9 必须执行)。
|
|
709
|
-
- **禁止**使用符号链接解决 build-profile 路径越界(hvigor 不跟随 symlink,必须物理复制)。
|
|
710
|
-
- **禁止**自动执行 `npm install` 或 `npm run dev`(验证由下游 SKILL 完成)。
|
|
711
|
-
- **禁止**迁移 demo 中的 `node_modules/`、`build/`、`__tests__/`(脚本默认排除,Agent 不得绕过)。
|
|
712
|
-
|
|
713
|
-
---
|
|
714
|
-
|
|
715
|
-
## 输出物清单
|
|
716
|
-
|
|
717
|
-
1. **迁移后的 `example/src/` 文件** — demo 源码已增量添加(不覆盖已有文件),新增文件路径已修正,所有 demo 可通过菜单导航访问
|
|
718
|
-
2. **迁移报告 Markdown**(`rnt-demo-port-report.md`) — 含来源、文件清单、冲突文件清单、依赖增量(含缺失依赖标注)、构建前置检查结果、待办项
|
|
719
|
-
3. **依赖增量清单**(报告内章节) — 供 `rn-lib-add-example` 写入 `example/package.json` 使用;标注 example/package.json 中缺失的依赖及建议写入值
|
|
720
|
-
4. **冲突文件清单**(报告内章节) — demo 与目标同名文件列表,标注目标版本已保留,供人工确认是否合并
|
|
721
|
-
5. **待人工确认项清单**(报告内章节) — 业务无关依赖、冲突文件合并、入口文件接入、原生代码标注
|
|
722
|
-
6. **构建前置检查结果**(报告内章节) — build-profile 路径越界、.har 路径验证、入口链路验证结果
|
|
1
|
+
---
|
|
2
|
+
name: rnoh-lib-rnt-search
|
|
3
|
+
description: >-
|
|
4
|
+
从 rnt(React Native Tester)工程中定位 RN 鸿蒙三方库的 demo 并增量迁移到指定 RN 目标工程的 example/src 下。读取目标库 package.json 元数据生成候选名,扫描 {rnt-root}/*/rn-tester/examples/ 匹配 demo 目录,分析 demo 结构与外部依赖,复制 demo 文件(增量添加,不覆盖目标已有文件)并修正 import 路径与依赖。当用户需要从 rnt 工程查找并迁移 demo 到 RN 鸿蒙三方库 example 工程、单独执行 demo 查找/迁移步骤、向 example/src 增量添加 demo、分析 rnt demo 依赖时使用。适用于 rnt demo 定位、demo 迁移、demo 依赖分析、example 内容增量添加等场景。
|
|
5
|
+
license: Apache-2.0
|
|
6
|
+
compatibility: 需要 bash、node、npm;目标 RN 工程需已有 example/ 目录(缺失时引导使用 rn-lib-add-example 创建)
|
|
7
|
+
allowed-tools: Bash Read Grep Glob Edit Write
|
|
8
|
+
metadata:
|
|
9
|
+
version: "1.0.0"
|
|
10
|
+
category: rn-demo-porting
|
|
11
|
+
language: JavaScript/TypeScript
|
|
12
|
+
consumed-by: rnohLibAddExampleSkill
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
# RN 鸿蒙三方库 rnt Demo 查找与迁移
|
|
16
|
+
|
|
17
|
+
从 rnt(React Native Tester)工程中定位目标 RN 三方库的 demo 目录,迁移到指定 RN 目标工程的 `example/src/`,并完成 import 路径与依赖的修正。
|
|
18
|
+
|
|
19
|
+
> ⚠️ **核心原则**:
|
|
20
|
+
> 1. 通过 RNOH 框架版本(git 分支或元数据)自动对齐库与 rnt,版本一致时自动选择 demo 并直接迁移,无需人工确认。
|
|
21
|
+
> 2. 本 SKILL 只负责「查找 + 迁移 demo 内容」,不创建/重建 example 工程模板、不做 Harmony 壳层(RNPackagesFactory/CMakeLists/build-profile 等)适配——这些由 `rn-lib-add-example` 完成。
|
|
22
|
+
> 3. **增量添加,不覆盖**:迁移时目标 `example/src/` 已有的文件**保留不动**,仅添加 demo 中目标不存在的文件。冲突文件保留目标版本,在报告中列出供人工确认。
|
|
23
|
+
> 4. 迁移完成后必须输出迁移报告,列出 demo 来源、文件清单、依赖增量、冲突文件(保留目标版本)、待人工确认项。
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## 路径约定
|
|
28
|
+
|
|
29
|
+
`{SKILL_DIR}` = 本技能根目录(本 SKILL.md 所在目录)。命令均在 `{SKILL_DIR}` 下执行,使用 `scripts/...`、`references/...` 相对路径。
|
|
30
|
+
|
|
31
|
+
## 何时使用
|
|
32
|
+
|
|
33
|
+
- 用户要求从 rnt 工程查找并迁移某个 RN 三方库的 demo。
|
|
34
|
+
- 用户要求向已有 RN 工程的 `example/src/` **增量添加** demo 内容(不覆盖已有文件)。
|
|
35
|
+
- 用户在 `rn-lib-add-example` 流程中需要单独执行 Step 2(demo 查找与迁移)。
|
|
36
|
+
- 用户想分析 rnt demo 的外部依赖,决定 example 需要补哪些包。
|
|
37
|
+
- 用户拿到一个 rnt 工程根路径,想自动定位某个库的 demo 子目录。
|
|
38
|
+
|
|
39
|
+
## 最小必要输入
|
|
40
|
+
|
|
41
|
+
| 参数 | 类型 | 必填 | 说明 |
|
|
42
|
+
|------|------|------|------|
|
|
43
|
+
| `libPath` | string | ✅ | 目标 RN 三方库根目录(含 `package.json`) |
|
|
44
|
+
| `rntPath` | string | ✅* | rnt 工程根目录(含多个子工程,每个有 `rn-tester/examples/`) |
|
|
45
|
+
| `demoPath` | string | ✅* | demo 目录绝对路径(用户已明确时直接传入,跳过扫描) |
|
|
46
|
+
| `targetExampleSrc` | string | ❌ | 目标 RN 工程 `example/src/` 路径;缺省时按 `libPath/example/src` 推断 |
|
|
47
|
+
| `cleanTarget` | boolean | ❌ | 迁移前是否清空目标 `example/src/`;默认 `false`(**增量添加,不覆盖已有文件**) |
|
|
48
|
+
| `rnohVersion` | string | ❌ | 目标 RNOH 框架版本号(如 "0.82")。未提供时自动从 rnt 分支检测。用于版本对齐与分支切换。 |
|
|
49
|
+
|
|
50
|
+
> `rntPath` 与 `demoPath` 二选一:用户已明确 demo 路径时传 `demoPath` 跳过扫描;否则必须传 `rntPath` 由脚本扫描定位。
|
|
51
|
+
|
|
52
|
+
**派生变量**:
|
|
53
|
+
- `skillDir`:本 SKILL 所在目录
|
|
54
|
+
- `libMeta`:`read-lib-meta.cjs` 输出的库元数据 JSON
|
|
55
|
+
- `libVersion`:库的 RNOH 版本(`detect-rnoh-version.cjs` 输出)
|
|
56
|
+
- `rntVersion`:rnt 的 RNOH 版本(`detect-rnoh-version.cjs` 输出)
|
|
57
|
+
- `demoFiles`:demo 目录下待迁移的源文件清单
|
|
58
|
+
- `demoDeps`:`analyze-demo-deps.cjs` 输出的外部依赖清单
|
|
59
|
+
|
|
60
|
+
## 输入依赖
|
|
61
|
+
|
|
62
|
+
- **前置SKILL**:无(可独立调用)。若目标 RN 工程 `example/` 不存在,引导用户先执行 `rn-lib-add-example` 创建模板。
|
|
63
|
+
- **输入文件**:目标库 `package.json`、rnt 工程目录树、demo 源码目录。
|
|
64
|
+
- **输出文件**:迁移后的 `example/src/` 文件 + 迁移报告 Markdown。
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
## 工作流程概览
|
|
69
|
+
|
|
70
|
+
```
|
|
71
|
+
Phase 1: 读取库元数据(read-lib-meta.cjs)
|
|
72
|
+
↓
|
|
73
|
+
Phase 2: 版本检测与对齐(detect-rnoh-version.cjs,自动切换分支)
|
|
74
|
+
↓
|
|
75
|
+
Phase 3: 扫描 rnt 工程定位 demo(find-rnt-demo.sh,版本一致时自动选择)
|
|
76
|
+
↓
|
|
77
|
+
Phase 4: 分析 demo 结构与外部依赖(analyze-demo-deps.cjs)
|
|
78
|
+
4.1 外部依赖存在性检查(example/package.json 是否已声明)
|
|
79
|
+
4.2 从 rnt 工程提取缺失依赖的版本信息
|
|
80
|
+
↓
|
|
81
|
+
Phase 5: 迁移 demo 到目标 example/src(port-demo.sh)
|
|
82
|
+
5.1 build-profile.json5 模块路径越界检查
|
|
83
|
+
5.2 .har 文件路径验证
|
|
84
|
+
↓
|
|
85
|
+
Phase 6: 修正 import 路径与 displayName + 入口接入
|
|
86
|
+
6.1 相对路径修正
|
|
87
|
+
6.2 入口文件对齐
|
|
88
|
+
6.3 目标库引用对齐
|
|
89
|
+
6.4 入口文件接入
|
|
90
|
+
6.5 Navigation.tsx 硬编码标题修正
|
|
91
|
+
6.6 孤立文件检测与接入
|
|
92
|
+
6.7 菜单容器 ScrollView 适配
|
|
93
|
+
6.8 保留原有 App.tsx 入口
|
|
94
|
+
6.9 入口链路端到端验证
|
|
95
|
+
↓
|
|
96
|
+
Phase 7: 生成迁移报告并交付
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
> rnt 工程结构与 demo 目录约定详见 [references/RNT_PROJECT_STRUCTURE.md](references/RNT_PROJECT_STRUCTURE.md)。
|
|
100
|
+
|
|
101
|
+
---
|
|
102
|
+
|
|
103
|
+
## Phase 1:读取库元数据
|
|
104
|
+
|
|
105
|
+
读取目标库 `package.json`,提取用于 demo 搜索的候选名与鸿蒙化字段。
|
|
106
|
+
|
|
107
|
+
```bash
|
|
108
|
+
node scripts/read-lib-meta.cjs <libPath>
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
**关注字段**:
|
|
112
|
+
|
|
113
|
+
| 字段 | 用途 |
|
|
114
|
+
|------|------|
|
|
115
|
+
| `packageName` | npm 包名,写入 example `dependencies` |
|
|
116
|
+
| `alias` | `harmony.alias`,候选搜索名之一 |
|
|
117
|
+
| `scoped` | 去掉 scope 的短名,候选搜索名之一 |
|
|
118
|
+
| `dirBase` | 目录名,候选搜索名之一 |
|
|
119
|
+
| `searchNames` | 候选搜索名数组(去重) |
|
|
120
|
+
| `autolinkingResolved` | 鸿蒙化模块信息(供下游 `rn-lib-add-example` 壳层适配使用,本 SKILL 不直接处理) |
|
|
121
|
+
|
|
122
|
+
> 脚本详情与字段说明参见 [references/DEMO_PORTING_GUIDE.md](references/DEMO_PORTING_GUIDE.md) 的「库元数据字段」章节。
|
|
123
|
+
|
|
124
|
+
---
|
|
125
|
+
|
|
126
|
+
## Phase 2:版本检测与对齐
|
|
127
|
+
|
|
128
|
+
检测目标库与 rnt 工程的 RNOH 框架版本,当版本不一致时自动切换分支对齐。版本一致后直接进入 Phase 3,**无需用户确认**。
|
|
129
|
+
|
|
130
|
+
### 2.1 版本检测
|
|
131
|
+
|
|
132
|
+
```bash
|
|
133
|
+
# 检测库版本
|
|
134
|
+
node scripts/detect-rnoh-version.cjs <libPath>
|
|
135
|
+
|
|
136
|
+
# 检测 rnt 版本
|
|
137
|
+
node scripts/detect-rnoh-version.cjs <rntPath>
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
**版本检测优先级**:
|
|
141
|
+
|
|
142
|
+
| 优先级 | 来源 | 示例 |
|
|
143
|
+
|--------|------|------|
|
|
144
|
+
| 1 | Git 分支名 | `br_rnoh0.82` → `0.82` |
|
|
145
|
+
| 2 | example/package.json | `react-native-harmony: npm:@react-native-oh/react-native-harmony@0.77.72` → `0.77` |
|
|
146
|
+
| 3 | harmony subdirs oh-package.json5 | `@react-native-oh/*` 依赖版本 |
|
|
147
|
+
| 4 | package.json peerDependencies | `react-native: *` |
|
|
148
|
+
|
|
149
|
+
> 非 Git 仓库时自动降级到 package.json / oh-package.json5 检测。
|
|
150
|
+
|
|
151
|
+
### 2.2 版本对齐
|
|
152
|
+
|
|
153
|
+
| 场景 | 处理 |
|
|
154
|
+
|------|------|
|
|
155
|
+
| 库与 rnt 版本一致 | ✅ 直接进入 Phase 3 |
|
|
156
|
+
| 库版本 ≠ rnt 版本,库有对应分支 | 自动 `git checkout` 切换库分支 |
|
|
157
|
+
| 库版本 ≠ rnt 版本,rnt 有对应分支 | 自动 `git checkout` 切换 rnt 分支 |
|
|
158
|
+
| 两者都无法切换到一致版本 | 报错终止,列出可用分支供用户参考 |
|
|
159
|
+
|
|
160
|
+
**分支切换前必须检查工作区是否干净**:
|
|
161
|
+
|
|
162
|
+
```bash
|
|
163
|
+
# 检查是否有未提交的修改
|
|
164
|
+
git -C <path> status --short
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
| 工作区状态 | 处理 |
|
|
168
|
+
|-----------|------|
|
|
169
|
+
| 干净(无输出) | 直接 `git checkout` |
|
|
170
|
+
| 有未提交修改 | `git stash` 暂存 → `git checkout` → 迁移完成后 `git stash pop` 恢复 |
|
|
171
|
+
|
|
172
|
+
### 2.3 example/package.json 版本一致性检测
|
|
173
|
+
|
|
174
|
+
版本对齐后,检查 `example/package.json` 中的 `react-native` / `react-native-harmony` 版本是否与目标 RNOH 版本匹配:
|
|
175
|
+
|
|
176
|
+
```bash
|
|
177
|
+
# 读取 example/package.json 中的 react-native 版本
|
|
178
|
+
node -e "const p=require('./example/package.json'); console.log(p.dependencies['react-native'], p.dependencies['react-native-harmony'])"
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
| 匹配状态 | 处理 |
|
|
182
|
+
|---------|------|
|
|
183
|
+
| ✅ 版本匹配 | 直接进入 Phase 3 |
|
|
184
|
+
| ❌ 版本不匹配 | 在报告中标注「example/package.json react-native 版本与目标 RNOH 版本不一致」,由 `rn-lib-add-example` 更新 |
|
|
185
|
+
|
|
186
|
+
> 版本不一致不阻塞迁移,但在报告中标记为高优先级待确认项。
|
|
187
|
+
|
|
188
|
+
**分支切换示例**:
|
|
189
|
+
|
|
190
|
+
```bash
|
|
191
|
+
# 列出库的可用分支及版本
|
|
192
|
+
node scripts/detect-rnoh-version.cjs <libPath> --list-branches
|
|
193
|
+
|
|
194
|
+
# 切换到目标版本分支
|
|
195
|
+
git -C <libPath> stash # 如有未提交修改
|
|
196
|
+
git -C <libPath> checkout br_rnoh0.82
|
|
197
|
+
git -C <libPath> stash pop # 恢复暂存(如有)
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
> ⚠️ 版本对齐自动执行,不暂停等待用户确认。Agent 检测到版本不一致时直接切换分支使其对齐。
|
|
201
|
+
|
|
202
|
+
---
|
|
203
|
+
|
|
204
|
+
## Phase 3:扫描 rnt 工程定位 demo
|
|
205
|
+
|
|
206
|
+
版本对齐完成后,扫描 rnt 工程定位目标库的 demo 目录。当版本一致且命中唯一 demo 时**自动选择**,无需用户确认。
|
|
207
|
+
|
|
208
|
+
若用户已提供 `demoPath`,跳过本步直接进入 Phase 4。
|
|
209
|
+
|
|
210
|
+
```bash
|
|
211
|
+
bash scripts/find-rnt-demo.sh \
|
|
212
|
+
--lib-path <libPath> \
|
|
213
|
+
--rnt-path <rntPath>
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
**扫描规则**(详见 [references/RNT_PROJECT_STRUCTURE.md](references/RNT_PROJECT_STRUCTURE.md)):
|
|
217
|
+
|
|
218
|
+
1. 读取 `read-lib-meta.cjs` 的 `searchNames` 作为候选名
|
|
219
|
+
2. 遍历 `{rntPath}/*/rn-tester/examples/{候选名}/`
|
|
220
|
+
3. 命中后做大小写不敏感兜底匹配
|
|
221
|
+
4. 输出每个 demo 路径一行;退出码:`0` = 唯一命中、`1` = 未找到、`2` = 多个命中
|
|
222
|
+
|
|
223
|
+
**自动选择规则**:
|
|
224
|
+
|
|
225
|
+
| 命中数 | 处理 |
|
|
226
|
+
|--------|------|
|
|
227
|
+
| 0 | 报错终止,提示用户手动提供 `--demo-path` 或检查 rnt 工程路径 |
|
|
228
|
+
| 1 | ✅ 自动选择,直接进入 Phase 4 |
|
|
229
|
+
| 多个 | 自动选择第一个命中项,报告中标注全部命中路径;用户可通过 `--demo-path` 指定其他 |
|
|
230
|
+
|
|
231
|
+
> 版本一致 + 唯一命中 = 自动选择,不暂停等待用户确认。
|
|
232
|
+
|
|
233
|
+
---
|
|
234
|
+
|
|
235
|
+
## Phase 4:分析 demo 结构与外部依赖
|
|
236
|
+
|
|
237
|
+
扫描 demo 目录的源文件(`.ts`/`.tsx`/`.js`/`.jsx`),提取:
|
|
238
|
+
|
|
239
|
+
1. **文件清单**:待迁移文件树(用于报告与迁移校验)
|
|
240
|
+
2. **外部依赖**:从 `import ... from 'pkg'` 与 `require('pkg')` 中提取所有非相对路径的包名
|
|
241
|
+
3. **目标库引用方式**:demo 中如何引用目标库(alias / 包名 / 相对路径)
|
|
242
|
+
4. **入口文件**:`App.tsx` / `index.tsx` 位置与 `displayName` / `title` 取值
|
|
243
|
+
|
|
244
|
+
```bash
|
|
245
|
+
node scripts/analyze-demo-deps.cjs <demoPath> [--lib-name <packageName>] [--alias <harmony.alias>]
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
输出 JSON:
|
|
249
|
+
|
|
250
|
+
```json
|
|
251
|
+
{
|
|
252
|
+
"files": ["App.tsx", "index.tsx", "tests/index.tsx", "camera/CameraDemo.tsx"],
|
|
253
|
+
"externalDeps": ["@react-native-community/cli", "react-native-svg"],
|
|
254
|
+
"libReferences": [
|
|
255
|
+
{ "kind": "named", "module": "react-native-camera-kit", "names": ["Camera", "CameraType"] }
|
|
256
|
+
],
|
|
257
|
+
"entryFiles": { "app": "App.tsx", "index": "index.tsx", "displayName": "CameraKitDemo" }
|
|
258
|
+
}
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
**依赖分类**:
|
|
262
|
+
|
|
263
|
+
| 类别 | 判定 | 处理 |
|
|
264
|
+
|------|------|------|
|
|
265
|
+
| 目标库本身 | `module === alias` 或 `packageName` | 迁移后改为 `file:../<tgz>` 引用(由 `rn-lib-add-example` 完成) |
|
|
266
|
+
| RNOH 框架 | `@react-native-oh/*` / `@rnoh/*` | 对齐目标 RNOH 版本,写入 example `dependencies` |
|
|
267
|
+
| 通用 RN 依赖 | `react-native-*` / `@react-native-*` | 写入 example `dependencies`,版本与 example 模板对齐 |
|
|
268
|
+
| 业务无关依赖 | 与目标库 demo 无关 | 列入「待人工确认」清单,不自动写入 |
|
|
269
|
+
|
|
270
|
+
### 4.1 外部依赖存在性检查(必须执行)
|
|
271
|
+
|
|
272
|
+
`analyze-demo-deps.cjs` 输出的 `externalDeps` 中每个包,**必须逐一检查**是否已在 `example/package.json` 的 `dependencies` 或 `devDependencies` 中声明:
|
|
273
|
+
|
|
274
|
+
```bash
|
|
275
|
+
# 读取 example/package.json 已声明的依赖
|
|
276
|
+
node -e "const p=require('<libPath>/example/package.json'); const all={...p.dependencies,...p.devDependencies}; console.log(JSON.stringify(Object.keys(all)))"
|
|
277
|
+
```
|
|
278
|
+
|
|
279
|
+
| 检查结果 | 处理 |
|
|
280
|
+
|---------|------|
|
|
281
|
+
| 依赖已在 example/package.json 中声明 | ✅ 无需处理 |
|
|
282
|
+
| 依赖未声明,属于 RNOH/RN 通用包 | ⚠️ **高优先级**:在报告中标注「缺少依赖」,并从 rnt 工程的 `package.json` 中查找该包的版本与引用方式(如 `file:./rnoh_package/xxx.tgz`),在报告依赖增量清单中给出建议的写入值 |
|
|
283
|
+
| 依赖未声明,属于业务无关包 | 列入「待人工确认」清单 |
|
|
284
|
+
|
|
285
|
+
> ⚠️ **缺失依赖会导致运行时崩溃**。例如 demo 引用 `@rnoh/testerino` 但 example/package.json 未声明,所有使用 `Tester`/`TestCase`/`TestSuite` 的组件均无法渲染。此检查是**必执行项**,不可跳过。
|
|
286
|
+
|
|
287
|
+
### 4.2 从 rnt 工程提取缺失依赖的版本信息
|
|
288
|
+
|
|
289
|
+
当发现 example 缺少的依赖时,从 rnt 工程的 `package.json` 中提取该包的版本与引用方式:
|
|
290
|
+
|
|
291
|
+
```bash
|
|
292
|
+
# 在 rnt 子工程的 package.json 中搜索缺失依赖
|
|
293
|
+
grep -r "<missingDep>" <rntPath>/*/package.json
|
|
294
|
+
```
|
|
295
|
+
|
|
296
|
+
常见情况:
|
|
297
|
+
- `@rnoh/testerino` → rnt 工程中以 `file:./rnoh_package/testerino/rnoh-testerino-<version>.tgz` 形式引用,需将 tgz 复制到 example 目录并同样以 `file:` 方式引用
|
|
298
|
+
- 其他 `@rnoh/*` 或 `@react-native-ohos/*` 包 → 从 rnt 工程或 npm registry 获取版本
|
|
299
|
+
|
|
300
|
+
> 详细依赖处理规则参见 [references/DEMO_PORTING_GUIDE.md](references/DEMO_PORTING_GUIDE.md) 的「依赖分析与写入」章节。
|
|
301
|
+
|
|
302
|
+
---
|
|
303
|
+
|
|
304
|
+
## Phase 5:迁移 demo 到目标 example/src
|
|
305
|
+
|
|
306
|
+
```bash
|
|
307
|
+
bash scripts/port-demo.sh \
|
|
308
|
+
--demo-path <demoPath> \
|
|
309
|
+
--target <targetExampleSrc> \
|
|
310
|
+
[--clean] \
|
|
311
|
+
[--exclude 'node_modules,build,__tests__']
|
|
312
|
+
```
|
|
313
|
+
|
|
314
|
+
**脚本行为**:
|
|
315
|
+
|
|
316
|
+
1. 校验 `demoPath` 与 `targetExampleSrc` 存在
|
|
317
|
+
2. `--clean` 时清空目标 `example/src/`(**默认不清空**,避免误删用户已有内容;执行前必须由用户确认)
|
|
318
|
+
3. 默认排除 `node_modules/`、`build/`、`__tests__/`、`.cxx/`、`oh_modules/`
|
|
319
|
+
4. 使用 `rsync -a --ignore-existing` 保留文件元数据,**仅添加目标不存在的文件**,已有文件保留不动
|
|
320
|
+
5. 冲突文件(demo 与目标同名)保留目标版本,在输出中列出供 Agent 写入报告
|
|
321
|
+
6. 输出迁移文件清单(相对路径)+ 冲突文件清单
|
|
322
|
+
|
|
323
|
+
**迁移后目录约定**(典型 demo 结构):
|
|
324
|
+
|
|
325
|
+
```
|
|
326
|
+
example/src/
|
|
327
|
+
├── App.tsx # demo 入口(含 displayName)
|
|
328
|
+
├── index.tsx # 导出 demo 给 testerino 注册
|
|
329
|
+
├── tests/
|
|
330
|
+
│ └── index.tsx # testerino 测试用例注册(修正相对路径)
|
|
331
|
+
├── camera/ # demo 功能子目录
|
|
332
|
+
├── scanCode/
|
|
333
|
+
└── components/ # demo 复用组件
|
|
334
|
+
```
|
|
335
|
+
|
|
336
|
+
> 迁移细节与边界情况(已有文件冲突处理、保留通用组件 `Navigation.tsx` 等)参见 [references/DEMO_PORTING_GUIDE.md](references/DEMO_PORTING_GUIDE.md)。**默认增量添加,冲突文件保留目标版本。**
|
|
337
|
+
|
|
338
|
+
### 5.1 build-profile.json5 模块路径越界检查(必须执行)
|
|
339
|
+
|
|
340
|
+
迁移后检查 `example/harmony/build-profile.json5` 与 `example/harmony/build-profile.template.json5` 中的 `modules[].srcPath`,确保所有模块路径**不越出** `example/harmony/` 工程根目录:
|
|
341
|
+
|
|
342
|
+
```bash
|
|
343
|
+
# 读取 build-profile.json5 中的模块路径
|
|
344
|
+
node -e "const fs=require('fs'); const c=fs.readFileSync('example/harmony/build-profile.json5','utf8'); const m=c.match(/srcPath:\s*'([^']+)'/g); console.log(m)"
|
|
345
|
+
```
|
|
346
|
+
|
|
347
|
+
| 路径形式 | 判定 | 处理 |
|
|
348
|
+
|---------|------|------|
|
|
349
|
+
| `./entry`、`./safe_area` 等 `./` 开头 | ✅ 工程内路径 | 无需处理 |
|
|
350
|
+
| `../../harmony/xxx` 等 `../` 开头 | ❌ **越界**,hvigor 报错 `Path escapes project root` | 见下方修正 |
|
|
351
|
+
|
|
352
|
+
**越界路径修正步骤**:
|
|
353
|
+
|
|
354
|
+
1. 将越界引用的模块目录**物理复制**到 `example/harmony/` 下(如 `cp -R ../../harmony/safe_area ./safe_area`)
|
|
355
|
+
2. 修改 `build-profile.json5` 与 `build-profile.template.json5` 中的 `srcPath` 为工程内相对路径(如 `'../../harmony/safe_area'` → `'./safe_area'`)
|
|
356
|
+
3. 同步修正被复制模块自身的 `oh-package.json5` 中 `file:` 引用路径(见 5.2)
|
|
357
|
+
|
|
358
|
+
> ⚠️ **符号链接不可行**:hvigor 不跟随 symlink,必须物理复制目录。
|
|
359
|
+
|
|
360
|
+
### 5.2 .har 文件路径验证(必须执行)
|
|
361
|
+
|
|
362
|
+
被复制的模块(或原有模块)的 `oh-package.json5` 中 `file:` 引用的 `.har` 文件,**必须逐一验证存在性**:
|
|
363
|
+
|
|
364
|
+
```bash
|
|
365
|
+
# 读取模块 oh-package.json5 中的 file: 引用
|
|
366
|
+
grep -o "file:[^,\"]*" example/harmony/<module>/oh-package.json5
|
|
367
|
+
|
|
368
|
+
# 逐一验证文件存在
|
|
369
|
+
ls -la example/harmony/<module>/../../node_modules/@react-native-oh/<pkg>/<xxx>.har
|
|
370
|
+
```
|
|
371
|
+
|
|
372
|
+
| 检查结果 | 处理 |
|
|
373
|
+
|---------|------|
|
|
374
|
+
| `.har` 文件存在于 `file:` 指定路径 | ✅ 无需处理 |
|
|
375
|
+
| 路径多/少一层子目录(如 `harmony/react_native_openharmony.har` vs `react_native_openharmony.har`) | ❌ 修正 `oh-package.json5` 中的路径,使其指向实际 `.har` 文件位置 |
|
|
376
|
+
| `.har` 文件不存在 | ❌ 报告标注,由 `rn-lib-add-example` 处理 |
|
|
377
|
+
|
|
378
|
+
> ⚠️ `.har` 路径错误会导致 `ohpm install` 静默跳过该依赖,编译时报 `Cannot find module`。
|
|
379
|
+
|
|
380
|
+
---
|
|
381
|
+
|
|
382
|
+
## Phase 6:修正 import 路径与 displayName
|
|
383
|
+
|
|
384
|
+
迁移后**必须**检查并修正以下内容(使用 `Edit` 工具逐文件处理)。
|
|
385
|
+
|
|
386
|
+
> ⚠️ **仅修正本次新增的文件**:如果某文件是目标已有的(冲突保留项),**不修改它**,仅在报告中标注需人工处理。
|
|
387
|
+
|
|
388
|
+
### 6.1 相对路径修正
|
|
389
|
+
|
|
390
|
+
`tests/index.tsx` 等子目录文件中引用 demo 内容的相对路径可能失效。常见修正:
|
|
391
|
+
|
|
392
|
+
| 错误写法 | 正确写法 | 原因 |
|
|
393
|
+
|----------|----------|------|
|
|
394
|
+
| `./camera/CameraDemo` | `../camera/CameraDemo` | `tests/` 下的文件引用上级目录 |
|
|
395
|
+
| `./components/Nav` | `../components/Nav` | 同上 |
|
|
396
|
+
|
|
397
|
+
### 6.2 入口文件对齐
|
|
398
|
+
|
|
399
|
+
- `example/src/App.tsx`:`displayName` / `title` 与 demo 名称一致
|
|
400
|
+
- `example/src/index.tsx`:`export` 路径与迁入的 demo 目录结构一致
|
|
401
|
+
|
|
402
|
+
### 6.3 目标库引用对齐
|
|
403
|
+
|
|
404
|
+
确认 demo 中目标库的引用方式与 example 的 `metro.config.js` 别名一致:
|
|
405
|
+
|
|
406
|
+
- demo 用 `import { X } from '<alias>'` → example `metro.config.js` 的 `extraNodeModules['<alias>']` 指向 `node_modules/<ohPackageName>`
|
|
407
|
+
- demo 用 `import { X } from '<packageName>'` → 同步更新 `tsconfig.json` 的 `paths`
|
|
408
|
+
|
|
409
|
+
> 完整路径修正检查清单参见 [references/DEMO_PORTING_GUIDE.md](references/DEMO_PORTING_GUIDE.md) 的「路径修正」章节。
|
|
410
|
+
|
|
411
|
+
### 6.4 入口文件接入
|
|
412
|
+
|
|
413
|
+
迁移后检查 demo 入口文件(如 `testCase/App.tsx`)是否已被 `example/src/index.tsx` 引用。若未接入,**仅在 `index.tsx` 是本次新增文件时**才更新它;若 `index.tsx` 是目标已有文件,不覆盖,在报告中标注需人工接入。
|
|
414
|
+
|
|
415
|
+
| 场景 | 处理 |
|
|
416
|
+
|------|------|
|
|
417
|
+
| `index.tsx` 已引用 demo 入口 | ✅ 无需处理 |
|
|
418
|
+
| `index.tsx` 是本次新增文件,未引用 demo 入口 | 更新 `index.tsx`,re-export demo 入口的默认导出和元数据 |
|
|
419
|
+
| `index.tsx` 是目标已有文件,未引用 demo 入口 | ❌ 不覆盖;报告中标注「入口未接入,需人工在已有 index.tsx 中添加 re-export」 |
|
|
420
|
+
| demo 入口即为 `index.tsx` | ✅ 无需处理 |
|
|
421
|
+
|
|
422
|
+
**示例**(demo 入口在 `testCase/App.tsx`,`index.tsx` 原有独立内容):
|
|
423
|
+
|
|
424
|
+
```tsx
|
|
425
|
+
// index.tsx — 更新为 re-export demo 入口
|
|
426
|
+
export {
|
|
427
|
+
default,
|
|
428
|
+
displayName,
|
|
429
|
+
framework,
|
|
430
|
+
category,
|
|
431
|
+
title,
|
|
432
|
+
documentationURL,
|
|
433
|
+
description,
|
|
434
|
+
examples,
|
|
435
|
+
} from './testCase/App';
|
|
436
|
+
```
|
|
437
|
+
|
|
438
|
+
**检查方法**:
|
|
439
|
+
|
|
440
|
+
```bash
|
|
441
|
+
# 确认 index.tsx 是否引用了 demo 入口
|
|
442
|
+
grep -l "testCase/App\|demo/App\|./App" example/src/index.tsx
|
|
443
|
+
```
|
|
444
|
+
|
|
445
|
+
> 入口接入是迁移完成的必要步骤——未接入的 demo 入口不会在运行时生效。
|
|
446
|
+
|
|
447
|
+
### 6.5 Navigation.tsx 硬编码标题修正
|
|
448
|
+
|
|
449
|
+
rnt demo 中的 `Navigation.tsx`(或类似共享组件)常包含**其他库的硬编码标题**(如 `"RN Svg Capi Tester"`),是从 rnt 共享代码中遗留的。迁移后**必须**检测并修正。
|
|
450
|
+
|
|
451
|
+
**检测**:`analyze-demo-deps.cjs` 的 `hardcodedTitles` 字段列出所有匹配 `RN <Xxx> (Capi )?Tester` 模式的硬编码文本。
|
|
452
|
+
|
|
453
|
+
**修正规则**:
|
|
454
|
+
|
|
455
|
+
| 字段 | 值 |
|
|
456
|
+
|------|-----|
|
|
457
|
+
| 匹配模式 | `RN\s+\w+(?:\s+\w+)*\s+(?:Capi\s+)?Tester` |
|
|
458
|
+
| 替换值 | `RN <Alias> Tester`(Alias 从 `libMeta.alias` 取,首字母大写) |
|
|
459
|
+
| 替换范围 | 仅替换 `hardcodedTitles` 中列出的**本次新增**文件;目标已有文件不修改,在报告中标注 |
|
|
460
|
+
|
|
461
|
+
**示例**:
|
|
462
|
+
|
|
463
|
+
```tsx
|
|
464
|
+
// ❌ 迁移前(Navigation.tsx 遗留的 Svg 库标题)
|
|
465
|
+
<Text>RN Svg Capi Tester</Text>
|
|
466
|
+
|
|
467
|
+
// ✅ 迁移后(修正为 PDF 库标题,alias = "react-native-pdf")
|
|
468
|
+
<Text>RN Pdf Tester</Text>
|
|
469
|
+
```
|
|
470
|
+
|
|
471
|
+
**执行**:Agent 使用 `Edit` 工具,逐个替换 `hardcodedTitles` 中列出的**本次新增**文件里的硬编码文本。目标已有文件中的硬编码标题不修改,在报告中标注「需人工修正」。
|
|
472
|
+
|
|
473
|
+
> 未修正的硬编码标题会导致 demo 界面显示错误的库名,属于必修正项。
|
|
474
|
+
|
|
475
|
+
### 6.6 孤立文件检测与接入(必须执行)
|
|
476
|
+
|
|
477
|
+
迁移后**必须**检查每个迁移的 `.tsx`/`.ts` 文件是否被入口文件(`index.tsx` 或 `App.tsx`)直接或间接引用。未被引用的文件为「孤立文件」,用户无法通过导航访问到这些 demo。
|
|
478
|
+
|
|
479
|
+
**检测方法**:
|
|
480
|
+
|
|
481
|
+
```bash
|
|
482
|
+
# 列出迁移的所有 .tsx/.ts 文件
|
|
483
|
+
find example/src -name "*.tsx" -o -name "*.ts" | grep -v node_modules | sort
|
|
484
|
+
|
|
485
|
+
# 从入口文件开始,检查 import 链是否覆盖所有文件
|
|
486
|
+
grep -rn "from '\./" example/src/index.tsx example/src/App.tsx
|
|
487
|
+
```
|
|
488
|
+
|
|
489
|
+
| 文件状态 | 处理 |
|
|
490
|
+
|---------|------|
|
|
491
|
+
| 文件被入口直接/间接引用 | ✅ 无需处理 |
|
|
492
|
+
| 文件有 `export` 但未被入口引用(如 `demo03.tsx`、`demo05.tsx`) | ⚠️ **必须接入**:将组件加入 `index.tsx` 的 `demos` 数组(或 `App.tsx` 的菜单),确保用户可导航到 |
|
|
493
|
+
| 文件无 `export`(纯内部模块) | 检查是否被其他文件引用;若确实无用,在报告中标注 |
|
|
494
|
+
|
|
495
|
+
**接入示例**(孤立文件 `demo03.tsx` 导出 `SafeAreaProviderProp`):
|
|
496
|
+
|
|
497
|
+
```tsx
|
|
498
|
+
// index.tsx — 将孤立文件组件加入 demos 数组
|
|
499
|
+
import { SafeAreaProviderProp } from './demo03';
|
|
500
|
+
|
|
501
|
+
const demos: IDemoItem[] = [
|
|
502
|
+
// ... 已有 demo ...
|
|
503
|
+
{ Component: SafeAreaProviderProp, name: 'SafeAreaProviderProp (demo03)', key: 'SafeAreaProviderPropDemo03' },
|
|
504
|
+
];
|
|
505
|
+
```
|
|
506
|
+
|
|
507
|
+
> ⚠️ 孤立文件不会在运行时被加载,用户无法访问其中的 demo。此检查是**必执行项**,不可跳过。
|
|
508
|
+
|
|
509
|
+
### 6.7 菜单容器 ScrollView 适配(必须执行)
|
|
510
|
+
|
|
511
|
+
当 `demos` 数组条目数 > 5 时,菜单内容可能超出屏幕高度。此时**必须**将菜单容器从 `<View>` 改为 `<ScrollView>`,否则底部的 demo 条目不可见、不可点击。
|
|
512
|
+
|
|
513
|
+
**检测方法**:
|
|
514
|
+
|
|
515
|
+
```bash
|
|
516
|
+
# 统计 demos 数组条目数
|
|
517
|
+
grep -c "Component:" example/src/index.tsx
|
|
518
|
+
```
|
|
519
|
+
|
|
520
|
+
| 条目数 | 处理 |
|
|
521
|
+
|--------|------|
|
|
522
|
+
| ≤ 5 | ✅ `<View>` 即可 |
|
|
523
|
+
| > 5 | ⚠️ **必须**将菜单容器改为 `<ScrollView>` |
|
|
524
|
+
|
|
525
|
+
**修正示例**:
|
|
526
|
+
|
|
527
|
+
```tsx
|
|
528
|
+
// ❌ 迁移前(View 不支持滚动,底部 demo 不可见)
|
|
529
|
+
<View style={styles.demoNav}>{demoMenu}</View>
|
|
530
|
+
|
|
531
|
+
// ✅ 迁移后(ScrollView 支持滚动)
|
|
532
|
+
<ScrollView style={styles.demoNav}>{demoMenu}</ScrollView>
|
|
533
|
+
```
|
|
534
|
+
|
|
535
|
+
> 确保 `ScrollView` 已从 `react-native` 导入。仅修改本次新增的 `index.tsx`;若 `index.tsx` 是目标已有文件,在报告中标注需人工修改。
|
|
536
|
+
|
|
537
|
+
### 6.8 保留原有 App.tsx 入口(必须执行)
|
|
538
|
+
|
|
539
|
+
迁移 rnt demo 的 `index.tsx` 后,**必须**检查目标工程原有的 `App.tsx` 是否仍可访问。直接替换 `index.js` 的入口注册会丢失原有 demo。
|
|
540
|
+
|
|
541
|
+
**检查方法**:
|
|
542
|
+
|
|
543
|
+
```bash
|
|
544
|
+
# 查看 index.js 注册的入口
|
|
545
|
+
grep "registerComponent" example/index.js
|
|
546
|
+
```
|
|
547
|
+
|
|
548
|
+
| 场景 | 处理 |
|
|
549
|
+
|------|------|
|
|
550
|
+
| `index.js` 注册的是 `./src/App`(原有入口) | ⚠️ 若要使用 rnt 的 `index.tsx` 作为新入口,**必须**将原有 `App.tsx` 作为一个菜单项接入 `index.tsx` 的 `demos` 数组,确保用户可跳转到原有 demo |
|
|
551
|
+
| `index.js` 注册的是 `./src/index`(rnt 入口) | 检查 `index.tsx` 是否已包含原有 `App.tsx` 的入口;若未包含,按下方示例接入 |
|
|
552
|
+
| 无原有 `App.tsx` | ✅ 无需处理 |
|
|
553
|
+
|
|
554
|
+
**接入示例**(将原有 App.tsx 作为菜单项):
|
|
555
|
+
|
|
556
|
+
```tsx
|
|
557
|
+
// index.tsx — 保留原有 App.tsx 入口
|
|
558
|
+
import OriginalApp from './App';
|
|
559
|
+
|
|
560
|
+
const demos: IDemoItem[] = [
|
|
561
|
+
{ Component: OriginalApp, name: 'Original Demo (App.tsx)', key: 'OriginalApp' },
|
|
562
|
+
// ... rnt 迁移的 demo ...
|
|
563
|
+
];
|
|
564
|
+
```
|
|
565
|
+
|
|
566
|
+
同时更新 `index.js`:
|
|
567
|
+
|
|
568
|
+
```js
|
|
569
|
+
// index.js — 指向 rnt 迁移的 index.tsx
|
|
570
|
+
import Demo from './src/index';
|
|
571
|
+
AppRegistry.registerComponent(appName, () => Demo);
|
|
572
|
+
```
|
|
573
|
+
|
|
574
|
+
> ⚠️ 丢失原有 App.tsx 入口会导致已有 demo 不可访问。此检查是**必执行项**。
|
|
575
|
+
|
|
576
|
+
### 6.9 入口链路端到端验证(必须执行)
|
|
577
|
+
|
|
578
|
+
迁移完成后,**必须**验证从 `index.js` 到每个 demo 组件的完整引用链路畅通:
|
|
579
|
+
|
|
580
|
+
```
|
|
581
|
+
index.js → src/index.tsx → Demo 组件 → demos 数组 → 各 Test 组件 → ./demo/ 子组件
|
|
582
|
+
```
|
|
583
|
+
|
|
584
|
+
**验证清单**:
|
|
585
|
+
|
|
586
|
+
| # | 检查项 | 验证方法 | 通过标准 |
|
|
587
|
+
|---|--------|---------|---------|
|
|
588
|
+
| 1 | `index.js` 注册的入口存在 | `grep "registerComponent" example/index.js` 然后检查指向的文件存在 | 文件存在且可导入 |
|
|
589
|
+
| 2 | `index.tsx` 的 `demos` 数组覆盖所有迁移组件 | 对比 `demos` 数组与迁移文件列表 | 所有有 `export` 的组件都在 `demos` 中 |
|
|
590
|
+
| 3 | 每个 Test 组件引用的 `./demo/XxxExample` 路径存在 | 逐一 `ls` 验证 | 文件存在 |
|
|
591
|
+
| 4 | 菜单容器支持滚动(当条目 > 5) | 检查 `index.tsx` 中菜单容器是 `ScrollView` | ✅ |
|
|
592
|
+
| 5 | Back 按钮可返回菜单 | 检查 `backClickHandle` 重置 `currentDemoKey` | ✅ |
|
|
593
|
+
|
|
594
|
+
> 入口链路断裂会导致白屏或部分 demo 不可访问。此验证是**必执行项**。
|
|
595
|
+
|
|
596
|
+
---
|
|
597
|
+
|
|
598
|
+
## Phase 7:生成迁移报告
|
|
599
|
+
|
|
600
|
+
按模板生成 Markdown 报告,记录迁移全过程与待办项。
|
|
601
|
+
|
|
602
|
+
```bash
|
|
603
|
+
# 报告模板位于 assets/PORT_REPORT_TEMPLATE.md
|
|
604
|
+
# Agent 读取模板后填充实际值并写入:
|
|
605
|
+
# {libPath}/rn-lib-ohos/rnt-demo-port-report.md (若处于 rn-lib-ohos 流程中)
|
|
606
|
+
# 或 {libPath}/rnt-demo-port-report.md (独立调用时)
|
|
607
|
+
```
|
|
608
|
+
|
|
609
|
+
**报告必含**:
|
|
610
|
+
|
|
611
|
+
1. **版本信息**:库分支、rnt 分支、RNOH 版本、example/package.json 版本一致性
|
|
612
|
+
2. **demo 来源**:rnt 工程路径、demo 子目录、命中候选名
|
|
613
|
+
3. **迁移文件清单**:相对路径列表 + 文件数(区分「本次新增」与「冲突保留目标版本」)
|
|
614
|
+
4. **冲突文件清单**:demo 与目标同名的文件列表,标注「目标版本已保留,demo 版本未写入」
|
|
615
|
+
5. **依赖增量**:新增依赖、版本、来源(demo import 分析);**标注 example/package.json 中缺失的依赖**(Phase 4.1 检查结果)
|
|
616
|
+
6. **路径修正记录**:每个修正的文件与改动(仅本次新增文件;含入口接入、Navigation.tsx 标题修正、孤立文件接入、ScrollView 适配、原有 App.tsx 保留)
|
|
617
|
+
7. **构建前置检查结果**:
|
|
618
|
+
- build-profile.json5 模块路径越界检查(Phase 5.1)
|
|
619
|
+
- .har 文件路径验证(Phase 5.2)
|
|
620
|
+
- 外部依赖缺失清单(Phase 4.1)
|
|
621
|
+
- 入口链路验证结果(Phase 6.9)
|
|
622
|
+
8. **待人工确认项**:业务无关依赖、版本不一致、冲突文件需人工合并、入口文件需人工接入等
|
|
623
|
+
9. **后续步骤**:建议执行 `rn-lib-add-example` 完成 Harmony 壳层适配与依赖写入;执行 `npm i` → `ohpm install` → `npm run dev` → `devecocli build` 编译验证
|
|
624
|
+
|
|
625
|
+
> 报告模板参见 [assets/PORT_REPORT_TEMPLATE.md](assets/PORT_REPORT_TEMPLATE.md)。
|
|
626
|
+
|
|
627
|
+
---
|
|
628
|
+
|
|
629
|
+
## 与其他 SKILL 的协作
|
|
630
|
+
|
|
631
|
+
| 协作 SKILL | 关系 | 调用时机 |
|
|
632
|
+
|-----------|------|---------|
|
|
633
|
+
| `rn-lib-add-example` | **下游** | 本 SKILL 完成 demo 迁移后,由 `rn-lib-add-example` 完成 example 模板创建(若缺失)、Harmony 壳层适配、依赖写入、License/OAT、构建验证 |
|
|
634
|
+
| `rn-lib-ohos` | **父流程** | 在 `rn-lib-ohos` Step 5 中调用本 SKILL 执行 demo 查找与迁移,再由 `rn-lib-add-example` 完成壳层适配 |
|
|
635
|
+
| `rnoh-lib-demo-coverage` | **下游(可选)** | 迁移完成后可调用覆盖率分析脚本评估 demo 对库 API 的覆盖程度 |
|
|
636
|
+
|
|
637
|
+
**职责边界**:
|
|
638
|
+
|
|
639
|
+
| 任务 | 负责SKILL |
|
|
640
|
+
|------|----------|
|
|
641
|
+
| 查找 rnt demo | 本 SKILL |
|
|
642
|
+
| 分析 demo 依赖 | 本 SKILL |
|
|
643
|
+
| 迁移 demo 文件 | 本 SKILL |
|
|
644
|
+
| 修正 import 路径 | 本 SKILL |
|
|
645
|
+
| 创建 example 模板 | `rn-lib-add-example` |
|
|
646
|
+
| 写入 example/package.json 依赖 | `rn-lib-add-example` |
|
|
647
|
+
| Harmony 壳层(RNPackagesFactory/CMakeLists/build-profile) | `rn-lib-add-example` |
|
|
648
|
+
| License 头 / OAT.xml | `rn-lib-add-example` |
|
|
649
|
+
| `npm run dev` 构建验证 | `rn-lib-add-example` |
|
|
650
|
+
|
|
651
|
+
---
|
|
652
|
+
|
|
653
|
+
## 常见边界情况
|
|
654
|
+
|
|
655
|
+
- **目标 example/ 不存在**:提示用户先执行 `rn-lib-add-example` 创建模板,本 SKILL 终止。
|
|
656
|
+
- **rnt 工程无 `rn-tester/examples/` 子目录**:报告终止,提示用户检查 rnt 根路径。
|
|
657
|
+
- **demo 与已有 example/src 内容冲突**:**增量添加,不覆盖**。冲突文件保留目标版本,demo 版本不写入,在报告中列出供人工确认是否合并。
|
|
658
|
+
- **版本无法对齐**:库与 rnt 均无对应版本分支时报错终止,列出可用分支供用户参考。
|
|
659
|
+
- **工作区有未提交修改**:切换分支前自动 `git stash`,迁移完成后 `git stash pop` 恢复。
|
|
660
|
+
- **example/package.json 版本不匹配**:example 的 react-native/react-native-harmony 版本与目标 RNOH 版本不一致时,报告中标注为高优先级待确认项,不阻塞迁移。
|
|
661
|
+
- **Navigation.tsx 含硬编码标题**:自动检测并替换为目标库的 alias(Phase 6.5)。
|
|
662
|
+
- **demo 入口未被 index.tsx 引用**:自动检测并接入(Phase 6.4)。
|
|
663
|
+
- **demo 引用了目标库的内部路径**(如 `react-native-camera-kit/src/internal`):列入「待人工确认」,不自动改写。
|
|
664
|
+
- **demo 含原生代码**(`.ets`/`.cpp`):本 SKILL 仅迁移 JS/TS 层;原生代码由 `rn-lib-add-example` 壳层适配处理,报告标注。
|
|
665
|
+
- **rnt 工程路径跨盘/网络挂载**:`rsync` 可能较慢,建议本地拷贝 rnt 工程后执行。
|
|
666
|
+
- **demo 引用 rnt 特有外部依赖(如 @rnoh/testerino)**:example/package.json 未声明该依赖时,所有使用该依赖的组件运行时崩溃。Phase 4.1 检查并从 rnt 工程提取版本信息,在报告中标注为高优先级缺失项。
|
|
667
|
+
- **build-profile.json5 模块路径越界**:`modules[].srcPath` 以 `../` 开头时 hvigor 报错 `Path escapes project root`。Phase 5.1 检测并物理复制模块到工程内,修正路径。符号链接不可行(hvigor 不跟随 symlink)。
|
|
668
|
+
- **oh-package.json5 中 .har 路径错误**:`file:` 引用的 `.har` 路径多/少一层子目录时,`ohpm install` 静默跳过该依赖。Phase 5.2 逐一验证 .har 文件存在性。
|
|
669
|
+
- **迁移的独立 demo 文件未被入口引用**:如 `demo03.tsx`、`demo05.tsx` 已迁移但未被 `index.tsx` 的 `demos` 数组引用,用户无法访问。Phase 6.6 检测并接入。
|
|
670
|
+
- **菜单条目过多无法滚动**:demo 条目 > 5 且菜单容器为 `<View>` 时,底部条目不可见。Phase 6.7 检测并改为 `<ScrollView>`。
|
|
671
|
+
- **替换入口丢失原有 App.tsx demo**:`index.js` 改为注册 `./src/index` 后,原有 `App.tsx` 的 demo 不可访问。Phase 6.8 将原有 App.tsx 作为菜单项接入。
|
|
672
|
+
|
|
673
|
+
> 完整边界情况与处理策略参见 [references/PORT_VERIFICATION.md](references/PORT_VERIFICATION.md)。
|
|
674
|
+
|
|
675
|
+
---
|
|
676
|
+
|
|
677
|
+
## 需向用户确认的信息
|
|
678
|
+
|
|
679
|
+
| # | 节点 | 说明 |
|
|
680
|
+
|---|------|------|
|
|
681
|
+
| 1 | 目标库根目录路径 | 若未通过参数传入 |
|
|
682
|
+
| 2 | rnt 工程路径 | 若未通过参数传入 |
|
|
683
|
+
| 3 | 版本无法自动对齐 | 库与 rnt 均无对应版本分支时,提示用户手动指定 |
|
|
684
|
+
| 4 | 是否清空目标 example/src | `--clean` 启用时必须确认 |
|
|
685
|
+
| 5 | 业务无关依赖是否写入 | 列出后请用户决策 |
|
|
686
|
+
| 6 | 冲突文件是否需要合并 | demo 与目标同名文件保留目标版本后,询问用户是否需要手动合并 |
|
|
687
|
+
|
|
688
|
+
---
|
|
689
|
+
|
|
690
|
+
## Agent 禁止事项
|
|
691
|
+
|
|
692
|
+
- **禁止**在版本未对齐时跳过版本检测直接迁移(必须先执行 Phase 2 确认版本一致或已切换分支)。
|
|
693
|
+
- **禁止**在有未提交修改时直接 `git checkout`(必须先 `git stash`)。
|
|
694
|
+
- **禁止**自动启用 `--clean` 清空目标 `example/src/`(必须用户明确同意)。
|
|
695
|
+
- **禁止**覆盖目标 `example/src/` 已有文件(默认 `--ignore-existing`,冲突文件保留目标版本)。
|
|
696
|
+
- **禁止**修改目标已有的文件(路径修正、入口接入、标题修正仅针对本次新增文件)。
|
|
697
|
+
- **禁止**修改目标库 `src/`、`harmony/` 源码(本 SKILL 只动 `example/src/`)。
|
|
698
|
+
- **禁止**自动写入 `example/package.json` 依赖(由 `rn-lib-add-example` 统一处理;本 SKILL 只产出依赖增量清单供下游使用)。
|
|
699
|
+
- **禁止**跳过迁移报告生成。
|
|
700
|
+
- **禁止**跳过入口文件接入检查(Phase 6.4 必须执行)。
|
|
701
|
+
- **禁止**跳过 Navigation.tsx 硬编码标题修正(Phase 6.5 必须执行,仅针对本次新增文件)。
|
|
702
|
+
- **禁止**跳过外部依赖存在性检查(Phase 4.1 必须执行,缺失依赖会导致运行时崩溃)。
|
|
703
|
+
- **禁止**跳过 build-profile.json5 路径越界检查(Phase 5.1 必须执行,越界路径导致编译失败)。
|
|
704
|
+
- **禁止**跳过 .har 文件路径验证(Phase 5.2 必须执行,路径错误导致 ohpm 静默跳过依赖)。
|
|
705
|
+
- **禁止**跳过孤立文件检测(Phase 6.6 必须执行,孤立文件用户无法访问)。
|
|
706
|
+
- **禁止**跳过菜单 ScrollView 适配(Phase 6.7 必须执行,条目 > 5 时不滚动导致底部不可见)。
|
|
707
|
+
- **禁止**替换入口时丢失原有 App.tsx demo(Phase 6.8 必须执行,原有入口必须作为菜单项保留)。
|
|
708
|
+
- **禁止**跳过入口链路端到端验证(Phase 6.9 必须执行)。
|
|
709
|
+
- **禁止**使用符号链接解决 build-profile 路径越界(hvigor 不跟随 symlink,必须物理复制)。
|
|
710
|
+
- **禁止**自动执行 `npm install` 或 `npm run dev`(验证由下游 SKILL 完成)。
|
|
711
|
+
- **禁止**迁移 demo 中的 `node_modules/`、`build/`、`__tests__/`(脚本默认排除,Agent 不得绕过)。
|
|
712
|
+
|
|
713
|
+
---
|
|
714
|
+
|
|
715
|
+
## 输出物清单
|
|
716
|
+
|
|
717
|
+
1. **迁移后的 `example/src/` 文件** — demo 源码已增量添加(不覆盖已有文件),新增文件路径已修正,所有 demo 可通过菜单导航访问
|
|
718
|
+
2. **迁移报告 Markdown**(`rnt-demo-port-report.md`) — 含来源、文件清单、冲突文件清单、依赖增量(含缺失依赖标注)、构建前置检查结果、待办项
|
|
719
|
+
3. **依赖增量清单**(报告内章节) — 供 `rn-lib-add-example` 写入 `example/package.json` 使用;标注 example/package.json 中缺失的依赖及建议写入值
|
|
720
|
+
4. **冲突文件清单**(报告内章节) — demo 与目标同名文件列表,标注目标版本已保留,供人工确认是否合并
|
|
721
|
+
5. **待人工确认项清单**(报告内章节) — 业务无关依赖、冲突文件合并、入口文件接入、原生代码标注
|
|
722
|
+
6. **构建前置检查结果**(报告内章节) — build-profile 路径越界、.har 路径验证、入口链路验证结果
|