@posthog/wizard 1.22.0 → 1.24.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/README.md +37 -0
  2. package/dist/bin.js +35 -41
  3. package/dist/bin.js.map +1 -1
  4. package/dist/src/__tests__/cli.test.js +91 -0
  5. package/dist/src/__tests__/cli.test.js.map +1 -1
  6. package/dist/src/__tests__/run.test.js +4 -5
  7. package/dist/src/__tests__/run.test.js.map +1 -1
  8. package/dist/src/astro/astro-wizard.js +1 -0
  9. package/dist/src/astro/astro-wizard.js.map +1 -1
  10. package/dist/src/lib/agent-interface.d.ts +0 -1
  11. package/dist/src/lib/agent-interface.js +2 -1
  12. package/dist/src/lib/agent-interface.js.map +1 -1
  13. package/dist/src/lib/agent-runner.js +2 -2
  14. package/dist/src/lib/agent-runner.js.map +1 -1
  15. package/dist/src/lib/constants.d.ts +0 -7
  16. package/dist/src/lib/constants.js +1 -10
  17. package/dist/src/lib/constants.js.map +1 -1
  18. package/dist/src/lib/framework-config.d.ts +5 -0
  19. package/dist/src/lib/framework-config.js.map +1 -1
  20. package/dist/src/nextjs/nextjs-wizard-agent.js +56 -0
  21. package/dist/src/nextjs/nextjs-wizard-agent.js.map +1 -1
  22. package/dist/src/react/react-wizard.js +1 -0
  23. package/dist/src/react/react-wizard.js.map +1 -1
  24. package/dist/src/react-native/react-native-wizard.js +2 -3
  25. package/dist/src/react-native/react-native-wizard.js.map +1 -1
  26. package/dist/src/run.d.ts +2 -0
  27. package/dist/src/run.js +6 -62
  28. package/dist/src/run.js.map +1 -1
  29. package/dist/src/steps/add-mcp-server-to-clients/index.d.ts +2 -1
  30. package/dist/src/steps/add-mcp-server-to-clients/index.js +6 -1
  31. package/dist/src/steps/add-mcp-server-to-clients/index.js.map +1 -1
  32. package/dist/src/svelte/svelte-wizard.js +1 -0
  33. package/dist/src/svelte/svelte-wizard.js.map +1 -1
  34. package/dist/src/utils/clack-utils.d.ts +6 -4
  35. package/dist/src/utils/clack-utils.js +52 -7
  36. package/dist/src/utils/clack-utils.js.map +1 -1
  37. package/dist/src/utils/types.d.ts +8 -0
  38. package/dist/src/utils/types.js.map +1 -1
  39. package/dist/src/utils/urls.d.ts +1 -0
  40. package/dist/src/utils/urls.js +11 -1
  41. package/dist/src/utils/urls.js.map +1 -1
  42. package/package.json +1 -1
  43. package/dist/src/nextjs/docs.d.ts +0 -12
  44. package/dist/src/nextjs/docs.js +0 -272
  45. package/dist/src/nextjs/docs.js.map +0 -1
  46. package/dist/src/nextjs/event-setup.d.ts +0 -2
  47. package/dist/src/nextjs/event-setup.js +0 -390
  48. package/dist/src/nextjs/event-setup.js.map +0 -1
  49. package/dist/src/nextjs/nextjs-wizard.d.ts +0 -2
  50. package/dist/src/nextjs/nextjs-wizard.js +0 -190
  51. package/dist/src/nextjs/nextjs-wizard.js.map +0 -1
package/dist/src/run.js CHANGED
@@ -1,44 +1,10 @@
1
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
2
  var __importDefault = (this && this.__importDefault) || function (mod) {
36
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
37
4
  };
38
5
  Object.defineProperty(exports, "__esModule", { value: true });
39
6
  exports.runWizard = runWizard;
40
7
  const clack_utils_1 = require("./utils/clack-utils");
41
- const nextjs_wizard_1 = require("./nextjs/nextjs-wizard");
42
8
  const nextjs_wizard_agent_1 = require("./nextjs/nextjs-wizard-agent");
43
9
  const constants_1 = require("./lib/constants");
44
10
  const environment_1 = require("./utils/environment");
@@ -53,8 +19,6 @@ const astro_wizard_1 = require("./astro/astro-wizard");
53
19
  const events_1 = require("events");
54
20
  const chalk_1 = __importDefault(require("chalk"));
55
21
  const errors_1 = require("./utils/errors");
56
- const package_json_1 = require("./utils/package-json");
57
- const semver = __importStar(require("semver"));
58
22
  events_1.EventEmitter.defaultMaxListeners = 50;
