@amplitude/wizard 1.1.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (259) hide show
  1. package/dist/bin.js +47 -11
  2. package/dist/src/frameworks/javascript-node/javascript-node-wizard-agent.js +11 -1
  3. package/dist/src/frameworks/react-router/react-router-wizard-agent.js +65 -8
  4. package/dist/src/frameworks/vue/vue-wizard-agent.js +6 -1
  5. package/dist/src/lib/agent-interface.js +46 -0
  6. package/dist/src/lib/agent-runner.js +112 -51
  7. package/dist/src/lib/api.d.ts +35 -0
  8. package/dist/src/lib/api.js +118 -0
  9. package/dist/src/lib/commandments.js +1 -0
  10. package/dist/src/lib/constants.d.ts +1 -1
  11. package/dist/src/lib/constants.js +1 -1
  12. package/dist/src/lib/credential-resolution.js +7 -0
  13. package/dist/src/lib/framework-config.d.ts +9 -0
  14. package/dist/src/lib/mcp-with-fallback.d.ts +43 -0
  15. package/dist/src/lib/mcp-with-fallback.js +220 -0
  16. package/dist/src/lib/version-check.d.ts +17 -0
  17. package/dist/src/lib/version-check.js +72 -0
  18. package/dist/src/lib/wizard-session.d.ts +22 -7
  19. package/dist/src/lib/wizard-session.js +5 -3
  20. package/dist/src/run.d.ts +18 -1
  21. package/dist/src/run.js +104 -15
  22. package/dist/src/ui/agent-ui.d.ts +2 -0
  23. package/dist/src/ui/agent-ui.js +10 -0
  24. package/dist/src/ui/logging-ui.d.ts +2 -0
  25. package/dist/src/ui/logging-ui.js +6 -0
  26. package/dist/src/ui/tui/components/ConsoleView.js +14 -1
  27. package/dist/src/ui/tui/components/JourneyStepper.js +1 -3
  28. package/dist/src/ui/tui/flows.d.ts +0 -1
  29. package/dist/src/ui/tui/flows.js +1 -9
  30. package/dist/src/ui/tui/ink-ui.d.ts +2 -0
  31. package/dist/src/ui/tui/ink-ui.js +6 -0
  32. package/dist/src/ui/tui/screen-registry.js +0 -2
  33. package/dist/src/ui/tui/screens/DataIngestionCheckScreen.d.ts +5 -3
  34. package/dist/src/ui/tui/screens/DataIngestionCheckScreen.js +124 -4
  35. package/dist/src/ui/tui/screens/OutroScreen.js +12 -3
  36. package/dist/src/ui/tui/store.d.ts +22 -3
  37. package/dist/src/ui/tui/store.js +52 -18
  38. package/dist/src/ui/tui/utils/diagnostics.js +1 -3
  39. package/dist/src/ui/wizard-ui.d.ts +8 -0
  40. package/dist/src/utils/analytics.d.ts +15 -0
  41. package/dist/src/utils/analytics.js +37 -0
  42. package/dist/src/utils/setup-utils.js +6 -1
  43. package/package.json +2 -2
  44. package/skills/integration/integration-android/SKILL.md +7 -10
  45. package/skills/integration/integration-android/references/amplitude-quickstart.md +1 -1
  46. package/skills/integration/integration-android/references/android.md +1468 -0
  47. package/skills/integration/integration-android/references/basic-integration-1.0-begin.md +3 -1
  48. package/skills/integration/integration-android/references/basic-integration-1.1-edit.md +183 -0
  49. package/skills/integration/integration-android/references/basic-integration-1.3-conclude.md +81 -11
  50. package/skills/integration/integration-angular/SKILL.md +6 -8
  51. package/skills/integration/integration-angular/references/amplitude-quickstart.md +1 -1
  52. package/skills/integration/integration-angular/references/basic-integration-1.0-begin.md +3 -1
  53. package/skills/integration/integration-angular/references/basic-integration-1.1-edit.md +183 -0
  54. package/skills/integration/integration-angular/references/basic-integration-1.3-conclude.md +81 -11
  55. package/skills/integration/integration-angular/references/browser-sdk-2.md +67 -20
  56. package/skills/integration/{integration-swift/references/analytics.md → integration-angular/references/browser-unified-sdk.md} +591 -157
  57. package/skills/integration/integration-astro-hybrid/SKILL.md +6 -13
  58. package/skills/integration/integration-astro-hybrid/references/amplitude-quickstart.md +1 -1
  59. package/skills/integration/integration-astro-hybrid/references/basic-integration-1.0-begin.md +3 -1
  60. package/skills/integration/integration-astro-hybrid/references/basic-integration-1.1-edit.md +183 -0
  61. package/skills/integration/integration-astro-hybrid/references/basic-integration-1.3-conclude.md +81 -11
  62. package/skills/integration/integration-astro-hybrid/references/browser-sdk-2.md +67 -20
  63. package/skills/integration/{integration-android/references/analytics.md → integration-astro-hybrid/references/browser-unified-sdk.md} +591 -157
  64. package/skills/integration/integration-astro-ssr/SKILL.md +6 -11
  65. package/skills/integration/integration-astro-ssr/references/amplitude-quickstart.md +1 -1
  66. package/skills/integration/integration-astro-ssr/references/basic-integration-1.0-begin.md +3 -1
  67. package/skills/integration/integration-astro-ssr/references/basic-integration-1.1-edit.md +183 -0
  68. package/skills/integration/integration-astro-ssr/references/basic-integration-1.3-conclude.md +81 -11
  69. package/skills/integration/integration-astro-ssr/references/browser-sdk-2.md +67 -20
  70. package/skills/integration/{integration-javascript_node/references/analytics.md → integration-astro-ssr/references/browser-unified-sdk.md} +591 -157
  71. package/skills/integration/integration-astro-static/SKILL.md +6 -8
  72. package/skills/integration/integration-astro-static/references/amplitude-quickstart.md +1 -1
  73. package/skills/integration/integration-astro-static/references/basic-integration-1.0-begin.md +3 -1
  74. package/skills/integration/integration-astro-static/references/basic-integration-1.1-edit.md +183 -0
  75. package/skills/integration/integration-astro-static/references/basic-integration-1.3-conclude.md +81 -11
  76. package/skills/integration/integration-astro-static/references/browser-sdk-2.md +67 -20
  77. package/skills/integration/integration-astro-static/references/browser-unified-sdk.md +2212 -0
  78. package/skills/integration/integration-astro-view-transitions/SKILL.md +6 -10
  79. package/skills/integration/integration-astro-view-transitions/references/amplitude-quickstart.md +1 -1
  80. package/skills/integration/integration-astro-view-transitions/references/basic-integration-1.0-begin.md +3 -1
  81. package/skills/integration/integration-astro-view-transitions/references/basic-integration-1.1-edit.md +183 -0
  82. package/skills/integration/integration-astro-view-transitions/references/basic-integration-1.3-conclude.md +81 -11
  83. package/skills/integration/integration-astro-view-transitions/references/browser-sdk-2.md +67 -20
  84. package/skills/integration/integration-astro-view-transitions/references/browser-unified-sdk.md +2212 -0
  85. package/skills/integration/integration-django/SKILL.md +5 -16
  86. package/skills/integration/integration-django/references/amplitude-quickstart.md +1 -1
  87. package/skills/integration/integration-django/references/basic-integration-1.0-begin.md +3 -1
  88. package/skills/integration/integration-django/references/basic-integration-1.1-edit.md +183 -0
  89. package/skills/integration/integration-django/references/basic-integration-1.3-conclude.md +81 -11
  90. package/skills/integration/integration-django/references/python.md +1 -1
  91. package/skills/integration/integration-expo/SKILL.md +8 -13
  92. package/skills/integration/integration-expo/references/amplitude-quickstart.md +1 -1
  93. package/skills/integration/integration-expo/references/basic-integration-1.0-begin.md +3 -1
  94. package/skills/integration/integration-expo/references/basic-integration-1.1-edit.md +183 -0
  95. package/skills/integration/integration-expo/references/basic-integration-1.3-conclude.md +81 -11
  96. package/skills/integration/integration-expo/references/react-native-sdk.md +11 -10
  97. package/skills/integration/integration-fastapi/SKILL.md +5 -16
  98. package/skills/integration/integration-fastapi/references/amplitude-quickstart.md +1 -1
  99. package/skills/integration/integration-fastapi/references/basic-integration-1.0-begin.md +3 -1
  100. package/skills/integration/integration-fastapi/references/basic-integration-1.1-edit.md +183 -0
  101. package/skills/integration/integration-fastapi/references/basic-integration-1.3-conclude.md +81 -11
  102. package/skills/integration/integration-fastapi/references/python.md +1 -1
  103. package/skills/integration/integration-flask/SKILL.md +5 -15
  104. package/skills/integration/integration-flask/references/amplitude-quickstart.md +1 -1
  105. package/skills/integration/integration-flask/references/basic-integration-1.0-begin.md +3 -1
  106. package/skills/integration/integration-flask/references/basic-integration-1.1-edit.md +183 -0
  107. package/skills/integration/integration-flask/references/basic-integration-1.3-conclude.md +81 -11
  108. package/skills/integration/integration-flask/references/python.md +1 -1
  109. package/skills/integration/integration-javascript_node/SKILL.md +6 -12
  110. package/skills/integration/integration-javascript_node/references/amplitude-quickstart.md +1 -1
  111. package/skills/integration/integration-javascript_node/references/basic-integration-1.0-begin.md +3 -1
  112. package/skills/integration/integration-javascript_node/references/basic-integration-1.1-edit.md +183 -0
  113. package/skills/integration/integration-javascript_node/references/basic-integration-1.3-conclude.md +81 -11
  114. package/skills/integration/integration-javascript_node/references/node.md +1457 -0
  115. package/skills/integration/integration-javascript_web/SKILL.md +7 -16
  116. package/skills/integration/integration-javascript_web/references/amplitude-quickstart.md +1 -1
  117. package/skills/integration/integration-javascript_web/references/basic-integration-1.0-begin.md +3 -1
  118. package/skills/integration/integration-javascript_web/references/basic-integration-1.1-edit.md +183 -0
  119. package/skills/integration/integration-javascript_web/references/basic-integration-1.3-conclude.md +81 -11
  120. package/skills/integration/integration-javascript_web/references/browser-sdk-2.md +67 -20
  121. package/skills/integration/integration-javascript_web/references/browser-unified-sdk.md +2212 -0
  122. package/skills/integration/integration-laravel/SKILL.md +5 -11
  123. package/skills/integration/integration-laravel/references/amplitude-quickstart.md +1 -1
  124. package/skills/integration/integration-laravel/references/analytics.md +1 -1
  125. package/skills/integration/integration-laravel/references/basic-integration-1.0-begin.md +3 -1
  126. package/skills/integration/integration-laravel/references/basic-integration-1.1-edit.md +183 -0
  127. package/skills/integration/integration-laravel/references/basic-integration-1.3-conclude.md +81 -11
  128. package/skills/integration/integration-nextjs-app-router/SKILL.md +6 -13
  129. package/skills/integration/integration-nextjs-app-router/references/amplitude-quickstart.md +1 -1
  130. package/skills/integration/integration-nextjs-app-router/references/basic-integration-1.0-begin.md +3 -1
  131. package/skills/integration/integration-nextjs-app-router/references/basic-integration-1.1-edit.md +183 -0
  132. package/skills/integration/integration-nextjs-app-router/references/basic-integration-1.3-conclude.md +81 -11
  133. package/skills/integration/integration-nextjs-app-router/references/browser-sdk-2.md +67 -20
  134. package/skills/integration/integration-nextjs-app-router/references/browser-unified-sdk.md +2212 -0
  135. package/skills/integration/integration-nextjs-pages-router/SKILL.md +6 -13
  136. package/skills/integration/integration-nextjs-pages-router/references/amplitude-quickstart.md +1 -1
  137. package/skills/integration/integration-nextjs-pages-router/references/basic-integration-1.0-begin.md +3 -1
  138. package/skills/integration/integration-nextjs-pages-router/references/basic-integration-1.1-edit.md +183 -0
  139. package/skills/integration/integration-nextjs-pages-router/references/basic-integration-1.3-conclude.md +81 -11
  140. package/skills/integration/integration-nextjs-pages-router/references/browser-sdk-2.md +67 -20
  141. package/skills/integration/integration-nextjs-pages-router/references/browser-unified-sdk.md +2212 -0
  142. package/skills/integration/integration-nuxt-3.6/SKILL.md +6 -5
  143. package/skills/integration/integration-nuxt-3.6/references/EXAMPLE.md +1 -1
  144. package/skills/integration/integration-nuxt-3.6/references/amplitude-quickstart.md +1 -1
  145. package/skills/integration/integration-nuxt-3.6/references/basic-integration-1.0-begin.md +3 -1
  146. package/skills/integration/integration-nuxt-3.6/references/basic-integration-1.1-edit.md +183 -0
  147. package/skills/integration/integration-nuxt-3.6/references/basic-integration-1.3-conclude.md +81 -11
  148. package/skills/integration/integration-nuxt-3.6/references/browser-sdk-2.md +67 -20
  149. package/skills/integration/integration-nuxt-3.6/references/browser-unified-sdk.md +2212 -0
  150. package/skills/integration/integration-nuxt-4/SKILL.md +6 -5
  151. package/skills/integration/integration-nuxt-4/references/amplitude-quickstart.md +1 -1
  152. package/skills/integration/integration-nuxt-4/references/basic-integration-1.0-begin.md +3 -1
  153. package/skills/integration/integration-nuxt-4/references/basic-integration-1.1-edit.md +183 -0
  154. package/skills/integration/integration-nuxt-4/references/basic-integration-1.3-conclude.md +81 -11
  155. package/skills/integration/integration-nuxt-4/references/browser-sdk-2.md +67 -20
  156. package/skills/integration/integration-nuxt-4/references/browser-unified-sdk.md +2212 -0
  157. package/skills/integration/integration-python/SKILL.md +8 -13
  158. package/skills/integration/integration-python/references/amplitude-quickstart.md +1 -1
  159. package/skills/integration/integration-python/references/basic-integration-1.0-begin.md +3 -1
  160. package/skills/integration/integration-python/references/basic-integration-1.1-edit.md +183 -0
  161. package/skills/integration/integration-python/references/basic-integration-1.3-conclude.md +81 -11
  162. package/skills/integration/integration-python/references/python.md +1 -1
  163. package/skills/integration/integration-react-native/SKILL.md +8 -9
  164. package/skills/integration/integration-react-native/references/amplitude-quickstart.md +1 -1
  165. package/skills/integration/integration-react-native/references/basic-integration-1.0-begin.md +3 -1
  166. package/skills/integration/integration-react-native/references/basic-integration-1.1-edit.md +183 -0
  167. package/skills/integration/integration-react-native/references/basic-integration-1.3-conclude.md +81 -11
  168. package/skills/integration/integration-react-native/references/react-native-sdk.md +11 -10
  169. package/skills/integration/integration-react-react-router-6/SKILL.md +6 -12
  170. package/skills/integration/integration-react-react-router-6/references/amplitude-quickstart.md +1 -1
  171. package/skills/integration/integration-react-react-router-6/references/basic-integration-1.0-begin.md +3 -1
  172. package/skills/integration/integration-react-react-router-6/references/basic-integration-1.1-edit.md +183 -0
  173. package/skills/integration/integration-react-react-router-6/references/basic-integration-1.3-conclude.md +81 -11
  174. package/skills/integration/integration-react-react-router-6/references/browser-sdk-2.md +67 -20
  175. package/skills/integration/integration-react-react-router-6/references/browser-unified-sdk.md +2212 -0
  176. package/skills/integration/integration-react-react-router-7-data/SKILL.md +6 -12
  177. package/skills/integration/integration-react-react-router-7-data/references/amplitude-quickstart.md +1 -1
  178. package/skills/integration/integration-react-react-router-7-data/references/basic-integration-1.0-begin.md +3 -1
  179. package/skills/integration/integration-react-react-router-7-data/references/basic-integration-1.1-edit.md +183 -0
  180. package/skills/integration/integration-react-react-router-7-data/references/basic-integration-1.3-conclude.md +81 -11
  181. package/skills/integration/integration-react-react-router-7-data/references/browser-sdk-2.md +67 -20
  182. package/skills/integration/integration-react-react-router-7-data/references/browser-unified-sdk.md +2212 -0
  183. package/skills/integration/integration-react-react-router-7-declarative/SKILL.md +6 -12
  184. package/skills/integration/integration-react-react-router-7-declarative/references/amplitude-quickstart.md +1 -1
  185. package/skills/integration/integration-react-react-router-7-declarative/references/basic-integration-1.0-begin.md +3 -1
  186. package/skills/integration/integration-react-react-router-7-declarative/references/basic-integration-1.1-edit.md +183 -0
  187. package/skills/integration/integration-react-react-router-7-declarative/references/basic-integration-1.3-conclude.md +81 -11
  188. package/skills/integration/integration-react-react-router-7-declarative/references/browser-sdk-2.md +67 -20
  189. package/skills/integration/integration-react-react-router-7-declarative/references/browser-unified-sdk.md +2212 -0
  190. package/skills/integration/integration-react-react-router-7-framework/SKILL.md +6 -12
  191. package/skills/integration/integration-react-react-router-7-framework/references/amplitude-quickstart.md +1 -1
  192. package/skills/integration/integration-react-react-router-7-framework/references/basic-integration-1.0-begin.md +3 -1
  193. package/skills/integration/integration-react-react-router-7-framework/references/basic-integration-1.1-edit.md +183 -0
  194. package/skills/integration/integration-react-react-router-7-framework/references/basic-integration-1.3-conclude.md +81 -11
  195. package/skills/integration/integration-react-react-router-7-framework/references/browser-sdk-2.md +67 -20
  196. package/skills/integration/integration-react-react-router-7-framework/references/browser-unified-sdk.md +2212 -0
  197. package/skills/integration/integration-react-tanstack-router-code-based/SKILL.md +6 -14
  198. package/skills/integration/integration-react-tanstack-router-code-based/references/amplitude-quickstart.md +1 -1
  199. package/skills/integration/integration-react-tanstack-router-code-based/references/basic-integration-1.0-begin.md +3 -1
  200. package/skills/integration/integration-react-tanstack-router-code-based/references/basic-integration-1.1-edit.md +183 -0
  201. package/skills/integration/integration-react-tanstack-router-code-based/references/basic-integration-1.3-conclude.md +81 -11
  202. package/skills/integration/integration-react-tanstack-router-code-based/references/browser-sdk-2.md +67 -20
  203. package/skills/integration/integration-react-tanstack-router-code-based/references/browser-unified-sdk.md +2212 -0
  204. package/skills/integration/integration-react-tanstack-router-file-based/SKILL.md +6 -14
  205. package/skills/integration/integration-react-tanstack-router-file-based/references/amplitude-quickstart.md +1 -1
  206. package/skills/integration/integration-react-tanstack-router-file-based/references/basic-integration-1.0-begin.md +3 -1
  207. package/skills/integration/integration-react-tanstack-router-file-based/references/basic-integration-1.1-edit.md +183 -0
  208. package/skills/integration/integration-react-tanstack-router-file-based/references/basic-integration-1.3-conclude.md +81 -11
  209. package/skills/integration/integration-react-tanstack-router-file-based/references/browser-sdk-2.md +67 -20
  210. package/skills/integration/integration-react-tanstack-router-file-based/references/browser-unified-sdk.md +2212 -0
  211. package/skills/integration/integration-react-vite/SKILL.md +6 -12
  212. package/skills/integration/integration-react-vite/references/amplitude-quickstart.md +1 -1
  213. package/skills/integration/integration-react-vite/references/basic-integration-1.0-begin.md +3 -1
  214. package/skills/integration/integration-react-vite/references/basic-integration-1.1-edit.md +183 -0
  215. package/skills/integration/integration-react-vite/references/basic-integration-1.3-conclude.md +81 -11
  216. package/skills/integration/integration-react-vite/references/browser-sdk-2.md +67 -20
  217. package/skills/integration/integration-react-vite/references/browser-unified-sdk.md +2212 -0
  218. package/skills/integration/integration-ruby/SKILL.md +6 -10
  219. package/skills/integration/integration-ruby/references/amplitude-quickstart.md +1 -1
  220. package/skills/integration/integration-ruby/references/analytics.md +1 -1
  221. package/skills/integration/integration-ruby/references/basic-integration-1.0-begin.md +3 -1
  222. package/skills/integration/integration-ruby/references/basic-integration-1.1-edit.md +183 -0
  223. package/skills/integration/integration-ruby/references/basic-integration-1.3-conclude.md +81 -11
  224. package/skills/integration/integration-ruby-on-rails/SKILL.md +5 -14
  225. package/skills/integration/integration-ruby-on-rails/references/amplitude-quickstart.md +1 -1
  226. package/skills/integration/integration-ruby-on-rails/references/analytics.md +1 -1
  227. package/skills/integration/integration-ruby-on-rails/references/basic-integration-1.0-begin.md +3 -1
  228. package/skills/integration/integration-ruby-on-rails/references/basic-integration-1.1-edit.md +183 -0
  229. package/skills/integration/integration-ruby-on-rails/references/basic-integration-1.3-conclude.md +81 -11
  230. package/skills/integration/integration-sveltekit/SKILL.md +6 -6
  231. package/skills/integration/integration-sveltekit/references/amplitude-quickstart.md +1 -1
  232. package/skills/integration/integration-sveltekit/references/basic-integration-1.0-begin.md +3 -1
  233. package/skills/integration/integration-sveltekit/references/basic-integration-1.1-edit.md +183 -0
  234. package/skills/integration/integration-sveltekit/references/basic-integration-1.3-conclude.md +81 -11
  235. package/skills/integration/integration-sveltekit/references/browser-sdk-2.md +67 -20
  236. package/skills/integration/integration-sveltekit/references/browser-unified-sdk.md +2212 -0
  237. package/skills/integration/integration-swift/SKILL.md +9 -10
  238. package/skills/integration/integration-swift/references/amplitude-quickstart.md +1 -1
  239. package/skills/integration/integration-swift/references/basic-integration-1.0-begin.md +3 -1
  240. package/skills/integration/integration-swift/references/basic-integration-1.1-edit.md +183 -0
  241. package/skills/integration/integration-swift/references/basic-integration-1.3-conclude.md +81 -11
  242. package/skills/integration/integration-swift/references/ios.md +1480 -0
  243. package/skills/integration/integration-tanstack-start/SKILL.md +6 -17
  244. package/skills/integration/integration-tanstack-start/references/amplitude-quickstart.md +1 -1
  245. package/skills/integration/integration-tanstack-start/references/basic-integration-1.0-begin.md +3 -1
  246. package/skills/integration/integration-tanstack-start/references/basic-integration-1.1-edit.md +183 -0
  247. package/skills/integration/integration-tanstack-start/references/basic-integration-1.3-conclude.md +81 -11
  248. package/skills/integration/integration-tanstack-start/references/browser-sdk-2.md +67 -20
  249. package/skills/integration/integration-tanstack-start/references/browser-unified-sdk.md +2212 -0
  250. package/skills/integration/integration-vue-3/SKILL.md +6 -5
  251. package/skills/integration/integration-vue-3/references/amplitude-quickstart.md +1 -1
  252. package/skills/integration/integration-vue-3/references/basic-integration-1.0-begin.md +3 -1
  253. package/skills/integration/integration-vue-3/references/basic-integration-1.1-edit.md +183 -0
  254. package/skills/integration/integration-vue-3/references/basic-integration-1.3-conclude.md +81 -11
  255. package/skills/integration/integration-vue-3/references/browser-sdk-2.md +67 -20
  256. package/skills/integration/integration-vue-3/references/browser-unified-sdk.md +2212 -0
  257. package/skills/taxonomy/amplitude-chart-dashboard-plan/SKILL.md +183 -0
  258. package/dist/src/ui/tui/screens/ChecklistScreen.d.ts +0 -12
  259. package/dist/src/ui/tui/screens/ChecklistScreen.js +0 -111
