@posthog/wizard 2.22.1 → 2.23.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 (53) hide show
  1. package/dist/{AiOptInRequiredScreen-B8mgZbe5.js → AiOptInRequiredScreen-BOMyYFep.js} +9 -9
  2. package/dist/AiOptInRequiredScreen-BOMyYFep.js.map +1 -0
  3. package/dist/{add-mcp-server-to-clients-lCxOS1A1.js → add-mcp-server-to-clients-BEziI3z9.js} +4 -4
  4. package/dist/{add-mcp-server-to-clients-lCxOS1A1.js.map → add-mcp-server-to-clients-BEziI3z9.js.map} +1 -1
  5. package/dist/{agent-interface-BPCzPvK-.js → agent-interface-DjMPlXl0.js} +5 -5
  6. package/dist/{agent-interface-BPCzPvK-.js.map → agent-interface-DjMPlXl0.js.map} +1 -1
  7. package/dist/{agent-runner-DgzF2mga.js → agent-runner-Bv-7z-pQ.js} +8 -8
  8. package/dist/{agent-runner-DgzF2mga.js.map → agent-runner-Bv-7z-pQ.js.map} +1 -1
  9. package/dist/{analytics-BZv-cKyn.js → analytics-9D4eGgmT.js} +13 -2
  10. package/dist/analytics-9D4eGgmT.js.map +1 -0
  11. package/dist/{api-BkLZ8BWm.js → api-Dwd0B-E9.js} +3 -3
  12. package/dist/{api-BkLZ8BWm.js.map → api-Dwd0B-E9.js.map} +1 -1
  13. package/dist/bin.js +31 -31
  14. package/dist/{ci-install-DBARq5LX.js → ci-install-DGXCpvKh.js} +4 -4
  15. package/dist/{ci-install-DBARq5LX.js.map → ci-install-DGXCpvKh.js.map} +1 -1
  16. package/dist/{debug-Ckumcrye.js → debug-CgT5MmVB.js} +2 -2
  17. package/dist/{debug-Ckumcrye.js.map → debug-CgT5MmVB.js.map} +1 -1
  18. package/dist/{debug-DLsuyfln.js → debug-DayHBBST.js} +1 -1
  19. package/dist/{environment-DUh_8hqW.js → environment-CI2pTYTG.js} +3 -3
  20. package/dist/{environment-DUh_8hqW.js.map → environment-CI2pTYTG.js.map} +1 -1
  21. package/dist/{interactive-DeiHgviS.js → interactive-D52p_opJ.js} +2 -2
  22. package/dist/{interactive-DeiHgviS.js.map → interactive-D52p_opJ.js.map} +1 -1
  23. package/dist/{mcp-prompt-streaming-kEJgmB30.js → mcp-prompt-streaming-tdoy9UJ2.js} +4 -4
  24. package/dist/{mcp-prompt-streaming-kEJgmB30.js.map → mcp-prompt-streaming-tdoy9UJ2.js.map} +1 -1
  25. package/dist/{non-interactive-I4ifOSau.js → non-interactive-6hadW20x.js} +2 -2
  26. package/dist/{non-interactive-I4ifOSau.js.map → non-interactive-6hadW20x.js.map} +1 -1
  27. package/dist/{package-manager-fUeLORHg.js → package-manager-BI0J5E7t.js} +2 -2
  28. package/dist/{package-manager-fUeLORHg.js.map → package-manager-BI0J5E7t.js.map} +1 -1
  29. package/dist/{playground-DLLIz4Ql.js → playground-z4A5dHPv.js} +4 -4
  30. package/dist/{playground-DLLIz4Ql.js.map → playground-z4A5dHPv.js.map} +1 -1
  31. package/dist/{posthog-integration-COcPewVt.js → posthog-integration-BWbZU9Xq.js} +11 -11
  32. package/dist/{posthog-integration-COcPewVt.js.map → posthog-integration-BWbZU9Xq.js.map} +1 -1
  33. package/dist/{provisioning-7xU12_S9.js → provisioning-B30Be2NA.js} +3 -3
  34. package/dist/{provisioning-7xU12_S9.js.map → provisioning-B30Be2NA.js.map} +1 -1
  35. package/dist/{registry-YwaF-aD8.js → registry-CD_DplSQ.js} +4 -4
  36. package/dist/{registry-YwaF-aD8.js.map → registry-CD_DplSQ.js.map} +1 -1
  37. package/dist/{setup-utils-Cr4FxJDl.js → setup-utils-Dwgkk8AQ.js} +8 -8
  38. package/dist/{setup-utils-Cr4FxJDl.js.map → setup-utils-Dwgkk8AQ.js.map} +1 -1
  39. package/dist/{start-tui--E4PXdwG.js → start-tui-SLeEzlJs.js} +34 -15
  40. package/dist/start-tui-SLeEzlJs.js.map +1 -0
  41. package/dist/{steps-CxUxdK4V.js → steps-B1gzyRkC.js} +6 -6
  42. package/dist/{steps-CxUxdK4V.js.map → steps-B1gzyRkC.js.map} +1 -1
  43. package/dist/{telemetry-BS7yw3TP.js → telemetry-5rkeTd2_.js} +3 -3
  44. package/dist/{telemetry-BS7yw3TP.js.map → telemetry-5rkeTd2_.js.map} +1 -1
  45. package/dist/{urls-BW23_XbC.js → urls-Cb4SI9kf.js} +2 -2
  46. package/dist/{urls-BW23_XbC.js.map → urls-Cb4SI9kf.js.map} +1 -1
  47. package/dist/{wizard-abort-BPsnXKY5.js → wizard-abort-DW2-ZjiS.js} +1 -1
  48. package/dist/{wizard-abort-E66_R4S7.js → wizard-abort-DovHQa-j.js} +3 -3
  49. package/dist/{wizard-abort-E66_R4S7.js.map → wizard-abort-DovHQa-j.js.map} +1 -1
  50. package/package.json +2 -2
  51. package/dist/AiOptInRequiredScreen-B8mgZbe5.js.map +0 -1
  52. package/dist/analytics-BZv-cKyn.js.map +0 -1
  53. package/dist/start-tui--E4PXdwG.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"api-BkLZ8BWm.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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"}
