snapshot-checker 0.8.1 → 0.8.5

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 (253) hide show
  1. package/README.md +146 -29
  2. package/dist/src/cli.d.ts +10 -1
  3. package/dist/src/cli.d.ts.map +1 -1
  4. package/dist/src/cli.js +106 -379
  5. package/dist/src/cli.js.map +1 -1
  6. package/dist/{commands → src/commands}/report-user.d.ts +1 -1
  7. package/dist/src/commands/report-user.d.ts.map +1 -0
  8. package/dist/{commands → src/commands}/report-user.js +2 -2
  9. package/dist/src/commands/report-user.js.map +1 -0
  10. package/dist/{commands → src/commands}/report.d.ts +1 -1
  11. package/dist/src/commands/report.d.ts.map +1 -0
  12. package/dist/{commands → src/commands}/report.js +2 -2
  13. package/dist/src/commands/report.js.map +1 -0
  14. package/dist/src/index.d.ts +6 -6
  15. package/dist/src/index.d.ts.map +1 -1
  16. package/dist/src/index.js +5 -5
  17. package/dist/src/index.js.map +1 -1
  18. package/dist/src/lib/cli/env.d.ts +9 -0
  19. package/dist/src/lib/cli/env.d.ts.map +1 -0
  20. package/dist/src/lib/cli/env.js +25 -0
  21. package/dist/src/lib/cli/env.js.map +1 -0
  22. package/dist/src/lib/cli/errors.d.ts +13 -0
  23. package/dist/src/lib/cli/errors.d.ts.map +1 -0
  24. package/dist/src/lib/cli/errors.js +23 -0
  25. package/dist/src/lib/cli/errors.js.map +1 -0
  26. package/dist/src/lib/cli/fatal.d.ts +2 -0
  27. package/dist/src/lib/cli/fatal.d.ts.map +1 -0
  28. package/dist/src/lib/cli/fatal.js +15 -0
  29. package/dist/src/lib/cli/fatal.js.map +1 -0
  30. package/dist/src/lib/cli/global_options.d.ts +4 -0
  31. package/dist/src/lib/cli/global_options.d.ts.map +1 -0
  32. package/dist/src/lib/cli/global_options.js +27 -0
  33. package/dist/src/lib/cli/global_options.js.map +1 -0
  34. package/dist/src/lib/cli/output.d.ts +26 -0
  35. package/dist/src/lib/cli/output.d.ts.map +1 -0
  36. package/dist/src/lib/cli/output.js +83 -0
  37. package/dist/src/lib/cli/output.js.map +1 -0
  38. package/dist/src/lib/cli/pkg_runtime.d.ts +2 -0
  39. package/dist/src/lib/cli/pkg_runtime.d.ts.map +1 -0
  40. package/dist/src/lib/cli/pkg_runtime.js +4 -0
  41. package/dist/src/lib/cli/pkg_runtime.js.map +1 -0
  42. package/dist/src/lib/cli/shell_identifiers.d.ts +24 -0
  43. package/dist/src/lib/cli/shell_identifiers.d.ts.map +1 -0
  44. package/dist/src/lib/cli/shell_identifiers.js +67 -0
  45. package/dist/src/lib/cli/shell_identifiers.js.map +1 -0
  46. package/dist/src/lib/cli/shell_params.d.ts +25 -0
  47. package/dist/src/lib/cli/shell_params.d.ts.map +1 -0
  48. package/dist/src/lib/cli/shell_params.js +61 -0
  49. package/dist/src/lib/cli/shell_params.js.map +1 -0
  50. package/dist/src/lib/cli/validation.d.ts +8 -0
  51. package/dist/src/lib/cli/validation.d.ts.map +1 -0
  52. package/dist/src/lib/cli/validation.js +44 -0
  53. package/dist/src/lib/cli/validation.js.map +1 -0
  54. package/dist/src/lib/{version.d.ts → cli/version.d.ts} +6 -2
  55. package/dist/src/lib/cli/version.d.ts.map +1 -0
  56. package/dist/src/lib/{version.js → cli/version.js} +25 -6
  57. package/dist/src/lib/cli/version.js.map +1 -0
  58. package/dist/src/lib/command_suite/globals.d.ts +8 -0
  59. package/dist/src/lib/command_suite/globals.d.ts.map +1 -0
  60. package/dist/src/lib/command_suite/globals.js +11 -0
  61. package/dist/src/lib/command_suite/globals.js.map +1 -0
  62. package/dist/src/lib/command_suite/runner.d.ts +24 -0
  63. package/dist/src/lib/command_suite/runner.d.ts.map +1 -0
  64. package/dist/src/lib/command_suite/runner.js +27 -0
  65. package/dist/src/lib/command_suite/runner.js.map +1 -0
  66. package/dist/src/lib/execution/command_suite_modules.d.ts +5 -0
  67. package/dist/src/lib/execution/command_suite_modules.d.ts.map +1 -0
  68. package/dist/src/lib/execution/command_suite_modules.js +12 -0
  69. package/dist/src/lib/execution/command_suite_modules.js.map +1 -0
  70. package/dist/src/lib/execution/execution_paths.d.ts +5 -0
  71. package/dist/src/lib/execution/execution_paths.d.ts.map +1 -0
  72. package/dist/src/lib/execution/execution_paths.js +13 -0
  73. package/dist/src/lib/execution/execution_paths.js.map +1 -0
  74. package/dist/src/lib/execution/output_validate.d.ts +31 -0
  75. package/dist/src/lib/execution/output_validate.d.ts.map +1 -0
  76. package/dist/src/lib/execution/output_validate.js +119 -0
  77. package/dist/src/lib/execution/output_validate.js.map +1 -0
  78. package/dist/src/lib/execution/plan.d.ts +69 -0
  79. package/dist/src/lib/execution/plan.d.ts.map +1 -0
  80. package/dist/src/lib/execution/plan.js +347 -0
  81. package/dist/src/lib/execution/plan.js.map +1 -0
  82. package/dist/src/lib/execution/register_execution.d.ts +4 -0
  83. package/dist/src/lib/execution/register_execution.d.ts.map +1 -0
  84. package/dist/src/lib/execution/register_execution.js +151 -0
  85. package/dist/src/lib/execution/register_execution.js.map +1 -0
  86. package/dist/src/lib/execution/run_manifest.d.ts +65 -0
  87. package/dist/src/lib/execution/run_manifest.d.ts.map +1 -0
  88. package/dist/src/lib/execution/run_manifest.js +324 -0
  89. package/dist/src/lib/execution/run_manifest.js.map +1 -0
  90. package/dist/src/lib/preflight/preflight.d.ts.map +1 -0
  91. package/dist/src/lib/{preflight.js → preflight/preflight.js} +11 -15
  92. package/dist/src/lib/preflight/preflight.js.map +1 -0
  93. package/dist/src/lib/preflight/preflight_check.d.ts +34 -0
  94. package/dist/src/lib/preflight/preflight_check.d.ts.map +1 -0
  95. package/dist/src/lib/preflight/preflight_check.js +406 -0
  96. package/dist/src/lib/preflight/preflight_check.js.map +1 -0
  97. package/dist/src/lib/preflight/register_preflight.d.ts +4 -0
  98. package/dist/src/lib/preflight/register_preflight.d.ts.map +1 -0
  99. package/dist/src/lib/preflight/register_preflight.js +43 -0
  100. package/dist/src/lib/preflight/register_preflight.js.map +1 -0
  101. package/dist/src/lib/preflight/shell_exec.d.ts +12 -0
  102. package/dist/src/lib/preflight/shell_exec.d.ts.map +1 -0
  103. package/dist/src/lib/preflight/shell_exec.js +25 -0
  104. package/dist/src/lib/preflight/shell_exec.js.map +1 -0
  105. package/dist/src/lib/{app_spec.d.ts → report/app.d.ts} +1 -1
  106. package/dist/src/lib/{app_spec.d.ts.map → report/app.d.ts.map} +1 -1
  107. package/dist/src/lib/{app_spec.js → report/app.js} +1 -1
  108. package/dist/src/lib/{app_spec.js.map → report/app.js.map} +1 -1
  109. package/dist/src/lib/{report_scenario.d.ts → report/command_suite.d.ts} +8 -7
  110. package/dist/src/lib/report/command_suite.d.ts.map +1 -0
  111. package/dist/src/lib/{report_scenario.js → report/command_suite.js} +48 -20
  112. package/dist/src/lib/report/command_suite.js.map +1 -0
  113. package/dist/src/lib/{perf_decode.d.ts → report/decode.d.ts} +3 -2
  114. package/dist/src/lib/report/decode.d.ts.map +1 -0
  115. package/dist/src/lib/{perf_decode.js → report/decode.js} +5 -4
  116. package/dist/src/lib/report/decode.js.map +1 -0
  117. package/dist/src/lib/{format.d.ts → report/format.d.ts} +1 -3
  118. package/dist/src/lib/report/format.d.ts.map +1 -0
  119. package/dist/src/lib/{format.js → report/format.js} +2 -8
  120. package/dist/src/lib/report/format.js.map +1 -0
  121. package/dist/src/lib/report/hdc.d.ts.map +1 -0
  122. package/dist/src/lib/report/hdc.js.map +1 -0
  123. package/dist/src/lib/{host_commands.d.ts → report/host.d.ts} +2 -14
  124. package/dist/src/lib/report/host.d.ts.map +1 -0
  125. package/dist/src/lib/report/host.js +57 -0
  126. package/dist/src/lib/report/host.js.map +1 -0
  127. package/dist/src/lib/{paths.d.ts → report/paths.d.ts} +7 -4
  128. package/dist/src/lib/report/paths.d.ts.map +1 -0
  129. package/dist/src/lib/{paths.js → report/paths.js} +22 -12
  130. package/dist/src/lib/report/paths.js.map +1 -0
  131. package/dist/src/lib/{pipeline.d.ts → report/pipeline.d.ts} +2 -2
  132. package/dist/src/lib/report/pipeline.d.ts.map +1 -0
  133. package/dist/src/lib/{pipeline.js → report/pipeline.js} +2 -2
  134. package/dist/src/lib/report/pipeline.js.map +1 -0
  135. package/dist/src/lib/{presets.d.ts → report/presets.d.ts} +6 -6
  136. package/dist/src/lib/report/presets.d.ts.map +1 -0
  137. package/dist/src/lib/{presets.js → report/presets.js} +7 -7
  138. package/dist/src/lib/{presets.js.map → report/presets.js.map} +1 -1
  139. package/dist/src/logger.d.ts +5 -3
  140. package/dist/src/logger.d.ts.map +1 -1
  141. package/dist/src/logger.js +20 -19
  142. package/dist/src/logger.js.map +1 -1
  143. package/package.json +11 -13
  144. package/skills/snapshot-checker/SKILL.md +125 -0
  145. package/skills/snapshot-checker/agents/openai.yaml +4 -0
  146. package/skills/snapshot-checker/references/capture_profile.md +72 -0
  147. package/skills/snapshot-checker/references/cli_options.md +87 -0
  148. package/skills/snapshot-checker/references/error_codes.md +79 -0
  149. package/skills/snapshot-checker/references/output_layout.md +42 -0
  150. package/skills/snapshot-checker/references/report_vs_report_user.md +35 -0
  151. package/dist/commands/forkall.d.ts +0 -44
  152. package/dist/commands/forkall.d.ts.map +0 -1
  153. package/dist/commands/forkall.js +0 -322
  154. package/dist/commands/forkall.js.map +0 -1
  155. package/dist/commands/report-user.d.ts.map +0 -1
  156. package/dist/commands/report-user.js.map +0 -1
  157. package/dist/commands/report.d.ts.map +0 -1
  158. package/dist/commands/report.js.map +0 -1
  159. package/dist/demos/context-demo.d.ts +0 -10
  160. package/dist/demos/context-demo.d.ts.map +0 -1
  161. package/dist/demos/context-demo.js +0 -69
  162. package/dist/demos/context-demo.js.map +0 -1
  163. package/dist/demos/mac-example.d.ts +0 -21
  164. package/dist/demos/mac-example.d.ts.map +0 -1
  165. package/dist/demos/mac-example.js +0 -37
  166. package/dist/demos/mac-example.js.map +0 -1
  167. package/dist/demos/timeout-demo.d.ts +0 -5
  168. package/dist/demos/timeout-demo.d.ts.map +0 -1
  169. package/dist/demos/timeout-demo.js +0 -35
  170. package/dist/demos/timeout-demo.js.map +0 -1
  171. package/dist/src/bin.d.ts +0 -3
  172. package/dist/src/bin.d.ts.map +0 -1
  173. package/dist/src/bin.js +0 -57
  174. package/dist/src/bin.js.map +0 -1
  175. package/dist/src/executor.d.ts +0 -6
  176. package/dist/src/executor.d.ts.map +0 -1
  177. package/dist/src/executor.js +0 -4
  178. package/dist/src/executor.js.map +0 -1
  179. package/dist/src/group_specs.d.ts +0 -10
  180. package/dist/src/group_specs.d.ts.map +0 -1
  181. package/dist/src/group_specs.js +0 -27
  182. package/dist/src/group_specs.js.map +0 -1
  183. package/dist/src/lib/format.d.ts.map +0 -1
  184. package/dist/src/lib/format.js.map +0 -1
  185. package/dist/src/lib/hdc.d.ts.map +0 -1
  186. package/dist/src/lib/hdc.js.map +0 -1
  187. package/dist/src/lib/host_commands.d.ts.map +0 -1
  188. package/dist/src/lib/host_commands.js +0 -108
  189. package/dist/src/lib/host_commands.js.map +0 -1
  190. package/dist/src/lib/paths.d.ts.map +0 -1
  191. package/dist/src/lib/paths.js.map +0 -1
  192. package/dist/src/lib/perf_decode.d.ts.map +0 -1
  193. package/dist/src/lib/perf_decode.js.map +0 -1
  194. package/dist/src/lib/pipeline.d.ts.map +0 -1
  195. package/dist/src/lib/pipeline.js.map +0 -1
  196. package/dist/src/lib/preflight.d.ts.map +0 -1
  197. package/dist/src/lib/preflight.js.map +0 -1
  198. package/dist/src/lib/presets.d.ts.map +0 -1
  199. package/dist/src/lib/programmatic.d.ts +0 -30
  200. package/dist/src/lib/programmatic.d.ts.map +0 -1
  201. package/dist/src/lib/programmatic.js +0 -40
  202. package/dist/src/lib/programmatic.js.map +0 -1
  203. package/dist/src/lib/report_scenario.d.ts.map +0 -1
  204. package/dist/src/lib/report_scenario.js.map +0 -1
  205. package/dist/src/lib/scenario.d.ts +0 -60
  206. package/dist/src/lib/scenario.d.ts.map +0 -1
  207. package/dist/src/lib/scenario.js +0 -85
  208. package/dist/src/lib/scenario.js.map +0 -1
  209. package/dist/src/lib/version.d.ts.map +0 -1
  210. package/dist/src/lib/version.js.map +0 -1
  211. package/dist/src/run_command.d.ts +0 -69
  212. package/dist/src/run_command.d.ts.map +0 -1
  213. package/dist/src/run_command.js +0 -367
  214. package/dist/src/run_command.js.map +0 -1
  215. package/dist/src/run_groups.d.ts +0 -39
  216. package/dist/src/run_groups.d.ts.map +0 -1
  217. package/dist/src/run_groups.js +0 -154
  218. package/dist/src/run_groups.js.map +0 -1
  219. package/dist/src/runners/background_executor.d.ts +0 -3
  220. package/dist/src/runners/background_executor.d.ts.map +0 -1
  221. package/dist/src/runners/background_executor.js +0 -3
  222. package/dist/src/runners/background_executor.js.map +0 -1
  223. package/dist/src/runners/builtin_runner.d.ts +0 -8
  224. package/dist/src/runners/builtin_runner.d.ts.map +0 -1
  225. package/dist/src/runners/builtin_runner.js +0 -66
  226. package/dist/src/runners/builtin_runner.js.map +0 -1
  227. package/dist/src/runners/embed_runner.d.ts +0 -8
  228. package/dist/src/runners/embed_runner.d.ts.map +0 -1
  229. package/dist/src/runners/embed_runner.js +0 -155
  230. package/dist/src/runners/embed_runner.js.map +0 -1
  231. package/dist/src/runners/index.d.ts +0 -7
  232. package/dist/src/runners/index.d.ts.map +0 -1
  233. package/dist/src/runners/index.js +0 -5
  234. package/dist/src/runners/index.js.map +0 -1
  235. package/dist/src/runners/platform_shell_executor.d.ts +0 -71
  236. package/dist/src/runners/platform_shell_executor.d.ts.map +0 -1
  237. package/dist/src/runners/platform_shell_executor.js +0 -158
  238. package/dist/src/runners/platform_shell_executor.js.map +0 -1
  239. package/dist/src/runners/shell_runner.d.ts +0 -8
  240. package/dist/src/runners/shell_runner.d.ts.map +0 -1
  241. package/dist/src/runners/shell_runner.js +0 -167
  242. package/dist/src/runners/shell_runner.js.map +0 -1
  243. package/dist/src/runners/types.d.ts +0 -27
  244. package/dist/src/runners/types.d.ts.map +0 -1
  245. package/dist/src/runners/types.js +0 -2
  246. package/dist/src/runners/types.js.map +0 -1
  247. package/dist/src/types.d.ts +0 -172
  248. package/dist/src/types.d.ts.map +0 -1
  249. package/dist/src/types.js +0 -175
  250. package/dist/src/types.js.map +0 -1
  251. /package/dist/src/lib/{preflight.d.ts → preflight/preflight.d.ts} +0 -0
  252. /package/dist/src/lib/{hdc.d.ts → report/hdc.d.ts} +0 -0
  253. /package/dist/src/lib/{hdc.js → report/hdc.js} +0 -0
