@posthog/wizard 2.8.0 → 2.9.1

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 (240) hide show
  1. package/README.md +11 -0
  2. package/dist/bin.js +286 -167
  3. package/dist/bin.js.map +1 -1
  4. package/dist/src/__tests__/cli.test.js +92 -59
  5. package/dist/src/__tests__/cli.test.js.map +1 -1
  6. package/dist/src/__tests__/wizard-abort.test.js +34 -13
  7. package/dist/src/__tests__/wizard-abort.test.js.map +1 -1
  8. package/dist/src/frameworks/android/android-wizard-agent.js +2 -2
  9. package/dist/src/frameworks/android/android-wizard-agent.js.map +1 -1
  10. package/dist/src/frameworks/angular/angular-wizard-agent.js +2 -2
  11. package/dist/src/frameworks/angular/angular-wizard-agent.js.map +1 -1
  12. package/dist/src/frameworks/astro/astro-wizard-agent.js +2 -2
  13. package/dist/src/frameworks/astro/astro-wizard-agent.js.map +1 -1
  14. package/dist/src/frameworks/django/django-wizard-agent.js +2 -2
  15. package/dist/src/frameworks/django/django-wizard-agent.js.map +1 -1
  16. package/dist/src/frameworks/fastapi/fastapi-wizard-agent.js +2 -2
  17. package/dist/src/frameworks/fastapi/fastapi-wizard-agent.js.map +1 -1
  18. package/dist/src/frameworks/flask/flask-wizard-agent.js +2 -2
  19. package/dist/src/frameworks/flask/flask-wizard-agent.js.map +1 -1
  20. package/dist/src/frameworks/javascript-node/javascript-node-wizard-agent.js +2 -2
  21. package/dist/src/frameworks/javascript-node/javascript-node-wizard-agent.js.map +1 -1
  22. package/dist/src/frameworks/javascript-web/javascript-web-wizard-agent.js +2 -2
  23. package/dist/src/frameworks/javascript-web/javascript-web-wizard-agent.js.map +1 -1
  24. package/dist/src/frameworks/laravel/laravel-wizard-agent.js +2 -2
  25. package/dist/src/frameworks/laravel/laravel-wizard-agent.js.map +1 -1
  26. package/dist/src/frameworks/nextjs/nextjs-wizard-agent.js +2 -2
  27. package/dist/src/frameworks/nextjs/nextjs-wizard-agent.js.map +1 -1
  28. package/dist/src/frameworks/nuxt/nuxt-wizard-agent.js +2 -2
  29. package/dist/src/frameworks/nuxt/nuxt-wizard-agent.js.map +1 -1
  30. package/dist/src/frameworks/python/python-wizard-agent.js +2 -2
  31. package/dist/src/frameworks/python/python-wizard-agent.js.map +1 -1
  32. package/dist/src/frameworks/rails/rails-wizard-agent.js +2 -2
  33. package/dist/src/frameworks/rails/rails-wizard-agent.js.map +1 -1
  34. package/dist/src/frameworks/react-native/react-native-wizard-agent.js +2 -2
  35. package/dist/src/frameworks/react-native/react-native-wizard-agent.js.map +1 -1
  36. package/dist/src/frameworks/react-router/react-router-wizard-agent.js +2 -2
  37. package/dist/src/frameworks/react-router/react-router-wizard-agent.js.map +1 -1
  38. package/dist/src/frameworks/ruby/ruby-wizard-agent.js +2 -2
  39. package/dist/src/frameworks/ruby/ruby-wizard-agent.js.map +1 -1
  40. package/dist/src/frameworks/svelte/svelte-wizard-agent.js +2 -2
  41. package/dist/src/frameworks/svelte/svelte-wizard-agent.js.map +1 -1
  42. package/dist/src/frameworks/swift/swift-wizard-agent.js +2 -2
  43. package/dist/src/frameworks/swift/swift-wizard-agent.js.map +1 -1
  44. package/dist/src/frameworks/tanstack-router/tanstack-router-wizard-agent.js +2 -2
  45. package/dist/src/frameworks/tanstack-router/tanstack-router-wizard-agent.js.map +1 -1
  46. package/dist/src/frameworks/tanstack-start/tanstack-start-wizard-agent.js +2 -2
  47. package/dist/src/frameworks/tanstack-start/tanstack-start-wizard-agent.js.map +1 -1
  48. package/dist/src/frameworks/vue/vue-wizard-agent.js +2 -2
  49. package/dist/src/frameworks/vue/vue-wizard-agent.js.map +1 -1
  50. package/dist/src/lib/__tests__/agent-interface.test.js +29 -1
  51. package/dist/src/lib/__tests__/agent-interface.test.js.map +1 -1
  52. package/dist/src/lib/agent/__tests__/agent-prompt.test.js +57 -0
  53. package/dist/src/lib/agent/__tests__/agent-prompt.test.js.map +1 -0
  54. package/dist/src/lib/{agent-interface.d.ts → agent/agent-interface.d.ts} +18 -6
  55. package/dist/src/lib/{agent-interface.js → agent/agent-interface.js} +63 -13
  56. package/dist/src/lib/agent/agent-interface.js.map +1 -0
  57. package/dist/src/lib/agent/agent-prompt.d.ts +23 -0
  58. package/dist/src/lib/agent/agent-prompt.js +47 -0
  59. package/dist/src/lib/agent/agent-prompt.js.map +1 -0
  60. package/dist/src/lib/agent/agent-runner.d.ts +78 -0
  61. package/dist/src/lib/agent/agent-runner.js +325 -0
  62. package/dist/src/lib/agent/agent-runner.js.map +1 -0
  63. package/dist/src/lib/agent/commandments.js.map +1 -0
  64. package/dist/src/lib/constants.d.ts +10 -1
  65. package/dist/src/lib/constants.js +13 -1
  66. package/dist/src/lib/constants.js.map +1 -1
  67. package/dist/src/lib/detection/__tests__/context.test.js +72 -0
  68. package/dist/src/lib/detection/__tests__/context.test.js.map +1 -0
  69. package/dist/src/lib/detection/__tests__/features.test.d.ts +1 -0
  70. package/dist/src/lib/detection/__tests__/features.test.js +75 -0
  71. package/dist/src/lib/detection/__tests__/features.test.js.map +1 -0
  72. package/dist/src/lib/detection/__tests__/package-manager.test.d.ts +1 -0
  73. package/dist/src/lib/{__tests__/package-manager-detection.test.js → detection/__tests__/package-manager.test.js} +25 -25
  74. package/dist/src/lib/detection/__tests__/package-manager.test.js.map +1 -0
  75. package/dist/src/lib/detection/context.d.ts +31 -0
  76. package/dist/src/lib/detection/context.js +92 -0
  77. package/dist/src/lib/detection/context.js.map +1 -0
  78. package/dist/src/lib/detection/features.d.ts +16 -0
  79. package/dist/src/lib/detection/features.js +56 -0
  80. package/dist/src/lib/detection/features.js.map +1 -0
  81. package/dist/src/lib/detection/framework.d.ts +14 -0
  82. package/dist/src/lib/detection/framework.js +35 -0
  83. package/dist/src/lib/detection/framework.js.map +1 -0
  84. package/dist/src/lib/detection/index.d.ts +3 -0
  85. package/dist/src/lib/detection/index.js +11 -0
  86. package/dist/src/lib/detection/index.js.map +1 -0
  87. package/dist/src/lib/{package-manager-detection.js → detection/package-manager.js} +3 -3
  88. package/dist/src/lib/detection/package-manager.js.map +1 -0
  89. package/dist/src/lib/framework-config.d.ts +1 -1
  90. package/dist/src/lib/framework-config.js.map +1 -1
  91. package/dist/src/lib/health-checks/endpoints.js +2 -1
  92. package/dist/src/lib/health-checks/endpoints.js.map +1 -1
  93. package/dist/src/lib/middleware/benchmark.js +1 -1
  94. package/dist/src/lib/middleware/benchmark.js.map +1 -1
  95. package/dist/src/lib/middleware/benchmarks/compaction-tracker.js +1 -1
  96. package/dist/src/lib/middleware/benchmarks/compaction-tracker.js.map +1 -1
  97. package/dist/src/lib/middleware/benchmarks/json-writer.js +1 -1
  98. package/dist/src/lib/middleware/benchmarks/json-writer.js.map +1 -1
  99. package/dist/src/lib/middleware/benchmarks/summary.js +1 -1
  100. package/dist/src/lib/middleware/benchmarks/summary.js.map +1 -1
  101. package/dist/src/lib/middleware/config.js +1 -1
  102. package/dist/src/lib/middleware/config.js.map +1 -1
  103. package/dist/src/lib/version.d.ts +1 -1
  104. package/dist/src/lib/version.js +1 -1
  105. package/dist/src/lib/version.js.map +1 -1
  106. package/dist/src/lib/wizard-session.d.ts +16 -7
  107. package/dist/src/lib/wizard-session.js +2 -0
  108. package/dist/src/lib/wizard-session.js.map +1 -1
  109. package/dist/src/lib/wizard-tools.d.ts +28 -1
  110. package/dist/src/lib/wizard-tools.js +24 -0
  111. package/dist/src/lib/wizard-tools.js.map +1 -1
  112. package/dist/src/lib/workflows/__tests__/agent-skill.test.d.ts +1 -0
  113. package/dist/src/lib/workflows/__tests__/agent-skill.test.js +73 -0
  114. package/dist/src/lib/workflows/__tests__/agent-skill.test.js.map +1 -0
  115. package/dist/src/lib/workflows/__tests__/revenue-analytics-detect.test.d.ts +1 -0
  116. package/dist/src/lib/workflows/__tests__/revenue-analytics-detect.test.js +101 -0
  117. package/dist/src/lib/workflows/__tests__/revenue-analytics-detect.test.js.map +1 -0
  118. package/dist/src/lib/workflows/__tests__/workflow-registry.test.d.ts +1 -0
  119. package/dist/src/lib/workflows/__tests__/workflow-registry.test.js +32 -0
  120. package/dist/src/lib/workflows/__tests__/workflow-registry.test.js.map +1 -0
  121. package/dist/src/lib/workflows/__tests__/workflow-step.test.d.ts +1 -0
  122. package/dist/src/lib/workflows/__tests__/workflow-step.test.js +54 -0
  123. package/dist/src/lib/workflows/__tests__/workflow-step.test.js.map +1 -0
  124. package/dist/src/lib/workflows/agent-skill/index.d.ts +44 -0
  125. package/dist/src/lib/workflows/agent-skill/index.js +47 -0
  126. package/dist/src/lib/workflows/agent-skill/index.js.map +1 -0
  127. package/dist/src/lib/workflows/agent-skill/steps.d.ts +8 -0
  128. package/dist/src/lib/workflows/agent-skill/steps.js +43 -0
  129. package/dist/src/lib/workflows/agent-skill/steps.js.map +1 -0
  130. package/dist/src/lib/workflows/posthog-integration/detect.d.ts +12 -0
  131. package/dist/src/lib/workflows/posthog-integration/detect.js +57 -0
  132. package/dist/src/lib/workflows/posthog-integration/detect.js.map +1 -0
  133. package/dist/src/lib/workflows/posthog-integration/index.d.ts +3 -0
  134. package/dist/src/lib/workflows/posthog-integration/index.js +152 -0
  135. package/dist/src/lib/workflows/posthog-integration/index.js.map +1 -0
  136. package/dist/src/lib/workflows/posthog-integration/steps.d.ts +9 -0
  137. package/dist/src/lib/workflows/posthog-integration/steps.js +100 -0
  138. package/dist/src/lib/workflows/posthog-integration/steps.js.map +1 -0
  139. package/dist/src/lib/workflows/revenue-analytics/detect.d.ts +40 -0
  140. package/dist/src/lib/workflows/revenue-analytics/detect.js +156 -0
  141. package/dist/src/lib/workflows/revenue-analytics/detect.js.map +1 -0
  142. package/dist/src/lib/workflows/revenue-analytics/index.d.ts +4 -0
  143. package/dist/src/lib/workflows/revenue-analytics/index.js +30 -0
  144. package/dist/src/lib/workflows/revenue-analytics/index.js.map +1 -0
  145. package/dist/src/lib/workflows/revenue-analytics/steps.d.ts +8 -0
  146. package/dist/src/lib/workflows/revenue-analytics/steps.js +53 -0
  147. package/dist/src/lib/workflows/revenue-analytics/steps.js.map +1 -0
  148. package/dist/src/lib/workflows/workflow-registry.d.ts +18 -0
  149. package/dist/src/lib/workflows/workflow-registry.js +32 -0
  150. package/dist/src/lib/workflows/workflow-registry.js.map +1 -0
  151. package/dist/src/lib/workflows/workflow-step.d.ts +126 -0
  152. package/dist/src/lib/workflows/workflow-step.js +28 -0
  153. package/dist/src/lib/workflows/workflow-step.js.map +1 -0
  154. package/dist/src/steps/add-mcp-server-to-clients/index.d.ts +2 -1
  155. package/dist/src/steps/add-mcp-server-to-clients/index.js.map +1 -1
  156. package/dist/src/ui/logging-ui.d.ts +6 -3
  157. package/dist/src/ui/logging-ui.js +7 -0
  158. package/dist/src/ui/logging-ui.js.map +1 -1
  159. package/dist/src/ui/tui/__tests__/flows.test.d.ts +1 -0
  160. package/dist/src/ui/tui/__tests__/flows.test.js +115 -0
  161. package/dist/src/ui/tui/__tests__/flows.test.js.map +1 -0
  162. package/dist/src/ui/tui/__tests__/router.test.d.ts +1 -0
  163. package/dist/src/ui/tui/__tests__/router.test.js +87 -0
  164. package/dist/src/ui/tui/__tests__/router.test.js.map +1 -0
  165. package/dist/src/ui/tui/__tests__/store.test.js +149 -13
  166. package/dist/src/ui/tui/__tests__/store.test.js.map +1 -1
  167. package/dist/src/ui/tui/flows.d.ts +19 -7
  168. package/dist/src/ui/tui/flows.js +30 -53
  169. package/dist/src/ui/tui/flows.js.map +1 -1
  170. package/dist/src/ui/tui/ink-ui.d.ts +6 -3
  171. package/dist/src/ui/tui/ink-ui.js +7 -0
  172. package/dist/src/ui/tui/ink-ui.js.map +1 -1
  173. package/dist/src/ui/tui/playground/PlaygroundApp.js +6 -0
  174. package/dist/src/ui/tui/playground/PlaygroundApp.js.map +1 -1
  175. package/dist/src/ui/tui/playground/demos/McpDemo.d.ts +12 -0
  176. package/dist/src/ui/tui/playground/demos/McpDemo.js +27 -0
  177. package/dist/src/ui/tui/playground/demos/McpDemo.js.map +1 -0
  178. package/dist/src/ui/tui/router.js +1 -1
  179. package/dist/src/ui/tui/router.js.map +1 -1
  180. package/dist/src/ui/tui/screen-registry.js +8 -4
  181. package/dist/src/ui/tui/screen-registry.js.map +1 -1
  182. package/dist/src/ui/tui/screens/AgentSkillIntroScreen.d.ts +12 -0
  183. package/dist/src/ui/tui/screens/AgentSkillIntroScreen.js +75 -0
  184. package/dist/src/ui/tui/screens/AgentSkillIntroScreen.js.map +1 -0
  185. package/dist/src/ui/tui/screens/IntroScreenLayout.d.ts +46 -0
  186. package/dist/src/ui/tui/screens/IntroScreenLayout.js +33 -0
  187. package/dist/src/ui/tui/screens/IntroScreenLayout.js.map +1 -0
  188. package/dist/src/ui/tui/screens/{SkillsScreen.d.ts → KeepSkillsScreen.d.ts} +3 -3
  189. package/dist/src/ui/tui/screens/{SkillsScreen.js → KeepSkillsScreen.js} +8 -5
  190. package/dist/src/ui/tui/screens/KeepSkillsScreen.js.map +1 -0
  191. package/dist/src/ui/tui/screens/ManagedSettingsScreen.js.map +1 -1
  192. package/dist/src/ui/tui/screens/McpScreen.js +4 -1
  193. package/dist/src/ui/tui/screens/McpScreen.js.map +1 -1
  194. package/dist/src/ui/tui/screens/OutroScreen.js +1 -1
  195. package/dist/src/ui/tui/screens/OutroScreen.js.map +1 -1
  196. package/dist/src/ui/tui/screens/PostHogIntegrationIntroScreen.d.ts +15 -0
  197. package/dist/src/ui/tui/screens/PostHogIntegrationIntroScreen.js +135 -0
  198. package/dist/src/ui/tui/screens/PostHogIntegrationIntroScreen.js.map +1 -0
  199. package/dist/src/ui/tui/screens/RevenueIntroScreen.d.ts +16 -0
  200. package/dist/src/ui/tui/screens/RevenueIntroScreen.js +89 -0
  201. package/dist/src/ui/tui/screens/RevenueIntroScreen.js.map +1 -0
  202. package/dist/src/ui/tui/screens/SettingsOverrideScreen.js.map +1 -1
  203. package/dist/src/ui/tui/screens/health/HealthCheckScreen.js +2 -2
  204. package/dist/src/ui/tui/screens/health/HealthCheckScreen.js.map +1 -1
  205. package/dist/src/ui/tui/start-tui.js +2 -2
  206. package/dist/src/ui/tui/start-tui.js.map +1 -1
  207. package/dist/src/ui/tui/store.d.ts +46 -21
  208. package/dist/src/ui/tui/store.js +107 -47
  209. package/dist/src/ui/tui/store.js.map +1 -1
  210. package/dist/src/ui/wizard-ui.d.ts +13 -3
  211. package/dist/src/ui/wizard-ui.js.map +1 -1
  212. package/dist/src/utils/file-utils.d.ts +8 -0
  213. package/dist/src/utils/file-utils.js +32 -0
  214. package/dist/src/utils/file-utils.js.map +1 -1
  215. package/dist/src/utils/wizard-abort.d.ts +3 -0
  216. package/dist/src/utils/wizard-abort.js +5 -3
  217. package/dist/src/utils/wizard-abort.js.map +1 -1
  218. package/npm-shrinkwrap.json +2 -2
  219. package/package.json +1 -1
  220. package/dist/src/__tests__/run.test.js +0 -95
  221. package/dist/src/__tests__/run.test.js.map +0 -1
  222. package/dist/src/lib/__tests__/package-manager-detection.test.js.map +0 -1
  223. package/dist/src/lib/agent-interface.js.map +0 -1
  224. package/dist/src/lib/agent-runner.d.ts +0 -9
  225. package/dist/src/lib/agent-runner.js +0 -385
  226. package/dist/src/lib/agent-runner.js.map +0 -1
  227. package/dist/src/lib/commandments.js.map +0 -1
  228. package/dist/src/lib/package-manager-detection.js.map +0 -1
  229. package/dist/src/run.d.ts +0 -23
  230. package/dist/src/run.js +0 -154
  231. package/dist/src/run.js.map +0 -1
  232. package/dist/src/ui/tui/screens/IntroScreen.d.ts +0 -16
  233. package/dist/src/ui/tui/screens/IntroScreen.js +0 -79
  234. package/dist/src/ui/tui/screens/IntroScreen.js.map +0 -1
  235. package/dist/src/ui/tui/screens/SkillsScreen.js.map +0 -1
  236. /package/dist/src/{__tests__/run.test.d.ts → lib/agent/__tests__/agent-prompt.test.d.ts} +0 -0
  237. /package/dist/src/lib/{commandments.d.ts → agent/commandments.d.ts} +0 -0
  238. /package/dist/src/lib/{commandments.js → agent/commandments.js} +0 -0
  239. /package/dist/src/lib/{__tests__/package-manager-detection.test.d.ts → detection/__tests__/context.test.d.ts} +0 -0
  240. /package/dist/src/lib/{package-manager-detection.d.ts → detection/package-manager.d.ts} +0 -0
