@posthog/wizard 2.14.3 → 2.15.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 (90) hide show
  1. package/README.md +43 -1
  2. package/dist/{TextBlock-DEHERFec.js → TextBlock-B_8bXLLs.js} +2 -2
  3. package/dist/{TextBlock-DEHERFec.js.map → TextBlock-B_8bXLLs.js.map} +1 -1
  4. package/dist/{add-mcp-server-to-clients-B48J7VVO.js → add-mcp-server-to-clients-Dq0n2yzq.js} +5 -5
  5. package/dist/{add-mcp-server-to-clients-B48J7VVO.js.map → add-mcp-server-to-clients-Dq0n2yzq.js.map} +1 -1
  6. package/dist/{agent-interface-cEdS_bNo.js → agent-interface-yB_27jG8.js} +106 -21
  7. package/dist/agent-interface-yB_27jG8.js.map +1 -0
  8. package/dist/{agent-runner-CK5r-zQF.js → agent-runner-C9sSudE0.js} +7 -8
  9. package/dist/agent-runner-C9sSudE0.js.map +1 -0
  10. package/dist/analytics-BnR9904x.js +2 -0
  11. package/dist/{analytics-DaDpDus8.js → analytics-Da4QHjMw.js} +2 -2
  12. package/dist/{analytics-DaDpDus8.js.map → analytics-Da4QHjMw.js.map} +1 -1
  13. package/dist/bin.js +896 -80
  14. package/dist/bin.js.map +1 -1
  15. package/dist/{debug-B_PK52GI.js → debug-D5kt4fxB.js} +1 -1
  16. package/dist/{debug-BOogNcWX.js → debug-DRKLej5r.js} +55 -46
  17. package/dist/debug-DRKLej5r.js.map +1 -0
  18. package/dist/{defaults-DgKAzsD1.js → defaults-CPH6eWhN.js} +1 -1
  19. package/dist/{defaults-DgKAzsD1.js.map → defaults-CPH6eWhN.js.map} +1 -1
  20. package/dist/{detection-OCF8fpfp.js → detection-0Pz2NncX.js} +3 -3
  21. package/dist/{detection-OCF8fpfp.js.map → detection-0Pz2NncX.js.map} +1 -1
  22. package/dist/{env-api-key-D5G2PrXW.js → env-api-key-HFqv1l-z.js} +1 -1
  23. package/dist/{env-api-key-D5G2PrXW.js.map → env-api-key-HFqv1l-z.js.map} +1 -1
  24. package/dist/{file-utils-DPmgn9Vm.js → file-utils-DnTSiTJw.js} +1 -1
  25. package/dist/file-utils-DnTSiTJw.js.map +1 -0
  26. package/dist/package-json-Cttzi3C8.js +2 -0
  27. package/dist/package-json-v_g2YlN1.js +35 -0
  28. package/dist/package-json-v_g2YlN1.js.map +1 -0
  29. package/dist/{package-manager-CmMJAD-V.js → package-manager-DlTISyej.js} +2 -2
  30. package/dist/package-manager-DlTISyej.js.map +1 -0
  31. package/dist/posthog-B1G0raJU.js +120 -0
  32. package/dist/posthog-B1G0raJU.js.map +1 -0
  33. package/dist/{posthog-integration-By5930Gz.js → posthog-integration-D-DyEJvz.js} +13 -12
  34. package/dist/{posthog-integration-By5930Gz.js.map → posthog-integration-D-DyEJvz.js.map} +1 -1
  35. package/dist/provisioning-COeHnCVG.js +2 -0
  36. package/dist/{provisioning-BHa8VWaa.js → provisioning-DmN8ZDbE.js} +3 -3
  37. package/dist/{provisioning-BHa8VWaa.js.map → provisioning-DmN8ZDbE.js.map} +1 -1
  38. package/dist/{registry-DpROZPnl.js → registry-CofBzIdU.js} +31 -31
  39. package/dist/registry-CofBzIdU.js.map +1 -0
  40. package/dist/setup-utils-C5iSJ3eg.js +2 -0
  41. package/dist/{setup-utils-Mzpk1vqG.js → setup-utils-_P-or31U.js} +91 -51
  42. package/dist/setup-utils-_P-or31U.js.map +1 -0
  43. package/dist/{slides-BtDXEXdn.js → slides-D3I6JzlG.js} +41 -8
  44. package/dist/slides-D3I6JzlG.js.map +1 -0
  45. package/dist/smoke-test-ci.sh +5 -2
  46. package/dist/smoke-test.sh +43 -0
  47. package/dist/{start-playground-zZL5y9id.js → start-playground-Bxd2KG2L.js} +5 -6
  48. package/dist/{start-playground-zZL5y9id.js.map → start-playground-Bxd2KG2L.js.map} +1 -1
  49. package/dist/{start-tui-Cz7RZSn_.js → start-tui-Bl8fCbp_.js} +576 -23
  50. package/dist/start-tui-Bl8fCbp_.js.map +1 -0
  51. package/dist/{steps-C2XEzN79.js → steps-B-vmvb2V.js} +6 -6
  52. package/dist/{steps-C2XEzN79.js.map → steps-B-vmvb2V.js.map} +1 -1
  53. package/dist/task-stream-z6QFZtpC.js +195 -0
  54. package/dist/task-stream-z6QFZtpC.js.map +1 -0
  55. package/dist/{telemetry-BG2bOwCp.js → telemetry-XO0SlTFs.js} +2 -2
  56. package/dist/{telemetry-BG2bOwCp.js.map → telemetry-XO0SlTFs.js.map} +1 -1
  57. package/dist/{wizard-abort-CYW83OG5.js → wizard-abort-CuaS1eXn.js} +1 -1
  58. package/dist/{wizard-abort-BmT-F0Vr.js → wizard-abort-uolun8Q3.js} +3 -3
  59. package/dist/{wizard-abort-BmT-F0Vr.js.map → wizard-abort-uolun8Q3.js.map} +1 -1
  60. package/dist/{wizard-session-CsI33S4_.js → wizard-session-BlgiX-5d.js} +16 -2
  61. package/dist/wizard-session-BlgiX-5d.js.map +1 -0
  62. package/dist/wizard-session-DxU5ZMBN.js +2 -0
  63. package/dist/wizard-ui-YdGFRyu_.js.map +1 -1
  64. package/package.json +3 -2
  65. package/dist/agent-interface-cEdS_bNo.js.map +0 -1
  66. package/dist/agent-runner-CK5r-zQF.js.map +0 -1
  67. package/dist/analytics-Bw8E-yhX.js +0 -2
  68. package/dist/craft-pre-release.sh +0 -10
  69. package/dist/debug-BOogNcWX.js.map +0 -1
  70. package/dist/file-BKbKreWF.js +0 -16
  71. package/dist/file-BKbKreWF.js.map +0 -1
  72. package/dist/file-utils-DPmgn9Vm.js.map +0 -1
  73. package/dist/package-json-DZpnf6vU.js +0 -23
  74. package/dist/package-json-DZpnf6vU.js.map +0 -1
  75. package/dist/package-json-_4PEss19.js +0 -2
  76. package/dist/package-manager-CmMJAD-V.js.map +0 -1
  77. package/dist/paths-DJS47p5x.js +0 -26
  78. package/dist/paths-DJS47p5x.js.map +0 -1
  79. package/dist/posthog-BbQf_Hzq.js +0 -11
  80. package/dist/posthog-BbQf_Hzq.js.map +0 -1
  81. package/dist/provisioning-gHqu_MXL.js +0 -2
  82. package/dist/registry-DpROZPnl.js.map +0 -1
  83. package/dist/setup-utils-Mzpk1vqG.js.map +0 -1
  84. package/dist/setup-utils-ptemIB6g.js +0 -2
  85. package/dist/slides-BtDXEXdn.js.map +0 -1
  86. package/dist/start-tui-Cz7RZSn_.js.map +0 -1
  87. package/dist/task-stream-DUpUZmFQ.js +0 -61
  88. package/dist/task-stream-DUpUZmFQ.js.map +0 -1
  89. package/dist/wizard-session-CPhhll4P.js +0 -2
  90. package/dist/wizard-session-CsI33S4_.js.map +0 -1