package/README.md CHANGED
@@ -8,14 +8,38 @@
8
8
 
9
9
  - `report` 默认 `--trace-from` 由 `hitrace` 改为 **`mix`**(采集默认带 `--raw-data`,analysis 默认预处理 hitrace 并使用 **perfFirst** sidecar)。
10
10
  - 日志格式统一为行首 `[ISO8601] {级别} {正文}`(无 consola 颜色)。
11
- - 依赖升级:`hiperf_txt_parser` ^1.4、`hmtrace-parser` ^0.6;analysis trace 解码改由 pipeline 编排。
11
+ - 依赖升级:`hiperf_txt_parser` 2.0、`hm-pt-core` 1.0、`hmtrace-parser` 0.8;analysis trace 解码改由 pipeline 编排;公共类型与 trace 机制自 `hm-pt-core` 导入。
12
12
  - 若需与 0.6.x 相同默认行为,显式传入 `--trace-from hitrace`。
13
13
 
14
+ **0.8.x Agent-friendly 变更(相对早期 0.8)**
15
+
16
+ - **统一 CLI 入口**:npm 与 pkg 独立二进制共用 `src/cli.ts`,能力一致(含 `report-user`、`--list`、`--dry-run`、顶层闭环命令)。
17
+ - **默认 fail-fast**:命令套件执行遇错即停;需继续时使用 `--continue-on-error`(`--stop-on-error` 为同义显式写法)。失败时仍会补跑 `restore` 组。
18
+ - **参数校验**:`report` / `report-user` / `plan` 要求非空 `--app`;未知 `--group` 返回退出码 `2` 与稳定错误码(如 `ERROR_MISSING_APP`、`UNKNOWN_GROUP`)。
19
+ - **Shell 安全边界**:进入 Shell 或重定向的参数经统一校验——标识符白名单(`--app`、`--ability`、`--log-key`、`--hitrace-tag`、`--hdc-target` 等 → `INVALID_IDENTIFIER`);数值纯整数解析(`--duration`、`--buffer-size` → `INVALID_NUMERIC`);路径拒绝 Shell 元字符(`--output-dir`、`--hstack-tool-path`、`--sourcemap-dir` → `INVALID_PATH`)。
20
+ - **Plan 完整性**:`plan.json` 含 `commands_digest` 与 `execution_options`(如 `ignorePlatform`);`apply` 校验存储 commands 与重新生成 commands 的双摘要,并**始终**采用 plan 保存的执行选项(与 plan 不一致的 `apply --ignore-platform` 返回 `PLAN_OPTION_OVERRIDE`,需重新 `plan`);`0.x` 版本兼容比较 major+minor。
21
+ - **机器可读输出**:全局 `--output-format json`(与采集目录 `--output-dir` 无关);json 模式下 **stdout 仅 JSON**,日志写 **stderr**。
22
+ - **顶层闭环命令**:`preflight`、`plan`、`apply`、`status`、`validate`(详见下文「CLI 总览」)。
23
+ - **环境变量**:`HYPER_STARTUP_CHECKER_LOG_LEVEL`、`HYPER_STARTUP_CHECKER_BUNDLED_VERSION`(旧名 `SNAPSHOT_CHECKER_*` 仍可读)。
24
+ - **CommandSuite 命名**(依赖 `hmcommand-runner@^1.3.0`):原 `Scenario*` API 与 JSON 字段 `scenario` / `scenario_options` 分别改为 `CommandSuite*`、`command_suite` / `command_suite_options`;`plan` / `preflight` 使用 `--command-suite`。
25
+ - **命令套件源码位置**:`report` / `report-user` 定义迁至 `src/commands/`,CLI 静态注册(不再扫描目录动态加载)。
26
+
14
27
  **前置条件**
