@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
@@ -0,0 +1,311 @@
1
+ "use strict";
2
+ /**
3
+ * Credential resolution — shared between TUI, agent, and CI modes.
4
+ *
5
+ * Reads stored OAuth tokens, refreshes them if needed, fetches the user's
6
+ * org/workspace/environment list, and populates session credentials when
7
+ * possible. When multiple environments exist, populates `pendingOrgs` so
8
+ * the caller (TUI AuthScreen or AgentUI NDJSON prompt) can handle selection.
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.resolveCredentials = resolveCredentials;
12
+ exports.resolveEnvironmentSelection = resolveEnvironmentSelection;
13
+ /**
14
+ * Resolve credentials from stored OAuth tokens and environment data.
15
+ *
16
+ * Mutates `session` in place:
17
+ * - Sets `session.credentials` when a single environment or local key is found
18
+ * - Sets `session.pendingOrgs` + `pendingAuthIdToken` + `pendingAuthAccessToken`
19
+ * when multiple environments exist (caller must handle selection)
20
+ * - Sets `session.apiKeyNotice` when auto-fetch fails
21
+ *
22
+ * Skips entirely when `session.apiKey` is already set (--api-key flag) or
23
+ * `session.credentials` is already populated.
24
+ */
25
+ async function resolveCredentials(session, options) {
26
+ // Already have credentials (e.g. from --api-key flag)
27
+ if (session.credentials || session.apiKey)
28
+ return;
29
+ const installDir = session.installDir;
30
+ const [{ getStoredUser, getStoredToken }, { readAmpliConfig }, { getAPIKey }, { getHostFromRegion }, { logToFile }, { persistApiKey, readApiKeyWithSource },] = await Promise.all([
31
+ import('../utils/ampli-settings.js'),
32
+ import('./ampli-config.js'),
33
+ import('../utils/get-api-key.js'),
34
+ import('../utils/urls.js'),
35
+ import('../utils/debug.js'),
36
+ import('../utils/api-key-store.js'),
37
+ ]);
38
+ // Resolve zone from stored user and project config
39
+ const storedUser = getStoredUser();
40
+ const realUser = storedUser && storedUser.id !== 'pending' ? storedUser : null;
41
+ if (realUser?.email) {
42
+ session.userEmail = realUser.email;
43
+ }
44
+ const projectConfig = readAmpliConfig(installDir);
45
+ const projectZone = projectConfig.ok ? projectConfig.config.Zone : undefined;
46
+ // Checkpoint region wins (user explicitly changed via /region),
47
+ // then project config, then global user zone.
48
+ const zone = (session._restoredFromCheckpoint ? session.region : null) ??
49
+ projectZone ??
50
+ realUser?.zone ??
51
+ null;
52
+ if (zone) {
53
+ session.region = zone;
54
+ }
55
+ // Try to resolve credentials from a stored OAuth token
56
+ if (zone) {
57
+ const storedToken = realUser
58
+ ? getStoredToken(realUser.id, realUser.zone)
59
+ : getStoredToken(undefined, zone);
60
+ if (storedToken) {
61
+ // Silent token refresh
62
+ const { tryRefreshToken } = await import('../utils/token-refresh.js');
63
+ const expiresAtMs = new Date(storedToken.expiresAt).getTime();
64
+ const refreshResult = await tryRefreshToken({
65
+ accessToken: storedToken.accessToken,
66
+ refreshToken: storedToken.refreshToken,
67
+ expiresAt: expiresAtMs,
68
+ }, zone);
69
+ if (refreshResult) {
70
+ const { storeToken } = await import('../utils/ampli-settings.js');
71
+ if (realUser) {
72
+ storeToken(realUser, {
73
+ ...storedToken,
74
+ accessToken: refreshResult.accessToken,
75
+ expiresAt: new Date(refreshResult.expiresAt).toISOString(),
76
+ // Persist rotated refresh token if the server issued one
77
+ ...(refreshResult.refreshToken
78
+ ? { refreshToken: refreshResult.refreshToken }
79
+ : {}),
80
+ });
81
+ }
82
+ storedToken.accessToken = refreshResult.accessToken;
83
+ if (refreshResult.refreshToken) {
84
+ storedToken.refreshToken = refreshResult.refreshToken;
85
+ }
86
+ logToFile('[credential-resolution] silently refreshed expired access token');
87
+ }
88
+ // Check local storage first — if a key is already persisted
89
+ // for this install dir, use it without fetching user data.
90
+ const localKey = readApiKeyWithSource(installDir);
91
+ if (localKey) {
92
+ logToFile('[credential-resolution] using locally stored API key');
93
+ session.credentials = {
94
+ accessToken: storedToken.accessToken,
95
+ idToken: storedToken.idToken,
96
+ projectApiKey: localKey.key,
97
+ host: getHostFromRegion(zone),
98
+ projectId: 0,
99
+ };
100
+ session.activationLevel = 'none';
101
+ session.projectHasData = false;
102
+ }
103
+ else {
104
+ // Fetch user data to check how many environments are available.
105
+ const { fetchAmplitudeUser } = await import('./api.js');
106
+ try {
107
+ const userInfo = await fetchAmplitudeUser(storedToken.idToken, zone);
108
+ const workspaceId = session.selectedWorkspaceId ?? undefined;
109
+ // Find the relevant workspace and its environments
110
+ let envsWithKey = [];
111
+ for (const org of userInfo.orgs) {
112
+ const ws = workspaceId
113
+ ? org.workspaces.find((w) => w.id === workspaceId)
114
+ : org.workspaces[0];
115
+ if (ws?.environments) {
116
+ envsWithKey = ws.environments
117
+ .filter((env) => env.app?.apiKey)
118
+ .sort((a, b) => a.rank - b.rank);
119
+ break;
120
+ }
121
+ }
122
+ // If --env flag was provided, try to match across all orgs/workspaces
123
+ if (options?.env) {
124
+ const envMatch = options.env.toLowerCase();
125
+ const orgFilter = options.org?.toLowerCase();
126
+ for (const org of userInfo.orgs) {
127
+ if (orgFilter && !org.name.toLowerCase().includes(orgFilter)) {
128
+ continue;
129
+ }
130
+ for (const ws of org.workspaces) {
131
+ const matchedEnv = (ws.environments ?? []).find((e) => e.app?.apiKey && e.name.toLowerCase() === envMatch);
132
+ if (matchedEnv?.app?.apiKey) {
133
+ const apiKey = matchedEnv.app.apiKey;
134
+ session.selectedOrgId = org.id;
135
+ session.selectedOrgName = org.name;
136
+ session.selectedWorkspaceId = ws.id;
137
+ session.selectedWorkspaceName = ws.name;
138
+ session.selectedProjectName = matchedEnv.name;
139
+ if (!session.userEmail && userInfo.email) {
140
+ session.userEmail = userInfo.email;
141
+ }
142
+ logToFile(`[credential-resolution] --env matched: ${org.name} / ${ws.name} / ${matchedEnv.name}`);
143
+ persistApiKey(apiKey, installDir);
144
+ session.credentials = {
145
+ accessToken: storedToken.accessToken,
146
+ idToken: storedToken.idToken,
147
+ projectApiKey: apiKey,
148
+ host: getHostFromRegion(zone),
149
+ projectId: 0,
150
+ };
151
+ session.activationLevel = 'none';
152
+ session.projectHasData = false;
153
+ break;
154
+ }
155
+ }
156
+ if (session.credentials)
157
+ break;
158
+ }
159
+ if (!session.credentials) {
160
+ logToFile(`[credential-resolution] --env "${options.env}" did not match any environment`);
161
+ }
162
+ }
163
+ else if (envsWithKey.length === 1) {
164
+ // Single environment — auto-select
165
+ const apiKey = envsWithKey[0].app.apiKey;
166
+ session.selectedProjectName = envsWithKey[0].name;
167
+ // Populate org/workspace names
168
+ for (const org of userInfo.orgs) {
169
+ const ws = workspaceId
170
+ ? org.workspaces.find((w) => w.id === workspaceId)
171
+ : org.workspaces[0];
172
+ if (ws?.environments?.some((e) => e.app?.apiKey === apiKey)) {
173
+ session.selectedOrgId = org.id;
174
+ session.selectedOrgName = org.name;
175
+ session.selectedWorkspaceId = ws.id;
176
+ session.selectedWorkspaceName = ws.name;
177
+ break;
178
+ }
179
+ }
180
+ if (!session.userEmail && userInfo.email) {
181
+ session.userEmail = userInfo.email;
182
+ }
183
+ logToFile('[credential-resolution] single environment — auto-selecting API key');
184
+ persistApiKey(apiKey, installDir);
185
+ session.credentials = {
186
+ accessToken: storedToken.accessToken,
187
+ idToken: storedToken.idToken,
188
+ projectApiKey: apiKey,
189
+ host: getHostFromRegion(zone),
190
+ projectId: 0,
191
+ };
192
+ session.activationLevel = 'none';
193
+ session.projectHasData = false;
194
+ }
195
+ else if (envsWithKey.length > 1) {
196
+ // Multiple environments — defer to caller for selection
197
+ logToFile(`[credential-resolution] ${envsWithKey.length} environments found — deferring to project picker`);
198
+ session.pendingOrgs = userInfo.orgs;
199
+ session.pendingAuthIdToken = storedToken.idToken;
200
+ session.pendingAuthAccessToken = storedToken.accessToken;
201
+ }
202
+ else {
203
+ logToFile('[credential-resolution] no environments with API keys — showing apiKeyNotice');
204
+ session.apiKeyNotice =
205
+ "Your API key couldn't be fetched automatically. " +
206
+ 'Only organization admins can access project API keys — ' +
207
+ 'if you need one, ask an admin to share it with you.';
208
+ }
209
+ }
210
+ catch (err) {
211
+ logToFile(`[credential-resolution] fetchAmplitudeUser failed: ${err instanceof Error ? err.message : 'unknown'}`);
212
+ // Fall back to getAPIKey for backward compatibility
213
+ const projectApiKey = await getAPIKey({
214
+ installDir,
215
+ idToken: storedToken.idToken,
216
+ zone: zone,
217
+ workspaceId: session.selectedWorkspaceId ?? undefined,
218
+ });
219
+ if (projectApiKey) {
220
+ persistApiKey(projectApiKey, installDir);
221
+ session.credentials = {
222
+ accessToken: storedToken.accessToken,
223
+ idToken: storedToken.idToken,
224
+ projectApiKey,
225
+ host: getHostFromRegion(zone),
226
+ projectId: 0,
227
+ };
228
+ session.activationLevel = 'none';
229
+ session.projectHasData = false;
230
+ }
231
+ else {
232
+ session.apiKeyNotice =
233
+ "Your API key couldn't be fetched automatically. " +
234
+ 'Only organization admins can access project API keys — ' +
235
+ 'if you need one, ask an admin to share it with you.';
236
+ }
237
+ }
238
+ }
239
+ }
240
+ }
241
+ // Pre-populate org/workspace from ampli.json so activation checks
242
+ // have the IDs they need even when the SUSI flow was skipped.
243
+ if (!session.selectedOrgId &&
244
+ projectConfig.ok &&
245
+ projectConfig.config.OrgId) {
246
+ session.selectedOrgId = String(projectConfig.config.OrgId);
247
+ }
248
+ if (!session.selectedWorkspaceId &&
249
+ projectConfig.ok &&
250
+ projectConfig.config.WorkspaceId) {
251
+ session.selectedWorkspaceId = projectConfig.config.WorkspaceId;
252
+ }
253
+ // Safety check: in TUI mode, clear credentials if no org/workspace ID
254
+ // so AuthScreen can force selection. In agent/CI mode, a local API key
255
+ // is sufficient — skip this check.
256
+ if (options?.requireOrgId !== false &&
257
+ session.credentials !== null &&
258
+ !session.selectedOrgId &&
259
+ !session.pendingOrgs) {
260
+ logToFile('[credential-resolution] credentials set but no org/workspace — clearing to force AuthScreen');
261
+ session.credentials = null;
262
+ }
263
+ }
264
+ /**
265
+ * Resolve environment selection from pendingOrgs.
266
+ *
267
+ * Given a selected org ID, workspace ID, and environment name,
268
+ * populates session.credentials from the matching environment.
269
+ * Returns true if credentials were populated.
270
+ */
271
+ async function resolveEnvironmentSelection(session, selection) {
272
+ if (!session.pendingOrgs)
273
+ return false;
274
+ const { getHostFromRegion } = await import('../utils/urls.js');
275
+ const { persistApiKey } = await import('../utils/api-key-store.js');
276
+ const { logToFile } = await import('../utils/debug.js');
277
+ const org = session.pendingOrgs.find((o) => o.id === selection.orgId);
278
+ if (!org) {
279
+ logToFile(`[credential-resolution] org not found: ${selection.orgId}`);
280
+ return false;
281
+ }
282
+ const ws = org.workspaces.find((w) => w.id === selection.workspaceId);
283
+ if (!ws) {
284
+ logToFile(`[credential-resolution] workspace not found: ${selection.workspaceId}`);
285
+ return false;
286
+ }
287
+ const env = ws.environments?.find((e) => e.name.toLowerCase() === selection.env.toLowerCase());
288
+ if (!env?.app?.apiKey) {
289
+ logToFile(`[credential-resolution] environment not found or has no API key: ${selection.env}`);
290
+ return false;
291
+ }
292
+ const zone = (session.region ?? 'us');
293
+ const apiKey = env.app.apiKey;
294
+ session.selectedOrgId = org.id;
295
+ session.selectedOrgName = org.name;
296
+ session.selectedWorkspaceId = ws.id;
297
+ session.selectedWorkspaceName = ws.name;
298
+ session.selectedProjectName = env.name;
299
+ persistApiKey(apiKey, session.installDir);
300
+ session.credentials = {
301
+ accessToken: session.pendingAuthAccessToken ?? '',
302
+ idToken: session.pendingAuthIdToken ?? undefined,
303
+ projectApiKey: apiKey,
304
+ host: getHostFromRegion(zone),
305
+ projectId: 0,
306
+ };
307
+ session.activationLevel = 'none';
308
+ session.projectHasData = false;
309
+ logToFile(`[credential-resolution] resolved environment: ${org.name} / ${ws.name} / ${env.name}`);
310
+ return true;
311
+ }
@@ -0,0 +1,10 @@
1
+ export declare const ExitCode: {
2
+ readonly SUCCESS: 0;
3
+ readonly GENERAL_ERROR: 1;
4
+ readonly INVALID_ARGS: 2;
5
+ readonly AUTH_REQUIRED: 3;
6
+ readonly NETWORK_ERROR: 4;
7
+ readonly AGENT_FAILED: 10;
8
+ readonly USER_CANCELLED: 130;
9
+ };
10
+ export type ExitCode = (typeof ExitCode)[keyof typeof ExitCode];
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ExitCode = void 0;
4
+ exports.ExitCode = {
5
+ SUCCESS: 0,
6
+ GENERAL_ERROR: 1,
7
+ INVALID_ARGS: 2,
8
+ AUTH_REQUIRED: 3,
9
+ NETWORK_ERROR: 4,
10
+ AGENT_FAILED: 10,
11
+ USER_CANCELLED: 130,
12
+ };
@@ -1,4 +1,5 @@
1
1
  import { type BaseHealthResult, type ComponentHealthResult } from './types';
