@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.
Files changed (118) hide show
  1. package/dist/{add-mcp-server-to-clients-BiZmRLE6.js → add-mcp-server-to-clients-CNzZMSat.js} +5 -5
  2. package/dist/{add-mcp-server-to-clients-BiZmRLE6.js.map → add-mcp-server-to-clients-CNzZMSat.js.map} +1 -1
  3. package/dist/{agent-interface-CUaNjvqq.js → agent-interface-CF7GsdFf.js} +298 -158
  4. package/dist/agent-interface-CF7GsdFf.js.map +1 -0
  5. package/dist/{agent-runner-BuH7W62W.js → agent-runner-B0LTVFfw.js} +130 -598
  6. package/dist/agent-runner-B0LTVFfw.js.map +1 -0
  7. package/dist/{analytics-C_9Kh6J1.js → analytics-DQEuL6qS.js} +2 -2
  8. package/dist/{analytics-C_9Kh6J1.js.map → analytics-DQEuL6qS.js.map} +1 -1
  9. package/dist/analytics-YD3D38z2.js +2 -0
  10. package/dist/{api-Kgk7BFqo.js → api-uCMvDII5.js} +3 -3
  11. package/dist/{api-Kgk7BFqo.js.map → api-uCMvDII5.js.map} +1 -1
  12. package/dist/bin.js +69 -116
  13. package/dist/bin.js.map +1 -1
  14. package/dist/{ci-install-DoARcA-j.js → ci-install-Bow8-f0j.js} +4 -4
  15. package/dist/{ci-install-DoARcA-j.js.map → ci-install-Bow8-f0j.js.map} +1 -1
  16. package/dist/commandments-CyB7Icr1.js +42 -0
  17. package/dist/commandments-CyB7Icr1.js.map +1 -0
  18. package/dist/commandments-DguPfCX8.js +2 -0
  19. package/dist/{debug-CI0PLD6X.js → debug-BixHZmHv.js} +1 -1
  20. package/dist/{debug-DNEQR5DL.js → debug-DBmxx59Q.js} +42 -21
  21. package/dist/debug-DBmxx59Q.js.map +1 -0
  22. package/dist/{defaults-CeNThA-1.js → defaults-8zjNjGGi.js} +2 -2
  23. package/dist/defaults-8zjNjGGi.js.map +1 -0
  24. package/dist/{env-api-key-cjD4yfGT.js → env-api-key-AcC_tz8G.js} +1 -1
  25. package/dist/{env-api-key-cjD4yfGT.js.map → env-api-key-AcC_tz8G.js.map} +1 -1
  26. package/dist/{environment-D44UP2Nu.js → environment-kZtkp7eG.js} +3 -3
  27. package/dist/{environment-D44UP2Nu.js.map → environment-kZtkp7eG.js.map} +1 -1
  28. package/dist/{file-utils-C2PNKLhr.js → file-utils-BAhYy5vC.js} +2 -2
  29. package/dist/{file-utils-C2PNKLhr.js.map → file-utils-BAhYy5vC.js.map} +1 -1
  30. package/dist/file-watcher-BL-IRbR7.js +123 -0
  31. package/dist/file-watcher-BL-IRbR7.js.map +1 -0
  32. package/dist/{headless-ui-C3C0wWUi.js → headless-ui-DWmMyhaP.js} +5 -4
  33. package/dist/headless-ui-DWmMyhaP.js.map +1 -0
  34. package/dist/{interactive-k4xQiftO.js → interactive-Cyic0bGL.js} +2 -2
  35. package/dist/{interactive-k4xQiftO.js.map → interactive-Cyic0bGL.js.map} +1 -1
  36. package/dist/{mcp-CJn_ryMN.js → mcp-BSGmEWjt.js} +3 -3
  37. package/dist/mcp-BSGmEWjt.js.map +1 -0
  38. package/dist/{mcp-prompt-streaming-BB5nO--L.js → mcp-prompt-streaming-C227vG1X.js} +3 -3
  39. package/dist/{mcp-prompt-streaming-BB5nO--L.js.map → mcp-prompt-streaming-C227vG1X.js.map} +1 -1
  40. package/dist/{non-interactive-0x0Due8h.js → non-interactive-DQA9vn9f.js} +2 -2
  41. package/dist/{non-interactive-0x0Due8h.js.map → non-interactive-DQA9vn9f.js.map} +1 -1
  42. package/dist/orchestrator-tools-NuWONNkF.js +99 -0
  43. package/dist/orchestrator-tools-NuWONNkF.js.map +1 -0
  44. package/dist/{package-json-CDs1ZVKu.js → package-json-DCuoye-H.js} +1 -1
  45. package/dist/{package-json-CDs1ZVKu.js.map → package-json-DCuoye-H.js.map} +1 -1
  46. package/dist/{package-manager-CBRR4_i4.js → package-manager-DKtR3xzM.js} +2 -2
  47. package/dist/{package-manager-CBRR4_i4.js.map → package-manager-DKtR3xzM.js.map} +1 -1
  48. package/dist/pi-DJCln9jJ.js +603 -0
  49. package/dist/pi-DJCln9jJ.js.map +1 -0
  50. package/dist/{playground-CK617U6k.js → playground-CbEndzc8.js} +7 -8
  51. package/dist/{playground-CK617U6k.js.map → playground-CbEndzc8.js.map} +1 -1
  52. package/dist/{posthog-DwKlq0HM.js → posthog-DFyux4Vw.js} +1 -1
  53. package/dist/{posthog-DwKlq0HM.js.map → posthog-DFyux4Vw.js.map} +1 -1
  54. package/dist/{posthog-integration-qRjKkLcu.js → posthog-integration-dmWJZ8mj.js} +132 -27
  55. package/dist/posthog-integration-dmWJZ8mj.js.map +1 -0
  56. package/dist/{provisioning-BMXR8fS1.js → provisioning-CcxCry5p.js} +21 -14
  57. package/dist/provisioning-CcxCry5p.js.map +1 -0
  58. package/dist/queue-tools-Bw-AANLM.js +366 -0
  59. package/dist/queue-tools-Bw-AANLM.js.map +1 -0
  60. package/dist/{registry-CsUUdVCd.js → registry-D2V88NoC.js} +96 -18
  61. package/dist/registry-D2V88NoC.js.map +1 -0
  62. package/dist/{security-CIP3lpp6.js → security-DOtBCBvx.js} +4 -4
  63. package/dist/{security-CIP3lpp6.js.map → security-DOtBCBvx.js.map} +1 -1
  64. package/dist/{setup-utils-DkyEOBDx.js → setup-utils-Qp-u6BZk.js} +7 -7
  65. package/dist/{setup-utils-DkyEOBDx.js.map → setup-utils-Qp-u6BZk.js.map} +1 -1
  66. package/dist/{start-tui-CJlIgYjf.js → start-tui-DHa_9aiB.js} +429 -234
  67. package/dist/start-tui-DHa_9aiB.js.map +1 -0
  68. package/dist/{steps-CuNjxYsA.js → steps-D07HUQyE.js} +7 -7
  69. package/dist/{steps-CuNjxYsA.js.map → steps-D07HUQyE.js.map} +1 -1
  70. package/dist/{store-UKAJftq6.js → store-DSwsITKX.js} +30 -9
  71. package/dist/store-DSwsITKX.js.map +1 -0
  72. package/dist/{subagent-_syej145.js → subagent-Dk4K5MDa.js} +2 -2
  73. package/dist/{subagent-_syej145.js.map → subagent-Dk4K5MDa.js.map} +1 -1
  74. package/dist/task-CQnV9Qd2.js +305 -0
  75. package/dist/task-CQnV9Qd2.js.map +1 -0
  76. package/dist/{task-stream-Ne-9ZOnf.js → task-stream-B7qia9eW.js} +72 -7
  77. package/dist/task-stream-B7qia9eW.js.map +1 -0
  78. package/dist/{tasks-CUvCA1OY.js → tasks-C7BQp659.js} +2 -2
  79. package/dist/{tasks-CUvCA1OY.js.map → tasks-C7BQp659.js.map} +1 -1
  80. package/dist/{telemetry-DFYgJHH-.js → telemetry-DgahJGSx.js} +3 -3
  81. package/dist/{telemetry-DFYgJHH-.js.map → telemetry-DgahJGSx.js.map} +1 -1
  82. package/dist/{terminal-DLFgIxhg.js → terminal-Bb6tZkf-.js} +14 -14
  83. package/dist/terminal-Bb6tZkf-.js.map +1 -0
  84. package/dist/{tools-CNyhLqlK.js → tools-BJEvSUWN.js} +4 -4
  85. package/dist/{tools-CNyhLqlK.js.map → tools-BJEvSUWN.js.map} +1 -1
  86. package/dist/{types-y3HkjtSq.js → types-BRe_EzTW.js} +1 -1
  87. package/dist/{types-y3HkjtSq.js.map → types-BRe_EzTW.js.map} +1 -1
  88. package/dist/{wizard-abort-BM3pISoR.js → wizard-abort-BxtdkgI-.js} +4 -4
  89. package/dist/{wizard-abort-BM3pISoR.js.map → wizard-abort-BxtdkgI-.js.map} +1 -1
  90. package/dist/{wizard-abort-DCv08-op.js → wizard-abort-DpDmuCfA.js} +1 -1
  91. package/dist/{wizard-session-DXivb7kv.js → wizard-session-DWHe83uk.js} +1 -1
  92. package/dist/{wizard-session-BudcixsA.js → wizard-session-tp4Zdbwl.js} +3 -3
  93. package/dist/wizard-session-tp4Zdbwl.js.map +1 -0
  94. package/dist/{wizard-tools-BcuRxp1A.js → wizard-tools-Dg8o2lcH.js} +64 -387
  95. package/dist/wizard-tools-Dg8o2lcH.js.map +1 -0
  96. package/dist/yara-hooks-CncaWRuC.js +2 -0
  97. package/dist/{yara-hooks-GIs-R_g1.js → yara-hooks-pw86rZ8y.js} +4 -4
  98. package/dist/{yara-hooks-GIs-R_g1.js.map → yara-hooks-pw86rZ8y.js.map} +1 -1
  99. package/package.json +1 -1
  100. package/dist/agent-interface-CUaNjvqq.js.map +0 -1
  101. package/dist/agent-runner-BuH7W62W.js.map +0 -1
  102. package/dist/analytics-o-WJHD8Z.js +0 -2
  103. package/dist/debug-DNEQR5DL.js.map +0 -1
  104. package/dist/defaults-CeNThA-1.js.map +0 -1
  105. package/dist/headless-ui-C3C0wWUi.js.map +0 -1
  106. package/dist/mcp-CJn_ryMN.js.map +0 -1
  107. package/dist/posthog-integration-qRjKkLcu.js.map +0 -1
  108. package/dist/provisioning-BMXR8fS1.js.map +0 -1
  109. package/dist/registry-CsUUdVCd.js.map +0 -1
  110. package/dist/start-tui-CJlIgYjf.js.map +0 -1
  111. package/dist/store-UKAJftq6.js.map +0 -1
  112. package/dist/task-stream-Ne-9ZOnf.js.map +0 -1
  113. package/dist/terminal-DLFgIxhg.js.map +0 -1
  114. package/dist/wizard-session-BudcixsA.js.map +0 -1
  115. package/dist/wizard-tools-BcuRxp1A.js.map +0 -1
  116. package/dist/wizard-ui-WZ48rUgr.js +0 -15
  117. package/dist/wizard-ui-WZ48rUgr.js.map +0 -1
  118. package/dist/yara-hooks-DKbfESYf.js +0 -2
