@posthog/agent 1.24.2 → 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 (604) hide show
  1. package/dist/_virtual/_commonjsHelpers.js +6 -0
  2. package/dist/_virtual/_commonjsHelpers.js.map +1 -0
  3. package/dist/_virtual/additionalItems.js +4 -0
  4. package/dist/_virtual/additionalItems.js.map +1 -0
  5. package/dist/_virtual/additionalProperties.js +4 -0
  6. package/dist/_virtual/additionalProperties.js.map +1 -0
  7. package/dist/_virtual/ajv.js +4 -0
  8. package/dist/_virtual/ajv.js.map +1 -0
  9. package/dist/_virtual/allOf.js +4 -0
  10. package/dist/_virtual/allOf.js.map +1 -0
  11. package/dist/_virtual/anyOf.js +4 -0
  12. package/dist/_virtual/anyOf.js.map +1 -0
  13. package/dist/_virtual/applicability.js +4 -0
  14. package/dist/_virtual/applicability.js.map +1 -0
  15. package/dist/_virtual/boolSchema.js +4 -0
  16. package/dist/_virtual/boolSchema.js.map +1 -0
  17. package/dist/_virtual/code.js +4 -0
  18. package/dist/_virtual/code.js.map +1 -0
  19. package/dist/_virtual/code2.js +4 -0
  20. package/dist/_virtual/code2.js.map +1 -0
  21. package/dist/_virtual/const.js +4 -0
  22. package/dist/_virtual/const.js.map +1 -0
  23. package/dist/_virtual/contains.js +4 -0
  24. package/dist/_virtual/contains.js.map +1 -0
  25. package/dist/_virtual/core.js +4 -0
  26. package/dist/_virtual/core.js.map +1 -0
  27. package/dist/_virtual/dataType.js +4 -0
  28. package/dist/_virtual/dataType.js.map +1 -0
  29. package/dist/_virtual/defaults.js +4 -0
  30. package/dist/_virtual/defaults.js.map +1 -0
  31. package/dist/_virtual/dependencies.js +4 -0
  32. package/dist/_virtual/dependencies.js.map +1 -0
  33. package/dist/_virtual/draft7.js +4 -0
  34. package/dist/_virtual/draft7.js.map +1 -0
  35. package/dist/_virtual/enum.js +4 -0
  36. package/dist/_virtual/enum.js.map +1 -0
  37. package/dist/_virtual/equal.js +4 -0
  38. package/dist/_virtual/equal.js.map +1 -0
  39. package/dist/_virtual/errors.js +4 -0
  40. package/dist/_virtual/errors.js.map +1 -0
  41. package/dist/_virtual/format.js +4 -0
  42. package/dist/_virtual/format.js.map +1 -0
  43. package/dist/_virtual/formats.js +4 -0
  44. package/dist/_virtual/formats.js.map +1 -0
  45. package/dist/_virtual/id.js +4 -0
  46. package/dist/_virtual/id.js.map +1 -0
  47. package/dist/_virtual/if.js +4 -0
  48. package/dist/_virtual/if.js.map +1 -0
  49. package/dist/_virtual/index.js +4 -0
  50. package/dist/_virtual/index.js.map +1 -0
  51. package/dist/_virtual/index10.js +4 -0
  52. package/dist/_virtual/index10.js.map +1 -0
  53. package/dist/_virtual/index11.js +4 -0
  54. package/dist/_virtual/index11.js.map +1 -0
  55. package/dist/_virtual/index2.js +4 -0
  56. package/dist/_virtual/index2.js.map +1 -0
  57. package/dist/_virtual/index3.js +4 -0
  58. package/dist/_virtual/index3.js.map +1 -0
  59. package/dist/_virtual/index4.js +4 -0
  60. package/dist/_virtual/index4.js.map +1 -0
  61. package/dist/_virtual/index5.js +4 -0
  62. package/dist/_virtual/index5.js.map +1 -0
  63. package/dist/_virtual/index6.js +4 -0
  64. package/dist/_virtual/index6.js.map +1 -0
  65. package/dist/_virtual/index7.js +4 -0
  66. package/dist/_virtual/index7.js.map +1 -0
  67. package/dist/_virtual/index8.js +4 -0
  68. package/dist/_virtual/index8.js.map +1 -0
  69. package/dist/_virtual/index9.js +4 -0
  70. package/dist/_virtual/index9.js.map +1 -0
  71. package/dist/_virtual/items.js +4 -0
  72. package/dist/_virtual/items.js.map +1 -0
  73. package/dist/_virtual/items2020.js +4 -0
  74. package/dist/_virtual/items2020.js.map +1 -0
  75. package/dist/_virtual/keyword.js +4 -0
  76. package/dist/_virtual/keyword.js.map +1 -0
  77. package/dist/_virtual/limit.js +4 -0
  78. package/dist/_virtual/limit.js.map +1 -0
  79. package/dist/_virtual/limitItems.js +4 -0
  80. package/dist/_virtual/limitItems.js.map +1 -0
  81. package/dist/_virtual/limitLength.js +4 -0
  82. package/dist/_virtual/limitLength.js.map +1 -0
  83. package/dist/_virtual/limitNumber.js +4 -0
  84. package/dist/_virtual/limitNumber.js.map +1 -0
  85. package/dist/_virtual/limitProperties.js +4 -0
  86. package/dist/_virtual/limitProperties.js.map +1 -0
  87. package/dist/_virtual/metadata.js +4 -0
  88. package/dist/_virtual/metadata.js.map +1 -0
  89. package/dist/_virtual/multipleOf.js +4 -0
  90. package/dist/_virtual/multipleOf.js.map +1 -0
  91. package/dist/_virtual/names.js +4 -0
  92. package/dist/_virtual/names.js.map +1 -0
  93. package/dist/_virtual/not.js +4 -0
  94. package/dist/_virtual/not.js.map +1 -0
  95. package/dist/_virtual/oneOf.js +4 -0
  96. package/dist/_virtual/oneOf.js.map +1 -0
  97. package/dist/_virtual/pattern.js +4 -0
  98. package/dist/_virtual/pattern.js.map +1 -0
  99. package/dist/_virtual/patternProperties.js +4 -0
  100. package/dist/_virtual/patternProperties.js.map +1 -0
  101. package/dist/_virtual/prefixItems.js +4 -0
  102. package/dist/_virtual/prefixItems.js.map +1 -0
  103. package/dist/_virtual/properties.js +4 -0
  104. package/dist/_virtual/properties.js.map +1 -0
  105. package/dist/_virtual/propertyNames.js +4 -0
  106. package/dist/_virtual/propertyNames.js.map +1 -0
  107. package/dist/_virtual/ref.js +4 -0
  108. package/dist/_virtual/ref.js.map +1 -0
  109. package/dist/_virtual/ref_error.js +4 -0
  110. package/dist/_virtual/ref_error.js.map +1 -0
  111. package/dist/_virtual/required.js +4 -0
  112. package/dist/_virtual/required.js.map +1 -0
  113. package/dist/_virtual/resolve.js +4 -0
  114. package/dist/_virtual/resolve.js.map +1 -0
  115. package/dist/_virtual/rules.js +4 -0
  116. package/dist/_virtual/rules.js.map +1 -0
  117. package/dist/_virtual/scope.js +4 -0
  118. package/dist/_virtual/scope.js.map +1 -0
  119. package/dist/_virtual/subschema.js +4 -0
  120. package/dist/_virtual/subschema.js.map +1 -0
  121. package/dist/_virtual/thenElse.js +4 -0
  122. package/dist/_virtual/thenElse.js.map +1 -0
  123. package/dist/_virtual/types.js +4 -0
  124. package/dist/_virtual/types.js.map +1 -0
  125. package/dist/_virtual/ucs2length.js +4 -0
  126. package/dist/_virtual/ucs2length.js.map +1 -0
  127. package/dist/_virtual/uniqueItems.js +4 -0
  128. package/dist/_virtual/uniqueItems.js.map +1 -0
  129. package/dist/_virtual/uri.js +4 -0
  130. package/dist/_virtual/uri.js.map +1 -0
  131. package/dist/_virtual/util.js +4 -0
  132. package/dist/_virtual/util.js.map +1 -0
  133. package/dist/_virtual/validation_error.js +4 -0
  134. package/dist/_virtual/validation_error.js.map +1 -0
  135. package/dist/claude-cli/cli.js +2294 -2146
  136. package/dist/example-client.d.ts +3 -0
  137. package/dist/example-client.d.ts.map +1 -0
  138. package/dist/index.d.ts +19 -11
  139. package/dist/index.d.ts.map +1 -1
  140. package/dist/index.js +7 -3
  141. package/dist/index.js.map +1 -1
  142. package/dist/node_modules/@agentclientprotocol/sdk/dist/acp.js +610 -0
  143. package/dist/node_modules/@agentclientprotocol/sdk/dist/acp.js.map +1 -0
  144. package/dist/node_modules/@agentclientprotocol/sdk/dist/schema.js +875 -0
  145. package/dist/node_modules/@agentclientprotocol/sdk/dist/schema.js.map +1 -0
  146. package/dist/node_modules/@agentclientprotocol/sdk/dist/stream.js +66 -0
  147. package/dist/node_modules/@agentclientprotocol/sdk/dist/stream.js.map +1 -0
  148. package/dist/node_modules/@modelcontextprotocol/sdk/dist/esm/server/completable.js +23 -0
  149. package/dist/node_modules/@modelcontextprotocol/sdk/dist/esm/server/completable.js.map +1 -0
  150. package/dist/node_modules/@modelcontextprotocol/sdk/dist/esm/server/index.js +331 -0
  151. package/dist/node_modules/@modelcontextprotocol/sdk/dist/esm/server/index.js.map +1 -0
  152. package/dist/node_modules/@modelcontextprotocol/sdk/dist/esm/server/mcp.js +717 -0
  153. package/dist/node_modules/@modelcontextprotocol/sdk/dist/esm/server/mcp.js.map +1 -0
  154. package/dist/node_modules/@modelcontextprotocol/sdk/dist/esm/server/zod-compat.js +221 -0
  155. package/dist/node_modules/@modelcontextprotocol/sdk/dist/esm/server/zod-compat.js.map +1 -0
  156. package/dist/node_modules/@modelcontextprotocol/sdk/dist/esm/server/zod-json-schema-compat.js +56 -0
  157. package/dist/node_modules/@modelcontextprotocol/sdk/dist/esm/server/zod-json-schema-compat.js.map +1 -0
  158. package/dist/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/protocol.js +440 -0
  159. package/dist/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/protocol.js.map +1 -0
  160. package/dist/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/toolNameValidation.js +94 -0
  161. package/dist/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/toolNameValidation.js.map +1 -0
  162. package/dist/node_modules/@modelcontextprotocol/sdk/dist/esm/types.js +1610 -0
  163. package/dist/node_modules/@modelcontextprotocol/sdk/dist/esm/types.js.map +1 -0
  164. package/dist/node_modules/@modelcontextprotocol/sdk/dist/esm/validation/ajv-provider.js +91 -0
  165. package/dist/node_modules/@modelcontextprotocol/sdk/dist/esm/validation/ajv-provider.js.map +1 -0
  166. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v3/ZodError.js +133 -0
  167. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v3/ZodError.js.map +1 -0
  168. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v3/errors.js +9 -0
  169. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v3/errors.js.map +1 -0
  170. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v3/helpers/errorUtil.js +9 -0
  171. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v3/helpers/errorUtil.js.map +1 -0
  172. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v3/helpers/parseUtil.js +112 -0
  173. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v3/helpers/parseUtil.js.map +1 -0
  174. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v3/helpers/util.js +136 -0
  175. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v3/helpers/util.js.map +1 -0
  176. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v3/locales/en.js +112 -0
  177. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v3/locales/en.js.map +1 -0
  178. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v3/types.js +3297 -0
  179. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v3/types.js.map +1 -0
  180. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/classic/errors.js +44 -0
  181. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/classic/errors.js.map +1 -0
  182. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/classic/iso.js +36 -0
  183. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/classic/iso.js.map +1 -0
  184. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/classic/parse.js +10 -0
  185. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/classic/parse.js.map +1 -0
  186. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/classic/schemas.js +657 -0
  187. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/classic/schemas.js.map +1 -0
  188. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/core/api.js +449 -0
  189. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/core/api.js.map +1 -0
  190. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/core/checks.js +413 -0
  191. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/core/checks.js.map +1 -0
  192. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/core/core.js +57 -0
  193. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/core/core.js.map +1 -0
  194. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/core/doc.js +38 -0
  195. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/core/doc.js.map +1 -0
  196. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/core/errors.js +86 -0
  197. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/core/errors.js.map +1 -0
  198. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/core/parse.js +61 -0
  199. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/core/parse.js.map +1 -0
  200. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/core/regexes.js +80 -0
  201. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/core/regexes.js.map +1 -0
  202. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/core/registries.js +52 -0
  203. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/core/registries.js.map +1 -0
  204. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/core/schemas.js +1307 -0
  205. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/core/schemas.js.map +1 -0
  206. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/core/to-json-schema.js +842 -0
  207. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/core/to-json-schema.js.map +1 -0
  208. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/core/util.js +335 -0
  209. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/core/util.js.map +1 -0
  210. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/core/versions.js +8 -0
  211. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/core/versions.js.map +1 -0
  212. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/mini/schemas.js +51 -0
  213. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/mini/schemas.js.map +1 -0
  214. package/dist/node_modules/ajv/dist/ajv.js +69 -0
  215. package/dist/node_modules/ajv/dist/ajv.js.map +1 -0
  216. package/dist/node_modules/ajv/dist/compile/codegen/code.js +169 -0
  217. package/dist/node_modules/ajv/dist/compile/codegen/code.js.map +1 -0
  218. package/dist/node_modules/ajv/dist/compile/codegen/index.js +712 -0
  219. package/dist/node_modules/ajv/dist/compile/codegen/index.js.map +1 -0
  220. package/dist/node_modules/ajv/dist/compile/codegen/scope.js +157 -0
  221. package/dist/node_modules/ajv/dist/compile/codegen/scope.js.map +1 -0
  222. package/dist/node_modules/ajv/dist/compile/errors.js +140 -0
  223. package/dist/node_modules/ajv/dist/compile/errors.js.map +1 -0
  224. package/dist/node_modules/ajv/dist/compile/index.js +253 -0
  225. package/dist/node_modules/ajv/dist/compile/index.js.map +1 -0
  226. package/dist/node_modules/ajv/dist/compile/names.js +40 -0
  227. package/dist/node_modules/ajv/dist/compile/names.js.map +1 -0
  228. package/dist/node_modules/ajv/dist/compile/ref_error.js +25 -0
  229. package/dist/node_modules/ajv/dist/compile/ref_error.js.map +1 -0
  230. package/dist/node_modules/ajv/dist/compile/resolve.js +162 -0
  231. package/dist/node_modules/ajv/dist/compile/resolve.js.map +1 -0
  232. package/dist/node_modules/ajv/dist/compile/rules.js +29 -0
  233. package/dist/node_modules/ajv/dist/compile/rules.js.map +1 -0
  234. package/dist/node_modules/ajv/dist/compile/util.js +183 -0
  235. package/dist/node_modules/ajv/dist/compile/util.js.map +1 -0
  236. package/dist/node_modules/ajv/dist/compile/validate/applicability.js +30 -0
  237. package/dist/node_modules/ajv/dist/compile/validate/applicability.js.map +1 -0
  238. package/dist/node_modules/ajv/dist/compile/validate/boolSchema.js +64 -0
  239. package/dist/node_modules/ajv/dist/compile/validate/boolSchema.js.map +1 -0
  240. package/dist/node_modules/ajv/dist/compile/validate/dataType.js +213 -0
  241. package/dist/node_modules/ajv/dist/compile/validate/dataType.js.map +1 -0
  242. package/dist/node_modules/ajv/dist/compile/validate/defaults.js +49 -0
  243. package/dist/node_modules/ajv/dist/compile/validate/defaults.js.map +1 -0
  244. package/dist/node_modules/ajv/dist/compile/validate/index.js +544 -0
  245. package/dist/node_modules/ajv/dist/compile/validate/index.js.map +1 -0
  246. package/dist/node_modules/ajv/dist/compile/validate/keyword.js +139 -0
  247. package/dist/node_modules/ajv/dist/compile/validate/keyword.js.map +1 -0
  248. package/dist/node_modules/ajv/dist/compile/validate/subschema.js +95 -0
  249. package/dist/node_modules/ajv/dist/compile/validate/subschema.js.map +1 -0
  250. package/dist/node_modules/ajv/dist/core.js +639 -0
  251. package/dist/node_modules/ajv/dist/core.js.map +1 -0
  252. package/dist/node_modules/ajv/dist/refs/data.json.js +31 -0
  253. package/dist/node_modules/ajv/dist/refs/data.json.js.map +1 -0
  254. package/dist/node_modules/ajv/dist/refs/json-schema-draft-07.json.js +254 -0
  255. package/dist/node_modules/ajv/dist/refs/json-schema-draft-07.json.js.map +1 -0
  256. package/dist/node_modules/ajv/dist/runtime/equal.js +9 -0
  257. package/dist/node_modules/ajv/dist/runtime/equal.js.map +1 -0
  258. package/dist/node_modules/ajv/dist/runtime/ucs2length.js +25 -0
  259. package/dist/node_modules/ajv/dist/runtime/ucs2length.js.map +1 -0
  260. package/dist/node_modules/ajv/dist/runtime/uri.js +8 -0
  261. package/dist/node_modules/ajv/dist/runtime/uri.js.map +1 -0
  262. package/dist/node_modules/ajv/dist/runtime/validation_error.js +22 -0
  263. package/dist/node_modules/ajv/dist/runtime/validation_error.js.map +1 -0
  264. package/dist/node_modules/ajv/dist/vocabularies/applicator/additionalItems.js +53 -0
  265. package/dist/node_modules/ajv/dist/vocabularies/applicator/additionalItems.js.map +1 -0
  266. package/dist/node_modules/ajv/dist/vocabularies/applicator/additionalProperties.js +112 -0
  267. package/dist/node_modules/ajv/dist/vocabularies/applicator/additionalProperties.js.map +1 -0
  268. package/dist/node_modules/ajv/dist/vocabularies/applicator/allOf.js +26 -0
  269. package/dist/node_modules/ajv/dist/vocabularies/applicator/allOf.js.map +1 -0
  270. package/dist/node_modules/ajv/dist/vocabularies/applicator/anyOf.js +14 -0
  271. package/dist/node_modules/ajv/dist/vocabularies/applicator/anyOf.js.map +1 -0
  272. package/dist/node_modules/ajv/dist/vocabularies/applicator/contains.js +99 -0
  273. package/dist/node_modules/ajv/dist/vocabularies/applicator/contains.js.map +1 -0
  274. package/dist/node_modules/ajv/dist/vocabularies/applicator/dependencies.js +93 -0
  275. package/dist/node_modules/ajv/dist/vocabularies/applicator/dependencies.js.map +1 -0
  276. package/dist/node_modules/ajv/dist/vocabularies/applicator/if.js +70 -0
  277. package/dist/node_modules/ajv/dist/vocabularies/applicator/if.js.map +1 -0
  278. package/dist/node_modules/ajv/dist/vocabularies/applicator/index.js +77 -0
  279. package/dist/node_modules/ajv/dist/vocabularies/applicator/index.js.map +1 -0
  280. package/dist/node_modules/ajv/dist/vocabularies/applicator/items.js +57 -0
  281. package/dist/node_modules/ajv/dist/vocabularies/applicator/items.js.map +1 -0
  282. package/dist/node_modules/ajv/dist/vocabularies/applicator/items2020.js +37 -0
  283. package/dist/node_modules/ajv/dist/vocabularies/applicator/items2020.js.map +1 -0
  284. package/dist/node_modules/ajv/dist/vocabularies/applicator/not.js +29 -0
  285. package/dist/node_modules/ajv/dist/vocabularies/applicator/not.js.map +1 -0
  286. package/dist/node_modules/ajv/dist/vocabularies/applicator/oneOf.js +64 -0
  287. package/dist/node_modules/ajv/dist/vocabularies/applicator/oneOf.js.map +1 -0
  288. package/dist/node_modules/ajv/dist/vocabularies/applicator/patternProperties.js +80 -0
  289. package/dist/node_modules/ajv/dist/vocabularies/applicator/patternProperties.js.map +1 -0
  290. package/dist/node_modules/ajv/dist/vocabularies/applicator/prefixItems.js +15 -0
  291. package/dist/node_modules/ajv/dist/vocabularies/applicator/prefixItems.js.map +1 -0
  292. package/dist/node_modules/ajv/dist/vocabularies/applicator/properties.js +61 -0
  293. package/dist/node_modules/ajv/dist/vocabularies/applicator/properties.js.map +1 -0
  294. package/dist/node_modules/ajv/dist/vocabularies/applicator/propertyNames.js +42 -0
  295. package/dist/node_modules/ajv/dist/vocabularies/applicator/propertyNames.js.map +1 -0
  296. package/dist/node_modules/ajv/dist/vocabularies/applicator/thenElse.js +16 -0
  297. package/dist/node_modules/ajv/dist/vocabularies/applicator/thenElse.js.map +1 -0
  298. package/dist/node_modules/ajv/dist/vocabularies/code.js +146 -0
  299. package/dist/node_modules/ajv/dist/vocabularies/code.js.map +1 -0
  300. package/dist/node_modules/ajv/dist/vocabularies/core/id.js +11 -0
  301. package/dist/node_modules/ajv/dist/vocabularies/core/id.js.map +1 -0
  302. package/dist/node_modules/ajv/dist/vocabularies/core/index.js +21 -0
  303. package/dist/node_modules/ajv/dist/vocabularies/core/index.js.map +1 -0
  304. package/dist/node_modules/ajv/dist/vocabularies/core/ref.js +131 -0
  305. package/dist/node_modules/ajv/dist/vocabularies/core/ref.js.map +1 -0
  306. package/dist/node_modules/ajv/dist/vocabularies/discriminator/index.js +113 -0
  307. package/dist/node_modules/ajv/dist/vocabularies/discriminator/index.js.map +1 -0
  308. package/dist/node_modules/ajv/dist/vocabularies/discriminator/types.js +12 -0
  309. package/dist/node_modules/ajv/dist/vocabularies/discriminator/types.js.map +1 -0
  310. package/dist/node_modules/ajv/dist/vocabularies/draft7.js +28 -0
  311. package/dist/node_modules/ajv/dist/vocabularies/draft7.js.map +1 -0
  312. package/dist/node_modules/ajv/dist/vocabularies/format/format.js +94 -0
  313. package/dist/node_modules/ajv/dist/vocabularies/format/format.js.map +1 -0
  314. package/dist/node_modules/ajv/dist/vocabularies/format/index.js +9 -0
  315. package/dist/node_modules/ajv/dist/vocabularies/format/index.js.map +1 -0
  316. package/dist/node_modules/ajv/dist/vocabularies/metadata.js +21 -0
  317. package/dist/node_modules/ajv/dist/vocabularies/metadata.js.map +1 -0
  318. package/dist/node_modules/ajv/dist/vocabularies/validation/const.js +31 -0
  319. package/dist/node_modules/ajv/dist/vocabularies/validation/const.js.map +1 -0
  320. package/dist/node_modules/ajv/dist/vocabularies/validation/enum.js +54 -0
  321. package/dist/node_modules/ajv/dist/vocabularies/validation/enum.js.map +1 -0
  322. package/dist/node_modules/ajv/dist/vocabularies/validation/index.js +54 -0
  323. package/dist/node_modules/ajv/dist/vocabularies/validation/index.js.map +1 -0
  324. package/dist/node_modules/ajv/dist/vocabularies/validation/limitItems.js +26 -0
  325. package/dist/node_modules/ajv/dist/vocabularies/validation/limitItems.js.map +1 -0
  326. package/dist/node_modules/ajv/dist/vocabularies/validation/limitLength.js +33 -0
  327. package/dist/node_modules/ajv/dist/vocabularies/validation/limitLength.js.map +1 -0
  328. package/dist/node_modules/ajv/dist/vocabularies/validation/limitNumber.js +29 -0
  329. package/dist/node_modules/ajv/dist/vocabularies/validation/limitNumber.js.map +1 -0
  330. package/dist/node_modules/ajv/dist/vocabularies/validation/limitProperties.js +26 -0
  331. package/dist/node_modules/ajv/dist/vocabularies/validation/limitProperties.js.map +1 -0
  332. package/dist/node_modules/ajv/dist/vocabularies/validation/multipleOf.js +28 -0
  333. package/dist/node_modules/ajv/dist/vocabularies/validation/multipleOf.js.map +1 -0
  334. package/dist/node_modules/ajv/dist/vocabularies/validation/pattern.js +27 -0
  335. package/dist/node_modules/ajv/dist/vocabularies/validation/pattern.js.map +1 -0
  336. package/dist/node_modules/ajv/dist/vocabularies/validation/required.js +84 -0
  337. package/dist/node_modules/ajv/dist/vocabularies/validation/required.js.map +1 -0
  338. package/dist/node_modules/ajv/dist/vocabularies/validation/uniqueItems.js +72 -0
  339. package/dist/node_modules/ajv/dist/vocabularies/validation/uniqueItems.js.map +1 -0
  340. package/dist/node_modules/ajv-formats/dist/formats.js +212 -0
  341. package/dist/node_modules/ajv-formats/dist/formats.js.map +1 -0
  342. package/dist/node_modules/ajv-formats/dist/index.js +52 -0
  343. package/dist/node_modules/ajv-formats/dist/index.js.map +1 -0
  344. package/dist/node_modules/ajv-formats/dist/limit.js +75 -0
  345. package/dist/node_modules/ajv-formats/dist/limit.js.map +1 -0
  346. package/dist/node_modules/diff/libesm/diff/base.js +256 -0
  347. package/dist/node_modules/diff/libesm/diff/base.js.map +1 -0
  348. package/dist/node_modules/diff/libesm/diff/line.js +64 -0
  349. package/dist/node_modules/diff/libesm/diff/line.js.map +1 -0
  350. package/dist/node_modules/diff/libesm/patch/create.js +185 -0
  351. package/dist/node_modules/diff/libesm/patch/create.js.map +1 -0
  352. package/dist/node_modules/fast-deep-equal/index.js +47 -0
  353. package/dist/node_modules/fast-deep-equal/index.js.map +1 -0
  354. package/dist/node_modules/fast-uri/index.js +347 -0
  355. package/dist/node_modules/fast-uri/index.js.map +1 -0
  356. package/dist/node_modules/fast-uri/lib/schemes.js +255 -0
  357. package/dist/node_modules/fast-uri/lib/schemes.js.map +1 -0
  358. package/dist/node_modules/fast-uri/lib/utils.js +334 -0
  359. package/dist/node_modules/fast-uri/lib/utils.js.map +1 -0
  360. package/dist/node_modules/json-schema-traverse/index.js +98 -0
  361. package/dist/node_modules/json-schema-traverse/index.js.map +1 -0
  362. package/dist/node_modules/uuid/dist/rng.js +14 -0
  363. package/dist/node_modules/uuid/dist/rng.js.map +1 -0
  364. package/dist/node_modules/uuid/dist/stringify.js +29 -0
  365. package/dist/node_modules/uuid/dist/stringify.js.map +1 -0
  366. package/dist/node_modules/uuid/dist/v7.js +65 -0
  367. package/dist/node_modules/uuid/dist/v7.js.map +1 -0
  368. package/dist/node_modules/zod-to-json-schema/dist/esm/Options.js +37 -0
  369. package/dist/node_modules/zod-to-json-schema/dist/esm/Options.js.map +1 -0
  370. package/dist/node_modules/zod-to-json-schema/dist/esm/Refs.js +26 -0
  371. package/dist/node_modules/zod-to-json-schema/dist/esm/Refs.js.map +1 -0
  372. package/dist/node_modules/zod-to-json-schema/dist/esm/errorMessages.js +17 -0
  373. package/dist/node_modules/zod-to-json-schema/dist/esm/errorMessages.js.map +1 -0
  374. package/dist/node_modules/zod-to-json-schema/dist/esm/getRelativePath.js +11 -0
  375. package/dist/node_modules/zod-to-json-schema/dist/esm/getRelativePath.js.map +1 -0
  376. package/dist/node_modules/zod-to-json-schema/dist/esm/parseDef.js +66 -0
  377. package/dist/node_modules/zod-to-json-schema/dist/esm/parseDef.js.map +1 -0
  378. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/any.js +21 -0
  379. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/any.js.map +1 -0
  380. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/array.js +30 -0
  381. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/array.js.map +1 -0
  382. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/bigint.js +53 -0
  383. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/bigint.js.map +1 -0
  384. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/boolean.js +8 -0
  385. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/boolean.js.map +1 -0
  386. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/branded.js +8 -0
  387. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/branded.js.map +1 -0
  388. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/catch.js +8 -0
  389. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/catch.js.map +1 -0
  390. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/date.js +50 -0
  391. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/date.js.map +1 -0
  392. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/default.js +11 -0
  393. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/default.js.map +1 -0
  394. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/effects.js +11 -0
  395. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/effects.js.map +1 -0
  396. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/enum.js +9 -0
  397. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/enum.js.map +1 -0
  398. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/intersection.js +56 -0
  399. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/intersection.js.map +1 -0
  400. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/literal.js +24 -0
  401. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/literal.js.map +1 -0
  402. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/map.js +30 -0
  403. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/map.js.map +1 -0
  404. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/nativeEnum.js +19 -0
  405. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/nativeEnum.js.map +1 -0
  406. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/never.js +15 -0
  407. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/never.js.map +1 -0
  408. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/null.js +13 -0
  409. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/null.js.map +1 -0
  410. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/nullable.js +37 -0
  411. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/nullable.js.map +1 -0
  412. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/number.js +56 -0
  413. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/number.js.map +1 -0
  414. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/object.js +76 -0
  415. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/object.js.map +1 -0
  416. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/optional.js +25 -0
  417. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/optional.js.map +1 -0
  418. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/pipeline.js +24 -0
  419. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/pipeline.js.map +1 -0
  420. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/promise.js +8 -0
  421. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/promise.js.map +1 -0
  422. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/readonly.js +8 -0
  423. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/readonly.js.map +1 -0
  424. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/record.js +65 -0
  425. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/record.js.map +1 -0
  426. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/set.js +24 -0
  427. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/set.js.map +1 -0
  428. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/string.js +350 -0
  429. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/string.js.map +1 -0
  430. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/tuple.js +36 -0
  431. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/tuple.js.map +1 -0
  432. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/undefined.js +10 -0
  433. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/undefined.js.map +1 -0
  434. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/union.js +84 -0
  435. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/union.js.map +1 -0
  436. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/unknown.js +8 -0
  437. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/unknown.js.map +1 -0
  438. package/dist/node_modules/zod-to-json-schema/dist/esm/selectParser.js +109 -0
  439. package/dist/node_modules/zod-to-json-schema/dist/esm/selectParser.js.map +1 -0
  440. package/dist/node_modules/zod-to-json-schema/dist/esm/zodToJsonSchema.js +90 -0
  441. package/dist/node_modules/zod-to-json-schema/dist/esm/zodToJsonSchema.js.map +1 -0
  442. package/dist/node_modules/zod-to-json-schema/node_modules/zod/v3/types.js +42 -0
  443. package/dist/node_modules/zod-to-json-schema/node_modules/zod/v3/types.js.map +1 -0
  444. package/dist/package.json.js +8 -0
  445. package/dist/package.json.js.map +1 -0
  446. package/dist/src/acp-extensions.d.ts +91 -0
  447. package/dist/src/acp-extensions.d.ts.map +1 -0
  448. package/dist/src/acp-extensions.js +38 -0
  449. package/dist/src/acp-extensions.js.map +1 -0
  450. package/dist/src/adapters/claude/claude.d.ts +136 -0
  451. package/dist/src/adapters/claude/claude.d.ts.map +1 -0
  452. package/dist/src/adapters/claude/claude.js +1112 -0
  453. package/dist/src/adapters/claude/claude.js.map +1 -0
  454. package/dist/src/adapters/claude/mcp-server.d.ts +30 -0
  455. package/dist/src/adapters/claude/mcp-server.d.ts.map +1 -0
  456. package/dist/src/adapters/claude/mcp-server.js +655 -0
  457. package/dist/src/adapters/claude/mcp-server.js.map +1 -0
  458. package/dist/src/adapters/claude/tools.d.ts +35 -0
  459. package/dist/src/adapters/claude/tools.d.ts.map +1 -0
  460. package/dist/src/adapters/claude/tools.js +466 -0
  461. package/dist/src/adapters/claude/tools.js.map +1 -0
  462. package/dist/src/adapters/claude/utils.d.ts +48 -0
  463. package/dist/src/adapters/claude/utils.d.ts.map +1 -0
  464. package/dist/src/adapters/claude/utils.js +158 -0
  465. package/dist/src/adapters/claude/utils.js.map +1 -0
  466. package/dist/src/agent.d.ts +18 -28
  467. package/dist/src/agent.d.ts.map +1 -1
  468. package/dist/src/agent.js +195 -175
  469. package/dist/src/agent.js.map +1 -1
  470. package/dist/src/agents/execution.js.map +1 -1
  471. package/dist/src/agents/planning.js.map +1 -1
  472. package/dist/src/agents/research.js.map +1 -1
  473. package/dist/src/file-manager.d.ts +6 -6
  474. package/dist/src/file-manager.d.ts.map +1 -1
  475. package/dist/src/file-manager.js +72 -63
  476. package/dist/src/file-manager.js.map +1 -1
  477. package/dist/src/git-manager.d.ts +2 -1
  478. package/dist/src/git-manager.d.ts.map +1 -1
  479. package/dist/src/git-manager.js +105 -70
  480. package/dist/src/git-manager.js.map +1 -1
  481. package/dist/src/posthog-api.d.ts +8 -14
  482. package/dist/src/posthog-api.d.ts.map +1 -1
  483. package/dist/src/posthog-api.js +35 -23
  484. package/dist/src/posthog-api.js.map +1 -1
  485. package/dist/src/prompt-builder.d.ts +4 -4
  486. package/dist/src/prompt-builder.d.ts.map +1 -1
  487. package/dist/src/prompt-builder.js +129 -99
  488. package/dist/src/prompt-builder.js.map +1 -1
  489. package/dist/src/schemas.d.ts +980 -0
  490. package/dist/src/schemas.d.ts.map +1 -0
  491. package/dist/src/schemas.js +196 -0
  492. package/dist/src/schemas.js.map +1 -0
  493. package/dist/src/session-store.d.ts +53 -0
  494. package/dist/src/session-store.d.ts.map +1 -0
  495. package/dist/src/session-store.js +195 -0
  496. package/dist/src/session-store.js.map +1 -0
  497. package/dist/src/task-manager.d.ts +7 -7
  498. package/dist/src/task-manager.d.ts.map +1 -1
  499. package/dist/src/task-manager.js +19 -18
  500. package/dist/src/task-manager.js.map +1 -1
  501. package/dist/src/template-manager.d.ts +1 -1
  502. package/dist/src/template-manager.d.ts.map +1 -1
  503. package/dist/src/template-manager.js +30 -28
  504. package/dist/src/template-manager.js.map +1 -1
  505. package/dist/src/todo-manager.d.ts +5 -5
  506. package/dist/src/todo-manager.d.ts.map +1 -1
  507. package/dist/src/todo-manager.js +33 -24
  508. package/dist/src/todo-manager.js.map +1 -1
  509. package/dist/src/tools/registry.d.ts +1 -1
  510. package/dist/src/tools/registry.js +60 -60
  511. package/dist/src/tools/registry.js.map +1 -1
  512. package/dist/src/tools/types.d.ts +31 -31
  513. package/dist/src/types.d.ts +62 -167
  514. package/dist/src/types.d.ts.map +1 -1
  515. package/dist/src/types.js +1 -0
  516. package/dist/src/types.js.map +1 -1
  517. package/dist/src/utils/logger.d.ts +14 -6
  518. package/dist/src/utils/logger.d.ts.map +1 -1
  519. package/dist/src/utils/logger.js +37 -22
  520. package/dist/src/utils/logger.js.map +1 -1
  521. package/dist/src/utils/tapped-stream.d.ts +17 -0
  522. package/dist/src/utils/tapped-stream.d.ts.map +1 -0
  523. package/dist/src/utils/tapped-stream.js +45 -0
  524. package/dist/src/utils/tapped-stream.js.map +1 -0
  525. package/dist/src/workflow/config.d.ts +1 -1
  526. package/dist/src/workflow/config.d.ts.map +1 -1
  527. package/dist/src/workflow/config.js +18 -18
  528. package/dist/src/workflow/config.js.map +1 -1
  529. package/dist/src/workflow/steps/build.d.ts +1 -1
  530. package/dist/src/workflow/steps/build.d.ts.map +1 -1
  531. package/dist/src/workflow/steps/build.js +53 -39
  532. package/dist/src/workflow/steps/build.js.map +1 -1
  533. package/dist/src/workflow/steps/finalize.d.ts +1 -1
  534. package/dist/src/workflow/steps/finalize.d.ts.map +1 -1
  535. package/dist/src/workflow/steps/finalize.js +58 -52
  536. package/dist/src/workflow/steps/finalize.js.map +1 -1
  537. package/dist/src/workflow/steps/plan.d.ts +1 -1
  538. package/dist/src/workflow/steps/plan.d.ts.map +1 -1
  539. package/dist/src/workflow/steps/plan.js +69 -47
  540. package/dist/src/workflow/steps/plan.js.map +1 -1
  541. package/dist/src/workflow/steps/research.d.ts +1 -1
  542. package/dist/src/workflow/steps/research.d.ts.map +1 -1
  543. package/dist/src/workflow/steps/research.js +86 -67
  544. package/dist/src/workflow/steps/research.js.map +1 -1
  545. package/dist/src/workflow/types.d.ts +19 -14
  546. package/dist/src/workflow/types.d.ts.map +1 -1
  547. package/dist/src/workflow/utils.d.ts +1 -1
  548. package/dist/src/workflow/utils.d.ts.map +1 -1
  549. package/dist/src/workflow/utils.js +7 -4
  550. package/dist/src/workflow/utils.js.map +1 -1
  551. package/dist/src/worktree-manager.d.ts +39 -0
  552. package/dist/src/worktree-manager.d.ts.map +1 -0
  553. package/dist/src/worktree-manager.js +810 -0
  554. package/dist/src/worktree-manager.js.map +1 -0
  555. package/package.json +20 -16
  556. package/src/acp-extensions.ts +117 -0
  557. package/src/adapters/claude/claude.ts +1498 -0
  558. package/src/adapters/claude/mcp-server.ts +810 -0
  559. package/src/adapters/claude/tools.ts +609 -0
  560. package/src/adapters/claude/utils.ts +267 -0
  561. package/src/agent.ts +511 -447
  562. package/src/agents/execution.ts +1 -1
  563. package/src/agents/planning.ts +1 -1
  564. package/src/agents/research.ts +0 -1
  565. package/src/file-manager.ts +80 -70
  566. package/src/git-manager.ts +164 -88
  567. package/src/posthog-api.ts +155 -94
  568. package/src/prompt-builder.ts +196 -143
  569. package/src/schemas.ts +241 -0
  570. package/src/session-store.ts +244 -0
  571. package/src/task-manager.ts +41 -33
  572. package/src/template-manager.ts +98 -45
  573. package/src/todo-manager.ts +43 -32
  574. package/src/tools/registry.ts +62 -62
  575. package/src/tools/types.ts +36 -36
  576. package/src/types.ts +130 -239
  577. package/src/utils/logger.ts +89 -58
  578. package/src/utils/tapped-stream.ts +60 -0
  579. package/src/workflow/config.ts +48 -48
  580. package/src/workflow/steps/build.ts +127 -113
  581. package/src/workflow/steps/finalize.ts +207 -182
  582. package/src/workflow/steps/plan.ts +155 -130
  583. package/src/workflow/steps/research.ts +207 -187
  584. package/src/workflow/types.ts +47 -36
  585. package/src/workflow/utils.ts +37 -34
  586. package/src/worktree-manager.ts +884 -0
  587. package/dist/src/adapters/claude/claude-adapter.d.ts +0 -18
  588. package/dist/src/adapters/claude/claude-adapter.d.ts.map +0 -1
  589. package/dist/src/adapters/claude/claude-adapter.js +0 -311
  590. package/dist/src/adapters/claude/claude-adapter.js.map +0 -1
  591. package/dist/src/adapters/claude/tool-mapper.d.ts +0 -19
  592. package/dist/src/adapters/claude/tool-mapper.d.ts.map +0 -1
  593. package/dist/src/adapters/claude/tool-mapper.js +0 -44
  594. package/dist/src/adapters/claude/tool-mapper.js.map +0 -1
  595. package/dist/src/adapters/types.d.ts +0 -33
  596. package/dist/src/adapters/types.d.ts.map +0 -1
  597. package/dist/src/task-progress-reporter.d.ts +0 -43
  598. package/dist/src/task-progress-reporter.d.ts.map +0 -1
  599. package/dist/src/task-progress-reporter.js +0 -393
  600. package/dist/src/task-progress-reporter.js.map +0 -1
  601. package/src/adapters/claude/claude-adapter.ts +0 -338
  602. package/src/adapters/claude/tool-mapper.ts +0 -46
  603. package/src/adapters/types.ts +0 -37
  604. package/src/task-progress-reporter.ts +0 -443
