@buaa_smat/hometrans 0.1.0 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (136) hide show
  1. package/README.md +141 -124
  2. package/agents/build-fixer.md +1 -0
  3. package/agents/code-review-fix.md +1 -0
  4. package/agents/code-reviewer.md +1 -0
  5. package/agents/logic-coding.md +1 -0
  6. package/agents/logic-context-builder.md +1 -0
  7. package/agents/review-fixer.md +1 -0
  8. package/agents/self-test-fixer.md +1 -0
  9. package/agents/self-tester.md +260 -233
  10. package/agents/spec-generator.md +1 -0
  11. package/agents/test-tools/autotest/README.md +223 -0
  12. package/agents/test-tools/autotest/config.yaml.example +58 -0
  13. package/agents/test-tools/autotest/pyproject.toml +16 -0
  14. package/agents/test-tools/autotest/report_tool.py +759 -0
  15. package/agents/test-tools/autotest/self_test_runner.py +773 -0
  16. package/agents/test-tools/autotest/testcases_schema.md +143 -0
  17. package/agents/test-tools/autotest/testcases_tool.py +215 -0
  18. package/agents/test-tools/autotest/uv.lock +3156 -0
  19. package/agents/test-tools/harmony_autotest-0.1.0-py3-none-any.whl +0 -0
  20. package/agents/test-tools/hypium-6.1.0.210-py3-none-any.whl +0 -0
  21. package/agents/test-tools/hypium_mcp-0.6.5-py3-none-any.whl +0 -0
  22. package/agents/test-tools/xdevice-6.1.0.210-py3-none-any.whl +0 -0
  23. package/agents/test-tools/xdevice_devicetest-6.1.0.210-py3-none-any.whl +0 -0
  24. package/agents/test-tools/xdevice_ohos-6.1.0.210-py3-none-any.whl +0 -0
  25. package/dist/cli/config-store.js +27 -2
  26. package/dist/cli/config.js +17 -6
  27. package/dist/cli/index.js +3 -2
  28. package/dist/cli/init.js +135 -22
  29. package/dist/cli/mcp.js +2 -2
  30. package/dist/context/index.js +165 -69
  31. package/package.json +59 -60
  32. package/skills/code-dev-review-fix/SKILL.md +279 -0
  33. package/skills/code-dev-review-fix-workspace/evals/evals.json +56 -0
  34. package/skills/code-dev-review-fix-workspace/iteration-1/routing-results.md +23 -0
  35. package/skills/convert_pipeline/SKILL.md +423 -439
  36. package/skills/hmos-resources-convert/SKILL.md +623 -0
  37. package/skills/hmos-resources-convert/evals/evals.json +171 -0
  38. package/skills/hmos-resources-convert/references/conversion-rules.md +663 -0
  39. package/skills/hmos-resources-convert/references/dependency-analysis-rules.md +388 -0
  40. package/skills/hmos-resources-convert/references/resource-mapping-rules.md +457 -0
  41. package/skills/hmos-resources-convert/references/xml-drawable-to-svg-rules.md +513 -0
  42. package/skills/hmos-resources-convert/template/AppScope/app.json5 +10 -0
  43. package/skills/hmos-resources-convert/template/AppScope/resources/base/element/string.json +8 -0
  44. package/skills/hmos-resources-convert/template/AppScope/resources/base/media/background.png +0 -0
  45. package/skills/hmos-resources-convert/template/AppScope/resources/base/media/foreground.png +0 -0
  46. package/skills/hmos-resources-convert/template/AppScope/resources/base/media/layered_image.json +7 -0
  47. package/skills/hmos-resources-convert/template/build-profile.json5 +42 -0
  48. package/skills/hmos-resources-convert/template/code-linter.json5 +32 -0
  49. package/skills/hmos-resources-convert/template/entry/build-profile.json5 +33 -0
  50. package/skills/hmos-resources-convert/template/entry/hvigorfile.ts +6 -0
  51. package/skills/hmos-resources-convert/template/entry/obfuscation-rules.txt +23 -0
  52. package/skills/hmos-resources-convert/template/entry/oh-package.json5 +10 -0
  53. package/skills/hmos-resources-convert/template/entry/src/main/ets/entryability/EntryAbility.ets +48 -0
  54. package/skills/hmos-resources-convert/template/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets +16 -0
  55. package/skills/hmos-resources-convert/template/entry/src/main/ets/pages/Index.ets +23 -0
  56. package/skills/hmos-resources-convert/template/entry/src/main/module.json5 +55 -0
  57. package/skills/hmos-resources-convert/template/entry/src/main/resources/base/element/color.json +8 -0
  58. package/skills/hmos-resources-convert/template/entry/src/main/resources/base/element/float.json +8 -0
  59. package/skills/hmos-resources-convert/template/entry/src/main/resources/base/element/string.json +16 -0
  60. package/skills/hmos-resources-convert/template/entry/src/main/resources/base/media/background.png +0 -0
  61. package/skills/hmos-resources-convert/template/entry/src/main/resources/base/media/foreground.png +0 -0
  62. package/skills/hmos-resources-convert/template/entry/src/main/resources/base/media/layered_image.json +7 -0
  63. package/skills/hmos-resources-convert/template/entry/src/main/resources/base/media/startIcon.png +0 -0
  64. package/skills/hmos-resources-convert/template/entry/src/main/resources/base/profile/backup_config.json +3 -0
  65. package/skills/hmos-resources-convert/template/entry/src/main/resources/base/profile/main_pages.json +5 -0
  66. package/skills/hmos-resources-convert/template/entry/src/main/resources/dark/element/color.json +8 -0
  67. package/skills/hmos-resources-convert/template/entry/src/mock/mock-config.json5 +2 -0
  68. package/skills/hmos-resources-convert/template/entry/src/ohosTest/ets/test/Ability.test.ets +35 -0
  69. package/skills/hmos-resources-convert/template/entry/src/ohosTest/ets/test/List.test.ets +5 -0
  70. package/skills/hmos-resources-convert/template/entry/src/ohosTest/module.json5 +16 -0
  71. package/skills/hmos-resources-convert/template/entry/src/test/List.test.ets +5 -0
  72. package/skills/hmos-resources-convert/template/entry/src/test/LocalUnit.test.ets +33 -0
  73. package/skills/hmos-resources-convert/template/hvigor/hvigor-config.json5 +23 -0
  74. package/skills/hmos-resources-convert/template/hvigorfile.ts +6 -0
  75. package/skills/hmos-resources-convert/template/oh-package-lock.json5 +28 -0
  76. package/skills/hmos-resources-convert/template/oh-package.json5 +10 -0
  77. package/skills/hmos-resources-convert/tools/apktool.bat +85 -0
  78. package/skills/hmos-resources-convert/tools/apktool_3.0.1.jar +0 -0
  79. package/skills/hmos-ui-align/SKILL.md +182 -0
  80. package/skills/hmos-ui-align/config-example.json +11 -0
  81. package/skills/hmos-ui-align/config.json +11 -0
  82. package/skills/hmos-ui-align/diff_analysis.md +53 -0
  83. package/skills/hmos-ui-align/page_align.md +62 -0
  84. package/skills/hmos-ui-align/readme.md +231 -0
  85. package/skills/hmos-ui-align/references/Comparison_Template.md +2 -0
  86. package/skills/hmos-ui-align/references/MVVM/345/274/200/345/217/221/346/226/207/346/241/243/@Link/350/243/205/351/245/260/345/231/250/357/274/232/347/210/266/345/255/220/345/217/214/345/220/221/345/220/214/346/255/245.md +648 -0
  87. package/skills/hmos-ui-align/references/MVVM/345/274/200/345/217/221/346/226/207/346/241/243/@Observed/350/243/205/351/245/260/345/231/250/345/222/214@ObjectLink/350/243/205/351/245/260/345/231/250/357/274/232/345/265/214/345/245/227/347/261/273/345/257/271/350/261/241/345/261/236/346/200/247/345/217/230/345/214/226.md +2089 -0
  88. package/skills/hmos-ui-align/references/MVVM/345/274/200/345/217/221/346/226/207/346/241/243/@Prop/350/243/205/351/245/260/345/231/250/357/274/232/347/210/266/345/255/220/345/215/225/345/220/221/345/220/214/346/255/245.md +1033 -0
  89. package/skills/hmos-ui-align/references/MVVM/345/274/200/345/217/221/346/226/207/346/241/243/@Provide/350/243/205/351/245/260/345/231/250/345/222/214@Consume/350/243/205/351/245/260/345/231/250/357/274/232/344/270/216/345/220/216/344/273/243/347/273/204/344/273/266/345/217/214/345/220/221/345/220/214/346/255/245.md +1183 -0
  90. package/skills/hmos-ui-align/references/MVVM/345/274/200/345/217/221/346/226/207/346/241/243/@State/350/243/205/351/245/260/345/231/250/357/274/232/347/273/204/344/273/266/345/206/205/347/212/266/346/200/201.md +576 -0
  91. package/skills/hmos-ui-align/references/MVVM/345/274/200/345/217/221/346/226/207/346/241/243/@Track/350/243/205/351/245/260/345/231/250/357/274/232class/345/257/271/350/261/241/345/261/236/346/200/247/347/272/247/346/233/264/346/226/260.md +297 -0
  92. package/skills/hmos-ui-align/references/MVVM/345/274/200/345/217/221/346/226/207/346/241/243/@Watch/350/243/205/351/245/260/345/231/250/357/274/232/347/212/266/346/200/201/345/217/230/351/207/217/346/233/264/346/224/271/351/200/232/347/237/245.md +395 -0
  93. package/skills/hmos-ui-align/references/MVVM/345/274/200/345/217/221/346/226/207/346/241/243/AppStorage/357/274/232/345/272/224/347/224/250/345/205/250/345/261/200/347/232/204UI/347/212/266/346/200/201/345/255/230/345/202/250.md +903 -0
  94. package/skills/hmos-ui-align/references/MVVM/345/274/200/345/217/221/346/226/207/346/241/243/Environment/357/274/232/350/256/276/345/244/207/347/216/257/345/242/203/346/237/245/350/257/242.md +106 -0
  95. package/skills/hmos-ui-align/references/MVVM/345/274/200/345/217/221/346/226/207/346/241/243/LocalStorage/357/274/232/351/241/265/351/235/242/347/272/247UI/347/212/266/346/200/201/345/255/230/345/202/250.md +1178 -0
  96. package/skills/hmos-ui-align/references/MVVM/345/274/200/345/217/221/346/226/207/346/241/243/MVVM/346/250/241/345/274/217V1.md +911 -0
  97. package/skills/hmos-ui-align/references/MVVM/345/274/200/345/217/221/346/226/207/346/241/243/MVVM/346/250/241/345/274/217/357/274/210V1/357/274/211.md +911 -0
  98. package/skills/hmos-ui-align/references/MVVM/345/274/200/345/217/221/346/226/207/346/241/243/PersistentStorage/357/274/232/346/214/201/344/271/205/345/214/226/345/255/230/345/202/250UI/347/212/266/346/200/201.md +355 -0
  99. package/skills/hmos-ui-align/references/MVVM/345/274/200/345/217/221/346/226/207/346/241/243//347/256/241/347/220/206/345/272/224/347/224/250/346/213/245/346/234/211/347/232/204/347/212/266/346/200/201/346/246/202/350/277/260.md +11 -0
  100. package/skills/hmos-ui-align/references/UI_Analysis_Template.md +4 -0
  101. package/skills/hmos-ui-align/references/android-to-harmonyOS-ui-atomic-component-mapping-reference.md +2535 -0
  102. package/skills/hmos-ui-align/references/android-to-harmonyOS-ui-interaction-mapping-reference.md +555 -0
  103. package/skills/hmos-ui-align/references/android-to-harmonyOS-ui-layout-mapping-reference.md +117 -0
  104. package/skills/hmos-ui-align/scripts/app_feature_verify.py +443 -0
  105. package/skills/hmos-ui-align/scripts/navigation-capure.md +37 -0
  106. package/skills/hmos-ui-align/scripts/page_capture.py +592 -0
  107. package/skills/hmos-ui-align-batch/SKILL.md +99 -0
  108. package/skills/hmos-ui-align-batch/references/conversion-procedure.md +180 -0
  109. package/skills/hmos-ui-align-batch/references/mappings/android-to-harmonyOS-ui-atomic-component-mapping-reference.md +2535 -0
  110. package/skills/hmos-ui-align-batch/references/mappings/android-to-harmonyOS-ui-interaction-mapping-reference.md +555 -0
  111. package/skills/hmos-ui-align-batch/references/mappings/android-to-harmonyOS-ui-layout-mapping-reference.md +117 -0
  112. package/skills/hmos-ui-align-batch/references/mvvm/@Link/350/243/205/351/245/260/345/231/250/357/274/232/347/210/266/345/255/220/345/217/214/345/220/221/345/220/214/346/255/245.md +648 -0
  113. package/skills/hmos-ui-align-batch/references/mvvm/@Observed/350/243/205/351/245/260/345/231/250/345/222/214@ObjectLink/350/243/205/351/245/260/345/231/250/357/274/232/345/265/214/345/245/227/347/261/273/345/257/271/350/261/241/345/261/236/346/200/247/345/217/230/345/214/226.md +2089 -0
  114. package/skills/hmos-ui-align-batch/references/mvvm/@Prop/350/243/205/351/245/260/345/231/250/357/274/232/347/210/266/345/255/220/345/215/225/345/220/221/345/220/214/346/255/245.md +1033 -0
  115. package/skills/hmos-ui-align-batch/references/mvvm/@Provide/350/243/205/351/245/260/345/231/250/345/222/214@Consume/350/243/205/351/245/260/345/231/250/357/274/232/344/270/216/345/220/216/344/273/243/347/273/204/344/273/266/345/217/214/345/220/221/345/220/214/346/255/245.md +1183 -0
  116. package/skills/hmos-ui-align-batch/references/mvvm/@State/350/243/205/351/245/260/345/231/250/357/274/232/347/273/204/344/273/266/345/206/205/347/212/266/346/200/201.md +576 -0
  117. package/skills/hmos-ui-align-batch/references/mvvm/@Track/350/243/205/351/245/260/345/231/250/357/274/232class/345/257/271/350/261/241/345/261/236/346/200/247/347/272/247/346/233/264/346/226/260.md +297 -0
  118. package/skills/hmos-ui-align-batch/references/mvvm/@Watch/350/243/205/351/245/260/345/231/250/357/274/232/347/212/266/346/200/201/345/217/230/351/207/217/346/233/264/346/224/271/351/200/232/347/237/245.md +395 -0
  119. package/skills/hmos-ui-align-batch/references/mvvm/AppStorage/357/274/232/345/272/224/347/224/250/345/205/250/345/261/200/347/232/204UI/347/212/266/346/200/201/345/255/230/345/202/250.md +903 -0
  120. package/skills/hmos-ui-align-batch/references/mvvm/Environment/357/274/232/350/256/276/345/244/207/347/216/257/345/242/203/346/237/245/350/257/242.md +106 -0
  121. package/skills/hmos-ui-align-batch/references/mvvm/LocalStorage/357/274/232/351/241/265/351/235/242/347/272/247UI/347/212/266/346/200/201/345/255/230/345/202/250.md +1178 -0
  122. package/skills/hmos-ui-align-batch/references/mvvm/MVVM/346/250/241/345/274/217/357/274/210V1/357/274/211.md +911 -0
  123. package/skills/hmos-ui-align-batch/references/mvvm/PersistentStorage/357/274/232/346/214/201/344/271/205/345/214/226/345/255/230/345/202/250UI/347/212/266/346/200/201.md +355 -0
  124. package/skills/hmos-ui-align-batch/references/mvvm//347/256/241/347/220/206/345/272/224/347/224/250/346/213/245/346/234/211/347/232/204/347/212/266/346/200/201/346/246/202/350/277/260.md +11 -0
  125. package/skills/hmos-ui-align-batch/scripts/android_parse_fast.py +1606 -0
  126. package/skills/self-test/SKILL.md +369 -0
  127. package/skills/self-test/readme.md +309 -0
  128. package/skills/spec-generator-skill/SKILL.md +332 -0
  129. package/skills/spec-generator-skill/references/android-platform-tokens.md +105 -0
  130. package/skills/spec-generator-skill/references/spec-sample-1.md +78 -0
  131. package/skills/spec-generator-skill/references/spec-sample-2.md +58 -0
  132. package/skills/spec-generator-skill/references/spec-sample-3.md +116 -0
  133. package/skills/spec-generator-skill/references/step4-report-template.md +33 -0
  134. package/agents/self-test-setup.md +0 -165
  135. package/dist/context/resources/sdkConfig.json +0 -24
  136. package/src/context/resources/sdkConfig.json +0 -24