59
23
  async function runWizard(argv) {
60
24
  const finalArgs = {
@@ -81,14 +45,19 @@ async function runWizard(argv) {
81
45
  default: finalArgs.default ?? false,
82
46
  signup: finalArgs.signup ?? false,
83
47
  localMcp: finalArgs.localMcp ?? false,
48
+ ci: finalArgs.ci ?? false,
49
+ apiKey: finalArgs.apiKey,
84
50
  };
85
51
  clack_1.default.intro(`Welcome to the PostHog setup wizard ✨`);
52
+ if (wizardOptions.ci) {
53
+ clack_1.default.log.info(chalk_1.default.dim('Running in CI mode'));
54
+ }
86
55
  const integration = finalArgs.integration ?? (await getIntegrationForSetup(wizardOptions));
87
56
  analytics_1.analytics.setTag('integration', integration);
88
57
  try {
89
58
  switch (integration) {
90
59
  case constants_1.Integration.nextjs:
91
- await chooseNextjsWizard(wizardOptions);
60
+ await (0, nextjs_wizard_agent_1.runNextjsWizardAgent)(wizardOptions);
92
61
  break;
93
62
  case constants_1.Integration.react:
94
63
  await (0, react_wizard_1.runReactWizard)(wizardOptions);
@@ -149,29 +118,4 @@ async function getIntegrationForSetup(options) {
149
118
  }));
150
119
  return integration;
151
120
  }
152
- async function chooseNextjsWizard(options) {
153
- try {
154
- const packageJson = await (0, clack_utils_1.getPackageDotJson)(options);
155
- const nextVersion = (0, package_json_1.getPackageVersion)('next', packageJson);
156
- // If Next.js < 15, use legacy wizard
157
- if (nextVersion) {
158
- const coercedVersion = semver.coerce(nextVersion);
159
- if (coercedVersion && semver.lt(coercedVersion, '15.3.0')) {
160
- await (0, nextjs_wizard_1.runNextjsWizard)(options);
161
- return;
162
- }
163
- }
164
- // Next.js >= 15 - check feature flag to determine which wizard to use
165
- const flagValue = await analytics_1.analytics.getFeatureFlag(constants_1.FeatureFlagDefinition.NextV2);
166
- if (flagValue === constants_1.WizardVariant.Agent) {
167
- await (0, nextjs_wizard_agent_1.runNextjsWizardAgent)(options);
168
- }
169
- else {
170
- await (0, nextjs_wizard_1.runNextjsWizard)(options);
171
- }
172
- }
173
- catch (error) {
174
- await (0, nextjs_wizard_1.runNextjsWizard)(options);
175
- }
176
- }
177
121
  //# sourceMappingURL=run.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/run.ts"],"names":[],"mappings":"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","sourcesContent":["import { abortIfCancelled, getPackageDotJson } from './utils/clack-utils';\n\nimport { runNextjsWizard } from './nextjs/nextjs-wizard';\nimport { runNextjsWizardAgent } from './nextjs/nextjs-wizard-agent';\nimport type { CloudRegion, WizardOptions } from './utils/types';\n\nimport {\n getIntegrationDescription,\n Integration,\n FeatureFlagDefinition,\n WizardVariant,\n} from './lib/constants';\nimport { readEnvironment } from './utils/environment';\nimport clack from './utils/clack';\nimport path from 'path';\nimport { INTEGRATION_CONFIG, INTEGRATION_ORDER } from './lib/config';\nimport { runReactWizard } from './react/react-wizard';\nimport { analytics } from './utils/analytics';\nimport { runSvelteWizard } from './svelte/svelte-wizard';\nimport { runReactNativeWizard } from './react-native/react-native-wizard';\nimport { runAstroWizard } from './astro/astro-wizard';\nimport { EventEmitter } from 'events';\nimport chalk from 'chalk';\nimport { RateLimitError } from './utils/errors';\nimport { getPackageVersion } from './utils/package-json';\nimport * as semver from 'semver';\n\nEventEmitter.defaultMaxListeners = 50;\n\ntype Args = {\n integration?: Integration;\n debug?: boolean;\n forceInstall?: boolean;\n installDir?: string;\n region?: CloudRegion;\n default?: boolean;\n signup?: boolean;\n localMcp?: boolean;\n};\n\nexport async function runWizard(argv: Args) {\n const finalArgs = {\n ...argv,\n ...readEnvironment(),\n };\n\n let resolvedInstallDir: string;\n if (finalArgs.installDir) {\n if (path.isAbsolute(finalArgs.installDir)) {\n resolvedInstallDir = finalArgs.installDir;\n } else {\n resolvedInstallDir = path.join(process.cwd(), finalArgs.installDir);\n }\n } else {\n resolvedInstallDir = process.cwd();\n }\n\n const wizardOptions: WizardOptions = {\n debug: finalArgs.debug ?? false,\n forceInstall: finalArgs.forceInstall ?? false,\n installDir: resolvedInstallDir,\n cloudRegion: finalArgs.region ?? undefined,\n default: finalArgs.default ?? false,\n signup: finalArgs.signup ?? false,\n localMcp: finalArgs.localMcp ?? false,\n };\n\n clack.intro(`Welcome to the PostHog setup wizard ✨`);\n\n const integration =\n finalArgs.integration ?? (await getIntegrationForSetup(wizardOptions));\n\n analytics.setTag('integration', integration);\n\n try {\n switch (integration) {\n case Integration.nextjs:\n await chooseNextjsWizard(wizardOptions);\n break;\n case Integration.react:\n await runReactWizard(wizardOptions);\n break;\n case Integration.svelte:\n await runSvelteWizard(wizardOptions);\n break;\n case Integration.reactNative:\n await runReactNativeWizard(wizardOptions);\n break;\n case Integration.astro:\n await runAstroWizard(wizardOptions);\n break;\n default:\n clack.log.error('No setup wizard selected!');\n }\n } catch (error) {\n analytics.captureException(error as Error, {\n integration,\n arguments: JSON.stringify(finalArgs),\n });\n\n await analytics.shutdown('error');\n\n if (error instanceof RateLimitError) {\n clack.log.error('Wizard usage limit reached. Please try again later.');\n } else {\n clack.log.error(\n `Something went wrong. You can read the documentation at ${chalk.cyan(\n `${INTEGRATION_CONFIG[integration].docsUrl}`,\n )} to set up PostHog manually.`,\n );\n }\n process.exit(1);\n }\n}\n\nasync function detectIntegration(\n options: Pick<WizardOptions, 'installDir'>,\n): Promise<Integration | undefined> {\n const integrationConfigs = Object.entries(INTEGRATION_CONFIG).sort(\n ([a], [b]) =>\n INTEGRATION_ORDER.indexOf(a as Integration) -\n INTEGRATION_ORDER.indexOf(b as Integration),\n );\n\n for (const [integration, config] of integrationConfigs) {\n const detected = await config.detect(options);\n if (detected) {\n return integration as Integration;\n }\n }\n}\n\nasync function getIntegrationForSetup(\n options: Pick<WizardOptions, 'installDir'>,\n) {\n const detectedIntegration = await detectIntegration(options);\n\n if (detectedIntegration) {\n clack.log.success(\n `Detected integration: ${getIntegrationDescription(detectedIntegration)}`,\n );\n return detectedIntegration;\n }\n\n const integration: Integration = await abortIfCancelled(\n clack.select({\n message: 'What do you want to set up?',\n options: [\n { value: Integration.nextjs, label: 'Next.js' },\n { value: Integration.astro, label: 'Astro' },\n { value: Integration.react, label: 'React' },\n { value: Integration.svelte, label: 'Svelte' },\n { value: Integration.reactNative, label: 'React Native' },\n ],\n }),\n );\n\n return integration;\n}\n\nasync function chooseNextjsWizard(options: WizardOptions): Promise<void> {\n try {\n const packageJson = await getPackageDotJson(options);\n const nextVersion = getPackageVersion('next', packageJson);\n\n // If Next.js < 15, use legacy wizard\n if (nextVersion) {\n const coercedVersion = semver.coerce(nextVersion);\n if (coercedVersion && semver.lt(coercedVersion, '15.3.0')) {\n await runNextjsWizard(options);\n return;\n }\n }\n\n // Next.js >= 15 - check feature flag to determine which wizard to use\n const flagValue = await analytics.getFeatureFlag(\n FeatureFlagDefinition.NextV2,\n );\n\n if (flagValue === WizardVariant.Agent) {\n await runNextjsWizardAgent(options);\n } else {\n await runNextjsWizard(options);\n }\n } catch (error) {\n await runNextjsWizard(options);\n }\n}\n"]}
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/run.ts"],"names":[],"mappings":"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","sourcesContent":["import { abortIfCancelled } from './utils/clack-utils';\n\nimport { runNextjsWizardAgent } from './nextjs/nextjs-wizard-agent';\nimport type { CloudRegion, WizardOptions } from './utils/types';\n\nimport { getIntegrationDescription, Integration } from './lib/constants';\nimport { readEnvironment } from './utils/environment';\nimport clack from './utils/clack';\nimport path from 'path';\nimport { INTEGRATION_CONFIG, INTEGRATION_ORDER } from './lib/config';\nimport { runReactWizard } from './react/react-wizard';\nimport { analytics } from './utils/analytics';\nimport { runSvelteWizard } from './svelte/svelte-wizard';\nimport { runReactNativeWizard } from './react-native/react-native-wizard';\nimport { runAstroWizard } from './astro/astro-wizard';\nimport { EventEmitter } from 'events';\nimport chalk from 'chalk';\nimport { RateLimitError } from './utils/errors';\n\nEventEmitter.defaultMaxListeners = 50;\n\ntype Args = {\n integration?: Integration;\n debug?: boolean;\n forceInstall?: boolean;\n installDir?: string;\n region?: CloudRegion;\n default?: boolean;\n signup?: boolean;\n localMcp?: boolean;\n ci?: boolean;\n apiKey?: string;\n};\n\nexport async function runWizard(argv: Args) {\n const finalArgs = {\n ...argv,\n ...readEnvironment(),\n };\n\n let resolvedInstallDir: string;\n if (finalArgs.installDir) {\n if (path.isAbsolute(finalArgs.installDir)) {\n resolvedInstallDir = finalArgs.installDir;\n } else {\n resolvedInstallDir = path.join(process.cwd(), finalArgs.installDir);\n }\n } else {\n resolvedInstallDir = process.cwd();\n }\n\n const wizardOptions: WizardOptions = {\n debug: finalArgs.debug ?? false,\n forceInstall: finalArgs.forceInstall ?? false,\n installDir: resolvedInstallDir,\n cloudRegion: finalArgs.region ?? undefined,\n default: finalArgs.default ?? false,\n signup: finalArgs.signup ?? false,\n localMcp: finalArgs.localMcp ?? false,\n ci: finalArgs.ci ?? false,\n apiKey: finalArgs.apiKey,\n };\n\n clack.intro(`Welcome to the PostHog setup wizard ✨`);\n\n if (wizardOptions.ci) {\n clack.log.info(chalk.dim('Running in CI mode'));\n }\n\n const integration =\n finalArgs.integration ?? (await getIntegrationForSetup(wizardOptions));\n\n analytics.setTag('integration', integration);\n\n try {\n switch (integration) {\n case Integration.nextjs:\n await runNextjsWizardAgent(wizardOptions);\n break;\n case Integration.react:\n await runReactWizard(wizardOptions);\n break;\n case Integration.svelte:\n await runSvelteWizard(wizardOptions);\n break;\n case Integration.reactNative:\n await runReactNativeWizard(wizardOptions);\n break;\n case Integration.astro:\n await runAstroWizard(wizardOptions);\n break;\n default:\n clack.log.error('No setup wizard selected!');\n }\n } catch (error) {\n analytics.captureException(error as Error, {\n integration,\n arguments: JSON.stringify(finalArgs),\n });\n\n await analytics.shutdown('error');\n\n if (error instanceof RateLimitError) {\n clack.log.error('Wizard usage limit reached. Please try again later.');\n } else {\n clack.log.error(\n `Something went wrong. You can read the documentation at ${chalk.cyan(\n `${INTEGRATION_CONFIG[integration].docsUrl}`,\n )} to set up PostHog manually.`,\n );\n }\n process.exit(1);\n }\n}\n\nasync function detectIntegration(\n options: Pick<WizardOptions, 'installDir'>,\n): Promise<Integration | undefined> {\n const integrationConfigs = Object.entries(INTEGRATION_CONFIG).sort(\n ([a], [b]) =>\n INTEGRATION_ORDER.indexOf(a as Integration) -\n INTEGRATION_ORDER.indexOf(b as Integration),\n );\n\n for (const [integration, config] of integrationConfigs) {\n const detected = await config.detect(options);\n if (detected) {\n return integration as Integration;\n }\n }\n}\n\nasync function getIntegrationForSetup(\n options: Pick<WizardOptions, 'installDir'>,\n) {\n const detectedIntegration = await detectIntegration(options);\n\n if (detectedIntegration) {\n clack.log.success(\n `Detected integration: ${getIntegrationDescription(detectedIntegration)}`,\n );\n return detectedIntegration;\n }\n\n const integration: Integration = await abortIfCancelled(\n clack.select({\n message: 'What do you want to set up?',\n options: [\n { value: Integration.nextjs, label: 'Next.js' },\n { value: Integration.astro, label: 'Astro' },\n { value: Integration.react, label: 'React' },\n { value: Integration.svelte, label: 'Svelte' },\n { value: Integration.reactNative, label: 'React Native' },\n ],\n }),\n );\n\n return integration;\n}\n"]}
@@ -2,11 +2,12 @@ import type { Integration } from '../../lib/constants';
2
2
  import { MCPClient } from './MCPClient';
3
3
  import type { CloudRegion } from '../../utils/types';
4
4
  export declare const getSupportedClients: () => Promise<MCPClient[]>;
5
- export declare const addMCPServerToClientsStep: ({ integration, cloudRegion, askPermission, local, }: {
5
+ export declare const addMCPServerToClientsStep: ({ integration, cloudRegion, askPermission, local, ci, }: {
6
6
  integration?: Integration;
7
7
  cloudRegion?: CloudRegion;
8
8
  askPermission?: boolean;
9
9
  local?: boolean;
10
+ ci?: boolean;
10
11
  }) => Promise<string[]>;
11
12
  export declare const removeMCPServerFromClientsStep: ({ integration, local, }: {
12
13
  integration?: Integration;
@@ -42,7 +42,12 @@ const getSupportedClients = async () => {
42
42
  return supportedClients;
43
43
  };
44
44
  exports.getSupportedClients = getSupportedClients;
45
- const addMCPServerToClientsStep = async ({ integration, cloudRegion, askPermission = true, local = false, }) => {
45
+ const addMCPServerToClientsStep = async ({ integration, cloudRegion, askPermission = true, local = false, ci = false, }) => {
46
+ // CI mode: skip MCP installation entirely (default to No)
47
+ if (ci) {
48
+ clack_1.default.log.info('Skipping MCP installation (CI mode)');
49
+ return [];
50
+ }
46
51
  const region = cloudRegion ?? (await (0, clack_utils_1.askForCloudRegion)());
47
52
  const hasPermission = askPermission
48
53
  ? await (0, clack_utils_1.abortIfCancelled)(clack_1.default.select({
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/steps/add-mcp-server-to-clients/index.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Integration } from '../../lib/constants';\nimport { traceStep } from '../../telemetry';\nimport { analytics } from '../../utils/analytics';\nimport clack from '../../utils/clack';\nimport chalk from 'chalk';\nimport { abortIfCancelled, askForCloudRegion } from '../../utils/clack-utils';\nimport { MCPClient } from './MCPClient';\nimport { CursorMCPClient } from './clients/cursor';\nimport { ClaudeMCPClient } from './clients/claude';\nimport { getPersonalApiKey } from '../../mcp';\nimport type { CloudRegion } from '../../utils/types';\nimport { ClaudeCodeMCPClient } from './clients/claude-code';\nimport { VisualStudioCodeClient } from './clients/visual-studio-code';\nimport { ZedClient } from './clients/zed';\nimport { CodexMCPClient } from './clients/codex';\nimport { AVAILABLE_FEATURES, ALL_FEATURE_VALUES } from './defaults';\nimport { debug } from '../../utils/debug';\n\nexport const getSupportedClients = async (): Promise<MCPClient[]> => {\n const allClients = [\n new CursorMCPClient(),\n new ClaudeMCPClient(),\n new ClaudeCodeMCPClient(),\n new VisualStudioCodeClient(),\n new ZedClient(),\n new CodexMCPClient(),\n ];\n const supportedClients: MCPClient[] = [];\n\n debug('Checking for supported MCP clients...');\n for (const client of allClients) {\n const isSupported = await client.isClientSupported();\n debug(`${client.name}: ${isSupported ? '✓ supported' : '✗ not supported'}`);\n if (isSupported) {\n supportedClients.push(client);\n }\n }\n debug(\n `Found ${supportedClients.length} supported client(s): ${supportedClients\n .map((c) => c.name)\n .join(', ')}`,\n );\n\n return supportedClients;\n};\n\nexport const addMCPServerToClientsStep = async ({\n integration,\n cloudRegion,\n askPermission = true,\n local = false,\n}: {\n integration?: Integration;\n cloudRegion?: CloudRegion;\n askPermission?: boolean;\n local?: boolean;\n}): Promise<string[]> => {\n const region = cloudRegion ?? (await askForCloudRegion());\n\n const hasPermission = askPermission\n ? await abortIfCancelled(\n clack.select({\n message: local\n ? 'Would you like to install the local development MCP server?'\n : 'Would you like to install the MCP server to use PostHog in your editor?',\n options: [\n { value: true, label: 'Yes' },\n { value: false, label: 'No' },\n ],\n }),\n integration,\n )\n : true;\n\n if (!hasPermission) {\n return [];\n }\n\n const { groupMultiselect } = await import('@clack/prompts');\n const selectedFeatures = await abortIfCancelled(\n groupMultiselect({\n message: `Select which PostHog features to enable as tools: ${chalk.dim(\n '(Toggle: Space, Confirm: Enter, Toggle All: A, Cancel: CTRL + C)',\n )}`,\n options: AVAILABLE_FEATURES,\n initialValues: [...ALL_FEATURE_VALUES],\n required: false,\n }),\n integration,\n );\n\n const supportedClients = await getSupportedClients();\n\n const { multiselect } = await import('@clack/prompts');\n const selectedClientNames = await abortIfCancelled(\n multiselect({\n message: `Select which MCP clients to install the MCP server to: ${chalk.dim(\n '(Toggle: Space, Confirm: Enter, Toggle All: A, Cancel: CTRL + C)',\n )}`,\n options: supportedClients.map((client) => ({\n value: client.name,\n label: client.name,\n })),\n initialValues: supportedClients.map((client) => client.name),\n required: true,\n }),\n integration,\n );\n\n const clients = supportedClients.filter((client) =>\n selectedClientNames.includes(client.name),\n );\n\n // Only check for existing installations in the clients the user selected\n const installedClients = [];\n for (const client of clients) {\n if (await client.isServerInstalled(local)) {\n installedClients.push(client);\n }\n }\n\n if (installedClients.length > 0) {\n clack.log.warn(\n `The MCP server is already configured for:\n ${installedClients.map((c) => `- ${c.name}`).join('\\n ')}`,\n );\n\n const reinstall = await abortIfCancelled(\n clack.select({\n message: 'Would you like to reinstall it?',\n options: [\n {\n value: true,\n label: 'Yes',\n hint: 'Reinstall the MCP server',\n },\n {\n value: false,\n label: 'No',\n hint: 'Keep the existing installation',\n },\n ],\n }),\n integration,\n );\n\n if (!reinstall) {\n analytics.capture('wizard interaction', {\n action: 'declined to reinstall mcp servers',\n clients: installedClients.map((c) => c.name),\n integration,\n });\n\n return [];\n }\n\n await removeMCPServer(installedClients, local);\n clack.log.info('Removed existing installation.');\n }\n\n const personalApiKey = await getPersonalApiKey({ cloudRegion: region });\n\n await traceStep('adding mcp servers', async () => {\n await addMCPServer(clients, personalApiKey, selectedFeatures, local);\n });\n\n clack.log.success(\n `Added the MCP server to:\n ${clients.map((c) => `- ${c.name}`).join('\\n ')} `,\n );\n\n analytics.capture('wizard interaction', {\n action: 'added mcp servers',\n clients: clients.map((c) => c.name),\n integration,\n });\n\n return clients.map((c) => c.name);\n};\n\nexport const removeMCPServerFromClientsStep = async ({\n integration,\n local = false,\n}: {\n integration?: Integration;\n local?: boolean;\n}): Promise<string[]> => {\n const installedClients = await getInstalledClients(local);\n if (installedClients.length === 0) {\n analytics.capture('wizard interaction', {\n action: 'no mcp servers to remove',\n integration,\n });\n return [];\n }\n\n const { multiselect } = await import('@clack/prompts');\n const selectedClientNames = await abortIfCancelled(\n multiselect({\n message: `Select which clients to remove the MCP server from: ${chalk.dim(\n '(Toggle: Space, Confirm: Enter, Toggle All: A, Cancel: CTRL + C)',\n )}`,\n options: installedClients.map((client) => ({\n value: client.name,\n label: client.name,\n })),\n initialValues: installedClients.map((client) => client.name),\n }),\n integration,\n );\n\n const clientsToRemove = installedClients.filter((client) =>\n selectedClientNames.includes(client.name),\n );\n\n if (clientsToRemove.length === 0) {\n analytics.capture('wizard interaction', {\n action: 'no mcp servers selected for removal',\n integration,\n });\n return [];\n }\n\n const results = await traceStep('removing mcp servers', async () => {\n await removeMCPServer(clientsToRemove, local);\n return clientsToRemove.map((c) => c.name);\n });\n\n analytics.capture('wizard interaction', {\n action: 'removed mcp servers',\n clients: results,\n integration,\n });\n\n return results;\n};\n\nexport const getInstalledClients = async (\n local?: boolean,\n): Promise<MCPClient[]> => {\n const clients = await getSupportedClients();\n const installedClients: MCPClient[] = [];\n\n for (const client of clients) {\n if (await client.isServerInstalled(local)) {\n installedClients.push(client);\n }\n }\n\n return installedClients;\n};\n\nexport const addMCPServer = async (\n clients: MCPClient[],\n personalApiKey: string,\n selectedFeatures?: string[],\n local?: boolean,\n): Promise<void> => {\n for (const client of clients) {\n await client.addServer(personalApiKey, selectedFeatures, local);\n }\n};\n\nexport const removeMCPServer = async (\n clients: MCPClient[],\n local?: boolean,\n): Promise<void> => {\n for (const client of clients) {\n await client.removeServer(local);\n }\n};\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/steps/add-mcp-server-to-clients/index.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Integration } from '../../lib/constants';\nimport { traceStep } from '../../telemetry';\nimport { analytics } from '../../utils/analytics';\nimport clack from '../../utils/clack';\nimport chalk from 'chalk';\nimport { abortIfCancelled, askForCloudRegion } from '../../utils/clack-utils';\nimport { MCPClient } from './MCPClient';\nimport { CursorMCPClient } from './clients/cursor';\nimport { ClaudeMCPClient } from './clients/claude';\nimport { getPersonalApiKey } from '../../mcp';\nimport type { CloudRegion } from '../../utils/types';\nimport { ClaudeCodeMCPClient } from './clients/claude-code';\nimport { VisualStudioCodeClient } from './clients/visual-studio-code';\nimport { ZedClient } from './clients/zed';\nimport { CodexMCPClient } from './clients/codex';\nimport { AVAILABLE_FEATURES, ALL_FEATURE_VALUES } from './defaults';\nimport { debug } from '../../utils/debug';\n\nexport const getSupportedClients = async (): Promise<MCPClient[]> => {\n const allClients = [\n new CursorMCPClient(),\n new ClaudeMCPClient(),\n new ClaudeCodeMCPClient(),\n new VisualStudioCodeClient(),\n new ZedClient(),\n new CodexMCPClient(),\n ];\n const supportedClients: MCPClient[] = [];\n\n debug('Checking for supported MCP clients...');\n for (const client of allClients) {\n const isSupported = await client.isClientSupported();\n debug(`${client.name}: ${isSupported ? '✓ supported' : '✗ not supported'}`);\n if (isSupported) {\n supportedClients.push(client);\n }\n }\n debug(\n `Found ${supportedClients.length} supported client(s): ${supportedClients\n .map((c) => c.name)\n .join(', ')}`,\n );\n\n return supportedClients;\n};\n\nexport const addMCPServerToClientsStep = async ({\n integration,\n cloudRegion,\n askPermission = true,\n local = false,\n ci = false,\n}: {\n integration?: Integration;\n cloudRegion?: CloudRegion;\n askPermission?: boolean;\n local?: boolean;\n ci?: boolean;\n}): Promise<string[]> => {\n // CI mode: skip MCP installation entirely (default to No)\n if (ci) {\n clack.log.info('Skipping MCP installation (CI mode)');\n return [];\n }\n\n const region = cloudRegion ?? (await askForCloudRegion());\n\n const hasPermission = askPermission\n ? await abortIfCancelled(\n clack.select({\n message: local\n ? 'Would you like to install the local development MCP server?'\n : 'Would you like to install the MCP server to use PostHog in your editor?',\n options: [\n { value: true, label: 'Yes' },\n { value: false, label: 'No' },\n ],\n }),\n integration,\n )\n : true;\n\n if (!hasPermission) {\n return [];\n }\n\n const { groupMultiselect } = await import('@clack/prompts');\n const selectedFeatures = await abortIfCancelled(\n groupMultiselect({\n message: `Select which PostHog features to enable as tools: ${chalk.dim(\n '(Toggle: Space, Confirm: Enter, Toggle All: A, Cancel: CTRL + C)',\n )}`,\n options: AVAILABLE_FEATURES,\n initialValues: [...ALL_FEATURE_VALUES],\n required: false,\n }),\n integration,\n );\n\n const supportedClients = await getSupportedClients();\n\n const { multiselect } = await import('@clack/prompts');\n const selectedClientNames = await abortIfCancelled(\n multiselect({\n message: `Select which MCP clients to install the MCP server to: ${chalk.dim(\n '(Toggle: Space, Confirm: Enter, Toggle All: A, Cancel: CTRL + C)',\n )}`,\n options: supportedClients.map((client) => ({\n value: client.name,\n label: client.name,\n })),\n initialValues: supportedClients.map((client) => client.name),\n required: true,\n }),\n integration,\n );\n\n const clients = supportedClients.filter((client) =>\n selectedClientNames.includes(client.name),\n );\n\n // Only check for existing installations in the clients the user selected\n const installedClients = [];\n for (const client of clients) {\n if (await client.isServerInstalled(local)) {\n installedClients.push(client);\n }\n }\n\n if (installedClients.length > 0) {\n clack.log.warn(\n `The MCP server is already configured for:\n ${installedClients.map((c) => `- ${c.name}`).join('\\n ')}`,\n );\n\n const reinstall = await abortIfCancelled(\n clack.select({\n message: 'Would you like to reinstall it?',\n options: [\n {\n value: true,\n label: 'Yes',\n hint: 'Reinstall the MCP server',\n },\n {\n value: false,\n label: 'No',\n hint: 'Keep the existing installation',\n },\n ],\n }),\n integration,\n );\n\n if (!reinstall) {\n analytics.capture('wizard interaction', {\n action: 'declined to reinstall mcp servers',\n clients: installedClients.map((c) => c.name),\n integration,\n });\n\n return [];\n }\n\n await removeMCPServer(installedClients, local);\n clack.log.info('Removed existing installation.');\n }\n\n const personalApiKey = await getPersonalApiKey({ cloudRegion: region });\n\n await traceStep('adding mcp servers', async () => {\n await addMCPServer(clients, personalApiKey, selectedFeatures, local);\n });\n\n clack.log.success(\n `Added the MCP server to:\n ${clients.map((c) => `- ${c.name}`).join('\\n ')} `,\n );\n\n analytics.capture('wizard interaction', {\n action: 'added mcp servers',\n clients: clients.map((c) => c.name),\n integration,\n });\n\n return clients.map((c) => c.name);\n};\n\nexport const removeMCPServerFromClientsStep = async ({\n integration,\n local = false,\n}: {\n integration?: Integration;\n local?: boolean;\n}): Promise<string[]> => {\n const installedClients = await getInstalledClients(local);\n if (installedClients.length === 0) {\n analytics.capture('wizard interaction', {\n action: 'no mcp servers to remove',\n integration,\n });\n return [];\n }\n\n const { multiselect } = await import('@clack/prompts');\n const selectedClientNames = await abortIfCancelled(\n multiselect({\n message: `Select which clients to remove the MCP server from: ${chalk.dim(\n '(Toggle: Space, Confirm: Enter, Toggle All: A, Cancel: CTRL + C)',\n )}`,\n options: installedClients.map((client) => ({\n value: client.name,\n label: client.name,\n })),\n initialValues: installedClients.map((client) => client.name),\n }),\n integration,\n );\n\n const clientsToRemove = installedClients.filter((client) =>\n selectedClientNames.includes(client.name),\n );\n\n if (clientsToRemove.length === 0) {\n analytics.capture('wizard interaction', {\n action: 'no mcp servers selected for removal',\n integration,\n });\n return [];\n }\n\n const results = await traceStep('removing mcp servers', async () => {\n await removeMCPServer(clientsToRemove, local);\n return clientsToRemove.map((c) => c.name);\n });\n\n analytics.capture('wizard interaction', {\n action: 'removed mcp servers',\n clients: results,\n integration,\n });\n\n return results;\n};\n\nexport const getInstalledClients = async (\n local?: boolean,\n): Promise<MCPClient[]> => {\n const clients = await getSupportedClients();\n const installedClients: MCPClient[] = [];\n\n for (const client of clients) {\n if (await client.isServerInstalled(local)) {\n installedClients.push(client);\n }\n }\n\n return installedClients;\n};\n\nexport const addMCPServer = async (\n clients: MCPClient[],\n personalApiKey: string,\n selectedFeatures?: string[],\n local?: boolean,\n): Promise<void> => {\n for (const client of clients) {\n await client.addServer(personalApiKey, selectedFeatures, local);\n }\n};\n\nexport const removeMCPServer = async (\n clients: MCPClient[],\n local?: boolean,\n): Promise<void> => {\n for (const client of clients) {\n await client.removeServer(local);\n }\n};\n"]}
@@ -104,6 +104,7 @@ async function runSvelteWizard(options) {
104
104
  await (0, steps_1.addMCPServerToClientsStep)({
105
105
  cloudRegion,
106
106
  integration: constants_1.Integration.svelte,
107
+ ci: options.ci,
107
108
  });
108
109
  const outroMessage = (0, messages_1.getOutroMessage)({
109
110
  options,
@@ -1 +1 @@
1
- {"version":3,"file":"svelte-wizard.js","sourceRoot":"","sources":["../../../src/svelte/svelte-wizard.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable max-lines */\n\nimport {\n abort,\n askForAIConsent,\n confirmContinueIfNoOrDirtyGitRepo,\n ensurePackageIsInstalled,\n getOrAskForProjectData,\n getPackageDotJson,\n getPackageManager,\n installPackage,\n isUsingTypeScript,\n printWelcome,\n} from '../utils/clack-utils';\nimport { getPackageVersion, hasPackageInstalled } from '../utils/package-json';\nimport clack from '../utils/clack';\nimport { Integration } from '../lib/constants';\nimport { getSvelteDocumentation } from './docs';\nimport { analytics } from '../utils/analytics';\nimport {\n generateFileChangesForIntegration,\n getFilesToChange,\n getRelevantFilesForIntegration,\n} from '../utils/file-utils';\nimport type { WizardOptions } from '../utils/types';\nimport { askForCloudRegion } from '../utils/clack-utils';\nimport { addEditorRulesStep } from '../steps/add-editor-rules';\nimport { getOutroMessage } from '../lib/messages';\nimport {\n addMCPServerToClientsStep,\n addOrUpdateEnvironmentVariablesStep,\n runPrettierStep,\n} from '../steps';\n\nexport async function runSvelteWizard(options: WizardOptions): Promise<void> {\n printWelcome({\n wizardName: 'PostHog Svelte wizard',\n });\n\n const aiConsent = await askForAIConsent(options);\n\n if (!aiConsent) {\n await abort(\n 'The Svelte wizard requires AI to get setup right now. Please view the docs to setup Svelte manually instead: https://posthog.com/docs/libraries/svelte',\n 0,\n );\n }\n\n const cloudRegion = options.cloudRegion ?? (await askForCloudRegion());\n\n const typeScriptDetected = isUsingTypeScript(options);\n\n await confirmContinueIfNoOrDirtyGitRepo(options);\n\n const packageJson = await getPackageDotJson(options);\n\n await ensurePackageIsInstalled(packageJson, '@sveltejs/kit', '@sveltejs/kit');\n\n const svelteVersion = getPackageVersion('@sveltejs/kit', packageJson);\n\n if (svelteVersion) {\n analytics.setTag('svelte-version', svelteVersion);\n }\n\n const { projectApiKey, accessToken, host, projectId } =\n await getOrAskForProjectData({\n ...options,\n cloudRegion,\n });\n\n const sdkAlreadyInstalled = hasPackageInstalled('posthog-js', packageJson);\n\n analytics.setTag('sdk-already-installed', sdkAlreadyInstalled);\n\n const { packageManager: packageManagerFromInstallStep } =\n await installPackage({\n packageName: 'posthog-js',\n packageNameDisplayLabel: 'posthog-js',\n alreadyInstalled: !!packageJson?.dependencies?.['posthog-js'],\n forceInstall: options.forceInstall,\n askBeforeUpdating: false,\n installDir: options.installDir,\n integration: Integration.svelte,\n });\n\n await installPackage({\n packageName: 'posthog-node',\n packageNameDisplayLabel: 'posthog-node',\n packageManager: packageManagerFromInstallStep,\n alreadyInstalled: !!packageJson?.dependencies?.['posthog-node'],\n forceInstall: options.forceInstall,\n askBeforeUpdating: false,\n installDir: options.installDir,\n integration: Integration.svelte,\n });\n\n const relevantFiles = await getRelevantFilesForIntegration({\n installDir: options.installDir,\n integration: Integration.svelte,\n });\n\n const installationDocumentation = getSvelteDocumentation({\n language: typeScriptDetected ? 'typescript' : 'javascript',\n });\n\n clack.log.info(`Reviewing PostHog documentation for Svelte`);\n\n const filesToChange = await getFilesToChange({\n integration: Integration.svelte,\n relevantFiles,\n documentation: installationDocumentation,\n accessToken,\n cloudRegion,\n projectId,\n });\n\n await generateFileChangesForIntegration({\n integration: Integration.svelte,\n filesToChange,\n accessToken,\n installDir: options.installDir,\n documentation: installationDocumentation,\n cloudRegion,\n projectId,\n });\n\n const { relativeEnvFilePath, addedEnvVariables } =\n await addOrUpdateEnvironmentVariablesStep({\n variables: {\n ['PUBLIC_POSTHOG_KEY']: projectApiKey,\n ['PUBLIC_POSTHOG_HOST']: host,\n },\n installDir: options.installDir,\n integration: Integration.svelte,\n });\n\n const packageManagerForOutro =\n packageManagerFromInstallStep ?? (await getPackageManager(options));\n\n await runPrettierStep({\n installDir: options.installDir,\n integration: Integration.svelte,\n });\n\n const addedEditorRules = await addEditorRulesStep({\n installDir: options.installDir,\n rulesName: 'svelte-rules.md',\n integration: Integration.svelte,\n });\n\n await addMCPServerToClientsStep({\n cloudRegion,\n integration: Integration.svelte,\n });\n\n const outroMessage = getOutroMessage({\n options,\n integration: Integration.svelte,\n cloudRegion,\n addedEditorRules,\n packageManager: packageManagerForOutro,\n envFileChanged: addedEnvVariables ? relativeEnvFilePath : undefined,\n uploadedEnvVars: [],\n });\n\n clack.outro(outroMessage);\n\n await analytics.shutdown('success');\n}\n"]}
1
+ {"version":3,"file":"svelte-wizard.js","sourceRoot":"","sources":["../../../src/svelte/svelte-wizard.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable max-lines */\n\nimport {\n abort,\n askForAIConsent,\n confirmContinueIfNoOrDirtyGitRepo,\n ensurePackageIsInstalled,\n getOrAskForProjectData,\n getPackageDotJson,\n getPackageManager,\n installPackage,\n isUsingTypeScript,\n printWelcome,\n} from '../utils/clack-utils';\nimport { getPackageVersion, hasPackageInstalled } from '../utils/package-json';\nimport clack from '../utils/clack';\nimport { Integration } from '../lib/constants';\nimport { getSvelteDocumentation } from './docs';\nimport { analytics } from '../utils/analytics';\nimport {\n generateFileChangesForIntegration,\n getFilesToChange,\n getRelevantFilesForIntegration,\n} from '../utils/file-utils';\nimport type { WizardOptions } from '../utils/types';\nimport { askForCloudRegion } from '../utils/clack-utils';\nimport { addEditorRulesStep } from '../steps/add-editor-rules';\nimport { getOutroMessage } from '../lib/messages';\nimport {\n addMCPServerToClientsStep,\n addOrUpdateEnvironmentVariablesStep,\n runPrettierStep,\n} from '../steps';\n\nexport async function runSvelteWizard(options: WizardOptions): Promise<void> {\n printWelcome({\n wizardName: 'PostHog Svelte wizard',\n });\n\n const aiConsent = await askForAIConsent(options);\n\n if (!aiConsent) {\n await abort(\n 'The Svelte wizard requires AI to get setup right now. Please view the docs to setup Svelte manually instead: https://posthog.com/docs/libraries/svelte',\n 0,\n );\n }\n\n const cloudRegion = options.cloudRegion ?? (await askForCloudRegion());\n\n const typeScriptDetected = isUsingTypeScript(options);\n\n await confirmContinueIfNoOrDirtyGitRepo(options);\n\n const packageJson = await getPackageDotJson(options);\n\n await ensurePackageIsInstalled(packageJson, '@sveltejs/kit', '@sveltejs/kit');\n\n const svelteVersion = getPackageVersion('@sveltejs/kit', packageJson);\n\n if (svelteVersion) {\n analytics.setTag('svelte-version', svelteVersion);\n }\n\n const { projectApiKey, accessToken, host, projectId } =\n await getOrAskForProjectData({\n ...options,\n cloudRegion,\n });\n\n const sdkAlreadyInstalled = hasPackageInstalled('posthog-js', packageJson);\n\n analytics.setTag('sdk-already-installed', sdkAlreadyInstalled);\n\n const { packageManager: packageManagerFromInstallStep } =\n await installPackage({\n packageName: 'posthog-js',\n packageNameDisplayLabel: 'posthog-js',\n alreadyInstalled: !!packageJson?.dependencies?.['posthog-js'],\n forceInstall: options.forceInstall,\n askBeforeUpdating: false,\n installDir: options.installDir,\n integration: Integration.svelte,\n });\n\n await installPackage({\n packageName: 'posthog-node',\n packageNameDisplayLabel: 'posthog-node',\n packageManager: packageManagerFromInstallStep,\n alreadyInstalled: !!packageJson?.dependencies?.['posthog-node'],\n forceInstall: options.forceInstall,\n askBeforeUpdating: false,\n installDir: options.installDir,\n integration: Integration.svelte,\n });\n\n const relevantFiles = await getRelevantFilesForIntegration({\n installDir: options.installDir,\n integration: Integration.svelte,\n });\n\n const installationDocumentation = getSvelteDocumentation({\n language: typeScriptDetected ? 'typescript' : 'javascript',\n });\n\n clack.log.info(`Reviewing PostHog documentation for Svelte`);\n\n const filesToChange = await getFilesToChange({\n integration: Integration.svelte,\n relevantFiles,\n documentation: installationDocumentation,\n accessToken,\n cloudRegion,\n projectId,\n });\n\n await generateFileChangesForIntegration({\n integration: Integration.svelte,\n filesToChange,\n accessToken,\n installDir: options.installDir,\n documentation: installationDocumentation,\n cloudRegion,\n projectId,\n });\n\n const { relativeEnvFilePath, addedEnvVariables } =\n await addOrUpdateEnvironmentVariablesStep({\n variables: {\n ['PUBLIC_POSTHOG_KEY']: projectApiKey,\n ['PUBLIC_POSTHOG_HOST']: host,\n },\n installDir: options.installDir,\n integration: Integration.svelte,\n });\n\n const packageManagerForOutro =\n packageManagerFromInstallStep ?? (await getPackageManager(options));\n\n await runPrettierStep({\n installDir: options.installDir,\n integration: Integration.svelte,\n });\n\n const addedEditorRules = await addEditorRulesStep({\n installDir: options.installDir,\n rulesName: 'svelte-rules.md',\n integration: Integration.svelte,\n });\n\n await addMCPServerToClientsStep({\n cloudRegion,\n integration: Integration.svelte,\n ci: options.ci,\n });\n\n const outroMessage = getOutroMessage({\n options,\n integration: Integration.svelte,\n cloudRegion,\n addedEditorRules,\n packageManager: packageManagerForOutro,\n envFileChanged: addedEnvVariables ? relativeEnvFilePath : undefined,\n uploadedEnvVars: [],\n });\n\n clack.outro(outroMessage);\n\n await analytics.shutdown('success');\n}\n"]}
@@ -25,7 +25,7 @@ export declare function printWelcome(options: {
25
25
  wizardName: string;
26
26
  message?: string;
27
27
  }): void;
28
- export declare function confirmContinueIfNoOrDirtyGitRepo(options: Pick<WizardOptions, 'default'>): Promise<void>;
28
+ export declare function confirmContinueIfNoOrDirtyGitRepo(options: Pick<WizardOptions, 'default' | 'ci'>): Promise<void>;
29
29
  export declare function isInGitRepo(): boolean;
30
30
  export declare function getUncommittedOrUntrackedFiles(): string[];
31
31
  export declare function askForItemSelection(items: string[], message: string): Promise<{
@@ -76,7 +76,9 @@ export declare function installPackage({ packageName, alreadyInstalled, askBefor
76
76
  export declare function ensurePackageIsInstalled(packageJson: PackageDotJson, packageId: string, packageName: string): Promise<void>;
77
77
  export declare function getPackageDotJson({ installDir, }: Pick<WizardOptions, 'installDir'>): Promise<PackageDotJson>;
78
78
  export declare function updatePackageDotJson(packageDotJson: PackageDotJson, { installDir }: Pick<WizardOptions, 'installDir'>): Promise<void>;
79
- export declare function getPackageManager({ installDir, }: Pick<WizardOptions, 'installDir'>): Promise<PackageManager>;
79
+ export declare function getPackageManager(options: Pick<WizardOptions, 'installDir'> & {
80
+ ci?: boolean;
81
+ }): Promise<PackageManager>;
80
82
  export declare function isUsingTypeScript({ installDir, }: Pick<WizardOptions, 'installDir'>): boolean;
81
83
  /**
82
84
  *
@@ -85,7 +87,7 @@ export declare function isUsingTypeScript({ installDir, }: Pick<WizardOptions, '
85
87
  * @param options wizard options
86
88
  * @returns project data (token, url)
87
89
  */
88
- export declare function getOrAskForProjectData(_options: Pick<WizardOptions, 'signup'> & {
90
+ export declare function getOrAskForProjectData(_options: Pick<WizardOptions, 'signup' | 'ci' | 'apiKey'> & {
89
91
  cloudRegion: CloudRegion;
90
92
  }): Promise<{
91
93
  host: string;
@@ -178,6 +180,6 @@ export declare function featureSelectionPrompt<F extends ReadonlyArray<Feature>>
178
180
  }>;
179
181
  export declare function askShouldInstallPackage(pkgName: string): Promise<boolean>;
180
182
  export declare function askShouldAddPackageOverride(pkgName: string, pkgVersion: string): Promise<boolean>;
181
- export declare function askForAIConsent(options: Pick<WizardOptions, 'default'>): Promise<boolean>;
183
+ export declare function askForAIConsent(options: Pick<WizardOptions, 'default' | 'ci'>): Promise<boolean>;
182
184
  export declare function askForCloudRegion(): Promise<CloudRegion>;
183
185
  export {};
@@ -111,7 +111,8 @@ function printWelcome(options) {
111
111
  async function confirmContinueIfNoOrDirtyGitRepo(options) {
112
112
  return (0, telemetry_1.traceStep)('check-git-status', async () => {
113
113
  if (!isInGitRepo()) {
114
- const continueWithoutGit = options.default
114
+ // CI mode: auto-continue without git
115
+ const continueWithoutGit = options.default || options.ci
115
116
  ? true
116
117
  : await abortIfCancelled(clack_1.default.confirm({
117
118
  message: 'You are not inside a git repository. The wizard will create and update files. Do you want to continue anyway?',
@@ -125,6 +126,12 @@ async function confirmContinueIfNoOrDirtyGitRepo(options) {
125
126
  }
126
127
  const uncommittedOrUntrackedFiles = getUncommittedOrUntrackedFiles();
127
128
  if (uncommittedOrUntrackedFiles.length) {
129
+ // CI mode: auto-continue with dirty repo
130
+ if (options.ci) {
131
+ clack_1.default.log.info(`CI mode: continuing with uncommitted/untracked files in repo`);
132
+ analytics_1.analytics.setTag('continue-with-dirty-repo', true);
133
+ return;
134
+ }
128
135
  clack_1.default.log.warn(`You have uncommitted or untracked files in your repo:
129
136
 
130
137
  ${uncommittedOrUntrackedFiles.join('\n')}
@@ -337,16 +344,25 @@ async function updatePackageDotJson(packageDotJson, { installDir }) {
337
344
  await abort();
338
345
  }
339
346
  }
340
- async function getPackageManager({ installDir, }) {
341
- const detectedPackageManagers = (0, package_manager_1.detectAllPackageManagers)({ installDir });
347
+ async function getPackageManager(options) {
348
+ const detectedPackageManagers = (0, package_manager_1.detectAllPackageManagers)({
349
+ installDir: options.installDir,
350
+ });
342
351
  // If exactly one package manager detected, use it automatically
343
352
  if (detectedPackageManagers.length === 1) {
344
353
  const detectedPackageManager = detectedPackageManagers[0];
345
354
  analytics_1.analytics.setTag('package-manager', detectedPackageManager.name);
346
355
  return detectedPackageManager;
347
356
  }
357
+ // CI mode: auto-select first detected or npm
358
+ if (options.ci) {
359
+ const selectedPackageManager = detectedPackageManagers.length > 0 ? detectedPackageManagers[0] : package_manager_1.NPM;
360
+ clack_1.default.log.info(`CI mode: auto-selected package manager: ${selectedPackageManager.label}`);
361
+ analytics_1.analytics.setTag('package-manager', selectedPackageManager.name);
362
+ return selectedPackageManager;
363
+ }
348
364
  // If multiple or no package managers detected, prompt user to select
349
- const options = detectedPackageManagers.length > 0
365
+ const pkgOptions = detectedPackageManagers.length > 0
350
366
  ? detectedPackageManagers
351
367
  : package_manager_1.packageManagers;
352
368
  const message = detectedPackageManagers.length > 1
@@ -354,7 +370,7 @@ async function getPackageManager({ installDir, }) {
354
370
  : 'Please select your package manager.';
355
371
  const selectedPackageManager = await abortIfCancelled(clack_1.default.select({
356
372
  message,
357
- options: options.map((packageManager) => ({
373
+ options: pkgOptions.map((packageManager) => ({
358
374
  value: packageManager,
359
375
  label: packageManager.label,
360
376
  })),
@@ -379,6 +395,18 @@ function isUsingTypeScript({ installDir, }) {
379
395
  */
380
396
  async function getOrAskForProjectData(_options) {
381
397
  const cloudUrl = (0, urls_1.getCloudUrlFromRegion)(_options.cloudRegion);
398
+ // CI mode: bypass OAuth, use personal API key for LLM gateway
399
+ if (_options.ci && _options.apiKey) {
400
+ const host = (0, urls_1.getHostFromRegion)(_options.cloudRegion);
401
+ clack_1.default.log.info('Using provided API key (CI mode - OAuth bypassed)');
402
+ const projectData = await fetchProjectDataWithApiKey(_options.apiKey, _options.cloudRegion);
403
+ return {
404
+ host,
405
+ projectApiKey: projectData.api_token, // Project API key for SDK config
406
+ accessToken: _options.apiKey, // Personal API key for LLM gateway
407
+ projectId: projectData.id,
408
+ };
409
+ }
382
410
  const { host, projectApiKey, accessToken, projectId } = await (0, telemetry_1.traceStep)('login', () => askForWizardLogin({
383
411
  cloudRegion: _options.cloudRegion,
384
412
  signup: _options.signup,
@@ -400,6 +428,22 @@ ${chalk_1.default.cyan(`${cloudUrl}/settings/project#variables`)}`);
400
428
  projectId,
401
429
  };
402
430
  }
431
+ /**
432
+ * Fetch project data using a personal API key (for CI mode)
433
+ */
434
+ async function fetchProjectDataWithApiKey(apiKey, region) {
435
+ const cloudUrl = (0, urls_1.getCloudUrlFromRegion)(region);
436
+ const userData = await (0, api_1.fetchUserData)(apiKey, cloudUrl);
437
+ const projectId = userData.team?.id;
438
+ if (!projectId) {
439
+ throw new Error('Could not determine project ID from API key. Please ensure your API key has access to a project in this cloud region.');
440
+ }
441
+ const projectData = await (0, api_1.fetchProjectData)(apiKey, projectId, cloudUrl);
442
+ return {
443
+ api_token: projectData.api_token,
444
+ id: projectId,
445
+ };
446
+ }
403
447
  async function askForWizardLogin(options) {
404
448
  const tokenResponse = await (0, oauth_1.performOAuthFlow)({
405
449
  cloudRegion: options.cloudRegion,
@@ -407,7 +451,7 @@ async function askForWizardLogin(options) {
407
451
  'user:read',
408
452
  'project:read',
409
453
  'introspection',
410
- 'task:write',
454
+ 'llm_gateway:read',
411
455
  'dashboard:write',
412
456
  'insight:write',
413
457
  ],
@@ -608,7 +652,8 @@ async function askShouldAddPackageOverride(pkgName, pkgVersion) {
608
652
  }
609
653
  async function askForAIConsent(options) {
610
654
  return await (0, telemetry_1.traceStep)('ask-for-ai-consent', async () => {
611
- const aiConsent = options.default
655
+ // CI mode: auto-consent to AI
656
+ const aiConsent = options.default || options.ci
612
657
  ? true
613
658
  : await abortIfCancelled(clack_1.default.select({
614
659
  message: 'This setup wizard uses AI, are you happy to continue? ✨',