snapshot-checker 0.6.4 → 0.7.4

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 (131) hide show
  1. package/README.md +203 -11
  2. package/dist/commands/forkall.d.ts.map +1 -1
  3. package/dist/commands/forkall.js +23 -16
  4. package/dist/commands/forkall.js.map +1 -1
  5. package/dist/commands/report-user.d.ts +25 -0
  6. package/dist/commands/report-user.d.ts.map +1 -0
  7. package/dist/commands/report-user.js +17 -0
  8. package/dist/commands/report-user.js.map +1 -0
  9. package/dist/commands/report.d.ts +1 -26
  10. package/dist/commands/report.d.ts.map +1 -1
  11. package/dist/commands/report.js +6 -417
  12. package/dist/commands/report.js.map +1 -1
  13. package/dist/demos/timeout-demo.d.ts.map +1 -1
  14. package/dist/demos/timeout-demo.js +1 -1
  15. package/dist/demos/timeout-demo.js.map +1 -1
  16. package/dist/src/bin.d.ts +3 -0
  17. package/dist/src/bin.d.ts.map +1 -0
  18. package/dist/src/bin.js +57 -0
  19. package/dist/src/bin.js.map +1 -0
  20. package/dist/src/cli.js +28 -48
  21. package/dist/src/cli.js.map +1 -1
  22. package/dist/src/executor.d.ts +5 -5
  23. package/dist/src/executor.d.ts.map +1 -1
  24. package/dist/src/executor.js +3 -3
  25. package/dist/src/executor.js.map +1 -1
  26. package/dist/src/{groupSpecs.d.ts → group_specs.d.ts} +2 -2
  27. package/dist/src/group_specs.d.ts.map +1 -0
  28. package/dist/src/{groupSpecs.js → group_specs.js} +1 -1
  29. package/dist/src/group_specs.js.map +1 -0
  30. package/dist/src/index.d.ts +3 -3
  31. package/dist/src/index.d.ts.map +1 -1
  32. package/dist/src/index.js +2 -2
  33. package/dist/src/index.js.map +1 -1
  34. package/dist/src/lib/format.d.ts +30 -0
  35. package/dist/src/lib/format.d.ts.map +1 -0
  36. package/dist/src/lib/format.js +76 -0
  37. package/dist/src/lib/format.js.map +1 -0
  38. package/dist/src/lib/{hostCommands.d.ts → host_commands.d.ts} +6 -1
  39. package/dist/src/lib/host_commands.d.ts.map +1 -0
  40. package/dist/src/lib/{hostCommands.js → host_commands.js} +9 -1
  41. package/dist/src/lib/host_commands.js.map +1 -0
  42. package/dist/src/lib/perf_decode.d.ts +25 -0
  43. package/dist/src/lib/perf_decode.d.ts.map +1 -0
  44. package/dist/src/lib/perf_decode.js +90 -0
  45. package/dist/src/lib/perf_decode.js.map +1 -0
  46. package/dist/src/lib/pipeline.d.ts +114 -0
  47. package/dist/src/lib/pipeline.d.ts.map +1 -0
  48. package/dist/src/lib/pipeline.js +312 -0
  49. package/dist/src/lib/pipeline.js.map +1 -0
  50. package/dist/src/lib/preflight.d.ts +2 -0
  51. package/dist/src/lib/preflight.d.ts.map +1 -0
  52. package/dist/src/lib/preflight.js +45 -0
  53. package/dist/src/lib/preflight.js.map +1 -0
  54. package/dist/src/lib/presets.d.ts +53 -27
  55. package/dist/src/lib/presets.d.ts.map +1 -1
  56. package/dist/src/lib/presets.js +196 -215
  57. package/dist/src/lib/presets.js.map +1 -1
  58. package/dist/src/lib/programmatic.d.ts +30 -0
  59. package/dist/src/lib/programmatic.d.ts.map +1 -0
  60. package/dist/src/lib/programmatic.js +40 -0
  61. package/dist/src/lib/programmatic.js.map +1 -0
  62. package/dist/src/lib/report_scenario.d.ts +50 -0
  63. package/dist/src/lib/report_scenario.d.ts.map +1 -0
  64. package/dist/src/lib/report_scenario.js +501 -0
  65. package/dist/src/lib/report_scenario.js.map +1 -0
  66. package/dist/src/lib/scenario.d.ts +1 -1
  67. package/dist/src/lib/scenario.d.ts.map +1 -1
  68. package/dist/src/lib/scenario.js +3 -4
  69. package/dist/src/lib/scenario.js.map +1 -1
  70. package/dist/src/lib/version.d.ts +12 -0
  71. package/dist/src/lib/version.d.ts.map +1 -0
  72. package/dist/src/lib/version.js +51 -0
  73. package/dist/src/lib/version.js.map +1 -0
  74. package/dist/src/logger.d.ts +31 -1
  75. package/dist/src/logger.d.ts.map +1 -1
  76. package/dist/src/logger.js +182 -16
  77. package/dist/src/logger.js.map +1 -1
  78. package/dist/src/{runCommand.d.ts → run_command.d.ts} +1 -1
  79. package/dist/src/run_command.d.ts.map +1 -0
  80. package/dist/src/{runCommand.js → run_command.js} +5 -6
  81. package/dist/src/run_command.js.map +1 -0
  82. package/dist/src/{runGroups.d.ts → run_groups.d.ts} +12 -3
  83. package/dist/src/run_groups.d.ts.map +1 -0
  84. package/dist/src/{runGroups.js → run_groups.js} +28 -13
  85. package/dist/src/run_groups.js.map +1 -0
  86. package/dist/src/runners/{backgroundExecutor.d.ts → background_executor.d.ts} +3 -3
  87. package/dist/src/runners/background_executor.d.ts.map +1 -0
  88. package/dist/src/runners/{backgroundExecutor.js → background_executor.js} +3 -3
  89. package/dist/src/runners/background_executor.js.map +1 -0
  90. package/dist/src/runners/{builtinRunner.d.ts → builtin_runner.d.ts} +1 -1
  91. package/dist/src/runners/builtin_runner.d.ts.map +1 -0
  92. package/dist/src/runners/{builtinRunner.js → builtin_runner.js} +1 -1
  93. package/dist/src/runners/builtin_runner.js.map +1 -0
  94. package/dist/src/runners/{embedRunner.d.ts → embed_runner.d.ts} +1 -1
  95. package/dist/src/runners/embed_runner.d.ts.map +1 -0
  96. package/dist/src/runners/{embedRunner.js → embed_runner.js} +2 -2
  97. package/dist/src/runners/{embedRunner.js.map → embed_runner.js.map} +1 -1
  98. package/dist/src/runners/index.d.ts +5 -5
  99. package/dist/src/runners/index.d.ts.map +1 -1
  100. package/dist/src/runners/index.js +4 -4
  101. package/dist/src/runners/index.js.map +1 -1
  102. package/dist/src/runners/{platformShellExecutor.d.ts → platform_shell_executor.d.ts} +1 -1
  103. package/dist/src/runners/platform_shell_executor.d.ts.map +1 -0
  104. package/dist/src/runners/{platformShellExecutor.js → platform_shell_executor.js} +2 -2
  105. package/dist/src/runners/platform_shell_executor.js.map +1 -0
  106. package/dist/src/runners/{shellRunner.d.ts → shell_runner.d.ts} +1 -1
  107. package/dist/src/runners/shell_runner.d.ts.map +1 -0
  108. package/dist/src/runners/{shellRunner.js → shell_runner.js} +11 -16
  109. package/dist/src/runners/shell_runner.js.map +1 -0
  110. package/dist/src/runners/types.d.ts.map +1 -1
  111. package/dist/src/types.d.ts +2 -2
  112. package/dist/src/types.d.ts.map +1 -1
  113. package/dist/src/types.js.map +1 -1
  114. package/package.json +13 -4
  115. package/dist/src/groupSpecs.d.ts.map +0 -1
  116. package/dist/src/groupSpecs.js.map +0 -1
  117. package/dist/src/lib/hostCommands.d.ts.map +0 -1
  118. package/dist/src/lib/hostCommands.js.map +0 -1
  119. package/dist/src/runCommand.d.ts.map +0 -1
  120. package/dist/src/runCommand.js.map +0 -1
  121. package/dist/src/runGroups.d.ts.map +0 -1
  122. package/dist/src/runGroups.js.map +0 -1
  123. package/dist/src/runners/backgroundExecutor.d.ts.map +0 -1
  124. package/dist/src/runners/backgroundExecutor.js.map +0 -1
  125. package/dist/src/runners/builtinRunner.d.ts.map +0 -1
  126. package/dist/src/runners/builtinRunner.js.map +0 -1
  127. package/dist/src/runners/embedRunner.d.ts.map +0 -1
  128. package/dist/src/runners/platformShellExecutor.d.ts.map +0 -1
  129. package/dist/src/runners/platformShellExecutor.js.map +0 -1
  130. package/dist/src/runners/shellRunner.d.ts.map +0 -1
  131. package/dist/src/runners/shellRunner.js.map +0 -1
