@hmos-library-adapter/fast 0.0.17-beta.0 → 0.0.17-beta.1

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 (149) hide show
  1. package/node_modules/@hmos-library-adapter/executer/README.md +2 -2
  2. package/node_modules/@hmos-library-adapter/executer/shared/skill-map.json +5 -1
  3. package/node_modules/@hmos-library-adapter/executer/shared/skills/arkts-rules/SKILL.md +400 -0
  4. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/CHANGELOG.md +1391 -0
  5. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/COMPATIBILITY.md +53 -0
  6. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/README.md +123 -0
  7. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/SKILL.md +48 -0
  8. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/agents/upgrade-assess-change.md +37 -0
  9. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/agents/upgrade-fix-file.md +23 -0
  10. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/package.json +19 -0
  11. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/references/changelogs/26.0.0/beta1-changes-for-all-apps.md +1793 -0
  12. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/references/changelogs/26.0.0/beta1-ux-style-and-effect-changes.md +288 -0
  13. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/references/changelogs/26.0.0/beta2-changes-for-all-apps.md +148 -0
  14. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/references/changelogs/26.0.0/release-changes-for-all-apps.md +662 -0
  15. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/references/changelogs/5.0.1(13)/beta3-os-api-behavior-changes.md +652 -0
  16. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/references/changelogs/5.0.1(13)/beta3-ux-style-and-effect-changes.md +222 -0
  17. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/references/changelogs/5.0.1(13)/release-os-api-behavior-changes.md +444 -0
  18. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/references/changelogs/5.0.1(13)/release-ux-style-and-effect-changes.md +221 -0
  19. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/references/changelogs/5.0.2(14)/os-api-behavior-changes.md +1767 -0
  20. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/references/changelogs/5.0.2(14)/ux-style-and-effect-changes.md +134 -0
  21. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/references/changelogs/5.0.3(15)/beta1-os-api-behavior-changes.md +430 -0
  22. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/references/changelogs/5.0.3(15)/beta1-ux-style-and-effect-changes.md +49 -0
  23. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/references/changelogs/5.0.3(15)/beta2-os-api-behavior-changes.md +240 -0
  24. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/references/changelogs/5.0.3(15)/beta2-ux-style-and-effect-changes.md +90 -0
  25. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/references/changelogs/5.0.3(15)/release-os-api-behavior-changes.md +69 -0
  26. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/references/changelogs/5.1.0(18)/os-api-behavior-changes.md +1294 -0
  27. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/references/changelogs/5.1.0(18)/ux-style-and-effect-changes.md +147 -0
  28. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/references/changelogs/6.0.0(20)/beta1-os-api-behavior-changes.md +1019 -0
  29. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/references/changelogs/6.0.0(20)/beta1-ux-style-and-effect-changes.md +153 -0
  30. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/references/changelogs/6.0.0(20)/beta2-os-api-behavior-changes.md +662 -0
  31. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/references/changelogs/6.0.0(20)/beta2-ux-style-and-effect-changes.md +78 -0
  32. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/references/changelogs/6.0.0(20)/beta3-os-api-behavior-changes.md +167 -0
  33. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/references/changelogs/6.0.0(20)/beta5-os-api-behavior-changes.md +52 -0
  34. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/references/changelogs/6.1.0(23)/changes-for-all-apps.md +397 -0
  35. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/references/changelogs-index.json +883 -0
  36. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/references/common/arkts-coding-standards.md +53 -0
  37. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/references/common/compatibility.md +207 -0
  38. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/references/common/native-adaptation.md +21 -0
  39. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/references/common/runtime-functional-tests.md +62 -0
  40. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/references/common/sdk-versions.md +77 -0
  41. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/references/common/troubleshooting.md +54 -0
  42. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/references/common/verification.md +79 -0
  43. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/references/common/workflow-scan.md +41 -0
  44. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/references/deprecated/context-migration.md +274 -0
  45. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/references/deprecated/deprecated-api-adaptation.md +157 -0
  46. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/references/deprecated/deprecated-api-examples.md +219 -0
  47. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/references/toolchain/hvigor.md +50 -0
  48. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/references/upgrade/har-upgrade.md +60 -0
  49. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/references/upgrade/scanner-missed-cases.md +171 -0
  50. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/references/upgrade/upgrade-compatibility.md +112 -0
  51. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/references/upgrade/upgrade-examples.md +289 -0
  52. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/references/upgrade/upgrade-workflow.md +122 -0
  53. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/maintenance/references/generate-behavior-policy.mjs +96 -0
  54. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/maintenance/references/references.mjs +9 -0
  55. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/maintenance/regression/compare-deprecated.mjs +57 -0
  56. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/maintenance/regression/compare-golden.mjs +130 -0
  57. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/maintenance/regression/regress-deprecated.mjs +120 -0
  58. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/maintenance/test/behavior-catalog-generation.test.mjs +59 -0
  59. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/maintenance/test/behavior-local-sources.test.mjs +44 -0
  60. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/maintenance/test/changelog-index.test.mjs +66 -0
  61. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/maintenance/test/compare-golden.test.mjs +103 -0
  62. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/maintenance/test/fixtures/behavior/local-sources.csv +5 -0
  63. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/maintenance/test/references.test.mjs +16 -0
  64. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/maintenance/test/skill-content.test.mjs +139 -0
  65. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/maintenance/test/skill-frontmatter.test.mjs +11 -0
  66. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/maintenance/test/test-suite.test.mjs +65 -0
  67. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/maintenance/validation/skill-content.mjs +125 -0
  68. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/maintenance/validation/skill-frontmatter.mjs +6 -0
  69. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/maintenance/validation/validate-skill.mjs +57 -0
  70. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/scanner/CHANGELOG.md +506 -0
  71. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/scanner/GOLDEN_VALIDATION.md +42 -0
  72. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/scanner/README.md +137 -0
  73. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/scanner/behavior/behavior-policy.mjs +117 -0
  74. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/scanner/behavior/upgrade-coverage.mjs +29 -0
  75. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/scanner/bin/deveco-worker-compat.cjs +21 -0
  76. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/scanner/bin/harmony-api-scan.mjs +17 -0
  77. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/scanner/core/cli.mjs +416 -0
  78. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/scanner/core/deveco.mjs +348 -0
  79. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/scanner/core/project.mjs +81 -0
  80. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/scanner/core/rules.mjs +425 -0
  81. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/scanner/core/runtime-identity.mjs +23 -0
  82. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/scanner/core/scan-runner.mjs +521 -0
  83. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/scanner/core/sdk-deprecations.mjs +204 -0
  84. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/scanner/data/behavior-change-policy.json +4378 -0
  85. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/scanner/deprecated/arkts-deprecations.mjs +363 -0
  86. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/scanner/deprecated/build-log.mjs +72 -0
  87. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/scanner/native/native.mjs +95 -0
  88. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/scanner/package.json +16 -0
  89. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/scanner/test/batch-layout.test.mjs +94 -0
  90. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/scanner/test/behavior-policy.test.mjs +75 -0
  91. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/scanner/test/build-log.test.mjs +69 -0
  92. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/scanner/test/cli.test.mjs +102 -0
  93. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/scanner/test/csv.test.mjs +35 -0
  94. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/scanner/test/deprecations.test.mjs +283 -0
  95. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/scanner/test/deveco.test.mjs +262 -0
  96. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/scanner/test/helpers/scan-batch.mjs +10 -0
  97. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/scanner/test/native.test.mjs +108 -0
  98. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/scanner/test/project.test.mjs +42 -0
  99. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/scanner/test/rules.test.mjs +190 -0
  100. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/scanner/test/runtime-identity.test.mjs +53 -0
  101. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/scanner/test/scan-mode.test.mjs +38 -0
  102. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/scanner/test/scan-runner.test.mjs +481 -0
  103. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/scanner/test/scan-scope.test.mjs +110 -0
  104. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/scanner/test/source-inputs.test.mjs +64 -0
  105. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/scanner/test/upgrade.test.mjs +164 -0
  106. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/shared/format/args.mjs +66 -0
  107. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/shared/format/csv.mjs +85 -0
  108. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/shared/format/json5.mjs +92 -0
  109. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/shared/format/upgrade-results.mjs +45 -0
  110. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/shared/format/zip.mjs +87 -0
  111. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/shared/io/fs-utils.mjs +60 -0
  112. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/shared/platform/artifact-layout.mjs +74 -0
  113. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/shared/platform/changelog-index.mjs +29 -0
  114. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/shared/platform/deveco-version.mjs +40 -0
  115. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/shared/platform/document-links.mjs +30 -0
  116. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/shared/platform/errors.mjs +41 -0
  117. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/shared/platform/fs.mjs +72 -0
  118. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/shared/platform/paths.mjs +34 -0
  119. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/shared/platform/process.mjs +154 -0
  120. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/shared/platform/scan-mode.mjs +7 -0
  121. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/shared/platform/scan-statistics.mjs +7 -0
  122. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/shared/platform/scan-version-catalog.json +43 -0
  123. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/shared/platform/scan-versions.mjs +51 -0
  124. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/shared/platform/sdk-layout.mjs +27 -0
  125. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/shared/platform/source-scope.mjs +108 -0
  126. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/shared/platform/source-types.mjs +7 -0
  127. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/shared/platform/version.mjs +76 -0
  128. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/shared/test/deveco-version.test.mjs +50 -0
  129. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/shared/test/document-links.test.mjs +13 -0
  130. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/shared/test/errors.test.mjs +40 -0
  131. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/shared/test/fs-utils.test.mjs +31 -0
  132. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/shared/test/platform-paths.test.mjs +19 -0
  133. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/shared/test/process-utils.test.mjs +68 -0
  134. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/shared/test/scan-versions.test.mjs +26 -0
  135. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/shared/test/sdk-version.test.mjs +17 -0
  136. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/shared/test/upgrade-results.test.mjs +140 -0
  137. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/scripts/test-suite.mjs +29 -0
  138. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/templates/deprecated-report.md +86 -0
  139. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/templates/progress.md +150 -0
  140. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/templates/results.md +110 -0
  141. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/templates/upgrade-report.md +105 -0
  142. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/templates/upgrade-spec.md +58 -0
  143. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-api-upgrade-adapter/templates/upgrade-test-report.md +47 -0
  144. package/node_modules/@hmos-library-adapter/executer/shared/skills/harmonyos-knowledge/SKILL.md +70 -0
  145. package/node_modules/@hmos-library-adapter/executer/src/config.js +3 -4
  146. package/node_modules/@hmos-library-adapter/executer/src/doctor.js +1 -1
  147. package/node_modules/@hmos-library-adapter/executer/src/install.js +1 -1
  148. package/node_modules/@hmos-library-adapter/executer/src/paths.js +4 -4
  149. package/package.json +1 -1
