@posthog/wizard 2.30.0 → 2.31.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 (59) hide show
  1. package/README.md +35 -1
  2. package/dist/README.md +33 -0
  3. package/dist/{add-mcp-server-to-clients-D0G4cmPf.js → add-mcp-server-to-clients-BPBRx_Nz.js} +4 -4
  4. package/dist/{add-mcp-server-to-clients-D0G4cmPf.js.map → add-mcp-server-to-clients-BPBRx_Nz.js.map} +1 -1
  5. package/dist/{agent-interface-CYFyWCMj.js → agent-interface-DT_uyR45.js} +483 -416
  6. package/dist/agent-interface-DT_uyR45.js.map +1 -0
  7. package/dist/{agent-runner-HTfFCUrR.js → agent-runner-DfRka7f7.js} +39 -23
  8. package/dist/agent-runner-DfRka7f7.js.map +1 -0
  9. package/dist/{analytics-CdT0VV8s.js → analytics-3GR9OyE9.js} +14 -6
  10. package/dist/analytics-3GR9OyE9.js.map +1 -0
  11. package/dist/{api-D9CerM6x.js → api-Dmc76exl.js} +3 -3
  12. package/dist/{api-D9CerM6x.js.map → api-Dmc76exl.js.map} +1 -1
  13. package/dist/bin.js +32 -33
  14. package/dist/bin.js.map +1 -1
  15. package/dist/{ci-install-CTydrjHu.js → ci-install-QWrT_cW8.js} +4 -4
  16. package/dist/{ci-install-CTydrjHu.js.map → ci-install-QWrT_cW8.js.map} +1 -1
  17. package/dist/{debug-Bmq9KH4W.js → debug-aqoKImO6.js} +1 -1
  18. package/dist/{debug-D9giWww2.js → debug-n42RObru.js} +9 -10
  19. package/dist/debug-n42RObru.js.map +1 -0
  20. package/dist/{environment-C6j-a4Gz.js → environment-BKPsjOXk.js} +3 -3
  21. package/dist/{environment-C6j-a4Gz.js.map → environment-BKPsjOXk.js.map} +1 -1
  22. package/dist/{file-utils-BiElGS_N.js → file-utils-ALRqLr0x.js} +2 -2
  23. package/dist/{file-utils-BiElGS_N.js.map → file-utils-ALRqLr0x.js.map} +1 -1
  24. package/dist/{interactive-C0Vssetd.js → interactive-ChaxKwhe.js} +2 -2
  25. package/dist/{interactive-C0Vssetd.js.map → interactive-ChaxKwhe.js.map} +1 -1
  26. package/dist/{mcp-prompt-streaming-DQXxG2Pg.js → mcp-prompt-streaming-CNmYvvmk.js} +4 -4
  27. package/dist/{mcp-prompt-streaming-DQXxG2Pg.js.map → mcp-prompt-streaming-CNmYvvmk.js.map} +1 -1
  28. package/dist/{non-interactive-DX-N3ZEb.js → non-interactive-BM4hUmlI.js} +2 -2
  29. package/dist/{non-interactive-DX-N3ZEb.js.map → non-interactive-BM4hUmlI.js.map} +1 -1
  30. package/dist/{package-manager-cIPAT7g3.js → package-manager-l8N6VCPX.js} +2 -2
  31. package/dist/{package-manager-cIPAT7g3.js.map → package-manager-l8N6VCPX.js.map} +1 -1
  32. package/dist/{playground-DQI2vpr0.js → playground-C7SbDVI4.js} +4 -4
  33. package/dist/{playground-DQI2vpr0.js.map → playground-C7SbDVI4.js.map} +1 -1
  34. package/dist/{posthog-integration-EUokB9U1.js → posthog-integration-YDzQBfhq.js} +13 -14
  35. package/dist/{posthog-integration-EUokB9U1.js.map → posthog-integration-YDzQBfhq.js.map} +1 -1
  36. package/dist/{provisioning-BCCeBATw.js → provisioning-ql6mjOVq.js} +3 -3
  37. package/dist/{provisioning-BCCeBATw.js.map → provisioning-ql6mjOVq.js.map} +1 -1
  38. package/dist/{registry-DCxIW2G5.js → registry-5SphnyxS.js} +4 -4
  39. package/dist/{registry-DCxIW2G5.js.map → registry-5SphnyxS.js.map} +1 -1
  40. package/dist/{setup-utils-DmX3o2bT.js → setup-utils-CoblNeRY.js} +8 -8
  41. package/dist/{setup-utils-DmX3o2bT.js.map → setup-utils-CoblNeRY.js.map} +1 -1
  42. package/dist/{start-tui-B9dCp0hW.js → start-tui-D_woOYMc.js} +13 -13
  43. package/dist/{start-tui-B9dCp0hW.js.map → start-tui-D_woOYMc.js.map} +1 -1
  44. package/dist/{steps-3XbXMf0T.js → steps-2gR__rtG.js} +7 -7
  45. package/dist/{steps-3XbXMf0T.js.map → steps-2gR__rtG.js.map} +1 -1
  46. package/dist/{telemetry-GFq8wmz0.js → telemetry-CqysQT5U.js} +3 -3
  47. package/dist/{telemetry-GFq8wmz0.js.map → telemetry-CqysQT5U.js.map} +1 -1
  48. package/dist/{terminal-oI1dOWQI.js → terminal-CeokeMGP.js} +9 -9
  49. package/dist/{terminal-oI1dOWQI.js.map → terminal-CeokeMGP.js.map} +1 -1
  50. package/dist/{urls-93eQ-Rd0.js → urls-BOcViDhS.js} +2 -2
  51. package/dist/{urls-93eQ-Rd0.js.map → urls-BOcViDhS.js.map} +1 -1
  52. package/dist/{wizard-abort-dmkJqxAb.js → wizard-abort-C0siBgn5.js} +1 -1
  53. package/dist/{wizard-abort-BehJBPpy.js → wizard-abort-DFL5Um-M.js} +3 -3
  54. package/dist/{wizard-abort-BehJBPpy.js.map → wizard-abort-DFL5Um-M.js.map} +1 -1
  55. package/package.json +16 -52
  56. package/dist/agent-interface-CYFyWCMj.js.map +0 -1
  57. package/dist/agent-runner-HTfFCUrR.js.map +0 -1
  58. package/dist/analytics-CdT0VV8s.js.map +0 -1
  59. package/dist/debug-D9giWww2.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"api-D9CerM6x.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 // Org-level AI consent gate. Signals drops all findings while\n // this is not true. Null on older orgs (pre-2026-05 default\n // flip) — treat null as \"unknown\", not \"off\".\n is_ai_data_processing_approved: z.boolean().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 // Product opt-ins (TeamSerializer-compat fields on /api/projects/:id).\n // Project-level truth for \"is this product enabled\" — a product can be\n // instrumented from another repo or the snippet, so these settings\n // override repo-local evidence. Null/absent = unknown. Only the\n // opt-ins a signals decision consumes: replay + exception autocapture\n // feed signal-source choices; surveys feeds the surveys-scout tuning.\n session_recording_opt_in: z.boolean().nullish(),\n autocapture_exceptions_opt_in: z.boolean().nullish(),\n surveys_opt_in: z.boolean().nullish(),\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-Dmc76exl.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 // Org-level AI consent gate. Signals drops all findings while\n // this is not true. Null on older orgs (pre-2026-05 default\n // flip) — treat null as \"unknown\", not \"off\".\n is_ai_data_processing_approved: z.boolean().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 // Product opt-ins (TeamSerializer-compat fields on /api/projects/:id).\n // Project-level truth for \"is this product enabled\" — a product can be\n // instrumented from another repo or the snippet, so these settings\n // override repo-local evidence. Null/absent = unknown. Only the\n // opt-ins a signals decision consumes: replay + exception autocapture\n // feed signal-source choices; surveys feeds the surveys-scout tuning.\n session_recording_opt_in: z.boolean().nullish(),\n autocapture_exceptions_opt_in: z.boolean().nullish(),\n surveys_opt_in: z.boolean().nullish(),\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,17 +1,17 @@