@@ -0,0 +1,457 @@
1
+ # Android Resource Mapping Rules
2
+
3
+ This document defines how to build the Android resource inventory and the Android ↔ HarmonyOS mapping markdown written to `resource_mapping_path`.
4
+
5
+ ## 1. Purpose
6
+
7
+ The standard conversion report explains what the pipeline did. The mapping markdown serves a different purpose: it is an audit-friendly document for humans who need to review Android resources, understand their role, identify likely source ownership, and inspect how each Android resource maps to HarmonyOS output.
8
+
9
+ The mapping markdown MUST be produced for every run.
10
+
11
+ ---
12
+
13
+ ## 2. Two Required Data Sets
14
+
15
+ Build and retain two parallel data sets throughout the pipeline.
16
+
17
+ ### 2.1 Android Resource Inventory Records
18
+
19
+ One inventory record per Android resource item.
20
+
21
+ Required fields:
22
+ - `android_resource_path`
23
+ - `android_resource_name`
24
+ - `function`
25
+ - `screens`
26
+ - `source_category`
27
+ - `type_category`
28
+ - `status`
29
+ - `notes`
30
+
31
+ ### 2.2 Android ↔ HarmonyOS Mapping Records
32
+
33
+ One mapping record per conversion outcome.
34
+
35
+ Required fields:
36
+ - `android_resource_path`
37
+ - `android_screens`
38
+ - `android_source_category`
39
+ - `android_type_category`
40
+ - `harmony_target`
41
+ - `mapping_kind`
42
+ - `notes`
43
+
44
+ A single Android resource may produce multiple mapping records.
45
+
46
+ ---
47
+
48
+ ## 3. Path Rules
49
+
50
+ ### 3.1 File-Based Android Resources
51
+
52
+ Use the Android file path directly.
53
+
54
+ Examples:
55
+ - `app/src/main/res/drawable/home_login_btn.png`
56
+ - `app/src/main/res/mipmap-xxxhdpi/logo.png`
57
+ - `app/src/main/res/xml/file_paths.xml`
58
+ - `feature_home/src/main/res/drawable/bg_header.xml`
59
+
60
+ ### 3.2 `values/*.xml` Resources
61
+
62
+ `values` resources MUST be recorded at entry granularity, not only file granularity.
63
+
64
+ Format:
65
+ - `file_path#tag/name`
66
+
67
+ Examples:
68
+ - `app/src/main/res/values/strings.xml#string/app_name`
69
+ - `app/src/main/res/values/colors.xml#color/primary`
70
+ - `app/src/main/res/values/dimens.xml#dimen/page_margin`
71
+ - `app/src/main/res/values/arrays.xml#string-array/province_names`
72
+ - `app/src/main/res/values/plurals.xml#plurals/items_count`
73
+
74
+ ### 3.3 Android System Resources
75
+
76
+ Android framework resources do not have a project-local file path. Record the reference itself as the path.
77
+
78
+ Examples:
79
+ - `@android:color/white`
80
+ - `@android:dimen/app_icon_size`
81
+ - `@android:drawable/ic_menu_close`
82
+
83
+ ### 3.4 Runtime Remote Resources
84
+
85
+ Remote resources are not Android `res/` files. Record them using code location plus the remote identifier when possible.
86
+
87
+ Examples:
88
+ - `app/src/main/java/com/example/home/HomeBanner.kt:88 -> https://...`
89
+ - `app/src/main/java/com/example/api/BannerDto.kt:35 -> remote_image_url`
90
+
91
+ If only the code location is known, record that and explain the limitation in `notes`.
92
+
93
+ ---
94
+
95
+ ## 4. Resource Name Rules
96
+
97
+ ### 4.1 File Resources
98
+
99
+ Use the Android resource name without qualifiers or extension.
100
+
101
+ Examples:
102
+ - `drawable/home_login_btn.png` → `home_login_btn`
103
+ - `mipmap-anydpi-v26/ic_launcher.xml` → `ic_launcher`
104
+
105
+ ### 4.2 `values` Resources
106
+
107
+ Use the XML entry's `name` attribute.
108
+
109
+ Examples:
110
+ - `<string name="app_name">` → `app_name`
111
+ - `<color name="primary">` → `primary`
112
+
113
+ ### 4.3 System Resources
114
+
115
+ Use the framework resource name after the slash.
116
+
117
+ Examples:
118
+ - `@android:color/white` → `white`
119
+ - `@android:dimen/app_icon_size` → `app_icon_size`
120
+
121
+ ---
122
+
123
+ ## 5. Function Field Rules
124
+
125
+ The `function` field should be short, concrete, and useful to a reviewer.
126
+
127
+ Recommended inference priority:
128
+
129
+ 1. **Explicit semantic name**
130
+ - If the resource name clearly indicates its role, use that.
131
+ - Examples:
132
+ - `logo` → `App logo`
133
+ - `ic_back` → `Back icon`
134
+ - `home_header_bg` → `Home header background`
135
+
136
+ 2. **Usage-site evidence**
137
+ - If the resource is referenced from a known screen or component, use that context.
138
+ - Examples:
139
+ - `Login page close icon`
140
+ - `Home tab selected background`
141
+
142
+ 3. **Resource type evidence**
143
+ - For XML drawables, infer from root element or role.
144
+ - Examples:
145
+ - `<shape>` → `Shape background`
146
+ - `<selector>` → `State selector drawable`
147
+ - `<layer-list>` → `Layered background`
148
+
149
+ 4. **Directory-role evidence**
150
+ - `mipmap` often means launcher or app icon resources.
151
+ - `font` often means app font resource.
152
+ - `xml` often means configuration resource.
153
+
154
+ 5. **Conservative fallback**
155
+ - If the exact role is uncertain, do not invent specifics.
156
+ - Examples:
157
+ - `Image resource (inferred from filename)`
158
+ - `Color resource used by UI styling`
159
+ - `Configuration XML resource`
160
+
161
+ If the function is inferred rather than certain, mention the evidence in `notes`.
162
+
163
+ ---
164
+
165
+ ## 6. Screen Attribution Rules
166
+
167
+ The `screens` field identifies which Android screen(s) use the resource.
168
+
169
+ This is a best-effort static analysis field. Use evidence; do not fabricate certainty.
170
+
171
+ ### 6.1 Screen Candidates
172
+
173
+ Build the candidate screen set from:
174
+ - Activities
175
+ - Fragments
176
+ - Compose screen / page / route files
177
+ - Navigation graph destinations
178
+ - Launcher entry activity
179
+
180
+ ### 6.2 Direct Reference Rule
181
+
182
+ If a screen file directly references:
183
+ - `R.drawable.xxx`
184
+ - `R.mipmap.xxx`
185
+ - `R.string.xxx`
186
+ - `R.color.xxx`
187
+ - `R.font.xxx`
188
+ - `R.xml.xxx`
189
+
190
+ then attribute the resource to that screen.
191
+
192
+ ### 6.3 Layout-Indirection Rule
193
+
194
+ If:
195
+ - a screen uses a layout file, and
196
+ - that layout file references resources,
197
+
198
+ then attribute those resources to that screen.
199
+
200
+ ### 6.4 Shared-Component Rule
201
+
202
+ If a shared component references a resource and that component is used by multiple screens:
203
+ - record all known screens, or
204
+ - use `Common` when the list is too broad to be helpful.
205
+
206
+ ### 6.5 Global-App Rule
207
+
208
+ Use one of the following fixed labels where appropriate:
209
+ - `Launcher` — launcher icon, round icon, adaptive icon
210
+ - `Global` — app-wide theme or identity resource
211
+ - `Common` — shared across many screens
212
+ - `Unknown` — insufficient evidence
213
+
214
+ ### 6.6 Output Format
215
+
216
+ The `screens` field may contain:
217
+ - a single screen, e.g. `HomeScreen`
218
+ - a comma-separated list, e.g. `HomeScreen, LoginScreen`
219
+ - one of the labels: `Launcher`, `Global`, `Common`, `Unknown`
220
+
221
+ ---
222
+
223
+ ## 7. Source Category Rules
224
+
225
+ The allowed source categories are:
226
+ - `应用自身资源`
227
+ - `项目内模块资源`
228
+ - `第三方库资源`
229
+ - `Android 系统资源`
230
+ - `运行时远程资源`
231
+
232
+ ### 7.1 应用自身资源
233
+
234
+ Use when the resource is confirmed to come from the app module itself.
235
+
236
+ Typical evidence:
237
+ - path under `app/src/.../res`
238
+ - path under the main application module
239
+ - source `res/` fallback found it directly in the app module
240
+
241
+ ### 7.2 项目内模块资源
242
+
243
+ Use when the resource comes from another local module in the same Android project.
244
+
245
+ Typical evidence:
246
+ - path under another local module such as `common/src/.../res`, `feature_xxx/src/.../res`
247
+ - local Gradle project dependency indicates the module belongs to the same repository
248
+
249
+ ### 7.3 第三方库资源
250
+
251
+ Use when the resource likely comes from an external dependency.
252
+
253
+ Typical evidence:
254
+ - resource exists only in the decompiled APK, not in project source modules
255
+ - resource prefix matches common library conventions such as `abc_*`, `mtrl_*`, `design_*`, `material_*`
256
+ - build dependencies indicate a matching library
257
+
258
+ If the category is inferred, say so in `notes`.
259
+
260
+ ### 7.4 Android 系统资源
261
+
262
+ Use when the reference starts with `@android:`.
263
+
264
+ ### 7.5 运行时远程资源
265
+
266
+ Use when the asset is not packaged in `res/` and is instead fetched or constructed at runtime.
267
+
268
+ Typical evidence:
269
+ - URL-based image loading
270
+ - server-driven icon/image fields
271
+ - WebView / HTML / remote content assets
272
+
273
+ ---
274
+
275
+ ## 8. Type Category Rules
276
+
277
+ The primary required categories are:
278
+ - `drawable`
279
+ - `mipmap`
280
+ - `layout`
281
+ - `values`
282
+ - `xml`
283
+ - `font`
284
+
285
+ For required rows that do not originate from a concrete Android resource directory — such as runtime remote resources, resolved Android system references, and placeholder outputs created only to satisfy HarmonyOS references — normalize them into the closest review-friendly category instead of inventing a new top-level type category. In practice:
286
+ - value-like references (`string`, `color`, `dimen`, `integer`, `bool`, `array`, `plurals`) should use `values`
287
+ - runtime remote resources should use `xml` unless there is stronger evidence they behave like media assets
288
+ - placeholder media outputs should use `drawable`
289
+
290
+ ### 8.1 Normalization Rule
291
+
292
+ For qualified directories such as `drawable-hdpi`, `mipmap-anydpi-v26`, `values-zh-rCN`, strip qualifiers and record the base type.
293
+
294
+ Examples:
295
+ - `drawable-hdpi` → `drawable`
296
+ - `mipmap-anydpi-v26` → `mipmap`
297
+ - `values-night` → `values`
298
+
299
+ ### 8.2 `values` Rule
300
+
301
+ Even though `values/*.xml` entries have different subtypes (`string`, `color`, `dimen`, etc.), the required `type_category` remains `values`.
302
+
303
+ ### 8.3 Other Android Types
304
+
305
+ If the original Android type is not one of the six required categories (`raw`, `menu`, `anim`, `animator`, `color`, etc.), do NOT mislabel it. Use:
306
+ - the closest required category only if it is truly correct, otherwise
307
+ - keep the row in scope and explain the original Android type in `notes`
308
+
309
+ Recommended fallback in `notes`:
310
+ - `Original Android type: raw`
311
+ - `Original Android type: menu`
312
+
313
+ ---
314
+
315
+ ## 9. Mapping Kind Rules
316
+
317
+ Suggested `mapping_kind` values:
318
+ - `direct copy`
319
+ - `rename`
320
+ - `svg conversion`
321
+ - `layered-image conversion`
322
+ - `generated media`
323
+ - `merged into json`
324
+ - `unmappable`
325
+ - `fallback applied`
326
+ - `placeholder created`
327
+ - `system resource resolved`
328
+ - `remote resource (no local target)`
329
+
330
+ Use the simplest accurate label.
331
+
332
+ ---
333
+
334
+ ## 10. One-to-One, One-to-Many, and Many-to-One Handling
335
+
336
+ ### 10.1 One-to-One
337
+
338
+ Example:
339
+ - `res/drawable/home_login_btn.png` → `entry/src/main/resources/base/media/home_login_btn.png`
340
+
341
+ Emit one mapping row.
342
+
343
+ ### 10.2 One-to-Many
344
+
345
+ Example: adaptive icon XML may produce:
346
+ - layered-image JSON
347
+ - generated solid-color PNG background
348
+
349
+ Emit multiple mapping rows that share the same Android resource path.
350
+
351
+ ### 10.3 Many-to-One
352
+
353
+ Example: multiple Android `values` files merge into one Harmony JSON file.
354
+
355
+ Still emit one mapping row per Android source entry.
356
+
357
+ Examples:
358
+ - `res/values/strings.xml#string/app_name` → `resources/base/element/string.json#app_name`
359
+ - `res/values/app_strings.xml#string/login_title` → `resources/base/element/string.json#login_title`
360
+
361
+ ### 10.4 No Harmony Target
362
+
363
+ When there is no valid Harmony target, use:
364
+ - `harmony_target = N/A`
365
+
366
+ And explain the reason in `notes`.
367
+
368
+ Examples:
369
+ - layout XML has no direct ArkUI equivalent
370
+ - remote resource is runtime-only
371
+ - unresolved third-party resource had no extracted target
372
+
373
+ ---
374
+
375
+ ## 11. Required Markdown Output Structure
376
+
377
+ The markdown written to `resource_mapping_path` MUST contain the following sections.
378
+
379
+ ### 11.1 Title
380
+
381
+ ```md
382
+ # Android Resources ↔ HarmonyOS Resources Mapping
383
+ ```
384
+
385
+ ### 11.2 Metadata
386
+
387
+ Include bullets for:
388
+ - Android project path
389
+ - HarmonyOS project output path
390
+ - Resource source
391
+ - Resource source path
392
+ - Build result
393
+ - Generation timestamp
394
+
395
+ ### 11.3 Android Resource Inventory
396
+
397
+ Use a markdown table with at least these columns:
398
+ - `Android Resource Path`
399
+ - `Resource Name`
400
+ - `Function`
401
+ - `Screen(s)`
402
+ - `Source Category`
403
+ - `Type Category`
404
+ - `Status`
405
+ - `Notes`
406
+
407
+ ### 11.4 Android → HarmonyOS Mapping Details
408
+
409
+ Use a markdown table with at least these columns:
410
+ - `Android Resource Path`
411
+ - `Android Screen(s)`
412
+ - `Android Source Category`
413
+ - `Android Type Category`
414
+ - `HarmonyOS Target`
415
+ - `Mapping Kind`
416
+ - `Notes`
417
+
418
+ Every mapping row MUST include the Android-side screen/source/type fields.
419
+
420
+ ### 11.5 Unmapped / Unmappable / System / Remote Summary
421
+
422
+ Include a compact summary table or grouped bullets covering:
423
+ - resources with no direct HarmonyOS equivalent
424
+ - Android framework resources
425
+ - library-only resources inferred from dependencies or APK
426
+ - runtime remote resources
427
+
428
+ ### 11.6 Quick Findings
429
+
430
+ Provide short bullets highlighting review-relevant findings, such as:
431
+ - launcher icons coming from `mipmap`
432
+ - probable third-party library assets such as `abc_*` / `mtrl_*`
433
+ - resources found only in the decompiled APK
434
+ - likely causes of icon or logo mismatches
435
+
436
+ ---
437
+
438
+ ## 12. Required Fallback Labels
439
+
440
+ Never leave required fields blank.
441
+
442
+ Use these fallback values where necessary:
443
+ - `screens` → `Unknown`
444
+ - `source_category` → best-evidence category; if still unclear, use `第三方库资源(推断)` or explain uncertainty in `notes`
445
+ - `type_category` → base Android type if valid, otherwise use the closest valid category only if correct and explain the original type in `notes`
446
+ - `harmony_target` → `N/A`
447
+ - `function` → conservative descriptive fallback
448
+
449
+ ---
450
+
451
+ ## 13. Hard Requirements
452
+
453
+ - Never silently omit an Android resource that the pipeline observed.
454
+ - `values` resources must be recorded at entry granularity.
455
+ - Mapping rows must preserve Android-side screen/source/type metadata.
456
+ - Unmappable, library-only, system, and remote resources must still appear in the mapping markdown.
457
+ - If a judgment is inferred rather than proven, say so in `notes`.