@@ -0,0 +1,1112 @@
1
+ import * as fs from 'node:fs';
2
+ import * as os from 'node:os';
3
+ import * as path from 'node:path';
4
+ import { AgentSideConnection, RequestError } from '../../../node_modules/@agentclientprotocol/sdk/dist/acp.js';
5
+ import { query } from '@anthropic-ai/claude-agent-sdk';
6
+ import { Logger } from '../../utils/logger.js';
7
+ import { createTappedWritableStream } from '../../utils/tapped-stream.js';
8
+ import packageJson from '../../../package.json.js';
9
+ import { createMcpServer, EDIT_TOOL_NAMES, toolNames } from './mcp-server.js';
10
+ import { createPostToolUseHook, toolInfoFromToolUse, toolUpdateFromToolResult, planEntries, registerHookCallback } from './tools.js';
11
+ import { createBidirectionalStreams, Pushable, unreachable } from './utils.js';
12
+ import { ndJsonStream } from '../../../node_modules/@agentclientprotocol/sdk/dist/stream.js';
13
+ import v7 from '../../../node_modules/uuid/dist/v7.js';
14
+
15
+ /**
16
+ * The claude adapter has been based on the original claude-code-acp adapter,
17
+ * and could use some cleanup.
18
+ *
19
+ * https://github.com/zed-industries/claude-code-acp
20
+ */
21
+ /**
22
+ * Clears the statsig cache to work around a claude-agent-sdk bug where cached
23
+ * tool definitions include input_examples which causes API errors.
24
+ * See: https://github.com/anthropics/claude-code/issues/11678
25
+ */
26
+ function clearStatsigCache() {
27
+ const configDir = process.env.CLAUDE_CONFIG_DIR || path.join(os.homedir(), ".claude");
28
+ const statsigPath = path.join(configDir, "statsig");
29
+ try {
30
+ if (fs.existsSync(statsigPath)) {
31
+ fs.rmSync(statsigPath, { recursive: true, force: true });
32
+ }
33
+ }
34
+ catch {
35
+ // Ignore errors - cache clearing is best-effort
36
+ }
37
+ }
38
+ // Bypass Permissions doesn't work if we are a root/sudo user
39
+ const IS_ROOT = (process.geteuid?.() ?? process.getuid?.()) === 0;
40
+ // Implement the ACP Agent interface
41
+ class ClaudeAcpAgent {
42
+ sessions;
43
+ client;
44
+ toolUseCache;
45
+ fileContentCache;
46
+ backgroundTerminals = {};
47
+ clientCapabilities;
48
+ logger = new Logger({ debug: false, prefix: "[ClaudeAcpAgent]" });
49
+ sessionStore;
50
+ constructor(client, sessionStore) {
51
+ this.sessions = {};
52
+ this.client = client;
53
+ this.toolUseCache = {};
54
+ this.fileContentCache = {};
55
+ this.sessionStore = sessionStore;
56
+ }
57
+ createSession(sessionId, q, input, permissionMode) {
58
+ const session = {
59
+ query: q,
60
+ input,
61
+ cancelled: false,
62
+ permissionMode,
63
+ notificationHistory: [],
64
+ };
65
+ this.sessions[sessionId] = session;
66
+ return session;
67
+ }
68
+ appendNotification(sessionId, notification) {
69
+ // In-memory only - S3 persistence is now automatic via tapped stream
70
+ this.sessions[sessionId]?.notificationHistory.push(notification);
71
+ }
72
+ async initialize(request) {
73
+ this.clientCapabilities = request.clientCapabilities;
74
+ // Default authMethod
75
+ const authMethod = {
76
+ description: "Run `claude /login` in the terminal",
77
+ name: "Log in with Claude Code",
78
+ id: "claude-login",
79
+ };
80
+ // If client supports terminal-auth capability, use that instead.
81
+ // if (request.clientCapabilities?._meta?.["terminal-auth"] === true) {
82
+ // const cliPath = fileURLToPath(import.meta.resolve("@anthropic-ai/claude-agent-sdk/cli.js"));
83
+ // authMethod._meta = {
84
+ // "terminal-auth": {
85
+ // command: "node",
86
+ // args: [cliPath, "/login"],
87
+ // label: "Claude Code Login",
88
+ // },
89
+ // };
90
+ // }
91
+ return {
92
+ protocolVersion: 1,
93
+ agentCapabilities: {
94
+ promptCapabilities: {
95
+ image: true,
96
+ embeddedContext: true,
97
+ },
98
+ mcpCapabilities: {
99
+ http: true,
100
+ sse: true,
101
+ },
102
+ loadSession: true,
103
+ _meta: {
104
+ posthog: {
105
+ resumeSession: true,
106
+ },
107
+ },
108
+ },
109
+ agentInfo: {
110
+ name: packageJson.name,
111
+ title: "Claude Code",
112
+ version: packageJson.version,
113
+ },
114
+ authMethods: [authMethod],
115
+ };
116
+ }
117
+ async newSession(params) {
118
+ if (fs.existsSync(path.resolve(os.homedir(), ".claude.json.backup")) &&
119
+ !fs.existsSync(path.resolve(os.homedir(), ".claude.json"))) {
120
+ throw RequestError.authRequired();
121
+ }
122
+ // Allow caller to specify sessionId via _meta (e.g. taskRunId in our case)
123
+ const sessionId = params._meta?.sessionId ||
124
+ v7();
125
+ const input = new Pushable();
126
+ const mcpServers = {};
127
+ if (Array.isArray(params.mcpServers)) {
128
+ for (const server of params.mcpServers) {
129
+ if ("type" in server) {
130
+ mcpServers[server.name] = {
131
+ type: server.type,
132
+ url: server.url,
133
+ headers: server.headers
134
+ ? Object.fromEntries(server.headers.map((e) => [e.name, e.value]))
135
+ : undefined,
136
+ };
137
+ }
138
+ else {
139
+ mcpServers[server.name] = {
140
+ type: "stdio",
141
+ command: server.command,
142
+ args: server.args,
143
+ env: server.env
144
+ ? Object.fromEntries(server.env.map((e) => [e.name, e.value]))
145
+ : undefined,
146
+ };
147
+ }
148
+ }
149
+ }
150
+ // Only add the acp MCP server if built-in tools are not disabled
151
+ if (!params._meta?.disableBuiltInTools) {
152
+ const server = createMcpServer(this, sessionId, this.clientCapabilities);
153
+ mcpServers.acp = {
154
+ type: "sdk",
155
+ name: "acp",
156
+ instance: server,
157
+ };
158
+ }
159
+ let systemPrompt = {
160
+ type: "preset",
161
+ preset: "claude_code",
162
+ };
163
+ if (params._meta?.systemPrompt) {
164
+ const customPrompt = params._meta.systemPrompt;
165
+ if (typeof customPrompt === "string") {
166
+ systemPrompt = customPrompt;
167
+ }
168
+ else if (typeof customPrompt === "object" &&
169
+ "append" in customPrompt &&
170
+ typeof customPrompt.append === "string") {
171
+ systemPrompt.append = customPrompt.append;
172
+ }
173
+ }
174
+ const permissionMode = "default";
175
+ // Extract options from _meta if provided
176
+ const userProvidedOptions = params._meta
177
+ ?.claudeCode?.options;
178
+ const options = {
179
+ systemPrompt,
180
+ settingSources: ["user", "project", "local"],
181
+ stderr: (err) => this.logger.error(err),
182
+ ...userProvidedOptions,
183
+ // Override certain fields that must be controlled by ACP
184
+ cwd: params.cwd,
185
+ includePartialMessages: true,
186
+ mcpServers: { ...(userProvidedOptions?.mcpServers || {}), ...mcpServers },
187
+ // If we want bypassPermissions to be an option, we have to allow it here.
188
+ // But it doesn't work in root mode, so we only activate it if it will work.
189
+ allowDangerouslySkipPermissions: !IS_ROOT,
190
+ permissionMode,
191
+ canUseTool: this.canUseTool(sessionId),
192
+ // note: although not documented by the types, passing an absolute path
193
+ // here works to find zed's managed node version.
194
+ executable: process.execPath,
195
+ ...(process.env.CLAUDE_CODE_EXECUTABLE && {
196
+ pathToClaudeCodeExecutable: process.env.CLAUDE_CODE_EXECUTABLE,
197
+ }),
198
+ hooks: {
199
+ ...userProvidedOptions?.hooks,
200
+ PostToolUse: [
201
+ ...(userProvidedOptions?.hooks?.PostToolUse || []),
202
+ {
203
+ hooks: [createPostToolUseHook(this.logger)],
204
+ },
205
+ ],
206
+ },
207
+ };
208
+ const allowedTools = [];
209
+ const disallowedTools = [];
210
+ // Check if built-in tools should be disabled
211
+ const disableBuiltInTools = params._meta?.disableBuiltInTools === true;
212
+ if (!disableBuiltInTools) {
213
+ if (this.clientCapabilities?.fs?.readTextFile) {
214
+ allowedTools.push(toolNames.read);
215
+ disallowedTools.push("Read");
216
+ }
217
+ if (this.clientCapabilities?.fs?.writeTextFile) {
218
+ disallowedTools.push("Write", "Edit");
219
+ }
220
+ if (this.clientCapabilities?.terminal) {
221
+ allowedTools.push(toolNames.bashOutput, toolNames.killShell);
222
+ disallowedTools.push("Bash", "BashOutput", "KillShell");
223
+ }
224
+ }
225
+ else {
226
+ // When built-in tools are disabled, explicitly disallow all of them
227
+ disallowedTools.push(toolNames.read, toolNames.write, toolNames.edit, toolNames.bash, toolNames.bashOutput, toolNames.killShell, "Read", "Write", "Edit", "Bash", "BashOutput", "KillShell", "Glob", "Grep", "Task", "TodoWrite", "ExitPlanMode", "WebSearch", "WebFetch", "AskUserQuestion", "SlashCommand", "Skill", "NotebookEdit");
228
+ }
229
+ if (allowedTools.length > 0) {
230
+ options.allowedTools = allowedTools;
231
+ }
232
+ if (disallowedTools.length > 0) {
233
+ options.disallowedTools = disallowedTools;
234
+ }
235
+ // Handle abort controller from meta options
236
+ const abortController = userProvidedOptions?.abortController;
237
+ if (abortController?.signal.aborted) {
238
+ throw new Error("Cancelled");
239
+ }
240
+ // Clear statsig cache before creating query to avoid input_examples bug
241
+ clearStatsigCache();
242
+ const q = query({
243
+ prompt: input,
244
+ options,
245
+ });
246
+ this.createSession(sessionId, q, input, permissionMode);
247
+ // Register for S3 persistence if config provided
248
+ const persistence = params._meta?.persistence;
249
+ if (persistence && this.sessionStore) {
250
+ this.sessionStore.register(sessionId, persistence);
251
+ }
252
+ const availableCommands = await getAvailableSlashCommands(q);
253
+ const models = await getAvailableModels(q);
254
+ // Needs to happen after we return the session
255
+ setTimeout(() => {
256
+ this.client.sessionUpdate({
257
+ sessionId,
258
+ update: {
259
+ sessionUpdate: "available_commands_update",
260
+ availableCommands,
261
+ },
262
+ });
263
+ }, 0);
264
+ const availableModes = [
265
+ {
266
+ id: "default",
267
+ name: "Always Ask",
268
+ description: "Prompts for permission on first use of each tool",
269
+ },
270
+ {
271
+ id: "acceptEdits",
272
+ name: "Accept Edits",
273
+ description: "Automatically accepts file edit permissions for the session",
274
+ },
275
+ {
276
+ id: "plan",
277
+ name: "Plan Mode",
278
+ description: "Claude can analyze but not modify files or execute commands",
279
+ },
280
+ ];
281
+ // Only works in non-root mode
282
+ if (!IS_ROOT) {
283
+ availableModes.push({
284
+ id: "bypassPermissions",
285
+ name: "Bypass Permissions",
286
+ description: "Skips all permission prompts",
287
+ });
288
+ }
289
+ return {
290
+ sessionId,
291
+ models,
292
+ modes: {
293
+ currentModeId: permissionMode,
294
+ availableModes,
295
+ },
296
+ };
297
+ }
298
+ async authenticate(_params) {
299
+ throw new Error("Method not implemented.");
300
+ }
301
+ async prompt(params) {
302
+ if (!this.sessions[params.sessionId]) {
303
+ throw new Error("Session not found");
304
+ }
305
+ this.sessions[params.sessionId].cancelled = false;
306
+ const { query, input } = this.sessions[params.sessionId];
307
+ // Capture and store user message for replay
308
+ for (const chunk of params.prompt) {
309
+ const userNotification = {
310
+ sessionId: params.sessionId,
311
+ update: {
312
+ sessionUpdate: "user_message_chunk",
313
+ content: chunk,
314
+ },
315
+ };
316
+ await this.client.sessionUpdate(userNotification);
317
+ this.appendNotification(params.sessionId, userNotification);
318
+ }
319
+ input.push(promptToClaude(params));
320
+ while (true) {
321
+ const { value: message, done } = await query.next();
322
+ if (done || !message) {
323
+ if (this.sessions[params.sessionId].cancelled) {
324
+ return { stopReason: "cancelled" };
325
+ }
326
+ break;
327
+ }
328
+ this.logger.debug("SDK message received", {
329
+ type: message.type,
330
+ subtype: message.subtype,
331
+ });
332
+ switch (message.type) {
333
+ case "system":
334
+ switch (message.subtype) {
335
+ case "init":
336
+ // Capture SDK session ID and notify client for persistence
337
+ if (message.session_id) {
338
+ const session = this.sessions[params.sessionId];
339
+ if (session && !session.sdkSessionId) {
340
+ session.sdkSessionId = message.session_id;
341
+ this.client.extNotification("_posthog/sdk_session", {
342
+ sessionId: params.sessionId,
343
+ sdkSessionId: message.session_id,
344
+ });
345
+ }
346
+ }
347
+ break;
348
+ case "compact_boundary":
349
+ case "hook_response":
350
+ case "status":
351
+ // Todo: process via status api: https://docs.claude.com/en/docs/claude-code/hooks#hook-output
352
+ break;
353
+ default:
354
+ unreachable(message, this.logger);
355
+ break;
356
+ }
357
+ break;
358
+ case "result": {
359
+ if (this.sessions[params.sessionId].cancelled) {
360
+ return { stopReason: "cancelled" };
361
+ }
362
+ switch (message.subtype) {
363
+ case "success": {
364
+ if (message.result.includes("Please run /login")) {
365
+ throw RequestError.authRequired();
366
+ }
367
+ if (message.is_error) {
368
+ throw RequestError.internalError(undefined, message.result);
369
+ }
370
+ return { stopReason: "end_turn" };
371
+ }
372
+ case "error_during_execution":
373
+ if (message.is_error) {
374
+ throw RequestError.internalError(undefined, message.errors.join(", ") || message.subtype);
375
+ }
376
+ return { stopReason: "end_turn" };
377
+ case "error_max_budget_usd":
378
+ case "error_max_turns":
379
+ case "error_max_structured_output_retries":
380
+ if (message.is_error) {
381
+ throw RequestError.internalError(undefined, message.errors.join(", ") || message.subtype);
382
+ }
383
+ return { stopReason: "max_turn_requests" };
384
+ default:
385
+ unreachable(message, this.logger);
386
+ break;
387
+ }
388
+ break;
389
+ }
390
+ case "stream_event": {
391
+ this.logger.debug("Stream event", { eventType: message.event?.type });
392
+ for (const notification of streamEventToAcpNotifications(message, params.sessionId, this.toolUseCache, this.fileContentCache, this.client, this.logger)) {
393
+ await this.client.sessionUpdate(notification);
394
+ this.appendNotification(params.sessionId, notification);
395
+ }
396
+ break;
397
+ }
398
+ case "user":
399
+ case "assistant": {
400
+ if (this.sessions[params.sessionId].cancelled) {
401
+ break;
402
+ }
403
+ // Slash commands like /compact can generate invalid output... doesn't match
404
+ // their own docs: https://docs.anthropic.com/en/docs/claude-code/sdk/sdk-slash-commands#%2Fcompact-compact-conversation-history
405
+ if (typeof message.message.content === "string" &&
406
+ message.message.content.includes("<local-command-stdout>")) {
407
+ this.logger.info(message.message.content);
408
+ break;
409
+ }
410
+ if (typeof message.message.content === "string" &&
411
+ message.message.content.includes("<local-command-stderr>")) {
412
+ this.logger.error(message.message.content);
413
+ break;
414
+ }
415
+ // Skip these user messages for now, since they seem to just be messages we don't want in the feed
416
+ if (message.type === "user" &&
417
+ (typeof message.message.content === "string" ||
418
+ (Array.isArray(message.message.content) &&
419
+ message.message.content.length === 1 &&
420
+ message.message.content[0].type === "text"))) {
421
+ break;
422
+ }
423
+ if (message.type === "assistant" &&
424
+ message.message.model === "<synthetic>" &&
425
+ Array.isArray(message.message.content) &&
426
+ message.message.content.length === 1 &&
427
+ message.message.content[0].type === "text" &&
428
+ message.message.content[0].text.includes("Please run /login")) {
429
+ throw RequestError.authRequired();
430
+ }
431
+ // For assistant messages, text/thinking are normally streamed via stream_event.
432
+ // But some gateways (like LiteLLM) don't stream, so we process all content.
433
+ const content = message.message.content;
434
+ for (const notification of toAcpNotifications(content, message.message.role, params.sessionId, this.toolUseCache, this.fileContentCache, this.client, this.logger)) {
435
+ await this.client.sessionUpdate(notification);
436
+ this.appendNotification(params.sessionId, notification);
437
+ }
438
+ break;
439
+ }
440
+ case "tool_progress":
441
+ break;
442
+ case "auth_status":
443
+ break;
444
+ default:
445
+ unreachable(message, this.logger);
446
+ break;
447
+ }
448
+ }
449
+ throw new Error("Session did not end in result");
450
+ }
451
+ async cancel(params) {
452
+ if (!this.sessions[params.sessionId]) {
453
+ throw new Error("Session not found");
454
+ }
455
+ this.sessions[params.sessionId].cancelled = true;
456
+ await this.sessions[params.sessionId].query.interrupt();
457
+ }
458
+ async setSessionModel(params) {
459
+ if (!this.sessions[params.sessionId]) {
460
+ throw new Error("Session not found");
461
+ }
462
+ await this.sessions[params.sessionId].query.setModel(params.modelId);
463
+ }
464
+ async setSessionMode(params) {
465
+ if (!this.sessions[params.sessionId]) {
466
+ throw new Error("Session not found");
467
+ }
468
+ switch (params.modeId) {
469
+ case "default":
470
+ case "acceptEdits":
471
+ case "bypassPermissions":
472
+ case "plan":
473
+ this.sessions[params.sessionId].permissionMode = params.modeId;
474
+ try {
475
+ await this.sessions[params.sessionId].query.setPermissionMode(params.modeId);
476
+ }
477
+ catch (error) {
478
+ const errorMessage = error instanceof Error && error.message
479
+ ? error.message
480
+ : "Invalid Mode";
481
+ throw new Error(errorMessage);
482
+ }
483
+ return {};
484
+ default:
485
+ throw new Error("Invalid Mode");
486
+ }
487
+ }
488
+ async readTextFile(params) {
489
+ const response = await this.client.readTextFile(params);
490
+ if (!params.limit && !params.line) {
491
+ this.fileContentCache[params.path] = response.content;
492
+ }
493
+ return response;
494
+ }
495
+ async writeTextFile(params) {
496
+ const response = await this.client.writeTextFile(params);
497
+ this.fileContentCache[params.path] = params.content;
498
+ return response;
499
+ }
500
+ /**
501
+ * Load session delegates to resumeSession since we have no need to replay history.
502
+ * Client is responsible for fetching and rendering history from S3.
503
+ */
504
+ async loadSession(params) {
505
+ return this.resumeSession(params);
506
+ }
507
+ canUseTool(sessionId) {
508
+ return async (toolName, toolInput, { suggestions, toolUseID }) => {
509
+ const session = this.sessions[sessionId];
510
+ if (!session) {
511
+ return {
512
+ behavior: "deny",
513
+ message: "Session not found",
514
+ interrupt: true,
515
+ };
516
+ }
517
+ if (toolName === "ExitPlanMode") {
518
+ const response = await this.client.requestPermission({
519
+ options: [
520
+ {
521
+ kind: "allow_always",
522
+ name: "Yes, and auto-accept edits",
523
+ optionId: "acceptEdits",
524
+ },
525
+ {
526
+ kind: "allow_once",
527
+ name: "Yes, and manually approve edits",
528
+ optionId: "default",
529
+ },
530
+ {
531
+ kind: "reject_once",
532
+ name: "No, keep planning",
533
+ optionId: "plan",
534
+ },
535
+ ],
536
+ sessionId,
537
+ toolCall: {
538
+ toolCallId: toolUseID,
539
+ rawInput: toolInput,
540
+ title: toolInfoFromToolUse({ name: toolName, input: toolInput }, this.fileContentCache, this.logger).title,
541
+ },
542
+ });
543
+ if (response.outcome?.outcome === "selected" &&
544
+ (response.outcome.optionId === "default" ||
545
+ response.outcome.optionId === "acceptEdits")) {
546
+ session.permissionMode = response.outcome.optionId;
547
+ await this.client.sessionUpdate({
548
+ sessionId,
549
+ update: {
550
+ sessionUpdate: "current_mode_update",
551
+ currentModeId: response.outcome.optionId,
552
+ },
553
+ });
554
+ return {
555
+ behavior: "allow",
556
+ updatedInput: toolInput,
557
+ updatedPermissions: suggestions ?? [
558
+ {
559
+ type: "setMode",
560
+ mode: response.outcome.optionId,
561
+ destination: "session",
562
+ },
563
+ ],
564
+ };
565
+ }
566
+ else {
567
+ return {
568
+ behavior: "deny",
569
+ message: "User rejected request to exit plan mode.",
570
+ interrupt: true,
571
+ };
572
+ }
573
+ }
574
+ if (session.permissionMode === "bypassPermissions" ||
575
+ (session.permissionMode === "acceptEdits" &&
576
+ EDIT_TOOL_NAMES.includes(toolName))) {
577
+ return {
578
+ behavior: "allow",
579
+ updatedInput: toolInput,
580
+ updatedPermissions: suggestions ?? [
581
+ {
582
+ type: "addRules",
583
+ rules: [{ toolName }],
584
+ behavior: "allow",
585
+ destination: "session",
586
+ },
587
+ ],
588
+ };
589
+ }
590
+ const response = await this.client.requestPermission({
591
+ options: [
592
+ {
593
+ kind: "allow_always",
594
+ name: "Always Allow",
595
+ optionId: "allow_always",
596
+ },
597
+ { kind: "allow_once", name: "Allow", optionId: "allow" },
598
+ { kind: "reject_once", name: "Reject", optionId: "reject" },
599
+ ],
600
+ sessionId,
601
+ toolCall: {
602
+ toolCallId: toolUseID,
603
+ rawInput: toolInput,
604
+ title: toolInfoFromToolUse({ name: toolName, input: toolInput }, this.fileContentCache, this.logger).title,
605
+ },
606
+ });
607
+ if (response.outcome?.outcome === "selected" &&
608
+ (response.outcome.optionId === "allow" ||
609
+ response.outcome.optionId === "allow_always")) {
610
+ // If Claude Code has suggestions, it will update their settings already
611
+ if (response.outcome.optionId === "allow_always") {
612
+ return {
613
+ behavior: "allow",
614
+ updatedInput: toolInput,
615
+ updatedPermissions: suggestions ?? [
616
+ {
617
+ type: "addRules",
618
+ rules: [{ toolName }],
619
+ behavior: "allow",
620
+ destination: "session",
621
+ },
622
+ ],
623
+ };
624
+ }
625
+ return {
626
+ behavior: "allow",
627
+ updatedInput: toolInput,
628
+ };
629
+ }
630
+ else {
631
+ return {
632
+ behavior: "deny",
633
+ message: "User refused permission to run tool",
634
+ interrupt: true,
635
+ };
636
+ }
637
+ };
638
+ }
639
+ /**
640
+ * Handle custom extension methods.
641
+ * Per ACP spec, extension methods start with underscore.
642
+ */
643
+ async extMethod(method, params) {
644
+ if (method === "_posthog/session/resume") {
645
+ await this.resumeSession(params);
646
+ return {};
647
+ }
648
+ throw RequestError.methodNotFound(method);
649
+ }
650
+ /**
651
+ * Resume a session without replaying history.
652
+ * Client is responsible for fetching and rendering history from S3.
653
+ * This basically implemetns the ACP session/resume RFD:
654
+ * https://agentclientprotocol.com/rfds/session-resume
655
+ */
656
+ async resumeSession(params) {
657
+ const { sessionId } = params;
658
+ // Extract persistence config and SDK session ID from _meta
659
+ const persistence = params._meta?.persistence;
660
+ const sdkSessionId = params._meta?.sdkSessionId;
661
+ if (!this.sessions[sessionId]) {
662
+ const input = new Pushable();
663
+ const mcpServers = {};
664
+ if (Array.isArray(params.mcpServers)) {
665
+ for (const server of params.mcpServers) {
666
+ if ("type" in server) {
667
+ mcpServers[server.name] = {
668
+ type: server.type,
669
+ url: server.url,
670
+ headers: server.headers
671
+ ? Object.fromEntries(server.headers.map((e) => [e.name, e.value]))
672
+ : undefined,
673
+ };
674
+ }
675
+ else {
676
+ mcpServers[server.name] = {
677
+ type: "stdio",
678
+ command: server.command,
679
+ args: server.args,
680
+ env: server.env
681
+ ? Object.fromEntries(server.env.map((e) => [e.name, e.value]))
682
+ : undefined,
683
+ };
684
+ }
685
+ }
686
+ }
687
+ const server = createMcpServer(this, sessionId, this.clientCapabilities);
688
+ mcpServers.acp = {
689
+ type: "sdk",
690
+ name: "acp",
691
+ instance: server,
692
+ };
693
+ const permissionMode = "default";
694
+ const options = {
695
+ cwd: params.cwd,
696
+ includePartialMessages: true,
697
+ mcpServers,
698
+ systemPrompt: { type: "preset", preset: "claude_code" },
699
+ settingSources: ["user", "project", "local"],
700
+ allowDangerouslySkipPermissions: !IS_ROOT,
701
+ permissionMode,
702
+ canUseTool: this.canUseTool(sessionId),
703
+ stderr: (err) => this.logger.error(err),
704
+ executable: process.execPath,
705
+ ...(process.env.CLAUDE_CODE_EXECUTABLE && {
706
+ pathToClaudeCodeExecutable: process.env.CLAUDE_CODE_EXECUTABLE,
707
+ }),
708
+ // Resume from SDK session if available
709
+ ...(sdkSessionId && { resume: sdkSessionId }),
710
+ hooks: {
711
+ PostToolUse: [
712
+ {
713
+ hooks: [createPostToolUseHook(this.logger)],
714
+ },
715
+ ],
716
+ },
717
+ };
718
+ // Clear statsig cache before creating query to avoid input_examples bug
719
+ clearStatsigCache();
720
+ const q = query({
721
+ prompt: input,
722
+ options,
723
+ });
724
+ const availableCommands = await getAvailableSlashCommands(q);
725
+ const newSession = this.createSession(sessionId, q, input, permissionMode);
726
+ // Store SDK session ID if resuming
727
+ if (sdkSessionId) {
728
+ newSession.sdkSessionId = sdkSessionId;
729
+ }
730
+ // Register for future persistence
731
+ if (persistence && this.sessionStore) {
732
+ this.sessionStore.register(sessionId, persistence);
733
+ }
734
+ setTimeout(() => {
735
+ this.client.sessionUpdate({
736
+ sessionId,
737
+ update: {
738
+ sessionUpdate: "available_commands_update",
739
+ availableCommands,
740
+ },
741
+ });
742
+ }, 0);
743
+ }
744
+ return {};
745
+ }
746
+ }
747
+ async function getAvailableModels(query) {
748
+ const models = await query.supportedModels();
749
+ // Query doesn't give us access to the currently selected model, so we just choose the first model in the list.
750
+ const currentModel = models[0];
751
+ await query.setModel(currentModel.value);
752
+ const availableModels = models.map((model) => ({
753
+ modelId: model.value,
754
+ name: model.displayName,
755
+ description: model.description,
756
+ }));
757
+ return {
758
+ availableModels,
759
+ currentModelId: currentModel.value,
760
+ };
761
+ }
762
+ async function getAvailableSlashCommands(query) {
763
+ const UNSUPPORTED_COMMANDS = [
764
+ "context",
765
+ "cost",
766
+ "login",
767
+ "logout",
768
+ "output-style:new",
769
+ "release-notes",
770
+ "todos",
771
+ ];
772
+ const commands = await query.supportedCommands();
773
+ return commands
774
+ .map((command) => {
775
+ const input = command.argumentHint
776
+ ? { hint: command.argumentHint }
777
+ : null;
778
+ let name = command.name;
779
+ if (command.name.endsWith(" (MCP)")) {
780
+ name = `mcp:${name.replace(" (MCP)", "")}`;
781
+ }
782
+ return {
783
+ name,
784
+ description: command.description || "",
785
+ input,
786
+ };
787
+ })
788
+ .filter((command) => !UNSUPPORTED_COMMANDS.includes(command.name));
789
+ }
790
+ function formatUriAsLink(uri) {
791
+ try {
792
+ if (uri.startsWith("file://")) {
793
+ const path = uri.slice(7); // Remove "file://"
794
+ const name = path.split("/").pop() || path;
795
+ return `[@${name}](${uri})`;
796
+ }
797
+ else if (uri.startsWith("zed://")) {
798
+ const parts = uri.split("/");
799
+ const name = parts[parts.length - 1] || uri;
800
+ return `[@${name}](${uri})`;
801
+ }
802
+ return uri;
803
+ }
804
+ catch {
805
+ return uri;
806
+ }
807
+ }
808
+ function promptToClaude(prompt) {
809
+ const content = [];
810
+ const context = [];
811
+ for (const chunk of prompt.prompt) {
812
+ switch (chunk.type) {
813
+ case "text": {
814
+ let text = chunk.text;
815
+ // change /mcp:server:command args -> /server:command (MCP) args
816
+ const mcpMatch = text.match(/^\/mcp:([^:\s]+):(\S+)(\s+.*)?$/);
817
+ if (mcpMatch) {
818
+ const [, server, command, args] = mcpMatch;
819
+ text = `/${server}:${command} (MCP)${args || ""}`;
820
+ }
821
+ content.push({ type: "text", text });
822
+ break;
823
+ }
824
+ case "resource_link": {
825
+ const formattedUri = formatUriAsLink(chunk.uri);
826
+ content.push({
827
+ type: "text",
828
+ text: formattedUri,
829
+ });
830
+ break;
831
+ }
832
+ case "resource": {
833
+ if ("text" in chunk.resource) {
834
+ const formattedUri = formatUriAsLink(chunk.resource.uri);
835
+ content.push({
836
+ type: "text",
837
+ text: formattedUri,
838
+ });
839
+ context.push({
840
+ type: "text",
841
+ text: `\n<context ref="${chunk.resource.uri}">\n${chunk.resource.text}\n</context>`,
842
+ });
843
+ }
844
+ // Ignore blob resources (unsupported)
845
+ break;
846
+ }
847
+ case "image":
848
+ if (chunk.data) {
849
+ content.push({
850
+ type: "image",
851
+ source: {
852
+ type: "base64",
853
+ data: chunk.data,
854
+ media_type: chunk.mimeType,
855
+ },
856
+ });
857
+ }
858
+ else if (chunk.uri?.startsWith("http")) {
859
+ content.push({
860
+ type: "image",
861
+ source: {
862
+ type: "url",
863
+ url: chunk.uri,
864
+ },
865
+ });
866
+ }
867
+ break;
868
+ }
869
+ }
870
+ content.push(...context);
871
+ return {
872
+ type: "user",
873
+ message: {
874
+ role: "user",
875
+ content: content,
876
+ },
877
+ session_id: prompt.sessionId,
878
+ parent_tool_use_id: null,
879
+ };
880
+ }
881
+ /**
882
+ * Convert an SDKAssistantMessage (Claude) to a SessionNotification (ACP).
883
+ * Only handles text, image, and thinking chunks for now.
884
+ */
885
+ function toAcpNotifications(content, role, sessionId, toolUseCache, fileContentCache, client, logger) {
886
+ if (typeof content === "string") {
887
+ return [
888
+ {
889
+ sessionId,
890
+ update: {
891
+ sessionUpdate: role === "assistant" ? "agent_message_chunk" : "user_message_chunk",
892
+ content: {
893
+ type: "text",
894
+ text: content,
895
+ },
896
+ },
897
+ },
898
+ ];
899
+ }
900
+ const output = [];
901
+ // Only handle the first chunk for streaming; extend as needed for batching
902
+ for (const chunk of content) {
903
+ let update = null;
904
+ switch (chunk.type) {
905
+ case "text":
906
+ case "text_delta":
907
+ update = {
908
+ sessionUpdate: role === "assistant" ? "agent_message_chunk" : "user_message_chunk",
909
+ content: {
910
+ type: "text",
911
+ text: chunk.text,
912
+ },
913
+ };
914
+ break;
915
+ case "image":
916
+ update = {
917
+ sessionUpdate: role === "assistant" ? "agent_message_chunk" : "user_message_chunk",
918
+ content: {
919
+ type: "image",
920
+ data: chunk.source.type === "base64" ? chunk.source.data : "",
921
+ mimeType: chunk.source.type === "base64" ? chunk.source.media_type : "",
922
+ uri: chunk.source.type === "url" ? chunk.source.url : undefined,
923
+ },
924
+ };
925
+ break;
926
+ case "thinking":
927
+ case "thinking_delta":
928
+ update = {
929
+ sessionUpdate: "agent_thought_chunk",
930
+ content: {
931
+ type: "text",
932
+ text: chunk.thinking,
933
+ },
934
+ };
935
+ break;
936
+ case "tool_use":
937
+ case "server_tool_use":
938
+ case "mcp_tool_use": {
939
+ toolUseCache[chunk.id] = chunk;
940
+ if (chunk.name === "TodoWrite") {
941
+ // @ts-expect-error - sometimes input is empty object
942
+ if (Array.isArray(chunk.input.todos)) {
943
+ update = {
944
+ sessionUpdate: "plan",
945
+ entries: planEntries(chunk.input),
946
+ };
947
+ }
948
+ }
949
+ else {
950
+ // Register hook callback to receive the structured output from the hook
951
+ registerHookCallback(chunk.id, {
952
+ onPostToolUseHook: async (toolUseId, _toolInput, toolResponse) => {
953
+ const toolUse = toolUseCache[toolUseId];
954
+ if (toolUse) {
955
+ const update = {
956
+ _meta: {
957
+ claudeCode: {
958
+ toolResponse,
959
+ toolName: toolUse.name,
960
+ },
961
+ },
962
+ toolCallId: toolUseId,
963
+ sessionUpdate: "tool_call_update",
964
+ };
965
+ await client.sessionUpdate({
966
+ sessionId,
967
+ update,
968
+ });
969
+ }
970
+ else {
971
+ logger.error(`[claude-code-acp] Got a tool response for tool use that wasn't tracked: ${toolUseId}`);
972
+ }
973
+ },
974
+ });
975
+ let rawInput;
976
+ try {
977
+ rawInput = JSON.parse(JSON.stringify(chunk.input));
978
+ }
979
+ catch {
980
+ // ignore if we can't turn it to JSON
981
+ }
982
+ update = {
983
+ _meta: {
984
+ claudeCode: {
985
+ toolName: chunk.name,
986
+ },
987
+ },
988
+ toolCallId: chunk.id,
989
+ sessionUpdate: "tool_call",
990
+ rawInput,
991
+ status: "pending",
992
+ ...toolInfoFromToolUse(chunk, fileContentCache, logger),
993
+ };
994
+ }
995
+ break;
996
+ }
997
+ case "tool_result":
998
+ case "tool_search_tool_result":
999
+ case "web_fetch_tool_result":
1000
+ case "web_search_tool_result":
1001
+ case "code_execution_tool_result":
1002
+ case "bash_code_execution_tool_result":
1003
+ case "text_editor_code_execution_tool_result":
1004
+ case "mcp_tool_result": {
1005
+ const toolUse = toolUseCache[chunk.tool_use_id];
1006
+ if (!toolUse) {
1007
+ logger.error(`[claude-code-acp] Got a tool result for tool use that wasn't tracked: ${chunk.tool_use_id}`);
1008
+ break;
1009
+ }
1010
+ if (toolUse.name !== "TodoWrite") {
1011
+ update = {
1012
+ _meta: {
1013
+ claudeCode: {
1014
+ toolName: toolUse.name,
1015
+ },
1016
+ },
1017
+ toolCallId: chunk.tool_use_id,
1018
+ sessionUpdate: "tool_call_update",
1019
+ status: "is_error" in chunk && chunk.is_error ? "failed" : "completed",
1020
+ ...toolUpdateFromToolResult(chunk, toolUseCache[chunk.tool_use_id]),
1021
+ };
1022
+ }
1023
+ break;
1024
+ }
1025
+ case "document":
1026
+ case "search_result":
1027
+ case "redacted_thinking":
1028
+ case "input_json_delta":
1029
+ case "citations_delta":
1030
+ case "signature_delta":
1031
+ case "container_upload":
1032
+ break;
1033
+ default:
1034
+ unreachable(chunk, logger);
1035
+ break;
1036
+ }
1037
+ if (update) {
1038
+ output.push({ sessionId, update });
1039
+ }
1040
+ }
1041
+ return output;
1042
+ }
1043
+ function streamEventToAcpNotifications(message, sessionId, toolUseCache, fileContentCache, client, logger) {
1044
+ const event = message.event;
1045
+ switch (event.type) {
1046
+ case "content_block_start":
1047
+ return toAcpNotifications([event.content_block], "assistant", sessionId, toolUseCache, fileContentCache, client, logger);
1048
+ case "content_block_delta":
1049
+ return toAcpNotifications([event.delta], "assistant", sessionId, toolUseCache, fileContentCache, client, logger);
1050
+ // No content
1051
+ case "message_start":
1052
+ case "message_delta":
1053
+ case "message_stop":
1054
+ case "content_block_stop":
1055
+ return [];
1056
+ default:
1057
+ unreachable(event, logger);
1058
+ return [];
1059
+ }
1060
+ }
1061
+ function createAcpConnection(config = {}) {
1062
+ const logger = new Logger({ debug: true, prefix: "[AcpConnection]" });
1063
+ const streams = createBidirectionalStreams();
1064
+ const { sessionStore } = config;
1065
+ // Tap both streams for automatic persistence
1066
+ // All messages (bidirectional) will be persisted as they flow through
1067
+ let agentWritable = streams.agent.writable;
1068
+ let clientWritable = streams.client.writable;
1069
+ if (config.sessionId && sessionStore) {
1070
+ // Register session for persistence BEFORE tapping streams
1071
+ // This ensures all messages from the start get persisted
1072
+ if (!sessionStore.isRegistered(config.sessionId)) {
1073
+ sessionStore.register(config.sessionId, {
1074
+ taskId: config.taskId ?? config.sessionId,
1075
+ runId: config.sessionId,
1076
+ logUrl: "", // Will be updated when we get the real logUrl
1077
+ });
1078
+ }
1079
+ // Tap agent→client stream
1080
+ agentWritable = createTappedWritableStream(streams.agent.writable, {
1081
+ onMessage: (line) => {
1082
+ sessionStore.appendRawLine(config.sessionId, line);
1083
+ },
1084
+ logger,
1085
+ });
1086
+ // Tap client→agent stream
1087
+ clientWritable = createTappedWritableStream(streams.client.writable, {
1088
+ onMessage: (line) => {
1089
+ sessionStore.appendRawLine(config.sessionId, line);
1090
+ },
1091
+ logger,
1092
+ });
1093
+ }
1094
+ else {
1095
+ logger.info("Tapped streams NOT enabled", {
1096
+ hasSessionId: !!config.sessionId,
1097
+ hasSessionStore: !!sessionStore,
1098
+ });
1099
+ }
1100
+ const agentStream = ndJsonStream(agentWritable, streams.agent.readable);
1101
+ const agentConnection = new AgentSideConnection((client) => new ClaudeAcpAgent(client, sessionStore), agentStream);
1102
+ return {
1103
+ agentConnection,
1104
+ clientStreams: {
1105
+ readable: streams.client.readable,
1106
+ writable: clientWritable,
1107
+ },
1108
+ };
1109
+ }
1110
+
1111
+ export { ClaudeAcpAgent, createAcpConnection, promptToClaude, streamEventToAcpNotifications, toAcpNotifications };
1112
+ //# sourceMappingURL=claude.js.map