@posthog/wizard 1.36.0 → 2.0.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 (487) hide show
  1. package/README.md +80 -3
  2. package/dist/bin.js +200 -24
  3. package/dist/bin.js.map +1 -1
  4. package/dist/src/__tests__/cli.test.js +10 -74
  5. package/dist/src/__tests__/cli.test.js.map +1 -1
  6. package/dist/src/__tests__/run.test.js +50 -5
  7. package/dist/src/__tests__/run.test.js.map +1 -1
  8. package/dist/src/__tests__/wizard-abort.test.js +127 -0
  9. package/dist/src/__tests__/wizard-abort.test.js.map +1 -0
  10. package/dist/src/{android → frameworks/android}/android-wizard-agent.d.ts +1 -1
  11. package/dist/src/{android → frameworks/android}/android-wizard-agent.js +2 -2
  12. package/dist/src/frameworks/android/android-wizard-agent.js.map +1 -0
  13. package/dist/src/{android → frameworks/android}/utils.d.ts +1 -1
  14. package/dist/src/{android → frameworks/android}/utils.js +1 -1
  15. package/dist/src/frameworks/android/utils.js.map +1 -0
  16. package/dist/src/{angular → frameworks/angular}/angular-wizard-agent.d.ts +1 -1
  17. package/dist/src/{angular → frameworks/angular}/angular-wizard-agent.js +9 -7
  18. package/dist/src/frameworks/angular/angular-wizard-agent.js.map +1 -0
  19. package/dist/src/{angular → frameworks/angular}/utils.js +1 -1
  20. package/dist/src/frameworks/angular/utils.js.map +1 -0
  21. package/dist/src/{astro → frameworks/astro}/astro-wizard-agent.d.ts +1 -1
  22. package/dist/src/{astro → frameworks/astro}/astro-wizard-agent.js +9 -7
  23. package/dist/src/frameworks/astro/astro-wizard-agent.js.map +1 -0
  24. package/dist/src/{astro → frameworks/astro}/utils.d.ts +2 -5
  25. package/dist/src/{astro → frameworks/astro}/utils.js +3 -52
  26. package/dist/src/frameworks/astro/utils.js.map +1 -0
  27. package/dist/src/{django → frameworks/django}/django-wizard-agent.d.ts +1 -1
  28. package/dist/src/{django → frameworks/django}/django-wizard-agent.js +3 -3
  29. package/dist/src/frameworks/django/django-wizard-agent.js.map +1 -0
  30. package/dist/src/{django → frameworks/django}/utils.d.ts +1 -1
  31. package/dist/src/{django → frameworks/django}/utils.js +6 -6
  32. package/dist/src/frameworks/django/utils.js.map +1 -0
  33. package/dist/src/frameworks/fastapi/fastapi-wizard-agent.d.ts +5 -0
  34. package/dist/src/{fastapi → frameworks/fastapi}/fastapi-wizard-agent.js +3 -32
  35. package/dist/src/frameworks/fastapi/fastapi-wizard-agent.js.map +1 -0
  36. package/dist/src/{fastapi → frameworks/fastapi}/utils.d.ts +1 -1
  37. package/dist/src/{fastapi → frameworks/fastapi}/utils.js +4 -4
  38. package/dist/src/frameworks/fastapi/utils.js.map +1 -0
  39. package/dist/src/{flask → frameworks/flask}/flask-wizard-agent.d.ts +1 -1
  40. package/dist/src/{flask → frameworks/flask}/flask-wizard-agent.js +3 -3
  41. package/dist/src/frameworks/flask/flask-wizard-agent.js.map +1 -0
  42. package/dist/src/{flask → frameworks/flask}/utils.d.ts +1 -1
  43. package/dist/src/{flask → frameworks/flask}/utils.js +7 -7
  44. package/dist/src/frameworks/flask/utils.js.map +1 -0
  45. package/dist/src/{javascript-node → frameworks/javascript-node}/javascript-node-wizard-agent.d.ts +1 -1
  46. package/dist/src/{javascript-node → frameworks/javascript-node}/javascript-node-wizard-agent.js +4 -4
  47. package/dist/src/frameworks/javascript-node/javascript-node-wizard-agent.js.map +1 -0
  48. package/dist/src/{javascript-web → frameworks/javascript-web}/javascript-web-wizard-agent.d.ts +1 -1
  49. package/dist/src/{javascript-web → frameworks/javascript-web}/javascript-web-wizard-agent.js +16 -14
  50. package/dist/src/frameworks/javascript-web/javascript-web-wizard-agent.js.map +1 -0
  51. package/dist/src/{javascript-web → frameworks/javascript-web}/utils.d.ts +6 -1
  52. package/dist/src/{javascript-web → frameworks/javascript-web}/utils.js +49 -1
  53. package/dist/src/frameworks/javascript-web/utils.js.map +1 -0
  54. package/dist/src/{laravel → frameworks/laravel}/laravel-wizard-agent.d.ts +1 -1
  55. package/dist/src/{laravel → frameworks/laravel}/laravel-wizard-agent.js +2 -2
  56. package/dist/src/frameworks/laravel/laravel-wizard-agent.js.map +1 -0
  57. package/dist/src/{laravel → frameworks/laravel}/utils.d.ts +1 -1
  58. package/dist/src/{laravel → frameworks/laravel}/utils.js +5 -5
  59. package/dist/src/frameworks/laravel/utils.js.map +1 -0
  60. package/dist/src/{nextjs → frameworks/nextjs}/nextjs-wizard-agent.d.ts +1 -1
  61. package/dist/src/{nextjs → frameworks/nextjs}/nextjs-wizard-agent.js +30 -8
  62. package/dist/src/frameworks/nextjs/nextjs-wizard-agent.js.map +1 -0
  63. package/dist/src/{nextjs → frameworks/nextjs}/utils.d.ts +5 -2
  64. package/dist/src/{nextjs → frameworks/nextjs}/utils.js +6 -20
  65. package/dist/src/frameworks/nextjs/utils.js.map +1 -0
  66. package/dist/src/{nuxt → frameworks/nuxt}/nuxt-wizard-agent.d.ts +1 -1
  67. package/dist/src/{nuxt → frameworks/nuxt}/nuxt-wizard-agent.js +11 -9
  68. package/dist/src/frameworks/nuxt/nuxt-wizard-agent.js.map +1 -0
  69. package/dist/src/{python → frameworks/python}/python-wizard-agent.d.ts +1 -1
  70. package/dist/src/{python → frameworks/python}/python-wizard-agent.js +3 -3
  71. package/dist/src/frameworks/python/python-wizard-agent.js.map +1 -0
  72. package/dist/src/{python → frameworks/python}/utils.d.ts +1 -1
  73. package/dist/src/frameworks/python/utils.js.map +1 -0
  74. package/dist/src/{rails → frameworks/rails}/rails-wizard-agent.d.ts +1 -1
  75. package/dist/src/{rails → frameworks/rails}/rails-wizard-agent.js +2 -2
  76. package/dist/src/frameworks/rails/rails-wizard-agent.js.map +1 -0
  77. package/dist/src/{rails → frameworks/rails}/utils.d.ts +1 -1
  78. package/dist/src/{rails → frameworks/rails}/utils.js +4 -4
  79. package/dist/src/frameworks/rails/utils.js.map +1 -0
  80. package/dist/src/{react-native → frameworks/react-native}/react-native-wizard-agent.d.ts +1 -1
  81. package/dist/src/{react-native → frameworks/react-native}/react-native-wizard-agent.js +9 -7
  82. package/dist/src/frameworks/react-native/react-native-wizard-agent.js.map +1 -0
  83. package/dist/src/{react-native → frameworks/react-native}/utils.d.ts +1 -1
  84. package/dist/src/{react-native → frameworks/react-native}/utils.js +7 -10
  85. package/dist/src/frameworks/react-native/utils.js.map +1 -0
  86. package/dist/src/{react-router → frameworks/react-router}/react-router-wizard-agent.d.ts +1 -1
  87. package/dist/src/{react-router → frameworks/react-router}/react-router-wizard-agent.js +15 -8
  88. package/dist/src/frameworks/react-router/react-router-wizard-agent.js.map +1 -0
  89. package/dist/src/frameworks/react-router/utils.d.ts +13 -0
  90. package/dist/src/{react-router → frameworks/react-router}/utils.js +14 -111
  91. package/dist/src/frameworks/react-router/utils.js.map +1 -0
  92. package/dist/src/{ruby → frameworks/ruby}/ruby-wizard-agent.d.ts +1 -1
  93. package/dist/src/{ruby → frameworks/ruby}/ruby-wizard-agent.js +2 -2
  94. package/dist/src/frameworks/ruby/ruby-wizard-agent.js.map +1 -0
  95. package/dist/src/{ruby → frameworks/ruby}/utils.d.ts +1 -1
  96. package/dist/src/{ruby → frameworks/ruby}/utils.js +1 -1
  97. package/dist/src/frameworks/ruby/utils.js.map +1 -0
  98. package/dist/src/{svelte → frameworks/svelte}/svelte-wizard-agent.d.ts +1 -1
  99. package/dist/src/{svelte → frameworks/svelte}/svelte-wizard-agent.js +5 -5
  100. package/dist/src/frameworks/svelte/svelte-wizard-agent.js.map +1 -0
  101. package/dist/src/{swift → frameworks/swift}/swift-wizard-agent.d.ts +1 -1
  102. package/dist/src/{swift → frameworks/swift}/swift-wizard-agent.js +2 -2
  103. package/dist/src/frameworks/swift/swift-wizard-agent.js.map +1 -0
  104. package/dist/src/{swift → frameworks/swift}/utils.d.ts +1 -1
  105. package/dist/src/frameworks/swift/utils.js.map +1 -0
  106. package/dist/src/{tanstack-router → frameworks/tanstack-router}/tanstack-router-wizard-agent.d.ts +1 -1
  107. package/dist/src/{tanstack-router → frameworks/tanstack-router}/tanstack-router-wizard-agent.js +15 -8
  108. package/dist/src/frameworks/tanstack-router/tanstack-router-wizard-agent.js.map +1 -0
  109. package/dist/src/frameworks/tanstack-router/utils.d.ts +11 -0
  110. package/dist/src/{tanstack-router → frameworks/tanstack-router}/utils.js +4 -47
  111. package/dist/src/frameworks/tanstack-router/utils.js.map +1 -0
  112. package/dist/src/{tanstack-start → frameworks/tanstack-start}/tanstack-start-wizard-agent.d.ts +1 -1
  113. package/dist/src/{tanstack-start → frameworks/tanstack-start}/tanstack-start-wizard-agent.js +9 -7
  114. package/dist/src/frameworks/tanstack-start/tanstack-start-wizard-agent.js.map +1 -0
  115. package/dist/src/{tanstack-start → frameworks/tanstack-start}/utils.js +1 -1
  116. package/dist/src/frameworks/tanstack-start/utils.js.map +1 -0
  117. package/dist/src/{vue → frameworks/vue}/vue-wizard-agent.d.ts +1 -1
  118. package/dist/src/{vue → frameworks/vue}/vue-wizard-agent.js +8 -8
  119. package/dist/src/frameworks/vue/vue-wizard-agent.js.map +1 -0
  120. package/dist/src/lib/__tests__/agent-interface.test.js +91 -19
  121. package/dist/src/lib/__tests__/agent-interface.test.js.map +1 -1
  122. package/dist/src/lib/agent-interface.d.ts +49 -2
  123. package/dist/src/lib/agent-interface.js +254 -40
  124. package/dist/src/lib/agent-interface.js.map +1 -1
  125. package/dist/src/lib/agent-runner.d.ts +4 -2
  126. package/dist/src/lib/agent-runner.js +131 -136
  127. package/dist/src/lib/agent-runner.js.map +1 -1
  128. package/dist/src/lib/api.d.ts +4 -4
  129. package/dist/src/lib/commandments.js +1 -0
  130. package/dist/src/lib/commandments.js.map +1 -1
  131. package/dist/src/lib/constants.d.ts +23 -8
  132. package/dist/src/lib/constants.js +36 -8
  133. package/dist/src/lib/constants.js.map +1 -1
  134. package/dist/src/lib/framework-config.d.ts +26 -0
  135. package/dist/src/lib/framework-config.js.map +1 -1
  136. package/dist/src/lib/health-checks/__tests__/health-checks.test.d.ts +18 -0
  137. package/dist/src/lib/health-checks/__tests__/health-checks.test.js +752 -0
  138. package/dist/src/lib/health-checks/__tests__/health-checks.test.js.map +1 -0
  139. package/dist/src/lib/health-checks/endpoints.d.ts +3 -0
  140. package/dist/src/lib/health-checks/endpoints.js +46 -0
  141. package/dist/src/lib/health-checks/endpoints.js.map +1 -0
  142. package/dist/src/lib/health-checks/index.d.ts +4 -0
  143. package/dist/src/lib/health-checks/index.js +23 -0
  144. package/dist/src/lib/health-checks/index.js.map +1 -0
  145. package/dist/src/lib/health-checks/readiness.d.ts +24 -0
  146. package/dist/src/lib/health-checks/readiness.js +119 -0
  147. package/dist/src/lib/health-checks/readiness.js.map +1 -0
  148. package/dist/src/lib/health-checks/statuspage.d.ts +9 -0
  149. package/dist/src/lib/health-checks/statuspage.js +105 -0
  150. package/dist/src/lib/health-checks/statuspage.js.map +1 -0
  151. package/dist/src/lib/health-checks/types.d.ts +31 -0
  152. package/dist/src/lib/health-checks/types.js +10 -0
  153. package/dist/src/lib/health-checks/types.js.map +1 -0
  154. package/dist/src/lib/middleware/benchmark.d.ts +2 -2
  155. package/dist/src/lib/middleware/benchmark.js +3 -3
  156. package/dist/src/lib/middleware/benchmark.js.map +1 -1
  157. package/dist/src/lib/middleware/benchmarks/json-writer.js +2 -2
  158. package/dist/src/lib/middleware/benchmarks/json-writer.js.map +1 -1
  159. package/dist/src/lib/middleware/benchmarks/summary.d.ts +2 -2
  160. package/dist/src/lib/middleware/benchmarks/summary.js +9 -9
  161. package/dist/src/lib/middleware/benchmarks/summary.js.map +1 -1
  162. package/dist/src/lib/middleware/types.d.ts +2 -2
  163. package/dist/src/lib/middleware/types.js.map +1 -1
  164. package/dist/src/lib/package-manager-detection.js +1 -1
  165. package/dist/src/lib/package-manager-detection.js.map +1 -1
  166. package/dist/src/lib/registry.js +21 -21
  167. package/dist/src/lib/registry.js.map +1 -1
  168. package/dist/src/lib/version.d.ts +1 -1
  169. package/dist/src/lib/version.js +1 -1
  170. package/dist/src/lib/version.js.map +1 -1
  171. package/dist/src/lib/wizard-session.d.ts +115 -0
  172. package/dist/src/lib/wizard-session.js +104 -0
  173. package/dist/src/lib/wizard-session.js.map +1 -0
  174. package/dist/src/lib/wizard-tools.js +13 -0
  175. package/dist/src/lib/wizard-tools.js.map +1 -1
  176. package/dist/src/run.d.ts +3 -3
  177. package/dist/src/run.js +73 -56
  178. package/dist/src/run.js.map +1 -1
  179. package/dist/src/steps/add-mcp-server-to-clients/MCPClient.d.ts +4 -5
  180. package/dist/src/steps/add-mcp-server-to-clients/MCPClient.js +6 -6
  181. package/dist/src/steps/add-mcp-server-to-clients/MCPClient.js.map +1 -1
  182. package/dist/src/steps/add-mcp-server-to-clients/__tests__/defaults.test.js +1 -21
  183. package/dist/src/steps/add-mcp-server-to-clients/__tests__/defaults.test.js.map +1 -1
  184. package/dist/src/steps/add-mcp-server-to-clients/clients/__tests__/claude.test.js +2 -7
  185. package/dist/src/steps/add-mcp-server-to-clients/clients/__tests__/claude.test.js.map +1 -1
  186. package/dist/src/steps/add-mcp-server-to-clients/clients/__tests__/codex.test.js +18 -22
  187. package/dist/src/steps/add-mcp-server-to-clients/clients/__tests__/codex.test.js.map +1 -1
  188. package/dist/src/steps/add-mcp-server-to-clients/clients/claude-code.d.ts +7 -8
  189. package/dist/src/steps/add-mcp-server-to-clients/clients/claude-code.js +2 -2
  190. package/dist/src/steps/add-mcp-server-to-clients/clients/claude-code.js.map +1 -1
  191. package/dist/src/steps/add-mcp-server-to-clients/clients/claude.d.ts +6 -6
  192. package/dist/src/steps/add-mcp-server-to-clients/clients/codex.d.ts +7 -8
  193. package/dist/src/steps/add-mcp-server-to-clients/clients/codex.js +9 -10
  194. package/dist/src/steps/add-mcp-server-to-clients/clients/codex.js.map +1 -1
  195. package/dist/src/steps/add-mcp-server-to-clients/clients/cursor.d.ts +8 -9
  196. package/dist/src/steps/add-mcp-server-to-clients/clients/cursor.js +4 -4
  197. package/dist/src/steps/add-mcp-server-to-clients/clients/cursor.js.map +1 -1
  198. package/dist/src/steps/add-mcp-server-to-clients/clients/visual-studio-code.d.ts +8 -9
  199. package/dist/src/steps/add-mcp-server-to-clients/clients/visual-studio-code.js +4 -4
  200. package/dist/src/steps/add-mcp-server-to-clients/clients/visual-studio-code.js.map +1 -1
  201. package/dist/src/steps/add-mcp-server-to-clients/clients/zed.d.ts +8 -9
  202. package/dist/src/steps/add-mcp-server-to-clients/clients/zed.js +4 -4
  203. package/dist/src/steps/add-mcp-server-to-clients/clients/zed.js.map +1 -1
  204. package/dist/src/steps/add-mcp-server-to-clients/defaults.d.ts +9 -10
  205. package/dist/src/steps/add-mcp-server-to-clients/defaults.js +6 -13
  206. package/dist/src/steps/add-mcp-server-to-clients/defaults.js.map +1 -1
  207. package/dist/src/steps/add-mcp-server-to-clients/index.d.ts +6 -5
  208. package/dist/src/steps/add-mcp-server-to-clients/index.js +26 -110
  209. package/dist/src/steps/add-mcp-server-to-clients/index.js.map +1 -1
  210. package/dist/src/steps/add-or-update-environment-variables.js +15 -20
  211. package/dist/src/steps/add-or-update-environment-variables.js.map +1 -1
  212. package/dist/src/steps/index.d.ts +0 -1
  213. package/dist/src/steps/index.js +0 -1
  214. package/dist/src/steps/index.js.map +1 -1
  215. package/dist/src/steps/run-prettier.js +9 -11
  216. package/dist/src/steps/run-prettier.js.map +1 -1
  217. package/dist/src/steps/upload-environment-variables/EnvironmentProvider.d.ts +6 -3
  218. package/dist/src/steps/upload-environment-variables/EnvironmentProvider.js.map +1 -1
  219. package/dist/src/steps/upload-environment-variables/index.d.ts +3 -3
  220. package/dist/src/steps/upload-environment-variables/index.js +7 -35
  221. package/dist/src/steps/upload-environment-variables/index.js.map +1 -1
  222. package/dist/src/steps/upload-environment-variables/providers/vercel.d.ts +3 -2
  223. package/dist/src/steps/upload-environment-variables/providers/vercel.js +2 -2
  224. package/dist/src/steps/upload-environment-variables/providers/vercel.js.map +1 -1
  225. package/dist/src/ui/index.d.ts +8 -0
  226. package/dist/src/ui/index.js +17 -0
  227. package/dist/src/ui/index.js.map +1 -0
  228. package/dist/src/ui/logging-ui.d.ts +44 -0
  229. package/dist/src/ui/logging-ui.js +103 -0
  230. package/dist/src/ui/logging-ui.js.map +1 -0
  231. package/dist/src/ui/tui/App.d.ts +6 -0
  232. package/dist/src/ui/tui/App.js +10 -0
  233. package/dist/src/ui/tui/App.js.map +1 -0
  234. package/dist/src/ui/tui/__tests__/layout-helpers.test.js +68 -0
  235. package/dist/src/ui/tui/__tests__/layout-helpers.test.js.map +1 -0
  236. package/dist/src/ui/tui/__tests__/store.test.d.ts +1 -0
  237. package/dist/src/ui/tui/__tests__/store.test.js +723 -0
  238. package/dist/src/ui/tui/__tests__/store.test.js.map +1 -0
  239. package/dist/src/ui/tui/components/LearnCard.d.ts +10 -0
  240. package/dist/src/ui/tui/components/LearnCard.js +217 -0
  241. package/dist/src/ui/tui/components/LearnCard.js.map +1 -0
  242. package/dist/src/ui/tui/components/TipsCard.d.ts +9 -0
  243. package/dist/src/ui/tui/components/TipsCard.js +55 -0
  244. package/dist/src/ui/tui/components/TipsCard.js.map +1 -0
  245. package/dist/src/ui/tui/components/TitleBar.d.ts +6 -0
  246. package/dist/src/ui/tui/components/TitleBar.js +17 -0
  247. package/dist/src/ui/tui/components/TitleBar.js.map +1 -0
  248. package/dist/src/ui/tui/flows.d.ts +38 -0
  249. package/dist/src/ui/tui/flows.js +82 -0
  250. package/dist/src/ui/tui/flows.js.map +1 -0
  251. package/dist/src/ui/tui/hooks/useStdoutDimensions.d.ts +9 -0
  252. package/dist/src/ui/tui/hooks/useStdoutDimensions.js +37 -0
  253. package/dist/src/ui/tui/hooks/useStdoutDimensions.js.map +1 -0
  254. package/dist/src/ui/tui/ink-ui.d.ts +50 -0
  255. package/dist/src/ui/tui/ink-ui.js +108 -0
  256. package/dist/src/ui/tui/ink-ui.js.map +1 -0
  257. package/dist/src/ui/tui/package.json +1 -0
  258. package/dist/src/ui/tui/playground/PlaygroundApp.d.ts +12 -0
  259. package/dist/src/ui/tui/playground/PlaygroundApp.js +32 -0
  260. package/dist/src/ui/tui/playground/PlaygroundApp.js.map +1 -0
  261. package/dist/src/ui/tui/playground/demos/InputDemo.d.ts +4 -0
  262. package/dist/src/ui/tui/playground/demos/InputDemo.js +53 -0
  263. package/dist/src/ui/tui/playground/demos/InputDemo.js.map +1 -0
  264. package/dist/src/ui/tui/playground/demos/LayoutDemo.d.ts +5 -0
  265. package/dist/src/ui/tui/playground/demos/LayoutDemo.js +25 -0
  266. package/dist/src/ui/tui/playground/demos/LayoutDemo.js.map +1 -0
  267. package/dist/src/ui/tui/playground/demos/LogDemo.d.ts +5 -0
  268. package/dist/src/ui/tui/playground/demos/LogDemo.js +53 -0
  269. package/dist/src/ui/tui/playground/demos/LogDemo.js.map +1 -0
  270. package/dist/src/ui/tui/playground/demos/ProgressDemo.d.ts +5 -0
  271. package/dist/src/ui/tui/playground/demos/ProgressDemo.js +58 -0
  272. package/dist/src/ui/tui/playground/demos/ProgressDemo.js.map +1 -0
  273. package/dist/src/ui/tui/playground/demos/RunScreenDemo.d.ts +11 -0
  274. package/dist/src/ui/tui/playground/demos/RunScreenDemo.js +159 -0
  275. package/dist/src/ui/tui/playground/demos/RunScreenDemo.js.map +1 -0
  276. package/dist/src/ui/tui/playground/demos/WelcomeDemo.d.ts +9 -0
  277. package/dist/src/ui/tui/playground/demos/WelcomeDemo.js +15 -0
  278. package/dist/src/ui/tui/playground/demos/WelcomeDemo.js.map +1 -0
  279. package/dist/src/ui/tui/playground/start-playground.d.ts +4 -0
  280. package/dist/src/ui/tui/playground/start-playground.js +24 -0
  281. package/dist/src/ui/tui/playground/start-playground.js.map +1 -0
  282. package/dist/src/ui/tui/primitives/CardLayout.d.ts +12 -0
  283. package/dist/src/ui/tui/primitives/CardLayout.js +10 -0
  284. package/dist/src/ui/tui/primitives/CardLayout.js.map +1 -0
  285. package/dist/src/ui/tui/primitives/ConfirmationInput.d.ts +13 -0
  286. package/dist/src/ui/tui/primitives/ConfirmationInput.js +35 -0
  287. package/dist/src/ui/tui/primitives/ConfirmationInput.js.map +1 -0
  288. package/dist/src/ui/tui/primitives/ContentSequencer.d.ts +42 -0
  289. package/dist/src/ui/tui/primitives/ContentSequencer.js +137 -0
  290. package/dist/src/ui/tui/primitives/ContentSequencer.js.map +1 -0
  291. package/dist/src/ui/tui/primitives/DissolveTransition.d.ts +21 -0
  292. package/dist/src/ui/tui/primitives/DissolveTransition.js +149 -0
  293. package/dist/src/ui/tui/primitives/DissolveTransition.js.map +1 -0
  294. package/dist/src/ui/tui/primitives/EventPlanViewer.d.ts +9 -0
  295. package/dist/src/ui/tui/primitives/EventPlanViewer.js +9 -0
  296. package/dist/src/ui/tui/primitives/EventPlanViewer.js.map +1 -0
  297. package/dist/src/ui/tui/primitives/HNViewer.d.ts +7 -0
  298. package/dist/src/ui/tui/primitives/HNViewer.js +63 -0
  299. package/dist/src/ui/tui/primitives/HNViewer.js.map +1 -0
  300. package/dist/src/ui/tui/primitives/LinesBlock.d.ts +16 -0
  301. package/dist/src/ui/tui/primitives/LinesBlock.js +37 -0
  302. package/dist/src/ui/tui/primitives/LinesBlock.js.map +1 -0
  303. package/dist/src/ui/tui/primitives/LoadingBox.d.ts +8 -0
  304. package/dist/src/ui/tui/primitives/LoadingBox.js +10 -0
  305. package/dist/src/ui/tui/primitives/LoadingBox.js.map +1 -0
  306. package/dist/src/ui/tui/primitives/LogViewer.d.ts +11 -0
  307. package/dist/src/ui/tui/primitives/LogViewer.js +55 -0
  308. package/dist/src/ui/tui/primitives/LogViewer.js.map +1 -0
  309. package/dist/src/ui/tui/primitives/NodeBlock.d.ts +13 -0
  310. package/dist/src/ui/tui/primitives/NodeBlock.js +17 -0
  311. package/dist/src/ui/tui/primitives/NodeBlock.js.map +1 -0
  312. package/dist/src/ui/tui/primitives/PickerMenu.d.ts +20 -0
  313. package/dist/src/ui/tui/primitives/PickerMenu.js +134 -0
  314. package/dist/src/ui/tui/primitives/PickerMenu.js.map +1 -0
  315. package/dist/src/ui/tui/primitives/ProgressList.d.ts +15 -0
  316. package/dist/src/ui/tui/primitives/ProgressList.js +30 -0
  317. package/dist/src/ui/tui/primitives/ProgressList.js.map +1 -0
  318. package/dist/src/ui/tui/primitives/PromptLabel.d.ts +11 -0
  319. package/dist/src/ui/tui/primitives/PromptLabel.js +13 -0
  320. package/dist/src/ui/tui/primitives/PromptLabel.js.map +1 -0
  321. package/dist/src/ui/tui/primitives/ScreenContainer.d.ts +16 -0
  322. package/dist/src/ui/tui/primitives/ScreenContainer.js +36 -0
  323. package/dist/src/ui/tui/primitives/ScreenContainer.js.map +1 -0
  324. package/dist/src/ui/tui/primitives/ScreenErrorBoundary.d.ts +22 -0
  325. package/dist/src/ui/tui/primitives/ScreenErrorBoundary.js +35 -0
  326. package/dist/src/ui/tui/primitives/ScreenErrorBoundary.js.map +1 -0
  327. package/dist/src/ui/tui/primitives/SplitView.d.ts +11 -0
  328. package/dist/src/ui/tui/primitives/SplitView.js +9 -0
  329. package/dist/src/ui/tui/primitives/SplitView.js.map +1 -0
  330. package/dist/src/ui/tui/primitives/TabContainer.d.ts +23 -0
  331. package/dist/src/ui/tui/primitives/TabContainer.js +45 -0
  332. package/dist/src/ui/tui/primitives/TabContainer.js.map +1 -0
  333. package/dist/src/ui/tui/primitives/TextBlock.d.ts +41 -0
  334. package/dist/src/ui/tui/primitives/TextBlock.js +144 -0
  335. package/dist/src/ui/tui/primitives/TextBlock.js.map +1 -0
  336. package/dist/src/ui/tui/primitives/content-types.d.ts +37 -0
  337. package/dist/src/ui/tui/primitives/content-types.js +19 -0
  338. package/dist/src/ui/tui/primitives/content-types.js.map +1 -0
  339. package/dist/src/ui/tui/primitives/index.d.ts +24 -0
  340. package/dist/src/ui/tui/primitives/index.js +21 -0
  341. package/dist/src/ui/tui/primitives/index.js.map +1 -0
  342. package/dist/src/ui/tui/primitives/layout-helpers.d.ts +36 -0
  343. package/dist/src/ui/tui/primitives/layout-helpers.js +95 -0
  344. package/dist/src/ui/tui/primitives/layout-helpers.js.map +1 -0
  345. package/dist/src/ui/tui/primitives/text-helpers.d.ts +10 -0
  346. package/dist/src/ui/tui/primitives/text-helpers.js +43 -0
  347. package/dist/src/ui/tui/primitives/text-helpers.js.map +1 -0
  348. package/dist/src/ui/tui/router.d.ts +56 -0
  349. package/dist/src/ui/tui/router.js +94 -0
  350. package/dist/src/ui/tui/router.js.map +1 -0
  351. package/dist/src/ui/tui/screen-registry.d.ts +19 -0
  352. package/dist/src/ui/tui/screen-registry.js +34 -0
  353. package/dist/src/ui/tui/screen-registry.js.map +1 -0
  354. package/dist/src/ui/tui/screens/AuthScreen.d.ts +13 -0
  355. package/dist/src/ui/tui/screens/AuthScreen.js +20 -0
  356. package/dist/src/ui/tui/screens/AuthScreen.js.map +1 -0
  357. package/dist/src/ui/tui/screens/IntroScreen.d.ts +16 -0
  358. package/dist/src/ui/tui/screens/IntroScreen.js +63 -0
  359. package/dist/src/ui/tui/screens/IntroScreen.js.map +1 -0
  360. package/dist/src/ui/tui/screens/McpScreen.d.ts +24 -0
  361. package/dist/src/ui/tui/screens/McpScreen.js +112 -0
  362. package/dist/src/ui/tui/screens/McpScreen.js.map +1 -0
  363. package/dist/src/ui/tui/screens/OutageScreen.d.ts +10 -0
  364. package/dist/src/ui/tui/screens/OutageScreen.js +17 -0
  365. package/dist/src/ui/tui/screens/OutageScreen.js.map +1 -0
  366. package/dist/src/ui/tui/screens/OutroScreen.d.ts +11 -0
  367. package/dist/src/ui/tui/screens/OutroScreen.js +22 -0
  368. package/dist/src/ui/tui/screens/OutroScreen.js.map +1 -0
  369. package/dist/src/ui/tui/screens/RunScreen.d.ts +16 -0
  370. package/dist/src/ui/tui/screens/RunScreen.js +73 -0
  371. package/dist/src/ui/tui/screens/RunScreen.js.map +1 -0
  372. package/dist/src/ui/tui/screens/SettingsOverrideScreen.d.ts +10 -0
  373. package/dist/src/ui/tui/screens/SettingsOverrideScreen.js +24 -0
  374. package/dist/src/ui/tui/screens/SettingsOverrideScreen.js.map +1 -0
  375. package/dist/src/ui/tui/screens/SetupScreen.d.ts +13 -0
  376. package/dist/src/ui/tui/screens/SetupScreen.js +74 -0
  377. package/dist/src/ui/tui/screens/SetupScreen.js.map +1 -0
  378. package/dist/src/ui/tui/services/mcp-installer.d.ts +21 -0
  379. package/dist/src/ui/tui/services/mcp-installer.js +58 -0
  380. package/dist/src/ui/tui/services/mcp-installer.js.map +1 -0
  381. package/dist/src/ui/tui/start-tui.d.ts +9 -0
  382. package/dist/src/ui/tui/start-tui.js +41 -0
  383. package/dist/src/ui/tui/start-tui.js.map +1 -0
  384. package/dist/src/ui/tui/store.d.ts +132 -0
  385. package/dist/src/ui/tui/store.js +320 -0
  386. package/dist/src/ui/tui/store.js.map +1 -0
  387. package/dist/src/ui/tui/styles.d.ts +31 -0
  388. package/dist/src/ui/tui/styles.js +34 -0
  389. package/dist/src/ui/tui/styles.js.map +1 -0
  390. package/dist/src/ui/wizard-ui.d.ts +64 -0
  391. package/dist/src/ui/wizard-ui.js +19 -0
  392. package/dist/src/ui/wizard-ui.js.map +1 -0
  393. package/dist/src/utils/__tests__/setup-utils.test.d.ts +1 -0
  394. package/dist/src/utils/__tests__/{clack-utils.test.js → setup-utils.test.js} +31 -22
  395. package/dist/src/utils/__tests__/setup-utils.test.js.map +1 -0
  396. package/dist/src/utils/analytics.d.ts +18 -0
  397. package/dist/src/utils/analytics.js +53 -0
  398. package/dist/src/utils/analytics.js.map +1 -1
  399. package/dist/src/utils/anthropic-status.d.ts +1 -12
  400. package/dist/src/utils/anthropic-status.js +4 -56
  401. package/dist/src/utils/anthropic-status.js.map +1 -1
  402. package/dist/src/utils/custom-headers.d.ts +9 -0
  403. package/dist/src/utils/custom-headers.js +24 -0
  404. package/dist/src/utils/custom-headers.js.map +1 -0
  405. package/dist/src/utils/debug.js +2 -2
  406. package/dist/src/utils/debug.js.map +1 -1
  407. package/dist/src/utils/environment.js +4 -2
  408. package/dist/src/utils/environment.js.map +1 -1
  409. package/dist/src/utils/oauth.d.ts +0 -2
  410. package/dist/src/utils/oauth.js +18 -21
  411. package/dist/src/utils/oauth.js.map +1 -1
  412. package/dist/src/utils/package-manager.js +13 -13
  413. package/dist/src/utils/package-manager.js.map +1 -1
  414. package/dist/src/utils/setup-utils.d.ts +76 -0
  415. package/dist/src/utils/setup-utils.js +364 -0
  416. package/dist/src/utils/setup-utils.js.map +1 -0
  417. package/dist/src/utils/types.d.ts +0 -4
  418. package/dist/src/utils/types.js.map +1 -1
  419. package/dist/src/utils/urls.d.ts +1 -1
  420. package/dist/src/utils/urls.js +22 -9
  421. package/dist/src/utils/urls.js.map +1 -1
  422. package/dist/src/utils/wizard-abort.d.ts +13 -0
  423. package/dist/src/utils/wizard-abort.js +57 -0
  424. package/dist/src/utils/wizard-abort.js.map +1 -0
  425. package/package.json +19 -7
  426. package/dist/src/android/android-wizard-agent.js.map +0 -1
  427. package/dist/src/android/utils.js.map +0 -1
  428. package/dist/src/angular/angular-wizard-agent.js.map +0 -1
  429. package/dist/src/angular/utils.js.map +0 -1
  430. package/dist/src/astro/astro-wizard-agent.js.map +0 -1
  431. package/dist/src/astro/utils.js.map +0 -1
  432. package/dist/src/django/django-wizard-agent.js.map +0 -1
  433. package/dist/src/django/utils.js.map +0 -1
  434. package/dist/src/fastapi/fastapi-wizard-agent.d.ts +0 -7
  435. package/dist/src/fastapi/fastapi-wizard-agent.js.map +0 -1
  436. package/dist/src/fastapi/utils.js.map +0 -1
  437. package/dist/src/flask/flask-wizard-agent.js.map +0 -1
  438. package/dist/src/flask/utils.js.map +0 -1
  439. package/dist/src/javascript-node/javascript-node-wizard-agent.js.map +0 -1
  440. package/dist/src/javascript-web/javascript-web-wizard-agent.js.map +0 -1
  441. package/dist/src/javascript-web/utils.js.map +0 -1
  442. package/dist/src/laravel/laravel-wizard-agent.js.map +0 -1
  443. package/dist/src/laravel/utils.js.map +0 -1
  444. package/dist/src/mcp.d.ts +0 -10
  445. package/dist/src/mcp.js +0 -45
  446. package/dist/src/mcp.js.map +0 -1
  447. package/dist/src/nextjs/nextjs-wizard-agent.js.map +0 -1
  448. package/dist/src/nextjs/utils.js.map +0 -1
  449. package/dist/src/nuxt/nuxt-wizard-agent.js.map +0 -1
  450. package/dist/src/python/python-wizard-agent.js.map +0 -1
  451. package/dist/src/python/utils.js.map +0 -1
  452. package/dist/src/rails/rails-wizard-agent.js.map +0 -1
  453. package/dist/src/rails/utils.js.map +0 -1
  454. package/dist/src/react-native/react-native-wizard-agent.js.map +0 -1
  455. package/dist/src/react-native/utils.js.map +0 -1
  456. package/dist/src/react-router/react-router-wizard-agent.js.map +0 -1
  457. package/dist/src/react-router/utils.d.ts +0 -19
  458. package/dist/src/react-router/utils.js.map +0 -1
  459. package/dist/src/ruby/ruby-wizard-agent.js.map +0 -1
  460. package/dist/src/ruby/utils.js.map +0 -1
  461. package/dist/src/steps/__tests__/add-editor-rules.test.js +0 -208
  462. package/dist/src/steps/__tests__/add-editor-rules.test.js.map +0 -1
  463. package/dist/src/steps/add-editor-rules.d.ts +0 -8
  464. package/dist/src/steps/add-editor-rules.js +0 -71
  465. package/dist/src/steps/add-editor-rules.js.map +0 -1
  466. package/dist/src/svelte/svelte-wizard-agent.js.map +0 -1
  467. package/dist/src/swift/swift-wizard-agent.js.map +0 -1
  468. package/dist/src/swift/utils.js.map +0 -1
  469. package/dist/src/tanstack-router/tanstack-router-wizard-agent.js.map +0 -1
  470. package/dist/src/tanstack-router/utils.d.ts +0 -17
  471. package/dist/src/tanstack-router/utils.js.map +0 -1
  472. package/dist/src/tanstack-start/tanstack-start-wizard-agent.js.map +0 -1
  473. package/dist/src/tanstack-start/utils.js.map +0 -1
  474. package/dist/src/utils/__tests__/clack-utils.test.js.map +0 -1
  475. package/dist/src/utils/clack-utils.d.ts +0 -190
  476. package/dist/src/utils/clack-utils.js +0 -728
  477. package/dist/src/utils/clack-utils.js.map +0 -1
  478. package/dist/src/utils/clack.d.ts +0 -2
  479. package/dist/src/utils/clack.js +0 -9
  480. package/dist/src/utils/clack.js.map +0 -1
  481. package/dist/src/vue/vue-wizard-agent.js.map +0 -1
  482. /package/dist/src/{steps/__tests__/add-editor-rules.test.d.ts → __tests__/wizard-abort.test.d.ts} +0 -0
  483. /package/dist/src/{angular → frameworks/angular}/utils.d.ts +0 -0
  484. /package/dist/src/{python → frameworks/python}/utils.js +0 -0
  485. /package/dist/src/{swift → frameworks/swift}/utils.js +0 -0
  486. /package/dist/src/{tanstack-start → frameworks/tanstack-start}/utils.d.ts +0 -0
  487. /package/dist/src/{utils/__tests__/clack-utils.test.d.ts → ui/tui/__tests__/layout-helpers.test.d.ts} +0 -0
