@harmonyos-arkts/d2h 0.1.20 → 0.1.21

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 (151) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/README.md +40 -0
  3. package/agents/android-to-hmos-00-orchestrator.md +3 -315
  4. package/agents/d2h.md +53 -38
  5. package/contracts/workflow/artifacts.md +22 -0
  6. package/contracts/workflow/delivery.md +54 -0
  7. package/contracts/workflow/dispatch.md +26 -0
  8. package/contracts/workflow/execution.md +125 -0
  9. package/contracts/workflow/generation.md +40 -0
  10. package/contracts/workflow/orchestration.md +49 -0
  11. package/contracts/workflow/overview.md +58 -0
  12. package/contracts/workflow/plan.md +119 -0
  13. package/contracts/workflow/scope.md +151 -0
  14. package/dist/bin/install-opencode.js +34 -15
  15. package/dist/src/install-codex.js +131 -0
  16. package/dist/src/install-opencode.js +5 -5
  17. package/dist/src/workflow.js +54 -0
  18. package/docs/architecture-plan-guide.zh-CN.md +70 -0
  19. package/docs/incremental-spec-evaluation-design.md +670 -0
  20. package/docs/spec-plan-guide.md +226 -0
  21. package/docs/workflow-decoupling.md +59 -0
  22. package/opencode/interactive-tools/advance-progress-demo.mjs +21 -0
  23. package/opencode/interactive-tools/browser-host.ts +110 -0
  24. package/opencode/interactive-tools/core.ts +242 -0
  25. package/opencode/interactive-tools/demo-workflow.ts +55 -0
  26. package/opencode/interactive-tools/demo.mjs +37 -0
  27. package/opencode/interactive-tools/package-lock.json +1876 -0
  28. package/opencode/interactive-tools/package.json +23 -0
  29. package/opencode/interactive-tools/panel.ts +40 -0
  30. package/opencode/interactive-tools/prepare-demo.mjs +17 -0
  31. package/opencode/interactive-tools/prepare-progress-demo.mjs +13 -0
  32. package/opencode/interactive-tools/progress.ts +118 -0
  33. package/opencode/interactive-tools/server-legacy.mjs +2 -0
  34. package/opencode/interactive-tools/server.mjs +40 -0
  35. package/opencode/interactive-tools/tui.tsx +230 -0
  36. package/package.json +9 -1
  37. package/schemas/native-libs-analysis-report.schema.json +695 -0
  38. package/schemas/native-libs-verify-report.schema.json +566 -0
  39. package/schemas/spec-native-libs-shard.schema.json +110 -0
  40. package/skills/arkts-icon-sizing/SKILL.md +0 -10
  41. package/skills/cpp/d2h-native-library-analyse/SKILL.md +91 -0
  42. package/skills/cpp/d2h-native-library-analyse/scripts/analyse-android-so.py +630 -0
  43. package/skills/cpp/d2h-native-library-build/SKILL.md +403 -0
  44. package/skills/cpp/d2h-native-library-build/references/build-config-mapping.md +180 -0
  45. package/skills/cpp/d2h-native-library-build/references/jni-to-napi-mapping.md +74 -0
  46. package/skills/cpp/d2h-native-library-build/scripts/check-android-so.py +580 -0
  47. package/skills/cpp/d2h-native-library-verify/SKILL.md +111 -0
  48. package/skills/cpp/d2h-native-library-verify/references/demo-build-sign-run.md +67 -0
  49. package/skills/cpp/d2h-native-library-verify/references/demo-project-template/AppScope/app.json5 +1 -0
  50. package/skills/cpp/d2h-native-library-verify/references/demo-project-template/AppScope/resources/base/element/string.json +1 -0
  51. package/skills/cpp/d2h-native-library-verify/references/demo-project-template/README.md +25 -0
  52. package/skills/cpp/d2h-native-library-verify/references/demo-project-template/build-profile.json5 +24 -0
  53. package/skills/cpp/d2h-native-library-verify/references/demo-project-template/entry/build-profile.json5 +1 -0
  54. package/skills/cpp/d2h-native-library-verify/references/demo-project-template/entry/hvigorfile.ts +2 -0
  55. package/skills/cpp/d2h-native-library-verify/references/demo-project-template/entry/oh-package.json5 +1 -0
  56. package/skills/cpp/d2h-native-library-verify/references/demo-project-template/entry/src/main/ets/entryability/EntryAbility.ets +5 -0
  57. package/skills/cpp/d2h-native-library-verify/references/demo-project-template/entry/src/main/ets/pages/Index.ets +3 -0
  58. package/skills/cpp/d2h-native-library-verify/references/demo-project-template/entry/src/main/ets/pages/NativeVerifyDemo.ets +276 -0
  59. package/skills/cpp/d2h-native-library-verify/references/demo-project-template/entry/src/main/module.json5 +1 -0
  60. package/skills/cpp/d2h-native-library-verify/references/demo-project-template/entry/src/main/resources/base/element/color.json +1 -0
  61. package/skills/cpp/d2h-native-library-verify/references/demo-project-template/entry/src/main/resources/base/element/string.json +1 -0
  62. package/skills/cpp/d2h-native-library-verify/references/demo-project-template/entry/src/main/resources/base/profile/main_pages.json +1 -0
  63. package/skills/cpp/d2h-native-library-verify/references/demo-project-template/entry/src/ohosTest/ets/test/FFmpegVerify.test.ets +176 -0
  64. package/skills/cpp/d2h-native-library-verify/references/demo-project-template/entry/src/ohosTest/ets/test/List.test.ets +2 -0
  65. package/skills/cpp/d2h-native-library-verify/references/demo-project-template/entry/src/ohosTest/module.json5 +1 -0
  66. package/skills/cpp/d2h-native-library-verify/references/demo-project-template/hvigor/hvigor-config.json5 +1 -0
  67. package/skills/cpp/d2h-native-library-verify/references/demo-project-template/hvigorfile.ts +2 -0
  68. package/skills/cpp/d2h-native-library-verify/references/demo-project-template/oh-package.json5 +9 -0
  69. package/skills/cpp/d2h-native-library-verify/references/demo-template.md +176 -0
  70. package/skills/cpp/d2h-native-library-verify/references/hypium-test-template.md +163 -0
  71. package/skills/cpp/d2h-native-library-verify/scripts/__pycache__/native_common.cpython-313.pyc +0 -0
  72. package/skills/cpp/d2h-native-library-verify/scripts/device-verify.py +304 -0
  73. package/skills/cpp/d2h-native-library-verify/scripts/native_common.py +341 -0
  74. package/skills/cpp/d2h-native-library-verify/scripts/verify-ohos-native.py +1099 -0
  75. package/skills/d2h-app-solution/SKILL.md +198 -0
  76. package/skills/d2h-app-solution/agents/openai.yaml +4 -0
  77. package/skills/d2h-app-solution/references/framework-evidence.md +117 -0
  78. package/skills/d2h-app-solution/references/hierarchy-rules.md +88 -0
  79. package/skills/d2h-app-solution/references/inventory-schema.md +305 -0
  80. package/skills/d2h-app-solution/references/technical-analysis.md +101 -0
  81. package/skills/d2h-app-solution/scripts/scan_repositories.py +350 -0
  82. package/skills/d2h-app-solution/scripts/validate_inventory.py +337 -0
  83. package/skills/d2h-architecture-plan/SKILL.md +35 -0
  84. package/skills/d2h-architecture-plan/references/directory-creation.md +43 -0
  85. package/skills/d2h-architecture-plan/references/hybrid-design.md +84 -0
  86. package/skills/d2h-architecture-plan/references/layout-reference.md +83 -0
  87. package/skills/d2h-architecture-plan/references/plan-contract.md +51 -0
  88. package/skills/d2h-architecture-plan/references/source-review.md +50 -0
  89. package/skills/d2h-cloud-knowledge/SKILL.md +28 -7
  90. package/skills/d2h-cloud-knowledge/kb_query.mjs +8 -0
  91. package/skills/d2h-dashboard/SKILL.md +56 -0
  92. package/skills/d2h-product-family-migration/SKILL.md +103 -0
  93. package/skills/d2h-product-family-migration/agents/openai.yaml +3 -0
  94. package/skills/d2h-product-family-migration/assets/incremental-plan.template.md +55 -0
  95. package/skills/d2h-product-family-migration/references/advanced/behavioral-verification.md +59 -0
  96. package/skills/d2h-product-family-migration/references/advanced/existing-skill-integration.md +30 -0
  97. package/skills/d2h-product-family-migration/references/advanced/packaging-and-verification.md +43 -0
  98. package/skills/d2h-product-family-migration/references/advanced/platform-probes.md +26 -0
  99. package/skills/d2h-product-family-migration/references/advanced/product-line-design.md +40 -0
  100. package/skills/d2h-product-family-migration/references/baseline-and-delta.md +50 -0
  101. package/skills/d2h-product-family-migration/tests/markdown-cases.md +76 -0
  102. package/skills/{d2h-page-develop → d2h-spec-develop}/SKILL.md +143 -126
  103. package/skills/d2h-spec-develop/agents/openai.yaml +7 -0
  104. package/skills/d2h-spec-develop/references/worker-workflow.md +26 -0
  105. package/skills/{d2h-page-spec-generate → d2h-spec-generate}/SKILL.md +24 -13
  106. package/skills/d2h-spec-generate/assets/spec-template.md +109 -0
  107. package/skills/d2h-spec-generate/references/from-plan.md +19 -0
  108. package/skills/d2h-spec-generate/references/spec-content.md +34 -0
  109. package/skills/{d2h-page-spec-generate → d2h-spec-generate}/scripts/build_batch_report.py +35 -84
  110. package/skills/d2h-spec-plan/SKILL.md +38 -0
  111. package/skills/d2h-spec-plan/agents/openai.yaml +4 -0
  112. package/skills/d2h-spec-plan/references/architecture-handoff.md +9 -0
  113. package/skills/d2h-spec-plan/references/plan-contract.md +13 -0
  114. package/skills/d2h-spec-plan/references/planning-method.md +46 -0
  115. package/skills/d2h-spec-plan/references/round-scope-assessment.md +49 -0
  116. package/skills/d2h-spec-plan/references/work-packets.md +61 -0
  117. package/skills/d2h-utg-ai-generate/references/click-paths-schema.json +2 -2
  118. package/skills/d2h-utg-ai-generate/references/page-schema.json +2 -2
  119. package/skills/d2h-utg-ai-generate/references/utg-schema.json +2 -2
  120. package/skills/d2h-utg-static-generate/SKILL.md +2 -2
  121. package/skills/managing-d2h-toolchain/environment-requirements.json +1 -1
  122. package/skills/managing-d2h-toolchain/toolchain.json +1 -1
  123. package/skills/preparing-migration-workspace/SKILL.md +32 -2
  124. package/workflow/__pycache__/artifact_bindings.cpython-313.pyc +0 -0
  125. package/workflow/__pycache__/spec_runtime.cpython-313.pyc +0 -0
  126. package/workflow/artifact_bindings.py +224 -0
  127. package/workflow/assets/dashboard.html +88 -0
  128. package/workflow/build_batch_report.py +8 -0
  129. package/workflow/collect_code_metrics.py +75 -0
  130. package/workflow/dashboard_overview.py +109 -0
  131. package/workflow/delivery_view.py +82 -0
  132. package/workflow/feature_plan.py +234 -0
  133. package/workflow/page_batches.py +223 -0
  134. package/workflow/spec_generation.py +120 -0
  135. package/workflow/spec_runtime.py +890 -0
  136. package/workflow/work_packets.py +85 -0
  137. package/skills/d2h-page-develop/agents/openai.yaml +0 -7
  138. package/skills/harmonyos-migration-playbook/SKILL.md +0 -83
  139. package/skills/harmonyos-migration-playbook/agents/openai.yaml +0 -7
  140. package/skills/harmonyos-migration-playbook/references/arkts-compile.md +0 -24
  141. package/skills/harmonyos-migration-playbook/references/harmony-runtime.md +0 -53
  142. package/skills/harmonyos-migration-playbook/references/lesson-lifecycle.md +0 -45
  143. package/skills/harmonyos-migration-playbook/references/protocol-e2e.md +0 -23
  144. package/skills/harmonyos-migration-playbook/references/ui-automation.md +0 -53
  145. package/skills/harmonyos-migration-playbook/references/windows-environment.md +0 -38
  146. package/skills/native-library-substitution/SKILL.md +0 -385
  147. package/skills/native-library-substitution/references/native-library-substitution.json +0 -56906
  148. package/skills/native-library-substitution/references/native-library-substitution.md +0 -163
  149. package/skills/porting-cmake-native-libraries/SKILL.md +0 -57
  150. package/skills/porting-cmake-native-libraries/references/platform-adaptation.md +0 -49
  151. package/skills/porting-cmake-native-libraries/references/report-and-build.md +0 -60
