@amplitude/wizard 1.0.0-beta.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/LICENSE +47 -0
- package/README.md +119 -0
- package/dist/bin.d.ts +2 -0
- package/dist/bin.js +763 -0
- package/dist/package.json +144 -0
- package/dist/src/frameworks/android/android-wizard-agent.d.ts +6 -0
- package/dist/src/frameworks/android/android-wizard-agent.js +72 -0
- package/dist/src/frameworks/android/utils.d.ts +11 -0
- package/dist/src/frameworks/android/utils.js +32 -0
- package/dist/src/frameworks/django/django-wizard-agent.d.ts +8 -0
- package/dist/src/frameworks/django/django-wizard-agent.js +171 -0
- package/dist/src/frameworks/django/utils.d.ts +31 -0
- package/dist/src/frameworks/django/utils.js +305 -0
- package/dist/src/frameworks/fastapi/fastapi-wizard-agent.d.ts +11 -0
- package/dist/src/frameworks/fastapi/fastapi-wizard-agent.js +189 -0
- package/dist/src/frameworks/fastapi/utils.d.ts +26 -0
- package/dist/src/frameworks/fastapi/utils.js +257 -0
- package/dist/src/frameworks/flask/flask-wizard-agent.d.ts +8 -0
- package/dist/src/frameworks/flask/flask-wizard-agent.js +177 -0
- package/dist/src/frameworks/flask/utils.d.ts +28 -0
- package/dist/src/frameworks/flask/utils.js +343 -0
- package/dist/src/frameworks/flutter/flutter-wizard-agent.d.ts +4 -0
- package/dist/src/frameworks/flutter/flutter-wizard-agent.js +57 -0
- package/dist/src/frameworks/flutter/utils.d.ts +7 -0
- package/dist/src/frameworks/flutter/utils.js +64 -0
- package/dist/src/frameworks/generic/generic-wizard-agent.d.ts +2 -0
- package/dist/src/frameworks/generic/generic-wizard-agent.js +176 -0
- package/dist/src/frameworks/go/go-wizard-agent.d.ts +4 -0
- package/dist/src/frameworks/go/go-wizard-agent.js +57 -0
- package/dist/src/frameworks/go/utils.d.ts +5 -0
- package/dist/src/frameworks/go/utils.js +44 -0
- package/dist/src/frameworks/java/java-wizard-agent.d.ts +7 -0
- package/dist/src/frameworks/java/java-wizard-agent.js +73 -0
- package/dist/src/frameworks/java/utils.d.ts +15 -0
- package/dist/src/frameworks/java/utils.js +64 -0
- package/dist/src/frameworks/javascript-node/javascript-node-wizard-agent.d.ts +4 -0
- package/dist/src/frameworks/javascript-node/javascript-node-wizard-agent.js +57 -0
- package/dist/src/frameworks/javascript-web/javascript-web-wizard-agent.d.ts +3 -0
- package/dist/src/frameworks/javascript-web/javascript-web-wizard-agent.js +151 -0
- package/dist/src/frameworks/javascript-web/utils.d.ts +28 -0
- package/dist/src/frameworks/javascript-web/utils.js +153 -0
- package/dist/src/frameworks/nextjs/nextjs-wizard-agent.d.ts +7 -0
- package/dist/src/frameworks/nextjs/nextjs-wizard-agent.js +98 -0
- package/dist/src/frameworks/nextjs/utils.d.ts +12 -0
- package/dist/src/frameworks/nextjs/utils.js +51 -0
- package/dist/src/frameworks/python/python-wizard-agent.d.ts +7 -0
- package/dist/src/frameworks/python/python-wizard-agent.js +193 -0
- package/dist/src/frameworks/python/utils.d.ts +28 -0
- package/dist/src/frameworks/python/utils.js +146 -0
- package/dist/src/frameworks/react-native/react-native-wizard-agent.d.ts +6 -0
- package/dist/src/frameworks/react-native/react-native-wizard-agent.js +84 -0
- package/dist/src/frameworks/react-native/utils.d.ts +21 -0
- package/dist/src/frameworks/react-native/utils.js +82 -0
- package/dist/src/frameworks/react-router/react-router-wizard-agent.d.ts +7 -0
- package/dist/src/frameworks/react-router/react-router-wizard-agent.js +98 -0
- package/dist/src/frameworks/react-router/utils.d.ts +13 -0
- package/dist/src/frameworks/react-router/utils.js +160 -0
- package/dist/src/frameworks/swift/swift-wizard-agent.d.ts +7 -0
- package/dist/src/frameworks/swift/swift-wizard-agent.js +72 -0
- package/dist/src/frameworks/swift/utils.d.ts +12 -0
- package/dist/src/frameworks/swift/utils.js +82 -0
- package/dist/src/frameworks/unity/unity-wizard-agent.d.ts +6 -0
- package/dist/src/frameworks/unity/unity-wizard-agent.js +79 -0
- package/dist/src/frameworks/unity/utils.d.ts +12 -0
- package/dist/src/frameworks/unity/utils.js +66 -0
- package/dist/src/frameworks/unreal/unreal-wizard-agent.d.ts +6 -0
- package/dist/src/frameworks/unreal/unreal-wizard-agent.js +77 -0
- package/dist/src/frameworks/unreal/utils.d.ts +10 -0
- package/dist/src/frameworks/unreal/utils.js +29 -0
- package/dist/src/frameworks/vue/vue-wizard-agent.d.ts +4 -0
- package/dist/src/frameworks/vue/vue-wizard-agent.js +64 -0
- package/dist/src/lib/agent-hooks.d.ts +26 -0
- package/dist/src/lib/agent-hooks.js +118 -0
- package/dist/src/lib/agent-interface.d.ts +175 -0
- package/dist/src/lib/agent-interface.js +1217 -0
- package/dist/src/lib/agent-runner.d.ts +9 -0
- package/dist/src/lib/agent-runner.js +415 -0
- package/dist/src/lib/ampli-config.d.ts +105 -0
- package/dist/src/lib/ampli-config.js +178 -0
- package/dist/src/lib/api.d.ts +107 -0
- package/dist/src/lib/api.js +442 -0
- package/dist/src/lib/commandments.d.ts +1 -0
- package/dist/src/lib/commandments.js +24 -0
- package/dist/src/lib/console-query.d.ts +27 -0
- package/dist/src/lib/console-query.js +121 -0
- package/dist/src/lib/constants.d.ts +124 -0
- package/dist/src/lib/constants.js +170 -0
- package/dist/src/lib/detect-amplitude.d.ts +31 -0
- package/dist/src/lib/detect-amplitude.js +407 -0
- package/dist/src/lib/framework-config.d.ts +188 -0
- package/dist/src/lib/framework-config.js +21 -0
- package/dist/src/lib/health-checks/endpoints.d.ts +3 -0
- package/dist/src/lib/health-checks/endpoints.js +45 -0
- package/dist/src/lib/health-checks/index.d.ts +4 -0
- package/dist/src/lib/health-checks/index.js +22 -0
- package/dist/src/lib/health-checks/readiness.d.ts +24 -0
- package/dist/src/lib/health-checks/readiness.js +118 -0
- package/dist/src/lib/health-checks/statuspage.d.ts +9 -0
- package/dist/src/lib/health-checks/statuspage.js +104 -0
- package/dist/src/lib/health-checks/types.d.ts +31 -0
- package/dist/src/lib/health-checks/types.js +9 -0
- package/dist/src/lib/helper-functions.d.ts +1 -0
- package/dist/src/lib/helper-functions.js +5 -0
- package/dist/src/lib/middleware/benchmark.d.ts +54 -0
- package/dist/src/lib/middleware/benchmark.js +48 -0
- package/dist/src/lib/middleware/benchmarks/cache-tracker.d.ts +44 -0
- package/dist/src/lib/middleware/benchmarks/cache-tracker.js +80 -0
- package/dist/src/lib/middleware/benchmarks/compaction-tracker.d.ts +29 -0
- package/dist/src/lib/middleware/benchmarks/compaction-tracker.js +59 -0
- package/dist/src/lib/middleware/benchmarks/context-size-tracker.d.ts +26 -0
- package/dist/src/lib/middleware/benchmarks/context-size-tracker.js +55 -0
- package/dist/src/lib/middleware/benchmarks/cost-tracker.d.ts +16 -0
- package/dist/src/lib/middleware/benchmarks/cost-tracker.js +75 -0
- package/dist/src/lib/middleware/benchmarks/duration-tracker.d.ts +20 -0
- package/dist/src/lib/middleware/benchmarks/duration-tracker.js +39 -0
- package/dist/src/lib/middleware/benchmarks/index.d.ts +9 -0
- package/dist/src/lib/middleware/benchmarks/index.js +67 -0
- package/dist/src/lib/middleware/benchmarks/json-writer.d.ts +15 -0
- package/dist/src/lib/middleware/benchmarks/json-writer.js +144 -0
- package/dist/src/lib/middleware/benchmarks/summary.d.ts +9 -0
- package/dist/src/lib/middleware/benchmarks/summary.js +105 -0
- package/dist/src/lib/middleware/benchmarks/token-tracker.d.ts +40 -0
- package/dist/src/lib/middleware/benchmarks/token-tracker.js +76 -0
- package/dist/src/lib/middleware/benchmarks/turn-counter.d.ts +34 -0
- package/dist/src/lib/middleware/benchmarks/turn-counter.js +58 -0
- package/dist/src/lib/middleware/config.d.ts +24 -0
- package/dist/src/lib/middleware/config.js +96 -0
- package/dist/src/lib/middleware/index.d.ts +11 -0
- package/dist/src/lib/middleware/index.js +17 -0
- package/dist/src/lib/middleware/phase-detector.d.ts +8 -0
- package/dist/src/lib/middleware/phase-detector.js +63 -0
- package/dist/src/lib/middleware/pipeline.d.ts +29 -0
- package/dist/src/lib/middleware/pipeline.js +81 -0
- package/dist/src/lib/middleware/schemas.d.ts +27 -0
- package/dist/src/lib/middleware/schemas.js +84 -0
- package/dist/src/lib/middleware/types.d.ts +94 -0
- package/dist/src/lib/middleware/types.js +8 -0
- package/dist/src/lib/package-manager-detection.d.ts +42 -0
- package/dist/src/lib/package-manager-detection.js +292 -0
- package/dist/src/lib/registry.d.ts +3 -0
- package/dist/src/lib/registry.js +42 -0
- package/dist/src/lib/safe-tools.d.ts +2 -0
- package/dist/src/lib/safe-tools.js +214 -0
- package/dist/src/lib/wizard-session.d.ts +220 -0
- package/dist/src/lib/wizard-session.js +127 -0
- package/dist/src/lib/wizard-tools.d.ts +82 -0
- package/dist/src/lib/wizard-tools.js +499 -0
- package/dist/src/run.d.ts +19 -0
- package/dist/src/run.js +151 -0
- package/dist/src/steps/add-mcp-server-to-clients/MCPClient.d.ts +30 -0
- package/dist/src/steps/add-mcp-server-to-clients/MCPClient.js +141 -0
- package/dist/src/steps/add-mcp-server-to-clients/clients/claude-code.d.ts +29 -0
- package/dist/src/steps/add-mcp-server-to-clients/clients/claude-code.js +180 -0
- package/dist/src/steps/add-mcp-server-to-clients/clients/claude.d.ts +20 -0
- package/dist/src/steps/add-mcp-server-to-clients/clients/claude.js +63 -0
- package/dist/src/steps/add-mcp-server-to-clients/clients/codex.d.ts +28 -0
- package/dist/src/steps/add-mcp-server-to-clients/clients/codex.js +77 -0
- package/dist/src/steps/add-mcp-server-to-clients/clients/cursor.d.ts +24 -0
- package/dist/src/steps/add-mcp-server-to-clients/clients/cursor.js +60 -0
- package/dist/src/steps/add-mcp-server-to-clients/clients/visual-studio-code.d.ts +27 -0
- package/dist/src/steps/add-mcp-server-to-clients/clients/visual-studio-code.js +101 -0
- package/dist/src/steps/add-mcp-server-to-clients/clients/zed.d.ts +26 -0
- package/dist/src/steps/add-mcp-server-to-clients/clients/zed.js +102 -0
- package/dist/src/steps/add-mcp-server-to-clients/defaults.d.ts +44 -0
- package/dist/src/steps/add-mcp-server-to-clients/defaults.js +123 -0
- package/dist/src/steps/add-mcp-server-to-clients/index.d.ts +19 -0
- package/dist/src/steps/add-mcp-server-to-clients/index.js +110 -0
- package/dist/src/steps/add-or-update-environment-variables.d.ts +10 -0
- package/dist/src/steps/add-or-update-environment-variables.js +188 -0
- package/dist/src/steps/index.d.ts +4 -0
- package/dist/src/steps/index.js +20 -0
- package/dist/src/steps/run-prettier.d.ts +5 -0
- package/dist/src/steps/run-prettier.js +90 -0
- package/dist/src/steps/upload-environment-variables/EnvironmentProvider.d.ts +11 -0
- package/dist/src/steps/upload-environment-variables/EnvironmentProvider.js +11 -0
- package/dist/src/steps/upload-environment-variables/index.d.ts +6 -0
- package/dist/src/steps/upload-environment-variables/index.js +37 -0
- package/dist/src/steps/upload-environment-variables/providers/vercel.d.ts +15 -0
- package/dist/src/steps/upload-environment-variables/providers/vercel.js +145 -0
- package/dist/src/telemetry.d.ts +2 -0
- package/dist/src/telemetry.js +12 -0
- package/dist/src/ui/index.d.ts +8 -0
- package/dist/src/ui/index.js +16 -0
- package/dist/src/ui/logging-ui.d.ts +56 -0
- package/dist/src/ui/logging-ui.js +157 -0
- package/dist/src/ui/tui/App.d.ts +6 -0
- package/dist/src/ui/tui/App.js +34 -0
- package/dist/src/ui/tui/components/AmplitudeLogo.d.ts +5 -0
- package/dist/src/ui/tui/components/AmplitudeLogo.js +81 -0
- package/dist/src/ui/tui/components/AmplitudeTextLogo.d.ts +3 -0
- package/dist/src/ui/tui/components/AmplitudeTextLogo.js +31 -0
- package/dist/src/ui/tui/components/ConsoleView.d.ts +23 -0
- package/dist/src/ui/tui/components/ConsoleView.js +220 -0
- package/dist/src/ui/tui/components/TitleBar.d.ts +6 -0
- package/dist/src/ui/tui/components/TitleBar.js +16 -0
- package/dist/src/ui/tui/console-commands.d.ts +16 -0
- package/dist/src/ui/tui/console-commands.js +31 -0
- package/dist/src/ui/tui/context/CommandModeContext.d.ts +2 -0
- package/dist/src/ui/tui/context/CommandModeContext.js +3 -0
- package/dist/src/ui/tui/flows.d.ts +48 -0
- package/dist/src/ui/tui/flows.js +154 -0
- package/dist/src/ui/tui/hooks/useScreenInput.d.ts +13 -0
- package/dist/src/ui/tui/hooks/useScreenInput.js +18 -0
- package/dist/src/ui/tui/hooks/useStdoutDimensions.d.ts +9 -0
- package/dist/src/ui/tui/hooks/useStdoutDimensions.js +29 -0
- package/dist/src/ui/tui/ink-ui.d.ts +62 -0
- package/dist/src/ui/tui/ink-ui.js +142 -0
- package/dist/src/ui/tui/primitives/CardLayout.d.ts +12 -0
- package/dist/src/ui/tui/primitives/CardLayout.js +9 -0
- package/dist/src/ui/tui/primitives/ConfirmationInput.d.ts +13 -0
- package/dist/src/ui/tui/primitives/ConfirmationInput.js +35 -0
- package/dist/src/ui/tui/primitives/DissolveTransition.d.ts +21 -0
- package/dist/src/ui/tui/primitives/DissolveTransition.js +143 -0
- package/dist/src/ui/tui/primitives/EventPlanViewer.d.ts +9 -0
- package/dist/src/ui/tui/primitives/EventPlanViewer.js +9 -0
- package/dist/src/ui/tui/primitives/KagiSmallWebViewer.d.ts +7 -0
- package/dist/src/ui/tui/primitives/KagiSmallWebViewer.js +101 -0
- package/dist/src/ui/tui/primitives/LoadingBox.d.ts +8 -0
- package/dist/src/ui/tui/primitives/LoadingBox.js +9 -0
- package/dist/src/ui/tui/primitives/LogViewer.d.ts +11 -0
- package/dist/src/ui/tui/primitives/LogViewer.js +55 -0
- package/dist/src/ui/tui/primitives/PickerMenu.d.ts +20 -0
- package/dist/src/ui/tui/primitives/PickerMenu.js +212 -0
- package/dist/src/ui/tui/primitives/ProgressList.d.ts +15 -0
- package/dist/src/ui/tui/primitives/ProgressList.js +29 -0
- package/dist/src/ui/tui/primitives/PromptLabel.d.ts +11 -0
- package/dist/src/ui/tui/primitives/PromptLabel.js +12 -0
- package/dist/src/ui/tui/primitives/ReportViewer.d.ts +12 -0
- package/dist/src/ui/tui/primitives/ReportViewer.js +99 -0
- package/dist/src/ui/tui/primitives/ScreenErrorBoundary.d.ts +26 -0
- package/dist/src/ui/tui/primitives/ScreenErrorBoundary.js +29 -0
- package/dist/src/ui/tui/primitives/SlashCommandInput.d.ts +21 -0
- package/dist/src/ui/tui/primitives/SlashCommandInput.js +85 -0
- package/dist/src/ui/tui/primitives/SnakeGame.d.ts +1 -0
- package/dist/src/ui/tui/primitives/SnakeGame.js +1 -0
- package/dist/src/ui/tui/primitives/SplitView.d.ts +11 -0
- package/dist/src/ui/tui/primitives/SplitView.js +8 -0
- package/dist/src/ui/tui/primitives/TabContainer.d.ts +18 -0
- package/dist/src/ui/tui/primitives/TabContainer.js +30 -0
- package/dist/src/ui/tui/primitives/index.d.ts +23 -0
- package/dist/src/ui/tui/primitives/index.js +19 -0
- package/dist/src/ui/tui/router.d.ts +61 -0
- package/dist/src/ui/tui/router.js +104 -0
- package/dist/src/ui/tui/screen-registry.d.ts +19 -0
- package/dist/src/ui/tui/screen-registry.js +56 -0
- package/dist/src/ui/tui/screens/ActivationOptionsScreen.d.ts +12 -0
- package/dist/src/ui/tui/screens/ActivationOptionsScreen.js +57 -0
- package/dist/src/ui/tui/screens/AuthScreen.d.ts +18 -0
- package/dist/src/ui/tui/screens/AuthScreen.js +107 -0
- package/dist/src/ui/tui/screens/ChecklistScreen.d.ts +22 -0
- package/dist/src/ui/tui/screens/ChecklistScreen.js +122 -0
- package/dist/src/ui/tui/screens/DataIngestionCheckScreen.d.ts +24 -0
- package/dist/src/ui/tui/screens/DataIngestionCheckScreen.js +113 -0
- package/dist/src/ui/tui/screens/DataSetupScreen.d.ts +17 -0
- package/dist/src/ui/tui/screens/DataSetupScreen.js +73 -0
- package/dist/src/ui/tui/screens/IntroScreen.d.ts +16 -0
- package/dist/src/ui/tui/screens/IntroScreen.js +86 -0
- package/dist/src/ui/tui/screens/LoginScreen.d.ts +15 -0
- package/dist/src/ui/tui/screens/LoginScreen.js +65 -0
- package/dist/src/ui/tui/screens/LogoutScreen.d.ts +12 -0
- package/dist/src/ui/tui/screens/LogoutScreen.js +28 -0
- package/dist/src/ui/tui/screens/McpScreen.d.ts +26 -0
- package/dist/src/ui/tui/screens/McpScreen.js +148 -0
- package/dist/src/ui/tui/screens/OutageScreen.d.ts +10 -0
- package/dist/src/ui/tui/screens/OutageScreen.js +17 -0
- package/dist/src/ui/tui/screens/OutroScreen.d.ts +11 -0
- package/dist/src/ui/tui/screens/OutroScreen.js +69 -0
- package/dist/src/ui/tui/screens/RegionSelectScreen.d.ts +17 -0
- package/dist/src/ui/tui/screens/RegionSelectScreen.js +40 -0
- package/dist/src/ui/tui/screens/RunScreen.d.ts +16 -0
- package/dist/src/ui/tui/screens/RunScreen.js +212 -0
- package/dist/src/ui/tui/screens/SettingsOverrideScreen.d.ts +10 -0
- package/dist/src/ui/tui/screens/SettingsOverrideScreen.js +23 -0
- package/dist/src/ui/tui/screens/SetupScreen.d.ts +13 -0
- package/dist/src/ui/tui/screens/SetupScreen.js +73 -0
- package/dist/src/ui/tui/screens/SlackScreen.d.ts +25 -0
- package/dist/src/ui/tui/screens/SlackScreen.js +97 -0
- package/dist/src/ui/tui/services/mcp-installer.d.ts +25 -0
- package/dist/src/ui/tui/services/mcp-installer.js +82 -0
- package/dist/src/ui/tui/start-tui.d.ts +10 -0
- package/dist/src/ui/tui/start-tui.js +50 -0
- package/dist/src/ui/tui/store.d.ts +231 -0
- package/dist/src/ui/tui/store.js +568 -0
- package/dist/src/ui/tui/styles.d.ts +31 -0
- package/dist/src/ui/tui/styles.js +33 -0
- package/dist/src/ui/wizard-ui.d.ts +110 -0
- package/dist/src/ui/wizard-ui.js +18 -0
- package/dist/src/utils/ampli-settings.d.ts +37 -0
- package/dist/src/utils/ampli-settings.js +182 -0
- package/dist/src/utils/analytics.d.ts +35 -0
- package/dist/src/utils/analytics.js +133 -0
- package/dist/src/utils/anthropic-status.d.ts +17 -0
- package/dist/src/utils/anthropic-status.js +51 -0
- package/dist/src/utils/api-key-store.d.ts +35 -0
- package/dist/src/utils/api-key-store.js +176 -0
- package/dist/src/utils/bash.d.ts +2 -0
- package/dist/src/utils/bash.js +53 -0
- package/dist/src/utils/custom-headers.d.ts +9 -0
- package/dist/src/utils/custom-headers.js +23 -0
- package/dist/src/utils/debug.d.ts +23 -0
- package/dist/src/utils/debug.js +86 -0
- package/dist/src/utils/environment.d.ts +4 -0
- package/dist/src/utils/environment.js +76 -0
- package/dist/src/utils/file-utils.d.ts +2 -0
- package/dist/src/utils/file-utils.js +16 -0
- package/dist/src/utils/get-api-key.d.ts +17 -0
- package/dist/src/utils/get-api-key.js +50 -0
- package/dist/src/utils/logging.d.ts +9 -0
- package/dist/src/utils/logging.js +48 -0
- package/dist/src/utils/oauth.d.ts +53 -0
- package/dist/src/utils/oauth.js +354 -0
- package/dist/src/utils/package-json.d.ts +25 -0
- package/dist/src/utils/package-json.js +26 -0
- package/dist/src/utils/package-manager.d.ts +21 -0
- package/dist/src/utils/package-manager.js +208 -0
- package/dist/src/utils/semver.d.ts +21 -0
- package/dist/src/utils/semver.js +61 -0
- package/dist/src/utils/setup-utils.d.ts +82 -0
- package/dist/src/utils/setup-utils.js +467 -0
- package/dist/src/utils/shell-completions.d.ts +10 -0
- package/dist/src/utils/shell-completions.js +199 -0
- package/dist/src/utils/string.d.ts +1 -0
- package/dist/src/utils/string.js +8 -0
- package/dist/src/utils/types.d.ts +72 -0
- package/dist/src/utils/types.js +2 -0
- package/dist/src/utils/urls.d.ts +14 -0
- package/dist/src/utils/urls.js +69 -0
- package/dist/src/utils/vendor/is-unicorn-supported.d.ts +1 -0
- package/dist/src/utils/vendor/is-unicorn-supported.js +23 -0
- package/dist/src/utils/wizard-abort.d.ts +13 -0
- package/dist/src/utils/wizard-abort.js +56 -0
- package/man/amplitude-wizard.1 +170 -0
- package/package.json +144 -0
|
@@ -0,0 +1,305 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.getDjangoVersionBucket = exports.DjangoProjectType = void 0;
|
|
40
|
+
exports.getDjangoVersion = getDjangoVersion;
|
|
41
|
+
exports.getDjangoProjectType = getDjangoProjectType;
|
|
42
|
+
exports.getDjangoProjectTypeName = getDjangoProjectTypeName;
|
|
43
|
+
exports.findDjangoSettingsFile = findDjangoSettingsFile;
|
|
44
|
+
exports.findDjangoUrlsFile = findDjangoUrlsFile;
|
|
45
|
+
const fast_glob_1 = __importDefault(require("fast-glob"));
|
|
46
|
+
const ui_1 = require("../../ui");
|
|
47
|
+
const semver_1 = require("../../utils/semver");
|
|
48
|
+
const fs = __importStar(require("node:fs"));
|
|
49
|
+
const path = __importStar(require("node:path"));
|
|
50
|
+
var DjangoProjectType;
|
|
51
|
+
(function (DjangoProjectType) {
|
|
52
|
+
DjangoProjectType["STANDARD"] = "standard";
|
|
53
|
+
DjangoProjectType["DRF"] = "drf";
|
|
54
|
+
DjangoProjectType["WAGTAIL"] = "wagtail";
|
|
55
|
+
DjangoProjectType["CHANNELS"] = "channels";
|
|
56
|
+
})(DjangoProjectType || (exports.DjangoProjectType = DjangoProjectType = {}));
|
|
57
|
+
const IGNORE_PATTERNS = [
|
|
58
|
+
'**/node_modules/**',
|
|
59
|
+
'**/dist/**',
|
|
60
|
+
'**/build/**',
|
|
61
|
+
'**/venv/**',
|
|
62
|
+
'**/.venv/**',
|
|
63
|
+
'**/env/**',
|
|
64
|
+
'**/.env/**',
|
|
65
|
+
'**/__pycache__/**',
|
|
66
|
+
'**/migrations/**',
|
|
67
|
+
];
|
|
68
|
+
/**
|
|
69
|
+
* Get Django version bucket for analytics
|
|
70
|
+
*/
|
|
71
|
+
exports.getDjangoVersionBucket = (0, semver_1.createVersionBucket)();
|
|
72
|
+
/**
|
|
73
|
+
* Extract Django version from requirements files or pyproject.toml
|
|
74
|
+
*/
|
|
75
|
+
async function getDjangoVersion(options) {
|
|
76
|
+
const { installDir } = options;
|
|
77
|
+
// Check requirements files
|
|
78
|
+
const requirementsFiles = await (0, fast_glob_1.default)(['**/requirements*.txt', '**/pyproject.toml', '**/setup.py', '**/Pipfile'], {
|
|
79
|
+
cwd: installDir,
|
|
80
|
+
ignore: IGNORE_PATTERNS,
|
|
81
|
+
});
|
|
82
|
+
for (const reqFile of requirementsFiles) {
|
|
83
|
+
try {
|
|
84
|
+
const content = fs.readFileSync(path.join(installDir, reqFile), 'utf-8');
|
|
85
|
+
// Try to extract version from requirements.txt format (Django==4.2.0 or Django>=4.0)
|
|
86
|
+
const requirementsMatch = content.match(/[Dd]jango[=<>~!]+([0-9]+\.[0-9]+(?:\.[0-9]+)?)/);
|
|
87
|
+
if (requirementsMatch) {
|
|
88
|
+
return requirementsMatch[1];
|
|
89
|
+
}
|
|
90
|
+
// Try to extract from pyproject.toml format
|
|
91
|
+
const pyprojectMatch = content.match(/[Dd]jango["\s]*[=<>~!]+\s*["']?([0-9]+\.[0-9]+(?:\.[0-9]+)?)/);
|
|
92
|
+
if (pyprojectMatch) {
|
|
93
|
+
return pyprojectMatch[1];
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
catch {
|
|
97
|
+
// Skip files that can't be read
|
|
98
|
+
continue;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
return undefined;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Check if Django REST Framework is installed
|
|
105
|
+
*/
|
|
106
|
+
async function hasDRF({ installDir, }) {
|
|
107
|
+
const requirementsFiles = await (0, fast_glob_1.default)(['**/requirements*.txt', '**/pyproject.toml', '**/Pipfile'], {
|
|
108
|
+
cwd: installDir,
|
|
109
|
+
ignore: IGNORE_PATTERNS,
|
|
110
|
+
});
|
|
111
|
+
for (const reqFile of requirementsFiles) {
|
|
112
|
+
try {
|
|
113
|
+
const content = fs.readFileSync(path.join(installDir, reqFile), 'utf-8');
|
|
114
|
+
if (content.includes('djangorestframework')) {
|
|
115
|
+
return true;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
catch {
|
|
119
|
+
continue;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
// Also check INSTALLED_APPS in settings
|
|
123
|
+
const settingsFiles = await (0, fast_glob_1.default)('**/settings.py', {
|
|
124
|
+
cwd: installDir,
|
|
125
|
+
ignore: IGNORE_PATTERNS,
|
|
126
|
+
});
|
|
127
|
+
for (const settingsFile of settingsFiles) {
|
|
128
|
+
try {
|
|
129
|
+
const content = fs.readFileSync(path.join(installDir, settingsFile), 'utf-8');
|
|
130
|
+
if (content.includes('rest_framework')) {
|
|
131
|
+
return true;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
catch {
|
|
135
|
+
continue;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
return false;
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Check if Wagtail is installed
|
|
142
|
+
*/
|
|
143
|
+
async function hasWagtail({ installDir, }) {
|
|
144
|
+
const requirementsFiles = await (0, fast_glob_1.default)(['**/requirements*.txt', '**/pyproject.toml', '**/Pipfile'], {
|
|
145
|
+
cwd: installDir,
|
|
146
|
+
ignore: IGNORE_PATTERNS,
|
|
147
|
+
});
|
|
148
|
+
for (const reqFile of requirementsFiles) {
|
|
149
|
+
try {
|
|
150
|
+
const content = fs.readFileSync(path.join(installDir, reqFile), 'utf-8');
|
|
151
|
+
if (content.includes('wagtail')) {
|
|
152
|
+
return true;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
catch {
|
|
156
|
+
continue;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
return false;
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Check if Django Channels is installed
|
|
163
|
+
*/
|
|
164
|
+
async function hasChannels({ installDir, }) {
|
|
165
|
+
const requirementsFiles = await (0, fast_glob_1.default)(['**/requirements*.txt', '**/pyproject.toml', '**/Pipfile'], {
|
|
166
|
+
cwd: installDir,
|
|
167
|
+
ignore: IGNORE_PATTERNS,
|
|
168
|
+
});
|
|
169
|
+
for (const reqFile of requirementsFiles) {
|
|
170
|
+
try {
|
|
171
|
+
const content = fs.readFileSync(path.join(installDir, reqFile), 'utf-8');
|
|
172
|
+
if (content.includes('channels')) {
|
|
173
|
+
return true;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
catch {
|
|
177
|
+
continue;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
return false;
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Detect Django project type
|
|
184
|
+
*/
|
|
185
|
+
async function getDjangoProjectType(options) {
|
|
186
|
+
const { installDir } = options;
|
|
187
|
+
// Check for Wagtail first (CMS)
|
|
188
|
+
if (await hasWagtail({ installDir })) {
|
|
189
|
+
(0, ui_1.getUI)().setDetectedFramework('Django with Wagtail CMS');
|
|
190
|
+
return DjangoProjectType.WAGTAIL;
|
|
191
|
+
}
|
|
192
|
+
// Check for Django REST Framework
|
|
193
|
+
if (await hasDRF({ installDir })) {
|
|
194
|
+
(0, ui_1.getUI)().setDetectedFramework('Django REST Framework');
|
|
195
|
+
return DjangoProjectType.DRF;
|
|
196
|
+
}
|
|
197
|
+
// Check for Django Channels
|
|
198
|
+
if (await hasChannels({ installDir })) {
|
|
199
|
+
(0, ui_1.getUI)().setDetectedFramework('Django Channels');
|
|
200
|
+
return DjangoProjectType.CHANNELS;
|
|
201
|
+
}
|
|
202
|
+
// Default to standard Django
|
|
203
|
+
(0, ui_1.getUI)().setDetectedFramework('Django');
|
|
204
|
+
return DjangoProjectType.STANDARD;
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Get human-readable name for Django project type
|
|
208
|
+
*/
|
|
209
|
+
function getDjangoProjectTypeName(projectType) {
|
|
210
|
+
switch (projectType) {
|
|
211
|
+
case DjangoProjectType.STANDARD:
|
|
212
|
+
return 'Standard Django';
|
|
213
|
+
case DjangoProjectType.DRF:
|
|
214
|
+
return 'Django REST Framework';
|
|
215
|
+
case DjangoProjectType.WAGTAIL:
|
|
216
|
+
return 'Wagtail CMS';
|
|
217
|
+
case DjangoProjectType.CHANNELS:
|
|
218
|
+
return 'Django Channels';
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Find the main Django settings file
|
|
223
|
+
*/
|
|
224
|
+
async function findDjangoSettingsFile(options) {
|
|
225
|
+
const { installDir } = options;
|
|
226
|
+
// Look for settings.py files
|
|
227
|
+
const settingsFiles = await (0, fast_glob_1.default)('**/settings.py', {
|
|
228
|
+
cwd: installDir,
|
|
229
|
+
ignore: IGNORE_PATTERNS,
|
|
230
|
+
});
|
|
231
|
+
if (settingsFiles.length === 0) {
|
|
232
|
+
// Try settings/__init__.py for split settings
|
|
233
|
+
const splitSettingsFiles = await (0, fast_glob_1.default)('**/settings/__init__.py', {
|
|
234
|
+
cwd: installDir,
|
|
235
|
+
ignore: IGNORE_PATTERNS,
|
|
236
|
+
});
|
|
237
|
+
if (splitSettingsFiles.length > 0) {
|
|
238
|
+
return splitSettingsFiles[0];
|
|
239
|
+
}
|
|
240
|
+
return undefined;
|
|
241
|
+
}
|
|
242
|
+
// If multiple settings files, prefer the one next to manage.py or in root
|
|
243
|
+
if (settingsFiles.length === 1) {
|
|
244
|
+
return settingsFiles[0];
|
|
245
|
+
}
|
|
246
|
+
// Try to find the main settings file by looking for ROOT_URLCONF
|
|
247
|
+
for (const settingsFile of settingsFiles) {
|
|
248
|
+
try {
|
|
249
|
+
const content = fs.readFileSync(path.join(installDir, settingsFile), 'utf-8');
|
|
250
|
+
if (content.includes('ROOT_URLCONF')) {
|
|
251
|
+
return settingsFile;
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
catch {
|
|
255
|
+
continue;
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
// Default to first found
|
|
259
|
+
return settingsFiles[0];
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Find the main Django urls.py file
|
|
263
|
+
*/
|
|
264
|
+
async function findDjangoUrlsFile(options) {
|
|
265
|
+
const { installDir } = options;
|
|
266
|
+
// First, try to find the root urls.py referenced in settings
|
|
267
|
+
const settingsFile = await findDjangoSettingsFile(options);
|
|
268
|
+
if (settingsFile) {
|
|
269
|
+
try {
|
|
270
|
+
const settingsContent = fs.readFileSync(path.join(installDir, settingsFile), 'utf-8');
|
|
271
|
+
const urlconfMatch = settingsContent.match(/ROOT_URLCONF\s*=\s*['"]([^'"]+)['"]/);
|
|
272
|
+
if (urlconfMatch) {
|
|
273
|
+
const urlconfPath = urlconfMatch[1].replace(/\./g, '/') + '.py';
|
|
274
|
+
const fullPath = path.join(installDir, urlconfPath);
|
|
275
|
+
if (fs.existsSync(fullPath)) {
|
|
276
|
+
return urlconfPath;
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
catch {
|
|
281
|
+
// Fall through to glob search
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
// Fallback to glob search
|
|
285
|
+
const urlsFiles = await (0, fast_glob_1.default)('**/urls.py', {
|
|
286
|
+
cwd: installDir,
|
|
287
|
+
ignore: [...IGNORE_PATTERNS, '**/admin/**'],
|
|
288
|
+
});
|
|
289
|
+
if (urlsFiles.length === 0) {
|
|
290
|
+
return undefined;
|
|
291
|
+
}
|
|
292
|
+
// Prefer urls.py files that contain urlpatterns
|
|
293
|
+
for (const urlsFile of urlsFiles) {
|
|
294
|
+
try {
|
|
295
|
+
const content = fs.readFileSync(path.join(installDir, urlsFile), 'utf-8');
|
|
296
|
+
if (content.includes('urlpatterns')) {
|
|
297
|
+
return urlsFile;
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
catch {
|
|
301
|
+
continue;
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
return urlsFiles[0];
|
|
305
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { FrameworkConfig } from '../../lib/framework-config';
|
|
2
|
+
import { FastAPIProjectType } from './utils';
|
|
3
|
+
interface FastAPIContext extends Record<string, unknown> {
|
|
4
|
+
projectType?: FastAPIProjectType;
|
|
5
|
+
appFile?: string;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* FastAPI framework configuration for the universal agent runner
|
|
9
|
+
*/
|
|
10
|
+
export declare const FASTAPI_AGENT_CONFIG: FrameworkConfig<FastAPIContext>;
|
|
11
|
+
export {};
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.FASTAPI_AGENT_CONFIG = void 0;
|
|
40
|
+
const framework_config_1 = require("../../lib/framework-config");
|
|
41
|
+
const package_manager_detection_1 = require("../../lib/package-manager-detection");
|
|
42
|
+
const constants_1 = require("../../lib/constants");
|
|
43
|
+
const utils_1 = require("./utils");
|
|
44
|
+
const fast_glob_1 = __importDefault(require("fast-glob"));
|
|
45
|
+
const fs = __importStar(require("node:fs"));
|
|
46
|
+
const path = __importStar(require("node:path"));
|
|
47
|
+
/**
|
|
48
|
+
* FastAPI framework configuration for the universal agent runner
|
|
49
|
+
*/
|
|
50
|
+
exports.FASTAPI_AGENT_CONFIG = {
|
|
51
|
+
metadata: {
|
|
52
|
+
name: 'FastAPI',
|
|
53
|
+
integration: constants_1.Integration.fastapi,
|
|
54
|
+
docsUrl: 'https://amplitude.com/docs/sdks/analytics/python',
|
|
55
|
+
unsupportedVersionDocsUrl: 'https://amplitude.com/docs/sdks/analytics/python',
|
|
56
|
+
gatherContext: async (options) => {
|
|
57
|
+
const projectType = await (0, utils_1.getFastAPIProjectType)(options);
|
|
58
|
+
const appFile = await (0, utils_1.findFastAPIAppFile)(options);
|
|
59
|
+
return { projectType, appFile };
|
|
60
|
+
},
|
|
61
|
+
},
|
|
62
|
+
detection: {
|
|
63
|
+
packageName: 'fastapi',
|
|
64
|
+
packageDisplayName: 'FastAPI',
|
|
65
|
+
usesPackageJson: false,
|
|
66
|
+
getVersion: (_packageJson) => {
|
|
67
|
+
// For FastAPI, we don't use package.json. Version is extracted separately
|
|
68
|
+
// from requirements.txt or pyproject.toml in the wizard entry point
|
|
69
|
+
return undefined;
|
|
70
|
+
},
|
|
71
|
+
getVersionBucket: utils_1.getFastAPIVersionBucket,
|
|
72
|
+
getInstalledVersion: utils_1.getFastAPIVersion,
|
|
73
|
+
detect: async (options) => {
|
|
74
|
+
const { installDir } = options;
|
|
75
|
+
// Note: Django and Flask are checked before FastAPI in INTEGRATION_ORDER,
|
|
76
|
+
// so if we get here, the project is not a Django or Flask project.
|
|
77
|
+
// Check for FastAPI in requirements files
|
|
78
|
+
const requirementsFiles = await (0, fast_glob_1.default)([
|
|
79
|
+
'**/requirements*.txt',
|
|
80
|
+
'**/pyproject.toml',
|
|
81
|
+
'**/setup.py',
|
|
82
|
+
'**/Pipfile',
|
|
83
|
+
], {
|
|
84
|
+
cwd: installDir,
|
|
85
|
+
ignore: ['**/venv/**', '**/.venv/**', '**/env/**', '**/.env/**'],
|
|
86
|
+
});
|
|
87
|
+
for (const reqFile of requirementsFiles) {
|
|
88
|
+
try {
|
|
89
|
+
const content = fs.readFileSync(path.join(installDir, reqFile), 'utf-8');
|
|
90
|
+
// Check for fastapi package (case-insensitive)
|
|
91
|
+
// Match "fastapi" as a standalone package
|
|
92
|
+
if (/^fastapi([<>=~!]|$|\s)/im.test(content) ||
|
|
93
|
+
/["']fastapi["']/i.test(content)) {
|
|
94
|
+
return true;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
catch {
|
|
98
|
+
continue;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
// Check for FastAPI app patterns in Python files
|
|
102
|
+
const pyFiles = await (0, fast_glob_1.default)(['**/main.py', '**/app.py', '**/application.py', '**/__init__.py'], {
|
|
103
|
+
cwd: installDir,
|
|
104
|
+
ignore: [
|
|
105
|
+
'**/venv/**',
|
|
106
|
+
'**/.venv/**',
|
|
107
|
+
'**/env/**',
|
|
108
|
+
'**/.env/**',
|
|
109
|
+
'**/__pycache__/**',
|
|
110
|
+
],
|
|
111
|
+
});
|
|
112
|
+
for (const pyFile of pyFiles) {
|
|
113
|
+
try {
|
|
114
|
+
const content = fs.readFileSync(path.join(installDir, pyFile), 'utf-8');
|
|
115
|
+
if (content.includes('from fastapi import') ||
|
|
116
|
+
content.includes('import fastapi') ||
|
|
117
|
+
/FastAPI\s*\(/.test(content)) {
|
|
118
|
+
return true;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
catch {
|
|
122
|
+
continue;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
return false;
|
|
126
|
+
},
|
|
127
|
+
detectPackageManager: package_manager_detection_1.detectPythonPackageManagers,
|
|
128
|
+
},
|
|
129
|
+
environment: {
|
|
130
|
+
uploadToHosting: false,
|
|
131
|
+
getEnvVars: (apiKey, _host) => ({
|
|
132
|
+
AMPLITUDE_API_KEY: apiKey,
|
|
133
|
+
}),
|
|
134
|
+
},
|
|
135
|
+
analytics: {
|
|
136
|
+
getTags: (context) => {
|
|
137
|
+
const projectType = context.projectType;
|
|
138
|
+
return {
|
|
139
|
+
projectType: projectType || 'unknown',
|
|
140
|
+
};
|
|
141
|
+
},
|
|
142
|
+
},
|
|
143
|
+
prompts: {
|
|
144
|
+
packageInstallation: framework_config_1.PYTHON_PACKAGE_INSTALLATION,
|
|
145
|
+
projectTypeDetection: 'This is a Python/FastAPI project. Look for requirements.txt, pyproject.toml, setup.py, Pipfile, or main.py/app.py to confirm.',
|
|
146
|
+
getAdditionalContextLines: (context) => {
|
|
147
|
+
const projectType = context.projectType;
|
|
148
|
+
const projectTypeName = projectType
|
|
149
|
+
? (0, utils_1.getFastAPIProjectTypeName)(projectType)
|
|
150
|
+
: 'unknown';
|
|
151
|
+
// Map project type to framework ID for MCP docs resource
|
|
152
|
+
const frameworkIdMap = {
|
|
153
|
+
[utils_1.FastAPIProjectType.STANDARD]: 'fastapi',
|
|
154
|
+
[utils_1.FastAPIProjectType.ROUTER]: 'fastapi',
|
|
155
|
+
[utils_1.FastAPIProjectType.FULLSTACK]: 'fastapi',
|
|
156
|
+
};
|
|
157
|
+
const frameworkId = projectType ? frameworkIdMap[projectType] : 'fastapi';
|
|
158
|
+
const lines = [
|
|
159
|
+
`Project type: ${projectTypeName}`,
|
|
160
|
+
`Framework docs ID: ${frameworkId} (use amplitude://docs/frameworks/${frameworkId} for documentation)`,
|
|
161
|
+
];
|
|
162
|
+
if (context.appFile) {
|
|
163
|
+
lines.push(`App file: ${String(context.appFile)}`);
|
|
164
|
+
}
|
|
165
|
+
return lines;
|
|
166
|
+
},
|
|
167
|
+
},
|
|
168
|
+
ui: {
|
|
169
|
+
successMessage: 'Amplitude integration complete',
|
|
170
|
+
estimatedDurationMinutes: 5,
|
|
171
|
+
getOutroChanges: (context) => {
|
|
172
|
+
const projectType = context.projectType;
|
|
173
|
+
const projectTypeName = projectType
|
|
174
|
+
? (0, utils_1.getFastAPIProjectTypeName)(projectType)
|
|
175
|
+
: 'FastAPI';
|
|
176
|
+
return [
|
|
177
|
+
`Analyzed your ${projectTypeName} project structure`,
|
|
178
|
+
`Installed the Amplitude Python package`,
|
|
179
|
+
`Configured Amplitude in your FastAPI application`,
|
|
180
|
+
`Added Amplitude initialization with lifespan event handling`,
|
|
181
|
+
];
|
|
182
|
+
},
|
|
183
|
+
getOutroNextSteps: () => [
|
|
184
|
+
'Start your FastAPI development server to see Amplitude in action',
|
|
185
|
+
'Visit your Amplitude dashboard to see incoming events',
|
|
186
|
+
'Use amplitude.identify() to associate events with users',
|
|
187
|
+
],
|
|
188
|
+
},
|
|
189
|
+
};
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { WizardOptions } from '../../utils/types';
|
|
2
|
+
export declare enum FastAPIProjectType {
|
|
3
|
+
STANDARD = "standard",// Basic FastAPI app
|
|
4
|
+
ROUTER = "router",// FastAPI with APIRouter
|
|
5
|
+
FULLSTACK = "fullstack"
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Get FastAPI version bucket for analytics
|
|
9
|
+
*/
|
|
10
|
+
export declare function getFastAPIVersionBucket(version: string | undefined): string;
|
|
11
|
+
/**
|
|
12
|
+
* Extract FastAPI version from requirements files or pyproject.toml
|
|
13
|
+
*/
|
|
14
|
+
export declare function getFastAPIVersion(options: Pick<WizardOptions, 'installDir'>): Promise<string | undefined>;
|
|
15
|
+
/**
|
|
16
|
+
* Detect FastAPI project type
|
|
17
|
+
*/
|
|
18
|
+
export declare function getFastAPIProjectType(options: WizardOptions): Promise<FastAPIProjectType>;
|
|
19
|
+
/**
|
|
20
|
+
* Get human-readable name for FastAPI project type
|
|
21
|
+
*/
|
|
22
|
+
export declare function getFastAPIProjectTypeName(projectType: FastAPIProjectType): string;
|
|
23
|
+
/**
|
|
24
|
+
* Find the main FastAPI app file
|
|
25
|
+
*/
|
|
26
|
+
export declare function findFastAPIAppFile(options: Pick<WizardOptions, 'installDir'>): Promise<string | undefined>;
|