@@ -4,11 +4,13 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.ApiProjectSchema = exports.ApiUserSchema = void 0;
7
+ exports.extractProjectId = extractProjectId;
7
8
  exports.fetchAmplitudeUser = fetchAmplitudeUser;
8
9
  exports.fetchBranches = fetchBranches;
9
10
  exports.fetchWorkspaceEventTypes = fetchWorkspaceEventTypes;
10
11
  exports.fetchOwnedDashboards = fetchOwnedDashboards;
11
12
  exports.fetchSources = fetchSources;
13
+ exports.fetchHasAnyEventsMcp = fetchHasAnyEventsMcp;
12
14
  exports.fetchProjectActivationStatus = fetchProjectActivationStatus;
13
15
  exports.fetchSlackInstallUrl = fetchSlackInstallUrl;
14
16
  exports.fetchSlackConnectionStatus = fetchSlackConnectionStatus;
@@ -19,6 +21,7 @@ const zod_1 = require("zod");
19
21
  const analytics_js_1 = require("../utils/analytics.js");
20
22
  const debug_js_1 = require("../utils/debug.js");
21
23
  const constants_js_1 = require("./constants.js");
24
+ const mcp_with_fallback_js_1 = require("./mcp-with-fallback.js");
22
25
  // ── Thunder URL helper ────────────────────────────────────────────────
