@amplitude/wizard 1.0.0-beta.1 → 1.0.0-beta.5

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 (397) hide show
  1. package/README.md +171 -74
  2. package/dist/bin.js +376 -150
  3. package/dist/src/lib/agent-interface.js +64 -9
  4. package/dist/src/lib/agent-runner.js +1 -10
  5. package/dist/src/lib/api.d.ts +22 -4
  6. package/dist/src/lib/api.js +114 -12
  7. package/dist/src/lib/commandments.js +14 -1
  8. package/dist/src/lib/constants.d.ts +5 -4
  9. package/dist/src/lib/constants.js +11 -9
  10. package/dist/src/lib/credential-resolution.d.ts +45 -0
  11. package/dist/src/lib/credential-resolution.js +311 -0
  12. package/dist/src/lib/exit-codes.d.ts +10 -0
  13. package/dist/src/lib/exit-codes.js +12 -0
  14. package/dist/src/lib/feature-flags.d.ts +37 -0
  15. package/dist/src/lib/feature-flags.js +119 -0
  16. package/dist/src/lib/health-checks/statuspage.d.ts +1 -0
  17. package/dist/src/lib/health-checks/statuspage.js +5 -1
  18. package/dist/src/lib/mode-config.d.ts +14 -0
  19. package/dist/src/lib/mode-config.js +14 -0
  20. package/dist/src/lib/session-checkpoint.d.ts +27 -0
  21. package/dist/src/lib/session-checkpoint.js +134 -0
  22. package/dist/src/lib/wizard-session.d.ts +54 -1
  23. package/dist/src/lib/wizard-session.js +71 -14
  24. package/dist/src/lib/wizard-tools.js +19 -4
  25. package/dist/src/steps/add-mcp-server-to-clients/clients/claude.d.ts +3 -0
  26. package/dist/src/steps/add-mcp-server-to-clients/clients/claude.js +6 -0
  27. package/dist/src/steps/add-mcp-server-to-clients/clients/cursor.js +3 -1
  28. package/dist/src/ui/agent-ui.d.ts +91 -0
  29. package/dist/src/ui/agent-ui.js +277 -0
  30. package/dist/src/ui/logging-ui.js +1 -1
  31. package/dist/src/ui/tui/App.d.ts +12 -0
  32. package/dist/src/ui/tui/App.js +29 -18
  33. package/dist/src/ui/tui/components/AmplitudeLogo.js +16 -17
  34. package/dist/src/ui/tui/components/AmplitudeTextLogo.d.ts +0 -2
  35. package/dist/src/ui/tui/components/AmplitudeTextLogo.js +53 -18
  36. package/dist/src/ui/tui/components/BrailleSpinner.d.ts +8 -0
  37. package/dist/src/ui/tui/components/BrailleSpinner.js +15 -0
  38. package/dist/src/ui/tui/components/ConsoleView.d.ts +8 -11
  39. package/dist/src/ui/tui/components/ConsoleView.js +52 -38
  40. package/dist/src/ui/tui/components/HeaderBar.d.ts +12 -0
  41. package/dist/src/ui/tui/components/HeaderBar.js +17 -0
  42. package/dist/src/ui/tui/components/JourneyStepper.d.ts +16 -0
  43. package/dist/src/ui/tui/components/JourneyStepper.js +83 -0
  44. package/dist/src/ui/tui/components/KeyHintBar.d.ts +19 -0
  45. package/dist/src/ui/tui/components/KeyHintBar.js +20 -0
  46. package/dist/src/ui/tui/console-commands.d.ts +1 -4
  47. package/dist/src/ui/tui/console-commands.js +48 -13
  48. package/dist/src/ui/tui/flows.d.ts +1 -1
  49. package/dist/src/ui/tui/flows.js +1 -1
  50. package/dist/src/ui/tui/hooks/useAsyncEffect.d.ts +15 -0
  51. package/dist/src/ui/tui/hooks/useAsyncEffect.js +35 -0
  52. package/dist/src/ui/tui/hooks/useWizardStore.d.ts +9 -0
  53. package/dist/src/ui/tui/hooks/useWizardStore.js +11 -0
  54. package/dist/src/ui/tui/ink-ui.js +1 -1
  55. package/dist/src/ui/tui/primitives/DissolveTransition.js +4 -5
  56. package/dist/src/ui/tui/primitives/EventPlanViewer.d.ts +3 -1
  57. package/dist/src/ui/tui/primitives/EventPlanViewer.js +8 -3
  58. package/dist/src/ui/tui/primitives/ProgressList.js +1 -1
  59. package/dist/src/ui/tui/primitives/SlashCommandInput.js +19 -4
  60. package/dist/src/ui/tui/primitives/SplitView.d.ts +2 -1
  61. package/dist/src/ui/tui/primitives/SplitView.js +10 -2
  62. package/dist/src/ui/tui/primitives/TabContainer.js +10 -2
  63. package/dist/src/ui/tui/primitives/index.d.ts +0 -1
  64. package/dist/src/ui/tui/primitives/index.js +0 -1
  65. package/dist/src/ui/tui/router.js +1 -1
  66. package/dist/src/ui/tui/screen-registry.d.ts +0 -7
  67. package/dist/src/ui/tui/screen-registry.js +13 -4
  68. package/dist/src/ui/tui/screens/ActivationOptionsScreen.d.ts +2 -2
  69. package/dist/src/ui/tui/screens/ActivationOptionsScreen.js +8 -8
  70. package/dist/src/ui/tui/screens/AuthScreen.d.ts +2 -1
  71. package/dist/src/ui/tui/screens/AuthScreen.js +144 -32
  72. package/dist/src/ui/tui/screens/ChecklistScreen.d.ts +2 -12
  73. package/dist/src/ui/tui/screens/ChecklistScreen.js +22 -33
  74. package/dist/src/ui/tui/screens/DataIngestionCheckScreen.d.ts +3 -12
  75. package/dist/src/ui/tui/screens/DataIngestionCheckScreen.js +114 -33
  76. package/dist/src/ui/tui/screens/DataSetupScreen.d.ts +3 -3
  77. package/dist/src/ui/tui/screens/DataSetupScreen.js +17 -10
  78. package/dist/src/ui/tui/screens/IntroScreen.d.ts +5 -3
  79. package/dist/src/ui/tui/screens/IntroScreen.js +132 -41
  80. package/dist/src/ui/tui/screens/LoginScreen.d.ts +1 -1
  81. package/dist/src/ui/tui/screens/LoginScreen.js +4 -4
  82. package/dist/src/ui/tui/screens/LogoutScreen.d.ts +4 -2
  83. package/dist/src/ui/tui/screens/LogoutScreen.js +17 -5
  84. package/dist/src/ui/tui/screens/McpScreen.d.ts +4 -4
  85. package/dist/src/ui/tui/screens/McpScreen.js +25 -17
  86. package/dist/src/ui/tui/screens/OutageScreen.d.ts +1 -1
  87. package/dist/src/ui/tui/screens/OutageScreen.js +5 -5
  88. package/dist/src/ui/tui/screens/OutroScreen.d.ts +5 -0
  89. package/dist/src/ui/tui/screens/OutroScreen.js +21 -15
  90. package/dist/src/ui/tui/screens/RegionSelectScreen.js +15 -13
  91. package/dist/src/ui/tui/screens/RunScreen.d.ts +7 -5
  92. package/dist/src/ui/tui/screens/RunScreen.js +102 -157
  93. package/dist/src/ui/tui/screens/SettingsOverrideScreen.d.ts +1 -1
  94. package/dist/src/ui/tui/screens/SettingsOverrideScreen.js +6 -5
  95. package/dist/src/ui/tui/screens/SetupScreen.d.ts +1 -1
  96. package/dist/src/ui/tui/screens/SetupScreen.js +7 -7
  97. package/dist/src/ui/tui/screens/SlackScreen.d.ts +2 -7
  98. package/dist/src/ui/tui/screens/SlackScreen.js +60 -45
  99. package/dist/src/ui/tui/session-constants.d.ts +41 -0
  100. package/dist/src/ui/tui/session-constants.js +38 -0
  101. package/dist/src/ui/tui/start-tui.d.ts +3 -1
  102. package/dist/src/ui/tui/start-tui.js +14 -10
  103. package/dist/src/ui/tui/store.d.ts +5 -1
  104. package/dist/src/ui/tui/store.js +45 -6
  105. package/dist/src/ui/tui/styles.d.ts +75 -19
  106. package/dist/src/ui/tui/styles.js +101 -19
  107. package/dist/src/ui/tui/utils/classify-error.d.ts +14 -0
  108. package/dist/src/ui/tui/utils/classify-error.js +90 -0
  109. package/dist/src/ui/tui/utils/diagnostics.d.ts +21 -0
  110. package/dist/src/ui/tui/utils/diagnostics.js +72 -0
  111. package/dist/src/ui/tui/utils/with-retry.d.ts +12 -0
  112. package/dist/src/ui/tui/utils/with-retry.js +32 -0
  113. package/dist/src/ui/tui/utils/with-timeout.d.ts +10 -0
  114. package/dist/src/ui/tui/utils/with-timeout.js +24 -0
  115. package/dist/src/utils/ampli-settings.d.ts +1 -1
  116. package/dist/src/utils/ampli-settings.js +15 -5
  117. package/dist/src/utils/analytics.d.ts +18 -0
  118. package/dist/src/utils/analytics.js +35 -3
  119. package/dist/src/utils/api-key-store.js +5 -5
  120. package/dist/src/utils/atomic-write.d.ts +15 -0
  121. package/dist/src/utils/atomic-write.js +34 -0
  122. package/dist/src/utils/setup-utils.js +2 -2
  123. package/dist/src/utils/token-refresh.d.ts +22 -0
  124. package/dist/src/utils/token-refresh.js +79 -0
  125. package/dist/src/utils/wizard-abort.js +6 -1
  126. package/package.json +16 -17
  127. package/skills/instrumentation/add-analytics-instrumentation/SKILL.md +142 -0
  128. package/skills/instrumentation/diff-intake/SKILL.md +128 -0
  129. package/skills/instrumentation/discover-analytics-patterns/SKILL.md +185 -0
  130. package/skills/instrumentation/discover-event-surfaces/SKILL.md +322 -0
  131. package/skills/instrumentation/discover-event-surfaces/references/best-practices.md +563 -0
  132. package/skills/instrumentation/instrument-events/SKILL.md +169 -0
  133. package/skills/instrumentation/instrument-events/references/best-practices.md +563 -0
  134. package/skills/integration/integration-android/SKILL.md +49 -0
  135. package/skills/integration/integration-android/references/EXAMPLE.md +1977 -0
  136. package/skills/integration/integration-android/references/amplitude-quickstart.md +1845 -0
  137. package/skills/integration/integration-android/references/analytics.md +1778 -0
  138. package/skills/integration/integration-android/references/basic-integration-1.0-begin.md +43 -0
  139. package/skills/integration/integration-android/references/basic-integration-1.1-edit.md +35 -0
  140. package/skills/integration/integration-android/references/basic-integration-1.2-revise.md +23 -0
  141. package/skills/integration/integration-android/references/basic-integration-1.3-conclude.md +57 -0
  142. package/skills/integration/integration-angular/SKILL.md +49 -0
  143. package/skills/integration/integration-angular/references/EXAMPLE.md +899 -0
  144. package/skills/integration/integration-angular/references/amplitude-quickstart.md +1845 -0
  145. package/skills/integration/integration-angular/references/basic-integration-1.0-begin.md +43 -0
  146. package/skills/integration/integration-angular/references/basic-integration-1.1-edit.md +35 -0
  147. package/skills/integration/integration-angular/references/basic-integration-1.2-revise.md +23 -0
  148. package/skills/integration/integration-angular/references/basic-integration-1.3-conclude.md +57 -0
  149. package/skills/integration/integration-angular/references/browser-sdk-2.md +4680 -0
  150. package/skills/integration/integration-astro-hybrid/SKILL.md +56 -0
  151. package/skills/integration/integration-astro-hybrid/references/EXAMPLE.md +1095 -0
  152. package/skills/integration/integration-astro-hybrid/references/amplitude-quickstart.md +1845 -0
  153. package/skills/integration/integration-astro-hybrid/references/basic-integration-1.0-begin.md +43 -0
  154. package/skills/integration/integration-astro-hybrid/references/basic-integration-1.1-edit.md +35 -0
  155. package/skills/integration/integration-astro-hybrid/references/basic-integration-1.2-revise.md +23 -0
  156. package/skills/integration/integration-astro-hybrid/references/basic-integration-1.3-conclude.md +57 -0
  157. package/skills/integration/integration-astro-hybrid/references/browser-sdk-2.md +4680 -0
  158. package/skills/integration/integration-astro-ssr/SKILL.md +52 -0
  159. package/skills/integration/integration-astro-ssr/references/EXAMPLE.md +1106 -0
  160. package/skills/integration/integration-astro-ssr/references/amplitude-quickstart.md +1845 -0
  161. package/skills/integration/integration-astro-ssr/references/basic-integration-1.0-begin.md +43 -0
  162. package/skills/integration/integration-astro-ssr/references/basic-integration-1.1-edit.md +35 -0
  163. package/skills/integration/integration-astro-ssr/references/basic-integration-1.2-revise.md +23 -0
  164. package/skills/integration/integration-astro-ssr/references/basic-integration-1.3-conclude.md +57 -0
  165. package/skills/integration/integration-astro-ssr/references/browser-sdk-2.md +4680 -0
  166. package/skills/integration/integration-astro-static/SKILL.md +49 -0
  167. package/skills/integration/integration-astro-static/references/EXAMPLE.md +910 -0
  168. package/skills/integration/integration-astro-static/references/amplitude-quickstart.md +1845 -0
  169. package/skills/integration/integration-astro-static/references/basic-integration-1.0-begin.md +43 -0
  170. package/skills/integration/integration-astro-static/references/basic-integration-1.1-edit.md +35 -0
  171. package/skills/integration/integration-astro-static/references/basic-integration-1.2-revise.md +23 -0
  172. package/skills/integration/integration-astro-static/references/basic-integration-1.3-conclude.md +57 -0
  173. package/skills/integration/integration-astro-static/references/browser-sdk-2.md +4680 -0
  174. package/skills/integration/integration-astro-view-transitions/SKILL.md +51 -0
  175. package/skills/integration/integration-astro-view-transitions/references/EXAMPLE.md +979 -0
  176. package/skills/integration/integration-astro-view-transitions/references/amplitude-quickstart.md +1845 -0
  177. package/skills/integration/integration-astro-view-transitions/references/basic-integration-1.0-begin.md +43 -0
  178. package/skills/integration/integration-astro-view-transitions/references/basic-integration-1.1-edit.md +35 -0
  179. package/skills/integration/integration-astro-view-transitions/references/basic-integration-1.2-revise.md +23 -0
  180. package/skills/integration/integration-astro-view-transitions/references/basic-integration-1.3-conclude.md +57 -0
  181. package/skills/integration/integration-astro-view-transitions/references/browser-sdk-2.md +4680 -0
  182. package/skills/integration/integration-django/SKILL.md +57 -0
  183. package/skills/integration/integration-django/references/EXAMPLE.md +1005 -0
  184. package/skills/integration/integration-django/references/amplitude-quickstart.md +1845 -0
  185. package/skills/integration/integration-django/references/basic-integration-1.0-begin.md +43 -0
  186. package/skills/integration/integration-django/references/basic-integration-1.1-edit.md +35 -0
  187. package/skills/integration/integration-django/references/basic-integration-1.2-revise.md +23 -0
  188. package/skills/integration/integration-django/references/basic-integration-1.3-conclude.md +57 -0
  189. package/skills/integration/integration-django/references/python.md +1424 -0
  190. package/skills/integration/integration-expo/SKILL.md +53 -0
  191. package/skills/integration/integration-expo/references/EXAMPLE.md +1291 -0
  192. package/skills/integration/integration-expo/references/amplitude-quickstart.md +1845 -0
  193. package/skills/integration/integration-expo/references/basic-integration-1.0-begin.md +43 -0
  194. package/skills/integration/integration-expo/references/basic-integration-1.1-edit.md +35 -0
  195. package/skills/integration/integration-expo/references/basic-integration-1.2-revise.md +23 -0
  196. package/skills/integration/integration-expo/references/basic-integration-1.3-conclude.md +57 -0
  197. package/skills/integration/integration-expo/references/react-native-sdk.md +2819 -0
  198. package/skills/integration/integration-fastapi/SKILL.md +57 -0
  199. package/skills/integration/integration-fastapi/references/EXAMPLE.md +1389 -0
  200. package/skills/integration/integration-fastapi/references/amplitude-quickstart.md +1845 -0
  201. package/skills/integration/integration-fastapi/references/basic-integration-1.0-begin.md +43 -0
  202. package/skills/integration/integration-fastapi/references/basic-integration-1.1-edit.md +35 -0
  203. package/skills/integration/integration-fastapi/references/basic-integration-1.2-revise.md +23 -0
  204. package/skills/integration/integration-fastapi/references/basic-integration-1.3-conclude.md +57 -0
  205. package/skills/integration/integration-fastapi/references/python.md +1424 -0
  206. package/skills/integration/integration-flask/SKILL.md +56 -0
  207. package/skills/integration/integration-flask/references/EXAMPLE.md +1130 -0
  208. package/skills/integration/integration-flask/references/amplitude-quickstart.md +1845 -0
  209. package/skills/integration/integration-flask/references/basic-integration-1.0-begin.md +43 -0
  210. package/skills/integration/integration-flask/references/basic-integration-1.1-edit.md +35 -0
  211. package/skills/integration/integration-flask/references/basic-integration-1.2-revise.md +23 -0
  212. package/skills/integration/integration-flask/references/basic-integration-1.3-conclude.md +57 -0
  213. package/skills/integration/integration-flask/references/python.md +1424 -0
  214. package/skills/integration/integration-javascript_node/SKILL.md +54 -0
  215. package/skills/integration/integration-javascript_node/references/EXAMPLE.md +365 -0
  216. package/skills/integration/integration-javascript_node/references/amplitude-quickstart.md +1845 -0
  217. package/skills/integration/integration-javascript_node/references/analytics.md +1778 -0
  218. package/skills/integration/integration-javascript_node/references/basic-integration-1.0-begin.md +43 -0
  219. package/skills/integration/integration-javascript_node/references/basic-integration-1.1-edit.md +35 -0
  220. package/skills/integration/integration-javascript_node/references/basic-integration-1.2-revise.md +23 -0
  221. package/skills/integration/integration-javascript_node/references/basic-integration-1.3-conclude.md +57 -0
  222. package/skills/integration/integration-javascript_web/SKILL.md +58 -0
  223. package/skills/integration/integration-javascript_web/references/EXAMPLE.md +451 -0
  224. package/skills/integration/integration-javascript_web/references/amplitude-quickstart.md +1845 -0
  225. package/skills/integration/integration-javascript_web/references/basic-integration-1.0-begin.md +43 -0
  226. package/skills/integration/integration-javascript_web/references/basic-integration-1.1-edit.md +35 -0
  227. package/skills/integration/integration-javascript_web/references/basic-integration-1.2-revise.md +23 -0
  228. package/skills/integration/integration-javascript_web/references/basic-integration-1.3-conclude.md +57 -0
  229. package/skills/integration/integration-javascript_web/references/browser-sdk-2.md +4680 -0
  230. package/skills/integration/integration-laravel/SKILL.md +52 -0
  231. package/skills/integration/integration-laravel/references/EXAMPLE.md +2039 -0
  232. package/skills/integration/integration-laravel/references/amplitude-quickstart.md +1845 -0
  233. package/skills/integration/integration-laravel/references/analytics.md +1778 -0
  234. package/skills/integration/integration-laravel/references/basic-integration-1.0-begin.md +43 -0
  235. package/skills/integration/integration-laravel/references/basic-integration-1.1-edit.md +35 -0
  236. package/skills/integration/integration-laravel/references/basic-integration-1.2-revise.md +23 -0
  237. package/skills/integration/integration-laravel/references/basic-integration-1.3-conclude.md +57 -0
  238. package/skills/integration/integration-nextjs-app-router/SKILL.md +54 -0
  239. package/skills/integration/integration-nextjs-app-router/references/EXAMPLE.md +673 -0
  240. package/skills/integration/integration-nextjs-app-router/references/amplitude-quickstart.md +1845 -0
  241. package/skills/integration/integration-nextjs-app-router/references/basic-integration-1.0-begin.md +43 -0
  242. package/skills/integration/integration-nextjs-app-router/references/basic-integration-1.1-edit.md +35 -0
  243. package/skills/integration/integration-nextjs-app-router/references/basic-integration-1.2-revise.md +23 -0
  244. package/skills/integration/integration-nextjs-app-router/references/basic-integration-1.3-conclude.md +57 -0
  245. package/skills/integration/integration-nextjs-app-router/references/browser-sdk-2.md +4680 -0
  246. package/skills/integration/integration-nextjs-pages-router/SKILL.md +54 -0
  247. package/skills/integration/integration-nextjs-pages-router/references/EXAMPLE.md +735 -0
  248. package/skills/integration/integration-nextjs-pages-router/references/amplitude-quickstart.md +1845 -0
  249. package/skills/integration/integration-nextjs-pages-router/references/basic-integration-1.0-begin.md +43 -0
  250. package/skills/integration/integration-nextjs-pages-router/references/basic-integration-1.1-edit.md +35 -0
  251. package/skills/integration/integration-nextjs-pages-router/references/basic-integration-1.2-revise.md +23 -0
  252. package/skills/integration/integration-nextjs-pages-router/references/basic-integration-1.3-conclude.md +57 -0
  253. package/skills/integration/integration-nextjs-pages-router/references/browser-sdk-2.md +4680 -0
  254. package/skills/integration/integration-nuxt-3.6/SKILL.md +46 -0
  255. package/skills/integration/integration-nuxt-3.6/references/EXAMPLE.md +8422 -0
  256. package/skills/integration/integration-nuxt-3.6/references/amplitude-quickstart.md +1845 -0
  257. package/skills/integration/integration-nuxt-3.6/references/basic-integration-1.0-begin.md +43 -0
  258. package/skills/integration/integration-nuxt-3.6/references/basic-integration-1.1-edit.md +35 -0
  259. package/skills/integration/integration-nuxt-3.6/references/basic-integration-1.2-revise.md +23 -0
  260. package/skills/integration/integration-nuxt-3.6/references/basic-integration-1.3-conclude.md +57 -0
  261. package/skills/integration/integration-nuxt-3.6/references/browser-sdk-2.md +4680 -0
  262. package/skills/integration/integration-nuxt-4/SKILL.md +46 -0
  263. package/skills/integration/integration-nuxt-4/references/EXAMPLE.md +8670 -0
  264. package/skills/integration/integration-nuxt-4/references/amplitude-quickstart.md +1845 -0
  265. package/skills/integration/integration-nuxt-4/references/basic-integration-1.0-begin.md +43 -0
  266. package/skills/integration/integration-nuxt-4/references/basic-integration-1.1-edit.md +35 -0
  267. package/skills/integration/integration-nuxt-4/references/basic-integration-1.2-revise.md +23 -0
  268. package/skills/integration/integration-nuxt-4/references/basic-integration-1.3-conclude.md +57 -0
  269. package/skills/integration/integration-nuxt-4/references/browser-sdk-2.md +4680 -0
  270. package/skills/integration/integration-python/SKILL.md +53 -0
  271. package/skills/integration/integration-python/references/EXAMPLE.md +445 -0
  272. package/skills/integration/integration-python/references/amplitude-quickstart.md +1845 -0
  273. package/skills/integration/integration-python/references/basic-integration-1.0-begin.md +43 -0
  274. package/skills/integration/integration-python/references/basic-integration-1.1-edit.md +35 -0
  275. package/skills/integration/integration-python/references/basic-integration-1.2-revise.md +23 -0
  276. package/skills/integration/integration-python/references/basic-integration-1.3-conclude.md +57 -0
  277. package/skills/integration/integration-python/references/python.md +1424 -0
  278. package/skills/integration/integration-react-native/SKILL.md +49 -0
  279. package/skills/integration/integration-react-native/references/EXAMPLE.md +2253 -0
  280. package/skills/integration/integration-react-native/references/amplitude-quickstart.md +1845 -0
  281. package/skills/integration/integration-react-native/references/basic-integration-1.0-begin.md +43 -0
  282. package/skills/integration/integration-react-native/references/basic-integration-1.1-edit.md +35 -0
  283. package/skills/integration/integration-react-native/references/basic-integration-1.2-revise.md +23 -0
  284. package/skills/integration/integration-react-native/references/basic-integration-1.3-conclude.md +57 -0
  285. package/skills/integration/integration-react-native/references/react-native-sdk.md +2819 -0
  286. package/skills/integration/integration-react-react-router-6/SKILL.md +53 -0
  287. package/skills/integration/integration-react-react-router-6/references/EXAMPLE.md +570 -0
  288. package/skills/integration/integration-react-react-router-6/references/amplitude-quickstart.md +1845 -0
  289. package/skills/integration/integration-react-react-router-6/references/basic-integration-1.0-begin.md +43 -0
  290. package/skills/integration/integration-react-react-router-6/references/basic-integration-1.1-edit.md +35 -0
  291. package/skills/integration/integration-react-react-router-6/references/basic-integration-1.2-revise.md +23 -0
  292. package/skills/integration/integration-react-react-router-6/references/basic-integration-1.3-conclude.md +57 -0
  293. package/skills/integration/integration-react-react-router-6/references/browser-sdk-2.md +4680 -0
  294. package/skills/integration/integration-react-react-router-7-data/SKILL.md +53 -0
  295. package/skills/integration/integration-react-react-router-7-data/references/EXAMPLE.md +830 -0
  296. package/skills/integration/integration-react-react-router-7-data/references/amplitude-quickstart.md +1845 -0
  297. package/skills/integration/integration-react-react-router-7-data/references/basic-integration-1.0-begin.md +43 -0
  298. package/skills/integration/integration-react-react-router-7-data/references/basic-integration-1.1-edit.md +35 -0
  299. package/skills/integration/integration-react-react-router-7-data/references/basic-integration-1.2-revise.md +23 -0
  300. package/skills/integration/integration-react-react-router-7-data/references/basic-integration-1.3-conclude.md +57 -0
  301. package/skills/integration/integration-react-react-router-7-data/references/browser-sdk-2.md +4680 -0
  302. package/skills/integration/integration-react-react-router-7-declarative/SKILL.md +53 -0
  303. package/skills/integration/integration-react-react-router-7-declarative/references/EXAMPLE.md +609 -0
  304. package/skills/integration/integration-react-react-router-7-declarative/references/amplitude-quickstart.md +1845 -0
  305. package/skills/integration/integration-react-react-router-7-declarative/references/basic-integration-1.0-begin.md +43 -0
  306. package/skills/integration/integration-react-react-router-7-declarative/references/basic-integration-1.1-edit.md +35 -0
  307. package/skills/integration/integration-react-react-router-7-declarative/references/basic-integration-1.2-revise.md +23 -0
  308. package/skills/integration/integration-react-react-router-7-declarative/references/basic-integration-1.3-conclude.md +57 -0
  309. package/skills/integration/integration-react-react-router-7-declarative/references/browser-sdk-2.md +4680 -0
  310. package/skills/integration/integration-react-react-router-7-framework/SKILL.md +53 -0
  311. package/skills/integration/integration-react-react-router-7-framework/references/EXAMPLE.md +1081 -0
  312. package/skills/integration/integration-react-react-router-7-framework/references/amplitude-quickstart.md +1845 -0
  313. package/skills/integration/integration-react-react-router-7-framework/references/basic-integration-1.0-begin.md +43 -0
  314. package/skills/integration/integration-react-react-router-7-framework/references/basic-integration-1.1-edit.md +35 -0
  315. package/skills/integration/integration-react-react-router-7-framework/references/basic-integration-1.2-revise.md +23 -0
  316. package/skills/integration/integration-react-react-router-7-framework/references/basic-integration-1.3-conclude.md +57 -0
  317. package/skills/integration/integration-react-react-router-7-framework/references/browser-sdk-2.md +4680 -0
  318. package/skills/integration/integration-react-tanstack-router-code-based/SKILL.md +57 -0
  319. package/skills/integration/integration-react-tanstack-router-code-based/references/EXAMPLE.md +659 -0
  320. package/skills/integration/integration-react-tanstack-router-code-based/references/amplitude-quickstart.md +1845 -0
  321. package/skills/integration/integration-react-tanstack-router-code-based/references/basic-integration-1.0-begin.md +43 -0
  322. package/skills/integration/integration-react-tanstack-router-code-based/references/basic-integration-1.1-edit.md +35 -0
  323. package/skills/integration/integration-react-tanstack-router-code-based/references/basic-integration-1.2-revise.md +23 -0
  324. package/skills/integration/integration-react-tanstack-router-code-based/references/basic-integration-1.3-conclude.md +57 -0
  325. package/skills/integration/integration-react-tanstack-router-code-based/references/browser-sdk-2.md +4680 -0
  326. package/skills/integration/integration-react-tanstack-router-file-based/SKILL.md +57 -0
  327. package/skills/integration/integration-react-tanstack-router-file-based/references/EXAMPLE.md +777 -0
  328. package/skills/integration/integration-react-tanstack-router-file-based/references/amplitude-quickstart.md +1845 -0
  329. package/skills/integration/integration-react-tanstack-router-file-based/references/basic-integration-1.0-begin.md +43 -0
  330. package/skills/integration/integration-react-tanstack-router-file-based/references/basic-integration-1.1-edit.md +35 -0
  331. package/skills/integration/integration-react-tanstack-router-file-based/references/basic-integration-1.2-revise.md +23 -0
  332. package/skills/integration/integration-react-tanstack-router-file-based/references/basic-integration-1.3-conclude.md +57 -0
  333. package/skills/integration/integration-react-tanstack-router-file-based/references/browser-sdk-2.md +4680 -0
  334. package/skills/integration/integration-react-vite/SKILL.md +53 -0
  335. package/skills/integration/integration-react-vite/references/EXAMPLE.md +542 -0
  336. package/skills/integration/integration-react-vite/references/amplitude-quickstart.md +1845 -0
  337. package/skills/integration/integration-react-vite/references/basic-integration-1.0-begin.md +43 -0
  338. package/skills/integration/integration-react-vite/references/basic-integration-1.1-edit.md +35 -0
  339. package/skills/integration/integration-react-vite/references/basic-integration-1.2-revise.md +23 -0
  340. package/skills/integration/integration-react-vite/references/basic-integration-1.3-conclude.md +57 -0
  341. package/skills/integration/integration-react-vite/references/browser-sdk-2.md +4680 -0
  342. package/skills/integration/integration-ruby/SKILL.md +50 -0
  343. package/skills/integration/integration-ruby/references/EXAMPLE.md +420 -0
  344. package/skills/integration/integration-ruby/references/amplitude-quickstart.md +1845 -0
  345. package/skills/integration/integration-ruby/references/analytics.md +1778 -0
  346. package/skills/integration/integration-ruby/references/basic-integration-1.0-begin.md +43 -0
  347. package/skills/integration/integration-ruby/references/basic-integration-1.1-edit.md +35 -0
  348. package/skills/integration/integration-ruby/references/basic-integration-1.2-revise.md +23 -0
  349. package/skills/integration/integration-ruby/references/basic-integration-1.3-conclude.md +57 -0
  350. package/skills/integration/integration-ruby-on-rails/SKILL.md +55 -0
  351. package/skills/integration/integration-ruby-on-rails/references/EXAMPLE.md +1013 -0
  352. package/skills/integration/integration-ruby-on-rails/references/amplitude-quickstart.md +1845 -0
  353. package/skills/integration/integration-ruby-on-rails/references/analytics.md +1778 -0
  354. package/skills/integration/integration-ruby-on-rails/references/basic-integration-1.0-begin.md +43 -0
  355. package/skills/integration/integration-ruby-on-rails/references/basic-integration-1.1-edit.md +35 -0
  356. package/skills/integration/integration-ruby-on-rails/references/basic-integration-1.2-revise.md +23 -0
  357. package/skills/integration/integration-ruby-on-rails/references/basic-integration-1.3-conclude.md +57 -0
  358. package/skills/integration/integration-sveltekit/SKILL.md +47 -0
  359. package/skills/integration/integration-sveltekit/references/EXAMPLE.md +14121 -0
  360. package/skills/integration/integration-sveltekit/references/amplitude-quickstart.md +1845 -0
  361. package/skills/integration/integration-sveltekit/references/basic-integration-1.0-begin.md +43 -0
  362. package/skills/integration/integration-sveltekit/references/basic-integration-1.1-edit.md +35 -0
  363. package/skills/integration/integration-sveltekit/references/basic-integration-1.2-revise.md +23 -0
  364. package/skills/integration/integration-sveltekit/references/basic-integration-1.3-conclude.md +57 -0
  365. package/skills/integration/integration-sveltekit/references/browser-sdk-2.md +4680 -0
  366. package/skills/integration/integration-swift/SKILL.md +49 -0
  367. package/skills/integration/integration-swift/references/EXAMPLE.md +660 -0
  368. package/skills/integration/integration-swift/references/amplitude-quickstart.md +1845 -0
  369. package/skills/integration/integration-swift/references/analytics.md +1778 -0
  370. package/skills/integration/integration-swift/references/basic-integration-1.0-begin.md +43 -0
  371. package/skills/integration/integration-swift/references/basic-integration-1.1-edit.md +35 -0
  372. package/skills/integration/integration-swift/references/basic-integration-1.2-revise.md +23 -0
  373. package/skills/integration/integration-swift/references/basic-integration-1.3-conclude.md +57 -0
  374. package/skills/integration/integration-tanstack-start/SKILL.md +58 -0
  375. package/skills/integration/integration-tanstack-start/references/EXAMPLE.md +998 -0
  376. package/skills/integration/integration-tanstack-start/references/amplitude-quickstart.md +1845 -0
  377. package/skills/integration/integration-tanstack-start/references/basic-integration-1.0-begin.md +43 -0
  378. package/skills/integration/integration-tanstack-start/references/basic-integration-1.1-edit.md +35 -0
  379. package/skills/integration/integration-tanstack-start/references/basic-integration-1.2-revise.md +23 -0
  380. package/skills/integration/integration-tanstack-start/references/basic-integration-1.3-conclude.md +57 -0
  381. package/skills/integration/integration-tanstack-start/references/browser-sdk-2.md +4680 -0
  382. package/skills/integration/integration-vue-3/SKILL.md +46 -0
  383. package/skills/integration/integration-vue-3/references/EXAMPLE.md +846 -0
  384. package/skills/integration/integration-vue-3/references/amplitude-quickstart.md +1845 -0
  385. package/skills/integration/integration-vue-3/references/basic-integration-1.0-begin.md +43 -0
  386. package/skills/integration/integration-vue-3/references/basic-integration-1.1-edit.md +35 -0
  387. package/skills/integration/integration-vue-3/references/basic-integration-1.2-revise.md +23 -0
  388. package/skills/integration/integration-vue-3/references/basic-integration-1.3-conclude.md +57 -0
  389. package/skills/integration/integration-vue-3/references/browser-sdk-2.md +4680 -0
  390. package/skills/taxonomy/amplitude-quickstart-taxonomy-agent/SKILL.md +228 -0
  391. package/dist/package.json +0 -145
  392. package/dist/src/ui/tui/components/TitleBar.d.ts +0 -6
  393. package/dist/src/ui/tui/components/TitleBar.js +0 -16
  394. package/dist/src/ui/tui/primitives/KagiSmallWebViewer.d.ts +0 -7
  395. package/dist/src/ui/tui/primitives/KagiSmallWebViewer.js +0 -101
  396. package/dist/src/utils/anthropic-status.d.ts +0 -17
  397. 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