@@ -1,16 +1,15 @@
1
- import { C as Integration, D as POSTHOG_DOCS_URL, H as getSkillsBaseUrl, N as REMOTE_SKILLS_BASE_URL, R as WIZARD_TOOLS_MENU_FLAG_KEY, f as SIGNUP_WIZARD_READINESS_CONFIG, l as setUI, m as getBlockingServiceKeys, s as logToFile, w as OAUTH_PORTS } from "./debug-BOogNcWX.js";
2
- import { a as relativeToInstallDir, n as WIZARD_LOG_FILE } from "./paths-DJS47p5x.js";
3
- import { n as analytics } from "./analytics-DaDpDus8.js";
4
- import { l as ApiError, p as getUiHostFromHost } from "./setup-utils-Mzpk1vqG.js";
5
- import { t as ADDITIONAL_FEATURE_LABELS } from "./wizard-session-CsI33S4_.js";
6
- import { r as wizardAbort } from "./wizard-abort-BmT-F0Vr.js";
7
- import { _ as AUDIT_SEVERITY_STYLE, d as downloadSkill, f as fetchSkillMenu, h as AUDIT_CHECKS_KEY, m as AUDIT_CHECKS_FILE, v as coerceAuditChecks, y as getAuditChecks } from "./agent-interface-cEdS_bNo.js";
8
- import { o as Colors, s as Icons } from "./TextBlock-DEHERFec.js";
9
- import { t as EVENT_PLAN_FILE } from "./posthog-integration-By5930Gz.js";
10
- import { c as POSTHOG_SDKS, l as STRIPE_SDKS, n as Program, o as fetchHealthIssues, r as getProgramConfig, s as getContentBlocks } from "./bin.js";
11
- import { t as ALL_FEATURE_VALUES } from "./defaults-DgKAzsD1.js";
12
- import { a as getSupportedClients, c as removeMCPServer, i as getInstalledClients, o as getSupportedPluginClients, s as installPlugins, u as isPluginCapable } from "./add-mcp-server-to-clients-B48J7VVO.js";
13
- import { C as ProgressList, D as WizardStore, S as useKeyBindings, T as SplitView, _ as ModalOverlay, a as IssueTable, b as useStdoutDimensions, c as ServiceHealthList, f as HNViewer, g as LogViewer, h as EventPlanViewer, i as McpScreen, l as TipsCard, m as ScreenContainer, n as AUDIT_AREA_SLIDES, o as SEVERITY_LABEL, p as TabContainer, r as AuditChecksViewer, s as SEVERITY_ORDER, t as AUDIT_3000_AREA_SLIDES, u as LearnCard, v as ConfirmationInput, w as LoadingBox, x as PickerMenu } from "./slides-BtDXEXdn.js";
1
+ import { M as POSTHOG_DOCS_URL, O as Integration, R as REMOTE_SKILLS_BASE_URL, U as WIZARD_TOOLS_MENU_FLAG_KEY, _ as SIGNUP_WIZARD_READINESS_CONFIG, d as relativeToInstallDir, k as OAUTH_PORTS, l as WIZARD_LOG_FILE, m as setUI, q as getSkillsBaseUrl, s as logToFile, y as getBlockingServiceKeys } from "./debug-DRKLej5r.js";
2
+ import { n as analytics } from "./analytics-Da4QHjMw.js";
3
+ import { d as extractOAuthCode, l as ApiError, m as getUiHostFromHost } from "./setup-utils-_P-or31U.js";
4
+ import { t as ADDITIONAL_FEATURE_LABELS } from "./wizard-session-BlgiX-5d.js";
5
+ import { r as wizardAbort } from "./wizard-abort-uolun8Q3.js";
6
+ import { _ as AUDIT_SEVERITY_STYLE, d as downloadSkill, f as fetchSkillMenu, h as AUDIT_CHECKS_KEY, m as AUDIT_CHECKS_FILE, v as coerceAuditChecks, y as getAuditChecks } from "./agent-interface-yB_27jG8.js";
7
+ import { o as Colors, s as Icons } from "./TextBlock-B_8bXLLs.js";
8
+ import { t as EVENT_PLAN_FILE } from "./posthog-integration-D-DyEJvz.js";
9
+ import { a as SOURCE_MAPS_CONTEXT_KEYS, c as fetchHealthIssues, d as STRIPE_SDKS, i as DISPLAY_NAME, l as getContentBlocks, n as Program, r as getProgramConfig, u as POSTHOG_SDKS } from "./bin.js";
10
+ import { t as ALL_FEATURE_VALUES } from "./defaults-CPH6eWhN.js";
11
+ import { a as getSupportedClients, c as removeMCPServer, i as getInstalledClients, o as getSupportedPluginClients, s as installPlugins, u as isPluginCapable } from "./add-mcp-server-to-clients-Dq0n2yzq.js";
12
+ import { C as ProgressList, D as WizardStore, S as useKeyBindings, T as SplitView, _ as ModalOverlay, a as IssueTable, b as useStdoutDimensions, c as ServiceHealthList, f as HNViewer, g as LogViewer, h as EventPlanViewer, i as McpScreen, l as TipsCard, m as ScreenContainer, n as AUDIT_AREA_SLIDES, o as SEVERITY_LABEL, p as TabContainer, r as AuditChecksViewer, s as SEVERITY_ORDER, t as AUDIT_3000_AREA_SLIDES, u as LearnCard, v as ConfirmationInput, w as LoadingBox, x as PickerMenu } from "./slides-D3I6JzlG.js";
14
13
  import { spawn, spawnSync } from "node:child_process";