1
+ {"version":3,"file":"api-Dwd0B-E9.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,16 +1,16 @@
1
1
  #!/usr/bin/env node
2
- import { $ as VERSION, P as POSTHOG_DOCS_URL, Y 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-Ckumcrye.js";
3
- import { t as analytics } from "./analytics-BZv-cKyn.js";
4
- import { r as setEntryCommand } from "./telemetry-BS7yw3TP.js";
5
- import { n as isUsingTypeScript, t as getOrAskForProjectData } from "./setup-utils-Cr4FxJDl.js";
6
- import { a as getUiHostFromHost, n as getCloudUrlFromRegion } from "./urls-BW23_XbC.js";
7
- import { o as handleApiError } from "./api-BkLZ8BWm.js";
2
+ import { $ as VERSION, P as POSTHOG_DOCS_URL, Y 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-CgT5MmVB.js";
3
+ import { t as analytics } from "./analytics-9D4eGgmT.js";
4
+ import { r as setEntryCommand } from "./telemetry-5rkeTd2_.js";
5
+ import { n as isUsingTypeScript, t as getOrAskForProjectData } from "./setup-utils-Dwgkk8AQ.js";
6
+ import { a as getUiHostFromHost, n as getCloudUrlFromRegion } from "./urls-Cb4SI9kf.js";
7
+ import { o as handleApiError } from "./api-Dwd0B-E9.js";
8
8
  import "./wizard-session-G3VWD6hv.js";
9
- import { r as runCleanups } from "./wizard-abort-E66_R4S7.js";
10
- import { n as isNonInteractiveEnvironment } from "./environment-DUh_8hqW.js";
11
- 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-BPCzPvK-.js";
12
- import { i as SPINNER_MESSAGE } from "./registry-YwaF-aD8.js";
13
- 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-COcPewVt.js";
9
+ import { r as runCleanups } from "./wizard-abort-DovHQa-j.js";
10
+ import { n as isNonInteractiveEnvironment } from "./environment-CI2pTYTG.js";
11
+ 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-DjMPlXl0.js";
12
+ import { i as SPINNER_MESSAGE } from "./registry-CD_DplSQ.js";
13
+ 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-BWbZU9Xq.js";
14
14
  import { t as IGNORED_DIRS } from "./file-utils-VAXoyXVA.js";
15
15
  import { n as readApiKeyFromEnv } from "./env-api-key-MlzJYAvt.js";
16
16
  import { satisfies } from "semver";
@@ -166,7 +166,7 @@ function runProvision(argv) {
166
166
  }
167
167
  async function provision({ email, region, name, jsonMode }) {
168
168
  try {
169
- const { provisionNewAccount } = await import("./provisioning-7xU12_S9.js").then((n) => n.n);
169
+ const { provisionNewAccount } = await import("./provisioning-B30Be2NA.js").then((n) => n.n);
170
170
  if (!jsonMode) getUI().log.info(`Provisioning account for ${email} in ${region}...`);
171
171
  emitResult(await provisionNewAccount(email, name, region), jsonMode);
172
172
  process.exit(0);
@@ -241,18 +241,18 @@ const basicIntegrationCommand = {
241
241
  setEntryCommand("integrate");
242
242
  (async () => {
243
243
  if (argv.ci) {
244
- const { runCIInstall } = await import("./ci-install-DBARq5LX.js");
244
+ const { runCIInstall } = await import("./ci-install-DGXCpvKh.js");
245
245
  return runCIInstall(argv);
246
246
  }
247
247
  if (isNonInteractiveEnvironment()) {
248
- const { failNonInteractive } = await import("./non-interactive-I4ifOSau.js");
248
+ const { failNonInteractive } = await import("./non-interactive-6hadW20x.js");
249
249
  return failNonInteractive();
250
250
  }
251
251
  if (argv.playground) {
252
- const { runPlayground } = await import("./playground-DLLIz4Ql.js");
252
+ const { runPlayground } = await import("./playground-z4A5dHPv.js");
253
253
  return runPlayground();
254
254
  }
255
- const { runInteractive } = await import("./interactive-DeiHgviS.js");
255
+ const { runInteractive } = await import("./interactive-D52p_opJ.js");
256
256
  runInteractive(argv);
257
257
  })();
258
258
  }
@@ -2873,7 +2873,7 @@ function runMcpAdd(argv) {
2873
2873
  const debug = argv.debug;
2874
2874
  const localMcp = argv.local;
2875
2875
  try {
2876
- const { startTUI } = await import("./start-tui--E4PXdwG.js");
2876
+ const { startTUI } = await import("./start-tui-SLeEzlJs.js");
2877
2877
  const { buildSession } = await import("./wizard-session-wPJtNl4c.js");
2878
2878
  const tui = startTUI(VERSION, Program.McpAdd);
2879
2879
  tui.store.session = buildSession({
@@ -2885,7 +2885,7 @@ function runMcpAdd(argv) {
2885
2885
  } catch (error) {
2886
2886
  if (!isTUIUnavailable(error)) throw error;
2887
2887
  setUI(new LoggingUI());
2888
- const { addMCPServerToClientsStep } = await import("./add-mcp-server-to-clients-lCxOS1A1.js").then((n) => n.r);
2888
+ const { addMCPServerToClientsStep } = await import("./add-mcp-server-to-clients-BEziI3z9.js").then((n) => n.r);
2889
2889
  await addMCPServerToClientsStep({
2890
2890
  local: localMcp,
2891
2891
  features,
@@ -2924,7 +2924,7 @@ function runMcpRemove(argv) {
2924
2924
  const debug = argv.debug;
2925
2925
  const localMcp = argv.local;
2926
2926
  try {
2927
- const { startTUI } = await import("./start-tui--E4PXdwG.js");
2927
+ const { startTUI } = await import("./start-tui-SLeEzlJs.js");
2928
2928
  const { buildSession } = await import("./wizard-session-wPJtNl4c.js");
2929
2929
  const tui = startTUI(VERSION, Program.McpRemove);
2930
2930
  tui.store.session = buildSession({
@@ -2933,7 +2933,7 @@ function runMcpRemove(argv) {
2933
2933
  });
2934
2934
  } catch {
2935
2935
  setUI(new LoggingUI());
2936
- const { removeMCPServerFromClientsStep } = await import("./add-mcp-server-to-clients-lCxOS1A1.js").then((n) => n.r);
2936
+ const { removeMCPServerFromClientsStep } = await import("./add-mcp-server-to-clients-BEziI3z9.js").then((n) => n.r);
2937
2937
  await removeMCPServerFromClientsStep({ local: localMcp });
2938
2938
  }
2939
2939
  })();
@@ -2955,7 +2955,7 @@ function runMcpTutorial(argv) {
2955
2955
  const debug = argv.debug;
2956
2956
  const localMcp = argv.local;
2957
2957
  try {
2958
- const { startTUI } = await import("./start-tui--E4PXdwG.js");
2958
+ const { startTUI } = await import("./start-tui-SLeEzlJs.js");
2959
2959
  const { buildSession } = await import("./wizard-session-wPJtNl4c.js");
2960
2960
  const tui = startTUI(VERSION, Program.McpTutorial);
2961
2961
  tui.store.session = buildSession({
@@ -3010,7 +3010,7 @@ function runWizard(config, options) {
3010
3010
  (async () => {
3011
3011
  try {
3012
3012
  const installDir = options.installDir || process.cwd();
3013
- const { startTUI } = await import("./start-tui--E4PXdwG.js");
3013
+ const { startTUI } = await import("./start-tui-SLeEzlJs.js");
3014
3014
  const { buildSession, RunPhase } = await import("./wizard-session-wPJtNl4c.js");
3015
3015
  const { TaskStreamPush } = await import("./task-stream-CZawuzlz.js");
3016
3016
  const { PostHogDestination } = await import("./posthog-Cr37rnla.js");
@@ -3066,7 +3066,7 @@ function runWizard(config, options) {
3066
3066
  await activeTui.store.getGate("health-check");
3067
3067
  const skipAgent = config.run == null;
3068
3068
  if (skipAgent) {
3069
- const { getOrAskForProjectData } = await import("./setup-utils-Cr4FxJDl.js").then((n) => n.r);
3069
+ const { getOrAskForProjectData } = await import("./setup-utils-Dwgkk8AQ.js").then((n) => n.r);
3070
3070
  const { projectApiKey, host, accessToken, projectId } = await getOrAskForProjectData({
3071
3071
  signup: session.signup,
3072
3072
  ci: session.ci,
@@ -3081,7 +3081,7 @@ function runWizard(config, options) {
3081
3081
  projectId
3082
3082
  });
3083
3083
  } else {
3084
- const { runAgent } = await import("./agent-runner-DgzF2mga.js");
3084
+ const { runAgent } = await import("./agent-runner-Bv-7z-pQ.js");
3085
3085
  await runAgent(config, activeTui.store.session);
3086
3086
  }
3087
3087
  const isDone = () => skipAgent ? activeTui.store.session.outroDismissed : activeTui.store.session.skillsComplete;
@@ -3158,10 +3158,10 @@ function runWizardCI(config, options) {
3158
3158
  (async () => {
3159
3159
  const path = await import("path");
3160
3160
  const { buildSession } = await import("./wizard-session-wPJtNl4c.js");
3161
- const { readEnvironment } = await import("./environment-DUh_8hqW.js").then((n) => n.t);
3161
+ const { readEnvironment } = await import("./environment-CI2pTYTG.js").then((n) => n.t);
3162
3162
  const { readApiKeyFromEnv } = await import("./env-api-key-MlzJYAvt.js").then((n) => n.t);
3163
- const { configureLogFileFromEnvironment, logToFile } = await import("./debug-DLsuyfln.js");
3164
- const { wizardAbort, WizardError } = await import("./wizard-abort-BPsnXKY5.js");
3163
+ const { configureLogFileFromEnvironment, logToFile } = await import("./debug-DayHBBST.js");
3164
+ const { wizardAbort, WizardError } = await import("./wizard-abort-DW2-ZjiS.js");
3165
3165
  configureLogFileFromEnvironment();
3166
3166
  const env = readEnvironment();
3167
3167
  const apiKey = options.apiKey ?? readApiKeyFromEnv() ?? void 0;
@@ -3212,7 +3212,7 @@ function runWizardCI(config, options) {
3212
3212
  })
3213
3213
  });
3214
3214
  }
3215
- const { runAgent } = await import("./agent-runner-DgzF2mga.js");
3215
+ const { runAgent } = await import("./agent-runner-Bv-7z-pQ.js");
3216
3216
  await runAgent(config, session);
3217
3217
  } catch (error) {
3218
3218
  const errorMessage = error instanceof Error ? error.message : String(error);
@@ -3366,7 +3366,7 @@ async function runDoctorCI(options) {
3366
3366
  getUI().intro("Welcome to the PostHog setup wizard");
3367
3367
  getUI().log.info("Running posthog-doctor in CI mode");
3368
3368
  try {
3369
- const { getOrAskForProjectData } = await import("./setup-utils-Cr4FxJDl.js").then((n) => n.r);
3369
+ const { getOrAskForProjectData } = await import("./setup-utils-Dwgkk8AQ.js").then((n) => n.r);
3370
3370
  const { host, accessToken, projectId } = await getOrAskForProjectData({
3371
3371
  signup: false,
3372
3372
  ci: true,
@@ -3383,7 +3383,7 @@ async function runDoctorCI(options) {
3383
3383
  for (const issue of sorted) getUI().log.info(` • [${issue.severity}] ${getKindMeta(issue.kind).title}`);
3384
3384
  process.exit(1);
3385
3385
  } catch (error) {
3386
- const { ApiError } = await import("./api-BkLZ8BWm.js").then((n) => n.n);
3386
+ const { ApiError } = await import("./api-Dwd0B-E9.js").then((n) => n.n);
3387
3387
  const message = error instanceof ApiError && error.statusCode === 401 ? "Your PostHog API key is invalid or expired." : error instanceof Error ? error.message : String(error);
3388
3388
  getUI().log.error(`Doctor failed: ${message}`);
3389
3389
  process.exit(1);
@@ -3462,7 +3462,7 @@ function runSlackConnect(argv) {
3462
3462
  (async () => {
3463
3463
  const debug = argv.debug;
3464
3464
  try {
3465
- const { startTUI } = await import("./start-tui--E4PXdwG.js");
3465
+ const { startTUI } = await import("./start-tui-SLeEzlJs.js");
3466
3466
  const { buildSession } = await import("./wizard-session-wPJtNl4c.js");
3467
3467
  const tui = startTUI(VERSION, Program.SlackConnect);
3468
3468
  tui.store.session = buildSession({ debug });
@@ -1,6 +1,6 @@
1
- import { h as LoggingUI, m as setUI, p as getUI } from "./debug-Ckumcrye.js";
2
- import { t as provisionNewAccount } from "./provisioning-7xU12_S9.js";
3
- import { n as posthogIntegrationConfig } from "./posthog-integration-COcPewVt.js";
1
+ import { h as LoggingUI, m as setUI, p as getUI } from "./debug-CgT5MmVB.js";
2
+ import { t as provisionNewAccount } from "./provisioning-B30Be2NA.js";
3
+ import { n as posthogIntegrationConfig } from "./posthog-integration-BWbZU9Xq.js";
4
4
  import { t as runWizardCI } from "./bin.js";
5
5
  //#region src/commands/basic-integration/ci-install.ts
6
6
  /** CI-mode entry point: validate signup flags, optionally provision an account, then install. */
@@ -70,4 +70,4 @@ async function provisionForSignup(options) {
70
70
  //#endregion
71
71
  export { runCIInstall };
72
72
 
73
- //# sourceMappingURL=ci-install-DBARq5LX.js.map
73
+ //# sourceMappingURL=ci-install-DGXCpvKh.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ci-install-DBARq5LX.js","names":[],"sources":["../src/commands/basic-integration/ci-install.ts"],"sourcesContent":["import type { Arguments } from 'yargs';\nimport { getUI, setUI } from '@ui';\nimport { LoggingUI } from '@ui/logging-ui';\nimport { runWizardCI } from '@lib/runners';\nimport { provisionNewAccount } from '@utils/provisioning';\nimport { posthogIntegrationConfig } from '@lib/programs/posthog-integration/index';\n\ntype Options = Arguments & {\n region?: string;\n installDir?: string;\n apiKey?: string;\n signup?: boolean;\n email?: string;\n name?: string;\n projectId?: string;\n};\n\n/** CI-mode entry point: validate signup flags, optionally provision an account, then install. */\nexport function runCIInstall(argv: Arguments): void {\n const options = { ...argv } as Options;\n\n // Base CI validation (region/install-dir/api-key) is owned by runWizardCI.\n // runCIInstall only layers the signup branch on top.\n if (!options.apiKey && !options.signup) {\n return failCI(\n 'CI mode requires --api-key (personal API key phx_xxx). ' +\n 'To create a new account instead, use --signup --email you@example.com.',\n );\n }\n if (!options.apiKey && options.signup && !options.email) {\n return failCI('CI --signup requires --email to create a new account.');\n }\n warnOnUnexpectedKeyPrefix(options.apiKey);\n\n void (async () => {\n if (!options.apiKey && options.signup) {\n // Fail before the irreversible provisioning step rather than after it.\n if (!options.installDir) {\n return failCI(\n 'CI mode requires --install-dir (directory to install in)',\n );\n }\n const provisioned = await provisionForSignup(options);\n options.apiKey = provisioned.personalApiKey;\n if (options.projectId == null) options.projectId = provisioned.projectId;\n }\n runWizardCI(posthogIntegrationConfig, options);\n })().catch(() => {\n process.exit(1);\n });\n}\n\nfunction failCI(message: string): void {\n setUI(new LoggingUI());\n getUI().intro('PostHog Wizard');\n getUI().log.error(message);\n process.exit(1);\n}\n\n/** `phx_` is the personal-API-key prefix the LLM Gateway expects. */\nfunction warnOnUnexpectedKeyPrefix(apiKey: string | undefined): void {\n if (!apiKey || apiKey.startsWith('phx_')) return;\n setUI(new LoggingUI());\n getUI().intro('PostHog Wizard');\n const prefix = apiKey.slice(0, 4);\n const hint =\n prefix === 'pha_'\n ? ' (pha_ is an OAuth access token — CI mode expects a personal API key)'\n : prefix === 'phc_'\n ? ' (phc_ is a project/client key — CI mode expects a personal API key)'\n : '';\n getUI().log.warn(\n `--api-key does not start with \"phx_\"${hint}. Continuing anyway, but the LLM Gateway may reject it with a 401.`,\n );\n}\n\n/**\n * Provision a new account and return its credentials. Throws on any failure\n * (after logging a user-facing message); the caller's `.catch` turns that\n * into a non-zero exit. The return type carries no failure sentinel.\n */\nasync function provisionForSignup(\n options: Options,\n): Promise<{ personalApiKey: string; projectId: string }> {\n setUI(new LoggingUI());\n getUI().intro('PostHog Wizard');\n const signupRegion = ((options.region as string) || 'us').toUpperCase() as\n | 'US'\n | 'EU';\n getUI().log.info(\n `Provisioning new PostHog account for ${String(\n options.email,\n )} in ${signupRegion}...`,\n );\n\n let result;\n try {\n result = await provisionNewAccount(\n options.email as string,\n options.name ?? '',\n signupRegion,\n );\n } catch (error) {\n const msg = error instanceof Error ? error.message : String(error);\n getUI().log.error(`Provisioning failed: ${msg}`);\n throw error;\n }\n\n if (!result.personalApiKey) {\n getUI().log.error(\n 'Provisioning succeeded but no personal API key was returned — cannot continue install.',\n );\n throw new Error('provisioning returned no personal API key');\n }\n\n getUI().log.success('Account ready.');\n getUI().log.info(` Project API Key: ${result.projectApiKey}`);\n getUI().log.info(` Personal API Key: ${result.personalApiKey}`);\n getUI().log.info(` Host: ${result.host}`);\n return {\n personalApiKey: result.personalApiKey,\n projectId: result.projectId,\n };\n}\n"],"mappings":";;;;;;AAkBA,SAAgB,aAAa,MAAuB;CAClD,MAAM,UAAU,EAAE,GAAG,MAAM;AAI3B,KAAI,CAAC,QAAQ,UAAU,CAAC,QAAQ,OAC9B,QAAO,OACL,gIAED;AAEH,KAAI,CAAC,QAAQ,UAAU,QAAQ,UAAU,CAAC,QAAQ,MAChD,QAAO,OAAO,wDAAwD;AAExE,2BAA0B,QAAQ,OAAO;AAEzC,EAAM,YAAY;AAChB,MAAI,CAAC,QAAQ,UAAU,QAAQ,QAAQ;AAErC,OAAI,CAAC,QAAQ,WACX,QAAO,OACL,2DACD;GAEH,MAAM,cAAc,MAAM,mBAAmB,QAAQ;AACrD,WAAQ,SAAS,YAAY;AAC7B,OAAI,QAAQ,aAAa,KAAM,SAAQ,YAAY,YAAY;;AAEjE,cAAY,0BAA0B,QAAQ;KAC5C,CAAC,YAAY;AACf,UAAQ,KAAK,EAAE;GACf;;AAGJ,SAAS,OAAO,SAAuB;AACrC,OAAM,IAAI,WAAW,CAAC;AACtB,QAAO,CAAC,MAAM,iBAAiB;AAC/B,QAAO,CAAC,IAAI,MAAM,QAAQ;AAC1B,SAAQ,KAAK,EAAE;;;AAIjB,SAAS,0BAA0B,QAAkC;AACnE,KAAI,CAAC,UAAU,OAAO,WAAW,OAAO,CAAE;AAC1C,OAAM,IAAI,WAAW,CAAC;AACtB,QAAO,CAAC,MAAM,iBAAiB;CAC/B,MAAM,SAAS,OAAO,MAAM,GAAG,EAAE;CACjC,MAAM,OACJ,WAAW,SACP,0EACA,WAAW,SACX,yEACA;AACN,QAAO,CAAC,IAAI,KACV,uCAAuC,KAAK,oEAC7C;;;;;;;AAQH,eAAe,mBACb,SACwD;AACxD,OAAM,IAAI,WAAW,CAAC;AACtB,QAAO,CAAC,MAAM,iBAAiB;CAC/B,MAAM,gBAAiB,QAAQ,UAAqB,MAAM,aAAa;AAGvE,QAAO,CAAC,IAAI,KACV,wCAAwC,OACtC,QAAQ,MACT,CAAC,MAAM,aAAa,KACtB;CAED,IAAI;AACJ,KAAI;AACF,WAAS,MAAM,oBACb,QAAQ,OACR,QAAQ,QAAQ,IAChB,aACD;UACM,OAAO;EACd,MAAM,MAAM,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM;AAClE,SAAO,CAAC,IAAI,MAAM,wBAAwB,MAAM;AAChD,QAAM;;AAGR,KAAI,CAAC,OAAO,gBAAgB;AAC1B,SAAO,CAAC,IAAI,MACV,yFACD;AACD,QAAM,IAAI,MAAM,4CAA4C;;AAG9D,QAAO,CAAC,IAAI,QAAQ,iBAAiB;AACrC,QAAO,CAAC,IAAI,KAAK,uBAAuB,OAAO,gBAAgB;AAC/D,QAAO,CAAC,IAAI,KAAK,uBAAuB,OAAO,iBAAiB;AAChE,QAAO,CAAC,IAAI,KAAK,uBAAuB,OAAO,OAAO;AACtD,QAAO;EACL,gBAAgB,OAAO;EACvB,WAAW,OAAO;EACnB"}
1
+ {"version":3,"file":"ci-install-DGXCpvKh.js","names":[],"sources":["../src/commands/basic-integration/ci-install.ts"],"sourcesContent":["import type { Arguments } from 'yargs';\nimport { getUI, setUI } from '@ui';\nimport { LoggingUI } from '@ui/logging-ui';\nimport { runWizardCI } from '@lib/runners';\nimport { provisionNewAccount } from '@utils/provisioning';\nimport { posthogIntegrationConfig } from '@lib/programs/posthog-integration/index';\n\ntype Options = Arguments & {\n region?: string;\n installDir?: string;\n apiKey?: string;\n signup?: boolean;\n email?: string;\n name?: string;\n projectId?: string;\n};\n\n/** CI-mode entry point: validate signup flags, optionally provision an account, then install. */\nexport function runCIInstall(argv: Arguments): void {\n const options = { ...argv } as Options;\n\n // Base CI validation (region/install-dir/api-key) is owned by runWizardCI.\n // runCIInstall only layers the signup branch on top.\n if (!options.apiKey && !options.signup) {\n return failCI(\n 'CI mode requires --api-key (personal API key phx_xxx). ' +\n 'To create a new account instead, use --signup --email you@example.com.',\n );\n }\n if (!options.apiKey && options.signup && !options.email) {\n return failCI('CI --signup requires --email to create a new account.');\n }\n warnOnUnexpectedKeyPrefix(options.apiKey);\n\n void (async () => {\n if (!options.apiKey && options.signup) {\n // Fail before the irreversible provisioning step rather than after it.\n if (!options.installDir) {\n return failCI(\n 'CI mode requires --install-dir (directory to install in)',\n );\n }\n const provisioned = await provisionForSignup(options);\n options.apiKey = provisioned.personalApiKey;\n if (options.projectId == null) options.projectId = provisioned.projectId;\n }\n runWizardCI(posthogIntegrationConfig, options);\n })().catch(() => {\n process.exit(1);\n });\n}\n\nfunction failCI(message: string): void {\n setUI(new LoggingUI());\n getUI().intro('PostHog Wizard');\n getUI().log.error(message);\n process.exit(1);\n}\n\n/** `phx_` is the personal-API-key prefix the LLM Gateway expects. */\nfunction warnOnUnexpectedKeyPrefix(apiKey: string | undefined): void {\n if (!apiKey || apiKey.startsWith('phx_')) return;\n setUI(new LoggingUI());\n getUI().intro('PostHog Wizard');\n const prefix = apiKey.slice(0, 4);\n const hint =\n prefix === 'pha_'\n ? ' (pha_ is an OAuth access token — CI mode expects a personal API key)'\n : prefix === 'phc_'\n ? ' (phc_ is a project/client key — CI mode expects a personal API key)'\n : '';\n getUI().log.warn(\n `--api-key does not start with \"phx_\"${hint}. Continuing anyway, but the LLM Gateway may reject it with a 401.`,\n );\n}\n\n/**\n * Provision a new account and return its credentials. Throws on any failure\n * (after logging a user-facing message); the caller's `.catch` turns that\n * into a non-zero exit. The return type carries no failure sentinel.\n */\nasync function provisionForSignup(\n options: Options,\n): Promise<{ personalApiKey: string; projectId: string }> {\n setUI(new LoggingUI());\n getUI().intro('PostHog Wizard');\n const signupRegion = ((options.region as string) || 'us').toUpperCase() as\n | 'US'\n | 'EU';\n getUI().log.info(\n `Provisioning new PostHog account for ${String(\n options.email,\n )} in ${signupRegion}...`,\n );\n\n let result;\n try {\n result = await provisionNewAccount(\n options.email as string,\n options.name ?? '',\n signupRegion,\n );\n } catch (error) {\n const msg = error instanceof Error ? error.message : String(error);\n getUI().log.error(`Provisioning failed: ${msg}`);\n throw error;\n }\n\n if (!result.personalApiKey) {\n getUI().log.error(\n 'Provisioning succeeded but no personal API key was returned — cannot continue install.',\n );\n throw new Error('provisioning returned no personal API key');\n }\n\n getUI().log.success('Account ready.');\n getUI().log.info(` Project API Key: ${result.projectApiKey}`);\n getUI().log.info(` Personal API Key: ${result.personalApiKey}`);\n getUI().log.info(` Host: ${result.host}`);\n return {\n personalApiKey: result.personalApiKey,\n projectId: result.projectId,\n };\n}\n"],"mappings":";;;;;;AAkBA,SAAgB,aAAa,MAAuB;CAClD,MAAM,UAAU,EAAE,GAAG,MAAM;AAI3B,KAAI,CAAC,QAAQ,UAAU,CAAC,QAAQ,OAC9B,QAAO,OACL,gIAED;AAEH,KAAI,CAAC,QAAQ,UAAU,QAAQ,UAAU,CAAC,QAAQ,MAChD,QAAO,OAAO,wDAAwD;AAExE,2BAA0B,QAAQ,OAAO;AAEzC,EAAM,YAAY;AAChB,MAAI,CAAC,QAAQ,UAAU,QAAQ,QAAQ;AAErC,OAAI,CAAC,QAAQ,WACX,QAAO,OACL,2DACD;GAEH,MAAM,cAAc,MAAM,mBAAmB,QAAQ;AACrD,WAAQ,SAAS,YAAY;AAC7B,OAAI,QAAQ,aAAa,KAAM,SAAQ,YAAY,YAAY;;AAEjE,cAAY,0BAA0B,QAAQ;KAC5C,CAAC,YAAY;AACf,UAAQ,KAAK,EAAE;GACf;;AAGJ,SAAS,OAAO,SAAuB;AACrC,OAAM,IAAI,WAAW,CAAC;AACtB,QAAO,CAAC,MAAM,iBAAiB;AAC/B,QAAO,CAAC,IAAI,MAAM,QAAQ;AAC1B,SAAQ,KAAK,EAAE;;;AAIjB,SAAS,0BAA0B,QAAkC;AACnE,KAAI,CAAC,UAAU,OAAO,WAAW,OAAO,CAAE;AAC1C,OAAM,IAAI,WAAW,CAAC;AACtB,QAAO,CAAC,MAAM,iBAAiB;CAC/B,MAAM,SAAS,OAAO,MAAM,GAAG,EAAE;CACjC,MAAM,OACJ,WAAW,SACP,0EACA,WAAW,SACX,yEACA;AACN,QAAO,CAAC,IAAI,KACV,uCAAuC,KAAK,oEAC7C;;;;;;;AAQH,eAAe,mBACb,SACwD;AACxD,OAAM,IAAI,WAAW,CAAC;AACtB,QAAO,CAAC,MAAM,iBAAiB;CAC/B,MAAM,gBAAiB,QAAQ,UAAqB,MAAM,aAAa;AAGvE,QAAO,CAAC,IAAI,KACV,wCAAwC,OACtC,QAAQ,MACT,CAAC,MAAM,aAAa,KACtB;CAED,IAAI;AACJ,KAAI;AACF,WAAS,MAAM,oBACb,QAAQ,OACR,QAAQ,QAAQ,IAChB,aACD;UACM,OAAO;EACd,MAAM,MAAM,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM;AAClE,SAAO,CAAC,IAAI,MAAM,wBAAwB,MAAM;AAChD,QAAM;;AAGR,KAAI,CAAC,OAAO,gBAAgB;AAC1B,SAAO,CAAC,IAAI,MACV,yFACD;AACD,QAAM,IAAI,MAAM,4CAA4C;;AAG9D,QAAO,CAAC,IAAI,QAAQ,iBAAiB;AACrC,QAAO,CAAC,IAAI,KAAK,uBAAuB,OAAO,gBAAgB;AAC/D,QAAO,CAAC,IAAI,KAAK,uBAAuB,OAAO,iBAAiB;AAChE,QAAO,CAAC,IAAI,KAAK,uBAAuB,OAAO,OAAO;AACtD,QAAO;EACL,gBAAgB,OAAO;EACvB,WAAW,OAAO;EACnB"}
@@ -28,7 +28,7 @@ function runtimeEnv(key) {
28
28
  }
29
29
  //#endregion
30
30
  //#region src/lib/version.ts
31
- const VERSION = "2.22.1";
31
+ const VERSION = "2.23.0";
32
32
  //#endregion
33
33
  //#region src/lib/constants.ts
34
34
  /**
@@ -869,4 +869,4 @@ function enableDebugLogs() {
869
869
  //#endregion
870
870
  export { VERSION as $, OAUTH_PORTS as A, POSTHOG_PROXY_CLIENT_ID as B, CONTEXT_MILL_RELEASES_URL as C, DUMMY_PROJECT_API_KEY as D, DETECTION_TIMEOUT_MS as E, POSTHOG_FLAG_HEADER_PREFIX as F, WIZARD_OAUTH_SCOPES as G, POSTHOG_US_CLIENT_ID as H, POSTHOG_OAUTH_URL as I, WIZARD_TOOLS_MENU_FLAG_KEY as J, WIZARD_PROVISIONING_SCOPES as K, POSTHOG_ORG_AI_SETTINGS_URL as L, POSTHOG_APP_URL as M, POSTHOG_DEV_CLIENT_ID as N, ISSUES_URL as O, POSTHOG_DOCS_URL as P, getSkillsBaseUrl as Q, POSTHOG_PRIVACY_URL as R, ANALYTICS_TEAM_TAG as S, DEFAULT_HOST_URL as T, REMOTE_SKILLS_BASE_URL as U, POSTHOG_TERMS_URL as V, WIZARD_INTERACTION_EVENT_NAME as W, WIZARD_VARIANTS as X, WIZARD_USER_AGENT as Y, WIZARD_VARIANT_FLAG_KEY as Z, SIGNUP_WIZARD_READINESS_CONFIG as _, getLogFilePath as a, ANALYTICS_HOST_URL as b, WIZARD_BENCHMARK_FILE as c, relativeToInstallDir as d, NODE_ENV as et, skillTmpPath as f, SERVICE_LABELS as g, LoggingUI as h, enableDebugLogs as i, OAUTH_TIMEOUT_MS as j, Integration as k, WIZARD_LOG_FILE as l, setUI as m, configureLogFileFromEnvironment as n, initLogFile as o, getUI as p, WIZARD_REMARK_EVENT_NAME as q, debug as r, logToFile as s, configureLogFile as t, runtimeEnv as tt, WIZARD_YARA_REPORT_FILE as u, evaluateWizardReadiness as v, CONTEXT_MILL_URL as w, ANALYTICS_POSTHOG_PUBLIC_PROJECT_WRITE_KEY as x, getBlockingServiceKeys as y, POSTHOG_PROPERTY_HEADER_PREFIX as z };
871
871
 
872
- //# sourceMappingURL=debug-Ckumcrye.js.map
872
+ //# sourceMappingURL=debug-CgT5MmVB.js.map