23
26
  /**
24
27
  * Builds the Thunder GraphQL endpoint for the given zone and orgId.
@@ -68,6 +71,17 @@ const AmplitudeUserSchema = zod_1.z.object({
68
71
  })),
69
72
  }),
70
73
  });
74
+ /**
75
+ * Extract the primary analytics project ID from a workspace.
76
+ * Picks the lowest-rank environment that has an app ID.
77
+ * Returns null if no such environment exists.
78
+ */
79
+ function extractProjectId(ws) {
80
+ return ((ws.environments ?? [])
81
+ .slice()
82
+ .sort((a, b) => a.rank - b.rank)
83
+ .find((e) => e.app?.id)?.app?.id ?? null);
84
+ }
71
85
  const ORGS_QUERY = `
72
86
  query orgs {
73
87
  orgs {
@@ -369,6 +383,110 @@ async function fetchSources(idToken, zone, orgId, workspaceId, branchId, version
369
383
  throw apiError;
370
384
  }
371
385
  }
386
+ /**
387
+ * Checks whether the project has received any events via the Amplitude MCP server.
388
+ * Uses get_users with `_all` as the primary signal (userCount > 0 → events exist),
389
+ * then fetches get_events for display names.
390
+ *
391
+ * Falls back to a Claude agent with the Amplitude MCP configured if the direct
392
+ * HTTP call fails, so the check survives MCP API drift.
393
+ *
394
+ * Requires the numeric analytics project ID (from workspace.environments[].app.id),
395
+ * not the workspace UUID. Returns false on any error so callers can fall through.
396
+ */
397
+ async function fetchHasAnyEventsMcp(accessToken, projectId) {
398
+ const NONE = {
399
+ hasEvents: false,
400
+ csvRows: [],
401
+ activeEventNames: [],
402
+ activeUsers: [],
403
+ };
404
+ const result = await (0, mcp_with_fallback_js_1.callAmplitudeMcp)({
405
+ accessToken,
406
+ label: 'fetchHasAnyEventsMcp',
407
+ direct: async (callTool) => {
408
+ // get_users with _all — primary signal for whether any events have been received.
409
+ // '_all' covers every event type without requiring taxonomy setup.
410
+ // metadata.userCount > 0 means at least one device has sent events to this project.
411
+ const usersText = await callTool(1, 'get_users', {
412
+ projectId,
413
+ event: { event_type: '_all', filters: [] },
414
+ limit: 5,
415
+ });
416
+ if (!usersText) {
417
+ (0, debug_js_1.logToFile)('[MCP] get_users: no text in response');
418
+ return null;
419
+ }
420
+ let activeUsers;
421
+ let hasEvents;
422
+ try {
423
+ const parsed = JSON.parse(usersText);
424
+ const userCount = parsed.metadata?.userCount ?? parsed.users?.length ?? 0;
425
+ hasEvents = userCount > 0;
426
+ activeUsers = (parsed.users ?? [])
427
+ .filter((u) => u.amplitudeId ?? u.amplitude_id)
428
+ .map((u) => ({
429
+ amplitudeId: (u.amplitudeId ?? u.amplitude_id),
430
+ userId: u.user_id ?? null,
431
+ }))
432
+ .slice(0, 5);
433
+ (0, debug_js_1.logToFile)(`[MCP] get_users: userCount=${userCount}, hasEvents=${hasEvents}`);
434
+ }
435
+ catch (parseErr) {
436
+ (0, debug_js_1.logToFile)(`[MCP] get_users parse error: ${parseErr instanceof Error ? parseErr.message : String(parseErr)}`);
437
+ return null;
438
+ }
439
+ if (!hasEvents)
440
+ return NONE;
441
+ // get_events — fetch active event names for the celebration display.
442
+ // isActive=true means events arrived within ~30 days.
443
+ const eventsText = await callTool(2, 'get_events', {
444
+ projectId,
445
+ limit: 10,
446
+ });
447
+ let activeEventNames = [];
448
+ if (eventsText) {
449
+ try {
450
+ const parsed = JSON.parse(eventsText);
451
+ activeEventNames = (parsed.events ?? [])
452
+ .filter((e) => e.isActive && !e.isHidden && !e.isDeleted && e.name)
453
+ .map((e) => e.name)
454
+ .slice(0, 10);
455
+ (0, debug_js_1.logToFile)(`[MCP] get_events: ${activeEventNames.length} active events`);
456
+ }
457
+ catch (parseErr) {
458
+ (0, debug_js_1.logToFile)(`[MCP] get_events parse error: ${parseErr instanceof Error ? parseErr.message : String(parseErr)}`);
459
+ }
460
+ }
461
+ return { hasEvents: true, csvRows: [], activeEventNames, activeUsers };
462
+ },
463
+ agentPrompt: `Use the Amplitude MCP to check whether project ${projectId} has received any events.
464
+ Call get_users with event_type "_all" and limit 5. If userCount > 0, also call get_events with limit 10.
465
+ Respond with JSON only — no prose, no markdown fences:
466
+ {"hasEvents":true/false,"activeEventNames":["..."],"activeUsers":[{"amplitudeId":"...","userId":"..."}]}`,
467
+ parseAgent: (text) => {
468
+ const match = text.match(/\{[\s\S]*\}/);
469
+ if (!match)
470
+ return null;
471
+ try {
472
+ const parsed = JSON.parse(match[0]);
473
+ return {
474
+ hasEvents: parsed.hasEvents ?? false,
475
+ csvRows: [],
476
+ activeEventNames: parsed.activeEventNames ?? [],
477
+ activeUsers: (parsed.activeUsers ?? []).map((u) => ({
478
+ amplitudeId: u.amplitudeId ?? '',
479
+ userId: u.userId ?? null,
480
+ })),
481
+ };
482
+ }
483
+ catch {
484
+ return null;
485
+ }
486
+ },
487
+ });
488
+ return result ?? NONE;
489
+ }
372
490
  // ── Project activation status ──────────────────────────────────────────────
373
491
  const ActivationStatusSchema = zod_1.z.object({
374
492
  data: zod_1.z.object({
@@ -26,6 +26,7 @@ CRITICAL — confirm_event_plan format:
26
26
  WRONG name: "Fires on the product detail page after product data loads"
27
27
  RIGHT name: "product viewed"
28
28
  Names longer than 50 characters will be automatically truncated.`,
