@gracker/smartperfetto 1.0.13

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 (2287) hide show
  1. package/.env.example +586 -0
  2. package/LICENSE +685 -0
  3. package/data/perfettoSqlDocs.json +33478 -0
  4. package/data/perfettoSqlIndex.json +9458 -0
  5. package/data/perfettoSqlIndex.light.json +13129 -0
  6. package/data/perfettoStdlibSymbols.json +677 -0
  7. package/dist/agent/agents/base/baseAgent.d.ts +378 -0
  8. package/dist/agent/agents/base/baseAgent.d.ts.map +1 -0
  9. package/dist/agent/agents/base/baseAgent.js +1484 -0
  10. package/dist/agent/agents/base/baseAgent.js.map +1 -0
  11. package/dist/agent/agents/base/baseSubAgent.d.ts +135 -0
  12. package/dist/agent/agents/base/baseSubAgent.d.ts.map +1 -0
  13. package/dist/agent/agents/base/baseSubAgent.js +483 -0
  14. package/dist/agent/agents/base/baseSubAgent.js.map +1 -0
  15. package/dist/agent/agents/baseExpertAgent.d.ts +37 -0
  16. package/dist/agent/agents/baseExpertAgent.d.ts.map +1 -0
  17. package/dist/agent/agents/baseExpertAgent.js +322 -0
  18. package/dist/agent/agents/baseExpertAgent.js.map +1 -0
  19. package/dist/agent/agents/domain/additionalAgents.d.ts +54 -0
  20. package/dist/agent/agents/domain/additionalAgents.d.ts.map +1 -0
  21. package/dist/agent/agents/domain/additionalAgents.js +292 -0
  22. package/dist/agent/agents/domain/additionalAgents.js.map +1 -0
  23. package/dist/agent/agents/domain/binderAgent.d.ts +27 -0
  24. package/dist/agent/agents/domain/binderAgent.d.ts.map +1 -0
  25. package/dist/agent/agents/domain/binderAgent.js +100 -0
  26. package/dist/agent/agents/domain/binderAgent.js.map +1 -0
  27. package/dist/agent/agents/domain/cpuAgent.d.ts +35 -0
  28. package/dist/agent/agents/domain/cpuAgent.d.ts.map +1 -0
  29. package/dist/agent/agents/domain/cpuAgent.js +163 -0
  30. package/dist/agent/agents/domain/cpuAgent.js.map +1 -0
  31. package/dist/agent/agents/domain/frameAgent.d.ts +59 -0
  32. package/dist/agent/agents/domain/frameAgent.d.ts.map +1 -0
  33. package/dist/agent/agents/domain/frameAgent.js +511 -0
  34. package/dist/agent/agents/domain/frameAgent.js.map +1 -0
  35. package/dist/agent/agents/domain/index.d.ts +92 -0
  36. package/dist/agent/agents/domain/index.d.ts.map +1 -0
  37. package/dist/agent/agents/domain/index.js +250 -0
  38. package/dist/agent/agents/domain/index.js.map +1 -0
  39. package/dist/agent/agents/domain/memoryAgent.d.ts +26 -0
  40. package/dist/agent/agents/domain/memoryAgent.d.ts.map +1 -0
  41. package/dist/agent/agents/domain/memoryAgent.js +94 -0
  42. package/dist/agent/agents/domain/memoryAgent.js.map +1 -0
  43. package/dist/agent/agents/domain/skillCatalog.d.ts +10 -0
  44. package/dist/agent/agents/domain/skillCatalog.d.ts.map +1 -0
  45. package/dist/agent/agents/domain/skillCatalog.js +66 -0
  46. package/dist/agent/agents/domain/skillCatalog.js.map +1 -0
  47. package/dist/agent/agents/evaluatorAgent.d.ts +76 -0
  48. package/dist/agent/agents/evaluatorAgent.d.ts.map +1 -0
  49. package/dist/agent/agents/evaluatorAgent.js +517 -0
  50. package/dist/agent/agents/evaluatorAgent.js.map +1 -0
  51. package/dist/agent/agents/index.d.ts +13 -0
  52. package/dist/agent/agents/index.d.ts.map +1 -0
  53. package/dist/agent/agents/index.js +25 -0
  54. package/dist/agent/agents/index.js.map +1 -0
  55. package/dist/agent/agents/iterationStrategyPlanner.d.ts +140 -0
  56. package/dist/agent/agents/iterationStrategyPlanner.d.ts.map +1 -0
  57. package/dist/agent/agents/iterationStrategyPlanner.js +359 -0
  58. package/dist/agent/agents/iterationStrategyPlanner.js.map +1 -0
  59. package/dist/agent/agents/plannerAgent.d.ts +56 -0
  60. package/dist/agent/agents/plannerAgent.d.ts.map +1 -0
  61. package/dist/agent/agents/plannerAgent.js +379 -0
  62. package/dist/agent/agents/plannerAgent.js.map +1 -0
  63. package/dist/agent/agents/scrollingExpertAgent.d.ts +11 -0
  64. package/dist/agent/agents/scrollingExpertAgent.d.ts.map +1 -0
  65. package/dist/agent/agents/scrollingExpertAgent.js +132 -0
  66. package/dist/agent/agents/scrollingExpertAgent.js.map +1 -0
  67. package/dist/agent/agents/tools/adbTools.d.ts +5 -0
  68. package/dist/agent/agents/tools/adbTools.d.ts.map +1 -0
  69. package/dist/agent/agents/tools/adbTools.js +326 -0
  70. package/dist/agent/agents/tools/adbTools.js.map +1 -0
  71. package/dist/agent/communication/agentMessageBus.d.ts +138 -0
  72. package/dist/agent/communication/agentMessageBus.d.ts.map +1 -0
  73. package/dist/agent/communication/agentMessageBus.js +542 -0
  74. package/dist/agent/communication/agentMessageBus.js.map +1 -0
  75. package/dist/agent/communication/index.d.ts +7 -0
  76. package/dist/agent/communication/index.d.ts.map +1 -0
  77. package/dist/agent/communication/index.js +15 -0
  78. package/dist/agent/communication/index.js.map +1 -0
  79. package/dist/agent/compaction/compactionTypes.d.ts +163 -0
  80. package/dist/agent/compaction/compactionTypes.d.ts.map +1 -0
  81. package/dist/agent/compaction/compactionTypes.js +32 -0
  82. package/dist/agent/compaction/compactionTypes.js.map +1 -0
  83. package/dist/agent/compaction/contextCompactor.d.ts +109 -0
  84. package/dist/agent/compaction/contextCompactor.d.ts.map +1 -0
  85. package/dist/agent/compaction/contextCompactor.js +225 -0
  86. package/dist/agent/compaction/contextCompactor.js.map +1 -0
  87. package/dist/agent/compaction/index.d.ts +10 -0
  88. package/dist/agent/compaction/index.d.ts.map +1 -0
  89. package/dist/agent/compaction/index.js +43 -0
  90. package/dist/agent/compaction/index.js.map +1 -0
  91. package/dist/agent/compaction/strategies/index.d.ts +5 -0
  92. package/dist/agent/compaction/strategies/index.d.ts.map +1 -0
  93. package/dist/agent/compaction/strategies/index.js +13 -0
  94. package/dist/agent/compaction/strategies/index.js.map +1 -0
  95. package/dist/agent/compaction/strategies/slidingWindowStrategy.d.ts +53 -0
  96. package/dist/agent/compaction/strategies/slidingWindowStrategy.d.ts.map +1 -0
  97. package/dist/agent/compaction/strategies/slidingWindowStrategy.js +237 -0
  98. package/dist/agent/compaction/strategies/slidingWindowStrategy.js.map +1 -0
  99. package/dist/agent/compaction/tokenEstimator.d.ts +78 -0
  100. package/dist/agent/compaction/tokenEstimator.d.ts.map +1 -0
  101. package/dist/agent/compaction/tokenEstimator.js +203 -0
  102. package/dist/agent/compaction/tokenEstimator.js.map +1 -0
  103. package/dist/agent/config/decisionThresholdManifest.d.ts +72 -0
  104. package/dist/agent/config/decisionThresholdManifest.d.ts.map +1 -0
  105. package/dist/agent/config/decisionThresholdManifest.js +77 -0
  106. package/dist/agent/config/decisionThresholdManifest.js.map +1 -0
  107. package/dist/agent/config/domainManifest.d.ts +77 -0
  108. package/dist/agent/config/domainManifest.d.ts.map +1 -0
  109. package/dist/agent/config/domainManifest.js +269 -0
  110. package/dist/agent/config/domainManifest.js.map +1 -0
  111. package/dist/agent/config/drillDownRegistry.d.ts +19 -0
  112. package/dist/agent/config/drillDownRegistry.d.ts.map +1 -0
  113. package/dist/agent/config/drillDownRegistry.js +118 -0
  114. package/dist/agent/config/drillDownRegistry.js.map +1 -0
  115. package/dist/agent/context/contextBuilder.d.ts +79 -0
  116. package/dist/agent/context/contextBuilder.d.ts.map +1 -0
  117. package/dist/agent/context/contextBuilder.js +273 -0
  118. package/dist/agent/context/contextBuilder.js.map +1 -0
  119. package/dist/agent/context/contextTypes.d.ts +121 -0
  120. package/dist/agent/context/contextTypes.d.ts.map +1 -0
  121. package/dist/agent/context/contextTypes.js +14 -0
  122. package/dist/agent/context/contextTypes.js.map +1 -0
  123. package/dist/agent/context/enhancedSessionContext.d.ts +283 -0
  124. package/dist/agent/context/enhancedSessionContext.d.ts.map +1 -0
  125. package/dist/agent/context/enhancedSessionContext.js +1636 -0
  126. package/dist/agent/context/enhancedSessionContext.js.map +1 -0
  127. package/dist/agent/context/entityStore.d.ts +374 -0
  128. package/dist/agent/context/entityStore.d.ts.map +1 -0
  129. package/dist/agent/context/entityStore.js +621 -0
  130. package/dist/agent/context/entityStore.js.map +1 -0
  131. package/dist/agent/context/focusStore.d.ts +229 -0
  132. package/dist/agent/context/focusStore.d.ts.map +1 -0
  133. package/dist/agent/context/focusStore.js +528 -0
  134. package/dist/agent/context/focusStore.js.map +1 -0
  135. package/dist/agent/context/index.d.ts +10 -0
  136. package/dist/agent/context/index.d.ts.map +1 -0
  137. package/dist/agent/context/index.js +42 -0
  138. package/dist/agent/context/index.js.map +1 -0
  139. package/dist/agent/context/policies/evaluatorPolicy.d.ts +22 -0
  140. package/dist/agent/context/policies/evaluatorPolicy.d.ts.map +1 -0
  141. package/dist/agent/context/policies/evaluatorPolicy.js +82 -0
  142. package/dist/agent/context/policies/evaluatorPolicy.js.map +1 -0
  143. package/dist/agent/context/policies/index.d.ts +7 -0
  144. package/dist/agent/context/policies/index.d.ts.map +1 -0
  145. package/dist/agent/context/policies/index.js +18 -0
  146. package/dist/agent/context/policies/index.js.map +1 -0
  147. package/dist/agent/context/policies/plannerPolicy.d.ts +27 -0
  148. package/dist/agent/context/policies/plannerPolicy.d.ts.map +1 -0
  149. package/dist/agent/context/policies/plannerPolicy.js +67 -0
  150. package/dist/agent/context/policies/plannerPolicy.js.map +1 -0
  151. package/dist/agent/context/policies/workerPolicy.d.ts +29 -0
  152. package/dist/agent/context/policies/workerPolicy.d.ts.map +1 -0
  153. package/dist/agent/context/policies/workerPolicy.js +99 -0
  154. package/dist/agent/context/policies/workerPolicy.js.map +1 -0
  155. package/dist/agent/core/circuitBreaker.d.ts +150 -0
  156. package/dist/agent/core/circuitBreaker.d.ts.map +1 -0
  157. package/dist/agent/core/circuitBreaker.js +500 -0
  158. package/dist/agent/core/circuitBreaker.js.map +1 -0
  159. package/dist/agent/core/conclusionContract.d.ts +61 -0
  160. package/dist/agent/core/conclusionContract.d.ts.map +1 -0
  161. package/dist/agent/core/conclusionContract.js +6 -0
  162. package/dist/agent/core/conclusionContract.js.map +1 -0
  163. package/dist/agent/core/conclusionGenerator.d.ts +42 -0
  164. package/dist/agent/core/conclusionGenerator.d.ts.map +1 -0
  165. package/dist/agent/core/conclusionGenerator.js +4109 -0
  166. package/dist/agent/core/conclusionGenerator.js.map +1 -0
  167. package/dist/agent/core/conclusionSceneTemplates.d.ts +8 -0
  168. package/dist/agent/core/conclusionSceneTemplates.d.ts.map +1 -0
  169. package/dist/agent/core/conclusionSceneTemplates.js +31 -0
  170. package/dist/agent/core/conclusionSceneTemplates.js.map +1 -0
  171. package/dist/agent/core/drillDownResolver.d.ts +67 -0
  172. package/dist/agent/core/drillDownResolver.d.ts.map +1 -0
  173. package/dist/agent/core/drillDownResolver.js +583 -0
  174. package/dist/agent/core/drillDownResolver.js.map +1 -0
  175. package/dist/agent/core/emittedEnvelopeRegistry.d.ts +75 -0
  176. package/dist/agent/core/emittedEnvelopeRegistry.d.ts.map +1 -0
  177. package/dist/agent/core/emittedEnvelopeRegistry.js +164 -0
  178. package/dist/agent/core/emittedEnvelopeRegistry.js.map +1 -0
  179. package/dist/agent/core/entityCapture.d.ts +53 -0
  180. package/dist/agent/core/entityCapture.d.ts.map +1 -0
  181. package/dist/agent/core/entityCapture.js +522 -0
  182. package/dist/agent/core/entityCapture.js.map +1 -0
  183. package/dist/agent/core/entityRegistry.d.ts +19 -0
  184. package/dist/agent/core/entityRegistry.d.ts.map +1 -0
  185. package/dist/agent/core/entityRegistry.js +102 -0
  186. package/dist/agent/core/entityRegistry.js.map +1 -0
  187. package/dist/agent/core/executors/analysisExecutor.d.ts +21 -0
  188. package/dist/agent/core/executors/analysisExecutor.d.ts.map +1 -0
  189. package/dist/agent/core/executors/analysisExecutor.js +6 -0
  190. package/dist/agent/core/executors/analysisExecutor.js.map +1 -0
  191. package/dist/agent/core/executors/clarifyExecutor.d.ts +42 -0
  192. package/dist/agent/core/executors/clarifyExecutor.d.ts.map +1 -0
  193. package/dist/agent/core/executors/clarifyExecutor.js +316 -0
  194. package/dist/agent/core/executors/clarifyExecutor.js.map +1 -0
  195. package/dist/agent/core/executors/comparisonExecutor.d.ts +39 -0
  196. package/dist/agent/core/executors/comparisonExecutor.d.ts.map +1 -0
  197. package/dist/agent/core/executors/comparisonExecutor.js +404 -0
  198. package/dist/agent/core/executors/comparisonExecutor.js.map +1 -0
  199. package/dist/agent/core/executors/directDrillDownExecutor.d.ts +56 -0
  200. package/dist/agent/core/executors/directDrillDownExecutor.d.ts.map +1 -0
  201. package/dist/agent/core/executors/directDrillDownExecutor.js +665 -0
  202. package/dist/agent/core/executors/directDrillDownExecutor.js.map +1 -0
  203. package/dist/agent/core/executors/directSkillExecutor.d.ts +106 -0
  204. package/dist/agent/core/executors/directSkillExecutor.d.ts.map +1 -0
  205. package/dist/agent/core/executors/directSkillExecutor.js +633 -0
  206. package/dist/agent/core/executors/directSkillExecutor.js.map +1 -0
  207. package/dist/agent/core/executors/extendExecutor.d.ts +50 -0
  208. package/dist/agent/core/executors/extendExecutor.d.ts.map +1 -0
  209. package/dist/agent/core/executors/extendExecutor.js +402 -0
  210. package/dist/agent/core/executors/extendExecutor.js.map +1 -0
  211. package/dist/agent/core/executors/hypothesisExecutor.d.ts +52 -0
  212. package/dist/agent/core/executors/hypothesisExecutor.d.ts.map +1 -0
  213. package/dist/agent/core/executors/hypothesisExecutor.js +564 -0
  214. package/dist/agent/core/executors/hypothesisExecutor.js.map +1 -0
  215. package/dist/agent/core/executors/index.d.ts +9 -0
  216. package/dist/agent/core/executors/index.d.ts.map +1 -0
  217. package/dist/agent/core/executors/index.js +15 -0
  218. package/dist/agent/core/executors/index.js.map +1 -0
  219. package/dist/agent/core/executors/strategy/strategyFrameEnvelopeCoordinator.d.ts +12 -0
  220. package/dist/agent/core/executors/strategy/strategyFrameEnvelopeCoordinator.d.ts.map +1 -0
  221. package/dist/agent/core/executors/strategy/strategyFrameEnvelopeCoordinator.js +186 -0
  222. package/dist/agent/core/executors/strategy/strategyFrameEnvelopeCoordinator.js.map +1 -0
  223. package/dist/agent/core/executors/strategy/strategyFrameMechanismCollector.d.ts +9 -0
  224. package/dist/agent/core/executors/strategy/strategyFrameMechanismCollector.d.ts.map +1 -0
  225. package/dist/agent/core/executors/strategy/strategyFrameMechanismCollector.js +123 -0
  226. package/dist/agent/core/executors/strategy/strategyFrameMechanismCollector.js.map +1 -0
  227. package/dist/agent/core/executors/strategy/strategyStagePlanner.d.ts +18 -0
  228. package/dist/agent/core/executors/strategy/strategyStagePlanner.d.ts.map +1 -0
  229. package/dist/agent/core/executors/strategy/strategyStagePlanner.js +69 -0
  230. package/dist/agent/core/executors/strategy/strategyStagePlanner.js.map +1 -0
  231. package/dist/agent/core/executors/strategy/strategyStageTaskBuilder.d.ts +14 -0
  232. package/dist/agent/core/executors/strategy/strategyStageTaskBuilder.d.ts.map +1 -0
  233. package/dist/agent/core/executors/strategy/strategyStageTaskBuilder.js +129 -0
  234. package/dist/agent/core/executors/strategy/strategyStageTaskBuilder.js.map +1 -0
  235. package/dist/agent/core/executors/strategyExecutor.d.ts +16 -0
  236. package/dist/agent/core/executors/strategyExecutor.d.ts.map +1 -0
  237. package/dist/agent/core/executors/strategyExecutor.js +377 -0
  238. package/dist/agent/core/executors/strategyExecutor.js.map +1 -0
  239. package/dist/agent/core/executors/traceConfigDetector.d.ts +28 -0
  240. package/dist/agent/core/executors/traceConfigDetector.d.ts.map +1 -0
  241. package/dist/agent/core/executors/traceConfigDetector.js +156 -0
  242. package/dist/agent/core/executors/traceConfigDetector.js.map +1 -0
  243. package/dist/agent/core/feedbackSynthesizer.d.ts +28 -0
  244. package/dist/agent/core/feedbackSynthesizer.d.ts.map +1 -0
  245. package/dist/agent/core/feedbackSynthesizer.js +841 -0
  246. package/dist/agent/core/feedbackSynthesizer.js.map +1 -0
  247. package/dist/agent/core/followUpHandler.d.ts +36 -0
  248. package/dist/agent/core/followUpHandler.d.ts.map +1 -0
  249. package/dist/agent/core/followUpHandler.js +413 -0
  250. package/dist/agent/core/followUpHandler.js.map +1 -0
  251. package/dist/agent/core/hypothesisGenerator.d.ts +45 -0
  252. package/dist/agent/core/hypothesisGenerator.d.ts.map +1 -0
  253. package/dist/agent/core/hypothesisGenerator.js +257 -0
  254. package/dist/agent/core/hypothesisGenerator.js.map +1 -0
  255. package/dist/agent/core/incrementalAnalyzer.d.ts +164 -0
  256. package/dist/agent/core/incrementalAnalyzer.d.ts.map +1 -0
  257. package/dist/agent/core/incrementalAnalyzer.js +382 -0
  258. package/dist/agent/core/incrementalAnalyzer.js.map +1 -0
  259. package/dist/agent/core/index.d.ts +25 -0
  260. package/dist/agent/core/index.d.ts.map +1 -0
  261. package/dist/agent/core/index.js +61 -0
  262. package/dist/agent/core/index.js.map +1 -0
  263. package/dist/agent/core/intentUnderstanding.d.ts +28 -0
  264. package/dist/agent/core/intentUnderstanding.d.ts.map +1 -0
  265. package/dist/agent/core/intentUnderstanding.js +451 -0
  266. package/dist/agent/core/intentUnderstanding.js.map +1 -0
  267. package/dist/agent/core/interventionController.d.ts +211 -0
  268. package/dist/agent/core/interventionController.d.ts.map +1 -0
  269. package/dist/agent/core/interventionController.js +477 -0
  270. package/dist/agent/core/interventionController.js.map +1 -0
  271. package/dist/agent/core/jankCauseSummarizer.d.ts +87 -0
  272. package/dist/agent/core/jankCauseSummarizer.d.ts.map +1 -0
  273. package/dist/agent/core/jankCauseSummarizer.js +432 -0
  274. package/dist/agent/core/jankCauseSummarizer.js.map +1 -0
  275. package/dist/agent/core/modelRouter.d.ts +164 -0
  276. package/dist/agent/core/modelRouter.d.ts.map +1 -0
  277. package/dist/agent/core/modelRouter.js +1169 -0
  278. package/dist/agent/core/modelRouter.js.map +1 -0
  279. package/dist/agent/core/modelRouterSingleton.d.ts +4 -0
  280. package/dist/agent/core/modelRouterSingleton.d.ts.map +1 -0
  281. package/dist/agent/core/modelRouterSingleton.js +20 -0
  282. package/dist/agent/core/modelRouterSingleton.js.map +1 -0
  283. package/dist/agent/core/orchestratorTypes.d.ts +506 -0
  284. package/dist/agent/core/orchestratorTypes.d.ts.map +1 -0
  285. package/dist/agent/core/orchestratorTypes.js +91 -0
  286. package/dist/agent/core/orchestratorTypes.js.map +1 -0
  287. package/dist/agent/core/pipelineExecutor.d.ts +154 -0
  288. package/dist/agent/core/pipelineExecutor.d.ts.map +1 -0
  289. package/dist/agent/core/pipelineExecutor.js +677 -0
  290. package/dist/agent/core/pipelineExecutor.js.map +1 -0
  291. package/dist/agent/core/scenePolicy.d.ts +3 -0
  292. package/dist/agent/core/scenePolicy.d.ts.map +1 -0
  293. package/dist/agent/core/scenePolicy.js +49 -0
  294. package/dist/agent/core/scenePolicy.js.map +1 -0
  295. package/dist/agent/core/sceneRouter.d.ts +8 -0
  296. package/dist/agent/core/sceneRouter.d.ts.map +1 -0
  297. package/dist/agent/core/sceneRouter.js +122 -0
  298. package/dist/agent/core/sceneRouter.js.map +1 -0
  299. package/dist/agent/core/sceneTaxonomy.d.ts +6 -0
  300. package/dist/agent/core/sceneTaxonomy.d.ts.map +1 -0
  301. package/dist/agent/core/sceneTaxonomy.js +83 -0
  302. package/dist/agent/core/sceneTaxonomy.js.map +1 -0
  303. package/dist/agent/core/sceneTemplateStore.d.ts +10 -0
  304. package/dist/agent/core/sceneTemplateStore.d.ts.map +1 -0
  305. package/dist/agent/core/sceneTemplateStore.js +244 -0
  306. package/dist/agent/core/sceneTemplateStore.js.map +1 -0
  307. package/dist/agent/core/sceneTemplateValidator.d.ts +22 -0
  308. package/dist/agent/core/sceneTemplateValidator.d.ts.map +1 -0
  309. package/dist/agent/core/sceneTemplateValidator.js +226 -0
  310. package/dist/agent/core/sceneTemplateValidator.js.map +1 -0
  311. package/dist/agent/core/sceneTypes.d.ts +53 -0
  312. package/dist/agent/core/sceneTypes.d.ts.map +1 -0
  313. package/dist/agent/core/sceneTypes.js +6 -0
  314. package/dist/agent/core/sceneTypes.js.map +1 -0
  315. package/dist/agent/core/stateMachine.d.ts +135 -0
  316. package/dist/agent/core/stateMachine.d.ts.map +1 -0
  317. package/dist/agent/core/stateMachine.js +516 -0
  318. package/dist/agent/core/stateMachine.js.map +1 -0
  319. package/dist/agent/core/strategySelector.d.ts +121 -0
  320. package/dist/agent/core/strategySelector.d.ts.map +1 -0
  321. package/dist/agent/core/strategySelector.js +344 -0
  322. package/dist/agent/core/strategySelector.js.map +1 -0
  323. package/dist/agent/core/taskGraphExecutor.d.ts +30 -0
  324. package/dist/agent/core/taskGraphExecutor.d.ts.map +1 -0
  325. package/dist/agent/core/taskGraphExecutor.js +142 -0
  326. package/dist/agent/core/taskGraphExecutor.js.map +1 -0
  327. package/dist/agent/core/taskGraphPlanner.d.ts +33 -0
  328. package/dist/agent/core/taskGraphPlanner.d.ts.map +1 -0
  329. package/dist/agent/core/taskGraphPlanner.js +312 -0
  330. package/dist/agent/core/taskGraphPlanner.js.map +1 -0
  331. package/dist/agent/decision/decisionTreeExecutor.d.ts +55 -0
  332. package/dist/agent/decision/decisionTreeExecutor.d.ts.map +1 -0
  333. package/dist/agent/decision/decisionTreeExecutor.js +250 -0
  334. package/dist/agent/decision/decisionTreeExecutor.js.map +1 -0
  335. package/dist/agent/decision/decisionTreeStageExecutor.d.ts +65 -0
  336. package/dist/agent/decision/decisionTreeStageExecutor.d.ts.map +1 -0
  337. package/dist/agent/decision/decisionTreeStageExecutor.js +286 -0
  338. package/dist/agent/decision/decisionTreeStageExecutor.js.map +1 -0
  339. package/dist/agent/decision/index.d.ts +27 -0
  340. package/dist/agent/decision/index.d.ts.map +1 -0
  341. package/dist/agent/decision/index.js +70 -0
  342. package/dist/agent/decision/index.js.map +1 -0
  343. package/dist/agent/decision/skillExecutorAdapter.d.ts +89 -0
  344. package/dist/agent/decision/skillExecutorAdapter.d.ts.map +1 -0
  345. package/dist/agent/decision/skillExecutorAdapter.js +447 -0
  346. package/dist/agent/decision/skillExecutorAdapter.js.map +1 -0
  347. package/dist/agent/decision/trees/index.d.ts +8 -0
  348. package/dist/agent/decision/trees/index.d.ts.map +1 -0
  349. package/dist/agent/decision/trees/index.js +16 -0
  350. package/dist/agent/decision/trees/index.js.map +1 -0
  351. package/dist/agent/decision/trees/launchDecisionTree.d.ts +7 -0
  352. package/dist/agent/decision/trees/launchDecisionTree.d.ts.map +1 -0
  353. package/dist/agent/decision/trees/launchDecisionTree.js +670 -0
  354. package/dist/agent/decision/trees/launchDecisionTree.js.map +1 -0
  355. package/dist/agent/decision/trees/scrollingDecisionTree.d.ts +7 -0
  356. package/dist/agent/decision/trees/scrollingDecisionTree.d.ts.map +1 -0
  357. package/dist/agent/decision/trees/scrollingDecisionTree.js +698 -0
  358. package/dist/agent/decision/trees/scrollingDecisionTree.js.map +1 -0
  359. package/dist/agent/decision/types.d.ts +191 -0
  360. package/dist/agent/decision/types.d.ts.map +1 -0
  361. package/dist/agent/decision/types.js +6 -0
  362. package/dist/agent/decision/types.js.map +1 -0
  363. package/dist/agent/detectors/architectureDetector.d.ts +31 -0
  364. package/dist/agent/detectors/architectureDetector.d.ts.map +1 -0
  365. package/dist/agent/detectors/architectureDetector.js +190 -0
  366. package/dist/agent/detectors/architectureDetector.js.map +1 -0
  367. package/dist/agent/detectors/index.d.ts +11 -0
  368. package/dist/agent/detectors/index.d.ts.map +1 -0
  369. package/dist/agent/detectors/index.js +36 -0
  370. package/dist/agent/detectors/index.js.map +1 -0
  371. package/dist/agent/detectors/types.d.ts +113 -0
  372. package/dist/agent/detectors/types.d.ts.map +1 -0
  373. package/dist/agent/detectors/types.js +6 -0
  374. package/dist/agent/detectors/types.js.map +1 -0
  375. package/dist/agent/evalSystem.d.ts +61 -0
  376. package/dist/agent/evalSystem.d.ts.map +1 -0
  377. package/dist/agent/evalSystem.js +210 -0
  378. package/dist/agent/evalSystem.js.map +1 -0
  379. package/dist/agent/experts/base/baseExpert.d.ts +108 -0
  380. package/dist/agent/experts/base/baseExpert.d.ts.map +1 -0
  381. package/dist/agent/experts/base/baseExpert.js +359 -0
  382. package/dist/agent/experts/base/baseExpert.js.map +1 -0
  383. package/dist/agent/experts/base/index.d.ts +9 -0
  384. package/dist/agent/experts/base/index.d.ts.map +1 -0
  385. package/dist/agent/experts/base/index.js +15 -0
  386. package/dist/agent/experts/base/index.js.map +1 -0
  387. package/dist/agent/experts/base/types.d.ts +202 -0
  388. package/dist/agent/experts/base/types.d.ts.map +1 -0
  389. package/dist/agent/experts/base/types.js +6 -0
  390. package/dist/agent/experts/base/types.js.map +1 -0
  391. package/dist/agent/experts/crossDomain/baseCrossDomainExpert.d.ts +113 -0
  392. package/dist/agent/experts/crossDomain/baseCrossDomainExpert.d.ts.map +1 -0
  393. package/dist/agent/experts/crossDomain/baseCrossDomainExpert.js +412 -0
  394. package/dist/agent/experts/crossDomain/baseCrossDomainExpert.js.map +1 -0
  395. package/dist/agent/experts/crossDomain/dialogueProtocol.d.ts +164 -0
  396. package/dist/agent/experts/crossDomain/dialogueProtocol.d.ts.map +1 -0
  397. package/dist/agent/experts/crossDomain/dialogueProtocol.js +390 -0
  398. package/dist/agent/experts/crossDomain/dialogueProtocol.js.map +1 -0
  399. package/dist/agent/experts/crossDomain/experts/performanceExpert.d.ts +119 -0
  400. package/dist/agent/experts/crossDomain/experts/performanceExpert.d.ts.map +1 -0
  401. package/dist/agent/experts/crossDomain/experts/performanceExpert.js +736 -0
  402. package/dist/agent/experts/crossDomain/experts/performanceExpert.js.map +1 -0
  403. package/dist/agent/experts/crossDomain/hypothesisManager.d.ts +105 -0
  404. package/dist/agent/experts/crossDomain/hypothesisManager.d.ts.map +1 -0
  405. package/dist/agent/experts/crossDomain/hypothesisManager.js +283 -0
  406. package/dist/agent/experts/crossDomain/hypothesisManager.js.map +1 -0
  407. package/dist/agent/experts/crossDomain/index.d.ts +18 -0
  408. package/dist/agent/experts/crossDomain/index.d.ts.map +1 -0
  409. package/dist/agent/experts/crossDomain/index.js +28 -0
  410. package/dist/agent/experts/crossDomain/index.js.map +1 -0
  411. package/dist/agent/experts/crossDomain/moduleCatalog.d.ts +97 -0
  412. package/dist/agent/experts/crossDomain/moduleCatalog.d.ts.map +1 -0
  413. package/dist/agent/experts/crossDomain/moduleCatalog.js +453 -0
  414. package/dist/agent/experts/crossDomain/moduleCatalog.js.map +1 -0
  415. package/dist/agent/experts/crossDomain/moduleExpertInvoker.d.ts +149 -0
  416. package/dist/agent/experts/crossDomain/moduleExpertInvoker.d.ts.map +1 -0
  417. package/dist/agent/experts/crossDomain/moduleExpertInvoker.js +582 -0
  418. package/dist/agent/experts/crossDomain/moduleExpertInvoker.js.map +1 -0
  419. package/dist/agent/experts/crossDomain/types.d.ts +369 -0
  420. package/dist/agent/experts/crossDomain/types.d.ts.map +1 -0
  421. package/dist/agent/experts/crossDomain/types.js +6 -0
  422. package/dist/agent/experts/crossDomain/types.js.map +1 -0
  423. package/dist/agent/experts/index.d.ts +81 -0
  424. package/dist/agent/experts/index.d.ts.map +1 -0
  425. package/dist/agent/experts/index.js +222 -0
  426. package/dist/agent/experts/index.js.map +1 -0
  427. package/dist/agent/experts/interactionExpert.d.ts +66 -0
  428. package/dist/agent/experts/interactionExpert.d.ts.map +1 -0
  429. package/dist/agent/experts/interactionExpert.js +280 -0
  430. package/dist/agent/experts/interactionExpert.js.map +1 -0
  431. package/dist/agent/experts/launchExpert.d.ts +73 -0
  432. package/dist/agent/experts/launchExpert.d.ts.map +1 -0
  433. package/dist/agent/experts/launchExpert.js +411 -0
  434. package/dist/agent/experts/launchExpert.js.map +1 -0
  435. package/dist/agent/experts/systemExpert.d.ts +81 -0
  436. package/dist/agent/experts/systemExpert.d.ts.map +1 -0
  437. package/dist/agent/experts/systemExpert.js +507 -0
  438. package/dist/agent/experts/systemExpert.js.map +1 -0
  439. package/dist/agent/fork/forkManager.d.ts +161 -0
  440. package/dist/agent/fork/forkManager.d.ts.map +1 -0
  441. package/dist/agent/fork/forkManager.js +721 -0
  442. package/dist/agent/fork/forkManager.js.map +1 -0
  443. package/dist/agent/fork/forkTypes.d.ts +274 -0
  444. package/dist/agent/fork/forkTypes.d.ts.map +1 -0
  445. package/dist/agent/fork/forkTypes.js +18 -0
  446. package/dist/agent/fork/forkTypes.js.map +1 -0
  447. package/dist/agent/fork/index.d.ts +10 -0
  448. package/dist/agent/fork/index.d.ts.map +1 -0
  449. package/dist/agent/fork/index.js +47 -0
  450. package/dist/agent/fork/index.js.map +1 -0
  451. package/dist/agent/fork/mergeStrategies.d.ts +115 -0
  452. package/dist/agent/fork/mergeStrategies.d.ts.map +1 -0
  453. package/dist/agent/fork/mergeStrategies.js +404 -0
  454. package/dist/agent/fork/mergeStrategies.js.map +1 -0
  455. package/dist/agent/fork/sessionTree.d.ts +141 -0
  456. package/dist/agent/fork/sessionTree.d.ts.map +1 -0
  457. package/dist/agent/fork/sessionTree.js +443 -0
  458. package/dist/agent/fork/sessionTree.js.map +1 -0
  459. package/dist/agent/hooks/hookContext.d.ts +19 -0
  460. package/dist/agent/hooks/hookContext.d.ts.map +1 -0
  461. package/dist/agent/hooks/hookContext.js +67 -0
  462. package/dist/agent/hooks/hookContext.js.map +1 -0
  463. package/dist/agent/hooks/hookRegistry.d.ts +73 -0
  464. package/dist/agent/hooks/hookRegistry.d.ts.map +1 -0
  465. package/dist/agent/hooks/hookRegistry.js +271 -0
  466. package/dist/agent/hooks/hookRegistry.js.map +1 -0
  467. package/dist/agent/hooks/hookTypes.d.ts +186 -0
  468. package/dist/agent/hooks/hookTypes.d.ts.map +1 -0
  469. package/dist/agent/hooks/hookTypes.js +24 -0
  470. package/dist/agent/hooks/hookTypes.js.map +1 -0
  471. package/dist/agent/hooks/index.d.ts +10 -0
  472. package/dist/agent/hooks/index.d.ts.map +1 -0
  473. package/dist/agent/hooks/index.js +41 -0
  474. package/dist/agent/hooks/index.js.map +1 -0
  475. package/dist/agent/hooks/middleware/index.d.ts +6 -0
  476. package/dist/agent/hooks/middleware/index.d.ts.map +1 -0
  477. package/dist/agent/hooks/middleware/index.js +17 -0
  478. package/dist/agent/hooks/middleware/index.js.map +1 -0
  479. package/dist/agent/hooks/middleware/loggingMiddleware.d.ts +27 -0
  480. package/dist/agent/hooks/middleware/loggingMiddleware.d.ts.map +1 -0
  481. package/dist/agent/hooks/middleware/loggingMiddleware.js +104 -0
  482. package/dist/agent/hooks/middleware/loggingMiddleware.js.map +1 -0
  483. package/dist/agent/hooks/middleware/timingMiddleware.d.ts +56 -0
  484. package/dist/agent/hooks/middleware/timingMiddleware.d.ts.map +1 -0
  485. package/dist/agent/hooks/middleware/timingMiddleware.js +171 -0
  486. package/dist/agent/hooks/middleware/timingMiddleware.js.map +1 -0
  487. package/dist/agent/index.d.ts +15 -0
  488. package/dist/agent/index.d.ts.map +1 -0
  489. package/dist/agent/index.js +88 -0
  490. package/dist/agent/index.js.map +1 -0
  491. package/dist/agent/llmAdapter.d.ts +33 -0
  492. package/dist/agent/llmAdapter.d.ts.map +1 -0
  493. package/dist/agent/llmAdapter.js +257 -0
  494. package/dist/agent/llmAdapter.js.map +1 -0
  495. package/dist/agent/scene/sceneAnalysisJobRunner.d.ts +106 -0
  496. package/dist/agent/scene/sceneAnalysisJobRunner.d.ts.map +1 -0
  497. package/dist/agent/scene/sceneAnalysisJobRunner.js +201 -0
  498. package/dist/agent/scene/sceneAnalysisJobRunner.js.map +1 -0
  499. package/dist/agent/scene/sceneCostEstimator.d.ts +33 -0
  500. package/dist/agent/scene/sceneCostEstimator.d.ts.map +1 -0
  501. package/dist/agent/scene/sceneCostEstimator.js +42 -0
  502. package/dist/agent/scene/sceneCostEstimator.js.map +1 -0
  503. package/dist/agent/scene/sceneIntervalBuilder.d.ts +37 -0
  504. package/dist/agent/scene/sceneIntervalBuilder.d.ts.map +1 -0
  505. package/dist/agent/scene/sceneIntervalBuilder.js +748 -0
  506. package/dist/agent/scene/sceneIntervalBuilder.js.map +1 -0
  507. package/dist/agent/scene/sceneStage1Runner.d.ts +47 -0
  508. package/dist/agent/scene/sceneStage1Runner.d.ts.map +1 -0
  509. package/dist/agent/scene/sceneStage1Runner.js +49 -0
  510. package/dist/agent/scene/sceneStage1Runner.js.map +1 -0
  511. package/dist/agent/scene/sceneStage3Summarizer.d.ts +11 -0
  512. package/dist/agent/scene/sceneStage3Summarizer.d.ts.map +1 -0
  513. package/dist/agent/scene/sceneStage3Summarizer.js +155 -0
  514. package/dist/agent/scene/sceneStage3Summarizer.js.map +1 -0
  515. package/dist/agent/scene/sceneStoryService.d.ts +168 -0
  516. package/dist/agent/scene/sceneStoryService.d.ts.map +1 -0
  517. package/dist/agent/scene/sceneStoryService.js +623 -0
  518. package/dist/agent/scene/sceneStoryService.js.map +1 -0
  519. package/dist/agent/scene/sceneTraceDurationProbe.d.ts +16 -0
  520. package/dist/agent/scene/sceneTraceDurationProbe.d.ts.map +1 -0
  521. package/dist/agent/scene/sceneTraceDurationProbe.js +22 -0
  522. package/dist/agent/scene/sceneTraceDurationProbe.js.map +1 -0
  523. package/dist/agent/scene/traceHash.d.ts +23 -0
  524. package/dist/agent/scene/traceHash.d.ts.map +1 -0
  525. package/dist/agent/scene/traceHash.js +65 -0
  526. package/dist/agent/scene/traceHash.js.map +1 -0
  527. package/dist/agent/scene/types.d.ts +199 -0
  528. package/dist/agent/scene/types.d.ts.map +1 -0
  529. package/dist/agent/scene/types.js +6 -0
  530. package/dist/agent/scene/types.js.map +1 -0
  531. package/dist/agent/state/checkpointManager.d.ts +85 -0
  532. package/dist/agent/state/checkpointManager.d.ts.map +1 -0
  533. package/dist/agent/state/checkpointManager.js +339 -0
  534. package/dist/agent/state/checkpointManager.js.map +1 -0
  535. package/dist/agent/state/index.d.ts +11 -0
  536. package/dist/agent/state/index.d.ts.map +1 -0
  537. package/dist/agent/state/index.js +21 -0
  538. package/dist/agent/state/index.js.map +1 -0
  539. package/dist/agent/state/sessionStore.d.ts +126 -0
  540. package/dist/agent/state/sessionStore.d.ts.map +1 -0
  541. package/dist/agent/state/sessionStore.js +440 -0
  542. package/dist/agent/state/sessionStore.js.map +1 -0
  543. package/dist/agent/state/traceAgentState.d.ts +125 -0
  544. package/dist/agent/state/traceAgentState.d.ts.map +1 -0
  545. package/dist/agent/state/traceAgentState.js +173 -0
  546. package/dist/agent/state/traceAgentState.js.map +1 -0
  547. package/dist/agent/strategies/helpers.d.ts +44 -0
  548. package/dist/agent/strategies/helpers.d.ts.map +1 -0
  549. package/dist/agent/strategies/helpers.js +138 -0
  550. package/dist/agent/strategies/helpers.js.map +1 -0
  551. package/dist/agent/strategies/index.d.ts +15 -0
  552. package/dist/agent/strategies/index.d.ts.map +1 -0
  553. package/dist/agent/strategies/index.js +23 -0
  554. package/dist/agent/strategies/index.js.map +1 -0
  555. package/dist/agent/strategies/interactionStrategy.d.ts +3 -0
  556. package/dist/agent/strategies/interactionStrategy.d.ts.map +1 -0
  557. package/dist/agent/strategies/interactionStrategy.js +242 -0
  558. package/dist/agent/strategies/interactionStrategy.js.map +1 -0
  559. package/dist/agent/strategies/registry.d.ts +110 -0
  560. package/dist/agent/strategies/registry.d.ts.map +1 -0
  561. package/dist/agent/strategies/registry.js +264 -0
  562. package/dist/agent/strategies/registry.js.map +1 -0
  563. package/dist/agent/strategies/sceneReconstructionStrategy.d.ts +4 -0
  564. package/dist/agent/strategies/sceneReconstructionStrategy.d.ts.map +1 -0
  565. package/dist/agent/strategies/sceneReconstructionStrategy.js +593 -0
  566. package/dist/agent/strategies/sceneReconstructionStrategy.js.map +1 -0
  567. package/dist/agent/strategies/scrollingStrategy.d.ts +3 -0
  568. package/dist/agent/strategies/scrollingStrategy.d.ts.map +1 -0
  569. package/dist/agent/strategies/scrollingStrategy.js +414 -0
  570. package/dist/agent/strategies/scrollingStrategy.js.map +1 -0
  571. package/dist/agent/strategies/startupStrategy.d.ts +3 -0
  572. package/dist/agent/strategies/startupStrategy.d.ts.map +1 -0
  573. package/dist/agent/strategies/startupStrategy.js +495 -0
  574. package/dist/agent/strategies/startupStrategy.js.map +1 -0
  575. package/dist/agent/strategies/types.d.ts +156 -0
  576. package/dist/agent/strategies/types.d.ts.map +1 -0
  577. package/dist/agent/strategies/types.js +6 -0
  578. package/dist/agent/strategies/types.js.map +1 -0
  579. package/dist/agent/toolRegistry.d.ts +4 -0
  580. package/dist/agent/toolRegistry.d.ts.map +1 -0
  581. package/dist/agent/toolRegistry.js +45 -0
  582. package/dist/agent/toolRegistry.js.map +1 -0
  583. package/dist/agent/tools/dataStats.d.ts +23 -0
  584. package/dist/agent/tools/dataStats.d.ts.map +1 -0
  585. package/dist/agent/tools/dataStats.js +123 -0
  586. package/dist/agent/tools/dataStats.js.map +1 -0
  587. package/dist/agent/tools/frameAnalyzer.d.ts +45 -0
  588. package/dist/agent/tools/frameAnalyzer.d.ts.map +1 -0
  589. package/dist/agent/tools/frameAnalyzer.js +338 -0
  590. package/dist/agent/tools/frameAnalyzer.js.map +1 -0
  591. package/dist/agent/tools/index.d.ts +6 -0
  592. package/dist/agent/tools/index.d.ts.map +1 -0
  593. package/dist/agent/tools/index.js +31 -0
  594. package/dist/agent/tools/index.js.map +1 -0
  595. package/dist/agent/tools/skillInvoker.d.ts +50 -0
  596. package/dist/agent/tools/skillInvoker.d.ts.map +1 -0
  597. package/dist/agent/tools/skillInvoker.js +279 -0
  598. package/dist/agent/tools/skillInvoker.js.map +1 -0
  599. package/dist/agent/tools/sqlExecutor.d.ts +12 -0
  600. package/dist/agent/tools/sqlExecutor.d.ts.map +1 -0
  601. package/dist/agent/tools/sqlExecutor.js +193 -0
  602. package/dist/agent/tools/sqlExecutor.js.map +1 -0
  603. package/dist/agent/tools/sqlGenerator.d.ts +154 -0
  604. package/dist/agent/tools/sqlGenerator.d.ts.map +1 -0
  605. package/dist/agent/tools/sqlGenerator.js +449 -0
  606. package/dist/agent/tools/sqlGenerator.js.map +1 -0
  607. package/dist/agent/tools/sqlValidator.d.ts +149 -0
  608. package/dist/agent/tools/sqlValidator.d.ts.map +1 -0
  609. package/dist/agent/tools/sqlValidator.js +376 -0
  610. package/dist/agent/tools/sqlValidator.js.map +1 -0
  611. package/dist/agent/traceRecorder.d.ts +42 -0
  612. package/dist/agent/traceRecorder.d.ts.map +1 -0
  613. package/dist/agent/traceRecorder.js +122 -0
  614. package/dist/agent/traceRecorder.js.map +1 -0
  615. package/dist/agent/types/agentProtocol.d.ts +377 -0
  616. package/dist/agent/types/agentProtocol.d.ts.map +1 -0
  617. package/dist/agent/types/agentProtocol.js +102 -0
  618. package/dist/agent/types/agentProtocol.js.map +1 -0
  619. package/dist/agent/types/jankCause.d.ts +47 -0
  620. package/dist/agent/types/jankCause.d.ts.map +1 -0
  621. package/dist/agent/types/jankCause.js +6 -0
  622. package/dist/agent/types/jankCause.js.map +1 -0
  623. package/dist/agent/types.d.ts +725 -0
  624. package/dist/agent/types.d.ts.map +1 -0
  625. package/dist/agent/types.js +63 -0
  626. package/dist/agent/types.js.map +1 -0
  627. package/dist/agentOpenAI/index.d.ts +4 -0
  628. package/dist/agentOpenAI/index.d.ts.map +1 -0
  629. package/dist/agentOpenAI/index.js +17 -0
  630. package/dist/agentOpenAI/index.js.map +1 -0
  631. package/dist/agentOpenAI/mimoReasoningCompat.d.ts +9 -0
  632. package/dist/agentOpenAI/mimoReasoningCompat.d.ts.map +1 -0
  633. package/dist/agentOpenAI/mimoReasoningCompat.js +367 -0
  634. package/dist/agentOpenAI/mimoReasoningCompat.js.map +1 -0
  635. package/dist/agentOpenAI/openAiComplexityClassifier.d.ts +18 -0
  636. package/dist/agentOpenAI/openAiComplexityClassifier.d.ts.map +1 -0
  637. package/dist/agentOpenAI/openAiComplexityClassifier.js +102 -0
  638. package/dist/agentOpenAI/openAiComplexityClassifier.js.map +1 -0
  639. package/dist/agentOpenAI/openAiConfig.d.ts +38 -0
  640. package/dist/agentOpenAI/openAiConfig.d.ts.map +1 -0
  641. package/dist/agentOpenAI/openAiConfig.js +104 -0
  642. package/dist/agentOpenAI/openAiConfig.js.map +1 -0
  643. package/dist/agentOpenAI/openAiRuntime.d.ts +99 -0
  644. package/dist/agentOpenAI/openAiRuntime.d.ts.map +1 -0
  645. package/dist/agentOpenAI/openAiRuntime.js +1440 -0
  646. package/dist/agentOpenAI/openAiRuntime.js.map +1 -0
  647. package/dist/agentOpenAI/openAiToolAdapter.d.ts +9 -0
  648. package/dist/agentOpenAI/openAiToolAdapter.d.ts.map +1 -0
  649. package/dist/agentOpenAI/openAiToolAdapter.js +111 -0
  650. package/dist/agentOpenAI/openAiToolAdapter.js.map +1 -0
  651. package/dist/agentRuntime/envCredentialSources.d.ts +6 -0
  652. package/dist/agentRuntime/envCredentialSources.d.ts.map +1 -0
  653. package/dist/agentRuntime/envCredentialSources.js +104 -0
  654. package/dist/agentRuntime/envCredentialSources.js.map +1 -0
  655. package/dist/agentRuntime/index.d.ts +2 -0
  656. package/dist/agentRuntime/index.d.ts.map +1 -0
  657. package/dist/agentRuntime/index.js +10 -0
  658. package/dist/agentRuntime/index.js.map +1 -0
  659. package/dist/agentRuntime/runtimeHealth.d.ts +65 -0
  660. package/dist/agentRuntime/runtimeHealth.d.ts.map +1 -0
  661. package/dist/agentRuntime/runtimeHealth.js +58 -0
  662. package/dist/agentRuntime/runtimeHealth.js.map +1 -0
  663. package/dist/agentRuntime/runtimeSelection.d.ts +25 -0
  664. package/dist/agentRuntime/runtimeSelection.d.ts.map +1 -0
  665. package/dist/agentRuntime/runtimeSelection.js +66 -0
  666. package/dist/agentRuntime/runtimeSelection.js.map +1 -0
  667. package/dist/agentv3/__mocks__/claude-agent-sdk.d.ts +25 -0
  668. package/dist/agentv3/__mocks__/claude-agent-sdk.d.ts.map +1 -0
  669. package/dist/agentv3/__mocks__/claude-agent-sdk.js +48 -0
  670. package/dist/agentv3/__mocks__/claude-agent-sdk.js.map +1 -0
  671. package/dist/agentv3/activePhaseReminder.d.ts +12 -0
  672. package/dist/agentv3/activePhaseReminder.d.ts.map +1 -0
  673. package/dist/agentv3/activePhaseReminder.js +73 -0
  674. package/dist/agentv3/activePhaseReminder.js.map +1 -0
  675. package/dist/agentv3/agentMetrics.d.ts +114 -0
  676. package/dist/agentv3/agentMetrics.d.ts.map +1 -0
  677. package/dist/agentv3/agentMetrics.js +262 -0
  678. package/dist/agentv3/agentMetrics.js.map +1 -0
  679. package/dist/agentv3/analysisPatternMemory.d.ts +146 -0
  680. package/dist/agentv3/analysisPatternMemory.d.ts.map +1 -0
  681. package/dist/agentv3/analysisPatternMemory.js +860 -0
  682. package/dist/agentv3/analysisPatternMemory.js.map +1 -0
  683. package/dist/agentv3/analysisTermination.d.ts +21 -0
  684. package/dist/agentv3/analysisTermination.d.ts.map +1 -0
  685. package/dist/agentv3/analysisTermination.js +97 -0
  686. package/dist/agentv3/analysisTermination.js.map +1 -0
  687. package/dist/agentv3/artifactStore.d.ts +131 -0
  688. package/dist/agentv3/artifactStore.d.ts.map +1 -0
  689. package/dist/agentv3/artifactStore.js +208 -0
  690. package/dist/agentv3/artifactStore.js.map +1 -0
  691. package/dist/agentv3/claudeAgentDefinitions.d.ts +44 -0
  692. package/dist/agentv3/claudeAgentDefinitions.d.ts.map +1 -0
  693. package/dist/agentv3/claudeAgentDefinitions.js +209 -0
  694. package/dist/agentv3/claudeAgentDefinitions.js.map +1 -0
  695. package/dist/agentv3/claudeConfig.d.ts +156 -0
  696. package/dist/agentv3/claudeConfig.d.ts.map +1 -0
  697. package/dist/agentv3/claudeConfig.js +553 -0
  698. package/dist/agentv3/claudeConfig.js.map +1 -0
  699. package/dist/agentv3/claudeFindingExtractor.d.ts +15 -0
  700. package/dist/agentv3/claudeFindingExtractor.d.ts.map +1 -0
  701. package/dist/agentv3/claudeFindingExtractor.js +150 -0
  702. package/dist/agentv3/claudeFindingExtractor.js.map +1 -0
  703. package/dist/agentv3/claudeMcpServer.d.ts +89 -0
  704. package/dist/agentv3/claudeMcpServer.d.ts.map +1 -0
  705. package/dist/agentv3/claudeMcpServer.js +3785 -0
  706. package/dist/agentv3/claudeMcpServer.js.map +1 -0
  707. package/dist/agentv3/claudeRuntime.d.ts +137 -0
  708. package/dist/agentv3/claudeRuntime.d.ts.map +1 -0
  709. package/dist/agentv3/claudeRuntime.js +2541 -0
  710. package/dist/agentv3/claudeRuntime.js.map +1 -0
  711. package/dist/agentv3/claudeSseBridge.d.ts +23 -0
  712. package/dist/agentv3/claudeSseBridge.d.ts.map +1 -0
  713. package/dist/agentv3/claudeSseBridge.js +385 -0
  714. package/dist/agentv3/claudeSseBridge.js.map +1 -0
  715. package/dist/agentv3/claudeSystemPrompt.d.ts +65 -0
  716. package/dist/agentv3/claudeSystemPrompt.d.ts.map +1 -0
  717. package/dist/agentv3/claudeSystemPrompt.js +486 -0
  718. package/dist/agentv3/claudeSystemPrompt.js.map +1 -0
  719. package/dist/agentv3/claudeVerifier.d.ts +82 -0
  720. package/dist/agentv3/claudeVerifier.d.ts.map +1 -0
  721. package/dist/agentv3/claudeVerifier.js +1047 -0
  722. package/dist/agentv3/claudeVerifier.js.map +1 -0
  723. package/dist/agentv3/contextTokenMeter.d.ts +78 -0
  724. package/dist/agentv3/contextTokenMeter.d.ts.map +1 -0
  725. package/dist/agentv3/contextTokenMeter.js +88 -0
  726. package/dist/agentv3/contextTokenMeter.js.map +1 -0
  727. package/dist/agentv3/focusAppDetector.d.ts +22 -0
  728. package/dist/agentv3/focusAppDetector.d.ts.map +1 -0
  729. package/dist/agentv3/focusAppDetector.js +208 -0
  730. package/dist/agentv3/focusAppDetector.js.map +1 -0
  731. package/dist/agentv3/index.d.ts +6 -0
  732. package/dist/agentv3/index.d.ts.map +1 -0
  733. package/dist/agentv3/index.js +16 -0
  734. package/dist/agentv3/index.js.map +1 -0
  735. package/dist/agentv3/mcpToolRegistry.d.ts +90 -0
  736. package/dist/agentv3/mcpToolRegistry.d.ts.map +1 -0
  737. package/dist/agentv3/mcpToolRegistry.js +152 -0
  738. package/dist/agentv3/mcpToolRegistry.js.map +1 -0
  739. package/dist/agentv3/outputLanguage.d.ts +6 -0
  740. package/dist/agentv3/outputLanguage.d.ts.map +1 -0
  741. package/dist/agentv3/outputLanguage.js +37 -0
  742. package/dist/agentv3/outputLanguage.js.map +1 -0
  743. package/dist/agentv3/phaseHintMatcher.d.ts +36 -0
  744. package/dist/agentv3/phaseHintMatcher.d.ts.map +1 -0
  745. package/dist/agentv3/phaseHintMatcher.js +48 -0
  746. package/dist/agentv3/phaseHintMatcher.js.map +1 -0
  747. package/dist/agentv3/projectMemory.d.ts +80 -0
  748. package/dist/agentv3/projectMemory.d.ts.map +1 -0
  749. package/dist/agentv3/projectMemory.js +334 -0
  750. package/dist/agentv3/projectMemory.js.map +1 -0
  751. package/dist/agentv3/queryComplexityClassifier.d.ts +21 -0
  752. package/dist/agentv3/queryComplexityClassifier.d.ts.map +1 -0
  753. package/dist/agentv3/queryComplexityClassifier.js +196 -0
  754. package/dist/agentv3/queryComplexityClassifier.js.map +1 -0
  755. package/dist/agentv3/rawSqlNormalizer.d.ts +11 -0
  756. package/dist/agentv3/rawSqlNormalizer.d.ts.map +1 -0
  757. package/dist/agentv3/rawSqlNormalizer.js +649 -0
  758. package/dist/agentv3/rawSqlNormalizer.js.map +1 -0
  759. package/dist/agentv3/recoveryNoteBuilder.d.ts +51 -0
  760. package/dist/agentv3/recoveryNoteBuilder.d.ts.map +1 -0
  761. package/dist/agentv3/recoveryNoteBuilder.js +84 -0
  762. package/dist/agentv3/recoveryNoteBuilder.js.map +1 -0
  763. package/dist/agentv3/sceneClassifier.d.ts +11 -0
  764. package/dist/agentv3/sceneClassifier.d.ts.map +1 -0
  765. package/dist/agentv3/sceneClassifier.js +46 -0
  766. package/dist/agentv3/sceneClassifier.js.map +1 -0
  767. package/dist/agentv3/scenePlanTemplates.d.ts +80 -0
  768. package/dist/agentv3/scenePlanTemplates.d.ts.map +1 -0
  769. package/dist/agentv3/scenePlanTemplates.js +164 -0
  770. package/dist/agentv3/scenePlanTemplates.js.map +1 -0
  771. package/dist/agentv3/selfImprove/contentScanner.d.ts +44 -0
  772. package/dist/agentv3/selfImprove/contentScanner.d.ts.map +1 -0
  773. package/dist/agentv3/selfImprove/contentScanner.js +112 -0
  774. package/dist/agentv3/selfImprove/contentScanner.js.map +1 -0
  775. package/dist/agentv3/selfImprove/failureTaxonomy.d.ts +38 -0
  776. package/dist/agentv3/selfImprove/failureTaxonomy.d.ts.map +1 -0
  777. package/dist/agentv3/selfImprove/failureTaxonomy.js +102 -0
  778. package/dist/agentv3/selfImprove/failureTaxonomy.js.map +1 -0
  779. package/dist/agentv3/selfImprove/feedbackEnricher.d.ts +69 -0
  780. package/dist/agentv3/selfImprove/feedbackEnricher.d.ts.map +1 -0
  781. package/dist/agentv3/selfImprove/feedbackEnricher.js +135 -0
  782. package/dist/agentv3/selfImprove/feedbackEnricher.js.map +1 -0
  783. package/dist/agentv3/selfImprove/feedbackPipeline.d.ts +63 -0
  784. package/dist/agentv3/selfImprove/feedbackPipeline.d.ts.map +1 -0
  785. package/dist/agentv3/selfImprove/feedbackPipeline.js +239 -0
  786. package/dist/agentv3/selfImprove/feedbackPipeline.js.map +1 -0
  787. package/dist/agentv3/selfImprove/hintFingerprint.d.ts +14 -0
  788. package/dist/agentv3/selfImprove/hintFingerprint.d.ts.map +1 -0
  789. package/dist/agentv3/selfImprove/hintFingerprint.js +47 -0
  790. package/dist/agentv3/selfImprove/hintFingerprint.js.map +1 -0
  791. package/dist/agentv3/selfImprove/metricsAggregator.d.ts +46 -0
  792. package/dist/agentv3/selfImprove/metricsAggregator.d.ts.map +1 -0
  793. package/dist/agentv3/selfImprove/metricsAggregator.js +195 -0
  794. package/dist/agentv3/selfImprove/metricsAggregator.js.map +1 -0
  795. package/dist/agentv3/selfImprove/migrateFailureModeHash.d.ts +31 -0
  796. package/dist/agentv3/selfImprove/migrateFailureModeHash.d.ts.map +1 -0
  797. package/dist/agentv3/selfImprove/migrateFailureModeHash.js +220 -0
  798. package/dist/agentv3/selfImprove/migrateFailureModeHash.js.map +1 -0
  799. package/dist/agentv3/selfImprove/phaseHintsRenderer.d.ts +56 -0
  800. package/dist/agentv3/selfImprove/phaseHintsRenderer.d.ts.map +1 -0
  801. package/dist/agentv3/selfImprove/phaseHintsRenderer.js +202 -0
  802. package/dist/agentv3/selfImprove/phaseHintsRenderer.js.map +1 -0
  803. package/dist/agentv3/selfImprove/promoteSkillNote.d.ts +17 -0
  804. package/dist/agentv3/selfImprove/promoteSkillNote.d.ts.map +1 -0
  805. package/dist/agentv3/selfImprove/promoteSkillNote.js +146 -0
  806. package/dist/agentv3/selfImprove/promoteSkillNote.js.map +1 -0
  807. package/dist/agentv3/selfImprove/proposeStrategyPatch.d.ts +40 -0
  808. package/dist/agentv3/selfImprove/proposeStrategyPatch.d.ts.map +1 -0
  809. package/dist/agentv3/selfImprove/proposeStrategyPatch.js +115 -0
  810. package/dist/agentv3/selfImprove/proposeStrategyPatch.js.map +1 -0
  811. package/dist/agentv3/selfImprove/reviewAgentSdk.d.ts +32 -0
  812. package/dist/agentv3/selfImprove/reviewAgentSdk.d.ts.map +1 -0
  813. package/dist/agentv3/selfImprove/reviewAgentSdk.js +173 -0
  814. package/dist/agentv3/selfImprove/reviewAgentSdk.js.map +1 -0
  815. package/dist/agentv3/selfImprove/reviewOutbox.d.ts +128 -0
  816. package/dist/agentv3/selfImprove/reviewOutbox.d.ts.map +1 -0
  817. package/dist/agentv3/selfImprove/reviewOutbox.js +313 -0
  818. package/dist/agentv3/selfImprove/reviewOutbox.js.map +1 -0
  819. package/dist/agentv3/selfImprove/reviewWorker.d.ts +95 -0
  820. package/dist/agentv3/selfImprove/reviewWorker.d.ts.map +1 -0
  821. package/dist/agentv3/selfImprove/reviewWorker.js +172 -0
  822. package/dist/agentv3/selfImprove/reviewWorker.js.map +1 -0
  823. package/dist/agentv3/selfImprove/skillNotesInjector.d.ts +71 -0
  824. package/dist/agentv3/selfImprove/skillNotesInjector.d.ts.map +1 -0
  825. package/dist/agentv3/selfImprove/skillNotesInjector.js +214 -0
  826. package/dist/agentv3/selfImprove/skillNotesInjector.js.map +1 -0
  827. package/dist/agentv3/selfImprove/skillNotesWriter.d.ts +89 -0
  828. package/dist/agentv3/selfImprove/skillNotesWriter.d.ts.map +1 -0
  829. package/dist/agentv3/selfImprove/skillNotesWriter.js +274 -0
  830. package/dist/agentv3/selfImprove/skillNotesWriter.js.map +1 -0
  831. package/dist/agentv3/selfImprove/strategyFingerprint.d.ts +85 -0
  832. package/dist/agentv3/selfImprove/strategyFingerprint.d.ts.map +1 -0
  833. package/dist/agentv3/selfImprove/strategyFingerprint.js +189 -0
  834. package/dist/agentv3/selfImprove/strategyFingerprint.js.map +1 -0
  835. package/dist/agentv3/selfImprove/strategyPatchApplier.d.ts +15 -0
  836. package/dist/agentv3/selfImprove/strategyPatchApplier.d.ts.map +1 -0
  837. package/dist/agentv3/selfImprove/strategyPatchApplier.js +138 -0
  838. package/dist/agentv3/selfImprove/strategyPatchApplier.js.map +1 -0
  839. package/dist/agentv3/selfImprove/supersedeStore.d.ts +136 -0
  840. package/dist/agentv3/selfImprove/supersedeStore.d.ts.map +1 -0
  841. package/dist/agentv3/selfImprove/supersedeStore.js +386 -0
  842. package/dist/agentv3/selfImprove/supersedeStore.js.map +1 -0
  843. package/dist/agentv3/selfImprove/worktreeRunner.d.ts +49 -0
  844. package/dist/agentv3/selfImprove/worktreeRunner.d.ts.map +1 -0
  845. package/dist/agentv3/selfImprove/worktreeRunner.js +153 -0
  846. package/dist/agentv3/selfImprove/worktreeRunner.js.map +1 -0
  847. package/dist/agentv3/sessionStateSnapshot.d.ts +166 -0
  848. package/dist/agentv3/sessionStateSnapshot.d.ts.map +1 -0
  849. package/dist/agentv3/sessionStateSnapshot.js +6 -0
  850. package/dist/agentv3/sessionStateSnapshot.js.map +1 -0
  851. package/dist/agentv3/sqlIncludeInjector.d.ts +24 -0
  852. package/dist/agentv3/sqlIncludeInjector.d.ts.map +1 -0
  853. package/dist/agentv3/sqlIncludeInjector.js +78 -0
  854. package/dist/agentv3/sqlIncludeInjector.js.map +1 -0
  855. package/dist/agentv3/sqlSummarizer.d.ts +38 -0
  856. package/dist/agentv3/sqlSummarizer.d.ts.map +1 -0
  857. package/dist/agentv3/sqlSummarizer.js +101 -0
  858. package/dist/agentv3/sqlSummarizer.js.map +1 -0
  859. package/dist/agentv3/standaloneMcpServer.d.ts +96 -0
  860. package/dist/agentv3/standaloneMcpServer.d.ts.map +1 -0
  861. package/dist/agentv3/standaloneMcpServer.js +244 -0
  862. package/dist/agentv3/standaloneMcpServer.js.map +1 -0
  863. package/dist/agentv3/strategyLoader.d.ts +96 -0
  864. package/dist/agentv3/strategyLoader.d.ts.map +1 -0
  865. package/dist/agentv3/strategyLoader.js +204 -0
  866. package/dist/agentv3/strategyLoader.js.map +1 -0
  867. package/dist/agentv3/toolCallSummary.d.ts +15 -0
  868. package/dist/agentv3/toolCallSummary.d.ts.map +1 -0
  869. package/dist/agentv3/toolCallSummary.js +66 -0
  870. package/dist/agentv3/toolCallSummary.js.map +1 -0
  871. package/dist/agentv3/toolNarration.d.ts +4 -0
  872. package/dist/agentv3/toolNarration.d.ts.map +1 -0
  873. package/dist/agentv3/toolNarration.js +371 -0
  874. package/dist/agentv3/toolNarration.js.map +1 -0
  875. package/dist/agentv3/traceCompletenessProber.d.ts +56 -0
  876. package/dist/agentv3/traceCompletenessProber.d.ts.map +1 -0
  877. package/dist/agentv3/traceCompletenessProber.js +337 -0
  878. package/dist/agentv3/traceCompletenessProber.js.map +1 -0
  879. package/dist/agentv3/types.d.ts +443 -0
  880. package/dist/agentv3/types.d.ts.map +1 -0
  881. package/dist/agentv3/types.js +37 -0
  882. package/dist/agentv3/types.js.map +1 -0
  883. package/dist/assistant/application/agentAnalyzeSessionService.d.ts +130 -0
  884. package/dist/assistant/application/agentAnalyzeSessionService.d.ts.map +1 -0
  885. package/dist/assistant/application/agentAnalyzeSessionService.js +433 -0
  886. package/dist/assistant/application/agentAnalyzeSessionService.js.map +1 -0
  887. package/dist/assistant/application/assistantApplicationService.d.ts +39 -0
  888. package/dist/assistant/application/assistantApplicationService.d.ts.map +1 -0
  889. package/dist/assistant/application/assistantApplicationService.js +88 -0
  890. package/dist/assistant/application/assistantApplicationService.js.map +1 -0
  891. package/dist/assistant/contracts/assistantResultContract.d.ts +41 -0
  892. package/dist/assistant/contracts/assistantResultContract.d.ts.map +1 -0
  893. package/dist/assistant/contracts/assistantResultContract.js +145 -0
  894. package/dist/assistant/contracts/assistantResultContract.js.map +1 -0
  895. package/dist/assistant/stream/sessionSseReplay.d.ts +10 -0
  896. package/dist/assistant/stream/sessionSseReplay.d.ts.map +1 -0
  897. package/dist/assistant/stream/sessionSseReplay.js +42 -0
  898. package/dist/assistant/stream/sessionSseReplay.js.map +1 -0
  899. package/dist/assistant/stream/streamProjector.d.ts +53 -0
  900. package/dist/assistant/stream/streamProjector.d.ts.map +1 -0
  901. package/dist/assistant/stream/streamProjector.js +150 -0
  902. package/dist/assistant/stream/streamProjector.js.map +1 -0
  903. package/dist/cli/commands/coverage.d.ts +12 -0
  904. package/dist/cli/commands/coverage.d.ts.map +1 -0
  905. package/dist/cli/commands/coverage.js +106 -0
  906. package/dist/cli/commands/coverage.js.map +1 -0
  907. package/dist/cli/commands/list.d.ts +11 -0
  908. package/dist/cli/commands/list.d.ts.map +1 -0
  909. package/dist/cli/commands/list.js +169 -0
  910. package/dist/cli/commands/list.js.map +1 -0
  911. package/dist/cli/commands/smoke.d.ts +11 -0
  912. package/dist/cli/commands/smoke.d.ts.map +1 -0
  913. package/dist/cli/commands/smoke.js +215 -0
  914. package/dist/cli/commands/smoke.js.map +1 -0
  915. package/dist/cli/commands/test.d.ts +11 -0
  916. package/dist/cli/commands/test.d.ts.map +1 -0
  917. package/dist/cli/commands/test.js +183 -0
  918. package/dist/cli/commands/test.js.map +1 -0
  919. package/dist/cli/commands/validate.d.ts +26 -0
  920. package/dist/cli/commands/validate.d.ts.map +1 -0
  921. package/dist/cli/commands/validate.js +918 -0
  922. package/dist/cli/commands/validate.js.map +1 -0
  923. package/dist/cli/index.d.ts +3 -0
  924. package/dist/cli/index.d.ts.map +1 -0
  925. package/dist/cli/index.js +29 -0
  926. package/dist/cli/index.js.map +1 -0
  927. package/dist/cli-user/bin.d.ts +3 -0
  928. package/dist/cli-user/bin.d.ts.map +1 -0
  929. package/dist/cli-user/bin.js +490 -0
  930. package/dist/cli-user/bin.js.map +1 -0
  931. package/dist/cli-user/bootstrap.d.ts +12 -0
  932. package/dist/cli-user/bootstrap.d.ts.map +1 -0
  933. package/dist/cli-user/bootstrap.js +165 -0
  934. package/dist/cli-user/bootstrap.js.map +1 -0
  935. package/dist/cli-user/commands/analyze.d.ts +12 -0
  936. package/dist/cli-user/commands/analyze.d.ts.map +1 -0
  937. package/dist/cli-user/commands/analyze.js +83 -0
  938. package/dist/cli-user/commands/analyze.js.map +1 -0
  939. package/dist/cli-user/commands/capture.d.ts +12 -0
  940. package/dist/cli-user/commands/capture.d.ts.map +1 -0
  941. package/dist/cli-user/commands/capture.js +155 -0
  942. package/dist/cli-user/commands/capture.js.map +1 -0
  943. package/dist/cli-user/commands/compare.d.ts +13 -0
  944. package/dist/cli-user/commands/compare.d.ts.map +1 -0
  945. package/dist/cli-user/commands/compare.js +74 -0
  946. package/dist/cli-user/commands/compare.js.map +1 -0
  947. package/dist/cli-user/commands/config.d.ts +9 -0
  948. package/dist/cli-user/commands/config.d.ts.map +1 -0
  949. package/dist/cli-user/commands/config.js +109 -0
  950. package/dist/cli-user/commands/config.js.map +1 -0
  951. package/dist/cli-user/commands/doctor.d.ts +8 -0
  952. package/dist/cli-user/commands/doctor.d.ts.map +1 -0
  953. package/dist/cli-user/commands/doctor.js +37 -0
  954. package/dist/cli-user/commands/doctor.js.map +1 -0
  955. package/dist/cli-user/commands/list.d.ts +10 -0
  956. package/dist/cli-user/commands/list.d.ts.map +1 -0
  957. package/dist/cli-user/commands/list.js +79 -0
  958. package/dist/cli-user/commands/list.js.map +1 -0
  959. package/dist/cli-user/commands/provider.d.ts +12 -0
  960. package/dist/cli-user/commands/provider.d.ts.map +1 -0
  961. package/dist/cli-user/commands/provider.js +121 -0
  962. package/dist/cli-user/commands/provider.js.map +1 -0
  963. package/dist/cli-user/commands/query.d.ts +10 -0
  964. package/dist/cli-user/commands/query.d.ts.map +1 -0
  965. package/dist/cli-user/commands/query.js +128 -0
  966. package/dist/cli-user/commands/query.js.map +1 -0
  967. package/dist/cli-user/commands/report.d.ts +18 -0
  968. package/dist/cli-user/commands/report.d.ts.map +1 -0
  969. package/dist/cli-user/commands/report.js +225 -0
  970. package/dist/cli-user/commands/report.js.map +1 -0
  971. package/dist/cli-user/commands/resume.d.ts +12 -0
  972. package/dist/cli-user/commands/resume.d.ts.map +1 -0
  973. package/dist/cli-user/commands/resume.js +48 -0
  974. package/dist/cli-user/commands/resume.js.map +1 -0
  975. package/dist/cli-user/commands/rm.d.ts +8 -0
  976. package/dist/cli-user/commands/rm.d.ts.map +1 -0
  977. package/dist/cli-user/commands/rm.js +91 -0
  978. package/dist/cli-user/commands/rm.js.map +1 -0
  979. package/dist/cli-user/commands/show.d.ts +8 -0
  980. package/dist/cli-user/commands/show.d.ts.map +1 -0
  981. package/dist/cli-user/commands/show.js +84 -0
  982. package/dist/cli-user/commands/show.js.map +1 -0
  983. package/dist/cli-user/commands/skill.d.ts +11 -0
  984. package/dist/cli-user/commands/skill.d.ts.map +1 -0
  985. package/dist/cli-user/commands/skill.js +118 -0
  986. package/dist/cli-user/commands/skill.js.map +1 -0
  987. package/dist/cli-user/constants.d.ts +10 -0
  988. package/dist/cli-user/constants.d.ts.map +1 -0
  989. package/dist/cli-user/constants.js +16 -0
  990. package/dist/cli-user/constants.js.map +1 -0
  991. package/dist/cli-user/io/indexJson.d.ts +11 -0
  992. package/dist/cli-user/io/indexJson.d.ts.map +1 -0
  993. package/dist/cli-user/io/indexJson.js +79 -0
  994. package/dist/cli-user/io/indexJson.js.map +1 -0
  995. package/dist/cli-user/io/openFile.d.ts +8 -0
  996. package/dist/cli-user/io/openFile.d.ts.map +1 -0
  997. package/dist/cli-user/io/openFile.js +34 -0
  998. package/dist/cli-user/io/openFile.js.map +1 -0
  999. package/dist/cli-user/io/paths.d.ts +33 -0
  1000. package/dist/cli-user/io/paths.d.ts.map +1 -0
  1001. package/dist/cli-user/io/paths.js +149 -0
  1002. package/dist/cli-user/io/paths.js.map +1 -0
  1003. package/dist/cli-user/io/sessionStore.d.ts +17 -0
  1004. package/dist/cli-user/io/sessionStore.d.ts.map +1 -0
  1005. package/dist/cli-user/io/sessionStore.js +101 -0
  1006. package/dist/cli-user/io/sessionStore.js.map +1 -0
  1007. package/dist/cli-user/io/stdio.d.ts +8 -0
  1008. package/dist/cli-user/io/stdio.d.ts.map +1 -0
  1009. package/dist/cli-user/io/stdio.js +25 -0
  1010. package/dist/cli-user/io/stdio.js.map +1 -0
  1011. package/dist/cli-user/io/transcriptWriter.d.ts +5 -0
  1012. package/dist/cli-user/io/transcriptWriter.d.ts.map +1 -0
  1013. package/dist/cli-user/io/transcriptWriter.js +60 -0
  1014. package/dist/cli-user/io/transcriptWriter.js.map +1 -0
  1015. package/dist/cli-user/repl/index.d.ts +14 -0
  1016. package/dist/cli-user/repl/index.d.ts.map +1 -0
  1017. package/dist/cli-user/repl/index.js +301 -0
  1018. package/dist/cli-user/repl/index.js.map +1 -0
  1019. package/dist/cli-user/repl/renderer.d.ts +43 -0
  1020. package/dist/cli-user/repl/renderer.d.ts.map +1 -0
  1021. package/dist/cli-user/repl/renderer.js +210 -0
  1022. package/dist/cli-user/repl/renderer.js.map +1 -0
  1023. package/dist/cli-user/repl/slashCommands.d.ts +49 -0
  1024. package/dist/cli-user/repl/slashCommands.d.ts.map +1 -0
  1025. package/dist/cli-user/repl/slashCommands.js +65 -0
  1026. package/dist/cli-user/repl/slashCommands.js.map +1 -0
  1027. package/dist/cli-user/services/cliAnalyzeService.d.ts +73 -0
  1028. package/dist/cli-user/services/cliAnalyzeService.d.ts.map +1 -0
  1029. package/dist/cli-user/services/cliAnalyzeService.js +393 -0
  1030. package/dist/cli-user/services/cliAnalyzeService.js.map +1 -0
  1031. package/dist/cli-user/services/runtimeGuard.d.ts +46 -0
  1032. package/dist/cli-user/services/runtimeGuard.d.ts.map +1 -0
  1033. package/dist/cli-user/services/runtimeGuard.js +188 -0
  1034. package/dist/cli-user/services/runtimeGuard.js.map +1 -0
  1035. package/dist/cli-user/services/traceProcessorInstaller.d.ts +2 -0
  1036. package/dist/cli-user/services/traceProcessorInstaller.d.ts.map +1 -0
  1037. package/dist/cli-user/services/traceProcessorInstaller.js +241 -0
  1038. package/dist/cli-user/services/traceProcessorInstaller.js.map +1 -0
  1039. package/dist/cli-user/services/turnPersistence.d.ts +41 -0
  1040. package/dist/cli-user/services/turnPersistence.d.ts.map +1 -0
  1041. package/dist/cli-user/services/turnPersistence.js +55 -0
  1042. package/dist/cli-user/services/turnPersistence.js.map +1 -0
  1043. package/dist/cli-user/services/turnRunner.d.ts +49 -0
  1044. package/dist/cli-user/services/turnRunner.d.ts.map +1 -0
  1045. package/dist/cli-user/services/turnRunner.js +436 -0
  1046. package/dist/cli-user/services/turnRunner.js.map +1 -0
  1047. package/dist/cli-user/types.d.ts +62 -0
  1048. package/dist/cli-user/types.d.ts.map +1 -0
  1049. package/dist/cli-user/types.js +6 -0
  1050. package/dist/cli-user/types.js.map +1 -0
  1051. package/dist/config/index.d.ts +393 -0
  1052. package/dist/config/index.d.ts.map +1 -0
  1053. package/dist/config/index.js +334 -0
  1054. package/dist/config/index.js.map +1 -0
  1055. package/dist/config/prompts.d.ts +20 -0
  1056. package/dist/config/prompts.d.ts.map +1 -0
  1057. package/dist/config/prompts.js +74 -0
  1058. package/dist/config/prompts.js.map +1 -0
  1059. package/dist/config/teaching.config.d.ts +253 -0
  1060. package/dist/config/teaching.config.d.ts.map +1 -0
  1061. package/dist/config/teaching.config.js +203 -0
  1062. package/dist/config/teaching.config.js.map +1 -0
  1063. package/dist/config/thresholds.d.ts +300 -0
  1064. package/dist/config/thresholds.d.ts.map +1 -0
  1065. package/dist/config/thresholds.js +338 -0
  1066. package/dist/config/thresholds.js.map +1 -0
  1067. package/dist/controllers/skillAdminController.d.ts +62 -0
  1068. package/dist/controllers/skillAdminController.d.ts.map +1 -0
  1069. package/dist/controllers/skillAdminController.js +482 -0
  1070. package/dist/controllers/skillAdminController.js.map +1 -0
  1071. package/dist/controllers/skillController.d.ts +49 -0
  1072. package/dist/controllers/skillController.d.ts.map +1 -0
  1073. package/dist/controllers/skillController.js +246 -0
  1074. package/dist/controllers/skillController.js.map +1 -0
  1075. package/dist/controllers/sqlController.d.ts +9 -0
  1076. package/dist/controllers/sqlController.d.ts.map +1 -0
  1077. package/dist/controllers/sqlController.js +125 -0
  1078. package/dist/controllers/sqlController.js.map +1 -0
  1079. package/dist/controllers/traceController.d.ts +13 -0
  1080. package/dist/controllers/traceController.d.ts.map +1 -0
  1081. package/dist/controllers/traceController.js +209 -0
  1082. package/dist/controllers/traceController.js.map +1 -0
  1083. package/dist/controllers/traceProcessorController.d.ts +14 -0
  1084. package/dist/controllers/traceProcessorController.d.ts.map +1 -0
  1085. package/dist/controllers/traceProcessorController.js +222 -0
  1086. package/dist/controllers/traceProcessorController.js.map +1 -0
  1087. package/dist/data/perfettoSchema.d.ts +9 -0
  1088. package/dist/data/perfettoSchema.d.ts.map +1 -0
  1089. package/dist/data/perfettoSchema.js +286 -0
  1090. package/dist/data/perfettoSchema.js.map +1 -0
  1091. package/dist/index.d.ts +2 -0
  1092. package/dist/index.d.ts.map +1 -0
  1093. package/dist/index.js +251 -0
  1094. package/dist/index.js.map +1 -0
  1095. package/dist/middleware/auth.d.ts +37 -0
  1096. package/dist/middleware/auth.d.ts.map +1 -0
  1097. package/dist/middleware/auth.js +307 -0
  1098. package/dist/middleware/auth.js.map +1 -0
  1099. package/dist/middleware/legacyAgentApi.d.ts +8 -0
  1100. package/dist/middleware/legacyAgentApi.d.ts.map +1 -0
  1101. package/dist/middleware/legacyAgentApi.js +64 -0
  1102. package/dist/middleware/legacyAgentApi.js.map +1 -0
  1103. package/dist/middleware/workspaceRouteContext.d.ts +4 -0
  1104. package/dist/middleware/workspaceRouteContext.d.ts.map +1 -0
  1105. package/dist/middleware/workspaceRouteContext.js +44 -0
  1106. package/dist/middleware/workspaceRouteContext.js.map +1 -0
  1107. package/dist/models/sessionSchema.d.ts +106 -0
  1108. package/dist/models/sessionSchema.d.ts.map +1 -0
  1109. package/dist/models/sessionSchema.js +6 -0
  1110. package/dist/models/sessionSchema.js.map +1 -0
  1111. package/dist/routes/agentLogsRoutes.d.ts +3 -0
  1112. package/dist/routes/agentLogsRoutes.d.ts.map +1 -0
  1113. package/dist/routes/agentLogsRoutes.js +283 -0
  1114. package/dist/routes/agentLogsRoutes.js.map +1 -0
  1115. package/dist/routes/agentQuickSceneRoutes.d.ts +9 -0
  1116. package/dist/routes/agentQuickSceneRoutes.d.ts.map +1 -0
  1117. package/dist/routes/agentQuickSceneRoutes.js +51 -0
  1118. package/dist/routes/agentQuickSceneRoutes.js.map +1 -0
  1119. package/dist/routes/agentReportRoutes.d.ts +11 -0
  1120. package/dist/routes/agentReportRoutes.d.ts.map +1 -0
  1121. package/dist/routes/agentReportRoutes.js +100 -0
  1122. package/dist/routes/agentReportRoutes.js.map +1 -0
  1123. package/dist/routes/agentResumeRoutes.d.ts +14 -0
  1124. package/dist/routes/agentResumeRoutes.d.ts.map +1 -0
  1125. package/dist/routes/agentResumeRoutes.js +263 -0
  1126. package/dist/routes/agentResumeRoutes.js.map +1 -0
  1127. package/dist/routes/agentRoutes.d.ts +3 -0
  1128. package/dist/routes/agentRoutes.d.ts.map +1 -0
  1129. package/dist/routes/agentRoutes.js +4349 -0
  1130. package/dist/routes/agentRoutes.js.map +1 -0
  1131. package/dist/routes/agentSceneReconstructRoutes.d.ts +68 -0
  1132. package/dist/routes/agentSceneReconstructRoutes.d.ts.map +1 -0
  1133. package/dist/routes/agentSceneReconstructRoutes.js +448 -0
  1134. package/dist/routes/agentSceneReconstructRoutes.js.map +1 -0
  1135. package/dist/routes/agentSessionCatalogRoutes.d.ts +20 -0
  1136. package/dist/routes/agentSessionCatalogRoutes.d.ts.map +1 -0
  1137. package/dist/routes/agentSessionCatalogRoutes.js +90 -0
  1138. package/dist/routes/agentSessionCatalogRoutes.js.map +1 -0
  1139. package/dist/routes/agentTeachingRoutes.d.ts +3 -0
  1140. package/dist/routes/agentTeachingRoutes.d.ts.map +1 -0
  1141. package/dist/routes/agentTeachingRoutes.js +62 -0
  1142. package/dist/routes/agentTeachingRoutes.js.map +1 -0
  1143. package/dist/routes/analysisResultRoutes.d.ts +3 -0
  1144. package/dist/routes/analysisResultRoutes.d.ts.map +1 -0
  1145. package/dist/routes/analysisResultRoutes.js +216 -0
  1146. package/dist/routes/analysisResultRoutes.js.map +1 -0
  1147. package/dist/routes/baselineRoutes.d.ts +29 -0
  1148. package/dist/routes/baselineRoutes.d.ts.map +1 -0
  1149. package/dist/routes/baselineRoutes.js +123 -0
  1150. package/dist/routes/baselineRoutes.js.map +1 -0
  1151. package/dist/routes/caseRoutes.d.ts +29 -0
  1152. package/dist/routes/caseRoutes.d.ts.map +1 -0
  1153. package/dist/routes/caseRoutes.js +194 -0
  1154. package/dist/routes/caseRoutes.js.map +1 -0
  1155. package/dist/routes/ciGateRoutes.d.ts +11 -0
  1156. package/dist/routes/ciGateRoutes.d.ts.map +1 -0
  1157. package/dist/routes/ciGateRoutes.js +363 -0
  1158. package/dist/routes/ciGateRoutes.js.map +1 -0
  1159. package/dist/routes/comparisonRoutes.d.ts +3 -0
  1160. package/dist/routes/comparisonRoutes.d.ts.map +1 -0
  1161. package/dist/routes/comparisonRoutes.js +536 -0
  1162. package/dist/routes/comparisonRoutes.js.map +1 -0
  1163. package/dist/routes/criticalPathRoutes.d.ts +3 -0
  1164. package/dist/routes/criticalPathRoutes.d.ts.map +1 -0
  1165. package/dist/routes/criticalPathRoutes.js +88 -0
  1166. package/dist/routes/criticalPathRoutes.js.map +1 -0
  1167. package/dist/routes/enterpriseApiKeyRoutes.d.ts +9 -0
  1168. package/dist/routes/enterpriseApiKeyRoutes.d.ts.map +1 -0
  1169. package/dist/routes/enterpriseApiKeyRoutes.js +126 -0
  1170. package/dist/routes/enterpriseApiKeyRoutes.js.map +1 -0
  1171. package/dist/routes/enterpriseAuthRoutes.d.ts +18 -0
  1172. package/dist/routes/enterpriseAuthRoutes.d.ts.map +1 -0
  1173. package/dist/routes/enterpriseAuthRoutes.js +160 -0
  1174. package/dist/routes/enterpriseAuthRoutes.js.map +1 -0
  1175. package/dist/routes/enterpriseRuntimeDashboardRoutes.d.ts +6 -0
  1176. package/dist/routes/enterpriseRuntimeDashboardRoutes.d.ts.map +1 -0
  1177. package/dist/routes/enterpriseRuntimeDashboardRoutes.js +32 -0
  1178. package/dist/routes/enterpriseRuntimeDashboardRoutes.js.map +1 -0
  1179. package/dist/routes/enterpriseTenantRoutes.d.ts +4 -0
  1180. package/dist/routes/enterpriseTenantRoutes.d.ts.map +1 -0
  1181. package/dist/routes/enterpriseTenantRoutes.js +313 -0
  1182. package/dist/routes/enterpriseTenantRoutes.js.map +1 -0
  1183. package/dist/routes/exportRoutes.d.ts +3 -0
  1184. package/dist/routes/exportRoutes.d.ts.map +1 -0
  1185. package/dist/routes/exportRoutes.js +196 -0
  1186. package/dist/routes/exportRoutes.js.map +1 -0
  1187. package/dist/routes/flamegraphRoutes.d.ts +3 -0
  1188. package/dist/routes/flamegraphRoutes.d.ts.map +1 -0
  1189. package/dist/routes/flamegraphRoutes.js +99 -0
  1190. package/dist/routes/flamegraphRoutes.js.map +1 -0
  1191. package/dist/routes/memoryRoutes.d.ts +31 -0
  1192. package/dist/routes/memoryRoutes.d.ts.map +1 -0
  1193. package/dist/routes/memoryRoutes.js +150 -0
  1194. package/dist/routes/memoryRoutes.js.map +1 -0
  1195. package/dist/routes/narrativeSanitizer.d.ts +2 -0
  1196. package/dist/routes/narrativeSanitizer.d.ts.map +1 -0
  1197. package/dist/routes/narrativeSanitizer.js +167 -0
  1198. package/dist/routes/narrativeSanitizer.js.map +1 -0
  1199. package/dist/routes/perfettoLocalRoutes.d.ts +3 -0
  1200. package/dist/routes/perfettoLocalRoutes.d.ts.map +1 -0
  1201. package/dist/routes/perfettoLocalRoutes.js +222 -0
  1202. package/dist/routes/perfettoLocalRoutes.js.map +1 -0
  1203. package/dist/routes/perfettoSqlRoutes.d.ts +7 -0
  1204. package/dist/routes/perfettoSqlRoutes.d.ts.map +1 -0
  1205. package/dist/routes/perfettoSqlRoutes.js +738 -0
  1206. package/dist/routes/perfettoSqlRoutes.js.map +1 -0
  1207. package/dist/routes/providerRoutes.d.ts +3 -0
  1208. package/dist/routes/providerRoutes.d.ts.map +1 -0
  1209. package/dist/routes/providerRoutes.js +219 -0
  1210. package/dist/routes/providerRoutes.js.map +1 -0
  1211. package/dist/routes/ragAdminRoutes.d.ts +30 -0
  1212. package/dist/routes/ragAdminRoutes.d.ts.map +1 -0
  1213. package/dist/routes/ragAdminRoutes.js +93 -0
  1214. package/dist/routes/ragAdminRoutes.js.map +1 -0
  1215. package/dist/routes/reportRoutes.d.ts +17 -0
  1216. package/dist/routes/reportRoutes.d.ts.map +1 -0
  1217. package/dist/routes/reportRoutes.js +579 -0
  1218. package/dist/routes/reportRoutes.js.map +1 -0
  1219. package/dist/routes/sessionRoutes.d.ts +3 -0
  1220. package/dist/routes/sessionRoutes.d.ts.map +1 -0
  1221. package/dist/routes/sessionRoutes.js +144 -0
  1222. package/dist/routes/sessionRoutes.js.map +1 -0
  1223. package/dist/routes/simpleTraceRoutes.d.ts +3 -0
  1224. package/dist/routes/simpleTraceRoutes.d.ts.map +1 -0
  1225. package/dist/routes/simpleTraceRoutes.js +1131 -0
  1226. package/dist/routes/simpleTraceRoutes.js.map +1 -0
  1227. package/dist/routes/skillAdminRoutes.d.ts +3 -0
  1228. package/dist/routes/skillAdminRoutes.d.ts.map +1 -0
  1229. package/dist/routes/skillAdminRoutes.js +100 -0
  1230. package/dist/routes/skillAdminRoutes.js.map +1 -0
  1231. package/dist/routes/skillRoutes.d.ts +3 -0
  1232. package/dist/routes/skillRoutes.d.ts.map +1 -0
  1233. package/dist/routes/skillRoutes.js +88 -0
  1234. package/dist/routes/skillRoutes.js.map +1 -0
  1235. package/dist/routes/sql.d.ts +3 -0
  1236. package/dist/routes/sql.d.ts.map +1 -0
  1237. package/dist/routes/sql.js +19 -0
  1238. package/dist/routes/sql.js.map +1 -0
  1239. package/dist/routes/strategyAdminRoutes.d.ts +3 -0
  1240. package/dist/routes/strategyAdminRoutes.d.ts.map +1 -0
  1241. package/dist/routes/strategyAdminRoutes.js +65 -0
  1242. package/dist/routes/strategyAdminRoutes.js.map +1 -0
  1243. package/dist/routes/templateAnalysisRoutes.d.ts +3 -0
  1244. package/dist/routes/templateAnalysisRoutes.d.ts.map +1 -0
  1245. package/dist/routes/templateAnalysisRoutes.js +173 -0
  1246. package/dist/routes/templateAnalysisRoutes.js.map +1 -0
  1247. package/dist/routes/trace.d.ts +3 -0
  1248. package/dist/routes/trace.d.ts.map +1 -0
  1249. package/dist/routes/trace.js +48 -0
  1250. package/dist/routes/trace.js.map +1 -0
  1251. package/dist/routes/traceProcessorProxyRoutes.d.ts +6 -0
  1252. package/dist/routes/traceProcessorProxyRoutes.d.ts.map +1 -0
  1253. package/dist/routes/traceProcessorProxyRoutes.js +607 -0
  1254. package/dist/routes/traceProcessorProxyRoutes.js.map +1 -0
  1255. package/dist/routes/traceProcessorRoutes.d.ts +3 -0
  1256. package/dist/routes/traceProcessorRoutes.d.ts.map +1 -0
  1257. package/dist/routes/traceProcessorRoutes.js +40 -0
  1258. package/dist/routes/traceProcessorRoutes.js.map +1 -0
  1259. package/dist/routes/workspaceWindowRoutes.d.ts +3 -0
  1260. package/dist/routes/workspaceWindowRoutes.d.ts.map +1 -0
  1261. package/dist/routes/workspaceWindowRoutes.js +146 -0
  1262. package/dist/routes/workspaceWindowRoutes.js.map +1 -0
  1263. package/dist/runtimePaths.d.ts +3 -0
  1264. package/dist/runtimePaths.d.ts.map +1 -0
  1265. package/dist/runtimePaths.js +20 -0
  1266. package/dist/runtimePaths.js.map +1 -0
  1267. package/dist/scripts/analyzeComprehensiveTrace.d.ts +2 -0
  1268. package/dist/scripts/analyzeComprehensiveTrace.d.ts.map +1 -0
  1269. package/dist/scripts/analyzeComprehensiveTrace.js +210 -0
  1270. package/dist/scripts/analyzeComprehensiveTrace.js.map +1 -0
  1271. package/dist/scripts/analyzeUserTrace.d.ts +2 -0
  1272. package/dist/scripts/analyzeUserTrace.d.ts.map +1 -0
  1273. package/dist/scripts/analyzeUserTrace.js +170 -0
  1274. package/dist/scripts/analyzeUserTrace.js.map +1 -0
  1275. package/dist/scripts/auditTraceProcessorRssMatrix.d.ts +49 -0
  1276. package/dist/scripts/auditTraceProcessorRssMatrix.d.ts.map +1 -0
  1277. package/dist/scripts/auditTraceProcessorRssMatrix.js +390 -0
  1278. package/dist/scripts/auditTraceProcessorRssMatrix.js.map +1 -0
  1279. package/dist/scripts/benchmarkTraceProcessorRss.d.ts +96 -0
  1280. package/dist/scripts/benchmarkTraceProcessorRss.d.ts.map +1 -0
  1281. package/dist/scripts/benchmarkTraceProcessorRss.js +569 -0
  1282. package/dist/scripts/benchmarkTraceProcessorRss.js.map +1 -0
  1283. package/dist/scripts/captureContextEngineeringBaseline.d.ts +2 -0
  1284. package/dist/scripts/captureContextEngineeringBaseline.d.ts.map +1 -0
  1285. package/dist/scripts/captureContextEngineeringBaseline.js +271 -0
  1286. package/dist/scripts/captureContextEngineeringBaseline.js.map +1 -0
  1287. package/dist/scripts/checkTables.d.ts +2 -0
  1288. package/dist/scripts/checkTables.d.ts.map +1 -0
  1289. package/dist/scripts/checkTables.js +22 -0
  1290. package/dist/scripts/checkTables.js.map +1 -0
  1291. package/dist/scripts/diagnoseJankDetection.d.ts +2 -0
  1292. package/dist/scripts/diagnoseJankDetection.d.ts.map +1 -0
  1293. package/dist/scripts/diagnoseJankDetection.js +314 -0
  1294. package/dist/scripts/diagnoseJankDetection.js.map +1 -0
  1295. package/dist/scripts/diagnoseTrace.d.ts +2 -0
  1296. package/dist/scripts/diagnoseTrace.d.ts.map +1 -0
  1297. package/dist/scripts/diagnoseTrace.js +74 -0
  1298. package/dist/scripts/diagnoseTrace.js.map +1 -0
  1299. package/dist/scripts/enterpriseAcceptanceLoadTest.d.ts +193 -0
  1300. package/dist/scripts/enterpriseAcceptanceLoadTest.d.ts.map +1 -0
  1301. package/dist/scripts/enterpriseAcceptanceLoadTest.js +912 -0
  1302. package/dist/scripts/enterpriseAcceptanceLoadTest.js.map +1 -0
  1303. package/dist/scripts/enterpriseMigrationSnapshot.d.ts +3 -0
  1304. package/dist/scripts/enterpriseMigrationSnapshot.d.ts.map +1 -0
  1305. package/dist/scripts/enterpriseMigrationSnapshot.js +57 -0
  1306. package/dist/scripts/enterpriseMigrationSnapshot.js.map +1 -0
  1307. package/dist/scripts/enterpriseReadinessAudit.d.ts +30 -0
  1308. package/dist/scripts/enterpriseReadinessAudit.d.ts.map +1 -0
  1309. package/dist/scripts/enterpriseReadinessAudit.js +743 -0
  1310. package/dist/scripts/enterpriseReadinessAudit.js.map +1 -0
  1311. package/dist/scripts/enterpriseRssBenchmarkMatrix.d.ts +6 -0
  1312. package/dist/scripts/enterpriseRssBenchmarkMatrix.d.ts.map +1 -0
  1313. package/dist/scripts/enterpriseRssBenchmarkMatrix.js +20 -0
  1314. package/dist/scripts/enterpriseRssBenchmarkMatrix.js.map +1 -0
  1315. package/dist/scripts/enterpriseRuntimeIsolationChecklist.d.ts +22 -0
  1316. package/dist/scripts/enterpriseRuntimeIsolationChecklist.d.ts.map +1 -0
  1317. package/dist/scripts/enterpriseRuntimeIsolationChecklist.js +374 -0
  1318. package/dist/scripts/enterpriseRuntimeIsolationChecklist.js.map +1 -0
  1319. package/dist/scripts/enterpriseSecurityAuditChecklist.d.ts +20 -0
  1320. package/dist/scripts/enterpriseSecurityAuditChecklist.d.ts.map +1 -0
  1321. package/dist/scripts/enterpriseSecurityAuditChecklist.js +113 -0
  1322. package/dist/scripts/enterpriseSecurityAuditChecklist.js.map +1 -0
  1323. package/dist/scripts/probeStdlibSchema.d.ts +2 -0
  1324. package/dist/scripts/probeStdlibSchema.d.ts.map +1 -0
  1325. package/dist/scripts/probeStdlibSchema.js +209 -0
  1326. package/dist/scripts/probeStdlibSchema.js.map +1 -0
  1327. package/dist/scripts/runAgentTest.d.ts +2 -0
  1328. package/dist/scripts/runAgentTest.d.ts.map +1 -0
  1329. package/dist/scripts/runAgentTest.js +149 -0
  1330. package/dist/scripts/runAgentTest.js.map +1 -0
  1331. package/dist/scripts/runScrollingTest.d.ts +2 -0
  1332. package/dist/scripts/runScrollingTest.d.ts.map +1 -0
  1333. package/dist/scripts/runScrollingTest.js +199 -0
  1334. package/dist/scripts/runScrollingTest.js.map +1 -0
  1335. package/dist/scripts/runScrollingTestRealData.d.ts +2 -0
  1336. package/dist/scripts/runScrollingTestRealData.d.ts.map +1 -0
  1337. package/dist/scripts/runScrollingTestRealData.js +121 -0
  1338. package/dist/scripts/runScrollingTestRealData.js.map +1 -0
  1339. package/dist/scripts/testAndroidTrace.d.ts +2 -0
  1340. package/dist/scripts/testAndroidTrace.d.ts.map +1 -0
  1341. package/dist/scripts/testAndroidTrace.js +21 -0
  1342. package/dist/scripts/testAndroidTrace.js.map +1 -0
  1343. package/dist/scripts/testCrossDomainExpert.d.ts +2 -0
  1344. package/dist/scripts/testCrossDomainExpert.d.ts.map +1 -0
  1345. package/dist/scripts/testCrossDomainExpert.js +288 -0
  1346. package/dist/scripts/testCrossDomainExpert.js.map +1 -0
  1347. package/dist/scripts/testCrossDomainIntegration.d.ts +2 -0
  1348. package/dist/scripts/testCrossDomainIntegration.d.ts.map +1 -0
  1349. package/dist/scripts/testCrossDomainIntegration.js +282 -0
  1350. package/dist/scripts/testCrossDomainIntegration.js.map +1 -0
  1351. package/dist/scripts/testDeepLayerFix.d.ts +2 -0
  1352. package/dist/scripts/testDeepLayerFix.d.ts.map +1 -0
  1353. package/dist/scripts/testDeepLayerFix.js +137 -0
  1354. package/dist/scripts/testDeepLayerFix.js.map +1 -0
  1355. package/dist/scripts/testHtmlReportGen.d.ts +2 -0
  1356. package/dist/scripts/testHtmlReportGen.d.ts.map +1 -0
  1357. package/dist/scripts/testHtmlReportGen.js +148 -0
  1358. package/dist/scripts/testHtmlReportGen.js.map +1 -0
  1359. package/dist/scripts/verifyAgentSseScrolling.d.ts +2 -0
  1360. package/dist/scripts/verifyAgentSseScrolling.d.ts.map +1 -0
  1361. package/dist/scripts/verifyAgentSseScrolling.js +558 -0
  1362. package/dist/scripts/verifyAgentSseScrolling.js.map +1 -0
  1363. package/dist/scripts/verifyCriticalPathE2E.d.ts +2 -0
  1364. package/dist/scripts/verifyCriticalPathE2E.d.ts.map +1 -0
  1365. package/dist/scripts/verifyCriticalPathE2E.js +171 -0
  1366. package/dist/scripts/verifyCriticalPathE2E.js.map +1 -0
  1367. package/dist/scripts/verifyEnterpriseMultiTenantWindows.d.ts +24 -0
  1368. package/dist/scripts/verifyEnterpriseMultiTenantWindows.d.ts.map +1 -0
  1369. package/dist/scripts/verifyEnterpriseMultiTenantWindows.js +1363 -0
  1370. package/dist/scripts/verifyEnterpriseMultiTenantWindows.js.map +1 -0
  1371. package/dist/services/adb/adbContextDetector.d.ts +3 -0
  1372. package/dist/services/adb/adbContextDetector.d.ts.map +1 -0
  1373. package/dist/services/adb/adbContextDetector.js +151 -0
  1374. package/dist/services/adb/adbContextDetector.js.map +1 -0
  1375. package/dist/services/adb/adbService.d.ts +28 -0
  1376. package/dist/services/adb/adbService.d.ts.map +1 -0
  1377. package/dist/services/adb/adbService.js +238 -0
  1378. package/dist/services/adb/adbService.js.map +1 -0
  1379. package/dist/services/adb/index.d.ts +5 -0
  1380. package/dist/services/adb/index.d.ts.map +1 -0
  1381. package/dist/services/adb/index.js +24 -0
  1382. package/dist/services/adb/index.js.map +1 -0
  1383. package/dist/services/adb/traceDeviceMatcher.d.ts +12 -0
  1384. package/dist/services/adb/traceDeviceMatcher.d.ts.map +1 -0
  1385. package/dist/services/adb/traceDeviceMatcher.js +149 -0
  1386. package/dist/services/adb/traceDeviceMatcher.js.map +1 -0
  1387. package/dist/services/adb/types.d.ts +69 -0
  1388. package/dist/services/adb/types.d.ts.map +1 -0
  1389. package/dist/services/adb/types.js +6 -0
  1390. package/dist/services/adb/types.js.map +1 -0
  1391. package/dist/services/agentEventStore.d.ts +17 -0
  1392. package/dist/services/agentEventStore.d.ts.map +1 -0
  1393. package/dist/services/agentEventStore.js +139 -0
  1394. package/dist/services/agentEventStore.js.map +1 -0
  1395. package/dist/services/agentReportData.d.ts +42 -0
  1396. package/dist/services/agentReportData.d.ts.map +1 -0
  1397. package/dist/services/agentReportData.js +81 -0
  1398. package/dist/services/agentReportData.js.map +1 -0
  1399. package/dist/services/agentResultNormalizer.d.ts +33 -0
  1400. package/dist/services/agentResultNormalizer.d.ts.map +1 -0
  1401. package/dist/services/agentResultNormalizer.js +92 -0
  1402. package/dist/services/agentResultNormalizer.js.map +1 -0
  1403. package/dist/services/analysisResultSnapshotPipeline.d.ts +24 -0
  1404. package/dist/services/analysisResultSnapshotPipeline.d.ts.map +1 -0
  1405. package/dist/services/analysisResultSnapshotPipeline.js +466 -0
  1406. package/dist/services/analysisResultSnapshotPipeline.js.map +1 -0
  1407. package/dist/services/analysisResultSnapshotStore.d.ts +29 -0
  1408. package/dist/services/analysisResultSnapshotStore.d.ts.map +1 -0
  1409. package/dist/services/analysisResultSnapshotStore.js +457 -0
  1410. package/dist/services/analysisResultSnapshotStore.js.map +1 -0
  1411. package/dist/services/analysisResultWindowStateStore.d.ts +37 -0
  1412. package/dist/services/analysisResultWindowStateStore.d.ts.map +1 -0
  1413. package/dist/services/analysisResultWindowStateStore.js +190 -0
  1414. package/dist/services/analysisResultWindowStateStore.js.map +1 -0
  1415. package/dist/services/analysisRunStore.d.ts +38 -0
  1416. package/dist/services/analysisRunStore.d.ts.map +1 -0
  1417. package/dist/services/analysisRunStore.js +195 -0
  1418. package/dist/services/analysisRunStore.js.map +1 -0
  1419. package/dist/services/analysisTemplates/cpuCoreAnalysis.d.ts +70 -0
  1420. package/dist/services/analysisTemplates/cpuCoreAnalysis.d.ts.map +1 -0
  1421. package/dist/services/analysisTemplates/cpuCoreAnalysis.js +277 -0
  1422. package/dist/services/analysisTemplates/cpuCoreAnalysis.js.map +1 -0
  1423. package/dist/services/analysisTemplates/fourQuadrantAnalysis.d.ts +64 -0
  1424. package/dist/services/analysisTemplates/fourQuadrantAnalysis.d.ts.map +1 -0
  1425. package/dist/services/analysisTemplates/fourQuadrantAnalysis.js +288 -0
  1426. package/dist/services/analysisTemplates/fourQuadrantAnalysis.js.map +1 -0
  1427. package/dist/services/analysisTemplates/frameStatsAnalysis.d.ts +77 -0
  1428. package/dist/services/analysisTemplates/frameStatsAnalysis.d.ts.map +1 -0
  1429. package/dist/services/analysisTemplates/frameStatsAnalysis.js +232 -0
  1430. package/dist/services/analysisTemplates/frameStatsAnalysis.js.map +1 -0
  1431. package/dist/services/analysisTemplates/templateManager.d.ts +70 -0
  1432. package/dist/services/analysisTemplates/templateManager.d.ts.map +1 -0
  1433. package/dist/services/analysisTemplates/templateManager.js +293 -0
  1434. package/dist/services/analysisTemplates/templateManager.js.map +1 -0
  1435. package/dist/services/anonymizer.d.ts +61 -0
  1436. package/dist/services/anonymizer.d.ts.map +1 -0
  1437. package/dist/services/anonymizer.js +232 -0
  1438. package/dist/services/anonymizer.js.map +1 -0
  1439. package/dist/services/aospKnowledgeIngester.d.ts +67 -0
  1440. package/dist/services/aospKnowledgeIngester.d.ts.map +1 -0
  1441. package/dist/services/aospKnowledgeIngester.js +171 -0
  1442. package/dist/services/aospKnowledgeIngester.js.map +1 -0
  1443. package/dist/services/artifactCompression.d.ts +52 -0
  1444. package/dist/services/artifactCompression.d.ts.map +1 -0
  1445. package/dist/services/artifactCompression.js +215 -0
  1446. package/dist/services/artifactCompression.js.map +1 -0
  1447. package/dist/services/baselineDiffer.d.ts +85 -0
  1448. package/dist/services/baselineDiffer.d.ts.map +1 -0
  1449. package/dist/services/baselineDiffer.js +287 -0
  1450. package/dist/services/baselineDiffer.js.map +1 -0
  1451. package/dist/services/baselineStore.d.ts +52 -0
  1452. package/dist/services/baselineStore.d.ts.map +1 -0
  1453. package/dist/services/baselineStore.js +224 -0
  1454. package/dist/services/baselineStore.js.map +1 -0
  1455. package/dist/services/binderRootCauseChain.d.ts +38 -0
  1456. package/dist/services/binderRootCauseChain.d.ts.map +1 -0
  1457. package/dist/services/binderRootCauseChain.js +74 -0
  1458. package/dist/services/binderRootCauseChain.js.map +1 -0
  1459. package/dist/services/blogKnowledgeIngester.d.ts +89 -0
  1460. package/dist/services/blogKnowledgeIngester.d.ts.map +1 -0
  1461. package/dist/services/blogKnowledgeIngester.js +192 -0
  1462. package/dist/services/blogKnowledgeIngester.js.map +1 -0
  1463. package/dist/services/caseGraph.d.ts +55 -0
  1464. package/dist/services/caseGraph.d.ts.map +1 -0
  1465. package/dist/services/caseGraph.js +260 -0
  1466. package/dist/services/caseGraph.js.map +1 -0
  1467. package/dist/services/caseLibrary.d.ts +61 -0
  1468. package/dist/services/caseLibrary.d.ts.map +1 -0
  1469. package/dist/services/caseLibrary.js +269 -0
  1470. package/dist/services/caseLibrary.js.map +1 -0
  1471. package/dist/services/ciGateRunStore.d.ts +39 -0
  1472. package/dist/services/ciGateRunStore.d.ts.map +1 -0
  1473. package/dist/services/ciGateRunStore.js +208 -0
  1474. package/dist/services/ciGateRunStore.js.map +1 -0
  1475. package/dist/services/comparisonAiConclusionService.d.ts +23 -0
  1476. package/dist/services/comparisonAiConclusionService.d.ts.map +1 -0
  1477. package/dist/services/comparisonAiConclusionService.js +207 -0
  1478. package/dist/services/comparisonAiConclusionService.js.map +1 -0
  1479. package/dist/services/comparisonAppendixService.d.ts +50 -0
  1480. package/dist/services/comparisonAppendixService.d.ts.map +1 -0
  1481. package/dist/services/comparisonAppendixService.js +276 -0
  1482. package/dist/services/comparisonAppendixService.js.map +1 -0
  1483. package/dist/services/comparisonHtmlReportService.d.ts +20 -0
  1484. package/dist/services/comparisonHtmlReportService.d.ts.map +1 -0
  1485. package/dist/services/comparisonHtmlReportService.js +214 -0
  1486. package/dist/services/comparisonHtmlReportService.js.map +1 -0
  1487. package/dist/services/comparisonMatrixService.d.ts +7 -0
  1488. package/dist/services/comparisonMatrixService.d.ts.map +1 -0
  1489. package/dist/services/comparisonMatrixService.js +211 -0
  1490. package/dist/services/comparisonMatrixService.js.map +1 -0
  1491. package/dist/services/comparisonResultService.d.ts +13 -0
  1492. package/dist/services/comparisonResultService.d.ts.map +1 -0
  1493. package/dist/services/comparisonResultService.js +99 -0
  1494. package/dist/services/comparisonResultService.js.map +1 -0
  1495. package/dist/services/comparisonSignificance.d.ts +3 -0
  1496. package/dist/services/comparisonSignificance.d.ts.map +1 -0
  1497. package/dist/services/comparisonSignificance.js +42 -0
  1498. package/dist/services/comparisonSignificance.js.map +1 -0
  1499. package/dist/services/cpuThermalPmu.d.ts +38 -0
  1500. package/dist/services/cpuThermalPmu.d.ts.map +1 -0
  1501. package/dist/services/cpuThermalPmu.js +141 -0
  1502. package/dist/services/cpuThermalPmu.js.map +1 -0
  1503. package/dist/services/criticalPathAiSummary.d.ts +29 -0
  1504. package/dist/services/criticalPathAiSummary.d.ts.map +1 -0
  1505. package/dist/services/criticalPathAiSummary.js +310 -0
  1506. package/dist/services/criticalPathAiSummary.js.map +1 -0
  1507. package/dist/services/criticalPathAnalyzer.d.ts +108 -0
  1508. package/dist/services/criticalPathAnalyzer.d.ts.map +1 -0
  1509. package/dist/services/criticalPathAnalyzer.js +880 -0
  1510. package/dist/services/criticalPathAnalyzer.js.map +1 -0
  1511. package/dist/services/criticalPathQuantify.d.ts +70 -0
  1512. package/dist/services/criticalPathQuantify.d.ts.map +1 -0
  1513. package/dist/services/criticalPathQuantify.js +214 -0
  1514. package/dist/services/criticalPathQuantify.js.map +1 -0
  1515. package/dist/services/criticalPathSemantics.d.ts +95 -0
  1516. package/dist/services/criticalPathSemantics.d.ts.map +1 -0
  1517. package/dist/services/criticalPathSemantics.js +453 -0
  1518. package/dist/services/criticalPathSemantics.js.map +1 -0
  1519. package/dist/services/criticalPathWakerChain.d.ts +38 -0
  1520. package/dist/services/criticalPathWakerChain.d.ts.map +1 -0
  1521. package/dist/services/criticalPathWakerChain.js +144 -0
  1522. package/dist/services/criticalPathWakerChain.js.map +1 -0
  1523. package/dist/services/domainSkillEvalHarness.d.ts +51 -0
  1524. package/dist/services/domainSkillEvalHarness.d.ts.map +1 -0
  1525. package/dist/services/domainSkillEvalHarness.js +141 -0
  1526. package/dist/services/domainSkillEvalHarness.js.map +1 -0
  1527. package/dist/services/enhancedAIService.d.ts +81 -0
  1528. package/dist/services/enhancedAIService.d.ts.map +1 -0
  1529. package/dist/services/enhancedAIService.js +277 -0
  1530. package/dist/services/enhancedAIService.js.map +1 -0
  1531. package/dist/services/enterpriseAdminControlPlaneService.d.ts +124 -0
  1532. package/dist/services/enterpriseAdminControlPlaneService.d.ts.map +1 -0
  1533. package/dist/services/enterpriseAdminControlPlaneService.js +323 -0
  1534. package/dist/services/enterpriseAdminControlPlaneService.js.map +1 -0
  1535. package/dist/services/enterpriseApiKeyService.d.ts +56 -0
  1536. package/dist/services/enterpriseApiKeyService.d.ts.map +1 -0
  1537. package/dist/services/enterpriseApiKeyService.js +260 -0
  1538. package/dist/services/enterpriseApiKeyService.js.map +1 -0
  1539. package/dist/services/enterpriseAuditService.d.ts +30 -0
  1540. package/dist/services/enterpriseAuditService.d.ts.map +1 -0
  1541. package/dist/services/enterpriseAuditService.js +73 -0
  1542. package/dist/services/enterpriseAuditService.js.map +1 -0
  1543. package/dist/services/enterpriseDb.d.ts +5 -0
  1544. package/dist/services/enterpriseDb.d.ts.map +1 -0
  1545. package/dist/services/enterpriseDb.js +33 -0
  1546. package/dist/services/enterpriseDb.js.map +1 -0
  1547. package/dist/services/enterpriseMigration.d.ts +89 -0
  1548. package/dist/services/enterpriseMigration.d.ts.map +1 -0
  1549. package/dist/services/enterpriseMigration.js +506 -0
  1550. package/dist/services/enterpriseMigration.js.map +1 -0
  1551. package/dist/services/enterpriseOidcClient.d.ts +36 -0
  1552. package/dist/services/enterpriseOidcClient.d.ts.map +1 -0
  1553. package/dist/services/enterpriseOidcClient.js +124 -0
  1554. package/dist/services/enterpriseOidcClient.js.map +1 -0
  1555. package/dist/services/enterpriseQuotaPolicyService.d.ts +37 -0
  1556. package/dist/services/enterpriseQuotaPolicyService.d.ts.map +1 -0
  1557. package/dist/services/enterpriseQuotaPolicyService.js +198 -0
  1558. package/dist/services/enterpriseQuotaPolicyService.js.map +1 -0
  1559. package/dist/services/enterpriseRepository.d.ts +36 -0
  1560. package/dist/services/enterpriseRepository.d.ts.map +1 -0
  1561. package/dist/services/enterpriseRepository.js +208 -0
  1562. package/dist/services/enterpriseRepository.js.map +1 -0
  1563. package/dist/services/enterpriseRuntimeDashboardService.d.ts +114 -0
  1564. package/dist/services/enterpriseRuntimeDashboardService.d.ts.map +1 -0
  1565. package/dist/services/enterpriseRuntimeDashboardService.js +205 -0
  1566. package/dist/services/enterpriseRuntimeDashboardService.js.map +1 -0
  1567. package/dist/services/enterpriseSchema.d.ts +7 -0
  1568. package/dist/services/enterpriseSchema.d.ts.map +1 -0
  1569. package/dist/services/enterpriseSchema.js +688 -0
  1570. package/dist/services/enterpriseSchema.js.map +1 -0
  1571. package/dist/services/enterpriseSsoService.d.ts +99 -0
  1572. package/dist/services/enterpriseSsoService.d.ts.map +1 -0
  1573. package/dist/services/enterpriseSsoService.js +538 -0
  1574. package/dist/services/enterpriseSsoService.js.map +1 -0
  1575. package/dist/services/enterpriseTenantExportService.d.ts +58 -0
  1576. package/dist/services/enterpriseTenantExportService.d.ts.map +1 -0
  1577. package/dist/services/enterpriseTenantExportService.js +339 -0
  1578. package/dist/services/enterpriseTenantExportService.js.map +1 -0
  1579. package/dist/services/enterpriseTenantLifecycleService.d.ts +52 -0
  1580. package/dist/services/enterpriseTenantLifecycleService.d.ts.map +1 -0
  1581. package/dist/services/enterpriseTenantLifecycleService.js +323 -0
  1582. package/dist/services/enterpriseTenantLifecycleService.js.map +1 -0
  1583. package/dist/services/flamegraphAiSummary.d.ts +4 -0
  1584. package/dist/services/flamegraphAiSummary.d.ts.map +1 -0
  1585. package/dist/services/flamegraphAiSummary.js +172 -0
  1586. package/dist/services/flamegraphAiSummary.js.map +1 -0
  1587. package/dist/services/flamegraphAnalyzer.d.ts +14 -0
  1588. package/dist/services/flamegraphAnalyzer.d.ts.map +1 -0
  1589. package/dist/services/flamegraphAnalyzer.js +607 -0
  1590. package/dist/services/flamegraphAnalyzer.js.map +1 -0
  1591. package/dist/services/flamegraphTypes.d.ts +106 -0
  1592. package/dist/services/flamegraphTypes.d.ts.map +1 -0
  1593. package/dist/services/flamegraphTypes.js +6 -0
  1594. package/dist/services/flamegraphTypes.js.map +1 -0
  1595. package/dist/services/gpuSurfaceFlinger.d.ts +27 -0
  1596. package/dist/services/gpuSurfaceFlinger.d.ts.map +1 -0
  1597. package/dist/services/gpuSurfaceFlinger.js +68 -0
  1598. package/dist/services/gpuSurfaceFlinger.js.map +1 -0
  1599. package/dist/services/htmlReportGenerator.d.ts +425 -0
  1600. package/dist/services/htmlReportGenerator.d.ts.map +1 -0
  1601. package/dist/services/htmlReportGenerator.js +5110 -0
  1602. package/dist/services/htmlReportGenerator.js.map +1 -0
  1603. package/dist/services/ioNetworkWakeup.d.ts +27 -0
  1604. package/dist/services/ioNetworkWakeup.d.ts.map +1 -0
  1605. package/dist/services/ioNetworkWakeup.js +68 -0
  1606. package/dist/services/ioNetworkWakeup.js.map +1 -0
  1607. package/dist/services/jankDecisionTree.d.ts +39 -0
  1608. package/dist/services/jankDecisionTree.d.ts.map +1 -0
  1609. package/dist/services/jankDecisionTree.js +230 -0
  1610. package/dist/services/jankDecisionTree.js.map +1 -0
  1611. package/dist/services/legacyApiTelemetry.d.ts +28 -0
  1612. package/dist/services/legacyApiTelemetry.d.ts.map +1 -0
  1613. package/dist/services/legacyApiTelemetry.js +157 -0
  1614. package/dist/services/legacyApiTelemetry.js.map +1 -0
  1615. package/dist/services/memoryRootCause.d.ts +24 -0
  1616. package/dist/services/memoryRootCause.d.ts.map +1 -0
  1617. package/dist/services/memoryRootCause.js +70 -0
  1618. package/dist/services/memoryRootCause.js.map +1 -0
  1619. package/dist/services/multiTraceComparisonStore.d.ts +28 -0
  1620. package/dist/services/multiTraceComparisonStore.d.ts.map +1 -0
  1621. package/dist/services/multiTraceComparisonStore.js +220 -0
  1622. package/dist/services/multiTraceComparisonStore.js.map +1 -0
  1623. package/dist/services/oemSdkKnowledgeIngester.d.ts +62 -0
  1624. package/dist/services/oemSdkKnowledgeIngester.d.ts.map +1 -0
  1625. package/dist/services/oemSdkKnowledgeIngester.js +154 -0
  1626. package/dist/services/oemSdkKnowledgeIngester.js.map +1 -0
  1627. package/dist/services/perfettoLocalService.d.ts +25 -0
  1628. package/dist/services/perfettoLocalService.d.ts.map +1 -0
  1629. package/dist/services/perfettoLocalService.js +213 -0
  1630. package/dist/services/perfettoLocalService.js.map +1 -0
  1631. package/dist/services/perfettoService.d.ts +39 -0
  1632. package/dist/services/perfettoService.d.ts.map +1 -0
  1633. package/dist/services/perfettoService.js +330 -0
  1634. package/dist/services/perfettoService.js.map +1 -0
  1635. package/dist/services/perfettoSqlDocs.d.ts +94 -0
  1636. package/dist/services/perfettoSqlDocs.d.ts.map +1 -0
  1637. package/dist/services/perfettoSqlDocs.js +222 -0
  1638. package/dist/services/perfettoSqlDocs.js.map +1 -0
  1639. package/dist/services/perfettoSqlSkill.d.ts +263 -0
  1640. package/dist/services/perfettoSqlSkill.d.ts.map +1 -0
  1641. package/dist/services/perfettoSqlSkill.js +3731 -0
  1642. package/dist/services/perfettoSqlSkill.js.map +1 -0
  1643. package/dist/services/perfettoStdlibScanner.d.ts +66 -0
  1644. package/dist/services/perfettoStdlibScanner.d.ts.map +1 -0
  1645. package/dist/services/perfettoStdlibScanner.js +345 -0
  1646. package/dist/services/perfettoStdlibScanner.js.map +1 -0
  1647. package/dist/services/persistAgentSession.d.ts +43 -0
  1648. package/dist/services/persistAgentSession.d.ts.map +1 -0
  1649. package/dist/services/persistAgentSession.js +146 -0
  1650. package/dist/services/persistAgentSession.js.map +1 -0
  1651. package/dist/services/pipelineDocService.d.ts +83 -0
  1652. package/dist/services/pipelineDocService.d.ts.map +1 -0
  1653. package/dist/services/pipelineDocService.js +417 -0
  1654. package/dist/services/pipelineDocService.js.map +1 -0
  1655. package/dist/services/pipelineSkillLoader.d.ts +173 -0
  1656. package/dist/services/pipelineSkillLoader.d.ts.map +1 -0
  1657. package/dist/services/pipelineSkillLoader.js +301 -0
  1658. package/dist/services/pipelineSkillLoader.js.map +1 -0
  1659. package/dist/services/portPool.d.ts +85 -0
  1660. package/dist/services/portPool.d.ts.map +1 -0
  1661. package/dist/services/portPool.js +221 -0
  1662. package/dist/services/portPool.js.map +1 -0
  1663. package/dist/services/processIdentity/identityGate.d.ts +27 -0
  1664. package/dist/services/processIdentity/identityGate.d.ts.map +1 -0
  1665. package/dist/services/processIdentity/identityGate.js +284 -0
  1666. package/dist/services/processIdentity/identityGate.js.map +1 -0
  1667. package/dist/services/processIdentity/types.d.ts +49 -0
  1668. package/dist/services/processIdentity/types.d.ts.map +1 -0
  1669. package/dist/services/processIdentity/types.js +16 -0
  1670. package/dist/services/processIdentity/types.js.map +1 -0
  1671. package/dist/services/processRss.d.ts +10 -0
  1672. package/dist/services/processRss.d.ts.map +1 -0
  1673. package/dist/services/processRss.js +78 -0
  1674. package/dist/services/processRss.js.map +1 -0
  1675. package/dist/services/promptTemplateService.d.ts +68 -0
  1676. package/dist/services/promptTemplateService.d.ts.map +1 -0
  1677. package/dist/services/promptTemplateService.js +196 -0
  1678. package/dist/services/promptTemplateService.js.map +1 -0
  1679. package/dist/services/providerManager/connectionTester.d.ts +3 -0
  1680. package/dist/services/providerManager/connectionTester.d.ts.map +1 -0
  1681. package/dist/services/providerManager/connectionTester.js +479 -0
  1682. package/dist/services/providerManager/connectionTester.js.map +1 -0
  1683. package/dist/services/providerManager/envIsolation.d.ts +3 -0
  1684. package/dist/services/providerManager/envIsolation.d.ts.map +1 -0
  1685. package/dist/services/providerManager/envIsolation.js +31 -0
  1686. package/dist/services/providerManager/envIsolation.js.map +1 -0
  1687. package/dist/services/providerManager/index.d.ts +9 -0
  1688. package/dist/services/providerManager/index.d.ts.map +1 -0
  1689. package/dist/services/providerManager/index.js +40 -0
  1690. package/dist/services/providerManager/index.js.map +1 -0
  1691. package/dist/services/providerManager/localSecretStore.d.ts +32 -0
  1692. package/dist/services/providerManager/localSecretStore.d.ts.map +1 -0
  1693. package/dist/services/providerManager/localSecretStore.js +338 -0
  1694. package/dist/services/providerManager/localSecretStore.js.map +1 -0
  1695. package/dist/services/providerManager/providerService.d.ts +31 -0
  1696. package/dist/services/providerManager/providerService.d.ts.map +1 -0
  1697. package/dist/services/providerManager/providerService.js +460 -0
  1698. package/dist/services/providerManager/providerService.js.map +1 -0
  1699. package/dist/services/providerManager/providerSnapshot.d.ts +30 -0
  1700. package/dist/services/providerManager/providerSnapshot.d.ts.map +1 -0
  1701. package/dist/services/providerManager/providerSnapshot.js +224 -0
  1702. package/dist/services/providerManager/providerSnapshot.js.map +1 -0
  1703. package/dist/services/providerManager/providerStore.d.ts +31 -0
  1704. package/dist/services/providerManager/providerStore.d.ts.map +1 -0
  1705. package/dist/services/providerManager/providerStore.js +553 -0
  1706. package/dist/services/providerManager/providerStore.js.map +1 -0
  1707. package/dist/services/providerManager/templates.d.ts +3 -0
  1708. package/dist/services/providerManager/templates.d.ts.map +1 -0
  1709. package/dist/services/providerManager/templates.js +328 -0
  1710. package/dist/services/providerManager/templates.js.map +1 -0
  1711. package/dist/services/providerManager/types.d.ts +119 -0
  1712. package/dist/services/providerManager/types.d.ts.map +1 -0
  1713. package/dist/services/providerManager/types.js +5 -0
  1714. package/dist/services/providerManager/types.js.map +1 -0
  1715. package/dist/services/ragStore.d.ts +60 -0
  1716. package/dist/services/ragStore.d.ts.map +1 -0
  1717. package/dist/services/ragStore.js +297 -0
  1718. package/dist/services/ragStore.js.map +1 -0
  1719. package/dist/services/rbac.d.ts +19 -0
  1720. package/dist/services/rbac.d.ts.map +1 -0
  1721. package/dist/services/rbac.js +153 -0
  1722. package/dist/services/rbac.js.map +1 -0
  1723. package/dist/services/renderingPipelineDetectionSkillGenerator.d.ts +3 -0
  1724. package/dist/services/renderingPipelineDetectionSkillGenerator.d.ts.map +1 -0
  1725. package/dist/services/renderingPipelineDetectionSkillGenerator.js +1120 -0
  1726. package/dist/services/renderingPipelineDetectionSkillGenerator.js.map +1 -0
  1727. package/dist/services/renderingPipelineTeachingService.d.ts +33 -0
  1728. package/dist/services/renderingPipelineTeachingService.d.ts.map +1 -0
  1729. package/dist/services/renderingPipelineTeachingService.js +1312 -0
  1730. package/dist/services/renderingPipelineTeachingService.js.map +1 -0
  1731. package/dist/services/reportCausalMapAssets.d.ts +3 -0
  1732. package/dist/services/reportCausalMapAssets.d.ts.map +1 -0
  1733. package/dist/services/reportCausalMapAssets.js +898 -0
  1734. package/dist/services/reportCausalMapAssets.js.map +1 -0
  1735. package/dist/services/reportGenerator.d.ts +54 -0
  1736. package/dist/services/reportGenerator.d.ts.map +1 -0
  1737. package/dist/services/reportGenerator.js +241 -0
  1738. package/dist/services/reportGenerator.js.map +1 -0
  1739. package/dist/services/resourceOwnership.d.ts +21 -0
  1740. package/dist/services/resourceOwnership.d.ts.map +1 -0
  1741. package/dist/services/resourceOwnership.js +50 -0
  1742. package/dist/services/resourceOwnership.js.map +1 -0
  1743. package/dist/services/resultExportService.d.ts +66 -0
  1744. package/dist/services/resultExportService.d.ts.map +1 -0
  1745. package/dist/services/resultExportService.js +170 -0
  1746. package/dist/services/resultExportService.js.map +1 -0
  1747. package/dist/services/runtimeSnapshotStore.d.ts +19 -0
  1748. package/dist/services/runtimeSnapshotStore.d.ts.map +1 -0
  1749. package/dist/services/runtimeSnapshotStore.js +222 -0
  1750. package/dist/services/runtimeSnapshotStore.js.map +1 -0
  1751. package/dist/services/sceneReport/sceneReportMemoryCache.d.ts +38 -0
  1752. package/dist/services/sceneReport/sceneReportMemoryCache.d.ts.map +1 -0
  1753. package/dist/services/sceneReport/sceneReportMemoryCache.js +55 -0
  1754. package/dist/services/sceneReport/sceneReportMemoryCache.js.map +1 -0
  1755. package/dist/services/sceneReport/sceneReportStore.d.ts +41 -0
  1756. package/dist/services/sceneReport/sceneReportStore.d.ts.map +1 -0
  1757. package/dist/services/sceneReport/sceneReportStore.js +248 -0
  1758. package/dist/services/sceneReport/sceneReportStore.js.map +1 -0
  1759. package/dist/services/scopedKnowledgeStore.d.ts +45 -0
  1760. package/dist/services/scopedKnowledgeStore.d.ts.map +1 -0
  1761. package/dist/services/scopedKnowledgeStore.js +225 -0
  1762. package/dist/services/scopedKnowledgeStore.js.map +1 -0
  1763. package/dist/services/sessionLogger.d.ts +142 -0
  1764. package/dist/services/sessionLogger.d.ts.map +1 -0
  1765. package/dist/services/sessionLogger.js +566 -0
  1766. package/dist/services/sessionLogger.js.map +1 -0
  1767. package/dist/services/sessionPersistenceService.d.ts +190 -0
  1768. package/dist/services/sessionPersistenceService.d.ts.map +1 -0
  1769. package/dist/services/sessionPersistenceService.js +737 -0
  1770. package/dist/services/sessionPersistenceService.js.map +1 -0
  1771. package/dist/services/skillEngine/answerGenerator.d.ts +102 -0
  1772. package/dist/services/skillEngine/answerGenerator.d.ts.map +1 -0
  1773. package/dist/services/skillEngine/answerGenerator.js +508 -0
  1774. package/dist/services/skillEngine/answerGenerator.js.map +1 -0
  1775. package/dist/services/skillEngine/displayContractValidator.d.ts +26 -0
  1776. package/dist/services/skillEngine/displayContractValidator.d.ts.map +1 -0
  1777. package/dist/services/skillEngine/displayContractValidator.js +232 -0
  1778. package/dist/services/skillEngine/displayContractValidator.js.map +1 -0
  1779. package/dist/services/skillEngine/eventCollector.d.ts +96 -0
  1780. package/dist/services/skillEngine/eventCollector.d.ts.map +1 -0
  1781. package/dist/services/skillEngine/eventCollector.js +226 -0
  1782. package/dist/services/skillEngine/eventCollector.js.map +1 -0
  1783. package/dist/services/skillEngine/expressionUtils.d.ts +25 -0
  1784. package/dist/services/skillEngine/expressionUtils.d.ts.map +1 -0
  1785. package/dist/services/skillEngine/expressionUtils.js +66 -0
  1786. package/dist/services/skillEngine/expressionUtils.js.map +1 -0
  1787. package/dist/services/skillEngine/index.d.ts +25 -0
  1788. package/dist/services/skillEngine/index.d.ts.map +1 -0
  1789. package/dist/services/skillEngine/index.js +98 -0
  1790. package/dist/services/skillEngine/index.js.map +1 -0
  1791. package/dist/services/skillEngine/skillAnalysisAdapter.d.ts +149 -0
  1792. package/dist/services/skillEngine/skillAnalysisAdapter.d.ts.map +1 -0
  1793. package/dist/services/skillEngine/skillAnalysisAdapter.js +752 -0
  1794. package/dist/services/skillEngine/skillAnalysisAdapter.js.map +1 -0
  1795. package/dist/services/skillEngine/skillExecutor.d.ts +371 -0
  1796. package/dist/services/skillEngine/skillExecutor.d.ts.map +1 -0
  1797. package/dist/services/skillEngine/skillExecutor.js +4129 -0
  1798. package/dist/services/skillEngine/skillExecutor.js.map +1 -0
  1799. package/dist/services/skillEngine/skillLoader.d.ts +163 -0
  1800. package/dist/services/skillEngine/skillLoader.d.ts.map +1 -0
  1801. package/dist/services/skillEngine/skillLoader.js +840 -0
  1802. package/dist/services/skillEngine/skillLoader.js.map +1 -0
  1803. package/dist/services/skillEngine/skillValidator.d.ts +53 -0
  1804. package/dist/services/skillEngine/skillValidator.d.ts.map +1 -0
  1805. package/dist/services/skillEngine/skillValidator.js +274 -0
  1806. package/dist/services/skillEngine/skillValidator.js.map +1 -0
  1807. package/dist/services/skillEngine/smartSummaryGenerator.d.ts +70 -0
  1808. package/dist/services/skillEngine/smartSummaryGenerator.d.ts.map +1 -0
  1809. package/dist/services/skillEngine/smartSummaryGenerator.js +324 -0
  1810. package/dist/services/skillEngine/smartSummaryGenerator.js.map +1 -0
  1811. package/dist/services/skillEngine/types.d.ts +584 -0
  1812. package/dist/services/skillEngine/types.d.ts.map +1 -0
  1813. package/dist/services/skillEngine/types.js +6 -0
  1814. package/dist/services/skillEngine/types.js.map +1 -0
  1815. package/dist/services/smartperfettoSqlPackage.d.ts +11 -0
  1816. package/dist/services/smartperfettoSqlPackage.d.ts.map +1 -0
  1817. package/dist/services/smartperfettoSqlPackage.js +168 -0
  1818. package/dist/services/smartperfettoSqlPackage.js.map +1 -0
  1819. package/dist/services/sqlGuardrailAnalyzer.d.ts +24 -0
  1820. package/dist/services/sqlGuardrailAnalyzer.d.ts.map +1 -0
  1821. package/dist/services/sqlGuardrailAnalyzer.js +362 -0
  1822. package/dist/services/sqlGuardrailAnalyzer.js.map +1 -0
  1823. package/dist/services/sqlKnowledgeBase.d.ts +236 -0
  1824. package/dist/services/sqlKnowledgeBase.d.ts.map +1 -0
  1825. package/dist/services/sqlKnowledgeBase.js +1109 -0
  1826. package/dist/services/sqlKnowledgeBase.js.map +1 -0
  1827. package/dist/services/sqlStdlibDependencyAnalyzer.d.ts +26 -0
  1828. package/dist/services/sqlStdlibDependencyAnalyzer.d.ts.map +1 -0
  1829. package/dist/services/sqlStdlibDependencyAnalyzer.js +486 -0
  1830. package/dist/services/sqlStdlibDependencyAnalyzer.js.map +1 -0
  1831. package/dist/services/sqlTemplateEngine.d.ts +134 -0
  1832. package/dist/services/sqlTemplateEngine.d.ts.map +1 -0
  1833. package/dist/services/sqlTemplateEngine.js +430 -0
  1834. package/dist/services/sqlTemplateEngine.js.map +1 -0
  1835. package/dist/services/sqlValidator.d.ts +21 -0
  1836. package/dist/services/sqlValidator.d.ts.map +1 -0
  1837. package/dist/services/sqlValidator.js +175 -0
  1838. package/dist/services/sqlValidator.js.map +1 -0
  1839. package/dist/services/standardMetricBackfillService.d.ts +23 -0
  1840. package/dist/services/standardMetricBackfillService.d.ts.map +1 -0
  1841. package/dist/services/standardMetricBackfillService.js +196 -0
  1842. package/dist/services/standardMetricBackfillService.js.map +1 -0
  1843. package/dist/services/startupAnrMethodGraph.d.ts +20 -0
  1844. package/dist/services/startupAnrMethodGraph.d.ts.map +1 -0
  1845. package/dist/services/startupAnrMethodGraph.js +70 -0
  1846. package/dist/services/startupAnrMethodGraph.js.map +1 -0
  1847. package/dist/services/stdlibSkillCoverage.d.ts +23 -0
  1848. package/dist/services/stdlibSkillCoverage.d.ts.map +1 -0
  1849. package/dist/services/stdlibSkillCoverage.js +289 -0
  1850. package/dist/services/stdlibSkillCoverage.js.map +1 -0
  1851. package/dist/services/threadSchedContext.d.ts +49 -0
  1852. package/dist/services/threadSchedContext.d.ts.map +1 -0
  1853. package/dist/services/threadSchedContext.js +84 -0
  1854. package/dist/services/threadSchedContext.js.map +1 -0
  1855. package/dist/services/timelineBinning.d.ts +44 -0
  1856. package/dist/services/timelineBinning.d.ts.map +1 -0
  1857. package/dist/services/timelineBinning.js +150 -0
  1858. package/dist/services/timelineBinning.js.map +1 -0
  1859. package/dist/services/traceConfigGenerator.d.ts +36 -0
  1860. package/dist/services/traceConfigGenerator.d.ts.map +1 -0
  1861. package/dist/services/traceConfigGenerator.js +110 -0
  1862. package/dist/services/traceConfigGenerator.js.map +1 -0
  1863. package/dist/services/traceFormatDetector.d.ts +39 -0
  1864. package/dist/services/traceFormatDetector.d.ts.map +1 -0
  1865. package/dist/services/traceFormatDetector.js +287 -0
  1866. package/dist/services/traceFormatDetector.js.map +1 -0
  1867. package/dist/services/traceMetadataStore.d.ts +32 -0
  1868. package/dist/services/traceMetadataStore.d.ts.map +1 -0
  1869. package/dist/services/traceMetadataStore.js +375 -0
  1870. package/dist/services/traceMetadataStore.js.map +1 -0
  1871. package/dist/services/traceProcessorConnectionModel.d.ts +32 -0
  1872. package/dist/services/traceProcessorConnectionModel.d.ts.map +1 -0
  1873. package/dist/services/traceProcessorConnectionModel.js +38 -0
  1874. package/dist/services/traceProcessorConnectionModel.js.map +1 -0
  1875. package/dist/services/traceProcessorHttpRpcClient.d.ts +22 -0
  1876. package/dist/services/traceProcessorHttpRpcClient.d.ts.map +1 -0
  1877. package/dist/services/traceProcessorHttpRpcClient.js +89 -0
  1878. package/dist/services/traceProcessorHttpRpcClient.js.map +1 -0
  1879. package/dist/services/traceProcessorLeaseModeDecision.d.ts +52 -0
  1880. package/dist/services/traceProcessorLeaseModeDecision.d.ts.map +1 -0
  1881. package/dist/services/traceProcessorLeaseModeDecision.js +150 -0
  1882. package/dist/services/traceProcessorLeaseModeDecision.js.map +1 -0
  1883. package/dist/services/traceProcessorLeaseStore.d.ts +88 -0
  1884. package/dist/services/traceProcessorLeaseStore.d.ts.map +1 -0
  1885. package/dist/services/traceProcessorLeaseStore.js +463 -0
  1886. package/dist/services/traceProcessorLeaseStore.js.map +1 -0
  1887. package/dist/services/traceProcessorProtobuf.d.ts +56 -0
  1888. package/dist/services/traceProcessorProtobuf.d.ts.map +1 -0
  1889. package/dist/services/traceProcessorProtobuf.js +442 -0
  1890. package/dist/services/traceProcessorProtobuf.js.map +1 -0
  1891. package/dist/services/traceProcessorRamBudget.d.ts +55 -0
  1892. package/dist/services/traceProcessorRamBudget.d.ts.map +1 -0
  1893. package/dist/services/traceProcessorRamBudget.js +140 -0
  1894. package/dist/services/traceProcessorRamBudget.js.map +1 -0
  1895. package/dist/services/traceProcessorService.d.ts +223 -0
  1896. package/dist/services/traceProcessorService.d.ts.map +1 -0
  1897. package/dist/services/traceProcessorService.js +838 -0
  1898. package/dist/services/traceProcessorService.js.map +1 -0
  1899. package/dist/services/traceProcessorSqlWorker.d.ts +49 -0
  1900. package/dist/services/traceProcessorSqlWorker.d.ts.map +1 -0
  1901. package/dist/services/traceProcessorSqlWorker.js +218 -0
  1902. package/dist/services/traceProcessorSqlWorker.js.map +1 -0
  1903. package/dist/services/traceProcessorSqlWorkerThread.d.ts +2 -0
  1904. package/dist/services/traceProcessorSqlWorkerThread.d.ts.map +1 -0
  1905. package/dist/services/traceProcessorSqlWorkerThread.js +35 -0
  1906. package/dist/services/traceProcessorSqlWorkerThread.js.map +1 -0
  1907. package/dist/services/traceSummaryV2.d.ts +47 -0
  1908. package/dist/services/traceSummaryV2.d.ts.map +1 -0
  1909. package/dist/services/traceSummaryV2.js +241 -0
  1910. package/dist/services/traceSummaryV2.js.map +1 -0
  1911. package/dist/services/traceUploadLimit.d.ts +3 -0
  1912. package/dist/services/traceUploadLimit.d.ts.map +1 -0
  1913. package/dist/services/traceUploadLimit.js +24 -0
  1914. package/dist/services/traceUploadLimit.js.map +1 -0
  1915. package/dist/services/workingTraceProcessor.d.ts +226 -0
  1916. package/dist/services/workingTraceProcessor.d.ts.map +1 -0
  1917. package/dist/services/workingTraceProcessor.js +1093 -0
  1918. package/dist/services/workingTraceProcessor.js.map +1 -0
  1919. package/dist/trace-processor-pin.env +39 -0
  1920. package/dist/types/analysis.d.ts +511 -0
  1921. package/dist/types/analysis.d.ts.map +1 -0
  1922. package/dist/types/analysis.js +112 -0
  1923. package/dist/types/analysis.js.map +1 -0
  1924. package/dist/types/ciGateContracts.d.ts +63 -0
  1925. package/dist/types/ciGateContracts.d.ts.map +1 -0
  1926. package/dist/types/ciGateContracts.js +6 -0
  1927. package/dist/types/ciGateContracts.js.map +1 -0
  1928. package/dist/types/dataContract.d.ts +624 -0
  1929. package/dist/types/dataContract.d.ts.map +1 -0
  1930. package/dist/types/dataContract.js +775 -0
  1931. package/dist/types/dataContract.js.map +1 -0
  1932. package/dist/types/index.d.ts +40 -0
  1933. package/dist/types/index.d.ts.map +1 -0
  1934. package/dist/types/index.js +21 -0
  1935. package/dist/types/index.js.map +1 -0
  1936. package/dist/types/multiTraceComparison.d.ts +215 -0
  1937. package/dist/types/multiTraceComparison.d.ts.map +1 -0
  1938. package/dist/types/multiTraceComparison.js +33 -0
  1939. package/dist/types/multiTraceComparison.js.map +1 -0
  1940. package/dist/types/perfettoSql.d.ts +596 -0
  1941. package/dist/types/perfettoSql.d.ts.map +1 -0
  1942. package/dist/types/perfettoSql.js +28 -0
  1943. package/dist/types/perfettoSql.js.map +1 -0
  1944. package/dist/types/sparkContracts.d.ts +1642 -0
  1945. package/dist/types/sparkContracts.d.ts.map +1 -0
  1946. package/dist/types/sparkContracts.js +25 -0
  1947. package/dist/types/sparkContracts.js.map +1 -0
  1948. package/dist/types/teaching.types.d.ts +395 -0
  1949. package/dist/types/teaching.types.d.ts.map +1 -0
  1950. package/dist/types/teaching.types.js +300 -0
  1951. package/dist/types/teaching.types.js.map +1 -0
  1952. package/dist/utils/analysisNarrative.d.ts +24 -0
  1953. package/dist/utils/analysisNarrative.d.ts.map +1 -0
  1954. package/dist/utils/analysisNarrative.js +101 -0
  1955. package/dist/utils/analysisNarrative.js.map +1 -0
  1956. package/dist/utils/atomicFileWriter.d.ts +5 -0
  1957. package/dist/utils/atomicFileWriter.d.ts.map +1 -0
  1958. package/dist/utils/atomicFileWriter.js +90 -0
  1959. package/dist/utils/atomicFileWriter.js.map +1 -0
  1960. package/dist/utils/epipeGuard.d.ts +10 -0
  1961. package/dist/utils/epipeGuard.d.ts.map +1 -0
  1962. package/dist/utils/epipeGuard.js +40 -0
  1963. package/dist/utils/epipeGuard.js.map +1 -0
  1964. package/dist/utils/httpValue.d.ts +2 -0
  1965. package/dist/utils/httpValue.d.ts.map +1 -0
  1966. package/dist/utils/httpValue.js +24 -0
  1967. package/dist/utils/httpValue.js.map +1 -0
  1968. package/dist/utils/llmJson.d.ts +33 -0
  1969. package/dist/utils/llmJson.d.ts.map +1 -0
  1970. package/dist/utils/llmJson.js +148 -0
  1971. package/dist/utils/llmJson.js.map +1 -0
  1972. package/dist/utils/llmPrivacy.d.ts +15 -0
  1973. package/dist/utils/llmPrivacy.d.ts.map +1 -0
  1974. package/dist/utils/llmPrivacy.js +126 -0
  1975. package/dist/utils/llmPrivacy.js.map +1 -0
  1976. package/dist/utils/logger.d.ts +24 -0
  1977. package/dist/utils/logger.d.ts.map +1 -0
  1978. package/dist/utils/logger.js +68 -0
  1979. package/dist/utils/logger.js.map +1 -0
  1980. package/dist/utils/traceProcessorRowUtils.d.ts +11 -0
  1981. package/dist/utils/traceProcessorRowUtils.d.ts.map +1 -0
  1982. package/dist/utils/traceProcessorRowUtils.js +64 -0
  1983. package/dist/utils/traceProcessorRowUtils.js.map +1 -0
  1984. package/dist/utils/uuid.d.ts +3 -0
  1985. package/dist/utils/uuid.d.ts.map +1 -0
  1986. package/dist/utils/uuid.js +7 -0
  1987. package/dist/utils/uuid.js.map +1 -0
  1988. package/dist/version.d.ts +2 -0
  1989. package/dist/version.d.ts.map +1 -0
  1990. package/dist/version.js +53 -0
  1991. package/dist/version.js.map +1 -0
  1992. package/package.json +128 -0
  1993. package/prebuilts/trace_processor/README.md +20 -0
  1994. package/prebuilts/trace_processor/darwin-arm64/trace_processor_shell +0 -0
  1995. package/prebuilts/trace_processor/linux-x64/trace_processor_shell +0 -0
  1996. package/prebuilts/trace_processor/win32-x64/trace_processor_shell.exe +0 -0
  1997. package/skills/README.md +686 -0
  1998. package/skills/_template/README.md +43 -0
  1999. package/skills/_template/atomic_A_template.skill.yaml +79 -0
  2000. package/skills/_template/atomic_B_template.skill.yaml +61 -0
  2001. package/skills/_template/atomic_S_template.skill.yaml +92 -0
  2002. package/skills/_template/composite_S_template.skill.yaml +198 -0
  2003. package/skills/_template/vendor_override_template.yaml +72 -0
  2004. package/skills/atomic/android_bitmap_memory_per_process.skill.yaml +203 -0
  2005. package/skills/atomic/android_dvfs_counter_stats.skill.yaml +60 -0
  2006. package/skills/atomic/android_gpu_work_period_track.skill.yaml +55 -0
  2007. package/skills/atomic/android_heap_graph_summary.skill.yaml +232 -0
  2008. package/skills/atomic/android_job_scheduler_events.skill.yaml +58 -0
  2009. package/skills/atomic/android_kernel_wakelock_summary.skill.yaml +57 -0
  2010. package/skills/atomic/anr_context_in_range.skill.yaml +99 -0
  2011. package/skills/atomic/anr_main_thread_blocking.skill.yaml +513 -0
  2012. package/skills/atomic/app_frame_production.skill.yaml +147 -0
  2013. package/skills/atomic/app_lifecycle_in_range.skill.yaml +142 -0
  2014. package/skills/atomic/app_process_starts_summary.skill.yaml +75 -0
  2015. package/skills/atomic/battery_charge_timeline.skill.yaml +72 -0
  2016. package/skills/atomic/battery_doze_state_timeline.skill.yaml +83 -0
  2017. package/skills/atomic/binder_blocking_in_range.skill.yaml +99 -0
  2018. package/skills/atomic/binder_in_range.skill.yaml +86 -0
  2019. package/skills/atomic/binder_root_cause.skill.yaml +191 -0
  2020. package/skills/atomic/binder_storm_detection.skill.yaml +394 -0
  2021. package/skills/atomic/blocking_chain_analysis.skill.yaml +316 -0
  2022. package/skills/atomic/buffer_transaction_lifecycle.skill.yaml +256 -0
  2023. package/skills/atomic/cache_miss_impact.skill.yaml +115 -0
  2024. package/skills/atomic/chrome_scroll_jank_frame_timeline.skill.yaml +337 -0
  2025. package/skills/atomic/compose_recomposition_hotspot.skill.yaml +403 -0
  2026. package/skills/atomic/consumer_jank_detection.skill.yaml +556 -0
  2027. package/skills/atomic/cpu_cluster_load_in_range.skill.yaml +138 -0
  2028. package/skills/atomic/cpu_cluster_mapping_view.skill.yaml +47 -0
  2029. package/skills/atomic/cpu_freq_timeline.skill.yaml +143 -0
  2030. package/skills/atomic/cpu_idle_analysis.skill.yaml +101 -0
  2031. package/skills/atomic/cpu_idle_state_residency.skill.yaml +54 -0
  2032. package/skills/atomic/cpu_load_in_range.skill.yaml +145 -0
  2033. package/skills/atomic/cpu_process_utilization_period.skill.yaml +51 -0
  2034. package/skills/atomic/cpu_slice_analysis.skill.yaml +118 -0
  2035. package/skills/atomic/cpu_thread_utilization_period.skill.yaml +68 -0
  2036. package/skills/atomic/cpu_throttling_in_range.skill.yaml +131 -0
  2037. package/skills/atomic/cpu_time_per_frame.skill.yaml +59 -0
  2038. package/skills/atomic/cpu_topology_detection.skill.yaml +233 -0
  2039. package/skills/atomic/cpu_topology_view.skill.yaml +272 -0
  2040. package/skills/atomic/cpu_utilization_per_period.skill.yaml +55 -0
  2041. package/skills/atomic/device_state_snapshot.skill.yaml +171 -0
  2042. package/skills/atomic/device_state_timeline.skill.yaml +308 -0
  2043. package/skills/atomic/fence_wait_decomposition.skill.yaml +314 -0
  2044. package/skills/atomic/fpsgo_analysis.skill.yaml +80 -0
  2045. package/skills/atomic/frame_blocking_calls.skill.yaml +215 -0
  2046. package/skills/atomic/frame_overrun_summary.skill.yaml +68 -0
  2047. package/skills/atomic/frame_pipeline_variance.skill.yaml +124 -0
  2048. package/skills/atomic/frame_production_gap.skill.yaml +337 -0
  2049. package/skills/atomic/frame_ui_time_breakdown.skill.yaml +58 -0
  2050. package/skills/atomic/futex_wait_distribution.skill.yaml +117 -0
  2051. package/skills/atomic/game_fps_analysis.skill.yaml +385 -0
  2052. package/skills/atomic/game_main_loop_jank.skill.yaml +309 -0
  2053. package/skills/atomic/gc_events_in_range.skill.yaml +118 -0
  2054. package/skills/atomic/gl_standalone_swap_jank.skill.yaml +259 -0
  2055. package/skills/atomic/gpu_freq_in_range.skill.yaml +99 -0
  2056. package/skills/atomic/gpu_frequency_analysis.skill.yaml +94 -0
  2057. package/skills/atomic/gpu_metrics.skill.yaml +411 -0
  2058. package/skills/atomic/gpu_power_state_analysis.skill.yaml +117 -0
  2059. package/skills/atomic/gpu_render_in_range.skill.yaml +104 -0
  2060. package/skills/atomic/input_events_in_range.skill.yaml +130 -0
  2061. package/skills/atomic/input_to_frame_latency.skill.yaml +436 -0
  2062. package/skills/atomic/linux_irq_summary.skill.yaml +66 -0
  2063. package/skills/atomic/linux_perf_counter_hotspots.skill.yaml +108 -0
  2064. package/skills/atomic/linux_process_rss_swap_timeline.skill.yaml +96 -0
  2065. package/skills/atomic/linux_runqueue_depth_timeline.skill.yaml +132 -0
  2066. package/skills/atomic/linux_sched_latency_distribution.skill.yaml +130 -0
  2067. package/skills/atomic/lmk_kill_attribution.skill.yaml +72 -0
  2068. package/skills/atomic/lock_contention_in_range.skill.yaml +402 -0
  2069. package/skills/atomic/logcat_analysis.skill.yaml +85 -0
  2070. package/skills/atomic/main_thread_file_io_in_range.skill.yaml +116 -0
  2071. package/skills/atomic/main_thread_sched_latency_in_range.skill.yaml +91 -0
  2072. package/skills/atomic/main_thread_slices_in_range.skill.yaml +129 -0
  2073. package/skills/atomic/main_thread_states_in_range.skill.yaml +105 -0
  2074. package/skills/atomic/mali_gpu_power_state.skill.yaml +54 -0
  2075. package/skills/atomic/media_codec_activity.skill.yaml +236 -0
  2076. package/skills/atomic/memory_growth_detector.skill.yaml +146 -0
  2077. package/skills/atomic/memory_pressure_in_range.skill.yaml +382 -0
  2078. package/skills/atomic/memory_rss_high_watermark.skill.yaml +62 -0
  2079. package/skills/atomic/native_heap_breakdown.skill.yaml +80 -0
  2080. package/skills/atomic/oom_adjuster_score_timeline.skill.yaml +77 -0
  2081. package/skills/atomic/page_fault_in_range.skill.yaml +113 -0
  2082. package/skills/atomic/pipeline_4feature_scoring.skill.yaml +299 -0
  2083. package/skills/atomic/pipeline_key_slices_overlay.skill.yaml +108 -0
  2084. package/skills/atomic/present_fence_timing.skill.yaml +156 -0
  2085. package/skills/atomic/process_identity_resolver.skill.yaml +503 -0
  2086. package/skills/atomic/render_pipeline_latency.skill.yaml +120 -0
  2087. package/skills/atomic/render_thread_slices.skill.yaml +107 -0
  2088. package/skills/atomic/rendering_pipeline_detection.skill.yaml +770 -0
  2089. package/skills/atomic/rn_bridge_to_frame_jank.skill.yaml +209 -0
  2090. package/skills/atomic/rn_fabric_render_jank.skill.yaml +213 -0
  2091. package/skills/atomic/sched_latency_in_range.skill.yaml +94 -0
  2092. package/skills/atomic/scheduling_analysis.skill.yaml +103 -0
  2093. package/skills/atomic/scroll_response_latency.skill.yaml +131 -0
  2094. package/skills/atomic/sf_composition_in_range.skill.yaml +99 -0
  2095. package/skills/atomic/sf_frame_consumption.skill.yaml +133 -0
  2096. package/skills/atomic/sf_layer_count_in_range.skill.yaml +155 -0
  2097. package/skills/atomic/startup_binder_in_range.skill.yaml +106 -0
  2098. package/skills/atomic/startup_binder_pool_analysis.skill.yaml +115 -0
  2099. package/skills/atomic/startup_breakdown_in_range.skill.yaml +115 -0
  2100. package/skills/atomic/startup_class_loading_in_range.skill.yaml +93 -0
  2101. package/skills/atomic/startup_cpu_placement_timeline.skill.yaml +135 -0
  2102. package/skills/atomic/startup_critical_tasks.skill.yaml +247 -0
  2103. package/skills/atomic/startup_events_in_range.skill.yaml +251 -0
  2104. package/skills/atomic/startup_freq_rampup.skill.yaml +110 -0
  2105. package/skills/atomic/startup_gc_in_range.skill.yaml +97 -0
  2106. package/skills/atomic/startup_hot_slice_states.skill.yaml +116 -0
  2107. package/skills/atomic/startup_jit_analysis.skill.yaml +158 -0
  2108. package/skills/atomic/startup_main_thread_binder_blocking_in_range.skill.yaml +114 -0
  2109. package/skills/atomic/startup_main_thread_file_io_in_range.skill.yaml +117 -0
  2110. package/skills/atomic/startup_main_thread_slices_in_range.skill.yaml +138 -0
  2111. package/skills/atomic/startup_main_thread_states_in_range.skill.yaml +100 -0
  2112. package/skills/atomic/startup_main_thread_sync_binder_in_range.skill.yaml +103 -0
  2113. package/skills/atomic/startup_sched_latency_in_range.skill.yaml +93 -0
  2114. package/skills/atomic/startup_slow_reasons.skill.yaml +625 -0
  2115. package/skills/atomic/startup_thread_blocking_graph.skill.yaml +181 -0
  2116. package/skills/atomic/system_load_in_range.skill.yaml +95 -0
  2117. package/skills/atomic/task_migration_in_range.skill.yaml +115 -0
  2118. package/skills/atomic/textureview_producer_frame_timing.skill.yaml +302 -0
  2119. package/skills/atomic/thermal_predictor.skill.yaml +182 -0
  2120. package/skills/atomic/thread_affinity_violation.skill.yaml +139 -0
  2121. package/skills/atomic/touch_to_display_latency.skill.yaml +130 -0
  2122. package/skills/atomic/util_tracking_analysis.skill.yaml +89 -0
  2123. package/skills/atomic/vrr_detection.skill.yaml +301 -0
  2124. package/skills/atomic/vsync_alignment_in_range.skill.yaml +116 -0
  2125. package/skills/atomic/vsync_config.skill.yaml +147 -0
  2126. package/skills/atomic/vsync_period_detection.skill.yaml +178 -0
  2127. package/skills/atomic/vsync_phase_alignment.skill.yaml +255 -0
  2128. package/skills/atomic/wakelock_tracking.skill.yaml +276 -0
  2129. package/skills/atomic/wattson_app_startup_power.skill.yaml +66 -0
  2130. package/skills/atomic/wattson_rails_power_breakdown.skill.yaml +70 -0
  2131. package/skills/atomic/wattson_thread_power_attribution.skill.yaml +74 -0
  2132. package/skills/atomic/webview_v8_analysis.skill.yaml +297 -0
  2133. package/skills/comparison/multi_trace_result_comparison.skill.yaml +60 -0
  2134. package/skills/composite/anr_analysis.skill.yaml +889 -0
  2135. package/skills/composite/anr_detail.skill.yaml +796 -0
  2136. package/skills/composite/battery_drain_attribution.skill.yaml +134 -0
  2137. package/skills/composite/binder_analysis.skill.yaml +742 -0
  2138. package/skills/composite/binder_detail.skill.yaml +388 -0
  2139. package/skills/composite/block_io_analysis.skill.yaml +559 -0
  2140. package/skills/composite/click_response_analysis.skill.yaml +915 -0
  2141. package/skills/composite/click_response_detail.skill.yaml +800 -0
  2142. package/skills/composite/cpu_analysis.skill.yaml +960 -0
  2143. package/skills/composite/dmabuf_analysis.skill.yaml +622 -0
  2144. package/skills/composite/flutter_scrolling_analysis.skill.yaml +443 -0
  2145. package/skills/composite/gc_analysis.skill.yaml +744 -0
  2146. package/skills/composite/global_trace_sanity_check.skill.yaml +716 -0
  2147. package/skills/composite/gpu_analysis.skill.yaml +700 -0
  2148. package/skills/composite/io_pressure.skill.yaml +654 -0
  2149. package/skills/composite/irq_analysis.skill.yaml +696 -0
  2150. package/skills/composite/jank_frame_detail.skill.yaml +2065 -0
  2151. package/skills/composite/lmk_analysis.skill.yaml +626 -0
  2152. package/skills/composite/lock_binder_wait.skill.yaml +95 -0
  2153. package/skills/composite/lock_contention_analysis.skill.yaml +878 -0
  2154. package/skills/composite/memory_analysis.skill.yaml +718 -0
  2155. package/skills/composite/navigation_analysis.skill.yaml +901 -0
  2156. package/skills/composite/network_analysis.skill.yaml +760 -0
  2157. package/skills/composite/power_consumption_overview.skill.yaml +143 -0
  2158. package/skills/composite/scene_reconstruction.skill.yaml +2788 -0
  2159. package/skills/composite/scroll_session_analysis.skill.yaml +496 -0
  2160. package/skills/composite/scrolling_analysis.skill.yaml +3295 -0
  2161. package/skills/composite/startup_analysis.skill.yaml +1172 -0
  2162. package/skills/composite/startup_detail.skill.yaml +1339 -0
  2163. package/skills/composite/state_timeline.skill.yaml +1021 -0
  2164. package/skills/composite/surfaceflinger_analysis.skill.yaml +808 -0
  2165. package/skills/composite/suspend_wakeup_analysis.skill.yaml +698 -0
  2166. package/skills/composite/thermal_throttling.skill.yaml +964 -0
  2167. package/skills/composite/thermal_throttling_chain.skill.yaml +147 -0
  2168. package/skills/composite/webview_drawfunctor_jank_chain.skill.yaml +343 -0
  2169. package/skills/config/conclusion_scene_templates.base.yaml +181 -0
  2170. package/skills/config/conclusion_scene_templates.yaml +17 -0
  2171. package/skills/deep/callstack_analysis.skill.yaml +436 -0
  2172. package/skills/deep/cpu_profiling.skill.yaml +617 -0
  2173. package/skills/docs/scrolling.sop.md +312 -0
  2174. package/skills/docs/startup.sop.md +382 -0
  2175. package/skills/docs/upstream-perfetto-ai-skill-translation.sop.md +50 -0
  2176. package/skills/fragments/target_threads.sql +34 -0
  2177. package/skills/fragments/thread_states_quadrant.sql +26 -0
  2178. package/skills/fragments/vsync_config.sql +32 -0
  2179. package/skills/modules/app/launcher_module.skill.yaml +473 -0
  2180. package/skills/modules/app/systemui_module.skill.yaml +565 -0
  2181. package/skills/modules/app/third_party_module.skill.yaml +275 -0
  2182. package/skills/modules/framework/ams_module.skill.yaml +239 -0
  2183. package/skills/modules/framework/art_module.skill.yaml +266 -0
  2184. package/skills/modules/framework/choreographer_module.skill.yaml +419 -0
  2185. package/skills/modules/framework/input_module.skill.yaml +219 -0
  2186. package/skills/modules/framework/surfaceflinger_module.skill.yaml +343 -0
  2187. package/skills/modules/framework/wms_module.skill.yaml +356 -0
  2188. package/skills/modules/hardware/cpu_module.skill.yaml +300 -0
  2189. package/skills/modules/hardware/gpu_module.skill.yaml +229 -0
  2190. package/skills/modules/hardware/memory_module.skill.yaml +443 -0
  2191. package/skills/modules/hardware/power_module.skill.yaml +377 -0
  2192. package/skills/modules/hardware/thermal_module.skill.yaml +410 -0
  2193. package/skills/modules/kernel/binder_module.skill.yaml +223 -0
  2194. package/skills/modules/kernel/filesystem_module.skill.yaml +423 -0
  2195. package/skills/modules/kernel/lock_contention_module.skill.yaml +424 -0
  2196. package/skills/modules/kernel/scheduler_module.skill.yaml +247 -0
  2197. package/skills/pipelines/_base.skill.yaml +103 -0
  2198. package/skills/pipelines/android_pip_freeform.skill.yaml +224 -0
  2199. package/skills/pipelines/android_view_mixed.skill.yaml +305 -0
  2200. package/skills/pipelines/android_view_multi_window.skill.yaml +271 -0
  2201. package/skills/pipelines/android_view_software.skill.yaml +172 -0
  2202. package/skills/pipelines/android_view_standard_blast.skill.yaml +357 -0
  2203. package/skills/pipelines/android_view_standard_legacy.skill.yaml +233 -0
  2204. package/skills/pipelines/angle_gles_vulkan.skill.yaml +178 -0
  2205. package/skills/pipelines/camera_pipeline.skill.yaml +215 -0
  2206. package/skills/pipelines/chrome_browser_viz.skill.yaml +288 -0
  2207. package/skills/pipelines/compose_standard.skill.yaml +250 -0
  2208. package/skills/pipelines/flutter_surfaceview_impeller.skill.yaml +233 -0
  2209. package/skills/pipelines/flutter_surfaceview_skia.skill.yaml +194 -0
  2210. package/skills/pipelines/flutter_textureview.skill.yaml +219 -0
  2211. package/skills/pipelines/game_engine.skill.yaml +311 -0
  2212. package/skills/pipelines/hardware_buffer_renderer.skill.yaml +205 -0
  2213. package/skills/pipelines/imagereader_pipeline.skill.yaml +237 -0
  2214. package/skills/pipelines/index.yaml +122 -0
  2215. package/skills/pipelines/opengl_es.skill.yaml +185 -0
  2216. package/skills/pipelines/rn_new_arch.skill.yaml +126 -0
  2217. package/skills/pipelines/rn_old_arch.skill.yaml +137 -0
  2218. package/skills/pipelines/rn_skia.skill.yaml +115 -0
  2219. package/skills/pipelines/software_compositing.skill.yaml +203 -0
  2220. package/skills/pipelines/surface_control_api.skill.yaml +208 -0
  2221. package/skills/pipelines/surfaceview_blast.skill.yaml +210 -0
  2222. package/skills/pipelines/textureview_standard.skill.yaml +301 -0
  2223. package/skills/pipelines/variable_refresh_rate.skill.yaml +264 -0
  2224. package/skills/pipelines/video_overlay_hwc.skill.yaml +193 -0
  2225. package/skills/pipelines/vulkan_native.skill.yaml +215 -0
  2226. package/skills/pipelines/webview_gl_functor.skill.yaml +232 -0
  2227. package/skills/pipelines/webview_surface_control.skill.yaml +187 -0
  2228. package/skills/pipelines/webview_surfaceview_wrapper.skill.yaml +196 -0
  2229. package/skills/pipelines/webview_textureview_custom.skill.yaml +201 -0
  2230. package/skills/vendors/honor/startup.override.yaml +117 -0
  2231. package/skills/vendors/mtk/startup.override.yaml +133 -0
  2232. package/skills/vendors/oppo/startup.override.yaml +188 -0
  2233. package/skills/vendors/pixel/startup.override.yaml +163 -0
  2234. package/skills/vendors/qualcomm/startup.override.yaml +175 -0
  2235. package/skills/vendors/samsung/startup.override.yaml +161 -0
  2236. package/skills/vendors/vivo/startup.override.yaml +144 -0
  2237. package/skills/vendors/xiaomi/startup.override.yaml +120 -0
  2238. package/sql/smartperfetto/PACKAGE.json +24 -0
  2239. package/sql/smartperfetto/binder/victim_to_server.sql +36 -0
  2240. package/sql/smartperfetto/scrolling/jank_frames.sql +55 -0
  2241. package/strategies/anr.strategy.md +200 -0
  2242. package/strategies/arch-compose.template.md +10 -0
  2243. package/strategies/arch-flutter.template.md +17 -0
  2244. package/strategies/arch-standard.template.md +31 -0
  2245. package/strategies/arch-webview.template.md +9 -0
  2246. package/strategies/comparison-conclusion.template.md +36 -0
  2247. package/strategies/comparison-methodology.template.md +41 -0
  2248. package/strategies/comparison-result-methodology.template.md +35 -0
  2249. package/strategies/game.strategy.md +121 -0
  2250. package/strategies/general.strategy.md +48 -0
  2251. package/strategies/interaction.strategy.md +149 -0
  2252. package/strategies/knowledge-binder-ipc.template.md +59 -0
  2253. package/strategies/knowledge-cpu-scheduler.template.md +67 -0
  2254. package/strategies/knowledge-data-sources.template.md +738 -0
  2255. package/strategies/knowledge-gc-dynamics.template.md +65 -0
  2256. package/strategies/knowledge-harmonyos-rendering.template.md +54 -0
  2257. package/strategies/knowledge-harmonyos-tools.template.md +73 -0
  2258. package/strategies/knowledge-lock-contention.template.md +61 -0
  2259. package/strategies/knowledge-pipeline-anchors.template.md +136 -0
  2260. package/strategies/knowledge-pipeline-fences.template.md +158 -0
  2261. package/strategies/knowledge-rendering-pipeline.template.md +170 -0
  2262. package/strategies/knowledge-startup-root-causes.template.md +951 -0
  2263. package/strategies/knowledge-thermal-throttling.template.md +53 -0
  2264. package/strategies/linux.strategy.md +86 -0
  2265. package/strategies/media.strategy.md +75 -0
  2266. package/strategies/memory.strategy.md +94 -0
  2267. package/strategies/multi-trace-result-comparison.strategy.md +96 -0
  2268. package/strategies/network.strategy.md +80 -0
  2269. package/strategies/overview.strategy.md +139 -0
  2270. package/strategies/phase_hint_templates/misdiagnosis_vsync_vrr.template.yaml +37 -0
  2271. package/strategies/pipeline.strategy.md +208 -0
  2272. package/strategies/power.strategy.md +165 -0
  2273. package/strategies/prompt-complexity-classifier.template.md +26 -0
  2274. package/strategies/prompt-language-en.template.md +9 -0
  2275. package/strategies/prompt-language-zh.template.md +8 -0
  2276. package/strategies/prompt-methodology.template.md +183 -0
  2277. package/strategies/prompt-output-format.template.md +115 -0
  2278. package/strategies/prompt-quick.template.md +44 -0
  2279. package/strategies/prompt-role.template.md +13 -0
  2280. package/strategies/runtime-correctness.strategy.md +73 -0
  2281. package/strategies/scroll-response.strategy.md +236 -0
  2282. package/strategies/scrolling.strategy.md +467 -0
  2283. package/strategies/selection-area.template.md +46 -0
  2284. package/strategies/selection-slice.template.md +126 -0
  2285. package/strategies/startup.strategy.md +694 -0
  2286. package/strategies/teaching.strategy.md +176 -0
  2287. package/strategies/touch-tracking.strategy.md +213 -0
@@ -0,0 +1,3731 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.PerfettoSqlSkill = void 0;
7
+ const sqlKnowledgeBase_1 = require("./sqlKnowledgeBase");
8
+ const sqlTemplateEngine_1 = require("./sqlTemplateEngine");
9
+ const perfettoSql_1 = require("../types/perfettoSql");
10
+ const CPU_TOPOLOGY_CTE = `
11
+ observed_sched_cpus AS (
12
+ SELECT cpu as cpu_id FROM sched_slice WHERE cpu IS NOT NULL
13
+ UNION
14
+ SELECT cpu as cpu_id
15
+ FROM thread_state
16
+ WHERE cpu IS NOT NULL AND state = 'Running'
17
+ ),
18
+ observed_counter_cpus AS (
19
+ SELECT t.cpu as cpu_id
20
+ FROM cpu_counter_track t
21
+ JOIN counter c ON c.track_id = t.id
22
+ WHERE t.name = 'cpufreq'
23
+ AND t.cpu IS NOT NULL
24
+ AND c.value > 0
25
+ GROUP BY t.cpu
26
+ ),
27
+ cpu_universe AS (
28
+ SELECT cpu_id, 'sched_observed' as universe_source
29
+ FROM observed_sched_cpus
30
+ UNION
31
+ SELECT cpu_id, 'cpufreq_observed_fallback' as universe_source
32
+ FROM observed_counter_cpus
33
+ WHERE NOT EXISTS (SELECT 1 FROM observed_sched_cpus)
34
+ UNION
35
+ SELECT id as cpu_id, 'cpu_table_fallback_no_observed' as universe_source
36
+ FROM cpu
37
+ WHERE NOT EXISTS (SELECT 1 FROM observed_sched_cpus)
38
+ AND NOT EXISTS (SELECT 1 FROM observed_counter_cpus)
39
+ ),
40
+ cpu_capacity AS (
41
+ SELECT
42
+ cu.cpu_id,
43
+ cu.universe_source,
44
+ COALESCE(c.capacity, 0) as capacity
45
+ FROM cpu_universe cu
46
+ LEFT JOIN cpu c ON c.id = cu.cpu_id
47
+ ),
48
+ cpu_max_freq AS (
49
+ SELECT t.cpu as cpu_id, MAX(c.value) as max_freq
50
+ FROM counter c
51
+ JOIN cpu_counter_track t ON c.track_id = t.id
52
+ WHERE t.name = 'cpufreq'
53
+ AND t.cpu IN (SELECT cpu_id FROM cpu_universe)
54
+ GROUP BY t.cpu
55
+ ),
56
+ selected_scale_source AS (
57
+ SELECT
58
+ CASE
59
+ WHEN (SELECT COUNT(*) FROM cpu_capacity) > 0
60
+ AND (SELECT COUNT(*) FROM cpu_capacity WHERE universe_source = 'cpu_table_fallback_no_observed') = 0
61
+ AND (SELECT COUNT(*) FROM cpu_capacity WHERE capacity > 0) = (SELECT COUNT(*) FROM cpu_capacity)
62
+ THEN 'capacity_scale'
63
+ WHEN (SELECT COUNT(*) FROM cpu_capacity) > 0
64
+ AND (SELECT COUNT(*) FROM cpu_capacity WHERE universe_source = 'cpu_table_fallback_no_observed') = 0
65
+ AND (SELECT COUNT(*) FROM cpu_max_freq WHERE max_freq > 0) = (SELECT COUNT(*) FROM cpu_capacity)
66
+ THEN 'freq_rank'
67
+ ELSE 'observed_no_scale'
68
+ END as source
69
+ ),
70
+ raw_cpu_scale AS (
71
+ SELECT
72
+ cc.cpu_id,
73
+ cc.universe_source,
74
+ CASE
75
+ WHEN s.source = 'capacity_scale' THEN cc.capacity
76
+ WHEN s.source = 'freq_rank' THEN cf.max_freq
77
+ ELSE NULL
78
+ END as scale_value
79
+ FROM cpu_capacity cc
80
+ LEFT JOIN cpu_max_freq cf ON cc.cpu_id = cf.cpu_id
81
+ CROSS JOIN selected_scale_source s
82
+ ),
83
+ scale_bounds AS (
84
+ SELECT MAX(scale_value) as max_scale
85
+ FROM raw_cpu_scale
86
+ WHERE scale_value > 0
87
+ ),
88
+ cpu_scale AS (
89
+ SELECT
90
+ rs.*,
91
+ CASE
92
+ WHEN rs.scale_value > 0 AND (SELECT max_scale FROM scale_bounds) > 0
93
+ THEN CAST(ROUND(rs.scale_value * 20.0 / (SELECT max_scale FROM scale_bounds)) AS INTEGER)
94
+ ELSE NULL
95
+ END as scale_bucket
96
+ FROM raw_cpu_scale rs
97
+ ),
98
+ distinct_scales AS (
99
+ SELECT
100
+ scale_bucket,
101
+ avg_scale_value,
102
+ ROW_NUMBER() OVER (ORDER BY scale_bucket ASC) as cluster_rank,
103
+ COUNT(*) OVER () as cluster_count
104
+ FROM (
105
+ SELECT scale_bucket, AVG(scale_value) as avg_scale_value
106
+ FROM cpu_scale
107
+ WHERE scale_bucket IS NOT NULL AND scale_bucket > 0
108
+ GROUP BY scale_bucket
109
+ )
110
+ ),
111
+ scale_clusters AS (
112
+ SELECT
113
+ ds.scale_bucket,
114
+ ds.avg_scale_value,
115
+ ds.cluster_rank,
116
+ ds.cluster_count,
117
+ COUNT(cs.cpu_id) as cores_in_cluster
118
+ FROM distinct_scales ds
119
+ JOIN cpu_scale cs ON cs.scale_bucket = ds.scale_bucket
120
+ GROUP BY ds.scale_bucket, ds.avg_scale_value, ds.cluster_rank, ds.cluster_count
121
+ ),
122
+ cpu_topology AS (
123
+ SELECT
124
+ cs.cpu_id,
125
+ CASE
126
+ WHEN cs.scale_bucket IS NULL OR cs.scale_bucket <= 0 THEN 'unknown'
127
+ WHEN sc.cluster_count <= 1 THEN 'unknown'
128
+ WHEN sc.cluster_count = 2 AND sc.cluster_rank = sc.cluster_count THEN 'big'
129
+ WHEN sc.cluster_rank = 1 THEN 'little'
130
+ WHEN sc.cluster_rank = sc.cluster_count AND sc.cores_in_cluster = 1 THEN 'prime'
131
+ WHEN sc.cluster_rank = sc.cluster_count THEN 'big'
132
+ WHEN sc.cluster_rank = sc.cluster_count - 1
133
+ AND (SELECT cores_in_cluster FROM scale_clusters WHERE cluster_rank = sc.cluster_count) = 1 THEN 'big'
134
+ ELSE 'medium'
135
+ END as core_type
136
+ FROM cpu_scale cs
137
+ LEFT JOIN scale_clusters sc ON cs.scale_bucket = sc.scale_bucket
138
+ )
139
+ `;
140
+ const SKILL_PATTERNS = [
141
+ {
142
+ skillType: perfettoSql_1.PerfettoSkillType.STARTUP,
143
+ keywords: ['startup', 'launch', '启动', '启动时间', '冷启动', '热启动', '温启动'],
144
+ patterns: [
145
+ /startup|launch/i,
146
+ /启动|启动速度|启动时间/i,
147
+ /cold.*start|warm.*start|hot.*start/i,
148
+ ],
149
+ },
150
+ {
151
+ skillType: perfettoSql_1.PerfettoSkillType.SCROLLING,
152
+ keywords: ['scroll', 'jank', 'fps', 'frame', '滑动', '卡顿', '帧率'],
153
+ patterns: [
154
+ /scroll|jank|fps/i,
155
+ /滑动|卡顿|帧率|掉帧/i,
156
+ /frame.*miss/i,
157
+ ],
158
+ },
159
+ {
160
+ skillType: perfettoSql_1.PerfettoSkillType.NAVIGATION,
161
+ keywords: ['navigation', 'activity', 'switch', '切换', '界面切换', '页面跳转'],
162
+ patterns: [
163
+ /navigation|activity.*switch/i,
164
+ /界面切换|页面跳转|activity.*切换/i,
165
+ ],
166
+ },
167
+ {
168
+ skillType: perfettoSql_1.PerfettoSkillType.CLICK_RESPONSE,
169
+ keywords: ['click', 'tap', 'response', 'latency', '点击', '响应', '点击响应'],
170
+ patterns: [
171
+ /click.*response|input.*latency/i,
172
+ /点击响应|点击延迟|输入响应/i,
173
+ ],
174
+ },
175
+ {
176
+ skillType: perfettoSql_1.PerfettoSkillType.MEMORY,
177
+ keywords: ['memory', 'heap', 'oom', 'leak', 'gc', '内存', '内存泄漏', 'OOM'],
178
+ patterns: [
179
+ /memory|heap|oom|leak|gc/i,
180
+ /内存|内存泄漏|OOM|GC/i,
181
+ ],
182
+ },
183
+ {
184
+ skillType: perfettoSql_1.PerfettoSkillType.CPU,
185
+ keywords: ['cpu', 'utilization', 'core', 'frequency', 'CPU利用率', 'CPU频率'],
186
+ patterns: [
187
+ /cpu.*util|cpu.*freq|core/i,
188
+ /CPU利用率|CPU频率|核心/i,
189
+ ],
190
+ },
191
+ {
192
+ skillType: perfettoSql_1.PerfettoSkillType.SURFACE_FLINGER,
193
+ keywords: ['surfaceflinger', 'sf', 'composition', 'gpu', 'fence'],
194
+ patterns: [
195
+ /surfaceflinger|composition|gpu.*fence/i,
196
+ ],
197
+ },
198
+ {
199
+ skillType: perfettoSql_1.PerfettoSkillType.SYSTEM_SERVER,
200
+ keywords: ['systemserver', 'system.*service', 'anr'],
201
+ patterns: [
202
+ /system.*server|system.*service|anr/i,
203
+ ],
204
+ },
205
+ {
206
+ skillType: perfettoSql_1.PerfettoSkillType.INPUT,
207
+ keywords: ['input', 'touch', 'gesture', '输入', '触摸', '手势'],
208
+ patterns: [
209
+ /input.*latency|touch.*event/i,
210
+ /输入延迟|触摸事件|手势/i,
211
+ ],
212
+ },
213
+ {
214
+ skillType: perfettoSql_1.PerfettoSkillType.BINDER,
215
+ keywords: ['binder', 'ipc', 'transaction', 'binder调用'],
216
+ patterns: [
217
+ /binder|ipc|transaction/i,
218
+ ],
219
+ },
220
+ {
221
+ skillType: perfettoSql_1.PerfettoSkillType.BUFFER_FLOW,
222
+ keywords: ['buffer', 'queue', 'fence', 'bufferqueue', '流转'],
223
+ patterns: [
224
+ /buffer.*queue|buffer.*flow/i,
225
+ ],
226
+ },
227
+ {
228
+ skillType: perfettoSql_1.PerfettoSkillType.SLOW_FUNCTIONS,
229
+ keywords: ['slow', 'function', 'method', 'latency', '耗时', '慢函数', '函数耗时'],
230
+ patterns: [
231
+ /slow.*function|method.*latency/i,
232
+ /慢函数|函数耗时|耗时.*函数/i,
233
+ ],
234
+ },
235
+ {
236
+ skillType: perfettoSql_1.PerfettoSkillType.NETWORK,
237
+ keywords: ['network', 'http', 'request', 'socket', '网络', '请求', 'HTTP'],
238
+ patterns: [
239
+ /network|http.*request|socket/i,
240
+ /网络|网络请求|HTTP/i,
241
+ ],
242
+ },
243
+ {
244
+ skillType: perfettoSql_1.PerfettoSkillType.DATABASE,
245
+ keywords: ['database', 'sqlite', 'room', 'db', '数据库', 'SQL'],
246
+ patterns: [
247
+ /database|sqlite|room.*query|db.*query/i,
248
+ /数据库|sqlite|room/i,
249
+ ],
250
+ },
251
+ {
252
+ skillType: perfettoSql_1.PerfettoSkillType.FILE_IO,
253
+ keywords: ['file', 'io', 'read', 'write', '文件', '读写'],
254
+ patterns: [
255
+ /file.*io|file.*read|file.*write|storage/i,
256
+ /文件|读写|文件读写|磁盘/i,
257
+ ],
258
+ },
259
+ ];
260
+ // ============================================================================
261
+ // Helper Functions
262
+ // ============================================================================
263
+ /**
264
+ * Convert row arrays to row objects for easier access
265
+ * TraceProcessor returns rows as arrays, this converts them to keyed objects
266
+ */
267
+ function rowsToObjects(columns, rows) {
268
+ return rows.map(row => {
269
+ const obj = {};
270
+ columns.forEach((col, idx) => {
271
+ obj[col] = row[idx];
272
+ });
273
+ return obj;
274
+ });
275
+ }
276
+ /**
277
+ * Format a row for summary display (handles both array and object formats)
278
+ */
279
+ function formatRowForSummary(row, columns, formatSpec) {
280
+ // If row is an array, convert to object first
281
+ let obj;
282
+ if (Array.isArray(row)) {
283
+ obj = {};
284
+ columns.forEach((col, idx) => {
285
+ obj[col] = row[idx];
286
+ });
287
+ }
288
+ else {
289
+ obj = row;
290
+ }
291
+ const name = obj[formatSpec.nameCol] ?? 'unknown';
292
+ const value = obj[formatSpec.valueCol];
293
+ const valueStr = typeof value === 'number' ? value.toFixed(2) : String(value ?? 'N/A');
294
+ const extra = formatSpec.extraCol ? ` (${obj[formatSpec.extraCol] ?? ''})` : '';
295
+ return `- ${name}: ${valueStr}ms${extra}`;
296
+ }
297
+ // ============================================================================
298
+ // Main Perfetto SQL Skill Service
299
+ // ============================================================================
300
+ class PerfettoSqlSkill {
301
+ constructor(traceProcessor, knowledgeBase) {
302
+ this.enhancedEngine = null;
303
+ this.enhancedEngineInitializing = null;
304
+ this.traceProcessor = traceProcessor;
305
+ this.knowledgeBase = knowledgeBase || (0, sqlKnowledgeBase_1.createKnowledgeBase)();
306
+ }
307
+ /**
308
+ * Get the enhanced SQL template engine (lazy initialization)
309
+ * Provides access to 527 official Perfetto SQL templates
310
+ */
311
+ async getEnhancedEngine() {
312
+ if (this.enhancedEngine) {
313
+ return this.enhancedEngine;
314
+ }
315
+ // Prevent multiple concurrent initializations
316
+ if (!this.enhancedEngineInitializing) {
317
+ this.enhancedEngineInitializing = (0, sqlTemplateEngine_1.getEnhancedSQLTemplateEngine)().then(engine => {
318
+ this.enhancedEngine = engine;
319
+ return engine;
320
+ });
321
+ }
322
+ return this.enhancedEngineInitializing;
323
+ }
324
+ /**
325
+ * Get AI context enriched with official Perfetto SQL patterns
326
+ * This provides the AI with relevant official templates for generating SQL
327
+ */
328
+ async getEnrichedAIContext(question) {
329
+ try {
330
+ const engine = await this.getEnhancedEngine();
331
+ return await engine.getAIContext(question);
332
+ }
333
+ catch (error) {
334
+ console.error('[PerfettoSqlSkill] Failed to get enriched AI context:', error);
335
+ return '';
336
+ }
337
+ }
338
+ /**
339
+ * Get recommended SQL queries for a given category
340
+ */
341
+ async getRecommendedSQLForCategory(category) {
342
+ try {
343
+ const engine = await this.getEnhancedEngine();
344
+ return await engine.getRecommendedSQL(category);
345
+ }
346
+ catch (error) {
347
+ console.error('[PerfettoSqlSkill] Failed to get recommended SQL:', error);
348
+ return [];
349
+ }
350
+ }
351
+ /**
352
+ * Get matching official templates for a user query
353
+ */
354
+ async findOfficialTemplates(query) {
355
+ try {
356
+ const engine = await this.getEnhancedEngine();
357
+ return await engine.smartMatchWithOfficial(query);
358
+ }
359
+ catch (error) {
360
+ console.error('[PerfettoSqlSkill] Failed to find official templates:', error);
361
+ return { builtinTemplate: null, officialTemplates: [], recommendedSQL: [] };
362
+ }
363
+ }
364
+ // ========================================================================
365
+ // Main Entry Point
366
+ // ========================================================================
367
+ /**
368
+ * Analyze a trace based on a natural language question
369
+ */
370
+ async analyze(request) {
371
+ const { traceId, question, packageName, timeRange } = request;
372
+ // Check if trace exists (for WASM traces, it won't exist in backend)
373
+ const trace = this.traceProcessor.getTrace(traceId);
374
+ const isWasmTrace = !trace;
375
+ if (isWasmTrace) {
376
+ // For WASM traces (Perfetto UI browser engine), generate SQL-only response
377
+ // The UI will execute the SQL locally
378
+ return this.generateSqlOnlyResponse(question, packageName, traceId);
379
+ }
380
+ // Detect the appropriate skill
381
+ const intent = this.detectIntent(question);
382
+ // Route to appropriate skill method
383
+ let result;
384
+ switch (intent.skillType) {
385
+ case perfettoSql_1.PerfettoSkillType.STARTUP:
386
+ result = await this.analyzeStartup(traceId, intent.params.packageName || packageName);
387
+ break;
388
+ case perfettoSql_1.PerfettoSkillType.SCROLLING:
389
+ result = await this.analyzeScrolling(traceId, packageName);
390
+ break;
391
+ case perfettoSql_1.PerfettoSkillType.NAVIGATION:
392
+ result = await this.analyzeNavigation(traceId, packageName);
393
+ break;
394
+ case perfettoSql_1.PerfettoSkillType.CLICK_RESPONSE:
395
+ result = await this.analyzeClickResponse(traceId, packageName);
396
+ break;
397
+ case perfettoSql_1.PerfettoSkillType.MEMORY:
398
+ result = await this.analyzeMemory(traceId, packageName);
399
+ break;
400
+ case perfettoSql_1.PerfettoSkillType.CPU:
401
+ result = await this.analyzeCpu(traceId, packageName);
402
+ break;
403
+ case perfettoSql_1.PerfettoSkillType.SURFACE_FLINGER:
404
+ result = await this.analyzeSurfaceFlinger(traceId);
405
+ break;
406
+ case perfettoSql_1.PerfettoSkillType.SYSTEM_SERVER:
407
+ result = await this.analyzeSystemServer(traceId);
408
+ break;
409
+ case perfettoSql_1.PerfettoSkillType.INPUT:
410
+ result = await this.analyzeInput(traceId, packageName);
411
+ break;
412
+ case perfettoSql_1.PerfettoSkillType.BINDER:
413
+ result = await this.analyzeBinder(traceId, packageName);
414
+ break;
415
+ case perfettoSql_1.PerfettoSkillType.BUFFER_FLOW:
416
+ result = await this.analyzeBufferFlow(traceId);
417
+ break;
418
+ case perfettoSql_1.PerfettoSkillType.SLOW_FUNCTIONS:
419
+ result = await this.analyzeSlowFunctions(traceId, packageName);
420
+ break;
421
+ case perfettoSql_1.PerfettoSkillType.NETWORK:
422
+ result = await this.analyzeNetwork(traceId, packageName);
423
+ break;
424
+ case perfettoSql_1.PerfettoSkillType.DATABASE:
425
+ result = await this.analyzeDatabase(traceId, packageName);
426
+ break;
427
+ case perfettoSql_1.PerfettoSkillType.FILE_IO:
428
+ result = await this.analyzeFileIO(traceId, packageName);
429
+ break;
430
+ default:
431
+ // Fallback to generic SQL generation
432
+ result = await this.analyzeGeneric(traceId, question, packageName);
433
+ }
434
+ return result;
435
+ }
436
+ /**
437
+ * Detect the appropriate analysis skill from the question
438
+ */
439
+ detectIntent(question) {
440
+ const lowerQuestion = question.toLowerCase();
441
+ for (const pattern of SKILL_PATTERNS) {
442
+ // Check keyword matches
443
+ for (const keyword of pattern.keywords) {
444
+ if (lowerQuestion.includes(keyword.toLowerCase())) {
445
+ return {
446
+ skillType: pattern.skillType,
447
+ confidence: 0.8,
448
+ params: this.extractParams(question, pattern.skillType),
449
+ };
450
+ }
451
+ }
452
+ // Check regex patterns
453
+ for (const regex of pattern.patterns) {
454
+ if (regex.test(question)) {
455
+ return {
456
+ skillType: pattern.skillType,
457
+ confidence: 0.75,
458
+ params: this.extractParams(question, pattern.skillType),
459
+ };
460
+ }
461
+ }
462
+ }
463
+ // Default to generic analysis
464
+ return {
465
+ skillType: perfettoSql_1.PerfettoSkillType.STARTUP, // Default fallback
466
+ confidence: 0.3,
467
+ params: {},
468
+ };
469
+ }
470
+ /**
471
+ * Extract parameters from the question
472
+ */
473
+ extractParams(question, skillType) {
474
+ const params = {};
475
+ // Extract package name (common pattern: com.example.app)
476
+ const packageMatch = question.match(/([a-z][a-z0-9_]*(\.[a-z0-9_]+)+)/i);
477
+ if (packageMatch) {
478
+ params.packageName = packageMatch[1];
479
+ }
480
+ // Extract numbers (time limits, counts, etc.)
481
+ const numberMatches = question.match(/\b(\d+)\b/g);
482
+ if (numberMatches) {
483
+ params.limit = parseInt(numberMatches[0], 10);
484
+ }
485
+ return params;
486
+ }
487
+ /**
488
+ * Generate SQL-only response for WASM traces (where trace is in browser)
489
+ * The UI will execute this SQL locally
490
+ */
491
+ async generateSqlOnlyResponse(question, packageName, traceId) {
492
+ // Detect the appropriate skill
493
+ const intent = this.detectIntent(question);
494
+ // Build SQL based on the detected skill type
495
+ let sql = '';
496
+ let analysisType = intent.skillType;
497
+ let summary = '';
498
+ switch (intent.skillType) {
499
+ case perfettoSql_1.PerfettoSkillType.STARTUP:
500
+ sql = this.getStartupSql(packageName);
501
+ summary = `Execute this SQL to analyze app startup performance. Look for startup_type (cold/warm/hot), dur (duration), and ttid/ttfd metrics.`;
502
+ break;
503
+ case perfettoSql_1.PerfettoSkillType.SCROLLING:
504
+ sql = this.getScrollingSql(packageName);
505
+ summary = `Execute this SQL to analyze scrolling performance and jank. Look for frame durations, jank_type, and on_time_finish flags.`;
506
+ break;
507
+ case perfettoSql_1.PerfettoSkillType.NAVIGATION:
508
+ sql = this.getNavigationSql(packageName);
509
+ summary = `Execute this SQL to analyze activity navigation performance. Look for activity transitions and their durations.`;
510
+ break;
511
+ case perfettoSql_1.PerfettoSkillType.CLICK_RESPONSE:
512
+ sql = this.getClickResponseSql(packageName);
513
+ summary = `Execute this SQL to analyze click/tap response latency. Look for time from input event to UI response.`;
514
+ break;
515
+ case perfettoSql_1.PerfettoSkillType.MEMORY:
516
+ sql = this.getMemorySql(packageName);
517
+ summary = `Execute this SQL to analyze memory usage. Look for heap size, GC events, and allocation counts.`;
518
+ break;
519
+ case perfettoSql_1.PerfettoSkillType.CPU:
520
+ sql = this.getCpuSql(packageName);
521
+ summary = `Execute this SQL to analyze CPU usage. Look for thread CPU time, utilization, and frequency.`;
522
+ break;
523
+ case perfettoSql_1.PerfettoSkillType.SURFACE_FLINGER:
524
+ sql = this.getSurfaceFlingerSql();
525
+ summary = `Execute this SQL to analyze SurfaceFlinger performance. Look for frame misses, GPU composition, and buffer latency.`;
526
+ break;
527
+ case perfettoSql_1.PerfettoSkillType.INPUT:
528
+ sql = this.getInputSql(packageName);
529
+ summary = `Execute this SQL to analyze input events. Look for event types and their timestamps.`;
530
+ break;
531
+ case perfettoSql_1.PerfettoSkillType.BINDER:
532
+ sql = this.getBinderSql(packageName);
533
+ summary = `Execute this SQL to analyze Binder transactions. Look for transaction durations and AIDL interface names.`;
534
+ break;
535
+ case perfettoSql_1.PerfettoSkillType.BUFFER_FLOW:
536
+ sql = this.getBufferFlowSql();
537
+ summary = `Execute this SQL to analyze buffer queue flow. Look for queue depth and fence wait times.`;
538
+ break;
539
+ case perfettoSql_1.PerfettoSkillType.SYSTEM_SERVER:
540
+ sql = this.getSystemServerSql();
541
+ summary = `Execute this SQL to analyze SystemServer performance. Look for system service call latencies.`;
542
+ break;
543
+ case perfettoSql_1.PerfettoSkillType.SLOW_FUNCTIONS:
544
+ sql = this.getSlowFunctionsSql(packageName);
545
+ summary = `Execute this SQL to analyze long-running main-thread slices (>16ms). Correlate these slices with jank evidence before claiming dropped frames.`;
546
+ break;
547
+ case perfettoSql_1.PerfettoSkillType.NETWORK:
548
+ sql = this.getNetworkSql(packageName);
549
+ summary = `Execute this SQL to analyze network traffic. Look for request/response durations and URLs.`;
550
+ break;
551
+ case perfettoSql_1.PerfettoSkillType.DATABASE:
552
+ sql = this.getDatabaseSql(packageName);
553
+ summary = `Execute this SQL to analyze database queries. Look for SQLite/Room operations and their durations.`;
554
+ break;
555
+ case perfettoSql_1.PerfettoSkillType.FILE_IO:
556
+ sql = this.getFileIOSql(packageName);
557
+ summary = `Execute this SQL to analyze file I/O operations. Look for read/write operations and their durations.`;
558
+ break;
559
+ default:
560
+ // Generic query - suggest exploring tables
561
+ sql = `
562
+ -- General trace exploration
563
+ -- List all available tables
564
+ SELECT name FROM sqlite_master WHERE type='table' ORDER BY name;
565
+
566
+ -- Get process list
567
+ SELECT pid, name, uid FROM process ORDER BY name;
568
+
569
+ -- Get thread list with process info
570
+ SELECT
571
+ t.tid,
572
+ t.name as thread_name,
573
+ p.name as process_name,
574
+ p.pid
575
+ FROM thread t
576
+ LEFT JOIN process p ON t.upid = p.upid
577
+ ORDER BY p.name, t.name;
578
+ `;
579
+ analysisType = perfettoSql_1.PerfettoSkillType.STARTUP; // Use startup as default
580
+ summary = 'Explore the trace structure using these queries.';
581
+ }
582
+ // Get official template recommendations for enriched context
583
+ let officialTemplates = [];
584
+ let recommendedSQL = [];
585
+ let aiContext = '';
586
+ try {
587
+ const matchResult = await this.findOfficialTemplates(question);
588
+ officialTemplates = matchResult.officialTemplates.slice(0, 5); // Top 5 matches
589
+ recommendedSQL = matchResult.recommendedSQL.slice(0, 3); // Top 3 recommendations
590
+ aiContext = await this.getEnrichedAIContext(question);
591
+ }
592
+ catch (error) {
593
+ console.log('[PerfettoSqlSkill] Could not load official templates (optional enhancement)');
594
+ }
595
+ return {
596
+ analysisType,
597
+ sql,
598
+ rows: [],
599
+ rowCount: 0,
600
+ summary,
601
+ details: {
602
+ note: 'For WASM traces: Execute this SQL in Perfetto UI to see results',
603
+ question,
604
+ packageName: packageName || null,
605
+ // Enhanced with official Perfetto SQL library
606
+ officialTemplates: officialTemplates.map(t => ({
607
+ id: t.id,
608
+ name: t.name,
609
+ category: t.category,
610
+ type: t.type,
611
+ description: t.description,
612
+ })),
613
+ recommendedSQL,
614
+ hasOfficialLibrary: officialTemplates.length > 0,
615
+ },
616
+ // Provide AI context for downstream processing
617
+ aiContext,
618
+ };
619
+ }
620
+ // SQL template generators for WASM trace mode
621
+ getStartupSql(packageName) {
622
+ const whereClause = packageName ? `WHERE package GLOB '${packageName}*'` : '';
623
+ return `
624
+ -- App Startup Analysis
625
+ SELECT
626
+ startup_id,
627
+ ts / 1e6 as ts_ms,
628
+ dur / 1e6 as dur_ms,
629
+ package,
630
+ process_name,
631
+ startup_type,
632
+ ttid,
633
+ ttfd
634
+ FROM android_startups
635
+ ${whereClause}
636
+ ORDER BY ts ASC;
637
+ `;
638
+ }
639
+ getScrollingSql(packageName) {
640
+ const processFilter = packageName ? `WHERE p.name GLOB '${packageName}*'` : '';
641
+ return `
642
+ -- Scrolling Performance Analysis (FrameTimeline)
643
+ SELECT
644
+ afs.id,
645
+ afs.ts / 1e6 as ts_ms,
646
+ afs.dur / 1e6 as dur_ms,
647
+ p.name as process,
648
+ afs.name,
649
+ afs.on_time_finish,
650
+ afs.gpu_composition,
651
+ afs.jank_type
652
+ FROM actual_frame_timeline_slice afs
653
+ LEFT JOIN process p ON afs.upid = p.upid
654
+ ${processFilter}
655
+ ORDER BY afs.ts ASC;
656
+ `;
657
+ }
658
+ getNavigationSql(packageName) {
659
+ const whereClause = packageName ? `WHERE package GLOB '${packageName}*'` : '';
660
+ return `
661
+ -- Activity Navigation Analysis
662
+ SELECT
663
+ ts / 1e6 as ts_ms,
664
+ dur / 1e6 as dur_ms,
665
+ package,
666
+ activity,
667
+ reason
668
+ FROM activity_manager_transitions
669
+ ${whereClause}
670
+ ORDER BY ts ASC;
671
+ `;
672
+ }
673
+ getClickResponseSql(packageName) {
674
+ const whereClause = packageName ? `WHERE p.name GLOB '${packageName}*'` : '';
675
+ return `
676
+ -- Click Response Analysis
677
+ SELECT
678
+ e.ts / 1e6 as ts_ms,
679
+ e.name as event_type,
680
+ e.arg_set_id
681
+ FROM slice e
682
+ JOIN track t ON e.track_id = t.id
683
+ JOIN process_track pt ON t.id = pt.id
684
+ JOIN process p ON pt.upid = p.upid
685
+ ${whereClause.replace('WHERE', 'AND')} AND e.name LIKE '%Click%'
686
+ ORDER BY e.ts ASC;
687
+ `;
688
+ }
689
+ getMemorySql(packageName) {
690
+ const whereClause = packageName ? `WHERE p.name GLOB '${packageName}*'` : '';
691
+ return `
692
+ -- Memory Analysis (Heap Profile)
693
+ SELECT
694
+ ts / 1e6 as ts_ms,
695
+ upid,
696
+ heap_size,
697
+ anon_rss,
698
+ file_rss,
699
+ swap_rss
700
+ FROM heap_profile_summary
701
+ ORDER BY ts ASC;
702
+ `;
703
+ }
704
+ getCpuSql(packageName) {
705
+ const whereClause = packageName ? `WHERE p.name GLOB '${packageName}*'` : '';
706
+ return `
707
+ -- CPU Usage Analysis
708
+ SELECT
709
+ t.tid,
710
+ t.name as thread_name,
711
+ p.name as process_name,
712
+ SUM(s.dur) / 1e9 as total_cpu_sec
713
+ FROM sched s
714
+ JOIN thread t ON s.utid = t.utid
715
+ LEFT JOIN process p ON t.upid = p.upid
716
+ ${whereClause.replace('WHERE', 'AND')}
717
+ GROUP BY t.tid, t.name, p.name
718
+ ORDER BY total_cpu_sec DESC;
719
+ `;
720
+ }
721
+ getSurfaceFlingerSql() {
722
+ return `
723
+ -- SurfaceFlinger Analysis
724
+ SELECT
725
+ ts / 1e6 as ts_ms,
726
+ dur / 1e6 as dur_ms,
727
+ display_id,
728
+ present_type,
729
+ gpu_composition,
730
+ sf_jank_type
731
+ FROM gfx_composition
732
+ ORDER BY ts ASC;
733
+ `;
734
+ }
735
+ getInputSql(packageName) {
736
+ const whereClause = packageName ? `WHERE p.name GLOB '${packageName}*'` : '';
737
+ return `
738
+ -- Input Events Analysis
739
+ SELECT
740
+ e.ts / 1e6 as ts_ms,
741
+ e.name as event_name,
742
+ p.name as process_name
743
+ FROM slice e
744
+ JOIN track t ON e.track_id = t.id
745
+ JOIN process_track pt ON t.id = pt.id
746
+ JOIN process p ON pt.upid = p.upid
747
+ ${whereClause.replace('WHERE', 'AND')} AND (e.name GLOB '*Input*' OR e.name GLOB '*Touch*' OR e.name GLOB '*Key*')
748
+ ORDER BY e.ts ASC;
749
+ `;
750
+ }
751
+ getBinderSql(packageName) {
752
+ const whereClause = packageName ? `WHERE p.name GLOB '${packageName}*'` : '';
753
+ return `
754
+ -- Binder Transactions Analysis
755
+ SELECT
756
+ ts / 1e6 as ts_ms,
757
+ dur / 1e6 as dur_ms,
758
+ aidl_name,
759
+ is_sync,
760
+ thread_name
761
+ FROM binder_txn
762
+ ${whereClause.replace('WHERE', 'AND')}
763
+ ORDER BY ts ASC;
764
+ `;
765
+ }
766
+ getBufferFlowSql() {
767
+ return `
768
+ -- Buffer Queue Flow Analysis
769
+ SELECT
770
+ ts / 1e6 as ts_ms,
771
+ queue_depth,
772
+ fence_wait_time_ns / 1e6 as fence_wait_ms,
773
+ buffer_id
774
+ FROM buffer_queue_state
775
+ ORDER BY ts ASC;
776
+ `;
777
+ }
778
+ getSystemServerSql() {
779
+ return `
780
+ -- SystemServer Performance
781
+ SELECT
782
+ ts / 1e6 as ts_ms,
783
+ dur / 1e6 as dur_ms,
784
+ service_name,
785
+ interface_name
786
+ FROM system_server_calls
787
+ ORDER BY ts ASC;
788
+ `;
789
+ }
790
+ getSlowFunctionsSql(packageName) {
791
+ const processFilter = packageName ? `WHERE p.name GLOB '${packageName}*'` : '';
792
+ return `
793
+ -- Slow Main-Thread Functions Analysis (>16ms)
794
+ SELECT
795
+ s.name as function_name,
796
+ COUNT(*) as count,
797
+ AVG(s.dur) / 1e6 as avg_dur_ms,
798
+ MAX(s.dur) / 1e6 as max_dur_ms,
799
+ SUM(s.dur) / 1e6 as total_dur_ms,
800
+ p.name as process_name
801
+ FROM slice s
802
+ JOIN thread_track tt ON s.track_id = tt.id
803
+ JOIN thread t ON tt.utid = t.utid
804
+ JOIN process p ON t.upid = p.upid
805
+ ${processFilter.replace('WHERE', 'AND')}
806
+ AND s.dur > 16000000
807
+ AND (COALESCE(t.is_main_thread, 0) = 1 OR t.tid = p.pid OR LOWER(COALESCE(t.name, '')) = 'main')
808
+ GROUP BY s.name, p.name
809
+ ORDER BY total_dur_ms DESC;
810
+ `;
811
+ }
812
+ getNetworkSql(packageName) {
813
+ const processFilter = packageName ? `AND p.name GLOB '${packageName}*'` : '';
814
+ return `
815
+ -- Network Traffic Analysis
816
+ SELECT
817
+ net.name,
818
+ net.slice_id,
819
+ net.ts / 1e6 as ts_ms,
820
+ net.dur / 1e6 as dur_ms,
821
+ t.name as thread_name,
822
+ p.name as process_name
823
+ FROM network_traffic_slice net
824
+ JOIN thread_track tt ON net.track_id = tt.id
825
+ JOIN thread t ON tt.utid = t.utid
826
+ JOIN process p ON t.upid = p.upid
827
+ WHERE 1=1
828
+ ${processFilter}
829
+ ORDER BY net.ts ASC;
830
+ `;
831
+ }
832
+ getDatabaseSql(packageName) {
833
+ const processFilter = packageName ? `AND p.name GLOB '${packageName}*'` : '';
834
+ return `
835
+ -- Database Query Analysis (SQLite/Room)
836
+ SELECT
837
+ s.name,
838
+ s.ts / 1e6 as ts_ms,
839
+ s.dur / 1e6 as dur_ms,
840
+ t.name as thread_name,
841
+ p.name as process_name
842
+ FROM slice s
843
+ JOIN thread_track tt ON s.track_id = tt.id
844
+ JOIN thread t ON tt.utid = t.utid
845
+ JOIN process p ON t.upid = p.upid
846
+ WHERE s.name GLOB '*sqlite*%' OR s.name GLOB '*room*%'
847
+ ${processFilter}
848
+ ORDER BY s.ts ASC;
849
+ `;
850
+ }
851
+ getFileIOSql(packageName) {
852
+ const processFilter = packageName ? `AND p.name GLOB '${packageName}*'` : '';
853
+ return `
854
+ -- File I/O Analysis
855
+ SELECT
856
+ s.name,
857
+ s.ts / 1e6 as ts_ms,
858
+ s.dur / 1e6 as dur_ms,
859
+ t.name as thread_name,
860
+ p.name as process_name
861
+ FROM slice s
862
+ JOIN thread_track tt ON s.track_id = tt.id
863
+ JOIN thread t ON tt.utid = t.utid
864
+ JOIN process p ON t.upid = p.upid
865
+ WHERE s.name GLOB '*read*%' OR s.name GLOB '*write*%' OR s.name GLOB '*fs_*%'
866
+ ${processFilter}
867
+ ORDER BY s.ts ASC;
868
+ `;
869
+ }
870
+ // ========================================================================
871
+ // Skill-Specific Analysis Methods
872
+ // ========================================================================
873
+ /**
874
+ * Analyze app startup performance
875
+ * Based on: perfetto_sql/stdlib/android/startup/startups_minsdk33.sql
876
+ */
877
+ async analyzeStartup(traceId, packageName) {
878
+ // 尝试多种方法获取启动数据
879
+ console.log('[PerfettoSqlSkill] analyzeStartup called for package:', packageName);
880
+ // 方法1: 尝试使用 android_startup_processes 表(更可靠)
881
+ try {
882
+ await this.traceProcessor.query(traceId, 'INCLUDE PERFETTO MODULE android.startup.startup_events;');
883
+ console.log('[PerfettoSqlSkill] android.startup.startup_events module included');
884
+ }
885
+ catch (e) {
886
+ console.log('[PerfettoSqlSkill] startup_events module not available');
887
+ }
888
+ // 方法2: 尝试 android.startup.startups 模块
889
+ try {
890
+ await this.traceProcessor.query(traceId, 'INCLUDE PERFETTO MODULE android.startup.startups;');
891
+ console.log('[PerfettoSqlSkill] android.startup.startups module included');
892
+ }
893
+ catch (e) {
894
+ console.log('[PerfettoSqlSkill] startups module not available');
895
+ }
896
+ // 诊断:检查可用的启动相关表
897
+ const availableTables = [];
898
+ const tablesToCheck = ['android_startups', 'android_startup_processes', '_startup_events'];
899
+ for (const table of tablesToCheck) {
900
+ try {
901
+ const checkResult = await this.traceProcessor.query(traceId, `SELECT COUNT(*) as cnt FROM ${table}`);
902
+ const count = checkResult.rows?.[0]?.[0] ?? 0;
903
+ console.log(`[PerfettoSqlSkill] Table ${table}: ${count} rows`);
904
+ if (count > 0)
905
+ availableTables.push(table);
906
+ }
907
+ catch (e) {
908
+ console.log(`[PerfettoSqlSkill] Table ${table} not available`);
909
+ }
910
+ }
911
+ // 如果 android_startups 有数据,使用它
912
+ if (availableTables.includes('android_startups')) {
913
+ let whereClause = '';
914
+ if (packageName) {
915
+ whereClause = `WHERE (
916
+ package GLOB '${packageName}*'
917
+ OR package GLOB '*${packageName.split('.').pop()}*'
918
+ )`;
919
+ }
920
+ const sql = `
921
+ SELECT
922
+ startup_id,
923
+ ts / 1e6 as ts_ms,
924
+ dur / 1e6 as dur_ms,
925
+ package,
926
+ startup_type
927
+ FROM android_startups
928
+ ${whereClause}
929
+ ORDER BY ts ASC
930
+ `;
931
+ const queryResult = await this.traceProcessor.query(traceId, sql);
932
+ if (!queryResult.error && queryResult.rows.length > 0) {
933
+ console.log('[PerfettoSqlSkill] Got data from android_startups:', queryResult.rows.length, 'rows');
934
+ const startupObjects = rowsToObjects(queryResult.columns, queryResult.rows);
935
+ return {
936
+ analysisType: 'startup',
937
+ sql,
938
+ rows: queryResult.rows,
939
+ rowCount: queryResult.rows.length,
940
+ summary: this.formatStartupSummary(startupObjects),
941
+ metrics: {
942
+ totalStartups: queryResult.rows.length,
943
+ coldStarts: startupObjects.filter((s) => s.startup_type === 'cold').length,
944
+ warmStarts: startupObjects.filter((s) => s.startup_type === 'warm').length,
945
+ hotStarts: startupObjects.filter((s) => s.startup_type === 'hot').length,
946
+ },
947
+ };
948
+ }
949
+ }
950
+ // 如果 android_startup_processes 有数据,使用它
951
+ if (availableTables.includes('android_startup_processes')) {
952
+ let whereClause = '';
953
+ if (packageName) {
954
+ whereClause = `WHERE (
955
+ package GLOB '${packageName}*'
956
+ OR package GLOB '*${packageName.split('.').pop()}*'
957
+ OR name GLOB '${packageName}*'
958
+ )`;
959
+ }
960
+ const sql = `
961
+ SELECT
962
+ startup_id,
963
+ startup_type,
964
+ package,
965
+ name as process_name,
966
+ ts / 1e6 as ts_ms,
967
+ dur / 1e6 as dur_ms
968
+ FROM android_startup_processes
969
+ ${whereClause}
970
+ ORDER BY ts ASC
971
+ `;
972
+ const queryResult = await this.traceProcessor.query(traceId, sql);
973
+ if (!queryResult.error && queryResult.rows.length > 0) {
974
+ console.log('[PerfettoSqlSkill] Got data from android_startup_processes:', queryResult.rows.length, 'rows');
975
+ const startupObjects = rowsToObjects(queryResult.columns, queryResult.rows);
976
+ return {
977
+ analysisType: 'startup',
978
+ sql,
979
+ rows: queryResult.rows,
980
+ rowCount: queryResult.rows.length,
981
+ summary: this.formatStartupProcessesSummary(startupObjects),
982
+ metrics: {
983
+ totalStartups: queryResult.rows.length,
984
+ coldStarts: startupObjects.filter((s) => s.startup_type === 'cold').length,
985
+ warmStarts: startupObjects.filter((s) => s.startup_type === 'warm').length,
986
+ hotStarts: startupObjects.filter((s) => s.startup_type === 'hot').length,
987
+ },
988
+ };
989
+ }
990
+ }
991
+ // 方法3: 直接从 slice 表查询启动生命周期事件
992
+ console.log('[PerfettoSqlSkill] Falling back to slice-based startup analysis');
993
+ return this.analyzeStartupFromSlices(traceId, packageName);
994
+ }
995
+ /**
996
+ * 从 slice 表直接分析启动事件
997
+ * 查询完整的 Activity 生命周期和启动相关事件
998
+ */
999
+ async analyzeStartupFromSlices(traceId, packageName) {
1000
+ // 构建进程过滤条件 - 支持包名和进程名的多种匹配方式
1001
+ let processFilter = '';
1002
+ if (packageName) {
1003
+ // Android 进程名可能被截断,所以使用多种匹配方式
1004
+ const lastPart = packageName.split('.').pop() || packageName;
1005
+ processFilter = `AND (
1006
+ p.name GLOB '${packageName}*'
1007
+ OR p.name GLOB '*${lastPart}*'
1008
+ OR p.name LIKE '%${packageName}%'
1009
+ OR p.cmdline GLOB '*${packageName}*'
1010
+ )`;
1011
+ }
1012
+ // 查询完整的启动生命周期事件
1013
+ const sql = `
1014
+ SELECT
1015
+ s.name as event_name,
1016
+ s.ts / 1e6 as ts_ms,
1017
+ s.dur / 1e6 as dur_ms,
1018
+ p.name as process_name,
1019
+ t.name as thread_name,
1020
+ p.pid,
1021
+ CASE
1022
+ WHEN s.name GLOB '*bindApplication*' THEN 1
1023
+ WHEN s.name GLOB '*activityStart*' THEN 2
1024
+ WHEN s.name GLOB '*performCreate*' OR s.name GLOB '*onCreate*' THEN 3
1025
+ WHEN s.name GLOB '*performResume*' OR s.name GLOB '*onResume*' THEN 4
1026
+ WHEN s.name GLOB '*inflate*' THEN 5
1027
+ WHEN s.name GLOB '*traversal*' OR s.name GLOB '*measure*' OR s.name GLOB '*layout*' THEN 6
1028
+ WHEN s.name GLOB '*draw*' OR s.name GLOB '*Choreographer*doFrame*' THEN 7
1029
+ WHEN s.name GLOB '*reportFullyDrawn*' THEN 8
1030
+ ELSE 99
1031
+ END as phase_order
1032
+ FROM slice s
1033
+ JOIN thread_track tt ON s.track_id = tt.id
1034
+ JOIN thread t ON tt.utid = t.utid
1035
+ JOIN process p ON t.upid = p.upid
1036
+ WHERE (
1037
+ s.name GLOB '*bindApplication*'
1038
+ OR s.name GLOB '*activityStart*'
1039
+ OR s.name GLOB '*ActivityThread*main*'
1040
+ OR s.name GLOB '*performCreate*'
1041
+ OR s.name GLOB '*onCreate*'
1042
+ OR s.name GLOB '*performResume*'
1043
+ OR s.name GLOB '*onResume*'
1044
+ OR s.name GLOB '*inflate*'
1045
+ OR s.name GLOB '*traversal*'
1046
+ OR s.name GLOB '*measure*'
1047
+ OR s.name GLOB '*layout*'
1048
+ OR s.name GLOB '*draw*'
1049
+ OR s.name GLOB '*Choreographer*doFrame*'
1050
+ OR s.name GLOB '*reportFullyDrawn*'
1051
+ OR s.name GLOB '*launching*'
1052
+ OR s.name GLOB '*ResourcesImpl*'
1053
+ OR s.name GLOB '*Lock*contention*'
1054
+ OR s.name GLOB '*Choreographer*'
1055
+ )
1056
+ ${processFilter}
1057
+ ORDER BY s.ts ASC
1058
+ `;
1059
+ console.log('[PerfettoSqlSkill] analyzeStartupFromSlices SQL (truncated):', sql.substring(0, 400));
1060
+ const queryResult = await this.traceProcessor.query(traceId, sql);
1061
+ if (queryResult.error) {
1062
+ console.log('[PerfettoSqlSkill] analyzeStartupFromSlices error:', queryResult.error);
1063
+ return this.analyzeStartupFallback(traceId, packageName);
1064
+ }
1065
+ if (queryResult.rows.length === 0) {
1066
+ console.log('[PerfettoSqlSkill] analyzeStartupFromSlices: no results, trying broader fallback');
1067
+ return this.analyzeStartupFallback(traceId, packageName);
1068
+ }
1069
+ console.log('[PerfettoSqlSkill] analyzeStartupFromSlices found', queryResult.rows.length, 'events');
1070
+ // 转换为对象并生成摘要
1071
+ const events = rowsToObjects(queryResult.columns, queryResult.rows);
1072
+ const summary = this.formatStartupEventsSummary(events);
1073
+ return {
1074
+ analysisType: 'startup',
1075
+ sql,
1076
+ rows: queryResult.rows,
1077
+ rowCount: queryResult.rows.length,
1078
+ summary,
1079
+ details: {
1080
+ method: 'slice_based_analysis',
1081
+ events: events.slice(0, 20), // 前 20 个事件
1082
+ },
1083
+ };
1084
+ }
1085
+ /**
1086
+ * Analyze app startup with detailed breakdown
1087
+ * Includes: slice durations, CPU core distribution, frequency, thread blocking
1088
+ */
1089
+ async analyzeStartupDetailed(traceId, packageName) {
1090
+ console.log('[PerfettoSqlSkill] analyzeStartupDetailed called for package:', packageName);
1091
+ // Include startup modules
1092
+ try {
1093
+ await this.traceProcessor.query(traceId, 'INCLUDE PERFETTO MODULE android.startup.startups;');
1094
+ }
1095
+ catch (e) {
1096
+ console.log('[PerfettoSqlSkill] startups module not available');
1097
+ }
1098
+ // 1. First, get all startups from android_startups table
1099
+ let whereClause = '';
1100
+ if (packageName) {
1101
+ whereClause = `WHERE (package GLOB '${packageName}*' OR package GLOB '*${packageName.split('.').pop()}*')`;
1102
+ }
1103
+ const startupsSql = `
1104
+ SELECT
1105
+ startup_id,
1106
+ ts,
1107
+ ts + dur as ts_end,
1108
+ ts / 1e6 as ts_ms,
1109
+ dur / 1e6 as dur_ms,
1110
+ package,
1111
+ startup_type
1112
+ FROM android_startups
1113
+ ${whereClause}
1114
+ ORDER BY ts ASC
1115
+ `;
1116
+ const startupsResult = await this.traceProcessor.query(traceId, startupsSql);
1117
+ if (startupsResult.error || startupsResult.rows.length === 0) {
1118
+ console.log('[PerfettoSqlSkill] No startups found in android_startups table');
1119
+ return {
1120
+ analysisType: 'startup_detailed',
1121
+ sql: startupsSql,
1122
+ rows: [],
1123
+ rowCount: 0,
1124
+ summary: '未找到启动事件。请确保 Trace 包含应用启动数据。',
1125
+ error: startupsResult.error || 'No startup events found',
1126
+ };
1127
+ }
1128
+ const startups = rowsToObjects(startupsResult.columns, startupsResult.rows);
1129
+ console.log(`[PerfettoSqlSkill] Found ${startups.length} startup(s) to analyze`);
1130
+ // Analyze each startup separately
1131
+ const startupAnalyses = [];
1132
+ for (let i = 0; i < startups.length; i++) {
1133
+ const startup = startups[i];
1134
+ const startupStart = startup.ts;
1135
+ const startupEnd = startup.ts_end;
1136
+ const startupPackage = startup.package;
1137
+ const startupType = startup.startup_type;
1138
+ const startupDurMs = startup.dur_ms;
1139
+ console.log(`[PerfettoSqlSkill] Analyzing startup ${i + 1}/${startups.length}: ${startupPackage} (${startupType}), ${startupDurMs.toFixed(2)}ms`);
1140
+ // Get main thread utid for this startup
1141
+ let mainThreadUtid = 0;
1142
+ try {
1143
+ const utidSql = `
1144
+ SELECT t.utid
1145
+ FROM thread t
1146
+ JOIN process p ON t.upid = p.upid
1147
+ WHERE t.name = 'main' AND p.name GLOB '${startupPackage}*'
1148
+ LIMIT 1
1149
+ `;
1150
+ const utidResult = await this.traceProcessor.query(traceId, utidSql);
1151
+ if (utidResult.rows.length > 0) {
1152
+ mainThreadUtid = utidResult.rows[0][0];
1153
+ }
1154
+ }
1155
+ catch (e) {
1156
+ console.log('[PerfettoSqlSkill] Could not find main thread utid');
1157
+ }
1158
+ const analysis = await this.analyzeOneStartup(traceId, startupStart, startupEnd, startupPackage, startupType, startupDurMs, mainThreadUtid, i + 1);
1159
+ startupAnalyses.push(analysis);
1160
+ }
1161
+ // Build final result
1162
+ const results = {
1163
+ analysisType: 'startup_detailed',
1164
+ packageName: packageName || 'all',
1165
+ totalStartups: startups.length,
1166
+ startupAnalyses,
1167
+ sql: startupsSql,
1168
+ rowCount: startups.length,
1169
+ };
1170
+ results.summary = this.formatMultiStartupSummary(startupAnalyses);
1171
+ return results;
1172
+ }
1173
+ /**
1174
+ * Analyze a single startup event with all detailed metrics
1175
+ */
1176
+ async analyzeOneStartup(traceId, startupStart, startupEnd, packageName, startupType, durationMs, mainThreadUtid, startupIndex) {
1177
+ const sections = {};
1178
+ // Basic info
1179
+ sections.basicInfo = {
1180
+ title: `启动 #${startupIndex} 基本信息`,
1181
+ data: {
1182
+ packageName,
1183
+ startupType,
1184
+ durationMs: durationMs.toFixed(2),
1185
+ startTimeNs: startupStart,
1186
+ endTimeNs: startupEnd,
1187
+ }
1188
+ };
1189
+ // 2. Get top slices by duration during startup
1190
+ try {
1191
+ const topSlicesSql = `
1192
+ SELECT
1193
+ s.name as slice_name,
1194
+ s.dur / 1e6 as dur_ms,
1195
+ (s.ts - ${startupStart}) / 1e6 as relative_ts_ms,
1196
+ t.name as thread_name,
1197
+ s.depth
1198
+ FROM slice s
1199
+ JOIN thread_track tt ON s.track_id = tt.id
1200
+ JOIN thread t ON tt.utid = t.utid
1201
+ JOIN process p ON t.upid = p.upid
1202
+ WHERE s.dur > 0
1203
+ AND p.name GLOB '${packageName}*'
1204
+ AND s.ts >= ${startupStart} AND s.ts <= ${startupEnd}
1205
+ ORDER BY s.dur DESC
1206
+ LIMIT 50
1207
+ `;
1208
+ const topSlicesResult = await this.traceProcessor.query(traceId, topSlicesSql);
1209
+ if (!topSlicesResult.error && topSlicesResult.rows.length > 0) {
1210
+ sections.topSlices = {
1211
+ title: '启动期间耗时最长的 Slice',
1212
+ columns: topSlicesResult.columns,
1213
+ data: rowsToObjects(topSlicesResult.columns, topSlicesResult.rows),
1214
+ sql: topSlicesSql,
1215
+ };
1216
+ }
1217
+ }
1218
+ catch (e) {
1219
+ console.log('[PerfettoSqlSkill] topSlices query failed:', e);
1220
+ }
1221
+ // 3. CPU Core Distribution (Big vs Little cores) for main thread
1222
+ try {
1223
+ const utidFilter = mainThreadUtid > 0 ? `sched.utid = ${mainThreadUtid}` :
1224
+ `t.name = 'main' AND p.name GLOB '${packageName}*'`;
1225
+ const cpuCoreSql = `
1226
+ WITH ${CPU_TOPOLOGY_CTE}
1227
+ SELECT
1228
+ sched.cpu,
1229
+ COALESCE(ct.core_type, 'unknown') as core_type,
1230
+ SUM(sched.dur) / 1e6 as total_dur_ms,
1231
+ COUNT(*) as slice_count,
1232
+ AVG(sched.dur) / 1e6 as avg_dur_ms
1233
+ FROM sched_slice sched
1234
+ JOIN thread t ON sched.utid = t.utid
1235
+ JOIN process p ON t.upid = p.upid
1236
+ LEFT JOIN cpu_topology ct ON sched.cpu = ct.cpu_id
1237
+ WHERE sched.dur > 0
1238
+ AND ${utidFilter}
1239
+ AND sched.ts >= ${startupStart} AND sched.ts <= ${startupEnd}
1240
+ GROUP BY sched.cpu
1241
+ ORDER BY total_dur_ms DESC
1242
+ `;
1243
+ const cpuCoreResult = await this.traceProcessor.query(traceId, cpuCoreSql);
1244
+ if (!cpuCoreResult.error && cpuCoreResult.rows.length > 0) {
1245
+ const coreData = rowsToObjects(cpuCoreResult.columns, cpuCoreResult.rows);
1246
+ // Calculate big vs little ratio
1247
+ let bigCoreTime = 0;
1248
+ let littleCoreTime = 0;
1249
+ coreData.forEach((row) => {
1250
+ if (['prime', 'big', 'medium'].includes(row.core_type))
1251
+ bigCoreTime += row.total_dur_ms || 0;
1252
+ else if (row.core_type === 'little')
1253
+ littleCoreTime += row.total_dur_ms || 0;
1254
+ });
1255
+ const totalCoreTime = bigCoreTime + littleCoreTime;
1256
+ sections.cpuCoreDistribution = {
1257
+ title: 'CPU 大小核分布',
1258
+ data: coreData,
1259
+ summary: {
1260
+ bigCoreTime: bigCoreTime.toFixed(2),
1261
+ littleCoreTime: littleCoreTime.toFixed(2),
1262
+ bigCorePercent: totalCoreTime > 0 ? ((bigCoreTime / totalCoreTime) * 100).toFixed(1) : '0',
1263
+ littleCorePercent: totalCoreTime > 0 ? ((littleCoreTime / totalCoreTime) * 100).toFixed(1) : '0',
1264
+ },
1265
+ sql: cpuCoreSql,
1266
+ };
1267
+ }
1268
+ }
1269
+ catch (e) {
1270
+ console.log('[PerfettoSqlSkill] cpuCore query failed:', e);
1271
+ }
1272
+ // 4. CPU Frequency during startup
1273
+ try {
1274
+ const cpuFreqSql = `
1275
+ WITH ${CPU_TOPOLOGY_CTE}
1276
+ SELECT
1277
+ cct.cpu,
1278
+ COALESCE(ct.core_type, 'unknown') as core_type,
1279
+ CAST(AVG(value) AS INTEGER) / 1000 as avg_freq_mhz,
1280
+ CAST(MAX(value) AS INTEGER) / 1000 as max_freq_mhz,
1281
+ CAST(MIN(value) AS INTEGER) / 1000 as min_freq_mhz
1282
+ FROM counter c
1283
+ JOIN cpu_counter_track cct ON c.track_id = cct.id
1284
+ LEFT JOIN cpu_topology ct ON cct.cpu = ct.cpu_id
1285
+ WHERE cct.name = 'cpufreq'
1286
+ AND c.ts >= ${startupStart} AND c.ts <= ${startupEnd}
1287
+ GROUP BY cct.cpu, core_type
1288
+ ORDER BY cct.cpu
1289
+ `;
1290
+ const cpuFreqResult = await this.traceProcessor.query(traceId, cpuFreqSql);
1291
+ if (!cpuFreqResult.error && cpuFreqResult.rows.length > 0) {
1292
+ const freqData = rowsToObjects(cpuFreqResult.columns, cpuFreqResult.rows);
1293
+ // Calculate average across big and little cores
1294
+ let bigCoreAvgFreq = 0;
1295
+ let littleCoreAvgFreq = 0;
1296
+ let bigCount = 0;
1297
+ let littleCount = 0;
1298
+ freqData.forEach((row) => {
1299
+ const coreType = row.core_type;
1300
+ const avgFreq = row.avg_freq_mhz || 0;
1301
+ if (['prime', 'big', 'medium'].includes(coreType)) {
1302
+ bigCoreAvgFreq += avgFreq;
1303
+ bigCount++;
1304
+ }
1305
+ else if (coreType === 'little') {
1306
+ littleCoreAvgFreq += avgFreq;
1307
+ littleCount++;
1308
+ }
1309
+ });
1310
+ sections.cpuFrequency = {
1311
+ title: 'CPU 频率信息',
1312
+ data: freqData,
1313
+ summary: {
1314
+ bigCoreAvgFreq: bigCount > 0 ? (bigCoreAvgFreq / bigCount).toFixed(0) : 'N/A',
1315
+ littleCoreAvgFreq: littleCount > 0 ? (littleCoreAvgFreq / littleCount).toFixed(0) : 'N/A',
1316
+ },
1317
+ sql: cpuFreqSql,
1318
+ };
1319
+ }
1320
+ }
1321
+ catch (e) {
1322
+ console.log('[PerfettoSqlSkill] cpuFreq query failed:', e);
1323
+ }
1324
+ // 5. Main Thread State Analysis (Running/Runnable/Sleeping breakdown)
1325
+ try {
1326
+ const utidFilter = mainThreadUtid > 0 ? `ts.utid = ${mainThreadUtid}` :
1327
+ `t.name = 'main' AND p.name GLOB '${packageName}*'`;
1328
+ const threadStateSql = `
1329
+ SELECT
1330
+ ts.state,
1331
+ CASE ts.state
1332
+ WHEN 'Running' THEN 'Running (执行中)'
1333
+ WHEN 'R' THEN 'Runnable (可运行)'
1334
+ WHEN 'R+' THEN 'Runnable (可运行,抢占)'
1335
+ WHEN 'S' THEN 'Sleeping (睡眠)'
1336
+ WHEN 'D' THEN 'Uninterruptible Sleep (不可中断睡眠)'
1337
+ WHEN 'I' THEN 'Idle (空闲)'
1338
+ ELSE ts.state
1339
+ END as state_desc,
1340
+ SUM(ts.dur) / 1e6 as total_dur_ms,
1341
+ COUNT(*) as count,
1342
+ (SUM(ts.dur) * 100.0) / ${startupEnd - startupStart} as percent
1343
+ FROM thread_state ts
1344
+ JOIN thread t ON ts.utid = t.utid
1345
+ JOIN process p ON t.upid = p.upid
1346
+ WHERE ${utidFilter}
1347
+ AND ts.ts >= ${startupStart} AND ts.ts <= ${startupEnd}
1348
+ GROUP BY ts.state
1349
+ ORDER BY total_dur_ms DESC
1350
+ `;
1351
+ const threadStateResult = await this.traceProcessor.query(traceId, threadStateSql);
1352
+ if (!threadStateResult.error && threadStateResult.rows.length > 0) {
1353
+ sections.threadStateDistribution = {
1354
+ title: '主线程状态分布',
1355
+ data: rowsToObjects(threadStateResult.columns, threadStateResult.rows),
1356
+ sql: threadStateSql,
1357
+ };
1358
+ }
1359
+ }
1360
+ catch (e) {
1361
+ console.log('[PerfettoSqlSkill] threadState query failed:', e);
1362
+ }
1363
+ // 6. Thread Blocking Analysis (detailed)
1364
+ try {
1365
+ const utidFilter = mainThreadUtid > 0 ? `ts.utid = ${mainThreadUtid}` : '';
1366
+ const blockingSql = `
1367
+ SELECT
1368
+ ts.state,
1369
+ ts.blocked_function,
1370
+ ts.dur / 1e6 as dur_ms,
1371
+ (ts.ts - ${startupStart}) / 1e6 as relative_ts_ms,
1372
+ CASE
1373
+ WHEN ts.blocked_function GLOB '*binder*' THEN 'binder'
1374
+ WHEN ts.blocked_function GLOB '*futex*' OR ts.blocked_function GLOB '*mutex*' THEN 'lock_contention'
1375
+ WHEN ts.blocked_function GLOB '*epoll*' OR ts.blocked_function GLOB '*poll*' THEN 'io_wait'
1376
+ WHEN ts.blocked_function GLOB '*sleep*' THEN 'sleep'
1377
+ WHEN ts.blocked_function GLOB '*SurfaceFlinger*' OR ts.blocked_function GLOB '*dequeue*' THEN 'surfaceflinger'
1378
+ WHEN ts.blocked_function GLOB '*GC*' OR ts.blocked_function GLOB '*art::gc*' THEN 'gc'
1379
+ ELSE 'other'
1380
+ END as block_type
1381
+ FROM thread_state ts
1382
+ JOIN thread t ON ts.utid = t.utid
1383
+ JOIN process p ON t.upid = p.upid
1384
+ WHERE ts.state IN ('S', 'D', 'I')
1385
+ AND ts.dur > 1000000
1386
+ ${utidFilter ? `AND ${utidFilter}` : `AND t.name = 'main' AND p.name GLOB '${packageName}*'`}
1387
+ AND ts.ts >= ${startupStart} AND ts.ts <= ${startupEnd}
1388
+ ORDER BY ts.dur DESC
1389
+ LIMIT 50
1390
+ `;
1391
+ const blockingResult = await this.traceProcessor.query(traceId, blockingSql);
1392
+ if (!blockingResult.error && blockingResult.rows.length > 0) {
1393
+ const blockData = rowsToObjects(blockingResult.columns, blockingResult.rows);
1394
+ // Summarize by block type
1395
+ const blockSummary = {};
1396
+ blockData.forEach((row) => {
1397
+ const type = row.block_type || 'other';
1398
+ if (!blockSummary[type]) {
1399
+ blockSummary[type] = { count: 0, totalMs: 0 };
1400
+ }
1401
+ blockSummary[type].count++;
1402
+ blockSummary[type].totalMs += row.dur_ms || 0;
1403
+ });
1404
+ sections.threadBlocking = {
1405
+ title: '主线程阻塞分析',
1406
+ data: blockData,
1407
+ summary: blockSummary,
1408
+ sql: blockingSql,
1409
+ };
1410
+ }
1411
+ }
1412
+ catch (e) {
1413
+ console.log('[PerfettoSqlSkill] blocking query failed:', e);
1414
+ }
1415
+ // 7. Binder transactions during startup
1416
+ try {
1417
+ const binderTxnSql = `
1418
+ SELECT
1419
+ client_process,
1420
+ server_process,
1421
+ client_dur / 1e6 as client_dur_ms,
1422
+ server_dur / 1e6 as server_dur_ms,
1423
+ (client_ts - ${startupStart}) / 1e6 as relative_ts_ms
1424
+ FROM android_binder_txns
1425
+ WHERE client_dur > 1000000
1426
+ AND (client_process GLOB '${packageName}*' OR server_process GLOB '${packageName}*')
1427
+ AND client_ts >= ${startupStart} AND client_ts <= ${startupEnd}
1428
+ ORDER BY client_dur DESC
1429
+ LIMIT 30
1430
+ `;
1431
+ const binderResult = await this.traceProcessor.query(traceId, binderTxnSql);
1432
+ if (!binderResult.error && binderResult.rows.length > 0) {
1433
+ sections.binderTransactions = {
1434
+ title: 'Binder 事务分析',
1435
+ data: rowsToObjects(binderResult.columns, binderResult.rows),
1436
+ sql: binderTxnSql,
1437
+ };
1438
+ }
1439
+ }
1440
+ catch (e) {
1441
+ console.log('[PerfettoSqlSkill] binder query failed (table may not exist):', e);
1442
+ }
1443
+ // 8. Main thread CPU utilization
1444
+ try {
1445
+ const utidFilter = mainThreadUtid > 0 ? `sched.utid = ${mainThreadUtid}` :
1446
+ `t.name = 'main' AND p.name GLOB '${packageName}*'`;
1447
+ const cpuUtilSql = `
1448
+ SELECT
1449
+ SUM(sched.dur) / 1e6 as running_time_ms,
1450
+ ${durationMs.toFixed(2)} as total_time_ms,
1451
+ (SUM(sched.dur) * 100.0) / ${startupEnd - startupStart} as cpu_utilization_percent
1452
+ FROM sched_slice sched
1453
+ JOIN thread t ON sched.utid = t.utid
1454
+ JOIN process p ON t.upid = p.upid
1455
+ WHERE ${utidFilter}
1456
+ AND sched.ts >= ${startupStart} AND sched.ts <= ${startupEnd}
1457
+ `;
1458
+ const cpuUtilResult = await this.traceProcessor.query(traceId, cpuUtilSql);
1459
+ if (!cpuUtilResult.error && cpuUtilResult.rows.length > 0) {
1460
+ const utilData = rowsToObjects(cpuUtilResult.columns, cpuUtilResult.rows);
1461
+ sections.cpuUtilization = {
1462
+ title: '主线程 CPU 利用率',
1463
+ data: utilData[0],
1464
+ sql: cpuUtilSql,
1465
+ };
1466
+ }
1467
+ }
1468
+ catch (e) {
1469
+ console.log('[PerfettoSqlSkill] cpuUtil query failed:', e);
1470
+ }
1471
+ // 9. GC Events during startup
1472
+ try {
1473
+ const gcSql = `
1474
+ SELECT
1475
+ s.name as gc_type,
1476
+ s.dur / 1e6 as dur_ms,
1477
+ (s.ts - ${startupStart}) / 1e6 as relative_ts_ms
1478
+ FROM slice s
1479
+ JOIN thread_track tt ON s.track_id = tt.id
1480
+ JOIN thread t ON tt.utid = t.utid
1481
+ JOIN process p ON t.upid = p.upid
1482
+ WHERE p.name GLOB '${packageName}*'
1483
+ AND (s.name GLOB '*GC*' OR s.name GLOB '*garbage*' OR s.name GLOB '*art::gc*')
1484
+ AND s.ts >= ${startupStart} AND s.ts <= ${startupEnd}
1485
+ ORDER BY s.dur DESC
1486
+ `;
1487
+ const gcResult = await this.traceProcessor.query(traceId, gcSql);
1488
+ if (!gcResult.error && gcResult.rows.length > 0) {
1489
+ const gcData = rowsToObjects(gcResult.columns, gcResult.rows);
1490
+ const totalGcTime = gcData.reduce((sum, row) => sum + (row.dur_ms || 0), 0);
1491
+ sections.gcEvents = {
1492
+ title: 'GC 事件',
1493
+ data: gcData,
1494
+ summary: {
1495
+ count: gcData.length,
1496
+ totalTimeMs: totalGcTime.toFixed(2),
1497
+ percentOfStartup: ((totalGcTime / durationMs) * 100).toFixed(1),
1498
+ },
1499
+ sql: gcSql,
1500
+ };
1501
+ }
1502
+ }
1503
+ catch (e) {
1504
+ console.log('[PerfettoSqlSkill] GC query failed:', e);
1505
+ }
1506
+ // 10. Key startup phases breakdown
1507
+ try {
1508
+ const phasesSql = `
1509
+ SELECT
1510
+ s.name as phase_name,
1511
+ s.dur / 1e6 as dur_ms,
1512
+ (s.ts - ${startupStart}) / 1e6 as relative_start_ms,
1513
+ ((s.ts + s.dur) - ${startupStart}) / 1e6 as relative_end_ms
1514
+ FROM slice s
1515
+ JOIN thread_track tt ON s.track_id = tt.id
1516
+ JOIN thread t ON tt.utid = t.utid
1517
+ JOIN process p ON t.upid = p.upid
1518
+ WHERE p.name GLOB '${packageName}*'
1519
+ AND t.name = 'main'
1520
+ AND (s.name GLOB '*bindApplication*'
1521
+ OR s.name GLOB '*activityStart*'
1522
+ OR s.name GLOB '*performCreate*'
1523
+ OR s.name GLOB '*onCreate*'
1524
+ OR s.name GLOB '*performResume*'
1525
+ OR s.name GLOB '*onResume*'
1526
+ OR s.name GLOB '*Choreographer#doFrame*'
1527
+ OR s.name GLOB '*reportFullyDrawn*'
1528
+ OR s.name GLOB '*contentProviderCreate*'
1529
+ OR s.name GLOB '*Application.onCreate*')
1530
+ AND s.ts >= ${startupStart} AND s.ts <= ${startupEnd}
1531
+ ORDER BY s.ts ASC
1532
+ `;
1533
+ const phasesResult = await this.traceProcessor.query(traceId, phasesSql);
1534
+ if (!phasesResult.error && phasesResult.rows.length > 0) {
1535
+ sections.startupPhases = {
1536
+ title: '关键启动阶段',
1537
+ data: rowsToObjects(phasesResult.columns, phasesResult.rows),
1538
+ sql: phasesSql,
1539
+ };
1540
+ }
1541
+ }
1542
+ catch (e) {
1543
+ console.log('[PerfettoSqlSkill] phases query failed:', e);
1544
+ }
1545
+ // Return the complete analysis for this startup
1546
+ return {
1547
+ startupIndex,
1548
+ packageName,
1549
+ startupType,
1550
+ durationMs: durationMs.toFixed(2),
1551
+ sections,
1552
+ summary: this.formatSingleStartupSummary(sections, packageName, startupType, durationMs, startupIndex),
1553
+ };
1554
+ }
1555
+ /**
1556
+ * Format summary for a single startup event
1557
+ */
1558
+ formatSingleStartupSummary(sections, packageName, startupType, durationMs, startupIndex) {
1559
+ const lines = [`\n========== 启动 #${startupIndex} 详细分析 ==========\n`];
1560
+ // Basic info
1561
+ lines.push('【基础信息】');
1562
+ lines.push(` 包名: ${packageName}`);
1563
+ lines.push(` 启动类型: ${startupType}`);
1564
+ lines.push(` 总耗时: ${durationMs.toFixed(2)}ms`);
1565
+ lines.push('');
1566
+ // Key startup phases
1567
+ if (sections.startupPhases?.data?.length > 0) {
1568
+ lines.push('【关键启动阶段】');
1569
+ sections.startupPhases.data.forEach((row) => {
1570
+ lines.push(` ${row.phase_name}: ${row.dur_ms?.toFixed(2) ?? 'N/A'}ms (@ ${row.relative_start_ms?.toFixed(1) ?? 'N/A'}ms)`);
1571
+ });
1572
+ lines.push('');
1573
+ }
1574
+ // Top Slices
1575
+ if (sections.topSlices?.data?.length > 0) {
1576
+ lines.push('【耗时最长的操作 (Top 10)】');
1577
+ sections.topSlices.data.slice(0, 10).forEach((row, idx) => {
1578
+ lines.push(` ${idx + 1}. ${row.slice_name}: ${row.dur_ms?.toFixed(2) ?? 'N/A'}ms (${row.thread_name})`);
1579
+ });
1580
+ lines.push('');
1581
+ }
1582
+ // Thread State Distribution
1583
+ if (sections.threadStateDistribution?.data?.length > 0) {
1584
+ lines.push('【主线程状态分布】');
1585
+ sections.threadStateDistribution.data.forEach((row) => {
1586
+ lines.push(` ${row.state_desc || row.state}: ${row.total_dur_ms?.toFixed(2) ?? 'N/A'}ms (${row.percent?.toFixed(1) ?? 'N/A'}%)`);
1587
+ });
1588
+ lines.push('');
1589
+ }
1590
+ // CPU Core Distribution
1591
+ if (sections.cpuCoreDistribution?.summary) {
1592
+ const s = sections.cpuCoreDistribution.summary;
1593
+ lines.push('【CPU 大小核分布】');
1594
+ lines.push(` 大核运行时间: ${s.bigCoreTime}ms (${s.bigCorePercent}%)`);
1595
+ lines.push(` 小核运行时间: ${s.littleCoreTime}ms (${s.littleCorePercent}%)`);
1596
+ lines.push('');
1597
+ }
1598
+ // CPU Frequency
1599
+ if (sections.cpuFrequency?.summary) {
1600
+ const s = sections.cpuFrequency.summary;
1601
+ lines.push('【CPU 平均频率】');
1602
+ lines.push(` 大核平均频率: ${s.bigCoreAvgFreq} MHz`);
1603
+ lines.push(` 小核平均频率: ${s.littleCoreAvgFreq} MHz`);
1604
+ lines.push('');
1605
+ }
1606
+ // CPU Utilization
1607
+ if (sections.cpuUtilization?.data) {
1608
+ const d = sections.cpuUtilization.data;
1609
+ lines.push('【主线程 CPU 利用率】');
1610
+ lines.push(` 运行时间: ${d.running_time_ms?.toFixed(2) ?? 'N/A'}ms`);
1611
+ lines.push(` CPU 利用率: ${d.cpu_utilization_percent?.toFixed(1) ?? 'N/A'}%`);
1612
+ lines.push('');
1613
+ }
1614
+ // GC Events
1615
+ if (sections.gcEvents?.summary) {
1616
+ const s = sections.gcEvents.summary;
1617
+ lines.push('【GC 事件】');
1618
+ lines.push(` GC 次数: ${s.count}`);
1619
+ lines.push(` GC 总耗时: ${s.totalTimeMs}ms (占启动 ${s.percentOfStartup}%)`);
1620
+ lines.push('');
1621
+ }
1622
+ // Thread Blocking Summary
1623
+ if (sections.threadBlocking?.summary) {
1624
+ const s = sections.threadBlocking.summary;
1625
+ lines.push('【主线程阻塞分析】');
1626
+ Object.entries(s).forEach(([type, info]) => {
1627
+ lines.push(` ${type}: ${info.count}次, 总计 ${info.totalMs.toFixed(2)}ms`);
1628
+ });
1629
+ lines.push('');
1630
+ // Top blocking events
1631
+ if (sections.threadBlocking.data?.length > 0) {
1632
+ lines.push(' Top 5 阻塞事件:');
1633
+ sections.threadBlocking.data.slice(0, 5).forEach((row, idx) => {
1634
+ const func = row.blocked_function || 'unknown';
1635
+ const shortFunc = func.length > 50 ? func.substring(0, 50) + '...' : func;
1636
+ lines.push(` ${idx + 1}. [${row.block_type}] ${shortFunc}: ${row.dur_ms?.toFixed(2) ?? 'N/A'}ms (@ ${row.relative_ts_ms?.toFixed(1)}ms)`);
1637
+ });
1638
+ }
1639
+ lines.push('');
1640
+ }
1641
+ // Binder transactions
1642
+ if (sections.binderTransactions?.data?.length > 0) {
1643
+ lines.push('【Binder 事务 (耗时最长)】');
1644
+ sections.binderTransactions.data.slice(0, 5).forEach((row, idx) => {
1645
+ lines.push(` ${idx + 1}. ${row.client_process} -> ${row.server_process}: ${row.client_dur_ms?.toFixed(2) ?? 'N/A'}ms`);
1646
+ });
1647
+ lines.push('');
1648
+ }
1649
+ return lines.join('\n');
1650
+ }
1651
+ /**
1652
+ * Format summary for multiple startup events
1653
+ */
1654
+ formatMultiStartupSummary(startupAnalyses) {
1655
+ if (startupAnalyses.length === 0) {
1656
+ return '未找到启动事件';
1657
+ }
1658
+ const lines = ['╔══════════════════════════════════════════════════════════════╗'];
1659
+ lines.push(`║ 详细启动分析报告 (共 ${startupAnalyses.length} 个启动事件) ║`);
1660
+ lines.push('╚══════════════════════════════════════════════════════════════╝\n');
1661
+ // Quick overview
1662
+ lines.push('【启动事件概览】');
1663
+ startupAnalyses.forEach((analysis) => {
1664
+ const typeLabel = analysis.startupType === 'cold' ? '冷启动' :
1665
+ analysis.startupType === 'warm' ? '温启动' :
1666
+ analysis.startupType === 'hot' ? '热启动' : analysis.startupType;
1667
+ lines.push(` #${analysis.startupIndex}: ${analysis.packageName} (${typeLabel}) - ${analysis.durationMs}ms`);
1668
+ });
1669
+ lines.push('');
1670
+ // Detailed analysis for each startup
1671
+ startupAnalyses.forEach((analysis) => {
1672
+ lines.push(analysis.summary);
1673
+ });
1674
+ return lines.join('\n');
1675
+ }
1676
+ /**
1677
+ * 格式化 android_startup_processes 查询结果
1678
+ */
1679
+ formatStartupProcessesSummary(startups) {
1680
+ if (startups.length === 0)
1681
+ return '未找到启动数据';
1682
+ const lines = ['=== 应用启动分析 ===\n'];
1683
+ startups.forEach((s, idx) => {
1684
+ lines.push(`启动 #${idx + 1}:`);
1685
+ lines.push(` 包名: ${s.package || s.process_name || 'unknown'}`);
1686
+ lines.push(` 类型: ${s.startup_type || 'unknown'}`);
1687
+ lines.push(` 耗时: ${s.dur_ms?.toFixed?.(2) ?? s.dur_ms ?? 'N/A'} ms`);
1688
+ lines.push(` 开始时间: ${s.ts_ms?.toFixed?.(2) ?? s.ts_ms ?? 'N/A'} ms\n`);
1689
+ });
1690
+ return lines.join('\n');
1691
+ }
1692
+ /**
1693
+ * 格式化启动事件摘要(从 slice 表查询的数据)
1694
+ */
1695
+ formatStartupEventsSummary(events) {
1696
+ if (events.length === 0)
1697
+ return '未找到启动事件';
1698
+ const lines = ['=== 应用启动事件分析 ===\n'];
1699
+ // 按进程分组
1700
+ const byProcess = new Map();
1701
+ events.forEach(e => {
1702
+ const proc = e.process_name || 'unknown';
1703
+ if (!byProcess.has(proc))
1704
+ byProcess.set(proc, []);
1705
+ byProcess.get(proc).push(e);
1706
+ });
1707
+ byProcess.forEach((procEvents, procName) => {
1708
+ lines.push(`进程: ${procName}`);
1709
+ lines.push(` 事件数: ${procEvents.length}`);
1710
+ // 找关键生命周期事件
1711
+ const bindApp = procEvents.find(e => e.event_name?.includes('bindApplication'));
1712
+ const actStart = procEvents.find(e => e.event_name?.includes('activityStart'));
1713
+ const onCreate = procEvents.find(e => e.event_name?.includes('performCreate') || e.event_name?.includes('onCreate'));
1714
+ const onResume = procEvents.find(e => e.event_name?.includes('performResume') || e.event_name?.includes('onResume'));
1715
+ const firstFrame = procEvents.find(e => e.event_name?.includes('Choreographer') && e.event_name?.includes('doFrame'));
1716
+ if (bindApp)
1717
+ lines.push(` bindApplication: ${bindApp.dur_ms?.toFixed?.(2) ?? 'N/A'} ms`);
1718
+ if (actStart)
1719
+ lines.push(` activityStart: ${actStart.dur_ms?.toFixed?.(2) ?? 'N/A'} ms`);
1720
+ if (onCreate)
1721
+ lines.push(` onCreate/performCreate: ${onCreate.dur_ms?.toFixed?.(2) ?? 'N/A'} ms`);
1722
+ if (onResume)
1723
+ lines.push(` onResume/performResume: ${onResume.dur_ms?.toFixed?.(2) ?? 'N/A'} ms`);
1724
+ if (firstFrame)
1725
+ lines.push(` 首帧 (Choreographer): ${firstFrame.dur_ms?.toFixed?.(2) ?? 'N/A'} ms`);
1726
+ // 计算总耗时(从最早到最晚事件)
1727
+ if (procEvents.length > 1) {
1728
+ const sorted = [...procEvents].sort((a, b) => (a.ts_ms || 0) - (b.ts_ms || 0));
1729
+ const first = sorted[0];
1730
+ const last = sorted[sorted.length - 1];
1731
+ const totalDur = (last.ts_ms || 0) + (last.dur_ms || 0) - (first.ts_ms || 0);
1732
+ lines.push(` 总耗时(估算): ${totalDur.toFixed(2)} ms`);
1733
+ }
1734
+ lines.push('');
1735
+ });
1736
+ // 添加关键事件列表
1737
+ lines.push('关键启动事件:');
1738
+ const keyEvents = events.filter(e => e.event_name?.includes('bindApplication') ||
1739
+ e.event_name?.includes('activityStart') ||
1740
+ e.event_name?.includes('performCreate') ||
1741
+ e.event_name?.includes('performResume') ||
1742
+ e.event_name?.includes('inflate')).slice(0, 10);
1743
+ keyEvents.forEach(e => {
1744
+ lines.push(` - ${e.event_name}: ${e.dur_ms?.toFixed?.(2) ?? 'N/A'} ms @ ${e.ts_ms?.toFixed?.(2) ?? 'N/A'} ms`);
1745
+ });
1746
+ return lines.join('\n');
1747
+ }
1748
+ // 保留原有的 android_startups 查询逻辑(作为备用)
1749
+ async analyzeStartupLegacy(traceId, packageName) {
1750
+ let whereClause = '';
1751
+ if (packageName) {
1752
+ whereClause = `WHERE package GLOB '${packageName}*'`;
1753
+ }
1754
+ const sql = `
1755
+ SELECT
1756
+ startup_id,
1757
+ ts / 1e6 as ts_ms,
1758
+ dur / 1e6 as dur_ms,
1759
+ package,
1760
+ startup_type
1761
+ FROM android_startups
1762
+ ${whereClause}
1763
+ ORDER BY ts ASC
1764
+ `;
1765
+ const queryResult = await this.traceProcessor.query(traceId, sql);
1766
+ if (queryResult.error) {
1767
+ // android_startups table might not exist, try fallback
1768
+ console.log('[PerfettoSqlSkill] android_startups query failed, trying fallback...');
1769
+ return this.analyzeStartupFallback(traceId, packageName);
1770
+ }
1771
+ // If no results from android_startups, try fallback approach
1772
+ if (queryResult.rows.length === 0) {
1773
+ console.log('[PerfettoSqlSkill] android_startups returned 0 rows, trying fallback...');
1774
+ return this.analyzeStartupFallback(traceId, packageName);
1775
+ }
1776
+ // Convert rows (arrays) to objects for easier property access
1777
+ const startupObjects = rowsToObjects(queryResult.columns, queryResult.rows);
1778
+ const summary = this.formatStartupSummary(startupObjects);
1779
+ return {
1780
+ analysisType: 'startup',
1781
+ sql,
1782
+ rows: queryResult.rows,
1783
+ rowCount: queryResult.rows.length,
1784
+ summary,
1785
+ metrics: {
1786
+ totalStartups: queryResult.rows.length,
1787
+ coldStarts: startupObjects.filter((s) => s.startup_type === 'cold').length,
1788
+ warmStarts: startupObjects.filter((s) => s.startup_type === 'warm').length,
1789
+ hotStarts: startupObjects.filter((s) => s.startup_type === 'hot').length,
1790
+ },
1791
+ };
1792
+ }
1793
+ /**
1794
+ * Fallback startup analysis when android_startups is not available
1795
+ * Uses slice table to find activity lifecycle events
1796
+ */
1797
+ async analyzeStartupFallback(traceId, packageName) {
1798
+ // Try to find activity launch slices
1799
+ let processFilter = '';
1800
+ if (packageName) {
1801
+ processFilter = `AND process.name GLOB '${packageName}*'`;
1802
+ }
1803
+ // Look for common activity launch patterns
1804
+ // IMPORTANT: Use ASC to get earliest (startup) events first, not latest!
1805
+ const fallbackSql = `
1806
+ SELECT
1807
+ slice.name,
1808
+ slice.ts / 1e6 as ts_ms,
1809
+ slice.dur / 1e6 as dur_ms,
1810
+ process.name as process_name,
1811
+ thread.name as thread_name
1812
+ FROM slice
1813
+ JOIN thread_track ON slice.track_id = thread_track.id
1814
+ JOIN thread USING (utid)
1815
+ JOIN process USING (upid)
1816
+ WHERE (
1817
+ slice.name GLOB '*launching*'
1818
+ OR slice.name GLOB '*activityStart*'
1819
+ OR slice.name GLOB '*ActivityThread*'
1820
+ OR slice.name GLOB '*bindApplication*'
1821
+ OR slice.name GLOB '*Choreographer#doFrame*'
1822
+ OR slice.name = 'inflate'
1823
+ OR slice.name GLOB '*onCreate*'
1824
+ OR slice.name GLOB '*onStart*'
1825
+ OR slice.name GLOB '*onResume*'
1826
+ OR slice.name GLOB '*reportFullyDrawn*'
1827
+ OR slice.name GLOB '*performCreate*'
1828
+ OR slice.name GLOB '*traversal*'
1829
+ OR slice.name GLOB '*measure*'
1830
+ OR slice.name GLOB '*layout*'
1831
+ OR slice.name GLOB '*draw*'
1832
+ )
1833
+ ${processFilter}
1834
+ ORDER BY slice.ts ASC
1835
+ `;
1836
+ const fallbackResult = await this.traceProcessor.query(traceId, fallbackSql);
1837
+ if (fallbackResult.error || fallbackResult.rows.length === 0) {
1838
+ // Try even more generic approach - look for any slow slices on main thread
1839
+ const genericSql = `
1840
+ SELECT
1841
+ slice.name,
1842
+ slice.ts / 1e6 as ts_ms,
1843
+ slice.dur / 1e6 as dur_ms,
1844
+ process.name as process_name,
1845
+ thread.name as thread_name
1846
+ FROM slice
1847
+ JOIN thread_track ON slice.track_id = thread_track.id
1848
+ JOIN thread USING (utid)
1849
+ JOIN process USING (upid)
1850
+ WHERE slice.dur > 10000000 -- > 10ms
1851
+ AND thread.is_main_thread = 1
1852
+ ${processFilter}
1853
+ ORDER BY slice.ts ASC
1854
+ `;
1855
+ const genericResult = await this.traceProcessor.query(traceId, genericSql);
1856
+ if (genericResult.error) {
1857
+ return {
1858
+ analysisType: 'startup',
1859
+ sql: genericSql,
1860
+ rows: [],
1861
+ rowCount: 0,
1862
+ summary: `无法分析启动性能。此 trace 可能不包含 Android 应用启动数据。\n\n错误: ${genericResult.error}\n\n建议:\n- 确保 trace 包含应用启动过程\n- 尝试使用 "分析慢函数" 或 "分析主线程" 等其他分析方式`,
1863
+ };
1864
+ }
1865
+ if (genericResult.rows.length === 0) {
1866
+ return {
1867
+ analysisType: 'startup',
1868
+ sql: genericSql,
1869
+ rows: [],
1870
+ rowCount: 0,
1871
+ summary: `此 trace 中未找到启动相关数据。\n\n可能的原因:\n1. Trace 未捕获应用启动过程\n2. Trace 来自非 Android 平台\n3. 应用已经在后台运行\n\n建议:\n- 尝试其他分析类型,如 "分析慢函数" 或 "分析 CPU 使用"`,
1872
+ };
1873
+ }
1874
+ // Found some slow slices - convert to objects for easier access
1875
+ const columns = genericResult.columns;
1876
+ const sliceObjects = rowsToObjects(columns, genericResult.rows);
1877
+ return {
1878
+ analysisType: 'startup',
1879
+ sql: genericSql,
1880
+ rows: genericResult.rows,
1881
+ rowCount: genericResult.rows.length,
1882
+ summary: `未找到标准启动事件,但发现 ${genericResult.rows.length} 个主线程慢操作。\n\n最慢的操作:\n${sliceObjects.slice(0, 5).map((s) => `- ${s.name}: ${s.dur_ms?.toFixed?.(2) ?? s.dur_ms ?? 'N/A'}ms`).join('\n')}`,
1883
+ details: {
1884
+ method: 'fallback_slow_slices',
1885
+ note: 'android_startups 表为空,使用慢操作分析替代',
1886
+ },
1887
+ };
1888
+ }
1889
+ // Found activity launch related slices - convert to objects for easier access
1890
+ const columns = fallbackResult.columns;
1891
+ const sliceObjects = rowsToObjects(columns, fallbackResult.rows);
1892
+ return {
1893
+ analysisType: 'startup',
1894
+ sql: fallbackSql,
1895
+ rows: fallbackResult.rows,
1896
+ rowCount: fallbackResult.rows.length,
1897
+ summary: `找到 ${fallbackResult.rows.length} 个启动相关事件。\n\n主要事件:\n${sliceObjects.slice(0, 5).map((s) => `- ${s.name}: ${s.dur_ms?.toFixed?.(2) ?? s.dur_ms ?? 'N/A'}ms (${s.process_name})`).join('\n')}`,
1898
+ details: {
1899
+ method: 'fallback_activity_slices',
1900
+ note: 'android_startups 表为空,使用 Activity 生命周期事件分析',
1901
+ },
1902
+ };
1903
+ }
1904
+ /**
1905
+ * Analyze scrolling performance with multi-dimensional jank detection
1906
+ *
1907
+ * For Android 12+: Uses FrameTimeline tables (expected_frame_timeline_slice, actual_frame_timeline_slice)
1908
+ * For Android < 12: Falls back to combining Choreographer, RenderThread, SF, and Vsync analysis
1909
+ *
1910
+ * Based on:
1911
+ * - https://perfetto.dev/docs/data-sources/frametimeline
1912
+ * - android_performance.com systrace analysis series
1913
+ */
1914
+ async analyzeScrolling(traceId, packageName) {
1915
+ // First, check if FrameTimeline tables are available (Android 12+)
1916
+ const frameTimelineCheck = await this.traceProcessor.query(traceId, `
1917
+ SELECT COUNT(*) as count FROM sqlite_master
1918
+ WHERE name IN ('actual_frame_timeline_slice', 'expected_frame_timeline_slice')
1919
+ `);
1920
+ const hasFrameTimeline = frameTimelineCheck.rows &&
1921
+ frameTimelineCheck.rows.length > 0 &&
1922
+ frameTimelineCheck.rows[0][0] >= 2;
1923
+ if (hasFrameTimeline) {
1924
+ return this.analyzeScrollingWithFrameTimeline(traceId, packageName);
1925
+ }
1926
+ else {
1927
+ return this.analyzeScrollingLegacy(traceId, packageName);
1928
+ }
1929
+ }
1930
+ /**
1931
+ * Modern jank detection using FrameTimeline (Android 12+)
1932
+ * Uses actual_frame_timeline_slice and expected_frame_timeline_slice tables
1933
+ */
1934
+ async analyzeScrollingWithFrameTimeline(traceId, packageName) {
1935
+ let processFilter = '';
1936
+ if (packageName) {
1937
+ processFilter = `AND p.name GLOB '${packageName}*'`;
1938
+ }
1939
+ // FrameTimeline-based jank analysis
1940
+ // This is the official way to detect jank on Android 12+
1941
+ const sql = `
1942
+ WITH frame_timeline AS (
1943
+ SELECT
1944
+ a.id,
1945
+ a.ts,
1946
+ a.dur,
1947
+ a.upid,
1948
+ a.name,
1949
+ a.present_type,
1950
+ a.on_time_finish,
1951
+ a.gpu_composition,
1952
+ a.jank_type,
1953
+ p.name as process_name
1954
+ FROM actual_frame_timeline_slice a
1955
+ JOIN process p ON a.upid = p.upid
1956
+ WHERE 1=1
1957
+ ${processFilter}
1958
+ ),
1959
+ jank_analysis AS (
1960
+ SELECT
1961
+ *,
1962
+ dur > 16666666 as is_long_frame,
1963
+ CASE
1964
+ WHEN jank_type IS NOT NULL AND jank_type != 'None' THEN 1
1965
+ ELSE 0
1966
+ END as is_jank
1967
+ FROM frame_timeline
1968
+ )
1969
+ SELECT
1970
+ COUNT(*) as total_frames,
1971
+ SUM(is_jank) as jank_frames,
1972
+ SUM(is_long_frame) as long_frames,
1973
+ AVG(dur) / 1e6 as avg_frame_dur_ms,
1974
+ MIN(dur) / 1e6 as min_frame_dur_ms,
1975
+ MAX(dur) / 1e6 as max_frame_dur_ms,
1976
+ SUM(CASE WHEN on_time_finish = 0 THEN 1 ELSE 0 END) as missed_deadline_frames,
1977
+ SUM(CASE WHEN gpu_composition = 1 THEN 1 ELSE 0 END) as gpu_composition_frames,
1978
+ process_name
1979
+ FROM jank_analysis
1980
+ GROUP BY process_name
1981
+ `;
1982
+ const queryResult = await this.traceProcessor.query(traceId, sql);
1983
+ if (queryResult.error) {
1984
+ return {
1985
+ analysisType: 'scrolling_frametimeline',
1986
+ sql,
1987
+ rows: [],
1988
+ rowCount: 0,
1989
+ summary: `Error analyzing scrolling (FrameTimeline): ${queryResult.error}`,
1990
+ };
1991
+ }
1992
+ // Convert rows to objects for easier access
1993
+ const rowObjects = rowsToObjects(queryResult.columns, queryResult.rows);
1994
+ // Get jank type breakdown for more detailed analysis
1995
+ const jankTypeSql = `
1996
+ SELECT
1997
+ a.jank_type,
1998
+ COUNT(*) as count,
1999
+ AVG(a.dur) / 1e6 as avg_dur_ms,
2000
+ p.name as process_name
2001
+ FROM actual_frame_timeline_slice a
2002
+ JOIN process p ON a.upid = p.upid
2003
+ WHERE a.jank_type IS NOT NULL AND a.jank_type != 'None'
2004
+ ${processFilter}
2005
+ GROUP BY a.jank_type, p.name
2006
+ ORDER BY count DESC
2007
+ `;
2008
+ const jankTypeResult = await this.traceProcessor.query(traceId, jankTypeSql);
2009
+ const jankTypeRowObjects = rowsToObjects(jankTypeResult.columns, jankTypeResult.rows || []);
2010
+ // Add enhanced analysis for consecutive jank and frozen frames
2011
+ const enhancedAnalysis = await this.analyzeJankySessions(traceId, packageName);
2012
+ // Add frame stability analysis
2013
+ const stabilityAnalysis = await this.analyzeFrameStability(traceId, packageName);
2014
+ // Add root cause analysis for janky frames
2015
+ const rootCauseAnalysis = await this.analyzeJankRootCauses(traceId, packageName);
2016
+ const summary = this.formatFrameTimelineScrollingSummary(rowObjects, jankTypeRowObjects, enhancedAnalysis, stabilityAnalysis, rootCauseAnalysis);
2017
+ return {
2018
+ analysisType: 'scrolling_frametimeline',
2019
+ sql,
2020
+ rows: queryResult.rows,
2021
+ rowCount: queryResult.rows.length,
2022
+ summary,
2023
+ metrics: rowObjects.length > 0 ? rowObjects[0] : {},
2024
+ details: {
2025
+ jankBreakdown: jankTypeRowObjects,
2026
+ method: 'FrameTimeline (Android 12+)',
2027
+ enhancedAnalysis,
2028
+ stabilityAnalysis,
2029
+ rootCauseAnalysis,
2030
+ },
2031
+ };
2032
+ }
2033
+ /**
2034
+ * Analyze janky sessions (consecutive janky frames) and frozen frames
2035
+ * Helps identify patterns of continuous jank that are more noticeable to users
2036
+ */
2037
+ async analyzeJankySessions(traceId, packageName) {
2038
+ let processFilter = '';
2039
+ if (packageName) {
2040
+ processFilter = `AND p.name GLOB '${packageName}*'`;
2041
+ }
2042
+ // Analyze consecutive janky frames and frozen frames
2043
+ const sql = `
2044
+ WITH numbered_frames AS (
2045
+ SELECT
2046
+ a.id,
2047
+ a.ts,
2048
+ a.dur,
2049
+ a.jank_type,
2050
+ a.on_time_finish,
2051
+ p.name as process_name,
2052
+ ROW_NUMBER() OVER (PARTITION BY p.upid ORDER BY a.ts) as frame_num
2053
+ FROM actual_frame_timeline_slice a
2054
+ JOIN process p ON a.upid = p.upid
2055
+ WHERE 1=1
2056
+ ${processFilter}
2057
+ ),
2058
+ jank_groups AS (
2059
+ SELECT
2060
+ frame_num,
2061
+ dur,
2062
+ ts,
2063
+ process_name,
2064
+ jank_type,
2065
+ -- Identify start of jank group (previous frame was not janky)
2066
+ CASE
2067
+ WHEN jank_type IS NOT NULL AND jank_type != 'None'
2068
+ AND LAG(jank_type) OVER (ORDER BY frame_num) IS NULL
2069
+ OR (jank_type IS NOT NULL AND jank_type != 'None'
2070
+ AND LAG(jank_type) OVER (ORDER BY frame_num) = 'None')
2071
+ THEN 1
2072
+ ELSE 0
2073
+ END as is_jank_start
2074
+ FROM numbered_frames
2075
+ ),
2076
+ jank_sessions AS (
2077
+ SELECT
2078
+ frame_num,
2079
+ dur,
2080
+ ts,
2081
+ process_name,
2082
+ jank_type,
2083
+ SUM(is_jank_start) OVER (ORDER BY frame_num) as session_id
2084
+ FROM jank_groups
2085
+ WHERE jank_type IS NOT NULL AND jank_type != 'None'
2086
+ )
2087
+ SELECT
2088
+ MIN(frame_num) as start_frame,
2089
+ COUNT(*) as session_length,
2090
+ SUM(dur) / 1e6 as total_dur_ms,
2091
+ process_name,
2092
+ -- Determine severity based on length and duration
2093
+ CASE
2094
+ WHEN COUNT(*) >= 5 THEN 'severe'
2095
+ WHEN COUNT(*) >= 3 THEN 'moderate'
2096
+ ELSE 'mild'
2097
+ END as severity
2098
+ FROM jank_sessions
2099
+ GROUP BY session_id, process_name
2100
+ ORDER BY session_length DESC
2101
+ `;
2102
+ const jankSessionsResult = await this.traceProcessor.query(traceId, sql);
2103
+ const jankSessionsObjects = rowsToObjects(jankSessionsResult.columns || [], jankSessionsResult.rows || []);
2104
+ // Detect frozen frames (> 700ms - very long frames that freeze UI)
2105
+ const frozenFrameSql = `
2106
+ SELECT
2107
+ a.ts,
2108
+ a.dur / 1e6 as dur_ms,
2109
+ p.name as process_name,
2110
+ a.jank_type
2111
+ FROM actual_frame_timeline_slice a
2112
+ JOIN process p ON a.upid = p.upid
2113
+ WHERE a.dur > 700000000
2114
+ ${processFilter}
2115
+ ORDER BY a.ts ASC
2116
+ `;
2117
+ const frozenFrameResult = await this.traceProcessor.query(traceId, frozenFrameSql);
2118
+ const frozenFrameObjects = rowsToObjects(frozenFrameResult.columns || [], frozenFrameResult.rows || []);
2119
+ // Get consecutive jank statistics
2120
+ const consecutiveJankSql = `
2121
+ WITH janky_frames AS (
2122
+ SELECT
2123
+ a.ts,
2124
+ a.dur,
2125
+ p.name as process_name,
2126
+ CASE
2127
+ WHEN a.jank_type IS NOT NULL AND a.jank_type != 'None' THEN 1
2128
+ ELSE 0
2129
+ END as is_janky
2130
+ FROM actual_frame_timeline_slice a
2131
+ JOIN process p ON a.upid = p.upid
2132
+ WHERE 1=1
2133
+ ${processFilter}
2134
+ ORDER BY a.ts
2135
+ ),
2136
+ consecutive_groups AS (
2137
+ SELECT
2138
+ is_janky,
2139
+ SUM(CASE WHEN is_janky = 0 THEN 1 ELSE 0 END) OVER (ORDER BY ts) as group_id
2140
+ FROM janky_frames
2141
+ )
2142
+ SELECT
2143
+ COUNT(*) as total_janky_frames,
2144
+ MAX(cnt) as max_consecutive_jank
2145
+ FROM (
2146
+ SELECT COUNT(*) as cnt
2147
+ FROM consecutive_groups
2148
+ WHERE is_janky = 1
2149
+ GROUP BY group_id
2150
+ )
2151
+ `;
2152
+ const consecutiveResult = await this.traceProcessor.query(traceId, consecutiveJankSql);
2153
+ const consecutiveObjects = rowsToObjects(consecutiveResult.columns || [], consecutiveResult.rows || []);
2154
+ return {
2155
+ jankySessions: jankSessionsObjects.map((r) => ({
2156
+ startIdx: r.start_frame,
2157
+ length: r.session_length,
2158
+ severity: r.severity,
2159
+ totalDurMs: r.total_dur_ms,
2160
+ process: r.process_name,
2161
+ })),
2162
+ frozenFrames: frozenFrameObjects.map((r) => ({
2163
+ ts: r.ts,
2164
+ dur: r.dur_ms,
2165
+ process: r.process_name,
2166
+ jankType: r.jank_type,
2167
+ })),
2168
+ consecutiveJankCount: consecutiveObjects.length > 0
2169
+ ? consecutiveObjects[0].max_consecutive_jank || 0
2170
+ : 0,
2171
+ };
2172
+ }
2173
+ /**
2174
+ * Analyze frame rate stability and calculate smoothness metrics
2175
+ * Returns statistical analysis of frame timing consistency
2176
+ */
2177
+ async analyzeFrameStability(traceId, packageName) {
2178
+ let processFilter = '';
2179
+ if (packageName) {
2180
+ processFilter = `AND p.name GLOB '${packageName}*'`;
2181
+ }
2182
+ // Calculate frame time statistics with exact percentiles from ordered samples.
2183
+ const sql = `
2184
+ WITH frame_stats AS (
2185
+ SELECT
2186
+ a.dur / 1e6 as frame_time_ms,
2187
+ p.name as process_name
2188
+ FROM actual_frame_timeline_slice a
2189
+ JOIN process p ON a.upid = p.upid
2190
+ WHERE 1=1
2191
+ ${processFilter}
2192
+ ),
2193
+ ordered AS (
2194
+ SELECT
2195
+ frame_time_ms,
2196
+ ROW_NUMBER() OVER (ORDER BY frame_time_ms) as rn,
2197
+ COUNT(*) OVER () as total_count
2198
+ FROM frame_stats
2199
+ ),
2200
+ stats AS (
2201
+ SELECT
2202
+ AVG(frame_time_ms) as avg_ms,
2203
+ SUM(frame_time_ms * frame_time_ms) / COUNT(*) as avg_sq_ms,
2204
+ COUNT(*) as frame_count
2205
+ FROM frame_stats
2206
+ ),
2207
+ percentiles AS (
2208
+ SELECT
2209
+ MAX(CASE
2210
+ WHEN rn = CAST(ROUND((total_count - 1) * 0.50) AS INT) + 1 THEN frame_time_ms
2211
+ END) as p50_ms,
2212
+ MAX(CASE
2213
+ WHEN rn = CAST(ROUND((total_count - 1) * 0.95) AS INT) + 1 THEN frame_time_ms
2214
+ END) as p95_ms,
2215
+ MAX(CASE
2216
+ WHEN rn = CAST(ROUND((total_count - 1) * 0.99) AS INT) + 1 THEN frame_time_ms
2217
+ END) as p99_ms
2218
+ FROM ordered
2219
+ )
2220
+ SELECT
2221
+ s.avg_ms,
2222
+ CASE
2223
+ WHEN s.frame_count <= 1 THEN 0
2224
+ ELSE SQRT(MAX(s.avg_sq_ms - s.avg_ms * s.avg_ms, 0))
2225
+ END as std_dev_ms,
2226
+ s.frame_count,
2227
+ p.p50_ms,
2228
+ p.p95_ms,
2229
+ p.p99_ms
2230
+ FROM stats s
2231
+ CROSS JOIN percentiles p
2232
+ `;
2233
+ const result = await this.traceProcessor.query(traceId, sql);
2234
+ if (result.error || !result.rows || result.rows.length === 0) {
2235
+ return null;
2236
+ }
2237
+ const rowObjects = rowsToObjects(result.columns || [], result.rows);
2238
+ const r = rowObjects[0];
2239
+ const frameCount = Number(r.frame_count || 0);
2240
+ const avgMs = Number(r.avg_ms || 0);
2241
+ const stdDevMs = Number(r.std_dev_ms || 0);
2242
+ if (!Number.isFinite(avgMs) || frameCount <= 0 || avgMs <= 0) {
2243
+ return null;
2244
+ }
2245
+ const p50 = Number.isFinite(Number(r.p50_ms)) ? Number(r.p50_ms) : avgMs;
2246
+ const p95 = Number.isFinite(Number(r.p95_ms)) ? Number(r.p95_ms) : avgMs;
2247
+ const p99 = Number.isFinite(Number(r.p99_ms)) ? Number(r.p99_ms) : avgMs;
2248
+ // Calculate coefficient of variation (CV = std/mean)
2249
+ // Lower CV means more stable frame rate.
2250
+ const cv = avgMs > 0 ? (stdDevMs / avgMs) * 100 : 0;
2251
+ // Calculate stability score (0-100):
2252
+ // - penalize high variation
2253
+ // - penalize high-tail latency (p95)
2254
+ // - penalize mean frame time drifting above the 60fps budget
2255
+ let stabilityScore = 100;
2256
+ stabilityScore -= Math.min(cv * 1.8, 45);
2257
+ stabilityScore -= Math.min(Math.max(p95 - 16.6, 0) * 1.5, 35);
2258
+ stabilityScore -= Math.min(Math.max(avgMs - 16.6, 0) * 1.2, 20);
2259
+ stabilityScore = Math.max(0, Math.min(100, stabilityScore));
2260
+ return {
2261
+ avgFrameTimeMs: avgMs,
2262
+ stdDevMs: stdDevMs,
2263
+ coefficientOfVariation: cv,
2264
+ framePercentiles: {
2265
+ p50,
2266
+ p95,
2267
+ p99,
2268
+ },
2269
+ stabilityScore: Math.round(stabilityScore),
2270
+ };
2271
+ }
2272
+ /**
2273
+ * Analyze root cause for each janky frame
2274
+ * Identifies whether jank is caused by main thread, GPU, or system issues
2275
+ */
2276
+ async analyzeJankRootCauses(traceId, packageName) {
2277
+ let processFilter = '';
2278
+ if (packageName) {
2279
+ processFilter = `AND p.name GLOB '${packageName}*'`;
2280
+ }
2281
+ // Analyze janky frames with stricter root-cause attribution:
2282
+ // - Main-thread cause requires >=8ms overlap with frame window
2283
+ // - GPU cause relies on gpu_composition flag
2284
+ // - BufferQueue cause uses present_type/jank_type late indicators
2285
+ // - Otherwise fallback to system pipeline
2286
+ const sql = `
2287
+ WITH janky_frames AS (
2288
+ SELECT
2289
+ a.id,
2290
+ a.ts,
2291
+ a.dur,
2292
+ a.jank_type,
2293
+ a.gpu_composition,
2294
+ a.present_type,
2295
+ p.name as process_name,
2296
+ p.upid,
2297
+ p.pid,
2298
+ a.ts as frame_start_ns,
2299
+ a.ts + a.dur as frame_end_ns
2300
+ FROM actual_frame_timeline_slice a
2301
+ JOIN process p ON a.upid = p.upid
2302
+ WHERE a.jank_type IS NOT NULL AND a.jank_type != 'None'
2303
+ ${processFilter}
2304
+ ORDER BY a.ts
2305
+ ),
2306
+ main_thread_overlap AS (
2307
+ SELECT
2308
+ jf.id,
2309
+ COUNT(*) as overlapping_main_slice_count,
2310
+ SUM(
2311
+ CASE
2312
+ WHEN MIN(s.ts + s.dur, jf.frame_end_ns) > MAX(s.ts, jf.frame_start_ns)
2313
+ THEN MIN(s.ts + s.dur, jf.frame_end_ns) - MAX(s.ts, jf.frame_start_ns)
2314
+ ELSE 0
2315
+ END
2316
+ ) / 1e6 as main_overlap_ms,
2317
+ MAX(s.dur) / 1e6 as max_main_slice_ms
2318
+ FROM janky_frames jf
2319
+ JOIN thread t ON t.upid = jf.upid
2320
+ JOIN thread_track tt ON tt.utid = t.utid
2321
+ JOIN slice s ON s.track_id = tt.id
2322
+ WHERE s.dur > 0
2323
+ AND (COALESCE(t.is_main_thread, 0) = 1 OR t.tid = jf.pid OR LOWER(COALESCE(t.name, '')) = 'main')
2324
+ AND s.ts < jf.frame_end_ns
2325
+ AND s.ts + s.dur > jf.frame_start_ns
2326
+ GROUP BY jf.id
2327
+ ),
2328
+ classified AS (
2329
+ SELECT
2330
+ jf.ts,
2331
+ jf.jank_type,
2332
+ jf.gpu_composition,
2333
+ jf.present_type,
2334
+ COALESCE(mto.overlapping_main_slice_count, 0) as overlapping_main_slice_count,
2335
+ COALESCE(mto.main_overlap_ms, 0) as main_overlap_ms,
2336
+ COALESCE(mto.max_main_slice_ms, 0) as max_main_slice_ms,
2337
+ CASE
2338
+ WHEN COALESCE(mto.main_overlap_ms, 0) >= 8.0 THEN 'MainThread'
2339
+ WHEN jf.gpu_composition = 1 THEN 'GPU'
2340
+ WHEN LOWER(COALESCE(jf.present_type, '')) LIKE '%late%'
2341
+ OR LOWER(COALESCE(jf.present_type, '')) LIKE '%miss%'
2342
+ OR LOWER(COALESCE(jf.jank_type, '')) LIKE '%buffer%'
2343
+ THEN 'BufferQueue'
2344
+ ELSE 'System'
2345
+ END as root_cause,
2346
+ CASE
2347
+ WHEN COALESCE(mto.main_overlap_ms, 0) >= 8.0 THEN 'high'
2348
+ WHEN jf.gpu_composition = 1 THEN 'medium'
2349
+ WHEN LOWER(COALESCE(jf.present_type, '')) LIKE '%late%'
2350
+ OR LOWER(COALESCE(jf.present_type, '')) LIKE '%miss%'
2351
+ OR LOWER(COALESCE(jf.jank_type, '')) LIKE '%buffer%'
2352
+ THEN 'medium'
2353
+ ELSE 'low'
2354
+ END as confidence
2355
+ FROM janky_frames jf
2356
+ LEFT JOIN main_thread_overlap mto ON mto.id = jf.id
2357
+ )
2358
+ SELECT
2359
+ ts,
2360
+ jank_type,
2361
+ gpu_composition,
2362
+ present_type,
2363
+ overlapping_main_slice_count,
2364
+ main_overlap_ms,
2365
+ max_main_slice_ms,
2366
+ root_cause,
2367
+ confidence
2368
+ FROM classified
2369
+ ORDER BY ts ASC
2370
+ `;
2371
+ const result = await this.traceProcessor.query(traceId, sql);
2372
+ if (result.error || !result.rows || result.rows.length === 0) {
2373
+ return null;
2374
+ }
2375
+ // Convert rows to objects for easier access
2376
+ const rowObjects = rowsToObjects(result.columns, result.rows);
2377
+ // Count by root cause
2378
+ let mainThreadJank = 0;
2379
+ let gpuJank = 0;
2380
+ let sfJank = 0;
2381
+ let bufferJank = 0;
2382
+ const details = rowObjects.map((r) => {
2383
+ if (r.root_cause === 'MainThread')
2384
+ mainThreadJank++;
2385
+ else if (r.root_cause === 'GPU')
2386
+ gpuJank++;
2387
+ else if (r.root_cause === 'BufferQueue')
2388
+ bufferJank++;
2389
+ else
2390
+ sfJank++;
2391
+ return {
2392
+ frameTs: r.ts,
2393
+ jankType: r.jank_type,
2394
+ rootCause: r.root_cause,
2395
+ description: this.getRootCauseDescription(r.root_cause, r.jank_type),
2396
+ confidence: r.confidence || 'low',
2397
+ evidence: {
2398
+ mainOverlapMs: Number(r.main_overlap_ms || 0),
2399
+ maxMainSliceMs: Number(r.max_main_slice_ms || 0),
2400
+ presentType: String(r.present_type || ''),
2401
+ },
2402
+ };
2403
+ });
2404
+ return {
2405
+ mainThreadJank,
2406
+ gpuJank,
2407
+ sfJank,
2408
+ bufferJank,
2409
+ details,
2410
+ };
2411
+ }
2412
+ /**
2413
+ * Get human-readable description for root cause
2414
+ */
2415
+ getRootCauseDescription(rootCause, jankType) {
2416
+ const descriptions = {
2417
+ MainThread: 'Main thread blocked - too much work on UI thread',
2418
+ GPU: 'GPU composition fallback - too complex to draw with hardware overlay',
2419
+ BufferQueue: 'Buffer queue starvation - no buffer ready for composition',
2420
+ System: 'System-level delay - SurfaceFlinger or display pipeline issue',
2421
+ };
2422
+ const base = descriptions[rootCause] || 'Unknown cause';
2423
+ return `${base} (JankType: ${jankType})`;
2424
+ }
2425
+ /**
2426
+ * Legacy jank detection for Android < 12
2427
+ * Combines multiple data sources to detect real jank
2428
+ */
2429
+ async analyzeScrollingLegacy(traceId, packageName) {
2430
+ let processFilter = '';
2431
+ if (packageName) {
2432
+ processFilter = `AND p.name GLOB '${packageName}*'`;
2433
+ }
2434
+ // Multi-dimensional analysis combining:
2435
+ // 1. Choreographer doFrame (main thread frame timing)
2436
+ // 2. RenderThread execution
2437
+ // 3. SurfaceFlinger composition status
2438
+ // 4. BufferQueue buffer availability
2439
+ // 5. Vsync timing correlation
2440
+ const sql = `
2441
+ WITH choreographer_frames AS (
2442
+ -- Get all doFrame calls from Choreographer
2443
+ SELECT
2444
+ s.id,
2445
+ s.ts,
2446
+ s.dur,
2447
+ t.utid,
2448
+ p.name as process_name,
2449
+ p.upid
2450
+ FROM slice s
2451
+ JOIN thread_track tt ON s.track_id = tt.id
2452
+ JOIN thread t ON tt.utid = t.utid
2453
+ JOIN process p ON t.upid = p.upid
2454
+ WHERE s.name = 'doFrame'
2455
+ ${processFilter}
2456
+ ),
2457
+ render_thread_frames AS (
2458
+ -- Get RenderThread frame work
2459
+ SELECT
2460
+ s.ts,
2461
+ s.dur,
2462
+ s.name,
2463
+ p.upid
2464
+ FROM slice s
2465
+ JOIN thread_track tt ON s.track_id = tt.id
2466
+ JOIN thread t ON tt.utid = t.utid
2467
+ JOIN process p ON t.upid = p.upid
2468
+ WHERE s.name GLOB '*Draw*' OR s.name GLOB '*frame*'
2469
+ ${processFilter}
2470
+ ),
2471
+ sf_composition AS (
2472
+ -- SurfaceFlinger composition events
2473
+ SELECT
2474
+ s.ts,
2475
+ s.dur,
2476
+ s.name
2477
+ FROM slice s
2478
+ JOIN thread_track tt ON s.track_id = tt.id
2479
+ JOIN thread t ON tt.utid = t.utid
2480
+ JOIN process p ON t.upid = p.upid
2481
+ WHERE p.name = '/system/bin/surfaceflinger'
2482
+ AND (s.name GLOB '*composition*' OR s.name GLOB '*present*')
2483
+ ),
2484
+ frame_analysis AS (
2485
+ SELECT
2486
+ c.id,
2487
+ c.ts,
2488
+ c.dur as doframe_dur,
2489
+ c.process_name,
2490
+ c.upid,
2491
+ -- Frame is considered janky if:
2492
+ -- 1. doFrame duration > 16.6ms (missed vsync)
2493
+ -- 2. There's no corresponding SF composition within reasonable time
2494
+ CASE
2495
+ WHEN c.dur > 16666666 THEN 1
2496
+ ELSE 0
2497
+ END as doframe_missed,
2498
+ -- Check if SF composition happened for this frame window
2499
+ EXISTS(
2500
+ SELECT 1 FROM sf_composition sf
2501
+ WHERE sf.ts >= c.ts AND sf.ts <= c.ts + c.dur + 16000000
2502
+ ) as has_sf_composition
2503
+ FROM choreographer_frames c
2504
+ )
2505
+ SELECT
2506
+ COUNT(*) as total_frames,
2507
+ SUM(doframe_missed) as jank_frames,
2508
+ SUM(CASE WHEN has_sf_composition = 0 THEN 1 ELSE 0 END) as no_sf_composition_frames,
2509
+ AVG(doframe_dur) / 1e6 as avg_frame_dur_ms,
2510
+ MIN(doframe_dur) / 1e6 as min_frame_dur_ms,
2511
+ MAX(doframe_dur) / 1e6 as max_frame_dur_ms,
2512
+ process_name
2513
+ FROM frame_analysis
2514
+ GROUP BY process_name
2515
+ `;
2516
+ const queryResult = await this.traceProcessor.query(traceId, sql);
2517
+ if (queryResult.error) {
2518
+ return {
2519
+ analysisType: 'scrolling_legacy',
2520
+ sql,
2521
+ rows: [],
2522
+ rowCount: 0,
2523
+ summary: `Error analyzing scrolling (Legacy): ${queryResult.error}`,
2524
+ };
2525
+ }
2526
+ // Convert rows to objects for easier access
2527
+ const rowObjects = rowsToObjects(queryResult.columns, queryResult.rows);
2528
+ const summary = this.formatLegacyScrollingSummary(rowObjects);
2529
+ return {
2530
+ analysisType: 'scrolling_legacy',
2531
+ sql,
2532
+ rows: queryResult.rows,
2533
+ rowCount: queryResult.rows.length,
2534
+ summary,
2535
+ metrics: rowObjects.length > 0 ? rowObjects[0] : {},
2536
+ details: {
2537
+ method: 'Legacy multi-dimensional (Android < 12)',
2538
+ note: 'For accurate jank detection, use Android 12+ with FrameTimeline',
2539
+ },
2540
+ };
2541
+ }
2542
+ /**
2543
+ * Analyze memory usage
2544
+ * Based on: linux/memory/*.sql patterns
2545
+ */
2546
+ async analyzeMemory(traceId, packageName) {
2547
+ let processFilter = '';
2548
+ if (packageName) {
2549
+ processFilter = `AND p.name GLOB '${packageName}*'`;
2550
+ }
2551
+ // Find GC events and memory-related slices
2552
+ const sql = `
2553
+ SELECT
2554
+ s.name,
2555
+ COUNT(*) as count,
2556
+ AVG(s.dur) / 1e6 as avg_dur_ms,
2557
+ SUM(s.dur) / 1e6 as total_dur_ms,
2558
+ p.name as process_name
2559
+ FROM slice s
2560
+ JOIN thread_track tt ON s.track_id = tt.id
2561
+ JOIN thread t ON tt.utid = t.utid
2562
+ JOIN process p ON t.upid = p.upid
2563
+ WHERE s.name GLOB '*GC*' OR s.name GLOB '*allocation*' OR s.name GLOB '*Allocation*'
2564
+ ${processFilter}
2565
+ GROUP BY s.name, p.name
2566
+ ORDER BY count DESC
2567
+ `;
2568
+ const queryResult = await this.traceProcessor.query(traceId, sql);
2569
+ if (queryResult.error) {
2570
+ return {
2571
+ analysisType: 'memory',
2572
+ sql,
2573
+ rows: [],
2574
+ rowCount: 0,
2575
+ summary: `Error analyzing memory: ${queryResult.error}`,
2576
+ };
2577
+ }
2578
+ // Convert rows to objects for easier access
2579
+ const rowObjects = rowsToObjects(queryResult.columns, queryResult.rows);
2580
+ const summary = this.formatMemorySummary(rowObjects);
2581
+ return {
2582
+ analysisType: 'memory',
2583
+ sql,
2584
+ rows: queryResult.rows,
2585
+ rowCount: queryResult.rows.length,
2586
+ summary,
2587
+ };
2588
+ }
2589
+ /**
2590
+ * Analyze CPU utilization
2591
+ * Based on: linux/cpu/utilization/*.sql patterns
2592
+ */
2593
+ async analyzeCpu(traceId, packageName) {
2594
+ let processFilter = '';
2595
+ if (packageName) {
2596
+ processFilter = `AND p.name GLOB '${packageName}*'`;
2597
+ }
2598
+ // Thread state analysis for CPU time
2599
+ const sql = `
2600
+ SELECT
2601
+ t.name as thread_name,
2602
+ p.name as process_name,
2603
+ SUM(ts.dur) / 1e6 as total_dur_ms,
2604
+ SUM(CASE WHEN ts.state = 'R' THEN ts.dur ELSE 0 END) / 1e6 as running_dur_ms,
2605
+ SUM(CASE WHEN ts.state = 'S' THEN ts.dur ELSE 0 END) / 1e6 as sleeping_dur_ms,
2606
+ COUNT(*) as state_changes
2607
+ FROM thread_state ts
2608
+ JOIN thread t ON ts.utid = t.utid
2609
+ JOIN process p ON t.upid = p.upid
2610
+ WHERE 1=1
2611
+ ${processFilter}
2612
+ GROUP BY t.name, p.name
2613
+ ORDER BY total_dur_ms DESC
2614
+ `;
2615
+ const queryResult = await this.traceProcessor.query(traceId, sql);
2616
+ if (queryResult.error) {
2617
+ return {
2618
+ analysisType: 'cpu',
2619
+ sql,
2620
+ rows: [],
2621
+ rowCount: 0,
2622
+ summary: `Error analyzing CPU: ${queryResult.error}`,
2623
+ };
2624
+ }
2625
+ // Convert rows to objects for easier access
2626
+ const rowObjects = rowsToObjects(queryResult.columns, queryResult.rows);
2627
+ const summary = this.formatCpuSummary(rowObjects);
2628
+ return {
2629
+ analysisType: 'cpu',
2630
+ sql,
2631
+ rows: queryResult.rows,
2632
+ rowCount: queryResult.rows.length,
2633
+ summary,
2634
+ };
2635
+ }
2636
+ /**
2637
+ * Analyze SurfaceFlinger performance
2638
+ * Based on: android/surfaceflinger.sql, android_surfaceflinger.sql
2639
+ */
2640
+ async analyzeSurfaceFlinger(traceId) {
2641
+ // SurfaceFlinger frame analysis
2642
+ const sql = `
2643
+ SELECT
2644
+ COUNT(*) as total_frames,
2645
+ SUM(CAST(s.dur > 16666666 AS INT)) as missed_frames,
2646
+ AVG(s.dur) / 1e6 as avg_frame_dur_ms,
2647
+ p.name as process_name
2648
+ FROM slice s
2649
+ JOIN thread_track tt ON s.track_id = tt.id
2650
+ JOIN thread t ON tt.utid = t.utid
2651
+ JOIN process p ON t.upid = p.upid
2652
+ WHERE p.name = '/system/bin/surfaceflinger'
2653
+ AND (s.name GLOB '*frame*' OR s.name GLOB '*Frame*')
2654
+ `;
2655
+ const queryResult = await this.traceProcessor.query(traceId, sql);
2656
+ if (queryResult.error) {
2657
+ return {
2658
+ analysisType: 'surfaceflinger',
2659
+ sql,
2660
+ rows: [],
2661
+ rowCount: 0,
2662
+ summary: `Error analyzing SurfaceFlinger: ${queryResult.error}`,
2663
+ };
2664
+ }
2665
+ // Convert rows to objects for easier access
2666
+ const rowObjects = rowsToObjects(queryResult.columns, queryResult.rows);
2667
+ const summary = this.formatSurfaceFlingerSummary(rowObjects);
2668
+ return {
2669
+ analysisType: 'surfaceflinger',
2670
+ sql,
2671
+ rows: queryResult.rows,
2672
+ rowCount: queryResult.rows.length,
2673
+ summary,
2674
+ metrics: rowObjects.length > 0 ? rowObjects[0] : {},
2675
+ };
2676
+ }
2677
+ /**
2678
+ * Analyze Binder transactions
2679
+ * Based on: android/android_binder.sql
2680
+ */
2681
+ async analyzeBinder(traceId, packageName) {
2682
+ let processFilter = '';
2683
+ if (packageName) {
2684
+ processFilter = `AND p.name GLOB '${packageName}*'`;
2685
+ }
2686
+ const sql = `
2687
+ SELECT
2688
+ s.name,
2689
+ COUNT(*) as count,
2690
+ AVG(s.dur) / 1e6 as avg_dur_ms,
2691
+ MAX(s.dur) / 1e6 as max_dur_ms,
2692
+ SUM(s.dur) / 1e6 as total_dur_ms,
2693
+ p.name as process_name
2694
+ FROM slice s
2695
+ JOIN thread_track tt ON s.track_id = tt.id
2696
+ JOIN thread t ON tt.utid = t.utid
2697
+ JOIN process p ON t.upid = p.upid
2698
+ WHERE s.name GLOB '*Binder*'
2699
+ ${processFilter}
2700
+ GROUP BY s.name, p.name
2701
+ ORDER BY count DESC
2702
+ `;
2703
+ const queryResult = await this.traceProcessor.query(traceId, sql);
2704
+ if (queryResult.error) {
2705
+ return {
2706
+ analysisType: 'binder',
2707
+ sql,
2708
+ rows: [],
2709
+ rowCount: 0,
2710
+ summary: `Error analyzing Binder: ${queryResult.error}`,
2711
+ };
2712
+ }
2713
+ // Convert rows to objects for easier access
2714
+ const rowObjects = rowsToObjects(queryResult.columns, queryResult.rows);
2715
+ const summary = this.formatBinderSummary(rowObjects);
2716
+ return {
2717
+ analysisType: 'binder',
2718
+ sql,
2719
+ rows: queryResult.rows,
2720
+ rowCount: queryResult.rows.length,
2721
+ summary,
2722
+ };
2723
+ }
2724
+ /**
2725
+ * Generic analysis with template-based SQL generation
2726
+ */
2727
+ async analyzeGeneric(traceId, question, packageName) {
2728
+ // This would use AI to generate SQL from templates
2729
+ // For now, return a basic slice query
2730
+ const sql = `
2731
+ SELECT
2732
+ s.name,
2733
+ COUNT(*) as count,
2734
+ AVG(s.dur) / 1e6 as avg_dur_ms
2735
+ FROM slice s
2736
+ GROUP BY s.name
2737
+ ORDER BY count DESC
2738
+ `;
2739
+ const queryResult = await this.traceProcessor.query(traceId, sql);
2740
+ if (queryResult.error) {
2741
+ return {
2742
+ analysisType: 'generic',
2743
+ sql,
2744
+ rows: [],
2745
+ rowCount: 0,
2746
+ summary: `Error: ${queryResult.error}`,
2747
+ };
2748
+ }
2749
+ return {
2750
+ analysisType: 'generic',
2751
+ sql,
2752
+ rows: queryResult.rows,
2753
+ rowCount: queryResult.rows.length,
2754
+ summary: `Found ${queryResult.rows.length} slice types in trace`,
2755
+ };
2756
+ }
2757
+ /**
2758
+ * Analyze navigation/activity switching performance
2759
+ * Based on activity transition slice patterns
2760
+ */
2761
+ async analyzeNavigation(traceId, packageName) {
2762
+ let processFilter = '';
2763
+ if (packageName) {
2764
+ processFilter = `AND p.name GLOB '${packageName}*'`;
2765
+ }
2766
+ const sql = `
2767
+ SELECT
2768
+ s.name,
2769
+ COUNT(*) as count,
2770
+ AVG(s.dur) / 1e6 as avg_dur_ms,
2771
+ MIN(s.dur) / 1e6 as min_dur_ms,
2772
+ MAX(s.dur) / 1e6 as max_dur_ms,
2773
+ p.name as process_name
2774
+ FROM slice s
2775
+ JOIN thread_track tt ON s.track_id = tt.id
2776
+ JOIN thread t ON tt.utid = t.utid
2777
+ JOIN process p ON t.upid = p.upid
2778
+ WHERE s.name GLOB 'perform*' OR s.name GLOB '*Activity*'
2779
+ ${processFilter}
2780
+ GROUP BY s.name, p.name
2781
+ ORDER BY count DESC
2782
+ `;
2783
+ const queryResult = await this.traceProcessor.query(traceId, sql);
2784
+ if (queryResult.error) {
2785
+ return {
2786
+ analysisType: 'navigation',
2787
+ sql,
2788
+ rows: [],
2789
+ rowCount: 0,
2790
+ summary: `Error analyzing navigation: ${queryResult.error}`,
2791
+ };
2792
+ }
2793
+ const rowObjects = rowsToObjects(queryResult.columns, queryResult.rows);
2794
+ const summary = this.formatNavigationSummary(rowObjects);
2795
+ return {
2796
+ analysisType: 'navigation',
2797
+ sql,
2798
+ rows: rowObjects,
2799
+ rowCount: rowObjects.length,
2800
+ summary,
2801
+ };
2802
+ }
2803
+ /**
2804
+ * Analyze click/tap response performance
2805
+ * Based on input event latency patterns
2806
+ */
2807
+ async analyzeClickResponse(traceId, packageName) {
2808
+ let processFilter = '';
2809
+ if (packageName) {
2810
+ processFilter = `AND p.name GLOB '${packageName}*'`;
2811
+ }
2812
+ const sql = `
2813
+ SELECT
2814
+ s.name,
2815
+ COUNT(*) as count,
2816
+ AVG(s.dur) / 1e6 as avg_dur_ms,
2817
+ MIN(s.dur) / 1e6 as min_dur_ms,
2818
+ MAX(s.dur) / 1e6 as max_dur_ms,
2819
+ p.name as process_name
2820
+ FROM slice s
2821
+ JOIN thread_track tt ON s.track_id = tt.id
2822
+ JOIN thread t ON tt.utid = t.utid
2823
+ JOIN process p ON t.upid = p.upid
2824
+ WHERE s.name GLOB '*Input*' OR s.name GLOB '*Click*' OR s.name GLOB '*Touch*'
2825
+ ${processFilter}
2826
+ GROUP BY s.name, p.name
2827
+ ORDER BY avg_dur_ms DESC
2828
+ `;
2829
+ const queryResult = await this.traceProcessor.query(traceId, sql);
2830
+ if (queryResult.error) {
2831
+ return {
2832
+ analysisType: 'click_response',
2833
+ sql,
2834
+ rows: [],
2835
+ rowCount: 0,
2836
+ summary: `Error analyzing click response: ${queryResult.error}`,
2837
+ };
2838
+ }
2839
+ const rowObjects = rowsToObjects(queryResult.columns, queryResult.rows);
2840
+ const summary = this.formatClickResponseSummary(rowObjects);
2841
+ return {
2842
+ analysisType: 'click_response',
2843
+ sql,
2844
+ rows: rowObjects,
2845
+ rowCount: rowObjects.length,
2846
+ summary,
2847
+ };
2848
+ }
2849
+ /**
2850
+ * Analyze input events and latency
2851
+ * Based on input system tracking
2852
+ */
2853
+ async analyzeInput(traceId, packageName) {
2854
+ let processFilter = '';
2855
+ if (packageName) {
2856
+ processFilter = `AND p.name GLOB '${packageName}*'`;
2857
+ }
2858
+ const sql = `
2859
+ SELECT
2860
+ s.name,
2861
+ COUNT(*) as count,
2862
+ AVG(s.dur) / 1e6 as avg_dur_ms,
2863
+ SUM(s.dur) / 1e6 as total_dur_ms,
2864
+ p.name as process_name
2865
+ FROM slice s
2866
+ JOIN thread_track tt ON s.track_id = tt.id
2867
+ JOIN thread t ON tt.utid = t.utid
2868
+ JOIN process p ON t.upid = p.upid
2869
+ WHERE s.name GLOB '*input*' OR s.name GLOB '*Input*' OR s.name GLOB '*gesture*'
2870
+ ${processFilter}
2871
+ GROUP BY s.name, p.name
2872
+ ORDER BY count DESC
2873
+ `;
2874
+ const queryResult = await this.traceProcessor.query(traceId, sql);
2875
+ if (queryResult.error) {
2876
+ return {
2877
+ analysisType: 'input',
2878
+ sql,
2879
+ rows: [],
2880
+ rowCount: 0,
2881
+ summary: `Error analyzing input: ${queryResult.error}`,
2882
+ };
2883
+ }
2884
+ const rowObjects = rowsToObjects(queryResult.columns, queryResult.rows);
2885
+ const summary = this.formatInputSummary(rowObjects);
2886
+ return {
2887
+ analysisType: 'input',
2888
+ sql,
2889
+ rows: rowObjects,
2890
+ rowCount: rowObjects.length,
2891
+ summary,
2892
+ };
2893
+ }
2894
+ /**
2895
+ * Analyze buffer flow and queue
2896
+ * Based on GPU fence and buffer queue patterns
2897
+ */
2898
+ async analyzeBufferFlow(traceId) {
2899
+ const sql = `
2900
+ SELECT
2901
+ s.name,
2902
+ COUNT(*) as count,
2903
+ AVG(s.dur) / 1e6 as avg_dur_ms,
2904
+ SUM(s.dur) / 1e6 as total_dur_ms
2905
+ FROM slice s
2906
+ JOIN thread_track tt ON s.track_id = tt.id
2907
+ JOIN thread t ON tt.utid = t.utid
2908
+ JOIN process p ON t.upid = p.upid
2909
+ WHERE p.name = '/system/bin/surfaceflinger'
2910
+ AND (s.name GLOB '*fence*' OR s.name GLOB '*GPU*')
2911
+ GROUP BY s.name
2912
+ ORDER BY total_dur_ms DESC
2913
+ `;
2914
+ const queryResult = await this.traceProcessor.query(traceId, sql);
2915
+ if (queryResult.error) {
2916
+ return {
2917
+ analysisType: 'bufferflow',
2918
+ sql,
2919
+ rows: [],
2920
+ rowCount: 0,
2921
+ summary: `Error analyzing buffer flow: ${queryResult.error}`,
2922
+ };
2923
+ }
2924
+ const rowObjects = rowsToObjects(queryResult.columns, queryResult.rows);
2925
+ const summary = this.formatBufferFlowSummary(rowObjects);
2926
+ return {
2927
+ analysisType: 'bufferflow',
2928
+ sql,
2929
+ rows: rowObjects,
2930
+ rowCount: rowObjects.length,
2931
+ summary,
2932
+ };
2933
+ }
2934
+ /**
2935
+ * Analyze SystemServer performance
2936
+ * Based on system_server process patterns
2937
+ */
2938
+ async analyzeSystemServer(traceId) {
2939
+ const sql = `
2940
+ SELECT
2941
+ s.name,
2942
+ COUNT(*) as count,
2943
+ AVG(s.dur) / 1e6 as avg_dur_ms,
2944
+ MAX(s.dur) / 1e6 as max_dur_ms,
2945
+ SUM(s.dur) / 1e6 as total_dur_ms
2946
+ FROM slice s
2947
+ JOIN thread_track tt ON s.track_id = tt.id
2948
+ JOIN thread t ON tt.utid = t.utid
2949
+ JOIN process p ON t.upid = p.upid
2950
+ WHERE p.name = 'system_server'
2951
+ AND s.dur > 10000000
2952
+ GROUP BY s.name
2953
+ ORDER BY total_dur_ms DESC
2954
+ `;
2955
+ const queryResult = await this.traceProcessor.query(traceId, sql);
2956
+ if (queryResult.error) {
2957
+ return {
2958
+ analysisType: 'systemserver',
2959
+ sql,
2960
+ rows: [],
2961
+ rowCount: 0,
2962
+ summary: `Error analyzing SystemServer: ${queryResult.error}`,
2963
+ };
2964
+ }
2965
+ const rowObjects = rowsToObjects(queryResult.columns, queryResult.rows);
2966
+ const summary = this.formatSystemServerSummary(rowObjects);
2967
+ return {
2968
+ analysisType: 'systemserver',
2969
+ sql,
2970
+ rows: rowObjects,
2971
+ rowCount: rowObjects.length,
2972
+ summary,
2973
+ };
2974
+ }
2975
+ /**
2976
+ * Analyze slow functions (>16ms)
2977
+ * Detects functions that exceed the 16.6ms frame budget
2978
+ */
2979
+ async analyzeSlowFunctions(traceId, packageName) {
2980
+ let processFilter = '';
2981
+ if (packageName) {
2982
+ processFilter = `AND p.name GLOB '${packageName}*'`;
2983
+ }
2984
+ const frameTimelineCheck = await this.traceProcessor.query(traceId, `
2985
+ SELECT COUNT(*) as count FROM sqlite_master
2986
+ WHERE name = 'actual_frame_timeline_slice'
2987
+ `);
2988
+ const hasFrameTimeline = frameTimelineCheck.rows &&
2989
+ frameTimelineCheck.rows.length > 0 &&
2990
+ Number(frameTimelineCheck.rows[0][0] || 0) > 0;
2991
+ // Find long-running slices on app main thread only.
2992
+ // If FrameTimeline exists, also compute overlap with janky frames.
2993
+ const sql = hasFrameTimeline
2994
+ ? `
2995
+ WITH main_thread_slices AS (
2996
+ SELECT
2997
+ s.name as function_name,
2998
+ s.dur / 1e6 as dur_ms,
2999
+ s.ts / 1e6 as ts_ms,
3000
+ s.ts as slice_start_ns,
3001
+ s.ts + s.dur as slice_end_ns,
3002
+ t.name as thread_name,
3003
+ p.name as process_name,
3004
+ p.upid
3005
+ FROM slice s
3006
+ JOIN thread_track tt ON s.track_id = tt.id
3007
+ JOIN thread t ON tt.utid = t.utid
3008
+ JOIN process p ON t.upid = p.upid
3009
+ WHERE s.dur > 16000000
3010
+ ${processFilter}
3011
+ AND (COALESCE(t.is_main_thread, 0) = 1 OR t.tid = p.pid OR LOWER(COALESCE(t.name, '')) = 'main')
3012
+ ),
3013
+ janky_frames AS (
3014
+ SELECT
3015
+ a.upid,
3016
+ a.ts as frame_start_ns,
3017
+ a.ts + a.dur as frame_end_ns
3018
+ FROM actual_frame_timeline_slice a
3019
+ WHERE a.jank_type IS NOT NULL
3020
+ AND a.jank_type != 'None'
3021
+ ),
3022
+ overlap_annotated AS (
3023
+ SELECT
3024
+ mts.*,
3025
+ CASE
3026
+ WHEN EXISTS (
3027
+ SELECT 1
3028
+ FROM janky_frames jf
3029
+ WHERE jf.upid = mts.upid
3030
+ AND jf.frame_start_ns < mts.slice_end_ns
3031
+ AND jf.frame_end_ns > mts.slice_start_ns
3032
+ ) THEN 1
3033
+ ELSE 0
3034
+ END as overlaps_jank_frame,
3035
+ COALESCE((
3036
+ SELECT SUM(
3037
+ CASE
3038
+ WHEN MIN(mts.slice_end_ns, jf.frame_end_ns) > MAX(mts.slice_start_ns, jf.frame_start_ns)
3039
+ THEN MIN(mts.slice_end_ns, jf.frame_end_ns) - MAX(mts.slice_start_ns, jf.frame_start_ns)
3040
+ ELSE 0
3041
+ END
3042
+ )
3043
+ FROM janky_frames jf
3044
+ WHERE jf.upid = mts.upid
3045
+ AND jf.frame_start_ns < mts.slice_end_ns
3046
+ AND jf.frame_end_ns > mts.slice_start_ns
3047
+ ), 0) / 1e6 as overlap_jank_ms
3048
+ FROM main_thread_slices mts
3049
+ ),
3050
+ aggregated AS (
3051
+ SELECT
3052
+ function_name,
3053
+ process_name,
3054
+ COUNT(*) as count,
3055
+ AVG(dur_ms) as avg_dur_ms,
3056
+ MAX(dur_ms) as max_dur_ms,
3057
+ SUM(dur_ms) as total_dur_ms,
3058
+ SUM(overlaps_jank_frame) as jank_overlap_count,
3059
+ SUM(overlap_jank_ms) as total_jank_overlap_ms
3060
+ FROM overlap_annotated
3061
+ GROUP BY function_name, process_name
3062
+ )
3063
+ SELECT
3064
+ function_name,
3065
+ process_name,
3066
+ count,
3067
+ avg_dur_ms,
3068
+ max_dur_ms,
3069
+ total_dur_ms,
3070
+ jank_overlap_count,
3071
+ total_jank_overlap_ms
3072
+ FROM aggregated
3073
+ ORDER BY total_dur_ms DESC
3074
+ `
3075
+ : `
3076
+ WITH slow_functions AS (
3077
+ SELECT
3078
+ s.name as function_name,
3079
+ s.dur / 1e6 as dur_ms,
3080
+ s.ts / 1e6 as ts_ms,
3081
+ t.name as thread_name,
3082
+ p.name as process_name
3083
+ FROM slice s
3084
+ JOIN thread_track tt ON s.track_id = tt.id
3085
+ JOIN thread t ON tt.utid = t.utid
3086
+ JOIN process p ON t.upid = p.upid
3087
+ WHERE s.dur > 16000000
3088
+ ${processFilter}
3089
+ AND (COALESCE(t.is_main_thread, 0) = 1 OR t.tid = p.pid OR LOWER(COALESCE(t.name, '')) = 'main')
3090
+ ),
3091
+ aggregated AS (
3092
+ SELECT
3093
+ function_name,
3094
+ process_name,
3095
+ COUNT(*) as count,
3096
+ AVG(dur_ms) as avg_dur_ms,
3097
+ MAX(dur_ms) as max_dur_ms,
3098
+ SUM(dur_ms) as total_dur_ms,
3099
+ 0 as jank_overlap_count,
3100
+ 0 as total_jank_overlap_ms
3101
+ FROM slow_functions
3102
+ GROUP BY function_name, process_name
3103
+ )
3104
+ SELECT
3105
+ function_name,
3106
+ process_name,
3107
+ count,
3108
+ avg_dur_ms,
3109
+ max_dur_ms,
3110
+ total_dur_ms,
3111
+ jank_overlap_count,
3112
+ total_jank_overlap_ms
3113
+ FROM aggregated
3114
+ ORDER BY total_dur_ms DESC
3115
+ `;
3116
+ const queryResult = await this.traceProcessor.query(traceId, sql);
3117
+ if (queryResult.error) {
3118
+ return {
3119
+ analysisType: 'slow_functions',
3120
+ sql,
3121
+ rows: [],
3122
+ rowCount: 0,
3123
+ summary: `Error analyzing slow functions: ${queryResult.error}`,
3124
+ };
3125
+ }
3126
+ const rowObjects = rowsToObjects(queryResult.columns, queryResult.rows);
3127
+ // Get top slowest individual instances from main thread.
3128
+ const topSlowestSql = hasFrameTimeline
3129
+ ? `
3130
+ WITH janky_frames AS (
3131
+ SELECT
3132
+ a.upid,
3133
+ a.ts as frame_start_ns,
3134
+ a.ts + a.dur as frame_end_ns
3135
+ FROM actual_frame_timeline_slice a
3136
+ WHERE a.jank_type IS NOT NULL AND a.jank_type != 'None'
3137
+ )
3138
+ SELECT
3139
+ s.name as function_name,
3140
+ s.dur / 1e6 as dur_ms,
3141
+ s.ts / 1e6 as ts_ms,
3142
+ t.name as thread_name,
3143
+ p.name as process_name,
3144
+ CASE
3145
+ WHEN EXISTS (
3146
+ SELECT 1
3147
+ FROM janky_frames jf
3148
+ WHERE jf.upid = p.upid
3149
+ AND jf.frame_start_ns < s.ts + s.dur
3150
+ AND jf.frame_end_ns > s.ts
3151
+ ) THEN 1
3152
+ ELSE 0
3153
+ END as overlaps_jank_frame
3154
+ FROM slice s
3155
+ JOIN thread_track tt ON s.track_id = tt.id
3156
+ JOIN thread t ON tt.utid = t.utid
3157
+ JOIN process p ON t.upid = p.upid
3158
+ WHERE s.dur > 16000000
3159
+ ${processFilter}
3160
+ AND (COALESCE(t.is_main_thread, 0) = 1 OR t.tid = p.pid OR LOWER(COALESCE(t.name, '')) = 'main')
3161
+ ORDER BY s.ts ASC
3162
+ `
3163
+ : `
3164
+ SELECT
3165
+ s.name as function_name,
3166
+ s.dur / 1e6 as dur_ms,
3167
+ s.ts / 1e6 as ts_ms,
3168
+ t.name as thread_name,
3169
+ p.name as process_name,
3170
+ 0 as overlaps_jank_frame
3171
+ FROM slice s
3172
+ JOIN thread_track tt ON s.track_id = tt.id
3173
+ JOIN thread t ON tt.utid = t.utid
3174
+ JOIN process p ON t.upid = p.upid
3175
+ WHERE s.dur > 16000000
3176
+ ${processFilter}
3177
+ AND (COALESCE(t.is_main_thread, 0) = 1 OR t.tid = p.pid OR LOWER(COALESCE(t.name, '')) = 'main')
3178
+ ORDER BY s.ts ASC
3179
+ `;
3180
+ const topSlowestResult = await this.traceProcessor.query(traceId, topSlowestSql);
3181
+ const topSlowestObjects = rowsToObjects(topSlowestResult.columns || [], topSlowestResult.rows || []);
3182
+ const summary = this.formatSlowFunctionsSummary(rowObjects, topSlowestObjects);
3183
+ return {
3184
+ analysisType: 'slow_functions',
3185
+ sql,
3186
+ rows: rowObjects,
3187
+ rowCount: rowObjects.length,
3188
+ summary,
3189
+ metrics: {
3190
+ totalSlowFunctions: rowObjects.length,
3191
+ threshold: '16ms (long main-thread slice)',
3192
+ hasFrameTimeline: hasFrameTimeline ? 1 : 0,
3193
+ },
3194
+ details: {
3195
+ topSlowest: topSlowestObjects,
3196
+ },
3197
+ };
3198
+ }
3199
+ /**
3200
+ * Analyze network request performance
3201
+ * Uses network_traffic_slice table to track HTTP requests
3202
+ */
3203
+ async analyzeNetwork(traceId, packageName) {
3204
+ let processFilter = '';
3205
+ if (packageName) {
3206
+ processFilter = `AND p.name GLOB '${packageName}*'`;
3207
+ }
3208
+ const sql = `
3209
+ SELECT
3210
+ net.name,
3211
+ net.slice_id,
3212
+ net.ts / 1e6 as ts_ms,
3213
+ net.dur / 1e6 as dur_ms,
3214
+ t.name as thread_name,
3215
+ p.name as process_name
3216
+ FROM network_traffic_slice net
3217
+ JOIN thread_track tt ON net.track_id = tt.id
3218
+ JOIN thread t ON tt.utid = t.utid
3219
+ JOIN process p ON t.upid = p.upid
3220
+ WHERE 1=1
3221
+ ${processFilter}
3222
+ ORDER BY net.ts ASC
3223
+ `;
3224
+ const queryResult = await this.traceProcessor.query(traceId, sql);
3225
+ if (queryResult.error) {
3226
+ return {
3227
+ analysisType: 'network',
3228
+ sql,
3229
+ rows: [],
3230
+ rowCount: 0,
3231
+ summary: `Error analyzing network traffic: ${queryResult.error}`,
3232
+ };
3233
+ }
3234
+ const rowObjects = rowsToObjects(queryResult.columns, queryResult.rows);
3235
+ // Get aggregate statistics
3236
+ const statsSql = `
3237
+ SELECT
3238
+ COUNT(*) as total_requests,
3239
+ AVG(net.dur) / 1e6 as avg_dur_ms,
3240
+ MAX(net.dur) / 1e6 as max_dur_ms,
3241
+ MIN(net.dur) / 1e6 as min_dur_ms,
3242
+ SUM(CASE WHEN net.dur > 1000000000 THEN 1 ELSE 0 END) as slow_requests
3243
+ FROM network_traffic_slice net
3244
+ JOIN thread_track tt ON net.track_id = tt.id
3245
+ JOIN thread t ON tt.utid = t.utid
3246
+ JOIN process p ON t.upid = p.upid
3247
+ WHERE 1=1
3248
+ ${processFilter}
3249
+ `;
3250
+ const statsResult = await this.traceProcessor.query(traceId, statsSql);
3251
+ const statsObjects = rowsToObjects(statsResult.columns || [], statsResult.rows || []);
3252
+ const stats = statsObjects.length > 0 ? statsObjects[0] : null;
3253
+ const summary = this.formatNetworkSummary(rowObjects, stats);
3254
+ return {
3255
+ analysisType: 'network',
3256
+ sql,
3257
+ rows: rowObjects,
3258
+ rowCount: rowObjects.length,
3259
+ summary,
3260
+ metrics: stats ? {
3261
+ totalRequests: stats.total_requests,
3262
+ avgDurationMs: stats.avg_dur_ms,
3263
+ maxDurationMs: stats.max_dur_ms,
3264
+ slowRequests: stats.slow_requests,
3265
+ } : undefined,
3266
+ };
3267
+ }
3268
+ /**
3269
+ * Analyze database query performance
3270
+ * Uses slice table to find SQLite/Room operations
3271
+ */
3272
+ async analyzeDatabase(traceId, packageName) {
3273
+ let processFilter = '';
3274
+ if (packageName) {
3275
+ processFilter = `AND p.name GLOB '${packageName}*'`;
3276
+ }
3277
+ const sql = `
3278
+ SELECT
3279
+ s.name,
3280
+ s.ts / 1e6 as ts_ms,
3281
+ s.dur / 1e6 as dur_ms,
3282
+ t.name as thread_name,
3283
+ p.name as process_name
3284
+ FROM slice s
3285
+ JOIN thread_track tt ON s.track_id = tt.id
3286
+ JOIN thread t ON tt.utid = t.utid
3287
+ JOIN process p ON t.upid = p.upid
3288
+ WHERE s.name GLOB '*sqlite*%' OR s.name GLOB '*room*%'
3289
+ ${processFilter}
3290
+ ORDER BY s.ts ASC
3291
+ `;
3292
+ const queryResult = await this.traceProcessor.query(traceId, sql);
3293
+ if (queryResult.error) {
3294
+ return {
3295
+ analysisType: 'database',
3296
+ sql,
3297
+ rows: [],
3298
+ rowCount: 0,
3299
+ summary: `Error analyzing database queries: ${queryResult.error}`,
3300
+ };
3301
+ }
3302
+ const rowObjects = rowsToObjects(queryResult.columns, queryResult.rows);
3303
+ // Get aggregate statistics by query type
3304
+ const statsSql = `
3305
+ SELECT
3306
+ COUNT(*) as total_queries,
3307
+ AVG(s.dur) / 1e6 as avg_dur_ms,
3308
+ MAX(s.dur) / 1e6 as max_dur_ms,
3309
+ SUM(CASE WHEN s.dur > 16000000 THEN 1 ELSE 0 END) as slow_queries
3310
+ FROM slice s
3311
+ JOIN thread_track tt ON s.track_id = tt.id
3312
+ JOIN thread t ON tt.utid = t.utid
3313
+ JOIN process p ON t.upid = p.upid
3314
+ WHERE s.name GLOB '*sqlite*%' OR s.name GLOB '*room*%'
3315
+ ${processFilter}
3316
+ `;
3317
+ const statsResult = await this.traceProcessor.query(traceId, statsSql);
3318
+ const statsObjects = rowsToObjects(statsResult.columns || [], statsResult.rows || []);
3319
+ const stats = statsObjects.length > 0 ? statsObjects[0] : null;
3320
+ const summary = this.formatDatabaseSummary(rowObjects, stats);
3321
+ return {
3322
+ analysisType: 'database',
3323
+ sql,
3324
+ rows: rowObjects,
3325
+ rowCount: rowObjects.length,
3326
+ summary,
3327
+ metrics: stats ? {
3328
+ totalQueries: stats.total_queries,
3329
+ avgDurationMs: stats.avg_dur_ms,
3330
+ maxDurationMs: stats.max_dur_ms,
3331
+ slowQueries: stats.slow_queries,
3332
+ } : undefined,
3333
+ };
3334
+ }
3335
+ /**
3336
+ * Analyze file I/O performance
3337
+ * Uses slice table to find read/write operations
3338
+ */
3339
+ async analyzeFileIO(traceId, packageName) {
3340
+ let processFilter = '';
3341
+ if (packageName) {
3342
+ processFilter = `AND p.name GLOB '${packageName}*'`;
3343
+ }
3344
+ const sql = `
3345
+ SELECT
3346
+ s.name,
3347
+ s.ts / 1e6 as ts_ms,
3348
+ s.dur / 1e6 as dur_ms,
3349
+ t.name as thread_name,
3350
+ p.name as process_name
3351
+ FROM slice s
3352
+ JOIN thread_track tt ON s.track_id = tt.id
3353
+ JOIN thread t ON tt.utid = t.utid
3354
+ JOIN process p ON t.upid = p.upid
3355
+ WHERE s.name GLOB '*read*%' OR s.name GLOB '*write*%' OR s.name GLOB '*fs_*%'
3356
+ ${processFilter}
3357
+ ORDER BY s.ts ASC
3358
+ `;
3359
+ const queryResult = await this.traceProcessor.query(traceId, sql);
3360
+ if (queryResult.error) {
3361
+ return {
3362
+ analysisType: 'file_io',
3363
+ sql,
3364
+ rows: [],
3365
+ rowCount: 0,
3366
+ summary: `Error analyzing file I/O: ${queryResult.error}`,
3367
+ };
3368
+ }
3369
+ const rowObjects = rowsToObjects(queryResult.columns, queryResult.rows);
3370
+ // Get aggregate statistics
3371
+ const statsSql = `
3372
+ SELECT
3373
+ COUNT(*) as total_operations,
3374
+ AVG(s.dur) / 1e6 as avg_dur_ms,
3375
+ MAX(s.dur) / 1e6 as max_dur_ms,
3376
+ SUM(CASE WHEN s.name GLOB '*read*' THEN 1 ELSE 0 END) as read_ops,
3377
+ SUM(CASE WHEN s.name GLOB '*write*' THEN 1 ELSE 0 END) as write_ops
3378
+ FROM slice s
3379
+ JOIN thread_track tt ON s.track_id = tt.id
3380
+ JOIN thread t ON tt.utid = t.utid
3381
+ JOIN process p ON t.upid = p.upid
3382
+ WHERE s.name GLOB '*read*%' OR s.name GLOB '*write*%' OR s.name GLOB '*fs_*%'
3383
+ ${processFilter}
3384
+ `;
3385
+ const statsResult = await this.traceProcessor.query(traceId, statsSql);
3386
+ const statsObjects = rowsToObjects(statsResult.columns || [], statsResult.rows || []);
3387
+ const stats = statsObjects.length > 0 ? statsObjects[0] : null;
3388
+ const summary = this.formatFileIOSummary(rowObjects, stats);
3389
+ return {
3390
+ analysisType: 'file_io',
3391
+ sql,
3392
+ rows: rowObjects,
3393
+ rowCount: rowObjects.length,
3394
+ summary,
3395
+ metrics: stats ? {
3396
+ totalOperations: stats.total_operations,
3397
+ avgDurationMs: stats.avg_dur_ms,
3398
+ maxDurationMs: stats.max_dur_ms,
3399
+ readOps: stats.read_ops,
3400
+ writeOps: stats.write_ops,
3401
+ } : undefined,
3402
+ };
3403
+ }
3404
+ // ========================================================================
3405
+ // Summary Formatting Methods
3406
+ // ========================================================================
3407
+ formatStartupSummary(startups) {
3408
+ if (startups.length === 0) {
3409
+ return 'No startup events found in trace.';
3410
+ }
3411
+ const byType = {};
3412
+ let totalDur = 0;
3413
+ for (const startup of startups) {
3414
+ byType[startup.startup_type] = (byType[startup.startup_type] || 0) + 1;
3415
+ totalDur += startup.dur_ms;
3416
+ }
3417
+ const avgDur = totalDur / startups.length;
3418
+ let summary = `Found ${startups.length} startup events. `;
3419
+ if (byType.cold)
3420
+ summary += `${byType.cold} cold, `;
3421
+ if (byType.warm)
3422
+ summary += `${byType.warm} warm, `;
3423
+ if (byType.hot)
3424
+ summary += `${byType.hot} hot. `;
3425
+ summary += `Average duration: ${avgDur.toFixed(2)}ms.`;
3426
+ return summary;
3427
+ }
3428
+ formatScrollingSummary(rows) {
3429
+ if (rows.length === 0) {
3430
+ return 'No frame data found in trace.';
3431
+ }
3432
+ const r = rows[0];
3433
+ const jankPercent = r.total_frames > 0 ? ((r.jank_frames / r.total_frames) * 100).toFixed(1) : '0';
3434
+ const fps = r.avg_frame_dur_ms > 0 ? (1000 / r.avg_frame_dur_ms).toFixed(1) : 'N/A';
3435
+ return `Analyzed ${r.total_frames} frames. ` +
3436
+ `Jank frames: ${r.jank_frames} (${jankPercent}%). ` +
3437
+ `Average FPS: ${fps}. ` +
3438
+ `Frame duration: ${r.avg_frame_dur_ms?.toFixed(2)}ms avg, ` +
3439
+ `${r.min_frame_dur_ms?.toFixed(2)}ms min, ` +
3440
+ `${r.max_frame_dur_ms?.toFixed(2)}ms max.`;
3441
+ }
3442
+ /**
3443
+ * Format summary for FrameTimeline-based scrolling analysis (Android 12+)
3444
+ */
3445
+ formatFrameTimelineScrollingSummary(rows, jankTypeRows, enhancedAnalysis, stabilityAnalysis, rootCauseAnalysis) {
3446
+ if (rows.length === 0) {
3447
+ return 'No FrameTimeline data found in trace. Make sure FrameTimeline is enabled (Android 12+).';
3448
+ }
3449
+ const r = rows[0];
3450
+ const jankPercent = r.total_frames > 0 ? ((r.jank_frames / r.total_frames) * 100).toFixed(1) : '0';
3451
+ const fps = r.avg_frame_dur_ms > 0 ? (1000 / r.avg_frame_dur_ms).toFixed(1) : 'N/A';
3452
+ let summary = `[FrameTimeline Analysis - Android 12+] `;
3453
+ summary += `Analyzed ${r.total_frames} frames for ${r.process_name || 'app'}. `;
3454
+ summary += `Jank frames: ${r.jank_frames} (${jankPercent}%). `;
3455
+ if (r.missed_deadline_frames > 0) {
3456
+ summary += `Missed deadline: ${r.missed_deadline_frames} frames. `;
3457
+ }
3458
+ if (r.gpu_composition_frames > 0) {
3459
+ const gpuPercent = ((r.gpu_composition_frames / r.total_frames) * 100).toFixed(1);
3460
+ summary += `GPU composition: ${r.gpu_composition_frames} frames (${gpuPercent}% - indicates potential jank). `;
3461
+ }
3462
+ summary += `Average FPS: ${fps}. `;
3463
+ // Add stability score if available
3464
+ if (stabilityAnalysis) {
3465
+ summary += `\n\n[Stability Analysis] `;
3466
+ summary += `Score: ${stabilityAnalysis.stabilityScore}/100. `;
3467
+ summary += `Frame time: ${stabilityAnalysis.avgFrameTimeMs.toFixed(2)}ms avg, `;
3468
+ summary += `±${stabilityAnalysis.stdDevMs.toFixed(2)}ms (CV: ${stabilityAnalysis.coefficientOfVariation.toFixed(1)}%). `;
3469
+ summary += `P95: ${stabilityAnalysis.framePercentiles.p95.toFixed(1)}ms, P99: ${stabilityAnalysis.framePercentiles.p99.toFixed(1)}ms.`;
3470
+ }
3471
+ // Add jank type breakdown if available
3472
+ if (jankTypeRows.length > 0) {
3473
+ summary += `\n\n[Jank Type Breakdown] `;
3474
+ const jankTypes = jankTypeRows.map((jt) => {
3475
+ const typeName = jt.jank_type || 'Unknown';
3476
+ return `${typeName} (${jt.count})`;
3477
+ }).join(', ');
3478
+ summary += jankTypes;
3479
+ }
3480
+ // Add root cause analysis if available
3481
+ if (rootCauseAnalysis) {
3482
+ summary += `\n\n[Root Cause Analysis] `;
3483
+ const causes = [];
3484
+ if (rootCauseAnalysis.mainThreadJank > 0) {
3485
+ causes.push(`MainThread: ${rootCauseAnalysis.mainThreadJank}`);
3486
+ }
3487
+ if (rootCauseAnalysis.gpuJank > 0) {
3488
+ causes.push(`GPU: ${rootCauseAnalysis.gpuJank}`);
3489
+ }
3490
+ if (rootCauseAnalysis.bufferJank > 0) {
3491
+ causes.push(`BufferQueue: ${rootCauseAnalysis.bufferJank}`);
3492
+ }
3493
+ if (rootCauseAnalysis.sfJank > 0) {
3494
+ causes.push(`System: ${rootCauseAnalysis.sfJank}`);
3495
+ }
3496
+ if (causes.length > 0) {
3497
+ summary += causes.join(', ');
3498
+ }
3499
+ }
3500
+ // Add enhanced analysis if available
3501
+ if (enhancedAnalysis) {
3502
+ summary += `\n\n[Enhanced Analysis] `;
3503
+ if (enhancedAnalysis.consecutiveJankCount > 0) {
3504
+ summary += `Max consecutive janky frames: ${enhancedAnalysis.consecutiveJankCount}. `;
3505
+ }
3506
+ if (enhancedAnalysis.jankySessions && enhancedAnalysis.jankySessions.length > 0) {
3507
+ summary += `Janky sessions: ${enhancedAnalysis.jankySessions.length}`;
3508
+ const severeSessions = enhancedAnalysis.jankySessions.filter(s => s.severity === 'severe');
3509
+ if (severeSessions.length > 0) {
3510
+ summary += ` (Severe: ${severeSessions.length}, Max length: ${Math.max(...enhancedAnalysis.jankySessions.map(s => s.length))} frames). `;
3511
+ }
3512
+ }
3513
+ if (enhancedAnalysis.frozenFrames && enhancedAnalysis.frozenFrames.length > 0) {
3514
+ summary += `Frozen frames (>700ms): ${enhancedAnalysis.frozenFrames.length}`;
3515
+ summary += `, Longest: ${Math.max(...enhancedAnalysis.frozenFrames.map(f => f.dur)).toFixed(0)}ms.`;
3516
+ }
3517
+ }
3518
+ return summary;
3519
+ }
3520
+ /**
3521
+ * Format summary for legacy scrolling analysis (Android < 12)
3522
+ */
3523
+ formatLegacyScrollingSummary(rows) {
3524
+ if (rows.length === 0) {
3525
+ return 'No frame data found in trace. Ensure Choreographer doFrame events are present.';
3526
+ }
3527
+ const r = rows[0];
3528
+ const jankPercent = r.total_frames > 0 ? ((r.jank_frames / r.total_frames) * 100).toFixed(1) : '0';
3529
+ const fps = r.avg_frame_dur_ms > 0 ? (1000 / r.avg_frame_dur_ms).toFixed(1) : 'N/A';
3530
+ let summary = `[Legacy Multi-dimensional Analysis - Android < 12] `;
3531
+ summary += `Analyzed ${r.total_frames} frames for ${r.process_name || 'app'}. `;
3532
+ summary += `Frames with missed doFrame: ${r.jank_frames} (${jankPercent}%). `;
3533
+ if (r.no_sf_composition_frames > 0) {
3534
+ summary += `Frames without SF composition: ${r.no_sf_composition_frames} (indicates buffer queue issues). `;
3535
+ }
3536
+ summary += `Average FPS: ${fps}. `;
3537
+ summary += `Frame duration: ${r.avg_frame_dur_ms?.toFixed(2)}ms avg, ` +
3538
+ `${r.min_frame_dur_ms?.toFixed(2)}ms min, ` +
3539
+ `${r.max_frame_dur_ms?.toFixed(2)}ms max.`;
3540
+ summary += `\n\nNote: For accurate jank detection with FrameTimeline, use Android 12+. ` +
3541
+ `This legacy analysis combines doFrame timing and SurfaceFlinger composition status.`;
3542
+ return summary;
3543
+ }
3544
+ formatMemorySummary(rows) {
3545
+ if (rows.length === 0) {
3546
+ return 'No memory events found in trace.';
3547
+ }
3548
+ let totalGcTime = 0;
3549
+ let gcCount = 0;
3550
+ for (const row of rows) {
3551
+ if (row.name?.toLowerCase().includes('gc')) {
3552
+ gcCount += row.count;
3553
+ totalGcTime += row.total_dur_ms;
3554
+ }
3555
+ }
3556
+ return `Found ${rows.length} memory-related event types. ` +
3557
+ `GC events: ${gcCount}, total GC time: ${totalGcTime.toFixed(2)}ms.`;
3558
+ }
3559
+ formatCpuSummary(rows) {
3560
+ if (rows.length === 0) {
3561
+ return 'No CPU data found in trace.';
3562
+ }
3563
+ const topThread = rows[0];
3564
+ const cpuPercent = topThread.total_dur_ms > 0
3565
+ ? ((topThread.running_dur_ms / topThread.total_dur_ms) * 100).toFixed(1)
3566
+ : '0';
3567
+ return `Analyzed ${rows.length} threads. ` +
3568
+ `Top thread: ${topThread.thread_name} (${topThread.process_name}). ` +
3569
+ `CPU utilization: ${cpuPercent}%.`;
3570
+ }
3571
+ formatSurfaceFlingerSummary(rows) {
3572
+ if (rows.length === 0) {
3573
+ return 'No SurfaceFlinger data found in trace.';
3574
+ }
3575
+ const r = rows[0];
3576
+ const jankPercent = r.total_frames > 0 ? ((r.missed_frames / r.total_frames) * 100).toFixed(1) : '0';
3577
+ return `SurfaceFlinger: ${r.total_frames} frames, ` +
3578
+ `${r.missed_frames} missed (${jankPercent}% jank). ` +
3579
+ `Average frame duration: ${r.avg_frame_dur_ms?.toFixed(2)}ms.`;
3580
+ }
3581
+ formatBinderSummary(rows) {
3582
+ if (rows.length === 0) {
3583
+ return 'No Binder transactions found in trace.';
3584
+ }
3585
+ const totalTxns = rows.reduce((sum, r) => sum + r.count, 0);
3586
+ const avgDur = rows.reduce((sum, r) => sum + r.avg_dur_ms * r.count, 0) / totalTxns;
3587
+ return `Found ${totalTxns} Binder transactions across ${rows.length} types. ` +
3588
+ `Average duration: ${avgDur?.toFixed(2)}ms.`;
3589
+ }
3590
+ formatNavigationSummary(rows) {
3591
+ if (rows.length === 0) {
3592
+ return 'No navigation events found in trace.';
3593
+ }
3594
+ const totalNavs = rows.reduce((sum, r) => sum + r.count, 0);
3595
+ const avgDur = rows.reduce((sum, r) => sum + r.avg_dur_ms * r.count, 0) / totalNavs;
3596
+ return `Found ${totalNavs} navigation/transition events across ${rows.length} types. ` +
3597
+ `Average duration: ${avgDur?.toFixed(2)}ms.`;
3598
+ }
3599
+ formatClickResponseSummary(rows) {
3600
+ if (rows.length === 0) {
3601
+ return 'No click/touch events found in trace.';
3602
+ }
3603
+ const totalClicks = rows.reduce((sum, r) => sum + r.count, 0);
3604
+ const avgDur = rows.reduce((sum, r) => sum + r.avg_dur_ms * r.count, 0) / totalClicks;
3605
+ return `Found ${totalClicks} click/touch events across ${rows.length} types. ` +
3606
+ `Average response time: ${avgDur?.toFixed(2)}ms.`;
3607
+ }
3608
+ formatInputSummary(rows) {
3609
+ if (rows.length === 0) {
3610
+ return 'No input events found in trace.';
3611
+ }
3612
+ const totalInputs = rows.reduce((sum, r) => sum + r.count, 0);
3613
+ const avgDur = rows.reduce((sum, r) => sum + r.avg_dur_ms * r.count, 0) / totalInputs;
3614
+ return `Found ${totalInputs} input events across ${rows.length} types. ` +
3615
+ `Average duration: ${avgDur?.toFixed(2)}ms.`;
3616
+ }
3617
+ formatBufferFlowSummary(rows) {
3618
+ if (rows.length === 0) {
3619
+ return 'No buffer flow events found in trace.';
3620
+ }
3621
+ const totalDur = rows.reduce((sum, r) => sum + r.total_dur_ms, 0);
3622
+ const avgDur = rows.reduce((sum, r) => sum + r.avg_dur_ms * r.count, 0) / rows.length;
3623
+ return `Found ${rows.length} buffer flow event types. ` +
3624
+ `Total GPU/buffer wait time: ${totalDur.toFixed(2)}ms, average: ${avgDur.toFixed(2)}ms.`;
3625
+ }
3626
+ formatSystemServerSummary(rows) {
3627
+ if (rows.length === 0) {
3628
+ return 'No SystemServer operations found in trace.';
3629
+ }
3630
+ const totalOps = rows.reduce((sum, r) => sum + r.count, 0);
3631
+ const totalDur = rows.reduce((sum, r) => sum + r.total_dur_ms, 0);
3632
+ const avgDur = rows.reduce((sum, r) => sum + r.avg_dur_ms * r.count, 0) / totalOps;
3633
+ return `Found ${totalOps} SystemServer operations (>10ms). ` +
3634
+ `Total time: ${totalDur.toFixed(2)}ms, average: ${avgDur.toFixed(2)}ms.`;
3635
+ }
3636
+ formatSlowFunctionsSummary(rows, topSlowest) {
3637
+ if (rows.length === 0) {
3638
+ return 'No long main-thread slices (>16ms) were found.';
3639
+ }
3640
+ const totalCount = rows.reduce((sum, r) => sum + r.count, 0);
3641
+ const totalDur = rows.reduce((sum, r) => sum + r.total_dur_ms, 0);
3642
+ const avgDur = rows.reduce((sum, r) => sum + r.avg_dur_ms * r.count, 0) / totalCount;
3643
+ const jankOverlapCount = rows.reduce((sum, r) => sum + Number(r.jank_overlap_count || 0), 0);
3644
+ const overlapRatio = totalCount > 0 ? (jankOverlapCount / totalCount) * 100 : 0;
3645
+ let summary = `Found ${rows.length} types of long main-thread slices (>16ms). `;
3646
+ summary += `Total occurrences: ${totalCount}. `;
3647
+ summary += `Total time: ${totalDur.toFixed(2)}ms, average: ${avgDur.toFixed(2)}ms.`;
3648
+ if (jankOverlapCount > 0) {
3649
+ summary += ` Overlap with janky frames: ${jankOverlapCount}/${totalCount} (${overlapRatio.toFixed(1)}%).`;
3650
+ }
3651
+ else {
3652
+ summary += ' No overlap with detected janky frames in this trace.';
3653
+ }
3654
+ if (topSlowest.length > 0) {
3655
+ const slowest = topSlowest[0];
3656
+ const overlapTag = Number(slowest.overlaps_jank_frame || 0) > 0 ? ' [overlaps jank frame]' : '';
3657
+ summary += ` Slowest instance: ${slowest.function_name} at ${slowest.dur_ms.toFixed(2)}ms ` +
3658
+ `in ${slowest.thread_name} thread (${slowest.process_name}).${overlapTag}`;
3659
+ }
3660
+ return summary;
3661
+ }
3662
+ formatNetworkSummary(rows, stats) {
3663
+ if (rows.length === 0) {
3664
+ return 'No network traffic found in trace.';
3665
+ }
3666
+ let summary = `Found ${rows.length} network requests.`;
3667
+ if (stats) {
3668
+ const avgDur = stats.avg_dur_ms;
3669
+ const minDur = stats.min_dur_ms;
3670
+ const maxDur = stats.max_dur_ms;
3671
+ const slowRequests = stats.slow_requests;
3672
+ summary += ` Average duration: ${avgDur?.toFixed(2)}ms. `;
3673
+ summary += `Min: ${minDur?.toFixed(2)}ms, Max: ${maxDur?.toFixed(2)}ms.`;
3674
+ if (slowRequests > 0) {
3675
+ summary += ` Slow requests (>1s): ${slowRequests}.`;
3676
+ }
3677
+ }
3678
+ return summary;
3679
+ }
3680
+ formatDatabaseSummary(rows, stats) {
3681
+ if (rows.length === 0) {
3682
+ return 'No database queries found in trace.';
3683
+ }
3684
+ let summary = `Found ${rows.length} database queries (SQLite/Room).`;
3685
+ if (stats) {
3686
+ const avgDur = stats.avg_dur_ms;
3687
+ const maxDur = stats.max_dur_ms;
3688
+ const slowQueries = stats.slow_queries;
3689
+ summary += ` Average duration: ${avgDur?.toFixed(2)}ms. `;
3690
+ summary += `Max: ${maxDur?.toFixed(2)}ms.`;
3691
+ if (slowQueries > 0) {
3692
+ summary += ` Slow queries (>16ms): ${slowQueries}.`;
3693
+ }
3694
+ }
3695
+ return summary;
3696
+ }
3697
+ formatFileIOSummary(rows, stats) {
3698
+ if (rows.length === 0) {
3699
+ return 'No file I/O operations found in trace.';
3700
+ }
3701
+ let summary = `Found ${rows.length} file I/O operations.`;
3702
+ if (stats) {
3703
+ const avgDur = stats.avg_dur_ms;
3704
+ const maxDur = stats.max_dur_ms;
3705
+ const readOps = stats.read_ops;
3706
+ const writeOps = stats.write_ops;
3707
+ summary += ` Average duration: ${avgDur?.toFixed(2)}ms. `;
3708
+ summary += `Max: ${maxDur?.toFixed(2)}ms. `;
3709
+ summary += `Read ops: ${readOps}, Write ops: ${writeOps}.`;
3710
+ }
3711
+ return summary;
3712
+ }
3713
+ // ========================================================================
3714
+ // Utility Methods
3715
+ // ========================================================================
3716
+ /**
3717
+ * Get available analysis types
3718
+ */
3719
+ getAvailableSkills() {
3720
+ return Object.values(perfettoSql_1.PerfettoSkillType);
3721
+ }
3722
+ /**
3723
+ * Get knowledge base reference
3724
+ */
3725
+ getKnowledgeBase() {
3726
+ return this.knowledgeBase;
3727
+ }
3728
+ }
3729
+ exports.PerfettoSqlSkill = PerfettoSqlSkill;
3730
+ exports.default = PerfettoSqlSkill;
3731
+ //# sourceMappingURL=perfettoSqlSkill.js.map