@@ -1,428 +1,17 @@
1
- import { CommandKind, SHELL_PLATFORM_KINDS } from "../src/types.js";
2
- import path from "node:path";
3
- import { existsSync, mkdirSync } from "node:fs";
4
- import { AUTO_TRACE_FORMAT_PROFILE, buildCommonAnalysisGroup, buildCommonAnalysisTargetFilterGroup, buildCommonCollectGroup, buildCommonInitEnvGroup, buildCommonRestoreEnvGroup, resolveParseConcurrency, selectFirstValidPerfInput, TRACE_FORMAT_PROFILE_CLI_DESCRIPTION, } from "../src/lib/presets.js";
5
- import { createHdcCli } from "../src/lib/hdc.js";
6
- import { ensureTrailingSeparator, normalizeCliOutputDir, } from "../src/lib/paths.js";
7
- import { logger } from "../src/logger.js";
1
+ import { applyReportScenarioOptions, REPORT_DEFAULT_GROUP_ORDER, REPORT_OPTIONS, } from "../src/lib/report_scenario.js";
8
2
  /** report 场景占位;内容由 `applyOptions` 注入 */
9
3
  export const groups = {};
10
- export const defaultGroupOrder = [
11
- "init",
12
- "monitor",
13
- "collect",
14
- "restore",
15
- "filter",
16
- "analysis",
17
- ];
18
- /** backtrack / direct 当前共用同一 hitrace tag */
19
- const RISK_TARGET_DEFINITIONS = {
20
- backtrack: {
21
- key: "backtrack",
22
- displayName: "失效回溯",
23
- hitraceTag: "hyperstart",
24
- hiperfEvent: "checkpoint:vfs_snapshot_dump_monitor",
25
- formatPath: "/sys/kernel/tracing/events/checkpoint/vfs_snapshot_dump_monitor/format",
26
- },
27
- direct: {
28
- key: "direct",
29
- displayName: "直接失效",
30
- hitraceTag: "hyperstart",
31
- hiperfEvent: "checkpoint:checkpoint_revoked",
32
- formatPath: "/sys/kernel/tracing/events/checkpoint/checkpoint_revoked/format",
33
- },
34
- };
35
- const DEFAULT_RISK_TARGETS = Object.keys(RISK_TARGET_DEFINITIONS);
36
- /** 与 {@link RISK_TARGET_DEFINITIONS} 同步:各 key 及展示名,供 CLI 与校验错误信息复用 */
37
- const RISK_TARGETS_LABELLED_KEYS = Object.keys(RISK_TARGET_DEFINITIONS)
38
- .map((k) => `${k}(${RISK_TARGET_DEFINITIONS[k].displayName})`)
39
- .join("、");
40
- /** `--risk-targets` 选项说明(随 {@link RISK_TARGET_DEFINITIONS} 自动更新) */
41
- const RISK_TARGETS_CLI_DESCRIPTION = `风险事件类型,逗号分隔:${RISK_TARGETS_LABELLED_KEYS};all 为全部;默认 all`;
42
- const TRACE_FROM_VALUES = ["hiperf", "hitrace", "mix"];
43
- /** `--trace-from` 选项说明 */
44
- const TRACE_FROM_CLI_DESCRIPTION = "hiperf record 是否带 --raw-data:hitrace(默认,不带)、hiperf / mix(带);与 --trace-format-profile 无关";
4
+ export const defaultGroupOrder = [...REPORT_DEFAULT_GROUP_ORDER];
45
5
  export const options = [
6
+ ...REPORT_OPTIONS,
46
7
  {
47
- flags: "--app <app>",
48
- description: "应用包名",
49
- helpGroup: "场景与工具链",
50
- },
51
- {
52
- flags: "--hstack-tool-path <path>",
53
- description: "hstack 可执行文件路径",
8
+ flags: "--user-start-app",
9
+ description: "monitor 阶段通过 uinput/power-shell 模拟点击启动应用,替代 hidumper forkall --create",
54
10
  helpGroup: "场景与工具链",
55
11
  },
56
- {
57
- flags: "--sourcemap-dir <path>",
58
- description: "sourcemap 根目录",
59
- helpGroup: "场景与工具链",
60
- },
61
- {
62
- flags: "--log-key <key>",
63
- description: "日志匹配字段,默认 pid",
64
- defaultValue: "pid",
65
- helpGroup: "采集与输出",
66
- },
67
- {
68
- flags: "--duration <seconds>",
69
- description: "采集时长(秒),默认 70",
70
- defaultValue: "70",
71
- helpGroup: "采集与输出",
72
- },
73
- {
74
- flags: "--backtrack-delay <seconds>",
75
- description: "monitor 阶段后台状态检测命令的启动延迟(秒),默认 80;对应 backgroundDelayMs",
76
- defaultValue: "80",
77
- helpGroup: "采集与输出",
78
- },
79
- {
80
- flags: "--risk-collect-wait <seconds>",
81
- description: "开始收集风险事件(hitrace/hiperf)前的等待秒数,默认 0(不等待);大于 0 时先 sleep 再采集",
82
- defaultValue: "0",
83
- helpGroup: "采集与输出",
84
- },
85
- {
86
- flags: "--buffer-size <bytes>",
87
- description: "hitrace 缓冲区(字节),默认 512000",
88
- defaultValue: "512000",
89
- helpGroup: "采集与输出",
90
- },
91
- {
92
- flags: "--output-dir <path>",
93
- description: "输出根目录,默认 ./output",
94
- defaultValue: "./output",
95
- helpGroup: "采集与输出",
96
- },
97
- {
98
- flags: "--risk-targets <targets>",
99
- description: RISK_TARGETS_CLI_DESCRIPTION,
100
- defaultValue: "all",
101
- helpGroup: "采集与输出",
102
- },
103
- {
104
- flags: "--trace-from <source>",
105
- description: TRACE_FROM_CLI_DESCRIPTION,
106
- defaultValue: "hitrace",
107
- helpGroup: "采集与输出",
108
- },
109
- {
110
- flags: "--trace-format-profile <name>",
111
- description: TRACE_FORMAT_PROFILE_CLI_DESCRIPTION,
112
- defaultValue: "default",
113
- helpGroup: "解码与栈分析",
114
- },
115
- {
116
- flags: "--skip-perf-dedupe",
117
- description: "跳过解码后 dedupePerfData",
118
- helpGroup: "解码与栈分析",
119
- },
120
- {
121
- flags: "--skip-backtrack",
122
- description: "跳过解码后 backtrackFS;风险目标含 backtrack 时默认会执行;不影响采集",
123
- helpGroup: "解码与栈分析",
124
- },
125
- {
126
- flags: "--skip-non-backtrack",
127
- description: "backtrackFS 使用 keepNonFsRevoked: false;未跑 backtrackFS 时不生效",
128
- helpGroup: "解码与栈分析",
129
- },
130
- {
131
- flags: "--drop-failed-samples",
132
- description: "decodePerfRawData 丢弃无对应 trace 解析器的 raw 样本(dropFailedSamples)",
133
- helpGroup: "解码与栈分析",
134
- },
135
12
  ];
