@posthog/agent 1.11.0 → 1.13.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 (268) hide show
  1. package/README.md +26 -65
  2. package/dist/_virtual/_commonjsHelpers.js +6 -0
  3. package/dist/_virtual/_commonjsHelpers.js.map +1 -0
  4. package/dist/_virtual/index.js +4 -0
  5. package/dist/_virtual/index.js.map +1 -0
  6. package/dist/index.d.ts +0 -1
  7. package/dist/index.d.ts.map +1 -1
  8. package/dist/node_modules/@ai-sdk/anthropic/dist/index.js +1154 -0
  9. package/dist/node_modules/@ai-sdk/anthropic/dist/index.js.map +1 -0
  10. package/dist/node_modules/@ai-sdk/provider/dist/index.js +296 -0
  11. package/dist/node_modules/@ai-sdk/provider/dist/index.js.map +1 -0
  12. package/dist/node_modules/@ai-sdk/provider-utils/dist/index.js +576 -0
  13. package/dist/node_modules/@ai-sdk/provider-utils/dist/index.js.map +1 -0
  14. package/dist/node_modules/@ai-sdk/ui-utils/dist/index.js +741 -0
  15. package/dist/node_modules/@ai-sdk/ui-utils/dist/index.js.map +1 -0
  16. package/dist/node_modules/@opentelemetry/api/build/esm/api/context.js +112 -0
  17. package/dist/node_modules/@opentelemetry/api/build/esm/api/context.js.map +1 -0
  18. package/dist/node_modules/@opentelemetry/api/build/esm/api/diag.js +123 -0
  19. package/dist/node_modules/@opentelemetry/api/build/esm/api/diag.js.map +1 -0
  20. package/dist/node_modules/@opentelemetry/api/build/esm/api/metrics.js +62 -0
  21. package/dist/node_modules/@opentelemetry/api/build/esm/api/metrics.js.map +1 -0
  22. package/dist/node_modules/@opentelemetry/api/build/esm/api/propagation.js +91 -0
  23. package/dist/node_modules/@opentelemetry/api/build/esm/api/propagation.js.map +1 -0
  24. package/dist/node_modules/@opentelemetry/api/build/esm/api/trace.js +79 -0
  25. package/dist/node_modules/@opentelemetry/api/build/esm/api/trace.js.map +1 -0
  26. package/dist/node_modules/@opentelemetry/api/build/esm/baggage/context-helpers.js +59 -0
  27. package/dist/node_modules/@opentelemetry/api/build/esm/baggage/context-helpers.js.map +1 -0
  28. package/dist/node_modules/@opentelemetry/api/build/esm/baggage/internal/baggage-impl.js +99 -0
  29. package/dist/node_modules/@opentelemetry/api/build/esm/baggage/internal/baggage-impl.js.map +1 -0
  30. package/dist/node_modules/@opentelemetry/api/build/esm/baggage/utils.js +31 -0
  31. package/dist/node_modules/@opentelemetry/api/build/esm/baggage/utils.js.map +1 -0
  32. package/dist/node_modules/@opentelemetry/api/build/esm/context/NoopContextManager.js +69 -0
  33. package/dist/node_modules/@opentelemetry/api/build/esm/context/NoopContextManager.js.map +1 -0
  34. package/dist/node_modules/@opentelemetry/api/build/esm/context/context.js +54 -0
  35. package/dist/node_modules/@opentelemetry/api/build/esm/context/context.js.map +1 -0
  36. package/dist/node_modules/@opentelemetry/api/build/esm/context-api.js +22 -0
  37. package/dist/node_modules/@opentelemetry/api/build/esm/context-api.js.map +1 -0
  38. package/dist/node_modules/@opentelemetry/api/build/esm/diag/ComponentLogger.js +104 -0
  39. package/dist/node_modules/@opentelemetry/api/build/esm/diag/ComponentLogger.js.map +1 -0
  40. package/dist/node_modules/@opentelemetry/api/build/esm/diag/internal/logLevelLogger.js +44 -0
  41. package/dist/node_modules/@opentelemetry/api/build/esm/diag/internal/logLevelLogger.js.map +1 -0
  42. package/dist/node_modules/@opentelemetry/api/build/esm/diag/types.js +43 -0
  43. package/dist/node_modules/@opentelemetry/api/build/esm/diag/types.js.map +1 -0
  44. package/dist/node_modules/@opentelemetry/api/build/esm/diag-api.js +27 -0
  45. package/dist/node_modules/@opentelemetry/api/build/esm/diag-api.js.map +1 -0
  46. package/dist/node_modules/@opentelemetry/api/build/esm/internal/global-utils.js +62 -0
  47. package/dist/node_modules/@opentelemetry/api/build/esm/internal/global-utils.js.map +1 -0
  48. package/dist/node_modules/@opentelemetry/api/build/esm/internal/semver.js +121 -0
  49. package/dist/node_modules/@opentelemetry/api/build/esm/internal/semver.js.map +1 -0
  50. package/dist/node_modules/@opentelemetry/api/build/esm/metrics/NoopMeter.js +167 -0
  51. package/dist/node_modules/@opentelemetry/api/build/esm/metrics/NoopMeter.js.map +1 -0
  52. package/dist/node_modules/@opentelemetry/api/build/esm/metrics/NoopMeterProvider.js +33 -0
  53. package/dist/node_modules/@opentelemetry/api/build/esm/metrics/NoopMeterProvider.js.map +1 -0
  54. package/dist/node_modules/@opentelemetry/api/build/esm/metrics-api.js +22 -0
  55. package/dist/node_modules/@opentelemetry/api/build/esm/metrics-api.js.map +1 -0
  56. package/dist/node_modules/@opentelemetry/api/build/esm/platform/node/globalThis.js +21 -0
  57. package/dist/node_modules/@opentelemetry/api/build/esm/platform/node/globalThis.js.map +1 -0
  58. package/dist/node_modules/@opentelemetry/api/build/esm/propagation/NoopTextMapPropagator.js +35 -0
  59. package/dist/node_modules/@opentelemetry/api/build/esm/propagation/NoopTextMapPropagator.js.map +1 -0
  60. package/dist/node_modules/@opentelemetry/api/build/esm/propagation/TextMapPropagator.js +40 -0
  61. package/dist/node_modules/@opentelemetry/api/build/esm/propagation/TextMapPropagator.js.map +1 -0
  62. package/dist/node_modules/@opentelemetry/api/build/esm/propagation-api.js +22 -0
  63. package/dist/node_modules/@opentelemetry/api/build/esm/propagation-api.js.map +1 -0
  64. package/dist/node_modules/@opentelemetry/api/build/esm/trace/NonRecordingSpan.js +70 -0
  65. package/dist/node_modules/@opentelemetry/api/build/esm/trace/NonRecordingSpan.js.map +1 -0
  66. package/dist/node_modules/@opentelemetry/api/build/esm/trace/NoopTracer.js +78 -0
  67. package/dist/node_modules/@opentelemetry/api/build/esm/trace/NoopTracer.js.map +1 -0
  68. package/dist/node_modules/@opentelemetry/api/build/esm/trace/NoopTracerProvider.js +34 -0
  69. package/dist/node_modules/@opentelemetry/api/build/esm/trace/NoopTracerProvider.js.map +1 -0
  70. package/dist/node_modules/@opentelemetry/api/build/esm/trace/ProxyTracer.js +55 -0
  71. package/dist/node_modules/@opentelemetry/api/build/esm/trace/ProxyTracer.js.map +1 -0
  72. package/dist/node_modules/@opentelemetry/api/build/esm/trace/ProxyTracerProvider.js +56 -0
  73. package/dist/node_modules/@opentelemetry/api/build/esm/trace/ProxyTracerProvider.js.map +1 -0
  74. package/dist/node_modules/@opentelemetry/api/build/esm/trace/context-utils.js +76 -0
  75. package/dist/node_modules/@opentelemetry/api/build/esm/trace/context-utils.js.map +1 -0
  76. package/dist/node_modules/@opentelemetry/api/build/esm/trace/invalid-span-constants.js +27 -0
  77. package/dist/node_modules/@opentelemetry/api/build/esm/trace/invalid-span-constants.js.map +1 -0
  78. package/dist/node_modules/@opentelemetry/api/build/esm/trace/spancontext-utils.js +45 -0
  79. package/dist/node_modules/@opentelemetry/api/build/esm/trace/spancontext-utils.js.map +1 -0
  80. package/dist/node_modules/@opentelemetry/api/build/esm/trace/status.js +22 -0
  81. package/dist/node_modules/@opentelemetry/api/build/esm/trace/status.js.map +1 -0
  82. package/dist/node_modules/@opentelemetry/api/build/esm/trace/trace_flags.js +25 -0
  83. package/dist/node_modules/@opentelemetry/api/build/esm/trace/trace_flags.js.map +1 -0
  84. package/dist/node_modules/@opentelemetry/api/build/esm/trace-api.js +24 -0
  85. package/dist/node_modules/@opentelemetry/api/build/esm/trace-api.js.map +1 -0
  86. package/dist/node_modules/@opentelemetry/api/build/esm/version.js +20 -0
  87. package/dist/node_modules/@opentelemetry/api/build/esm/version.js.map +1 -0
  88. package/dist/node_modules/ai/dist/index.js +2870 -0
  89. package/dist/node_modules/ai/dist/index.js.map +1 -0
  90. package/dist/node_modules/nanoid/non-secure/index.js +13 -0
  91. package/dist/node_modules/nanoid/non-secure/index.js.map +1 -0
  92. package/dist/node_modules/secure-json-parse/index.js +133 -0
  93. package/dist/node_modules/secure-json-parse/index.js.map +1 -0
  94. package/dist/node_modules/zod-to-json-schema/dist/esm/Options.js +37 -0
  95. package/dist/node_modules/zod-to-json-schema/dist/esm/Options.js.map +1 -0
  96. package/dist/node_modules/zod-to-json-schema/dist/esm/Refs.js +26 -0
  97. package/dist/node_modules/zod-to-json-schema/dist/esm/Refs.js.map +1 -0
  98. package/dist/node_modules/zod-to-json-schema/dist/esm/errorMessages.js +17 -0
  99. package/dist/node_modules/zod-to-json-schema/dist/esm/errorMessages.js.map +1 -0
  100. package/dist/node_modules/zod-to-json-schema/dist/esm/getRelativePath.js +11 -0
  101. package/dist/node_modules/zod-to-json-schema/dist/esm/getRelativePath.js.map +1 -0
  102. package/dist/node_modules/zod-to-json-schema/dist/esm/index.js +8 -0
  103. package/dist/node_modules/zod-to-json-schema/dist/esm/index.js.map +1 -0
  104. package/dist/node_modules/zod-to-json-schema/dist/esm/parseDef.js +66 -0
  105. package/dist/node_modules/zod-to-json-schema/dist/esm/parseDef.js.map +1 -0
  106. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/any.js +21 -0
  107. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/any.js.map +1 -0
  108. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/array.js +30 -0
  109. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/array.js.map +1 -0
  110. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/bigint.js +53 -0
  111. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/bigint.js.map +1 -0
  112. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/boolean.js +8 -0
  113. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/boolean.js.map +1 -0
  114. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/branded.js +8 -0
  115. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/branded.js.map +1 -0
  116. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/catch.js +8 -0
  117. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/catch.js.map +1 -0
  118. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/date.js +50 -0
  119. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/date.js.map +1 -0
  120. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/default.js +11 -0
  121. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/default.js.map +1 -0
  122. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/effects.js +11 -0
  123. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/effects.js.map +1 -0
  124. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/enum.js +9 -0
  125. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/enum.js.map +1 -0
  126. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/intersection.js +56 -0
  127. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/intersection.js.map +1 -0
  128. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/literal.js +24 -0
  129. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/literal.js.map +1 -0
  130. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/map.js +30 -0
  131. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/map.js.map +1 -0
  132. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/nativeEnum.js +19 -0
  133. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/nativeEnum.js.map +1 -0
  134. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/never.js +15 -0
  135. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/never.js.map +1 -0
  136. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/null.js +13 -0
  137. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/null.js.map +1 -0
  138. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/nullable.js +37 -0
  139. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/nullable.js.map +1 -0
  140. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/number.js +56 -0
  141. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/number.js.map +1 -0
  142. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/object.js +76 -0
  143. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/object.js.map +1 -0
  144. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/optional.js +25 -0
  145. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/optional.js.map +1 -0
  146. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/pipeline.js +24 -0
  147. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/pipeline.js.map +1 -0
  148. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/promise.js +8 -0
  149. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/promise.js.map +1 -0
  150. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/readonly.js +8 -0
  151. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/readonly.js.map +1 -0
  152. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/record.js +65 -0
  153. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/record.js.map +1 -0
  154. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/set.js +24 -0
  155. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/set.js.map +1 -0
  156. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/string.js +350 -0
  157. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/string.js.map +1 -0
  158. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/tuple.js +36 -0
  159. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/tuple.js.map +1 -0
  160. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/undefined.js +10 -0
  161. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/undefined.js.map +1 -0
  162. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/union.js +84 -0
  163. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/union.js.map +1 -0
  164. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/unknown.js +8 -0
  165. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/unknown.js.map +1 -0
  166. package/dist/node_modules/zod-to-json-schema/dist/esm/selectParser.js +110 -0
  167. package/dist/node_modules/zod-to-json-schema/dist/esm/selectParser.js.map +1 -0
  168. package/dist/node_modules/zod-to-json-schema/dist/esm/zodToJsonSchema.js +90 -0
  169. package/dist/node_modules/zod-to-json-schema/dist/esm/zodToJsonSchema.js.map +1 -0
  170. package/dist/src/adapters/types.d.ts +1 -1
  171. package/dist/src/agent.d.ts +3 -13
  172. package/dist/src/agent.d.ts.map +1 -1
  173. package/dist/src/agent.js +94 -504
  174. package/dist/src/agent.js.map +1 -1
  175. package/dist/src/agents/execution.d.ts +1 -1
  176. package/dist/src/agents/execution.js +2 -2
  177. package/dist/src/agents/execution.js.map +1 -1
  178. package/dist/src/agents/planning.d.ts +1 -1
  179. package/dist/src/agents/planning.d.ts.map +1 -1
  180. package/dist/src/agents/planning.js +1 -2
  181. package/dist/src/agents/planning.js.map +1 -1
  182. package/dist/src/agents/research.d.ts +1 -1
  183. package/dist/src/agents/research.d.ts.map +1 -1
  184. package/dist/src/agents/research.js +3 -6
  185. package/dist/src/agents/research.js.map +1 -1
  186. package/dist/src/git-manager.js +1 -1
  187. package/dist/src/git-manager.js.map +1 -1
  188. package/dist/src/posthog-api.d.ts +0 -8
  189. package/dist/src/posthog-api.d.ts.map +1 -1
  190. package/dist/src/posthog-api.js +0 -32
  191. package/dist/src/posthog-api.js.map +1 -1
  192. package/dist/src/prompt-builder.d.ts.map +1 -1
  193. package/dist/src/prompt-builder.js +0 -1
  194. package/dist/src/prompt-builder.js.map +1 -1
  195. package/dist/src/structured-extraction.d.ts +2 -2
  196. package/dist/src/structured-extraction.d.ts.map +1 -1
  197. package/dist/src/structured-extraction.js +51 -110
  198. package/dist/src/structured-extraction.js.map +1 -1
  199. package/dist/src/task-progress-reporter.d.ts +0 -6
  200. package/dist/src/task-progress-reporter.d.ts.map +1 -1
  201. package/dist/src/task-progress-reporter.js +2 -26
  202. package/dist/src/task-progress-reporter.js.map +1 -1
  203. package/dist/src/template-manager.d.ts.map +1 -1
  204. package/dist/src/template-manager.js +26 -4
  205. package/dist/src/template-manager.js.map +1 -1
  206. package/dist/src/types.d.ts +0 -4
  207. package/dist/src/types.d.ts.map +1 -1
  208. package/dist/src/types.js +0 -1
  209. package/dist/src/types.js.map +1 -1
  210. package/dist/src/workflow/config.d.ts +3 -0
  211. package/dist/src/workflow/config.d.ts.map +1 -0
  212. package/dist/src/workflow/config.js +43 -0
  213. package/dist/src/workflow/config.js.map +1 -0
  214. package/dist/src/workflow/steps/build.d.ts +3 -0
  215. package/dist/src/workflow/steps/build.d.ts.map +1 -0
  216. package/dist/src/workflow/steps/build.js +64 -0
  217. package/dist/src/workflow/steps/build.js.map +1 -0
  218. package/dist/src/workflow/steps/plan.d.ts +3 -0
  219. package/dist/src/workflow/steps/plan.d.ts.map +1 -0
  220. package/dist/src/workflow/steps/plan.js +86 -0
  221. package/dist/src/workflow/steps/plan.js.map +1 -0
  222. package/dist/src/workflow/steps/research.d.ts +3 -0
  223. package/dist/src/workflow/steps/research.d.ts.map +1 -0
  224. package/dist/src/workflow/steps/research.js +124 -0
  225. package/dist/src/workflow/steps/research.js.map +1 -0
  226. package/dist/src/workflow/types.d.ts +48 -0
  227. package/dist/src/workflow/types.d.ts.map +1 -0
  228. package/dist/src/workflow/utils.d.ts +12 -0
  229. package/dist/src/workflow/utils.d.ts.map +1 -0
  230. package/dist/src/workflow/utils.js +38 -0
  231. package/dist/src/workflow/utils.js.map +1 -0
  232. package/package.json +6 -4
  233. package/src/adapters/types.ts +1 -1
  234. package/src/agent.ts +114 -554
  235. package/src/agents/execution.ts +2 -2
  236. package/src/agents/planning.ts +1 -2
  237. package/src/agents/research.ts +3 -6
  238. package/src/git-manager.ts +1 -1
  239. package/src/posthog-api.ts +0 -40
  240. package/src/prompt-builder.ts +0 -2
  241. package/src/structured-extraction.ts +58 -115
  242. package/src/task-progress-reporter.ts +2 -34
  243. package/src/template-manager.ts +35 -5
  244. package/src/types.ts +0 -7
  245. package/src/workflow/config.ts +42 -0
  246. package/src/workflow/steps/build.ts +87 -0
  247. package/src/workflow/steps/plan.ts +112 -0
  248. package/src/workflow/steps/research.ts +156 -0
  249. package/src/workflow/types.ts +53 -0
  250. package/src/workflow/utils.ts +50 -0
  251. package/dist/src/agent-registry.d.ts +0 -16
  252. package/dist/src/agent-registry.d.ts.map +0 -1
  253. package/dist/src/agent-registry.js +0 -62
  254. package/dist/src/agent-registry.js.map +0 -1
  255. package/dist/src/stage-executor.d.ts +0 -20
  256. package/dist/src/stage-executor.d.ts.map +0 -1
  257. package/dist/src/stage-executor.js +0 -178
  258. package/dist/src/stage-executor.js.map +0 -1
  259. package/dist/src/workflow-registry.d.ts +0 -11
  260. package/dist/src/workflow-registry.d.ts.map +0 -1
  261. package/dist/src/workflow-registry.js +0 -27
  262. package/dist/src/workflow-registry.js.map +0 -1
  263. package/dist/src/workflow-types.d.ts +0 -45
  264. package/dist/src/workflow-types.d.ts.map +0 -1
  265. package/src/agent-registry.ts +0 -65
  266. package/src/stage-executor.ts +0 -210
  267. package/src/workflow-registry.ts +0 -30
  268. package/src/workflow-types.ts +0 -52