1
1
  #!/usr/bin/env node
2
- import { I as POSTHOG_DOCS_URL, Q as WIZARD_USER_AGENT, a as getLogFilePath, h as LoggingUI, m as setUI, nt as VERSION, p as getUI, r as debug, s as logToFile, tt as getSkillsBaseUrl } from "./debug-D9giWww2.js";
3
- import { t as analytics } from "./analytics-CdT0VV8s.js";
4
- import { r as setEntryCommand } from "./telemetry-GFq8wmz0.js";
5
- import { n as isUsingTypeScript } from "./setup-utils-DmX3o2bT.js";
6
- import { a as getUiHostFromHost, n as getCloudUrlFromRegion } from "./urls-93eQ-Rd0.js";
7
- import { o as handleApiError } from "./api-D9CerM6x.js";
2
+ import { I as POSTHOG_DOCS_URL, Q as WIZARD_USER_AGENT, a as getLogFilePath, et as getSkillsBaseUrl, h as LoggingUI, m as setUI, p as getUI, r as debug, s as logToFile, tt as VERSION } from "./debug-n42RObru.js";
3
+ import { t as analytics } from "./analytics-3GR9OyE9.js";
4
+ import { r as setEntryCommand } from "./telemetry-CqysQT5U.js";
5
+ import { n as isUsingTypeScript } from "./setup-utils-CoblNeRY.js";
6
+ import { a as getUiHostFromHost, n as getCloudUrlFromRegion } from "./urls-BOcViDhS.js";
7
+ import { o as handleApiError } from "./api-Dmc76exl.js";
8
8
  import "./wizard-session-G3VWD6hv.js";
