@gracker/smartperfetto 1.0.19 → 1.0.20

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 (115) hide show
  1. package/dist/agent/core/conclusionContract.d.ts +1 -0
  2. package/dist/agent/core/conclusionContract.d.ts.map +1 -1
  3. package/dist/agent/tools/frameAnalyzer.d.ts.map +1 -1
  4. package/dist/agent/tools/frameAnalyzer.js +1 -0
  5. package/dist/agent/tools/frameAnalyzer.js.map +1 -1
  6. package/dist/agentOpenAI/openAiRuntime.d.ts +24 -0
  7. package/dist/agentOpenAI/openAiRuntime.d.ts.map +1 -1
  8. package/dist/agentOpenAI/openAiRuntime.js +159 -191
  9. package/dist/agentOpenAI/openAiRuntime.js.map +1 -1
  10. package/dist/agentRuntime/index.d.ts +1 -0
  11. package/dist/agentRuntime/index.d.ts.map +1 -1
  12. package/dist/agentRuntime/index.js +16 -1
  13. package/dist/agentRuntime/index.js.map +1 -1
  14. package/dist/agentRuntime/runtimeCommon.d.ts +34 -0
  15. package/dist/agentRuntime/runtimeCommon.d.ts.map +1 -0
  16. package/dist/agentRuntime/runtimeCommon.js +231 -0
  17. package/dist/agentRuntime/runtimeCommon.js.map +1 -0
  18. package/dist/agentv3/claudeConfig.d.ts +6 -2
  19. package/dist/agentv3/claudeConfig.d.ts.map +1 -1
  20. package/dist/agentv3/claudeConfig.js +50 -48
  21. package/dist/agentv3/claudeConfig.js.map +1 -1
  22. package/dist/agentv3/claudeMcpServer.d.ts.map +1 -1
  23. package/dist/agentv3/claudeMcpServer.js +74 -66
  24. package/dist/agentv3/claudeMcpServer.js.map +1 -1
  25. package/dist/agentv3/claudeRuntime.d.ts +18 -2
  26. package/dist/agentv3/claudeRuntime.d.ts.map +1 -1
  27. package/dist/agentv3/claudeRuntime.js +198 -265
  28. package/dist/agentv3/claudeRuntime.js.map +1 -1
  29. package/dist/agentv3/claudeSseBridge.js +1 -1
  30. package/dist/agentv3/claudeSseBridge.js.map +1 -1
  31. package/dist/agentv3/claudeVerifier.d.ts.map +1 -1
  32. package/dist/agentv3/claudeVerifier.js +3 -6
  33. package/dist/agentv3/claudeVerifier.js.map +1 -1
  34. package/dist/cli-user/bin.js +83 -2
  35. package/dist/cli-user/bin.js.map +1 -1
  36. package/dist/cli-user/commands/analyze.d.ts +2 -0
  37. package/dist/cli-user/commands/analyze.d.ts.map +1 -1
  38. package/dist/cli-user/commands/analyze.js +1 -0
  39. package/dist/cli-user/commands/analyze.js.map +1 -1
  40. package/dist/cli-user/commands/capture.d.ts +37 -2
  41. package/dist/cli-user/commands/capture.d.ts.map +1 -1
  42. package/dist/cli-user/commands/capture.js +184 -95
  43. package/dist/cli-user/commands/capture.js.map +1 -1
  44. package/dist/cli-user/commands/compare.d.ts +2 -0
  45. package/dist/cli-user/commands/compare.d.ts.map +1 -1
  46. package/dist/cli-user/commands/compare.js +1 -0
  47. package/dist/cli-user/commands/compare.js.map +1 -1
  48. package/dist/cli-user/commands/doctor.js +4 -0
  49. package/dist/cli-user/commands/doctor.js.map +1 -1
  50. package/dist/cli-user/services/androidCapture.d.ts +59 -0
  51. package/dist/cli-user/services/androidCapture.d.ts.map +1 -0
  52. package/dist/cli-user/services/androidCapture.js +375 -0
  53. package/dist/cli-user/services/androidCapture.js.map +1 -0
  54. package/dist/cli-user/services/captureConfig.d.ts +38 -0
  55. package/dist/cli-user/services/captureConfig.d.ts.map +1 -0
  56. package/dist/cli-user/services/captureConfig.js +434 -0
  57. package/dist/cli-user/services/captureConfig.js.map +1 -0
  58. package/dist/cli-user/services/captureTools.d.ts +11 -0
  59. package/dist/cli-user/services/captureTools.d.ts.map +1 -0
  60. package/dist/cli-user/services/captureTools.js +247 -0
  61. package/dist/cli-user/services/captureTools.js.map +1 -0
  62. package/dist/cli-user/services/cliAnalyzeService.d.ts +2 -0
  63. package/dist/cli-user/services/cliAnalyzeService.d.ts.map +1 -1
  64. package/dist/cli-user/services/cliAnalyzeService.js +1 -0
  65. package/dist/cli-user/services/cliAnalyzeService.js.map +1 -1
  66. package/dist/cli-user/services/runtimeGuard.d.ts +10 -0
  67. package/dist/cli-user/services/runtimeGuard.d.ts.map +1 -1
  68. package/dist/cli-user/services/runtimeGuard.js +48 -0
  69. package/dist/cli-user/services/runtimeGuard.js.map +1 -1
  70. package/dist/cli-user/services/turnRunner.d.ts +3 -0
  71. package/dist/cli-user/services/turnRunner.d.ts.map +1 -1
  72. package/dist/cli-user/services/turnRunner.js +4 -0
  73. package/dist/cli-user/services/turnRunner.js.map +1 -1
  74. package/dist/cli-user/types.d.ts +57 -0
  75. package/dist/cli-user/types.d.ts.map +1 -1
  76. package/dist/perfetto-recording-tools-pin.env +24 -0
  77. package/dist/services/agentResultNormalizer.d.ts.map +1 -1
  78. package/dist/services/agentResultNormalizer.js +32 -4
  79. package/dist/services/agentResultNormalizer.js.map +1 -1
  80. package/dist/services/evidence/evidenceContractBuilder.d.ts.map +1 -1
  81. package/dist/services/evidence/evidenceContractBuilder.js +17 -3
  82. package/dist/services/evidence/evidenceContractBuilder.js.map +1 -1
  83. package/dist/services/perfettoSqlSkill.d.ts.map +1 -1
  84. package/dist/services/perfettoSqlSkill.js +1 -0
  85. package/dist/services/perfettoSqlSkill.js.map +1 -1
  86. package/dist/services/providerManager/connectionTester.d.ts.map +1 -1
  87. package/dist/services/providerManager/connectionTester.js +4 -68
  88. package/dist/services/providerManager/connectionTester.js.map +1 -1
  89. package/dist/services/providerManager/index.d.ts +1 -0
  90. package/dist/services/providerManager/index.d.ts.map +1 -1
  91. package/dist/services/providerManager/index.js +8 -1
  92. package/dist/services/providerManager/index.js.map +1 -1
  93. package/dist/services/providerManager/providerService.d.ts.map +1 -1
  94. package/dist/services/providerManager/providerService.js +37 -106
  95. package/dist/services/providerManager/providerService.js.map +1 -1
  96. package/dist/services/providerManager/providerSnapshot.d.ts.map +1 -1
  97. package/dist/services/providerManager/providerSnapshot.js +13 -12
  98. package/dist/services/providerManager/providerSnapshot.js.map +1 -1
  99. package/dist/services/providerManager/runtimeCapabilities.d.ts +9 -0
  100. package/dist/services/providerManager/runtimeCapabilities.d.ts.map +1 -0
  101. package/dist/services/providerManager/runtimeCapabilities.js +105 -0
  102. package/dist/services/providerManager/runtimeCapabilities.js.map +1 -0
  103. package/dist/services/skillEngine/skillExecutor.d.ts +1 -0
  104. package/dist/services/skillEngine/skillExecutor.d.ts.map +1 -1
  105. package/dist/services/skillEngine/skillExecutor.js +64 -12
  106. package/dist/services/skillEngine/skillExecutor.js.map +1 -1
  107. package/package.json +3 -3
  108. package/prebuilts/android-platform-tools/README.md +13 -0
  109. package/prebuilts/perfetto-recording-tools/README.md +17 -0
  110. package/skills/atomic/cpu_topology_detection.skill.yaml +105 -159
  111. package/skills/atomic/cpu_topology_view.skill.yaml +2 -0
  112. package/strategies/prompt-openai-final-report-continuation-en.template.md +3 -1
  113. package/strategies/prompt-openai-final-report-continuation-zh.template.md +3 -1
  114. package/strategies/prompt-output-format.template.md +1 -1
  115. package/strategies/startup.strategy.md +4 -4
