@harmonyos-arkts/d2h 0.1.10 → 0.1.12

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 (126) hide show
  1. package/.claude-plugin/marketplace.json +15 -13
  2. package/.claude-plugin/plugin.json +13 -7
  3. package/AGENTS.md +5 -5
  4. package/README.md +212 -212
  5. package/agents/android-to-hmos-00-orchestrator.md +318 -318
  6. package/agents/d2h.md +157 -157
  7. package/dist/bin/install-opencode.js +30 -30
  8. package/docs/environment-check.md +86 -86
  9. package/install-opencode.sh +160 -160
  10. package/opencode/agents.json +16 -16
  11. package/opencode/vscode-d2h-package.json +7 -7
  12. package/opencode/vscode-d2h-plugin.mjs +29 -29
  13. package/package.json +54 -54
  14. package/schemas/android-source-manifest.schema.json +25 -25
  15. package/schemas/checkpoint-provenance.schema.json +67 -67
  16. package/schemas/final-acceptance.schema.json +29 -29
  17. package/schemas/managed-evidence-index.schema.json +15 -15
  18. package/schemas/managed-evidence.schema.json +114 -114
  19. package/schemas/migration-config.schema.json +51 -51
  20. package/schemas/migration-report-index.schema.json +39 -39
  21. package/schemas/migration-report-item.schema.json +51 -51
  22. package/schemas/migration-report-summary.schema.json +25 -25
  23. package/schemas/migration-status.schema.json +202 -202
  24. package/schemas/preflight.schema.json +60 -60
  25. package/schemas/source-order-audit.schema.json +16 -16
  26. package/schemas/source-provenance-event.schema.json +19 -19
  27. package/schemas/spec-app-shard.schema.json +45 -45
  28. package/schemas/spec-fact-corrections-shard.schema.json +13 -13
  29. package/schemas/spec-features-shard.schema.json +43 -43
  30. package/schemas/spec-index.schema.json +26 -26
  31. package/schemas/spec-interactions-shard.schema.json +40 -40
  32. package/schemas/spec-page.schema.json +98 -98
  33. package/schemas/spec-pages-index.schema.json +1 -1
  34. package/schemas/spec-unresolved-shard.schema.json +1 -1
  35. package/schemas/task-envelope.schema.json +109 -109
  36. package/schemas/task-plan.schema.json +341 -341
  37. package/scripts/check-environment.mjs +320 -320
  38. package/skills/android2hmos_resources_convert/SKILL.md +180 -180
  39. package/skills/android2hmos_resources_convert/references/image-conversion-rules.md +230 -230
  40. package/skills/android2hmos_resources_convert/references/svg-fix-patterns.md +175 -175
  41. package/skills/android2hmos_resources_convert/references/xml-drawable-to-svg-rules.md +513 -513
  42. package/skills/arkts-app-identity/SKILL.md +238 -238
  43. package/skills/arkts-i18n/SKILL.md +496 -496
  44. package/skills/arkts-i18n/evals/evals.json +84 -84
  45. package/skills/arkts-i18n/references/code-examples.md +302 -302
  46. package/skills/arkts-i18n/references/common-pitfalls.md +391 -391
  47. package/skills/arkts-i18n/references/dynamic-language-switch.md +604 -604
  48. package/skills/arkts-i18n/references/hardcoded-string-scanner.md +348 -348
  49. package/skills/arkts-i18n/references/language-codes.md +104 -104
  50. package/skills/arkts-i18n/references/resource-file-structure.md +775 -775
  51. package/skills/arkts-i18n/references/static-vs-dynamic.md +242 -242
  52. package/skills/arkts-i18n/references/v1-compat.md +244 -244
  53. package/skills/arkts-i18n/scripts/audit_i18n_completeness.sh +174 -174
  54. package/skills/arkts-icon-sizing/SKILL.md +211 -211
  55. package/skills/arkts-icon-sizing/scripts/icon_audit.py +131 -131
  56. package/skills/arkts-icon-sizing/scripts/icon_autofix.py +88 -88
  57. package/skills/arkts-icon-sizing/scripts/icon_dims.py +179 -179
  58. package/skills/arkts-icon-sizing/scripts/icon_fix.py +119 -119
  59. package/skills/arkts-mvvm-architecture/SKILL.md +613 -613
  60. package/skills/d2h-hypium-forge/SKILL.md +309 -309
  61. package/skills/d2h-hypium-forge/references/functional-spec-template.md +140 -140
  62. package/skills/d2h-hypium-forge/references/official-api.md +135 -135
  63. package/skills/d2h-hypium-forge/references/pitfalls.md +98 -98
  64. package/skills/d2h-hypium-forge/references/testability-template.md +71 -71
  65. package/skills/d2h-hypium-forge/scripts/_common_template.py +659 -659
  66. package/skills/d2h-hypium-forge/scripts/analyze_results.py +165 -165
  67. package/skills/d2h-hypium-forge/scripts/assert_audit.py +107 -107
  68. package/skills/d2h-hypium-forge/scripts/collect_runtime_pages.py +169 -169
  69. package/skills/d2h-hypium-forge/scripts/forge_report.py +325 -325
  70. package/skills/d2h-hypium-forge/scripts/inject_resource_ids.py +114 -114
  71. package/skills/d2h-hypium-forge/scripts/lint_asserts.py +80 -80
  72. package/skills/d2h-hypium-forge/scripts/lint_locate.py +60 -60
  73. package/skills/d2h-hypium-forge/scripts/merge_appgraph.py +249 -249
  74. package/skills/d2h-hypium-forge/scripts/precondition.py +140 -140
  75. package/skills/d2h-hypium-forge/scripts/preinject_ids.py +232 -232
  76. package/skills/d2h-hypium-forge/scripts/probe.py +197 -197
  77. package/skills/d2h-hypium-forge/scripts/run_direct.py +823 -823
  78. package/skills/d2h-hypium-forge/scripts/run_parallel.py +121 -121
  79. package/skills/d2h-hypium-forge/scripts/scan_features.py +255 -255
  80. package/skills/d2h-hypium-forge/scripts/upgrade_asserts.py +66 -66
  81. package/skills/d2h-hypium-forge/scripts/validate_scenarios.py +84 -84
  82. package/skills/d2h-page-develop/SKILL.md +112 -112
  83. package/skills/d2h-page-develop/agents/openai.yaml +7 -7
  84. package/skills/d2h-page-spec-generate/SKILL.md +206 -206
  85. package/skills/d2h-page-spec-generate/scripts/build_batch_report.py +227 -227
  86. package/skills/d2h-utg-ai-generate/SKILL.md +128 -128
  87. package/skills/d2h-utg-ai-generate/references/click-paths-schema.json +76 -76
  88. package/skills/d2h-utg-ai-generate/references/extraction-guide.md +34 -34
  89. package/skills/d2h-utg-ai-generate/references/facts-contract.md +96 -96
  90. package/skills/d2h-utg-ai-generate/references/page-schema.json +61 -61
  91. package/skills/d2h-utg-ai-generate/references/utg-schema.json +89 -89
  92. package/skills/d2h-utg-ai-generate/scripts/build_page_json.py +314 -314
  93. package/skills/d2h-utg-ai-generate/scripts/build_utg.py +123 -123
  94. package/skills/d2h-utg-ai-generate/scripts/capture_from_page_json.ts +280 -280
  95. package/skills/d2h-utg-ai-generate/scripts/utg_common.py +524 -524
  96. package/skills/d2h-utg-ai-generate/scripts/utg_html.py +489 -489
  97. package/skills/d2h-utg-ai-generate/scripts/validate_utg.py +69 -69
  98. package/skills/d2h-utg-ai-generate/scripts/vendor/D3-LICENSE +13 -13
  99. package/skills/d2h-utg-ai-generate/scripts/vendor/d3-7.9.0.min.js +2 -2
  100. package/skills/d2h-utg-ai-generate/tests/test_pipeline.py +369 -369
  101. package/skills/d2h-utg-static-generate/SKILL.md +73 -73
  102. package/skills/d2h-utg-static-generate/references/discoveries.md +38 -38
  103. package/skills/d2h-utg-static-generate/scripts/generate.py +499 -499
  104. package/skills/d2h-utg-static-generate/tests/test_static.py +335 -335
  105. package/skills/d2h-utg-static-generate/tests/verify-offline-html.py +60 -60
  106. package/skills/d2h-utg-static-generate/tests/verify-produced-fixture.py +131 -131
  107. package/skills/harmonyos-migration-playbook/SKILL.md +83 -83
  108. package/skills/harmonyos-migration-playbook/agents/openai.yaml +7 -7
  109. package/skills/harmonyos-migration-playbook/references/arkts-compile.md +24 -24
  110. package/skills/harmonyos-migration-playbook/references/harmony-runtime.md +53 -53
  111. package/skills/harmonyos-migration-playbook/references/lesson-lifecycle.md +45 -45
  112. package/skills/harmonyos-migration-playbook/references/protocol-e2e.md +23 -23
  113. package/skills/harmonyos-migration-playbook/references/ui-automation.md +53 -53
  114. package/skills/harmonyos-migration-playbook/references/windows-environment.md +38 -38
  115. package/skills/maintaining-migration-report/SKILL.md +144 -144
  116. package/skills/maintaining-migration-report/references/final-acceptance.md +48 -48
  117. package/skills/maintaining-migration-report/references/source-provenance.md +66 -66
  118. package/skills/managing-d2h-toolchain/SKILL.md +24 -24
  119. package/skills/managing-d2h-toolchain/environment-requirements.json +16 -16
  120. package/skills/managing-d2h-toolchain/scripts/manage-toolchain.mjs +98 -98
  121. package/skills/managing-d2h-toolchain/toolchain.json +16 -16
  122. package/skills/native-library-substitution/SKILL.md +384 -384
  123. package/skills/native-library-substitution/references/native-library-substitution.json +56905 -56905
  124. package/skills/native-library-substitution/references/native-library-substitution.md +163 -163
  125. package/skills/preparing-migration-workspace/SKILL.md +131 -131
  126. package/skills/reviewing-migration-process/SKILL.md +62 -62