@@ -0,0 +1,305 @@
1
+ # Inventory JSON 规范
2
+
3
+ ## 目录
4
+
5
+ 1. 顶层结构
6
+ 2. 功能路径
7
+ 3. 实现状态
8
+ 4. 版本阶段
9
+ 5. 技术栈、SDK/SO 与 Android 权限
10
+ 6. 证据
11
+ 7. 置信度
12
+ 8. 最小示例
13
+
14
+ ## 1. 顶层结构
15
+
16
+ ```json
17
+ {
18
+ "schema_version": "1.2",
19
+ "title": "应用功能清单",
20
+ "language": "zh-CN",
21
+ "max_depth": 4,
22
+ "repositories": [],
23
+ "features": [],
24
+ "open_questions": [],
25
+ "excluded_candidates": []
26
+ }
27
+ ```
28
+
29
+ `repositories[]`:
30
+
31
+ ```json
32
+ {
33
+ "id": "android",
34
+ "label": "Android",
35
+ "path": "/absolute/repository/path",
36
+ "platform": "android",
37
+ "revision": "git commit or working-tree"
38
+ }
39
+ ```
40
+
41
+ `id` 使用稳定 snake_case;`path` 必须是校验时可读的仓库绝对路径。
42
+
43
+ ## 2. 功能路径
44
+
45
+ `features[]`:
46
+
47
+ ```json
48
+ {
49
+ "entry_context": "returning_user",
50
+ "path": ["邮件详情", "更多操作", "显示标头"],
51
+ "kind": "action",
52
+ "trigger": "点击更多操作后选择显示标头",
53
+ "effect": "打开原始邮件标头页面",
54
+ "conditions": ["已打开一封邮件"],
55
+ "should_develop": true,
56
+ "release_stage": "core",
57
+ "release_rationale": "属于常用诊断能力,但不阻断邮件收发最小闭环",
58
+ "capability_key": "message.show_headers",
59
+ "notes": "",
60
+ "implementations": {}
61
+ }
62
+ ```
63
+
64
+ 约束:
65
+
66
+ - `path` 长度为 1–4,不能有空字符串。
67
+ - 最后一个元素是当前功能名称;前面的元素是用户路径父级。
68
+ - `entry_context` 必填。
69
+ - `kind` 取 `screen|surface|tab|menu|dialog|action|setting|flow-step|external`。
70
+ - `trigger` 描述用户操作;纯展示节点可写“进入页面后可见”。
71
+ - `effect` 描述目标页面、状态变化或外部行为。
72
+ - `should_develop` 为必填布尔值:`true` 表示纳入 HarmonyOS 开发范围,`false` 表示用户明确决定不开发。它与各仓已有实现状态无关;后者由 `implementations.<repo_id>.status` 表达。
73
+ - 正式产品范围内的源码功能默认使用 `true`。只有用户明确排除时才能使用 `false`,并在 `notes` 中记录排除依据;不能因实现困难、平台差异、依赖缺失或静态证据不足擅自排除。
74
+ - `release_stage` 取 `mvp|core|full|uncertain`;表示产品能力分层,不等同于实际历史版本。
75
+ - `release_rationale` 必填,说明其对最小用户价值闭环、主流使用或扩展体验的作用。
76
+ - `capability_key` 可选,仅用于跨入口能力去重和跨仓对齐。
77
+
78
+ ## 3. 实现状态
79
+
80
+ `implementations` 必须包含每个仓 ID:
81
+
82
+ ```json
83
+ {
84
+ "android": {
85
+ "status": "implemented",
86
+ "confidence": "high",
87
+ "technology_stack": ["kotlin"],
88
+ "technology_evidence": [],
89
+ "external_dependencies": {
90
+ "status": "none",
91
+ "items": [],
92
+ "negative_searches": ["Gradle/AAR 依赖声明", "import、SDK 调用与 native 加载链"],
93
+ "notes": ""
94
+ },
95
+ "android_permissions": {
96
+ "status": "none",
97
+ "items": [],
98
+ "negative_searches": ["AndroidManifest 权限声明", "运行时申请、权限检查与受保护 API 调用"],
99
+ "notes": ""
100
+ },
101
+ "evidence": [],
102
+ "negative_searches": [],
103
+ "notes": ""
104
+ }
105
+ }
106
+ ```
107
+
108
+ 状态:
109
+
110
+ - `implemented`:正式入口可达,交互和主要效果已接线。
111
+ - `partial`:只实现部分路径、条件或效果。
112
+ - `mock`:UI/路由存在,但使用静态演示数据、空回调、占位页或仅 toast 模拟效果。
113
+ - `unreachable`:代码存在,但没有从分析范围内正式入口到达的路径。
114
+ - `absent`:完成系统性负向复核后确认未实现。
115
+ - `uncertain`:动态行为、生成代码、配置或证据缺口导致无法确认。
116
+ - `not-applicable`:该功能对该仓/产品变体不适用。
117
+
118
+ `absent` 必须填写 `negative_searches`,记录实际检索的同义词、资源键、路由、类名和入口链,不接受“未发现”这类空泛说明。
119
+
120
+ ## 4. 版本阶段
121
+
122
+ - `mvp`:完成主要用户价值闭环不可缺少。
123
+ - `core`:不阻断最小闭环,但显著影响常用流程、信任、留存、效率或异常处理。
124
+ - `full`:扩展体验、生态、运营、个性化或低频辅助能力。
125
+ - `uncertain`:缺少产品定位或路线图,无法可靠判定。
126
+
127
+ 版本阶段属于对齐后的功能路径,同一功能在不同仓共享。不得用代码量或实现难度代替产品价值判断。
128
+
129
+ ## 5. 技术栈、SDK/SO 与 Android 权限
130
+
131
+ `technology_stack` 是非空去重数组,允许:`java|kotlin|cpp|react-native|flutter|h5|swift|objective-c|arkts|javascript|typescript|other|unknown`。`implemented|partial|mock|unreachable` 必须填写;`absent|not-applicable` 可为空。
132
+
133
+ `technology_evidence` 使用与普通证据相同的引用结构,类型通常为 `tech_stack`、`route_declaration`、`ui_interaction` 或 `effect`。仅凭仓库中存在某种语言文件,不足以把该语言归到每个功能。
134
+
135
+ `external_dependencies`:
136
+
137
+ 依赖信息只保留为以下结构化 JSON 字段,不另外拼接成人类可读展示字符串。使用 `unknown` 时必须在同级 `notes` 中写明具体待核实字段和仓库内证据缺口。
138
+
139
+ ```json
140
+ {
141
+ "status": "present",
142
+ "items": [
143
+ {
144
+ "name": "示例支付 SDK",
145
+ "kind": "sdk",
146
+ "provenance": "closed-source",
147
+ "linkage": "direct",
148
+ "required": true,
149
+ "purpose": "发起支付并接收结果",
150
+ "evidence": []
151
+ }
152
+ ],
153
+ "negative_searches": [],
154
+ "notes": ""
155
+ }
156
+ ```
157
+
158
+ - `status`:`present|none|uncertain|not-applicable`。
159
+ - `kind`:`sdk|so`。
160
+ - `provenance`:`open-source|closed-source|mixed|unknown`。
161
+ - `linkage`:`direct|transitive|dynamic|unknown`。
162
+ - `none` 至少记录两项负向复核;`present` 至少有一个带证据的 item。
163
+ - `present` 的 item 必须同时给出依赖声明/本地库证据与功能调用/桥接/加载证据;只有构建声明不能证明功能使用它。
164
+ - 已存在的功能实现不能使用 `not-applicable`;确认不依赖时使用 `none`,无法静态闭合时使用 `uncertain`。
165
+
166
+ `android_permissions`:
167
+
168
+ ```json
169
+ {
170
+ "status": "present",
171
+ "items": [
172
+ {
173
+ "name": "android.permission.CAMERA",
174
+ "requirement": "runtime",
175
+ "required_when": "用户选择拍照上传凭证",
176
+ "purpose": "调用相机采集图片",
177
+ "evidence": []
178
+ }
179
+ ],
180
+ "negative_searches": [],
181
+ "notes": ""
182
+ }
183
+ ```
184
+
185
+ - `status`:`present|none|uncertain|not-applicable`。
186
+ - `requirement`:`install-time|runtime|special|conditional|unknown`。
187
+ - Android 仓的 `none` 至少记录 Manifest 与运行时申请/API 调用两类负向复核。
188
+ - 非 Android 仓通常使用 `not-applicable`;Android 功能未实现时也可使用 `not-applicable`。
189
+ - `present` 的 item 必须包含运行时申请/检查或受保护 API 调用证据;只有 Manifest 声明不能证明该功能依赖权限。
190
+
191
+ ## 6. 证据
192
+
193
+ `evidence[]`:
194
+
195
+ ```json
196
+ {
197
+ "type": "ui_label",
198
+ "path": "app/src/main/res/menu/message.xml",
199
+ "line_start": 42,
200
+ "line_end": 45,
201
+ "symbol": "show_headers",
202
+ "summary": "更多菜单声明“显示标头”入口"
203
+ }
204
+ ```
205
+
206
+ 允许类型:
207
+
208
+ - `entry`:launcher、ability、正式页面清单或启动加载。
209
+ - `route_declaration`:路由或目标声明。
210
+ - `navigation_call`:实际跳转调用。
211
+ - `ui_label`:运行时可见文案或无障碍标签。
212
+ - `ui_interaction`:点击、手势、选择、提交等回调。
213
+ - `menu_item`:菜单或设置条目。
214
+ - `visibility_condition`:显示/启用条件。
215
+ - `effect`:业务调用、状态更新、持久化或外部行为。
216
+ - `tech_stack`:实现语言、跨端框架、WebView/H5 承载或桥接证据。
217
+ - `dependency_declaration`:构建系统中的 SDK/AAR/JAR/package/framework 依赖声明。
218
+ - `native_library`:SO、JNI、CMake/ndkBuild、`System.loadLibrary`、framework/XCFramework 或动态加载证据。
219
+ - `permission_declaration`:Manifest、Info.plist 或平台配置中的权限/能力声明。
220
+ - `permission_request`:运行时权限申请、检查或受保护 API 调用。
221
+ - `test` / `doc`:仅作补强的测试或文档证据。
222
+
223
+ 路径必须相对对应仓库根目录,行号从 1 开始。引用尽量控制在最小连续范围。
224
+
225
+ ## 7. 置信度
226
+
227
+ - `high`:正式入口可达;名称有可见性证据;触发与目标/效果有独立证据;不存在未解释的 mock/flag 分支。
228
+ - `medium`:主链成立,但有一项依赖合理推断、动态配置或间接调用。
229
+ - `low`:只有部分静态线索,或存在明显冲突;通常配合 `uncertain/partial/unreachable`。
230
+
231
+ 字符串、测试、文档或注释单独出现时不得给 `high`。
232
+
233
+ ## 8. 最小示例
234
+
235
+ ```json
236
+ {
237
+ "schema_version": "1.2",
238
+ "title": "示例功能清单",
239
+ "language": "zh-CN",
240
+ "max_depth": 4,
241
+ "repositories": [
242
+ {
243
+ "id": "app",
244
+ "label": "应用仓",
245
+ "path": "/abs/app",
246
+ "platform": "android",
247
+ "revision": "working-tree"
248
+ }
249
+ ],
250
+ "features": [
251
+ {
252
+ "entry_context": "returning_user",
253
+ "path": ["首页", "搜索"],
254
+ "kind": "action",
255
+ "trigger": "点击搜索图标",
256
+ "effect": "打开搜索界面",
257
+ "conditions": [],
258
+ "should_develop": true,
259
+ "release_stage": "core",
260
+ "release_rationale": "搜索显著提升主流商品发现效率,但不阻断基础浏览闭环",
261
+ "notes": "",
262
+ "implementations": {
263
+ "app": {
264
+ "status": "implemented",
265
+ "confidence": "medium",
266
+ "technology_stack": ["kotlin"],
267
+ "technology_evidence": [
268
+ {
269
+ "type": "tech_stack",
270
+ "path": "src/Home.kt",
271
+ "line_start": 1,
272
+ "summary": "Kotlin Compose 页面实现"
273
+ }
274
+ ],
275
+ "external_dependencies": {
276
+ "status": "none",
277
+ "items": [],
278
+ "negative_searches": ["Gradle/AAR 依赖声明", "import、SDK 调用与 native 加载链"],
279
+ "notes": ""
280
+ },
281
+ "android_permissions": {
282
+ "status": "none",
283
+ "items": [],
284
+ "negative_searches": ["AndroidManifest 权限声明", "运行时申请、权限检查与受保护 API 调用"],
285
+ "notes": ""
286
+ },
287
+ "evidence": [
288
+ {
289
+ "type": "ui_interaction",
290
+ "path": "src/Home.kt",
291
+ "line_start": 10,
292
+ "summary": "搜索按钮回调"
293
+ }
294
+ ],
295
+ "negative_searches": [],
296
+ "notes": "需补充目标页面可见文案证据"
297
+ }
298
+ }
299
+ }
300
+ ],
301
+ "open_questions": [],
302
+ "excluded_candidates": []
303
+ }
304
+ ```
305
+
@@ -0,0 +1,101 @@
1
+ # 版本阶段、技术栈、SDK/SO 与权限分析
2
+
3
+ ## 目录
4
+
5
+ 1. 版本阶段
6
+ 2. 技术栈
7
+ 3. SDK 与 SO 依赖
8
+ 4. Android 权限
9
+ 5. 证据与置信边界
10
+
11
+ ## 1. 版本阶段
12
+
13
+ `release_stage` 表示功能在产品能力分层中的建议归属,不等同于 Git 历史中的真实首发版本。除非版本文档、标签或提交记录明确证明,否则不要声称某功能“在某版本首次上线”。
14
+
15
+ - `mvp`:形成产品最小可用闭环不可缺少的入口、操作或结果。移除后,目标用户无法完成主要价值路径。例如电商应用的商品浏览、购物车、下单和最基本登录。
16
+ - `core`:不阻断最小闭环,但显著影响主流使用、信任、留存、效率或常见异常处理。例如搜索、地址管理、订单状态、退款和核心设置。
17
+ - `full`:扩展体验、生态入口、运营能力、个性化、低频辅助功能或高级能力。例如贡献者页面、主题颜色、社区入口和非必要第三方登录。
18
+ - `uncertain`:缺少产品定位、目标用户或路线图,无法可靠归类。
19
+
20
+ 每条功能填写 `release_stage` 和 `release_rationale`。判定以用户价值链为依据,不按代码复杂度、文件数量或开发成本分类。跨仓对齐后的同一功能共享版本阶段;平台特有功能可独立分类。
21
+
22
+ ## 2. 技术栈
23
+
24
+ 技术栈记录功能的实际实现语言或运行表面,而不是整个仓库使用过的所有语言。允许值:
25
+
26
+ - `java`
27
+ - `kotlin`
28
+ - `cpp`
29
+ - `react-native`
30
+ - `flutter`
31
+ - `h5`
32
+ - `swift`
33
+ - `objective-c`
34
+ - `arkts`
35
+ - `javascript`
36
+ - `typescript`
37
+ - `other`
38
+ - `unknown`
39
+
40
+ 逐功能沿入口、页面、桥接层和主要效果调用记录 `technology_stack`。混合实现保留多个值,例如 `kotlin + cpp`、`react-native + kotlin`、`kotlin + h5`。WebView 只有在该功能的主要交互内容由 Web 页面承载时才标记 `h5`;仅打开一个外部网页时,不把原生入口本身改判为 H5。
41
+
42
+ `technology_evidence` 优先引用实现文件、构建配置、桥接注册或 WebView 加载位置。仅凭仓库存在某种文件后缀,不能把该语言归到所有功能。
43
+
44
+ ## 3. SDK 与 SO 依赖
45
+
46
+ 使用 `external_dependencies.status` 表示功能是否依赖第三方 SDK 或原生动态库:
47
+
48
+ - `present`:已证明存在直接或传递依赖,且功能路径会使用它。
49
+ - `none`:完成构建依赖、导入/调用、JNI/动态加载和本地库目录复核后,未发现该功能依赖。
50
+ - `uncertain`:依赖由插件、远端配置、动态加载、闭源 AAR/XCFramework 或构建产物引入,无法确认。
51
+ - `not-applicable`:该实现不存在或该项不适用。
52
+
53
+ `items[]` 字段:
54
+
55
+ - `name`:可识别的 SDK、包、AAR、framework 或 SO 名称。
56
+ - `kind`:`sdk` 或 `so`。
57
+ - `provenance`:`open-source|closed-source|mixed|unknown`。只有许可证、官方说明或仓库源码能证明开闭源属性;不要根据厂商名猜测。
58
+ - `linkage`:`direct|transitive|dynamic|unknown`。
59
+ - `required`:该功能主路径是否必须依赖此项。
60
+ - `purpose`:该依赖在功能中的作用。
61
+ - `evidence`:构建声明、import/调用、桥接、`System.loadLibrary`、`dlopen`、打包配置或实际库文件证据。
62
+
63
+ `present` 必须同时建立“依赖被引入”和“功能确实调用/桥接/加载它”两段证据。已存在的功能实现不得使用 `not-applicable`;确认无依赖用 `none`,无法静态闭合用 `uncertain`。
64
+
65
+ 在 `inventory.json` 中分别写入依赖类型、开闭源属性、主流程必要性、链接方式和用途,不得压缩为依赖字段顺序解释的单个字符串。字段为 `unknown` 时,在同级 `notes` 中写明待核实内容和仓库内证据缺口。
66
+
67
+ Android 优先检查 Gradle version catalog、`dependencies`、AAR/JAR、`jniLibs`、CMake/ndkBuild、JNI 注册与 `System.loadLibrary`。iOS 检查 SPM、CocoaPods、XCFramework/framework 与链接配置。RN/Flutter 同时检查 JS/Dart 包和原生插件层。
68
+
69
+ `none` 必须填写 `negative_searches`,至少记录依赖声明与调用/加载链两类复核;无法排除传递或动态依赖时使用 `uncertain`。
70
+
71
+ ## 4. Android 权限
72
+
73
+ 使用 `android_permissions.status`:
74
+
75
+ - `present`:功能会读取受权限保护的资源或调用需要权限的 API。
76
+ - `none`:复核 Manifest、运行时申请、相关 API 与库调用后,确认无需 Android 权限。
77
+ - `uncertain`:权限可能由依赖库、系统 picker、不同 API 级别或动态模块引入。
78
+ - `not-applicable`:非 Android 实现或功能未实现。
79
+
80
+ `items[]` 字段:
81
+
82
+ - `name`:完整权限名,例如 `android.permission.CAMERA`。
83
+ - `requirement`:`install-time|runtime|special|conditional|unknown`。
84
+ - `required_when`:触发权限的用户条件或 Android 版本条件。
85
+ - `purpose`:权限在功能中的用途。
86
+ - `evidence`:Manifest 声明、运行时申请、权限检查和受保护 API 调用。
87
+
88
+ `present` 至少要有运行时申请/检查或受保护 API 调用证据;只有 Manifest 声明时不能直接判为该功能依赖权限。
89
+
90
+ Manifest 中声明权限不等于每个功能都依赖该权限。必须把权限申请或受保护 API 调用关联到具体用户路径。使用系统 Photo Picker、SAF、分享面板等不要求应用权限的系统能力时,按实际 API 判定,不要因为“选图/选文件”字样自动标记存储权限。
91
+
92
+ `none` 必须填写 `negative_searches`,至少覆盖 Manifest/配置与运行时申请/API 调用;仅有 Manifest 声明而找不到功能调用链时标记 `uncertain`。
93
+
94
+ ## 5. 证据与置信边界
95
+
96
+ - 技术属性证据与功能实现证据分开记录,但都必须使用仓库相对路径和精确行号。
97
+ - 构建文件只能证明依赖被打包,不能单独证明某功能实际使用该依赖;还需 import、调用或桥接证据。
98
+ - 二进制文件存在只能证明可能被打包。无法追到加载与功能调用时使用 `uncertain`。
99
+ - 许可证文件可证明开源属性;营销页、包名印象或厂商声誉不能。
100
+ - 权限声明只能证明应用请求过权限;功能级依赖还需权限检查、请求或受保护 API 调用。
101
+ - 动态特性、反射、服务端下发、Web 容器和插件体系无法静态闭合时,明确记录待确认原因。