@amplitude/wizard 1.0.0-beta.2 → 1.0.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.
- 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,6 +1,6 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
2
|
/**
|
|
3
|
-
* SlackScreen — Amplitude Slack integration setup.
|
|
3
|
+
* SlackScreen — Amplitude Slack integration setup (v2).
|
|
4
4
|
*
|
|
5
5
|
* Guides the user to connect their Slack workspace to Amplitude.
|
|
6
6
|
* Since the OAuth handshake happens in the browser (Amplitude Settings),
|
|
@@ -10,12 +10,12 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
10
10
|
* Region-aware: EU users need the "Amplitude - EU" Slack app.
|
|
11
11
|
*/
|
|
12
12
|
import { Box, Text } from 'ink';
|
|
13
|
-
import { useState, useEffect } from 'react';
|
|
14
|
-
import { useSyncExternalStore } from 'react';
|
|
13
|
+
import { useState, useEffect, useRef } from 'react';
|
|
15
14
|
import { SlackOutcome } from '../store.js';
|
|
15
|
+
import { useWizardStore } from '../hooks/useWizardStore.js';
|
|
16
16
|
import { ConfirmationInput } from '../primitives/index.js';
|
|
17
|
-
import { Colors } from '../styles.js';
|
|
18
|
-
import {
|
|
17
|
+
import { Colors, Icons } from '../styles.js';
|
|
18
|
+
import { fetchSlackInstallUrl, fetchSlackConnectionStatus, } from '../../../lib/api.js';
|
|
19
19
|
import { OUTBOUND_URLS } from '../../../lib/constants.js';
|
|
20
20
|
import { logToFile } from '../../../utils/debug.js';
|
|
21
21
|
import opn from 'opn';
|
|
@@ -38,50 +38,75 @@ const markDone = (store, outcome, standalone, onComplete) => {
|
|
|
38
38
|
}
|
|
39
39
|
};
|
|
40
40
|
export const SlackScreen = ({ store, standalone = false, onComplete, }) => {
|
|
41
|
-
|
|
41
|
+
useWizardStore(store);
|
|
42
42
|
const [phase, setPhase] = useState(Phase.Prompt);
|
|
43
|
-
const
|
|
43
|
+
const timerRef = useRef(null);
|
|
44
|
+
// Clear any pending timer on unmount
|
|
45
|
+
useEffect(() => {
|
|
46
|
+
return () => {
|
|
47
|
+
if (timerRef.current !== null)
|
|
48
|
+
clearTimeout(timerRef.current);
|
|
49
|
+
};
|
|
50
|
+
}, []);
|
|
44
51
|
const region = store.session.region ?? 'us';
|
|
45
52
|
const isEu = region === 'eu';
|
|
46
53
|
const appName = isEu ? 'Amplitude - EU' : 'Amplitude';
|
|
47
|
-
//
|
|
48
|
-
// (e.g. returning users, or the standalone `slack` command).
|
|
54
|
+
// Check if Slack is already connected on mount — auto-complete if so.
|
|
49
55
|
useEffect(() => {
|
|
50
|
-
|
|
51
|
-
if (resolvedOrgName) {
|
|
52
|
-
logToFile(`[SlackScreen] using existing orgName=${resolvedOrgName}`);
|
|
53
|
-
return;
|
|
54
|
-
}
|
|
56
|
+
let cancelled = false;
|
|
55
57
|
const credentials = store.session.credentials;
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
58
|
+
const orgId = store.session.selectedOrgId;
|
|
59
|
+
logToFile(`[SlackScreen] selectedOrgName=${store.session.selectedOrgName ?? ''} credentials=${credentials ? 'present' : 'null'} region=${region}`);
|
|
60
|
+
// Thunder uses access_token (Hydra-validated), not id_token.
|
|
61
|
+
const accessToken = credentials?.accessToken;
|
|
62
|
+
if (accessToken && orgId) {
|
|
63
|
+
void fetchSlackConnectionStatus(accessToken, region, orgId).then((isConnected) => {
|
|
64
|
+
if (cancelled)
|
|
65
|
+
return;
|
|
66
|
+
logToFile(`[SlackScreen] slackConnectionStatus=${isConnected}`);
|
|
67
|
+
if (isConnected) {
|
|
68
|
+
setPhase(Phase.Done);
|
|
69
|
+
timerRef.current = setTimeout(() => {
|
|
70
|
+
if (!cancelled) {
|
|
71
|
+
markDone(store, SlackOutcome.Configured, standalone, onComplete);
|
|
72
|
+
}
|
|
73
|
+
}, 1500);
|
|
74
|
+
}
|
|
75
|
+
});
|
|
59
76
|
}
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
const name = info.orgs[0]?.name ?? null;
|
|
64
|
-
logToFile(`[SlackScreen] API returned orgs=${JSON.stringify(info.orgs.map((o) => o.name))} using=${name}`);
|
|
65
|
-
setResolvedOrgName(name);
|
|
66
|
-
})
|
|
67
|
-
.catch((err) => {
|
|
68
|
-
logToFile(`[SlackScreen] API fetch failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
69
|
-
});
|
|
77
|
+
return () => {
|
|
78
|
+
cancelled = true;
|
|
79
|
+
};
|
|
70
80
|
}, []);
|
|
71
|
-
const
|
|
81
|
+
const zone = (region ?? 'us');
|
|
82
|
+
const settingsUrl = OUTBOUND_URLS.slackSettings(zone, store.session.selectedOrgId);
|
|
83
|
+
const [openedUrl, setOpenedUrl] = useState(settingsUrl);
|
|
72
84
|
const handleConnect = () => {
|
|
73
85
|
setPhase(Phase.Opening);
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
86
|
+
const credentials = store.session.credentials;
|
|
87
|
+
const orgId = store.session.selectedOrgId;
|
|
88
|
+
// Thunder uses access_token (Hydra-validated), not id_token.
|
|
89
|
+
const accessToken = credentials?.accessToken;
|
|
90
|
+
// Try the direct Slack OAuth URL first; fall back to settings page.
|
|
91
|
+
const open = (url) => {
|
|
92
|
+
setOpenedUrl(url);
|
|
93
|
+
logToFile(`[SlackScreen] opening ${url === settingsUrl ? 'settings fallback' : 'direct Slack OAuth URL'}`);
|
|
94
|
+
opn(url, { wait: false }).catch(() => { });
|
|
95
|
+
timerRef.current = setTimeout(() => setPhase(Phase.Waiting), 800);
|
|
96
|
+
};
|
|
97
|
+
if (accessToken && orgId) {
|
|
98
|
+
void fetchSlackInstallUrl(accessToken, zone, orgId, settingsUrl).then((directUrl) => open(directUrl ?? settingsUrl));
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
open(settingsUrl);
|
|
102
|
+
}
|
|
78
103
|
};
|
|
79
104
|
const handleSkip = () => {
|
|
80
105
|
markDone(store, SlackOutcome.Skipped, standalone, onComplete);
|
|
81
106
|
};
|
|
82
107
|
const handleDone = () => {
|
|
83
108
|
setPhase(Phase.Done);
|
|
84
|
-
setTimeout(() => markDone(store, SlackOutcome.Configured, standalone, onComplete), 1500);
|
|
109
|
+
timerRef.current = setTimeout(() => markDone(store, SlackOutcome.Configured, standalone, onComplete), 1500);
|
|
85
110
|
};
|
|
86
|
-
return (_jsxs(Box, { flexDirection: "column", flexGrow: 1, children: [_jsx(Text, { bold: true, color: Colors.accent, children: "Slack Integration" }), _jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsx(Text, { color: Colors.
|
|
111
|
+
return (_jsxs(Box, { flexDirection: "column", flexGrow: 1, children: [_jsx(Text, { bold: true, color: Colors.accent, children: "Slack Integration" }), _jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsx(Text, { color: Colors.secondary, children: "Connect Amplitude to Slack for chart previews, dashboard sharing," }), _jsx(Text, { color: Colors.secondary, children: "and real-time tracking plan notifications." }), isEu && (_jsx(Box, { marginTop: 1, children: _jsx(Text, { color: Colors.warning, children: "EU region: install the \"Amplitude - EU\" app from the Slack App Directory." }) })), phase === Phase.Prompt && (_jsx(Box, { marginTop: 1, children: _jsx(ConfirmationInput, { message: `Connect the "${appName}" Slack app to your workspace?`, confirmLabel: "Connect", cancelLabel: "Skip for now", onConfirm: handleConnect, onCancel: handleSkip }) })), phase === Phase.Opening && (_jsxs(Text, { color: Colors.active, children: ["Opening browser", Icons.ellipsis] })), phase === Phase.Waiting && (_jsxs(Box, { flexDirection: "column", marginTop: 1, children: [openedUrl === settingsUrl ? (_jsxs(_Fragment, { children: [_jsxs(Text, { color: Colors.body, children: ["Browser opened to", ' ', _jsx(Text, { color: Colors.accent, children: settingsUrl })] }), _jsxs(Text, { color: Colors.secondary, children: ["Go to Settings ", Icons.chevronRight, " Personal Settings", ' ', Icons.chevronRight, " Profile and click \"Connect to Slack\"."] }), _jsxs(Text, { color: Colors.muted, children: ["Docs:", ' ', _jsx(Text, { color: Colors.accent, children: "https://amplitude.com/docs/analytics/integrate-slack" })] })] })) : (_jsxs(_Fragment, { children: [_jsxs(Text, { color: Colors.body, children: ["Browser opened to ", _jsx(Text, { color: Colors.accent, children: "Slack" }), " for authorization."] }), _jsxs(Text, { color: Colors.secondary, children: ["Authorize the ", appName, " app in Slack to complete the connection."] }), _jsxs(Text, { color: Colors.muted, children: ["Docs:", ' ', _jsx(Text, { color: Colors.accent, children: "https://amplitude.com/docs/analytics/integrate-slack" })] })] })), _jsx(Box, { marginTop: 1, children: _jsx(ConfirmationInput, { message: "Connected to Slack?", confirmLabel: "Yes, connected", cancelLabel: "Skip for now", onConfirm: handleDone, onCancel: handleSkip }) })] })), phase === Phase.Done && (_jsx(Box, { flexDirection: "column", marginTop: 1, children: _jsxs(Text, { color: Colors.success, bold: true, children: [Icons.checkmark, " Slack connected! You'll get chart previews and notifications in Slack."] }) }))] })] }));
|
|
87
112
|
};
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Inline copies of runtime constants from wizard-session.ts.
|
|
3
|
+
*
|
|
4
|
+
* tsx has an ESM/CJS dual-loading bug: when a module is first loaded as CJS
|
|
5
|
+
* (e.g. via a top-level import chain) and then loaded again via dynamic
|
|
6
|
+
* import() as ESM, named exports using the `as const` + same-name type
|
|
7
|
+
* pattern fail to resolve. This file provides the TUI layer with its own
|
|
8
|
+
* copies so it never needs runtime imports from wizard-session.ts.
|
|
9
|
+
*
|
|
10
|
+
* IMPORTANT: keep these in sync with src/lib/wizard-session.ts.
|
|
11
|
+
*/
|
|
12
|
+
export declare const RunPhase: {
|
|
13
|
+
readonly Idle: "idle";
|
|
14
|
+
readonly Running: "running";
|
|
15
|
+
readonly Completed: "completed";
|
|
16
|
+
readonly Error: "error";
|
|
17
|
+
};
|
|
18
|
+
export type RunPhase = (typeof RunPhase)[keyof typeof RunPhase];
|
|
19
|
+
export declare const AdditionalFeature: {
|
|
20
|
+
readonly LLM: "llm";
|
|
21
|
+
};
|
|
22
|
+
export type AdditionalFeature = (typeof AdditionalFeature)[keyof typeof AdditionalFeature];
|
|
23
|
+
export declare const ADDITIONAL_FEATURE_LABELS: Record<AdditionalFeature, string>;
|
|
24
|
+
export declare const McpOutcome: {
|
|
25
|
+
readonly NoClients: "no_clients";
|
|
26
|
+
readonly Skipped: "skipped";
|
|
27
|
+
readonly Installed: "installed";
|
|
28
|
+
readonly Failed: "failed";
|
|
29
|
+
};
|
|
30
|
+
export type McpOutcome = (typeof McpOutcome)[keyof typeof McpOutcome];
|
|
31
|
+
export declare const SlackOutcome: {
|
|
32
|
+
readonly Skipped: "skipped";
|
|
33
|
+
readonly Configured: "configured";
|
|
34
|
+
};
|
|
35
|
+
export type SlackOutcome = (typeof SlackOutcome)[keyof typeof SlackOutcome];
|
|
36
|
+
export declare const OutroKind: {
|
|
37
|
+
readonly Success: "success";
|
|
38
|
+
readonly Error: "error";
|
|
39
|
+
readonly Cancel: "cancel";
|
|
40
|
+
};
|
|
41
|
+
export type OutroKind = (typeof OutroKind)[keyof typeof OutroKind];
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Inline copies of runtime constants from wizard-session.ts.
|
|
3
|
+
*
|
|
4
|
+
* tsx has an ESM/CJS dual-loading bug: when a module is first loaded as CJS
|
|
5
|
+
* (e.g. via a top-level import chain) and then loaded again via dynamic
|
|
6
|
+
* import() as ESM, named exports using the `as const` + same-name type
|
|
7
|
+
* pattern fail to resolve. This file provides the TUI layer with its own
|
|
8
|
+
* copies so it never needs runtime imports from wizard-session.ts.
|
|
9
|
+
*
|
|
10
|
+
* IMPORTANT: keep these in sync with src/lib/wizard-session.ts.
|
|
11
|
+
*/
|
|
12
|
+
export const RunPhase = {
|
|
13
|
+
Idle: 'idle',
|
|
14
|
+
Running: 'running',
|
|
15
|
+
Completed: 'completed',
|
|
16
|
+
Error: 'error',
|
|
17
|
+
};
|
|
18
|
+
export const AdditionalFeature = {
|
|
19
|
+
LLM: 'llm',
|
|
20
|
+
};
|
|
21
|
+
export const ADDITIONAL_FEATURE_LABELS = {
|
|
22
|
+
[AdditionalFeature.LLM]: 'LLM analytics',
|
|
23
|
+
};
|
|
24
|
+
export const McpOutcome = {
|
|
25
|
+
NoClients: 'no_clients',
|
|
26
|
+
Skipped: 'skipped',
|
|
27
|
+
Installed: 'installed',
|
|
28
|
+
Failed: 'failed',
|
|
29
|
+
};
|
|
30
|
+
export const SlackOutcome = {
|
|
31
|
+
Skipped: 'skipped',
|
|
32
|
+
Configured: 'configured',
|
|
33
|
+
};
|
|
34
|
+
export const OutroKind = {
|
|
35
|
+
Success: 'success',
|
|
36
|
+
Error: 'error',
|
|
37
|
+
Cancel: 'cancel',
|
|
38
|
+
};
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* start-tui.ts — Sets up the Ink TUI renderer
|
|
2
|
+
* start-tui.ts — Sets up the Ink TUI renderer.
|
|
3
|
+
*
|
|
4
|
+
* Uses Amplitude brand colors for terminal theming.
|
|
3
5
|
*/
|
|
4
6
|
import { WizardStore, Flow } from './store.js';
|
|
5
7
|
import type { WizardSession } from '../../lib/wizard-session.js';
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* start-tui.ts — Sets up the Ink TUI renderer
|
|
2
|
+
* start-tui.ts — Sets up the Ink TUI renderer.
|
|
3
|
+
*
|
|
4
|
+
* Uses Amplitude brand colors for terminal theming.
|
|
3
5
|
*/
|
|
4
6
|
import { render } from 'ink';
|
|
5
7
|
import { createElement } from 'react';
|
|
@@ -7,22 +9,22 @@ import { WizardStore, Flow } from './store.js';
|
|
|
7
9
|
import { InkUI } from './ink-ui.js';
|
|
8
10
|
import { setUI } from '../index.js';
|
|
9
11
|
import { App } from './App.js';
|
|
12
|
+
import { Brand } from './styles.js';
|
|
10
13
|
// ANSI escape sequences
|
|
11
14
|
const RESET_ATTRS = '\x1b[0m';
|
|
12
15
|
const CLEAR_SCREEN = '\x1b[2J';
|
|
13
16
|
const CURSOR_HOME = '\x1b[H';
|
|
14
17
|
const BG_BLACK = '\x1b[48;2;0;0;0m';
|
|
15
|
-
// OSC 10/11: set terminal foreground/background
|
|
16
|
-
const
|
|
17
|
-
const
|
|
18
|
+
// OSC 10/11: set terminal foreground/background to Amplitude brand colors
|
|
19
|
+
const OSC_FG = `\x1b]10;${Brand.gray10}\x07`;
|
|
20
|
+
const OSC_BG = `\x1b]11;${Brand.gray100}\x07`;
|
|
18
21
|
// OSC 110/111: reset to user defaults
|
|
19
22
|
const OSC_FG_RESET = '\x1b]110;\x07';
|
|
20
23
|
const OSC_BG_RESET = '\x1b]111;\x07';
|
|
21
|
-
/** Set foreground
|
|
22
|
-
const FORCE_DARK =
|
|
24
|
+
/** Set foreground + background to brand colors, clear screen. */
|
|
25
|
+
const FORCE_DARK = OSC_FG + OSC_BG + BG_BLACK + CLEAR_SCREEN + CURSOR_HOME;
|
|
23
26
|
export function startTUI(version, flow = Flow.Wizard, initialSession) {
|
|
24
|
-
//
|
|
25
|
-
// The UI adapts to whatever size the terminal already is.
|
|
27
|
+
// Apply brand terminal theme
|
|
26
28
|
process.stdout.write(FORCE_DARK);
|
|
27
29
|
const store = new WizardStore(flow);
|
|
28
30
|
store.version = version;
|
|
@@ -32,8 +34,10 @@ export function startTUI(version, flow = Flow.Wizard, initialSession) {
|
|
|
32
34
|
// Swap in the InkUI
|
|
33
35
|
const inkUI = new InkUI(store);
|
|
34
36
|
setUI(inkUI);
|
|
35
|
-
// Render the Ink
|
|
36
|
-
const { unmount: inkUnmount } = render(createElement(App, { store })
|
|
37
|
+
// Render the App — exitOnCtrlC lets Ink translate Ctrl+C into process.exit()
|
|
38
|
+
const { unmount: inkUnmount } = render(createElement(App, { store }), {
|
|
39
|
+
exitOnCtrlC: true,
|
|
40
|
+
});
|
|
37
41
|
// Reset terminal colors on exit
|
|
38
42
|
const cleanup = () => {
|
|
39
43
|
process.stdout.write(OSC_FG_RESET + OSC_BG_RESET + RESET_ATTRS + CLEAR_SCREEN + CURSOR_HOME);
|
|
@@ -10,7 +10,8 @@
|
|
|
10
10
|
* explicit setters so emitChange() is always called.
|
|
11
11
|
*/
|
|
12
12
|
import { TaskStatus, type EventPlanDecision } from '../wizard-ui.js';
|
|
13
|
-
import { type WizardSession, type OutroData, type DiscoveredFeature
|
|
13
|
+
import { type WizardSession, type OutroData, type DiscoveredFeature } from '../../lib/wizard-session.js';
|
|
14
|
+
import { AdditionalFeature, McpOutcome, SlackOutcome, RunPhase } from './session-constants.js';
|
|
14
15
|
import { WizardRouter, type ScreenName, Screen, Overlay, Flow } from './router.js';
|
|
15
16
|
export { TaskStatus, Screen, Overlay, Flow, RunPhase, McpOutcome, SlackOutcome, };
|
|
16
17
|
export type { ScreenName, OutroData, WizardSession };
|
package/dist/src/ui/tui/store.js
CHANGED
|
@@ -11,10 +11,12 @@
|
|
|
11
11
|
*/
|
|
12
12
|
import { atom, map } from 'nanostores';
|
|
13
13
|
import { TaskStatus } from '../wizard-ui.js';
|
|
14
|
-
import {
|
|
14
|
+
import { buildSession, } from '../../lib/wizard-session.js';
|
|
15
|
+
import { AdditionalFeature, McpOutcome, SlackOutcome, RunPhase, } from './session-constants.js';
|
|
15
16
|
import { WizardRouter, Screen, Overlay, Flow, } from './router.js';
|
|
16
17
|
import { analytics, sessionPropertiesCompact } from '../../utils/analytics.js';
|
|
17
|
-
|
|
18
|
+
// Inlined to avoid tsx ESM resolution bug with dynamic import().
|
|
19
|
+
const FLAG_LLM_ANALYTICS = 'wizard-llm-analytics';
|
|
18
20
|
export { TaskStatus, Screen, Overlay, Flow, RunPhase, McpOutcome, SlackOutcome, };
|
|
19
21
|
export class WizardStore {
|
|
20
22
|
// ── Internal nanostore atoms ─────────────────────────────────────
|
|
@@ -63,6 +65,7 @@ export class WizardStore {
|
|
|
63
65
|
}
|
|
64
66
|
set session(value) {
|
|
65
67
|
this.$session.set(value);
|
|
68
|
+
this.emitChange();
|
|
66
69
|
}
|
|
67
70
|
get commandMode() {
|
|
68
71
|
return this.$commandMode.get();
|
|
@@ -153,6 +156,19 @@ export class WizardStore {
|
|
|
153
156
|
setRegion(region) {
|
|
154
157
|
this.$session.setKey('region', region);
|
|
155
158
|
this.$session.setKey('regionForced', false);
|
|
159
|
+
// Persist region to project-level ampli.json so next run uses the right zone.
|
|
160
|
+
// Only writes if OrgId/WorkspaceId already exist (otherwise writeAmpliConfig
|
|
161
|
+
// would create a partial config).
|
|
162
|
+
const session = this.$session.get();
|
|
163
|
+
if (session.selectedOrgId && session.selectedWorkspaceId) {
|
|
164
|
+
void import('../../lib/ampli-config.js').then(({ writeAmpliConfig }) => {
|
|
165
|
+
writeAmpliConfig(session.installDir, {
|
|
166
|
+
OrgId: session.selectedOrgId,
|
|
167
|
+
WorkspaceId: session.selectedWorkspaceId,
|
|
168
|
+
Zone: region,
|
|
169
|
+
});
|
|
170
|
+
});
|
|
171
|
+
}
|
|
156
172
|
this.emitChange();
|
|
157
173
|
}
|
|
158
174
|
/** Force the RegionSelect screen to re-appear (/region command). */
|
|
@@ -360,9 +376,13 @@ export class WizardStore {
|
|
|
360
376
|
this.$session.setKey('selectedOrgName', org.name);
|
|
361
377
|
this.$session.setKey('selectedWorkspaceId', workspace.id);
|
|
362
378
|
this.$session.setKey('selectedWorkspaceName', workspace.name);
|
|
363
|
-
// Write ampli.json to the project directory
|
|
379
|
+
// Write ampli.json to the project directory.
|
|
380
|
+
// Use session.region (user-confirmed) over pendingAuthCloudRegion (auto-detected)
|
|
381
|
+
// so that /region changes are respected.
|
|
364
382
|
void import('../../lib/ampli-config.js').then(({ writeAmpliConfig }) => {
|
|
365
|
-
const zone = this.$session.get().
|
|
383
|
+
const zone = this.$session.get().region ??
|
|
384
|
+
this.$session.get().pendingAuthCloudRegion ??
|
|
385
|
+
'us';
|
|
366
386
|
writeAmpliConfig(installDir, {
|
|
367
387
|
OrgId: org.id,
|
|
368
388
|
WorkspaceId: workspace.id,
|
|
@@ -403,7 +423,10 @@ export class WizardStore {
|
|
|
403
423
|
}
|
|
404
424
|
addDiscoveredFeature(feature) {
|
|
405
425
|
if (!this.session.discoveredFeatures.includes(feature)) {
|
|
406
|
-
this
|
|
426
|
+
this.$session.setKey('discoveredFeatures', [
|
|
427
|
+
...this.session.discoveredFeatures,
|
|
428
|
+
feature,
|
|
429
|
+
]);
|
|
407
430
|
this.emitChange();
|
|
408
431
|
}
|
|
409
432
|
}
|
|
@@ -421,11 +444,14 @@ export class WizardStore {
|
|
|
421
444
|
}
|
|
422
445
|
}
|
|
423
446
|
if (!this.session.additionalFeatureQueue.includes(feature)) {
|
|
424
|
-
this
|
|
447
|
+
this.$session.setKey('additionalFeatureQueue', [
|
|
448
|
+
...this.session.additionalFeatureQueue,
|
|
449
|
+
feature,
|
|
450
|
+
]);
|
|
425
451
|
}
|
|
426
452
|
// Feature-specific flags
|
|
427
453
|
if (feature === AdditionalFeature.LLM) {
|
|
428
|
-
this
|
|
454
|
+
this.$session.setKey('llmOptIn', true);
|
|
429
455
|
}
|
|
430
456
|
analytics.wizardCapture('Feature Enabled', { feature });
|
|
431
457
|
this.emitChange();
|
|
@@ -1,6 +1,80 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Design tokens — Amplitude brand palette + modern TUI primitives.
|
|
3
|
+
*
|
|
4
|
+
* Colors sourced from brand.amplitude.com/creative/color.
|
|
5
|
+
* Optimised for dark terminal backgrounds (Gray 100 base).
|
|
3
6
|
*/
|
|
7
|
+
export declare const Brand: {
|
|
8
|
+
readonly darkBlue: "#001A4F";
|
|
9
|
+
readonly blue: "#1E61F0";
|
|
10
|
+
readonly blueOnDark: "#4083FF";
|
|
11
|
+
readonly lilac: "#6980FF";
|
|
12
|
+
readonly violet: "#A373FF";
|
|
13
|
+
readonly pink: "#FF7D78";
|
|
14
|
+
readonly amber: "#F59E0B";
|
|
15
|
+
readonly red: "#F23845";
|
|
16
|
+
readonly gray100: "#13171A";
|
|
17
|
+
readonly gray90: "#242A2E";
|
|
18
|
+
readonly gray80: "#373D42";
|
|
19
|
+
readonly gray70: "#50565B";
|
|
20
|
+
readonly gray60: "#697077";
|
|
21
|
+
readonly gray50: "#868D95";
|
|
22
|
+
readonly gray40: "#9FA5AD";
|
|
23
|
+
readonly gray30: "#B9BFC7";
|
|
24
|
+
readonly gray20: "#D5D9E0";
|
|
25
|
+
readonly gray10: "#F2F4F8";
|
|
26
|
+
readonly success: "#34D399";
|
|
27
|
+
readonly white: "#FFFFFF";
|
|
28
|
+
};
|
|
29
|
+
export declare const Colors: {
|
|
30
|
+
readonly heading: "#F2F4F8";
|
|
31
|
+
readonly body: "#B9BFC7";
|
|
32
|
+
readonly secondary: "#868D95";
|
|
33
|
+
readonly muted: "#697077";
|
|
34
|
+
readonly disabled: "#50565B";
|
|
35
|
+
readonly accent: "#4083FF";
|
|
36
|
+
readonly accentSecondary: "#6980FF";
|
|
37
|
+
readonly active: "#A373FF";
|
|
38
|
+
readonly success: "#34D399";
|
|
39
|
+
readonly error: "#F23845";
|
|
40
|
+
readonly warning: "#F59E0B";
|
|
41
|
+
readonly background: "#13171A";
|
|
42
|
+
readonly surface: "#242A2E";
|
|
43
|
+
readonly border: "#373D42";
|
|
44
|
+
readonly primary: "#4083FF";
|
|
45
|
+
};
|
|
46
|
+
export declare const Icons: {
|
|
47
|
+
readonly checkmark: "✓";
|
|
48
|
+
readonly cross: "✗";
|
|
49
|
+
readonly bullet: "●";
|
|
50
|
+
readonly bulletOpen: "○";
|
|
51
|
+
readonly bulletHalf: "◐";
|
|
52
|
+
readonly squareFilled: "◼";
|
|
53
|
+
readonly squareOpen: "◻";
|
|
54
|
+
readonly chevronRight: "›";
|
|
55
|
+
readonly arrowRight: "→";
|
|
56
|
+
readonly triangleRight: "▶";
|
|
57
|
+
readonly triangleSmallRight: "▸";
|
|
58
|
+
readonly diamond: "◆";
|
|
59
|
+
readonly diamondOpen: "◇";
|
|
60
|
+
readonly bar: "│";
|
|
61
|
+
readonly dash: "─";
|
|
62
|
+
readonly warning: "⚠";
|
|
63
|
+
readonly prompt: "❯";
|
|
64
|
+
readonly dot: "·";
|
|
65
|
+
readonly ellipsis: "…";
|
|
66
|
+
};
|
|
67
|
+
export declare const SPINNER_FRAMES: readonly ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"];
|
|
68
|
+
export declare const SPINNER_INTERVAL = 200;
|
|
69
|
+
export declare const Layout: {
|
|
70
|
+
readonly minWidth: 60;
|
|
71
|
+
readonly maxWidth: 120;
|
|
72
|
+
readonly paddingX: 2;
|
|
73
|
+
readonly stepperHeight: 1;
|
|
74
|
+
readonly headerHeight: 1;
|
|
75
|
+
readonly hintBarHeight: 1;
|
|
76
|
+
readonly separatorChar: "─";
|
|
77
|
+
};
|
|
4
78
|
export declare enum HAlign {
|
|
5
79
|
Left = "flex-start",
|
|
6
80
|
Center = "center",
|
|
@@ -11,21 +85,3 @@ export declare enum VAlign {
|
|
|
11
85
|
Center = "center",
|
|
12
86
|
Bottom = "flex-end"
|
|
13
87
|
}
|
|
14
|
-
export declare const Colors: {
|
|
15
|
-
readonly primary: "#1e61f0";
|
|
16
|
-
readonly accent: "#1e61f0";
|
|
17
|
-
readonly success: "green";
|
|
18
|
-
readonly error: "red";
|
|
19
|
-
readonly muted: "#cccccc";
|
|
20
|
-
};
|
|
21
|
-
export declare const Icons: {
|
|
22
|
-
readonly diamond: "◆";
|
|
23
|
-
readonly diamondOpen: "◇";
|
|
24
|
-
readonly check: "✔";
|
|
25
|
-
readonly warning: "⚠";
|
|
26
|
-
readonly squareFilled: "◼";
|
|
27
|
-
readonly squareOpen: "◻";
|
|
28
|
-
readonly triangleRight: "▶";
|
|
29
|
-
readonly triangleSmallRight: "▸";
|
|
30
|
-
readonly bullet: "•";
|
|
31
|
-
};
|
|
@@ -1,6 +1,106 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Design tokens — Amplitude brand palette + modern TUI primitives.
|
|
3
|
+
*
|
|
4
|
+
* Colors sourced from brand.amplitude.com/creative/color.
|
|
5
|
+
* Optimised for dark terminal backgrounds (Gray 100 base).
|
|
3
6
|
*/
|
|
7
|
+
// ── Amplitude brand palette ──────────────────────────────────────────
|
|
8
|
+
export const Brand = {
|
|
9
|
+
darkBlue: '#001A4F',
|
|
10
|
+
blue: '#1E61F0',
|
|
11
|
+
blueOnDark: '#4083FF', // primary accent on dark backgrounds
|
|
12
|
+
lilac: '#6980FF', // secondary accent, completed states
|
|
13
|
+
violet: '#A373FF', // in-progress, active highlights
|
|
14
|
+
pink: '#FF7D78', // decorative only
|
|
15
|
+
amber: '#F59E0B', // warnings — visually distinct from red
|
|
16
|
+
red: '#F23845', // errors only
|
|
17
|
+
gray100: '#13171A', // terminal background
|
|
18
|
+
gray90: '#242A2E', // card/surface
|
|
19
|
+
gray80: '#373D42', // borders, dividers
|
|
20
|
+
gray70: '#50565B', // disabled text
|
|
21
|
+
gray60: '#697077', // muted text
|
|
22
|
+
gray50: '#868D95', // secondary text
|
|
23
|
+
gray40: '#9FA5AD', // body text
|
|
24
|
+
gray30: '#B9BFC7', // primary text
|
|
25
|
+
gray20: '#D5D9E0', // emphasized text
|
|
26
|
+
gray10: '#F2F4F8', // headings, bright text
|
|
27
|
+
success: '#34D399', // emerald-400 — completion
|
|
28
|
+
white: '#FFFFFF',
|
|
29
|
+
};
|
|
30
|
+
// ── Semantic color aliases ───────────────────────────────────────────
|
|
31
|
+
export const Colors = {
|
|
32
|
+
// Text hierarchy (4 levels)
|
|
33
|
+
heading: Brand.gray10,
|
|
34
|
+
body: Brand.gray30,
|
|
35
|
+
secondary: Brand.gray50,
|
|
36
|
+
muted: Brand.gray60,
|
|
37
|
+
disabled: Brand.gray70,
|
|
38
|
+
// Interactive
|
|
39
|
+
accent: Brand.blueOnDark,
|
|
40
|
+
accentSecondary: Brand.lilac,
|
|
41
|
+
active: Brand.violet,
|
|
42
|
+
// Status
|
|
43
|
+
success: Brand.success,
|
|
44
|
+
error: Brand.red,
|
|
45
|
+
warning: Brand.amber,
|
|
46
|
+
// Surfaces
|
|
47
|
+
background: Brand.gray100,
|
|
48
|
+
surface: Brand.gray90,
|
|
49
|
+
border: Brand.gray80,
|
|
50
|
+
// Legacy compat — screens that import Colors.primary
|
|
51
|
+
primary: Brand.blueOnDark,
|
|
52
|
+
};
|
|
53
|
+
// ── Icons — modern unicode glyphs ───────────────────────────────────
|
|
54
|
+
export const Icons = {
|
|
55
|
+
// Progress states
|
|
56
|
+
checkmark: '✓',
|
|
57
|
+
cross: '✗',
|
|
58
|
+
bullet: '●',
|
|
59
|
+
bulletOpen: '○',
|
|
60
|
+
bulletHalf: '◐',
|
|
61
|
+
squareFilled: '◼',
|
|
62
|
+
squareOpen: '◻',
|
|
63
|
+
// Navigation
|
|
64
|
+
chevronRight: '›',
|
|
65
|
+
arrowRight: '→',
|
|
66
|
+
triangleRight: '▶',
|
|
67
|
+
triangleSmallRight: '▸',
|
|
68
|
+
// Decorative
|
|
69
|
+
diamond: '◆',
|
|
70
|
+
diamondOpen: '◇',
|
|
71
|
+
bar: '│',
|
|
72
|
+
dash: '─',
|
|
73
|
+
warning: '⚠',
|
|
74
|
+
// Indicators
|
|
75
|
+
prompt: '❯',
|
|
76
|
+
dot: '·',
|
|
77
|
+
ellipsis: '…',
|
|
78
|
+
};
|
|
79
|
+
// ── Braille spinner frames ──────────────────────────────────────────
|
|
80
|
+
export const SPINNER_FRAMES = [
|
|
81
|
+
'⠋',
|
|
82
|
+
'⠙',
|
|
83
|
+
'⠹',
|
|
84
|
+
'⠸',
|
|
85
|
+
'⠼',
|
|
86
|
+
'⠴',
|
|
87
|
+
'⠦',
|
|
88
|
+
'⠧',
|
|
89
|
+
'⠇',
|
|
90
|
+
'⠏',
|
|
91
|
+
];
|
|
92
|
+
export const SPINNER_INTERVAL = 200;
|
|
93
|
+
// ── Layout constants ────────────────────────────────────────────────
|
|
94
|
+
export const Layout = {
|
|
95
|
+
minWidth: 60,
|
|
96
|
+
maxWidth: 120,
|
|
97
|
+
paddingX: 2,
|
|
98
|
+
stepperHeight: 1,
|
|
99
|
+
headerHeight: 1,
|
|
100
|
+
hintBarHeight: 1,
|
|
101
|
+
separatorChar: '─',
|
|
102
|
+
};
|
|
103
|
+
// ── Alignment ────────────────────────────────────────────────────────
|
|
4
104
|
export var HAlign;
|
|
5
105
|
(function (HAlign) {
|
|
6
106
|
HAlign["Left"] = "flex-start";
|
|
@@ -13,21 +113,3 @@ export var VAlign;
|
|
|
13
113
|
VAlign["Center"] = "center";
|
|
14
114
|
VAlign["Bottom"] = "flex-end";
|
|
15
115
|
})(VAlign || (VAlign = {}));
|
|
16
|
-
export const Colors = {
|
|
17
|
-
primary: '#1e61f0',
|
|
18
|
-
accent: '#1e61f0',
|
|
19
|
-
success: 'green',
|
|
20
|
-
error: 'red',
|
|
21
|
-
muted: '#cccccc',
|
|
22
|
-
};
|
|
23
|
-
export const Icons = {
|
|
24
|
-
diamond: '\u25C6',
|
|
25
|
-
diamondOpen: '\u25C7',
|
|
26
|
-
check: '\u2714',
|
|
27
|
-
warning: '\u26A0',
|
|
28
|
-
squareFilled: '\u25FC',
|
|
29
|
-
squareOpen: '\u25FB',
|
|
30
|
-
triangleRight: '\u25B6',
|
|
31
|
-
triangleSmallRight: '\u25B8',
|
|
32
|
-
bullet: '\u2022',
|
|
33
|
-
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Error classification for user-facing error messages.
|
|
3
|
+
*
|
|
4
|
+
* Transforms cryptic network errors and API failures into
|
|
5
|
+
* actionable messages with suggestions and docs links.
|
|
6
|
+
*/
|
|
7
|
+
export interface ClassifiedError {
|
|
8
|
+
message: string;
|
|
9
|
+
suggestion: string;
|
|
10
|
+
docsUrl?: string;
|
|
11
|
+
retryable: boolean;
|
|
12
|
+
}
|
|
13
|
+
/** Classify a caught error into a user-friendly message. */
|
|
14
|
+
export declare function classifyError(err: unknown): ClassifiedError;
|