package/README.md CHANGED
@@ -42,7 +42,6 @@ The following CLI arguments are available:
42
42
  | `--help` | Show help | boolean | | | |
43
43
  | `--version` | Show version number | boolean | | | |
44
44
  | `--debug` | Enable verbose logging | boolean | `false` | | `POSTHOG_WIZARD_DEBUG` |
45
- | `--region` | PostHog cloud region (when not specified, prompts for selection) | string | | "us", "eu" | `POSTHOG_WIZARD_REGION` |
46
45
  | `--default` | Use default options for all prompts | boolean | `true` | | `POSTHOG_WIZARD_DEFAULT` |
47
46
  | `--signup` | Create a new PostHog account during setup | boolean | `false` | | `POSTHOG_WIZARD_SIGNUP` |
48
47
  | `--integration` | Integration to set up | string | | "nextjs", "astro", "react", "svelte", "react-native", "tanstack-router", "tanstack-start" | |
@@ -61,7 +60,7 @@ The following CLI arguments are available:
61
60
  Run the wizard non-interactive executions with `--ci`:
62
61
 
63
62
  ```bash
64
- npx @posthog/wizard --ci --region us --api-key $POSTHOG_PERSONAL_API_KEY --install-dir .
63
+ npx @posthog/wizard --ci --api-key $POSTHOG_PERSONAL_API_KEY --install-dir .
65
64
  ```
