@posthog/wizard 2.7.0 → 2.9.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 (233) hide show
  1. package/README.md +11 -0
  2. package/dist/bin.js +289 -162
  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 +323 -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 +20 -7
  107. package/dist/src/lib/wizard-session.js +4 -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 +66 -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 +32 -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 +48 -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 +100 -10
  166. package/dist/src/ui/tui/__tests__/store.test.js.map +1 -1
  167. package/dist/src/ui/tui/flows.d.ts +17 -6
  168. package/dist/src/ui/tui/flows.js +28 -52
  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/primitives/ProgressList.d.ts +3 -1
  174. package/dist/src/ui/tui/primitives/ProgressList.js +2 -2
  175. package/dist/src/ui/tui/primitives/ProgressList.js.map +1 -1
  176. package/dist/src/ui/tui/router.js +1 -1
  177. package/dist/src/ui/tui/router.js.map +1 -1
  178. package/dist/src/ui/tui/screen-registry.js +2 -0
  179. package/dist/src/ui/tui/screen-registry.js.map +1 -1
  180. package/dist/src/ui/tui/screens/ManagedSettingsScreen.js.map +1 -1
  181. package/dist/src/ui/tui/screens/OutroScreen.js +1 -1
  182. package/dist/src/ui/tui/screens/OutroScreen.js.map +1 -1
  183. package/dist/src/ui/tui/screens/RevenueIntroScreen.d.ts +16 -0
  184. package/dist/src/ui/tui/screens/RevenueIntroScreen.js +64 -0
  185. package/dist/src/ui/tui/screens/RevenueIntroScreen.js.map +1 -0
  186. package/dist/src/ui/tui/screens/RunScreen.js +1 -1
  187. package/dist/src/ui/tui/screens/RunScreen.js.map +1 -1
  188. package/dist/src/ui/tui/screens/SettingsOverrideScreen.js.map +1 -1
  189. package/dist/src/ui/tui/screens/health/HealthCheckScreen.js +2 -2
  190. package/dist/src/ui/tui/screens/health/HealthCheckScreen.js.map +1 -1
  191. package/dist/src/ui/tui/start-tui.js +2 -2
  192. package/dist/src/ui/tui/start-tui.js.map +1 -1
  193. package/dist/src/ui/tui/store.d.ts +46 -21
  194. package/dist/src/ui/tui/store.js +105 -47
  195. package/dist/src/ui/tui/store.js.map +1 -1
  196. package/dist/src/ui/wizard-ui.d.ts +13 -3
  197. package/dist/src/ui/wizard-ui.js.map +1 -1
  198. package/dist/src/utils/__tests__/provisioning.test.d.ts +1 -0
  199. package/dist/src/utils/__tests__/provisioning.test.js +192 -0
  200. package/dist/src/utils/__tests__/provisioning.test.js.map +1 -0
  201. package/dist/src/utils/file-utils.d.ts +8 -0
  202. package/dist/src/utils/file-utils.js +32 -0
  203. package/dist/src/utils/file-utils.js.map +1 -1
  204. package/dist/src/utils/provisioning.d.ts +25 -0
  205. package/dist/src/utils/provisioning.js +191 -0
  206. package/dist/src/utils/provisioning.js.map +1 -0
  207. package/dist/src/utils/setup-utils.d.ts +4 -1
  208. package/dist/src/utils/setup-utils.js +46 -2
  209. package/dist/src/utils/setup-utils.js.map +1 -1
  210. package/dist/src/utils/types.d.ts +4 -0
  211. package/dist/src/utils/types.js.map +1 -1
  212. package/dist/src/utils/wizard-abort.d.ts +3 -0
  213. package/dist/src/utils/wizard-abort.js +5 -3
  214. package/dist/src/utils/wizard-abort.js.map +1 -1
  215. package/npm-shrinkwrap.json +2 -2
  216. package/package.json +1 -1
  217. package/dist/src/__tests__/run.test.js +0 -95
  218. package/dist/src/__tests__/run.test.js.map +0 -1
  219. package/dist/src/lib/__tests__/package-manager-detection.test.js.map +0 -1
  220. package/dist/src/lib/agent-interface.js.map +0 -1
  221. package/dist/src/lib/agent-runner.d.ts +0 -9
  222. package/dist/src/lib/agent-runner.js +0 -383
  223. package/dist/src/lib/agent-runner.js.map +0 -1
  224. package/dist/src/lib/commandments.js.map +0 -1
  225. package/dist/src/lib/package-manager-detection.js.map +0 -1
  226. package/dist/src/run.d.ts +0 -22
  227. package/dist/src/run.js +0 -152
  228. package/dist/src/run.js.map +0 -1
  229. /package/dist/src/{__tests__/run.test.d.ts → lib/agent/__tests__/agent-prompt.test.d.ts} +0 -0
  230. /package/dist/src/lib/{commandments.d.ts → agent/commandments.d.ts} +0 -0
  231. /package/dist/src/lib/{commandments.js → agent/commandments.js} +0 -0
  232. /package/dist/src/lib/{__tests__/package-manager-detection.test.d.ts → detection/__tests__/context.test.d.ts} +0 -0
  233. /package/dist/src/lib/{package-manager-detection.d.ts → detection/package-manager.d.ts} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"wizard-abort.test.js","sourceRoot":"","sources":["../../../src/__tests__/wizard-abort.test.ts"],"names":[],"mappings":";;AAAA,qDAAqD;AACrD,wDAK+B;AAC/B,kDAA+C;AAE/C,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;AAChC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;IACxB,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC;QAC/B,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE;KACjB,CAAC;CACH,CAAC,CAAC,CAAC;AAEJ,MAAM,aAAa,GAAG,qBAA0C,CAAC;AACjE,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;AAE5C,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAC3B,UAAU,CAAC,GAAG,EAAE;QACd,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,IAAA,2BAAY,GAAE,CAAC;QAEf,aAAa,CAAC,gBAAgB,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAC3C,aAAa,CAAC,QAAQ,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;QAEhE,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE;YAClD,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oEAAoE,EAAE,KAAK,IAAI,EAAE;QAClF,MAAM,SAAS,GAAa,EAAE,CAAC;QAC/B,aAAa,CAAC,QAAQ,CAAC,kBAAkB,CAAC,KAAK,IAAI,EAAE;YACnD,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;QACH,KAAK,EAAE,CAAC,KAAK,CAAC,kBAAkB,CAAC,GAAG,EAAE;YACpC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC1B,CAAC,CAAC,CAAC;QAEH,MAAM,MAAM,CAAC,IAAA,0BAAW,GAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;QAEnE,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;QACjD,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gEAAgE,EAAE,KAAK,IAAI,EAAE;QAC9E,MAAM,MAAM,CAAC,IAAA,0BAAW,GAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;QAEnE,MAAM,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,oBAAoB,CAAC,yBAAyB,CAAC,CAAC;QACtE,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC;QACjE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;QACjD,MAAM,MAAM,CACV,IAAA,0BAAW,EAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CACxD,CAAC,OAAO,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;QAEzC,MAAM,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,CAAC;QAC7D,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4EAA4E,EAAE,KAAK,IAAI,EAAE;QAC1F,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;QAE3C,MAAM,MAAM,CAAC,IAAA,0BAAW,EAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;QAE5E,MAAM,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC,oBAAoB,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACvE,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,KAAK,IAAI,EAAE;QAChE,MAAM,MAAM,CAAC,IAAA,0BAAW,GAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;QAEnE,MAAM,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;IAChE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;QACjE,MAAM,KAAK,GAAG,IAAI,0BAAW,CAAC,aAAa,EAAE;YAC3C,WAAW,EAAE,QAAQ;YACrB,UAAU,EAAE,aAAa;SAC1B,CAAC,CAAC;QAEH,MAAM,MAAM,CAAC,IAAA,0BAAW,EAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;QAE5E,MAAM,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC,oBAAoB,CAAC,KAAK,EAAE;YACjE,WAAW,EAAE,QAAQ;YACrB,UAAU,EAAE,aAAa;SAC1B,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gEAAgE,EAAE,KAAK,IAAI,EAAE;QAC9E,MAAM,SAAS,GAAa,EAAE,CAAC;QAE/B,IAAA,8BAAe,EAAC,GAAG,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;QAClD,IAAA,8BAAe,EAAC,GAAG,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;QAClD,aAAa,CAAC,QAAQ,CAAC,kBAAkB,CAAC,KAAK,IAAI,EAAE;YACnD,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;QACH,KAAK,EAAE,CAAC,KAAK,CAAC,kBAAkB,CAAC,GAAG,EAAE;YACpC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC1B,CAAC,CAAC,CAAC;QAEH,MAAM,MAAM,CAAC,IAAA,0BAAW,GAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;QAEnE,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;IAC3E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;QAClE,IAAA,8BAAe,EAAC,GAAG,EAAE;YACnB,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;QACH,IAAA,8BAAe,EAAC,GAAG,EAAE;YACnB,2BAA2B;QAC7B,CAAC,CAAC,CAAC;QAEH,MAAM,MAAM,CAAC,IAAA,0BAAW,GAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;QAEnE,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,gBAAgB,EAAE,CAAC;QAClD,MAAM,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,gBAAgB,EAAE,CAAC;QACzC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+DAA+D,EAAE,KAAK,IAAI,EAAE;QAC7E,MAAM,MAAM,CAAC,IAAA,0BAAW,EAAC,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CACjE,qBAAqB,CACtB,CAAC;QAEF,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC;IACnE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,oCAAoC,EAAE,GAAG,EAAE;IAClD,UAAU,CAAC,GAAG,EAAE;QACd,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,IAAA,2BAAY,GAAE,CAAC;QAEf,aAAa,CAAC,gBAAgB,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAC3C,aAAa,CAAC,QAAQ,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;QAEhE,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE;YAClD,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;QACnE,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,yBAAyB,CAAC,CAAC;QAE1D,MAAM,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;QAE5E,MAAM,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,oBAAoB,CAAC,YAAY,CAAC,CAAC;QACzD,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;QAC9D,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,yBAAyB,CAAC,CAAC;QAE1D,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;QAE7D,MAAM,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,oBAAoB,CAAC,yBAAyB,CAAC,CAAC;QACtE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["/* eslint-disable @typescript-eslint/require-await */\nimport {\n wizardAbort,\n WizardError,\n registerCleanup,\n clearCleanup,\n} from '../utils/wizard-abort';\nimport { analytics } from '../utils/analytics';\n\njest.mock('../utils/analytics');\njest.mock('../ui', () => ({\n getUI: jest.fn().mockReturnValue({\n outro: jest.fn(),\n }),\n}));\n\nconst mockAnalytics = analytics as jest.Mocked<typeof analytics>;\nconst { getUI } = jest.requireMock('../ui');\n\ndescribe('wizardAbort', () => {\n beforeEach(() => {\n jest.clearAllMocks();\n clearCleanup();\n\n mockAnalytics.captureException = jest.fn();\n mockAnalytics.shutdown = jest.fn().mockResolvedValue(undefined);\n\n jest.spyOn(process, 'exit').mockImplementation(() => {\n throw new Error('process.exit called');\n });\n });\n\n afterEach(() => {\n jest.restoreAllMocks();\n });\n\n it('calls analytics.shutdown, getUI().outro, and process.exit in order', async () => {\n const callOrder: string[] = [];\n mockAnalytics.shutdown.mockImplementation(async () => {\n callOrder.push('shutdown');\n });\n getUI().outro.mockImplementation(() => {\n callOrder.push('outro');\n });\n\n await expect(wizardAbort()).rejects.toThrow('process.exit called');\n\n expect(callOrder).toEqual(['shutdown', 'outro']);\n expect(process.exit).toHaveBeenCalledWith(1);\n });\n\n it('uses default message and exit code when called with no options', async () => {\n await expect(wizardAbort()).rejects.toThrow('process.exit called');\n\n expect(getUI().outro).toHaveBeenCalledWith('Wizard setup cancelled.');\n expect(mockAnalytics.shutdown).toHaveBeenCalledWith('cancelled');\n expect(process.exit).toHaveBeenCalledWith(1);\n });\n\n it('uses custom message and exit code', async () => {\n await expect(\n wizardAbort({ message: 'Custom failure', exitCode: 2 }),\n ).rejects.toThrow('process.exit called');\n\n expect(getUI().outro).toHaveBeenCalledWith('Custom failure');\n expect(process.exit).toHaveBeenCalledWith(2);\n });\n\n it('captures error in analytics and shuts down as error when error is provided', async () => {\n const error = new Error('something broke');\n\n await expect(wizardAbort({ error })).rejects.toThrow('process.exit called');\n\n expect(mockAnalytics.captureException).toHaveBeenCalledWith(error, {});\n expect(mockAnalytics.shutdown).toHaveBeenCalledWith('error');\n });\n\n it('does not capture error when no error is provided', async () => {\n await expect(wizardAbort()).rejects.toThrow('process.exit called');\n\n expect(mockAnalytics.captureException).not.toHaveBeenCalled();\n });\n\n it('includes WizardError context in analytics capture', async () => {\n const error = new WizardError('MCP missing', {\n integration: 'nextjs',\n error_type: 'MCP_MISSING',\n });\n\n await expect(wizardAbort({ error })).rejects.toThrow('process.exit called');\n\n expect(mockAnalytics.captureException).toHaveBeenCalledWith(error, {\n integration: 'nextjs',\n error_type: 'MCP_MISSING',\n });\n });\n\n it('runs registered cleanup functions before analytics and display', async () => {\n const callOrder: string[] = [];\n\n registerCleanup(() => callOrder.push('cleanup1'));\n registerCleanup(() => callOrder.push('cleanup2'));\n mockAnalytics.shutdown.mockImplementation(async () => {\n callOrder.push('shutdown');\n });\n getUI().outro.mockImplementation(() => {\n callOrder.push('outro');\n });\n\n await expect(wizardAbort()).rejects.toThrow('process.exit called');\n\n expect(callOrder).toEqual(['cleanup1', 'cleanup2', 'shutdown', 'outro']);\n });\n\n it('does not block exit when a cleanup function throws', async () => {\n registerCleanup(() => {\n throw new Error('cleanup failed');\n });\n registerCleanup(() => {\n /* this should still run */\n });\n\n await expect(wizardAbort()).rejects.toThrow('process.exit called');\n\n expect(mockAnalytics.shutdown).toHaveBeenCalled();\n expect(getUI().outro).toHaveBeenCalled();\n expect(process.exit).toHaveBeenCalledWith(1);\n });\n\n it('shuts down analytics as \"cancelled\" when no error is provided', async () => {\n await expect(wizardAbort({ message: 'Bad input' })).rejects.toThrow(\n 'process.exit called',\n );\n\n expect(mockAnalytics.shutdown).toHaveBeenCalledWith('cancelled');\n });\n});\n\ndescribe('abort() delegates to wizardAbort()', () => {\n beforeEach(() => {\n jest.clearAllMocks();\n clearCleanup();\n\n mockAnalytics.captureException = jest.fn();\n mockAnalytics.shutdown = jest.fn().mockResolvedValue(undefined);\n\n jest.spyOn(process, 'exit').mockImplementation(() => {\n throw new Error('process.exit called');\n });\n });\n\n afterEach(() => {\n jest.restoreAllMocks();\n });\n\n it('abort() calls wizardAbort with message and exitCode', async () => {\n const { abort } = await import('../utils/setup-utils.js');\n\n await expect(abort('Test abort', 3)).rejects.toThrow('process.exit called');\n\n expect(getUI().outro).toHaveBeenCalledWith('Test abort');\n expect(process.exit).toHaveBeenCalledWith(3);\n });\n\n it('abort() uses defaults when called with no args', async () => {\n const { abort } = await import('../utils/setup-utils.js');\n\n await expect(abort()).rejects.toThrow('process.exit called');\n\n expect(getUI().outro).toHaveBeenCalledWith('Wizard setup cancelled.');\n expect(process.exit).toHaveBeenCalledWith(1);\n });\n});\n"]}