9
- import { r as runCleanups } from "./wizard-abort-BehJBPpy.js";
10
- import { n as isNonInteractiveEnvironment } from "./environment-C6j-a4Gz.js";
11
- import { S as AUDIT_REPORT_FILE, b as AUDIT_CHECKS_FILE, c as recoverOrphanedSettingsBackups, h as fetchSkillMenu, p as WIZARD_TOOL_NAMES, u as AgentSignals, x as AUDIT_CHECKS_KEY } from "./agent-interface-CYFyWCMj.js";
12
- import { i as SPINNER_MESSAGE } from "./registry-DCxIW2G5.js";
13
- import { _ as parsePyprojectToml, a as PRODUCT_SUITE_BLOCK, f as Colors, g as parsePipfile, i as LINE_CHART_BLOCK, l as isClearBlock, m as HEALTH_CHECK_STEP, n as posthogIntegrationConfig, o as StatusPeekTrigger, p as Icons, r as FUNNEL_BLOCK, v as parseRequirementsTxt } from "./posthog-integration-EUokB9U1.js";
14
- import { n as safeReadFile, r as walkProjectFiles, t as IGNORED_DIRS } from "./file-utils-BiElGS_N.js";
9
+ import { r as runCleanups } from "./wizard-abort-DFL5Um-M.js";
10
+ import { n as isNonInteractiveEnvironment } from "./environment-BKPsjOXk.js";
11
+ import { C as AUDIT_CHECKS_FILE, T as AUDIT_REPORT_FILE, c as recoverOrphanedSettingsBackups, g as WIZARD_TOOL_NAMES, h as SETUP_REPORT_FILE, u as AgentSignals, v as fetchSkillMenu, w as AUDIT_CHECKS_KEY } from "./agent-interface-DT_uyR45.js";
12
+ import { i as SPINNER_MESSAGE } from "./registry-5SphnyxS.js";
13
+ import { _ as parseRequirementsTxt, a as StatusPeekTrigger, c as isClearBlock, d as Colors, f as Icons, g as parsePyprojectToml, h as parsePipfile, i as PRODUCT_SUITE_BLOCK, n as FUNNEL_BLOCK, p as HEALTH_CHECK_STEP, r as LINE_CHART_BLOCK, t as posthogIntegrationConfig } from "./posthog-integration-YDzQBfhq.js";
14
+ import { n as safeReadFile, r as walkProjectFiles, t as IGNORED_DIRS } from "./file-utils-ALRqLr0x.js";
15
15
  import { n as readApiKeyFromEnv } from "./env-api-key-MlzJYAvt.js";