136
- const PERF_INPUT_CONTEXT_KEY = "perf_input_file";
137
- /** 与 forkall 一致:输出根目录下中间文件目录名(含日志、hitrace、perf.data、hstack 产物等,不含 dump_stack*) */
138
- const WORKSPACE_SUBDIR = "workspace";
139
- function parseRiskTargets(rawValue) {
140
- if (!rawValue || rawValue.trim() === "" || rawValue.trim() === "all") {
141
- return [...DEFAULT_RISK_TARGETS];
142
- }
143
- const entries = rawValue
144
- .split(",")
145
- .map((item) => item.trim().toLowerCase())
146
- .filter(Boolean);
147
- if (entries.length === 0) {
148
- return [...DEFAULT_RISK_TARGETS];
149
- }
150
- const uniqueKeys = Array.from(new Set(entries));
151
- if (uniqueKeys.includes("all")) {
152
- return [...DEFAULT_RISK_TARGETS];
153
- }
154
- const invalidKeys = uniqueKeys.filter((key) => !(key in RISK_TARGET_DEFINITIONS));
155
- if (invalidKeys.length > 0) {
156
- throw new Error(`[风险抓取目标] 不支持的风险类型: ${invalidKeys.join(", ")}。可选值: all、${RISK_TARGETS_LABELLED_KEYS}`);
157
- }
158
- return uniqueKeys;
159
- }
160
- function parseTraceFrom(rawValue) {
161
- const normalized = (rawValue ?? "hitrace").trim().toLowerCase();
162
- if (!TRACE_FROM_VALUES.includes(normalized)) {
163
- throw new Error(`[--trace-from] 无效值: ${JSON.stringify(rawValue)}。可选: ${TRACE_FROM_VALUES.join("、")}`);
164
- }
165
- return normalized;
166
- }
167
- /** monitor 阶段「收集风险事件数据」shell 片段(不含 hdc shell 引号包裹) */
168
- function buildRiskCollectShellBody(input) {
169
- const { traceFrom, hitraceTags, bufferSize, duration, hiperfEvents, app, startAppCommand, } = input;
170
- const hiperfRawData = traceFrom === "hiperf" || traceFrom === "mix" ? " --raw-data" : "";
171
- const parts = [
172
- `hitrace ${hitraceTags} --overwrite -b ${bufferSize} -t ${duration} -o /data/local/tmp/snapshot_hitrace.txt & `,
173
- `hiperf record${hiperfRawData} -e ${hiperfEvents} --period 1 -s fp --clockid boottime --callchain-useronly --cpu-limit 100 -o /data/local/tmp/perf.data -p {{monitor_target}} -d ${duration} & `,
174
- "sleep 1 && ",
175
- ];
176
- if (app) {
177
- parts.push(`${startAppCommand} && `);
178
- }
179
- parts.push("wait && hiperf dump -i /data/local/tmp/perf.data -o /data/local/tmp/snapshot_perf.data.txt");
180
- return parts.join("");
181
- }
182
- function buildMonitorGroup(input) {
183
- const { hdcCli, logKey, bufferSize, duration, backgroundDelayMs, riskCollectWaitSec, app, snapshotLogFile, startAppCommand, checkStateCommand, riskTargets, traceFrom, } = input;
184
- const hitraceTags = [
185
- ...new Set(riskTargets.map((target) => target.hitraceTag)),
186
- ].join(" ");
187
- const hiperfEvents = riskTargets.map((target) => target.hiperfEvent).join(",");
188
- const riskCollectShellBody = buildRiskCollectShellBody({
189
- traceFrom,
190
- hitraceTags,
191
- bufferSize,
192
- duration,
193
- hiperfEvents,
194
- app,
195
- startAppCommand,
196
- });
197
- return [
198
- {
199
- kind: SHELL_PLATFORM_KINDS,
200
- description: "收集日志到本地",
201
- background: true,
202
- run: `${hdcCli.shell(`"hilog -t kmsg | grep ${logKey}"`)} >> ${snapshotLogFile}`,
203
- },
204
- ...(riskCollectWaitSec > 0
205
- ? [
206
- {
207
- kind: CommandKind.Embed,
208
- description: `等待 ${riskCollectWaitSec} 秒后开始收集风险事件数据`,
209
- run: `sleep ${riskCollectWaitSec}`,
210
- },
211
- ]
212
- : []),
213
- {
214
- kind: SHELL_PLATFORM_KINDS,
215
- run: hdcCli.shell("pidof apppool"),
216
- captureToVar: {
217
- name: "apppool_pids",
218
- },
219
- },
220
- {
221
- kind: CommandKind.Builtin,
222
- description: "提取 monitor_target",
223
- func: (ctx) => {
224
- const apppoolPids = ctx.get("apppool_pids");
225
- if (!apppoolPids) {
226
- logger.warn("[monitor] 无 apppool_pids,跳过");
227
- return false;
228
- }
229
- const monitorTarget = apppoolPids.split(/\s+/).join(",");
230
- ctx.set("monitor_target", monitorTarget);
231
- logger.info(`[monitor] target=${monitorTarget}`);
232
- },
233
- },
234
- {
235
- kind: SHELL_PLATFORM_KINDS,
236
- description: "在设备端输出操作提示并执行状态检测",
237
- background: true,
238
- backgroundDelayMs,
239
- run: hdcCli.shell(`"echo '=== 请按测试要求在设备上完成操作(以下为状态检测输出)===' && ${checkStateCommand}"`),
240
- },
241
- {
242
- kind: SHELL_PLATFORM_KINDS,
243
- description: "收集风险事件数据",
244
- run: `${hdcCli.prefix} shell "${riskCollectShellBody}"`,
245
- },
246
- ];
247
- }
248
- function buildAnalysisPreDecodeCommands(input) {
249
- const { snapshotPerfFile, parsedSnapshotPerfFile, hstackToolPathNormalized, perfTextDir, workspaceDirNormalized, sourcemapDirNormalized, } = input;
250
- return [
251
- ...(hstackToolPathNormalized
252
- ? [
253
- {
254
- kind: SHELL_PLATFORM_KINDS,
255
- description: "hstack 解析 perf",
256
- run: `${hstackToolPathNormalized} -i ${perfTextDir} -o ${workspaceDirNormalized} -s ${sourcemapDirNormalized}`,
257
- },
258
- ]
259
- : [
260
- {
261
- kind: CommandKind.Builtin,
262
- description: "无 hstack,跳过解析",
263
- func: () => {
264
- logger.warn("[hstack] 未配置,跳过解析");
265
- },
266
- },
267
- ]),
268
- {
269
- kind: CommandKind.Builtin,
270
- description: "选择 perf 输入",
271
- func: (ctx) => {
272
- const candidates = hstackToolPathNormalized
273
- ? [parsedSnapshotPerfFile, snapshotPerfFile]
274
- : [snapshotPerfFile];
275
- const { filePath, reason } = selectFirstValidPerfInput(candidates);
276
- if (!filePath) {
277
- logger.error(`[perf 输入] ${reason},中止`);
278
- return false;
279
- }
280
- ctx.set(PERF_INPUT_CONTEXT_KEY, filePath);
281
- logger.info(`[perf 输入] ${filePath}`);
282
- },
283
- },
284
- ];
285
- }
286
13
  /** 注入 init/monitor/collect/restore/filter/analysis 流水线及风险目标等派生命令 */
