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.
Files changed (539) hide show
  1. package/.claude-plugin/marketplace.json +2 -2
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/CHANGELOG.md +39 -0
  4. package/README.md +135 -297
  5. package/THIRD_PARTY_NOTICES.md +221 -4
  6. package/agents/android-architect.md +89 -0
  7. package/agents/android-performance-engineer.md +92 -0
  8. package/agents/android-test-engineer.md +97 -0
  9. package/agents/flutter-test-engineer.md +2 -0
  10. package/agents/ios-architect.md +93 -0
  11. package/agents/ios-performance-engineer.md +92 -0
  12. package/agents/ios-test-engineer.md +95 -0
  13. package/agents/lead-mobile.md +10 -1
  14. package/agents/mobile-code-reviewer.md +2 -0
  15. package/agents/mobile-staff-engineer.md +1 -1
  16. package/agents/rn-architect.md +94 -0
  17. package/agents/rn-performance-engineer.md +92 -0
  18. package/agents/rn-test-engineer.md +98 -0
  19. package/bin/reis-mobile.mjs +59 -17
  20. package/commands/debate.md +10 -1
  21. package/commands/debug.md +60 -0
  22. package/commands/reis-mobile.md +7 -2
  23. package/core/config/project.mjs +59 -0
  24. package/core/registry/frontmatter.mjs +15 -4
  25. package/core/registry/registry.mjs +28 -1
  26. package/core/router/intents.mjs +2 -0
  27. package/core/router/router.mjs +10 -5
  28. package/package.json +24 -3
  29. package/skills/mobile-android/SKILL.md +29 -0
  30. package/skills/mobile-android/references/build-and-performance/agp-9-upgrade/GUIDE.md +87 -0
  31. package/skills/mobile-android/references/build-and-performance/agp-9-upgrade/references/android/build/migrate-to-built-in-kotlin.md +416 -0
  32. package/skills/mobile-android/references/build-and-performance/agp-9-upgrade/references/android/build/releases/agp-9-0-0-release-notes.md +554 -0
  33. package/skills/mobile-android/references/build-and-performance/agp-9-upgrade/references/buildconfig.md +54 -0
  34. package/skills/mobile-android/references/build-and-performance/agp-9-upgrade/references/ksp-kapt.md +39 -0
  35. package/skills/mobile-android/references/build-and-performance/agp-9-upgrade/references/paparazzi-gradle-9.md +30 -0
  36. package/skills/mobile-android/references/build-and-performance/agp-9-upgrade/references/recipes.md +62 -0
  37. package/skills/mobile-android/references/build-and-performance/android-cli/GUIDE.md +450 -0
  38. package/skills/mobile-android/references/build-and-performance/android-cli/references/interact.md +113 -0
  39. package/skills/mobile-android/references/build-and-performance/android-cli/references/journeys.md +120 -0
  40. package/skills/mobile-android/references/build-and-performance/android-profiler/GUIDE.md +34 -0
  41. package/skills/mobile-android/references/build-and-performance/android-profiler/analysis/analysis_orchestrator.md +32 -0
  42. package/skills/mobile-android/references/build-and-performance/android-profiler/analysis/workflows/perfetto-sql/perfetto_sql.md +28 -0
  43. package/skills/mobile-android/references/build-and-performance/android-profiler/analysis/workflows/perfetto-trace-analysis/perfetto_trace_analysis.md +121 -0
  44. package/skills/mobile-android/references/build-and-performance/android-profiler/analysis/workflows/perfetto-trace-analysis/references/guiding_principles.md +51 -0
  45. package/skills/mobile-android/references/build-and-performance/android-profiler/analysis/workflows/perfetto-trace-analysis/references/hints/domain_hints_template.md +7 -0
  46. package/skills/mobile-android/references/build-and-performance/android-profiler/analysis/workflows/perfetto-trace-analysis/references/hints/subsystems/hints_cpu.md +56 -0
  47. package/skills/mobile-android/references/build-and-performance/android-profiler/analysis/workflows/perfetto-trace-analysis/references/hints/subsystems/hints_graphics.md +51 -0
  48. package/skills/mobile-android/references/build-and-performance/android-profiler/analysis/workflows/perfetto-trace-analysis/references/hints/subsystems/hints_io.md +46 -0
  49. package/skills/mobile-android/references/build-and-performance/android-profiler/analysis/workflows/perfetto-trace-analysis/references/hints/subsystems/hints_ipc.md +41 -0
  50. package/skills/mobile-android/references/build-and-performance/android-profiler/analysis/workflows/perfetto-trace-analysis/references/hints/subsystems/hints_memory.md +55 -0
  51. package/skills/mobile-android/references/build-and-performance/android-profiler/analysis/workflows/perfetto-trace-analysis/references/hints/subsystems/hints_power.md +33 -0
  52. package/skills/mobile-android/references/build-and-performance/android-profiler/analysis/workflows/perfetto-trace-analysis/references/per_candidate_analysis.md +172 -0
  53. package/skills/mobile-android/references/build-and-performance/android-profiler/analysis/workflows/perfetto-trace-analysis/references/triage.md +94 -0
  54. package/skills/mobile-android/references/build-and-performance/android-profiler/recording/recording_orchestrator.md +36 -0
  55. package/skills/mobile-android/references/build-and-performance/android-profiler/recording/workflows/perfetto-trace-recording/perfetto_trace_recording.md +148 -0
  56. package/skills/mobile-android/references/build-and-performance/android-profiler/recording/workflows/perfetto-trace-recording/references/example-configs/app_jank.pftxt +43 -0
  57. package/skills/mobile-android/references/build-and-performance/android-profiler/recording/workflows/perfetto-trace-recording/references/example-configs/cpu_profile.pftxt +35 -0
  58. package/skills/mobile-android/references/build-and-performance/android-profiler/recording/workflows/perfetto-trace-recording/references/example-configs/java_heap_dump.pftxt +21 -0
  59. package/skills/mobile-android/references/build-and-performance/android-profiler/recording/workflows/perfetto-trace-recording/references/example-configs/long_background.pftxt +37 -0
  60. package/skills/mobile-android/references/build-and-performance/android-profiler/recording/workflows/perfetto-trace-recording/references/example-configs/memory_counters.pftxt +45 -0
  61. package/skills/mobile-android/references/build-and-performance/android-profiler/recording/workflows/perfetto-trace-recording/references/example-configs/native_heap.pftxt +21 -0
  62. package/skills/mobile-android/references/build-and-performance/android-profiler/recording/workflows/perfetto-trace-recording/references/example-configs/sched_cpu.pftxt +33 -0
  63. package/skills/mobile-android/references/build-and-performance/android-profiler/recording/workflows/perfetto-trace-recording/references/trace_config_reference.md +102 -0
  64. package/skills/mobile-android/references/build-and-performance/android-profiler/references/env_setup.md +15 -0
  65. package/skills/mobile-android/references/build-and-performance/android-profiler/references/perfetto/setup.md +29 -0
  66. package/skills/mobile-android/references/build-and-performance/android-profiler/references/perfetto/sql.md +327 -0
  67. package/skills/mobile-android/references/build-and-performance/r8-analyzer/GUIDE.md +53 -0
  68. package/skills/mobile-android/references/build-and-performance/r8-analyzer/references/CONFIGURATION-ANALYZER.md +287 -0
  69. package/skills/mobile-android/references/build-and-performance/r8-analyzer/references/CONFIGURATION.md +44 -0
  70. package/skills/mobile-android/references/build-and-performance/r8-analyzer/references/KEEP-RULES-IMPACT-HIERARCHY.md +83 -0
  71. package/skills/mobile-android/references/build-and-performance/r8-analyzer/references/REDUNDANT-RULES.md +222 -0
  72. package/skills/mobile-android/references/build-and-performance/r8-analyzer/references/REFLECTION-GUIDE.md +139 -0
  73. package/skills/mobile-android/references/build-and-performance/r8-analyzer/references/REPORT_FORMAT.md +51 -0
  74. package/skills/mobile-android/references/build-and-performance/r8-analyzer/references/android/topic/performance/app-optimization/enable-app-optimization.md +252 -0
  75. package/skills/mobile-android/references/build-and-performance/r8-analyzer/references/android/training/testing/other-components/ui-automator.md +312 -0
  76. package/skills/mobile-android/references/build-and-performance.md +12 -0
  77. package/skills/mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer/GUIDE.md +317 -0
  78. package/skills/mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer/references/android/design/ui/ai-glasses/guides/interaction/inputs.md +67 -0
  79. 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
  80. 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
  81. 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
  82. 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
  83. 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
  84. 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
  85. 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
  86. 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
  87. package/skills/mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer/references/button-samples-source.md +176 -0
  88. package/skills/mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer/references/button-source.md +203 -0
  89. package/skills/mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer/references/card-samples-source.md +296 -0
  90. package/skills/mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer/references/card-source.md +515 -0
  91. package/skills/mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer/references/deptheffect-source.md +224 -0
  92. package/skills/mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer/references/deptheffectlevels-source.md +105 -0
  93. package/skills/mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer/references/glimmersansflextypography-source.md +270 -0
  94. package/skills/mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer/references/glimmertheme-source.md +182 -0
  95. package/skills/mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer/references/icon-source.md +388 -0
  96. package/skills/mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer/references/iconbutton-source.md +126 -0
  97. package/skills/mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer/references/iconsizes-source.md +78 -0
  98. package/skills/mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer/references/list-source.md +27 -0
  99. package/skills/mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer/references/listitem-source.md +272 -0
  100. package/skills/mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer/references/liststate-source.md +427 -0
  101. package/skills/mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer/references/material-hct-source.md +217 -0
  102. package/skills/mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer/references/projectedcontext-source.md +265 -0
  103. package/skills/mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer/references/stack-source.md +368 -0
  104. package/skills/mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer/references/stackitemscope-source.md +440 -0
  105. package/skills/mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer/references/stackstate-source.md +325 -0
  106. package/skills/mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer/references/surface-source.md +1211 -0
  107. package/skills/mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer/references/titlechip-samples-source.md +101 -0
  108. package/skills/mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer/references/titlechip-source.md +131 -0
  109. package/skills/mobile-android/references/devices/leanback-to-compose-tv-migration/GUIDE.md +707 -0
  110. package/skills/mobile-android/references/devices/leanback-to-compose-tv-migration/references/android/training/tv/get-started/navigation.md +372 -0
  111. package/skills/mobile-android/references/devices/leanback-to-compose-tv-migration/references/android/training/tv/playback/compose/browse.md +243 -0
  112. package/skills/mobile-android/references/devices/leanback-to-compose-tv-migration/references/android/training/tv/playback/compose/index.md +153 -0
  113. package/skills/mobile-android/references/devices/wear-compose-m3/GUIDE.md +341 -0
  114. package/skills/mobile-android/references/devices/wear-compose-m3/references/android/training/wearables/compose/migrate-to-material3.md +677 -0
  115. package/skills/mobile-android/references/devices/wear-compose-m3/references/foundation/AmbientModeSample.kt.md +123 -0
  116. package/skills/mobile-android/references/devices/wear-compose-m3/references/foundation/AmbientModeSample.kt.md.txt +123 -0
  117. package/skills/mobile-android/references/devices/wear-compose-m3/references/foundation/CurvedWorldSample.kt.md +430 -0
  118. package/skills/mobile-android/references/devices/wear-compose-m3/references/foundation/CurvedWorldSample.kt.md.txt +430 -0
  119. package/skills/mobile-android/references/devices/wear-compose-m3/references/foundation/ExpandableSample.kt.md +99 -0
  120. package/skills/mobile-android/references/devices/wear-compose-m3/references/foundation/ExpandableSample.kt.md.txt +99 -0
  121. package/skills/mobile-android/references/devices/wear-compose-m3/references/foundation/HierarchicalFocusSample.kt.md +141 -0
  122. package/skills/mobile-android/references/devices/wear-compose-m3/references/foundation/HierarchicalFocusSample.kt.md.txt +141 -0
  123. package/skills/mobile-android/references/devices/wear-compose-m3/references/foundation/PagerSamples.kt.md +56 -0
  124. package/skills/mobile-android/references/devices/wear-compose-m3/references/foundation/PagerSamples.kt.md.txt +56 -0
  125. package/skills/mobile-android/references/devices/wear-compose-m3/references/foundation/RotarySamples.kt.md +153 -0
  126. package/skills/mobile-android/references/devices/wear-compose-m3/references/foundation/RotarySamples.kt.md.txt +153 -0
  127. package/skills/mobile-android/references/devices/wear-compose-m3/references/foundation/ScalingLazyColumnSample.kt.md +131 -0
  128. package/skills/mobile-android/references/devices/wear-compose-m3/references/foundation/ScalingLazyColumnSample.kt.md.txt +131 -0
  129. package/skills/mobile-android/references/devices/wear-compose-m3/references/foundation/SwipeToDismissBoxSample.kt.md +169 -0
  130. package/skills/mobile-android/references/devices/wear-compose-m3/references/foundation/SwipeToDismissBoxSample.kt.md.txt +169 -0
  131. package/skills/mobile-android/references/devices/wear-compose-m3/references/foundation/SwipeToRevealSample.kt.md +282 -0
  132. package/skills/mobile-android/references/devices/wear-compose-m3/references/foundation/SwipeToRevealSample.kt.md.txt +282 -0
  133. package/skills/mobile-android/references/devices/wear-compose-m3/references/foundation/TransformingLazyColumnSample.kt.md +335 -0
  134. package/skills/mobile-android/references/devices/wear-compose-m3/references/foundation/TransformingLazyColumnSample.kt.md.txt +335 -0
  135. package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/AlertDialogSample.kt.md +377 -0
  136. package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/AlertDialogSample.kt.md.txt +377 -0
  137. package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/AnimatedTextSample.kt.md +165 -0
  138. package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/AnimatedTextSample.kt.md.txt +165 -0
  139. package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/ButtonGroupSample.kt.md +91 -0
  140. package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/ButtonGroupSample.kt.md.txt +91 -0
  141. package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/ButtonSample.kt.md +496 -0
  142. package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/ButtonSample.kt.md.txt +496 -0
  143. package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/CardSample.kt.md +470 -0
  144. package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/CardSample.kt.md.txt +470 -0
  145. package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/CheckboxButtonSample.kt.md +67 -0
  146. package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/CheckboxButtonSample.kt.md.txt +67 -0
  147. package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/ConfirmationDialogSample.kt.md +162 -0
  148. package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/ConfirmationDialogSample.kt.md.txt +162 -0
  149. package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/CurvedTextSamples.kt.md +78 -0
  150. package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/CurvedTextSamples.kt.md.txt +78 -0
  151. package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/DatePickerSample.kt.md +131 -0
  152. package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/DatePickerSample.kt.md.txt +131 -0
  153. package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/DynamicColorSchemeSample.kt.md +74 -0
  154. package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/DynamicColorSchemeSample.kt.md.txt +74 -0
  155. package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/EdgeButtonSample.kt.md +63 -0
  156. package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/EdgeButtonSample.kt.md.txt +63 -0
  157. package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/FadingExpandingLabelSample.kt.md +60 -0
  158. package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/FadingExpandingLabelSample.kt.md.txt +60 -0
  159. package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/IconButtonSample.kt.md +125 -0
  160. package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/IconButtonSample.kt.md.txt +125 -0
  161. package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/IconToggleButtonSample.kt.md +116 -0
  162. package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/IconToggleButtonSample.kt.md.txt +116 -0
  163. package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/LevelIndicatorSample.kt.md +68 -0
  164. package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/LevelIndicatorSample.kt.md.txt +68 -0
  165. package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/LinearProgressIndicatorSample.kt.md +50 -0
  166. package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/LinearProgressIndicatorSample.kt.md.txt +50 -0
  167. package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/ListHeaderSample.kt.md +177 -0
  168. package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/ListHeaderSample.kt.md.txt +177 -0
  169. package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/OneHandedGestureSamples.kt.md +651 -0
  170. package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/OneHandedGestureSamples.kt.md.txt +651 -0
  171. package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/OpenOnPhoneDialogSample.kt.md +57 -0
  172. package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/OpenOnPhoneDialogSample.kt.md.txt +57 -0
  173. package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/PageIndicatorSample.kt.md +110 -0
  174. package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/PageIndicatorSample.kt.md.txt +110 -0
  175. package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/PagerScaffoldSample.kt.md +204 -0
  176. package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/PagerScaffoldSample.kt.md.txt +204 -0
  177. package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/PickerGroupSample.kt.md +139 -0
  178. package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/PickerGroupSample.kt.md.txt +139 -0
  179. package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/PickerSample.kt.md +111 -0
  180. package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/PickerSample.kt.md.txt +111 -0
  181. package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/PlaceholderSample.kt.md +184 -0
  182. package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/PlaceholderSample.kt.md.txt +184 -0
  183. package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/ProgressIndicatorSample.kt.md +263 -0
  184. package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/ProgressIndicatorSample.kt.md.txt +263 -0
  185. package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/RadioButtonSample.kt.md +105 -0
  186. package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/RadioButtonSample.kt.md.txt +105 -0
  187. package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/ScaffoldSample.kt.md +146 -0
  188. package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/ScaffoldSample.kt.md.txt +146 -0
  189. package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/ScrollAwaySample.kt.md +97 -0
  190. package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/ScrollAwaySample.kt.md.txt +97 -0
  191. package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/ScrollIndicatorSample.kt.md +66 -0
  192. package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/ScrollIndicatorSample.kt.md.txt +66 -0
  193. package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/SliderSample.kt.md +86 -0
  194. package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/SliderSample.kt.md.txt +86 -0
  195. package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/StepperSample.kt.md +148 -0
  196. package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/StepperSample.kt.md.txt +148 -0
  197. package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/SurfaceTransformationSample.kt.md +166 -0
  198. package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/SurfaceTransformationSample.kt.md.txt +166 -0
  199. package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/SwipeToDismissBoxSample.kt.md +172 -0
  200. package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/SwipeToDismissBoxSample.kt.md.txt +172 -0
  201. package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/SwipeToRevealSample.kt.md +367 -0
  202. package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/SwipeToRevealSample.kt.md.txt +367 -0
  203. package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/SwitchButtonSample.kt.md +66 -0
  204. package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/SwitchButtonSample.kt.md.txt +66 -0
  205. package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/TextButtonSample.kt.md +115 -0
  206. package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/TextButtonSample.kt.md.txt +115 -0
  207. package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/TextToggleButtonSample.kt.md +71 -0
  208. package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/TextToggleButtonSample.kt.md.txt +71 -0
  209. package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/TimePickerSample.kt.md +151 -0
  210. package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/TimePickerSample.kt.md.txt +151 -0
  211. package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/TimeTextSample.kt.md +65 -0
  212. package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/TimeTextSample.kt.md.txt +65 -0
  213. package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/TransformationSpecSample.kt.md +246 -0
  214. package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/TransformationSpecSample.kt.md.txt +246 -0
  215. package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/TransformingLazyColumnNotificationsSample.kt.md +89 -0
  216. package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/TransformingLazyColumnNotificationsSample.kt.md.txt +89 -0
  217. package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/TransformingLazyColumnSample.kt.md +309 -0
  218. package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/TransformingLazyColumnSample.kt.md.txt +309 -0
  219. package/skills/mobile-android/references/devices/wear-compose-m3/references/navigation3/SwipeDismissableSceneStrategySample.kt.md +205 -0
  220. package/skills/mobile-android/references/devices/wear-compose-m3/references/navigation3/SwipeDismissableSceneStrategySample.kt.md.txt +205 -0
  221. package/skills/mobile-android/references/devices.md +11 -0
  222. package/skills/mobile-android/references/identity/restore-credentials/GUIDE.md +337 -0
  223. package/skills/mobile-android/references/identity/restore-credentials/references/android/guide/topics/manifest/application-element.md +832 -0
  224. package/skills/mobile-android/references/identity/restore-credentials/references/android/identity/passkeys/create-passkeys.md +327 -0
  225. package/skills/mobile-android/references/identity/restore-credentials/references/android/identity/passkeys/sign-in-with-passkeys.md +219 -0
  226. package/skills/mobile-android/references/identity/verified-email/GUIDE.md +405 -0
  227. package/skills/mobile-android/references/identity/verified-email/references/android/identity/credential-manager/index.md +67 -0
  228. package/skills/mobile-android/references/identity/verified-email/references/android/identity/digital-credentials/credential-verifier.md +166 -0
  229. package/skills/mobile-android/references/identity/verified-email/references/android/identity/digital-credentials/email-verification-implementation.md +313 -0
  230. package/skills/mobile-android/references/identity/verified-email/references/android/identity/digital-credentials/email-verification.md +158 -0
  231. package/skills/mobile-android/references/identity/verified-email/references/android/identity/digital-credentials/index.md +112 -0
  232. package/skills/mobile-android/references/identity/verified-email/references/android/identity/passkeys/create-passkeys.md +327 -0
  233. package/skills/mobile-android/references/identity/verified-email/references/android/identity/sign-in/credential-manager-webview.md +84 -0
  234. package/skills/mobile-android/references/identity.md +10 -0
  235. package/skills/mobile-android/references/media/camerax/GUIDE.md +106 -0
  236. package/skills/mobile-android/references/media/camerax/references/camera1-to-camerax.md +198 -0
  237. package/skills/mobile-android/references/media/camerax/references/camera2-to-camerax.md +193 -0
  238. package/skills/mobile-android/references/media/camerax/references/expert-blueprints.md +58 -0
  239. package/skills/mobile-android/references/media/camerax/references/foldables.md +83 -0
  240. package/skills/mobile-android/references/media/camerax/references/immutability.md +60 -0
  241. package/skills/mobile-android/references/media/camerax/references/low-light.md +124 -0
  242. package/skills/mobile-android/references/media/camerax/references/mlkit-spatial.md +75 -0
  243. package/skills/mobile-android/references/media/camerax/references/modern-apis.md +42 -0
  244. package/skills/mobile-android/references/media/camerax/references/testing.md +69 -0
  245. package/skills/mobile-android/references/media/camerax/references/thermals.md +85 -0
  246. package/skills/mobile-android/references/media/camerax/references/wear-os.md +76 -0
  247. package/skills/mobile-android/references/media/camerax/references/xr.md +54 -0
  248. package/skills/mobile-android/references/media/media3-cast-integration/GUIDE.md +213 -0
  249. package/skills/mobile-android/references/media/media3-cast-integration/references/android/media/media3/cast/create-castplayer.md +390 -0
  250. package/skills/mobile-android/references/media/media3-cast-integration/references/android/media/media3/cast/customize-castoptions.md +93 -0
  251. package/skills/mobile-android/references/media/media3-cast-integration/references/android/media/media3/cast/index.md +21 -0
  252. package/skills/mobile-android/references/media.md +10 -0
  253. package/skills/mobile-android/references/on-device-ai/appfunctions/GUIDE.md +51 -0
  254. package/skills/mobile-android/references/on-device-ai/appfunctions/references/adb-interaction-testing.md +95 -0
  255. package/skills/mobile-android/references/on-device-ai/appfunctions/references/context.md +26 -0
  256. package/skills/mobile-android/references/on-device-ai/appfunctions/references/feature-discovery-analysis.md +71 -0
  257. package/skills/mobile-android/references/on-device-ai/appfunctions/references/implementation-configuration.md +282 -0
  258. package/skills/mobile-android/references/on-device-ai/appfunctions/references/kdoc-refinement-optimization.md +75 -0
  259. package/skills/mobile-android/references/on-device-ai/appfunctions/references/migrate-to-service-entry-point.md +226 -0
  260. package/skills/mobile-android/references/on-device-ai/ml-kit-genai-prompt-api/GUIDE.md +105 -0
  261. package/skills/mobile-android/references/on-device-ai/ml-kit-genai-prompt-api/references/get-started.md +272 -0
  262. package/skills/mobile-android/references/on-device-ai/ml-kit-genai-prompt-api/references/prefix-caching.md +146 -0
  263. package/skills/mobile-android/references/on-device-ai/ml-kit-genai-prompt-api/references/prompt-design.md +55 -0
  264. package/skills/mobile-android/references/on-device-ai/ml-kit-genai-prompt-api/references/prompt-optimization.md +74 -0
  265. package/skills/mobile-android/references/on-device-ai/ml-kit-genai-prompt-api/references/structured-output.md +219 -0
  266. package/skills/mobile-android/references/on-device-ai/ml-kit-genai-prompt-api/references/system-instructions.md +71 -0
  267. package/skills/mobile-android/references/on-device-ai.md +10 -0
  268. package/skills/mobile-android/references/play/engage-sdk-integration/GUIDE.md +112 -0
  269. package/skills/mobile-android/references/play/engage-sdk-integration/references/android/guide/playcore/engage/faq.md +439 -0
  270. package/skills/mobile-android/references/play/engage-sdk-integration/references/android/guide/playcore/engage/food.md +1149 -0
  271. package/skills/mobile-android/references/play/engage-sdk-integration/references/android/guide/playcore/engage/healthandfitness.md +1055 -0
  272. package/skills/mobile-android/references/play/engage-sdk-integration/references/android/guide/playcore/engage/listen.md +1050 -0
  273. package/skills/mobile-android/references/play/engage-sdk-integration/references/android/guide/playcore/engage/otherverticals.md +1301 -0
  274. package/skills/mobile-android/references/play/engage-sdk-integration/references/android/guide/playcore/engage/read.md +910 -0
  275. package/skills/mobile-android/references/play/engage-sdk-integration/references/android/guide/playcore/engage/shopping.md +1224 -0
  276. package/skills/mobile-android/references/play/engage-sdk-integration/references/android/guide/playcore/engage/social.md +719 -0
  277. package/skills/mobile-android/references/play/engage-sdk-integration/references/android/guide/playcore/engage/travel.md +1413 -0
  278. package/skills/mobile-android/references/play/engage-sdk-integration/references/android/guide/playcore/engage/tv/continue-watching/index.md +19 -0
  279. package/skills/mobile-android/references/play/engage-sdk-integration/references/android/guide/playcore/engage/tv/entitlements.md +353 -0
  280. package/skills/mobile-android/references/play/engage-sdk-integration/references/android/guide/playcore/engage/tv/getting-started.md +202 -0
  281. package/skills/mobile-android/references/play/engage-sdk-integration/references/android/guide/playcore/engage/tv/recommendations.md +471 -0
  282. package/skills/mobile-android/references/play/engage-sdk-integration/references/android/guide/playcore/engage/watch.md +1081 -0
  283. package/skills/mobile-android/references/play/engage-sdk-integration/references/clusters.md +154 -0
  284. package/skills/mobile-android/references/play/engage-sdk-integration/references/common.md +519 -0
  285. package/skills/mobile-android/references/play/engage-sdk-integration/references/patterns.md +527 -0
  286. package/skills/mobile-android/references/play/engage-sdk-integration/references/requests.md +260 -0
  287. package/skills/mobile-android/references/play/engage-sdk-integration/references/schemas/food.md +509 -0
  288. package/skills/mobile-android/references/play/engage-sdk-integration/references/schemas/listen.md +842 -0
  289. package/skills/mobile-android/references/play/engage-sdk-integration/references/schemas/other.md +220 -0
  290. package/skills/mobile-android/references/play/engage-sdk-integration/references/schemas/read.md +412 -0
  291. package/skills/mobile-android/references/play/engage-sdk-integration/references/schemas/shopping.md +357 -0
  292. package/skills/mobile-android/references/play/engage-sdk-integration/references/schemas/social.md +228 -0
  293. package/skills/mobile-android/references/play/engage-sdk-integration/references/schemas/travel.md +923 -0
  294. package/skills/mobile-android/references/play/engage-sdk-integration/references/schemas/tv.md +1226 -0
  295. package/skills/mobile-android/references/play/engage-sdk-integration/references/schemas/watch.md +1137 -0
  296. package/skills/mobile-android/references/play/engage-sdk-integration/references/troubleshooting.md +39 -0
  297. package/skills/mobile-android/references/play/play-billing-library-version-upgrade/GUIDE.md +75 -0
  298. package/skills/mobile-android/references/play/play-billing-library-version-upgrade/references/android/google/play/billing/release-notes.md +1240 -0
  299. package/skills/mobile-android/references/play/play-billing-library-version-upgrade/references/migration-logic.md +78 -0
  300. package/skills/mobile-android/references/play/play-billing-library-version-upgrade/references/version-checklist.md +54 -0
  301. package/skills/mobile-android/references/play/play-policy-insights/GUIDE.md +130 -0
  302. package/skills/mobile-android/references/play/play-policy-insights/resources/common_mandates.md +100 -0
  303. package/skills/mobile-android/references/play/play-policy-insights/resources/compliance_report_template.md +59 -0
  304. package/skills/mobile-android/references/play/play-policy-insights/resources/critic.md +86 -0
  305. package/skills/mobile-android/references/play/play-policy-insights/resources/goal_data_safety.md +212 -0
  306. package/skills/mobile-android/references/play/play-policy-insights/resources/goal_permissions_and_apis.md +459 -0
  307. package/skills/mobile-android/references/play/play-policy-insights/resources/goal_user_account.md +106 -0
  308. package/skills/mobile-android/references/play/play-policy-insights/resources/policies.json +321 -0
  309. package/skills/mobile-android/references/play/play-policy-insights/resources/scanner_config.json +843 -0
  310. package/skills/mobile-android/references/play/play-policy-insights/scripts/generate_report.py +860 -0
  311. package/skills/mobile-android/references/play/play-policy-insights/scripts/orchestrator.py +1313 -0
  312. package/skills/mobile-android/references/play/play-policy-insights/scripts/play_store_scraper.py +410 -0
  313. package/skills/mobile-android/references/play/play-policy-insights/scripts/scanner.py +261 -0
  314. package/skills/mobile-android/references/play/play-policy-insights/scripts/template_engine.py +243 -0
  315. package/skills/mobile-android/references/play.md +11 -0
  316. package/skills/mobile-android/references/ui/adaptive/GUIDE.md +280 -0
  317. package/skills/mobile-android/references/ui/adaptive/references/android/develop/ui/compose/layouts/adaptive/flexbox/container-behavior.md +112 -0
  318. package/skills/mobile-android/references/ui/adaptive/references/android/develop/ui/compose/layouts/adaptive/flexbox/get-started.md +69 -0
  319. package/skills/mobile-android/references/ui/adaptive/references/android/develop/ui/compose/layouts/adaptive/flexbox/index.md +81 -0
  320. package/skills/mobile-android/references/ui/adaptive/references/android/develop/ui/compose/layouts/adaptive/flexbox/item-behavior.md +170 -0
  321. package/skills/mobile-android/references/ui/adaptive/references/android/develop/ui/compose/layouts/adaptive/grid/container-properties.md +415 -0
  322. package/skills/mobile-android/references/ui/adaptive/references/android/develop/ui/compose/layouts/adaptive/grid/get-started.md +51 -0
  323. package/skills/mobile-android/references/ui/adaptive/references/android/develop/ui/compose/layouts/adaptive/grid/index.md +73 -0
  324. package/skills/mobile-android/references/ui/adaptive/references/android/develop/ui/compose/layouts/adaptive/grid/item-properties.md +170 -0
  325. package/skills/mobile-android/references/ui/adaptive/references/android/develop/ui/compose/layouts/adaptive/mediaquery/index.md +333 -0
  326. package/skills/mobile-android/references/ui/adaptive/references/android/develop/ui/compose/tooling/debug.md +114 -0
  327. package/skills/mobile-android/references/ui/adaptive/references/android/guide/navigation/navigation-3/recipes/material-listdetail.md +141 -0
  328. package/skills/mobile-android/references/ui/edge-to-edge/GUIDE.md +409 -0
  329. package/skills/mobile-android/references/ui/migrate-xml-views-to-jetpack-compose/GUIDE.md +104 -0
  330. package/skills/mobile-android/references/ui/migrate-xml-views-to-jetpack-compose/references/analysis-of-the-project-and-layout.md +42 -0
  331. 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
  332. 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
  333. 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
  334. 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
  335. package/skills/mobile-android/references/ui/migrate-xml-views-to-jetpack-compose/references/identify-optimal-xml-candidate.md +31 -0
  336. package/skills/mobile-android/references/ui/migrate-xml-views-to-jetpack-compose/references/xml-layout-migration.md +86 -0
  337. package/skills/mobile-android/references/ui/navigation-3/GUIDE.md +86 -0
  338. package/skills/mobile-android/references/ui/navigation-3/references/android/guide/navigation/navigation-3/index.md +51 -0
  339. package/skills/mobile-android/references/ui/navigation-3/references/android/guide/navigation/navigation-3/migration-guide.md +670 -0
  340. package/skills/mobile-android/references/ui/navigation-3/references/android/guide/navigation/navigation-3/recipes/animations.md +147 -0
  341. package/skills/mobile-android/references/ui/navigation-3/references/android/guide/navigation/navigation-3/recipes/basic.md +89 -0
  342. package/skills/mobile-android/references/ui/navigation-3/references/android/guide/navigation/navigation-3/recipes/basicdsl.md +85 -0
  343. package/skills/mobile-android/references/ui/navigation-3/references/android/guide/navigation/navigation-3/recipes/basicsaveable.md +90 -0
  344. package/skills/mobile-android/references/ui/navigation-3/references/android/guide/navigation/navigation-3/recipes/bottomsheet.md +195 -0
  345. package/skills/mobile-android/references/ui/navigation-3/references/android/guide/navigation/navigation-3/recipes/common-ui.md +200 -0
  346. package/skills/mobile-android/references/ui/navigation-3/references/android/guide/navigation/navigation-3/recipes/conditional-transitions.md +182 -0
  347. package/skills/mobile-android/references/ui/navigation-3/references/android/guide/navigation/navigation-3/recipes/conditional.md +230 -0
  348. package/skills/mobile-android/references/ui/navigation-3/references/android/guide/navigation/navigation-3/recipes/deeplinks-custommatcher.md +176 -0
  349. package/skills/mobile-android/references/ui/navigation-3/references/android/guide/navigation/navigation-3/recipes/deeplinks-staticuri.md +140 -0
  350. package/skills/mobile-android/references/ui/navigation-3/references/android/guide/navigation/navigation-3/recipes/deeplinks-syntheticbackstack.md +184 -0
  351. package/skills/mobile-android/references/ui/navigation-3/references/android/guide/navigation/navigation-3/recipes/dialog.md +107 -0
  352. package/skills/mobile-android/references/ui/navigation-3/references/android/guide/navigation/navigation-3/recipes/lifecycle-owner.md +185 -0
  353. package/skills/mobile-android/references/ui/navigation-3/references/android/guide/navigation/navigation-3/recipes/material-listdetail.md +141 -0
  354. package/skills/mobile-android/references/ui/navigation-3/references/android/guide/navigation/navigation-3/recipes/material-supportingpane.md +145 -0
  355. package/skills/mobile-android/references/ui/navigation-3/references/android/guide/navigation/navigation-3/recipes/modular-hilt.md +283 -0
  356. package/skills/mobile-android/references/ui/navigation-3/references/android/guide/navigation/navigation-3/recipes/modular-koin.md +287 -0
  357. package/skills/mobile-android/references/ui/navigation-3/references/android/guide/navigation/navigation-3/recipes/multiple-backstacks.md +468 -0
  358. package/skills/mobile-android/references/ui/navigation-3/references/android/guide/navigation/navigation-3/recipes/passingarguments.md +371 -0
  359. package/skills/mobile-android/references/ui/navigation-3/references/android/guide/navigation/navigation-3/recipes/results-event.md +273 -0
  360. package/skills/mobile-android/references/ui/navigation-3/references/android/guide/navigation/navigation-3/recipes/results-state.md +266 -0
  361. package/skills/mobile-android/references/ui/navigation-3/references/android/guide/navigation/navigation-3/recipes/scenes-listdetail.md +435 -0
  362. package/skills/mobile-android/references/ui/navigation-3/references/android/guide/navigation/navigation-3/recipes/scenes-twopane.md +244 -0
  363. package/skills/mobile-android/references/ui/navigation-3/references/android/guide/navigation/type-safe-destinations.md +129 -0
  364. package/skills/mobile-android/references/ui/navigation-event/GUIDE.md +288 -0
  365. package/skills/mobile-android/references/ui/navigation-event/references/android/guide/navigation/navigation-event/dispatcher.md +134 -0
  366. package/skills/mobile-android/references/ui/navigation-event/references/android/guide/navigation/navigation-event/handle-back.md +217 -0
  367. package/skills/mobile-android/references/ui/navigation-event/references/android/guide/navigation/navigation-event/index.md +83 -0
  368. package/skills/mobile-android/references/ui/navigation-event/references/android/guide/navigation/navigation-event/setup.md +32 -0
  369. package/skills/mobile-android/references/ui/styles/GUIDE.md +209 -0
  370. package/skills/mobile-android/references/ui/styles/references/android/develop/ui/compose/designsystems/custom.md +459 -0
  371. package/skills/mobile-android/references/ui/styles/references/android/develop/ui/compose/styles/fundamentals.md +421 -0
  372. package/skills/mobile-android/references/ui/styles/references/android/develop/ui/compose/styles/state-animations.md +461 -0
  373. package/skills/mobile-android/references/ui/styles/references/android/develop/ui/compose/styles/styles-vs-modifiers.md +48 -0
  374. package/skills/mobile-android/references/ui/styles/references/android/develop/ui/compose/styles/theming.md +269 -0
  375. package/skills/mobile-android/references/ui.md +14 -0
  376. package/skills/mobile-architecture/SKILL.md +52 -0
  377. package/skills/mobile-architecture/references/android.md +54 -0
  378. package/skills/{flutter-app-architecture/SKILL.md → mobile-architecture/references/flutter/app-architecture.md} +1 -8
  379. package/skills/{bloc/SKILL.md → mobile-architecture/references/flutter/bloc.md} +1 -8
  380. package/skills/{flutter-change-notifier/SKILL.md → mobile-architecture/references/flutter/change-notifier.md} +1 -8
  381. package/skills/{architecture-feature-first/SKILL.md → mobile-architecture/references/flutter/feature-first.md} +1 -8
  382. package/skills/{flutter-login-usecase/SKILL.md → mobile-architecture/references/flutter/login-use-case.md} +0 -7
  383. package/skills/{flutter-managing-state/SKILL.md → mobile-architecture/references/flutter/managing-state.md} +2 -11
  384. package/skills/{provider/SKILL.md → mobile-architecture/references/flutter/provider.md} +1 -8
  385. package/skills/{flutter-apply-architecture-best-practices/SKILL.md → mobile-architecture/references/flutter/recommended-architecture.md} +2 -11
  386. package/skills/{riverpod/SKILL.md → mobile-architecture/references/flutter/riverpod.md} +1 -8
  387. package/skills/mobile-architecture/references/flutter.md +21 -0
  388. package/skills/mobile-architecture/references/ios.md +58 -0
  389. package/skills/mobile-architecture/references/react-native.md +61 -0
  390. package/skills/mobile-code-review/SKILL.md +70 -0
  391. package/skills/mobile-code-review/references/android.md +51 -0
  392. package/skills/{code-review/SKILL.md → mobile-code-review/references/flutter/pr-review.md} +1 -8
  393. package/skills/{flutter-project-audit/SKILL.md → mobile-code-review/references/flutter/project-audit.md} +0 -7
  394. package/skills/{dart-run-static-analysis/SKILL.md → mobile-code-review/references/flutter/static-analysis.md} +2 -11
  395. package/skills/{flutter-widget-review/SKILL.md → mobile-code-review/references/flutter/widget-review.md} +0 -7
  396. package/skills/mobile-code-review/references/flutter.md +18 -0
  397. package/skills/mobile-code-review/references/ios.md +49 -0
  398. package/skills/mobile-code-review/references/react-native.md +58 -0
  399. package/skills/mobile-debug/SKILL.md +50 -0
  400. package/skills/mobile-debug/references/android/gradle-build.md +63 -0
  401. package/skills/mobile-debug/references/android.md +26 -0
  402. package/skills/mobile-debug/references/flutter/build.md +58 -0
  403. package/skills/{flutter-errors/SKILL.md → mobile-debug/references/flutter/errors.md} +1 -8
  404. package/skills/{flutter-fix-layout-issues/SKILL.md → mobile-debug/references/flutter/layout-issues.md} +2 -11
  405. package/skills/{dart-resolve-package-conflicts/SKILL.md → mobile-debug/references/flutter/package-conflicts.md} +2 -11
  406. package/skills/{dart-fix-runtime-errors/SKILL.md → mobile-debug/references/flutter/runtime-errors.md} +2 -11
  407. package/skills/mobile-debug/references/flutter.md +23 -0
  408. package/skills/mobile-debug/references/ios/cocoapods.md +57 -0
  409. package/skills/mobile-debug/references/ios/xcode-build.md +58 -0
  410. package/skills/mobile-debug/references/ios.md +23 -0
  411. package/skills/mobile-debug/references/react-native.md +43 -0
  412. package/skills/{detect-mobile-stack → mobile-detect-stack}/SKILL.md +1 -1
  413. package/skills/mobile-firebase/SKILL.md +54 -0
  414. package/skills/mobile-firebase/references/android/ai-logic.md +31 -0
  415. package/skills/mobile-firebase/references/android/analytics.md +33 -0
  416. package/skills/mobile-firebase/references/android/app-check.md +36 -0
  417. package/skills/mobile-firebase/references/android/auth.md +44 -0
  418. package/skills/mobile-firebase/references/android/crashlytics.md +31 -0
  419. package/skills/mobile-firebase/references/android/firestore.md +44 -0
  420. package/skills/mobile-firebase/references/android/functions.md +33 -0
  421. package/skills/mobile-firebase/references/android/in-app-messaging.md +28 -0
  422. package/skills/mobile-firebase/references/android/messaging.md +41 -0
  423. package/skills/mobile-firebase/references/android/realtime-database.md +50 -0
  424. package/skills/mobile-firebase/references/android/remote-config.md +43 -0
  425. package/skills/mobile-firebase/references/android/sql-connect.md +31 -0
  426. package/skills/mobile-firebase/references/android/storage.md +39 -0
  427. package/skills/mobile-firebase/references/android.md +30 -0
  428. package/skills/{firebase-ai/SKILL.md → mobile-firebase/references/flutter/ai-logic.md} +2 -8
  429. package/skills/{firebase-analytics/SKILL.md → mobile-firebase/references/flutter/analytics.md} +2 -8
  430. package/skills/{firebase-app-check/SKILL.md → mobile-firebase/references/flutter/app-check.md} +2 -8
  431. package/skills/{firebase-auth/SKILL.md → mobile-firebase/references/flutter/auth.md} +2 -8
  432. package/skills/{firebase-crashlytics/SKILL.md → mobile-firebase/references/flutter/crashlytics.md} +2 -8
  433. package/skills/{firebase-cloud-firestore/SKILL.md → mobile-firebase/references/flutter/firestore.md} +2 -8
  434. package/skills/{firebase-cloud-functions/SKILL.md → mobile-firebase/references/flutter/functions.md} +2 -8
  435. package/skills/{firebase-in-app-messaging/SKILL.md → mobile-firebase/references/flutter/in-app-messaging.md} +2 -8
  436. package/skills/{firebase-messaging/SKILL.md → mobile-firebase/references/flutter/messaging.md} +2 -8
  437. package/skills/{firebase-database/SKILL.md → mobile-firebase/references/flutter/realtime-database.md} +2 -8
  438. package/skills/{firebase-remote-config/SKILL.md → mobile-firebase/references/flutter/remote-config.md} +2 -8
  439. package/skills/{flutterfire-configure/SKILL.md → mobile-firebase/references/flutter/setup-flutterfire.md} +1 -8
  440. package/skills/{firebase-data-connect/SKILL.md → mobile-firebase/references/flutter/sql-connect.md} +2 -8
  441. package/skills/{firebase-storage/SKILL.md → mobile-firebase/references/flutter/storage.md} +2 -8
  442. package/skills/mobile-firebase/references/flutter.md +36 -0
  443. package/skills/mobile-firebase/references/ios/ai-logic.md +30 -0
  444. package/skills/mobile-firebase/references/ios/analytics.md +33 -0
  445. package/skills/mobile-firebase/references/ios/app-check.md +36 -0
  446. package/skills/mobile-firebase/references/ios/auth.md +48 -0
  447. package/skills/mobile-firebase/references/ios/crashlytics.md +34 -0
  448. package/skills/mobile-firebase/references/ios/firestore.md +53 -0
  449. package/skills/mobile-firebase/references/ios/functions.md +35 -0
  450. package/skills/mobile-firebase/references/ios/in-app-messaging.md +26 -0
  451. package/skills/mobile-firebase/references/ios/messaging.md +45 -0
  452. package/skills/mobile-firebase/references/ios/realtime-database.md +49 -0
  453. package/skills/mobile-firebase/references/ios/remote-config.md +44 -0
  454. package/skills/mobile-firebase/references/ios/sql-connect.md +33 -0
  455. package/skills/mobile-firebase/references/ios/storage.md +36 -0
  456. package/skills/mobile-firebase/references/ios.md +28 -0
  457. package/skills/mobile-firebase/references/react-native/ai-logic.md +32 -0
  458. package/skills/mobile-firebase/references/react-native/analytics.md +43 -0
  459. package/skills/mobile-firebase/references/react-native/app-check.md +35 -0
  460. package/skills/mobile-firebase/references/react-native/auth.md +50 -0
  461. package/skills/mobile-firebase/references/react-native/crashlytics.md +36 -0
  462. package/skills/mobile-firebase/references/react-native/firestore.md +45 -0
  463. package/skills/mobile-firebase/references/react-native/functions.md +28 -0
  464. package/skills/mobile-firebase/references/react-native/in-app-messaging.md +27 -0
  465. package/skills/mobile-firebase/references/react-native/messaging.md +46 -0
  466. package/skills/mobile-firebase/references/react-native/realtime-database.md +46 -0
  467. package/skills/mobile-firebase/references/react-native/remote-config.md +32 -0
  468. package/skills/mobile-firebase/references/react-native/sql-connect.md +11 -0
  469. package/skills/mobile-firebase/references/react-native/storage.md +30 -0
  470. package/skills/mobile-firebase/references/react-native.md +29 -0
  471. package/skills/mobile-flutter/SKILL.md +30 -0
  472. package/skills/{flutter-improving-accessibility/SKILL.md → mobile-flutter/references/accessibility-i18n/accessibility.md} +2 -11
  473. package/skills/{flutter-setup-localization/SKILL.md → mobile-flutter/references/accessibility-i18n/localization.md} +2 -11
  474. package/skills/mobile-flutter/references/accessibility-i18n.md +8 -0
  475. package/skills/{dart-3-updates/SKILL.md → mobile-flutter/references/dart/dart-3.md} +1 -8
  476. package/skills/{effective-dart/SKILL.md → mobile-flutter/references/dart/effective-dart.md} +1 -8
  477. package/skills/{dart-use-pattern-matching/SKILL.md → mobile-flutter/references/dart/pattern-matching/GUIDE.md} +2 -18
  478. package/skills/mobile-flutter/references/dart.md +9 -0
  479. package/skills/{flutter-caching-data/SKILL.md → mobile-flutter/references/data/caching.md} +2 -11
  480. package/skills/{flutter-working-with-databases/SKILL.md → mobile-flutter/references/data/databases.md} +2 -11
  481. package/skills/{flutter-use-http-package/SKILL.md → mobile-flutter/references/data/http.md} +2 -11
  482. package/skills/{flutter-implement-json-serialization/SKILL.md → mobile-flutter/references/data/json-serialization.md} +2 -11
  483. package/skills/mobile-flutter/references/data.md +10 -0
  484. package/skills/{flutter-interoperating-with-native-apis/SKILL.md → mobile-flutter/references/native/native-apis.md} +2 -11
  485. package/skills/{flutter-embedding-native-views/SKILL.md → mobile-flutter/references/native/native-views.md} +2 -11
  486. package/skills/{flutter-building-plugins/SKILL.md → mobile-flutter/references/native/plugins.md} +2 -11
  487. package/skills/mobile-flutter/references/native.md +9 -0
  488. package/skills/{flutter-reducing-app-size/SKILL.md → mobile-flutter/references/performance/app-size.md} +2 -11
  489. package/skills/{flutter-handling-concurrency/SKILL.md → mobile-flutter/references/performance/concurrency.md} +2 -11
  490. package/skills/mobile-flutter/references/performance.md +8 -0
  491. package/skills/{flutter-setting-up-on-macos/SKILL.md → mobile-flutter/references/setup/macos.md} +2 -11
  492. package/skills/mobile-flutter/references/setup.md +7 -0
  493. package/skills/{flutter-animating-apps/SKILL.md → mobile-flutter/references/ui/animations.md} +2 -11
  494. package/skills/{flutter-building-forms/SKILL.md → mobile-flutter/references/ui/forms.md} +2 -11
  495. package/skills/{flutter-adding-home-screen-widgets/SKILL.md → mobile-flutter/references/ui/home-screen-widgets.md} +2 -11
  496. package/skills/{flutter-building-layouts/SKILL.md → mobile-flutter/references/ui/layouts.md} +2 -11
  497. package/skills/{flutter-build-responsive-layout/SKILL.md → mobile-flutter/references/ui/responsive-layout.md} +2 -11
  498. package/skills/{flutter-setup-declarative-routing/SKILL.md → mobile-flutter/references/ui/routing.md} +2 -11
  499. package/skills/{flutter-theming-apps/SKILL.md → mobile-flutter/references/ui/theming.md} +2 -11
  500. package/skills/{flutter-add-widget-preview/SKILL.md → mobile-flutter/references/ui/widget-previews.md} +2 -11
  501. package/skills/mobile-flutter/references/ui.md +14 -0
  502. package/skills/mobile-ios/SKILL.md +25 -0
  503. package/skills/mobile-ios/references/data-networking.md +70 -0
  504. package/skills/mobile-ios/references/performance-release.md +37 -0
  505. package/skills/mobile-ios/references/platform-features.md +52 -0
  506. package/skills/mobile-ios/references/ui-navigation.md +64 -0
  507. package/skills/mobile-rn/SKILL.md +26 -0
  508. package/skills/mobile-rn/references/data-networking.md +59 -0
  509. package/skills/mobile-rn/references/performance-release.md +46 -0
  510. package/skills/mobile-rn/references/platform-features.md +40 -0
  511. package/skills/mobile-rn/references/ui-navigation.md +62 -0
  512. package/skills/mobile-security/SKILL.md +82 -0
  513. package/skills/mobile-security/references/android/intent-security.md +523 -0
  514. package/skills/mobile-security/references/android.md +37 -0
  515. package/skills/{flutter-secure-token-store/SKILL.md → mobile-security/references/flutter/secure-token-store.md} +1 -8
  516. package/skills/mobile-security/references/flutter.md +30 -0
  517. package/skills/mobile-security/references/ios.md +27 -0
  518. package/skills/mobile-security/references/react-native.md +29 -0
  519. package/skills/mobile-test/SKILL.md +63 -0
  520. package/skills/mobile-test/references/android/setup/GUIDE.md +183 -0
  521. package/skills/mobile-test/references/android/setup/references/android/develop/ui/compose/testing/common-patterns.md +181 -0
  522. package/skills/mobile-test/references/android/setup/references/android/studio/preview/compose-screenshot-testing.md +255 -0
  523. package/skills/mobile-test/references/android/setup/references/android/training/dependency-injection/hilt-testing.md +447 -0
  524. package/skills/mobile-test/references/android.md +83 -0
  525. package/skills/{dart-collect-coverage/SKILL.md → mobile-test/references/flutter/coverage.md} +2 -11
  526. package/skills/{dart-generate-test-mocks/SKILL.md → mobile-test/references/flutter/generate-mocks.md} +2 -11
  527. package/skills/{flutter-add-integration-test/SKILL.md → mobile-test/references/flutter/integration-tests.md} +2 -11
  528. package/skills/{dart-migrate-to-checks-package/SKILL.md → mobile-test/references/flutter/migrate-to-checks.md} +2 -13
  529. package/skills/{mockito/SKILL.md → mobile-test/references/flutter/mockito.md} +1 -8
  530. package/skills/{mocktail/SKILL.md → mobile-test/references/flutter/mocktail.md} +1 -8
  531. package/skills/{patrol-e2e-testing/SKILL.md → mobile-test/references/flutter/patrol.md} +1 -8
  532. package/skills/{testing/SKILL.md → mobile-test/references/flutter/testing-guidelines.md} +1 -8
  533. package/skills/{dart-add-unit-test/SKILL.md → mobile-test/references/flutter/unit-tests.md} +2 -11
  534. package/skills/{flutter-add-widget-test/SKILL.md → mobile-test/references/flutter/widget-tests.md} +2 -11
  535. package/skills/mobile-test/references/flutter.md +44 -0
  536. package/skills/mobile-test/references/ios.md +79 -0
  537. package/skills/mobile-test/references/react-native.md +62 -0
  538. package/skills/mobile-security-audit/SKILL.md +0 -101
  539. /package/skills/{dart-use-pattern-matching → mobile-flutter/references/dart/pattern-matching}/examples/json_patterns.dart +0 -0
