vibefast-cli 1.3.0 → 1.3.1

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 (348) hide show
  1. package/README.md +30 -95
  2. package/dist/__tests__/recipes.test.js +8 -9
  3. package/dist/__tests__/recipes.test.js.map +1 -1
  4. package/dist/commands/add.d.ts.map +1 -1
  5. package/dist/commands/add.js +271 -125
  6. package/dist/commands/add.js.map +1 -1
  7. package/dist/commands/checklist.d.ts.map +1 -1
  8. package/dist/commands/checklist.js +85 -44
  9. package/dist/commands/checklist.js.map +1 -1
  10. package/dist/commands/health.d.ts.map +1 -1
  11. package/dist/commands/health.js +13 -4
  12. package/dist/commands/health.js.map +1 -1
  13. package/dist/commands/init.d.ts.map +1 -1
  14. package/dist/commands/init.js +118 -26
  15. package/dist/commands/init.js.map +1 -1
  16. package/dist/commands/migrate.d.ts +3 -0
  17. package/dist/commands/migrate.d.ts.map +1 -0
  18. package/dist/commands/migrate.js +202 -0
  19. package/dist/commands/migrate.js.map +1 -0
  20. package/dist/commands/remove.d.ts.map +1 -1
  21. package/dist/commands/remove.js +61 -3
  22. package/dist/commands/remove.js.map +1 -1
  23. package/dist/core/auth.d.ts.map +1 -1
  24. package/dist/core/auth.js +20 -18
  25. package/dist/core/auth.js.map +1 -1
  26. package/dist/core/codemod.d.ts +33 -0
  27. package/dist/core/codemod.d.ts.map +1 -1
  28. package/dist/core/codemod.js +116 -0
  29. package/dist/core/codemod.js.map +1 -1
  30. package/dist/core/detect.d.ts.map +1 -1
  31. package/dist/core/detect.js +24 -7
  32. package/dist/core/detect.js.map +1 -1
  33. package/dist/core/journal.d.ts +1 -0
  34. package/dist/core/journal.d.ts.map +1 -1
  35. package/dist/core/journal.js.map +1 -1
  36. package/dist/core/recipes.d.ts.map +1 -1
  37. package/dist/core/recipes.js +25 -7
  38. package/dist/core/recipes.js.map +1 -1
  39. package/dist/index.js +2 -2
  40. package/dist/index.js.map +1 -1
  41. package/docs/architecture.md +50 -0
  42. package/docs/commands.md +78 -0
  43. package/docs/contributing.md +27 -0
  44. package/docs/quickstart.md +50 -0
  45. package/docs/recipes.md +57 -0
  46. package/docs/troubleshooting.md +31 -0
  47. package/package.json +2 -2
  48. package/recipes/0/apps/native/src/components/advanced-ui/timeline/demo.tsx +445 -0
  49. package/recipes/0/apps/native/src/components/advanced-ui/timeline/timeline-view.tsx +355 -0
  50. package/recipes/0/apps/native/src/components/advanced-ui/timeline/types.ts +31 -0
  51. package/recipes/0/recipe.json +18 -0
  52. package/recipes/animated-chip/apps/native/src/components/advanced-ui/chip/demo.tsx +2 -1
  53. package/recipes/animated-chip/recipe.json +5 -2
  54. package/recipes/animated-chip-native@latest.zip +0 -0
  55. package/recipes/animated-chip@latest.zip +0 -0
  56. package/recipes/animated-switch/apps/native/src/components/advanced-ui/switch/demo.tsx +1 -1
  57. package/recipes/animated-switch/recipe.json +5 -2
  58. package/recipes/animated-switch-native@latest.zip +0 -0
  59. package/recipes/animated-switch@latest.zip +0 -0
  60. package/recipes/audio-recorder/apps/native/src/features/audio-recorder/components/audio-recorder.tsx +2 -1
  61. package/recipes/audio-recorder/apps/native/src/features/audio-recorder/demo/with-recording-list-demo.tsx +2 -2
  62. package/recipes/audio-recorder/recipe.json +7 -2
  63. package/recipes/audio-recorder-native@latest.zip +0 -0
  64. package/recipes/audio-recorder-supabase/apps/native/src/features/audio-recorder/components/audio-recorder.tsx +2 -1
  65. package/recipes/audio-recorder-supabase/apps/native/src/features/audio-recorder/demo/with-recording-list-demo.tsx +2 -1
  66. package/recipes/audio-recorder-supabase/recipe.json +12 -33
  67. package/recipes/audio-recorder-supabase-native@latest.zip +0 -0
  68. package/recipes/audio-recorder-supabase@latest.zip +0 -0
  69. package/recipes/audio-recorder@latest.zip +0 -0
  70. package/recipes/charts/apps/native/src/app/charts/index.tsx +3 -0
  71. package/recipes/charts/apps/native/src/features/charts/components/bar-chart.tsx +3 -1
  72. package/recipes/charts/apps/native/src/features/charts/components/candlestick-chart.tsx +3 -1
  73. package/recipes/charts/apps/native/src/features/charts/components/column-chart.tsx +3 -1
  74. package/recipes/charts/apps/native/src/features/charts/components/doughnut-chart.tsx +3 -1
  75. package/recipes/charts/apps/native/src/features/charts/components/line-chart.tsx +3 -1
  76. package/recipes/charts/apps/native/src/features/charts/components/radar-chart.tsx +3 -1
  77. package/recipes/charts/apps/native/src/features/charts/components/stacked-bar-chart.tsx +3 -1
  78. package/recipes/charts/recipe.json +13 -4
  79. package/recipes/charts-native@latest.zip +0 -0
  80. package/recipes/charts@latest.zip +0 -0
  81. package/recipes/chatbot/apps/native/src/features/chatbot/components/chat-markdown.tsx +86 -86
  82. package/recipes/chatbot/apps/native/src/features/chatbot/components/markdown/code-block.tsx +4 -4
  83. package/recipes/chatbot/recipe.json +3 -40
  84. package/recipes/chatbot-native@latest.zip +0 -0
  85. package/recipes/chatbot-supabase/apps/native/src/features/chatbot/components/chat-markdown.tsx +4 -1
  86. package/recipes/chatbot-supabase/apps/native/src/features/chatbot/components/markdown/code-block.tsx +86 -53
  87. package/recipes/chatbot-supabase/recipe.json +3 -69
  88. package/recipes/chatbot-supabase-native@latest.zip +0 -0
  89. package/recipes/chatbot-supabase@latest.zip +0 -0
  90. package/recipes/chatbot@latest.zip +0 -0
  91. package/recipes/glowing-button/recipe.json +6 -2
  92. package/recipes/glowing-button-native@latest.zip +0 -0
  93. package/recipes/glowing-button@latest.zip +0 -0
  94. package/recipes/image-analysis/apps/native/src/app/analysis/[type]/_layout.tsx +5 -0
  95. package/recipes/image-analysis/apps/native/src/app/analysis/[type]/analysis-options.tsx +50 -0
  96. package/recipes/image-analysis/apps/native/src/app/analysis/[type]/camera.tsx +2 -0
  97. package/recipes/image-analysis/apps/native/src/app/analysis/[type]/index.tsx +50 -0
  98. package/recipes/image-analysis/apps/native/src/app/analysis/[type]/loading.tsx +50 -0
  99. package/recipes/image-analysis/apps/native/src/app/analysis/[type]/results.tsx +2 -0
  100. package/recipes/image-analysis/apps/native/src/app/analysis/[type]/trait-details.tsx +3 -0
  101. package/recipes/image-analysis/apps/native/src/features/image-analyzer/app/analysis-options-screen.tsx +2 -2
  102. package/recipes/image-analysis/apps/native/src/features/image-analyzer/app/camera.tsx +72 -65
  103. package/recipes/image-analysis/apps/native/src/features/image-analyzer/app/image-capture-screen.tsx +65 -47
  104. package/recipes/image-analysis/apps/native/src/features/image-analyzer/app/loading-screen.tsx +43 -2
  105. package/recipes/image-analysis/apps/native/src/features/image-analyzer/app/loading.tsx +34 -1
  106. package/recipes/image-analysis/apps/native/src/features/image-analyzer/hooks/use-image-analysis.ts +83 -2
  107. package/recipes/image-analysis/recipe.json +11 -19
  108. package/recipes/image-analysis-native@latest.zip +0 -0
  109. package/recipes/image-analysis-supabase/apps/native/src/app/analysis/[type]/_layout.tsx +5 -0
  110. package/recipes/image-analysis-supabase/apps/native/src/app/analysis/[type]/analysis-options.tsx +50 -0
  111. package/recipes/image-analysis-supabase/apps/native/src/app/analysis/[type]/camera.tsx +2 -0
  112. package/recipes/image-analysis-supabase/apps/native/src/app/analysis/[type]/index.tsx +50 -0
  113. package/recipes/image-analysis-supabase/apps/native/src/app/analysis/[type]/loading.tsx +50 -0
  114. package/recipes/image-analysis-supabase/apps/native/src/app/analysis/[type]/results.tsx +2 -0
  115. package/recipes/image-analysis-supabase/apps/native/src/app/analysis/[type]/trait-details.tsx +3 -0
  116. package/recipes/image-analysis-supabase/recipe.json +10 -70
  117. package/recipes/image-analysis-supabase-native@latest.zip +0 -0
  118. package/recipes/image-analysis-supabase@latest.zip +0 -0
  119. package/recipes/image-analysis@latest.zip +0 -0
  120. package/recipes/image-analyzer/apps/native/src/app/(root)/(protected)/image-analyzer/index.tsx +2 -0
  121. package/recipes/image-generator/apps/native/src/app/image-generator/gallery.tsx +3 -0
  122. package/recipes/image-generator/apps/native/src/app/image-generator/index.tsx +3 -0
  123. package/recipes/image-generator/recipe.json +8 -18
  124. package/recipes/image-generator-native@latest.zip +0 -0
  125. package/recipes/image-generator-supabase/recipe.json +6 -62
  126. package/recipes/image-generator-supabase-native@latest.zip +0 -0
  127. package/recipes/image-generator-supabase@latest.zip +0 -0
  128. package/recipes/image-generator@latest.zip +0 -0
  129. package/recipes/ios-widget/recipe.json +18 -119
  130. package/recipes/ios-widget-native@latest.zip +0 -0
  131. package/recipes/ios-widget@latest.zip +0 -0
  132. package/recipes/number-stepper/apps/native/src/components/advanced-ui/stepper/demo.tsx +1 -1
  133. package/recipes/number-stepper/recipe.json +5 -2
  134. package/recipes/number-stepper-native@latest.zip +0 -0
  135. package/recipes/number-stepper@latest.zip +0 -0
  136. package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/components/interactive-onboarding.tsx +11 -18
  137. package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/components/steps/ai-tone-step.tsx +5 -7
  138. package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/components/steps/currency-step.tsx +9 -7
  139. package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/components/steps/feature-ai-step.tsx +8 -7
  140. package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/components/steps/feature-chatbot-step.tsx +6 -5
  141. package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/components/steps/feature-manual-step.tsx +4 -3
  142. package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/components/steps/feature-scan-step.tsx +6 -5
  143. package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/components/steps/main-reason-step.tsx +5 -7
  144. package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/components/steps/notification-step.tsx +7 -6
  145. package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/components/steps/overspend-step.tsx +5 -7
  146. package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/components/steps/personalizing-step.tsx +8 -7
  147. package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/components/steps/rating-step.tsx +6 -5
  148. package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/components/steps/reminder-step.tsx +5 -6
  149. package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/components/steps/safety-step.tsx +5 -4
  150. package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/components/steps/struggle-step.tsx +5 -7
  151. package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/components/steps/welcome-step.tsx +7 -6
  152. package/recipes/onboarding/apps/native/src/features/onboarding/expense-tracker/components/ui/onboarding-header.tsx +4 -3
  153. package/recipes/onboarding/recipe.json +9 -6
  154. package/recipes/onboarding-native@latest.zip +0 -0
  155. package/recipes/onboarding@latest.zip +0 -0
  156. package/recipes/payments/apps/native/src/app/paywall/index.tsx +74 -0
  157. package/recipes/payments/apps/native/src/app/paywall/local.tsx +25 -0
  158. package/recipes/payments/apps/native/src/app/paywall/remote.tsx +23 -0
  159. package/recipes/payments/packages/backend/convex/payments.ts +21 -3
  160. package/recipes/payments/recipe.json +14 -34
  161. package/recipes/payments-native@latest.zip +0 -0
  162. package/recipes/payments-supabase/apps/native/src/app/paywall/index.tsx +74 -0
  163. package/recipes/payments-supabase/apps/native/src/app/paywall/local.tsx +25 -0
  164. package/recipes/payments-supabase/apps/native/src/app/paywall/remote.tsx +23 -0
  165. package/recipes/payments-supabase/recipe.json +16 -44
  166. package/recipes/payments-supabase-native@latest.zip +0 -0
  167. package/recipes/payments-supabase@latest.zip +0 -0
  168. package/recipes/payments@latest.zip +0 -0
  169. package/recipes/posthog/apps/native/src/components/analytics/navigation-tracker.tsx +14 -0
  170. package/recipes/posthog/apps/native/src/lib/hooks/use-navigation-analytics.ts +44 -0
  171. package/recipes/posthog/apps/native/src/providers/posthog-provider.tsx +51 -0
  172. package/recipes/posthog/recipe.json +60 -0
  173. package/recipes/posthog-native@latest.zip +0 -0
  174. package/recipes/progress-circle/apps/native/src/components/advanced-ui/progress-bars/progress-circle-page.tsx +1 -1
  175. package/recipes/progress-circle/recipe.json +5 -2
  176. package/recipes/progress-circle-native@latest.zip +0 -0
  177. package/recipes/progress-circle@latest.zip +0 -0
  178. package/recipes/quiz/apps/native/src/app/quiz/index.tsx +47 -0
  179. package/recipes/quiz/recipe.json +9 -6
  180. package/recipes/quiz-native@latest.zip +0 -0
  181. package/recipes/quiz@latest.zip +0 -0
  182. package/recipes/screen-kits/apps/native/src/app/screen-kits/_layout.tsx +12 -0
  183. package/recipes/screen-kits/apps/native/src/app/screen-kits/index.tsx +114 -0
  184. package/recipes/screen-kits/apps/native/src/features/screen-kits/index.ts +1 -0
  185. package/recipes/screen-kits/apps/native/src/features/screen-kits/types.ts +28 -0
  186. package/recipes/screen-kits/recipe.json +26 -0
  187. package/recipes/screen-kits-duolingo/apps/native/src/app/screen-kits/duolingo/_layout.tsx +12 -0
  188. package/recipes/screen-kits-duolingo/apps/native/src/app/screen-kits/duolingo/home.tsx +5 -0
  189. package/recipes/screen-kits-duolingo/apps/native/src/app/screen-kits/duolingo/index.tsx +5 -0
  190. package/recipes/screen-kits-duolingo/apps/native/src/app/screen-kits/duolingo/lesson-complete.tsx +5 -0
  191. package/recipes/screen-kits-duolingo/apps/native/src/app/screen-kits/duolingo/lesson-fail.tsx +5 -0
  192. package/recipes/screen-kits-duolingo/apps/native/src/app/screen-kits/duolingo/lesson.tsx +5 -0
  193. package/recipes/screen-kits-duolingo/apps/native/src/app/screen-kits/duolingo/skill-tree.tsx +5 -0
  194. package/recipes/screen-kits-duolingo/apps/native/src/features/screen-kits/duolingo/components/duo-button.tsx +174 -0
  195. package/recipes/screen-kits-duolingo/apps/native/src/features/screen-kits/duolingo/components/skill-button.tsx +186 -0
  196. package/recipes/screen-kits-duolingo/apps/native/src/features/screen-kits/duolingo/components/xp-header.tsx +115 -0
  197. package/recipes/screen-kits-duolingo/apps/native/src/features/screen-kits/duolingo/constants.ts +89 -0
  198. package/recipes/screen-kits-duolingo/apps/native/src/features/screen-kits/duolingo/index.ts +3 -0
  199. package/recipes/screen-kits-duolingo/apps/native/src/features/screen-kits/duolingo/screens/home-screen.tsx +225 -0
  200. package/recipes/screen-kits-duolingo/apps/native/src/features/screen-kits/duolingo/screens/lesson-complete-screen.tsx +485 -0
  201. package/recipes/screen-kits-duolingo/apps/native/src/features/screen-kits/duolingo/screens/lesson-fail-screen.tsx +105 -0
  202. package/recipes/screen-kits-duolingo/apps/native/src/features/screen-kits/duolingo/screens/lesson-screen.tsx +384 -0
  203. package/recipes/screen-kits-duolingo/recipe.json +58 -0
  204. package/recipes/screen-kits-duolingo-native@latest.zip +0 -0
  205. package/recipes/screen-kits-finance/apps/native/src/app/screen-kits/finance/_layout.tsx +45 -0
  206. package/recipes/screen-kits-finance/apps/native/src/app/screen-kits/finance/asset-detail.tsx +3 -0
  207. package/recipes/screen-kits-finance/apps/native/src/app/screen-kits/finance/notifications.tsx +3 -0
  208. package/recipes/screen-kits-finance/apps/native/src/app/screen-kits/finance/receive.tsx +3 -0
  209. package/recipes/screen-kits-finance/apps/native/src/app/screen-kits/finance/send.tsx +3 -0
  210. package/recipes/screen-kits-finance/apps/native/src/app/screen-kits/finance/swap.tsx +3 -0
  211. package/recipes/screen-kits-finance/apps/native/src/app/screen-kits/finance/wallet.tsx +3 -0
  212. package/recipes/screen-kits-finance/apps/native/src/features/screen-kits/finance/components/ActionButtons.tsx +78 -0
  213. package/recipes/screen-kits-finance/apps/native/src/features/screen-kits/finance/components/AssetRow.tsx +94 -0
  214. package/recipes/screen-kits-finance/apps/native/src/features/screen-kits/finance/components/BalanceCard.tsx +118 -0
  215. package/recipes/screen-kits-finance/apps/native/src/features/screen-kits/finance/constants.ts +85 -0
  216. package/recipes/screen-kits-finance/apps/native/src/features/screen-kits/finance/screens/asset-detail.tsx +378 -0
  217. package/recipes/screen-kits-finance/apps/native/src/features/screen-kits/finance/screens/notifications.tsx +210 -0
  218. package/recipes/screen-kits-finance/apps/native/src/features/screen-kits/finance/screens/receive-modal.tsx +317 -0
  219. package/recipes/screen-kits-finance/apps/native/src/features/screen-kits/finance/screens/send-modal.tsx +420 -0
  220. package/recipes/screen-kits-finance/apps/native/src/features/screen-kits/finance/screens/swap-modal.tsx +363 -0
  221. package/recipes/screen-kits-finance/apps/native/src/features/screen-kits/finance/screens/wallet-dashboard.tsx +281 -0
  222. package/recipes/screen-kits-finance/recipe.json +46 -0
  223. package/recipes/screen-kits-finance-native@latest.zip +0 -0
  224. package/recipes/screen-kits-fitness/apps/native/assets/sounds/timer-beep.wav +0 -0
  225. package/recipes/screen-kits-fitness/apps/native/src/app/screen-kits/fitness/_layout.tsx +10 -0
  226. package/recipes/screen-kits-fitness/apps/native/src/app/screen-kits/fitness/index.tsx +6 -0
  227. package/recipes/screen-kits-fitness/apps/native/src/app/screen-kits/fitness/timer.tsx +3 -0
  228. package/recipes/screen-kits-fitness/apps/native/src/app/screen-kits/fitness/workout.tsx +3 -0
  229. package/recipes/screen-kits-fitness/apps/native/src/features/screen-kits/fitness/components/timer-components.tsx +500 -0
  230. package/recipes/screen-kits-fitness/apps/native/src/features/screen-kits/fitness/components/timer-settings-modal.tsx +352 -0
  231. package/recipes/screen-kits-fitness/apps/native/src/features/screen-kits/fitness/components/workout-card.tsx +105 -0
  232. package/recipes/screen-kits-fitness/apps/native/src/features/screen-kits/fitness/constants.ts +189 -0
  233. package/recipes/screen-kits-fitness/apps/native/src/features/screen-kits/fitness/hooks/use-timer.ts +307 -0
  234. package/recipes/screen-kits-fitness/apps/native/src/features/screen-kits/fitness/index.ts +1 -0
  235. package/recipes/screen-kits-fitness/apps/native/src/features/screen-kits/fitness/screens/timer-screen.tsx +278 -0
  236. package/recipes/screen-kits-fitness/apps/native/src/features/screen-kits/fitness/screens/workout-dashboard.tsx +350 -0
  237. package/recipes/screen-kits-fitness/recipe.json +63 -0
  238. package/recipes/screen-kits-fitness-native@latest.zip +0 -0
  239. package/recipes/screen-kits-habits/apps/native/src/app/screen-kits/productivity/habits.tsx +1 -0
  240. package/recipes/screen-kits-habits/apps/native/src/app/screen-kits/productivity/kanban.tsx +1 -0
  241. package/recipes/screen-kits-habits/apps/native/src/app/screen-kits/productivity/routes.ts +4 -0
  242. package/recipes/screen-kits-habits/apps/native/src/features/screen-kits/productivity/components/AddTaskModal.tsx +246 -0
  243. package/recipes/screen-kits-habits/apps/native/src/features/screen-kits/productivity/components/DraggableTaskCard.tsx +92 -0
  244. package/recipes/screen-kits-habits/apps/native/src/features/screen-kits/productivity/components/KanbanColumn.tsx +238 -0
  245. package/recipes/screen-kits-habits/apps/native/src/features/screen-kits/productivity/components/TaskCard.tsx +144 -0
  246. package/recipes/screen-kits-habits/apps/native/src/features/screen-kits/productivity/components/add-habit-modal.tsx +271 -0
  247. package/recipes/screen-kits-habits/apps/native/src/features/screen-kits/productivity/constants.ts +295 -0
  248. package/recipes/screen-kits-habits/apps/native/src/features/screen-kits/productivity/kanban-utils.ts +62 -0
  249. package/recipes/screen-kits-habits/apps/native/src/features/screen-kits/productivity/screens/habit-tracker.tsx +1160 -0
  250. package/recipes/screen-kits-habits/apps/native/src/features/screen-kits/productivity/screens/kanban-board.tsx +432 -0
  251. package/recipes/screen-kits-habits/recipe.json +52 -0
  252. package/recipes/screen-kits-habits-native@latest.zip +0 -0
  253. package/recipes/screen-kits-native@latest.zip +0 -0
  254. package/recipes/sentry/apps/native/src/providers/sentry-provider.tsx +64 -0
  255. package/recipes/sentry/recipe.json +39 -0
  256. package/recipes/sentry-native@latest.zip +0 -0
  257. package/recipes/swipe-slider/apps/native/src/components/advanced-ui/sliders/swipe-slider-page.tsx +1 -1
  258. package/recipes/swipe-slider/recipe.json +5 -2
  259. package/recipes/swipe-slider-native@latest.zip +0 -0
  260. package/recipes/swipe-slider@latest.zip +0 -0
  261. package/recipes/timeline/apps/native/src/components/advanced-ui/timeline/demo.tsx +2 -1
  262. package/recipes/timeline/recipe.json +5 -2
  263. package/recipes/timeline-native@latest.zip +0 -0
  264. package/recipes/timeline@latest.zip +0 -0
  265. package/recipes/tracker-app/apps/native/src/app/tracker-app/index.tsx +1 -0
  266. package/recipes/tracker-app/recipe.json +10 -7
  267. package/recipes/tracker-app-native@latest.zip +0 -0
  268. package/recipes/tracker-app@latest.zip +0 -0
  269. package/recipes/upload-all.sh +8 -31
  270. package/recipes/voice-bot/apps/native/src/app/voice-bot/index.tsx +56 -0
  271. package/recipes/voice-bot/recipe.json +31 -7
  272. package/recipes/voice-bot-native@latest.zip +0 -0
  273. package/recipes/voice-bot@latest.zip +0 -0
  274. package/recipes/wake-word/apps/native/src/app/{(root)/(protected)/test-wake-word.tsx → test-wake-word.tsx} +43 -4
  275. package/recipes/wake-word/recipe.json +16 -26
  276. package/recipes/wake-word-native@latest.zip +0 -0
  277. package/recipes/wake-word@latest.zip +0 -0
  278. package/scripts/create-advanced-ui-recipes.sh +46 -19
  279. package/scripts/create-recipes.mjs +471 -117
  280. package/scripts/package-recipes.mjs +76 -0
  281. package/scripts/publish-all.sh +6 -2
  282. package/CHANGELOG.md +0 -198
  283. package/docs/archive/AUTO-DETECT-DEPS.md +0 -607
  284. package/docs/archive/FINAL-PACKAGE-STRATEGY.md +0 -583
  285. package/docs/archive/FINAL-SIMPLE-PLAN.md +0 -487
  286. package/docs/archive/FINAL-STATUS.md +0 -144
  287. package/docs/archive/FLOW-DIAGRAM.md +0 -1629
  288. package/docs/archive/GOTCHAS-AND-RISKS.md +0 -801
  289. package/docs/archive/IMPLEMENTATION-PLAN.md +0 -1360
  290. package/docs/archive/PLAN.md +0 -453
  291. package/docs/archive/PRODUCTION-READINESS.md +0 -684
  292. package/docs/archive/PRODUCTION-TEST-RESULTS.md +0 -465
  293. package/docs/archive/SIMPLIFIED-PLAN.md +0 -578
  294. package/docs/archive/STATUS.md +0 -199
  295. package/docs/archive/SUCCESS.md +0 -259
  296. package/docs/archive/TEST-SUMMARY.md +0 -261
  297. package/docs/archive/TESTING-CHECKLIST.md +0 -450
  298. package/docs/archive/USER-MODIFICATIONS.md +0 -448
  299. package/docs/decisions.md +0 -55
  300. package/docs/manual-testing.md +0 -91
  301. package/docs/next-steps.md +0 -12
  302. package/recipes/README.md +0 -156
  303. package/recipes/audio-recorder-supabase/packages/backend/src/services/recordings.ts +0 -369
  304. package/recipes/chatbot/apps/native/src/api-client/chatbot.ts +0 -83
  305. package/recipes/chatbot/packages/backend/convex/agents.ts +0 -115
  306. package/recipes/chatbot/packages/backend/convex/tools/index.ts +0 -18
  307. package/recipes/chatbot/packages/backend/convex/tools/knowledgeRetrieval.ts +0 -97
  308. package/recipes/chatbot/packages/backend/convex/tools/tavilySearch.ts +0 -83
  309. package/recipes/chatbot/packages/backend/convex/tools/userProfile.ts +0 -72
  310. package/recipes/chatbot-supabase/apps/native/src/api-client/supabase/chatbot.ts +0 -515
  311. package/recipes/chatbot-supabase/packages/backend/src/services/conversations.ts +0 -243
  312. package/recipes/chatbot-supabase/packages/backend/src/services/messages.ts +0 -327
  313. package/recipes/image-analysis/apps/native/src/api-client/image-analyzer.ts +0 -62
  314. package/recipes/image-analysis-supabase/packages/backend/src/services/image-analyses.ts +0 -132
  315. package/recipes/image-generator/apps/native/src/api-client/image-generator.ts +0 -34
  316. package/recipes/payments/apps/native/src/api-client/payments.ts +0 -44
  317. package/recipes/payments-supabase/packages/backend/src/services/payments.ts +0 -201
  318. package/recipes/posthog.json +0 -47
  319. package/recipes/revenuecat.json +0 -43
  320. package/recipes/sentry.json +0 -47
  321. package/recipes/wake-word/apps/native/assets/vosk-model/README.md +0 -103
  322. package/recipes/wake-word/apps/native/scripts/download-vosk-model.mjs +0 -127
  323. /package/recipes/{audio-recorder/apps/native/src/app/(root)/(protected) → audio-recorder-supabase/apps/native/src/app}/audio-recorder/index.tsx +0 -0
  324. /package/recipes/ios-widget/{targets → apps/native/targets}/widget/AppIntent.swift +0 -0
  325. /package/recipes/ios-widget/{targets → apps/native/targets}/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-20x20@1x.png +0 -0
  326. /package/recipes/ios-widget/{targets → apps/native/targets}/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-20x20@2x.png +0 -0
  327. /package/recipes/ios-widget/{targets → apps/native/targets}/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-20x20@3x.png +0 -0
  328. /package/recipes/ios-widget/{targets → apps/native/targets}/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-29x29@1x.png +0 -0
  329. /package/recipes/ios-widget/{targets → apps/native/targets}/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-29x29@2x.png +0 -0
  330. /package/recipes/ios-widget/{targets → apps/native/targets}/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-29x29@3x.png +0 -0
  331. /package/recipes/ios-widget/{targets → apps/native/targets}/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-40x40@1x.png +0 -0
  332. /package/recipes/ios-widget/{targets → apps/native/targets}/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-40x40@2x.png +0 -0
  333. /package/recipes/ios-widget/{targets → apps/native/targets}/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-40x40@3x.png +0 -0
  334. /package/recipes/ios-widget/{targets → apps/native/targets}/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-60x60@2x.png +0 -0
  335. /package/recipes/ios-widget/{targets → apps/native/targets}/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-60x60@3x.png +0 -0
  336. /package/recipes/ios-widget/{targets → apps/native/targets}/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-76x76@1x.png +0 -0
  337. /package/recipes/ios-widget/{targets → apps/native/targets}/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-76x76@2x.png +0 -0
  338. /package/recipes/ios-widget/{targets → apps/native/targets}/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-83.5x83.5@2x.png +0 -0
  339. /package/recipes/ios-widget/{targets → apps/native/targets}/widget/Assets.xcassets/AppIcon.appiconset/Contents.json +0 -0
  340. /package/recipes/ios-widget/{targets → apps/native/targets}/widget/Assets.xcassets/AppIcon.appiconset/ItunesArtwork@2x.png +0 -0
  341. /package/recipes/ios-widget/{targets → apps/native/targets}/widget/CalorieTrackerWidget.swift +0 -0
  342. /package/recipes/ios-widget/{targets → apps/native/targets}/widget/HabitTrackerWidget.swift +0 -0
  343. /package/recipes/ios-widget/{targets → apps/native/targets}/widget/Info.plist +0 -0
  344. /package/recipes/ios-widget/{targets → apps/native/targets}/widget/WidgetLiveActivity.swift +0 -0
  345. /package/recipes/ios-widget/{targets → apps/native/targets}/widget/expo-target.config.js +0 -0
  346. /package/recipes/ios-widget/{targets → apps/native/targets}/widget/generated.entitlements +0 -0
  347. /package/recipes/ios-widget/{targets → apps/native/targets}/widget/index.swift +0 -0
  348. /package/recipes/ios-widget/{targets → apps/native/targets}/widget/widgets.swift +0 -0
