reis-mobile 0.4.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +2 -2
- package/.claude-plugin/plugin.json +1 -1
- package/CHANGELOG.md +15 -0
- package/README.md +35 -204
- package/THIRD_PARTY_NOTICES.md +10 -13
- package/agents/android-performance-engineer.md +2 -2
- package/agents/mobile-code-reviewer.md +2 -0
- package/agents/rn-architect.md +1 -1
- package/commands/debug.md +1 -1
- package/core/registry/registry.mjs +18 -11
- package/package.json +24 -3
- package/skills/mobile-android/SKILL.md +29 -0
- package/skills/{android-agp-9-upgrade/SKILL.md → mobile-android/references/build-and-performance/agp-9-upgrade/GUIDE.md} +1 -20
- package/skills/{android-cli/SKILL.md → mobile-android/references/build-and-performance/android-cli/GUIDE.md} +1 -25
- package/skills/{android-profiler/SKILL.md → mobile-android/references/build-and-performance/android-profiler/GUIDE.md} +1 -27
- package/skills/{android-r8-analyzer/SKILL.md → mobile-android/references/build-and-performance/r8-analyzer/GUIDE.md} +1 -20
- package/skills/mobile-android/references/build-and-performance.md +12 -0
- package/skills/{android-display-glasses-with-jetpack-compose-glimmer/SKILL.md → mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer/GUIDE.md} +1 -24
- package/skills/{android-leanback-to-compose-tv-migration/SKILL.md → mobile-android/references/devices/leanback-to-compose-tv-migration/GUIDE.md} +1 -37
- package/skills/{android-wear-compose-m3/SKILL.md → mobile-android/references/devices/wear-compose-m3/GUIDE.md} +1 -25
- package/skills/mobile-android/references/devices.md +11 -0
- package/skills/{android-restore-credentials/SKILL.md → mobile-android/references/identity/restore-credentials/GUIDE.md} +1 -23
- package/skills/{android-verified-email/SKILL.md → mobile-android/references/identity/verified-email/GUIDE.md} +1 -28
- package/skills/mobile-android/references/identity.md +10 -0
- package/skills/{android-camerax/SKILL.md → mobile-android/references/media/camerax/GUIDE.md} +1 -30
- package/skills/{android-media3-cast-integration/SKILL.md → mobile-android/references/media/media3-cast-integration/GUIDE.md} +1 -24
- package/skills/mobile-android/references/media.md +10 -0
- package/skills/{android-appfunctions/SKILL.md → mobile-android/references/on-device-ai/appfunctions/GUIDE.md} +1 -24
- package/skills/{android-ml-kit-genai-prompt-api/SKILL.md → mobile-android/references/on-device-ai/ml-kit-genai-prompt-api/GUIDE.md} +1 -20
- package/skills/mobile-android/references/on-device-ai.md +10 -0
- package/skills/{android-engage-sdk-integration/SKILL.md → mobile-android/references/play/engage-sdk-integration/GUIDE.md} +1 -19
- package/skills/{android-play-billing-library-version-upgrade/SKILL.md → mobile-android/references/play/play-billing-library-version-upgrade/GUIDE.md} +1 -22
- package/skills/{android-play-policy-insights/SKILL.md → mobile-android/references/play/play-policy-insights/GUIDE.md} +1 -43
- package/skills/mobile-android/references/play.md +11 -0
- package/skills/{android-adaptive/SKILL.md → mobile-android/references/ui/adaptive/GUIDE.md} +1 -25
- package/skills/{android-edge-to-edge/SKILL.md → mobile-android/references/ui/edge-to-edge/GUIDE.md} +1 -21
- package/skills/{android-migrate-xml-views-to-jetpack-compose/SKILL.md → mobile-android/references/ui/migrate-xml-views-to-jetpack-compose/GUIDE.md} +1 -24
- package/skills/{android-navigation-3/SKILL.md → mobile-android/references/ui/navigation-3/GUIDE.md} +1 -37
- package/skills/{android-navigation-event/SKILL.md → mobile-android/references/ui/navigation-event/GUIDE.md} +1 -25
- package/skills/{android-styles/SKILL.md → mobile-android/references/ui/styles/GUIDE.md} +1 -21
- package/skills/mobile-android/references/ui.md +14 -0
- package/skills/mobile-architecture/SKILL.md +52 -0
- package/skills/mobile-architecture/references/android.md +54 -0
- package/skills/{flutter-app-architecture/SKILL.md → mobile-architecture/references/flutter/app-architecture.md} +1 -8
- package/skills/{flutter-bloc/SKILL.md → mobile-architecture/references/flutter/bloc.md} +1 -8
- package/skills/{flutter-change-notifier/SKILL.md → mobile-architecture/references/flutter/change-notifier.md} +1 -8
- package/skills/{flutter-architecture-feature-first/SKILL.md → mobile-architecture/references/flutter/feature-first.md} +1 -8
- package/skills/{flutter-login-usecase/SKILL.md → mobile-architecture/references/flutter/login-use-case.md} +0 -7
- package/skills/{flutter-managing-state/SKILL.md → mobile-architecture/references/flutter/managing-state.md} +2 -11
- package/skills/{flutter-provider/SKILL.md → mobile-architecture/references/flutter/provider.md} +1 -8
- package/skills/{flutter-apply-architecture-best-practices/SKILL.md → mobile-architecture/references/flutter/recommended-architecture.md} +2 -11
- package/skills/{flutter-riverpod/SKILL.md → mobile-architecture/references/flutter/riverpod.md} +1 -8
- package/skills/mobile-architecture/references/flutter.md +21 -0
- package/skills/mobile-architecture/references/ios.md +58 -0
- package/skills/mobile-architecture/references/react-native.md +61 -0
- package/skills/mobile-code-review/SKILL.md +70 -0
- package/skills/{android-code-review/SKILL.md → mobile-code-review/references/android.md} +1 -8
- package/skills/{flutter-code-review/SKILL.md → mobile-code-review/references/flutter/pr-review.md} +1 -8
- package/skills/{flutter-project-audit/SKILL.md → mobile-code-review/references/flutter/project-audit.md} +0 -7
- package/skills/{flutter-dart-run-static-analysis/SKILL.md → mobile-code-review/references/flutter/static-analysis.md} +2 -11
- package/skills/{flutter-widget-review/SKILL.md → mobile-code-review/references/flutter/widget-review.md} +0 -7
- package/skills/mobile-code-review/references/flutter.md +18 -0
- package/skills/{ios-code-review/SKILL.md → mobile-code-review/references/ios.md} +1 -8
- package/skills/mobile-code-review/references/react-native.md +58 -0
- package/skills/mobile-debug/SKILL.md +50 -0
- package/skills/{android-gradle-build-debug/SKILL.md → mobile-debug/references/android/gradle-build.md} +0 -8
- package/skills/mobile-debug/references/android.md +26 -0
- package/skills/{flutter-build-debug/SKILL.md → mobile-debug/references/flutter/build.md} +5 -13
- package/skills/{flutter-errors/SKILL.md → mobile-debug/references/flutter/errors.md} +1 -8
- package/skills/{flutter-fix-layout-issues/SKILL.md → mobile-debug/references/flutter/layout-issues.md} +2 -11
- package/skills/{flutter-dart-resolve-package-conflicts/SKILL.md → mobile-debug/references/flutter/package-conflicts.md} +2 -11
- package/skills/{flutter-dart-fix-runtime-errors/SKILL.md → mobile-debug/references/flutter/runtime-errors.md} +2 -11
- package/skills/mobile-debug/references/flutter.md +23 -0
- package/skills/{ios-cocoapods-debug/SKILL.md → mobile-debug/references/ios/cocoapods.md} +1 -9
- package/skills/{ios-xcode-build-debug/SKILL.md → mobile-debug/references/ios/xcode-build.md} +0 -8
- package/skills/mobile-debug/references/ios.md +23 -0
- package/skills/mobile-debug/references/react-native.md +43 -0
- package/skills/mobile-flutter/SKILL.md +30 -0
- package/skills/{flutter-improving-accessibility/SKILL.md → mobile-flutter/references/accessibility-i18n/accessibility.md} +2 -11
- package/skills/{flutter-setup-localization/SKILL.md → mobile-flutter/references/accessibility-i18n/localization.md} +2 -11
- package/skills/mobile-flutter/references/accessibility-i18n.md +8 -0
- package/skills/{flutter-dart-3-updates/SKILL.md → mobile-flutter/references/dart/dart-3.md} +1 -8
- package/skills/{flutter-effective-dart/SKILL.md → mobile-flutter/references/dart/effective-dart.md} +1 -8
- package/skills/{flutter-dart-use-pattern-matching/SKILL.md → mobile-flutter/references/dart/pattern-matching/GUIDE.md} +2 -18
- package/skills/mobile-flutter/references/dart.md +9 -0
- package/skills/{flutter-caching-data/SKILL.md → mobile-flutter/references/data/caching.md} +2 -11
- package/skills/{flutter-working-with-databases/SKILL.md → mobile-flutter/references/data/databases.md} +2 -11
- package/skills/{flutter-use-http-package/SKILL.md → mobile-flutter/references/data/http.md} +2 -11
- package/skills/{flutter-implement-json-serialization/SKILL.md → mobile-flutter/references/data/json-serialization.md} +2 -11
- package/skills/mobile-flutter/references/data.md +10 -0
- package/skills/{flutter-interoperating-with-native-apis/SKILL.md → mobile-flutter/references/native/native-apis.md} +2 -11
- package/skills/{flutter-embedding-native-views/SKILL.md → mobile-flutter/references/native/native-views.md} +2 -11
- package/skills/{flutter-building-plugins/SKILL.md → mobile-flutter/references/native/plugins.md} +2 -11
- package/skills/mobile-flutter/references/native.md +9 -0
- package/skills/{flutter-reducing-app-size/SKILL.md → mobile-flutter/references/performance/app-size.md} +2 -11
- package/skills/{flutter-handling-concurrency/SKILL.md → mobile-flutter/references/performance/concurrency.md} +2 -11
- package/skills/mobile-flutter/references/performance.md +8 -0
- package/skills/{flutter-setting-up-on-macos/SKILL.md → mobile-flutter/references/setup/macos.md} +2 -11
- package/skills/mobile-flutter/references/setup.md +7 -0
- package/skills/{flutter-animating-apps/SKILL.md → mobile-flutter/references/ui/animations.md} +2 -11
- package/skills/{flutter-building-forms/SKILL.md → mobile-flutter/references/ui/forms.md} +2 -11
- package/skills/{flutter-adding-home-screen-widgets/SKILL.md → mobile-flutter/references/ui/home-screen-widgets.md} +2 -11
- package/skills/{flutter-building-layouts/SKILL.md → mobile-flutter/references/ui/layouts.md} +2 -11
- package/skills/{flutter-build-responsive-layout/SKILL.md → mobile-flutter/references/ui/responsive-layout.md} +2 -11
- package/skills/{flutter-setup-declarative-routing/SKILL.md → mobile-flutter/references/ui/routing.md} +2 -11
- package/skills/{flutter-theming-apps/SKILL.md → mobile-flutter/references/ui/theming.md} +2 -11
- package/skills/{flutter-add-widget-preview/SKILL.md → mobile-flutter/references/ui/widget-previews.md} +2 -11
- package/skills/mobile-flutter/references/ui.md +14 -0
- package/skills/mobile-ios/SKILL.md +25 -0
- package/skills/mobile-ios/references/data-networking.md +70 -0
- package/skills/mobile-ios/references/performance-release.md +37 -0
- package/skills/mobile-ios/references/platform-features.md +52 -0
- package/skills/mobile-ios/references/ui-navigation.md +64 -0
- package/skills/mobile-rn/SKILL.md +26 -0
- package/skills/mobile-rn/references/data-networking.md +59 -0
- package/skills/mobile-rn/references/performance-release.md +46 -0
- package/skills/mobile-rn/references/platform-features.md +40 -0
- package/skills/mobile-rn/references/ui-navigation.md +62 -0
- package/skills/mobile-security/SKILL.md +82 -0
- package/skills/{android-intent-security/SKILL.md → mobile-security/references/android/intent-security.md} +1 -28
- package/skills/mobile-security/references/android.md +37 -0
- package/skills/{flutter-secure-token-store/SKILL.md → mobile-security/references/flutter/secure-token-store.md} +1 -8
- package/skills/mobile-security/references/flutter.md +30 -0
- package/skills/mobile-security/references/ios.md +27 -0
- package/skills/mobile-security/references/react-native.md +29 -0
- package/skills/mobile-security-audit/SKILL.md +0 -101
- /package/skills/{android-agp-9-upgrade → mobile-android/references/build-and-performance/agp-9-upgrade}/references/android/build/migrate-to-built-in-kotlin.md +0 -0
- /package/skills/{android-agp-9-upgrade → mobile-android/references/build-and-performance/agp-9-upgrade}/references/android/build/releases/agp-9-0-0-release-notes.md +0 -0
- /package/skills/{android-agp-9-upgrade → mobile-android/references/build-and-performance/agp-9-upgrade}/references/buildconfig.md +0 -0
- /package/skills/{android-agp-9-upgrade → mobile-android/references/build-and-performance/agp-9-upgrade}/references/ksp-kapt.md +0 -0
- /package/skills/{android-agp-9-upgrade → mobile-android/references/build-and-performance/agp-9-upgrade}/references/paparazzi-gradle-9.md +0 -0
- /package/skills/{android-agp-9-upgrade → mobile-android/references/build-and-performance/agp-9-upgrade}/references/recipes.md +0 -0
- /package/skills/{android-cli → mobile-android/references/build-and-performance/android-cli}/references/interact.md +0 -0
- /package/skills/{android-cli → mobile-android/references/build-and-performance/android-cli}/references/journeys.md +0 -0
- /package/skills/{android-profiler → mobile-android/references/build-and-performance/android-profiler}/analysis/analysis_orchestrator.md +0 -0
- /package/skills/{android-profiler → mobile-android/references/build-and-performance/android-profiler}/analysis/workflows/perfetto-sql/perfetto_sql.md +0 -0
- /package/skills/{android-profiler → mobile-android/references/build-and-performance/android-profiler}/analysis/workflows/perfetto-trace-analysis/perfetto_trace_analysis.md +0 -0
- /package/skills/{android-profiler → mobile-android/references/build-and-performance/android-profiler}/analysis/workflows/perfetto-trace-analysis/references/guiding_principles.md +0 -0
- /package/skills/{android-profiler → mobile-android/references/build-and-performance/android-profiler}/analysis/workflows/perfetto-trace-analysis/references/hints/domain_hints_template.md +0 -0
- /package/skills/{android-profiler → mobile-android/references/build-and-performance/android-profiler}/analysis/workflows/perfetto-trace-analysis/references/hints/subsystems/hints_cpu.md +0 -0
- /package/skills/{android-profiler → mobile-android/references/build-and-performance/android-profiler}/analysis/workflows/perfetto-trace-analysis/references/hints/subsystems/hints_graphics.md +0 -0
- /package/skills/{android-profiler → mobile-android/references/build-and-performance/android-profiler}/analysis/workflows/perfetto-trace-analysis/references/hints/subsystems/hints_io.md +0 -0
- /package/skills/{android-profiler → mobile-android/references/build-and-performance/android-profiler}/analysis/workflows/perfetto-trace-analysis/references/hints/subsystems/hints_ipc.md +0 -0
- /package/skills/{android-profiler → mobile-android/references/build-and-performance/android-profiler}/analysis/workflows/perfetto-trace-analysis/references/hints/subsystems/hints_memory.md +0 -0
- /package/skills/{android-profiler → mobile-android/references/build-and-performance/android-profiler}/analysis/workflows/perfetto-trace-analysis/references/hints/subsystems/hints_power.md +0 -0
- /package/skills/{android-profiler → mobile-android/references/build-and-performance/android-profiler}/analysis/workflows/perfetto-trace-analysis/references/per_candidate_analysis.md +0 -0
- /package/skills/{android-profiler → mobile-android/references/build-and-performance/android-profiler}/analysis/workflows/perfetto-trace-analysis/references/triage.md +0 -0
- /package/skills/{android-profiler → mobile-android/references/build-and-performance/android-profiler}/recording/recording_orchestrator.md +0 -0
- /package/skills/{android-profiler → mobile-android/references/build-and-performance/android-profiler}/recording/workflows/perfetto-trace-recording/perfetto_trace_recording.md +0 -0
- /package/skills/{android-profiler → mobile-android/references/build-and-performance/android-profiler}/recording/workflows/perfetto-trace-recording/references/example-configs/app_jank.pftxt +0 -0
- /package/skills/{android-profiler → mobile-android/references/build-and-performance/android-profiler}/recording/workflows/perfetto-trace-recording/references/example-configs/cpu_profile.pftxt +0 -0
- /package/skills/{android-profiler → mobile-android/references/build-and-performance/android-profiler}/recording/workflows/perfetto-trace-recording/references/example-configs/java_heap_dump.pftxt +0 -0
- /package/skills/{android-profiler → mobile-android/references/build-and-performance/android-profiler}/recording/workflows/perfetto-trace-recording/references/example-configs/long_background.pftxt +0 -0
- /package/skills/{android-profiler → mobile-android/references/build-and-performance/android-profiler}/recording/workflows/perfetto-trace-recording/references/example-configs/memory_counters.pftxt +0 -0
- /package/skills/{android-profiler → mobile-android/references/build-and-performance/android-profiler}/recording/workflows/perfetto-trace-recording/references/example-configs/native_heap.pftxt +0 -0
- /package/skills/{android-profiler → mobile-android/references/build-and-performance/android-profiler}/recording/workflows/perfetto-trace-recording/references/example-configs/sched_cpu.pftxt +0 -0
- /package/skills/{android-profiler → mobile-android/references/build-and-performance/android-profiler}/recording/workflows/perfetto-trace-recording/references/trace_config_reference.md +0 -0
- /package/skills/{android-profiler → mobile-android/references/build-and-performance/android-profiler}/references/env_setup.md +0 -0
- /package/skills/{android-profiler → mobile-android/references/build-and-performance/android-profiler}/references/perfetto/setup.md +0 -0
- /package/skills/{android-profiler → mobile-android/references/build-and-performance/android-profiler}/references/perfetto/sql.md +0 -0
- /package/skills/{android-r8-analyzer → mobile-android/references/build-and-performance/r8-analyzer}/references/CONFIGURATION-ANALYZER.md +0 -0
- /package/skills/{android-r8-analyzer → mobile-android/references/build-and-performance/r8-analyzer}/references/CONFIGURATION.md +0 -0
- /package/skills/{android-r8-analyzer → mobile-android/references/build-and-performance/r8-analyzer}/references/KEEP-RULES-IMPACT-HIERARCHY.md +0 -0
- /package/skills/{android-r8-analyzer → mobile-android/references/build-and-performance/r8-analyzer}/references/REDUNDANT-RULES.md +0 -0
- /package/skills/{android-r8-analyzer → mobile-android/references/build-and-performance/r8-analyzer}/references/REFLECTION-GUIDE.md +0 -0
- /package/skills/{android-r8-analyzer → mobile-android/references/build-and-performance/r8-analyzer}/references/REPORT_FORMAT.md +0 -0
- /package/skills/{android-r8-analyzer → mobile-android/references/build-and-performance/r8-analyzer}/references/android/topic/performance/app-optimization/enable-app-optimization.md +0 -0
- /package/skills/{android-r8-analyzer → mobile-android/references/build-and-performance/r8-analyzer}/references/android/training/testing/other-components/ui-automator.md +0 -0
- /package/skills/{android-display-glasses-with-jetpack-compose-glimmer → mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer}/references/android/design/ui/ai-glasses/guides/interaction/inputs.md +0 -0
- /package/skills/{android-display-glasses-with-jetpack-compose-glimmer → mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer}/references/android/develop/xr/jetpack-xr-sdk/access-hardware-projected-context.md +0 -0
- /package/skills/{android-display-glasses-with-jetpack-compose-glimmer → mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer}/references/android/develop/xr/jetpack-xr-sdk/jetpack-compose-glimmer/buttons.md +0 -0
- /package/skills/{android-display-glasses-with-jetpack-compose-glimmer → mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer}/references/android/develop/xr/jetpack-xr-sdk/jetpack-compose-glimmer/cards.md +0 -0
- /package/skills/{android-display-glasses-with-jetpack-compose-glimmer → mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer}/references/android/develop/xr/jetpack-xr-sdk/jetpack-compose-glimmer/focus.md +0 -0
- /package/skills/{android-display-glasses-with-jetpack-compose-glimmer → mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer}/references/android/develop/xr/jetpack-xr-sdk/jetpack-compose-glimmer/icons.md +0 -0
- /package/skills/{android-display-glasses-with-jetpack-compose-glimmer → mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer}/references/android/develop/xr/jetpack-xr-sdk/jetpack-compose-glimmer/text.md +0 -0
- /package/skills/{android-display-glasses-with-jetpack-compose-glimmer → mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer}/references/android/develop/xr/jetpack-xr-sdk/jetpack-compose-glimmer/title-chips.md +0 -0
- /package/skills/{android-display-glasses-with-jetpack-compose-glimmer → mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer}/references/android/develop/xr/jetpack-xr-sdk/request-hardware-permissions.md +0 -0
- /package/skills/{android-display-glasses-with-jetpack-compose-glimmer → mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer}/references/button-samples-source.md +0 -0
- /package/skills/{android-display-glasses-with-jetpack-compose-glimmer → mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer}/references/button-source.md +0 -0
- /package/skills/{android-display-glasses-with-jetpack-compose-glimmer → mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer}/references/card-samples-source.md +0 -0
- /package/skills/{android-display-glasses-with-jetpack-compose-glimmer → mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer}/references/card-source.md +0 -0
- /package/skills/{android-display-glasses-with-jetpack-compose-glimmer → mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer}/references/deptheffect-source.md +0 -0
- /package/skills/{android-display-glasses-with-jetpack-compose-glimmer → mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer}/references/deptheffectlevels-source.md +0 -0
- /package/skills/{android-display-glasses-with-jetpack-compose-glimmer → mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer}/references/glimmersansflextypography-source.md +0 -0
- /package/skills/{android-display-glasses-with-jetpack-compose-glimmer → mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer}/references/glimmertheme-source.md +0 -0
- /package/skills/{android-display-glasses-with-jetpack-compose-glimmer → mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer}/references/icon-source.md +0 -0
- /package/skills/{android-display-glasses-with-jetpack-compose-glimmer → mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer}/references/iconbutton-source.md +0 -0
- /package/skills/{android-display-glasses-with-jetpack-compose-glimmer → mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer}/references/iconsizes-source.md +0 -0
- /package/skills/{android-display-glasses-with-jetpack-compose-glimmer → mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer}/references/list-source.md +0 -0
- /package/skills/{android-display-glasses-with-jetpack-compose-glimmer → mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer}/references/listitem-source.md +0 -0
- /package/skills/{android-display-glasses-with-jetpack-compose-glimmer → mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer}/references/liststate-source.md +0 -0
- /package/skills/{android-display-glasses-with-jetpack-compose-glimmer → mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer}/references/material-hct-source.md +0 -0
- /package/skills/{android-display-glasses-with-jetpack-compose-glimmer → mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer}/references/projectedcontext-source.md +0 -0
- /package/skills/{android-display-glasses-with-jetpack-compose-glimmer → mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer}/references/stack-source.md +0 -0
- /package/skills/{android-display-glasses-with-jetpack-compose-glimmer → mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer}/references/stackitemscope-source.md +0 -0
- /package/skills/{android-display-glasses-with-jetpack-compose-glimmer → mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer}/references/stackstate-source.md +0 -0
- /package/skills/{android-display-glasses-with-jetpack-compose-glimmer → mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer}/references/surface-source.md +0 -0
- /package/skills/{android-display-glasses-with-jetpack-compose-glimmer → mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer}/references/titlechip-samples-source.md +0 -0
- /package/skills/{android-display-glasses-with-jetpack-compose-glimmer → mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer}/references/titlechip-source.md +0 -0
- /package/skills/{android-leanback-to-compose-tv-migration → mobile-android/references/devices/leanback-to-compose-tv-migration}/references/android/training/tv/get-started/navigation.md +0 -0
- /package/skills/{android-leanback-to-compose-tv-migration → mobile-android/references/devices/leanback-to-compose-tv-migration}/references/android/training/tv/playback/compose/browse.md +0 -0
- /package/skills/{android-leanback-to-compose-tv-migration → mobile-android/references/devices/leanback-to-compose-tv-migration}/references/android/training/tv/playback/compose/index.md +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/android/training/wearables/compose/migrate-to-material3.md +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/foundation/AmbientModeSample.kt.md +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/foundation/AmbientModeSample.kt.md.txt +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/foundation/CurvedWorldSample.kt.md +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/foundation/CurvedWorldSample.kt.md.txt +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/foundation/ExpandableSample.kt.md +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/foundation/ExpandableSample.kt.md.txt +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/foundation/HierarchicalFocusSample.kt.md +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/foundation/HierarchicalFocusSample.kt.md.txt +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/foundation/PagerSamples.kt.md +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/foundation/PagerSamples.kt.md.txt +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/foundation/RotarySamples.kt.md +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/foundation/RotarySamples.kt.md.txt +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/foundation/ScalingLazyColumnSample.kt.md +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/foundation/ScalingLazyColumnSample.kt.md.txt +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/foundation/SwipeToDismissBoxSample.kt.md +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/foundation/SwipeToDismissBoxSample.kt.md.txt +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/foundation/SwipeToRevealSample.kt.md +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/foundation/SwipeToRevealSample.kt.md.txt +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/foundation/TransformingLazyColumnSample.kt.md +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/foundation/TransformingLazyColumnSample.kt.md.txt +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/material3/AlertDialogSample.kt.md +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/material3/AlertDialogSample.kt.md.txt +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/material3/AnimatedTextSample.kt.md +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/material3/AnimatedTextSample.kt.md.txt +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/material3/ButtonGroupSample.kt.md +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/material3/ButtonGroupSample.kt.md.txt +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/material3/ButtonSample.kt.md +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/material3/ButtonSample.kt.md.txt +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/material3/CardSample.kt.md +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/material3/CardSample.kt.md.txt +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/material3/CheckboxButtonSample.kt.md +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/material3/CheckboxButtonSample.kt.md.txt +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/material3/ConfirmationDialogSample.kt.md +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/material3/ConfirmationDialogSample.kt.md.txt +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/material3/CurvedTextSamples.kt.md +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/material3/CurvedTextSamples.kt.md.txt +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/material3/DatePickerSample.kt.md +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/material3/DatePickerSample.kt.md.txt +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/material3/DynamicColorSchemeSample.kt.md +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/material3/DynamicColorSchemeSample.kt.md.txt +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/material3/EdgeButtonSample.kt.md +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/material3/EdgeButtonSample.kt.md.txt +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/material3/FadingExpandingLabelSample.kt.md +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/material3/FadingExpandingLabelSample.kt.md.txt +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/material3/IconButtonSample.kt.md +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/material3/IconButtonSample.kt.md.txt +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/material3/IconToggleButtonSample.kt.md +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/material3/IconToggleButtonSample.kt.md.txt +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/material3/LevelIndicatorSample.kt.md +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/material3/LevelIndicatorSample.kt.md.txt +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/material3/LinearProgressIndicatorSample.kt.md +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/material3/LinearProgressIndicatorSample.kt.md.txt +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/material3/ListHeaderSample.kt.md +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/material3/ListHeaderSample.kt.md.txt +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/material3/OneHandedGestureSamples.kt.md +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/material3/OneHandedGestureSamples.kt.md.txt +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/material3/OpenOnPhoneDialogSample.kt.md +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/material3/OpenOnPhoneDialogSample.kt.md.txt +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/material3/PageIndicatorSample.kt.md +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/material3/PageIndicatorSample.kt.md.txt +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/material3/PagerScaffoldSample.kt.md +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/material3/PagerScaffoldSample.kt.md.txt +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/material3/PickerGroupSample.kt.md +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/material3/PickerGroupSample.kt.md.txt +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/material3/PickerSample.kt.md +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/material3/PickerSample.kt.md.txt +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/material3/PlaceholderSample.kt.md +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/material3/PlaceholderSample.kt.md.txt +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/material3/ProgressIndicatorSample.kt.md +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/material3/ProgressIndicatorSample.kt.md.txt +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/material3/RadioButtonSample.kt.md +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/material3/RadioButtonSample.kt.md.txt +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/material3/ScaffoldSample.kt.md +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/material3/ScaffoldSample.kt.md.txt +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/material3/ScrollAwaySample.kt.md +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/material3/ScrollAwaySample.kt.md.txt +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/material3/ScrollIndicatorSample.kt.md +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/material3/ScrollIndicatorSample.kt.md.txt +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/material3/SliderSample.kt.md +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/material3/SliderSample.kt.md.txt +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/material3/StepperSample.kt.md +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/material3/StepperSample.kt.md.txt +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/material3/SurfaceTransformationSample.kt.md +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/material3/SurfaceTransformationSample.kt.md.txt +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/material3/SwipeToDismissBoxSample.kt.md +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/material3/SwipeToDismissBoxSample.kt.md.txt +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/material3/SwipeToRevealSample.kt.md +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/material3/SwipeToRevealSample.kt.md.txt +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/material3/SwitchButtonSample.kt.md +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/material3/SwitchButtonSample.kt.md.txt +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/material3/TextButtonSample.kt.md +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/material3/TextButtonSample.kt.md.txt +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/material3/TextToggleButtonSample.kt.md +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/material3/TextToggleButtonSample.kt.md.txt +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/material3/TimePickerSample.kt.md +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/material3/TimePickerSample.kt.md.txt +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/material3/TimeTextSample.kt.md +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/material3/TimeTextSample.kt.md.txt +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/material3/TransformationSpecSample.kt.md +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/material3/TransformationSpecSample.kt.md.txt +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/material3/TransformingLazyColumnNotificationsSample.kt.md +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/material3/TransformingLazyColumnNotificationsSample.kt.md.txt +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/material3/TransformingLazyColumnSample.kt.md +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/material3/TransformingLazyColumnSample.kt.md.txt +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/navigation3/SwipeDismissableSceneStrategySample.kt.md +0 -0
- /package/skills/{android-wear-compose-m3 → mobile-android/references/devices/wear-compose-m3}/references/navigation3/SwipeDismissableSceneStrategySample.kt.md.txt +0 -0
- /package/skills/{android-restore-credentials → mobile-android/references/identity/restore-credentials}/references/android/guide/topics/manifest/application-element.md +0 -0
- /package/skills/{android-restore-credentials → mobile-android/references/identity/restore-credentials}/references/android/identity/passkeys/create-passkeys.md +0 -0
- /package/skills/{android-restore-credentials → mobile-android/references/identity/restore-credentials}/references/android/identity/passkeys/sign-in-with-passkeys.md +0 -0
- /package/skills/{android-verified-email → mobile-android/references/identity/verified-email}/references/android/identity/credential-manager/index.md +0 -0
- /package/skills/{android-verified-email → mobile-android/references/identity/verified-email}/references/android/identity/digital-credentials/credential-verifier.md +0 -0
- /package/skills/{android-verified-email → mobile-android/references/identity/verified-email}/references/android/identity/digital-credentials/email-verification-implementation.md +0 -0
- /package/skills/{android-verified-email → mobile-android/references/identity/verified-email}/references/android/identity/digital-credentials/email-verification.md +0 -0
- /package/skills/{android-verified-email → mobile-android/references/identity/verified-email}/references/android/identity/digital-credentials/index.md +0 -0
- /package/skills/{android-verified-email → mobile-android/references/identity/verified-email}/references/android/identity/passkeys/create-passkeys.md +0 -0
- /package/skills/{android-verified-email → mobile-android/references/identity/verified-email}/references/android/identity/sign-in/credential-manager-webview.md +0 -0
- /package/skills/{android-camerax → mobile-android/references/media/camerax}/references/camera1-to-camerax.md +0 -0
- /package/skills/{android-camerax → mobile-android/references/media/camerax}/references/camera2-to-camerax.md +0 -0
- /package/skills/{android-camerax → mobile-android/references/media/camerax}/references/expert-blueprints.md +0 -0
- /package/skills/{android-camerax → mobile-android/references/media/camerax}/references/foldables.md +0 -0
- /package/skills/{android-camerax → mobile-android/references/media/camerax}/references/immutability.md +0 -0
- /package/skills/{android-camerax → mobile-android/references/media/camerax}/references/low-light.md +0 -0
- /package/skills/{android-camerax → mobile-android/references/media/camerax}/references/mlkit-spatial.md +0 -0
- /package/skills/{android-camerax → mobile-android/references/media/camerax}/references/modern-apis.md +0 -0
- /package/skills/{android-camerax → mobile-android/references/media/camerax}/references/testing.md +0 -0
- /package/skills/{android-camerax → mobile-android/references/media/camerax}/references/thermals.md +0 -0
- /package/skills/{android-camerax → mobile-android/references/media/camerax}/references/wear-os.md +0 -0
- /package/skills/{android-camerax → mobile-android/references/media/camerax}/references/xr.md +0 -0
- /package/skills/{android-media3-cast-integration → mobile-android/references/media/media3-cast-integration}/references/android/media/media3/cast/create-castplayer.md +0 -0
- /package/skills/{android-media3-cast-integration → mobile-android/references/media/media3-cast-integration}/references/android/media/media3/cast/customize-castoptions.md +0 -0
- /package/skills/{android-media3-cast-integration → mobile-android/references/media/media3-cast-integration}/references/android/media/media3/cast/index.md +0 -0
- /package/skills/{android-appfunctions → mobile-android/references/on-device-ai/appfunctions}/references/adb-interaction-testing.md +0 -0
- /package/skills/{android-appfunctions → mobile-android/references/on-device-ai/appfunctions}/references/context.md +0 -0
- /package/skills/{android-appfunctions → mobile-android/references/on-device-ai/appfunctions}/references/feature-discovery-analysis.md +0 -0
- /package/skills/{android-appfunctions → mobile-android/references/on-device-ai/appfunctions}/references/implementation-configuration.md +0 -0
- /package/skills/{android-appfunctions → mobile-android/references/on-device-ai/appfunctions}/references/kdoc-refinement-optimization.md +0 -0
- /package/skills/{android-appfunctions → mobile-android/references/on-device-ai/appfunctions}/references/migrate-to-service-entry-point.md +0 -0
- /package/skills/{android-ml-kit-genai-prompt-api → mobile-android/references/on-device-ai/ml-kit-genai-prompt-api}/references/get-started.md +0 -0
- /package/skills/{android-ml-kit-genai-prompt-api → mobile-android/references/on-device-ai/ml-kit-genai-prompt-api}/references/prefix-caching.md +0 -0
- /package/skills/{android-ml-kit-genai-prompt-api → mobile-android/references/on-device-ai/ml-kit-genai-prompt-api}/references/prompt-design.md +0 -0
- /package/skills/{android-ml-kit-genai-prompt-api → mobile-android/references/on-device-ai/ml-kit-genai-prompt-api}/references/prompt-optimization.md +0 -0
- /package/skills/{android-ml-kit-genai-prompt-api → mobile-android/references/on-device-ai/ml-kit-genai-prompt-api}/references/structured-output.md +0 -0
- /package/skills/{android-ml-kit-genai-prompt-api → mobile-android/references/on-device-ai/ml-kit-genai-prompt-api}/references/system-instructions.md +0 -0
- /package/skills/{android-engage-sdk-integration → mobile-android/references/play/engage-sdk-integration}/references/android/guide/playcore/engage/faq.md +0 -0
- /package/skills/{android-engage-sdk-integration → mobile-android/references/play/engage-sdk-integration}/references/android/guide/playcore/engage/food.md +0 -0
- /package/skills/{android-engage-sdk-integration → mobile-android/references/play/engage-sdk-integration}/references/android/guide/playcore/engage/healthandfitness.md +0 -0
- /package/skills/{android-engage-sdk-integration → mobile-android/references/play/engage-sdk-integration}/references/android/guide/playcore/engage/listen.md +0 -0
- /package/skills/{android-engage-sdk-integration → mobile-android/references/play/engage-sdk-integration}/references/android/guide/playcore/engage/otherverticals.md +0 -0
- /package/skills/{android-engage-sdk-integration → mobile-android/references/play/engage-sdk-integration}/references/android/guide/playcore/engage/read.md +0 -0
- /package/skills/{android-engage-sdk-integration → mobile-android/references/play/engage-sdk-integration}/references/android/guide/playcore/engage/shopping.md +0 -0
- /package/skills/{android-engage-sdk-integration → mobile-android/references/play/engage-sdk-integration}/references/android/guide/playcore/engage/social.md +0 -0
- /package/skills/{android-engage-sdk-integration → mobile-android/references/play/engage-sdk-integration}/references/android/guide/playcore/engage/travel.md +0 -0
- /package/skills/{android-engage-sdk-integration → mobile-android/references/play/engage-sdk-integration}/references/android/guide/playcore/engage/tv/continue-watching/index.md +0 -0
- /package/skills/{android-engage-sdk-integration → mobile-android/references/play/engage-sdk-integration}/references/android/guide/playcore/engage/tv/entitlements.md +0 -0
- /package/skills/{android-engage-sdk-integration → mobile-android/references/play/engage-sdk-integration}/references/android/guide/playcore/engage/tv/getting-started.md +0 -0
- /package/skills/{android-engage-sdk-integration → mobile-android/references/play/engage-sdk-integration}/references/android/guide/playcore/engage/tv/recommendations.md +0 -0
- /package/skills/{android-engage-sdk-integration → mobile-android/references/play/engage-sdk-integration}/references/android/guide/playcore/engage/watch.md +0 -0
- /package/skills/{android-engage-sdk-integration → mobile-android/references/play/engage-sdk-integration}/references/clusters.md +0 -0
- /package/skills/{android-engage-sdk-integration → mobile-android/references/play/engage-sdk-integration}/references/common.md +0 -0
- /package/skills/{android-engage-sdk-integration → mobile-android/references/play/engage-sdk-integration}/references/patterns.md +0 -0
- /package/skills/{android-engage-sdk-integration → mobile-android/references/play/engage-sdk-integration}/references/requests.md +0 -0
- /package/skills/{android-engage-sdk-integration → mobile-android/references/play/engage-sdk-integration}/references/schemas/food.md +0 -0
- /package/skills/{android-engage-sdk-integration → mobile-android/references/play/engage-sdk-integration}/references/schemas/listen.md +0 -0
- /package/skills/{android-engage-sdk-integration → mobile-android/references/play/engage-sdk-integration}/references/schemas/other.md +0 -0
- /package/skills/{android-engage-sdk-integration → mobile-android/references/play/engage-sdk-integration}/references/schemas/read.md +0 -0
- /package/skills/{android-engage-sdk-integration → mobile-android/references/play/engage-sdk-integration}/references/schemas/shopping.md +0 -0
- /package/skills/{android-engage-sdk-integration → mobile-android/references/play/engage-sdk-integration}/references/schemas/social.md +0 -0
- /package/skills/{android-engage-sdk-integration → mobile-android/references/play/engage-sdk-integration}/references/schemas/travel.md +0 -0
- /package/skills/{android-engage-sdk-integration → mobile-android/references/play/engage-sdk-integration}/references/schemas/tv.md +0 -0
- /package/skills/{android-engage-sdk-integration → mobile-android/references/play/engage-sdk-integration}/references/schemas/watch.md +0 -0
- /package/skills/{android-engage-sdk-integration → mobile-android/references/play/engage-sdk-integration}/references/troubleshooting.md +0 -0
- /package/skills/{android-play-billing-library-version-upgrade → mobile-android/references/play/play-billing-library-version-upgrade}/references/android/google/play/billing/release-notes.md +0 -0
- /package/skills/{android-play-billing-library-version-upgrade → mobile-android/references/play/play-billing-library-version-upgrade}/references/migration-logic.md +0 -0
- /package/skills/{android-play-billing-library-version-upgrade → mobile-android/references/play/play-billing-library-version-upgrade}/references/version-checklist.md +0 -0
- /package/skills/{android-play-policy-insights → mobile-android/references/play/play-policy-insights}/resources/common_mandates.md +0 -0
- /package/skills/{android-play-policy-insights → mobile-android/references/play/play-policy-insights}/resources/compliance_report_template.md +0 -0
- /package/skills/{android-play-policy-insights → mobile-android/references/play/play-policy-insights}/resources/critic.md +0 -0
- /package/skills/{android-play-policy-insights → mobile-android/references/play/play-policy-insights}/resources/goal_data_safety.md +0 -0
- /package/skills/{android-play-policy-insights → mobile-android/references/play/play-policy-insights}/resources/goal_permissions_and_apis.md +0 -0
- /package/skills/{android-play-policy-insights → mobile-android/references/play/play-policy-insights}/resources/goal_user_account.md +0 -0
- /package/skills/{android-play-policy-insights → mobile-android/references/play/play-policy-insights}/resources/policies.json +0 -0
- /package/skills/{android-play-policy-insights → mobile-android/references/play/play-policy-insights}/resources/scanner_config.json +0 -0
- /package/skills/{android-play-policy-insights → mobile-android/references/play/play-policy-insights}/scripts/generate_report.py +0 -0
- /package/skills/{android-play-policy-insights → mobile-android/references/play/play-policy-insights}/scripts/orchestrator.py +0 -0
- /package/skills/{android-play-policy-insights → mobile-android/references/play/play-policy-insights}/scripts/play_store_scraper.py +0 -0
- /package/skills/{android-play-policy-insights → mobile-android/references/play/play-policy-insights}/scripts/scanner.py +0 -0
- /package/skills/{android-play-policy-insights → mobile-android/references/play/play-policy-insights}/scripts/template_engine.py +0 -0
- /package/skills/{android-adaptive → mobile-android/references/ui/adaptive}/references/android/develop/ui/compose/layouts/adaptive/flexbox/container-behavior.md +0 -0
- /package/skills/{android-adaptive → mobile-android/references/ui/adaptive}/references/android/develop/ui/compose/layouts/adaptive/flexbox/get-started.md +0 -0
- /package/skills/{android-adaptive → mobile-android/references/ui/adaptive}/references/android/develop/ui/compose/layouts/adaptive/flexbox/index.md +0 -0
- /package/skills/{android-adaptive → mobile-android/references/ui/adaptive}/references/android/develop/ui/compose/layouts/adaptive/flexbox/item-behavior.md +0 -0
- /package/skills/{android-adaptive → mobile-android/references/ui/adaptive}/references/android/develop/ui/compose/layouts/adaptive/grid/container-properties.md +0 -0
- /package/skills/{android-adaptive → mobile-android/references/ui/adaptive}/references/android/develop/ui/compose/layouts/adaptive/grid/get-started.md +0 -0
- /package/skills/{android-adaptive → mobile-android/references/ui/adaptive}/references/android/develop/ui/compose/layouts/adaptive/grid/index.md +0 -0
- /package/skills/{android-adaptive → mobile-android/references/ui/adaptive}/references/android/develop/ui/compose/layouts/adaptive/grid/item-properties.md +0 -0
- /package/skills/{android-adaptive → mobile-android/references/ui/adaptive}/references/android/develop/ui/compose/layouts/adaptive/mediaquery/index.md +0 -0
- /package/skills/{android-adaptive → mobile-android/references/ui/adaptive}/references/android/develop/ui/compose/tooling/debug.md +0 -0
- /package/skills/{android-adaptive → mobile-android/references/ui/adaptive}/references/android/guide/navigation/navigation-3/recipes/material-listdetail.md +0 -0
- /package/skills/{android-migrate-xml-views-to-jetpack-compose → mobile-android/references/ui/migrate-xml-views-to-jetpack-compose}/references/analysis-of-the-project-and-layout.md +0 -0
- /package/skills/{android-migrate-xml-views-to-jetpack-compose → mobile-android/references/ui/migrate-xml-views-to-jetpack-compose}/references/android/develop/ui/compose/designsystems/migrate-xml-theme-to-compose.md +0 -0
- /package/skills/{android-migrate-xml-views-to-jetpack-compose → mobile-android/references/ui/migrate-xml-views-to-jetpack-compose}/references/android/develop/ui/compose/migrate/interoperability-apis/compose-in-views.md +0 -0
- /package/skills/{android-migrate-xml-views-to-jetpack-compose → mobile-android/references/ui/migrate-xml-views-to-jetpack-compose}/references/android/develop/ui/compose/migrate/interoperability-apis/views-in-compose.md +0 -0
- /package/skills/{android-migrate-xml-views-to-jetpack-compose → mobile-android/references/ui/migrate-xml-views-to-jetpack-compose}/references/android/develop/ui/compose/setup-compose-dependencies-and-compiler.md +0 -0
- /package/skills/{android-migrate-xml-views-to-jetpack-compose → mobile-android/references/ui/migrate-xml-views-to-jetpack-compose}/references/identify-optimal-xml-candidate.md +0 -0
- /package/skills/{android-migrate-xml-views-to-jetpack-compose → mobile-android/references/ui/migrate-xml-views-to-jetpack-compose}/references/xml-layout-migration.md +0 -0
- /package/skills/{android-navigation-3 → mobile-android/references/ui/navigation-3}/references/android/guide/navigation/navigation-3/index.md +0 -0
- /package/skills/{android-navigation-3 → mobile-android/references/ui/navigation-3}/references/android/guide/navigation/navigation-3/migration-guide.md +0 -0
- /package/skills/{android-navigation-3 → mobile-android/references/ui/navigation-3}/references/android/guide/navigation/navigation-3/recipes/animations.md +0 -0
- /package/skills/{android-navigation-3 → mobile-android/references/ui/navigation-3}/references/android/guide/navigation/navigation-3/recipes/basic.md +0 -0
- /package/skills/{android-navigation-3 → mobile-android/references/ui/navigation-3}/references/android/guide/navigation/navigation-3/recipes/basicdsl.md +0 -0
- /package/skills/{android-navigation-3 → mobile-android/references/ui/navigation-3}/references/android/guide/navigation/navigation-3/recipes/basicsaveable.md +0 -0
- /package/skills/{android-navigation-3 → mobile-android/references/ui/navigation-3}/references/android/guide/navigation/navigation-3/recipes/bottomsheet.md +0 -0
- /package/skills/{android-navigation-3 → mobile-android/references/ui/navigation-3}/references/android/guide/navigation/navigation-3/recipes/common-ui.md +0 -0
- /package/skills/{android-navigation-3 → mobile-android/references/ui/navigation-3}/references/android/guide/navigation/navigation-3/recipes/conditional-transitions.md +0 -0
- /package/skills/{android-navigation-3 → mobile-android/references/ui/navigation-3}/references/android/guide/navigation/navigation-3/recipes/conditional.md +0 -0
- /package/skills/{android-navigation-3 → mobile-android/references/ui/navigation-3}/references/android/guide/navigation/navigation-3/recipes/deeplinks-custommatcher.md +0 -0
- /package/skills/{android-navigation-3 → mobile-android/references/ui/navigation-3}/references/android/guide/navigation/navigation-3/recipes/deeplinks-staticuri.md +0 -0
- /package/skills/{android-navigation-3 → mobile-android/references/ui/navigation-3}/references/android/guide/navigation/navigation-3/recipes/deeplinks-syntheticbackstack.md +0 -0
- /package/skills/{android-navigation-3 → mobile-android/references/ui/navigation-3}/references/android/guide/navigation/navigation-3/recipes/dialog.md +0 -0
- /package/skills/{android-navigation-3 → mobile-android/references/ui/navigation-3}/references/android/guide/navigation/navigation-3/recipes/lifecycle-owner.md +0 -0
- /package/skills/{android-navigation-3 → mobile-android/references/ui/navigation-3}/references/android/guide/navigation/navigation-3/recipes/material-listdetail.md +0 -0
- /package/skills/{android-navigation-3 → mobile-android/references/ui/navigation-3}/references/android/guide/navigation/navigation-3/recipes/material-supportingpane.md +0 -0
- /package/skills/{android-navigation-3 → mobile-android/references/ui/navigation-3}/references/android/guide/navigation/navigation-3/recipes/modular-hilt.md +0 -0
- /package/skills/{android-navigation-3 → mobile-android/references/ui/navigation-3}/references/android/guide/navigation/navigation-3/recipes/modular-koin.md +0 -0
- /package/skills/{android-navigation-3 → mobile-android/references/ui/navigation-3}/references/android/guide/navigation/navigation-3/recipes/multiple-backstacks.md +0 -0
- /package/skills/{android-navigation-3 → mobile-android/references/ui/navigation-3}/references/android/guide/navigation/navigation-3/recipes/passingarguments.md +0 -0
- /package/skills/{android-navigation-3 → mobile-android/references/ui/navigation-3}/references/android/guide/navigation/navigation-3/recipes/results-event.md +0 -0
- /package/skills/{android-navigation-3 → mobile-android/references/ui/navigation-3}/references/android/guide/navigation/navigation-3/recipes/results-state.md +0 -0
- /package/skills/{android-navigation-3 → mobile-android/references/ui/navigation-3}/references/android/guide/navigation/navigation-3/recipes/scenes-listdetail.md +0 -0
- /package/skills/{android-navigation-3 → mobile-android/references/ui/navigation-3}/references/android/guide/navigation/navigation-3/recipes/scenes-twopane.md +0 -0
- /package/skills/{android-navigation-3 → mobile-android/references/ui/navigation-3}/references/android/guide/navigation/type-safe-destinations.md +0 -0
- /package/skills/{android-navigation-event → mobile-android/references/ui/navigation-event}/references/android/guide/navigation/navigation-event/dispatcher.md +0 -0
- /package/skills/{android-navigation-event → mobile-android/references/ui/navigation-event}/references/android/guide/navigation/navigation-event/handle-back.md +0 -0
- /package/skills/{android-navigation-event → mobile-android/references/ui/navigation-event}/references/android/guide/navigation/navigation-event/index.md +0 -0
- /package/skills/{android-navigation-event → mobile-android/references/ui/navigation-event}/references/android/guide/navigation/navigation-event/setup.md +0 -0
- /package/skills/{android-styles → mobile-android/references/ui/styles}/references/android/develop/ui/compose/designsystems/custom.md +0 -0
- /package/skills/{android-styles → mobile-android/references/ui/styles}/references/android/develop/ui/compose/styles/fundamentals.md +0 -0
- /package/skills/{android-styles → mobile-android/references/ui/styles}/references/android/develop/ui/compose/styles/state-animations.md +0 -0
- /package/skills/{android-styles → mobile-android/references/ui/styles}/references/android/develop/ui/compose/styles/styles-vs-modifiers.md +0 -0
- /package/skills/{android-styles → mobile-android/references/ui/styles}/references/android/develop/ui/compose/styles/theming.md +0 -0
- /package/skills/{flutter-dart-use-pattern-matching → mobile-flutter/references/dart/pattern-matching}/examples/json_patterns.dart +0 -0
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: mobile-code-review
|
|
3
|
+
description: Reviews mobile code for the bugs that reach production on every stack — Flutter and Dart (pull request checklist, widget lifecycle and rebuilds, project health, static analysis), native Android (Kotlin, coroutines, Jetpack Compose, lifecycle), native iOS (Swift concurrency, SwiftUI, retain cycles) and React Native (hooks, re-renders, platform code, Expo) — with file:line evidence and a structured report. Use whenever the user asks for a code review, PR or merge request review, project audit or quality check of a mobile app, or runs /reis-mobile:review, even if they only point at a diff or a folder.
|
|
4
|
+
intents: [review, performance]
|
|
5
|
+
stacks: ["*"]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Mobile Code Review
|
|
9
|
+
|
|
10
|
+
One review process for every mobile stack. This file holds how to review and what always matters; each platform's checklist lives in its reference.
|
|
11
|
+
|
|
12
|
+
## 1. Pick the checklists
|
|
13
|
+
|
|
14
|
+
Detect the stack first, then apply the platform checklist to the files in scope:
|
|
15
|
+
|
|
16
|
+
| Project | Read |
|
|
17
|
+
|---|---|
|
|
18
|
+
| Flutter / Dart | [references/flutter.md](references/flutter.md), which orders the Flutter checklists in `references/flutter/` |
|
|
19
|
+
| Native Android (Kotlin/Java), or the Android side of Kotlin Multiplatform | [references/android.md](references/android.md) |
|
|
20
|
+
| Native iOS (Swift/Objective-C) | [references/ios.md](references/ios.md) |
|
|
21
|
+
| React Native or Expo | [references/react-native.md](references/react-native.md) |
|
|
22
|
+
|
|
23
|
+
In a cross-platform app, native code in `android/`, `ios/` or native modules gets the native checklist too. Security findings follow `mobile-security` when it is loaded.
|
|
24
|
+
|
|
25
|
+
## 2. Scope
|
|
26
|
+
|
|
27
|
+
- **Changes (diff or pull request):** review what changed, reading the whole file when the hunk is not enough to understand it. New untracked files are not in the diff; read them.
|
|
28
|
+
- **Whole project:** start at the entry points (app startup, navigation, dependency setup), then the data layer, authentication and the most complex screens.
|
|
29
|
+
|
|
30
|
+
## 3. Evidence before findings
|
|
31
|
+
|
|
32
|
+
- Open the code and confirm every suspicion. A finding without evidence at `file:line` does not go in the report.
|
|
33
|
+
- Do not invent APIs, versions or lint rules. Check the lock files and build files (`pubspec.lock`, version catalog, `Package.resolved`, `package.json`) before claiming something is missing, deprecated or unavailable.
|
|
34
|
+
- Do not report style that a configured linter already enforces.
|
|
35
|
+
- When the project deliberately does something differently and it is coherent, say so instead of flagging it.
|
|
36
|
+
|
|
37
|
+
## 4. What always matters, on any stack
|
|
38
|
+
|
|
39
|
+
- **Lifecycle:** async work that outlives its screen; listeners, subscriptions, timers and controllers never released.
|
|
40
|
+
- **Threading:** I/O or heavy parsing on the main/UI thread; UI updated off it.
|
|
41
|
+
- **State:** impossible states that can be represented; loading and error handled; state lost on rotation, backgrounding or process death.
|
|
42
|
+
- **Network:** timeouts, retries without backoff, offline handling, unvalidated responses.
|
|
43
|
+
- **Credentials:** tokens in insecure storage, secrets in code or the bundle, sensitive data in logs.
|
|
44
|
+
- **Platform:** permissions requested without handling denial; manifest, `Info.plist`, entitlements or config changes that affect store publishing.
|
|
45
|
+
- **Tests:** new logic without tests when the project already has a suite.
|
|
46
|
+
|
|
47
|
+
## 5. Severity
|
|
48
|
+
|
|
49
|
+
Rank by real impact on users: crash or data loss, credential leak, store rejection, then noticeable degradation, then maintainability. Say why each finding matters, not only what rule it breaks.
|
|
50
|
+
|
|
51
|
+
## Report
|
|
52
|
+
|
|
53
|
+
Unless an agent defines its own format, answer with:
|
|
54
|
+
|
|
55
|
+
```markdown
|
|
56
|
+
## Summary
|
|
57
|
+
Stack, scope (diff or project), verdict: approve | approve-with-changes | request-changes.
|
|
58
|
+
|
|
59
|
+
## Critical
|
|
60
|
+
## Bugs
|
|
61
|
+
## Architecture
|
|
62
|
+
## Security
|
|
63
|
+
## Performance
|
|
64
|
+
## Maintainability
|
|
65
|
+
|
|
66
|
+
## Suggested changes
|
|
67
|
+
Prioritized list. For each item: file:line, problem, why it matters, fix.
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
Write "No findings." in a section with nothing to report.
|
|
@@ -1,10 +1,3 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: android-code-review
|
|
3
|
-
description: Reviews native Android code in Kotlin and Java for the bugs that reach production — lifecycle and Context leaks, coroutine scope, dispatcher and cancellation mistakes, Flow collection outside the lifecycle, Jetpack Compose state, recomposition and side effects, state lost on configuration change or process death, main-thread I/O, WorkManager and permission handling, and exported components. Use when reviewing Kotlin or Java files in an Android app or module, Activities, Fragments, ViewModels, Composables, repositories or Gradle modules, or when the user asks for an Android code review or PR review.
|
|
4
|
-
intents: [review, performance]
|
|
5
|
-
stacks: [android, kotlin-multiplatform]
|
|
6
|
-
---
|
|
7
|
-
|
|
8
1
|
# Android Code Review
|
|
9
2
|
|
|
10
3
|
Apply to Kotlin and Java sources under `src/main` (and `androidMain` in KMP). Items are ordered by impact: the first sections cause crashes, leaks or lost user data. Before flagging an API as missing or deprecated, check the library versions in the version catalog or build files.
|
|
@@ -41,7 +34,7 @@ Apply to Kotlin and Java sources under `src/main` (and `androidMain` in KMP). It
|
|
|
41
34
|
|
|
42
35
|
## 5. Platform
|
|
43
36
|
|
|
44
|
-
- [ ] **Exported components.** `android:exported="true"` on activities, services, receivers or providers without a permission, that act on the incoming `Intent` without validating it. Details in `mobile-security
|
|
37
|
+
- [ ] **Exported components.** `android:exported="true"` on activities, services, receivers or providers without a permission, that act on the incoming `Intent` without validating it. Details in `mobile-security`.
|
|
45
38
|
- [ ] **Runtime permissions.** Features used without checking the permission, or denial ("don't ask again") not handled.
|
|
46
39
|
- [ ] **Background work.** Long work started from an Activity or a plain `Service` that the system will stop; persistent or deferrable work belongs in `WorkManager`. Starting foreground services and exact alarms have restrictions that depend on `targetSdk`; check it before reviewing.
|
|
47
40
|
- [ ] **`PendingIntent` mutability.** Flags must include `FLAG_IMMUTABLE` or `FLAG_MUTABLE` explicitly on apps targeting Android 12 or higher.
|
package/skills/{flutter-code-review/SKILL.md → mobile-code-review/references/flutter/pr-review.md}
RENAMED
|
@@ -1,11 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
name: flutter-code-review
|
|
3
|
-
description: Performs thorough code reviews for Flutter/Dart pull requests and merge requests. Use when asked to review a PR, MR, branch, or a set of changed files. Follows a structured checklist covering correctness, security, style, testing, and documentation.
|
|
4
|
-
intents: [review]
|
|
5
|
-
stacks: [flutter]
|
|
6
|
-
source: https://github.com/evanca/flutter-ai-rules
|
|
7
|
-
license: MIT
|
|
8
|
-
---
|
|
1
|
+
> Adapted from the `code-review` skill in [evanca/flutter-ai-rules](https://github.com/evanca/flutter-ai-rules) (MIT). See `THIRD_PARTY_NOTICES.md`.
|
|
9
2
|
|
|
10
3
|
# Code Review Skill
|
|
11
4
|
|
|
@@ -1,10 +1,3 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: flutter-project-audit
|
|
3
|
-
description: Audits the health of a Flutter project as a whole — pubspec constraints and lock file, analysis_options and lints, SDK and platform configuration (minSdk, iOS deployment target), flavors and environments, generated code, folder structure and test setup. Use when reviewing or auditing a Flutter app or plugin, before a release, or when the user asks whether a Flutter project is well configured.
|
|
4
|
-
intents: [review, architecture, dependency]
|
|
5
|
-
stacks: [flutter]
|
|
6
|
-
---
|
|
7
|
-
|
|
8
1
|
# Flutter Project Audit
|
|
9
2
|
|
|
10
3
|
Project health checklist. Every item must be confirmed by reading the cited file; do not report what you could not verify.
|
|
@@ -1,14 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
description: Execute `dart analyze` to identify warnings and errors, and use `dart fix --apply` to automatically resolve mechanical lint issues. Use during development to ensure code quality and before committing changes.
|
|
4
|
-
metadata:
|
|
5
|
-
model: models/gemini-3.1-pro-preview
|
|
6
|
-
last_modified: Fri, 24 Apr 2026 15:09:34 GMT
|
|
7
|
-
intents: [review]
|
|
8
|
-
stacks: [flutter]
|
|
9
|
-
source: https://github.com/dart-lang/skills
|
|
10
|
-
license: BSD-3-Clause
|
|
11
|
-
---
|
|
1
|
+
> Adapted from the `dart-run-static-analysis` skill in [dart-lang/skills](https://github.com/dart-lang/skills) (BSD-3-Clause). See `THIRD_PARTY_NOTICES.md`.
|
|
2
|
+
|
|
12
3
|
# Analyzing and Fixing Dart Code
|
|
13
4
|
|
|
14
5
|
## Contents
|
|
@@ -1,10 +1,3 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: flutter-widget-review
|
|
3
|
-
description: Reviews Flutter widget code for lifecycle bugs, BuildContext misuse across async gaps, missing dispose, side effects in build, unnecessary rebuilds, list and image performance, layout overflow risks and accessibility. Use when reviewing Dart files under lib/ that contain widgets, screens or pages, or when the user asks to review Flutter UI code.
|
|
4
|
-
intents: [review, performance]
|
|
5
|
-
stacks: [flutter]
|
|
6
|
-
---
|
|
7
|
-
|
|
8
1
|
# Flutter Widget Review
|
|
9
2
|
|
|
10
3
|
Apply to Dart files with widgets (`StatelessWidget`, `StatefulWidget`, `ConsumerWidget`, `HookWidget`...). Items are ordered by impact: the first ones cause crashes or visible bugs.
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# Reviewing Flutter and Dart code
|
|
2
|
+
|
|
3
|
+
Apply the checklists in this order; stop early for a small diff that only touches widgets.
|
|
4
|
+
|
|
5
|
+
| Step | Checklist | When |
|
|
6
|
+
|---|---|---|
|
|
7
|
+
| 1 | [flutter/static-analysis.md](flutter/static-analysis.md) — `dart analyze`, `dart fix` | Always, when the Dart SDK is available; report the analyzer output before manual findings |
|
|
8
|
+
| 2 | [flutter/pr-review.md](flutter/pr-review.md) — pull request checklist: correctness, security, style, tests, docs | Reviewing a diff, branch or pull request |
|
|
9
|
+
| 3 | [flutter/widget-review.md](flutter/widget-review.md) — lifecycle, `BuildContext` across async gaps, dispose, rebuilds, lists, layout, accessibility | Files with widgets, screens or pages; performance reviews |
|
|
10
|
+
| 4 | [flutter/project-audit.md](flutter/project-audit.md) — `pubspec.yaml`, lints, native configuration, flavors, structure, CI | Auditing a whole project, or a diff that touches `pubspec.yaml`, `android/`, `ios/` or CI |
|
|
11
|
+
|
|
12
|
+
## Flutter-specific notes
|
|
13
|
+
|
|
14
|
+
- Dart style and idioms: the Effective Dart and Dart 3 guides in the `mobile-flutter` skill (`references/dart.md`).
|
|
15
|
+
- Follow the project's state management (BLoC/Cubit, Riverpod, Provider) instead of suggesting another one.
|
|
16
|
+
- Check the Flutter and Dart versions in `pubspec.lock` before recommending newer APIs (`MediaQuery.sizeOf`, Dart 3 patterns).
|
|
17
|
+
- Generated files (`*.g.dart`, `*.freezed.dart`, `*.mocks.dart`) are reviewed through their source annotations, not line by line.
|
|
18
|
+
- Native code under `android/` and `ios/` follows [android.md](android.md) and [ios.md](ios.md).
|
|
@@ -1,10 +1,3 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: ios-code-review
|
|
3
|
-
description: Reviews native iOS code in Swift and Objective-C for the bugs that reach production — retain cycles in closures, delegates, timers and observers, Swift concurrency mistakes such as UI updates off the main actor, uncancelled tasks and data races, SwiftUI ownership and identity bugs (@StateObject vs @ObservedObject, ForEach ids), force unwraps and try! in production paths, main-thread blocking, and privacy and permission handling. Use when reviewing Swift or Objective-C files in an iOS app, view controllers, SwiftUI views, view models, networking or persistence code, or when the user asks for an iOS code review or PR review.
|
|
4
|
-
intents: [review, performance]
|
|
5
|
-
stacks: [ios]
|
|
6
|
-
---
|
|
7
|
-
|
|
8
1
|
# iOS Code Review
|
|
9
2
|
|
|
10
3
|
Apply to Swift and Objective-C sources of the app and its extensions. Items are ordered by impact: the first sections cause crashes, leaks or data races. Before flagging an API, check the deployment target (`IPHONEOS_DEPLOYMENT_TARGET`) — `@Observable`, for example, requires iOS 17.
|
|
@@ -39,7 +32,7 @@ Apply to Swift and Objective-C sources of the app and its extensions. Items are
|
|
|
39
32
|
|
|
40
33
|
## 5. Platform and privacy
|
|
41
34
|
|
|
42
|
-
- [ ] **Credentials and tokens** in `UserDefaults` or files instead of the Keychain. Details in `mobile-security
|
|
35
|
+
- [ ] **Credentials and tokens** in `UserDefaults` or files instead of the Keychain. Details in `mobile-security`.
|
|
43
36
|
- [ ] **Permissions.** Each protected API used needs its `NS...UsageDescription` in `Info.plist`, and the code must handle denied and restricted states, not only granted.
|
|
44
37
|
- [ ] **Background execution.** Work that must finish when the app goes to background without `beginBackgroundTask` or `BGTaskScheduler`.
|
|
45
38
|
- [ ] **Deployment target.** APIs used without `#available` checks when the deployment target is lower than the API's availability.
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# React Native Code Review
|
|
2
|
+
|
|
3
|
+
Apply to TypeScript and JavaScript sources of a React Native or Expo app, and to its native modules with the native checklists. Items are ordered by impact: the first sections cause crashes, leaks or wrong data. Check the React Native or Expo SDK version and the library versions in `package.json` before recommending an API.
|
|
4
|
+
|
|
5
|
+
## 1. Hooks and effects (bug / leak)
|
|
6
|
+
|
|
7
|
+
- [ ] **Missing effect cleanup.** Listeners (`AppState`, `Keyboard`, `Linking`, `Dimensions`), subscriptions, intervals and timeouts added in `useEffect` without returning a cleanup function.
|
|
8
|
+
- [ ] **Stale closures.** Effects, callbacks or memoized values that read props or state not listed in the dependency array. `react-hooks/exhaustive-deps` warnings silenced without a reason are findings.
|
|
9
|
+
- [ ] **State updates after unmount.** Requests started in an effect and never cancelled (no `AbortController`, no ignore flag) updating state of a screen the user left.
|
|
10
|
+
- [ ] **Hooks called conditionally** or inside loops.
|
|
11
|
+
- [ ] **Effects used for derived data.** State computed from props in an effect instead of during render causes an extra render and flicker.
|
|
12
|
+
|
|
13
|
+
## 2. State and data
|
|
14
|
+
|
|
15
|
+
- [ ] **Server data copied into global state** (Redux, Zustand, context) and synchronized by hand, instead of a server-state cache such as TanStack Query or RTK Query.
|
|
16
|
+
- [ ] **Impossible states.** Separate `loading`, `error` and `data` flags that can contradict each other; missing error and empty states.
|
|
17
|
+
- [ ] **Unvalidated responses.** API data used with `as` casts and no runtime validation at the boundary, so a contract change crashes deep in the UI.
|
|
18
|
+
- [ ] **Navigation params** carrying large objects, functions or data that should be fetched by id; params not typed.
|
|
19
|
+
|
|
20
|
+
## 3. Rendering performance
|
|
21
|
+
|
|
22
|
+
- [ ] **Long lists in `ScrollView` + `.map()`** instead of `FlatList`/`SectionList` (or FlashList, if the project uses it); missing or index-based `keyExtractor` for lists that change.
|
|
23
|
+
- [ ] **Context values recreated every render**, re-rendering every consumer; one large context for unrelated state.
|
|
24
|
+
- [ ] **Inline objects and callbacks** passed to memoized components, defeating `React.memo`. Only report on hot paths.
|
|
25
|
+
- [ ] **Animations driven by JavaScript state** per frame instead of Reanimated or `useNativeDriver: true`.
|
|
26
|
+
- [ ] **Remote images** without caching or sized far larger than displayed.
|
|
27
|
+
|
|
28
|
+
## 4. Platform and native code
|
|
29
|
+
|
|
30
|
+
- [ ] **Platform branches** (`Platform.OS`) scattered through screens instead of `.ios.tsx`/`.android.tsx` files or a small platform module.
|
|
31
|
+
- [ ] **Permissions** requested without handling denial or "don't ask again"; Android 13+ notification permission missing when push is used.
|
|
32
|
+
- [ ] **Deep links** (`Linking`, navigation linking config) acting on parameters without validating them.
|
|
33
|
+
- [ ] **Native modules** called directly from many components instead of one typed wrapper; changes to native code without the matching iOS and Android updates.
|
|
34
|
+
- [ ] **Safe areas and keyboard:** screens without safe area handling; forms hidden by the keyboard.
|
|
35
|
+
|
|
36
|
+
## 5. Security
|
|
37
|
+
|
|
38
|
+
- [ ] Tokens or credentials in `AsyncStorage` instead of the Keychain/Keystore (`react-native-keychain`, `expo-secure-store`).
|
|
39
|
+
- [ ] Secrets in `.env` files read through `react-native-config` or `EXPO_PUBLIC_*` variables: they are bundled into the app and readable.
|
|
40
|
+
- [ ] `react-native-webview` with `originWhitelist={['*']}` and an `onMessage` handler that acts on messages.
|
|
41
|
+
- [ ] Sensitive data in `console.log`, which stays in release builds unless removed. Details in `mobile-security`.
|
|
42
|
+
|
|
43
|
+
## 6. Expo and release
|
|
44
|
+
|
|
45
|
+
- [ ] Config plugins or `app.json`/`app.config.*` changes that require a new native build, shipped as an over-the-air update. Check that `runtimeVersion` changes when native code or config changes.
|
|
46
|
+
- [ ] Secrets placed in `app.json` `extra` fields, which are bundled into the app.
|
|
47
|
+
- [ ] Hermes disabled, or debug-only code (`__DEV__` branches missing) reachable in production.
|
|
48
|
+
|
|
49
|
+
## 7. Maintainability, accessibility and tests
|
|
50
|
+
|
|
51
|
+
- [ ] `any` types and `@ts-ignore` added without a reason; `strict` mode relaxed.
|
|
52
|
+
- [ ] Touchable elements without `accessibilityRole` and `accessibilityLabel`; touch targets smaller than about 44–48 points; text that ignores font scaling.
|
|
53
|
+
- [ ] User-visible strings hardcoded when the project uses i18n.
|
|
54
|
+
- [ ] New logic, hooks or screens without tests when the project has a Jest suite.
|
|
55
|
+
|
|
56
|
+
## Output
|
|
57
|
+
|
|
58
|
+
Report in the matching section of the review (Bugs for sections 1–2, Performance for section 3, Security for section 5), always with `file:line` and the corrected snippet when the fix is short.
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: mobile-debug
|
|
3
|
+
description: Finds the cause of failing builds and runtime errors in mobile apps on every stack — Flutter (pub version solving, Dart compilation, generated code, layout overflows, runtime exceptions), native Android (Gradle, AGP, JDK and Kotlin mismatches, dependency conflicts, manifest merger, R8, logcat crashes and ANRs), native iOS (Xcode signing and provisioning, deployment targets, CocoaPods, Swift Package Manager, crash logs) and React Native (Metro, native modules not found, Hermes, the Android and iOS builds underneath). Use whenever a build, `flutter run`, `pod install`, Gradle task, Xcode archive or app launch fails, when the user pastes a stack trace, "BUILD FAILED" or a red screen, or runs /reis-mobile:debug, even if they only paste the error.
|
|
4
|
+
intents: [debug, build, dependency, migration]
|
|
5
|
+
stacks: ["*"]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Mobile Debug
|
|
9
|
+
|
|
10
|
+
One debugging process for every mobile stack. This file holds how to find a cause; each platform's error signatures and fixes live in its reference.
|
|
11
|
+
|
|
12
|
+
## 1. Pick the reference
|
|
13
|
+
|
|
14
|
+
Choose by the stack **and** by the layer the error comes from — a Flutter or React Native build often fails inside Gradle or Xcode:
|
|
15
|
+
|
|
16
|
+
| The failure is in | Read |
|
|
17
|
+
|---|---|
|
|
18
|
+
| A Flutter app: pub, Dart compilation, generated code, widgets, runtime exceptions | [references/flutter.md](references/flutter.md) |
|
|
19
|
+
| Gradle, the Android build, logcat crashes or ANRs (native Android, or the `android/` folder of any app) | [references/android.md](references/android.md) |
|
|
20
|
+
| Xcode, signing, CocoaPods, Swift packages or iOS crash logs (native iOS, or the `ios/` folder of any app) | [references/ios.md](references/ios.md) |
|
|
21
|
+
| A React Native or Expo app: Metro, native modules, JavaScript errors | [references/react-native.md](references/react-native.md) |
|
|
22
|
+
|
|
23
|
+
When `reis-mobile debug` (or `/reis-mobile:debug`) ran, its `area` line points at the layer: `gradle`, `manifest`, `proguard` → Android; `xcode`, `signing`, `cocoapods`, `spm` → iOS; `pub` → Flutter; `metro` → React Native.
|
|
24
|
+
|
|
25
|
+
## 2. Find the first real error
|
|
26
|
+
|
|
27
|
+
Build and crash logs bury the cause under cascading failures. Quote the line that starts the failure — the first `error:`, the `What went wrong` block, the top of the exception with its `Caused by` — not the final `BUILD FAILED` or the last frame. Ask for the full output when the user pasted only the end.
|
|
28
|
+
|
|
29
|
+
## 3. Collect versions before theorizing
|
|
30
|
+
|
|
31
|
+
Most build failures after an upgrade are toolchain mismatches. Read the versions that decide the behavior — the SDK and toolchain versions (the doctor report shows them), wrapper and lock files, build scripts, deployment targets — and quote them in the diagnosis. Check compatibility against the official tables named in the reference; do not state compatibility ranges from memory.
|
|
32
|
+
|
|
33
|
+
## 4. Reproduce safely
|
|
34
|
+
|
|
35
|
+
Read-only commands can run: version checks, dependency trees, `flutter doctor -v`, `./gradlew --version`, `pod --version`, `xcodebuild -version`. A build that only compiles can run when the user already ran it or agrees, since it takes time and writes build outputs.
|
|
36
|
+
|
|
37
|
+
## 5. Confirm the cause
|
|
38
|
+
|
|
39
|
+
Tie the cause to evidence: `file:line`, a version, a build setting or a log line. If two causes are plausible, say what evidence would separate them instead of picking one.
|
|
40
|
+
|
|
41
|
+
## 6. Propose, then wait
|
|
42
|
+
|
|
43
|
+
Answer with:
|
|
44
|
+
|
|
45
|
+
- **Cause** — one or two sentences, with the evidence.
|
|
46
|
+
- **Fix** — the minimal change, as a diff or exact commands, in order.
|
|
47
|
+
- **Side effects** — what else the fix changes: a higher minimum Android or iOS version, a Gradle or Kotlin upgrade that CI needs too, pods changing version.
|
|
48
|
+
- **Verify** — the command that failed, run again.
|
|
49
|
+
|
|
50
|
+
Do not edit files, upgrade dependencies or run commands that change the project, the caches or the machine — `flutter clean`, `pod install`, `pod repo update`, `npx expo prebuild --clean`, deleting `DerivedData`, `~/.gradle` caches or `node_modules` — until the user asks you to apply the fix. Then apply it, run the verification and report the result.
|
|
@@ -1,11 +1,3 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: android-gradle-build-debug
|
|
3
|
-
description: Diagnoses failing Android Gradle builds — JDK, Gradle, Android Gradle Plugin and Kotlin version mismatches, dependency resolution and duplicate classes, compileSdk and minSdk errors, manifest merger and namespace failures, kapt/KSP, R8 missing classes, signing and out-of-memory builds. Use whenever an Android, Kotlin Multiplatform, Flutter or React Native build fails in Gradle, when the log shows "What went wrong", "Execution failed for task" or "BUILD FAILED", or after upgrading AGP, Gradle, Kotlin or the JDK, even if the user only pastes the error.
|
|
4
|
-
intents: [debug, build, dependency, migration]
|
|
5
|
-
stacks: [android, kotlin-multiplatform]
|
|
6
|
-
areas: [gradle, manifest, proguard, signing]
|
|
7
|
-
---
|
|
8
|
-
|
|
9
1
|
# Android Gradle Build Debug
|
|
10
2
|
|
|
11
3
|
A Gradle failure is usually one of a few causes wearing a long stack trace. Work in this order: find the first real error, check the toolchain versions, then match the error to a section below. Confirm every cause in the build files before proposing a fix.
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# Debugging Android
|
|
2
|
+
|
|
3
|
+
## Build failures
|
|
4
|
+
|
|
5
|
+
Gradle, AGP, JDK and Kotlin mismatches, dependency resolution and duplicate classes, compileSdk and minSdk errors, manifest merger, namespace, kapt/KSP, R8 and signing: [android/gradle-build.md](android/gradle-build.md).
|
|
6
|
+
|
|
7
|
+
In Flutter and React Native apps, run Gradle from `android/` to see the full output.
|
|
8
|
+
|
|
9
|
+
## Crashes at runtime
|
|
10
|
+
|
|
11
|
+
1. **Get the stack trace.** `adb logcat -b crash` shows the crash buffer; `adb logcat *:E` all errors. Start from the first `FATAL EXCEPTION` and follow every `Caused by:` to the root.
|
|
12
|
+
2. **Deobfuscate release traces.** Stack traces from R8-minified builds show short names; retrace them with the `retrace` tool from the Android SDK command-line tools and the `mapping.txt` of that exact build (`app/build/outputs/mapping/<variant>/`). Crashlytics and Play Console do it automatically when the mapping file was uploaded.
|
|
13
|
+
3. **Match the signature:**
|
|
14
|
+
- `NullPointerException` / `lateinit property has not been initialized` → an object used before its lifecycle creates it, or after it is destroyed (a Fragment view after `onDestroyView`).
|
|
15
|
+
- `IllegalStateException: Fragment not attached to a context`, `Can not perform this action after onSaveInstanceState` → work finishing after the screen stopped; tie it to the lifecycle.
|
|
16
|
+
- `NetworkOnMainThreadException`, `Cannot access database on the main thread` → I/O on the main thread; move it to `Dispatchers.IO`.
|
|
17
|
+
- `ClassNotFoundException` / `NoSuchMethodError` only in release → R8 removed or renamed something used through reflection; add the library's keep rules.
|
|
18
|
+
- `SecurityException: Permission Denial` → a missing runtime permission, or an exported component contract mismatch.
|
|
19
|
+
- `ForegroundServiceStartNotAllowedException`, `SecurityException` for exact alarms → restrictions that depend on `targetSdk`; check the behavior changes for that API level.
|
|
20
|
+
4. **Native (C/C++) crashes** (`signal 11 (SIGSEGV)`, tombstones) need symbols: symbolize with `ndk-stack` and the unstripped libraries of that build.
|
|
21
|
+
|
|
22
|
+
## ANRs
|
|
23
|
+
|
|
24
|
+
- An ANR means the main thread was blocked for about five seconds (input) or a broadcast receiver or service ran too long.
|
|
25
|
+
- Get the main thread's stack from Play Console vitals, or from `adb bugreport` (the ANR traces are included), and look at what the main thread was waiting on: disk, network, a lock, `runBlocking`, a binder call.
|
|
26
|
+
- `StrictMode` in debug builds flags disk and network access on the main thread before it becomes an ANR.
|
|
@@ -1,11 +1,3 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: flutter-build-debug
|
|
3
|
-
description: Diagnoses failing Flutter builds by locating the layer that broke — Dart compilation, pub version solving, generated code, the Android Gradle side or the iOS Xcode and CocoaPods side — and checking the Flutter SDK, JDK, Gradle, AGP, Kotlin and deployment target versions Flutter requires. Use whenever `flutter run`, `flutter build apk/appbundle/ios/ipa`, `flutter pub get` or a Flutter CI job fails, after upgrading Flutter, or when a plugin breaks the native build, even if the user only pastes the error.
|
|
4
|
-
intents: [debug, build, dependency, migration]
|
|
5
|
-
stacks: [flutter]
|
|
6
|
-
areas: [pub, gradle, cocoapods, xcode]
|
|
7
|
-
---
|
|
8
|
-
|
|
9
1
|
# Flutter Build Debug
|
|
10
2
|
|
|
11
3
|
A Flutter build runs four toolchains in sequence: pub, the Dart compiler, Gradle for Android and Xcode with CocoaPods for iOS. The error message comes from one of them, and the fix belongs to that one. Identify the layer first.
|
|
@@ -16,8 +8,8 @@ A Flutter build runs four toolchains in sequence: pub, the Dart compiler, Gradle
|
|
|
16
8
|
|---|---|---|
|
|
17
9
|
| `version solving failed`, `Because X depends on Y` | pub | Section 3 |
|
|
18
10
|
| `lib/...dart:LINE:COL: Error:` | Dart compiler | Section 4 |
|
|
19
|
-
| `FAILURE: Build failed with an exception`, `Execution failed for task`, `Gradle task assembleDebug failed` | Android / Gradle | Section 5, then
|
|
20
|
-
| `Xcode build done` with errors, `Error (Xcode):`, `pod install` output | iOS / Xcode / CocoaPods | Section 6, then
|
|
11
|
+
| `FAILURE: Build failed with an exception`, `Execution failed for task`, `Gradle task assembleDebug failed` | Android / Gradle | Section 5, then [../android/gradle-build.md](../android/gradle-build.md) |
|
|
12
|
+
| `Xcode build done` with errors, `Error (Xcode):`, `pod install` output | iOS / Xcode / CocoaPods | Section 6, then [../ios/xcode-build.md](../ios/xcode-build.md) or [../ios/cocoapods.md](../ios/cocoapods.md) |
|
|
21
13
|
|
|
22
14
|
`flutter run -v` or `flutter build <target> -v` prints the underlying tool output when the summary is not enough.
|
|
23
15
|
|
|
@@ -48,14 +40,14 @@ Collect the versions in `android/`: Gradle in `gradle/wrapper/gradle-wrapper.pro
|
|
|
48
40
|
- [ ] `You are applying Flutter's main Gradle plugin imperatively using the apply script method` → the project uses the old `apply from: .../flutter.gradle` setup. Migrate to the declarative `plugins {}` block described in Flutter's "Deprecated imperative apply of Flutter's Gradle plugins" guide.
|
|
49
41
|
- [ ] Wrong JDK → `flutter config --jdk-dir <path>` points Flutter at a specific JDK; check `flutter doctor -v` again afterwards.
|
|
50
42
|
- [ ] A plugin requiring a higher `minSdk` or `compileSdk` → set it in `android/app/build.gradle(.kts)`. `flutter.minSdkVersion` is Flutter's default, which a plugin may exceed.
|
|
51
|
-
- For anything else in Gradle, apply
|
|
43
|
+
- For anything else in Gradle, apply [../android/gradle-build.md](../android/gradle-build.md).
|
|
52
44
|
|
|
53
45
|
## 6. iOS side
|
|
54
46
|
|
|
55
|
-
- [ ] `pod install` errors or `CocoaPods not installed` → apply
|
|
47
|
+
- [ ] `pod install` errors or `CocoaPods not installed` → apply [../ios/cocoapods.md](../ios/cocoapods.md). Run pod commands from `ios/`.
|
|
56
48
|
- [ ] `Module 'x' not found` in Xcode → open `ios/Runner.xcworkspace`, not `Runner.xcodeproj`.
|
|
57
49
|
- [ ] Deployment target conflicts → `platform :ios` in `ios/Podfile` and `IPHONEOS_DEPLOYMENT_TARGET` in the Runner project must be at least what the plugins require.
|
|
58
|
-
- [ ] Signing errors on `flutter build ipa` → apply
|
|
50
|
+
- [ ] Signing errors on `flutter build ipa` → apply [../ios/xcode-build.md](../ios/xcode-build.md).
|
|
59
51
|
|
|
60
52
|
## 7. Cleaning, with confirmation
|
|
61
53
|
|
|
@@ -1,11 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
name: flutter-errors
|
|
3
|
-
description: Diagnoses and fixes common Flutter errors. Use when encountering layout errors (RenderFlex overflow, unbounded constraints, RenderBox not laid out), scroll errors, or setState-during-build errors.
|
|
4
|
-
intents: [debug]
|
|
5
|
-
stacks: [flutter]
|
|
6
|
-
source: https://github.com/evanca/flutter-ai-rules
|
|
7
|
-
license: MIT
|
|
8
|
-
---
|
|
1
|
+
> Adapted from the `flutter-errors` skill in [evanca/flutter-ai-rules](https://github.com/evanca/flutter-ai-rules) (MIT). See `THIRD_PARTY_NOTICES.md`.
|
|
9
2
|
|
|
10
3
|
# Flutter Errors Skill
|
|
11
4
|
|
|
@@ -1,14 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
description: Fixes Flutter layout errors (overflows, unbounded constraints) using Dart and Flutter MCP tools. Use when addressing "RenderFlex overflowed", "Vertical viewport was given unbounded height", or similar layout issues.
|
|
4
|
-
metadata:
|
|
5
|
-
model: models/gemini-3.1-pro-preview
|
|
6
|
-
last_modified: Tue, 21 Apr 2026 19:45:59 GMT
|
|
7
|
-
intents: [debug]
|
|
8
|
-
stacks: [flutter]
|
|
9
|
-
source: https://github.com/flutter/skills
|
|
10
|
-
license: BSD-3-Clause
|
|
11
|
-
---
|
|
1
|
+
> Adapted from the `flutter-fix-layout-issues` skill in [flutter/skills](https://github.com/flutter/skills) (BSD-3-Clause). See `THIRD_PARTY_NOTICES.md`.
|
|
2
|
+
|
|
12
3
|
# Resolving Flutter Layout Errors
|
|
13
4
|
|
|
14
5
|
## Contents
|
|
@@ -1,14 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
description: Workflow for fixing package version conflicts. Use this when `pub get` fails due to incompatible package versions.
|
|
4
|
-
metadata:
|
|
5
|
-
model: models/gemini-3.1-pro-preview
|
|
6
|
-
last_modified: Fri, 24 Apr 2026 15:11:14 GMT
|
|
7
|
-
intents: [debug, dependency]
|
|
8
|
-
stacks: [flutter]
|
|
9
|
-
source: https://github.com/dart-lang/skills
|
|
10
|
-
license: BSD-3-Clause
|
|
11
|
-
---
|
|
1
|
+
> Adapted from the `dart-resolve-package-conflicts` skill in [dart-lang/skills](https://github.com/dart-lang/skills) (BSD-3-Clause). See `THIRD_PARTY_NOTICES.md`.
|
|
2
|
+
|
|
12
3
|
# Managing Dart Dependencies
|
|
13
4
|
|
|
14
5
|
## Contents
|
|
@@ -1,14 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
description: Uses get_runtime_errors and lsp to fetch an active stack trace, locate the failing line, apply a fix, and verify resolution via hot_reload.
|
|
4
|
-
metadata:
|
|
5
|
-
model: models/gemini-3.1-pro-preview
|
|
6
|
-
last_modified: Fri, 24 Apr 2026 15:13:22 GMT
|
|
7
|
-
intents: [debug]
|
|
8
|
-
stacks: [flutter]
|
|
9
|
-
source: https://github.com/dart-lang/skills
|
|
10
|
-
license: BSD-3-Clause
|
|
11
|
-
---
|
|
1
|
+
> Adapted from the `dart-fix-runtime-errors` skill in [dart-lang/skills](https://github.com/dart-lang/skills) (BSD-3-Clause). See `THIRD_PARTY_NOTICES.md`.
|
|
2
|
+
|
|
12
3
|
# Resolving Dart Static Analysis Errors
|
|
13
4
|
|
|
14
5
|
## Contents
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Debugging Flutter apps
|
|
2
|
+
|
|
3
|
+
Identify whether the failure happens while **building** or while **running**, then open the matching guide.
|
|
4
|
+
|
|
5
|
+
| Symptom | Guide |
|
|
6
|
+
|---|---|
|
|
7
|
+
| `flutter run` / `flutter build` fails: pub version solving, Dart compile errors, generated code, the Gradle or Xcode step | [flutter/build.md](flutter/build.md) — locates the failing layer and hands off to the native guides |
|
|
8
|
+
| `version solving failed`, incompatible package constraints | [flutter/package-conflicts.md](flutter/package-conflicts.md) |
|
|
9
|
+
| Exceptions at runtime: red screen, `Null check operator used on a null value`, `setState() called after dispose()`, assertion failures | [flutter/errors.md](flutter/errors.md) |
|
|
10
|
+
| An exception with a live app and the Dart/Flutter MCP tools available | [flutter/runtime-errors.md](flutter/runtime-errors.md) |
|
|
11
|
+
| `RenderFlex overflowed`, `unbounded height/width`, `Vertical viewport was given unbounded height` | [flutter/layout-issues.md](flutter/layout-issues.md) |
|
|
12
|
+
|
|
13
|
+
## First checks for any Flutter failure
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
flutter --version
|
|
17
|
+
flutter doctor -v # Flutter, Dart, Android toolchain and the JDK it uses, Xcode, CocoaPods
|
|
18
|
+
flutter run -v # or flutter build <target> -v, for the full underlying output
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
- A project pinned with FVM (`.fvmrc`, `.fvm/`) or asdf must run with that Flutter version, not the global one.
|
|
22
|
+
- Native failures inside `android/` follow [android.md](android.md); inside `ios/`, [ios.md](ios.md).
|
|
23
|
+
- `flutter clean` removes `build/` and `.dart_tool/`: it fixes stale outputs, not version conflicts. Propose it only after the version checks, and run it only when the user agrees.
|
|
@@ -1,11 +1,3 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: ios-cocoapods-debug
|
|
3
|
-
description: Diagnoses CocoaPods failures in iOS, Flutter and React Native projects — "could not find compatible versions", outdated spec repos, "sandbox is not in sync with the Podfile.lock", deployment target conflicts, Ruby and CocoaPods installation problems on Apple Silicon, Bundler-managed CocoaPods, post_install hooks and private spec sources. Use whenever `pod install` or `pod update` fails, when an iOS build breaks inside the Pods project, when Podfile or Podfile.lock is involved, or when the user asks whether to delete Pods or run pod update, even if they only paste the error.
|
|
4
|
-
intents: [debug, dependency, build, migration]
|
|
5
|
-
stacks: [ios]
|
|
6
|
-
areas: [cocoapods]
|
|
7
|
-
---
|
|
8
|
-
|
|
9
1
|
# iOS CocoaPods Debug
|
|
10
2
|
|
|
11
3
|
Most CocoaPods failures come from three places: the spec repository is out of date, the version constraints cannot be satisfied, or the Ruby installation running `pod` is broken. Identify which one before touching `Podfile.lock`.
|
|
@@ -44,7 +36,7 @@ In Flutter, run these from `ios/`; `flutter build ios` and `flutter run` already
|
|
|
44
36
|
## 4. Build errors inside Pods
|
|
45
37
|
|
|
46
38
|
- [ ] Pods compiled with a lower deployment target than Xcode supports (warnings like `The iOS deployment target 'IPHONEOS_DEPLOYMENT_TARGET' is set to 9.0, but the range of supported deployment target versions is ...`) → a `post_install` hook that sets the deployment target for the pod targets. Keep the existing hook content (Flutter's `flutter_additional_ios_build_settings` must stay).
|
|
47
|
-
- [ ] Script phases failing with sandbox `deny` errors after moving to Xcode 15 or later → see
|
|
39
|
+
- [ ] Script phases failing with sandbox `deny` errors after moving to Xcode 15 or later → see [xcode-build.md](xcode-build.md) (user script sandboxing); updating CocoaPods is the first step.
|
|
48
40
|
- [ ] `No such module` for a pod → the project was built as `.xcodeproj` instead of `.xcworkspace`, or the target is missing from the `Podfile`.
|
|
49
41
|
- [ ] `use_frameworks!` changes (static vs dynamic) → some pods require one mode; changing it affects every pod. Check each pod's installation notes before switching.
|
|
50
42
|
|
package/skills/{ios-xcode-build-debug/SKILL.md → mobile-debug/references/ios/xcode-build.md}
RENAMED
|
@@ -1,11 +1,3 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: ios-xcode-build-debug
|
|
3
|
-
description: Diagnoses failing iOS builds in Xcode and xcodebuild — code signing and provisioning, deployment target mismatches, "No such module", Apple Silicon simulator architecture errors, script phases failing under user script sandboxing, Swift Package Manager resolution, duplicate build outputs and errors after upgrading Xcode or Swift. Use whenever an iOS, Flutter or React Native build fails in Xcode, when the log shows "Command PhaseScriptExecution failed", "Signing for ... requires a development team", "Undefined symbols" or "BUILD FAILED", or when an archive or TestFlight upload breaks, even if the user only pastes the error.
|
|
4
|
-
intents: [debug, build, release, migration]
|
|
5
|
-
stacks: [ios]
|
|
6
|
-
areas: [xcode, signing, spm]
|
|
7
|
-
---
|
|
8
|
-
|
|
9
1
|
# iOS Xcode Build Debug
|
|
10
2
|
|
|
11
3
|
Xcode shows the last error loudly and the first one quietly. Work in this order: find the first real error, collect the versions, then match the error to a section below. Confirm every cause in the project files before proposing a fix.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Debugging iOS
|
|
2
|
+
|
|
3
|
+
## Build failures
|
|
4
|
+
|
|
5
|
+
| Symptom | Guide |
|
|
6
|
+
|---|---|
|
|
7
|
+
| Xcode or `xcodebuild` errors: signing and provisioning, deployment target, `No such module`, `Undefined symbols`, script phases and sandboxing, Swift Package Manager, errors after upgrading Xcode or Swift | [ios/xcode-build.md](ios/xcode-build.md) |
|
|
8
|
+
| `pod install` / `pod update` failures, `Podfile.lock` conflicts, Ruby and CocoaPods installation, build errors inside the Pods project | [ios/cocoapods.md](ios/cocoapods.md) |
|
|
9
|
+
|
|
10
|
+
In Flutter and React Native apps, run pod commands and open the workspace from `ios/`.
|
|
11
|
+
|
|
12
|
+
## Crashes at runtime
|
|
13
|
+
|
|
14
|
+
1. **Get the crash report.** While debugging, Xcode stops at the crash; for devices and TestFlight, use Xcode's Organizer (Crashes) or the device logs in *Devices and Simulators*. Crash reports (`.ips`) need the build's dSYM to be symbolicated; unsymbolicated frames show only addresses.
|
|
15
|
+
2. **Read the exception type and the crashed thread**, not the first frame of the main thread only.
|
|
16
|
+
3. **Match the signature:**
|
|
17
|
+
- `Fatal error: Unexpectedly found nil while unwrapping an Optional value` / `EXC_BREAKPOINT` in Swift code → a force unwrap, `try!`, `as!` or an out-of-range index on the crashed line.
|
|
18
|
+
- `EXC_BAD_ACCESS` → use of freed memory or a data race; reproduce with **Address Sanitizer** or **Thread Sanitizer** enabled in the scheme's diagnostics.
|
|
19
|
+
- `Main Thread Checker: UI API called on a background thread` → UI updated off the main actor; the Main Thread Checker diagnostic reports the exact call.
|
|
20
|
+
- `This app has crashed because it attempted to access privacy-sensitive data without a usage description` → a missing `NS...UsageDescription` key in `Info.plist`.
|
|
21
|
+
- `Terminating app due to uncaught exception 'NSInternalInconsistencyException'` in table or collection views → the data source changed without matching updates; use diffable data sources.
|
|
22
|
+
- Watchdog terminations (`0x8badf00d`) → the main thread blocked too long, often at launch.
|
|
23
|
+
4. **Crashes only in release or TestFlight** → optimization-dependent races, missing entitlements or capabilities in the distribution profile, or code under `#if DEBUG`. Reproduce with the Release configuration.
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# Debugging React Native apps
|
|
2
|
+
|
|
3
|
+
A React Native app fails in one of three layers: the JavaScript bundle (Metro), the native build (Gradle or Xcode), or at runtime. Find the layer before changing anything.
|
|
4
|
+
|
|
5
|
+
| Output contains | Layer | Next step |
|
|
6
|
+
|---|---|---|
|
|
7
|
+
| `Unable to resolve module`, `SyntaxError` in the bundle, Metro red screen before the app renders | Metro / JavaScript bundle | Section 2 |
|
|
8
|
+
| `FAILURE: Build failed with an exception`, `Execution failed for task` | Android build | [android.md](android.md) — run Gradle from `android/` |
|
|
9
|
+
| `pod install` errors, Xcode `error:` lines | iOS build | [ios.md](ios.md) — run pods from `ios/` |
|
|
10
|
+
| `TurboModuleRegistry.getEnforcing(...): 'X' could not be found`, `requireNativeComponent: 'X' was not found in the UIManager`, `The package 'X' doesn't seem to be linked` | Native module missing from the running binary | Section 3 |
|
|
11
|
+
| A red screen or LogBox error after the app renders | JavaScript runtime | Section 4 |
|
|
12
|
+
|
|
13
|
+
## 1. Versions
|
|
14
|
+
|
|
15
|
+
- `npx react-native info` (or `npx expo-doctor` in Expo projects): React Native, Node, Java, Xcode, CocoaPods and package versions in one place.
|
|
16
|
+
- React Native, the Expo SDK and native libraries must be versions that support each other; check each library's compatibility notes. After a React Native upgrade, compare native file changes with the React Native Upgrade Helper for the two versions.
|
|
17
|
+
- Check whether the New Architecture is enabled (`newArchEnabled` in `android/gradle.properties`, the Podfile or `app.json`) before debugging a native module: older libraries may not support it.
|
|
18
|
+
|
|
19
|
+
## 2. Metro and the JavaScript bundle
|
|
20
|
+
|
|
21
|
+
- `Unable to resolve module X` → the package is not installed, the import path is wrong, or Metro's cache is stale after installing. Check `package.json` and the path first; then restart Metro with a clean cache (`npx react-native start --reset-cache`, or `npx expo start -c`).
|
|
22
|
+
- Monorepos and symlinked packages need `watchFolders` and resolver settings in `metro.config.js`.
|
|
23
|
+
- `Invariant Violation: "main" has not been registered` → the bundle failed to load earlier (read the first error in the Metro terminal), or the name in `AppRegistry.registerComponent` differs from the native side.
|
|
24
|
+
|
|
25
|
+
## 3. Native module not found
|
|
26
|
+
|
|
27
|
+
The JavaScript side expects a native module that the installed binary does not contain.
|
|
28
|
+
|
|
29
|
+
- The app was not rebuilt after installing a library with native code: rebuild (`npx react-native run-android` / `run-ios`, or a new development build with Expo).
|
|
30
|
+
- Expo Go only contains the Expo SDK's modules; libraries with other native code need a development build.
|
|
31
|
+
- iOS: `pod install` did not run after installing the library.
|
|
32
|
+
- The library does not support the architecture the app runs (New Architecture vs legacy); check its documentation.
|
|
33
|
+
|
|
34
|
+
## 4. JavaScript runtime errors
|
|
35
|
+
|
|
36
|
+
- Read the component stack in LogBox, not only the message. `undefined is not an object (evaluating 'x.y')` and `Cannot read property 'y' of undefined` point to data that has not loaded yet or a changed API response; handle loading and error states.
|
|
37
|
+
- `Rendered more hooks than during the previous render` → a hook called conditionally.
|
|
38
|
+
- `Maximum update depth exceeded` → a state update inside render or an effect whose dependencies change on every render.
|
|
39
|
+
- Release-only crashes: stack traces from Hermes release bundles need the source maps of that build to map back to source files; check that source maps are generated and uploaded to the crash reporter. Also check `__DEV__`-only code and environment variables missing from the release configuration.
|
|
40
|
+
|
|
41
|
+
## Cleaning, with confirmation
|
|
42
|
+
|
|
43
|
+
These fix stale caches, not version conflicts. Propose them with what they delete, and run them only when the user agrees: restarting Metro with `--reset-cache`, `watchman watch-del-all`, deleting `node_modules` and reinstalling, `./gradlew clean` in `android/`, removing `ios/Pods` and running `pod install`. In Expo projects with Continuous Native Generation, `npx expo prebuild --clean` regenerates `android/` and `ios/` and discards manual native changes; confirm that the project does not rely on them first.
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: mobile-flutter
|
|
3
|
+
description: Builds Flutter apps with guides for everything specific to Flutter and Dart — layouts, responsive UI, forms, animations, theming, declarative routing with go_router, widget previews and home screen widgets; HTTP, JSON serialization, local databases and caching; plugins, platform channels and native views; isolates and app size; accessibility and localization; Effective Dart, Dart 3 features and pattern matching; and macOS setup. Use when writing or changing Flutter UI, data or native integration code, or when the user asks how to do something in Flutter, even if they do not name the topic.
|
|
4
|
+
intents: [review, performance, accessibility, migration]
|
|
5
|
+
stacks: [flutter]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Mobile Flutter
|
|
9
|
+
|
|
10
|
+
Guides for building Flutter apps. Cross-platform topics live in their own skills and have Flutter references there: architecture and state management in `mobile-architecture`, tests in `mobile-test`, debugging 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, layout and navigation | [references/ui.md](references/ui.md) |
|
|
17
|
+
| Data and networking | [references/data.md](references/data.md) |
|
|
18
|
+
| Native code and plugins | [references/native.md](references/native.md) |
|
|
19
|
+
| Performance and size | [references/performance.md](references/performance.md) |
|
|
20
|
+
| Accessibility and internationalization | [references/accessibility-i18n.md](references/accessibility-i18n.md) |
|
|
21
|
+
| Dart language | [references/dart.md](references/dart.md) |
|
|
22
|
+
| Environment | [references/setup.md](references/setup.md) |
|
|
23
|
+
|
|
24
|
+
Each topic file lists its guides; open only the ones the task needs.
|
|
25
|
+
|
|
26
|
+
## Before writing code
|
|
27
|
+
|
|
28
|
+
- Follow the project: its state management, folder structure, lints and packages already in `pubspec.yaml`.
|
|
29
|
+
- Check the Flutter and Dart versions in `pubspec.lock` before using newer APIs; guides may describe features that a pinned SDK does not have.
|
|
30
|
+
- Prefer packages the project already depends on over adding new ones; when adding one, check that it supports every platform the app targets.
|