1
+ {"version":3,"file":"wizard-abort.test.js","sourceRoot":"","sources":["../../../src/__tests__/wizard-abort.test.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/require-await */\nimport {\n wizardAbort,\n WizardError,\n registerCleanup,\n clearCleanup,\n} from '../utils/wizard-abort';\nimport { analytics } from '../utils/analytics';\n\njest.mock('../utils/analytics');\njest.mock('../ui', () => ({\n getUI: jest.fn().mockReturnValue({\n outroError: jest.fn(),\n }),\n}));\n\nconst mockAnalytics = analytics as jest.Mocked<typeof analytics>;\nconst { getUI } = jest.requireMock('../ui');\n\ndescribe('wizardAbort', () => {\n beforeEach(() => {\n jest.clearAllMocks();\n clearCleanup();\n\n mockAnalytics.captureException = jest.fn();\n mockAnalytics.shutdown = jest.fn().mockResolvedValue(undefined);\n\n jest.spyOn(process, 'exit').mockImplementation(() => {\n throw new Error('process.exit called');\n });\n });\n\n afterEach(() => {\n jest.restoreAllMocks();\n });\n\n it('calls analytics.shutdown, getUI().outroError, and process.exit in order', async () => {\n const callOrder: string[] = [];\n mockAnalytics.shutdown.mockImplementation(async () => {\n callOrder.push('shutdown');\n });\n getUI().outroError.mockImplementation(() => {\n callOrder.push('outroError');\n });\n\n await expect(wizardAbort()).rejects.toThrow('process.exit called');\n\n expect(callOrder).toEqual(['shutdown', 'outroError']);\n expect(process.exit).toHaveBeenCalledWith(1);\n });\n\n it('uses default message and exit code when called with no options', async () => {\n await expect(wizardAbort()).rejects.toThrow('process.exit called');\n\n expect(getUI().outroError).toHaveBeenCalledWith(\n expect.objectContaining({ message: 'Wizard setup cancelled.' }),\n );\n expect(mockAnalytics.shutdown).toHaveBeenCalledWith('cancelled');\n expect(process.exit).toHaveBeenCalledWith(1);\n });\n\n it('uses custom message and exit code', async () => {\n await expect(\n wizardAbort({ message: 'Custom failure', exitCode: 2 }),\n ).rejects.toThrow('process.exit called');\n\n expect(getUI().outroError).toHaveBeenCalledWith(\n expect.objectContaining({ message: 'Custom failure' }),\n );\n expect(process.exit).toHaveBeenCalledWith(2);\n });\n\n it('passes through structured outroData when provided', async () => {\n await expect(\n wizardAbort({\n outroData: {\n kind: 'error' as never,\n message: 'Agent aborted',\n body: 'reason',\n docsUrl: 'https://posthog.com/docs',\n },\n }),\n ).rejects.toThrow('process.exit called');\n\n expect(getUI().outroError).toHaveBeenCalledWith({\n kind: 'error',\n message: 'Agent aborted',\n body: 'reason',\n docsUrl: 'https://posthog.com/docs',\n });\n });\n\n it('captures error in analytics and shuts down as error when error is provided', async () => {\n const error = new Error('something broke');\n\n await expect(wizardAbort({ error })).rejects.toThrow('process.exit called');\n\n expect(mockAnalytics.captureException).toHaveBeenCalledWith(error, {});\n expect(mockAnalytics.shutdown).toHaveBeenCalledWith('error');\n });\n\n it('does not capture error when no error is provided', async () => {\n await expect(wizardAbort()).rejects.toThrow('process.exit called');\n\n expect(mockAnalytics.captureException).not.toHaveBeenCalled();\n });\n\n it('includes WizardError context in analytics capture', async () => {\n const error = new WizardError('MCP missing', {\n integration: 'nextjs',\n error_type: 'MCP_MISSING',\n });\n\n await expect(wizardAbort({ error })).rejects.toThrow('process.exit called');\n\n expect(mockAnalytics.captureException).toHaveBeenCalledWith(error, {\n integration: 'nextjs',\n error_type: 'MCP_MISSING',\n });\n });\n\n it('runs registered cleanup functions before analytics and display', async () => {\n const callOrder: string[] = [];\n\n registerCleanup(() => callOrder.push('cleanup1'));\n registerCleanup(() => callOrder.push('cleanup2'));\n mockAnalytics.shutdown.mockImplementation(async () => {\n callOrder.push('shutdown');\n });\n getUI().outroError.mockImplementation(() => {\n callOrder.push('outroError');\n });\n\n await expect(wizardAbort()).rejects.toThrow('process.exit called');\n\n expect(callOrder).toEqual([\n 'cleanup1',\n 'cleanup2',\n 'shutdown',\n 'outroError',\n ]);\n });\n\n it('does not block exit when a cleanup function throws', async () => {\n registerCleanup(() => {\n throw new Error('cleanup failed');\n });\n registerCleanup(() => {\n /* this should still run */\n });\n\n await expect(wizardAbort()).rejects.toThrow('process.exit called');\n\n expect(mockAnalytics.shutdown).toHaveBeenCalled();\n expect(getUI().outroError).toHaveBeenCalled();\n expect(process.exit).toHaveBeenCalledWith(1);\n });\n\n it('shuts down analytics as \"cancelled\" when no error is provided', async () => {\n await expect(wizardAbort({ message: 'Bad input' })).rejects.toThrow(\n 'process.exit called',\n );\n\n expect(mockAnalytics.shutdown).toHaveBeenCalledWith('cancelled');\n });\n});\n\ndescribe('abort() delegates to wizardAbort()', () => {\n beforeEach(() => {\n jest.clearAllMocks();\n clearCleanup();\n\n mockAnalytics.captureException = jest.fn();\n mockAnalytics.shutdown = jest.fn().mockResolvedValue(undefined);\n\n jest.spyOn(process, 'exit').mockImplementation(() => {\n throw new Error('process.exit called');\n });\n });\n\n afterEach(() => {\n jest.restoreAllMocks();\n });\n\n it('abort() calls wizardAbort with message and exitCode', async () => {\n const { abort } = await import('../utils/setup-utils.js');\n\n await expect(abort('Test abort', 3)).rejects.toThrow('process.exit called');\n\n expect(getUI().outroError).toHaveBeenCalledWith(\n expect.objectContaining({ message: 'Test abort' }),\n );\n expect(process.exit).toHaveBeenCalledWith(3);\n });\n\n it('abort() uses defaults when called with no args', async () => {\n const { abort } = await import('../utils/setup-utils.js');\n\n await expect(abort()).rejects.toThrow('process.exit called');\n\n expect(getUI().outroError).toHaveBeenCalledWith(\n expect.objectContaining({ message: 'Wizard setup cancelled.' }),\n );\n expect(process.exit).toHaveBeenCalledWith(1);\n });\n});\n"]}
@@ -42,7 +42,7 @@ const fast_glob_1 = __importDefault(require("fast-glob"));
42
42
  const fs = __importStar(require("node:fs"));
43
43
  const path = __importStar(require("node:path"));
44
44
  const utils_1 = require("./utils");
