@amplitude/wizard 1.0.0-beta.2 → 1.0.0-beta.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +25 -1
- package/README.md +171 -74
- package/dist/bin.js +338 -222
- package/dist/src/lib/agent-interface.js +64 -9
- package/dist/src/lib/agent-runner.js +1 -10
- package/dist/src/lib/api.d.ts +22 -4
- package/dist/src/lib/api.js +114 -12
- package/dist/src/lib/commandments.js +14 -1
- package/dist/src/lib/constants.d.ts +6 -5
- package/dist/src/lib/constants.js +13 -13
- package/dist/src/lib/credential-resolution.d.ts +45 -0
- package/dist/src/lib/credential-resolution.js +311 -0
- package/dist/src/lib/exit-codes.d.ts +10 -0
- package/dist/src/lib/exit-codes.js +12 -0
- package/dist/src/lib/health-checks/statuspage.d.ts +1 -0
- package/dist/src/lib/health-checks/statuspage.js +5 -1
- package/dist/src/lib/mode-config.d.ts +14 -0
- package/dist/src/lib/mode-config.js +14 -0
- package/dist/src/lib/session-checkpoint.d.ts +27 -0
- package/dist/src/lib/session-checkpoint.js +134 -0
- package/dist/src/lib/wizard-session.d.ts +44 -1
- package/dist/src/lib/wizard-session.js +70 -14
- package/dist/src/lib/wizard-tools.js +19 -4
- package/dist/src/steps/add-mcp-server-to-clients/clients/claude.d.ts +3 -0
- package/dist/src/steps/add-mcp-server-to-clients/clients/claude.js +6 -0
- package/dist/src/steps/add-mcp-server-to-clients/clients/cursor.js +3 -1
- package/dist/src/ui/agent-ui.d.ts +91 -0
- package/dist/src/ui/agent-ui.js +277 -0
- package/dist/src/ui/logging-ui.js +1 -1
- package/dist/src/ui/tui/App.d.ts +12 -0
- package/dist/src/ui/tui/App.js +29 -18
- package/dist/src/ui/tui/components/AmplitudeLogo.js +16 -17
- package/dist/src/ui/tui/components/AmplitudeTextLogo.d.ts +0 -2
- package/dist/src/ui/tui/components/AmplitudeTextLogo.js +53 -18
- package/dist/src/ui/tui/components/BrailleSpinner.d.ts +8 -0
- package/dist/src/ui/tui/components/BrailleSpinner.js +15 -0
- package/dist/src/ui/tui/components/ConsoleView.d.ts +8 -11
- package/dist/src/ui/tui/components/ConsoleView.js +51 -34
- package/dist/src/ui/tui/components/HeaderBar.d.ts +12 -0
- package/dist/src/ui/tui/components/HeaderBar.js +17 -0
- package/dist/src/ui/tui/components/JourneyStepper.d.ts +16 -0
- package/dist/src/ui/tui/components/JourneyStepper.js +83 -0
- package/dist/src/ui/tui/components/KeyHintBar.d.ts +19 -0
- package/dist/src/ui/tui/components/KeyHintBar.js +20 -0
- package/dist/src/ui/tui/console-commands.d.ts +1 -2
- package/dist/src/ui/tui/console-commands.js +48 -7
- package/dist/src/ui/tui/flows.d.ts +1 -1
- package/dist/src/ui/tui/flows.js +1 -1
- package/dist/src/ui/tui/hooks/useAsyncEffect.d.ts +15 -0
- package/dist/src/ui/tui/hooks/useAsyncEffect.js +35 -0
- package/dist/src/ui/tui/hooks/useWizardStore.d.ts +9 -0
- package/dist/src/ui/tui/hooks/useWizardStore.js +11 -0
- package/dist/src/ui/tui/ink-ui.js +1 -1
- package/dist/src/ui/tui/primitives/DissolveTransition.js +4 -5
- package/dist/src/ui/tui/primitives/EventPlanViewer.d.ts +3 -1
- package/dist/src/ui/tui/primitives/EventPlanViewer.js +8 -3
- package/dist/src/ui/tui/primitives/ProgressList.js +1 -1
- package/dist/src/ui/tui/primitives/SlashCommandInput.js +19 -4
- package/dist/src/ui/tui/primitives/SplitView.d.ts +2 -1
- package/dist/src/ui/tui/primitives/SplitView.js +10 -2
- package/dist/src/ui/tui/primitives/TabContainer.js +10 -2
- package/dist/src/ui/tui/primitives/index.d.ts +0 -1
- package/dist/src/ui/tui/primitives/index.js +0 -1
- package/dist/src/ui/tui/router.js +1 -1
- package/dist/src/ui/tui/screen-registry.d.ts +0 -7
- package/dist/src/ui/tui/screen-registry.js +13 -4
- package/dist/src/ui/tui/screens/ActivationOptionsScreen.d.ts +2 -2
- package/dist/src/ui/tui/screens/ActivationOptionsScreen.js +8 -8
- package/dist/src/ui/tui/screens/AuthScreen.js +57 -27
- package/dist/src/ui/tui/screens/ChecklistScreen.d.ts +2 -12
- package/dist/src/ui/tui/screens/ChecklistScreen.js +22 -33
- package/dist/src/ui/tui/screens/DataIngestionCheckScreen.d.ts +3 -12
- package/dist/src/ui/tui/screens/DataIngestionCheckScreen.js +109 -39
- package/dist/src/ui/tui/screens/DataSetupScreen.d.ts +3 -3
- package/dist/src/ui/tui/screens/DataSetupScreen.js +17 -10
- package/dist/src/ui/tui/screens/IntroScreen.d.ts +5 -3
- package/dist/src/ui/tui/screens/IntroScreen.js +132 -41
- package/dist/src/ui/tui/screens/LoginScreen.d.ts +1 -1
- package/dist/src/ui/tui/screens/LoginScreen.js +4 -4
- package/dist/src/ui/tui/screens/LogoutScreen.d.ts +4 -2
- package/dist/src/ui/tui/screens/LogoutScreen.js +17 -5
- package/dist/src/ui/tui/screens/McpScreen.d.ts +4 -4
- package/dist/src/ui/tui/screens/McpScreen.js +25 -17
- package/dist/src/ui/tui/screens/OutageScreen.d.ts +1 -1
- package/dist/src/ui/tui/screens/OutageScreen.js +5 -5
- package/dist/src/ui/tui/screens/OutroScreen.d.ts +5 -0
- package/dist/src/ui/tui/screens/OutroScreen.js +21 -14
- package/dist/src/ui/tui/screens/RegionSelectScreen.js +15 -13
- package/dist/src/ui/tui/screens/RunScreen.d.ts +7 -5
- package/dist/src/ui/tui/screens/RunScreen.js +102 -157
- package/dist/src/ui/tui/screens/SettingsOverrideScreen.d.ts +1 -1
- package/dist/src/ui/tui/screens/SettingsOverrideScreen.js +6 -5
- package/dist/src/ui/tui/screens/SetupScreen.d.ts +1 -1
- package/dist/src/ui/tui/screens/SetupScreen.js +7 -7
- package/dist/src/ui/tui/screens/SlackScreen.d.ts +2 -2
- package/dist/src/ui/tui/screens/SlackScreen.js +60 -35
- package/dist/src/ui/tui/session-constants.d.ts +41 -0
- package/dist/src/ui/tui/session-constants.js +38 -0
- package/dist/src/ui/tui/start-tui.d.ts +3 -1
- package/dist/src/ui/tui/start-tui.js +14 -10
- package/dist/src/ui/tui/store.d.ts +2 -1
- package/dist/src/ui/tui/store.js +33 -7
- package/dist/src/ui/tui/styles.d.ts +75 -19
- package/dist/src/ui/tui/styles.js +101 -19
- package/dist/src/ui/tui/utils/classify-error.d.ts +14 -0
- package/dist/src/ui/tui/utils/classify-error.js +90 -0
- package/dist/src/ui/tui/utils/diagnostics.d.ts +21 -0
- package/dist/src/ui/tui/utils/diagnostics.js +72 -0
- package/dist/src/ui/tui/utils/with-retry.d.ts +12 -0
- package/dist/src/ui/tui/utils/with-retry.js +32 -0
- package/dist/src/ui/tui/utils/with-timeout.d.ts +10 -0
- package/dist/src/ui/tui/utils/with-timeout.js +24 -0
- package/dist/src/utils/ampli-settings.d.ts +1 -1
- package/dist/src/utils/ampli-settings.js +15 -5
- package/dist/src/utils/api-key-store.js +5 -5
- package/dist/src/utils/atomic-write.d.ts +15 -0
- package/dist/src/utils/atomic-write.js +34 -0
- package/dist/src/utils/setup-utils.js +2 -2
- package/dist/src/utils/token-refresh.d.ts +22 -0
- package/dist/src/utils/token-refresh.js +79 -0
- package/dist/src/utils/wizard-abort.js +6 -1
- package/package.json +6 -6
- package/skills/instrumentation/add-analytics-instrumentation/SKILL.md +142 -0
- package/skills/instrumentation/diff-intake/SKILL.md +128 -0
- package/skills/instrumentation/discover-analytics-patterns/SKILL.md +185 -0
- package/skills/instrumentation/discover-event-surfaces/SKILL.md +322 -0
- package/skills/instrumentation/discover-event-surfaces/references/best-practices.md +563 -0
- package/skills/instrumentation/instrument-events/SKILL.md +169 -0
- package/skills/instrumentation/instrument-events/references/best-practices.md +563 -0
- package/skills/integration/integration-android/SKILL.md +49 -0
- package/skills/integration/integration-android/references/EXAMPLE.md +1977 -0
- package/skills/integration/integration-android/references/amplitude-quickstart.md +1845 -0
- package/skills/integration/integration-android/references/analytics.md +1778 -0
- package/skills/integration/integration-android/references/basic-integration-1.0-begin.md +43 -0
- package/skills/integration/integration-android/references/basic-integration-1.1-edit.md +35 -0
- package/skills/integration/integration-android/references/basic-integration-1.2-revise.md +23 -0
- package/skills/integration/integration-android/references/basic-integration-1.3-conclude.md +57 -0
- package/skills/integration/integration-angular/SKILL.md +49 -0
- package/skills/integration/integration-angular/references/EXAMPLE.md +899 -0
- package/skills/integration/integration-angular/references/amplitude-quickstart.md +1845 -0
- package/skills/integration/integration-angular/references/basic-integration-1.0-begin.md +43 -0
- package/skills/integration/integration-angular/references/basic-integration-1.1-edit.md +35 -0
- package/skills/integration/integration-angular/references/basic-integration-1.2-revise.md +23 -0
- package/skills/integration/integration-angular/references/basic-integration-1.3-conclude.md +57 -0
- package/skills/integration/integration-angular/references/browser-sdk-2.md +4680 -0
- package/skills/integration/integration-astro-hybrid/SKILL.md +56 -0
- package/skills/integration/integration-astro-hybrid/references/EXAMPLE.md +1095 -0
- package/skills/integration/integration-astro-hybrid/references/amplitude-quickstart.md +1845 -0
- package/skills/integration/integration-astro-hybrid/references/basic-integration-1.0-begin.md +43 -0
- package/skills/integration/integration-astro-hybrid/references/basic-integration-1.1-edit.md +35 -0
- package/skills/integration/integration-astro-hybrid/references/basic-integration-1.2-revise.md +23 -0
- package/skills/integration/integration-astro-hybrid/references/basic-integration-1.3-conclude.md +57 -0
- package/skills/integration/integration-astro-hybrid/references/browser-sdk-2.md +4680 -0
- package/skills/integration/integration-astro-ssr/SKILL.md +52 -0
- package/skills/integration/integration-astro-ssr/references/EXAMPLE.md +1106 -0
- package/skills/integration/integration-astro-ssr/references/amplitude-quickstart.md +1845 -0
- package/skills/integration/integration-astro-ssr/references/basic-integration-1.0-begin.md +43 -0
- package/skills/integration/integration-astro-ssr/references/basic-integration-1.1-edit.md +35 -0
- package/skills/integration/integration-astro-ssr/references/basic-integration-1.2-revise.md +23 -0
- package/skills/integration/integration-astro-ssr/references/basic-integration-1.3-conclude.md +57 -0
- package/skills/integration/integration-astro-ssr/references/browser-sdk-2.md +4680 -0
- package/skills/integration/integration-astro-static/SKILL.md +49 -0
- package/skills/integration/integration-astro-static/references/EXAMPLE.md +910 -0
- package/skills/integration/integration-astro-static/references/amplitude-quickstart.md +1845 -0
- package/skills/integration/integration-astro-static/references/basic-integration-1.0-begin.md +43 -0
- package/skills/integration/integration-astro-static/references/basic-integration-1.1-edit.md +35 -0
- package/skills/integration/integration-astro-static/references/basic-integration-1.2-revise.md +23 -0
- package/skills/integration/integration-astro-static/references/basic-integration-1.3-conclude.md +57 -0
- package/skills/integration/integration-astro-static/references/browser-sdk-2.md +4680 -0
- package/skills/integration/integration-astro-view-transitions/SKILL.md +51 -0
- package/skills/integration/integration-astro-view-transitions/references/EXAMPLE.md +979 -0
- package/skills/integration/integration-astro-view-transitions/references/amplitude-quickstart.md +1845 -0
- package/skills/integration/integration-astro-view-transitions/references/basic-integration-1.0-begin.md +43 -0
- package/skills/integration/integration-astro-view-transitions/references/basic-integration-1.1-edit.md +35 -0
- package/skills/integration/integration-astro-view-transitions/references/basic-integration-1.2-revise.md +23 -0
- package/skills/integration/integration-astro-view-transitions/references/basic-integration-1.3-conclude.md +57 -0
- package/skills/integration/integration-astro-view-transitions/references/browser-sdk-2.md +4680 -0
- package/skills/integration/integration-django/SKILL.md +57 -0
- package/skills/integration/integration-django/references/EXAMPLE.md +1005 -0
- package/skills/integration/integration-django/references/amplitude-quickstart.md +1845 -0
- package/skills/integration/integration-django/references/basic-integration-1.0-begin.md +43 -0
- package/skills/integration/integration-django/references/basic-integration-1.1-edit.md +35 -0
- package/skills/integration/integration-django/references/basic-integration-1.2-revise.md +23 -0
- package/skills/integration/integration-django/references/basic-integration-1.3-conclude.md +57 -0
- package/skills/integration/integration-django/references/python.md +1424 -0
- package/skills/integration/integration-expo/SKILL.md +53 -0
- package/skills/integration/integration-expo/references/EXAMPLE.md +1291 -0
- package/skills/integration/integration-expo/references/amplitude-quickstart.md +1845 -0
- package/skills/integration/integration-expo/references/basic-integration-1.0-begin.md +43 -0
- package/skills/integration/integration-expo/references/basic-integration-1.1-edit.md +35 -0
- package/skills/integration/integration-expo/references/basic-integration-1.2-revise.md +23 -0
- package/skills/integration/integration-expo/references/basic-integration-1.3-conclude.md +57 -0
- package/skills/integration/integration-expo/references/react-native-sdk.md +2819 -0
- package/skills/integration/integration-fastapi/SKILL.md +57 -0
- package/skills/integration/integration-fastapi/references/EXAMPLE.md +1389 -0
- package/skills/integration/integration-fastapi/references/amplitude-quickstart.md +1845 -0
- package/skills/integration/integration-fastapi/references/basic-integration-1.0-begin.md +43 -0
- package/skills/integration/integration-fastapi/references/basic-integration-1.1-edit.md +35 -0
- package/skills/integration/integration-fastapi/references/basic-integration-1.2-revise.md +23 -0
- package/skills/integration/integration-fastapi/references/basic-integration-1.3-conclude.md +57 -0
- package/skills/integration/integration-fastapi/references/python.md +1424 -0
- package/skills/integration/integration-flask/SKILL.md +56 -0
- package/skills/integration/integration-flask/references/EXAMPLE.md +1130 -0
- package/skills/integration/integration-flask/references/amplitude-quickstart.md +1845 -0
- package/skills/integration/integration-flask/references/basic-integration-1.0-begin.md +43 -0
- package/skills/integration/integration-flask/references/basic-integration-1.1-edit.md +35 -0
- package/skills/integration/integration-flask/references/basic-integration-1.2-revise.md +23 -0
- package/skills/integration/integration-flask/references/basic-integration-1.3-conclude.md +57 -0
- package/skills/integration/integration-flask/references/python.md +1424 -0
- package/skills/integration/integration-javascript_node/SKILL.md +54 -0
- package/skills/integration/integration-javascript_node/references/EXAMPLE.md +365 -0
- package/skills/integration/integration-javascript_node/references/amplitude-quickstart.md +1845 -0
- package/skills/integration/integration-javascript_node/references/analytics.md +1778 -0
- package/skills/integration/integration-javascript_node/references/basic-integration-1.0-begin.md +43 -0
- package/skills/integration/integration-javascript_node/references/basic-integration-1.1-edit.md +35 -0
- package/skills/integration/integration-javascript_node/references/basic-integration-1.2-revise.md +23 -0
- package/skills/integration/integration-javascript_node/references/basic-integration-1.3-conclude.md +57 -0
- package/skills/integration/integration-javascript_web/SKILL.md +58 -0
- package/skills/integration/integration-javascript_web/references/EXAMPLE.md +451 -0
- package/skills/integration/integration-javascript_web/references/amplitude-quickstart.md +1845 -0
- package/skills/integration/integration-javascript_web/references/basic-integration-1.0-begin.md +43 -0
- package/skills/integration/integration-javascript_web/references/basic-integration-1.1-edit.md +35 -0
- package/skills/integration/integration-javascript_web/references/basic-integration-1.2-revise.md +23 -0
- package/skills/integration/integration-javascript_web/references/basic-integration-1.3-conclude.md +57 -0
- package/skills/integration/integration-javascript_web/references/browser-sdk-2.md +4680 -0
- package/skills/integration/integration-laravel/SKILL.md +52 -0
- package/skills/integration/integration-laravel/references/EXAMPLE.md +2039 -0
- package/skills/integration/integration-laravel/references/amplitude-quickstart.md +1845 -0
- package/skills/integration/integration-laravel/references/analytics.md +1778 -0
- package/skills/integration/integration-laravel/references/basic-integration-1.0-begin.md +43 -0
- package/skills/integration/integration-laravel/references/basic-integration-1.1-edit.md +35 -0
- package/skills/integration/integration-laravel/references/basic-integration-1.2-revise.md +23 -0
- package/skills/integration/integration-laravel/references/basic-integration-1.3-conclude.md +57 -0
- package/skills/integration/integration-nextjs-app-router/SKILL.md +54 -0
- package/skills/integration/integration-nextjs-app-router/references/EXAMPLE.md +673 -0
- package/skills/integration/integration-nextjs-app-router/references/amplitude-quickstart.md +1845 -0
- package/skills/integration/integration-nextjs-app-router/references/basic-integration-1.0-begin.md +43 -0
- package/skills/integration/integration-nextjs-app-router/references/basic-integration-1.1-edit.md +35 -0
- package/skills/integration/integration-nextjs-app-router/references/basic-integration-1.2-revise.md +23 -0
- package/skills/integration/integration-nextjs-app-router/references/basic-integration-1.3-conclude.md +57 -0
- package/skills/integration/integration-nextjs-app-router/references/browser-sdk-2.md +4680 -0
- package/skills/integration/integration-nextjs-pages-router/SKILL.md +54 -0
- package/skills/integration/integration-nextjs-pages-router/references/EXAMPLE.md +735 -0
- package/skills/integration/integration-nextjs-pages-router/references/amplitude-quickstart.md +1845 -0
- package/skills/integration/integration-nextjs-pages-router/references/basic-integration-1.0-begin.md +43 -0
- package/skills/integration/integration-nextjs-pages-router/references/basic-integration-1.1-edit.md +35 -0
- package/skills/integration/integration-nextjs-pages-router/references/basic-integration-1.2-revise.md +23 -0
- package/skills/integration/integration-nextjs-pages-router/references/basic-integration-1.3-conclude.md +57 -0
- package/skills/integration/integration-nextjs-pages-router/references/browser-sdk-2.md +4680 -0
- package/skills/integration/integration-nuxt-3.6/SKILL.md +46 -0
- package/skills/integration/integration-nuxt-3.6/references/EXAMPLE.md +8422 -0
- package/skills/integration/integration-nuxt-3.6/references/amplitude-quickstart.md +1845 -0
- package/skills/integration/integration-nuxt-3.6/references/basic-integration-1.0-begin.md +43 -0
- package/skills/integration/integration-nuxt-3.6/references/basic-integration-1.1-edit.md +35 -0
- package/skills/integration/integration-nuxt-3.6/references/basic-integration-1.2-revise.md +23 -0
- package/skills/integration/integration-nuxt-3.6/references/basic-integration-1.3-conclude.md +57 -0
- package/skills/integration/integration-nuxt-3.6/references/browser-sdk-2.md +4680 -0
- package/skills/integration/integration-nuxt-4/SKILL.md +46 -0
- package/skills/integration/integration-nuxt-4/references/EXAMPLE.md +8670 -0
- package/skills/integration/integration-nuxt-4/references/amplitude-quickstart.md +1845 -0
- package/skills/integration/integration-nuxt-4/references/basic-integration-1.0-begin.md +43 -0
- package/skills/integration/integration-nuxt-4/references/basic-integration-1.1-edit.md +35 -0
- package/skills/integration/integration-nuxt-4/references/basic-integration-1.2-revise.md +23 -0
- package/skills/integration/integration-nuxt-4/references/basic-integration-1.3-conclude.md +57 -0
- package/skills/integration/integration-nuxt-4/references/browser-sdk-2.md +4680 -0
- package/skills/integration/integration-python/SKILL.md +53 -0
- package/skills/integration/integration-python/references/EXAMPLE.md +445 -0
- package/skills/integration/integration-python/references/amplitude-quickstart.md +1845 -0
- package/skills/integration/integration-python/references/basic-integration-1.0-begin.md +43 -0
- package/skills/integration/integration-python/references/basic-integration-1.1-edit.md +35 -0
- package/skills/integration/integration-python/references/basic-integration-1.2-revise.md +23 -0
- package/skills/integration/integration-python/references/basic-integration-1.3-conclude.md +57 -0
- package/skills/integration/integration-python/references/python.md +1424 -0
- package/skills/integration/integration-react-native/SKILL.md +49 -0
- package/skills/integration/integration-react-native/references/EXAMPLE.md +2253 -0
- package/skills/integration/integration-react-native/references/amplitude-quickstart.md +1845 -0
- package/skills/integration/integration-react-native/references/basic-integration-1.0-begin.md +43 -0
- package/skills/integration/integration-react-native/references/basic-integration-1.1-edit.md +35 -0
- package/skills/integration/integration-react-native/references/basic-integration-1.2-revise.md +23 -0
- package/skills/integration/integration-react-native/references/basic-integration-1.3-conclude.md +57 -0
- package/skills/integration/integration-react-native/references/react-native-sdk.md +2819 -0
- package/skills/integration/integration-react-react-router-6/SKILL.md +53 -0
- package/skills/integration/integration-react-react-router-6/references/EXAMPLE.md +570 -0
- package/skills/integration/integration-react-react-router-6/references/amplitude-quickstart.md +1845 -0
- package/skills/integration/integration-react-react-router-6/references/basic-integration-1.0-begin.md +43 -0
- package/skills/integration/integration-react-react-router-6/references/basic-integration-1.1-edit.md +35 -0
- package/skills/integration/integration-react-react-router-6/references/basic-integration-1.2-revise.md +23 -0
- package/skills/integration/integration-react-react-router-6/references/basic-integration-1.3-conclude.md +57 -0
- package/skills/integration/integration-react-react-router-6/references/browser-sdk-2.md +4680 -0
- package/skills/integration/integration-react-react-router-7-data/SKILL.md +53 -0
- package/skills/integration/integration-react-react-router-7-data/references/EXAMPLE.md +830 -0
- package/skills/integration/integration-react-react-router-7-data/references/amplitude-quickstart.md +1845 -0
- package/skills/integration/integration-react-react-router-7-data/references/basic-integration-1.0-begin.md +43 -0
- package/skills/integration/integration-react-react-router-7-data/references/basic-integration-1.1-edit.md +35 -0
- package/skills/integration/integration-react-react-router-7-data/references/basic-integration-1.2-revise.md +23 -0
- package/skills/integration/integration-react-react-router-7-data/references/basic-integration-1.3-conclude.md +57 -0
- package/skills/integration/integration-react-react-router-7-data/references/browser-sdk-2.md +4680 -0
- package/skills/integration/integration-react-react-router-7-declarative/SKILL.md +53 -0
- package/skills/integration/integration-react-react-router-7-declarative/references/EXAMPLE.md +609 -0
- package/skills/integration/integration-react-react-router-7-declarative/references/amplitude-quickstart.md +1845 -0
- package/skills/integration/integration-react-react-router-7-declarative/references/basic-integration-1.0-begin.md +43 -0
- package/skills/integration/integration-react-react-router-7-declarative/references/basic-integration-1.1-edit.md +35 -0
- package/skills/integration/integration-react-react-router-7-declarative/references/basic-integration-1.2-revise.md +23 -0
- package/skills/integration/integration-react-react-router-7-declarative/references/basic-integration-1.3-conclude.md +57 -0
- package/skills/integration/integration-react-react-router-7-declarative/references/browser-sdk-2.md +4680 -0
- package/skills/integration/integration-react-react-router-7-framework/SKILL.md +53 -0
- package/skills/integration/integration-react-react-router-7-framework/references/EXAMPLE.md +1081 -0
- package/skills/integration/integration-react-react-router-7-framework/references/amplitude-quickstart.md +1845 -0
- package/skills/integration/integration-react-react-router-7-framework/references/basic-integration-1.0-begin.md +43 -0
- package/skills/integration/integration-react-react-router-7-framework/references/basic-integration-1.1-edit.md +35 -0
- package/skills/integration/integration-react-react-router-7-framework/references/basic-integration-1.2-revise.md +23 -0
- package/skills/integration/integration-react-react-router-7-framework/references/basic-integration-1.3-conclude.md +57 -0
- package/skills/integration/integration-react-react-router-7-framework/references/browser-sdk-2.md +4680 -0
- package/skills/integration/integration-react-tanstack-router-code-based/SKILL.md +57 -0
- package/skills/integration/integration-react-tanstack-router-code-based/references/EXAMPLE.md +659 -0
- package/skills/integration/integration-react-tanstack-router-code-based/references/amplitude-quickstart.md +1845 -0
- package/skills/integration/integration-react-tanstack-router-code-based/references/basic-integration-1.0-begin.md +43 -0
- package/skills/integration/integration-react-tanstack-router-code-based/references/basic-integration-1.1-edit.md +35 -0
- package/skills/integration/integration-react-tanstack-router-code-based/references/basic-integration-1.2-revise.md +23 -0
- package/skills/integration/integration-react-tanstack-router-code-based/references/basic-integration-1.3-conclude.md +57 -0
- package/skills/integration/integration-react-tanstack-router-code-based/references/browser-sdk-2.md +4680 -0
- package/skills/integration/integration-react-tanstack-router-file-based/SKILL.md +57 -0
- package/skills/integration/integration-react-tanstack-router-file-based/references/EXAMPLE.md +777 -0
- package/skills/integration/integration-react-tanstack-router-file-based/references/amplitude-quickstart.md +1845 -0
- package/skills/integration/integration-react-tanstack-router-file-based/references/basic-integration-1.0-begin.md +43 -0
- package/skills/integration/integration-react-tanstack-router-file-based/references/basic-integration-1.1-edit.md +35 -0
- package/skills/integration/integration-react-tanstack-router-file-based/references/basic-integration-1.2-revise.md +23 -0
- package/skills/integration/integration-react-tanstack-router-file-based/references/basic-integration-1.3-conclude.md +57 -0
- package/skills/integration/integration-react-tanstack-router-file-based/references/browser-sdk-2.md +4680 -0
- package/skills/integration/integration-react-vite/SKILL.md +53 -0
- package/skills/integration/integration-react-vite/references/EXAMPLE.md +542 -0
- package/skills/integration/integration-react-vite/references/amplitude-quickstart.md +1845 -0
- package/skills/integration/integration-react-vite/references/basic-integration-1.0-begin.md +43 -0
- package/skills/integration/integration-react-vite/references/basic-integration-1.1-edit.md +35 -0
- package/skills/integration/integration-react-vite/references/basic-integration-1.2-revise.md +23 -0
- package/skills/integration/integration-react-vite/references/basic-integration-1.3-conclude.md +57 -0
- package/skills/integration/integration-react-vite/references/browser-sdk-2.md +4680 -0
- package/skills/integration/integration-ruby/SKILL.md +50 -0
- package/skills/integration/integration-ruby/references/EXAMPLE.md +420 -0
- package/skills/integration/integration-ruby/references/amplitude-quickstart.md +1845 -0
- package/skills/integration/integration-ruby/references/analytics.md +1778 -0
- package/skills/integration/integration-ruby/references/basic-integration-1.0-begin.md +43 -0
- package/skills/integration/integration-ruby/references/basic-integration-1.1-edit.md +35 -0
- package/skills/integration/integration-ruby/references/basic-integration-1.2-revise.md +23 -0
- package/skills/integration/integration-ruby/references/basic-integration-1.3-conclude.md +57 -0
- package/skills/integration/integration-ruby-on-rails/SKILL.md +55 -0
- package/skills/integration/integration-ruby-on-rails/references/EXAMPLE.md +1013 -0
- package/skills/integration/integration-ruby-on-rails/references/amplitude-quickstart.md +1845 -0
- package/skills/integration/integration-ruby-on-rails/references/analytics.md +1778 -0
- package/skills/integration/integration-ruby-on-rails/references/basic-integration-1.0-begin.md +43 -0
- package/skills/integration/integration-ruby-on-rails/references/basic-integration-1.1-edit.md +35 -0
- package/skills/integration/integration-ruby-on-rails/references/basic-integration-1.2-revise.md +23 -0
- package/skills/integration/integration-ruby-on-rails/references/basic-integration-1.3-conclude.md +57 -0
- package/skills/integration/integration-sveltekit/SKILL.md +47 -0
- package/skills/integration/integration-sveltekit/references/EXAMPLE.md +14121 -0
- package/skills/integration/integration-sveltekit/references/amplitude-quickstart.md +1845 -0
- package/skills/integration/integration-sveltekit/references/basic-integration-1.0-begin.md +43 -0
- package/skills/integration/integration-sveltekit/references/basic-integration-1.1-edit.md +35 -0
- package/skills/integration/integration-sveltekit/references/basic-integration-1.2-revise.md +23 -0
- package/skills/integration/integration-sveltekit/references/basic-integration-1.3-conclude.md +57 -0
- package/skills/integration/integration-sveltekit/references/browser-sdk-2.md +4680 -0
- package/skills/integration/integration-swift/SKILL.md +49 -0
- package/skills/integration/integration-swift/references/EXAMPLE.md +660 -0
- package/skills/integration/integration-swift/references/amplitude-quickstart.md +1845 -0
- package/skills/integration/integration-swift/references/analytics.md +1778 -0
- package/skills/integration/integration-swift/references/basic-integration-1.0-begin.md +43 -0
- package/skills/integration/integration-swift/references/basic-integration-1.1-edit.md +35 -0
- package/skills/integration/integration-swift/references/basic-integration-1.2-revise.md +23 -0
- package/skills/integration/integration-swift/references/basic-integration-1.3-conclude.md +57 -0
- package/skills/integration/integration-tanstack-start/SKILL.md +58 -0
- package/skills/integration/integration-tanstack-start/references/EXAMPLE.md +998 -0
- package/skills/integration/integration-tanstack-start/references/amplitude-quickstart.md +1845 -0
- package/skills/integration/integration-tanstack-start/references/basic-integration-1.0-begin.md +43 -0
- package/skills/integration/integration-tanstack-start/references/basic-integration-1.1-edit.md +35 -0
- package/skills/integration/integration-tanstack-start/references/basic-integration-1.2-revise.md +23 -0
- package/skills/integration/integration-tanstack-start/references/basic-integration-1.3-conclude.md +57 -0
- package/skills/integration/integration-tanstack-start/references/browser-sdk-2.md +4680 -0
- package/skills/integration/integration-vue-3/SKILL.md +46 -0
- package/skills/integration/integration-vue-3/references/EXAMPLE.md +846 -0
- package/skills/integration/integration-vue-3/references/amplitude-quickstart.md +1845 -0
- package/skills/integration/integration-vue-3/references/basic-integration-1.0-begin.md +43 -0
- package/skills/integration/integration-vue-3/references/basic-integration-1.1-edit.md +35 -0
- package/skills/integration/integration-vue-3/references/basic-integration-1.2-revise.md +23 -0
- package/skills/integration/integration-vue-3/references/basic-integration-1.3-conclude.md +57 -0
- package/skills/integration/integration-vue-3/references/browser-sdk-2.md +4680 -0
- package/skills/taxonomy/amplitude-quickstart-taxonomy-agent/SKILL.md +228 -0
- package/dist/src/ui/tui/components/TitleBar.d.ts +0 -8
- package/dist/src/ui/tui/components/TitleBar.js +0 -27
- package/dist/src/ui/tui/primitives/KagiSmallWebViewer.d.ts +0 -7
- package/dist/src/ui/tui/primitives/KagiSmallWebViewer.js +0 -101
- package/dist/src/utils/anthropic-status.d.ts +0 -17
- package/dist/src/utils/anthropic-status.js +0 -51
|
@@ -1,18 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* ChecklistScreen — Post-setup checklist for first chart and
|
|
2
|
+
* ChecklistScreen — Post-setup checklist for first chart and dashboard.
|
|
3
3
|
*
|
|
4
4
|
* Shown after DataIngestionCheckScreen confirms events are flowing.
|
|
5
|
-
*
|
|
6
|
-
* Items:
|
|
7
|
-
* [ ] Taxonomy agent — @todo (in progress in parallel work)
|
|
8
|
-
* [ ] First chart — opens Amplitude in browser; marks complete on return
|
|
9
|
-
* [ ] First dashboard — unlocked after chart; opens Amplitude in browser
|
|
10
|
-
*
|
|
11
|
-
* The user can "Continue" at any time to skip remaining items and advance
|
|
12
|
-
* to Slack setup.
|
|
13
|
-
*
|
|
14
|
-
* Chart/dashboard creation via direct GraphQL API call is planned as a
|
|
15
|
-
* follow-up; for now the action opens the Amplitude web UI.
|
|
5
|
+
* Celebration header: "Your events are flowing!" in success green.
|
|
16
6
|
*/
|
|
17
7
|
import type { WizardStore } from '../store.js';
|
|
18
8
|
interface ChecklistScreenProps {
|
|
@@ -1,47 +1,36 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
/**
|
|
3
|
-
* ChecklistScreen — Post-setup checklist for first chart and
|
|
3
|
+
* ChecklistScreen — Post-setup checklist for first chart and dashboard.
|
|
4
4
|
*
|
|
5
5
|
* Shown after DataIngestionCheckScreen confirms events are flowing.
|
|
6
|
-
*
|
|
7
|
-
* Items:
|
|
8
|
-
* [ ] Taxonomy agent — @todo (in progress in parallel work)
|
|
9
|
-
* [ ] First chart — opens Amplitude in browser; marks complete on return
|
|
10
|
-
* [ ] First dashboard — unlocked after chart; opens Amplitude in browser
|
|
11
|
-
*
|
|
12
|
-
* The user can "Continue" at any time to skip remaining items and advance
|
|
13
|
-
* to Slack setup.
|
|
14
|
-
*
|
|
15
|
-
* Chart/dashboard creation via direct GraphQL API call is planned as a
|
|
16
|
-
* follow-up; for now the action opens the Amplitude web UI.
|
|
6
|
+
* Celebration header: "Your events are flowing!" in success green.
|
|
17
7
|
*/
|
|
18
8
|
import { Box, Text } from 'ink';
|
|
19
|
-
import { useEffect, useState
|
|
20
|
-
import {
|
|
9
|
+
import { useEffect, useState } from 'react';
|
|
10
|
+
import { useWizardStore } from '../hooks/useWizardStore.js';
|
|
21
11
|
import { Colors, Icons } from '../styles.js';
|
|
12
|
+
import { PickerMenu } from '../primitives/index.js';
|
|
22
13
|
import { OUTBOUND_URLS } from '../../../lib/constants.js';
|
|
23
14
|
import opn from 'opn';
|
|
24
15
|
import { analytics } from '../../../utils/analytics.js';
|
|
25
16
|
import { fetchOwnedDashboards } from '../../../lib/api.js';
|
|
26
17
|
export const ChecklistScreen = ({ store }) => {
|
|
27
|
-
|
|
18
|
+
useWizardStore(store);
|
|
28
19
|
const { session } = store;
|
|
29
20
|
const { checklistChartComplete, checklistDashboardComplete, region, selectedOrgId, } = session;
|
|
30
21
|
const [opening, setOpening] = useState(null);
|
|
31
22
|
const zone = (region ?? 'us');
|
|
32
|
-
// On mount, detect
|
|
33
|
-
//
|
|
34
|
-
// Detection is org-scoped (Thunder has no project-level listing API); for a
|
|
35
|
-
// new-project user this is equivalent.
|
|
23
|
+
// On mount, detect charts/dashboards the user already owns so returning
|
|
24
|
+
// users see the correct state without re-doing completed steps.
|
|
36
25
|
useEffect(() => {
|
|
37
26
|
const { credentials, selectedOrgId, checklistChartComplete, checklistDashboardComplete, } = store.session;
|
|
38
27
|
if (!credentials || !selectedOrgId)
|
|
39
28
|
return;
|
|
40
29
|
if (checklistChartComplete && checklistDashboardComplete)
|
|
41
30
|
return;
|
|
42
|
-
const
|
|
31
|
+
const accessToken = credentials.accessToken;
|
|
43
32
|
const sessionZone = (store.session.region ?? 'us');
|
|
44
|
-
fetchOwnedDashboards(
|
|
33
|
+
fetchOwnedDashboards(accessToken, sessionZone, selectedOrgId)
|
|
45
34
|
.then(({ hasCharts, hasDashboards }) => {
|
|
46
35
|
if (hasCharts)
|
|
47
36
|
store.setChecklistChartComplete();
|
|
@@ -87,36 +76,36 @@ export const ChecklistScreen = ({ store }) => {
|
|
|
87
76
|
{
|
|
88
77
|
value: 'chart',
|
|
89
78
|
label: checklistChartComplete
|
|
90
|
-
? `${Icons.
|
|
91
|
-
: `${Icons.
|
|
79
|
+
? `${Icons.checkmark} Build a chart — done`
|
|
80
|
+
: `${Icons.bulletOpen} Build your first chart`,
|
|
92
81
|
hint: checklistChartComplete ? undefined : 'opens in browser',
|
|
93
82
|
disabled: checklistChartComplete,
|
|
94
83
|
},
|
|
95
84
|
{
|
|
96
85
|
value: 'dashboard',
|
|
97
86
|
label: checklistDashboardComplete
|
|
98
|
-
? `${Icons.
|
|
99
|
-
:
|
|
100
|
-
? `${Icons.squareOpen} Create your first dashboard`
|
|
101
|
-
: `${Icons.squareOpen} Create your first dashboard`,
|
|
87
|
+
? `${Icons.checkmark} Create a dashboard — done`
|
|
88
|
+
: `${Icons.bulletOpen} Create your first dashboard`,
|
|
102
89
|
hint: checklistDashboardComplete
|
|
103
90
|
? undefined
|
|
104
91
|
: checklistChartComplete
|
|
105
92
|
? 'opens in browser'
|
|
106
|
-
: '
|
|
93
|
+
: 'build a chart first',
|
|
107
94
|
disabled: checklistDashboardComplete || !checklistChartComplete,
|
|
108
95
|
},
|
|
109
96
|
{
|
|
110
97
|
value: 'taxonomy',
|
|
111
|
-
label: `${Icons.
|
|
98
|
+
label: `${Icons.bulletOpen} Set up taxonomy`,
|
|
112
99
|
hint: 'coming soon',
|
|
113
100
|
disabled: true,
|
|
114
101
|
},
|
|
115
102
|
{
|
|
116
103
|
value: 'continue',
|
|
117
|
-
label: allDone
|
|
118
|
-
|
|
104
|
+
label: allDone
|
|
105
|
+
? `${Icons.arrowRight} Done — continue`
|
|
106
|
+
: `${Icons.arrowRight} Skip and continue`,
|
|
107
|
+
hint: allDone ? undefined : 'you can always do these later',
|
|
119
108
|
},
|
|
120
109
|
];
|
|
121
|
-
return (_jsxs(Box, { flexDirection: "column", flexGrow: 1, paddingX: 2, paddingY: 1, children: [
|
|
110
|
+
return (_jsxs(Box, { flexDirection: "column", flexGrow: 1, paddingX: 2, paddingY: 1, children: [_jsxs(Box, { marginBottom: 1, flexDirection: "column", children: [_jsxs(Text, { bold: true, color: Colors.success, children: [Icons.checkmark, " Your events are flowing!"] }), _jsx(Text, { color: Colors.body, children: "Here's what to explore next:" })] }), opening && (_jsx(Box, { marginBottom: 1, children: _jsxs(Text, { color: Colors.muted, children: ["Opening Amplitude in your browser", Icons.ellipsis] }) })), _jsx(PickerMenu, { options: options, onSelect: (v) => handleSelect(v) })] }));
|
|
122
111
|
};
|
|
@@ -1,20 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* DataIngestionCheckScreen — "
|
|
2
|
+
* DataIngestionCheckScreen — "Start your app and trigger some actions" polling screen.
|
|
3
3
|
*
|
|
4
4
|
* Shown after MCP setup. Polls the activation API every 30 seconds until the
|
|
5
5
|
* project starts receiving events, then auto-advances to the Checklist.
|
|
6
6
|
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
* The user can exit and come back later — next time through, DataSetupScreen
|
|
11
|
-
* will re-check activation and this screen will confirm immediately if events
|
|
12
|
-
* have arrived.
|
|
13
|
-
*
|
|
14
|
-
* When the activation API is unavailable (e.g. external users hitting Thunder
|
|
15
|
-
* endpoints that require browser session auth), the screen falls back to showing
|
|
16
|
-
* cataloged event types from the data API so the user can verify events arrived,
|
|
17
|
-
* then manually confirms with Enter.
|
|
7
|
+
* Active guidance as prominent instruction with framework-aware hint.
|
|
8
|
+
* BrailleSpinner while waiting. Success celebration when events arrive.
|
|
18
9
|
*/
|
|
19
10
|
import type { WizardStore } from '../store.js';
|
|
20
11
|
interface DataIngestionCheckScreenProps {
|
|
@@ -1,75 +1,119 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
/**
|
|
3
|
-
* DataIngestionCheckScreen — "
|
|
3
|
+
* DataIngestionCheckScreen — "Start your app and trigger some actions" polling screen.
|
|
4
4
|
*
|
|
5
5
|
* Shown after MCP setup. Polls the activation API every 30 seconds until the
|
|
6
6
|
* project starts receiving events, then auto-advances to the Checklist.
|
|
7
7
|
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* The user can exit and come back later — next time through, DataSetupScreen
|
|
12
|
-
* will re-check activation and this screen will confirm immediately if events
|
|
13
|
-
* have arrived.
|
|
14
|
-
*
|
|
15
|
-
* When the activation API is unavailable (e.g. external users hitting Thunder
|
|
16
|
-
* endpoints that require browser session auth), the screen falls back to showing
|
|
17
|
-
* cataloged event types from the data API so the user can verify events arrived,
|
|
18
|
-
* then manually confirms with Enter.
|
|
8
|
+
* Active guidance as prominent instruction with framework-aware hint.
|
|
9
|
+
* BrailleSpinner while waiting. Success celebration when events arrive.
|
|
19
10
|
*/
|
|
20
11
|
import { Box, Text } from 'ink';
|
|
21
|
-
import { useEffect, useRef, useState
|
|
12
|
+
import { useEffect, useRef, useState } from 'react';
|
|
13
|
+
import { useWizardStore } from '../hooks/useWizardStore.js';
|
|
22
14
|
import { Colors, Icons } from '../styles.js';
|
|
15
|
+
import { BrailleSpinner } from '../components/BrailleSpinner.js';
|
|
16
|
+
import { useScreenInput } from '../hooks/useScreenInput.js';
|
|
23
17
|
import { fetchProjectActivationStatus, fetchWorkspaceEventTypes, } from '../../../lib/api.js';
|
|
18
|
+
import { Integration } from '../../../lib/constants.js';
|
|
19
|
+
import { OutroKind } from '../session-constants.js';
|
|
24
20
|
import { logToFile } from '../../../utils/debug.js';
|
|
25
|
-
import { OutroKind } from '../../../lib/wizard-session.js';
|
|
26
|
-
import { useScreenInput } from '../hooks/useScreenInput.js';
|
|
27
21
|
const POLL_INTERVAL_MS = 30_000;
|
|
28
22
|
const MAX_EVENTS_SHOWN = 8;
|
|
23
|
+
const CELEBRATION_DELAY_MS = 3_000;
|
|
24
|
+
/** Framework-specific hints for what the user should do to generate events. */
|
|
25
|
+
const FRAMEWORK_HINTS = {
|
|
26
|
+
[Integration.nextjs]: 'Visit localhost:3000 and click around',
|
|
27
|
+
[Integration.vue]: 'Visit localhost:5173 and interact with your app',
|
|
28
|
+
[Integration.reactRouter]: 'Visit localhost:3000 and navigate between pages',
|
|
29
|
+
[Integration.django]: 'Visit localhost:8000 and browse a few pages',
|
|
30
|
+
[Integration.flask]: 'Visit localhost:5000 and trigger some requests',
|
|
31
|
+
[Integration.fastapi]: 'Visit localhost:8000/docs and try some endpoints',
|
|
32
|
+
[Integration.reactNative]: 'Open your app on a device or emulator and tap around',
|
|
33
|
+
[Integration.swift]: 'Build and run your app, then interact with it',
|
|
34
|
+
[Integration.android]: 'Build and run your app, then interact with it',
|
|
35
|
+
[Integration.flutter]: 'Run your app and navigate through a few screens',
|
|
36
|
+
};
|
|
29
37
|
export const DataIngestionCheckScreen = ({ store, }) => {
|
|
30
|
-
|
|
38
|
+
useWizardStore(store);
|
|
31
39
|
const { session } = store;
|
|
32
|
-
const {
|
|
40
|
+
const { activationLevel } = session;
|
|
33
41
|
const pollingRef = useRef(null);
|
|
42
|
+
const celebrationTimerRef = useRef(null);
|
|
34
43
|
const [apiUnavailable, setApiUnavailable] = useState(false);
|
|
35
44
|
const [eventTypes, setEventTypes] = useState(null);
|
|
45
|
+
const [celebrating, setCelebrating] = useState(false);
|
|
46
|
+
const [celebrationReady, setCelebrationReady] = useState(false);
|
|
47
|
+
const [arrivedEvents, setArrivedEvents] = useState([]);
|
|
48
|
+
const [lastChecked, setLastChecked] = useState(null);
|
|
49
|
+
const [secondsSince, setSecondsSince] = useState(0);
|
|
50
|
+
const [pollingStartTime] = useState(() => Date.now());
|
|
51
|
+
const [elapsedSeconds, setElapsedSeconds] = useState(0);
|
|
52
|
+
/** Confirm ingestion with a celebration, then wait for user to press Enter. */
|
|
53
|
+
function confirmWithCelebration(events) {
|
|
54
|
+
if (pollingRef.current !== null)
|
|
55
|
+
clearInterval(pollingRef.current);
|
|
56
|
+
setCelebrating(true);
|
|
57
|
+
if (events && events.length > 0)
|
|
58
|
+
setArrivedEvents(events);
|
|
59
|
+
celebrationTimerRef.current = setTimeout(() => {
|
|
60
|
+
setCelebrationReady(true);
|
|
61
|
+
}, CELEBRATION_DELAY_MS);
|
|
62
|
+
}
|
|
36
63
|
async function checkIngestion() {
|
|
37
|
-
|
|
64
|
+
// Read from store.session at call time to avoid stale closures
|
|
65
|
+
const currentSession = store.session;
|
|
66
|
+
const currentCredentials = currentSession.credentials;
|
|
67
|
+
const currentRegion = currentSession.region;
|
|
68
|
+
if (!currentCredentials) {
|
|
38
69
|
setApiUnavailable(true);
|
|
39
70
|
return;
|
|
40
71
|
}
|
|
41
|
-
|
|
42
|
-
const appId = credentials.projectId || session.selectedWorkspaceId;
|
|
72
|
+
const appId = currentCredentials.projectId || currentSession.selectedWorkspaceId;
|
|
43
73
|
if (!appId) {
|
|
44
74
|
setApiUnavailable(true);
|
|
45
75
|
return;
|
|
46
76
|
}
|
|
47
|
-
const zone = (
|
|
48
|
-
const
|
|
77
|
+
const zone = (currentRegion ?? 'us');
|
|
78
|
+
const dataApiToken = currentCredentials.idToken ?? currentCredentials.accessToken;
|
|
79
|
+
if (!currentSession.selectedOrgId) {
|
|
80
|
+
setApiUnavailable(true);
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
49
83
|
try {
|
|
50
|
-
const status = await fetchProjectActivationStatus(
|
|
84
|
+
const status = await fetchProjectActivationStatus({
|
|
85
|
+
accessToken: currentCredentials.accessToken,
|
|
86
|
+
zone,
|
|
87
|
+
appId,
|
|
88
|
+
orgId: currentSession.selectedOrgId,
|
|
89
|
+
});
|
|
90
|
+
setLastChecked(Date.now());
|
|
51
91
|
logToFile(`[DataIngestionCheck] poll result: hasAnyEvents=${status.hasAnyEvents} hasDetSource=${status.hasDetSource}`);
|
|
52
92
|
if (status.hasAnyEvents) {
|
|
53
|
-
|
|
93
|
+
confirmWithCelebration();
|
|
54
94
|
return;
|
|
55
95
|
}
|
|
56
|
-
//
|
|
57
|
-
//
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
const catalogEvents = await fetchWorkspaceEventTypes(idToken, zone, session.selectedOrgId, session.selectedWorkspaceId);
|
|
96
|
+
// Activation API only checks autocapture events. Fall back to the
|
|
97
|
+
// event catalog which includes all event types.
|
|
98
|
+
if (currentSession.selectedOrgId && currentSession.selectedWorkspaceId) {
|
|
99
|
+
const catalogEvents = await fetchWorkspaceEventTypes(dataApiToken, zone, currentSession.selectedOrgId, currentSession.selectedWorkspaceId);
|
|
61
100
|
logToFile(`[DataIngestionCheck] catalog fallback: ${catalogEvents.length} event types found`);
|
|
62
101
|
if (catalogEvents.length > 0) {
|
|
63
|
-
|
|
102
|
+
confirmWithCelebration(catalogEvents);
|
|
64
103
|
}
|
|
65
104
|
}
|
|
66
105
|
}
|
|
67
106
|
catch (err) {
|
|
68
107
|
logToFile(`[DataIngestionCheck] poll error: ${err instanceof Error ? err.message : String(err)}`);
|
|
108
|
+
// Clear the polling interval so it stops firing against the failing API
|
|
109
|
+
if (pollingRef.current !== null) {
|
|
110
|
+
clearInterval(pollingRef.current);
|
|
111
|
+
pollingRef.current = null;
|
|
112
|
+
}
|
|
69
113
|
setApiUnavailable(true);
|
|
70
|
-
// Fetch cataloged event types
|
|
71
|
-
if (
|
|
72
|
-
fetchWorkspaceEventTypes(
|
|
114
|
+
// Fetch cataloged event types as a proxy for "events arrived"
|
|
115
|
+
if (currentSession.selectedOrgId && currentSession.selectedWorkspaceId) {
|
|
116
|
+
fetchWorkspaceEventTypes(dataApiToken, zone, currentSession.selectedOrgId, currentSession.selectedWorkspaceId)
|
|
73
117
|
.then((names) => {
|
|
74
118
|
setEventTypes(names);
|
|
75
119
|
})
|
|
@@ -88,7 +132,6 @@ export const DataIngestionCheckScreen = ({ store, }) => {
|
|
|
88
132
|
store.setDataIngestionConfirmed();
|
|
89
133
|
return;
|
|
90
134
|
}
|
|
91
|
-
// Run once immediately, then set up the interval
|
|
92
135
|
void checkIngestion();
|
|
93
136
|
pollingRef.current = setInterval(() => {
|
|
94
137
|
void checkIngestion();
|
|
@@ -97,15 +140,35 @@ export const DataIngestionCheckScreen = ({ store, }) => {
|
|
|
97
140
|
if (pollingRef.current !== null) {
|
|
98
141
|
clearInterval(pollingRef.current);
|
|
99
142
|
}
|
|
143
|
+
if (celebrationTimerRef.current !== null) {
|
|
144
|
+
clearTimeout(celebrationTimerRef.current);
|
|
145
|
+
}
|
|
100
146
|
};
|
|
101
147
|
}, []);
|
|
148
|
+
// Update seconds-since counter and elapsed timer — every 5s to reduce re-renders
|
|
149
|
+
useEffect(() => {
|
|
150
|
+
const id = setInterval(() => {
|
|
151
|
+
if (lastChecked) {
|
|
152
|
+
setSecondsSince(Math.floor((Date.now() - lastChecked) / 1000));
|
|
153
|
+
}
|
|
154
|
+
setElapsedSeconds(Math.floor((Date.now() - pollingStartTime) / 1000));
|
|
155
|
+
}, 5000);
|
|
156
|
+
return () => clearInterval(id);
|
|
157
|
+
}, [lastChecked, pollingStartTime]);
|
|
102
158
|
useScreenInput((_char, key) => {
|
|
159
|
+
// During celebration, wait for Enter to advance
|
|
160
|
+
if (celebrating) {
|
|
161
|
+
if (celebrationReady && key.return) {
|
|
162
|
+
store.setDataIngestionConfirmed();
|
|
163
|
+
}
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
103
166
|
if (key.escape || _char === 'q') {
|
|
104
167
|
if (pollingRef.current !== null)
|
|
105
168
|
clearInterval(pollingRef.current);
|
|
106
169
|
store.setOutroData({
|
|
107
170
|
kind: OutroKind.Cancel,
|
|
108
|
-
message: 'Come back once your app is running and sending events. Your SDK is installed —
|
|
171
|
+
message: 'Come back once your app is running and sending events. Your SDK is installed — just trigger some actions.',
|
|
109
172
|
});
|
|
110
173
|
return;
|
|
111
174
|
}
|
|
@@ -116,9 +179,16 @@ export const DataIngestionCheckScreen = ({ store, }) => {
|
|
|
116
179
|
store.setDataIngestionConfirmed();
|
|
117
180
|
}
|
|
118
181
|
});
|
|
182
|
+
// Derive framework-specific hint
|
|
183
|
+
const frameworkHint = session.integration
|
|
184
|
+
? FRAMEWORK_HINTS[session.integration]
|
|
185
|
+
: undefined;
|
|
119
186
|
const shown = eventTypes?.slice(0, MAX_EVENTS_SHOWN) ?? [];
|
|
120
187
|
const overflow = (eventTypes?.length ?? 0) - MAX_EVENTS_SHOWN;
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
188
|
+
// ── Celebration state ──────────────────────────────────────────────────
|
|
189
|
+
if (celebrating) {
|
|
190
|
+
return (_jsxs(Box, { flexDirection: "column", flexGrow: 1, paddingX: 2, paddingY: 1, children: [_jsxs(Text, { bold: true, color: Colors.success, children: [Icons.checkmark, " Events detected!"] }), arrivedEvents.length > 0 && (_jsxs(Box, { flexDirection: "column", marginTop: 1, marginLeft: 2, children: [arrivedEvents.slice(0, MAX_EVENTS_SHOWN).map((name) => (_jsxs(Text, { color: Colors.success, children: [Icons.diamond, " ", name] }, name))), arrivedEvents.length > MAX_EVENTS_SHOWN && (_jsxs(Text, { color: Colors.muted, children: [Icons.ellipsis, " and ", arrivedEvents.length - MAX_EVENTS_SHOWN, ' ', "more"] }))] })), _jsx(Box, { marginTop: 1, children: celebrationReady ? (_jsxs(Box, { gap: 1, children: [_jsx(Text, { color: Colors.muted, children: "[" }), _jsx(Text, { color: Colors.body, bold: true, children: "Enter" }), _jsx(Text, { color: Colors.muted, children: "] Continue" })] })) : (_jsxs(Text, { color: Colors.body, children: ["Verifying", Icons.ellipsis] })) })] }));
|
|
191
|
+
}
|
|
192
|
+
// ── Waiting state ──────────────────────────────────────────────────────
|
|
193
|
+
return (_jsxs(Box, { flexDirection: "column", flexGrow: 1, paddingX: 2, paddingY: 1, children: [_jsx(Box, { marginBottom: 1, children: _jsx(Text, { bold: true, color: Colors.heading, children: "Start your app and trigger some user actions" }) }), frameworkHint && (_jsx(Box, { marginBottom: 1, children: _jsxs(Text, { color: Colors.accent, children: [Icons.arrowRight, " ", frameworkHint] }) })), _jsx(Text, { color: Colors.body, children: "Your SDK is installed. Once you interact with your app, events will start flowing into Amplitude." }), !apiUnavailable && (_jsxs(Box, { marginTop: 1, gap: 1, alignItems: "center", children: [_jsx(BrailleSpinner, { color: Colors.accent }), _jsxs(Text, { color: Colors.secondary, children: ["Listening for events", Icons.ellipsis, lastChecked && (_jsxs(Text, { color: Colors.muted, children: [" (checked ", secondsSince, "s ago)"] }))] })] })), !apiUnavailable && !celebrating && elapsedSeconds >= 60 && (_jsxs(Box, { flexDirection: "column", marginTop: 1, marginLeft: 2, children: [_jsxs(Text, { color: Colors.secondary, children: [Icons.arrowRight, " Make sure your dev server is running"] }), elapsedSeconds >= 90 && (_jsxs(Text, { color: Colors.secondary, children: [Icons.arrowRight, " Try visiting your app and clicking around"] })), elapsedSeconds >= 120 && (_jsxs(Text, { color: Colors.secondary, children: [Icons.arrowRight, " Check your terminal for errors \u2014 the SDK may not have initialized"] }))] })), apiUnavailable && eventTypes === null && (_jsxs(Box, { marginTop: 1, gap: 1, alignItems: "center", children: [_jsx(BrailleSpinner, { color: Colors.accent }), _jsxs(Text, { color: Colors.secondary, children: ["Checking your event catalog", Icons.ellipsis] })] })), apiUnavailable && eventTypes !== null && eventTypes.length > 0 && (_jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsx(Text, { color: Colors.secondary, children: "Events cataloged in your workspace:" }), _jsxs(Box, { flexDirection: "column", marginTop: 1, marginLeft: 2, children: [shown.map((name) => (_jsxs(Box, { gap: 1, children: [_jsx(Text, { color: Colors.success, children: Icons.diamond }), _jsx(Text, { color: Colors.body, children: name })] }, name))), overflow > 0 && (_jsxs(Text, { color: Colors.muted, children: [Icons.ellipsis, " and ", overflow, " more"] }))] })] })), apiUnavailable && eventTypes !== null && eventTypes.length === 0 && (_jsxs(Box, { marginTop: 1, gap: 1, alignItems: "center", children: [_jsx(BrailleSpinner, { color: Colors.accent }), _jsxs(Text, { color: Colors.secondary, children: ["Waiting for events", Icons.ellipsis] })] })), _jsxs(Box, { marginTop: 2, gap: 2, children: [apiUnavailable && (_jsxs(Box, { children: [_jsx(Text, { color: Colors.muted, children: "[" }), _jsx(Text, { color: Colors.body, bold: true, children: "Enter" }), _jsxs(Text, { color: Colors.muted, children: ["] ", eventTypes && eventTypes.length > 0 ? 'Continue' : 'Confirm'] })] })), _jsxs(Box, { children: [_jsx(Text, { color: Colors.muted, children: "[" }), _jsx(Text, { color: Colors.body, bold: true, children: "q" }), _jsx(Text, { color: Colors.muted, children: "] Exit and resume later" })] })] })] }));
|
|
124
194
|
};
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
* DataSetupScreen — Checks whether the connected Amplitude project has event data.
|
|
3
3
|
*
|
|
4
4
|
* Calls the Amplitude Data API to determine the project's activation level:
|
|
5
|
-
* 'full' — 50+ events / well-established data
|
|
6
|
-
* 'partial' — snippet installed but few events
|
|
7
|
-
* 'none' — no events, no snippet
|
|
5
|
+
* 'full' — 50+ events / well-established data
|
|
6
|
+
* 'partial' — snippet installed but few events
|
|
7
|
+
* 'none' — no events, no snippet
|
|
8
8
|
*
|
|
9
9
|
* The router's isComplete predicate (projectHasData !== null) advances past
|
|
10
10
|
* this screen automatically once the value is set.
|
|
@@ -1,23 +1,25 @@
|
|
|
1
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
/**
|
|
3
3
|
* DataSetupScreen — Checks whether the connected Amplitude project has event data.
|
|
4
4
|
*
|
|
5
5
|
* Calls the Amplitude Data API to determine the project's activation level:
|
|
6
|
-
* 'full' — 50+ events / well-established data
|
|
7
|
-
* 'partial' — snippet installed but few events
|
|
8
|
-
* 'none' — no events, no snippet
|
|
6
|
+
* 'full' — 50+ events / well-established data
|
|
7
|
+
* 'partial' — snippet installed but few events
|
|
8
|
+
* 'none' — no events, no snippet
|
|
9
9
|
*
|
|
10
10
|
* The router's isComplete predicate (projectHasData !== null) advances past
|
|
11
11
|
* this screen automatically once the value is set.
|
|
12
12
|
*/
|
|
13
|
-
import { Box } from 'ink';
|
|
14
|
-
import { useEffect
|
|
15
|
-
import {
|
|
13
|
+
import { Box, Text } from 'ink';
|
|
14
|
+
import { useEffect } from 'react';
|
|
15
|
+
import { useWizardStore } from '../hooks/useWizardStore.js';
|
|
16
|
+
import { Colors, Icons } from '../styles.js';
|
|
17
|
+
import { BrailleSpinner } from '../components/BrailleSpinner.js';
|
|
16
18
|
import { fetchProjectActivationStatus } from '../../../lib/api.js';
|
|
17
19
|
import { detectAmplitudeInProject } from '../../../lib/detect-amplitude.js';
|
|
18
20
|
import { logToFile } from '../../../utils/debug.js';
|
|
19
21
|
export const DataSetupScreen = ({ store }) => {
|
|
20
|
-
|
|
22
|
+
useWizardStore(store);
|
|
21
23
|
useEffect(() => {
|
|
22
24
|
if (store.session.projectHasData !== null)
|
|
23
25
|
return;
|
|
@@ -35,7 +37,12 @@ export const DataSetupScreen = ({ store }) => {
|
|
|
35
37
|
// Run local static check in parallel with the API call.
|
|
36
38
|
const localDetection = detectAmplitudeInProject(store.session.installDir);
|
|
37
39
|
logToFile(`[DataSetup] local detection: confidence=${localDetection.confidence} reason=${localDetection.reason ?? 'none'}`);
|
|
38
|
-
void fetchProjectActivationStatus(
|
|
40
|
+
void fetchProjectActivationStatus({
|
|
41
|
+
accessToken: credentials.accessToken,
|
|
42
|
+
zone,
|
|
43
|
+
appId,
|
|
44
|
+
orgId: selectedOrgId,
|
|
45
|
+
})
|
|
39
46
|
.then((status) => {
|
|
40
47
|
logToFile(`[DataSetup] activation status: ${JSON.stringify(status)}`);
|
|
41
48
|
store.setSnippetConfigured(status.hasDetSource);
|
|
@@ -69,5 +76,5 @@ export const DataSetupScreen = ({ store }) => {
|
|
|
69
76
|
store.setActivationLevel(localDetection.confidence !== 'none' ? 'partial' : 'none');
|
|
70
77
|
});
|
|
71
78
|
}, []);
|
|
72
|
-
return (_jsx(Box, { flexDirection: "column", flexGrow: 1, children: _jsx(
|
|
79
|
+
return (_jsx(Box, { flexDirection: "column", flexGrow: 1, children: _jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { bold: true, color: Colors.heading, children: "Checking project setup" }), _jsxs(Box, { marginTop: 1, gap: 1, children: [_jsx(BrailleSpinner, { color: Colors.accent }), _jsxs(Text, { color: Colors.body, children: ["Analyzing your Amplitude project", Icons.ellipsis] })] }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: Colors.muted, children: "Looking for existing SDK installation and event data" }) })] }) }));
|
|
73
80
|
};
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* IntroScreen —
|
|
2
|
+
* IntroScreen (v2) — Clean, minimal welcome with framework detection.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
4
|
+
* Four states:
|
|
5
|
+
* 0. Checkpoint restored: resume / start fresh / cancel picker
|
|
5
6
|
* 1. Detecting: spinner while bin.ts runs detection
|
|
6
7
|
* 2. Detection failed: auto-selects Generic, then continue/cancel
|
|
7
8
|
* 3. Detection succeeded: show result, then continue/cancel
|
|
8
9
|
*
|
|
9
|
-
*
|
|
10
|
+
* Shows the AmplitudeTextLogo when terminal is wide/tall enough (>=75x20).
|
|
11
|
+
* Calls store.concludeIntro() to advance past this screen.
|
|
10
12
|
*/
|
|
11
13
|
import type { WizardStore } from '../store.js';
|
|
12
14
|
interface IntroScreenProps {
|