reis-mobile 0.3.6 → 0.5.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.
- package/.claude-plugin/marketplace.json +2 -2
- package/.claude-plugin/plugin.json +1 -1
- package/CHANGELOG.md +39 -0
- package/README.md +135 -297
- package/THIRD_PARTY_NOTICES.md +221 -4
- package/agents/android-architect.md +89 -0
- package/agents/android-performance-engineer.md +92 -0
- package/agents/android-test-engineer.md +97 -0
- package/agents/flutter-test-engineer.md +2 -0
- package/agents/ios-architect.md +93 -0
- package/agents/ios-performance-engineer.md +92 -0
- package/agents/ios-test-engineer.md +95 -0
- package/agents/lead-mobile.md +10 -1
- package/agents/mobile-code-reviewer.md +2 -0
- package/agents/mobile-staff-engineer.md +1 -1
- package/agents/rn-architect.md +94 -0
- package/agents/rn-performance-engineer.md +92 -0
- package/agents/rn-test-engineer.md +98 -0
- package/bin/reis-mobile.mjs +59 -17
- package/commands/debate.md +10 -1
- package/commands/debug.md +60 -0
- package/commands/reis-mobile.md +7 -2
- package/core/config/project.mjs +59 -0
- package/core/registry/frontmatter.mjs +15 -4
- package/core/registry/registry.mjs +28 -1
- package/core/router/intents.mjs +2 -0
- package/core/router/router.mjs +10 -5
- package/package.json +24 -3
- package/skills/mobile-android/SKILL.md +29 -0
- package/skills/mobile-android/references/build-and-performance/agp-9-upgrade/GUIDE.md +87 -0
- package/skills/mobile-android/references/build-and-performance/agp-9-upgrade/references/android/build/migrate-to-built-in-kotlin.md +416 -0
- package/skills/mobile-android/references/build-and-performance/agp-9-upgrade/references/android/build/releases/agp-9-0-0-release-notes.md +554 -0
- package/skills/mobile-android/references/build-and-performance/agp-9-upgrade/references/buildconfig.md +54 -0
- package/skills/mobile-android/references/build-and-performance/agp-9-upgrade/references/ksp-kapt.md +39 -0
- package/skills/mobile-android/references/build-and-performance/agp-9-upgrade/references/paparazzi-gradle-9.md +30 -0
- package/skills/mobile-android/references/build-and-performance/agp-9-upgrade/references/recipes.md +62 -0
- package/skills/mobile-android/references/build-and-performance/android-cli/GUIDE.md +450 -0
- package/skills/mobile-android/references/build-and-performance/android-cli/references/interact.md +113 -0
- package/skills/mobile-android/references/build-and-performance/android-cli/references/journeys.md +120 -0
- package/skills/mobile-android/references/build-and-performance/android-profiler/GUIDE.md +34 -0
- package/skills/mobile-android/references/build-and-performance/android-profiler/analysis/analysis_orchestrator.md +32 -0
- package/skills/mobile-android/references/build-and-performance/android-profiler/analysis/workflows/perfetto-sql/perfetto_sql.md +28 -0
- package/skills/mobile-android/references/build-and-performance/android-profiler/analysis/workflows/perfetto-trace-analysis/perfetto_trace_analysis.md +121 -0
- package/skills/mobile-android/references/build-and-performance/android-profiler/analysis/workflows/perfetto-trace-analysis/references/guiding_principles.md +51 -0
- package/skills/mobile-android/references/build-and-performance/android-profiler/analysis/workflows/perfetto-trace-analysis/references/hints/domain_hints_template.md +7 -0
- package/skills/mobile-android/references/build-and-performance/android-profiler/analysis/workflows/perfetto-trace-analysis/references/hints/subsystems/hints_cpu.md +56 -0
- package/skills/mobile-android/references/build-and-performance/android-profiler/analysis/workflows/perfetto-trace-analysis/references/hints/subsystems/hints_graphics.md +51 -0
- package/skills/mobile-android/references/build-and-performance/android-profiler/analysis/workflows/perfetto-trace-analysis/references/hints/subsystems/hints_io.md +46 -0
- package/skills/mobile-android/references/build-and-performance/android-profiler/analysis/workflows/perfetto-trace-analysis/references/hints/subsystems/hints_ipc.md +41 -0
- package/skills/mobile-android/references/build-and-performance/android-profiler/analysis/workflows/perfetto-trace-analysis/references/hints/subsystems/hints_memory.md +55 -0
- package/skills/mobile-android/references/build-and-performance/android-profiler/analysis/workflows/perfetto-trace-analysis/references/hints/subsystems/hints_power.md +33 -0
- package/skills/mobile-android/references/build-and-performance/android-profiler/analysis/workflows/perfetto-trace-analysis/references/per_candidate_analysis.md +172 -0
- package/skills/mobile-android/references/build-and-performance/android-profiler/analysis/workflows/perfetto-trace-analysis/references/triage.md +94 -0
- package/skills/mobile-android/references/build-and-performance/android-profiler/recording/recording_orchestrator.md +36 -0
- package/skills/mobile-android/references/build-and-performance/android-profiler/recording/workflows/perfetto-trace-recording/perfetto_trace_recording.md +148 -0
- package/skills/mobile-android/references/build-and-performance/android-profiler/recording/workflows/perfetto-trace-recording/references/example-configs/app_jank.pftxt +43 -0
- package/skills/mobile-android/references/build-and-performance/android-profiler/recording/workflows/perfetto-trace-recording/references/example-configs/cpu_profile.pftxt +35 -0
- package/skills/mobile-android/references/build-and-performance/android-profiler/recording/workflows/perfetto-trace-recording/references/example-configs/java_heap_dump.pftxt +21 -0
- package/skills/mobile-android/references/build-and-performance/android-profiler/recording/workflows/perfetto-trace-recording/references/example-configs/long_background.pftxt +37 -0
- package/skills/mobile-android/references/build-and-performance/android-profiler/recording/workflows/perfetto-trace-recording/references/example-configs/memory_counters.pftxt +45 -0
- package/skills/mobile-android/references/build-and-performance/android-profiler/recording/workflows/perfetto-trace-recording/references/example-configs/native_heap.pftxt +21 -0
- package/skills/mobile-android/references/build-and-performance/android-profiler/recording/workflows/perfetto-trace-recording/references/example-configs/sched_cpu.pftxt +33 -0
- package/skills/mobile-android/references/build-and-performance/android-profiler/recording/workflows/perfetto-trace-recording/references/trace_config_reference.md +102 -0
- package/skills/mobile-android/references/build-and-performance/android-profiler/references/env_setup.md +15 -0
- package/skills/mobile-android/references/build-and-performance/android-profiler/references/perfetto/setup.md +29 -0
- package/skills/mobile-android/references/build-and-performance/android-profiler/references/perfetto/sql.md +327 -0
- package/skills/mobile-android/references/build-and-performance/r8-analyzer/GUIDE.md +53 -0
- package/skills/mobile-android/references/build-and-performance/r8-analyzer/references/CONFIGURATION-ANALYZER.md +287 -0
- package/skills/mobile-android/references/build-and-performance/r8-analyzer/references/CONFIGURATION.md +44 -0
- package/skills/mobile-android/references/build-and-performance/r8-analyzer/references/KEEP-RULES-IMPACT-HIERARCHY.md +83 -0
- package/skills/mobile-android/references/build-and-performance/r8-analyzer/references/REDUNDANT-RULES.md +222 -0
- package/skills/mobile-android/references/build-and-performance/r8-analyzer/references/REFLECTION-GUIDE.md +139 -0
- package/skills/mobile-android/references/build-and-performance/r8-analyzer/references/REPORT_FORMAT.md +51 -0
- package/skills/mobile-android/references/build-and-performance/r8-analyzer/references/android/topic/performance/app-optimization/enable-app-optimization.md +252 -0
- package/skills/mobile-android/references/build-and-performance/r8-analyzer/references/android/training/testing/other-components/ui-automator.md +312 -0
- package/skills/mobile-android/references/build-and-performance.md +12 -0
- package/skills/mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer/GUIDE.md +317 -0
- package/skills/mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer/references/android/design/ui/ai-glasses/guides/interaction/inputs.md +67 -0
- package/skills/mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer/references/android/develop/xr/jetpack-xr-sdk/access-hardware-projected-context.md +388 -0
- package/skills/mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer/references/android/develop/xr/jetpack-xr-sdk/jetpack-compose-glimmer/buttons.md +139 -0
- package/skills/mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer/references/android/develop/xr/jetpack-xr-sdk/jetpack-compose-glimmer/cards.md +148 -0
- package/skills/mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer/references/android/develop/xr/jetpack-xr-sdk/jetpack-compose-glimmer/focus.md +107 -0
- package/skills/mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer/references/android/develop/xr/jetpack-xr-sdk/jetpack-compose-glimmer/icons.md +90 -0
- package/skills/mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer/references/android/develop/xr/jetpack-xr-sdk/jetpack-compose-glimmer/text.md +69 -0
- package/skills/mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer/references/android/develop/xr/jetpack-xr-sdk/jetpack-compose-glimmer/title-chips.md +82 -0
- package/skills/mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer/references/android/develop/xr/jetpack-xr-sdk/request-hardware-permissions.md +213 -0
- package/skills/mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer/references/button-samples-source.md +176 -0
- package/skills/mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer/references/button-source.md +203 -0
- package/skills/mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer/references/card-samples-source.md +296 -0
- package/skills/mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer/references/card-source.md +515 -0
- package/skills/mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer/references/deptheffect-source.md +224 -0
- package/skills/mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer/references/deptheffectlevels-source.md +105 -0
- package/skills/mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer/references/glimmersansflextypography-source.md +270 -0
- package/skills/mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer/references/glimmertheme-source.md +182 -0
- package/skills/mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer/references/icon-source.md +388 -0
- package/skills/mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer/references/iconbutton-source.md +126 -0
- package/skills/mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer/references/iconsizes-source.md +78 -0
- package/skills/mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer/references/list-source.md +27 -0
- package/skills/mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer/references/listitem-source.md +272 -0
- package/skills/mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer/references/liststate-source.md +427 -0
- package/skills/mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer/references/material-hct-source.md +217 -0
- package/skills/mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer/references/projectedcontext-source.md +265 -0
- package/skills/mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer/references/stack-source.md +368 -0
- package/skills/mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer/references/stackitemscope-source.md +440 -0
- package/skills/mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer/references/stackstate-source.md +325 -0
- package/skills/mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer/references/surface-source.md +1211 -0
- package/skills/mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer/references/titlechip-samples-source.md +101 -0
- package/skills/mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer/references/titlechip-source.md +131 -0
- package/skills/mobile-android/references/devices/leanback-to-compose-tv-migration/GUIDE.md +707 -0
- package/skills/mobile-android/references/devices/leanback-to-compose-tv-migration/references/android/training/tv/get-started/navigation.md +372 -0
- package/skills/mobile-android/references/devices/leanback-to-compose-tv-migration/references/android/training/tv/playback/compose/browse.md +243 -0
- package/skills/mobile-android/references/devices/leanback-to-compose-tv-migration/references/android/training/tv/playback/compose/index.md +153 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/GUIDE.md +341 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/android/training/wearables/compose/migrate-to-material3.md +677 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/foundation/AmbientModeSample.kt.md +123 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/foundation/AmbientModeSample.kt.md.txt +123 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/foundation/CurvedWorldSample.kt.md +430 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/foundation/CurvedWorldSample.kt.md.txt +430 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/foundation/ExpandableSample.kt.md +99 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/foundation/ExpandableSample.kt.md.txt +99 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/foundation/HierarchicalFocusSample.kt.md +141 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/foundation/HierarchicalFocusSample.kt.md.txt +141 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/foundation/PagerSamples.kt.md +56 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/foundation/PagerSamples.kt.md.txt +56 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/foundation/RotarySamples.kt.md +153 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/foundation/RotarySamples.kt.md.txt +153 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/foundation/ScalingLazyColumnSample.kt.md +131 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/foundation/ScalingLazyColumnSample.kt.md.txt +131 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/foundation/SwipeToDismissBoxSample.kt.md +169 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/foundation/SwipeToDismissBoxSample.kt.md.txt +169 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/foundation/SwipeToRevealSample.kt.md +282 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/foundation/SwipeToRevealSample.kt.md.txt +282 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/foundation/TransformingLazyColumnSample.kt.md +335 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/foundation/TransformingLazyColumnSample.kt.md.txt +335 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/AlertDialogSample.kt.md +377 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/AlertDialogSample.kt.md.txt +377 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/AnimatedTextSample.kt.md +165 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/AnimatedTextSample.kt.md.txt +165 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/ButtonGroupSample.kt.md +91 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/ButtonGroupSample.kt.md.txt +91 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/ButtonSample.kt.md +496 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/ButtonSample.kt.md.txt +496 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/CardSample.kt.md +470 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/CardSample.kt.md.txt +470 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/CheckboxButtonSample.kt.md +67 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/CheckboxButtonSample.kt.md.txt +67 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/ConfirmationDialogSample.kt.md +162 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/ConfirmationDialogSample.kt.md.txt +162 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/CurvedTextSamples.kt.md +78 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/CurvedTextSamples.kt.md.txt +78 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/DatePickerSample.kt.md +131 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/DatePickerSample.kt.md.txt +131 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/DynamicColorSchemeSample.kt.md +74 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/DynamicColorSchemeSample.kt.md.txt +74 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/EdgeButtonSample.kt.md +63 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/EdgeButtonSample.kt.md.txt +63 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/FadingExpandingLabelSample.kt.md +60 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/FadingExpandingLabelSample.kt.md.txt +60 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/IconButtonSample.kt.md +125 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/IconButtonSample.kt.md.txt +125 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/IconToggleButtonSample.kt.md +116 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/IconToggleButtonSample.kt.md.txt +116 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/LevelIndicatorSample.kt.md +68 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/LevelIndicatorSample.kt.md.txt +68 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/LinearProgressIndicatorSample.kt.md +50 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/LinearProgressIndicatorSample.kt.md.txt +50 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/ListHeaderSample.kt.md +177 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/ListHeaderSample.kt.md.txt +177 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/OneHandedGestureSamples.kt.md +651 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/OneHandedGestureSamples.kt.md.txt +651 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/OpenOnPhoneDialogSample.kt.md +57 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/OpenOnPhoneDialogSample.kt.md.txt +57 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/PageIndicatorSample.kt.md +110 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/PageIndicatorSample.kt.md.txt +110 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/PagerScaffoldSample.kt.md +204 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/PagerScaffoldSample.kt.md.txt +204 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/PickerGroupSample.kt.md +139 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/PickerGroupSample.kt.md.txt +139 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/PickerSample.kt.md +111 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/PickerSample.kt.md.txt +111 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/PlaceholderSample.kt.md +184 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/PlaceholderSample.kt.md.txt +184 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/ProgressIndicatorSample.kt.md +263 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/ProgressIndicatorSample.kt.md.txt +263 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/RadioButtonSample.kt.md +105 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/RadioButtonSample.kt.md.txt +105 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/ScaffoldSample.kt.md +146 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/ScaffoldSample.kt.md.txt +146 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/ScrollAwaySample.kt.md +97 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/ScrollAwaySample.kt.md.txt +97 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/ScrollIndicatorSample.kt.md +66 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/ScrollIndicatorSample.kt.md.txt +66 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/SliderSample.kt.md +86 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/SliderSample.kt.md.txt +86 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/StepperSample.kt.md +148 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/StepperSample.kt.md.txt +148 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/SurfaceTransformationSample.kt.md +166 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/SurfaceTransformationSample.kt.md.txt +166 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/SwipeToDismissBoxSample.kt.md +172 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/SwipeToDismissBoxSample.kt.md.txt +172 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/SwipeToRevealSample.kt.md +367 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/SwipeToRevealSample.kt.md.txt +367 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/SwitchButtonSample.kt.md +66 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/SwitchButtonSample.kt.md.txt +66 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/TextButtonSample.kt.md +115 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/TextButtonSample.kt.md.txt +115 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/TextToggleButtonSample.kt.md +71 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/TextToggleButtonSample.kt.md.txt +71 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/TimePickerSample.kt.md +151 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/TimePickerSample.kt.md.txt +151 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/TimeTextSample.kt.md +65 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/TimeTextSample.kt.md.txt +65 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/TransformationSpecSample.kt.md +246 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/TransformationSpecSample.kt.md.txt +246 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/TransformingLazyColumnNotificationsSample.kt.md +89 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/TransformingLazyColumnNotificationsSample.kt.md.txt +89 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/TransformingLazyColumnSample.kt.md +309 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/TransformingLazyColumnSample.kt.md.txt +309 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/navigation3/SwipeDismissableSceneStrategySample.kt.md +205 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/navigation3/SwipeDismissableSceneStrategySample.kt.md.txt +205 -0
- package/skills/mobile-android/references/devices.md +11 -0
- package/skills/mobile-android/references/identity/restore-credentials/GUIDE.md +337 -0
- package/skills/mobile-android/references/identity/restore-credentials/references/android/guide/topics/manifest/application-element.md +832 -0
- package/skills/mobile-android/references/identity/restore-credentials/references/android/identity/passkeys/create-passkeys.md +327 -0
- package/skills/mobile-android/references/identity/restore-credentials/references/android/identity/passkeys/sign-in-with-passkeys.md +219 -0
- package/skills/mobile-android/references/identity/verified-email/GUIDE.md +405 -0
- package/skills/mobile-android/references/identity/verified-email/references/android/identity/credential-manager/index.md +67 -0
- package/skills/mobile-android/references/identity/verified-email/references/android/identity/digital-credentials/credential-verifier.md +166 -0
- package/skills/mobile-android/references/identity/verified-email/references/android/identity/digital-credentials/email-verification-implementation.md +313 -0
- package/skills/mobile-android/references/identity/verified-email/references/android/identity/digital-credentials/email-verification.md +158 -0
- package/skills/mobile-android/references/identity/verified-email/references/android/identity/digital-credentials/index.md +112 -0
- package/skills/mobile-android/references/identity/verified-email/references/android/identity/passkeys/create-passkeys.md +327 -0
- package/skills/mobile-android/references/identity/verified-email/references/android/identity/sign-in/credential-manager-webview.md +84 -0
- package/skills/mobile-android/references/identity.md +10 -0
- package/skills/mobile-android/references/media/camerax/GUIDE.md +106 -0
- package/skills/mobile-android/references/media/camerax/references/camera1-to-camerax.md +198 -0
- package/skills/mobile-android/references/media/camerax/references/camera2-to-camerax.md +193 -0
- package/skills/mobile-android/references/media/camerax/references/expert-blueprints.md +58 -0
- package/skills/mobile-android/references/media/camerax/references/foldables.md +83 -0
- package/skills/mobile-android/references/media/camerax/references/immutability.md +60 -0
- package/skills/mobile-android/references/media/camerax/references/low-light.md +124 -0
- package/skills/mobile-android/references/media/camerax/references/mlkit-spatial.md +75 -0
- package/skills/mobile-android/references/media/camerax/references/modern-apis.md +42 -0
- package/skills/mobile-android/references/media/camerax/references/testing.md +69 -0
- package/skills/mobile-android/references/media/camerax/references/thermals.md +85 -0
- package/skills/mobile-android/references/media/camerax/references/wear-os.md +76 -0
- package/skills/mobile-android/references/media/camerax/references/xr.md +54 -0
- package/skills/mobile-android/references/media/media3-cast-integration/GUIDE.md +213 -0
- package/skills/mobile-android/references/media/media3-cast-integration/references/android/media/media3/cast/create-castplayer.md +390 -0
- package/skills/mobile-android/references/media/media3-cast-integration/references/android/media/media3/cast/customize-castoptions.md +93 -0
- package/skills/mobile-android/references/media/media3-cast-integration/references/android/media/media3/cast/index.md +21 -0
- package/skills/mobile-android/references/media.md +10 -0
- package/skills/mobile-android/references/on-device-ai/appfunctions/GUIDE.md +51 -0
- package/skills/mobile-android/references/on-device-ai/appfunctions/references/adb-interaction-testing.md +95 -0
- package/skills/mobile-android/references/on-device-ai/appfunctions/references/context.md +26 -0
- package/skills/mobile-android/references/on-device-ai/appfunctions/references/feature-discovery-analysis.md +71 -0
- package/skills/mobile-android/references/on-device-ai/appfunctions/references/implementation-configuration.md +282 -0
- package/skills/mobile-android/references/on-device-ai/appfunctions/references/kdoc-refinement-optimization.md +75 -0
- package/skills/mobile-android/references/on-device-ai/appfunctions/references/migrate-to-service-entry-point.md +226 -0
- package/skills/mobile-android/references/on-device-ai/ml-kit-genai-prompt-api/GUIDE.md +105 -0
- package/skills/mobile-android/references/on-device-ai/ml-kit-genai-prompt-api/references/get-started.md +272 -0
- package/skills/mobile-android/references/on-device-ai/ml-kit-genai-prompt-api/references/prefix-caching.md +146 -0
- package/skills/mobile-android/references/on-device-ai/ml-kit-genai-prompt-api/references/prompt-design.md +55 -0
- package/skills/mobile-android/references/on-device-ai/ml-kit-genai-prompt-api/references/prompt-optimization.md +74 -0
- package/skills/mobile-android/references/on-device-ai/ml-kit-genai-prompt-api/references/structured-output.md +219 -0
- package/skills/mobile-android/references/on-device-ai/ml-kit-genai-prompt-api/references/system-instructions.md +71 -0
- package/skills/mobile-android/references/on-device-ai.md +10 -0
- package/skills/mobile-android/references/play/engage-sdk-integration/GUIDE.md +112 -0
- package/skills/mobile-android/references/play/engage-sdk-integration/references/android/guide/playcore/engage/faq.md +439 -0
- package/skills/mobile-android/references/play/engage-sdk-integration/references/android/guide/playcore/engage/food.md +1149 -0
- package/skills/mobile-android/references/play/engage-sdk-integration/references/android/guide/playcore/engage/healthandfitness.md +1055 -0
- package/skills/mobile-android/references/play/engage-sdk-integration/references/android/guide/playcore/engage/listen.md +1050 -0
- package/skills/mobile-android/references/play/engage-sdk-integration/references/android/guide/playcore/engage/otherverticals.md +1301 -0
- package/skills/mobile-android/references/play/engage-sdk-integration/references/android/guide/playcore/engage/read.md +910 -0
- package/skills/mobile-android/references/play/engage-sdk-integration/references/android/guide/playcore/engage/shopping.md +1224 -0
- package/skills/mobile-android/references/play/engage-sdk-integration/references/android/guide/playcore/engage/social.md +719 -0
- package/skills/mobile-android/references/play/engage-sdk-integration/references/android/guide/playcore/engage/travel.md +1413 -0
- package/skills/mobile-android/references/play/engage-sdk-integration/references/android/guide/playcore/engage/tv/continue-watching/index.md +19 -0
- package/skills/mobile-android/references/play/engage-sdk-integration/references/android/guide/playcore/engage/tv/entitlements.md +353 -0
- package/skills/mobile-android/references/play/engage-sdk-integration/references/android/guide/playcore/engage/tv/getting-started.md +202 -0
- package/skills/mobile-android/references/play/engage-sdk-integration/references/android/guide/playcore/engage/tv/recommendations.md +471 -0
- package/skills/mobile-android/references/play/engage-sdk-integration/references/android/guide/playcore/engage/watch.md +1081 -0
- package/skills/mobile-android/references/play/engage-sdk-integration/references/clusters.md +154 -0
- package/skills/mobile-android/references/play/engage-sdk-integration/references/common.md +519 -0
- package/skills/mobile-android/references/play/engage-sdk-integration/references/patterns.md +527 -0
- package/skills/mobile-android/references/play/engage-sdk-integration/references/requests.md +260 -0
- package/skills/mobile-android/references/play/engage-sdk-integration/references/schemas/food.md +509 -0
- package/skills/mobile-android/references/play/engage-sdk-integration/references/schemas/listen.md +842 -0
- package/skills/mobile-android/references/play/engage-sdk-integration/references/schemas/other.md +220 -0
- package/skills/mobile-android/references/play/engage-sdk-integration/references/schemas/read.md +412 -0
- package/skills/mobile-android/references/play/engage-sdk-integration/references/schemas/shopping.md +357 -0
- package/skills/mobile-android/references/play/engage-sdk-integration/references/schemas/social.md +228 -0
- package/skills/mobile-android/references/play/engage-sdk-integration/references/schemas/travel.md +923 -0
- package/skills/mobile-android/references/play/engage-sdk-integration/references/schemas/tv.md +1226 -0
- package/skills/mobile-android/references/play/engage-sdk-integration/references/schemas/watch.md +1137 -0
- package/skills/mobile-android/references/play/engage-sdk-integration/references/troubleshooting.md +39 -0
- package/skills/mobile-android/references/play/play-billing-library-version-upgrade/GUIDE.md +75 -0
- package/skills/mobile-android/references/play/play-billing-library-version-upgrade/references/android/google/play/billing/release-notes.md +1240 -0
- package/skills/mobile-android/references/play/play-billing-library-version-upgrade/references/migration-logic.md +78 -0
- package/skills/mobile-android/references/play/play-billing-library-version-upgrade/references/version-checklist.md +54 -0
- package/skills/mobile-android/references/play/play-policy-insights/GUIDE.md +130 -0
- package/skills/mobile-android/references/play/play-policy-insights/resources/common_mandates.md +100 -0
- package/skills/mobile-android/references/play/play-policy-insights/resources/compliance_report_template.md +59 -0
- package/skills/mobile-android/references/play/play-policy-insights/resources/critic.md +86 -0
- package/skills/mobile-android/references/play/play-policy-insights/resources/goal_data_safety.md +212 -0
- package/skills/mobile-android/references/play/play-policy-insights/resources/goal_permissions_and_apis.md +459 -0
- package/skills/mobile-android/references/play/play-policy-insights/resources/goal_user_account.md +106 -0
- package/skills/mobile-android/references/play/play-policy-insights/resources/policies.json +321 -0
- package/skills/mobile-android/references/play/play-policy-insights/resources/scanner_config.json +843 -0
- package/skills/mobile-android/references/play/play-policy-insights/scripts/generate_report.py +860 -0
- package/skills/mobile-android/references/play/play-policy-insights/scripts/orchestrator.py +1313 -0
- package/skills/mobile-android/references/play/play-policy-insights/scripts/play_store_scraper.py +410 -0
- package/skills/mobile-android/references/play/play-policy-insights/scripts/scanner.py +261 -0
- package/skills/mobile-android/references/play/play-policy-insights/scripts/template_engine.py +243 -0
- package/skills/mobile-android/references/play.md +11 -0
- package/skills/mobile-android/references/ui/adaptive/GUIDE.md +280 -0
- package/skills/mobile-android/references/ui/adaptive/references/android/develop/ui/compose/layouts/adaptive/flexbox/container-behavior.md +112 -0
- package/skills/mobile-android/references/ui/adaptive/references/android/develop/ui/compose/layouts/adaptive/flexbox/get-started.md +69 -0
- package/skills/mobile-android/references/ui/adaptive/references/android/develop/ui/compose/layouts/adaptive/flexbox/index.md +81 -0
- package/skills/mobile-android/references/ui/adaptive/references/android/develop/ui/compose/layouts/adaptive/flexbox/item-behavior.md +170 -0
- package/skills/mobile-android/references/ui/adaptive/references/android/develop/ui/compose/layouts/adaptive/grid/container-properties.md +415 -0
- package/skills/mobile-android/references/ui/adaptive/references/android/develop/ui/compose/layouts/adaptive/grid/get-started.md +51 -0
- package/skills/mobile-android/references/ui/adaptive/references/android/develop/ui/compose/layouts/adaptive/grid/index.md +73 -0
- package/skills/mobile-android/references/ui/adaptive/references/android/develop/ui/compose/layouts/adaptive/grid/item-properties.md +170 -0
- package/skills/mobile-android/references/ui/adaptive/references/android/develop/ui/compose/layouts/adaptive/mediaquery/index.md +333 -0
- package/skills/mobile-android/references/ui/adaptive/references/android/develop/ui/compose/tooling/debug.md +114 -0
- package/skills/mobile-android/references/ui/adaptive/references/android/guide/navigation/navigation-3/recipes/material-listdetail.md +141 -0
- package/skills/mobile-android/references/ui/edge-to-edge/GUIDE.md +409 -0
- package/skills/mobile-android/references/ui/migrate-xml-views-to-jetpack-compose/GUIDE.md +104 -0
- package/skills/mobile-android/references/ui/migrate-xml-views-to-jetpack-compose/references/analysis-of-the-project-and-layout.md +42 -0
- package/skills/mobile-android/references/ui/migrate-xml-views-to-jetpack-compose/references/android/develop/ui/compose/designsystems/migrate-xml-theme-to-compose.md +171 -0
- package/skills/mobile-android/references/ui/migrate-xml-views-to-jetpack-compose/references/android/develop/ui/compose/migrate/interoperability-apis/compose-in-views.md +299 -0
- package/skills/mobile-android/references/ui/migrate-xml-views-to-jetpack-compose/references/android/develop/ui/compose/migrate/interoperability-apis/views-in-compose.md +286 -0
- package/skills/mobile-android/references/ui/migrate-xml-views-to-jetpack-compose/references/android/develop/ui/compose/setup-compose-dependencies-and-compiler.md +197 -0
- package/skills/mobile-android/references/ui/migrate-xml-views-to-jetpack-compose/references/identify-optimal-xml-candidate.md +31 -0
- package/skills/mobile-android/references/ui/migrate-xml-views-to-jetpack-compose/references/xml-layout-migration.md +86 -0
- package/skills/mobile-android/references/ui/navigation-3/GUIDE.md +86 -0
- package/skills/mobile-android/references/ui/navigation-3/references/android/guide/navigation/navigation-3/index.md +51 -0
- package/skills/mobile-android/references/ui/navigation-3/references/android/guide/navigation/navigation-3/migration-guide.md +670 -0
- package/skills/mobile-android/references/ui/navigation-3/references/android/guide/navigation/navigation-3/recipes/animations.md +147 -0
- package/skills/mobile-android/references/ui/navigation-3/references/android/guide/navigation/navigation-3/recipes/basic.md +89 -0
- package/skills/mobile-android/references/ui/navigation-3/references/android/guide/navigation/navigation-3/recipes/basicdsl.md +85 -0
- package/skills/mobile-android/references/ui/navigation-3/references/android/guide/navigation/navigation-3/recipes/basicsaveable.md +90 -0
- package/skills/mobile-android/references/ui/navigation-3/references/android/guide/navigation/navigation-3/recipes/bottomsheet.md +195 -0
- package/skills/mobile-android/references/ui/navigation-3/references/android/guide/navigation/navigation-3/recipes/common-ui.md +200 -0
- package/skills/mobile-android/references/ui/navigation-3/references/android/guide/navigation/navigation-3/recipes/conditional-transitions.md +182 -0
- package/skills/mobile-android/references/ui/navigation-3/references/android/guide/navigation/navigation-3/recipes/conditional.md +230 -0
- package/skills/mobile-android/references/ui/navigation-3/references/android/guide/navigation/navigation-3/recipes/deeplinks-custommatcher.md +176 -0
- package/skills/mobile-android/references/ui/navigation-3/references/android/guide/navigation/navigation-3/recipes/deeplinks-staticuri.md +140 -0
- package/skills/mobile-android/references/ui/navigation-3/references/android/guide/navigation/navigation-3/recipes/deeplinks-syntheticbackstack.md +184 -0
- package/skills/mobile-android/references/ui/navigation-3/references/android/guide/navigation/navigation-3/recipes/dialog.md +107 -0
- package/skills/mobile-android/references/ui/navigation-3/references/android/guide/navigation/navigation-3/recipes/lifecycle-owner.md +185 -0
- package/skills/mobile-android/references/ui/navigation-3/references/android/guide/navigation/navigation-3/recipes/material-listdetail.md +141 -0
- package/skills/mobile-android/references/ui/navigation-3/references/android/guide/navigation/navigation-3/recipes/material-supportingpane.md +145 -0
- package/skills/mobile-android/references/ui/navigation-3/references/android/guide/navigation/navigation-3/recipes/modular-hilt.md +283 -0
- package/skills/mobile-android/references/ui/navigation-3/references/android/guide/navigation/navigation-3/recipes/modular-koin.md +287 -0
- package/skills/mobile-android/references/ui/navigation-3/references/android/guide/navigation/navigation-3/recipes/multiple-backstacks.md +468 -0
- package/skills/mobile-android/references/ui/navigation-3/references/android/guide/navigation/navigation-3/recipes/passingarguments.md +371 -0
- package/skills/mobile-android/references/ui/navigation-3/references/android/guide/navigation/navigation-3/recipes/results-event.md +273 -0
- package/skills/mobile-android/references/ui/navigation-3/references/android/guide/navigation/navigation-3/recipes/results-state.md +266 -0
- package/skills/mobile-android/references/ui/navigation-3/references/android/guide/navigation/navigation-3/recipes/scenes-listdetail.md +435 -0
- package/skills/mobile-android/references/ui/navigation-3/references/android/guide/navigation/navigation-3/recipes/scenes-twopane.md +244 -0
- package/skills/mobile-android/references/ui/navigation-3/references/android/guide/navigation/type-safe-destinations.md +129 -0
- package/skills/mobile-android/references/ui/navigation-event/GUIDE.md +288 -0
- package/skills/mobile-android/references/ui/navigation-event/references/android/guide/navigation/navigation-event/dispatcher.md +134 -0
- package/skills/mobile-android/references/ui/navigation-event/references/android/guide/navigation/navigation-event/handle-back.md +217 -0
- package/skills/mobile-android/references/ui/navigation-event/references/android/guide/navigation/navigation-event/index.md +83 -0
- package/skills/mobile-android/references/ui/navigation-event/references/android/guide/navigation/navigation-event/setup.md +32 -0
- package/skills/mobile-android/references/ui/styles/GUIDE.md +209 -0
- package/skills/mobile-android/references/ui/styles/references/android/develop/ui/compose/designsystems/custom.md +459 -0
- package/skills/mobile-android/references/ui/styles/references/android/develop/ui/compose/styles/fundamentals.md +421 -0
- package/skills/mobile-android/references/ui/styles/references/android/develop/ui/compose/styles/state-animations.md +461 -0
- package/skills/mobile-android/references/ui/styles/references/android/develop/ui/compose/styles/styles-vs-modifiers.md +48 -0
- package/skills/mobile-android/references/ui/styles/references/android/develop/ui/compose/styles/theming.md +269 -0
- package/skills/mobile-android/references/ui.md +14 -0
- package/skills/mobile-architecture/SKILL.md +52 -0
- package/skills/mobile-architecture/references/android.md +54 -0
- package/skills/{flutter-app-architecture/SKILL.md → mobile-architecture/references/flutter/app-architecture.md} +1 -8
- package/skills/{bloc/SKILL.md → mobile-architecture/references/flutter/bloc.md} +1 -8
- package/skills/{flutter-change-notifier/SKILL.md → mobile-architecture/references/flutter/change-notifier.md} +1 -8
- package/skills/{architecture-feature-first/SKILL.md → mobile-architecture/references/flutter/feature-first.md} +1 -8
- package/skills/{flutter-login-usecase/SKILL.md → mobile-architecture/references/flutter/login-use-case.md} +0 -7
- package/skills/{flutter-managing-state/SKILL.md → mobile-architecture/references/flutter/managing-state.md} +2 -11
- package/skills/{provider/SKILL.md → mobile-architecture/references/flutter/provider.md} +1 -8
- package/skills/{flutter-apply-architecture-best-practices/SKILL.md → mobile-architecture/references/flutter/recommended-architecture.md} +2 -11
- package/skills/{riverpod/SKILL.md → mobile-architecture/references/flutter/riverpod.md} +1 -8
- package/skills/mobile-architecture/references/flutter.md +21 -0
- package/skills/mobile-architecture/references/ios.md +58 -0
- package/skills/mobile-architecture/references/react-native.md +61 -0
- package/skills/mobile-code-review/SKILL.md +70 -0
- package/skills/mobile-code-review/references/android.md +51 -0
- package/skills/{code-review/SKILL.md → mobile-code-review/references/flutter/pr-review.md} +1 -8
- package/skills/{flutter-project-audit/SKILL.md → mobile-code-review/references/flutter/project-audit.md} +0 -7
- package/skills/{dart-run-static-analysis/SKILL.md → mobile-code-review/references/flutter/static-analysis.md} +2 -11
- package/skills/{flutter-widget-review/SKILL.md → mobile-code-review/references/flutter/widget-review.md} +0 -7
- package/skills/mobile-code-review/references/flutter.md +18 -0
- package/skills/mobile-code-review/references/ios.md +49 -0
- package/skills/mobile-code-review/references/react-native.md +58 -0
- package/skills/mobile-debug/SKILL.md +50 -0
- package/skills/mobile-debug/references/android/gradle-build.md +63 -0
- package/skills/mobile-debug/references/android.md +26 -0
- package/skills/mobile-debug/references/flutter/build.md +58 -0
- package/skills/{flutter-errors/SKILL.md → mobile-debug/references/flutter/errors.md} +1 -8
- package/skills/{flutter-fix-layout-issues/SKILL.md → mobile-debug/references/flutter/layout-issues.md} +2 -11
- package/skills/{dart-resolve-package-conflicts/SKILL.md → mobile-debug/references/flutter/package-conflicts.md} +2 -11
- package/skills/{dart-fix-runtime-errors/SKILL.md → mobile-debug/references/flutter/runtime-errors.md} +2 -11
- package/skills/mobile-debug/references/flutter.md +23 -0
- package/skills/mobile-debug/references/ios/cocoapods.md +57 -0
- package/skills/mobile-debug/references/ios/xcode-build.md +58 -0
- package/skills/mobile-debug/references/ios.md +23 -0
- package/skills/mobile-debug/references/react-native.md +43 -0
- package/skills/{detect-mobile-stack → mobile-detect-stack}/SKILL.md +1 -1
- package/skills/mobile-firebase/SKILL.md +54 -0
- package/skills/mobile-firebase/references/android/ai-logic.md +31 -0
- package/skills/mobile-firebase/references/android/analytics.md +33 -0
- package/skills/mobile-firebase/references/android/app-check.md +36 -0
- package/skills/mobile-firebase/references/android/auth.md +44 -0
- package/skills/mobile-firebase/references/android/crashlytics.md +31 -0
- package/skills/mobile-firebase/references/android/firestore.md +44 -0
- package/skills/mobile-firebase/references/android/functions.md +33 -0
- package/skills/mobile-firebase/references/android/in-app-messaging.md +28 -0
- package/skills/mobile-firebase/references/android/messaging.md +41 -0
- package/skills/mobile-firebase/references/android/realtime-database.md +50 -0
- package/skills/mobile-firebase/references/android/remote-config.md +43 -0
- package/skills/mobile-firebase/references/android/sql-connect.md +31 -0
- package/skills/mobile-firebase/references/android/storage.md +39 -0
- package/skills/mobile-firebase/references/android.md +30 -0
- package/skills/{firebase-ai/SKILL.md → mobile-firebase/references/flutter/ai-logic.md} +2 -8
- package/skills/{firebase-analytics/SKILL.md → mobile-firebase/references/flutter/analytics.md} +2 -8
- package/skills/{firebase-app-check/SKILL.md → mobile-firebase/references/flutter/app-check.md} +2 -8
- package/skills/{firebase-auth/SKILL.md → mobile-firebase/references/flutter/auth.md} +2 -8
- package/skills/{firebase-crashlytics/SKILL.md → mobile-firebase/references/flutter/crashlytics.md} +2 -8
- package/skills/{firebase-cloud-firestore/SKILL.md → mobile-firebase/references/flutter/firestore.md} +2 -8
- package/skills/{firebase-cloud-functions/SKILL.md → mobile-firebase/references/flutter/functions.md} +2 -8
- package/skills/{firebase-in-app-messaging/SKILL.md → mobile-firebase/references/flutter/in-app-messaging.md} +2 -8
- package/skills/{firebase-messaging/SKILL.md → mobile-firebase/references/flutter/messaging.md} +2 -8
- package/skills/{firebase-database/SKILL.md → mobile-firebase/references/flutter/realtime-database.md} +2 -8
- package/skills/{firebase-remote-config/SKILL.md → mobile-firebase/references/flutter/remote-config.md} +2 -8
- package/skills/{flutterfire-configure/SKILL.md → mobile-firebase/references/flutter/setup-flutterfire.md} +1 -8
- package/skills/{firebase-data-connect/SKILL.md → mobile-firebase/references/flutter/sql-connect.md} +2 -8
- package/skills/{firebase-storage/SKILL.md → mobile-firebase/references/flutter/storage.md} +2 -8
- package/skills/mobile-firebase/references/flutter.md +36 -0
- package/skills/mobile-firebase/references/ios/ai-logic.md +30 -0
- package/skills/mobile-firebase/references/ios/analytics.md +33 -0
- package/skills/mobile-firebase/references/ios/app-check.md +36 -0
- package/skills/mobile-firebase/references/ios/auth.md +48 -0
- package/skills/mobile-firebase/references/ios/crashlytics.md +34 -0
- package/skills/mobile-firebase/references/ios/firestore.md +53 -0
- package/skills/mobile-firebase/references/ios/functions.md +35 -0
- package/skills/mobile-firebase/references/ios/in-app-messaging.md +26 -0
- package/skills/mobile-firebase/references/ios/messaging.md +45 -0
- package/skills/mobile-firebase/references/ios/realtime-database.md +49 -0
- package/skills/mobile-firebase/references/ios/remote-config.md +44 -0
- package/skills/mobile-firebase/references/ios/sql-connect.md +33 -0
- package/skills/mobile-firebase/references/ios/storage.md +36 -0
- package/skills/mobile-firebase/references/ios.md +28 -0
- package/skills/mobile-firebase/references/react-native/ai-logic.md +32 -0
- package/skills/mobile-firebase/references/react-native/analytics.md +43 -0
- package/skills/mobile-firebase/references/react-native/app-check.md +35 -0
- package/skills/mobile-firebase/references/react-native/auth.md +50 -0
- package/skills/mobile-firebase/references/react-native/crashlytics.md +36 -0
- package/skills/mobile-firebase/references/react-native/firestore.md +45 -0
- package/skills/mobile-firebase/references/react-native/functions.md +28 -0
- package/skills/mobile-firebase/references/react-native/in-app-messaging.md +27 -0
- package/skills/mobile-firebase/references/react-native/messaging.md +46 -0
- package/skills/mobile-firebase/references/react-native/realtime-database.md +46 -0
- package/skills/mobile-firebase/references/react-native/remote-config.md +32 -0
- package/skills/mobile-firebase/references/react-native/sql-connect.md +11 -0
- package/skills/mobile-firebase/references/react-native/storage.md +30 -0
- package/skills/mobile-firebase/references/react-native.md +29 -0
- package/skills/mobile-flutter/SKILL.md +30 -0
- package/skills/{flutter-improving-accessibility/SKILL.md → mobile-flutter/references/accessibility-i18n/accessibility.md} +2 -11
- package/skills/{flutter-setup-localization/SKILL.md → mobile-flutter/references/accessibility-i18n/localization.md} +2 -11
- package/skills/mobile-flutter/references/accessibility-i18n.md +8 -0
- package/skills/{dart-3-updates/SKILL.md → mobile-flutter/references/dart/dart-3.md} +1 -8
- package/skills/{effective-dart/SKILL.md → mobile-flutter/references/dart/effective-dart.md} +1 -8
- package/skills/{dart-use-pattern-matching/SKILL.md → mobile-flutter/references/dart/pattern-matching/GUIDE.md} +2 -18
- package/skills/mobile-flutter/references/dart.md +9 -0
- package/skills/{flutter-caching-data/SKILL.md → mobile-flutter/references/data/caching.md} +2 -11
- package/skills/{flutter-working-with-databases/SKILL.md → mobile-flutter/references/data/databases.md} +2 -11
- package/skills/{flutter-use-http-package/SKILL.md → mobile-flutter/references/data/http.md} +2 -11
- package/skills/{flutter-implement-json-serialization/SKILL.md → mobile-flutter/references/data/json-serialization.md} +2 -11
- package/skills/mobile-flutter/references/data.md +10 -0
- package/skills/{flutter-interoperating-with-native-apis/SKILL.md → mobile-flutter/references/native/native-apis.md} +2 -11
- package/skills/{flutter-embedding-native-views/SKILL.md → mobile-flutter/references/native/native-views.md} +2 -11
- package/skills/{flutter-building-plugins/SKILL.md → mobile-flutter/references/native/plugins.md} +2 -11
- package/skills/mobile-flutter/references/native.md +9 -0
- package/skills/{flutter-reducing-app-size/SKILL.md → mobile-flutter/references/performance/app-size.md} +2 -11
- package/skills/{flutter-handling-concurrency/SKILL.md → mobile-flutter/references/performance/concurrency.md} +2 -11
- package/skills/mobile-flutter/references/performance.md +8 -0
- package/skills/{flutter-setting-up-on-macos/SKILL.md → mobile-flutter/references/setup/macos.md} +2 -11
- package/skills/mobile-flutter/references/setup.md +7 -0
- package/skills/{flutter-animating-apps/SKILL.md → mobile-flutter/references/ui/animations.md} +2 -11
- package/skills/{flutter-building-forms/SKILL.md → mobile-flutter/references/ui/forms.md} +2 -11
- package/skills/{flutter-adding-home-screen-widgets/SKILL.md → mobile-flutter/references/ui/home-screen-widgets.md} +2 -11
- package/skills/{flutter-building-layouts/SKILL.md → mobile-flutter/references/ui/layouts.md} +2 -11
- package/skills/{flutter-build-responsive-layout/SKILL.md → mobile-flutter/references/ui/responsive-layout.md} +2 -11
- package/skills/{flutter-setup-declarative-routing/SKILL.md → mobile-flutter/references/ui/routing.md} +2 -11
- package/skills/{flutter-theming-apps/SKILL.md → mobile-flutter/references/ui/theming.md} +2 -11
- package/skills/{flutter-add-widget-preview/SKILL.md → mobile-flutter/references/ui/widget-previews.md} +2 -11
- package/skills/mobile-flutter/references/ui.md +14 -0
- package/skills/mobile-ios/SKILL.md +25 -0
- package/skills/mobile-ios/references/data-networking.md +70 -0
- package/skills/mobile-ios/references/performance-release.md +37 -0
- package/skills/mobile-ios/references/platform-features.md +52 -0
- package/skills/mobile-ios/references/ui-navigation.md +64 -0
- package/skills/mobile-rn/SKILL.md +26 -0
- package/skills/mobile-rn/references/data-networking.md +59 -0
- package/skills/mobile-rn/references/performance-release.md +46 -0
- package/skills/mobile-rn/references/platform-features.md +40 -0
- package/skills/mobile-rn/references/ui-navigation.md +62 -0
- package/skills/mobile-security/SKILL.md +82 -0
- package/skills/mobile-security/references/android/intent-security.md +523 -0
- package/skills/mobile-security/references/android.md +37 -0
- package/skills/{flutter-secure-token-store/SKILL.md → mobile-security/references/flutter/secure-token-store.md} +1 -8
- package/skills/mobile-security/references/flutter.md +30 -0
- package/skills/mobile-security/references/ios.md +27 -0
- package/skills/mobile-security/references/react-native.md +29 -0
- package/skills/mobile-test/SKILL.md +63 -0
- package/skills/mobile-test/references/android/setup/GUIDE.md +183 -0
- package/skills/mobile-test/references/android/setup/references/android/develop/ui/compose/testing/common-patterns.md +181 -0
- package/skills/mobile-test/references/android/setup/references/android/studio/preview/compose-screenshot-testing.md +255 -0
- package/skills/mobile-test/references/android/setup/references/android/training/dependency-injection/hilt-testing.md +447 -0
- package/skills/mobile-test/references/android.md +83 -0
- package/skills/{dart-collect-coverage/SKILL.md → mobile-test/references/flutter/coverage.md} +2 -11
- package/skills/{dart-generate-test-mocks/SKILL.md → mobile-test/references/flutter/generate-mocks.md} +2 -11
- package/skills/{flutter-add-integration-test/SKILL.md → mobile-test/references/flutter/integration-tests.md} +2 -11
- package/skills/{dart-migrate-to-checks-package/SKILL.md → mobile-test/references/flutter/migrate-to-checks.md} +2 -13
- package/skills/{mockito/SKILL.md → mobile-test/references/flutter/mockito.md} +1 -8
- package/skills/{mocktail/SKILL.md → mobile-test/references/flutter/mocktail.md} +1 -8
- package/skills/{patrol-e2e-testing/SKILL.md → mobile-test/references/flutter/patrol.md} +1 -8
- package/skills/{testing/SKILL.md → mobile-test/references/flutter/testing-guidelines.md} +1 -8
- package/skills/{dart-add-unit-test/SKILL.md → mobile-test/references/flutter/unit-tests.md} +2 -11
- package/skills/{flutter-add-widget-test/SKILL.md → mobile-test/references/flutter/widget-tests.md} +2 -11
- package/skills/mobile-test/references/flutter.md +44 -0
- package/skills/mobile-test/references/ios.md +79 -0
- package/skills/mobile-test/references/react-native.md +62 -0
- package/skills/mobile-security-audit/SKILL.md +0 -101
- /package/skills/{dart-use-pattern-matching → mobile-flutter/references/dart/pattern-matching}/examples/json_patterns.dart +0 -0
package/skills/mobile-android/references/build-and-performance/android-cli/references/interact.md
ADDED
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
Run `android layout --help` and `android screen --help`.
|
|
2
|
+
|
|
3
|
+
## UI Dump
|
|
4
|
+
|
|
5
|
+
`android layout` returns a flat JSON list of the UI elements on screen. `android
|
|
6
|
+
layout --diff` returns a flat JSON list of the UI elements that have changed
|
|
7
|
+
since the last call to `layout` or `layout --diff`
|
|
8
|
+
|
|
9
|
+
Each JSON object represents a UI element in the Android app. The following
|
|
10
|
+
properties may be present:
|
|
11
|
+
|
|
12
|
+
- `text` - any literal text the element contains
|
|
13
|
+
- `resourceId` - the Android resource id used to refer to the element
|
|
14
|
+
- `contentDesc` - a description of a UI element for use by accessibility tools
|
|
15
|
+
- `interactions` - the set of user interactions the element supports. May contain one or more of: `checkable`, `clickable`, `focusable`, `scrollable`, `long-clickable`, `password`
|
|
16
|
+
- `state` - the set of states the element is in. May contain one or more of `checked`, `focused`, `selected`
|
|
17
|
+
- `bounds` - the screen coordinates of the bounding rectangle of the element, in the format `[min X,min Y][max X, max Y]`
|
|
18
|
+
- `center` - the screen coordinates of the center of the element, in the format `[x,y]`
|
|
19
|
+
- `off-screen` - if true, the element is in the UI hierarchy but not visible; it may require scrolling to view.
|
|
20
|
+
|
|
21
|
+
Use `layout` as a primary means of examining an Android app. Use `layout --diff`
|
|
22
|
+
to focus on changes and to keep your context small. Example: When entering
|
|
23
|
+
digits into a calculator, use `layout --diff` to output only the digit readout
|
|
24
|
+
element.
|
|
25
|
+
|
|
26
|
+
`layout` may fail due to the app displaying a WebView or animation; in these
|
|
27
|
+
cases, use `android screen capture --annotate` to inspect the app. This failure
|
|
28
|
+
will likely resolve after navigating away from the current screen.
|
|
29
|
+
|
|
30
|
+
## Screenshot
|
|
31
|
+
|
|
32
|
+
`android screen capture -o <file path>` saves a PNG of the current device screen
|
|
33
|
+
to `<file path>`
|
|
34
|
+
|
|
35
|
+
Use `screen capture` as a secondary means of examining an Android app
|
|
36
|
+
Examples:
|
|
37
|
+
|
|
38
|
+
- Understanding the content of an on-screen image
|
|
39
|
+
- Looking at a `WebView` (web content does not always appear in the ui dump)
|
|
40
|
+
- Trying to find a UI element by its visual appearance
|
|
41
|
+
|
|
42
|
+
**IMPORTANT** : Always *VISUALLY* examine the PNG image returned from `android
|
|
43
|
+
screen` BEFORE doing anything else.
|
|
44
|
+
|
|
45
|
+
## Annotated Screenshot
|
|
46
|
+
|
|
47
|
+
`android screen capture --annotate -o <file path>`
|
|
48
|
+
`android screen resolve --screen <path> --string <string>`
|
|
49
|
+
|
|
50
|
+
The `--annotate` command adds numerical labels and bounding boxes around UI
|
|
51
|
+
elements. Use this command to locate UI elements that cannot be located in the
|
|
52
|
+
`layout` output.
|
|
53
|
+
|
|
54
|
+
**IMPORTANT** : When using `android screen --annotate`, always *VISUALLY* examine
|
|
55
|
+
the resulting PNG file.
|
|
56
|
+
|
|
57
|
+
To refer to these labels in input commands, use `screen resolve` to convert
|
|
58
|
+
labels into coordinates:
|
|
59
|
+
|
|
60
|
+
`android screen resolve --screen <file path> --string "#3"` returns `<x coord of
|
|
61
|
+
region 3> <y coord of region 3>`
|
|
62
|
+
|
|
63
|
+
To save turns, you can combine shell commands:
|
|
64
|
+
|
|
65
|
+
`adb shell input $(android screen resolve --screen screen.png --string "tap #34")`
|
|
66
|
+
|
|
67
|
+
This command taps on region #34 from `screen.png`
|
|
68
|
+
|
|
69
|
+
## Input
|
|
70
|
+
|
|
71
|
+
Use `adb shell input` for interacting with Android devices. Refer to the
|
|
72
|
+
`"interactions"` property of an element for what interactions can be performed
|
|
73
|
+
on a particular element.
|
|
74
|
+
|
|
75
|
+
Interact with UI elements with their `center` coordinate or their `bounds`
|
|
76
|
+
coordinates:
|
|
77
|
+
`json
|
|
78
|
+
{
|
|
79
|
+
"key": -248568265,
|
|
80
|
+
"class": "android.widget.Button",
|
|
81
|
+
"bounds": "[138,9][167,38]",
|
|
82
|
+
"center": "[152,23]"
|
|
83
|
+
}`
|
|
84
|
+
|
|
85
|
+
To tap on this button, you would execute `adb shell input tap 152 23`. This taps
|
|
86
|
+
the center.
|
|
87
|
+
|
|
88
|
+
{
|
|
89
|
+
"key": 12487234,
|
|
90
|
+
"class": "com.example.ui.ScrollableList",
|
|
91
|
+
"bounds": "[100,200][400,600]",
|
|
92
|
+
"center": "[250,400]"
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
To scroll down on this list, you would execute `adb shell input swipe 250 400
|
|
96
|
+
250 200 500`. This swipes from the center to the top over 500ms.
|
|
97
|
+
|
|
98
|
+
### Text Input
|
|
99
|
+
|
|
100
|
+
To enter text, ensure the field is focused and execute `adb shell input text
|
|
101
|
+
"<text>"`.
|
|
102
|
+
|
|
103
|
+
- **Spaces (`%s`):** Replace spaces with `%s` (Android ignores text after raw spaces): `adb shell input text "Hello%sworld"` (enters `"Hello world"`).
|
|
104
|
+
- **Special characters:** Escape shell metacharacters (`&`, `$`, `(`, `)`, `!`): `adb shell input text "AT\&T"` or `adb shell input text 'Price:\$10'`.
|
|
105
|
+
- **Submit / Enter:** `adb shell input keyevent 66`
|
|
106
|
+
|
|
107
|
+
## Android Interaction Rules
|
|
108
|
+
|
|
109
|
+
1. Always ensure text input fields have `"focused"` in their `"state"` list before entering text.
|
|
110
|
+
2. If an element has `"scrollable"` in its `"interactions"` list, try scrolling it when looking for missing UI elements.
|
|
111
|
+
3. Always scroll slowly when executing scroll inputs. The 5th argument to `adb
|
|
112
|
+
shell input swipe` controls scroll duration.
|
|
113
|
+
4. Content may take time to load; if a `layout` is missing information after you take an action, wait a few seconds, then perform `layout --diff` to see if anything changes.
|
package/skills/mobile-android/references/build-and-performance/android-cli/references/journeys.md
ADDED
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
A journey is an XML-specified test of an Android app's behavior. It consists of
|
|
2
|
+
a list of `<action>` elements. For example:
|
|
3
|
+
`xml
|
|
4
|
+
<journey name="My Journey">
|
|
5
|
+
<description>
|
|
6
|
+
A sample journey to illustrate the format
|
|
7
|
+
</description>
|
|
8
|
+
<actions>
|
|
9
|
+
<action>
|
|
10
|
+
Tap the "Home" icon
|
|
11
|
+
</action>
|
|
12
|
+
<action>
|
|
13
|
+
Verify that the app is on its Home screen
|
|
14
|
+
</action>
|
|
15
|
+
</actions>
|
|
16
|
+
</journey>`
|
|
17
|
+
|
|
18
|
+
Evaluate a journey by proceeding through the `<actions>` list in sequential
|
|
19
|
+
order. Evaluate each `<action>` block individually.
|
|
20
|
+
A journey succeeds if all elements in the `<actions>` list succeed.
|
|
21
|
+
|
|
22
|
+
A journey is a test case for an app. The journey XML is the source of truth; if
|
|
23
|
+
the app disagrees with the journey, the app has failed.
|
|
24
|
+
Additionally, if the app exits, crashes, or freezes, journey evaluation stops
|
|
25
|
+
and the journey fails.
|
|
26
|
+
|
|
27
|
+
**IMPORTANT** - Execute each step EXACTLY as written, and independently of other
|
|
28
|
+
steps! If an action says to `"tap the first search result"`,
|
|
29
|
+
you MUST find the search results and tap the first one. Do this even if you
|
|
30
|
+
believe you know the intent behind the action.
|
|
31
|
+
|
|
32
|
+
## Taking Actions
|
|
33
|
+
|
|
34
|
+
Some `<action>` elements specify UI interactions to perform on the running
|
|
35
|
+
Android app. Perform the interaction and verify that the app does
|
|
36
|
+
not crash or behave in an unexpected manner. This is the *only* verification
|
|
37
|
+
you should perform for an `<action>`.
|
|
38
|
+
|
|
39
|
+
If the interaction cannot be performed as specified, the journey fails.
|
|
40
|
+
Example:
|
|
41
|
+
`<action>Click the red button</action>`
|
|
42
|
+
If you determine a red button is not present in the UI, the journey fails.
|
|
43
|
+
|
|
44
|
+
If the text of an `<action>` specifies a list of actions, break it into
|
|
45
|
+
sub-actions and evaluate them individually:
|
|
46
|
+
Example:
|
|
47
|
+
`<action>Search for soda and add the first result to the cart</action>`
|
|
48
|
+
This should be evaluated as:
|
|
49
|
+
`<action>Search for soda</action>
|
|
50
|
+
<action>Add the first result to the cart</action>`
|
|
51
|
+
|
|
52
|
+
If an `<action>` contains something that is not a specification for a UI
|
|
53
|
+
interaction, alert the user that the journey is malformed and exit
|
|
54
|
+
early, specifying the error in question.
|
|
55
|
+
|
|
56
|
+
## Verifying Expectations
|
|
57
|
+
|
|
58
|
+
`<action>` elements that begin with "check" or "verify" specify expectations
|
|
59
|
+
for the current state of the Android app. Determine the current
|
|
60
|
+
state of the app and check if the expectations are met.
|
|
61
|
+
|
|
62
|
+
Determine the current state of the app by inspecting the current screen of the
|
|
63
|
+
device without interacting with it.
|
|
64
|
+
Example:
|
|
65
|
+
`<action>Check if "Switch 2" is visible on the screen</action>`
|
|
66
|
+
This requires only inspecting the current screen, not scrolling or interacting.
|
|
67
|
+
If "Switch 2" is not currently visible, the action fails.
|
|
68
|
+
|
|
69
|
+
If the expectations are not met, mark the `<action>` as a failure and the
|
|
70
|
+
journey evaluation ends. A single `<action>` may contain
|
|
71
|
+
multiple expectations.
|
|
72
|
+
Example:
|
|
73
|
+
`<action>Verify that the app is on the Home screen, the Home icon is blue, and the temperature is displayed</action>`
|
|
74
|
+
This `<action>` fails if ANY of the following are false:
|
|
75
|
+
|
|
76
|
+
- The app is on the Home screen
|
|
77
|
+
- There is a Home icon, and it is blue
|
|
78
|
+
- A temperature is displayed
|
|
79
|
+
|
|
80
|
+
## Handling failure
|
|
81
|
+
|
|
82
|
+
When running a journey, evaluate it as a test. Failure is acceptable, and often
|
|
83
|
+
expected. Proper reporting of failures is the priority.
|
|
84
|
+
|
|
85
|
+
Keep debugging and troubleshooting to a minimum; assume that tools are showing
|
|
86
|
+
you the correct output every time. The goal is to determine
|
|
87
|
+
if the *current* Android app can correctly handle the *current* steps outlined
|
|
88
|
+
in the journey. Suggestions for bug fixes, clarification, or
|
|
89
|
+
other improvements should be kept to journey evaluation summary at the end.
|
|
90
|
+
|
|
91
|
+
## Summarizing
|
|
92
|
+
|
|
93
|
+
After evaluating the whole journey, output a markdown (.md) file describing the
|
|
94
|
+
results.
|
|
95
|
+
|
|
96
|
+
The file should have the following format:
|
|
97
|
+
|
|
98
|
+
# Journey: <Name of the journey>
|
|
99
|
+
|
|
100
|
+
## Results
|
|
101
|
+
|
|
102
|
+
<!-- Append "✅" to the action header if the instruction was evaluated or "❌" if the instruction could not be evaluated -->
|
|
103
|
+
### Action: Click the blue button ✅
|
|
104
|
+
- **Commands**:
|
|
105
|
+
<!-- A list of the ADB commands executed while evaluating the instruction -->
|
|
106
|
+
- `adb shell input swipe 490 200 500 500 500`
|
|
107
|
+
- `adb shell input tap 45 920`
|
|
108
|
+
|
|
109
|
+
<!-- Failure reasons, feedback, or other useful information -->
|
|
110
|
+
- **Comment**: The journey step doesn't specify that the button requires scrolling to see
|
|
111
|
+
|
|
112
|
+
### Action: Check if "Switch 2" is visible on the screen ✅
|
|
113
|
+
- **Screenshot**: [switch_2_screenshot.png](path/to/screenshot)
|
|
114
|
+
- **Comment**: Confirmed both in layout and visually
|
|
115
|
+
|
|
116
|
+
### Action: The home screen is shown ❌
|
|
117
|
+
- **Comment**: The settings page was shown
|
|
118
|
+
|
|
119
|
+
<!-- Append nothing to the action header if the action was not evaluated because the journey execution ended early -->
|
|
120
|
+
### Action: Swipe down to view active notifications
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
> Adapted from the `android-profiler` skill in [android/skills](https://github.com/android/skills) (Apache-2.0). See `THIRD_PARTY_NOTICES.md`.
|
|
2
|
+
|
|
3
|
+
# Android Profiler Orchestrator
|
|
4
|
+
|
|
5
|
+
Your primary role is **Intent Disambiguation and Routing**; route the user to
|
|
6
|
+
the correct workflow or prepare an execution plan for the user. Work with the
|
|
7
|
+
user to finalize the plan and then proceed with the plan execution, addressing
|
|
8
|
+
singular as well as composite needs.
|
|
9
|
+
|
|
10
|
+
## Prerequisites and Setup
|
|
11
|
+
|
|
12
|
+
Before executing any workflows, read
|
|
13
|
+
[`references/env_setup.md`](references/env_setup.md) (it sits next to this file
|
|
14
|
+
in the skill root). It defines what to set `$SKILL_ROOT` to - the anchor every
|
|
15
|
+
other path in this skill is written against.
|
|
16
|
+
|
|
17
|
+
## Intent Disambiguation
|
|
18
|
+
|
|
19
|
+
Do not guess the user's intent. If the user request is not clear, **ask the
|
|
20
|
+
user** what they want to do before proceeding.
|
|
21
|
+
|
|
22
|
+
## Recording
|
|
23
|
+
|
|
24
|
+
Route all recording requests through
|
|
25
|
+
`$SKILL_ROOT/recording/recording_orchestrator.md`. This defines guidelines and
|
|
26
|
+
pre-flight checks or dependency checks that apply to all recording workflows,
|
|
27
|
+
and ensures you have the necessary setup to proceed. Read the orchestrator and
|
|
28
|
+
execute the plan it describes based on what the user wants to record (for
|
|
29
|
+
example, a system trace or a heap dump).
|
|
30
|
+
|
|
31
|
+
## Analysis
|
|
32
|
+
|
|
33
|
+
Route all analysis requests through
|
|
34
|
+
`$SKILL_ROOT/analysis/analysis_orchestrator.md`.
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# Analysis Orchestrator
|
|
2
|
+
|
|
3
|
+
Use the guidelines below to find the right analysis workflow to execute based
|
|
4
|
+
on the user intent (for example, analyzing a system trace or a heap dump).
|
|
5
|
+
|
|
6
|
+
Ensure you can answer the following: "User intends to
|
|
7
|
+
[analyze/query/investigate] ______". For example,
|
|
8
|
+
"User intends to analyze a heap dump to investigate a memory leak".
|
|
9
|
+
|
|
10
|
+
## Handling Composite Requests
|
|
11
|
+
|
|
12
|
+
If the user's request involves multiple distinct analysis goals (for example,
|
|
13
|
+
analyzing a trace for jank AND checking for memory leaks or GPU issues),
|
|
14
|
+
do not execute them simultaneously.
|
|
15
|
+
|
|
16
|
+
1. Break down the request and propose a sequential execution plan to the user.
|
|
17
|
+
2. Ask the user for confirmation to start the first step.
|
|
18
|
+
3. Do not proceed to the next workflow until the current one is completed.
|
|
19
|
+
|
|
20
|
+
## Workflow Discovery and Routing
|
|
21
|
+
|
|
22
|
+
This skill supports multiple specialized analysis workflows. To determine the
|
|
23
|
+
right workflows to use:
|
|
24
|
+
|
|
25
|
+
1. Use your file search tools (for example, `grep_search`) to recursively scan
|
|
26
|
+
the `$SKILL_ROOT/analysis/workflows/` directory for workflow entrypoints
|
|
27
|
+
(markdown files defining a top-level `name:` key in their frontmatter,
|
|
28
|
+
ignoring internal `references/` subdirectories).
|
|
29
|
+
2. Compare the user's request and intent against the `name:`, `description:`,
|
|
30
|
+
and `keywords:` fields to identify matching workflows. If multiple are
|
|
31
|
+
found, present them as options to the user and proceed with the
|
|
32
|
+
user's selection.
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: perfetto-sql
|
|
3
|
+
description: >
|
|
4
|
+
Translates natural language data intents into syntactically valid PerfettoSQL
|
|
5
|
+
queries and/or executes them against a trace file, if provided. Use this
|
|
6
|
+
workflow to draft, debug, or execute queries extracting slice, thread, or
|
|
7
|
+
memory data from Android Perfetto traces using trace_processor.
|
|
8
|
+
keywords:
|
|
9
|
+
- Perfetto SQL
|
|
10
|
+
- SQL Guidelines
|
|
11
|
+
- SQL Best Practices
|
|
12
|
+
- Ad-hoc Query
|
|
13
|
+
- Trace Processor
|
|
14
|
+
- SPAN_JOIN
|
|
15
|
+
- Idempotency
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
# Ad-Hoc PerfettoSQL Querying
|
|
19
|
+
|
|
20
|
+
Use this workflow to write, debug, or execute PerfettoSQL queries:
|
|
21
|
+
|
|
22
|
+
- **Executing against a trace:** If a trace file path or URL is provided, verify
|
|
23
|
+
environment prerequisites in `$SKILL_ROOT/references/perfetto/setup.md` and
|
|
24
|
+
follow the session execution workflow in
|
|
25
|
+
`$SKILL_ROOT/references/perfetto/sql.md`.
|
|
26
|
+
- **Static query authoring or debugging:** If no trace is attached, draft,
|
|
27
|
+
optimize, or debug the queries using the syntax, schema guidelines, and
|
|
28
|
+
standard library best practices in `$SKILL_ROOT/references/perfetto/sql.md`.
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: perfetto-trace-analysis
|
|
3
|
+
description: >
|
|
4
|
+
Analyzes Perfetto traces to find the root cause of performance issues in
|
|
5
|
+
user or system Android apps (for example, janks, app startup, memory, or
|
|
6
|
+
latency stalls).
|
|
7
|
+
keywords:
|
|
8
|
+
- perfetto
|
|
9
|
+
- trace
|
|
10
|
+
- jank
|
|
11
|
+
- startup
|
|
12
|
+
- latency
|
|
13
|
+
- stall
|
|
14
|
+
- thread
|
|
15
|
+
- bottleneck
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
# Perfetto Trace Analysis
|
|
19
|
+
|
|
20
|
+
Use this workflow to diagnose general Android performance issues: jank, app
|
|
21
|
+
startup, latency, stall, or a thread-blocking problem.
|
|
22
|
+
|
|
23
|
+
Follow these steps in order:
|
|
24
|
+
|
|
25
|
+
## Step 1: Identify what to investigate first
|
|
26
|
+
|
|
27
|
+
Work with the user (for example, ask questions, present options) to
|
|
28
|
+
understand the following:
|
|
29
|
+
|
|
30
|
+
- _What is the symptom_: Do they want to investigate frame drops, jank,
|
|
31
|
+
startup issues, app crash, system crash, ANR?
|
|
32
|
+
- _Who is the victim:_ Where did they observe the symptom? For example, "a
|
|
33
|
+
frame drop in `com.example.sample`".
|
|
34
|
+
|
|
35
|
+
> **Input Trace Required:** Confirm that the user has provided a trace file
|
|
36
|
+
> path or URL (for example, `.pftrace`, `.perfetto-trace`, or a Perfetto UI
|
|
37
|
+
> link). If none is provided, pause and ask the user to provide one before
|
|
38
|
+
> proceeding.
|
|
39
|
+
|
|
40
|
+
> If you do not know the symptom, pause and ask the user for clarification.
|
|
41
|
+
|
|
42
|
+
> If you know the symptom but not the victim, proceed to Step 2 (Triage) to
|
|
43
|
+
> discover candidates. Present the 3-5 most severe instances to the user and
|
|
44
|
+
> proceed with the user selection.
|
|
45
|
+
|
|
46
|
+
> **A/B Trace Comparison:** If the user provides multiple traces (for
|
|
47
|
+
> example, a baseline and an issue trace), explicitly clarify which is the
|
|
48
|
+
> baseline. You will pass both paths to the subagents in Step 3 so they can
|
|
49
|
+
> use the baseline trace to establish expected behavior.
|
|
50
|
+
|
|
51
|
+
## Step 2: Run a system-wide triage
|
|
52
|
+
|
|
53
|
+
Spin off a subagent/task and instruct it to follow instructions from
|
|
54
|
+
`$SKILL_ROOT/analysis/workflows/perfetto-trace-analysis/references/triage.md`
|
|
55
|
+
to run a system-wide triage. (Do not read this file yourself. Pass this path
|
|
56
|
+
in the sub-agent prompt so it loads the file and performs the triage steps).
|
|
57
|
+
|
|
58
|
+
Note the output produced by the subagent to identify the filtered list of
|
|
59
|
+
**candidates** that we need to investigate.
|
|
60
|
+
|
|
61
|
+
> **Note:**
|
|
62
|
+
> - If no candidates are found, ask the user for symptom clarification and
|
|
63
|
+
> specific timestamps.
|
|
64
|
+
> - If the triage reveals multiple candidates, select the top 2 or 3 most
|
|
65
|
+
> severe, representative candidates and ask the user before proceeding
|
|
66
|
+
> which ones to investigate. The user may choose one or more.
|
|
67
|
+
|
|
68
|
+
**Expected outcome:** Confirmation on which candidate(s) to investigate
|
|
69
|
+
before proceeding.
|
|
70
|
+
|
|
71
|
+
## Step 3: Investigate each branch in parallel
|
|
72
|
+
|
|
73
|
+
For **every** candidate (one or more) identified in the previous step, spin
|
|
74
|
+
off a task/subagent to investigate these tracks _in parallel_.
|
|
75
|
+
|
|
76
|
+
Construct a prompt for each candidate containing:
|
|
77
|
+
```markdown
|
|
78
|
+
Trace path: [path]
|
|
79
|
+
Baseline Trace Path: [path, if provided]
|
|
80
|
+
Candidate Info: [`utid`, `upid`, thread_name, process_name, `render_thread_utid` (if applicable)]
|
|
81
|
+
Symptom Window: [start_ts, end_ts, duration]
|
|
82
|
+
System Vitals: [payload from Step 2]
|
|
83
|
+
Budget: [expected duration, if applicable]
|
|
84
|
+
Execution Protocol: Read
|
|
85
|
+
`$SKILL_ROOT/analysis/workflows/perfetto-trace-analysis/references/per_candidate_analysis.md`
|
|
86
|
+
and follow its instructions end-to-end.
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
SPAWN the subagent(s) in parallel and await completion of all subagents before
|
|
90
|
+
proceeding to Step 4.
|
|
91
|
+
|
|
92
|
+
## Step 4: Final report and consolidation
|
|
93
|
+
|
|
94
|
+
Read the output from every spawned subagent and generate a consolidated "Trace
|
|
95
|
+
Analysis Report" adhering to these instructions:
|
|
96
|
+
|
|
97
|
+
1. **Summary and Root Cause:** State the findings in simple, clear language
|
|
98
|
+
and classify root causes (hardware, software/code, scheduling policy,
|
|
99
|
+
system exhaustion, or external dependency).
|
|
100
|
+
2. **Dependency Chain:** Map the full path from symptom to root cause.
|
|
101
|
+
Include thread names, `UTID`s, blocking states, and exact timestamps at
|
|
102
|
+
every hop.
|
|
103
|
+
3. **Evidence Tags:** Tag every single claim with `[SQL]` (backed by data),
|
|
104
|
+
`[INFERRED]` (logical deduction), or `[GAP]` (partial or missing data),
|
|
105
|
+
and briefly define these tags at the start.
|
|
106
|
+
4. **Platform Context:** Explain Android system behaviors _only_ by citing
|
|
107
|
+
specific retrieved slice names, values, and timestamps.
|
|
108
|
+
**What's bad:** "SurfaceFlinger does X around vsync"
|
|
109
|
+
**What's a good explanation:** "SurfaceFlinger's composition slice at
|
|
110
|
+
`ts=142.3ms` ran `4ms` after the vsync signal at `ts=138.1ms`, consistent
|
|
111
|
+
with X".
|
|
112
|
+
5. **Partial Suspects:** List all branches that were investigated but did not
|
|
113
|
+
reach a terminal root cause, ranked by evidence strength. Include what
|
|
114
|
+
was found and where verification fell short. A partial suspect can be the
|
|
115
|
+
real contributor - report it even if a terminal root cause was found
|
|
116
|
+
elsewhere.
|
|
117
|
+
|
|
118
|
+
> If evidence is evenly split between multiple potential causes, report each
|
|
119
|
+
> suspicion with its supporting data and evidence so that engineers can
|
|
120
|
+
> evaluate probabilities without false certainty. Do not arbitrarily pick
|
|
121
|
+
> a winner.
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# Guiding Principles for Trace Analysis
|
|
2
|
+
|
|
3
|
+
Whether you are augmented with domain-specific knowledge or doing a standard
|
|
4
|
+
workflow analysis, follow these rules.
|
|
5
|
+
|
|
6
|
+
**Why:** Performance analysis is complex. It is entirely possible to end up
|
|
7
|
+
identifying a root cause while the reality is different (for example, a hardware
|
|
8
|
+
bottleneck causing a cascade of failures). The principles below keep your
|
|
9
|
+
analysis grounded in truth and ensure that you investigate the entire causal
|
|
10
|
+
chain to discover the true bottleneck.
|
|
11
|
+
|
|
12
|
+
1. **Schema Validation via Intrinsic Discovery:**
|
|
13
|
+
Read `$SKILL_ROOT/references/perfetto/sql.md` and query table schemas
|
|
14
|
+
using `LIMIT 0` before drafting queries.
|
|
15
|
+
- **Why:** Trace processor schemas evolve across versions; discovering
|
|
16
|
+
schema directly prevents invalid assumptions and syntax failures.
|
|
17
|
+
2. **Empirical Data Grounding:** Support every claim with tool output or
|
|
18
|
+
queried timestamps, slice durations or counter values (`[SQL]`).
|
|
19
|
+
- **Why:** General Android heuristics cannot substitute for ground-truth
|
|
20
|
+
trace metrics. When queries return empty results, broaden search
|
|
21
|
+
constraints using fuzzy matching or wider time windows.
|
|
22
|
+
3. **Causation vs. Correlation:** Verify that the blocker's active execution
|
|
23
|
+
overlaps with the victim's wait interval.
|
|
24
|
+
- **Why:** Concurrent anomalies are only causally linked if their
|
|
25
|
+
execution lifetimes intersect. For example, just because thread A was busy
|
|
26
|
+
while thread B was waiting does not necessarily mean thread A caused the
|
|
27
|
+
wait.
|
|
28
|
+
4. **Follow Evidence:** Follow dependency chains across thread, process and
|
|
29
|
+
kernel boundaries to the terminal root cause. Keep going as long as
|
|
30
|
+
**each hop meaningfully explains the symptom**.
|
|
31
|
+
- **Why:** Halting blocker traversal prematurely reports intermediate
|
|
32
|
+
symptoms rather than the true origin.
|
|
33
|
+
5. **Explicit Uncertainty Reporting:** Categorize unverified execution paths
|
|
34
|
+
as `[GAP]` or partial suspects.
|
|
35
|
+
- **Why:** Transparent reporting of missing data enables engineers to evaluate
|
|
36
|
+
probabilities without false certainty.
|
|
37
|
+
6. **Evidence-First Explanation:** Cite concrete retrieved metrics and slice
|
|
38
|
+
timestamps before asserting platform behavioral context.
|
|
39
|
+
- **Why:** Contextual explanations are only reliable when anchored in
|
|
40
|
+
empirical trace observations.
|
|
41
|
+
7. **Systemic Confound Sweeps:** Before attributing a bottleneck to
|
|
42
|
+
application software, verify that thermal throttling, CPU capping
|
|
43
|
+
(`cpufreq`), scheduling (`sched_slice`), or LMKD pressure isn't uniformly
|
|
44
|
+
degrading the system. Report such confounds as root cause modifiers.
|
|
45
|
+
> To uncover short-lived anomalies that get mathematically missed by simple
|
|
46
|
+
> averages or aggregate queries, isolate and look around the symptom window
|
|
47
|
+
> and query for individual event spikes or percentiles.
|
|
48
|
+
8. **Systematic Step Adherence:** At every step of your investigation, strictly
|
|
49
|
+
follow the defined investigation steps.
|
|
50
|
+
- **Why:** Structured verification prevents analytical blind spots and
|
|
51
|
+
premature conclusions on obvious but non-critical anomalies.
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
---
|
|
2
|
+
subsystem: cpu
|
|
3
|
+
description: >
|
|
4
|
+
Expert hints for CPU scheduling, thread states, CPU contention, and
|
|
5
|
+
frequency scaling.
|
|
6
|
+
keywords:
|
|
7
|
+
- cpu
|
|
8
|
+
- scheduling
|
|
9
|
+
- latency
|
|
10
|
+
- runnable
|
|
11
|
+
- running
|
|
12
|
+
- thread state
|
|
13
|
+
- governor
|
|
14
|
+
- core
|
|
15
|
+
- frequency
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
# CPU & Scheduling Expert Hints
|
|
19
|
+
|
|
20
|
+
- When debugging a long slice: Examine its thread states to understand what the
|
|
21
|
+
thread was doing (running, sleeping, blocked on I/O).
|
|
22
|
+
- When debugging a long slice for latency issues: Check if its duration is
|
|
23
|
+
caused by one or more long-running child slices. Apply recursively.
|
|
24
|
+
- When a thread is woken up but there is a delay before it runs, check the
|
|
25
|
+
"IRQ" track for the corresponding CPU to see if an interrupt is the cause.
|
|
26
|
+
- Check if kernel threads associated with hardware are running with real-time
|
|
27
|
+
priority; if not, they can be preempted.
|
|
28
|
+
- When analysis of the primary application package does not reveal root cause,
|
|
29
|
+
expand to all threads and processes. Search for other runnable threads on the
|
|
30
|
+
same CPU or high-priority kernel threads.
|
|
31
|
+
- When investigating app startup, use an SQL query to aggregate reasons for
|
|
32
|
+
uninterruptible sleep on the main thread.
|
|
33
|
+
- Check the "cpu_frequency" counter for CPU cores that ran the main process.
|
|
34
|
+
Missing frequency data or stuck frequencies indicate a kernel-level bug in
|
|
35
|
+
the governor.
|
|
36
|
+
- Query raw "ftrace" events for logs related to the governor thread (for
|
|
37
|
+
example, "su_gov").
|
|
38
|
+
- To find concurrency issues, search for critical threads (for example,
|
|
39
|
+
'RenderThread') in a blocked state (`thread_state.state = 'D'`) and join with
|
|
40
|
+
scheduling data to find the waker.
|
|
41
|
+
- Compare time spent in userspace functions vs kernel (slices with [k] prefix).
|
|
42
|
+
- To detect a 'catch-up storm', look for threads with long gaps in
|
|
43
|
+
thread_state/cpu_slice activity immediately followed by a high-density burst.
|
|
44
|
+
- Quantify scheduler contention by calculating scheduling latency (measure
|
|
45
|
+
duration of preceding 'Runnable' state using
|
|
46
|
+
`preceding_sched_slice_for_thread`). Search for maximums and high percentiles
|
|
47
|
+
(p95/p99).
|
|
48
|
+
- If a task exhibits high scheduling latency, check if other CPUs were idle
|
|
49
|
+
(running swapper or idle thread).
|
|
50
|
+
- Check the `cpu_id` for key threads; if consistently scheduled on slower
|
|
51
|
+
cores, it signals a potential performance gain by allowing them on big cores.
|
|
52
|
+
- For a struggling thread, analyze 'Runnable' vs 'Running' state time. A large
|
|
53
|
+
'Runnable' time indicates CPU contention.
|
|
54
|
+
- If a slice's wall duration increases but the percentage of 'Running' time is
|
|
55
|
+
unchanged, it strongly suggests a lower CPU frequency. Check `sched_switch`
|
|
56
|
+
to focus on the correct cores.
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
---
|
|
2
|
+
subsystem: graphics
|
|
3
|
+
description: >
|
|
4
|
+
Expert hints for graphics performance, UI jank, GPU memory, and frame
|
|
5
|
+
rendering.
|
|
6
|
+
keywords:
|
|
7
|
+
- graphics
|
|
8
|
+
- ui jank
|
|
9
|
+
- gpu
|
|
10
|
+
- frame
|
|
11
|
+
- vsync
|
|
12
|
+
- render
|
|
13
|
+
- surfaceflinger
|
|
14
|
+
- texture
|
|
15
|
+
- bitmap
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
# Graphics & UI Jank Expert Hints
|
|
19
|
+
|
|
20
|
+
- When investigating UI jank, check for long-running slices on the main
|
|
21
|
+
thread; if a slice like "ConstraintLayout.onMeasure" is taking a long time
|
|
22
|
+
(for example, >8ms), it is a likely cause of the jank.
|
|
23
|
+
- When a `bitmap_write_to_parcel` slice takes milliseconds instead of
|
|
24
|
+
microseconds, investigate its children slices to see how time is spent. Long
|
|
25
|
+
durations often point to suboptimal kernel operations like memory mapping
|
|
26
|
+
(`mmap`) or unnecessary data zeroing.
|
|
27
|
+
- For a high-level overview of graphics memory usage, track `gpu_mem_total`
|
|
28
|
+
counter for a specific process (`upid`).
|
|
29
|
+
- To find the largest graphics allocations, query the `android_graphics_allocs`
|
|
30
|
+
table and sort by `size_bytes` in descending order. Compare width and height
|
|
31
|
+
against the device's display resolution.
|
|
32
|
+
- To detect the "double memory cost" of an image existing on both CPU and GPU,
|
|
33
|
+
look for a large buffer in `android_graphics_allocs` and a simultaneous CPU
|
|
34
|
+
memory allocation of a similar size (`rss_anon_bytes` or `heap_graph`).
|
|
35
|
+
- To find potentially costly intermediate render targets, look for large
|
|
36
|
+
buffers in `android_graphics_allocs` where `usage_bits` lack a
|
|
37
|
+
`COMPOSER_OVERLAY` flag.
|
|
38
|
+
- To check if an allocation is actually presented on screen, correlate
|
|
39
|
+
`buffer_id` with SurfaceFlinger events.
|
|
40
|
+
- To see if high graphics memory is causing performance issues, check the frame
|
|
41
|
+
duration in `actual_frame_timeline_slice`. Durations over vsync (for
|
|
42
|
+
example, 16.6ms) correlating with `gpu_mem_total` spikes suggest memory
|
|
43
|
+
pressure jank.
|
|
44
|
+
- Within the main thread of a janky graphics application, look for frequent or
|
|
45
|
+
long-running `texture_upload` slices.
|
|
46
|
+
- Analyze the duration of `eglSwapBuffersWithDamageKHR` or similar buffer-swap
|
|
47
|
+
slices in the graphics rendering thread. Consistently long durations suggest
|
|
48
|
+
a large "damage area" being redrawn every frame.
|
|
49
|
+
- To identify UI jank, compare `actual_frame_timeline` against the
|
|
50
|
+
`expected_frame_timeline` on the main process; a significant deviation
|
|
51
|
+
indicates missed frames.
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
---
|
|
2
|
+
subsystem: io
|
|
3
|
+
description: >
|
|
4
|
+
Expert hints for I/O and storage bottlenecks, uninterruptible sleep, and
|
|
5
|
+
page cache.
|
|
6
|
+
keywords:
|
|
7
|
+
- i/o
|
|
8
|
+
- storage
|
|
9
|
+
- disk
|
|
10
|
+
- uninterruptible sleep
|
|
11
|
+
- d state
|
|
12
|
+
- page fault
|
|
13
|
+
- dm-verity
|
|
14
|
+
- file
|
|
15
|
+
- syscall
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
# I/O & Storage Expert Hints
|
|
19
|
+
|
|
20
|
+
- When debugging a long, uninterruptible sleep state related to I/O: Check for
|
|
21
|
+
overlapping slices with "verity" in their name (dm-verity).
|
|
22
|
+
- When a thread is stuck in an uninterruptible sleep with no `blocked_function`,
|
|
23
|
+
look for other threads that might be holding the memory lock (for example,
|
|
24
|
+
"jit-thread-pool", memory mapping ops).
|
|
25
|
+
- When analyzing a long uninterruptible sleep, check the `blocked_function` in
|
|
26
|
+
the thread state details (from `sched_blocked_reason` ftrace event).
|
|
27
|
+
- A lot of time spent in `do_page_fault` during app startup is a strong
|
|
28
|
+
indicator of I/O contention.
|
|
29
|
+
- For file integrity mechanisms like DM-Verity, search for events like
|
|
30
|
+
`dm_verity_fec_prefetch`.
|
|
31
|
+
- To find the specific kernel dependency of a stalled app thread, locate the
|
|
32
|
+
thread in state 'D', then look for kworker or kernel threads that become
|
|
33
|
+
runnable immediately after.
|
|
34
|
+
- For app stalls caused by I/O, analyze the scheduling latency of the relevant
|
|
35
|
+
kworker threads handling the request.
|
|
36
|
+
- To find inefficient file I/O, query the syscall table for a high frequency
|
|
37
|
+
of small, sequential `read()` or `pread()` syscalls on a single fd.
|
|
38
|
+
- If a thread spends significant time in 'Uninterruptible Sleep', check if
|
|
39
|
+
`blocked_function` is `page_cache_readahead`. Correlate waking timestamps
|
|
40
|
+
with `filemap_add_to_page_cache` ftrace events.
|
|
41
|
+
- Aggregate counts of `filemap_add_to_page_cache` grouping by `inode` to find
|
|
42
|
+
the specific file causing I/O pressure.
|
|
43
|
+
- Inspect `nr_sector` in `block_rq_issue` ftrace events to understand file
|
|
44
|
+
read-ahead size.
|
|
45
|
+
- If an I/O issue disappears on subsequent launches, it is a 'cold start'
|
|
46
|
+
problem (populating page cache).
|