@amplitude/wizard 1.0.0-beta.2 → 1.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 (391) hide show
  1. package/README.md +171 -74
  2. package/dist/bin.js +338 -222
  3. package/dist/src/lib/agent-interface.js +64 -9
  4. package/dist/src/lib/agent-runner.js +1 -10
  5. package/dist/src/lib/api.d.ts +22 -4
  6. package/dist/src/lib/api.js +114 -12
  7. package/dist/src/lib/commandments.js +14 -1
  8. package/dist/src/lib/constants.d.ts +6 -5
  9. package/dist/src/lib/constants.js +13 -13
  10. package/dist/src/lib/credential-resolution.d.ts +45 -0
  11. package/dist/src/lib/credential-resolution.js +311 -0
  12. package/dist/src/lib/exit-codes.d.ts +10 -0
  13. package/dist/src/lib/exit-codes.js +12 -0
  14. package/dist/src/lib/health-checks/statuspage.d.ts +1 -0
  15. package/dist/src/lib/health-checks/statuspage.js +5 -1
  16. package/dist/src/lib/mode-config.d.ts +14 -0
  17. package/dist/src/lib/mode-config.js +14 -0
  18. package/dist/src/lib/session-checkpoint.d.ts +27 -0
  19. package/dist/src/lib/session-checkpoint.js +134 -0
  20. package/dist/src/lib/wizard-session.d.ts +44 -1
  21. package/dist/src/lib/wizard-session.js +70 -14
  22. package/dist/src/lib/wizard-tools.js +19 -4
  23. package/dist/src/steps/add-mcp-server-to-clients/clients/claude.d.ts +3 -0
  24. package/dist/src/steps/add-mcp-server-to-clients/clients/claude.js +6 -0
  25. package/dist/src/steps/add-mcp-server-to-clients/clients/cursor.js +3 -1
  26. package/dist/src/ui/agent-ui.d.ts +91 -0
  27. package/dist/src/ui/agent-ui.js +277 -0
  28. package/dist/src/ui/logging-ui.js +1 -1
  29. package/dist/src/ui/tui/App.d.ts +12 -0
  30. package/dist/src/ui/tui/App.js +29 -18
  31. package/dist/src/ui/tui/components/AmplitudeLogo.js +16 -17
  32. package/dist/src/ui/tui/components/AmplitudeTextLogo.d.ts +0 -2
  33. package/dist/src/ui/tui/components/AmplitudeTextLogo.js +53 -18
  34. package/dist/src/ui/tui/components/BrailleSpinner.d.ts +8 -0
  35. package/dist/src/ui/tui/components/BrailleSpinner.js +15 -0
  36. package/dist/src/ui/tui/components/ConsoleView.d.ts +8 -11
  37. package/dist/src/ui/tui/components/ConsoleView.js +51 -34
  38. package/dist/src/ui/tui/components/HeaderBar.d.ts +12 -0
  39. package/dist/src/ui/tui/components/HeaderBar.js +17 -0
  40. package/dist/src/ui/tui/components/JourneyStepper.d.ts +16 -0
  41. package/dist/src/ui/tui/components/JourneyStepper.js +83 -0
  42. package/dist/src/ui/tui/components/KeyHintBar.d.ts +19 -0
  43. package/dist/src/ui/tui/components/KeyHintBar.js +20 -0
  44. package/dist/src/ui/tui/console-commands.d.ts +1 -2
  45. package/dist/src/ui/tui/console-commands.js +48 -7
  46. package/dist/src/ui/tui/flows.d.ts +1 -1
  47. package/dist/src/ui/tui/flows.js +1 -1
  48. package/dist/src/ui/tui/hooks/useAsyncEffect.d.ts +15 -0
  49. package/dist/src/ui/tui/hooks/useAsyncEffect.js +35 -0
  50. package/dist/src/ui/tui/hooks/useWizardStore.d.ts +9 -0
  51. package/dist/src/ui/tui/hooks/useWizardStore.js +11 -0
  52. package/dist/src/ui/tui/ink-ui.js +1 -1
  53. package/dist/src/ui/tui/primitives/DissolveTransition.js +4 -5
  54. package/dist/src/ui/tui/primitives/EventPlanViewer.d.ts +3 -1
  55. package/dist/src/ui/tui/primitives/EventPlanViewer.js +8 -3
  56. package/dist/src/ui/tui/primitives/ProgressList.js +1 -1
  57. package/dist/src/ui/tui/primitives/SlashCommandInput.js +19 -4
  58. package/dist/src/ui/tui/primitives/SplitView.d.ts +2 -1
  59. package/dist/src/ui/tui/primitives/SplitView.js +10 -2
  60. package/dist/src/ui/tui/primitives/TabContainer.js +10 -2
  61. package/dist/src/ui/tui/primitives/index.d.ts +0 -1
  62. package/dist/src/ui/tui/primitives/index.js +0 -1
  63. package/dist/src/ui/tui/router.js +1 -1
  64. package/dist/src/ui/tui/screen-registry.d.ts +0 -7
  65. package/dist/src/ui/tui/screen-registry.js +13 -4
  66. package/dist/src/ui/tui/screens/ActivationOptionsScreen.d.ts +2 -2
  67. package/dist/src/ui/tui/screens/ActivationOptionsScreen.js +8 -8
  68. package/dist/src/ui/tui/screens/AuthScreen.js +57 -27
  69. package/dist/src/ui/tui/screens/ChecklistScreen.d.ts +2 -12
  70. package/dist/src/ui/tui/screens/ChecklistScreen.js +22 -33
  71. package/dist/src/ui/tui/screens/DataIngestionCheckScreen.d.ts +3 -12
  72. package/dist/src/ui/tui/screens/DataIngestionCheckScreen.js +109 -39
  73. package/dist/src/ui/tui/screens/DataSetupScreen.d.ts +3 -3
  74. package/dist/src/ui/tui/screens/DataSetupScreen.js +17 -10
  75. package/dist/src/ui/tui/screens/IntroScreen.d.ts +5 -3
  76. package/dist/src/ui/tui/screens/IntroScreen.js +132 -41
  77. package/dist/src/ui/tui/screens/LoginScreen.d.ts +1 -1
  78. package/dist/src/ui/tui/screens/LoginScreen.js +4 -4
  79. package/dist/src/ui/tui/screens/LogoutScreen.d.ts +4 -2
  80. package/dist/src/ui/tui/screens/LogoutScreen.js +17 -5
  81. package/dist/src/ui/tui/screens/McpScreen.d.ts +4 -4
  82. package/dist/src/ui/tui/screens/McpScreen.js +25 -17
  83. package/dist/src/ui/tui/screens/OutageScreen.d.ts +1 -1
  84. package/dist/src/ui/tui/screens/OutageScreen.js +5 -5
  85. package/dist/src/ui/tui/screens/OutroScreen.d.ts +5 -0
  86. package/dist/src/ui/tui/screens/OutroScreen.js +21 -14
  87. package/dist/src/ui/tui/screens/RegionSelectScreen.js +15 -13
  88. package/dist/src/ui/tui/screens/RunScreen.d.ts +7 -5
  89. package/dist/src/ui/tui/screens/RunScreen.js +102 -157
  90. package/dist/src/ui/tui/screens/SettingsOverrideScreen.d.ts +1 -1
  91. package/dist/src/ui/tui/screens/SettingsOverrideScreen.js +6 -5
  92. package/dist/src/ui/tui/screens/SetupScreen.d.ts +1 -1
  93. package/dist/src/ui/tui/screens/SetupScreen.js +7 -7
  94. package/dist/src/ui/tui/screens/SlackScreen.d.ts +2 -2
  95. package/dist/src/ui/tui/screens/SlackScreen.js +60 -35
  96. package/dist/src/ui/tui/session-constants.d.ts +41 -0
  97. package/dist/src/ui/tui/session-constants.js +38 -0
  98. package/dist/src/ui/tui/start-tui.d.ts +3 -1
  99. package/dist/src/ui/tui/start-tui.js +14 -10
  100. package/dist/src/ui/tui/store.d.ts +2 -1
  101. package/dist/src/ui/tui/store.js +33 -7
  102. package/dist/src/ui/tui/styles.d.ts +75 -19
  103. package/dist/src/ui/tui/styles.js +101 -19
  104. package/dist/src/ui/tui/utils/classify-error.d.ts +14 -0
  105. package/dist/src/ui/tui/utils/classify-error.js +90 -0
  106. package/dist/src/ui/tui/utils/diagnostics.d.ts +21 -0
  107. package/dist/src/ui/tui/utils/diagnostics.js +72 -0
  108. package/dist/src/ui/tui/utils/with-retry.d.ts +12 -0
  109. package/dist/src/ui/tui/utils/with-retry.js +32 -0
  110. package/dist/src/ui/tui/utils/with-timeout.d.ts +10 -0
  111. package/dist/src/ui/tui/utils/with-timeout.js +24 -0
  112. package/dist/src/utils/ampli-settings.d.ts +1 -1
  113. package/dist/src/utils/ampli-settings.js +15 -5
  114. package/dist/src/utils/api-key-store.js +5 -5
  115. package/dist/src/utils/atomic-write.d.ts +15 -0
  116. package/dist/src/utils/atomic-write.js +34 -0
  117. package/dist/src/utils/setup-utils.js +2 -2
  118. package/dist/src/utils/token-refresh.d.ts +22 -0
  119. package/dist/src/utils/token-refresh.js +79 -0
  120. package/dist/src/utils/wizard-abort.js +6 -1
  121. package/package.json +6 -6
  122. package/skills/instrumentation/add-analytics-instrumentation/SKILL.md +142 -0
  123. package/skills/instrumentation/diff-intake/SKILL.md +128 -0
  124. package/skills/instrumentation/discover-analytics-patterns/SKILL.md +185 -0
  125. package/skills/instrumentation/discover-event-surfaces/SKILL.md +322 -0
  126. package/skills/instrumentation/discover-event-surfaces/references/best-practices.md +563 -0
  127. package/skills/instrumentation/instrument-events/SKILL.md +169 -0
  128. package/skills/instrumentation/instrument-events/references/best-practices.md +563 -0
  129. package/skills/integration/integration-android/SKILL.md +49 -0
  130. package/skills/integration/integration-android/references/EXAMPLE.md +1977 -0
  131. package/skills/integration/integration-android/references/amplitude-quickstart.md +1845 -0
  132. package/skills/integration/integration-android/references/analytics.md +1778 -0
  133. package/skills/integration/integration-android/references/basic-integration-1.0-begin.md +43 -0
  134. package/skills/integration/integration-android/references/basic-integration-1.1-edit.md +35 -0
  135. package/skills/integration/integration-android/references/basic-integration-1.2-revise.md +23 -0
  136. package/skills/integration/integration-android/references/basic-integration-1.3-conclude.md +57 -0
  137. package/skills/integration/integration-angular/SKILL.md +49 -0
  138. package/skills/integration/integration-angular/references/EXAMPLE.md +899 -0
  139. package/skills/integration/integration-angular/references/amplitude-quickstart.md +1845 -0
  140. package/skills/integration/integration-angular/references/basic-integration-1.0-begin.md +43 -0
  141. package/skills/integration/integration-angular/references/basic-integration-1.1-edit.md +35 -0
  142. package/skills/integration/integration-angular/references/basic-integration-1.2-revise.md +23 -0
  143. package/skills/integration/integration-angular/references/basic-integration-1.3-conclude.md +57 -0
  144. package/skills/integration/integration-angular/references/browser-sdk-2.md +4680 -0
  145. package/skills/integration/integration-astro-hybrid/SKILL.md +56 -0
  146. package/skills/integration/integration-astro-hybrid/references/EXAMPLE.md +1095 -0
  147. package/skills/integration/integration-astro-hybrid/references/amplitude-quickstart.md +1845 -0
  148. package/skills/integration/integration-astro-hybrid/references/basic-integration-1.0-begin.md +43 -0
  149. package/skills/integration/integration-astro-hybrid/references/basic-integration-1.1-edit.md +35 -0
  150. package/skills/integration/integration-astro-hybrid/references/basic-integration-1.2-revise.md +23 -0
  151. package/skills/integration/integration-astro-hybrid/references/basic-integration-1.3-conclude.md +57 -0
  152. package/skills/integration/integration-astro-hybrid/references/browser-sdk-2.md +4680 -0
  153. package/skills/integration/integration-astro-ssr/SKILL.md +52 -0
  154. package/skills/integration/integration-astro-ssr/references/EXAMPLE.md +1106 -0
  155. package/skills/integration/integration-astro-ssr/references/amplitude-quickstart.md +1845 -0
  156. package/skills/integration/integration-astro-ssr/references/basic-integration-1.0-begin.md +43 -0
  157. package/skills/integration/integration-astro-ssr/references/basic-integration-1.1-edit.md +35 -0
  158. package/skills/integration/integration-astro-ssr/references/basic-integration-1.2-revise.md +23 -0
  159. package/skills/integration/integration-astro-ssr/references/basic-integration-1.3-conclude.md +57 -0
  160. package/skills/integration/integration-astro-ssr/references/browser-sdk-2.md +4680 -0
  161. package/skills/integration/integration-astro-static/SKILL.md +49 -0
  162. package/skills/integration/integration-astro-static/references/EXAMPLE.md +910 -0
  163. package/skills/integration/integration-astro-static/references/amplitude-quickstart.md +1845 -0
  164. package/skills/integration/integration-astro-static/references/basic-integration-1.0-begin.md +43 -0
  165. package/skills/integration/integration-astro-static/references/basic-integration-1.1-edit.md +35 -0
  166. package/skills/integration/integration-astro-static/references/basic-integration-1.2-revise.md +23 -0
  167. package/skills/integration/integration-astro-static/references/basic-integration-1.3-conclude.md +57 -0
  168. package/skills/integration/integration-astro-static/references/browser-sdk-2.md +4680 -0
  169. package/skills/integration/integration-astro-view-transitions/SKILL.md +51 -0
  170. package/skills/integration/integration-astro-view-transitions/references/EXAMPLE.md +979 -0
  171. package/skills/integration/integration-astro-view-transitions/references/amplitude-quickstart.md +1845 -0
  172. package/skills/integration/integration-astro-view-transitions/references/basic-integration-1.0-begin.md +43 -0
  173. package/skills/integration/integration-astro-view-transitions/references/basic-integration-1.1-edit.md +35 -0
  174. package/skills/integration/integration-astro-view-transitions/references/basic-integration-1.2-revise.md +23 -0
  175. package/skills/integration/integration-astro-view-transitions/references/basic-integration-1.3-conclude.md +57 -0
  176. package/skills/integration/integration-astro-view-transitions/references/browser-sdk-2.md +4680 -0
  177. package/skills/integration/integration-django/SKILL.md +57 -0
  178. package/skills/integration/integration-django/references/EXAMPLE.md +1005 -0
  179. package/skills/integration/integration-django/references/amplitude-quickstart.md +1845 -0
  180. package/skills/integration/integration-django/references/basic-integration-1.0-begin.md +43 -0
  181. package/skills/integration/integration-django/references/basic-integration-1.1-edit.md +35 -0
  182. package/skills/integration/integration-django/references/basic-integration-1.2-revise.md +23 -0
  183. package/skills/integration/integration-django/references/basic-integration-1.3-conclude.md +57 -0
  184. package/skills/integration/integration-django/references/python.md +1424 -0
  185. package/skills/integration/integration-expo/SKILL.md +53 -0
  186. package/skills/integration/integration-expo/references/EXAMPLE.md +1291 -0
  187. package/skills/integration/integration-expo/references/amplitude-quickstart.md +1845 -0
  188. package/skills/integration/integration-expo/references/basic-integration-1.0-begin.md +43 -0
  189. package/skills/integration/integration-expo/references/basic-integration-1.1-edit.md +35 -0
  190. package/skills/integration/integration-expo/references/basic-integration-1.2-revise.md +23 -0
  191. package/skills/integration/integration-expo/references/basic-integration-1.3-conclude.md +57 -0
  192. package/skills/integration/integration-expo/references/react-native-sdk.md +2819 -0
  193. package/skills/integration/integration-fastapi/SKILL.md +57 -0
  194. package/skills/integration/integration-fastapi/references/EXAMPLE.md +1389 -0
  195. package/skills/integration/integration-fastapi/references/amplitude-quickstart.md +1845 -0
  196. package/skills/integration/integration-fastapi/references/basic-integration-1.0-begin.md +43 -0
  197. package/skills/integration/integration-fastapi/references/basic-integration-1.1-edit.md +35 -0
  198. package/skills/integration/integration-fastapi/references/basic-integration-1.2-revise.md +23 -0
  199. package/skills/integration/integration-fastapi/references/basic-integration-1.3-conclude.md +57 -0
  200. package/skills/integration/integration-fastapi/references/python.md +1424 -0
  201. package/skills/integration/integration-flask/SKILL.md +56 -0
  202. package/skills/integration/integration-flask/references/EXAMPLE.md +1130 -0
  203. package/skills/integration/integration-flask/references/amplitude-quickstart.md +1845 -0
  204. package/skills/integration/integration-flask/references/basic-integration-1.0-begin.md +43 -0
  205. package/skills/integration/integration-flask/references/basic-integration-1.1-edit.md +35 -0
  206. package/skills/integration/integration-flask/references/basic-integration-1.2-revise.md +23 -0
  207. package/skills/integration/integration-flask/references/basic-integration-1.3-conclude.md +57 -0
  208. package/skills/integration/integration-flask/references/python.md +1424 -0
  209. package/skills/integration/integration-javascript_node/SKILL.md +54 -0
  210. package/skills/integration/integration-javascript_node/references/EXAMPLE.md +365 -0
  211. package/skills/integration/integration-javascript_node/references/amplitude-quickstart.md +1845 -0
  212. package/skills/integration/integration-javascript_node/references/analytics.md +1778 -0
  213. package/skills/integration/integration-javascript_node/references/basic-integration-1.0-begin.md +43 -0
  214. package/skills/integration/integration-javascript_node/references/basic-integration-1.1-edit.md +35 -0
  215. package/skills/integration/integration-javascript_node/references/basic-integration-1.2-revise.md +23 -0
  216. package/skills/integration/integration-javascript_node/references/basic-integration-1.3-conclude.md +57 -0
  217. package/skills/integration/integration-javascript_web/SKILL.md +58 -0
  218. package/skills/integration/integration-javascript_web/references/EXAMPLE.md +451 -0
  219. package/skills/integration/integration-javascript_web/references/amplitude-quickstart.md +1845 -0
  220. package/skills/integration/integration-javascript_web/references/basic-integration-1.0-begin.md +43 -0
  221. package/skills/integration/integration-javascript_web/references/basic-integration-1.1-edit.md +35 -0
  222. package/skills/integration/integration-javascript_web/references/basic-integration-1.2-revise.md +23 -0
  223. package/skills/integration/integration-javascript_web/references/basic-integration-1.3-conclude.md +57 -0
  224. package/skills/integration/integration-javascript_web/references/browser-sdk-2.md +4680 -0
  225. package/skills/integration/integration-laravel/SKILL.md +52 -0
  226. package/skills/integration/integration-laravel/references/EXAMPLE.md +2039 -0
  227. package/skills/integration/integration-laravel/references/amplitude-quickstart.md +1845 -0
  228. package/skills/integration/integration-laravel/references/analytics.md +1778 -0
  229. package/skills/integration/integration-laravel/references/basic-integration-1.0-begin.md +43 -0
  230. package/skills/integration/integration-laravel/references/basic-integration-1.1-edit.md +35 -0
  231. package/skills/integration/integration-laravel/references/basic-integration-1.2-revise.md +23 -0
  232. package/skills/integration/integration-laravel/references/basic-integration-1.3-conclude.md +57 -0
  233. package/skills/integration/integration-nextjs-app-router/SKILL.md +54 -0
  234. package/skills/integration/integration-nextjs-app-router/references/EXAMPLE.md +673 -0
  235. package/skills/integration/integration-nextjs-app-router/references/amplitude-quickstart.md +1845 -0
  236. package/skills/integration/integration-nextjs-app-router/references/basic-integration-1.0-begin.md +43 -0
  237. package/skills/integration/integration-nextjs-app-router/references/basic-integration-1.1-edit.md +35 -0
  238. package/skills/integration/integration-nextjs-app-router/references/basic-integration-1.2-revise.md +23 -0
  239. package/skills/integration/integration-nextjs-app-router/references/basic-integration-1.3-conclude.md +57 -0
  240. package/skills/integration/integration-nextjs-app-router/references/browser-sdk-2.md +4680 -0
  241. package/skills/integration/integration-nextjs-pages-router/SKILL.md +54 -0
  242. package/skills/integration/integration-nextjs-pages-router/references/EXAMPLE.md +735 -0
  243. package/skills/integration/integration-nextjs-pages-router/references/amplitude-quickstart.md +1845 -0
  244. package/skills/integration/integration-nextjs-pages-router/references/basic-integration-1.0-begin.md +43 -0
  245. package/skills/integration/integration-nextjs-pages-router/references/basic-integration-1.1-edit.md +35 -0
  246. package/skills/integration/integration-nextjs-pages-router/references/basic-integration-1.2-revise.md +23 -0
  247. package/skills/integration/integration-nextjs-pages-router/references/basic-integration-1.3-conclude.md +57 -0
  248. package/skills/integration/integration-nextjs-pages-router/references/browser-sdk-2.md +4680 -0
  249. package/skills/integration/integration-nuxt-3.6/SKILL.md +46 -0
  250. package/skills/integration/integration-nuxt-3.6/references/EXAMPLE.md +8422 -0
  251. package/skills/integration/integration-nuxt-3.6/references/amplitude-quickstart.md +1845 -0
  252. package/skills/integration/integration-nuxt-3.6/references/basic-integration-1.0-begin.md +43 -0
  253. package/skills/integration/integration-nuxt-3.6/references/basic-integration-1.1-edit.md +35 -0
  254. package/skills/integration/integration-nuxt-3.6/references/basic-integration-1.2-revise.md +23 -0
  255. package/skills/integration/integration-nuxt-3.6/references/basic-integration-1.3-conclude.md +57 -0
  256. package/skills/integration/integration-nuxt-3.6/references/browser-sdk-2.md +4680 -0
  257. package/skills/integration/integration-nuxt-4/SKILL.md +46 -0
  258. package/skills/integration/integration-nuxt-4/references/EXAMPLE.md +8670 -0
  259. package/skills/integration/integration-nuxt-4/references/amplitude-quickstart.md +1845 -0
  260. package/skills/integration/integration-nuxt-4/references/basic-integration-1.0-begin.md +43 -0
  261. package/skills/integration/integration-nuxt-4/references/basic-integration-1.1-edit.md +35 -0
  262. package/skills/integration/integration-nuxt-4/references/basic-integration-1.2-revise.md +23 -0
  263. package/skills/integration/integration-nuxt-4/references/basic-integration-1.3-conclude.md +57 -0
  264. package/skills/integration/integration-nuxt-4/references/browser-sdk-2.md +4680 -0
  265. package/skills/integration/integration-python/SKILL.md +53 -0
  266. package/skills/integration/integration-python/references/EXAMPLE.md +445 -0
  267. package/skills/integration/integration-python/references/amplitude-quickstart.md +1845 -0
  268. package/skills/integration/integration-python/references/basic-integration-1.0-begin.md +43 -0
  269. package/skills/integration/integration-python/references/basic-integration-1.1-edit.md +35 -0
  270. package/skills/integration/integration-python/references/basic-integration-1.2-revise.md +23 -0
  271. package/skills/integration/integration-python/references/basic-integration-1.3-conclude.md +57 -0
  272. package/skills/integration/integration-python/references/python.md +1424 -0
  273. package/skills/integration/integration-react-native/SKILL.md +49 -0
  274. package/skills/integration/integration-react-native/references/EXAMPLE.md +2253 -0
  275. package/skills/integration/integration-react-native/references/amplitude-quickstart.md +1845 -0
  276. package/skills/integration/integration-react-native/references/basic-integration-1.0-begin.md +43 -0
  277. package/skills/integration/integration-react-native/references/basic-integration-1.1-edit.md +35 -0
  278. package/skills/integration/integration-react-native/references/basic-integration-1.2-revise.md +23 -0
  279. package/skills/integration/integration-react-native/references/basic-integration-1.3-conclude.md +57 -0
  280. package/skills/integration/integration-react-native/references/react-native-sdk.md +2819 -0
  281. package/skills/integration/integration-react-react-router-6/SKILL.md +53 -0
  282. package/skills/integration/integration-react-react-router-6/references/EXAMPLE.md +570 -0
  283. package/skills/integration/integration-react-react-router-6/references/amplitude-quickstart.md +1845 -0
  284. package/skills/integration/integration-react-react-router-6/references/basic-integration-1.0-begin.md +43 -0
  285. package/skills/integration/integration-react-react-router-6/references/basic-integration-1.1-edit.md +35 -0
  286. package/skills/integration/integration-react-react-router-6/references/basic-integration-1.2-revise.md +23 -0
  287. package/skills/integration/integration-react-react-router-6/references/basic-integration-1.3-conclude.md +57 -0
  288. package/skills/integration/integration-react-react-router-6/references/browser-sdk-2.md +4680 -0
  289. package/skills/integration/integration-react-react-router-7-data/SKILL.md +53 -0
  290. package/skills/integration/integration-react-react-router-7-data/references/EXAMPLE.md +830 -0
  291. package/skills/integration/integration-react-react-router-7-data/references/amplitude-quickstart.md +1845 -0
  292. package/skills/integration/integration-react-react-router-7-data/references/basic-integration-1.0-begin.md +43 -0
  293. package/skills/integration/integration-react-react-router-7-data/references/basic-integration-1.1-edit.md +35 -0
  294. package/skills/integration/integration-react-react-router-7-data/references/basic-integration-1.2-revise.md +23 -0
  295. package/skills/integration/integration-react-react-router-7-data/references/basic-integration-1.3-conclude.md +57 -0
  296. package/skills/integration/integration-react-react-router-7-data/references/browser-sdk-2.md +4680 -0
  297. package/skills/integration/integration-react-react-router-7-declarative/SKILL.md +53 -0
  298. package/skills/integration/integration-react-react-router-7-declarative/references/EXAMPLE.md +609 -0
  299. package/skills/integration/integration-react-react-router-7-declarative/references/amplitude-quickstart.md +1845 -0
  300. package/skills/integration/integration-react-react-router-7-declarative/references/basic-integration-1.0-begin.md +43 -0
  301. package/skills/integration/integration-react-react-router-7-declarative/references/basic-integration-1.1-edit.md +35 -0
  302. package/skills/integration/integration-react-react-router-7-declarative/references/basic-integration-1.2-revise.md +23 -0
  303. package/skills/integration/integration-react-react-router-7-declarative/references/basic-integration-1.3-conclude.md +57 -0
  304. package/skills/integration/integration-react-react-router-7-declarative/references/browser-sdk-2.md +4680 -0
  305. package/skills/integration/integration-react-react-router-7-framework/SKILL.md +53 -0
  306. package/skills/integration/integration-react-react-router-7-framework/references/EXAMPLE.md +1081 -0
  307. package/skills/integration/integration-react-react-router-7-framework/references/amplitude-quickstart.md +1845 -0
  308. package/skills/integration/integration-react-react-router-7-framework/references/basic-integration-1.0-begin.md +43 -0
  309. package/skills/integration/integration-react-react-router-7-framework/references/basic-integration-1.1-edit.md +35 -0
  310. package/skills/integration/integration-react-react-router-7-framework/references/basic-integration-1.2-revise.md +23 -0
  311. package/skills/integration/integration-react-react-router-7-framework/references/basic-integration-1.3-conclude.md +57 -0
  312. package/skills/integration/integration-react-react-router-7-framework/references/browser-sdk-2.md +4680 -0
  313. package/skills/integration/integration-react-tanstack-router-code-based/SKILL.md +57 -0
  314. package/skills/integration/integration-react-tanstack-router-code-based/references/EXAMPLE.md +659 -0
  315. package/skills/integration/integration-react-tanstack-router-code-based/references/amplitude-quickstart.md +1845 -0
  316. package/skills/integration/integration-react-tanstack-router-code-based/references/basic-integration-1.0-begin.md +43 -0
  317. package/skills/integration/integration-react-tanstack-router-code-based/references/basic-integration-1.1-edit.md +35 -0
  318. package/skills/integration/integration-react-tanstack-router-code-based/references/basic-integration-1.2-revise.md +23 -0
  319. package/skills/integration/integration-react-tanstack-router-code-based/references/basic-integration-1.3-conclude.md +57 -0
  320. package/skills/integration/integration-react-tanstack-router-code-based/references/browser-sdk-2.md +4680 -0
  321. package/skills/integration/integration-react-tanstack-router-file-based/SKILL.md +57 -0
  322. package/skills/integration/integration-react-tanstack-router-file-based/references/EXAMPLE.md +777 -0
  323. package/skills/integration/integration-react-tanstack-router-file-based/references/amplitude-quickstart.md +1845 -0
  324. package/skills/integration/integration-react-tanstack-router-file-based/references/basic-integration-1.0-begin.md +43 -0
  325. package/skills/integration/integration-react-tanstack-router-file-based/references/basic-integration-1.1-edit.md +35 -0
  326. package/skills/integration/integration-react-tanstack-router-file-based/references/basic-integration-1.2-revise.md +23 -0
  327. package/skills/integration/integration-react-tanstack-router-file-based/references/basic-integration-1.3-conclude.md +57 -0
  328. package/skills/integration/integration-react-tanstack-router-file-based/references/browser-sdk-2.md +4680 -0
  329. package/skills/integration/integration-react-vite/SKILL.md +53 -0
  330. package/skills/integration/integration-react-vite/references/EXAMPLE.md +542 -0
  331. package/skills/integration/integration-react-vite/references/amplitude-quickstart.md +1845 -0
  332. package/skills/integration/integration-react-vite/references/basic-integration-1.0-begin.md +43 -0
  333. package/skills/integration/integration-react-vite/references/basic-integration-1.1-edit.md +35 -0
  334. package/skills/integration/integration-react-vite/references/basic-integration-1.2-revise.md +23 -0
  335. package/skills/integration/integration-react-vite/references/basic-integration-1.3-conclude.md +57 -0
  336. package/skills/integration/integration-react-vite/references/browser-sdk-2.md +4680 -0
  337. package/skills/integration/integration-ruby/SKILL.md +50 -0
  338. package/skills/integration/integration-ruby/references/EXAMPLE.md +420 -0
  339. package/skills/integration/integration-ruby/references/amplitude-quickstart.md +1845 -0
  340. package/skills/integration/integration-ruby/references/analytics.md +1778 -0
  341. package/skills/integration/integration-ruby/references/basic-integration-1.0-begin.md +43 -0
  342. package/skills/integration/integration-ruby/references/basic-integration-1.1-edit.md +35 -0
  343. package/skills/integration/integration-ruby/references/basic-integration-1.2-revise.md +23 -0
  344. package/skills/integration/integration-ruby/references/basic-integration-1.3-conclude.md +57 -0
  345. package/skills/integration/integration-ruby-on-rails/SKILL.md +55 -0
  346. package/skills/integration/integration-ruby-on-rails/references/EXAMPLE.md +1013 -0
  347. package/skills/integration/integration-ruby-on-rails/references/amplitude-quickstart.md +1845 -0
  348. package/skills/integration/integration-ruby-on-rails/references/analytics.md +1778 -0
  349. package/skills/integration/integration-ruby-on-rails/references/basic-integration-1.0-begin.md +43 -0
  350. package/skills/integration/integration-ruby-on-rails/references/basic-integration-1.1-edit.md +35 -0
  351. package/skills/integration/integration-ruby-on-rails/references/basic-integration-1.2-revise.md +23 -0
  352. package/skills/integration/integration-ruby-on-rails/references/basic-integration-1.3-conclude.md +57 -0
  353. package/skills/integration/integration-sveltekit/SKILL.md +47 -0
  354. package/skills/integration/integration-sveltekit/references/EXAMPLE.md +14121 -0
  355. package/skills/integration/integration-sveltekit/references/amplitude-quickstart.md +1845 -0
  356. package/skills/integration/integration-sveltekit/references/basic-integration-1.0-begin.md +43 -0
  357. package/skills/integration/integration-sveltekit/references/basic-integration-1.1-edit.md +35 -0
  358. package/skills/integration/integration-sveltekit/references/basic-integration-1.2-revise.md +23 -0
  359. package/skills/integration/integration-sveltekit/references/basic-integration-1.3-conclude.md +57 -0
  360. package/skills/integration/integration-sveltekit/references/browser-sdk-2.md +4680 -0
  361. package/skills/integration/integration-swift/SKILL.md +49 -0
  362. package/skills/integration/integration-swift/references/EXAMPLE.md +660 -0
  363. package/skills/integration/integration-swift/references/amplitude-quickstart.md +1845 -0
  364. package/skills/integration/integration-swift/references/analytics.md +1778 -0
  365. package/skills/integration/integration-swift/references/basic-integration-1.0-begin.md +43 -0
  366. package/skills/integration/integration-swift/references/basic-integration-1.1-edit.md +35 -0
  367. package/skills/integration/integration-swift/references/basic-integration-1.2-revise.md +23 -0
  368. package/skills/integration/integration-swift/references/basic-integration-1.3-conclude.md +57 -0
  369. package/skills/integration/integration-tanstack-start/SKILL.md +58 -0
  370. package/skills/integration/integration-tanstack-start/references/EXAMPLE.md +998 -0
  371. package/skills/integration/integration-tanstack-start/references/amplitude-quickstart.md +1845 -0
  372. package/skills/integration/integration-tanstack-start/references/basic-integration-1.0-begin.md +43 -0
  373. package/skills/integration/integration-tanstack-start/references/basic-integration-1.1-edit.md +35 -0
  374. package/skills/integration/integration-tanstack-start/references/basic-integration-1.2-revise.md +23 -0
  375. package/skills/integration/integration-tanstack-start/references/basic-integration-1.3-conclude.md +57 -0
  376. package/skills/integration/integration-tanstack-start/references/browser-sdk-2.md +4680 -0
  377. package/skills/integration/integration-vue-3/SKILL.md +46 -0
  378. package/skills/integration/integration-vue-3/references/EXAMPLE.md +846 -0
  379. package/skills/integration/integration-vue-3/references/amplitude-quickstart.md +1845 -0
  380. package/skills/integration/integration-vue-3/references/basic-integration-1.0-begin.md +43 -0
  381. package/skills/integration/integration-vue-3/references/basic-integration-1.1-edit.md +35 -0
  382. package/skills/integration/integration-vue-3/references/basic-integration-1.2-revise.md +23 -0
  383. package/skills/integration/integration-vue-3/references/basic-integration-1.3-conclude.md +57 -0
  384. package/skills/integration/integration-vue-3/references/browser-sdk-2.md +4680 -0
  385. package/skills/taxonomy/amplitude-quickstart-taxonomy-agent/SKILL.md +228 -0
  386. package/dist/src/ui/tui/components/TitleBar.d.ts +0 -8
  387. package/dist/src/ui/tui/components/TitleBar.js +0 -27
  388. package/dist/src/ui/tui/primitives/KagiSmallWebViewer.d.ts +0 -7
  389. package/dist/src/ui/tui/primitives/KagiSmallWebViewer.js +0 -101
  390. package/dist/src/utils/anthropic-status.d.ts +0 -17
  391. package/dist/src/utils/anthropic-status.js +0 -51
