@amplitude/wizard 1.0.0-beta.2 → 1.0.0-beta.6

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 (392) hide show
  1. package/LICENSE +25 -1
  2. package/README.md +171 -74
  3. package/dist/bin.js +338 -222
  4. package/dist/src/lib/agent-interface.js +64 -9
  5. package/dist/src/lib/agent-runner.js +1 -10
  6. package/dist/src/lib/api.d.ts +22 -4
  7. package/dist/src/lib/api.js +114 -12
  8. package/dist/src/lib/commandments.js +14 -1
  9. package/dist/src/lib/constants.d.ts +6 -5
  10. package/dist/src/lib/constants.js +13 -13
  11. package/dist/src/lib/credential-resolution.d.ts +45 -0
  12. package/dist/src/lib/credential-resolution.js +311 -0
  13. package/dist/src/lib/exit-codes.d.ts +10 -0
  14. package/dist/src/lib/exit-codes.js +12 -0
  15. package/dist/src/lib/health-checks/statuspage.d.ts +1 -0
  16. package/dist/src/lib/health-checks/statuspage.js +5 -1
  17. package/dist/src/lib/mode-config.d.ts +14 -0
  18. package/dist/src/lib/mode-config.js +14 -0
  19. package/dist/src/lib/session-checkpoint.d.ts +27 -0
  20. package/dist/src/lib/session-checkpoint.js +134 -0
  21. package/dist/src/lib/wizard-session.d.ts +44 -1
  22. package/dist/src/lib/wizard-session.js +70 -14
  23. package/dist/src/lib/wizard-tools.js +19 -4
  24. package/dist/src/steps/add-mcp-server-to-clients/clients/claude.d.ts +3 -0
  25. package/dist/src/steps/add-mcp-server-to-clients/clients/claude.js +6 -0
  26. package/dist/src/steps/add-mcp-server-to-clients/clients/cursor.js +3 -1
  27. package/dist/src/ui/agent-ui.d.ts +91 -0
  28. package/dist/src/ui/agent-ui.js +277 -0
  29. package/dist/src/ui/logging-ui.js +1 -1
  30. package/dist/src/ui/tui/App.d.ts +12 -0
  31. package/dist/src/ui/tui/App.js +29 -18
  32. package/dist/src/ui/tui/components/AmplitudeLogo.js +16 -17
  33. package/dist/src/ui/tui/components/AmplitudeTextLogo.d.ts +0 -2
  34. package/dist/src/ui/tui/components/AmplitudeTextLogo.js +53 -18
  35. package/dist/src/ui/tui/components/BrailleSpinner.d.ts +8 -0
  36. package/dist/src/ui/tui/components/BrailleSpinner.js +15 -0
  37. package/dist/src/ui/tui/components/ConsoleView.d.ts +8 -11
  38. package/dist/src/ui/tui/components/ConsoleView.js +51 -34
  39. package/dist/src/ui/tui/components/HeaderBar.d.ts +12 -0
  40. package/dist/src/ui/tui/components/HeaderBar.js +17 -0
  41. package/dist/src/ui/tui/components/JourneyStepper.d.ts +16 -0
  42. package/dist/src/ui/tui/components/JourneyStepper.js +83 -0
  43. package/dist/src/ui/tui/components/KeyHintBar.d.ts +19 -0
  44. package/dist/src/ui/tui/components/KeyHintBar.js +20 -0
  45. package/dist/src/ui/tui/console-commands.d.ts +1 -2
  46. package/dist/src/ui/tui/console-commands.js +48 -7
  47. package/dist/src/ui/tui/flows.d.ts +1 -1
  48. package/dist/src/ui/tui/flows.js +1 -1
  49. package/dist/src/ui/tui/hooks/useAsyncEffect.d.ts +15 -0
  50. package/dist/src/ui/tui/hooks/useAsyncEffect.js +35 -0
  51. package/dist/src/ui/tui/hooks/useWizardStore.d.ts +9 -0
  52. package/dist/src/ui/tui/hooks/useWizardStore.js +11 -0
  53. package/dist/src/ui/tui/ink-ui.js +1 -1
  54. package/dist/src/ui/tui/primitives/DissolveTransition.js +4 -5
  55. package/dist/src/ui/tui/primitives/EventPlanViewer.d.ts +3 -1
  56. package/dist/src/ui/tui/primitives/EventPlanViewer.js +8 -3
  57. package/dist/src/ui/tui/primitives/ProgressList.js +1 -1
  58. package/dist/src/ui/tui/primitives/SlashCommandInput.js +19 -4
  59. package/dist/src/ui/tui/primitives/SplitView.d.ts +2 -1
  60. package/dist/src/ui/tui/primitives/SplitView.js +10 -2
  61. package/dist/src/ui/tui/primitives/TabContainer.js +10 -2
  62. package/dist/src/ui/tui/primitives/index.d.ts +0 -1
  63. package/dist/src/ui/tui/primitives/index.js +0 -1
  64. package/dist/src/ui/tui/router.js +1 -1
  65. package/dist/src/ui/tui/screen-registry.d.ts +0 -7
  66. package/dist/src/ui/tui/screen-registry.js +13 -4
  67. package/dist/src/ui/tui/screens/ActivationOptionsScreen.d.ts +2 -2
  68. package/dist/src/ui/tui/screens/ActivationOptionsScreen.js +8 -8
  69. package/dist/src/ui/tui/screens/AuthScreen.js +57 -27
  70. package/dist/src/ui/tui/screens/ChecklistScreen.d.ts +2 -12
  71. package/dist/src/ui/tui/screens/ChecklistScreen.js +22 -33
  72. package/dist/src/ui/tui/screens/DataIngestionCheckScreen.d.ts +3 -12
  73. package/dist/src/ui/tui/screens/DataIngestionCheckScreen.js +109 -39
  74. package/dist/src/ui/tui/screens/DataSetupScreen.d.ts +3 -3
  75. package/dist/src/ui/tui/screens/DataSetupScreen.js +17 -10
  76. package/dist/src/ui/tui/screens/IntroScreen.d.ts +5 -3
  77. package/dist/src/ui/tui/screens/IntroScreen.js +132 -41
  78. package/dist/src/ui/tui/screens/LoginScreen.d.ts +1 -1
  79. package/dist/src/ui/tui/screens/LoginScreen.js +4 -4
  80. package/dist/src/ui/tui/screens/LogoutScreen.d.ts +4 -2
  81. package/dist/src/ui/tui/screens/LogoutScreen.js +17 -5
  82. package/dist/src/ui/tui/screens/McpScreen.d.ts +4 -4
  83. package/dist/src/ui/tui/screens/McpScreen.js +25 -17
  84. package/dist/src/ui/tui/screens/OutageScreen.d.ts +1 -1
  85. package/dist/src/ui/tui/screens/OutageScreen.js +5 -5
  86. package/dist/src/ui/tui/screens/OutroScreen.d.ts +5 -0
  87. package/dist/src/ui/tui/screens/OutroScreen.js +21 -14
  88. package/dist/src/ui/tui/screens/RegionSelectScreen.js +15 -13
  89. package/dist/src/ui/tui/screens/RunScreen.d.ts +7 -5
  90. package/dist/src/ui/tui/screens/RunScreen.js +102 -157
  91. package/dist/src/ui/tui/screens/SettingsOverrideScreen.d.ts +1 -1
  92. package/dist/src/ui/tui/screens/SettingsOverrideScreen.js +6 -5
  93. package/dist/src/ui/tui/screens/SetupScreen.d.ts +1 -1
  94. package/dist/src/ui/tui/screens/SetupScreen.js +7 -7
  95. package/dist/src/ui/tui/screens/SlackScreen.d.ts +2 -2
  96. package/dist/src/ui/tui/screens/SlackScreen.js +60 -35
  97. package/dist/src/ui/tui/session-constants.d.ts +41 -0
  98. package/dist/src/ui/tui/session-constants.js +38 -0
  99. package/dist/src/ui/tui/start-tui.d.ts +3 -1
  100. package/dist/src/ui/tui/start-tui.js +14 -10
  101. package/dist/src/ui/tui/store.d.ts +2 -1
  102. package/dist/src/ui/tui/store.js +33 -7
  103. package/dist/src/ui/tui/styles.d.ts +75 -19
  104. package/dist/src/ui/tui/styles.js +101 -19
  105. package/dist/src/ui/tui/utils/classify-error.d.ts +14 -0
  106. package/dist/src/ui/tui/utils/classify-error.js +90 -0
  107. package/dist/src/ui/tui/utils/diagnostics.d.ts +21 -0
  108. package/dist/src/ui/tui/utils/diagnostics.js +72 -0
  109. package/dist/src/ui/tui/utils/with-retry.d.ts +12 -0
  110. package/dist/src/ui/tui/utils/with-retry.js +32 -0
  111. package/dist/src/ui/tui/utils/with-timeout.d.ts +10 -0
  112. package/dist/src/ui/tui/utils/with-timeout.js +24 -0
  113. package/dist/src/utils/ampli-settings.d.ts +1 -1
  114. package/dist/src/utils/ampli-settings.js +15 -5
  115. package/dist/src/utils/api-key-store.js +5 -5
  116. package/dist/src/utils/atomic-write.d.ts +15 -0
  117. package/dist/src/utils/atomic-write.js +34 -0
  118. package/dist/src/utils/setup-utils.js +2 -2
  119. package/dist/src/utils/token-refresh.d.ts +22 -0
  120. package/dist/src/utils/token-refresh.js +79 -0
  121. package/dist/src/utils/wizard-abort.js +6 -1
  122. package/package.json +6 -6
  123. package/skills/instrumentation/add-analytics-instrumentation/SKILL.md +142 -0
  124. package/skills/instrumentation/diff-intake/SKILL.md +128 -0
  125. package/skills/instrumentation/discover-analytics-patterns/SKILL.md +185 -0
  126. package/skills/instrumentation/discover-event-surfaces/SKILL.md +322 -0
  127. package/skills/instrumentation/discover-event-surfaces/references/best-practices.md +563 -0
  128. package/skills/instrumentation/instrument-events/SKILL.md +169 -0
  129. package/skills/instrumentation/instrument-events/references/best-practices.md +563 -0
  130. package/skills/integration/integration-android/SKILL.md +49 -0
  131. package/skills/integration/integration-android/references/EXAMPLE.md +1977 -0
  132. package/skills/integration/integration-android/references/amplitude-quickstart.md +1845 -0
  133. package/skills/integration/integration-android/references/analytics.md +1778 -0
  134. package/skills/integration/integration-android/references/basic-integration-1.0-begin.md +43 -0
  135. package/skills/integration/integration-android/references/basic-integration-1.1-edit.md +35 -0
  136. package/skills/integration/integration-android/references/basic-integration-1.2-revise.md +23 -0
  137. package/skills/integration/integration-android/references/basic-integration-1.3-conclude.md +57 -0
  138. package/skills/integration/integration-angular/SKILL.md +49 -0
  139. package/skills/integration/integration-angular/references/EXAMPLE.md +899 -0
  140. package/skills/integration/integration-angular/references/amplitude-quickstart.md +1845 -0
  141. package/skills/integration/integration-angular/references/basic-integration-1.0-begin.md +43 -0
  142. package/skills/integration/integration-angular/references/basic-integration-1.1-edit.md +35 -0
  143. package/skills/integration/integration-angular/references/basic-integration-1.2-revise.md +23 -0
  144. package/skills/integration/integration-angular/references/basic-integration-1.3-conclude.md +57 -0
  145. package/skills/integration/integration-angular/references/browser-sdk-2.md +4680 -0
  146. package/skills/integration/integration-astro-hybrid/SKILL.md +56 -0
  147. package/skills/integration/integration-astro-hybrid/references/EXAMPLE.md +1095 -0
  148. package/skills/integration/integration-astro-hybrid/references/amplitude-quickstart.md +1845 -0
  149. package/skills/integration/integration-astro-hybrid/references/basic-integration-1.0-begin.md +43 -0
  150. package/skills/integration/integration-astro-hybrid/references/basic-integration-1.1-edit.md +35 -0
  151. package/skills/integration/integration-astro-hybrid/references/basic-integration-1.2-revise.md +23 -0
  152. package/skills/integration/integration-astro-hybrid/references/basic-integration-1.3-conclude.md +57 -0
  153. package/skills/integration/integration-astro-hybrid/references/browser-sdk-2.md +4680 -0
  154. package/skills/integration/integration-astro-ssr/SKILL.md +52 -0
  155. package/skills/integration/integration-astro-ssr/references/EXAMPLE.md +1106 -0
  156. package/skills/integration/integration-astro-ssr/references/amplitude-quickstart.md +1845 -0
  157. package/skills/integration/integration-astro-ssr/references/basic-integration-1.0-begin.md +43 -0
  158. package/skills/integration/integration-astro-ssr/references/basic-integration-1.1-edit.md +35 -0
  159. package/skills/integration/integration-astro-ssr/references/basic-integration-1.2-revise.md +23 -0
  160. package/skills/integration/integration-astro-ssr/references/basic-integration-1.3-conclude.md +57 -0
  161. package/skills/integration/integration-astro-ssr/references/browser-sdk-2.md +4680 -0
  162. package/skills/integration/integration-astro-static/SKILL.md +49 -0
  163. package/skills/integration/integration-astro-static/references/EXAMPLE.md +910 -0
  164. package/skills/integration/integration-astro-static/references/amplitude-quickstart.md +1845 -0
  165. package/skills/integration/integration-astro-static/references/basic-integration-1.0-begin.md +43 -0
  166. package/skills/integration/integration-astro-static/references/basic-integration-1.1-edit.md +35 -0
  167. package/skills/integration/integration-astro-static/references/basic-integration-1.2-revise.md +23 -0
  168. package/skills/integration/integration-astro-static/references/basic-integration-1.3-conclude.md +57 -0
  169. package/skills/integration/integration-astro-static/references/browser-sdk-2.md +4680 -0
  170. package/skills/integration/integration-astro-view-transitions/SKILL.md +51 -0
  171. package/skills/integration/integration-astro-view-transitions/references/EXAMPLE.md +979 -0
  172. package/skills/integration/integration-astro-view-transitions/references/amplitude-quickstart.md +1845 -0
  173. package/skills/integration/integration-astro-view-transitions/references/basic-integration-1.0-begin.md +43 -0
  174. package/skills/integration/integration-astro-view-transitions/references/basic-integration-1.1-edit.md +35 -0
  175. package/skills/integration/integration-astro-view-transitions/references/basic-integration-1.2-revise.md +23 -0
  176. package/skills/integration/integration-astro-view-transitions/references/basic-integration-1.3-conclude.md +57 -0
  177. package/skills/integration/integration-astro-view-transitions/references/browser-sdk-2.md +4680 -0
  178. package/skills/integration/integration-django/SKILL.md +57 -0
  179. package/skills/integration/integration-django/references/EXAMPLE.md +1005 -0
  180. package/skills/integration/integration-django/references/amplitude-quickstart.md +1845 -0
  181. package/skills/integration/integration-django/references/basic-integration-1.0-begin.md +43 -0
  182. package/skills/integration/integration-django/references/basic-integration-1.1-edit.md +35 -0
  183. package/skills/integration/integration-django/references/basic-integration-1.2-revise.md +23 -0
  184. package/skills/integration/integration-django/references/basic-integration-1.3-conclude.md +57 -0
  185. package/skills/integration/integration-django/references/python.md +1424 -0
  186. package/skills/integration/integration-expo/SKILL.md +53 -0
  187. package/skills/integration/integration-expo/references/EXAMPLE.md +1291 -0
  188. package/skills/integration/integration-expo/references/amplitude-quickstart.md +1845 -0
  189. package/skills/integration/integration-expo/references/basic-integration-1.0-begin.md +43 -0
  190. package/skills/integration/integration-expo/references/basic-integration-1.1-edit.md +35 -0
  191. package/skills/integration/integration-expo/references/basic-integration-1.2-revise.md +23 -0
  192. package/skills/integration/integration-expo/references/basic-integration-1.3-conclude.md +57 -0
  193. package/skills/integration/integration-expo/references/react-native-sdk.md +2819 -0
  194. package/skills/integration/integration-fastapi/SKILL.md +57 -0
  195. package/skills/integration/integration-fastapi/references/EXAMPLE.md +1389 -0
  196. package/skills/integration/integration-fastapi/references/amplitude-quickstart.md +1845 -0
  197. package/skills/integration/integration-fastapi/references/basic-integration-1.0-begin.md +43 -0
  198. package/skills/integration/integration-fastapi/references/basic-integration-1.1-edit.md +35 -0
  199. package/skills/integration/integration-fastapi/references/basic-integration-1.2-revise.md +23 -0
  200. package/skills/integration/integration-fastapi/references/basic-integration-1.3-conclude.md +57 -0
  201. package/skills/integration/integration-fastapi/references/python.md +1424 -0
  202. package/skills/integration/integration-flask/SKILL.md +56 -0
  203. package/skills/integration/integration-flask/references/EXAMPLE.md +1130 -0
  204. package/skills/integration/integration-flask/references/amplitude-quickstart.md +1845 -0
  205. package/skills/integration/integration-flask/references/basic-integration-1.0-begin.md +43 -0
  206. package/skills/integration/integration-flask/references/basic-integration-1.1-edit.md +35 -0
  207. package/skills/integration/integration-flask/references/basic-integration-1.2-revise.md +23 -0
  208. package/skills/integration/integration-flask/references/basic-integration-1.3-conclude.md +57 -0
  209. package/skills/integration/integration-flask/references/python.md +1424 -0
  210. package/skills/integration/integration-javascript_node/SKILL.md +54 -0
  211. package/skills/integration/integration-javascript_node/references/EXAMPLE.md +365 -0
  212. package/skills/integration/integration-javascript_node/references/amplitude-quickstart.md +1845 -0
  213. package/skills/integration/integration-javascript_node/references/analytics.md +1778 -0
  214. package/skills/integration/integration-javascript_node/references/basic-integration-1.0-begin.md +43 -0
  215. package/skills/integration/integration-javascript_node/references/basic-integration-1.1-edit.md +35 -0
  216. package/skills/integration/integration-javascript_node/references/basic-integration-1.2-revise.md +23 -0
  217. package/skills/integration/integration-javascript_node/references/basic-integration-1.3-conclude.md +57 -0
  218. package/skills/integration/integration-javascript_web/SKILL.md +58 -0
  219. package/skills/integration/integration-javascript_web/references/EXAMPLE.md +451 -0
  220. package/skills/integration/integration-javascript_web/references/amplitude-quickstart.md +1845 -0
  221. package/skills/integration/integration-javascript_web/references/basic-integration-1.0-begin.md +43 -0
  222. package/skills/integration/integration-javascript_web/references/basic-integration-1.1-edit.md +35 -0
  223. package/skills/integration/integration-javascript_web/references/basic-integration-1.2-revise.md +23 -0
  224. package/skills/integration/integration-javascript_web/references/basic-integration-1.3-conclude.md +57 -0
  225. package/skills/integration/integration-javascript_web/references/browser-sdk-2.md +4680 -0
  226. package/skills/integration/integration-laravel/SKILL.md +52 -0
  227. package/skills/integration/integration-laravel/references/EXAMPLE.md +2039 -0
  228. package/skills/integration/integration-laravel/references/amplitude-quickstart.md +1845 -0
  229. package/skills/integration/integration-laravel/references/analytics.md +1778 -0
  230. package/skills/integration/integration-laravel/references/basic-integration-1.0-begin.md +43 -0
  231. package/skills/integration/integration-laravel/references/basic-integration-1.1-edit.md +35 -0
  232. package/skills/integration/integration-laravel/references/basic-integration-1.2-revise.md +23 -0
  233. package/skills/integration/integration-laravel/references/basic-integration-1.3-conclude.md +57 -0
  234. package/skills/integration/integration-nextjs-app-router/SKILL.md +54 -0
  235. package/skills/integration/integration-nextjs-app-router/references/EXAMPLE.md +673 -0
  236. package/skills/integration/integration-nextjs-app-router/references/amplitude-quickstart.md +1845 -0
  237. package/skills/integration/integration-nextjs-app-router/references/basic-integration-1.0-begin.md +43 -0
  238. package/skills/integration/integration-nextjs-app-router/references/basic-integration-1.1-edit.md +35 -0
  239. package/skills/integration/integration-nextjs-app-router/references/basic-integration-1.2-revise.md +23 -0
  240. package/skills/integration/integration-nextjs-app-router/references/basic-integration-1.3-conclude.md +57 -0
  241. package/skills/integration/integration-nextjs-app-router/references/browser-sdk-2.md +4680 -0
  242. package/skills/integration/integration-nextjs-pages-router/SKILL.md +54 -0
  243. package/skills/integration/integration-nextjs-pages-router/references/EXAMPLE.md +735 -0
  244. package/skills/integration/integration-nextjs-pages-router/references/amplitude-quickstart.md +1845 -0
  245. package/skills/integration/integration-nextjs-pages-router/references/basic-integration-1.0-begin.md +43 -0
  246. package/skills/integration/integration-nextjs-pages-router/references/basic-integration-1.1-edit.md +35 -0
  247. package/skills/integration/integration-nextjs-pages-router/references/basic-integration-1.2-revise.md +23 -0
  248. package/skills/integration/integration-nextjs-pages-router/references/basic-integration-1.3-conclude.md +57 -0
  249. package/skills/integration/integration-nextjs-pages-router/references/browser-sdk-2.md +4680 -0
  250. package/skills/integration/integration-nuxt-3.6/SKILL.md +46 -0
  251. package/skills/integration/integration-nuxt-3.6/references/EXAMPLE.md +8422 -0
  252. package/skills/integration/integration-nuxt-3.6/references/amplitude-quickstart.md +1845 -0
  253. package/skills/integration/integration-nuxt-3.6/references/basic-integration-1.0-begin.md +43 -0
  254. package/skills/integration/integration-nuxt-3.6/references/basic-integration-1.1-edit.md +35 -0
  255. package/skills/integration/integration-nuxt-3.6/references/basic-integration-1.2-revise.md +23 -0
  256. package/skills/integration/integration-nuxt-3.6/references/basic-integration-1.3-conclude.md +57 -0
  257. package/skills/integration/integration-nuxt-3.6/references/browser-sdk-2.md +4680 -0
  258. package/skills/integration/integration-nuxt-4/SKILL.md +46 -0
  259. package/skills/integration/integration-nuxt-4/references/EXAMPLE.md +8670 -0
  260. package/skills/integration/integration-nuxt-4/references/amplitude-quickstart.md +1845 -0
  261. package/skills/integration/integration-nuxt-4/references/basic-integration-1.0-begin.md +43 -0
  262. package/skills/integration/integration-nuxt-4/references/basic-integration-1.1-edit.md +35 -0
  263. package/skills/integration/integration-nuxt-4/references/basic-integration-1.2-revise.md +23 -0
  264. package/skills/integration/integration-nuxt-4/references/basic-integration-1.3-conclude.md +57 -0
  265. package/skills/integration/integration-nuxt-4/references/browser-sdk-2.md +4680 -0
  266. package/skills/integration/integration-python/SKILL.md +53 -0
  267. package/skills/integration/integration-python/references/EXAMPLE.md +445 -0
  268. package/skills/integration/integration-python/references/amplitude-quickstart.md +1845 -0
  269. package/skills/integration/integration-python/references/basic-integration-1.0-begin.md +43 -0
  270. package/skills/integration/integration-python/references/basic-integration-1.1-edit.md +35 -0
  271. package/skills/integration/integration-python/references/basic-integration-1.2-revise.md +23 -0
  272. package/skills/integration/integration-python/references/basic-integration-1.3-conclude.md +57 -0
  273. package/skills/integration/integration-python/references/python.md +1424 -0
  274. package/skills/integration/integration-react-native/SKILL.md +49 -0
  275. package/skills/integration/integration-react-native/references/EXAMPLE.md +2253 -0
  276. package/skills/integration/integration-react-native/references/amplitude-quickstart.md +1845 -0
  277. package/skills/integration/integration-react-native/references/basic-integration-1.0-begin.md +43 -0
  278. package/skills/integration/integration-react-native/references/basic-integration-1.1-edit.md +35 -0
  279. package/skills/integration/integration-react-native/references/basic-integration-1.2-revise.md +23 -0
  280. package/skills/integration/integration-react-native/references/basic-integration-1.3-conclude.md +57 -0
  281. package/skills/integration/integration-react-native/references/react-native-sdk.md +2819 -0
  282. package/skills/integration/integration-react-react-router-6/SKILL.md +53 -0
  283. package/skills/integration/integration-react-react-router-6/references/EXAMPLE.md +570 -0
  284. package/skills/integration/integration-react-react-router-6/references/amplitude-quickstart.md +1845 -0
  285. package/skills/integration/integration-react-react-router-6/references/basic-integration-1.0-begin.md +43 -0
  286. package/skills/integration/integration-react-react-router-6/references/basic-integration-1.1-edit.md +35 -0
  287. package/skills/integration/integration-react-react-router-6/references/basic-integration-1.2-revise.md +23 -0
  288. package/skills/integration/integration-react-react-router-6/references/basic-integration-1.3-conclude.md +57 -0
  289. package/skills/integration/integration-react-react-router-6/references/browser-sdk-2.md +4680 -0
  290. package/skills/integration/integration-react-react-router-7-data/SKILL.md +53 -0
  291. package/skills/integration/integration-react-react-router-7-data/references/EXAMPLE.md +830 -0
  292. package/skills/integration/integration-react-react-router-7-data/references/amplitude-quickstart.md +1845 -0
  293. package/skills/integration/integration-react-react-router-7-data/references/basic-integration-1.0-begin.md +43 -0
  294. package/skills/integration/integration-react-react-router-7-data/references/basic-integration-1.1-edit.md +35 -0
  295. package/skills/integration/integration-react-react-router-7-data/references/basic-integration-1.2-revise.md +23 -0
  296. package/skills/integration/integration-react-react-router-7-data/references/basic-integration-1.3-conclude.md +57 -0
  297. package/skills/integration/integration-react-react-router-7-data/references/browser-sdk-2.md +4680 -0
  298. package/skills/integration/integration-react-react-router-7-declarative/SKILL.md +53 -0
  299. package/skills/integration/integration-react-react-router-7-declarative/references/EXAMPLE.md +609 -0
  300. package/skills/integration/integration-react-react-router-7-declarative/references/amplitude-quickstart.md +1845 -0
  301. package/skills/integration/integration-react-react-router-7-declarative/references/basic-integration-1.0-begin.md +43 -0
  302. package/skills/integration/integration-react-react-router-7-declarative/references/basic-integration-1.1-edit.md +35 -0
  303. package/skills/integration/integration-react-react-router-7-declarative/references/basic-integration-1.2-revise.md +23 -0
  304. package/skills/integration/integration-react-react-router-7-declarative/references/basic-integration-1.3-conclude.md +57 -0
  305. package/skills/integration/integration-react-react-router-7-declarative/references/browser-sdk-2.md +4680 -0
  306. package/skills/integration/integration-react-react-router-7-framework/SKILL.md +53 -0
  307. package/skills/integration/integration-react-react-router-7-framework/references/EXAMPLE.md +1081 -0
  308. package/skills/integration/integration-react-react-router-7-framework/references/amplitude-quickstart.md +1845 -0
  309. package/skills/integration/integration-react-react-router-7-framework/references/basic-integration-1.0-begin.md +43 -0
  310. package/skills/integration/integration-react-react-router-7-framework/references/basic-integration-1.1-edit.md +35 -0
  311. package/skills/integration/integration-react-react-router-7-framework/references/basic-integration-1.2-revise.md +23 -0
  312. package/skills/integration/integration-react-react-router-7-framework/references/basic-integration-1.3-conclude.md +57 -0
  313. package/skills/integration/integration-react-react-router-7-framework/references/browser-sdk-2.md +4680 -0
  314. package/skills/integration/integration-react-tanstack-router-code-based/SKILL.md +57 -0
  315. package/skills/integration/integration-react-tanstack-router-code-based/references/EXAMPLE.md +659 -0
  316. package/skills/integration/integration-react-tanstack-router-code-based/references/amplitude-quickstart.md +1845 -0
  317. package/skills/integration/integration-react-tanstack-router-code-based/references/basic-integration-1.0-begin.md +43 -0
  318. package/skills/integration/integration-react-tanstack-router-code-based/references/basic-integration-1.1-edit.md +35 -0
  319. package/skills/integration/integration-react-tanstack-router-code-based/references/basic-integration-1.2-revise.md +23 -0
  320. package/skills/integration/integration-react-tanstack-router-code-based/references/basic-integration-1.3-conclude.md +57 -0
  321. package/skills/integration/integration-react-tanstack-router-code-based/references/browser-sdk-2.md +4680 -0
  322. package/skills/integration/integration-react-tanstack-router-file-based/SKILL.md +57 -0
  323. package/skills/integration/integration-react-tanstack-router-file-based/references/EXAMPLE.md +777 -0
  324. package/skills/integration/integration-react-tanstack-router-file-based/references/amplitude-quickstart.md +1845 -0
  325. package/skills/integration/integration-react-tanstack-router-file-based/references/basic-integration-1.0-begin.md +43 -0
  326. package/skills/integration/integration-react-tanstack-router-file-based/references/basic-integration-1.1-edit.md +35 -0
  327. package/skills/integration/integration-react-tanstack-router-file-based/references/basic-integration-1.2-revise.md +23 -0
  328. package/skills/integration/integration-react-tanstack-router-file-based/references/basic-integration-1.3-conclude.md +57 -0
  329. package/skills/integration/integration-react-tanstack-router-file-based/references/browser-sdk-2.md +4680 -0
  330. package/skills/integration/integration-react-vite/SKILL.md +53 -0
  331. package/skills/integration/integration-react-vite/references/EXAMPLE.md +542 -0
  332. package/skills/integration/integration-react-vite/references/amplitude-quickstart.md +1845 -0
  333. package/skills/integration/integration-react-vite/references/basic-integration-1.0-begin.md +43 -0
  334. package/skills/integration/integration-react-vite/references/basic-integration-1.1-edit.md +35 -0
  335. package/skills/integration/integration-react-vite/references/basic-integration-1.2-revise.md +23 -0
  336. package/skills/integration/integration-react-vite/references/basic-integration-1.3-conclude.md +57 -0
  337. package/skills/integration/integration-react-vite/references/browser-sdk-2.md +4680 -0
  338. package/skills/integration/integration-ruby/SKILL.md +50 -0
  339. package/skills/integration/integration-ruby/references/EXAMPLE.md +420 -0
  340. package/skills/integration/integration-ruby/references/amplitude-quickstart.md +1845 -0
  341. package/skills/integration/integration-ruby/references/analytics.md +1778 -0
  342. package/skills/integration/integration-ruby/references/basic-integration-1.0-begin.md +43 -0
  343. package/skills/integration/integration-ruby/references/basic-integration-1.1-edit.md +35 -0
  344. package/skills/integration/integration-ruby/references/basic-integration-1.2-revise.md +23 -0
  345. package/skills/integration/integration-ruby/references/basic-integration-1.3-conclude.md +57 -0
  346. package/skills/integration/integration-ruby-on-rails/SKILL.md +55 -0
  347. package/skills/integration/integration-ruby-on-rails/references/EXAMPLE.md +1013 -0
  348. package/skills/integration/integration-ruby-on-rails/references/amplitude-quickstart.md +1845 -0
  349. package/skills/integration/integration-ruby-on-rails/references/analytics.md +1778 -0
  350. package/skills/integration/integration-ruby-on-rails/references/basic-integration-1.0-begin.md +43 -0
  351. package/skills/integration/integration-ruby-on-rails/references/basic-integration-1.1-edit.md +35 -0
  352. package/skills/integration/integration-ruby-on-rails/references/basic-integration-1.2-revise.md +23 -0
  353. package/skills/integration/integration-ruby-on-rails/references/basic-integration-1.3-conclude.md +57 -0
  354. package/skills/integration/integration-sveltekit/SKILL.md +47 -0
  355. package/skills/integration/integration-sveltekit/references/EXAMPLE.md +14121 -0
  356. package/skills/integration/integration-sveltekit/references/amplitude-quickstart.md +1845 -0
  357. package/skills/integration/integration-sveltekit/references/basic-integration-1.0-begin.md +43 -0
  358. package/skills/integration/integration-sveltekit/references/basic-integration-1.1-edit.md +35 -0
  359. package/skills/integration/integration-sveltekit/references/basic-integration-1.2-revise.md +23 -0
  360. package/skills/integration/integration-sveltekit/references/basic-integration-1.3-conclude.md +57 -0
  361. package/skills/integration/integration-sveltekit/references/browser-sdk-2.md +4680 -0
  362. package/skills/integration/integration-swift/SKILL.md +49 -0
  363. package/skills/integration/integration-swift/references/EXAMPLE.md +660 -0
  364. package/skills/integration/integration-swift/references/amplitude-quickstart.md +1845 -0
  365. package/skills/integration/integration-swift/references/analytics.md +1778 -0
  366. package/skills/integration/integration-swift/references/basic-integration-1.0-begin.md +43 -0
  367. package/skills/integration/integration-swift/references/basic-integration-1.1-edit.md +35 -0
  368. package/skills/integration/integration-swift/references/basic-integration-1.2-revise.md +23 -0
  369. package/skills/integration/integration-swift/references/basic-integration-1.3-conclude.md +57 -0
  370. package/skills/integration/integration-tanstack-start/SKILL.md +58 -0
  371. package/skills/integration/integration-tanstack-start/references/EXAMPLE.md +998 -0
  372. package/skills/integration/integration-tanstack-start/references/amplitude-quickstart.md +1845 -0
  373. package/skills/integration/integration-tanstack-start/references/basic-integration-1.0-begin.md +43 -0
  374. package/skills/integration/integration-tanstack-start/references/basic-integration-1.1-edit.md +35 -0
  375. package/skills/integration/integration-tanstack-start/references/basic-integration-1.2-revise.md +23 -0
  376. package/skills/integration/integration-tanstack-start/references/basic-integration-1.3-conclude.md +57 -0
  377. package/skills/integration/integration-tanstack-start/references/browser-sdk-2.md +4680 -0
  378. package/skills/integration/integration-vue-3/SKILL.md +46 -0
  379. package/skills/integration/integration-vue-3/references/EXAMPLE.md +846 -0
  380. package/skills/integration/integration-vue-3/references/amplitude-quickstart.md +1845 -0
  381. package/skills/integration/integration-vue-3/references/basic-integration-1.0-begin.md +43 -0
  382. package/skills/integration/integration-vue-3/references/basic-integration-1.1-edit.md +35 -0
  383. package/skills/integration/integration-vue-3/references/basic-integration-1.2-revise.md +23 -0
  384. package/skills/integration/integration-vue-3/references/basic-integration-1.3-conclude.md +57 -0
  385. package/skills/integration/integration-vue-3/references/browser-sdk-2.md +4680 -0
  386. package/skills/taxonomy/amplitude-quickstart-taxonomy-agent/SKILL.md +228 -0
  387. package/dist/src/ui/tui/components/TitleBar.d.ts +0 -8
  388. package/dist/src/ui/tui/components/TitleBar.js +0 -27
  389. package/dist/src/ui/tui/primitives/KagiSmallWebViewer.d.ts +0 -7
  390. package/dist/src/ui/tui/primitives/KagiSmallWebViewer.js +0 -101
  391. package/dist/src/utils/anthropic-status.d.ts +0 -17
  392. package/dist/src/utils/anthropic-status.js +0 -51