@@ -4,6 +4,7 @@ import { join } from 'node:path';
4
4
  import { parseArgs } from 'node:util';
5
5
 
6
6
  import { LANGUAGES, configPath, removeConfig, resolveLanguage, saveLanguage } from '../core/config/language.mjs';
7
+ import { resolveProjectDir } from '../core/config/project.mjs';
7
8
  import { collectReviewContext } from '../core/context/context-engine.mjs';
8
9
  import { detectStack } from '../core/detection/stack-detector.mjs';
9
10
  import { runDoctor } from '../core/diagnostics/doctor.mjs';
@@ -24,11 +25,12 @@ Commands:
24
25
  doctor Diagnose the environment for the detected stack
25
26
  route <prompt...> Show which intent, agent and skills a prompt resolves to
26
27
  review [prompt...] Route a code review and collect the git context for it
28
+ debug [problem...] Route a build or runtime failure and report the toolchain it runs on
27
29
  agents | skills | stacks List registered components
28
30
  validate Validate the plugin's agents, skills and stacks
29
31
 
30
32
  Options:
31
- --dir <path> Project directory (default: current directory)
33
+ --dir <path> Project directory (default: current directory, or "app" in .reis-mobile/config.yaml)
32
34
  --intent <id> Force an intent (${INTENT_IDS.join(', ')})