15
14
  import { join } from "node:path";
16
15
  import * as fs$1 from "fs";
@@ -71,6 +70,9 @@ var InkUI = class {
71
70
  setLoginUrl(url) {
72
71
  this.store.setLoginUrl(url);
73
72
  }
73
+ setAuthorizeUrl(url) {
74
+ this.store.setAuthorizeUrl(url);
75
+ }
74
76
  showBlockingOutage(result) {
75
77
  this.store.setReadinessResult(result);
76
78
  return Promise.resolve();
@@ -81,6 +83,9 @@ var InkUI = class {
81
83
  showPortConflict(processInfo) {
82
84
  return this.store.showPortConflict(processInfo);
83
85
  }
86
+ waitForManualAuthCode() {
87
+ return this.store.waitForManualAuthCode();
88
+ }
84
89
  showSettingsOverride(conflicts, backupAndFix) {
85
90
  return this.store.showSettingsOverride(conflicts, backupAndFix);
86
91
  }
@@ -679,6 +684,107 @@ const PortConflictScreen = ({ store }) => {
679
684
  });
680
685
  };
681
686
  //#endregion
687
+ //#region src/ui/tui/screens/ManualAuthCodeScreen.tsx
688
+ /**
689
+ * ManualAuthCodeScreen — Paste an OAuth authorization code by hand.
690
+ *
691
+ * Fallback for headless/remote shells where the browser can't reach the
692
+ * wizard's local callback server. Shows the direct authorize URL (the localhost
693
+ * one is unreachable from another machine), then the user pastes either the
694
+ * full callback URL the browser was redirected to
695
+ * (`http://localhost:8239/callback?code=...`) or just the code. On submit we
696
+ * extract the code and resolve the in-flight OAuth flow; bad input shows inline
697
+ * feedback without leaving the screen.
698
+ *
699
+ * Opened from AuthScreen via a keypress; Esc dismisses it.
700
+ */
701
+ const ManualAuthCodeScreen = ({ store }) => {
702
+ useSyncExternalStore((cb) => store.subscribe(cb), () => store.getSnapshot());
703
+ const { session } = store;
704
+ const [error, setError] = useState(null);
705
+ useInput((_input, key) => {
706
+ if (key.escape) store.dismissManualAuthCode();
707
+ });
708
+ const handleSubmit = (value) => {
709
+ const code = extractOAuthCode(value);
710
+ if (!code) {
711
+ setError("Couldn't find a code in that input. Paste the full callback URL or just the code.");
712
+ return;
713
+ }
714
+ store.submitManualAuthCode(code);
715
+ };
716
+ return /* @__PURE__ */ jsxs(Box, {
717
+ flexDirection: "column",
718
+ flexGrow: 1,
719
+ children: [
720
+ /* @__PURE__ */ jsx(Box, {
721
+ marginBottom: 1,
722
+ children: /* @__PURE__ */ jsxs(Text, {
723
+ bold: true,
724
+ color: Colors.accent,
725
+ children: [Icons.diamond, " Paste authorization code"]
726
+ })
727
+ }),
728
+ session.authorizeUrl && /* @__PURE__ */ jsxs(Box, {
729
+ flexDirection: "column",
730
+ marginBottom: 1,
731
+ children: [/* @__PURE__ */ jsx(Text, {
732
+ dimColor: true,
733
+ children: "On a remote/headless machine the local login link won't open. Open this URL in a browser on any machine to authorize:"
734
+ }), /* @__PURE__ */ jsx(Box, {
735
+ flexShrink: 0,
736
+ marginTop: 1,
737
+ children: /* @__PURE__ */ jsx(Text, {
738
+ color: "cyan",
739
+ children: session.authorizeUrl
740
+ })
741
+ })]
742
+ }),
743
+ /* @__PURE__ */ jsx(Text, { children: "After authorizing, paste the callback URL it lands on — or just the code from it — here:" }),
744
+ /* @__PURE__ */ jsx(Box, {
745
+ marginTop: 1,
746
+ width: "100%",
747
+ children: /* @__PURE__ */ jsx(TextInput, {
748
+ placeholder: "http://localhost:8239/callback?code=… or the code",
749
+ onSubmit: handleSubmit
750
+ })
751
+ }),
752
+ error && /* @__PURE__ */ jsx(Box, {
753
+ marginTop: 1,
754
+ children: /* @__PURE__ */ jsx(Text, {
755
+ color: "yellow",
756
+ children: error
757
+ })
758
+ }),
759
+ /* @__PURE__ */ jsx(Box, {
760
+ marginTop: 1,
761
+ children: /* @__PURE__ */ jsxs(Text, { children: [
762
+ /* @__PURE__ */ jsx(Text, {
763
+ color: Colors.accent,
764
+ children: "ENTER"
765
+ }),
766
+ /* @__PURE__ */ jsx(Text, {
767
+ dimColor: true,
768
+ children: " submit"
769
+ }),
770
+ /* @__PURE__ */ jsx(Text, {
771
+ dimColor: true,
772
+ children: " · "
773
+ }),
774
+ /* @__PURE__ */ jsx(Text, {
775
+ color: Colors.accent,
776
+ children: "ESC"
777
+ }),
778
+ /* @__PURE__ */ jsx(Text, {
779
+ dimColor: true,
780
+ children: " cancel"
781
+ })
782
+ ] })
783
+ })
784
+ ]
785
+ });
786
+ };
787
+ //#endregion
682
788
  //#region src/ui/tui/screens/IntroScreenLayout.tsx
683
789
  /**
684
790
  * IntroScreenLayout ��� Shared visual shell for all program intro screens.
@@ -919,7 +1025,7 @@ const FrameworkPicker = ({ store, onComplete }) => {
919
1025
  })),
920
1026
  onSelect: (value) => {
921
1027
  const integration = Array.isArray(value) ? value[0] : value;
922
- import("./registry-DpROZPnl.js").then((n) => n.n).then(({ FRAMEWORK_REGISTRY }) => {
1028
+ import("./registry-CofBzIdU.js").then((n) => n.n).then(({ FRAMEWORK_REGISTRY }) => {
923
1029
  const config = FRAMEWORK_REGISTRY[integration];
924
1030
  store.setFrameworkConfig(integration, config);
925
1031
  store.setDetectedFramework(config.metadata.name);
@@ -1249,7 +1355,7 @@ const RevenueIntroScreen = ({ store }) => {
1249
1355
  }), /* @__PURE__ */ jsx(Box, {
1250
1356
  marginTop: 1,
1251
1357
  flexDirection: "column",
1252
- children: /* @__PURE__ */ jsx(DetectErrorBody, { error: detectError })
1358
+ children: /* @__PURE__ */ jsx(DetectErrorBody$1, { error: detectError })
1253
1359
  })]