@@ -1,4 +1,4 @@
1
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  /**
3
3
  * RegionSelectScreen — Choose Amplitude data-center region (US or EU).
4
4
  *
@@ -11,13 +11,13 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
11
11
  * US is focused by default — pressing Enter selects it without navigating.
12
12
  */
13
13
  import { Box, Text } from 'ink';
14
- import { useSyncExternalStore } from 'react';
14
+ import { useWizardStore } from '../hooks/useWizardStore.js';
15
15
  import { PickerMenu } from '../primitives/index.js';
16
- import { Colors } from '../styles.js';
16
+ import { Colors, Icons } from '../styles.js';
17
17
  const REGIONS = [
18
18
  {
19
19
  label: 'United States',
20
- hint: 'app.amplitude.com · default',
20
+ hint: 'app.amplitude.com',
21
21
  value: 'us',
22
22
  },
23
23
  {
@@ -27,14 +27,16 @@ const REGIONS = [
27
27
  },
28
28
  ];
29
29
  export const RegionSelectScreen = ({ store }) => {
30
- useSyncExternalStore((cb) => store.subscribe(cb), () => store.getSnapshot());
30
+ useWizardStore(store);
31
31
  const { session } = store;
32
- return (_jsx(_Fragment, { children: _jsxs(Box, { flexDirection: "column", flexGrow: 1, paddingTop: 1, children: [_jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [_jsx(Text, { bold: true, color: Colors.accent, children: session.regionForced
33
- ? 'Switch data-center region'
34
- : 'Where is your Amplitude organization?' }), _jsx(Text, { color: Colors.muted, children: session.regionForced
35
- ? `Current: ${session.region?.toUpperCase() ?? 'US'} — pick a new region below`
36
- : 'Press Enter to use US (default), or select EU if your org is on the EU data center.' })] }), _jsx(PickerMenu, { options: REGIONS, onSelect: (value) => {
37
- const region = Array.isArray(value) ? value[0] : value;
38
- store.setRegion(region);
39
- } })] }) }));
32
+ const heading = session.regionForced
33
+ ? 'Switch data-center region'
34
+ : 'Select your data region';
35
+ const hint = session.regionForced
36
+ ? `Current: ${session.region?.toUpperCase() ?? 'US'} ${Icons.dash} pick a new region below`
37
+ : 'Select the region for your Amplitude project. This should match the region your organization uses.';
38
+ return (_jsxs(Box, { flexDirection: "column", flexGrow: 1, children: [_jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [_jsx(Text, { bold: true, color: Colors.heading, children: heading }), _jsx(Text, { color: Colors.muted, children: hint })] }), _jsx(PickerMenu, { options: REGIONS, onSelect: (value) => {
39
+ const region = Array.isArray(value) ? value[0] : value;
40
+ store.setRegion(region);
41
+ } }), _jsx(Box, { marginTop: 1, children: _jsxs(Text, { color: Colors.muted, children: [Icons.dot, " Data residency affects API endpoints and compliance. You can change this later with", ' ', _jsx(Text, { color: Colors.secondary, children: "/region" }), "."] }) })] }));
40
42
  };