33
35
  --base <ref> review: compare <ref>...HEAD instead of the working tree
34
36
  --all doctor: check every tool, not only the relevant ones
@@ -63,6 +65,7 @@ const COMMANDS = {
63
65
  doctor: commandDoctor,
64
66
  route: commandRoute,
65
67
  review: commandReview,
68
+ debug: commandDebug,
66
69
  agents: (options) => commandList('agents', options),
67
70
  skills: (options) => commandList('skills', options),
68
71
  stacks: (options) => commandList('stacks', options),
@@ -88,9 +91,16 @@ async function main(argv) {
88
91
  console.error(`Unknown command "${name}".\n\n${USAGE}`);
89
92
  return 1;
90
93
  }
91
- return (await command({ ...options, dir: options.dir ?? process.cwd(), prompt: rest.join(' ') })) ?? 0;
94
+ const dir = options.dir ?? process.cwd();
95
+ // Commands that analyze a project honor `app:` from .reis-mobile/config.yaml.
96
+ const project = PROJECT_COMMANDS.has(name) ? resolveProjectDir(dir) : { projectDir: dir, config: null, warnings: [] };
97
+ for (const warning of project.warnings) console.error(`! ${warning}`);
98
+
99
+ return (await command({ ...options, dir: project.projectDir, project, prompt: rest.join(' ') })) ?? 0;
92
100
  }