@@ -861,10 +861,13 @@ async function runAgent(agentConfig, prompt, options, spinner, config, middlewar
861
861
  }
862
862
  }, 1000);
863
863
  }
864
- // Retry loop: if the agent stalls (no message for STALL_TIMEOUT_MS), abort and
865
- // re-run with a fresh AbortController and prompt stream. Up to MAX_RETRIES retries.
866
- const MAX_RETRIES = 2;
867
- const STALL_TIMEOUT_MS = 20_000;
864
+ // Retry loop: if the agent stalls (no message for the configured timeout), abort
865
+ // and re-run with a fresh AbortController and prompt stream. Up to MAX_RETRIES.
866
+ const MAX_RETRIES = 3;
867
+ // Cold-start timeout: subprocess spawn + MCP server connections + first LLM response
868
+ const INITIAL_STALL_TIMEOUT_MS = 60_000;
869
+ // Mid-run timeout: between consecutive messages during active work
870
+ const STALL_TIMEOUT_MS = 30_000;
868
871
  // Tracks whether an authentication failure was detected in the current attempt.
869
872
  // Passed to createStopHook so it can skip reflection when auth is broken.
870
873
  let authErrorDetected = false;
@@ -893,17 +896,26 @@ async function runAgent(agentConfig, prompt, options, spinner, config, middlewar
893
896
  // AbortController lets us cancel a stalled query so we can retry
894
897
  const controller = new AbortController();
895
898
  let staleTimer;
899
+ let receivedFirstMessage = false;
900
+ let lastMessageType = 'none';
901
+ let lastMessageTime = Date.now();
896
902
  const resetStaleTimer = () => {
897
903
  if (staleTimer)
898
904
  clearTimeout(staleTimer);
905
+ const timeoutMs = receivedFirstMessage
906
+ ? STALL_TIMEOUT_MS
907
+ : INITIAL_STALL_TIMEOUT_MS;
899
908
  staleTimer = setTimeout(() => {
900
- (0, debug_1.logToFile)(`Agent stalled no message for ${STALL_TIMEOUT_MS / 1000}s (attempt ${attempt + 1})`);
909
+ const elapsed = Math.round((Date.now() - lastMessageTime) / 1000);
910
+ (0, debug_1.logToFile)(`Agent stalled — no message for ${elapsed}s (attempt ${attempt + 1}, last message: ${lastMessageType}, phase: ${receivedFirstMessage ? 'active' : 'cold-start'})`);
901
911
  analytics_1.analytics.wizardCapture('Agent Stall Detected', {
902
912
  attempt: attempt + 1,
903
- stall_timeout_ms: STALL_TIMEOUT_MS,
913
+ stall_timeout_ms: timeoutMs,
914
+ last_message_type: lastMessageType,
915
+ phase: receivedFirstMessage ? 'active' : 'cold-start',
904
916
  });
905
917
  controller.abort('stall');
906
- }, STALL_TIMEOUT_MS);
918
+ }, timeoutMs);
907
919
  };
