@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
@@ -1463,6 +1463,24 @@ class SkillExecutor {
1463
1463
  * Execute a step-based skill (composite/iterator/diagnostic, and legacy atomic skills without root-level `sql`).
1464
1464
  * Mutates `context.results` / `context.variables` and appends into `displayResults` / `diagnostics` / `synthesizeData`.
1465
1465
  */
1466
+ hasMeaningfulData(value) {
1467
+ if (Array.isArray(value))
1468
+ return value.length > 0;
1469
+ if (value === null || value === undefined)
1470
+ return false;
1471
+ if (typeof value === 'string')
1472
+ return value.trim().length > 0;
1473
+ if (typeof value === 'number' || typeof value === 'boolean' || typeof value === 'bigint')
1474
+ return true;
1475
+ if (typeof value === 'object') {
1476
+ if (Array.isArray(value.rows))
1477
+ return value.rows.length > 0;
1478
+ if (Array.isArray(value.diagnostics))
1479
+ return value.diagnostics.length > 0;
1480
+ return Object.keys(value).length > 0;
1481
+ }
1482
+ return false;
1483
+ }
1466
1484
  extractSaveAsValue(stepResult) {
1467
1485
  // Most steps already store direct row arrays/objects in stepResult.data.
1468
1486
  if (stepResult.stepType !== 'skill') {
@@ -1477,11 +1495,40 @@ class SkillExecutor {
1477
1495
  return nested.data;
1478
1496
  }
1479
1497
  // SkillExecutionResult currently exposes payloads via rawResults.
1498
+ // Step-based child skills often begin with DDL/setup steps that correctly
1499
+ // return [] (for example DROP/CREATE VIEW). Prefer the first meaningful
1500
+ // payload so a parent `skill:` step exposes the actual read step instead
1501
+ // of a setup step's empty result.
1480
1502
  const rawResults = nested.rawResults;
1481
1503
  if (rawResults && typeof rawResults === 'object') {
1482
1504
  if (rawResults.root?.data !== undefined) {
1483
1505
  return rawResults.root.data;
1484
1506
  }
1507
+ const dataSteps = Object.values(rawResults)
1508
+ .filter((step) => step && typeof step === 'object' && Object.prototype.hasOwnProperty.call(step, 'data'));
1509
+ const displayStepIds = Array.isArray(nested.displayResults)
1510
+ ? nested.displayResults
1511
+ .map((displayResult) => displayResult?.stepId)
1512
+ .filter((stepId) => typeof stepId === 'string' &&
1513
+ stepId.length > 0 &&
1514
+ stepId !== '__synthesize_summary__')
1515
+ : [];
1516
+ for (const stepId of displayStepIds) {
1517
+ const displayedStep = rawResults[stepId];
1518
+ if (displayedStep &&
1519
+ typeof displayedStep === 'object' &&
1520
+ Object.prototype.hasOwnProperty.call(displayedStep, 'data') &&
1521
+ this.hasMeaningfulData(displayedStep.data)) {
1522
+ return displayedStep.data;
1523
+ }
1524
+ }
1525
+ const meaningfulStep = dataSteps.find((step) => this.hasMeaningfulData(step.data));
1526
+ if (meaningfulStep) {
1527
+ return meaningfulStep.data;
1528
+ }
1529
+ if (dataSteps.length > 0) {
1530
+ return dataSteps[dataSteps.length - 1].data;
1531
+ }
1485
1532
  for (const step of Object.values(rawResults)) {
1486
1533
  if (step && typeof step === 'object' && Object.prototype.hasOwnProperty.call(step, 'data')) {
1487
1534
  return step.data;
@@ -1983,6 +2030,9 @@ class SkillExecutor {
1983
2030
  for (let i = 0; i < skill.steps.length; i++) {
1984
2031
  const step = skill.steps[i];
1985
2032
  const stepResult = await this.executeStep(step, execContext, skill.name);
2033
+ const layerStepResult = stepResult.stepType === 'skill'
2034
+ ? { ...stepResult, data: this.extractSaveAsValue(stepResult) }
2035
+ : stepResult;
1986
2036
  // Save result to context
1987
2037
  if (stepResult.success) {
1988
2038
  execContext.results[step.id] = stepResult;
@@ -1995,7 +2045,7 @@ class SkillExecutor {
1995
2045
  // This is needed for organizeByLayer to correctly place results in layers
1996
2046
  // Process display config with template variable substitution (e.g., ${frame_id})
1997
2047
  if ('display' in step && typeof step.display === 'object') {
1998
- stepResult.display = processDisplayConfig(step.display, execContext);
2048
+ layerStepResult.display = processDisplayConfig(step.display, execContext);
1999
2049
  }
2000
2050
  // 收集标记为 synthesize 的步骤数据
2001
2051
  // 支持两种格式:
@@ -2021,7 +2071,7 @@ class SkillExecutor {
2021
2071
  config, // 包含 YAML 中定义的配置(如果有)
2022
2072
  });
2023
2073
  }
2024
- stepResults.push(stepResult);
2074
+ stepResults.push(layerStepResult);
2025
2075
  }
2026
2076
  }
2027
2077
  // Iterator 结果绑回源列表:将 expandableData 绑定到 source step 的 StepResult
@@ -3122,28 +3172,30 @@ class SkillExecutor {
3122
3172
  // Preserve diagnostic structure for later extraction
3123
3173
  displayData = data;
3124
3174
  }
3125
- else if (Array.isArray(data) && data.length > 0) {
3175
+ else if (Array.isArray(data)) {
3126
3176
  // 检查是否是 iterator 结果(包含 itemIndex, item, result)
3127
- if (this.isIteratorResult(data)) {
3177
+ if (data.length > 0 && this.isIteratorResult(data)) {
3128
3178
  displayData = this.flattenIteratorResults(data, stepResult.stepType === 'iterator', columnDefinitions);
3129
3179
  }
3130
3180
  else {
3131
- // 普通数组 - 转换为表格格式
3181
+ const configuredColumns = Array.isArray(columnDefinitions)
3182
+ ? columnDefinitions
3183
+ .map((d) => d?.name)
3184
+ .filter((name, idx, arr) => typeof name === 'string' &&
3185
+ name.length > 0 &&
3186
+ arr.indexOf(name) === idx)
3187
+ : [];
3132
3188
  const firstItem = data[0];
3133
3189
  if (typeof firstItem === 'object' && firstItem !== null) {
3134
3190
  // If display.columns is provided, project data to configured columns only.
3135
3191
  // This keeps UI tables concise and avoids leaking internal helper fields.
3136
- const configuredColumns = Array.isArray(columnDefinitions)
3137
- ? columnDefinitions
3138
- .map((d) => d?.name)
3139
- .filter((name, idx, arr) => typeof name === 'string' &&
3140
- name.length > 0 &&
3141
- arr.indexOf(name) === idx)
3142
- : [];
3143
3192
  const columns = configuredColumns.length > 0 ? configuredColumns : Object.keys(firstItem);
3144
3193
  const rows = data.map(row => columns.map(col => this.formatCellValue(row[col])));
3145
3194
  displayData = { columns, rows };
3146
3195
  }
3196
+ else if (data.length === 0) {
3197
+ displayData = { columns: configuredColumns, rows: [] };
3198
+ }
3147
3199
  else {
3148
3200
  // 简单数组
3149
3201
  displayData = { columns: ['value'], rows: data.map(v => [this.formatCellValue(v)]) };