66
65
 
67
66
  When running in CI mode (`--ci`):
@@ -76,7 +75,6 @@ The CLI args override environment variables in CI mode.
76
75
 
77
76
  ### Required Flags for CI Mode
78
77
 
79
- - `--region`: Cloud region (`us` or `eu`)
80
78
  - `--api-key`: Personal API key (`phx_xxx`) from your [PostHog settings](https://app.posthog.com/settings/user-api-keys)
81
79
  - `--install-dir`: Directory to install PostHog in (e.g., `.` for current directory)
82
80
 
@@ -199,3 +197,82 @@ To make your version of a tool usable with a one-line `npx` command:
199
197
  2. Run [`npm publish`](https://docs.npmjs.com/cli/v7/commands/npm-publish) from
200
198
  your project directory
201
199
  3. Now you can run it with `npx yourpackagename`
200
+
201
+ # Health checks
202
+
203
+ `src/lib/health-checks/` checks external status pages and PostHog-owned
204
+ services before the wizard runs to decide whether it can proceed. The entry
205
+ point is `evaluateWizardReadiness()`, which returns one of three values:
206
+
207
+ | Decision | Meaning |
208
+ | ------------------- | --------------------------------------------------------------- |
209
+ | `yes` | All services healthy — proceed normally. |
210
+ | `yes_with_warnings` | Some services degraded but no critical dependency is down. |
211
+ | `no` | A critical dependency is down or degraded — do not run. |
212
+
213
+ ### Module layout
214
+
215
+ | File | Responsibility |
216
+ | --- | --- |
217
+ | `types.ts` | Enums, interfaces (`ServiceHealthStatus`, `AllServicesHealth`, etc.) |
218
+ | `statuspage.ts` | Statuspage.io v2 API helpers + checks for Anthropic, PostHog, GitHub, npm, Cloudflare |
219
+ | `endpoints.ts` | Direct endpoint checks for LLM Gateway (`/_liveness`) and MCP (`/`) |
220
+ | `readiness.ts` | `checkAllExternalServices`, `evaluateWizardReadiness`, readiness config |
221
+ | `index.ts` | Barrel re-export |
222
+ | `testme.md` | Test running instructions and endpoint reference |
223
+
224
+ ## What blocks a run
225
+
226
+ The `DEFAULT_WIZARD_READINESS_CONFIG` in `readiness.ts` controls this. It has
227
+ two arrays:
228
+
229
+ - **`downBlocksRun`** — if any of these report status **Down**, readiness is
230
+ **No**.
231
+ - **`degradedBlocksRun`** — if any of these report **Degraded** (or worse),
232
+ readiness is **No**.
233
+
234
+ ### Current defaults
235
+
236
+ ```ts
237
+ downBlocksRun: ['anthropic', 'posthogOverall', 'npmOverall', 'llmGateway', 'mcp'],
238
+ degradedBlocksRun: ['anthropic'],
239
+ ```
240
+
241
+ ## Smoke test helper (`scripts/smoke-test-ci.sh`)
242
+
243
+ This repo includes a helper script to run a full end‑to‑end smoke test of the wizard packaged in a tarball against a real app from [`posthog/wizard-workbench`](https://github.com/PostHog/wizard-workbench). This will catch certain packaging issues that might not be caught by other tests.
244
+
245
+ **Prerequisites**
246
+
247
+ - Point to a `wizard-workbench` checkout either by:
248
+ - Setting `WIZARD_WORKBENCH_ROOT=/absolute/path/to/wizard-workbench`, or
249
+ - Cloning `wizard-workbench` next to this repo (so it lives at `../wizard-workbench`).
250
+ - Set `POSTHOG_PERSONAL_API_KEY` either in your shell or in `../wizard-workbench/.env`.
251
+ - (Optional) Set `POSTHOG_PROJECT_ID` to target a specific PostHog project.
252
+
253
+ **Usage**
254
+
255
+ ```bash
256
+ # Default app: next-js/15-app-router-todo
257
+ ./scripts/smoke-test-ci.sh
258
+
259
+ # Specify a different app from wizard-workbench/apps
260
+ ./scripts/smoke-test-ci.sh next-js/15-pages-router-saas
261
+
262
+ # With API key (and optional project ID) inline
263
+ POSTHOG_PERSONAL_API_KEY=phx_your_key_here \
264
+ POSTHOG_PROJECT_ID=12345 \
265
+ ./scripts/smoke-test-ci.sh next-js/15-pages-router-saas
266
+
267
+ # Pointing at a custom wizard-workbench checkout
268
+ WIZARD_WORKBENCH_ROOT=/path/to/wizard-workbench \
269
+ ./scripts/smoke-test-ci.sh
270
+ ```
271
+
272
+ The script will:
273
+
274
+ - Build and pack the wizard
275
+ - Copy the selected app into a temp directory
276
+ - Install dependencies for the app
277
+ - Install the packed wizard tarball into an isolated temp project
278
+ - Run `wizard` in `--ci` mode against the copied app and perform basic post‑install checks
package/dist/bin.js CHANGED
@@ -9,6 +9,21 @@ const logging_1 = require("./src/utils/logging");
9
9
  const yargs_1 = __importDefault(require("yargs"));
10
10
  const helpers_1 = require("yargs/helpers");
11
11
  const chalk_1 = __importDefault(require("chalk"));
12
+ const fs_1 = require("fs");
13
+ const path_1 = require("path");
14
+ const WIZARD_VERSION = (() => {
15
+ // npm/pnpm set this when running via package scripts
16
+ if (process.env.npm_package_version)
17
+ return process.env.npm_package_version;
18
+ // Fallback: read package.json relative to this file
19
+ try {
20
+ const pkg = JSON.parse((0, fs_1.readFileSync)((0, path_1.resolve)((0, path_1.dirname)(__filename), '..', 'package.json'), 'utf-8'));
21
+ return pkg.version ?? 'unknown';
22
+ }
23
+ catch {
24
+ return 'unknown';
25
+ }
26
+ })();
12
27
  const NODE_VERSION_RANGE = '>=18.17.0';
13
28
  // Have to run this above the other imports because they are importing clack that
14
29
  // has the problematic imports.
@@ -16,10 +31,10 @@ if (!(0, semver_1.satisfies)(process.version, NODE_VERSION_RANGE)) {
16
31
  (0, logging_1.red)(`PostHog wizard requires Node.js ${NODE_VERSION_RANGE}. You are using Node.js ${process.version}. Please upgrade your Node.js version.`);
17
32
  process.exit(1);
18
33
  }
19
- const mcp_1 = require("./src/mcp");
20
34
  const run_1 = require("./src/run");
21
35
  const environment_1 = require("./src/utils/environment");
22
- const clack_1 = __importDefault(require("./src/utils/clack"));
36
+ const ui_1 = require("./src/ui");
37
+ const logging_ui_1 = require("./src/ui/logging-ui");
23
38
  if (process.env.NODE_ENV === 'test') {
24
39
  void (async () => {
25
40
  try {
@@ -42,11 +57,6 @@ if (process.env.NODE_ENV === 'test') {
42
57
  describe: 'Enable verbose logging\nenv: POSTHOG_WIZARD_DEBUG',
43
58
  type: 'boolean',
44
59
  },
45
- region: {
46
- describe: 'PostHog cloud region\nenv: POSTHOG_WIZARD_REGION',
47
- choices: ['us', 'eu'],
48
- type: 'string',
49
- },
50
60
  default: {
51
61
  default: true,
52
62
  describe: 'Use default options for all prompts\nenv: POSTHOG_WIZARD_DEFAULT',
@@ -87,6 +97,11 @@ if (process.env.NODE_ENV === 'test') {
87
97
  describe: 'Directory to install PostHog in\nenv: POSTHOG_WIZARD_INSTALL_DIR',
88
98
  type: 'string',
89
99
  },
100
+ playground: {
101
+ default: false,
102
+ describe: 'Launch the TUI primitives playground',
103
+ type: 'boolean',
104
+ },
90
105
  integration: {
91
106
  describe: 'Integration to set up',
92
107
  choices: [
@@ -115,34 +130,155 @@ if (process.env.NODE_ENV === 'test') {
115
130
  const options = { ...argv };
116
131
  // CI mode validation and TTY check
117
132
  if (options.ci) {
118
- // Validate required CI flags
119
- if (!options.region) {
120
- clack_1.default.intro(chalk_1.default.inverse(`PostHog Wizard`));
121
- clack_1.default.log.error('CI mode requires --region (us or eu)');
122
- process.exit(1);
123
- }
133
+ // Use LoggingUI for CI mode (no dependencies, no prompts)
134
+ (0, ui_1.setUI)(new logging_ui_1.LoggingUI());
124
135
  if (!options.apiKey) {
125
- clack_1.default.intro(chalk_1.default.inverse(`PostHog Wizard`));
126
- clack_1.default.log.error('CI mode requires --api-key (personal API key phx_xxx)');
136
+ (0, ui_1.getUI)().intro(chalk_1.default.inverse(`PostHog Wizard`));
137
+ (0, ui_1.getUI)().log.error('CI mode requires --api-key (personal API key phx_xxx)');
127
138
  process.exit(1);
128
139
  }
129
140
  if (!options.installDir) {
130
- clack_1.default.intro(chalk_1.default.inverse(`PostHog Wizard`));
131
- clack_1.default.log.error('CI mode requires --install-dir (directory to install PostHog in)');
141
+ (0, ui_1.getUI)().intro(chalk_1.default.inverse(`PostHog Wizard`));
142
+ (0, ui_1.getUI)().log.error('CI mode requires --install-dir (directory to install PostHog in)');
132
143
  process.exit(1);
133
144
  }
145
+ void (0, run_1.runWizard)(options);
134
146
  }
135
147
  else if ((0, environment_1.isNonInteractiveEnvironment)()) {
136
- // Original TTY error for non-CI mode
137
- clack_1.default.intro(chalk_1.default.inverse(`PostHog Wizard`));
138
- clack_1.default.log.error('This installer requires an interactive terminal (TTY) to run.\n' +
148
+ // Non-interactive non-CI: error out
149
+ (0, ui_1.getUI)().intro(chalk_1.default.inverse(`PostHog Wizard`));
150
+ (0, ui_1.getUI)().log.error('This installer requires an interactive terminal (TTY) to run.\n' +
139
151
  'It appears you are running in a non-interactive environment.\n' +
140
152
  'Please run the wizard in an interactive terminal.\n\n' +
141
153
  'For CI/CD environments, use --ci mode:\n' +
142
- ' npx @posthog/wizard --ci --region us --api-key phx_xxx');
154
+ ' npx @posthog/wizard --ci --api-key phx_xxx --install-dir .');
143
155
  process.exit(1);
144
156
  }
145
- void (0, run_1.runWizard)(options);
157
+ else if (options.playground) {
158
+ // Playground mode: launch the TUI primitives playground
159
+ void (async () => {
160
+ const { startPlayground } = await import('./src/ui/tui/playground/start-playground.js');
161
+ startPlayground(WIZARD_VERSION);
162
+ })();
163
+ }
164
+ else {
165
+ // Interactive TTY: launch the Ink TUI
166
+ void (async () => {
167
+ try {
168
+ const { startTUI } = await import('./src/ui/tui/start-tui.js');
169
+ const { buildSession } = await import('./src/lib/wizard-session.js');
170
+ const tui = startTUI(WIZARD_VERSION);
171
+ // Build session from CLI args and attach to store
172
+ const session = buildSession({
173
+ debug: options.debug,
174
+ forceInstall: options.forceInstall,
175
+ installDir: options.installDir,
176
+ ci: false,
177
+ signup: options.signup,
178
+ localMcp: options.localMcp,
179
+ apiKey: options.apiKey,
180
+ menu: options.menu,
181
+ integration: options.integration,
182
+ benchmark: options.benchmark,
183
+ projectId: options.projectId,
184
+ });
185
+ tui.store.session = session;
186
+ // Detect framework while IntroScreen shows its spinner.
187
+ // Runs concurrently — IntroScreen reacts when detection completes.
188
+ const { FRAMEWORK_REGISTRY } = await import('./src/lib/registry.js');
189
+ const { detectIntegration } = await import('./src/run.js');
190
+ const installDir = session.installDir ?? process.cwd();
191
+ const { DETECTION_TIMEOUT_MS } = await import('./src/lib/constants.js');
192
+ const detectedIntegration = await Promise.race([
193
+ detectIntegration(installDir),
194
+ new Promise((resolve) => setTimeout(() => resolve(undefined), DETECTION_TIMEOUT_MS)),
195
+ ]);
196
+ if (detectedIntegration) {
197
+ const config = FRAMEWORK_REGISTRY[detectedIntegration];
198
+ // Run gatherContext for the friendly variant label
199
+ if (config.metadata.gatherContext) {
200
+ try {
201
+ const context = await Promise.race([
202
+ config.metadata.gatherContext({
203
+ installDir,
204
+ debug: session.debug,
205
+ forceInstall: session.forceInstall,
206
+ default: false,
207
+ signup: session.signup,
208
+ localMcp: session.localMcp,
209
+ ci: session.ci,
210
+ menu: session.menu,
211
+ benchmark: session.benchmark,
212
+ }),
213
+ new Promise((resolve) => setTimeout(() => resolve({}), DETECTION_TIMEOUT_MS)),
214
+ ]);
215
+ for (const [key, value] of Object.entries(context)) {
216
+ if (!(key in session.frameworkContext)) {
217
+ tui.store.setFrameworkContext(key, value);
218
+ }
219
+ }
220
+ }
221
+ catch {
222
+ // Detection failed — will show generic name
223
+ }
224
+ }
225
+ tui.store.setFrameworkConfig(detectedIntegration, config);
226
+ if (!session.detectedFrameworkLabel) {
227
+ tui.store.setDetectedFramework(config.metadata.name);
228
+ }
229
+ }
230
+ // Feature discovery — deterministic scan of package.json deps
231
+ try {
232
+ const { readFileSync } = await import('fs');
233
+ const pkgPath = require('path').join(installDir, 'package.json');
234
+ const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));
235
+ const allDeps = {
236
+ ...pkg.dependencies,
237
+ ...pkg.devDependencies,
238
+ };
239
+ const depNames = Object.keys(allDeps);
240
+ const { DiscoveredFeature } = await import('./src/lib/wizard-session.js');
241
+ if (depNames.some((d) => ['stripe', '@stripe/stripe-js'].includes(d))) {
242
+ tui.store.addDiscoveredFeature(DiscoveredFeature.Stripe);
243
+ }
244
+ // LLM SDK detection — sourced from PostHog LLM analytics skill
245
+ const LLM_PACKAGES = [
246
+ 'openai',
247
+ '@anthropic-ai/sdk',
248
+ 'ai',
249
+ '@ai-sdk/openai',
250
+ 'langchain',
251
+ '@langchain/openai',
252
+ '@langchain/langgraph',
253
+ '@google/generative-ai',
254
+ '@google/genai',
255
+ '@instructor-ai/instructor',
256
+ '@mastra/core',
257
+ 'portkey-ai',
258
+ ];
259
+ if (depNames.some((d) => LLM_PACKAGES.includes(d))) {
260
+ tui.store.addDiscoveredFeature(DiscoveredFeature.LLM);
261
+ }
262
+ }
263
+ catch {
264
+ // No package.json or parse error — skip feature discovery
265
+ }
266
+ // Signal detection is done — IntroScreen shows picker or results
267
+ tui.store.setDetectionComplete();
268
+ // Wait for IntroScreen confirmation
269
+ await tui.waitForSetup();
270
+ await (0, run_1.runWizard)(options, tui.store.session);
271
+ // Keep the outro screen visible — let process.exit() handle cleanup
272
+ }
273
+ catch (err) {
274
+ // TUI unavailable (e.g., in test environment) — continue with default UI
275
+ if (process.env.DEBUG || process.env.POSTHOG_WIZARD_DEBUG) {
276
+ console.error('TUI init failed:', err); // eslint-disable-line no-console
277
+ }
278
+ await (0, run_1.runWizard)(options);
279
+ }
280
+ })();
281
+ }
146
282
  })
147
283
  .command('mcp <command>', 'MCP server management commands', (yargs) => {
148
284
  return yargs
@@ -156,7 +292,27 @@ if (process.env.NODE_ENV === 'test') {
156
292
  });
157
293
  }, (argv) => {
158
294
  const options = { ...argv };
159
- void (0, mcp_1.runMCPInstall)(options);
295
+ void (async () => {
296
+ try {
297
+ const { startTUI } = await import('./src/ui/tui/start-tui.js');
298
+ const { buildSession } = await import('./src/lib/wizard-session.js');
299
+ const { Flow } = await import('./src/ui/tui/router.js');
300
+ const tui = startTUI(WIZARD_VERSION, Flow.McpAdd);
301
+ const session = buildSession({
302
+ debug: options.debug,
303
+ localMcp: options.local,
304
+ });
305
+ tui.store.session = session;
306
+ }
307
+ catch {
308
+ // TUI unavailable — fallback to logging
309
+ (0, ui_1.setUI)(new logging_ui_1.LoggingUI());
310
+ const { addMCPServerToClientsStep } = await import('./src/steps/add-mcp-server-to-clients/index.js');
311
+ await addMCPServerToClientsStep({
312
+ local: options.local,
313
+ });
314
+ }
315
+ })();
160
316
  })
161
317
  .command('remove', 'Remove PostHog MCP server from supported clients', (yargs) => {
162
318
  return yargs.options({
@@ -168,7 +324,27 @@ if (process.env.NODE_ENV === 'test') {
168
324
  });
169
325
  }, (argv) => {
170
326
  const options = { ...argv };
171
- void (0, mcp_1.runMCPRemove)(options);
327
+ void (async () => {
328
+ try {
329
+ const { startTUI } = await import('./src/ui/tui/start-tui.js');
330
+ const { buildSession } = await import('./src/lib/wizard-session.js');
331
+ const { Flow } = await import('./src/ui/tui/router.js');
332
+ const tui = startTUI(WIZARD_VERSION, Flow.McpRemove);
333
+ const session = buildSession({
334
+ debug: options.debug,
335
+ localMcp: options.local,
336
+ });
337
+ tui.store.session = session;
338
+ }
339
+ catch {
340
+ // TUI unavailable — fallback to logging
341
+ (0, ui_1.setUI)(new logging_ui_1.LoggingUI());
342
+ const { removeMCPServerFromClientsStep } = await import('./src/steps/add-mcp-server-to-clients/index.js');
343
+ await removeMCPServerFromClientsStep({
344
+ local: options.local,
345
+ });
346
+ }
347
+ })();
172
348
  })
173
349
  .demandCommand(1, 'You must specify a subcommand (add or remove)')
174
350
  .help();
package/dist/bin.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"bin.js","sourceRoot":"","sources":["../bin.ts"],"names":[],"mappings":"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","sourcesContent":["#!/usr/bin/env node\nimport { satisfies } from 'semver';\nimport { red } from './src/utils/logging';\n\nimport yargs from 'yargs';\nimport { hideBin } from 'yargs/helpers';\nimport chalk from 'chalk';\n\nconst NODE_VERSION_RANGE = '>=18.17.0';\n\n// Have to run this above the other imports because they are importing clack that\n// has the problematic imports.\nif (!satisfies(process.version, NODE_VERSION_RANGE)) {\n red(\n `PostHog wizard requires Node.js ${NODE_VERSION_RANGE}. You are using Node.js ${process.version}. Please upgrade your Node.js version.`,\n );\n process.exit(1);\n}\n\nimport { runMCPInstall, runMCPRemove } from './src/mcp';\nimport type { CloudRegion } from './src/utils/types';\nimport { runWizard } from './src/run';\nimport { isNonInteractiveEnvironment } from './src/utils/environment';\nimport clack from './src/utils/clack';\n\nif (process.env.NODE_ENV === 'test') {\n void (async () => {\n try {\n const { server } = await import('./e2e-tests/mocks/server.js');\n server.listen({\n onUnhandledRequest: 'bypass',\n });\n } catch (error) {\n // Mock server import failed - this can happen during non-E2E tests\n }\n })();\n}\n\nyargs(hideBin(process.argv))\n .env('POSTHOG_WIZARD')\n // global options\n .options({\n debug: {\n default: false,\n describe: 'Enable verbose logging\\nenv: POSTHOG_WIZARD_DEBUG',\n type: 'boolean',\n },\n region: {\n describe: 'PostHog cloud region\\nenv: POSTHOG_WIZARD_REGION',\n choices: ['us', 'eu'],\n type: 'string',\n },\n default: {\n default: true,\n describe:\n 'Use default options for all prompts\\nenv: POSTHOG_WIZARD_DEFAULT',\n type: 'boolean',\n },\n signup: {\n default: false,\n describe:\n 'Create a new PostHog account during setup\\nenv: POSTHOG_WIZARD_SIGNUP',\n type: 'boolean',\n },\n 'local-mcp': {\n default: false,\n describe:\n 'Use local MCP server at http://localhost:8787/mcp\\nenv: POSTHOG_WIZARD_LOCAL_MCP',\n type: 'boolean',\n },\n ci: {\n default: false,\n describe:\n 'Enable CI mode for non-interactive execution\\nenv: POSTHOG_WIZARD_CI',\n type: 'boolean',\n },\n 'api-key': {\n describe:\n 'PostHog personal API key (phx_xxx) for authentication\\nenv: POSTHOG_WIZARD_API_KEY',\n type: 'string',\n },\n 'project-id': {\n describe:\n 'PostHog project ID to use (optional; when not set, uses default from API key or OAuth)\\nenv: POSTHOG_WIZARD_PROJECT_ID',\n type: 'string',\n },\n })\n .command(\n ['$0'],\n 'Run the PostHog setup wizard',\n (yargs) => {\n return yargs.options({\n 'force-install': {\n default: false,\n describe:\n 'Force install packages even if peer dependency checks fail\\nenv: POSTHOG_WIZARD_FORCE_INSTALL',\n type: 'boolean',\n },\n 'install-dir': {\n describe:\n 'Directory to install PostHog in\\nenv: POSTHOG_WIZARD_INSTALL_DIR',\n type: 'string',\n },\n integration: {\n describe: 'Integration to set up',\n choices: [\n 'nextjs',\n 'astro',\n 'react',\n 'svelte',\n 'react-native',\n 'tanstack-router',\n 'tanstack-start',\n ],\n type: 'string',\n },\n menu: {\n default: false,\n describe:\n 'Show menu for manual integration selection instead of auto-detecting\\nenv: POSTHOG_WIZARD_MENU',\n type: 'boolean',\n },\n benchmark: {\n default: false,\n describe:\n 'Run in benchmark mode with per-phase token tracking\\nenv: POSTHOG_WIZARD_BENCHMARK',\n type: 'boolean',\n },\n });\n },\n (argv) => {\n const options = { ...argv };\n\n // CI mode validation and TTY check\n if (options.ci) {\n // Validate required CI flags\n if (!options.region) {\n clack.intro(chalk.inverse(`PostHog Wizard`));\n clack.log.error('CI mode requires --region (us or eu)');\n process.exit(1);\n }\n if (!options.apiKey) {\n clack.intro(chalk.inverse(`PostHog Wizard`));\n clack.log.error(\n 'CI mode requires --api-key (personal API key phx_xxx)',\n );\n process.exit(1);\n }\n if (!options.installDir) {\n clack.intro(chalk.inverse(`PostHog Wizard`));\n clack.log.error(\n 'CI mode requires --install-dir (directory to install PostHog in)',\n );\n process.exit(1);\n }\n } else if (isNonInteractiveEnvironment()) {\n // Original TTY error for non-CI mode\n clack.intro(chalk.inverse(`PostHog Wizard`));\n clack.log.error(\n 'This installer requires an interactive terminal (TTY) to run.\\n' +\n 'It appears you are running in a non-interactive environment.\\n' +\n 'Please run the wizard in an interactive terminal.\\n\\n' +\n 'For CI/CD environments, use --ci mode:\\n' +\n ' npx @posthog/wizard --ci --region us --api-key phx_xxx',\n );\n process.exit(1);\n }\n\n void runWizard(options as unknown as Parameters<typeof runWizard>[0]);\n },\n )\n .command('mcp <command>', 'MCP server management commands', (yargs) => {\n return yargs\n .command(\n 'add',\n 'Install PostHog MCP server to supported clients',\n (yargs) => {\n return yargs.options({\n local: {\n default: false,\n describe:\n 'Add local development MCP server (http://localhost:8787)',\n type: 'boolean',\n },\n });\n },\n (argv) => {\n const options = { ...argv };\n void runMCPInstall(\n options as unknown as {\n signup: boolean;\n region?: CloudRegion;\n local?: boolean;\n debug?: boolean;\n },\n );\n },\n )\n .command(\n 'remove',\n 'Remove PostHog MCP server from supported clients',\n (yargs) => {\n return yargs.options({\n local: {\n default: false,\n describe:\n 'Remove local development MCP server (http://localhost:8787)',\n type: 'boolean',\n },\n });\n },\n (argv) => {\n const options = { ...argv };\n void runMCPRemove(options as { local?: boolean });\n },\n )\n .demandCommand(1, 'You must specify a subcommand (add or remove)')\n .help();\n })\n .help()\n .alias('help', 'h')\n .version()\n .alias('version', 'v')\n .wrap(process.stdout.isTTY ? yargs.terminalWidth() : 80).argv;\n"]}
1
+ {"version":3,"file":"bin.js","sourceRoot":"","sources":["../bin.ts"],"names":[],"mappings":";;;;;;AACA,mCAAmC;AACnC,iDAA0C;AAE1C,kDAA0B;AAC1B,2CAAwC;AACxC,kDAA0B;AAE1B,2BAAkC;AAClC,+BAAwC;AAExC,MAAM,cAAc,GAAG,CAAC,GAAG,EAAE;IAC3B,qDAAqD;IACrD,IAAI,OAAO,CAAC,GAAG,CAAC,mBAAmB;QAAE,OAAO,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;IAC5E,oDAAoD;IACpD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CACpB,IAAA,iBAAY,EAAC,IAAA,cAAO,EAAC,IAAA,cAAO,EAAC,UAAU,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAC1E,CAAC;QACF,OAAO,GAAG,CAAC,OAAO,IAAI,SAAS,CAAC;IAClC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC,CAAC,EAAE,CAAC;AAEL,MAAM,kBAAkB,GAAG,WAAW,CAAC;AAEvC,iFAAiF;AACjF,+BAA+B;AAC/B,IAAI,CAAC,IAAA,kBAAS,EAAC,OAAO,CAAC,OAAO,EAAE,kBAAkB,CAAC,EAAE,CAAC;IACpD,IAAA,aAAG,EACD,mCAAmC,kBAAkB,2BAA2B,OAAO,CAAC,OAAO,wCAAwC,CACxI,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,mCAAsC;AACtC,yDAAsE;AACtE,iCAAwC;AACxC,oDAAgD;AAEhD,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;IACpC,KAAK,CAAC,KAAK,IAAI,EAAE;QACf,IAAI,CAAC;YACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,6BAA6B,CAAC,CAAC;YAC/D,MAAM,CAAC,MAAM,CAAC;gBACZ,kBAAkB,EAAE,QAAQ;aAC7B,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,mEAAmE;QACrE,CAAC;IACH,CAAC,CAAC,EAAE,CAAC;AACP,CAAC;AAED,IAAA,eAAK,EAAC,IAAA,iBAAO,EAAC,OAAO,CAAC,IAAI,CAAC,CAAC;KACzB,GAAG,CAAC,gBAAgB,CAAC;IACtB,iBAAiB;KAChB,OAAO,CAAC;IACP,KAAK,EAAE;QACL,OAAO,EAAE,KAAK;QACd,QAAQ,EAAE,mDAAmD;QAC7D,IAAI,EAAE,SAAS;KAChB;IACD,OAAO,EAAE;QACP,OAAO,EAAE,IAAI;QACb,QAAQ,EACN,kEAAkE;QACpE,IAAI,EAAE,SAAS;KAChB;IACD,MAAM,EAAE;QACN,OAAO,EAAE,KAAK;QACd,QAAQ,EACN,uEAAuE;QACzE,IAAI,EAAE,SAAS;KAChB;IACD,WAAW,EAAE;QACX,OAAO,EAAE,KAAK;QACd,QAAQ,EACN,kFAAkF;QACpF,IAAI,EAAE,SAAS;KAChB;IACD,EAAE,EAAE;QACF,OAAO,EAAE,KAAK;QACd,QAAQ,EACN,sEAAsE;QACxE,IAAI,EAAE,SAAS;KAChB;IACD,SAAS,EAAE;QACT,QAAQ,EACN,oFAAoF;QACtF,IAAI,EAAE,QAAQ;KACf;IACD,YAAY,EAAE;QACZ,QAAQ,EACN,wHAAwH;QAC1H,IAAI,EAAE,QAAQ;KACf;CACF,CAAC;KACD,OAAO,CACN,CAAC,IAAI,CAAC,EACN,8BAA8B,EAC9B,CAAC,KAAK,EAAE,EAAE;IACR,OAAO,KAAK,CAAC,OAAO,CAAC;QACnB,eAAe,EAAE;YACf,OAAO,EAAE,KAAK;YACd,QAAQ,EACN,+FAA+F;YACjG,IAAI,EAAE,SAAS;SAChB;QACD,aAAa,EAAE;YACb,QAAQ,EACN,kEAAkE;YACpE,IAAI,EAAE,QAAQ;SACf;QACD,UAAU,EAAE;YACV,OAAO,EAAE,KAAK;YACd,QAAQ,EAAE,sCAAsC;YAChD,IAAI,EAAE,SAAS;SAChB;QACD,WAAW,EAAE;YACX,QAAQ,EAAE,uBAAuB;YACjC,OAAO,EAAE;gBACP,QAAQ;gBACR,OAAO;gBACP,OAAO;gBACP,QAAQ;gBACR,cAAc;gBACd,iBAAiB;gBACjB,gBAAgB;aACjB;YACD,IAAI,EAAE,QAAQ;SACf;QACD,IAAI,EAAE;YACJ,OAAO,EAAE,KAAK;YACd,QAAQ,EACN,gGAAgG;YAClG,IAAI,EAAE,SAAS;SAChB;QACD,SAAS,EAAE;YACT,OAAO,EAAE,KAAK;YACd,QAAQ,EACN,oFAAoF;YACtF,IAAI,EAAE,SAAS;SAChB;KACF,CAAC,CAAC;AACL,CAAC,EACD,CAAC,IAAI,EAAE,EAAE;IACP,MAAM,OAAO,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC;IAE5B,mCAAmC;IACnC,IAAI,OAAO,CAAC,EAAE,EAAE,CAAC;QACf,0DAA0D;QAC1D,IAAA,UAAK,EAAC,IAAI,sBAAS,EAAE,CAAC,CAAC;QACvB,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YACpB,IAAA,UAAK,GAAE,CAAC,KAAK,CAAC,eAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC;YAC/C,IAAA,UAAK,GAAE,CAAC,GAAG,CAAC,KAAK,CACf,uDAAuD,CACxD,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;YACxB,IAAA,UAAK,GAAE,CAAC,KAAK,CAAC,eAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC;YAC/C,IAAA,UAAK,GAAE,CAAC,GAAG,CAAC,KAAK,CACf,kEAAkE,CACnE,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,KAAK,IAAA,eAAS,EAAC,OAA0C,CAAC,CAAC;IAC7D,CAAC;SAAM,IAAI,IAAA,yCAA2B,GAAE,EAAE,CAAC;QACzC,oCAAoC;QACpC,IAAA,UAAK,GAAE,CAAC,KAAK,CAAC,eAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC;QAC/C,IAAA,UAAK,GAAE,CAAC,GAAG,CAAC,KAAK,CACf,iEAAiE;YAC/D,gEAAgE;YAChE,uDAAuD;YACvD,0CAA0C;YAC1C,8DAA8D,CACjE,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;SAAM,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;QAC9B,wDAAwD;QACxD,KAAK,CAAC,KAAK,IAAI,EAAE;YACf,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CACtC,6CAA6C,CAC9C,CAAC;YACF,eAAe,CAAC,cAAc,CAAC,CAAC;QAClC,CAAC,CAAC,EAAE,CAAC;IACP,CAAC;SAAM,CAAC;QACN,sCAAsC;QACtC,KAAK,CAAC,KAAK,IAAI,EAAE;YACf,IAAI,CAAC;gBACH,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAC;gBAC/D,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CACnC,6BAA6B,CAC9B,CAAC;gBAEF,MAAM,GAAG,GAAG,QAAQ,CAAC,cAAc,CAAC,CAAC;gBAErC,kDAAkD;gBAClD,MAAM,OAAO,GAAG,YAAY,CAAC;oBAC3B,KAAK,EAAE,OAAO,CAAC,KAA4B;oBAC3C,YAAY,EAAE,OAAO,CAAC,YAAmC;oBACzD,UAAU,EAAE,OAAO,CAAC,UAAgC;oBACpD,EAAE,EAAE,KAAK;oBACT,MAAM,EAAE,OAAO,CAAC,MAA6B;oBAC7C,QAAQ,EAAE,OAAO,CAAC,QAA+B;oBACjD,MAAM,EAAE,OAAO,CAAC,MAA4B;oBAC5C,IAAI,EAAE,OAAO,CAAC,IAA2B;oBACzC,WAAW,EAAE,OAAO,CAAC,WAEF;oBACnB,SAAS,EAAE,OAAO,CAAC,SAAgC;oBACnD,SAAS,EAAE,OAAO,CAAC,SAA+B;iBACnD,CAAC,CAAC;gBACH,GAAG,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;gBAE5B,wDAAwD;gBACxD,mEAAmE;gBACnE,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,MAAM,CACzC,uBAAuB,CACxB,CAAC;gBACF,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC;gBAC3D,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;gBAEvD,MAAM,EAAE,oBAAoB,EAAE,GAAG,MAAM,MAAM,CAC3C,wBAAwB,CACzB,CAAC;gBACF,MAAM,mBAAmB,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC;oBAC7C,iBAAiB,CAAC,UAAU,CAAC;oBAC7B,IAAI,OAAO,CAAY,CAAC,OAAO,EAAE,EAAE,CACjC,UAAU,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,oBAAoB,CAAC,CAC3D;iBACF,CAAC,CAAC;gBAEH,IAAI,mBAAmB,EAAE,CAAC;oBACxB,MAAM,MAAM,GAAG,kBAAkB,CAAC,mBAAmB,CAAC,CAAC;oBAEvD,mDAAmD;oBACnD,IAAI,MAAM,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;wBAClC,IAAI,CAAC;4BACH,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC;gCACjC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC;oCAC5B,UAAU;oCACV,KAAK,EAAE,OAAO,CAAC,KAAK;oCACpB,YAAY,EAAE,OAAO,CAAC,YAAY;oCAClC,OAAO,EAAE,KAAK;oCACd,MAAM,EAAE,OAAO,CAAC,MAAM;oCACtB,QAAQ,EAAE,OAAO,CAAC,QAAQ;oCAC1B,EAAE,EAAE,OAAO,CAAC,EAAE;oCACd,IAAI,EAAE,OAAO,CAAC,IAAI;oCAClB,SAAS,EAAE,OAAO,CAAC,SAAS;iCAC7B,CAAC;gCACF,IAAI,OAAO,CAAwB,CAAC,OAAO,EAAE,EAAE,CAC7C,UAAU,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,oBAAoB,CAAC,CACpD;6BACF,CAAC,CAAC;4BACH,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;gCACnD,IAAI,CAAC,CAAC,GAAG,IAAI,OAAO,CAAC,gBAAgB,CAAC,EAAE,CAAC;oCACvC,GAAG,CAAC,KAAK,CAAC,mBAAmB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;gCAC5C,CAAC;4BACH,CAAC;wBACH,CAAC;wBAAC,MAAM,CAAC;4BACP,4CAA4C;wBAC9C,CAAC;oBACH,CAAC;oBAED,GAAG,CAAC,KAAK,CAAC,kBAAkB,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAAC;oBAE1D,IAAI,CAAC,OAAO,CAAC,sBAAsB,EAAE,CAAC;wBACpC,GAAG,CAAC,KAAK,CAAC,oBAAoB,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;oBACvD,CAAC;gBACH,CAAC;gBAED,8DAA8D;gBAC9D,IAAI,CAAC;oBACH,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;oBAC5C,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;oBACjE,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;oBACvD,MAAM,OAAO,GAAG;wBACd,GAAG,GAAG,CAAC,YAAY;wBACnB,GAAG,GAAG,CAAC,eAAe;qBACvB,CAAC;oBACF,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;oBAEtC,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CACxC,6BAA6B,CAC9B,CAAC;oBAEF,IACE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAClB,CAAC,QAAQ,EAAE,mBAAmB,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAC5C,EACD,CAAC;wBACD,GAAG,CAAC,KAAK,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;oBAC3D,CAAC;oBAED,+DAA+D;oBAC/D,MAAM,YAAY,GAAG;wBACnB,QAAQ;wBACR,mBAAmB;wBACnB,IAAI;wBACJ,gBAAgB;wBAChB,WAAW;wBACX,mBAAmB;wBACnB,sBAAsB;wBACtB,uBAAuB;wBACvB,eAAe;wBACf,2BAA2B;wBAC3B,cAAc;wBACd,YAAY;qBACb,CAAC;oBACF,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;wBACnD,GAAG,CAAC,KAAK,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;oBACxD,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC;oBACP,0DAA0D;gBAC5D,CAAC;gBAED,iEAAiE;gBACjE,GAAG,CAAC,KAAK,CAAC,oBAAoB,EAAE,CAAC;gBAEjC,oCAAoC;gBACpC,MAAM,GAAG,CAAC,YAAY,EAAE,CAAC;gBAEzB,MAAM,IAAA,eAAS,EACb,OAA0C,EAC1C,GAAG,CAAC,KAAK,CAAC,OAAO,CAClB,CAAC;gBAEF,oEAAoE;YACtE,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,yEAAyE;gBACzE,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,CAAC;oBAC1D,OAAO,CAAC,KAAK,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAC,CAAC,iCAAiC;gBAC3E,CAAC;gBACD,MAAM,IAAA,eAAS,EAAC,OAA0C,CAAC,CAAC;YAC9D,CAAC;QACH,CAAC,CAAC,EAAE,CAAC;IACP,CAAC;AACH,CAAC,CACF;KACA,OAAO,CAAC,eAAe,EAAE,gCAAgC,EAAE,CAAC,KAAK,EAAE,EAAE;IACpE,OAAO,KAAK;SACT,OAAO,CACN,KAAK,EACL,iDAAiD,EACjD,CAAC,KAAK,EAAE,EAAE;QACR,OAAO,KAAK,CAAC,OAAO,CAAC;YACnB,KAAK,EAAE;gBACL,OAAO,EAAE,KAAK;gBACd,QAAQ,EACN,0DAA0D;gBAC5D,IAAI,EAAE,SAAS;aAChB;SACF,CAAC,CAAC;IACL,CAAC,EACD,CAAC,IAAI,EAAE,EAAE;QACP,MAAM,OAAO,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC;QAC5B,KAAK,CAAC,KAAK,IAAI,EAAE;YACf,IAAI,CAAC;gBACH,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAC;gBAC/D,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CACnC,6BAA6B,CAC9B,CAAC;gBAEF,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,wBAAwB,CAAC,CAAC;gBACxD,MAAM,GAAG,GAAG,QAAQ,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;gBAClD,MAAM,OAAO,GAAG,YAAY,CAAC;oBAC3B,KAAK,EAAE,OAAO,CAAC,KAAK;oBACpB,QAAQ,EAAE,OAAO,CAAC,KAAK;iBACxB,CAAC,CAAC;gBACH,GAAG,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;YAC9B,CAAC;YAAC,MAAM,CAAC;gBACP,wCAAwC;gBACxC,IAAA,UAAK,EAAC,IAAI,sBAAS,EAAE,CAAC,CAAC;gBACvB,MAAM,EAAE,yBAAyB,EAAE,GAAG,MAAM,MAAM,CAChD,gDAAgD,CACjD,CAAC;gBACF,MAAM,yBAAyB,CAAC;oBAC9B,KAAK,EAAE,OAAO,CAAC,KAAK;iBACrB,CAAC,CAAC;YACL,CAAC;QACH,CAAC,CAAC,EAAE,CAAC;IACP,CAAC,CACF;SACA,OAAO,CACN,QAAQ,EACR,kDAAkD,EAClD,CAAC,KAAK,EAAE,EAAE;QACR,OAAO,KAAK,CAAC,OAAO,CAAC;YACnB,KAAK,EAAE;gBACL,OAAO,EAAE,KAAK;gBACd,QAAQ,EACN,6DAA6D;gBAC/D,IAAI,EAAE,SAAS;aAChB;SACF,CAAC,CAAC;IACL,CAAC,EACD,CAAC,IAAI,EAAE,EAAE;QACP,MAAM,OAAO,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC;QAC5B,KAAK,CAAC,KAAK,IAAI,EAAE;YACf,IAAI,CAAC;gBACH,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAC;gBAC/D,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CACnC,6BAA6B,CAC9B,CAAC;gBAEF,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,wBAAwB,CAAC,CAAC;gBACxD,MAAM,GAAG,GAAG,QAAQ,CAAC,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;gBACrD,MAAM,OAAO,GAAG,YAAY,CAAC;oBAC3B,KAAK,EAAE,OAAO,CAAC,KAAK;oBACpB,QAAQ,EAAE,OAAO,CAAC,KAAK;iBACxB,CAAC,CAAC;gBACH,GAAG,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;YAC9B,CAAC;YAAC,MAAM,CAAC;gBACP,wCAAwC;gBACxC,IAAA,UAAK,EAAC,IAAI,sBAAS,EAAE,CAAC,CAAC;gBACvB,MAAM,EAAE,8BAA8B,EAAE,GAAG,MAAM,MAAM,CACrD,gDAAgD,CACjD,CAAC;gBACF,MAAM,8BAA8B,CAAC;oBACnC,KAAK,EAAE,OAAO,CAAC,KAAK;iBACrB,CAAC,CAAC;YACL,CAAC;QACH,CAAC,CAAC,EAAE,CAAC;IACP,CAAC,CACF;SACA,aAAa,CAAC,CAAC,EAAE,+CAA+C,CAAC;SACjE,IAAI,EAAE,CAAC;AACZ,CAAC,CAAC;KACD,IAAI,EAAE;KACN,KAAK,CAAC,MAAM,EAAE,GAAG,CAAC;KAClB,OAAO,EAAE;KACT,KAAK,CAAC,SAAS,EAAE,GAAG,CAAC;KACrB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,eAAK,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC","sourcesContent":["#!/usr/bin/env node\nimport { satisfies } from 'semver';\nimport { red } from './src/utils/logging';\n\nimport yargs from 'yargs';\nimport { hideBin } from 'yargs/helpers';\nimport chalk from 'chalk';\n\nimport { readFileSync } from 'fs';\nimport { resolve, dirname } from 'path';\n\nconst WIZARD_VERSION = (() => {\n // npm/pnpm set this when running via package scripts\n if (process.env.npm_package_version) return process.env.npm_package_version;\n // Fallback: read package.json relative to this file\n try {\n const pkg = JSON.parse(\n readFileSync(resolve(dirname(__filename), '..', 'package.json'), 'utf-8'),\n );\n return pkg.version ?? 'unknown';\n } catch {\n return 'unknown';\n }\n})();\n\nconst NODE_VERSION_RANGE = '>=18.17.0';\n\n// Have to run this above the other imports because they are importing clack that\n// has the problematic imports.\nif (!satisfies(process.version, NODE_VERSION_RANGE)) {\n red(\n `PostHog wizard requires Node.js ${NODE_VERSION_RANGE}. You are using Node.js ${process.version}. Please upgrade your Node.js version.`,\n );\n process.exit(1);\n}\n\nimport { runWizard } from './src/run';\nimport { isNonInteractiveEnvironment } from './src/utils/environment';\nimport { getUI, setUI } from './src/ui';\nimport { LoggingUI } from './src/ui/logging-ui';\n\nif (process.env.NODE_ENV === 'test') {\n void (async () => {\n try {\n const { server } = await import('./e2e-tests/mocks/server.js');\n server.listen({\n onUnhandledRequest: 'bypass',\n });\n } catch (error) {\n // Mock server import failed - this can happen during non-E2E tests\n }\n })();\n}\n\nyargs(hideBin(process.argv))\n .env('POSTHOG_WIZARD')\n // global options\n .options({\n debug: {\n default: false,\n describe: 'Enable verbose logging\\nenv: POSTHOG_WIZARD_DEBUG',\n type: 'boolean',\n },\n default: {\n default: true,\n describe:\n 'Use default options for all prompts\\nenv: POSTHOG_WIZARD_DEFAULT',\n type: 'boolean',\n },\n signup: {\n default: false,\n describe:\n 'Create a new PostHog account during setup\\nenv: POSTHOG_WIZARD_SIGNUP',\n type: 'boolean',\n },\n 'local-mcp': {\n default: false,\n describe:\n 'Use local MCP server at http://localhost:8787/mcp\\nenv: POSTHOG_WIZARD_LOCAL_MCP',\n type: 'boolean',\n },\n ci: {\n default: false,\n describe:\n 'Enable CI mode for non-interactive execution\\nenv: POSTHOG_WIZARD_CI',\n type: 'boolean',\n },\n 'api-key': {\n describe:\n 'PostHog personal API key (phx_xxx) for authentication\\nenv: POSTHOG_WIZARD_API_KEY',\n type: 'string',\n },\n 'project-id': {\n describe:\n 'PostHog project ID to use (optional; when not set, uses default from API key or OAuth)\\nenv: POSTHOG_WIZARD_PROJECT_ID',\n type: 'string',\n },\n })\n .command(\n ['$0'],\n 'Run the PostHog setup wizard',\n (yargs) => {\n return yargs.options({\n 'force-install': {\n default: false,\n describe:\n 'Force install packages even if peer dependency checks fail\\nenv: POSTHOG_WIZARD_FORCE_INSTALL',\n type: 'boolean',\n },\n 'install-dir': {\n describe:\n 'Directory to install PostHog in\\nenv: POSTHOG_WIZARD_INSTALL_DIR',\n type: 'string',\n },\n playground: {\n default: false,\n describe: 'Launch the TUI primitives playground',\n type: 'boolean',\n },\n integration: {\n describe: 'Integration to set up',\n choices: [\n 'nextjs',\n 'astro',\n 'react',\n 'svelte',\n 'react-native',\n 'tanstack-router',\n 'tanstack-start',\n ],\n type: 'string',\n },\n menu: {\n default: false,\n describe:\n 'Show menu for manual integration selection instead of auto-detecting\\nenv: POSTHOG_WIZARD_MENU',\n type: 'boolean',\n },\n benchmark: {\n default: false,\n describe:\n 'Run in benchmark mode with per-phase token tracking\\nenv: POSTHOG_WIZARD_BENCHMARK',\n type: 'boolean',\n },\n });\n },\n (argv) => {\n const options = { ...argv };\n\n // CI mode validation and TTY check\n if (options.ci) {\n // Use LoggingUI for CI mode (no dependencies, no prompts)\n setUI(new LoggingUI());\n if (!options.apiKey) {\n getUI().intro(chalk.inverse(`PostHog Wizard`));\n getUI().log.error(\n 'CI mode requires --api-key (personal API key phx_xxx)',\n );\n process.exit(1);\n }\n if (!options.installDir) {\n getUI().intro(chalk.inverse(`PostHog Wizard`));\n getUI().log.error(\n 'CI mode requires --install-dir (directory to install PostHog in)',\n );\n process.exit(1);\n }\n\n void runWizard(options as Parameters<typeof runWizard>[0]);\n } else if (isNonInteractiveEnvironment()) {\n // Non-interactive non-CI: error out\n getUI().intro(chalk.inverse(`PostHog Wizard`));\n getUI().log.error(\n 'This installer requires an interactive terminal (TTY) to run.\\n' +\n 'It appears you are running in a non-interactive environment.\\n' +\n 'Please run the wizard in an interactive terminal.\\n\\n' +\n 'For CI/CD environments, use --ci mode:\\n' +\n ' npx @posthog/wizard --ci --api-key phx_xxx --install-dir .',\n );\n process.exit(1);\n } else if (options.playground) {\n // Playground mode: launch the TUI primitives playground\n void (async () => {\n const { startPlayground } = await import(\n './src/ui/tui/playground/start-playground.js'\n );\n startPlayground(WIZARD_VERSION);\n })();\n } else {\n // Interactive TTY: launch the Ink TUI\n void (async () => {\n try {\n const { startTUI } = await import('./src/ui/tui/start-tui.js');\n const { buildSession } = await import(\n './src/lib/wizard-session.js'\n );\n\n const tui = startTUI(WIZARD_VERSION);\n\n // Build session from CLI args and attach to store\n const session = buildSession({\n debug: options.debug as boolean | undefined,\n forceInstall: options.forceInstall as boolean | undefined,\n installDir: options.installDir as string | undefined,\n ci: false,\n signup: options.signup as boolean | undefined,\n localMcp: options.localMcp as boolean | undefined,\n apiKey: options.apiKey as string | undefined,\n menu: options.menu as boolean | undefined,\n integration: options.integration as Parameters<\n typeof buildSession\n >[0]['integration'],\n benchmark: options.benchmark as boolean | undefined,\n projectId: options.projectId as string | undefined,\n });\n tui.store.session = session;\n\n // Detect framework while IntroScreen shows its spinner.\n // Runs concurrently — IntroScreen reacts when detection completes.\n const { FRAMEWORK_REGISTRY } = await import(\n './src/lib/registry.js'\n );\n const { detectIntegration } = await import('./src/run.js');\n const installDir = session.installDir ?? process.cwd();\n\n const { DETECTION_TIMEOUT_MS } = await import(\n './src/lib/constants.js'\n );\n const detectedIntegration = await Promise.race([\n detectIntegration(installDir),\n new Promise<undefined>((resolve) =>\n setTimeout(() => resolve(undefined), DETECTION_TIMEOUT_MS),\n ),\n ]);\n\n if (detectedIntegration) {\n const config = FRAMEWORK_REGISTRY[detectedIntegration];\n\n // Run gatherContext for the friendly variant label\n if (config.metadata.gatherContext) {\n try {\n const context = await Promise.race([\n config.metadata.gatherContext({\n installDir,\n debug: session.debug,\n forceInstall: session.forceInstall,\n default: false,\n signup: session.signup,\n localMcp: session.localMcp,\n ci: session.ci,\n menu: session.menu,\n benchmark: session.benchmark,\n }),\n new Promise<Record<string, never>>((resolve) =>\n setTimeout(() => resolve({}), DETECTION_TIMEOUT_MS),\n ),\n ]);\n for (const [key, value] of Object.entries(context)) {\n if (!(key in session.frameworkContext)) {\n tui.store.setFrameworkContext(key, value);\n }\n }\n } catch {\n // Detection failed — will show generic name\n }\n }\n\n tui.store.setFrameworkConfig(detectedIntegration, config);\n\n if (!session.detectedFrameworkLabel) {\n tui.store.setDetectedFramework(config.metadata.name);\n }\n }\n\n // Feature discovery — deterministic scan of package.json deps\n try {\n const { readFileSync } = await import('fs');\n const pkgPath = require('path').join(installDir, 'package.json');\n const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));\n const allDeps = {\n ...pkg.dependencies,\n ...pkg.devDependencies,\n };\n const depNames = Object.keys(allDeps);\n\n const { DiscoveredFeature } = await import(\n './src/lib/wizard-session.js'\n );\n\n if (\n depNames.some((d) =>\n ['stripe', '@stripe/stripe-js'].includes(d),\n )\n ) {\n tui.store.addDiscoveredFeature(DiscoveredFeature.Stripe);\n }\n\n // LLM SDK detection — sourced from PostHog LLM analytics skill\n const LLM_PACKAGES = [\n 'openai',\n '@anthropic-ai/sdk',\n 'ai',\n '@ai-sdk/openai',\n 'langchain',\n '@langchain/openai',\n '@langchain/langgraph',\n '@google/generative-ai',\n '@google/genai',\n '@instructor-ai/instructor',\n '@mastra/core',\n 'portkey-ai',\n ];\n if (depNames.some((d) => LLM_PACKAGES.includes(d))) {\n tui.store.addDiscoveredFeature(DiscoveredFeature.LLM);\n }\n } catch {\n // No package.json or parse error — skip feature discovery\n }\n\n // Signal detection is done — IntroScreen shows picker or results\n tui.store.setDetectionComplete();\n\n // Wait for IntroScreen confirmation\n await tui.waitForSetup();\n\n await runWizard(\n options as Parameters<typeof runWizard>[0],\n tui.store.session,\n );\n\n // Keep the outro screen visible — let process.exit() handle cleanup\n } catch (err) {\n // TUI unavailable (e.g., in test environment) — continue with default UI\n if (process.env.DEBUG || process.env.POSTHOG_WIZARD_DEBUG) {\n console.error('TUI init failed:', err); // eslint-disable-line no-console\n }\n await runWizard(options as Parameters<typeof runWizard>[0]);\n }\n })();\n }\n },\n )\n .command('mcp <command>', 'MCP server management commands', (yargs) => {\n return yargs\n .command(\n 'add',\n 'Install PostHog MCP server to supported clients',\n (yargs) => {\n return yargs.options({\n local: {\n default: false,\n describe:\n 'Add local development MCP server (http://localhost:8787)',\n type: 'boolean',\n },\n });\n },\n (argv) => {\n const options = { ...argv };\n void (async () => {\n try {\n const { startTUI } = await import('./src/ui/tui/start-tui.js');\n const { buildSession } = await import(\n './src/lib/wizard-session.js'\n );\n\n const { Flow } = await import('./src/ui/tui/router.js');\n const tui = startTUI(WIZARD_VERSION, Flow.McpAdd);\n const session = buildSession({\n debug: options.debug,\n localMcp: options.local,\n });\n tui.store.session = session;\n } catch {\n // TUI unavailable — fallback to logging\n setUI(new LoggingUI());\n const { addMCPServerToClientsStep } = await import(\n './src/steps/add-mcp-server-to-clients/index.js'\n );\n await addMCPServerToClientsStep({\n local: options.local,\n });\n }\n })();\n },\n )\n .command(\n 'remove',\n 'Remove PostHog MCP server from supported clients',\n (yargs) => {\n return yargs.options({\n local: {\n default: false,\n describe:\n 'Remove local development MCP server (http://localhost:8787)',\n type: 'boolean',\n },\n });\n },\n (argv) => {\n const options = { ...argv };\n void (async () => {\n try {\n const { startTUI } = await import('./src/ui/tui/start-tui.js');\n const { buildSession } = await import(\n './src/lib/wizard-session.js'\n );\n\n const { Flow } = await import('./src/ui/tui/router.js');\n const tui = startTUI(WIZARD_VERSION, Flow.McpRemove);\n const session = buildSession({\n debug: options.debug,\n localMcp: options.local,\n });\n tui.store.session = session;\n } catch {\n // TUI unavailable — fallback to logging\n setUI(new LoggingUI());\n const { removeMCPServerFromClientsStep } = await import(\n './src/steps/add-mcp-server-to-clients/index.js'\n );\n await removeMCPServerFromClientsStep({\n local: options.local,\n });\n }\n })();\n },\n )\n .demandCommand(1, 'You must specify a subcommand (add or remove)')\n .help();\n })\n .help()\n .alias('help', 'h')\n .version()\n .alias('version', 'v')\n .wrap(process.stdout.isTTY ? yargs.terminalWidth() : 80).argv;\n"]}