45
- const package_manager_detection_1 = require("../../lib/package-manager-detection");
45
+ const package_manager_1 = require("../../lib/detection/package-manager");
46
46
  exports.ANDROID_AGENT_CONFIG = {
47
47
  metadata: {
48
48
  name: 'Android (Kotlin)',
@@ -63,7 +63,7 @@ exports.ANDROID_AGENT_CONFIG = {
63
63
  // This is actually pretty high for a minimum, but android apis aren't super stable.
64
64
  minimumVersion: '21.0.0',
65
65
  getInstalledVersion: (options) => (0, utils_1.getMinSdkVersion)(options),
66
- detectPackageManager: package_manager_detection_1.gradlePackageManager,
66
+ detectPackageManager: package_manager_1.gradlePackageManager,
67
67
  detect: async (options) => {
68
68
  const { installDir } = options;
69
69
  // Strategy 1: Check for build.gradle(.kts) with Android plugin
@@ -1 +1 @@
1
- {"version":3,"file":"android-wizard-agent.js","sourceRoot":"","sources":["../../../../src/frameworks/android/android-wizard-agent.ts"],"names":[],"mappings":"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","sourcesContent":["/* Android (Kotlin) wizard using posthog-agent with PostHog MCP */\nimport type { WizardOptions } from '../../utils/types';\nimport type { FrameworkConfig } from '../../lib/framework-config';\nimport { Integration } from '../../lib/constants';\nimport fg from 'fast-glob';\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport {\n getKotlinVersion,\n getKotlinVersionBucket,\n getMinSdkVersion,\n} from './utils';\nimport { gradlePackageManager } from '../../lib/package-manager-detection';\n\ntype AndroidContext = {\n kotlinVersion?: string;\n};\n\nexport const ANDROID_AGENT_CONFIG: FrameworkConfig<AndroidContext> = {\n metadata: {\n name: 'Android (Kotlin)',\n integration: Integration.android,\n beta: true,\n docsUrl: 'https://posthog.com/docs/libraries/android',\n gatherContext: (options: WizardOptions) => {\n const kotlinVersion = getKotlinVersion(options);\n return Promise.resolve({ kotlinVersion });\n },\n },\n\n detection: {\n packageName: 'posthog-android',\n packageDisplayName: 'Android (Kotlin)',\n usesPackageJson: false,\n getVersion: () => undefined,\n getVersionBucket: (version: string) => getKotlinVersionBucket(version),\n // This is actually pretty high for a minimum, but android apis aren't super stable.\n minimumVersion: '21.0.0',\n getInstalledVersion: (options: WizardOptions) => getMinSdkVersion(options),\n detectPackageManager: gradlePackageManager,\n detect: async (options) => {\n const { installDir } = options;\n\n // Strategy 1: Check for build.gradle(.kts) with Android plugin\n for (const name of ['build.gradle', 'build.gradle.kts']) {\n const buildGradlePath = path.join(installDir, name);\n if (fs.existsSync(buildGradlePath)) {\n const content = fs.readFileSync(buildGradlePath, 'utf-8');\n if (\n content.includes('com.android.application') ||\n content.includes('com.android.library') ||\n content.includes('com.android.tools.build:gradle')\n ) {\n return true;\n }\n }\n }\n\n // Strategy 2: Check for AndroidManifest.xml with Kotlin source files\n // This could be an issue if we have Flutter in the mix, but we'll figure that out later.\n const manifestFiles = await fg('**/AndroidManifest.xml', {\n cwd: installDir,\n ignore: ['**/build/**', '**/node_modules/**', '**/.gradle/**'],\n });\n\n if (manifestFiles.length > 0) {\n const kotlinFiles = await fg('**/*.kt', {\n cwd: installDir,\n ignore: ['**/build/**', '**/node_modules/**', '**/.gradle/**'],\n });\n if (kotlinFiles.length > 0) {\n return true;\n }\n }\n\n return false;\n },\n },\n\n environment: {\n uploadToHosting: false,\n getEnvVars: (apiKey: string, host: string) => ({\n POSTHOG_PROJECT_TOKEN: apiKey,\n POSTHOG_HOST: host,\n }),\n },\n\n analytics: {\n getTags: (context) => ({\n ...(context.kotlinVersion\n ? { kotlinVersion: getKotlinVersionBucket(context.kotlinVersion) }\n : {}),\n }),\n },\n\n prompts: {\n projectTypeDetection:\n 'This is an Android/Kotlin project. Look for build.gradle or build.gradle.kts files, AndroidManifest.xml, and Kotlin source files (.kt) to confirm.',\n packageInstallation:\n 'Add the PostHog Android SDK dependency to the app-level build.gradle(.kts) file. Use implementation(\"com.posthog:posthog-android:<VERSION>\"). Check the existing dependency format (Groovy vs Kotlin DSL) and match it.',\n getAdditionalContextLines: (context) => {\n const lines = [\n `Framework docs ID: android (use posthog://docs/frameworks/android for documentation)`,\n ];\n\n if (context.kotlinVersion) {\n lines.push(`Kotlin version: ${context.kotlinVersion}`);\n }\n\n return lines;\n },\n },\n\n ui: {\n successMessage: 'PostHog integration complete',\n estimatedDurationMinutes: 5,\n getOutroChanges: () => [\n `Analyzed your Android project structure`,\n `Added the PostHog Android SDK dependency`,\n `Configured PostHog initialization in your Application class`,\n `Added event capture and user identification`,\n ],\n getOutroNextSteps: () => [\n 'Build and run your app to see PostHog in action',\n 'Visit your PostHog dashboard to see incoming events',\n 'Check out the PostHog Android docs for advanced features like feature flags and session replay',\n ],\n },\n};\n"]}
1
+ {"version":3,"file":"android-wizard-agent.js","sourceRoot":"","sources":["../../../../src/frameworks/android/android-wizard-agent.ts"],"names":[],"mappings":"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","sourcesContent":["/* Android (Kotlin) wizard using posthog-agent with PostHog MCP */\nimport type { WizardOptions } from '../../utils/types';\nimport type { FrameworkConfig } from '../../lib/framework-config';\nimport { Integration } from '../../lib/constants';\nimport fg from 'fast-glob';\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport {\n getKotlinVersion,\n getKotlinVersionBucket,\n getMinSdkVersion,\n} from './utils';\nimport { gradlePackageManager } from '../../lib/detection/package-manager';\n\ntype AndroidContext = {\n kotlinVersion?: string;\n};\n\nexport const ANDROID_AGENT_CONFIG: FrameworkConfig<AndroidContext> = {\n metadata: {\n name: 'Android (Kotlin)',\n integration: Integration.android,\n beta: true,\n docsUrl: 'https://posthog.com/docs/libraries/android',\n gatherContext: (options: WizardOptions) => {\n const kotlinVersion = getKotlinVersion(options);\n return Promise.resolve({ kotlinVersion });\n },\n },\n\n detection: {\n packageName: 'posthog-android',\n packageDisplayName: 'Android (Kotlin)',\n usesPackageJson: false,\n getVersion: () => undefined,\n getVersionBucket: (version: string) => getKotlinVersionBucket(version),\n // This is actually pretty high for a minimum, but android apis aren't super stable.\n minimumVersion: '21.0.0',\n getInstalledVersion: (options: WizardOptions) => getMinSdkVersion(options),\n detectPackageManager: gradlePackageManager,\n detect: async (options) => {\n const { installDir } = options;\n\n // Strategy 1: Check for build.gradle(.kts) with Android plugin\n for (const name of ['build.gradle', 'build.gradle.kts']) {\n const buildGradlePath = path.join(installDir, name);\n if (fs.existsSync(buildGradlePath)) {\n const content = fs.readFileSync(buildGradlePath, 'utf-8');\n if (\n content.includes('com.android.application') ||\n content.includes('com.android.library') ||\n content.includes('com.android.tools.build:gradle')\n ) {\n return true;\n }\n }\n }\n\n // Strategy 2: Check for AndroidManifest.xml with Kotlin source files\n // This could be an issue if we have Flutter in the mix, but we'll figure that out later.\n const manifestFiles = await fg('**/AndroidManifest.xml', {\n cwd: installDir,\n ignore: ['**/build/**', '**/node_modules/**', '**/.gradle/**'],\n });\n\n if (manifestFiles.length > 0) {\n const kotlinFiles = await fg('**/*.kt', {\n cwd: installDir,\n ignore: ['**/build/**', '**/node_modules/**', '**/.gradle/**'],\n });\n if (kotlinFiles.length > 0) {\n return true;\n }\n }\n\n return false;\n },\n },\n\n environment: {\n uploadToHosting: false,\n getEnvVars: (apiKey: string, host: string) => ({\n POSTHOG_PROJECT_TOKEN: apiKey,\n POSTHOG_HOST: host,\n }),\n },\n\n analytics: {\n getTags: (context) => ({\n ...(context.kotlinVersion\n ? { kotlinVersion: getKotlinVersionBucket(context.kotlinVersion) }\n : {}),\n }),\n },\n\n prompts: {\n projectTypeDetection:\n 'This is an Android/Kotlin project. Look for build.gradle or build.gradle.kts files, AndroidManifest.xml, and Kotlin source files (.kt) to confirm.',\n packageInstallation:\n 'Add the PostHog Android SDK dependency to the app-level build.gradle(.kts) file. Use implementation(\"com.posthog:posthog-android:<VERSION>\"). Check the existing dependency format (Groovy vs Kotlin DSL) and match it.',\n getAdditionalContextLines: (context) => {\n const lines = [\n `Framework docs ID: android (use posthog://docs/frameworks/android for documentation)`,\n ];\n\n if (context.kotlinVersion) {\n lines.push(`Kotlin version: ${context.kotlinVersion}`);\n }\n\n return lines;\n },\n },\n\n ui: {\n successMessage: 'PostHog integration complete',\n estimatedDurationMinutes: 5,\n getOutroChanges: () => [\n `Analyzed your Android project structure`,\n `Added the PostHog Android SDK dependency`,\n `Configured PostHog initialization in your Application class`,\n `Added event capture and user identification`,\n ],\n getOutroNextSteps: () => [\n 'Build and run your app to see PostHog in action',\n 'Visit your PostHog dashboard to see incoming events',\n 'Check out the PostHog Android docs for advanced features like feature flags and session replay',\n ],\n },\n};\n"]}
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ANGULAR_AGENT_CONFIG = void 0;
4
- const package_manager_detection_1 = require("../../lib/package-manager-detection");
4
+ const package_manager_1 = require("../../lib/detection/package-manager");
5
5
  const constants_1 = require("../../lib/constants");
6
6
  const package_json_1 = require("../../utils/package-json");
7
7
  const setup_utils_1 = require("../../utils/setup-utils");
@@ -25,7 +25,7 @@ exports.ANGULAR_AGENT_CONFIG = {
25
25
  ? (0, package_json_1.hasPackageInstalled)('@angular/core', packageJson)
26
26
  : false;
27
27
  },
28
- detectPackageManager: package_manager_detection_1.detectNodePackageManagers,
28
+ detectPackageManager: package_manager_1.detectNodePackageManagers,
29
29
  },
30
30
  environment: {
31
31
  uploadToHosting: false,
@@ -1 +1 @@
1
- {"version":3,"file":"angular-wizard-agent.js","sourceRoot":"","sources":["../../../../src/frameworks/angular/angular-wizard-agent.ts"],"names":[],"mappings":";;;AAGA,mFAAgF;AAChF,mDAAkD;AAClD,2DAKkC;AAClC,yDAA4D;AAC5D,mCAAkD;AAIrC,QAAA,oBAAoB,GAAoC;IACnE,QAAQ,EAAE;QACR,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,uBAAW,CAAC,OAAO;QAChC,OAAO,EAAE,4CAA4C;KACtD;IAED,SAAS,EAAE;QACT,WAAW,EAAE,eAAe;QAC5B,kBAAkB,EAAE,SAAS;QAC7B,UAAU,EAAE,CAAC,WAAoB,EAAE,EAAE,CACnC,IAAA,gCAAiB,EAAC,eAAe,EAAE,WAA6B,CAAC;QACnE,gBAAgB,EAAE,+BAAuB;QACzC,cAAc,EAAE,QAAQ;QACxB,mBAAmB,EAAE,CAAC,OAAsB,EAAE,EAAE,CAC9C,OAAO,CAAC,OAAO,CACb,IAAA,yCAA0B,EAAC,eAAe,EAAE,OAAO,CAAC,UAAU,CAAC,CAChE;QACH,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YACxB,MAAM,WAAW,GAAG,MAAM,IAAA,+BAAiB,EAAC,OAAO,CAAC,CAAC;YACrD,OAAO,WAAW;gBAChB,CAAC,CAAC,IAAA,kCAAmB,EAAC,eAAe,EAAE,WAAW,CAAC;gBACnD,CAAC,CAAC,KAAK,CAAC;QACZ,CAAC;QACD,oBAAoB,EAAE,qDAAyB;KAChD;IAED,WAAW,EAAE;QACX,eAAe,EAAE,KAAK;QACtB,UAAU,EAAE,CAAC,MAAc,EAAE,IAAY,EAAE,EAAE,CAAC,CAAC;YAC7C,4BAA4B,EAAE,MAAM;YACpC,mBAAmB,EAAE,IAAI;SAC1B,CAAC;KACH;IAED,SAAS,EAAE;QACT,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC;KACpB;IAED,OAAO,EAAE;QACP,oBAAoB,EAClB,2IAA2I;QAC7I,yBAAyB,EAAE,GAAG,EAAE;YAC9B,MAAM,WAAW,GAAG,SAAS,CAAC;YAE9B,OAAO;gBACL,sBAAsB,WAAW,mCAAmC,WAAW,qBAAqB;gBACpG,6FAA6F;gBAC7F,2FAA2F;aAC5F,CAAC;QACJ,CAAC;KACF;IAED,EAAE,EAAE;QACF,cAAc,EAAE,8BAA8B;QAC9C,wBAAwB,EAAE,CAAC;QAC3B,eAAe,EAAE,GAAG,EAAE,CAAC;YACrB,yCAAyC;YACzC,wCAAwC;YACxC,0CAA0C;SAC3C;QACD,iBAAiB,EAAE,GAAG,EAAE,CAAC;YACvB,wEAAwE;YACxE,qDAAqD;SACtD;KACF;CACF,CAAC","sourcesContent":["/* Angular wizard using posthog-agent with PostHog MCP */\nimport type { WizardOptions } from '../../utils/types';\nimport type { FrameworkConfig } from '../../lib/framework-config';\nimport { detectNodePackageManagers } from '../../lib/package-manager-detection';\nimport { Integration } from '../../lib/constants';\nimport {\n getPackageVersion,\n getInstalledPackageVersion,\n hasPackageInstalled,\n type PackageDotJson,\n} from '../../utils/package-json';\nimport { tryGetPackageJson } from '../../utils/setup-utils';\nimport { getAngularVersionBucket } from './utils';\n\ntype AngularContext = Record<string, unknown>;\n\nexport const ANGULAR_AGENT_CONFIG: FrameworkConfig<AngularContext> = {\n metadata: {\n name: 'Angular',\n integration: Integration.angular,\n docsUrl: 'https://posthog.com/docs/libraries/angular',\n },\n\n detection: {\n packageName: '@angular/core',\n packageDisplayName: 'Angular',\n getVersion: (packageJson: unknown) =>\n getPackageVersion('@angular/core', packageJson as PackageDotJson),\n getVersionBucket: getAngularVersionBucket,\n minimumVersion: '19.0.0',\n getInstalledVersion: (options: WizardOptions) =>\n Promise.resolve(\n getInstalledPackageVersion('@angular/core', options.installDir),\n ),\n detect: async (options) => {\n const packageJson = await tryGetPackageJson(options);\n return packageJson\n ? hasPackageInstalled('@angular/core', packageJson)\n : false;\n },\n detectPackageManager: detectNodePackageManagers,\n },\n\n environment: {\n uploadToHosting: false,\n getEnvVars: (apiKey: string, host: string) => ({\n NG_APP_POSTHOG_PROJECT_TOKEN: apiKey,\n NG_APP_POSTHOG_HOST: host,\n }),\n },\n\n analytics: {\n getTags: () => ({}),\n },\n\n prompts: {\n projectTypeDetection:\n 'This is an Angular project. Look for package.json, angular.json, and lockfiles (package-lock.json, yarn.lock, pnpm-lock.yaml) to confirm.',\n getAdditionalContextLines: () => {\n const frameworkId = 'angular';\n\n return [\n `Framework docs ID: ${frameworkId} (use posthog://docs/frameworks/${frameworkId} for documentation)`,\n 'Angular uses dependency injection for services. PostHog should be initialized as a service.',\n 'For standalone components, ensure PostHog is properly provided in the application config.',\n ];\n },\n },\n\n ui: {\n successMessage: 'PostHog integration complete',\n estimatedDurationMinutes: 8,\n getOutroChanges: () => [\n `Analyzed your Angular project structure`,\n `Created and configured PostHog service`,\n `Integrated PostHog into your application`,\n ],\n getOutroNextSteps: () => [\n 'Start your development server with `ng serve` to see PostHog in action',\n 'Visit your PostHog dashboard to see incoming events',\n ],\n },\n};\n"]}
1
+ {"version":3,"file":"angular-wizard-agent.js","sourceRoot":"","sources":["../../../../src/frameworks/angular/angular-wizard-agent.ts"],"names":[],"mappings":";;;AAGA,yEAAgF;AAChF,mDAAkD;AAClD,2DAKkC;AAClC,yDAA4D;AAC5D,mCAAkD;AAIrC,QAAA,oBAAoB,GAAoC;IACnE,QAAQ,EAAE;QACR,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,uBAAW,CAAC,OAAO;QAChC,OAAO,EAAE,4CAA4C;KACtD;IAED,SAAS,EAAE;QACT,WAAW,EAAE,eAAe;QAC5B,kBAAkB,EAAE,SAAS;QAC7B,UAAU,EAAE,CAAC,WAAoB,EAAE,EAAE,CACnC,IAAA,gCAAiB,EAAC,eAAe,EAAE,WAA6B,CAAC;QACnE,gBAAgB,EAAE,+BAAuB;QACzC,cAAc,EAAE,QAAQ;QACxB,mBAAmB,EAAE,CAAC,OAAsB,EAAE,EAAE,CAC9C,OAAO,CAAC,OAAO,CACb,IAAA,yCAA0B,EAAC,eAAe,EAAE,OAAO,CAAC,UAAU,CAAC,CAChE;QACH,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YACxB,MAAM,WAAW,GAAG,MAAM,IAAA,+BAAiB,EAAC,OAAO,CAAC,CAAC;YACrD,OAAO,WAAW;gBAChB,CAAC,CAAC,IAAA,kCAAmB,EAAC,eAAe,EAAE,WAAW,CAAC;gBACnD,CAAC,CAAC,KAAK,CAAC;QACZ,CAAC;QACD,oBAAoB,EAAE,2CAAyB;KAChD;IAED,WAAW,EAAE;QACX,eAAe,EAAE,KAAK;QACtB,UAAU,EAAE,CAAC,MAAc,EAAE,IAAY,EAAE,EAAE,CAAC,CAAC;YAC7C,4BAA4B,EAAE,MAAM;YACpC,mBAAmB,EAAE,IAAI;SAC1B,CAAC;KACH;IAED,SAAS,EAAE;QACT,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC;KACpB;IAED,OAAO,EAAE;QACP,oBAAoB,EAClB,2IAA2I;QAC7I,yBAAyB,EAAE,GAAG,EAAE;YAC9B,MAAM,WAAW,GAAG,SAAS,CAAC;YAE9B,OAAO;gBACL,sBAAsB,WAAW,mCAAmC,WAAW,qBAAqB;gBACpG,6FAA6F;gBAC7F,2FAA2F;aAC5F,CAAC;QACJ,CAAC;KACF;IAED,EAAE,EAAE;QACF,cAAc,EAAE,8BAA8B;QAC9C,wBAAwB,EAAE,CAAC;QAC3B,eAAe,EAAE,GAAG,EAAE,CAAC;YACrB,yCAAyC;YACzC,wCAAwC;YACxC,0CAA0C;SAC3C;QACD,iBAAiB,EAAE,GAAG,EAAE,CAAC;YACvB,wEAAwE;YACxE,qDAAqD;SACtD;KACF;CACF,CAAC","sourcesContent":["/* Angular wizard using posthog-agent with PostHog MCP */\nimport type { WizardOptions } from '../../utils/types';\nimport type { FrameworkConfig } from '../../lib/framework-config';\nimport { detectNodePackageManagers } from '../../lib/detection/package-manager';\nimport { Integration } from '../../lib/constants';\nimport {\n getPackageVersion,\n getInstalledPackageVersion,\n hasPackageInstalled,\n type PackageDotJson,\n} from '../../utils/package-json';\nimport { tryGetPackageJson } from '../../utils/setup-utils';\nimport { getAngularVersionBucket } from './utils';\n\ntype AngularContext = Record<string, unknown>;\n\nexport const ANGULAR_AGENT_CONFIG: FrameworkConfig<AngularContext> = {\n metadata: {\n name: 'Angular',\n integration: Integration.angular,\n docsUrl: 'https://posthog.com/docs/libraries/angular',\n },\n\n detection: {\n packageName: '@angular/core',\n packageDisplayName: 'Angular',\n getVersion: (packageJson: unknown) =>\n getPackageVersion('@angular/core', packageJson as PackageDotJson),\n getVersionBucket: getAngularVersionBucket,\n minimumVersion: '19.0.0',\n getInstalledVersion: (options: WizardOptions) =>\n Promise.resolve(\n getInstalledPackageVersion('@angular/core', options.installDir),\n ),\n detect: async (options) => {\n const packageJson = await tryGetPackageJson(options);\n return packageJson\n ? hasPackageInstalled('@angular/core', packageJson)\n : false;\n },\n detectPackageManager: detectNodePackageManagers,\n },\n\n environment: {\n uploadToHosting: false,\n getEnvVars: (apiKey: string, host: string) => ({\n NG_APP_POSTHOG_PROJECT_TOKEN: apiKey,\n NG_APP_POSTHOG_HOST: host,\n }),\n },\n\n analytics: {\n getTags: () => ({}),\n },\n\n prompts: {\n projectTypeDetection:\n 'This is an Angular project. Look for package.json, angular.json, and lockfiles (package-lock.json, yarn.lock, pnpm-lock.yaml) to confirm.',\n getAdditionalContextLines: () => {\n const frameworkId = 'angular';\n\n return [\n `Framework docs ID: ${frameworkId} (use posthog://docs/frameworks/${frameworkId} for documentation)`,\n 'Angular uses dependency injection for services. PostHog should be initialized as a service.',\n 'For standalone components, ensure PostHog is properly provided in the application config.',\n ];\n },\n },\n\n ui: {\n successMessage: 'PostHog integration complete',\n estimatedDurationMinutes: 8,\n getOutroChanges: () => [\n `Analyzed your Angular project structure`,\n `Created and configured PostHog service`,\n `Integrated PostHog into your application`,\n ],\n getOutroNextSteps: () => [\n 'Start your development server with `ng serve` to see PostHog in action',\n 'Visit your PostHog dashboard to see incoming events',\n ],\n },\n};\n"]}
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ASTRO_AGENT_CONFIG = void 0;
4
- const package_manager_detection_1 = require("../../lib/package-manager-detection");
4
+ const package_manager_1 = require("../../lib/detection/package-manager");
5
5
  const constants_1 = require("../../lib/constants");
6
6
  const package_json_1 = require("../../utils/package-json");
7
7
  const setup_utils_1 = require("../../utils/setup-utils");
@@ -29,7 +29,7 @@ exports.ASTRO_AGENT_CONFIG = {
29
29
  const packageJson = await (0, setup_utils_1.tryGetPackageJson)(options);
30
30
  return packageJson ? (0, package_json_1.hasPackageInstalled)('astro', packageJson) : false;
31
31
  },
32
- detectPackageManager: package_manager_detection_1.detectNodePackageManagers,
32
+ detectPackageManager: package_manager_1.detectNodePackageManagers,
33
33
  },
34
34
  environment: {
35
35
  uploadToHosting: true,
@@ -1 +1 @@
1
- {"version":3,"file":"astro-wizard-agent.js","sourceRoot":"","sources":["../../../../src/frameworks/astro/astro-wizard-agent.ts"],"names":[],"mappings":"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","sourcesContent":["/* Astro wizard using posthog-agent with PostHog MCP */\nimport type { WizardOptions } from '../../utils/types';\nimport type { FrameworkConfig } from '../../lib/framework-config';\nimport { detectNodePackageManagers } from '../../lib/package-manager-detection';\nimport { Integration } from '../../lib/constants';\nimport {\n getPackageVersion,\n getInstalledPackageVersion,\n hasPackageInstalled,\n type PackageDotJson,\n} from '../../utils/package-json';\nimport { tryGetPackageJson } from '../../utils/setup-utils';\nimport { getUI } from '../../ui';\nimport {\n getAstroRenderingMode,\n getAstroVersionBucket,\n getAstroRenderingModeName,\n AstroRenderingMode,\n} from './utils';\n\ntype AstroContext = {\n renderingMode?: AstroRenderingMode;\n};\n\nexport const ASTRO_AGENT_CONFIG: FrameworkConfig<AstroContext> = {\n metadata: {\n name: 'Astro',\n integration: Integration.astro,\n docsUrl: 'https://posthog.com/docs/libraries/astro',\n gatherContext: async (options: WizardOptions) => {\n const renderingMode = await getAstroRenderingMode(options);\n getUI().setDetectedFramework(\n `Astro ${getAstroRenderingModeName(renderingMode)}`,\n );\n return { renderingMode };\n },\n },\n\n detection: {\n packageName: 'astro',\n packageDisplayName: 'Astro',\n getVersion: (packageJson: unknown) =>\n getPackageVersion('astro', packageJson as PackageDotJson),\n getVersionBucket: getAstroVersionBucket,\n minimumVersion: '4.0.0',\n getInstalledVersion: (options: WizardOptions) =>\n Promise.resolve(getInstalledPackageVersion('astro', options.installDir)),\n detect: async (options) => {\n const packageJson = await tryGetPackageJson(options);\n return packageJson ? hasPackageInstalled('astro', packageJson) : false;\n },\n detectPackageManager: detectNodePackageManagers,\n },\n\n environment: {\n uploadToHosting: true,\n getEnvVars: (apiKey: string, host: string) => ({\n PUBLIC_POSTHOG_PROJECT_TOKEN: apiKey,\n PUBLIC_POSTHOG_HOST: host,\n }),\n },\n\n analytics: {\n getTags: (context) => ({\n 'rendering-mode': context.renderingMode ?? 'static',\n }),\n },\n\n prompts: {\n projectTypeDetection:\n 'This is a JavaScript/TypeScript project. Look for package.json and lockfiles (package-lock.json, yarn.lock, pnpm-lock.yaml, bun.lockb) to confirm.',\n getAdditionalContextLines: (context) => {\n const modeName = getAstroRenderingModeName(\n context.renderingMode ?? AstroRenderingMode.STATIC,\n );\n\n // Map rendering mode to framework ID for MCP docs resource\n const frameworkIdMap: Record<AstroRenderingMode, string> = {\n [AstroRenderingMode.STATIC]: 'astro-static',\n [AstroRenderingMode.VIEW_TRANSITIONS]: 'astro-view-transitions',\n [AstroRenderingMode.SSR]: 'astro-ssr',\n [AstroRenderingMode.HYBRID]: 'astro-hybrid',\n };\n\n const frameworkId =\n frameworkIdMap[context.renderingMode ?? AstroRenderingMode.STATIC];\n\n const lines = [\n `Rendering mode: ${modeName}`,\n `Framework docs ID: ${frameworkId} (use posthog://docs/frameworks/${frameworkId} for documentation)`,\n ];\n\n // Add mode-specific guidance\n if (context.renderingMode === AstroRenderingMode.VIEW_TRANSITIONS) {\n lines.push(\n 'IMPORTANT: Use window.__posthog_initialized guard to prevent re-initialization during soft navigation',\n );\n lines.push(\n \"IMPORTANT: Set capture_pageview: 'history_change' for automatic pageview tracking\",\n );\n }\n\n if (\n context.renderingMode === AstroRenderingMode.SSR ||\n context.renderingMode === AstroRenderingMode.HYBRID\n ) {\n lines.push(\n 'IMPORTANT: Use posthog-node for server-side tracking in API routes',\n );\n lines.push(\n 'IMPORTANT: Create a singleton pattern for the posthog-node client',\n );\n }\n\n return lines;\n },\n },\n\n ui: {\n successMessage: 'PostHog integration complete',\n estimatedDurationMinutes: 6,\n getOutroChanges: (context) => {\n const modeName = getAstroRenderingModeName(\n context.renderingMode ?? AstroRenderingMode.STATIC,\n );\n const changes = [\n `Analyzed your Astro project structure (${modeName})`,\n `Created PostHog component with is:inline script`,\n `Integrated PostHog into your layout`,\n ];\n\n if (\n context.renderingMode === AstroRenderingMode.SSR ||\n context.renderingMode === AstroRenderingMode.HYBRID\n ) {\n changes.push(`Set up posthog-node for server-side tracking`);\n }\n\n if (context.renderingMode === AstroRenderingMode.VIEW_TRANSITIONS) {\n changes.push(\n `Added initialization guard for view transitions compatibility`,\n );\n }\n\n return changes;\n },\n getOutroNextSteps: () => {\n return [\n 'Start your development server to see PostHog in action',\n 'Visit your PostHog dashboard to see incoming events',\n ];\n },\n },\n};\n"]}
1
+ {"version":3,"file":"astro-wizard-agent.js","sourceRoot":"","sources":["../../../../src/frameworks/astro/astro-wizard-agent.ts"],"names":[],"mappings":"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","sourcesContent":["/* Astro wizard using posthog-agent with PostHog MCP */\nimport type { WizardOptions } from '../../utils/types';\nimport type { FrameworkConfig } from '../../lib/framework-config';\nimport { detectNodePackageManagers } from '../../lib/detection/package-manager';\nimport { Integration } from '../../lib/constants';\nimport {\n getPackageVersion,\n getInstalledPackageVersion,\n hasPackageInstalled,\n type PackageDotJson,\n} from '../../utils/package-json';\nimport { tryGetPackageJson } from '../../utils/setup-utils';\nimport { getUI } from '../../ui';\nimport {\n getAstroRenderingMode,\n getAstroVersionBucket,\n getAstroRenderingModeName,\n AstroRenderingMode,\n} from './utils';\n\ntype AstroContext = {\n renderingMode?: AstroRenderingMode;\n};\n\nexport const ASTRO_AGENT_CONFIG: FrameworkConfig<AstroContext> = {\n metadata: {\n name: 'Astro',\n integration: Integration.astro,\n docsUrl: 'https://posthog.com/docs/libraries/astro',\n gatherContext: async (options: WizardOptions) => {\n const renderingMode = await getAstroRenderingMode(options);\n getUI().setDetectedFramework(\n `Astro ${getAstroRenderingModeName(renderingMode)}`,\n );\n return { renderingMode };\n },\n },\n\n detection: {\n packageName: 'astro',\n packageDisplayName: 'Astro',\n getVersion: (packageJson: unknown) =>\n getPackageVersion('astro', packageJson as PackageDotJson),\n getVersionBucket: getAstroVersionBucket,\n minimumVersion: '4.0.0',\n getInstalledVersion: (options: WizardOptions) =>\n Promise.resolve(getInstalledPackageVersion('astro', options.installDir)),\n detect: async (options) => {\n const packageJson = await tryGetPackageJson(options);\n return packageJson ? hasPackageInstalled('astro', packageJson) : false;\n },\n detectPackageManager: detectNodePackageManagers,\n },\n\n environment: {\n uploadToHosting: true,\n getEnvVars: (apiKey: string, host: string) => ({\n PUBLIC_POSTHOG_PROJECT_TOKEN: apiKey,\n PUBLIC_POSTHOG_HOST: host,\n }),\n },\n\n analytics: {\n getTags: (context) => ({\n 'rendering-mode': context.renderingMode ?? 'static',\n }),\n },\n\n prompts: {\n projectTypeDetection:\n 'This is a JavaScript/TypeScript project. Look for package.json and lockfiles (package-lock.json, yarn.lock, pnpm-lock.yaml, bun.lockb) to confirm.',\n getAdditionalContextLines: (context) => {\n const modeName = getAstroRenderingModeName(\n context.renderingMode ?? AstroRenderingMode.STATIC,\n );\n\n // Map rendering mode to framework ID for MCP docs resource\n const frameworkIdMap: Record<AstroRenderingMode, string> = {\n [AstroRenderingMode.STATIC]: 'astro-static',\n [AstroRenderingMode.VIEW_TRANSITIONS]: 'astro-view-transitions',\n [AstroRenderingMode.SSR]: 'astro-ssr',\n [AstroRenderingMode.HYBRID]: 'astro-hybrid',\n };\n\n const frameworkId =\n frameworkIdMap[context.renderingMode ?? AstroRenderingMode.STATIC];\n\n const lines = [\n `Rendering mode: ${modeName}`,\n `Framework docs ID: ${frameworkId} (use posthog://docs/frameworks/${frameworkId} for documentation)`,\n ];\n\n // Add mode-specific guidance\n if (context.renderingMode === AstroRenderingMode.VIEW_TRANSITIONS) {\n lines.push(\n 'IMPORTANT: Use window.__posthog_initialized guard to prevent re-initialization during soft navigation',\n );\n lines.push(\n \"IMPORTANT: Set capture_pageview: 'history_change' for automatic pageview tracking\",\n );\n }\n\n if (\n context.renderingMode === AstroRenderingMode.SSR ||\n context.renderingMode === AstroRenderingMode.HYBRID\n ) {\n lines.push(\n 'IMPORTANT: Use posthog-node for server-side tracking in API routes',\n );\n lines.push(\n 'IMPORTANT: Create a singleton pattern for the posthog-node client',\n );\n }\n\n return lines;\n },\n },\n\n ui: {\n successMessage: 'PostHog integration complete',\n estimatedDurationMinutes: 6,\n getOutroChanges: (context) => {\n const modeName = getAstroRenderingModeName(\n context.renderingMode ?? AstroRenderingMode.STATIC,\n );\n const changes = [\n `Analyzed your Astro project structure (${modeName})`,\n `Created PostHog component with is:inline script`,\n `Integrated PostHog into your layout`,\n ];\n\n if (\n context.renderingMode === AstroRenderingMode.SSR ||\n context.renderingMode === AstroRenderingMode.HYBRID\n ) {\n changes.push(`Set up posthog-node for server-side tracking`);\n }\n\n if (context.renderingMode === AstroRenderingMode.VIEW_TRANSITIONS) {\n changes.push(\n `Added initialization guard for view transitions compatibility`,\n );\n }\n\n return changes;\n },\n getOutroNextSteps: () => {\n return [\n 'Start your development server to see PostHog in action',\n 'Visit your PostHog dashboard to see incoming events',\n ];\n },\n },\n};\n"]}
@@ -38,7 +38,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
38
38
  Object.defineProperty(exports, "__esModule", { value: true });
39
39
  exports.DJANGO_AGENT_CONFIG = void 0;
40
40
  const framework_config_1 = require("../../lib/framework-config");
41
- const package_manager_detection_1 = require("../../lib/package-manager-detection");
41
+ const package_manager_1 = require("../../lib/detection/package-manager");
42
42
  const constants_1 = require("../../lib/constants");
43
43
  const fast_glob_1 = __importDefault(require("fast-glob"));
44
44
  const fs = __importStar(require("node:fs"));
@@ -108,7 +108,7 @@ exports.DJANGO_AGENT_CONFIG = {
108
108
  }
109
109
  return false;
110
110
  },
111
- detectPackageManager: package_manager_detection_1.detectPythonPackageManagers,
111
+ detectPackageManager: package_manager_1.detectPythonPackageManagers,
112
112
  },
113
113
  environment: {
114
114
  uploadToHosting: false,
@@ -1 +1 @@
1
- {"version":3,"file":"django-wizard-agent.js","sourceRoot":"","sources":["../../../../src/frameworks/django/django-wizard-agent.ts"],"names":[],"mappings":"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","sourcesContent":["/* Django wizard using posthog-agent with PostHog MCP */\nimport type { WizardOptions } from '../../utils/types';\nimport type { FrameworkConfig } from '../../lib/framework-config';\nimport { PYTHON_PACKAGE_INSTALLATION } from '../../lib/framework-config';\nimport { detectPythonPackageManagers } from '../../lib/package-manager-detection';\nimport { Integration } from '../../lib/constants';\nimport fg from 'fast-glob';\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport {\n getDjangoVersion,\n getDjangoProjectType,\n getDjangoProjectTypeName,\n getDjangoVersionBucket,\n DjangoProjectType,\n findDjangoSettingsFile,\n} from './utils';\n\ntype DjangoContext = {\n projectType?: DjangoProjectType;\n settingsFile?: string;\n};\n\nexport const DJANGO_AGENT_CONFIG: FrameworkConfig<DjangoContext> = {\n metadata: {\n name: 'Django',\n integration: Integration.django,\n beta: true,\n docsUrl: 'https://posthog.com/docs/libraries/django',\n unsupportedVersionDocsUrl: 'https://posthog.com/docs/libraries/python',\n gatherContext: async (options: WizardOptions) => {\n const projectType = await getDjangoProjectType(options);\n const settingsFile = await findDjangoSettingsFile(options);\n return { projectType, settingsFile };\n },\n },\n\n detection: {\n packageName: 'django',\n packageDisplayName: 'Django',\n usesPackageJson: false,\n getVersion: () => undefined,\n getVersionBucket: getDjangoVersionBucket,\n minimumVersion: '3.0.0',\n getInstalledVersion: (options: WizardOptions) => getDjangoVersion(options),\n detect: async (options) => {\n const { installDir } = options;\n\n const managePyMatches = await fg('**/manage.py', {\n cwd: installDir,\n ignore: ['**/venv/**', '**/.venv/**', '**/env/**', '**/.env/**'],\n });\n\n if (managePyMatches.length > 0) {\n for (const match of managePyMatches) {\n try {\n const content = fs.readFileSync(\n path.join(installDir, match),\n 'utf-8',\n );\n // Check for actual Django imports and usage\n if (\n content.includes('from django') ||\n content.includes('import django') ||\n content.includes('DJANGO_SETTINGS_MODULE') ||\n /execute_from_command_line/.test(content)\n ) {\n return true;\n }\n } catch {\n continue;\n }\n }\n }\n\n const requirementsFiles = await fg(\n ['**/requirements*.txt', '**/pyproject.toml', '**/setup.py'],\n {\n cwd: installDir,\n ignore: ['**/venv/**', '**/.venv/**', '**/env/**', '**/.env/**'],\n },\n );\n\n for (const reqFile of requirementsFiles) {\n try {\n const content = fs.readFileSync(\n path.join(installDir, reqFile),\n 'utf-8',\n );\n // Match Django as a package requirement, not in comments or other text\n // Look for: django, django>=, django==, django~=, Django (capitalized)\n if (\n /^django([>=~!<\\s]|$)/im.test(content) ||\n /[\"']django[\"']/i.test(content)\n ) {\n return true;\n }\n } catch {\n continue;\n }\n }\n\n return false;\n },\n detectPackageManager: detectPythonPackageManagers,\n },\n\n environment: {\n uploadToHosting: false,\n getEnvVars: (apiKey: string, host: string) => ({\n POSTHOG_PROJECT_TOKEN: apiKey,\n POSTHOG_HOST: host,\n }),\n },\n\n analytics: {\n getTags: (context) => ({\n projectType: context.projectType || 'unknown',\n }),\n },\n\n prompts: {\n packageInstallation: PYTHON_PACKAGE_INSTALLATION,\n projectTypeDetection:\n 'This is a Python/Django project. Look for requirements.txt, pyproject.toml, setup.py, Pipfile, or manage.py to confirm.',\n getAdditionalContextLines: (context) => {\n const projectTypeName = context.projectType\n ? getDjangoProjectTypeName(context.projectType)\n : 'unknown';\n\n // Map project type to framework ID for MCP docs resource\n const frameworkIdMap: Record<DjangoProjectType, string> = {\n [DjangoProjectType.STANDARD]: 'django',\n [DjangoProjectType.DRF]: 'django',\n [DjangoProjectType.WAGTAIL]: 'django',\n [DjangoProjectType.CHANNELS]: 'django',\n };\n\n const frameworkId = context.projectType\n ? frameworkIdMap[context.projectType]\n : 'django';\n\n const lines = [\n `Project type: ${projectTypeName}`,\n `Framework docs ID: ${frameworkId} (use posthog://docs/frameworks/${frameworkId} for documentation)`,\n ];\n\n if (context.settingsFile) {\n lines.push(`Settings file: ${context.settingsFile}`);\n }\n\n return lines;\n },\n },\n\n ui: {\n successMessage: 'PostHog integration complete',\n estimatedDurationMinutes: 5,\n getOutroChanges: (context) => {\n const projectTypeName = context.projectType\n ? getDjangoProjectTypeName(context.projectType)\n : 'Django';\n return [\n `Analyzed your ${projectTypeName} project structure`,\n `Installed the PostHog Python package`,\n `Configured PostHog in your Django settings`,\n `Added PostHog middleware for automatic event tracking`,\n ];\n },\n getOutroNextSteps: () => [\n 'Start your Django development server to see PostHog in action',\n 'Visit your PostHog dashboard to see incoming events',\n 'Use identify_context() within new_context() to associate events with users',\n ],\n },\n};\n"]}
1
+ {"version":3,"file":"django-wizard-agent.js","sourceRoot":"","sources":["../../../../src/frameworks/django/django-wizard-agent.ts"],"names":[],"mappings":"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","sourcesContent":["/* Django wizard using posthog-agent with PostHog MCP */\nimport type { WizardOptions } from '../../utils/types';\nimport type { FrameworkConfig } from '../../lib/framework-config';\nimport { PYTHON_PACKAGE_INSTALLATION } from '../../lib/framework-config';\nimport { detectPythonPackageManagers } from '../../lib/detection/package-manager';\nimport { Integration } from '../../lib/constants';\nimport fg from 'fast-glob';\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport {\n getDjangoVersion,\n getDjangoProjectType,\n getDjangoProjectTypeName,\n getDjangoVersionBucket,\n DjangoProjectType,\n findDjangoSettingsFile,\n} from './utils';\n\ntype DjangoContext = {\n projectType?: DjangoProjectType;\n settingsFile?: string;\n};\n\nexport const DJANGO_AGENT_CONFIG: FrameworkConfig<DjangoContext> = {\n metadata: {\n name: 'Django',\n integration: Integration.django,\n beta: true,\n docsUrl: 'https://posthog.com/docs/libraries/django',\n unsupportedVersionDocsUrl: 'https://posthog.com/docs/libraries/python',\n gatherContext: async (options: WizardOptions) => {\n const projectType = await getDjangoProjectType(options);\n const settingsFile = await findDjangoSettingsFile(options);\n return { projectType, settingsFile };\n },\n },\n\n detection: {\n packageName: 'django',\n packageDisplayName: 'Django',\n usesPackageJson: false,\n getVersion: () => undefined,\n getVersionBucket: getDjangoVersionBucket,\n minimumVersion: '3.0.0',\n getInstalledVersion: (options: WizardOptions) => getDjangoVersion(options),\n detect: async (options) => {\n const { installDir } = options;\n\n const managePyMatches = await fg('**/manage.py', {\n cwd: installDir,\n ignore: ['**/venv/**', '**/.venv/**', '**/env/**', '**/.env/**'],\n });\n\n if (managePyMatches.length > 0) {\n for (const match of managePyMatches) {\n try {\n const content = fs.readFileSync(\n path.join(installDir, match),\n 'utf-8',\n );\n // Check for actual Django imports and usage\n if (\n content.includes('from django') ||\n content.includes('import django') ||\n content.includes('DJANGO_SETTINGS_MODULE') ||\n /execute_from_command_line/.test(content)\n ) {\n return true;\n }\n } catch {\n continue;\n }\n }\n }\n\n const requirementsFiles = await fg(\n ['**/requirements*.txt', '**/pyproject.toml', '**/setup.py'],\n {\n cwd: installDir,\n ignore: ['**/venv/**', '**/.venv/**', '**/env/**', '**/.env/**'],\n },\n );\n\n for (const reqFile of requirementsFiles) {\n try {\n const content = fs.readFileSync(\n path.join(installDir, reqFile),\n 'utf-8',\n );\n // Match Django as a package requirement, not in comments or other text\n // Look for: django, django>=, django==, django~=, Django (capitalized)\n if (\n /^django([>=~!<\\s]|$)/im.test(content) ||\n /[\"']django[\"']/i.test(content)\n ) {\n return true;\n }\n } catch {\n continue;\n }\n }\n\n return false;\n },\n detectPackageManager: detectPythonPackageManagers,\n },\n\n environment: {\n uploadToHosting: false,\n getEnvVars: (apiKey: string, host: string) => ({\n POSTHOG_PROJECT_TOKEN: apiKey,\n POSTHOG_HOST: host,\n }),\n },\n\n analytics: {\n getTags: (context) => ({\n projectType: context.projectType || 'unknown',\n }),\n },\n\n prompts: {\n packageInstallation: PYTHON_PACKAGE_INSTALLATION,\n projectTypeDetection:\n 'This is a Python/Django project. Look for requirements.txt, pyproject.toml, setup.py, Pipfile, or manage.py to confirm.',\n getAdditionalContextLines: (context) => {\n const projectTypeName = context.projectType\n ? getDjangoProjectTypeName(context.projectType)\n : 'unknown';\n\n // Map project type to framework ID for MCP docs resource\n const frameworkIdMap: Record<DjangoProjectType, string> = {\n [DjangoProjectType.STANDARD]: 'django',\n [DjangoProjectType.DRF]: 'django',\n [DjangoProjectType.WAGTAIL]: 'django',\n [DjangoProjectType.CHANNELS]: 'django',\n };\n\n const frameworkId = context.projectType\n ? frameworkIdMap[context.projectType]\n : 'django';\n\n const lines = [\n `Project type: ${projectTypeName}`,\n `Framework docs ID: ${frameworkId} (use posthog://docs/frameworks/${frameworkId} for documentation)`,\n ];\n\n if (context.settingsFile) {\n lines.push(`Settings file: ${context.settingsFile}`);\n }\n\n return lines;\n },\n },\n\n ui: {\n successMessage: 'PostHog integration complete',\n estimatedDurationMinutes: 5,\n getOutroChanges: (context) => {\n const projectTypeName = context.projectType\n ? getDjangoProjectTypeName(context.projectType)\n : 'Django';\n return [\n `Analyzed your ${projectTypeName} project structure`,\n `Installed the PostHog Python package`,\n `Configured PostHog in your Django settings`,\n `Added PostHog middleware for automatic event tracking`,\n ];\n },\n getOutroNextSteps: () => [\n 'Start your Django development server to see PostHog in action',\n 'Visit your PostHog dashboard to see incoming events',\n 'Use identify_context() within new_context() to associate events with users',\n ],\n },\n};\n"]}
@@ -38,7 +38,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
38
38
  Object.defineProperty(exports, "__esModule", { value: true });
39
39
  exports.FASTAPI_AGENT_CONFIG = void 0;
40
40
  const framework_config_1 = require("../../lib/framework-config");
41
- const package_manager_detection_1 = require("../../lib/package-manager-detection");
41
+ const package_manager_1 = require("../../lib/detection/package-manager");
42
42
  const constants_1 = require("../../lib/constants");
43
43
  const utils_1 = require("./utils");
44
44
  const fast_glob_1 = __importDefault(require("fast-glob"));
@@ -124,7 +124,7 @@ exports.FASTAPI_AGENT_CONFIG = {
124
124
  }
125
125
  return false;
126
126
  },
127
- detectPackageManager: package_manager_detection_1.detectPythonPackageManagers,
127
+ detectPackageManager: package_manager_1.detectPythonPackageManagers,
128
128
  },
129
129
  environment: {
130
130
  uploadToHosting: false,
@@ -1 +1 @@
1
- {"version":3,"file":"fastapi-wizard-agent.js","sourceRoot":"","sources":["../../../../src/frameworks/fastapi/fastapi-wizard-agent.ts"],"names":[],"mappings":"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","sourcesContent":["/* FastAPI wizard using posthog-agent with PostHog MCP */\nimport type { WizardOptions } from '../../utils/types';\nimport type { FrameworkConfig } from '../../lib/framework-config';\nimport { PYTHON_PACKAGE_INSTALLATION } from '../../lib/framework-config';\nimport { detectPythonPackageManagers } from '../../lib/package-manager-detection';\nimport { Integration } from '../../lib/constants';\nimport {\n getFastAPIVersion,\n getFastAPIProjectType,\n getFastAPIProjectTypeName,\n getFastAPIVersionBucket,\n FastAPIProjectType,\n findFastAPIAppFile,\n} from './utils';\nimport fg from 'fast-glob';\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\n\n/**\n * FastAPI framework configuration for the universal agent runner\n */\n\nexport const FASTAPI_AGENT_CONFIG: FrameworkConfig = {\n metadata: {\n name: 'FastAPI',\n integration: Integration.fastapi,\n docsUrl: 'https://posthog.com/docs/libraries/python',\n unsupportedVersionDocsUrl: 'https://posthog.com/docs/libraries/python',\n gatherContext: async (options: WizardOptions) => {\n const projectType = await getFastAPIProjectType(options);\n const appFile = await findFastAPIAppFile(options);\n return { projectType, appFile };\n },\n },\n\n detection: {\n packageName: 'fastapi',\n packageDisplayName: 'FastAPI',\n usesPackageJson: false,\n getVersion: (_packageJson: any) => {\n // For FastAPI, we don't use package.json. Version is extracted separately\n // from requirements.txt or pyproject.toml in the wizard entry point\n return undefined;\n },\n getVersionBucket: getFastAPIVersionBucket,\n getInstalledVersion: getFastAPIVersion,\n detect: async (options) => {\n const { installDir } = options;\n\n // Note: Django and Flask are checked before FastAPI in INTEGRATION_ORDER,\n // so if we get here, the project is not a Django or Flask project.\n\n // Check for FastAPI in requirements files\n const requirementsFiles = await fg(\n [\n '**/requirements*.txt',\n '**/pyproject.toml',\n '**/setup.py',\n '**/Pipfile',\n ],\n {\n cwd: installDir,\n ignore: ['**/venv/**', '**/.venv/**', '**/env/**', '**/.env/**'],\n },\n );\n\n for (const reqFile of requirementsFiles) {\n try {\n const content = fs.readFileSync(\n path.join(installDir, reqFile),\n 'utf-8',\n );\n // Check for fastapi package (case-insensitive)\n // Match \"fastapi\" as a standalone package\n if (\n /^fastapi([<>=~!]|$|\\s)/im.test(content) ||\n /[\"']fastapi[\"']/i.test(content)\n ) {\n return true;\n }\n } catch {\n continue;\n }\n }\n\n // Check for FastAPI app patterns in Python files\n const pyFiles = await fg(\n ['**/main.py', '**/app.py', '**/application.py', '**/__init__.py'],\n {\n cwd: installDir,\n ignore: [\n '**/venv/**',\n '**/.venv/**',\n '**/env/**',\n '**/.env/**',\n '**/__pycache__/**',\n ],\n },\n );\n\n for (const pyFile of pyFiles) {\n try {\n const content = fs.readFileSync(\n path.join(installDir, pyFile),\n 'utf-8',\n );\n if (\n content.includes('from fastapi import') ||\n content.includes('import fastapi') ||\n /FastAPI\\s*\\(/.test(content)\n ) {\n return true;\n }\n } catch {\n continue;\n }\n }\n\n return false;\n },\n detectPackageManager: detectPythonPackageManagers,\n },\n\n environment: {\n uploadToHosting: false,\n getEnvVars: (apiKey: string, host: string) => ({\n POSTHOG_PROJECT_TOKEN: apiKey,\n POSTHOG_HOST: host,\n }),\n },\n\n analytics: {\n getTags: (context: any) => {\n const projectType = context.projectType as FastAPIProjectType;\n return {\n projectType: projectType || 'unknown',\n };\n },\n },\n\n prompts: {\n packageInstallation: PYTHON_PACKAGE_INSTALLATION,\n projectTypeDetection:\n 'This is a Python/FastAPI project. Look for requirements.txt, pyproject.toml, setup.py, Pipfile, or main.py/app.py to confirm.',\n getAdditionalContextLines: (context: any) => {\n const projectType = context.projectType as FastAPIProjectType;\n const projectTypeName = projectType\n ? getFastAPIProjectTypeName(projectType)\n : 'unknown';\n\n // Map project type to framework ID for MCP docs resource\n const frameworkIdMap: Record<FastAPIProjectType, string> = {\n [FastAPIProjectType.STANDARD]: 'fastapi',\n [FastAPIProjectType.ROUTER]: 'fastapi',\n [FastAPIProjectType.FULLSTACK]: 'fastapi',\n };\n\n const frameworkId = projectType ? frameworkIdMap[projectType] : 'fastapi';\n\n const lines = [\n `Project type: ${projectTypeName}`,\n `Framework docs ID: ${frameworkId} (use posthog://docs/frameworks/${frameworkId} for documentation)`,\n ];\n\n if (context.appFile) {\n lines.push(`App file: ${context.appFile}`);\n }\n\n return lines;\n },\n },\n\n ui: {\n successMessage: 'PostHog integration complete',\n estimatedDurationMinutes: 5,\n getOutroChanges: (context: any) => {\n const projectType = context.projectType as FastAPIProjectType;\n const projectTypeName = projectType\n ? getFastAPIProjectTypeName(projectType)\n : 'FastAPI';\n return [\n `Analyzed your ${projectTypeName} project structure`,\n `Installed the PostHog Python package`,\n `Configured PostHog in your FastAPI application`,\n `Added PostHog initialization with lifespan event handling`,\n ];\n },\n getOutroNextSteps: () => [\n 'Start your FastAPI development server to see PostHog in action',\n 'Visit your PostHog dashboard to see incoming events',\n 'Use posthog.identify() to associate events with users',\n ],\n },\n};\n"]}
1
+ {"version":3,"file":"fastapi-wizard-agent.js","sourceRoot":"","sources":["../../../../src/frameworks/fastapi/fastapi-wizard-agent.ts"],"names":[],"mappings":"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","sourcesContent":["/* FastAPI wizard using posthog-agent with PostHog MCP */\nimport type { WizardOptions } from '../../utils/types';\nimport type { FrameworkConfig } from '../../lib/framework-config';\nimport { PYTHON_PACKAGE_INSTALLATION } from '../../lib/framework-config';\nimport { detectPythonPackageManagers } from '../../lib/detection/package-manager';\nimport { Integration } from '../../lib/constants';\nimport {\n getFastAPIVersion,\n getFastAPIProjectType,\n getFastAPIProjectTypeName,\n getFastAPIVersionBucket,\n FastAPIProjectType,\n findFastAPIAppFile,\n} from './utils';\nimport fg from 'fast-glob';\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\n\n/**\n * FastAPI framework configuration for the universal agent runner\n */\n\nexport const FASTAPI_AGENT_CONFIG: FrameworkConfig = {\n metadata: {\n name: 'FastAPI',\n integration: Integration.fastapi,\n docsUrl: 'https://posthog.com/docs/libraries/python',\n unsupportedVersionDocsUrl: 'https://posthog.com/docs/libraries/python',\n gatherContext: async (options: WizardOptions) => {\n const projectType = await getFastAPIProjectType(options);\n const appFile = await findFastAPIAppFile(options);\n return { projectType, appFile };\n },\n },\n\n detection: {\n packageName: 'fastapi',\n packageDisplayName: 'FastAPI',\n usesPackageJson: false,\n getVersion: (_packageJson: any) => {\n // For FastAPI, we don't use package.json. Version is extracted separately\n // from requirements.txt or pyproject.toml in the wizard entry point\n return undefined;\n },\n getVersionBucket: getFastAPIVersionBucket,\n getInstalledVersion: getFastAPIVersion,\n detect: async (options) => {\n const { installDir } = options;\n\n // Note: Django and Flask are checked before FastAPI in INTEGRATION_ORDER,\n // so if we get here, the project is not a Django or Flask project.\n\n // Check for FastAPI in requirements files\n const requirementsFiles = await fg(\n [\n '**/requirements*.txt',\n '**/pyproject.toml',\n '**/setup.py',\n '**/Pipfile',\n ],\n {\n cwd: installDir,\n ignore: ['**/venv/**', '**/.venv/**', '**/env/**', '**/.env/**'],\n },\n );\n\n for (const reqFile of requirementsFiles) {\n try {\n const content = fs.readFileSync(\n path.join(installDir, reqFile),\n 'utf-8',\n );\n // Check for fastapi package (case-insensitive)\n // Match \"fastapi\" as a standalone package\n if (\n /^fastapi([<>=~!]|$|\\s)/im.test(content) ||\n /[\"']fastapi[\"']/i.test(content)\n ) {\n return true;\n }\n } catch {\n continue;\n }\n }\n\n // Check for FastAPI app patterns in Python files\n const pyFiles = await fg(\n ['**/main.py', '**/app.py', '**/application.py', '**/__init__.py'],\n {\n cwd: installDir,\n ignore: [\n '**/venv/**',\n '**/.venv/**',\n '**/env/**',\n '**/.env/**',\n '**/__pycache__/**',\n ],\n },\n );\n\n for (const pyFile of pyFiles) {\n try {\n const content = fs.readFileSync(\n path.join(installDir, pyFile),\n 'utf-8',\n );\n if (\n content.includes('from fastapi import') ||\n content.includes('import fastapi') ||\n /FastAPI\\s*\\(/.test(content)\n ) {\n return true;\n }\n } catch {\n continue;\n }\n }\n\n return false;\n },\n detectPackageManager: detectPythonPackageManagers,\n },\n\n environment: {\n uploadToHosting: false,\n getEnvVars: (apiKey: string, host: string) => ({\n POSTHOG_PROJECT_TOKEN: apiKey,\n POSTHOG_HOST: host,\n }),\n },\n\n analytics: {\n getTags: (context: any) => {\n const projectType = context.projectType as FastAPIProjectType;\n return {\n projectType: projectType || 'unknown',\n };\n },\n },\n\n prompts: {\n packageInstallation: PYTHON_PACKAGE_INSTALLATION,\n projectTypeDetection:\n 'This is a Python/FastAPI project. Look for requirements.txt, pyproject.toml, setup.py, Pipfile, or main.py/app.py to confirm.',\n getAdditionalContextLines: (context: any) => {\n const projectType = context.projectType as FastAPIProjectType;\n const projectTypeName = projectType\n ? getFastAPIProjectTypeName(projectType)\n : 'unknown';\n\n // Map project type to framework ID for MCP docs resource\n const frameworkIdMap: Record<FastAPIProjectType, string> = {\n [FastAPIProjectType.STANDARD]: 'fastapi',\n [FastAPIProjectType.ROUTER]: 'fastapi',\n [FastAPIProjectType.FULLSTACK]: 'fastapi',\n };\n\n const frameworkId = projectType ? frameworkIdMap[projectType] : 'fastapi';\n\n const lines = [\n `Project type: ${projectTypeName}`,\n `Framework docs ID: ${frameworkId} (use posthog://docs/frameworks/${frameworkId} for documentation)`,\n ];\n\n if (context.appFile) {\n lines.push(`App file: ${context.appFile}`);\n }\n\n return lines;\n },\n },\n\n ui: {\n successMessage: 'PostHog integration complete',\n estimatedDurationMinutes: 5,\n getOutroChanges: (context: any) => {\n const projectType = context.projectType as FastAPIProjectType;\n const projectTypeName = projectType\n ? getFastAPIProjectTypeName(projectType)\n : 'FastAPI';\n return [\n `Analyzed your ${projectTypeName} project structure`,\n `Installed the PostHog Python package`,\n `Configured PostHog in your FastAPI application`,\n `Added PostHog initialization with lifespan event handling`,\n ];\n },\n getOutroNextSteps: () => [\n 'Start your FastAPI development server to see PostHog in action',\n 'Visit your PostHog dashboard to see incoming events',\n 'Use posthog.identify() to associate events with users',\n ],\n },\n};\n"]}
@@ -38,7 +38,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
38
38
  Object.defineProperty(exports, "__esModule", { value: true });
39
39
  exports.FLASK_AGENT_CONFIG = void 0;
40
40
  const framework_config_1 = require("../../lib/framework-config");
41
- const package_manager_detection_1 = require("../../lib/package-manager-detection");
41
+ const package_manager_1 = require("../../lib/detection/package-manager");
42
42
  const constants_1 = require("../../lib/constants");
43
43
  const fast_glob_1 = __importDefault(require("fast-glob"));
44
44
  const fs = __importStar(require("node:fs"));
@@ -113,7 +113,7 @@ exports.FLASK_AGENT_CONFIG = {
113
113
  }
114
114
  return false;
115
115
  },
116
- detectPackageManager: package_manager_detection_1.detectPythonPackageManagers,
116
+ detectPackageManager: package_manager_1.detectPythonPackageManagers,
117
117
  },