1254
1360
  }), /* @__PURE__ */ jsx(PickerMenu, {
1255
1361
  options: [{
@@ -1293,7 +1399,7 @@ const RevenueIntroScreen = ({ store }) => {
1293
1399
  }
1294
1400
  });
1295
1401
  };
1296
- const DetectErrorBody = ({ error }) => {
1402
+ const DetectErrorBody$1 = ({ error }) => {
1297
1403
  switch (error.kind) {
1298
1404
  case "bad-directory": {
1299
1405
  const reasonText = {
@@ -1445,6 +1551,425 @@ const MigrationIntroScreen = ({ store }) => {
1445
1551
  });
1446
1552
  };
1447
1553
  //#endregion
1554
+ //#region src/ui/tui/screens/SourceMapsIntroScreen.tsx
1555
+ /**
1556
+ * SourceMapsIntroScreen — Welcome screen for the source-maps upload flow.
1557
+ *
1558
+ * Reads detection results from frameworkContext (written by
1559
+ * detectSourceMapsPrerequisites). On success: shows the detected platform.
1560
+ * On failure: shows the structured error with an Exit prompt.
1561
+ */
1562
+ const SourceMapsIntroScreen = ({ store }) => {
1563
+ useSyncExternalStore((cb) => store.subscribe(cb), () => store.getSnapshot());
1564
+ const { session } = store;
1565
+ const detectError = session.frameworkContext[SOURCE_MAPS_CONTEXT_KEYS.detectError];
1566
+ const variant = session.frameworkContext[SOURCE_MAPS_CONTEXT_KEYS.skillVariant];
1567
+ const displayName = session.frameworkContext[SOURCE_MAPS_CONTEXT_KEYS.displayName];
1568
+ const packagePaths = session.frameworkContext[SOURCE_MAPS_CONTEXT_KEYS.packagePaths] ?? [];
1569
+ const detectionRows = [];
1570
+ if (displayName) detectionRows.push({
1571
+ label: "Platform",
1572
+ value: displayName
1573
+ });
1574
+ if (variant) detectionRows.push({
1575
+ label: "Skill",
1576
+ value: `error-tracking-upload-source-maps-${variant}`
1577
+ });
1578
+ const body = /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsxs(Box, {
1579
+ flexDirection: "column",
1580
+ alignItems: "center",
1581
+ children: [/* @__PURE__ */ jsx(Text, { children: "Upload source maps for accurate error stack traces." }), /* @__PURE__ */ jsx(Box, {
1582
+ flexDirection: "column",
1583
+ marginTop: 1,
1584
+ children: /* @__PURE__ */ jsx(Text, { children: "The agent will wire it into your build." })
1585
+ })]
1586
+ }), packagePaths.length > 1 && /* @__PURE__ */ jsxs(Box, {
1587
+ flexDirection: "column",
1588
+ marginTop: 1,
1589
+ children: [/* @__PURE__ */ jsxs(Text, {
1590
+ dimColor: true,
1591
+ children: [
1592
+ "Found ",
1593
+ packagePaths.length,
1594
+ " package.json files:"
1595
+ ]
1596
+ }), packagePaths.map((p) => /* @__PURE__ */ jsxs(Text, {
1597
+ dimColor: true,
1598
+ children: [
1599
+ " ",
1600
+ "•",
1601
+ " ",
1602
+ p
1603
+ ]
1604
+ }, p))]
1605
+ })] });
1606
+ const errorView = detectError ? /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsxs(Box, {
1607
+ flexDirection: "column",
1608
+ marginBottom: 1,
1609
+ children: [/* @__PURE__ */ jsxs(Text, {
1610
+ color: "red",
1611
+ bold: true,
1612
+ children: ["✘", " Cannot set up source map upload"]
1613
+ }), /* @__PURE__ */ jsx(Box, {
1614
+ marginTop: 1,
1615
+ flexDirection: "column",
1616
+ children: /* @__PURE__ */ jsx(DetectErrorBody, { error: detectError })
1617
+ })]
1618
+ }), /* @__PURE__ */ jsx(PickerMenu, {
1619
+ options: [{
1620
+ label: "Exit",
1621
+ value: "exit"
1622
+ }],
1623
+ onSelect: () => process.exit(1)
1624
+ })] }) : void 0;
1625
+ return /* @__PURE__ */ jsx(IntroScreenLayout, {
1626
+ installDir: session.installDir,
1627
+ body,
1628
+ showDetection: true,
1629
+ detectionRows,
1630
+ errorView,
1631
+ programLabel: session.programLabel,
1632
+ skillId: session.skillId,
1633
+ menuOptions: [{
1634
+ label: "Continue",
1635
+ value: "continue"
1636
+ }, {
1637
+ label: "Cancel",
1638
+ value: "cancel"
1639
+ }],
1640
+ onSelect: (value) => {
1641
+ if (value === "cancel") process.exit(0);
1642
+ else store.completeSetup();
1643
+ }
1644
+ });
1645
+ };
1646
+ const SOURCE_MAP_DOCS = "https://posthog.com/docs/error-tracking/upload-source-maps";
1647
+ const ERROR_TRACKING_INSTALL_DOCS = "https://posthog.com/docs/error-tracking/installation";
1648
+ const WIZARD_ISSUES_URL = "https://github.com/PostHog/wizard/issues";
1649
+ /**
1650
+ * Platforms PostHog Error Tracking supports with published source-map / symbol
1651
+ * upload docs, but that the wizard can't automate yet. The user (or their own
1652
+ * coding agent) can follow these docs to wire it up by hand. Anything not in
1653
+ * this map falls through to the generic "not supported yet" message — we don't
1654
+ * hardcode the full supported-platform list (it lives in the docs and changes
1655
+ * server-side), we just point there.
1656
+ */
1657
+ const NATIVE_PLATFORM_DOCS = {
1658
+ ios: {
1659
+ label: "iOS",
1660
+ url: "https://posthog.com/docs/error-tracking/upload-source-maps/ios"
1661
+ },
1662
+ android: {
1663
+ label: "Android",
1664
+ url: "https://posthog.com/docs/error-tracking/upload-mappings/android"
1665
+ },
1666
+ "react-native": {
1667
+ label: "React Native",
1668
+ url: "https://posthog.com/docs/error-tracking/upload-source-maps/react-native"
1669
+ },
1670
+ flutter: {
1671
+ label: "Flutter",
1672
+ url: "https://posthog.com/docs/error-tracking/upload-source-maps/flutter"
1673
+ }
1674
+ };
1675
+ const DetectErrorBody = ({ error }) => {
1676
+ switch (error.kind) {
1677
+ case "bad-directory": {
1678
+ const reasonText = {
1679
+ missing: "does not exist",
1680
+ "not-dir": "is not a directory",
1681
+ unreadable: "could not be accessed"
1682
+ }[error.reason];
1683
+ return /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsxs(Text, { children: [
1684
+ "This path ",
1685
+ reasonText,
1686
+ ":"
1687
+ ] }), /* @__PURE__ */ jsxs(Text, {
1688
+ dimColor: true,
1689
+ children: [" ", error.path]
1690
+ })] });
1691
+ }
1692
+ case "no-project-files": return /* @__PURE__ */ jsxs(Fragment$1, { children: [
1693
+ /* @__PURE__ */ jsx(Text, { children: "No recognizable project files were found." }),
1694
+ /* @__PURE__ */ jsx(Text, {
1695
+ dimColor: true,
1696
+ children: "Source map upload needs a package.json, Xcode project, Gradle build, or Flutter pubspec.yaml."
1697
+ }),
1698
+ /* @__PURE__ */ jsx(Text, {
1699
+ dimColor: true,
1700
+ children: "Run this command from your project root."
1701
+ }),
1702
+ /* @__PURE__ */ jsxs(Box, {
1703
+ marginTop: 1,
1704
+ flexDirection: "column",
1705
+ children: [/* @__PURE__ */ jsx(Text, {
1706
+ dimColor: true,
1707
+ children: "How source map upload works:"
1708
+ }), /* @__PURE__ */ jsxs(Text, {
1709
+ dimColor: true,
1710
+ children: [" ", SOURCE_MAP_DOCS]
1711
+ })]
1712
+ })
1713
+ ] });
1714
+ case "unsupported-platform": {
1715
+ const native = NATIVE_PLATFORM_DOCS[error.detected];
1716
+ if (native) return /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsxs(Text, { children: [
1717
+ "The wizard can't set up source map upload for ",
1718
+ native.label,
1719
+ " yet."
1720
+ ] }), /* @__PURE__ */ jsxs(Box, {
1721
+ marginTop: 1,
1722
+ flexDirection: "column",
1723
+ children: [/* @__PURE__ */ jsxs(Text, {
1724
+ dimColor: true,
1725
+ children: [
1726
+ "PostHog Error Tracking does support ",
1727
+ native.label,
1728
+ ". You can set it up yourself by following the docs below — or hand them to your own coding agent to do it for you:"
1729
+ ]
1730
+ }), /* @__PURE__ */ jsx(Box, {
1731
+ marginTop: 1,
1732
+ children: /* @__PURE__ */ jsx(Text, {
1733
+ dimColor: true,
1734
+ children: native.url
1735
+ })
1736
+ })]
1737
+ })] });
1738
+ return /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx(Text, { children: "Source map upload isn't supported for this stack yet." }), /* @__PURE__ */ jsxs(Box, {
1739
+ marginTop: 1,
1740
+ flexDirection: "column",
1741
+ children: [
1742
+ /* @__PURE__ */ jsx(Text, {
1743
+ dimColor: true,
1744
+ children: "Check which platforms PostHog Error Tracking supports:"
1745
+ }),
1746
+ /* @__PURE__ */ jsx(Box, {
1747
+ marginTop: 1,
1748
+ children: /* @__PURE__ */ jsx(Text, {
1749
+ dimColor: true,
1750
+ children: ERROR_TRACKING_INSTALL_DOCS
1751
+ })
1752
+ }),
1753
+ /* @__PURE__ */ jsx(Box, {
1754
+ marginTop: 1,
1755
+ children: /* @__PURE__ */ jsxs(Text, {
1756
+ dimColor: true,
1757
+ children: [
1758
+ "If yours isn't listed and you'd like it added, open an issue at",
1759
+ " ",
1760
+ WIZARD_ISSUES_URL,
1761
+ " with details about your build setup."
1762
+ ]
1763
+ })
1764
+ })
1765
+ ]
1766
+ })] });
1767
+ }
1768
+ case "no-posthog-sdk": {
1769
+ const platformLabel = DISPLAY_NAME[error.platform] ?? error.platform;
1770
+ return /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsxs(Text, { children: [
1771
+ "Detected ",
1772
+ platformLabel,
1773
+ " but no PostHog SDK is installed."
1774
+ ] }), /* @__PURE__ */ jsxs(Box, {
1775
+ marginTop: 1,
1776
+ flexDirection: "column",
1777
+ children: [/* @__PURE__ */ jsxs(Text, {
1778
+ dimColor: true,
1779
+ children: [
1780
+ "Source map upload only resolves stack traces from errors the SDK reports. Run ",
1781
+ /* @__PURE__ */ jsx(Text, {
1782
+ bold: true,
1783
+ children: "npx @posthog/wizard"
1784
+ }),
1785
+ " first to install the SDK, then run this command again."
1786
+ ]
1787
+ }), /* @__PURE__ */ jsxs(Box, {
1788
+ marginTop: 1,
1789
+ flexDirection: "column",
1790
+ children: [/* @__PURE__ */ jsxs(Text, {
1791
+ dimColor: true,
1792
+ children: [
1793
+ "Set up source map upload for ",
1794
+ platformLabel,
1795
+ ":"
1796
+ ]
1797
+ }), /* @__PURE__ */ jsxs(Text, {
1798
+ dimColor: true,
1799
+ children: [" ", SOURCE_MAP_DOCS]
1800
+ })]
1801
+ })]
1802
+ })] });
1803
+ }
1804
+ }
1805
+ };
1806
+ //#endregion
1807
+ //#region src/ui/tui/screens/SourceMapsOutroScreen.tsx
1808
+ /**
1809
+ * SourceMapsOutroScreen — post-run summary for the source-maps upload flow.
1810
+ *
1811
+ * Unlike the generic OutroScreen, this spells out the operational facts a user
1812
+ * needs to actually get de-minified stack traces: that packages were installed
1813
+ * and upload credentials written to .env, plus the three gotchas (builds
1814
+ * upload, run the build, mirror the env vars in CI). All static guidance —
1815
+ * driven only by the program's `buildOutroData` (kind / message / report /
1816
+ * docs), no per-run data.
1817
+ */
1818
+ const SourceMapsOutroScreen = ({ store }) => {
1819
+ useSyncExternalStore((cb) => store.subscribe(cb), () => store.getSnapshot());
1820
+ useInput(() => {
1821
+ store.setOutroDismissed();
1822
+ });
1823
+ const outroData = store.session.outroData;
1824
+ if (!outroData) return /* @__PURE__ */ jsx(Box, {
1825
+ flexDirection: "column",
1826
+ flexGrow: 1,
1827
+ children: /* @__PURE__ */ jsx(Text, {
1828
+ dimColor: true,
1829
+ children: "Finishing up..."
1830
+ })
1831
+ });
1832
+ return /* @__PURE__ */ jsxs(Box, {
1833
+ flexDirection: "column",
1834
+ flexGrow: 1,
1835
+ children: [
1836
+ outroData.kind === "success" && /* @__PURE__ */ jsxs(Box, {
1837
+ flexDirection: "column",
1838
+ children: [
1839
+ /* @__PURE__ */ jsxs(Text, {
1840
+ color: Colors.success,
1841
+ bold: true,
1842
+ children: ["✔ ", outroData.message || "Source maps wired up!"]
1843
+ }),
1844
+ /* @__PURE__ */ jsxs(Section, {
1845
+ title: "What the wizard did",
1846
+ children: [/* @__PURE__ */ jsx(Text, { children: "• Installed the packages needed for source map upload." }), /* @__PURE__ */ jsxs(Text, { children: [
1847
+ "• Wrote the PostHog upload credentials to your",
1848
+ " ",
1849
+ /* @__PURE__ */ jsx(Text, {
1850
+ bold: true,
1851
+ children: ".env"
1852
+ }),
1853
+ " file."
1854
+ ] })]
1855
+ }),
1856
+ /* @__PURE__ */ jsxs(Section, {
1857
+ title: "How uploads work now",
1858
+ children: [
1859
+ /* @__PURE__ */ jsxs(Text, { children: [
1860
+ "• Every ",
1861
+ /* @__PURE__ */ jsx(Text, {
1862
+ bold: true,
1863
+ children: "build"
1864
+ }),
1865
+ " now uploads source maps to PostHog automatically — no extra command to remember."
1866
+ ] }),
1867
+ /* @__PURE__ */ jsxs(Text, { children: [
1868
+ "• Run your app from the ",
1869
+ /* @__PURE__ */ jsx(Text, {
1870
+ bold: true,
1871
+ children: "built output"
1872
+ }),
1873
+ ". Source maps only resolve for errors thrown by the build that was uploaded."
1874
+ ] }),
1875
+ /* @__PURE__ */ jsxs(Text, { children: [
1876
+ "• In ",
1877
+ /* @__PURE__ */ jsx(Text, {
1878
+ bold: true,
1879
+ children: "CI"
1880
+ }),
1881
+ ", make sure the build job exposes the same env vars the wizard added to your ",
1882
+ /* @__PURE__ */ jsx(Text, {
1883
+ bold: true,
1884
+ children: ".env"
1885
+ }),
1886
+ "."
1887
+ ] })
1888
+ ]
1889
+ }),
1890
+ outroData.reportFile && /* @__PURE__ */ jsx(Box, {
1891
+ marginTop: 1,
1892
+ children: /* @__PURE__ */ jsxs(Text, { children: [
1893
+ "Details in",
1894
+ " ",
1895
+ /* @__PURE__ */ jsx(Text, {
1896
+ bold: true,
1897
+ children: join(store.session.installDir, outroData.reportFile)
1898
+ })
1899
+ ] })
1900
+ }),
1901
+ outroData.docsUrl && /* @__PURE__ */ jsx(Box, {
1902
+ marginTop: 1,
1903
+ children: /* @__PURE__ */ jsxs(Text, { children: [
1904
+ "Learn more:",
1905
+ " ",
1906
+ /* @__PURE__ */ jsx(Text, {
1907
+ color: Colors.primary,
1908
+ children: outroData.docsUrl
1909
+ })
1910
+ ] })
1911
+ }),
1912
+ /* @__PURE__ */ jsx(Box, {
1913
+ marginTop: 1,
1914
+ children: /* @__PURE__ */ jsx(Text, {
1915
+ dimColor: true,
1916
+ children: "Note: This wizard uses an LLM agent to analyze and modify your project. Please review the changes made."
1917
+ })
1918
+ }),
1919
+ /* @__PURE__ */ jsx(Text, {
1920
+ dimColor: true,
1921
+ children: "How did this work for you? Drop us a line: wizard@posthog.com"
1922
+ })
1923
+ ]
1924
+ }),
1925
+ outroData.kind === "error" && /* @__PURE__ */ jsxs(Box, {
1926
+ flexDirection: "column",
1927
+ children: [
1928
+ /* @__PURE__ */ jsxs(Text, {
1929
+ color: Colors.error,
1930
+ bold: true,
1931
+ children: ["✘ ", outroData.message || "An error occurred"]
1932
+ }),
1933
+ outroData.body && /* @__PURE__ */ jsx(Box, {
1934
+ marginTop: 1,
1935
+ children: /* @__PURE__ */ jsx(Text, {
1936
+ dimColor: true,
1937
+ children: outroData.body
1938
+ })
1939
+ }),
1940
+ outroData.docsUrl && /* @__PURE__ */ jsx(Box, {
1941
+ marginTop: 1,
1942
+ children: /* @__PURE__ */ jsxs(Text, { children: ["Docs: ", /* @__PURE__ */ jsx(Text, {
1943
+ color: Colors.primary,
1944
+ children: outroData.docsUrl
1945
+ })] })
1946
+ })
1947
+ ]
1948
+ }),
1949
+ outroData.kind === "cancel" && /* @__PURE__ */ jsxs(Text, {
1950
+ color: "yellow",
1951
+ children: ["■ ", outroData.message || "Cancelled"]
1952
+ }),
1953
+ /* @__PURE__ */ jsx(Box, {
1954
+ marginTop: 1,
1955
+ children: /* @__PURE__ */ jsx(Text, {
1956
+ color: Colors.muted,
1957
+ children: "Press any key to continue"
1958
+ })
1959
+ })
1960
+ ]
1961
+ });
1962
+ };
1963
+ const Section = ({ title, children }) => /* @__PURE__ */ jsxs(Box, {
1964
+ flexDirection: "column",
1965
+ marginTop: 1,
1966
+ children: [/* @__PURE__ */ jsxs(Text, {
1967
+ color: Colors.primary,
1968
+ bold: true,
1969
+ children: [title, ":"]
1970
+ }), children]
1971
+ });
1972
+ //#endregion
1448
1973
  //#region src/ui/tui/screens/AgentSkillIntroScreen.tsx