@@ -1,12 +1,14 @@
1
1
  /**
2
- * RunScreen — Tabbed observational view of the agent run.
2
+ * RunScreen — Agent dashboard focused on tasks and progress.
3
3
  *
4
- * Two tabs:
5
- * - Status: SplitView with TipsCard (left) + ProgressList (right)
4
+ * Tabs:
5
+ * - Progress (default): full-width ProgressList, elapsed timer, currently
6
+ * editing file, inline event plan, and compact conditional tips
6
7
  * - Logs: LogViewer tailing the wizard log file
8
+ * - Snake: easter egg game
7
9
  *
8
- * No prompts the agent runs headlessly.
9
- * TipsCard reactively shows tips based on discovered features.
10
+ * No marketing tips carousel. Conditional feature tips (Stripe, LLM) are
11
+ * shown as single compact lines when relevant.
10
12
  */
11
13
  import type { WizardStore } from '../store.js';
12
14
  interface RunScreenProps {
@@ -1,162 +1,93 @@
1
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
1
+ import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
2
  /**
3
- * RunScreen — Tabbed observational view of the agent run.
3
+ * RunScreen — Agent dashboard focused on tasks and progress.
4
4
  *
5
- * Two tabs:
6
- * - Status: SplitView with TipsCard (left) + ProgressList (right)
5
+ * Tabs:
6
+ * - Progress (default): full-width ProgressList, elapsed timer, currently
7
+ * editing file, inline event plan, and compact conditional tips
7
8
  * - Logs: LogViewer tailing the wizard log file
9
+ * - Snake: easter egg game
8
10
  *
9
- * No prompts the agent runs headlessly.
10
- * TipsCard reactively shows tips based on discovered features.
11
+ * No marketing tips carousel. Conditional feature tips (Stripe, LLM) are
12
+ * shown as single compact lines when relevant.
11
13
  */
12
14
  import { Box, Text } from 'ink';
13
- import { useState, useEffect } from 'react';
15
+ import { useState, useEffect, useRef } from 'react';
14
16
  import { useScreenInput } from '../hooks/useScreenInput.js';
15
- import { useStdoutDimensions } from '../hooks/useStdoutDimensions.js';
16
- import { useSyncExternalStore } from 'react';
17
- import { TabContainer, SplitView, ProgressList, LogViewer, EventPlanViewer, KagiSmallWebViewer, SnakeGame, } from '../primitives/index.js';
17
+ import { useWizardStore } from '../hooks/useWizardStore.js';
18
+ import { TabContainer, ProgressList, LogViewer, SnakeGame, EventPlanViewer, } from '../primitives/index.js';
18
19
  import { Colors, Icons } from '../styles.js';
19
- import { AnimatedAmplitudeLogo } from '../components/AmplitudeLogo.js';
20
- import { DiscoveredFeature, AdditionalFeature, ADDITIONAL_FEATURE_LABELS, } from '../../../lib/wizard-session.js';
20
+ import { BrailleSpinner } from '../components/BrailleSpinner.js';
21
+ import { AmplitudeLogo } from '../components/AmplitudeLogo.js';
22
+ import { useStdoutDimensions } from '../hooks/useStdoutDimensions.js';
23
+ import { DiscoveredFeature } from '../../../lib/wizard-session.js';
24
+ import { AdditionalFeature, ADDITIONAL_FEATURE_LABELS, } from '../session-constants.js';
21
25
  import { OUTBOUND_URLS } from '../../../lib/constants.js';
22
26
  const LOG_FILE = '/tmp/amplitude-wizard.log';
23
- /** Tips that rotate on a timer each inner array is one "page". */
24
- const TIP_PAGES = [
25
- [
26
- {
27
- id: 'events',
28
- title: 'Events are the bedrock of your Amplitude data',
29
- description: 'As people use your product, events build a picture of their behavior and satisfaction. Good events make great data.',
30
- },
31
- {
32
- id: 'persons',
33
- title: 'You can also track people and groups with Amplitude',
34
- description: 'Events can be associated with the humans who generate them, letting you understand a specific customer problem if they email about it.',
35
- },
36
- {
37
- id: 'properties',
38
- title: 'Get way more detail using properties',
39
- description: 'Events and person records can have any properties you want. Track things like how they found your website, what subscription tier they choose, and much more.',
40
- },
41
- ],
42
- [
43
- {
44
- id: 'session-replay',
45
- title: 'Watch real user sessions with Session Replay',
46
- description: 'See exactly what users see — clicks, scrolls, rage clicks, and dead ends. Debug issues faster and build empathy for your users without scheduling a single call.',
47
- },
48
- {
49
- id: 'experimentation',
50
- title: 'Run experiments with confidence',
51
- description: 'Amplitude supports both feature experiments and web experiments. Test hypotheses, roll out changes safely, and let data decide what ships.',
52
- },
53
- {
54
- id: 'feature-flags',
55
- title: 'Ship fearlessly with feature flags',
56
- description: 'Control who sees what, when. Roll out features gradually, kill switches instantly, and decouple deployment from release.',
57
- },
58
- ],
59
- [
60
- {
61
- id: 'guides-surveys',
62
- title: 'Reach users in-product with Guides & Surveys',
63
- description: 'Onboard new users, announce features, and collect feedback — all without a code deploy. Target the right audience using your Amplitude data.',
64
- },
65
- {
66
- id: 'activation',
67
- title: 'Unify your data with Amplitude Activation',
68
- description: 'Collect, clean, and route data to every tool in your stack. One SDK, one source of truth, zero data silos.',
69
- },
70
- {
71
- id: 'ai',
72
- title: 'Ask questions in plain English',
73
- description: 'Amplitude AI lets anyone on your team ask data questions in natural language and get instant charts and insights — no SQL required.',
74
- },
75
- ],
76
- [
77
- {
78
- id: 'mcp',
79
- title: 'Give your AI agents analytics superpowers with Amplitude MCP',
80
- description: 'Connect any AI agent to your Amplitude data via MCP. Your agents can query metrics, build charts, and act on insights — no dashboard required.',
81
- },
82
- {
83
- id: 'skills-marketplace',
84
- title: 'Extend your agents with the Skills Marketplace',
85
- description: 'Browse and install pre-built skills that teach your agents new tricks — from anomaly detection to automated reporting. Build once, share across your org.',
86
- },
87
- {
88
- id: 'global-agent',
89
- title: 'Meet your always-on analytics agent',
90
- description: 'Ask questions in Amplitude or in Slack and get instant answers backed by your data. One agent that works wherever your team already lives.',
91
- },
92
- ],
93
- ];
94
- /** How often (ms) to rotate to the next tip page. */
95
- const TIP_ROTATION_INTERVAL = 30_000;
96
- /** Conditional tips shown regardless of the current page. */
97
- const CONDITIONAL_TIPS = [
98
- {
99
- id: 'stripe',
100
- title: 'You can track Stripe revenue with Amplitude',
101
- description: 'Add Stripe as a data source while you wait:',
102
- url: OUTBOUND_URLS.stripeDataSource,
103
- visible: (store) => store.session.discoveredFeatures.includes(DiscoveredFeature.Stripe),
104
- },
105
- {
106
- id: 'llm',
107
- title: 'Amplitude can also help you track your LLM costs',
108
- description: '',
109
- visible: (store) => store.session.discoveredFeatures.includes(DiscoveredFeature.LLM),
110
- toggle: {
111
- key: 'l',
112
- feature: AdditionalFeature.LLM,
113
- enabledLabel: 'LLM analytics setup queued next',
114
- prompt: 'We detected LLM dependencies in your project.',
115
- isEnabled: (store) => store.session.llmOptIn,
116
- },
117
- },
118
- ];
119
- /** Min terminal width to show the logo in the TipsCard. */
120
- const LOGO_MIN_COLS = 100;
121
- /** Delay (ms) between each tip appearing during a page transition. */
122
- const TIP_REVEAL_DELAY = 400;
123
- const TipsCard = ({ store }) => {
124
- const [columns] = useStdoutDimensions();
125
- const [pageIndex, setPageIndex] = useState(0);
126
- /** Number of page tips currently visible (for staggered reveal). */
127
- const [visibleCount, setVisibleCount] = useState(TIP_PAGES[0].length);
27
+ /** File extensions used to detect "currently editing" from status messages. */
28
+ const FILE_EXT_PATTERN = /\S+\.(?:tsx?|jsx?|py|swift|kt|java|go|dart|cs|cpp|vue|svelte|rb)\b/;
29
+ /** Format elapsed seconds as "Xm Ys". */
30
+ function formatElapsed(seconds) {
31
+ const m = Math.floor(seconds / 60);
32
+ const s = seconds % 60;
33
+ if (m === 0)
34
+ return `${s}s`;
35
+ return `${m}m ${s}s`;
36
+ }
37
+ /** Extract a file path from the most recent status message, if any. */
38
+ function extractCurrentFile(messages) {
39
+ for (let i = messages.length - 1; i >= 0; i--) {
40
+ const match = messages[i].match(FILE_EXT_PATTERN);
41
+ if (match)
42
+ return match[0];
43
+ }
44
+ return null;
45
+ }
46
+ /** Compact inline display of planned event names. */
47
+ const InlineEventPlan = ({ store }) => {
48
+ const events = store.eventPlan.filter((e) => e.name);
49
+ if (events.length === 0)
50
+ return null;
51
+ return (_jsx(Box, { marginTop: 1, flexDirection: "column", children: _jsxs(Text, { color: Colors.secondary, children: [_jsxs(Text, { bold: true, color: Colors.accent, children: [Icons.diamond, " Events:"] }), ' ', events.map((e) => e.name).join(', ')] }) }));
52
+ };
53
+ /** Compact conditional tips — Stripe link, LLM toggle. */
54
+ const ConditionalTips = ({ store }) => {
55
+ const { discoveredFeatures } = store.session;
56
+ const tips = [];
57
+ if (discoveredFeatures.includes(DiscoveredFeature.Stripe)) {
58
+ tips.push(_jsxs(Text, { color: Colors.secondary, children: [_jsx(Text, { color: Colors.accent, children: Icons.diamond }), " Stripe detected", Icons.dash, " add as data source:", ' ', _jsx(Text, { color: Colors.accentSecondary, children: OUTBOUND_URLS.stripeDataSource })] }, "stripe"));
59
+ }
60
+ if (discoveredFeatures.includes(DiscoveredFeature.LLM)) {
61
+ const enabled = store.session.llmOptIn;
62
+ tips.push(_jsxs(Text, { color: Colors.secondary, children: [_jsx(Text, { color: Colors.accent, children: Icons.diamond }), ' ', enabled ? (_jsxs(Text, { color: Colors.success, children: [Icons.checkmark, " LLM analytics setup queued"] })) : (_jsxs(Text, { children: ["LLM dependencies detected ", Icons.dash, " press", ' ', _jsx(Text, { bold: true, color: Colors.accent, children: "L" }), ' ', "to enable LLM analytics"] }))] }, "llm"));
63
+ }
64
+ if (tips.length === 0)
65
+ return null;
66
+ return (_jsx(Box, { flexDirection: "column", marginTop: 1, children: tips }));
67
+ };
68
+ /** The main Progress tab content. */
69
+ const MIN_COLS_FOR_LOGO = 90;
70
+ const MIN_ROWS_FOR_LOGO = 22;
71
+ const ProgressTab = ({ store }) => {
72
+ const [cols, rows] = useStdoutDimensions();
73
+ const showLogo = cols >= MIN_COLS_FOR_LOGO && rows >= MIN_ROWS_FOR_LOGO;
74
+ const [elapsed, setElapsed] = useState(0);
75
+ const startRef = useRef(Date.now());
76
+ // Elapsed time counter
128
77
  useEffect(() => {
129
- const timer = setInterval(() => {
130
- setPageIndex((prev) => (prev + 1) % TIP_PAGES.length);
131
- setVisibleCount(0);
132
- }, TIP_ROTATION_INTERVAL);
133
- return () => clearInterval(timer);
78
+ const id = setInterval(() => {
79
+ setElapsed(Math.floor((Date.now() - startRef.current) / 1000));
80
+ }, 1000);
81
+ return () => clearInterval(id);
134
82
  }, []);
135
- // Stagger reveal: increment visibleCount one at a time after each page change
136
- useEffect(() => {
137
- const pageLen = TIP_PAGES[pageIndex].length;
138
- if (visibleCount >= pageLen)
139
- return;
140
- const timer = setTimeout(() => setVisibleCount((c) => c + 1), visibleCount === 0 ? 100 : TIP_REVEAL_DELAY);
141
- return () => clearTimeout(timer);
142
- }, [pageIndex, visibleCount]);
83
+ // Handle LLM toggle key
143
84
  useScreenInput((input) => {
144
- for (const tip of CONDITIONAL_TIPS) {
145
- if (tip.toggle &&
146
- input.toLowerCase() === tip.toggle.key &&
147
- (!tip.visible || tip.visible(store)) &&
148
- !tip.toggle.isEnabled(store)) {
149
- store.enableFeature(tip.toggle.feature);
150
- }
85
+ if (input.toLowerCase() === 'l' &&
86
+ store.session.discoveredFeatures.includes(DiscoveredFeature.LLM) &&
87
+ !store.session.llmOptIn) {
88
+ store.enableFeature(AdditionalFeature.LLM);
151
89
  }
152
90
  });
153
- const pageTips = TIP_PAGES[pageIndex].slice(0, visibleCount);
154
- const visibleConditional = CONDITIONAL_TIPS.filter((tip) => !tip.visible || tip.visible(store));
155
- const allTips = [...pageTips, ...visibleConditional];
156
- return (_jsxs(Box, { flexDirection: "column", paddingX: 1, children: [columns >= LOGO_MIN_COLS && _jsx(AnimatedAmplitudeLogo, {}), _jsx(Text, { bold: true, color: Colors.accent, children: "Learn about Amplitude" }), _jsxs(Text, { color: Colors.muted, children: [Icons.diamond, " ", pageIndex + 1, "/", TIP_PAGES.length] }), _jsx(Box, { height: 1 }), allTips.map((tip) => (_jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [_jsxs(Text, { children: [_jsxs(Text, { color: Colors.accent, children: [Icons.diamond, " "] }), _jsx(Text, { bold: true, children: tip.title })] }), tip.toggle ? (tip.toggle.isEnabled(store) ? (_jsxs(Text, { color: Colors.success, children: [Icons.check, " ", tip.toggle.enabledLabel] })) : (_jsxs(Text, { color: Colors.muted, children: [tip.toggle.prompt, " Press", ' ', _jsx(Text, { bold: true, color: Colors.accent, children: tip.toggle.key.toUpperCase() }), ' ', "to enable."] }))) : (_jsxs(Text, { color: Colors.muted, children: [tip.description, tip.url && (_jsxs(_Fragment, { children: [' ', _jsx(Text, { color: "cyan", children: tip.url })] }))] }))] }, tip.id)))] }));
157
- };
158
- export const RunScreen = ({ store }) => {
159
- useSyncExternalStore((cb) => store.subscribe(cb), () => store.getSnapshot());
160
91
  const progressItems = store.tasks.map((t) => ({
161
92
  label: t.label,
162
93
  activeForm: t.activeForm,
@@ -174,38 +105,52 @@ export const RunScreen = ({ store }) => {
174
105
  status: 'in_progress',
175
106
  });
176
107
  }
108
+ const rawFile = extractCurrentFile(store.statusMessages);
109
+ const lastFileRef = useRef(null);
110
+ if (rawFile)
111
+ lastFileRef.current = rawFile;
112
+ const currentFile = lastFileRef.current;
113
+ const completed = progressItems.filter((t) => t.status === 'completed').length;
114
+ const total = progressItems.length;
115
+ return (_jsxs(Box, { flexDirection: "row", flexGrow: 1, children: [_jsxs(Box, { flexDirection: "column", flexGrow: 1, flexShrink: 1, paddingX: 1, children: [_jsxs(Box, { marginBottom: 1, justifyContent: "space-between", children: [_jsxs(Box, { gap: 1, children: [_jsx(BrailleSpinner, { color: Colors.active }), _jsx(Text, { color: Colors.body, bold: true, children: total > 0
116
+ ? `${completed}/${total} tasks complete`
117
+ : 'Agent running' }), _jsxs(Text, { color: Colors.muted, children: [Icons.dot, " ", formatElapsed(elapsed)] })] }), currentFile && (_jsx(Text, { color: Colors.muted, wrap: "truncate-end", children: currentFile }))] }), _jsx(ProgressList, { items: progressItems, title: "Tasks" }), _jsx(InlineEventPlan, { store: store }), _jsx(ConditionalTips, { store: store })] }), showLogo && (_jsx(Box, { flexShrink: 0, marginTop: 1, marginRight: 1, children: _jsx(AmplitudeLogo, {}) }))] }));
118
+ };
119
+ export const RunScreen = ({ store }) => {
120
+ useWizardStore(store);
177
121
  const lastStatus = store.statusMessages.length > 0
178
122
  ? store.statusMessages[store.statusMessages.length - 1]
179
123
  : undefined;
124
+ const hasEvents = store.eventPlan.length > 0;
180
125
  const tabs = [
181
126
  {
182
- id: 'status',
183
- label: 'Status',
184
- component: (_jsx(SplitView, { left: _jsx(TipsCard, { store: store }), right: _jsx(ProgressList, { items: progressItems, title: "Tasks" }) })),
127
+ id: 'progress',
128
+ label: 'Progress',
129
+ component: _jsx(ProgressTab, { store: store }),
185
130
  },
186
- ...(store.eventPlan.length > 0
131
+ ...(hasEvents
187
132
  ? [
188
133
  {
189
134
  id: 'events',
190
- label: 'Event plan',
135
+ label: 'Events',
191
136
  component: _jsx(EventPlanViewer, { events: store.eventPlan }),
192
137
  },
193
138
  ]
194
139
  : []),
195
140
  {
196
141
  id: 'logs',
197
- label: 'All logs',
142
+ label: 'Logs',
198
143
  component: _jsx(LogViewer, { filePath: LOG_FILE }),
199
144
  },
200
- {
201
- id: 'smallweb',
202
- label: 'Small Web',
203
- component: _jsx(KagiSmallWebViewer, {}),
204
- },
205
145
  {
206
146
  id: 'snake',
207
- label: 'Snake',
208
- component: _jsx(SnakeGame, {}),
147
+ label: 'Snake (WASD)',
148
+ component: (_jsx(SnakeGame, { music: false, keybindings: {
149
+ up: ['w'],
150
+ down: ['s'],
151
+ left: ['a'],
152
+ right: ['d'],
153
+ } })),
209
154
  },
210
155
  ];
211
156
  return (_jsx(TabContainer, { tabs: tabs, statusMessage: lastStatus, requestedTab: store.requestedTab, onTabConsumed: () => store.clearRequestedTab() }));
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * SettingsOverrideScreen — Modal when .claude/settings.json contains env overrides
3
- * that block the Wizard from reaching the Amplitude LLM Gateway.
3
+ * that block the Wizard from reaching the Amplitude LLM Gateway (v2).
4
4
  */
5
5
  import type { WizardStore } from '../store.js';
6
6
  interface SettingsOverrideScreenProps {
@@ -1,20 +1,21 @@
1
1
  import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
2
  /**
3
3
  * SettingsOverrideScreen — Modal when .claude/settings.json contains env overrides
4
- * that block the Wizard from reaching the Amplitude LLM Gateway.
4
+ * that block the Wizard from reaching the Amplitude LLM Gateway (v2).
5
5
  */
6
6
  import { Box, Text } from 'ink';
7
- import { useState, useSyncExternalStore } from 'react';
7
+ import { useState } from 'react';
8
+ import { useWizardStore } from '../hooks/useWizardStore.js';
8
9
  import { ConfirmationInput } from '../primitives/index.js';
9
- import { Colors, Icons } from '../styles.js';
10
+ import { Colors, Icons, Layout } from '../styles.js';
10
11
  export const SettingsOverrideScreen = ({ store, }) => {
11
- useSyncExternalStore((cb) => store.subscribe(cb), () => store.getSnapshot());
12
+ useWizardStore(store);
12
13
  const [feedback, setFeedback] = useState(null);
13
14
  const keys = store.session.settingsOverrideKeys;
14
15
  if (!keys || keys.length === 0) {
15
16
  return null;
16
17
  }
17
- return (_jsx(Box, { flexDirection: "column", flexGrow: 1, alignItems: "center", justifyContent: "center", children: _jsxs(Box, { flexDirection: "column", borderStyle: "round", borderColor: "red", paddingX: 3, paddingY: 1, width: 64, children: [_jsx(Box, { justifyContent: "center", marginBottom: 1, children: _jsxs(Text, { color: "red", bold: true, children: [Icons.warning, " Settings Conflict"] }) }), _jsxs(Text, { children: ["Your project's ", _jsx(Text, { bold: true, children: ".claude/settings.json" }), " sets:"] }), _jsx(Box, { flexDirection: "column", marginY: 1, paddingLeft: 2, children: keys.map((key) => (_jsxs(Text, { children: [Icons.bullet, ' ', _jsx(Text, { color: "yellow", bold: true, children: key })] }, key))) }), _jsx(Text, { color: Colors.muted, children: "These overrides prevent the Wizard from reaching the Amplitude LLM Gateway. We can back up the file and continue." }), feedback && (_jsx(Box, { marginTop: 1, children: _jsxs(Text, { color: "yellow", children: [Icons.warning, " ", feedback] }) })), _jsx(Box, { marginY: 1, children: _jsx(Text, { color: Colors.muted, children: '─'.repeat(56) }) }), _jsx(ConfirmationInput, { message: "Back up to .wizard-backup and continue?", confirmLabel: "Backup & continue [Enter]", cancelLabel: "Exit [Esc]", onConfirm: () => {
18
+ return (_jsx(Box, { flexDirection: "column", flexGrow: 1, alignItems: "center", justifyContent: "center", children: _jsxs(Box, { flexDirection: "column", borderStyle: "round", borderColor: Colors.error, paddingX: 3, paddingY: 1, width: 64, children: [_jsx(Box, { justifyContent: "center", marginBottom: 1, children: _jsxs(Text, { color: Colors.error, bold: true, children: [Icons.diamond, " Settings Conflict"] }) }), _jsxs(Text, { color: Colors.body, children: ["Your project's", ' ', _jsx(Text, { bold: true, color: Colors.heading, children: ".claude/settings.json" }), ' ', "sets:"] }), _jsx(Box, { flexDirection: "column", marginY: 1, paddingLeft: 2, children: keys.map((key) => (_jsxs(Text, { color: Colors.body, children: [Icons.bullet, ' ', _jsx(Text, { color: Colors.warning, bold: true, children: key })] }, key))) }), _jsx(Text, { color: Colors.secondary, children: "These overrides prevent the Wizard from reaching the Amplitude LLM Gateway. We can back up the file and continue." }), feedback && (_jsx(Box, { marginTop: 1, children: _jsxs(Text, { color: Colors.warning, children: [Icons.diamond, " ", feedback] }) })), _jsx(Box, { marginY: 1, children: _jsx(Text, { color: Colors.border, children: Layout.separatorChar.repeat(56) }) }), _jsx(ConfirmationInput, { message: "Back up to .wizard-backup and continue?", confirmLabel: "Backup & continue [Enter]", cancelLabel: "Exit [Esc]", onConfirm: () => {
18
19
  const ok = store.backupAndFixSettingsOverride();
19
20
  if (!ok) {
20
21
  setFeedback('Could not back up the settings file.');
@@ -1,5 +1,5 @@
1
1
  /**
2
- * SetupScreen — Generic framework disambiguation.
2
+ * SetupScreen — Generic framework disambiguation (v2).
3
3
  *
4
4
  * Iterates unresolved setup questions from the FrameworkConfig
5
5
  * and renders a PickerMenu for each. If all questions are auto-resolved,
@@ -1,6 +1,6 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
1
+ import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
2
  /**
3
- * SetupScreen — Generic framework disambiguation.
3
+ * SetupScreen — Generic framework disambiguation (v2).
4
4
  *
5
5
  * Iterates unresolved setup questions from the FrameworkConfig
6
6
  * and renders a PickerMenu for each. If all questions are auto-resolved,
@@ -8,11 +8,11 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
8
8
  */
9
9
  import { Box, Text } from 'ink';
10
10
  import { useState, useEffect } from 'react';
11
- import { useSyncExternalStore } from 'react';
11
+ import { useWizardStore } from '../hooks/useWizardStore.js';
12
12
  import { PickerMenu } from '../primitives/index.js';
13
- import { Colors } from '../styles.js';
13
+ import { Colors, Icons } from '../styles.js';
14
14
  export const SetupScreen = ({ store }) => {
15
- useSyncExternalStore((cb) => store.subscribe(cb), () => store.getSnapshot());
15
+ useWizardStore(store);
16
16
  const config = store.session.frameworkConfig;
17
17
  const questions = config?.metadata.setup?.questions ?? [];
18
18
  // Track which question index we're currently showing
@@ -43,7 +43,7 @@ export const SetupScreen = ({ store }) => {
43
43
  })();
44
44
  }, []);
45
45
  if (resolving) {
46
- return (_jsx(Box, { flexDirection: "column", flexGrow: 1, children: _jsx(Text, { color: Colors.muted, children: "Detecting project configuration..." }) }));
46
+ return (_jsx(Box, { flexDirection: "column", flexGrow: 1, children: _jsxs(Text, { color: Colors.active, children: ["Detecting project configuration", Icons.ellipsis] }) }));
47
47
  }
48
48
  // Get unresolved questions
49
49
  const unresolved = questions.filter((q) => !(q.key in store.session.frameworkContext));
@@ -54,7 +54,7 @@ export const SetupScreen = ({ store }) => {
54
54
  const question = unresolved[currentIndex] ?? unresolved[0];
55
55
  if (!question)
56
56
  return null;
57
- return (_jsxs(Box, { flexDirection: "column", flexGrow: 1, children: [_jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [_jsx(Text, { bold: true, color: Colors.accent, children: "Project Setup" }), config && (_jsxs(Text, { color: Colors.muted, children: ["Configuring ", config.metadata.name, " integration"] }))] }), _jsx(PickerMenu, { message: question.message, options: question.options.map((o) => ({
57
+ return (_jsxs(Box, { flexDirection: "column", flexGrow: 1, children: [_jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [_jsx(Text, { bold: true, color: Colors.accent, children: "Project Setup" }), config && (_jsxs(Text, { color: Colors.secondary, children: ["Configuring ", config.metadata.name, " integration"] }))] }), _jsx(PickerMenu, { message: question.message, options: question.options.map((o) => ({
58
58
  label: o.label,
59
59
  value: o.value,
60
60
  hint: o.hint,
@@ -1,5 +1,5 @@
1
1
  /**
2
- * SlackScreen — Amplitude Slack integration setup.
2
+ * SlackScreen — Amplitude Slack integration setup (v2).
3
3
  *
4
4
  * Guides the user to connect their Slack workspace to Amplitude.
5
5
  * Since the OAuth handshake happens in the browser (Amplitude Settings),
@@ -8,7 +8,7 @@
8
8
  *
9
9
  * Region-aware: EU users need the "Amplitude - EU" Slack app.
10
10
  */
11
- import { type WizardStore } from '../store.js';
11
+ import type { WizardStore } from '../store.js';
12
12
  interface SlackScreenProps {
13
13
  store: WizardStore;
14
14
  /** When true, exit the process after completion instead of routing to outro. */