15
28
 
16
29
  - **Node.js** ≥ 18。
17
30
  - PATH 中可用 **`hdc`**,并已连接目标设备。
18
- - 本机 analysis 依赖 **`hiperf_txt_parser` ^1.4**、**`hmtrace-parser` ^0.6**(随包安装):hitrace 预处理与索引由 hmtrace 构建,样本级并行解码与 hitrace 合并由 hiperf 完成。
31
+ - 本机 analysis 依赖 **`hiperf_txt_parser` ^2.0**、**`hm-pt-core` ^1.0**、**`hmtrace-parser` ^0.8**(随 `npm install` 安装):hitrace 预处理与索引由 hmtrace 构建,公共类型与 trace 机制由 hm-pt-core 提供,样本级并行解码与 hitrace 合并由 hiperf 完成。
32
+
33
+ ## 架构与 hmcommand-runner
34
+
35
+ 自 **0.8.x** 起,命令调度与执行引擎已提取为独立 npm 包 **[`hmcommand-runner`](https://www.npmjs.com/package/hmcommand-runner)**(当前依赖 `^1.3.0`):
36
+
37
+ | 层级 | 包 / 目录 | 职责 |
38
+ |------|-----------|------|
39
+ | 执行框架 | `hmcommand-runner` | `CommandDef` 类型、组调度(`group:N`)、Shell/Builtin/Embed Runner、`registerCommandSuites` |
40
+ | 领域命令套件 | `src/commands/`、`src/lib/report/` 等 | report/report-user 命令套件、hdc/hiperf/hitrace 命令拼装与解码 |
41
+
42
+ `snapshot-checker` 的公开 API(`resolveCommandSuite`、`runCommandSuiteGroups`、`executeAll` 等)从主包 re-export(底层委托 `hmcommand-runner`)。npm 仍可通过 `snapshot-checker/commands/report` 引用命令套件模块。若只需通用命令编排框架,可直接依赖 `hmcommand-runner`。
19
43
 
20
44
  ---
21
45
 
@@ -49,6 +73,70 @@ npm start -- report --help # 或: node dist/src/cli.js report --help
49
73
  npm run dev -- report --help
50
74
  ```
51
75
 
76
+ 独立二进制(`npm run build:bin`)与 npm 全局安装共用同一套命令注册;版本号均来自 `package.json`(pkg 构建时注入 `HYPER_STARTUP_CHECKER_BUNDLED_VERSION`)。
77
+
78
+ ---
79
+
80
+ ## CLI 总览
81
+
82
+ `snapshot-checker --help` 除命令套件子命令 `report`、`report-user` 外,还提供下列**顶层命令**(`report` 与 `report-user` 输出目录结构一致,闭环命令不按套件嵌套):
83
+
84
+ | 命令 | 说明 |
85
+ | ---- | ---- |
86
+ | `preflight` | 运行前环境检查(Node、hdc、设备、应用、输出目录、命令套件权限等) |
87
+ | `plan` | 生成可保存的执行计划 `plan.json`(不连设备、不执行);默认 `--command-suite report` |
88
+ | `apply` | 按 `plan.json` 执行采集与分析,写入 `run_manifest.json`;采用 plan 中 `execution_options`,不可覆盖(不一致时退出码 `2` / `PLAN_OPTION_OVERRIDE`) |
89
+ | `status` | 读取 `run_manifest.json` 执行状态 |
90
+ | `validate` | 验收 `output-dir` 产物(必需 `dump_stack.json`) |
91
+
92
+ **推荐 Agent 顺序**:`preflight` → `plan` → `apply` → `status` → `validate`。详细契约见 [`skills/snapshot-checker/SKILL.md`](skills/snapshot-checker/SKILL.md)。
93
+
94
+ ```bash
95
+ snapshot-checker preflight --app com.example.app --output-dir ./output --output-format json
96
+ snapshot-checker plan --command-suite report --app com.example.app --output-dir ./output --output-format json
97
+ snapshot-checker apply --plan ./output/plan.json --output-format json
98
+ snapshot-checker status --output-dir ./output --output-format json
99
+ snapshot-checker validate --output-dir ./output --output-format json
100
+ ```
101
+
102
+ ### 全局选项
103
+
104
+ 对各子命令均生效(含顶层命令与 `report` / `report-user`):
105
+
106
+ | 选项 | 说明 |
107
+ | ---- | ---- |
108
+ | `--output-format <text\|json>` | CLI 结果写出格式,默认 `text`;**与 `--output-dir`(采集产物目录)无关** |
109
+ | `--log-level <level>` | 日志级别;未设则读环境变量,默认 `info` |
110
+ | `--log-file [path]` | 日志追加写文件;省略 path 时写入 `<output-dir>/workspace/checker.log` |
111
+ | `--hdc-target <sn>` | 全部 `hdc` 命令加 `-t <sn>` |
112
+ | `--parse-concurrency <n>` | perf 加载与 trace 解码 Worker 数,默认 `1` |
113
+
114
+ ### `--output-format json`
115
+
116
+ - **stdout**:仅一行 JSON(含 `schema_version: "1"`、`ok`、命令结果或 `error.code`)。
117
+ - **stderr**:结构化日志与进度;自动设置 `NO_COLOR=1`。
118
+ - 适用于 `--list`、`--dry-run`、正式执行,以及 `preflight` / `plan` / `apply` / `status` / `validate`。
119
+
120
+ ### 退出码
121
+
122
+ | 退出码 | 含义 |
123
+ | ------ | ---- |
124
+ | `0` | 成功 |
125
+ | `1` | 执行失败、验收失败、preflight 有 `fail` 检查项 |
126
+ | `2` | 参数/契约错误(如缺 `--app`、未知 `--group`、Shell 参数非法、plan 文件无效或摘要不匹配) |
127
+
128
+ 常见 `error.code`:`ERROR_MISSING_APP`、`ERROR_MISSING_ABILITY`、`UNKNOWN_GROUP`、`INVALID_IDENTIFIER`、`INVALID_NUMERIC`、`INVALID_PATH`、`PLAN_CHANGED`、`PLAN_VERSION_MISMATCH`、`PLAN_OPTION_OVERRIDE`、`PLAN_NOT_FOUND`、`MANIFEST_NOT_FOUND`、`MANIFEST_INVALID_JSON`、`MANIFEST_UNSUPPORTED_SCHEMA`。完整列表见 [`skills/snapshot-checker/references/error_codes.md`](skills/snapshot-checker/references/error_codes.md)。
129
+
130
+ ### 环境变量
131
+
132
+ | 变量 | 说明 |
133
+ | ---- | ---- |
134
+ | `HYPER_STARTUP_CHECKER_LOG_LEVEL` | 默认日志级别(优先于 `LOG_LEVEL`) |
135
+ | `HYPER_STARTUP_CHECKER_BUNDLED_VERSION` | pkg 二进制嵌入版本(构建注入) |
136
+ | `NO_COLOR` / `FORCE_COLOR` | 控制台颜色 |
137
+
138
+ 旧名 `SNAPSHOT_CHECKER_LOG_LEVEL`、`SNAPSHOT_CHECKER_BUNDLED_VERSION` 仍可读,建议迁移至上表新名。
139
+
52
140
  ---
53
141
 
54
142
  ## `report` 命令
@@ -70,7 +158,7 @@ checkpoint 镜像失效等风险的专项采集与分析。按 `--risk-targets`
70
158
 
71
159
  ### analysis 阶段 trace 解码
72
160
 
73
- analysis 通过 `src/lib/pipeline.ts` 的 pipeline 执行,trace 解码由 `src/lib/perf_decode.ts` 编排(不再在 checker 内逐样本循环):
161
+ analysis 通过 `src/lib/report/pipeline.ts` 的 pipeline 执行,trace 解码由 `src/lib/report/decode.ts` 编排(不再在 checker 内逐样本循环):
74
162
 
75
163
  1. 按 `--trace-format-profile`(或 `auto` 时从设备读取的 format)构建 trace registry。
76
164
  2. 若 `--trace-from` 为 `hitrace` 或 `mix`:主线程一次调用 `hmtrace-parser` 的 `buildHitraceIndexSnapshot` 解析 `workspace/hyperstart_hitrace.txt`。
@@ -99,7 +187,7 @@ analysis 通过 `src/lib/pipeline.ts` 的 pipeline 执行,trace 解码由 `src
99
187
 
100
188
  | 选项 | 说明 |
101
189
  | ---- | ---- |
102
- | `--app <app>` | 应用包名 |
190
+ | `--app <app>` | 应用包名(**`--list` / `--dry-run` / 正式执行均必填**) |
103
191
  | `--risk-targets <targets>` | 风险事件类型,默认 `all` |
104
192
  | `--trace-from <source>` | **采集**:hiperf record 是否 `--raw-data`(`mix` 默认带,`hiperf` 带,`hitrace` 不带)。**analysis**:是否预处理 hitrace 及 sidecar 策略(见上表);与 `--trace-format-profile` 独立 |
105
193
  | `--hstack-tool-path <path>` | hstack 可执行文件;不配置则跳过 |
@@ -116,13 +204,16 @@ analysis 通过 `src/lib/pipeline.ts` 的 pipeline 执行,trace 解码由 `src
116
204
  | `--skip-non-backtrack` | `backtrackFS` 使用 `keepNonFsRevoked: false` |
117
205
  | `--drop-failed-samples` | 丢弃无 trace 解析器的 raw 样本 |
118
206
 
119
- **全局选项**(对各子命令均生效)
207
+ **全局选项**(对各子命令均生效;完整说明见上文「CLI 总览」)
120
208
 
121
209
  | 选项 | 说明 |
122
210
  | ---- | ---- |
123
211
  | `--hdc-target <sn>` | 全部 `hdc` 命令加 `-t <sn>` |
124
212
  | `--parse-concurrency <n>` | perf **加载**与 **trace 解码** 的 Worker 数,默认 `1`;`profile=auto` 且 format 含主线程 `transformFieldDict` 时解码回退单线程 |
213
+ | `--output-format <text\|json>` | CLI 结果格式,默认 `text` |
214
+ | `--log-level <level>` | 覆盖环境变量中的默认日志级别 |
125
215
  | `--log-file [path]` | 日志追加写文件;省略 path 时写入 `<output-dir>/workspace/checker.log` |
216
+ | `--continue-on-error` | 忽略失败并继续后续阶段(默认遇错即停) |
126
217
 
127
218
  ### 使用方式
128
219
 
@@ -149,7 +240,7 @@ analysis 通过 `src/lib/pipeline.ts` 的 pipeline 执行,trace 解码由 `src
149
240
  **`--list` 输出格式**(节选):
150
241
 
151
242
  ```text
152
- [report] 场景命令(按 group 展示):
243
+ [report] 命令套件(按 group 展示):
153
244
 
154
245
  Group: init
155
246
  [mac] hdc shell remount — hdc shell remount
@@ -179,12 +270,15 @@ Group: monitor
179
270
 
180
271
  ```text
181
272
  output/
273
+ ├── plan.json # plan 命令生成(执行前)
274
+ ├── run_manifest.json # apply 写入(执行状态)
182
275
  ├── dump_stack.txt # 最终调用栈(文本)
183
- ├── dump_stack.json # 同上(JSON
276
+ ├── dump_stack.json # 同上(JSON);validate 必需
184
277
  ├── dump_stack.xlsx # 同上(Excel)
185
278
  ├── perf_txt/
186
279
  │ └── hyperstart_perf.data.txt # 设备 hiperf dump 文本
187
280
  └── workspace/ # 中间产物
281
+ ├── checker.log # --log-file 默认路径
188
282
  ├── hyperstart_log.txt # hilog 采集
189
283
  ├── hyperstart_hitrace.txt
190
284
  ├── perf.data
@@ -274,6 +368,20 @@ snapshot-checker report --app com.example.app --output-dir ./output
274
368
 
275
369
  **常见错误**
276
370
 
371
+ 缺 `--app`(退出码 `2`):
372
+
373
+ ```bash
374
+ snapshot-checker report --dry-run
375
+ # ERROR_MISSING_APP: report requires --app <bundle_name>.
376
+ ```
377
+
378
+ 未知 `--group`(退出码 `2`,json 模式含 `available_groups`):
379
+
380
+ ```bash
381
+ snapshot-checker report --dry-run --app com.example.app --group missing
382
+ # UNKNOWN_GROUP: Group 'missing' does not exist.
383
+ ```
384
+
277
385
  无效 `--trace-from` 值会直接报错并退出,例如:
278
386
 
279
387
  ```bash
@@ -297,57 +405,66 @@ snapshot-checker report-user --dry-run --app com.example.app --ability EntryAbil
297
405
 
298
406
  ---
299
407
 
300
- ## `forkall` 命令(已过时)
408
+ ## 测试
301
409
 
302
- > **已过时**:请改用 `report`。`forkall` 仅保留兼容,后续可能移除。
410
+ ```bash
411
+ npm test # 单元与集成
412
+ npm run test:perf # 性能回归
413
+ npm run test:all # 全部
414
+ npm run format # Prettier 格式化 src / tests
415
+ npm run format:check # 仅检查格式(CI 可用)
416
+ ```
303
417
 
304
- 针对单一 `--event-path` 做监控或「改配置后重启再采」。支持 `--mode monitor`(默认)与 `reboot-monitor`。详见 `snapshot-checker forkall --help` 或 `commands/forkall.ts`。
418
+ ### Agent 调用与评测
419
+
420
+ Agent 相关能力已接入 CLI 与测试;**契约细节以 Skill 为准**,README「CLI 总览」提供速查。
421
+
422
+ - 技能文档:[`skills/snapshot-checker/SKILL.md`](skills/snapshot-checker/SKILL.md)
423
+ - 集成说明:[`skills/INTEGRATION.md`](skills/INTEGRATION.md)
424
+ - 端到端评测:`tests/agent_e2e.test.ts`(仅解析 JSON 与退出码,无需真实设备)
425
+ - 安全与 Plan 完整性:`tests/shell_identifiers.test.ts`、`tests/shell_params.test.ts`、`tests/plan_integrity.test.ts`
305
426
 
306
427
  ```bash
307
- snapshot-checker forkall --event-path checkpoint/vfs_snapshot_dump_monitor --app com.example.app
428
+ npm run test -- tests/agent_e2e.test.ts
308
429
  ```
309
430
 
310
- ---
311
-
312
- ## 测试
431
+ 离线预览计划(无需设备):
313
432
 
314
433
  ```bash
315
- npm test # 单元与集成
316
- npm run test:perf # 性能回归
317
- npm run test:all # 全部
318
- npm run format # Prettier 格式化 src / commands / tests / demos
319
- npm run format:check # 仅检查格式(CI 可用)
434
+ snapshot-checker plan --command-suite report --app com.example.app --output-dir ./output --output-format json
435
+ # 等价:snapshot-checker report --dry-run --app com.example.app --output-format json
320
436
  ```
321
437
 
322
438
  ## 作为库使用
323
439
 
324
440
  ```ts
325
- import { resolveScenario, runScenarioGroups } from "snapshot-checker";
441
+ import { resolveCommandSuite, runCommandSuiteGroups } from "snapshot-checker";
326
442
  import * as report from "snapshot-checker/commands/report";
327
443
 
328
444
  // dryRun: true 与 CLI --dry-run 相同,applyOptions 不会创建 outputDir
329
- const { groups, defaultGroupOrder } = resolveScenario(
445
+ const { groups, defaultGroupOrder } = resolveCommandSuite(
330
446
  report,
331
447
  { app: "com.example.app", riskTargets: "all", dryRun: true },
332
448
  { hdcTarget: "DEVICE01" },
333
449
  );
334
450
 
335
- await runScenarioGroups({ groups, defaultGroupOrder, stopOnError: true });
451
+ await runCommandSuiteGroups({ groups, defaultGroupOrder });
336
452
  ```
337
453
 
338
- 独立示例:`demos/consumer-app`(见该目录 `README.md`)。
454
+ 默认遇错即停;需忽略失败继续时传 `stopOnError: false`。
339
455
 
340
456
  ---
341
457
 
342
- ## CLI 场景框架
458
+ ## CLI 命令套件框架
459
+
460
+ 本工具将 `src/commands/*.ts` 静态注册为子命令,并由顶层命令提供 Agent 闭环(见「CLI 总览」)。每个命令套件导出 **`groups`**、**`defaultGroupOrder`**,可选 **`options`** 与 **`applyOptions(opts)`**。
343
461
 
344
- 本工具按命名场景(`commands/*.ts`、`demos/*.ts`)注册子命令。每个场景导出 **`groups`**、**`defaultGroupOrder`**,可选 **`options`** 与 **`applyOptions(opts)`**。
462
+ - **`src/commands/`**:设备联调命令套件,**`report`**(主套件)、**`report-user`**(无 hidumper/revoke_switch 权限)。
463
+ - **`src/lib/`**:领域实现(如 `lib/report/decode.ts`、`lib/report/pipeline.ts`、`lib/report/command_suite.ts`);调度类型与执行器来自 **`hmcommand-runner`**。
345
464
 
346
- - **`commands/`**:设备联调场景,主场景 **`report`**、**`report-user`**(无 hidumper/revoke_switch 权限);**`forkall`** 已过时(analysis 默认 `--trace-from mix`)。
347
- - **`demos/`**:示例场景(`context-demo`、`timeout-demo` 等)。
348
- - **`src/`**:实现采用 **下划线** 源文件名(如 `group_specs.ts`、`run_command.ts`、`lib/perf_decode.ts`、`runners/platform_shell_executor.ts`)。
465
+ `plan.json` 主要字段:`command_suite`、`command_suite_options`、`commands`、`commands_digest`、`execution_options`(如 `ignorePlatform`)、`tool_version`;`plan --output-format json` stdout `ok: true`、`command: "plan"`。`run_manifest.json` 与 preflight JSON 中套件标识同为 `command_suite`。
349
466
 
350
- 通用开关(各场景子命令可用):`--list`、`--dry-run`、`--stop-on-error`、`-g,--group`、`--wait`、`--silent` 等。完整列表见 `snapshot-checker <scene> --help`。
467
+ 命令套件子命令通用开关:`--list`、`--dry-run`、`-g,--group`、`--wait`、`--silent`、`--continue-on-error` 等。完整列表见 `snapshot-checker <command> --help`。
351
468
 
352
469
  ### License
353
470
 
package/dist/src/cli.d.ts CHANGED
@@ -1,3 +1,12 @@
1
1
  #!/usr/bin/env node
2
- export {};
2
+ import type { Command } from "commander";
3
+ export declare function createHyperStartUpCheckerProgram(): Command;
4
+ export interface RunHyperStartUpCheckerCliOptions {
5
+ /** 是否在解析前执行 pkg 二进制 preflight(默认 true) */
6
+ preflight?: boolean;
7
+ /** 自定义 argv,默认 `process.argv` */
8
+ argv?: readonly string[];
9
+ }
10
+ /** 注册场景子命令并解析 CLI(npm 与独立二进制共用)。 */
11
+ export declare function runHyperStartUpCheckerCli(options?: RunHyperStartUpCheckerCliOptions): Promise<void>;
3
12
  //# sourceMappingURL=cli.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA+CzC,wBAAgB,gCAAgC,IAAI,OAAO,CAoC1D;AAED,MAAM,WAAW,gCAAgC;IAC/C,0CAA0C;IAC1C,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,iCAAiC;IACjC,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC1B;AAED,oCAAoC;AACpC,wBAAsB,yBAAyB,CAC7C,OAAO,GAAE,gCAAqC,GAC7C,OAAO,CAAC,IAAI,CAAC,CAsFf"}