@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.
- package/dist/agent/core/conclusionContract.d.ts +1 -0
- package/dist/agent/core/conclusionContract.d.ts.map +1 -1
- package/dist/agent/tools/frameAnalyzer.d.ts.map +1 -1
- package/dist/agent/tools/frameAnalyzer.js +1 -0
- package/dist/agent/tools/frameAnalyzer.js.map +1 -1
- package/dist/agentOpenAI/openAiRuntime.d.ts +24 -0
- package/dist/agentOpenAI/openAiRuntime.d.ts.map +1 -1
- package/dist/agentOpenAI/openAiRuntime.js +159 -191
- package/dist/agentOpenAI/openAiRuntime.js.map +1 -1
- package/dist/agentRuntime/index.d.ts +1 -0
- package/dist/agentRuntime/index.d.ts.map +1 -1
- package/dist/agentRuntime/index.js +16 -1
- package/dist/agentRuntime/index.js.map +1 -1
- package/dist/agentRuntime/runtimeCommon.d.ts +34 -0
- package/dist/agentRuntime/runtimeCommon.d.ts.map +1 -0
- package/dist/agentRuntime/runtimeCommon.js +231 -0
- package/dist/agentRuntime/runtimeCommon.js.map +1 -0
- package/dist/agentv3/claudeConfig.d.ts +6 -2
- package/dist/agentv3/claudeConfig.d.ts.map +1 -1
- package/dist/agentv3/claudeConfig.js +50 -48
- package/dist/agentv3/claudeConfig.js.map +1 -1
- package/dist/agentv3/claudeMcpServer.d.ts.map +1 -1
- package/dist/agentv3/claudeMcpServer.js +74 -66
- package/dist/agentv3/claudeMcpServer.js.map +1 -1
- package/dist/agentv3/claudeRuntime.d.ts +18 -2
- package/dist/agentv3/claudeRuntime.d.ts.map +1 -1
- package/dist/agentv3/claudeRuntime.js +198 -265
- package/dist/agentv3/claudeRuntime.js.map +1 -1
- package/dist/agentv3/claudeSseBridge.js +1 -1
- package/dist/agentv3/claudeSseBridge.js.map +1 -1
- package/dist/agentv3/claudeVerifier.d.ts.map +1 -1
- package/dist/agentv3/claudeVerifier.js +3 -6
- package/dist/agentv3/claudeVerifier.js.map +1 -1
- package/dist/cli-user/bin.js +83 -2
- package/dist/cli-user/bin.js.map +1 -1
- package/dist/cli-user/commands/analyze.d.ts +2 -0
- package/dist/cli-user/commands/analyze.d.ts.map +1 -1
- package/dist/cli-user/commands/analyze.js +1 -0
- package/dist/cli-user/commands/analyze.js.map +1 -1
- package/dist/cli-user/commands/capture.d.ts +37 -2
- package/dist/cli-user/commands/capture.d.ts.map +1 -1
- package/dist/cli-user/commands/capture.js +184 -95
- package/dist/cli-user/commands/capture.js.map +1 -1
- package/dist/cli-user/commands/compare.d.ts +2 -0
- package/dist/cli-user/commands/compare.d.ts.map +1 -1
- package/dist/cli-user/commands/compare.js +1 -0
- package/dist/cli-user/commands/compare.js.map +1 -1
- package/dist/cli-user/commands/doctor.js +4 -0
- package/dist/cli-user/commands/doctor.js.map +1 -1
- package/dist/cli-user/services/androidCapture.d.ts +59 -0
- package/dist/cli-user/services/androidCapture.d.ts.map +1 -0
- package/dist/cli-user/services/androidCapture.js +375 -0
- package/dist/cli-user/services/androidCapture.js.map +1 -0
- package/dist/cli-user/services/captureConfig.d.ts +38 -0
- package/dist/cli-user/services/captureConfig.d.ts.map +1 -0
- package/dist/cli-user/services/captureConfig.js +434 -0
- package/dist/cli-user/services/captureConfig.js.map +1 -0
- package/dist/cli-user/services/captureTools.d.ts +11 -0
- package/dist/cli-user/services/captureTools.d.ts.map +1 -0
- package/dist/cli-user/services/captureTools.js +247 -0
- package/dist/cli-user/services/captureTools.js.map +1 -0
- package/dist/cli-user/services/cliAnalyzeService.d.ts +2 -0
- package/dist/cli-user/services/cliAnalyzeService.d.ts.map +1 -1
- package/dist/cli-user/services/cliAnalyzeService.js +1 -0
- package/dist/cli-user/services/cliAnalyzeService.js.map +1 -1
- package/dist/cli-user/services/runtimeGuard.d.ts +10 -0
- package/dist/cli-user/services/runtimeGuard.d.ts.map +1 -1
- package/dist/cli-user/services/runtimeGuard.js +48 -0
- package/dist/cli-user/services/runtimeGuard.js.map +1 -1
- package/dist/cli-user/services/turnRunner.d.ts +3 -0
- package/dist/cli-user/services/turnRunner.d.ts.map +1 -1
- package/dist/cli-user/services/turnRunner.js +4 -0
- package/dist/cli-user/services/turnRunner.js.map +1 -1
- package/dist/cli-user/types.d.ts +57 -0
- package/dist/cli-user/types.d.ts.map +1 -1
- package/dist/perfetto-recording-tools-pin.env +24 -0
- package/dist/services/agentResultNormalizer.d.ts.map +1 -1
- package/dist/services/agentResultNormalizer.js +32 -4
- package/dist/services/agentResultNormalizer.js.map +1 -1
- package/dist/services/evidence/evidenceContractBuilder.d.ts.map +1 -1
- package/dist/services/evidence/evidenceContractBuilder.js +17 -3
- package/dist/services/evidence/evidenceContractBuilder.js.map +1 -1
- package/dist/services/perfettoSqlSkill.d.ts.map +1 -1
- package/dist/services/perfettoSqlSkill.js +1 -0
- package/dist/services/perfettoSqlSkill.js.map +1 -1
- package/dist/services/providerManager/connectionTester.d.ts.map +1 -1
- package/dist/services/providerManager/connectionTester.js +4 -68
- package/dist/services/providerManager/connectionTester.js.map +1 -1
- package/dist/services/providerManager/index.d.ts +1 -0
- package/dist/services/providerManager/index.d.ts.map +1 -1
- package/dist/services/providerManager/index.js +8 -1
- package/dist/services/providerManager/index.js.map +1 -1
- package/dist/services/providerManager/providerService.d.ts.map +1 -1
- package/dist/services/providerManager/providerService.js +37 -106
- package/dist/services/providerManager/providerService.js.map +1 -1
- package/dist/services/providerManager/providerSnapshot.d.ts.map +1 -1
- package/dist/services/providerManager/providerSnapshot.js +13 -12
- package/dist/services/providerManager/providerSnapshot.js.map +1 -1
- package/dist/services/providerManager/runtimeCapabilities.d.ts +9 -0
- package/dist/services/providerManager/runtimeCapabilities.d.ts.map +1 -0
- package/dist/services/providerManager/runtimeCapabilities.js +105 -0
- package/dist/services/providerManager/runtimeCapabilities.js.map +1 -0
- package/dist/services/skillEngine/skillExecutor.d.ts +1 -0
- package/dist/services/skillEngine/skillExecutor.d.ts.map +1 -1
- package/dist/services/skillEngine/skillExecutor.js +64 -12
- package/dist/services/skillEngine/skillExecutor.js.map +1 -1
- package/package.json +3 -3
- package/prebuilts/android-platform-tools/README.md +13 -0
- package/prebuilts/perfetto-recording-tools/README.md +17 -0
- package/skills/atomic/cpu_topology_detection.skill.yaml +105 -159
- package/skills/atomic/cpu_topology_view.skill.yaml +2 -0
- package/strategies/prompt-openai-final-report-continuation-en.template.md +3 -1
- package/strategies/prompt-openai-final-report-continuation-zh.template.md +3 -1
- package/strategies/prompt-output-format.template.md +1 -1
- 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
|
-
|
|
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(
|
|
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)
|
|
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)]) };
|