@@ -0,0 +1,375 @@
1
+ "use strict";
2
+ // SPDX-License-Identifier: AGPL-3.0-or-later
3
+ // Copyright (C) 2024-2026 Gracker (Chris)
4
+ // This file is part of SmartPerfetto. See LICENSE for details.
5
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ var desc = Object.getOwnPropertyDescriptor(m, k);
8
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
9
+ desc = { enumerable: true, get: function() { return m[k]; } };
10
+ }
11
+ Object.defineProperty(o, k2, desc);
12
+ }) : (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ o[k2] = m[k];
15
+ }));
16
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
17
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
18
+ }) : function(o, v) {
19
+ o["default"] = v;
20
+ });
21
+ var __importStar = (this && this.__importStar) || (function () {
22
+ var ownKeys = function(o) {
23
+ ownKeys = Object.getOwnPropertyNames || function (o) {
24
+ var ar = [];
25
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
26
+ return ar;
27
+ };
28
+ return ownKeys(o);
29
+ };
30
+ return function (mod) {
31
+ if (mod && mod.__esModule) return mod;
32
+ var result = {};
33
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
34
+ __setModuleDefault(result, mod);
35
+ return result;
36
+ };
37
+ })();
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.SpawnAdbCommandRunner = void 0;
40
+ exports.captureAndroidTrace = captureAndroidTrace;
41
+ exports.runAndroidCapturePreflight = runAndroidCapturePreflight;
42
+ exports.listDevices = listDevices;
43
+ exports.parseAdbDevices = parseAdbDevices;
44
+ exports.selectDevice = selectDevice;
45
+ exports.probeAndroidDevice = probeAndroidDevice;
46
+ exports.resolveCaptureDurationMs = resolveCaptureDurationMs;
47
+ exports.buildPerfettoBackgroundArgs = buildPerfettoBackgroundArgs;
48
+ exports.parseBackgroundPid = parseBackgroundPid;
49
+ const fs = __importStar(require("fs"));
50
+ const os = __importStar(require("os"));
51
+ const path = __importStar(require("path"));
52
+ const child_process_1 = require("child_process");
53
+ const captureTools_1 = require("./captureTools");
54
+ class SpawnAdbCommandRunner {
55
+ run(adbPath, serial, args, options = {}) {
56
+ return new Promise((resolve, reject) => {
57
+ const fullArgs = serial ? ['-s', serial, ...args] : args;
58
+ const child = (0, child_process_1.spawn)(adbPath, fullArgs, { stdio: ['pipe', 'pipe', 'pipe'] });
59
+ let stdout = '';
60
+ let stderr = '';
61
+ let settled = false;
62
+ const timeoutMs = options.timeoutMs ?? 30000;
63
+ const timer = setTimeout(() => {
64
+ if (settled)
65
+ return;
66
+ child.kill('SIGTERM');
67
+ settled = true;
68
+ reject(new Error(`adb command timed out after ${timeoutMs / 1000}s: ${fullArgs.join(' ')}`));
69
+ }, timeoutMs);
70
+ child.stdout.on('data', (chunk) => { stdout += chunk.toString(); });
71
+ child.stderr.on('data', (chunk) => { stderr += chunk.toString(); });
72
+ child.on('error', (error) => {
73
+ if (settled)
74
+ return;
75
+ settled = true;
76
+ clearTimeout(timer);
77
+ reject(error);
78
+ });
79
+ child.on('close', (code) => {
80
+ if (settled)
81
+ return;
82
+ settled = true;
83
+ clearTimeout(timer);
84
+ if (code === 0) {
85
+ resolve({ stdout, stderr });
86
+ return;
87
+ }
88
+ reject(new Error((stderr || stdout || `adb exited with code ${code}`).trim()));
89
+ });
90
+ child.stdin.end(options.stdin ?? '');
91
+ });
92
+ }
93
+ }
94
+ exports.SpawnAdbCommandRunner = SpawnAdbCommandRunner;
95
+ async function captureAndroidTrace(input) {
96
+ const outPath = path.resolve(input.out);
97
+ const runner = input.runner ?? new SpawnAdbCommandRunner();
98
+ const adb = input.adbPath
99
+ ? {
100
+ name: 'adb',
101
+ source: 'override',
102
+ path: path.resolve(input.adbPath),
103
+ exists: fs.existsSync(path.resolve(input.adbPath)),
104
+ executable: fs.existsSync(path.resolve(input.adbPath)),
105
+ }
106
+ : (0, captureTools_1.resolveAdbTool)({ backendRoot: input.backendRoot });
107
+ (0, captureTools_1.assertToolUsable)(adb);
108
+ const devices = await listDevices(adb.path, runner);
109
+ const device = selectDevice(devices, input.serial);
110
+ const probe = await probeAndroidDevice(adb.path, device.serial, runner);
111
+ const shouldSideload = Boolean(input.sideload || probe.apiLevel < 29);
112
+ const tracebox = shouldSideload
113
+ ? (0, captureTools_1.resolveTraceboxTool)(input.traceboxPath, (0, captureTools_1.androidTraceboxPlatformKey)(probe.abi), { backendRoot: input.backendRoot })
114
+ : undefined;
115
+ if (tracebox)
116
+ (0, captureTools_1.assertToolUsable)(tracebox);
117
+ const durationMs = resolveCaptureDurationMs(input.configDurationMs, input.durationSeconds);
118
+ const preflight = await runAndroidCapturePreflight(adb.path, device.serial, runner, {
119
+ killStale: input.killStale,
120
+ });
121
+ const killAfterMs = input.configDurationMs ? undefined : durationMs;
122
+ const hardTimeoutMs = durationMs + 120000;
123
+ const startedAt = input.now?.() ?? Date.now();
124
+ const stamp = `${startedAt}-${Math.random().toString(36).slice(2, 8)}`;
125
+ const remoteDir = shouldSideload ? '/data/local/tmp' : '/data/misc/perfetto-traces';
126
+ const remotePath = `${remoteDir}/smartperfetto-${stamp}.perfetto-trace`;
127
+ const remoteConfigPath = `${remoteDir}/smartperfetto-${stamp}.pbtxt`;
128
+ const perfettoCommand = shouldSideload ? '/data/local/tmp/smartperfetto-tracebox' : 'perfetto';
129
+ fs.mkdirSync(path.dirname(outPath), { recursive: true });
130
+ let pushedTracebox = false;
131
+ let pushedConfig = false;
132
+ let hostConfigPath;
133
+ let pid;
134
+ try {
135
+ if (shouldSideload && tracebox) {
136
+ await runner.run(adb.path, device.serial, ['push', tracebox.path, perfettoCommand], { timeoutMs: 120000 });
137
+ await runner.run(adb.path, device.serial, ['shell', `chmod 755 ${shellQuote(perfettoCommand)}`], { timeoutMs: 10000 });
138
+ pushedTracebox = true;
139
+ }
140
+ if (probe.apiLevel < 24) {
141
+ hostConfigPath = path.join(fs.mkdtempSync(path.join(os.tmpdir(), 'smartperfetto-capture-')), 'config.pbtxt');
142
+ fs.writeFileSync(hostConfigPath, input.configText, 'utf-8');
143
+ await runner.run(adb.path, device.serial, ['push', hostConfigPath, remoteConfigPath], { timeoutMs: 30000 });
144
+ pushedConfig = true;
145
+ pid = await startPerfettoWithDeviceConfig(adb.path, device.serial, runner, {
146
+ perfettoCommand,
147
+ remoteConfigPath,
148
+ remotePath,
149
+ noGuardrails: input.noGuardrails,
150
+ });
151
+ }
152
+ else {
153
+ pid = await startPerfettoWithStdin(adb.path, device.serial, runner, {
154
+ perfettoCommand,
155
+ remotePath,
156
+ configText: input.configText,
157
+ noGuardrails: input.noGuardrails,
158
+ });
159
+ }
160
+ await waitForPerfettoExit(adb.path, device.serial, runner, {
161
+ pid,
162
+ killAfterMs,
163
+ hardTimeoutMs,
164
+ });
165
+ await runner.run(adb.path, device.serial, ['pull', remotePath, outPath], { timeoutMs: 180000 });
166
+ return {
167
+ target: 'android',
168
+ serial: device.serial,
169
+ app: input.app,
170
+ preset: input.preset,
171
+ configPath: input.configPath,
172
+ durationSeconds: durationMs / 1000,
173
+ out: outPath,
174
+ remotePath,
175
+ usedSideload: shouldSideload,
176
+ tools: {
177
+ adb,
178
+ ...(tracebox ? { tracebox } : {}),
179
+ },
180
+ device: {
181
+ apiLevel: probe.apiLevel,
182
+ abi: probe.abi,
183
+ perfettoCommand,
184
+ },
185
+ preflight,
186
+ };
187
+ }
188
+ finally {
189
+ if (pid) {
190
+ await runner.run(adb.path, device.serial, ['shell', `kill -TERM ${pid} >/dev/null 2>&1 || true`], { timeoutMs: 5000 })
191
+ .catch(() => undefined);
192
+ }
193
+ await runner.run(adb.path, device.serial, ['shell', `rm -f ${shellQuote(remotePath)}`], { timeoutMs: 10000 })
194
+ .catch(() => undefined);
195
+ if (pushedConfig) {
196
+ await runner.run(adb.path, device.serial, ['shell', `rm -f ${shellQuote(remoteConfigPath)}`], { timeoutMs: 10000 })
197
+ .catch(() => undefined);
198
+ }
199
+ if (pushedTracebox) {
200
+ await runner.run(adb.path, device.serial, ['shell', `rm -f ${shellQuote(perfettoCommand)}`], { timeoutMs: 10000 })
201
+ .catch(() => undefined);
202
+ }
203
+ if (hostConfigPath) {
204
+ await fs.promises.rm(path.dirname(hostConfigPath), { recursive: true, force: true }).catch(() => undefined);
205
+ }
206
+ }
207
+ }
208
+ async function runAndroidCapturePreflight(adbPath, serial, runner, opts = {}) {
209
+ const warnings = [];
210
+ let staleProcessesDetected = false;
211
+ let killedStaleProcesses = false;
212
+ const stale = await runner.run(adbPath, serial, ['shell', "ps -A | grep -E '(perfetto|simpleperf|traced)' | grep -v grep"], { timeoutMs: 5000 }).catch(() => ({ stdout: '', stderr: '' }));
213
+ const staleOutput = `${stale.stdout}\n${stale.stderr}`.trim();
214
+ if (staleOutput) {
215
+ staleProcessesDetected = true;
216
+ if (opts.killStale) {
217
+ await runner.run(adbPath, serial, ['shell', [
218
+ 'pkill -9 simpleperf >/dev/null 2>&1 || true',
219
+ 'pkill -9 perfetto >/dev/null 2>&1 || true',
220
+ 'pkill -9 traced >/dev/null 2>&1 || true',
221
+ 'pkill -9 traced_probes >/dev/null 2>&1 || true',
222
+ 'sleep 2',
223
+ ].join('; ')], { timeoutMs: 8000 }).catch(() => undefined);
224
+ killedStaleProcesses = true;
225
+ warnings.push('stale tracing processes were detected and --kill-stale was applied before capture');
226
+ }
227
+ else {
228
+ warnings.push('stale perfetto/simpleperf/traced processes were detected; retry with --kill-stale if capture hangs');
229
+ }
230
+ }
231
+ const selinux = await runner.run(adbPath, serial, ['shell', 'getenforce'], { timeoutMs: 5000 })
232
+ .then((result) => `${result.stdout}\n${result.stderr}`.trim().split(/\r?\n/)[0]?.trim())
233
+ .catch(() => undefined);
234
+ if (selinux === 'Enforcing') {
235
+ warnings.push('SELinux is Enforcing; on rooted engineering devices, adb root && adb shell setenforce 0 may help if trace output is denied');
236
+ }
237
+ return {
238
+ warnings,
239
+ selinux,
240
+ staleProcessesDetected,
241
+ killedStaleProcesses,
242
+ };
243
+ }
244
+ async function listDevices(adbPath, runner) {
245
+ const { stdout, stderr } = await runner.run(adbPath, undefined, ['devices', '-l'], { timeoutMs: 8000 });
246
+ return parseAdbDevices(`${stdout}\n${stderr}`);
247
+ }
248
+ function parseAdbDevices(output) {
249
+ return output
250
+ .split(/\r?\n/)
251
+ .map((line) => line.trim())
252
+ .filter(Boolean)
253
+ .filter((line) => !line.startsWith('* daemon') && !line.startsWith('List of devices'))
254
+ .map((line) => {
255
+ const parts = line.split(/\s+/);
256
+ return {
257
+ serial: parts[0] || '',
258
+ state: parts[1] || 'unknown',
259
+ description: parts.slice(2).join(' ') || undefined,
260
+ };
261
+ })
262
+ .filter((device) => device.serial.length > 0);
263
+ }
264
+ function selectDevice(devices, serial) {
265
+ const ready = devices.filter((device) => device.state === 'device');
266
+ if (serial) {
267
+ const selected = ready.find((device) => device.serial === serial);
268
+ if (!selected)
269
+ throw new Error(`no connected adb device with serial ${serial}`);
270
+ return selected;
271
+ }
272
+ if (ready.length === 1)
273
+ return ready[0];
274
+ if (ready.length === 0)
275
+ throw new Error('no connected adb device');
276
+ throw new Error(`multiple adb devices connected; pass --serial (${ready.map((device) => device.serial).join(', ')})`);
277
+ }
278
+ async function probeAndroidDevice(adbPath, serial, runner) {
279
+ const { stdout, stderr } = await runner.run(adbPath, serial, ['shell', 'getprop ro.build.version.sdk; getprop ro.product.cpu.abi; whoami'], { timeoutMs: 10000 });
280
+ const lines = `${stdout}\n${stderr}`
281
+ .split(/\r?\n/)
282
+ .map((line) => line.trim())
283
+ .filter(Boolean)
284
+ .filter((line) => !line.startsWith('* daemon'));
285
+ const apiLevel = Number.parseInt(lines[0] ?? '', 10);
286
+ const abi = lines[1] ?? '';
287
+ if (!Number.isFinite(apiLevel) || apiLevel <= 0) {
288
+ throw new Error(`failed to read Android API level from ${serial}`);
289
+ }
290
+ if (!abi)
291
+ throw new Error(`failed to read Android ABI from ${serial}`);
292
+ return {
293
+ apiLevel,
294
+ abi,
295
+ shellUser: lines[2],
296
+ };
297
+ }
298
+ function resolveCaptureDurationMs(configDurationMs, cliDurationSeconds) {
299
+ if (cliDurationSeconds !== undefined) {
300
+ if (!Number.isFinite(cliDurationSeconds) || cliDurationSeconds <= 0) {
301
+ throw new Error('--duration must be a positive number of seconds');
302
+ }
303
+ return Math.round(cliDurationSeconds * 1000);
304
+ }
305
+ if (configDurationMs !== undefined)
306
+ return configDurationMs;
307
+ throw new Error('capture config has no duration_ms; pass --duration <seconds> so SmartPerfetto knows when to stop it');
308
+ }
309
+ function buildPerfettoBackgroundArgs(input) {
310
+ return [
311
+ 'shell',
312
+ input.perfettoCommand,
313
+ '--background',
314
+ '--txt',
315
+ ...(input.noGuardrails ? ['--no-guardrails'] : []),
316
+ '-o',
317
+ input.remotePath,
318
+ '-c',
319
+ '-',
320
+ ];
321
+ }
322
+ async function startPerfettoWithStdin(adbPath, serial, runner, input) {
323
+ const result = await runner.run(adbPath, serial, buildPerfettoBackgroundArgs(input), { stdin: input.configText, timeoutMs: 30000 });
324
+ return parseBackgroundPid(`${result.stdout}\n${result.stderr}`);
325
+ }
326
+ async function startPerfettoWithDeviceConfig(adbPath, serial, runner, input) {
327
+ const cmd = [
328
+ `cat ${shellQuote(input.remoteConfigPath)}`,
329
+ '|',
330
+ shellQuote(input.perfettoCommand),
331
+ '--background',
332
+ '--txt',
333
+ ...(input.noGuardrails ? ['--no-guardrails'] : []),
334
+ '-o',
335
+ shellQuote(input.remotePath),
336
+ '-c',
337
+ '-',
338
+ ].join(' ');
339
+ const result = await runner.run(adbPath, serial, ['shell', cmd], { timeoutMs: 30000 });
340
+ return parseBackgroundPid(`${result.stdout}\n${result.stderr}`);
341
+ }
342
+ function parseBackgroundPid(output) {
343
+ const match = output.match(/^(\d+)$/m);
344
+ if (!match?.[1]) {
345
+ throw new Error(`failed to read perfetto background pid from adb output: ${output.trim() || '(empty)'}`);
346
+ }
347
+ return match[1];
348
+ }
349
+ async function waitForPerfettoExit(adbPath, serial, runner, input) {
350
+ const started = Date.now();
351
+ const killAt = input.killAfterMs !== undefined ? started + input.killAfterMs : undefined;
352
+ const hardDeadline = started + input.hardTimeoutMs;
353
+ let sentTerm = false;
354
+ while (Date.now() < hardDeadline) {
355
+ const poll = await runner.run(adbPath, serial, ['shell', `test -d /proc/${input.pid} && echo RUN || echo TERM`], { timeoutMs: 10000 }).catch((err) => ({ stdout: '', stderr: err.message }));
356
+ if (`${poll.stdout}\n${poll.stderr}`.includes('TERM'))
357
+ return;
358
+ if (killAt !== undefined && Date.now() >= killAt && !sentTerm) {
359
+ sentTerm = true;
360
+ await runner.run(adbPath, serial, ['shell', `kill -TERM ${input.pid}`], { timeoutMs: 5000 })
361
+ .catch(() => undefined);
362
+ }
363
+ await sleep(500);
364
+ }
365
+ await runner.run(adbPath, serial, ['shell', `kill -KILL ${input.pid}`], { timeoutMs: 5000 })
366
+ .catch(() => undefined);
367
+ throw new Error(`perfetto did not finish within ${Math.round(input.hardTimeoutMs / 1000)}s`);
368
+ }
369
+ function sleep(ms) {
370
+ return new Promise((resolve) => setTimeout(resolve, ms));
371
+ }
372
+ function shellQuote(value) {
373
+ return `'${value.replace(/'/g, `'\\''`)}'`;
374
+ }
375
+ //# sourceMappingURL=androidCapture.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"androidCapture.js","sourceRoot":"","sources":["../../../src/cli-user/services/androidCapture.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import { type TraceIntent } from '../../services/traceConfigGenerator';
2
+ import type { CaptureConfigRenderOptions, CapturePresetId } from '../types';
3
+ export interface CapturePresetDefinition {
4
+ id: CapturePresetId;
5
+ label: string;
6
+ intent: TraceIntent;
7
+ defaultDurationSeconds: number;
8
+ bufferSizeKb: number;
9
+ atraceCategories: string[];
10
+ ftraceEvents: string[];
11
+ dataSources: string[];
12
+ description: string;
13
+ }
14
+ export declare const CAPTURE_PRESETS: CapturePresetDefinition[];
15
+ export declare function getCapturePreset(id: CapturePresetId): CapturePresetDefinition;
16
+ export declare function isCapturePresetId(value: string): value is CapturePresetId;
17
+ export declare function listCapturePresets(): CapturePresetDefinition[];
18
+ export declare function renderAndroidTraceConfig(opts: CaptureConfigRenderOptions): string;
19
+ export declare function readTraceConfigFile(configPath: string, opts?: {
20
+ durationSeconds?: number;
21
+ bufferSizeKb?: number;
22
+ }): {
23
+ path: string;
24
+ textproto: string;
25
+ durationMs?: number;
26
+ templated: boolean;
27
+ };
28
+ export declare function renderTraceConfigTemplate(textproto: string, opts?: {
29
+ durationSeconds?: number;
30
+ bufferSizeKb?: number;
31
+ }): {
32
+ textproto: string;
33
+ templated: boolean;
34
+ };
35
+ export declare function addAtraceCategories(textproto: string, categories: string[]): string;
36
+ export declare function calculateCaptureBufferSizeKb(durationSeconds: number, minimumKb?: number): number;
37
+ export declare function extractDurationMs(textproto: string): number | undefined;
38
+ //# sourceMappingURL=captureConfig.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"captureConfig.d.ts","sourceRoot":"","sources":["../../../src/cli-user/services/captureConfig.ts"],"names":[],"mappings":"AAMA,OAAO,EAEL,KAAK,WAAW,EACjB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,KAAK,EACV,0BAA0B,EAC1B,eAAe,EAChB,MAAM,UAAU,CAAC;AAElB,MAAM,WAAW,uBAAuB;IACtC,EAAE,EAAE,eAAe,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,WAAW,CAAC;IACpB,sBAAsB,EAAE,MAAM,CAAC;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;CACrB;AAkDD,eAAO,MAAM,eAAe,EAAE,uBAAuB,EAiIpD,CAAC;AAIF,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,eAAe,GAAG,uBAAuB,CAI7E;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,eAAe,CAEzE;AAED,wBAAgB,kBAAkB,IAAI,uBAAuB,EAAE,CAE9D;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,0BAA0B,GAAG,MAAM,CA6DjF;AAED,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,MAAM,EAClB,IAAI,GAAE;IAAE,eAAe,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAO,GAC7D;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAU9E;AAED,wBAAgB,yBAAyB,CACvC,SAAS,EAAE,MAAM,EACjB,IAAI,GAAE;IAAE,eAAe,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAO,GAC7D;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAuB3C;AAED,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,MAAM,CA2BnF;AAED,wBAAgB,4BAA4B,CAAC,eAAe,EAAE,MAAM,EAAE,SAAS,SAAQ,GAAG,MAAM,CAO/F;AAED,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAMvE"}