@posthog/agent 1.25.0 → 1.27.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 (573) hide show
  1. package/dist/index.d.ts +1274 -20
  2. package/dist/index.js +7296 -11
  3. package/dist/index.js.map +1 -1
  4. package/package.json +6 -12
  5. package/src/adapters/claude/claude.ts +21 -5
  6. package/src/adapters/claude/tools.ts +8 -1
  7. package/src/agent.ts +250 -1
  8. package/src/session-store.ts +18 -3
  9. package/src/types.ts +1 -1
  10. package/src/worktree-manager.ts +4 -7
  11. package/dist/_virtual/_commonjsHelpers.js +0 -6
  12. package/dist/_virtual/_commonjsHelpers.js.map +0 -1
  13. package/dist/_virtual/additionalItems.js +0 -4
  14. package/dist/_virtual/additionalItems.js.map +0 -1
  15. package/dist/_virtual/additionalProperties.js +0 -4
  16. package/dist/_virtual/additionalProperties.js.map +0 -1
  17. package/dist/_virtual/ajv.js +0 -4
  18. package/dist/_virtual/ajv.js.map +0 -1
  19. package/dist/_virtual/allOf.js +0 -4
  20. package/dist/_virtual/allOf.js.map +0 -1
  21. package/dist/_virtual/anyOf.js +0 -4
  22. package/dist/_virtual/anyOf.js.map +0 -1
  23. package/dist/_virtual/applicability.js +0 -4
  24. package/dist/_virtual/applicability.js.map +0 -1
  25. package/dist/_virtual/boolSchema.js +0 -4
  26. package/dist/_virtual/boolSchema.js.map +0 -1
  27. package/dist/_virtual/code.js +0 -4
  28. package/dist/_virtual/code.js.map +0 -1
  29. package/dist/_virtual/code2.js +0 -4
  30. package/dist/_virtual/code2.js.map +0 -1
  31. package/dist/_virtual/const.js +0 -4
  32. package/dist/_virtual/const.js.map +0 -1
  33. package/dist/_virtual/contains.js +0 -4
  34. package/dist/_virtual/contains.js.map +0 -1
  35. package/dist/_virtual/core.js +0 -4
  36. package/dist/_virtual/core.js.map +0 -1
  37. package/dist/_virtual/dataType.js +0 -4
  38. package/dist/_virtual/dataType.js.map +0 -1
  39. package/dist/_virtual/defaults.js +0 -4
  40. package/dist/_virtual/defaults.js.map +0 -1
  41. package/dist/_virtual/dependencies.js +0 -4
  42. package/dist/_virtual/dependencies.js.map +0 -1
  43. package/dist/_virtual/draft7.js +0 -4
  44. package/dist/_virtual/draft7.js.map +0 -1
  45. package/dist/_virtual/enum.js +0 -4
  46. package/dist/_virtual/enum.js.map +0 -1
  47. package/dist/_virtual/equal.js +0 -4
  48. package/dist/_virtual/equal.js.map +0 -1
  49. package/dist/_virtual/errors.js +0 -4
  50. package/dist/_virtual/errors.js.map +0 -1
  51. package/dist/_virtual/format.js +0 -4
  52. package/dist/_virtual/format.js.map +0 -1
  53. package/dist/_virtual/formats.js +0 -4
  54. package/dist/_virtual/formats.js.map +0 -1
  55. package/dist/_virtual/id.js +0 -4
  56. package/dist/_virtual/id.js.map +0 -1
  57. package/dist/_virtual/if.js +0 -4
  58. package/dist/_virtual/if.js.map +0 -1
  59. package/dist/_virtual/index.js +0 -4
  60. package/dist/_virtual/index.js.map +0 -1
  61. package/dist/_virtual/index10.js +0 -4
  62. package/dist/_virtual/index10.js.map +0 -1
  63. package/dist/_virtual/index11.js +0 -4
  64. package/dist/_virtual/index11.js.map +0 -1
  65. package/dist/_virtual/index2.js +0 -4
  66. package/dist/_virtual/index2.js.map +0 -1
  67. package/dist/_virtual/index3.js +0 -4
  68. package/dist/_virtual/index3.js.map +0 -1
  69. package/dist/_virtual/index4.js +0 -4
  70. package/dist/_virtual/index4.js.map +0 -1
  71. package/dist/_virtual/index5.js +0 -4
  72. package/dist/_virtual/index5.js.map +0 -1
  73. package/dist/_virtual/index6.js +0 -4
  74. package/dist/_virtual/index6.js.map +0 -1
  75. package/dist/_virtual/index7.js +0 -4
  76. package/dist/_virtual/index7.js.map +0 -1
  77. package/dist/_virtual/index8.js +0 -4
  78. package/dist/_virtual/index8.js.map +0 -1
  79. package/dist/_virtual/index9.js +0 -4
  80. package/dist/_virtual/index9.js.map +0 -1
  81. package/dist/_virtual/items.js +0 -4
  82. package/dist/_virtual/items.js.map +0 -1
  83. package/dist/_virtual/items2020.js +0 -4
  84. package/dist/_virtual/items2020.js.map +0 -1
  85. package/dist/_virtual/keyword.js +0 -4
  86. package/dist/_virtual/keyword.js.map +0 -1
  87. package/dist/_virtual/limit.js +0 -4
  88. package/dist/_virtual/limit.js.map +0 -1
  89. package/dist/_virtual/limitItems.js +0 -4
  90. package/dist/_virtual/limitItems.js.map +0 -1
  91. package/dist/_virtual/limitLength.js +0 -4
  92. package/dist/_virtual/limitLength.js.map +0 -1
  93. package/dist/_virtual/limitNumber.js +0 -4
  94. package/dist/_virtual/limitNumber.js.map +0 -1
  95. package/dist/_virtual/limitProperties.js +0 -4
  96. package/dist/_virtual/limitProperties.js.map +0 -1
  97. package/dist/_virtual/metadata.js +0 -4
  98. package/dist/_virtual/metadata.js.map +0 -1
  99. package/dist/_virtual/multipleOf.js +0 -4
  100. package/dist/_virtual/multipleOf.js.map +0 -1
  101. package/dist/_virtual/names.js +0 -4
  102. package/dist/_virtual/names.js.map +0 -1
  103. package/dist/_virtual/not.js +0 -4
  104. package/dist/_virtual/not.js.map +0 -1
  105. package/dist/_virtual/oneOf.js +0 -4
  106. package/dist/_virtual/oneOf.js.map +0 -1
  107. package/dist/_virtual/pattern.js +0 -4
  108. package/dist/_virtual/pattern.js.map +0 -1
  109. package/dist/_virtual/patternProperties.js +0 -4
  110. package/dist/_virtual/patternProperties.js.map +0 -1
  111. package/dist/_virtual/prefixItems.js +0 -4
  112. package/dist/_virtual/prefixItems.js.map +0 -1
  113. package/dist/_virtual/properties.js +0 -4
  114. package/dist/_virtual/properties.js.map +0 -1
  115. package/dist/_virtual/propertyNames.js +0 -4
  116. package/dist/_virtual/propertyNames.js.map +0 -1
  117. package/dist/_virtual/ref.js +0 -4
  118. package/dist/_virtual/ref.js.map +0 -1
  119. package/dist/_virtual/ref_error.js +0 -4
  120. package/dist/_virtual/ref_error.js.map +0 -1
  121. package/dist/_virtual/required.js +0 -4
  122. package/dist/_virtual/required.js.map +0 -1
  123. package/dist/_virtual/resolve.js +0 -4
  124. package/dist/_virtual/resolve.js.map +0 -1
  125. package/dist/_virtual/rules.js +0 -4
  126. package/dist/_virtual/rules.js.map +0 -1
  127. package/dist/_virtual/scope.js +0 -4
  128. package/dist/_virtual/scope.js.map +0 -1
  129. package/dist/_virtual/subschema.js +0 -4
  130. package/dist/_virtual/subschema.js.map +0 -1
  131. package/dist/_virtual/thenElse.js +0 -4
  132. package/dist/_virtual/thenElse.js.map +0 -1
  133. package/dist/_virtual/types.js +0 -4
  134. package/dist/_virtual/types.js.map +0 -1
  135. package/dist/_virtual/ucs2length.js +0 -4
  136. package/dist/_virtual/ucs2length.js.map +0 -1
  137. package/dist/_virtual/uniqueItems.js +0 -4
  138. package/dist/_virtual/uniqueItems.js.map +0 -1
  139. package/dist/_virtual/uri.js +0 -4
  140. package/dist/_virtual/uri.js.map +0 -1
  141. package/dist/_virtual/util.js +0 -4
  142. package/dist/_virtual/util.js.map +0 -1
  143. package/dist/_virtual/validation_error.js +0 -4
  144. package/dist/_virtual/validation_error.js.map +0 -1
  145. package/dist/example-client.d.ts +0 -3
  146. package/dist/example-client.d.ts.map +0 -1
  147. package/dist/example.d.ts +0 -3
  148. package/dist/example.d.ts.map +0 -1
  149. package/dist/index.d.ts.map +0 -1
  150. package/dist/node_modules/@agentclientprotocol/sdk/dist/acp.js +0 -610
  151. package/dist/node_modules/@agentclientprotocol/sdk/dist/acp.js.map +0 -1
  152. package/dist/node_modules/@agentclientprotocol/sdk/dist/schema.js +0 -875
  153. package/dist/node_modules/@agentclientprotocol/sdk/dist/schema.js.map +0 -1
  154. package/dist/node_modules/@agentclientprotocol/sdk/dist/stream.js +0 -66
  155. package/dist/node_modules/@agentclientprotocol/sdk/dist/stream.js.map +0 -1
  156. package/dist/node_modules/@modelcontextprotocol/sdk/dist/esm/server/completable.js +0 -23
  157. package/dist/node_modules/@modelcontextprotocol/sdk/dist/esm/server/completable.js.map +0 -1
  158. package/dist/node_modules/@modelcontextprotocol/sdk/dist/esm/server/index.js +0 -331
  159. package/dist/node_modules/@modelcontextprotocol/sdk/dist/esm/server/index.js.map +0 -1
  160. package/dist/node_modules/@modelcontextprotocol/sdk/dist/esm/server/mcp.js +0 -717
  161. package/dist/node_modules/@modelcontextprotocol/sdk/dist/esm/server/mcp.js.map +0 -1
  162. package/dist/node_modules/@modelcontextprotocol/sdk/dist/esm/server/zod-compat.js +0 -221
  163. package/dist/node_modules/@modelcontextprotocol/sdk/dist/esm/server/zod-compat.js.map +0 -1
  164. package/dist/node_modules/@modelcontextprotocol/sdk/dist/esm/server/zod-json-schema-compat.js +0 -56
  165. package/dist/node_modules/@modelcontextprotocol/sdk/dist/esm/server/zod-json-schema-compat.js.map +0 -1
  166. package/dist/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/protocol.js +0 -440
  167. package/dist/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/protocol.js.map +0 -1
  168. package/dist/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/toolNameValidation.js +0 -94
  169. package/dist/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/toolNameValidation.js.map +0 -1
  170. package/dist/node_modules/@modelcontextprotocol/sdk/dist/esm/types.js +0 -1610
  171. package/dist/node_modules/@modelcontextprotocol/sdk/dist/esm/types.js.map +0 -1
  172. package/dist/node_modules/@modelcontextprotocol/sdk/dist/esm/validation/ajv-provider.js +0 -91
  173. package/dist/node_modules/@modelcontextprotocol/sdk/dist/esm/validation/ajv-provider.js.map +0 -1
  174. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v3/ZodError.js +0 -133
  175. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v3/ZodError.js.map +0 -1
  176. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v3/errors.js +0 -9
  177. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v3/errors.js.map +0 -1
  178. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v3/helpers/errorUtil.js +0 -9
  179. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v3/helpers/errorUtil.js.map +0 -1
  180. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v3/helpers/parseUtil.js +0 -112
  181. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v3/helpers/parseUtil.js.map +0 -1
  182. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v3/helpers/util.js +0 -136
  183. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v3/helpers/util.js.map +0 -1
  184. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v3/locales/en.js +0 -112
  185. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v3/locales/en.js.map +0 -1
  186. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v3/types.js +0 -3297
  187. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v3/types.js.map +0 -1
  188. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/classic/errors.js +0 -44
  189. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/classic/errors.js.map +0 -1
  190. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/classic/iso.js +0 -36
  191. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/classic/iso.js.map +0 -1
  192. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/classic/parse.js +0 -10
  193. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/classic/parse.js.map +0 -1
  194. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/classic/schemas.js +0 -657
  195. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/classic/schemas.js.map +0 -1
  196. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/core/api.js +0 -449
  197. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/core/api.js.map +0 -1
  198. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/core/checks.js +0 -413
  199. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/core/checks.js.map +0 -1
  200. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/core/core.js +0 -57
  201. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/core/core.js.map +0 -1
  202. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/core/doc.js +0 -38
  203. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/core/doc.js.map +0 -1
  204. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/core/errors.js +0 -86
  205. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/core/errors.js.map +0 -1
  206. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/core/parse.js +0 -61
  207. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/core/parse.js.map +0 -1
  208. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/core/regexes.js +0 -80
  209. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/core/regexes.js.map +0 -1
  210. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/core/registries.js +0 -52
  211. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/core/registries.js.map +0 -1
  212. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/core/schemas.js +0 -1307
  213. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/core/schemas.js.map +0 -1
  214. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/core/to-json-schema.js +0 -842
  215. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/core/to-json-schema.js.map +0 -1
  216. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/core/util.js +0 -335
  217. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/core/util.js.map +0 -1
  218. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/core/versions.js +0 -8
  219. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/core/versions.js.map +0 -1
  220. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/mini/schemas.js +0 -51
  221. package/dist/node_modules/@modelcontextprotocol/sdk/node_modules/zod/v4/mini/schemas.js.map +0 -1
  222. package/dist/node_modules/ajv/dist/ajv.js +0 -69
  223. package/dist/node_modules/ajv/dist/ajv.js.map +0 -1
  224. package/dist/node_modules/ajv/dist/compile/codegen/code.js +0 -169
  225. package/dist/node_modules/ajv/dist/compile/codegen/code.js.map +0 -1
  226. package/dist/node_modules/ajv/dist/compile/codegen/index.js +0 -712
  227. package/dist/node_modules/ajv/dist/compile/codegen/index.js.map +0 -1
  228. package/dist/node_modules/ajv/dist/compile/codegen/scope.js +0 -157
  229. package/dist/node_modules/ajv/dist/compile/codegen/scope.js.map +0 -1
  230. package/dist/node_modules/ajv/dist/compile/errors.js +0 -140
  231. package/dist/node_modules/ajv/dist/compile/errors.js.map +0 -1
  232. package/dist/node_modules/ajv/dist/compile/index.js +0 -253
  233. package/dist/node_modules/ajv/dist/compile/index.js.map +0 -1
  234. package/dist/node_modules/ajv/dist/compile/names.js +0 -40
  235. package/dist/node_modules/ajv/dist/compile/names.js.map +0 -1
  236. package/dist/node_modules/ajv/dist/compile/ref_error.js +0 -25
  237. package/dist/node_modules/ajv/dist/compile/ref_error.js.map +0 -1
  238. package/dist/node_modules/ajv/dist/compile/resolve.js +0 -162
  239. package/dist/node_modules/ajv/dist/compile/resolve.js.map +0 -1
  240. package/dist/node_modules/ajv/dist/compile/rules.js +0 -29
  241. package/dist/node_modules/ajv/dist/compile/rules.js.map +0 -1
  242. package/dist/node_modules/ajv/dist/compile/util.js +0 -183
  243. package/dist/node_modules/ajv/dist/compile/util.js.map +0 -1
  244. package/dist/node_modules/ajv/dist/compile/validate/applicability.js +0 -30
  245. package/dist/node_modules/ajv/dist/compile/validate/applicability.js.map +0 -1
  246. package/dist/node_modules/ajv/dist/compile/validate/boolSchema.js +0 -64
  247. package/dist/node_modules/ajv/dist/compile/validate/boolSchema.js.map +0 -1
  248. package/dist/node_modules/ajv/dist/compile/validate/dataType.js +0 -213
  249. package/dist/node_modules/ajv/dist/compile/validate/dataType.js.map +0 -1
  250. package/dist/node_modules/ajv/dist/compile/validate/defaults.js +0 -49
  251. package/dist/node_modules/ajv/dist/compile/validate/defaults.js.map +0 -1
  252. package/dist/node_modules/ajv/dist/compile/validate/index.js +0 -544
  253. package/dist/node_modules/ajv/dist/compile/validate/index.js.map +0 -1
  254. package/dist/node_modules/ajv/dist/compile/validate/keyword.js +0 -139
  255. package/dist/node_modules/ajv/dist/compile/validate/keyword.js.map +0 -1
  256. package/dist/node_modules/ajv/dist/compile/validate/subschema.js +0 -95
  257. package/dist/node_modules/ajv/dist/compile/validate/subschema.js.map +0 -1
  258. package/dist/node_modules/ajv/dist/core.js +0 -639
  259. package/dist/node_modules/ajv/dist/core.js.map +0 -1
  260. package/dist/node_modules/ajv/dist/refs/data.json.js +0 -31
  261. package/dist/node_modules/ajv/dist/refs/data.json.js.map +0 -1
  262. package/dist/node_modules/ajv/dist/refs/json-schema-draft-07.json.js +0 -254
  263. package/dist/node_modules/ajv/dist/refs/json-schema-draft-07.json.js.map +0 -1
  264. package/dist/node_modules/ajv/dist/runtime/equal.js +0 -9
  265. package/dist/node_modules/ajv/dist/runtime/equal.js.map +0 -1
  266. package/dist/node_modules/ajv/dist/runtime/ucs2length.js +0 -25
  267. package/dist/node_modules/ajv/dist/runtime/ucs2length.js.map +0 -1
  268. package/dist/node_modules/ajv/dist/runtime/uri.js +0 -8
  269. package/dist/node_modules/ajv/dist/runtime/uri.js.map +0 -1
  270. package/dist/node_modules/ajv/dist/runtime/validation_error.js +0 -22
  271. package/dist/node_modules/ajv/dist/runtime/validation_error.js.map +0 -1
  272. package/dist/node_modules/ajv/dist/vocabularies/applicator/additionalItems.js +0 -53
  273. package/dist/node_modules/ajv/dist/vocabularies/applicator/additionalItems.js.map +0 -1
  274. package/dist/node_modules/ajv/dist/vocabularies/applicator/additionalProperties.js +0 -112
  275. package/dist/node_modules/ajv/dist/vocabularies/applicator/additionalProperties.js.map +0 -1
  276. package/dist/node_modules/ajv/dist/vocabularies/applicator/allOf.js +0 -26
  277. package/dist/node_modules/ajv/dist/vocabularies/applicator/allOf.js.map +0 -1
  278. package/dist/node_modules/ajv/dist/vocabularies/applicator/anyOf.js +0 -14
  279. package/dist/node_modules/ajv/dist/vocabularies/applicator/anyOf.js.map +0 -1
  280. package/dist/node_modules/ajv/dist/vocabularies/applicator/contains.js +0 -99
  281. package/dist/node_modules/ajv/dist/vocabularies/applicator/contains.js.map +0 -1
  282. package/dist/node_modules/ajv/dist/vocabularies/applicator/dependencies.js +0 -93
  283. package/dist/node_modules/ajv/dist/vocabularies/applicator/dependencies.js.map +0 -1
  284. package/dist/node_modules/ajv/dist/vocabularies/applicator/if.js +0 -70
  285. package/dist/node_modules/ajv/dist/vocabularies/applicator/if.js.map +0 -1
  286. package/dist/node_modules/ajv/dist/vocabularies/applicator/index.js +0 -77
  287. package/dist/node_modules/ajv/dist/vocabularies/applicator/index.js.map +0 -1
  288. package/dist/node_modules/ajv/dist/vocabularies/applicator/items.js +0 -57
  289. package/dist/node_modules/ajv/dist/vocabularies/applicator/items.js.map +0 -1
  290. package/dist/node_modules/ajv/dist/vocabularies/applicator/items2020.js +0 -37
  291. package/dist/node_modules/ajv/dist/vocabularies/applicator/items2020.js.map +0 -1
  292. package/dist/node_modules/ajv/dist/vocabularies/applicator/not.js +0 -29
  293. package/dist/node_modules/ajv/dist/vocabularies/applicator/not.js.map +0 -1
  294. package/dist/node_modules/ajv/dist/vocabularies/applicator/oneOf.js +0 -64
  295. package/dist/node_modules/ajv/dist/vocabularies/applicator/oneOf.js.map +0 -1
  296. package/dist/node_modules/ajv/dist/vocabularies/applicator/patternProperties.js +0 -80
  297. package/dist/node_modules/ajv/dist/vocabularies/applicator/patternProperties.js.map +0 -1
  298. package/dist/node_modules/ajv/dist/vocabularies/applicator/prefixItems.js +0 -15
  299. package/dist/node_modules/ajv/dist/vocabularies/applicator/prefixItems.js.map +0 -1
  300. package/dist/node_modules/ajv/dist/vocabularies/applicator/properties.js +0 -61
  301. package/dist/node_modules/ajv/dist/vocabularies/applicator/properties.js.map +0 -1
  302. package/dist/node_modules/ajv/dist/vocabularies/applicator/propertyNames.js +0 -42
  303. package/dist/node_modules/ajv/dist/vocabularies/applicator/propertyNames.js.map +0 -1
  304. package/dist/node_modules/ajv/dist/vocabularies/applicator/thenElse.js +0 -16
  305. package/dist/node_modules/ajv/dist/vocabularies/applicator/thenElse.js.map +0 -1
  306. package/dist/node_modules/ajv/dist/vocabularies/code.js +0 -146
  307. package/dist/node_modules/ajv/dist/vocabularies/code.js.map +0 -1
  308. package/dist/node_modules/ajv/dist/vocabularies/core/id.js +0 -11
  309. package/dist/node_modules/ajv/dist/vocabularies/core/id.js.map +0 -1
  310. package/dist/node_modules/ajv/dist/vocabularies/core/index.js +0 -21
  311. package/dist/node_modules/ajv/dist/vocabularies/core/index.js.map +0 -1
  312. package/dist/node_modules/ajv/dist/vocabularies/core/ref.js +0 -131
  313. package/dist/node_modules/ajv/dist/vocabularies/core/ref.js.map +0 -1
  314. package/dist/node_modules/ajv/dist/vocabularies/discriminator/index.js +0 -113
  315. package/dist/node_modules/ajv/dist/vocabularies/discriminator/index.js.map +0 -1
  316. package/dist/node_modules/ajv/dist/vocabularies/discriminator/types.js +0 -12
  317. package/dist/node_modules/ajv/dist/vocabularies/discriminator/types.js.map +0 -1
  318. package/dist/node_modules/ajv/dist/vocabularies/draft7.js +0 -28
  319. package/dist/node_modules/ajv/dist/vocabularies/draft7.js.map +0 -1
  320. package/dist/node_modules/ajv/dist/vocabularies/format/format.js +0 -94
  321. package/dist/node_modules/ajv/dist/vocabularies/format/format.js.map +0 -1
  322. package/dist/node_modules/ajv/dist/vocabularies/format/index.js +0 -9
  323. package/dist/node_modules/ajv/dist/vocabularies/format/index.js.map +0 -1
  324. package/dist/node_modules/ajv/dist/vocabularies/metadata.js +0 -21
  325. package/dist/node_modules/ajv/dist/vocabularies/metadata.js.map +0 -1
  326. package/dist/node_modules/ajv/dist/vocabularies/validation/const.js +0 -31
  327. package/dist/node_modules/ajv/dist/vocabularies/validation/const.js.map +0 -1
  328. package/dist/node_modules/ajv/dist/vocabularies/validation/enum.js +0 -54
  329. package/dist/node_modules/ajv/dist/vocabularies/validation/enum.js.map +0 -1
  330. package/dist/node_modules/ajv/dist/vocabularies/validation/index.js +0 -54
  331. package/dist/node_modules/ajv/dist/vocabularies/validation/index.js.map +0 -1
  332. package/dist/node_modules/ajv/dist/vocabularies/validation/limitItems.js +0 -26
  333. package/dist/node_modules/ajv/dist/vocabularies/validation/limitItems.js.map +0 -1
  334. package/dist/node_modules/ajv/dist/vocabularies/validation/limitLength.js +0 -33
  335. package/dist/node_modules/ajv/dist/vocabularies/validation/limitLength.js.map +0 -1
  336. package/dist/node_modules/ajv/dist/vocabularies/validation/limitNumber.js +0 -29
  337. package/dist/node_modules/ajv/dist/vocabularies/validation/limitNumber.js.map +0 -1
  338. package/dist/node_modules/ajv/dist/vocabularies/validation/limitProperties.js +0 -26
  339. package/dist/node_modules/ajv/dist/vocabularies/validation/limitProperties.js.map +0 -1
  340. package/dist/node_modules/ajv/dist/vocabularies/validation/multipleOf.js +0 -28
  341. package/dist/node_modules/ajv/dist/vocabularies/validation/multipleOf.js.map +0 -1
  342. package/dist/node_modules/ajv/dist/vocabularies/validation/pattern.js +0 -27
  343. package/dist/node_modules/ajv/dist/vocabularies/validation/pattern.js.map +0 -1
  344. package/dist/node_modules/ajv/dist/vocabularies/validation/required.js +0 -84
  345. package/dist/node_modules/ajv/dist/vocabularies/validation/required.js.map +0 -1
  346. package/dist/node_modules/ajv/dist/vocabularies/validation/uniqueItems.js +0 -72
  347. package/dist/node_modules/ajv/dist/vocabularies/validation/uniqueItems.js.map +0 -1
  348. package/dist/node_modules/ajv-formats/dist/formats.js +0 -212
  349. package/dist/node_modules/ajv-formats/dist/formats.js.map +0 -1
  350. package/dist/node_modules/ajv-formats/dist/index.js +0 -52
  351. package/dist/node_modules/ajv-formats/dist/index.js.map +0 -1
  352. package/dist/node_modules/ajv-formats/dist/limit.js +0 -75
  353. package/dist/node_modules/ajv-formats/dist/limit.js.map +0 -1
  354. package/dist/node_modules/diff/libesm/diff/base.js +0 -256
  355. package/dist/node_modules/diff/libesm/diff/base.js.map +0 -1
  356. package/dist/node_modules/diff/libesm/diff/line.js +0 -64
  357. package/dist/node_modules/diff/libesm/diff/line.js.map +0 -1
  358. package/dist/node_modules/diff/libesm/patch/create.js +0 -185
  359. package/dist/node_modules/diff/libesm/patch/create.js.map +0 -1
  360. package/dist/node_modules/fast-deep-equal/index.js +0 -47
  361. package/dist/node_modules/fast-deep-equal/index.js.map +0 -1
  362. package/dist/node_modules/fast-uri/index.js +0 -347
  363. package/dist/node_modules/fast-uri/index.js.map +0 -1
  364. package/dist/node_modules/fast-uri/lib/schemes.js +0 -255
  365. package/dist/node_modules/fast-uri/lib/schemes.js.map +0 -1
  366. package/dist/node_modules/fast-uri/lib/utils.js +0 -334
  367. package/dist/node_modules/fast-uri/lib/utils.js.map +0 -1
  368. package/dist/node_modules/json-schema-traverse/index.js +0 -98
  369. package/dist/node_modules/json-schema-traverse/index.js.map +0 -1
  370. package/dist/node_modules/uuid/dist/rng.js +0 -14
  371. package/dist/node_modules/uuid/dist/rng.js.map +0 -1
  372. package/dist/node_modules/uuid/dist/stringify.js +0 -29
  373. package/dist/node_modules/uuid/dist/stringify.js.map +0 -1
  374. package/dist/node_modules/uuid/dist/v7.js +0 -65
  375. package/dist/node_modules/uuid/dist/v7.js.map +0 -1
  376. package/dist/node_modules/zod-to-json-schema/dist/esm/Options.js +0 -37
  377. package/dist/node_modules/zod-to-json-schema/dist/esm/Options.js.map +0 -1
  378. package/dist/node_modules/zod-to-json-schema/dist/esm/Refs.js +0 -26
  379. package/dist/node_modules/zod-to-json-schema/dist/esm/Refs.js.map +0 -1
  380. package/dist/node_modules/zod-to-json-schema/dist/esm/errorMessages.js +0 -17
  381. package/dist/node_modules/zod-to-json-schema/dist/esm/errorMessages.js.map +0 -1
  382. package/dist/node_modules/zod-to-json-schema/dist/esm/getRelativePath.js +0 -11
  383. package/dist/node_modules/zod-to-json-schema/dist/esm/getRelativePath.js.map +0 -1
  384. package/dist/node_modules/zod-to-json-schema/dist/esm/parseDef.js +0 -66
  385. package/dist/node_modules/zod-to-json-schema/dist/esm/parseDef.js.map +0 -1
  386. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/any.js +0 -21
  387. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/any.js.map +0 -1
  388. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/array.js +0 -30
  389. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/array.js.map +0 -1
  390. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/bigint.js +0 -53
  391. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/bigint.js.map +0 -1
  392. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/boolean.js +0 -8
  393. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/boolean.js.map +0 -1
  394. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/branded.js +0 -8
  395. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/branded.js.map +0 -1
  396. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/catch.js +0 -8
  397. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/catch.js.map +0 -1
  398. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/date.js +0 -50
  399. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/date.js.map +0 -1
  400. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/default.js +0 -11
  401. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/default.js.map +0 -1
  402. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/effects.js +0 -11
  403. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/effects.js.map +0 -1
  404. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/enum.js +0 -9
  405. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/enum.js.map +0 -1
  406. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/intersection.js +0 -56
  407. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/intersection.js.map +0 -1
  408. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/literal.js +0 -24
  409. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/literal.js.map +0 -1
  410. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/map.js +0 -30
  411. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/map.js.map +0 -1
  412. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/nativeEnum.js +0 -19
  413. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/nativeEnum.js.map +0 -1
  414. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/never.js +0 -15
  415. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/never.js.map +0 -1
  416. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/null.js +0 -13
  417. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/null.js.map +0 -1
  418. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/nullable.js +0 -37
  419. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/nullable.js.map +0 -1
  420. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/number.js +0 -56
  421. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/number.js.map +0 -1
  422. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/object.js +0 -76
  423. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/object.js.map +0 -1
  424. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/optional.js +0 -25
  425. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/optional.js.map +0 -1
  426. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/pipeline.js +0 -24
  427. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/pipeline.js.map +0 -1
  428. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/promise.js +0 -8
  429. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/promise.js.map +0 -1
  430. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/readonly.js +0 -8
  431. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/readonly.js.map +0 -1
  432. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/record.js +0 -65
  433. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/record.js.map +0 -1
  434. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/set.js +0 -24
  435. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/set.js.map +0 -1
  436. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/string.js +0 -350
  437. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/string.js.map +0 -1
  438. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/tuple.js +0 -36
  439. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/tuple.js.map +0 -1
  440. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/undefined.js +0 -10
  441. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/undefined.js.map +0 -1
  442. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/union.js +0 -84
  443. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/union.js.map +0 -1
  444. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/unknown.js +0 -8
  445. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/unknown.js.map +0 -1
  446. package/dist/node_modules/zod-to-json-schema/dist/esm/selectParser.js +0 -109
  447. package/dist/node_modules/zod-to-json-schema/dist/esm/selectParser.js.map +0 -1
  448. package/dist/node_modules/zod-to-json-schema/dist/esm/zodToJsonSchema.js +0 -90
  449. package/dist/node_modules/zod-to-json-schema/dist/esm/zodToJsonSchema.js.map +0 -1
  450. package/dist/node_modules/zod-to-json-schema/node_modules/zod/v3/types.js +0 -42
  451. package/dist/node_modules/zod-to-json-schema/node_modules/zod/v3/types.js.map +0 -1
  452. package/dist/package.json.js +0 -8
  453. package/dist/package.json.js.map +0 -1
  454. package/dist/src/acp-extensions.d.ts +0 -91
  455. package/dist/src/acp-extensions.d.ts.map +0 -1
  456. package/dist/src/acp-extensions.js +0 -38
  457. package/dist/src/acp-extensions.js.map +0 -1
  458. package/dist/src/adapters/claude/claude.d.ts +0 -136
  459. package/dist/src/adapters/claude/claude.d.ts.map +0 -1
  460. package/dist/src/adapters/claude/claude.js +0 -1112
  461. package/dist/src/adapters/claude/claude.js.map +0 -1
  462. package/dist/src/adapters/claude/mcp-server.d.ts +0 -30
  463. package/dist/src/adapters/claude/mcp-server.d.ts.map +0 -1
  464. package/dist/src/adapters/claude/mcp-server.js +0 -655
  465. package/dist/src/adapters/claude/mcp-server.js.map +0 -1
  466. package/dist/src/adapters/claude/tools.d.ts +0 -35
  467. package/dist/src/adapters/claude/tools.d.ts.map +0 -1
  468. package/dist/src/adapters/claude/tools.js +0 -466
  469. package/dist/src/adapters/claude/tools.js.map +0 -1
  470. package/dist/src/adapters/claude/utils.d.ts +0 -48
  471. package/dist/src/adapters/claude/utils.d.ts.map +0 -1
  472. package/dist/src/adapters/claude/utils.js +0 -158
  473. package/dist/src/adapters/claude/utils.js.map +0 -1
  474. package/dist/src/agent.d.ts +0 -52
  475. package/dist/src/agent.d.ts.map +0 -1
  476. package/dist/src/agent.js +0 -425
  477. package/dist/src/agent.js.map +0 -1
  478. package/dist/src/agents/execution.d.ts +0 -2
  479. package/dist/src/agents/execution.d.ts.map +0 -1
  480. package/dist/src/agents/execution.js +0 -40
  481. package/dist/src/agents/execution.js.map +0 -1
  482. package/dist/src/agents/planning.d.ts +0 -2
  483. package/dist/src/agents/planning.d.ts.map +0 -1
  484. package/dist/src/agents/planning.js +0 -63
  485. package/dist/src/agents/planning.js.map +0 -1
  486. package/dist/src/agents/research.d.ts +0 -2
  487. package/dist/src/agents/research.d.ts.map +0 -1
  488. package/dist/src/agents/research.js +0 -163
  489. package/dist/src/agents/research.js.map +0 -1
  490. package/dist/src/file-manager.d.ts +0 -43
  491. package/dist/src/file-manager.d.ts.map +0 -1
  492. package/dist/src/file-manager.js +0 -266
  493. package/dist/src/file-manager.js.map +0 -1
  494. package/dist/src/git-manager.d.ts +0 -79
  495. package/dist/src/git-manager.d.ts.map +0 -1
  496. package/dist/src/git-manager.js +0 -454
  497. package/dist/src/git-manager.js.map +0 -1
  498. package/dist/src/posthog-api.d.ts +0 -48
  499. package/dist/src/posthog-api.d.ts.map +0 -1
  500. package/dist/src/posthog-api.js +0 -260
  501. package/dist/src/posthog-api.js.map +0 -1
  502. package/dist/src/prompt-builder.d.ts +0 -49
  503. package/dist/src/prompt-builder.d.ts.map +0 -1
  504. package/dist/src/prompt-builder.js +0 -397
  505. package/dist/src/prompt-builder.js.map +0 -1
  506. package/dist/src/schemas.d.ts +0 -980
  507. package/dist/src/schemas.d.ts.map +0 -1
  508. package/dist/src/schemas.js +0 -196
  509. package/dist/src/schemas.js.map +0 -1
  510. package/dist/src/session-store.d.ts +0 -53
  511. package/dist/src/session-store.d.ts.map +0 -1
  512. package/dist/src/session-store.js +0 -195
  513. package/dist/src/session-store.js.map +0 -1
  514. package/dist/src/task-manager.d.ts +0 -25
  515. package/dist/src/task-manager.d.ts.map +0 -1
  516. package/dist/src/task-manager.js +0 -123
  517. package/dist/src/task-manager.js.map +0 -1
  518. package/dist/src/template-manager.d.ts +0 -30
  519. package/dist/src/template-manager.d.ts.map +0 -1
  520. package/dist/src/template-manager.js +0 -152
  521. package/dist/src/template-manager.js.map +0 -1
  522. package/dist/src/todo-manager.d.ts +0 -29
  523. package/dist/src/todo-manager.d.ts.map +0 -1
  524. package/dist/src/todo-manager.js +0 -135
  525. package/dist/src/todo-manager.js.map +0 -1
  526. package/dist/src/tools/registry.d.ts +0 -25
  527. package/dist/src/tools/registry.d.ts.map +0 -1
  528. package/dist/src/tools/registry.js +0 -120
  529. package/dist/src/tools/registry.js.map +0 -1
  530. package/dist/src/tools/types.d.ts +0 -80
  531. package/dist/src/tools/types.d.ts.map +0 -1
  532. package/dist/src/types.d.ts +0 -193
  533. package/dist/src/types.d.ts.map +0 -1
  534. package/dist/src/types.js +0 -11
  535. package/dist/src/types.js.map +0 -1
  536. package/dist/src/utils/logger.d.ts +0 -37
  537. package/dist/src/utils/logger.d.ts.map +0 -1
  538. package/dist/src/utils/logger.js +0 -83
  539. package/dist/src/utils/logger.js.map +0 -1
  540. package/dist/src/utils/tapped-stream.d.ts +0 -17
  541. package/dist/src/utils/tapped-stream.d.ts.map +0 -1
  542. package/dist/src/utils/tapped-stream.js +0 -45
  543. package/dist/src/utils/tapped-stream.js.map +0 -1
  544. package/dist/src/workflow/config.d.ts +0 -3
  545. package/dist/src/workflow/config.d.ts.map +0 -1
  546. package/dist/src/workflow/config.js +0 -54
  547. package/dist/src/workflow/config.js.map +0 -1
  548. package/dist/src/workflow/steps/build.d.ts +0 -3
  549. package/dist/src/workflow/steps/build.d.ts.map +0 -1
  550. package/dist/src/workflow/steps/build.js +0 -108
  551. package/dist/src/workflow/steps/build.js.map +0 -1
  552. package/dist/src/workflow/steps/finalize.d.ts +0 -3
  553. package/dist/src/workflow/steps/finalize.d.ts.map +0 -1
  554. package/dist/src/workflow/steps/finalize.js +0 -188
  555. package/dist/src/workflow/steps/finalize.js.map +0 -1
  556. package/dist/src/workflow/steps/plan.d.ts +0 -3
  557. package/dist/src/workflow/steps/plan.d.ts.map +0 -1
  558. package/dist/src/workflow/steps/plan.js +0 -136
  559. package/dist/src/workflow/steps/plan.js.map +0 -1
  560. package/dist/src/workflow/steps/research.d.ts +0 -3
  561. package/dist/src/workflow/steps/research.d.ts.map +0 -1
  562. package/dist/src/workflow/steps/research.js +0 -189
  563. package/dist/src/workflow/steps/research.js.map +0 -1
  564. package/dist/src/workflow/types.d.ts +0 -51
  565. package/dist/src/workflow/types.d.ts.map +0 -1
  566. package/dist/src/workflow/utils.d.ts +0 -12
  567. package/dist/src/workflow/utils.d.ts.map +0 -1
  568. package/dist/src/workflow/utils.js +0 -41
  569. package/dist/src/workflow/utils.js.map +0 -1
  570. package/dist/src/worktree-manager.d.ts +0 -39
  571. package/dist/src/worktree-manager.d.ts.map +0 -1
  572. package/dist/src/worktree-manager.js +0 -810
  573. package/dist/src/worktree-manager.js.map +0 -1
@@ -1,1112 +0,0 @@
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