16
16
  import { satisfies } from "semver";
17
17
  import yargs from "yargs";
@@ -190,7 +190,7 @@ function runProvision(argv) {
190
190
  }
191
191
  async function provision({ email, region, name, jsonMode }) {
192
192
  try {
193
- const { provisionNewAccount } = await import("./provisioning-BCCeBATw.js").then((n) => n.n);
193
+ const { provisionNewAccount } = await import("./provisioning-ql6mjOVq.js").then((n) => n.n);
194
194
  if (!jsonMode) getUI().log.info(`Provisioning account for ${email} in ${region}...`);
195
195
  emitResult(await provisionNewAccount(email, name, region), jsonMode);
196
196
  process.exit(0);
@@ -255,18 +255,18 @@ const basicIntegrationCommand = {
255
255
  setEntryCommand("integrate");
256
256
  (async () => {
257
257
  if (argv.ci) {
258
- const { runCIInstall } = await import("./ci-install-CTydrjHu.js");
258
+ const { runCIInstall } = await import("./ci-install-QWrT_cW8.js");
259
259
  return runCIInstall(argv);
260
260
  }
261
261
  if (isNonInteractiveEnvironment()) {
262
- const { failNonInteractive } = await import("./non-interactive-DX-N3ZEb.js");
262
+ const { failNonInteractive } = await import("./non-interactive-BM4hUmlI.js");
263
263
  return failNonInteractive();
264
264
  }
265
265
  if (argv.playground) {
266
- const { runPlayground } = await import("./playground-DQI2vpr0.js");
266
+ const { runPlayground } = await import("./playground-C7SbDVI4.js");
267
267
  return runPlayground();
268
268
  }
269
- const { runInteractive } = await import("./interactive-C0Vssetd.js");
269
+ const { runInteractive } = await import("./interactive-ChaxKwhe.js");
270
270
  runInteractive(argv);
271
271
  })();
272
272
  }
@@ -1723,7 +1723,6 @@ const EVENTS_AUDIT_SEED_CHECKS = [
1723
1723
  ];
1724
1724
  //#endregion
1725
1725
  //#region src/lib/programs/events-audit/index.ts
1726
- const SETUP_REPORT_FILE = "posthog-events-audit-report.md";
1727
1726
  const DOCS_URL$3 = "https://posthog.com/docs/product-analytics/best-practices";
1728
1727
  const eventsAuditConfig = {
1729
1728
  command: "events-audit",
@@ -3750,7 +3749,7 @@ function runMcpAdd(argv) {
3750
3749
  const debug = argv.debug;
3751
3750
  const localMcp = argv.local;
3752
3751
  try {
3753
- const { startTUI } = await import("./start-tui-B9dCp0hW.js");
3752
+ const { startTUI } = await import("./start-tui-D_woOYMc.js");
3754
3753
  const { buildSession } = await import("./wizard-session-wPJtNl4c.js");
3755
3754
  const tui = startTUI(VERSION, Program.McpAdd);
3756
3755
  tui.store.session = buildSession({
@@ -3762,7 +3761,7 @@ function runMcpAdd(argv) {
3762
3761
  } catch (error) {
3763
3762
  if (!isTUIUnavailable(error)) throw error;
3764
3763
  setUI(new LoggingUI());
3765
- const { addMCPServerToClientsStep } = await import("./add-mcp-server-to-clients-D0G4cmPf.js").then((n) => n.r);
3764
+ const { addMCPServerToClientsStep } = await import("./add-mcp-server-to-clients-BPBRx_Nz.js").then((n) => n.r);
3766
3765
  await addMCPServerToClientsStep({
3767
3766
  local: localMcp,
3768
3767
  features,
@@ -3801,7 +3800,7 @@ function runMcpRemove(argv) {
3801
3800
  const debug = argv.debug;
3802
3801
  const localMcp = argv.local;
3803
3802
  try {
3804
- const { startTUI } = await import("./start-tui-B9dCp0hW.js");
3803
+ const { startTUI } = await import("./start-tui-D_woOYMc.js");
3805
3804
  const { buildSession } = await import("./wizard-session-wPJtNl4c.js");
3806
3805
  const tui = startTUI(VERSION, Program.McpRemove);
3807
3806
  tui.store.session = buildSession({
@@ -3810,7 +3809,7 @@ function runMcpRemove(argv) {
3810
3809
  });
3811
3810
  } catch {
3812
3811
  setUI(new LoggingUI());
3813
- const { removeMCPServerFromClientsStep } = await import("./add-mcp-server-to-clients-D0G4cmPf.js").then((n) => n.r);
3812
+ const { removeMCPServerFromClientsStep } = await import("./add-mcp-server-to-clients-BPBRx_Nz.js").then((n) => n.r);
3814
3813
  await removeMCPServerFromClientsStep({ local: localMcp });
3815
3814
  }
3816
3815
  })();
@@ -3832,7 +3831,7 @@ function runMcpTutorial(argv) {
3832
3831
  const debug = argv.debug;
3833
3832
  const localMcp = argv.local;
3834
3833
  try {
3835
- const { startTUI } = await import("./start-tui-B9dCp0hW.js");
3834
+ const { startTUI } = await import("./start-tui-D_woOYMc.js");
3836
3835
  const { buildSession } = await import("./wizard-session-wPJtNl4c.js");
3837
3836
  const tui = startTUI(VERSION, Program.McpTutorial);
3838
3837
  tui.store.session = buildSession({
@@ -3887,7 +3886,7 @@ function runWizard(config, options) {
3887
3886
  (async () => {
3888
3887
  try {
3889
3888
  const installDir = options.installDir || process.cwd();
3890
- const { startTUI } = await import("./start-tui-B9dCp0hW.js");
3889
+ const { startTUI } = await import("./start-tui-D_woOYMc.js");
3891
3890
  const { buildSession, RunPhase } = await import("./wizard-session-wPJtNl4c.js");
3892
3891
  const { TaskStreamPush } = await import("./task-stream-BQNSp0qR.js");
3893
3892
  const { PostHogDestination } = await import("./posthog-Cr37rnla.js");
@@ -3943,7 +3942,7 @@ function runWizard(config, options) {
3943
3942
  await activeTui.store.getGate("health-check");
3944
3943
  const skipAgent = config.run == null;
3945
3944
  if (skipAgent) {
3946
- const { getOrAskForProjectData } = await import("./setup-utils-DmX3o2bT.js").then((n) => n.r);
3945
+ const { getOrAskForProjectData } = await import("./setup-utils-CoblNeRY.js").then((n) => n.r);
3947
3946
  const { projectApiKey, host, accessToken, projectId } = await getOrAskForProjectData({
3948
3947
  signup: session.signup,
3949
3948
  ci: session.ci,
@@ -3958,7 +3957,7 @@ function runWizard(config, options) {
3958
3957
  projectId
3959
3958
  });
3960
3959
  } else {
3961
- const { runAgent } = await import("./agent-runner-HTfFCUrR.js");
3960
+ const { runAgent } = await import("./agent-runner-DfRka7f7.js");
3962
3961
  await runAgent(config, activeTui.store.session);
3963
3962
  }
3964
3963
  const isDone = () => skipAgent ? activeTui.store.session.outroDismissed : activeTui.store.session.skillsComplete;
@@ -4035,10 +4034,10 @@ function runWizardCI(config, options) {
4035
4034
  (async () => {
4036
4035
  const path = await import("path");
4037
4036
  const { buildSession } = await import("./wizard-session-wPJtNl4c.js");
4038
- const { readEnvironment } = await import("./environment-C6j-a4Gz.js").then((n) => n.t);
4037
+ const { readEnvironment } = await import("./environment-BKPsjOXk.js").then((n) => n.t);
4039
4038
  const { readApiKeyFromEnv } = await import("./env-api-key-MlzJYAvt.js").then((n) => n.t);
4040
- const { configureLogFileFromEnvironment, logToFile } = await import("./debug-Bmq9KH4W.js");
4041
- const { wizardAbort, WizardError } = await import("./wizard-abort-dmkJqxAb.js");
4039
+ const { configureLogFileFromEnvironment, logToFile } = await import("./debug-aqoKImO6.js");
4040
+ const { wizardAbort, WizardError } = await import("./wizard-abort-C0siBgn5.js");
4042
4041
  configureLogFileFromEnvironment();
4043
4042
  const env = readEnvironment();
4044
4043
  const apiKey = options.apiKey ?? readApiKeyFromEnv() ?? void 0;
@@ -4089,7 +4088,7 @@ function runWizardCI(config, options) {
4089
4088
  })
4090
4089
  });
4091
4090
  }
4092
- const { runAgent } = await import("./agent-runner-HTfFCUrR.js");
4091
+ const { runAgent } = await import("./agent-runner-DfRka7f7.js");
4093
4092
  await runAgent(config, session);
4094
4093
  } catch (error) {
4095
4094
  const errorMessage = error instanceof Error ? error.message : String(error);
@@ -4956,7 +4955,7 @@ async function runDoctorCI(options) {
4956
4955
  getUI().intro("Welcome to the PostHog setup wizard");
4957
4956
  getUI().log.info("Running posthog-doctor in CI mode");
4958
4957
  try {
4959
- const { getOrAskForProjectData } = await import("./setup-utils-DmX3o2bT.js").then((n) => n.r);
4958
+ const { getOrAskForProjectData } = await import("./setup-utils-CoblNeRY.js").then((n) => n.r);
4960
4959
  const { host, accessToken, projectId } = await getOrAskForProjectData({
4961
4960
  signup: false,
4962
4961
  ci: true,
@@ -4973,7 +4972,7 @@ async function runDoctorCI(options) {
4973
4972
  for (const issue of sorted) getUI().log.info(` • [${issue.severity}] ${getKindMeta(issue.kind).title}`);
4974
4973
  process.exit(1);
4975
4974
  } catch (error) {
4976
- const { ApiError } = await import("./api-D9CerM6x.js").then((n) => n.n);
4975
+ const { ApiError } = await import("./api-Dmc76exl.js").then((n) => n.n);
4977
4976
  const message = error instanceof ApiError && error.statusCode === 401 ? "Your PostHog API key is invalid or expired." : error instanceof Error ? error.message : String(error);
4978
4977
  getUI().log.error(`Doctor failed: ${message}`);
4979
4978
  process.exit(1);
@@ -5069,7 +5068,7 @@ function runSlackConnect(argv) {
5069
5068
  (async () => {
5070
5069
  const debug = argv.debug;
5071
5070
  try {
5072
- const { startTUI } = await import("./start-tui-B9dCp0hW.js");
5071
+ const { startTUI } = await import("./start-tui-D_woOYMc.js");
5073
5072
  const { buildSession } = await import("./wizard-session-wPJtNl4c.js");
5074
5073
  const tui = startTUI(VERSION, Program.SlackConnect);
5075
5074
  tui.store.session = buildSession({ debug });