android2harmony 0.1.6 → 0.1.8
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/agents/api-analyzer.md +113 -0
- package/agents/app-action.md +122 -0
- package/agents/code-reviewer.md +191 -295
- package/agents/coder.md +377 -0
- package/agents/self-tester.md +8 -8
- package/agents/spec-designer.md +56 -0
- package/package.json +1 -1
- package/skills/a2h-app-req-gen/SKILL.md +174 -0
- package/skills/a2h-app-req-gen/references/spec-handoff.md +99 -0
- package/skills/a2h-app-req-gen/references/subagent-render.md +115 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/analyzer-jvm/build.gradle.kts +41 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/analyzer-jvm/gradle/wrapper/gradle-wrapper.jar +0 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/analyzer-jvm/gradle/wrapper/gradle-wrapper.properties +8 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/analyzer-jvm/gradle.properties +3 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/analyzer-jvm/gradlew +251 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/analyzer-jvm/gradlew.bat +94 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/analyzer-jvm/settings.gradle.kts +17 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/analyzer-jvm/src/main/java/dev/reqgen/analyzer/jvm/RawAnalysisDetector.java +1911 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/analyzer-jvm/src/main/java/dev/reqgen/analyzer/jvm/RawIssueRegistry.java +37 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/analyzer-jvm/src/main/java/dev/reqgen/analyzer/jvm/RawJson.java +146 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/analyzer-jvm/src/main/java/dev/reqgen/analyzer/jvm/RawLocation.java +96 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/analyzer-jvm/src/main/java/dev/reqgen/analyzer/jvm/RawRecordWriter.java +227 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/analyzer-jvm/src/main/resources/META-INF/services/com.android.tools.lint.client.api.IssueRegistry +1 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/analyzer-jvm/src/main/resources/dev/reqgen/analyzer/jvm/raw-record-v1.schema.json +93 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/assets/dashboard.html +151 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/gradle/reqgen-lint.init.gradle +60 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/gradle/reqgen-model.init.gradle +204 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/package.json +14 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/agent-render/backend.js +323 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/agent-render/cli.js +811 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/agent-render/gap-audit-link.js +62 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/agent-render/index.js +66 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/agent-render/merge.js +605 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/agent-render/name-trace.js +153 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/agent-render/orchestrate.js +1324 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/agent-render/output-parse.js +50 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/agent-render/overview.js +10 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/agent-render/pool.js +23 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/agent-render/post-merge-fix.js +146 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/agent-render/prompt-loader.js +51 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/agent-render/prompt.js +967 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/agent-render/prompts.md +301 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/agent-render/serve.js +78 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/agent-render/short-id.js +46 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/agent-render/snapshot.js +267 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/agent-render/types.js +1 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/agent-render/validate.js +122 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/analysis/callback-call-sites.js +62 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/analysis/gap-audit/build.js +1291 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/analysis/gap-audit/index.js +1 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/analysis/graph/area-ownership.js +392 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/analysis/graph/build.js +1995 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/analysis/graph/callback-flow.js +277 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/analysis/graph/component-variants.js +725 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/analysis/graph/index.js +15 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/analysis/names/index.js +12 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/analysis/names/policy.js +469 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/analysis/names/traceability.js +468 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/analysis/req-model/build.js +1066 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/analysis/req-model/index.js +1 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/analysis/source-facts/android-interaction-registry.js +174 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/analysis/source-facts/android.js +1062 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/analysis/source-facts/area-titles.js +678 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/analysis/source-facts/builder.js +350 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/analysis/source-facts/compose-api-registry.js +395 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/analysis/source-facts/compose-call-sites.js +2008 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/analysis/source-facts/compose.js +9059 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/analysis/source-facts/dynamic-repeated-call-sites.js +529 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/analysis/source-facts/index.js +1 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/analysis/source-facts/interaction-effects.js +1149 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/analysis/source-facts/jvm.js +6272 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/analysis/source-facts/normalize.js +33 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/analysis/source-facts/pending-intents.js +565 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/analysis/source-facts/resource-id.js +42 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/analysis/source-facts/route-state-variants.js +781 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/analysis/source-facts/state.js +234 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/analysis/source-facts/types.js +1 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/android/extract.js +40 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/android/index.js +6 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/android/manifest.js +513 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/android/resources.js +398 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/android/types.js +1 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/android/views.js +447 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/android/xml-parser.js +175 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/cli.js +398 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/contracts/area-graph.js +1 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/contracts/artifact.js +1 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/contracts/common.js +16 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/contracts/diagnostic.js +10 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/contracts/gap-audit.js +14 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/contracts/index.js +11 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/contracts/name-traceability.js +26 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/contracts/raw-fact.js +40 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/contracts/req-model.js +1 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/contracts/run.js +19 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/contracts/semantic-completeness.js +11 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/contracts/source-facts.js +1 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/core/output-guard.js +41 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/core/stable-id.js +92 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/dashboard-cli.js +169 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/diagnostics.js +104 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/dump/dump.js +1028 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/dump/index.js +1 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/dump-cli.js +251 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/generation/artifacts.js +49 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/generation/index.js +18 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/generation/quality-report.js +125 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/generation/render.js +353 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/generation/types.js +2 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/graph/paths.js +474 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/jvm/index.js +15 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/jvm/protocol.js +408 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/jvm/runner.js +452 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/pipeline/index.js +8 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/pipeline/output.js +165 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/pipeline/run-stage1.js +891 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/project/discovery.js +299 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/project/gradle-model.js +358 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/project/gradle-runner.js +165 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/project/resource-profile.js +60 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/project/types.js +1 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/spec-handoff-cli.js +151 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/spec-handoff.js +1004 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/stage2-cli.js +109 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/stage2-input.js +419 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/stage2-name-trace-input.js +95 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/validation/area-graph.js +444 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/validation/index.js +7 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/validation/req-model.js +580 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/validation/req-text.js +195 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/validation/semantic-area-graph.js +1431 -0
- package/skills/a2h-app-req-gen/scripts/reqgen/src/validation/types.js +1 -0
- package/skills/a2h-app-req-gen/scripts/reqgen-audit.mjs +298 -0
- package/skills/a2h-app-req-gen/scripts/reqgen-selfcheck.mjs +555 -0
- package/skills/a2h-code-review/SKILL.md +379 -0
- package/skills/{hmos-integration-test → a2h-integration-test}/README.md +6 -6
- package/skills/{hmos-integration-test → a2h-integration-test}/SKILL.md +6 -6
- package/skills/{hmos-integration-test → a2h-integration-test}/scripts/report-tool.mjs +1 -1
- package/skills/a2h-spec-design/SKILL.md +330 -0
- package/skills/a2h-spec-design/scripts/inspect_spec_design_inputs.mjs +207 -0
- package/skills/a2h-spec-design/scripts/move_spec_technical_reference.mjs +198 -0
- package/skills/a2h-spec-design/scripts/validate_spec_design_output.mjs +256 -0
- package/skills/a2h-spec-generate/SKILL.md +696 -0
- package/skills/a2h-spec-generate/references/trace-template.md +115 -0
- package/skills/a2h-spec-generate/scripts/parse_requirements.mjs +537 -0
- package/skills/a2h-spec-generate/template/REQ.txt +22 -0
- package/skills/a2h-spec-generate/template/REQ.xlsx +0 -0
- package/skills/a2h-spec-implement/SKILL.md +548 -0
- package/skills/a2h-spec-implement/references/harmony-pitfalls.md +186 -0
- package/skills/a2h-spec-implement/references/l1-unit-test.md +185 -0
- package/skills/a2h-spec-implement/references/l3-e2e-uitest.md +167 -0
- package/skills/a2h-spec-implement/references/test-core.md +132 -0
- package/skills/a2h-spec-implement/rules/arkts/arkts-standards.md +184 -0
- package/skills/a2h-spec-implement/rules/arkts/conventions/coding-style.md +96 -0
- package/skills/a2h-spec-implement/rules/arkts/conventions/security.md +126 -0
- package/skills/a2h-spec-implement/rules/arkts/language/arkts-rules.md +650 -0
- package/skills/a2h-spec-implement/rules/arkts/language/arkui-structure-rules.md +173 -0
- package/skills/a2h-spec-implement/rules/arkts/language/ts-to-arkts-rewrites.md +58 -0
- package/skills/a2h-spec-implement/rules/arkts/official/mvvm-v1/@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
- package/skills/a2h-spec-implement/rules/arkts/official/mvvm-v1/@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
- package/skills/a2h-spec-implement/rules/arkts/official/mvvm-v1/@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
- package/skills/a2h-spec-implement/rules/arkts/official/mvvm-v1/@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
- package/skills/a2h-spec-implement/rules/arkts/official/mvvm-v1/@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
- package/skills/a2h-spec-implement/rules/arkts/official/mvvm-v1/@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
- package/skills/a2h-spec-implement/rules/arkts/official/mvvm-v1/@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
- package/skills/a2h-spec-implement/rules/arkts/official/mvvm-v1/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
- package/skills/a2h-spec-implement/rules/arkts/official/mvvm-v1/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
- package/skills/a2h-spec-implement/rules/arkts/official/mvvm-v1/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
- package/skills/a2h-spec-implement/rules/arkts/official/mvvm-v1/MVVM/346/250/241/345/274/217/357/274/210V1/357/274/211.md +911 -0
- package/skills/a2h-spec-implement/rules/arkts/official/mvvm-v1/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
- package/skills/a2h-spec-implement/rules/arkts/official/mvvm-v1//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
- package/skills/a2h-spec-implement/rules/arkts/official/mvvm-v2/!!/350/257/255/346/263/225/357/274/232/345/217/214/345/220/221/347/273/221/345/256/232.md +216 -0
- package/skills/a2h-spec-implement/rules/arkts/official/mvvm-v2/@Computed/350/243/205/351/245/260/345/231/250/357/274/232/350/256/241/347/256/227/345/261/236/346/200/247.md +442 -0
- package/skills/a2h-spec-implement/rules/arkts/official/mvvm-v2/@Event/350/243/205/351/245/260/345/231/250/357/274/232/350/247/204/350/214/203/347/273/204/344/273/266/350/276/223/345/207/272.md +169 -0
- package/skills/a2h-spec-implement/rules/arkts/official/mvvm-v2/@Local/350/243/205/351/245/260/345/231/250/357/274/232/347/273/204/344/273/266/345/206/205/351/203/250/347/212/266/346/200/201.md +763 -0
- package/skills/a2h-spec-implement/rules/arkts/official/mvvm-v2/@Monitor/350/243/205/351/245/260/345/231/250/357/274/232/347/212/266/346/200/201/345/217/230/351/207/217/344/277/256/346/224/271/345/274/202/346/255/245/347/233/221/345/220/254.md +2088 -0
- package/skills/a2h-spec-implement/rules/arkts/official/mvvm-v2/@ObservedV2/350/243/205/351/245/260/345/231/250/345/222/214@Trace/350/243/205/351/245/260/345/231/250/357/274/232/347/261/273/345/261/236/346/200/247/345/217/230/345/214/226/350/247/202/346/265/213.md +1258 -0
- package/skills/a2h-spec-implement/rules/arkts/official/mvvm-v2/@Once/357/274/232/345/210/235/345/247/213/345/214/226/345/220/214/346/255/245/344/270/200/346/254/241.md +175 -0
- package/skills/a2h-spec-implement/rules/arkts/official/mvvm-v2/@Param/357/274/232/347/273/204/344/273/266/345/244/226/351/203/250/350/276/223/345/205/245.md +850 -0
- package/skills/a2h-spec-implement/rules/arkts/official/mvvm-v2/@Provider/350/243/205/351/245/260/345/231/250/345/222/214@Consumer/350/243/205/351/245/260/345/231/250/357/274/232/350/267/250/347/273/204/344/273/266/345/261/202/347/272/247/345/217/214/345/220/221/345/220/214/346/255/245.md +862 -0
- package/skills/a2h-spec-implement/rules/arkts/official/mvvm-v2/@Type/350/243/205/351/245/260/345/231/250/357/274/232/346/240/207/350/256/260/347/261/273/345/261/236/346/200/247/347/232/204/347/261/273/345/236/213.md +110 -0
- package/skills/a2h-spec-implement/rules/arkts/official/mvvm-v2/AppStorageV2/357/274/232/345/272/224/347/224/250/345/205/250/345/261/200UI/347/212/266/346/200/201/345/255/230/345/202/250.md +301 -0
- package/skills/a2h-spec-implement/rules/arkts/official/mvvm-v2/MVVM/346/250/241/345/274/217/357/274/210V2/357/274/211.md +1411 -0
- package/skills/a2h-spec-implement/rules/arkts/official/mvvm-v2/PersistenceV2/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 +1392 -0
- package/skills/a2h-spec-implement/rules/arkts/official/mvvm-v2/getTarget/346/216/245/345/217/243/357/274/232/350/216/267/345/217/226/347/212/266/346/200/201/347/256/241/347/220/206/346/241/206/346/236/266/344/273/243/347/220/206/345/211/215/347/232/204/345/216/237/345/247/213/345/257/271/350/261/241.md +288 -0
- package/skills/a2h-spec-implement/rules/arkts/official/mvvm-v2/makeObserved/346/216/245/345/217/243/357/274/232/345/260/206/351/235/236/350/247/202/345/257/237/346/225/260/346/215/256/345/217/230/344/270/272/345/217/257/350/247/202/345/257/237/346/225/260/346/215/256.md +768 -0
- package/skills/a2h-spec-implement/rules/arkts/official/mvvm-v2//347/212/266/346/200/201/347/256/241/347/220/206V1/345/222/214V2/346/267/267/347/224/250/346/214/207/345/257/274/357/274/210API version 19/345/217/212/344/271/213/345/220/216/357/274/211.md" +829 -0
- package/skills/a2h-spec-implement/rules/arkts/official/mvvm-v2//347/212/266/346/200/201/347/256/241/347/220/206/346/246/202/350/277/260.md +184 -0
- package/skills/a2h-spec-implement/rules/arkts/ui/component-cookbook.md +431 -0
- package/skills/a2h-spec-implement/rules/arkts/ui/state-management.md +152 -0
- package/skills/a2h-spec-implement/rules/arkts/ui/ui-quality.md +67 -0
- package/skills/a2h-spec-implement/rules/arkts/ui/ui-runtime-diagnosis.md +32 -0
- package/skills/a2h-spec-implement/rules/pipeline/build/package-set-collection.md +43 -0
- package/skills/a2h-spec-implement/scripts/_lib/common.mjs +97 -0
- package/skills/a2h-spec-implement/scripts/_lib/config.mjs +70 -0
- package/skills/a2h-spec-implement/scripts/_lib/lessons_cli.mjs +48 -0
- package/skills/a2h-spec-implement/scripts/build_lessons.mjs +24 -0
- package/skills/a2h-spec-implement/scripts/code_pattern_lessons.mjs +26 -0
- package/skills/a2h-spec-implement/scripts/device_ui.mjs +433 -0
- package/skills/a2h-spec-implement/scripts/device_ui_core.mjs +895 -0
- package/skills/a2h-spec-implement/scripts/ledger/aggregate_run.mjs +207 -0
- package/skills/a2h-spec-implement/scripts/manifest/emit_summary_line.mjs +37 -0
- package/skills/a2h-spec-implement/scripts/manifest/finalize_run.mjs +115 -0
- package/skills/a2h-spec-implement/scripts/manifest/render_final_summary.mjs +78 -0
- package/skills/a2h-spec-implement/scripts/manifest/root_mirror.mjs +137 -0
- package/skills/a2h-spec-implement/scripts/package.json +12 -0
- package/skills/a2h-spec-implement/scripts/state_propagation_check.mjs +676 -0
- package/skills/a2h-spec-implement/scripts/test/l2_run.mjs +244 -0
- package/skills/a2h-spec-implement/scripts/test/tp_coverage.mjs +231 -0
- package/skills/a2h-spec-implement/scripts/ui_memory.mjs +161 -0
- package/skills/a2h-spec-implement/scripts/utils/ensure_app.mjs +134 -0
- package/skills/a2h-ui-transfer/SKILL.md +20 -9
- package/skills/a2h-ui-transfer/scripts/arkts_static_check.js +80 -0
- package/skills/hmos-convert-pipeline/SKILL.md +7 -5
- package/skills/hmos-incremental-ui-align/README.md +7 -7
- package/skills/hmos-incremental-ui-align/SKILL.md +1 -1
- package/skills/hmos-incremental-ui-align/page_align.md +1 -1
- package/skills/hmos-spec-generate/SKILL.md +2 -2
- package/skills/hmos-spec-generate/scripts/parse_requirements.mjs +537 -0
- package/skills/hmos-fix-build-errors/SKILL.md +0 -266
- package/skills/hmos-fix-build-errors/references/arkts-strict-patterns.md +0 -219
- package/skills/hmos-fix-build-errors/references/known-patterns.md +0 -157
- package/skills/hmos-fix-build-errors/references/rdb-entity-pattern.md +0 -131
- package/skills/hmos-spec-generate/scripts/parse_requirements.ts +0 -515
- /package/skills/{hmos-integration-test → a2h-integration-test}/scripts/resolve-metadata-tool.mjs +0 -0
- /package/skills/{hmos-integration-test → a2h-integration-test}/scripts/self-test-runner.mjs +0 -0
- /package/skills/{hmos-integration-test → a2h-integration-test}/scripts/testcases-tool.mjs +0 -0
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
# ArkUI Structure Rules
|
|
2
|
+
|
|
3
|
+
Structural constraints on `struct` / `@Component` / `build()` that the ArkUI compiler enforces. These have **no `arkts-*` rule tag** — type-level checks do not catch them and they only surface at build time, so getting them right up front saves a full build round-trip.
|
|
4
|
+
|
|
5
|
+
Each section is keyed to the exact compiler error message it prevents.
|
|
6
|
+
|
|
7
|
+
## 1. `build()` has exactly one root node
|
|
8
|
+
|
|
9
|
+
> Error: `In an '@Entry' decorated component, the 'build' method can have only one root node, which must be a container component.`
|
|
10
|
+
> Error: `In an '@Component' decorated component, the 'build' method can have only one root node.`
|
|
11
|
+
|
|
12
|
+
```ets
|
|
13
|
+
// ❌ two sibling roots
|
|
14
|
+
build() {
|
|
15
|
+
Text('Title')
|
|
16
|
+
Column() { ... }
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
// ✅ one root container wrapping everything
|
|
20
|
+
build() {
|
|
21
|
+
Column() {
|
|
22
|
+
Text('Title')
|
|
23
|
+
...
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
Rules:
|
|
29
|
+
|
|
30
|
+
- `build()` contains exactly ONE top-level component.
|
|
31
|
+
- For `@Entry` pages the root must be a **container** (`Column`, `Row`, `Stack`, `Flex`, `RelativeContainer`, ...), not a leaf like `Text`.
|
|
32
|
+
- `if/else` at the root counts as multiple possible roots for `@Entry` — wrap it in a container.
|
|
33
|
+
- The same single-root rule applies to each branch of conditional rendering inside `@Builder` functions used as page content.
|
|
34
|
+
|
|
35
|
+
## 2. Only UI component syntax inside `build()` / `@Builder`
|
|
36
|
+
|
|
37
|
+
> Error: `Only UI component syntax can be written here.` (code `10905209`)
|
|
38
|
+
> Error: `Assignment does not meet UI component syntax.` (code `10905204`)
|
|
39
|
+
> Error: `UI component 'Column' cannot be used in this place.`
|
|
40
|
+
|
|
41
|
+
Inside `build()` and `@Builder` bodies, the ONLY allowed constructs are:
|
|
42
|
+
|
|
43
|
+
- Component calls with their trailing blocks and chained modifiers
|
|
44
|
+
- `if / else if / else`
|
|
45
|
+
- `ForEach` / `LazyForEach` / `Repeat`
|
|
46
|
+
|
|
47
|
+
Everything else is illegal there: `let`/`const` declarations, assignments, `console.log`, `for`/`while` loops, `try/catch`, early `return`, function calls as statements.
|
|
48
|
+
|
|
49
|
+
```ets
|
|
50
|
+
// ❌ statements inside build
|
|
51
|
+
build() {
|
|
52
|
+
Column() {
|
|
53
|
+
let label = this.count + '' // illegal
|
|
54
|
+
console.log('render') // illegal
|
|
55
|
+
Text(label)
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// ✅ compute in methods/getters, render in build
|
|
60
|
+
get label(): string {
|
|
61
|
+
return `${this.count}`
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
build() {
|
|
65
|
+
Column() {
|
|
66
|
+
Text(this.label)
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
Rules:
|
|
72
|
+
|
|
73
|
+
- Precompute values in class methods, getters, or state; `build()` only renders.
|
|
74
|
+
- Conversely, UI component calls (`Column() {...}`, `Text(...)` as UI) may ONLY appear inside `build()` / `@Builder` bodies — never in ordinary methods, event handlers, or at top level. To return UI from a function, decorate it with `@Builder`.
|
|
75
|
+
- Loops other than `ForEach` cannot emit UI. Convert `for` loops to a data array + `ForEach`.
|
|
76
|
+
|
|
77
|
+
## 3. Struct member area: declarations and methods only
|
|
78
|
+
|
|
79
|
+
> Error: `'HomeTab({ ... })' does not meet UI component syntax.`
|
|
80
|
+
> Error: `Declaration or statement expected.` / cascading `';' expected.`
|
|
81
|
+
|
|
82
|
+
The struct body outside `build()` holds ONLY: decorated/plain field declarations, methods, `@Builder`/`@Styles` methods, and lifecycle callbacks (`aboutToAppear` etc.).
|
|
83
|
+
|
|
84
|
+
A single malformed edit in the member area (an unclosed brace, a statement, a misplaced component call) cascades: every following `@State` line then reports `does not meet UI component syntax` or parser errors. **When these errors appear in a block, fix the FIRST one — the rest are usually fallout.**
|
|
85
|
+
|
|
86
|
+
```ets
|
|
87
|
+
// ❌ component call in the member area
|
|
88
|
+
@Component
|
|
89
|
+
struct Index {
|
|
90
|
+
@State medications: MedicationInfo[] = []
|
|
91
|
+
HomeTab({ medications: $medications }) // illegal here — must be inside build()
|
|
92
|
+
|
|
93
|
+
build() { ... }
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
// ✅
|
|
97
|
+
@Component
|
|
98
|
+
struct Index {
|
|
99
|
+
@State medications: MedicationInfo[] = []
|
|
100
|
+
|
|
101
|
+
build() {
|
|
102
|
+
Column() {
|
|
103
|
+
HomeTab({ medications: $medications })
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
## 4. Custom component instantiation and `@Link` passing
|
|
110
|
+
|
|
111
|
+
> Error: `'CompName({ ... })' does not meet UI component syntax.`
|
|
112
|
+
> Error: `The '@Link' property 'x' cannot be initialized here (forbidden to specify default value for @Link).`
|
|
113
|
+
|
|
114
|
+
```ets
|
|
115
|
+
// Child (V1)
|
|
116
|
+
@Component
|
|
117
|
+
struct HomeTab {
|
|
118
|
+
@Link medications: MedicationInfo[] // no initializer on @Link
|
|
119
|
+
@Prop title: string = '' // @Prop may have a local default
|
|
120
|
+
|
|
121
|
+
build() { ... }
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
// Parent build()
|
|
125
|
+
HomeTab({ medications: $medications, title: this.title })
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
Rules:
|
|
129
|
+
|
|
130
|
+
- Instantiate custom components only inside `build()`/`@Builder`, as `CompName({ ... })` with named arguments.
|
|
131
|
+
- V1 `@Link` fields: parent passes `$varName` (two-way binding); the child must NOT give `@Link` an initializer.
|
|
132
|
+
- `@Prop` receives plain values (`this.x`); `@BuilderParam` receives a `@Builder` function reference.
|
|
133
|
+
- Do not pass fields the child does not declare; argument names must match child member names exactly.
|
|
134
|
+
|
|
135
|
+
## 5. One decorator family per component (V1 xor V2)
|
|
136
|
+
|
|
137
|
+
> Error: `The '@State' decorator can only be used in a 'struct' decorated with '@Component'.` (and mirror-image V2 errors)
|
|
138
|
+
|
|
139
|
+
- Never mix families inside one struct: `@ComponentV2` + `@State` is a build error; so is `@Component` + `@Local`.
|
|
140
|
+
- This section pins only the **build error**; which family to use and the full V1↔V2 decorator correspondences are `../ui/state-management.md`'s.
|
|
141
|
+
- State decorators go on struct member declarations only — never on top-level variables, local variables, or plain class fields (use `@Observed`/`@Trace` for classes).
|
|
142
|
+
|
|
143
|
+
## 6. `@Builder` / `@Styles` / `@Extend` placement
|
|
144
|
+
|
|
145
|
+
- `@Builder` methods: inside a struct (access `this`) or global. Called from `build()` either directly (`this.myBuilder()`) or passed to `@BuilderParam` / `.tabBar(...)` etc.
|
|
146
|
+
- Component syntax does NOT parse inside ordinary closures. Factoring a repeated form section as a regular method taking a content callback fails at parse time:
|
|
147
|
+
|
|
148
|
+
```ets
|
|
149
|
+
// ❌ content is a plain () => void — Row(){...} inside it is a syntax-error cascade
|
|
150
|
+
// (';' expected / Declaration or statement expected / Cannot find name 'width')
|
|
151
|
+
buildSection(title: string, content: () => void) { ... }
|
|
152
|
+
this.buildSection('Reminder time', () => { Row() { TextInput() } })
|
|
153
|
+
|
|
154
|
+
// ✅ each section is a @Builder method; shared chrome via another @Builder or a child
|
|
155
|
+
// component with @BuilderParam
|
|
156
|
+
@Builder timeSection() { Row() { TextInput() } }
|
|
157
|
+
// child component receiving layout:
|
|
158
|
+
@Component struct FormSection {
|
|
159
|
+
title: string = '';
|
|
160
|
+
@BuilderParam content: () => void; // receives a @Builder reference
|
|
161
|
+
build() { Column() { Text(this.title); this.content() } }
|
|
162
|
+
}
|
|
163
|
+
// parent build(): FormSection({ title: 'Reminder time', content: this.timeSection })
|
|
164
|
+
```
|
|
165
|
+
- `@Styles` can only contain universal attribute settings; component-specific modifiers (e.g. `.fontSize`) belong in `@Extend(Text)`.
|
|
166
|
+
- `@Extend` is global-only (outside the struct).
|
|
167
|
+
- Pass builder functions by reference (`this.myBuilder`) where a builder param is expected — do not invoke with `()` when passing.
|
|
168
|
+
|
|
169
|
+
## 7. Page-level requirements
|
|
170
|
+
|
|
171
|
+
- Exactly one `@Entry` struct per page `.ets` file; the file must be registered in `main_pages.json` (or routed via Navigation) to be reachable.
|
|
172
|
+
- `@Entry` struct name and file naming should follow the project's existing pages.
|
|
173
|
+
- Lifecycle methods (`aboutToAppear`, `onPageShow`, ...) are ordinary methods in the member area — they may contain arbitrary statements (rules in § 2 apply only to `build()`/`@Builder`).
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# TypeScript → ArkTS Rewrite Table
|
|
2
|
+
|
|
3
|
+
Use this when porting plain TypeScript into ArkTS or diagnosing "runs in TS, errors in ArkTS" issues. For rule-tag details, see `arkts-rules.md`.
|
|
4
|
+
|
|
5
|
+
## First, remember: many TS constructs need NO change in ArkTS
|
|
6
|
+
|
|
7
|
+
Template literals, `value as T`, `Record<K,V>` with indexed access, arrow functions, async/await — all legal. Do **not** rewrite them. Full whitelist: [`arkts-rules.md` § Explicitly allowed constructs](arkts-rules.md#explicitly-allowed-constructs).
|
|
8
|
+
|
|
9
|
+
## Quick rewrite table
|
|
10
|
+
|
|
11
|
+
The Rule tag column matches linter error messages one-to-one — search the tag in `arkts-rules.md` for details and examples.
|
|
12
|
+
|
|
13
|
+
| TypeScript construct | ArkTS rewrite | Rule tag |
|
|
14
|
+
|---------------------|---------------|----------|
|
|
15
|
+
| `var x = 1` | `let x = 1` / `const x = 1` | `arkts-no-var` |
|
|
16
|
+
| `let x: any` / `unknown` | Explicit type; when undetermined use `Object` or a union type | `arkts-no-any-unknown` |
|
|
17
|
+
| `const { a, b } = obj` | `const a = obj.a; const b = obj.b` | `arkts-no-destruct-decls` |
|
|
18
|
+
| `function f({ a }: P)` | `function f(p: P)` then use `p.a` | `arkts-no-destruct-params` |
|
|
19
|
+
| `[x, y] = [y, x]` | Introduce a temp variable, assign one by one | `arkts-no-destruct-assignment` |
|
|
20
|
+
| `const fn = function() {}` | `const fn = () => {}` | `arkts-no-func-expressions` |
|
|
21
|
+
| `const id = <T>(v: T): T => v` | `function id<T>(v: T): T { return v }` | `arkts-no-generic-lambdas` |
|
|
22
|
+
| `function inner() {}` inside a function body | `const inner = (): void => {}` or promote to a class method | `arkts-no-nested-funcs` |
|
|
23
|
+
| `<string>value` | `value as string` | `arkts-as-casts` |
|
|
24
|
+
| `obj as const` | Declare the constant type explicitly | `arkts-no-as-const` |
|
|
25
|
+
| `type T = { x: number }` | `interface T { x: number }` | `arkts-no-obj-literals-as-types` |
|
|
26
|
+
| `f(p: { x: number })` | Define a named interface as the parameter type | `arkts-no-obj-literals-as-types` |
|
|
27
|
+
| `interface I { [key: string]: T }` | `Record<string, T>` | `arkts-no-indexed-signatures` |
|
|
28
|
+
| `type C = A & B` | `interface C extends A, B {}` | `arkts-no-intersection-types` |
|
|
29
|
+
| `type N = T['prop']` | Use the target type directly | `arkts-no-aliases-by-index` |
|
|
30
|
+
| `obj['key']` (non-Record) | `obj.key`; for dynamic keys declare the type as `Record` | `arkts-no-props-by-index` |
|
|
31
|
+
| `const o = { a: 1 }` (untyped) | `const o: MyIface = { a: 1 }` or `Record` | `arkts-no-untyped-obj-literals` |
|
|
32
|
+
| `Pick` / `Omit` / `ReturnType` etc. | Hand-write a named interface | `arkts-no-utility-types` |
|
|
33
|
+
| `delete obj.x` | Add `\| undefined` to the field type, set `obj.x = undefined` | `arkts-no-delete` |
|
|
34
|
+
| `'key' in obj` | `obj.key !== undefined` or `instanceof` | `arkts-no-in` |
|
|
35
|
+
| `for (const k in obj)` | `for...of` / `Map` / a known key list | `arkts-no-for-in` |
|
|
36
|
+
| `v is Cat` (type guard) | `instanceof` check + `as` narrowing | `arkts-no-is` |
|
|
37
|
+
| `{ ...obj1, ...obj2 }` | Construct a new object, assign fields explicitly | `arkts-no-spread` |
|
|
38
|
+
| `throw 'msg'` | `throw new Error('msg')` | `arkts-limited-throw` |
|
|
39
|
+
| `catch (e: Error)` | `catch (e)` then `const err = e as Error` | `arkts-no-types-in-catch` |
|
|
40
|
+
| `class C { constructor(public x: number) {} }` | Declare fields in the class body, assign in the constructor | `arkts-no-ctor-prop-decls` |
|
|
41
|
+
| `#privateField` | `private privateField` | `arkts-no-private-identifiers` |
|
|
42
|
+
| `class D implements Base` (Base is a class) | `extends Base`, or extract an interface | `arkts-implements-only-iface` |
|
|
43
|
+
| `function* gen() { yield }` | Return an array/iterator class, or refactor to a plain function | `arkts-no-generators` |
|
|
44
|
+
| `fn.bind(this)` | Arrow function capturing this | `arkts-no-func-bind` |
|
|
45
|
+
| `/pattern/g` | `new RegExp("pattern", "g")` | `arkts-no-regexp-literals` |
|
|
46
|
+
| `Object.assign(t, s)` | Assign fields explicitly or use a constructor | `arkts-limited-stdlib` |
|
|
47
|
+
| `obj.hasOwnProperty('k')` | `obj.k !== undefined` | `arkts-limited-stdlib` |
|
|
48
|
+
| `globalThis.x` | An explicitly exported singleton / AppStorage | `arkts-no-globalthis` |
|
|
49
|
+
| `// @ts-ignore` | Fix the underlying type error; suppression is banned | `arkts-strict-typing-required` |
|
|
50
|
+
| `import type { T }` | `import { T }` | `arkts-no-special-imports` |
|
|
51
|
+
| `import './polyfill'` | Remove; import the needed symbols explicitly | `arkts-no-side-effects-imports` |
|
|
52
|
+
| `import x = require('m')` | `import x from 'm'` | `arkts-no-require` |
|
|
53
|
+
| `export = X` | `export default X` | `arkts-no-export-assignment` |
|
|
54
|
+
| `const api = SomeNamespace` (namespace as value) | Call `SomeNamespace.member()` directly, or define an explicit object | `arkts-no-ns-as-obj` |
|
|
55
|
+
|
|
56
|
+
## Worked good/bad examples
|
|
57
|
+
|
|
58
|
+
Composite rewrites (dynamic object → Record/named type, structural → nominal typing, nested function + `this` → class method, etc.) live once in [`arkts-rules.md` § Rule Details by Category](arkts-rules.md#rule-details-by-category) — search the rule tag from the table above.
|