@@ -1 +1 @@
1
- {"version":3,"file":"agent.js","sources":["../../src/agent.ts"],"sourcesContent":["import { query } from \"@anthropic-ai/claude-agent-sdk\";\nimport type { Task, ExecutionResult, PlanResult, AgentConfig } from './types.js';\nimport type { WorkflowDefinition, WorkflowStage, WorkflowExecutionOptions } from './workflow-types.js';\nimport { TaskManager } from './task-manager.js';\nimport { PostHogAPIClient } from './posthog-api.js';\nimport { PostHogFileManager } from './file-manager.js';\nimport { GitManager } from './git-manager.js';\nimport { TemplateManager } from './template-manager.js';\nimport { ClaudeAdapter } from './adapters/claude/claude-adapter.js';\nimport type { ProviderAdapter } from './adapters/types.js';\nimport { PLANNING_SYSTEM_PROMPT } from './agents/planning.js';\nimport { EXECUTION_SYSTEM_PROMPT } from './agents/execution.js';\nimport { Logger } from './utils/logger.js';\nimport { AgentRegistry } from './agent-registry.js';\nimport { WorkflowRegistry } from './workflow-registry.js';\nimport { StageExecutor } from './stage-executor.js';\nimport { PromptBuilder } from './prompt-builder.js';\nimport { TaskProgressReporter } from './task-progress-reporter.js';\nimport { OpenAIExtractor, type ExtractedQuestion, type ExtractedQuestionWithAnswer } from './structured-extraction.js';\n\nexport class Agent {\n private workingDirectory: string;\n private onEvent?: (event: any) => void;\n private taskManager: TaskManager;\n private posthogAPI?: PostHogAPIClient;\n private fileManager: PostHogFileManager;\n private gitManager: GitManager;\n private templateManager: TemplateManager;\n private adapter: ProviderAdapter;\n private logger: Logger;\n private agentRegistry: AgentRegistry;\n private workflowRegistry: WorkflowRegistry;\n private stageExecutor: StageExecutor;\n private progressReporter: TaskProgressReporter;\n private promptBuilder: PromptBuilder;\n private extractor?: OpenAIExtractor;\n private mcpServers?: Record<string, any>;\n public debug: boolean;\n\n constructor(config: AgentConfig = {}) {\n this.workingDirectory = config.workingDirectory || process.cwd();\n this.onEvent = config.onEvent;\n this.debug = config.debug || false;\n\n // Build default PostHog MCP server configuration\n const posthogMcpUrl = config.posthogMcpUrl\n || process.env.POSTHOG_MCP_URL\n || 'https://mcp.posthog.com/mcp';\n\n // Add auth if API key provided\n const headers: Record<string, string> = {};\n if (config.posthogApiKey) {\n headers['Authorization'] = `Bearer ${config.posthogApiKey}`;\n }\n\n const defaultMcpServers = {\n posthog: {\n type: 'http' as const,\n url: posthogMcpUrl,\n ...(Object.keys(headers).length > 0 ? { headers } : {}),\n }\n };\n\n // Merge default PostHog MCP with user-provided servers (user config takes precedence)\n this.mcpServers = {\n ...defaultMcpServers,\n ...config.mcpServers\n };\n this.logger = new Logger({ debug: this.debug, prefix: '[PostHog Agent]' });\n this.taskManager = new TaskManager();\n // Hardcode Claude adapter for now - extensible for other providers later\n this.adapter = new ClaudeAdapter();\n\n this.fileManager = new PostHogFileManager(\n this.workingDirectory,\n this.logger.child('FileManager')\n );\n this.gitManager = new GitManager({\n repositoryPath: this.workingDirectory,\n logger: this.logger.child('GitManager')\n // TODO: Add author config from environment or config\n });\n this.templateManager = new TemplateManager();\n this.agentRegistry = new AgentRegistry();\n\n if (config.posthogApiUrl && config.posthogApiKey) {\n this.posthogAPI = new PostHogAPIClient({\n apiUrl: config.posthogApiUrl,\n apiKey: config.posthogApiKey,\n });\n }\n\n this.workflowRegistry = new WorkflowRegistry(this.posthogAPI);\n this.promptBuilder = new PromptBuilder({\n getTaskFiles: (taskId: string) => this.getTaskFiles(taskId),\n generatePlanTemplate: (vars) => this.templateManager.generatePlan(vars),\n posthogClient: this.posthogAPI,\n logger: this.logger.child('PromptBuilder')\n });\n this.stageExecutor = new StageExecutor(\n this.agentRegistry,\n this.logger,\n this.promptBuilder,\n undefined, // eventHandler set via setEventHandler below\n this.mcpServers\n );\n this.stageExecutor.setEventHandler((event) => this.emitEvent(event));\n this.progressReporter = new TaskProgressReporter(this.posthogAPI, this.logger);\n \n // Initialize OpenAI extractor if API key is available\n if (process.env.OPENAI_API_KEY) {\n this.extractor = new OpenAIExtractor(this.logger.child('OpenAIExtractor'));\n }\n }\n\n /**\n * Enable or disable debug logging\n */\n setDebug(enabled: boolean) {\n this.debug = enabled;\n this.logger.setDebug(enabled);\n }\n\n /**\n * Configure LLM gateway environment variables for Claude Code CLI\n */\n private async _configureLlmGateway(): Promise<void> {\n if (!this.posthogAPI) {\n return;\n }\n\n if (process.env.ANTHROPIC_BASE_URL && process.env.ANTHROPIC_AUTH_TOKEN) {\n return;\n }\n\n try {\n const gatewayUrl = await this.posthogAPI.getLlmGatewayUrl();\n const apiKey = this.posthogAPI.getApiKey();\n\n process.env.ANTHROPIC_BASE_URL = gatewayUrl;\n process.env.ANTHROPIC_AUTH_TOKEN = apiKey;\n\n this.logger.debug('Configured LLM gateway', { gatewayUrl });\n } catch (error) {\n this.logger.error('Failed to configure LLM gateway', error);\n throw error;\n }\n }\n\n // Workflow-based execution\n async runWorkflow(taskOrId: Task | string, workflowId: string, options: WorkflowExecutionOptions = {}): Promise<{ task: Task; workflow: WorkflowDefinition }> {\n await this._configureLlmGateway();\n\n const task = typeof taskOrId === 'string' ? await this.fetchTask(taskOrId) : taskOrId;\n await this.workflowRegistry.loadWorkflows();\n const workflow = this.workflowRegistry.getWorkflow(workflowId);\n if (!workflow) {\n throw new Error(`Workflow ${workflowId} not found`);\n }\n const orderedStages = [...workflow.stages].sort((a, b) => a.position - b.position);\n\n // Ensure task is assigned to workflow and positioned at first stage\n if (this.posthogAPI) {\n try {\n if ((task.workflow as any) !== workflowId) {\n await this.posthogAPI.updateTask(task.id, { workflow: workflowId } as any);\n (task as any).workflow = workflowId;\n }\n } catch (e) {\n this.logger.warn('Failed to sync task workflow before execution', { error: (e as Error).message });\n }\n }\n\n const executionId = this.taskManager.generateExecutionId();\n this.logger.info('Starting workflow execution', { taskId: task.id, workflowId, executionId });\n this.taskManager.startExecution(task.id, 'plan_and_build', executionId);\n await this.progressReporter.start(task.id, {\n totalSteps: orderedStages.length,\n });\n\n // Set initial stage on the newly created run\n const firstStage = orderedStages[0];\n if (this.posthogAPI && this.progressReporter.runId && firstStage) {\n try {\n await this.posthogAPI.updateTaskRun(task.id, this.progressReporter.runId, {\n current_stage: firstStage.id\n });\n } catch (e) {\n this.logger.warn('Failed to set initial stage on run', { error: (e as Error).message });\n }\n }\n\n try {\n let startIndex = 0;\n const currentStageId = (task as any).current_stage as string | undefined;\n\n // If task is already at the last stage, fail gracefully without progressing\n if (currentStageId) {\n const currIdx = orderedStages.findIndex(s => s.id === currentStageId);\n const atLastStage = currIdx >= 0 && currIdx === orderedStages.length - 1;\n if (atLastStage) {\n const finalStageKey = orderedStages[currIdx]?.key;\n this.emitEvent(this.adapter.createStatusEvent('no_next_stage', { stage: finalStageKey }));\n await this.progressReporter.noNextStage(finalStageKey);\n await this.progressReporter.complete();\n this.taskManager.completeExecution(executionId, { task, workflow });\n return { task, workflow };\n }\n }\n\n if (options.resumeFromCurrentStage && currentStageId) {\n const idx = orderedStages.findIndex(s => s.id === currentStageId);\n if (idx >= 0) startIndex = idx;\n }\n\n // Align server-side stage when restarting from a different stage\n if (this.posthogAPI && this.progressReporter.runId) {\n const targetStage = orderedStages[startIndex];\n if (targetStage && targetStage.id !== currentStageId) {\n try {\n await this.posthogAPI.updateTaskRun(task.id, this.progressReporter.runId, {\n current_stage: targetStage.id\n });\n } catch (e) {\n this.logger.warn('Failed to update run stage', { error: (e as Error).message });\n }\n }\n }\n\n for (let i = startIndex; i < orderedStages.length; i++) {\n const stage = orderedStages[i];\n await this.progressReporter.stageStarted(stage.key, i);\n await this.executeStage(task, stage, options);\n await this.progressReporter.stageCompleted(stage.key, i + 1);\n if (options.autoProgress) {\n const hasNext = i < orderedStages.length - 1;\n if (hasNext) {\n await this.progressToNextStage(task.id, stage.key);\n }\n }\n }\n await this.progressReporter.complete();\n this.taskManager.completeExecution(executionId, { task, workflow });\n return { task, workflow };\n } catch (error) {\n await this.progressReporter.fail(error as Error);\n this.taskManager.failExecution(executionId, error as Error);\n throw error;\n }\n }\n\n async executeStage(task: Task, stage: WorkflowStage, options: WorkflowExecutionOptions = {}): Promise<void> {\n this.emitEvent(this.adapter.createStatusEvent('stage_start', { stage: stage.key }));\n const overrides = options.stageOverrides?.[stage.key];\n const agentName = stage.agent_name || 'code_generation';\n const agentDef = this.agentRegistry.getAgent(agentName);\n const isManual = stage.is_manual_only === true;\n const stageKeyLower = (stage.key || '').toLowerCase().trim();\n const isPlanningByKey = stageKeyLower === 'plan' || stageKeyLower.includes('plan');\n const isPlanning = !isManual && ((agentDef?.agent_type === 'planning') || isPlanningByKey);\n const shouldCreatePlanningBranch = overrides?.createPlanningBranch !== false; // default true\n const shouldCreateImplBranch = overrides?.createImplementationBranch !== false; // default true\n\n if (isPlanning && shouldCreatePlanningBranch) {\n const planningBranch = await this.createPlanningBranch(task.id);\n await this.updateTaskBranch(task.id, planningBranch);\n this.emitEvent(this.adapter.createStatusEvent('branch_created', { stage: stage.key, branch: planningBranch }));\n await this.progressReporter.branchCreated(stage.key, planningBranch);\n } else if (!isPlanning && !isManual && shouldCreateImplBranch) {\n const implBranch = await this.createImplementationBranch(task.id);\n await this.updateTaskBranch(task.id, implBranch);\n this.emitEvent(this.adapter.createStatusEvent('branch_created', { stage: stage.key, branch: implBranch }));\n await this.progressReporter.branchCreated(stage.key, implBranch);\n }\n\n const result = await this.stageExecutor.execute(task, stage, options);\n\n if (result.plan) {\n await this.writePlan(task.id, result.plan);\n await this.commitPlan(task.id, task.title);\n this.emitEvent(this.adapter.createStatusEvent('commit_made', { stage: stage.key, kind: 'plan' }));\n await this.progressReporter.commitMade(stage.key, 'plan');\n }\n\n if (isManual) {\n const defaultOpenPR = true; // manual stages default to PR for review\n const openPR = overrides?.openPullRequest ?? defaultOpenPR;\n if (openPR) {\n // Ensure we're on an implementation branch for PRs\n let branchName = await this.gitManager.getCurrentBranch();\n const onTaskBranch = branchName.includes(`posthog/task-${task.id}`);\n if (!onTaskBranch && (overrides?.createImplementationBranch !== false)) {\n const implBranch = await this.createImplementationBranch(task.id);\n await this.updateTaskBranch(task.id, implBranch);\n branchName = implBranch;\n this.emitEvent(this.adapter.createStatusEvent('branch_created', { stage: stage.key, branch: implBranch }));\n await this.progressReporter.branchCreated(stage.key, implBranch);\n }\n try {\n const prUrl = await this.createPullRequest(task.id, branchName, task.title, task.description);\n await this.updateTaskBranch(task.id, branchName);\n await this.attachPullRequestToTask(task.id, prUrl, branchName);\n this.emitEvent(this.adapter.createStatusEvent('pr_created', { stage: stage.key, prUrl }));\n await this.progressReporter.pullRequestCreated(stage.key, prUrl);\n } catch {}\n }\n // Do not auto-progress on manual stages\n this.emitEvent(this.adapter.createStatusEvent('stage_complete', { stage: stage.key }));\n return;\n }\n\n if (result.results) {\n const existingPlan = await this.readPlan(task.id);\n const planSummary = existingPlan ? existingPlan.split('\\n')[0] : undefined;\n await this.commitImplementation(task.id, task.title, planSummary);\n this.emitEvent(this.adapter.createStatusEvent('commit_made', { stage: stage.key, kind: 'implementation' }));\n await this.progressReporter.commitMade(stage.key, 'implementation');\n }\n\n // PR creation on complete stage (or if explicitly requested), regardless of whether edits occurred\n {\n const defaultOpenPR = stage.key.toLowerCase().includes('complete');\n const openPR = overrides?.openPullRequest ?? defaultOpenPR;\n if (openPR) {\n const branchName = await this.gitManager.getCurrentBranch();\n try {\n const prUrl = await this.createPullRequest(task.id, branchName, task.title, task.description);\n await this.updateTaskBranch(task.id, branchName);\n await this.attachPullRequestToTask(task.id, prUrl, branchName);\n this.emitEvent(this.adapter.createStatusEvent('pr_created', { stage: stage.key, prUrl }));\n await this.progressReporter.pullRequestCreated(stage.key, prUrl);\n } catch {}\n }\n }\n\n this.emitEvent(this.adapter.createStatusEvent('stage_complete', { stage: stage.key }));\n }\n\n // Adaptive task execution - 3-phase workflow (research → plan → build)\n async runTask(taskOrId: Task | string, options: import('./types.js').TaskExecutionOptions = {}): Promise<void> {\n await this._configureLlmGateway();\n\n const task = typeof taskOrId === 'string' ? await this.fetchTask(taskOrId) : taskOrId;\n const cwd = options.repositoryPath || this.workingDirectory;\n const isCloudMode = options.isCloudMode ?? false;\n const taskSlug = (task as any).slug || task.id;\n\n this.logger.info('Starting adaptive task execution', { taskId: task.id, taskSlug, isCloudMode });\n\n // Initialize progress reporter for task run tracking (needed for PR attachment)\n await this.progressReporter.start(task.id, { totalSteps: 3 }); // 3 phases: research, plan, build\n this.emitEvent(this.adapter.createStatusEvent('run_started', { runId: this.progressReporter.runId }));\n\n // Phase 1: Branch check\n const existingBranch = await this.gitManager.getTaskBranch(taskSlug);\n if (!existingBranch) {\n this.logger.info('Creating task branch', { taskSlug });\n const branchName = `posthog/task-${taskSlug}`;\n await this.gitManager.createOrSwitchToBranch(branchName);\n this.emitEvent(this.adapter.createStatusEvent('branch_created', { branch: branchName }));\n \n // Initial commit\n await this.fileManager.ensureGitignore();\n await this.gitManager.addAllPostHogFiles();\n if (isCloudMode) {\n await this.gitManager.commitAndPush(`Initialize task ${taskSlug}`, { allowEmpty: true });\n } else {\n await this.gitManager.commitChanges(`Initialize task ${taskSlug}`);\n }\n } else {\n this.logger.info('Switching to existing task branch', { branch: existingBranch });\n await this.gitManager.switchToBranch(existingBranch);\n }\n\n // Phase 2: Research\n const researchExists = await this.fileManager.readResearch(task.id);\n if (!researchExists) {\n this.logger.info('Starting research phase', { taskId: task.id });\n this.emitEvent(this.adapter.createStatusEvent('phase_start', { phase: 'research' }));\n \n // Run research agent\n const researchPrompt = await this.promptBuilder.buildResearchPrompt(task, cwd);\n const { RESEARCH_SYSTEM_PROMPT } = await import('./agents/research.js');\n const fullPrompt = RESEARCH_SYSTEM_PROMPT + '\\n\\n' + researchPrompt;\n \n const baseOptions: Record<string, any> = {\n model: 'claude-sonnet-4-5-20250929',\n cwd,\n permissionMode: 'plan',\n settingSources: ['local'],\n mcpServers: this.mcpServers,\n };\n\n const response = query({\n prompt: fullPrompt,\n options: { ...baseOptions, ...(options.queryOverrides || {}) },\n });\n\n let researchContent = '';\n for await (const message of response) {\n this.emitEvent(this.adapter.createRawSDKEvent(message));\n const transformed = this.adapter.transform(message);\n if (transformed) {\n this.emitEvent(transformed);\n }\n if (message.type === 'assistant' && message.message?.content) {\n for (const c of message.message.content) {\n if (c.type === 'text' && c.text) researchContent += c.text + '\\n';\n }\n }\n }\n\n // Write research.md\n if (researchContent.trim()) {\n await this.fileManager.writeResearch(task.id, researchContent.trim());\n this.logger.info('Research completed', { taskId: task.id });\n }\n\n // Commit research\n await this.gitManager.addAllPostHogFiles();\n \n // Extract questions using structured output and save to questions.json\n if (this.extractor) {\n try {\n this.logger.info('Extracting questions from research.md', { taskId: task.id });\n const questions = await this.extractQuestionsFromResearch(task.id, false);\n \n this.logger.info('Questions extracted successfully', { taskId: task.id, count: questions.length });\n \n // Save questions.json\n await this.fileManager.writeQuestions(task.id, {\n questions,\n answered: false,\n answers: null,\n });\n \n this.logger.info('Questions saved to questions.json', { taskId: task.id });\n \n // Emit event for Array to pick up (local mode)\n if (!isCloudMode) {\n this.emitEvent({\n type: 'artifact',\n ts: Date.now(),\n kind: 'research_questions',\n content: questions,\n });\n this.logger.info('Emitted research_questions artifact event', { taskId: task.id });\n }\n } catch (error) {\n this.logger.error('Failed to extract questions', { error: error instanceof Error ? error.message : String(error) });\n this.emitEvent({\n type: 'error',\n ts: Date.now(),\n message: `Failed to extract questions: ${error instanceof Error ? error.message : String(error)}`,\n });\n }\n } else {\n this.logger.warn('OpenAI extractor not available (OPENAI_API_KEY not set), skipping question extraction');\n this.emitEvent({\n type: 'status',\n ts: Date.now(),\n phase: 'extraction_skipped',\n message: 'Question extraction skipped - OPENAI_API_KEY not configured',\n });\n }\n \n if (isCloudMode) {\n await this.gitManager.commitAndPush(`Research phase for ${task.title}`);\n } else {\n await this.gitManager.commitChanges(`Research phase for ${task.title}`);\n this.emitEvent(this.adapter.createStatusEvent('phase_complete', { phase: 'research' }));\n return; // Local mode: return to user\n }\n }\n\n // Phase 3: Auto-answer questions (cloud mode only)\n if (isCloudMode) {\n const questionsData = await this.fileManager.readQuestions(task.id);\n if (questionsData && !questionsData.answered) {\n this.logger.info('Auto-answering research questions', { taskId: task.id });\n \n // Extract questions with recommended answers using structured output\n if (this.extractor) {\n const questionsWithAnswers = await this.extractQuestionsFromResearch(task.id, true) as ExtractedQuestionWithAnswer[];\n \n // Save answers to questions.json\n await this.fileManager.writeQuestions(task.id, {\n questions: questionsWithAnswers.map(qa => ({\n id: qa.id,\n question: qa.question,\n options: qa.options,\n })),\n answered: true,\n answers: questionsWithAnswers.map(qa => ({\n questionId: qa.id,\n selectedOption: qa.recommendedAnswer,\n customInput: qa.justification,\n })),\n });\n \n this.logger.info('Auto-answers saved to questions.json', { taskId: task.id });\n await this.gitManager.addAllPostHogFiles();\n await this.gitManager.commitAndPush(`Answer research questions for ${task.title}`);\n } else {\n this.logger.warn('OpenAI extractor not available, skipping auto-answer');\n }\n }\n }\n\n // Phase 4: Plan\n const planExists = await this.readPlan(task.id);\n if (!planExists) {\n // Check if questions have been answered\n const questionsData = await this.fileManager.readQuestions(task.id);\n if (!questionsData || !questionsData.answered) {\n this.logger.info('Waiting for user answers to research questions');\n this.emitEvent(this.adapter.createStatusEvent('phase_complete', { phase: 'research_questions' }));\n return; // Wait for user to answer questions\n }\n\n this.logger.info('Starting planning phase', { taskId: task.id });\n this.emitEvent(this.adapter.createStatusEvent('phase_start', { phase: 'planning' }));\n \n // Build context with research + questions + answers\n const research = await this.fileManager.readResearch(task.id);\n let researchContext = '';\n if (research) {\n researchContext += `## Research Analysis\\n\\n${research}\\n\\n`;\n }\n \n // Add questions and answers\n researchContext += `## Implementation Decisions\\n\\n`;\n const answers = questionsData.answers || [];\n for (const question of questionsData.questions) {\n const answer = answers.find((a: any) => a.questionId === question.id);\n \n researchContext += `### ${question.question}\\n\\n`;\n if (answer) {\n researchContext += `**Selected:** ${answer.selectedOption}\\n`;\n if (answer.customInput) {\n researchContext += `**Details:** ${answer.customInput}\\n`;\n }\n } else {\n this.logger.warn('No answer found for question', { questionId: question.id });\n researchContext += `**Selected:** Not answered\\n`;\n }\n researchContext += '\\n';\n }\n \n // Run planning agent with full context\n const planningPrompt = await this.promptBuilder.buildPlanningPrompt(task, cwd);\n const { PLANNING_SYSTEM_PROMPT } = await import('./agents/planning.js');\n const fullPrompt = PLANNING_SYSTEM_PROMPT + '\\n\\n' + planningPrompt + '\\n\\n' + researchContext;\n \n const baseOptions: Record<string, any> = {\n model: 'claude-sonnet-4-5-20250929',\n cwd,\n permissionMode: 'plan',\n settingSources: ['local'],\n mcpServers: this.mcpServers,\n };\n\n const response = query({\n prompt: fullPrompt,\n options: { ...baseOptions, ...(options.queryOverrides || {}) },\n });\n\n let planContent = '';\n for await (const message of response) {\n this.emitEvent(this.adapter.createRawSDKEvent(message));\n const transformed = this.adapter.transform(message);\n if (transformed) {\n this.emitEvent(transformed);\n }\n if (message.type === 'assistant' && message.message?.content) {\n for (const c of message.message.content) {\n if (c.type === 'text' && c.text) planContent += c.text + '\\n';\n }\n }\n }\n\n // Write plan.md\n if (planContent.trim()) {\n await this.writePlan(task.id, planContent.trim());\n this.logger.info('Plan completed', { taskId: task.id });\n }\n\n // Commit plan\n await this.gitManager.addAllPostHogFiles();\n if (isCloudMode) {\n await this.gitManager.commitAndPush(`Planning phase for ${task.title}`);\n } else {\n await this.gitManager.commitChanges(`Planning phase for ${task.title}`);\n this.emitEvent(this.adapter.createStatusEvent('phase_complete', { phase: 'planning' }));\n return; // Local mode: return to user\n }\n }\n\n // Phase 5: Build\n const latestRun = task.latest_run;\n const prExists = latestRun?.output && (latestRun.output as any).pr_url;\n \n if (!prExists) {\n this.logger.info('Starting build phase', { taskId: task.id });\n this.emitEvent(this.adapter.createStatusEvent('phase_start', { phase: 'build' }));\n \n // Run execution agent\n const executionPrompt = await this.promptBuilder.buildExecutionPrompt(task, cwd);\n const { EXECUTION_SYSTEM_PROMPT } = await import('./agents/execution.js');\n const fullPrompt = EXECUTION_SYSTEM_PROMPT + '\\n\\n' + executionPrompt;\n \n const { PermissionMode } = await import('./types.js');\n const permissionMode = options.permissionMode || PermissionMode.ACCEPT_EDITS;\n const baseOptions: Record<string, any> = {\n model: 'claude-sonnet-4-5-20250929',\n cwd,\n permissionMode,\n settingSources: ['local'],\n mcpServers: this.mcpServers,\n };\n\n const response = query({\n prompt: fullPrompt,\n options: { ...baseOptions, ...(options.queryOverrides || {}) },\n });\n\n for await (const message of response) {\n this.emitEvent(this.adapter.createRawSDKEvent(message));\n const transformed = this.adapter.transform(message);\n if (transformed) {\n this.emitEvent(transformed);\n }\n }\n\n // Commit and push implementation\n // Stage ALL changes (not just .posthog/)\n const hasChanges = await this.gitManager.hasChanges();\n if (hasChanges) {\n await this.gitManager.addFiles(['.']); // Stage all changes\n await this.gitManager.commitChanges(`Implementation for ${task.title}`);\n \n // Push to origin\n const branchName = await this.gitManager.getCurrentBranch();\n await this.gitManager.pushBranch(branchName);\n \n this.logger.info('Implementation committed and pushed', { taskId: task.id });\n } else {\n this.logger.warn('No changes to commit in build phase', { taskId: task.id });\n }\n\n // Create PR\n const branchName = await this.gitManager.getCurrentBranch();\n const prUrl = await this.createPullRequest(task.id, branchName, task.title, task.description);\n this.logger.info('Pull request created', { taskId: task.id, prUrl });\n this.emitEvent(this.adapter.createStatusEvent('pr_created', { prUrl }));\n \n // Attach PR to task run\n try {\n await this.attachPullRequestToTask(task.id, prUrl, branchName);\n this.logger.info('PR attached to task successfully', { taskId: task.id, prUrl });\n } catch (error) {\n this.logger.warn('Could not attach PR to task', { error: error instanceof Error ? error.message : String(error) });\n }\n } else {\n this.logger.info('PR already exists, skipping build phase', { taskId: task.id });\n }\n\n // Phase 6: Complete\n await this.progressReporter.complete();\n this.logger.info('Task execution complete', { taskId: task.id });\n this.emitEvent(this.adapter.createStatusEvent('task_complete', { taskId: task.id }));\n }\n\n async progressToNextStage(taskId: string, currentStageKey?: string): Promise<void> {\n if (!this.posthogAPI || !this.progressReporter.runId) {\n throw new Error('PostHog API not configured or no active run. Cannot progress stage.');\n }\n try {\n await this.posthogAPI.progressTaskRun(taskId, this.progressReporter.runId);\n } catch (error) {\n if (error instanceof Error && error.message.includes('No next stage available')) {\n this.logger.warn('No next stage available when attempting to progress run', {\n taskId,\n runId: this.progressReporter.runId,\n stage: currentStageKey,\n error: error.message,\n });\n this.emitEvent(this.adapter.createStatusEvent('no_next_stage', { stage: currentStageKey }));\n await this.progressReporter.noNextStage(currentStageKey);\n return;\n }\n throw error;\n }\n }\n\n // Direct prompt execution - still supported for low-level usage\n async run(prompt: string, options: { repositoryPath?: string; permissionMode?: import('./types.js').PermissionMode; queryOverrides?: Record<string, any> } = {}): Promise<ExecutionResult> {\n await this._configureLlmGateway();\n const baseOptions: Record<string, any> = {\n model: \"claude-sonnet-4-5-20250929\",\n cwd: options.repositoryPath || this.workingDirectory,\n permissionMode: (options.permissionMode as any) || \"default\",\n settingSources: [\"local\"],\n mcpServers: this.mcpServers,\n };\n\n const response = query({\n prompt,\n options: { ...baseOptions, ...(options.queryOverrides || {}) },\n });\n\n const results = [];\n for await (const message of response) {\n this.logger.debug('Received message in direct run', message);\n // Emit raw SDK event\n this.emitEvent(this.adapter.createRawSDKEvent(message));\n // Emit transformed event\n const transformedEvent = this.adapter.transform(message);\n if (transformedEvent) {\n this.emitEvent(transformedEvent);\n }\n results.push(message);\n }\n \n return { results };\n }\n \n // PostHog task operations\n async fetchTask(taskId: string): Promise<Task> {\n this.logger.debug('Fetching task from PostHog', { taskId });\n if (!this.posthogAPI) {\n const error = new Error('PostHog API not configured. Provide posthogApiUrl and posthogApiKey in constructor.');\n this.logger.error('PostHog API not configured', error);\n throw error;\n }\n return this.posthogAPI.fetchTask(taskId);\n }\n\n getPostHogClient(): PostHogAPIClient | undefined {\n return this.posthogAPI;\n }\n \n async listTasks(filters?: {\n repository?: string;\n organization?: string;\n origin_product?: string;\n workflow?: string;\n current_stage?: string;\n }): Promise<Task[]> {\n if (!this.posthogAPI) {\n throw new Error('PostHog API not configured. Provide posthogApiUrl and posthogApiKey in constructor.');\n }\n return this.posthogAPI.listTasks(filters);\n }\n \n // File system operations for task artifacts\n async writeTaskFile(taskId: string, fileName: string, content: string, type: 'plan' | 'context' | 'reference' | 'output' = 'reference'): Promise<void> {\n this.logger.debug('Writing task file', { taskId, fileName, type, contentLength: content.length });\n await this.fileManager.writeTaskFile(taskId, { name: fileName, content, type });\n }\n \n async readTaskFile(taskId: string, fileName: string): Promise<string | null> {\n this.logger.debug('Reading task file', { taskId, fileName });\n return await this.fileManager.readTaskFile(taskId, fileName);\n }\n \n async getTaskFiles(taskId: string): Promise<any[]> {\n this.logger.debug('Getting task files', { taskId });\n const files = await this.fileManager.getTaskFiles(taskId);\n this.logger.debug('Found task files', { taskId, fileCount: files.length });\n return files;\n }\n \n async writePlan(taskId: string, plan: string): Promise<void> {\n this.logger.info('Writing plan', { taskId, planLength: plan.length });\n await this.fileManager.writePlan(taskId, plan);\n }\n \n async readPlan(taskId: string): Promise<string | null> {\n this.logger.debug('Reading plan', { taskId });\n return await this.fileManager.readPlan(taskId);\n }\n\n async extractQuestionsFromResearch(taskId: string, includeAnswers: boolean = false): Promise<ExtractedQuestion[] | ExtractedQuestionWithAnswer[]> {\n this.logger.info('Extracting questions from research.md', { taskId, includeAnswers });\n \n if (!this.extractor) {\n throw new Error('OpenAI extractor not initialized. Set OPENAI_API_KEY environment variable.');\n }\n\n const researchContent = await this.fileManager.readResearch(taskId);\n if (!researchContent) {\n throw new Error('research.md not found for task ' + taskId);\n }\n\n if (includeAnswers) {\n return await this.extractor.extractQuestionsWithAnswers(researchContent);\n } else {\n return await this.extractor.extractQuestions(researchContent);\n }\n }\n \n // Git operations for task workflow\n async createPlanningBranch(taskId: string): Promise<string> {\n this.logger.info('Creating planning branch', { taskId });\n const branchName = await this.gitManager.createTaskPlanningBranch(taskId);\n this.logger.debug('Planning branch created', { taskId, branchName });\n // Only create gitignore after we're on the new branch\n await this.fileManager.ensureGitignore();\n return branchName;\n }\n \n async commitPlan(taskId: string, taskTitle: string): Promise<string> {\n this.logger.info('Committing plan', { taskId, taskTitle });\n const commitHash = await this.gitManager.commitPlan(taskId, taskTitle);\n this.logger.debug('Plan committed', { taskId, commitHash });\n return commitHash;\n }\n \n async createImplementationBranch(taskId: string, planningBranchName?: string): Promise<string> {\n this.logger.info('Creating implementation branch', { taskId, fromBranch: planningBranchName });\n const branchName = await this.gitManager.createTaskImplementationBranch(taskId, planningBranchName);\n this.logger.debug('Implementation branch created', { taskId, branchName });\n return branchName;\n }\n \n async commitImplementation(taskId: string, taskTitle: string, planSummary?: string): Promise<string> {\n this.logger.info('Committing implementation', { taskId, taskTitle });\n const commitHash = await this.gitManager.commitImplementation(taskId, taskTitle, planSummary);\n this.logger.debug('Implementation committed', { taskId, commitHash });\n return commitHash;\n }\n\n async createPullRequest(taskId: string, branchName: string, taskTitle: string, taskDescription: string): Promise<string> {\n this.logger.info('Creating pull request', { taskId, branchName, taskTitle });\n\n // Build PR body\n const prBody = `## Task Details\n**Task ID**: ${taskId}\n**Description**: ${taskDescription}\n\n## Changes\nThis PR implements the changes described in the task.\n\nGenerated by PostHog Agent`;\n\n const prUrl = await this.gitManager.createPullRequest(\n branchName,\n taskTitle,\n prBody\n );\n\n this.logger.info('Pull request created', { taskId, prUrl });\n return prUrl;\n }\n\n async attachPullRequestToTask(taskId: string, prUrl: string, branchName?: string): Promise<void> {\n this.logger.info('Attaching PR to task run', { taskId, prUrl, branchName });\n\n if (!this.posthogAPI || !this.progressReporter.runId) {\n const error = new Error('PostHog API not configured or no active run. Cannot attach PR to task.');\n this.logger.error('PostHog API not configured', error);\n throw error;\n }\n\n const updates: any = {\n output: { pr_url: prUrl }\n };\n if (branchName) {\n updates.branch = branchName;\n }\n\n await this.posthogAPI.updateTaskRun(taskId, this.progressReporter.runId, updates);\n this.logger.debug('PR attached to task run', { taskId, runId: this.progressReporter.runId, prUrl });\n }\n\n async updateTaskBranch(taskId: string, branchName: string): Promise<void> {\n this.logger.info('Updating task run branch', { taskId, branchName });\n\n if (!this.posthogAPI || !this.progressReporter.runId) {\n const error = new Error('PostHog API not configured or no active run. Cannot update branch.');\n this.logger.error('PostHog API not configured', error);\n throw error;\n }\n\n await this.posthogAPI.updateTaskRun(taskId, this.progressReporter.runId, { branch: branchName });\n this.logger.debug('Task run branch updated', { taskId, runId: this.progressReporter.runId, branchName });\n }\n\n // Execution management\n cancelTask(taskId: string): void {\n // Find the execution for this task and cancel it\n for (const [executionId, execution] of this.taskManager['executionStates']) {\n if (execution.taskId === taskId && execution.status === 'running') {\n this.taskManager.cancelExecution(executionId);\n break;\n }\n }\n }\n\n getTaskExecutionStatus(taskId: string): string | null {\n // Find the execution for this task\n for (const execution of this.taskManager['executionStates'].values()) {\n if (execution.taskId === taskId) {\n return execution.status;\n }\n }\n return null;\n }\n\n private emitEvent(event: any): void {\n if (this.debug && event.type !== 'token') {\n // Log all events except tokens (too verbose)\n this.logger.debug('Emitting event', { type: event.type, ts: event.ts });\n }\n const persistPromise = this.progressReporter.recordEvent(event);\n if (persistPromise && typeof persistPromise.then === 'function') {\n persistPromise.catch((error: Error) =>\n this.logger.debug('Failed to persist agent event', { message: error.message })\n );\n }\n this.onEvent?.(event);\n }\n}\n\nexport { PermissionMode } from './types.js';\nexport type { Task, SupportingFile, ExecutionResult, AgentConfig } from './types.js';\nexport type { WorkflowDefinition, WorkflowStage, WorkflowExecutionOptions } from './workflow-types.js';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent.js","sources":["../../src/agent.ts"],"sourcesContent":["import { query } from \"@anthropic-ai/claude-agent-sdk\";\nimport type { Task, ExecutionResult, AgentConfig } from './types.js';\nimport { TaskManager } from './task-manager.js';\nimport { PostHogAPIClient } from './posthog-api.js';\nimport { PostHogFileManager } from './file-manager.js';\nimport { GitManager } from './git-manager.js';\nimport { TemplateManager } from './template-manager.js';\nimport { ClaudeAdapter } from './adapters/claude/claude-adapter.js';\nimport type { ProviderAdapter } from './adapters/types.js';\nimport { Logger } from './utils/logger.js';\nimport { PromptBuilder } from './prompt-builder.js';\nimport { TaskProgressReporter } from './task-progress-reporter.js';\nimport { AISDKExtractor, type StructuredExtractor, type ExtractedQuestion, type ExtractedQuestionWithAnswer } from './structured-extraction.js';\nimport { TASK_WORKFLOW } from './workflow/config.js';\nimport type { WorkflowRuntime } from './workflow/types.js';\n\nexport class Agent {\n private workingDirectory: string;\n private onEvent?: (event: any) => void;\n private taskManager: TaskManager;\n private posthogAPI?: PostHogAPIClient;\n private fileManager: PostHogFileManager;\n private gitManager: GitManager;\n private templateManager: TemplateManager;\n private adapter: ProviderAdapter;\n private logger: Logger;\n private progressReporter: TaskProgressReporter;\n private promptBuilder: PromptBuilder;\n private extractor?: StructuredExtractor;\n private mcpServers?: Record<string, any>;\n public debug: boolean;\n\n constructor(config: AgentConfig = {}) {\n this.workingDirectory = config.workingDirectory || process.cwd();\n this.onEvent = config.onEvent;\n this.debug = config.debug || false;\n\n // Build default PostHog MCP server configuration\n const posthogMcpUrl = config.posthogMcpUrl\n || process.env.POSTHOG_MCP_URL\n || 'https://mcp.posthog.com/mcp';\n\n // Add auth if API key provided\n const headers: Record<string, string> = {};\n if (config.posthogApiKey) {\n headers['Authorization'] = `Bearer ${config.posthogApiKey}`;\n }\n\n const defaultMcpServers = {\n posthog: {\n type: 'http' as const,\n url: posthogMcpUrl,\n ...(Object.keys(headers).length > 0 ? { headers } : {}),\n }\n };\n\n // Merge default PostHog MCP with user-provided servers (user config takes precedence)\n this.mcpServers = {\n ...defaultMcpServers,\n ...config.mcpServers\n };\n this.logger = new Logger({ debug: this.debug, prefix: '[PostHog Agent]' });\n this.taskManager = new TaskManager();\n // Hardcode Claude adapter for now - extensible for other providers later\n this.adapter = new ClaudeAdapter();\n\n this.fileManager = new PostHogFileManager(\n this.workingDirectory,\n this.logger.child('FileManager')\n );\n this.gitManager = new GitManager({\n repositoryPath: this.workingDirectory,\n logger: this.logger.child('GitManager')\n // TODO: Add author config from environment or config\n });\n this.templateManager = new TemplateManager();\n\n if (config.posthogApiUrl && config.posthogApiKey) {\n this.posthogAPI = new PostHogAPIClient({\n apiUrl: config.posthogApiUrl,\n apiKey: config.posthogApiKey,\n });\n }\n\n this.promptBuilder = new PromptBuilder({\n getTaskFiles: (taskId: string) => this.getTaskFiles(taskId),\n generatePlanTemplate: (vars) => this.templateManager.generatePlan(vars),\n posthogClient: this.posthogAPI,\n logger: this.logger.child('PromptBuilder')\n });\n this.progressReporter = new TaskProgressReporter(this.posthogAPI, this.logger);\n this.extractor = new AISDKExtractor(this.logger.child('AISDKExtractor'));\n }\n\n /**\n * Enable or disable debug logging\n */\n setDebug(enabled: boolean) {\n this.debug = enabled;\n this.logger.setDebug(enabled);\n }\n\n /**\n * Configure LLM gateway environment variables for Claude Code CLI\n */\n private async _configureLlmGateway(): Promise<void> {\n if (!this.posthogAPI) {\n return;\n }\n\n if (process.env.ANTHROPIC_BASE_URL && process.env.ANTHROPIC_AUTH_TOKEN) {\n this.ensureOpenAIGatewayEnv();\n return;\n }\n\n try {\n const gatewayUrl = await this.posthogAPI.getLlmGatewayUrl();\n const apiKey = this.posthogAPI.getApiKey();\n\n process.env.ANTHROPIC_BASE_URL = gatewayUrl;\n process.env.ANTHROPIC_AUTH_TOKEN = apiKey;\n this.ensureOpenAIGatewayEnv(gatewayUrl, apiKey);\n\n this.logger.debug('Configured LLM gateway', { gatewayUrl });\n } catch (error) {\n this.logger.error('Failed to configure LLM gateway', error);\n throw error;\n }\n }\n\n // Adaptive task execution orchestrated via workflow steps\n async runTask(taskOrId: Task | string, options: import('./types.js').TaskExecutionOptions = {}): Promise<void> {\n await this._configureLlmGateway();\n\n const task = typeof taskOrId === 'string' ? await this.fetchTask(taskOrId) : taskOrId;\n const cwd = options.repositoryPath || this.workingDirectory;\n const isCloudMode = options.isCloudMode ?? false;\n const taskSlug = (task as any).slug || task.id;\n\n this.logger.info('Starting adaptive task execution', { taskId: task.id, taskSlug, isCloudMode });\n\n // Initialize progress reporter for task run tracking (needed for PR attachment)\n await this.progressReporter.start(task.id, { totalSteps: TASK_WORKFLOW.length });\n this.emitEvent(this.adapter.createStatusEvent('run_started', { runId: this.progressReporter.runId }));\n\n await this.prepareTaskBranch(taskSlug, isCloudMode);\n\n const workflowContext: WorkflowRuntime = {\n task,\n taskSlug,\n cwd,\n isCloudMode,\n options,\n logger: this.logger,\n fileManager: this.fileManager,\n gitManager: this.gitManager,\n promptBuilder: this.promptBuilder,\n progressReporter: this.progressReporter,\n adapter: this.adapter,\n mcpServers: this.mcpServers,\n posthogAPI: this.posthogAPI,\n extractor: this.extractor,\n emitEvent: (event: any) => this.emitEvent(event),\n stepResults: {},\n };\n\n for (const step of TASK_WORKFLOW) {\n const result = await step.run({ step, context: workflowContext });\n if (result.halt) {\n return;\n }\n }\n\n if (isCloudMode) {\n await this.ensurePullRequest(task, workflowContext.stepResults);\n }\n\n await this.progressReporter.complete();\n this.logger.info('Task execution complete', { taskId: task.id });\n this.emitEvent(this.adapter.createStatusEvent('task_complete', { taskId: task.id }));\n }\n\n // Direct prompt execution - still supported for low-level usage\n async run(prompt: string, options: { repositoryPath?: string; permissionMode?: import('./types.js').PermissionMode; queryOverrides?: Record<string, any> } = {}): Promise<ExecutionResult> {\n await this._configureLlmGateway();\n const baseOptions: Record<string, any> = {\n model: \"claude-sonnet-4-5-20250929\",\n cwd: options.repositoryPath || this.workingDirectory,\n permissionMode: (options.permissionMode as any) || \"default\",\n settingSources: [\"local\"],\n mcpServers: this.mcpServers,\n };\n\n const response = query({\n prompt,\n options: { ...baseOptions, ...(options.queryOverrides || {}) },\n });\n\n const results = [];\n for await (const message of response) {\n this.logger.debug('Received message in direct run', message);\n // Emit raw SDK event\n this.emitEvent(this.adapter.createRawSDKEvent(message));\n // Emit transformed event\n const transformedEvent = this.adapter.transform(message);\n if (transformedEvent) {\n this.emitEvent(transformedEvent);\n }\n results.push(message);\n }\n \n return { results };\n }\n \n // PostHog task operations\n async fetchTask(taskId: string): Promise<Task> {\n this.logger.debug('Fetching task from PostHog', { taskId });\n if (!this.posthogAPI) {\n const error = new Error('PostHog API not configured. Provide posthogApiUrl and posthogApiKey in constructor.');\n this.logger.error('PostHog API not configured', error);\n throw error;\n }\n return this.posthogAPI.fetchTask(taskId);\n }\n\n getPostHogClient(): PostHogAPIClient | undefined {\n return this.posthogAPI;\n }\n \n async listTasks(filters?: {\n repository?: string;\n organization?: string;\n origin_product?: string;\n }): Promise<Task[]> {\n if (!this.posthogAPI) {\n throw new Error('PostHog API not configured. Provide posthogApiUrl and posthogApiKey in constructor.');\n }\n return this.posthogAPI.listTasks(filters);\n }\n \n // File system operations for task artifacts\n async writeTaskFile(taskId: string, fileName: string, content: string, type: 'plan' | 'context' | 'reference' | 'output' = 'reference'): Promise<void> {\n this.logger.debug('Writing task file', { taskId, fileName, type, contentLength: content.length });\n await this.fileManager.writeTaskFile(taskId, { name: fileName, content, type });\n }\n \n async readTaskFile(taskId: string, fileName: string): Promise<string | null> {\n this.logger.debug('Reading task file', { taskId, fileName });\n return await this.fileManager.readTaskFile(taskId, fileName);\n }\n \n async getTaskFiles(taskId: string): Promise<any[]> {\n this.logger.debug('Getting task files', { taskId });\n const files = await this.fileManager.getTaskFiles(taskId);\n this.logger.debug('Found task files', { taskId, fileCount: files.length });\n return files;\n }\n \n async writePlan(taskId: string, plan: string): Promise<void> {\n this.logger.info('Writing plan', { taskId, planLength: plan.length });\n await this.fileManager.writePlan(taskId, plan);\n }\n \n async readPlan(taskId: string): Promise<string | null> {\n this.logger.debug('Reading plan', { taskId });\n return await this.fileManager.readPlan(taskId);\n }\n\n async extractQuestionsFromResearch(taskId: string, includeAnswers: boolean = false): Promise<ExtractedQuestion[] | ExtractedQuestionWithAnswer[]> {\n this.logger.info('Extracting questions from research.md', { taskId, includeAnswers });\n \n if (!this.extractor) {\n throw new Error('OpenAI extractor not initialized. Ensure the LLM gateway is configured.');\n }\n\n const researchContent = await this.fileManager.readResearch(taskId);\n if (!researchContent) {\n throw new Error('research.md not found for task ' + taskId);\n }\n\n if (includeAnswers) {\n return await this.extractor.extractQuestionsWithAnswers(researchContent);\n } else {\n return await this.extractor.extractQuestions(researchContent);\n }\n }\n\n // Git operations for task execution\n async createPlanningBranch(taskId: string): Promise<string> {\n this.logger.info('Creating planning branch', { taskId });\n const branchName = await this.gitManager.createTaskPlanningBranch(taskId);\n this.logger.debug('Planning branch created', { taskId, branchName });\n // Only create gitignore after we're on the new branch\n await this.fileManager.ensureGitignore();\n return branchName;\n }\n \n async commitPlan(taskId: string, taskTitle: string): Promise<string> {\n this.logger.info('Committing plan', { taskId, taskTitle });\n const commitHash = await this.gitManager.commitPlan(taskId, taskTitle);\n this.logger.debug('Plan committed', { taskId, commitHash });\n return commitHash;\n }\n \n async createImplementationBranch(taskId: string, planningBranchName?: string): Promise<string> {\n this.logger.info('Creating implementation branch', { taskId, fromBranch: planningBranchName });\n const branchName = await this.gitManager.createTaskImplementationBranch(taskId, planningBranchName);\n this.logger.debug('Implementation branch created', { taskId, branchName });\n return branchName;\n }\n \n async commitImplementation(taskId: string, taskTitle: string, planSummary?: string): Promise<string> {\n this.logger.info('Committing implementation', { taskId, taskTitle });\n const commitHash = await this.gitManager.commitImplementation(taskId, taskTitle, planSummary);\n this.logger.debug('Implementation committed', { taskId, commitHash });\n return commitHash;\n }\n\n async createPullRequest(taskId: string, branchName: string, taskTitle: string, taskDescription: string): Promise<string> {\n this.logger.info('Creating pull request', { taskId, branchName, taskTitle });\n\n // Build PR body\n const prBody = `## Task Details\n**Task ID**: ${taskId}\n**Description**: ${taskDescription}\n\n## Changes\nThis PR implements the changes described in the task.\n\nGenerated by PostHog Agent`;\n\n const prUrl = await this.gitManager.createPullRequest(\n branchName,\n taskTitle,\n prBody\n );\n\n this.logger.info('Pull request created', { taskId, prUrl });\n return prUrl;\n }\n\n async attachPullRequestToTask(taskId: string, prUrl: string, branchName?: string): Promise<void> {\n this.logger.info('Attaching PR to task run', { taskId, prUrl, branchName });\n\n if (!this.posthogAPI || !this.progressReporter.runId) {\n const error = new Error('PostHog API not configured or no active run. Cannot attach PR to task.');\n this.logger.error('PostHog API not configured', error);\n throw error;\n }\n\n const updates: any = {\n output: { pr_url: prUrl }\n };\n if (branchName) {\n updates.branch = branchName;\n }\n\n await this.posthogAPI.updateTaskRun(taskId, this.progressReporter.runId, updates);\n this.logger.debug('PR attached to task run', { taskId, runId: this.progressReporter.runId, prUrl });\n }\n\n async updateTaskBranch(taskId: string, branchName: string): Promise<void> {\n this.logger.info('Updating task run branch', { taskId, branchName });\n\n if (!this.posthogAPI || !this.progressReporter.runId) {\n const error = new Error('PostHog API not configured or no active run. Cannot update branch.');\n this.logger.error('PostHog API not configured', error);\n throw error;\n }\n\n await this.posthogAPI.updateTaskRun(taskId, this.progressReporter.runId, { branch: branchName });\n this.logger.debug('Task run branch updated', { taskId, runId: this.progressReporter.runId, branchName });\n }\n\n // Execution management\n cancelTask(taskId: string): void {\n // Find the execution for this task and cancel it\n for (const [executionId, execution] of this.taskManager['executionStates']) {\n if (execution.taskId === taskId && execution.status === 'running') {\n this.taskManager.cancelExecution(executionId);\n break;\n }\n }\n }\n\n getTaskExecutionStatus(taskId: string): string | null {\n // Find the execution for this task\n for (const execution of this.taskManager['executionStates'].values()) {\n if (execution.taskId === taskId) {\n return execution.status;\n }\n }\n return null;\n }\n\n private async prepareTaskBranch(taskSlug: string, isCloudMode: boolean): Promise<void> {\n const existingBranch = await this.gitManager.getTaskBranch(taskSlug);\n if (!existingBranch) {\n this.logger.info('Creating task branch', { taskSlug });\n const branchName = `posthog/task-${taskSlug}`;\n await this.gitManager.createOrSwitchToBranch(branchName);\n this.emitEvent(this.adapter.createStatusEvent('branch_created', { branch: branchName }));\n\n await this.fileManager.ensureGitignore();\n await this.gitManager.addAllPostHogFiles();\n if (isCloudMode) {\n await this.gitManager.commitAndPush(`Initialize task ${taskSlug}`, { allowEmpty: true });\n } else {\n await this.gitManager.commitChanges(`Initialize task ${taskSlug}`);\n }\n } else {\n this.logger.info('Switching to existing task branch', { branch: existingBranch });\n await this.gitManager.switchToBranch(existingBranch);\n }\n }\n\n private ensureOpenAIGatewayEnv(baseUrl?: string, token?: string): void {\n const resolvedBaseUrl = baseUrl || process.env.ANTHROPIC_BASE_URL;\n const resolvedToken = token || process.env.ANTHROPIC_AUTH_TOKEN;\n\n if (resolvedBaseUrl) {\n process.env.OPENAI_BASE_URL = resolvedBaseUrl;\n }\n\n if (resolvedToken) {\n process.env.OPENAI_API_KEY = resolvedToken;\n }\n\n if (!this.extractor) {\n this.extractor = new AISDKExtractor(this.logger.child('AISDKExtractor'));\n }\n }\n\n private async ensurePullRequest(task: Task, stepResults: Record<string, any>): Promise<void> {\n const latestRun = task.latest_run;\n const existingPr =\n latestRun?.output && typeof latestRun.output === 'object'\n ? (latestRun.output as any).pr_url\n : null;\n\n if (existingPr) {\n this.logger.info('PR already exists, skipping creation', { taskId: task.id, prUrl: existingPr });\n return;\n }\n\n const buildResult = stepResults['build'];\n if (!buildResult?.commitCreated) {\n this.logger.warn('Build step did not produce a commit; skipping PR creation', { taskId: task.id });\n return;\n }\n\n const branchName = await this.gitManager.getCurrentBranch();\n const prUrl = await this.createPullRequest(\n task.id,\n branchName,\n task.title,\n task.description ?? ''\n );\n\n this.emitEvent(this.adapter.createStatusEvent('pr_created', { prUrl }));\n\n try {\n await this.attachPullRequestToTask(task.id, prUrl, branchName);\n this.logger.info('PR attached to task successfully', { taskId: task.id, prUrl });\n } catch (error) {\n this.logger.warn('Could not attach PR to task', {\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }\n\n private emitEvent(event: any): void {\n if (this.debug && event.type !== 'token') {\n // Log all events except tokens (too verbose)\n this.logger.debug('Emitting event', { type: event.type, ts: event.ts });\n }\n const persistPromise = this.progressReporter.recordEvent(event);\n if (persistPromise && typeof persistPromise.then === 'function') {\n persistPromise.catch((error: Error) =>\n this.logger.debug('Failed to persist agent event', { message: error.message })\n );\n }\n this.onEvent?.(event);\n }\n}\n\nexport { PermissionMode } from './types.js';\nexport type { Task, SupportingFile, ExecutionResult, AgentConfig } from './types.js';\n"],"names":[],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- export declare const EXECUTION_SYSTEM_PROMPT = "<context>\n You have access to the local repository files for fast read/write operations.\n You also have access to GitHub via the GitHub MCP server for additional repository operations.\n Work with local files for your main implementation, and use GitHub MCP for any additional repository queries.\n Commit changes to the repository regularly.\n</context>\n\n<role>\n PostHog AI Coding Agent \u2014 autonomously transform a ticket into a merge-ready pull request that follows existing project conventions.\n</role>\n\n<tools>\n Local file system (for main implementation work)\n PostHog MCP server (for PostHog operations)\n</tools>\n\n<constraints>\n - Follow existing style and patterns you discover in the repo.\n - Try not to add new external dependencies, only if needed.\n - Implement structured logging and error handling; never log secrets.\n - Avoid destructive shell commands.\n - ALWAYS create appropriate .gitignore files to exclude build artifacts, dependencies, and temporary files.\n</constraints>\n\n<checklist>\n - Created or updated .gitignore file with appropriate exclusions\n - Created dependency files (requirements.txt, package.json, etc.) with exact versions\n - Added clear setup/installation instructions to README.md\n - Code compiles and tests pass.\n - Added or updated tests.\n - Captured meaningful events with PostHog SDK.\n - Wrapped new logic in an PostHog feature flag.\n - Updated docs, readme or type hints if needed.\n - Verified no build artifacts or dependencies are being committed\n</checklist>\n\n<workflow>\n- first make a plan and create a todo list\n- execute the todo list one by one\n- test the changes\n</workflow>\n\n<output_format>\n Once finished respond with a summary of changes made\n</output_format>\n\n<thinking>\n Use this area as a private scratch-pad for step-by-step reasoning; erase before final output.\n</thinking>\n\n<task>\n Complete the ticket in a thoughtful step by step manner. Plan thoroughly and make sure to add logging and error handling as well as cover edge cases.\n</task>";
1
+ export declare const EXECUTION_SYSTEM_PROMPT = "<context>\n You have access to the local repository files for fast read/write operations.\n You also have access to GitHub via the GitHub MCP server for additional repository operations.\n Work with local files for your main implementation, and use GitHub MCP for any additional repository queries.\n Commit changes to the repository regularly.\n</context>\n\n<role>\n PostHog AI Coding Agent \u2014 autonomously transform a ticket into a merge-ready pull request that follows existing project conventions.\n</role>\n\n<tools>\n Local file system (for main implementation work)\n PostHog MCP server (for PostHog operations)\n</tools>\n\n<constraints>\n - Follow existing style and patterns you discover in the repo.\n - Try not to add new external dependencies, only if needed.\n - Implement structured logging and error handling; never log secrets.\n - Avoid destructive shell commands.\n - ALWAYS create appropriate .gitignore files to exclude build artifacts, dependencies, and temporary files.\n</constraints>\n\n<checklist>\n - Created or updated .gitignore file with appropriate exclusions\n - Created dependency files (requirements.txt, package.json, etc.) with exact versions\n - Added clear setup/installation instructions to README.md\n - Code compiles and tests pass.\n - Added or updated tests.\n - Captured meaningful events with PostHog SDK.\n - Wrapped new logic in an PostHog feature flag.\n - Updated docs, readme or type hints if needed.\n - Verified no build artifacts or dependencies are being committed\n</checklist>\n\n<approach>\n- first make a plan and create a todo list\n- execute the todo list one by one\n- test the changes\n</approach>\n\n<output_format>\n Once finished respond with a summary of changes made\n</output_format>\n\n<thinking>\n Use this area as a private scratch-pad for step-by-step reasoning; erase before final output.\n</thinking>\n\n<task>\n Complete the ticket in a thoughtful step by step manner. Plan thoroughly and make sure to add logging and error handling as well as cover edge cases.\n</task>";
2
2
  //# sourceMappingURL=execution.d.ts.map
@@ -34,11 +34,11 @@ const EXECUTION_SYSTEM_PROMPT = `<context>
34
34
  - Verified no build artifacts or dependencies are being committed
35
35
  </checklist>
36
36
 
37
- <workflow>
37
+ <approach>
38
38
  - first make a plan and create a todo list
39
39
  - execute the todo list one by one
40
40
  - test the changes
41
- </workflow>
41
+ </approach>
42
42
 
43
43
  <output_format>
44
44
  Once finished respond with a summary of changes made
@@ -1 +1 @@
1
- {"version":3,"file":"execution.js","sources":["../../../src/agents/execution.ts"],"sourcesContent":["export const EXECUTION_SYSTEM_PROMPT = `<context>\n You have access to the local repository files for fast read/write operations.\n You also have access to GitHub via the GitHub MCP server for additional repository operations.\n Work with local files for your main implementation, and use GitHub MCP for any additional repository queries.\n Commit changes to the repository regularly.\n</context>\n\n<role>\n PostHog AI Coding Agent — autonomously transform a ticket into a merge-ready pull request that follows existing project conventions.\n</role>\n\n<tools>\n Local file system (for main implementation work)\n PostHog MCP server (for PostHog operations)\n</tools>\n\n<constraints>\n - Follow existing style and patterns you discover in the repo.\n - Try not to add new external dependencies, only if needed.\n - Implement structured logging and error handling; never log secrets.\n - Avoid destructive shell commands.\n - ALWAYS create appropriate .gitignore files to exclude build artifacts, dependencies, and temporary files.\n</constraints>\n\n<checklist>\n - Created or updated .gitignore file with appropriate exclusions\n - Created dependency files (requirements.txt, package.json, etc.) with exact versions\n - Added clear setup/installation instructions to README.md\n - Code compiles and tests pass.\n - Added or updated tests.\n - Captured meaningful events with PostHog SDK.\n - Wrapped new logic in an PostHog feature flag.\n - Updated docs, readme or type hints if needed.\n - Verified no build artifacts or dependencies are being committed\n</checklist>\n\n<workflow>\n- first make a plan and create a todo list\n- execute the todo list one by one\n- test the changes\n</workflow>\n\n<output_format>\n Once finished respond with a summary of changes made\n</output_format>\n\n<thinking>\n Use this area as a private scratch-pad for step-by-step reasoning; erase before final output.\n</thinking>\n\n<task>\n Complete the ticket in a thoughtful step by step manner. Plan thoroughly and make sure to add logging and error handling as well as cover edge cases.\n</task>`;"],"names":[],"mappings":"AAAO,MAAM,uBAAuB,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"execution.js","sources":["../../../src/agents/execution.ts"],"sourcesContent":["export const EXECUTION_SYSTEM_PROMPT = `<context>\n You have access to the local repository files for fast read/write operations.\n You also have access to GitHub via the GitHub MCP server for additional repository operations.\n Work with local files for your main implementation, and use GitHub MCP for any additional repository queries.\n Commit changes to the repository regularly.\n</context>\n\n<role>\n PostHog AI Coding Agent — autonomously transform a ticket into a merge-ready pull request that follows existing project conventions.\n</role>\n\n<tools>\n Local file system (for main implementation work)\n PostHog MCP server (for PostHog operations)\n</tools>\n\n<constraints>\n - Follow existing style and patterns you discover in the repo.\n - Try not to add new external dependencies, only if needed.\n - Implement structured logging and error handling; never log secrets.\n - Avoid destructive shell commands.\n - ALWAYS create appropriate .gitignore files to exclude build artifacts, dependencies, and temporary files.\n</constraints>\n\n<checklist>\n - Created or updated .gitignore file with appropriate exclusions\n - Created dependency files (requirements.txt, package.json, etc.) with exact versions\n - Added clear setup/installation instructions to README.md\n - Code compiles and tests pass.\n - Added or updated tests.\n - Captured meaningful events with PostHog SDK.\n - Wrapped new logic in an PostHog feature flag.\n - Updated docs, readme or type hints if needed.\n - Verified no build artifacts or dependencies are being committed\n</checklist>\n\n<approach>\n- first make a plan and create a todo list\n- execute the todo list one by one\n- test the changes\n</approach>\n\n<output_format>\n Once finished respond with a summary of changes made\n</output_format>\n\n<thinking>\n Use this area as a private scratch-pad for step-by-step reasoning; erase before final output.\n</thinking>\n\n<task>\n Complete the ticket in a thoughtful step by step manner. Plan thoroughly and make sure to add logging and error handling as well as cover edge cases.\n</task>`;"],"names":[],"mappings":"AAAO,MAAM,uBAAuB,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1,2 +1,2 @@
1
- export declare const PLANNING_SYSTEM_PROMPT = "# PostHog AI Coding Agent - Planning Mode\n\nYou are a PostHog AI Coding Agent operating in PLANNING mode.\n\n## Your Role\n\nYou are a specialized planning agent that analyzes codebases and creates detailed implementation plans for development tasks.\n\n## Important Constraints\n\n- **Read-Only Mode**: You can only read files, search code, and analyze the codebase\n- **No Modifications**: You cannot make any changes, edits, or execute commands\n- **Research Focus**: Your goal is understanding and planning, not implementation\n\n## Available Tools\n\n- File reading and exploration\n- Code search and analysis\n- Repository structure analysis\n- Documentation review\n\n## Planning Process\n\nWhen given a task, follow this systematic approach:\n\n1. **Codebase Analysis**\n - Explore the repository structure\n - Identify relevant files and components\n - Understand existing patterns and conventions\n - Review related code and dependencies\n\n2. **Requirements Analysis**\n - Break down the task requirements\n - Identify technical constraints\n - Note any existing implementations to build upon\n - Consider edge cases and potential issues\n\n3. **Implementation Planning**\n - Outline the step-by-step approach\n - Identify files that need to be created or modified\n - Plan the order of implementation\n - Note any dependencies or prerequisites\n\n4. **Documentation**\n - Create a clear, actionable plan\n - Include specific file paths and changes needed\n - Note any testing requirements\n - Highlight potential risks or considerations\n\n## Plan Output\n\nWhen you have completed your analysis, use the `exit_plan_mode` tool to present your plan. Your plan should include:\n\n- **Summary**: Brief overview of the implementation approach\n- **Files to Create/Modify**: Specific paths and purposes\n- **Implementation Steps**: Ordered list of actions to take\n- **Considerations**: Dependencies, risks, and important notes\n- **Testing Strategy**: How to verify the implementation works\n\n## Context Integration\n\nIf supporting files are provided, incorporate them into your analysis:\n- **Context files**: Additional requirements or constraints\n- **Reference files**: Examples or documentation to follow\n- **Previous plans**: Build upon or refine existing planning work\n\nYour planning should be thorough enough that another agent in execution mode can implement the changes successfully.";
1
+ export declare const PLANNING_SYSTEM_PROMPT = "# PostHog AI Coding Agent - Planning Mode\n\nYou are a PostHog AI Coding Agent operating in PLANNING mode.\n\n## Your Role\n\nYou are a specialized planning agent that analyzes codebases and creates detailed implementation plans for development tasks.\n\n## Important Constraints\n\n- **Read-Only Mode**: You can only read files, search code, and analyze the codebase\n- **No Modifications**: You cannot make any changes, edits, or execute commands\n- **Research Focus**: Your goal is understanding and planning, not implementation\n- **Response Format**: Respond only with the markdown content above, no other text or formatting, no acknowledgement, no explanation, no nothing.\n\n## Available Tools\n\n- File reading and exploration\n- Code search and analysis\n- Repository structure analysis\n- Documentation review\n\n## Planning Process\n\nWhen given a task, follow this systematic approach:\n\n1. **Codebase Analysis**\n - Explore the repository structure\n - Identify relevant files and components\n - Understand existing patterns and conventions\n - Review related code and dependencies\n\n2. **Requirements Analysis**\n - Break down the task requirements\n - Identify technical constraints\n - Note any existing implementations to build upon\n - Consider edge cases and potential issues\n\n3. **Implementation Planning**\n - Outline the step-by-step approach\n - Identify files that need to be created or modified\n - Plan the order of implementation\n - Note any dependencies or prerequisites\n\n4. **Documentation**\n - Create a clear, actionable plan\n - Include specific file paths and changes needed\n - Note any testing requirements\n - Highlight potential risks or considerations\n\n## Plan Output\n\n- **Summary**: Brief overview of the implementation approach\n- **Files to Create/Modify**: Specific paths and purposes\n- **Implementation Steps**: Ordered list of actions to take\n- **Considerations**: Dependencies, risks, and important notes\n- **Testing Strategy**: How to verify the implementation works\n\n## Context Integration\n\nIf supporting files are provided, incorporate them into your analysis:\n- **Context files**: Additional requirements or constraints\n- **Reference files**: Examples or documentation to follow\n- **Previous plans**: Build upon or refine existing planning work\n\nYour planning should be thorough enough that another agent in execution mode can implement the changes successfully.";
2
2
  //# sourceMappingURL=planning.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"planning.d.ts","sourceRoot":"","sources":["../../../src/agents/planning.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,sBAAsB,44EAkEkF,CAAC"}
1
+ {"version":3,"file":"planning.d.ts","sourceRoot":"","sources":["../../../src/agents/planning.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,sBAAsB,u6EAiEkF,CAAC"}
@@ -11,6 +11,7 @@ You are a specialized planning agent that analyzes codebases and creates detaile
11
11
  - **Read-Only Mode**: You can only read files, search code, and analyze the codebase
12
12
  - **No Modifications**: You cannot make any changes, edits, or execute commands
13
13
  - **Research Focus**: Your goal is understanding and planning, not implementation
14
+ - **Response Format**: Respond only with the markdown content above, no other text or formatting, no acknowledgement, no explanation, no nothing.
14
15
 
15
16
  ## Available Tools
16
17
 
@@ -49,8 +50,6 @@ When given a task, follow this systematic approach:
49
50
 
50
51
  ## Plan Output
51
52
 
52
- When you have completed your analysis, use the \`exit_plan_mode\` tool to present your plan. Your plan should include:
53
-
54
53
  - **Summary**: Brief overview of the implementation approach
55
54
  - **Files to Create/Modify**: Specific paths and purposes
56
55
  - **Implementation Steps**: Ordered list of actions to take
@@ -1 +1 @@
1
- {"version":3,"file":"planning.js","sources":["../../../src/agents/planning.ts"],"sourcesContent":["export const PLANNING_SYSTEM_PROMPT = `# PostHog AI Coding Agent - Planning Mode\n\nYou are a PostHog AI Coding Agent operating in PLANNING mode.\n\n## Your Role\n\nYou are a specialized planning agent that analyzes codebases and creates detailed implementation plans for development tasks.\n\n## Important Constraints\n\n- **Read-Only Mode**: You can only read files, search code, and analyze the codebase\n- **No Modifications**: You cannot make any changes, edits, or execute commands\n- **Research Focus**: Your goal is understanding and planning, not implementation\n\n## Available Tools\n\n- File reading and exploration\n- Code search and analysis\n- Repository structure analysis\n- Documentation review\n\n## Planning Process\n\nWhen given a task, follow this systematic approach:\n\n1. **Codebase Analysis**\n - Explore the repository structure\n - Identify relevant files and components\n - Understand existing patterns and conventions\n - Review related code and dependencies\n\n2. **Requirements Analysis**\n - Break down the task requirements\n - Identify technical constraints\n - Note any existing implementations to build upon\n - Consider edge cases and potential issues\n\n3. **Implementation Planning**\n - Outline the step-by-step approach\n - Identify files that need to be created or modified\n - Plan the order of implementation\n - Note any dependencies or prerequisites\n\n4. **Documentation**\n - Create a clear, actionable plan\n - Include specific file paths and changes needed\n - Note any testing requirements\n - Highlight potential risks or considerations\n\n## Plan Output\n\nWhen you have completed your analysis, use the \\`exit_plan_mode\\` tool to present your plan. Your plan should include:\n\n- **Summary**: Brief overview of the implementation approach\n- **Files to Create/Modify**: Specific paths and purposes\n- **Implementation Steps**: Ordered list of actions to take\n- **Considerations**: Dependencies, risks, and important notes\n- **Testing Strategy**: How to verify the implementation works\n\n## Context Integration\n\nIf supporting files are provided, incorporate them into your analysis:\n- **Context files**: Additional requirements or constraints\n- **Reference files**: Examples or documentation to follow\n- **Previous plans**: Build upon or refine existing planning work\n\nYour planning should be thorough enough that another agent in execution mode can implement the changes successfully.`;"],"names":[],"mappings":"AAAO,MAAM,sBAAsB,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"planning.js","sources":["../../../src/agents/planning.ts"],"sourcesContent":["export const PLANNING_SYSTEM_PROMPT = `# PostHog AI Coding Agent - Planning Mode\n\nYou are a PostHog AI Coding Agent operating in PLANNING mode.\n\n## Your Role\n\nYou are a specialized planning agent that analyzes codebases and creates detailed implementation plans for development tasks.\n\n## Important Constraints\n\n- **Read-Only Mode**: You can only read files, search code, and analyze the codebase\n- **No Modifications**: You cannot make any changes, edits, or execute commands\n- **Research Focus**: Your goal is understanding and planning, not implementation\n- **Response Format**: Respond only with the markdown content above, no other text or formatting, no acknowledgement, no explanation, no nothing.\n\n## Available Tools\n\n- File reading and exploration\n- Code search and analysis\n- Repository structure analysis\n- Documentation review\n\n## Planning Process\n\nWhen given a task, follow this systematic approach:\n\n1. **Codebase Analysis**\n - Explore the repository structure\n - Identify relevant files and components\n - Understand existing patterns and conventions\n - Review related code and dependencies\n\n2. **Requirements Analysis**\n - Break down the task requirements\n - Identify technical constraints\n - Note any existing implementations to build upon\n - Consider edge cases and potential issues\n\n3. **Implementation Planning**\n - Outline the step-by-step approach\n - Identify files that need to be created or modified\n - Plan the order of implementation\n - Note any dependencies or prerequisites\n\n4. **Documentation**\n - Create a clear, actionable plan\n - Include specific file paths and changes needed\n - Note any testing requirements\n - Highlight potential risks or considerations\n\n## Plan Output\n\n- **Summary**: Brief overview of the implementation approach\n- **Files to Create/Modify**: Specific paths and purposes\n- **Implementation Steps**: Ordered list of actions to take\n- **Considerations**: Dependencies, risks, and important notes\n- **Testing Strategy**: How to verify the implementation works\n\n## Context Integration\n\nIf supporting files are provided, incorporate them into your analysis:\n- **Context files**: Additional requirements or constraints\n- **Reference files**: Examples or documentation to follow\n- **Previous plans**: Build upon or refine existing planning work\n\nYour planning should be thorough enough that another agent in execution mode can implement the changes successfully.`;"],"names":[],"mappings":"AAAO,MAAM,sBAAsB,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1,2 +1,2 @@
1
- export declare const RESEARCH_SYSTEM_PROMPT = "# PostHog AI Coding Agent - Research Mode\n\nYou are a PostHog AI Coding Agent operating in RESEARCH mode.\n\n## Your Role\n\nYou are a research agent that explores codebases to understand implementation context and generate clarifying questions for development tasks.\n\n## Important Constraints\n\n- **Read-Only Mode**: You can only read files, search code, and analyze the codebase\n- **No Modifications**: You cannot make any changes or edits to code files\n- **Research Focus**: Your goal is understanding and asking the right questions\n\n## Available Tools\n\n- File reading and exploration\n- Code search and analysis\n- Repository structure analysis\n- Documentation review\n- `create_plan` tool for creating your research artifact\n\n## Research Process\n\nWhen given a task, follow this systematic approach:\n\n1. **Codebase Analysis**\n - Explore the repository structure\n - Identify relevant files and components\n - Understand existing patterns and conventions\n - Review related code and dependencies\n - Look for similar implementations or patterns\n\n2. **Decision Point Identification**\n - Identify areas where implementation decisions need to be made\n - Find multiple viable approaches in the codebase\n - Note where user preferences would affect the implementation\n - Consider architectural or design pattern choices\n\n3. **Question Generation**\n - Generate 3-5 clarifying questions\n - Each question should offer 2-3 concrete options based on codebase analysis\n - Options should reference actual patterns/approaches found in the code\n - Always include option c) as \"Something else (please specify)\" for flexibility\n - Focus on high-impact decisions that affect the implementation approach\n\n## Output Format\n\nAfter completing your research, you MUST use the `create_plan` tool to create a research.md artifact with your questions.\n\nThe artifact MUST follow this EXACT markdown format (this is critical for parsing):\n\n```markdown\n# Research Questions\n\nBased on my analysis of the codebase, here are the key questions to guide implementation:\n\n## Question 1: [Question text - be specific and clear]\n\n**Options:**\n- a) [Concrete option based on existing pattern - reference specific files/components]\n- b) [Alternative approach based on another pattern - reference specific files/components] \n- c) Something else (please specify)\n\n## Question 2: [Next question - be specific and clear]\n\n**Options:**\n- a) [Option with specific code references]\n- b) [Alternative with specific code references]\n- c) Something else (please specify)\n\n## Question 3: [Continue with 3-5 questions total]\n\n**Options:**\n- a) [Option]\n- b) [Alternative]\n- c) Something else (please specify)\n```\n\n## CRITICAL FORMAT REQUIREMENTS\n\n- Use EXACTLY \"## Question N:\" format for question headers (h2 level, not h3)\n- Each question MUST be followed by \"**Options:**\" on its own line\n- Each option MUST start with \"- a)\", \"- b)\", \"- c)\", etc.\n- Always include \"c) Something else (please specify)\" as the last option\n- Do NOT add extra sections between questions\n- Keep context and analysis BEFORE the questions section, not mixed in\n\n## Important Requirements\n\n- Generate 2-5 questions (no more, no less)\n- Make options specific and reference actual code/patterns you find\n- Each question must have at least 2 concrete options plus \"Something else\"\n- Focus on architectural and implementation approach decisions\n- Reference specific files, components, or patterns in your options\n- Make sure the questions help guide a clear implementation path\n\n## Final Step\n\nOnce you have completed your research and identified the questions, use the `create_plan` tool to create the research.md artifact with the markdown content above. Do NOT use any other tools after creating the artifact.\n\nYour research should be thorough enough that the questions help clarify the user's preferences and guide the planning phase effectively.";
1
+ export declare const RESEARCH_SYSTEM_PROMPT = "# PostHog AI Coding Agent - Research Mode\n\nYou are a PostHog AI Coding Agent operating in RESEARCH mode.\n\n## Your Role\n\nYou are a research agent that explores codebases to understand implementation context and generate clarifying questions for development tasks.\n\n## Important Constraints\n\n- **Read-Only Mode**: You can only read files, search code, and analyze the codebase\n- **No Modifications**: You cannot make any changes or edits to code files\n- **Research Focus**: Your goal is understanding and asking the right questions\n\n## Available Tools\n\n- File reading and exploration\n- Code search and analysis\n- Repository structure analysis\n- Documentation review\n\n## Research Process\n\nWhen given a task, follow this systematic approach:\n\n1. **Codebase Analysis**\n - Explore the repository structure\n - Identify relevant files and components\n - Understand existing patterns and conventions\n - Review related code and dependencies\n - Look for similar implementations or patterns\n\n2. **Decision Point Identification**\n - Identify areas where implementation decisions need to be made\n - Find multiple viable approaches in the codebase\n - Note where user preferences would affect the implementation\n - Consider architectural or design pattern choices\n\n3. **Question Generation**\n - Generate 3-5 clarifying questions\n - Each question should offer 2-3 concrete options based on codebase analysis\n - Options should reference actual patterns/approaches found in the code\n - Always include option c) as \"Something else (please specify)\" for flexibility\n - Focus on high-impact decisions that affect the implementation approach\n\n## Output Format\n\nThe artifact MUST follow this EXACT markdown format (this is critical for parsing):\n\n```markdown\n# Research Questions\n\nBased on my analysis of the codebase, here are the key questions to guide implementation:\n\n## Question 1: [Question text - be specific and clear]\n\n**Options:**\n- a) [Concrete option based on existing pattern - reference specific files/components]\n- b) [Alternative approach based on another pattern - reference specific files/components] \n- c) Something else (please specify)\n\n## Question 2: [Next question - be specific and clear]\n\n**Options:**\n- a) [Option with specific code references]\n- b) [Alternative with specific code references]\n- c) Something else (please specify)\n\n## Question 3: [Continue with 3-5 questions total]\n\n**Options:**\n- a) [Option]\n- b) [Alternative]\n- c) Something else (please specify)\n```\n\n## CRITICAL FORMAT REQUIREMENTS\n\n- Use EXACTLY \"## Question N:\" format for question headers (h2 level, not h3)\n- Each question MUST be followed by \"**Options:**\" on its own line\n- Each option MUST start with \"- a)\", \"- b)\", \"- c)\", etc.\n- Always include \"c) Something else (please specify)\" as the last option\n- Do NOT add extra sections between questions\n- Keep context and analysis BEFORE the questions section, not mixed in\n\n## Important Requirements\n\n- DO NOT GENERATE ANY QUESTIONS IF YOU DON'T HAVE ANY (instead say \"No questions required\")\n- Generate up to 5 questions (no more)\n- Make options specific and reference actual code/patterns you find\n- Each question must have at least 2 concrete options plus \"Something else\"\n- Focus on architectural and implementation approach decisions\n- Reference specific files, components, or patterns in your options\n- Make sure the questions help guide a clear implementation path\n- Respond only with the markdown content above, no other text or formatting, no acknowledgement, no explanation, no nothing.\n\n## Final Step\n\nYour research should be thorough enough that the questions help clarify the user's preferences and guide the planning phase effectively.";
2
2
  //# sourceMappingURL=research.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"research.d.ts","sourceRoot":"","sources":["../../../src/agents/research.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,sBAAsB,+6HAqGsG,CAAC"}
1
+ {"version":3,"file":"research.d.ts","sourceRoot":"","sources":["../../../src/agents/research.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,sBAAsB,kvHAkGsG,CAAC"}
@@ -18,7 +18,6 @@ You are a research agent that explores codebases to understand implementation co
18
18
  - Code search and analysis
19
19
  - Repository structure analysis
20
20
  - Documentation review
21
- - \`create_plan\` tool for creating your research artifact
22
21
 
23
22
  ## Research Process
24
23
 
@@ -46,8 +45,6 @@ When given a task, follow this systematic approach:
46
45
 
47
46
  ## Output Format
48
47
 
49
- After completing your research, you MUST use the \`create_plan\` tool to create a research.md artifact with your questions.
50
-
51
48
  The artifact MUST follow this EXACT markdown format (this is critical for parsing):
52
49
 
53
50
  \`\`\`markdown
@@ -88,17 +85,17 @@ Based on my analysis of the codebase, here are the key questions to guide implem
88
85
 
89
86
  ## Important Requirements
90
87
 
91
- - Generate 2-5 questions (no more, no less)
88
+ - DO NOT GENERATE ANY QUESTIONS IF YOU DON'T HAVE ANY (instead say "No questions required")
89
+ - Generate up to 5 questions (no more)
92
90
  - Make options specific and reference actual code/patterns you find
93
91
  - Each question must have at least 2 concrete options plus "Something else"
94
92
  - Focus on architectural and implementation approach decisions
95
93
  - Reference specific files, components, or patterns in your options
96
94
  - Make sure the questions help guide a clear implementation path
95
+ - Respond only with the markdown content above, no other text or formatting, no acknowledgement, no explanation, no nothing.
97
96
 
98
97
  ## Final Step
99
98
 
100
- Once you have completed your research and identified the questions, use the \`create_plan\` tool to create the research.md artifact with the markdown content above. Do NOT use any other tools after creating the artifact.
101
-
102
99
  Your research should be thorough enough that the questions help clarify the user's preferences and guide the planning phase effectively.`;
103
100
 
104
101
  export { RESEARCH_SYSTEM_PROMPT };
@@ -1 +1 @@
1
- {"version":3,"file":"research.js","sources":["../../../src/agents/research.ts"],"sourcesContent":["export const RESEARCH_SYSTEM_PROMPT = `# PostHog AI Coding Agent - Research Mode\n\nYou are a PostHog AI Coding Agent operating in RESEARCH mode.\n\n## Your Role\n\nYou are a research agent that explores codebases to understand implementation context and generate clarifying questions for development tasks.\n\n## Important Constraints\n\n- **Read-Only Mode**: You can only read files, search code, and analyze the codebase\n- **No Modifications**: You cannot make any changes or edits to code files\n- **Research Focus**: Your goal is understanding and asking the right questions\n\n## Available Tools\n\n- File reading and exploration\n- Code search and analysis\n- Repository structure analysis\n- Documentation review\n- \\`create_plan\\` tool for creating your research artifact\n\n## Research Process\n\nWhen given a task, follow this systematic approach:\n\n1. **Codebase Analysis**\n - Explore the repository structure\n - Identify relevant files and components\n - Understand existing patterns and conventions\n - Review related code and dependencies\n - Look for similar implementations or patterns\n\n2. **Decision Point Identification**\n - Identify areas where implementation decisions need to be made\n - Find multiple viable approaches in the codebase\n - Note where user preferences would affect the implementation\n - Consider architectural or design pattern choices\n\n3. **Question Generation**\n - Generate 3-5 clarifying questions\n - Each question should offer 2-3 concrete options based on codebase analysis\n - Options should reference actual patterns/approaches found in the code\n - Always include option c) as \"Something else (please specify)\" for flexibility\n - Focus on high-impact decisions that affect the implementation approach\n\n## Output Format\n\nAfter completing your research, you MUST use the \\`create_plan\\` tool to create a research.md artifact with your questions.\n\nThe artifact MUST follow this EXACT markdown format (this is critical for parsing):\n\n\\`\\`\\`markdown\n# Research Questions\n\nBased on my analysis of the codebase, here are the key questions to guide implementation:\n\n## Question 1: [Question text - be specific and clear]\n\n**Options:**\n- a) [Concrete option based on existing pattern - reference specific files/components]\n- b) [Alternative approach based on another pattern - reference specific files/components] \n- c) Something else (please specify)\n\n## Question 2: [Next question - be specific and clear]\n\n**Options:**\n- a) [Option with specific code references]\n- b) [Alternative with specific code references]\n- c) Something else (please specify)\n\n## Question 3: [Continue with 3-5 questions total]\n\n**Options:**\n- a) [Option]\n- b) [Alternative]\n- c) Something else (please specify)\n\\`\\`\\`\n\n## CRITICAL FORMAT REQUIREMENTS\n\n- Use EXACTLY \"## Question N:\" format for question headers (h2 level, not h3)\n- Each question MUST be followed by \"**Options:**\" on its own line\n- Each option MUST start with \"- a)\", \"- b)\", \"- c)\", etc.\n- Always include \"c) Something else (please specify)\" as the last option\n- Do NOT add extra sections between questions\n- Keep context and analysis BEFORE the questions section, not mixed in\n\n## Important Requirements\n\n- Generate 2-5 questions (no more, no less)\n- Make options specific and reference actual code/patterns you find\n- Each question must have at least 2 concrete options plus \"Something else\"\n- Focus on architectural and implementation approach decisions\n- Reference specific files, components, or patterns in your options\n- Make sure the questions help guide a clear implementation path\n\n## Final Step\n\nOnce you have completed your research and identified the questions, use the \\`create_plan\\` tool to create the research.md artifact with the markdown content above. Do NOT use any other tools after creating the artifact.\n\nYour research should be thorough enough that the questions help clarify the user's preferences and guide the planning phase effectively.`;\n\n"],"names":[],"mappings":"AAAO,MAAM,sBAAsB,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"research.js","sources":["../../../src/agents/research.ts"],"sourcesContent":["export const RESEARCH_SYSTEM_PROMPT = `# PostHog AI Coding Agent - Research Mode\n\nYou are a PostHog AI Coding Agent operating in RESEARCH mode.\n\n## Your Role\n\nYou are a research agent that explores codebases to understand implementation context and generate clarifying questions for development tasks.\n\n## Important Constraints\n\n- **Read-Only Mode**: You can only read files, search code, and analyze the codebase\n- **No Modifications**: You cannot make any changes or edits to code files\n- **Research Focus**: Your goal is understanding and asking the right questions\n\n## Available Tools\n\n- File reading and exploration\n- Code search and analysis\n- Repository structure analysis\n- Documentation review\n\n## Research Process\n\nWhen given a task, follow this systematic approach:\n\n1. **Codebase Analysis**\n - Explore the repository structure\n - Identify relevant files and components\n - Understand existing patterns and conventions\n - Review related code and dependencies\n - Look for similar implementations or patterns\n\n2. **Decision Point Identification**\n - Identify areas where implementation decisions need to be made\n - Find multiple viable approaches in the codebase\n - Note where user preferences would affect the implementation\n - Consider architectural or design pattern choices\n\n3. **Question Generation**\n - Generate 3-5 clarifying questions\n - Each question should offer 2-3 concrete options based on codebase analysis\n - Options should reference actual patterns/approaches found in the code\n - Always include option c) as \"Something else (please specify)\" for flexibility\n - Focus on high-impact decisions that affect the implementation approach\n\n## Output Format\n\nThe artifact MUST follow this EXACT markdown format (this is critical for parsing):\n\n\\`\\`\\`markdown\n# Research Questions\n\nBased on my analysis of the codebase, here are the key questions to guide implementation:\n\n## Question 1: [Question text - be specific and clear]\n\n**Options:**\n- a) [Concrete option based on existing pattern - reference specific files/components]\n- b) [Alternative approach based on another pattern - reference specific files/components] \n- c) Something else (please specify)\n\n## Question 2: [Next question - be specific and clear]\n\n**Options:**\n- a) [Option with specific code references]\n- b) [Alternative with specific code references]\n- c) Something else (please specify)\n\n## Question 3: [Continue with 3-5 questions total]\n\n**Options:**\n- a) [Option]\n- b) [Alternative]\n- c) Something else (please specify)\n\\`\\`\\`\n\n## CRITICAL FORMAT REQUIREMENTS\n\n- Use EXACTLY \"## Question N:\" format for question headers (h2 level, not h3)\n- Each question MUST be followed by \"**Options:**\" on its own line\n- Each option MUST start with \"- a)\", \"- b)\", \"- c)\", etc.\n- Always include \"c) Something else (please specify)\" as the last option\n- Do NOT add extra sections between questions\n- Keep context and analysis BEFORE the questions section, not mixed in\n\n## Important Requirements\n\n- DO NOT GENERATE ANY QUESTIONS IF YOU DON'T HAVE ANY (instead say \"No questions required\")\n- Generate up to 5 questions (no more)\n- Make options specific and reference actual code/patterns you find\n- Each question must have at least 2 concrete options plus \"Something else\"\n- Focus on architectural and implementation approach decisions\n- Reference specific files, components, or patterns in your options\n- Make sure the questions help guide a clear implementation path\n- Respond only with the markdown content above, no other text or formatting, no acknowledgement, no explanation, no nothing.\n\n## Final Step\n\nYour research should be thorough enough that the questions help clarify the user's preferences and guide the planning phase effectively.`;\n\n"],"names":[],"mappings":"AAAO,MAAM,sBAAsB,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -134,7 +134,7 @@ class GitManager {
134
134
  const forceFlag = force ? '--force' : '';
135
135
  await this.runGitCommand(`push ${forceFlag} -u origin ${branchName}`);
136
136
  }
137
- // Utility methods for PostHog task workflow
137
+ // Utility methods for PostHog task execution
138
138
  async createTaskPlanningBranch(taskId, baseBranch) {
139
139
  let branchName = `posthog/task-${taskId}-planning`;
140
140
  let counter = 1;
@@ -1 +1 @@
1
- {"version":3,"file":"git-manager.js","sources":["../../src/git-manager.ts"],"sourcesContent":["import { exec } from 'child_process';\nimport { promisify } from 'util';\nimport { Logger } from './utils/logger.js';\n\nconst execAsync = promisify(exec);\n\nexport interface GitConfig {\n repositoryPath: string;\n authorName?: string;\n authorEmail?: string;\n logger?: Logger;\n}\n\nexport interface BranchInfo {\n name: string;\n exists: boolean;\n isCurrentBranch: boolean;\n}\n\nexport class GitManager {\n private repositoryPath: string;\n private authorName?: string;\n private authorEmail?: string;\n private logger: Logger;\n\n constructor(config: GitConfig) {\n this.repositoryPath = config.repositoryPath;\n this.authorName = config.authorName;\n this.authorEmail = config.authorEmail;\n this.logger = config.logger || new Logger({ debug: false, prefix: '[GitManager]' });\n }\n\n private async runGitCommand(command: string): Promise<string> {\n try {\n const { stdout } = await execAsync(`cd \"${this.repositoryPath}\" && git ${command}`);\n return stdout.trim();\n } catch (error) {\n throw new Error(`Git command failed: ${command}\\n${error}`);\n }\n }\n\n private async runCommand(command: string): Promise<string> {\n try {\n const { stdout } = await execAsync(`cd \"${this.repositoryPath}\" && ${command}`);\n return stdout.trim();\n } catch (error) {\n throw new Error(`Command failed: ${command}\\n${error}`);\n }\n }\n\n async isGitRepository(): Promise<boolean> {\n try {\n await this.runGitCommand('rev-parse --git-dir');\n return true;\n } catch {\n return false;\n }\n }\n\n async getCurrentBranch(): Promise<string> {\n return await this.runGitCommand('branch --show-current');\n }\n\n async getDefaultBranch(): Promise<string> {\n try {\n // Try to get the default branch from remote\n const remoteBranch = await this.runGitCommand('symbolic-ref refs/remotes/origin/HEAD');\n return remoteBranch.replace('refs/remotes/origin/', '');\n } catch {\n // Fallback: check if main exists, otherwise use master\n if (await this.branchExists('main')) {\n return 'main';\n } else if (await this.branchExists('master')) {\n return 'master';\n } else {\n throw new Error('Cannot determine default branch. No main or master branch found.');\n }\n }\n }\n\n async branchExists(branchName: string): Promise<boolean> {\n try {\n await this.runGitCommand(`rev-parse --verify ${branchName}`);\n return true;\n } catch {\n return false;\n }\n }\n\n async createBranch(branchName: string, baseBranch?: string): Promise<void> {\n const base = baseBranch || await this.getCurrentBranch();\n await this.runGitCommand(`checkout -b ${branchName} ${base}`);\n }\n\n async switchToBranch(branchName: string): Promise<void> {\n await this.runGitCommand(`checkout ${branchName}`);\n }\n\n async createOrSwitchToBranch(branchName: string, baseBranch?: string): Promise<void> {\n const exists = await this.branchExists(branchName);\n if (exists) {\n await this.switchToBranch(branchName);\n } else {\n await this.createBranch(branchName, baseBranch);\n }\n }\n\n async addFiles(paths: string[]): Promise<void> {\n const pathList = paths.map(p => `\"${p}\"`).join(' ');\n await this.runGitCommand(`add ${pathList}`);\n }\n\n async addAllPostHogFiles(): Promise<void> {\n await this.runGitCommand('add .posthog/');\n }\n\n async commitChanges(message: string, options?: {\n authorName?: string;\n authorEmail?: string;\n }): Promise<string> {\n let command = 'commit -m \"' + message.replace(/\"/g, '\\\\\"') + '\"';\n\n const authorName = options?.authorName || this.authorName;\n const authorEmail = options?.authorEmail || this.authorEmail;\n\n if (authorName && authorEmail) {\n command += ` --author=\"${authorName} <${authorEmail}>\"`;\n }\n\n return await this.runGitCommand(command);\n }\n\n async hasChanges(): Promise<boolean> {\n try {\n const status = await this.runGitCommand('status --porcelain');\n return status.length > 0;\n } catch {\n return false;\n }\n }\n\n async hasStagedChanges(): Promise<boolean> {\n try {\n const status = await this.runGitCommand('diff --cached --name-only');\n return status.length > 0;\n } catch {\n return false;\n }\n }\n\n async getRemoteUrl(): Promise<string | null> {\n try {\n return await this.runGitCommand('remote get-url origin');\n } catch {\n return null;\n }\n }\n\n async pushBranch(branchName: string, force: boolean = false): Promise<void> {\n const forceFlag = force ? '--force' : '';\n await this.runGitCommand(`push ${forceFlag} -u origin ${branchName}`);\n }\n\n // Utility methods for PostHog task workflow\n async createTaskPlanningBranch(taskId: string, baseBranch?: string): Promise<string> {\n let branchName = `posthog/task-${taskId}-planning`;\n let counter = 1;\n\n // Find a unique branch name if the base name already exists\n while (await this.branchExists(branchName)) {\n branchName = `posthog/task-${taskId}-planning-${counter}`;\n counter++;\n }\n\n this.logger.debug('Creating unique planning branch', { branchName, taskId });\n\n // If no base branch specified, ensure we're on main/master\n if (!baseBranch) {\n baseBranch = await this.getDefaultBranch();\n await this.switchToBranch(baseBranch);\n\n // Check for uncommitted changes\n if (await this.hasChanges()) {\n throw new Error(`Uncommitted changes detected. Please commit or stash changes before running tasks.`);\n }\n }\n\n await this.createBranch(branchName, baseBranch); // Use createBranch instead of createOrSwitchToBranch for new branches\n return branchName;\n }\n\n async createTaskImplementationBranch(taskId: string, planningBranchName?: string): Promise<string> {\n let branchName = `posthog/task-${taskId}-implementation`;\n let counter = 1;\n\n // Find a unique branch name if the base name already exists\n while (await this.branchExists(branchName)) {\n branchName = `posthog/task-${taskId}-implementation-${counter}`;\n counter++;\n }\n\n const currentBranchBefore = await this.getCurrentBranch();\n this.logger.debug('Creating unique implementation branch', {\n branchName,\n taskId,\n currentBranch: currentBranchBefore\n });\n\n // Implementation branch should branch from the specific planning branch\n let baseBranch = planningBranchName;\n\n if (!baseBranch) {\n // Try to find the corresponding planning branch\n const currentBranch = await this.getCurrentBranch();\n if (currentBranch.includes('-planning')) {\n baseBranch = currentBranch; // Use current planning branch\n this.logger.debug('Using current planning branch', { baseBranch });\n } else {\n // Fallback to default branch\n baseBranch = await this.getDefaultBranch();\n this.logger.debug('No planning branch found, using default', { baseBranch });\n await this.switchToBranch(baseBranch);\n }\n }\n\n this.logger.debug('Creating implementation branch from base', { baseBranch, branchName });\n await this.createBranch(branchName, baseBranch); // Create fresh branch from base\n\n const currentBranchAfter = await this.getCurrentBranch();\n this.logger.info('Implementation branch created', {\n branchName,\n currentBranch: currentBranchAfter\n });\n\n return branchName;\n }\n\n async commitPlan(taskId: string, taskTitle: string): Promise<string> {\n const currentBranch = await this.getCurrentBranch();\n this.logger.debug('Committing plan', { taskId, currentBranch });\n\n await this.addAllPostHogFiles();\n\n const hasChanges = await this.hasStagedChanges();\n this.logger.debug('Checking for staged changes', { hasChanges });\n\n if (!hasChanges) {\n this.logger.info('No plan changes to commit', { taskId });\n return 'No changes to commit';\n }\n\n const message = `📋 Add plan for task: ${taskTitle}\n\nTask ID: ${taskId}\nGenerated by PostHog Agent\n\nThis commit contains the implementation plan and supporting documentation\nfor the task. Review the plan before proceeding with implementation.`;\n\n const result = await this.commitChanges(message);\n this.logger.info('Plan committed', { taskId, taskTitle });\n return result;\n }\n\n async commitImplementation(taskId: string, taskTitle: string, planSummary?: string): Promise<string> {\n await this.runGitCommand('add .');\n\n const hasChanges = await this.hasStagedChanges();\n if (!hasChanges) {\n this.logger.warn('No implementation changes to commit', { taskId });\n return 'No changes to commit';\n }\n\n let message = `✨ Implement task: ${taskTitle}\n\nTask ID: ${taskId}\nGenerated by PostHog Agent`;\n\n if (planSummary) {\n message += `\\n\\nPlan Summary:\\n${planSummary}`;\n }\n\n message += `\\n\\nThis commit implements the changes described in the task plan.`;\n\n const result = await this.commitChanges(message);\n this.logger.info('Implementation committed', { taskId, taskTitle });\n return result;\n }\n\n async deleteBranch(branchName: string, force: boolean = false): Promise<void> {\n const forceFlag = force ? '-D' : '-d';\n await this.runGitCommand(`branch ${forceFlag} ${branchName}`);\n }\n\n async deleteRemoteBranch(branchName: string): Promise<void> {\n await this.runGitCommand(`push origin --delete ${branchName}`);\n }\n\n async getBranchInfo(branchName: string): Promise<BranchInfo> {\n const exists = await this.branchExists(branchName);\n const currentBranch = await this.getCurrentBranch();\n\n return {\n name: branchName,\n exists,\n isCurrentBranch: branchName === currentBranch\n };\n }\n\n async getCommitSha(ref: string = 'HEAD'): Promise<string> {\n return await this.runGitCommand(`rev-parse ${ref}`);\n }\n\n async getCommitMessage(ref: string = 'HEAD'): Promise<string> {\n return await this.runGitCommand(`log -1 --pretty=%B ${ref}`);\n }\n\n async createPullRequest(\n branchName: string,\n title: string,\n body: string,\n baseBranch?: string\n ): Promise<string> {\n const currentBranch = await this.getCurrentBranch();\n if (currentBranch !== branchName) {\n await this.switchToBranch(branchName);\n }\n\n await this.pushBranch(branchName);\n\n let command = `gh pr create --title \"${title.replace(/\"/g, '\\\\\"')}\" --body \"${body.replace(/\"/g, '\\\\\"')}\"`;\n\n if (baseBranch) {\n command += ` --base ${baseBranch}`;\n }\n\n try {\n const prUrl = await this.runCommand(command);\n return prUrl.trim();\n } catch (error) {\n throw new Error(`Failed to create PR: ${error}`);\n }\n }\n\n async getTaskBranch(taskSlug: string): Promise<string | null> {\n try {\n // Get all branches matching the task slug pattern\n const branches = await this.runGitCommand('branch --list --all');\n const branchPattern = `posthog/task-${taskSlug}`;\n \n // Look for exact match or with counter suffix\n const lines = branches.split('\\n').map(l => l.trim().replace(/^\\*\\s+/, ''));\n for (const line of lines) {\n const cleanBranch = line.replace('remotes/origin/', '');\n if (cleanBranch.startsWith(branchPattern)) {\n return cleanBranch;\n }\n }\n \n return null;\n } catch (error) {\n this.logger.debug('Failed to get task branch', { taskSlug, error });\n return null;\n }\n }\n\n async commitAndPush(message: string, options?: { allowEmpty?: boolean }): Promise<void> {\n const hasChanges = await this.hasStagedChanges();\n \n if (!hasChanges && !options?.allowEmpty) {\n this.logger.debug('No changes to commit, skipping');\n return;\n }\n\n let command = `commit -m \"${message.replace(/\"/g, '\\\\\"')}\"`;\n \n if (options?.allowEmpty) {\n command += ' --allow-empty';\n }\n\n const authorName = this.authorName;\n const authorEmail = this.authorEmail;\n\n if (authorName && authorEmail) {\n command += ` --author=\"${authorName} <${authorEmail}>\"`;\n }\n\n await this.runGitCommand(command);\n \n // Push to origin\n const currentBranch = await this.getCurrentBranch();\n await this.pushBranch(currentBranch);\n \n this.logger.info('Committed and pushed changes', { branch: currentBranch, message });\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"git-manager.js","sources":["../../src/git-manager.ts"],"sourcesContent":["import { exec } from 'child_process';\nimport { promisify } from 'util';\nimport { Logger } from './utils/logger.js';\n\nconst execAsync = promisify(exec);\n\nexport interface GitConfig {\n repositoryPath: string;\n authorName?: string;\n authorEmail?: string;\n logger?: Logger;\n}\n\nexport interface BranchInfo {\n name: string;\n exists: boolean;\n isCurrentBranch: boolean;\n}\n\nexport class GitManager {\n private repositoryPath: string;\n private authorName?: string;\n private authorEmail?: string;\n private logger: Logger;\n\n constructor(config: GitConfig) {\n this.repositoryPath = config.repositoryPath;\n this.authorName = config.authorName;\n this.authorEmail = config.authorEmail;\n this.logger = config.logger || new Logger({ debug: false, prefix: '[GitManager]' });\n }\n\n private async runGitCommand(command: string): Promise<string> {\n try {\n const { stdout } = await execAsync(`cd \"${this.repositoryPath}\" && git ${command}`);\n return stdout.trim();\n } catch (error) {\n throw new Error(`Git command failed: ${command}\\n${error}`);\n }\n }\n\n private async runCommand(command: string): Promise<string> {\n try {\n const { stdout } = await execAsync(`cd \"${this.repositoryPath}\" && ${command}`);\n return stdout.trim();\n } catch (error) {\n throw new Error(`Command failed: ${command}\\n${error}`);\n }\n }\n\n async isGitRepository(): Promise<boolean> {\n try {\n await this.runGitCommand('rev-parse --git-dir');\n return true;\n } catch {\n return false;\n }\n }\n\n async getCurrentBranch(): Promise<string> {\n return await this.runGitCommand('branch --show-current');\n }\n\n async getDefaultBranch(): Promise<string> {\n try {\n // Try to get the default branch from remote\n const remoteBranch = await this.runGitCommand('symbolic-ref refs/remotes/origin/HEAD');\n return remoteBranch.replace('refs/remotes/origin/', '');\n } catch {\n // Fallback: check if main exists, otherwise use master\n if (await this.branchExists('main')) {\n return 'main';\n } else if (await this.branchExists('master')) {\n return 'master';\n } else {\n throw new Error('Cannot determine default branch. No main or master branch found.');\n }\n }\n }\n\n async branchExists(branchName: string): Promise<boolean> {\n try {\n await this.runGitCommand(`rev-parse --verify ${branchName}`);\n return true;\n } catch {\n return false;\n }\n }\n\n async createBranch(branchName: string, baseBranch?: string): Promise<void> {\n const base = baseBranch || await this.getCurrentBranch();\n await this.runGitCommand(`checkout -b ${branchName} ${base}`);\n }\n\n async switchToBranch(branchName: string): Promise<void> {\n await this.runGitCommand(`checkout ${branchName}`);\n }\n\n async createOrSwitchToBranch(branchName: string, baseBranch?: string): Promise<void> {\n const exists = await this.branchExists(branchName);\n if (exists) {\n await this.switchToBranch(branchName);\n } else {\n await this.createBranch(branchName, baseBranch);\n }\n }\n\n async addFiles(paths: string[]): Promise<void> {\n const pathList = paths.map(p => `\"${p}\"`).join(' ');\n await this.runGitCommand(`add ${pathList}`);\n }\n\n async addAllPostHogFiles(): Promise<void> {\n await this.runGitCommand('add .posthog/');\n }\n\n async commitChanges(message: string, options?: {\n authorName?: string;\n authorEmail?: string;\n }): Promise<string> {\n let command = 'commit -m \"' + message.replace(/\"/g, '\\\\\"') + '\"';\n\n const authorName = options?.authorName || this.authorName;\n const authorEmail = options?.authorEmail || this.authorEmail;\n\n if (authorName && authorEmail) {\n command += ` --author=\"${authorName} <${authorEmail}>\"`;\n }\n\n return await this.runGitCommand(command);\n }\n\n async hasChanges(): Promise<boolean> {\n try {\n const status = await this.runGitCommand('status --porcelain');\n return status.length > 0;\n } catch {\n return false;\n }\n }\n\n async hasStagedChanges(): Promise<boolean> {\n try {\n const status = await this.runGitCommand('diff --cached --name-only');\n return status.length > 0;\n } catch {\n return false;\n }\n }\n\n async getRemoteUrl(): Promise<string | null> {\n try {\n return await this.runGitCommand('remote get-url origin');\n } catch {\n return null;\n }\n }\n\n async pushBranch(branchName: string, force: boolean = false): Promise<void> {\n const forceFlag = force ? '--force' : '';\n await this.runGitCommand(`push ${forceFlag} -u origin ${branchName}`);\n }\n\n // Utility methods for PostHog task execution\n async createTaskPlanningBranch(taskId: string, baseBranch?: string): Promise<string> {\n let branchName = `posthog/task-${taskId}-planning`;\n let counter = 1;\n\n // Find a unique branch name if the base name already exists\n while (await this.branchExists(branchName)) {\n branchName = `posthog/task-${taskId}-planning-${counter}`;\n counter++;\n }\n\n this.logger.debug('Creating unique planning branch', { branchName, taskId });\n\n // If no base branch specified, ensure we're on main/master\n if (!baseBranch) {\n baseBranch = await this.getDefaultBranch();\n await this.switchToBranch(baseBranch);\n\n // Check for uncommitted changes\n if (await this.hasChanges()) {\n throw new Error(`Uncommitted changes detected. Please commit or stash changes before running tasks.`);\n }\n }\n\n await this.createBranch(branchName, baseBranch); // Use createBranch instead of createOrSwitchToBranch for new branches\n return branchName;\n }\n\n async createTaskImplementationBranch(taskId: string, planningBranchName?: string): Promise<string> {\n let branchName = `posthog/task-${taskId}-implementation`;\n let counter = 1;\n\n // Find a unique branch name if the base name already exists\n while (await this.branchExists(branchName)) {\n branchName = `posthog/task-${taskId}-implementation-${counter}`;\n counter++;\n }\n\n const currentBranchBefore = await this.getCurrentBranch();\n this.logger.debug('Creating unique implementation branch', {\n branchName,\n taskId,\n currentBranch: currentBranchBefore\n });\n\n // Implementation branch should branch from the specific planning branch\n let baseBranch = planningBranchName;\n\n if (!baseBranch) {\n // Try to find the corresponding planning branch\n const currentBranch = await this.getCurrentBranch();\n if (currentBranch.includes('-planning')) {\n baseBranch = currentBranch; // Use current planning branch\n this.logger.debug('Using current planning branch', { baseBranch });\n } else {\n // Fallback to default branch\n baseBranch = await this.getDefaultBranch();\n this.logger.debug('No planning branch found, using default', { baseBranch });\n await this.switchToBranch(baseBranch);\n }\n }\n\n this.logger.debug('Creating implementation branch from base', { baseBranch, branchName });\n await this.createBranch(branchName, baseBranch); // Create fresh branch from base\n\n const currentBranchAfter = await this.getCurrentBranch();\n this.logger.info('Implementation branch created', {\n branchName,\n currentBranch: currentBranchAfter\n });\n\n return branchName;\n }\n\n async commitPlan(taskId: string, taskTitle: string): Promise<string> {\n const currentBranch = await this.getCurrentBranch();\n this.logger.debug('Committing plan', { taskId, currentBranch });\n\n await this.addAllPostHogFiles();\n\n const hasChanges = await this.hasStagedChanges();\n this.logger.debug('Checking for staged changes', { hasChanges });\n\n if (!hasChanges) {\n this.logger.info('No plan changes to commit', { taskId });\n return 'No changes to commit';\n }\n\n const message = `📋 Add plan for task: ${taskTitle}\n\nTask ID: ${taskId}\nGenerated by PostHog Agent\n\nThis commit contains the implementation plan and supporting documentation\nfor the task. Review the plan before proceeding with implementation.`;\n\n const result = await this.commitChanges(message);\n this.logger.info('Plan committed', { taskId, taskTitle });\n return result;\n }\n\n async commitImplementation(taskId: string, taskTitle: string, planSummary?: string): Promise<string> {\n await this.runGitCommand('add .');\n\n const hasChanges = await this.hasStagedChanges();\n if (!hasChanges) {\n this.logger.warn('No implementation changes to commit', { taskId });\n return 'No changes to commit';\n }\n\n let message = `✨ Implement task: ${taskTitle}\n\nTask ID: ${taskId}\nGenerated by PostHog Agent`;\n\n if (planSummary) {\n message += `\\n\\nPlan Summary:\\n${planSummary}`;\n }\n\n message += `\\n\\nThis commit implements the changes described in the task plan.`;\n\n const result = await this.commitChanges(message);\n this.logger.info('Implementation committed', { taskId, taskTitle });\n return result;\n }\n\n async deleteBranch(branchName: string, force: boolean = false): Promise<void> {\n const forceFlag = force ? '-D' : '-d';\n await this.runGitCommand(`branch ${forceFlag} ${branchName}`);\n }\n\n async deleteRemoteBranch(branchName: string): Promise<void> {\n await this.runGitCommand(`push origin --delete ${branchName}`);\n }\n\n async getBranchInfo(branchName: string): Promise<BranchInfo> {\n const exists = await this.branchExists(branchName);\n const currentBranch = await this.getCurrentBranch();\n\n return {\n name: branchName,\n exists,\n isCurrentBranch: branchName === currentBranch\n };\n }\n\n async getCommitSha(ref: string = 'HEAD'): Promise<string> {\n return await this.runGitCommand(`rev-parse ${ref}`);\n }\n\n async getCommitMessage(ref: string = 'HEAD'): Promise<string> {\n return await this.runGitCommand(`log -1 --pretty=%B ${ref}`);\n }\n\n async createPullRequest(\n branchName: string,\n title: string,\n body: string,\n baseBranch?: string\n ): Promise<string> {\n const currentBranch = await this.getCurrentBranch();\n if (currentBranch !== branchName) {\n await this.switchToBranch(branchName);\n }\n\n await this.pushBranch(branchName);\n\n let command = `gh pr create --title \"${title.replace(/\"/g, '\\\\\"')}\" --body \"${body.replace(/\"/g, '\\\\\"')}\"`;\n\n if (baseBranch) {\n command += ` --base ${baseBranch}`;\n }\n\n try {\n const prUrl = await this.runCommand(command);\n return prUrl.trim();\n } catch (error) {\n throw new Error(`Failed to create PR: ${error}`);\n }\n }\n\n async getTaskBranch(taskSlug: string): Promise<string | null> {\n try {\n // Get all branches matching the task slug pattern\n const branches = await this.runGitCommand('branch --list --all');\n const branchPattern = `posthog/task-${taskSlug}`;\n \n // Look for exact match or with counter suffix\n const lines = branches.split('\\n').map(l => l.trim().replace(/^\\*\\s+/, ''));\n for (const line of lines) {\n const cleanBranch = line.replace('remotes/origin/', '');\n if (cleanBranch.startsWith(branchPattern)) {\n return cleanBranch;\n }\n }\n \n return null;\n } catch (error) {\n this.logger.debug('Failed to get task branch', { taskSlug, error });\n return null;\n }\n }\n\n async commitAndPush(message: string, options?: { allowEmpty?: boolean }): Promise<void> {\n const hasChanges = await this.hasStagedChanges();\n \n if (!hasChanges && !options?.allowEmpty) {\n this.logger.debug('No changes to commit, skipping');\n return;\n }\n\n let command = `commit -m \"${message.replace(/\"/g, '\\\\\"')}\"`;\n \n if (options?.allowEmpty) {\n command += ' --allow-empty';\n }\n\n const authorName = this.authorName;\n const authorEmail = this.authorEmail;\n\n if (authorName && authorEmail) {\n command += ` --author=\"${authorName} <${authorEmail}>\"`;\n }\n\n await this.runGitCommand(command);\n \n // Push to origin\n const currentBranch = await this.getCurrentBranch();\n await this.pushBranch(currentBranch);\n \n this.logger.info('Committed and pushed changes', { branch: currentBranch, message });\n }\n}\n"],"names":[],"mappings":"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"}