@@ -1,21 +1,20 @@
1
- import { G as POSTHOG_ORG_AI_SETTINGS_URL, K as POSTHOG_PRIVACY_URL, L as Integration, Q as REMOTE_SKILLS_BASE_URL, R as OAUTH_PORTS, U as POSTHOG_DOCS_URL, X as POSTHOG_TERMS_URL, d as relativeToInstallDir, g as SIGNUP_WIZARD_READINESS_CONFIG, l as WIZARD_LOG_FILE, lt as WIZARD_TOOLS_MENU_FLAG_KEY, p as setUI, s as logToFile, v as getBlockingServiceKeys, z as OAUTH_TIMEOUT_MS } from "./debug-DNEQR5DL.js";
2
- import { n as analytics } from "./analytics-C_9Kh6J1.js";
3
- import { o as extractOAuthCode, t as getOrAskForProjectData } from "./setup-utils-DkyEOBDx.js";
4
- import { t as ApiError } from "./api-Kgk7BFqo.js";
5
- import { t as ADDITIONAL_FEATURE_LABELS } from "./wizard-session-BudcixsA.js";
6
- import { i as wizardAbort } from "./wizard-abort-BM3pISoR.js";
7
- import { a as formatTokenCount, i as formatCostUsd } from "./agent-runner-BuH7W62W.js";
8
- import { i as fetchSkillMenu, r as downloadSkill } from "./wizard-tools-BcuRxp1A.js";
9
- import { a as coerceAuditChecks, i as AUDIT_SEVERITY_STYLE, n as AUDIT_CHECKS_KEY, o as getAuditChecks, t as AUDIT_CHECKS_FILE } from "./types-y3HkjtSq.js";
10
- import { m as EVENT_PLAN_FILE } from "./yara-hooks-GIs-R_g1.js";
11
- import { t as FRAMEWORK_REGISTRY } from "./registry-CsUUdVCd.js";
12
- import { g as detectProjectsWithAgent, m as Icons, p as Colors, t as SETUP_REPORT_FILE } from "./posthog-integration-qRjKkLcu.js";
1
+ import { B as Integration, H as OAUTH_TIMEOUT_MS, K as POSTHOG_DOCS_URL, V as OAUTH_PORTS, X as POSTHOG_PRIVACY_URL, Y as POSTHOG_ORG_AI_SETTINGS_URL, d as relativeToInstallDir, et as POSTHOG_TERMS_URL, g as SIGNUP_WIZARD_READINESS_CONFIG, l as WIZARD_LOG_FILE, mt as WIZARD_TOOLS_MENU_FLAG_KEY, nt as REMOTE_SKILLS_BASE_URL, p as setUI, s as logToFile, v as getBlockingServiceKeys } from "./debug-DBmxx59Q.js";
2
+ import { n as analytics } from "./analytics-DQEuL6qS.js";
3
+ import { o as extractOAuthCode, t as getOrAskForProjectData } from "./setup-utils-Qp-u6BZk.js";
4
+ import { t as ApiError } from "./api-uCMvDII5.js";
5
+ import { t as ADDITIONAL_FEATURE_LABELS } from "./wizard-session-tp4Zdbwl.js";
6
+ import { i as wizardAbort } from "./wizard-abort-BxtdkgI-.js";
7
+ import { a as formatTokenCount, i as formatCostUsd } from "./agent-runner-B0LTVFfw.js";
8
+ import { a as coerceAuditChecks, i as AUDIT_SEVERITY_STYLE, n as AUDIT_CHECKS_KEY, o as getAuditChecks, t as AUDIT_CHECKS_FILE } from "./types-BRe_EzTW.js";
9
+ import { i as fetchSkillMenu, r as downloadSkill } from "./wizard-tools-Dg8o2lcH.js";
10
+ import { t as FRAMEWORK_REGISTRY } from "./registry-D2V88NoC.js";
11
+ import { _ as detectProjectsWithAgent, m as Icons, p as Colors, t as SETUP_REPORT_FILE } from "./posthog-integration-dmWJZ8mj.js";
13
12
  import { C as STRIPE_SDKS, S as POSTHOG_SDKS, _ as SOURCE_MAPS_CONTEXT_KEYS, b as getDetectedWarehouseSources, d as Program, f as getProgramConfig, g as DISPLAY_NAME, h as AUTOMATABLE_VARIANTS, m as SELF_DRIVING_INTEGRATE_PATH_KEY, n as useKeyBindings, p as detectSelfDrivingIntegrationProjects, t as PickerMenu, x as getContentBlocks, y as fetchHealthIssues } from "./bin.js";