29
+ `After all event and identity instrumentation is complete, you MUST create a dashboard via the Amplitude MCP. This is a hard requirement — do not skip it. Load the amplitude-chart-dashboard-plan skill (taxonomy category via wizard-tools) and follow it exactly. The dashboard is a first-class deliverable.`,
29
30
  ...(constants_js_1.DEMO_MODE
30
31
  ? [
31
32
  'DEMO MODE: This is a demo run. Limit the instrumentation plan to at most 5 events. Pick the 5 most impactful, representative events for the project. Be concise and fast — skip non-essential analysis.',
@@ -113,7 +113,7 @@ export declare const WIZARD_VARIANT_FLAG_KEY = "wizard-variant";
113
113
  /** Variant key -> metadata for wizard run (VARIANT flag selects which entry to use). */
114
114
  export declare const WIZARD_VARIANTS: Record<string, Record<string, string>>;
115
115
  /** User-Agent for wizard HTTP requests and MCP server identification. */
116
- export declare const WIZARD_USER_AGENT = "amplitude/wizard; version: 1.1.0";
116
+ export declare const WIZARD_USER_AGENT = "amplitude/wizard; version: 1.2.0";
117
117
  /** Header prefix for Amplitude properties. */
118
118
  export declare const AMPLITUDE_PROPERTY_HEADER_PREFIX = "X-AMPLITUDE-PROPERTY-";
119
119
  /** Header prefix for Amplitude feature flags. */
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.DETECTION_TIMEOUT_MS = exports.AMPLITUDE_FLAG_HEADER_PREFIX = exports.AMPLITUDE_PROPERTY_HEADER_PREFIX = exports.WIZARD_USER_AGENT = exports.WIZARD_VARIANTS = exports.WIZARD_VARIANT_FLAG_KEY = exports.DUMMY_PROJECT_API_KEY = exports.OUTBOUND_URLS = exports.DEFAULT_AMPLITUDE_ZONE = exports.AMPLITUDE_ZONE_SETTINGS = exports.OAUTH_PORT = exports.ANALYTICS_TEAM_TAG = exports.ANALYTICS_HOST_URL = exports.ANALYTICS_AMPLITUDE_PUBLIC_PROJECT_WRITE_KEY = exports.DEFAULT_HOST_URL = exports.DEFAULT_URL = exports.DEMO_MODE = exports.DEBUG = exports.IS_DEV = exports.Integration = void 0;
7
7
  // Kept in sync by release-please (x-release-please-version marker).
8
8
  // The prebuild script (sync-version.mjs) acts as a safety net.
9
- const VERSION = '1.1.0'; // x-release-please-version
9
+ const VERSION = '1.2.0'; // x-release-please-version
10
10
  // ── Integration / CLI ───────────────────────────────────────────────
11
11
  /**
12
12
  * Detection order matters: put framework-specific integrations BEFORE basic language fallbacks.
@@ -10,6 +10,8 @@
10
10
  Object.defineProperty(exports, "__esModule", { value: true });
11
11
  exports.resolveCredentials = resolveCredentials;
12
12
  exports.resolveEnvironmentSelection = resolveEnvironmentSelection;
13
+ const api_1 = require("./api");
14
+ const analytics_1 = require("../utils/analytics");
13
15
  /**
14
16
  * Resolve credentials from stored OAuth tokens and environment data.
15
17
  *
@@ -105,6 +107,8 @@ async function resolveCredentials(session, options) {
105
107
  const { fetchAmplitudeUser } = await import('./api.js');
106
108
  try {
107
109
  const userInfo = await fetchAmplitudeUser(storedToken.idToken, zone);
110
+ analytics_1.analytics.setDistinctId(userInfo.email);
111
+ analytics_1.analytics.identifyUser({ email: userInfo.email });
108
112
  const workspaceId = session.selectedWorkspaceId ?? undefined;
109
113
  // Find the relevant workspace and its environments
110
114
  let envsWithKey = [];
@@ -296,6 +300,9 @@ async function resolveEnvironmentSelection(session, selection) {
296
300
  session.selectedWorkspaceId = ws.id;
297
301
  session.selectedWorkspaceName = ws.name;
298
302
  session.selectedProjectName = env.name;
303
+ // Extract the numeric analytics project ID for MCP-based event detection.
304
+ const projectId = (0, api_1.extractProjectId)(ws);
305
+ session.selectedProjectId = projectId;
299
306
  persistApiKey(apiKey, session.installDir);
300
307
  session.credentials = {
301
308
  accessToken: session.pendingAuthAccessToken ?? '',
@@ -95,6 +95,15 @@ export interface FrameworkDetection {
95
95
  minimumVersion?: string;
96
96
  /** Get the currently installed version. Called by runner for version check. */
97
97
  getInstalledVersion?: (options: WizardOptions) => Promise<string | undefined>;
98
+ /**
99
+ * Optional: Return dynamic version-check metadata when a framework can be
100
+ * backed by multiple packages with different minimum versions.
101
+ */
102
+ getVersionCheckInfo?: (options: WizardOptions) => Promise<{
103
+ version?: string;
104
+ minimumVersion?: string;
105
+ packageDisplayName?: string;
106
+ }>;
98
107
  /** Detect whether this framework is present in the project. */
99
108
  detect: (options: Pick<WizardOptions, 'installDir'>) => Promise<boolean>;
100
109
  /** Detect the project's package manager(s). Used by the in-process MCP tool. */
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Utility for making authenticated calls to the Amplitude MCP server with
3
+ * automatic Claude agent fallback.
4
+ *
5
+ * When the direct HTTP call fails (tool removed, auth error, parse failure,
6
+ * etc.) the function re-runs the same query via a minimal Claude agent that
7
+ * has only the Amplitude MCP server configured. This insulates callers from
8
+ * MCP API drift without requiring them to write two code paths.
9
+ */
10
+ export declare const AMPLITUDE_MCP_URL: string;
11
+ export type CallToolFn = (id: number, name: string, args: unknown) => Promise<string | null>;
12
+ export interface CallAmplitudeMcpOptions<T> {
13
+ accessToken: string;
14
+ mcpUrl?: string;
15
+ /**
16
+ * The direct MCP call path. Receives a `callTool` helper bound to an open
17
+ * session. Return `null` to trigger the agent fallback.
18
+ */
19
+ direct: (callTool: CallToolFn) => Promise<T | null>;
20
+ /** Prompt sent to the Claude agent when the direct path returns null or throws. */
21
+ agentPrompt: string;
22
+ /** Extract the result from the agent's collected text output. Return null if unparseable. */
23
+ parseAgent: (text: string) => T | null;
24
+ label?: string;
25
+ agentTimeoutMs?: number;
26
+ /**
27
+ * Optional signal from the caller's AbortController. When aborted, in-flight
28
+ * fetch requests and the agent fallback subprocess are cancelled immediately.
29
+ * The top-level application should wire this to its exit / cleanup handler.
30
+ */
31
+ abortSignal?: AbortSignal;
32
+ }
33
+ /**
34
+ * Make an authenticated call to the Amplitude MCP server.
35
+ *
36
+ * 1. Opens an MCP session and calls `opts.direct(callTool)`.
37
+ * 2. If the direct call returns `null` or throws, falls back to a minimal
38
+ * Claude agent with only the Amplitude MCP configured.
39
+ * 3. Passes the agent's text output to `opts.parseAgent` and returns the result.
40
+ *
41
+ * Returns `null` if both paths fail.
42
+ */
43
+ export declare function callAmplitudeMcp<T>(opts: CallAmplitudeMcpOptions<T>): Promise<T | null>;
@@ -0,0 +1,220 @@
1
+ "use strict";
2
+ /**
3
+ * Utility for making authenticated calls to the Amplitude MCP server with
4
+ * automatic Claude agent fallback.
5
+ *
6
+ * When the direct HTTP call fails (tool removed, auth error, parse failure,
7
+ * etc.) the function re-runs the same query via a minimal Claude agent that
8
+ * has only the Amplitude MCP server configured. This insulates callers from
9
+ * MCP API drift without requiring them to write two code paths.
10
+ */
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.AMPLITUDE_MCP_URL = void 0;
16
+ exports.callAmplitudeMcp = callAmplitudeMcp;
17
+ const path_1 = __importDefault(require("path"));
18
+ const debug_js_1 = require("../utils/debug.js");
19
+ const constants_js_1 = require("./constants.js");
20
+ const schemas_js_1 = require("./middleware/schemas.js");
21
+ exports.AMPLITUDE_MCP_URL = process.env.MCP_URL ?? 'https://mcp.amplitude.com/mcp';
22
+ let _sdkModule = null;
23
+ async function getSDKModule() {
24
+ if (!_sdkModule) {
25
+ const mod = await import('@anthropic-ai/claude-agent-sdk');
26
+ _sdkModule = { query: mod.query };
27
+ }
28
+ return _sdkModule;
29
+ }
30
+ function getClaudeCodeExecutablePath() {
31
+ const sdkPackagePath = require.resolve('@anthropic-ai/claude-agent-sdk');
32
+ return path_1.default.join(path_1.default.dirname(sdkPackagePath), 'cli.js');
33
+ }
34
+ // ── MCP session helpers ───────────────────────────────────────────────────────
35
+ /**
36
+ * Open an MCP session and return a `callTool` helper bound to that session.
37
+ * Returns null if the session cannot be established.
38
+ */
39
+ async function openMcpSession(accessToken, mcpUrl, signal) {
40
+ const headers = {
41
+ Authorization: `Bearer ${accessToken}`,
42
+ 'Content-Type': 'application/json',
43
+ 'User-Agent': constants_js_1.WIZARD_USER_AGENT,
44
+ };
45
+ let sessionId;
46
+ try {
47
+ const initRes = await fetch(mcpUrl, {
48
+ method: 'POST',
49
+ headers: { ...headers, Accept: 'application/json, text/event-stream' },
50
+ body: JSON.stringify({
51
+ jsonrpc: '2.0',
52
+ id: 0,
53
+ method: 'initialize',
54
+ params: {
55
+ protocolVersion: '2024-11-05',
56
+ capabilities: {},
57
+ clientInfo: { name: 'amplitude-wizard', version: '1.0.0' },
58
+ },
59
+ }),
60
+ signal,
61
+ });
62
+ sessionId = initRes.headers.get('mcp-session-id') ?? undefined;
63
+ await initRes.body?.cancel().catch(() => undefined);
64
+ }
65
+ catch (err) {
66
+ (0, debug_js_1.logToFile)(`[MCP] initialize failed: ${err instanceof Error ? err.message : String(err)}`);
67
+ return null;
68
+ }
69
+ if (!sessionId)
70
+ return null;
71
+ try {
72
+ const notifRes = await fetch(mcpUrl, {
73
+ method: 'POST',
74
+ headers: { ...headers, 'Mcp-Session-Id': sessionId },
75
+ body: JSON.stringify({
76
+ jsonrpc: '2.0',
77
+ method: 'notifications/initialized',
78
+ }),
79
+ signal,
80
+ });
81
+ await notifRes.body?.cancel().catch(() => undefined);
82
+ }
83
+ catch {
84
+ (0, debug_js_1.logToFile)('[MCP] notifications/initialized failed (continuing)');
85
+ }
86
+ return async (id, name, args) => {
87
+ try {
88
+ const res = await fetch(mcpUrl, {
89
+ method: 'POST',
90
+ headers: {
91
+ ...headers,
92
+ 'Mcp-Session-Id': sessionId,
93
+ Accept: 'application/json, text/event-stream',
94
+ },
95
+ body: JSON.stringify({
96
+ jsonrpc: '2.0',
97
+ id,
98
+ method: 'tools/call',
99
+ params: { name, arguments: args },
100
+ }),
101
+ signal,
102
+ });
103
+ const body = await res.text();
104
+ const sseData = body.match(/^data: (.+)$/m)?.[1] ?? '';
105
+ const rpc = JSON.parse(sseData);
106
+ if (rpc.error) {
107
+ (0, debug_js_1.logToFile)(`[MCP] ${name} rpc error: ${JSON.stringify(rpc.error)}`);
108
+ return null;
109
+ }
110
+ return rpc.result?.content?.[0]?.text ?? null;
111
+ }
112
+ catch (err) {
113
+ (0, debug_js_1.logToFile)(`[MCP] ${name} error: ${err instanceof Error ? err.message : String(err)}`);
114
+ return null;
115
+ }
116
+ };
117
+ }
118
+ // ── Agent fallback ────────────────────────────────────────────────────────────
119
+ const AGENT_FALLBACK_TIMEOUT_MS = 30_000;
120
+ async function runAgentFallback(accessToken, mcpUrl, agentPrompt, timeoutMs, externalSignal) {
121
+ const { query } = await getSDKModule();
122
+ const cliPath = getClaudeCodeExecutablePath();
123
+ // Combine the timeout with any external abort signal.
124
+ // AbortSignal.any() requires Node 20.3+; we support 18.17+, so we wire it manually.
125
+ const controller = new AbortController();
126
+ const timer = setTimeout(() => controller.abort(), timeoutMs);
127
+ const onExternalAbort = () => controller.abort();
128
+ externalSignal?.addEventListener('abort', onExternalAbort, { once: true });
129
+ const collectedText = [];
130
+ try {
131
+ const response = query({
132
+ prompt: agentPrompt,
133
+ options: {
134
+ claudeCodePath: cliPath,
135
+ permissionMode: 'bypassPermissions',
136
+ allowedTools: [],
137
+ mcpServers: {
138
+ amplitude: {
139
+ type: 'http',
140
+ url: mcpUrl,
141
+ headers: { Authorization: `Bearer ${accessToken}` },
142
+ },
143
+ },
144
+ abortSignal: controller.signal,
145
+ },
146
+ });
147
+ for await (const rawMessage of response) {
148
+ const parsed = (0, schemas_js_1.safeParseSDKMessage)(rawMessage);
149
+ if (!parsed.ok)
150
+ continue;
151
+ const message = parsed.message;
152
+ if (message.type === 'assistant') {
153
+ const content = message.message?.content;
154
+ if (Array.isArray(content)) {
155
+ for (const block of content) {
156
+ if (block.type === 'text' && typeof block.text === 'string') {
157
+ collectedText.push(block.text);
158
+ }
159
+ }
160
+ }
161
+ }
162
+ }
163
+ }
164
+ catch (err) {
165
+ (0, debug_js_1.logToFile)(`[MCP-fallback] agent error: ${err instanceof Error ? err.message : String(err)}`);
166
+ }
167
+ finally {
168
+ clearTimeout(timer);
169
+ externalSignal?.removeEventListener('abort', onExternalAbort);
170
+ }
171
+ return collectedText.join('');
172
+ }
173
+ /**
174
+ * Make an authenticated call to the Amplitude MCP server.
175
+ *
176
+ * 1. Opens an MCP session and calls `opts.direct(callTool)`.
177
+ * 2. If the direct call returns `null` or throws, falls back to a minimal
178
+ * Claude agent with only the Amplitude MCP configured.
179
+ * 3. Passes the agent's text output to `opts.parseAgent` and returns the result.
180
+ *
181
+ * Returns `null` if both paths fail.
182
+ */
183
+ async function callAmplitudeMcp(opts) {
184
+ const { accessToken, mcpUrl = exports.AMPLITUDE_MCP_URL, direct, agentPrompt, parseAgent, label = 'callAmplitudeMcp', agentTimeoutMs = AGENT_FALLBACK_TIMEOUT_MS, abortSignal, } = opts;
185
+ // ── Direct path ────────────────────────────────────────────────────────────
186
+ let directResult = null;
187
+ let useFallback = false;
188
+ const callTool = await openMcpSession(accessToken, mcpUrl, abortSignal);
189
+ if (callTool) {
190
+ try {
191
+ directResult = await direct(callTool);
192
+ if (directResult === null) {
193
+ (0, debug_js_1.logToFile)(`[${label}] direct returned null — trying agent fallback`);
194
+ useFallback = true;
195
+ }
196
+ }
197
+ catch (err) {
198
+ (0, debug_js_1.logToFile)(`[${label}] direct threw — trying agent fallback: ${err instanceof Error ? err.message : String(err)}`);
199
+ useFallback = true;
200
+ }
201
+ }
202
+ else {
203
+ (0, debug_js_1.logToFile)(`[${label}] MCP session failed — trying agent fallback`);
204
+ useFallback = true;
205
+ }
206
+ if (!useFallback)
207
+ return directResult;
208
+ // ── Agent fallback ────────────────────────────────────────────────────────
209
+ (0, debug_js_1.logToFile)(`[${label}] running agent fallback`);
210
+ const agentText = await runAgentFallback(accessToken, mcpUrl, agentPrompt, agentTimeoutMs, abortSignal);
211
+ if (!agentText) {
212
+ (0, debug_js_1.logToFile)(`[${label}] agent fallback produced no output`);
213
+ return null;
214
+ }
215
+ const parsed = parseAgent(agentText);
216
+ if (parsed === null) {
217
+ (0, debug_js_1.logToFile)(`[${label}] parseAgent returned null`);
218
+ }
219
+ return parsed;
220
+ }
@@ -0,0 +1,17 @@
1
+ import type { FrameworkDetection } from './framework-config';
2
+ import type { WizardOptions } from '../utils/types';
3
+ export interface VersionCheckInfo {
4
+ version?: string;
5
+ minimumVersion?: string;
6
+ packageDisplayName?: string;
7
+ }
8
+ type VersionWarningOptions = {
9
+ coerceVersion?: boolean;
10
+ };
11
+ /**
12
+ * Resolve version-check metadata for frameworks that either rely on a single
13
+ * package (minimumVersion + getInstalledVersion) or multiple package backends.
14
+ */
15
+ export declare function getVersionCheckInfo(detection: FrameworkDetection, options: WizardOptions): Promise<VersionCheckInfo>;
16
+ export declare function getVersionWarning({ version, minimumVersion, packageDisplayName }: VersionCheckInfo, options?: VersionWarningOptions): string | undefined;
17
+ export {};
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.getVersionCheckInfo = getVersionCheckInfo;
37
+ exports.getVersionWarning = getVersionWarning;
38
+ const semver = __importStar(require("semver"));
39
+ /**
40
+ * Resolve version-check metadata for frameworks that either rely on a single
41
+ * package (minimumVersion + getInstalledVersion) or multiple package backends.
42
+ */
43
+ async function getVersionCheckInfo(detection, options) {
44
+ if (detection.getVersionCheckInfo) {
45
+ const info = await detection.getVersionCheckInfo(options);
46
+ return {
47
+ version: info.version,
48
+ minimumVersion: info.minimumVersion ?? detection.minimumVersion,
49
+ packageDisplayName: info.packageDisplayName ?? detection.packageDisplayName,
50
+ };
51
+ }
52
+ if (!detection.getInstalledVersion) {
53
+ return {};
54
+ }
55
+ return {
56
+ version: await detection.getInstalledVersion(options),
57
+ minimumVersion: detection.minimumVersion,
58
+ packageDisplayName: detection.packageDisplayName,
59
+ };
60
+ }
61
+ function getVersionWarning({ version, minimumVersion, packageDisplayName }, options = {}) {
62
+ if (!version || !minimumVersion || !packageDisplayName) {
63
+ return undefined;
64
+ }
65
+ const normalizedVersion = options.coerceVersion
66
+ ? semver.coerce(version)?.version
67
+ : semver.valid(version);
68
+ if (!normalizedVersion || !semver.lt(normalizedVersion, minimumVersion)) {
69
+ return undefined;
70
+ }
71
+ return `${packageDisplayName} ${version} is below minimum ${minimumVersion}`;
72
+ }
@@ -23,6 +23,7 @@ export declare const CliArgsSchema: z.ZodObject<{
23
23
  debug: z.ZodDefault<z.ZodBoolean>;
24
24
  verbose: z.ZodDefault<z.ZodBoolean>;
25
25
  ci: z.ZodDefault<z.ZodBoolean>;
26
+ agent: z.ZodDefault<z.ZodBoolean>;
26
27
  forceInstall: z.ZodDefault<z.ZodBoolean>;
27
28
  signup: z.ZodDefault<z.ZodBoolean>;
28
29
  localMcp: z.ZodDefault<z.ZodBoolean>;
@@ -110,6 +111,7 @@ export interface WizardSession {
110
111
  forceInstall: boolean;
111
112
  installDir: string;
112
113
  ci: boolean;
114
+ agent: boolean;
113
115
  signup: boolean;
114
116
  localMcp: boolean;
115
117
  apiKey?: string;
@@ -124,6 +126,15 @@ export interface WizardSession {
124
126
  detectedFrameworkLabel: string | null;
125
127
  /** True once framework detection has run (whether it found something or not) */
126
128
  detectionComplete: boolean;
129
+ /** Full results from parallel detection (all frameworks). Available for diagnostics. */
130
+ detectionResults: Array<{
131
+ integration: Integration;
132
+ detected: boolean;
133
+ durationMs: number;
134
+ timedOut: boolean;
135
+ error?: string;
136
+ version?: string;
137
+ }> | null;
127
138
  /**
128
139
  * Whether the currently selected project has existing event data.
129
140
  * null = not yet checked (shown as DataSetup screen)
@@ -191,6 +202,12 @@ export interface WizardSession {
191
202
  selectedWorkspaceName: string | null;
192
203
  /** Project/environment selected during SUSI (displayed in TitleBar). */
193
204
  selectedProjectName: string | null;
205
+ /**
206
+ * Numeric analytics project ID for the selected workspace (e.g. "769610").
207
+ * Sourced from workspace.environments[*].app.id at project selection time.
208
+ * Used by DataIngestionCheckScreen to call query_dataset via MCP.
209
+ */
210
+ selectedProjectId: string | null;
194
211
  /**
195
212
  * Notice shown on the API key entry step of AuthScreen.
196
213
  * Set when auto-fetch fails (e.g. user is not an org admin) so the user
@@ -242,15 +259,13 @@ export interface WizardSession {
242
259
  * the DataIngestionCheckScreen detects events via the API.
243
260
  */
244
261
  dataIngestionConfirmed: boolean;
245
- /** Checklist item: whether the user's first chart has been created. */
246
- checklistChartComplete: boolean;
247
- /** Checklist item: whether the user's first dashboard has been created. */
248
- checklistDashboardComplete: boolean;
249
262
  /**
250
- * True once the user has dismissed the checklist (either all items done,
251
- * or they chose to continue without completing everything).
263
+ * URL of the dashboard created by the agent during the conclude phase.
264
+ * Set when the agent writes .amplitude-dashboard.json and the watcher
265
+ * picks it up. Shown in OutroScreen as a direct link.
266
+ * Null until the agent creates a dashboard.
252
267
  */
253
- checklistComplete: boolean;
268
+ checklistDashboardUrl: string | null;
254
269
  /** Email address of the authenticated user (from ~/.ampli.json stored profile). */
255
270
  userEmail: string | null;
256
271
  /**