reis-mobile 0.3.6 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +2 -2
- package/.claude-plugin/plugin.json +1 -1
- package/CHANGELOG.md +39 -0
- package/README.md +135 -297
- package/THIRD_PARTY_NOTICES.md +221 -4
- package/agents/android-architect.md +89 -0
- package/agents/android-performance-engineer.md +92 -0
- package/agents/android-test-engineer.md +97 -0
- package/agents/flutter-test-engineer.md +2 -0
- package/agents/ios-architect.md +93 -0
- package/agents/ios-performance-engineer.md +92 -0
- package/agents/ios-test-engineer.md +95 -0
- package/agents/lead-mobile.md +10 -1
- package/agents/mobile-code-reviewer.md +2 -0
- package/agents/mobile-staff-engineer.md +1 -1
- package/agents/rn-architect.md +94 -0
- package/agents/rn-performance-engineer.md +92 -0
- package/agents/rn-test-engineer.md +98 -0
- package/bin/reis-mobile.mjs +59 -17
- package/commands/debate.md +10 -1
- package/commands/debug.md +60 -0
- package/commands/reis-mobile.md +7 -2
- package/core/config/project.mjs +59 -0
- package/core/registry/frontmatter.mjs +15 -4
- package/core/registry/registry.mjs +28 -1
- package/core/router/intents.mjs +2 -0
- package/core/router/router.mjs +10 -5
- package/package.json +24 -3
- package/skills/mobile-android/SKILL.md +29 -0
- package/skills/mobile-android/references/build-and-performance/agp-9-upgrade/GUIDE.md +87 -0
- package/skills/mobile-android/references/build-and-performance/agp-9-upgrade/references/android/build/migrate-to-built-in-kotlin.md +416 -0
- package/skills/mobile-android/references/build-and-performance/agp-9-upgrade/references/android/build/releases/agp-9-0-0-release-notes.md +554 -0
- package/skills/mobile-android/references/build-and-performance/agp-9-upgrade/references/buildconfig.md +54 -0
- package/skills/mobile-android/references/build-and-performance/agp-9-upgrade/references/ksp-kapt.md +39 -0
- package/skills/mobile-android/references/build-and-performance/agp-9-upgrade/references/paparazzi-gradle-9.md +30 -0
- package/skills/mobile-android/references/build-and-performance/agp-9-upgrade/references/recipes.md +62 -0
- package/skills/mobile-android/references/build-and-performance/android-cli/GUIDE.md +450 -0
- package/skills/mobile-android/references/build-and-performance/android-cli/references/interact.md +113 -0
- package/skills/mobile-android/references/build-and-performance/android-cli/references/journeys.md +120 -0
- package/skills/mobile-android/references/build-and-performance/android-profiler/GUIDE.md +34 -0
- package/skills/mobile-android/references/build-and-performance/android-profiler/analysis/analysis_orchestrator.md +32 -0
- package/skills/mobile-android/references/build-and-performance/android-profiler/analysis/workflows/perfetto-sql/perfetto_sql.md +28 -0
- package/skills/mobile-android/references/build-and-performance/android-profiler/analysis/workflows/perfetto-trace-analysis/perfetto_trace_analysis.md +121 -0
- package/skills/mobile-android/references/build-and-performance/android-profiler/analysis/workflows/perfetto-trace-analysis/references/guiding_principles.md +51 -0
- package/skills/mobile-android/references/build-and-performance/android-profiler/analysis/workflows/perfetto-trace-analysis/references/hints/domain_hints_template.md +7 -0
- package/skills/mobile-android/references/build-and-performance/android-profiler/analysis/workflows/perfetto-trace-analysis/references/hints/subsystems/hints_cpu.md +56 -0
- package/skills/mobile-android/references/build-and-performance/android-profiler/analysis/workflows/perfetto-trace-analysis/references/hints/subsystems/hints_graphics.md +51 -0
- package/skills/mobile-android/references/build-and-performance/android-profiler/analysis/workflows/perfetto-trace-analysis/references/hints/subsystems/hints_io.md +46 -0
- package/skills/mobile-android/references/build-and-performance/android-profiler/analysis/workflows/perfetto-trace-analysis/references/hints/subsystems/hints_ipc.md +41 -0
- package/skills/mobile-android/references/build-and-performance/android-profiler/analysis/workflows/perfetto-trace-analysis/references/hints/subsystems/hints_memory.md +55 -0
- package/skills/mobile-android/references/build-and-performance/android-profiler/analysis/workflows/perfetto-trace-analysis/references/hints/subsystems/hints_power.md +33 -0
- package/skills/mobile-android/references/build-and-performance/android-profiler/analysis/workflows/perfetto-trace-analysis/references/per_candidate_analysis.md +172 -0
- package/skills/mobile-android/references/build-and-performance/android-profiler/analysis/workflows/perfetto-trace-analysis/references/triage.md +94 -0
- package/skills/mobile-android/references/build-and-performance/android-profiler/recording/recording_orchestrator.md +36 -0
- package/skills/mobile-android/references/build-and-performance/android-profiler/recording/workflows/perfetto-trace-recording/perfetto_trace_recording.md +148 -0
- package/skills/mobile-android/references/build-and-performance/android-profiler/recording/workflows/perfetto-trace-recording/references/example-configs/app_jank.pftxt +43 -0
- package/skills/mobile-android/references/build-and-performance/android-profiler/recording/workflows/perfetto-trace-recording/references/example-configs/cpu_profile.pftxt +35 -0
- package/skills/mobile-android/references/build-and-performance/android-profiler/recording/workflows/perfetto-trace-recording/references/example-configs/java_heap_dump.pftxt +21 -0
- package/skills/mobile-android/references/build-and-performance/android-profiler/recording/workflows/perfetto-trace-recording/references/example-configs/long_background.pftxt +37 -0
- package/skills/mobile-android/references/build-and-performance/android-profiler/recording/workflows/perfetto-trace-recording/references/example-configs/memory_counters.pftxt +45 -0
- package/skills/mobile-android/references/build-and-performance/android-profiler/recording/workflows/perfetto-trace-recording/references/example-configs/native_heap.pftxt +21 -0
- package/skills/mobile-android/references/build-and-performance/android-profiler/recording/workflows/perfetto-trace-recording/references/example-configs/sched_cpu.pftxt +33 -0
- package/skills/mobile-android/references/build-and-performance/android-profiler/recording/workflows/perfetto-trace-recording/references/trace_config_reference.md +102 -0
- package/skills/mobile-android/references/build-and-performance/android-profiler/references/env_setup.md +15 -0
- package/skills/mobile-android/references/build-and-performance/android-profiler/references/perfetto/setup.md +29 -0
- package/skills/mobile-android/references/build-and-performance/android-profiler/references/perfetto/sql.md +327 -0
- package/skills/mobile-android/references/build-and-performance/r8-analyzer/GUIDE.md +53 -0
- package/skills/mobile-android/references/build-and-performance/r8-analyzer/references/CONFIGURATION-ANALYZER.md +287 -0
- package/skills/mobile-android/references/build-and-performance/r8-analyzer/references/CONFIGURATION.md +44 -0
- package/skills/mobile-android/references/build-and-performance/r8-analyzer/references/KEEP-RULES-IMPACT-HIERARCHY.md +83 -0
- package/skills/mobile-android/references/build-and-performance/r8-analyzer/references/REDUNDANT-RULES.md +222 -0
- package/skills/mobile-android/references/build-and-performance/r8-analyzer/references/REFLECTION-GUIDE.md +139 -0
- package/skills/mobile-android/references/build-and-performance/r8-analyzer/references/REPORT_FORMAT.md +51 -0
- package/skills/mobile-android/references/build-and-performance/r8-analyzer/references/android/topic/performance/app-optimization/enable-app-optimization.md +252 -0
- package/skills/mobile-android/references/build-and-performance/r8-analyzer/references/android/training/testing/other-components/ui-automator.md +312 -0
- package/skills/mobile-android/references/build-and-performance.md +12 -0
- package/skills/mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer/GUIDE.md +317 -0
- package/skills/mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer/references/android/design/ui/ai-glasses/guides/interaction/inputs.md +67 -0
- package/skills/mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer/references/android/develop/xr/jetpack-xr-sdk/access-hardware-projected-context.md +388 -0
- package/skills/mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer/references/android/develop/xr/jetpack-xr-sdk/jetpack-compose-glimmer/buttons.md +139 -0
- package/skills/mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer/references/android/develop/xr/jetpack-xr-sdk/jetpack-compose-glimmer/cards.md +148 -0
- package/skills/mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer/references/android/develop/xr/jetpack-xr-sdk/jetpack-compose-glimmer/focus.md +107 -0
- package/skills/mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer/references/android/develop/xr/jetpack-xr-sdk/jetpack-compose-glimmer/icons.md +90 -0
- package/skills/mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer/references/android/develop/xr/jetpack-xr-sdk/jetpack-compose-glimmer/text.md +69 -0
- package/skills/mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer/references/android/develop/xr/jetpack-xr-sdk/jetpack-compose-glimmer/title-chips.md +82 -0
- package/skills/mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer/references/android/develop/xr/jetpack-xr-sdk/request-hardware-permissions.md +213 -0
- package/skills/mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer/references/button-samples-source.md +176 -0
- package/skills/mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer/references/button-source.md +203 -0
- package/skills/mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer/references/card-samples-source.md +296 -0
- package/skills/mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer/references/card-source.md +515 -0
- package/skills/mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer/references/deptheffect-source.md +224 -0
- package/skills/mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer/references/deptheffectlevels-source.md +105 -0
- package/skills/mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer/references/glimmersansflextypography-source.md +270 -0
- package/skills/mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer/references/glimmertheme-source.md +182 -0
- package/skills/mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer/references/icon-source.md +388 -0
- package/skills/mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer/references/iconbutton-source.md +126 -0
- package/skills/mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer/references/iconsizes-source.md +78 -0
- package/skills/mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer/references/list-source.md +27 -0
- package/skills/mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer/references/listitem-source.md +272 -0
- package/skills/mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer/references/liststate-source.md +427 -0
- package/skills/mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer/references/material-hct-source.md +217 -0
- package/skills/mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer/references/projectedcontext-source.md +265 -0
- package/skills/mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer/references/stack-source.md +368 -0
- package/skills/mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer/references/stackitemscope-source.md +440 -0
- package/skills/mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer/references/stackstate-source.md +325 -0
- package/skills/mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer/references/surface-source.md +1211 -0
- package/skills/mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer/references/titlechip-samples-source.md +101 -0
- package/skills/mobile-android/references/devices/display-glasses-with-jetpack-compose-glimmer/references/titlechip-source.md +131 -0
- package/skills/mobile-android/references/devices/leanback-to-compose-tv-migration/GUIDE.md +707 -0
- package/skills/mobile-android/references/devices/leanback-to-compose-tv-migration/references/android/training/tv/get-started/navigation.md +372 -0
- package/skills/mobile-android/references/devices/leanback-to-compose-tv-migration/references/android/training/tv/playback/compose/browse.md +243 -0
- package/skills/mobile-android/references/devices/leanback-to-compose-tv-migration/references/android/training/tv/playback/compose/index.md +153 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/GUIDE.md +341 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/android/training/wearables/compose/migrate-to-material3.md +677 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/foundation/AmbientModeSample.kt.md +123 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/foundation/AmbientModeSample.kt.md.txt +123 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/foundation/CurvedWorldSample.kt.md +430 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/foundation/CurvedWorldSample.kt.md.txt +430 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/foundation/ExpandableSample.kt.md +99 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/foundation/ExpandableSample.kt.md.txt +99 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/foundation/HierarchicalFocusSample.kt.md +141 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/foundation/HierarchicalFocusSample.kt.md.txt +141 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/foundation/PagerSamples.kt.md +56 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/foundation/PagerSamples.kt.md.txt +56 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/foundation/RotarySamples.kt.md +153 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/foundation/RotarySamples.kt.md.txt +153 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/foundation/ScalingLazyColumnSample.kt.md +131 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/foundation/ScalingLazyColumnSample.kt.md.txt +131 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/foundation/SwipeToDismissBoxSample.kt.md +169 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/foundation/SwipeToDismissBoxSample.kt.md.txt +169 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/foundation/SwipeToRevealSample.kt.md +282 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/foundation/SwipeToRevealSample.kt.md.txt +282 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/foundation/TransformingLazyColumnSample.kt.md +335 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/foundation/TransformingLazyColumnSample.kt.md.txt +335 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/AlertDialogSample.kt.md +377 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/AlertDialogSample.kt.md.txt +377 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/AnimatedTextSample.kt.md +165 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/AnimatedTextSample.kt.md.txt +165 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/ButtonGroupSample.kt.md +91 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/ButtonGroupSample.kt.md.txt +91 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/ButtonSample.kt.md +496 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/ButtonSample.kt.md.txt +496 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/CardSample.kt.md +470 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/CardSample.kt.md.txt +470 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/CheckboxButtonSample.kt.md +67 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/CheckboxButtonSample.kt.md.txt +67 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/ConfirmationDialogSample.kt.md +162 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/ConfirmationDialogSample.kt.md.txt +162 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/CurvedTextSamples.kt.md +78 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/CurvedTextSamples.kt.md.txt +78 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/DatePickerSample.kt.md +131 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/DatePickerSample.kt.md.txt +131 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/DynamicColorSchemeSample.kt.md +74 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/DynamicColorSchemeSample.kt.md.txt +74 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/EdgeButtonSample.kt.md +63 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/EdgeButtonSample.kt.md.txt +63 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/FadingExpandingLabelSample.kt.md +60 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/FadingExpandingLabelSample.kt.md.txt +60 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/IconButtonSample.kt.md +125 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/IconButtonSample.kt.md.txt +125 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/IconToggleButtonSample.kt.md +116 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/IconToggleButtonSample.kt.md.txt +116 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/LevelIndicatorSample.kt.md +68 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/LevelIndicatorSample.kt.md.txt +68 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/LinearProgressIndicatorSample.kt.md +50 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/LinearProgressIndicatorSample.kt.md.txt +50 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/ListHeaderSample.kt.md +177 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/ListHeaderSample.kt.md.txt +177 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/OneHandedGestureSamples.kt.md +651 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/OneHandedGestureSamples.kt.md.txt +651 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/OpenOnPhoneDialogSample.kt.md +57 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/OpenOnPhoneDialogSample.kt.md.txt +57 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/PageIndicatorSample.kt.md +110 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/PageIndicatorSample.kt.md.txt +110 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/PagerScaffoldSample.kt.md +204 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/PagerScaffoldSample.kt.md.txt +204 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/PickerGroupSample.kt.md +139 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/PickerGroupSample.kt.md.txt +139 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/PickerSample.kt.md +111 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/PickerSample.kt.md.txt +111 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/PlaceholderSample.kt.md +184 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/PlaceholderSample.kt.md.txt +184 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/ProgressIndicatorSample.kt.md +263 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/ProgressIndicatorSample.kt.md.txt +263 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/RadioButtonSample.kt.md +105 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/RadioButtonSample.kt.md.txt +105 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/ScaffoldSample.kt.md +146 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/ScaffoldSample.kt.md.txt +146 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/ScrollAwaySample.kt.md +97 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/ScrollAwaySample.kt.md.txt +97 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/ScrollIndicatorSample.kt.md +66 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/ScrollIndicatorSample.kt.md.txt +66 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/SliderSample.kt.md +86 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/SliderSample.kt.md.txt +86 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/StepperSample.kt.md +148 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/StepperSample.kt.md.txt +148 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/SurfaceTransformationSample.kt.md +166 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/SurfaceTransformationSample.kt.md.txt +166 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/SwipeToDismissBoxSample.kt.md +172 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/SwipeToDismissBoxSample.kt.md.txt +172 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/SwipeToRevealSample.kt.md +367 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/SwipeToRevealSample.kt.md.txt +367 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/SwitchButtonSample.kt.md +66 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/SwitchButtonSample.kt.md.txt +66 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/TextButtonSample.kt.md +115 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/TextButtonSample.kt.md.txt +115 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/TextToggleButtonSample.kt.md +71 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/TextToggleButtonSample.kt.md.txt +71 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/TimePickerSample.kt.md +151 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/TimePickerSample.kt.md.txt +151 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/TimeTextSample.kt.md +65 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/TimeTextSample.kt.md.txt +65 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/TransformationSpecSample.kt.md +246 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/TransformationSpecSample.kt.md.txt +246 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/TransformingLazyColumnNotificationsSample.kt.md +89 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/TransformingLazyColumnNotificationsSample.kt.md.txt +89 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/TransformingLazyColumnSample.kt.md +309 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/material3/TransformingLazyColumnSample.kt.md.txt +309 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/navigation3/SwipeDismissableSceneStrategySample.kt.md +205 -0
- package/skills/mobile-android/references/devices/wear-compose-m3/references/navigation3/SwipeDismissableSceneStrategySample.kt.md.txt +205 -0
- package/skills/mobile-android/references/devices.md +11 -0
- package/skills/mobile-android/references/identity/restore-credentials/GUIDE.md +337 -0
- package/skills/mobile-android/references/identity/restore-credentials/references/android/guide/topics/manifest/application-element.md +832 -0
- package/skills/mobile-android/references/identity/restore-credentials/references/android/identity/passkeys/create-passkeys.md +327 -0
- package/skills/mobile-android/references/identity/restore-credentials/references/android/identity/passkeys/sign-in-with-passkeys.md +219 -0
- package/skills/mobile-android/references/identity/verified-email/GUIDE.md +405 -0
- package/skills/mobile-android/references/identity/verified-email/references/android/identity/credential-manager/index.md +67 -0
- package/skills/mobile-android/references/identity/verified-email/references/android/identity/digital-credentials/credential-verifier.md +166 -0
- package/skills/mobile-android/references/identity/verified-email/references/android/identity/digital-credentials/email-verification-implementation.md +313 -0
- package/skills/mobile-android/references/identity/verified-email/references/android/identity/digital-credentials/email-verification.md +158 -0
- package/skills/mobile-android/references/identity/verified-email/references/android/identity/digital-credentials/index.md +112 -0
- package/skills/mobile-android/references/identity/verified-email/references/android/identity/passkeys/create-passkeys.md +327 -0
- package/skills/mobile-android/references/identity/verified-email/references/android/identity/sign-in/credential-manager-webview.md +84 -0
- package/skills/mobile-android/references/identity.md +10 -0
- package/skills/mobile-android/references/media/camerax/GUIDE.md +106 -0
- package/skills/mobile-android/references/media/camerax/references/camera1-to-camerax.md +198 -0
- package/skills/mobile-android/references/media/camerax/references/camera2-to-camerax.md +193 -0
- package/skills/mobile-android/references/media/camerax/references/expert-blueprints.md +58 -0
- package/skills/mobile-android/references/media/camerax/references/foldables.md +83 -0
- package/skills/mobile-android/references/media/camerax/references/immutability.md +60 -0
- package/skills/mobile-android/references/media/camerax/references/low-light.md +124 -0
- package/skills/mobile-android/references/media/camerax/references/mlkit-spatial.md +75 -0
- package/skills/mobile-android/references/media/camerax/references/modern-apis.md +42 -0
- package/skills/mobile-android/references/media/camerax/references/testing.md +69 -0
- package/skills/mobile-android/references/media/camerax/references/thermals.md +85 -0
- package/skills/mobile-android/references/media/camerax/references/wear-os.md +76 -0
- package/skills/mobile-android/references/media/camerax/references/xr.md +54 -0
- package/skills/mobile-android/references/media/media3-cast-integration/GUIDE.md +213 -0
- package/skills/mobile-android/references/media/media3-cast-integration/references/android/media/media3/cast/create-castplayer.md +390 -0
- package/skills/mobile-android/references/media/media3-cast-integration/references/android/media/media3/cast/customize-castoptions.md +93 -0
- package/skills/mobile-android/references/media/media3-cast-integration/references/android/media/media3/cast/index.md +21 -0
- package/skills/mobile-android/references/media.md +10 -0
- package/skills/mobile-android/references/on-device-ai/appfunctions/GUIDE.md +51 -0
- package/skills/mobile-android/references/on-device-ai/appfunctions/references/adb-interaction-testing.md +95 -0
- package/skills/mobile-android/references/on-device-ai/appfunctions/references/context.md +26 -0
- package/skills/mobile-android/references/on-device-ai/appfunctions/references/feature-discovery-analysis.md +71 -0
- package/skills/mobile-android/references/on-device-ai/appfunctions/references/implementation-configuration.md +282 -0
- package/skills/mobile-android/references/on-device-ai/appfunctions/references/kdoc-refinement-optimization.md +75 -0
- package/skills/mobile-android/references/on-device-ai/appfunctions/references/migrate-to-service-entry-point.md +226 -0
- package/skills/mobile-android/references/on-device-ai/ml-kit-genai-prompt-api/GUIDE.md +105 -0
- package/skills/mobile-android/references/on-device-ai/ml-kit-genai-prompt-api/references/get-started.md +272 -0
- package/skills/mobile-android/references/on-device-ai/ml-kit-genai-prompt-api/references/prefix-caching.md +146 -0
- package/skills/mobile-android/references/on-device-ai/ml-kit-genai-prompt-api/references/prompt-design.md +55 -0
- package/skills/mobile-android/references/on-device-ai/ml-kit-genai-prompt-api/references/prompt-optimization.md +74 -0
- package/skills/mobile-android/references/on-device-ai/ml-kit-genai-prompt-api/references/structured-output.md +219 -0
- package/skills/mobile-android/references/on-device-ai/ml-kit-genai-prompt-api/references/system-instructions.md +71 -0
- package/skills/mobile-android/references/on-device-ai.md +10 -0
- package/skills/mobile-android/references/play/engage-sdk-integration/GUIDE.md +112 -0
- package/skills/mobile-android/references/play/engage-sdk-integration/references/android/guide/playcore/engage/faq.md +439 -0
- package/skills/mobile-android/references/play/engage-sdk-integration/references/android/guide/playcore/engage/food.md +1149 -0
- package/skills/mobile-android/references/play/engage-sdk-integration/references/android/guide/playcore/engage/healthandfitness.md +1055 -0
- package/skills/mobile-android/references/play/engage-sdk-integration/references/android/guide/playcore/engage/listen.md +1050 -0
- package/skills/mobile-android/references/play/engage-sdk-integration/references/android/guide/playcore/engage/otherverticals.md +1301 -0
- package/skills/mobile-android/references/play/engage-sdk-integration/references/android/guide/playcore/engage/read.md +910 -0
- package/skills/mobile-android/references/play/engage-sdk-integration/references/android/guide/playcore/engage/shopping.md +1224 -0
- package/skills/mobile-android/references/play/engage-sdk-integration/references/android/guide/playcore/engage/social.md +719 -0
- package/skills/mobile-android/references/play/engage-sdk-integration/references/android/guide/playcore/engage/travel.md +1413 -0
- package/skills/mobile-android/references/play/engage-sdk-integration/references/android/guide/playcore/engage/tv/continue-watching/index.md +19 -0
- package/skills/mobile-android/references/play/engage-sdk-integration/references/android/guide/playcore/engage/tv/entitlements.md +353 -0
- package/skills/mobile-android/references/play/engage-sdk-integration/references/android/guide/playcore/engage/tv/getting-started.md +202 -0
- package/skills/mobile-android/references/play/engage-sdk-integration/references/android/guide/playcore/engage/tv/recommendations.md +471 -0
- package/skills/mobile-android/references/play/engage-sdk-integration/references/android/guide/playcore/engage/watch.md +1081 -0
- package/skills/mobile-android/references/play/engage-sdk-integration/references/clusters.md +154 -0
- package/skills/mobile-android/references/play/engage-sdk-integration/references/common.md +519 -0
- package/skills/mobile-android/references/play/engage-sdk-integration/references/patterns.md +527 -0
- package/skills/mobile-android/references/play/engage-sdk-integration/references/requests.md +260 -0
- package/skills/mobile-android/references/play/engage-sdk-integration/references/schemas/food.md +509 -0
- package/skills/mobile-android/references/play/engage-sdk-integration/references/schemas/listen.md +842 -0
- package/skills/mobile-android/references/play/engage-sdk-integration/references/schemas/other.md +220 -0
- package/skills/mobile-android/references/play/engage-sdk-integration/references/schemas/read.md +412 -0
- package/skills/mobile-android/references/play/engage-sdk-integration/references/schemas/shopping.md +357 -0
- package/skills/mobile-android/references/play/engage-sdk-integration/references/schemas/social.md +228 -0
- package/skills/mobile-android/references/play/engage-sdk-integration/references/schemas/travel.md +923 -0
- package/skills/mobile-android/references/play/engage-sdk-integration/references/schemas/tv.md +1226 -0
- package/skills/mobile-android/references/play/engage-sdk-integration/references/schemas/watch.md +1137 -0
- package/skills/mobile-android/references/play/engage-sdk-integration/references/troubleshooting.md +39 -0
- package/skills/mobile-android/references/play/play-billing-library-version-upgrade/GUIDE.md +75 -0
- package/skills/mobile-android/references/play/play-billing-library-version-upgrade/references/android/google/play/billing/release-notes.md +1240 -0
- package/skills/mobile-android/references/play/play-billing-library-version-upgrade/references/migration-logic.md +78 -0
- package/skills/mobile-android/references/play/play-billing-library-version-upgrade/references/version-checklist.md +54 -0
- package/skills/mobile-android/references/play/play-policy-insights/GUIDE.md +130 -0
- package/skills/mobile-android/references/play/play-policy-insights/resources/common_mandates.md +100 -0
- package/skills/mobile-android/references/play/play-policy-insights/resources/compliance_report_template.md +59 -0
- package/skills/mobile-android/references/play/play-policy-insights/resources/critic.md +86 -0
- package/skills/mobile-android/references/play/play-policy-insights/resources/goal_data_safety.md +212 -0
- package/skills/mobile-android/references/play/play-policy-insights/resources/goal_permissions_and_apis.md +459 -0
- package/skills/mobile-android/references/play/play-policy-insights/resources/goal_user_account.md +106 -0
- package/skills/mobile-android/references/play/play-policy-insights/resources/policies.json +321 -0
- package/skills/mobile-android/references/play/play-policy-insights/resources/scanner_config.json +843 -0
- package/skills/mobile-android/references/play/play-policy-insights/scripts/generate_report.py +860 -0
- package/skills/mobile-android/references/play/play-policy-insights/scripts/orchestrator.py +1313 -0
- package/skills/mobile-android/references/play/play-policy-insights/scripts/play_store_scraper.py +410 -0
- package/skills/mobile-android/references/play/play-policy-insights/scripts/scanner.py +261 -0
- package/skills/mobile-android/references/play/play-policy-insights/scripts/template_engine.py +243 -0
- package/skills/mobile-android/references/play.md +11 -0
- package/skills/mobile-android/references/ui/adaptive/GUIDE.md +280 -0
- package/skills/mobile-android/references/ui/adaptive/references/android/develop/ui/compose/layouts/adaptive/flexbox/container-behavior.md +112 -0
- package/skills/mobile-android/references/ui/adaptive/references/android/develop/ui/compose/layouts/adaptive/flexbox/get-started.md +69 -0
- package/skills/mobile-android/references/ui/adaptive/references/android/develop/ui/compose/layouts/adaptive/flexbox/index.md +81 -0
- package/skills/mobile-android/references/ui/adaptive/references/android/develop/ui/compose/layouts/adaptive/flexbox/item-behavior.md +170 -0
- package/skills/mobile-android/references/ui/adaptive/references/android/develop/ui/compose/layouts/adaptive/grid/container-properties.md +415 -0
- package/skills/mobile-android/references/ui/adaptive/references/android/develop/ui/compose/layouts/adaptive/grid/get-started.md +51 -0
- package/skills/mobile-android/references/ui/adaptive/references/android/develop/ui/compose/layouts/adaptive/grid/index.md +73 -0
- package/skills/mobile-android/references/ui/adaptive/references/android/develop/ui/compose/layouts/adaptive/grid/item-properties.md +170 -0
- package/skills/mobile-android/references/ui/adaptive/references/android/develop/ui/compose/layouts/adaptive/mediaquery/index.md +333 -0
- package/skills/mobile-android/references/ui/adaptive/references/android/develop/ui/compose/tooling/debug.md +114 -0
- package/skills/mobile-android/references/ui/adaptive/references/android/guide/navigation/navigation-3/recipes/material-listdetail.md +141 -0
- package/skills/mobile-android/references/ui/edge-to-edge/GUIDE.md +409 -0
- package/skills/mobile-android/references/ui/migrate-xml-views-to-jetpack-compose/GUIDE.md +104 -0
- package/skills/mobile-android/references/ui/migrate-xml-views-to-jetpack-compose/references/analysis-of-the-project-and-layout.md +42 -0
- package/skills/mobile-android/references/ui/migrate-xml-views-to-jetpack-compose/references/android/develop/ui/compose/designsystems/migrate-xml-theme-to-compose.md +171 -0
- package/skills/mobile-android/references/ui/migrate-xml-views-to-jetpack-compose/references/android/develop/ui/compose/migrate/interoperability-apis/compose-in-views.md +299 -0
- package/skills/mobile-android/references/ui/migrate-xml-views-to-jetpack-compose/references/android/develop/ui/compose/migrate/interoperability-apis/views-in-compose.md +286 -0
- package/skills/mobile-android/references/ui/migrate-xml-views-to-jetpack-compose/references/android/develop/ui/compose/setup-compose-dependencies-and-compiler.md +197 -0
- package/skills/mobile-android/references/ui/migrate-xml-views-to-jetpack-compose/references/identify-optimal-xml-candidate.md +31 -0
- package/skills/mobile-android/references/ui/migrate-xml-views-to-jetpack-compose/references/xml-layout-migration.md +86 -0
- package/skills/mobile-android/references/ui/navigation-3/GUIDE.md +86 -0
- package/skills/mobile-android/references/ui/navigation-3/references/android/guide/navigation/navigation-3/index.md +51 -0
- package/skills/mobile-android/references/ui/navigation-3/references/android/guide/navigation/navigation-3/migration-guide.md +670 -0
- package/skills/mobile-android/references/ui/navigation-3/references/android/guide/navigation/navigation-3/recipes/animations.md +147 -0
- package/skills/mobile-android/references/ui/navigation-3/references/android/guide/navigation/navigation-3/recipes/basic.md +89 -0
- package/skills/mobile-android/references/ui/navigation-3/references/android/guide/navigation/navigation-3/recipes/basicdsl.md +85 -0
- package/skills/mobile-android/references/ui/navigation-3/references/android/guide/navigation/navigation-3/recipes/basicsaveable.md +90 -0
- package/skills/mobile-android/references/ui/navigation-3/references/android/guide/navigation/navigation-3/recipes/bottomsheet.md +195 -0
- package/skills/mobile-android/references/ui/navigation-3/references/android/guide/navigation/navigation-3/recipes/common-ui.md +200 -0
- package/skills/mobile-android/references/ui/navigation-3/references/android/guide/navigation/navigation-3/recipes/conditional-transitions.md +182 -0
- package/skills/mobile-android/references/ui/navigation-3/references/android/guide/navigation/navigation-3/recipes/conditional.md +230 -0
- package/skills/mobile-android/references/ui/navigation-3/references/android/guide/navigation/navigation-3/recipes/deeplinks-custommatcher.md +176 -0
- package/skills/mobile-android/references/ui/navigation-3/references/android/guide/navigation/navigation-3/recipes/deeplinks-staticuri.md +140 -0
- package/skills/mobile-android/references/ui/navigation-3/references/android/guide/navigation/navigation-3/recipes/deeplinks-syntheticbackstack.md +184 -0
- package/skills/mobile-android/references/ui/navigation-3/references/android/guide/navigation/navigation-3/recipes/dialog.md +107 -0
- package/skills/mobile-android/references/ui/navigation-3/references/android/guide/navigation/navigation-3/recipes/lifecycle-owner.md +185 -0
- package/skills/mobile-android/references/ui/navigation-3/references/android/guide/navigation/navigation-3/recipes/material-listdetail.md +141 -0
- package/skills/mobile-android/references/ui/navigation-3/references/android/guide/navigation/navigation-3/recipes/material-supportingpane.md +145 -0
- package/skills/mobile-android/references/ui/navigation-3/references/android/guide/navigation/navigation-3/recipes/modular-hilt.md +283 -0
- package/skills/mobile-android/references/ui/navigation-3/references/android/guide/navigation/navigation-3/recipes/modular-koin.md +287 -0
- package/skills/mobile-android/references/ui/navigation-3/references/android/guide/navigation/navigation-3/recipes/multiple-backstacks.md +468 -0
- package/skills/mobile-android/references/ui/navigation-3/references/android/guide/navigation/navigation-3/recipes/passingarguments.md +371 -0
- package/skills/mobile-android/references/ui/navigation-3/references/android/guide/navigation/navigation-3/recipes/results-event.md +273 -0
- package/skills/mobile-android/references/ui/navigation-3/references/android/guide/navigation/navigation-3/recipes/results-state.md +266 -0
- package/skills/mobile-android/references/ui/navigation-3/references/android/guide/navigation/navigation-3/recipes/scenes-listdetail.md +435 -0
- package/skills/mobile-android/references/ui/navigation-3/references/android/guide/navigation/navigation-3/recipes/scenes-twopane.md +244 -0
- package/skills/mobile-android/references/ui/navigation-3/references/android/guide/navigation/type-safe-destinations.md +129 -0
- package/skills/mobile-android/references/ui/navigation-event/GUIDE.md +288 -0
- package/skills/mobile-android/references/ui/navigation-event/references/android/guide/navigation/navigation-event/dispatcher.md +134 -0
- package/skills/mobile-android/references/ui/navigation-event/references/android/guide/navigation/navigation-event/handle-back.md +217 -0
- package/skills/mobile-android/references/ui/navigation-event/references/android/guide/navigation/navigation-event/index.md +83 -0
- package/skills/mobile-android/references/ui/navigation-event/references/android/guide/navigation/navigation-event/setup.md +32 -0
- package/skills/mobile-android/references/ui/styles/GUIDE.md +209 -0
- package/skills/mobile-android/references/ui/styles/references/android/develop/ui/compose/designsystems/custom.md +459 -0
- package/skills/mobile-android/references/ui/styles/references/android/develop/ui/compose/styles/fundamentals.md +421 -0
- package/skills/mobile-android/references/ui/styles/references/android/develop/ui/compose/styles/state-animations.md +461 -0
- package/skills/mobile-android/references/ui/styles/references/android/develop/ui/compose/styles/styles-vs-modifiers.md +48 -0
- package/skills/mobile-android/references/ui/styles/references/android/develop/ui/compose/styles/theming.md +269 -0
- package/skills/mobile-android/references/ui.md +14 -0
- package/skills/mobile-architecture/SKILL.md +52 -0
- package/skills/mobile-architecture/references/android.md +54 -0
- package/skills/{flutter-app-architecture/SKILL.md → mobile-architecture/references/flutter/app-architecture.md} +1 -8
- package/skills/{bloc/SKILL.md → mobile-architecture/references/flutter/bloc.md} +1 -8
- package/skills/{flutter-change-notifier/SKILL.md → mobile-architecture/references/flutter/change-notifier.md} +1 -8
- package/skills/{architecture-feature-first/SKILL.md → mobile-architecture/references/flutter/feature-first.md} +1 -8
- package/skills/{flutter-login-usecase/SKILL.md → mobile-architecture/references/flutter/login-use-case.md} +0 -7
- package/skills/{flutter-managing-state/SKILL.md → mobile-architecture/references/flutter/managing-state.md} +2 -11
- package/skills/{provider/SKILL.md → mobile-architecture/references/flutter/provider.md} +1 -8
- package/skills/{flutter-apply-architecture-best-practices/SKILL.md → mobile-architecture/references/flutter/recommended-architecture.md} +2 -11
- package/skills/{riverpod/SKILL.md → mobile-architecture/references/flutter/riverpod.md} +1 -8
- package/skills/mobile-architecture/references/flutter.md +21 -0
- package/skills/mobile-architecture/references/ios.md +58 -0
- package/skills/mobile-architecture/references/react-native.md +61 -0
- package/skills/mobile-code-review/SKILL.md +70 -0
- package/skills/mobile-code-review/references/android.md +51 -0
- package/skills/{code-review/SKILL.md → mobile-code-review/references/flutter/pr-review.md} +1 -8
- package/skills/{flutter-project-audit/SKILL.md → mobile-code-review/references/flutter/project-audit.md} +0 -7
- package/skills/{dart-run-static-analysis/SKILL.md → mobile-code-review/references/flutter/static-analysis.md} +2 -11
- package/skills/{flutter-widget-review/SKILL.md → mobile-code-review/references/flutter/widget-review.md} +0 -7
- package/skills/mobile-code-review/references/flutter.md +18 -0
- package/skills/mobile-code-review/references/ios.md +49 -0
- package/skills/mobile-code-review/references/react-native.md +58 -0
- package/skills/mobile-debug/SKILL.md +50 -0
- package/skills/mobile-debug/references/android/gradle-build.md +63 -0
- package/skills/mobile-debug/references/android.md +26 -0
- package/skills/mobile-debug/references/flutter/build.md +58 -0
- package/skills/{flutter-errors/SKILL.md → mobile-debug/references/flutter/errors.md} +1 -8
- package/skills/{flutter-fix-layout-issues/SKILL.md → mobile-debug/references/flutter/layout-issues.md} +2 -11
- package/skills/{dart-resolve-package-conflicts/SKILL.md → mobile-debug/references/flutter/package-conflicts.md} +2 -11
- package/skills/{dart-fix-runtime-errors/SKILL.md → mobile-debug/references/flutter/runtime-errors.md} +2 -11
- package/skills/mobile-debug/references/flutter.md +23 -0
- package/skills/mobile-debug/references/ios/cocoapods.md +57 -0
- package/skills/mobile-debug/references/ios/xcode-build.md +58 -0
- package/skills/mobile-debug/references/ios.md +23 -0
- package/skills/mobile-debug/references/react-native.md +43 -0
- package/skills/{detect-mobile-stack → mobile-detect-stack}/SKILL.md +1 -1
- package/skills/mobile-firebase/SKILL.md +54 -0
- package/skills/mobile-firebase/references/android/ai-logic.md +31 -0
- package/skills/mobile-firebase/references/android/analytics.md +33 -0
- package/skills/mobile-firebase/references/android/app-check.md +36 -0
- package/skills/mobile-firebase/references/android/auth.md +44 -0
- package/skills/mobile-firebase/references/android/crashlytics.md +31 -0
- package/skills/mobile-firebase/references/android/firestore.md +44 -0
- package/skills/mobile-firebase/references/android/functions.md +33 -0
- package/skills/mobile-firebase/references/android/in-app-messaging.md +28 -0
- package/skills/mobile-firebase/references/android/messaging.md +41 -0
- package/skills/mobile-firebase/references/android/realtime-database.md +50 -0
- package/skills/mobile-firebase/references/android/remote-config.md +43 -0
- package/skills/mobile-firebase/references/android/sql-connect.md +31 -0
- package/skills/mobile-firebase/references/android/storage.md +39 -0
- package/skills/mobile-firebase/references/android.md +30 -0
- package/skills/{firebase-ai/SKILL.md → mobile-firebase/references/flutter/ai-logic.md} +2 -8
- package/skills/{firebase-analytics/SKILL.md → mobile-firebase/references/flutter/analytics.md} +2 -8
- package/skills/{firebase-app-check/SKILL.md → mobile-firebase/references/flutter/app-check.md} +2 -8
- package/skills/{firebase-auth/SKILL.md → mobile-firebase/references/flutter/auth.md} +2 -8
- package/skills/{firebase-crashlytics/SKILL.md → mobile-firebase/references/flutter/crashlytics.md} +2 -8
- package/skills/{firebase-cloud-firestore/SKILL.md → mobile-firebase/references/flutter/firestore.md} +2 -8
- package/skills/{firebase-cloud-functions/SKILL.md → mobile-firebase/references/flutter/functions.md} +2 -8
- package/skills/{firebase-in-app-messaging/SKILL.md → mobile-firebase/references/flutter/in-app-messaging.md} +2 -8
- package/skills/{firebase-messaging/SKILL.md → mobile-firebase/references/flutter/messaging.md} +2 -8
- package/skills/{firebase-database/SKILL.md → mobile-firebase/references/flutter/realtime-database.md} +2 -8
- package/skills/{firebase-remote-config/SKILL.md → mobile-firebase/references/flutter/remote-config.md} +2 -8
- package/skills/{flutterfire-configure/SKILL.md → mobile-firebase/references/flutter/setup-flutterfire.md} +1 -8
- package/skills/{firebase-data-connect/SKILL.md → mobile-firebase/references/flutter/sql-connect.md} +2 -8
- package/skills/{firebase-storage/SKILL.md → mobile-firebase/references/flutter/storage.md} +2 -8
- package/skills/mobile-firebase/references/flutter.md +36 -0
- package/skills/mobile-firebase/references/ios/ai-logic.md +30 -0
- package/skills/mobile-firebase/references/ios/analytics.md +33 -0
- package/skills/mobile-firebase/references/ios/app-check.md +36 -0
- package/skills/mobile-firebase/references/ios/auth.md +48 -0
- package/skills/mobile-firebase/references/ios/crashlytics.md +34 -0
- package/skills/mobile-firebase/references/ios/firestore.md +53 -0
- package/skills/mobile-firebase/references/ios/functions.md +35 -0
- package/skills/mobile-firebase/references/ios/in-app-messaging.md +26 -0
- package/skills/mobile-firebase/references/ios/messaging.md +45 -0
- package/skills/mobile-firebase/references/ios/realtime-database.md +49 -0
- package/skills/mobile-firebase/references/ios/remote-config.md +44 -0
- package/skills/mobile-firebase/references/ios/sql-connect.md +33 -0
- package/skills/mobile-firebase/references/ios/storage.md +36 -0
- package/skills/mobile-firebase/references/ios.md +28 -0
- package/skills/mobile-firebase/references/react-native/ai-logic.md +32 -0
- package/skills/mobile-firebase/references/react-native/analytics.md +43 -0
- package/skills/mobile-firebase/references/react-native/app-check.md +35 -0
- package/skills/mobile-firebase/references/react-native/auth.md +50 -0
- package/skills/mobile-firebase/references/react-native/crashlytics.md +36 -0
- package/skills/mobile-firebase/references/react-native/firestore.md +45 -0
- package/skills/mobile-firebase/references/react-native/functions.md +28 -0
- package/skills/mobile-firebase/references/react-native/in-app-messaging.md +27 -0
- package/skills/mobile-firebase/references/react-native/messaging.md +46 -0
- package/skills/mobile-firebase/references/react-native/realtime-database.md +46 -0
- package/skills/mobile-firebase/references/react-native/remote-config.md +32 -0
- package/skills/mobile-firebase/references/react-native/sql-connect.md +11 -0
- package/skills/mobile-firebase/references/react-native/storage.md +30 -0
- package/skills/mobile-firebase/references/react-native.md +29 -0
- package/skills/mobile-flutter/SKILL.md +30 -0
- package/skills/{flutter-improving-accessibility/SKILL.md → mobile-flutter/references/accessibility-i18n/accessibility.md} +2 -11
- package/skills/{flutter-setup-localization/SKILL.md → mobile-flutter/references/accessibility-i18n/localization.md} +2 -11
- package/skills/mobile-flutter/references/accessibility-i18n.md +8 -0
- package/skills/{dart-3-updates/SKILL.md → mobile-flutter/references/dart/dart-3.md} +1 -8
- package/skills/{effective-dart/SKILL.md → mobile-flutter/references/dart/effective-dart.md} +1 -8
- package/skills/{dart-use-pattern-matching/SKILL.md → mobile-flutter/references/dart/pattern-matching/GUIDE.md} +2 -18
- package/skills/mobile-flutter/references/dart.md +9 -0
- package/skills/{flutter-caching-data/SKILL.md → mobile-flutter/references/data/caching.md} +2 -11
- package/skills/{flutter-working-with-databases/SKILL.md → mobile-flutter/references/data/databases.md} +2 -11
- package/skills/{flutter-use-http-package/SKILL.md → mobile-flutter/references/data/http.md} +2 -11
- package/skills/{flutter-implement-json-serialization/SKILL.md → mobile-flutter/references/data/json-serialization.md} +2 -11
- package/skills/mobile-flutter/references/data.md +10 -0
- package/skills/{flutter-interoperating-with-native-apis/SKILL.md → mobile-flutter/references/native/native-apis.md} +2 -11
- package/skills/{flutter-embedding-native-views/SKILL.md → mobile-flutter/references/native/native-views.md} +2 -11
- package/skills/{flutter-building-plugins/SKILL.md → mobile-flutter/references/native/plugins.md} +2 -11
- package/skills/mobile-flutter/references/native.md +9 -0
- package/skills/{flutter-reducing-app-size/SKILL.md → mobile-flutter/references/performance/app-size.md} +2 -11
- package/skills/{flutter-handling-concurrency/SKILL.md → mobile-flutter/references/performance/concurrency.md} +2 -11
- package/skills/mobile-flutter/references/performance.md +8 -0
- package/skills/{flutter-setting-up-on-macos/SKILL.md → mobile-flutter/references/setup/macos.md} +2 -11
- package/skills/mobile-flutter/references/setup.md +7 -0
- package/skills/{flutter-animating-apps/SKILL.md → mobile-flutter/references/ui/animations.md} +2 -11
- package/skills/{flutter-building-forms/SKILL.md → mobile-flutter/references/ui/forms.md} +2 -11
- package/skills/{flutter-adding-home-screen-widgets/SKILL.md → mobile-flutter/references/ui/home-screen-widgets.md} +2 -11
- package/skills/{flutter-building-layouts/SKILL.md → mobile-flutter/references/ui/layouts.md} +2 -11
- package/skills/{flutter-build-responsive-layout/SKILL.md → mobile-flutter/references/ui/responsive-layout.md} +2 -11
- package/skills/{flutter-setup-declarative-routing/SKILL.md → mobile-flutter/references/ui/routing.md} +2 -11
- package/skills/{flutter-theming-apps/SKILL.md → mobile-flutter/references/ui/theming.md} +2 -11
- package/skills/{flutter-add-widget-preview/SKILL.md → mobile-flutter/references/ui/widget-previews.md} +2 -11
- package/skills/mobile-flutter/references/ui.md +14 -0
- package/skills/mobile-ios/SKILL.md +25 -0
- package/skills/mobile-ios/references/data-networking.md +70 -0
- package/skills/mobile-ios/references/performance-release.md +37 -0
- package/skills/mobile-ios/references/platform-features.md +52 -0
- package/skills/mobile-ios/references/ui-navigation.md +64 -0
- package/skills/mobile-rn/SKILL.md +26 -0
- package/skills/mobile-rn/references/data-networking.md +59 -0
- package/skills/mobile-rn/references/performance-release.md +46 -0
- package/skills/mobile-rn/references/platform-features.md +40 -0
- package/skills/mobile-rn/references/ui-navigation.md +62 -0
- package/skills/mobile-security/SKILL.md +82 -0
- package/skills/mobile-security/references/android/intent-security.md +523 -0
- package/skills/mobile-security/references/android.md +37 -0
- package/skills/{flutter-secure-token-store/SKILL.md → mobile-security/references/flutter/secure-token-store.md} +1 -8
- package/skills/mobile-security/references/flutter.md +30 -0
- package/skills/mobile-security/references/ios.md +27 -0
- package/skills/mobile-security/references/react-native.md +29 -0
- package/skills/mobile-test/SKILL.md +63 -0
- package/skills/mobile-test/references/android/setup/GUIDE.md +183 -0
- package/skills/mobile-test/references/android/setup/references/android/develop/ui/compose/testing/common-patterns.md +181 -0
- package/skills/mobile-test/references/android/setup/references/android/studio/preview/compose-screenshot-testing.md +255 -0
- package/skills/mobile-test/references/android/setup/references/android/training/dependency-injection/hilt-testing.md +447 -0
- package/skills/mobile-test/references/android.md +83 -0
- package/skills/{dart-collect-coverage/SKILL.md → mobile-test/references/flutter/coverage.md} +2 -11
- package/skills/{dart-generate-test-mocks/SKILL.md → mobile-test/references/flutter/generate-mocks.md} +2 -11
- package/skills/{flutter-add-integration-test/SKILL.md → mobile-test/references/flutter/integration-tests.md} +2 -11
- package/skills/{dart-migrate-to-checks-package/SKILL.md → mobile-test/references/flutter/migrate-to-checks.md} +2 -13
- package/skills/{mockito/SKILL.md → mobile-test/references/flutter/mockito.md} +1 -8
- package/skills/{mocktail/SKILL.md → mobile-test/references/flutter/mocktail.md} +1 -8
- package/skills/{patrol-e2e-testing/SKILL.md → mobile-test/references/flutter/patrol.md} +1 -8
- package/skills/{testing/SKILL.md → mobile-test/references/flutter/testing-guidelines.md} +1 -8
- package/skills/{dart-add-unit-test/SKILL.md → mobile-test/references/flutter/unit-tests.md} +2 -11
- package/skills/{flutter-add-widget-test/SKILL.md → mobile-test/references/flutter/widget-tests.md} +2 -11
- package/skills/mobile-test/references/flutter.md +44 -0
- package/skills/mobile-test/references/ios.md +79 -0
- package/skills/mobile-test/references/react-native.md +62 -0
- package/skills/mobile-security-audit/SKILL.md +0 -101
- /package/skills/{dart-use-pattern-matching → mobile-flutter/references/dart/pattern-matching}/examples/json_patterns.dart +0 -0
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
> [!NOTE]
|
|
2
|
+
> **Note:** Prefix caching is experimental and may change in the future. This feature is only available on a subset of the supported devices for Prompt API, with support for more devices coming soon. We encourage you to experiment with this API on a Pixel device to understand how it can improve inference latency speeds for your specific use case.
|
|
3
|
+
|
|
4
|
+
*Prefix caching* is a feature that reduces inference time by storing and reusing
|
|
5
|
+
the intermediate LLM state of processing a shared and recurring prompt prefix
|
|
6
|
+
part. To enable prefix caching, you only have to separate the static prefix from
|
|
7
|
+
the dynamic suffix in your API request.
|
|
8
|
+
|
|
9
|
+
Prefix caching currently only supports text-only input, so you shouldn't use
|
|
10
|
+
this feature if you're providing an image in your prompt.
|
|
11
|
+
|
|
12
|
+
There are two approaches to implement prefix caching: implicit or explicit:
|
|
13
|
+
|
|
14
|
+
- [Implicit (automatic) prefix caching](https://developer.android.com/agents/skills/device-ai/ml-kit-genai-prompt-api/references/prefix-caching#implicit) is a lightweight approach where the application only needs to define a shared portion of the prompt.
|
|
15
|
+
- [Explicit (manual) prefix caching](https://developer.android.com/agents/skills/device-ai/ml-kit-genai-prompt-api/references/prefix-caching#explicit) allows applications to have more control over caches, including cache creation, querying, and deletion.
|
|
16
|
+
|
|
17
|
+
## Use prefix caching implicitly
|
|
18
|
+
|
|
19
|
+
To enable prefix caching, add the shared portion of the prompt to the
|
|
20
|
+
`promptPrefix` field, as shown in the following code snippets:
|
|
21
|
+
|
|
22
|
+
### Kotlin
|
|
23
|
+
|
|
24
|
+
val promptPrefix = "Reverse the given sentence: "
|
|
25
|
+
val dynamicSuffix = "Hello World"
|
|
26
|
+
|
|
27
|
+
val result = generativeModel.generateContent(
|
|
28
|
+
generateContentRequest(TextPart(dynamicSuffix)) {
|
|
29
|
+
promptPrefix = PromptPrefix(promptPrefix)
|
|
30
|
+
}
|
|
31
|
+
)
|
|
32
|
+
|
|
33
|
+
### Java
|
|
34
|
+
|
|
35
|
+
String promptPrefix = "Reverse the given sentence: ";
|
|
36
|
+
String dynamicSuffix = "Hello World";
|
|
37
|
+
|
|
38
|
+
GenerateContentResponse response = generativeModelFutures.generateContent(
|
|
39
|
+
new GenerateContentRequest.Builder(new TextPart(dynamicSuffix))
|
|
40
|
+
.setPromptPrefix(new PromptPrefix(promptPrefix))
|
|
41
|
+
.build())
|
|
42
|
+
.get();
|
|
43
|
+
|
|
44
|
+
In the preceding snippet, the `dynamicSuffix` is passed as the main content, and
|
|
45
|
+
the `promptPrefix` is provided separately.
|
|
46
|
+
|
|
47
|
+
### Estimated performance gains
|
|
48
|
+
|
|
49
|
+
|---|---|---|
|
|
50
|
+
| | **Without prefix caching** | **With prefix cache-hit** (Prefix cache-miss may occur when prefix is used for the first time) |
|
|
51
|
+
| Pixel 9 with 300-token fixed prefix and a 50-token dynamic suffix prompt | 0.82 seconds | 0.45 seconds |
|
|
52
|
+
| Pixel 9 with a 1,000-token fixed prefix and a 100-token dynamic suffix prompt | 2.11 seconds | 0.5 seconds |
|
|
53
|
+
|
|
54
|
+
### Storage considerations
|
|
55
|
+
|
|
56
|
+
With implicit prefix caching, cache files are saved on the client application's
|
|
57
|
+
private storage, which increases your app's storage usage. Encrypted cache files
|
|
58
|
+
and their associated metadata, including original prefix text, are stored. Keep
|
|
59
|
+
the following storage considerations in mind:
|
|
60
|
+
|
|
61
|
+
- The number of caches is managed by an LRU (Least Recently Used) mechanism. Least used caches are deleted automatically when exceeding the max total cache amount.
|
|
62
|
+
- Prompt cache sizes are dependent on the length of the prefix.
|
|
63
|
+
- To clear all caches created from prefix caching, use the
|
|
64
|
+
[`generativeMode.clearImplicitCaches()`](https://developer.android.com/android/reference/kotlin/com/google/mlkit/genai/prompt/GenerativeModel#clearCaches%28%29) method.
|
|
65
|
+
|
|
66
|
+
> [!NOTE]
|
|
67
|
+
> **Note:** The `clearImplicitCaches()` method is experimental and may change in the future.
|
|
68
|
+
|
|
69
|
+
## Use explicit cache management
|
|
70
|
+
|
|
71
|
+
The Prompt API includes explicit cache management methods to give developers
|
|
72
|
+
more precise control over how caches are created, searched, used, and removed.
|
|
73
|
+
These manual operations run independently of the system's automated cache
|
|
74
|
+
handling.
|
|
75
|
+
|
|
76
|
+
This example illustrates how to initialize explicit cache management and
|
|
77
|
+
perform inference:
|
|
78
|
+
|
|
79
|
+
### Kotlin
|
|
80
|
+
|
|
81
|
+
val cacheName = "my_cache"
|
|
82
|
+
val promptPrefix = "Reverse the given sentence: "
|
|
83
|
+
val dynamicSuffix = "Hello World"
|
|
84
|
+
|
|
85
|
+
// Create a cache
|
|
86
|
+
val cacheRequest = createCachedContextRequest(cacheName, PromptPrefix(promptPrefix))
|
|
87
|
+
val cache = generativeModel.caches.create(cacheRequest)
|
|
88
|
+
|
|
89
|
+
// Run inference with the cache
|
|
90
|
+
val response = generativeModel.generateContent(
|
|
91
|
+
generateContentRequest(TextPart(dynamicSuffix)) {
|
|
92
|
+
cachedContextName = cache.name
|
|
93
|
+
}
|
|
94
|
+
)
|
|
95
|
+
|
|
96
|
+
### Java
|
|
97
|
+
|
|
98
|
+
String cacheName = "my_cache";
|
|
99
|
+
String promptPrefix = "Reverse the given sentence: ";
|
|
100
|
+
String dynamicSuffix = "Hello World";
|
|
101
|
+
|
|
102
|
+
// Create a cache
|
|
103
|
+
CachedContext cache = cachesFutures.create(
|
|
104
|
+
new CreateCachedContextRequest.Builder(cacheName, new PromptPrefix(promptPrefix))
|
|
105
|
+
.build())
|
|
106
|
+
.get();
|
|
107
|
+
|
|
108
|
+
// Run inference with the cache
|
|
109
|
+
GenerateContentResponse response = generativeModelFutures.generateContent(
|
|
110
|
+
new GenerateContentRequest.Builder(new TextPart(dynamicSuffix))
|
|
111
|
+
.setCachedContextName(cache.getName())
|
|
112
|
+
.build())
|
|
113
|
+
.get();
|
|
114
|
+
|
|
115
|
+
This example demonstrates how to query, retrieve, and delete explicitly managed
|
|
116
|
+
caches using `generativeModel.caches`:
|
|
117
|
+
|
|
118
|
+
### Kotlin
|
|
119
|
+
|
|
120
|
+
val cacheName = "my_cache"
|
|
121
|
+
|
|
122
|
+
// Query pre-created caches
|
|
123
|
+
for (cache in generativeModel.caches.list()) {
|
|
124
|
+
// Do something with cache
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
// Get specific cache
|
|
128
|
+
val cache = generativeModel.caches.get(cacheName)
|
|
129
|
+
|
|
130
|
+
// Delete a pre-created cache
|
|
131
|
+
generativeModel.caches.delete(cacheName)
|
|
132
|
+
|
|
133
|
+
### Java
|
|
134
|
+
|
|
135
|
+
String cacheName = "my_cache";
|
|
136
|
+
|
|
137
|
+
// Query pre-created caches
|
|
138
|
+
for (PrefixCache cache : cachesFutures.list().get()) {
|
|
139
|
+
// Do something with cache
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
// Get specific cache
|
|
143
|
+
PrefixCache cache = cachesFutures.get(cacheName).get();
|
|
144
|
+
|
|
145
|
+
// Delete a pre-created cache
|
|
146
|
+
cachesFutures.delete(cacheName);
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
When using Prompt API, there are specific strategies you can use to tailor your
|
|
2
|
+
prompts and receive optimal results. This page describes best practices for
|
|
3
|
+
formatting prompts for Gemini Nano.
|
|
4
|
+
|
|
5
|
+
For more general prompt engineering guidance, see [Prompt Engineering
|
|
6
|
+
whitepaper](https://www.kaggle.com/whitepaper-prompt-engineering), [Prompt Engineering for Generative
|
|
7
|
+
AI](https://developer.android.com/machine-learning/resources/prompt-eng), and [Prompt design strategies](https://ai.google.dev/gemini-api/docs/prompting-strategies).
|
|
8
|
+
|
|
9
|
+
Alternatively, to automatically refine and improve prompts, you can use the
|
|
10
|
+
[zero-shot optimizer](https://docs.cloud.google.com/vertex-ai/generative-ai/docs/learn/prompts/zero-shot-optimizer#optimizing_for_smaller_models), which can target on-device models such as
|
|
11
|
+
`gemma-3n-e4b-it`.
|
|
12
|
+
|
|
13
|
+
## Prompt design best practices
|
|
14
|
+
|
|
15
|
+
When designing prompts for Prompt API, use the following techniques:
|
|
16
|
+
|
|
17
|
+
- **Provide examples for in-context learning**. Add well-distributed examples to
|
|
18
|
+
your prompt to show Gemini Nano the kind of result you expect.
|
|
19
|
+
|
|
20
|
+
Consider using the [prefix caching](https://developer.android.com/agents/skills/device-ai/prompt-api/references/prefix-caching) feature when you use in-context
|
|
21
|
+
learning, as providing examples makes the prompt longer and increases
|
|
22
|
+
inference time.
|
|
23
|
+
- **Be concise** . Verbose preambles with repeated instructions can produce
|
|
24
|
+
suboptimal results. Keep your prompt focused and to-the-point. If you need to
|
|
25
|
+
repeat a short directive that guides the model's behavior, consider using
|
|
26
|
+
[system instructions](https://developer.android.com/agents/skills/device-ai/prompt-api/references/system-instructions).
|
|
27
|
+
|
|
28
|
+
- **Structure prompts** to generate more effective responses, such as this
|
|
29
|
+
[sample prompt template](https://cloud.google.com/vertex-ai/generative-ai/docs/learn/prompts/prompt-design-strategies#sample-prompt-template) that clearly defines instructions,
|
|
30
|
+
constraints, and examples.
|
|
31
|
+
|
|
32
|
+
- **Keep output short** . LLM inference speeds are heavily dependent on the
|
|
33
|
+
output length. Carefully consider how you can generate the shortest possible
|
|
34
|
+
output for your use case and do manual post-processing to structure the output
|
|
35
|
+
in the chosen format. To help ensure that the response output is in your
|
|
36
|
+
preferred format, use the [Structured Output API](https://developer.android.com/agents/skills/device-ai/prompt-api/references/structured-output).
|
|
37
|
+
|
|
38
|
+
- **Add delimiters** . Use delimiters like `<background_information>`,
|
|
39
|
+
`<instruction>`, and `##` to create separation between different parts of your
|
|
40
|
+
prompt. Using `##` between components is particularly critical for Gemini
|
|
41
|
+
Nano, as it significantly reduces the chances of the model failing to
|
|
42
|
+
correctly interpret each component.
|
|
43
|
+
|
|
44
|
+
- **Prefer simple logic and a more focused task** . If you find it challenging
|
|
45
|
+
to achieve good results with a prompt requiring multi-step reasoning (for
|
|
46
|
+
example, *do X first, if the result of X is A, do M; otherwise do N;
|
|
47
|
+
then do Y...* ), consider breaking the task up and let each Gemini Nano call
|
|
48
|
+
handle a more focused task, while using code to chain multiple calls together.
|
|
49
|
+
If you do need to tackle a complex, reasoning-intensive task all at once,
|
|
50
|
+
consider using [thinking mode](https://developer.android.com/ml-kit/genai/prompt/android/thinking-mode).
|
|
51
|
+
|
|
52
|
+
- **Use lower temperature values for deterministic tasks** . For tasks such as
|
|
53
|
+
entity extraction or translation that don't rely on creativity, consider
|
|
54
|
+
starting with a `temperature` value of `0.2`, and tune this value based on
|
|
55
|
+
your testing.
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
This skill provides guidance on how to optimize prompts for use with the ML Kit
|
|
2
|
+
Prompt API.
|
|
3
|
+
|
|
4
|
+
## Guidelines \& Rules
|
|
5
|
+
|
|
6
|
+
The best practices for prompt design for Prompt API are at
|
|
7
|
+
[Prompt Design](https://developer.android.com/agents/skills/device-ai/prompt-api/references/prompt-design). Apply these core rules:
|
|
8
|
+
|
|
9
|
+
- Include examples for in-context learning with examples of the output. This is an example prompt that includes in-context learning because it has examples of the desired model output: Analyze the message and return whether the customer sentiment is positive, negative, or neutral. Example 1: Input - "This product doesn't work"; Output - "Negative" Example 2: Input - "I liked this product"; Output - "Positive"
|
|
10
|
+
- Make prompts concise. Remove duplicate or repeated instructions. Do not include conversational filler such as: hello, please, do this, help me with, etc. For example, a verbose prompt such as: "Hello! I want you to act as an expert translator for me today. I am going to give you a short paragraph of text in English, and I would really like it if you could translate it into formal, high-level Business French. Please make sure that you do not include any intro like 'Here is your translation' or any closing remarks at all. Just output the translation itself." can be improved with this concise prompt: "Translate to formal Business French. Return ONLY the translation"
|
|
11
|
+
- Use paired XML/HTML delimiters to denote dynamic inputs (for example `<email>[content]</email>`) to clearly isolate user data from prompt instructions. Mention that the delimiters represent placeholder text that should be replaced by code in the actual implementation.
|
|
12
|
+
- Use the [Structured Output API](https://developer.android.com/agents/skills/device-ai/prompt-api/references/structured-output) if the output requires parsing responses into certain formats. Don't include the Structured Output API implementation in the prompt itself, but mention it after presenting the optimized prompt to the user so the user knows how to parse the model output. Prompts that use Structured Output API must return the `@Generable` typed object from the function signature instead of a string or JSON string.
|
|
13
|
+
- Keep output short by adding output constraints such as word count, character count, or number of bullets or sentences. For example, add constraints such as "The summarization must be 10 words or fewer."
|
|
14
|
+
- Use [system instructions](https://developer.android.com/agents/skills/device-ai/prompt-api/references/system-instructions) for short instructions that define how a model should behave, and use [prefix caching](https://developer.android.com/agents/skills/device-ai/prompt-api/references/prefix-caching) for prompts that are over 200 words.
|
|
15
|
+
|
|
16
|
+
## Examples
|
|
17
|
+
|
|
18
|
+
Here are examples of prompts that the user might ask you to optimize, and the
|
|
19
|
+
improved, optimized versions.
|
|
20
|
+
|
|
21
|
+
### Example 1
|
|
22
|
+
|
|
23
|
+
Unoptimized prompt:
|
|
24
|
+
|
|
25
|
+
Process this customer email and return the order ID, what was bought, the phone
|
|
26
|
+
number, and what they want. Format it as JSON so my app can read it.
|
|
27
|
+
|
|
28
|
+
Optimized prompt:
|
|
29
|
+
|
|
30
|
+
## Task
|
|
31
|
+
|
|
32
|
+
Extract key details from the customer email below.
|
|
33
|
+
|
|
34
|
+
## Customer Email
|
|
35
|
+
|
|
36
|
+
<email>
|
|
37
|
+
[email_content]
|
|
38
|
+
</email>
|
|
39
|
+
|
|
40
|
+
Explanation: Because the information that the user wants to extract using the
|
|
41
|
+
prompt is well suited for the Structured Output API, the optimized prompt
|
|
42
|
+
implicitly uses the Structured Output API and doesn't need to explicitly define
|
|
43
|
+
the schema for the extracted data. In your response to the user that explains
|
|
44
|
+
the optimizations made to the prompt, mention that the optimized prompt is
|
|
45
|
+
designed for use with the Structured Output API. Also, mention that the
|
|
46
|
+
"" delimiters signify placeholder text that should be replaced with code in the user's actual implementation.
|
|
47
|
+
|
|
48
|
+
### Example 2
|
|
49
|
+
|
|
50
|
+
Unoptimized prompt:
|
|
51
|
+
|
|
52
|
+
Given this itinerary for a trip: [Flight to Paris (CDG), Check-in: Hotel Le
|
|
53
|
+
Meurice, Visit to the Louvre, Dinner at Le Jules Verne, Eiffel Tower Visit,
|
|
54
|
+
Versailles Palace Tour, Montmartre Walk, Seine River Cruise, Pastry and Macaron
|
|
55
|
+
Tasting, Flight Out], generate the following: overall vibe, tips on how to
|
|
56
|
+
prepare for this trip, and common short phrases to learn for the trip.
|
|
57
|
+
|
|
58
|
+
Optimized prompt:
|
|
59
|
+
|
|
60
|
+
## Task
|
|
61
|
+
|
|
62
|
+
Analyze the trip itinerary below and extract details to build a concise travel
|
|
63
|
+
guide.
|
|
64
|
+
|
|
65
|
+
## Rules
|
|
66
|
+
- Overall vibe: Limit to 1 short sentence (under 15 words).
|
|
67
|
+
- Preparation tips: Provide exactly 3 short tips (maximum 10 words per tip).
|
|
68
|
+
- Useful phrases: Provide exactly 3 phrases (under 15 words each).
|
|
69
|
+
|
|
70
|
+
## Itinerary
|
|
71
|
+
|
|
72
|
+
<itinerary>
|
|
73
|
+
[itinerary_content]
|
|
74
|
+
</itinerary>
|
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
If you need to parse the responses from the Prompt API into certain formats,
|
|
2
|
+
such as JSON, for further processing, use the Structured Output API.
|
|
3
|
+
|
|
4
|
+
With the Structured Output API, you define the target output structure using
|
|
5
|
+
Kotlin classes and annotations. The Prompt API then returns a response in the
|
|
6
|
+
form of your Kotlin object.
|
|
7
|
+
|
|
8
|
+
Generating structured output is particularly useful for tasks like the
|
|
9
|
+
following:
|
|
10
|
+
|
|
11
|
+
- **Entity extraction**: Extracting structured fields (for example, event name, date, location) from unstructured text.
|
|
12
|
+
- **Classification**: Categorizing input text into predefined categories.
|
|
13
|
+
- **Data serialization**: Converting unstructured user input into a format suitable for database storage or API calls.
|
|
14
|
+
|
|
15
|
+
## Prerequisites
|
|
16
|
+
|
|
17
|
+
To verify that the Structured Output API is available on the device, use the
|
|
18
|
+
`isStructuredOutputFeatureAvailable()` API. The API returns `true` if the
|
|
19
|
+
Structured Output API is available on the device, and `false` otherwise.
|
|
20
|
+
|
|
21
|
+
suspend fun isStructuredOutputFeatureAvailable(): Boolean
|
|
22
|
+
|
|
23
|
+
The Structured Output API also has the following requirements:
|
|
24
|
+
|
|
25
|
+
- Android API level 26 or higher (`minSdk` 26)
|
|
26
|
+
- KSP plugin version 2.3.6 or higher
|
|
27
|
+
|
|
28
|
+
## Limitations
|
|
29
|
+
|
|
30
|
+
The Structured Output API has the following limitations:
|
|
31
|
+
|
|
32
|
+
- Works in Kotlin only.
|
|
33
|
+
- ProGuard might interfere with the parsing of your annotated class. Add your annotated class to your [keep rules](https://developer.android.com/topic/performance/app-optimization/keep-rules-overview) to exclude them from ProGuard if you get errors parsing, for example:
|
|
34
|
+
|
|
35
|
+
# Keep classes used by structured output for deserialization for release builds.
|
|
36
|
+
-keep class com.google.mlkit.genai.demo.kotlin.Plant { *; }
|
|
37
|
+
|
|
38
|
+
## Configure project
|
|
39
|
+
|
|
40
|
+
To get started with the Structured Output API, follow these steps:
|
|
41
|
+
|
|
42
|
+
1. [Add the ML Kit Prompt API as a dependency](https://developer.android.com/agents/skills/device-ai/prompt-api/references/get-started#configure-project) in your
|
|
43
|
+
app-level `build.gradle.kts` (or `build.gradle`) file, if you haven't
|
|
44
|
+
already.
|
|
45
|
+
|
|
46
|
+
2. Add the KSP plugin to your project-level `build.gradle.kts` file. Use a
|
|
47
|
+
KSP plugin version that is compatible with your Kotlin version; we
|
|
48
|
+
recommend KSP version 2.3.6 or higher.
|
|
49
|
+
|
|
50
|
+
dependencies {
|
|
51
|
+
...
|
|
52
|
+
classpath "com.google.devtools.ksp:com.google.devtools.ksp.gradle.plugin:2.3.6"
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
3. Add the structured compiler dependencies to your app-level
|
|
56
|
+
`build.gradle.kts` file:
|
|
57
|
+
|
|
58
|
+
dependencies {
|
|
59
|
+
...
|
|
60
|
+
ksp("com.google.mlkit:genai-schema-compiler:1.0.0-alpha1")
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
## Define the output structure
|
|
64
|
+
|
|
65
|
+
Define the structure of the data you want the model to return using Kotlin
|
|
66
|
+
data classes. There are two main annotations for defining the output
|
|
67
|
+
structure:
|
|
68
|
+
|
|
69
|
+
- Use the `@Generable` annotation to define the class as a target for structured output.
|
|
70
|
+
- Use the `@Guide` annotations on the class properties to provide descriptions and constraints that guide the model's output.
|
|
71
|
+
|
|
72
|
+
The following example defines a structure for extracting plant information:
|
|
73
|
+
|
|
74
|
+
import com.google.mlkit.genai.schema.annotations.Generable
|
|
75
|
+
import com.google.mlkit.genai.schema.annotations.Guide
|
|
76
|
+
|
|
77
|
+
@Generable
|
|
78
|
+
data class PlantList(
|
|
79
|
+
@Guide(description = "The list of plants found", minItems = 1, maxItems = 5)
|
|
80
|
+
val plants: List<Plant>
|
|
81
|
+
)
|
|
82
|
+
|
|
83
|
+
@Generable("Information about a plant species")
|
|
84
|
+
data class Plant(
|
|
85
|
+
@Guide(description = "The common name of the plant")
|
|
86
|
+
val commonName: String,
|
|
87
|
+
|
|
88
|
+
@Guide(description = "The full latin scientific name of the plant")
|
|
89
|
+
val scientificName: String,
|
|
90
|
+
|
|
91
|
+
@Guide(
|
|
92
|
+
description = "The maximum height of the plant in centimeters.",
|
|
93
|
+
minimum = 1.0,
|
|
94
|
+
maximum = 10000.0
|
|
95
|
+
)
|
|
96
|
+
val maxHeightCm: Int,
|
|
97
|
+
|
|
98
|
+
@Guide(description = "Whether the plant is poisonous or not")
|
|
99
|
+
val isPoisonous: Boolean?,
|
|
100
|
+
|
|
101
|
+
@Guide(
|
|
102
|
+
description = "The primary continent where this plant is native to",
|
|
103
|
+
enumValues = ["Africa", "Antarctica", "Asia", "Australia", "Europe", "North America", "South America"]
|
|
104
|
+
)
|
|
105
|
+
val nativeContinent: String
|
|
106
|
+
)
|
|
107
|
+
|
|
108
|
+
### Supported types and constraints
|
|
109
|
+
|
|
110
|
+
The following types are supported within a `@Generable` annotated class,
|
|
111
|
+
along with their respective `@Guide` constraints:
|
|
112
|
+
|
|
113
|
+
| Type | Description | Supported `@Guide` constraints |
|
|
114
|
+
|---|---|---|
|
|
115
|
+
| `String` | For text. | `description`, `enumValues` |
|
|
116
|
+
| `Double` / `Float` | For floating-point numbers. | `description`, `minimum`, `maximum` |
|
|
117
|
+
| `Int` / `Long` | For whole numbers. | `description`, `minimum`, `maximum` |
|
|
118
|
+
| `Boolean` | For true/false values. | `description` |
|
|
119
|
+
| `List<T>` | For lists of supported types or nested `@Generable` classes. | `description`, `minItems`, `maxItems` |
|
|
120
|
+
| `List<String>` | For lists of `String` values. | `description`, `enumValues`, `minItems`, `maxItems` > [!NOTE] > **Note:** Setting the `enumValues` parameter defines the values allowed for the individual list items. |
|
|
121
|
+
| `@Generable` class | For nested structured objects. | `description` |
|
|
122
|
+
|
|
123
|
+
> [!NOTE]
|
|
124
|
+
> **Note:** Circular dependencies between nested `@Generable` classes are not supported (for example, a class referencing itself, or Class A referencing Class B which in turn references Class A).
|
|
125
|
+
|
|
126
|
+
## Generate structured content
|
|
127
|
+
|
|
128
|
+
To request structured output, use the `generateTypedContentRequest` helper
|
|
129
|
+
function to wrap your standard prompt and specify the target output class.
|
|
130
|
+
|
|
131
|
+
// 1. Initialize your GenerativeModel as usual
|
|
132
|
+
val generativeModel = Generation.getClient()
|
|
133
|
+
|
|
134
|
+
// 2. Prepare the prompt text
|
|
135
|
+
val promptText = "List some common plants found in California."
|
|
136
|
+
val baseRequest = GenerateContentRequest.Builder(TextPart(promptText)).build()
|
|
137
|
+
|
|
138
|
+
// 3. Create the typed request, specifying the target class (e.g., PlantList)
|
|
139
|
+
val typedRequest = generateTypedContentRequest(
|
|
140
|
+
generateContentRequest = baseRequest,
|
|
141
|
+
outputClass = PlantList::class
|
|
142
|
+
)
|
|
143
|
+
|
|
144
|
+
// 4. Run the inference
|
|
145
|
+
try {
|
|
146
|
+
val typedResponse = generativeModel.generateContent(typedRequest)
|
|
147
|
+
|
|
148
|
+
// 5. Access the parsed object
|
|
149
|
+
// The response candidates contain the parsed object of type T (PlantList in this case)
|
|
150
|
+
val plantList: PlantList? = typedResponse.candidates.firstOrNull()?.response
|
|
151
|
+
|
|
152
|
+
if (plantList != null) {
|
|
153
|
+
// Process the structured data
|
|
154
|
+
for (plant in plantList.plants) {
|
|
155
|
+
Log.d("StructuredOutput", "Found plant: ${plant.commonName} (${plant.scientificName})")
|
|
156
|
+
}
|
|
157
|
+
} else {
|
|
158
|
+
Log.e("StructuredOutput", "Failed to parse response into the desired structure.")
|
|
159
|
+
|
|
160
|
+
// Inspect finish reason for details
|
|
161
|
+
val finishReason = typedResponse.candidates.firstOrNull()?.finishReason
|
|
162
|
+
Log.d("StructuredOutput", "Finish reason: $finishReason")
|
|
163
|
+
}
|
|
164
|
+
} catch (e: GenAiException) {
|
|
165
|
+
// Handle API errors
|
|
166
|
+
when (e.errorCode) {
|
|
167
|
+
GenAiException.STRUCTURED_OUTPUT_INVALID_CLASS -> {
|
|
168
|
+
Log.e("StructuredOutput", "The class structure is not supported.")
|
|
169
|
+
}
|
|
170
|
+
GenAiException.STRUCTURED_OUTPUT_INVALID_VALUE -> {
|
|
171
|
+
Log.e("StructuredOutput", "The model generated values that violate the schema constraints.")
|
|
172
|
+
}
|
|
173
|
+
else -> {
|
|
174
|
+
Log.e("StructuredOutput", "API error: ${e.message}")
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
## Handle finish reasons and errors
|
|
180
|
+
|
|
181
|
+
When using the Structured Output API, you should handle potential exceptions
|
|
182
|
+
thrown by the API and inspect the `finishReason` property in the response
|
|
183
|
+
candidates if the parsed response is null.
|
|
184
|
+
|
|
185
|
+
### finishReason values
|
|
186
|
+
|
|
187
|
+
The `finishReason` property can take one of the following values:
|
|
188
|
+
|
|
189
|
+
- `TypedFinishReason.STOP`: The model finished generating successfully and the output matches the schema.
|
|
190
|
+
- `TypedFinishReason.MAX_TOKENS`: The model stopped because it reached the token limit. The output might be incomplete.
|
|
191
|
+
- `TypedFinishReason.PARSE_CLASS_ERROR`: The model completed generation, but the resulting JSON couldn't be parsed into the target Kotlin class.
|
|
192
|
+
- `TypedFinishReason.STRUCTURE_NOT_ANNOTATED`: The target class or its nested classes are missing the required `@Generable` annotation.
|
|
193
|
+
- `TypedFinishReason.STRUCTURE_VALUES_INVALID`: The generated values violated the constraints defined in the `@Guide` annotations (for example value out of range, list size out of bounds).
|
|
194
|
+
- `TypedFinishReason.OTHER`: Generation stopped due to other reasons.
|
|
195
|
+
|
|
196
|
+
### Exceptions
|
|
197
|
+
|
|
198
|
+
The Structured Output API might throw `GenAiException` with the following
|
|
199
|
+
error codes:
|
|
200
|
+
|
|
201
|
+
- `GenAiException.STRUCTURED_OUTPUT_INVALID_CLASS` (-104): The structure of the annotated class is invalid or contains unsupported types. This is typically a development-time configuration error. Review your `@Generable` data class definition to check that all property types are supported and that there aren't any circular dependencies.
|
|
202
|
+
- `GenAiException.STRUCTURED_OUTPUT_INVALID_VALUE` (-105): The values generated by the model are invalid or fail constraints verification. This is a runtime error. If you encounter this error frequently, consider the following solutions:
|
|
203
|
+
- Refining your prompt instructions to guide the model more strictly.
|
|
204
|
+
- Relaxing the constraints (like minimum, maximum, or list size limits) in your `@Guide` annotations if they are too restrictive for the model's capabilities.
|
|
205
|
+
- Implementing a fallback strategy in your app, such as retrying the request or displaying a default state.
|
|
206
|
+
|
|
207
|
+
## Count tokens
|
|
208
|
+
|
|
209
|
+
To check if your structured prompt is within the input token limit, calculate
|
|
210
|
+
the token count using the [`countTokens()`](https://developer.android.com/android/reference/com/google/mlkit/genai/prompt/GenerativeModel#countTokens(com.google.mlkit.genai.prompt.GenerateContentRequest)) method.
|
|
211
|
+
|
|
212
|
+
Because structured output requests need to instruct the model on the schema
|
|
213
|
+
structure, counting tokens on just the raw prompt text (using a
|
|
214
|
+
`GenerateContentRequest` instance) isn't accurate. To get an accurate token
|
|
215
|
+
count, you must pass the complete `GenerateTypedContentRequest` instance, which
|
|
216
|
+
includes your target class and schema configurations, to the `countTokens()`
|
|
217
|
+
method:
|
|
218
|
+
|
|
219
|
+
suspend fun <T : Any> countTokens(request: GenerateTypedContentRequest<T>): CountTokensResponse
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
System instructions let you give the model a persona, set the tone of its
|
|
2
|
+
responses, or provide specific rules it must follow. These instructions are
|
|
3
|
+
separate from the user's prompt and are treated with higher priority by the
|
|
4
|
+
model to ensure it behaves as expected.
|
|
5
|
+
|
|
6
|
+
Common use cases include:
|
|
7
|
+
|
|
8
|
+
- **Setting a persona:** For example, "You are a helpful math tutor."
|
|
9
|
+
- **Enforcing output format:** For example, "Always respond in bullet points."
|
|
10
|
+
- **Setting constraints:** For example, "Do not answer questions about politics."
|
|
11
|
+
|
|
12
|
+
## Prerequisites
|
|
13
|
+
|
|
14
|
+
System instructions work on devices running Gemini Nano V3 and higher. For a
|
|
15
|
+
list of supported devices, see [Prompt API device support](https://developer.android.com/ml-kit/genai#prompt-device).
|
|
16
|
+
|
|
17
|
+
## Limitations
|
|
18
|
+
|
|
19
|
+
We don't recommend using system instructions with
|
|
20
|
+
[prefix caching](https://developer.android.com/agents/skills/device-ai/prompt-api/references/prefix-caching). In general, use system instructions for
|
|
21
|
+
short instructions that define how the model should behave; use prefix
|
|
22
|
+
caching if you need to repeat a large part of your prompt across queries and
|
|
23
|
+
need to optimize performance.
|
|
24
|
+
|
|
25
|
+
## How to use system instructions
|
|
26
|
+
|
|
27
|
+
To provide system instructions, create a `SystemInstruction` object and pass it
|
|
28
|
+
to the `GenerateContentRequest` builder:
|
|
29
|
+
|
|
30
|
+
import com.google.mlkit.genai.prompt.SystemInstruction
|
|
31
|
+
import com.google.mlkit.genai.prompt.TextPart
|
|
32
|
+
import com.google.mlkit.genai.prompt.generateContentRequest
|
|
33
|
+
|
|
34
|
+
// 1. Define the system instruction
|
|
35
|
+
val systemInstruction =
|
|
36
|
+
SystemInstruction("You are a concise assistant. Answer in 2 sentences or less.")
|
|
37
|
+
|
|
38
|
+
// 2. Create the request
|
|
39
|
+
val request = generateContentRequest(TextPart("How does photosynthesis work?")) {
|
|
40
|
+
this.systemInstruction = systemInstruction
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
// 3. Run inference
|
|
44
|
+
try {
|
|
45
|
+
val response = generativeModel.generateContent(request)
|
|
46
|
+
println(response.candidates.firstOrNull()?.text)
|
|
47
|
+
} catch (e: GenAiException) {
|
|
48
|
+
// Handle SDK-specific exceptions
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
You can further simplify the code by passing the system instructions directly
|
|
52
|
+
into the `generateContentRequest` request builder:
|
|
53
|
+
|
|
54
|
+
val request = generateContentRequest(
|
|
55
|
+
SystemInstruction("You are a pirate. Speak like one."),
|
|
56
|
+
TextPart("What is the weather like today?")
|
|
57
|
+
) {
|
|
58
|
+
// Optional configurations like temperature
|
|
59
|
+
temperature = 0.7f
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
## Best practices
|
|
63
|
+
|
|
64
|
+
Here are some best practices when using system instructions:
|
|
65
|
+
|
|
66
|
+
- **Be clear and direct:** The model follows clear, direct instructions better than ambiguous ones. Here are some examples:
|
|
67
|
+
- Vague (avoid): "Don't write too much. Try to be helpful and friendly, and format the output nicely."
|
|
68
|
+
- Clear (preferred): "You are a friendly customer support assistant. Limit your responses to a maximum of 3 sentences. Format any lists using bullet points."
|
|
69
|
+
- **Be concise:** While system instructions are powerful, very long instructions can consume the model's limited context window.
|
|
70
|
+
- **Factor in token counts:** Make sure that your token counting logic includes the system instructions to avoid underestimating request size. We recommend keeping your system instructions to under 150 words (100-200 tokens).
|
|
71
|
+
- **Test and iterate:** Model behavior can vary based on phrasing. Test with various user inputs to ensure the model maintains its persona consistently.
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# Android: On-device AI
|
|
2
|
+
|
|
3
|
+
App Functions and the ML Kit GenAI Prompt API.
|
|
4
|
+
|
|
5
|
+
| Guide | What it covers |
|
|
6
|
+
|---|---|
|
|
7
|
+
| [appfunctions](on-device-ai/appfunctions/GUIDE.md) | Analyzes Android apps to identify key user workflows for AppFunctions such as creating a note, playing media, or sending an automated or AI agent triggered message, voice commands, or system shortcuts, without needing to open the app UI. |
|
|
8
|
+
| [ml-kit-genai-prompt-api](on-device-ai/ml-kit-genai-prompt-api/GUIDE.md) | Analyzes Android codebases to implement ML Kit GenAI Prompt API. |
|
|
9
|
+
|
|
10
|
+
Each guide lives in its own folder with its references and scripts. Relative paths in a guide — and `<repo_root>` where a guide uses it — refer to that guide's folder.
|