14
- import { r as totalTokenCount, t as WizardStore } from "./store-UKAJftq6.js";
15
- import { A as ConfirmationInput, C as TabContainer, D as LinkText, E as LogViewer, F as SplitView, M as useStdoutDimensions, N as ProgressList, O as extractUrls, P as LoadingBox, S as HNViewer, T as EventPlanViewer, _ as SEVERITY_ORDER, a as useSkillEntry, b as LearnCard, c as SlackConnectScreen, d as AuditChecksViewer, f as McpSuggestedPromptsScreen, g as SEVERITY_LABEL, h as IssueTable, i as SkillSourceInfo, k as ModalOverlay, l as AUDIT_AREA_SLIDES, m as McpScreen, n as releaseTerminal, o as OutroScreen, r as AiOptInRequiredScreen, s as useDismissOnAnyKey, t as enterDarkTerminal, u as VisualBox, v as ServiceHealthList, w as ScreenContainer, y as TipsCard } from "./terminal-DLFgIxhg.js";
16
- import { t as ALL_FEATURE_VALUES } from "./defaults-CeNThA-1.js";
17
- 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-BiZmRLE6.js";
18
- import * as fs$1 from "fs";
13
+ import { r as totalTokenCount, t as WizardStore } from "./store-DSwsITKX.js";
14
+ import { A as ConfirmationInput, C as TabContainer, D as LinkText, E as LogViewer, F as SplitView, M as useStdoutDimensions, N as ProgressList, O as extractUrls, P as LoadingBox, S as HNViewer, T as EventPlanViewer, _ as SEVERITY_ORDER, a as useSkillEntry, b as LearnCard, c as SlackConnectScreen, d as AuditChecksViewer, f as McpSuggestedPromptsScreen, g as SEVERITY_LABEL, h as IssueTable, i as SkillSourceInfo, k as ModalOverlay, l as AUDIT_AREA_SLIDES, m as McpScreen, n as releaseTerminal, o as OutroScreen, r as AiOptInRequiredScreen, s as useDismissOnAnyKey, t as enterDarkTerminal, u as VisualBox, v as ServiceHealthList, w as ScreenContainer, y as TipsCard } from "./terminal-Bb6tZkf-.js";
15
+ import { t as ALL_FEATURE_VALUES } from "./defaults-8zjNjGGi.js";
16
+ import { t as startFileWatcher } from "./file-watcher-BL-IRbR7.js";
17
+ 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-CNzZMSat.js";
19
18
  import path from "path";
20
19
  import { join as join$1 } from "node:path";
21
20
  import { spawn, spawnSync } from "node:child_process";
@@ -1082,7 +1081,7 @@ const FrameworkPicker = ({ store, onComplete }) => {
1082
1081
  })),