+ };
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Feature flags powered by Amplitude Experiment (server-side local evaluation).
3
+ *
4
+ * Flags are fetched once at startup via `initFeatureFlags()` and evaluated
5
+ * synchronously thereafter — no per-check network calls.
6
+ */
7
+ /** Gate for the LLM analytics additional-feature flow. */
8
+ export declare const FLAG_LLM_ANALYTICS = "wizard-llm-analytics";
9
+ /** Gate for agent-level analytics / telemetry instrumented by the wizard. */
10
+ export declare const FLAG_AGENT_ANALYTICS = "wizard-agent-analytics";
11
+ /**
12
+ * Initialize the Experiment local-evaluation client and pre-fetch flag configs.
13
+ * Safe to call multiple times — subsequent calls are no-ops.
14
+ *
15
+ * @param userId Optional user ID for targeted flag evaluation.
16
+ * @param deviceId Optional device ID for targeted flag evaluation.
17
+ */
18
+ export declare function initFeatureFlags(userId?: string, deviceId?: string): Promise<void>;
19
+ /**
20
+ * Evaluate a single feature flag. Returns the string variant value,
21
+ * or `undefined` if the flag is not set / client not initialized.
22
+ */
23
+ export declare function getFlag(flagKey: string): string | undefined;
24
+ /**
25
+ * Check whether a flag is enabled (variant is `'on'` or `'true'`).
26
+ * Returns `false` when the flag is absent or the client is not initialized.
27
+ */
28
+ export declare function isFlagEnabled(flagKey: string): boolean;
29
+ /**
30
+ * Return a snapshot of all evaluated flags (key -> string value).
31
+ */
32
+ export declare function getAllFlags(): Record<string, string>;
33
+ /**
34
+ * Re-evaluate flags for a specific user (e.g. after login).
35
+ * Updates the cached flags in place.
36
+ */
37
+ export declare function refreshFlags(userId?: string, deviceId?: string): Promise<void>;
@@ -0,0 +1,119 @@
1
+ "use strict";
2
+ /**
3
+ * Feature flags powered by Amplitude Experiment (server-side local evaluation).
4
+ *
5
+ * Flags are fetched once at startup via `initFeatureFlags()` and evaluated
6
+ * synchronously thereafter — no per-check network calls.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.FLAG_AGENT_ANALYTICS = exports.FLAG_LLM_ANALYTICS = void 0;
10
+ exports.initFeatureFlags = initFeatureFlags;
11
+ exports.getFlag = getFlag;
12
+ exports.isFlagEnabled = isFlagEnabled;
13
+ exports.getAllFlags = getAllFlags;
14
+ exports.refreshFlags = refreshFlags;
15
+ const experiment_node_server_1 = require("@amplitude/experiment-node-server");
16
+ const debug_1 = require("../utils/debug");
17
+ // ── Flag keys ────────────────────────────────────────────────────────
18
+ /** Gate for the LLM analytics additional-feature flow. */
19
+ exports.FLAG_LLM_ANALYTICS = 'wizard-llm-analytics';
20
+ /** Gate for agent-level analytics / telemetry instrumented by the wizard. */
21
+ exports.FLAG_AGENT_ANALYTICS = 'wizard-agent-analytics';
22
+ // ── Deployment key ───────────────────────────────────────────────────
23
+ /**
24
+ * Server deployment key for local evaluation.
25
+ * Override with `AMPLITUDE_EXPERIMENT_DEPLOYMENT_KEY` env var.
26
+ */
27
+ const DEFAULT_DEPLOYMENT_KEY = 'server-YOTsk4MS1RWzLyIf1DmvNDUsdOGqkRdM';
28
+ function resolveDeploymentKey() {
29
+ const fromEnv = process.env.AMPLITUDE_EXPERIMENT_DEPLOYMENT_KEY;
30
+ return (fromEnv ?? DEFAULT_DEPLOYMENT_KEY).trim();
31
+ }
32
+ // ── Singleton client ─────────────────────────────────────────────────
33
+ let client = null;
34
+ let cachedFlags = {};
35
+ /**
36
+ * Initialize the Experiment local-evaluation client and pre-fetch flag configs.
37
+ * Safe to call multiple times — subsequent calls are no-ops.
38
+ *
39
+ * @param userId Optional user ID for targeted flag evaluation.
40
+ * @param deviceId Optional device ID for targeted flag evaluation.
41
+ */
42
+ async function initFeatureFlags(userId, deviceId) {
43
+ if (client)
44
+ return; // already initialized
45
+ const deploymentKey = resolveDeploymentKey();
46
+ if (!deploymentKey) {
47
+ (0, debug_1.debug)('feature-flags: no deployment key — all flags default to off');
48
+ return;
49
+ }
50
+ try {
51
+ client = experiment_node_server_1.Experiment.initializeLocal(deploymentKey);
52
+ await client.start();
53
+ const user = {};
54
+ if (userId)
55
+ user.user_id = userId;
56
+ if (deviceId)
57
+ user.device_id = deviceId;
58
+ const variants = client.evaluateV2(user);
59
+ for (const [key, variant] of Object.entries(variants)) {
60
+ if (variant.value !== undefined && variant.value !== null) {
61
+ cachedFlags[key] = String(variant.value);
62
+ }
63
+ }
64
+ (0, debug_1.debug)('feature-flags: initialized with flags', cachedFlags);
65
+ }
66
+ catch (err) {
67
+ (0, debug_1.debug)('feature-flags: initialization failed, defaulting all flags off', err);
68
+ client = null;
69
+ }
70
+ }
71
+ /**
72
+ * Evaluate a single feature flag. Returns the string variant value,
73
+ * or `undefined` if the flag is not set / client not initialized.
74
+ */
75
+ function getFlag(flagKey) {
76
+ return cachedFlags[flagKey];
77
+ }
78
+ /**
79
+ * Check whether a flag is enabled (variant is `'on'` or `'true'`).
80
+ * Returns `false` when the flag is absent or the client is not initialized.
81
+ */
82
+ function isFlagEnabled(flagKey) {
83
+ const value = cachedFlags[flagKey];
84
+ return value === 'on' || value === 'true';
85
+ }
86
+ /**
87
+ * Return a snapshot of all evaluated flags (key -> string value).
88
+ */
89
+ function getAllFlags() {
90
+ return { ...cachedFlags };
91
+ }
92
+ /**
93
+ * Re-evaluate flags for a specific user (e.g. after login).
94
+ * Updates the cached flags in place.
95
+ */
96
+ async function refreshFlags(userId, deviceId) {
97
+ if (!client)
98
+ return;
99
+ try {
100
+ // Re-fetch flag configs in case they changed
101
+ await client.start();
102
+ const user = {};
103
+ if (userId)
104
+ user.user_id = userId;
105
+ if (deviceId)
106
+ user.device_id = deviceId;
107
+ const variants = client.evaluateV2(user);
108
+ cachedFlags = {};
109
+ for (const [key, variant] of Object.entries(variants)) {
110
+ if (variant.value !== undefined && variant.value !== null) {
111
+ cachedFlags[key] = String(variant.value);
112
+ }
113
+ }
114
+ (0, debug_1.debug)('feature-flags: refreshed flags', cachedFlags);
115
+ }
116
+ catch (err) {
117
+ (0, debug_1.debug)('feature-flags: refresh failed', err);
118
+ }
119
+ }
@@ -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;