vybekiit 0.4.0 → 0.6.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/dist/bin.js +840 -296
- package/dist/global-skills/add-ai/SKILL.md +53 -0
- package/dist/global-skills/add-analytics/SKILL.md +65 -0
- package/dist/global-skills/add-app-clip/SKILL.md +280 -0
- package/dist/global-skills/add-app-clip/agents/openai.yaml +4 -0
- package/dist/global-skills/add-app-clip/references/native-module.md +96 -0
- package/dist/global-skills/add-blog/SKILL.md +49 -0
- package/dist/global-skills/add-crud/SKILL.md +28 -0
- package/dist/global-skills/add-files/SKILL.md +65 -0
- package/dist/global-skills/add-images/SKILL.md +64 -0
- package/dist/global-skills/add-language/SKILL.md +44 -0
- package/dist/global-skills/add-notifications/SKILL.md +61 -0
- package/dist/global-skills/add-realtime/SKILL.md +49 -0
- package/dist/global-skills/add-route/SKILL.md +28 -0
- package/dist/global-skills/add-search/SKILL.md +43 -0
- package/dist/global-skills/add-signin/SKILL.md +78 -0
- package/dist/global-skills/add-teams/SKILL.md +64 -0
- package/dist/global-skills/add-upload/SKILL.md +27 -0
- package/dist/global-skills/aws-cdk/SKILL.md +72 -0
- package/dist/global-skills/aws-cdk/references/bootstrap-and-project-setup.md +257 -0
- package/dist/global-skills/aws-cdk/references/compliance-and-drift.md +193 -0
- package/dist/global-skills/aws-cdk/references/construct-patterns.md +315 -0
- package/dist/global-skills/aws-cdk/references/import-and-migrate.md +184 -0
- package/dist/global-skills/aws-cdk/references/refactor-and-prevent-replacement.md +198 -0
- package/dist/global-skills/aws-cdk/references/troubleshooting-credentials.md +183 -0
- package/dist/global-skills/aws-cdk/references/troubleshooting-deployment.md +293 -0
- package/dist/global-skills/aws-cdk/references/troubleshooting-synth.md +274 -0
- package/dist/global-skills/aws-cdk/references/v1-to-v2-migration.md +119 -0
- package/dist/global-skills/aws-cloudformation/SKILL.md +88 -0
- package/dist/global-skills/aws-cloudformation/references/author-cloudformation-best-practices.script.md +179 -0
- package/dist/global-skills/aws-cloudformation/references/check-cloudformation-template-compliance.script.md +159 -0
- package/dist/global-skills/aws-cloudformation/references/cloudformation-pre-deploy-validation.script.md +217 -0
- package/dist/global-skills/aws-cloudformation/references/deploy-with-express-mode.script.md +271 -0
- package/dist/global-skills/aws-cloudformation/references/lookup-resource-properties.script.md +130 -0
- package/dist/global-skills/aws-cloudformation/references/troubleshoot-deployment.script.md +200 -0
- package/dist/global-skills/aws-cloudformation/references/validate-cloudformation-template.script.md +135 -0
- package/dist/global-skills/aws-serverless/SKILL.md +51 -0
- package/dist/global-skills/aws-serverless/assets/powertools-handler.py +49 -0
- package/dist/global-skills/aws-serverless/references/api-gateway.md +553 -0
- package/dist/global-skills/aws-serverless/references/architecture.md +262 -0
- package/dist/global-skills/aws-serverless/references/concurrency.md +200 -0
- package/dist/global-skills/aws-serverless/references/deployment.md +94 -0
- package/dist/global-skills/aws-serverless/references/event-sources.md +484 -0
- package/dist/global-skills/aws-serverless/references/lambda.md +548 -0
- package/dist/global-skills/aws-serverless/references/orchestration.md +449 -0
- package/dist/global-skills/aws-serverless/references/production.md +493 -0
- package/dist/global-skills/aws-serverless/references/troubleshooting.md +711 -0
- package/dist/global-skills/back-up-my-code/SKILL.md +48 -0
- package/dist/global-skills/better-auth-best-practices/SKILL.md +182 -0
- package/dist/global-skills/better-auth-security-best-practices/SKILL.md +432 -0
- package/dist/global-skills/building-native-ui/SKILL.md +377 -0
- package/dist/global-skills/building-native-ui/agents/openai.yaml +4 -0
- package/dist/global-skills/building-native-ui/references/animations.md +220 -0
- package/dist/global-skills/building-native-ui/references/controls.md +270 -0
- package/dist/global-skills/building-native-ui/references/form-sheet.md +253 -0
- package/dist/global-skills/building-native-ui/references/gradients.md +106 -0
- package/dist/global-skills/building-native-ui/references/icons.md +213 -0
- package/dist/global-skills/building-native-ui/references/media.md +198 -0
- package/dist/global-skills/building-native-ui/references/route-structure.md +229 -0
- package/dist/global-skills/building-native-ui/references/search.md +248 -0
- package/dist/global-skills/building-native-ui/references/storage.md +121 -0
- package/dist/global-skills/building-native-ui/references/tabs.md +433 -0
- package/dist/global-skills/building-native-ui/references/toolbar-and-headers.md +284 -0
- package/dist/global-skills/building-native-ui/references/visual-effects.md +197 -0
- package/dist/global-skills/building-native-ui/references/webgpu-three.md +605 -0
- package/dist/global-skills/building-native-ui/references/zoom-transitions.md +158 -0
- package/dist/global-skills/buy-domain/SKILL.md +64 -0
- package/dist/global-skills/check-safety/SKILL.md +94 -0
- package/dist/global-skills/claimable-postgres/SKILL.md +249 -0
- package/dist/global-skills/configure-capabilities/SKILL.md +38 -0
- package/dist/global-skills/connect-account/SKILL.md +64 -0
- package/dist/global-skills/connect-account-backend/SKILL.md +41 -0
- package/dist/global-skills/create-auth-skill/SKILL.md +321 -0
- package/dist/global-skills/design-my-data/SKILL.md +48 -0
- package/dist/global-skills/doctor/SKILL.md +84 -0
- package/dist/global-skills/eas-app-stores/SKILL.md +152 -0
- package/dist/global-skills/eas-app-stores/agents/openai.yaml +4 -0
- package/dist/global-skills/eas-app-stores/references/app-store-metadata.md +497 -0
- package/dist/global-skills/eas-app-stores/references/ios-app-store.md +371 -0
- package/dist/global-skills/eas-app-stores/references/play-store.md +246 -0
- package/dist/global-skills/eas-app-stores/references/testflight.md +58 -0
- package/dist/global-skills/eas-app-stores/references/workflows.md +120 -0
- package/dist/global-skills/eas-hosting/SKILL.md +423 -0
- package/dist/global-skills/eas-hosting/agents/openai.yaml +4 -0
- package/dist/global-skills/eas-observe/SKILL.md +32 -0
- package/dist/global-skills/eas-observe/agents/openai.yaml +4 -0
- package/dist/global-skills/eas-observe/references/metrics.md +47 -0
- package/dist/global-skills/eas-observe/references/queries.md +342 -0
- package/dist/global-skills/eas-observe/references/setup.md +317 -0
- package/dist/global-skills/eas-simulator/SKILL.md +156 -0
- package/dist/global-skills/eas-simulator/agents/openai.yaml +4 -0
- package/dist/global-skills/eas-simulator/references/controllers.md +67 -0
- package/dist/global-skills/eas-simulator/references/run-your-app.md +185 -0
- package/dist/global-skills/eas-simulator/references/troubleshooting.md +38 -0
- package/dist/global-skills/eas-update-insights/SKILL.md +230 -0
- package/dist/global-skills/eas-update-insights/agents/openai.yaml +4 -0
- package/dist/global-skills/eas-update-insights/references/channel-insights-schema.md +47 -0
- package/dist/global-skills/eas-update-insights/references/update-insights-schema.md +69 -0
- package/dist/global-skills/eas-workflows/SKILL.md +94 -0
- package/dist/global-skills/eas-workflows/agents/openai.yaml +4 -0
- package/dist/global-skills/eas-workflows/scripts/fetch.js +109 -0
- package/dist/global-skills/eas-workflows/scripts/package.json +11 -0
- package/dist/global-skills/eas-workflows/scripts/validate.js +84 -0
- package/dist/global-skills/email-best-practices/SKILL.md +73 -0
- package/dist/global-skills/expo-api-routes/SKILL.md +368 -0
- package/dist/global-skills/expo-api-routes/agents/openai.yaml +4 -0
- package/dist/global-skills/expo-app-clip/SKILL.md +282 -0
- package/dist/global-skills/expo-app-clip/agents/openai.yaml +4 -0
- package/dist/global-skills/expo-app-clip/references/native-module.md +96 -0
- package/dist/global-skills/expo-brownfield/SKILL.md +54 -0
- package/dist/global-skills/expo-brownfield/agents/openai.yaml +4 -0
- package/dist/global-skills/expo-brownfield/references/brownfield-integrated.md +526 -0
- package/dist/global-skills/expo-brownfield/references/brownfield-isolated.md +402 -0
- package/dist/global-skills/expo-brownfield/references/comparison.md +63 -0
- package/dist/global-skills/expo-brownfield/references/troubleshooting.md +88 -0
- package/dist/global-skills/expo-cicd-workflows/SKILL.md +92 -0
- package/dist/global-skills/expo-cicd-workflows/agents/openai.yaml +4 -0
- package/dist/global-skills/expo-cicd-workflows/scripts/fetch.js +109 -0
- package/dist/global-skills/expo-cicd-workflows/scripts/package.json +11 -0
- package/dist/global-skills/expo-cicd-workflows/scripts/validate.js +84 -0
- package/dist/global-skills/expo-data-fetching/SKILL.md +449 -0
- package/dist/global-skills/expo-data-fetching/agents/openai.yaml +4 -0
- package/dist/global-skills/expo-data-fetching/references/expo-router-loaders.md +341 -0
- package/dist/global-skills/expo-data-fetching/references/offline-and-cancellation.md +68 -0
- package/dist/global-skills/expo-deployment/SKILL.md +167 -0
- package/dist/global-skills/expo-deployment/agents/openai.yaml +4 -0
- package/dist/global-skills/expo-deployment/references/app-store-metadata.md +497 -0
- package/dist/global-skills/expo-deployment/references/ios-app-store.md +371 -0
- package/dist/global-skills/expo-deployment/references/play-store.md +246 -0
- package/dist/global-skills/expo-deployment/references/testflight.md +58 -0
- package/dist/global-skills/expo-deployment/references/workflows.md +160 -0
- package/dist/global-skills/expo-dev-client/SKILL.md +174 -0
- package/dist/global-skills/expo-dev-client/agents/openai.yaml +4 -0
- package/dist/global-skills/expo-dom/SKILL.md +417 -0
- package/dist/global-skills/expo-dom/agents/openai.yaml +4 -0
- package/dist/global-skills/expo-examples/SKILL.md +99 -0
- package/dist/global-skills/expo-examples/agents/openai.yaml +4 -0
- package/dist/global-skills/expo-examples/references/catalog.md +105 -0
- package/dist/global-skills/expo-module/SKILL.md +141 -0
- package/dist/global-skills/expo-module/agents/openai.yaml +4 -0
- package/dist/global-skills/expo-module/references/config-plugin.md +90 -0
- package/dist/global-skills/expo-module/references/create-expo-module.md +206 -0
- package/dist/global-skills/expo-module/references/lifecycle.md +127 -0
- package/dist/global-skills/expo-module/references/module-config.md +48 -0
- package/dist/global-skills/expo-module/references/native-module.md +286 -0
- package/dist/global-skills/expo-module/references/native-view.md +171 -0
- package/dist/global-skills/expo-native-ui/SKILL.md +181 -0
- package/dist/global-skills/expo-native-ui/agents/openai.yaml +4 -0
- package/dist/global-skills/expo-native-ui/references/animations.md +220 -0
- package/dist/global-skills/expo-native-ui/references/controls.md +270 -0
- package/dist/global-skills/expo-native-ui/references/gradients.md +106 -0
- package/dist/global-skills/expo-native-ui/references/icons.md +213 -0
- package/dist/global-skills/expo-native-ui/references/media.md +198 -0
- package/dist/global-skills/expo-native-ui/references/storage.md +121 -0
- package/dist/global-skills/expo-native-ui/references/visual-effects.md +197 -0
- package/dist/global-skills/expo-native-ui/references/webgpu-three.md +605 -0
- package/dist/global-skills/expo-observe/SKILL.md +30 -0
- package/dist/global-skills/expo-observe/references/metrics.md +47 -0
- package/dist/global-skills/expo-observe/references/queries.md +342 -0
- package/dist/global-skills/expo-observe/references/setup.md +317 -0
- package/dist/global-skills/expo-router/SKILL.md +230 -0
- package/dist/global-skills/expo-router/agents/openai.yaml +4 -0
- package/dist/global-skills/expo-router/references/form-sheet.md +253 -0
- package/dist/global-skills/expo-router/references/route-structure.md +229 -0
- package/dist/global-skills/expo-router/references/search.md +248 -0
- package/dist/global-skills/expo-router/references/tabs.md +433 -0
- package/dist/global-skills/expo-router/references/toolbar-and-headers.md +284 -0
- package/dist/global-skills/expo-router/references/zoom-transitions.md +158 -0
- package/dist/global-skills/expo-skill-eval/SKILL.md +314 -0
- package/dist/global-skills/expo-skill-eval/agents/visual-grader.md +52 -0
- package/dist/global-skills/expo-skill-eval/references/design-rubric.md +45 -0
- package/dist/global-skills/expo-skill-eval/references/runtime-matrix.md +34 -0
- package/dist/global-skills/expo-skill-eval/scripts/check-static.sh +64 -0
- package/dist/global-skills/expo-skill-eval/scripts/clean-fixture.sh +56 -0
- package/dist/global-skills/expo-skill-eval/scripts/generate_viewer.py +450 -0
- package/dist/global-skills/expo-skill-eval/scripts/latest-sdk.sh +46 -0
- package/dist/global-skills/expo-skill-eval/scripts/make-fixture.sh +95 -0
- package/dist/global-skills/expo-skill-eval/scripts/make-workspace.sh +31 -0
- package/dist/global-skills/expo-skill-eval/scripts/snapshot-android.sh +284 -0
- package/dist/global-skills/expo-skill-eval/scripts/snapshot-ios.sh +132 -0
- package/dist/global-skills/expo-skill-eval/scripts/snapshot-web.sh +61 -0
- package/dist/global-skills/expo-skill-feedback/SKILL.md +54 -0
- package/dist/global-skills/expo-skill-feedback/agents/openai.yaml +4 -0
- package/dist/global-skills/expo-skill-feedback/scripts/skill-event.cjs +180 -0
- package/dist/global-skills/expo-skill-feedback/scripts/skill-feedback.cjs +118 -0
- package/dist/global-skills/expo-skill-feedback/scripts/telemetry.cjs +65 -0
- package/dist/global-skills/expo-skill-feedback/scripts/telemetry_common.cjs +171 -0
- package/dist/global-skills/expo-tailwind-setup/SKILL.md +480 -0
- package/dist/global-skills/expo-tailwind-setup/agents/openai.yaml +4 -0
- package/dist/global-skills/expo-ui/SKILL.md +47 -0
- package/dist/global-skills/expo-ui/agents/openai.yaml +4 -0
- package/dist/global-skills/expo-ui/references/drop-in-replacements.md +27 -0
- package/dist/global-skills/expo-ui/references/jetpack-compose.md +73 -0
- package/dist/global-skills/expo-ui/references/swift-ui.md +73 -0
- package/dist/global-skills/expo-ui/references/universal.md +73 -0
- package/dist/global-skills/expo-ui/scripts/list-components.js +193 -0
- package/dist/global-skills/expo-upgrade/SKILL.md +134 -0
- package/dist/global-skills/expo-upgrade/agents/openai.yaml +4 -0
- package/dist/global-skills/expo-upgrade/references/expo-av-to-audio.md +132 -0
- package/dist/global-skills/expo-upgrade/references/expo-av-to-video.md +160 -0
- package/dist/global-skills/expo-upgrade/references/native-tabs.md +124 -0
- package/dist/global-skills/expo-upgrade/references/new-architecture.md +79 -0
- package/dist/global-skills/expo-upgrade/references/react-19.md +79 -0
- package/dist/global-skills/expo-upgrade/references/react-compiler.md +59 -0
- package/dist/global-skills/expo-upgrade/references/react-navigation-to-expo-router.md +61 -0
- package/dist/global-skills/expo-web-to-native/SKILL.md +83 -0
- package/dist/global-skills/expo-web-to-native/agents/openai.yaml +4 -0
- package/dist/global-skills/expo-web-to-native/references/false-friends.md +119 -0
- package/dist/global-skills/expo-web-to-native/references/native-patterns.md +39 -0
- package/dist/global-skills/expo-web-to-native/references/run-as-goal.md +48 -0
- package/dist/global-skills/expo-web-to-native/references/verify-on-device.md +45 -0
- package/dist/global-skills/firebase-ai-logic-basics/SKILL.md +165 -0
- package/dist/global-skills/firebase-ai-logic-basics/references/flutter_setup.md +95 -0
- package/dist/global-skills/firebase-ai-logic-basics/references/ios_setup.md +156 -0
- package/dist/global-skills/firebase-ai-logic-basics/references/usage_patterns_android.md +157 -0
- package/dist/global-skills/firebase-ai-logic-basics/references/usage_patterns_web.md +186 -0
- package/dist/global-skills/firebase-app-hosting-basics/SKILL.md +73 -0
- package/dist/global-skills/firebase-app-hosting-basics/references/cli_commands.md +85 -0
- package/dist/global-skills/firebase-app-hosting-basics/references/configuration.md +59 -0
- package/dist/global-skills/firebase-app-hosting-basics/references/emulation.md +59 -0
- package/dist/global-skills/firebase-auth-basics/SKILL.md +118 -0
- package/dist/global-skills/firebase-auth-basics/references/client_sdk_android.md +160 -0
- package/dist/global-skills/firebase-auth-basics/references/client_sdk_web.md +301 -0
- package/dist/global-skills/firebase-auth-basics/references/flutter_setup.md +149 -0
- package/dist/global-skills/firebase-auth-basics/references/ios_setup.md +87 -0
- package/dist/global-skills/firebase-auth-basics/references/security_rules.md +49 -0
- package/dist/global-skills/firebase-basics/SKILL.md +148 -0
- package/dist/global-skills/firebase-basics/references/android_setup.md +41 -0
- package/dist/global-skills/firebase-basics/references/firebase-cli-guide.md +18 -0
- package/dist/global-skills/firebase-basics/references/firebase-service-init.md +20 -0
- package/dist/global-skills/firebase-basics/references/flutter_setup.md +143 -0
- package/dist/global-skills/firebase-basics/references/ios_setup.md +113 -0
- package/dist/global-skills/firebase-basics/references/local-env-setup.md +80 -0
- package/dist/global-skills/firebase-basics/references/refresh/android_studio.md +41 -0
- package/dist/global-skills/firebase-basics/references/refresh/antigravity.md +64 -0
- package/dist/global-skills/firebase-basics/references/refresh/claude.md +12 -0
- package/dist/global-skills/firebase-basics/references/refresh/gemini-cli.md +13 -0
- package/dist/global-skills/firebase-basics/references/refresh/other-agents.md +67 -0
- package/dist/global-skills/firebase-basics/references/setup/android_studio.md +23 -0
- package/dist/global-skills/firebase-basics/references/setup/antigravity.md +98 -0
- package/dist/global-skills/firebase-basics/references/setup/claude_code.md +45 -0
- package/dist/global-skills/firebase-basics/references/setup/cursor.md +93 -0
- package/dist/global-skills/firebase-basics/references/setup/gemini_cli.md +53 -0
- package/dist/global-skills/firebase-basics/references/setup/github_copilot.md +104 -0
- package/dist/global-skills/firebase-basics/references/setup/other_agents.md +99 -0
- package/dist/global-skills/firebase-basics/references/web_setup.md +77 -0
- package/dist/global-skills/firebase-crashlytics/SKILL.md +42 -0
- package/dist/global-skills/firebase-crashlytics/references/android_setup.md +152 -0
- package/dist/global-skills/firebase-crashlytics/references/ios_setup.md +115 -0
- package/dist/global-skills/firebase-data-connect/SKILL.md +191 -0
- package/dist/global-skills/firebase-data-connect/examples.md +638 -0
- package/dist/global-skills/firebase-data-connect/reference/cloud_functions.md +184 -0
- package/dist/global-skills/firebase-data-connect/reference/config.md +271 -0
- package/dist/global-skills/firebase-data-connect/reference/data_seeding.md +185 -0
- package/dist/global-skills/firebase-data-connect/reference/native_sql.md +170 -0
- package/dist/global-skills/firebase-data-connect/reference/operations.md +385 -0
- package/dist/global-skills/firebase-data-connect/reference/realtime.md +210 -0
- package/dist/global-skills/firebase-data-connect/reference/schema.md +290 -0
- package/dist/global-skills/firebase-data-connect/reference/sdk_admin_node.md +141 -0
- package/dist/global-skills/firebase-data-connect/reference/sdk_android.md +126 -0
- package/dist/global-skills/firebase-data-connect/reference/sdk_flutter.md +134 -0
- package/dist/global-skills/firebase-data-connect/reference/sdk_ios.md +157 -0
- package/dist/global-skills/firebase-data-connect/reference/sdk_web.md +146 -0
- package/dist/global-skills/firebase-data-connect/reference/search.md +264 -0
- package/dist/global-skills/firebase-data-connect/reference/security.md +295 -0
- package/dist/global-skills/firebase-data-connect/templates.md +318 -0
- package/dist/global-skills/firebase-firestore/SKILL.md +89 -0
- package/dist/global-skills/firebase-firestore/references/enterprise/android_sdk_usage.md +230 -0
- package/dist/global-skills/firebase-firestore/references/enterprise/data_model.md +66 -0
- package/dist/global-skills/firebase-firestore/references/enterprise/flutter_setup.md +180 -0
- package/dist/global-skills/firebase-firestore/references/enterprise/indexes.md +135 -0
- package/dist/global-skills/firebase-firestore/references/enterprise/ios_setup.md +189 -0
- package/dist/global-skills/firebase-firestore/references/enterprise/provisioning.md +118 -0
- package/dist/global-skills/firebase-firestore/references/enterprise/python_sdk_usage.md +138 -0
- package/dist/global-skills/firebase-firestore/references/enterprise/security_rules.md +577 -0
- package/dist/global-skills/firebase-firestore/references/enterprise/web_sdk_usage.md +127 -0
- package/dist/global-skills/firebase-firestore/references/standard/android_sdk_usage.md +193 -0
- package/dist/global-skills/firebase-firestore/references/standard/flutter_setup.md +176 -0
- package/dist/global-skills/firebase-firestore/references/standard/indexes.md +113 -0
- package/dist/global-skills/firebase-firestore/references/standard/ios_setup.md +174 -0
- package/dist/global-skills/firebase-firestore/references/standard/provisioning.md +110 -0
- package/dist/global-skills/firebase-firestore/references/standard/security_rules.md +577 -0
- package/dist/global-skills/firebase-firestore/references/standard/web_sdk_usage.md +192 -0
- package/dist/global-skills/firebase-hosting-basics/SKILL.md +64 -0
- package/dist/global-skills/firebase-hosting-basics/references/configuration.md +115 -0
- package/dist/global-skills/firebase-hosting-basics/references/deploying.md +48 -0
- package/dist/global-skills/firebase-remote-config-basics/SKILL.md +124 -0
- package/dist/global-skills/firebase-remote-config-basics/references/android_setup.md +91 -0
- package/dist/global-skills/firebase-remote-config-basics/references/ios_setup.md +89 -0
- package/dist/global-skills/firebase-security-rules-auditor/SKILL.md +70 -0
- package/dist/global-skills/go-live/SKILL.md +90 -0
- package/dist/global-skills/harden/SKILL.md +101 -0
- package/dist/global-skills/instrument-feature-flags/SKILL.md +88 -0
- package/dist/global-skills/instrument-feature-flags/references/adding-feature-flag-code.md +3578 -0
- package/dist/global-skills/instrument-feature-flags/references/android.md +146 -0
- package/dist/global-skills/instrument-feature-flags/references/api.md +194 -0
- package/dist/global-skills/instrument-feature-flags/references/best-practices.md +231 -0
- package/dist/global-skills/instrument-feature-flags/references/django.md +263 -0
- package/dist/global-skills/instrument-feature-flags/references/dotnet.md +763 -0
- package/dist/global-skills/instrument-feature-flags/references/elixir.md +47 -0
- package/dist/global-skills/instrument-feature-flags/references/flask.md +131 -0
- package/dist/global-skills/instrument-feature-flags/references/flutter.md +212 -0
- package/dist/global-skills/instrument-feature-flags/references/go.md +208 -0
- package/dist/global-skills/instrument-feature-flags/references/ios.md +146 -0
- package/dist/global-skills/instrument-feature-flags/references/java.md +94 -0
- package/dist/global-skills/instrument-feature-flags/references/laravel.md +170 -0
- package/dist/global-skills/instrument-feature-flags/references/next-js.md +383 -0
- package/dist/global-skills/instrument-feature-flags/references/nodejs.md +216 -0
- package/dist/global-skills/instrument-feature-flags/references/php.md +187 -0
- package/dist/global-skills/instrument-feature-flags/references/python.md +191 -0
- package/dist/global-skills/instrument-feature-flags/references/react-native.md +166 -0
- package/dist/global-skills/instrument-feature-flags/references/react.md +302 -0
- package/dist/global-skills/instrument-feature-flags/references/ruby-on-rails.md +604 -0
- package/dist/global-skills/instrument-feature-flags/references/ruby.md +200 -0
- package/dist/global-skills/instrument-feature-flags/references/rust.md +222 -0
- package/dist/global-skills/instrument-feature-flags/references/usage.md +600 -0
- package/dist/global-skills/instrument-feature-flags/references/web.md +193 -0
- package/dist/global-skills/instrument-product-analytics/SKILL.md +139 -0
- package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-android.md +1639 -0
- package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-angular.md +944 -0
- package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-astro-hybrid.md +1001 -0
- package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-astro-ssr.md +1004 -0
- package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-astro-static.md +720 -0
- package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-astro-view-transitions.md +810 -0
- package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-django.md +1167 -0
- package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-expo.md +1412 -0
- package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-fastapi.md +1585 -0
- package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-flask.md +1208 -0
- package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-laravel.md +2267 -0
- package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-next-app-router.md +712 -0
- package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-next-pages-router.md +767 -0
- package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-nuxt-3-6.md +939 -0
- package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-nuxt-4.md +1078 -0
- package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-php.md +527 -0
- package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-python.md +481 -0
- package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-react-native.md +1823 -0
- package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-react-react-router-6.md +582 -0
- package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-react-react-router-7-data.md +892 -0
- package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-react-react-router-7-declarative.md +649 -0
- package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-react-react-router-7-framework.md +1218 -0
- package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-react-tanstack-router-code-based.md +793 -0
- package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-react-tanstack-router-file-based.md +780 -0
- package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-ruby-on-rails.md +1320 -0
- package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-ruby.md +452 -0
- package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-sveltekit.md +854 -0
- package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-swift.md +665 -0
- package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-tanstack-start.md +1199 -0
- package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-vue-3.md +910 -0
- package/dist/global-skills/instrument-product-analytics/references/android.md +811 -0
- package/dist/global-skills/instrument-product-analytics/references/angular.md +376 -0
- package/dist/global-skills/instrument-product-analytics/references/astro.md +165 -0
- package/dist/global-skills/instrument-product-analytics/references/configuration.md +299 -0
- package/dist/global-skills/instrument-product-analytics/references/django.md +263 -0
- package/dist/global-skills/instrument-product-analytics/references/dotnet.md +763 -0
- package/dist/global-skills/instrument-product-analytics/references/elixir.md +414 -0
- package/dist/global-skills/instrument-product-analytics/references/flask.md +131 -0
- package/dist/global-skills/instrument-product-analytics/references/flutter.md +845 -0
- package/dist/global-skills/instrument-product-analytics/references/go.md +567 -0
- package/dist/global-skills/instrument-product-analytics/references/identify-users.md +272 -0
- package/dist/global-skills/instrument-product-analytics/references/ios.md +154 -0
- package/dist/global-skills/instrument-product-analytics/references/laravel.md +170 -0
- package/dist/global-skills/instrument-product-analytics/references/next-js.md +383 -0
- package/dist/global-skills/instrument-product-analytics/references/nuxt-js-3-6.md +244 -0
- package/dist/global-skills/instrument-product-analytics/references/nuxt-js.md +253 -0
- package/dist/global-skills/instrument-product-analytics/references/php.md +646 -0
- package/dist/global-skills/instrument-product-analytics/references/posthog-python.md +1675 -0
- package/dist/global-skills/instrument-product-analytics/references/python.md +898 -0
- package/dist/global-skills/instrument-product-analytics/references/react-native.md +1338 -0
- package/dist/global-skills/instrument-product-analytics/references/react-router-v6.md +376 -0
- package/dist/global-skills/instrument-product-analytics/references/react-router-v7-data-mode.md +364 -0
- package/dist/global-skills/instrument-product-analytics/references/react-router-v7-declarative-mode.md +376 -0
- package/dist/global-skills/instrument-product-analytics/references/react-router-v7-framework-mode.md +479 -0
- package/dist/global-skills/instrument-product-analytics/references/ruby-on-rails.md +604 -0
- package/dist/global-skills/instrument-product-analytics/references/ruby.md +759 -0
- package/dist/global-skills/instrument-product-analytics/references/svelte.md +234 -0
- package/dist/global-skills/instrument-product-analytics/references/tanstack-start.md +193 -0
- package/dist/global-skills/instrument-product-analytics/references/usage.md +600 -0
- package/dist/global-skills/instrument-product-analytics/references/vue-js.md +306 -0
- package/dist/global-skills/manifest.json +125 -0
- package/dist/global-skills/mongodb-atlas-stream-processing/SKILL.md +284 -0
- package/dist/global-skills/mongodb-atlas-stream-processing/references/connection-configs.md +298 -0
- package/dist/global-skills/mongodb-atlas-stream-processing/references/development-workflow.md +304 -0
- package/dist/global-skills/mongodb-atlas-stream-processing/references/mcp-troubleshooting.md +55 -0
- package/dist/global-skills/mongodb-atlas-stream-processing/references/output-diagnostics.md +150 -0
- package/dist/global-skills/mongodb-atlas-stream-processing/references/pipeline-patterns.md +457 -0
- package/dist/global-skills/mongodb-atlas-stream-processing/references/sizing-and-parallelism.md +178 -0
- package/dist/global-skills/mongodb-connection/SKILL.md +201 -0
- package/dist/global-skills/mongodb-connection/references/monitoring-guide.md +191 -0
- package/dist/global-skills/mongodb-mcp-setup/SKILL.md +324 -0
- package/dist/global-skills/mongodb-natural-language-querying/SKILL.md +195 -0
- package/dist/global-skills/mongodb-query-optimizer/SKILL.md +150 -0
- package/dist/global-skills/mongodb-query-optimizer/references/aggregation-optimization.md +210 -0
- package/dist/global-skills/mongodb-query-optimizer/references/antipattern-examples.md +74 -0
- package/dist/global-skills/mongodb-query-optimizer/references/core-indexing-principles.md +134 -0
- package/dist/global-skills/mongodb-query-optimizer/references/update-query-examples.md +39 -0
- package/dist/global-skills/mongodb-schema-design/SKILL.md +181 -0
- package/dist/global-skills/mongodb-schema-design/references/antipattern-excessive-lookups.md +84 -0
- package/dist/global-skills/mongodb-schema-design/references/antipattern-unnecessary-collections.md +91 -0
- package/dist/global-skills/mongodb-schema-design/references/antipattern-unnecessary-indexes.md +95 -0
- package/dist/global-skills/mongodb-schema-design/references/fundamental-document-model.md +91 -0
- package/dist/global-skills/mongodb-schema-design/references/fundamental-document-size.md +226 -0
- package/dist/global-skills/mongodb-schema-design/references/fundamental-embed-vs-reference.md +418 -0
- package/dist/global-skills/mongodb-schema-design/references/fundamental-schema-validation.md +131 -0
- package/dist/global-skills/mongodb-schema-design/references/pattern-approximation.md +80 -0
- package/dist/global-skills/mongodb-schema-design/references/pattern-archive.md +143 -0
- package/dist/global-skills/mongodb-schema-design/references/pattern-attribute.md +77 -0
- package/dist/global-skills/mongodb-schema-design/references/pattern-bucket.md +102 -0
- package/dist/global-skills/mongodb-schema-design/references/pattern-computed.md +162 -0
- package/dist/global-skills/mongodb-schema-design/references/pattern-document-versioning.md +166 -0
- package/dist/global-skills/mongodb-schema-design/references/pattern-extended-reference.md +72 -0
- package/dist/global-skills/mongodb-schema-design/references/pattern-outlier.md +159 -0
- package/dist/global-skills/mongodb-schema-design/references/pattern-polymorphic.md +167 -0
- package/dist/global-skills/mongodb-schema-design/references/pattern-schema-versioning.md +273 -0
- package/dist/global-skills/mongodb-schema-design/references/pattern-time-series-collections.md +190 -0
- package/dist/global-skills/mongodb-schema-design/references/source-query-stats.md +123 -0
- package/dist/global-skills/mongodb-schema-design/references/source-slow-query-logs.md +63 -0
- package/dist/global-skills/mongodb-search-and-ai/SKILL.md +142 -0
- package/dist/global-skills/mongodb-search-and-ai/references/hybrid-search.md +697 -0
- package/dist/global-skills/mongodb-search-and-ai/references/lexical-search-indexing.md +584 -0
- package/dist/global-skills/mongodb-search-and-ai/references/lexical-search-querying.md +636 -0
- package/dist/global-skills/mongodb-search-and-ai/references/vector-search.md +746 -0
- package/dist/global-skills/native-data-fetching/SKILL.md +505 -0
- package/dist/global-skills/native-data-fetching/agents/openai.yaml +4 -0
- package/dist/global-skills/native-data-fetching/references/expo-router-loaders.md +341 -0
- package/dist/global-skills/neon/SKILL.md +343 -0
- package/dist/global-skills/neon-ai-gateway/SKILL.md +236 -0
- package/dist/global-skills/neon-functions/SKILL.md +490 -0
- package/dist/global-skills/neon-functions/references/ai-sdk.md +139 -0
- package/dist/global-skills/neon-functions/references/hono-websockets.md +145 -0
- package/dist/global-skills/neon-functions/references/mastra-studio.md +127 -0
- package/dist/global-skills/neon-functions/references/mcp.md +137 -0
- package/dist/global-skills/neon-functions/references/sentry.md +131 -0
- package/dist/global-skills/neon-functions/references/sse.md +143 -0
- package/dist/global-skills/neon-object-storage/SKILL.md +197 -0
- package/dist/global-skills/neon-postgres/SKILL.md +376 -0
- package/dist/global-skills/neon-postgres-branches/SKILL.md +281 -0
- package/dist/global-skills/neon-postgres-egress-optimizer/SKILL.md +247 -0
- package/dist/global-skills/onboarding/SKILL.md +101 -0
- package/dist/global-skills/plan-my-idea/SKILL.md +67 -0
- package/dist/global-skills/publish-app/SKILL.md +72 -0
- package/dist/global-skills/publish-extension/SKILL.md +47 -0
- package/dist/global-skills/resend/SKILL.md +294 -0
- package/dist/global-skills/resend/references/api-keys.md +98 -0
- package/dist/global-skills/resend/references/automations.md +228 -0
- package/dist/global-skills/resend/references/broadcasts.md +125 -0
- package/dist/global-skills/resend/references/contact-properties.md +111 -0
- package/dist/global-skills/resend/references/contacts.md +174 -0
- package/dist/global-skills/resend/references/domains.md +179 -0
- package/dist/global-skills/resend/references/events.md +119 -0
- package/dist/global-skills/resend/references/fetch-all-templates.mjs +37 -0
- package/dist/global-skills/resend/references/installation.md +142 -0
- package/dist/global-skills/resend/references/logs.md +161 -0
- package/dist/global-skills/resend/references/receiving.md +287 -0
- package/dist/global-skills/resend/references/segments.md +77 -0
- package/dist/global-skills/resend/references/sending/batch-email-examples.md +807 -0
- package/dist/global-skills/resend/references/sending/best-practices.md +453 -0
- package/dist/global-skills/resend/references/sending/email-management.md +135 -0
- package/dist/global-skills/resend/references/sending/overview.md +209 -0
- package/dist/global-skills/resend/references/sending/single-email-examples.md +470 -0
- package/dist/global-skills/resend/references/templates.md +202 -0
- package/dist/global-skills/resend/references/topics.md +104 -0
- package/dist/global-skills/resend/references/webhooks.md +317 -0
- package/dist/global-skills/reset-password/SKILL.md +59 -0
- package/dist/global-skills/save-data/SKILL.md +70 -0
- package/dist/global-skills/sentry-sdk-setup/SKILL.md +116 -0
- package/dist/global-skills/sentry-workflow/SKILL.md +32 -0
- package/dist/global-skills/setup-email/SKILL.md +69 -0
- package/dist/global-skills/setup-payments/SKILL.md +82 -0
- package/dist/global-skills/setup-sms/SKILL.md +51 -0
- package/dist/global-skills/sign-in-with-email-link/SKILL.md +53 -0
- package/dist/global-skills/sign-in-with-google/SKILL.md +68 -0
- package/dist/global-skills/sign-in-with-phone/SKILL.md +53 -0
- package/dist/global-skills/stripe-best-practices/SKILL.md +48 -0
- package/dist/global-skills/stripe-best-practices/references/billing.md +58 -0
- package/dist/global-skills/stripe-best-practices/references/connect.md +173 -0
- package/dist/global-skills/stripe-best-practices/references/payments.md +79 -0
- package/dist/global-skills/stripe-best-practices/references/security.md +109 -0
- package/dist/global-skills/stripe-best-practices/references/tax.md +37 -0
- package/dist/global-skills/stripe-best-practices/references/treasury.md +16 -0
- package/dist/global-skills/supabase/CHANGELOG.md +53 -0
- package/dist/global-skills/supabase/SKILL.md +145 -0
- package/dist/global-skills/supabase/assets/feedback-issue-template.md +17 -0
- package/dist/global-skills/supabase/references/skill-feedback.md +17 -0
- package/dist/global-skills/supabase-postgres-best-practices/CHANGELOG.md +43 -0
- package/dist/global-skills/supabase-postgres-best-practices/SKILL.md +64 -0
- package/dist/global-skills/supabase-postgres-best-practices/references/_contributing.md +170 -0
- package/dist/global-skills/supabase-postgres-best-practices/references/_sections.md +39 -0
- package/dist/global-skills/supabase-postgres-best-practices/references/_template.md +34 -0
- package/dist/global-skills/supabase-postgres-best-practices/references/advanced-full-text-search.md +55 -0
- package/dist/global-skills/supabase-postgres-best-practices/references/advanced-jsonb-indexing.md +49 -0
- package/dist/global-skills/supabase-postgres-best-practices/references/conn-idle-timeout.md +46 -0
- package/dist/global-skills/supabase-postgres-best-practices/references/conn-limits.md +44 -0
- package/dist/global-skills/supabase-postgres-best-practices/references/conn-pooling.md +41 -0
- package/dist/global-skills/supabase-postgres-best-practices/references/conn-prepared-statements.md +46 -0
- package/dist/global-skills/supabase-postgres-best-practices/references/data-batch-inserts.md +54 -0
- package/dist/global-skills/supabase-postgres-best-practices/references/data-n-plus-one.md +53 -0
- package/dist/global-skills/supabase-postgres-best-practices/references/data-pagination.md +50 -0
- package/dist/global-skills/supabase-postgres-best-practices/references/data-upsert.md +50 -0
- package/dist/global-skills/supabase-postgres-best-practices/references/lock-advisory.md +56 -0
- package/dist/global-skills/supabase-postgres-best-practices/references/lock-deadlock-prevention.md +68 -0
- package/dist/global-skills/supabase-postgres-best-practices/references/lock-short-transactions.md +50 -0
- package/dist/global-skills/supabase-postgres-best-practices/references/lock-skip-locked.md +54 -0
- package/dist/global-skills/supabase-postgres-best-practices/references/monitor-explain-analyze.md +45 -0
- package/dist/global-skills/supabase-postgres-best-practices/references/monitor-pg-stat-statements.md +55 -0
- package/dist/global-skills/supabase-postgres-best-practices/references/monitor-vacuum-analyze.md +55 -0
- package/dist/global-skills/supabase-postgres-best-practices/references/query-composite-indexes.md +44 -0
- package/dist/global-skills/supabase-postgres-best-practices/references/query-covering-indexes.md +40 -0
- package/dist/global-skills/supabase-postgres-best-practices/references/query-index-types.md +48 -0
- package/dist/global-skills/supabase-postgres-best-practices/references/query-missing-indexes.md +43 -0
- package/dist/global-skills/supabase-postgres-best-practices/references/query-partial-indexes.md +45 -0
- package/dist/global-skills/supabase-postgres-best-practices/references/schema-constraints.md +80 -0
- package/dist/global-skills/supabase-postgres-best-practices/references/schema-data-types.md +46 -0
- package/dist/global-skills/supabase-postgres-best-practices/references/schema-foreign-key-indexes.md +59 -0
- package/dist/global-skills/supabase-postgres-best-practices/references/schema-lowercase-identifiers.md +55 -0
- package/dist/global-skills/supabase-postgres-best-practices/references/schema-partitioning.md +55 -0
- package/dist/global-skills/supabase-postgres-best-practices/references/schema-primary-keys.md +61 -0
- package/dist/global-skills/supabase-postgres-best-practices/references/security-privileges.md +54 -0
- package/dist/global-skills/supabase-postgres-best-practices/references/security-rls-basics.md +50 -0
- package/dist/global-skills/supabase-postgres-best-practices/references/security-rls-performance.md +63 -0
- package/dist/global-skills/track-errors/SKILL.md +67 -0
- package/dist/global-skills/update-kit/SKILL.md +75 -0
- package/dist/global-skills/upgrading-expo/SKILL.md +134 -0
- package/dist/global-skills/upgrading-expo/agents/openai.yaml +4 -0
- package/dist/global-skills/upgrading-expo/references/expo-av-to-audio.md +132 -0
- package/dist/global-skills/upgrading-expo/references/expo-av-to-video.md +160 -0
- package/dist/global-skills/upgrading-expo/references/native-tabs.md +124 -0
- package/dist/global-skills/upgrading-expo/references/new-architecture.md +79 -0
- package/dist/global-skills/upgrading-expo/references/react-19.md +79 -0
- package/dist/global-skills/upgrading-expo/references/react-compiler.md +59 -0
- package/dist/global-skills/upgrading-expo/references/react-navigation-to-expo-router.md +61 -0
- package/dist/global-skills/use-dom/SKILL.md +417 -0
- package/dist/global-skills/use-dom/agents/openai.yaml +4 -0
- package/dist/global-skills/use-kit-mcp/SKILL.md +100 -0
- package/dist/global-skills/use-railway/SKILL.md +357 -0
- package/dist/global-skills/use-railway/references/analyze-db-mongo.md +84 -0
- package/dist/global-skills/use-railway/references/analyze-db-mysql.md +254 -0
- package/dist/global-skills/use-railway/references/analyze-db-postgres.md +479 -0
- package/dist/global-skills/use-railway/references/analyze-db-redis.md +208 -0
- package/dist/global-skills/use-railway/references/analyze-db.md +344 -0
- package/dist/global-skills/use-railway/references/configure.md +359 -0
- package/dist/global-skills/use-railway/references/deploy.md +225 -0
- package/dist/global-skills/use-railway/references/feature-flags.md +89 -0
- package/dist/global-skills/use-railway/references/iac.md +108 -0
- package/dist/global-skills/use-railway/references/operate.md +273 -0
- package/dist/global-skills/use-railway/references/request.md +262 -0
- package/dist/global-skills/use-railway/references/sandbox.md +167 -0
- package/dist/global-skills/use-railway/references/setup.md +364 -0
- package/dist/global-skills/use-railway/scripts/analyze-mongo.py +1549 -0
- package/dist/global-skills/use-railway/scripts/analyze-mysql.py +1195 -0
- package/dist/global-skills/use-railway/scripts/analyze-postgres.py +3058 -0
- package/dist/global-skills/use-railway/scripts/analyze-redis.py +1090 -0
- package/dist/global-skills/use-railway/scripts/dal.py +671 -0
- package/dist/global-skills/use-railway/scripts/enable-pg-stats.py +170 -0
- package/dist/global-skills/use-railway/scripts/pg-extensions.py +370 -0
- package/dist/global-skills/use-railway/scripts/railway-api.sh +52 -0
- package/dist/global-skills/vercel-composition-patterns/AGENTS.md +946 -0
- package/dist/global-skills/vercel-composition-patterns/README.md +60 -0
- package/dist/global-skills/vercel-composition-patterns/SKILL.md +89 -0
- package/dist/global-skills/vercel-composition-patterns/metadata.json +11 -0
- package/dist/global-skills/vercel-composition-patterns/rules/_sections.md +29 -0
- package/dist/global-skills/vercel-composition-patterns/rules/_template.md +24 -0
- package/dist/global-skills/vercel-composition-patterns/rules/architecture-avoid-boolean-props.md +100 -0
- package/dist/global-skills/vercel-composition-patterns/rules/architecture-compound-components.md +112 -0
- package/dist/global-skills/vercel-composition-patterns/rules/patterns-children-over-render-props.md +87 -0
- package/dist/global-skills/vercel-composition-patterns/rules/patterns-explicit-variants.md +100 -0
- package/dist/global-skills/vercel-composition-patterns/rules/react19-no-forwardref.md +42 -0
- package/dist/global-skills/vercel-composition-patterns/rules/state-context-interface.md +191 -0
- package/dist/global-skills/vercel-composition-patterns/rules/state-decouple-implementation.md +113 -0
- package/dist/global-skills/vercel-composition-patterns/rules/state-lift-state.md +125 -0
- package/dist/global-skills/vercel-react-best-practices/AGENTS.md +3810 -0
- package/dist/global-skills/vercel-react-best-practices/README.md +123 -0
- package/dist/global-skills/vercel-react-best-practices/SKILL.md +149 -0
- package/dist/global-skills/vercel-react-best-practices/metadata.json +15 -0
- package/dist/global-skills/vercel-react-best-practices/rules/_sections.md +46 -0
- package/dist/global-skills/vercel-react-best-practices/rules/_template.md +28 -0
- package/dist/global-skills/vercel-react-best-practices/rules/advanced-effect-event-deps.md +56 -0
- package/dist/global-skills/vercel-react-best-practices/rules/advanced-event-handler-refs.md +55 -0
- package/dist/global-skills/vercel-react-best-practices/rules/advanced-init-once.md +42 -0
- package/dist/global-skills/vercel-react-best-practices/rules/advanced-use-latest.md +39 -0
- package/dist/global-skills/vercel-react-best-practices/rules/async-api-routes.md +38 -0
- package/dist/global-skills/vercel-react-best-practices/rules/async-cheap-condition-before-await.md +37 -0
- package/dist/global-skills/vercel-react-best-practices/rules/async-defer-await.md +82 -0
- package/dist/global-skills/vercel-react-best-practices/rules/async-dependencies.md +51 -0
- package/dist/global-skills/vercel-react-best-practices/rules/async-parallel.md +28 -0
- package/dist/global-skills/vercel-react-best-practices/rules/async-suspense-boundaries.md +99 -0
- package/dist/global-skills/vercel-react-best-practices/rules/bundle-analyzable-paths.md +63 -0
- package/dist/global-skills/vercel-react-best-practices/rules/bundle-barrel-imports.md +60 -0
- package/dist/global-skills/vercel-react-best-practices/rules/bundle-conditional.md +31 -0
- package/dist/global-skills/vercel-react-best-practices/rules/bundle-defer-third-party.md +49 -0
- package/dist/global-skills/vercel-react-best-practices/rules/bundle-dynamic-imports.md +35 -0
- package/dist/global-skills/vercel-react-best-practices/rules/bundle-preload.md +50 -0
- package/dist/global-skills/vercel-react-best-practices/rules/client-event-listeners.md +74 -0
- package/dist/global-skills/vercel-react-best-practices/rules/client-localstorage-schema.md +71 -0
- package/dist/global-skills/vercel-react-best-practices/rules/client-passive-event-listeners.md +48 -0
- package/dist/global-skills/vercel-react-best-practices/rules/client-swr-dedup.md +56 -0
- package/dist/global-skills/vercel-react-best-practices/rules/js-batch-dom-css.md +107 -0
- package/dist/global-skills/vercel-react-best-practices/rules/js-cache-function-results.md +80 -0
- package/dist/global-skills/vercel-react-best-practices/rules/js-cache-property-access.md +28 -0
- package/dist/global-skills/vercel-react-best-practices/rules/js-cache-storage.md +70 -0
- package/dist/global-skills/vercel-react-best-practices/rules/js-combine-iterations.md +32 -0
- package/dist/global-skills/vercel-react-best-practices/rules/js-early-exit.md +50 -0
- package/dist/global-skills/vercel-react-best-practices/rules/js-flatmap-filter.md +60 -0
- package/dist/global-skills/vercel-react-best-practices/rules/js-hoist-regexp.md +45 -0
- package/dist/global-skills/vercel-react-best-practices/rules/js-index-maps.md +37 -0
- package/dist/global-skills/vercel-react-best-practices/rules/js-length-check-first.md +49 -0
- package/dist/global-skills/vercel-react-best-practices/rules/js-min-max-loop.md +82 -0
- package/dist/global-skills/vercel-react-best-practices/rules/js-request-idle-callback.md +105 -0
- package/dist/global-skills/vercel-react-best-practices/rules/js-set-map-lookups.md +24 -0
- package/dist/global-skills/vercel-react-best-practices/rules/js-tosorted-immutable.md +57 -0
- package/dist/global-skills/vercel-react-best-practices/rules/rendering-activity.md +26 -0
- package/dist/global-skills/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
- package/dist/global-skills/vercel-react-best-practices/rules/rendering-conditional-render.md +40 -0
- package/dist/global-skills/vercel-react-best-practices/rules/rendering-content-visibility.md +38 -0
- package/dist/global-skills/vercel-react-best-practices/rules/rendering-hoist-jsx.md +46 -0
- package/dist/global-skills/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
- package/dist/global-skills/vercel-react-best-practices/rules/rendering-hydration-suppress-warning.md +30 -0
- package/dist/global-skills/vercel-react-best-practices/rules/rendering-resource-hints.md +85 -0
- package/dist/global-skills/vercel-react-best-practices/rules/rendering-script-defer-async.md +68 -0
- package/dist/global-skills/vercel-react-best-practices/rules/rendering-svg-precision.md +28 -0
- package/dist/global-skills/vercel-react-best-practices/rules/rendering-usetransition-loading.md +75 -0
- package/dist/global-skills/vercel-react-best-practices/rules/rerender-defer-reads.md +39 -0
- package/dist/global-skills/vercel-react-best-practices/rules/rerender-dependencies.md +45 -0
- package/dist/global-skills/vercel-react-best-practices/rules/rerender-derived-state-no-effect.md +40 -0
- package/dist/global-skills/vercel-react-best-practices/rules/rerender-derived-state.md +29 -0
- package/dist/global-skills/vercel-react-best-practices/rules/rerender-functional-setstate.md +74 -0
- package/dist/global-skills/vercel-react-best-practices/rules/rerender-lazy-state-init.md +58 -0
- package/dist/global-skills/vercel-react-best-practices/rules/rerender-memo-with-default-value.md +38 -0
- package/dist/global-skills/vercel-react-best-practices/rules/rerender-memo.md +44 -0
- package/dist/global-skills/vercel-react-best-practices/rules/rerender-move-effect-to-event.md +45 -0
- package/dist/global-skills/vercel-react-best-practices/rules/rerender-no-inline-components.md +82 -0
- package/dist/global-skills/vercel-react-best-practices/rules/rerender-simple-expression-in-memo.md +35 -0
- package/dist/global-skills/vercel-react-best-practices/rules/rerender-split-combined-hooks.md +64 -0
- package/dist/global-skills/vercel-react-best-practices/rules/rerender-transitions.md +40 -0
- package/dist/global-skills/vercel-react-best-practices/rules/rerender-use-deferred-value.md +59 -0
- package/dist/global-skills/vercel-react-best-practices/rules/rerender-use-ref-transient-values.md +73 -0
- package/dist/global-skills/vercel-react-best-practices/rules/server-after-nonblocking.md +73 -0
- package/dist/global-skills/vercel-react-best-practices/rules/server-auth-actions.md +96 -0
- package/dist/global-skills/vercel-react-best-practices/rules/server-cache-lru.md +41 -0
- package/dist/global-skills/vercel-react-best-practices/rules/server-cache-react.md +76 -0
- package/dist/global-skills/vercel-react-best-practices/rules/server-dedup-props.md +65 -0
- package/dist/global-skills/vercel-react-best-practices/rules/server-hoist-static-io.md +149 -0
- package/dist/global-skills/vercel-react-best-practices/rules/server-no-shared-module-state.md +50 -0
- package/dist/global-skills/vercel-react-best-practices/rules/server-parallel-fetching.md +83 -0
- package/dist/global-skills/vercel-react-best-practices/rules/server-parallel-nested-fetching.md +34 -0
- package/dist/global-skills/vercel-react-best-practices/rules/server-serialization.md +38 -0
- package/dist/global-skills/web-to-native/SKILL.md +83 -0
- package/dist/global-skills/web-to-native/references/false-friends.md +119 -0
- package/dist/global-skills/web-to-native/references/native-patterns.md +39 -0
- package/dist/global-skills/web-to-native/references/run-as-goal.md +48 -0
- package/dist/global-skills/web-to-native/references/verify-on-device.md +45 -0
- package/dist/global-skills/wire-auth/SKILL.md +28 -0
- package/dist/global-skills/wire-database/SKILL.md +28 -0
- package/dist/global-skills/wire-email/SKILL.md +27 -0
- package/dist/global-skills/wire-payments/SKILL.md +27 -0
- package/dist/global-skills/workers-best-practices/SKILL.md +127 -0
- package/dist/global-skills/workers-best-practices/references/review.md +174 -0
- package/dist/global-skills/workers-best-practices/references/rules.md +463 -0
- package/dist/global-skills/wrangler/SKILL.md +922 -0
- package/dist/global-skills/xcode-project-setup/SKILL.md +140 -0
- package/dist/global-skills/xcode-project-setup/scripts/xcode_spm_setup/Package.resolved +41 -0
- package/dist/global-skills/xcode-project-setup/scripts/xcode_spm_setup/Package.swift +17 -0
- package/dist/global-skills/xcode-project-setup/scripts/xcode_spm_setup/Sources/main.swift +232 -0
- package/package.json +21 -20
- package/LICENSE.md +0 -47
- package/dist/index.js +0 -21593
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Create the eval workspace directory tree for a run.
|
|
3
|
+
#
|
|
4
|
+
# Usage: make-workspace.sh <workspace> <iteration> <num-evals> [configs]
|
|
5
|
+
# workspace Run root, e.g. /private/tmp/expo-skill-eval-<skill>
|
|
6
|
+
# iteration Iteration folder name, e.g. "iteration-1"
|
|
7
|
+
# num-evals Number of eval cases; creates eval-0 .. eval-(N-1)
|
|
8
|
+
# configs Space- or comma-separated config names
|
|
9
|
+
# (default: "with_skill without_skill")
|
|
10
|
+
#
|
|
11
|
+
# Creates <workspace>/trigger-evals/scratch and, per eval x config,
|
|
12
|
+
# <workspace>/<iteration>/eval-<i>/<config>/outputs. Run this once at the
|
|
13
|
+
# start of a run instead of ad-hoc `mkdir` so the call is covered by the
|
|
14
|
+
# skill's `Bash(bash *expo-skill-eval/scripts/*)` rule (the mkdir calls
|
|
15
|
+
# inside run as children of this script and need no permission of their own).
|
|
16
|
+
set -euo pipefail
|
|
17
|
+
|
|
18
|
+
WORKSPACE="${1:?usage: make-workspace.sh <workspace> <iteration> <num-evals> [configs]}"
|
|
19
|
+
ITERATION="${2:?usage: make-workspace.sh <workspace> <iteration> <num-evals> [configs]}"
|
|
20
|
+
NUM_EVALS="${3:?usage: make-workspace.sh <workspace> <iteration> <num-evals> [configs]}"
|
|
21
|
+
CONFIGS="${4:-with_skill without_skill}"
|
|
22
|
+
CONFIGS="${CONFIGS//,/ }"
|
|
23
|
+
|
|
24
|
+
mkdir -p "$WORKSPACE/trigger-evals/scratch"
|
|
25
|
+
for ((i = 0; i < NUM_EVALS; i++)); do
|
|
26
|
+
for cfg in $CONFIGS; do
|
|
27
|
+
mkdir -p "$WORKSPACE/$ITERATION/eval-$i/$cfg/outputs"
|
|
28
|
+
done
|
|
29
|
+
done
|
|
30
|
+
|
|
31
|
+
echo "workspace ready: $WORKSPACE/$ITERATION ($NUM_EVALS evals x [$CONFIGS])"
|
|
@@ -0,0 +1,284 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Run an Expo app in Expo Go on an Android emulator and capture a screenshot.
|
|
3
|
+
#
|
|
4
|
+
# Usage: snapshot-android.sh <project-path> <output-png> [port] [settle-seconds]
|
|
5
|
+
#
|
|
6
|
+
# Env: EXPO_SKILL_EVAL_RUNNER = expo-go (default) | dev-build — dev-build runs the
|
|
7
|
+
# app via `expo run:android` (native dev-client compile, slow) instead of Expo Go.
|
|
8
|
+
#
|
|
9
|
+
# If no device is attached, boots the first available AVD and waits for it
|
|
10
|
+
# (the slow path - keep one emulator running across an eval session).
|
|
11
|
+
# Starts Metro with `expo start --android` (auto-installs Expo Go, sets up
|
|
12
|
+
# adb reverse, opens the app), waits for the bundle, settles, screenshots
|
|
13
|
+
# via screencap, and tears Metro down. The Metro log is saved next to the
|
|
14
|
+
# screenshot as <name>.metro.log. On bundle failure it still captures a
|
|
15
|
+
# best-effort screenshot and exits 1.
|
|
16
|
+
set -uo pipefail
|
|
17
|
+
|
|
18
|
+
PROJECT_PATH="${1:?usage: snapshot-android.sh <project-path> <output-png> [port] [settle-seconds]}"
|
|
19
|
+
OUT="${2:?usage: snapshot-android.sh <project-path> <output-png> [port] [settle-seconds]}"
|
|
20
|
+
PORT="${3:-8082}"
|
|
21
|
+
RUNNER="${EXPO_SKILL_EVAL_RUNNER:-expo-go}" # expo-go | dev-build
|
|
22
|
+
|
|
23
|
+
# Step-level logging with timestamp. Every major phase emits a marker so a
|
|
24
|
+
# crash report can be correlated to "which step was running when it died."
|
|
25
|
+
log_step() { echo "[$(date '+%H:%M:%S')] [snapshot-android] STEP: $*" >&2; }
|
|
26
|
+
|
|
27
|
+
# Track the emulator qemu PID so liveness checks in wait loops can detect a
|
|
28
|
+
# mid-flight crash and emit a clear "emulator crashed at step X" message.
|
|
29
|
+
EMULATOR_PID=""
|
|
30
|
+
|
|
31
|
+
emulator_alive() {
|
|
32
|
+
[[ -n "$EMULATOR_PID" ]] && kill -0 "$EMULATOR_PID" 2>/dev/null
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
log_step "start runner=$RUNNER port=$PORT project=$PROJECT_PATH"
|
|
36
|
+
|
|
37
|
+
# GPU mode is fixed to host (Metal on Apple Silicon, hardware-accelerated). The
|
|
38
|
+
# env-var knob was removed on purpose. If host self-aborts the emulator on a
|
|
39
|
+
# given machine (qemu SIGABRT deep in gfxstream/Metal — possible on Apple Silicon
|
|
40
|
+
# under load), change this to "guest" and bump SETTLE to ~25 (software rendering
|
|
41
|
+
# paints slowly). Avoid swiftshader_indirect — it hangs at boot on arm64.
|
|
42
|
+
GPU_MODE="host"
|
|
43
|
+
log_step "gpu_mode=$GPU_MODE"
|
|
44
|
+
|
|
45
|
+
SETTLE="${4:-8}"
|
|
46
|
+
|
|
47
|
+
if [[ "$RUNNER" == "dev-build" ]]; then
|
|
48
|
+
BUNDLE_TIMEOUT="${EXPO_SKILL_EVAL_BUNDLE_TIMEOUT:-900}" # native compile is slow
|
|
49
|
+
else
|
|
50
|
+
BUNDLE_TIMEOUT="${EXPO_SKILL_EVAL_BUNDLE_TIMEOUT:-240}"
|
|
51
|
+
fi
|
|
52
|
+
LOG="${OUT%.png}.metro.log"
|
|
53
|
+
|
|
54
|
+
mkdir -p "$(dirname "$OUT")"
|
|
55
|
+
|
|
56
|
+
# Free the port up front in case a previous run (or a crash) left Metro on it,
|
|
57
|
+
# so `expo start` binds the port we expect instead of silently incrementing.
|
|
58
|
+
# Runs inside this script, so the eval harness never needs ad-hoc lsof/kill.
|
|
59
|
+
lsof -ti "tcp:$PORT" -sTCP:LISTEN 2>/dev/null | xargs kill -9 2>/dev/null || true
|
|
60
|
+
|
|
61
|
+
find_sdk_tool() {
|
|
62
|
+
local tool="$1" subdir="$2"
|
|
63
|
+
if command -v "$tool" >/dev/null; then
|
|
64
|
+
command -v "$tool"
|
|
65
|
+
return
|
|
66
|
+
fi
|
|
67
|
+
local sdk
|
|
68
|
+
for sdk in "${ANDROID_HOME:-}" "${ANDROID_SDK_ROOT:-}" "$HOME/Library/Android/sdk" "$HOME/Android/Sdk"; do
|
|
69
|
+
if [[ -n "$sdk" && -x "$sdk/$subdir/$tool" ]]; then
|
|
70
|
+
echo "$sdk/$subdir/$tool"
|
|
71
|
+
return
|
|
72
|
+
fi
|
|
73
|
+
done
|
|
74
|
+
return 1
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
ADB="$(find_sdk_tool adb platform-tools)" || { echo "error: adb not found (set ANDROID_HOME)" >&2; exit 1; }
|
|
78
|
+
|
|
79
|
+
# Recycle a wedged emulator before the boot check. An "offline"/unresponsive
|
|
80
|
+
# emulator isn't in "device" state, so the check below would otherwise reuse it
|
|
81
|
+
# (and hang) or stack a second emulator beside it. Graceful console shutdown
|
|
82
|
+
# first; force-kill only the survivors, then reset adb to clear the stale entry —
|
|
83
|
+
# so the boot check sees a clean slate and cold-boots a fresh (swiftshader) one.
|
|
84
|
+
log_step "checking for wedged/offline emulators"
|
|
85
|
+
STALE="$("$ADB" devices | awk 'NR>1 && $1 ~ /^emulator-/ && $2!="device" {print $1}')"
|
|
86
|
+
if [[ -n "$STALE" ]]; then
|
|
87
|
+
echo "recycling wedged emulator(s): $STALE" >&2
|
|
88
|
+
for serial in $STALE; do
|
|
89
|
+
"$ADB" -s "$serial" emu kill 2>/dev/null || true # graceful: ask the console to quit
|
|
90
|
+
done
|
|
91
|
+
sleep 2
|
|
92
|
+
# Still wedged after the graceful attempt? Force-kill the qemu process(es) and
|
|
93
|
+
# reset the adb server to drop the stale "offline" entry. pkill is broad (all
|
|
94
|
+
# qemu emulators), which is fine here: the eval harness runs a single emulator.
|
|
95
|
+
if "$ADB" devices | awk 'NR>1 && $1 ~ /^emulator-/ && $2!="device"' | grep -q .; then
|
|
96
|
+
pkill -9 -f qemu-system-aarch64 2>/dev/null || true
|
|
97
|
+
"$ADB" kill-server 2>/dev/null || true
|
|
98
|
+
"$ADB" start-server 2>/dev/null || true
|
|
99
|
+
sleep 2
|
|
100
|
+
fi
|
|
101
|
+
fi
|
|
102
|
+
|
|
103
|
+
# GPU mismatch: if an emulator is already running with a different GPU mode than
|
|
104
|
+
# the one we need, recycle it so the boot path cold-starts with the correct mode.
|
|
105
|
+
# gfxstream (host GPU) uses a gRPC channel that can crash on Metro teardown via
|
|
106
|
+
# a bad_function_call SIGABRT; guest GPU avoids this by keeping rendering in-guest.
|
|
107
|
+
CURRENT_GPU="$(ps aux | grep qemu-system-aarch64 | grep -v grep | grep -o -- '-gpu [a-z_]*' | awk '{print $2}' | head -1)"
|
|
108
|
+
log_step "current_gpu=${CURRENT_GPU:-none} required=$GPU_MODE"
|
|
109
|
+
if [[ -n "$CURRENT_GPU" && "$CURRENT_GPU" != "$GPU_MODE" ]]; then
|
|
110
|
+
echo "GPU mismatch: running=$CURRENT_GPU required=$GPU_MODE — recycling emulator" >&2
|
|
111
|
+
"$ADB" emu kill 2>/dev/null || true
|
|
112
|
+
sleep 2
|
|
113
|
+
pkill -9 -f qemu-system-aarch64 2>/dev/null || true
|
|
114
|
+
"$ADB" kill-server 2>/dev/null || true
|
|
115
|
+
"$ADB" start-server 2>/dev/null || true
|
|
116
|
+
sleep 2
|
|
117
|
+
fi
|
|
118
|
+
|
|
119
|
+
log_step "checking device availability"
|
|
120
|
+
if ! "$ADB" devices | awk 'NR>1 && $2=="device"' | grep -q .; then
|
|
121
|
+
EMULATOR="$(find_sdk_tool emulator emulator)" || { echo "error: no device attached and emulator binary not found" >&2; exit 1; }
|
|
122
|
+
AVD="$("$EMULATOR" -list-avds | head -1)"
|
|
123
|
+
if [[ -z "$AVD" ]]; then
|
|
124
|
+
echo "error: no AVDs configured" >&2
|
|
125
|
+
exit 1
|
|
126
|
+
fi
|
|
127
|
+
# Reset adb server before cold-booting. A previously crashed emulator leaves
|
|
128
|
+
# the server in a bad state (still trying to reconnect to dead ports 5554/5555),
|
|
129
|
+
# which causes adb wait-for-device to hang indefinitely on the next boot.
|
|
130
|
+
log_step "resetting adb server before cold boot"
|
|
131
|
+
"$ADB" kill-server 2>/dev/null || true
|
|
132
|
+
"$ADB" start-server 2>/dev/null || true
|
|
133
|
+
sleep 1
|
|
134
|
+
log_step "booting emulator avd=$AVD gpu=$GPU_MODE"
|
|
135
|
+
# nohup + disown so the emulator outlives this script and is reused by later
|
|
136
|
+
# eval runs. -no-snapshot forces a clean cold boot (no stale snapshot to replay)
|
|
137
|
+
# and writes no multi-GB snapshot (disk is often tight).
|
|
138
|
+
nohup "$EMULATOR" -avd "$AVD" -no-boot-anim \
|
|
139
|
+
-gpu "$GPU_MODE" -no-snapshot </dev/null >/dev/null 2>&1 &
|
|
140
|
+
disown
|
|
141
|
+
EMULATOR_PID="$(pgrep -f "emulator.*-avd $AVD" | head -1)"
|
|
142
|
+
log_step "emulator booted pid=${EMULATOR_PID:-unknown}"
|
|
143
|
+
"$ADB" wait-for-device
|
|
144
|
+
log_step "adb device appeared — waiting for full boot"
|
|
145
|
+
until [[ "$("$ADB" shell getprop sys.boot_completed 2>/dev/null | tr -d '\r')" == "1" ]]; do
|
|
146
|
+
if [[ -n "$EMULATOR_PID" ]] && ! kill -0 "$EMULATOR_PID" 2>/dev/null; then
|
|
147
|
+
echo "error: emulator pid=$EMULATOR_PID crashed during boot (check DiagnosticReports for qemu SIGABRT)" >&2
|
|
148
|
+
exit 1
|
|
149
|
+
fi
|
|
150
|
+
sleep 2
|
|
151
|
+
done
|
|
152
|
+
log_step "emulator fully booted"
|
|
153
|
+
else
|
|
154
|
+
EMULATOR_PID="$(pgrep -f qemu-system-aarch64 | head -1)"
|
|
155
|
+
log_step "reusing running emulator pid=${EMULATOR_PID:-unknown}"
|
|
156
|
+
fi
|
|
157
|
+
|
|
158
|
+
# --android makes the CLI install Expo Go on the device when missing. Pin the
|
|
159
|
+
# packager hostname to 127.0.0.1 so every exp:// URL goes through the adb
|
|
160
|
+
# reverse tunnel - the default LAN-IP URL is often unreachable from the
|
|
161
|
+
# emulator (host firewall) and leaves a stuck experience in Expo Go's task
|
|
162
|
+
# stack that hijacks later deep links.
|
|
163
|
+
# dev-build: expo run:android prebuilds + native-compiles a dev client, installs
|
|
164
|
+
# and launches it, and starts Metro — no Expo Go involved.
|
|
165
|
+
if [[ "$RUNNER" == "dev-build" ]]; then
|
|
166
|
+
log_step "starting expo run:android port=$PORT"
|
|
167
|
+
# Pass --port so Metro binds to $PORT and the health-check curl matches.
|
|
168
|
+
(cd "$PROJECT_PATH" && exec env -u CI REACT_NATIVE_PACKAGER_HOSTNAME=127.0.0.1 bunx expo run:android --port "$PORT") </dev/null >"$LOG" 2>&1 &
|
|
169
|
+
else
|
|
170
|
+
log_step "starting expo start --android port=$PORT"
|
|
171
|
+
(cd "$PROJECT_PATH" && exec env -u CI REACT_NATIVE_PACKAGER_HOSTNAME=127.0.0.1 bunx expo start --port "$PORT" --android) </dev/null >"$LOG" 2>&1 &
|
|
172
|
+
fi
|
|
173
|
+
METRO_PID=$!
|
|
174
|
+
# APP_PKG is set later (dev-build only) but must be in scope for cleanup.
|
|
175
|
+
APP_PKG=""
|
|
176
|
+
cleanup() {
|
|
177
|
+
kill "$METRO_PID" 2>/dev/null
|
|
178
|
+
lsof -ti "tcp:$PORT" -sTCP:LISTEN 2>/dev/null | xargs kill -9 2>/dev/null || true
|
|
179
|
+
wait "$METRO_PID" 2>/dev/null
|
|
180
|
+
}
|
|
181
|
+
trap cleanup EXIT
|
|
182
|
+
# Resolve the app package name up front so the cleanup trap has it even on
|
|
183
|
+
# early exit. app.json is a fixture source file always present before Metro starts.
|
|
184
|
+
if [[ "$RUNNER" == "dev-build" ]]; then
|
|
185
|
+
APP_PKG="$(node -e "try{var a=require('$PROJECT_PATH/app.json');console.log((a.expo&&a.expo.android&&a.expo.android.package)||'com.exposkilleval.fixture')}catch(e){console.log('com.exposkilleval.fixture')}" 2>/dev/null || echo 'com.exposkilleval.fixture')"
|
|
186
|
+
log_step "app package=$APP_PKG"
|
|
187
|
+
fi
|
|
188
|
+
|
|
189
|
+
DEADLINE=$((SECONDS + BUNDLE_TIMEOUT))
|
|
190
|
+
STATUS=0
|
|
191
|
+
|
|
192
|
+
log_step "waiting for Metro on port=$PORT"
|
|
193
|
+
until curl -sf "http://localhost:$PORT/status" >/dev/null; do
|
|
194
|
+
if ! kill -0 "$METRO_PID" 2>/dev/null; then
|
|
195
|
+
echo "error: Metro (pid=$METRO_PID) exited before coming up. Log tail:" >&2
|
|
196
|
+
tail -40 "$LOG" >&2
|
|
197
|
+
exit 1
|
|
198
|
+
fi
|
|
199
|
+
if emulator_alive; then : ; elif [[ -n "$EMULATOR_PID" ]]; then
|
|
200
|
+
echo "error: emulator pid=$EMULATOR_PID crashed while waiting for Metro" >&2
|
|
201
|
+
tail -40 "$LOG" >&2
|
|
202
|
+
exit 1
|
|
203
|
+
fi
|
|
204
|
+
if ((SECONDS > DEADLINE)); then
|
|
205
|
+
echo "error: timed out after ${BUNDLE_TIMEOUT}s waiting for Metro. Log tail:" >&2
|
|
206
|
+
tail -40 "$LOG" >&2
|
|
207
|
+
exit 1
|
|
208
|
+
fi
|
|
209
|
+
sleep 2
|
|
210
|
+
done
|
|
211
|
+
log_step "Metro is up"
|
|
212
|
+
# Expo Go only: wait for it to install (the CLI may still be installing it).
|
|
213
|
+
if [[ "$RUNNER" != "dev-build" ]]; then
|
|
214
|
+
log_step "waiting for Expo Go install on device"
|
|
215
|
+
until "$ADB" shell pm list packages 2>/dev/null | grep -q host.exp.exponent; do
|
|
216
|
+
if ((SECONDS > DEADLINE)); then
|
|
217
|
+
echo "error: Expo Go was not installed on the device. Log tail:" >&2
|
|
218
|
+
tail -40 "$LOG" >&2
|
|
219
|
+
exit 1
|
|
220
|
+
fi
|
|
221
|
+
sleep 2
|
|
222
|
+
done
|
|
223
|
+
fi
|
|
224
|
+
# Both runners: route the bundle over the adb reverse tunnel.
|
|
225
|
+
log_step "setting up adb reverse tunnel port=$PORT"
|
|
226
|
+
"$ADB" reverse "tcp:$PORT" "tcp:$PORT"
|
|
227
|
+
if [[ "$RUNNER" == "dev-build" ]]; then
|
|
228
|
+
# expo run:android launches the dev client BEFORE Metro is ready, so it shows
|
|
229
|
+
# "Cannot connect to Expo CLI". Now that Metro + adb-reverse are both up,
|
|
230
|
+
# force-restart via explicit MainActivity to avoid the "Open in X?" dialog
|
|
231
|
+
# that an implicit VIEW intent triggers. expo run:android --port embeds the
|
|
232
|
+
# Metro URL in the build, so the dev client auto-connects on relaunch.
|
|
233
|
+
if [[ -n "$APP_PKG" ]]; then
|
|
234
|
+
log_step "launching dev-build app pkg=$APP_PKG"
|
|
235
|
+
"$ADB" shell am force-stop "$APP_PKG" 2>/dev/null || true
|
|
236
|
+
sleep 2
|
|
237
|
+
"$ADB" shell am start -W -n "${APP_PKG}/.MainActivity" >/dev/null 2>&1 || true
|
|
238
|
+
fi
|
|
239
|
+
else
|
|
240
|
+
log_step "launching Expo Go exp://127.0.0.1:$PORT"
|
|
241
|
+
# Force-stop so a stale experience from a previous run can't be resumed, then
|
|
242
|
+
# give the system a moment to finish task cleanup - launching immediately
|
|
243
|
+
# after force-stop races it and the new activity gets torn down too.
|
|
244
|
+
"$ADB" shell am force-stop host.exp.exponent
|
|
245
|
+
sleep 2
|
|
246
|
+
"$ADB" shell am start -W -a android.intent.action.VIEW -d "exp://127.0.0.1:$PORT" >/dev/null
|
|
247
|
+
fi
|
|
248
|
+
|
|
249
|
+
log_step "waiting for JS bundle"
|
|
250
|
+
until grep -q 'Bundled' "$LOG"; do
|
|
251
|
+
if ! kill -0 "$METRO_PID" 2>/dev/null; then
|
|
252
|
+
echo "error: Metro (pid=$METRO_PID) exited before bundling. Log tail:" >&2
|
|
253
|
+
tail -40 "$LOG" >&2
|
|
254
|
+
STATUS=1
|
|
255
|
+
break
|
|
256
|
+
fi
|
|
257
|
+
if emulator_alive; then : ; elif [[ -n "$EMULATOR_PID" ]]; then
|
|
258
|
+
echo "error: emulator pid=$EMULATOR_PID crashed while waiting for JS bundle" >&2
|
|
259
|
+
tail -40 "$LOG" >&2
|
|
260
|
+
STATUS=1
|
|
261
|
+
break
|
|
262
|
+
fi
|
|
263
|
+
if ((SECONDS > DEADLINE)); then
|
|
264
|
+
echo "error: timed out after ${BUNDLE_TIMEOUT}s waiting for bundle. Log tail:" >&2
|
|
265
|
+
tail -40 "$LOG" >&2
|
|
266
|
+
STATUS=1
|
|
267
|
+
break
|
|
268
|
+
fi
|
|
269
|
+
sleep 2
|
|
270
|
+
done
|
|
271
|
+
|
|
272
|
+
log_step "bundle done — settling ${SETTLE}s"
|
|
273
|
+
sleep "$SETTLE"
|
|
274
|
+
log_step "taking screenshot"
|
|
275
|
+
"$ADB" exec-out screencap -p >"$OUT" || STATUS=1
|
|
276
|
+
# Raw emulator captures are ~2800px tall and overflow the eval viewer's
|
|
277
|
+
# window. Downscale to a review/grading-friendly size.
|
|
278
|
+
if [[ -s "$OUT" ]]; then
|
|
279
|
+
sips -Z "${EXPO_SKILL_EVAL_MAX_DIM:-600}" "$OUT" >/dev/null 2>&1 || true
|
|
280
|
+
fi
|
|
281
|
+
log_step "done status=$STATUS screenshot=$OUT"
|
|
282
|
+
echo "screenshot: $OUT"
|
|
283
|
+
echo "metro log: $LOG"
|
|
284
|
+
exit "$STATUS"
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Run an Expo app in Expo Go on an iOS simulator and capture a screenshot.
|
|
3
|
+
#
|
|
4
|
+
# Usage: snapshot-ios.sh <project-path> <output-png> [port] [settle-seconds]
|
|
5
|
+
#
|
|
6
|
+
# Env: EXPO_SKILL_EVAL_RUNNER = expo-go (default) | dev-build — dev-build runs the
|
|
7
|
+
# app via `expo run:ios` (native dev-client compile, slow) instead of Expo Go.
|
|
8
|
+
#
|
|
9
|
+
# Boots the newest available iPhone simulator if none is booted, starts
|
|
10
|
+
# Metro with `expo start --ios` (auto-installs Expo Go on the simulator and
|
|
11
|
+
# opens the app), waits for the bundle to load, settles, screenshots, and
|
|
12
|
+
# tears Metro down. The Metro log is saved next to the screenshot as
|
|
13
|
+
# <name>.metro.log. On bundle failure it still captures a best-effort
|
|
14
|
+
# screenshot (the error screen is grading evidence) and exits 1.
|
|
15
|
+
set -uo pipefail
|
|
16
|
+
|
|
17
|
+
PROJECT_PATH="${1:?usage: snapshot-ios.sh <project-path> <output-png> [port] [settle-seconds]}"
|
|
18
|
+
OUT="${2:?usage: snapshot-ios.sh <project-path> <output-png> [port] [settle-seconds]}"
|
|
19
|
+
PORT="${3:-8081}"
|
|
20
|
+
SETTLE="${4:-8}"
|
|
21
|
+
RUNNER="${EXPO_SKILL_EVAL_RUNNER:-expo-go}" # expo-go | dev-build
|
|
22
|
+
if [[ "$RUNNER" == "dev-build" ]]; then
|
|
23
|
+
BUNDLE_TIMEOUT="${EXPO_SKILL_EVAL_BUNDLE_TIMEOUT:-900}" # native compile is slow
|
|
24
|
+
else
|
|
25
|
+
BUNDLE_TIMEOUT="${EXPO_SKILL_EVAL_BUNDLE_TIMEOUT:-240}"
|
|
26
|
+
fi
|
|
27
|
+
LOG="${OUT%.png}.metro.log"
|
|
28
|
+
|
|
29
|
+
mkdir -p "$(dirname "$OUT")"
|
|
30
|
+
|
|
31
|
+
# Free the port up front in case a previous run (or a crash) left Metro on it,
|
|
32
|
+
# so `expo start` binds the port we expect instead of silently incrementing.
|
|
33
|
+
# Runs inside this script, so the eval harness never needs ad-hoc lsof/kill.
|
|
34
|
+
lsof -ti "tcp:$PORT" -sTCP:LISTEN 2>/dev/null | xargs kill -9 2>/dev/null || true
|
|
35
|
+
|
|
36
|
+
if ! xcrun simctl list devices booted | grep -q '(Booted)'; then
|
|
37
|
+
UDID="$(xcrun simctl list devices available | grep 'iPhone' | tail -1 | grep -oE '[0-9A-F-]{36}')"
|
|
38
|
+
if [[ -z "$UDID" ]]; then
|
|
39
|
+
echo "error: no available iPhone simulator found" >&2
|
|
40
|
+
exit 1
|
|
41
|
+
fi
|
|
42
|
+
echo "booting simulator $UDID..." >&2
|
|
43
|
+
xcrun simctl boot "$UDID"
|
|
44
|
+
open -a Simulator
|
|
45
|
+
xcrun simctl bootstatus "$UDID"
|
|
46
|
+
fi
|
|
47
|
+
|
|
48
|
+
# expo-go: --ios installs Expo Go when missing; its own open is unreliable if a
|
|
49
|
+
# previous experience is foregrounded, so we relaunch deterministically below.
|
|
50
|
+
# dev-build: expo run:ios prebuilds + native-compiles a dev client, installs and
|
|
51
|
+
# launches it on the simulator, and starts Metro — no Expo Go involved.
|
|
52
|
+
if [[ "$RUNNER" == "dev-build" ]]; then
|
|
53
|
+
# Pass --port so Metro binds to $PORT and the health-check curl matches.
|
|
54
|
+
(cd "$PROJECT_PATH" && exec env -u CI bunx expo run:ios --port "$PORT") </dev/null >"$LOG" 2>&1 &
|
|
55
|
+
else
|
|
56
|
+
(cd "$PROJECT_PATH" && exec env -u CI REACT_NATIVE_PACKAGER_HOSTNAME=127.0.0.1 bunx expo start --port "$PORT" --ios) </dev/null >"$LOG" 2>&1 &
|
|
57
|
+
fi
|
|
58
|
+
METRO_PID=$!
|
|
59
|
+
cleanup() {
|
|
60
|
+
kill "$METRO_PID" 2>/dev/null
|
|
61
|
+
lsof -ti "tcp:$PORT" -sTCP:LISTEN 2>/dev/null | xargs kill -9 2>/dev/null || true
|
|
62
|
+
wait "$METRO_PID" 2>/dev/null
|
|
63
|
+
}
|
|
64
|
+
trap cleanup EXIT
|
|
65
|
+
|
|
66
|
+
DEADLINE=$((SECONDS + BUNDLE_TIMEOUT))
|
|
67
|
+
STATUS=0
|
|
68
|
+
|
|
69
|
+
until curl -sf "http://localhost:$PORT/status" >/dev/null; do
|
|
70
|
+
if ! kill -0 "$METRO_PID" 2>/dev/null || ((SECONDS > DEADLINE)); then
|
|
71
|
+
echo "error: Metro did not come up. Log tail:" >&2
|
|
72
|
+
tail -40 "$LOG" >&2
|
|
73
|
+
exit 1
|
|
74
|
+
fi
|
|
75
|
+
sleep 2
|
|
76
|
+
done
|
|
77
|
+
# Expo Go only: wait for Expo Go to install, then relaunch the experience
|
|
78
|
+
# deterministically. dev-build skips this — expo run:ios launches the dev client.
|
|
79
|
+
if [[ "$RUNNER" != "dev-build" ]]; then
|
|
80
|
+
until xcrun simctl get_app_container booted host.exp.Exponent >/dev/null 2>&1; do
|
|
81
|
+
if ((SECONDS > DEADLINE)); then
|
|
82
|
+
echo "error: Expo Go was not installed on the simulator. Log tail:" >&2
|
|
83
|
+
tail -40 "$LOG" >&2
|
|
84
|
+
exit 1
|
|
85
|
+
fi
|
|
86
|
+
sleep 2
|
|
87
|
+
done
|
|
88
|
+
# Terminate any running Expo Go so a stale experience can't stay foregrounded,
|
|
89
|
+
# then open the project URL explicitly.
|
|
90
|
+
xcrun simctl terminate booted host.exp.Exponent 2>/dev/null || true
|
|
91
|
+
sleep 2
|
|
92
|
+
xcrun simctl openurl booted "exp://127.0.0.1:$PORT"
|
|
93
|
+
fi
|
|
94
|
+
|
|
95
|
+
until grep -q 'Bundled' "$LOG"; do
|
|
96
|
+
if ! kill -0 "$METRO_PID" 2>/dev/null; then
|
|
97
|
+
echo "error: Metro exited before bundling. Log tail:" >&2
|
|
98
|
+
tail -40 "$LOG" >&2
|
|
99
|
+
STATUS=1
|
|
100
|
+
break
|
|
101
|
+
fi
|
|
102
|
+
if ((SECONDS > DEADLINE)); then
|
|
103
|
+
echo "error: timed out after ${BUNDLE_TIMEOUT}s waiting for bundle. Log tail:" >&2
|
|
104
|
+
tail -40 "$LOG" >&2
|
|
105
|
+
STATUS=1
|
|
106
|
+
break
|
|
107
|
+
fi
|
|
108
|
+
sleep 2
|
|
109
|
+
done
|
|
110
|
+
|
|
111
|
+
# dev-build: after bundling, relaunch the app so it is reliably in the
|
|
112
|
+
# foreground. Use xcrun simctl launch (not openurl) to avoid the "Open in X?"
|
|
113
|
+
# confirmation dialog that xcrun simctl openurl triggers on the iOS Simulator.
|
|
114
|
+
# expo run:ios embeds the Metro URL in the build, so the dev client auto-connects.
|
|
115
|
+
if [[ "$RUNNER" == "dev-build" ]]; then
|
|
116
|
+
BUNDLE_ID="$(node -e "try{var a=require('$PROJECT_PATH/app.json');console.log((a.expo&&a.expo.ios&&a.expo.ios.bundleIdentifier)||'com.exposkilleval.fixture')}catch(e){console.log('com.exposkilleval.fixture')}" 2>/dev/null || echo 'com.exposkilleval.fixture')"
|
|
117
|
+
xcrun simctl terminate booted "$BUNDLE_ID" 2>/dev/null || true
|
|
118
|
+
sleep 2
|
|
119
|
+
xcrun simctl launch --terminate-running-process booted "$BUNDLE_ID" >/dev/null 2>&1 || true
|
|
120
|
+
sleep 3
|
|
121
|
+
fi
|
|
122
|
+
|
|
123
|
+
sleep "$SETTLE"
|
|
124
|
+
xcrun simctl io booted screenshot "$OUT" || STATUS=1
|
|
125
|
+
# Raw simulator captures are 3x retina (~2600px tall) and overflow the eval
|
|
126
|
+
# viewer's window. Downscale to a review/grading-friendly size.
|
|
127
|
+
if [[ -f "$OUT" ]]; then
|
|
128
|
+
sips -Z "${EXPO_SKILL_EVAL_MAX_DIM:-600}" "$OUT" >/dev/null 2>&1 || true
|
|
129
|
+
fi
|
|
130
|
+
echo "screenshot: $OUT"
|
|
131
|
+
echo "metro log: $LOG"
|
|
132
|
+
exit "$STATUS"
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Run an Expo app's web target and capture a browser screenshot. (Phase 4 -
|
|
3
|
+
# only for eval cases whose runtime.platforms includes "web".)
|
|
4
|
+
#
|
|
5
|
+
# Usage: snapshot-web.sh <project-path> <output-png> [port] [settle-seconds]
|
|
6
|
+
#
|
|
7
|
+
# Starts Metro with `expo start --web`, waits for the dev server to respond,
|
|
8
|
+
# then screenshots with Playwright's CLI at an iPhone-ish viewport. The first
|
|
9
|
+
# run downloads Chromium via `bunx playwright install chromium`.
|
|
10
|
+
set -uo pipefail
|
|
11
|
+
|
|
12
|
+
PROJECT_PATH="${1:?usage: snapshot-web.sh <project-path> <output-png> [port] [settle-seconds]}"
|
|
13
|
+
OUT="${2:?usage: snapshot-web.sh <project-path> <output-png> [port] [settle-seconds]}"
|
|
14
|
+
PORT="${3:-8081}"
|
|
15
|
+
SETTLE="${4:-8}"
|
|
16
|
+
SERVER_TIMEOUT="${EXPO_SKILL_EVAL_BUNDLE_TIMEOUT:-240}"
|
|
17
|
+
LOG="${OUT%.png}.metro.log"
|
|
18
|
+
|
|
19
|
+
mkdir -p "$(dirname "$OUT")"
|
|
20
|
+
|
|
21
|
+
# Free the port up front in case a previous run (or a crash) left Metro on it,
|
|
22
|
+
# so `expo start` binds the port we expect instead of silently incrementing.
|
|
23
|
+
# Runs inside this script, so the eval harness never needs ad-hoc lsof/kill.
|
|
24
|
+
lsof -ti "tcp:$PORT" -sTCP:LISTEN 2>/dev/null | xargs kill -9 2>/dev/null || true
|
|
25
|
+
|
|
26
|
+
bunx playwright install chromium >/dev/null 2>&1 || true
|
|
27
|
+
|
|
28
|
+
(cd "$PROJECT_PATH" && exec env -u CI bunx expo start --port "$PORT" --web) </dev/null >"$LOG" 2>&1 &
|
|
29
|
+
METRO_PID=$!
|
|
30
|
+
cleanup() {
|
|
31
|
+
kill "$METRO_PID" 2>/dev/null
|
|
32
|
+
pkill -f "expo start --port $PORT" 2>/dev/null
|
|
33
|
+
wait "$METRO_PID" 2>/dev/null
|
|
34
|
+
}
|
|
35
|
+
trap cleanup EXIT
|
|
36
|
+
|
|
37
|
+
DEADLINE=$((SECONDS + SERVER_TIMEOUT))
|
|
38
|
+
until curl -sf "http://localhost:$PORT" >/dev/null; do
|
|
39
|
+
if ! kill -0 "$METRO_PID" 2>/dev/null || ((SECONDS > DEADLINE)); then
|
|
40
|
+
echo "error: web dev server did not come up. Log tail:" >&2
|
|
41
|
+
tail -40 "$LOG" >&2
|
|
42
|
+
exit 1
|
|
43
|
+
fi
|
|
44
|
+
sleep 2
|
|
45
|
+
done
|
|
46
|
+
|
|
47
|
+
STATUS=0
|
|
48
|
+
bunx playwright screenshot \
|
|
49
|
+
--browser chromium \
|
|
50
|
+
--viewport-size "390,844" \
|
|
51
|
+
--wait-for-timeout "$((SETTLE * 1000))" \
|
|
52
|
+
"http://localhost:$PORT" "$OUT" || STATUS=1
|
|
53
|
+
|
|
54
|
+
# Keep parity with the device snapshot scripts: cap the largest dimension so
|
|
55
|
+
# screenshots fit the eval viewer's window.
|
|
56
|
+
if [[ -f "$OUT" ]]; then
|
|
57
|
+
sips -Z "${EXPO_SKILL_EVAL_MAX_DIM:-600}" "$OUT" >/dev/null 2>&1 || true
|
|
58
|
+
fi
|
|
59
|
+
echo "screenshot: $OUT"
|
|
60
|
+
echo "metro log: $LOG"
|
|
61
|
+
exit "$STATUS"
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: expo-skill-feedback
|
|
3
|
+
description: Framework (OSS). Submit feedback on an Expo skill — or on Expo itself — or turn the bundled anonymous usage telemetry on or off (off by default / opt-in; the user saying "enable Expo skills telemetry" in conversation is the switch). Use when an Expo skill was useful, confusing, broken, missing context, or worth improving; when something fell short because of Expo (an SDK bug or confusing framework behavior) rather than the skill; or when the user wants to enable, turn on, opt in to, disable, turn off, opt out of, check the status of, or understand the anonymous usage tracking these skills can send.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Expo Skill Feedback
|
|
7
|
+
|
|
8
|
+
Send anonymous feedback on an Expo skill — or on Expo itself — and turn the bundled usage
|
|
9
|
+
telemetry on or off. **Telemetry is off by default (opt-in)** — nothing is sent until it's
|
|
10
|
+
enabled. Feedback goes to the Expo team via PostHog. Only the skill name, your rating + note,
|
|
11
|
+
platform, and a hash of a random local install id are sent — never code, prompts, file paths,
|
|
12
|
+
secrets, or personal data. (A separate automatic `skill_invoked` event fires when a skill runs
|
|
13
|
+
*once enabled*; the switch below controls both.)
|
|
14
|
+
|
|
15
|
+
## Submitting feedback
|
|
16
|
+
|
|
17
|
+
Be proactive: when a skill was wrong, confusing, outdated, or missing — or the trouble is
|
|
18
|
+
with **Expo itself** — send 1-3 concrete sentences. Pass the skill you're rating to
|
|
19
|
+
`--skill` (the skill being rated, not `expo-skill-feedback`):
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
node "${CLAUDE_PLUGIN_ROOT}/skills/expo-skill-feedback/scripts/skill-feedback.cjs" \
|
|
23
|
+
--skill eas-app-stores --rating useful \
|
|
24
|
+
--text "TestFlight steps were clear and worked first try."
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
- `--rating`: `useful` · `confusing` · `bug` · `idea` · `other`
|
|
28
|
+
- `--about`: `skill` (default) · `expo` (the issue is Expo itself, not the skill)
|
|
29
|
+
- `--dry-run` prints the payload without sending
|
|
30
|
+
|
|
31
|
+
Never include secrets, source code, long prompts, or stack traces.
|
|
32
|
+
|
|
33
|
+
If the command refuses because telemetry is off, don't drop the feedback — ask the user
|
|
34
|
+
once (see *Turning it on or off*), and resend the same command after they enable.
|
|
35
|
+
|
|
36
|
+
## Turning it on or off
|
|
37
|
+
|
|
38
|
+
Telemetry is anonymous and **off by default (opt-in)** — nothing (neither the automatic
|
|
39
|
+
`skill_invoked` event nor feedback) is sent until the user enables it. Saying so in
|
|
40
|
+
conversation is the switch: when the user says **"enable Expo skills telemetry"** — or
|
|
41
|
+
answers yes when you offer — run:
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
node "${CLAUDE_PLUGIN_ROOT}/skills/expo-skill-feedback/scripts/telemetry.cjs" --on
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
`--off` turns it off again. When the user asks whether telemetry is on, run `--status`
|
|
48
|
+
and relay its output — don't answer from memory; env vars and CI can override the saved
|
|
49
|
+
state. Env equivalents: `EXPO_SKILLS_TELEMETRY=1` to enable, `=0` or `DO_NOT_TRACK=1` to
|
|
50
|
+
disable; CI never sends.
|
|
51
|
+
|
|
52
|
+
**Never enable it on your own.** If a feedback send was refused because telemetry is off,
|
|
53
|
+
ask the user once — "Expo skills telemetry is off; enable it (anonymous) and send this?" —
|
|
54
|
+
and run `--on` only after an explicit yes. If they decline, drop the feedback silently.
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
interface:
|
|
2
|
+
display_name: "Expo Skill Feedback"
|
|
3
|
+
short_description: "Send anonymous feedback on an Expo skill, or turn the opt-in usage telemetry on or off (off by default)"
|
|
4
|
+
default_prompt: "Use $expo-skill-feedback to rate an Expo skill (useful, confusing, bug, idea) with a short anonymous note, or to enable, disable, or check the status of Expo skills telemetry."
|