@posthog/wizard 2.19.0 → 2.21.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +11 -0
- package/dist/{slides-mT2s9wM_.js → OutroScreen-CqF6SdBo.js} +614 -122
- package/dist/OutroScreen-CqF6SdBo.js.map +1 -0
- package/dist/{add-mcp-server-to-clients-CjnvTVj0.js → add-mcp-server-to-clients-DQHGhzt6.js} +4 -4
- package/dist/{add-mcp-server-to-clients-CjnvTVj0.js.map → add-mcp-server-to-clients-DQHGhzt6.js.map} +1 -1
- package/dist/{agent-interface-CQU6x4Hj.js → agent-interface-DE7txTqh.js} +163 -52
- package/dist/agent-interface-DE7txTqh.js.map +1 -0
- package/dist/{agent-runner-Cj7saDkL.js → agent-runner-DUZ5OD6e.js} +10 -9
- package/dist/{agent-runner-Cj7saDkL.js.map → agent-runner-DUZ5OD6e.js.map} +1 -1
- package/dist/{analytics-Df-Xb81i.js → analytics-Bl5DPj_0.js} +2 -2
- package/dist/{analytics-Df-Xb81i.js.map → analytics-Bl5DPj_0.js.map} +1 -1
- package/dist/{api-Dw6_orDE.js → api-DuA0_88V.js} +25 -4
- package/dist/{api-Dw6_orDE.js.map → api-DuA0_88V.js.map} +1 -1
- package/dist/bin.js +74 -47
- package/dist/bin.js.map +1 -1
- package/dist/check-screens.tsx +124 -0
- package/dist/{ci-install-BKAvFfK6.js → ci-install-BnOYI4mZ.js} +4 -4
- package/dist/{ci-install-BKAvFfK6.js.map → ci-install-BnOYI4mZ.js.map} +1 -1
- package/dist/{debug-Cp_wNn8i.js → debug-BVC48wlb.js} +1 -1
- package/dist/{debug-DnMO6O8O.js → debug-h7Z9zEbD.js} +2 -2
- package/dist/{debug-DnMO6O8O.js.map → debug-h7Z9zEbD.js.map} +1 -1
- package/dist/{environment-Ls0H9ljT.js → environment-uaLmtlH_.js} +3 -3
- package/dist/{environment-Ls0H9ljT.js.map → environment-uaLmtlH_.js.map} +1 -1
- package/dist/{interactive-D15byhpc.js → interactive-CW5gjyDd.js} +2 -2
- package/dist/{interactive-D15byhpc.js.map → interactive-CW5gjyDd.js.map} +1 -1
- package/dist/{mcp-prompt-streaming-DQOTQfW1.js → mcp-prompt-streaming-DMDwaark.js} +4 -4
- package/dist/{mcp-prompt-streaming-DQOTQfW1.js.map → mcp-prompt-streaming-DMDwaark.js.map} +1 -1
- package/dist/{non-interactive-DcFLJtl_.js → non-interactive-DJrVQ4nS.js} +2 -2
- package/dist/{non-interactive-DcFLJtl_.js.map → non-interactive-DJrVQ4nS.js.map} +1 -1
- package/dist/{package-manager-DUPgLGpQ.js → package-manager-DCUBRbr-.js} +2 -2
- package/dist/{package-manager-DUPgLGpQ.js.map → package-manager-DCUBRbr-.js.map} +1 -1
- package/dist/{playground-BZ0hGjbL.js → playground-DCVaVeVD.js} +138 -9
- package/dist/playground-DCVaVeVD.js.map +1 -0
- package/dist/{posthog-integration-C8qhJnI3.js → posthog-integration-ChdwFPMj.js} +17 -11
- package/dist/posthog-integration-ChdwFPMj.js.map +1 -0
- package/dist/{provisioning-C-2ExcqY.js → provisioning-GeMkBMSR.js} +3 -3
- package/dist/{provisioning-C-2ExcqY.js.map → provisioning-GeMkBMSR.js.map} +1 -1
- package/dist/{registry-hBUgaWFx.js → registry-VSSRH3sU.js} +4 -4
- package/dist/{registry-hBUgaWFx.js.map → registry-VSSRH3sU.js.map} +1 -1
- package/dist/{setup-utils-DetnhXo0.js → setup-utils-BfV4pydt.js} +12 -10
- package/dist/setup-utils-BfV4pydt.js.map +1 -0
- package/dist/{start-tui-BfXoErKg.js → start-tui-BRvm5VP9.js} +93 -228
- package/dist/start-tui-BRvm5VP9.js.map +1 -0
- package/dist/{steps-SoDXSUxe.js → steps-DA4uvSbg.js} +6 -6
- package/dist/{steps-SoDXSUxe.js.map → steps-DA4uvSbg.js.map} +1 -1
- package/dist/{task-stream-CZRj6auI.js → task-stream-CZawuzlz.js} +2 -2
- package/dist/{task-stream-CZRj6auI.js.map → task-stream-CZawuzlz.js.map} +1 -1
- package/dist/{telemetry-CPcMFxcO.js → telemetry-BRAonUea.js} +2 -2
- package/dist/{telemetry-CPcMFxcO.js.map → telemetry-BRAonUea.js.map} +1 -1
- package/dist/{urls-BO7doNJG.js → urls-B66Ib2jT.js} +2 -2
- package/dist/{urls-BO7doNJG.js.map → urls-B66Ib2jT.js.map} +1 -1
- package/dist/{wizard-abort-CDXufkqJ.js → wizard-abort-D1_DnFjm.js} +12 -7
- package/dist/wizard-abort-D1_DnFjm.js.map +1 -0
- package/dist/wizard-abort-gMB1eV6T.js +2 -0
- package/dist/{wizard-session-d27JGRGi.js → wizard-session-G3VWD6hv.js} +3 -1
- package/dist/{wizard-session-d27JGRGi.js.map → wizard-session-G3VWD6hv.js.map} +1 -1
- package/dist/{wizard-session-y304gEEI.js → wizard-session-wPJtNl4c.js} +1 -1
- package/dist/wizard-ui-YdGFRyu_.js.map +1 -1
- package/package.json +4 -2
- package/dist/agent-interface-CQU6x4Hj.js.map +0 -1
- package/dist/playground-BZ0hGjbL.js.map +0 -1
- package/dist/posthog-integration-C8qhJnI3.js.map +0 -1
- package/dist/setup-utils-DetnhXo0.js.map +0 -1
- package/dist/slides-mT2s9wM_.js.map +0 -1
- package/dist/start-tui-BfXoErKg.js.map +0 -1
- package/dist/wizard-abort-CDXufkqJ.js.map +0 -1
- package/dist/wizard-abort-CtMY57ZE.js +0 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-Dw6_orDE.js","names":[],"sources":["../src/lib/api.ts"],"sourcesContent":["import axios, { AxiosError } from 'axios';\nimport { z } from 'zod';\nimport { analytics } from '@utils/analytics';\nimport { WIZARD_USER_AGENT } from './constants';\n\n/**\n * User payload from `/api/users/@me/`. Schema typed for the fields the\n * wizard actually reads + passthrough on everything else so the full\n * upstream response rides through to the session for downstream features\n * (account-aware copy, plan-gated flows, org/team metadata, etc.).\n *\n * Top-level uses `.passthrough()` so unknown fields aren't stripped;\n * the few nested objects we care about (team, organization,\n * organizations[]) do the same so their additional fields survive too.\n *\n * Keep `distinct_id` required — analytics depends on it. Everything\n * else added here is nullish so partial responses don't fail parsing.\n */\nexport const ApiUserSchema = z\n .object({\n // Identifiers\n distinct_id: z.string(),\n uuid: z.string().nullish(),\n id: z.number().nullish(),\n\n // Profile\n email: z.string().nullish(),\n first_name: z.string().nullish(),\n last_name: z.string().nullish(),\n date_joined: z.string().nullish(),\n is_email_verified: z.boolean().nullish(),\n is_2fa_enabled: z.boolean().nullish(),\n is_staff: z.boolean().nullish(),\n\n // Preferences\n theme_mode: z.string().nullish(),\n toolbar_mode: z.string().nullish(),\n hide_mcp_hints: z.boolean().nullish(),\n\n // Optional / nullable on the backend — pre-onboarding signup paths\n // return null and older accounts may not have it set. Treat as a\n // hint, never a guarantee.\n role_at_organization: z.string().nullish(),\n\n // Current team + organization (objects from the API, kept typed on\n // the fields the wizard uses; passthrough preserves the rest).\n team: z\n .object({\n id: z.number(),\n uuid: z.string().nullish(),\n organization: z.string().uuid(),\n api_token: z.string().nullish(),\n project_id: z.number().nullish(),\n name: z.string().nullish(),\n timezone: z.string().nullish(),\n })\n .passthrough(),\n organization: z\n .object({\n id: z.string().uuid(),\n name: z.string().nullish(),\n slug: z.string().nullish(),\n membership_level: z.number().nullish(),\n customer_id: z.string().nullish(),\n })\n .passthrough(),\n organizations: z.array(\n z\n .object({\n id: z.string().uuid(),\n name: z.string().nullish(),\n membership_level: z.number().nullish(),\n })\n .passthrough(),\n ),\n })\n .passthrough();\n\n/**\n * Single activity log entry the wizard cares about. The PostHog endpoint\n * returns much more — schema kept minimal so changes upstream don't break us.\n *\n * @unused — no current caller after the Phase 6 streaming-agent pivot\n * dropped activity_log polling. Deliberately retained: this is a thin,\n * well-typed wrapper around a stable PostHog endpoint, and we're likely\n * to want it again for a future feature (e.g. \"what changed in your\n * project recently\"). Re-deriving the schema is more work than letting\n * it sit dormant.\n */\nexport const ActivityLogEntrySchema = z\n .object({\n scope: z.string().nullish(),\n activity: z.string().nullish(),\n created_at: z.string().nullish(),\n })\n .passthrough();\n\n/** @unused — see ActivityLogEntrySchema. */\nexport const ActivityLogResponseSchema = z.object({\n results: z.array(ActivityLogEntrySchema),\n});\n\n/** @unused — see ActivityLogEntrySchema. */\nexport type ActivityLogEntry = z.infer<typeof ActivityLogEntrySchema>;\n\nexport const ApiProjectSchema = z.object({\n id: z.number(),\n uuid: z.string().uuid(),\n organization: z.string().uuid(),\n api_token: z.string(),\n name: z.string(),\n});\n\nexport type ApiUser = z.infer<typeof ApiUserSchema>;\nexport type ApiProject = z.infer<typeof ApiProjectSchema>;\n\nexport class ApiError extends Error {\n constructor(\n message: string,\n public readonly statusCode?: number,\n public readonly endpoint?: string,\n ) {\n super(message);\n this.name = 'ApiError';\n }\n}\n\nexport async function fetchUserData(\n accessToken: string,\n baseUrl: string,\n): Promise<ApiUser> {\n try {\n const response = await axios.get(`${baseUrl}/api/users/@me/`, {\n headers: {\n Authorization: `Bearer ${accessToken}`,\n 'User-Agent': WIZARD_USER_AGENT,\n },\n });\n\n return ApiUserSchema.parse(response.data);\n } catch (error) {\n const apiError = handleApiError(error, 'fetch user data');\n analytics.captureException(apiError, {\n endpoint: '/api/users/@me/',\n baseUrl,\n });\n throw apiError;\n }\n}\n\n/**\n * Best-effort fetch of recent activity log entries. Returns [] on any error\n * so callers can treat absence of results as \"haven't detected anything yet\"\n * rather than a hard failure.\n *\n * @unused — no current caller after the Phase 6 streaming-agent pivot\n * dropped activity_log polling from McpSuggestedPromptsScreen.\n * Deliberately retained for future features that want a soft signal of\n * recent project changes (e.g. dashboards, audit summaries). See the\n * ActivityLogEntrySchema doc comment for the keep-vs-delete rationale.\n */\nexport async function fetchRecentActivity(\n accessToken: string,\n projectId: number,\n baseUrl: string,\n since: Date,\n): Promise<ActivityLogEntry[]> {\n try {\n const response = await axios.get(\n `${baseUrl}/api/projects/${projectId}/activity_log/`,\n {\n params: { limit: 10 },\n headers: {\n Authorization: `Bearer ${accessToken}`,\n 'User-Agent': WIZARD_USER_AGENT,\n },\n // Short timeout — best-effort probe, not a critical path.\n timeout: 4000,\n },\n );\n const parsed = ActivityLogResponseSchema.safeParse(response.data);\n if (!parsed.success) return [];\n const sinceMs = since.getTime();\n return parsed.data.results.filter((entry) => {\n if (!entry.created_at) return false;\n const t = Date.parse(entry.created_at);\n return Number.isFinite(t) && t >= sinceMs;\n });\n } catch {\n return [];\n }\n}\n\nexport async function fetchProjectData(\n accessToken: string,\n projectId: number,\n baseUrl: string,\n): Promise<ApiProject> {\n try {\n const response = await axios.get(`${baseUrl}/api/projects/${projectId}/`, {\n headers: {\n Authorization: `Bearer ${accessToken}`,\n 'User-Agent': WIZARD_USER_AGENT,\n },\n });\n\n return ApiProjectSchema.parse(response.data);\n } catch (error) {\n const apiError = handleApiError(error, 'fetch project data');\n analytics.captureException(apiError, {\n endpoint: `/api/projects/${projectId}/`,\n baseUrl,\n projectId,\n });\n throw apiError;\n }\n}\n\nexport function handleApiError(error: unknown, operation: string): ApiError {\n if (axios.isAxiosError(error)) {\n const axiosError = error as AxiosError<{ detail?: string }>;\n const status = axiosError.response?.status;\n const detail = axiosError.response?.data?.detail;\n const endpoint = axiosError.config?.url;\n\n if (status === 401) {\n return new ApiError(\n `Authentication failed while trying to ${operation}`,\n status,\n endpoint,\n );\n }\n\n if (status === 403) {\n return new ApiError(\n `Access denied while trying to ${operation}`,\n status,\n endpoint,\n );\n }\n\n if (status === 404) {\n return new ApiError(\n `Resource not found while trying to ${operation}`,\n status,\n endpoint,\n );\n }\n\n const message = detail || `Failed to ${operation}`;\n return new ApiError(message, status, endpoint);\n }\n\n if (error instanceof z.ZodError) {\n return new ApiError(`Invalid response format while trying to ${operation}`);\n }\n\n return new ApiError(\n `Unexpected error while trying to ${operation}: ${\n error instanceof Error ? error.message : 'Unknown error'\n }`,\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"api-DuA0_88V.js","names":[],"sources":["../src/lib/api.ts"],"sourcesContent":["import axios, { AxiosError } from 'axios';\nimport { z } from 'zod';\nimport { analytics } from '@utils/analytics';\nimport { WIZARD_USER_AGENT } from './constants';\n\n/**\n * User payload from `/api/users/@me/`. Schema typed for the fields the\n * wizard actually reads + passthrough on everything else so the full\n * upstream response rides through to the session for downstream features\n * (account-aware copy, plan-gated flows, org/team metadata, etc.).\n *\n * Top-level uses `.passthrough()` so unknown fields aren't stripped;\n * the few nested objects we care about (team, organization,\n * organizations[]) do the same so their additional fields survive too.\n *\n * Keep `distinct_id` required — analytics depends on it. Everything\n * else added here is nullish so partial responses don't fail parsing.\n */\nexport const ApiUserSchema = z\n .object({\n // Identifiers\n distinct_id: z.string(),\n uuid: z.string().nullish(),\n id: z.number().nullish(),\n\n // Profile\n email: z.string().nullish(),\n first_name: z.string().nullish(),\n last_name: z.string().nullish(),\n date_joined: z.string().nullish(),\n is_email_verified: z.boolean().nullish(),\n is_2fa_enabled: z.boolean().nullish(),\n is_staff: z.boolean().nullish(),\n\n // Preferences\n theme_mode: z.string().nullish(),\n toolbar_mode: z.string().nullish(),\n hide_mcp_hints: z.boolean().nullish(),\n\n // Optional / nullable on the backend — pre-onboarding signup paths\n // return null and older accounts may not have it set. Treat as a\n // hint, never a guarantee.\n role_at_organization: z.string().nullish(),\n\n // Current team + organization (objects from the API, kept typed on\n // the fields the wizard uses; passthrough preserves the rest).\n team: z\n .object({\n id: z.number(),\n uuid: z.string().nullish(),\n organization: z.string().uuid(),\n api_token: z.string().nullish(),\n project_id: z.number().nullish(),\n name: z.string().nullish(),\n timezone: z.string().nullish(),\n })\n .passthrough(),\n organization: z\n .object({\n id: z.string().uuid(),\n name: z.string().nullish(),\n slug: z.string().nullish(),\n membership_level: z.number().nullish(),\n customer_id: z.string().nullish(),\n })\n .passthrough(),\n organizations: z.array(\n z\n .object({\n id: z.string().uuid(),\n name: z.string().nullish(),\n membership_level: z.number().nullish(),\n })\n .passthrough(),\n ),\n })\n .passthrough();\n\n/**\n * Single activity log entry the wizard cares about. The PostHog endpoint\n * returns much more — schema kept minimal so changes upstream don't break us.\n *\n * @unused — no current caller after the Phase 6 streaming-agent pivot\n * dropped activity_log polling. Deliberately retained: this is a thin,\n * well-typed wrapper around a stable PostHog endpoint, and we're likely\n * to want it again for a future feature (e.g. \"what changed in your\n * project recently\"). Re-deriving the schema is more work than letting\n * it sit dormant.\n */\nexport const ActivityLogEntrySchema = z\n .object({\n scope: z.string().nullish(),\n activity: z.string().nullish(),\n created_at: z.string().nullish(),\n })\n .passthrough();\n\n/** @unused — see ActivityLogEntrySchema. */\nexport const ActivityLogResponseSchema = z.object({\n results: z.array(ActivityLogEntrySchema),\n});\n\n/** @unused — see ActivityLogEntrySchema. */\nexport type ActivityLogEntry = z.infer<typeof ActivityLogEntrySchema>;\n\nexport const ApiProjectSchema = z.object({\n id: z.number(),\n uuid: z.string().uuid(),\n organization: z.string().uuid(),\n api_token: z.string(),\n name: z.string(),\n});\n\nexport type ApiUser = z.infer<typeof ApiUserSchema>;\nexport type ApiProject = z.infer<typeof ApiProjectSchema>;\n\nexport class ApiError extends Error {\n constructor(\n message: string,\n public readonly statusCode?: number,\n public readonly endpoint?: string,\n ) {\n super(message);\n this.name = 'ApiError';\n }\n}\n\nexport async function fetchUserData(\n accessToken: string,\n baseUrl: string,\n): Promise<ApiUser> {\n try {\n const response = await axios.get(`${baseUrl}/api/users/@me/`, {\n headers: {\n Authorization: `Bearer ${accessToken}`,\n 'User-Agent': WIZARD_USER_AGENT,\n },\n });\n\n return ApiUserSchema.parse(response.data);\n } catch (error) {\n const apiError = handleApiError(error, 'fetch user data');\n analytics.captureException(apiError, {\n endpoint: '/api/users/@me/',\n baseUrl,\n });\n throw apiError;\n }\n}\n\n/**\n * Best-effort fetch of recent activity log entries. Returns [] on any error\n * so callers can treat absence of results as \"haven't detected anything yet\"\n * rather than a hard failure.\n *\n * @unused — no current caller after the Phase 6 streaming-agent pivot\n * dropped activity_log polling from McpSuggestedPromptsScreen.\n * Deliberately retained for future features that want a soft signal of\n * recent project changes (e.g. dashboards, audit summaries). See the\n * ActivityLogEntrySchema doc comment for the keep-vs-delete rationale.\n */\nexport async function fetchRecentActivity(\n accessToken: string,\n projectId: number,\n baseUrl: string,\n since: Date,\n): Promise<ActivityLogEntry[]> {\n try {\n const response = await axios.get(\n `${baseUrl}/api/projects/${projectId}/activity_log/`,\n {\n params: { limit: 10 },\n headers: {\n Authorization: `Bearer ${accessToken}`,\n 'User-Agent': WIZARD_USER_AGENT,\n },\n // Short timeout — best-effort probe, not a critical path.\n timeout: 4000,\n },\n );\n const parsed = ActivityLogResponseSchema.safeParse(response.data);\n if (!parsed.success) return [];\n const sinceMs = since.getTime();\n return parsed.data.results.filter((entry) => {\n if (!entry.created_at) return false;\n const t = Date.parse(entry.created_at);\n return Number.isFinite(t) && t >= sinceMs;\n });\n } catch {\n return [];\n }\n}\n\nexport async function fetchProjectData(\n accessToken: string,\n projectId: number,\n baseUrl: string,\n): Promise<ApiProject> {\n try {\n const response = await axios.get(`${baseUrl}/api/projects/${projectId}/`, {\n headers: {\n Authorization: `Bearer ${accessToken}`,\n 'User-Agent': WIZARD_USER_AGENT,\n },\n });\n\n return ApiProjectSchema.parse(response.data);\n } catch (error) {\n const apiError = handleApiError(error, 'fetch project data');\n analytics.captureException(apiError, {\n endpoint: `/api/projects/${projectId}/`,\n baseUrl,\n projectId,\n });\n throw apiError;\n }\n}\n\n/** Minimal shape of `/api/projects/:id/integrations/` — we only read `kind`. */\nconst IntegrationsResponseSchema = z.object({\n results: z.array(z.object({ kind: z.string().nullish() }).passthrough()),\n});\n\n/**\n * Check whether the project already has a Slack integration connected.\n * Requires the `integration:read` scope. Throws on failure — callers\n * (including the SlackConnectScreen poll) decide how to degrade and\n * are responsible for capturing the error exactly once.\n */\nexport async function fetchSlackConnected(\n accessToken: string,\n projectId: number,\n baseUrl: string,\n signal?: AbortSignal,\n): Promise<boolean> {\n const response = await axios.get(\n `${baseUrl}/api/projects/${projectId}/integrations/`,\n {\n headers: {\n Authorization: `Bearer ${accessToken}`,\n 'User-Agent': WIZARD_USER_AGENT,\n },\n signal,\n },\n );\n const parsed = IntegrationsResponseSchema.safeParse(response.data);\n if (!parsed.success) return false;\n return parsed.data.results.some((i) => i.kind === 'slack');\n}\n\nexport function handleApiError(error: unknown, operation: string): ApiError {\n if (axios.isAxiosError(error)) {\n const axiosError = error as AxiosError<{ detail?: string }>;\n const status = axiosError.response?.status;\n const detail = axiosError.response?.data?.detail;\n const endpoint = axiosError.config?.url;\n\n if (status === 401) {\n return new ApiError(\n `Authentication failed while trying to ${operation}`,\n status,\n endpoint,\n );\n }\n\n if (status === 403) {\n return new ApiError(\n `Access denied while trying to ${operation}`,\n status,\n endpoint,\n );\n }\n\n if (status === 404) {\n return new ApiError(\n `Resource not found while trying to ${operation}`,\n status,\n endpoint,\n );\n }\n\n const message = detail || `Failed to ${operation}`;\n return new ApiError(message, status, endpoint);\n }\n\n if (error instanceof z.ZodError) {\n return new ApiError(`Invalid response format while trying to ${operation}`);\n }\n\n return new ApiError(\n `Unexpected error while trying to ${operation}: ${\n error instanceof Error ? error.message : 'Unknown error'\n }`,\n );\n}\n"],"mappings":"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"}
|
package/dist/bin.js
CHANGED
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { J as VERSION, M as POSTHOG_DOCS_URL, W as WIZARD_USER_AGENT, _ as SIGNUP_WIZARD_READINESS_CONFIG, a as getLogFilePath, h as LoggingUI, m as setUI, p as getUI, s as logToFile, v as evaluateWizardReadiness, y as getBlockingServiceKeys } from "./debug-
|
|
3
|
-
import { t as analytics } from "./analytics-
|
|
4
|
-
import { n as isUsingTypeScript } from "./setup-utils-
|
|
5
|
-
import { a as getUiHostFromHost, n as getCloudUrlFromRegion } from "./urls-
|
|
6
|
-
import {
|
|
7
|
-
import "./wizard-session-
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
2
|
+
import { J as VERSION, M as POSTHOG_DOCS_URL, W as WIZARD_USER_AGENT, _ as SIGNUP_WIZARD_READINESS_CONFIG, a as getLogFilePath, h as LoggingUI, m as setUI, p as getUI, s as logToFile, v as evaluateWizardReadiness, y as getBlockingServiceKeys } from "./debug-h7Z9zEbD.js";
|
|
3
|
+
import { t as analytics } from "./analytics-Bl5DPj_0.js";
|
|
4
|
+
import { n as isUsingTypeScript } from "./setup-utils-BfV4pydt.js";
|
|
5
|
+
import { a as getUiHostFromHost, n as getCloudUrlFromRegion } from "./urls-B66Ib2jT.js";
|
|
6
|
+
import { o as handleApiError } from "./api-DuA0_88V.js";
|
|
7
|
+
import "./wizard-session-G3VWD6hv.js";
|
|
8
|
+
import { r as runCleanups } from "./wizard-abort-D1_DnFjm.js";
|
|
9
|
+
import { n as isNonInteractiveEnvironment } from "./environment-uaLmtlH_.js";
|
|
10
|
+
import { _ as AUDIT_CHECKS_KEY, f as WIZARD_TOOL_NAMES, g as AUDIT_CHECKS_FILE, l as AgentSignals, s as recoverOrphanedSettingsBackups, v as AUDIT_REPORT_FILE } from "./agent-interface-DE7txTqh.js";
|
|
11
|
+
import { i as SPINNER_MESSAGE } from "./registry-VSSRH3sU.js";
|
|
12
|
+
import { a as PRODUCT_SUITE_BLOCK, f as Colors, i as LINE_CHART_BLOCK, l as isClearBlock, m as HEALTH_CHECK_STEP, n as posthogIntegrationConfig, o as StatusPeekTrigger, r as FUNNEL_BLOCK } from "./posthog-integration-ChdwFPMj.js";
|
|
12
13
|
import { t as IGNORED_DIRS } from "./file-utils-VAXoyXVA.js";
|
|
13
14
|
import { n as readApiKeyFromEnv } from "./env-api-key-MlzJYAvt.js";
|
|
14
15
|
import { satisfies } from "semver";
|
|
@@ -160,7 +161,7 @@ function runProvision(argv) {
|
|
|
160
161
|
}
|
|
161
162
|
async function provision({ email, region, name, jsonMode }) {
|
|
162
163
|
try {
|
|
163
|
-
const { provisionNewAccount } = await import("./provisioning-
|
|
164
|
+
const { provisionNewAccount } = await import("./provisioning-GeMkBMSR.js").then((n) => n.n);
|
|
164
165
|
if (!jsonMode) getUI().log.info(`Provisioning account for ${email} in ${region}...`);
|
|
165
166
|
emitResult(await provisionNewAccount(email, name, region), jsonMode);
|
|
166
167
|
process.exit(0);
|
|
@@ -234,18 +235,18 @@ const basicIntegrationCommand = {
|
|
|
234
235
|
handler: (argv) => {
|
|
235
236
|
(async () => {
|
|
236
237
|
if (argv.ci) {
|
|
237
|
-
const { runCIInstall } = await import("./ci-install-
|
|
238
|
+
const { runCIInstall } = await import("./ci-install-BnOYI4mZ.js");
|
|
238
239
|
return runCIInstall(argv);
|
|
239
240
|
}
|
|
240
241
|
if (isNonInteractiveEnvironment()) {
|
|
241
|
-
const { failNonInteractive } = await import("./non-interactive-
|
|
242
|
+
const { failNonInteractive } = await import("./non-interactive-DJrVQ4nS.js");
|
|
242
243
|
return failNonInteractive();
|
|
243
244
|
}
|
|
244
245
|
if (argv.playground) {
|
|
245
|
-
const { runPlayground } = await import("./playground-
|
|
246
|
+
const { runPlayground } = await import("./playground-DCVaVeVD.js");
|
|
246
247
|
return runPlayground();
|
|
247
248
|
}
|
|
248
|
-
const { runInteractive } = await import("./interactive-
|
|
249
|
+
const { runInteractive } = await import("./interactive-CW5gjyDd.js");
|
|
249
250
|
runInteractive(argv);
|
|
250
251
|
})();
|
|
251
252
|
}
|
|
@@ -2638,18 +2639,28 @@ const errorTrackingUploadSourceMapsConfig = {
|
|
|
2638
2639
|
const mcpAddConfig = {
|
|
2639
2640
|
id: "mcp-add",
|
|
2640
2641
|
description: "Add PostHog MCP server to supported clients",
|
|
2641
|
-
steps: [
|
|
2642
|
-
|
|
2643
|
-
|
|
2644
|
-
|
|
2645
|
-
|
|
2646
|
-
|
|
2647
|
-
|
|
2648
|
-
|
|
2649
|
-
|
|
2650
|
-
|
|
2651
|
-
|
|
2652
|
-
|
|
2642
|
+
steps: [
|
|
2643
|
+
{
|
|
2644
|
+
id: "mcp-add",
|
|
2645
|
+
label: "Add MCP server",
|
|
2646
|
+
screenId: "mcp-add",
|
|
2647
|
+
isComplete: (s) => s.mcpComplete
|
|
2648
|
+
},
|
|
2649
|
+
{
|
|
2650
|
+
id: "mcp-suggested-prompts",
|
|
2651
|
+
label: "Suggested prompts",
|
|
2652
|
+
screenId: "mcp-suggested-prompts",
|
|
2653
|
+
show: (s) => s.mcpOutcome === "installed",
|
|
2654
|
+
isComplete: (s) => s.mcpSuggestedPromptsDismissed
|
|
2655
|
+
},
|
|
2656
|
+
{
|
|
2657
|
+
id: "slack-connect",
|
|
2658
|
+
label: "Connect Slack",
|
|
2659
|
+
screenId: "slack-connect",
|
|
2660
|
+
show: (s) => s.mcpOutcome === "installed",
|
|
2661
|
+
isComplete: (s) => s.slackStepDismissed
|
|
2662
|
+
}
|
|
2663
|
+
]
|
|
2653
2664
|
};
|
|
2654
2665
|
/**
|
|
2655
2666
|
* `wizard mcp remove` — single-step uninstall flow.
|
|
@@ -2693,6 +2704,11 @@ const mcpTutorialConfig = {
|
|
|
2693
2704
|
label: "MCP tutorial",
|
|
2694
2705
|
screenId: "mcp-suggested-prompts",
|
|
2695
2706
|
isComplete: (s) => s.mcpSuggestedPromptsDismissed
|
|
2707
|
+
}, {
|
|
2708
|
+
id: "slack-connect",
|
|
2709
|
+
label: "Connect Slack",
|
|
2710
|
+
screenId: "slack-connect",
|
|
2711
|
+
isComplete: (s) => s.slackStepDismissed
|
|
2696
2712
|
}]
|
|
2697
2713
|
};
|
|
2698
2714
|
//#endregion
|
|
@@ -2777,8 +2793,8 @@ function runMcpAdd(argv) {
|
|
|
2777
2793
|
const debug = argv.debug;
|
|
2778
2794
|
const localMcp = argv.local;
|
|
2779
2795
|
try {
|
|
2780
|
-
const { startTUI } = await import("./start-tui-
|
|
2781
|
-
const { buildSession } = await import("./wizard-session-
|
|
2796
|
+
const { startTUI } = await import("./start-tui-BRvm5VP9.js");
|
|
2797
|
+
const { buildSession } = await import("./wizard-session-wPJtNl4c.js");
|
|
2782
2798
|
const tui = startTUI(VERSION, Program.McpAdd);
|
|
2783
2799
|
tui.store.session = buildSession({
|
|
2784
2800
|
debug,
|
|
@@ -2789,7 +2805,7 @@ function runMcpAdd(argv) {
|
|
|
2789
2805
|
} catch (error) {
|
|
2790
2806
|
if (!isTUIUnavailable(error)) throw error;
|
|
2791
2807
|
setUI(new LoggingUI());
|
|
2792
|
-
const { addMCPServerToClientsStep } = await import("./add-mcp-server-to-clients-
|
|
2808
|
+
const { addMCPServerToClientsStep } = await import("./add-mcp-server-to-clients-DQHGhzt6.js").then((n) => n.r);
|
|
2793
2809
|
await addMCPServerToClientsStep({
|
|
2794
2810
|
local: localMcp,
|
|
2795
2811
|
features,
|
|
@@ -2828,8 +2844,8 @@ function runMcpRemove(argv) {
|
|
|
2828
2844
|
const debug = argv.debug;
|
|
2829
2845
|
const localMcp = argv.local;
|
|
2830
2846
|
try {
|
|
2831
|
-
const { startTUI } = await import("./start-tui-
|
|
2832
|
-
const { buildSession } = await import("./wizard-session-
|
|
2847
|
+
const { startTUI } = await import("./start-tui-BRvm5VP9.js");
|
|
2848
|
+
const { buildSession } = await import("./wizard-session-wPJtNl4c.js");
|
|
2833
2849
|
const tui = startTUI(VERSION, Program.McpRemove);
|
|
2834
2850
|
tui.store.session = buildSession({
|
|
2835
2851
|
debug,
|
|
@@ -2837,7 +2853,7 @@ function runMcpRemove(argv) {
|
|
|
2837
2853
|
});
|
|
2838
2854
|
} catch {
|
|
2839
2855
|
setUI(new LoggingUI());
|
|
2840
|
-
const { removeMCPServerFromClientsStep } = await import("./add-mcp-server-to-clients-
|
|
2856
|
+
const { removeMCPServerFromClientsStep } = await import("./add-mcp-server-to-clients-DQHGhzt6.js").then((n) => n.r);
|
|
2841
2857
|
await removeMCPServerFromClientsStep({ local: localMcp });
|
|
2842
2858
|
}
|
|
2843
2859
|
})();
|
|
@@ -2859,8 +2875,8 @@ function runMcpTutorial(argv) {
|
|
|
2859
2875
|
const debug = argv.debug;
|
|
2860
2876
|
const localMcp = argv.local;
|
|
2861
2877
|
try {
|
|
2862
|
-
const { startTUI } = await import("./start-tui-
|
|
2863
|
-
const { buildSession } = await import("./wizard-session-
|
|
2878
|
+
const { startTUI } = await import("./start-tui-BRvm5VP9.js");
|
|
2879
|
+
const { buildSession } = await import("./wizard-session-wPJtNl4c.js");
|
|
2864
2880
|
const tui = startTUI(VERSION, Program.McpTutorial);
|
|
2865
2881
|
tui.store.session = buildSession({
|
|
2866
2882
|
debug,
|
|
@@ -2914,9 +2930,9 @@ function runWizard(config, options) {
|
|
|
2914
2930
|
(async () => {
|
|
2915
2931
|
try {
|
|
2916
2932
|
const installDir = options.installDir || process.cwd();
|
|
2917
|
-
const { startTUI } = await import("./start-tui-
|
|
2918
|
-
const { buildSession, RunPhase } = await import("./wizard-session-
|
|
2919
|
-
const { TaskStreamPush } = await import("./task-stream-
|
|
2933
|
+
const { startTUI } = await import("./start-tui-BRvm5VP9.js");
|
|
2934
|
+
const { buildSession, RunPhase } = await import("./wizard-session-wPJtNl4c.js");
|
|
2935
|
+
const { TaskStreamPush } = await import("./task-stream-CZawuzlz.js");
|
|
2920
2936
|
const { PostHogDestination } = await import("./posthog-Cr37rnla.js");
|
|
2921
2937
|
tui = startTUI(WIZARD_VERSION, config.id);
|
|
2922
2938
|
const activeTui = tui;
|
|
@@ -2954,6 +2970,7 @@ function runWizard(config, options) {
|
|
|
2954
2970
|
if (signalled || exitInProgress) return;
|
|
2955
2971
|
signalled = true;
|
|
2956
2972
|
logToFile("[run-wizard] signal received, flushing task stream");
|
|
2973
|
+
runCleanups();
|
|
2957
2974
|
if (activeTui.store.session.runPhase === RunPhase.Running) activeTui.store.setRunPhase(RunPhase.Error);
|
|
2958
2975
|
activeStream.shutdown(2e3).catch((e) => logToFile("[run-wizard] task stream shutdown error on signal:", e)).finally(() => {
|
|
2959
2976
|
try {
|
|
@@ -2969,7 +2986,7 @@ function runWizard(config, options) {
|
|
|
2969
2986
|
await activeTui.store.getGate("health-check");
|
|
2970
2987
|
const skipAgent = config.run == null;
|
|
2971
2988
|
if (skipAgent) {
|
|
2972
|
-
const { getOrAskForProjectData } = await import("./setup-utils-
|
|
2989
|
+
const { getOrAskForProjectData } = await import("./setup-utils-BfV4pydt.js").then((n) => n.r);
|
|
2973
2990
|
const { projectApiKey, host, accessToken, projectId } = await getOrAskForProjectData({
|
|
2974
2991
|
signup: session.signup,
|
|
2975
2992
|
ci: session.ci,
|
|
@@ -2984,7 +3001,7 @@ function runWizard(config, options) {
|
|
|
2984
3001
|
projectId
|
|
2985
3002
|
});
|
|
2986
3003
|
} else {
|
|
2987
|
-
const { runAgent } = await import("./agent-runner-
|
|
3004
|
+
const { runAgent } = await import("./agent-runner-DUZ5OD6e.js");
|
|
2988
3005
|
await runAgent(config, activeTui.store.session);
|
|
2989
3006
|
}
|
|
2990
3007
|
const isDone = () => skipAgent ? activeTui.store.session.outroDismissed : activeTui.store.session.skillsComplete;
|
|
@@ -3008,6 +3025,7 @@ function runWizard(config, options) {
|
|
|
3008
3025
|
process.exit(0);
|
|
3009
3026
|
} catch (err) {
|
|
3010
3027
|
logToFile("[run-wizard] FATAL:", err);
|
|
3028
|
+
runCleanups();
|
|
3011
3029
|
exitInProgress = true;
|
|
3012
3030
|
if (onSignal) {
|
|
3013
3031
|
process.off("SIGINT", onSignal);
|
|
@@ -3058,11 +3076,11 @@ function runWizardCI(config, options) {
|
|
|
3058
3076
|
validateCiOptions(options);
|
|
3059
3077
|
(async () => {
|
|
3060
3078
|
const path = await import("path");
|
|
3061
|
-
const { buildSession } = await import("./wizard-session-
|
|
3062
|
-
const { readEnvironment } = await import("./environment-
|
|
3079
|
+
const { buildSession } = await import("./wizard-session-wPJtNl4c.js");
|
|
3080
|
+
const { readEnvironment } = await import("./environment-uaLmtlH_.js").then((n) => n.t);
|
|
3063
3081
|
const { readApiKeyFromEnv } = await import("./env-api-key-MlzJYAvt.js").then((n) => n.t);
|
|
3064
|
-
const { configureLogFileFromEnvironment, logToFile } = await import("./debug-
|
|
3065
|
-
const { wizardAbort, WizardError } = await import("./wizard-abort-
|
|
3082
|
+
const { configureLogFileFromEnvironment, logToFile } = await import("./debug-BVC48wlb.js");
|
|
3083
|
+
const { wizardAbort, WizardError } = await import("./wizard-abort-gMB1eV6T.js");
|
|
3066
3084
|
configureLogFileFromEnvironment();
|
|
3067
3085
|
const env = readEnvironment();
|
|
3068
3086
|
const apiKey = options.apiKey ?? readApiKeyFromEnv() ?? void 0;
|
|
@@ -3110,7 +3128,7 @@ function runWizardCI(config, options) {
|
|
|
3110
3128
|
})
|
|
3111
3129
|
});
|
|
3112
3130
|
}
|
|
3113
|
-
const { runAgent } = await import("./agent-runner-
|
|
3131
|
+
const { runAgent } = await import("./agent-runner-DUZ5OD6e.js");
|
|
3114
3132
|
await runAgent(config, session);
|
|
3115
3133
|
} catch (error) {
|
|
3116
3134
|
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
@@ -3264,7 +3282,7 @@ async function runDoctorCI(options) {
|
|
|
3264
3282
|
getUI().intro("Welcome to the PostHog setup wizard");
|
|
3265
3283
|
getUI().log.info("Running posthog-doctor in CI mode");
|
|
3266
3284
|
try {
|
|
3267
|
-
const { getOrAskForProjectData } = await import("./setup-utils-
|
|
3285
|
+
const { getOrAskForProjectData } = await import("./setup-utils-BfV4pydt.js").then((n) => n.r);
|
|
3268
3286
|
const { host, accessToken, projectId } = await getOrAskForProjectData({
|
|
3269
3287
|
signup: false,
|
|
3270
3288
|
ci: true,
|
|
@@ -3281,7 +3299,7 @@ async function runDoctorCI(options) {
|
|
|
3281
3299
|
for (const issue of sorted) getUI().log.info(` • [${issue.severity}] ${getKindMeta(issue.kind).title}`);
|
|
3282
3300
|
process.exit(1);
|
|
3283
3301
|
} catch (error) {
|
|
3284
|
-
const { ApiError } = await import("./api-
|
|
3302
|
+
const { ApiError } = await import("./api-DuA0_88V.js").then((n) => n.n);
|
|
3285
3303
|
const message = error instanceof ApiError && error.statusCode === 401 ? "Your PostHog API key is invalid or expired." : error instanceof Error ? error.message : String(error);
|
|
3286
3304
|
getUI().log.error(`Doctor failed: ${message}`);
|
|
3287
3305
|
process.exit(1);
|
|
@@ -3422,6 +3440,15 @@ if (!satisfies(process.version, NODE_VERSION_RANGE)) {
|
|
|
3422
3440
|
console.log(`PostHog wizard requires Node.js ${NODE_VERSION_RANGE}. You are using Node.js ${process.version}. Please upgrade your Node.js version.`);
|
|
3423
3441
|
process.exit(1);
|
|
3424
3442
|
}
|
|
3443
|
+
recoverOrphanedSettingsBackups(resolveInstallDir());
|
|
3444
|
+
function resolveInstallDir() {
|
|
3445
|
+
const args = process.argv.slice(2);
|
|
3446
|
+
const flagIndex = args.indexOf("--install-dir");
|
|
3447
|
+
if (flagIndex !== -1 && args[flagIndex + 1]) return args[flagIndex + 1];
|
|
3448
|
+
const inline = args.find((a) => a.startsWith("--install-dir="));
|
|
3449
|
+
if (inline) return inline.slice(14);
|
|
3450
|
+
return process.env.POSTHOG_WIZARD_INSTALL_DIR ?? process.cwd();
|
|
3451
|
+
}
|
|
3425
3452
|
Wizard.use(basicIntegrationCommand).use(mcpCommand).use(integrateCommand).use(auditCommand).use(audit3000Command).use(doctorCommand).use(migrateCommand).use(eventsAuditCommand).use(revenueCommand).use(uploadSourcemapsCommand).use(skillCommand).init();
|
|
3426
3453
|
//#endregion
|
|
3427
3454
|
export { getProgramConfig as a, getContentBlocks$1 as c, getContentBlocks$2 as d, POSTHOG_SDKS$1 as f, Program as i, getKindMeta as l, runWizard as n, DISPLAY_NAME as o, STRIPE_SDKS as p, PROGRAM_REGISTRY as r, SOURCE_MAPS_CONTEXT_KEYS as s, runWizardCI as t, fetchHealthIssues as u };
|