118
118
  environment: {
119
119
  uploadToHosting: false,
@@ -1 +1 @@
1
- {"version":3,"file":"flask-wizard-agent.js","sourceRoot":"","sources":["../../../../src/frameworks/flask/flask-wizard-agent.ts"],"names":[],"mappings":"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","sourcesContent":["/* Flask wizard using posthog-agent with PostHog MCP */\nimport type { WizardOptions } from '../../utils/types';\nimport type { FrameworkConfig } from '../../lib/framework-config';\nimport { PYTHON_PACKAGE_INSTALLATION } from '../../lib/framework-config';\nimport { detectPythonPackageManagers } from '../../lib/package-manager-detection';\nimport { Integration } from '../../lib/constants';\nimport fg from 'fast-glob';\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport {\n getFlaskVersion,\n getFlaskProjectType,\n getFlaskProjectTypeName,\n getFlaskVersionBucket,\n FlaskProjectType,\n findFlaskAppFile,\n} from './utils';\n\ntype FlaskContext = {\n projectType?: FlaskProjectType;\n appFile?: string;\n};\n\nexport const FLASK_AGENT_CONFIG: FrameworkConfig<FlaskContext> = {\n metadata: {\n name: 'Flask',\n integration: Integration.flask,\n beta: true,\n docsUrl: 'https://posthog.com/docs/libraries/python',\n unsupportedVersionDocsUrl: 'https://posthog.com/docs/libraries/python',\n gatherContext: async (options: WizardOptions) => {\n const projectType = await getFlaskProjectType(options);\n const appFile = await findFlaskAppFile(options);\n return { projectType, appFile };\n },\n },\n\n detection: {\n packageName: 'flask',\n packageDisplayName: 'Flask',\n usesPackageJson: false,\n getVersion: () => undefined,\n getVersionBucket: getFlaskVersionBucket,\n minimumVersion: '2.0.0',\n getInstalledVersion: (options: WizardOptions) => getFlaskVersion(options),\n detect: async (options) => {\n const { installDir } = options;\n\n const requirementsFiles = await fg(\n [\n '**/requirements*.txt',\n '**/pyproject.toml',\n '**/setup.py',\n '**/Pipfile',\n ],\n {\n cwd: installDir,\n ignore: ['**/venv/**', '**/.venv/**', '**/env/**', '**/.env/**'],\n },\n );\n\n for (const reqFile of requirementsFiles) {\n try {\n const content = fs.readFileSync(\n path.join(installDir, reqFile),\n 'utf-8',\n );\n if (\n /^flask([<>=~!]|$|\\s)/im.test(content) ||\n /[\"']flask[\"']/i.test(content)\n ) {\n return true;\n }\n } catch {\n continue;\n }\n }\n\n const pyFiles = await fg(\n ['**/app.py', '**/wsgi.py', '**/application.py', '**/__init__.py'],\n {\n cwd: installDir,\n ignore: [\n '**/venv/**',\n '**/.venv/**',\n '**/env/**',\n '**/.env/**',\n '**/__pycache__/**',\n ],\n },\n );\n\n for (const pyFile of pyFiles) {\n try {\n const content = fs.readFileSync(\n path.join(installDir, pyFile),\n 'utf-8',\n );\n if (\n content.includes('from flask import') ||\n content.includes('import flask') ||\n /Flask\\s*\\(/.test(content)\n ) {\n return true;\n }\n } catch {\n continue;\n }\n }\n\n return false;\n },\n detectPackageManager: detectPythonPackageManagers,\n },\n\n environment: {\n uploadToHosting: false,\n getEnvVars: (apiKey: string, host: string) => ({\n POSTHOG_PROJECT_TOKEN: apiKey,\n POSTHOG_HOST: host,\n }),\n },\n\n analytics: {\n getTags: (context) => ({\n projectType: context.projectType || 'unknown',\n }),\n },\n\n prompts: {\n packageInstallation: PYTHON_PACKAGE_INSTALLATION,\n projectTypeDetection:\n 'This is a Python/Flask project. Look for requirements.txt, pyproject.toml, setup.py, Pipfile, or app.py/wsgi.py to confirm.',\n getAdditionalContextLines: (context) => {\n const projectTypeName = context.projectType\n ? getFlaskProjectTypeName(context.projectType)\n : 'unknown';\n\n // Map project type to framework ID for MCP docs resource\n const frameworkIdMap: Record<FlaskProjectType, string> = {\n [FlaskProjectType.STANDARD]: 'flask',\n [FlaskProjectType.RESTFUL]: 'flask',\n [FlaskProjectType.RESTX]: 'flask',\n [FlaskProjectType.SMOREST]: 'flask',\n [FlaskProjectType.BLUEPRINT]: 'flask',\n };\n\n const frameworkId = context.projectType\n ? frameworkIdMap[context.projectType]\n : 'flask';\n\n const lines = [\n `Project type: ${projectTypeName}`,\n `Framework docs ID: ${frameworkId} (use posthog://docs/frameworks/${frameworkId} for documentation)`,\n ];\n\n if (context.appFile) {\n lines.push(`App file: ${context.appFile}`);\n }\n\n return lines;\n },\n },\n\n ui: {\n successMessage: 'PostHog integration complete',\n estimatedDurationMinutes: 5,\n getOutroChanges: (context) => {\n const projectTypeName = context.projectType\n ? getFlaskProjectTypeName(context.projectType)\n : 'Flask';\n return [\n `Analyzed your ${projectTypeName} project structure`,\n `Installed the PostHog Python package`,\n `Configured PostHog in your Flask application`,\n `Added PostHog initialization with automatic event tracking`,\n ];\n },\n getOutroNextSteps: () => [\n 'Start your Flask development server to see PostHog in action',\n 'Visit your PostHog dashboard to see incoming events',\n 'Use posthog.identify() to associate events with users',\n ],\n },\n};\n"]}
1
+ {"version":3,"file":"flask-wizard-agent.js","sourceRoot":"","sources":["../../../../src/frameworks/flask/flask-wizard-agent.ts"],"names":[],"mappings":"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","sourcesContent":["/* Flask wizard using posthog-agent with PostHog MCP */\nimport type { WizardOptions } from '../../utils/types';\nimport type { FrameworkConfig } from '../../lib/framework-config';\nimport { PYTHON_PACKAGE_INSTALLATION } from '../../lib/framework-config';\nimport { detectPythonPackageManagers } from '../../lib/detection/package-manager';\nimport { Integration } from '../../lib/constants';\nimport fg from 'fast-glob';\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport {\n getFlaskVersion,\n getFlaskProjectType,\n getFlaskProjectTypeName,\n getFlaskVersionBucket,\n FlaskProjectType,\n findFlaskAppFile,\n} from './utils';\n\ntype FlaskContext = {\n projectType?: FlaskProjectType;\n appFile?: string;\n};\n\nexport const FLASK_AGENT_CONFIG: FrameworkConfig<FlaskContext> = {\n metadata: {\n name: 'Flask',\n integration: Integration.flask,\n beta: true,\n docsUrl: 'https://posthog.com/docs/libraries/python',\n unsupportedVersionDocsUrl: 'https://posthog.com/docs/libraries/python',\n gatherContext: async (options: WizardOptions) => {\n const projectType = await getFlaskProjectType(options);\n const appFile = await findFlaskAppFile(options);\n return { projectType, appFile };\n },\n },\n\n detection: {\n packageName: 'flask',\n packageDisplayName: 'Flask',\n usesPackageJson: false,\n getVersion: () => undefined,\n getVersionBucket: getFlaskVersionBucket,\n minimumVersion: '2.0.0',\n getInstalledVersion: (options: WizardOptions) => getFlaskVersion(options),\n detect: async (options) => {\n const { installDir } = options;\n\n const requirementsFiles = await fg(\n [\n '**/requirements*.txt',\n '**/pyproject.toml',\n '**/setup.py',\n '**/Pipfile',\n ],\n {\n cwd: installDir,\n ignore: ['**/venv/**', '**/.venv/**', '**/env/**', '**/.env/**'],\n },\n );\n\n for (const reqFile of requirementsFiles) {\n try {\n const content = fs.readFileSync(\n path.join(installDir, reqFile),\n 'utf-8',\n );\n if (\n /^flask([<>=~!]|$|\\s)/im.test(content) ||\n /[\"']flask[\"']/i.test(content)\n ) {\n return true;\n }\n } catch {\n continue;\n }\n }\n\n const pyFiles = await fg(\n ['**/app.py', '**/wsgi.py', '**/application.py', '**/__init__.py'],\n {\n cwd: installDir,\n ignore: [\n '**/venv/**',\n '**/.venv/**',\n '**/env/**',\n '**/.env/**',\n '**/__pycache__/**',\n ],\n },\n );\n\n for (const pyFile of pyFiles) {\n try {\n const content = fs.readFileSync(\n path.join(installDir, pyFile),\n 'utf-8',\n );\n if (\n content.includes('from flask import') ||\n content.includes('import flask') ||\n /Flask\\s*\\(/.test(content)\n ) {\n return true;\n }\n } catch {\n continue;\n }\n }\n\n return false;\n },\n detectPackageManager: detectPythonPackageManagers,\n },\n\n environment: {\n uploadToHosting: false,\n getEnvVars: (apiKey: string, host: string) => ({\n POSTHOG_PROJECT_TOKEN: apiKey,\n POSTHOG_HOST: host,\n }),\n },\n\n analytics: {\n getTags: (context) => ({\n projectType: context.projectType || 'unknown',\n }),\n },\n\n prompts: {\n packageInstallation: PYTHON_PACKAGE_INSTALLATION,\n projectTypeDetection:\n 'This is a Python/Flask project. Look for requirements.txt, pyproject.toml, setup.py, Pipfile, or app.py/wsgi.py to confirm.',\n getAdditionalContextLines: (context) => {\n const projectTypeName = context.projectType\n ? getFlaskProjectTypeName(context.projectType)\n : 'unknown';\n\n // Map project type to framework ID for MCP docs resource\n const frameworkIdMap: Record<FlaskProjectType, string> = {\n [FlaskProjectType.STANDARD]: 'flask',\n [FlaskProjectType.RESTFUL]: 'flask',\n [FlaskProjectType.RESTX]: 'flask',\n [FlaskProjectType.SMOREST]: 'flask',\n [FlaskProjectType.BLUEPRINT]: 'flask',\n };\n\n const frameworkId = context.projectType\n ? frameworkIdMap[context.projectType]\n : 'flask';\n\n const lines = [\n `Project type: ${projectTypeName}`,\n `Framework docs ID: ${frameworkId} (use posthog://docs/frameworks/${frameworkId} for documentation)`,\n ];\n\n if (context.appFile) {\n lines.push(`App file: ${context.appFile}`);\n }\n\n return lines;\n },\n },\n\n ui: {\n successMessage: 'PostHog integration complete',\n estimatedDurationMinutes: 5,\n getOutroChanges: (context) => {\n const projectTypeName = context.projectType\n ? getFlaskProjectTypeName(context.projectType)\n : 'Flask';\n return [\n `Analyzed your ${projectTypeName} project structure`,\n `Installed the PostHog Python package`,\n `Configured PostHog in your Flask application`,\n `Added PostHog initialization with automatic event tracking`,\n ];\n },\n getOutroNextSteps: () => [\n 'Start your Flask development server to see PostHog in action',\n 'Visit your PostHog dashboard to see incoming events',\n 'Use posthog.identify() to associate events with users',\n ],\n },\n};\n"]}
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.JAVASCRIPT_NODE_AGENT_CONFIG = void 0;
4
4
  const constants_1 = require("../../lib/constants");
5
5
  const setup_utils_1 = require("../../utils/setup-utils");
6
- const package_manager_detection_1 = require("../../lib/package-manager-detection");
6
+ const package_manager_1 = require("../../lib/detection/package-manager");
7
7
  exports.JAVASCRIPT_NODE_AGENT_CONFIG = {
8
8
  metadata: {
9
9
  name: 'Node.js',
@@ -16,7 +16,7 @@ exports.JAVASCRIPT_NODE_AGENT_CONFIG = {
16
16
  packageDisplayName: 'Node.js',
17
17
  usesPackageJson: false,
18
18
  getVersion: () => undefined,
19
- detectPackageManager: package_manager_detection_1.detectNodePackageManagers,
19
+ detectPackageManager: package_manager_1.detectNodePackageManagers,
20
20
  detect: async (options) => {
21
21
  const packageJson = await (0, setup_utils_1.tryGetPackageJson)(options);
22
22
  return !!packageJson;
@@ -1 +1 @@
1
- {"version":3,"file":"javascript-node-wizard-agent.js","sourceRoot":"","sources":["../../../../src/frameworks/javascript-node/javascript-node-wizard-agent.ts"],"names":[],"mappings":";;;AAEA,mDAAkD;AAClD,yDAA4D;AAC5D,mFAAgF;AAInE,QAAA,4BAA4B,GACvC;IACE,QAAQ,EAAE;QACR,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,uBAAW,CAAC,cAAc;QACvC,IAAI,EAAE,IAAI;QACV,OAAO,EAAE,yCAAyC;KACnD;IAED,SAAS,EAAE;QACT,WAAW,EAAE,cAAc;QAC3B,kBAAkB,EAAE,SAAS;QAC7B,eAAe,EAAE,KAAK;QACtB,UAAU,EAAE,GAAG,EAAE,CAAC,SAAS;QAC3B,oBAAoB,EAAE,qDAAyB;QAC/C,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YACxB,MAAM,WAAW,GAAG,MAAM,IAAA,+BAAiB,EAAC,OAAO,CAAC,CAAC;YACrD,OAAO,CAAC,CAAC,WAAW,CAAC;QACvB,CAAC;KACF;IAED,WAAW,EAAE;QACX,eAAe,EAAE,KAAK;QACtB,UAAU,EAAE,CAAC,MAAc,EAAE,IAAY,EAAE,EAAE,CAAC,CAAC;YAC7C,qBAAqB,EAAE,MAAM;YAC7B,YAAY,EAAE,IAAI;SACnB,CAAC;KACH;IAED,SAAS,EAAE;QACT,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC;KACpB;IAED,OAAO,EAAE;QACP,oBAAoB,EAClB,wFAAwF;QAC1F,mBAAmB,EACjB,qKAAqK;QACvK,yBAAyB,EAAE,GAAG,EAAE,CAAC;YAC/B,sGAAsG;SACvG;KACF;IAED,EAAE,EAAE;QACF,cAAc,EAAE,8BAA8B;QAC9C,wBAAwB,EAAE,CAAC;QAC3B,eAAe,EAAE,GAAG,EAAE,CAAC;YACrB,yCAAyC;YACzC,oCAAoC;YACpC,0DAA0D;YAC1D,iDAAiD;YACjD,iEAAiE;SAClE;QACD,iBAAiB,EAAE,GAAG,EAAE,CAAC;YACvB,wDAAwD;YACxD,qEAAqE;YACrE,wEAAwE;YACxE,mEAAmE;YACnE,qDAAqD;SACtD;KACF;CACF,CAAC","sourcesContent":["/* Generic Node.js language wizard using posthog-agent with PostHog MCP */\nimport type { FrameworkConfig } from '../../lib/framework-config';\nimport { Integration } from '../../lib/constants';\nimport { tryGetPackageJson } from '../../utils/setup-utils';\nimport { detectNodePackageManagers } from '../../lib/package-manager-detection';\n\ntype JavaScriptNodeContext = Record<string, unknown>;\n\nexport const JAVASCRIPT_NODE_AGENT_CONFIG: FrameworkConfig<JavaScriptNodeContext> =\n {\n metadata: {\n name: 'Node.js',\n integration: Integration.javascriptNode,\n beta: true,\n docsUrl: 'https://posthog.com/docs/libraries/node',\n },\n\n detection: {\n packageName: 'posthog-node',\n packageDisplayName: 'Node.js',\n usesPackageJson: false,\n getVersion: () => undefined,\n detectPackageManager: detectNodePackageManagers,\n detect: async (options) => {\n const packageJson = await tryGetPackageJson(options);\n return !!packageJson;\n },\n },\n\n environment: {\n uploadToHosting: false,\n getEnvVars: (apiKey: string, host: string) => ({\n POSTHOG_PROJECT_TOKEN: apiKey,\n POSTHOG_HOST: host,\n }),\n },\n\n analytics: {\n getTags: () => ({}),\n },\n\n prompts: {\n projectTypeDetection:\n 'This is a server-side Node.js project. Look for package.json and lockfiles to confirm.',\n packageInstallation:\n 'Use npm, yarn, pnpm, or bun based on the existing lockfile (package-lock.json, yarn.lock, pnpm-lock.yaml, bun.lockb). Install posthog-node as a regular dependency.',\n getAdditionalContextLines: () => [\n `Framework docs ID: javascript_node (use posthog://docs/frameworks/javascript_node for documentation)`,\n ],\n },\n\n ui: {\n successMessage: 'PostHog integration complete',\n estimatedDurationMinutes: 5,\n getOutroChanges: () => [\n `Analyzed your Node.js project structure`,\n `Installed the posthog-node package`,\n `Created PostHog initialization with proper configuration`,\n `Configured graceful shutdown for event flushing`,\n `Added example code for events, feature flags, and error capture`,\n ],\n getOutroNextSteps: () => [\n 'Use the PostHog client instance for all tracking calls',\n 'Call posthog.shutdown() on application exit to flush pending events',\n 'NEVER send PII in event properties (no emails, names, or user content)',\n 'Use posthog.capture() for events and posthog.identify() for users',\n 'Visit your PostHog dashboard to see incoming events',\n ],\n },\n };\n"]}
1
+ {"version":3,"file":"javascript-node-wizard-agent.js","sourceRoot":"","sources":["../../../../src/frameworks/javascript-node/javascript-node-wizard-agent.ts"],"names":[],"mappings":";;;AAEA,mDAAkD;AAClD,yDAA4D;AAC5D,yEAAgF;AAInE,QAAA,4BAA4B,GACvC;IACE,QAAQ,EAAE;QACR,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,uBAAW,CAAC,cAAc;QACvC,IAAI,EAAE,IAAI;QACV,OAAO,EAAE,yCAAyC;KACnD;IAED,SAAS,EAAE;QACT,WAAW,EAAE,cAAc;QAC3B,kBAAkB,EAAE,SAAS;QAC7B,eAAe,EAAE,KAAK;QACtB,UAAU,EAAE,GAAG,EAAE,CAAC,SAAS;QAC3B,oBAAoB,EAAE,2CAAyB;QAC/C,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YACxB,MAAM,WAAW,GAAG,MAAM,IAAA,+BAAiB,EAAC,OAAO,CAAC,CAAC;YACrD,OAAO,CAAC,CAAC,WAAW,CAAC;QACvB,CAAC;KACF;IAED,WAAW,EAAE;QACX,eAAe,EAAE,KAAK;QACtB,UAAU,EAAE,CAAC,MAAc,EAAE,IAAY,EAAE,EAAE,CAAC,CAAC;YAC7C,qBAAqB,EAAE,MAAM;YAC7B,YAAY,EAAE,IAAI;SACnB,CAAC;KACH;IAED,SAAS,EAAE;QACT,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC;KACpB;IAED,OAAO,EAAE;QACP,oBAAoB,EAClB,wFAAwF;QAC1F,mBAAmB,EACjB,qKAAqK;QACvK,yBAAyB,EAAE,GAAG,EAAE,CAAC;YAC/B,sGAAsG;SACvG;KACF;IAED,EAAE,EAAE;QACF,cAAc,EAAE,8BAA8B;QAC9C,wBAAwB,EAAE,CAAC;QAC3B,eAAe,EAAE,GAAG,EAAE,CAAC;YACrB,yCAAyC;YACzC,oCAAoC;YACpC,0DAA0D;YAC1D,iDAAiD;YACjD,iEAAiE;SAClE;QACD,iBAAiB,EAAE,GAAG,EAAE,CAAC;YACvB,wDAAwD;YACxD,qEAAqE;YACrE,wEAAwE;YACxE,mEAAmE;YACnE,qDAAqD;SACtD;KACF;CACF,CAAC","sourcesContent":["/* Generic Node.js language wizard using posthog-agent with PostHog MCP */\nimport type { FrameworkConfig } from '../../lib/framework-config';\nimport { Integration } from '../../lib/constants';\nimport { tryGetPackageJson } from '../../utils/setup-utils';\nimport { detectNodePackageManagers } from '../../lib/detection/package-manager';\n\ntype JavaScriptNodeContext = Record<string, unknown>;\n\nexport const JAVASCRIPT_NODE_AGENT_CONFIG: FrameworkConfig<JavaScriptNodeContext> =\n {\n metadata: {\n name: 'Node.js',\n integration: Integration.javascriptNode,\n beta: true,\n docsUrl: 'https://posthog.com/docs/libraries/node',\n },\n\n detection: {\n packageName: 'posthog-node',\n packageDisplayName: 'Node.js',\n usesPackageJson: false,\n getVersion: () => undefined,\n detectPackageManager: detectNodePackageManagers,\n detect: async (options) => {\n const packageJson = await tryGetPackageJson(options);\n return !!packageJson;\n },\n },\n\n environment: {\n uploadToHosting: false,\n getEnvVars: (apiKey: string, host: string) => ({\n POSTHOG_PROJECT_TOKEN: apiKey,\n POSTHOG_HOST: host,\n }),\n },\n\n analytics: {\n getTags: () => ({}),\n },\n\n prompts: {\n projectTypeDetection:\n 'This is a server-side Node.js project. Look for package.json and lockfiles to confirm.',\n packageInstallation:\n 'Use npm, yarn, pnpm, or bun based on the existing lockfile (package-lock.json, yarn.lock, pnpm-lock.yaml, bun.lockb). Install posthog-node as a regular dependency.',\n getAdditionalContextLines: () => [\n `Framework docs ID: javascript_node (use posthog://docs/frameworks/javascript_node for documentation)`,\n ],\n },\n\n ui: {\n successMessage: 'PostHog integration complete',\n estimatedDurationMinutes: 5,\n getOutroChanges: () => [\n `Analyzed your Node.js project structure`,\n `Installed the posthog-node package`,\n `Created PostHog initialization with proper configuration`,\n `Configured graceful shutdown for event flushing`,\n `Added example code for events, feature flags, and error capture`,\n ],\n getOutroNextSteps: () => [\n 'Use the PostHog client instance for all tracking calls',\n 'Call posthog.shutdown() on application exit to flush pending events',\n 'NEVER send PII in event properties (no emails, names, or user content)',\n 'Use posthog.capture() for events and posthog.identify() for users',\n 'Visit your PostHog dashboard to see incoming events',\n ],\n },\n };\n"]}
@@ -40,7 +40,7 @@ const path = __importStar(require("node:path"));
40
40
  const package_json_1 = require("../../utils/package-json");
41
41
  const setup_utils_1 = require("../../utils/setup-utils");
42
42
  const utils_1 = require("./utils");
43
- const package_manager_detection_1 = require("../../lib/package-manager-detection");
43
+ const package_manager_1 = require("../../lib/detection/package-manager");
44
44
  exports.JAVASCRIPT_WEB_AGENT_CONFIG = {
45
45
  metadata: {
46
46
  name: 'JavaScript (Web)',
@@ -59,7 +59,7 @@ exports.JAVASCRIPT_WEB_AGENT_CONFIG = {
59
59
  packageDisplayName: 'JavaScript (Web)',
60
60
  usesPackageJson: false,
61
61
  getVersion: () => undefined,
62
- detectPackageManager: package_manager_detection_1.detectNodePackageManagers,
62
+ detectPackageManager: package_manager_1.detectNodePackageManagers,
63
63
  detect: async (options) => {
64
64
  const packageJson = await (0, setup_utils_1.tryGetPackageJson)(options);
65
65
  if (!packageJson) {
@@ -1 +1 @@
1
- {"version":3,"file":"javascript-web-wizard-agent.js","sourceRoot":"","sources":["../../../../src/frameworks/javascript-web/javascript-web-wizard-agent.ts"],"names":[],"mappings":"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","sourcesContent":["/* Generic JavaScript Web (client-side) wizard using posthog-agent with PostHog MCP */\nimport type { WizardOptions } from '../../utils/types';\nimport type { FrameworkConfig } from '../../lib/framework-config';\nimport { Integration } from '../../lib/constants';\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport { hasPackageInstalled } from '../../utils/package-json';\nimport { tryGetPackageJson } from '../../utils/setup-utils';\nimport {\n FRAMEWORK_PACKAGES,\n detectJsPackageManager,\n detectBundler,\n hasIndexHtml,\n type JavaScriptContext,\n} from './utils';\nimport { detectNodePackageManagers } from '../../lib/package-manager-detection';\n\nexport const JAVASCRIPT_WEB_AGENT_CONFIG: FrameworkConfig<JavaScriptContext> = {\n metadata: {\n name: 'JavaScript (Web)',\n integration: Integration.javascript_web,\n beta: true,\n docsUrl: 'https://posthog.com/docs/libraries/js',\n gatherContext: (options: WizardOptions) => {\n const packageManagerName = detectJsPackageManager(options);\n const hasTypeScript = fs.existsSync(\n path.join(options.installDir, 'tsconfig.json'),\n );\n const hasBundler = detectBundler(options);\n return Promise.resolve({ packageManagerName, hasTypeScript, hasBundler });\n },\n },\n\n detection: {\n packageName: 'posthog-js',\n packageDisplayName: 'JavaScript (Web)',\n usesPackageJson: false,\n getVersion: () => undefined,\n detectPackageManager: detectNodePackageManagers,\n detect: async (options) => {\n const packageJson = await tryGetPackageJson(options);\n if (!packageJson) {\n return false;\n }\n\n // Exclude projects with known framework packages\n for (const frameworkPkg of FRAMEWORK_PACKAGES) {\n if (hasPackageInstalled(frameworkPkg, packageJson)) {\n return false;\n }\n }\n\n const { installDir } = options;\n\n // Has (index.html OR has a bundler) AND is a JavaScript project\n const hasIndexHtmlFlag = hasIndexHtml(options);\n\n const bundler = detectBundler(options);\n const hasBundler = !!bundler;\n\n const hasLockfile = [\n 'package-lock.json',\n 'yarn.lock',\n 'pnpm-lock.yaml',\n 'bun.lockb',\n 'bun.lock',\n 'deno.lock',\n ].some((lockfile) => fs.existsSync(path.join(installDir, lockfile)));\n\n // We only treat this as JS Web if there's BOTH:\n // - a lockfile, and\n // - at least one frontend signal (index.html or bundler)\n if (hasLockfile && (hasIndexHtmlFlag || hasBundler)) {\n return true;\n }\n\n // Otherwise → Node/Backend (handled by javascriptNode fallback)\n return false;\n },\n },\n\n environment: {\n uploadToHosting: false,\n getEnvVars: (apiKey: string, host: string) => ({\n POSTHOG_PROJECT_TOKEN: apiKey,\n POSTHOG_HOST: host,\n }),\n },\n\n analytics: {\n getTags: (context) => {\n const tags: Record<string, string> = {\n packageManager: context.packageManagerName ?? 'unknown',\n };\n if (context.hasBundler) {\n tags.bundler = context.hasBundler;\n }\n return tags;\n },\n },\n\n prompts: {\n projectTypeDetection:\n 'This is a JavaScript/TypeScript project. Look for package.json and lockfiles (package-lock.json, yarn.lock, pnpm-lock.yaml, bun.lockb) to confirm.',\n packageInstallation:\n 'Look for lockfiles to determine the package manager (npm, yarn, pnpm, bun). Do not manually edit package.json.',\n getAdditionalContextLines: (context) => {\n const lines = [\n `Package manager: ${context.packageManagerName ?? 'unknown'}`,\n `Has TypeScript: ${context.hasTypeScript ? 'yes' : 'no'}`,\n `Framework docs ID: js (use posthog://docs/frameworks/js for documentation if available)`,\n `Project type: Generic JavaScript/TypeScript application (no specific framework detected)`,\n ];\n\n if (context.hasBundler) {\n lines.unshift(`Bundler: ${context.hasBundler}`);\n }\n\n return lines;\n },\n },\n\n ui: {\n successMessage: 'PostHog integration complete',\n estimatedDurationMinutes: 5,\n getOutroChanges: (context) => {\n const packageManagerName =\n context.packageManagerName ?? 'package manager';\n return [\n `Analyzed your JavaScript project structure`,\n `Installed the posthog-js package using ${packageManagerName}`,\n `Created PostHog initialization code`,\n `Configured autocapture, error tracking, and event capture`,\n ];\n },\n getOutroNextSteps: () => [\n 'Ensure posthog.init() is called before any capture calls',\n 'Autocapture tracks clicks, form submissions, and pageviews automatically',\n 'Use posthog.capture() for custom events and posthog.identify() for users',\n 'NEVER send PII in event properties (no emails, names, or user content)',\n 'Visit your PostHog dashboard to see incoming events',\n ],\n },\n};\n"]}
1
+ {"version":3,"file":"javascript-web-wizard-agent.js","sourceRoot":"","sources":["../../../../src/frameworks/javascript-web/javascript-web-wizard-agent.ts"],"names":[],"mappings":"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","sourcesContent":["/* Generic JavaScript Web (client-side) wizard using posthog-agent with PostHog MCP */\nimport type { WizardOptions } from '../../utils/types';\nimport type { FrameworkConfig } from '../../lib/framework-config';\nimport { Integration } from '../../lib/constants';\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport { hasPackageInstalled } from '../../utils/package-json';\nimport { tryGetPackageJson } from '../../utils/setup-utils';\nimport {\n FRAMEWORK_PACKAGES,\n detectJsPackageManager,\n detectBundler,\n hasIndexHtml,\n type JavaScriptContext,\n} from './utils';\nimport { detectNodePackageManagers } from '../../lib/detection/package-manager';\n\nexport const JAVASCRIPT_WEB_AGENT_CONFIG: FrameworkConfig<JavaScriptContext> = {\n metadata: {\n name: 'JavaScript (Web)',\n integration: Integration.javascript_web,\n beta: true,\n docsUrl: 'https://posthog.com/docs/libraries/js',\n gatherContext: (options: WizardOptions) => {\n const packageManagerName = detectJsPackageManager(options);\n const hasTypeScript = fs.existsSync(\n path.join(options.installDir, 'tsconfig.json'),\n );\n const hasBundler = detectBundler(options);\n return Promise.resolve({ packageManagerName, hasTypeScript, hasBundler });\n },\n },\n\n detection: {\n packageName: 'posthog-js',\n packageDisplayName: 'JavaScript (Web)',\n usesPackageJson: false,\n getVersion: () => undefined,\n detectPackageManager: detectNodePackageManagers,\n detect: async (options) => {\n const packageJson = await tryGetPackageJson(options);\n if (!packageJson) {\n return false;\n }\n\n // Exclude projects with known framework packages\n for (const frameworkPkg of FRAMEWORK_PACKAGES) {\n if (hasPackageInstalled(frameworkPkg, packageJson)) {\n return false;\n }\n }\n\n const { installDir } = options;\n\n // Has (index.html OR has a bundler) AND is a JavaScript project\n const hasIndexHtmlFlag = hasIndexHtml(options);\n\n const bundler = detectBundler(options);\n const hasBundler = !!bundler;\n\n const hasLockfile = [\n 'package-lock.json',\n 'yarn.lock',\n 'pnpm-lock.yaml',\n 'bun.lockb',\n 'bun.lock',\n 'deno.lock',\n ].some((lockfile) => fs.existsSync(path.join(installDir, lockfile)));\n\n // We only treat this as JS Web if there's BOTH:\n // - a lockfile, and\n // - at least one frontend signal (index.html or bundler)\n if (hasLockfile && (hasIndexHtmlFlag || hasBundler)) {\n return true;\n }\n\n // Otherwise → Node/Backend (handled by javascriptNode fallback)\n return false;\n },\n },\n\n environment: {\n uploadToHosting: false,\n getEnvVars: (apiKey: string, host: string) => ({\n POSTHOG_PROJECT_TOKEN: apiKey,\n POSTHOG_HOST: host,\n }),\n },\n\n analytics: {\n getTags: (context) => {\n const tags: Record<string, string> = {\n packageManager: context.packageManagerName ?? 'unknown',\n };\n if (context.hasBundler) {\n tags.bundler = context.hasBundler;\n }\n return tags;\n },\n },\n\n prompts: {\n projectTypeDetection:\n 'This is a JavaScript/TypeScript project. Look for package.json and lockfiles (package-lock.json, yarn.lock, pnpm-lock.yaml, bun.lockb) to confirm.',\n packageInstallation:\n 'Look for lockfiles to determine the package manager (npm, yarn, pnpm, bun). Do not manually edit package.json.',\n getAdditionalContextLines: (context) => {\n const lines = [\n `Package manager: ${context.packageManagerName ?? 'unknown'}`,\n `Has TypeScript: ${context.hasTypeScript ? 'yes' : 'no'}`,\n `Framework docs ID: js (use posthog://docs/frameworks/js for documentation if available)`,\n `Project type: Generic JavaScript/TypeScript application (no specific framework detected)`,\n ];\n\n if (context.hasBundler) {\n lines.unshift(`Bundler: ${context.hasBundler}`);\n }\n\n return lines;\n },\n },\n\n ui: {\n successMessage: 'PostHog integration complete',\n estimatedDurationMinutes: 5,\n getOutroChanges: (context) => {\n const packageManagerName =\n context.packageManagerName ?? 'package manager';\n return [\n `Analyzed your JavaScript project structure`,\n `Installed the posthog-js package using ${packageManagerName}`,\n `Created PostHog initialization code`,\n `Configured autocapture, error tracking, and event capture`,\n ];\n },\n getOutroNextSteps: () => [\n 'Ensure posthog.init() is called before any capture calls',\n 'Autocapture tracks clicks, form submissions, and pageviews automatically',\n 'Use posthog.capture() for custom events and posthog.identify() for users',\n 'NEVER send PII in event properties (no emails, names, or user content)',\n 'Visit your PostHog dashboard to see incoming events',\n ],\n },\n};\n"]}
@@ -37,7 +37,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
37
37
  };
38
38
  Object.defineProperty(exports, "__esModule", { value: true });
39
39
  exports.LARAVEL_AGENT_CONFIG = void 0;
40
- const package_manager_detection_1 = require("../../lib/package-manager-detection");
40
+ const package_manager_1 = require("../../lib/detection/package-manager");
41
41
  const constants_1 = require("../../lib/constants");
42
42
  const fast_glob_1 = __importDefault(require("fast-glob"));
43
43
  const fs = __importStar(require("node:fs"));
@@ -102,7 +102,7 @@ exports.LARAVEL_AGENT_CONFIG = {
102
102
  const hasLaravelStructure = await (0, fast_glob_1.default)(['**/bootstrap/app.php', '**/app/Http/Kernel.php'], { cwd: installDir, ignore: ['**/vendor/**'] });
103
103
  return hasLaravelStructure.length > 0;
104
104
  },
105
- detectPackageManager: package_manager_detection_1.composerPackageManager,
105
+ detectPackageManager: package_manager_1.composerPackageManager,
106
106
  },
107
107
  environment: {
108
108
  uploadToHosting: false,