@posthog/agent 1.24.0 → 1.25.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 (577) hide show
  1. package/LICENSE +33 -0
  2. package/dist/_virtual/_commonjsHelpers.js +6 -0
  3. package/dist/_virtual/_commonjsHelpers.js.map +1 -0
  4. package/dist/_virtual/additionalItems.js +4 -0
  5. package/dist/_virtual/additionalItems.js.map +1 -0
  6. package/dist/_virtual/additionalProperties.js +4 -0
  7. package/dist/_virtual/additionalProperties.js.map +1 -0
  8. package/dist/_virtual/ajv.js +4 -0
  9. package/dist/_virtual/ajv.js.map +1 -0
  10. package/dist/_virtual/allOf.js +4 -0
  11. package/dist/_virtual/allOf.js.map +1 -0
  12. package/dist/_virtual/anyOf.js +4 -0
  13. package/dist/_virtual/anyOf.js.map +1 -0
  14. package/dist/_virtual/applicability.js +4 -0
  15. package/dist/_virtual/applicability.js.map +1 -0
  16. package/dist/_virtual/boolSchema.js +4 -0
  17. package/dist/_virtual/boolSchema.js.map +1 -0
  18. package/dist/_virtual/code.js +4 -0
  19. package/dist/_virtual/code.js.map +1 -0
  20. package/dist/_virtual/code2.js +4 -0
  21. package/dist/_virtual/code2.js.map +1 -0
  22. package/dist/_virtual/const.js +4 -0
  23. package/dist/_virtual/const.js.map +1 -0
  24. package/dist/_virtual/contains.js +4 -0
  25. package/dist/_virtual/contains.js.map +1 -0
  26. package/dist/_virtual/core.js +4 -0
  27. package/dist/_virtual/core.js.map +1 -0
  28. package/dist/_virtual/dataType.js +4 -0
  29. package/dist/_virtual/dataType.js.map +1 -0
  30. package/dist/_virtual/defaults.js +4 -0
  31. package/dist/_virtual/defaults.js.map +1 -0
  32. package/dist/_virtual/dependencies.js +4 -0
  33. package/dist/_virtual/dependencies.js.map +1 -0
  34. package/dist/_virtual/draft7.js +4 -0
  35. package/dist/_virtual/draft7.js.map +1 -0
  36. package/dist/_virtual/enum.js +4 -0
  37. package/dist/_virtual/enum.js.map +1 -0
  38. package/dist/_virtual/equal.js +4 -0
  39. package/dist/_virtual/equal.js.map +1 -0
  40. package/dist/_virtual/errors.js +4 -0
  41. package/dist/_virtual/errors.js.map +1 -0
  42. package/dist/_virtual/format.js +4 -0
  43. package/dist/_virtual/format.js.map +1 -0
  44. package/dist/_virtual/formats.js +4 -0
  45. package/dist/_virtual/formats.js.map +1 -0
  46. package/dist/_virtual/id.js +4 -0
  47. package/dist/_virtual/id.js.map +1 -0
  48. package/dist/_virtual/if.js +4 -0
  49. package/dist/_virtual/if.js.map +1 -0
  50. package/dist/_virtual/index.js +4 -0
  51. package/dist/_virtual/index.js.map +1 -0
  52. package/dist/_virtual/index10.js +4 -0
  53. package/dist/_virtual/index10.js.map +1 -0
  54. package/dist/_virtual/index11.js +4 -0
  55. package/dist/_virtual/index11.js.map +1 -0
  56. package/dist/_virtual/index2.js +4 -0
  57. package/dist/_virtual/index2.js.map +1 -0
  58. package/dist/_virtual/index3.js +4 -0
  59. package/dist/_virtual/index3.js.map +1 -0
  60. package/dist/_virtual/index4.js +4 -0
  61. package/dist/_virtual/index4.js.map +1 -0
  62. package/dist/_virtual/index5.js +4 -0
  63. package/dist/_virtual/index5.js.map +1 -0
  64. package/dist/_virtual/index6.js +4 -0
  65. package/dist/_virtual/index6.js.map +1 -0
  66. package/dist/_virtual/index7.js +4 -0
  67. package/dist/_virtual/index7.js.map +1 -0
  68. package/dist/_virtual/index8.js +4 -0
  69. package/dist/_virtual/index8.js.map +1 -0
  70. package/dist/_virtual/index9.js +4 -0
  71. package/dist/_virtual/index9.js.map +1 -0
  72. package/dist/_virtual/items.js +4 -0
  73. package/dist/_virtual/items.js.map +1 -0
  74. package/dist/_virtual/items2020.js +4 -0
  75. package/dist/_virtual/items2020.js.map +1 -0
  76. package/dist/_virtual/keyword.js +4 -0
  77. package/dist/_virtual/keyword.js.map +1 -0
  78. package/dist/_virtual/limit.js +4 -0
  79. package/dist/_virtual/limit.js.map +1 -0
  80. package/dist/_virtual/limitItems.js +4 -0
  81. package/dist/_virtual/limitItems.js.map +1 -0
  82. package/dist/_virtual/limitLength.js +4 -0
  83. package/dist/_virtual/limitLength.js.map +1 -0
  84. package/dist/_virtual/limitNumber.js +4 -0
  85. package/dist/_virtual/limitNumber.js.map +1 -0
  86. package/dist/_virtual/limitProperties.js +4 -0
  87. package/dist/_virtual/limitProperties.js.map +1 -0
  88. package/dist/_virtual/metadata.js +4 -0
  89. package/dist/_virtual/metadata.js.map +1 -0
  90. package/dist/_virtual/multipleOf.js +4 -0
  91. package/dist/_virtual/multipleOf.js.map +1 -0
  92. package/dist/_virtual/names.js +4 -0
  93. package/dist/_virtual/names.js.map +1 -0
  94. package/dist/_virtual/not.js +4 -0
  95. package/dist/_virtual/not.js.map +1 -0
  96. package/dist/_virtual/oneOf.js +4 -0
  97. package/dist/_virtual/oneOf.js.map +1 -0
  98. package/dist/_virtual/pattern.js +4 -0
  99. package/dist/_virtual/pattern.js.map +1 -0
  100. package/dist/_virtual/patternProperties.js +4 -0
  101. package/dist/_virtual/patternProperties.js.map +1 -0
  102. package/dist/_virtual/prefixItems.js +4 -0
  103. package/dist/_virtual/prefixItems.js.map +1 -0
  104. package/dist/_virtual/properties.js +4 -0
  105. package/dist/_virtual/properties.js.map +1 -0
  106. package/dist/_virtual/propertyNames.js +4 -0
  107. package/dist/_virtual/propertyNames.js.map +1 -0
  108. package/dist/_virtual/ref.js +4 -0
  109. package/dist/_virtual/ref.js.map +1 -0
  110. package/dist/_virtual/ref_error.js +4 -0
  111. package/dist/_virtual/ref_error.js.map +1 -0
  112. package/dist/_virtual/required.js +4 -0
  113. package/dist/_virtual/required.js.map +1 -0
  114. package/dist/_virtual/resolve.js +4 -0
  115. package/dist/_virtual/resolve.js.map +1 -0
  116. package/dist/_virtual/rules.js +4 -0
  117. package/dist/_virtual/rules.js.map +1 -0
  118. package/dist/_virtual/scope.js +4 -0
  119. package/dist/_virtual/scope.js.map +1 -0
  120. package/dist/_virtual/subschema.js +4 -0
  121. package/dist/_virtual/subschema.js.map +1 -0
  122. package/dist/_virtual/thenElse.js +4 -0
  123. package/dist/_virtual/thenElse.js.map +1 -0
  124. package/dist/_virtual/types.js +4 -0
  125. package/dist/_virtual/types.js.map +1 -0
  126. package/dist/_virtual/ucs2length.js +4 -0
  127. package/dist/_virtual/ucs2length.js.map +1 -0
  128. package/dist/_virtual/uniqueItems.js +4 -0
  129. package/dist/_virtual/uniqueItems.js.map +1 -0
  130. package/dist/_virtual/uri.js +4 -0
  131. package/dist/_virtual/uri.js.map +1 -0
  132. package/dist/_virtual/util.js +4 -0
  133. package/dist/_virtual/util.js.map +1 -0
  134. package/dist/_virtual/validation_error.js +4 -0
  135. package/dist/_virtual/validation_error.js.map +1 -0
  136. package/dist/claude-cli/cli.js +2294 -2146
  137. package/dist/example-client.d.ts +3 -0
  138. package/dist/example-client.d.ts.map +1 -0
  139. package/dist/index.d.ts +12 -4
  140. package/dist/index.d.ts.map +1 -1
  141. package/dist/index.js +5 -1
  142. package/dist/index.js.map +1 -1
  143. package/dist/node_modules/@agentclientprotocol/sdk/dist/acp.js +610 -0
  144. package/dist/node_modules/@agentclientprotocol/sdk/dist/acp.js.map +1 -0
  145. package/dist/node_modules/@agentclientprotocol/sdk/dist/schema.js +875 -0
  146. package/dist/node_modules/@agentclientprotocol/sdk/dist/schema.js.map +1 -0
  147. package/dist/node_modules/@agentclientprotocol/sdk/dist/stream.js +66 -0
  148. package/dist/node_modules/@agentclientprotocol/sdk/dist/stream.js.map +1 -0
  149. package/dist/node_modules/@modelcontextprotocol/sdk/dist/esm/server/completable.js +23 -0
  150. package/dist/node_modules/@modelcontextprotocol/sdk/dist/esm/server/completable.js.map +1 -0
  151. package/dist/node_modules/@modelcontextprotocol/sdk/dist/esm/server/index.js +331 -0
  152. package/dist/node_modules/@modelcontextprotocol/sdk/dist/esm/server/index.js.map +1 -0
  153. package/dist/node_modules/@modelcontextprotocol/sdk/dist/esm/server/mcp.js +717 -0
  154. package/dist/node_modules/@modelcontextprotocol/sdk/dist/esm/server/mcp.js.map +1 -0
  155. package/dist/node_modules/@modelcontextprotocol/sdk/dist/esm/server/zod-compat.js +221 -0
  156. package/dist/node_modules/@modelcontextprotocol/sdk/dist/esm/server/zod-compat.js.map +1 -0
  157. package/dist/node_modules/@modelcontextprotocol/sdk/dist/esm/server/zod-json-schema-compat.js +56 -0
  158. package/dist/node_modules/@modelcontextprotocol/sdk/dist/esm/server/zod-json-schema-compat.js.map +1 -0
  159. package/dist/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/protocol.js +440 -0
  160. package/dist/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/protocol.js.map +1 -0
  161. package/dist/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/toolNameValidation.js +94 -0
  162. package/dist/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/toolNameValidation.js.map +1 -0
  163. package/dist/node_modules/@modelcontextprotocol/sdk/dist/esm/types.js +1610 -0
  164. package/dist/node_modules/@modelcontextprotocol/sdk/dist/esm/types.js.map +1 -0
  165. package/dist/node_modules/@modelcontextprotocol/sdk/dist/esm/validation/ajv-provider.js +91 -0
  166. package/dist/node_modules/@modelcontextprotocol/sdk/dist/esm/validation/ajv-provider.js.map +1 -0
  167. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v3/ZodError.js +133 -0
  168. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v3/ZodError.js.map +1 -0
  169. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v3/errors.js +9 -0
  170. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v3/errors.js.map +1 -0
  171. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v3/helpers/errorUtil.js +9 -0
  172. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v3/helpers/errorUtil.js.map +1 -0
  173. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v3/helpers/parseUtil.js +112 -0
  174. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v3/helpers/parseUtil.js.map +1 -0
  175. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v3/helpers/util.js +136 -0
  176. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v3/helpers/util.js.map +1 -0
  177. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v3/locales/en.js +112 -0
  178. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v3/locales/en.js.map +1 -0
  179. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v3/types.js +3297 -0
  180. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v3/types.js.map +1 -0
  181. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/classic/errors.js +44 -0
  182. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/classic/errors.js.map +1 -0
  183. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/classic/iso.js +36 -0
  184. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/classic/iso.js.map +1 -0
  185. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/classic/parse.js +10 -0
  186. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/classic/parse.js.map +1 -0
  187. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/classic/schemas.js +657 -0
  188. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/classic/schemas.js.map +1 -0
  189. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/core/api.js +449 -0
  190. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/core/api.js.map +1 -0
  191. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/core/checks.js +413 -0
  192. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/core/checks.js.map +1 -0
  193. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/core/core.js +57 -0
  194. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/core/core.js.map +1 -0
  195. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/core/doc.js +38 -0
  196. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/core/doc.js.map +1 -0
  197. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/core/errors.js +86 -0
  198. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/core/errors.js.map +1 -0
  199. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/core/parse.js +61 -0
  200. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/core/parse.js.map +1 -0
  201. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/core/regexes.js +80 -0
  202. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/core/regexes.js.map +1 -0
  203. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/core/registries.js +52 -0
  204. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/core/registries.js.map +1 -0
  205. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/core/schemas.js +1307 -0
  206. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/core/schemas.js.map +1 -0
  207. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/core/to-json-schema.js +842 -0
  208. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/core/to-json-schema.js.map +1 -0
  209. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/core/util.js +335 -0
  210. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/core/util.js.map +1 -0
  211. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/core/versions.js +8 -0
  212. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/core/versions.js.map +1 -0
  213. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/mini/schemas.js +51 -0
  214. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/mini/schemas.js.map +1 -0
  215. package/dist/node_modules/ajv/dist/ajv.js +69 -0
  216. package/dist/node_modules/ajv/dist/ajv.js.map +1 -0
  217. package/dist/node_modules/ajv/dist/compile/codegen/code.js +169 -0
  218. package/dist/node_modules/ajv/dist/compile/codegen/code.js.map +1 -0
  219. package/dist/node_modules/ajv/dist/compile/codegen/index.js +712 -0
  220. package/dist/node_modules/ajv/dist/compile/codegen/index.js.map +1 -0
  221. package/dist/node_modules/ajv/dist/compile/codegen/scope.js +157 -0
  222. package/dist/node_modules/ajv/dist/compile/codegen/scope.js.map +1 -0
  223. package/dist/node_modules/ajv/dist/compile/errors.js +140 -0
  224. package/dist/node_modules/ajv/dist/compile/errors.js.map +1 -0
  225. package/dist/node_modules/ajv/dist/compile/index.js +253 -0
  226. package/dist/node_modules/ajv/dist/compile/index.js.map +1 -0
  227. package/dist/node_modules/ajv/dist/compile/names.js +40 -0
  228. package/dist/node_modules/ajv/dist/compile/names.js.map +1 -0
  229. package/dist/node_modules/ajv/dist/compile/ref_error.js +25 -0
  230. package/dist/node_modules/ajv/dist/compile/ref_error.js.map +1 -0
  231. package/dist/node_modules/ajv/dist/compile/resolve.js +162 -0
  232. package/dist/node_modules/ajv/dist/compile/resolve.js.map +1 -0
  233. package/dist/node_modules/ajv/dist/compile/rules.js +29 -0
  234. package/dist/node_modules/ajv/dist/compile/rules.js.map +1 -0
  235. package/dist/node_modules/ajv/dist/compile/util.js +183 -0
  236. package/dist/node_modules/ajv/dist/compile/util.js.map +1 -0
  237. package/dist/node_modules/ajv/dist/compile/validate/applicability.js +30 -0
  238. package/dist/node_modules/ajv/dist/compile/validate/applicability.js.map +1 -0
  239. package/dist/node_modules/ajv/dist/compile/validate/boolSchema.js +64 -0
  240. package/dist/node_modules/ajv/dist/compile/validate/boolSchema.js.map +1 -0
  241. package/dist/node_modules/ajv/dist/compile/validate/dataType.js +213 -0
  242. package/dist/node_modules/ajv/dist/compile/validate/dataType.js.map +1 -0
  243. package/dist/node_modules/ajv/dist/compile/validate/defaults.js +49 -0
  244. package/dist/node_modules/ajv/dist/compile/validate/defaults.js.map +1 -0
  245. package/dist/node_modules/ajv/dist/compile/validate/index.js +544 -0
  246. package/dist/node_modules/ajv/dist/compile/validate/index.js.map +1 -0
  247. package/dist/node_modules/ajv/dist/compile/validate/keyword.js +139 -0
  248. package/dist/node_modules/ajv/dist/compile/validate/keyword.js.map +1 -0
  249. package/dist/node_modules/ajv/dist/compile/validate/subschema.js +95 -0
  250. package/dist/node_modules/ajv/dist/compile/validate/subschema.js.map +1 -0
  251. package/dist/node_modules/ajv/dist/core.js +639 -0
  252. package/dist/node_modules/ajv/dist/core.js.map +1 -0
  253. package/dist/node_modules/ajv/dist/refs/data.json.js +31 -0
  254. package/dist/node_modules/ajv/dist/refs/data.json.js.map +1 -0
  255. package/dist/node_modules/ajv/dist/refs/json-schema-draft-07.json.js +254 -0
  256. package/dist/node_modules/ajv/dist/refs/json-schema-draft-07.json.js.map +1 -0
  257. package/dist/node_modules/ajv/dist/runtime/equal.js +9 -0
  258. package/dist/node_modules/ajv/dist/runtime/equal.js.map +1 -0
  259. package/dist/node_modules/ajv/dist/runtime/ucs2length.js +25 -0
  260. package/dist/node_modules/ajv/dist/runtime/ucs2length.js.map +1 -0
  261. package/dist/node_modules/ajv/dist/runtime/uri.js +8 -0
  262. package/dist/node_modules/ajv/dist/runtime/uri.js.map +1 -0
  263. package/dist/node_modules/ajv/dist/runtime/validation_error.js +22 -0
  264. package/dist/node_modules/ajv/dist/runtime/validation_error.js.map +1 -0
  265. package/dist/node_modules/ajv/dist/vocabularies/applicator/additionalItems.js +53 -0
  266. package/dist/node_modules/ajv/dist/vocabularies/applicator/additionalItems.js.map +1 -0
  267. package/dist/node_modules/ajv/dist/vocabularies/applicator/additionalProperties.js +112 -0
  268. package/dist/node_modules/ajv/dist/vocabularies/applicator/additionalProperties.js.map +1 -0
  269. package/dist/node_modules/ajv/dist/vocabularies/applicator/allOf.js +26 -0
  270. package/dist/node_modules/ajv/dist/vocabularies/applicator/allOf.js.map +1 -0
  271. package/dist/node_modules/ajv/dist/vocabularies/applicator/anyOf.js +14 -0
  272. package/dist/node_modules/ajv/dist/vocabularies/applicator/anyOf.js.map +1 -0
  273. package/dist/node_modules/ajv/dist/vocabularies/applicator/contains.js +99 -0
  274. package/dist/node_modules/ajv/dist/vocabularies/applicator/contains.js.map +1 -0
  275. package/dist/node_modules/ajv/dist/vocabularies/applicator/dependencies.js +93 -0
  276. package/dist/node_modules/ajv/dist/vocabularies/applicator/dependencies.js.map +1 -0
  277. package/dist/node_modules/ajv/dist/vocabularies/applicator/if.js +70 -0
  278. package/dist/node_modules/ajv/dist/vocabularies/applicator/if.js.map +1 -0
  279. package/dist/node_modules/ajv/dist/vocabularies/applicator/index.js +77 -0
  280. package/dist/node_modules/ajv/dist/vocabularies/applicator/index.js.map +1 -0
  281. package/dist/node_modules/ajv/dist/vocabularies/applicator/items.js +57 -0
  282. package/dist/node_modules/ajv/dist/vocabularies/applicator/items.js.map +1 -0
  283. package/dist/node_modules/ajv/dist/vocabularies/applicator/items2020.js +37 -0
  284. package/dist/node_modules/ajv/dist/vocabularies/applicator/items2020.js.map +1 -0
  285. package/dist/node_modules/ajv/dist/vocabularies/applicator/not.js +29 -0
  286. package/dist/node_modules/ajv/dist/vocabularies/applicator/not.js.map +1 -0
  287. package/dist/node_modules/ajv/dist/vocabularies/applicator/oneOf.js +64 -0
  288. package/dist/node_modules/ajv/dist/vocabularies/applicator/oneOf.js.map +1 -0
  289. package/dist/node_modules/ajv/dist/vocabularies/applicator/patternProperties.js +80 -0
  290. package/dist/node_modules/ajv/dist/vocabularies/applicator/patternProperties.js.map +1 -0
  291. package/dist/node_modules/ajv/dist/vocabularies/applicator/prefixItems.js +15 -0
  292. package/dist/node_modules/ajv/dist/vocabularies/applicator/prefixItems.js.map +1 -0
  293. package/dist/node_modules/ajv/dist/vocabularies/applicator/properties.js +61 -0
  294. package/dist/node_modules/ajv/dist/vocabularies/applicator/properties.js.map +1 -0
  295. package/dist/node_modules/ajv/dist/vocabularies/applicator/propertyNames.js +42 -0
  296. package/dist/node_modules/ajv/dist/vocabularies/applicator/propertyNames.js.map +1 -0
  297. package/dist/node_modules/ajv/dist/vocabularies/applicator/thenElse.js +16 -0
  298. package/dist/node_modules/ajv/dist/vocabularies/applicator/thenElse.js.map +1 -0
  299. package/dist/node_modules/ajv/dist/vocabularies/code.js +146 -0
  300. package/dist/node_modules/ajv/dist/vocabularies/code.js.map +1 -0
  301. package/dist/node_modules/ajv/dist/vocabularies/core/id.js +11 -0
  302. package/dist/node_modules/ajv/dist/vocabularies/core/id.js.map +1 -0
  303. package/dist/node_modules/ajv/dist/vocabularies/core/index.js +21 -0
  304. package/dist/node_modules/ajv/dist/vocabularies/core/index.js.map +1 -0
  305. package/dist/node_modules/ajv/dist/vocabularies/core/ref.js +131 -0
  306. package/dist/node_modules/ajv/dist/vocabularies/core/ref.js.map +1 -0
  307. package/dist/node_modules/ajv/dist/vocabularies/discriminator/index.js +113 -0
  308. package/dist/node_modules/ajv/dist/vocabularies/discriminator/index.js.map +1 -0
  309. package/dist/node_modules/ajv/dist/vocabularies/discriminator/types.js +12 -0
  310. package/dist/node_modules/ajv/dist/vocabularies/discriminator/types.js.map +1 -0
  311. package/dist/node_modules/ajv/dist/vocabularies/draft7.js +28 -0
  312. package/dist/node_modules/ajv/dist/vocabularies/draft7.js.map +1 -0
  313. package/dist/node_modules/ajv/dist/vocabularies/format/format.js +94 -0
  314. package/dist/node_modules/ajv/dist/vocabularies/format/format.js.map +1 -0
  315. package/dist/node_modules/ajv/dist/vocabularies/format/index.js +9 -0
  316. package/dist/node_modules/ajv/dist/vocabularies/format/index.js.map +1 -0
  317. package/dist/node_modules/ajv/dist/vocabularies/metadata.js +21 -0
  318. package/dist/node_modules/ajv/dist/vocabularies/metadata.js.map +1 -0
  319. package/dist/node_modules/ajv/dist/vocabularies/validation/const.js +31 -0
  320. package/dist/node_modules/ajv/dist/vocabularies/validation/const.js.map +1 -0
  321. package/dist/node_modules/ajv/dist/vocabularies/validation/enum.js +54 -0
  322. package/dist/node_modules/ajv/dist/vocabularies/validation/enum.js.map +1 -0
  323. package/dist/node_modules/ajv/dist/vocabularies/validation/index.js +54 -0
  324. package/dist/node_modules/ajv/dist/vocabularies/validation/index.js.map +1 -0
  325. package/dist/node_modules/ajv/dist/vocabularies/validation/limitItems.js +26 -0
  326. package/dist/node_modules/ajv/dist/vocabularies/validation/limitItems.js.map +1 -0
  327. package/dist/node_modules/ajv/dist/vocabularies/validation/limitLength.js +33 -0
  328. package/dist/node_modules/ajv/dist/vocabularies/validation/limitLength.js.map +1 -0
  329. package/dist/node_modules/ajv/dist/vocabularies/validation/limitNumber.js +29 -0
  330. package/dist/node_modules/ajv/dist/vocabularies/validation/limitNumber.js.map +1 -0
  331. package/dist/node_modules/ajv/dist/vocabularies/validation/limitProperties.js +26 -0
  332. package/dist/node_modules/ajv/dist/vocabularies/validation/limitProperties.js.map +1 -0
  333. package/dist/node_modules/ajv/dist/vocabularies/validation/multipleOf.js +28 -0
  334. package/dist/node_modules/ajv/dist/vocabularies/validation/multipleOf.js.map +1 -0
  335. package/dist/node_modules/ajv/dist/vocabularies/validation/pattern.js +27 -0
  336. package/dist/node_modules/ajv/dist/vocabularies/validation/pattern.js.map +1 -0
  337. package/dist/node_modules/ajv/dist/vocabularies/validation/required.js +84 -0
  338. package/dist/node_modules/ajv/dist/vocabularies/validation/required.js.map +1 -0
  339. package/dist/node_modules/ajv/dist/vocabularies/validation/uniqueItems.js +72 -0
  340. package/dist/node_modules/ajv/dist/vocabularies/validation/uniqueItems.js.map +1 -0
  341. package/dist/node_modules/ajv-formats/dist/formats.js +212 -0
  342. package/dist/node_modules/ajv-formats/dist/formats.js.map +1 -0
  343. package/dist/node_modules/ajv-formats/dist/index.js +52 -0
  344. package/dist/node_modules/ajv-formats/dist/index.js.map +1 -0
  345. package/dist/node_modules/ajv-formats/dist/limit.js +75 -0
  346. package/dist/node_modules/ajv-formats/dist/limit.js.map +1 -0
  347. package/dist/node_modules/diff/libesm/diff/base.js +256 -0
  348. package/dist/node_modules/diff/libesm/diff/base.js.map +1 -0
  349. package/dist/node_modules/diff/libesm/diff/line.js +64 -0
  350. package/dist/node_modules/diff/libesm/diff/line.js.map +1 -0
  351. package/dist/node_modules/diff/libesm/patch/create.js +185 -0
  352. package/dist/node_modules/diff/libesm/patch/create.js.map +1 -0
  353. package/dist/node_modules/fast-deep-equal/index.js +47 -0
  354. package/dist/node_modules/fast-deep-equal/index.js.map +1 -0
  355. package/dist/node_modules/fast-uri/index.js +347 -0
  356. package/dist/node_modules/fast-uri/index.js.map +1 -0
  357. package/dist/node_modules/fast-uri/lib/schemes.js +255 -0
  358. package/dist/node_modules/fast-uri/lib/schemes.js.map +1 -0
  359. package/dist/node_modules/fast-uri/lib/utils.js +334 -0
  360. package/dist/node_modules/fast-uri/lib/utils.js.map +1 -0
  361. package/dist/node_modules/json-schema-traverse/index.js +98 -0
  362. package/dist/node_modules/json-schema-traverse/index.js.map +1 -0
  363. package/dist/node_modules/uuid/dist/rng.js +14 -0
  364. package/dist/node_modules/uuid/dist/rng.js.map +1 -0
  365. package/dist/node_modules/uuid/dist/stringify.js +29 -0
  366. package/dist/node_modules/uuid/dist/stringify.js.map +1 -0
  367. package/dist/node_modules/uuid/dist/v7.js +65 -0
  368. package/dist/node_modules/uuid/dist/v7.js.map +1 -0
  369. package/dist/node_modules/zod-to-json-schema/dist/esm/Options.js +37 -0
  370. package/dist/node_modules/zod-to-json-schema/dist/esm/Options.js.map +1 -0
  371. package/dist/node_modules/zod-to-json-schema/dist/esm/Refs.js +26 -0
  372. package/dist/node_modules/zod-to-json-schema/dist/esm/Refs.js.map +1 -0
  373. package/dist/node_modules/zod-to-json-schema/dist/esm/errorMessages.js +17 -0
  374. package/dist/node_modules/zod-to-json-schema/dist/esm/errorMessages.js.map +1 -0
  375. package/dist/node_modules/zod-to-json-schema/dist/esm/getRelativePath.js +11 -0
  376. package/dist/node_modules/zod-to-json-schema/dist/esm/getRelativePath.js.map +1 -0
  377. package/dist/node_modules/zod-to-json-schema/dist/esm/parseDef.js +66 -0
  378. package/dist/node_modules/zod-to-json-schema/dist/esm/parseDef.js.map +1 -0
  379. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/any.js +21 -0
  380. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/any.js.map +1 -0
  381. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/array.js +30 -0
  382. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/array.js.map +1 -0
  383. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/bigint.js +53 -0
  384. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/bigint.js.map +1 -0
  385. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/boolean.js +8 -0
  386. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/boolean.js.map +1 -0
  387. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/branded.js +8 -0
  388. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/branded.js.map +1 -0
  389. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/catch.js +8 -0
  390. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/catch.js.map +1 -0
  391. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/date.js +50 -0
  392. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/date.js.map +1 -0
  393. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/default.js +11 -0
  394. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/default.js.map +1 -0
  395. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/effects.js +11 -0
  396. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/effects.js.map +1 -0
  397. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/enum.js +9 -0
  398. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/enum.js.map +1 -0
  399. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/intersection.js +56 -0
  400. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/intersection.js.map +1 -0
  401. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/literal.js +24 -0
  402. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/literal.js.map +1 -0
  403. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/map.js +30 -0
  404. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/map.js.map +1 -0
  405. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/nativeEnum.js +19 -0
  406. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/nativeEnum.js.map +1 -0
  407. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/never.js +15 -0
  408. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/never.js.map +1 -0
  409. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/null.js +13 -0
  410. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/null.js.map +1 -0
  411. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/nullable.js +37 -0
  412. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/nullable.js.map +1 -0
  413. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/number.js +56 -0
  414. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/number.js.map +1 -0
  415. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/object.js +76 -0
  416. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/object.js.map +1 -0
  417. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/optional.js +25 -0
  418. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/optional.js.map +1 -0
  419. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/pipeline.js +24 -0
  420. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/pipeline.js.map +1 -0
  421. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/promise.js +8 -0
  422. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/promise.js.map +1 -0
  423. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/readonly.js +8 -0
  424. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/readonly.js.map +1 -0
  425. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/record.js +65 -0
  426. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/record.js.map +1 -0
  427. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/set.js +24 -0
  428. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/set.js.map +1 -0
  429. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/string.js +350 -0
  430. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/string.js.map +1 -0
  431. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/tuple.js +36 -0
  432. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/tuple.js.map +1 -0
  433. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/undefined.js +10 -0
  434. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/undefined.js.map +1 -0
  435. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/union.js +84 -0
  436. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/union.js.map +1 -0
  437. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/unknown.js +8 -0
  438. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/unknown.js.map +1 -0
  439. package/dist/node_modules/zod-to-json-schema/dist/esm/selectParser.js +109 -0
  440. package/dist/node_modules/zod-to-json-schema/dist/esm/selectParser.js.map +1 -0
  441. package/dist/node_modules/zod-to-json-schema/dist/esm/zodToJsonSchema.js +90 -0
  442. package/dist/node_modules/zod-to-json-schema/dist/esm/zodToJsonSchema.js.map +1 -0
  443. package/dist/node_modules/zod-to-json-schema/node_modules/zod/v3/types.js +42 -0
  444. package/dist/node_modules/zod-to-json-schema/node_modules/zod/v3/types.js.map +1 -0
  445. package/dist/package.json.js +8 -0
  446. package/dist/package.json.js.map +1 -0
  447. package/dist/src/acp-extensions.d.ts +91 -0
  448. package/dist/src/acp-extensions.d.ts.map +1 -0
  449. package/dist/src/acp-extensions.js +38 -0
  450. package/dist/src/acp-extensions.js.map +1 -0
  451. package/dist/src/adapters/claude/claude.d.ts +136 -0
  452. package/dist/src/adapters/claude/claude.d.ts.map +1 -0
  453. package/dist/src/adapters/claude/claude.js +1112 -0
  454. package/dist/src/adapters/claude/claude.js.map +1 -0
  455. package/dist/src/adapters/claude/mcp-server.d.ts +30 -0
  456. package/dist/src/adapters/claude/mcp-server.d.ts.map +1 -0
  457. package/dist/src/adapters/claude/mcp-server.js +655 -0
  458. package/dist/src/adapters/claude/mcp-server.js.map +1 -0
  459. package/dist/src/adapters/claude/tools.d.ts +35 -0
  460. package/dist/src/adapters/claude/tools.d.ts.map +1 -0
  461. package/dist/src/adapters/claude/tools.js +466 -0
  462. package/dist/src/adapters/claude/tools.js.map +1 -0
  463. package/dist/src/adapters/claude/utils.d.ts +48 -0
  464. package/dist/src/adapters/claude/utils.d.ts.map +1 -0
  465. package/dist/src/adapters/claude/utils.js +158 -0
  466. package/dist/src/adapters/claude/utils.js.map +1 -0
  467. package/dist/src/agent.d.ts +15 -25
  468. package/dist/src/agent.d.ts.map +1 -1
  469. package/dist/src/agent.js +118 -156
  470. package/dist/src/agent.js.map +1 -1
  471. package/dist/src/file-manager.d.ts +2 -2
  472. package/dist/src/file-manager.d.ts.map +1 -1
  473. package/dist/src/file-manager.js +13 -5
  474. package/dist/src/file-manager.js.map +1 -1
  475. package/dist/src/git-manager.d.ts +1 -0
  476. package/dist/src/git-manager.d.ts.map +1 -1
  477. package/dist/src/git-manager.js +18 -0
  478. package/dist/src/git-manager.js.map +1 -1
  479. package/dist/src/posthog-api.d.ts +8 -13
  480. package/dist/src/posthog-api.d.ts.map +1 -1
  481. package/dist/src/posthog-api.js +14 -2
  482. package/dist/src/posthog-api.js.map +1 -1
  483. package/dist/src/prompt-builder.d.ts +2 -2
  484. package/dist/src/prompt-builder.d.ts.map +1 -1
  485. package/dist/src/prompt-builder.js +7 -7
  486. package/dist/src/prompt-builder.js.map +1 -1
  487. package/dist/src/schemas.d.ts +980 -0
  488. package/dist/src/schemas.d.ts.map +1 -0
  489. package/dist/src/schemas.js +196 -0
  490. package/dist/src/schemas.js.map +1 -0
  491. package/dist/src/session-store.d.ts +53 -0
  492. package/dist/src/session-store.d.ts.map +1 -0
  493. package/dist/src/session-store.js +195 -0
  494. package/dist/src/session-store.js.map +1 -0
  495. package/dist/src/task-manager.d.ts +3 -3
  496. package/dist/src/task-manager.d.ts.map +1 -1
  497. package/dist/src/task-manager.js.map +1 -1
  498. package/dist/src/template-manager.d.ts.map +1 -1
  499. package/dist/src/template-manager.js +6 -6
  500. package/dist/src/template-manager.js.map +1 -1
  501. package/dist/src/todo-manager.d.ts +2 -2
  502. package/dist/src/todo-manager.d.ts.map +1 -1
  503. package/dist/src/todo-manager.js +5 -1
  504. package/dist/src/todo-manager.js.map +1 -1
  505. package/dist/src/types.d.ts +54 -159
  506. package/dist/src/types.d.ts.map +1 -1
  507. package/dist/src/types.js +1 -0
  508. package/dist/src/types.js.map +1 -1
  509. package/dist/src/utils/logger.d.ts +10 -2
  510. package/dist/src/utils/logger.d.ts.map +1 -1
  511. package/dist/src/utils/logger.js +35 -20
  512. package/dist/src/utils/logger.js.map +1 -1
  513. package/dist/src/utils/tapped-stream.d.ts +17 -0
  514. package/dist/src/utils/tapped-stream.d.ts.map +1 -0
  515. package/dist/src/utils/tapped-stream.js +45 -0
  516. package/dist/src/utils/tapped-stream.js.map +1 -0
  517. package/dist/src/workflow/steps/build.d.ts.map +1 -1
  518. package/dist/src/workflow/steps/build.js +15 -9
  519. package/dist/src/workflow/steps/build.js.map +1 -1
  520. package/dist/src/workflow/steps/finalize.d.ts.map +1 -1
  521. package/dist/src/workflow/steps/finalize.js +4 -4
  522. package/dist/src/workflow/steps/finalize.js.map +1 -1
  523. package/dist/src/workflow/steps/plan.d.ts.map +1 -1
  524. package/dist/src/workflow/steps/plan.js +22 -12
  525. package/dist/src/workflow/steps/plan.js.map +1 -1
  526. package/dist/src/workflow/steps/research.d.ts.map +1 -1
  527. package/dist/src/workflow/steps/research.js +33 -26
  528. package/dist/src/workflow/steps/research.js.map +1 -1
  529. package/dist/src/workflow/types.d.ts +10 -5
  530. package/dist/src/workflow/types.d.ts.map +1 -1
  531. package/dist/src/worktree-manager.d.ts +39 -0
  532. package/dist/src/worktree-manager.d.ts.map +1 -0
  533. package/dist/src/worktree-manager.js +810 -0
  534. package/dist/src/worktree-manager.js.map +1 -0
  535. package/package.json +19 -15
  536. package/src/acp-extensions.ts +117 -0
  537. package/src/adapters/claude/claude.ts +1498 -0
  538. package/src/adapters/claude/mcp-server.ts +810 -0
  539. package/src/adapters/claude/tools.ts +609 -0
  540. package/src/adapters/claude/utils.ts +267 -0
  541. package/src/agent.ts +151 -222
  542. package/src/file-manager.ts +16 -7
  543. package/src/git-manager.ts +20 -0
  544. package/src/posthog-api.ts +38 -17
  545. package/src/prompt-builder.ts +23 -15
  546. package/src/schemas.ts +241 -0
  547. package/src/session-store.ts +244 -0
  548. package/src/task-manager.ts +3 -3
  549. package/src/template-manager.ts +8 -8
  550. package/src/todo-manager.ts +9 -3
  551. package/src/types.ts +79 -210
  552. package/src/utils/logger.ts +47 -22
  553. package/src/utils/tapped-stream.ts +60 -0
  554. package/src/workflow/steps/build.ts +16 -11
  555. package/src/workflow/steps/finalize.ts +4 -11
  556. package/src/workflow/steps/plan.ts +24 -19
  557. package/src/workflow/steps/research.ts +34 -33
  558. package/src/workflow/types.ts +14 -5
  559. package/src/worktree-manager.ts +884 -0
  560. package/dist/src/adapters/claude/claude-adapter.d.ts +0 -18
  561. package/dist/src/adapters/claude/claude-adapter.d.ts.map +0 -1
  562. package/dist/src/adapters/claude/claude-adapter.js +0 -356
  563. package/dist/src/adapters/claude/claude-adapter.js.map +0 -1
  564. package/dist/src/adapters/claude/tool-mapper.d.ts +0 -19
  565. package/dist/src/adapters/claude/tool-mapper.d.ts.map +0 -1
  566. package/dist/src/adapters/claude/tool-mapper.js +0 -44
  567. package/dist/src/adapters/claude/tool-mapper.js.map +0 -1
  568. package/dist/src/adapters/types.d.ts +0 -33
  569. package/dist/src/adapters/types.d.ts.map +0 -1
  570. package/dist/src/task-progress-reporter.d.ts +0 -42
  571. package/dist/src/task-progress-reporter.d.ts.map +0 -1
  572. package/dist/src/task-progress-reporter.js +0 -398
  573. package/dist/src/task-progress-reporter.js.map +0 -1
  574. package/src/adapters/claude/claude-adapter.ts +0 -390
  575. package/src/adapters/claude/tool-mapper.ts +0 -46
  576. package/src/adapters/types.ts +0 -37
  577. package/src/task-progress-reporter.ts +0 -454
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Simple logger utility with configurable debug mode
2
+ * Simple logger utility with configurable debug mode and external log forwarding
3
3
  */