908
920
  try {
909
921
  const response = query({
@@ -958,6 +970,11 @@ async function runAgent(agentConfig, prompt, options, spinner, config, middlewar
958
970
  resetStaleTimer();
959
971
  // Process the async generator — validate each message at the boundary
960
972
  for await (const rawMessage of response) {
973
+ receivedFirstMessage = true;
974
+ lastMessageTime = Date.now();
975
+ lastMessageType =
976
+ rawMessage?.type?.toString() ??
977
+ 'unknown';
961
978
  resetStaleTimer();
962
979
  const parsed = (0, schemas_1.safeParseSDKMessage)(rawMessage);
963
980
  if (!parsed.ok) {
@@ -1001,18 +1018,56 @@ async function runAgent(agentConfig, prompt, options, spinner, config, middlewar
1001
1018
  signalDone();
1002
1019
  }
1003
1020
  }
1004
- // Clean completion exit the retry loop
1021
+ // Check if the agent hit a transient API error (e.g. Vertex 400)
1022
+ // that warrants a retry rather than immediately giving up.
1005
1023
  clearTimeout(staleTimer);
1024
+ const partialOutput = collectedText.join('\n');
1025
+ const hitTransientApiError = !receivedSuccessResult &&
1026
+ !authErrorDetected &&
1027
+ partialOutput.includes('API Error: 400') &&
1028
+ attempt < MAX_RETRIES;
1029
+ if (hitTransientApiError) {
1030
+ (0, debug_1.logToFile)(`Retrying after API 400 error (next attempt: ${attempt + 2} of ${MAX_RETRIES + 1})`);
1031
+ analytics_1.analytics.wizardCapture('Agent API Error Retry', {
1032
+ attempt,
1033
+ error: 'api_400',
1034
+ });
1035
+ collectedText.length = 0;
1036
+ recentStatuses.length = 0;
1037
+ signalDone();
1038
+ continue;
1039
+ }
1040
+ // Clean completion — exit the retry loop
1006
1041
  break;
1007
1042
  }
1008
1043
  catch (innerError) {
1009
1044
  clearTimeout(staleTimer);
1010
1045
  signalDone(); // unblock the prompt stream for this attempt
1011
- // Stall-aborted with retries remaining — try again
1046
+ // Stall-aborted or API error with retries remaining — try again
1012
1047
  if (controller.signal.aborted && attempt < MAX_RETRIES) {
1013
1048
  (0, debug_1.logToFile)(`Retrying after stall (next attempt: ${attempt + 2} of ${MAX_RETRIES + 1})`);
1014
1049
  continue;
1015
1050
  }
1051
+ // Transient SDK/proxy error: malformed conversation history (tool_use
1052
+ // without tool_result) or API 400. These are SDK-level race conditions
1053
+ // that resolve on a fresh retry with a new conversation.
1054
+ const errMsg = innerError instanceof Error ? innerError.message : String(innerError);
1055
+ const isTransientSdkError = attempt < MAX_RETRIES &&
1056
+ !authErrorDetected &&
1057
+ (errMsg.includes('tool_use') ||
1058
+ errMsg.includes('tool_result') ||
1059
+ errMsg.includes('API Error: 400') ||
1060
+ errMsg.includes('invalid_request_error'));
1061
+ if (isTransientSdkError) {
1062
+ (0, debug_1.logToFile)(`Retrying after transient SDK error (next attempt: ${attempt + 2} of ${MAX_RETRIES + 1}): ${errMsg.slice(0, 200)}`);
1063
+ analytics_1.analytics.wizardCapture('Agent SDK Error Retry', {
1064
+ attempt,
1065
+ error: errMsg.slice(0, 200),
1066
+ });
1067
+ collectedText.length = 0;
1068
+ recentStatuses.length = 0;
1069
+ continue;
1070
+ }
1016
1071
  // Already received a successful result — this is an SDK cleanup race condition
1017
1072
  if (receivedSuccessResult) {
1018
1073
  return completeWithSuccess(innerError);
@@ -43,7 +43,6 @@ const agent_interface_1 = require("./agent-interface");
43
43
  const urls_1 = require("../utils/urls");
44
44
  const constants_js_1 = require("./constants.js");
45
45
  const semver = __importStar(require("semver"));
46
- const anthropic_status_1 = require("../utils/anthropic-status");
47
46
  const debug_1 = require("../utils/debug");
48
47
  const benchmark_1 = require("./middleware/benchmark");
49
48
  const wizard_abort_1 = require("../utils/wizard-abort");
@@ -95,14 +94,6 @@ async function runAgentWizard(config, session) {
95
94
  // Setup phase — informational only, no prompts
96
95
  // Beta notice, pre-run notice, and welcome label are all derivable
97
96
  // from session.frameworkConfig — IntroScreen reads them directly.
98
- // Check Anthropic/Claude service status (pure — no prompt)
99
- const statusResult = await (0, anthropic_status_1.checkAnthropicStatus)();
100
- if (statusResult.status === 'down' || statusResult.status === 'degraded') {
101
- (0, ui_1.getUI)().showServiceStatus({
102
- description: statusResult.description,
103
- statusPageUrl: 'https://status.claude.com',
104
- });
105
- }
106
97
  // Check for blocking env overrides in .claude/settings.json before login.
107
98
  // These keys block the Wizard from accessing the Amplitude LLM Gateway.
108
99
  const blockingOverrideKeys = (0, agent_interface_1.checkClaudeSettingsOverrides)(session.installDir);
@@ -366,7 +357,7 @@ function buildIntegrationPrompt(config, context, frameworkContext, skipAmplitude
366
357
  const additionalContext = additionalLines.length > 0
367
358
  ? '\n' + additionalLines.map((line) => `- ${line}`).join('\n')
368
359
  : '';
369
- return `You have access to the Amplitude MCP server which provides skills to integrate Amplitude into this ${config.metadata.name} project.
360
+ return `You are setting up Amplitude analytics in this ${config.metadata.name} project. Use the wizard-tools MCP server to load and install skills.
370
361
 
371
362
  Project context:
372
363
  - Amplitude Project ID: ${context.projectId}
@@ -51,7 +51,7 @@ export declare function fetchWorkspaceEventTypes(idToken: string, zone: Amplitud
51
51
  * Returns { hasCharts: false, hasDashboards: false } on any error so the
52
52
  * checklist falls back to the default empty state rather than crashing.
53
53
  */
54
- export declare function fetchOwnedDashboards(idToken: string, zone: AmplitudeZone, orgId: string): Promise<{
54
+ export declare function fetchOwnedDashboards(accessToken: string, zone: AmplitudeZone, orgId: string): Promise<{
55
55
  hasCharts: boolean;
56
56
  hasDashboards: boolean;
57
57
  }>;
@@ -85,10 +85,28 @@ export type ProjectActivationStatus = {
85
85
  * Checks whether an Amplitude project has ingested any events and whether
86
86
  * the SDK snippet is configured.
87
87
  *
88
- * The query lives in Thunder (the main Amplitude app GraphQL server), served
89
- * at /graphql/org/:orgId. orgId is required to construct the endpoint URL.
88
+ * Always routes to Thunder (the main Amplitude app GraphQL server) at
89
+ * /t/graphql/org/:orgId using a Bearer access_token.
90
90
  */
91
- export declare function fetchProjectActivationStatus(idToken: string, zone: AmplitudeZone, appId: number | string, orgId?: string | null): Promise<ProjectActivationStatus>;
91
+ export declare function fetchProjectActivationStatus(opts: {
92
+ accessToken: string;
93
+ zone: AmplitudeZone;
94
+ appId: number | string;
95
+ orgId: string;
96
+ }): Promise<ProjectActivationStatus>;
97
+ /**
98
+ * Fetches the direct Slack OAuth install URL from Thunder.
99
+ * This lets the wizard open the Slack authorization page directly instead of
100
+ * routing through Amplitude Settings.
101
+ *
102
+ * Returns `null` on any error so callers can fall back to the settings page.
103
+ */
104
+ export declare function fetchSlackInstallUrl(accessToken: string, zone: AmplitudeZone, orgId: string, originalPath: string): Promise<string | null>;
105
+ /**
106
+ * Checks whether the authenticated user already has Slack connected.
107
+ * Returns `null` on any error so callers treat it as unknown.
108
+ */
109
+ export declare function fetchSlackConnectionStatus(accessToken: string, zone: AmplitudeZone, orgId: string): Promise<boolean | null>;
92
110
  export declare const ApiUserSchema: z.ZodObject<{
93
111
  distinct_id: z.ZodString;
94
112
  }, z.core.$strip>;
@@ -10,12 +10,32 @@ exports.fetchWorkspaceEventTypes = fetchWorkspaceEventTypes;
10
10
  exports.fetchOwnedDashboards = fetchOwnedDashboards;
11
11
  exports.fetchSources = fetchSources;
12
12
  exports.fetchProjectActivationStatus = fetchProjectActivationStatus;
13
+ exports.fetchSlackInstallUrl = fetchSlackInstallUrl;
14
+ exports.fetchSlackConnectionStatus = fetchSlackConnectionStatus;
13
15
  exports.fetchUserData = fetchUserData;
14
16
  exports.fetchProjectData = fetchProjectData;
15
17
  const axios_1 = __importDefault(require("axios"));
16
18
  const zod_1 = require("zod");
17
19
  const analytics_js_1 = require("../utils/analytics.js");
20
+ const debug_js_1 = require("../utils/debug.js");
18
21
  const constants_js_1 = require("./constants.js");
22
+ // ── Thunder URL helper ────────────────────────────────────────────────
23
+ /**
24
+ * Builds the Thunder GraphQL endpoint for the given zone and orgId.
25
+ * Respects `WIZARD_PROXY_THUNDER_URL` for local development — e.g.
26
+ * `WIZARD_PROXY_THUNDER_URL=http://localhost:3030/` routes Thunder
27
+ * traffic to a local server.
28
+ */
29
+ function thunderUrl(zone, orgId, queryName) {
30
+ const base = process.env.WIZARD_PROXY_THUNDER_URL ??
31
+ constants_js_1.AMPLITUDE_ZONE_SETTINGS[zone].appApiUrlBase;
32
+ // Ensure the base ends with /graphql/org/ so we can append orgId.
33
+ const graphqlBase = base.endsWith('/graphql/org/')
34
+ ? base
35
+ : `${base.replace(/\/$/, '')}/graphql/org/`;
36
+ const url = `${graphqlBase}${orgId}`;
37
+ return queryName ? `${url}?q=${queryName}` : url;
38
+ }
19
39
  // ── Amplitude GraphQL types ───────────────────────────────────────────
20
40
  const AmplitudeUserSchema = zod_1.z.object({
21
41
  data: zod_1.z.object({
@@ -252,13 +272,12 @@ query OwnedDashboards {
252
272
  * Returns { hasCharts: false, hasDashboards: false } on any error so the
253
273
  * checklist falls back to the default empty state rather than crashing.
254
274
  */
255
- async function fetchOwnedDashboards(idToken, zone, orgId) {
256
- const { appApiUrlBase } = constants_js_1.AMPLITUDE_ZONE_SETTINGS[zone];
257
- const url = `${appApiUrlBase}${orgId}`;
275
+ async function fetchOwnedDashboards(accessToken, zone, orgId) {
276
+ const url = thunderUrl(zone, orgId, 'OwnedDashboards');
258
277
  try {
259
278
  const response = await axios_1.default.post(url, { query: OWNED_DASHBOARDS_QUERY }, {
260
279
  headers: {
261
- Authorization: idToken,
280
+ 'x-amp-authorization': `Bearer ${accessToken}`,
262
281
  'Content-Type': 'application/json',
263
282
  'User-Agent': constants_js_1.WIZARD_USER_AGENT,
264
283
  },
@@ -374,18 +393,16 @@ query hasAnyDefaultEventTrackingSourceAndEvents($appId: ID!) {
374
393
  * Checks whether an Amplitude project has ingested any events and whether
375
394
  * the SDK snippet is configured.
376
395
  *
377
- * The query lives in Thunder (the main Amplitude app GraphQL server), served
378
- * at /graphql/org/:orgId. orgId is required to construct the endpoint URL.
396
+ * Always routes to Thunder (the main Amplitude app GraphQL server) at
397
+ * /t/graphql/org/:orgId using a Bearer access_token.
379
398
  */
380
- async function fetchProjectActivationStatus(idToken, zone, appId, orgId) {
381
- const { appApiUrlBase, dataApiUrl } = constants_js_1.AMPLITUDE_ZONE_SETTINGS[zone];
382
- // Use the Thunder org-scoped endpoint when orgId is available; fall back to
383
- // the data API (which may not expose this field for all users).
384
- const url = orgId ? `${appApiUrlBase}${orgId}` : dataApiUrl;
399
+ async function fetchProjectActivationStatus(opts) {
400
+ const { accessToken, zone, appId, orgId } = opts;
401
+ const url = thunderUrl(zone, orgId, 'hasAnyDefaultEventTrackingSourceAndEvents');
385
402
  try {
386
403
  const response = await axios_1.default.post(url, { query: ACTIVATION_STATUS_QUERY, variables: { appId: String(appId) } }, {
387
404
  headers: {
388
- Authorization: idToken,
405
+ 'x-amp-authorization': `Bearer ${accessToken}`,
389
406
  'Content-Type': 'application/json',
390
407
  'User-Agent': constants_js_1.WIZARD_USER_AGENT,
391
408
  },
@@ -403,6 +420,91 @@ async function fetchProjectActivationStatus(idToken, zone, appId, orgId) {
403
420
  throw apiError;
404
421
  }
405
422
  }
423
+ // ── Slack install URL ─────────────────────────────────────────────────────
424
+ const SlackInstallUrlSchema = zod_1.z.object({
425
+ data: zod_1.z.object({
426
+ slackInstallUrl: zod_1.z.object({
427
+ installUrl: zod_1.z.string().url(),
428
+ }),
429
+ }),
430
+ });
431
+ const SLACK_INSTALL_URL_QUERY = `
432
+ query SlackInstallUrl($action: SlackInstallUrlAction!, $originalPath: String) {
433
+ slackInstallUrl(action: $action, originalPath: $originalPath) {
434
+ installUrl
435
+ }
436
+ }`;
437
+ /**
438
+ * Fetches the direct Slack OAuth install URL from Thunder.
439
+ * This lets the wizard open the Slack authorization page directly instead of
440
+ * routing through Amplitude Settings.
441
+ *
442
+ * Returns `null` on any error so callers can fall back to the settings page.
443
+ */
444
+ async function fetchSlackInstallUrl(accessToken, zone, orgId, originalPath) {
445
+ const url = thunderUrl(zone, orgId, 'SlackInstallUrl');
446
+ try {
447
+ const response = await axios_1.default.post(url, {
448
+ query: SLACK_INSTALL_URL_QUERY,
449
+ variables: { action: 'profile', originalPath },
450
+ }, {
451
+ headers: {
452
+ 'x-amp-authorization': `Bearer ${accessToken}`,
453
+ 'Content-Type': 'application/json',
454
+ 'User-Agent': constants_js_1.WIZARD_USER_AGENT,
455
+ },
456
+ timeout: 10_000,
457
+ });
458
+ (0, debug_js_1.logToFile)(`[fetchSlackInstallUrl] response status=${response.status} data=${JSON.stringify(response.data)}`);
459
+ const parsed = SlackInstallUrlSchema.parse(response.data);
460
+ return parsed.data.slackInstallUrl.installUrl;
461
+ }
462
+ catch (err) {
463
+ const detail = axios_1.default.isAxiosError(err)
464
+ ? `status=${err.response?.status} data=${JSON.stringify(err.response?.data)}`
465
+ : err instanceof Error
466
+ ? err.message
467
+ : String(err);
468
+ (0, debug_js_1.logToFile)(`[fetchSlackInstallUrl] failed: ${detail}`);
469
+ return null;
470
+ }
471
+ }
472
+ // ── Slack connection status ───────────────────────────────────────────────
473
+ const SlackConnectionStatusSchema = zod_1.z.object({
474
+ data: zod_1.z.object({
475
+ slackConnectionStatus: zod_1.z.object({
476
+ isConnected: zod_1.z.boolean(),
477
+ }),
478
+ }),
479
+ });
480
+ const SLACK_CONNECTION_STATUS_QUERY = `
481
+ query SlackConnectionStatus {
482
+ slackConnectionStatus {
483
+ isConnected
484
+ }
485
+ }`;
486
+ /**
487
+ * Checks whether the authenticated user already has Slack connected.
488
+ * Returns `null` on any error so callers treat it as unknown.
489
+ */
490
+ async function fetchSlackConnectionStatus(accessToken, zone, orgId) {
491
+ const url = thunderUrl(zone, orgId, 'SlackConnectionStatus');
492
+ try {
493
+ const response = await axios_1.default.post(url, { query: SLACK_CONNECTION_STATUS_QUERY }, {
494
+ headers: {
495
+ 'x-amp-authorization': `Bearer ${accessToken}`,
496
+ 'Content-Type': 'application/json',
497
+ 'User-Agent': constants_js_1.WIZARD_USER_AGENT,
498
+ },
499
+ timeout: 10_000,
500
+ });
501
+ const parsed = SlackConnectionStatusSchema.parse(response.data);
502
+ return parsed.data.slackConnectionStatus.isConnected;
503
+ }
504
+ catch {
505
+ return null;
506
+ }
507
+ }
406
508
  function handleApiError(error, operation) {
407
509
  if (axios_1.default.isAxiosError(error)) {
408
510
  const axiosError = error;
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getWizardCommandments = getWizardCommandments;
4
+ const constants_js_1 = require("./constants.js");
4
5
  /**
5
6
  * Wizard-wide commandments that are always appended as a system prompt.
6
7
  *
@@ -17,7 +18,19 @@ const WIZARD_COMMANDMENTS = [
17
18
  'Prefer minimal, targeted edits that achieve the requested behavior while preserving existing structure and style. Avoid large refactors, broad reformatting, or unrelated changes unless explicitly requested.',
18
19
  'Do not spawn subagents unless explicitly instructed to do so.',
19
20
  'Use the TodoWrite tool to track your progress. Create a todo list at the start describing the high-level areas of work, mark each as in_progress when you begin it, and completed when done.',
20
- 'After installing the SDK and adding initialization code, but BEFORE writing any track() calls, you MUST call the confirm_event_plan tool to present the proposed instrumentation plan to the user. Only proceed with instrumentation after the plan is approved. If the user provides feedback, revise the plan accordingly and call confirm_event_plan again. If the plan is skipped, do not instrument any events.',
21
+ `After installing the SDK and adding initialization code, but BEFORE writing any track() calls, you MUST call the confirm_event_plan tool to present the proposed instrumentation plan to the user. Only proceed with instrumentation after the plan is approved. If the user provides feedback, revise the plan accordingly and call confirm_event_plan again. If the plan is skipped, do not instrument any events.
22
+
23
+ CRITICAL — confirm_event_plan format:
24
+ name: MUST be a short lowercase label using spaces for separators (2-5 words). Examples: "user signed up", "product added to cart", "search performed", "checkout started", "auth error".
25
+ description: Put ALL details here — when it fires, properties, file paths.
26
+ WRONG name: "Fires on the product detail page after product data loads"
27
+ RIGHT name: "product viewed"
28
+ Names longer than 50 characters will be automatically truncated.`,
29
+ ...(constants_js_1.DEMO_MODE
30
+ ? [
31
+ 'DEMO MODE: This is a demo run. Limit the instrumentation plan to at most 5 events. Pick the 5 most impactful, representative events for the project. Be concise and fast — skip non-essential analysis.',
32
+ ]
33
+ : []),
21
34
  ].join('\n');
22
35
  function getWizardCommandments() {
23
36
  return WIZARD_COMMANDMENTS;
@@ -30,6 +30,8 @@ export interface Args {
30
30
  }
31
31
  export declare const IS_DEV: boolean;
32
32
  export declare const DEBUG = false;
33
+ /** When set, limits the agent to at most 5 events for faster demo runs. */
34
+ export declare const DEMO_MODE: boolean;
33
35
  export declare const DEFAULT_URL: string;
34
36
  export declare const DEFAULT_HOST_URL: string;
35
37
  export declare const ANALYTICS_AMPLITUDE_PUBLIC_PROJECT_WRITE_KEY = "";
@@ -43,7 +45,7 @@ export declare const AMPLITUDE_ZONE_SETTINGS: {
43
45
  readonly oAuthClientId: string;
44
46
  readonly dataApiUrl: "https://data-api.amplitude.com/graphql";
45
47
  /** Thunder GraphQL endpoint — org-scoped. Append the numeric orgId. */
46
- readonly appApiUrlBase: "https://amplitude.com/graphql/org/";
48
+ readonly appApiUrlBase: "https://core.amplitude.com/t/graphql/org/";
47
49
  readonly webUrl: "https://data.amplitude.com";
48
50
  };
49
51
  readonly eu: {
@@ -51,7 +53,7 @@ export declare const AMPLITUDE_ZONE_SETTINGS: {
51
53
  readonly oAuthClientId: string;
52
54
  readonly dataApiUrl: "https://data-api.eu.amplitude.com/graphql";
53
55
  /** Thunder GraphQL endpoint — org-scoped. Append the numeric orgId. */
54
- readonly appApiUrlBase: "https://amplitude.eu/graphql/org/";
56
+ readonly appApiUrlBase: "https://core.eu.amplitude.com/t/graphql/org/";
55
57
  readonly webUrl: "https://data.eu.amplitude.com";
56
58
  };
57
59
  };
@@ -77,7 +79,7 @@ export declare const OUTBOUND_URLS: {
77
79
  /** New dashboard — opened from the Checklist screen. */
78
80
  newDashboard: (zone: AmplitudeZone, orgId?: string | null) => string;
79
81
  /** Slack integration settings — opened from the Slack screen. */
80
- slackSettings: (zone: AmplitudeZone, orgId?: string | null, orgName?: string | null) => string;
82
+ slackSettings: (zone: AmplitudeZone, orgId?: string | null) => string;
81
83
  /** Products page — shown in the Outro for sign-up users. */
82
84
  products: (zone: AmplitudeZone) => string;
83
85
  /** SDK overview — opened from the Activation Options screen. */
@@ -99,7 +101,6 @@ export declare const OUTBOUND_URLS: {
99
101
  stripeDataSource: string;
100
102
  /** Service status pages — shown in the OutageOverlay. */
101
103
  status: {
102
- claude: string;
103
104
  amplitude: string;
104
105
  };
105
106
  /** Bug reports and feedback. */
@@ -112,7 +113,7 @@ export declare const WIZARD_VARIANT_FLAG_KEY = "wizard-variant";
112
113
  /** Variant key -> metadata for wizard run (VARIANT flag selects which entry to use). */
113
114
  export declare const WIZARD_VARIANTS: Record<string, Record<string, string>>;
114
115
  /** User-Agent for wizard HTTP requests and MCP server identification. */
115
- export declare const WIZARD_USER_AGENT: string;
116
+ export declare const WIZARD_USER_AGENT = "amplitude/wizard; version: 1.0.0-beta.6";
116
117
  /** Header prefix for Amplitude properties. */
117
118
  export declare const AMPLITUDE_PROPERTY_HEADER_PREFIX = "X-AMPLITUDE-PROPERTY-";
118
119
  /** Header prefix for Amplitude feature flags. */
@@ -3,8 +3,10 @@
3
3
  * Shared constants for the Amplitude wizard.
4
4
  */
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.DETECTION_TIMEOUT_MS = exports.AMPLITUDE_FLAG_HEADER_PREFIX = exports.AMPLITUDE_PROPERTY_HEADER_PREFIX = exports.WIZARD_USER_AGENT = exports.WIZARD_VARIANTS = exports.WIZARD_VARIANT_FLAG_KEY = exports.DUMMY_PROJECT_API_KEY = exports.OUTBOUND_URLS = exports.DEFAULT_AMPLITUDE_ZONE = exports.AMPLITUDE_ZONE_SETTINGS = exports.OAUTH_PORT = exports.ANALYTICS_TEAM_TAG = exports.ANALYTICS_HOST_URL = exports.ANALYTICS_AMPLITUDE_PUBLIC_PROJECT_WRITE_KEY = exports.DEFAULT_HOST_URL = exports.DEFAULT_URL = exports.DEBUG = exports.IS_DEV = exports.Integration = void 0;
7
- const package_json_1 = require("../../package.json");
6
+ exports.DETECTION_TIMEOUT_MS = exports.AMPLITUDE_FLAG_HEADER_PREFIX = exports.AMPLITUDE_PROPERTY_HEADER_PREFIX = exports.WIZARD_USER_AGENT = exports.WIZARD_VARIANTS = exports.WIZARD_VARIANT_FLAG_KEY = exports.DUMMY_PROJECT_API_KEY = exports.OUTBOUND_URLS = exports.DEFAULT_AMPLITUDE_ZONE = exports.AMPLITUDE_ZONE_SETTINGS = exports.OAUTH_PORT = exports.ANALYTICS_TEAM_TAG = exports.ANALYTICS_HOST_URL = exports.ANALYTICS_AMPLITUDE_PUBLIC_PROJECT_WRITE_KEY = exports.DEFAULT_HOST_URL = exports.DEFAULT_URL = exports.DEMO_MODE = exports.DEBUG = exports.IS_DEV = exports.Integration = void 0;
7
+ // Injected at build time by scripts/generate-version.js — do not edit manually.
8
+ // release-please bumps package.json; the prebuild script syncs it here.
9
+ const VERSION = '1.0.0-beta.6';
8
10
  // ── Integration / CLI ───────────────────────────────────────────────
9
11
  /**
10
12
  * Detection order matters: put framework-specific integrations BEFORE basic language fallbacks.
@@ -36,6 +38,8 @@ var Integration;
36
38
  // ── Environment ──────────────────────────────────────────────────────
37
39
  exports.IS_DEV = ['test', 'development'].includes(process.env.NODE_ENV ?? '');
38
40
  exports.DEBUG = false;
41
+ /** When set, limits the agent to at most 5 events for faster demo runs. */
42
+ exports.DEMO_MODE = process.env.DEMO_MODE_WIZARD === '1';
39
43
  // ── URLs ─────────────────────────────────────────────────────────────
40
44
  exports.DEFAULT_URL = exports.IS_DEV
41
45
  ? 'http://localhost:8010'
@@ -57,7 +61,7 @@ exports.AMPLITUDE_ZONE_SETTINGS = {
57
61
  oAuthClientId: process.env.OAUTH_CLIENT_ID ?? '0ac84169-c41c-4222-885b-31469c761cb0',
58
62
  dataApiUrl: 'https://data-api.amplitude.com/graphql',
59
63
  /** Thunder GraphQL endpoint — org-scoped. Append the numeric orgId. */
60
- appApiUrlBase: 'https://amplitude.com/graphql/org/',
64
+ appApiUrlBase: 'https://core.amplitude.com/t/graphql/org/',
61
65
  webUrl: 'https://data.amplitude.com',
62
66
  },
63
67
  eu: {
@@ -65,7 +69,7 @@ exports.AMPLITUDE_ZONE_SETTINGS = {
65
69
  oAuthClientId: process.env.OAUTH_CLIENT_ID ?? '110d04a1-8e60-4157-9c43-fcbe4e014a85',
66
70
  dataApiUrl: 'https://data-api.eu.amplitude.com/graphql',
67
71
  /** Thunder GraphQL endpoint — org-scoped. Append the numeric orgId. */
68
- appApiUrlBase: 'https://amplitude.eu/graphql/org/',
72
+ appApiUrlBase: 'https://core.eu.amplitude.com/t/graphql/org/',
69
73
  webUrl: 'https://data.eu.amplitude.com',
70
74
  },
71
75
  };
@@ -108,15 +112,12 @@ exports.OUTBOUND_URLS = {
108
112
  },
109
113
  // ── Post-setup ────────────────────────────────────────────────────────────
110
114
  /** Slack integration settings — opened from the Slack screen. */
111
- slackSettings: (zone, orgId, orgName) => {
112
- const base = exports.OUTBOUND_URLS.overview[zone];
113
- if (orgName) {
114
- return `${base}/analytics/${encodeURIComponent(orgName)}/settings/profile`;
115
- }
115
+ slackSettings: (zone, orgId) => {
116
+ const base = exports.OUTBOUND_URLS.app[zone];
116
117
  if (orgId) {
117
- return `${base}/${orgId}/settings/profile`;
118
+ return `${base}/analytics/org/${orgId}/settings/profile`;
118
119
  }
119
- return `${base}/settings/profile`;
120
+ return `${base}/analytics/settings/profile`;
120
121
  },
121
122
  /** Products page — shown in the Outro for sign-up users. */
122
123
  products: (zone) => `${exports.OUTBOUND_URLS.overview[zone]}/products?source=wizard`,
@@ -142,7 +143,6 @@ exports.OUTBOUND_URLS = {
142
143
  // ── Status ────────────────────────────────────────────────────────────────
143
144
  /** Service status pages — shown in the OutageOverlay. */
144
145
  status: {
145
- claude: 'https://status.claude.com',
146
146
  amplitude: 'https://www.amplitudestatus.com',
147
147
  },
148
148
  // ── Support ───────────────────────────────────────────────────────────────
@@ -160,7 +160,7 @@ exports.WIZARD_VARIANTS = {
160
160
  subagents: { VARIANT: 'subagents' },
161
161
  };
162
162
  /** User-Agent for wizard HTTP requests and MCP server identification. */
163
- exports.WIZARD_USER_AGENT = `amplitude/wizard; version: ${package_json_1.version}`;
163
+ exports.WIZARD_USER_AGENT = `amplitude/wizard; version: ${VERSION}`;
164
164
  // ── HTTP headers ─────────────────────────────────────────────────────
165
165
  /** Header prefix for Amplitude properties. */
166
166
  exports.AMPLITUDE_PROPERTY_HEADER_PREFIX = 'X-AMPLITUDE-PROPERTY-';
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Credential resolution — shared between TUI, agent, and CI modes.
3
+ *
4
+ * Reads stored OAuth tokens, refreshes them if needed, fetches the user's
5
+ * org/workspace/environment list, and populates session credentials when
6
+ * possible. When multiple environments exist, populates `pendingOrgs` so
7
+ * the caller (TUI AuthScreen or AgentUI NDJSON prompt) can handle selection.
8
+ */
9
+ import type { WizardSession } from './wizard-session';
10
+ /**
11
+ * Resolve credentials from stored OAuth tokens and environment data.
12
+ *
13
+ * Mutates `session` in place:
14
+ * - Sets `session.credentials` when a single environment or local key is found
15
+ * - Sets `session.pendingOrgs` + `pendingAuthIdToken` + `pendingAuthAccessToken`
16
+ * when multiple environments exist (caller must handle selection)
17
+ * - Sets `session.apiKeyNotice` when auto-fetch fails
18
+ *
19
+ * Skips entirely when `session.apiKey` is already set (--api-key flag) or
20
+ * `session.credentials` is already populated.
21
+ */
22
+ export declare function resolveCredentials(session: WizardSession, options?: {
23
+ /**
24
+ * When true, clears credentials if no org/workspace ID is set.
25
+ * TUI mode uses this so AuthScreen can force selection.
26
+ * Agent/CI mode should set false — a local API key is sufficient.
27
+ */
28
+ requireOrgId?: boolean;
29
+ /** Org name filter (from --org flag). Case-insensitive partial match. */
30
+ org?: string;
31
+ /** Environment name filter (from --env flag). Case-insensitive match. */
32
+ env?: string;
33
+ }): Promise<void>;
34
+ /**
35
+ * Resolve environment selection from pendingOrgs.
36
+ *
37
+ * Given a selected org ID, workspace ID, and environment name,
38
+ * populates session.credentials from the matching environment.
39
+ * Returns true if credentials were populated.
40
+ */
41
+ export declare function resolveEnvironmentSelection(session: WizardSession, selection: {
42
+ orgId: string;
43
+ workspaceId: string;
44
+ env: string;
45
+ }): Promise<boolean>;