@@ -1,13 +1,15 @@
1
- {
2
- "name": "android-to-hmos-migration-local",
3
- "description": "Android 到 HarmonyOS 迁移插件的本地开发市场",
4
- "owner": { "name": "chuanqi" },
5
- "plugins": [
6
- {
7
- "name": "android-to-hmos-migration",
8
- "description": "基于确定性 facts 和迁移报告的 Android 到 HarmonyOS 迁移流程",
9
- "version": "0.1.0",
10
- "source": "./"
11
- }
12
- ]
13
- }
1
+ {
2
+ "name": "android-to-hmos-migration-local",
3
+ "description": "Android 到 HarmonyOS 迁移插件的本地开发市场",
4
+ "owner": {
5
+ "name": "chuanqi"
6
+ },
7
+ "plugins": [
8
+ {
9
+ "name": "android-to-hmos-migration",
10
+ "description": "基于确定性 facts 和迁移报告的 Android 到 HarmonyOS 迁移流程",
11
+ "version": "0.1.0",
12
+ "source": "./"
13
+ }
14
+ ]
15
+ }
@@ -1,7 +1,13 @@
1
- {
2
- "name": "android-to-hmos-migration",
3
- "description": "基于确定性 facts、迁移报告与端到端验证的 Android 到 HarmonyOS 迁移插件",
4
- "version": "0.1.0",
5
- "license": "MIT",
6
- "keywords": ["android", "harmonyos", "arkts", "migration", "appgraph"]
7
- }
1
+ {
2
+ "name": "android-to-hmos-migration",
3
+ "description": "基于确定性 facts、迁移报告与端到端验证的 Android 到 HarmonyOS 迁移插件",
4
+ "version": "0.1.12",
5
+ "license": "MIT",
6
+ "keywords": [
7
+ "android",
8
+ "harmonyos",
9
+ "arkts",
10
+ "migration",
11
+ "appgraph"
12
+ ]
13
+ }
package/AGENTS.md CHANGED
@@ -1,5 +1,5 @@
1
- # Android to HarmonyOS Migration
2
-
3
- 处理迁移请求时,由当前正式主 Agent `agents/d2h_v2.md` 统一编排专项 Skill。`agents/android-to-hmos-00-orchestrator.md` 和 `agents/d2h.md` 仅保留旧名称兼容,不是规则真源。
4
-
5
- 以真实 HarmonyOS 应用质量为目标,以 AppGraph facts 和迁移报告降低遗漏风险。不要恢复已废弃的旧 SPEC/PLAN/TASK 多 Agent 文档流程或静态转译器;当前使用的 Kernel Task Plan(`droid2hmos task plan/validate/next/show` 派生计划)属于 Migration Kernel 协议,不在此列。
1
+ # Android to HarmonyOS Migration
2
+
3
+ 处理迁移请求时,由当前正式主 Agent `agents/d2h_v2.md` 统一编排专项 Skill。`agents/android-to-hmos-00-orchestrator.md` 和 `agents/d2h.md` 仅保留旧名称兼容,不是规则真源。
4
+
5
+ 以真实 HarmonyOS 应用质量为目标,以 AppGraph facts 和迁移报告降低遗漏风险。不要恢复已废弃的旧 SPEC/PLAN/TASK 多 Agent 文档流程或静态转译器;当前使用的 Kernel Task Plan(`droid2hmos task plan/validate/next/show` 派生计划)属于 Migration Kernel 协议,不在此列。
package/README.md CHANGED
@@ -1,213 +1,213 @@
1
- # android-to-hmos-migration
2
-
3
- Android 应用迁移到 HarmonyOS 的报告驱动 AI 插件,支持 Claude Code 与 OpenCode。
4
-
5
- 插件以 Android 源码、外部依赖和 AppGraph 确定性 facts 为防遗漏基线,由一个主 Agent 持续完成原生 HarmonyOS 实现、测试和端到端验证。迁移报告只记录 Android→HarmonyOS 映射与测试证据,不替代真实实现。
6
-
7
- ## 主流程
8
-
9
- 1. 检查 Android 技术栈、构建基线和设备环境。HarmonyOS HDC 设备是必需门禁;Android 运行环境依赖(SDK/adb/模拟器/Android 侧构建测试)已移除,相关检查固定为 `not_applicable`。
10
- 2. 运行 AppGraph 纯源码静态分析(无需编译 Android 工程),生成只读 `.migration/spec/facts/` 与人工查看的 `spec.html`。
11
- 3. 加载 `appgraph-rule-audit`,只读分析页面、跳转、归属、规则贡献和未解析结果,生成 `.migration/rule-audit/` 规则提升候选;它不修改 facts 或规则,也不阻塞迁移。
12
- 4. 从 facts 初始化 `.migration/report/` 报告分片。
13
- 5. 从 `.migration/spec/` 的 Facts 分片契约 `2.0.0` 与受管 correction/review 编译 `.migration/tasks/`,校验 Launcher、行为闭包、Fact 所有权和 Task DAG。
14
- 6. AI 通过 `task next`/`task show` 在 Resolution 阶段取得裁决 Task,在 Execution 阶段取得一个完整 Page Work Package;以 Android 源码和运行行为为权威持续实现 HarmonyOS 应用。
15
- 7. 每完成一个可验证 Page Work Package,同步填写内部 Work Item/Behavior 的实现映射和测试证据,并创建 Git 检查点。
16
- 8. 在 HarmonyOS 模拟器或真机上执行端到端功能验证。Android 运行时对照能力已移除,一致性基准为 Android 源码、静态 facts 与 `evidence compare` 对既有证据目录的比较;发现 facts 遗漏时写入报告 discoveries。
17
- 9. 使用 Task Plan 与报告门禁检查已知 facts 覆盖;最终完成必须同时满足真实应用验收。
18
-
19
- Task Planning 的跨仓实现映射、架构图、Agent 生效检查和端到端运行命令见 [`docs/task-planning-implementation-and-runbook.md`](docs/task-planning-implementation-and-runbook.md)。
20
- Task 从真实入口到提取、闭包、合并、所有权、依赖、推荐和执行的完整原则见 [`docs/task-planning-principles.md`](docs/task-planning-principles.md)。
21
-
22
- ## 保留结构
23
-
24
- ```text
25
- android-to-hmos-migration/
26
- ├── .claude-plugin/ # Claude Code 插件清单
27
- ├── agents/ # 报告驱动主 Agent
28
- ├── docs/ # 流程与 Task Planning Strategy 设计
29
- ├── opencode/agents.json # OpenCode Agent 权限
30
- ├── schemas/ # facts、报告与 Preflight 契约
31
- ├── skills/ # 工作区准备、工程架构规范、报告、经验和流程复盘
32
- └── install-opencode.sh # OpenCode Agent/Skill 安装器
33
- ```
34
-
35
- ## 安装
36
-
37
- D2H 安装器按 `skills/managing-d2h-toolchain/toolchain.json` 中联测的版本安装 AppGraph、droid2hmos 和 Agent/Skill,原有行为保持不变。[`managing-d2h-toolchain`](skills/managing-d2h-toolchain/SKILL.md) 现在也能独立检查、按需安装同一工具组合,不依赖 `d2h` 命令:在 Skill 目录运行 `node scripts/manage-toolchain.mjs check`,未通过时运行 `node scripts/manage-toolchain.mjs install`。以下命令可使用 D2H 安装器;独立 Skill 脚本随本版本提供:
38
-
39
- ```sh
40
- npx --yes @harmonyos-arkts/d2h@0.1.10 install --agent opencode
41
- npx --yes @harmonyos-arkts/d2h@0.1.10 install --agent vscode
42
- npx --yes @harmonyos-arkts/d2h@0.1.10 install --agent vscode --remote
43
- npx --yes @harmonyos-arkts/d2h@0.1.10 doctor --agent vscode
44
- npx --yes @harmonyos-arkts/d2h@0.1.10 upgrade --check
45
- npx --yes @harmonyos-arkts/d2h@0.1.10 --check-env --output-dir ./environment-report
46
- ```
47
-
48
- VS Code 目标是 Huawei HarmonyOS Dev Assistant 扩展;安装器复制 Agent/Skill、注册 `d2h` 并设置读写编辑权限,同时将模式名显示为“安卓转鸿蒙”。扩展使用已解包的 OpenCode 缓存运行,安装器会同步更新当前活动缓存并备份改动;请先启动扩展一次以生成缓存,安装后在 VS Code 中执行“Developer: Reload Window”使对话后端重新读取配置。`doctor --agent vscode` 会检查扩展文件和活动缓存。详细用法见 [环境检查说明](docs/environment-check.md)。受管 CLI 的全局 npm link 默认保留;显式运行 `d2h install --force --agent vscode` 或 Skill 的 `node scripts/manage-toolchain.mjs install --force` 才会替换全局链接,不会修改链接指向的源码目录。
49
-
50
- Claude Code:
51
-
52
- ```text
53
- /plugin marketplace add D:/code/a2h/android-to-hmos-migration
54
- /plugin install android-to-hmos-migration@android-to-hmos-migration-local
55
- ```
56
-
57
- OpenCode(Node.js 22.5–24.x,支持 Windows/macOS/Linux,无需克隆仓库或安装 Shell):
58
-
59
- ```sh
60
- npx --yes @harmonyos-arkts/d2h@0.1.10
61
- ```
62
-
63
- 安装器把 npm 包内的 `skills/` 和 `agents/` 复制到当前用户的 OpenCode 全局配置目录。更新已有安装时使用:
64
-
65
- ```sh
66
- npx --yes @harmonyos-arkts/d2h@0.1.10 --force
67
- ```
68
-
69
- 先预览或指定目录:
70
-
71
- ```sh
72
- npx --yes @harmonyos-arkts/d2h@0.1.10 --dry-run
73
- npx --yes @harmonyos-arkts/d2h@0.1.10 --config-dir /path/to/opencode
74
- ```
75
-
76
- 默认目标为 OpenCode,也可显式使用 `--agent opencode`。安装到 DevEco Code:
77
-
78
- ```sh
79
- npx --yes @harmonyos-arkts/d2h@0.1.10 --agent deveco
80
- npx --yes @harmonyos-arkts/d2h@0.1.10 --agent deveco --force
81
- ```
82
-
83
- DevEco Code 默认安装到 `~/.config/deveco`(Windows 为 `%USERPROFILE%\.config\deveco`),目录优先级为 `--config-dir` → `DEVECO_CONFIG_DIR` → `$XDG_CONFIG_HOME/deveco` → `~/.config/deveco`。OpenCode 使用 `OPENCODE_CONFIG_DIR`,两者互不混用。安装时会在目标的 `opencode.json` 插件数组中加入仅用于 `d2h` 的 `opencode-metrics-plugin-lite`;加 `--remote` 则使用 `opencode-metrics-plugin`。重复安装会切换版本,不会同时启用两者。安装完成后重启对应应用;已有其他配置保留。`--config-dir` 与 `--agent` 的参数顺序不影响结果。
84
-
85
- 默认目录按 `OPENCODE_CONFIG_DIR` → `$XDG_CONFIG_HOME/opencode` → `~/.config/opencode` 解析;Windows 默认 `%USERPROFILE%\.config\opencode`。安装器仅更新 `opencode.json` 的 metrics 插件条目,不会复制仓库的 `AGENTS.md`。已有相同内容保持不变,冲突时提示 `--force`,其他用户 Agent/Skill 保留。
86
-
87
- 从仓库安装仍可使用原 Shell 脚本:
88
-
89
- ```sh
90
- sh ./install-opencode.sh
91
- ```
92
-
93
- 该脚本把 `skills/` 和 `agents/` 安装到当前用户的 OpenCode 全局配置目录,不读取或改写 `opencode.json`。更新已有安装时使用 `--force`;本地开发需要让全局安装实时跟随仓库时使用 `--link --force`。可通过 `--config-dir` 和 `--source-dir` 适配自定义目录,先用 `--dry-run` 检查操作。完整参数见 `sh ./install-opencode.sh --help`。
94
-
95
- npm 安装器支持同样的参数,完整说明见 `npx --yes @harmonyos-arkts/d2h@0.1.10 --help`。本地开发可使用 `npm run build && node dist/bin/install-opencode.js --source-dir /path/to/repository --link --force`。Windows 下 Agent 文件符号链接需要开发者模式或管理员权限;默认复制模式不需要。不要将 `npx` 缓存作为长期链接来源,缓存清理后链接可能失效。
96
-
97
- 维护者发布:安装开发依赖后运行 `npm run build`,将 TypeScript 源码编译到 `dist/`;`npm run check && npm test` 检查类型并测试编译后的 CLI,然后 `npm publish`。npm 包使用 `dist/bin/install-opencode.js` 作为入口,包含编译后的运行代码、Agent、完整 Skill 资源树及 schema,不包含 TypeScript 源码、研发文档和测试;发布时不会自动修改用户配置,只有显式执行 `npx` 安装器才会安装。
98
-
99
- 完全退出并重新启动 OpenCode 后,选择 `d2h_v2` 执行完整迁移。`android-to-hmos-00-orchestrator` 和 `d2h` 仅为旧名称兼容入口。
100
-
101
- ## 命令
102
-
103
- ```text
104
- droid2hmos init <android-project> [--target <harmony-project>]
105
- droid2hmos status <android-project>
106
- droid2hmos complete <android-project>
107
- droid2hmos analyze <android|harmony|all> <android-project>
108
- droid2hmos report init <android-project>
109
- droid2hmos report validate <android-project> [--require-complete]
110
- droid2hmos report update <android-project> --ref <ref> [--status <status>] [--harmony-file <path>] [--android-source <path>] [--evidence <path>]
111
- droid2hmos report <android-project> [--require-complete]
112
- droid2hmos report render <android-project>
113
- droid2hmos task plan <android-project>
114
- droid2hmos task validate <android-project>
115
- droid2hmos task status <android-project>
116
- droid2hmos task next <android-project>
117
- droid2hmos task show <android-project> <task-id> [--cursor <cursor>] [--max-source-context <count>]
118
- droid2hmos build harmony <android-project>
119
- droid2hmos test harmony <android-project> --runner python --hypium-project <path> (--test-list <name>...|--all) [--target <id>] [--ref <report-ref>...]
120
- droid2hmos test harmony <android-project> --class <class> [--case <case>] [--target <id>] [--case-timeout-ms <ms>] [--ref <report-ref>...]
121
- droid2hmos test harmony <android-project> --all [--target <id>] [--case-timeout-ms <ms>] [--ref <report-ref>...]
122
- droid2hmos service start <name> <android-project> [--health-url <url>] -- <command> [args...]
123
- droid2hmos service status <name> <android-project>
124
- droid2hmos service stop <name> <android-project>
125
- ```
126
-
127
- - `init`:从受管 DevEco 模板创建 HarmonyOS 工程壳。
128
- - `status`:从项目、配置、Preflight、facts、报告、Task Plan、源码指纹和受管证据只读推导当前阶段、允许动作与完成缺口,不维护可漂移的手工状态。
129
- - `complete`:最终完成硬门禁;任何 guard 模式都不能绕过当前分析、全量回归、报告和逐项证据的新鲜度检查。
130
- - `analyze android`:通过 AppGraph 对 Android 源码做纯静态分析,生成确定性 facts 和 `spec.html`,无需编译 Android 工程;同时只读清点既有 APK,仅作参考信息(Android 运行时对照能力已移除)。
131
- - `report init`:从 facts 初始化报告 `1.2.0`;存量 `1.1.0` 报告原地升级但不会伪造来源。
132
- - `report update/validate`:为 implemented/verified 条目强制记录 Android `sourceProvenance`,校验受管成员、文件 hash、可用 Task closure 和 HarmonyOS 路径;项目内事件文件不被当作可信 D1 来源,缺少运行器集成时返回 `unavailable`,D2 抽样只产生 warning。当前不拦截宿主普通文件写入,最高默认证据级别为 `declared-hash-validated`。
133
- - `report`:校验后生成 `.migration/report/report.html`。HTML 主体面向用户展示迁移结论、未完成内容、下一步、端到端测试、差异和阻塞;页面/控件/导航、内部 ref 与文件映射仅作为默认折叠的技术追溯附录。
134
- - `task plan/validate`:确定性生成并校验 `.migration/tasks/`;计划基线绑定 Facts、correction/review 和 Android 指纹,并按可观察行为而不是单个 Entry/Issue 聚合责任。
135
- - `task status/next/show`:只读推导 Task 运行态、选择 Ready Frontier,并按需分页返回源码上下文;不写新的状态机文件。
136
- - `build harmony`:直接读取 DevEco JSON5 配置生成应用构建命令;Hvigor 增量命中时可复用不早于当前构建输入的非空 HAP,过期产物会失败;`config.json` 不保存 HarmonyOS 构建命令。
137
- - `test harmony`:确定性构建应用 HAP 并运行 Hypium。迁移流程统一使用 `--runner python --hypium-project <path> --test-list <name>...` 执行 `d2h-hypium-forge` 生成的 `.hypium_forge/` Python 用例(定向执行、无 `--all`,需 `python -m pip install hypium -U`);`--class/--case/--all` 的 ArkTS ohosTest runner 仅用于存量资产。多设备时必须传 `--target`,测试失败、忽略、零执行或缺少结果摘要都会失败。用重复的 `--ref` 声明本次测试实际覆盖的报告项,未覆盖的 `verified` 项不能通过 `complete`。
138
-
139
- ## 核心产物
140
-
141
- 迁移产物统一存放在安卓工程父目录下的独立工作区 `<AndroidProject>-migration/` 中,不再写入安卓工程内部。CLI 在创建 `.migration/` 前会自动在工作区根目录生成 `.gitignore`(内容 `.migration/`),防止迁移产物被上层 Git 仓库提交到远端:
142
-
143
- ```text
144
- AndroidProject/.migration/
145
- ├── preflight-report.json
146
- ├── spec/
147
- │ ├── index.json
148
- │ ├── facts/
149
- │ └── spec.html
150
- ├── report/
151
- │ ├── index.json
152
- │ ├── pages/
153
- │ ├── interactions/
154
- │ ├── discoveries.json
155
- │ ├── summary.json # AI填写的用户总结
156
- │ ├── final-acceptance.json
157
- │ ├── validation.json
158
- │ └── report.html # 脚本生成的用户报告
159
- ├── tasks/
160
- │ ├── graph.json # droid2hmos 生成的派生 Task DAG
161
- │ ├── index.json
162
- │ ├── briefs/*.md
163
- │ └── acceptance/*.json
164
- ├── evidence/
165
- │ ├── index.json # 最近一次受管动作证据索引
166
- │ ├── blobs/<sha256>/ # 完成门禁校验的内容寻址证据产物
167
- │ └── managed/*.json # 与 facts/源码指纹绑定的 CLI 收据
168
- ├── audit/
169
- │ ├── source-events.jsonl # 可选可信有序事件输入
170
- │ ├── android-source-manifest.json # 受管 Android 成员与 hash
171
- │ ├── checkpoint-provenance.json # 随受管 checkpoint 强制进入 Git commit
172
- │ ├── source-order-audit.json
173
- │ └── literal-drift-audit.json
174
- └── experience/lessons.md
175
- ```
176
-
177
- AppGraph 保持独立仓库。Preflight 安装器始终解析 `Harmony-Ai-Tool/appgraph` 的 `main` 当前提交,按精确 SHA 隔离缓存到 `~/.android-to-hmos/tools/`;远端不可达时 Preflight 失败。
178
-
179
- ## CLI 与校验
180
-
181
- ```text
182
- droid2hmos --version
183
- droid2hmos --help
184
- ```
185
-
186
- 本仓库不再内置 CLI Implementation,也没有 Node.js 构建入口。Task Planning 的策略、Agent 流程和 JSON 契约维护在本仓库;Facts Adapter、闭包/所有权/DAG 编译、计划落盘和所有确定性命令由独立 `droid2hmos` 包实现。生成的计划位于被迁移 Android 工程的 `.migration/tasks/`,不写回任一工具仓库。
187
-
188
- Migration Kernel 在独立 CLI 中实现 `inspect → guard → execute → record`:阶段只是解释性快照,AI 仍自主决定批次和实现方式;命令前置条件、失败重试分类、证据新鲜度和最终完成条件由确定性代码检查。正常流程不依赖 AI 猜测“已经到达哪个节点”,也不要求写入 `.migration/state.json`。
189
-
190
- 报告通过只证明已知 facts 有记录,不证明迁移成功。最终标准始终是:HarmonyOS 应用中的所有页面、控件、导航、Dialog 和业务功能与 Android 的外部可观察行为一致,并通过真实设备端到端验证。
191
-
192
- Windows 下所有 Gradle/Hvigor 测试与构建均由 Preflight 的有限命令运行器执行:禁用 Daemon、禁止输出管道、日志直接落盘并设置超时,避免构建成功后 OpenCode 因继承的输出句柄永久卡死。
193
-
194
- ## AppGraph 静态 UTG
195
-
196
- AppGraph 与 droid2hmos 的包、精确版本和命令能力只在 `skills/managing-d2h-toolchain/toolchain.json` 中声明。其他 Agent/Skill 直接使用已检查的 CLI,不再维护依赖块;`npm run check` 验证清单与环境约束一致。D2H 安装器与 `managing-d2h-toolchain/scripts/manage-toolchain.mjs` 均使用这份清单;Skill 脚本可在没有 D2H 命令时独立执行。
197
-
198
- 主流程加载 `d2h-utg-static-generate` 完成 Android 静态分析,由 Skill 内部调用 `droid2hmos analyze android` 生成受管 Facts,再复用本次 AppGraph 构建基础 UTG、完成 AI 源码核验与独立修补,统一重建并输出离线 `utg.html`。主流程不另行调用分析 CLI,图生成不重复执行 AppGraph 分析。生成后的原始图和 facts 保持只读,不操作设备。
199
-
200
- 主流程操作步骤见 [Skill 的迁移主流程入口](skills/d2h-utg-static-generate/SKILL.md)。独立生成 UTG 可运行:
201
-
202
- ```bash
203
- python skills/d2h-utg-static-generate/scripts/generate.py --project-root <Android源码> --workspace <迁移现场>/.migration/utg
204
- ```
205
-
206
- 可用 `--appgraph <app-graph.json>` 消费现有图。Agent 阅读 `review-worklist.json`、核对源码后填写 `discoveries.json`,用相同命令加 `--force` 重建;源码和输入图变化会拒绝旧修补。完整契约见 [新 Skill](skills/d2h-utg-static-generate/SKILL.md)。静态到达性不是运行时确认;缺少到达规则或执行选择器的页面不安排采集。设备采集通过现有 AI Skill 的已有 `page.json` 入口执行。
207
-
208
- 验证:
209
-
210
- ```bash
211
- python -X utf8 -m unittest discover -s skills/d2h-utg-static-generate/tests -v
212
- python -X utf8 -m unittest discover -s skills/d2h-utg-ai-generate/tests -v
1
+ # android-to-hmos-migration
2
+
3
+ Android 应用迁移到 HarmonyOS 的报告驱动 AI 插件,支持 Claude Code 与 OpenCode。
4
+
5
+ 插件以 Android 源码、外部依赖和 AppGraph 确定性 facts 为防遗漏基线,由一个主 Agent 持续完成原生 HarmonyOS 实现、测试和端到端验证。迁移报告只记录 Android→HarmonyOS 映射与测试证据,不替代真实实现。
6
+
7
+ ## 主流程
8
+
9
+ 1. 检查 Android 技术栈、构建基线和设备环境。HarmonyOS HDC 设备是必需门禁;Android 运行环境依赖(SDK/adb/模拟器/Android 侧构建测试)已移除,相关检查固定为 `not_applicable`。
10
+ 2. 运行 AppGraph 纯源码静态分析(无需编译 Android 工程),生成只读 `.migration/spec/facts/` 与人工查看的 `spec.html`。
11
+ 3. 加载 `appgraph-rule-audit`,只读分析页面、跳转、归属、规则贡献和未解析结果,生成 `.migration/rule-audit/` 规则提升候选;它不修改 facts 或规则,也不阻塞迁移。
12
+ 4. 从 facts 初始化 `.migration/report/` 报告分片。
13
+ 5. 从 `.migration/spec/` 的 Facts 分片契约 `2.0.0` 与受管 correction/review 编译 `.migration/tasks/`,校验 Launcher、行为闭包、Fact 所有权和 Task DAG。
14
+ 6. AI 通过 `task next`/`task show` 在 Resolution 阶段取得裁决 Task,在 Execution 阶段取得一个完整 Page Work Package;以 Android 源码和运行行为为权威持续实现 HarmonyOS 应用。
15
+ 7. 每完成一个可验证 Page Work Package,同步填写内部 Work Item/Behavior 的实现映射和测试证据,并创建 Git 检查点。
16
+ 8. 在 HarmonyOS 模拟器或真机上执行端到端功能验证。Android 运行时对照能力已移除,一致性基准为 Android 源码、静态 facts 与 `evidence compare` 对既有证据目录的比较;发现 facts 遗漏时写入报告 discoveries。
17
+ 9. 使用 Task Plan 与报告门禁检查已知 facts 覆盖;最终完成必须同时满足真实应用验收。
18
+
19
+ Task Planning 的跨仓实现映射、架构图、Agent 生效检查和端到端运行命令见 [`docs/task-planning-implementation-and-runbook.md`](docs/task-planning-implementation-and-runbook.md)。
20
+ Task 从真实入口到提取、闭包、合并、所有权、依赖、推荐和执行的完整原则见 [`docs/task-planning-principles.md`](docs/task-planning-principles.md)。
21
+
22
+ ## 保留结构
23
+
24
+ ```text
25
+ android-to-hmos-migration/
26
+ ├── .claude-plugin/ # Claude Code 插件清单
27
+ ├── agents/ # 报告驱动主 Agent
28
+ ├── docs/ # 流程与 Task Planning Strategy 设计
29
+ ├── opencode/agents.json # OpenCode Agent 权限
30
+ ├── schemas/ # facts、报告与 Preflight 契约
31
+ ├── skills/ # 工作区准备、工程架构规范、报告、经验和流程复盘
32
+ └── install-opencode.sh # OpenCode Agent/Skill 安装器
33
+ ```
34
+
35
+ ## 安装
36
+
37
+ D2H 安装器按 `skills/managing-d2h-toolchain/toolchain.json` 中联测的版本安装 AppGraph、droid2hmos 和 Agent/Skill,原有行为保持不变。[`managing-d2h-toolchain`](skills/managing-d2h-toolchain/SKILL.md) 现在也能独立检查、按需安装同一工具组合,不依赖 `d2h` 命令:在 Skill 目录运行 `node scripts/manage-toolchain.mjs check`,未通过时运行 `node scripts/manage-toolchain.mjs install`。以下命令可使用 D2H 安装器;独立 Skill 脚本随本版本提供:
38
+
39
+ ```sh
40
+ npx --yes @harmonyos-arkts/d2h@0.1.11 install --agent opencode
41
+ npx --yes @harmonyos-arkts/d2h@0.1.11 install --agent vscode
42
+ npx --yes @harmonyos-arkts/d2h@0.1.11 install --agent vscode --remote
43
+ npx --yes @harmonyos-arkts/d2h@0.1.11 doctor --agent vscode
44
+ npx --yes @harmonyos-arkts/d2h@0.1.11 upgrade --check
45
+ npx --yes @harmonyos-arkts/d2h@0.1.11 --check-env --output-dir ./environment-report
46
+ ```
47
+
48
+ VS Code 目标是 Huawei HarmonyOS Dev Assistant 扩展;安装器复制 Agent/Skill、注册 `d2h` 并设置读写编辑权限,同时将模式名显示为“安卓转鸿蒙”。扩展使用已解包的 OpenCode 缓存运行,安装器会同步更新当前活动缓存并备份改动;请先启动扩展一次以生成缓存,安装后在 VS Code 中执行“Developer: Reload Window”使对话后端重新读取配置。`doctor --agent vscode` 会检查扩展文件和活动缓存。详细用法见 [环境检查说明](docs/environment-check.md)。受管 CLI 的全局 npm link 默认保留;显式运行 `d2h install --force --agent vscode` 或 Skill 的 `node scripts/manage-toolchain.mjs install --force` 才会替换全局链接,不会修改链接指向的源码目录。
49
+
50
+ Claude Code:
51
+
52
+ ```text
53
+ /plugin marketplace add D:/code/a2h/android-to-hmos-migration
54
+ /plugin install android-to-hmos-migration@android-to-hmos-migration-local
55
+ ```
56
+
57
+ OpenCode(Node.js 22.5–24.x,支持 Windows/macOS/Linux,无需克隆仓库或安装 Shell):
58
+
59
+ ```sh
60
+ npx --yes @harmonyos-arkts/d2h@0.1.11
61
+ ```
62
+
63
+ 安装器把 npm 包内的 `skills/` 和 `agents/` 复制到当前用户的 OpenCode 全局配置目录。更新已有安装时使用:
64
+
65
+ ```sh
66
+ npx --yes @harmonyos-arkts/d2h@0.1.11 --force
67
+ ```
68
+
69
+ 先预览或指定目录:
70
+
71
+ ```sh
72
+ npx --yes @harmonyos-arkts/d2h@0.1.11 --dry-run
73
+ npx --yes @harmonyos-arkts/d2h@0.1.11 --config-dir /path/to/opencode
74
+ ```
75
+
76
+ 默认目标为 OpenCode,也可显式使用 `--agent opencode`。安装到 DevEco Code:
77
+
78
+ ```sh
79
+ npx --yes @harmonyos-arkts/d2h@0.1.11 --agent deveco
80
+ npx --yes @harmonyos-arkts/d2h@0.1.11 --agent deveco --force
81
+ ```
82
+
83
+ DevEco Code 默认安装到 `~/.config/deveco`(Windows 为 `%USERPROFILE%\.config\deveco`),目录优先级为 `--config-dir` → `DEVECO_CONFIG_DIR` → `$XDG_CONFIG_HOME/deveco` → `~/.config/deveco`。OpenCode 使用 `OPENCODE_CONFIG_DIR`,两者互不混用。安装时会在目标的 `opencode.json` 插件数组中加入仅用于 `d2h` 的 `opencode-metrics-plugin-lite`;加 `--remote` 则使用 `opencode-metrics-plugin`。重复安装会切换版本,不会同时启用两者。安装完成后重启对应应用;已有其他配置保留。`--config-dir` 与 `--agent` 的参数顺序不影响结果。
84
+
85
+ 默认目录按 `OPENCODE_CONFIG_DIR` → `$XDG_CONFIG_HOME/opencode` → `~/.config/opencode` 解析;Windows 默认 `%USERPROFILE%\.config\opencode`。安装器仅更新 `opencode.json` 的 metrics 插件条目,不会复制仓库的 `AGENTS.md`。已有相同内容保持不变,冲突时提示 `--force`,其他用户 Agent/Skill 保留。
86
+
87
+ 从仓库安装仍可使用原 Shell 脚本:
88
+
89
+ ```sh
90
+ sh ./install-opencode.sh
91
+ ```
92
+
93
+ 该脚本把 `skills/` 和 `agents/` 安装到当前用户的 OpenCode 全局配置目录,不读取或改写 `opencode.json`。更新已有安装时使用 `--force`;本地开发需要让全局安装实时跟随仓库时使用 `--link --force`。可通过 `--config-dir` 和 `--source-dir` 适配自定义目录,先用 `--dry-run` 检查操作。完整参数见 `sh ./install-opencode.sh --help`。
94
+
95
+ npm 安装器支持同样的参数,完整说明见 `npx --yes @harmonyos-arkts/d2h@0.1.11 --help`。本地开发可使用 `npm run build && node dist/bin/install-opencode.js --source-dir /path/to/repository --link --force`。Windows 下 Agent 文件符号链接需要开发者模式或管理员权限;默认复制模式不需要。不要将 `npx` 缓存作为长期链接来源,缓存清理后链接可能失效。
96
+
97
+ 维护者发布:安装开发依赖后运行 `npm run build`,将 TypeScript 源码编译到 `dist/`;`npm run check && npm test` 检查类型并测试编译后的 CLI,然后 `npm publish`。npm 包使用 `dist/bin/install-opencode.js` 作为入口,包含编译后的运行代码、Agent、完整 Skill 资源树及 schema,不包含 TypeScript 源码、研发文档和测试;发布时不会自动修改用户配置,只有显式执行 `npx` 安装器才会安装。
98
+
99
+ 完全退出并重新启动 OpenCode 后,选择 `d2h_v2` 执行完整迁移。`android-to-hmos-00-orchestrator` 和 `d2h` 仅为旧名称兼容入口。
100
+
101
+ ## 命令
102
+
103
+ ```text
104
+ droid2hmos init <android-project> [--target <harmony-project>]
105
+ droid2hmos status <android-project>
106
+ droid2hmos complete <android-project>
107
+ droid2hmos analyze <android|harmony|all> <android-project>
108
+ droid2hmos report init <android-project>
109
+ droid2hmos report validate <android-project> [--require-complete]
110
+ droid2hmos report update <android-project> --ref <ref> [--status <status>] [--harmony-file <path>] [--android-source <path>] [--evidence <path>]
111
+ droid2hmos report <android-project> [--require-complete]
112
+ droid2hmos report render <android-project>
113
+ droid2hmos task plan <android-project>
114
+ droid2hmos task validate <android-project>
115
+ droid2hmos task status <android-project>
116
+ droid2hmos task next <android-project>
117
+ droid2hmos task show <android-project> <task-id> [--cursor <cursor>] [--max-source-context <count>]
118
+ droid2hmos build harmony <android-project>
119
+ droid2hmos test harmony <android-project> --runner python --hypium-project <path> (--test-list <name>...|--all) [--target <id>] [--ref <report-ref>...]
120
+ droid2hmos test harmony <android-project> --class <class> [--case <case>] [--target <id>] [--case-timeout-ms <ms>] [--ref <report-ref>...]
121
+ droid2hmos test harmony <android-project> --all [--target <id>] [--case-timeout-ms <ms>] [--ref <report-ref>...]
122
+ droid2hmos service start <name> <android-project> [--health-url <url>] -- <command> [args...]
123
+ droid2hmos service status <name> <android-project>
124
+ droid2hmos service stop <name> <android-project>
125
+ ```
126
+
127
+ - `init`:从受管 DevEco 模板创建 HarmonyOS 工程壳。
128
+ - `status`:从项目、配置、Preflight、facts、报告、Task Plan、源码指纹和受管证据只读推导当前阶段、允许动作与完成缺口,不维护可漂移的手工状态。
129
+ - `complete`:最终完成硬门禁;任何 guard 模式都不能绕过当前分析、全量回归、报告和逐项证据的新鲜度检查。
130
+ - `analyze android`:通过 AppGraph 对 Android 源码做纯静态分析,生成确定性 facts 和 `spec.html`,无需编译 Android 工程;同时只读清点既有 APK,仅作参考信息(Android 运行时对照能力已移除)。
131
+ - `report init`:从 facts 初始化报告 `1.2.0`;存量 `1.1.0` 报告原地升级但不会伪造来源。
132
+ - `report update/validate`:为 implemented/verified 条目强制记录 Android `sourceProvenance`,校验受管成员、文件 hash、可用 Task closure 和 HarmonyOS 路径;项目内事件文件不被当作可信 D1 来源,缺少运行器集成时返回 `unavailable`,D2 抽样只产生 warning。当前不拦截宿主普通文件写入,最高默认证据级别为 `declared-hash-validated`。
133
+ - `report`:校验后生成 `.migration/report/report.html`。HTML 主体面向用户展示迁移结论、未完成内容、下一步、端到端测试、差异和阻塞;页面/控件/导航、内部 ref 与文件映射仅作为默认折叠的技术追溯附录。
134
+ - `task plan/validate`:确定性生成并校验 `.migration/tasks/`;计划基线绑定 Facts、correction/review 和 Android 指纹,并按可观察行为而不是单个 Entry/Issue 聚合责任。
135
+ - `task status/next/show`:只读推导 Task 运行态、选择 Ready Frontier,并按需分页返回源码上下文;不写新的状态机文件。
136
+ - `build harmony`:直接读取 DevEco JSON5 配置生成应用构建命令;Hvigor 增量命中时可复用不早于当前构建输入的非空 HAP,过期产物会失败;`config.json` 不保存 HarmonyOS 构建命令。
137
+ - `test harmony`:确定性构建应用 HAP 并运行 Hypium。迁移流程统一使用 `--runner python --hypium-project <path> --test-list <name>...` 执行 `d2h-hypium-forge` 生成的 `.hypium_forge/` Python 用例(定向执行、无 `--all`,需 `python -m pip install hypium -U`);`--class/--case/--all` 的 ArkTS ohosTest runner 仅用于存量资产。多设备时必须传 `--target`,测试失败、忽略、零执行或缺少结果摘要都会失败。用重复的 `--ref` 声明本次测试实际覆盖的报告项,未覆盖的 `verified` 项不能通过 `complete`。
138
+
139
+ ## 核心产物
140
+
141
+ 迁移产物统一存放在安卓工程父目录下的独立工作区 `<AndroidProject>-migration/` 中,不再写入安卓工程内部。CLI 在创建 `.migration/` 前会自动在工作区根目录生成 `.gitignore`(内容 `.migration/`),防止迁移产物被上层 Git 仓库提交到远端:
142
+
143
+ ```text
144
+ AndroidProject/.migration/
145
+ ├── preflight-report.json
146
+ ├── spec/
147
+ │ ├── index.json
148
+ │ ├── facts/
149
+ │ └── spec.html
150
+ ├── report/
151
+ │ ├── index.json
152
+ │ ├── pages/
153
+ │ ├── interactions/
154
+ │ ├── discoveries.json
155
+ │ ├── summary.json # AI填写的用户总结
156
+ │ ├── final-acceptance.json
157
+ │ ├── validation.json
158
+ │ └── report.html # 脚本生成的用户报告
159
+ ├── tasks/
160
+ │ ├── graph.json # droid2hmos 生成的派生 Task DAG
161
+ │ ├── index.json
162
+ │ ├── briefs/*.md
163
+ │ └── acceptance/*.json
164
+ ├── evidence/
165
+ │ ├── index.json # 最近一次受管动作证据索引
166
+ │ ├── blobs/<sha256>/ # 完成门禁校验的内容寻址证据产物
167
+ │ └── managed/*.json # 与 facts/源码指纹绑定的 CLI 收据
168
+ ├── audit/
169
+ │ ├── source-events.jsonl # 可选可信有序事件输入
170
+ │ ├── android-source-manifest.json # 受管 Android 成员与 hash
171
+ │ ├── checkpoint-provenance.json # 随受管 checkpoint 强制进入 Git commit
172
+ │ ├── source-order-audit.json
173
+ │ └── literal-drift-audit.json
174
+ └── experience/lessons.md
175
+ ```
176
+
177
+ AppGraph 保持独立仓库。Preflight 安装器始终解析 `Harmony-Ai-Tool/appgraph` 的 `main` 当前提交,按精确 SHA 隔离缓存到 `~/.android-to-hmos/tools/`;远端不可达时 Preflight 失败。
178
+
179
+ ## CLI 与校验
180
+
181
+ ```text
182
+ droid2hmos --version
183
+ droid2hmos --help
184
+ ```
185
+
186
+ 本仓库不再内置 CLI Implementation,也没有 Node.js 构建入口。Task Planning 的策略、Agent 流程和 JSON 契约维护在本仓库;Facts Adapter、闭包/所有权/DAG 编译、计划落盘和所有确定性命令由独立 `droid2hmos` 包实现。生成的计划位于被迁移 Android 工程的 `.migration/tasks/`,不写回任一工具仓库。
187
+
188
+ Migration Kernel 在独立 CLI 中实现 `inspect → guard → execute → record`:阶段只是解释性快照,AI 仍自主决定批次和实现方式;命令前置条件、失败重试分类、证据新鲜度和最终完成条件由确定性代码检查。正常流程不依赖 AI 猜测“已经到达哪个节点”,也不要求写入 `.migration/state.json`。
189
+
190
+ 报告通过只证明已知 facts 有记录,不证明迁移成功。最终标准始终是:HarmonyOS 应用中的所有页面、控件、导航、Dialog 和业务功能与 Android 的外部可观察行为一致,并通过真实设备端到端验证。
191
+
192
+ Windows 下所有 Gradle/Hvigor 测试与构建均由 Preflight 的有限命令运行器执行:禁用 Daemon、禁止输出管道、日志直接落盘并设置超时,避免构建成功后 OpenCode 因继承的输出句柄永久卡死。
193
+
194
+ ## AppGraph 静态 UTG
195
+
196
+ AppGraph 与 droid2hmos 的包、精确版本和命令能力只在 `skills/managing-d2h-toolchain/toolchain.json` 中声明。其他 Agent/Skill 直接使用已检查的 CLI,不再维护依赖块;`npm run check` 验证清单与环境约束一致。D2H 安装器与 `managing-d2h-toolchain/scripts/manage-toolchain.mjs` 均使用这份清单;Skill 脚本可在没有 D2H 命令时独立执行。
197
+
198
+ 主流程加载 `d2h-utg-static-generate` 完成 Android 静态分析,由 Skill 内部调用 `droid2hmos analyze android` 生成受管 Facts,再复用本次 AppGraph 构建基础 UTG、完成 AI 源码核验与独立修补,统一重建并输出离线 `utg.html`。主流程不另行调用分析 CLI,图生成不重复执行 AppGraph 分析。生成后的原始图和 facts 保持只读,不操作设备。
199
+
200
+ 主流程操作步骤见 [Skill 的迁移主流程入口](skills/d2h-utg-static-generate/SKILL.md)。独立生成 UTG 可运行:
201
+
202
+ ```bash
203
+ python skills/d2h-utg-static-generate/scripts/generate.py --project-root <Android源码> --workspace <迁移现场>/.migration/utg
204
+ ```
205
+
206
+ 可用 `--appgraph <app-graph.json>` 消费现有图。Agent 阅读 `review-worklist.json`、核对源码后填写 `discoveries.json`,用相同命令加 `--force` 重建;源码和输入图变化会拒绝旧修补。完整契约见 [新 Skill](skills/d2h-utg-static-generate/SKILL.md)。静态到达性不是运行时确认;缺少到达规则或执行选择器的页面不安排采集。设备采集通过现有 AI Skill 的已有 `page.json` 入口执行。
207
+
208
+ 验证:
209
+
210
+ ```bash
211
+ python -X utf8 -m unittest discover -s skills/d2h-utg-static-generate/tests -v
212
+ python -X utf8 -m unittest discover -s skills/d2h-utg-ai-generate/tests -v
213
213
  ```