@@ -1,385 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.runAgentWizard = runAgentWizard;
37
- const framework_config_1 = require("./framework-config");
38
- const wizard_session_1 = require("./wizard-session");
39
- const setup_utils_1 = require("../utils/setup-utils");
40
- const constants_1 = require("./constants");
41
- const analytics_1 = require("../utils/analytics");
42
- const ui_1 = require("../ui");
43
- const agent_interface_1 = require("./agent-interface");
44
- const urls_1 = require("../utils/urls");
45
- const semver = __importStar(require("semver"));
46
- const readiness_1 = require("./health-checks/readiness");
47
- const debug_1 = require("../utils/debug");
48
- const benchmark_1 = require("./middleware/benchmark");
49
- const wizard_abort_1 = require("../utils/wizard-abort");
50
- const yara_hooks_1 = require("./yara-hooks");
51
- const cloudflare_detection_1 = require("./cloudflare-detection");
52
- /**
53
- * Build a WizardOptions bag from a WizardSession (for code that still expects WizardOptions).
54
- */
55
- function sessionToOptions(session) {
56
- return {
57
- installDir: session.installDir,
58
- debug: session.debug,
59
- forceInstall: session.forceInstall,
60
- default: false,
61
- signup: session.signup,
62
- localMcp: session.localMcp,
63
- ci: session.ci,
64
- menu: session.menu,
65
- benchmark: session.benchmark,
66
- projectId: session.projectId,
67
- apiKey: session.apiKey,
68
- yaraReport: session.yaraReport,
69
- };
70
- }
71
- /**
72
- * Universal agent-powered wizard runner.
73
- * Handles the complete flow for any framework using PostHog MCP integration.
74
- *
75
- * All user decisions come from the session — no UI prompts.
76
- */
77
- async function runAgentWizard(config, session) {
78
- (0, debug_1.initLogFile)();
79
- (0, debug_1.logToFile)(`[agent-runner] START integration=${config.metadata.integration}`);
80
- if (session.debug) {
81
- (0, debug_1.enableDebugLogs)();
82
- }
83
- // Version check
84
- if (config.detection.minimumVersion && config.detection.getInstalledVersion) {
85
- (0, debug_1.logToFile)('[agent-runner] checking version');
86
- const version = await config.detection.getInstalledVersion(sessionToOptions(session));
87
- if (version) {
88
- (0, debug_1.logToFile)(`[agent-runner] version=${version} minimum=${config.detection.minimumVersion}`);
89
- const coerced = semver.coerce(version);
90
- if (coerced && semver.lt(coerced, config.detection.minimumVersion)) {
91
- const docsUrl = config.metadata.unsupportedVersionDocsUrl ?? config.metadata.docsUrl;
92
- await (0, wizard_abort_1.wizardAbort)({
93
- message: `Sorry: the wizard can't help you with ${config.metadata.name} ${version}. ` +
94
- `Upgrade to ${config.metadata.name} ${config.detection.minimumVersion} or later, ` +
95
- `or check out the manual setup guide.\n\n` +
96
- `Setup ${config.metadata.name} manually: ${docsUrl}`,
97
- });
98
- }
99
- }
100
- }
101
- // Compute skills server URL (needed for agent tool calls)
102
- const skillsBaseUrl = session.localMcp
103
- ? 'http://localhost:8765'
104
- : 'https://github.com/PostHog/context-mill/releases/latest/download';
105
- // Check all external service health (skip if TUI already ran it in bin.ts)
106
- if (!session.readinessResult) {
107
- (0, debug_1.logToFile)('[agent-runner] evaluating wizard readiness');
108
- const readiness = await (0, readiness_1.evaluateWizardReadiness)();
109
- (0, debug_1.logToFile)(`[agent-runner] readiness=${readiness.decision}`);
110
- if (readiness.decision === readiness_1.WizardReadiness.No) {
111
- await (0, ui_1.getUI)().showBlockingOutage(readiness);
112
- }
113
- else if (readiness.decision === readiness_1.WizardReadiness.YesWithWarnings) {
114
- (0, ui_1.getUI)().setReadinessWarnings(readiness);
115
- }
116
- }
117
- // Check ALL settings sources for blocking overrides before login.
118
- const settingsConflicts = (0, agent_interface_1.checkAllSettingsConflicts)(session.installDir);
119
- (0, debug_1.logToFile)(`[agent-runner] settings conflicts: ${settingsConflicts.length > 0
120
- ? settingsConflicts
121
- .map((c) => `${c.source}(${c.keys.join(',')})`)
122
- .join('; ')
123
- : 'none'}`);
124
- if (settingsConflicts.length > 0) {
125
- // Capture analytics for each conflict variation
126
- for (const conflict of settingsConflicts) {
127
- const level = conflict.source === 'managed' ? 'org' : conflict.source;
128
- analytics_1.analytics.wizardCapture('settings conflict detected', {
129
- level,
130
- keys: conflict.keys,
131
- });
132
- }
133
- await (0, ui_1.getUI)().showSettingsOverride(settingsConflicts, () => (0, agent_interface_1.backupAndFixClaudeSettings)(session.installDir));
134
- (0, debug_1.logToFile)('[agent-runner] settings override resolved');
135
- }
136
- const typeScriptDetected = (0, setup_utils_1.isUsingTypeScript)({
137
- installDir: session.installDir,
138
- });
139
- session.typescript = typeScriptDetected;
140
- // Framework detection and version
141
- const usesPackageJson = config.detection.usesPackageJson !== false;
142
- let packageJson = null;
143
- let frameworkVersion;
144
- if (usesPackageJson) {
145
- packageJson = await (0, setup_utils_1.tryGetPackageJson)({ installDir: session.installDir });
146
- if (packageJson) {
147
- const { hasPackageInstalled } = await import('../utils/package-json.js');
148
- if (!hasPackageInstalled(config.detection.packageName, packageJson)) {
149
- (0, ui_1.getUI)().log.warn(`${config.detection.packageDisplayName} does not seem to be installed. Continuing anyway — the agent will handle it.`);
150
- }
151
- frameworkVersion = config.detection.getVersion(packageJson);
152
- }
153
- else {
154
- (0, ui_1.getUI)().log.warn('Could not find package.json. Continuing anyway — the agent will handle it.');
155
- }
156
- }
157
- else {
158
- frameworkVersion = config.detection.getVersion(null);
159
- }
160
- // Set analytics tags for framework version
161
- if (frameworkVersion && config.detection.getVersionBucket) {
162
- const versionBucket = config.detection.getVersionBucket(frameworkVersion);
163
- analytics_1.analytics.setTag(`${config.metadata.integration}-version`, versionBucket);
164
- }
165
- analytics_1.analytics.wizardCapture('agent started', {
166
- integration: config.metadata.integration,
167
- });
168
- // Get PostHog credentials (region auto-detected from token)
169
- (0, debug_1.logToFile)('[agent-runner] starting OAuth');
170
- const { projectApiKey, host, accessToken, projectId, cloudRegion } = await (0, setup_utils_1.getOrAskForProjectData)({
171
- signup: session.signup,
172
- ci: session.ci,
173
- apiKey: session.apiKey,
174
- email: session.email,
175
- region: session.region,
176
- projectId: session.projectId,
177
- });
178
- session.credentials = { accessToken, projectApiKey, host, projectId };
179
- // Notify TUI that credentials are available (resolves past AuthScreen)
180
- (0, ui_1.getUI)().setCredentials(session.credentials);
181
- // Framework context was already gathered by SetupScreen + detection
182
- const frameworkContext = session.frameworkContext;
183
- // Set analytics tags from framework context
184
- const contextTags = config.analytics.getTags(frameworkContext);
185
- Object.entries(contextTags).forEach(([key, value]) => {
186
- analytics_1.analytics.setTag(key, value);
187
- });
188
- // Detect Cloudflare Workers target and fetch runtime reference if needed
189
- const isCloudflare = await (0, cloudflare_detection_1.detectCloudflareTarget)(session.installDir);
190
- let cloudflareReference = null;
191
- if (isCloudflare) {
192
- (0, debug_1.logToFile)('[agent-runner] Cloudflare Workers target detected');
193
- analytics_1.analytics.setTag('cloudflare', 'true');
194
- cloudflareReference = await (0, cloudflare_detection_1.fetchCloudflareReference)(skillsBaseUrl);
195
- }
196
- const integrationPrompt = buildIntegrationPrompt(config, {
197
- frameworkVersion: frameworkVersion || 'latest',
198
- typescript: typeScriptDetected,
199
- projectApiKey,
200
- host,
201
- projectId,
202
- }, frameworkContext, cloudflareReference);
203
- // Initialize and run agent
204
- const spinner = (0, ui_1.getUI)().spinner();
205
- // Evaluate all feature flags at the start of the run so they can be sent to the LLM gateway
206
- const wizardFlags = await analytics_1.analytics.getAllFlagsForWizard();
207
- const wizardMetadata = (0, agent_interface_1.buildWizardMetadata)(wizardFlags);
208
- // Determine MCP URL: CLI flag > env var > production default
209
- const mcpUrl = session.localMcp
210
- ? 'http://localhost:8787/mcp'
211
- : process.env.MCP_URL ||
212
- (cloudRegion === 'eu'
213
- ? 'https://mcp-eu.posthog.com/mcp'
214
- : 'https://mcp.posthog.com/mcp');
215
- const restoreSettings = () => (0, agent_interface_1.restoreClaudeSettings)(session.installDir);
216
- (0, ui_1.getUI)().onEnterScreen('outro', restoreSettings);
217
- // Register YARA report as cleanup so it fires on any exit path (including wizardAbort)
218
- if (session.yaraReport) {
219
- (0, wizard_abort_1.registerCleanup)(() => {
220
- const reportPath = (0, yara_hooks_1.writeScanReport)();
221
- if (reportPath) {
222
- const summary = (0, yara_hooks_1.formatScanReport)();
223
- (0, ui_1.getUI)().log.info(`YARA scan report: ${reportPath}${summary ?? ''}`);
224
- }
225
- });
226
- }
227
- (0, ui_1.getUI)().startRun();
228
- const agent = await (0, agent_interface_1.initializeAgent)({
229
- workingDirectory: session.installDir,
230
- posthogMcpUrl: mcpUrl,
231
- posthogApiKey: accessToken,
232
- posthogApiHost: host,
233
- additionalMcpServers: config.metadata.additionalMcpServers,
234
- detectPackageManager: config.detection.detectPackageManager,
235
- skillsBaseUrl,
236
- wizardFlags,
237
- wizardMetadata,
238
- }, sessionToOptions(session));
239
- const middleware = session.benchmark
240
- ? (0, benchmark_1.createBenchmarkPipeline)(spinner, sessionToOptions(session))
241
- : undefined;
242
- const agentResult = await (0, agent_interface_1.runAgent)(agent, integrationPrompt, sessionToOptions(session), spinner, {
243
- estimatedDurationMinutes: config.ui.estimatedDurationMinutes,
244
- spinnerMessage: framework_config_1.SPINNER_MESSAGE,
245
- successMessage: config.ui.successMessage,
246
- errorMessage: 'Integration failed',
247
- additionalFeatureQueue: session.additionalFeatureQueue,
248
- }, middleware);
249
- // Handle error cases detected in agent output
250
- if (agentResult.error === agent_interface_1.AgentErrorType.MCP_MISSING) {
251
- await (0, wizard_abort_1.wizardAbort)({
252
- message: `Could not access the PostHog MCP server\n\nThe wizard was unable to connect to the PostHog MCP server.\nThis could be due to a network issue or a configuration problem.\n\nPlease try again, or set up ${config.metadata.name} manually by following our documentation:\n${config.metadata.docsUrl}`,
253
- error: new wizard_abort_1.WizardError('Agent could not access PostHog MCP server', {
254
- integration: config.metadata.integration,
255
- error_type: agent_interface_1.AgentErrorType.MCP_MISSING,
256
- signal: agent_interface_1.AgentSignals.ERROR_MCP_MISSING,
257
- }),
258
- });
259
- }
260
- if (agentResult.error === agent_interface_1.AgentErrorType.RESOURCE_MISSING) {
261
- await (0, wizard_abort_1.wizardAbort)({
262
- message: `Could not access the setup resource\n\nThe wizard could not access the setup resource. This may indicate a version mismatch or a temporary service issue.\n\nPlease try again, or set up ${config.metadata.name} manually by following our documentation:\n${config.metadata.docsUrl}`,
263
- error: new wizard_abort_1.WizardError('Agent could not access setup resource', {
264
- integration: config.metadata.integration,
265
- error_type: agent_interface_1.AgentErrorType.RESOURCE_MISSING,
266
- signal: agent_interface_1.AgentSignals.ERROR_RESOURCE_MISSING,
267
- }),
268
- });
269
- }
270
- if (agentResult.error === agent_interface_1.AgentErrorType.YARA_VIOLATION) {
271
- await (0, wizard_abort_1.wizardAbort)({
272
- message: 'Security violation detected\n\nThe YARA scanner terminated the session after detecting a security violation.\nThis may indicate prompt injection, poisoned skill files, or a policy breach.\n\nPlease report this to: wizard@posthog.com',
273
- error: new wizard_abort_1.WizardError('YARA scanner terminated session', {
274
- integration: config.metadata.integration,
275
- error_type: agent_interface_1.AgentErrorType.YARA_VIOLATION,
276
- }),
277
- });
278
- }
279
- if (agentResult.error === agent_interface_1.AgentErrorType.RATE_LIMIT ||
280
- agentResult.error === agent_interface_1.AgentErrorType.API_ERROR) {
281
- analytics_1.analytics.wizardCapture('agent api error', {
282
- integration: config.metadata.integration,
283
- error_type: agentResult.error,
284
- error_message: agentResult.message,
285
- });
286
- await (0, wizard_abort_1.wizardAbort)({
287
- message: `API Error\n\n${agentResult.message || 'Unknown error'}\n\nPlease report this error to: wizard@posthog.com`,
288
- error: new wizard_abort_1.WizardError(`API error: ${agentResult.message}`, {
289
- integration: config.metadata.integration,
290
- error_type: agentResult.error,
291
- }),
292
- });
293
- }
294
- // Build environment variables from OAuth credentials
295
- const envVars = config.environment.getEnvVars(projectApiKey, host);
296
- // Upload environment variables to hosting providers (auto-accept)
297
- let uploadedEnvVars = [];
298
- if (config.environment.uploadToHosting) {
299
- const { uploadEnvironmentVariablesStep } = await import('../steps/index.js');
300
- uploadedEnvVars = await uploadEnvironmentVariablesStep(envVars, {
301
- integration: config.metadata.integration,
302
- session,
303
- });
304
- if (uploadedEnvVars.length > 0) {
305
- analytics_1.analytics.capture(constants_1.WIZARD_INTERACTION_EVENT_NAME, {
306
- action: 'wizard_env_vars_uploaded',
307
- integration: config.metadata.integration,
308
- variable_count: uploadedEnvVars.length,
309
- variable_keys: uploadedEnvVars,
310
- });
311
- }
312
- }
313
- // MCP installation is handled by McpScreen — no prompt here
314
- // Build outro data and store it for OutroScreen
315
- const continueUrl = session.signup
316
- ? `${(0, urls_1.getCloudUrlFromRegion)(cloudRegion)}/products?source=wizard`
317
- : undefined;
318
- const changes = [
319
- ...config.ui.getOutroChanges(frameworkContext),
320
- Object.keys(envVars).length > 0
321
- ? `Added environment variables to .env file`
322
- : '',
323
- uploadedEnvVars.length > 0
324
- ? `Uploaded environment variables to your hosting provider`
325
- : '',
326
- ].filter(Boolean);
327
- session.outroData = {
328
- kind: wizard_session_1.OutroKind.Success,
329
- changes,
330
- docsUrl: config.metadata.docsUrl,
331
- continueUrl,
332
- };
333
- (0, ui_1.getUI)().outro(`Successfully installed PostHog!`);
334
- await analytics_1.analytics.shutdown('success');
335
- }
336
- /**
337
- * Build the integration prompt for the agent.
338
- */
339
- function buildIntegrationPrompt(config, context, frameworkContext, cloudflareReference) {
340
- const additionalLines = config.prompts.getAdditionalContextLines
341
- ? config.prompts.getAdditionalContextLines(frameworkContext)
342
- : [];
343
- const additionalContext = additionalLines.length > 0
344
- ? '\n' + additionalLines.map((line) => `- ${line}`).join('\n')
345
- : '';
346
- const runtimeOverrides = cloudflareReference
347
- ? `\n\n---\n\n${cloudflareReference}`
348
- : '';
349
- return `You have access to the PostHog MCP server which provides skills to integrate PostHog into this ${config.metadata.name} project.
350
-
351
- Project context:
352
- - PostHog Project ID: ${context.projectId}
353
- - Framework: ${config.metadata.name} ${context.frameworkVersion}
354
- - TypeScript: ${context.typescript ? 'Yes' : 'No'}
355
- - PostHog public token: ${context.projectApiKey}
356
- - PostHog Host: ${context.host}
357
- - Project type: ${config.prompts.projectTypeDetection}
358
- - Package installation: ${config.prompts.packageInstallation ?? framework_config_1.DEFAULT_PACKAGE_INSTALLATION}${additionalContext}
359
-
360
- Instructions (follow these steps IN ORDER - do not skip or reorder):
361
-
362
- STEP 1: Call load_skill_menu (from the wizard-tools MCP server) to see available skills.
363
- If the tool fails, emit: ${agent_interface_1.AgentSignals.ERROR_MCP_MISSING} Could not load skill menu and halt.
364
-
365
- Choose a skill from the \`integration\` category that matches this project's framework. Do NOT pick skills from other categories (llm-analytics, error-tracking, feature-flags, omnibus, etc.) — those are handled separately.
366
- If no suitable integration skill is found, emit: ${agent_interface_1.AgentSignals.ERROR_RESOURCE_MISSING} Could not find a suitable skill for this project.
367
-
368
- STEP 2: Call install_skill (from the wizard-tools MCP server) with the chosen skill ID (e.g., "integration-nextjs-app-router").
369
- Do NOT run any shell commands to install skills.
370
-
371
- STEP 3: Load the installed skill's SKILL.md file to understand what references are available.
372
-
373
- STEP 4: Follow the skill's workflow files in sequence. Look for numbered workflow files in the references (e.g., files with patterns like "1.0-", "1.1-", "1.2-"). Start with the first one and proceed through each step until completion. Each workflow file will tell you what to do and which file comes next. Never directly write PostHog tokens directly to code files; always use environment variables.
374
-
375
- STEP 5: Set up environment variables for PostHog using the wizard-tools MCP server (this runs locally — secret values never leave the machine):
376
- - Use check_env_keys to see which keys already exist in the project's .env file (e.g. .env.local or .env).
377
- - Use set_env_values to create or update the PostHog public token and host, using the appropriate environment variable naming convention for ${config.metadata.name}, which you'll find in example code. The tool will also ensure .gitignore coverage. Don't assume the presence of keys means the value is up to date. Write the correct value each time.
378
- - Reference these environment variables in the code files you create instead of hardcoding the public token and host.
379
-
380
- Important: Use the detect_package_manager tool (from the wizard-tools MCP server) to determine which package manager the project uses. Do not manually search for lockfiles or config files. Always install packages as a background task. Don't await completion; proceed with other work immediately after starting the installation. You must read a file immediately before attempting to write it, even if you have previously read it; failure to do so will cause a tool failure.
381
- ${runtimeOverrides}
382
-
383
- `;
384
- }
385
- //# sourceMappingURL=agent-runner.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"agent-runner.js","sourceRoot":"","sources":["../../../src/lib/agent-runner.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwEA,wCAkVC;AA1ZD,yDAI4B;AAC5B,qDAAiE;AACjE,sDAI8B;AAG9B,2CAA4D;AAC5D,kDAA+C;AAC/C,8BAA8B;AAC9B,uDAS2B;AAC3B,wCAAsD;AAEtD,+CAAiC;AACjC,yDAGmC;AACnC,0CAAyE;AACzE,sDAAiE;AACjE,wDAI+B;AAC/B,6CAAiE;AACjE,iEAGgC;AAEhC;;GAEG;AACH,SAAS,gBAAgB,CAAC,OAAsB;IAC9C,OAAO;QACL,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,OAAO,EAAE,KAAK;QACd,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,EAAE,EAAE,OAAO,CAAC,EAAE;QACd,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,UAAU,EAAE,OAAO,CAAC,UAAU;KAC/B,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACI,KAAK,UAAU,cAAc,CAClC,MAAuB,EACvB,OAAsB;IAEtB,IAAA,mBAAW,GAAE,CAAC;IACd,IAAA,iBAAS,EAAC,oCAAoC,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;IAE7E,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QAClB,IAAA,uBAAe,GAAE,CAAC;IACpB,CAAC;IAED,gBAAgB;IAChB,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,IAAI,MAAM,CAAC,SAAS,CAAC,mBAAmB,EAAE,CAAC;QAC5E,IAAA,iBAAS,EAAC,iCAAiC,CAAC,CAAC;QAC7C,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,mBAAmB,CACxD,gBAAgB,CAAC,OAAO,CAAC,CAC1B,CAAC;QACF,IAAI,OAAO,EAAE,CAAC;YACZ,IAAA,iBAAS,EACP,0BAA0B,OAAO,YAAY,MAAM,CAAC,SAAS,CAAC,cAAc,EAAE,CAC/E,CAAC;YACF,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACvC,IAAI,OAAO,IAAI,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,EAAE,CAAC;gBACnE,MAAM,OAAO,GACX,MAAM,CAAC,QAAQ,CAAC,yBAAyB,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC;gBACvE,MAAM,IAAA,0BAAW,EAAC;oBAChB,OAAO,EACL,yCAAyC,MAAM,CAAC,QAAQ,CAAC,IAAI,IAAI,OAAO,IAAI;wBAC5E,cAAc,MAAM,CAAC,QAAQ,CAAC,IAAI,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,aAAa;wBAClF,0CAA0C;wBAC1C,SAAS,MAAM,CAAC,QAAQ,CAAC,IAAI,cAAc,OAAO,EAAE;iBACvD,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,0DAA0D;IAC1D,MAAM,aAAa,GAAG,OAAO,CAAC,QAAQ;QACpC,CAAC,CAAC,uBAAuB;QACzB,CAAC,CAAC,kEAAkE,CAAC;IAEvE,2EAA2E;IAC3E,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC;QAC7B,IAAA,iBAAS,EAAC,4CAA4C,CAAC,CAAC;QACxD,MAAM,SAAS,GAAG,MAAM,IAAA,mCAAuB,GAAE,CAAC;QAClD,IAAA,iBAAS,EAAC,4BAA4B,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC5D,IAAI,SAAS,CAAC,QAAQ,KAAK,2BAAe,CAAC,EAAE,EAAE,CAAC;YAC9C,MAAM,IAAA,UAAK,GAAE,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;QAC9C,CAAC;aAAM,IAAI,SAAS,CAAC,QAAQ,KAAK,2BAAe,CAAC,eAAe,EAAE,CAAC;YAClE,IAAA,UAAK,GAAE,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;IAED,kEAAkE;IAClE,MAAM,iBAAiB,GAAG,IAAA,2CAAyB,EAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IACxE,IAAA,iBAAS,EACP,sCACE,iBAAiB,CAAC,MAAM,GAAG,CAAC;QAC1B,CAAC,CAAC,iBAAiB;aACd,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;aAC9C,IAAI,CAAC,IAAI,CAAC;QACf,CAAC,CAAC,MACN,EAAE,CACH,CAAC;IAEF,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjC,gDAAgD;QAChD,KAAK,MAAM,QAAQ,IAAI,iBAAiB,EAAE,CAAC;YACzC,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;YACtE,qBAAS,CAAC,aAAa,CAAC,4BAA4B,EAAE;gBACpD,KAAK;gBACL,IAAI,EAAE,QAAQ,CAAC,IAAI;aACpB,CAAC,CAAC;QACL,CAAC;QAED,MAAM,IAAA,UAAK,GAAE,CAAC,oBAAoB,CAAC,iBAAiB,EAAE,GAAG,EAAE,CACzD,IAAA,4CAA0B,EAAC,OAAO,CAAC,UAAU,CAAC,CAC/C,CAAC;QACF,IAAA,iBAAS,EAAC,2CAA2C,CAAC,CAAC;IACzD,CAAC;IAED,MAAM,kBAAkB,GAAG,IAAA,+BAAiB,EAAC;QAC3C,UAAU,EAAE,OAAO,CAAC,UAAU;KAC/B,CAAC,CAAC;IACH,OAAO,CAAC,UAAU,GAAG,kBAAkB,CAAC;IAExC,kCAAkC;IAClC,MAAM,eAAe,GAAG,MAAM,CAAC,SAAS,CAAC,eAAe,KAAK,KAAK,CAAC;IACnE,IAAI,WAAW,GAA0B,IAAI,CAAC;IAC9C,IAAI,gBAAoC,CAAC;IAEzC,IAAI,eAAe,EAAE,CAAC;QACpB,WAAW,GAAG,MAAM,IAAA,+BAAiB,EAAC,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;QAC1E,IAAI,WAAW,EAAE,CAAC;YAChB,MAAM,EAAE,mBAAmB,EAAE,GAAG,MAAM,MAAM,CAAC,0BAA0B,CAAC,CAAC;YACzE,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,SAAS,CAAC,WAAW,EAAE,WAAW,CAAC,EAAE,CAAC;gBACpE,IAAA,UAAK,GAAE,CAAC,GAAG,CAAC,IAAI,CACd,GAAG,MAAM,CAAC,SAAS,CAAC,kBAAkB,+EAA+E,CACtH,CAAC;YACJ,CAAC;YACD,gBAAgB,GAAG,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;QAC9D,CAAC;aAAM,CAAC;YACN,IAAA,UAAK,GAAE,CAAC,GAAG,CAAC,IAAI,CACd,4EAA4E,CAC7E,CAAC;QACJ,CAAC;IACH,CAAC;SAAM,CAAC;QACN,gBAAgB,GAAG,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IACvD,CAAC;IAED,2CAA2C;IAC3C,IAAI,gBAAgB,IAAI,MAAM,CAAC,SAAS,CAAC,gBAAgB,EAAE,CAAC;QAC1D,MAAM,aAAa,GAAG,MAAM,CAAC,SAAS,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;QAC1E,qBAAS,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,WAAW,UAAU,EAAE,aAAa,CAAC,CAAC;IAC5E,CAAC;IAED,qBAAS,CAAC,aAAa,CAAC,eAAe,EAAE;QACvC,WAAW,EAAE,MAAM,CAAC,QAAQ,CAAC,WAAW;KACzC,CAAC,CAAC;IAEH,4DAA4D;IAC5D,IAAA,iBAAS,EAAC,+BAA+B,CAAC,CAAC;IAC3C,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW,EAAE,GAChE,MAAM,IAAA,oCAAsB,EAAC;QAC3B,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,EAAE,EAAE,OAAO,CAAC,EAAE;QACd,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,SAAS,EAAE,OAAO,CAAC,SAAS;KAC7B,CAAC,CAAC;IAEL,OAAO,CAAC,WAAW,GAAG,EAAE,WAAW,EAAE,aAAa,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IAEtE,uEAAuE;IACvE,IAAA,UAAK,GAAE,CAAC,cAAc,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAE5C,oEAAoE;IACpE,MAAM,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAElD,4CAA4C;IAC5C,MAAM,WAAW,GAAG,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC/D,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;QACnD,qBAAS,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEH,yEAAyE;IACzE,MAAM,YAAY,GAAG,MAAM,IAAA,6CAAsB,EAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IACtE,IAAI,mBAAmB,GAAkB,IAAI,CAAC;IAC9C,IAAI,YAAY,EAAE,CAAC;QACjB,IAAA,iBAAS,EAAC,mDAAmD,CAAC,CAAC;QAC/D,qBAAS,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;QACvC,mBAAmB,GAAG,MAAM,IAAA,+CAAwB,EAAC,aAAa,CAAC,CAAC;IACtE,CAAC;IAED,MAAM,iBAAiB,GAAG,sBAAsB,CAC9C,MAAM,EACN;QACE,gBAAgB,EAAE,gBAAgB,IAAI,QAAQ;QAC9C,UAAU,EAAE,kBAAkB;QAC9B,aAAa;QACb,IAAI;QACJ,SAAS;KACV,EACD,gBAAgB,EAChB,mBAAmB,CACpB,CAAC;IAEF,2BAA2B;IAC3B,MAAM,OAAO,GAAG,IAAA,UAAK,GAAE,CAAC,OAAO,EAAE,CAAC;IAElC,4FAA4F;IAC5F,MAAM,WAAW,GAAG,MAAM,qBAAS,CAAC,oBAAoB,EAAE,CAAC;IAC3D,MAAM,cAAc,GAAG,IAAA,qCAAmB,EAAC,WAAW,CAAC,CAAC;IAExD,6DAA6D;IAC7D,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ;QAC7B,CAAC,CAAC,2BAA2B;QAC7B,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO;YACnB,CAAC,WAAW,KAAK,IAAI;gBACnB,CAAC,CAAC,gCAAgC;gBAClC,CAAC,CAAC,6BAA6B,CAAC,CAAC;IAEvC,MAAM,eAAe,GAAG,GAAG,EAAE,CAAC,IAAA,uCAAqB,EAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IACxE,IAAA,UAAK,GAAE,CAAC,aAAa,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;IAEhD,uFAAuF;IACvF,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;QACvB,IAAA,8BAAe,EAAC,GAAG,EAAE;YACnB,MAAM,UAAU,GAAG,IAAA,4BAAe,GAAE,CAAC;YACrC,IAAI,UAAU,EAAE,CAAC;gBACf,MAAM,OAAO,GAAG,IAAA,6BAAgB,GAAE,CAAC;gBACnC,IAAA,UAAK,GAAE,CAAC,GAAG,CAAC,IAAI,CAAC,qBAAqB,UAAU,GAAG,OAAO,IAAI,EAAE,EAAE,CAAC,CAAC;YACtE,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,IAAA,UAAK,GAAE,CAAC,QAAQ,EAAE,CAAC;IAEnB,MAAM,KAAK,GAAG,MAAM,IAAA,iCAAe,EACjC;QACE,gBAAgB,EAAE,OAAO,CAAC,UAAU;QACpC,aAAa,EAAE,MAAM;QACrB,aAAa,EAAE,WAAW;QAC1B,cAAc,EAAE,IAAI;QACpB,oBAAoB,EAAE,MAAM,CAAC,QAAQ,CAAC,oBAAoB;QAC1D,oBAAoB,EAAE,MAAM,CAAC,SAAS,CAAC,oBAAoB;QAC3D,aAAa;QACb,WAAW;QACX,cAAc;KACf,EACD,gBAAgB,CAAC,OAAO,CAAC,CAC1B,CAAC;IAEF,MAAM,UAAU,GAAG,OAAO,CAAC,SAAS;QAClC,CAAC,CAAC,IAAA,mCAAuB,EAAC,OAAO,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAC7D,CAAC,CAAC,SAAS,CAAC;IAEd,MAAM,WAAW,GAAG,MAAM,IAAA,0BAAQ,EAChC,KAAK,EACL,iBAAiB,EACjB,gBAAgB,CAAC,OAAO,CAAC,EACzB,OAAO,EACP;QACE,wBAAwB,EAAE,MAAM,CAAC,EAAE,CAAC,wBAAwB;QAC5D,cAAc,EAAE,kCAAe;QAC/B,cAAc,EAAE,MAAM,CAAC,EAAE,CAAC,cAAc;QACxC,YAAY,EAAE,oBAAoB;QAClC,sBAAsB,EAAE,OAAO,CAAC,sBAAsB;KACvD,EACD,UAAU,CACX,CAAC;IAEF,8CAA8C;IAC9C,IAAI,WAAW,CAAC,KAAK,KAAK,gCAAc,CAAC,WAAW,EAAE,CAAC;QACrD,MAAM,IAAA,0BAAW,EAAC;YAChB,OAAO,EAAE,2MAA2M,MAAM,CAAC,QAAQ,CAAC,IAAI,8CAA8C,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE;YAC/S,KAAK,EAAE,IAAI,0BAAW,CAAC,2CAA2C,EAAE;gBAClE,WAAW,EAAE,MAAM,CAAC,QAAQ,CAAC,WAAW;gBACxC,UAAU,EAAE,gCAAc,CAAC,WAAW;gBACtC,MAAM,EAAE,8BAAY,CAAC,iBAAiB;aACvC,CAAC;SACH,CAAC,CAAC;IACL,CAAC;IAED,IAAI,WAAW,CAAC,KAAK,KAAK,gCAAc,CAAC,gBAAgB,EAAE,CAAC;QAC1D,MAAM,IAAA,0BAAW,EAAC;YAChB,OAAO,EAAE,4LAA4L,MAAM,CAAC,QAAQ,CAAC,IAAI,8CAA8C,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE;YAChS,KAAK,EAAE,IAAI,0BAAW,CAAC,uCAAuC,EAAE;gBAC9D,WAAW,EAAE,MAAM,CAAC,QAAQ,CAAC,WAAW;gBACxC,UAAU,EAAE,gCAAc,CAAC,gBAAgB;gBAC3C,MAAM,EAAE,8BAAY,CAAC,sBAAsB;aAC5C,CAAC;SACH,CAAC,CAAC;IACL,CAAC;IAED,IAAI,WAAW,CAAC,KAAK,KAAK,gCAAc,CAAC,cAAc,EAAE,CAAC;QACxD,MAAM,IAAA,0BAAW,EAAC;YAChB,OAAO,EACL,0OAA0O;YAC5O,KAAK,EAAE,IAAI,0BAAW,CAAC,iCAAiC,EAAE;gBACxD,WAAW,EAAE,MAAM,CAAC,QAAQ,CAAC,WAAW;gBACxC,UAAU,EAAE,gCAAc,CAAC,cAAc;aAC1C,CAAC;SACH,CAAC,CAAC;IACL,CAAC;IAED,IACE,WAAW,CAAC,KAAK,KAAK,gCAAc,CAAC,UAAU;QAC/C,WAAW,CAAC,KAAK,KAAK,gCAAc,CAAC,SAAS,EAC9C,CAAC;QACD,qBAAS,CAAC,aAAa,CAAC,iBAAiB,EAAE;YACzC,WAAW,EAAE,MAAM,CAAC,QAAQ,CAAC,WAAW;YACxC,UAAU,EAAE,WAAW,CAAC,KAAK;YAC7B,aAAa,EAAE,WAAW,CAAC,OAAO;SACnC,CAAC,CAAC;QAEH,MAAM,IAAA,0BAAW,EAAC;YAChB,OAAO,EAAE,gBACP,WAAW,CAAC,OAAO,IAAI,eACzB,qDAAqD;YACrD,KAAK,EAAE,IAAI,0BAAW,CAAC,cAAc,WAAW,CAAC,OAAO,EAAE,EAAE;gBAC1D,WAAW,EAAE,MAAM,CAAC,QAAQ,CAAC,WAAW;gBACxC,UAAU,EAAE,WAAW,CAAC,KAAK;aAC9B,CAAC;SACH,CAAC,CAAC;IACL,CAAC;IAED,qDAAqD;IACrD,MAAM,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;IAEnE,kEAAkE;IAClE,IAAI,eAAe,GAAa,EAAE,CAAC;IACnC,IAAI,MAAM,CAAC,WAAW,CAAC,eAAe,EAAE,CAAC;QACvC,MAAM,EAAE,8BAA8B,EAAE,GAAG,MAAM,MAAM,CACrD,mBAAmB,CACpB,CAAC;QACF,eAAe,GAAG,MAAM,8BAA8B,CAAC,OAAO,EAAE;YAC9D,WAAW,EAAE,MAAM,CAAC,QAAQ,CAAC,WAAW;YACxC,OAAO;SACR,CAAC,CAAC;QACH,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/B,qBAAS,CAAC,OAAO,CAAC,yCAA6B,EAAE;gBAC/C,MAAM,EAAE,0BAA0B;gBAClC,WAAW,EAAE,MAAM,CAAC,QAAQ,CAAC,WAAW;gBACxC,cAAc,EAAE,eAAe,CAAC,MAAM;gBACtC,aAAa,EAAE,eAAe;aAC/B,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,4DAA4D;IAE5D,gDAAgD;IAChD,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM;QAChC,CAAC,CAAC,GAAG,IAAA,4BAAqB,EAAC,WAAW,CAAC,yBAAyB;QAChE,CAAC,CAAC,SAAS,CAAC;IAEd,MAAM,OAAO,GAAG;QACd,GAAG,MAAM,CAAC,EAAE,CAAC,eAAe,CAAC,gBAAgB,CAAC;QAC9C,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC;YAC7B,CAAC,CAAC,0CAA0C;YAC5C,CAAC,CAAC,EAAE;QACN,eAAe,CAAC,MAAM,GAAG,CAAC;YACxB,CAAC,CAAC,yDAAyD;YAC3D,CAAC,CAAC,EAAE;KACP,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAElB,OAAO,CAAC,SAAS,GAAG;QAClB,IAAI,EAAE,0BAAS,CAAC,OAAO;QACvB,OAAO;QACP,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,OAAO;QAChC,WAAW;KACZ,CAAC;IAEF,IAAA,UAAK,GAAE,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;IAEjD,MAAM,qBAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;AACtC,CAAC;AAED;;GAEG;AACH,SAAS,sBAAsB,CAC7B,MAAuB,EACvB,OAMC,EACD,gBAAyC,EACzC,mBAAmC;IAEnC,MAAM,eAAe,GAAG,MAAM,CAAC,OAAO,CAAC,yBAAyB;QAC9D,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,yBAAyB,CAAC,gBAAgB,CAAC;QAC5D,CAAC,CAAC,EAAE,CAAC;IAEP,MAAM,iBAAiB,GACrB,eAAe,CAAC,MAAM,GAAG,CAAC;QACxB,CAAC,CAAC,IAAI,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QAC9D,CAAC,CAAC,EAAE,CAAC;IAET,MAAM,gBAAgB,GAAG,mBAAmB;QAC1C,CAAC,CAAC,cAAc,mBAAmB,EAAE;QACrC,CAAC,CAAC,EAAE,CAAC;IAEP,OAAO,kGACL,MAAM,CAAC,QAAQ,CAAC,IAClB;;;wBAGsB,OAAO,CAAC,SAAS;eAC1B,MAAM,CAAC,QAAQ,CAAC,IAAI,IAAI,OAAO,CAAC,gBAAgB;gBAC/C,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI;0BACvB,OAAO,CAAC,aAAa;kBAC7B,OAAO,CAAC,IAAI;kBACZ,MAAM,CAAC,OAAO,CAAC,oBAAoB;0BAEjD,MAAM,CAAC,OAAO,CAAC,mBAAmB,IAAI,+CACxC,GAAG,iBAAiB;;;;;8BAMjB,8BAAY,CAAC,iBACf;;;sDAIE,8BAAY,CAAC,sBACf;;;;;;;;;;;kJAYE,MAAM,CAAC,QAAQ,CAAC,IAClB;;;;EAID,gBAAgB;;CAEjB,CAAC;AACF,CAAC","sourcesContent":["import {\n DEFAULT_PACKAGE_INSTALLATION,\n SPINNER_MESSAGE,\n type FrameworkConfig,\n} from './framework-config';\nimport { type WizardSession, OutroKind } from './wizard-session';\nimport {\n tryGetPackageJson,\n isUsingTypeScript,\n getOrAskForProjectData,\n} from '../utils/setup-utils';\nimport type { PackageDotJson } from '../utils/package-json';\nimport type { WizardOptions } from '../utils/types';\nimport { WIZARD_INTERACTION_EVENT_NAME } from './constants';\nimport { analytics } from '../utils/analytics';\nimport { getUI } from '../ui';\nimport {\n initializeAgent,\n runAgent,\n AgentSignals,\n AgentErrorType,\n buildWizardMetadata,\n checkAllSettingsConflicts,\n backupAndFixClaudeSettings,\n restoreClaudeSettings,\n} from './agent-interface';\nimport { getCloudUrlFromRegion } from '../utils/urls';\n\nimport * as semver from 'semver';\nimport {\n evaluateWizardReadiness,\n WizardReadiness,\n} from './health-checks/readiness';\nimport { enableDebugLogs, initLogFile, logToFile } from '../utils/debug';\nimport { createBenchmarkPipeline } from './middleware/benchmark';\nimport {\n wizardAbort,\n WizardError,\n registerCleanup,\n} from '../utils/wizard-abort';\nimport { formatScanReport, writeScanReport } from './yara-hooks';\nimport {\n detectCloudflareTarget,\n fetchCloudflareReference,\n} from './cloudflare-detection';\n\n/**\n * Build a WizardOptions bag from a WizardSession (for code that still expects WizardOptions).\n */\nfunction sessionToOptions(session: WizardSession): WizardOptions {\n return {\n installDir: session.installDir,\n debug: session.debug,\n forceInstall: session.forceInstall,\n default: false,\n signup: session.signup,\n localMcp: session.localMcp,\n ci: session.ci,\n menu: session.menu,\n benchmark: session.benchmark,\n projectId: session.projectId,\n apiKey: session.apiKey,\n yaraReport: session.yaraReport,\n };\n}\n\n/**\n * Universal agent-powered wizard runner.\n * Handles the complete flow for any framework using PostHog MCP integration.\n *\n * All user decisions come from the session — no UI prompts.\n */\nexport async function runAgentWizard(\n config: FrameworkConfig,\n session: WizardSession,\n): Promise<void> {\n initLogFile();\n logToFile(`[agent-runner] START integration=${config.metadata.integration}`);\n\n if (session.debug) {\n enableDebugLogs();\n }\n\n // Version check\n if (config.detection.minimumVersion && config.detection.getInstalledVersion) {\n logToFile('[agent-runner] checking version');\n const version = await config.detection.getInstalledVersion(\n sessionToOptions(session),\n );\n if (version) {\n logToFile(\n `[agent-runner] version=${version} minimum=${config.detection.minimumVersion}`,\n );\n const coerced = semver.coerce(version);\n if (coerced && semver.lt(coerced, config.detection.minimumVersion)) {\n const docsUrl =\n config.metadata.unsupportedVersionDocsUrl ?? config.metadata.docsUrl;\n await wizardAbort({\n message:\n `Sorry: the wizard can't help you with ${config.metadata.name} ${version}. ` +\n `Upgrade to ${config.metadata.name} ${config.detection.minimumVersion} or later, ` +\n `or check out the manual setup guide.\\n\\n` +\n `Setup ${config.metadata.name} manually: ${docsUrl}`,\n });\n }\n }\n }\n\n // Compute skills server URL (needed for agent tool calls)\n const skillsBaseUrl = session.localMcp\n ? 'http://localhost:8765'\n : 'https://github.com/PostHog/context-mill/releases/latest/download';\n\n // Check all external service health (skip if TUI already ran it in bin.ts)\n if (!session.readinessResult) {\n logToFile('[agent-runner] evaluating wizard readiness');\n const readiness = await evaluateWizardReadiness();\n logToFile(`[agent-runner] readiness=${readiness.decision}`);\n if (readiness.decision === WizardReadiness.No) {\n await getUI().showBlockingOutage(readiness);\n } else if (readiness.decision === WizardReadiness.YesWithWarnings) {\n getUI().setReadinessWarnings(readiness);\n }\n }\n\n // Check ALL settings sources for blocking overrides before login.\n const settingsConflicts = checkAllSettingsConflicts(session.installDir);\n logToFile(\n `[agent-runner] settings conflicts: ${\n settingsConflicts.length > 0\n ? settingsConflicts\n .map((c) => `${c.source}(${c.keys.join(',')})`)\n .join('; ')\n : 'none'\n }`,\n );\n\n if (settingsConflicts.length > 0) {\n // Capture analytics for each conflict variation\n for (const conflict of settingsConflicts) {\n const level = conflict.source === 'managed' ? 'org' : conflict.source;\n analytics.wizardCapture('settings conflict detected', {\n level,\n keys: conflict.keys,\n });\n }\n\n await getUI().showSettingsOverride(settingsConflicts, () =>\n backupAndFixClaudeSettings(session.installDir),\n );\n logToFile('[agent-runner] settings override resolved');\n }\n\n const typeScriptDetected = isUsingTypeScript({\n installDir: session.installDir,\n });\n session.typescript = typeScriptDetected;\n\n // Framework detection and version\n const usesPackageJson = config.detection.usesPackageJson !== false;\n let packageJson: PackageDotJson | null = null;\n let frameworkVersion: string | undefined;\n\n if (usesPackageJson) {\n packageJson = await tryGetPackageJson({ installDir: session.installDir });\n if (packageJson) {\n const { hasPackageInstalled } = await import('../utils/package-json.js');\n if (!hasPackageInstalled(config.detection.packageName, packageJson)) {\n getUI().log.warn(\n `${config.detection.packageDisplayName} does not seem to be installed. Continuing anyway — the agent will handle it.`,\n );\n }\n frameworkVersion = config.detection.getVersion(packageJson);\n } else {\n getUI().log.warn(\n 'Could not find package.json. Continuing anyway — the agent will handle it.',\n );\n }\n } else {\n frameworkVersion = config.detection.getVersion(null);\n }\n\n // Set analytics tags for framework version\n if (frameworkVersion && config.detection.getVersionBucket) {\n const versionBucket = config.detection.getVersionBucket(frameworkVersion);\n analytics.setTag(`${config.metadata.integration}-version`, versionBucket);\n }\n\n analytics.wizardCapture('agent started', {\n integration: config.metadata.integration,\n });\n\n // Get PostHog credentials (region auto-detected from token)\n logToFile('[agent-runner] starting OAuth');\n const { projectApiKey, host, accessToken, projectId, cloudRegion } =\n await getOrAskForProjectData({\n signup: session.signup,\n ci: session.ci,\n apiKey: session.apiKey,\n email: session.email,\n region: session.region,\n projectId: session.projectId,\n });\n\n session.credentials = { accessToken, projectApiKey, host, projectId };\n\n // Notify TUI that credentials are available (resolves past AuthScreen)\n getUI().setCredentials(session.credentials);\n\n // Framework context was already gathered by SetupScreen + detection\n const frameworkContext = session.frameworkContext;\n\n // Set analytics tags from framework context\n const contextTags = config.analytics.getTags(frameworkContext);\n Object.entries(contextTags).forEach(([key, value]) => {\n analytics.setTag(key, value);\n });\n\n // Detect Cloudflare Workers target and fetch runtime reference if needed\n const isCloudflare = await detectCloudflareTarget(session.installDir);\n let cloudflareReference: string | null = null;\n if (isCloudflare) {\n logToFile('[agent-runner] Cloudflare Workers target detected');\n analytics.setTag('cloudflare', 'true');\n cloudflareReference = await fetchCloudflareReference(skillsBaseUrl);\n }\n\n const integrationPrompt = buildIntegrationPrompt(\n config,\n {\n frameworkVersion: frameworkVersion || 'latest',\n typescript: typeScriptDetected,\n projectApiKey,\n host,\n projectId,\n },\n frameworkContext,\n cloudflareReference,\n );\n\n // Initialize and run agent\n const spinner = getUI().spinner();\n\n // Evaluate all feature flags at the start of the run so they can be sent to the LLM gateway\n const wizardFlags = await analytics.getAllFlagsForWizard();\n const wizardMetadata = buildWizardMetadata(wizardFlags);\n\n // Determine MCP URL: CLI flag > env var > production default\n const mcpUrl = session.localMcp\n ? 'http://localhost:8787/mcp'\n : process.env.MCP_URL ||\n (cloudRegion === 'eu'\n ? 'https://mcp-eu.posthog.com/mcp'\n : 'https://mcp.posthog.com/mcp');\n\n const restoreSettings = () => restoreClaudeSettings(session.installDir);\n getUI().onEnterScreen('outro', restoreSettings);\n\n // Register YARA report as cleanup so it fires on any exit path (including wizardAbort)\n if (session.yaraReport) {\n registerCleanup(() => {\n const reportPath = writeScanReport();\n if (reportPath) {\n const summary = formatScanReport();\n getUI().log.info(`YARA scan report: ${reportPath}${summary ?? ''}`);\n }\n });\n }\n\n getUI().startRun();\n\n const agent = await initializeAgent(\n {\n workingDirectory: session.installDir,\n posthogMcpUrl: mcpUrl,\n posthogApiKey: accessToken,\n posthogApiHost: host,\n additionalMcpServers: config.metadata.additionalMcpServers,\n detectPackageManager: config.detection.detectPackageManager,\n skillsBaseUrl,\n wizardFlags,\n wizardMetadata,\n },\n sessionToOptions(session),\n );\n\n const middleware = session.benchmark\n ? createBenchmarkPipeline(spinner, sessionToOptions(session))\n : undefined;\n\n const agentResult = await runAgent(\n agent,\n integrationPrompt,\n sessionToOptions(session),\n spinner,\n {\n estimatedDurationMinutes: config.ui.estimatedDurationMinutes,\n spinnerMessage: SPINNER_MESSAGE,\n successMessage: config.ui.successMessage,\n errorMessage: 'Integration failed',\n additionalFeatureQueue: session.additionalFeatureQueue,\n },\n middleware,\n );\n\n // Handle error cases detected in agent output\n if (agentResult.error === AgentErrorType.MCP_MISSING) {\n await wizardAbort({\n message: `Could not access the PostHog MCP server\\n\\nThe wizard was unable to connect to the PostHog MCP server.\\nThis could be due to a network issue or a configuration problem.\\n\\nPlease try again, or set up ${config.metadata.name} manually by following our documentation:\\n${config.metadata.docsUrl}`,\n error: new WizardError('Agent could not access PostHog MCP server', {\n integration: config.metadata.integration,\n error_type: AgentErrorType.MCP_MISSING,\n signal: AgentSignals.ERROR_MCP_MISSING,\n }),\n });\n }\n\n if (agentResult.error === AgentErrorType.RESOURCE_MISSING) {\n await wizardAbort({\n message: `Could not access the setup resource\\n\\nThe wizard could not access the setup resource. This may indicate a version mismatch or a temporary service issue.\\n\\nPlease try again, or set up ${config.metadata.name} manually by following our documentation:\\n${config.metadata.docsUrl}`,\n error: new WizardError('Agent could not access setup resource', {\n integration: config.metadata.integration,\n error_type: AgentErrorType.RESOURCE_MISSING,\n signal: AgentSignals.ERROR_RESOURCE_MISSING,\n }),\n });\n }\n\n if (agentResult.error === AgentErrorType.YARA_VIOLATION) {\n await wizardAbort({\n message:\n 'Security violation detected\\n\\nThe YARA scanner terminated the session after detecting a security violation.\\nThis may indicate prompt injection, poisoned skill files, or a policy breach.\\n\\nPlease report this to: wizard@posthog.com',\n error: new WizardError('YARA scanner terminated session', {\n integration: config.metadata.integration,\n error_type: AgentErrorType.YARA_VIOLATION,\n }),\n });\n }\n\n if (\n agentResult.error === AgentErrorType.RATE_LIMIT ||\n agentResult.error === AgentErrorType.API_ERROR\n ) {\n analytics.wizardCapture('agent api error', {\n integration: config.metadata.integration,\n error_type: agentResult.error,\n error_message: agentResult.message,\n });\n\n await wizardAbort({\n message: `API Error\\n\\n${\n agentResult.message || 'Unknown error'\n }\\n\\nPlease report this error to: wizard@posthog.com`,\n error: new WizardError(`API error: ${agentResult.message}`, {\n integration: config.metadata.integration,\n error_type: agentResult.error,\n }),\n });\n }\n\n // Build environment variables from OAuth credentials\n const envVars = config.environment.getEnvVars(projectApiKey, host);\n\n // Upload environment variables to hosting providers (auto-accept)\n let uploadedEnvVars: string[] = [];\n if (config.environment.uploadToHosting) {\n const { uploadEnvironmentVariablesStep } = await import(\n '../steps/index.js'\n );\n uploadedEnvVars = await uploadEnvironmentVariablesStep(envVars, {\n integration: config.metadata.integration,\n session,\n });\n if (uploadedEnvVars.length > 0) {\n analytics.capture(WIZARD_INTERACTION_EVENT_NAME, {\n action: 'wizard_env_vars_uploaded',\n integration: config.metadata.integration,\n variable_count: uploadedEnvVars.length,\n variable_keys: uploadedEnvVars,\n });\n }\n }\n\n // MCP installation is handled by McpScreen — no prompt here\n\n // Build outro data and store it for OutroScreen\n const continueUrl = session.signup\n ? `${getCloudUrlFromRegion(cloudRegion)}/products?source=wizard`\n : undefined;\n\n const changes = [\n ...config.ui.getOutroChanges(frameworkContext),\n Object.keys(envVars).length > 0\n ? `Added environment variables to .env file`\n : '',\n uploadedEnvVars.length > 0\n ? `Uploaded environment variables to your hosting provider`\n : '',\n ].filter(Boolean);\n\n session.outroData = {\n kind: OutroKind.Success,\n changes,\n docsUrl: config.metadata.docsUrl,\n continueUrl,\n };\n\n getUI().outro(`Successfully installed PostHog!`);\n\n await analytics.shutdown('success');\n}\n\n/**\n * Build the integration prompt for the agent.\n */\nfunction buildIntegrationPrompt(\n config: FrameworkConfig,\n context: {\n frameworkVersion: string;\n typescript: boolean;\n projectApiKey: string;\n host: string;\n projectId: number;\n },\n frameworkContext: Record<string, unknown>,\n cloudflareReference?: string | null,\n): string {\n const additionalLines = config.prompts.getAdditionalContextLines\n ? config.prompts.getAdditionalContextLines(frameworkContext)\n : [];\n\n const additionalContext =\n additionalLines.length > 0\n ? '\\n' + additionalLines.map((line) => `- ${line}`).join('\\n')\n : '';\n\n const runtimeOverrides = cloudflareReference\n ? `\\n\\n---\\n\\n${cloudflareReference}`\n : '';\n\n return `You have access to the PostHog MCP server which provides skills to integrate PostHog into this ${\n config.metadata.name\n } project.\n\nProject context:\n- PostHog Project ID: ${context.projectId}\n- Framework: ${config.metadata.name} ${context.frameworkVersion}\n- TypeScript: ${context.typescript ? 'Yes' : 'No'}\n- PostHog public token: ${context.projectApiKey}\n- PostHog Host: ${context.host}\n- Project type: ${config.prompts.projectTypeDetection}\n- Package installation: ${\n config.prompts.packageInstallation ?? DEFAULT_PACKAGE_INSTALLATION\n }${additionalContext}\n\nInstructions (follow these steps IN ORDER - do not skip or reorder):\n\nSTEP 1: Call load_skill_menu (from the wizard-tools MCP server) to see available skills.\n If the tool fails, emit: ${\n AgentSignals.ERROR_MCP_MISSING\n } Could not load skill menu and halt.\n\n Choose a skill from the \\`integration\\` category that matches this project's framework. Do NOT pick skills from other categories (llm-analytics, error-tracking, feature-flags, omnibus, etc.) — those are handled separately.\n If no suitable integration skill is found, emit: ${\n AgentSignals.ERROR_RESOURCE_MISSING\n } Could not find a suitable skill for this project.\n\nSTEP 2: Call install_skill (from the wizard-tools MCP server) with the chosen skill ID (e.g., \"integration-nextjs-app-router\").\n Do NOT run any shell commands to install skills.\n\nSTEP 3: Load the installed skill's SKILL.md file to understand what references are available.\n\nSTEP 4: Follow the skill's workflow files in sequence. Look for numbered workflow files in the references (e.g., files with patterns like \"1.0-\", \"1.1-\", \"1.2-\"). Start with the first one and proceed through each step until completion. Each workflow file will tell you what to do and which file comes next. Never directly write PostHog tokens directly to code files; always use environment variables.\n\nSTEP 5: Set up environment variables for PostHog using the wizard-tools MCP server (this runs locally — secret values never leave the machine):\n - Use check_env_keys to see which keys already exist in the project's .env file (e.g. .env.local or .env).\n - Use set_env_values to create or update the PostHog public token and host, using the appropriate environment variable naming convention for ${\n config.metadata.name\n }, which you'll find in example code. The tool will also ensure .gitignore coverage. Don't assume the presence of keys means the value is up to date. Write the correct value each time.\n - Reference these environment variables in the code files you create instead of hardcoding the public token and host.\n\nImportant: Use the detect_package_manager tool (from the wizard-tools MCP server) to determine which package manager the project uses. Do not manually search for lockfiles or config files. Always install packages as a background task. Don't await completion; proceed with other work immediately after starting the installation. You must read a file immediately before attempting to write it, even if you have previously read it; failure to do so will cause a tool failure.\n${runtimeOverrides}\n\n`;\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"commandments.js","sourceRoot":"","sources":["../../../src/lib/commandments.ts"],"names":[],"mappings":";;AA8BA,sDAEC;AAhCD;;;;;GAKG;AACH,MAAM,mBAAmB,GAAG;IAC1B,sLAAsL;IAEtL,4OAA4O;IAE5O,4LAA4L;IAE5L,oLAAoL;IAEpL,uMAAuM;IAEvM,gVAAgV;IAEhV,gNAAgN;IAEhN,+DAA+D;IAE/D,qfAAqf;IAErf,+LAA+L;IAE/L,2SAA2S;CAC5S,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEb,SAAgB,qBAAqB;IACnC,OAAO,mBAAmB,CAAC;AAC7B,CAAC","sourcesContent":["/**\n * Wizard-wide commandments that are always appended as a system prompt.\n *\n * Keep this as a simple string so it can be inlined into the compiled bundle\n * without extra files, copying, or runtime I/O.\n */\nconst WIZARD_COMMANDMENTS = [\n 'Never hallucinate a PostHog project token, host, or any other secret. Always use the real values that have been configured for this project (for example via environment variables).',\n\n 'Never write API keys, access tokens, or other secrets directly into source code. Always reference environment variables instead, and rely on the wizard-tools MCP server (check_env_keys / set_env_values) to create or update .env files.',\n\n 'Always use the detect_package_manager tool from the wizard-tools MCP server to determine the package manager. Do not guess based on lockfiles or hard-code npm, yarn, pnpm, bun, pip, etc.',\n\n 'When installing packages, start the installation as a background task and then continue with other work. Do not block waiting for installs to finish unless explicitly instructed.',\n\n 'Before writing to any file, you MUST read that exact file immediately beforehand using the Read tool, even if you have already read it earlier in the run. This avoids tool failures and stale edits.',\n\n 'Treat feature flags, custom properties, and event names as part of an analytics contract. Prefer reusing existing names and patterns in the project. When you must introduce new ones, make them clear, descriptive, and consistent with existing conventions, and avoid scattering the same flag or property across many unrelated callsites.',\n\n 'Prefer minimal, targeted edits that achieve the requested behavior while preserving existing structure and style. Avoid large refactors, broad reformatting, or unrelated changes unless explicitly requested.',\n\n 'Do not spawn subagents unless explicitly instructed to do so.',\n\n 'After reading the integration skill, use the TodoWrite tool to track your progress. Create a todo list at the describing the high-level areas of work, mark each as in_progress when you begin it, and completed when done. Describe high-level tasks from the workflow (\"inserting event tracking code\", etc), not specific files or lines. For each new stage of the integration, create additional todos if necessary. Create a final \"wrapping up\" step and mark it completed when the integration is complete.',\n\n 'Do not assume \"PostHog provider\" or \"PostHogProvider\" in todo labels, status messages, or code. Only use a provider if the skill workflow explicitly requires one for the specific framework.',\n\n 'If you see a [YARA WARNING] or [YARA VIOLATION] message, handle it silently. Fix the issue (revert the write, avoid the flagged pattern) without mentioning security warnings or YARA to the user. These are internal guardrails, not user-facing alerts. Never show scary security language to the user.',\n].join('\\n');\n\nexport function getWizardCommandments(): string {\n return WIZARD_COMMANDMENTS;\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"package-manager-detection.js","sourceRoot":"","sources":["../../../src/lib/package-manager-detection.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Cross-ecosystem package manager detection.\n *\n * Provides a common interface (PackageManagerDetector) that each FrameworkConfig\n * implements, plus shared helpers for Node.js, Python, PHP, and Swift ecosystems.\n * The MCP tool in wizard-tools.ts delegates to whatever detector the\n * current framework supplies.\n */\n\nimport {\n detectAllPackageManagers,\n type PackageManager,\n} from '../utils/package-manager';\nimport {\n detectPackageManager as detectPythonPM,\n PythonPackageManager,\n} from '../frameworks/python/utils';\n\n// ---------------------------------------------------------------------------\n// Common types\n// ---------------------------------------------------------------------------\n\n/** Structured package manager info the agent can act on */\nexport interface DetectedPackageManager {\n name: string;\n label: string;\n installCommand: string;\n runCommand?: string;\n}\n\n/** Result returned by every detector */\nexport interface PackageManagerInfo {\n detected: DetectedPackageManager[];\n primary: DetectedPackageManager | null;\n recommendation: string;\n}\n\n/** Signature each framework implements */\nexport type PackageManagerDetector = (\n installDir: string,\n) => Promise<PackageManagerInfo>;\n\n// ---------------------------------------------------------------------------\n// Node.js helper\n// ---------------------------------------------------------------------------\n\nfunction serializeNodePM(pm: PackageManager): DetectedPackageManager {\n return {\n name: pm.name,\n label: pm.label,\n installCommand: pm.installCommand,\n runCommand: pm.runScriptCommand,\n };\n}\n\n/**\n * Detect Node.js package managers via lockfiles.\n * Wraps the existing detectAllPackageManagers() from utils/package-manager.ts.\n */\nexport function detectNodePackageManagers(\n installDir: string,\n): Promise<PackageManagerInfo> {\n const detected = detectAllPackageManagers({ installDir }).map(\n serializeNodePM,\n );\n\n if (detected.length === 0) {\n return Promise.resolve({\n detected: [],\n primary: null,\n recommendation: 'No lockfile found. Default to npm (npm add, npm run).',\n });\n }\n\n const primary = detected[0];\n return Promise.resolve({\n detected,\n primary,\n recommendation:\n detected.length === 1\n ? `Use ${primary.label} (${primary.installCommand}).`\n : `Multiple package managers detected. Prefer ${primary.label} (${primary.installCommand}).`,\n });\n}\n\n// ---------------------------------------------------------------------------\n// Python helper\n// ---------------------------------------------------------------------------\n\nconst PYTHON_PM_INFO: Record<PythonPackageManager, DetectedPackageManager> = {\n [PythonPackageManager.UV]: {\n name: 'uv',\n label: 'uv',\n installCommand: 'uv add',\n runCommand: 'uv run',\n },\n [PythonPackageManager.POETRY]: {\n name: 'poetry',\n label: 'Poetry',\n installCommand: 'poetry add',\n runCommand: 'poetry run',\n },\n [PythonPackageManager.PDM]: {\n name: 'pdm',\n label: 'PDM',\n installCommand: 'pdm add',\n runCommand: 'pdm run',\n },\n [PythonPackageManager.HATCH]: {\n name: 'hatch',\n label: 'Hatch',\n installCommand: 'hatch add',\n runCommand: 'hatch run',\n },\n [PythonPackageManager.RYE]: {\n name: 'rye',\n label: 'Rye',\n installCommand: 'rye add',\n runCommand: 'rye run',\n },\n [PythonPackageManager.PIPENV]: {\n name: 'pipenv',\n label: 'Pipenv',\n installCommand: 'pipenv install',\n runCommand: 'pipenv run',\n },\n [PythonPackageManager.CONDA]: {\n name: 'conda',\n label: 'Conda',\n installCommand: 'conda install',\n runCommand: 'conda run',\n },\n [PythonPackageManager.PIP]: {\n name: 'pip',\n label: 'pip',\n installCommand: 'pip install',\n },\n [PythonPackageManager.UNKNOWN]: {\n name: 'pip',\n label: 'pip (default)',\n installCommand: 'pip install',\n },\n};\n\n/**\n * Detect Python package managers via lockfiles and config files.\n * Wraps the existing detectPackageManager() from python/utils.ts.\n */\nexport async function detectPythonPackageManagers(\n installDir: string,\n): Promise<PackageManagerInfo> {\n const pm = await detectPythonPM({ installDir } as any);\n const info = PYTHON_PM_INFO[pm];\n\n return {\n detected: [info],\n primary: info,\n recommendation: `Use ${info.label} (${info.installCommand}).`,\n };\n}\n\n// ---------------------------------------------------------------------------\n// PHP (Composer) helper\n// ---------------------------------------------------------------------------\n\nconst COMPOSER: DetectedPackageManager = {\n name: 'composer',\n label: 'Composer',\n installCommand: 'composer require',\n};\n\nexport function composerPackageManager(): Promise<PackageManagerInfo> {\n return Promise.resolve({\n detected: [COMPOSER],\n primary: COMPOSER,\n recommendation: 'Use Composer (composer require).',\n });\n}\n\n// ---------------------------------------------------------------------------\n// Swift (SPM) helper\n// ---------------------------------------------------------------------------\n\nconst SPM: DetectedPackageManager = {\n name: 'spm',\n label: 'Swift Package Manager',\n installCommand: 'swift package add-dependency',\n};\n\nexport function swiftPackageManager(): Promise<PackageManagerInfo> {\n return Promise.resolve({\n detected: [SPM],\n primary: SPM,\n recommendation:\n 'Use Swift Package Manager. Add the dependency to Package.swift or via Xcode.',\n });\n}\n\n// ---------------------------------------------------------------------------\n// Ruby (Bundler) helper\n// ---------------------------------------------------------------------------\n\nconst BUNDLER: DetectedPackageManager = {\n name: 'bundler',\n label: 'Bundler',\n installCommand: 'bundle add',\n runCommand: 'bundle exec',\n};\n\nexport function bundlerPackageManager(): Promise<PackageManagerInfo> {\n return Promise.resolve({\n detected: [BUNDLER],\n primary: BUNDLER,\n recommendation: 'Use Bundler (bundle add). Run commands with bundle exec.',\n });\n}\n\n// ---------------------------------------------------------------------------\n// Android (Gradle) helper\n// ---------------------------------------------------------------------------\n\nconst GRADLE: DetectedPackageManager = {\n name: 'gradle',\n label: 'Gradle',\n installCommand: 'implementation',\n};\n\nexport function gradlePackageManager(): Promise<PackageManagerInfo> {\n return Promise.resolve({\n detected: [GRADLE],\n primary: GRADLE,\n recommendation:\n 'Add dependencies to build.gradle(.kts) using implementation().',\n });\n}\n"]}
package/dist/src/run.d.ts DELETED
@@ -1,23 +0,0 @@
1
- import { type WizardSession } from './lib/wizard-session';
2
- import type { CloudRegion } from './utils/types';
3
- import { Integration } from './lib/constants';
4
- type Args = {
5
- integration?: Integration;
6
- debug?: boolean;
7
- forceInstall?: boolean;
8
- installDir?: string;
9
- region?: CloudRegion;
10
- default?: boolean;
11
- signup?: boolean;
12
- localMcp?: boolean;
13
- ci?: boolean;
14
- apiKey?: string;
15
- email?: string;
16
- projectId?: string;
17
- menu?: boolean;
18
- benchmark?: boolean;
19
- yaraReport?: boolean;
20
- };
21
- export declare function runWizard(argv: Args, session?: WizardSession): Promise<void>;
22
- export declare function detectIntegration(installDir: string): Promise<Integration | undefined>;
23
- export {};