reis-mobile 0.3.6 → 0.4.0

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 (463) hide show
  1. package/.claude-plugin/marketplace.json +2 -2
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/CHANGELOG.md +24 -0
  4. package/README.md +175 -168
  5. package/THIRD_PARTY_NOTICES.md +224 -4
  6. package/agents/android-architect.md +89 -0
  7. package/agents/android-performance-engineer.md +92 -0
  8. package/agents/android-test-engineer.md +97 -0
  9. package/agents/flutter-test-engineer.md +2 -0
  10. package/agents/ios-architect.md +93 -0
  11. package/agents/ios-performance-engineer.md +92 -0
  12. package/agents/ios-test-engineer.md +95 -0
  13. package/agents/lead-mobile.md +10 -1
  14. package/agents/mobile-staff-engineer.md +1 -1
  15. package/agents/rn-architect.md +94 -0
  16. package/agents/rn-performance-engineer.md +92 -0
  17. package/agents/rn-test-engineer.md +98 -0
  18. package/bin/reis-mobile.mjs +59 -17
  19. package/commands/debate.md +10 -1
  20. package/commands/debug.md +60 -0
  21. package/commands/reis-mobile.md +7 -2
  22. package/core/config/project.mjs +59 -0
  23. package/core/registry/frontmatter.mjs +15 -4
  24. package/core/registry/registry.mjs +21 -1
  25. package/core/router/intents.mjs +2 -0
  26. package/core/router/router.mjs +10 -5
  27. package/package.json +1 -1
  28. package/skills/android-adaptive/SKILL.md +304 -0
  29. package/skills/android-adaptive/references/android/develop/ui/compose/layouts/adaptive/flexbox/container-behavior.md +112 -0
  30. package/skills/android-adaptive/references/android/develop/ui/compose/layouts/adaptive/flexbox/get-started.md +69 -0
  31. package/skills/android-adaptive/references/android/develop/ui/compose/layouts/adaptive/flexbox/index.md +81 -0
  32. package/skills/android-adaptive/references/android/develop/ui/compose/layouts/adaptive/flexbox/item-behavior.md +170 -0
  33. package/skills/android-adaptive/references/android/develop/ui/compose/layouts/adaptive/grid/container-properties.md +415 -0
  34. package/skills/android-adaptive/references/android/develop/ui/compose/layouts/adaptive/grid/get-started.md +51 -0
  35. package/skills/android-adaptive/references/android/develop/ui/compose/layouts/adaptive/grid/index.md +73 -0
  36. package/skills/android-adaptive/references/android/develop/ui/compose/layouts/adaptive/grid/item-properties.md +170 -0
  37. package/skills/android-adaptive/references/android/develop/ui/compose/layouts/adaptive/mediaquery/index.md +333 -0
  38. package/skills/android-adaptive/references/android/develop/ui/compose/tooling/debug.md +114 -0
  39. package/skills/android-adaptive/references/android/guide/navigation/navigation-3/recipes/material-listdetail.md +141 -0
  40. package/skills/android-agp-9-upgrade/SKILL.md +106 -0
  41. package/skills/android-agp-9-upgrade/references/android/build/migrate-to-built-in-kotlin.md +416 -0
  42. package/skills/android-agp-9-upgrade/references/android/build/releases/agp-9-0-0-release-notes.md +554 -0
  43. package/skills/android-agp-9-upgrade/references/buildconfig.md +54 -0
  44. package/skills/android-agp-9-upgrade/references/ksp-kapt.md +39 -0
  45. package/skills/android-agp-9-upgrade/references/paparazzi-gradle-9.md +30 -0
  46. package/skills/android-agp-9-upgrade/references/recipes.md +62 -0
  47. package/skills/android-appfunctions/SKILL.md +74 -0
  48. package/skills/android-appfunctions/references/adb-interaction-testing.md +95 -0
  49. package/skills/android-appfunctions/references/context.md +26 -0
  50. package/skills/android-appfunctions/references/feature-discovery-analysis.md +71 -0
  51. package/skills/android-appfunctions/references/implementation-configuration.md +282 -0
  52. package/skills/android-appfunctions/references/kdoc-refinement-optimization.md +75 -0
  53. package/skills/android-appfunctions/references/migrate-to-service-entry-point.md +226 -0
  54. package/skills/android-camerax/SKILL.md +135 -0
  55. package/skills/android-camerax/references/camera1-to-camerax.md +198 -0
  56. package/skills/android-camerax/references/camera2-to-camerax.md +193 -0
  57. package/skills/android-camerax/references/expert-blueprints.md +58 -0
  58. package/skills/android-camerax/references/foldables.md +83 -0
  59. package/skills/android-camerax/references/immutability.md +60 -0
  60. package/skills/android-camerax/references/low-light.md +124 -0
  61. package/skills/android-camerax/references/mlkit-spatial.md +75 -0
  62. package/skills/android-camerax/references/modern-apis.md +42 -0
  63. package/skills/android-camerax/references/testing.md +69 -0
  64. package/skills/android-camerax/references/thermals.md +85 -0
  65. package/skills/android-camerax/references/wear-os.md +76 -0
  66. package/skills/android-camerax/references/xr.md +54 -0
  67. package/skills/android-cli/SKILL.md +474 -0
  68. package/skills/android-cli/references/interact.md +113 -0
  69. package/skills/android-cli/references/journeys.md +120 -0
  70. package/skills/android-code-review/SKILL.md +58 -0
  71. package/skills/android-display-glasses-with-jetpack-compose-glimmer/SKILL.md +340 -0
  72. package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/android/design/ui/ai-glasses/guides/interaction/inputs.md +67 -0
  73. package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/android/develop/xr/jetpack-xr-sdk/access-hardware-projected-context.md +388 -0
  74. package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/android/develop/xr/jetpack-xr-sdk/jetpack-compose-glimmer/buttons.md +139 -0
  75. package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/android/develop/xr/jetpack-xr-sdk/jetpack-compose-glimmer/cards.md +148 -0
  76. package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/android/develop/xr/jetpack-xr-sdk/jetpack-compose-glimmer/focus.md +107 -0
  77. package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/android/develop/xr/jetpack-xr-sdk/jetpack-compose-glimmer/icons.md +90 -0
  78. package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/android/develop/xr/jetpack-xr-sdk/jetpack-compose-glimmer/text.md +69 -0
  79. package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/android/develop/xr/jetpack-xr-sdk/jetpack-compose-glimmer/title-chips.md +82 -0
  80. package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/android/develop/xr/jetpack-xr-sdk/request-hardware-permissions.md +213 -0
  81. package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/button-samples-source.md +176 -0
  82. package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/button-source.md +203 -0
  83. package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/card-samples-source.md +296 -0
  84. package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/card-source.md +515 -0
  85. package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/deptheffect-source.md +224 -0
  86. package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/deptheffectlevels-source.md +105 -0
  87. package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/glimmersansflextypography-source.md +270 -0
  88. package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/glimmertheme-source.md +182 -0
  89. package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/icon-source.md +388 -0
  90. package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/iconbutton-source.md +126 -0
  91. package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/iconsizes-source.md +78 -0
  92. package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/list-source.md +27 -0
  93. package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/listitem-source.md +272 -0
  94. package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/liststate-source.md +427 -0
  95. package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/material-hct-source.md +217 -0
  96. package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/projectedcontext-source.md +265 -0
  97. package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/stack-source.md +368 -0
  98. package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/stackitemscope-source.md +440 -0
  99. package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/stackstate-source.md +325 -0
  100. package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/surface-source.md +1211 -0
  101. package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/titlechip-samples-source.md +101 -0
  102. package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/titlechip-source.md +131 -0
  103. package/skills/android-edge-to-edge/SKILL.md +429 -0
  104. package/skills/android-engage-sdk-integration/SKILL.md +130 -0
  105. package/skills/android-engage-sdk-integration/references/android/guide/playcore/engage/faq.md +439 -0
  106. package/skills/android-engage-sdk-integration/references/android/guide/playcore/engage/food.md +1149 -0
  107. package/skills/android-engage-sdk-integration/references/android/guide/playcore/engage/healthandfitness.md +1055 -0
  108. package/skills/android-engage-sdk-integration/references/android/guide/playcore/engage/listen.md +1050 -0
  109. package/skills/android-engage-sdk-integration/references/android/guide/playcore/engage/otherverticals.md +1301 -0
  110. package/skills/android-engage-sdk-integration/references/android/guide/playcore/engage/read.md +910 -0
  111. package/skills/android-engage-sdk-integration/references/android/guide/playcore/engage/shopping.md +1224 -0
  112. package/skills/android-engage-sdk-integration/references/android/guide/playcore/engage/social.md +719 -0
  113. package/skills/android-engage-sdk-integration/references/android/guide/playcore/engage/travel.md +1413 -0
  114. package/skills/android-engage-sdk-integration/references/android/guide/playcore/engage/tv/continue-watching/index.md +19 -0
  115. package/skills/android-engage-sdk-integration/references/android/guide/playcore/engage/tv/entitlements.md +353 -0
  116. package/skills/android-engage-sdk-integration/references/android/guide/playcore/engage/tv/getting-started.md +202 -0
  117. package/skills/android-engage-sdk-integration/references/android/guide/playcore/engage/tv/recommendations.md +471 -0
  118. package/skills/android-engage-sdk-integration/references/android/guide/playcore/engage/watch.md +1081 -0
  119. package/skills/android-engage-sdk-integration/references/clusters.md +154 -0
  120. package/skills/android-engage-sdk-integration/references/common.md +519 -0
  121. package/skills/android-engage-sdk-integration/references/patterns.md +527 -0
  122. package/skills/android-engage-sdk-integration/references/requests.md +260 -0
  123. package/skills/android-engage-sdk-integration/references/schemas/food.md +509 -0
  124. package/skills/android-engage-sdk-integration/references/schemas/listen.md +842 -0
  125. package/skills/android-engage-sdk-integration/references/schemas/other.md +220 -0
  126. package/skills/android-engage-sdk-integration/references/schemas/read.md +412 -0
  127. package/skills/android-engage-sdk-integration/references/schemas/shopping.md +357 -0
  128. package/skills/android-engage-sdk-integration/references/schemas/social.md +228 -0
  129. package/skills/android-engage-sdk-integration/references/schemas/travel.md +923 -0
  130. package/skills/android-engage-sdk-integration/references/schemas/tv.md +1226 -0
  131. package/skills/android-engage-sdk-integration/references/schemas/watch.md +1137 -0
  132. package/skills/android-engage-sdk-integration/references/troubleshooting.md +39 -0
  133. package/skills/android-gradle-build-debug/SKILL.md +71 -0
  134. package/skills/android-intent-security/SKILL.md +550 -0
  135. package/skills/android-leanback-to-compose-tv-migration/SKILL.md +743 -0
  136. package/skills/android-leanback-to-compose-tv-migration/references/android/training/tv/get-started/navigation.md +372 -0
  137. package/skills/android-leanback-to-compose-tv-migration/references/android/training/tv/playback/compose/browse.md +243 -0
  138. package/skills/android-leanback-to-compose-tv-migration/references/android/training/tv/playback/compose/index.md +153 -0
  139. package/skills/android-media3-cast-integration/SKILL.md +236 -0
  140. package/skills/android-media3-cast-integration/references/android/media/media3/cast/create-castplayer.md +390 -0
  141. package/skills/android-media3-cast-integration/references/android/media/media3/cast/customize-castoptions.md +93 -0
  142. package/skills/android-media3-cast-integration/references/android/media/media3/cast/index.md +21 -0
  143. package/skills/android-migrate-xml-views-to-jetpack-compose/SKILL.md +127 -0
  144. package/skills/android-migrate-xml-views-to-jetpack-compose/references/analysis-of-the-project-and-layout.md +42 -0
  145. package/skills/android-migrate-xml-views-to-jetpack-compose/references/android/develop/ui/compose/designsystems/migrate-xml-theme-to-compose.md +171 -0
  146. package/skills/android-migrate-xml-views-to-jetpack-compose/references/android/develop/ui/compose/migrate/interoperability-apis/compose-in-views.md +299 -0
  147. package/skills/android-migrate-xml-views-to-jetpack-compose/references/android/develop/ui/compose/migrate/interoperability-apis/views-in-compose.md +286 -0
  148. package/skills/android-migrate-xml-views-to-jetpack-compose/references/android/develop/ui/compose/setup-compose-dependencies-and-compiler.md +197 -0
  149. package/skills/android-migrate-xml-views-to-jetpack-compose/references/identify-optimal-xml-candidate.md +31 -0
  150. package/skills/android-migrate-xml-views-to-jetpack-compose/references/xml-layout-migration.md +86 -0
  151. package/skills/android-ml-kit-genai-prompt-api/SKILL.md +124 -0
  152. package/skills/android-ml-kit-genai-prompt-api/references/get-started.md +272 -0
  153. package/skills/android-ml-kit-genai-prompt-api/references/prefix-caching.md +146 -0
  154. package/skills/android-ml-kit-genai-prompt-api/references/prompt-design.md +55 -0
  155. package/skills/android-ml-kit-genai-prompt-api/references/prompt-optimization.md +74 -0
  156. package/skills/android-ml-kit-genai-prompt-api/references/structured-output.md +219 -0
  157. package/skills/android-ml-kit-genai-prompt-api/references/system-instructions.md +71 -0
  158. package/skills/android-navigation-3/SKILL.md +122 -0
  159. package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/index.md +51 -0
  160. package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/migration-guide.md +670 -0
  161. package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/animations.md +147 -0
  162. package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/basic.md +89 -0
  163. package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/basicdsl.md +85 -0
  164. package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/basicsaveable.md +90 -0
  165. package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/bottomsheet.md +195 -0
  166. package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/common-ui.md +200 -0
  167. package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/conditional-transitions.md +182 -0
  168. package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/conditional.md +230 -0
  169. package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/deeplinks-custommatcher.md +176 -0
  170. package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/deeplinks-staticuri.md +140 -0
  171. package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/deeplinks-syntheticbackstack.md +184 -0
  172. package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/dialog.md +107 -0
  173. package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/lifecycle-owner.md +185 -0
  174. package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/material-listdetail.md +141 -0
  175. package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/material-supportingpane.md +145 -0
  176. package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/modular-hilt.md +283 -0
  177. package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/modular-koin.md +287 -0
  178. package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/multiple-backstacks.md +468 -0
  179. package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/passingarguments.md +371 -0
  180. package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/results-event.md +273 -0
  181. package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/results-state.md +266 -0
  182. package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/scenes-listdetail.md +435 -0
  183. package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/scenes-twopane.md +244 -0
  184. package/skills/android-navigation-3/references/android/guide/navigation/type-safe-destinations.md +129 -0
  185. package/skills/android-navigation-event/SKILL.md +312 -0
  186. package/skills/android-navigation-event/references/android/guide/navigation/navigation-event/dispatcher.md +134 -0
  187. package/skills/android-navigation-event/references/android/guide/navigation/navigation-event/handle-back.md +217 -0
  188. package/skills/android-navigation-event/references/android/guide/navigation/navigation-event/index.md +83 -0
  189. package/skills/android-navigation-event/references/android/guide/navigation/navigation-event/setup.md +32 -0
  190. package/skills/android-play-billing-library-version-upgrade/SKILL.md +96 -0
  191. package/skills/android-play-billing-library-version-upgrade/references/android/google/play/billing/release-notes.md +1240 -0
  192. package/skills/android-play-billing-library-version-upgrade/references/migration-logic.md +78 -0
  193. package/skills/android-play-billing-library-version-upgrade/references/version-checklist.md +54 -0
  194. package/skills/android-play-policy-insights/SKILL.md +172 -0
  195. package/skills/android-play-policy-insights/resources/common_mandates.md +100 -0
  196. package/skills/android-play-policy-insights/resources/compliance_report_template.md +59 -0
  197. package/skills/android-play-policy-insights/resources/critic.md +86 -0
  198. package/skills/android-play-policy-insights/resources/goal_data_safety.md +212 -0
  199. package/skills/android-play-policy-insights/resources/goal_permissions_and_apis.md +459 -0
  200. package/skills/android-play-policy-insights/resources/goal_user_account.md +106 -0
  201. package/skills/android-play-policy-insights/resources/policies.json +321 -0
  202. package/skills/android-play-policy-insights/resources/scanner_config.json +843 -0
  203. package/skills/android-play-policy-insights/scripts/generate_report.py +860 -0
  204. package/skills/android-play-policy-insights/scripts/orchestrator.py +1313 -0
  205. package/skills/android-play-policy-insights/scripts/play_store_scraper.py +410 -0
  206. package/skills/android-play-policy-insights/scripts/scanner.py +261 -0
  207. package/skills/android-play-policy-insights/scripts/template_engine.py +243 -0
  208. package/skills/android-profiler/SKILL.md +60 -0
  209. package/skills/android-profiler/analysis/analysis_orchestrator.md +32 -0
  210. package/skills/android-profiler/analysis/workflows/perfetto-sql/perfetto_sql.md +28 -0
  211. package/skills/android-profiler/analysis/workflows/perfetto-trace-analysis/perfetto_trace_analysis.md +121 -0
  212. package/skills/android-profiler/analysis/workflows/perfetto-trace-analysis/references/guiding_principles.md +51 -0
  213. package/skills/android-profiler/analysis/workflows/perfetto-trace-analysis/references/hints/domain_hints_template.md +7 -0
  214. package/skills/android-profiler/analysis/workflows/perfetto-trace-analysis/references/hints/subsystems/hints_cpu.md +56 -0
  215. package/skills/android-profiler/analysis/workflows/perfetto-trace-analysis/references/hints/subsystems/hints_graphics.md +51 -0
  216. package/skills/android-profiler/analysis/workflows/perfetto-trace-analysis/references/hints/subsystems/hints_io.md +46 -0
  217. package/skills/android-profiler/analysis/workflows/perfetto-trace-analysis/references/hints/subsystems/hints_ipc.md +41 -0
  218. package/skills/android-profiler/analysis/workflows/perfetto-trace-analysis/references/hints/subsystems/hints_memory.md +55 -0
  219. package/skills/android-profiler/analysis/workflows/perfetto-trace-analysis/references/hints/subsystems/hints_power.md +33 -0
  220. package/skills/android-profiler/analysis/workflows/perfetto-trace-analysis/references/per_candidate_analysis.md +172 -0
  221. package/skills/android-profiler/analysis/workflows/perfetto-trace-analysis/references/triage.md +94 -0
  222. package/skills/android-profiler/recording/recording_orchestrator.md +36 -0
  223. package/skills/android-profiler/recording/workflows/perfetto-trace-recording/perfetto_trace_recording.md +148 -0
  224. package/skills/android-profiler/recording/workflows/perfetto-trace-recording/references/example-configs/app_jank.pftxt +43 -0
  225. package/skills/android-profiler/recording/workflows/perfetto-trace-recording/references/example-configs/cpu_profile.pftxt +35 -0
  226. package/skills/android-profiler/recording/workflows/perfetto-trace-recording/references/example-configs/java_heap_dump.pftxt +21 -0
  227. package/skills/android-profiler/recording/workflows/perfetto-trace-recording/references/example-configs/long_background.pftxt +37 -0
  228. package/skills/android-profiler/recording/workflows/perfetto-trace-recording/references/example-configs/memory_counters.pftxt +45 -0
  229. package/skills/android-profiler/recording/workflows/perfetto-trace-recording/references/example-configs/native_heap.pftxt +21 -0
  230. package/skills/android-profiler/recording/workflows/perfetto-trace-recording/references/example-configs/sched_cpu.pftxt +33 -0
  231. package/skills/android-profiler/recording/workflows/perfetto-trace-recording/references/trace_config_reference.md +102 -0
  232. package/skills/android-profiler/references/env_setup.md +15 -0
  233. package/skills/android-profiler/references/perfetto/setup.md +29 -0
  234. package/skills/android-profiler/references/perfetto/sql.md +327 -0
  235. package/skills/android-r8-analyzer/SKILL.md +72 -0
  236. package/skills/android-r8-analyzer/references/CONFIGURATION-ANALYZER.md +287 -0
  237. package/skills/android-r8-analyzer/references/CONFIGURATION.md +44 -0
  238. package/skills/android-r8-analyzer/references/KEEP-RULES-IMPACT-HIERARCHY.md +83 -0
  239. package/skills/android-r8-analyzer/references/REDUNDANT-RULES.md +222 -0
  240. package/skills/android-r8-analyzer/references/REFLECTION-GUIDE.md +139 -0
  241. package/skills/android-r8-analyzer/references/REPORT_FORMAT.md +51 -0
  242. package/skills/android-r8-analyzer/references/android/topic/performance/app-optimization/enable-app-optimization.md +252 -0
  243. package/skills/android-r8-analyzer/references/android/training/testing/other-components/ui-automator.md +312 -0
  244. package/skills/android-restore-credentials/SKILL.md +359 -0
  245. package/skills/android-restore-credentials/references/android/guide/topics/manifest/application-element.md +832 -0
  246. package/skills/android-restore-credentials/references/android/identity/passkeys/create-passkeys.md +327 -0
  247. package/skills/android-restore-credentials/references/android/identity/passkeys/sign-in-with-passkeys.md +219 -0
  248. package/skills/android-styles/SKILL.md +229 -0
  249. package/skills/android-styles/references/android/develop/ui/compose/designsystems/custom.md +459 -0
  250. package/skills/android-styles/references/android/develop/ui/compose/styles/fundamentals.md +421 -0
  251. package/skills/android-styles/references/android/develop/ui/compose/styles/state-animations.md +461 -0
  252. package/skills/android-styles/references/android/develop/ui/compose/styles/styles-vs-modifiers.md +48 -0
  253. package/skills/android-styles/references/android/develop/ui/compose/styles/theming.md +269 -0
  254. package/skills/android-verified-email/SKILL.md +432 -0
  255. package/skills/android-verified-email/references/android/identity/credential-manager/index.md +67 -0
  256. package/skills/android-verified-email/references/android/identity/digital-credentials/credential-verifier.md +166 -0
  257. package/skills/android-verified-email/references/android/identity/digital-credentials/email-verification-implementation.md +313 -0
  258. package/skills/android-verified-email/references/android/identity/digital-credentials/email-verification.md +158 -0
  259. package/skills/android-verified-email/references/android/identity/digital-credentials/index.md +112 -0
  260. package/skills/android-verified-email/references/android/identity/passkeys/create-passkeys.md +327 -0
  261. package/skills/android-verified-email/references/android/identity/sign-in/credential-manager-webview.md +84 -0
  262. package/skills/android-wear-compose-m3/SKILL.md +365 -0
  263. package/skills/android-wear-compose-m3/references/android/training/wearables/compose/migrate-to-material3.md +677 -0
  264. package/skills/android-wear-compose-m3/references/foundation/AmbientModeSample.kt.md +123 -0
  265. package/skills/android-wear-compose-m3/references/foundation/AmbientModeSample.kt.md.txt +123 -0
  266. package/skills/android-wear-compose-m3/references/foundation/CurvedWorldSample.kt.md +430 -0
  267. package/skills/android-wear-compose-m3/references/foundation/CurvedWorldSample.kt.md.txt +430 -0
  268. package/skills/android-wear-compose-m3/references/foundation/ExpandableSample.kt.md +99 -0
  269. package/skills/android-wear-compose-m3/references/foundation/ExpandableSample.kt.md.txt +99 -0
  270. package/skills/android-wear-compose-m3/references/foundation/HierarchicalFocusSample.kt.md +141 -0
  271. package/skills/android-wear-compose-m3/references/foundation/HierarchicalFocusSample.kt.md.txt +141 -0
  272. package/skills/android-wear-compose-m3/references/foundation/PagerSamples.kt.md +56 -0
  273. package/skills/android-wear-compose-m3/references/foundation/PagerSamples.kt.md.txt +56 -0
  274. package/skills/android-wear-compose-m3/references/foundation/RotarySamples.kt.md +153 -0
  275. package/skills/android-wear-compose-m3/references/foundation/RotarySamples.kt.md.txt +153 -0
  276. package/skills/android-wear-compose-m3/references/foundation/ScalingLazyColumnSample.kt.md +131 -0
  277. package/skills/android-wear-compose-m3/references/foundation/ScalingLazyColumnSample.kt.md.txt +131 -0
  278. package/skills/android-wear-compose-m3/references/foundation/SwipeToDismissBoxSample.kt.md +169 -0
  279. package/skills/android-wear-compose-m3/references/foundation/SwipeToDismissBoxSample.kt.md.txt +169 -0
  280. package/skills/android-wear-compose-m3/references/foundation/SwipeToRevealSample.kt.md +282 -0
  281. package/skills/android-wear-compose-m3/references/foundation/SwipeToRevealSample.kt.md.txt +282 -0
  282. package/skills/android-wear-compose-m3/references/foundation/TransformingLazyColumnSample.kt.md +335 -0
  283. package/skills/android-wear-compose-m3/references/foundation/TransformingLazyColumnSample.kt.md.txt +335 -0
  284. package/skills/android-wear-compose-m3/references/material3/AlertDialogSample.kt.md +377 -0
  285. package/skills/android-wear-compose-m3/references/material3/AlertDialogSample.kt.md.txt +377 -0
  286. package/skills/android-wear-compose-m3/references/material3/AnimatedTextSample.kt.md +165 -0
  287. package/skills/android-wear-compose-m3/references/material3/AnimatedTextSample.kt.md.txt +165 -0
  288. package/skills/android-wear-compose-m3/references/material3/ButtonGroupSample.kt.md +91 -0
  289. package/skills/android-wear-compose-m3/references/material3/ButtonGroupSample.kt.md.txt +91 -0
  290. package/skills/android-wear-compose-m3/references/material3/ButtonSample.kt.md +496 -0
  291. package/skills/android-wear-compose-m3/references/material3/ButtonSample.kt.md.txt +496 -0
  292. package/skills/android-wear-compose-m3/references/material3/CardSample.kt.md +470 -0
  293. package/skills/android-wear-compose-m3/references/material3/CardSample.kt.md.txt +470 -0
  294. package/skills/android-wear-compose-m3/references/material3/CheckboxButtonSample.kt.md +67 -0
  295. package/skills/android-wear-compose-m3/references/material3/CheckboxButtonSample.kt.md.txt +67 -0
  296. package/skills/android-wear-compose-m3/references/material3/ConfirmationDialogSample.kt.md +162 -0
  297. package/skills/android-wear-compose-m3/references/material3/ConfirmationDialogSample.kt.md.txt +162 -0
  298. package/skills/android-wear-compose-m3/references/material3/CurvedTextSamples.kt.md +78 -0
  299. package/skills/android-wear-compose-m3/references/material3/CurvedTextSamples.kt.md.txt +78 -0
  300. package/skills/android-wear-compose-m3/references/material3/DatePickerSample.kt.md +131 -0
  301. package/skills/android-wear-compose-m3/references/material3/DatePickerSample.kt.md.txt +131 -0
  302. package/skills/android-wear-compose-m3/references/material3/DynamicColorSchemeSample.kt.md +74 -0
  303. package/skills/android-wear-compose-m3/references/material3/DynamicColorSchemeSample.kt.md.txt +74 -0
  304. package/skills/android-wear-compose-m3/references/material3/EdgeButtonSample.kt.md +63 -0
  305. package/skills/android-wear-compose-m3/references/material3/EdgeButtonSample.kt.md.txt +63 -0
  306. package/skills/android-wear-compose-m3/references/material3/FadingExpandingLabelSample.kt.md +60 -0
  307. package/skills/android-wear-compose-m3/references/material3/FadingExpandingLabelSample.kt.md.txt +60 -0
  308. package/skills/android-wear-compose-m3/references/material3/IconButtonSample.kt.md +125 -0
  309. package/skills/android-wear-compose-m3/references/material3/IconButtonSample.kt.md.txt +125 -0
  310. package/skills/android-wear-compose-m3/references/material3/IconToggleButtonSample.kt.md +116 -0
  311. package/skills/android-wear-compose-m3/references/material3/IconToggleButtonSample.kt.md.txt +116 -0
  312. package/skills/android-wear-compose-m3/references/material3/LevelIndicatorSample.kt.md +68 -0
  313. package/skills/android-wear-compose-m3/references/material3/LevelIndicatorSample.kt.md.txt +68 -0
  314. package/skills/android-wear-compose-m3/references/material3/LinearProgressIndicatorSample.kt.md +50 -0
  315. package/skills/android-wear-compose-m3/references/material3/LinearProgressIndicatorSample.kt.md.txt +50 -0
  316. package/skills/android-wear-compose-m3/references/material3/ListHeaderSample.kt.md +177 -0
  317. package/skills/android-wear-compose-m3/references/material3/ListHeaderSample.kt.md.txt +177 -0
  318. package/skills/android-wear-compose-m3/references/material3/OneHandedGestureSamples.kt.md +651 -0
  319. package/skills/android-wear-compose-m3/references/material3/OneHandedGestureSamples.kt.md.txt +651 -0
  320. package/skills/android-wear-compose-m3/references/material3/OpenOnPhoneDialogSample.kt.md +57 -0
  321. package/skills/android-wear-compose-m3/references/material3/OpenOnPhoneDialogSample.kt.md.txt +57 -0
  322. package/skills/android-wear-compose-m3/references/material3/PageIndicatorSample.kt.md +110 -0
  323. package/skills/android-wear-compose-m3/references/material3/PageIndicatorSample.kt.md.txt +110 -0
  324. package/skills/android-wear-compose-m3/references/material3/PagerScaffoldSample.kt.md +204 -0
  325. package/skills/android-wear-compose-m3/references/material3/PagerScaffoldSample.kt.md.txt +204 -0
  326. package/skills/android-wear-compose-m3/references/material3/PickerGroupSample.kt.md +139 -0
  327. package/skills/android-wear-compose-m3/references/material3/PickerGroupSample.kt.md.txt +139 -0
  328. package/skills/android-wear-compose-m3/references/material3/PickerSample.kt.md +111 -0
  329. package/skills/android-wear-compose-m3/references/material3/PickerSample.kt.md.txt +111 -0
  330. package/skills/android-wear-compose-m3/references/material3/PlaceholderSample.kt.md +184 -0
  331. package/skills/android-wear-compose-m3/references/material3/PlaceholderSample.kt.md.txt +184 -0
  332. package/skills/android-wear-compose-m3/references/material3/ProgressIndicatorSample.kt.md +263 -0
  333. package/skills/android-wear-compose-m3/references/material3/ProgressIndicatorSample.kt.md.txt +263 -0
  334. package/skills/android-wear-compose-m3/references/material3/RadioButtonSample.kt.md +105 -0
  335. package/skills/android-wear-compose-m3/references/material3/RadioButtonSample.kt.md.txt +105 -0
  336. package/skills/android-wear-compose-m3/references/material3/ScaffoldSample.kt.md +146 -0
  337. package/skills/android-wear-compose-m3/references/material3/ScaffoldSample.kt.md.txt +146 -0
  338. package/skills/android-wear-compose-m3/references/material3/ScrollAwaySample.kt.md +97 -0
  339. package/skills/android-wear-compose-m3/references/material3/ScrollAwaySample.kt.md.txt +97 -0
  340. package/skills/android-wear-compose-m3/references/material3/ScrollIndicatorSample.kt.md +66 -0
  341. package/skills/android-wear-compose-m3/references/material3/ScrollIndicatorSample.kt.md.txt +66 -0
  342. package/skills/android-wear-compose-m3/references/material3/SliderSample.kt.md +86 -0
  343. package/skills/android-wear-compose-m3/references/material3/SliderSample.kt.md.txt +86 -0
  344. package/skills/android-wear-compose-m3/references/material3/StepperSample.kt.md +148 -0
  345. package/skills/android-wear-compose-m3/references/material3/StepperSample.kt.md.txt +148 -0
  346. package/skills/android-wear-compose-m3/references/material3/SurfaceTransformationSample.kt.md +166 -0
  347. package/skills/android-wear-compose-m3/references/material3/SurfaceTransformationSample.kt.md.txt +166 -0
  348. package/skills/android-wear-compose-m3/references/material3/SwipeToDismissBoxSample.kt.md +172 -0
  349. package/skills/android-wear-compose-m3/references/material3/SwipeToDismissBoxSample.kt.md.txt +172 -0
  350. package/skills/android-wear-compose-m3/references/material3/SwipeToRevealSample.kt.md +367 -0
  351. package/skills/android-wear-compose-m3/references/material3/SwipeToRevealSample.kt.md.txt +367 -0
  352. package/skills/android-wear-compose-m3/references/material3/SwitchButtonSample.kt.md +66 -0
  353. package/skills/android-wear-compose-m3/references/material3/SwitchButtonSample.kt.md.txt +66 -0
  354. package/skills/android-wear-compose-m3/references/material3/TextButtonSample.kt.md +115 -0
  355. package/skills/android-wear-compose-m3/references/material3/TextButtonSample.kt.md.txt +115 -0
  356. package/skills/android-wear-compose-m3/references/material3/TextToggleButtonSample.kt.md +71 -0
  357. package/skills/android-wear-compose-m3/references/material3/TextToggleButtonSample.kt.md.txt +71 -0
  358. package/skills/android-wear-compose-m3/references/material3/TimePickerSample.kt.md +151 -0
  359. package/skills/android-wear-compose-m3/references/material3/TimePickerSample.kt.md.txt +151 -0
  360. package/skills/android-wear-compose-m3/references/material3/TimeTextSample.kt.md +65 -0
  361. package/skills/android-wear-compose-m3/references/material3/TimeTextSample.kt.md.txt +65 -0
  362. package/skills/android-wear-compose-m3/references/material3/TransformationSpecSample.kt.md +246 -0
  363. package/skills/android-wear-compose-m3/references/material3/TransformationSpecSample.kt.md.txt +246 -0
  364. package/skills/android-wear-compose-m3/references/material3/TransformingLazyColumnNotificationsSample.kt.md +89 -0
  365. package/skills/android-wear-compose-m3/references/material3/TransformingLazyColumnNotificationsSample.kt.md.txt +89 -0
  366. package/skills/android-wear-compose-m3/references/material3/TransformingLazyColumnSample.kt.md +309 -0
  367. package/skills/android-wear-compose-m3/references/material3/TransformingLazyColumnSample.kt.md.txt +309 -0
  368. package/skills/android-wear-compose-m3/references/navigation3/SwipeDismissableSceneStrategySample.kt.md +205 -0
  369. package/skills/android-wear-compose-m3/references/navigation3/SwipeDismissableSceneStrategySample.kt.md.txt +205 -0
  370. package/skills/{architecture-feature-first → flutter-architecture-feature-first}/SKILL.md +1 -1
  371. package/skills/{bloc → flutter-bloc}/SKILL.md +1 -1
  372. package/skills/flutter-build-debug/SKILL.md +66 -0
  373. package/skills/{code-review → flutter-code-review}/SKILL.md +1 -1
  374. package/skills/{dart-3-updates → flutter-dart-3-updates}/SKILL.md +1 -1
  375. package/skills/{dart-fix-runtime-errors → flutter-dart-fix-runtime-errors}/SKILL.md +1 -1
  376. package/skills/{dart-resolve-package-conflicts → flutter-dart-resolve-package-conflicts}/SKILL.md +1 -1
  377. package/skills/{dart-run-static-analysis → flutter-dart-run-static-analysis}/SKILL.md +1 -1
  378. package/skills/{dart-use-pattern-matching → flutter-dart-use-pattern-matching}/SKILL.md +1 -1
  379. package/skills/{effective-dart → flutter-effective-dart}/SKILL.md +1 -1
  380. package/skills/{provider → flutter-provider}/SKILL.md +1 -1
  381. package/skills/{riverpod → flutter-riverpod}/SKILL.md +1 -1
  382. package/skills/ios-cocoapods-debug/SKILL.md +65 -0
  383. package/skills/ios-code-review/SKILL.md +56 -0
  384. package/skills/ios-xcode-build-debug/SKILL.md +66 -0
  385. package/skills/{detect-mobile-stack → mobile-detect-stack}/SKILL.md +1 -1
  386. package/skills/mobile-firebase/SKILL.md +54 -0
  387. package/skills/mobile-firebase/references/android/ai-logic.md +31 -0
  388. package/skills/mobile-firebase/references/android/analytics.md +33 -0
  389. package/skills/mobile-firebase/references/android/app-check.md +36 -0
  390. package/skills/mobile-firebase/references/android/auth.md +44 -0
  391. package/skills/mobile-firebase/references/android/crashlytics.md +31 -0
  392. package/skills/mobile-firebase/references/android/firestore.md +44 -0
  393. package/skills/mobile-firebase/references/android/functions.md +33 -0
  394. package/skills/mobile-firebase/references/android/in-app-messaging.md +28 -0
  395. package/skills/mobile-firebase/references/android/messaging.md +41 -0
  396. package/skills/mobile-firebase/references/android/realtime-database.md +50 -0
  397. package/skills/mobile-firebase/references/android/remote-config.md +43 -0
  398. package/skills/mobile-firebase/references/android/sql-connect.md +31 -0
  399. package/skills/mobile-firebase/references/android/storage.md +39 -0
  400. package/skills/mobile-firebase/references/android.md +30 -0
  401. package/skills/{firebase-ai/SKILL.md → mobile-firebase/references/flutter/ai-logic.md} +2 -8
  402. package/skills/{firebase-analytics/SKILL.md → mobile-firebase/references/flutter/analytics.md} +2 -8
  403. package/skills/{firebase-app-check/SKILL.md → mobile-firebase/references/flutter/app-check.md} +2 -8
  404. package/skills/{firebase-auth/SKILL.md → mobile-firebase/references/flutter/auth.md} +2 -8
  405. package/skills/{firebase-crashlytics/SKILL.md → mobile-firebase/references/flutter/crashlytics.md} +2 -8
  406. package/skills/{firebase-cloud-firestore/SKILL.md → mobile-firebase/references/flutter/firestore.md} +2 -8
  407. package/skills/{firebase-cloud-functions/SKILL.md → mobile-firebase/references/flutter/functions.md} +2 -8
  408. package/skills/{firebase-in-app-messaging/SKILL.md → mobile-firebase/references/flutter/in-app-messaging.md} +2 -8
  409. package/skills/{firebase-messaging/SKILL.md → mobile-firebase/references/flutter/messaging.md} +2 -8
  410. package/skills/{firebase-database/SKILL.md → mobile-firebase/references/flutter/realtime-database.md} +2 -8
  411. package/skills/{firebase-remote-config/SKILL.md → mobile-firebase/references/flutter/remote-config.md} +2 -8
  412. package/skills/{flutterfire-configure/SKILL.md → mobile-firebase/references/flutter/setup-flutterfire.md} +1 -8
  413. package/skills/{firebase-data-connect/SKILL.md → mobile-firebase/references/flutter/sql-connect.md} +2 -8
  414. package/skills/{firebase-storage/SKILL.md → mobile-firebase/references/flutter/storage.md} +2 -8
  415. package/skills/mobile-firebase/references/flutter.md +36 -0
  416. package/skills/mobile-firebase/references/ios/ai-logic.md +30 -0
  417. package/skills/mobile-firebase/references/ios/analytics.md +33 -0
  418. package/skills/mobile-firebase/references/ios/app-check.md +36 -0
  419. package/skills/mobile-firebase/references/ios/auth.md +48 -0
  420. package/skills/mobile-firebase/references/ios/crashlytics.md +34 -0
  421. package/skills/mobile-firebase/references/ios/firestore.md +53 -0
  422. package/skills/mobile-firebase/references/ios/functions.md +35 -0
  423. package/skills/mobile-firebase/references/ios/in-app-messaging.md +26 -0
  424. package/skills/mobile-firebase/references/ios/messaging.md +45 -0
  425. package/skills/mobile-firebase/references/ios/realtime-database.md +49 -0
  426. package/skills/mobile-firebase/references/ios/remote-config.md +44 -0
  427. package/skills/mobile-firebase/references/ios/sql-connect.md +33 -0
  428. package/skills/mobile-firebase/references/ios/storage.md +36 -0
  429. package/skills/mobile-firebase/references/ios.md +28 -0
  430. package/skills/mobile-firebase/references/react-native/ai-logic.md +32 -0
  431. package/skills/mobile-firebase/references/react-native/analytics.md +43 -0
  432. package/skills/mobile-firebase/references/react-native/app-check.md +35 -0
  433. package/skills/mobile-firebase/references/react-native/auth.md +50 -0
  434. package/skills/mobile-firebase/references/react-native/crashlytics.md +36 -0
  435. package/skills/mobile-firebase/references/react-native/firestore.md +45 -0
  436. package/skills/mobile-firebase/references/react-native/functions.md +28 -0
  437. package/skills/mobile-firebase/references/react-native/in-app-messaging.md +27 -0
  438. package/skills/mobile-firebase/references/react-native/messaging.md +46 -0
  439. package/skills/mobile-firebase/references/react-native/realtime-database.md +46 -0
  440. package/skills/mobile-firebase/references/react-native/remote-config.md +32 -0
  441. package/skills/mobile-firebase/references/react-native/sql-connect.md +11 -0
  442. package/skills/mobile-firebase/references/react-native/storage.md +30 -0
  443. package/skills/mobile-firebase/references/react-native.md +29 -0
  444. package/skills/mobile-test/SKILL.md +63 -0
  445. package/skills/mobile-test/references/android/setup/GUIDE.md +183 -0
  446. package/skills/mobile-test/references/android/setup/references/android/develop/ui/compose/testing/common-patterns.md +181 -0
  447. package/skills/mobile-test/references/android/setup/references/android/studio/preview/compose-screenshot-testing.md +255 -0
  448. package/skills/mobile-test/references/android/setup/references/android/training/dependency-injection/hilt-testing.md +447 -0
  449. package/skills/mobile-test/references/android.md +83 -0
  450. package/skills/{dart-collect-coverage/SKILL.md → mobile-test/references/flutter/coverage.md} +2 -11
  451. package/skills/{dart-generate-test-mocks/SKILL.md → mobile-test/references/flutter/generate-mocks.md} +2 -11
  452. package/skills/{flutter-add-integration-test/SKILL.md → mobile-test/references/flutter/integration-tests.md} +2 -11
  453. package/skills/{dart-migrate-to-checks-package/SKILL.md → mobile-test/references/flutter/migrate-to-checks.md} +2 -13
  454. package/skills/{mockito/SKILL.md → mobile-test/references/flutter/mockito.md} +1 -8
  455. package/skills/{mocktail/SKILL.md → mobile-test/references/flutter/mocktail.md} +1 -8
  456. package/skills/{patrol-e2e-testing/SKILL.md → mobile-test/references/flutter/patrol.md} +1 -8
  457. package/skills/{testing/SKILL.md → mobile-test/references/flutter/testing-guidelines.md} +1 -8
  458. package/skills/{dart-add-unit-test/SKILL.md → mobile-test/references/flutter/unit-tests.md} +2 -11
  459. package/skills/{flutter-add-widget-test/SKILL.md → mobile-test/references/flutter/widget-tests.md} +2 -11
  460. package/skills/mobile-test/references/flutter.md +44 -0
  461. package/skills/mobile-test/references/ios.md +79 -0
  462. package/skills/mobile-test/references/react-native.md +62 -0
  463. /package/skills/{dart-use-pattern-matching → flutter-dart-use-pattern-matching}/examples/json_patterns.dart +0 -0