1083
1082
  onSelect: (value) => {
1084
1083
  const integration = Array.isArray(value) ? value[0] : value;
1085
- import("./registry-CsUUdVCd.js").then((n) => n.n).then(({ FRAMEWORK_REGISTRY }) => {
1084
+ import("./registry-D2V88NoC.js").then((n) => n.n).then(({ FRAMEWORK_REGISTRY }) => {
1086
1085
  const config = FRAMEWORK_REGISTRY[integration];
1087
1086
  store.setFrameworkConfig(integration, config);
1088
1087
  store.setDetectedFramework(config.metadata.name);
@@ -2592,13 +2591,202 @@ const DetectErrorBody = ({ error }) => {
2592
2591
  //#region src/ui/tui/screens/SelfDrivingIntegrationCheckScreen.tsx
2593
2592
  /**
2594
2593
  * SelfDrivingIntegrationCheckScreen — shown only when detection found no
2595
- * PostHog in the project. It's a notice, not a question: Self-driving requires
2596
- * a PostHog SDK, so the single action sets `integrate = true` and the run
2597
- * integrates first. Skipped entirely when PostHog is already present (or under
2598
- * `--integrate`).
2594
+ * PostHog in the project. Self-driving needs a PostHog SDK, so we always
2595
+ * integrate first; but a project with no SDK is often a project with no PostHog
2596
+ * account either, so this screen first asks whether the user already has one:
2597
+ *
2598
+ * - "Yes — log me in" → setIntegrate(true); auth runs the OAuth login.
2599
+ * - "No — create one for me" → collect email + region, then
2600
+ * chooseProvisionAccount(): auth provisions a new
2601
+ * account (and emails a login link) instead.
2602
+ *
2603
+ * Both answers integrate the SDK; they only differ in how auth gets credentials.
2604
+ * Skipped entirely when PostHog is already present (or under `--integrate`,
2605
+ * which forces integration + the default OAuth login).
2599
2606
  */
2607
+ const EMAIL_RE = /^[^@\s]+@[^@\s]+\.[^@\s]+$/;
2600
2608
  const SelfDrivingIntegrationCheckScreen = ({ store }) => {
2601
2609
  useSyncExternalStore((cb) => store.subscribe(cb), () => store.getSnapshot());
2610
+ const [stage, setStage] = useState("ask");
2611
+ const [email, setEmail] = useState(store.session.email ?? "");
2612
+ const [emailError, setEmailError] = useState(null);
2613
+ const [showPrivacy, setShowPrivacy] = useState(false);
2614
+ useInput((input, key) => {
2615
+ if (showPrivacy) {
2616
+ if (key.escape) setShowPrivacy(false);
2617
+ return;
2618
+ }
2619
+ if ((input === "i" || input === "I") && stage !== "email") {
2620
+ setShowPrivacy(true);
2621
+ return;
2622
+ }
2623
+ if (key.escape && stage !== "ask") {
2624
+ setEmailError(null);
2625
+ setStage(stage === "region" ? "email" : "ask");
2626
+ }
2627
+ });
2628
+ if (showPrivacy) return /* @__PURE__ */ jsx(IntroScreenLayout, {
2629
+ installDir: store.session.installDir,
2630
+ title: "Wizard privacy & usage",
2631
+ showSubtitle: false,
2632
+ showDetection: false,
2633
+ body: /* @__PURE__ */ jsx(PrivacyPanel, {}),
2634
+ menuOptions: [{
2635
+ label: "Back",
2636
+ value: "back"
2637
+ }],
2638
+ menuAlign: "left",
2639
+ onSelect: () => setShowPrivacy(false)
2640
+ });
2641
+ if (stage === "region") return /* @__PURE__ */ jsxs(Box, {
2642
+ flexDirection: "column",
2643
+ flexGrow: 1,
2644
+ children: [
2645
+ /* @__PURE__ */ jsx(Text, {
2646
+ bold: true,
2647
+ color: Colors.accent,
2648
+ children: "Where should we create your account?"
2649
+ }),
2650
+ /* @__PURE__ */ jsx(Box, {
2651
+ marginTop: 1,
2652
+ flexDirection: "column",
2653
+ children: /* @__PURE__ */ jsxs(Text, {
2654
+ dimColor: true,
2655
+ children: [
2656
+ "We'll create your PostHog account for ",
2657
+ email,
2658
+ " in this region."
2659
+ ]
2660
+ })
2661
+ }),
2662
+ /* @__PURE__ */ jsx(Box, {
2663
+ marginTop: 1,
2664
+ children: /* @__PURE__ */ jsx(PickerMenu, {
2665
+ message: "Pick your cloud region",
2666
+ options: [{
2667
+ label: "US",
2668
+ value: "us",
2669
+ hint: "us.posthog.com"
2670
+ }, {
2671
+ label: "EU",
2672
+ value: "eu",
2673
+ hint: "eu.posthog.com"
2674
+ }],
2675
+ onSelect: (value) => {
2676
+ const region = Array.isArray(value) ? value[0] : value;
2677
+ store.chooseProvisionAccount(email.trim(), region);
2678
+ }
2679
+ })
2680
+ }),
2681
+ /* @__PURE__ */ jsxs(Box, {
2682
+ marginTop: 1,
2683
+ flexDirection: "column",
2684
+ children: [
2685
+ /* @__PURE__ */ jsx(Text, {
2686
+ dimColor: true,
2687
+ children: "By creating an account you agree to our terms."
2688
+ }),
2689
+ /* @__PURE__ */ jsxs(Text, {
2690
+ dimColor: true,
2691
+ children: ["Terms: ", /* @__PURE__ */ jsx(Text, {
2692
+ color: "cyan",
2693
+ children: POSTHOG_TERMS_URL
2694
+ })]
2695
+ }),
2696
+ /* @__PURE__ */ jsxs(Text, {
2697
+ dimColor: true,
2698
+ children: ["Privacy: ", /* @__PURE__ */ jsx(Text, {
2699
+ color: "cyan",
2700
+ children: POSTHOG_PRIVACY_URL
2701
+ })]
2702
+ })
2703
+ ]
2704
+ }),
2705
+ /* @__PURE__ */ jsx(Box, {
2706
+ marginTop: 1,
2707
+ children: /* @__PURE__ */ jsxs(Text, {
2708
+ dimColor: true,
2709
+ children: [
2710
+ /* @__PURE__ */ jsx(Text, {
2711
+ color: Colors.accent,
2712
+ children: "[Esc]"
2713
+ }),
2714
+ " back",
2715
+ " · ",
2716
+ /* @__PURE__ */ jsx(Text, {
2717
+ color: Colors.accent,
2718
+ children: "[I]"
2719
+ }),
2720
+ " privacy & usage"
2721
+ ]
2722
+ })
2723
+ })
2724
+ ]
2725
+ });
2726
+ if (stage === "email") return /* @__PURE__ */ jsxs(Box, {
2727
+ flexDirection: "column",
2728
+ flexGrow: 1,
2729
+ children: [
2730
+ /* @__PURE__ */ jsx(Text, {
2731
+ bold: true,
2732
+ color: Colors.accent,
2733
+ children: "Create your PostHog account"
2734
+ }),
2735
+ /* @__PURE__ */ jsx(Box, {
2736
+ marginTop: 1,
2737
+ flexDirection: "column",
2738
+ children: /* @__PURE__ */ jsx(Text, {
2739
+ dimColor: true,
2740
+ children: "We'll create your account and email you a login link. What email should we use?"
2741
+ })
2742
+ }),
2743
+ /* @__PURE__ */ jsx(Box, {
2744
+ marginTop: 1,
2745
+ width: "100%",
2746
+ children: /* @__PURE__ */ jsx(TextInput, {
2747
+ placeholder: "you@company.com",
2748
+ defaultValue: email,
2749
+ onChange: setEmail,
2750
+ onSubmit: (value) => {
2751
+ const trimmed = value.trim();
2752
+ if (!EMAIL_RE.test(trimmed)) {
2753
+ setEmailError("Please enter a valid email address.");
2754
+ return;
2755
+ }
2756
+ setEmail(trimmed);
2757
+ setEmailError(null);
2758
+ setStage("region");
2759
+ }
2760
+ })
2761
+ }),
2762
+ emailError && /* @__PURE__ */ jsx(Box, {
2763
+ marginTop: 1,
2764
+ children: /* @__PURE__ */ jsx(Text, {
2765
+ color: "yellow",
2766
+ children: emailError
2767
+ })
2768
+ }),
2769
+ /* @__PURE__ */ jsx(Box, {
2770
+ marginTop: 1,
2771
+ children: /* @__PURE__ */ jsxs(Text, {
2772
+ dimColor: true,
2773
+ children: [
2774
+ /* @__PURE__ */ jsx(Text, {
2775
+ color: Colors.accent,
2776
+ children: "[Enter]"
2777
+ }),
2778
+ " continue",
2779
+ " · ",
2780
+ /* @__PURE__ */ jsx(Text, {
2781
+ color: Colors.accent,
2782
+ children: "[Esc]"
2783
+ }),
2784
+ " back"
2785
+ ]
2786
+ })
2787
+ })
2788
+ ]
2789
+ });
2602
2790
  return /* @__PURE__ */ jsxs(Box, {
2603
2791
  flexDirection: "column",
2604
2792
  flexGrow: 1,
@@ -2613,17 +2801,35 @@ const SelfDrivingIntegrationCheckScreen = ({ store }) => {
2613
2801
  flexDirection: "column",
2614
2802
  children: /* @__PURE__ */ jsx(Text, {
2615
2803
  dimColor: true,
2616
- children: "This will kick off an agent to explore your project and find existing PostHog integrations. Self-driving reads PostHog data, so we'll set that up first: it gives your signal sources something to watch."
2804
+ children: "This will kick off an agent to explore your project and find existing PostHog integrations. Self-driving reads PostHog data, so we'll set that up first: it gives your signal sources something to watch. To do that we need to connect to PostHog — do you already have an account?"
2617
2805
  })
2618
2806
  }),
2619
2807
  /* @__PURE__ */ jsx(Box, {
2620
2808
  marginTop: 1,
2621
2809
  children: /* @__PURE__ */ jsx(PickerMenu, {
2622
2810
  options: [{
2623
- label: "Set up PostHog [Enter]",
2624
- value: "yes"
2811
+ label: "Yes, log me in",
2812
+ value: "login",
2813
+ hint: "opens PostHog to authorize"
2814
+ }, {
2815
+ label: "No, create one for me",
2816
+ value: "provision",
2817
+ hint: "we'll email you a login link"
2625
2818
  }],
2626
- onSelect: () => store.setIntegrate(true)
2819
+ onSelect: (value) => {
2820
+ if ((Array.isArray(value) ? value[0] : value) === "login") store.setIntegrate(true);
2821
+ else setStage("email");
2822
+ }
2823
+ })
2824
+ }),
2825
+ /* @__PURE__ */ jsx(Box, {
2826
+ marginTop: 1,
2827
+ children: /* @__PURE__ */ jsxs(Text, {
2828
+ dimColor: true,
2829
+ children: [/* @__PURE__ */ jsx(Text, {
2830
+ color: Colors.accent,
2831
+ children: "[I]"
2832
+ }), " privacy & usage"]
2627
2833
  })
2628
2834
  })
2629
2835
  ]
@@ -3073,59 +3279,6 @@ const AuditIntroScreen = ({ store }) => {
3073
3279
  };
3074
3280
  //#endregion
3075
3281
  //#region src/ui/tui/hooks/file-watcher.ts
3076
- /**
3077
- * File watcher (UI concern).
3078
- *
3079
- * `fs.watch` alone is unreliable for atomic-rename writes (which is how Claude
3080
- * rewrites JSON files), so the watcher pairs `fs.watch` with a continuous
3081
- * mtime-polled re-read. The poll catches missed events; the watch keeps
3082
- * latency low when it does fire. We dedupe with `mtimeMs` so steady-state
3083
- * polls cost a single `stat`.
3084
- *
3085
- * Screens that need to mirror an agent-emitted JSON file into the store call
3086
- * `useFileWatcher(absolutePath, onUpdate)`; the watcher starts on mount and
3087
- * tears down on unmount.
3088
- */
3089
- const DEFAULT_POLL_INTERVAL_MS = 5e3;
3090
- const DEFAULT_ATTACH_RETRY_INTERVAL_MS = 1e3;
3091
- /** Watch `path` for JSON updates and call `onUpdate(parsed)` whenever the
3092
- * file's mtime changes and the contents are valid JSON. Caller must invoke
3093
- * `handle.stop()` to release the watcher. */
3094
- function startFileWatcher(path, onUpdate, options = {}) {
3095
- const pollIntervalMs = options.pollIntervalMs ?? DEFAULT_POLL_INTERVAL_MS;
3096
- const attachRetryIntervalMs = options.attachRetryIntervalMs ?? DEFAULT_ATTACH_RETRY_INTERVAL_MS;
3097
- const watchers = [];
3098
- const intervals = [];
3099
- let lastMtimeMs = 0;
3100
- const read = (force = false) => {
3101
- try {
3102
- const stat = fs$1.statSync(path);
3103
- if (!force && stat.mtimeMs === lastMtimeMs) return;
3104
- lastMtimeMs = stat.mtimeMs;
3105
- onUpdate(JSON.parse(fs$1.readFileSync(path, "utf-8")));
3106
- } catch {}
3107
- };
3108
- intervals.push(setInterval(() => read(), pollIntervalMs));
3109
- try {
3110
- watchers.push(fs$1.watch(path, () => read(true)));
3111
- read(true);
3112
- } catch {
3113
- const attachInterval = setInterval(() => {
3114
- try {
3115
- fs$1.accessSync(path);
3116
- clearInterval(attachInterval);
3117
- const idx = intervals.indexOf(attachInterval);
3118
- if (idx >= 0) intervals.splice(idx, 1);
3119
- watchers.push(fs$1.watch(path, () => read(true)));
3120
- } catch {}
3121
- }, attachRetryIntervalMs);
3122
- intervals.push(attachInterval);
3123
- }
3124
- return { stop() {
3125
- for (const w of watchers) w.close();
3126
- for (const i of intervals) clearInterval(i);
3127
- } };
3128
- }
3129
3282
  /** React hook wrapping `startFileWatcher`. Starts on mount, stops on unmount
3130
3283
  * or when `path` changes. `onUpdate` and `options` are captured at mount
3131
3284
  * time — change `path` to restart with a new callback. */
@@ -4019,6 +4172,120 @@ const SetupScreen = ({ store }) => {
4019
4172
  });
4020
4173
  };
4021
4174
  //#endregion
4175
+ //#region src/utils/clipboard.ts
4176
+ /**
4177
+ * Best-effort platform shell-outs for making a URL usable in any terminal —
4178
+ * no third-party dependency.
4179
+ *
4180
+ * Two helpers back the `wizard_ask` link overlay, for terminals that can't
4181
+ * linkify a wrapped URL (e.g. macOS Terminal.app, which lacks OSC 8 hyperlink
4182
+ * support):
4183
+ *
4184
+ * - `copyToClipboard` — pipe the URL to the platform clipboard binary so the
4185
+ * user can paste it into a browser.
4186
+ * - `openInBrowser` — hand the URL to the platform opener so it launches
4187
+ * directly, no copy/paste needed.
4188
+ *
4189
+ * Both shell out with `spawn` and never a shell, and pass the URL as an argv
4190
+ * (clipboard via stdin) — so there's no shell-injection surface. Neither throws:
4191
+ * they return false when no command is reachable (CI, headless, or the binary
4192
+ * isn't installed).
4193
+ */
4194
+ /** Platform clipboard commands, in preference order. */
4195
+ function clipboardCommands() {
4196
+ if (process.platform === "darwin") return [{
4197
+ cmd: "pbcopy",
4198
+ args: []
4199
+ }];
4200
+ if (process.platform === "win32") return [{
4201
+ cmd: "clip",
4202
+ args: []
4203
+ }];
4204
+ return [
4205
+ {
4206
+ cmd: "wl-copy",
4207
+ args: []
4208
+ },
4209
+ {
4210
+ cmd: "xclip",
4211
+ args: ["-selection", "clipboard"]
4212
+ },
4213
+ {
4214
+ cmd: "xsel",
4215
+ args: ["--clipboard", "--input"]
4216
+ }
4217
+ ];
4218
+ }
4219
+ function writeWith({ cmd, args }, text) {
4220
+ return new Promise((resolve) => {
4221
+ try {
4222
+ const child = spawn(cmd, args);
4223
+ child.on("error", () => resolve(false));
4224
+ child.stdin.on("error", () => resolve(false));
4225
+ child.on("close", (code) => resolve(code === 0));
4226
+ child.stdin.end(text);
4227
+ } catch {
4228
+ resolve(false);
4229
+ }
4230
+ });
4231
+ }
4232
+ async function copyToClipboard(text) {
4233
+ for (const command of clipboardCommands()) if (await writeWith(command, text)) return true;
4234
+ logToFile("[clipboard] no working clipboard command found");
4235
+ return false;
4236
+ }
4237
+ /**
4238
+ * Platform browser-open commands, in preference order. The URL is one argv
4239
+ * element — never concatenated into a shell string — so a `?kind=…` query or
4240
+ * any other character can't escape into the command line.
4241
+ *
4242
+ * `win32` has no shell-free single binary for this: `start` is a `cmd` builtin,
4243
+ * so we invoke `cmd /c start "" <url>` (the empty `""` is `start`'s window-title
4244
+ * argument, which would otherwise swallow the URL). The URL is still a discrete
4245
+ * argv element, not interpolated into the command string.
4246
+ *
4247
+ * Takes `platform` as an argument (defaulting to the host) so the mapping is a
4248
+ * pure function the tests can exercise across platforms.
4249
+ */
4250
+ function browserOpenCommands(url, platform = process.platform) {
4251
+ if (platform === "darwin") return [{
4252
+ cmd: "open",
4253
+ args: [url]
4254
+ }];
4255
+ if (platform === "win32") return [{
4256
+ cmd: "cmd",
4257
+ args: [
4258
+ "/c",
4259
+ "start",
4260
+ "",
4261
+ url
4262
+ ]
4263
+ }];
4264
+ return [{
4265
+ cmd: "xdg-open",
4266
+ args: [url]
4267
+ }, {
4268
+ cmd: "x-www-browser",
4269
+ args: [url]
4270
+ }];
4271
+ }
4272
+ function spawnOpener({ cmd, args }) {
4273
+ return new Promise((resolve) => {
4274
+ try {
4275
+ const child = spawn(cmd, args, { stdio: "ignore" });
4276
+ child.on("error", () => resolve(false));
4277
+ child.on("close", (code) => resolve(code === 0));
4278
+ } catch {
4279
+ resolve(false);
4280
+ }
4281
+ });
4282
+ }
4283
+ async function openInBrowser(url) {
4284
+ for (const command of browserOpenCommands(url)) if (await spawnOpener(command)) return true;
4285
+ logToFile("[clipboard] no working browser-open command found");
4286
+ return false;
4287
+ }
4288
+ //#endregion
4022
4289
  //#region src/ui/tui/screens/AuthScreen.tsx
4023
4290
  /**
4024
4291
  * AuthScreen — Shown while waiting for OAuth authentication.
@@ -4026,23 +4293,39 @@ const SetupScreen = ({ store }) => {
4026
4293
  * Displays framework detection, a compressed privacy summary, a waiting
4027
4294
  * spinner, and the login URL when available. [I] opens the full
4028
4295
  * PrivacyPanel as an overlay. [P] (when loginUrl is set) lets the user
4029
- * paste the callback URL by hand.
4296
+ * paste the callback URL by hand. [C] copies the login URL to the
4297
+ * clipboard — the exact string, so it can't be chopped by a soft-wrap.
4030
4298
  *
4031
4299
  * The router resolves past this screen once session.credentials is set.
4032
4300
  */
4033
4301
  const AuthScreen = ({ store }) => {
4034
4302
  useSyncExternalStore((cb) => store.subscribe(cb), () => store.getSnapshot());
4035
4303
  const [showPrivacy, setShowPrivacy] = useState(false);
4304
+ const [copyStatus, setCopyStatus] = useState("idle");
4305
+ const [columns] = useStdoutDimensions();
4036
4306
  const { session } = store;
4037
- const canPasteCode = Boolean(session.loginUrl);
4307
+ const loginUrl = session.loginUrl;
4308
+ const canPasteCode = Boolean(loginUrl);
4309
+ const availableWidth = Math.min(columns, 120) - 2;
4310
+ const urlFits = loginUrl ? loginUrl.length <= availableWidth : true;
4038
4311
  const bindings = [];
4039
4312
  if (!showPrivacy) {
4040
- if (canPasteCode) bindings.push({
4041
- match: ["p", "P"],
4042
- label: "P",
4043
- action: "paste auth code",
4044
- handler: () => store.showManualAuthCode()
4045
- });
4313
+ if (canPasteCode && loginUrl) {
4314
+ bindings.push({
4315
+ match: ["p", "P"],
4316
+ label: "P",
4317
+ action: "paste auth code",
4318
+ handler: () => store.showManualAuthCode()
4319
+ });
4320
+ bindings.push({
4321
+ match: ["c", "C"],
4322
+ label: "C",
4323
+ action: "copy link",
4324
+ handler: () => {
4325
+ copyToClipboard(loginUrl).then((ok) => setCopyStatus(ok ? "copied" : "failed"));
4326
+ }
4327
+ });
4328
+ }
4046
4329
  bindings.push({
4047
4330
  match: ["i", "I"],
4048
4331
  label: "I",
@@ -4129,35 +4412,68 @@ const AuthScreen = ({ store }) => {
4129
4412
  ]
4130
4413
  }),
4131
4414
  /* @__PURE__ */ jsx(LoadingBox, { message: "Waiting for authentication..." }),
4132
- session.loginUrl && /* @__PURE__ */ jsxs(Box, {
4415
+ loginUrl && /* @__PURE__ */ jsxs(Box, {
4133
4416
  marginTop: 1,
4134
4417
  marginBottom: 1,
4135
4418
  flexDirection: "column",
4136
- children: [/* @__PURE__ */ jsxs(Text, { children: [
4137
- /* @__PURE__ */ jsx(Text, {
4138
- dimColor: true,
4139
- children: "If the browser didn't open, copy and paste this URL:"
4419
+ children: [
4420
+ urlFits ? /* @__PURE__ */ jsxs(Text, { children: [
4421
+ /* @__PURE__ */ jsx(Text, {
4422
+ dimColor: true,
4423
+ children: "If the browser didn't open, copy and paste this URL:"
4424
+ }),
4425
+ "\n\n",
4426
+ /* @__PURE__ */ jsx(Text, {
4427
+ color: "cyan",
4428
+ children: loginUrl
4429
+ })
4430
+ ] }) : /* @__PURE__ */ jsx(Text, {
4431
+ color: "yellow",
4432
+ children: "[This terminal is too small to show the full link for copying, resize your terminal]"
4140
4433
  }),
4141
- "\n\n",
4142
- /* @__PURE__ */ jsx(Text, {
4143
- color: "cyan",
4144
- children: session.loginUrl
4145
- })
4146
- ] }), /* @__PURE__ */ jsx(Box, {
4147
- marginTop: 1,
4148
- children: /* @__PURE__ */ jsxs(Text, {
4149
- dimColor: true,
4150
- children: [
4151
- "On a remote machine or devbox? Press",
4152
- " ",
4153
- /* @__PURE__ */ jsx(Text, {
4154
- color: Colors.accent,
4155
- children: "[P]"
4156
- }),
4157
- " to paste the callback URL."
4158
- ]
4434
+ /* @__PURE__ */ jsx(Box, {
4435
+ marginTop: 1,
4436
+ children: /* @__PURE__ */ jsxs(Text, {
4437
+ dimColor: true,
4438
+ children: [
4439
+ "Press ",
4440
+ /* @__PURE__ */ jsx(Text, {
4441
+ color: Colors.accent,
4442
+ children: "[C]"
4443
+ }),
4444
+ " to copy the link · on a remote machine or devbox? Press",
4445
+ " ",
4446
+ /* @__PURE__ */ jsx(Text, {
4447
+ color: Colors.accent,
4448
+ children: "[P]"
4449
+ }),
4450
+ " to paste the callback URL."
4451
+ ]
4452
+ })
4453
+ }),
4454
+ copyStatus === "copied" && /* @__PURE__ */ jsx(Box, {
4455
+ marginTop: 1,
4456
+ children: /* @__PURE__ */ jsxs(Text, {
4457
+ color: Colors.success,
4458
+ children: [Icons.check, " Link copied to clipboard."]
4459
+ })
4460
+ }),
4461
+ copyStatus === "failed" && /* @__PURE__ */ jsx(Box, {
4462
+ marginTop: 1,
4463
+ children: /* @__PURE__ */ jsxs(Text, {
4464
+ color: "yellow",
4465
+ children: [
4466
+ "Couldn't reach a clipboard on this machine — press",
4467
+ " ",
4468
+ /* @__PURE__ */ jsx(Text, {
4469
+ color: Colors.accent,
4470
+ children: "[P]"
4471
+ }),
4472
+ " to paste the callback URL instead."
4473
+ ]
4474
+ })
4159
4475
  })
4160
- })]
4476
+ ]
4161
4477
  })
4162
4478
  ]
4163
4479
  });
@@ -4173,13 +4489,6 @@ const AuthScreen = ({ store }) => {
4173
4489
  */
4174
4490
  const RunScreen = ({ store }) => {
4175
4491
  useSyncExternalStore((cb) => store.subscribe(cb), () => store.getSnapshot());
4176
- useFileWatcher(join$1(store.session.installDir, EVENT_PLAN_FILE), (parsed) => {
4177
- if (!Array.isArray(parsed)) return;
4178
- store.setEventPlan(parsed.map((e) => ({
4179
- name: e.event_name ?? e.name ?? e.event ?? "",
4180
- description: e.event_description ?? e.description ?? ""
4181
- })).filter((e) => e.name));
4182
- });
4183
4492
  const [columns] = useStdoutDimensions();
4184
4493
  const progressItems = store.tasks.map((t) => ({
4185
4494
  label: t.label,
@@ -4625,120 +4934,6 @@ const SessionTimeoutScreen = ({ store }) => {
4625
4934
  });
4626
4935
  };
4627
4936
  //#endregion
4628
- //#region src/utils/clipboard.ts
4629
- /**
4630
- * Best-effort platform shell-outs for making a URL usable in any terminal —
4631
- * no third-party dependency.
4632
- *
4633
- * Two helpers back the `wizard_ask` link overlay, for terminals that can't
4634
- * linkify a wrapped URL (e.g. macOS Terminal.app, which lacks OSC 8 hyperlink
4635
- * support):
4636
- *
4637
- * - `copyToClipboard` — pipe the URL to the platform clipboard binary so the
4638
- * user can paste it into a browser.
4639
- * - `openInBrowser` — hand the URL to the platform opener so it launches
4640
- * directly, no copy/paste needed.
4641
- *
4642
- * Both shell out with `spawn` and never a shell, and pass the URL as an argv
4643
- * (clipboard via stdin) — so there's no shell-injection surface. Neither throws:
4644
- * they return false when no command is reachable (CI, headless, or the binary
4645
- * isn't installed).
4646
- */
4647
- /** Platform clipboard commands, in preference order. */
4648
- function clipboardCommands() {
4649
- if (process.platform === "darwin") return [{
4650
- cmd: "pbcopy",
4651
- args: []
4652
- }];
4653
- if (process.platform === "win32") return [{
4654
- cmd: "clip",
4655
- args: []
4656
- }];
4657
- return [
4658
- {
4659
- cmd: "wl-copy",
4660
- args: []
4661
- },
4662
- {
4663
- cmd: "xclip",
4664
- args: ["-selection", "clipboard"]
4665
- },
4666
- {
4667
- cmd: "xsel",
4668
- args: ["--clipboard", "--input"]
4669
- }
4670
- ];
4671
- }
4672
- function writeWith({ cmd, args }, text) {
4673
- return new Promise((resolve) => {
4674
- try {
4675
- const child = spawn(cmd, args);
4676
- child.on("error", () => resolve(false));
4677
- child.stdin.on("error", () => resolve(false));
4678
- child.on("close", (code) => resolve(code === 0));
4679
- child.stdin.end(text);
4680
- } catch {
4681
- resolve(false);
4682
- }
4683
- });
4684
- }
4685
- async function copyToClipboard(text) {
4686
- for (const command of clipboardCommands()) if (await writeWith(command, text)) return true;
4687
- logToFile("[clipboard] no working clipboard command found");
4688
- return false;
4689
- }
4690
- /**
4691
- * Platform browser-open commands, in preference order. The URL is one argv
4692
- * element — never concatenated into a shell string — so a `?kind=…` query or
4693
- * any other character can't escape into the command line.
4694
- *
4695
- * `win32` has no shell-free single binary for this: `start` is a `cmd` builtin,
4696
- * so we invoke `cmd /c start "" <url>` (the empty `""` is `start`'s window-title
4697
- * argument, which would otherwise swallow the URL). The URL is still a discrete
4698
- * argv element, not interpolated into the command string.
4699
- *
4700
- * Takes `platform` as an argument (defaulting to the host) so the mapping is a
4701
- * pure function the tests can exercise across platforms.
4702
- */
4703
- function browserOpenCommands(url, platform = process.platform) {
4704
- if (platform === "darwin") return [{
4705
- cmd: "open",
4706
- args: [url]
4707
- }];
4708
- if (platform === "win32") return [{
4709
- cmd: "cmd",
4710
- args: [
4711
- "/c",
4712
- "start",
4713
- "",
4714
- url
4715
- ]
4716
- }];
4717
- return [{
4718
- cmd: "xdg-open",
4719
- args: [url]
4720
- }, {
4721
- cmd: "x-www-browser",
4722
- args: [url]
4723
- }];
4724
- }
4725
- function spawnOpener({ cmd, args }) {
4726
- return new Promise((resolve) => {
4727
- try {
4728
- const child = spawn(cmd, args, { stdio: "ignore" });
4729
- child.on("error", () => resolve(false));
4730
- child.on("close", (code) => resolve(code === 0));
4731
- } catch {
4732
- resolve(false);
4733
- }
4734
- });
4735
- }
4736
- async function openInBrowser(url) {
4737
- for (const command of browserOpenCommands(url)) if (await spawnOpener(command)) return true;
4738
- logToFile("[clipboard] no working browser-open command found");
4739
- return false;
4740
- }
4741
- //#endregion
4742
4937
  //#region src/ui/tui/screens/WizardAskScreen.tsx
4743
4938
  /**
4744
4939
  * WizardAskScreen — Overlay for the `wizard_ask` MCP tool.
@@ -5017,7 +5212,7 @@ function createMcpSuggestedPromptsServices(store) {
5017
5212
  };
5018
5213
  }
5019
5214
  async function* runProductionPromptStreaming(args) {
5020
- const { runMcpPromptViaSdk } = await import("./mcp-prompt-streaming-BB5nO--L.js");
5215
+ const { runMcpPromptViaSdk } = await import("./mcp-prompt-streaming-C227vG1X.js");
5021
5216
  yield* runMcpPromptViaSdk(args);
5022
5217
  }
5023
5218
  //#endregion
@@ -5193,4 +5388,4 @@ function startTUI(version, program = Program.PostHogIntegration) {
5193
5388
  //#endregion
5194
5389
  export { startTUI };
5195
5390
 
5196
- //# sourceMappingURL=start-tui-CJlIgYjf.js.map
5391
+ //# sourceMappingURL=start-tui-DHa_9aiB.js.map