@@ -0,0 +1,416 @@
1
+ import { readFile, mkdir } from 'node:fs/promises';
2
+ import path from 'node:path';
3
+ import { assertBatchDirectory, createScanBatch, ensureBatchDirectory } from '../../shared/platform/artifact-layout.mjs';
4
+ import { fileURLToPath } from 'node:url';
5
+ import { parseArgs, integerArg, requireString, stringList } from '../../shared/format/args.mjs';
6
+ import { discoverDevEco, validateTargetCoverage } from './deveco.mjs';
7
+ import { assertUpgradeRange, canonicalHarmonyVersion as canonicalVersion } from '../../shared/platform/version.mjs';
8
+ import { auditDeprecationRules, compileRules } from './rules.mjs';
9
+ import { loadProject } from './project.mjs';
10
+ import { ensureNativeBuild } from '../native/native.mjs';
11
+ import { runDevEcoScan } from './scan-runner.mjs';
12
+ import { atomicWrite, ensureDir, exists, sha256 } from '../../shared/io/fs-utils.mjs';
13
+ import { buildSdkCatalog } from './sdk-deprecations.mjs';
14
+ import { scanArkTsDeprecations } from '../deprecated/arkts-deprecations.mjs';
15
+ import { importDeprecatedBuildLog } from '../deprecated/build-log.mjs';
16
+ import { loadBehaviorPolicy, validateBehaviorPolicySources } from '../behavior/behavior-policy.mjs';
17
+ import { serializeError } from '../../shared/platform/errors.mjs';
18
+ import { runtimeIdentity } from './runtime-identity.mjs';
19
+ import { upgradeRuleCoverage } from '../behavior/upgrade-coverage.mjs';
20
+ import { findingStatistics } from '../../shared/platform/scan-statistics.mjs';
21
+ import { discoverScanVersions, resolveScanVersion } from '../../shared/platform/scan-versions.mjs';
22
+ import { requireScanMode } from '../../shared/platform/scan-mode.mjs';
23
+
24
+ const packageRoot = path.dirname(path.dirname(fileURLToPath(import.meta.url)));
25
+ const defaultReferenceRoot = path.resolve(packageRoot, '..', '..', 'references', 'changelogs');
26
+ const defaultBehaviorPolicy = path.join(packageRoot, 'data', 'behavior-change-policy.json');
27
+
28
+ export function usage() {
29
+ return `HarmonyOS API compatibility scanner
30
+
31
+ Commands:
32
+ scan --project <path> --sdk <path> --from <version> [--to <version>]
33
+ [--deveco-home <path>]
34
+ [--product <name>] [--scan-dir <path>] [--scan-module <name>] [--project-type app|har] [--native-build auto|off]
35
+ [--batch-size <count>] [--references <path>] [--output-dir <path>]
36
+ [--build-log <path>] [--build-evidence <path>]
37
+ --mode upgrade|deprecated
38
+ inspect-rules --sdk <path> --from <version> [--to <version>]
39
+ --mode upgrade|deprecated [--deveco-home <path>] [--references <path>] [--allow-incomplete]
40
+ `;
41
+ }
42
+
43
+ export function runTimestamp(now = new Date()) {
44
+ const pad = (value) => String(value).padStart(2, '0');
45
+ return `${now.getFullYear()}${pad(now.getMonth() + 1)}${pad(now.getDate())}`
46
+ + `${pad(now.getHours())}${pad(now.getMinutes())}${pad(now.getSeconds())}`;
47
+ }
48
+
49
+ export async function createRunOutputDirectory(root) {
50
+ const base = runTimestamp();
51
+ let name = base;
52
+ let suffix = 2;
53
+ await ensureDir(root);
54
+ for (;;) {
55
+ const directory = path.join(root, name);
56
+ try { await mkdir(directory); return { directory, stamp: name }; }
57
+ catch (error) { if (error.code !== 'EEXIST') throw error; name = `${base}-${suffix++}`; }
58
+ }
59
+ }
60
+
61
+ function scanOptions(args) {
62
+ const mode = requireScanMode(args.mode);
63
+ const projectPath = path.resolve(requireString(args, 'project'));
64
+ return {
65
+ projectPath,
66
+ sdkPath: path.resolve(requireString(args, 'sdk')),
67
+ devecoHome: args['deveco-home'] ? path.resolve(requireString(args, 'deveco-home')) : null,
68
+ from: requireString(args, 'from'),
69
+ to: typeof args.to === 'string' ? args.to : null,
70
+ productName: typeof args.product === 'string' ? args.product : 'default',
71
+ scanDirs: stringList(args['scan-dir']),
72
+ scanModules: stringList(args['scan-module']),
73
+ projectType: args['project-type'] || 'app',
74
+ nativeBuild: args['native-build'] ?? 'auto',
75
+ batchSize: integerArg(args['batch-size'], 1000, 'batch-size'),
76
+ mode,
77
+ referenceRoot: path.resolve(args.references || defaultReferenceRoot),
78
+ outputRoot: path.resolve(args['output-dir'] || path.join(projectPath, '.api-change-output')),
79
+ buildLog: args['build-log'] ? path.resolve(requireString(args, 'build-log')) : null,
80
+ buildEvidence: args['build-evidence'] ? path.resolve(requireString(args, 'build-evidence')) : null,
81
+ };
82
+ }
83
+
84
+ export function resolveScanTargetVersion(to, toolchain, versions = undefined) {
85
+ const selected = to || toolchain?.sdkVersion;
86
+ if (!selected) {
87
+ const error = new Error('Target SDK version is missing and cannot be inferred from the selected toolchain');
88
+ error.code = 'TARGET_SDK_UNRESOLVED';
89
+ throw error;
90
+ }
91
+ const value = typeof selected === 'object' && !Array.isArray(selected) && !selected.key
92
+ ? selected.raw : selected;
93
+ const input = typeof value === 'object' ? canonicalVersion(value) : value;
94
+ return { version: resolveScanVersion(input,{endpoint:'to',compileSdkVersion:toolchain?.sdkVersion?.raw ?? toolchain?.sdkVersion,versions}), source: to ? 'to' : 'toolchain' };
95
+ }
96
+
97
+ async function inspectRules(args) {
98
+ const mode = requireScanMode(args.mode);
99
+ const sdkPath = path.resolve(requireString(args, 'sdk'));
100
+ const referenceRoot = path.resolve(args.references || defaultReferenceRoot);
101
+ const devecoHome = args['deveco-home'] ? path.resolve(requireString(args, 'deveco-home')) : null;
102
+ const toolchain = await discoverDevEco(sdkPath, devecoHome, { targetVersion: typeof args.to === 'string' ? args.to : null });
103
+ const versions = await discoverScanVersions(toolchain);
104
+ const target = resolveScanTargetVersion(typeof args.to === 'string' ? args.to : null, toolchain, versions);
105
+ const range = assertUpgradeRange(resolveScanVersion(requireString(args,'from'),{endpoint:'from',versions}), target.version);
106
+ validateTargetCoverage(toolchain, range.end);
107
+ const compiled = await compileRules({ toolchain, referenceRoot, range, strict: args['allow-incomplete'] !== true, mode });
108
+ const catalog = await buildSdkCatalog(toolchain, range.end);
109
+ const deprecationValidation = mode === 'upgrade' ? { status: 'NOT_APPLICABLE' } : await auditDeprecationRules(toolchain, compiled.rules, catalog);
110
+ const { excluded, errors, ...summary } = compiled.coverage;
111
+ return {
112
+ sdk: toolchain.sdkMetadata.data,
113
+ toolchain: {
114
+ deveco: toolchain.productInfo,
115
+ devecoCompatibility: toolchain.devecoCompatibility,
116
+ backend: toolchain.apiChangeBackend,
117
+ scanner: toolchain.apiChangeScan,
118
+ resources: toolchain.apiChangeResourceRoot,
119
+ resourceArchive: toolchain.apiChangeResourceArchive,
120
+ parser: toolchain.parserPath,
121
+ cApiScanJar: toolchain.cApiScanJar,
122
+ },
123
+ coverage: { ...summary, deprecationValidation, deprecationCatalog: catalog.coverage },
124
+ errorSample: errors.slice(0, 20),
125
+ excludedSample: excluded.slice(0, 20),
126
+ };
127
+ }
128
+
129
+ export function selectScanRules(rules, mode) {
130
+ requireScanMode(mode);
131
+ if (mode === 'upgrade') return rules.filter(rule => rule.provider === 'DEVECO' && rule.changeType !== 'Deprecated API');
132
+ const scoped = rules.filter(rule => rule.changeType === 'Deprecated API');
133
+ return scoped.filter(rule => rule.changeOperation !== 'API_DEPRECATED'
134
+ || rule.affectedApis[0]?.implementLanguage.toLowerCase() !== 'typescript');
135
+ }
136
+
137
+ async function scan(args) {
138
+ const options = scanOptions(args);
139
+ if (!['auto', 'off'].includes(options.nativeBuild)) throw new Error('--native-build must be auto or off');
140
+ if (options.batchSize !== 1000) {
141
+ throw new Error('The DevEco v1 backend supports --batch-size 1000 only');
142
+ }
143
+ const { directory: outputDirectory } = await createRunOutputDirectory(options.outputRoot);
144
+ const outputLayout = await createScanBatch(options.outputRoot, outputDirectory, {mode:options.mode});
145
+ await ensureBatchDirectory(outputLayout, outputLayout.scannerDirectory);
146
+ const coverageJson = outputLayout.coverageJson;
147
+ const diagnosticsJson = outputLayout.diagnosticsJson;
148
+ const runtime = await runtimeIdentity(path.resolve(packageRoot, '..', '..'), {mode:options.mode});
149
+ let diagnostics = { schemaVersion: 1, status: 'FAILED', runtime, options: { ...options, projectPath: options.projectPath } };
150
+ let stage = 'DISCOVER_TOOLCHAIN';
151
+ try {
152
+ const toolchain = await discoverDevEco(options.sdkPath, options.devecoHome, { targetVersion: options.to });
153
+ options.sdkPath = toolchain.sdkRoot;
154
+ const versions = await discoverScanVersions(toolchain);
155
+ const rawInputs = {from:options.from,to:options.to};
156
+ const target = resolveScanTargetVersion(options.to, toolchain, versions);
157
+ options.from = resolveScanVersion(options.from,{endpoint:'from',versions});
158
+ options.to = target.version;
159
+ options.versionResolution = {rawInputs,scanFromSdkVersion:options.from,scanToSdkVersion:options.to,
160
+ compileSdkVersion:canonicalVersion(toolchain.sdkVersion)};
161
+ options.targetVersionSource = target.source;
162
+ const range = assertUpgradeRange(options.from, options.to);
163
+ stage = 'VALIDATE_TARGET_COVERAGE';
164
+ validateTargetCoverage(toolchain, range.end);
165
+ stage = 'LOAD_PROJECT';
166
+ const project = await loadProject(options.projectPath, options.productName, options.scanDirs, options.scanModules, options.projectType);
167
+ stage = 'COMPILE_RULES';
168
+ const compiled = await compileRules({ toolchain, referenceRoot: options.referenceRoot, range, strict: true, mode: options.mode });
169
+ stage = 'VALIDATE_BEHAVIOR_POLICY';
170
+ const behaviorPolicy = await loadBehaviorPolicy(defaultBehaviorPolicy);
171
+ const behaviorPolicyCoverage = await validateBehaviorPolicySources(behaviorPolicy, options.referenceRoot);
172
+ if (options.mode === 'upgrade') {
173
+ compiled.coverage.upgrade = upgradeRuleCoverage({ policies: behaviorPolicy.entries, rules: compiled.rules,
174
+ excluded: compiled.coverage.excluded, range });
175
+ compiled.coverage.upgrade.rulePack = { version: toolchain.productInfo?.version ?? null,
176
+ resources: toolchain.apiChangeResourceRoot, archive: toolchain.apiChangeResourceArchive };
177
+ // Publish the verified plugin results, but never equate plugin coverage with
178
+ // complete official-document coverage. Do not invent rules outside this mode.
179
+ }
180
+ stage = 'BUILD_SDK_CATALOG';
181
+ const catalog = await buildSdkCatalog(toolchain, range.end);
182
+ stage = 'AUDIT_DEPRECATION_RULES';
183
+ const deprecationValidation = options.mode === 'upgrade' ? { status: 'NOT_APPLICABLE' } : await auditDeprecationRules(toolchain, compiled.rules, catalog);
184
+ if (catalog.coverage.status !== 'COMPLETE') {
185
+ const error = new Error('Target SDK declaration catalog is incomplete');
186
+ error.code = 'SDK_CATALOG_INCOMPLETE'; error.details = catalog.coverage.errors; throw error;
187
+ }
188
+ stage = 'SCAN_ARKTS_DEPRECATIONS';
189
+ const deprecations = options.mode === 'upgrade'
190
+ ? { findings: [], unresolved: [], analyzedFiles: [], coverage: { status: 'NOT_APPLICABLE' } }
191
+ : await scanArkTsDeprecations({ project, catalog, documentRules: compiled.rules });
192
+ deprecations.catalogCoverage = catalog.coverage;
193
+ if (deprecations.unresolved.length) {
194
+ await atomicWrite(outputLayout.scanJson, `${JSON.stringify({
195
+ schemaVersion: 3, sourceSnapshot: project.sourceSnapshot, status: 'INCOMPLETE',
196
+ deprecationCatalog: catalog.coverage, deprecationCoverage: deprecations.coverage,
197
+ unresolved: deprecations.unresolved, resolutionWarnings: deprecations.resolutionWarnings,
198
+ findings: deprecations.findings,
199
+ }, null, 2)}\n`);
200
+ const error = new Error(`${deprecations.unresolved.length} unresolved SDK/source references prevent a complete scan`);
201
+ error.code = 'UNRESOLVED_DEPRECATION_REFERENCES'; error.details = deprecations.unresolved.slice(0, 30); throw error;
202
+ }
203
+ stage = 'IMPORT_BUILD_LOG';
204
+ const buildLogImport = options.mode === 'upgrade' ? null : await importDeprecatedBuildLog({ project, catalog, logPath: options.buildLog, evidencePath: options.buildEvidence });
205
+ const ruleSnapshot = sha256(catalog.snapshot + JSON.stringify(compiled.rules.map((rule) => ({
206
+ ruleId: rule.ruleId,
207
+ changedInSdk: rule.changedInSdk,
208
+ changeOperation: rule.changeOperation,
209
+ reportDisposition: rule.reportDisposition ?? 'REQUIRES_REVIEW',
210
+ filterReason: rule.filterReason ?? null,
211
+ applicabilityProof: rule.applicabilityProof ?? null,
212
+ replacementApi: rule.replacementApi ?? null,
213
+ replacementSource: rule.replacementSource ?? null,
214
+ sourceReference: rule.sourceReference,
215
+ affectedApis: rule.affectedApis,
216
+ }))));
217
+ stage = 'WRITE_INITIAL_COVERAGE';
218
+ await atomicWrite(coverageJson, `${JSON.stringify({
219
+ ...compiled.coverage,
220
+ ruleSnapshot,
221
+ deprecationValidation,
222
+ deprecationCatalog: catalog.coverage,
223
+ behaviorPolicy: behaviorPolicyCoverage,
224
+ }, null, 2)}\n`);
225
+ stage = 'NATIVE_BUILD';
226
+ const nativeBuilds = await ensureNativeBuild({
227
+ project,
228
+ toolchain,
229
+ mode: options.nativeBuild,
230
+ });
231
+ stage = 'RUN_DEVECO_SCAN';
232
+ const result = await runDevEcoScan({
233
+ toolchain,
234
+ project,
235
+ range,
236
+ rules: selectScanRules(compiled.rules, options.mode),
237
+ outputDirectory,
238
+ batchId: outputLayout.batchId,
239
+ deprecations,
240
+ buildLogImport,
241
+ mode: options.mode,
242
+ devecoVersionNames: compiled.coverage.devecoVersionNames,
243
+ runtime,
244
+ verifyInputs: async () => {
245
+ const afterProject = await loadProject(options.projectPath, options.productName, options.scanDirs, options.scanModules, options.projectType);
246
+ const afterCatalog = await buildSdkCatalog(toolchain, range.end);
247
+ const changed = [];
248
+ if (afterProject.sourceSnapshot !== project.sourceSnapshot) changed.push('project sources');
249
+ if (afterProject.buildProfileHash !== project.buildProfileHash) changed.push('build-profile.json5');
250
+ if (afterCatalog.snapshot !== catalog.snapshot) changed.push('SDK declarations/parser');
251
+ for (const item of deprecations.analyzedFiles) {
252
+ if (sha256(await readFile(item.file)) !== item.hash) changed.push(item.file);
253
+ }
254
+ if (changed.length) {
255
+ const error = new Error('Scan input changed before report publication');
256
+ error.code = 'SOURCE_CHANGED_DURING_SCAN'; error.details = changed; throw error;
257
+ }
258
+ },
259
+ });
260
+ stage = 'VERIFY_SOURCE_SNAPSHOT';
261
+ const after = await loadProject(options.projectPath, options.productName, options.scanDirs, options.scanModules, options.projectType);
262
+ if (after.sourceSnapshot !== project.sourceSnapshot) {
263
+ const error = new Error('Project source changed during the scan');
264
+ error.code = 'SOURCE_CHANGED_DURING_SCAN';
265
+ throw error;
266
+ }
267
+ const warnings = [...result.diagnostics.warnings];
268
+ if (compiled.coverage.upgrade) {
269
+ const hitRules = new Set(result.allFindings.map(finding => finding['Rule ID']));
270
+ for (const entry of compiled.coverage.upgrade.entries) if (entry.status === 'RULE_AVAILABLE')
271
+ entry.projectStatus = entry.ruleIds.some(id => hitRules.has(id)) ? 'HIT' : 'NOT_RELATED_TO_PROJECT';
272
+ }
273
+ if (compiled.coverage.upgrade?.missingRuleCount) warnings.push(
274
+ `当前加载的 DevEco ${toolchain.productInfo?.version ?? '未知版本'} 插件规则包未覆盖官方文档中 ${compiled.coverage.upgrade.missingRuleCount} 条变更:`
275
+ + compiled.coverage.upgrade.missing.map(entry => `${entry.title}(${entry.changedInSdk};${entry.sourceUrl ?? entry.sourceReference})`).join('、')
276
+ + `;官方规则覆盖为 INCOMPLETE,详见 ${coverageJson}`);
277
+ if (options.mode === 'upgrade') {
278
+ const missingLinks = [...new Map(result.allFindings.filter(finding => !finding.documentLink?.url)
279
+ .map(finding => [finding['Rule ID'], finding])).values()];
280
+ if (missingLinks.length) warnings.push(`以下命中缺少唯一条目链接,Title 保留纯文本:${missingLinks.map(finding => finding['Rule ID']).join('、')}`);
281
+ }
282
+ const scanStatistics = { loadedRuleCount: compiled.coverage.devecoRuleCount, raw: findingStatistics(result.findings) };
283
+ const coverage = {
284
+ ...compiled.coverage,
285
+ ruleSnapshot,
286
+ deprecationValidation,
287
+ deprecationCatalog: catalog.coverage,
288
+ behaviorPolicy: behaviorPolicyCoverage,
289
+ scanCoverage: {
290
+ arkts: 'COMPLETE',
291
+ deprecations: deprecations.coverage,
292
+ cpp: result.diagnostics.cppStatus,
293
+ },
294
+ scanStatistics,
295
+ };
296
+ stage = 'WRITE_RESULTS';
297
+ await assertBatchDirectory(outputLayout, outputLayout.scannerDirectory);
298
+ await atomicWrite(coverageJson, `${JSON.stringify(coverage, null, 2)}\n`);
299
+ diagnostics = {
300
+ schemaVersion: 1,
301
+ runtime,
302
+ status: warnings.length ? 'COMPLETE_WITH_WARNINGS' : 'COMPLETE',
303
+ inputs: {
304
+ project: project.root,
305
+ sdk: toolchain.sdkRoot,
306
+ devecoHome: toolchain.contentsRoot,
307
+ from: options.from,
308
+ to: options.to,
309
+ targetSdkVersionSource: options.targetVersionSource,
310
+ product: project.product.name,
311
+ scanDirs: project.scanDirs.map((item) => item.relative),
312
+ scanModules: project.sourceScope.scanModules,
313
+ projectType: options.projectType,
314
+ nativeBuild: options.nativeBuild,
315
+ mode: options.mode,
316
+ batchSize: options.batchSize,
317
+ buildLog: options.buildLog,
318
+ buildEvidence: options.buildEvidence,
319
+ },
320
+ sourceSnapshot: project.sourceSnapshot,
321
+ sourceScope: project.sourceScope,
322
+ scannedFiles: project.sourceFiles.map(file => path.relative(project.root, file).split(path.sep).join('/')),
323
+ ruleSnapshot,
324
+ deprecationCatalog: catalog.coverage,
325
+ deprecationCoverage: deprecations.coverage,
326
+ toolchain: {
327
+ sdk: toolchain.sdkMetadata.data,
328
+ deveco: toolchain.productInfo,
329
+ devecoCompatibility: toolchain.devecoCompatibility,
330
+ backend: toolchain.apiChangeBackend,
331
+ scanCapabilities:{moduleScope:toolchain.moduleScanSupported,fileScope:toolchain.fileScanSupported,evidence:toolchain.capabilityEvidence},
332
+ paths: {
333
+ home: toolchain.contentsRoot,
334
+ analyzer: toolchain.analyzerRoot,
335
+ scanner: toolchain.apiChangeScan,
336
+ resources: toolchain.apiChangeResourceRoot,
337
+ resourceArchive: toolchain.apiChangeResourceArchive,
338
+ parser: toolchain.parserPath,
339
+ cApiScanJar: toolchain.cApiScanJar,
340
+ },
341
+ hashes: toolchain.hashes,
342
+ },
343
+ nativeBuilds,
344
+ nativePasses: result.diagnostics.nativePasses,
345
+ findingCount: result.findings.length,
346
+ scanStatistics,
347
+ totalFindingCount: result.allFindings.length,
348
+ filteredFindingCount: result.filteredFindings.length,
349
+ actionGroupCount: result.actionGroups.length,
350
+ validationGroupCount: result.validationGroups.length,
351
+ filterSummary: result.diagnostics.filterSummary,
352
+ durationMs: result.diagnostics.durationMs,
353
+ backend: toolchain.apiChangeBackend,
354
+ deveco: toolchain.productInfo,
355
+ devecoCompatibility: toolchain.devecoCompatibility,
356
+ warnings,
357
+ scannerOutput: {
358
+ ...(result.diagnostics.cleanupWarning ? { cleanupWarning: result.diagnostics.cleanupWarning } : {}),
359
+ stdout: result.diagnostics.stdout,
360
+ stderr: result.diagnostics.stderr,
361
+ },
362
+ };
363
+ await atomicWrite(diagnosticsJson, `${JSON.stringify(diagnostics, null, 2)}\n`);
364
+ return {
365
+ outputCsv: result.outputCsv,
366
+ outputLayout, batchId: outputLayout.batchId,
367
+ scanStatistics,
368
+ ...(compiled.coverage.upgrade ? { officialCoverage: { status: compiled.coverage.upgrade.status,
369
+ missingRuleCount: compiled.coverage.upgrade.missingRuleCount, missing: compiled.coverage.upgrade.missing,
370
+ rulePack: compiled.coverage.upgrade.rulePack } } : {}),
371
+ validationCsv: result.validationCsv,
372
+ scanJson: result.scanJson,
373
+ coverageJson,
374
+ diagnosticsJson,
375
+ findingCount: result.findings.length,
376
+ totalFindingCount: result.allFindings.length,
377
+ filteredFindingCount: result.filteredFindings.length,
378
+ actionGroupCount: result.actionGroups.length,
379
+ validationGroupCount: result.validationGroups.length,
380
+ filterSummary: result.diagnostics.filterSummary,
381
+ durationMs: result.diagnostics.durationMs,
382
+ warnings,
383
+ ruleSnapshot,
384
+ resolvedTargetSdkVersion: options.to,
385
+ compileSdkVersion: canonicalVersion(toolchain.sdkVersion),
386
+ ...(compiled.coverage.upgrade ? { officialCoverageStatus: compiled.coverage.upgrade.status } : {}),
387
+ targetSdkVersionSource: options.targetVersionSource,
388
+ runtime,
389
+ };
390
+ } catch (error) {
391
+ if (error && typeof error === 'object') error.stage ??= stage;
392
+ if (error && typeof error === 'object') error.code ??= 'SCAN_FAILED';
393
+ if (error && typeof error === 'object') error.artifactPaths ??= [diagnosticsJson];
394
+ diagnostics = {
395
+ ...diagnostics,
396
+ error: serializeError(error, { command: 'scan', stage }),
397
+ };
398
+ await assertBatchDirectory(outputLayout, outputLayout.scannerDirectory);
399
+ await atomicWrite(diagnosticsJson, `${JSON.stringify(diagnostics, null, 2)}\n`);
400
+ throw error;
401
+ }
402
+ }
403
+
404
+ export async function execute(argv) {
405
+ const [command, ...rest] = argv;
406
+ const args = parseArgs(rest);
407
+ switch (command) {
408
+ case 'scan': return scan(args);
409
+ case 'inspect-rules': return inspectRules(args);
410
+ case 'help':
411
+ case '--help':
412
+ case '-h':
413
+ case undefined: return { usage: usage() };
414
+ default: throw new Error(`Unknown command: ${command}\n\n${usage()}`);
415
+ }
416
+ }