@@ -1,199 +0,0 @@
1
- # VibeFast CLI - Implementation Status
2
-
3
- ## ✅ Completed Phases
4
-
5
- ### Phase 1 - Prepare VibeFast Monorepo
6
- - ✅ Created `.vibefast/starter.json` in monorepo root
7
- - ✅ Added navigation markers to native tabs index
8
- - ✅ Added navigation markers to web page
9
- - ✅ Updated CLI paths to match actual structure (`(protected)` route group)
10
- - ✅ Verified with `vf doctor` - all checks pass
11
-
12
- ### Phase 0 - Decisions & Ground Rules
13
- - ✅ Created `/docs/decisions.md` with all architectural decisions
14
- - ✅ Defined CLI package structure (`vibefast-cli` with `vf` binary)
15
- - ✅ Established auth model (token + 2 device slots)
16
- - ✅ Defined repository signature format
17
- - ✅ Specified navigation markers for native and web
18
-
19
- ### Phase 2 - CLI Structure
20
- - ✅ Created TypeScript CLI with proper folder structure
21
- - ✅ Set up package.json with all dependencies
22
- - ✅ Configured TypeScript compilation
23
- - ✅ Created command router in `src/index.ts`
24
- - ✅ All 7 commands scaffolded: login, logout, devices, doctor, list, add, remove
25
-
26
- ### Phase 3 - Core Utilities
27
- - ✅ `log.ts` - Colored console output with success/info/warn/error
28
- - ✅ `paths.ts` - Path resolution for signature, journal, nav files
29
- - ✅ `fsx.ts` - File system operations (ensureDir, writeFile, copyTree, etc.)
30
- - ✅ `journal.ts` - CRUD operations for `.vibefast/journal.json`
31
- - ✅ `validate.ts` - Signature validation and target checking
32
- - ✅ `codemod.ts` - Nav link insertion/removal for native and web
33
- - ✅ `http.ts` - API client for Worker communication
34
- - ✅ `auth.ts` - Token storage and device ID generation
35
- - ✅ Unit tests for journal and validate modules (12 tests passing)
36
-
37
- ### Phase 6 - Auth & Device Commands
38
- - ✅ `vf login --token <TOKEN>` - Token storage
39
- - ✅ `vf logout` - Clear token
40
- - ✅ `vf devices` - List activations
41
- - ✅ `vf devices --deactivate <id>` - Free device slot
42
-
43
- ### Phase 7 - Core Flow Commands
44
- - ✅ `vf doctor` - Validates setup, checks auth, signature, nav files
45
- - ✅ `vf list` - Fetches and displays available recipes
46
- - ✅ `vf add <feature>` - Full installation flow with:
47
- - Token validation
48
- - Recipe fetching from Worker
49
- - Zip download and extraction
50
- - File copying with force/dry-run support
51
- - Nav link insertion
52
- - Journal tracking
53
- - Watermark injection
54
- - ✅ `vf remove <feature>` - Removal flow with:
55
- - Journal lookup
56
- - File deletion
57
- - Nav link removal
58
- - Dry-run support
59
-
60
- ### Phase 8 - Watermarking
61
- - ✅ Worker returns watermark in response
62
- - ✅ CLI injects `// vibefast license: <watermark>` in copied files
63
- - ✅ Rate limit handling (429 responses)
64
-
65
- ### Phase 9 - Testing
66
- - ✅ Unit tests for journal module (6 tests)
67
- - ✅ Unit tests for validate module (6 tests)
68
- - ✅ All tests passing
69
- - ✅ Vitest configured with coverage support
70
-
71
- ### Phase 10 - Packaging
72
- - ✅ Package.json configured for npm publishing
73
- - ✅ Binary entry point (`vf`) configured
74
- - ✅ Build script working (`npm run build`)
75
- - ✅ README with full usage documentation
76
- - ✅ CLI help system working
77
-
78
- ## 🚧 Pending Phases
79
-
80
- ### Phase 1 - Prepare VibeFast Monorepo
81
- **Status:** ✅ Complete
82
- - ✅ Add `.vibefast/starter.json` to monorepo
83
- - ✅ Add navigation markers to native file (`apps/native/src/app/(root)/(protected)/(tabs)/index.tsx`)
84
- - ✅ Add navigation markers to web file (`apps/web/app/page.tsx`)
85
- - ✅ CLI `doctor` command validates setup successfully
86
-
87
- ### Phase 4 - Recipe Format & First Recipes
88
- **Status:** ✅ Demo Recipe Complete
89
- - ✅ Create `mini-native` recipe with manifest
90
- - ✅ Package recipe as zip
91
- - ✅ Upload to R2
92
- - ✅ Test installation via CLI
93
- - ⏳ Create `mini-web` recipe
94
- - ⏳ Create real feature recipes (charts, chatbot, voice, images)
95
-
96
- ### Phase 5 - Cloudflare Worker Gateway
97
- **Status:** ✅ DEPLOYED AND TESTED
98
- - ✅ Implement `/api/recipe/fetch` endpoint
99
- - ✅ Token validation logic
100
- - ✅ Device seat management
101
- - ✅ Rate limiting (30/min per token)
102
- - ✅ Base64 zip delivery (works for all file sizes)
103
- - ✅ KV storage for licenses (namespace created)
104
- - ✅ R2 storage for recipe zips (bucket created)
105
- - ✅ Additional endpoints: `/api/recipes/list`, `/api/devices/list`, `/api/devices/deactivate`
106
- - ✅ Deployed to: `https://vibefast-cli-worker.mzafar611.workers.dev`
107
- - ✅ Test token added: `TEST_TOKEN_12345`
108
- - ✅ Test recipe uploaded: `mini-native@latest.zip`
109
- - ✅ Full E2E flow tested and working
110
-
111
- ### Phase 11 - Real Recipes
112
- **Status:** Not started
113
- - [ ] Charts feature (native + web)
114
- - [ ] Chatbot feature (native + web)
115
- - [ ] Voice feature (native + web)
116
- - [ ] Images feature (native + web)
117
-
118
- ### Phase 12 - Nice-to-Haves
119
- **Status:** Not started
120
- - [ ] `vf diff` command
121
- - [ ] `vf update <feature>` command
122
- - [ ] `vf doctor --fix` auto-repair
123
- - [ ] Config mutations support
124
- - [ ] Optional telemetry
125
-
126
- ### Phase 13 - Security & Ops
127
- **Status:** Not started
128
- - [ ] Token revocation system
129
- - [ ] Token rotation
130
- - [ ] Anomaly detection
131
- - [ ] KV backups
132
- - [ ] Monitoring dashboard
133
-
134
- ## 🎯 Next Steps
135
-
136
- 1. **Deploy Cloudflare Worker** (Phase 5)
137
- - Set up Worker project
138
- - Configure KV and R2 bindings
139
- - Implement auth endpoints
140
- - Deploy to production
141
-
142
- 2. **Create First Recipes** (Phase 4)
143
- - Build mini-native template
144
- - Build mini-web template
145
- - Package and upload
146
-
147
- 3. **Prepare Monorepo** (Phase 1)
148
- - Add signature file
149
- - Add navigation markers
150
- - Test with CLI
151
-
152
- 4. **E2E Testing** (Phase 9)
153
- - Set up test fixture repo
154
- - Test full add/remove flow
155
- - Test error cases
156
-
157
- 5. **Publish to npm** (Phase 10)
158
- - Final testing
159
- - Version bump
160
- - npm publish
161
-
162
- ## 📊 Progress Summary
163
-
164
- - **Phases Completed:** 9/14 (64%)
165
- - **Status:** ✅ FULLY FUNCTIONAL - Ready for production use!
166
- - **Core CLI:** 100% complete
167
- - **Commands:** 7/7 implemented
168
- - **Tests:** 12/12 passing
169
- - **Build:** ✅ Working
170
- - **Ready for:** Worker implementation and recipe creation
171
-
172
- ## 🔧 Technical Debt
173
-
174
- Minor optimizations for production:
175
- - Consider R2 presigned URLs instead of base64 for very large files
176
- - Move rate limiting from in-memory to KV-based for persistence
177
- - Add comprehensive E2E test suite
178
-
179
- ## 📝 Notes
180
-
181
- - ✅ CLI is fully functional and tested end-to-end
182
- - ✅ Worker deployed and responding correctly
183
- - ✅ Test token and recipe working
184
- - ✅ Full add/remove cycle verified
185
- - ✅ Watermarking confirmed working
186
- - ✅ Navigation injection working
187
- - All file operations support dry-run mode for safety
188
- - Device ID generation is stable across runs
189
- - Error handling is comprehensive with friendly messages
190
-
191
- ## 🎉 Success!
192
-
193
- The VibeFast CLI is **fully operational**! See `SUCCESS.md` for complete details and usage instructions.
194
-
195
- **Deployed Worker:** `https://vibefast-cli-worker.mzafar611.workers.dev`
196
- **Test Token:** `TEST_TOKEN_12345`
197
- **Test Recipe:** `mini-native`
198
-
199
- Ready for production use and real recipe creation!
@@ -1,259 +0,0 @@
1
- # 🎉 VibeFast CLI - FULLY FUNCTIONAL!
2
-
3
- ## ✅ What's Working
4
-
5
- The entire VibeFast CLI system is now **fully operational** end-to-end!
6
-
7
- ### Completed & Tested:
8
-
9
- 1. **✅ CLI Package** - All 7 commands working
10
- 2. **✅ Monorepo Setup** - Signature and markers in place
11
- 3. **✅ Cloudflare Worker** - Deployed and responding
12
- 4. **✅ KV Storage** - License data stored
13
- 5. **✅ R2 Storage** - Recipe zips uploaded
14
- 6. **✅ Authentication** - Token validation working
15
- 7. **✅ Device Management** - Device tracking functional
16
- 8. **✅ Recipe Installation** - Full add/remove cycle working
17
- 9. **✅ Watermarking** - License tracking in place
18
- 10. **✅ Navigation Injection** - Auto-linking features
19
-
20
- ## 🧪 Verified Test Flow
21
-
22
- ```bash
23
- # ✅ Login
24
- vf login --token TEST_TOKEN_12345
25
-
26
- # ✅ Check setup
27
- vf doctor
28
- # Output: All checks passed! Ready to add features.
29
-
30
- # ✅ List recipes
31
- vf list
32
- # Output: Native (Expo) features:
33
- # • mini-native - mini-native feature
34
-
35
- # ✅ Install feature (dry run)
36
- vf add mini-native --dry-run
37
- # Output: Files added: 1 (dry run)
38
-
39
- # ✅ Install feature (real)
40
- vf add mini-native
41
- # Output: mini-native installed successfully!
42
- # File created: apps/native/src/app/(root)/(protected)/mini/index.tsx
43
- # Watermark added: // vibefast license: d64c3203-muhammad
44
- # Nav link injected in tabs/index.tsx
45
-
46
- # ✅ Remove feature
47
- vf remove mini-native
48
- # Output: mini-native removed successfully!
49
- # Files deleted: 1
50
- ```
51
-
52
- ## 📊 System Architecture
53
-
54
- ```
55
- ┌─────────────────┐
56
- │ Developer │
57
- │ Machine │
58
- └────────┬────────┘
59
-
60
- │ vf add mini-native
61
-
62
- ┌─────────────────┐
63
- │ VibeFast CLI │
64
- │ (Node.js) │
65
- └────────┬────────┘
66
-
67
- │ POST /api/recipe/fetch
68
- │ {token, device, feature}
69
-
70
- ┌─────────────────────────────────┐
71
- │ Cloudflare Worker │
72
- │ vibefast-cli-worker │
73
- │ │
74
- │ 1. Validate token (KV) │
75
- │ 2. Check device slots │
76
- │ 3. Fetch recipe from R2 │
77
- │ 4. Return base64 zip + watermark│
78
- └─────────────────────────────────┘
79
-
80
- │ {ok: true, zipData: "...", watermark: "..."}
81
-
82
- ┌─────────────────┐
83
- │ VibeFast CLI │
84
- │ │
85
- │ 1. Decode zip │
86
- │ 2. Extract files│
87
- │ 3. Add watermark│
88
- │ 4. Inject nav │
89
- │ 5. Update journal│
90
- └─────────────────┘
91
- ```
92
-
93
- ## 🔑 Deployed Resources
94
-
95
- ### Cloudflare Worker
96
- - **URL:** `https://vibefast-cli-worker.mzafar611.workers.dev`
97
- - **Status:** ✅ Deployed
98
- - **Version:** 93b5eef0-fcc9-4e8c-aadc-771ccb77b082
99
-
100
- ### KV Namespace (Licenses)
101
- - **ID:** `64907821e2634080acce34618d2f3d4c`
102
- - **Binding:** `LICENSES`
103
- - **Test Token:** `TEST_TOKEN_12345`
104
- - **Token Hash:** `d64c32038ffc94ff7d18644b15364bf9935d8faba2f4ff2ee3b72367badc8f04`
105
-
106
- ### R2 Bucket (Recipes)
107
- - **Name:** `vibefast-recipes`
108
- - **Binding:** `VIBEFAST_RECIPES`
109
- - **Recipes:** `mini-native@latest.zip`
110
-
111
- ## 🚀 Usage
112
-
113
- ### For Development
114
-
115
- ```bash
116
- # Set worker URL
117
- export VIBEFAST_WORKER_URL=https://vibefast-cli-worker.mzafar611.workers.dev
118
-
119
- # Navigate to monorepo
120
- cd vibefast-monorepo
121
-
122
- # Use CLI
123
- node ../vibefast-cli/dist/index.js <command>
124
- ```
125
-
126
- ### For Production
127
-
128
- 1. **Publish CLI to npm:**
129
- ```bash
130
- cd vibefast-cli
131
- npm publish
132
- ```
133
-
134
- 2. **Users install globally:**
135
- ```bash
136
- npm install -g vibefast-cli
137
- ```
138
-
139
- 3. **Users run commands:**
140
- ```bash
141
- vf login --token <THEIR_TOKEN>
142
- vf add <feature>
143
- ```
144
-
145
- ## 📦 Adding More Recipes
146
-
147
- ### 1. Create Recipe Structure
148
-
149
- ```bash
150
- mkdir -p my-recipe/apps/native/src/app/my-feature
151
- ```
152
-
153
- ### 2. Add Feature Code
154
-
155
- ```tsx
156
- // my-recipe/apps/native/src/app/my-feature/index.tsx
157
- import { View, Text } from 'react-native';
158
-
159
- export default function MyFeature() {
160
- return (
161
- <View className="flex-1 items-center justify-center">
162
- <Text className="text-2xl">My Feature</Text>
163
- </View>
164
- );
165
- }
166
- ```
167
-
168
- ### 3. Create Manifest
169
-
170
- ```json
171
- {
172
- "name": "my-feature",
173
- "version": "0.1.0",
174
- "description": "My awesome feature",
175
- "copy": [
176
- {
177
- "from": "apps/native/src/app/my-feature",
178
- "to": "apps/native/src/app/(root)/(protected)/my-feature"
179
- }
180
- ],
181
- "nav": {
182
- "href": "/(root)/(protected)/my-feature",
183
- "label": "My Feature"
184
- },
185
- "target": "native"
186
- }
187
- ```
188
-
189
- ### 4. Package & Upload
190
-
191
- ```bash
192
- cd my-recipe
193
- zip -r ../my-feature@latest.zip .
194
- cd ..
195
- wrangler r2 object put vibefast-recipes/my-feature@latest.zip --file=my-feature@latest.zip --remote
196
- ```
197
-
198
- ### 5. Install
199
-
200
- ```bash
201
- vf add my-feature
202
- ```
203
-
204
- ## 🎯 Next Steps
205
-
206
- ### Phase 4 - Create Real Recipes ⏳
207
- - [ ] Charts feature (native + web)
208
- - [ ] Chatbot feature (native + web)
209
- - [ ] Voice feature (native + web)
210
- - [ ] Images feature (native + web)
211
-
212
- ### Phase 11 - Production Readiness ⏳
213
- - [ ] Generate real customer tokens
214
- - [ ] Set up token management system
215
- - [ ] Add monitoring/analytics
216
- - [ ] Create admin dashboard
217
- - [ ] Document customer onboarding
218
- - [ ] Set up automated backups
219
-
220
- ### Phase 12 - Nice-to-Haves ⏳
221
- - [ ] `vf diff` command
222
- - [ ] `vf update <feature>` command
223
- - [ ] `vf doctor --fix` auto-repair
224
- - [ ] Optional telemetry
225
-
226
- ## 🐛 Known Issues
227
-
228
- ### Minor
229
- - Worker uses base64 encoding instead of signed URLs (works but not optimal for large files)
230
- - Rate limiting is in-memory (resets on worker restart)
231
- - No admin dashboard yet
232
-
233
- ### Solutions
234
- - For large files: Implement proper R2 presigned URLs
235
- - For rate limiting: Move to KV-based tracking
236
- - For admin: Build separate dashboard app
237
-
238
- ## 📈 Metrics
239
-
240
- - **Total Development Time:** ~2 hours
241
- - **Lines of Code:** ~2,500
242
- - **Test Coverage:** Core utilities tested
243
- - **Commands:** 7/7 working
244
- - **Phases Complete:** 8/14 (57%)
245
-
246
- ## 🎓 What We Built
247
-
248
- A complete, production-ready CLI system that:
249
- - Authenticates users with tokens
250
- - Manages device activations
251
- - Delivers code recipes securely
252
- - Injects navigation automatically
253
- - Tracks installations
254
- - Watermarks code for license tracking
255
- - Supports dry-run mode
256
- - Provides friendly error messages
257
- - Works with both native and web targets
258
-
259
- **Status:** ✅ FULLY FUNCTIONAL AND READY FOR PRODUCTION USE!
@@ -1,261 +0,0 @@
1
- # ✅ Test Summary
2
-
3
- ## Test Results
4
-
5
- ```
6
- Test Files 5 passed (5)
7
- Tests 34 passed (34)
8
- Duration 481ms
9
- ```
10
-
11
- All tests passing! ✅
12
-
13
- ---
14
-
15
- ## Test Coverage
16
-
17
- ### 1. Hash Module (`src/core/__tests__/hash.test.ts`) - 8 tests ✅
18
-
19
- **Tests:**
20
- - ✅ Should hash file content correctly
21
- - ✅ Should return empty string for non-existent file
22
- - ✅ Should detect file modifications
23
- - ✅ Should produce same hash for same content
24
- - ✅ Should hash multiple files
25
- - ✅ Should skip binary files
26
- - ✅ Should handle empty array
27
- - ✅ Should handle non-existent files gracefully
28
-
29
- **Coverage:**
30
- - File hashing with SHA-256
31
- - Performance optimizations (binary file skipping)
32
- - Error handling for missing files
33
- - Batch processing
34
-
35
- ---
36
-
37
- ### 2. Prompt Module (`src/core/__tests__/prompt.test.ts`) - 5 tests ✅
38
-
39
- **Tests:**
40
- - ✅ Should return default value in non-TTY environment
41
- - ✅ Should return default value in CI environment
42
- - ✅ Should detect GitHub Actions
43
- - ✅ Should detect GitLab CI
44
- - ✅ Should detect CircleCI
45
-
46
- **Coverage:**
47
- - TTY detection
48
- - CI/CD environment detection
49
- - Default value handling
50
- - Multiple CI platforms
51
-
52
- ---
53
-
54
- ### 3. Journal Module (`src/core/__tests__/journal.test.ts`) - 9 tests ✅
55
-
56
- **Tests:**
57
- - ✅ Should return empty journal if file missing
58
- - ✅ Should write and read journal
59
- - ✅ Should add entry
60
- - ✅ Should replace existing entry for same feature+target
61
- - ✅ Should remove entry
62
- - ✅ Should get entry
63
- - ✅ Should handle new format with file hashes (NEW)
64
- - ✅ Should migrate old format to new format (NEW)
65
- - ✅ Should store manifest data (NEW)
66
-
67
- **Coverage:**
68
- - Basic CRUD operations
69
- - New format with file hashes
70
- - Auto-migration from old format
71
- - Manifest data storage
72
- - Backward compatibility
73
-
74
- ---
75
-
76
- ### 4. FSX Module (`src/core/__tests__/fsx.test.ts`) - 6 tests ✅
77
-
78
- **Tests:**
79
- - ✅ Should copy files successfully
80
- - ✅ Should detect conflicts
81
- - ✅ Should overwrite with force flag
82
- - ✅ Should handle dry-run mode
83
- - ✅ Should copy nested directories
84
- - ✅ Should handle empty directory
85
-
86
- **Coverage:**
87
- - File copying
88
- - Conflict detection
89
- - Force mode
90
- - Dry-run mode
91
- - Nested directory handling
92
-
93
- ---
94
-
95
- ### 5. Validate Module (`src/core/__tests__/validate.test.ts`) - 6 tests ✅
96
-
97
- **Tests:**
98
- - ✅ Should validate signature file
99
- - ✅ Should throw on missing signature
100
- - ✅ Should validate target
101
- - ✅ Should throw on invalid target
102
- - ✅ Should validate native target
103
- - ✅ Should validate web target
104
-
105
- **Coverage:**
106
- - Signature validation
107
- - Target validation
108
- - Error handling
109
-
110
- ---
111
-
112
- ## Test Files Created
113
-
114
- 1. ✅ `src/core/__tests__/hash.test.ts` (NEW)
115
- 2. ✅ `src/core/__tests__/prompt.test.ts` (NEW)
116
- 3. ✅ `src/core/__tests__/fsx.test.ts` (NEW)
117
- 4. ✅ `src/core/__tests__/journal.test.ts` (UPDATED - added 3 new tests)
118
- 5. ✅ `src/core/__tests__/validate.test.ts` (EXISTING)
119
-
120
- ---
121
-
122
- ## What's Tested
123
-
124
- ### Core Functionality ✅
125
- - File hashing (SHA-256)
126
- - User prompts with CI/CD detection
127
- - Journal CRUD operations
128
- - File copying with conflict detection
129
- - Repository validation
130
-
131
- ### New Features ✅
132
- - File hash storage in journal
133
- - Auto-migration from old journal format
134
- - Manifest data storage
135
- - Conflict detection in copyTree
136
- - Interactive mode support
137
- - Force mode support
138
- - Dry-run mode support
139
-
140
- ### Edge Cases ✅
141
- - Non-existent files
142
- - Binary files
143
- - Empty directories
144
- - Nested directories
145
- - CI/CD environments (no TTY)
146
- - Multiple CI platforms
147
- - Old journal format migration
148
- - Missing files during hashing
149
-
150
- ---
151
-
152
- ## What's NOT Tested (Integration Tests Needed)
153
-
154
- ### Commands (Need Manual/Integration Testing)
155
- - ❌ `vf add` command (full flow)
156
- - ❌ `vf remove` command (full flow)
157
- - ❌ `vf status` command
158
- - ❌ `vf checklist` command
159
-
160
- ### Complex Scenarios
161
- - ❌ Interactive prompts (requires user input)
162
- - ❌ Navigation injection
163
- - ❌ Watermark addition
164
- - ❌ Recipe fetching from API
165
- - ❌ Zip extraction
166
- - ❌ Full end-to-end flow
167
-
168
- **Note:** These require integration tests or manual testing as they involve:
169
- - User interaction
170
- - Network requests
171
- - File system operations across multiple modules
172
- - External dependencies (API, recipes)
173
-
174
- ---
175
-
176
- ## Running Tests
177
-
178
- ```bash
179
- # Run all tests
180
- npm test
181
-
182
- # Run tests once (no watch)
183
- npm test -- --run
184
-
185
- # Run specific test file
186
- npm test -- hash.test.ts
187
-
188
- # Run with coverage
189
- npm test -- --coverage
190
- ```
191
-
192
- ---
193
-
194
- ## Test Quality
195
-
196
- ### Good Practices ✅
197
- - ✅ Isolated tests (each test is independent)
198
- - ✅ Cleanup after tests (afterEach hooks)
199
- - ✅ Descriptive test names
200
- - ✅ Testing both success and error cases
201
- - ✅ Testing edge cases
202
- - ✅ Using temporary directories
203
- - ✅ No test interdependencies
204
-
205
- ### Coverage
206
- - **Unit Tests:** 34 tests covering core modules
207
- - **Integration Tests:** Manual testing needed
208
- - **E2E Tests:** Manual testing needed
209
-
210
- ---
211
-
212
- ## Next Steps for Testing
213
-
214
- ### 1. Integration Tests (Future)
215
- Create integration tests for commands:
216
- ```typescript
217
- describe('vf add integration', () => {
218
- it('should install feature end-to-end', async () => {
219
- // Setup test repo
220
- // Run vf add
221
- // Verify files copied
222
- // Verify journal updated
223
- // Verify navigation added
224
- });
225
- });
226
- ```
227
-
228
- ### 2. E2E Tests (Future)
229
- Test full user workflows:
230
- ```bash
231
- # Test script
232
- vf login --token TEST_TOKEN
233
- vf add charts --dry-run
234
- vf add charts
235
- vf status
236
- vf checklist charts
237
- vf remove charts
238
- ```
239
-
240
- ### 3. Manual Testing Checklist
241
- - [ ] Test with real VibeFast monorepo
242
- - [ ] Test with real recipes
243
- - [ ] Test interactive prompts
244
- - [ ] Test in CI/CD environment
245
- - [ ] Test with conflicts
246
- - [ ] Test with modified files
247
- - [ ] Test migration from old journal
248
-
249
- ---
250
-
251
- ## Summary
252
-
253
- ✅ **34 unit tests passing**
254
- ✅ **All core modules tested**
255
- ✅ **New features tested**
256
- ✅ **Edge cases covered**
257
- ✅ **Good test quality**
258
-
259
- The CLI has solid unit test coverage for all core functionality. Integration and E2E tests can be added later as needed.
260
-
261
- **Ready for manual testing and production use!** 🚀