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.
Files changed (665) hide show
  1. package/dist/bin.js +840 -296
  2. package/dist/global-skills/add-ai/SKILL.md +53 -0
  3. package/dist/global-skills/add-analytics/SKILL.md +65 -0
  4. package/dist/global-skills/add-app-clip/SKILL.md +280 -0
  5. package/dist/global-skills/add-app-clip/agents/openai.yaml +4 -0
  6. package/dist/global-skills/add-app-clip/references/native-module.md +96 -0
  7. package/dist/global-skills/add-blog/SKILL.md +49 -0
  8. package/dist/global-skills/add-crud/SKILL.md +28 -0
  9. package/dist/global-skills/add-files/SKILL.md +65 -0
  10. package/dist/global-skills/add-images/SKILL.md +64 -0
  11. package/dist/global-skills/add-language/SKILL.md +44 -0
  12. package/dist/global-skills/add-notifications/SKILL.md +61 -0
  13. package/dist/global-skills/add-realtime/SKILL.md +49 -0
  14. package/dist/global-skills/add-route/SKILL.md +28 -0
  15. package/dist/global-skills/add-search/SKILL.md +43 -0
  16. package/dist/global-skills/add-signin/SKILL.md +78 -0
  17. package/dist/global-skills/add-teams/SKILL.md +64 -0
  18. package/dist/global-skills/add-upload/SKILL.md +27 -0
  19. package/dist/global-skills/aws-cdk/SKILL.md +72 -0
  20. package/dist/global-skills/aws-cdk/references/bootstrap-and-project-setup.md +257 -0
  21. package/dist/global-skills/aws-cdk/references/compliance-and-drift.md +193 -0
  22. package/dist/global-skills/aws-cdk/references/construct-patterns.md +315 -0
  23. package/dist/global-skills/aws-cdk/references/import-and-migrate.md +184 -0
  24. package/dist/global-skills/aws-cdk/references/refactor-and-prevent-replacement.md +198 -0
  25. package/dist/global-skills/aws-cdk/references/troubleshooting-credentials.md +183 -0
  26. package/dist/global-skills/aws-cdk/references/troubleshooting-deployment.md +293 -0
  27. package/dist/global-skills/aws-cdk/references/troubleshooting-synth.md +274 -0
  28. package/dist/global-skills/aws-cdk/references/v1-to-v2-migration.md +119 -0
  29. package/dist/global-skills/aws-cloudformation/SKILL.md +88 -0
  30. package/dist/global-skills/aws-cloudformation/references/author-cloudformation-best-practices.script.md +179 -0
  31. package/dist/global-skills/aws-cloudformation/references/check-cloudformation-template-compliance.script.md +159 -0
  32. package/dist/global-skills/aws-cloudformation/references/cloudformation-pre-deploy-validation.script.md +217 -0
  33. package/dist/global-skills/aws-cloudformation/references/deploy-with-express-mode.script.md +271 -0
  34. package/dist/global-skills/aws-cloudformation/references/lookup-resource-properties.script.md +130 -0
  35. package/dist/global-skills/aws-cloudformation/references/troubleshoot-deployment.script.md +200 -0
  36. package/dist/global-skills/aws-cloudformation/references/validate-cloudformation-template.script.md +135 -0
  37. package/dist/global-skills/aws-serverless/SKILL.md +51 -0
  38. package/dist/global-skills/aws-serverless/assets/powertools-handler.py +49 -0
  39. package/dist/global-skills/aws-serverless/references/api-gateway.md +553 -0
  40. package/dist/global-skills/aws-serverless/references/architecture.md +262 -0
  41. package/dist/global-skills/aws-serverless/references/concurrency.md +200 -0
  42. package/dist/global-skills/aws-serverless/references/deployment.md +94 -0
  43. package/dist/global-skills/aws-serverless/references/event-sources.md +484 -0
  44. package/dist/global-skills/aws-serverless/references/lambda.md +548 -0
  45. package/dist/global-skills/aws-serverless/references/orchestration.md +449 -0
  46. package/dist/global-skills/aws-serverless/references/production.md +493 -0
  47. package/dist/global-skills/aws-serverless/references/troubleshooting.md +711 -0
  48. package/dist/global-skills/back-up-my-code/SKILL.md +48 -0
  49. package/dist/global-skills/better-auth-best-practices/SKILL.md +182 -0
  50. package/dist/global-skills/better-auth-security-best-practices/SKILL.md +432 -0
  51. package/dist/global-skills/building-native-ui/SKILL.md +377 -0
  52. package/dist/global-skills/building-native-ui/agents/openai.yaml +4 -0
  53. package/dist/global-skills/building-native-ui/references/animations.md +220 -0
  54. package/dist/global-skills/building-native-ui/references/controls.md +270 -0
  55. package/dist/global-skills/building-native-ui/references/form-sheet.md +253 -0
  56. package/dist/global-skills/building-native-ui/references/gradients.md +106 -0
  57. package/dist/global-skills/building-native-ui/references/icons.md +213 -0
  58. package/dist/global-skills/building-native-ui/references/media.md +198 -0
  59. package/dist/global-skills/building-native-ui/references/route-structure.md +229 -0
  60. package/dist/global-skills/building-native-ui/references/search.md +248 -0
  61. package/dist/global-skills/building-native-ui/references/storage.md +121 -0
  62. package/dist/global-skills/building-native-ui/references/tabs.md +433 -0
  63. package/dist/global-skills/building-native-ui/references/toolbar-and-headers.md +284 -0
  64. package/dist/global-skills/building-native-ui/references/visual-effects.md +197 -0
  65. package/dist/global-skills/building-native-ui/references/webgpu-three.md +605 -0
  66. package/dist/global-skills/building-native-ui/references/zoom-transitions.md +158 -0
  67. package/dist/global-skills/buy-domain/SKILL.md +64 -0
  68. package/dist/global-skills/check-safety/SKILL.md +94 -0
  69. package/dist/global-skills/claimable-postgres/SKILL.md +249 -0
  70. package/dist/global-skills/configure-capabilities/SKILL.md +38 -0
  71. package/dist/global-skills/connect-account/SKILL.md +64 -0
  72. package/dist/global-skills/connect-account-backend/SKILL.md +41 -0
  73. package/dist/global-skills/create-auth-skill/SKILL.md +321 -0
  74. package/dist/global-skills/design-my-data/SKILL.md +48 -0
  75. package/dist/global-skills/doctor/SKILL.md +84 -0
  76. package/dist/global-skills/eas-app-stores/SKILL.md +152 -0
  77. package/dist/global-skills/eas-app-stores/agents/openai.yaml +4 -0
  78. package/dist/global-skills/eas-app-stores/references/app-store-metadata.md +497 -0
  79. package/dist/global-skills/eas-app-stores/references/ios-app-store.md +371 -0
  80. package/dist/global-skills/eas-app-stores/references/play-store.md +246 -0
  81. package/dist/global-skills/eas-app-stores/references/testflight.md +58 -0
  82. package/dist/global-skills/eas-app-stores/references/workflows.md +120 -0
  83. package/dist/global-skills/eas-hosting/SKILL.md +423 -0
  84. package/dist/global-skills/eas-hosting/agents/openai.yaml +4 -0
  85. package/dist/global-skills/eas-observe/SKILL.md +32 -0
  86. package/dist/global-skills/eas-observe/agents/openai.yaml +4 -0
  87. package/dist/global-skills/eas-observe/references/metrics.md +47 -0
  88. package/dist/global-skills/eas-observe/references/queries.md +342 -0
  89. package/dist/global-skills/eas-observe/references/setup.md +317 -0
  90. package/dist/global-skills/eas-simulator/SKILL.md +156 -0
  91. package/dist/global-skills/eas-simulator/agents/openai.yaml +4 -0
  92. package/dist/global-skills/eas-simulator/references/controllers.md +67 -0
  93. package/dist/global-skills/eas-simulator/references/run-your-app.md +185 -0
  94. package/dist/global-skills/eas-simulator/references/troubleshooting.md +38 -0
  95. package/dist/global-skills/eas-update-insights/SKILL.md +230 -0
  96. package/dist/global-skills/eas-update-insights/agents/openai.yaml +4 -0
  97. package/dist/global-skills/eas-update-insights/references/channel-insights-schema.md +47 -0
  98. package/dist/global-skills/eas-update-insights/references/update-insights-schema.md +69 -0
  99. package/dist/global-skills/eas-workflows/SKILL.md +94 -0
  100. package/dist/global-skills/eas-workflows/agents/openai.yaml +4 -0
  101. package/dist/global-skills/eas-workflows/scripts/fetch.js +109 -0
  102. package/dist/global-skills/eas-workflows/scripts/package.json +11 -0
  103. package/dist/global-skills/eas-workflows/scripts/validate.js +84 -0
  104. package/dist/global-skills/email-best-practices/SKILL.md +73 -0
  105. package/dist/global-skills/expo-api-routes/SKILL.md +368 -0
  106. package/dist/global-skills/expo-api-routes/agents/openai.yaml +4 -0
  107. package/dist/global-skills/expo-app-clip/SKILL.md +282 -0
  108. package/dist/global-skills/expo-app-clip/agents/openai.yaml +4 -0
  109. package/dist/global-skills/expo-app-clip/references/native-module.md +96 -0
  110. package/dist/global-skills/expo-brownfield/SKILL.md +54 -0
  111. package/dist/global-skills/expo-brownfield/agents/openai.yaml +4 -0
  112. package/dist/global-skills/expo-brownfield/references/brownfield-integrated.md +526 -0
  113. package/dist/global-skills/expo-brownfield/references/brownfield-isolated.md +402 -0
  114. package/dist/global-skills/expo-brownfield/references/comparison.md +63 -0
  115. package/dist/global-skills/expo-brownfield/references/troubleshooting.md +88 -0
  116. package/dist/global-skills/expo-cicd-workflows/SKILL.md +92 -0
  117. package/dist/global-skills/expo-cicd-workflows/agents/openai.yaml +4 -0
  118. package/dist/global-skills/expo-cicd-workflows/scripts/fetch.js +109 -0
  119. package/dist/global-skills/expo-cicd-workflows/scripts/package.json +11 -0
  120. package/dist/global-skills/expo-cicd-workflows/scripts/validate.js +84 -0
  121. package/dist/global-skills/expo-data-fetching/SKILL.md +449 -0
  122. package/dist/global-skills/expo-data-fetching/agents/openai.yaml +4 -0
  123. package/dist/global-skills/expo-data-fetching/references/expo-router-loaders.md +341 -0
  124. package/dist/global-skills/expo-data-fetching/references/offline-and-cancellation.md +68 -0
  125. package/dist/global-skills/expo-deployment/SKILL.md +167 -0
  126. package/dist/global-skills/expo-deployment/agents/openai.yaml +4 -0
  127. package/dist/global-skills/expo-deployment/references/app-store-metadata.md +497 -0
  128. package/dist/global-skills/expo-deployment/references/ios-app-store.md +371 -0
  129. package/dist/global-skills/expo-deployment/references/play-store.md +246 -0
  130. package/dist/global-skills/expo-deployment/references/testflight.md +58 -0
  131. package/dist/global-skills/expo-deployment/references/workflows.md +160 -0
  132. package/dist/global-skills/expo-dev-client/SKILL.md +174 -0
  133. package/dist/global-skills/expo-dev-client/agents/openai.yaml +4 -0
  134. package/dist/global-skills/expo-dom/SKILL.md +417 -0
  135. package/dist/global-skills/expo-dom/agents/openai.yaml +4 -0
  136. package/dist/global-skills/expo-examples/SKILL.md +99 -0
  137. package/dist/global-skills/expo-examples/agents/openai.yaml +4 -0
  138. package/dist/global-skills/expo-examples/references/catalog.md +105 -0
  139. package/dist/global-skills/expo-module/SKILL.md +141 -0
  140. package/dist/global-skills/expo-module/agents/openai.yaml +4 -0
  141. package/dist/global-skills/expo-module/references/config-plugin.md +90 -0
  142. package/dist/global-skills/expo-module/references/create-expo-module.md +206 -0
  143. package/dist/global-skills/expo-module/references/lifecycle.md +127 -0
  144. package/dist/global-skills/expo-module/references/module-config.md +48 -0
  145. package/dist/global-skills/expo-module/references/native-module.md +286 -0
  146. package/dist/global-skills/expo-module/references/native-view.md +171 -0
  147. package/dist/global-skills/expo-native-ui/SKILL.md +181 -0
  148. package/dist/global-skills/expo-native-ui/agents/openai.yaml +4 -0
  149. package/dist/global-skills/expo-native-ui/references/animations.md +220 -0
  150. package/dist/global-skills/expo-native-ui/references/controls.md +270 -0
  151. package/dist/global-skills/expo-native-ui/references/gradients.md +106 -0
  152. package/dist/global-skills/expo-native-ui/references/icons.md +213 -0
  153. package/dist/global-skills/expo-native-ui/references/media.md +198 -0
  154. package/dist/global-skills/expo-native-ui/references/storage.md +121 -0
  155. package/dist/global-skills/expo-native-ui/references/visual-effects.md +197 -0
  156. package/dist/global-skills/expo-native-ui/references/webgpu-three.md +605 -0
  157. package/dist/global-skills/expo-observe/SKILL.md +30 -0
  158. package/dist/global-skills/expo-observe/references/metrics.md +47 -0
  159. package/dist/global-skills/expo-observe/references/queries.md +342 -0
  160. package/dist/global-skills/expo-observe/references/setup.md +317 -0
  161. package/dist/global-skills/expo-router/SKILL.md +230 -0
  162. package/dist/global-skills/expo-router/agents/openai.yaml +4 -0
  163. package/dist/global-skills/expo-router/references/form-sheet.md +253 -0
  164. package/dist/global-skills/expo-router/references/route-structure.md +229 -0
  165. package/dist/global-skills/expo-router/references/search.md +248 -0
  166. package/dist/global-skills/expo-router/references/tabs.md +433 -0
  167. package/dist/global-skills/expo-router/references/toolbar-and-headers.md +284 -0
  168. package/dist/global-skills/expo-router/references/zoom-transitions.md +158 -0
  169. package/dist/global-skills/expo-skill-eval/SKILL.md +314 -0
  170. package/dist/global-skills/expo-skill-eval/agents/visual-grader.md +52 -0
  171. package/dist/global-skills/expo-skill-eval/references/design-rubric.md +45 -0
  172. package/dist/global-skills/expo-skill-eval/references/runtime-matrix.md +34 -0
  173. package/dist/global-skills/expo-skill-eval/scripts/check-static.sh +64 -0
  174. package/dist/global-skills/expo-skill-eval/scripts/clean-fixture.sh +56 -0
  175. package/dist/global-skills/expo-skill-eval/scripts/generate_viewer.py +450 -0
  176. package/dist/global-skills/expo-skill-eval/scripts/latest-sdk.sh +46 -0
  177. package/dist/global-skills/expo-skill-eval/scripts/make-fixture.sh +95 -0
  178. package/dist/global-skills/expo-skill-eval/scripts/make-workspace.sh +31 -0
  179. package/dist/global-skills/expo-skill-eval/scripts/snapshot-android.sh +284 -0
  180. package/dist/global-skills/expo-skill-eval/scripts/snapshot-ios.sh +132 -0
  181. package/dist/global-skills/expo-skill-eval/scripts/snapshot-web.sh +61 -0
  182. package/dist/global-skills/expo-skill-feedback/SKILL.md +54 -0
  183. package/dist/global-skills/expo-skill-feedback/agents/openai.yaml +4 -0
  184. package/dist/global-skills/expo-skill-feedback/scripts/skill-event.cjs +180 -0
  185. package/dist/global-skills/expo-skill-feedback/scripts/skill-feedback.cjs +118 -0
  186. package/dist/global-skills/expo-skill-feedback/scripts/telemetry.cjs +65 -0
  187. package/dist/global-skills/expo-skill-feedback/scripts/telemetry_common.cjs +171 -0
  188. package/dist/global-skills/expo-tailwind-setup/SKILL.md +480 -0
  189. package/dist/global-skills/expo-tailwind-setup/agents/openai.yaml +4 -0
  190. package/dist/global-skills/expo-ui/SKILL.md +47 -0
  191. package/dist/global-skills/expo-ui/agents/openai.yaml +4 -0
  192. package/dist/global-skills/expo-ui/references/drop-in-replacements.md +27 -0
  193. package/dist/global-skills/expo-ui/references/jetpack-compose.md +73 -0
  194. package/dist/global-skills/expo-ui/references/swift-ui.md +73 -0
  195. package/dist/global-skills/expo-ui/references/universal.md +73 -0
  196. package/dist/global-skills/expo-ui/scripts/list-components.js +193 -0
  197. package/dist/global-skills/expo-upgrade/SKILL.md +134 -0
  198. package/dist/global-skills/expo-upgrade/agents/openai.yaml +4 -0
  199. package/dist/global-skills/expo-upgrade/references/expo-av-to-audio.md +132 -0
  200. package/dist/global-skills/expo-upgrade/references/expo-av-to-video.md +160 -0
  201. package/dist/global-skills/expo-upgrade/references/native-tabs.md +124 -0
  202. package/dist/global-skills/expo-upgrade/references/new-architecture.md +79 -0
  203. package/dist/global-skills/expo-upgrade/references/react-19.md +79 -0
  204. package/dist/global-skills/expo-upgrade/references/react-compiler.md +59 -0
  205. package/dist/global-skills/expo-upgrade/references/react-navigation-to-expo-router.md +61 -0
  206. package/dist/global-skills/expo-web-to-native/SKILL.md +83 -0
  207. package/dist/global-skills/expo-web-to-native/agents/openai.yaml +4 -0
  208. package/dist/global-skills/expo-web-to-native/references/false-friends.md +119 -0
  209. package/dist/global-skills/expo-web-to-native/references/native-patterns.md +39 -0
  210. package/dist/global-skills/expo-web-to-native/references/run-as-goal.md +48 -0
  211. package/dist/global-skills/expo-web-to-native/references/verify-on-device.md +45 -0
  212. package/dist/global-skills/firebase-ai-logic-basics/SKILL.md +165 -0
  213. package/dist/global-skills/firebase-ai-logic-basics/references/flutter_setup.md +95 -0
  214. package/dist/global-skills/firebase-ai-logic-basics/references/ios_setup.md +156 -0
  215. package/dist/global-skills/firebase-ai-logic-basics/references/usage_patterns_android.md +157 -0
  216. package/dist/global-skills/firebase-ai-logic-basics/references/usage_patterns_web.md +186 -0
  217. package/dist/global-skills/firebase-app-hosting-basics/SKILL.md +73 -0
  218. package/dist/global-skills/firebase-app-hosting-basics/references/cli_commands.md +85 -0
  219. package/dist/global-skills/firebase-app-hosting-basics/references/configuration.md +59 -0
  220. package/dist/global-skills/firebase-app-hosting-basics/references/emulation.md +59 -0
  221. package/dist/global-skills/firebase-auth-basics/SKILL.md +118 -0
  222. package/dist/global-skills/firebase-auth-basics/references/client_sdk_android.md +160 -0
  223. package/dist/global-skills/firebase-auth-basics/references/client_sdk_web.md +301 -0
  224. package/dist/global-skills/firebase-auth-basics/references/flutter_setup.md +149 -0
  225. package/dist/global-skills/firebase-auth-basics/references/ios_setup.md +87 -0
  226. package/dist/global-skills/firebase-auth-basics/references/security_rules.md +49 -0
  227. package/dist/global-skills/firebase-basics/SKILL.md +148 -0
  228. package/dist/global-skills/firebase-basics/references/android_setup.md +41 -0
  229. package/dist/global-skills/firebase-basics/references/firebase-cli-guide.md +18 -0
  230. package/dist/global-skills/firebase-basics/references/firebase-service-init.md +20 -0
  231. package/dist/global-skills/firebase-basics/references/flutter_setup.md +143 -0
  232. package/dist/global-skills/firebase-basics/references/ios_setup.md +113 -0
  233. package/dist/global-skills/firebase-basics/references/local-env-setup.md +80 -0
  234. package/dist/global-skills/firebase-basics/references/refresh/android_studio.md +41 -0
  235. package/dist/global-skills/firebase-basics/references/refresh/antigravity.md +64 -0
  236. package/dist/global-skills/firebase-basics/references/refresh/claude.md +12 -0
  237. package/dist/global-skills/firebase-basics/references/refresh/gemini-cli.md +13 -0
  238. package/dist/global-skills/firebase-basics/references/refresh/other-agents.md +67 -0
  239. package/dist/global-skills/firebase-basics/references/setup/android_studio.md +23 -0
  240. package/dist/global-skills/firebase-basics/references/setup/antigravity.md +98 -0
  241. package/dist/global-skills/firebase-basics/references/setup/claude_code.md +45 -0
  242. package/dist/global-skills/firebase-basics/references/setup/cursor.md +93 -0
  243. package/dist/global-skills/firebase-basics/references/setup/gemini_cli.md +53 -0
  244. package/dist/global-skills/firebase-basics/references/setup/github_copilot.md +104 -0
  245. package/dist/global-skills/firebase-basics/references/setup/other_agents.md +99 -0
  246. package/dist/global-skills/firebase-basics/references/web_setup.md +77 -0
  247. package/dist/global-skills/firebase-crashlytics/SKILL.md +42 -0
  248. package/dist/global-skills/firebase-crashlytics/references/android_setup.md +152 -0
  249. package/dist/global-skills/firebase-crashlytics/references/ios_setup.md +115 -0
  250. package/dist/global-skills/firebase-data-connect/SKILL.md +191 -0
  251. package/dist/global-skills/firebase-data-connect/examples.md +638 -0
  252. package/dist/global-skills/firebase-data-connect/reference/cloud_functions.md +184 -0
  253. package/dist/global-skills/firebase-data-connect/reference/config.md +271 -0
  254. package/dist/global-skills/firebase-data-connect/reference/data_seeding.md +185 -0
  255. package/dist/global-skills/firebase-data-connect/reference/native_sql.md +170 -0
  256. package/dist/global-skills/firebase-data-connect/reference/operations.md +385 -0
  257. package/dist/global-skills/firebase-data-connect/reference/realtime.md +210 -0
  258. package/dist/global-skills/firebase-data-connect/reference/schema.md +290 -0
  259. package/dist/global-skills/firebase-data-connect/reference/sdk_admin_node.md +141 -0
  260. package/dist/global-skills/firebase-data-connect/reference/sdk_android.md +126 -0
  261. package/dist/global-skills/firebase-data-connect/reference/sdk_flutter.md +134 -0
  262. package/dist/global-skills/firebase-data-connect/reference/sdk_ios.md +157 -0
  263. package/dist/global-skills/firebase-data-connect/reference/sdk_web.md +146 -0
  264. package/dist/global-skills/firebase-data-connect/reference/search.md +264 -0
  265. package/dist/global-skills/firebase-data-connect/reference/security.md +295 -0
  266. package/dist/global-skills/firebase-data-connect/templates.md +318 -0
  267. package/dist/global-skills/firebase-firestore/SKILL.md +89 -0
  268. package/dist/global-skills/firebase-firestore/references/enterprise/android_sdk_usage.md +230 -0
  269. package/dist/global-skills/firebase-firestore/references/enterprise/data_model.md +66 -0
  270. package/dist/global-skills/firebase-firestore/references/enterprise/flutter_setup.md +180 -0
  271. package/dist/global-skills/firebase-firestore/references/enterprise/indexes.md +135 -0
  272. package/dist/global-skills/firebase-firestore/references/enterprise/ios_setup.md +189 -0
  273. package/dist/global-skills/firebase-firestore/references/enterprise/provisioning.md +118 -0
  274. package/dist/global-skills/firebase-firestore/references/enterprise/python_sdk_usage.md +138 -0
  275. package/dist/global-skills/firebase-firestore/references/enterprise/security_rules.md +577 -0
  276. package/dist/global-skills/firebase-firestore/references/enterprise/web_sdk_usage.md +127 -0
  277. package/dist/global-skills/firebase-firestore/references/standard/android_sdk_usage.md +193 -0
  278. package/dist/global-skills/firebase-firestore/references/standard/flutter_setup.md +176 -0
  279. package/dist/global-skills/firebase-firestore/references/standard/indexes.md +113 -0
  280. package/dist/global-skills/firebase-firestore/references/standard/ios_setup.md +174 -0
  281. package/dist/global-skills/firebase-firestore/references/standard/provisioning.md +110 -0
  282. package/dist/global-skills/firebase-firestore/references/standard/security_rules.md +577 -0
  283. package/dist/global-skills/firebase-firestore/references/standard/web_sdk_usage.md +192 -0
  284. package/dist/global-skills/firebase-hosting-basics/SKILL.md +64 -0
  285. package/dist/global-skills/firebase-hosting-basics/references/configuration.md +115 -0
  286. package/dist/global-skills/firebase-hosting-basics/references/deploying.md +48 -0
  287. package/dist/global-skills/firebase-remote-config-basics/SKILL.md +124 -0
  288. package/dist/global-skills/firebase-remote-config-basics/references/android_setup.md +91 -0
  289. package/dist/global-skills/firebase-remote-config-basics/references/ios_setup.md +89 -0
  290. package/dist/global-skills/firebase-security-rules-auditor/SKILL.md +70 -0
  291. package/dist/global-skills/go-live/SKILL.md +90 -0
  292. package/dist/global-skills/harden/SKILL.md +101 -0
  293. package/dist/global-skills/instrument-feature-flags/SKILL.md +88 -0
  294. package/dist/global-skills/instrument-feature-flags/references/adding-feature-flag-code.md +3578 -0
  295. package/dist/global-skills/instrument-feature-flags/references/android.md +146 -0
  296. package/dist/global-skills/instrument-feature-flags/references/api.md +194 -0
  297. package/dist/global-skills/instrument-feature-flags/references/best-practices.md +231 -0
  298. package/dist/global-skills/instrument-feature-flags/references/django.md +263 -0
  299. package/dist/global-skills/instrument-feature-flags/references/dotnet.md +763 -0
  300. package/dist/global-skills/instrument-feature-flags/references/elixir.md +47 -0
  301. package/dist/global-skills/instrument-feature-flags/references/flask.md +131 -0
  302. package/dist/global-skills/instrument-feature-flags/references/flutter.md +212 -0
  303. package/dist/global-skills/instrument-feature-flags/references/go.md +208 -0
  304. package/dist/global-skills/instrument-feature-flags/references/ios.md +146 -0
  305. package/dist/global-skills/instrument-feature-flags/references/java.md +94 -0
  306. package/dist/global-skills/instrument-feature-flags/references/laravel.md +170 -0
  307. package/dist/global-skills/instrument-feature-flags/references/next-js.md +383 -0
  308. package/dist/global-skills/instrument-feature-flags/references/nodejs.md +216 -0
  309. package/dist/global-skills/instrument-feature-flags/references/php.md +187 -0
  310. package/dist/global-skills/instrument-feature-flags/references/python.md +191 -0
  311. package/dist/global-skills/instrument-feature-flags/references/react-native.md +166 -0
  312. package/dist/global-skills/instrument-feature-flags/references/react.md +302 -0
  313. package/dist/global-skills/instrument-feature-flags/references/ruby-on-rails.md +604 -0
  314. package/dist/global-skills/instrument-feature-flags/references/ruby.md +200 -0
  315. package/dist/global-skills/instrument-feature-flags/references/rust.md +222 -0
  316. package/dist/global-skills/instrument-feature-flags/references/usage.md +600 -0
  317. package/dist/global-skills/instrument-feature-flags/references/web.md +193 -0
  318. package/dist/global-skills/instrument-product-analytics/SKILL.md +139 -0
  319. package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-android.md +1639 -0
  320. package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-angular.md +944 -0
  321. package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-astro-hybrid.md +1001 -0
  322. package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-astro-ssr.md +1004 -0
  323. package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-astro-static.md +720 -0
  324. package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-astro-view-transitions.md +810 -0
  325. package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-django.md +1167 -0
  326. package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-expo.md +1412 -0
  327. package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-fastapi.md +1585 -0
  328. package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-flask.md +1208 -0
  329. package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-laravel.md +2267 -0
  330. package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-next-app-router.md +712 -0
  331. package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-next-pages-router.md +767 -0
  332. package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-nuxt-3-6.md +939 -0
  333. package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-nuxt-4.md +1078 -0
  334. package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-php.md +527 -0
  335. package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-python.md +481 -0
  336. package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-react-native.md +1823 -0
  337. package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-react-react-router-6.md +582 -0
  338. package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-react-react-router-7-data.md +892 -0
  339. package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-react-react-router-7-declarative.md +649 -0
  340. package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-react-react-router-7-framework.md +1218 -0
  341. package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-react-tanstack-router-code-based.md +793 -0
  342. package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-react-tanstack-router-file-based.md +780 -0
  343. package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-ruby-on-rails.md +1320 -0
  344. package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-ruby.md +452 -0
  345. package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-sveltekit.md +854 -0
  346. package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-swift.md +665 -0
  347. package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-tanstack-start.md +1199 -0
  348. package/dist/global-skills/instrument-product-analytics/references/EXAMPLE-vue-3.md +910 -0
  349. package/dist/global-skills/instrument-product-analytics/references/android.md +811 -0
  350. package/dist/global-skills/instrument-product-analytics/references/angular.md +376 -0
  351. package/dist/global-skills/instrument-product-analytics/references/astro.md +165 -0
  352. package/dist/global-skills/instrument-product-analytics/references/configuration.md +299 -0
  353. package/dist/global-skills/instrument-product-analytics/references/django.md +263 -0
  354. package/dist/global-skills/instrument-product-analytics/references/dotnet.md +763 -0
  355. package/dist/global-skills/instrument-product-analytics/references/elixir.md +414 -0
  356. package/dist/global-skills/instrument-product-analytics/references/flask.md +131 -0
  357. package/dist/global-skills/instrument-product-analytics/references/flutter.md +845 -0
  358. package/dist/global-skills/instrument-product-analytics/references/go.md +567 -0
  359. package/dist/global-skills/instrument-product-analytics/references/identify-users.md +272 -0
  360. package/dist/global-skills/instrument-product-analytics/references/ios.md +154 -0
  361. package/dist/global-skills/instrument-product-analytics/references/laravel.md +170 -0
  362. package/dist/global-skills/instrument-product-analytics/references/next-js.md +383 -0
  363. package/dist/global-skills/instrument-product-analytics/references/nuxt-js-3-6.md +244 -0
  364. package/dist/global-skills/instrument-product-analytics/references/nuxt-js.md +253 -0
  365. package/dist/global-skills/instrument-product-analytics/references/php.md +646 -0
  366. package/dist/global-skills/instrument-product-analytics/references/posthog-python.md +1675 -0
  367. package/dist/global-skills/instrument-product-analytics/references/python.md +898 -0
  368. package/dist/global-skills/instrument-product-analytics/references/react-native.md +1338 -0
  369. package/dist/global-skills/instrument-product-analytics/references/react-router-v6.md +376 -0
  370. package/dist/global-skills/instrument-product-analytics/references/react-router-v7-data-mode.md +364 -0
  371. package/dist/global-skills/instrument-product-analytics/references/react-router-v7-declarative-mode.md +376 -0
  372. package/dist/global-skills/instrument-product-analytics/references/react-router-v7-framework-mode.md +479 -0
  373. package/dist/global-skills/instrument-product-analytics/references/ruby-on-rails.md +604 -0
  374. package/dist/global-skills/instrument-product-analytics/references/ruby.md +759 -0
  375. package/dist/global-skills/instrument-product-analytics/references/svelte.md +234 -0
  376. package/dist/global-skills/instrument-product-analytics/references/tanstack-start.md +193 -0
  377. package/dist/global-skills/instrument-product-analytics/references/usage.md +600 -0
  378. package/dist/global-skills/instrument-product-analytics/references/vue-js.md +306 -0
  379. package/dist/global-skills/manifest.json +125 -0
  380. package/dist/global-skills/mongodb-atlas-stream-processing/SKILL.md +284 -0
  381. package/dist/global-skills/mongodb-atlas-stream-processing/references/connection-configs.md +298 -0
  382. package/dist/global-skills/mongodb-atlas-stream-processing/references/development-workflow.md +304 -0
  383. package/dist/global-skills/mongodb-atlas-stream-processing/references/mcp-troubleshooting.md +55 -0
  384. package/dist/global-skills/mongodb-atlas-stream-processing/references/output-diagnostics.md +150 -0
  385. package/dist/global-skills/mongodb-atlas-stream-processing/references/pipeline-patterns.md +457 -0
  386. package/dist/global-skills/mongodb-atlas-stream-processing/references/sizing-and-parallelism.md +178 -0
  387. package/dist/global-skills/mongodb-connection/SKILL.md +201 -0
  388. package/dist/global-skills/mongodb-connection/references/monitoring-guide.md +191 -0
  389. package/dist/global-skills/mongodb-mcp-setup/SKILL.md +324 -0
  390. package/dist/global-skills/mongodb-natural-language-querying/SKILL.md +195 -0
  391. package/dist/global-skills/mongodb-query-optimizer/SKILL.md +150 -0
  392. package/dist/global-skills/mongodb-query-optimizer/references/aggregation-optimization.md +210 -0
  393. package/dist/global-skills/mongodb-query-optimizer/references/antipattern-examples.md +74 -0
  394. package/dist/global-skills/mongodb-query-optimizer/references/core-indexing-principles.md +134 -0
  395. package/dist/global-skills/mongodb-query-optimizer/references/update-query-examples.md +39 -0
  396. package/dist/global-skills/mongodb-schema-design/SKILL.md +181 -0
  397. package/dist/global-skills/mongodb-schema-design/references/antipattern-excessive-lookups.md +84 -0
  398. package/dist/global-skills/mongodb-schema-design/references/antipattern-unnecessary-collections.md +91 -0
  399. package/dist/global-skills/mongodb-schema-design/references/antipattern-unnecessary-indexes.md +95 -0
  400. package/dist/global-skills/mongodb-schema-design/references/fundamental-document-model.md +91 -0
  401. package/dist/global-skills/mongodb-schema-design/references/fundamental-document-size.md +226 -0
  402. package/dist/global-skills/mongodb-schema-design/references/fundamental-embed-vs-reference.md +418 -0
  403. package/dist/global-skills/mongodb-schema-design/references/fundamental-schema-validation.md +131 -0
  404. package/dist/global-skills/mongodb-schema-design/references/pattern-approximation.md +80 -0
  405. package/dist/global-skills/mongodb-schema-design/references/pattern-archive.md +143 -0
  406. package/dist/global-skills/mongodb-schema-design/references/pattern-attribute.md +77 -0
  407. package/dist/global-skills/mongodb-schema-design/references/pattern-bucket.md +102 -0
  408. package/dist/global-skills/mongodb-schema-design/references/pattern-computed.md +162 -0
  409. package/dist/global-skills/mongodb-schema-design/references/pattern-document-versioning.md +166 -0
  410. package/dist/global-skills/mongodb-schema-design/references/pattern-extended-reference.md +72 -0
  411. package/dist/global-skills/mongodb-schema-design/references/pattern-outlier.md +159 -0
  412. package/dist/global-skills/mongodb-schema-design/references/pattern-polymorphic.md +167 -0
  413. package/dist/global-skills/mongodb-schema-design/references/pattern-schema-versioning.md +273 -0
  414. package/dist/global-skills/mongodb-schema-design/references/pattern-time-series-collections.md +190 -0
  415. package/dist/global-skills/mongodb-schema-design/references/source-query-stats.md +123 -0
  416. package/dist/global-skills/mongodb-schema-design/references/source-slow-query-logs.md +63 -0
  417. package/dist/global-skills/mongodb-search-and-ai/SKILL.md +142 -0
  418. package/dist/global-skills/mongodb-search-and-ai/references/hybrid-search.md +697 -0
  419. package/dist/global-skills/mongodb-search-and-ai/references/lexical-search-indexing.md +584 -0
  420. package/dist/global-skills/mongodb-search-and-ai/references/lexical-search-querying.md +636 -0
  421. package/dist/global-skills/mongodb-search-and-ai/references/vector-search.md +746 -0
  422. package/dist/global-skills/native-data-fetching/SKILL.md +505 -0
  423. package/dist/global-skills/native-data-fetching/agents/openai.yaml +4 -0
  424. package/dist/global-skills/native-data-fetching/references/expo-router-loaders.md +341 -0
  425. package/dist/global-skills/neon/SKILL.md +343 -0
  426. package/dist/global-skills/neon-ai-gateway/SKILL.md +236 -0
  427. package/dist/global-skills/neon-functions/SKILL.md +490 -0
  428. package/dist/global-skills/neon-functions/references/ai-sdk.md +139 -0
  429. package/dist/global-skills/neon-functions/references/hono-websockets.md +145 -0
  430. package/dist/global-skills/neon-functions/references/mastra-studio.md +127 -0
  431. package/dist/global-skills/neon-functions/references/mcp.md +137 -0
  432. package/dist/global-skills/neon-functions/references/sentry.md +131 -0
  433. package/dist/global-skills/neon-functions/references/sse.md +143 -0
  434. package/dist/global-skills/neon-object-storage/SKILL.md +197 -0
  435. package/dist/global-skills/neon-postgres/SKILL.md +376 -0
  436. package/dist/global-skills/neon-postgres-branches/SKILL.md +281 -0
  437. package/dist/global-skills/neon-postgres-egress-optimizer/SKILL.md +247 -0
  438. package/dist/global-skills/onboarding/SKILL.md +101 -0
  439. package/dist/global-skills/plan-my-idea/SKILL.md +67 -0
  440. package/dist/global-skills/publish-app/SKILL.md +72 -0
  441. package/dist/global-skills/publish-extension/SKILL.md +47 -0
  442. package/dist/global-skills/resend/SKILL.md +294 -0
  443. package/dist/global-skills/resend/references/api-keys.md +98 -0
  444. package/dist/global-skills/resend/references/automations.md +228 -0
  445. package/dist/global-skills/resend/references/broadcasts.md +125 -0
  446. package/dist/global-skills/resend/references/contact-properties.md +111 -0
  447. package/dist/global-skills/resend/references/contacts.md +174 -0
  448. package/dist/global-skills/resend/references/domains.md +179 -0
  449. package/dist/global-skills/resend/references/events.md +119 -0
  450. package/dist/global-skills/resend/references/fetch-all-templates.mjs +37 -0
  451. package/dist/global-skills/resend/references/installation.md +142 -0
  452. package/dist/global-skills/resend/references/logs.md +161 -0
  453. package/dist/global-skills/resend/references/receiving.md +287 -0
  454. package/dist/global-skills/resend/references/segments.md +77 -0
  455. package/dist/global-skills/resend/references/sending/batch-email-examples.md +807 -0
  456. package/dist/global-skills/resend/references/sending/best-practices.md +453 -0
  457. package/dist/global-skills/resend/references/sending/email-management.md +135 -0
  458. package/dist/global-skills/resend/references/sending/overview.md +209 -0
  459. package/dist/global-skills/resend/references/sending/single-email-examples.md +470 -0
  460. package/dist/global-skills/resend/references/templates.md +202 -0
  461. package/dist/global-skills/resend/references/topics.md +104 -0
  462. package/dist/global-skills/resend/references/webhooks.md +317 -0
  463. package/dist/global-skills/reset-password/SKILL.md +59 -0
  464. package/dist/global-skills/save-data/SKILL.md +70 -0
  465. package/dist/global-skills/sentry-sdk-setup/SKILL.md +116 -0
  466. package/dist/global-skills/sentry-workflow/SKILL.md +32 -0
  467. package/dist/global-skills/setup-email/SKILL.md +69 -0
  468. package/dist/global-skills/setup-payments/SKILL.md +82 -0
  469. package/dist/global-skills/setup-sms/SKILL.md +51 -0
  470. package/dist/global-skills/sign-in-with-email-link/SKILL.md +53 -0
  471. package/dist/global-skills/sign-in-with-google/SKILL.md +68 -0
  472. package/dist/global-skills/sign-in-with-phone/SKILL.md +53 -0
  473. package/dist/global-skills/stripe-best-practices/SKILL.md +48 -0
  474. package/dist/global-skills/stripe-best-practices/references/billing.md +58 -0
  475. package/dist/global-skills/stripe-best-practices/references/connect.md +173 -0
  476. package/dist/global-skills/stripe-best-practices/references/payments.md +79 -0
  477. package/dist/global-skills/stripe-best-practices/references/security.md +109 -0
  478. package/dist/global-skills/stripe-best-practices/references/tax.md +37 -0
  479. package/dist/global-skills/stripe-best-practices/references/treasury.md +16 -0
  480. package/dist/global-skills/supabase/CHANGELOG.md +53 -0
  481. package/dist/global-skills/supabase/SKILL.md +145 -0
  482. package/dist/global-skills/supabase/assets/feedback-issue-template.md +17 -0
  483. package/dist/global-skills/supabase/references/skill-feedback.md +17 -0
  484. package/dist/global-skills/supabase-postgres-best-practices/CHANGELOG.md +43 -0
  485. package/dist/global-skills/supabase-postgres-best-practices/SKILL.md +64 -0
  486. package/dist/global-skills/supabase-postgres-best-practices/references/_contributing.md +170 -0
  487. package/dist/global-skills/supabase-postgres-best-practices/references/_sections.md +39 -0
  488. package/dist/global-skills/supabase-postgres-best-practices/references/_template.md +34 -0
  489. package/dist/global-skills/supabase-postgres-best-practices/references/advanced-full-text-search.md +55 -0
  490. package/dist/global-skills/supabase-postgres-best-practices/references/advanced-jsonb-indexing.md +49 -0
  491. package/dist/global-skills/supabase-postgres-best-practices/references/conn-idle-timeout.md +46 -0
  492. package/dist/global-skills/supabase-postgres-best-practices/references/conn-limits.md +44 -0
  493. package/dist/global-skills/supabase-postgres-best-practices/references/conn-pooling.md +41 -0
  494. package/dist/global-skills/supabase-postgres-best-practices/references/conn-prepared-statements.md +46 -0
  495. package/dist/global-skills/supabase-postgres-best-practices/references/data-batch-inserts.md +54 -0
  496. package/dist/global-skills/supabase-postgres-best-practices/references/data-n-plus-one.md +53 -0
  497. package/dist/global-skills/supabase-postgres-best-practices/references/data-pagination.md +50 -0
  498. package/dist/global-skills/supabase-postgres-best-practices/references/data-upsert.md +50 -0
  499. package/dist/global-skills/supabase-postgres-best-practices/references/lock-advisory.md +56 -0
  500. package/dist/global-skills/supabase-postgres-best-practices/references/lock-deadlock-prevention.md +68 -0
  501. package/dist/global-skills/supabase-postgres-best-practices/references/lock-short-transactions.md +50 -0
  502. package/dist/global-skills/supabase-postgres-best-practices/references/lock-skip-locked.md +54 -0
  503. package/dist/global-skills/supabase-postgres-best-practices/references/monitor-explain-analyze.md +45 -0
  504. package/dist/global-skills/supabase-postgres-best-practices/references/monitor-pg-stat-statements.md +55 -0
  505. package/dist/global-skills/supabase-postgres-best-practices/references/monitor-vacuum-analyze.md +55 -0
  506. package/dist/global-skills/supabase-postgres-best-practices/references/query-composite-indexes.md +44 -0
  507. package/dist/global-skills/supabase-postgres-best-practices/references/query-covering-indexes.md +40 -0
  508. package/dist/global-skills/supabase-postgres-best-practices/references/query-index-types.md +48 -0
  509. package/dist/global-skills/supabase-postgres-best-practices/references/query-missing-indexes.md +43 -0
  510. package/dist/global-skills/supabase-postgres-best-practices/references/query-partial-indexes.md +45 -0
  511. package/dist/global-skills/supabase-postgres-best-practices/references/schema-constraints.md +80 -0
  512. package/dist/global-skills/supabase-postgres-best-practices/references/schema-data-types.md +46 -0
  513. package/dist/global-skills/supabase-postgres-best-practices/references/schema-foreign-key-indexes.md +59 -0
  514. package/dist/global-skills/supabase-postgres-best-practices/references/schema-lowercase-identifiers.md +55 -0
  515. package/dist/global-skills/supabase-postgres-best-practices/references/schema-partitioning.md +55 -0
  516. package/dist/global-skills/supabase-postgres-best-practices/references/schema-primary-keys.md +61 -0
  517. package/dist/global-skills/supabase-postgres-best-practices/references/security-privileges.md +54 -0
  518. package/dist/global-skills/supabase-postgres-best-practices/references/security-rls-basics.md +50 -0
  519. package/dist/global-skills/supabase-postgres-best-practices/references/security-rls-performance.md +63 -0
  520. package/dist/global-skills/track-errors/SKILL.md +67 -0
  521. package/dist/global-skills/update-kit/SKILL.md +75 -0
  522. package/dist/global-skills/upgrading-expo/SKILL.md +134 -0
  523. package/dist/global-skills/upgrading-expo/agents/openai.yaml +4 -0
  524. package/dist/global-skills/upgrading-expo/references/expo-av-to-audio.md +132 -0
  525. package/dist/global-skills/upgrading-expo/references/expo-av-to-video.md +160 -0
  526. package/dist/global-skills/upgrading-expo/references/native-tabs.md +124 -0
  527. package/dist/global-skills/upgrading-expo/references/new-architecture.md +79 -0
  528. package/dist/global-skills/upgrading-expo/references/react-19.md +79 -0
  529. package/dist/global-skills/upgrading-expo/references/react-compiler.md +59 -0
  530. package/dist/global-skills/upgrading-expo/references/react-navigation-to-expo-router.md +61 -0
  531. package/dist/global-skills/use-dom/SKILL.md +417 -0
  532. package/dist/global-skills/use-dom/agents/openai.yaml +4 -0
  533. package/dist/global-skills/use-kit-mcp/SKILL.md +100 -0
  534. package/dist/global-skills/use-railway/SKILL.md +357 -0
  535. package/dist/global-skills/use-railway/references/analyze-db-mongo.md +84 -0
  536. package/dist/global-skills/use-railway/references/analyze-db-mysql.md +254 -0
  537. package/dist/global-skills/use-railway/references/analyze-db-postgres.md +479 -0
  538. package/dist/global-skills/use-railway/references/analyze-db-redis.md +208 -0
  539. package/dist/global-skills/use-railway/references/analyze-db.md +344 -0
  540. package/dist/global-skills/use-railway/references/configure.md +359 -0
  541. package/dist/global-skills/use-railway/references/deploy.md +225 -0
  542. package/dist/global-skills/use-railway/references/feature-flags.md +89 -0
  543. package/dist/global-skills/use-railway/references/iac.md +108 -0
  544. package/dist/global-skills/use-railway/references/operate.md +273 -0
  545. package/dist/global-skills/use-railway/references/request.md +262 -0
  546. package/dist/global-skills/use-railway/references/sandbox.md +167 -0
  547. package/dist/global-skills/use-railway/references/setup.md +364 -0
  548. package/dist/global-skills/use-railway/scripts/analyze-mongo.py +1549 -0
  549. package/dist/global-skills/use-railway/scripts/analyze-mysql.py +1195 -0
  550. package/dist/global-skills/use-railway/scripts/analyze-postgres.py +3058 -0
  551. package/dist/global-skills/use-railway/scripts/analyze-redis.py +1090 -0
  552. package/dist/global-skills/use-railway/scripts/dal.py +671 -0
  553. package/dist/global-skills/use-railway/scripts/enable-pg-stats.py +170 -0
  554. package/dist/global-skills/use-railway/scripts/pg-extensions.py +370 -0
  555. package/dist/global-skills/use-railway/scripts/railway-api.sh +52 -0
  556. package/dist/global-skills/vercel-composition-patterns/AGENTS.md +946 -0
  557. package/dist/global-skills/vercel-composition-patterns/README.md +60 -0
  558. package/dist/global-skills/vercel-composition-patterns/SKILL.md +89 -0
  559. package/dist/global-skills/vercel-composition-patterns/metadata.json +11 -0
  560. package/dist/global-skills/vercel-composition-patterns/rules/_sections.md +29 -0
  561. package/dist/global-skills/vercel-composition-patterns/rules/_template.md +24 -0
  562. package/dist/global-skills/vercel-composition-patterns/rules/architecture-avoid-boolean-props.md +100 -0
  563. package/dist/global-skills/vercel-composition-patterns/rules/architecture-compound-components.md +112 -0
  564. package/dist/global-skills/vercel-composition-patterns/rules/patterns-children-over-render-props.md +87 -0
  565. package/dist/global-skills/vercel-composition-patterns/rules/patterns-explicit-variants.md +100 -0
  566. package/dist/global-skills/vercel-composition-patterns/rules/react19-no-forwardref.md +42 -0
  567. package/dist/global-skills/vercel-composition-patterns/rules/state-context-interface.md +191 -0
  568. package/dist/global-skills/vercel-composition-patterns/rules/state-decouple-implementation.md +113 -0
  569. package/dist/global-skills/vercel-composition-patterns/rules/state-lift-state.md +125 -0
  570. package/dist/global-skills/vercel-react-best-practices/AGENTS.md +3810 -0
  571. package/dist/global-skills/vercel-react-best-practices/README.md +123 -0
  572. package/dist/global-skills/vercel-react-best-practices/SKILL.md +149 -0
  573. package/dist/global-skills/vercel-react-best-practices/metadata.json +15 -0
  574. package/dist/global-skills/vercel-react-best-practices/rules/_sections.md +46 -0
  575. package/dist/global-skills/vercel-react-best-practices/rules/_template.md +28 -0
  576. package/dist/global-skills/vercel-react-best-practices/rules/advanced-effect-event-deps.md +56 -0
  577. package/dist/global-skills/vercel-react-best-practices/rules/advanced-event-handler-refs.md +55 -0
  578. package/dist/global-skills/vercel-react-best-practices/rules/advanced-init-once.md +42 -0
  579. package/dist/global-skills/vercel-react-best-practices/rules/advanced-use-latest.md +39 -0
  580. package/dist/global-skills/vercel-react-best-practices/rules/async-api-routes.md +38 -0
  581. package/dist/global-skills/vercel-react-best-practices/rules/async-cheap-condition-before-await.md +37 -0
  582. package/dist/global-skills/vercel-react-best-practices/rules/async-defer-await.md +82 -0
  583. package/dist/global-skills/vercel-react-best-practices/rules/async-dependencies.md +51 -0
  584. package/dist/global-skills/vercel-react-best-practices/rules/async-parallel.md +28 -0
  585. package/dist/global-skills/vercel-react-best-practices/rules/async-suspense-boundaries.md +99 -0
  586. package/dist/global-skills/vercel-react-best-practices/rules/bundle-analyzable-paths.md +63 -0
  587. package/dist/global-skills/vercel-react-best-practices/rules/bundle-barrel-imports.md +60 -0
  588. package/dist/global-skills/vercel-react-best-practices/rules/bundle-conditional.md +31 -0
  589. package/dist/global-skills/vercel-react-best-practices/rules/bundle-defer-third-party.md +49 -0
  590. package/dist/global-skills/vercel-react-best-practices/rules/bundle-dynamic-imports.md +35 -0
  591. package/dist/global-skills/vercel-react-best-practices/rules/bundle-preload.md +50 -0
  592. package/dist/global-skills/vercel-react-best-practices/rules/client-event-listeners.md +74 -0
  593. package/dist/global-skills/vercel-react-best-practices/rules/client-localstorage-schema.md +71 -0
  594. package/dist/global-skills/vercel-react-best-practices/rules/client-passive-event-listeners.md +48 -0
  595. package/dist/global-skills/vercel-react-best-practices/rules/client-swr-dedup.md +56 -0
  596. package/dist/global-skills/vercel-react-best-practices/rules/js-batch-dom-css.md +107 -0
  597. package/dist/global-skills/vercel-react-best-practices/rules/js-cache-function-results.md +80 -0
  598. package/dist/global-skills/vercel-react-best-practices/rules/js-cache-property-access.md +28 -0
  599. package/dist/global-skills/vercel-react-best-practices/rules/js-cache-storage.md +70 -0
  600. package/dist/global-skills/vercel-react-best-practices/rules/js-combine-iterations.md +32 -0
  601. package/dist/global-skills/vercel-react-best-practices/rules/js-early-exit.md +50 -0
  602. package/dist/global-skills/vercel-react-best-practices/rules/js-flatmap-filter.md +60 -0
  603. package/dist/global-skills/vercel-react-best-practices/rules/js-hoist-regexp.md +45 -0
  604. package/dist/global-skills/vercel-react-best-practices/rules/js-index-maps.md +37 -0
  605. package/dist/global-skills/vercel-react-best-practices/rules/js-length-check-first.md +49 -0
  606. package/dist/global-skills/vercel-react-best-practices/rules/js-min-max-loop.md +82 -0
  607. package/dist/global-skills/vercel-react-best-practices/rules/js-request-idle-callback.md +105 -0
  608. package/dist/global-skills/vercel-react-best-practices/rules/js-set-map-lookups.md +24 -0
  609. package/dist/global-skills/vercel-react-best-practices/rules/js-tosorted-immutable.md +57 -0
  610. package/dist/global-skills/vercel-react-best-practices/rules/rendering-activity.md +26 -0
  611. package/dist/global-skills/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
  612. package/dist/global-skills/vercel-react-best-practices/rules/rendering-conditional-render.md +40 -0
  613. package/dist/global-skills/vercel-react-best-practices/rules/rendering-content-visibility.md +38 -0
  614. package/dist/global-skills/vercel-react-best-practices/rules/rendering-hoist-jsx.md +46 -0
  615. package/dist/global-skills/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
  616. package/dist/global-skills/vercel-react-best-practices/rules/rendering-hydration-suppress-warning.md +30 -0
  617. package/dist/global-skills/vercel-react-best-practices/rules/rendering-resource-hints.md +85 -0
  618. package/dist/global-skills/vercel-react-best-practices/rules/rendering-script-defer-async.md +68 -0
  619. package/dist/global-skills/vercel-react-best-practices/rules/rendering-svg-precision.md +28 -0
  620. package/dist/global-skills/vercel-react-best-practices/rules/rendering-usetransition-loading.md +75 -0
  621. package/dist/global-skills/vercel-react-best-practices/rules/rerender-defer-reads.md +39 -0
  622. package/dist/global-skills/vercel-react-best-practices/rules/rerender-dependencies.md +45 -0
  623. package/dist/global-skills/vercel-react-best-practices/rules/rerender-derived-state-no-effect.md +40 -0
  624. package/dist/global-skills/vercel-react-best-practices/rules/rerender-derived-state.md +29 -0
  625. package/dist/global-skills/vercel-react-best-practices/rules/rerender-functional-setstate.md +74 -0
  626. package/dist/global-skills/vercel-react-best-practices/rules/rerender-lazy-state-init.md +58 -0
  627. package/dist/global-skills/vercel-react-best-practices/rules/rerender-memo-with-default-value.md +38 -0
  628. package/dist/global-skills/vercel-react-best-practices/rules/rerender-memo.md +44 -0
  629. package/dist/global-skills/vercel-react-best-practices/rules/rerender-move-effect-to-event.md +45 -0
  630. package/dist/global-skills/vercel-react-best-practices/rules/rerender-no-inline-components.md +82 -0
  631. package/dist/global-skills/vercel-react-best-practices/rules/rerender-simple-expression-in-memo.md +35 -0
  632. package/dist/global-skills/vercel-react-best-practices/rules/rerender-split-combined-hooks.md +64 -0
  633. package/dist/global-skills/vercel-react-best-practices/rules/rerender-transitions.md +40 -0
  634. package/dist/global-skills/vercel-react-best-practices/rules/rerender-use-deferred-value.md +59 -0
  635. package/dist/global-skills/vercel-react-best-practices/rules/rerender-use-ref-transient-values.md +73 -0
  636. package/dist/global-skills/vercel-react-best-practices/rules/server-after-nonblocking.md +73 -0
  637. package/dist/global-skills/vercel-react-best-practices/rules/server-auth-actions.md +96 -0
  638. package/dist/global-skills/vercel-react-best-practices/rules/server-cache-lru.md +41 -0
  639. package/dist/global-skills/vercel-react-best-practices/rules/server-cache-react.md +76 -0
  640. package/dist/global-skills/vercel-react-best-practices/rules/server-dedup-props.md +65 -0
  641. package/dist/global-skills/vercel-react-best-practices/rules/server-hoist-static-io.md +149 -0
  642. package/dist/global-skills/vercel-react-best-practices/rules/server-no-shared-module-state.md +50 -0
  643. package/dist/global-skills/vercel-react-best-practices/rules/server-parallel-fetching.md +83 -0
  644. package/dist/global-skills/vercel-react-best-practices/rules/server-parallel-nested-fetching.md +34 -0
  645. package/dist/global-skills/vercel-react-best-practices/rules/server-serialization.md +38 -0
  646. package/dist/global-skills/web-to-native/SKILL.md +83 -0
  647. package/dist/global-skills/web-to-native/references/false-friends.md +119 -0
  648. package/dist/global-skills/web-to-native/references/native-patterns.md +39 -0
  649. package/dist/global-skills/web-to-native/references/run-as-goal.md +48 -0
  650. package/dist/global-skills/web-to-native/references/verify-on-device.md +45 -0
  651. package/dist/global-skills/wire-auth/SKILL.md +28 -0
  652. package/dist/global-skills/wire-database/SKILL.md +28 -0
  653. package/dist/global-skills/wire-email/SKILL.md +27 -0
  654. package/dist/global-skills/wire-payments/SKILL.md +27 -0
  655. package/dist/global-skills/workers-best-practices/SKILL.md +127 -0
  656. package/dist/global-skills/workers-best-practices/references/review.md +174 -0
  657. package/dist/global-skills/workers-best-practices/references/rules.md +463 -0
  658. package/dist/global-skills/wrangler/SKILL.md +922 -0
  659. package/dist/global-skills/xcode-project-setup/SKILL.md +140 -0
  660. package/dist/global-skills/xcode-project-setup/scripts/xcode_spm_setup/Package.resolved +41 -0
  661. package/dist/global-skills/xcode-project-setup/scripts/xcode_spm_setup/Package.swift +17 -0
  662. package/dist/global-skills/xcode-project-setup/scripts/xcode_spm_setup/Sources/main.swift +232 -0
  663. package/package.json +21 -20
  664. package/LICENSE.md +0 -47
  665. 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((resolve14) => stream.on("end", () => resolve14()));
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, stat) {
3647
- if (err || !helper.usePgPass(stat, file)) {
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((resolve14, reject) => {
3849
+ return new this._Promise((resolve13, reject) => {
3850
3850
  this._connect((error) => {
3851
3851
  if (error) {
3852
3852
  reject(error);
3853
3853
  } else {
3854
- resolve14(this);
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((resolve14, reject) => {
4202
- query.callback = (err, res) => err ? reject(err) : resolve14(res);
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((resolve14) => {
4287
- this.connection.once("end", resolve14);
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(resolve14, reject) {
4337
- res = resolve14;
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((resolve14) => resolve14(f()));
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(resolve14, reject) {
4792
- this._once("end", resolve14);
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 cp6 = this.connectionParameters = new ConnectionParameters(config);
4903
- if (config.nativeConnectionString) cp6.nativeConnectionString = config.nativeConnectionString;
4904
- this.user = cp6.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: cp6.password
4909
+ value: cp7.password
4910
4910
  });
4911
- this.database = cp6.database;
4912
- this.host = cp6.host;
4913
- this.port = cp6.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((resolve14, reject) => {
4970
+ return new this._Promise((resolve13, reject) => {
4971
4971
  this._connect((error) => {
4972
4972
  if (error) {
4973
4973
  reject(error);
4974
4974
  } else {
4975
- resolve14(this);
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((resolve14, reject) => {
5000
- resolveOut = resolve14;
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(resolve14, reject) {
5064
- cb = (err) => err ? reject(err) : resolve14();
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 { resolve as resolve13 } from "path";
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 readFile18 } from "fs/promises";
5245
- import { dirname as dirname14, join as join46 } from "path";
5246
- import process25 from "process";
5247
- import { fileURLToPath as fileURLToPath7 } from "url";
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 + install/check the tools your app needs
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
- vybekiit create app --web [directory]
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
- --web Next.js + agent layer
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 --web|--mobile|--extension [directory]
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, bin = "agent") => {
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 stat = await lstat(linkPath);
8724
- if (stat.isSymbolicLink()) {
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 stat = await lstat(linkPath);
8757
- if (stat.isSymbolicLink()) {
8794
+ const stat3 = await lstat(linkPath);
8795
+ if (stat3.isSymbolicLink()) {
8758
8796
  await rm(linkPath);
8759
- } else if (stat.isDirectory()) {
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 (exists) => {
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
- exists(join8(root, "packages")),
9618
- exists(join8(root, "templates"))
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, `${JSON.stringify(config, null, 2)}
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
- " vybekiit create app --web [directory]",
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 = (args) => {
10037
- const surfaces = [];
10038
- const positionals = [];
10039
- for (const arg of args) {
10040
- if (arg === "--web" || arg === "--mobile" || arg === "--extension") {
10041
- surfaces.push(arg.slice(2));
10042
- continue;
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: ${arg}. Use --web, --mobile, or --extension.`
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 (surfaces.length === 0) {
10085
+ if (selectedSurfaces.length === 0) {
10053
10086
  return { ok: false, error: "missing-surface" };
10054
10087
  }
10055
- if (surfaces.length > 1) {
10056
- return { ok: false, error: "Pick one surface for now (--web, --mobile, or --extension)." };
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 surface = surfaces[0];
10059
- if (surface === void 0 || !isCreateSurface(surface)) {
10094
+ const [selectedSurface] = selectedSurfaces;
10095
+ if (!selectedSurface) {
10060
10096
  return { ok: false, error: "missing-surface" };
10061
10097
  }
10062
- const destPath = positionals[0] !== void 0 && positionals[0] !== "" ? positionals[0] : `./${surface}`;
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: isCancel4, outro, select: select3 } = await import("@clack/prompts");
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 (isCancel4(picked) || typeof picked !== "string" || !isCreateSurface(picked)) {
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 = surfaceToTemplate(surface);
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: isCancel4, select: select3, text: text2, cancel: cancel4 } = await import("@clack/prompts");
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 (isCancel4(picked) || typeof picked !== "string" || !isTemplateName(picked)) {
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 (isCancel4(dest) || typeof dest !== "string") {
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 confirm({
10504
+ const confirmed = await confirm2({
10473
10505
  message: `Drop "${picked}" -> ${resolve5(destPath)}${mode === "new" ? "" : ` (${mode})`}?`
10474
10506
  });
10475
- if (isCancel4(confirmed) || !confirmed) {
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: execFile7 } = await import("child_process");
11662
+ const { execFile: execFile8 } = await import("child_process");
11631
11663
  const { promisify: promisify7 } = await import("util");
11632
- const execFileAsync7 = promisify7(execFile7);
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: typeof err.stderr === "string" ? err.stderr : typeof err.message === "string" ? err.message : "railway failed"
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((resolve14) => {
11704
- setTimeout(resolve14, ms);
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* verifyProvisionedData(provisioned).pipe(Effect8.either);
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* verifyProvisionedData(existing);
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: execFile7 } = await import("child_process");
14762
+ const { execFile: execFile8 } = await import("child_process");
14723
14763
  const { promisify: promisify7 } = await import("util");
14724
- const execFileAsync7 = promisify7(execFile7);
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: typeof err.stderr === "string" ? err.stderr : typeof err.message === "string" ? err.message : "wrangler failed"
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((resolve14) => {
14802
- setTimeout(resolve14, delayMs);
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((resolve14) => {
15221
- setTimeout(resolve14, 3e3);
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((resolve14) => {
15564
- setTimeout(resolve14, 2e3);
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: execFile7 } = await import("child_process");
15690
+ const { execFile: execFile8 } = await import("child_process");
15645
15691
  const { promisify: promisify7 } = await import("util");
15646
- const execFileAsync7 = promisify7(execFile7);
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: typeof err.stderr === "string" ? err.stderr : typeof err.message === "string" ? err.message : "railway failed"
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: execFile7 } = await import("child_process");
16071
+ const { execFile: execFile8 } = await import("child_process");
16020
16072
  const { promisify: promisify7 } = await import("util");
16021
- const execFileAsync7 = promisify7(execFile7);
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: typeof err.stderr === "string" ? err.stderr : typeof err.message === "string" ? err.message : "vercel failed"
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((resolve14) => {
17153
+ return new Promise((resolve13) => {
17096
17154
  child.on("close", (code) => {
17097
17155
  const exitCode = code === null ? 0 : code;
17098
- resolve14(exitCode);
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
- "Note: `vybekiit new` is deprecated. Use `vybekiit create app --web|--mobile|--extension`.\n"
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 --web, --mobile, or --extension (spa/backend are not create-app surfaces).
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 exists = await pathExists6(file.absolutePath);
17710
- if (exists && !options.force) {
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 process21 from "process";
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 process18 from "process";
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, pathExists8) => {
18640
+ var findMcpCatalogPath = (cwd, pathExists9) => {
18582
18641
  for (const relative4 of CATALOG_RELATIVE_PATHS) {
18583
18642
  const absolute = join34(cwd, relative4);
18584
- if (pathExists8(absolute)) {
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/codexConfig.ts
19181
- import { access as access13, mkdir as mkdir9, readFile as readFile15, writeFile as writeFile10 } from "fs/promises";
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 join37(configuredHome.trim(), "config.toml");
19323
+ return join39(configuredHome.trim(), "config.toml");
19193
19324
  }
19194
- const home = join37(homedir2(), ".codex");
19195
- return join37(home, "config.toml");
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(join37(path, ".."), { recursive: true });
19352
+ await mkdir9(join39(path, ".."), { recursive: true });
19222
19353
  let previous = "";
19223
19354
  try {
19224
- previous = await readFile15(path, "utf8");
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 join38 } from "path";
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 = join38(packagesRoot, entry);
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(join38(abs, "package.json"))) {
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 = join38(abs, child);
19425
+ const childAbs = join40(abs, child);
19295
19426
  try {
19296
- if (statSync2(childAbs).isDirectory() && existsSync9(join38(childAbs, "package.json"))) {
19297
- rels.push(join38(entry, child));
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 = join38(cwd, "packages");
19437
+ const packagesRoot = join40(cwd, "packages");
19307
19438
  const missing = [];
19308
19439
  for (const relDir of listPackageRelDirs(packagesRoot)) {
19309
- const packageDir = join38(packagesRoot, relDir);
19310
- const pkg = readPackageJsonSafe(join38(packageDir, "package.json"));
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(join38(packageDir, "dist"))) {
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 = join38(cwd, "packages");
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(join38(cwd, rel)));
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 join39 } from "path";
19620
+ import { join as join41 } from "path";
19490
19621
  var createDefaultPerfReadinessDeps = (cwd) => ({
19491
- exists: (relativePath) => existsSync10(join39(cwd, relativePath)),
19622
+ exists: (relativePath) => existsSync10(join41(cwd, relativePath)),
19492
19623
  readUtf8: (relativePath) => {
19493
- const absolute = join39(cwd, relativePath);
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 join40 } from "path";
19639
- import process17 from "process";
19769
+ import { join as join42 } from "path";
19770
+ import process18 from "process";
19640
19771
  var readManifest = (cwd) => {
19641
- const path = join40(cwd, "platform-skills.manifest.json");
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 = join40(cwd, "skills-lock.json");
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(join40(cwd, ".agents", "skills", name, "SKILL.md"));
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(join40(cwd, "platform-skills.manifest.json"))) {
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 = join40(process17.cwd(), "skills-lock.json");
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 join41 } from "path";
19880
+ import { join as join43 } from "path";
19750
19881
  var GITIGNORE_ENV_LINE_PATTERN = /^\.env/m;
19751
19882
  var gitignoreCoversEnv = (cwd) => {
19752
- const path = join41(cwd, ".gitignore");
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 = join41(cwd, ".cursorignore");
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 join42 } from "path";
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 = join42(cwd, ".wxt", "wxt.d.ts");
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 = join42(cwd, "ios", "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: join42(cwd, "ios"),
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 join43 } from "path";
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(join43(cwd, "package.json"), "utf8"));
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 exists = wranglerOk(["r2", "bucket", "list"]);
20004
- if (!exists) {
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(process18.env.CURSOR_TRACE_ID || process18.env.CURSOR_SESSION_ID);
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(process18.platform);
20744
+ const platform = toPlatform(process19.platform);
20614
20745
  if (platform === null) {
20615
- log.error(`[doctor] This operating system (${process18.platform}) isn't supported yet.`);
20746
+ log.error(`[doctor] This operating system (${process19.platform}) isn't supported yet.`);
20616
20747
  return 1;
20617
20748
  }
20618
- const cwd = process18.cwd();
20749
+ const cwd = process19.cwd();
20619
20750
  const surface = inferProjectSurfaceSync(cwd);
20620
- const env = mergeEnv(process18.env, loadEnvFile2(cwd));
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/ui/welcomeBanner.ts
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 process19 from "process";
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 = process19.env, isTTY = Boolean(process19.stdout.isTTY)) => {
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((resolve14) => {
20704
- setTimeout(resolve14, ms);
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) => process20.stdout.write(text2) : options.write;
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(process20.stdout.isTTY) && frames > 0;
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
- process21.stdout.write("\n");
21359
+ process24.stdout.write("\n");
20809
21360
  for (const line of formatSetupNextStep({
20810
21361
  doctorExitCode: code,
20811
21362
  gateReason: access15.reason
20812
21363
  })) {
20813
- process21.stdout.write(`${line}
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 execFile6 } from "child_process";
20821
- import { access as access14, cp as cp5, readFile as readFile16, writeFile as writeFile11 } from "fs/promises";
20822
- import { join as join44 } from "path";
20823
- import process22 from "process";
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(execFile6);
20826
- var defaultDeps = {
21376
+ var execFileAsync6 = promisify6(execFile7);
21377
+ var defaultDeps3 = {
20827
21378
  resolve: resolveTemplatesSource,
20828
- copy: cp5,
21379
+ copy: cp6,
20829
21380
  runSkillsUpdate: async (cwd) => {
20830
- await execFileAsync6("npx", ["skills", "update", "-y"], { cwd, env: process22.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, pathExists8) => {
21401
+ var listMirrorAgentPaths = async (mirrorRoot, pathExists9) => {
20851
21402
  const entries = await Promise.all(
20852
21403
  AGENT_LAYER_PATHS.map(async (path) => {
20853
- if (await pathExists8(join44(mirrorRoot, path))) {
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: pathExists8 } = options;
20863
- const src = join44(mirrorRoot, path);
20864
- const dest = join44(cwd, path);
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: readdir8, stat, mkdir: mkdir10 } = await import("fs/promises");
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 = join44(mirrorRoot, relNorm);
20876
- const destPath = join44(cwd, relNorm);
20877
- if (!await pathExists8(srcPath)) {
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 stat(srcPath);
21431
+ const info = await stat3(srcPath);
20881
21432
  if (info.isDirectory()) {
20882
- await mkdir10(destPath, { recursive: true });
20883
- const entries = await readdir8(srcPath);
20884
- await Promise.all(entries.map((entry) => walk(join44(relNorm, entry))));
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 = join44(cwd, ".vybekiit/agent/goal-index.md");
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 readFile16(goalIndexPath, "utf8");
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 = join44(cwd, ".vybekiit/agent/goal-index.md");
20919
- const synced = await readFile16(goalIndexPath, "utf8");
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 writeFile11(goalIndexPath, merged, "utf8");
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 writeFile11(join44(cwd, file), content, "utf8");
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(join44(cwd, "skills-lock.json"))) {
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 = process22.cwd(), deps = defaultDeps) => {
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 = join44(source, template);
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 process23 from "process";
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
- process23.stdout.write(`${line}
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 process24 from "process";
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(process24.platform);
21615
+ const platform = toPlatform2(process27.platform);
21065
21616
  if (!platform) {
21066
- log.error(`[doctor] This operating system (${process24.platform}) isn't supported yet.`);
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 readFile17 } from "fs/promises";
21111
- import { join as join45 } from "path";
21112
- import { cancel as cancel2, isCancel as isCancel2, text } from "@clack/prompts";
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 = join45(cwd, ".env.example");
21714
+ const examplePath = join48(cwd, ".env.example");
21164
21715
  let raw;
21165
21716
  try {
21166
- raw = await readFile17(examplePath, "utf8");
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 = join45(cwd, ".env");
21723
+ const envPath = join48(cwd, ".env");
21173
21724
  let envContent = "";
21174
21725
  try {
21175
- envContent = await readFile17(envPath, "utf8");
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 (isCancel2(value)) {
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: writeFile12 } = await import("fs/promises");
21194
- await writeFile12(envPath, envContent, "utf8");
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 isCancel3, select as select2 } from "@clack/prompts";
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 (isCancel3(picked) || typeof picked !== "string") {
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 = dirname14(fileURLToPath7(import.meta.url));
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 readFile18(join46(HERE7, "..", "package.json"), "utf8");
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
- process25.stdout.write(`${line}
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
- process25.stdout.write(`${JSON.stringify({ ok: false, error: message })}
21839
+ process28.stdout.write(`${JSON.stringify({ ok: false, error: message })}
21289
21840
  `);
21290
21841
  } else {
21291
- process25.stderr.write(`${message}
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
- process25.stdout.write(`${JSON.stringify({ ok: result.installed, ...result })}
21849
+ process28.stdout.write(`${JSON.stringify({ ok: result.installed, ...result })}
21299
21850
  `);
21300
21851
  } else {
21301
- process25.stdout.write(`${formatEnsureResult(result)}
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
- process25.stdout.write(`${result.message}
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
- process25.stdout.write(`${result.message}
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
- process25.stdout.write(`${result.message}
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
- process25.stdout.write(`${result.message}
21886
+ process28.stdout.write(`${result.message}
21336
21887
  `);
21337
21888
  return result.exitCode;
21338
21889
  }
21339
- process25.stderr.write(
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
- process25.stderr.write("Unknown env command. Try: vybekiit env wizard\n");
21897
+ process28.stderr.write("Unknown env command. Try: vybekiit env wizard\n");
21347
21898
  return 1;
21348
21899
  }
21349
21900
  if (!isInteractive()) {
21350
- process25.stderr.write("env wizard requires an interactive terminal.\n");
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
- process25.stderr.write("Usage: vybekiit create app --web|--mobile|--extension [directory]\n");
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
- process25.stdout.write(`${CLI_HELP_ALL}
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
- process25.stdout.write(`${result.json}
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
- process25.stdout.write(`${result.json}
21949
+ process28.stdout.write(`${result.json}
21399
21950
  `);
21400
21951
  return result.exitCode;
21401
21952
  }
21402
- process25.stderr.write(
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
- process25.stdout.write(`${result.json}
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
- process25.stdout.write(`${result.json}
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
- process25.stdout.write(`${result.json}
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
- process25.stdout.write(`${result.output}
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
- process25.stdout.write(`${result.json}
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
- process25.stdout.write(`${result.json}
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
- process25.stdout.write(`${result.json}
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
- process25.stdout.write(`${result.json}
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
- process25.stdout.write(`${result.json}
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
- process25.stdout.write(`${result.json}
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
- process25.stdout.write(`${result.json}
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
- process25.stdout.write(`${result.json}
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
- process25.stdout.write(`${result.json}
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
- process25.stdout.write(`${result.json}
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
- process25.stdout.write(`${result.json}
22061
+ process28.stdout.write(`${result.json}
21510
22062
  `);
21511
22063
  return result.exitCode;
21512
22064
  }
21513
- process25.stderr.write(
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
- process25.stdout.write(result.output);
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
- process25.stderr.write("Unknown scaffold command. Try: vybekiit scaffold backend\n");
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], process25.cwd());
21533
- process25.stdout.write(`${result.message}
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
- process25.stdout.write(`${CLI_HELP}
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
- process25.stdout.write(`${wantsFullHelp(argv) ? CLI_HELP_ALL : CLI_HELP}
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
- process25.stdout.write(`${await readVersion()}
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
- process25.stderr.write(
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
- var runBinEntrypoint = async () => {
21580
- if (process26.argv[1] === void 0 || resolve13(process26.argv[1]) !== fileURLToPath8(import.meta.url)) {
21581
- return;
21582
- }
21583
- try {
21584
- const code = await runCli(process26.argv.slice(2));
21585
- process26.exit(code);
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
+ }