2
+ /** Model provider health — no-op, wizard uses Vertex AI via proxy. */
2
3
  export declare const checkAnthropicHealth: () => Promise<BaseHealthResult>;
3
4
  export declare const checkAmplitudeOverallHealth: () => Promise<BaseHealthResult>;
4
5
  export declare const checkAmplitudeComponentHealth: () => Promise<ComponentHealthResult>;
@@ -86,7 +86,11 @@ async function fetchStatuspageSummary(url, timeoutMs = 5000) {
86
86
  // ---------------------------------------------------------------------------
87
87
  // Individual statuspage-backed checks
88
88
  // ---------------------------------------------------------------------------
89
- const checkAnthropicHealth = () => fetchStatuspageIndicator('https://status.claude.com/api/v2/status.json');
89
+ /** Model provider health no-op, wizard uses Vertex AI via proxy. */
90
+ const checkAnthropicHealth = () => Promise.resolve({
91
+ status: types_1.ServiceHealthStatus.Healthy,
92
+ pageUrl: '',
93
+ });
90
94
  exports.checkAnthropicHealth = checkAnthropicHealth;
91
95
  const checkAmplitudeOverallHealth = () => fetchStatuspageIndicator('https://www.amplitudestatus.com/api/v2/status.json');
92
96
  exports.checkAmplitudeOverallHealth = checkAmplitudeOverallHealth;
@@ -0,0 +1,14 @@
1
+ export type ExecutionMode = 'interactive' | 'ci' | 'agent';
2
+ export interface ModeConfig {
3
+ mode: ExecutionMode;
4
+ autoApprove: boolean;
5
+ jsonOutput: boolean;
6
+ quiet: boolean;
7
+ }
8
+ export declare function resolveMode(opts: {
9
+ ci?: boolean;
10
+ yes?: boolean;
11
+ agent?: boolean;
12
+ json?: boolean;
13
+ isTTY: boolean;
14
+ }): ModeConfig;
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.resolveMode = resolveMode;
4
+ function resolveMode(opts) {
5
+ const isAgent = Boolean(opts.agent);
6
+ const autoApprove = Boolean(opts.yes) || Boolean(opts.ci) || isAgent;
7
+ const isInteractive = !autoApprove && opts.isTTY;
8
+ return {
9
+ mode: isAgent ? 'agent' : isInteractive ? 'interactive' : 'ci',
10
+ autoApprove,
11
+ jsonOutput: opts.json ?? isAgent,
12
+ quiet: !opts.isTTY,
13
+ };
14
+ }
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Session checkpointing — persist enough wizard state to resume after a crash.
3
+ *
4
+ * Saves a sanitized snapshot (no credentials/tokens) to a temp file.
5
+ * On restart the wizard can load it to skip already-completed setup steps
6
+ * (intro, region, auth selections) while still re-running the agent.
7
+ */
8
+ import type { WizardSession } from './wizard-session';
9
+ /**
10
+ * Write a sanitized session snapshot to disk.
11
+ * Strips credentials and any fields that should be re-evaluated on resume.
12
+ */
13
+ export declare function saveCheckpoint(session: WizardSession): void;
14
+ /**
15
+ * Load a checkpoint if one exists, is fresh, and matches the given install dir.
16
+ *
17
+ * Returns a partial session (only the checkpointed fields) or null when:
18
+ * - no checkpoint file exists
19
+ * - the checkpoint is older than 24 hours
20
+ * - the checkpoint belongs to a different project directory
21
+ * - the file is malformed or fails validation
22
+ */
23
+ export declare function loadCheckpoint(installDir: string): Partial<WizardSession> | null;
24
+ /**
25
+ * Delete the checkpoint file. Call on successful wizard completion.
26
+ */
27
+ export declare function clearCheckpoint(installDir: string): void;
@@ -0,0 +1,134 @@
1
+ "use strict";
2
+ /**
3
+ * Session checkpointing — persist enough wizard state to resume after a crash.
4
+ *
5
+ * Saves a sanitized snapshot (no credentials/tokens) to a temp file.
6
+ * On restart the wizard can load it to skip already-completed setup steps
7
+ * (intro, region, auth selections) while still re-running the agent.
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.saveCheckpoint = saveCheckpoint;
11
+ exports.loadCheckpoint = loadCheckpoint;
12
+ exports.clearCheckpoint = clearCheckpoint;
13
+ const fs_1 = require("fs");
14
+ const crypto_1 = require("crypto");
15
+ const atomic_write_js_1 = require("../utils/atomic-write.js");
16
+ const os_1 = require("os");
17
+ const path_1 = require("path");
18
+ const zod_1 = require("zod");
19
+ // ── Constants ──────────────────────────────────────────────────────────
20
+ /** Per-project checkpoint file using a hash of installDir to avoid cross-instance clobbering. */
21
+ function checkpointPath(installDir) {
22
+ const dir = installDir || process.cwd();
23
+ const hash = (0, crypto_1.createHash)('sha256').update(dir).digest('hex').slice(0, 12);
24
+ return (0, path_1.join)((0, os_1.tmpdir)(), `amplitude-wizard-checkpoint-${hash}.json`);
25
+ }
26
+ /** Checkpoints older than 24 hours are considered stale. */
27
+ const MAX_AGE_MS = 24 * 60 * 60 * 1000;
28
+ // ── Schema ─────────────────────────────────────────────────────────────
29
+ const CheckpointSchema = zod_1.z.object({
30
+ /** ISO-8601 timestamp of when the checkpoint was written. */
31
+ savedAt: zod_1.z.string(),
32
+ /** The project directory this checkpoint belongs to. */
33
+ installDir: zod_1.z.string(),
34
+ // Region + org/workspace/project selection
35
+ region: zod_1.z.enum(['us', 'eu']).nullable(),
36
+ selectedOrgId: zod_1.z.string().nullable(),
37
+ selectedOrgName: zod_1.z.string().nullable(),
38
+ selectedWorkspaceId: zod_1.z.string().nullable(),
39
+ selectedWorkspaceName: zod_1.z.string().nullable(),
40
+ selectedProjectName: zod_1.z.string().nullable(),
41
+ // Framework detection
42
+ integration: zod_1.z.string().nullable(),
43
+ detectedFrameworkLabel: zod_1.z.string().nullable(),
44
+ detectionComplete: zod_1.z.boolean(),
45
+ frameworkContext: zod_1.z.record(zod_1.z.string(), zod_1.z.unknown()),
46
+ // Intro
47
+ introConcluded: zod_1.z.boolean(),
48
+ });
49
+ // ── Public API ─────────────────────────────────────────────────────────
50
+ /**
51
+ * Write a sanitized session snapshot to disk.
52
+ * Strips credentials and any fields that should be re-evaluated on resume.
53
+ */
54
+ function saveCheckpoint(session) {
55
+ const checkpoint = {
56
+ savedAt: new Date().toISOString(),
57
+ installDir: session.installDir,
58
+ region: session.region,
59
+ selectedOrgId: session.selectedOrgId,
60
+ selectedOrgName: session.selectedOrgName,
61
+ selectedWorkspaceId: session.selectedWorkspaceId,
62
+ selectedWorkspaceName: session.selectedWorkspaceName,
63
+ selectedProjectName: session.selectedProjectName,
64
+ integration: session.integration,
65
+ detectedFrameworkLabel: session.detectedFrameworkLabel,
66
+ detectionComplete: session.detectionComplete,
67
+ frameworkContext: session.frameworkContext,
68
+ introConcluded: session.introConcluded,
69
+ };
70
+ (0, atomic_write_js_1.atomicWriteJSON)(checkpointPath(session.installDir), checkpoint, 0o600);
71
+ }
72
+ /**
73
+ * Load a checkpoint if one exists, is fresh, and matches the given install dir.
74
+ *
75
+ * Returns a partial session (only the checkpointed fields) or null when:
76
+ * - no checkpoint file exists
77
+ * - the checkpoint is older than 24 hours
78
+ * - the checkpoint belongs to a different project directory
79
+ * - the file is malformed or fails validation
80
+ */
81
+ function loadCheckpoint(installDir) {
82
+ const filePath = checkpointPath(installDir);
83
+ if (!(0, fs_1.existsSync)(filePath))
84
+ return null;
85
+ let raw;
86
+ try {
87
+ raw = JSON.parse((0, fs_1.readFileSync)(filePath, 'utf-8'));
88
+ }
89
+ catch {
90
+ return null;
91
+ }
92
+ const result = CheckpointSchema.safeParse(raw);
93
+ if (!result.success)
94
+ return null;
95
+ const checkpoint = result.data;
96
+ // Stale check
97
+ const age = Date.now() - new Date(checkpoint.savedAt).getTime();
98
+ if (age > MAX_AGE_MS)
99
+ return null;
100
+ // Must match the current project directory
101
+ if (checkpoint.installDir !== installDir)
102
+ return null;
103
+ // Return only the fields that are safe to restore.
104
+ // Credentials, runPhase, activation state, and post-run steps are
105
+ // intentionally omitted so they get re-evaluated on resume.
106
+ return {
107
+ installDir: checkpoint.installDir,
108
+ region: checkpoint.region,
109
+ selectedOrgId: checkpoint.selectedOrgId,
110
+ selectedOrgName: checkpoint.selectedOrgName,
111
+ selectedWorkspaceId: checkpoint.selectedWorkspaceId,
112
+ selectedWorkspaceName: checkpoint.selectedWorkspaceName,
113
+ selectedProjectName: checkpoint.selectedProjectName,
114
+ integration: checkpoint.integration,
115
+ detectedFrameworkLabel: checkpoint.detectedFrameworkLabel,
116
+ detectionComplete: checkpoint.detectionComplete,
117
+ frameworkContext: checkpoint.frameworkContext,
118
+ introConcluded: checkpoint.introConcluded,
119
+ };
120
+ }
121
+ /**
122
+ * Delete the checkpoint file. Call on successful wizard completion.
123
+ */
124
+ function clearCheckpoint(installDir) {
125
+ try {
126
+ const filePath = checkpointPath(installDir);
127
+ if ((0, fs_1.existsSync)(filePath)) {
128
+ (0, fs_1.unlinkSync)(filePath);
129
+ }
130
+ }
131
+ catch {
132
+ // Best-effort — if deletion fails, the staleness check will expire it.
133
+ }
134
+ }
@@ -9,10 +9,45 @@
9
9
  *
10
10
  * Business logic reads from the session. Never calls a prompt.
11
11
  */
12
+ import { z } from 'zod';
12
13
  import type { Integration } from './constants';
13
14
  import type { FrameworkConfig } from './framework-config';
15
+ /**
16
+ * Zod schema for CLI args passed to `buildSession()`.
17
+ * Coerces `projectId` from string to positive integer.
18
+ * All boolean flags default to false; `installDir` defaults to cwd.
19
+ */
20
+ export declare const CliArgsSchema: z.ZodObject<{
21
+ projectId: z.ZodPipe<z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>, z.ZodTransform<number | undefined, string | number | undefined>>;
22
+ installDir: z.ZodDefault<z.ZodString>;
23
+ debug: z.ZodDefault<z.ZodBoolean>;
24
+ verbose: z.ZodDefault<z.ZodBoolean>;
25
+ ci: z.ZodDefault<z.ZodBoolean>;
26
+ forceInstall: z.ZodDefault<z.ZodBoolean>;
27
+ signup: z.ZodDefault<z.ZodBoolean>;
28
+ localMcp: z.ZodDefault<z.ZodBoolean>;
29
+ menu: z.ZodDefault<z.ZodBoolean>;
30
+ benchmark: z.ZodDefault<z.ZodBoolean>;
31
+ apiKey: z.ZodOptional<z.ZodString>;
32
+ integration: z.ZodOptional<z.ZodString>;
33
+ }, z.core.$strip>;
34
+ /**
35
+ * Zod schema for validated Amplitude credentials.
36
+ * Exported for incremental adoption at credential-construction sites.
37
+ */
38
+ export declare const CredentialsSchema: z.ZodObject<{
39
+ accessToken: z.ZodString;
40
+ idToken: z.ZodOptional<z.ZodString>;
41
+ projectApiKey: z.ZodString;
42
+ host: z.ZodString;
43
+ projectId: z.ZodNumber;
44
+ }, z.core.$strip>;
14
45
  export type CloudRegion = 'us' | 'eu';
15
- /** Lifecycle phase of the main work (agent run, MCP install, etc.) */
46
+ /**
47
+ * Lifecycle phase of the main work (agent run, MCP install, etc.)
48
+ * NOTE: Duplicated in src/ui/tui/session-constants.ts (ESM/CJS workaround).
49
+ * If you change these values, update that file too — a test enforces sync.
50
+ */
16
51
  export declare const RunPhase: {
17
52
  /** Still gathering input (intro, setup screens) */
18
53
  readonly Idle: "idle";
@@ -216,6 +251,14 @@ export interface WizardSession {
216
251
  * or they chose to continue without completing everything).
217
252
  */
218
253
  checklistComplete: boolean;
254
+ /** Email address of the authenticated user (from ~/.ampli.json stored profile). */
255
+ userEmail: string | null;
256
+ /**
257
+ * Set to true by bin.ts when a crash-recovery checkpoint is loaded.
258
+ * IntroScreen checks this to show a "Resume where you left off" prompt
259
+ * instead of the normal detection flow.
260
+ */
261
+ _restoredFromCheckpoint: boolean;
219
262
  }
220
263
  /**
221
264
  * Build a WizardSession from CLI args, pre-populating whatever is known.