@@ -0,0 +1,35 @@
1
+ # CPU callstack sampling via traced_perf: periodic stack samples to find hot
2
+ # functions. Prefer the cpu_profile helper script for a standalone profile;
3
+ # use this config when combining with other data sources.
4
+ # Replace com.example.myapp with the app's package name, or drop the scope
5
+ # block to sample all processes.
6
+ buffers {
7
+ size_kb: 65536
8
+ fill_policy: RING_BUFFER
9
+ }
10
+ duration_ms: 10000
11
+
12
+ data_sources {
13
+ config {
14
+ name: "linux.perf"
15
+ perf_event_config {
16
+ timebase {
17
+ frequency: 100
18
+ }
19
+ callstack_sampling {
20
+ scope {
21
+ target_cmdline: "com.example.myapp"
22
+ }
23
+ }
24
+ }
25
+ }
26
+ }
27
+
28
+ data_sources {
29
+ config {
30
+ name: "linux.process_stats"
31
+ process_stats_config {
32
+ scan_all_processes_on_start: true
33
+ }
34
+ }
35
+ }
@@ -0,0 +1,21 @@
1
+ # Java heap dump (retention graph) of one app. Prefer the java_heap_dump
2
+ # helper script for a standalone dump; use this config when combining a heap
3
+ # dump with other data sources in one trace.
4
+ # Replace com.example.myapp with the app's package name.
5
+ buffers {
6
+ size_kb: 102400
7
+ }
8
+ duration_ms: 30000
9
+
10
+ data_sources {
11
+ config {
12
+ name: "android.java_hprof"
13
+ java_hprof_config {
14
+ process_cmdline: "com.example.myapp"
15
+ }
16
+ }
17
+ }
18
+
19
+ # Heap dumps can be large; stream to the output file instead of relying on
20
+ # the in-memory buffer alone.
21
+ write_into_file: true
@@ -0,0 +1,37 @@
1
+ # Long / field trace: runs until stopped, keeps the most recent data in a
2
+ # ring buffer, and periodically flushes to the output file so the trace
3
+ # survives longer than RAM allows.
4
+ buffers {
5
+ size_kb: 65536
6
+ fill_policy: RING_BUFFER
7
+ }
8
+
9
+ # No duration_ms: stop manually (Ctrl-C on record_android_trace), or add one.
10
+ # Move data to the output file periodically instead of only at the end.
11
+ write_into_file: true
12
+ file_write_period_ms: 2500
13
+ # Commit app shared-memory buffers periodically so events stay ordered.
14
+ flush_period_ms: 30000
15
+ # Stop when the output file reaches this size (bytes).
16
+ max_file_size_bytes: 1000000000
17
+
18
+ data_sources {
19
+ config {
20
+ name: "linux.ftrace"
21
+ ftrace_config {
22
+ ftrace_events: "sched/sched_switch"
23
+ ftrace_events: "sched/sched_wakeup"
24
+ ftrace_events: "power/cpu_frequency"
25
+ ftrace_events: "power/cpu_idle"
26
+ }
27
+ }
28
+ }
29
+
30
+ data_sources {
31
+ config {
32
+ name: "linux.process_stats"
33
+ process_stats_config {
34
+ scan_all_processes_on_start: true
35
+ }
36
+ }
37
+ }
@@ -0,0 +1,45 @@
1
+ # System and per-process memory over time: meminfo/vmstat counters polled
2
+ # periodically, per-process RSS via both polling and kernel rss_stat events,
3
+ # and low-memory-killer activity.
4
+ buffers {
5
+ size_kb: 32768
6
+ }
7
+ duration_ms: 30000
8
+
9
+ data_sources {
10
+ config {
11
+ name: "linux.sys_stats"
12
+ sys_stats_config {
13
+ meminfo_period_ms: 1000
14
+ meminfo_counters: MEMINFO_MEM_TOTAL
15
+ meminfo_counters: MEMINFO_MEM_FREE
16
+ meminfo_counters: MEMINFO_MEM_AVAILABLE
17
+ meminfo_counters: MEMINFO_SWAP_FREE
18
+ vmstat_period_ms: 1000
19
+ vmstat_counters: VMSTAT_NR_FREE_PAGES
20
+ vmstat_counters: VMSTAT_PGFAULT
21
+ vmstat_counters: VMSTAT_PGMAJFAULT
22
+ }
23
+ }
24
+ }
25
+
26
+ data_sources {
27
+ config {
28
+ name: "linux.process_stats"
29
+ process_stats_config {
30
+ proc_stats_poll_ms: 10000
31
+ scan_all_processes_on_start: true
32
+ }
33
+ }
34
+ }
35
+
36
+ data_sources {
37
+ config {
38
+ name: "linux.ftrace"
39
+ ftrace_config {
40
+ ftrace_events: "kmem/rss_stat"
41
+ ftrace_events: "lowmemorykiller/lowmemory_kill"
42
+ ftrace_events: "oom/oom_score_adj_update"
43
+ }
44
+ }
45
+ }
@@ -0,0 +1,21 @@
1
+ # Native (C/C++) heap profiling via heapprofd: sampled malloc/free callstacks
2
+ # for one app. Prefer the heap_profile helper script for a standalone profile;
3
+ # use this config when combining with other data sources.
4
+ # Replace com.example.myapp with the app's package name.
5
+ buffers {
6
+ size_kb: 65536
7
+ }
8
+ duration_ms: 30000
9
+
10
+ data_sources {
11
+ config {
12
+ name: "android.heapprofd"
13
+ heapprofd_config {
14
+ sampling_interval_bytes: 4096
15
+ process_cmdline: "com.example.myapp"
16
+ # To profile ART/JNI and custom allocators too, add: all_heaps: true
17
+ }
18
+ }
19
+ }
20
+
21
+ write_into_file: true
@@ -0,0 +1,33 @@
1
+ # CPU scheduling: who ran when, on which core, at what clock speed.
2
+ # The base layer for almost any performance investigation.
3
+ buffers {
4
+ size_kb: 32768
5
+ fill_policy: RING_BUFFER
6
+ }
7
+ duration_ms: 10000
8
+
9
+ data_sources {
10
+ config {
11
+ name: "linux.ftrace"
12
+ ftrace_config {
13
+ ftrace_events: "sched/sched_switch"
14
+ ftrace_events: "sched/sched_wakeup"
15
+ ftrace_events: "sched/sched_waking"
16
+ ftrace_events: "sched/sched_process_exit"
17
+ ftrace_events: "sched/sched_process_free"
18
+ ftrace_events: "power/cpu_frequency"
19
+ ftrace_events: "power/cpu_idle"
20
+ ftrace_events: "power/suspend_resume"
21
+ }
22
+ }
23
+ }
24
+
25
+ # Resolves thread/process ids in sched events to readable names.
26
+ data_sources {
27
+ config {
28
+ name: "linux.process_stats"
29
+ process_stats_config {
30
+ scan_all_processes_on_start: true
31
+ }
32
+ }
33
+ }
@@ -0,0 +1,102 @@
1
+ # Synthesizing Perfetto Trace Configs (Mix & Match)
2
+
3
+ Read this when you need a custom trace config - a mixture of data sources the
4
+ specialized helper scripts do not cover. Start from the exemplar configs in
5
+ `$SKILL_ROOT/recording/workflows/perfetto-trace-recording/references/example-configs/`,
6
+ then add, remove, or merge the pieces described below.
7
+
8
+ ## Shape of a config
9
+
10
+ A config is a `TraceConfig` protobuf - authoritative schema:
11
+ <https://raw.githubusercontent.com/google/perfetto/main/protos/perfetto/config/trace_config.proto>
12
+ (per-source option messages live under `protos/perfetto/config/` in the same
13
+ repo, e.g. `.../ftrace/ftrace_config.proto`) - written in protobuf **text
14
+ format** (conventionally saved as `config.pftxt`):
15
+
16
+ ```protobuf
17
+ buffers {
18
+ size_kb: 32768 # sizes are in KB, not bytes
19
+ fill_policy: RING_BUFFER # keep newest data; DISCARD keeps oldest
20
+ }
21
+ duration_ms: 10000 # omit to trace until stopped manually
22
+
23
+ data_sources {
24
+ config {
25
+ name: "linux.ftrace" # which producer to enable
26
+ ftrace_config { ... } # that producer's own options
27
+ }
28
+ }
29
+ # ...more data_sources blocks, one per source...
30
+ ```
31
+
32
+ Merging two configs = keep one `buffers` section and concatenate their
33
+ `data_sources` blocks. Each data source may appear at most once (the
34
+ `linux.ftrace` config especially: merge all `ftrace_events`,
35
+ `atrace_categories`, and `atrace_apps` entries into a single block).
36
+
37
+ ## Exemplar configs
38
+
39
+ Location:
40
+ `$SKILL_ROOT/recording/workflows/perfetto-trace-recording/references/example-configs/`
41
+
42
+ | File | Use case |
43
+ | :--- | :--- |
44
+ | `sched_cpu.pftxt` | CPU scheduling + frequency/idle (base layer). |
45
+ | `app_jank.pftxt` | Slow UI / dropped frames: atrace + frame timeline. |
46
+ | `memory_counters.pftxt` | System + per-process memory, LMK activity. |
47
+ | `java_heap_dump.pftxt` | Java heap retention graph for one app. |
48
+ | `native_heap.pftxt` | Sampled native malloc/free callstacks (heapprofd). |
49
+ | `cpu_profile.pftxt` | Periodic CPU callstack samples (traced_perf). |
50
+ | `long_background.pftxt` | Long/field traces: ring buffer + periodic writes. |
51
+
52
+ For a standalone heap dump, native heap profile, or CPU profile, prefer the
53
+ dedicated helper scripts in:
54
+ `$SKILL_ROOT/recording/workflows/perfetto-trace-recording/perfetto_trace_recording.md`.
55
+ Use exemplars when one trace must combine several sources.
56
+
57
+ ## Data sources at a glance
58
+
59
+ | `name` | What it records | Key options |
60
+ | :--- | :--- | :--- |
61
+ | `linux.ftrace` | Kernel events and atrace | `ftrace_events`, `atrace_categories`, `atrace_apps` |
62
+ | `linux.process_stats` | Process/thread names & stats | `scan_all_processes_on_start`, `proc_stats_poll_ms` |
63
+ | `linux.sys_stats` | Periodic `/proc` counters | `meminfo_period_ms`, `vmstat_period_ms`, `stat_period_ms` |
64
+ | `android.log` | Logcat | `android_log_config { log_ids: ... }` |
65
+ | `android.surfaceflinger.frametimeline` | Frame timelines (jank) | None needed |
66
+ | `android.java_hprof` | Java heap dump | `java_hprof_config { process_cmdline: ... }` |
67
+ | `android.heapprofd` | Native heap profiling | `heapprofd_config { sampling_interval_bytes, ... }` |
68
+ | `linux.perf` | CPU callstack sampling | `perf_event_config { timebase, callstack_sampling }` |
69
+ | `android.packages_list` | Package mapping | None needed |
70
+ | `android.power` | Battery counters | `android_power_config { battery_poll_ms, ... }` |
71
+ | `track_event` | Custom app trace events | `track_event_config { enabled_categories }` |
72
+
73
+ The full, authoritative field list for every data source is the generated
74
+ [TraceConfig reference](https://perfetto.dev/docs/reference/trace-config-proto);
75
+ per-source guides live under
76
+ [perfetto.dev/docs/data-sources](https://perfetto.dev/docs/data-sources/).
77
+
78
+ ## Top-level knobs
79
+
80
+ - `duration_ms` - trace length. Omit it to trace until the recording command
81
+ is stopped (Ctrl-C on `record_android_trace`).
82
+ - `buffers.fill_policy` - `RING_BUFFER` keeps newest data (right choice when
83
+ the interesting moment is at the end); `DISCARD` keeps the oldest.
84
+ - Long traces: `write_into_file: true` + `file_write_period_ms` stream buffer
85
+ to disk periodically so the trace can exceed RAM; `flush_period_ms: 30000`
86
+ keeps app-emitted events ordered; `max_file_size_bytes` bounds output.
87
+ - Buffer sizing rule of thumb: 32–64 MB (`size_kb: 32768`–`65536`) is plenty
88
+ for most 10–30s traces; heap dumps need ~100 MB or `write_into_file`.
89
+
90
+ ## Pitfalls
91
+
92
+ - All buffer sizes are **KB** (`size_kb: 32768` = 32 MB); durations are
93
+ **ms**.
94
+ - atrace data (categories and app events) only flows through the
95
+ `linux.ftrace` data source - there is no separate "atrace" source, and an
96
+ app's custom trace events appear only if its package is listed in
97
+ `atrace_apps` (or `atrace_apps: "*"`).
98
+ - Field-name typos are only caught when the config is parsed at record time:
99
+ `record_android_trace -c config.pftxt` fails fast with a parse error naming
100
+ the bad field, so treat that as your validator, fix, and retry.
101
+ - Text-format enum values are bare identifiers (`fill_policy: RING_BUFFER`),
102
+ and strings are quoted.
@@ -0,0 +1,15 @@
1
+ # Environment setup
2
+
3
+ ## Set `$SKILL_ROOT`
4
+
5
+ Set up `$SKILL_ROOT` once per session.
6
+
7
+ Every file this skill references - workflow markdown, reference docs, helper
8
+ scripts, and downloaded dependencies - is written in the form `$SKILL_ROOT/...`,
9
+ relative to the **skill root** (the directory holding this skill's `SKILL.md`).
10
+ Set it once to the absolute path of the directory you loaded `SKILL.md` from:
11
+
12
+ ```sh
13
+ # Substitute with the directory the SKILL.md lives in.
14
+ export SKILL_ROOT="/absolute/path/to/skills/profilers/android-profiler"
15
+ ```
@@ -0,0 +1,29 @@
1
+ # Getting `trace_processor` working
2
+
3
+ > **Prerequisite:** Ensure `$SKILL_ROOT` is initialized per
4
+ > `$SKILL_ROOT/references/env_setup.md`.
5
+
6
+ ## Put `trace_processor` on the `PATH`
7
+
8
+ If the workspace does not already have a pre-downloaded `trace_processor`
9
+ wrapper, download it from <https://get.perfetto.dev/trace_processor> to
10
+ `$SKILL_ROOT/bin/trace_processor` and make it invocable for this session:
11
+
12
+ ```sh
13
+ chmod +x "$SKILL_ROOT/bin/trace_processor" # ensure exec bit is set
14
+ export PATH="$SKILL_ROOT/bin:$PATH"
15
+ trace_processor --version # smoke test (ensure > v57.0, e.g. v57.1+)
16
+ ```
17
+
18
+ After this, every bare `trace_processor ...` command in this skill works
19
+ verbatim. On Windows, skip the `PATH` setup and invoke it as
20
+ `python "$SKILL_ROOT/bin/trace_processor" ...` instead.
21
+
22
+ Notes:
23
+
24
+ - The first invocation downloads the prebuilt native binary (picking the
25
+ right one for the host platform) into `~/.local/share/perfetto/prebuilts/`
26
+ and caches it; only the first call pays the download cost.
27
+ - If the user's environment has its own mandatory `trace_processor`
28
+ (Google-internal, OEM build environments, CI images), prefer that
29
+ team-specific setup instead.
@@ -0,0 +1,327 @@
1
+ # Querying Perfetto traces
2
+
3
+ This reference explains how to extract data from a Perfetto trace file
4
+ (`.pftrace`, `.perfetto-trace`, `.pb`) using `trace_processor` and
5
+ PerfettoSQL. Read it for ad-hoc querying outside a guided workflow; the
6
+ workflows under `$SKILL_ROOT/analysis/workflows` and
7
+ `$SKILL_ROOT/recording/workflows` carry their own queries.
8
+
9
+ The `trace_processor` binary is what every other Perfetto analysis tool
10
+ runs on top of, including the Perfetto UI. Reference docs:
11
+ <https://perfetto.dev/docs/analysis/trace-processor>.
12
+
13
+ > **Prerequisite - `trace_processor` must be invokable.** Before
14
+ > running any of the shell commands below, read
15
+ > `$SKILL_ROOT/references/perfetto/setup.md`. It defines how to make
16
+ > the bare `trace_processor` commands below work in this environment.
17
+
18
+ ## Querying a trace: sessions
19
+
20
+ Querying goes through a **session**: load the trace once into a named
21
+ background session, then run every query against it with `--remote`.
22
+ Parsing a trace is the expensive part (tens of seconds for a multi-GB
23
+ trace); the session pays it once, and every real analysis runs more than
24
+ one query.
25
+
26
+ ```sh
27
+ # 1. Load the trace into a background session - once per trace.
28
+ # Pick a descriptive session name (e.g. derived from the trace file).
29
+ trace_processor server unix --name mysession --daemonize TRACE_FILE
30
+
31
+ # 2. Run queries against the warm session: instant, no reparse.
32
+ trace_processor query --remote mysession \
33
+ "SELECT ts, dur, name FROM slice WHERE dur > 5e8 LIMIT 5"
34
+
35
+ # 3. When you are completely done with the trace:
36
+ trace_processor server kill mysession
37
+ ```
38
+
39
+ Multiple statements separated by `;` are supported in one invocation.
40
+
41
+ Session rules:
42
+
43
+ - Session names are managed by trace_processor in a per-user session
44
+ directory - there are no ports to choose and no collisions with other
45
+ agents or the Perfetto UI.
46
+ - **Session state persists across `query --remote` calls.** A
47
+ `CREATE PERFETTO TABLE` or `INCLUDE PERFETTO MODULE` run in one call is
48
+ visible in the next, so materializing intermediate results pays off
49
+ across invocations.
50
+ - Flags that configure trace loading (`--full-sort`, `--add-sql-package`, ...)
51
+ belong on the `server unix` invocation, not on `query --remote` - the client
52
+ rejects them with an explanatory error.
53
+ - `--remote` also accepts an absolute `*.sock` path or `host:port`;
54
+ names are the common case.
55
+ - Forgotten sessions are reaped automatically after 30 minutes idle
56
+ (`--idle-timeout`), but kill your session when the analysis is done.
57
+
58
+ `TRACE_FILE` can be a local path, an `http(s)://` URL, or a Perfetto UI
59
+ share link (`https://ui.perfetto.dev/#!/?s=<hash>`) - in the last two
60
+ cases trace_processor downloads the trace for you (cached under
61
+ `~/.cache/perfetto/` or the platform equivalent), resolving the share
62
+ link to its underlying trace first.
63
+
64
+ For a single throwaway query on a small trace you _can_ skip the session
65
+ (`trace_processor query TRACE_FILE "..."` parses, queries, and exits),
66
+ but treat that as the exception: it re-parses the trace on every
67
+ invocation and forgets created tables and included modules between
68
+ calls. Default to a session.
69
+
70
+ ## Discovering what's in the trace
71
+
72
+ PerfettoSQL ships with **intrinsic table-functions** for browsing the
73
+ loaded standard library - modules, tables/views, functions, macros. Use
74
+ these to find what's available and to verify if a Standard Library module
75
+ already provides the needed abstraction before drafting custom logic.
76
+
77
+ **Mandatory Schema Check:** Do not guess column names or join keys. Always
78
+ use a plain `LIMIT 0` query to read the exact column schema of any specific
79
+ table, view, or query result before drafting your query.
80
+
81
+ > **Intrinsic surface - not stable API.** The `__intrinsic_*` names below
82
+ > are an implementation detail of trace processor. They're fair game for
83
+ > an agent to use during a session because this reference is loaded, but
84
+ > **don't bake `__intrinsic_*` names into committed scripts, dashboards,
85
+ > or stdlib modules** - they can change without notice.
86
+
87
+ ```sql
88
+ -- 1. List every stdlib module currently available.
89
+ SELECT package, module FROM __intrinsic_stdlib_modules ORDER BY 1, 2;
90
+
91
+ -- 2. List the tables/views a specific module exposes
92
+ -- (after INCLUDE PERFETTO MODULE).
93
+ INCLUDE PERFETTO MODULE slices.with_context;
94
+ SELECT name, type, exposed, description
95
+ FROM __intrinsic_stdlib_tables('slices.with_context');
96
+
97
+ -- 3. List functions / macros a module exposes.
98
+ SELECT name, return_type, args
99
+ FROM __intrinsic_stdlib_functions('slices.with_context');
100
+ SELECT name, return_type, args
101
+ FROM __intrinsic_stdlib_macros('android.memory.heap_graph.helpers');
102
+
103
+ -- 4. Read the column schema of any table, view, or query.
104
+ -- LIMIT 0 returns the result header with no row scan; trace_processor
105
+ -- prints "column N = <name>" lines for each column.
106
+ SELECT * FROM slice LIMIT 0;
107
+ SELECT * FROM thread_or_process_slice LIMIT 0;
108
+ SELECT * FROM (SELECT ts, dur, name FROM slice WHERE dur > 0) LIMIT 0;
109
+ ```
110
+
111
+ Useful starting points for any trace:
112
+
113
+ | View | What's in it |
114
+ | :------------- | :--------------------------------------------------------------- |
115
+ | `slice` | Atrace slices, async slices, anything with a duration on a track |
116
+ | `thread` | One row per thread |
117
+ | `process` | One row per process |
118
+ | `thread_state` | State transitions (Running, Runnable, Sleeping, ...) |
119
+ | `sched_slice` | When threads were on-CPU |
120
+ | `counter` | Time-series counter samples |
121
+ | `track` | Every track in the trace; join on `track_id` to other tables |
122
+
123
+ Static reference for the public surface (does not require a running
124
+ trace_processor): <https://perfetto.dev/docs/analysis/sql-tables>.
125
+
126
+ ## Using the standard library
127
+
128
+ Most useful queries are _much_ shorter when you build on stdlib modules
129
+ instead of joining raw tables yourself. Generated stdlib reference:
130
+ <https://perfetto.dev/docs/analysis/stdlib-docs>.
131
+
132
+ Include a module before referencing the views, tables or macros it
133
+ defines:
134
+
135
+ ```sql
136
+ INCLUDE PERFETTO MODULE slices.with_context;
137
+
138
+ SELECT name, dur, thread_name, process_name
139
+ FROM thread_or_process_slice
140
+ WHERE dur > 1e9 -- slices longer than 1s
141
+ ORDER BY dur DESC
142
+ LIMIT 20;
143
+ ```
144
+
145
+ A few commonly used modules to know:
146
+
147
+ - `slices.with_context` - slice rows joined with their thread / process.
148
+ - `sched.with_context` - `sched_slice` joined with thread / process.
149
+ - `android.startup.startups` - one row per app startup.
150
+ - `stacks.cpu_profiling` - flat samples and call-graph helpers.
151
+ - `android.memory.heap_graph.dominator_tree` - retained-size analysis for
152
+ Java heap dumps.
153
+
154
+ The module name maps directly to the file path under the stdlib root:
155
+ `foo.bar` lives at `foo/bar.sql`. Browse the full list at the stdlib
156
+ reference linked above.
157
+
158
+ ## Tips for writing good PerfettoSQL
159
+
160
+ - **Reach for stdlib first.** If you find yourself joining `slice` to
161
+ `thread_track` to `thread` to `process`, there is almost certainly a
162
+ stdlib module that already does it. Check the stdlib reference before
163
+ writing the join.
164
+ - **Filter on `dur > 0` and Trace Boundaries carefully.** Some slices have
165
+ `dur = -1` (still open at trace end) and some have `dur = 0` (instant
166
+ events). Be explicit about which you mean. When calculating a bounding box
167
+ (for example, `ts + dur`) or summing durations (`SUM(dur)`), handle
168
+ incomplete durations using: `IIF(dur = -1, trace_end() - ts, dur)`.
169
+ - **Robust State Transitions.** Avoid manual timestamp arithmetic (for
170
+ example, `ts + dur = next.ts`) to join adjacent events. Rely on standard
171
+ library modules (for example, `sched.runnable`, `linux.perf.counters`,
172
+ `intervals.overlap`) which safely handle trace gaps and preemptions.
173
+ - **Working with Identifiers:**
174
+ - **Use Unique Identifiers for Joins:** When writing SQL queries in
175
+ Perfetto, you must join tables using `utid` (unique thread ID) or `upid`
176
+ (unique process ID) instead of regular `tid` or `pid`. **Why it's
177
+ useful**: The operating system recycles `TIDs` and `PIDs`, while `UTIDs`
178
+ and `UPIDs` remain unique for the lifetime of the trace, which prevents
179
+ incorrect joins.
180
+ - Columns like `id`, `utid`, `upid`, `track_id` are not stable across traces
181
+ or even runs of trace_processor on the same trace. You can use them
182
+ **inside** a query as join keys, but alongside IDs, always join out to
183
+ a stable name (`thread.name`, `process.name`, `slice.name`) when reporting
184
+ results to the user.
185
+ - **Materialize expensive intermediate results.** `CREATE PERFETTO TABLE foo
186
+ AS SELECT ...` caches the result so subsequent queries don't redo the work.
187
+ - _Note for `SPAN_JOIN`:_ Intermediate tables fed into a `SPAN_JOIN` must
188
+ be materialized using `CREATE PERFETTO TABLE`, not `CREATE VIEW`.
189
+ - **Idempotency.** Ensure queries are idempotent to prevent "already exists"
190
+ errors during multiple executions.
191
+ - For Perfetto objects, always use `CREATE OR REPLACE`:
192
+ `CREATE OR REPLACE PERFETTO {TABLE|VIEW|MACRO|FUNCTION}`.
193
+ - For SQLite Virtual Tables (such as `SPAN_JOIN`), `CREATE OR REPLACE` is
194
+ not supported. Explicitly drop them first:
195
+ `DROP TABLE IF EXISTS my_table;`
196
+ `CREATE VIRTUAL TABLE my_table USING SPAN_JOIN(...);`
197
+ - For standard SQLite indexes, prepend `DROP INDEX IF EXISTS index_name;`.
198
+ - **`SPAN_JOIN` safety.** `SPAN_JOIN` will crash if intervals **within the
199
+ same input table** overlap. Always use the `PARTITIONED {column}` (for
200
+ example, `PARTITIONED track_id`) clause to isolate intervals.
201
+ - **Avoid `SELECT *` in saved queries.** Trace processor table schemas can
202
+ gain columns; pin the columns you actually use.
203
+ - **Use `EXPLAIN QUERY PLAN` if a query is slow.** It shows whether SQLite is
204
+ using indexes. Counter and slice tables have built-in indexes on `ts` and
205
+ `track_id`; queries that don't filter on either will scan the whole table.
206
+ - **Argument Extraction:** Use `EXTRACT_ARG(arg_set_id, 'key')` to fetch event
207
+ properties instead of manually joining the `args` table.
208
+ - **JSON Parsing:** When dealing with JSON text, use standard SQLite JSON
209
+ functions (for example, `json_extract()`) to extract values.
210
+ - **String Matching (Always use GLOB).** Use `GLOB` instead of `LIKE`. `LIKE`
211
+ causes performance bottlenecks and treats underscores (`_`) as wildcards,
212
+ leading to bugs.
213
+ - **Exact matches:** Use `=`.
214
+ - **Substring matches:** Use `GLOB` with `*` (for example,
215
+ `name GLOB '*RenderThread*'`).
216
+ - **Case-insensitive matches:** Use `LOWER(name) GLOB` and make sure the
217
+ search string is fully lowercase (for example,
218
+ `LOWER(name) GLOB '*renderthread*'`). Use this when dealing with
219
+ inconsistent trace capitalization (for example, `WakeLock` vs `wakelock`).
220
+ - **Alias Precision.** Always prefix column names with table or view alias,
221
+ that is: `{alias}.{column_name}`.
222
+
223
+ ## Common Analysis Patterns
224
+
225
+ - **Calculating Time Overlaps & CPU Time:**
226
+ 1. **Primary Method (MANDATORY):** Always search the standard library first
227
+ before writing custom interval logic. For example, to find the exact CPU
228
+ execution time of a slice, do not calculate it manually; instead, search
229
+ the docs and use the `slices.cpu_time` module.
230
+ 2. **Fallback Method (Use ONLY if you have verified no stdlib module or
231
+ `SPAN_JOIN` applies):** If you must calculate custom overlap durations
232
+ between two different sets of time intervals `[start1, end1]` and
233
+ `[start2, end2]`:
234
+ - **Condition:** The intervals overlap if `start1 < end2` and
235
+ `start2 < end1`.
236
+ - **Duration:** The overlap duration is calculated as
237
+ `MIN(end1, end2) - MAX(start1, start2)`.
238
+ - **Important:** Incomplete Perfetto slices have a duration of -1
239
+ (`dur = -1`). Always calculate the effective end time using
240
+ `ts + IIF(dur = -1, trace_end() - ts, dur)` before applying this logic.
241
+ - Include the `android.startup.startups` module and query
242
+ `android_thread_slices_for_all_startups` (or `android_startups`) for
243
+ app startup requests.
244
+ - Join `counter_track` with `counter` to get values of counter with a
245
+ specific name.
246
+ - When querying for a CPU frequency counter, include the `linux.cpu.frequency`
247
+ module and use the `cpu_frequency_counters` table.
248
+ - **Window Size:** When looking for events around a specific timestamp, start
249
+ with 100ms as the window size.
250
+ - **Total Duration:** To calculate the total time spent in slices matching a
251
+ specific name pattern (for example, `*{name_pattern}*`), you must sum their
252
+ durations. **Why it's useful**: This helps quantify the total impact of a
253
+ specific function or feature on performance across multiple calls. Here is
254
+ an example query (note the safe handling of incomplete slices):
255
+ ```sql
256
+ SELECT
257
+ count(*) as total_count,
258
+ sum(IIF(slice.dur = -1, trace_end() - slice.ts, slice.dur)) / 1e6
259
+ as total_dur_ms
260
+ FROM slice
261
+ WHERE slice.name GLOB '*{name_pattern}*';
262
+ ```
263
+
264
+ ## Analytical Workflow (Standard Operating Procedure)
265
+
266
+ To ensure accuracy and efficiency, follow these steps:
267
+
268
+ 1. **Research & Dissection:** Identify the core question and required data
269
+ points.
270
+ 2. **Mandatory Schema Validation:** Locate relevant modules via
271
+ `__intrinsic_stdlib_modules` and their tables via
272
+ `__intrinsic_stdlib_tables('module_name')`. Verify column names and types.
273
+ - **Intent Check:** You must verify if a stdlib module already provides
274
+ the needed abstraction before drafting manual arithmetic or custom joins.
275
+
276
+ - **IMPORTANT:** If your query requires calculating overlaps, intersections,
277
+ or boundaries between intervals, you MUST search `__intrinsic_stdlib_modules`
278
+ globally (for example, `WHERE module GLOB '*overlap*'`) before writing
279
+ `MIN()/MAX()` or `IIF(dur = -1...)` logic.
280
+
281
+ 3. **Draft & Validate Loop (Max 3 Iterations):**
282
+
283
+ - [ ] **Draft:** Use only verified schemas. Ensure `INCLUDE PERFETTO MODULE`
284
+ is present for non-prelude modules.
285
+ - [ ] **Verify Idempotency:** Use `CREATE OR REPLACE` or `DROP TABLE IF EXISTS`
286
+ for virtual tables.
287
+ - [ ] **Check Precision:** Are ALL columns prefixed with aliases (e.g.,
288
+ `s.name`)? Are you joining on `utid`/`upid`?
289
+ - [ ] **String Matching:** Did you use `GLOB` or `=` instead of `LIKE`?
290
+ - [ ] **Span Join Check:** If using `SPAN_JOIN`, are tables `PARTITIONED`
291
+ and materialized?
292
+ - [ ] **Execute:** Run against the session:
293
+ `trace_processor query --remote SESSION "QUERY"`.
294
+
295
+ **Execution Rules:**
296
+
297
+ - **File Usage:** If you must create a SQL file to execute queries (for
298
+ example, due to query length or escaping issues), you must create them
299
+ in the `/tmp/` directory.
300
+ - **Failure Resilience:** Debug and fix SQL syntax and logic errors when
301
+ query fails. Don't simplify the analytical intent to pass validation.
302
+ For example, if requested to calculate an overlap or intersection, you
303
+ must fix the intersection math. Don't substitute with disjoint queries
304
+ (for example, returning independent total durations) as a workaround.
305
+
306
+ 4. **Cleanup & Finalize:**
307
+
308
+ - Explicitly return and state the final validated SQL and explain the
309
+ results to the user.
310
+ - **Save an analysis report.** Write a markdown file in the working
311
+ directory (default `perfetto_analysis_report.md`) containing: the
312
+ question investigated, the trace file(s) analyzed, the findings with
313
+ concrete numbers, the final validated queries (so the analysis can be
314
+ re-run), and open questions / next steps. Point the user at it in
315
+ your final message.
316
+ - Before finishing, delete any temporary SQL files created in `/tmp/`.
317
+
318
+ ## Where to look for more
319
+
320
+ - Language tour:
321
+ <https://perfetto.dev/docs/analysis/perfetto-sql-getting-started>
322
+ - Trace processor reference:
323
+ <https://perfetto.dev/docs/analysis/trace-processor>
324
+ - Generated table reference:
325
+ <https://perfetto.dev/docs/analysis/sql-tables>
326
+ - Generated stdlib reference:
327
+ <https://perfetto.dev/docs/analysis/stdlib-docs>