287
14
  export function applyOptions(ctx) {
288
- const { app = "", hstackToolPath = "", sourcemapDir = "", logKey = "pid", duration = "70", backtrackDelay = "80", riskCollectWait = "0", bufferSize = "512000", outputDir = "./output", traceFormatProfile = "default", riskTargets = "all", traceFrom: traceFromRaw = "hitrace", skipPerfDedupe = false, skipBacktrack = false, skipNonBacktrack = false, dropFailedSamples = false, hdcTarget, parseConcurrency: parseConcurrencyRaw, dryRun = false, list = false, } = ctx.options ?? {};
289
- const parseConcurrency = resolveParseConcurrency(parseConcurrencyRaw);
290
- const hdcCli = createHdcCli(hdcTarget);
291
- const traceFormatProfileNormalized = traceFormatProfile.trim();
292
- const backtrackDelaySec = Number(backtrackDelay);
293
- if (!Number.isFinite(backtrackDelaySec) || backtrackDelaySec < 0) {
294
- throw new Error(`[--backtrack-delay] 无效的秒数: ${JSON.stringify(backtrackDelay)},需为非负有限数值`);
295
- }
296
- const backgroundDelayMs = Math.round(backtrackDelaySec * 1000);
297
- const riskCollectWaitSec = Number(riskCollectWait);
298
- if (!Number.isFinite(riskCollectWaitSec) || riskCollectWaitSec < 0) {
299
- throw new Error(`[--risk-collect-wait] 无效的秒数: ${JSON.stringify(riskCollectWait)},需为非负有限数值`);
300
- }
301
- const checkStateCommand = "hidumper -s 1901 -a '-p libforkall_plugin.z.so --list'";
302
- const hstackToolPathNormalized = hstackToolPath
303
- ? path.normalize(hstackToolPath)
304
- : "";
305
- const sourcemapDirNormalized = sourcemapDir
306
- ? path.normalize(sourcemapDir)
307
- : "";
308
- const outputDirNormalized = normalizeCliOutputDir(outputDir);
309
- const workspaceDir = path.join(outputDirNormalized, WORKSPACE_SUBDIR);
310
- const workspaceDirNormalized = path.normalize(workspaceDir);
311
- const workspaceDirWithSep = ensureTrailingSeparator(workspaceDirNormalized);
312
- const perfTextDir = path.join(outputDirNormalized, "perf_txt");
313
- const perfTextDirNormalized = path.normalize(perfTextDir);
314
- const perfTextDirWithSep = ensureTrailingSeparator(perfTextDirNormalized);
315
- const traceFrom = parseTraceFrom(traceFromRaw);
316
- const selectedRiskTargets = parseRiskTargets(riskTargets).map((key) => RISK_TARGET_DEFINITIONS[key]);
317
- const runBacktrackFS = !skipBacktrack &&
318
- selectedRiskTargets.some((target) => target.key === "backtrack");
319
- const snapshotLogFile = path.join(workspaceDirNormalized, "snapshot_log.txt");
320
- const snapshotPerfFile = path.join(perfTextDirNormalized, "snapshot_perf.data.txt");
321
- const parsedSnapshotPerfFile = path.join(workspaceDirNormalized, "_snapshot_perf.data.txt");
322
- const dumpStackTxt = path.join(outputDirNormalized, "dump_stack.txt");
323
- const dumpStackJson = path.join(outputDirNormalized, "dump_stack.json");
324
- const dumpStackXlsx = path.join(outputDirNormalized, "dump_stack.xlsx");
325
- const start_app_command = `hidumper -s 1901 -a '-p libforkall_plugin.z.so --create 100 ${app}'`;
326
- if (!dryRun && !list) {
327
- if (!existsSync(outputDirNormalized)) {
328
- mkdirSync(outputDirNormalized, { recursive: true });
329
- }
330
- if (!existsSync(workspaceDirNormalized)) {
331
- mkdirSync(workspaceDirNormalized, { recursive: true });
332
- }
333
- if (!existsSync(perfTextDirNormalized)) {
334
- mkdirSync(perfTextDirNormalized, { recursive: true });
335
- }
336
- }
337
- const initEnvGroup = buildCommonInitEnvGroup({
338
- app,
339
- snapshotLogFile,
340
- checkStateCommand,
341
- hdc: hdcCli,
342
- });
343
- const monitorGroup = buildMonitorGroup({
344
- hdcCli,
345
- logKey,
346
- bufferSize,
347
- duration,
348
- backgroundDelayMs,
349
- riskCollectWaitSec,
350
- app,
351
- snapshotLogFile,
352
- startAppCommand: start_app_command,
353
- checkStateCommand,
354
- riskTargets: selectedRiskTargets,
355
- traceFrom,
356
- });
357
- const collectGroup = buildCommonCollectGroup({
358
- checkStateCommand,
359
- snapshotPerfReceiveDirWithSep: perfTextDirWithSep,
360
- outputDirWithSep: workspaceDirWithSep,
361
- hdc: hdcCli,
362
- });
363
- const filterGroup = buildCommonAnalysisTargetFilterGroup({
364
- app,
365
- snapshotPerfFile,
366
- writeBacktraceStacks: true,
367
- hdc: hdcCli,
368
- });
369
- const analysisGroup = buildCommonAnalysisGroup({
370
- preDecodeCommands: buildAnalysisPreDecodeCommands({
371
- snapshotPerfFile,
372
- parsedSnapshotPerfFile,
373
- hstackToolPathNormalized,
374
- perfTextDir: perfTextDirNormalized,
375
- workspaceDirNormalized,
376
- sourcemapDirNormalized,
377
- }),
378
- decodeInput: { inputContextKey: PERF_INPUT_CONTEXT_KEY },
379
- dumpStackTxt,
380
- dumpStackJson,
381
- dumpStackXlsx,
382
- traceFormatProfile,
383
- decodeStageName: "风险栈解码",
384
- missingInputMessage: "[风险栈解码] 无 perf 输入,跳过",
385
- skipDedupePerfData: skipPerfDedupe,
386
- runBacktrackFS,
387
- skipNonBacktrack,
388
- dropFailedSamples,
389
- parseConcurrency,
390
- traceFormatAuto: traceFormatProfileNormalized === AUTO_TRACE_FORMAT_PROFILE
391
- ? {
392
- hdcCli,
393
- formatPaths: selectedRiskTargets.map((target) => target.formatPath),
394
- }
395
- : undefined,
396
- });
397
- const restoreEnvGroup = buildCommonRestoreEnvGroup({ hdc: hdcCli });
398
- if (!list) {
399
- logger.info(`[trace-from] ${traceFrom}`);
400
- logger.info(`[风险目标] ${selectedRiskTargets.map((target) => target.displayName).join("、")}`);
401
- logger.info(`[backtrack] ${!runBacktrackFS
402
- ? "跳过"
403
- : skipNonBacktrack
404
- ? "仅 FS revoked"
405
- : "保留非 FS revoked"}`);
406
- }
407
- const resultGroups = {
408
- init: initEnvGroup,
409
- monitor: monitorGroup,
410
- collect: collectGroup,
411
- filter: filterGroup,
412
- analysis: analysisGroup,
413
- restore: restoreEnvGroup,
414
- };
415
- const order = [
416
- "init",
417
- "monitor",
418
- "collect",
419
- "restore",
420
- "filter",
421
- "analysis",
422
- ];
423
- return {
424
- groups: resultGroups,
425
- defaultGroupOrder: order,
426
- };
15
+ return applyReportScenarioOptions(ctx, "full");
427
16
  }