4
4
  var LogLevel;
5
5
  (function (LogLevel) {
@@ -11,55 +11,70 @@ var LogLevel;
11
11
  class Logger {
12
12
  debugEnabled;
13
13
  prefix;
14
+ scope;
15
+ onLog;
14
16
  constructor(config = {}) {
15
17
  this.debugEnabled = config.debug ?? false;
16
18
  this.prefix = config.prefix ?? "[PostHog Agent]";
19
+ this.scope = config.scope ?? "agent";
20
+ this.onLog = config.onLog;
17
21
  }
18
22
  setDebug(enabled) {
19
23
  this.debugEnabled = enabled;
20
24
  }
25
+ setOnLog(onLog) {
26
+ this.onLog = onLog;
27
+ }
21
28
  formatMessage(level, message, data) {
22
29
  const timestamp = new Date().toISOString();
23
- const base = `${timestamp} ${this.prefix} ${level} ${message}`;
30
+ const base = `${timestamp} ${this.prefix} [${level}] ${message}`;
24
31
  if (data !== undefined) {
25
32
  return `${base} ${JSON.stringify(data, null, 2)}`;
26
33
  }
27
34
  return base;
28
35
  }
29
- error(message, error) {
30
- // Always log errors
31
- if (error instanceof Error) {
32
- console.error(this.formatMessage("[ERROR]", message, {
33
- message: error.message,
34
- stack: error.stack,
35
- }));
36
+ emitLog(level, message, data) {
37
+ if (this.onLog) {
38
+ this.onLog(level, this.scope, message, data);
39
+ return;
36
40
  }
37
- else {
38
- console.error(this.formatMessage("[ERROR]", message, error));
41
+ const shouldLog = this.debugEnabled || level === "error";
42
+ if (shouldLog) {
43
+ console[level](this.formatMessage(level.toLowerCase(), message, data));
39
44
  }
40
45
  }
46
+ error(message, error) {
47
+ const data = error instanceof Error
48
+ ? { message: error.message, stack: error.stack }
49
+ : error;
50
+ this.emitLog("error", message, data);
51
+ }
41
52
  warn(message, data) {
42
- if (this.debugEnabled) {
43
- console.warn(this.formatMessage("[WARN]", message, data));
44
- }
53
+ this.emitLog("warn", message, data);
45
54
  }
46
55
  info(message, data) {
47
- if (this.debugEnabled) {
48
- console.log(this.formatMessage("[INFO]", message, data));
49
- }
56
+ this.emitLog("info", message, data);
50
57
  }
51
58
  debug(message, data) {
52
- if (this.debugEnabled) {
53
- console.log(this.formatMessage("[DEBUG]", message, data));
59
+ this.emitLog("debug", message, data);
60
+ }
61
+ log(level, message, data, scope) {
62
+ const originalScope = this.scope;
63
+ if (scope) {
64
+ this.scope = scope;
54
65
  }
66
+ this.emitLog(level, message, data);
67
+ this.scope = originalScope;
55
68
  }
56
69
  /**
57
- * Create a child logger with additional prefix
70
+ * Create a child logger with additional prefix and scope
58
71
  */
59
72
  child(childPrefix) {
60
73
  return new Logger({
61
74
  debug: this.debugEnabled,
62
75
  prefix: `${this.prefix} [${childPrefix}]`,
76
+ scope: `${this.scope}:${childPrefix}`,
77
+ onLog: this.onLog,
63
78
  });
64
79
  }
65
80
  }
@@ -1 +1 @@
1
- {"version":3,"file":"logger.js","sources":["../../../src/utils/logger.ts"],"sourcesContent":["/**\n * Simple logger utility with configurable debug mode\n */\nexport enum LogLevel {\n ERROR = 0,\n WARN = 1,\n INFO = 2,\n DEBUG = 3,\n}\n\nexport interface LoggerConfig {\n debug?: boolean;\n prefix?: string;\n}\n\nexport class Logger {\n private debugEnabled: boolean;\n private prefix: string;\n\n constructor(config: LoggerConfig = {}) {\n this.debugEnabled = config.debug ?? false;\n this.prefix = config.prefix ?? \"[PostHog Agent]\";\n }\n\n setDebug(enabled: boolean) {\n this.debugEnabled = enabled;\n }\n\n private formatMessage(\n level: string,\n message: string,\n data?: unknown,\n ): string {\n const timestamp = new Date().toISOString();\n const base = `${timestamp} ${this.prefix} ${level} ${message}`;\n\n if (data !== undefined) {\n return `${base} ${JSON.stringify(data, null, 2)}`;\n }\n\n return base;\n }\n\n error(message: string, error?: Error | unknown) {\n // Always log errors\n if (error instanceof Error) {\n console.error(\n this.formatMessage(\"[ERROR]\", message, {\n message: error.message,\n stack: error.stack,\n }),\n );\n } else {\n console.error(this.formatMessage(\"[ERROR]\", message, error));\n }\n }\n\n warn(message: string, data?: unknown) {\n if (this.debugEnabled) {\n console.warn(this.formatMessage(\"[WARN]\", message, data));\n }\n }\n\n info(message: string, data?: unknown) {\n if (this.debugEnabled) {\n console.log(this.formatMessage(\"[INFO]\", message, data));\n }\n }\n\n debug(message: string, data?: unknown) {\n if (this.debugEnabled) {\n console.log(this.formatMessage(\"[DEBUG]\", message, data));\n }\n }\n\n /**\n * Create a child logger with additional prefix\n */\n child(childPrefix: string): Logger {\n return new Logger({\n debug: this.debugEnabled,\n prefix: `${this.prefix} [${childPrefix}]`,\n });\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"logger.js","sources":["../../../src/utils/logger.ts"],"sourcesContent":["import type { LogLevel as LogLevelType, OnLogCallback } from \"../types.js\";\n\n/**\n * Simple logger utility with configurable debug mode and external log forwarding\n */\nexport enum LogLevel {\n ERROR = 0,\n WARN = 1,\n INFO = 2,\n DEBUG = 3,\n}\n\nexport interface LoggerConfig {\n debug?: boolean;\n prefix?: string;\n scope?: string;\n onLog?: OnLogCallback;\n}\n\nexport class Logger {\n private debugEnabled: boolean;\n private prefix: string;\n private scope: string;\n private onLog?: OnLogCallback;\n\n constructor(config: LoggerConfig = {}) {\n this.debugEnabled = config.debug ?? false;\n this.prefix = config.prefix ?? \"[PostHog Agent]\";\n this.scope = config.scope ?? \"agent\";\n this.onLog = config.onLog;\n }\n\n setDebug(enabled: boolean) {\n this.debugEnabled = enabled;\n }\n\n setOnLog(onLog: OnLogCallback | undefined) {\n this.onLog = onLog;\n }\n\n private formatMessage(\n level: string,\n message: string,\n data?: unknown,\n ): string {\n const timestamp = new Date().toISOString();\n const base = `${timestamp} ${this.prefix} [${level}] ${message}`;\n\n if (data !== undefined) {\n return `${base} ${JSON.stringify(data, null, 2)}`;\n }\n\n return base;\n }\n\n private emitLog(level: LogLevelType, message: string, data?: unknown) {\n if (this.onLog) {\n this.onLog(level, this.scope, message, data);\n return;\n }\n\n const shouldLog = this.debugEnabled || level === \"error\";\n\n if (shouldLog) {\n console[level](this.formatMessage(level.toLowerCase(), message, data));\n }\n }\n\n error(message: string, error?: Error | unknown) {\n const data =\n error instanceof Error\n ? { message: error.message, stack: error.stack }\n : error;\n\n this.emitLog(\"error\", message, data);\n }\n\n warn(message: string, data?: unknown) {\n this.emitLog(\"warn\", message, data);\n }\n\n info(message: string, data?: unknown) {\n this.emitLog(\"info\", message, data);\n }\n\n debug(message: string, data?: unknown) {\n this.emitLog(\"debug\", message, data);\n }\n\n log(level: LogLevelType, message: string, data?: unknown, scope?: string) {\n const originalScope = this.scope;\n if (scope) {\n this.scope = scope;\n }\n this.emitLog(level, message, data);\n this.scope = originalScope;\n }\n\n /**\n * Create a child logger with additional prefix and scope\n */\n child(childPrefix: string): Logger {\n return new Logger({\n debug: this.debugEnabled,\n prefix: `${this.prefix} [${childPrefix}]`,\n scope: `${this.scope}:${childPrefix}`,\n onLog: this.onLog,\n });\n }\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { Logger } from "./logger.js";
2
+ type MessageCallback = (line: string) => void;
3
+ export interface TappedStreamOptions {
4
+ onMessage: MessageCallback;
5
+ logger?: Logger;
6
+ }
7
+ /**
8
+ * Creates a WritableStream wrapper that taps all newline-delimited messages,
9
+ * forwarding each complete line for persistence.
10
+ *
11
+ * This aligns with ACP's transport model - all messages flow through
12
+ * newline-delimited JSON-RPC streams, so we intercept at the transport layer
13
+ * and persist everything.
14
+ */
15
+ export declare function createTappedWritableStream(underlying: WritableStream<Uint8Array>, options: TappedStreamOptions): WritableStream<Uint8Array>;
16
+ export {};
17
+ //# sourceMappingURL=tapped-stream.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tapped-stream.d.ts","sourceRoot":"","sources":["../../../src/utils/tapped-stream.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,KAAK,eAAe,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;AAE9C,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,eAAe,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;GAOG;AACH,wBAAgB,0BAA0B,CACxC,UAAU,EAAE,cAAc,CAAC,UAAU,CAAC,EACtC,OAAO,EAAE,mBAAmB,GAC3B,cAAc,CAAC,UAAU,CAAC,CAuC5B"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Creates a WritableStream wrapper that taps all newline-delimited messages,
3
+ * forwarding each complete line for persistence.
4
+ *
5
+ * This aligns with ACP's transport model - all messages flow through
6
+ * newline-delimited JSON-RPC streams, so we intercept at the transport layer
7
+ * and persist everything.
8
+ */
9
+ function createTappedWritableStream(underlying, options) {
10
+ const { onMessage, logger } = options;
11
+ const decoder = new TextDecoder();
12
+ let buffer = "";
13
+ return new WritableStream({
14
+ async write(chunk) {
15
+ // Decode and buffer
16
+ buffer += decoder.decode(chunk, { stream: true });
17
+ // Process complete lines (newline-delimited)
18
+ const lines = buffer.split("\n");
19
+ buffer = lines.pop() ?? "";
20
+ for (const line of lines) {
21
+ if (!line.trim())
22
+ continue;
23
+ onMessage(line);
24
+ }
25
+ // Forward to underlying stream
26
+ const writer = underlying.getWriter();
27
+ await writer.write(chunk);
28
+ writer.releaseLock();
29
+ },
30
+ async close() {
31
+ const writer = underlying.getWriter();
32
+ await writer.close();
33
+ writer.releaseLock();
34
+ },
35
+ async abort(reason) {
36
+ logger?.warn("Tapped stream aborted", { reason });
37
+ const writer = underlying.getWriter();
38
+ await writer.abort(reason);
39
+ writer.releaseLock();
40
+ },
41
+ });
42
+ }
43
+
44
+ export { createTappedWritableStream };
45
+ //# sourceMappingURL=tapped-stream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tapped-stream.js","sources":["../../../src/utils/tapped-stream.ts"],"sourcesContent":["import type { Logger } from \"./logger.js\";\n\ntype MessageCallback = (line: string) => void;\n\nexport interface TappedStreamOptions {\n onMessage: MessageCallback;\n logger?: Logger;\n}\n\n/**\n * Creates a WritableStream wrapper that taps all newline-delimited messages,\n * forwarding each complete line for persistence.\n *\n * This aligns with ACP's transport model - all messages flow through\n * newline-delimited JSON-RPC streams, so we intercept at the transport layer\n * and persist everything.\n */\nexport function createTappedWritableStream(\n underlying: WritableStream<Uint8Array>,\n options: TappedStreamOptions,\n): WritableStream<Uint8Array> {\n const { onMessage, logger } = options;\n const decoder = new TextDecoder();\n let buffer = \"\";\n let _messageCount = 0;\n\n return new WritableStream({\n async write(chunk: Uint8Array) {\n // Decode and buffer\n buffer += decoder.decode(chunk, { stream: true });\n\n // Process complete lines (newline-delimited)\n const lines = buffer.split(\"\\n\");\n buffer = lines.pop() ?? \"\";\n\n for (const line of lines) {\n if (!line.trim()) continue;\n _messageCount++;\n\n onMessage(line);\n }\n\n // Forward to underlying stream\n const writer = underlying.getWriter();\n await writer.write(chunk);\n writer.releaseLock();\n },\n async close() {\n const writer = underlying.getWriter();\n await writer.close();\n writer.releaseLock();\n },\n async abort(reason: unknown) {\n logger?.warn(\"Tapped stream aborted\", { reason });\n const writer = underlying.getWriter();\n await writer.abort(reason);\n writer.releaseLock();\n },\n });\n}\n"],"names":[],"mappings":"AASA;;;;;;;AAOG;AACG,SAAU,0BAA0B,CACxC,UAAsC,EACtC,OAA4B,EAAA;AAE5B,IAAA,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,OAAO;AACrC,IAAA,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE;IACjC,IAAI,MAAM,GAAG,EAAE;IAGf,OAAO,IAAI,cAAc,CAAC;QACxB,MAAM,KAAK,CAAC,KAAiB,EAAA;;AAE3B,YAAA,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;;YAGjD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;AAChC,YAAA,MAAM,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE;AAE1B,YAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AACxB,gBAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;oBAAE;gBAGlB,SAAS,CAAC,IAAI,CAAC;YACjB;;AAGA,YAAA,MAAM,MAAM,GAAG,UAAU,CAAC,SAAS,EAAE;AACrC,YAAA,MAAM,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC;YACzB,MAAM,CAAC,WAAW,EAAE;QACtB,CAAC;AACD,QAAA,MAAM,KAAK,GAAA;AACT,YAAA,MAAM,MAAM,GAAG,UAAU,CAAC,SAAS,EAAE;AACrC,YAAA,MAAM,MAAM,CAAC,KAAK,EAAE;YACpB,MAAM,CAAC,WAAW,EAAE;QACtB,CAAC;QACD,MAAM,KAAK,CAAC,MAAe,EAAA;YACzB,MAAM,EAAE,IAAI,CAAC,uBAAuB,EAAE,EAAE,MAAM,EAAE,CAAC;AACjD,YAAA,MAAM,MAAM,GAAG,UAAU,CAAC,SAAS,EAAE;AACrC,YAAA,MAAM,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;YAC1B,MAAM,CAAC,WAAW,EAAE;QACtB,CAAC;AACF,KAAA,CAAC;AACJ;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../../../src/workflow/steps/build.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEtD,eAAO,MAAM,SAAS,EAAE,kBA2HvB,CAAC"}
1
+ {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../../../src/workflow/steps/build.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEtD,eAAO,MAAM,SAAS,EAAE,kBA+HvB,CAAC"}
@@ -1,10 +1,11 @@
1
1
  import { query } from '@anthropic-ai/claude-agent-sdk';
2
+ import { POSTHOG_NOTIFICATIONS } from '../../acp-extensions.js';
2
3
  import { EXECUTION_SYSTEM_PROMPT } from '../../agents/execution.js';
3
4
  import { TodoManager } from '../../todo-manager.js';
4
5
  import { PermissionMode } from '../../types.js';
5
6
 
6
7
  const buildStep = async ({ step, context }) => {
7
- const { task, cwd, options, logger, promptBuilder, adapter, mcpServers, gitManager, emitEvent, } = context;
8
+ const { task, cwd, options, logger, promptBuilder, sessionId, mcpServers, gitManager, sendNotification, } = context;
8
9
  const stepLogger = logger.child("BuildStep");
9
10
  const latestRun = task.latest_run;
10
11
  const prExists = latestRun?.output && typeof latestRun.output === "object"
@@ -17,7 +18,10 @@ const buildStep = async ({ step, context }) => {
17
18
  return { status: "skipped" };
18
19
  }
19
20
  stepLogger.info("Starting build phase", { taskId: task.id });
20
- emitEvent(adapter.createStatusEvent("phase_start", { phase: "build" }));
21
+ await sendNotification(POSTHOG_NOTIFICATIONS.PHASE_START, {
22
+ sessionId,
23
+ phase: "build",
24
+ });
21
25
  const executionPrompt = await promptBuilder.buildExecutionPrompt(task, cwd);
22
26
  const fullPrompt = `${EXECUTION_SYSTEM_PROMPT}\n\n${executionPrompt}`;
23
27
  const configuredPermissionMode = options.permissionMode ??
@@ -64,14 +68,13 @@ const buildStep = async ({ step, context }) => {
64
68
  const todoManager = new TodoManager(context.fileManager, stepLogger);
65
69
  try {
66
70
  for await (const message of response) {
67
- emitEvent(adapter.createRawSDKEvent(message));
68
- const transformedEvents = adapter.transform(message);
69
- for (const event of transformedEvents) {
70
- emitEvent(event);
71
- }
72
71
  const todoList = await todoManager.checkAndPersistFromMessage(message, task.id);
73
72
  if (todoList) {
74
- emitEvent(adapter.createArtifactEvent("todos", todoList));
73
+ await sendNotification(POSTHOG_NOTIFICATIONS.ARTIFACT, {
74
+ sessionId,
75
+ kind: "todos",
76
+ content: todoList,
77
+ });
75
78
  }
76
79
  }
77
80
  }
@@ -94,7 +97,10 @@ const buildStep = async ({ step, context }) => {
94
97
  pushedBranch,
95
98
  });
96
99
  }
97
- emitEvent(adapter.createStatusEvent("phase_complete", { phase: "build" }));
100
+ await sendNotification(POSTHOG_NOTIFICATIONS.PHASE_COMPLETE, {
101
+ sessionId,
102
+ phase: "build",
103
+ });
98
104
  return { status: "completed" };
99
105
  };
100
106
 
@@ -1 +1 @@
1
- {"version":3,"file":"build.js","sources":["../../../../src/workflow/steps/build.ts"],"sourcesContent":["import { query } from \"@anthropic-ai/claude-agent-sdk\";\nimport { EXECUTION_SYSTEM_PROMPT } from \"../../agents/execution.js\";\nimport { TodoManager } from \"../../todo-manager.js\";\nimport { PermissionMode } from \"../../types.js\";\nimport type { WorkflowStepRunner } from \"../types.js\";\n\nexport const buildStep: WorkflowStepRunner = async ({ step, context }) => {\n const {\n task,\n cwd,\n options,\n logger,\n promptBuilder,\n adapter,\n mcpServers,\n gitManager,\n emitEvent,\n } = context;\n\n const stepLogger = logger.child(\"BuildStep\");\n\n const latestRun = task.latest_run;\n const prExists =\n latestRun?.output && typeof latestRun.output === \"object\"\n ? (latestRun.output as Record<string, unknown>).pr_url\n : null;\n\n if (prExists) {\n stepLogger.info(\"PR already exists, skipping build phase\", {\n taskId: task.id,\n });\n return { status: \"skipped\" };\n }\n\n stepLogger.info(\"Starting build phase\", { taskId: task.id });\n emitEvent(adapter.createStatusEvent(\"phase_start\", { phase: \"build\" }));\n\n const executionPrompt = await promptBuilder.buildExecutionPrompt(task, cwd);\n const fullPrompt = `${EXECUTION_SYSTEM_PROMPT}\\n\\n${executionPrompt}`;\n\n const configuredPermissionMode =\n options.permissionMode ??\n (typeof step.permissionMode === \"string\"\n ? (step.permissionMode as PermissionMode)\n : step.permissionMode) ??\n PermissionMode.ACCEPT_EDITS;\n\n const baseOptions: Record<string, unknown> = {\n model: step.model,\n cwd,\n permissionMode: configuredPermissionMode,\n settingSources: [\"local\"],\n mcpServers,\n // Allow all tools for build phase - full read/write access needed for implementation\n allowedTools: [\n \"Task\",\n \"Bash\",\n \"BashOutput\",\n \"KillBash\",\n \"Edit\",\n \"Read\",\n \"Write\",\n \"Glob\",\n \"Grep\",\n \"NotebookEdit\",\n \"WebFetch\",\n \"WebSearch\",\n \"ListMcpResources\",\n \"ReadMcpResource\",\n \"TodoWrite\",\n ],\n };\n\n // Add fine-grained permission hook if provided\n if (options.canUseTool) {\n baseOptions.canUseTool = options.canUseTool;\n }\n\n const response = query({\n prompt: fullPrompt,\n options: { ...baseOptions, ...(options.queryOverrides || {}) },\n });\n\n // Track commits made during Claude Code execution\n const commitTracker = await gitManager.trackCommitsDuring();\n\n // Track todos from TodoWrite tool calls\n const todoManager = new TodoManager(context.fileManager, stepLogger);\n\n try {\n for await (const message of response) {\n emitEvent(adapter.createRawSDKEvent(message));\n const transformedEvents = adapter.transform(message);\n for (const event of transformedEvents) {\n emitEvent(event);\n }\n\n const todoList = await todoManager.checkAndPersistFromMessage(\n message,\n task.id,\n );\n if (todoList) {\n emitEvent(adapter.createArtifactEvent(\"todos\", todoList));\n }\n }\n } catch (error) {\n stepLogger.error(\"Error during build step query\", error);\n throw error;\n }\n\n // Finalize: commit any remaining changes and optionally push\n const { commitCreated, pushedBranch } = await commitTracker.finalize({\n commitMessage: `Implementation for ${task.title}`,\n push: step.push,\n });\n\n context.stepResults[step.id] = { commitCreated };\n\n if (!commitCreated) {\n stepLogger.warn(\"No changes to commit in build phase\", { taskId: task.id });\n } else {\n stepLogger.info(\"Build commits finalized\", {\n taskId: task.id,\n pushedBranch,\n });\n }\n\n emitEvent(adapter.createStatusEvent(\"phase_complete\", { phase: \"build\" }));\n return { status: \"completed\" };\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"build.js","sources":["../../../../src/workflow/steps/build.ts"],"sourcesContent":["import { query } from \"@anthropic-ai/claude-agent-sdk\";\nimport { POSTHOG_NOTIFICATIONS } from \"../../acp-extensions.js\";\nimport { EXECUTION_SYSTEM_PROMPT } from \"../../agents/execution.js\";\nimport { TodoManager } from \"../../todo-manager.js\";\nimport { PermissionMode } from \"../../types.js\";\nimport type { WorkflowStepRunner } from \"../types.js\";\n\nexport const buildStep: WorkflowStepRunner = async ({ step, context }) => {\n const {\n task,\n cwd,\n options,\n logger,\n promptBuilder,\n sessionId,\n mcpServers,\n gitManager,\n sendNotification,\n } = context;\n\n const stepLogger = logger.child(\"BuildStep\");\n\n const latestRun = task.latest_run;\n const prExists =\n latestRun?.output && typeof latestRun.output === \"object\"\n ? (latestRun.output as Record<string, unknown>).pr_url\n : null;\n\n if (prExists) {\n stepLogger.info(\"PR already exists, skipping build phase\", {\n taskId: task.id,\n });\n return { status: \"skipped\" };\n }\n\n stepLogger.info(\"Starting build phase\", { taskId: task.id });\n await sendNotification(POSTHOG_NOTIFICATIONS.PHASE_START, {\n sessionId,\n phase: \"build\",\n });\n\n const executionPrompt = await promptBuilder.buildExecutionPrompt(task, cwd);\n const fullPrompt = `${EXECUTION_SYSTEM_PROMPT}\\n\\n${executionPrompt}`;\n\n const configuredPermissionMode =\n options.permissionMode ??\n (typeof step.permissionMode === \"string\"\n ? (step.permissionMode as PermissionMode)\n : step.permissionMode) ??\n PermissionMode.ACCEPT_EDITS;\n\n const baseOptions: Record<string, unknown> = {\n model: step.model,\n cwd,\n permissionMode: configuredPermissionMode,\n settingSources: [\"local\"],\n mcpServers,\n // Allow all tools for build phase - full read/write access needed for implementation\n allowedTools: [\n \"Task\",\n \"Bash\",\n \"BashOutput\",\n \"KillBash\",\n \"Edit\",\n \"Read\",\n \"Write\",\n \"Glob\",\n \"Grep\",\n \"NotebookEdit\",\n \"WebFetch\",\n \"WebSearch\",\n \"ListMcpResources\",\n \"ReadMcpResource\",\n \"TodoWrite\",\n ],\n };\n\n // Add fine-grained permission hook if provided\n if (options.canUseTool) {\n baseOptions.canUseTool = options.canUseTool;\n }\n\n const response = query({\n prompt: fullPrompt,\n options: { ...baseOptions, ...(options.queryOverrides || {}) },\n });\n\n // Track commits made during Claude Code execution\n const commitTracker = await gitManager.trackCommitsDuring();\n\n // Track todos from TodoWrite tool calls\n const todoManager = new TodoManager(context.fileManager, stepLogger);\n\n try {\n for await (const message of response) {\n const todoList = await todoManager.checkAndPersistFromMessage(\n message,\n task.id,\n );\n if (todoList) {\n await sendNotification(POSTHOG_NOTIFICATIONS.ARTIFACT, {\n sessionId,\n kind: \"todos\",\n content: todoList,\n });\n }\n }\n } catch (error) {\n stepLogger.error(\"Error during build step query\", error);\n throw error;\n }\n\n // Finalize: commit any remaining changes and optionally push\n const { commitCreated, pushedBranch } = await commitTracker.finalize({\n commitMessage: `Implementation for ${task.title}`,\n push: step.push,\n });\n\n context.stepResults[step.id] = { commitCreated };\n\n if (!commitCreated) {\n stepLogger.warn(\"No changes to commit in build phase\", { taskId: task.id });\n } else {\n stepLogger.info(\"Build commits finalized\", {\n taskId: task.id,\n pushedBranch,\n });\n }\n\n await sendNotification(POSTHOG_NOTIFICATIONS.PHASE_COMPLETE, {\n sessionId,\n phase: \"build\",\n });\n return { status: \"completed\" };\n};\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"finalize.d.ts","sourceRoot":"","sources":["../../../../src/workflow/steps/finalize.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAKtD,eAAO,MAAM,YAAY,EAAE,kBA8D1B,CAAC"}
1
+ {"version":3,"file":"finalize.d.ts","sourceRoot":"","sources":["../../../../src/workflow/steps/finalize.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAKtD,eAAO,MAAM,YAAY,EAAE,kBAuD1B,CAAC"}
@@ -2,11 +2,11 @@ import { finalizeStepGitActions } from '../utils.js';
2
2
 
3
3
  const MAX_SNIPPET_LENGTH = 1200;
4
4
  const finalizeStep = async ({ step, context }) => {
5
- const { task, logger, fileManager, gitManager, posthogAPI, progressReporter, } = context;
5
+ const { task, logger, fileManager, gitManager, posthogAPI, runId } = context;
6
6
  const stepLogger = logger.child("FinalizeStep");
7
7
  const artifacts = await fileManager.collectTaskArtifacts(task.id);
8
8
  let uploadedArtifacts;
9
- if (artifacts.length && posthogAPI && progressReporter.runId) {
9
+ if (artifacts.length && posthogAPI && runId) {
10
10
  try {
11
11
  const payload = artifacts.map((artifact) => ({
12
12
  name: artifact.name,
@@ -14,7 +14,7 @@ const finalizeStep = async ({ step, context }) => {
14
14
  content: artifact.content,
15
15
  content_type: artifact.contentType,
16
16
  }));
17
- uploadedArtifacts = await posthogAPI.uploadTaskArtifacts(task.id, progressReporter.runId, payload);
17
+ uploadedArtifacts = await posthogAPI.uploadTaskArtifacts(task.id, runId, payload);
18
18
  stepLogger.info("Uploaded task artifacts to PostHog", {
19
19
  taskId: task.id,
20
20
  uploadedCount: uploadedArtifacts.length,
@@ -31,7 +31,7 @@ const finalizeStep = async ({ step, context }) => {
31
31
  stepLogger.debug("Skipping artifact upload", {
32
32
  hasArtifacts: artifacts.length > 0,
33
33
  hasPostHogApi: Boolean(posthogAPI),
34
- runId: progressReporter.runId,
34
+ runId,
35
35
  });
36
36
  }
37
37
  const prBody = buildPullRequestBody(task, artifacts, uploadedArtifacts);
@@ -1 +1 @@
1
- {"version":3,"file":"finalize.js","sources":["../../../../src/workflow/steps/finalize.ts"],"sourcesContent":["import type { LocalArtifact } from \"../../file-manager.js\";\nimport type { Task, TaskRunArtifact } from \"../../types.js\";\nimport type { WorkflowStepRunner } from \"../types.js\";\nimport { finalizeStepGitActions } from \"../utils.js\";\n\nconst MAX_SNIPPET_LENGTH = 1200;\n\nexport const finalizeStep: WorkflowStepRunner = async ({ step, context }) => {\n const {\n task,\n logger,\n fileManager,\n gitManager,\n posthogAPI,\n progressReporter,\n } = context;\n\n const stepLogger = logger.child(\"FinalizeStep\");\n const artifacts = await fileManager.collectTaskArtifacts(task.id);\n let uploadedArtifacts: TaskRunArtifact[] | undefined;\n\n if (artifacts.length && posthogAPI && progressReporter.runId) {\n try {\n const payload = artifacts.map((artifact) => ({\n name: artifact.name,\n type: artifact.type,\n content: artifact.content,\n content_type: artifact.contentType,\n }));\n uploadedArtifacts = await posthogAPI.uploadTaskArtifacts(\n task.id,\n progressReporter.runId,\n payload,\n );\n stepLogger.info(\"Uploaded task artifacts to PostHog\", {\n taskId: task.id,\n uploadedCount: uploadedArtifacts.length,\n });\n } catch (error) {\n stepLogger.warn(\"Failed to upload task artifacts\", {\n taskId: task.id,\n error: error instanceof Error ? error.message : String(error),\n });\n }\n } else {\n stepLogger.debug(\"Skipping artifact upload\", {\n hasArtifacts: artifacts.length > 0,\n hasPostHogApi: Boolean(posthogAPI),\n runId: progressReporter.runId,\n });\n }\n\n const prBody = buildPullRequestBody(task, artifacts, uploadedArtifacts);\n await fileManager.cleanupTaskDirectory(task.id);\n await gitManager.addAllPostHogFiles();\n\n // Commit the deletion of artifacts\n await finalizeStepGitActions(context, step, {\n commitMessage: `Cleanup task artifacts for ${task.title}`,\n allowEmptyCommit: true,\n });\n\n context.stepResults[step.id] = {\n prBody,\n uploadedArtifacts,\n artifactCount: artifacts.length,\n };\n\n return { status: \"completed\" };\n};\n\nfunction buildPullRequestBody(\n task: Task,\n artifacts: LocalArtifact[],\n uploaded?: TaskRunArtifact[],\n): string {\n const lines: string[] = [];\n const taskSlug = (task as unknown as Record<string, unknown>).slug || task.id;\n\n lines.push(\"## Task context\");\n lines.push(`- **Task**: ${taskSlug}`);\n lines.push(`- **Title**: ${task.title}`);\n lines.push(`- **Origin**: ${task.origin_product}`);\n\n if (task.description) {\n lines.push(\"\");\n lines.push(`> ${task.description.trim().split(\"\\n\").join(\"\\n> \")}`);\n }\n\n const usedFiles = new Set<string>();\n\n const contextArtifact = artifacts.find(\n (artifact) => artifact.name === \"context.md\",\n );\n if (contextArtifact) {\n lines.push(\"\");\n lines.push(\"### Task prompt\");\n lines.push(contextArtifact.content);\n usedFiles.add(contextArtifact.name);\n }\n\n const researchArtifact = artifacts.find(\n (artifact) => artifact.name === \"research.json\",\n );\n if (researchArtifact) {\n usedFiles.add(researchArtifact.name);\n const researchSection = formatResearchSection(researchArtifact.content);\n if (researchSection) {\n lines.push(\"\");\n lines.push(researchSection);\n }\n }\n\n const planArtifact = artifacts.find(\n (artifact) => artifact.name === \"plan.md\",\n );\n if (planArtifact) {\n lines.push(\"\");\n lines.push(\"### Implementation plan\");\n lines.push(planArtifact.content);\n usedFiles.add(planArtifact.name);\n }\n\n const todoArtifact = artifacts.find(\n (artifact) => artifact.name === \"todos.json\",\n );\n if (todoArtifact) {\n const summary = summarizeTodos(todoArtifact.content);\n if (summary) {\n lines.push(\"\");\n lines.push(\"### Todo list\");\n lines.push(summary);\n }\n usedFiles.add(todoArtifact.name);\n }\n\n const remainingArtifacts = artifacts.filter(\n (artifact) => !usedFiles.has(artifact.name),\n );\n if (remainingArtifacts.length) {\n lines.push(\"\");\n lines.push(\"### Additional artifacts\");\n for (const artifact of remainingArtifacts) {\n lines.push(`#### ${artifact.name}`);\n lines.push(renderCodeFence(artifact.content));\n }\n }\n\n const artifactList =\n uploaded ??\n artifacts.map((artifact) => ({\n name: artifact.name,\n type: artifact.type,\n }));\n\n if (artifactList.length) {\n lines.push(\"\");\n lines.push(\"### Uploaded artifacts\");\n for (const artifact of artifactList) {\n const rawStoragePath =\n \"storage_path\" in artifact\n ? (artifact as Record<string, unknown>).storage_path\n : undefined;\n const storagePath =\n typeof rawStoragePath === \"string\" ? rawStoragePath : undefined;\n const storage =\n storagePath && storagePath.trim().length > 0\n ? ` – \\`${storagePath.trim()}\\``\n : \"\";\n lines.push(`- ${artifact.name} (${artifact.type})${storage}`);\n }\n }\n\n return lines.join(\"\\n\\n\");\n}\n\nfunction renderCodeFence(content: string): string {\n const snippet = truncate(content, MAX_SNIPPET_LENGTH);\n return [\"```\", snippet, \"```\"].join(\"\\n\");\n}\n\nfunction truncate(value: string, maxLength: number): string {\n if (value.length <= maxLength) {\n return value;\n }\n return `${value.slice(0, maxLength)}\\n…`;\n}\n\nfunction formatResearchSection(content: string): string | null {\n try {\n const parsed = JSON.parse(content);\n const sections: string[] = [];\n\n if (parsed.context) {\n sections.push(\"### Research summary\");\n sections.push(parsed.context);\n }\n\n if (parsed.questions?.length) {\n sections.push(\"\");\n sections.push(\"### Questions needing answers\");\n for (const question of parsed.questions) {\n sections.push(`- ${question.question ?? question}`);\n }\n }\n\n if (parsed.answers?.length) {\n sections.push(\"\");\n sections.push(\"### Answers provided\");\n for (const answer of parsed.answers) {\n const questionId = answer.questionId\n ? ` (Q: ${answer.questionId})`\n : \"\";\n sections.push(\n `- ${answer.selectedOption || answer.customInput || \"answer\"}${questionId}`,\n );\n }\n }\n\n return sections.length ? sections.join(\"\\n\") : null;\n } catch {\n return null;\n }\n}\n\nfunction summarizeTodos(content: string): string | null {\n try {\n const data = JSON.parse(content);\n const total = data?.metadata?.total ?? data?.items?.length;\n const completed =\n data?.metadata?.completed ??\n data?.items?.filter(\n (item: { status?: string }) => item.status === \"completed\",\n ).length;\n\n const lines = [`Progress: ${completed}/${total} completed`];\n\n if (data?.items?.length) {\n for (const item of data.items) {\n lines.push(`- [${item.status}] ${item.content}`);\n }\n }\n\n return lines.join(\"\\n\");\n } catch {\n return null;\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"finalize.js","sources":["../../../../src/workflow/steps/finalize.ts"],"sourcesContent":["import type { LocalArtifact } from \"../../file-manager.js\";\nimport type { Task, TaskRunArtifact } from \"../../types.js\";\nimport type { WorkflowStepRunner } from \"../types.js\";\nimport { finalizeStepGitActions } from \"../utils.js\";\n\nconst MAX_SNIPPET_LENGTH = 1200;\n\nexport const finalizeStep: WorkflowStepRunner = async ({ step, context }) => {\n const { task, logger, fileManager, gitManager, posthogAPI, runId } = context;\n\n const stepLogger = logger.child(\"FinalizeStep\");\n const artifacts = await fileManager.collectTaskArtifacts(task.id);\n let uploadedArtifacts: TaskRunArtifact[] | undefined;\n\n if (artifacts.length && posthogAPI && runId) {\n try {\n const payload = artifacts.map((artifact) => ({\n name: artifact.name,\n type: artifact.type,\n content: artifact.content,\n content_type: artifact.contentType,\n }));\n uploadedArtifacts = await posthogAPI.uploadTaskArtifacts(\n task.id,\n runId,\n payload,\n );\n stepLogger.info(\"Uploaded task artifacts to PostHog\", {\n taskId: task.id,\n uploadedCount: uploadedArtifacts.length,\n });\n } catch (error) {\n stepLogger.warn(\"Failed to upload task artifacts\", {\n taskId: task.id,\n error: error instanceof Error ? error.message : String(error),\n });\n }\n } else {\n stepLogger.debug(\"Skipping artifact upload\", {\n hasArtifacts: artifacts.length > 0,\n hasPostHogApi: Boolean(posthogAPI),\n runId,\n });\n }\n\n const prBody = buildPullRequestBody(task, artifacts, uploadedArtifacts);\n await fileManager.cleanupTaskDirectory(task.id);\n await gitManager.addAllPostHogFiles();\n\n // Commit the deletion of artifacts\n await finalizeStepGitActions(context, step, {\n commitMessage: `Cleanup task artifacts for ${task.title}`,\n allowEmptyCommit: true,\n });\n\n context.stepResults[step.id] = {\n prBody,\n uploadedArtifacts,\n artifactCount: artifacts.length,\n };\n\n return { status: \"completed\" };\n};\n\nfunction buildPullRequestBody(\n task: Task,\n artifacts: LocalArtifact[],\n uploaded?: TaskRunArtifact[],\n): string {\n const lines: string[] = [];\n const taskSlug = (task as unknown as Record<string, unknown>).slug || task.id;\n\n lines.push(\"## Task context\");\n lines.push(`- **Task**: ${taskSlug}`);\n lines.push(`- **Title**: ${task.title}`);\n lines.push(`- **Origin**: ${task.origin_product}`);\n\n if (task.description) {\n lines.push(\"\");\n lines.push(`> ${task.description.trim().split(\"\\n\").join(\"\\n> \")}`);\n }\n\n const usedFiles = new Set<string>();\n\n const contextArtifact = artifacts.find(\n (artifact) => artifact.name === \"context.md\",\n );\n if (contextArtifact) {\n lines.push(\"\");\n lines.push(\"### Task prompt\");\n lines.push(contextArtifact.content);\n usedFiles.add(contextArtifact.name);\n }\n\n const researchArtifact = artifacts.find(\n (artifact) => artifact.name === \"research.json\",\n );\n if (researchArtifact) {\n usedFiles.add(researchArtifact.name);\n const researchSection = formatResearchSection(researchArtifact.content);\n if (researchSection) {\n lines.push(\"\");\n lines.push(researchSection);\n }\n }\n\n const planArtifact = artifacts.find(\n (artifact) => artifact.name === \"plan.md\",\n );\n if (planArtifact) {\n lines.push(\"\");\n lines.push(\"### Implementation plan\");\n lines.push(planArtifact.content);\n usedFiles.add(planArtifact.name);\n }\n\n const todoArtifact = artifacts.find(\n (artifact) => artifact.name === \"todos.json\",\n );\n if (todoArtifact) {\n const summary = summarizeTodos(todoArtifact.content);\n if (summary) {\n lines.push(\"\");\n lines.push(\"### Todo list\");\n lines.push(summary);\n }\n usedFiles.add(todoArtifact.name);\n }\n\n const remainingArtifacts = artifacts.filter(\n (artifact) => !usedFiles.has(artifact.name),\n );\n if (remainingArtifacts.length) {\n lines.push(\"\");\n lines.push(\"### Additional artifacts\");\n for (const artifact of remainingArtifacts) {\n lines.push(`#### ${artifact.name}`);\n lines.push(renderCodeFence(artifact.content));\n }\n }\n\n const artifactList =\n uploaded ??\n artifacts.map((artifact) => ({\n name: artifact.name,\n type: artifact.type,\n }));\n\n if (artifactList.length) {\n lines.push(\"\");\n lines.push(\"### Uploaded artifacts\");\n for (const artifact of artifactList) {\n const rawStoragePath =\n \"storage_path\" in artifact\n ? (artifact as Record<string, unknown>).storage_path\n : undefined;\n const storagePath =\n typeof rawStoragePath === \"string\" ? rawStoragePath : undefined;\n const storage =\n storagePath && storagePath.trim().length > 0\n ? ` – \\`${storagePath.trim()}\\``\n : \"\";\n lines.push(`- ${artifact.name} (${artifact.type})${storage}`);\n }\n }\n\n return lines.join(\"\\n\\n\");\n}\n\nfunction renderCodeFence(content: string): string {\n const snippet = truncate(content, MAX_SNIPPET_LENGTH);\n return [\"```\", snippet, \"```\"].join(\"\\n\");\n}\n\nfunction truncate(value: string, maxLength: number): string {\n if (value.length <= maxLength) {\n return value;\n }\n return `${value.slice(0, maxLength)}\\n…`;\n}\n\nfunction formatResearchSection(content: string): string | null {\n try {\n const parsed = JSON.parse(content);\n const sections: string[] = [];\n\n if (parsed.context) {\n sections.push(\"### Research summary\");\n sections.push(parsed.context);\n }\n\n if (parsed.questions?.length) {\n sections.push(\"\");\n sections.push(\"### Questions needing answers\");\n for (const question of parsed.questions) {\n sections.push(`- ${question.question ?? question}`);\n }\n }\n\n if (parsed.answers?.length) {\n sections.push(\"\");\n sections.push(\"### Answers provided\");\n for (const answer of parsed.answers) {\n const questionId = answer.questionId\n ? ` (Q: ${answer.questionId})`\n : \"\";\n sections.push(\n `- ${answer.selectedOption || answer.customInput || \"answer\"}${questionId}`,\n );\n }\n }\n\n return sections.length ? sections.join(\"\\n\") : null;\n } catch {\n return null;\n }\n}\n\nfunction summarizeTodos(content: string): string | null {\n try {\n const data = JSON.parse(content);\n const total = data?.metadata?.total ?? data?.items?.length;\n const completed =\n data?.metadata?.completed ??\n data?.items?.filter(\n (item: { status?: string }) => item.status === \"completed\",\n ).length;\n\n const lines = [`Progress: ${completed}/${total} completed`];\n\n if (data?.items?.length) {\n for (const item of data.items) {\n lines.push(`- [${item.status}] ${item.content}`);\n }\n }\n\n return lines.join(\"\\n\");\n } catch {\n return null;\n }\n}\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../../../../src/workflow/steps/plan.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAGtD,eAAO,MAAM,QAAQ,EAAE,kBA2JtB,CAAC"}
1
+ {"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../../../../src/workflow/steps/plan.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAGtD,eAAO,MAAM,QAAQ,EAAE,kBA+JtB,CAAC"}
@@ -1,10 +1,11 @@
1
1
  import { query } from '@anthropic-ai/claude-agent-sdk';
2
+ import { POSTHOG_NOTIFICATIONS } from '../../acp-extensions.js';
2
3
  import { PLANNING_SYSTEM_PROMPT } from '../../agents/planning.js';
3
4
  import { TodoManager } from '../../todo-manager.js';
4
5
  import { finalizeStepGitActions } from '../utils.js';
5
6
 
6
7
  const planStep = async ({ step, context }) => {
7
- const { task, cwd, isCloudMode, options, logger, fileManager, gitManager, promptBuilder, adapter, mcpServers, emitEvent, } = context;
8
+ const { task, cwd, isCloudMode, options, logger, fileManager, gitManager, promptBuilder, sessionId, mcpServers, sendNotification, } = context;
8
9
  const stepLogger = logger.child("PlanStep");
9
10
  const existingPlan = await fileManager.readPlan(task.id);
10
11
  if (existingPlan) {
@@ -16,13 +17,17 @@ const planStep = async ({ step, context }) => {
16
17
  stepLogger.info("Waiting for answered research questions", {
17
18
  taskId: task.id,
18
19
  });
19
- emitEvent(adapter.createStatusEvent("phase_complete", {
20
+ await sendNotification(POSTHOG_NOTIFICATIONS.PHASE_COMPLETE, {
21
+ sessionId,
20
22
  phase: "research_questions",
21
- }));
23
+ });
22
24
  return { status: "skipped", halt: true };
23
25
  }
24
26
  stepLogger.info("Starting planning phase", { taskId: task.id });
25
- emitEvent(adapter.createStatusEvent("phase_start", { phase: "planning" }));
27
+ await sendNotification(POSTHOG_NOTIFICATIONS.PHASE_START, {
28
+ sessionId,
29
+ phase: "planning",
30
+ });
26
31
  let researchContext = "";
27
32
  if (researchData) {
28
33
  researchContext += `## Research Context\n\n${researchData.context}\n\n`;
@@ -83,14 +88,13 @@ const planStep = async ({ step, context }) => {
83
88
  let planContent = "";
84
89
  try {
85
90
  for await (const message of response) {
86
- emitEvent(adapter.createRawSDKEvent(message));
87
- const transformedEvents = adapter.transform(message);
88
- for (const event of transformedEvents) {
89
- emitEvent(event);
90
- }
91
91
  const todoList = await todoManager.checkAndPersistFromMessage(message, task.id);
92
92
  if (todoList) {
93
- emitEvent(adapter.createArtifactEvent("todos", todoList));
93
+ await sendNotification(POSTHOG_NOTIFICATIONS.ARTIFACT, {
94
+ sessionId,
95
+ kind: "todos",
96
+ content: todoList,
97
+ });
94
98
  }
95
99
  // Extract text content for plan
96
100
  if (message.type === "assistant" && message.message?.content) {
@@ -115,10 +119,16 @@ const planStep = async ({ step, context }) => {
115
119
  commitMessage: `Planning phase for ${task.title}`,
116
120
  });
117
121
  if (!isCloudMode) {
118
- emitEvent(adapter.createStatusEvent("phase_complete", { phase: "planning" }));
122
+ await sendNotification(POSTHOG_NOTIFICATIONS.PHASE_COMPLETE, {
123
+ sessionId,
124
+ phase: "planning",
125
+ });
119
126
  return { status: "completed", halt: true };
120
127
  }
121
- emitEvent(adapter.createStatusEvent("phase_complete", { phase: "planning" }));
128
+ await sendNotification(POSTHOG_NOTIFICATIONS.PHASE_COMPLETE, {
129
+ sessionId,
130
+ phase: "planning",
131
+ });
122
132
  return { status: "completed" };
123
133
  };
124
134
 
@@ -1 +1 @@
1
- {"version":3,"file":"plan.js","sources":["../../../../src/workflow/steps/plan.ts"],"sourcesContent":["import { query } from \"@anthropic-ai/claude-agent-sdk\";\nimport { PLANNING_SYSTEM_PROMPT } from \"../../agents/planning.js\";\nimport { TodoManager } from \"../../todo-manager.js\";\nimport type { WorkflowStepRunner } from \"../types.js\";\nimport { finalizeStepGitActions } from \"../utils.js\";\n\nexport const planStep: WorkflowStepRunner = async ({ step, context }) => {\n const {\n task,\n cwd,\n isCloudMode,\n options,\n logger,\n fileManager,\n gitManager,\n promptBuilder,\n adapter,\n mcpServers,\n emitEvent,\n } = context;\n\n const stepLogger = logger.child(\"PlanStep\");\n\n const existingPlan = await fileManager.readPlan(task.id);\n if (existingPlan) {\n stepLogger.info(\"Plan already exists, skipping step\", { taskId: task.id });\n return { status: \"skipped\" };\n }\n\n const researchData = await fileManager.readResearch(task.id);\n if (researchData?.questions && !researchData.answered) {\n stepLogger.info(\"Waiting for answered research questions\", {\n taskId: task.id,\n });\n emitEvent(\n adapter.createStatusEvent(\"phase_complete\", {\n phase: \"research_questions\",\n }),\n );\n return { status: \"skipped\", halt: true };\n }\n\n stepLogger.info(\"Starting planning phase\", { taskId: task.id });\n emitEvent(adapter.createStatusEvent(\"phase_start\", { phase: \"planning\" }));\n let researchContext = \"\";\n if (researchData) {\n researchContext += `## Research Context\\n\\n${researchData.context}\\n\\n`;\n if (researchData.keyFiles.length > 0) {\n researchContext += `**Key Files:**\\n${researchData.keyFiles.map((f) => `- ${f}`).join(\"\\n\")}\\n\\n`;\n }\n if (researchData.blockers && researchData.blockers.length > 0) {\n researchContext += `**Considerations:**\\n${researchData.blockers.map((b) => `- ${b}`).join(\"\\n\")}\\n\\n`;\n }\n\n // Add answered questions if they exist\n if (\n researchData.questions &&\n researchData.answers &&\n researchData.answered\n ) {\n researchContext += `## Implementation Decisions\\n\\n`;\n for (const question of researchData.questions) {\n const answer = researchData.answers.find(\n (a) => a.questionId === question.id,\n );\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 researchContext += `**Selected:** Not answered\\n`;\n }\n researchContext += `\\n`;\n }\n }\n }\n\n const planningPrompt = await promptBuilder.buildPlanningPrompt(task, cwd);\n const fullPrompt = `${PLANNING_SYSTEM_PROMPT}\\n\\n${planningPrompt}\\n\\n${researchContext}`;\n\n const baseOptions: Record<string, unknown> = {\n model: step.model,\n cwd,\n permissionMode: \"plan\",\n settingSources: [\"local\"],\n mcpServers,\n // Allow research tools: read-only operations, web search, MCP resources, and ExitPlanMode\n allowedTools: [\n \"Read\",\n \"Glob\",\n \"Grep\",\n \"WebFetch\",\n \"WebSearch\",\n \"ListMcpResources\",\n \"ReadMcpResource\",\n \"ExitPlanMode\",\n \"TodoWrite\",\n \"BashOutput\",\n ],\n };\n\n const response = query({\n prompt: fullPrompt,\n options: { ...baseOptions, ...(options.queryOverrides || {}) },\n });\n\n const todoManager = new TodoManager(fileManager, stepLogger);\n\n let planContent = \"\";\n try {\n for await (const message of response) {\n emitEvent(adapter.createRawSDKEvent(message));\n const transformedEvents = adapter.transform(message);\n for (const event of transformedEvents) {\n emitEvent(event);\n }\n\n const todoList = await todoManager.checkAndPersistFromMessage(\n message,\n task.id,\n );\n if (todoList) {\n emitEvent(adapter.createArtifactEvent(\"todos\", todoList));\n }\n\n // Extract text content for plan\n if (message.type === \"assistant\" && message.message?.content) {\n for (const block of message.message.content) {\n if (block.type === \"text\" && block.text) {\n planContent += `${block.text}\\n`;\n }\n }\n }\n }\n } catch (error) {\n stepLogger.error(\"Error during plan step query\", error);\n throw error;\n }\n\n if (planContent.trim()) {\n await fileManager.writePlan(task.id, planContent.trim());\n stepLogger.info(\"Plan completed\", { taskId: task.id });\n }\n\n await gitManager.addAllPostHogFiles();\n await finalizeStepGitActions(context, step, {\n commitMessage: `Planning phase for ${task.title}`,\n });\n\n if (!isCloudMode) {\n emitEvent(\n adapter.createStatusEvent(\"phase_complete\", { phase: \"planning\" }),\n );\n return { status: \"completed\", halt: true };\n }\n\n emitEvent(adapter.createStatusEvent(\"phase_complete\", { phase: \"planning\" }));\n return { status: \"completed\" };\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plan.js","sources":["../../../../src/workflow/steps/plan.ts"],"sourcesContent":["import { query } from \"@anthropic-ai/claude-agent-sdk\";\nimport { POSTHOG_NOTIFICATIONS } from \"../../acp-extensions.js\";\nimport { PLANNING_SYSTEM_PROMPT } from \"../../agents/planning.js\";\nimport { TodoManager } from \"../../todo-manager.js\";\nimport type { WorkflowStepRunner } from \"../types.js\";\nimport { finalizeStepGitActions } from \"../utils.js\";\n\nexport const planStep: WorkflowStepRunner = async ({ step, context }) => {\n const {\n task,\n cwd,\n isCloudMode,\n options,\n logger,\n fileManager,\n gitManager,\n promptBuilder,\n sessionId,\n mcpServers,\n sendNotification,\n } = context;\n\n const stepLogger = logger.child(\"PlanStep\");\n\n const existingPlan = await fileManager.readPlan(task.id);\n if (existingPlan) {\n stepLogger.info(\"Plan already exists, skipping step\", { taskId: task.id });\n return { status: \"skipped\" };\n }\n\n const researchData = await fileManager.readResearch(task.id);\n if (researchData?.questions && !researchData.answered) {\n stepLogger.info(\"Waiting for answered research questions\", {\n taskId: task.id,\n });\n await sendNotification(POSTHOG_NOTIFICATIONS.PHASE_COMPLETE, {\n sessionId,\n phase: \"research_questions\",\n });\n return { status: \"skipped\", halt: true };\n }\n\n stepLogger.info(\"Starting planning phase\", { taskId: task.id });\n await sendNotification(POSTHOG_NOTIFICATIONS.PHASE_START, {\n sessionId,\n phase: \"planning\",\n });\n let researchContext = \"\";\n if (researchData) {\n researchContext += `## Research Context\\n\\n${researchData.context}\\n\\n`;\n if (researchData.keyFiles.length > 0) {\n researchContext += `**Key Files:**\\n${researchData.keyFiles.map((f) => `- ${f}`).join(\"\\n\")}\\n\\n`;\n }\n if (researchData.blockers && researchData.blockers.length > 0) {\n researchContext += `**Considerations:**\\n${researchData.blockers.map((b) => `- ${b}`).join(\"\\n\")}\\n\\n`;\n }\n\n // Add answered questions if they exist\n if (\n researchData.questions &&\n researchData.answers &&\n researchData.answered\n ) {\n researchContext += `## Implementation Decisions\\n\\n`;\n for (const question of researchData.questions) {\n const answer = researchData.answers.find(\n (a) => a.questionId === question.id,\n );\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 researchContext += `**Selected:** Not answered\\n`;\n }\n researchContext += `\\n`;\n }\n }\n }\n\n const planningPrompt = await promptBuilder.buildPlanningPrompt(task, cwd);\n const fullPrompt = `${PLANNING_SYSTEM_PROMPT}\\n\\n${planningPrompt}\\n\\n${researchContext}`;\n\n const baseOptions: Record<string, unknown> = {\n model: step.model,\n cwd,\n permissionMode: \"plan\",\n settingSources: [\"local\"],\n mcpServers,\n // Allow research tools: read-only operations, web search, MCP resources, and ExitPlanMode\n allowedTools: [\n \"Read\",\n \"Glob\",\n \"Grep\",\n \"WebFetch\",\n \"WebSearch\",\n \"ListMcpResources\",\n \"ReadMcpResource\",\n \"ExitPlanMode\",\n \"TodoWrite\",\n \"BashOutput\",\n ],\n };\n\n const response = query({\n prompt: fullPrompt,\n options: { ...baseOptions, ...(options.queryOverrides || {}) },\n });\n\n const todoManager = new TodoManager(fileManager, stepLogger);\n\n let planContent = \"\";\n try {\n for await (const message of response) {\n const todoList = await todoManager.checkAndPersistFromMessage(\n message,\n task.id,\n );\n if (todoList) {\n await sendNotification(POSTHOG_NOTIFICATIONS.ARTIFACT, {\n sessionId,\n kind: \"todos\",\n content: todoList,\n });\n }\n\n // Extract text content for plan\n if (message.type === \"assistant\" && message.message?.content) {\n for (const block of message.message.content) {\n if (block.type === \"text\" && block.text) {\n planContent += `${block.text}\\n`;\n }\n }\n }\n }\n } catch (error) {\n stepLogger.error(\"Error during plan step query\", error);\n throw error;\n }\n\n if (planContent.trim()) {\n await fileManager.writePlan(task.id, planContent.trim());\n stepLogger.info(\"Plan completed\", { taskId: task.id });\n }\n\n await gitManager.addAllPostHogFiles();\n await finalizeStepGitActions(context, step, {\n commitMessage: `Planning phase for ${task.title}`,\n });\n\n if (!isCloudMode) {\n await sendNotification(POSTHOG_NOTIFICATIONS.PHASE_COMPLETE, {\n sessionId,\n phase: \"planning\",\n });\n return { status: \"completed\", halt: true };\n }\n\n await sendNotification(POSTHOG_NOTIFICATIONS.PHASE_COMPLETE, {\n sessionId,\n phase: \"planning\",\n });\n return { status: \"completed\" };\n};\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"research.d.ts","sourceRoot":"","sources":["../../../../src/workflow/steps/research.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAGtD,eAAO,MAAM,YAAY,EAAE,kBAuN1B,CAAC"}
1
+ {"version":3,"file":"research.d.ts","sourceRoot":"","sources":["../../../../src/workflow/steps/research.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAGtD,eAAO,MAAM,YAAY,EAAE,kBAuN1B,CAAC"}