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
package/dist/bin.js
CHANGED
|
@@ -3084,7 +3084,7 @@ var require_dist = __commonJS({
|
|
|
3084
3084
|
function parse(stream, callback) {
|
|
3085
3085
|
const parser = new parser_1.Parser();
|
|
3086
3086
|
stream.on("data", (buffer) => parser.parse(buffer, callback));
|
|
3087
|
-
return new Promise((
|
|
3087
|
+
return new Promise((resolve13) => stream.on("end", () => resolve13()));
|
|
3088
3088
|
}
|
|
3089
3089
|
}
|
|
3090
3090
|
});
|
|
@@ -3643,8 +3643,8 @@ var require_lib = __commonJS({
|
|
|
3643
3643
|
var helper = require_helper();
|
|
3644
3644
|
module.exports = function(connInfo, cb) {
|
|
3645
3645
|
var file = helper.getFileName();
|
|
3646
|
-
fs.stat(file, function(err,
|
|
3647
|
-
if (err || !helper.usePgPass(
|
|
3646
|
+
fs.stat(file, function(err, stat3) {
|
|
3647
|
+
if (err || !helper.usePgPass(stat3, file)) {
|
|
3648
3648
|
return cb(void 0);
|
|
3649
3649
|
}
|
|
3650
3650
|
var st = fs.createReadStream(file);
|
|
@@ -3846,12 +3846,12 @@ var require_client = __commonJS({
|
|
|
3846
3846
|
this._connect(callback);
|
|
3847
3847
|
return;
|
|
3848
3848
|
}
|
|
3849
|
-
return new this._Promise((
|
|
3849
|
+
return new this._Promise((resolve13, reject) => {
|
|
3850
3850
|
this._connect((error) => {
|
|
3851
3851
|
if (error) {
|
|
3852
3852
|
reject(error);
|
|
3853
3853
|
} else {
|
|
3854
|
-
|
|
3854
|
+
resolve13(this);
|
|
3855
3855
|
}
|
|
3856
3856
|
});
|
|
3857
3857
|
});
|
|
@@ -4198,8 +4198,8 @@ var require_client = __commonJS({
|
|
|
4198
4198
|
} else {
|
|
4199
4199
|
query = new Query2(config, values, callback);
|
|
4200
4200
|
if (!query.callback) {
|
|
4201
|
-
result = new this._Promise((
|
|
4202
|
-
query.callback = (err, res) => err ? reject(err) :
|
|
4201
|
+
result = new this._Promise((resolve13, reject) => {
|
|
4202
|
+
query.callback = (err, res) => err ? reject(err) : resolve13(res);
|
|
4203
4203
|
}).catch((err) => {
|
|
4204
4204
|
Error.captureStackTrace(err);
|
|
4205
4205
|
throw err;
|
|
@@ -4283,8 +4283,8 @@ var require_client = __commonJS({
|
|
|
4283
4283
|
if (cb) {
|
|
4284
4284
|
this.connection.once("end", cb);
|
|
4285
4285
|
} else {
|
|
4286
|
-
return new this._Promise((
|
|
4287
|
-
this.connection.once("end",
|
|
4286
|
+
return new this._Promise((resolve13) => {
|
|
4287
|
+
this.connection.once("end", resolve13);
|
|
4288
4288
|
});
|
|
4289
4289
|
}
|
|
4290
4290
|
}
|
|
@@ -4333,8 +4333,8 @@ var require_pg_pool = __commonJS({
|
|
|
4333
4333
|
const cb = function(err, client) {
|
|
4334
4334
|
err ? rej(err) : res(client);
|
|
4335
4335
|
};
|
|
4336
|
-
const result = new Promise2(function(
|
|
4337
|
-
res =
|
|
4336
|
+
const result = new Promise2(function(resolve13, reject) {
|
|
4337
|
+
res = resolve13;
|
|
4338
4338
|
rej = reject;
|
|
4339
4339
|
}).catch((err) => {
|
|
4340
4340
|
Error.captureStackTrace(err);
|
|
@@ -4395,7 +4395,7 @@ var require_pg_pool = __commonJS({
|
|
|
4395
4395
|
if (typeof Promise2.try === "function") {
|
|
4396
4396
|
return Promise2.try(f);
|
|
4397
4397
|
}
|
|
4398
|
-
return new Promise2((
|
|
4398
|
+
return new Promise2((resolve13) => resolve13(f()));
|
|
4399
4399
|
}
|
|
4400
4400
|
_isFull() {
|
|
4401
4401
|
return this._clients.length >= this.options.max;
|
|
@@ -4788,8 +4788,8 @@ var require_query2 = __commonJS({
|
|
|
4788
4788
|
NativeQuery.prototype._getPromise = function() {
|
|
4789
4789
|
if (this._promise) return this._promise;
|
|
4790
4790
|
this._promise = new Promise(
|
|
4791
|
-
function(
|
|
4792
|
-
this._once("end",
|
|
4791
|
+
function(resolve13, reject) {
|
|
4792
|
+
this._once("end", resolve13);
|
|
4793
4793
|
this._once("error", reject);
|
|
4794
4794
|
}.bind(this)
|
|
4795
4795
|
);
|
|
@@ -4899,18 +4899,18 @@ var require_client2 = __commonJS({
|
|
|
4899
4899
|
this._connecting = false;
|
|
4900
4900
|
this._connected = false;
|
|
4901
4901
|
this._queryable = true;
|
|
4902
|
-
const
|
|
4903
|
-
if (config.nativeConnectionString)
|
|
4904
|
-
this.user =
|
|
4902
|
+
const cp7 = this.connectionParameters = new ConnectionParameters(config);
|
|
4903
|
+
if (config.nativeConnectionString) cp7.nativeConnectionString = config.nativeConnectionString;
|
|
4904
|
+
this.user = cp7.user;
|
|
4905
4905
|
Object.defineProperty(this, "password", {
|
|
4906
4906
|
configurable: true,
|
|
4907
4907
|
enumerable: false,
|
|
4908
4908
|
writable: true,
|
|
4909
|
-
value:
|
|
4909
|
+
value: cp7.password
|
|
4910
4910
|
});
|
|
4911
|
-
this.database =
|
|
4912
|
-
this.host =
|
|
4913
|
-
this.port =
|
|
4911
|
+
this.database = cp7.database;
|
|
4912
|
+
this.host = cp7.host;
|
|
4913
|
+
this.port = cp7.port;
|
|
4914
4914
|
this.namedQueries = {};
|
|
4915
4915
|
};
|
|
4916
4916
|
Client2.Query = NativeQuery;
|
|
@@ -4967,12 +4967,12 @@ var require_client2 = __commonJS({
|
|
|
4967
4967
|
this._connect(callback);
|
|
4968
4968
|
return;
|
|
4969
4969
|
}
|
|
4970
|
-
return new this._Promise((
|
|
4970
|
+
return new this._Promise((resolve13, reject) => {
|
|
4971
4971
|
this._connect((error) => {
|
|
4972
4972
|
if (error) {
|
|
4973
4973
|
reject(error);
|
|
4974
4974
|
} else {
|
|
4975
|
-
|
|
4975
|
+
resolve13(this);
|
|
4976
4976
|
}
|
|
4977
4977
|
});
|
|
4978
4978
|
});
|
|
@@ -4996,8 +4996,8 @@ var require_client2 = __commonJS({
|
|
|
4996
4996
|
query = new NativeQuery(config, values, callback);
|
|
4997
4997
|
if (!query.callback) {
|
|
4998
4998
|
let resolveOut, rejectOut;
|
|
4999
|
-
result = new this._Promise((
|
|
5000
|
-
resolveOut =
|
|
4999
|
+
result = new this._Promise((resolve13, reject) => {
|
|
5000
|
+
resolveOut = resolve13;
|
|
5001
5001
|
rejectOut = reject;
|
|
5002
5002
|
}).catch((err) => {
|
|
5003
5003
|
Error.captureStackTrace(err);
|
|
@@ -5060,8 +5060,8 @@ var require_client2 = __commonJS({
|
|
|
5060
5060
|
}
|
|
5061
5061
|
let result;
|
|
5062
5062
|
if (!cb) {
|
|
5063
|
-
result = new this._Promise(function(
|
|
5064
|
-
cb = (err) => err ? reject(err) :
|
|
5063
|
+
result = new this._Promise(function(resolve13, reject) {
|
|
5064
|
+
cb = (err) => err ? reject(err) : resolve13();
|
|
5065
5065
|
});
|
|
5066
5066
|
}
|
|
5067
5067
|
this.native.end(function() {
|
|
@@ -5236,26 +5236,73 @@ var init_esm = __esm({
|
|
|
5236
5236
|
});
|
|
5237
5237
|
|
|
5238
5238
|
// src/bin.ts
|
|
5239
|
-
import
|
|
5240
|
-
import process26 from "process";
|
|
5241
|
-
import { fileURLToPath as fileURLToPath8 } from "url";
|
|
5239
|
+
import process29 from "process";
|
|
5242
5240
|
|
|
5243
5241
|
// src/cliRunner.ts
|
|
5244
|
-
import { readFile as
|
|
5245
|
-
import { dirname as
|
|
5246
|
-
import
|
|
5247
|
-
import { fileURLToPath as
|
|
5242
|
+
import { readFile as readFile21 } from "fs/promises";
|
|
5243
|
+
import { dirname as dirname16, join as join49 } from "path";
|
|
5244
|
+
import process28 from "process";
|
|
5245
|
+
import { fileURLToPath as fileURLToPath8 } from "url";
|
|
5246
|
+
|
|
5247
|
+
// src/commands/createSurfaceRegistry.ts
|
|
5248
|
+
var CREATE_SURFACES = [
|
|
5249
|
+
{
|
|
5250
|
+
id: "web",
|
|
5251
|
+
label: "Web app",
|
|
5252
|
+
hint: "Next.js + dashboard + marketing",
|
|
5253
|
+
help: "Next.js + agent layer"
|
|
5254
|
+
},
|
|
5255
|
+
{
|
|
5256
|
+
id: "mobile",
|
|
5257
|
+
label: "Mobile app",
|
|
5258
|
+
hint: "Expo",
|
|
5259
|
+
help: "Expo + agent layer"
|
|
5260
|
+
},
|
|
5261
|
+
{
|
|
5262
|
+
id: "extension",
|
|
5263
|
+
label: "Browser extension",
|
|
5264
|
+
hint: "WXT",
|
|
5265
|
+
help: "WXT + agent layer"
|
|
5266
|
+
},
|
|
5267
|
+
{
|
|
5268
|
+
id: "backend",
|
|
5269
|
+
label: "Backend API",
|
|
5270
|
+
hint: "Express + typed routes",
|
|
5271
|
+
help: "Express API + typed routes"
|
|
5272
|
+
}
|
|
5273
|
+
];
|
|
5274
|
+
var CREATE_SURFACE_PROMPT_OPTIONS = CREATE_SURFACES.map((surface) => ({
|
|
5275
|
+
value: surface.id,
|
|
5276
|
+
label: surface.label,
|
|
5277
|
+
hint: surface.hint
|
|
5278
|
+
}));
|
|
5279
|
+
var CREATE_SURFACE_PIPE_FLAGS = CREATE_SURFACES.map((surface) => `--${surface.id}`).join(
|
|
5280
|
+
"|"
|
|
5281
|
+
);
|
|
5282
|
+
var CREATE_SURFACE_LIST_FLAGS = CREATE_SURFACES.map((surface, index) => {
|
|
5283
|
+
const flag = `--${surface.id}`;
|
|
5284
|
+
if (index === CREATE_SURFACES.length - 1) {
|
|
5285
|
+
return `or ${flag}`;
|
|
5286
|
+
}
|
|
5287
|
+
return flag;
|
|
5288
|
+
}).join(", ");
|
|
5289
|
+
var isCreateSurface = (value) => CREATE_SURFACES.some((surface) => surface.id === value);
|
|
5248
5290
|
|
|
5249
5291
|
// src/cliHelp.ts
|
|
5292
|
+
var createSurfaceUsage = CREATE_SURFACES.map(
|
|
5293
|
+
(surface) => ` vybekiit create app --${surface.id} [directory]`
|
|
5294
|
+
).join("\n");
|
|
5295
|
+
var createSurfaceHelp = CREATE_SURFACES.map((surface) => {
|
|
5296
|
+
const surfaceFlag = `--${surface.id}`.padEnd(14);
|
|
5297
|
+
return ` ${surfaceFlag}${surface.help}`;
|
|
5298
|
+
}).join("\n");
|
|
5250
5299
|
var CLI_HELP = `vybekiit \u2014 set up tools and create your app
|
|
5251
5300
|
|
|
5252
5301
|
Getting started:
|
|
5253
5302
|
vybekiit Interactive menu (terminal only)
|
|
5254
|
-
vybekiit setup Welcome +
|
|
5303
|
+
vybekiit setup Welcome + set up Claude Code globally (skills, MCP, tools)
|
|
5255
5304
|
vybekiit doctor Full toolchain pass (agents, gh, cloud CLIs, skills, \u2026)
|
|
5256
|
-
|
|
5257
|
-
vybekiit create app --mobile [directory]
|
|
5258
|
-
vybekiit create app --extension [directory]
|
|
5305
|
+
${createSurfaceUsage}
|
|
5259
5306
|
|
|
5260
5307
|
After your app exists (your AI coding tool drives these):
|
|
5261
5308
|
vybekiit list-pieces \xB7 list-page-recipes \xB7 list-presets
|
|
@@ -5265,9 +5312,7 @@ After your app exists (your AI coding tool drives these):
|
|
|
5265
5312
|
vybekiit env wizard \xB7 sync-agent-layer \xB7 update path via your agent
|
|
5266
5313
|
|
|
5267
5314
|
Surfaces:
|
|
5268
|
-
|
|
5269
|
-
--mobile Expo + agent layer
|
|
5270
|
-
--extension WXT + agent layer
|
|
5315
|
+
${createSurfaceHelp}
|
|
5271
5316
|
|
|
5272
5317
|
Examples:
|
|
5273
5318
|
vybekiit setup
|
|
@@ -5286,9 +5331,10 @@ var CLI_HELP_ALL = `vybekiit \u2014 full command list
|
|
|
5286
5331
|
|
|
5287
5332
|
Buyer journey:
|
|
5288
5333
|
vybekiit setup
|
|
5334
|
+
vybekiit global-install [--yes] (skills + MCP + awareness into ~/.claude)
|
|
5289
5335
|
vybekiit doctor
|
|
5290
5336
|
vybekiit doctor --ensure <tool> [--json]
|
|
5291
|
-
vybekiit create app
|
|
5337
|
+
vybekiit create app ${CREATE_SURFACE_PIPE_FLAGS} [directory]
|
|
5292
5338
|
|
|
5293
5339
|
Create / project:
|
|
5294
5340
|
vybekiit new [template] [directory] (deprecated \u2192 create app)
|
|
@@ -6022,10 +6068,7 @@ var GOAL_CATALOG = Object.fromEntries(
|
|
|
6022
6068
|
);
|
|
6023
6069
|
|
|
6024
6070
|
// ../packages/agentKit/src/catalogs/mcpToolsCatalog.ts
|
|
6025
|
-
var firstPartyMcpBinPath = (packageFolder, layout
|
|
6026
|
-
const file = bin === "ui-catalog" ? "uiCatalog/bin.js" : "bin.js";
|
|
6027
|
-
return layout === "kit-root" ? `packages/${packageFolder}/dist/${file}` : `../../packages/${packageFolder}/dist/${file}`;
|
|
6028
|
-
};
|
|
6071
|
+
var firstPartyMcpBinPath = (packageFolder, layout) => layout === "kit-root" ? `packages/${packageFolder}/dist/bin.js` : `../../packages/${packageFolder}/dist/bin.js`;
|
|
6029
6072
|
var buildFirstPartyMcpConfig = (layout, options) => {
|
|
6030
6073
|
const projectRoot = layout === "kit-root" && options?.template !== void 0 && options.template !== "" ? `templates/${options.template}` : ".";
|
|
6031
6074
|
const catalogPath = layout === "kit-root" && options?.template !== void 0 && options.template !== "" ? `templates/${options.template}/.vybekiit/agent/ui-catalog-index.json` : ".vybekiit/agent/ui-catalog-index.json";
|
|
@@ -6035,20 +6078,15 @@ var buildFirstPartyMcpConfig = (layout, options) => {
|
|
|
6035
6078
|
command: "node",
|
|
6036
6079
|
args: [firstPartyMcpBinPath("agentMcp", layout)],
|
|
6037
6080
|
env: {
|
|
6038
|
-
VYBEKIIT_PROJECT_ROOT: projectRoot
|
|
6039
|
-
|
|
6040
|
-
},
|
|
6041
|
-
"vybekiit-ui-catalog": {
|
|
6042
|
-
command: "node",
|
|
6043
|
-
args: [firstPartyMcpBinPath("agentMcp", layout, "ui-catalog")],
|
|
6044
|
-
env: {
|
|
6045
|
-
VYBEKIIT_UI_CATALOG_PATH: catalogPath,
|
|
6046
|
-
VYBEKIIT_PROJECT_ROOT: projectRoot
|
|
6081
|
+
VYBEKIIT_PROJECT_ROOT: projectRoot,
|
|
6082
|
+
VYBEKIIT_UI_CATALOG_PATH: catalogPath
|
|
6047
6083
|
}
|
|
6048
6084
|
}
|
|
6049
6085
|
}
|
|
6050
6086
|
};
|
|
6051
6087
|
};
|
|
6088
|
+
var formatFirstPartyMcpConfigJson = (config) => `${JSON.stringify(config, null, 2)}
|
|
6089
|
+
`;
|
|
6052
6090
|
|
|
6053
6091
|
// ../packages/agentKit/src/catalogs/platform-skills-base.manifest.json
|
|
6054
6092
|
var platform_skills_base_manifest_default = {
|
|
@@ -8720,8 +8758,8 @@ var readAgentSkillSymlinkStates = async (cwd) => {
|
|
|
8720
8758
|
AGENT_SKILL_SYMLINKS.map(async ({ link }) => {
|
|
8721
8759
|
const linkPath = join2(cwd, link);
|
|
8722
8760
|
try {
|
|
8723
|
-
const
|
|
8724
|
-
if (
|
|
8761
|
+
const stat3 = await lstat(linkPath);
|
|
8762
|
+
if (stat3.isSymbolicLink()) {
|
|
8725
8763
|
return [link, { isSymlink: true, target: await readlink(linkPath) }];
|
|
8726
8764
|
}
|
|
8727
8765
|
return [link, { isSymlink: false, target: null }];
|
|
@@ -8753,10 +8791,10 @@ var ensureAgentSkillSymlinks = async (cwd) => {
|
|
|
8753
8791
|
plan.toCreate.map(async ({ link, target }) => {
|
|
8754
8792
|
const linkPath = join2(cwd, link);
|
|
8755
8793
|
try {
|
|
8756
|
-
const
|
|
8757
|
-
if (
|
|
8794
|
+
const stat3 = await lstat(linkPath);
|
|
8795
|
+
if (stat3.isSymbolicLink()) {
|
|
8758
8796
|
await rm(linkPath);
|
|
8759
|
-
} else if (
|
|
8797
|
+
} else if (stat3.isDirectory()) {
|
|
8760
8798
|
throw new Error(
|
|
8761
8799
|
`${link} exists as a real directory. Remove it manually, then re-run render-agent-layer.`
|
|
8762
8800
|
);
|
|
@@ -9609,13 +9647,13 @@ var cloneKitMirror = async (repoName, targetDir) => {
|
|
|
9609
9647
|
);
|
|
9610
9648
|
}
|
|
9611
9649
|
};
|
|
9612
|
-
var findLocalKitRoot = async (
|
|
9650
|
+
var findLocalKitRoot = async (exists2) => {
|
|
9613
9651
|
const candidates = [resolve2(HERE2, "..", ".."), resolve2(HERE2, "..", "..", "..")];
|
|
9614
9652
|
const probes = await Promise.all(
|
|
9615
9653
|
candidates.map(async (root) => {
|
|
9616
9654
|
const [hasPackages, hasTemplates] = await Promise.all([
|
|
9617
|
-
|
|
9618
|
-
|
|
9655
|
+
exists2(join8(root, "packages")),
|
|
9656
|
+
exists2(join8(root, "templates"))
|
|
9619
9657
|
]);
|
|
9620
9658
|
return { root, ok: hasPackages && hasTemplates };
|
|
9621
9659
|
})
|
|
@@ -9719,8 +9757,7 @@ var writeFirstPartyMcpConfigFile = async (configPath, layout, options) => {
|
|
|
9719
9757
|
}
|
|
9720
9758
|
const { config, written } = mergeFirstPartyMcpServers(existing, firstParty);
|
|
9721
9759
|
await mkdir3(dirname4(configPath), { recursive: true });
|
|
9722
|
-
await writeFile3(configPath,
|
|
9723
|
-
`);
|
|
9760
|
+
await writeFile3(configPath, formatFirstPartyMcpConfigJson(config));
|
|
9724
9761
|
return written;
|
|
9725
9762
|
};
|
|
9726
9763
|
var shipFirstPartyMcpConfigs = async (options) => {
|
|
@@ -10004,7 +10041,6 @@ var scaffoldKitWorkspace = async (options) => {
|
|
|
10004
10041
|
var isInteractive = () => Boolean(process.stdout.isTTY && process.stdin.isTTY);
|
|
10005
10042
|
|
|
10006
10043
|
// src/commands/scaffoldOutput.ts
|
|
10007
|
-
var isCreateSurface = (value) => value === "web" || value === "mobile" || value === "extension";
|
|
10008
10044
|
var formatCreateSuccess = (surface, dest) => [
|
|
10009
10045
|
"",
|
|
10010
10046
|
`\u2705 Created kit workspace + ${surface} surface at ${dest}`,
|
|
@@ -10017,12 +10053,9 @@ var formatCreateSuccess = (surface, dest) => [
|
|
|
10017
10053
|
var formatCreateError = (message) => [`\u274C ${message}`, ""];
|
|
10018
10054
|
var formatCreateUsage = () => [
|
|
10019
10055
|
"Pick one surface for your app:",
|
|
10020
|
-
|
|
10021
|
-
" vybekiit create app --mobile [directory]",
|
|
10022
|
-
" vybekiit create app --extension [directory]",
|
|
10056
|
+
...CREATE_SURFACES.map((surface) => ` vybekiit create app --${surface.id} [directory]`),
|
|
10023
10057
|
""
|
|
10024
10058
|
];
|
|
10025
|
-
var surfaceToTemplate = (surface) => surface;
|
|
10026
10059
|
|
|
10027
10060
|
// src/commands/createApp.ts
|
|
10028
10061
|
var destIsMissingOrEmpty = async (dest) => {
|
|
@@ -10033,47 +10066,46 @@ var destIsMissingOrEmpty = async (dest) => {
|
|
|
10033
10066
|
return true;
|
|
10034
10067
|
}
|
|
10035
10068
|
};
|
|
10036
|
-
var parseCreateAppArgs = (
|
|
10037
|
-
const
|
|
10038
|
-
const
|
|
10039
|
-
for (const
|
|
10040
|
-
|
|
10041
|
-
|
|
10042
|
-
|
|
10043
|
-
}
|
|
10044
|
-
if (arg.startsWith("--")) {
|
|
10069
|
+
var parseCreateAppArgs = (argumentsToParse) => {
|
|
10070
|
+
const selectedSurfaces = [];
|
|
10071
|
+
const destinationArguments = [];
|
|
10072
|
+
for (const argument of argumentsToParse) {
|
|
10073
|
+
const surfaceFlag = argument.startsWith("--") ? argument.slice(2) : "";
|
|
10074
|
+
if (isCreateSurface(surfaceFlag)) {
|
|
10075
|
+
selectedSurfaces.push(surfaceFlag);
|
|
10076
|
+
} else if (argument.startsWith("--")) {
|
|
10045
10077
|
return {
|
|
10046
10078
|
ok: false,
|
|
10047
|
-
error: `Unknown flag: ${
|
|
10079
|
+
error: `Unknown flag: ${argument}. Use ${CREATE_SURFACE_LIST_FLAGS}.`
|
|
10048
10080
|
};
|
|
10081
|
+
} else {
|
|
10082
|
+
destinationArguments.push(argument);
|
|
10049
10083
|
}
|
|
10050
|
-
positionals.push(arg);
|
|
10051
10084
|
}
|
|
10052
|
-
if (
|
|
10085
|
+
if (selectedSurfaces.length === 0) {
|
|
10053
10086
|
return { ok: false, error: "missing-surface" };
|
|
10054
10087
|
}
|
|
10055
|
-
if (
|
|
10056
|
-
return {
|
|
10088
|
+
if (selectedSurfaces.length > 1) {
|
|
10089
|
+
return {
|
|
10090
|
+
ok: false,
|
|
10091
|
+
error: `Pick one surface for now (${CREATE_SURFACE_LIST_FLAGS}).`
|
|
10092
|
+
};
|
|
10057
10093
|
}
|
|
10058
|
-
const
|
|
10059
|
-
if (
|
|
10094
|
+
const [selectedSurface] = selectedSurfaces;
|
|
10095
|
+
if (!selectedSurface) {
|
|
10060
10096
|
return { ok: false, error: "missing-surface" };
|
|
10061
10097
|
}
|
|
10062
|
-
const
|
|
10063
|
-
return { ok: true, inputs: { surface, destPath } };
|
|
10098
|
+
const destinationPath = destinationArguments[0] || `./${selectedSurface}`;
|
|
10099
|
+
return { ok: true, inputs: { surface: selectedSurface, destPath: destinationPath } };
|
|
10064
10100
|
};
|
|
10065
10101
|
var promptCreateSurface = async () => {
|
|
10066
|
-
const { cancel: cancel4, intro: intro2, isCancel:
|
|
10102
|
+
const { cancel: cancel4, intro: intro2, isCancel: isCancel5, outro, select: select3 } = await import("@clack/prompts");
|
|
10067
10103
|
intro2("VybeKiit \u2014 create an app");
|
|
10068
10104
|
const picked = await select3({
|
|
10069
10105
|
message: "What are you building?",
|
|
10070
|
-
options:
|
|
10071
|
-
{ value: "web", label: "Web app", hint: "Next.js + dashboard + marketing" },
|
|
10072
|
-
{ value: "mobile", label: "Mobile app", hint: "Expo" },
|
|
10073
|
-
{ value: "extension", label: "Browser extension", hint: "WXT" }
|
|
10074
|
-
]
|
|
10106
|
+
options: CREATE_SURFACE_PROMPT_OPTIONS
|
|
10075
10107
|
});
|
|
10076
|
-
if (
|
|
10108
|
+
if (isCancel5(picked) || typeof picked !== "string" || !isCreateSurface(picked)) {
|
|
10077
10109
|
cancel4("Cancelled.");
|
|
10078
10110
|
return null;
|
|
10079
10111
|
}
|
|
@@ -10115,7 +10147,7 @@ var runCreateApp = async (args) => {
|
|
|
10115
10147
|
return 1;
|
|
10116
10148
|
}
|
|
10117
10149
|
const { destPath, surface } = parsed.inputs;
|
|
10118
|
-
const template =
|
|
10150
|
+
const template = surface;
|
|
10119
10151
|
const dest = resolve3(process6.cwd(), destPath);
|
|
10120
10152
|
let cleanup;
|
|
10121
10153
|
const mayCleanupPartial = await destIsMissingOrEmpty(dest);
|
|
@@ -10443,13 +10475,13 @@ var writeTemplateRequired = (flags) => {
|
|
|
10443
10475
|
return 1;
|
|
10444
10476
|
};
|
|
10445
10477
|
var promptForDropInputs = async (parsed) => {
|
|
10446
|
-
const { confirm, intro: intro2, isCancel:
|
|
10478
|
+
const { confirm: confirm2, intro: intro2, isCancel: isCancel5, select: select3, text: text2, cancel: cancel4 } = await import("@clack/prompts");
|
|
10447
10479
|
intro2("VybeKiit: drop a template");
|
|
10448
10480
|
const picked = await select3({
|
|
10449
10481
|
message: "Which template?",
|
|
10450
10482
|
options: DROP_TEMPLATE_OPTIONS
|
|
10451
10483
|
});
|
|
10452
|
-
if (
|
|
10484
|
+
if (isCancel5(picked) || typeof picked !== "string" || !isTemplateName(picked)) {
|
|
10453
10485
|
cancel4("Cancelled.");
|
|
10454
10486
|
return null;
|
|
10455
10487
|
}
|
|
@@ -10462,17 +10494,17 @@ var promptForDropInputs = async (parsed) => {
|
|
|
10462
10494
|
defaultValue: `./${picked}`,
|
|
10463
10495
|
validate: (value) => typeof value === "string" && value.trim() !== "" ? void 0 : "Path is required"
|
|
10464
10496
|
});
|
|
10465
|
-
if (
|
|
10497
|
+
if (isCancel5(dest) || typeof dest !== "string") {
|
|
10466
10498
|
cancel4("Cancelled.");
|
|
10467
10499
|
return null;
|
|
10468
10500
|
}
|
|
10469
10501
|
destPath = dest;
|
|
10470
10502
|
}
|
|
10471
10503
|
const mode = dropMode(parsed.flags);
|
|
10472
|
-
const confirmed = await
|
|
10504
|
+
const confirmed = await confirm2({
|
|
10473
10505
|
message: `Drop "${picked}" -> ${resolve5(destPath)}${mode === "new" ? "" : ` (${mode})`}?`
|
|
10474
10506
|
});
|
|
10475
|
-
if (
|
|
10507
|
+
if (isCancel5(confirmed) || !confirmed) {
|
|
10476
10508
|
cancel4("Cancelled.");
|
|
10477
10509
|
return null;
|
|
10478
10510
|
}
|
|
@@ -11627,9 +11659,9 @@ import { Effect as Effect6 } from "effect";
|
|
|
11627
11659
|
// ../packages/db/src/liveWork/railwayProvision.ts
|
|
11628
11660
|
import { Effect as Effect5 } from "effect";
|
|
11629
11661
|
var defaultRailwayCliRunner = async (args, options = {}) => {
|
|
11630
|
-
const { execFile:
|
|
11662
|
+
const { execFile: execFile8 } = await import("child_process");
|
|
11631
11663
|
const { promisify: promisify7 } = await import("util");
|
|
11632
|
-
const execFileAsync7 = promisify7(
|
|
11664
|
+
const execFileAsync7 = promisify7(execFile8);
|
|
11633
11665
|
try {
|
|
11634
11666
|
const { stdout, stderr } = await execFileAsync7("railway", [...args], {
|
|
11635
11667
|
cwd: options.cwd,
|
|
@@ -11644,10 +11676,16 @@ var defaultRailwayCliRunner = async (args, options = {}) => {
|
|
|
11644
11676
|
} catch (cause) {
|
|
11645
11677
|
const err = cause;
|
|
11646
11678
|
const exitCode = typeof err.code === "number" ? err.code : 1;
|
|
11679
|
+
let stderr = "railway failed";
|
|
11680
|
+
if (typeof err.stderr === "string") {
|
|
11681
|
+
stderr = err.stderr;
|
|
11682
|
+
} else if (typeof err.message === "string") {
|
|
11683
|
+
stderr = err.message;
|
|
11684
|
+
}
|
|
11647
11685
|
return {
|
|
11648
11686
|
code: exitCode,
|
|
11649
11687
|
stdout: typeof err.stdout === "string" ? err.stdout : "",
|
|
11650
|
-
stderr
|
|
11688
|
+
stderr
|
|
11651
11689
|
};
|
|
11652
11690
|
}
|
|
11653
11691
|
};
|
|
@@ -11700,8 +11738,8 @@ var isRailwayStatusLinked = (code, stdout, stderr) => {
|
|
|
11700
11738
|
}
|
|
11701
11739
|
return blob.includes("project") && !blob.includes("no linked");
|
|
11702
11740
|
};
|
|
11703
|
-
var delay = (ms) => new Promise((
|
|
11704
|
-
setTimeout(
|
|
11741
|
+
var delay = (ms) => new Promise((resolve13) => {
|
|
11742
|
+
setTimeout(resolve13, ms);
|
|
11705
11743
|
});
|
|
11706
11744
|
var isRailwayRateLimited = (blob) => {
|
|
11707
11745
|
const lower = blob.toLowerCase();
|
|
@@ -12088,7 +12126,7 @@ var buildResult = (provisioned, pin, args) => {
|
|
|
12088
12126
|
}
|
|
12089
12127
|
return result;
|
|
12090
12128
|
};
|
|
12091
|
-
var walkLadder = (order, ctx, steps, namedStick, writePin, existingAuthProvider) => Effect8.gen(function* () {
|
|
12129
|
+
var walkLadder = (order, ctx, steps, namedStick, writePin, existingAuthProvider, verifyProvisioned) => Effect8.gen(function* () {
|
|
12092
12130
|
const stepByProvider = new Map(steps.map((step) => [step.provider, step]));
|
|
12093
12131
|
const skipped = [];
|
|
12094
12132
|
const orphans = [];
|
|
@@ -12102,7 +12140,7 @@ var walkLadder = (order, ctx, steps, namedStick, writePin, existingAuthProvider)
|
|
|
12102
12140
|
const attempt = yield* step.tryProvision(ctx).pipe(Effect8.either);
|
|
12103
12141
|
if (attempt._tag === "Right") {
|
|
12104
12142
|
const provisioned = attempt.right;
|
|
12105
|
-
const verified = yield*
|
|
12143
|
+
const verified = yield* verifyProvisioned(provisioned).pipe(Effect8.either);
|
|
12106
12144
|
if (verified._tag === "Left") {
|
|
12107
12145
|
orphans.push(orphanFromProvisioned(provisioned, "verify failed"));
|
|
12108
12146
|
yield* cleanupOrphans(orphans);
|
|
@@ -12151,6 +12189,7 @@ var walkLadder = (order, ctx, steps, namedStick, writePin, existingAuthProvider)
|
|
|
12151
12189
|
var runDataLiveWork = (options) => Effect8.gen(function* () {
|
|
12152
12190
|
const env = options.env ?? {};
|
|
12153
12191
|
const preferExisting = options.preferExisting !== false;
|
|
12192
|
+
const verifyProvisioned = options.verifyProvisioned || verifyProvisionedData;
|
|
12154
12193
|
let existingAuthProvider;
|
|
12155
12194
|
if (typeof env.AUTH_PROVIDER === "string" && env.AUTH_PROVIDER.length > 0) {
|
|
12156
12195
|
existingAuthProvider = env.AUTH_PROVIDER;
|
|
@@ -12158,7 +12197,7 @@ var runDataLiveWork = (options) => Effect8.gen(function* () {
|
|
|
12158
12197
|
if (preferExisting && options.namedVendor === void 0) {
|
|
12159
12198
|
const existing = detectExistingPrimary(env);
|
|
12160
12199
|
if (existing !== null) {
|
|
12161
|
-
yield*
|
|
12200
|
+
yield* verifyProvisioned(existing);
|
|
12162
12201
|
return yield* finishSuccess({
|
|
12163
12202
|
provisioned: existing,
|
|
12164
12203
|
hopped: false,
|
|
@@ -12183,7 +12222,8 @@ var runDataLiveWork = (options) => Effect8.gen(function* () {
|
|
|
12183
12222
|
options.steps ?? defaultDataLadderSteps,
|
|
12184
12223
|
options.namedVendor !== void 0 && options.namedVendor !== null,
|
|
12185
12224
|
options.writePin,
|
|
12186
|
-
existingAuthProvider
|
|
12225
|
+
existingAuthProvider,
|
|
12226
|
+
verifyProvisioned
|
|
12187
12227
|
);
|
|
12188
12228
|
});
|
|
12189
12229
|
|
|
@@ -14719,9 +14759,9 @@ var makeProvisionedHost = (base, optional = {}) => {
|
|
|
14719
14759
|
|
|
14720
14760
|
// ../packages/deploy/src/liveWork/cloudflareProvision.ts
|
|
14721
14761
|
var defaultWranglerCliRunner = async (args, options = {}) => {
|
|
14722
|
-
const { execFile:
|
|
14762
|
+
const { execFile: execFile8 } = await import("child_process");
|
|
14723
14763
|
const { promisify: promisify7 } = await import("util");
|
|
14724
|
-
const execFileAsync7 = promisify7(
|
|
14764
|
+
const execFileAsync7 = promisify7(execFile8);
|
|
14725
14765
|
try {
|
|
14726
14766
|
const { stdout, stderr } = await execFileAsync7("wrangler", [...args], {
|
|
14727
14767
|
cwd: options.cwd,
|
|
@@ -14736,10 +14776,16 @@ var defaultWranglerCliRunner = async (args, options = {}) => {
|
|
|
14736
14776
|
};
|
|
14737
14777
|
} catch (cause) {
|
|
14738
14778
|
const err = cause;
|
|
14779
|
+
let stderr = "wrangler failed";
|
|
14780
|
+
if (typeof err.stderr === "string") {
|
|
14781
|
+
stderr = err.stderr;
|
|
14782
|
+
} else if (typeof err.message === "string") {
|
|
14783
|
+
stderr = err.message;
|
|
14784
|
+
}
|
|
14739
14785
|
return {
|
|
14740
14786
|
code: typeof err.code === "number" ? err.code : 1,
|
|
14741
14787
|
stdout: typeof err.stdout === "string" ? err.stdout : "",
|
|
14742
|
-
stderr
|
|
14788
|
+
stderr
|
|
14743
14789
|
};
|
|
14744
14790
|
}
|
|
14745
14791
|
};
|
|
@@ -14798,8 +14844,8 @@ var verifyHostUrl = (url, fetchImpl = globalThis.fetch, options = {}) => Effect1
|
|
|
14798
14844
|
lastMessage = cause instanceof Error ? cause.message : "Host verify failed";
|
|
14799
14845
|
}
|
|
14800
14846
|
if (i < attempts - 1) {
|
|
14801
|
-
await new Promise((
|
|
14802
|
-
setTimeout(
|
|
14847
|
+
await new Promise((resolve13) => {
|
|
14848
|
+
setTimeout(resolve13, delayMs);
|
|
14803
14849
|
});
|
|
14804
14850
|
}
|
|
14805
14851
|
}
|
|
@@ -15217,8 +15263,8 @@ var createGithubPagesHost = (options) => Effect14.gen(function* () {
|
|
|
15217
15263
|
}
|
|
15218
15264
|
}
|
|
15219
15265
|
}
|
|
15220
|
-
await new Promise((
|
|
15221
|
-
setTimeout(
|
|
15266
|
+
await new Promise((resolve13) => {
|
|
15267
|
+
setTimeout(resolve13, 3e3);
|
|
15222
15268
|
});
|
|
15223
15269
|
}
|
|
15224
15270
|
return makeProvisionedHost(
|
|
@@ -15560,8 +15606,8 @@ var createNetlifyHost = (options) => Effect15.gen(function* () {
|
|
|
15560
15606
|
}
|
|
15561
15607
|
}
|
|
15562
15608
|
}
|
|
15563
|
-
await new Promise((
|
|
15564
|
-
setTimeout(
|
|
15609
|
+
await new Promise((resolve13) => {
|
|
15610
|
+
setTimeout(resolve13, 2e3);
|
|
15565
15611
|
});
|
|
15566
15612
|
}
|
|
15567
15613
|
try {
|
|
@@ -15641,9 +15687,9 @@ import { tmpdir as tmpdir6 } from "os";
|
|
|
15641
15687
|
import { join as join24 } from "path";
|
|
15642
15688
|
import { Effect as Effect16 } from "effect";
|
|
15643
15689
|
var defaultRailwayHostCliRunner = async (args, options = {}) => {
|
|
15644
|
-
const { execFile:
|
|
15690
|
+
const { execFile: execFile8 } = await import("child_process");
|
|
15645
15691
|
const { promisify: promisify7 } = await import("util");
|
|
15646
|
-
const execFileAsync7 = promisify7(
|
|
15692
|
+
const execFileAsync7 = promisify7(execFile8);
|
|
15647
15693
|
try {
|
|
15648
15694
|
const { stdout, stderr } = await execFileAsync7("railway", [...args], {
|
|
15649
15695
|
cwd: options.cwd,
|
|
@@ -15658,10 +15704,16 @@ var defaultRailwayHostCliRunner = async (args, options = {}) => {
|
|
|
15658
15704
|
};
|
|
15659
15705
|
} catch (cause) {
|
|
15660
15706
|
const err = cause;
|
|
15707
|
+
let stderr = "railway failed";
|
|
15708
|
+
if (typeof err.stderr === "string") {
|
|
15709
|
+
stderr = err.stderr;
|
|
15710
|
+
} else if (typeof err.message === "string") {
|
|
15711
|
+
stderr = err.message;
|
|
15712
|
+
}
|
|
15661
15713
|
return {
|
|
15662
15714
|
code: typeof err.code === "number" ? err.code : 1,
|
|
15663
15715
|
stdout: typeof err.stdout === "string" ? err.stdout : "",
|
|
15664
|
-
stderr
|
|
15716
|
+
stderr
|
|
15665
15717
|
};
|
|
15666
15718
|
}
|
|
15667
15719
|
};
|
|
@@ -16016,9 +16068,9 @@ import { tmpdir as tmpdir8 } from "os";
|
|
|
16016
16068
|
import { join as join26 } from "path";
|
|
16017
16069
|
import { Effect as Effect18 } from "effect";
|
|
16018
16070
|
var defaultVercelCliRunner = async (args, options = {}) => {
|
|
16019
|
-
const { execFile:
|
|
16071
|
+
const { execFile: execFile8 } = await import("child_process");
|
|
16020
16072
|
const { promisify: promisify7 } = await import("util");
|
|
16021
|
-
const execFileAsync7 = promisify7(
|
|
16073
|
+
const execFileAsync7 = promisify7(execFile8);
|
|
16022
16074
|
try {
|
|
16023
16075
|
const { stdout, stderr } = await execFileAsync7("vercel", [...args], {
|
|
16024
16076
|
cwd: options.cwd,
|
|
@@ -16033,10 +16085,16 @@ var defaultVercelCliRunner = async (args, options = {}) => {
|
|
|
16033
16085
|
};
|
|
16034
16086
|
} catch (cause) {
|
|
16035
16087
|
const err = cause;
|
|
16088
|
+
let stderr = "vercel failed";
|
|
16089
|
+
if (typeof err.stderr === "string") {
|
|
16090
|
+
stderr = err.stderr;
|
|
16091
|
+
} else if (typeof err.message === "string") {
|
|
16092
|
+
stderr = err.message;
|
|
16093
|
+
}
|
|
16036
16094
|
return {
|
|
16037
16095
|
code: typeof err.code === "number" ? err.code : 1,
|
|
16038
16096
|
stdout: typeof err.stdout === "string" ? err.stdout : "",
|
|
16039
|
-
stderr
|
|
16097
|
+
stderr
|
|
16040
16098
|
};
|
|
16041
16099
|
}
|
|
16042
16100
|
};
|
|
@@ -17092,10 +17150,10 @@ var runLocalDev = async () => {
|
|
|
17092
17150
|
child.stderr.on("data", (data) => {
|
|
17093
17151
|
process.stderr.write(data.toString());
|
|
17094
17152
|
});
|
|
17095
|
-
return new Promise((
|
|
17153
|
+
return new Promise((resolve13) => {
|
|
17096
17154
|
child.on("close", (code) => {
|
|
17097
17155
|
const exitCode = code === null ? 0 : code;
|
|
17098
|
-
|
|
17156
|
+
resolve13(exitCode);
|
|
17099
17157
|
});
|
|
17100
17158
|
});
|
|
17101
17159
|
};
|
|
@@ -17105,7 +17163,8 @@ import process10 from "process";
|
|
|
17105
17163
|
var runNew = async (args) => {
|
|
17106
17164
|
const [template, dir] = args;
|
|
17107
17165
|
process10.stderr.write(
|
|
17108
|
-
|
|
17166
|
+
`Note: \`vybekiit new\` is deprecated. Use \`vybekiit create app ${CREATE_SURFACE_PIPE_FLAGS}\`.
|
|
17167
|
+
`
|
|
17109
17168
|
);
|
|
17110
17169
|
if (template !== void 0 && template !== "" && isCreateSurface(template)) {
|
|
17111
17170
|
const forwarded = dir === void 0 || dir === "" ? [`--${template}`] : [`--${template}`, dir];
|
|
@@ -17115,7 +17174,7 @@ var runNew = async (args) => {
|
|
|
17115
17174
|
return await runCreateApp([]);
|
|
17116
17175
|
}
|
|
17117
17176
|
process10.stderr.write(
|
|
17118
|
-
`Unknown surface "${template}". Use
|
|
17177
|
+
`Unknown surface "${template}". Use ${CREATE_SURFACE_LIST_FLAGS} (spa is not a create-app surface).
|
|
17119
17178
|
`
|
|
17120
17179
|
);
|
|
17121
17180
|
process10.stderr.write(
|
|
@@ -17706,8 +17765,8 @@ var planPageRecipeInstall = async (options) => {
|
|
|
17706
17765
|
var applyPageRecipeInstall = async (plan, options = { force: false }) => {
|
|
17707
17766
|
const outcomes = await Promise.all(
|
|
17708
17767
|
plan.files.map(async (file) => {
|
|
17709
|
-
const
|
|
17710
|
-
if (
|
|
17768
|
+
const exists2 = await pathExists6(file.absolutePath);
|
|
17769
|
+
if (exists2 && !options.force) {
|
|
17711
17770
|
return { kind: "skipped", path: file.relativePath };
|
|
17712
17771
|
}
|
|
17713
17772
|
await mkdir7(dirname11(file.absolutePath), { recursive: true });
|
|
@@ -18446,7 +18505,7 @@ var runRenderAgentLayer = async (cwd = process15.cwd(), templateArg) => {
|
|
|
18446
18505
|
};
|
|
18447
18506
|
|
|
18448
18507
|
// src/commands/setup.ts
|
|
18449
|
-
import
|
|
18508
|
+
import process24 from "process";
|
|
18450
18509
|
|
|
18451
18510
|
// src/doctor/gate.ts
|
|
18452
18511
|
import { spawnSync } from "child_process";
|
|
@@ -18508,7 +18567,7 @@ var ensureAccessOrExit = () => {
|
|
|
18508
18567
|
|
|
18509
18568
|
// src/doctor/run.ts
|
|
18510
18569
|
import { spawnSync as spawnSync7 } from "child_process";
|
|
18511
|
-
import
|
|
18570
|
+
import process19 from "process";
|
|
18512
18571
|
|
|
18513
18572
|
// ../packages/reportMode/src/deeplink.ts
|
|
18514
18573
|
var inferVybeAssistant = (options) => {
|
|
@@ -18578,10 +18637,10 @@ var createDefaultMcpWireDeps = () => ({
|
|
|
18578
18637
|
return { status: result.status };
|
|
18579
18638
|
}
|
|
18580
18639
|
});
|
|
18581
|
-
var findMcpCatalogPath = (cwd,
|
|
18640
|
+
var findMcpCatalogPath = (cwd, pathExists9) => {
|
|
18582
18641
|
for (const relative4 of CATALOG_RELATIVE_PATHS) {
|
|
18583
18642
|
const absolute = join34(cwd, relative4);
|
|
18584
|
-
if (
|
|
18643
|
+
if (pathExists9(absolute)) {
|
|
18585
18644
|
return absolute;
|
|
18586
18645
|
}
|
|
18587
18646
|
}
|
|
@@ -19177,10 +19236,82 @@ var verifyAssetsPipeline = (cwd, surface = inferProjectSurfaceSync(cwd), deps =
|
|
|
19177
19236
|
};
|
|
19178
19237
|
};
|
|
19179
19238
|
|
|
19180
|
-
// src/doctor/
|
|
19181
|
-
import {
|
|
19239
|
+
// src/doctor/claudeGlobalConfig.ts
|
|
19240
|
+
import { readdir as readdir8, readFile as readFile15, stat } from "fs/promises";
|
|
19241
|
+
import { join as join38 } from "path";
|
|
19242
|
+
|
|
19243
|
+
// src/global/globalPaths.ts
|
|
19182
19244
|
import { homedir as homedir2 } from "os";
|
|
19183
|
-
import { join as join37 } from "path";
|
|
19245
|
+
import { dirname as dirname14, join as join37 } from "path";
|
|
19246
|
+
import process17 from "process";
|
|
19247
|
+
import { fileURLToPath as fileURLToPath7 } from "url";
|
|
19248
|
+
var MODULE_DIR = dirname14(fileURLToPath7(import.meta.url));
|
|
19249
|
+
var resolveConfigDir = () => {
|
|
19250
|
+
const override = process17.env.CLAUDE_CONFIG_DIR;
|
|
19251
|
+
if (override !== void 0 && override.trim() !== "") {
|
|
19252
|
+
return override.trim();
|
|
19253
|
+
}
|
|
19254
|
+
return join37(homedir2(), ".claude");
|
|
19255
|
+
};
|
|
19256
|
+
var resolveGlobalPaths = (configDir = resolveConfigDir()) => ({
|
|
19257
|
+
configDir,
|
|
19258
|
+
skillsDir: join37(configDir, "skills"),
|
|
19259
|
+
commandsDir: join37(configDir, "commands"),
|
|
19260
|
+
memoryFile: join37(configDir, "CLAUDE.md"),
|
|
19261
|
+
settingsFile: join37(configDir, "settings.json"),
|
|
19262
|
+
// At runtime this module is inlined into dist/bin.js, so MODULE_DIR is <install>/dist
|
|
19263
|
+
// and the payload sits beside it at dist/global-skills.
|
|
19264
|
+
bundledSkillsDir: join37(MODULE_DIR, "global-skills")
|
|
19265
|
+
});
|
|
19266
|
+
|
|
19267
|
+
// src/doctor/claudeGlobalConfig.ts
|
|
19268
|
+
var exists = async (path) => {
|
|
19269
|
+
try {
|
|
19270
|
+
await stat(path);
|
|
19271
|
+
return true;
|
|
19272
|
+
} catch {
|
|
19273
|
+
return false;
|
|
19274
|
+
}
|
|
19275
|
+
};
|
|
19276
|
+
var countManagedSkills = async (skillsDir) => {
|
|
19277
|
+
let count = 0;
|
|
19278
|
+
try {
|
|
19279
|
+
const entries = await readdir8(skillsDir, { withFileTypes: true });
|
|
19280
|
+
for (const entry of entries) {
|
|
19281
|
+
if (entry.isDirectory() && await exists(join38(skillsDir, entry.name, ".vybekiit-managed"))) {
|
|
19282
|
+
count += 1;
|
|
19283
|
+
}
|
|
19284
|
+
}
|
|
19285
|
+
} catch {
|
|
19286
|
+
return 0;
|
|
19287
|
+
}
|
|
19288
|
+
return count;
|
|
19289
|
+
};
|
|
19290
|
+
var readGlobalStatus = async (paths = resolveGlobalPaths()) => {
|
|
19291
|
+
let hasMemory = false;
|
|
19292
|
+
try {
|
|
19293
|
+
hasMemory = (await readFile15(paths.memoryFile, "utf8")).includes("BEGIN VYBEKIIT");
|
|
19294
|
+
} catch {
|
|
19295
|
+
hasMemory = false;
|
|
19296
|
+
}
|
|
19297
|
+
return {
|
|
19298
|
+
hasCommand: await exists(join38(paths.commandsDir, "vybekiit.md")),
|
|
19299
|
+
hasMemory,
|
|
19300
|
+
skillCount: await countManagedSkills(paths.skillsDir)
|
|
19301
|
+
};
|
|
19302
|
+
};
|
|
19303
|
+
var isGloballyInstalled = (status) => status.hasCommand && status.hasMemory && status.skillCount > 0;
|
|
19304
|
+
var formatGlobalStatus = (status) => {
|
|
19305
|
+
if (isGloballyInstalled(status)) {
|
|
19306
|
+
return `\u2713 VybeKiit global - active in every project (${status.skillCount} skills, /vybekiit command, Claude is aware).`;
|
|
19307
|
+
}
|
|
19308
|
+
return "\u2192 VybeKiit global - not set up yet. Run `vybekiit setup` (or `vybekiit global-install`) to add it to every project.";
|
|
19309
|
+
};
|
|
19310
|
+
|
|
19311
|
+
// src/doctor/codexConfig.ts
|
|
19312
|
+
import { access as access13, mkdir as mkdir9, readFile as readFile16, writeFile as writeFile10 } from "fs/promises";
|
|
19313
|
+
import { homedir as homedir3 } from "os";
|
|
19314
|
+
import { join as join39 } from "path";
|
|
19184
19315
|
var FEATURES_BLOCK = ["[features]", "skills = true"].join("\n");
|
|
19185
19316
|
var FEATURES_SKILLS_ENABLED_PATTERN = /\[features\][\s\S]*?\bskills\s*=\s*true\b/m;
|
|
19186
19317
|
var FEATURES_BLOCK_PATTERN = /(\[features\][^[]*)/m;
|
|
@@ -19189,10 +19320,10 @@ var SKILLS_LINE_PATTERN = /\bskills\s*=\s*.*/m;
|
|
|
19189
19320
|
var codexConfigPath = () => {
|
|
19190
19321
|
const configuredHome = process.env.CODEX_HOME;
|
|
19191
19322
|
if (configuredHome !== void 0 && configuredHome.trim() !== "") {
|
|
19192
|
-
return
|
|
19323
|
+
return join39(configuredHome.trim(), "config.toml");
|
|
19193
19324
|
}
|
|
19194
|
-
const home =
|
|
19195
|
-
return
|
|
19325
|
+
const home = join39(homedir3(), ".codex");
|
|
19326
|
+
return join39(home, "config.toml");
|
|
19196
19327
|
};
|
|
19197
19328
|
var upsertFeaturesSkills = (content) => {
|
|
19198
19329
|
if (FEATURES_SKILLS_ENABLED_PATTERN.test(content)) {
|
|
@@ -19218,10 +19349,10 @@ ${FEATURES_BLOCK}
|
|
|
19218
19349
|
};
|
|
19219
19350
|
var ensureCodexSkillsEnabled = async () => {
|
|
19220
19351
|
const path = codexConfigPath();
|
|
19221
|
-
await mkdir9(
|
|
19352
|
+
await mkdir9(join39(path, ".."), { recursive: true });
|
|
19222
19353
|
let previous = "";
|
|
19223
19354
|
try {
|
|
19224
|
-
previous = await
|
|
19355
|
+
previous = await readFile16(path, "utf8");
|
|
19225
19356
|
} catch (error) {
|
|
19226
19357
|
if (!(error instanceof Error && "code" in error) || error.code !== "ENOENT") {
|
|
19227
19358
|
throw error;
|
|
@@ -19237,7 +19368,7 @@ var ensureCodexSkillsEnabled = async () => {
|
|
|
19237
19368
|
|
|
19238
19369
|
// src/doctor/kitWorkspaceHealth.ts
|
|
19239
19370
|
import { existsSync as existsSync9, readdirSync as readdirSync2, readFileSync as readFileSync9, statSync as statSync2 } from "fs";
|
|
19240
|
-
import { join as
|
|
19371
|
+
import { join as join40 } from "path";
|
|
19241
19372
|
var readPackageJsonSafe = (packageJsonPath) => {
|
|
19242
19373
|
if (!existsSync9(packageJsonPath)) {
|
|
19243
19374
|
return null;
|
|
@@ -19270,7 +19401,7 @@ var listPackageRelDirs = (packagesRoot) => {
|
|
|
19270
19401
|
const top = readdirSync2(packagesRoot);
|
|
19271
19402
|
const rels = [];
|
|
19272
19403
|
for (const entry of top) {
|
|
19273
|
-
const abs =
|
|
19404
|
+
const abs = join40(packagesRoot, entry);
|
|
19274
19405
|
let isDir = false;
|
|
19275
19406
|
try {
|
|
19276
19407
|
isDir = statSync2(abs).isDirectory();
|
|
@@ -19280,7 +19411,7 @@ var listPackageRelDirs = (packagesRoot) => {
|
|
|
19280
19411
|
if (!isDir) {
|
|
19281
19412
|
continue;
|
|
19282
19413
|
}
|
|
19283
|
-
if (existsSync9(
|
|
19414
|
+
if (existsSync9(join40(abs, "package.json"))) {
|
|
19284
19415
|
rels.push(entry);
|
|
19285
19416
|
continue;
|
|
19286
19417
|
}
|
|
@@ -19291,10 +19422,10 @@ var listPackageRelDirs = (packagesRoot) => {
|
|
|
19291
19422
|
continue;
|
|
19292
19423
|
}
|
|
19293
19424
|
for (const child of nested) {
|
|
19294
|
-
const childAbs =
|
|
19425
|
+
const childAbs = join40(abs, child);
|
|
19295
19426
|
try {
|
|
19296
|
-
if (statSync2(childAbs).isDirectory() && existsSync9(
|
|
19297
|
-
rels.push(
|
|
19427
|
+
if (statSync2(childAbs).isDirectory() && existsSync9(join40(childAbs, "package.json"))) {
|
|
19428
|
+
rels.push(join40(entry, child));
|
|
19298
19429
|
}
|
|
19299
19430
|
} catch {
|
|
19300
19431
|
}
|
|
@@ -19303,15 +19434,15 @@ var listPackageRelDirs = (packagesRoot) => {
|
|
|
19303
19434
|
return rels;
|
|
19304
19435
|
};
|
|
19305
19436
|
var findMissingDistPackages = (cwd) => {
|
|
19306
|
-
const packagesRoot =
|
|
19437
|
+
const packagesRoot = join40(cwd, "packages");
|
|
19307
19438
|
const missing = [];
|
|
19308
19439
|
for (const relDir of listPackageRelDirs(packagesRoot)) {
|
|
19309
|
-
const packageDir =
|
|
19310
|
-
const pkg = readPackageJsonSafe(
|
|
19440
|
+
const packageDir = join40(packagesRoot, relDir);
|
|
19441
|
+
const pkg = readPackageJsonSafe(join40(packageDir, "package.json"));
|
|
19311
19442
|
if (pkg === null || !packageExpectsDist(pkg)) {
|
|
19312
19443
|
continue;
|
|
19313
19444
|
}
|
|
19314
|
-
if (!existsSync9(
|
|
19445
|
+
if (!existsSync9(join40(packageDir, "dist"))) {
|
|
19315
19446
|
const name = typeof pkg.name === "string" ? pkg.name : relDir;
|
|
19316
19447
|
missing.push({ name, relDir });
|
|
19317
19448
|
}
|
|
@@ -19319,7 +19450,7 @@ var findMissingDistPackages = (cwd) => {
|
|
|
19319
19450
|
return missing;
|
|
19320
19451
|
};
|
|
19321
19452
|
var verifyKitWorkspaceHealth = (cwd) => {
|
|
19322
|
-
const packagesRoot =
|
|
19453
|
+
const packagesRoot = join40(cwd, "packages");
|
|
19323
19454
|
if (!existsSync9(packagesRoot)) {
|
|
19324
19455
|
return { ok: true, lines: [] };
|
|
19325
19456
|
}
|
|
@@ -19337,7 +19468,7 @@ var verifyKitWorkspaceHealth = (cwd) => {
|
|
|
19337
19468
|
);
|
|
19338
19469
|
}
|
|
19339
19470
|
const buildRoots = ["tsconfig.base.json", "scripts/lib/tsupWorkspaceAliases.mjs"];
|
|
19340
|
-
const missingRoots = buildRoots.filter((rel) => !existsSync9(
|
|
19471
|
+
const missingRoots = buildRoots.filter((rel) => !existsSync9(join40(cwd, rel)));
|
|
19341
19472
|
if (missingRoots.length > 0 && missing.length > 0) {
|
|
19342
19473
|
lines.push(
|
|
19343
19474
|
`\u2717 Kit is also missing rebuild helpers (${missingRoots.join(", ")}). Re-run \`vybekiit create app\` with a current CLI so build roots ship with the workspace.`
|
|
@@ -19486,11 +19617,11 @@ var mergeDoctorTools = (providerTools, nativeTools) => {
|
|
|
19486
19617
|
|
|
19487
19618
|
// src/doctor/perfReadiness.ts
|
|
19488
19619
|
import { existsSync as existsSync10, readFileSync as readFileSync10 } from "fs";
|
|
19489
|
-
import { join as
|
|
19620
|
+
import { join as join41 } from "path";
|
|
19490
19621
|
var createDefaultPerfReadinessDeps = (cwd) => ({
|
|
19491
|
-
exists: (relativePath) => existsSync10(
|
|
19622
|
+
exists: (relativePath) => existsSync10(join41(cwd, relativePath)),
|
|
19492
19623
|
readUtf8: (relativePath) => {
|
|
19493
|
-
const absolute =
|
|
19624
|
+
const absolute = join41(cwd, relativePath);
|
|
19494
19625
|
if (!existsSync10(absolute)) {
|
|
19495
19626
|
return null;
|
|
19496
19627
|
}
|
|
@@ -19635,17 +19766,17 @@ var reportFor = (reports, name) => reports.find((r) => r.tool === name);
|
|
|
19635
19766
|
|
|
19636
19767
|
// src/doctor/platformSkills.ts
|
|
19637
19768
|
import { existsSync as existsSync11, readFileSync as readFileSync11 } from "fs";
|
|
19638
|
-
import { join as
|
|
19639
|
-
import
|
|
19769
|
+
import { join as join42 } from "path";
|
|
19770
|
+
import process18 from "process";
|
|
19640
19771
|
var readManifest = (cwd) => {
|
|
19641
|
-
const path =
|
|
19772
|
+
const path = join42(cwd, "platform-skills.manifest.json");
|
|
19642
19773
|
if (!existsSync11(path)) {
|
|
19643
19774
|
return null;
|
|
19644
19775
|
}
|
|
19645
19776
|
return JSON.parse(readFileSync11(path, "utf8"));
|
|
19646
19777
|
};
|
|
19647
19778
|
var readSkillsLock = (cwd) => {
|
|
19648
|
-
const path =
|
|
19779
|
+
const path = join42(cwd, "skills-lock.json");
|
|
19649
19780
|
if (!existsSync11(path)) {
|
|
19650
19781
|
return null;
|
|
19651
19782
|
}
|
|
@@ -19655,7 +19786,7 @@ var readSkillsLock = (cwd) => {
|
|
|
19655
19786
|
return null;
|
|
19656
19787
|
}
|
|
19657
19788
|
};
|
|
19658
|
-
var skillFileExists = (cwd, name) => existsSync11(
|
|
19789
|
+
var skillFileExists = (cwd, name) => existsSync11(join42(cwd, ".agents", "skills", name, "SKILL.md"));
|
|
19659
19790
|
var verifyPlatformSkills = (cwd) => {
|
|
19660
19791
|
const manifest = readManifest(cwd);
|
|
19661
19792
|
if (manifest === null) {
|
|
@@ -19679,7 +19810,7 @@ var verifyPlatformSkills = (cwd) => {
|
|
|
19679
19810
|
};
|
|
19680
19811
|
};
|
|
19681
19812
|
var templateLabelForPlatformSkills = (cwd) => {
|
|
19682
|
-
if (!existsSync11(
|
|
19813
|
+
if (!existsSync11(join42(cwd, "platform-skills.manifest.json"))) {
|
|
19683
19814
|
return null;
|
|
19684
19815
|
}
|
|
19685
19816
|
return inferProjectSurfaceSync(cwd).template;
|
|
@@ -19689,7 +19820,7 @@ var formatPlatformSkillsReport = (report) => {
|
|
|
19689
19820
|
return [];
|
|
19690
19821
|
}
|
|
19691
19822
|
const lines = [];
|
|
19692
|
-
const lockPath =
|
|
19823
|
+
const lockPath = join42(process18.cwd(), "skills-lock.json");
|
|
19693
19824
|
if (existsSync11(lockPath)) {
|
|
19694
19825
|
try {
|
|
19695
19826
|
const lock = JSON.parse(readFileSync11(lockPath, "utf8"));
|
|
@@ -19746,10 +19877,10 @@ var formatProductSurfaceHints = (env) => {
|
|
|
19746
19877
|
|
|
19747
19878
|
// src/doctor/projectHealth.ts
|
|
19748
19879
|
import { existsSync as existsSync12, readFileSync as readFileSync12 } from "fs";
|
|
19749
|
-
import { join as
|
|
19880
|
+
import { join as join43 } from "path";
|
|
19750
19881
|
var GITIGNORE_ENV_LINE_PATTERN = /^\.env/m;
|
|
19751
19882
|
var gitignoreCoversEnv = (cwd) => {
|
|
19752
|
-
const path =
|
|
19883
|
+
const path = join43(cwd, ".gitignore");
|
|
19753
19884
|
if (!existsSync12(path)) {
|
|
19754
19885
|
return false;
|
|
19755
19886
|
}
|
|
@@ -19757,7 +19888,7 @@ var gitignoreCoversEnv = (cwd) => {
|
|
|
19757
19888
|
return GITIGNORE_ENV_LINE_PATTERN.test(content) || content.includes(".env\n") || content.includes(".env\r\n");
|
|
19758
19889
|
};
|
|
19759
19890
|
var cursorignoreCoversEnv = (cwd) => {
|
|
19760
|
-
const path =
|
|
19891
|
+
const path = join43(cwd, ".cursorignore");
|
|
19761
19892
|
if (!existsSync12(path)) {
|
|
19762
19893
|
return false;
|
|
19763
19894
|
}
|
|
@@ -19847,7 +19978,7 @@ var formatRailwayStackReport = (env, agentSetup) => {
|
|
|
19847
19978
|
// src/doctor/runNativeProjectSetup.ts
|
|
19848
19979
|
import { spawnSync as spawnSync5 } from "child_process";
|
|
19849
19980
|
import { existsSync as existsSync13 } from "fs";
|
|
19850
|
-
import { join as
|
|
19981
|
+
import { join as join44 } from "path";
|
|
19851
19982
|
var runCommand = (options) => {
|
|
19852
19983
|
const { args, command, cwd, label, log } = options;
|
|
19853
19984
|
log.log(`[doctor] ${label}: ${command} ${args.join(" ")}`);
|
|
@@ -19855,7 +19986,7 @@ var runCommand = (options) => {
|
|
|
19855
19986
|
return result.status === 0;
|
|
19856
19987
|
};
|
|
19857
19988
|
var runExtensionSetup = (cwd, log) => {
|
|
19858
|
-
const wxtTypes =
|
|
19989
|
+
const wxtTypes = join44(cwd, ".wxt", "wxt.d.ts");
|
|
19859
19990
|
if (existsSync13(wxtTypes)) {
|
|
19860
19991
|
return ["\u2713 Extension - WXT types already generated."];
|
|
19861
19992
|
}
|
|
@@ -19874,7 +20005,7 @@ var runMobileSetup = (cwd, platform, log) => {
|
|
|
19874
20005
|
if (platform !== "darwin") {
|
|
19875
20006
|
return [];
|
|
19876
20007
|
}
|
|
19877
|
-
const podfile =
|
|
20008
|
+
const podfile = join44(cwd, "ios", "Podfile");
|
|
19878
20009
|
if (!existsSync13(podfile)) {
|
|
19879
20010
|
return [
|
|
19880
20011
|
"\u2192 Mobile - no `ios/` folder yet. Run `pnpm ios` (Simulator) or `npx expo prebuild --platform ios` before store builds."
|
|
@@ -19883,7 +20014,7 @@ var runMobileSetup = (cwd, platform, log) => {
|
|
|
19883
20014
|
const ok = runCommand({
|
|
19884
20015
|
log,
|
|
19885
20016
|
label: "installing iOS pods",
|
|
19886
|
-
cwd:
|
|
20017
|
+
cwd: join44(cwd, "ios"),
|
|
19887
20018
|
command: "pod",
|
|
19888
20019
|
args: ["install"]
|
|
19889
20020
|
});
|
|
@@ -19908,14 +20039,14 @@ var runNativeProjectSetup = (cwd, surface, platform, log = console) => {
|
|
|
19908
20039
|
// src/doctor/storageR2.ts
|
|
19909
20040
|
import { spawnSync as spawnSync6 } from "child_process";
|
|
19910
20041
|
import { readFileSync as readFileSync13 } from "fs";
|
|
19911
|
-
import { join as
|
|
20042
|
+
import { join as join45 } from "path";
|
|
19912
20043
|
var R2_BUCKET_UNSAFE_PATTERN = /[^a-z0-9-]/g;
|
|
19913
20044
|
var R2_BUCKET_DASH_RUN_PATTERN = /-+/g;
|
|
19914
20045
|
var R2_BUCKET_EDGE_DASH_PATTERN = /^-|-$/g;
|
|
19915
20046
|
var sanitizeBucketName = (name) => name.toLowerCase().replace(R2_BUCKET_UNSAFE_PATTERN, "-").replace(R2_BUCKET_DASH_RUN_PATTERN, "-").replace(R2_BUCKET_EDGE_DASH_PATTERN, "").slice(0, 40);
|
|
19916
20047
|
var readProjectName = (cwd) => {
|
|
19917
20048
|
try {
|
|
19918
|
-
const pkg = JSON.parse(readFileSync13(
|
|
20049
|
+
const pkg = JSON.parse(readFileSync13(join45(cwd, "package.json"), "utf8"));
|
|
19919
20050
|
if (pkg.name !== void 0 && pkg.name !== "" && pkg.name !== "my-vybekiit-app") {
|
|
19920
20051
|
return sanitizeBucketName(pkg.name);
|
|
19921
20052
|
}
|
|
@@ -20000,8 +20131,8 @@ var provisionR2Storage = async (cwd, env, log) => {
|
|
|
20000
20131
|
if (wranglerOk(["r2", "bucket", "create", bucketName])) {
|
|
20001
20132
|
log.log(`[doctor] Created R2 bucket "${bucketName}".`);
|
|
20002
20133
|
} else {
|
|
20003
|
-
const
|
|
20004
|
-
if (!
|
|
20134
|
+
const exists2 = wranglerOk(["r2", "bucket", "list"]);
|
|
20135
|
+
if (!exists2) {
|
|
20005
20136
|
return { ok: false, message: `Could not create R2 bucket "${bucketName}".` };
|
|
20006
20137
|
}
|
|
20007
20138
|
log.log(`[doctor] R2 bucket "${bucketName}" already exists or create skipped.`);
|
|
@@ -20482,7 +20613,7 @@ var verifyPresetsDoctor = async (env) => {
|
|
|
20482
20613
|
|
|
20483
20614
|
// src/doctor/run.ts
|
|
20484
20615
|
var toPlatform = (platform) => platform === "darwin" || platform === "win32" || platform === "linux" ? platform : null;
|
|
20485
|
-
var isCursorSession = () => Boolean(
|
|
20616
|
+
var isCursorSession = () => Boolean(process19.env.CURSOR_TRACE_ID || process19.env.CURSOR_SESSION_ID);
|
|
20486
20617
|
var succeeds = (command, args) => spawnSync7(command, [...args], { stdio: "ignore" }).status === 0;
|
|
20487
20618
|
var errorCode = (error) => error !== void 0 && "code" in error && typeof error.code === "string" ? error.code : void 0;
|
|
20488
20619
|
var runInstall = (action, log) => {
|
|
@@ -20610,14 +20741,14 @@ var writeReportModeAssistant = (options) => {
|
|
|
20610
20741
|
}
|
|
20611
20742
|
};
|
|
20612
20743
|
var runDoctor = async (log = console) => {
|
|
20613
|
-
const platform = toPlatform(
|
|
20744
|
+
const platform = toPlatform(process19.platform);
|
|
20614
20745
|
if (platform === null) {
|
|
20615
|
-
log.error(`[doctor] This operating system (${
|
|
20746
|
+
log.error(`[doctor] This operating system (${process19.platform}) isn't supported yet.`);
|
|
20616
20747
|
return 1;
|
|
20617
20748
|
}
|
|
20618
|
-
const cwd =
|
|
20749
|
+
const cwd = process19.cwd();
|
|
20619
20750
|
const surface = inferProjectSurfaceSync(cwd);
|
|
20620
|
-
const env = mergeEnv(
|
|
20751
|
+
const env = mergeEnv(process19.env, loadEnvFile2(cwd));
|
|
20621
20752
|
const cursorSession = isCursorSession();
|
|
20622
20753
|
if (cursorSession) {
|
|
20623
20754
|
log.log("\u2713 Cursor - you're in Cursor; no separate agent install needed.");
|
|
@@ -20642,6 +20773,7 @@ var runDoctor = async (log = console) => {
|
|
|
20642
20773
|
const cloudReady = infraTools.every((tool) => reportFor(reports, tool.name)?.installed === true);
|
|
20643
20774
|
const agentReady = isAgentRuntimeReady(reports) || cursorSession;
|
|
20644
20775
|
await ensureCodexSkills(reports, log);
|
|
20776
|
+
log.log(formatGlobalStatus(await readGlobalStatus()));
|
|
20645
20777
|
writeReportModeAssistant({ cwd, surface, reports, cursorSession, log });
|
|
20646
20778
|
return computeDoctorExitCode({
|
|
20647
20779
|
cloudReady,
|
|
@@ -20653,11 +20785,429 @@ var runDoctor = async (log = console) => {
|
|
|
20653
20785
|
});
|
|
20654
20786
|
};
|
|
20655
20787
|
|
|
20656
|
-
// src/
|
|
20788
|
+
// src/global/runGlobalInstall.ts
|
|
20789
|
+
import process21 from "process";
|
|
20790
|
+
import { confirm, isCancel as isCancel2 } from "@clack/prompts";
|
|
20791
|
+
|
|
20792
|
+
// src/global/awareness.ts
|
|
20793
|
+
import { mkdir as mkdir10, readFile as readFile17, writeFile as writeFile11 } from "fs/promises";
|
|
20794
|
+
import { dirname as dirname15 } from "path";
|
|
20795
|
+
var BEGIN_MARKER = "<!-- BEGIN VYBEKIIT (managed by `vybekiit setup`) -->";
|
|
20796
|
+
var END_MARKER = "<!-- END VYBEKIIT -->";
|
|
20797
|
+
var LEADING_NEWLINE = /^\n/;
|
|
20798
|
+
var VYBEKIIT_COMMAND = `---
|
|
20799
|
+
description: Show VybeKiit status and what you can do with it right now
|
|
20800
|
+
---
|
|
20801
|
+
VybeKiit is installed globally on this machine. Orient the user in plain, non-technical language.
|
|
20802
|
+
|
|
20803
|
+
Do this now, briefly:
|
|
20804
|
+
1. Say: "\u2705 VybeKiit is active \u2014 you have its skills and browser automation in every project."
|
|
20805
|
+
2. Read the skill names under ~/.claude/skills and name 4-5 useful ones (for example: onboarding,
|
|
20806
|
+
plan-my-idea, setup-payments, add-signin, go-live).
|
|
20807
|
+
3. If there is no app in the current folder yet, offer to run \`vybekiit create app --web\`.
|
|
20808
|
+
Otherwise ask what they want to build or change next.
|
|
20809
|
+
|
|
20810
|
+
Keep it short and friendly. Do not dump the whole skill list.
|
|
20811
|
+
`;
|
|
20812
|
+
var buildMemoryBlock = () => [
|
|
20813
|
+
BEGIN_MARKER,
|
|
20814
|
+
"## VybeKiit is active on this machine",
|
|
20815
|
+
"",
|
|
20816
|
+
"VybeKiit is installed globally: its skills live in `~/.claude/skills`, and the `playwright`",
|
|
20817
|
+
"and `context7` MCP servers are registered (browser automation + live library docs).",
|
|
20818
|
+
"",
|
|
20819
|
+
"At the start of a session in any project, briefly tell the user VybeKiit is available, and use",
|
|
20820
|
+
"its skills (onboarding, plan-my-idea, setup-payments, add-signin, go-live, harden, \u2026) when they",
|
|
20821
|
+
"fit the request. The user can type `/vybekiit` any time to see status.",
|
|
20822
|
+
END_MARKER,
|
|
20823
|
+
""
|
|
20824
|
+
].join("\n");
|
|
20825
|
+
var upsertMemoryBlock = (existing, block) => {
|
|
20826
|
+
const begin = existing.indexOf(BEGIN_MARKER);
|
|
20827
|
+
const end = existing.indexOf(END_MARKER);
|
|
20828
|
+
if (begin !== -1 && end !== -1 && end > begin) {
|
|
20829
|
+
const before = existing.slice(0, begin);
|
|
20830
|
+
const after = existing.slice(end + END_MARKER.length).replace(LEADING_NEWLINE, "");
|
|
20831
|
+
return `${before}${block}${after}`;
|
|
20832
|
+
}
|
|
20833
|
+
if (existing.trim() === "") {
|
|
20834
|
+
return block;
|
|
20835
|
+
}
|
|
20836
|
+
return `${existing.trimEnd()}
|
|
20837
|
+
|
|
20838
|
+
${block}`;
|
|
20839
|
+
};
|
|
20840
|
+
var readOrEmpty = async (path) => {
|
|
20841
|
+
try {
|
|
20842
|
+
return await readFile17(path, "utf8");
|
|
20843
|
+
} catch (error) {
|
|
20844
|
+
if (error instanceof Error && "code" in error && error.code === "ENOENT") {
|
|
20845
|
+
return "";
|
|
20846
|
+
}
|
|
20847
|
+
throw error;
|
|
20848
|
+
}
|
|
20849
|
+
};
|
|
20850
|
+
var writeIfChanged = async (path, next, previous) => {
|
|
20851
|
+
if (next === previous) {
|
|
20852
|
+
return false;
|
|
20853
|
+
}
|
|
20854
|
+
await mkdir10(dirname15(path), { recursive: true });
|
|
20855
|
+
await writeFile11(path, next, "utf8");
|
|
20856
|
+
return true;
|
|
20857
|
+
};
|
|
20858
|
+
var withStatusLineBadge = (raw) => {
|
|
20859
|
+
let settings = {};
|
|
20860
|
+
if (raw.trim() !== "") {
|
|
20861
|
+
try {
|
|
20862
|
+
settings = JSON.parse(raw);
|
|
20863
|
+
} catch {
|
|
20864
|
+
return null;
|
|
20865
|
+
}
|
|
20866
|
+
}
|
|
20867
|
+
if (settings.statusLine !== void 0) {
|
|
20868
|
+
return null;
|
|
20869
|
+
}
|
|
20870
|
+
settings.statusLine = { type: "command", command: "echo '\u25C6 vybekiit'" };
|
|
20871
|
+
return `${JSON.stringify(settings, null, 2)}
|
|
20872
|
+
`;
|
|
20873
|
+
};
|
|
20874
|
+
var installAwareness = async (paths) => {
|
|
20875
|
+
const commandPath = `${paths.commandsDir}/vybekiit.md`;
|
|
20876
|
+
const commandWritten = await writeIfChanged(
|
|
20877
|
+
commandPath,
|
|
20878
|
+
VYBEKIIT_COMMAND,
|
|
20879
|
+
await readOrEmpty(commandPath)
|
|
20880
|
+
);
|
|
20881
|
+
const previousMemory = await readOrEmpty(paths.memoryFile);
|
|
20882
|
+
const memoryUpdated = await writeIfChanged(
|
|
20883
|
+
paths.memoryFile,
|
|
20884
|
+
upsertMemoryBlock(previousMemory, buildMemoryBlock()),
|
|
20885
|
+
previousMemory
|
|
20886
|
+
);
|
|
20887
|
+
const previousSettings = await readOrEmpty(paths.settingsFile);
|
|
20888
|
+
const nextSettings = withStatusLineBadge(previousSettings);
|
|
20889
|
+
const statusLineSet = nextSettings !== null && await writeIfChanged(paths.settingsFile, nextSettings, previousSettings);
|
|
20890
|
+
return { commandWritten, memoryUpdated, statusLineSet };
|
|
20891
|
+
};
|
|
20892
|
+
|
|
20893
|
+
// src/global/exec.ts
|
|
20894
|
+
import { execFile as execFile6 } from "child_process";
|
|
20895
|
+
var makeExec = (bin) => (args) => new Promise((resolve13) => {
|
|
20896
|
+
execFile6(bin, [...args], { encoding: "utf8" }, (error, stdout, stderr) => {
|
|
20897
|
+
if (error && "code" in error && error.code === "ENOENT") {
|
|
20898
|
+
resolve13({ code: 127, stdout: "", stderr: `${bin} not found` });
|
|
20899
|
+
return;
|
|
20900
|
+
}
|
|
20901
|
+
let code = 0;
|
|
20902
|
+
if (error) {
|
|
20903
|
+
code = typeof error.code === "number" ? error.code : 1;
|
|
20904
|
+
}
|
|
20905
|
+
resolve13({ code, stdout: stdout ?? "", stderr: stderr ?? "" });
|
|
20906
|
+
});
|
|
20907
|
+
});
|
|
20908
|
+
|
|
20909
|
+
// src/global/entitlement.ts
|
|
20910
|
+
var MIRROR_ORG3 = "VybeKiit";
|
|
20911
|
+
var SURFACE_MIRRORS = ["web", "mobile", "backend", "extension", "spa"];
|
|
20912
|
+
var defaultDeps = { exec: makeExec("gh") };
|
|
20913
|
+
var resolveLogin = async (exec) => {
|
|
20914
|
+
const res = await exec(["api", "user", "--jq", ".login"]);
|
|
20915
|
+
if (res.code !== 0) {
|
|
20916
|
+
return null;
|
|
20917
|
+
}
|
|
20918
|
+
const login = res.stdout.trim();
|
|
20919
|
+
return login === "" ? null : login;
|
|
20920
|
+
};
|
|
20921
|
+
var checkEntitlement = async (deps = defaultDeps) => {
|
|
20922
|
+
const { exec } = deps;
|
|
20923
|
+
if ((await exec(["--version"])).code === 127) {
|
|
20924
|
+
return { entitled: false, reason: "gh-missing" };
|
|
20925
|
+
}
|
|
20926
|
+
const login = await resolveLogin(exec);
|
|
20927
|
+
if (login === null) {
|
|
20928
|
+
return { entitled: false, reason: "not-authenticated" };
|
|
20929
|
+
}
|
|
20930
|
+
for (const surface of SURFACE_MIRRORS) {
|
|
20931
|
+
const repo = `${MIRROR_ORG3}/${surface}`;
|
|
20932
|
+
if ((await exec(["api", `repos/${repo}`, "--silent"])).code === 0) {
|
|
20933
|
+
return { entitled: true, reason: "entitled", login, via: repo };
|
|
20934
|
+
}
|
|
20935
|
+
}
|
|
20936
|
+
return { entitled: false, reason: "no-access", login };
|
|
20937
|
+
};
|
|
20938
|
+
var formatEntitlementBlock = (result) => {
|
|
20939
|
+
const lines = [
|
|
20940
|
+
"",
|
|
20941
|
+
"\u2717 VybeKiit is a paid kit \u2014 this GitHub account is not on the buyer list.",
|
|
20942
|
+
""
|
|
20943
|
+
];
|
|
20944
|
+
if (result.reason === "gh-missing") {
|
|
20945
|
+
lines.push(
|
|
20946
|
+
"GitHub CLI (gh) was not found. Install it from https://cli.github.com, then run",
|
|
20947
|
+
" gh auth login --web",
|
|
20948
|
+
"signed in with the GitHub account you purchased VybeKiit with, and re-run."
|
|
20949
|
+
);
|
|
20950
|
+
} else if (result.reason === "not-authenticated") {
|
|
20951
|
+
lines.push(
|
|
20952
|
+
"You are not signed in to GitHub. Run",
|
|
20953
|
+
" gh auth login --web",
|
|
20954
|
+
"with the GitHub account you purchased VybeKiit with, then re-run."
|
|
20955
|
+
);
|
|
20956
|
+
} else {
|
|
20957
|
+
lines.push(
|
|
20958
|
+
`Signed in as '${result.login}', but that account can't access the VybeKiit kit.`,
|
|
20959
|
+
"If you have purchased, accept the repository invite (check your email or",
|
|
20960
|
+
"https://github.com/notifications), or email info@vybekiit.com.",
|
|
20961
|
+
"",
|
|
20962
|
+
"Not a buyer yet? https://vybekiit.com"
|
|
20963
|
+
);
|
|
20964
|
+
}
|
|
20965
|
+
lines.push("");
|
|
20966
|
+
return lines;
|
|
20967
|
+
};
|
|
20968
|
+
|
|
20969
|
+
// src/global/installGlobalMcp.ts
|
|
20657
20970
|
import process20 from "process";
|
|
20971
|
+
var ZERO_CONFIG = [
|
|
20972
|
+
{
|
|
20973
|
+
name: "playwright",
|
|
20974
|
+
transport: "stdio",
|
|
20975
|
+
command: ["npx", "-y", "@anthropic-ai/mcp-playwright"]
|
|
20976
|
+
},
|
|
20977
|
+
{ name: "context7", transport: "stdio", command: ["npx", "-y", "@upstash/context7-mcp@latest"] },
|
|
20978
|
+
{ name: "sentry", transport: "sse", command: ["https://mcp.sentry.dev/sse"] }
|
|
20979
|
+
];
|
|
20980
|
+
var KEY_GATED = [
|
|
20981
|
+
{
|
|
20982
|
+
name: "github",
|
|
20983
|
+
transport: "stdio",
|
|
20984
|
+
command: ["npx", "-y", "@modelcontextprotocol/server-github"],
|
|
20985
|
+
envKeys: ["GITHUB_PERSONAL_ACCESS_TOKEN"]
|
|
20986
|
+
},
|
|
20987
|
+
{
|
|
20988
|
+
name: "supabase",
|
|
20989
|
+
transport: "stdio",
|
|
20990
|
+
command: ["npx", "-y", "supabase-mcp-server"],
|
|
20991
|
+
envKeys: ["SUPABASE_ACCESS_TOKEN"]
|
|
20992
|
+
},
|
|
20993
|
+
{
|
|
20994
|
+
name: "vercel",
|
|
20995
|
+
transport: "stdio",
|
|
20996
|
+
command: ["npx", "-y", "@vercel/mcp"],
|
|
20997
|
+
envKeys: ["VERCEL_TOKEN"]
|
|
20998
|
+
},
|
|
20999
|
+
{
|
|
21000
|
+
name: "stripe",
|
|
21001
|
+
transport: "stdio",
|
|
21002
|
+
command: ["npx", "-y", "@stripe/mcp"],
|
|
21003
|
+
envKeys: ["STRIPE_SECRET_KEY"]
|
|
21004
|
+
},
|
|
21005
|
+
{
|
|
21006
|
+
name: "cloudflare",
|
|
21007
|
+
transport: "stdio",
|
|
21008
|
+
command: ["npx", "-y", "@anthropic-ai/mcp-cloudflare"],
|
|
21009
|
+
envKeys: ["CLOUDFLARE_API_TOKEN"]
|
|
21010
|
+
},
|
|
21011
|
+
{
|
|
21012
|
+
name: "figma",
|
|
21013
|
+
transport: "stdio",
|
|
21014
|
+
command: ["npx", "-y", "@anthropic-ai/mcp-figma"],
|
|
21015
|
+
envKeys: ["FIGMA_ACCESS_TOKEN"]
|
|
21016
|
+
},
|
|
21017
|
+
{
|
|
21018
|
+
name: "resend",
|
|
21019
|
+
transport: "stdio",
|
|
21020
|
+
command: ["npx", "-y", "resend-mcp"],
|
|
21021
|
+
envKeys: ["RESEND_API_KEY"]
|
|
21022
|
+
},
|
|
21023
|
+
{
|
|
21024
|
+
name: "exa",
|
|
21025
|
+
transport: "stdio",
|
|
21026
|
+
command: ["npx", "-y", "exa-mcp-server"],
|
|
21027
|
+
envKeys: ["EXA_API_KEY"]
|
|
21028
|
+
},
|
|
21029
|
+
{
|
|
21030
|
+
name: "firecrawl",
|
|
21031
|
+
transport: "stdio",
|
|
21032
|
+
command: ["npx", "-y", "firecrawl-mcp"],
|
|
21033
|
+
envKeys: ["FIRECRAWL_API_KEY"]
|
|
21034
|
+
},
|
|
21035
|
+
{
|
|
21036
|
+
name: "tavily",
|
|
21037
|
+
transport: "stdio",
|
|
21038
|
+
command: ["npx", "-y", "tavily-mcp"],
|
|
21039
|
+
envKeys: ["TAVILY_API_KEY"]
|
|
21040
|
+
}
|
|
21041
|
+
];
|
|
21042
|
+
var defaultDeps2 = { exec: makeExec("claude"), env: process20.env };
|
|
21043
|
+
var buildAddArgs = (def, env) => {
|
|
21044
|
+
if (def.transport === "sse") {
|
|
21045
|
+
const [url = ""] = def.command;
|
|
21046
|
+
return ["mcp", "add", "-s", "user", "--transport", "sse", def.name, url];
|
|
21047
|
+
}
|
|
21048
|
+
const envFlags = (def.envKeys ?? []).flatMap((key) => ["-e", `${key}=${env[key] ?? ""}`]);
|
|
21049
|
+
return ["mcp", "add", "-s", "user", ...envFlags, def.name, "--", ...def.command];
|
|
21050
|
+
};
|
|
21051
|
+
var hasKeys = (def, env) => (def.envKeys ?? []).every((key) => (env[key] ?? "") !== "");
|
|
21052
|
+
var installGlobalMcp = async (deps = defaultDeps2) => {
|
|
21053
|
+
const version = await deps.exec(["--version"]);
|
|
21054
|
+
if (version.code === 127) {
|
|
21055
|
+
return { enabled: [], alreadyPresent: [], needsKey: [], failed: [], claudeMissing: true };
|
|
21056
|
+
}
|
|
21057
|
+
const enabled = [];
|
|
21058
|
+
const alreadyPresent = [];
|
|
21059
|
+
const needsKey = [];
|
|
21060
|
+
const failed = [];
|
|
21061
|
+
const candidates = [...ZERO_CONFIG, ...KEY_GATED];
|
|
21062
|
+
for (const def of candidates) {
|
|
21063
|
+
if (!hasKeys(def, deps.env)) {
|
|
21064
|
+
needsKey.push(def.name);
|
|
21065
|
+
continue;
|
|
21066
|
+
}
|
|
21067
|
+
if ((await deps.exec(["mcp", "get", def.name])).code === 0) {
|
|
21068
|
+
alreadyPresent.push(def.name);
|
|
21069
|
+
continue;
|
|
21070
|
+
}
|
|
21071
|
+
const added = await deps.exec(buildAddArgs(def, deps.env));
|
|
21072
|
+
if (added.code === 0) {
|
|
21073
|
+
enabled.push(def.name);
|
|
21074
|
+
} else {
|
|
21075
|
+
failed.push(def.name);
|
|
21076
|
+
}
|
|
21077
|
+
}
|
|
21078
|
+
return { enabled, alreadyPresent, needsKey, failed, claudeMissing: false };
|
|
21079
|
+
};
|
|
21080
|
+
|
|
21081
|
+
// src/global/installGlobalSkills.ts
|
|
21082
|
+
import { cp as cp5, mkdir as mkdir11, readdir as readdir9, readFile as readFile18, rm as rm5, stat as stat2, writeFile as writeFile12 } from "fs/promises";
|
|
21083
|
+
import { join as join46 } from "path";
|
|
21084
|
+
var MANAGED_MARKER = ".vybekiit-managed";
|
|
21085
|
+
var pathExists8 = async (path) => {
|
|
21086
|
+
try {
|
|
21087
|
+
await stat2(path);
|
|
21088
|
+
return true;
|
|
21089
|
+
} catch {
|
|
21090
|
+
return false;
|
|
21091
|
+
}
|
|
21092
|
+
};
|
|
21093
|
+
var listBundledSkills = async (sourceDir) => {
|
|
21094
|
+
try {
|
|
21095
|
+
const manifest = JSON.parse(await readFile18(join46(sourceDir, "manifest.json"), "utf8"));
|
|
21096
|
+
if (Array.isArray(manifest.skills)) {
|
|
21097
|
+
return [...manifest.skills];
|
|
21098
|
+
}
|
|
21099
|
+
} catch {
|
|
21100
|
+
}
|
|
21101
|
+
try {
|
|
21102
|
+
const entries = await readdir9(sourceDir, { withFileTypes: true });
|
|
21103
|
+
return entries.filter((entry) => entry.isDirectory()).map((entry) => entry.name);
|
|
21104
|
+
} catch {
|
|
21105
|
+
return [];
|
|
21106
|
+
}
|
|
21107
|
+
};
|
|
21108
|
+
var installGlobalSkills = async (paths, sourceDir = paths.bundledSkillsDir) => {
|
|
21109
|
+
const names = await listBundledSkills(sourceDir);
|
|
21110
|
+
await mkdir11(paths.skillsDir, { recursive: true });
|
|
21111
|
+
const installed = [];
|
|
21112
|
+
const skipped = [];
|
|
21113
|
+
for (const name of names) {
|
|
21114
|
+
const dest = join46(paths.skillsDir, name);
|
|
21115
|
+
if (await pathExists8(dest)) {
|
|
21116
|
+
if (!await pathExists8(join46(dest, MANAGED_MARKER))) {
|
|
21117
|
+
skipped.push(name);
|
|
21118
|
+
continue;
|
|
21119
|
+
}
|
|
21120
|
+
await rm5(dest, { recursive: true, force: true });
|
|
21121
|
+
}
|
|
21122
|
+
await cp5(join46(sourceDir, name), dest, { recursive: true });
|
|
21123
|
+
await writeFile12(join46(dest, MANAGED_MARKER), "", "utf8");
|
|
21124
|
+
installed.push(name);
|
|
21125
|
+
}
|
|
21126
|
+
return { installed, skipped, path: paths.skillsDir };
|
|
21127
|
+
};
|
|
21128
|
+
|
|
21129
|
+
// src/global/runGlobalInstall.ts
|
|
21130
|
+
var formatGlobalInstallSummary = (summary) => {
|
|
21131
|
+
const lines = [
|
|
21132
|
+
"",
|
|
21133
|
+
"\u2705 VybeKiit is now set up globally in Claude Code.",
|
|
21134
|
+
"",
|
|
21135
|
+
` \u2022 Skills ${summary.skillsInstalled} installed in ~/.claude/skills (available in every project)`
|
|
21136
|
+
];
|
|
21137
|
+
if (summary.claudeMissing) {
|
|
21138
|
+
lines.push(" \u2022 MCP skipped \u2014 the `claude` command was not found on your PATH");
|
|
21139
|
+
} else {
|
|
21140
|
+
lines.push(
|
|
21141
|
+
` \u2022 MCP ${summary.mcpEnabled.length > 0 ? summary.mcpEnabled.join(", ") : "none"} enabled (browser automation + live docs everywhere)`
|
|
21142
|
+
);
|
|
21143
|
+
if (summary.mcpNeedsKey.length > 0) {
|
|
21144
|
+
lines.push(
|
|
21145
|
+
` ${summary.mcpNeedsKey.length} more need an API key \u2014 run \`vybekiit env wizard\``
|
|
21146
|
+
);
|
|
21147
|
+
}
|
|
21148
|
+
}
|
|
21149
|
+
lines.push(
|
|
21150
|
+
" \u2022 Command type /vybekiit in Claude Code to see status anytime",
|
|
21151
|
+
" \u2022 Claude now knows it is VybeKiit-enabled in every project",
|
|
21152
|
+
"",
|
|
21153
|
+
"To see it: restart Claude Code (or run `claude` once) to approve the new MCP servers,",
|
|
21154
|
+
"then type /vybekiit to confirm.",
|
|
21155
|
+
""
|
|
21156
|
+
);
|
|
21157
|
+
return lines;
|
|
21158
|
+
};
|
|
21159
|
+
var runGlobalInstall = async (args, gate = checkEntitlement) => {
|
|
21160
|
+
const entitlement = await gate();
|
|
21161
|
+
if (!entitlement.entitled) {
|
|
21162
|
+
for (const line of formatEntitlementBlock(entitlement)) {
|
|
21163
|
+
process21.stderr.write(`${line}
|
|
21164
|
+
`);
|
|
21165
|
+
}
|
|
21166
|
+
return 1;
|
|
21167
|
+
}
|
|
21168
|
+
const skipPrompt = args.includes("--yes") || args.includes("-y");
|
|
21169
|
+
if (!skipPrompt) {
|
|
21170
|
+
if (!isInteractive()) {
|
|
21171
|
+
process21.stdout.write(
|
|
21172
|
+
"Skipping global setup (non-interactive). Run `vybekiit global-install --yes` to provision Claude Code globally.\n"
|
|
21173
|
+
);
|
|
21174
|
+
return 0;
|
|
21175
|
+
}
|
|
21176
|
+
const proceed = await confirm({
|
|
21177
|
+
message: "Set up VybeKiit globally in Claude Code? Adds skills + browser automation to every project.",
|
|
21178
|
+
initialValue: true
|
|
21179
|
+
});
|
|
21180
|
+
if (isCancel2(proceed) || proceed !== true) {
|
|
21181
|
+
process21.stdout.write(
|
|
21182
|
+
"Skipped global setup. You can run `vybekiit global-install` anytime.\n"
|
|
21183
|
+
);
|
|
21184
|
+
return 0;
|
|
21185
|
+
}
|
|
21186
|
+
}
|
|
21187
|
+
const paths = resolveGlobalPaths();
|
|
21188
|
+
const skills = await installGlobalSkills(paths);
|
|
21189
|
+
const mcp = await installGlobalMcp();
|
|
21190
|
+
const awareness = await installAwareness(paths);
|
|
21191
|
+
const summary = {
|
|
21192
|
+
skillsInstalled: skills.installed.length,
|
|
21193
|
+
skillsSkipped: skills.skipped.length,
|
|
21194
|
+
mcpEnabled: mcp.enabled,
|
|
21195
|
+
mcpNeedsKey: mcp.needsKey,
|
|
21196
|
+
claudeMissing: mcp.claudeMissing,
|
|
21197
|
+
commandInstalled: awareness.commandWritten
|
|
21198
|
+
};
|
|
21199
|
+
for (const line of formatGlobalInstallSummary(summary)) {
|
|
21200
|
+
process21.stdout.write(`${line}
|
|
21201
|
+
`);
|
|
21202
|
+
}
|
|
21203
|
+
return 0;
|
|
21204
|
+
};
|
|
21205
|
+
|
|
21206
|
+
// src/ui/welcomeBanner.ts
|
|
21207
|
+
import process23 from "process";
|
|
20658
21208
|
|
|
20659
21209
|
// src/ui/ansiShimmer.ts
|
|
20660
|
-
import
|
|
21210
|
+
import process22 from "process";
|
|
20661
21211
|
var RESET = "\x1B[0m";
|
|
20662
21212
|
var GRADIENT_START = [34, 211, 238];
|
|
20663
21213
|
var GRADIENT_END = [167, 139, 250];
|
|
@@ -20669,7 +21219,7 @@ var colorAt = (t) => rgb(
|
|
|
20669
21219
|
lerp(GRADIENT_START[1], GRADIENT_END[1], t),
|
|
20670
21220
|
lerp(GRADIENT_START[2], GRADIENT_END[2], t)
|
|
20671
21221
|
);
|
|
20672
|
-
var supportsColor = (env =
|
|
21222
|
+
var supportsColor = (env = process22.env, isTTY = Boolean(process22.stdout.isTTY)) => {
|
|
20673
21223
|
if (env.NO_COLOR !== void 0 && env.NO_COLOR !== "") {
|
|
20674
21224
|
return false;
|
|
20675
21225
|
}
|
|
@@ -20700,8 +21250,8 @@ var applyShimmerSweep = (lines, frame, options) => {
|
|
|
20700
21250
|
});
|
|
20701
21251
|
};
|
|
20702
21252
|
var DIM = "\x1B[2m";
|
|
20703
|
-
var sleep = (ms) => new Promise((
|
|
20704
|
-
setTimeout(
|
|
21253
|
+
var sleep = (ms) => new Promise((resolve13) => {
|
|
21254
|
+
setTimeout(resolve13, ms);
|
|
20705
21255
|
});
|
|
20706
21256
|
|
|
20707
21257
|
// src/ui/welcomeBanner.ts
|
|
@@ -20731,13 +21281,13 @@ var writeBlock = (write, lines) => {
|
|
|
20731
21281
|
}
|
|
20732
21282
|
};
|
|
20733
21283
|
var playWelcomeBanner = async (options = {}) => {
|
|
20734
|
-
const write = options.write === void 0 ? (text2) =>
|
|
21284
|
+
const write = options.write === void 0 ? (text2) => process23.stdout.write(text2) : options.write;
|
|
20735
21285
|
const sleepFn = options.sleep === void 0 ? sleep : options.sleep;
|
|
20736
21286
|
const frames = options.frames === void 0 ? DEFAULT_FRAMES : options.frames;
|
|
20737
21287
|
const frameDelayMs = options.frameDelayMs === void 0 ? DEFAULT_FRAME_DELAY_MS : options.frameDelayMs;
|
|
20738
21288
|
const art = [...WELCOME_ART];
|
|
20739
21289
|
const useColor = !options.forcePlain && supportsColor();
|
|
20740
|
-
const animate = useColor && Boolean(
|
|
21290
|
+
const animate = useColor && Boolean(process23.stdout.isTTY) && frames > 0;
|
|
20741
21291
|
if (!animate) {
|
|
20742
21292
|
writeBlock(write, art);
|
|
20743
21293
|
writeln(write, "");
|
|
@@ -20804,30 +21354,31 @@ var formatSetupNextStep = (input) => {
|
|
|
20804
21354
|
var runSetup = async () => {
|
|
20805
21355
|
await playWelcomeBanner();
|
|
20806
21356
|
const code = await runDoctor();
|
|
21357
|
+
await runGlobalInstall([]);
|
|
20807
21358
|
const access15 = checkAccess();
|
|
20808
|
-
|
|
21359
|
+
process24.stdout.write("\n");
|
|
20809
21360
|
for (const line of formatSetupNextStep({
|
|
20810
21361
|
doctorExitCode: code,
|
|
20811
21362
|
gateReason: access15.reason
|
|
20812
21363
|
})) {
|
|
20813
|
-
|
|
21364
|
+
process24.stdout.write(`${line}
|
|
20814
21365
|
`);
|
|
20815
21366
|
}
|
|
20816
21367
|
return code;
|
|
20817
21368
|
};
|
|
20818
21369
|
|
|
20819
21370
|
// src/commands/syncAgentLayer.ts
|
|
20820
|
-
import { execFile as
|
|
20821
|
-
import { access as access14, cp as
|
|
20822
|
-
import { join as
|
|
20823
|
-
import
|
|
21371
|
+
import { execFile as execFile7 } from "child_process";
|
|
21372
|
+
import { access as access14, cp as cp6, readFile as readFile19, writeFile as writeFile13 } from "fs/promises";
|
|
21373
|
+
import { join as join47 } from "path";
|
|
21374
|
+
import process25 from "process";
|
|
20824
21375
|
import { promisify as promisify6 } from "util";
|
|
20825
|
-
var execFileAsync6 = promisify6(
|
|
20826
|
-
var
|
|
21376
|
+
var execFileAsync6 = promisify6(execFile7);
|
|
21377
|
+
var defaultDeps3 = {
|
|
20827
21378
|
resolve: resolveTemplatesSource,
|
|
20828
|
-
copy:
|
|
21379
|
+
copy: cp6,
|
|
20829
21380
|
runSkillsUpdate: async (cwd) => {
|
|
20830
|
-
await execFileAsync6("npx", ["skills", "update", "-y"], { cwd, env:
|
|
21381
|
+
await execFileAsync6("npx", ["skills", "update", "-y"], { cwd, env: process25.env });
|
|
20831
21382
|
},
|
|
20832
21383
|
pathExists: async (path) => {
|
|
20833
21384
|
try {
|
|
@@ -20847,10 +21398,10 @@ var resolveSyncTemplate = async (explicit, cwd) => {
|
|
|
20847
21398
|
}
|
|
20848
21399
|
return null;
|
|
20849
21400
|
};
|
|
20850
|
-
var listMirrorAgentPaths = async (mirrorRoot,
|
|
21401
|
+
var listMirrorAgentPaths = async (mirrorRoot, pathExists9) => {
|
|
20851
21402
|
const entries = await Promise.all(
|
|
20852
21403
|
AGENT_LAYER_PATHS.map(async (path) => {
|
|
20853
|
-
if (await
|
|
21404
|
+
if (await pathExists9(join47(mirrorRoot, path))) {
|
|
20854
21405
|
return path;
|
|
20855
21406
|
}
|
|
20856
21407
|
return null;
|
|
@@ -20859,29 +21410,29 @@ var listMirrorAgentPaths = async (mirrorRoot, pathExists8) => {
|
|
|
20859
21410
|
return entries.filter((path) => path !== null);
|
|
20860
21411
|
};
|
|
20861
21412
|
var copyAgentLayerPath = async (options) => {
|
|
20862
|
-
const { mirrorRoot, cwd, path, copy, pathExists:
|
|
20863
|
-
const src =
|
|
20864
|
-
const dest =
|
|
21413
|
+
const { mirrorRoot, cwd, path, copy, pathExists: pathExists9 } = options;
|
|
21414
|
+
const src = join47(mirrorRoot, path);
|
|
21415
|
+
const dest = join47(cwd, path);
|
|
20865
21416
|
if (path !== ".vybekiit") {
|
|
20866
21417
|
await copy(src, dest, { recursive: true, force: true });
|
|
20867
21418
|
return;
|
|
20868
21419
|
}
|
|
20869
|
-
const { readdir:
|
|
21420
|
+
const { readdir: readdir10, stat: stat3, mkdir: mkdir12 } = await import("fs/promises");
|
|
20870
21421
|
const walk = async (rel) => {
|
|
20871
21422
|
const relNorm = rel.split("\\").join("/");
|
|
20872
21423
|
if (isAgentLayerExtensionPath(relNorm)) {
|
|
20873
21424
|
return;
|
|
20874
21425
|
}
|
|
20875
|
-
const srcPath =
|
|
20876
|
-
const destPath =
|
|
20877
|
-
if (!await
|
|
21426
|
+
const srcPath = join47(mirrorRoot, relNorm);
|
|
21427
|
+
const destPath = join47(cwd, relNorm);
|
|
21428
|
+
if (!await pathExists9(srcPath)) {
|
|
20878
21429
|
return;
|
|
20879
21430
|
}
|
|
20880
|
-
const info = await
|
|
21431
|
+
const info = await stat3(srcPath);
|
|
20881
21432
|
if (info.isDirectory()) {
|
|
20882
|
-
await
|
|
20883
|
-
const entries = await
|
|
20884
|
-
await Promise.all(entries.map((entry) => walk(
|
|
21433
|
+
await mkdir12(destPath, { recursive: true });
|
|
21434
|
+
const entries = await readdir10(srcPath);
|
|
21435
|
+
await Promise.all(entries.map((entry) => walk(join47(relNorm, entry))));
|
|
20885
21436
|
return;
|
|
20886
21437
|
}
|
|
20887
21438
|
await copy(srcPath, destPath, { force: true });
|
|
@@ -20905,21 +21456,21 @@ var readGoalIndexBeforeSync = async (pathsToSync, cwd, deps) => {
|
|
|
20905
21456
|
if (!pathsToSync.includes(".vybekiit")) {
|
|
20906
21457
|
return;
|
|
20907
21458
|
}
|
|
20908
|
-
const goalIndexPath =
|
|
21459
|
+
const goalIndexPath = join47(cwd, ".vybekiit/agent/goal-index.md");
|
|
20909
21460
|
if (!await deps.pathExists(goalIndexPath)) {
|
|
20910
21461
|
return;
|
|
20911
21462
|
}
|
|
20912
|
-
return await
|
|
21463
|
+
return await readFile19(goalIndexPath, "utf8");
|
|
20913
21464
|
};
|
|
20914
21465
|
var mergeGoalIndexAfterSync = async (cwd, goalIndexBefore) => {
|
|
20915
21466
|
if (goalIndexBefore === void 0) {
|
|
20916
21467
|
return;
|
|
20917
21468
|
}
|
|
20918
|
-
const goalIndexPath =
|
|
20919
|
-
const synced = await
|
|
21469
|
+
const goalIndexPath = join47(cwd, ".vybekiit/agent/goal-index.md");
|
|
21470
|
+
const synced = await readFile19(goalIndexPath, "utf8");
|
|
20920
21471
|
const merged = mergeGoalIndexOnSync(synced, goalIndexBefore);
|
|
20921
21472
|
if (merged !== synced) {
|
|
20922
|
-
await
|
|
21473
|
+
await writeFile13(goalIndexPath, merged, "utf8");
|
|
20923
21474
|
}
|
|
20924
21475
|
};
|
|
20925
21476
|
var refreshGeneratedInstructionSections = async (cwd, template, deps) => {
|
|
@@ -20930,14 +21481,14 @@ var refreshGeneratedInstructionSections = async (cwd, template, deps) => {
|
|
|
20930
21481
|
const rendered = applyAgentLayerSections(fileContents, { template });
|
|
20931
21482
|
const writes = Object.entries(rendered).map(async ([file, content]) => {
|
|
20932
21483
|
if (fileContents[file] !== void 0 && content !== fileContents[file]) {
|
|
20933
|
-
await
|
|
21484
|
+
await writeFile13(join47(cwd, file), content, "utf8");
|
|
20934
21485
|
}
|
|
20935
21486
|
});
|
|
20936
21487
|
await Promise.all(writes);
|
|
20937
21488
|
return true;
|
|
20938
21489
|
};
|
|
20939
21490
|
var refreshPlatformInstructionFiles = async (cwd, deps) => {
|
|
20940
|
-
if (!await deps.pathExists(
|
|
21491
|
+
if (!await deps.pathExists(join47(cwd, "skills-lock.json"))) {
|
|
20941
21492
|
return "missing-lock";
|
|
20942
21493
|
}
|
|
20943
21494
|
try {
|
|
@@ -20947,7 +21498,7 @@ var refreshPlatformInstructionFiles = async (cwd, deps) => {
|
|
|
20947
21498
|
return "failed";
|
|
20948
21499
|
}
|
|
20949
21500
|
};
|
|
20950
|
-
var runSyncAgentLayer = async (args, cwd =
|
|
21501
|
+
var runSyncAgentLayer = async (args, cwd = process25.cwd(), deps = defaultDeps3) => {
|
|
20951
21502
|
const [explicit] = args;
|
|
20952
21503
|
const template = await resolveSyncTemplate(explicit, cwd);
|
|
20953
21504
|
if (template === null) {
|
|
@@ -20966,7 +21517,7 @@ var runSyncAgentLayer = async (args, cwd = process22.cwd(), deps = defaultDeps)
|
|
|
20966
21517
|
});
|
|
20967
21518
|
const { cleanup: resolvedCleanup, source } = resolved;
|
|
20968
21519
|
cleanup = resolvedCleanup;
|
|
20969
|
-
const mirrorRoot =
|
|
21520
|
+
const mirrorRoot = join47(source, template);
|
|
20970
21521
|
const mirrorPaths = await listMirrorAgentPaths(mirrorRoot, deps.pathExists);
|
|
20971
21522
|
const plan = planAgentLayerSync(mirrorPaths);
|
|
20972
21523
|
const lines = [formatAgentLayerSyncSummary(plan)];
|
|
@@ -21002,7 +21553,7 @@ var runSyncAgentLayer = async (args, cwd = process22.cwd(), deps = defaultDeps)
|
|
|
21002
21553
|
};
|
|
21003
21554
|
|
|
21004
21555
|
// src/commands/updateKit.ts
|
|
21005
|
-
import
|
|
21556
|
+
import process26 from "process";
|
|
21006
21557
|
import { Effect as Effect30 } from "effect";
|
|
21007
21558
|
var runUpdateKit = async (args = []) => {
|
|
21008
21559
|
const apply = args.includes("--apply");
|
|
@@ -21030,7 +21581,7 @@ var runUpdateKit = async (args = []) => {
|
|
|
21030
21581
|
var runUpdateKitCommand = async (args) => {
|
|
21031
21582
|
const result = await runUpdateKit(args);
|
|
21032
21583
|
for (const line of result.lines) {
|
|
21033
|
-
|
|
21584
|
+
process26.stdout.write(`${line}
|
|
21034
21585
|
`);
|
|
21035
21586
|
}
|
|
21036
21587
|
return result.exitCode;
|
|
@@ -21038,7 +21589,7 @@ var runUpdateKitCommand = async (args) => {
|
|
|
21038
21589
|
|
|
21039
21590
|
// src/doctor/ensureTool.ts
|
|
21040
21591
|
import { spawnSync as spawnSync8 } from "child_process";
|
|
21041
|
-
import
|
|
21592
|
+
import process27 from "process";
|
|
21042
21593
|
var toPlatform2 = (platform) => platform === "darwin" || platform === "win32" || platform === "linux" ? platform : null;
|
|
21043
21594
|
var succeeds2 = (command, args) => spawnSync8(command, [...args], { stdio: "ignore" }).status === 0;
|
|
21044
21595
|
var errorCode2 = (error) => error !== void 0 && "code" in error && typeof error.code === "string" ? error.code : void 0;
|
|
@@ -21061,9 +21612,9 @@ var ensureTool = (name, log = console) => {
|
|
|
21061
21612
|
if (tool === void 0) {
|
|
21062
21613
|
return { tool: name, known: false, installed: false, installedNow: false, authed: null };
|
|
21063
21614
|
}
|
|
21064
|
-
const platform = toPlatform2(
|
|
21615
|
+
const platform = toPlatform2(process27.platform);
|
|
21065
21616
|
if (!platform) {
|
|
21066
|
-
log.error(`[doctor] This operating system (${
|
|
21617
|
+
log.error(`[doctor] This operating system (${process27.platform}) isn't supported yet.`);
|
|
21067
21618
|
return { tool: name, known: true, installed: false, installedNow: false, authed: null };
|
|
21068
21619
|
}
|
|
21069
21620
|
const present = succeeds2(tool.name, tool.versionArgs);
|
|
@@ -21107,9 +21658,9 @@ var formatEnsureResult = (result) => {
|
|
|
21107
21658
|
};
|
|
21108
21659
|
|
|
21109
21660
|
// src/prompts/envWizard.ts
|
|
21110
|
-
import { readFile as
|
|
21111
|
-
import { join as
|
|
21112
|
-
import { cancel as cancel2, isCancel as
|
|
21661
|
+
import { readFile as readFile20 } from "fs/promises";
|
|
21662
|
+
import { join as join48 } from "path";
|
|
21663
|
+
import { cancel as cancel2, isCancel as isCancel3, text } from "@clack/prompts";
|
|
21113
21664
|
var ENV_KEY_PATTERN = /^[A-Z][A-Z0-9_]*$/;
|
|
21114
21665
|
var parseExampleEnvKeys = (raw) => raw.split("\n").reduce((keys, line) => {
|
|
21115
21666
|
const separatorIndex = line.indexOf("=");
|
|
@@ -21160,19 +21711,19 @@ ${nextLine}
|
|
|
21160
21711
|
`;
|
|
21161
21712
|
};
|
|
21162
21713
|
var runEnvWizard = async (cwd = process.cwd()) => {
|
|
21163
|
-
const examplePath =
|
|
21714
|
+
const examplePath = join48(cwd, ".env.example");
|
|
21164
21715
|
let raw;
|
|
21165
21716
|
try {
|
|
21166
|
-
raw = await
|
|
21717
|
+
raw = await readFile20(examplePath, "utf8");
|
|
21167
21718
|
} catch {
|
|
21168
21719
|
process.stderr.write("No .env.example in this folder.\n");
|
|
21169
21720
|
return 1;
|
|
21170
21721
|
}
|
|
21171
21722
|
const keys = parseExampleEnvKeys(raw);
|
|
21172
|
-
const envPath =
|
|
21723
|
+
const envPath = join48(cwd, ".env");
|
|
21173
21724
|
let envContent = "";
|
|
21174
21725
|
try {
|
|
21175
|
-
envContent = await
|
|
21726
|
+
envContent = await readFile20(envPath, "utf8");
|
|
21176
21727
|
} catch {
|
|
21177
21728
|
}
|
|
21178
21729
|
for (const key of keys) {
|
|
@@ -21184,19 +21735,19 @@ var runEnvWizard = async (cwd = process.cwd()) => {
|
|
|
21184
21735
|
defaultValue: current,
|
|
21185
21736
|
placeholder: current
|
|
21186
21737
|
});
|
|
21187
|
-
if (
|
|
21738
|
+
if (isCancel3(value)) {
|
|
21188
21739
|
cancel2("Cancelled.");
|
|
21189
21740
|
return 1;
|
|
21190
21741
|
}
|
|
21191
21742
|
envContent = upsertEnvLine(envContent, key, value);
|
|
21192
21743
|
}
|
|
21193
|
-
const { writeFile:
|
|
21194
|
-
await
|
|
21744
|
+
const { writeFile: writeFile14 } = await import("fs/promises");
|
|
21745
|
+
await writeFile14(envPath, envContent, "utf8");
|
|
21195
21746
|
return 0;
|
|
21196
21747
|
};
|
|
21197
21748
|
|
|
21198
21749
|
// src/prompts/mainMenu.ts
|
|
21199
|
-
import { cancel as cancel3, intro, isCancel as
|
|
21750
|
+
import { cancel as cancel3, intro, isCancel as isCancel4, select as select2 } from "@clack/prompts";
|
|
21200
21751
|
var promptMainMenu = async () => {
|
|
21201
21752
|
intro("Welcome to VybeKiit");
|
|
21202
21753
|
const picked = await select2({
|
|
@@ -21229,7 +21780,7 @@ var promptMainMenu = async () => {
|
|
|
21229
21780
|
}
|
|
21230
21781
|
]
|
|
21231
21782
|
});
|
|
21232
|
-
if (
|
|
21783
|
+
if (isCancel4(picked) || typeof picked !== "string") {
|
|
21233
21784
|
cancel3("Cancelled.");
|
|
21234
21785
|
return null;
|
|
21235
21786
|
}
|
|
@@ -21240,11 +21791,11 @@ var promptMainMenu = async () => {
|
|
|
21240
21791
|
};
|
|
21241
21792
|
|
|
21242
21793
|
// src/cliRunner.ts
|
|
21243
|
-
var HERE7 =
|
|
21244
|
-
var GATE_EXEMPT = /* @__PURE__ */ new Set(["doctor", "setup"]);
|
|
21794
|
+
var HERE7 = dirname16(fileURLToPath8(import.meta.url));
|
|
21795
|
+
var GATE_EXEMPT = /* @__PURE__ */ new Set(["doctor", "setup", "global-install"]);
|
|
21245
21796
|
var readVersion = async () => {
|
|
21246
21797
|
try {
|
|
21247
|
-
const raw = await
|
|
21798
|
+
const raw = await readFile21(join49(HERE7, "..", "package.json"), "utf8");
|
|
21248
21799
|
const parsed = JSON.parse(raw);
|
|
21249
21800
|
if (parsed.version !== void 0 && parsed.version !== "") {
|
|
21250
21801
|
return parsed.version;
|
|
@@ -21269,7 +21820,7 @@ var commandArgs = (context) => {
|
|
|
21269
21820
|
};
|
|
21270
21821
|
var writeLines2 = (lines) => {
|
|
21271
21822
|
for (const line of lines) {
|
|
21272
|
-
|
|
21823
|
+
process28.stdout.write(`${line}
|
|
21273
21824
|
`);
|
|
21274
21825
|
}
|
|
21275
21826
|
};
|
|
@@ -21285,20 +21836,20 @@ var runDoctorEnsure = (toolName, json) => {
|
|
|
21285
21836
|
if (toolName === void 0 || toolName === "" || toolName.startsWith("--")) {
|
|
21286
21837
|
const message = "Usage: vybekiit doctor --ensure <tool> [--json]";
|
|
21287
21838
|
if (json) {
|
|
21288
|
-
|
|
21839
|
+
process28.stdout.write(`${JSON.stringify({ ok: false, error: message })}
|
|
21289
21840
|
`);
|
|
21290
21841
|
} else {
|
|
21291
|
-
|
|
21842
|
+
process28.stderr.write(`${message}
|
|
21292
21843
|
`);
|
|
21293
21844
|
}
|
|
21294
21845
|
return 1;
|
|
21295
21846
|
}
|
|
21296
21847
|
const result = ensureTool(toolName);
|
|
21297
21848
|
if (json) {
|
|
21298
|
-
|
|
21849
|
+
process28.stdout.write(`${JSON.stringify({ ok: result.installed, ...result })}
|
|
21299
21850
|
`);
|
|
21300
21851
|
} else {
|
|
21301
|
-
|
|
21852
|
+
process28.stdout.write(`${formatEnsureResult(result)}
|
|
21302
21853
|
`);
|
|
21303
21854
|
}
|
|
21304
21855
|
return result.installed ? 0 : 1;
|
|
@@ -21314,47 +21865,47 @@ var handleDoctorCommand = async (context) => {
|
|
|
21314
21865
|
var handleBackendCommand = async (context) => {
|
|
21315
21866
|
if (context.subcommand === "add-route") {
|
|
21316
21867
|
const result = await runBackendAddRoute([...context.rest]);
|
|
21317
|
-
|
|
21868
|
+
process28.stdout.write(`${result.message}
|
|
21318
21869
|
`);
|
|
21319
21870
|
return result.exitCode;
|
|
21320
21871
|
}
|
|
21321
21872
|
if (context.subcommand === "add-crud") {
|
|
21322
21873
|
const result = await runBackendAddCrud([...context.rest]);
|
|
21323
|
-
|
|
21874
|
+
process28.stdout.write(`${result.message}
|
|
21324
21875
|
`);
|
|
21325
21876
|
return result.exitCode;
|
|
21326
21877
|
}
|
|
21327
21878
|
if (context.subcommand === "add-upload") {
|
|
21328
21879
|
const result = await runBackendAddUpload();
|
|
21329
|
-
|
|
21880
|
+
process28.stdout.write(`${result.message}
|
|
21330
21881
|
`);
|
|
21331
21882
|
return result.exitCode;
|
|
21332
21883
|
}
|
|
21333
21884
|
if (context.subcommand === "gen-contract") {
|
|
21334
21885
|
const result = await runBackendGenContract();
|
|
21335
|
-
|
|
21886
|
+
process28.stdout.write(`${result.message}
|
|
21336
21887
|
`);
|
|
21337
21888
|
return result.exitCode;
|
|
21338
21889
|
}
|
|
21339
|
-
|
|
21890
|
+
process28.stderr.write(
|
|
21340
21891
|
"Unknown backend command. Try: backend add-route | add-crud | add-upload | gen-contract\n"
|
|
21341
21892
|
);
|
|
21342
21893
|
return 1;
|
|
21343
21894
|
};
|
|
21344
21895
|
var handleEnvCommand = async (context) => {
|
|
21345
21896
|
if (context.subcommand !== "wizard") {
|
|
21346
|
-
|
|
21897
|
+
process28.stderr.write("Unknown env command. Try: vybekiit env wizard\n");
|
|
21347
21898
|
return 1;
|
|
21348
21899
|
}
|
|
21349
21900
|
if (!isInteractive()) {
|
|
21350
|
-
|
|
21901
|
+
process28.stderr.write("env wizard requires an interactive terminal.\n");
|
|
21351
21902
|
return 1;
|
|
21352
21903
|
}
|
|
21353
21904
|
return await runEnvWizard();
|
|
21354
21905
|
};
|
|
21355
21906
|
var handleCreateCommand = async (context) => {
|
|
21356
21907
|
if (context.subcommand !== "app") {
|
|
21357
|
-
|
|
21908
|
+
process28.stderr.write("Usage: vybekiit create app --web|--mobile|--extension [directory]\n");
|
|
21358
21909
|
return 1;
|
|
21359
21910
|
}
|
|
21360
21911
|
return await runCreateApp([...context.rest]);
|
|
@@ -21362,7 +21913,7 @@ var handleCreateCommand = async (context) => {
|
|
|
21362
21913
|
var wantsFullHelp = (argv) => argv.includes("--all") || argv.includes("-a");
|
|
21363
21914
|
var runMainMenuChoice = async (choice) => {
|
|
21364
21915
|
if (choice === "help-all") {
|
|
21365
|
-
|
|
21916
|
+
process28.stdout.write(`${CLI_HELP_ALL}
|
|
21366
21917
|
`);
|
|
21367
21918
|
return 0;
|
|
21368
21919
|
}
|
|
@@ -21389,23 +21940,24 @@ var handleAddCommand = async (context) => {
|
|
|
21389
21940
|
}
|
|
21390
21941
|
if (context.subcommand === "page-recipe") {
|
|
21391
21942
|
const result = await runAddPageRecipe([...context.rest]);
|
|
21392
|
-
|
|
21943
|
+
process28.stdout.write(`${result.json}
|
|
21393
21944
|
`);
|
|
21394
21945
|
return result.exitCode;
|
|
21395
21946
|
}
|
|
21396
21947
|
if (context.subcommand === "preset") {
|
|
21397
21948
|
const result = await runApplyPreset([...context.rest]);
|
|
21398
|
-
|
|
21949
|
+
process28.stdout.write(`${result.json}
|
|
21399
21950
|
`);
|
|
21400
21951
|
return result.exitCode;
|
|
21401
21952
|
}
|
|
21402
|
-
|
|
21953
|
+
process28.stderr.write(
|
|
21403
21954
|
"Unknown add command. Try: vybekiit add page-recipe <id> | add preset <id> | add bridge\n"
|
|
21404
21955
|
);
|
|
21405
21956
|
return 1;
|
|
21406
21957
|
};
|
|
21407
21958
|
var COMMAND_HANDLERS = {
|
|
21408
21959
|
setup: async () => await runSetup(),
|
|
21960
|
+
"global-install": (context) => runGlobalInstall(commandArgs(context)),
|
|
21409
21961
|
create: handleCreateCommand,
|
|
21410
21962
|
new: (context) => runNew(commandArgs(context)),
|
|
21411
21963
|
drop: (context) => runDrop(commandArgs(context)),
|
|
@@ -21421,96 +21973,96 @@ var COMMAND_HANDLERS = {
|
|
|
21421
21973
|
"render-agent-layer": async () => (await runRenderAgentLayer()).exitCode,
|
|
21422
21974
|
"check-goals": async (context) => {
|
|
21423
21975
|
const result = await runCheckGoals([...context.rest]);
|
|
21424
|
-
|
|
21976
|
+
process28.stdout.write(`${result.json}
|
|
21425
21977
|
`);
|
|
21426
21978
|
return result.exitCode;
|
|
21427
21979
|
},
|
|
21428
21980
|
"check-agent-layer": async (context) => {
|
|
21429
21981
|
const result = await runCheckAgentLayer([...context.rest]);
|
|
21430
|
-
|
|
21982
|
+
process28.stdout.write(`${result.json}
|
|
21431
21983
|
`);
|
|
21432
21984
|
return result.exitCode;
|
|
21433
21985
|
},
|
|
21434
21986
|
"plan-readiness": async (context) => {
|
|
21435
21987
|
const result = await runPlanReadiness([...context.rest]);
|
|
21436
|
-
|
|
21988
|
+
process28.stdout.write(`${result.json}
|
|
21437
21989
|
`);
|
|
21438
21990
|
return result.exitCode;
|
|
21439
21991
|
},
|
|
21440
21992
|
"plan-setup": async (context) => {
|
|
21441
21993
|
const result = await runPlanSetup([...context.rest]);
|
|
21442
|
-
|
|
21994
|
+
process28.stdout.write(`${result.output}
|
|
21443
21995
|
`);
|
|
21444
21996
|
return result.exitCode;
|
|
21445
21997
|
},
|
|
21446
21998
|
"plan-data-model": async (context) => {
|
|
21447
21999
|
const result = await runPlanDataModel([...context.rest]);
|
|
21448
|
-
|
|
22000
|
+
process28.stdout.write(`${result.json}
|
|
21449
22001
|
`);
|
|
21450
22002
|
return result.exitCode;
|
|
21451
22003
|
},
|
|
21452
22004
|
"apply-preset": async (context) => {
|
|
21453
22005
|
const result = await runApplyPreset(commandArgs(context));
|
|
21454
|
-
|
|
22006
|
+
process28.stdout.write(`${result.json}
|
|
21455
22007
|
`);
|
|
21456
22008
|
return result.exitCode;
|
|
21457
22009
|
},
|
|
21458
22010
|
"list-presets": () => {
|
|
21459
22011
|
const result = runListPresets();
|
|
21460
|
-
|
|
22012
|
+
process28.stdout.write(`${result.json}
|
|
21461
22013
|
`);
|
|
21462
22014
|
return result.exitCode;
|
|
21463
22015
|
},
|
|
21464
22016
|
"list-pieces": async (context) => {
|
|
21465
22017
|
const result = await runListPieces(commandArgs(context));
|
|
21466
|
-
|
|
22018
|
+
process28.stdout.write(`${result.json}
|
|
21467
22019
|
`);
|
|
21468
22020
|
return result.exitCode;
|
|
21469
22021
|
},
|
|
21470
22022
|
"list-page-recipes": async (context) => {
|
|
21471
22023
|
const result = await runListPageRecipes(commandArgs(context));
|
|
21472
|
-
|
|
22024
|
+
process28.stdout.write(`${result.json}
|
|
21473
22025
|
`);
|
|
21474
22026
|
return result.exitCode;
|
|
21475
22027
|
},
|
|
21476
22028
|
"verify-presets": async (context) => {
|
|
21477
22029
|
const result = await runVerifyPresets(commandArgs(context));
|
|
21478
|
-
|
|
22030
|
+
process28.stdout.write(`${result.json}
|
|
21479
22031
|
`);
|
|
21480
22032
|
return result.exitCode;
|
|
21481
22033
|
},
|
|
21482
22034
|
"lint-extension-skill": async (context) => {
|
|
21483
22035
|
const result = await runLintExtensionSkill([...context.rest]);
|
|
21484
|
-
|
|
22036
|
+
process28.stdout.write(`${result.json}
|
|
21485
22037
|
`);
|
|
21486
22038
|
return result.exitCode;
|
|
21487
22039
|
},
|
|
21488
22040
|
"doc-fallback": (context) => {
|
|
21489
22041
|
const result = runDocFallback([...context.rest]);
|
|
21490
|
-
|
|
22042
|
+
process28.stdout.write(`${result.json}
|
|
21491
22043
|
`);
|
|
21492
22044
|
return result.exitCode;
|
|
21493
22045
|
},
|
|
21494
22046
|
"live-work": async (context) => {
|
|
21495
22047
|
if (context.subcommand === "data") {
|
|
21496
22048
|
const result = await runLiveWorkData([...context.rest]);
|
|
21497
|
-
|
|
22049
|
+
process28.stdout.write(`${result.json}
|
|
21498
22050
|
`);
|
|
21499
22051
|
return result.exitCode;
|
|
21500
22052
|
}
|
|
21501
22053
|
if (context.subcommand === "host") {
|
|
21502
22054
|
const result = await runLiveWorkHost([...context.rest]);
|
|
21503
|
-
|
|
22055
|
+
process28.stdout.write(`${result.json}
|
|
21504
22056
|
`);
|
|
21505
22057
|
return result.exitCode;
|
|
21506
22058
|
}
|
|
21507
22059
|
if (context.subcommand === "payments") {
|
|
21508
22060
|
const result = await runLiveWorkPayments([...context.rest]);
|
|
21509
|
-
|
|
22061
|
+
process28.stdout.write(`${result.json}
|
|
21510
22062
|
`);
|
|
21511
22063
|
return result.exitCode;
|
|
21512
22064
|
}
|
|
21513
|
-
|
|
22065
|
+
process28.stderr.write(
|
|
21514
22066
|
"Usage: vybekiit live-work data|host|payments [--mode=demo|dogfood|buyer] [--vendor=\u2026] [--cwd=dir] [--no-pin] [--fresh]\n"
|
|
21515
22067
|
);
|
|
21516
22068
|
return 1;
|
|
@@ -21518,7 +22070,7 @@ var COMMAND_HANDLERS = {
|
|
|
21518
22070
|
dedup: async (context) => {
|
|
21519
22071
|
const result = await runDedup(commandArgs(context));
|
|
21520
22072
|
if (result.output !== "") {
|
|
21521
|
-
|
|
22073
|
+
process28.stdout.write(result.output);
|
|
21522
22074
|
}
|
|
21523
22075
|
return result.exitCode;
|
|
21524
22076
|
},
|
|
@@ -21526,11 +22078,11 @@ var COMMAND_HANDLERS = {
|
|
|
21526
22078
|
env: handleEnvCommand,
|
|
21527
22079
|
scaffold: async (context) => {
|
|
21528
22080
|
if (context.subcommand !== "backend") {
|
|
21529
|
-
|
|
22081
|
+
process28.stderr.write("Unknown scaffold command. Try: vybekiit scaffold backend\n");
|
|
21530
22082
|
return 1;
|
|
21531
22083
|
}
|
|
21532
|
-
const result = await runScaffoldBackend([...context.rest],
|
|
21533
|
-
|
|
22084
|
+
const result = await runScaffoldBackend([...context.rest], process28.cwd());
|
|
22085
|
+
process28.stdout.write(`${result.message}
|
|
21534
22086
|
`);
|
|
21535
22087
|
return result.exitCode;
|
|
21536
22088
|
},
|
|
@@ -21546,17 +22098,17 @@ var runCli = async (argv) => {
|
|
|
21546
22098
|
}
|
|
21547
22099
|
return await runMainMenuChoice(choice);
|
|
21548
22100
|
}
|
|
21549
|
-
|
|
22101
|
+
process28.stdout.write(`${CLI_HELP}
|
|
21550
22102
|
`);
|
|
21551
22103
|
return 0;
|
|
21552
22104
|
}
|
|
21553
22105
|
if (context.command === "help" || context.command === "--help" || context.command === "-h") {
|
|
21554
|
-
|
|
22106
|
+
process28.stdout.write(`${wantsFullHelp(argv) ? CLI_HELP_ALL : CLI_HELP}
|
|
21555
22107
|
`);
|
|
21556
22108
|
return 0;
|
|
21557
22109
|
}
|
|
21558
22110
|
if (context.command === "--version" || context.command === "-v") {
|
|
21559
|
-
|
|
22111
|
+
process28.stdout.write(`${await readVersion()}
|
|
21560
22112
|
`);
|
|
21561
22113
|
return 0;
|
|
21562
22114
|
}
|
|
@@ -21565,7 +22117,7 @@ var runCli = async (argv) => {
|
|
|
21565
22117
|
}
|
|
21566
22118
|
const handler = COMMAND_HANDLERS[context.command];
|
|
21567
22119
|
if (handler === void 0) {
|
|
21568
|
-
|
|
22120
|
+
process28.stderr.write(
|
|
21569
22121
|
`Unknown command: ${context.command}
|
|
21570
22122
|
Try: vybekiit or vybekiit --help
|
|
21571
22123
|
`
|
|
@@ -21576,18 +22128,10 @@ Try: vybekiit or vybekiit --help
|
|
|
21576
22128
|
};
|
|
21577
22129
|
|
|
21578
22130
|
// src/bin.ts
|
|
21579
|
-
|
|
21580
|
-
|
|
21581
|
-
|
|
21582
|
-
}
|
|
21583
|
-
|
|
21584
|
-
|
|
21585
|
-
|
|
21586
|
-
} catch {
|
|
21587
|
-
process26.exit(1);
|
|
21588
|
-
}
|
|
21589
|
-
};
|
|
21590
|
-
await runBinEntrypoint();
|
|
21591
|
-
export {
|
|
21592
|
-
runBinEntrypoint
|
|
21593
|
-
};
|
|
22131
|
+
try {
|
|
22132
|
+
process29.exit(await runCli(process29.argv.slice(2)));
|
|
22133
|
+
} catch (error) {
|
|
22134
|
+
process29.stderr.write(`vybekiit: ${error instanceof Error ? error.message : String(error)}
|
|
22135
|
+
`);
|
|
22136
|
+
process29.exit(1);
|
|
22137
|
+
}
|