428
17
  //# sourceMappingURL=report.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"report.js","sourceRoot":"","sources":["../../commands/report.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"report.js","sourceRoot":"","sources":["../../commands/report.ts"],"names":[],"mappings":"AACA,OAAO,EACL,0BAA0B,EAC1B,0BAA0B,EAC1B,cAAc,GACf,MAAM,+BAA+B,CAAC;AAEvC,wCAAwC;AACxC,MAAM,CAAC,MAAM,MAAM,GAAW,EAAE,CAAC;AAEjC,MAAM,CAAC,MAAM,iBAAiB,GAAa,CAAC,GAAG,0BAA0B,CAAC,CAAC;AAE3E,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,GAAG,cAAc;IACjB;QACE,KAAK,EAAE,kBAAkB;QACzB,WAAW,EACT,uEAAuE;QACzE,SAAS,EAAE,QAAQ;KACpB;CACF,CAAC;AAEF,oEAAoE;AACpE,MAAM,UAAU,YAAY,CAAC,GAI5B;IACC,OAAO,0BAA0B,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;AACjD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"timeout-demo.d.ts","sourceRoot":"","sources":["../../demos/timeout-demo.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,MAAM,EACZ,MAAM,iBAAiB,CAAC;AASzB,eAAO,MAAM,MAAM,EAAE,MAyBpB,CAAC;AAEF,0CAA0C;AAC1C,eAAO,MAAM,iBAAiB,EAAE,MAAM,EAAsB,CAAC"}