93
101
 
102
+ const PROJECT_COMMANDS = new Set(['detect', 'doctor', 'route', 'review', 'debug']);
103
+
94
104
  async function commandInit({ local, scope, uninstall, lang, prompt }) {
95
105
  const requested = lang ?? (prompt || process.env.REIS_MOBILE_LANG || undefined);
96
106
  // Validate before touching Claude Code or Codex, so a typo does not leave a half-done install.
@@ -136,10 +146,12 @@ async function commandLang({ prompt, json }) {
136
146
  return 0;
137
147
  }
138
148
 
139
- async function commandDetect({ dir, json, lang }) {
149
+ async function commandDetect({ dir, project, json, lang }) {
140
150
  const detection = await detectStack(dir);
141
151
  const language = await resolveLanguage({ flag: lang });
142
- if (json) return print({ ...detection, language });
152
+ if (json) return print({ ...detection, language, projectConfig: project.config?.path ?? null });
153
+
154
+ printProject(project);
143
155
 
144
156
  console.log(`Stack ${detection.stack}${detection.variant ? ` (${detection.variant})` : ''}`);
145
157
  console.log(`Languages ${detection.languages.join(', ') || '-'}`);
@@ -151,47 +163,54 @@ async function commandDetect({ dir, json, lang }) {
151
163
  return detection.stack === 'unknown' ? 2 : 0;
152
164
  }
153
165
 
154
- async function commandDoctor({ dir, all, strict, json, lang }) {
166
+ async function commandDoctor({ dir, project, all, strict, json, lang }) {
155
167
  const report = await runDoctor({ projectDir: dir, all });
156
168
  const language = await resolveLanguage({ flag: lang });
157
169
  if (json) {
158
- print({ ...report, language });
170
+ print({ ...report, language, projectConfig: project.config?.path ?? null });
159
171
  } else {
160
172
  console.log('reis-mobile doctor\n');
161
- for (const [section, title] of [['environment', 'Environment'], ['project', 'Project'], ['integrations', 'Integrations']]) {
162
- const checks = report.checks.filter((check) => check.section === section);
163
- if (!checks.length) continue;
164
- console.log(`${title}\n${'-'.repeat(title.length)}`);
165
- for (const check of checks) console.log(`${check.label.padEnd(16)}${SYMBOLS[check.status]} ${check.detail ?? ''}`.trimEnd());
166
- console.log('');
167
- }
173
+ printProject(project);
174
+ printDoctorChecks(report);
168
175
  console.log(report.warnings ? `${report.warnings} warning(s)` : 'No issues found');
169
176
  printLanguage(language);
170
177
  }
171
178
  return strict && report.warnings ? 1 : 0;
172
179
  }
173
180
 
181
+ function printDoctorChecks(report) {
182
+ for (const [section, title] of [['environment', 'Environment'], ['project', 'Project'], ['integrations', 'Integrations']]) {
183
+ const checks = report.checks.filter((check) => check.section === section);
184
+ if (!checks.length) continue;
185
+ console.log(`${title}\n${'-'.repeat(title.length)}`);
186
+ for (const check of checks) console.log(`${check.label.padEnd(16)}${SYMBOLS[check.status]} ${check.detail ?? ''}`.trimEnd());
187
+ console.log('');
188
+ }
189
+ }
190
+
174
191
  const SYMBOLS = { ok: '✓', warning: '✗', info: '-', skipped: '-' };
175
192
 
176
- async function commandRoute({ dir, intent, prompt, json, lang }) {
193
+ async function commandRoute({ dir, project, intent, prompt, json, lang }) {
177
194
  if (!prompt && !intent) {
178
195
  console.error('route needs a prompt or --intent.');
179
196
  return 1;
180
197
  }
181
198
  const result = await route({ prompt, intent, projectDir: dir });
182
199
  const language = await resolveLanguage({ flag: lang });
183
- if (json) return print({ ...summarizeRoute(result), language });
200
+ if (json) return print({ ...summarizeRoute(result), language, projectConfig: project.config?.path ?? null });
201
+ printProject(project);
184
202
  printRoute(result);
185
203
  printLanguage(language);
186
204
  return 0;
187
205
  }
188
206
 
189
- async function commandReview({ dir, base, prompt, json, lang }) {
207
+ async function commandReview({ dir, project, base, prompt, json, lang }) {
190
208
  const result = await route({ prompt, intent: 'review', projectDir: dir });
191
209
  const context = collectReviewContext({ projectDir: dir, base });
192
210
  const language = await resolveLanguage({ flag: lang });
193
- if (json) return print({ ...summarizeRoute(result), language, context });
211
+ if (json) return print({ ...summarizeRoute(result), language, projectConfig: project.config?.path ?? null, context });
194
212
 
213
+ printProject(project);
195
214
  printRoute(result);
196
215
  printLanguage(language);
197
216
  console.log(`\nContext ${context.mode}${context.base ? ` (${context.base}...HEAD)` : ''}`);
@@ -201,6 +220,24 @@ async function commandReview({ dir, base, prompt, json, lang }) {
201
220
  return 0;
202
221
  }
203
222
 
223
+ /**
224
+ * Routes a failure to the debug agent and skills, and adds the doctor report: most build
225
+ * failures are toolchain mismatches (JDK, Gradle, Xcode, CocoaPods), which the report shows.
226
+ */
227
+ async function commandDebug({ dir, project, prompt, json, lang }) {
228
+ const result = await route({ prompt, intent: 'debug', projectDir: dir });
229
+ const doctor = await runDoctor({ projectDir: dir });
230
+ const language = await resolveLanguage({ flag: lang });
231
+ if (json) return print({ ...summarizeRoute(result), language, projectConfig: project.config?.path ?? null, doctor });
232
+
233
+ printProject(project);
234
+ printRoute(result);
235
+ printLanguage(language);
236
+ console.log('');
237
+ printDoctorChecks(doctor);
238
+ return 0;
239
+ }
240
+
204
241
  async function commandList(kind, { json }) {
205
242
  const registry = await loadRegistry();
206
243
  const items = registry[kind];
@@ -243,6 +280,11 @@ function printRoute(result) {
243
280
  for (const warning of result.warnings) console.log(`! ${warning}`);
244
281
  }
245
282
 
283
+ /** Only printed when .reis-mobile/config.yaml moved the command to another folder. */
284
+ function printProject({ projectDir, config }) {
285
+ if (config?.data.app !== undefined) console.log(`Project ${projectDir} (app from ${config.path})`);
286
+ }
287
+
246
288
  /** `-` means no saved language: the commands follow the language of the request. */
247
289
  function printLanguage(language) {
248
290
  console.log(`Language ${language ?? '-'}`);
@@ -39,6 +39,15 @@ Choose **three** agents whose priorities genuinely conflict on the question. A d
39
39
  | `reis-mobile:flutter-architect` | Layer boundaries, modularization, long-term maintenance cost | `opus` |
40
40
  | `reis-mobile:flutter-performance-engineer` | Frames, rebuilds, memory, startup time — hostile to indirection | `sonnet` |
41
41
  | `reis-mobile:flutter-test-engineer` | Testability, injection seams, coverage cost | `sonnet` |
42
+ | `reis-mobile:android-architect` | Native Android layers, Gradle modularization, long-term maintenance cost | `opus` |
43
+ | `reis-mobile:android-performance-engineer` | Recomposition, ANRs, startup, memory — hostile to indirection | `sonnet` |
44
+ | `reis-mobile:android-test-engineer` | Testability, injected dispatchers and fakes, coverage cost | `sonnet` |
45
+ | `reis-mobile:ios-architect` | Native iOS structure, packages, concurrency isolation | `opus` |
46
+ | `reis-mobile:ios-performance-engineer` | Hangs, view updates, launch time, retain cycles | `sonnet` |
47
+ | `reis-mobile:ios-test-engineer` | Testability, protocol seams, coverage cost | `sonnet` |
48
+ | `reis-mobile:rn-architect` | Feature boundaries, server vs client state, native module isolation | `opus` |
49
+ | `reis-mobile:rn-performance-engineer` | Re-renders, lists, JavaScript thread, startup | `sonnet` |
50
+ | `reis-mobile:rn-test-engineer` | Testability through the UI, mocks at boundaries, coverage cost | `sonnet` |
42
51
  | `reis-mobile:plugin-native-expert` | Flutter–native boundary, platform channels, lifecycle | `opus` |
43
52
  | `reis-mobile:mobile-staff-engineer` | Build, release, migration, cross-platform trade-offs | `opus` |
44
53
  | `reis-mobile:mobile-code-reviewer` | Concrete risk in the code that already exists | `sonnet` |
@@ -49,7 +58,7 @@ Automatic selection must end with **at least two different models** among the pa
49
58
 
50
59
  Selection rules:
51
60
 
52
- - The detected stack rules. The `flutter-*` agents only join Flutter projects; in native Android or iOS, use `mobile-staff-engineer` and `mobile-code-reviewer`.
61
+ - The detected stack rules. The `flutter-*` agents only join Flutter projects, `android-*` native Android, `ios-*` native iOS and `rn-*` React Native. Pick the architect, performance and test specialists of the detected stack first; `mobile-staff-engineer` and `mobile-code-reviewer` fit any stack.
53
62
  - Without native code in the project, do not call `plugin-native-expert`.
54
63
  - `--agents` overrides the automatic choice, but not the models: each agent keeps the one from the table. Unknown name: warn and stop.
55
64
  - `reis-mobile:lead-mobile` never debates — it moderates in step 7, always on `opus`, because synthesizing conflicting positions is the heaviest work in the flow.
@@ -0,0 +1,60 @@
1
+ ---
2
+ description: Mobile debugging — routes a build or runtime failure (Gradle, Xcode, CocoaPods, Flutter) to the right agent and skills, finds the cause with evidence and proposes the fix
3
+ argument-hint: "<error message, failing command or description of the problem>"
4
+ allowed-tools: ["Bash(node:*)", "Bash(git:*)", "Bash(flutter:*)", "Bash(dart:*)", "Bash(./gradlew:*)", "Bash(xcodebuild:*)", "Bash(pod:*)", "Bash(java:*)", "Read", "Grep", "Glob"]
5
+ ---
6
+
7
+ # reis-mobile debug
8
+
9
+ Arguments received: `$ARGUMENTS`
10
+
11
+ The arguments are the problem: an error message, the command that fails, or a description. Without them, ask the user for the failing command and its full output, and stop. A debug session without the actual error guesses; one with it verifies.
12
+
13
+ ## 1. Route and gather the toolchain
14
+
15
+ Run via Bash, with correct quoting:
16
+
17
+ ```bash
18
+ node "${CLAUDE_PLUGIN_ROOT}/bin/reis-mobile.mjs" debug --dir "$PWD" -- "<problem>"
19
+ ```
20
+
21
+ The output reports:
22
+
23
+ - `Project`, when `.reis-mobile/config.yaml` points the command at an app folder;
24
+ - `Intent`, `Stack`, `focus` and `area` (`gradle`, `xcode`, `cocoapods`, `signing`, `pub`...);
25
+ - `Agent` and `Skills`, in priority order;
26
+ - `Language`, the language to answer in (see **Language**);
27
+ - the doctor checks: installed tools and their versions, lock files, Gradle wrapper, iOS deployment target.
28
+
29
+ If the command fails, show the error to the user and stop.
30
+
31
+ ## Language
32
+
33
+ The CLI output has a `Language` line. Write everything the user reads in that language: `en` is English, `pt` is Brazilian Portuguese. With `-`, use the language of the user's request. Code, identifiers, file paths, commands and quoted tool output stay as they are.
34
+
35
+ ## 2. Load the instructions
36
+
37
+ Read with the Read tool, in this order:
38
+
39
+ 1. `${CLAUDE_PLUGIN_ROOT}/agents/<Agent>.md`;
40
+ 2. `${CLAUDE_PLUGIN_ROOT}/skills/<skill>/SKILL.md` for each listed skill. `mobile-debug` maps the stack and the `area` from step 1 to its platform references; read the reference for each layer the failure crosses (a Flutter build that fails inside Gradle needs the Flutter and the Android references).
41
+
42
+ ## 3. Diagnose
43
+
44
+ Follow the agent's process and the skills' checklists:
45
+
46
+ 1. **Find the first real error.** Build logs bury it under cascading failures. Quote the line that starts the failure, not the last `BUILD FAILED`.
47
+ 2. **Read the files that decide the behavior** before forming a theory: build scripts, wrapper and lock files, manifests, `Info.plist`, `Podfile`, project settings. Compare versions against the doctor output — a mismatch between the JDK, Gradle, AGP, Kotlin, Xcode or CocoaPods is the most common cause.
48
+ 3. **Reproduce when it is safe.** Read-only commands can run: `./gradlew --version`, `flutter --version`, `pod --version`, `xcodebuild -version`, `./gradlew :app:dependencies`. A build that only compiles (`./gradlew assembleDebug`, `flutter build apk --debug`) can run if the user already ran it or agrees, since it takes time and writes build outputs.
49
+ 4. **Confirm the cause** with evidence at `file:line` or in the log. If two causes are plausible, say which evidence would separate them instead of picking one.
50
+
51
+ ## 4. Propose, then wait
52
+
53
+ Answer with:
54
+
55
+ - **Cause:** one or two sentences, with the evidence.
56
+ - **Fix:** the minimal change, as a diff or the exact commands, in the order to apply them.
57
+ - **Why it works**, and what it changes beyond the error (a Gradle or Kotlin upgrade, a new minimum iOS version).
58
+ - **How to verify:** the command that failed, run again.
59
+
60
+ Do not edit files or run commands that change the project or the machine — `flutter clean`, `pod install`, `pod repo update`, deleting `DerivedData` or `~/.gradle` caches, dependency upgrades — until the user asks you to apply the fix. Once they do, apply it, run the verification command and report the result.
@@ -1,6 +1,6 @@
1
1
  ---
2
- description: reis-mobile entry point — lists the commands or forwards to doctor, review, debate or the right agent from a free-form request
3
- argument-hint: "[doctor | review | debate | free-form request]"
2
+ description: reis-mobile entry point — lists the commands or forwards to doctor, review, debug, debate or the right agent from a free-form request
3
+ argument-hint: "[doctor | review | debug | debate | free-form request]"
4
4
  allowed-tools: ["Bash(node:*)", "Bash(git:*)", "Read", "Grep", "Glob"]
5
5
  ---
6
6
 
@@ -21,6 +21,7 @@ Reply only with this list. The only thing to run is `node "${CLAUDE_PLUGIN_ROOT}
21
21
  ```text
22
22
  /reis-mobile:doctor Environment and project: SDKs, Xcode, CocoaPods, Gradle wrapper, lock files
23
23
  /reis-mobile:review [--base <ref>] Code review of the changes (or the whole project)
24
+ /reis-mobile:debug <problem> Finds the cause of a build or runtime failure and proposes the fix
24
25
  /reis-mobile:debate <question> Debate between the specialists, with a decision by lead-mobile
25
26
  /reis-mobile <free-form request> Forwards the request to the agent and skills for the detected stack
26
27
  ```
@@ -36,6 +37,10 @@ When the language is `pt`, translate the descriptions and keep the commands as t
36
37
 
37
38
  Read `${CLAUDE_PLUGIN_ROOT}/commands/review.md` and follow all of it, treating the rest of the arguments (without the word `review`) as `$ARGUMENTS`.
38
39
 
40
+ ## `debug <problem>`
41
+
42
+ Read `${CLAUDE_PLUGIN_ROOT}/commands/debug.md` and follow all of it, treating the rest of the arguments (without the word `debug`) as `$ARGUMENTS`.
43
+
39
44
  ## `debate [options] <question>`
40
45
 
41
46
  Read `${CLAUDE_PLUGIN_ROOT}/commands/debate.md` and follow all of it, treating the rest of the arguments (without the word `debate`) as `$ARGUMENTS`.
@@ -0,0 +1,59 @@
1
+ import { existsSync, readFileSync, statSync } from 'node:fs';
2
+ import { dirname, isAbsolute, join, relative, resolve } from 'node:path';
3
+
4
+ import { parseYamlSubset } from '../registry/frontmatter.mjs';
5
+
6
+ export const PROJECT_CONFIG = join('.reis-mobile', 'config.yaml');
7
+
8
+ const KNOWN_KEYS = new Set(['app']);
9
+
10
+ /**
11
+ * Finds the nearest `.reis-mobile/config.yaml`, starting at `dir` and walking up, so a
12
+ * command run anywhere inside a monorepo sees the same settings.
13
+ *
14
+ * @returns {{ path: string, root: string, data: object } | null}
15
+ */
16
+ export function findProjectConfig(dir) {
17
+ let current = resolve(dir);
18
+ for (;;) {
19
+ const path = join(current, PROJECT_CONFIG);
20
+ if (existsSync(path)) return { path, root: current, data: parseYamlSubset(readFileSync(path, 'utf8')) };
21
+ const parent = dirname(current);
22
+ if (parent === current) return null;
23
+ current = parent;
24
+ }
25
+ }
26
+
27
+ /**
28
+ * The directory commands should analyze. `app: apps/mobile` points a monorepo at its
29
+ * mobile app, relative to the folder that holds `.reis-mobile/`. A `dir` already inside
30
+ * the app is kept, so running from `apps/mobile/lib` still works.
31
+ *
32
+ * @returns {{ projectDir: string, config: object|null, warnings: string[] }}
33
+ */
34
+ export function resolveProjectDir(dir) {
35
+ const requested = resolve(dir);
36
+ const config = findProjectConfig(requested);
37
+ if (!config) return { projectDir: requested, config: null, warnings: [] };
38
+
39
+ const warnings = Object.keys(config.data)
40
+ .filter((key) => !KNOWN_KEYS.has(key))
41
+ .map((key) => `${config.path}: unknown key "${key}" ignored`);
42
+
43
+ const { app } = config.data;
44
+ if (app === undefined) return { projectDir: requested, config, warnings };
45
+ if (typeof app !== 'string' || !app.trim() || isAbsolute(app)) {
46
+ throw new Error(`${config.path}: "app" must be a folder relative to ${config.root}, such as "apps/mobile"`);
47
+ }
48
+
49
+ const appDir = resolve(config.root, app);
50
+ if (!existsSync(appDir) || !statSync(appDir).isDirectory()) {
51
+ throw new Error(`${config.path}: app folder "${app}" does not exist`);
52
+ }
53
+ return { projectDir: isInside(requested, appDir) ? requested : appDir, config, warnings };
54
+ }
55
+
56
+ function isInside(child, parent) {
57
+ const path = relative(parent, child);
58
+ return path === '' || (!path.startsWith('..') && !isAbsolute(path));
59
+ }
@@ -1,9 +1,10 @@
1
1
  // Minimal YAML frontmatter parser, dependency-free on purpose: the plugin must run
2
2
  // straight from the Claude Code plugin cache without `npm install`.
3
3
  //
4
- // Supported subset: `key: scalar`, `key: [a, b]`, block lists (`key:` followed by
5
- // ` - item` lines) and block scalars (`key: |`, `|-`, `>`, `>-`). Nested maps, such as
6
- // the `metadata:` block of upstream skills, are skipped.
4
+ // Supported subset: `key: scalar` (continued on indented lines, as YAML folds plain
5
+ // scalars), `key: [a, b]`, block lists (`key:` followed by ` - item` lines) and block
6
+ // scalars (`key: |`, `|-`, `>`, `>-`). Nested maps, such as the `metadata:` block of
7
+ // upstream skills, are skipped.
7
8
 
8
9
  const FRONTMATTER = /^---\r?\n([\s\S]*?)\r?\n---[ \t]*(?:\r?\n|$)([\s\S]*)$/;
9
10
  const BLOCK_SCALAR = /^([|>])([+-]?)$/;
@@ -14,10 +15,12 @@ export function parseFrontmatter(source) {
14
15
  return { data: parseYamlSubset(match[1]), body: match[2] };
15
16
  }
16
17
 
17
- function parseYamlSubset(text) {
18
+ /** Parses the same YAML subset outside frontmatter, for `.reis-mobile/config.yaml`. */
19
+ export function parseYamlSubset(text) {
18
20
  const data = {};
19
21
  const lines = text.split(/\r?\n/);
20
22
  let listKey = null;
23
+ let plainKey = null;
21
24
 
22
25
  for (let index = 0; index < lines.length; index++) {
23
26
  const line = lines[index];
@@ -29,11 +32,17 @@ function parseYamlSubset(text) {
29
32
  continue;
30
33
  }
31
34
 
35
+ if (plainKey && /^\s+\S/.test(line)) {
36
+ data[plainKey] = `${data[plainKey]} ${line.trim()}`;
37
+ continue;
38
+ }
39
+
32
40
  const pair = /^([A-Za-z0-9_-]+):\s*(.*)$/.exec(line);
33
41
  if (!pair) continue;
34
42
 
35
43
  const [, key, value] = pair;
36
44
  listKey = null;
45
+ plainKey = null;
37
46
  const block = BLOCK_SCALAR.exec(value);
38
47
 
39
48
  if (block) {
@@ -47,6 +56,8 @@ function parseYamlSubset(text) {
47
56
  listKey = key;
48
57
  } else {
49
58
  data[key] = parseValue(value);
59
+ // Only an unquoted scalar can continue on the next lines.
60
+ if (typeof data[key] === 'string' && !/^["'[]/.test(value)) plainKey = key;
50
61
  }
51
62
  }
52
63
  return data;
@@ -3,11 +3,22 @@ import { basename, join } from 'node:path';
3
3
 
4
4
  import { DETECTABLE_STACKS } from '../detection/stack-detector.mjs';
5
5
  import { PLUGIN_ROOT } from '../paths.mjs';
6
- import { INTENT_IDS } from '../router/intents.mjs';
6
+ import { AREA_IDS, INTENT_IDS } from '../router/intents.mjs';
7
7
  import { parseFrontmatter } from './frontmatter.mjs';
8
8
 
9
9
  export const ANY_STACK = '*';
10
10
 
11
+ /**
12
+ * Every skill starts with `mobile-`. A topic skill covers every stack (`stacks: ["*"]`) with a
13
+ * reference per platform; a platform skill is named after the one stack it covers.
14
+ */
15
+ export const PLATFORM_SKILLS = {
16
+ 'mobile-flutter': 'flutter',
17
+ 'mobile-android': 'android',
18
+ 'mobile-ios': 'ios',
19
+ 'mobile-rn': 'react-native',
20
+ };
21
+
11
22
  /**
12
23
  * Loads stacks (`stacks/<id>/stack.json`), agents (`agents/<name>.md`) and skills
13
24
  * (`skills/<name>/SKILL.md`). Routing metadata lives in the same frontmatter Claude Code
@@ -68,6 +79,8 @@ function toComponent(kind, path, fileName, source) {
68
79
  description: data.description,
69
80
  intents: asList(data.intents),
70
81
  stacks: asList(data.stacks),
82
+ // Optional: the build areas (gradle, xcode, cocoapods...) a skill is specific to.
83
+ areas: asList(data.areas),
71
84
  // `routing: manual` marks helpers that Claude invokes by description only.
72
85
  routed: data.routing !== 'manual',
73
86
  // Third-party components declare where they came from (see THIRD_PARTY_NOTICES.md).
@@ -107,9 +120,23 @@ export function validateRegistry({ stacks, agents, skills }) {
107
120
 
108
121
  if (component.source && !component.license) errors.push(`${label}: "source" requires "license"`);
109
122
 
123
+ if (component.kind === 'skill' && component.name) {
124
+ const platform = PLATFORM_SKILLS[component.name];
125
+ if (!component.name.startsWith('mobile-')) {
126
+ errors.push(`${label}: skill name must start with "mobile-"`);
127
+ } else if (platform && !(component.stacks.length === 1 && component.stacks[0] === platform)) {
128
+ errors.push(`${label}: platform skill ${component.name} must declare stacks: [${platform}]`);
129
+ } else if (!platform && !(component.stacks.length === 1 && component.stacks[0] === ANY_STACK)) {
130
+ errors.push(`${label}: topic skill must declare stacks: ["*"], or be one of ${Object.keys(PLATFORM_SKILLS).join(', ')}`);
131
+ }
132
+ }
133
+
110
134
  for (const intent of component.intents) {
111
135
  if (!INTENT_IDS.includes(intent)) errors.push(`${label}: unknown intent "${intent}"`);
112
136
  }
137
+ for (const area of component.areas) {
138
+ if (!AREA_IDS.includes(area)) errors.push(`${label}: unknown area "${area}"`);
139
+ }
113
140
  for (const stack of component.stacks) {
114
141
  if (stack !== ANY_STACK && !stackIds.has(stack)) errors.push(`${label}: unknown stack "${stack}"`);
115
142
  }
@@ -80,6 +80,8 @@ export const AREAS = [
80
80
  ['pub', ['pub get', 'pubspec', 'version solving']],
81
81
  ];
82
82
 
83
+ export const AREA_IDS = AREAS.map(([id]) => id);
84
+
83
85
  // Areas that only exist on one native platform, used to focus cross-platform projects.
84
86
  export const AREA_PLATFORM = {
85
87
  gradle: 'android',
@@ -38,7 +38,7 @@ export async function route({ prompt = '', intent: explicitIntent, projectDir =
38
38
  const agent = intent ? selectAgent(components.agents, intent, stack) : null;
39
39
  if (intent && !agent) warnings.push(`No agent handles intent "${intent}" yet.`);
40
40
 
41
- const skills = intent ? selectSkills(components.skills, intent, [stack, ...platformFocus]) : [];
41
+ const skills = intent ? selectSkills(components.skills, intent, [stack, ...platformFocus], parsed.area) : [];
42
42
 
43
43
  return {
44
44
  intent,
@@ -64,13 +64,18 @@ export function selectAgent(agents, intent, stack) {
64
64
  );
65
65
  }
66
66
 
67
- /** Skills for the primary stack first, then focused platforms, then stack-agnostic ones. */
68
- export function selectSkills(skills, intent, stacks) {
67
+ /**
68
+ * Skills for the primary stack first, then focused platforms, then stack-agnostic ones.
69
+ * Among skills of the same stack, one declaring the detected area ("gradle", "cocoapods"...)
70
+ * comes first, so the model reads the most specific checklist before the general one.
71
+ */
72
+ export function selectSkills(skills, intent, stacks, area = null) {
73
+ const areaScore = (skill) => (area && skill.areas?.includes(area) ? 1 : 0);
69
74
  return skills
70
75
  .filter((skill) => skill.routed && skill.intents.includes(intent))
71
- .map((skill) => ({ skill, score: stackScore(skill.stacks, stacks) }))
76
+ .map((skill) => ({ skill, score: stackScore(skill.stacks, stacks), area: areaScore(skill) }))
72
77
  .filter(({ score }) => score > 0)
73
- .sort((a, b) => b.score - a.score || a.skill.name.localeCompare(b.skill.name))
78
+ .sort((a, b) => b.score - a.score || b.area - a.area || a.skill.name.localeCompare(b.skill.name))
74
79
  .map(({ skill }) => skill);
75
80
  }
76
81
 
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "reis-mobile",
3
- "version": "0.3.6",
4
- "description": "AI agents, skills and workflows for Flutter, Android, iOS and React Native development.",
3
+ "version": "0.5.0",
4
+ "description": "AI agents and skills for mobile development — Flutter, Android, iOS and React Native — as a plugin for Claude Code and Codex: code review, debugging, tests, architecture, security and Firebase.",
5
5
  "type": "module",
6
6
  "license": "MIT",
7
7
  "author": "Warleson Reis",
@@ -31,5 +31,26 @@
31
31
  "validate": "node bin/reis-mobile.mjs validate",
32
32
  "check": "npm run validate && npm test"
33
33
  },
34
- "keywords": ["mobile", "flutter", "android", "ios", "react-native", "claude-code", "plugin", "agents"]
34
+ "keywords": [
35
+ "flutter",
36
+ "android",
37
+ "ios",
38
+ "react-native",
39
+ "expo",
40
+ "swift",
41
+ "swiftui",
42
+ "kotlin",
43
+ "jetpack-compose",
44
+ "dart",
45
+ "firebase",
46
+ "mobile",
47
+ "mobile-development",
48
+ "claude-code",
49
+ "claude-code-plugin",
50
+ "codex",
51
+ "agent-skills",
52
+ "skills",
53
+ "ai-agents",
54
+ "code-review"
55
+ ]
35
56
  }
@@ -0,0 +1,29 @@
1
+ ---
2
+ name: mobile-android
3
+ description: Builds native Android apps with the Android team's guides — Jetpack Compose UI, adaptive layouts, edge-to-edge, Compose styles, migrating XML views to Compose, Navigation 3 and predictive back; Android Gradle Plugin 9 upgrades, R8 keep rule analysis, profiling with Android Studio and Perfetto, and the Android CLI; Google Play policy compliance, Play Billing upgrades and the Engage SDK; Credential Manager restore and verified email; CameraX and Media3 Cast; App Functions and the ML Kit GenAI Prompt API; Wear OS, Android TV and display glasses. Use when writing, upgrading or auditing native Android (Kotlin) code for any of these topics, even if the user does not name the library.
4
+ intents: [performance, release, migration, build, dependency]
5
+ stacks: [android]
6
+ ---
7
+
8
+ # Mobile Android
9
+
10
+ Guides for building native Android apps, most of them from the Android team (`android/skills`). Cross-platform topics live in their own skills and have Android references there: architecture in `mobile-architecture`, tests in `mobile-test`, debugging (Gradle, crashes, ANRs) in `mobile-debug`, code review in `mobile-code-review`, security in `mobile-security` and Firebase in `mobile-firebase`.
11
+
12
+ ## Pick the topic
13
+
14
+ | Topic | Read |
15
+ |---|---|
16
+ | UI and navigation | [references/ui.md](references/ui.md) |
17
+ | Build, performance and tooling | [references/build-and-performance.md](references/build-and-performance.md) |
18
+ | Google Play | [references/play.md](references/play.md) |
19
+ | Identity | [references/identity.md](references/identity.md) |
20
+ | Camera and media | [references/media.md](references/media.md) |
21
+ | On-device AI | [references/on-device-ai.md](references/on-device-ai.md) |
22
+ | Other form factors | [references/devices.md](references/devices.md) |
23
+
24
+ Each topic file lists its guides; open only the ones the task needs.
25
+
26
+ ## Before writing code
27
+
28
+ - Check the AGP, Kotlin, Compose BOM and `compileSdk`/`targetSdk` versions in the build files and version catalog; several guides depend on minimum versions.
29
+ - Several guides prescribe running specific tools or scripts and following steps strictly; run what writes files only with the user's agreement.
@@ -0,0 +1,87 @@
1
+ > Adapted from the `agp-9-upgrade` skill in [android/skills](https://github.com/android/skills) (Apache-2.0). See `THIRD_PARTY_NOTICES.md`.
2
+
3
+ ## Migration guide
4
+
5
+ See the [AGP 9 migration guide](references/android/build/releases/agp-9-0-0-release-notes.md) for the major changes, many
6
+ breaking, in AGP 9 compared to AGP 8.
7
+
8
+ ## Requirements
9
+
10
+ If the user requests to update or migrate to AGP 9, first check the AGP version
11
+ used in the project. If it is lower than 9, stop and ask the user to run the AGP
12
+ Upgrade Assistant in Android Studio to update to the latest stable version of
13
+ AGP, and confirm when done. The user may also request that this requirement be
14
+ skipped; if this is the case, you should update the version of AGP to the latest
15
+ stable version as part of the AGP 9 migration. See the
16
+ [AGP 9 migration guide](references/android/build/releases/agp-9-0-0-release-notes.md) for how to do this.
17
+
18
+ Each version of AGP has its own set of compatibilities with other tools, such as
19
+ Gradle, JDK, and Kotlin. The release notes for each of these versions will
20
+ include a **Compatibility** table indicating the minimum versions for these
21
+ tools.
22
+
23
+ Do not use this skill for KMP projects, as they are unsupported.
24
+
25
+ ## Steps
26
+
27
+ If AGP is already at 9 or higher, then do the following:
28
+
29
+ ### Step 1: Update dependencies
30
+
31
+ If KSP (`com.google.devtools.ksp`) is used in the project, ensure it is on
32
+ version 2.3.6 or higher.
33
+
34
+ If Hilt is used in the project, ensure it is on version 2.59.2 or higher.
35
+
36
+ ### Step 2: Migrate to built-in Kotlin
37
+
38
+ See [the guide](references/android/build/migrate-to-built-in-kotlin.md) for detailed information.
39
+
40
+ ### Step 3. Migrate to the new AGP DSL
41
+
42
+ See [the guide](references/android/build/releases/agp-9-0-0-release-notes.md) for detailed information.
43
+
44
+ See also [gradle-recipes](references/recipes.md) for examples on how to migrate old code to code
45
+ that is compatible with AGP 9 and the new DSL.
46
+
47
+ ### Step 4. Migrate kapt to KSP or legacy-kapt
48
+
49
+ If KSP (`com.google.devtools.ksp`) or kapt (`org.jetbrains.kotlin.kapt`) are
50
+ used in the project, see [KSP, kapt, and legacy-kapt](references/ksp-kapt.md) for detailed migration
51
+ steps.
52
+
53
+ ### Step 5. BuildConfig
54
+
55
+ If any Android module contains custom BuildConfig fields, see [BuildConfig](references/buildconfig.md)
56
+ for detailed information.
57
+
58
+ ### Step 6. Update gradle.properties
59
+
60
+ After the migration, check gradle.properties. Remove the following flags:
61
+
62
+ 1. android.builtInKotlin
63
+ 2. android.newDsl
64
+ 3. android.uniquePackageNames
65
+ 4. android.enableAppCompileTimeRClass
66
+
67
+ Additionally, delete all temporary files you've created.
68
+
69
+ ## Guidelines
70
+
71
+ - Never write or run python scripts.
72
+ - Only search the Gradle dependency cache when inspecting external dependencies, and only as a last resort.
73
+ - Never add `android.disallowKotlinSourceSets=false` to `gradle.properties`.
74
+ - When verifying changes, don't run the `clean` task. This is a waste of time.
75
+
76
+ ## Verification
77
+
78
+ After migration, verify the following:
79
+
80
+ 1. Gradle IDE sync succeeds.
81
+ 2. `./gradlew help` succeeds.
82
+ 3. `./gradlew build --dry-run` succeeds.
83
+
84
+ ## Troubleshooting
85
+
86
+ Paparazzi v2.0.0-alpha04 and lower versions have issues with AGP 9. See
87
+ [references/paparazzi-gradle-9.md](references/paparazzi-gradle-9.md) for details.