@copilotkit/aimock 1.43.0 → 1.45.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 (396) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/CHANGELOG.md +46 -0
  4. package/README.md +14 -2
  5. package/dist/agui-handler.d.ts.map +1 -1
  6. package/dist/aimock-cli.cjs +31 -5
  7. package/dist/aimock-cli.cjs.map +1 -1
  8. package/dist/aimock-cli.d.cts.map +1 -1
  9. package/dist/aimock-cli.d.ts.map +1 -1
  10. package/dist/aimock-cli.js +31 -5
  11. package/dist/aimock-cli.js.map +1 -1
  12. package/dist/bedrock-converse.cjs +344 -43
  13. package/dist/bedrock-converse.cjs.map +1 -1
  14. package/dist/bedrock-converse.d.cts.map +1 -1
  15. package/dist/bedrock-converse.d.ts.map +1 -1
  16. package/dist/bedrock-converse.js +345 -44
  17. package/dist/bedrock-converse.js.map +1 -1
  18. package/dist/bedrock.cjs +195 -42
  19. package/dist/bedrock.cjs.map +1 -1
  20. package/dist/bedrock.d.cts.map +1 -1
  21. package/dist/bedrock.d.ts.map +1 -1
  22. package/dist/bedrock.js +196 -43
  23. package/dist/bedrock.js.map +1 -1
  24. package/dist/chaos.cjs +9 -5
  25. package/dist/chaos.cjs.map +1 -1
  26. package/dist/chaos.d.cts.map +1 -1
  27. package/dist/chaos.d.ts.map +1 -1
  28. package/dist/chaos.js +10 -7
  29. package/dist/chaos.js.map +1 -1
  30. package/dist/cli.cjs +238 -9
  31. package/dist/cli.cjs.map +1 -1
  32. package/dist/cli.js +242 -13
  33. package/dist/cli.js.map +1 -1
  34. package/dist/cohere.cjs +159 -72
  35. package/dist/cohere.cjs.map +1 -1
  36. package/dist/cohere.d.cts.map +1 -1
  37. package/dist/cohere.d.ts.map +1 -1
  38. package/dist/cohere.js +160 -73
  39. package/dist/cohere.js.map +1 -1
  40. package/dist/config-loader.cjs +63 -5
  41. package/dist/config-loader.cjs.map +1 -1
  42. package/dist/config-loader.d.cts +37 -4
  43. package/dist/config-loader.d.cts.map +1 -1
  44. package/dist/config-loader.d.ts +37 -4
  45. package/dist/config-loader.d.ts.map +1 -1
  46. package/dist/config-loader.js +63 -5
  47. package/dist/config-loader.js.map +1 -1
  48. package/dist/constants.cjs +8 -0
  49. package/dist/constants.cjs.map +1 -1
  50. package/dist/constants.d.cts +6 -2
  51. package/dist/constants.d.ts +6 -2
  52. package/dist/constants.js +8 -1
  53. package/dist/constants.js.map +1 -1
  54. package/dist/echo-text.cjs +65 -0
  55. package/dist/echo-text.cjs.map +1 -0
  56. package/dist/echo-text.d.cts +22 -0
  57. package/dist/echo-text.d.cts.map +1 -0
  58. package/dist/echo-text.d.ts +22 -0
  59. package/dist/echo-text.d.ts.map +1 -0
  60. package/dist/echo-text.js +65 -0
  61. package/dist/echo-text.js.map +1 -0
  62. package/dist/embeddings.cjs +18 -1
  63. package/dist/embeddings.cjs.map +1 -1
  64. package/dist/embeddings.d.cts +1 -1
  65. package/dist/embeddings.d.cts.map +1 -1
  66. package/dist/embeddings.d.ts +1 -1
  67. package/dist/embeddings.d.ts.map +1 -1
  68. package/dist/embeddings.js +18 -1
  69. package/dist/embeddings.js.map +1 -1
  70. package/dist/fakes-plugin.cjs +131 -0
  71. package/dist/fakes-plugin.cjs.map +1 -0
  72. package/dist/fakes-plugin.d.cts +23 -0
  73. package/dist/fakes-plugin.d.cts.map +1 -0
  74. package/dist/fakes-plugin.d.ts +23 -0
  75. package/dist/fakes-plugin.d.ts.map +1 -0
  76. package/dist/fakes-plugin.js +127 -0
  77. package/dist/fakes-plugin.js.map +1 -0
  78. package/dist/files.cjs +9 -11
  79. package/dist/files.cjs.map +1 -1
  80. package/dist/files.d.cts.map +1 -1
  81. package/dist/files.d.ts.map +1 -1
  82. package/dist/files.js +10 -13
  83. package/dist/files.js.map +1 -1
  84. package/dist/fine-tuning.cjs +1 -19
  85. package/dist/fine-tuning.cjs.map +1 -1
  86. package/dist/fine-tuning.d.cts.map +1 -1
  87. package/dist/fine-tuning.d.ts.map +1 -1
  88. package/dist/fine-tuning.js +2 -20
  89. package/dist/fine-tuning.js.map +1 -1
  90. package/dist/fixture-loader-services.cjs +116 -0
  91. package/dist/fixture-loader-services.cjs.map +1 -0
  92. package/dist/fixture-loader-services.d.cts +48 -0
  93. package/dist/fixture-loader-services.d.cts.map +1 -0
  94. package/dist/fixture-loader-services.d.ts +48 -0
  95. package/dist/fixture-loader-services.d.ts.map +1 -0
  96. package/dist/fixture-loader-services.js +114 -0
  97. package/dist/fixture-loader-services.js.map +1 -0
  98. package/dist/fixture-loader.cjs +552 -29
  99. package/dist/fixture-loader.cjs.map +1 -1
  100. package/dist/fixture-loader.d.cts +140 -2
  101. package/dist/fixture-loader.d.cts.map +1 -1
  102. package/dist/fixture-loader.d.ts +140 -2
  103. package/dist/fixture-loader.d.ts.map +1 -1
  104. package/dist/fixture-loader.js +542 -31
  105. package/dist/fixture-loader.js.map +1 -1
  106. package/dist/gemini-embeddings.cjs +42 -2
  107. package/dist/gemini-embeddings.cjs.map +1 -1
  108. package/dist/gemini-embeddings.js +43 -3
  109. package/dist/gemini-embeddings.js.map +1 -1
  110. package/dist/gemini-interactions.cjs +288 -52
  111. package/dist/gemini-interactions.cjs.map +1 -1
  112. package/dist/gemini-interactions.d.cts.map +1 -1
  113. package/dist/gemini-interactions.d.ts.map +1 -1
  114. package/dist/gemini-interactions.js +289 -53
  115. package/dist/gemini-interactions.js.map +1 -1
  116. package/dist/gemini.cjs +234 -38
  117. package/dist/gemini.cjs.map +1 -1
  118. package/dist/gemini.d.cts.map +1 -1
  119. package/dist/gemini.d.ts.map +1 -1
  120. package/dist/gemini.js +235 -39
  121. package/dist/gemini.js.map +1 -1
  122. package/dist/helpers.cjs +1157 -12
  123. package/dist/helpers.cjs.map +1 -1
  124. package/dist/helpers.d.cts +85 -4
  125. package/dist/helpers.d.cts.map +1 -1
  126. package/dist/helpers.d.ts +85 -4
  127. package/dist/helpers.d.ts.map +1 -1
  128. package/dist/helpers.js +1113 -14
  129. package/dist/helpers.js.map +1 -1
  130. package/dist/images.cjs +3 -2
  131. package/dist/images.cjs.map +1 -1
  132. package/dist/images.js +3 -2
  133. package/dist/images.js.map +1 -1
  134. package/dist/index.cjs +39 -1
  135. package/dist/index.d.cts +11 -4
  136. package/dist/index.d.ts +11 -4
  137. package/dist/index.js +11 -4
  138. package/dist/jest.cjs +43 -14
  139. package/dist/jest.cjs.map +1 -1
  140. package/dist/jest.d.cts +47 -5
  141. package/dist/jest.d.cts.map +1 -1
  142. package/dist/jest.d.ts +47 -5
  143. package/dist/jest.d.ts.map +1 -1
  144. package/dist/jest.js +45 -16
  145. package/dist/jest.js.map +1 -1
  146. package/dist/journal.cjs +155 -13
  147. package/dist/journal.cjs.map +1 -1
  148. package/dist/journal.d.cts +54 -4
  149. package/dist/journal.d.cts.map +1 -1
  150. package/dist/journal.d.ts +54 -4
  151. package/dist/journal.d.ts.map +1 -1
  152. package/dist/journal.js +155 -13
  153. package/dist/journal.js.map +1 -1
  154. package/dist/live-sanitize.cjs +4 -32
  155. package/dist/live-sanitize.cjs.map +1 -1
  156. package/dist/live-sanitize.js +4 -32
  157. package/dist/live-sanitize.js.map +1 -1
  158. package/dist/llmock.cjs +204 -39
  159. package/dist/llmock.cjs.map +1 -1
  160. package/dist/llmock.d.cts +51 -1
  161. package/dist/llmock.d.cts.map +1 -1
  162. package/dist/llmock.d.ts +51 -1
  163. package/dist/llmock.d.ts.map +1 -1
  164. package/dist/llmock.js +206 -41
  165. package/dist/llmock.js.map +1 -1
  166. package/dist/mcp-fakes-mount.cjs +217 -0
  167. package/dist/mcp-fakes-mount.cjs.map +1 -0
  168. package/dist/mcp-fakes-mount.js +211 -0
  169. package/dist/mcp-fakes-mount.js.map +1 -0
  170. package/dist/mcp-fakes-report.cjs +111 -0
  171. package/dist/mcp-fakes-report.cjs.map +1 -0
  172. package/dist/mcp-fakes-report.d.cts +40 -0
  173. package/dist/mcp-fakes-report.d.cts.map +1 -0
  174. package/dist/mcp-fakes-report.d.ts +40 -0
  175. package/dist/mcp-fakes-report.d.ts.map +1 -0
  176. package/dist/mcp-fakes-report.js +107 -0
  177. package/dist/mcp-fakes-report.js.map +1 -0
  178. package/dist/mcp-fakes.cjs +1942 -0
  179. package/dist/mcp-fakes.cjs.map +1 -0
  180. package/dist/mcp-fakes.d.cts +504 -0
  181. package/dist/mcp-fakes.d.cts.map +1 -0
  182. package/dist/mcp-fakes.d.ts +504 -0
  183. package/dist/mcp-fakes.d.ts.map +1 -0
  184. package/dist/mcp-fakes.js +1937 -0
  185. package/dist/mcp-fakes.js.map +1 -0
  186. package/dist/mcp-handler.cjs +534 -27
  187. package/dist/mcp-handler.cjs.map +1 -1
  188. package/dist/mcp-handler.d.cts +49 -0
  189. package/dist/mcp-handler.d.cts.map +1 -0
  190. package/dist/mcp-handler.d.ts +49 -0
  191. package/dist/mcp-handler.d.ts.map +1 -0
  192. package/dist/mcp-handler.js +530 -28
  193. package/dist/mcp-handler.js.map +1 -1
  194. package/dist/mcp-mock.cjs +326 -47
  195. package/dist/mcp-mock.cjs.map +1 -1
  196. package/dist/mcp-mock.d.cts +97 -1
  197. package/dist/mcp-mock.d.cts.map +1 -1
  198. package/dist/mcp-mock.d.ts +97 -1
  199. package/dist/mcp-mock.d.ts.map +1 -1
  200. package/dist/mcp-mock.js +327 -48
  201. package/dist/mcp-mock.js.map +1 -1
  202. package/dist/mcp-recorder.cjs +1224 -0
  203. package/dist/mcp-recorder.cjs.map +1 -0
  204. package/dist/mcp-recorder.d.cts +108 -0
  205. package/dist/mcp-recorder.d.cts.map +1 -0
  206. package/dist/mcp-recorder.d.ts +108 -0
  207. package/dist/mcp-recorder.d.ts.map +1 -0
  208. package/dist/mcp-recorder.js +1215 -0
  209. package/dist/mcp-recorder.js.map +1 -0
  210. package/dist/mcp-stub.cjs +5 -1
  211. package/dist/mcp-stub.d.cts +3 -1
  212. package/dist/mcp-stub.d.ts +3 -1
  213. package/dist/mcp-stub.js +3 -1
  214. package/dist/mcp-types.d.cts +6 -0
  215. package/dist/mcp-types.d.ts +6 -0
  216. package/dist/message-text.cjs +192 -0
  217. package/dist/message-text.cjs.map +1 -0
  218. package/dist/message-text.d.cts +31 -0
  219. package/dist/message-text.d.cts.map +1 -0
  220. package/dist/message-text.d.ts +31 -0
  221. package/dist/message-text.d.ts.map +1 -0
  222. package/dist/message-text.js +184 -0
  223. package/dist/message-text.js.map +1 -0
  224. package/dist/messages.cjs +400 -56
  225. package/dist/messages.cjs.map +1 -1
  226. package/dist/messages.d.cts.map +1 -1
  227. package/dist/messages.d.ts.map +1 -1
  228. package/dist/messages.js +401 -58
  229. package/dist/messages.js.map +1 -1
  230. package/dist/metrics.cjs +46 -66
  231. package/dist/metrics.cjs.map +1 -1
  232. package/dist/metrics.d.cts +14 -6
  233. package/dist/metrics.d.cts.map +1 -1
  234. package/dist/metrics.d.ts +14 -6
  235. package/dist/metrics.d.ts.map +1 -1
  236. package/dist/metrics.js +32 -40
  237. package/dist/metrics.js.map +1 -1
  238. package/dist/misbehavior.cjs +1523 -0
  239. package/dist/misbehavior.cjs.map +1 -0
  240. package/dist/misbehavior.d.cts +43 -0
  241. package/dist/misbehavior.d.cts.map +1 -0
  242. package/dist/misbehavior.d.ts +43 -0
  243. package/dist/misbehavior.d.ts.map +1 -0
  244. package/dist/misbehavior.js +1511 -0
  245. package/dist/misbehavior.js.map +1 -0
  246. package/dist/ollama.cjs +315 -113
  247. package/dist/ollama.cjs.map +1 -1
  248. package/dist/ollama.d.cts.map +1 -1
  249. package/dist/ollama.d.ts.map +1 -1
  250. package/dist/ollama.js +316 -114
  251. package/dist/ollama.js.map +1 -1
  252. package/dist/openapi.cjs +3405 -0
  253. package/dist/openapi.cjs.map +1 -0
  254. package/dist/openapi.d.cts +30 -0
  255. package/dist/openapi.d.cts.map +1 -0
  256. package/dist/openapi.d.ts +30 -0
  257. package/dist/openapi.d.ts.map +1 -0
  258. package/dist/openapi.js +3404 -0
  259. package/dist/openapi.js.map +1 -0
  260. package/dist/openrouter-video.cjs +4 -4
  261. package/dist/openrouter-video.cjs.map +1 -1
  262. package/dist/openrouter-video.d.cts.map +1 -1
  263. package/dist/openrouter-video.d.ts.map +1 -1
  264. package/dist/openrouter-video.js +4 -4
  265. package/dist/openrouter-video.js.map +1 -1
  266. package/dist/record-sanitize.cjs +231 -0
  267. package/dist/record-sanitize.cjs.map +1 -0
  268. package/dist/record-sanitize.js +224 -0
  269. package/dist/record-sanitize.js.map +1 -0
  270. package/dist/recorder.cjs +115 -6
  271. package/dist/recorder.cjs.map +1 -1
  272. package/dist/recorder.d.cts +2 -1
  273. package/dist/recorder.d.cts.map +1 -1
  274. package/dist/recorder.d.ts +2 -1
  275. package/dist/recorder.d.ts.map +1 -1
  276. package/dist/recorder.js +116 -8
  277. package/dist/recorder.js.map +1 -1
  278. package/dist/responses.cjs +701 -166
  279. package/dist/responses.cjs.map +1 -1
  280. package/dist/responses.d.cts +5 -13
  281. package/dist/responses.d.cts.map +1 -1
  282. package/dist/responses.d.ts +5 -13
  283. package/dist/responses.d.ts.map +1 -1
  284. package/dist/responses.js +699 -169
  285. package/dist/responses.js.map +1 -1
  286. package/dist/route-registry.cjs +951 -0
  287. package/dist/route-registry.cjs.map +1 -0
  288. package/dist/route-registry.d.cts +33 -0
  289. package/dist/route-registry.d.cts.map +1 -0
  290. package/dist/route-registry.d.ts +33 -0
  291. package/dist/route-registry.d.ts.map +1 -0
  292. package/dist/route-registry.js +866 -0
  293. package/dist/route-registry.js.map +1 -0
  294. package/dist/router.cjs +24 -2
  295. package/dist/router.cjs.map +1 -1
  296. package/dist/router.d.cts.map +1 -1
  297. package/dist/router.d.ts.map +1 -1
  298. package/dist/router.js +25 -4
  299. package/dist/router.js.map +1 -1
  300. package/dist/server.cjs +1159 -264
  301. package/dist/server.cjs.map +1 -1
  302. package/dist/server.d.cts +4 -1
  303. package/dist/server.d.cts.map +1 -1
  304. package/dist/server.d.ts +4 -1
  305. package/dist/server.d.ts.map +1 -1
  306. package/dist/server.js +1067 -172
  307. package/dist/server.js.map +1 -1
  308. package/dist/speech.cjs +4 -2
  309. package/dist/speech.cjs.map +1 -1
  310. package/dist/speech.js +4 -2
  311. package/dist/speech.js.map +1 -1
  312. package/dist/stream-collapse.cjs +236 -34
  313. package/dist/stream-collapse.cjs.map +1 -1
  314. package/dist/stream-collapse.d.cts +39 -4
  315. package/dist/stream-collapse.d.cts.map +1 -1
  316. package/dist/stream-collapse.d.ts +39 -4
  317. package/dist/stream-collapse.d.ts.map +1 -1
  318. package/dist/stream-collapse.js +235 -35
  319. package/dist/stream-collapse.js.map +1 -1
  320. package/dist/suite.cjs +1 -1
  321. package/dist/suite.js +1 -1
  322. package/dist/transcription.cjs +2 -2
  323. package/dist/transcription.cjs.map +1 -1
  324. package/dist/transcription.d.cts.map +1 -1
  325. package/dist/transcription.d.ts.map +1 -1
  326. package/dist/transcription.js +2 -2
  327. package/dist/transcription.js.map +1 -1
  328. package/dist/types.cjs +18 -0
  329. package/dist/types.cjs.map +1 -0
  330. package/dist/types.d.cts +516 -5
  331. package/dist/types.d.cts.map +1 -1
  332. package/dist/types.d.ts +516 -5
  333. package/dist/types.d.ts.map +1 -1
  334. package/dist/types.js +17 -0
  335. package/dist/types.js.map +1 -0
  336. package/dist/validate-cli.cjs +123 -33
  337. package/dist/validate-cli.cjs.map +1 -1
  338. package/dist/validate-cli.js +125 -35
  339. package/dist/validate-cli.js.map +1 -1
  340. package/dist/vector-stores.cjs +1180 -0
  341. package/dist/vector-stores.cjs.map +1 -0
  342. package/dist/vector-stores.d.cts +106 -0
  343. package/dist/vector-stores.d.cts.map +1 -0
  344. package/dist/vector-stores.d.ts +106 -0
  345. package/dist/vector-stores.d.ts.map +1 -0
  346. package/dist/vector-stores.js +1164 -0
  347. package/dist/vector-stores.js.map +1 -0
  348. package/dist/vector-types.d.cts.map +1 -1
  349. package/dist/version.cjs +45 -0
  350. package/dist/version.cjs.map +1 -0
  351. package/dist/version.js +44 -0
  352. package/dist/version.js.map +1 -0
  353. package/dist/video.cjs +19 -0
  354. package/dist/video.cjs.map +1 -1
  355. package/dist/video.d.cts.map +1 -1
  356. package/dist/video.d.ts.map +1 -1
  357. package/dist/video.js +19 -0
  358. package/dist/video.js.map +1 -1
  359. package/dist/vitest.cjs +77 -16
  360. package/dist/vitest.cjs.map +1 -1
  361. package/dist/vitest.d.cts +38 -5
  362. package/dist/vitest.d.cts.map +1 -1
  363. package/dist/vitest.d.ts +38 -5
  364. package/dist/vitest.d.ts.map +1 -1
  365. package/dist/vitest.js +78 -17
  366. package/dist/vitest.js.map +1 -1
  367. package/dist/watcher.cjs +6 -2
  368. package/dist/watcher.cjs.map +1 -1
  369. package/dist/watcher.js +6 -2
  370. package/dist/watcher.js.map +1 -1
  371. package/dist/ws-gemini-live.cjs +210 -101
  372. package/dist/ws-gemini-live.cjs.map +1 -1
  373. package/dist/ws-gemini-live.d.cts +9 -3
  374. package/dist/ws-gemini-live.d.cts.map +1 -1
  375. package/dist/ws-gemini-live.d.ts +9 -3
  376. package/dist/ws-gemini-live.d.ts.map +1 -1
  377. package/dist/ws-gemini-live.js +211 -102
  378. package/dist/ws-gemini-live.js.map +1 -1
  379. package/dist/ws-realtime.cjs +175 -62
  380. package/dist/ws-realtime.cjs.map +1 -1
  381. package/dist/ws-realtime.d.cts +8 -3
  382. package/dist/ws-realtime.d.cts.map +1 -1
  383. package/dist/ws-realtime.d.ts +8 -3
  384. package/dist/ws-realtime.d.ts.map +1 -1
  385. package/dist/ws-realtime.js +176 -63
  386. package/dist/ws-realtime.js.map +1 -1
  387. package/dist/ws-responses.cjs +121 -16
  388. package/dist/ws-responses.cjs.map +1 -1
  389. package/dist/ws-responses.d.cts +8 -12
  390. package/dist/ws-responses.d.cts.map +1 -1
  391. package/dist/ws-responses.d.ts +8 -12
  392. package/dist/ws-responses.d.ts.map +1 -1
  393. package/dist/ws-responses.js +123 -18
  394. package/dist/ws-responses.js.map +1 -1
  395. package/package.json +13 -2
  396. package/skills/write-fixtures/SKILL.md +179 -21