1
+ {"version":3,"file":"timeout-demo.d.ts","sourceRoot":"","sources":["../../demos/timeout-demo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuC,KAAK,MAAM,EAAE,MAAM,iBAAiB,CAAC;AASnF,eAAO,MAAM,MAAM,EAAE,MAyBpB,CAAC;AAEF,0CAA0C;AAC1C,eAAO,MAAM,iBAAiB,EAAE,MAAM,EAAsB,CAAC"}
@@ -1,4 +1,4 @@
1
- import { CommandKind, getCurrentPlatformKind, } from "../src/types.js";
1
+ import { CommandKind, getCurrentPlatformKind } from "../src/types.js";
2
2
  /**
3
3
  * 内置 `embed`:`timeout` / `timieout`(TTY 下任意键跳过);参见 README 内建指令章节与 `EmbedCommandRunner`。
4
4
  *
@@ -1 +1 @@
1
- {"version":3,"file":"timeout-demo.js","sourceRoot":"","sources":["../../demos/timeout-demo.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,sBAAsB,GAEvB,MAAM,iBAAiB,CAAC;AAEzB;;;;GAIG;AACH,MAAM,IAAI,GAAG,sBAAsB,EAAE,CAAC;AAEtC,MAAM,CAAC,MAAM,MAAM,GAAW;IAC5B,IAAI,EAAE;QACJ;YACE,IAAI,EAAE,WAAW,CAAC,KAAK;YACvB,WAAW,EAAE,2BAA2B;YACxC,GAAG,EAAE,YAAY;SAClB;KACF;IACD,SAAS,EAAE;QACT;YACE,IAAI,EAAE,WAAW,CAAC,KAAK;YACvB,WAAW,EAAE,uBAAuB;YACpC,GAAG,EAAE,YAAY;SAClB;KACF;IACD,KAAK,EAAE;QACL;YACE,IAAI;YACJ,WAAW,EAAE,eAAe;YAC5B,GAAG,EACD,IAAI,KAAK,WAAW,CAAC,OAAO;gBAC1B,CAAC,CAAC,+BAA+B;gBACjC,CAAC,CAAC,iCAAiC;SACxC;KACF;CACF,CAAC;AAEF,0CAA0C;AAC1C,MAAM,CAAC,MAAM,iBAAiB,GAAa,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC"}
1
+ {"version":3,"file":"timeout-demo.js","sourceRoot":"","sources":["../../demos/timeout-demo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,sBAAsB,EAAe,MAAM,iBAAiB,CAAC;AAEnF;;;;GAIG;AACH,MAAM,IAAI,GAAG,sBAAsB,EAAE,CAAC;AAEtC,MAAM,CAAC,MAAM,MAAM,GAAW;IAC5B,IAAI,EAAE;QACJ;YACE,IAAI,EAAE,WAAW,CAAC,KAAK;YACvB,WAAW,EAAE,2BAA2B;YACxC,GAAG,EAAE,YAAY;SAClB;KACF;IACD,SAAS,EAAE;QACT;YACE,IAAI,EAAE,WAAW,CAAC,KAAK;YACvB,WAAW,EAAE,uBAAuB;YACpC,GAAG,EAAE,YAAY;SAClB;KACF;IACD,KAAK,EAAE;QACL;YACE,IAAI;YACJ,WAAW,EAAE,eAAe;YAC5B,GAAG,EACD,IAAI,KAAK,WAAW,CAAC,OAAO;gBAC1B,CAAC,CAAC,+BAA+B;gBACjC,CAAC,CAAC,iCAAiC;SACxC;KACF;CACF,CAAC;AAEF,0CAA0C;AAC1C,MAAM,CAAC,MAAM,iBAAiB,GAAa,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=bin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bin.d.ts","sourceRoot":"","sources":["../../src/bin.ts"],"names":[],"mappings":""}
@@ -0,0 +1,57 @@
1
+ #!/usr/bin/env node
2
+ import { program } from "commander";
3
+ import { resolveScenario, runScenarioGroups } from "./lib/programmatic.js";
4
+ import { runBinaryPreflight } from "./lib/preflight.js";
5
+ import * as reportScenario from "../commands/report.js";
6
+ function registerScenarioCommand(name, description, scenario) {
7
+ const cmd = program
8
+ .command(name)
9
+ .description(description)
10
+ .option("-g, --group <specs...>", "指定 group(支持 group 或 group:N)")
11
+ .option("--stop-on-error", "命令失败时终止后续执行")
12
+ .option("-s, --silent", "减少输出")
13
+ .option("--wait", "等待后台进程结束再退出")
14
+ .option("--ignore-platform", "忽略命令平台限制")
15
+ .option("-i, --interval <ms>", "组命令执行间隔(毫秒)", "0");
16
+ for (const option of scenario.options ?? []) {
17
+ if (option.defaultValue !== undefined) {
18
+ cmd.option(option.flags, option.description ?? "", option.defaultValue);
19
+ }
20
+ else {
21
+ cmd.option(option.flags, option.description ?? "");
22
+ }
23
+ }
24
+ cmd.action(async (opts) => {
25
+ const intervalRaw = String(opts.interval ?? "0");
26
+ const intervalMs = Math.max(0, Number.parseInt(intervalRaw, 10) || 0);
27
+ const { groups, defaultGroupOrder } = resolveScenario(scenario, opts);
28
+ const { failed } = await runScenarioGroups({
29
+ groups,
30
+ defaultGroupOrder,
31
+ group: opts.group,
32
+ stopOnError: opts.stopOnError === true,
33
+ silent: opts.silent === true,
34
+ waitForBackground: opts.wait === true,
35
+ ignorePlatform: opts.ignorePlatform === true,
36
+ intervalMs: intervalMs > 0 ? intervalMs : undefined,
37
+ });
38
+ if (failed) {
39
+ process.exitCode = 1;
40
+ }
41
+ });
42
+ }
43
+ async function main() {
44
+ runBinaryPreflight();
45
+ program
46
+ .name("snapshot-checker")
47
+ .description("snapshot-checker 二进制入口")
48
+ .version("0.1.3");
49
+ registerScenarioCommand("report", "运行 report 场景", reportScenario);
50
+ await program.parseAsync(process.argv);
51
+ }
52
+ main().catch((error) => {
53
+ const message = error instanceof Error ? error.message : String(error);
54
+ console.error(message);
55
+ process.exitCode = 1;
56
+ });
57
+ //# sourceMappingURL=bin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bin.js","sourceRoot":"","sources":["../../src/bin.ts"],"names":[],"mappings":"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"}