1449
1974
  /**
1450
1975
  * AgentSkillIntroScreen — Default intro for generic agent-skill programs.
@@ -3193,6 +3718,12 @@ const SetupScreen = ({ store }) => {
3193
3718
  const AuthScreen = ({ store }) => {
3194
3719
  useSyncExternalStore((cb) => store.subscribe(cb), () => store.getSnapshot());
3195
3720
  const { session } = store;
3721
+ useKeyBindings("auth", Boolean(session.loginUrl) ? [{
3722
+ match: ["p", "P"],
3723
+ label: "P",
3724
+ action: "paste auth code",
3725
+ handler: () => store.showManualAuthCode()
3726
+ }] : []);
3196
3727
  const config = session.frameworkConfig;
3197
3728
  const frameworkLabel = session.detectedFrameworkLabel ?? config?.metadata.name;
3198
3729
  return /* @__PURE__ */ jsxs(Box, {
@@ -3229,13 +3760,32 @@ const AuthScreen = ({ store }) => {
3229
3760
  /* @__PURE__ */ jsx(LoadingBox, { message: "Waiting for authentication..." }),
3230
3761
  session.loginUrl && /* @__PURE__ */ jsxs(Box, {
3231
3762
  marginTop: 1,
3763
+ marginBottom: 1,
3232
3764
  flexDirection: "column",
3233
- children: [/* @__PURE__ */ jsx(Text, {
3234
- dimColor: true,
3235
- children: "If the browser didn't open, copy and paste this URL:"
3236
- }), /* @__PURE__ */ jsx(Text, {
3237
- color: "cyan",
3238
- children: session.loginUrl
3765
+ children: [/* @__PURE__ */ jsxs(Text, { children: [
3766
+ /* @__PURE__ */ jsx(Text, {
3767
+ dimColor: true,
3768
+ children: "If the browser didn't open, copy and paste this URL:"
3769
+ }),
3770
+ "\n\n",
3771
+ /* @__PURE__ */ jsx(Text, {
3772
+ color: "cyan",
3773
+ children: session.loginUrl
3774
+ })
3775
+ ] }), /* @__PURE__ */ jsx(Box, {
3776
+ marginTop: 1,
3777
+ children: /* @__PURE__ */ jsxs(Text, {
3778
+ dimColor: true,
3779
+ children: [
3780
+ "On a remote machine or devbox? Press",
3781
+ " ",
3782
+ /* @__PURE__ */ jsx(Text, {
3783
+ color: Colors.accent,
3784
+ children: "[P]"
3785
+ }),
3786
+ " to paste the callback URL."
3787
+ ]
3788
+ })
3239
3789
  })]
3240
3790
  })
3241
3791
  ]
@@ -3935,10 +4485,13 @@ function createScreens(store, services) {
3935
4485
  ["settings-override"]: /* @__PURE__ */ jsx(SettingsOverrideScreen, { store }),
3936
4486
  ["managed-settings"]: /* @__PURE__ */ jsx(ManagedSettingsScreen, { store }),
3937
4487
  ["port-conflict"]: /* @__PURE__ */ jsx(PortConflictScreen, { store }),
4488
+ ["manual-auth-code"]: /* @__PURE__ */ jsx(ManualAuthCodeScreen, { store }),
3938
4489
  ["auth-error"]: /* @__PURE__ */ jsx(AuthErrorScreen, { store }),
3939
4490
  ["wizard-ask"]: /* @__PURE__ */ jsx(WizardAskScreen, { store }),
3940
4491
  ["intro"]: /* @__PURE__ */ jsx(PostHogIntegrationIntroScreen, { store }),
3941
4492
  ["revenue-intro"]: /* @__PURE__ */ jsx(RevenueIntroScreen, { store }),
4493
+ ["source-maps-intro"]: /* @__PURE__ */ jsx(SourceMapsIntroScreen, { store }),
4494
+ ["source-maps-outro"]: /* @__PURE__ */ jsx(SourceMapsOutroScreen, { store }),
3942
4495
  ["migration-intro"]: /* @__PURE__ */ jsx(MigrationIntroScreen, { store }),
3943
4496
  ["agent-skill-intro"]: /* @__PURE__ */ jsx(AgentSkillIntroScreen, { store }),
3944
4497
  ["audit-intro"]: /* @__PURE__ */ jsx(AuditIntroScreen, { store }),
@@ -4034,4 +4587,4 @@ function startTUI(version, program = Program.PostHogIntegration) {
4034
4587
  //#endregion
4035
4588
  export { startTUI };
4036
4589
 
4037
- //# sourceMappingURL=start-tui-Cz7RZSn_.js.map
4590
+ //# sourceMappingURL=start-tui-Bl8fCbp_.js.map