package/dist/messages.cjs CHANGED
@@ -1,6 +1,7 @@
1
1
  const require_helpers = require('./helpers.cjs');
2
2
  const require_sse_writer = require('./sse-writer.cjs');
3
3
  const require_chaos = require('./chaos.cjs');
4
+ const require_misbehavior = require('./misbehavior.cjs');
4
5
  const require_router = require('./router.cjs');
5
6
  const require_recorder = require('./recorder.cjs');
6
7
  const require_interruption = require('./interruption.cjs');
@@ -385,14 +386,7 @@ function buildClaudeToolCallStreamEvents(toolCalls, model, chunkSize, logger, re
385
386
  }
386
387
  for (const tc of toolCalls) {
387
388
  const toolUseId = tc.id || require_helpers.generateToolUseId();
388
- let argsObj;
389
- try {
390
- argsObj = JSON.parse(tc.arguments || "{}");
391
- } catch {
392
- logger.warn(`Malformed JSON in fixture tool call arguments for "${tc.name}": ${tc.arguments}`);
393
- argsObj = {};
394
- }
395
- const argsJson = JSON.stringify(argsObj);
389
+ const argsJson = require_helpers.servedToolArgs(tc, "string", logger).text;
396
390
  events.push({
397
391
  type: "content_block_start",
398
392
  index: blockIndex,
@@ -481,13 +475,7 @@ function buildClaudeToolCallResponse(toolCalls, model, logger, reasoning, overri
481
475
  signature: reasoningSignature ?? PLACEHOLDER_SIGNATURE
482
476
  });
483
477
  for (const tc of toolCalls) {
484
- let argsObj;
485
- try {
486
- argsObj = JSON.parse(tc.arguments || "{}");
487
- } catch {
488
- logger.warn(`Malformed JSON in fixture tool call arguments for "${tc.name}": ${tc.arguments}`);
489
- argsObj = {};
490
- }
478
+ const argsObj = require_helpers.servedToolArgs(tc, "object", logger).value;
491
479
  contentBlocks.push({
492
480
  type: "tool_use",
493
481
  id: tc.id || require_helpers.generateToolUseId(),
@@ -591,14 +579,7 @@ function buildClaudeContentWithToolCallsStreamEvents(content, toolCalls, model,
591
579
  blockIndex++;
592
580
  } else {
593
581
  const toolUseId = block.id || require_helpers.generateToolUseId();
594
- let argsObj;
595
- try {
596
- argsObj = JSON.parse(block.arguments || "{}");
597
- } catch {
598
- logger.warn(`Malformed JSON in fixture tool call arguments for "${block.name}": ${block.arguments}`);
599
- argsObj = {};
600
- }
601
- const argsJson = JSON.stringify(argsObj);
582
+ const argsJson = require_helpers.servedToolArgs(block, "string", logger).text;
602
583
  events.push({
603
584
  type: "content_block_start",
604
585
  index: blockIndex,
@@ -663,14 +644,7 @@ function buildClaudeContentWithToolCallsStreamEvents(content, toolCalls, model,
663
644
  blockIndex++;
664
645
  for (const tc of toolCalls) {
665
646
  const toolUseId = tc.id || require_helpers.generateToolUseId();
666
- let argsObj;
667
- try {
668
- argsObj = JSON.parse(tc.arguments || "{}");
669
- } catch {
670
- logger.warn(`Malformed JSON in fixture tool call arguments for "${tc.name}": ${tc.arguments}`);
671
- argsObj = {};
672
- }
673
- const argsJson = JSON.stringify(argsObj);
647
+ const argsJson = require_helpers.servedToolArgs(tc, "string", logger).text;
674
648
  events.push({
675
649
  type: "content_block_start",
676
650
  index: blockIndex,
@@ -718,13 +692,7 @@ function buildClaudeContentWithToolCallsResponse(content, toolCalls, model, logg
718
692
  signature: reasoningSignature ?? PLACEHOLDER_SIGNATURE
719
693
  });
720
694
  const toolUseBlock = (tc) => {
721
- let argsObj;
722
- try {
723
- argsObj = JSON.parse(tc.arguments || "{}");
724
- } catch {
725
- logger.warn(`Malformed JSON in fixture tool call arguments for "${tc.name}": ${tc.arguments}`);
726
- argsObj = {};
727
- }
695
+ const argsObj = require_helpers.servedToolArgs(tc, "object", logger).value;
728
696
  return {
729
697
  type: "tool_use",
730
698
  id: tc.id || require_helpers.generateToolUseId(),
@@ -764,6 +732,227 @@ function buildClaudeContentWithToolCallsResponse(content, toolCalls, model, logg
764
732
  usage: claudeUsage(overrides)
765
733
  };
766
734
  }
735
+ /**
736
+ * Prepare an already-selected Claude fault once for Messages or InvokeModel.
737
+ * IDs, canonical served arguments and usage describe the full emitted output,
738
+ * even when the transport later interrupts delivery. Never mutates the plan.
739
+ */
740
+ function prepareClaudeMisbehavior(plan, context) {
741
+ const response = plan.response;
742
+ if (!(require_helpers.isTextResponse(response) || require_helpers.isToolCallResponse(response) || require_helpers.isCombinedFixtureResponse(response))) throw new TypeError("Claude misbehavior requires a chat response");
743
+ const outcome = require_helpers.isCombinedFixtureResponse(response) && response.blocks?.length ? require_helpers.resolveFixtureBlockOutcome(response.blocks) : void 0;
744
+ const toolCalls = (outcome?.toolCalls ?? ("toolCalls" in response ? response.toolCalls ?? [] : [])).map((call, index) => ({
745
+ ...call,
746
+ ...!context.stream && plan.summary.fault === "stop-length-mid-tool" && index === plan.summary.target?.index ? { arguments: "{}" } : {},
747
+ ...index === plan.duplicateId?.destinationIndex ? {} : { id: call.id || require_helpers.generateToolUseId() }
748
+ }));
749
+ if (plan.duplicateId) toolCalls[plan.duplicateId.destinationIndex].id = toolCalls[plan.duplicateId.sourceIndex].id;
750
+ let preparedResponse = { ...response };
751
+ delete preparedResponse.usage;
752
+ if (outcome) {
753
+ let index = 0;
754
+ preparedResponse = {
755
+ ...preparedResponse,
756
+ content: outcome.content,
757
+ toolCalls,
758
+ blocks: outcome.ordered.map((block) => block.type === "text" ? { ...block } : {
759
+ ...block,
760
+ ...toolCalls[index++]
761
+ })
762
+ };
763
+ } else if ("toolCalls" in response) preparedResponse = {
764
+ ...preparedResponse,
765
+ toolCalls
766
+ };
767
+ const servedToolCalls = toolCalls.map((call) => {
768
+ const args = require_helpers.toolArgsForWire(call);
769
+ return {
770
+ name: call.name,
771
+ id: call.id,
772
+ arguments: args.kind === "parsed" ? args.text : args.raw
773
+ };
774
+ });
775
+ const preparedPlan = {
776
+ ...plan,
777
+ response: preparedResponse,
778
+ summary: {
779
+ ...plan.summary,
780
+ servedToolCalls
781
+ }
782
+ };
783
+ const reasoning = plan.summary.fault === "reasoning-only" ? plan.reasoning ?? "" : require_helpers.resolveReasoningForModel(response.reasoning, context.request.model, context.strict, context.logger);
784
+ const artifacts = require_helpers.resolveReasoningArtifactsForModel(response.reasoningSignature, response.redactedThinking, context.request.model, context.strict, context.logger);
785
+ const content = outcome?.content ?? ("content" in response ? response.content ?? "" : "");
786
+ const usage = {
787
+ input_tokens: require_helpers.estimatePromptTokens(context.request.messages),
788
+ output_tokens: require_helpers.estimateTokens(content + servedToolCalls.map((call) => call.name + call.arguments).join("") + (reasoning ?? "") + (plan.refusal ?? ""))
789
+ };
790
+ const overrides = {
791
+ ...require_helpers.extractOverrides(response),
792
+ ...plan.stop === "length" ? { finishReason: "length" } : {},
793
+ usage
794
+ };
795
+ const model = context.request.model;
796
+ if (plan.summary.fault === "reasoning-only") {
797
+ const thought = reasoning ?? "";
798
+ const signature = artifacts.reasoningSignature ?? PLACEHOLDER_SIGNATURE;
799
+ const body = {
800
+ id: overrides.id ?? require_helpers.generateMessageId(),
801
+ type: "message",
802
+ role: overrides.role ?? "assistant",
803
+ content: [{
804
+ type: "thinking",
805
+ thinking: thought,
806
+ signature
807
+ }],
808
+ model: overrides.model ?? model,
809
+ stop_reason: "max_tokens",
810
+ stop_sequence: null,
811
+ usage
812
+ };
813
+ if (!context.stream) return {
814
+ stream: false,
815
+ body,
816
+ plan: preparedPlan,
817
+ usage
818
+ };
819
+ const events = [{
820
+ type: "message_start",
821
+ message: {
822
+ ...body,
823
+ content: [],
824
+ stop_reason: null
825
+ }
826
+ }, {
827
+ type: "content_block_start",
828
+ index: 0,
829
+ content_block: {
830
+ type: "thinking",
831
+ thinking: "",
832
+ signature: ""
833
+ }
834
+ }];
835
+ const size = Math.max(1, context.chunkSize);
836
+ for (let offset = 0; offset < thought.length; offset += size) events.push({
837
+ type: "content_block_delta",
838
+ index: 0,
839
+ delta: {
840
+ type: "thinking_delta",
841
+ thinking: thought.slice(offset, offset + size)
842
+ }
843
+ });
844
+ events.push({
845
+ type: "content_block_delta",
846
+ index: 0,
847
+ delta: {
848
+ type: "signature_delta",
849
+ signature
850
+ }
851
+ }, {
852
+ type: "content_block_stop",
853
+ index: 0
854
+ }, {
855
+ type: "message_delta",
856
+ delta: {
857
+ stop_reason: "max_tokens",
858
+ stop_sequence: null
859
+ },
860
+ usage: { output_tokens: usage.output_tokens }
861
+ }, { type: "message_stop" });
862
+ return {
863
+ stream: true,
864
+ events,
865
+ plan: preparedPlan,
866
+ usage
867
+ };
868
+ }
869
+ if (plan.summary.fault === "empty-response" || plan.summary.fault === "refusal") {
870
+ const stop = plan.stop === "refusal" ? "refusal" : "end_turn";
871
+ const detail = plan.stop === "refusal" ? { stop_details: {
872
+ type: "refusal",
873
+ category: plan.refusalCategory ?? null,
874
+ explanation: plan.refusal ?? ""
875
+ } } : {};
876
+ const body = {
877
+ id: overrides.id ?? require_helpers.generateMessageId(),
878
+ type: "message",
879
+ role: overrides.role ?? "assistant",
880
+ content: [],
881
+ model: overrides.model ?? model,
882
+ stop_reason: stop,
883
+ stop_sequence: null,
884
+ ...detail,
885
+ usage
886
+ };
887
+ if (!context.stream) return {
888
+ stream: false,
889
+ body,
890
+ plan: preparedPlan,
891
+ usage
892
+ };
893
+ return {
894
+ stream: true,
895
+ events: [
896
+ {
897
+ type: "message_start",
898
+ message: {
899
+ ...body,
900
+ stop_reason: null,
901
+ ..."stop_details" in detail ? { stop_details: void 0 } : {}
902
+ }
903
+ },
904
+ {
905
+ type: "message_delta",
906
+ delta: {
907
+ stop_reason: stop,
908
+ stop_sequence: null,
909
+ ...detail
910
+ },
911
+ usage: { output_tokens: usage.output_tokens }
912
+ },
913
+ { type: "message_stop" }
914
+ ],
915
+ plan: preparedPlan,
916
+ usage
917
+ };
918
+ }
919
+ if (context.stream) {
920
+ const args = [
921
+ reasoning,
922
+ overrides,
923
+ artifacts.reasoningSignature,
924
+ artifacts.redactedThinking
925
+ ];
926
+ const events = require_helpers.isCombinedFixtureResponse(preparedResponse) ? buildClaudeContentWithToolCallsStreamEvents(preparedResponse.content ?? "", toolCalls, model, Math.max(1, context.chunkSize), context.logger, ...args, preparedResponse.blocks) : require_helpers.isToolCallResponse(preparedResponse) ? buildClaudeToolCallStreamEvents(toolCalls, model, Math.max(1, context.chunkSize), context.logger, ...args) : buildClaudeTextStreamEvents(content, model, Math.max(1, context.chunkSize), ...args);
927
+ if (plan.summary.fault === "stop-length-mid-tool") {
928
+ const cutIndex = events.filter((event) => event.type === "content_block_start" && require_helpers.isJsonObject(event.content_block) && event.content_block.type === "tool_use")[plan.target?.index ?? 0]?.index;
929
+ return {
930
+ stream: true,
931
+ events: events.filter((event) => !(event.type === "content_block_stop" && event.index === cutIndex)),
932
+ plan: preparedPlan,
933
+ usage
934
+ };
935
+ }
936
+ return {
937
+ stream: true,
938
+ events,
939
+ plan: preparedPlan,
940
+ usage
941
+ };
942
+ }
943
+ const args = [
944
+ reasoning,
945
+ overrides,
946
+ artifacts.reasoningSignature,
947
+ artifacts.redactedThinking
948
+ ];
949
+ return {
950
+ stream: false,
951
+ body: require_helpers.isCombinedFixtureResponse(preparedResponse) ? buildClaudeContentWithToolCallsResponse(preparedResponse.content ?? "", toolCalls, model, context.logger, ...args, preparedResponse.blocks) : require_helpers.isToolCallResponse(preparedResponse) ? buildClaudeToolCallResponse(toolCalls, model, context.logger, ...args) : buildClaudeTextResponse(content, model, ...args),
952
+ plan: preparedPlan,
953
+ usage
954
+ };
955
+ }
767
956
  async function writeClaudeSSEStream(res, events, optionsOrLatency) {
768
957
  const opts = typeof optionsOrLatency === "number" ? { latency: optionsOrLatency } : optionsOrLatency ?? {};
769
958
  const latency = opts.latency ?? 0;
@@ -830,6 +1019,24 @@ async function handleMessages(req, res, raw, fixtures, journal, defaults, setCor
830
1019
  } }));
831
1020
  return;
832
1021
  }
1022
+ const messagesError = !Array.isArray(claudeReq.messages) ? "messages must be an array" : claudeReq.messages.some((message) => !require_helpers.isJsonObject(message)) ? "messages entries must be JSON objects" : claudeReq.messages.some((message) => (message.role === "user" || message.role === "assistant") && typeof message.content === "number") ? "messages content must be a string or an array of content blocks" : null;
1023
+ if (messagesError) {
1024
+ journal.add({
1025
+ method: req.method ?? "POST",
1026
+ path: req.url ?? "/v1/messages",
1027
+ headers: require_helpers.flattenHeaders(req.headers),
1028
+ body: null,
1029
+ response: {
1030
+ status: 400,
1031
+ fixture: null
1032
+ }
1033
+ });
1034
+ require_sse_writer.writeErrorResponse(res, 400, JSON.stringify({ error: {
1035
+ message: messagesError,
1036
+ type: "invalid_request_error"
1037
+ } }));
1038
+ return;
1039
+ }
833
1040
  const thinkingViolation = validateThinkingInvariants(claudeReq);
834
1041
  if (thinkingViolation) {
835
1042
  const effectiveStrict = require_helpers.resolveStrictMode(defaults.strict, req.headers);
@@ -858,6 +1065,26 @@ async function handleMessages(req, res, raw, fixtures, journal, defaults, setCor
858
1065
  }
859
1066
  logger.warn(`THINKING: ${violationMessage} (strict off — replaying anyway)`);
860
1067
  }
1068
+ if (claudeReq.tools && claudeReq.tools.length > 0) {
1069
+ const toolsError = !Array.isArray(claudeReq.tools) ? "tools must be an array" : claudeReq.tools.some((tool) => tool === null) ? "tools entries must not be null" : null;
1070
+ if (toolsError) {
1071
+ journal.add({
1072
+ method: req.method ?? "POST",
1073
+ path: req.url ?? "/v1/messages",
1074
+ headers: require_helpers.flattenHeaders(req.headers),
1075
+ body: null,
1076
+ response: {
1077
+ status: 400,
1078
+ fixture: null
1079
+ }
1080
+ });
1081
+ require_sse_writer.writeErrorResponse(res, 400, JSON.stringify({ error: {
1082
+ message: toolsError,
1083
+ type: "invalid_request_error"
1084
+ } }));
1085
+ return;
1086
+ }
1087
+ }
861
1088
  const completionReq = claudeToCompletionRequest(claudeReq);
862
1089
  completionReq._context = require_helpers.getContext(req);
863
1090
  const testId = require_helpers.getTestId(req);
@@ -934,20 +1161,111 @@ async function handleMessages(req, res, raw, fixtures, journal, defaults, setCor
934
1161
  return;
935
1162
  }
936
1163
  const response = await require_helpers.resolveResponse(fixture, completionReq);
1164
+ const misbehavior = require_misbehavior.planMisbehavior({
1165
+ wire: "anthropic",
1166
+ fixture,
1167
+ response,
1168
+ request: completionReq,
1169
+ stream: claudeReq.stream === true,
1170
+ emitsToolCallIds: true,
1171
+ defaults,
1172
+ rawHeaders: req.headers,
1173
+ url: req.url
1174
+ });
1175
+ if (misbehavior.kind === "error") {
1176
+ require_misbehavior.recordMisbehaviorOutcome({
1177
+ entry: journal.add({
1178
+ method: req.method ?? "POST",
1179
+ path: req.url ?? "/v1/messages",
1180
+ headers: require_helpers.flattenHeaders(req.headers),
1181
+ body: completionReq,
1182
+ response: {
1183
+ status: misbehavior.status,
1184
+ fixture
1185
+ }
1186
+ }),
1187
+ summary: misbehavior.summary,
1188
+ defaults,
1189
+ testId
1190
+ });
1191
+ if (!misbehavior.summary?.evaluations.length) logger.error(`POST /v1/messages: ${misbehavior.message}`);
1192
+ require_sse_writer.writeErrorResponse(res, misbehavior.status, JSON.stringify({
1193
+ type: "error",
1194
+ error: {
1195
+ type: misbehavior.status === 400 ? "invalid_request_error" : "api_error",
1196
+ code: misbehavior.code,
1197
+ message: misbehavior.message
1198
+ }
1199
+ }));
1200
+ return;
1201
+ }
937
1202
  const latency = fixture.latency ?? defaults.latency;
938
1203
  const chunkSize = Math.max(1, fixture.chunkSize ?? defaults.chunkSize);
939
- if (require_helpers.isErrorResponse(response)) {
940
- const status = response.status ?? 500;
941
- journal.add({
1204
+ if (misbehavior.kind === "applied") {
1205
+ const prepared = prepareClaudeMisbehavior(misbehavior, {
1206
+ request: completionReq,
1207
+ stream: claudeReq.stream === true,
1208
+ chunkSize,
1209
+ logger,
1210
+ strict: require_helpers.resolveStrictMode(defaults.strict, req.headers)
1211
+ });
1212
+ const entry = journal.add({
942
1213
  method: req.method ?? "POST",
943
1214
  path: req.url ?? "/v1/messages",
944
1215
  headers: require_helpers.flattenHeaders(req.headers),
945
1216
  body: completionReq,
946
1217
  response: {
947
- status,
1218
+ status: 200,
948
1219
  fixture
949
1220
  }
950
1221
  });
1222
+ require_misbehavior.recordMisbehaviorOutcome({
1223
+ entry,
1224
+ summary: prepared.plan.summary,
1225
+ defaults,
1226
+ testId
1227
+ });
1228
+ if (!prepared.stream) {
1229
+ res.writeHead(200, { "Content-Type": "application/json" });
1230
+ res.end(JSON.stringify(prepared.body));
1231
+ } else {
1232
+ const interruption = require_interruption.createInterruptionSignal(fixture);
1233
+ try {
1234
+ if (!await writeClaudeSSEStream(res, prepared.events, {
1235
+ latency,
1236
+ streamingProfile: fixture.streamingProfile,
1237
+ recordedTimings: fixture.recordedTimings,
1238
+ replaySpeed: fixture.replaySpeed ?? defaults.replaySpeed,
1239
+ signal: interruption?.signal,
1240
+ onChunkSent: interruption?.tick
1241
+ })) {
1242
+ if (!res.writableEnded) res.destroy();
1243
+ entry.response.interrupted = true;
1244
+ entry.response.interruptReason = interruption?.reason();
1245
+ }
1246
+ } finally {
1247
+ interruption?.cleanup();
1248
+ }
1249
+ }
1250
+ return;
1251
+ }
1252
+ if (require_helpers.isErrorResponse(response)) {
1253
+ const status = response.status ?? 500;
1254
+ require_misbehavior.recordMisbehaviorOutcome({
1255
+ entry: journal.add({
1256
+ method: req.method ?? "POST",
1257
+ path: req.url ?? "/v1/messages",
1258
+ headers: require_helpers.flattenHeaders(req.headers),
1259
+ body: completionReq,
1260
+ response: {
1261
+ status,
1262
+ fixture
1263
+ }
1264
+ }),
1265
+ summary: misbehavior.summary,
1266
+ defaults,
1267
+ testId
1268
+ });
951
1269
  const anthropicError = {
952
1270
  type: "error",
953
1271
  error: {
@@ -958,7 +1276,7 @@ async function handleMessages(req, res, raw, fixtures, journal, defaults, setCor
958
1276
  require_sse_writer.writeErrorResponse(res, status, JSON.stringify(anthropicError), { retryAfter: response.retryAfter });
959
1277
  return;
960
1278
  }
961
- if (require_helpers.isContentWithToolCallsResponse(response)) {
1279
+ if (require_helpers.isCombinedFixtureResponse(response)) {
962
1280
  if (response.webSearches?.length) logger.warn("webSearches in fixture response are not supported for Claude Messages API — ignoring");
963
1281
  const overrides = require_helpers.extractOverrides(response);
964
1282
  const effectiveStrict = require_helpers.resolveStrictMode(defaults.strict, req.headers);
@@ -974,12 +1292,19 @@ async function handleMessages(req, res, raw, fixtures, journal, defaults, setCor
974
1292
  fixture
975
1293
  }
976
1294
  });
1295
+ require_misbehavior.recordMisbehaviorOutcome({
1296
+ entry: journalEntry,
1297
+ summary: misbehavior.summary,
1298
+ defaults,
1299
+ testId
1300
+ });
1301
+ const functionToolCalls = require_helpers.requireEmittedFunctionToolCalls(response, "Anthropic Messages");
977
1302
  if (claudeReq.stream !== true) {
978
- const body = buildClaudeContentWithToolCallsResponse(response.content ?? "", response.toolCalls ?? [], completionReq.model, logger, effReasoning, overrides, effReasoningSignature, effRedactedThinking, response.blocks);
1303
+ const body = buildClaudeContentWithToolCallsResponse(response.content ?? "", functionToolCalls, completionReq.model, logger, effReasoning, overrides, effReasoningSignature, effRedactedThinking, response.blocks);
979
1304
  res.writeHead(200, { "Content-Type": "application/json" });
980
1305
  res.end(JSON.stringify(body));
981
1306
  } else {
982
- const events = buildClaudeContentWithToolCallsStreamEvents(response.content ?? "", response.toolCalls ?? [], completionReq.model, chunkSize, logger, effReasoning, overrides, effReasoningSignature, effRedactedThinking, response.blocks);
1307
+ const events = buildClaudeContentWithToolCallsStreamEvents(response.content ?? "", functionToolCalls, completionReq.model, chunkSize, logger, effReasoning, overrides, effReasoningSignature, effRedactedThinking, response.blocks);
983
1308
  const interruption = require_interruption.createInterruptionSignal(fixture);
984
1309
  if (!await writeClaudeSSEStream(res, events, {
985
1310
  latency,
@@ -1013,6 +1338,12 @@ async function handleMessages(req, res, raw, fixtures, journal, defaults, setCor
1013
1338
  fixture
1014
1339
  }
1015
1340
  });
1341
+ require_misbehavior.recordMisbehaviorOutcome({
1342
+ entry: journalEntry,
1343
+ summary: misbehavior.summary,
1344
+ defaults,
1345
+ testId
1346
+ });
1016
1347
  if (claudeReq.stream !== true) {
1017
1348
  const body = buildClaudeTextResponse(response.content, completionReq.model, effReasoning, overrides, effReasoningSignature, effRedactedThinking);
1018
1349
  res.writeHead(200, { "Content-Type": "application/json" });
@@ -1052,12 +1383,19 @@ async function handleMessages(req, res, raw, fixtures, journal, defaults, setCor
1052
1383
  fixture
1053
1384
  }
1054
1385
  });
1386
+ require_misbehavior.recordMisbehaviorOutcome({
1387
+ entry: journalEntry,
1388
+ summary: misbehavior.summary,
1389
+ defaults,
1390
+ testId
1391
+ });
1392
+ const functionToolCalls = require_helpers.requireEmittedFunctionToolCalls(response, "Anthropic Messages");
1055
1393
  if (claudeReq.stream !== true) {
1056
- const body = buildClaudeToolCallResponse(response.toolCalls, completionReq.model, logger, effReasoning, overrides, effReasoningSignature, effRedactedThinking);
1394
+ const body = buildClaudeToolCallResponse(functionToolCalls, completionReq.model, logger, effReasoning, overrides, effReasoningSignature, effRedactedThinking);
1057
1395
  res.writeHead(200, { "Content-Type": "application/json" });
1058
1396
  res.end(JSON.stringify(body));
1059
1397
  } else {
1060
- const events = buildClaudeToolCallStreamEvents(response.toolCalls, completionReq.model, chunkSize, logger, effReasoning, overrides, effReasoningSignature, effRedactedThinking);
1398
+ const events = buildClaudeToolCallStreamEvents(functionToolCalls, completionReq.model, chunkSize, logger, effReasoning, overrides, effReasoningSignature, effRedactedThinking);
1061
1399
  const interruption = require_interruption.createInterruptionSignal(fixture);
1062
1400
  if (!await writeClaudeSSEStream(res, events, {
1063
1401
  latency,
@@ -1075,15 +1413,20 @@ async function handleMessages(req, res, raw, fixtures, journal, defaults, setCor
1075
1413
  }
1076
1414
  return;
1077
1415
  }
1078
- journal.add({
1079
- method: req.method ?? "POST",
1080
- path: req.url ?? "/v1/messages",
1081
- headers: require_helpers.flattenHeaders(req.headers),
1082
- body: completionReq,
1083
- response: {
1084
- status: 500,
1085
- fixture
1086
- }
1416
+ require_misbehavior.recordMisbehaviorOutcome({
1417
+ entry: journal.add({
1418
+ method: req.method ?? "POST",
1419
+ path: req.url ?? "/v1/messages",
1420
+ headers: require_helpers.flattenHeaders(req.headers),
1421
+ body: completionReq,
1422
+ response: {
1423
+ status: 500,
1424
+ fixture
1425
+ }
1426
+ }),
1427
+ summary: misbehavior.summary,
1428
+ defaults,
1429
+ testId
1087
1430
  });
1088
1431
  require_sse_writer.writeErrorResponse(res, 500, JSON.stringify({ error: {
1089
1432
  message: "Fixture response did not match any known type",
@@ -1093,4 +1436,5 @@ async function handleMessages(req, res, raw, fixtures, journal, defaults, setCor
1093
1436
 
1094
1437
  //#endregion
1095
1438
  exports.handleMessages = handleMessages;
1439
+ exports.prepareClaudeMisbehavior = prepareClaudeMisbehavior;
1096
1440
  //# sourceMappingURL=messages.cjs.map