@posthog/wizard 2.43.0 → 2.45.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/dist/{add-mcp-server-to-clients-BiZmRLE6.js → add-mcp-server-to-clients-CNzZMSat.js} +5 -5
- package/dist/{add-mcp-server-to-clients-BiZmRLE6.js.map → add-mcp-server-to-clients-CNzZMSat.js.map} +1 -1
- package/dist/{agent-interface-CUaNjvqq.js → agent-interface-CF7GsdFf.js} +298 -158
- package/dist/agent-interface-CF7GsdFf.js.map +1 -0
- package/dist/{agent-runner-BuH7W62W.js → agent-runner-B0LTVFfw.js} +130 -598
- package/dist/agent-runner-B0LTVFfw.js.map +1 -0
- package/dist/{analytics-C_9Kh6J1.js → analytics-DQEuL6qS.js} +2 -2
- package/dist/{analytics-C_9Kh6J1.js.map → analytics-DQEuL6qS.js.map} +1 -1
- package/dist/analytics-YD3D38z2.js +2 -0
- package/dist/{api-Kgk7BFqo.js → api-uCMvDII5.js} +3 -3
- package/dist/{api-Kgk7BFqo.js.map → api-uCMvDII5.js.map} +1 -1
- package/dist/bin.js +69 -116
- package/dist/bin.js.map +1 -1
- package/dist/{ci-install-DoARcA-j.js → ci-install-Bow8-f0j.js} +4 -4
- package/dist/{ci-install-DoARcA-j.js.map → ci-install-Bow8-f0j.js.map} +1 -1
- package/dist/commandments-CyB7Icr1.js +42 -0
- package/dist/commandments-CyB7Icr1.js.map +1 -0
- package/dist/commandments-DguPfCX8.js +2 -0
- package/dist/{debug-CI0PLD6X.js → debug-BixHZmHv.js} +1 -1
- package/dist/{debug-DNEQR5DL.js → debug-DBmxx59Q.js} +42 -21
- package/dist/debug-DBmxx59Q.js.map +1 -0
- package/dist/{defaults-CeNThA-1.js → defaults-8zjNjGGi.js} +2 -2
- package/dist/defaults-8zjNjGGi.js.map +1 -0
- package/dist/{env-api-key-cjD4yfGT.js → env-api-key-AcC_tz8G.js} +1 -1
- package/dist/{env-api-key-cjD4yfGT.js.map → env-api-key-AcC_tz8G.js.map} +1 -1
- package/dist/{environment-D44UP2Nu.js → environment-kZtkp7eG.js} +3 -3
- package/dist/{environment-D44UP2Nu.js.map → environment-kZtkp7eG.js.map} +1 -1
- package/dist/{file-utils-C2PNKLhr.js → file-utils-BAhYy5vC.js} +2 -2
- package/dist/{file-utils-C2PNKLhr.js.map → file-utils-BAhYy5vC.js.map} +1 -1
- package/dist/file-watcher-BL-IRbR7.js +123 -0
- package/dist/file-watcher-BL-IRbR7.js.map +1 -0
- package/dist/{headless-ui-C3C0wWUi.js → headless-ui-DWmMyhaP.js} +5 -4
- package/dist/headless-ui-DWmMyhaP.js.map +1 -0
- package/dist/{interactive-k4xQiftO.js → interactive-Cyic0bGL.js} +2 -2
- package/dist/{interactive-k4xQiftO.js.map → interactive-Cyic0bGL.js.map} +1 -1
- package/dist/{mcp-CJn_ryMN.js → mcp-BSGmEWjt.js} +3 -3
- package/dist/mcp-BSGmEWjt.js.map +1 -0
- package/dist/{mcp-prompt-streaming-BB5nO--L.js → mcp-prompt-streaming-C227vG1X.js} +3 -3
- package/dist/{mcp-prompt-streaming-BB5nO--L.js.map → mcp-prompt-streaming-C227vG1X.js.map} +1 -1
- package/dist/{non-interactive-0x0Due8h.js → non-interactive-DQA9vn9f.js} +2 -2
- package/dist/{non-interactive-0x0Due8h.js.map → non-interactive-DQA9vn9f.js.map} +1 -1
- package/dist/orchestrator-tools-NuWONNkF.js +99 -0
- package/dist/orchestrator-tools-NuWONNkF.js.map +1 -0
- package/dist/{package-json-CDs1ZVKu.js → package-json-DCuoye-H.js} +1 -1
- package/dist/{package-json-CDs1ZVKu.js.map → package-json-DCuoye-H.js.map} +1 -1
- package/dist/{package-manager-CBRR4_i4.js → package-manager-DKtR3xzM.js} +2 -2
- package/dist/{package-manager-CBRR4_i4.js.map → package-manager-DKtR3xzM.js.map} +1 -1
- package/dist/pi-DJCln9jJ.js +603 -0
- package/dist/pi-DJCln9jJ.js.map +1 -0
- package/dist/{playground-CK617U6k.js → playground-CbEndzc8.js} +7 -8
- package/dist/{playground-CK617U6k.js.map → playground-CbEndzc8.js.map} +1 -1
- package/dist/{posthog-DwKlq0HM.js → posthog-DFyux4Vw.js} +1 -1
- package/dist/{posthog-DwKlq0HM.js.map → posthog-DFyux4Vw.js.map} +1 -1
- package/dist/{posthog-integration-qRjKkLcu.js → posthog-integration-dmWJZ8mj.js} +132 -27
- package/dist/posthog-integration-dmWJZ8mj.js.map +1 -0
- package/dist/{provisioning-BMXR8fS1.js → provisioning-CcxCry5p.js} +21 -14
- package/dist/provisioning-CcxCry5p.js.map +1 -0
- package/dist/queue-tools-Bw-AANLM.js +366 -0
- package/dist/queue-tools-Bw-AANLM.js.map +1 -0
- package/dist/{registry-CsUUdVCd.js → registry-D2V88NoC.js} +96 -18
- package/dist/registry-D2V88NoC.js.map +1 -0
- package/dist/{security-CIP3lpp6.js → security-DOtBCBvx.js} +4 -4
- package/dist/{security-CIP3lpp6.js.map → security-DOtBCBvx.js.map} +1 -1
- package/dist/{setup-utils-DkyEOBDx.js → setup-utils-Qp-u6BZk.js} +7 -7
- package/dist/{setup-utils-DkyEOBDx.js.map → setup-utils-Qp-u6BZk.js.map} +1 -1
- package/dist/{start-tui-CJlIgYjf.js → start-tui-DHa_9aiB.js} +429 -234
- package/dist/start-tui-DHa_9aiB.js.map +1 -0
- package/dist/{steps-CuNjxYsA.js → steps-D07HUQyE.js} +7 -7
- package/dist/{steps-CuNjxYsA.js.map → steps-D07HUQyE.js.map} +1 -1
- package/dist/{store-UKAJftq6.js → store-DSwsITKX.js} +30 -9
- package/dist/store-DSwsITKX.js.map +1 -0
- package/dist/{subagent-_syej145.js → subagent-Dk4K5MDa.js} +2 -2
- package/dist/{subagent-_syej145.js.map → subagent-Dk4K5MDa.js.map} +1 -1
- package/dist/task-CQnV9Qd2.js +305 -0
- package/dist/task-CQnV9Qd2.js.map +1 -0
- package/dist/{task-stream-Ne-9ZOnf.js → task-stream-B7qia9eW.js} +72 -7
- package/dist/task-stream-B7qia9eW.js.map +1 -0
- package/dist/{tasks-CUvCA1OY.js → tasks-C7BQp659.js} +2 -2
- package/dist/{tasks-CUvCA1OY.js.map → tasks-C7BQp659.js.map} +1 -1
- package/dist/{telemetry-DFYgJHH-.js → telemetry-DgahJGSx.js} +3 -3
- package/dist/{telemetry-DFYgJHH-.js.map → telemetry-DgahJGSx.js.map} +1 -1
- package/dist/{terminal-DLFgIxhg.js → terminal-Bb6tZkf-.js} +14 -14
- package/dist/terminal-Bb6tZkf-.js.map +1 -0
- package/dist/{tools-CNyhLqlK.js → tools-BJEvSUWN.js} +4 -4
- package/dist/{tools-CNyhLqlK.js.map → tools-BJEvSUWN.js.map} +1 -1
- package/dist/{types-y3HkjtSq.js → types-BRe_EzTW.js} +1 -1
- package/dist/{types-y3HkjtSq.js.map → types-BRe_EzTW.js.map} +1 -1
- package/dist/{wizard-abort-BM3pISoR.js → wizard-abort-BxtdkgI-.js} +4 -4
- package/dist/{wizard-abort-BM3pISoR.js.map → wizard-abort-BxtdkgI-.js.map} +1 -1
- package/dist/{wizard-abort-DCv08-op.js → wizard-abort-DpDmuCfA.js} +1 -1
- package/dist/{wizard-session-DXivb7kv.js → wizard-session-DWHe83uk.js} +1 -1
- package/dist/{wizard-session-BudcixsA.js → wizard-session-tp4Zdbwl.js} +3 -3
- package/dist/wizard-session-tp4Zdbwl.js.map +1 -0
- package/dist/{wizard-tools-BcuRxp1A.js → wizard-tools-Dg8o2lcH.js} +64 -387
- package/dist/wizard-tools-Dg8o2lcH.js.map +1 -0
- package/dist/yara-hooks-CncaWRuC.js +2 -0
- package/dist/{yara-hooks-GIs-R_g1.js → yara-hooks-pw86rZ8y.js} +4 -4
- package/dist/{yara-hooks-GIs-R_g1.js.map → yara-hooks-pw86rZ8y.js.map} +1 -1
- package/package.json +1 -1
- package/dist/agent-interface-CUaNjvqq.js.map +0 -1
- package/dist/agent-runner-BuH7W62W.js.map +0 -1
- package/dist/analytics-o-WJHD8Z.js +0 -2
- package/dist/debug-DNEQR5DL.js.map +0 -1
- package/dist/defaults-CeNThA-1.js.map +0 -1
- package/dist/headless-ui-C3C0wWUi.js.map +0 -1
- package/dist/mcp-CJn_ryMN.js.map +0 -1
- package/dist/posthog-integration-qRjKkLcu.js.map +0 -1
- package/dist/provisioning-BMXR8fS1.js.map +0 -1
- package/dist/registry-CsUUdVCd.js.map +0 -1
- package/dist/start-tui-CJlIgYjf.js.map +0 -1
- package/dist/store-UKAJftq6.js.map +0 -1
- package/dist/task-stream-Ne-9ZOnf.js.map +0 -1
- package/dist/terminal-DLFgIxhg.js.map +0 -1
- package/dist/wizard-session-BudcixsA.js.map +0 -1
- package/dist/wizard-tools-BcuRxp1A.js.map +0 -1
- package/dist/wizard-ui-WZ48rUgr.js +0 -15
- package/dist/wizard-ui-WZ48rUgr.js.map +0 -1
- package/dist/yara-hooks-DKbfESYf.js +0 -2
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { t as __exportAll } from "./rolldown-runtime-B_-DWIq7.js";
|
|
2
|
-
import {
|
|
3
|
-
import { n as analytics } from "./analytics-
|
|
2
|
+
import { ht as WIZARD_USER_AGENT } from "./debug-DBmxx59Q.js";
|
|
3
|
+
import { n as analytics } from "./analytics-DQEuL6qS.js";
|
|
4
4
|
import axios from "axios";
|
|
5
5
|
import { z } from "zod";
|
|
6
6
|
//#region src/lib/api.ts
|
|
@@ -170,4 +170,4 @@ function handleApiError(error, operation) {
|
|
|
170
170
|
//#endregion
|
|
171
171
|
export { fetchUserData as a, fetchSlackConnected as i, api_exports as n, handleApiError as o, fetchProjectData as r, ApiError as t };
|
|
172
172
|
|
|
173
|
-
//# sourceMappingURL=api-
|
|
173
|
+
//# sourceMappingURL=api-uCMvDII5.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-Kgk7BFqo.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-uCMvDII5.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,28 +1,29 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {
|
|
3
|
-
import { n as analytics } from "./analytics-
|
|
4
|
-
import { r as setEntryCommand } from "./telemetry-
|
|
5
|
-
import { n as isUsingTypeScript } from "./setup-utils-
|
|
6
|
-
import { o as handleApiError } from "./api-
|
|
7
|
-
import "./wizard-session-
|
|
8
|
-
import { r as runCleanups } from "./wizard-abort-
|
|
9
|
-
import { n as isNonInteractiveEnvironment } from "./environment-
|
|
10
|
-
import { n as runAgent, o as authenticate } from "./agent-runner-
|
|
11
|
-
import { l as recoverOrphanedSettingsBackups, p as AgentSignals } from "./agent-interface-
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import { h as SETUP_REPORT_FILE } from "./yara-hooks-
|
|
15
|
-
import { i as SPINNER_MESSAGE
|
|
16
|
-
import {
|
|
17
|
-
import { n as safeReadFile, r as walkProjectFiles, t as IGNORED_DIRS } from "./file-utils-
|
|
18
|
-
import { n as readApiKeyFromEnv } from "./env-api-key-
|
|
2
|
+
import { B as Integration, Ct as headlessOption, K as POSTHOG_DOCS_URL, _t as getSkillsBaseUrl, a as getLogFilePath, f as getUI, ht as WIZARD_USER_AGENT, m as LoggingUI, p as setUI, r as debug, s as logToFile, wt as isHeadless, yt as VERSION } from "./debug-DBmxx59Q.js";
|
|
3
|
+
import { n as analytics } from "./analytics-DQEuL6qS.js";
|
|
4
|
+
import { r as setEntryCommand } from "./telemetry-DgahJGSx.js";
|
|
5
|
+
import { n as isUsingTypeScript } from "./setup-utils-Qp-u6BZk.js";
|
|
6
|
+
import { o as handleApiError } from "./api-uCMvDII5.js";
|
|
7
|
+
import "./wizard-session-tp4Zdbwl.js";
|
|
8
|
+
import { r as runCleanups } from "./wizard-abort-BxtdkgI-.js";
|
|
9
|
+
import { n as isNonInteractiveEnvironment } from "./environment-kZtkp7eG.js";
|
|
10
|
+
import { n as runAgent, o as authenticate } from "./agent-runner-B0LTVFfw.js";
|
|
11
|
+
import { l as recoverOrphanedSettingsBackups, p as AgentSignals } from "./agent-interface-CF7GsdFf.js";
|
|
12
|
+
import { n as AUDIT_CHECKS_KEY, r as AUDIT_REPORT_FILE, t as AUDIT_CHECKS_FILE } from "./types-BRe_EzTW.js";
|
|
13
|
+
import { i as fetchSkillMenu, t as WIZARD_TOOL_NAMES } from "./wizard-tools-Dg8o2lcH.js";
|
|
14
|
+
import { h as SETUP_REPORT_FILE } from "./yara-hooks-pw86rZ8y.js";
|
|
15
|
+
import { i as SPINNER_MESSAGE } from "./registry-D2V88NoC.js";
|
|
16
|
+
import { S as parseRequirementsTxt, a as LINE_CHART_BLOCK, b as parsePipfile, g as detectIntegrationProjects, h as HEALTH_CHECK_STEP, i as FUNNEL_BLOCK, m as Icons, n as integrationRunStep, o as PRODUCT_SUITE_BLOCK, p as Colors, r as posthogIntegrationConfig, s as StatusPeekTrigger, u as isClearBlock, v as resolveProjectDir, x as parsePyprojectToml, y as gatherFrameworkContext } from "./posthog-integration-dmWJZ8mj.js";
|
|
17
|
+
import { n as safeReadFile, r as walkProjectFiles, t as IGNORED_DIRS } from "./file-utils-BAhYy5vC.js";
|
|
18
|
+
import { n as readApiKeyFromEnv } from "./env-api-key-AcC_tz8G.js";
|
|
19
19
|
import { satisfies } from "semver";
|
|
20
20
|
import yargs from "yargs";
|
|
21
21
|
import { hideBin } from "yargs/helpers";
|
|
22
22
|
import fs, { existsSync, readFileSync, readdirSync, statSync } from "fs";
|
|
23
|
-
import path, { join, relative
|
|
23
|
+
import path, { join, relative } from "path";
|
|
24
24
|
import * as os from "node:os";
|
|
25
25
|
import * as path$1 from "node:path";
|
|
26
|
+
import { join as join$1 } from "node:path";
|
|
26
27
|
import { spawnSync } from "node:child_process";
|
|
27
28
|
import * as fs$1 from "node:fs";
|
|
28
29
|
import axios from "axios";
|
|
@@ -101,12 +102,6 @@ const GLOBAL_OPTIONS = {
|
|
|
101
102
|
describe: "Email address for signup (used with --signup)\nenv: POSTHOG_WIZARD_EMAIL",
|
|
102
103
|
type: "string"
|
|
103
104
|
},
|
|
104
|
-
[HEADLESS_FLAG]: {
|
|
105
|
-
default: false,
|
|
106
|
-
describe: "EXPERIMENTAL — do not use. Unstable, subject to breaking changes.",
|
|
107
|
-
type: "boolean",
|
|
108
|
-
hidden: true
|
|
109
|
-
},
|
|
110
105
|
"local-mcp": {
|
|
111
106
|
default: false,
|
|
112
107
|
describe: "Use local MCP server at http://localhost:8787/mcp\nenv: POSTHOG_WIZARD_LOCAL_MCP",
|
|
@@ -212,7 +207,7 @@ function runProvision(argv) {
|
|
|
212
207
|
}
|
|
213
208
|
async function provision({ email, region, name, baseUrl, jsonMode }) {
|
|
214
209
|
try {
|
|
215
|
-
const { provisionNewAccount } = await import("./provisioning-
|
|
210
|
+
const { provisionNewAccount } = await import("./provisioning-CcxCry5p.js").then((n) => n.n);
|
|
216
211
|
if (!jsonMode) getUI().log.info(`Provisioning account for ${email} in ${region}...`);
|
|
217
212
|
emitResult(await provisionNewAccount(email, name, region, { baseUrl }), jsonMode);
|
|
218
213
|
process.exit(0);
|
|
@@ -267,7 +262,8 @@ const basicIntegrationCommand = {
|
|
|
267
262
|
describe: "Launch the TUI primitives playground",
|
|
268
263
|
type: "boolean",
|
|
269
264
|
hidden: true
|
|
270
|
-
}
|
|
265
|
+
},
|
|
266
|
+
...headlessOption
|
|
271
267
|
},
|
|
272
268
|
check: (argv) => {
|
|
273
269
|
if (argv.playground && (argv.ci || isHeadless(argv))) throw new Error("--playground cannot be combined with a headless run.");
|
|
@@ -277,22 +273,22 @@ const basicIntegrationCommand = {
|
|
|
277
273
|
setEntryCommand("integrate");
|
|
278
274
|
(async () => {
|
|
279
275
|
if (isHeadless(argv)) {
|
|
280
|
-
const { runHeadlessInstall } = await import("./ci-install-
|
|
276
|
+
const { runHeadlessInstall } = await import("./ci-install-Bow8-f0j.js");
|
|
281
277
|
return runHeadlessInstall(argv);
|
|
282
278
|
}
|
|
283
279
|
if (argv.ci) {
|
|
284
|
-
const { runCIInstall } = await import("./ci-install-
|
|
280
|
+
const { runCIInstall } = await import("./ci-install-Bow8-f0j.js");
|
|
285
281
|
return runCIInstall(argv);
|
|
286
282
|
}
|
|
287
283
|
if (isNonInteractiveEnvironment()) {
|
|
288
|
-
const { failNonInteractive } = await import("./non-interactive-
|
|
284
|
+
const { failNonInteractive } = await import("./non-interactive-DQA9vn9f.js");
|
|
289
285
|
return failNonInteractive();
|
|
290
286
|
}
|
|
291
287
|
if (argv.playground) {
|
|
292
|
-
const { runPlayground } = await import("./playground-
|
|
288
|
+
const { runPlayground } = await import("./playground-CbEndzc8.js");
|
|
293
289
|
return runPlayground();
|
|
294
290
|
}
|
|
295
|
-
const { runInteractive } = await import("./interactive-
|
|
291
|
+
const { runInteractive } = await import("./interactive-Cyic0bGL.js");
|
|
296
292
|
runInteractive(argv);
|
|
297
293
|
})();
|
|
298
294
|
}
|
|
@@ -1640,7 +1636,8 @@ const auditConfig = {
|
|
|
1640
1636
|
steps: auditSteps,
|
|
1641
1637
|
run: auditRun,
|
|
1642
1638
|
allowedTools: ["Agent"],
|
|
1643
|
-
disallowedTools: [WIZARD_TOOL_NAMES.wizardAsk]
|
|
1639
|
+
disallowedTools: [WIZARD_TOOL_NAMES.wizardAsk],
|
|
1640
|
+
cliOptions: { ...headlessOption }
|
|
1644
1641
|
};
|
|
1645
1642
|
//#endregion
|
|
1646
1643
|
//#region src/lib/programs/events-audit/steps.ts
|
|
@@ -2136,7 +2133,7 @@ const VENDOR_STACK_BLOCK = {
|
|
|
2136
2133
|
color: "gray",
|
|
2137
2134
|
children: " Braintrust"
|
|
2138
2135
|
}),
|
|
2139
|
-
/* @__PURE__ */ jsx(Text, { children: "
|
|
2136
|
+
/* @__PURE__ */ jsx(Text, { children: " AI observability " }),
|
|
2140
2137
|
/* @__PURE__ */ jsx(Text, {
|
|
2141
2138
|
color: "red",
|
|
2142
2139
|
children: "$50/mo+"
|
|
@@ -2229,7 +2226,7 @@ const FREE_TIER_BLOCK = {
|
|
|
2229
2226
|
/* @__PURE__ */ jsx(Text, { children: "events " }),
|
|
2230
2227
|
/* @__PURE__ */ jsx(Text, {
|
|
2231
2228
|
dimColor: true,
|
|
2232
|
-
children: "
|
|
2229
|
+
children: "AI observability"
|
|
2233
2230
|
})
|
|
2234
2231
|
] }),
|
|
2235
2232
|
/* @__PURE__ */ jsxs(Text, { children: [
|
|
@@ -3448,23 +3445,6 @@ function detectSelfDrivingPrerequisites(session, setFrameworkContext) {
|
|
|
3448
3445
|
}
|
|
3449
3446
|
//#endregion
|
|
3450
3447
|
//#region src/lib/programs/self-driving/detect-agentic.ts
|
|
3451
|
-
/**
|
|
3452
|
-
* Agentic (Haiku) detection for self-driving's integration phase.
|
|
3453
|
-
*
|
|
3454
|
-
* Mirrors source-maps: the integration-detect screen runs `detectSelfDriving-
|
|
3455
|
-
* IntegrationProjects` (the shared Haiku detector with the integration framework
|
|
3456
|
-
* targets), shows a project map, and the user picks one. This file supplies the
|
|
3457
|
-
* targets, maps the result back to `Integration`s, and classifies each project
|
|
3458
|
-
* as instrumentable (a framework the wizard supports that doesn't already have
|
|
3459
|
-
* PostHog). The screen writes the choice to the session; `prepSelfDriving-
|
|
3460
|
-
* Integration` then gathers the chosen project's framework context before the
|
|
3461
|
-
* integration agent runs (the runner scopes the install dir).
|
|
3462
|
-
*/
|
|
3463
|
-
/** Integration framework targets for the agentic detector (id → display name). */
|
|
3464
|
-
const INTEGRATION_TARGETS = Object.entries(FRAMEWORK_REGISTRY).map(([id, config]) => ({
|
|
3465
|
-
id,
|
|
3466
|
-
name: config.metadata.name
|
|
3467
|
-
}));
|
|
3468
3448
|
const INTEGRATION_IDS = new Set(Object.values(Integration));
|
|
3469
3449
|
function classify(integration, hasPostHog) {
|
|
3470
3450
|
if (integration == null) return {
|
|
@@ -3496,11 +3476,7 @@ function toIntegrationReport(report) {
|
|
|
3496
3476
|
}
|
|
3497
3477
|
/** Run the Haiku detector over the repo and classify projects for integration. */
|
|
3498
3478
|
async function detectSelfDrivingIntegrationProjects(session, onEvent) {
|
|
3499
|
-
return toIntegrationReport(await
|
|
3500
|
-
targets: INTEGRATION_TARGETS,
|
|
3501
|
-
purpose: "set up a PostHog SDK integration",
|
|
3502
|
-
onEvent
|
|
3503
|
-
}));
|
|
3479
|
+
return toIntegrationReport(await detectIntegrationProjects(session, { onEvent }));
|
|
3504
3480
|
}
|
|
3505
3481
|
/**
|
|
3506
3482
|
* Prepare the integration phase after the user picked a project on the
|
|
@@ -3527,36 +3503,10 @@ async function prepSelfDrivingIntegration(session) {
|
|
|
3527
3503
|
}
|
|
3528
3504
|
//#endregion
|
|
3529
3505
|
//#region src/lib/programs/self-driving/steps.ts
|
|
3530
|
-
/**
|
|
3531
|
-
* Self-driving program step list.
|
|
3532
|
-
*
|
|
3533
|
-
* detect → intro → integration-check → health-check → auth → integrate-detect →
|
|
3534
|
-
* integrate-run → self-driving-handoff → run → outro. A deterministic check in
|
|
3535
|
-
* `detect` decides whether PostHog is already in the project: found → the
|
|
3536
|
-
* integration screens are skipped and the integrate-run phase never shows; not
|
|
3537
|
-
* found → integration-check reports it and the only action sets up PostHog.
|
|
3538
|
-
* After auth, `integrate-detect` runs the Haiku detector and has the user pick
|
|
3539
|
-
* which project to set PostHog up in (a monorepo can have several);
|
|
3540
|
-
* `integrate-run` then runs the real integration program's agent (its own task
|
|
3541
|
-
* list) in that project. `self-driving-handoff` then bridges to Self-driving
|
|
3542
|
-
* ("PostHog is installed — now set up Self-driving") before the Self-driving
|
|
3543
|
-
* run. No keep-skills step: the setup skill is transient, so postRun removes it.
|
|
3544
|
-
*/
|
|
3545
3506
|
/** True once detection found PostHog already present in the project. */
|
|
3546
3507
|
const postHogPresent = (session) => session.frameworkContext[POSTHOG_PRESENT_KEY] === true;
|
|
3547
|
-
/**
|
|
3548
|
-
|
|
3549
|
-
* The picked path originates from LLM output; if it resolves outside the
|
|
3550
|
-
* repo (defense-in-depth on top of the coerce-layer clamp), fall back to
|
|
3551
|
-
* the root rather than run the agent elsewhere.
|
|
3552
|
-
*/
|
|
3553
|
-
const integrationDir = (session) => {
|
|
3554
|
-
const rel = session.frameworkContext[SELF_DRIVING_INTEGRATE_PATH_KEY];
|
|
3555
|
-
if (typeof rel !== "string" || rel === ".") return session.installDir;
|
|
3556
|
-
const root = resolve(session.installDir);
|
|
3557
|
-
const dir = resolve(root, rel);
|
|
3558
|
-
return dir === root || dir.startsWith(root + sep) ? dir : root;
|
|
3559
|
-
};
|
|
3508
|
+
/** Absolute dir to integrate into: the picked sub-app (LLM output — the shared resolver clamps escapes), else the repo root. */
|
|
3509
|
+
const integrationDir = (session) => resolveProjectDir(session.installDir, session.frameworkContext[SELF_DRIVING_INTEGRATE_PATH_KEY]);
|
|
3560
3510
|
const SELF_DRIVING_PROGRAM = [
|
|
3561
3511
|
{
|
|
3562
3512
|
id: "detect",
|
|
@@ -4437,13 +4387,13 @@ const mcpAddCommand = {
|
|
|
4437
4387
|
function runMcpAdd(argv) {
|
|
4438
4388
|
const features = parseFeatures(argv.features);
|
|
4439
4389
|
(async () => {
|
|
4440
|
-
const { readApiKeyFromEnv } = await import("./env-api-key-
|
|
4390
|
+
const { readApiKeyFromEnv } = await import("./env-api-key-AcC_tz8G.js").then((n) => n.t);
|
|
4441
4391
|
const apiKey = argv.apiKey || readApiKeyFromEnv();
|
|
4442
4392
|
const debug = argv.debug;
|
|
4443
4393
|
const localMcp = argv.local;
|
|
4444
4394
|
try {
|
|
4445
|
-
const { startTUI } = await import("./start-tui-
|
|
4446
|
-
const { buildSession } = await import("./wizard-session-
|
|
4395
|
+
const { startTUI } = await import("./start-tui-DHa_9aiB.js");
|
|
4396
|
+
const { buildSession } = await import("./wizard-session-DWHe83uk.js");
|
|
4447
4397
|
const tui = startTUI(VERSION, Program.McpAdd);
|
|
4448
4398
|
tui.store.session = buildSession({
|
|
4449
4399
|
debug,
|
|
@@ -4455,7 +4405,7 @@ function runMcpAdd(argv) {
|
|
|
4455
4405
|
} catch (error) {
|
|
4456
4406
|
if (!isTUIUnavailable(error)) throw error;
|
|
4457
4407
|
setUI(new LoggingUI());
|
|
4458
|
-
const { addMCPServerToClientsStep } = await import("./add-mcp-server-to-clients-
|
|
4408
|
+
const { addMCPServerToClientsStep } = await import("./add-mcp-server-to-clients-CNzZMSat.js").then((n) => n.r);
|
|
4459
4409
|
await addMCPServerToClientsStep({
|
|
4460
4410
|
local: localMcp,
|
|
4461
4411
|
features,
|
|
@@ -4494,8 +4444,8 @@ function runMcpRemove(argv) {
|
|
|
4494
4444
|
const debug = argv.debug;
|
|
4495
4445
|
const localMcp = argv.local;
|
|
4496
4446
|
try {
|
|
4497
|
-
const { startTUI } = await import("./start-tui-
|
|
4498
|
-
const { buildSession } = await import("./wizard-session-
|
|
4447
|
+
const { startTUI } = await import("./start-tui-DHa_9aiB.js");
|
|
4448
|
+
const { buildSession } = await import("./wizard-session-DWHe83uk.js");
|
|
4499
4449
|
const tui = startTUI(VERSION, Program.McpRemove);
|
|
4500
4450
|
tui.store.session = buildSession({
|
|
4501
4451
|
debug,
|
|
@@ -4504,7 +4454,7 @@ function runMcpRemove(argv) {
|
|
|
4504
4454
|
});
|
|
4505
4455
|
} catch {
|
|
4506
4456
|
setUI(new LoggingUI());
|
|
4507
|
-
const { removeMCPServerFromClientsStep } = await import("./add-mcp-server-to-clients-
|
|
4457
|
+
const { removeMCPServerFromClientsStep } = await import("./add-mcp-server-to-clients-CNzZMSat.js").then((n) => n.r);
|
|
4508
4458
|
await removeMCPServerFromClientsStep({ local: localMcp });
|
|
4509
4459
|
}
|
|
4510
4460
|
})();
|
|
@@ -4526,8 +4476,8 @@ function runMcpTutorial(argv) {
|
|
|
4526
4476
|
const debug = argv.debug;
|
|
4527
4477
|
const localMcp = argv.local;
|
|
4528
4478
|
try {
|
|
4529
|
-
const { startTUI } = await import("./start-tui-
|
|
4530
|
-
const { buildSession } = await import("./wizard-session-
|
|
4479
|
+
const { startTUI } = await import("./start-tui-DHa_9aiB.js");
|
|
4480
|
+
const { buildSession } = await import("./wizard-session-DWHe83uk.js");
|
|
4531
4481
|
const tui = startTUI(VERSION, Program.McpTutorial);
|
|
4532
4482
|
tui.store.session = buildSession({
|
|
4533
4483
|
debug,
|
|
@@ -4607,10 +4557,10 @@ function runWizard(config, options) {
|
|
|
4607
4557
|
(async () => {
|
|
4608
4558
|
try {
|
|
4609
4559
|
const installDir = options.installDir || process.cwd();
|
|
4610
|
-
const { startTUI } = await import("./start-tui-
|
|
4611
|
-
const { buildSession, RunPhase } = await import("./wizard-session-
|
|
4612
|
-
const { TaskStreamPush } = await import("./task-stream-
|
|
4613
|
-
const { PostHogDestination } = await import("./posthog-
|
|
4560
|
+
const { startTUI } = await import("./start-tui-DHa_9aiB.js");
|
|
4561
|
+
const { buildSession, RunPhase } = await import("./wizard-session-DWHe83uk.js");
|
|
4562
|
+
const { TaskStreamPush } = await import("./task-stream-B7qia9eW.js");
|
|
4563
|
+
const { PostHogDestination } = await import("./posthog-DFyux4Vw.js");
|
|
4614
4564
|
tui = startTUI(WIZARD_VERSION, config.id);
|
|
4615
4565
|
const activeTui = tui;
|
|
4616
4566
|
const session = buildSession({
|
|
@@ -4643,6 +4593,7 @@ function runWizard(config, options) {
|
|
|
4643
4593
|
getCredentials: () => activeTui.store.session.credentials,
|
|
4644
4594
|
onError: (err) => logToFile("[task-stream-push]", err.message)
|
|
4645
4595
|
})],
|
|
4596
|
+
eventPlanPath: config.eventPlanFile ? join$1(session.installDir, config.eventPlanFile) : void 0,
|
|
4646
4597
|
enabled: taskStreamEnabled
|
|
4647
4598
|
});
|
|
4648
4599
|
const activeStream = taskStream;
|
|
@@ -4674,7 +4625,7 @@ function runWizard(config, options) {
|
|
|
4674
4625
|
if (shown(step)) await advanceStep(step, activeTui.store, config);
|
|
4675
4626
|
}
|
|
4676
4627
|
else if (skipAgent) {
|
|
4677
|
-
const { getOrAskForProjectData } = await import("./setup-utils-
|
|
4628
|
+
const { getOrAskForProjectData } = await import("./setup-utils-Qp-u6BZk.js").then((n) => n.r);
|
|
4678
4629
|
const { projectApiKey, host, accessToken, projectId } = await getOrAskForProjectData({
|
|
4679
4630
|
signup: session.signup,
|
|
4680
4631
|
ci: session.ci,
|
|
@@ -4776,11 +4727,11 @@ function runNonInteractive(config, options, mode) {
|
|
|
4776
4727
|
analytics.setTag("build", mode);
|
|
4777
4728
|
(async () => {
|
|
4778
4729
|
const path = await import("path");
|
|
4779
|
-
const { buildSession, RunPhase, OutroKind } = await import("./wizard-session-
|
|
4780
|
-
const { readEnvironment } = await import("./environment-
|
|
4781
|
-
const { readApiKeyFromEnv } = await import("./env-api-key-
|
|
4782
|
-
const { configureLogFileFromEnvironment, logToFile } = await import("./debug-
|
|
4783
|
-
const { wizardAbort, WizardError } = await import("./wizard-abort-
|
|
4730
|
+
const { buildSession, RunPhase, OutroKind } = await import("./wizard-session-DWHe83uk.js");
|
|
4731
|
+
const { readEnvironment } = await import("./environment-kZtkp7eG.js").then((n) => n.t);
|
|
4732
|
+
const { readApiKeyFromEnv } = await import("./env-api-key-AcC_tz8G.js").then((n) => n.t);
|
|
4733
|
+
const { configureLogFileFromEnvironment, logToFile } = await import("./debug-BixHZmHv.js");
|
|
4734
|
+
const { wizardAbort, WizardError } = await import("./wizard-abort-DpDmuCfA.js");
|
|
4784
4735
|
configureLogFileFromEnvironment();
|
|
4785
4736
|
const env = readEnvironment();
|
|
4786
4737
|
const apiKey = options.apiKey ?? readApiKeyFromEnv() ?? void 0;
|
|
@@ -4811,9 +4762,9 @@ function runNonInteractive(config, options, mode) {
|
|
|
4811
4762
|
let store = null;
|
|
4812
4763
|
let taskStream = null;
|
|
4813
4764
|
if (mode === "headless") {
|
|
4814
|
-
const { WizardStore } = await import("./store-
|
|
4815
|
-
const { HeadlessUI } = await import("./headless-ui-
|
|
4816
|
-
const { TaskStreamPush, PostHogDestination } = await import("./task-stream-
|
|
4765
|
+
const { WizardStore } = await import("./store-DSwsITKX.js").then((n) => n.n);
|
|
4766
|
+
const { HeadlessUI } = await import("./headless-ui-DWmMyhaP.js");
|
|
4767
|
+
const { TaskStreamPush, PostHogDestination } = await import("./task-stream-B7qia9eW.js");
|
|
4817
4768
|
store = new WizardStore(config.id);
|
|
4818
4769
|
store.session = session;
|
|
4819
4770
|
setUI(new HeadlessUI(store));
|
|
@@ -4824,6 +4775,7 @@ function runNonInteractive(config, options, mode) {
|
|
|
4824
4775
|
getCredentials: () => session.credentials,
|
|
4825
4776
|
onError: (e) => logToFile("[headless task-stream]", e.message)
|
|
4826
4777
|
})],
|
|
4778
|
+
eventPlanPath: config.eventPlanFile ? join$1(session.installDir, config.eventPlanFile) : void 0,
|
|
4827
4779
|
enabled: !session.noTelemetry
|
|
4828
4780
|
});
|
|
4829
4781
|
taskStream.attach();
|
|
@@ -4868,7 +4820,7 @@ function runNonInteractive(config, options, mode) {
|
|
|
4868
4820
|
});
|
|
4869
4821
|
}
|
|
4870
4822
|
}
|
|
4871
|
-
const { runAgent } = await import("./agent-runner-
|
|
4823
|
+
const { runAgent } = await import("./agent-runner-B0LTVFfw.js").then((n) => n.t);
|
|
4872
4824
|
await runAgent(config, session);
|
|
4873
4825
|
await settleStream(RunPhase.Completed);
|
|
4874
4826
|
} catch (error) {
|
|
@@ -4935,8 +4887,8 @@ const skillProgramOptions = { "install-dir": {
|
|
|
4935
4887
|
//#region src/commands/factories/shared.ts
|
|
4936
4888
|
/**
|
|
4937
4889
|
* Dispatch a parsed yargs invocation to the wizard runner. Applies the
|
|
4938
|
-
* program's `mapCliOptions` transform, then routes to `
|
|
4939
|
-
* `runWizardCI` based on the `--ci`
|
|
4890
|
+
* program's `mapCliOptions` transform, then routes to `runWizardHeadless`,
|
|
4891
|
+
* `runWizardCI`, or `runWizard` based on the headless / `--ci` flags.
|
|
4940
4892
|
*
|
|
4941
4893
|
* Every command file used to inline this; the factories call it instead.
|
|
4942
4894
|
*/
|
|
@@ -4965,7 +4917,8 @@ function dispatchProgram(config, argv) {
|
|
|
4965
4917
|
...argvRecord,
|
|
4966
4918
|
...extras
|
|
4967
4919
|
};
|
|
4968
|
-
if (options
|
|
4920
|
+
if (isHeadless(options)) runWizardHeadless(config, options);
|
|
4921
|
+
else if (options.ci) runWizardCI(config, options);
|
|
4969
4922
|
else runWizard(config, options);
|
|
4970
4923
|
}
|
|
4971
4924
|
/**
|
|
@@ -5796,7 +5749,7 @@ async function runDoctorCI(options) {
|
|
|
5796
5749
|
getUI().intro("Welcome to the PostHog setup wizard");
|
|
5797
5750
|
getUI().log.info("Running posthog-doctor in CI mode");
|
|
5798
5751
|
try {
|
|
5799
|
-
const { getOrAskForProjectData } = await import("./setup-utils-
|
|
5752
|
+
const { getOrAskForProjectData } = await import("./setup-utils-Qp-u6BZk.js").then((n) => n.r);
|
|
5800
5753
|
const { host, accessToken, projectId } = await getOrAskForProjectData({
|
|
5801
5754
|
signup: false,
|
|
5802
5755
|
ci: true,
|
|
@@ -5814,7 +5767,7 @@ async function runDoctorCI(options) {
|
|
|
5814
5767
|
for (const issue of sorted) getUI().log.info(` • [${issue.severity}] ${getKindMeta(issue.kind).title}`);
|
|
5815
5768
|
process.exit(1);
|
|
5816
5769
|
} catch (error) {
|
|
5817
|
-
const { ApiError } = await import("./api-
|
|
5770
|
+
const { ApiError } = await import("./api-uCMvDII5.js").then((n) => n.n);
|
|
5818
5771
|
const message = error instanceof ApiError && error.statusCode === 401 ? "Your PostHog API key is invalid or expired." : error instanceof Error ? error.message : String(error);
|
|
5819
5772
|
getUI().log.error(`Doctor failed: ${message}`);
|
|
5820
5773
|
process.exit(1);
|
|
@@ -5859,14 +5812,14 @@ const selfDrivingCommand = {
|
|
|
5859
5812
|
options: {
|
|
5860
5813
|
...skillProgramOptions,
|
|
5861
5814
|
integrate: {
|
|
5862
|
-
describe: "Integrate the PostHog SDK first, then set up Self-driving — skips the
|
|
5815
|
+
describe: "Integrate the PostHog SDK first, then set up Self-driving — skips the integration prompt and logs you in via OAuth (no \"create an account?\" question). Use when the project isn't set up yet but you already have a PostHog account.",
|
|
5863
5816
|
type: "boolean",
|
|
5864
5817
|
default: false
|
|
5865
5818
|
},
|
|
5866
5819
|
...selfDrivingConfig.cliOptions ?? {}
|
|
5867
5820
|
},
|
|
5868
5821
|
check: (argv) => {
|
|
5869
|
-
if (argv.signup) throw new Error("`self-driving` cannot run with --signup.
|
|
5822
|
+
if (argv.signup) throw new Error("`self-driving` cannot run with --signup. Just run `wizard self-driving`: when your project has no PostHog, it asks whether you already have an account and offers to create one for you (no flag needed).");
|
|
5870
5823
|
if (argv.ci) throw new Error("`self-driving` cannot run in CI mode — it requires interactive steps (GitHub connect, issue-tracker selection, custom-scout approval).");
|
|
5871
5824
|
return true;
|
|
5872
5825
|
},
|
|
@@ -5896,8 +5849,8 @@ function runSlackConnect(argv) {
|
|
|
5896
5849
|
(async () => {
|
|
5897
5850
|
const debug = argv.debug;
|
|
5898
5851
|
try {
|
|
5899
|
-
const { startTUI } = await import("./start-tui-
|
|
5900
|
-
const { buildSession } = await import("./wizard-session-
|
|
5852
|
+
const { startTUI } = await import("./start-tui-DHa_9aiB.js");
|
|
5853
|
+
const { buildSession } = await import("./wizard-session-DWHe83uk.js");
|
|
5901
5854
|
const tui = startTUI(VERSION, Program.SlackConnect);
|
|
5902
5855
|
tui.store.session = buildSession({
|
|
5903
5856
|
debug,
|