@copilotkit/aimock 1.45.0 → 1.46.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 (426) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/CHANGELOG.md +24 -0
  4. package/README.md +7 -1
  5. package/dist/agui-mock.cjs +25 -25
  6. package/dist/agui-mock.cjs.map +1 -1
  7. package/dist/agui-mock.d.cts.map +1 -1
  8. package/dist/agui-mock.d.ts.map +1 -1
  9. package/dist/agui-mock.js +25 -25
  10. package/dist/agui-mock.js.map +1 -1
  11. package/dist/agui-types.d.ts.map +1 -1
  12. package/dist/aimock-cli.cjs +15 -1
  13. package/dist/aimock-cli.cjs.map +1 -1
  14. package/dist/aimock-cli.d.cts.map +1 -1
  15. package/dist/aimock-cli.d.ts.map +1 -1
  16. package/dist/aimock-cli.js +16 -2
  17. package/dist/aimock-cli.js.map +1 -1
  18. package/dist/api-key-auth.cjs +10 -9
  19. package/dist/api-key-auth.cjs.map +1 -1
  20. package/dist/api-key-auth.d.cts.map +1 -1
  21. package/dist/api-key-auth.d.ts.map +1 -1
  22. package/dist/api-key-auth.js +11 -10
  23. package/dist/api-key-auth.js.map +1 -1
  24. package/dist/batches.cjs +2 -4
  25. package/dist/batches.cjs.map +1 -1
  26. package/dist/batches.d.cts.map +1 -1
  27. package/dist/batches.d.ts.map +1 -1
  28. package/dist/batches.js +2 -4
  29. package/dist/batches.js.map +1 -1
  30. package/dist/bedrock-converse.cjs +61 -80
  31. package/dist/bedrock-converse.cjs.map +1 -1
  32. package/dist/bedrock-converse.d.cts.map +1 -1
  33. package/dist/bedrock-converse.d.ts.map +1 -1
  34. package/dist/bedrock-converse.js +58 -77
  35. package/dist/bedrock-converse.js.map +1 -1
  36. package/dist/bedrock.cjs +65 -97
  37. package/dist/bedrock.cjs.map +1 -1
  38. package/dist/bedrock.d.cts.map +1 -1
  39. package/dist/bedrock.d.ts.map +1 -1
  40. package/dist/bedrock.js +62 -94
  41. package/dist/bedrock.js.map +1 -1
  42. package/dist/byteplus-video.cjs +11 -10
  43. package/dist/byteplus-video.cjs.map +1 -1
  44. package/dist/byteplus-video.d.cts.map +1 -1
  45. package/dist/byteplus-video.d.ts.map +1 -1
  46. package/dist/byteplus-video.js +5 -4
  47. package/dist/byteplus-video.js.map +1 -1
  48. package/dist/chaos.cjs +5 -4
  49. package/dist/chaos.cjs.map +1 -1
  50. package/dist/chaos.d.cts.map +1 -1
  51. package/dist/chaos.d.ts.map +1 -1
  52. package/dist/chaos.js +5 -4
  53. package/dist/chaos.js.map +1 -1
  54. package/dist/cli.cjs +15 -0
  55. package/dist/cli.cjs.map +1 -1
  56. package/dist/cli.js +15 -0
  57. package/dist/cli.js.map +1 -1
  58. package/dist/cohere.cjs +49 -74
  59. package/dist/cohere.cjs.map +1 -1
  60. package/dist/cohere.d.cts.map +1 -1
  61. package/dist/cohere.d.ts.map +1 -1
  62. package/dist/cohere.js +47 -72
  63. package/dist/cohere.js.map +1 -1
  64. package/dist/config-loader.cjs +29 -1
  65. package/dist/config-loader.cjs.map +1 -1
  66. package/dist/config-loader.d.cts +7 -1
  67. package/dist/config-loader.d.cts.map +1 -1
  68. package/dist/config-loader.d.ts +7 -1
  69. package/dist/config-loader.d.ts.map +1 -1
  70. package/dist/config-loader.js +29 -2
  71. package/dist/config-loader.js.map +1 -1
  72. package/dist/count-tokens.cjs +146 -0
  73. package/dist/count-tokens.cjs.map +1 -0
  74. package/dist/count-tokens.js +146 -0
  75. package/dist/count-tokens.js.map +1 -0
  76. package/dist/elevenlabs-audio.cjs +36 -34
  77. package/dist/elevenlabs-audio.cjs.map +1 -1
  78. package/dist/elevenlabs-audio.d.cts.map +1 -1
  79. package/dist/elevenlabs-audio.d.ts.map +1 -1
  80. package/dist/elevenlabs-audio.js +33 -31
  81. package/dist/elevenlabs-audio.js.map +1 -1
  82. package/dist/elevenlabs-voice.cjs +38 -37
  83. package/dist/elevenlabs-voice.cjs.map +1 -1
  84. package/dist/elevenlabs-voice.d.cts.map +1 -1
  85. package/dist/elevenlabs-voice.d.ts.map +1 -1
  86. package/dist/elevenlabs-voice.js +33 -32
  87. package/dist/elevenlabs-voice.js.map +1 -1
  88. package/dist/embedding-request.cjs +16 -0
  89. package/dist/embedding-request.cjs.map +1 -0
  90. package/dist/embedding-request.js +14 -0
  91. package/dist/embedding-request.js.map +1 -0
  92. package/dist/embeddings.cjs +30 -20
  93. package/dist/embeddings.cjs.map +1 -1
  94. package/dist/embeddings.d.cts.map +1 -1
  95. package/dist/embeddings.d.ts.map +1 -1
  96. package/dist/embeddings.js +30 -20
  97. package/dist/embeddings.js.map +1 -1
  98. package/dist/fal-audio.cjs +45 -43
  99. package/dist/fal-audio.cjs.map +1 -1
  100. package/dist/fal-audio.d.cts.map +1 -1
  101. package/dist/fal-audio.d.ts.map +1 -1
  102. package/dist/fal-audio.js +42 -40
  103. package/dist/fal-audio.js.map +1 -1
  104. package/dist/fal.cjs +17 -15
  105. package/dist/fal.cjs.map +1 -1
  106. package/dist/fal.js +16 -14
  107. package/dist/fal.js.map +1 -1
  108. package/dist/files.cjs +2 -4
  109. package/dist/files.cjs.map +1 -1
  110. package/dist/files.d.cts.map +1 -1
  111. package/dist/files.d.ts.map +1 -1
  112. package/dist/files.js +2 -4
  113. package/dist/files.js.map +1 -1
  114. package/dist/fine-tuning.cjs +2 -4
  115. package/dist/fine-tuning.cjs.map +1 -1
  116. package/dist/fine-tuning.d.cts.map +1 -1
  117. package/dist/fine-tuning.d.ts.map +1 -1
  118. package/dist/fine-tuning.js +2 -4
  119. package/dist/fine-tuning.js.map +1 -1
  120. package/dist/fixture-loader.cjs +37 -42
  121. package/dist/fixture-loader.cjs.map +1 -1
  122. package/dist/fixture-loader.d.cts.map +1 -1
  123. package/dist/fixture-loader.d.ts.map +1 -1
  124. package/dist/fixture-loader.js +37 -42
  125. package/dist/fixture-loader.js.map +1 -1
  126. package/dist/gemini-embeddings.cjs +26 -24
  127. package/dist/gemini-embeddings.cjs.map +1 -1
  128. package/dist/gemini-embeddings.js +26 -24
  129. package/dist/gemini-embeddings.js.map +1 -1
  130. package/dist/gemini-interactions.cjs +50 -35
  131. package/dist/gemini-interactions.cjs.map +1 -1
  132. package/dist/gemini-interactions.d.cts +0 -1
  133. package/dist/gemini-interactions.d.cts.map +1 -1
  134. package/dist/gemini-interactions.d.ts +0 -1
  135. package/dist/gemini-interactions.d.ts.map +1 -1
  136. package/dist/gemini-interactions.js +49 -34
  137. package/dist/gemini-interactions.js.map +1 -1
  138. package/dist/gemini.cjs +57 -67
  139. package/dist/gemini.cjs.map +1 -1
  140. package/dist/gemini.d.cts.map +1 -1
  141. package/dist/gemini.d.ts.map +1 -1
  142. package/dist/gemini.js +56 -67
  143. package/dist/gemini.js.map +1 -1
  144. package/dist/grok-video.cjs +14 -12
  145. package/dist/grok-video.cjs.map +1 -1
  146. package/dist/grok-video.d.cts.map +1 -1
  147. package/dist/grok-video.d.ts.map +1 -1
  148. package/dist/grok-video.js +8 -6
  149. package/dist/grok-video.js.map +1 -1
  150. package/dist/helpers.cjs +11 -68
  151. package/dist/helpers.cjs.map +1 -1
  152. package/dist/helpers.d.cts.map +1 -1
  153. package/dist/helpers.d.ts.map +1 -1
  154. package/dist/helpers.js +12 -67
  155. package/dist/helpers.js.map +1 -1
  156. package/dist/images.cjs +30 -28
  157. package/dist/images.cjs.map +1 -1
  158. package/dist/images.d.cts.map +1 -1
  159. package/dist/images.d.ts.map +1 -1
  160. package/dist/images.js +27 -25
  161. package/dist/images.js.map +1 -1
  162. package/dist/index.d.cts +2 -2
  163. package/dist/index.d.ts +2 -2
  164. package/dist/journal.cjs +3 -1
  165. package/dist/journal.cjs.map +1 -1
  166. package/dist/journal.d.cts.map +1 -1
  167. package/dist/journal.d.ts.map +1 -1
  168. package/dist/journal.js +2 -1
  169. package/dist/journal.js.map +1 -1
  170. package/dist/llmock.cjs +3 -0
  171. package/dist/llmock.cjs.map +1 -1
  172. package/dist/llmock.d.cts.map +1 -1
  173. package/dist/llmock.d.ts.map +1 -1
  174. package/dist/llmock.js +3 -0
  175. package/dist/llmock.js.map +1 -1
  176. package/dist/mcp-fakes.d.cts.map +1 -1
  177. package/dist/mcp-handler.cjs +14 -4
  178. package/dist/mcp-handler.cjs.map +1 -1
  179. package/dist/mcp-handler.js +14 -4
  180. package/dist/mcp-handler.js.map +1 -1
  181. package/dist/mcp-recorder.cjs +2 -1
  182. package/dist/mcp-recorder.cjs.map +1 -1
  183. package/dist/mcp-recorder.js +3 -2
  184. package/dist/mcp-recorder.js.map +1 -1
  185. package/dist/messages.cjs +111 -96
  186. package/dist/messages.cjs.map +1 -1
  187. package/dist/messages.d.cts.map +1 -1
  188. package/dist/messages.d.ts.map +1 -1
  189. package/dist/messages.js +109 -95
  190. package/dist/messages.js.map +1 -1
  191. package/dist/metrics.cjs +5 -2
  192. package/dist/metrics.cjs.map +1 -1
  193. package/dist/metrics.d.cts.map +1 -1
  194. package/dist/metrics.d.ts.map +1 -1
  195. package/dist/metrics.js +6 -3
  196. package/dist/metrics.js.map +1 -1
  197. package/dist/model-utils.cjs +1 -0
  198. package/dist/model-utils.cjs.map +1 -1
  199. package/dist/model-utils.js +1 -1
  200. package/dist/model-utils.js.map +1 -1
  201. package/dist/moderation.cjs +15 -12
  202. package/dist/moderation.cjs.map +1 -1
  203. package/dist/moderation.js +14 -11
  204. package/dist/moderation.js.map +1 -1
  205. package/dist/ollama.cjs +128 -68
  206. package/dist/ollama.cjs.map +1 -1
  207. package/dist/ollama.d.cts.map +1 -1
  208. package/dist/ollama.d.ts.map +1 -1
  209. package/dist/ollama.js +124 -64
  210. package/dist/ollama.js.map +1 -1
  211. package/dist/openapi.cjs +323 -3
  212. package/dist/openapi.cjs.map +1 -1
  213. package/dist/openapi.d.cts.map +1 -1
  214. package/dist/openapi.d.ts.map +1 -1
  215. package/dist/openapi.js +324 -4
  216. package/dist/openapi.js.map +1 -1
  217. package/dist/openrouter-chat.cjs +11 -155
  218. package/dist/openrouter-chat.cjs.map +1 -1
  219. package/dist/openrouter-chat.js +11 -155
  220. package/dist/openrouter-chat.js.map +1 -1
  221. package/dist/openrouter-video.cjs +76 -71
  222. package/dist/openrouter-video.cjs.map +1 -1
  223. package/dist/openrouter-video.d.cts.map +1 -1
  224. package/dist/openrouter-video.d.ts.map +1 -1
  225. package/dist/openrouter-video.js +63 -58
  226. package/dist/openrouter-video.js.map +1 -1
  227. package/dist/recorder.cjs +176 -95
  228. package/dist/recorder.cjs.map +1 -1
  229. package/dist/recorder.d.cts.map +1 -1
  230. package/dist/recorder.d.ts.map +1 -1
  231. package/dist/recorder.js +176 -95
  232. package/dist/recorder.js.map +1 -1
  233. package/dist/rerank.cjs +13 -11
  234. package/dist/rerank.cjs.map +1 -1
  235. package/dist/rerank.js +12 -10
  236. package/dist/rerank.js.map +1 -1
  237. package/dist/response/catalog/anthropic-page.cjs +39 -0
  238. package/dist/response/catalog/anthropic-page.cjs.map +1 -0
  239. package/dist/response/catalog/anthropic-page.js +38 -0
  240. package/dist/response/catalog/anthropic-page.js.map +1 -0
  241. package/dist/response/catalog/collect.cjs +61 -0
  242. package/dist/response/catalog/collect.cjs.map +1 -0
  243. package/dist/response/catalog/collect.js +59 -0
  244. package/dist/response/catalog/collect.js.map +1 -0
  245. package/dist/response/catalog/gemini-page.cjs +25 -0
  246. package/dist/response/catalog/gemini-page.cjs.map +1 -0
  247. package/dist/response/catalog/gemini-page.js +24 -0
  248. package/dist/response/catalog/gemini-page.js.map +1 -0
  249. package/dist/response/catalog/render.cjs +182 -0
  250. package/dist/response/catalog/render.cjs.map +1 -0
  251. package/dist/response/catalog/render.js +171 -0
  252. package/dist/response/catalog/render.js.map +1 -0
  253. package/dist/response/errors.cjs +225 -0
  254. package/dist/response/errors.cjs.map +1 -0
  255. package/dist/response/errors.js +224 -0
  256. package/dist/response/errors.js.map +1 -0
  257. package/dist/response/finish.cjs +39 -0
  258. package/dist/response/finish.cjs.map +1 -0
  259. package/dist/response/finish.js +35 -0
  260. package/dist/response/finish.js.map +1 -0
  261. package/dist/response/policy.cjs +126 -0
  262. package/dist/response/policy.cjs.map +1 -0
  263. package/dist/response/policy.js +120 -0
  264. package/dist/response/policy.js.map +1 -0
  265. package/dist/response/profiles.cjs +69 -0
  266. package/dist/response/profiles.cjs.map +1 -0
  267. package/dist/response/profiles.js +65 -0
  268. package/dist/response/profiles.js.map +1 -0
  269. package/dist/response/usage/codecs/anthropic.cjs +52 -0
  270. package/dist/response/usage/codecs/anthropic.cjs.map +1 -0
  271. package/dist/response/usage/codecs/anthropic.js +50 -0
  272. package/dist/response/usage/codecs/anthropic.js.map +1 -0
  273. package/dist/response/usage/codecs/cohere.cjs +36 -0
  274. package/dist/response/usage/codecs/cohere.cjs.map +1 -0
  275. package/dist/response/usage/codecs/cohere.js +35 -0
  276. package/dist/response/usage/codecs/cohere.js.map +1 -0
  277. package/dist/response/usage/codecs/converse.cjs +16 -0
  278. package/dist/response/usage/codecs/converse.cjs.map +1 -0
  279. package/dist/response/usage/codecs/converse.js +15 -0
  280. package/dist/response/usage/codecs/converse.js.map +1 -0
  281. package/dist/response/usage/codecs/gemini.cjs +31 -0
  282. package/dist/response/usage/codecs/gemini.cjs.map +1 -0
  283. package/dist/response/usage/codecs/gemini.js +31 -0
  284. package/dist/response/usage/codecs/gemini.js.map +1 -0
  285. package/dist/response/usage/codecs/interactions.cjs +22 -0
  286. package/dist/response/usage/codecs/interactions.cjs.map +1 -0
  287. package/dist/response/usage/codecs/interactions.js +21 -0
  288. package/dist/response/usage/codecs/interactions.js.map +1 -0
  289. package/dist/response/usage/codecs/ollama.cjs +17 -0
  290. package/dist/response/usage/codecs/ollama.cjs.map +1 -0
  291. package/dist/response/usage/codecs/ollama.js +17 -0
  292. package/dist/response/usage/codecs/ollama.js.map +1 -0
  293. package/dist/response/usage/codecs/openai.cjs +52 -0
  294. package/dist/response/usage/codecs/openai.cjs.map +1 -0
  295. package/dist/response/usage/codecs/openai.js +50 -0
  296. package/dist/response/usage/codecs/openai.js.map +1 -0
  297. package/dist/response/usage/codecs/openrouter.cjs +68 -0
  298. package/dist/response/usage/codecs/openrouter.cjs.map +1 -0
  299. package/dist/response/usage/codecs/openrouter.js +67 -0
  300. package/dist/response/usage/codecs/openrouter.js.map +1 -0
  301. package/dist/response/usage/codecs/realtime.cjs +19 -0
  302. package/dist/response/usage/codecs/realtime.cjs.map +1 -0
  303. package/dist/response/usage/codecs/realtime.js +18 -0
  304. package/dist/response/usage/codecs/realtime.js.map +1 -0
  305. package/dist/response/usage/codecs/responses.cjs +21 -0
  306. package/dist/response/usage/codecs/responses.cjs.map +1 -0
  307. package/dist/response/usage/codecs/responses.js +20 -0
  308. package/dist/response/usage/codecs/responses.js.map +1 -0
  309. package/dist/response/usage/estimate.cjs +23 -0
  310. package/dist/response/usage/estimate.cjs.map +1 -0
  311. package/dist/response/usage/estimate.js +21 -0
  312. package/dist/response/usage/estimate.js.map +1 -0
  313. package/dist/response/usage/fields.cjs +72 -0
  314. package/dist/response/usage/fields.cjs.map +1 -0
  315. package/dist/response/usage/fields.js +70 -0
  316. package/dist/response/usage/fields.js.map +1 -0
  317. package/dist/response/usage/recording.cjs +52 -0
  318. package/dist/response/usage/recording.cjs.map +1 -0
  319. package/dist/response/usage/recording.js +52 -0
  320. package/dist/response/usage/recording.js.map +1 -0
  321. package/dist/responses.cjs +45 -58
  322. package/dist/responses.cjs.map +1 -1
  323. package/dist/responses.d.cts.map +1 -1
  324. package/dist/responses.d.ts.map +1 -1
  325. package/dist/responses.js +44 -57
  326. package/dist/responses.js.map +1 -1
  327. package/dist/route-registry.cjs +45 -0
  328. package/dist/route-registry.cjs.map +1 -1
  329. package/dist/route-registry.d.cts.map +1 -1
  330. package/dist/route-registry.d.ts.map +1 -1
  331. package/dist/route-registry.js +41 -1
  332. package/dist/route-registry.js.map +1 -1
  333. package/dist/router.cjs +4 -0
  334. package/dist/router.cjs.map +1 -1
  335. package/dist/router.d.cts.map +1 -1
  336. package/dist/router.d.ts.map +1 -1
  337. package/dist/router.js +3 -0
  338. package/dist/router.js.map +1 -1
  339. package/dist/search.cjs +13 -11
  340. package/dist/search.cjs.map +1 -1
  341. package/dist/search.js +12 -10
  342. package/dist/search.js.map +1 -1
  343. package/dist/server.cjs +222 -146
  344. package/dist/server.cjs.map +1 -1
  345. package/dist/server.d.cts.map +1 -1
  346. package/dist/server.d.ts.map +1 -1
  347. package/dist/server.js +223 -147
  348. package/dist/server.js.map +1 -1
  349. package/dist/speech.cjs +20 -18
  350. package/dist/speech.cjs.map +1 -1
  351. package/dist/speech.d.cts.map +1 -1
  352. package/dist/speech.d.ts.map +1 -1
  353. package/dist/speech.js +19 -17
  354. package/dist/speech.js.map +1 -1
  355. package/dist/sse-writer.cjs +7 -0
  356. package/dist/sse-writer.cjs.map +1 -1
  357. package/dist/sse-writer.d.cts.map +1 -1
  358. package/dist/sse-writer.d.ts.map +1 -1
  359. package/dist/sse-writer.js +7 -1
  360. package/dist/sse-writer.js.map +1 -1
  361. package/dist/stream-collapse.cjs +118 -11
  362. package/dist/stream-collapse.cjs.map +1 -1
  363. package/dist/stream-collapse.d.cts +10 -9
  364. package/dist/stream-collapse.d.cts.map +1 -1
  365. package/dist/stream-collapse.d.ts +10 -9
  366. package/dist/stream-collapse.d.ts.map +1 -1
  367. package/dist/stream-collapse.js +118 -11
  368. package/dist/stream-collapse.js.map +1 -1
  369. package/dist/transcription.cjs +12 -10
  370. package/dist/transcription.cjs.map +1 -1
  371. package/dist/transcription.d.cts.map +1 -1
  372. package/dist/transcription.d.ts.map +1 -1
  373. package/dist/transcription.js +11 -9
  374. package/dist/transcription.js.map +1 -1
  375. package/dist/types.cjs.map +1 -1
  376. package/dist/types.d.cts +62 -3
  377. package/dist/types.d.cts.map +1 -1
  378. package/dist/types.d.ts +62 -3
  379. package/dist/types.d.ts.map +1 -1
  380. package/dist/types.js.map +1 -1
  381. package/dist/vector-mock.cjs +3 -8
  382. package/dist/vector-mock.cjs.map +1 -1
  383. package/dist/vector-mock.d.cts.map +1 -1
  384. package/dist/vector-mock.d.ts.map +1 -1
  385. package/dist/vector-mock.js +3 -8
  386. package/dist/vector-mock.js.map +1 -1
  387. package/dist/vector-stores.cjs +2 -4
  388. package/dist/vector-stores.cjs.map +1 -1
  389. package/dist/vector-stores.d.cts.map +1 -1
  390. package/dist/vector-stores.d.ts.map +1 -1
  391. package/dist/vector-stores.js +2 -4
  392. package/dist/vector-stores.js.map +1 -1
  393. package/dist/veo-video.cjs +16 -14
  394. package/dist/veo-video.cjs.map +1 -1
  395. package/dist/veo-video.js +10 -8
  396. package/dist/veo-video.js.map +1 -1
  397. package/dist/video.cjs +21 -19
  398. package/dist/video.cjs.map +1 -1
  399. package/dist/video.d.cts.map +1 -1
  400. package/dist/video.d.ts.map +1 -1
  401. package/dist/video.js +20 -18
  402. package/dist/video.js.map +1 -1
  403. package/dist/ws-gemini-live.cjs +11 -3
  404. package/dist/ws-gemini-live.cjs.map +1 -1
  405. package/dist/ws-gemini-live.d.cts +0 -1
  406. package/dist/ws-gemini-live.d.cts.map +1 -1
  407. package/dist/ws-gemini-live.d.ts +0 -1
  408. package/dist/ws-gemini-live.d.ts.map +1 -1
  409. package/dist/ws-gemini-live.js +10 -2
  410. package/dist/ws-gemini-live.js.map +1 -1
  411. package/dist/ws-live.cjs +6 -5
  412. package/dist/ws-live.cjs.map +1 -1
  413. package/dist/ws-live.js +5 -4
  414. package/dist/ws-live.js.map +1 -1
  415. package/dist/ws-realtime.cjs +28 -54
  416. package/dist/ws-realtime.cjs.map +1 -1
  417. package/dist/ws-realtime.d.cts.map +1 -1
  418. package/dist/ws-realtime.d.ts.map +1 -1
  419. package/dist/ws-realtime.js +25 -51
  420. package/dist/ws-realtime.js.map +1 -1
  421. package/dist/ws-responses.cjs +8 -6
  422. package/dist/ws-responses.cjs.map +1 -1
  423. package/dist/ws-responses.js +7 -5
  424. package/dist/ws-responses.js.map +1 -1
  425. package/package.json +4 -1
  426. package/skills/write-fixtures/SKILL.md +25 -16
package/dist/messages.cjs CHANGED
@@ -1,10 +1,15 @@
1
+ const require_profiles = require('./response/profiles.cjs');
2
+ const require_errors = require('./response/errors.cjs');
3
+ const require_policy = require('./response/policy.cjs');
1
4
  const require_helpers = require('./helpers.cjs');
2
5
  const require_sse_writer = require('./sse-writer.cjs');
3
6
  const require_chaos = require('./chaos.cjs');
4
7
  const require_misbehavior = require('./misbehavior.cjs');
5
8
  const require_router = require('./router.cjs');
9
+ const require_anthropic = require('./response/usage/codecs/anthropic.cjs');
6
10
  const require_recorder = require('./recorder.cjs');
7
11
  const require_interruption = require('./interruption.cjs');
12
+ const require_finish = require('./response/finish.cjs');
8
13
 
9
14
  //#region src/messages.ts
10
15
  /**
@@ -191,20 +196,7 @@ function thinkingViolationMessage(v) {
191
196
  }
192
197
  function claudeStopReason(finishReason, defaultReason) {
193
198
  if (!finishReason) return defaultReason;
194
- if (finishReason === "stop") return "end_turn";
195
- if (finishReason === "tool_calls") return "tool_use";
196
- if (finishReason === "length") return "max_tokens";
197
- return finishReason;
198
- }
199
- function claudeUsage(overrides) {
200
- if (!overrides?.usage) return {
201
- input_tokens: 0,
202
- output_tokens: 0
203
- };
204
- return {
205
- input_tokens: overrides.usage.input_tokens ?? overrides.usage.prompt_tokens ?? 0,
206
- output_tokens: overrides.usage.output_tokens ?? overrides.usage.completion_tokens ?? 0
207
- };
199
+ return require_finish.mapAnthropicFinish(finishReason);
208
200
  }
209
201
  /**
210
202
  * Emit faithful Anthropic `redacted_thinking` content-block events at the head
@@ -255,7 +247,7 @@ function buildClaudeTextStreamEvents(content, model, chunkSize, reasoning, overr
255
247
  model: effectiveModel,
256
248
  stop_reason: null,
257
249
  stop_sequence: null,
258
- usage: claudeUsage(overrides)
250
+ usage: require_anthropic.render(require_anthropic.resolve(overrides), "messages-start")
259
251
  }
260
252
  });
261
253
  let blockIndex = 0;
@@ -324,7 +316,7 @@ function buildClaudeTextStreamEvents(content, model, chunkSize, reasoning, overr
324
316
  stop_reason: claudeStopReason(overrides?.finishReason, "end_turn"),
325
317
  stop_sequence: null
326
318
  },
327
- usage: { output_tokens: claudeUsage(overrides).output_tokens }
319
+ usage: require_anthropic.render(require_anthropic.resolve(overrides), "messages-delta")
328
320
  });
329
321
  events.push({ type: "message_stop" });
330
322
  return events;
@@ -344,7 +336,7 @@ function buildClaudeToolCallStreamEvents(toolCalls, model, chunkSize, logger, re
344
336
  model: effectiveModel,
345
337
  stop_reason: null,
346
338
  stop_sequence: null,
347
- usage: claudeUsage(overrides)
339
+ usage: require_anthropic.render(require_anthropic.resolve(overrides), "messages-start")
348
340
  }
349
341
  });
350
342
  let blockIndex = 0;
@@ -420,7 +412,7 @@ function buildClaudeToolCallStreamEvents(toolCalls, model, chunkSize, logger, re
420
412
  stop_reason: claudeStopReason(overrides?.finishReason, "tool_use"),
421
413
  stop_sequence: null
422
414
  },
423
- usage: { output_tokens: claudeUsage(overrides).output_tokens }
415
+ usage: require_anthropic.render(require_anthropic.resolve(overrides), "messages-delta")
424
416
  });
425
417
  events.push({ type: "message_stop" });
426
418
  return events;
@@ -463,7 +455,7 @@ function buildClaudeTextResponse(content, model, reasoning, overrides, reasoning
463
455
  model: overrides?.model ?? model,
464
456
  stop_reason: claudeStopReason(overrides?.finishReason, "end_turn"),
465
457
  stop_sequence: null,
466
- usage: claudeUsage(overrides)
458
+ usage: require_anthropic.render(require_anthropic.resolve(overrides), "messages-final")
467
459
  };
468
460
  }
469
461
  function buildClaudeToolCallResponse(toolCalls, model, logger, reasoning, overrides, reasoningSignature, redactedThinking) {
@@ -491,7 +483,7 @@ function buildClaudeToolCallResponse(toolCalls, model, logger, reasoning, overri
491
483
  model: overrides?.model ?? model,
492
484
  stop_reason: claudeStopReason(overrides?.finishReason, "tool_use"),
493
485
  stop_sequence: null,
494
- usage: claudeUsage(overrides)
486
+ usage: require_anthropic.render(require_anthropic.resolve(overrides), "messages-final")
495
487
  };
496
488
  }
497
489
  function buildClaudeContentWithToolCallsStreamEvents(content, toolCalls, model, chunkSize, logger, reasoning, overrides, reasoningSignature, redactedThinking, blocks) {
@@ -509,7 +501,7 @@ function buildClaudeContentWithToolCallsStreamEvents(content, toolCalls, model,
509
501
  model: effectiveModel,
510
502
  stop_reason: null,
511
503
  stop_sequence: null,
512
- usage: claudeUsage(overrides)
504
+ usage: require_anthropic.render(require_anthropic.resolve(overrides), "messages-start")
513
505
  }
514
506
  });
515
507
  let blockIndex = 0;
@@ -613,7 +605,7 @@ function buildClaudeContentWithToolCallsStreamEvents(content, toolCalls, model,
613
605
  stop_reason: claudeStopReason(overrides?.finishReason, outcome.hasToolCalls ? "tool_use" : "end_turn"),
614
606
  stop_sequence: null
615
607
  },
616
- usage: { output_tokens: claudeUsage(overrides).output_tokens }
608
+ usage: require_anthropic.render(require_anthropic.resolve(overrides), "messages-delta")
617
609
  });
618
610
  events.push({ type: "message_stop" });
619
611
  return events;
@@ -678,7 +670,7 @@ function buildClaudeContentWithToolCallsStreamEvents(content, toolCalls, model,
678
670
  stop_reason: claudeStopReason(overrides?.finishReason, "tool_use"),
679
671
  stop_sequence: null
680
672
  },
681
- usage: { output_tokens: claudeUsage(overrides).output_tokens }
673
+ usage: require_anthropic.render(require_anthropic.resolve(overrides), "messages-delta")
682
674
  });
683
675
  events.push({ type: "message_stop" });
684
676
  return events;
@@ -729,7 +721,7 @@ function buildClaudeContentWithToolCallsResponse(content, toolCalls, model, logg
729
721
  model: overrides?.model ?? model,
730
722
  stop_reason: claudeStopReason(overrides?.finishReason, blockHasTools === false ? "end_turn" : "tool_use"),
731
723
  stop_sequence: null,
732
- usage: claudeUsage(overrides)
724
+ usage: require_anthropic.render(require_anthropic.resolve(overrides), "messages-final")
733
725
  };
734
726
  }
735
727
  /**
@@ -783,10 +775,11 @@ function prepareClaudeMisbehavior(plan, context) {
783
775
  const reasoning = plan.summary.fault === "reasoning-only" ? plan.reasoning ?? "" : require_helpers.resolveReasoningForModel(response.reasoning, context.request.model, context.strict, context.logger);
784
776
  const artifacts = require_helpers.resolveReasoningArtifactsForModel(response.reasoningSignature, response.redactedThinking, context.request.model, context.strict, context.logger);
785
777
  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
- };
778
+ const resolvedUsage = require_anthropic.resolve(void 0, {
779
+ inputTokens: require_helpers.estimatePromptTokens(context.request.messages),
780
+ outputTokens: require_helpers.estimateTokens(content + servedToolCalls.map((call) => call.name + call.arguments).join("") + (reasoning ?? "") + (plan.refusal ?? ""))
781
+ });
782
+ const usage = require_anthropic.render(resolvedUsage, "messages-final", "applied-misbehavior");
790
783
  const overrides = {
791
784
  ...require_helpers.extractOverrides(response),
792
785
  ...plan.stop === "length" ? { finishReason: "length" } : {},
@@ -857,7 +850,7 @@ function prepareClaudeMisbehavior(plan, context) {
857
850
  stop_reason: "max_tokens",
858
851
  stop_sequence: null
859
852
  },
860
- usage: { output_tokens: usage.output_tokens }
853
+ usage: require_anthropic.render(resolvedUsage, "messages-delta", "applied-misbehavior")
861
854
  }, { type: "message_stop" });
862
855
  return {
863
856
  stream: true,
@@ -908,7 +901,7 @@ function prepareClaudeMisbehavior(plan, context) {
908
901
  stop_sequence: null,
909
902
  ...detail
910
903
  },
911
- usage: { output_tokens: usage.output_tokens }
904
+ usage: require_anthropic.render(resolvedUsage, "messages-delta", "applied-misbehavior")
912
905
  },
913
906
  { type: "message_stop" }
914
907
  ],
@@ -958,29 +951,66 @@ async function writeClaudeSSEStream(res, events, optionsOrLatency) {
958
951
  const latency = opts.latency ?? 0;
959
952
  const profile = opts.streamingProfile;
960
953
  const { recordedTimings, replaySpeed } = opts;
961
- const signal = opts.signal;
962
954
  const onChunkSent = opts.onChunkSent;
963
955
  if (res.writableEnded) return true;
964
- res.setHeader("Content-Type", "text/event-stream");
965
- res.setHeader("Cache-Control", "no-cache");
966
- res.setHeader("Connection", "keep-alive");
967
- let chunkIndex = 0;
968
- for (const event of events) {
969
- const chunkDelay = require_sse_writer.calculateDelay(chunkIndex, profile, latency, recordedTimings, replaySpeed);
970
- if (chunkDelay > 0) await require_sse_writer.delay(chunkDelay, signal);
971
- if (signal?.aborted) return false;
972
- if (res.writableEnded) return true;
973
- res.write(`event: ${event.type}\ndata: ${JSON.stringify(event)}\n\n`);
974
- onChunkSent?.();
975
- if (signal?.aborted) return false;
976
- chunkIndex++;
956
+ if (res.destroyed) return false;
957
+ const controller = new AbortController();
958
+ const signal = controller.signal;
959
+ const abort = () => controller.abort();
960
+ const onClose = () => {
961
+ if (!res.writableFinished) abort();
962
+ };
963
+ res.once("close", onClose);
964
+ opts.signal?.addEventListener("abort", abort, { once: true });
965
+ if (opts.signal?.aborted) abort();
966
+ try {
967
+ res.setHeader("Content-Type", "text/event-stream");
968
+ res.setHeader("Cache-Control", "no-cache");
969
+ res.setHeader("Connection", "keep-alive");
970
+ let chunkIndex = 0;
971
+ for (const event of events) {
972
+ const chunkDelay = require_sse_writer.calculateDelay(chunkIndex, profile, latency, recordedTimings, replaySpeed);
973
+ if (chunkDelay > 0) await require_sse_writer.delay(chunkDelay, signal);
974
+ if (signal.aborted || res.destroyed) return false;
975
+ if (res.writableEnded) return true;
976
+ res.write(`event: ${event.type}\ndata: ${JSON.stringify(event)}\n\n`);
977
+ onChunkSent?.();
978
+ if (signal.aborted || res.destroyed) return false;
979
+ chunkIndex++;
980
+ }
981
+ if (!res.writableEnded) res.end();
982
+ return true;
983
+ } finally {
984
+ res.off("close", onClose);
985
+ opts.signal?.removeEventListener("abort", abort);
977
986
  }
978
- if (!res.writableEnded) res.end();
979
- return true;
980
987
  }
981
988
  async function handleMessages(req, res, raw, fixtures, journal, defaults, setCorsHeaders) {
982
989
  const { logger } = defaults;
983
990
  setCorsHeaders(res);
991
+ const missingHeader = require_policy.resolvePolicy(defaults, req.headers).requiredHeaders === "enforce" ? require_profiles.missingRequiredHeader("messages", req.headers) : void 0;
992
+ if (missingHeader) {
993
+ const { id: requestId } = require_helpers.resolveRequestId(req.headers);
994
+ req.headers["x-request-id"] = requestId;
995
+ res.setHeader("X-Request-Id", requestId);
996
+ journal.add({
997
+ method: req.method ?? "POST",
998
+ path: req.url ?? "/v1/messages",
999
+ headers: require_helpers.flattenHeaders(req.headers),
1000
+ body: null,
1001
+ response: {
1002
+ status: 400,
1003
+ fixture: null,
1004
+ source: "internal",
1005
+ ...require_policy.strictOverrideField(defaults.strict, req.headers)
1006
+ }
1007
+ });
1008
+ require_sse_writer.writeErrorResponse(res, 400, require_errors.renderError("messages", "thinking", {
1009
+ message: `${missingHeader}: header is required`,
1010
+ requestId
1011
+ }).body);
1012
+ return;
1013
+ }
984
1014
  let claudeReq;
985
1015
  try {
986
1016
  claudeReq = JSON.parse(raw);
@@ -996,10 +1026,10 @@ async function handleMessages(req, res, raw, fixtures, journal, defaults, setCor
996
1026
  fixture: null
997
1027
  }
998
1028
  });
999
- require_sse_writer.writeErrorResponse(res, 400, JSON.stringify({ error: {
1029
+ require_sse_writer.writeErrorResponse(res, 400, require_errors.renderError("messages", "validation", {
1000
1030
  message: `Malformed JSON: ${detail}`,
1001
1031
  type: "invalid_request_error"
1002
- } }));
1032
+ }).body);
1003
1033
  return;
1004
1034
  }
1005
1035
  if (!require_helpers.isJsonObject(claudeReq)) {
@@ -1013,10 +1043,10 @@ async function handleMessages(req, res, raw, fixtures, journal, defaults, setCor
1013
1043
  fixture: null
1014
1044
  }
1015
1045
  });
1016
- require_sse_writer.writeErrorResponse(res, 400, JSON.stringify({ error: {
1046
+ require_sse_writer.writeErrorResponse(res, 400, require_errors.renderError("messages", "validation", {
1017
1047
  message: "Request body must be a JSON object",
1018
1048
  type: "invalid_request_error"
1019
- } }));
1049
+ }).body);
1020
1050
  return;
1021
1051
  }
1022
1052
  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;
@@ -1031,15 +1061,15 @@ async function handleMessages(req, res, raw, fixtures, journal, defaults, setCor
1031
1061
  fixture: null
1032
1062
  }
1033
1063
  });
1034
- require_sse_writer.writeErrorResponse(res, 400, JSON.stringify({ error: {
1064
+ require_sse_writer.writeErrorResponse(res, 400, require_errors.renderError("messages", "validation", {
1035
1065
  message: messagesError,
1036
1066
  type: "invalid_request_error"
1037
- } }));
1067
+ }).body);
1038
1068
  return;
1039
1069
  }
1040
1070
  const thinkingViolation = validateThinkingInvariants(claudeReq);
1041
1071
  if (thinkingViolation) {
1042
- const effectiveStrict = require_helpers.resolveStrictMode(defaults.strict, req.headers);
1072
+ const effectiveStrict = require_policy.resolveRequestDecisions(defaults.strict, req.headers).thinkingRejection;
1043
1073
  const violationMessage = thinkingViolationMessage(thinkingViolation);
1044
1074
  if (effectiveStrict) {
1045
1075
  logger.error(`THINKING: ${violationMessage}`);
@@ -1051,16 +1081,10 @@ async function handleMessages(req, res, raw, fixtures, journal, defaults, setCor
1051
1081
  response: {
1052
1082
  status: 400,
1053
1083
  fixture: null,
1054
- ...require_helpers.strictOverrideField(defaults.strict, req.headers)
1084
+ ...require_policy.strictOverrideField(defaults.strict, req.headers)
1055
1085
  }
1056
1086
  });
1057
- require_sse_writer.writeErrorResponse(res, 400, JSON.stringify({
1058
- type: "error",
1059
- error: {
1060
- type: "invalid_request_error",
1061
- message: violationMessage
1062
- }
1063
- }));
1087
+ require_sse_writer.writeErrorResponse(res, 400, require_errors.renderError("messages", "thinking", { message: violationMessage }).body);
1064
1088
  return;
1065
1089
  }
1066
1090
  logger.warn(`THINKING: ${violationMessage} (strict off — replaying anyway)`);
@@ -1078,10 +1102,10 @@ async function handleMessages(req, res, raw, fixtures, journal, defaults, setCor
1078
1102
  fixture: null
1079
1103
  }
1080
1104
  });
1081
- require_sse_writer.writeErrorResponse(res, 400, JSON.stringify({ error: {
1105
+ require_sse_writer.writeErrorResponse(res, 400, require_errors.renderError("messages", "validation", {
1082
1106
  message: toolsError,
1083
1107
  type: "invalid_request_error"
1084
- } }));
1108
+ }).body);
1085
1109
  return;
1086
1110
  }
1087
1111
  }
@@ -1104,7 +1128,7 @@ async function handleMessages(req, res, raw, fixtures, journal, defaults, setCor
1104
1128
  body: completionReq
1105
1129
  }, fixture ? "fixture" : "proxy", defaults.registry, defaults.logger)) return;
1106
1130
  if (!fixture) {
1107
- if (require_helpers.resolveStrictMode(defaults.strict, req.headers)) {
1131
+ if (require_policy.resolveRequestDecisions(defaults.strict, req.headers).fixtureMiss) {
1108
1132
  const strictStatus = 503;
1109
1133
  const strictMessage = require_helpers.strictNoMatchMessage(skippedBySequenceOrTurn);
1110
1134
  logger.error(require_helpers.strictNoMatchLogLine(req.method ?? "POST", req.url ?? "/v1/messages", skippedBySequenceOrTurn));
@@ -1116,13 +1140,13 @@ async function handleMessages(req, res, raw, fixtures, journal, defaults, setCor
1116
1140
  response: {
1117
1141
  status: strictStatus,
1118
1142
  fixture: null,
1119
- ...require_helpers.strictOverrideField(defaults.strict, req.headers)
1143
+ ...require_policy.strictOverrideField(defaults.strict, req.headers)
1120
1144
  }
1121
1145
  });
1122
- require_sse_writer.writeErrorResponse(res, strictStatus, JSON.stringify({ error: {
1146
+ require_sse_writer.writeErrorResponse(res, strictStatus, require_errors.renderError("messages", "strict-miss", {
1123
1147
  message: strictMessage,
1124
1148
  type: "invalid_request_error"
1125
- } }));
1149
+ }).body);
1126
1150
  return;
1127
1151
  }
1128
1152
  if (defaults.record) {
@@ -1151,13 +1175,13 @@ async function handleMessages(req, res, raw, fixtures, journal, defaults, setCor
1151
1175
  response: {
1152
1176
  status: 404,
1153
1177
  fixture: null,
1154
- ...require_helpers.strictOverrideField(defaults.strict, req.headers)
1178
+ ...require_policy.strictOverrideField(defaults.strict, req.headers)
1155
1179
  }
1156
1180
  });
1157
- require_sse_writer.writeErrorResponse(res, 404, JSON.stringify({ error: {
1181
+ require_sse_writer.writeErrorResponse(res, 404, require_errors.renderError("messages", "fixture-miss", {
1158
1182
  message: "No fixture matched",
1159
1183
  type: "invalid_request_error"
1160
- } }));
1184
+ }).body);
1161
1185
  return;
1162
1186
  }
1163
1187
  const response = await require_helpers.resolveResponse(fixture, completionReq);
@@ -1189,14 +1213,11 @@ async function handleMessages(req, res, raw, fixtures, journal, defaults, setCor
1189
1213
  testId
1190
1214
  });
1191
1215
  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
- }));
1216
+ require_sse_writer.writeErrorResponse(res, misbehavior.status, require_errors.renderError("messages", "misbehavior", {
1217
+ type: misbehavior.status === 400 ? "invalid_request_error" : "api_error",
1218
+ code: misbehavior.code,
1219
+ message: misbehavior.message
1220
+ }).body);
1200
1221
  return;
1201
1222
  }
1202
1223
  const latency = fixture.latency ?? defaults.latency;
@@ -1207,7 +1228,7 @@ async function handleMessages(req, res, raw, fixtures, journal, defaults, setCor
1207
1228
  stream: claudeReq.stream === true,
1208
1229
  chunkSize,
1209
1230
  logger,
1210
- strict: require_helpers.resolveStrictMode(defaults.strict, req.headers)
1231
+ strict: require_policy.resolveRequestDecisions(defaults.strict, req.headers).reasoningSuppression
1211
1232
  });
1212
1233
  const entry = journal.add({
1213
1234
  method: req.method ?? "POST",
@@ -1241,7 +1262,7 @@ async function handleMessages(req, res, raw, fixtures, journal, defaults, setCor
1241
1262
  })) {
1242
1263
  if (!res.writableEnded) res.destroy();
1243
1264
  entry.response.interrupted = true;
1244
- entry.response.interruptReason = interruption?.reason();
1265
+ entry.response.interruptReason = interruption?.reason() ?? "client aborted";
1245
1266
  }
1246
1267
  } finally {
1247
1268
  interruption?.cleanup();
@@ -1266,20 +1287,13 @@ async function handleMessages(req, res, raw, fixtures, journal, defaults, setCor
1266
1287
  defaults,
1267
1288
  testId
1268
1289
  });
1269
- const anthropicError = {
1270
- type: "error",
1271
- error: {
1272
- type: response.error.type ?? "api_error",
1273
- message: response.error.message
1274
- }
1275
- };
1276
- require_sse_writer.writeErrorResponse(res, status, JSON.stringify(anthropicError), { retryAfter: response.retryAfter });
1290
+ require_sse_writer.writeErrorResponse(res, status, require_errors.renderError("messages", "fixture", response.error).body, { retryAfter: response.retryAfter });
1277
1291
  return;
1278
1292
  }
1279
1293
  if (require_helpers.isCombinedFixtureResponse(response)) {
1280
1294
  if (response.webSearches?.length) logger.warn("webSearches in fixture response are not supported for Claude Messages API — ignoring");
1281
1295
  const overrides = require_helpers.extractOverrides(response);
1282
- const effectiveStrict = require_helpers.resolveStrictMode(defaults.strict, req.headers);
1296
+ const effectiveStrict = require_policy.resolveRequestDecisions(defaults.strict, req.headers).reasoningSuppression;
1283
1297
  const effReasoning = require_helpers.resolveReasoningForModel(response.reasoning, completionReq.model, effectiveStrict, defaults.logger);
1284
1298
  const { reasoningSignature: effReasoningSignature, redactedThinking: effRedactedThinking } = require_helpers.resolveReasoningArtifactsForModel(response.reasoningSignature, response.redactedThinking, completionReq.model, effectiveStrict, defaults.logger);
1285
1299
  const journalEntry = journal.add({
@@ -1316,7 +1330,7 @@ async function handleMessages(req, res, raw, fixtures, journal, defaults, setCor
1316
1330
  })) {
1317
1331
  if (!res.writableEnded) res.destroy();
1318
1332
  journalEntry.response.interrupted = true;
1319
- journalEntry.response.interruptReason = interruption?.reason();
1333
+ journalEntry.response.interruptReason = interruption?.reason() ?? "client aborted";
1320
1334
  }
1321
1335
  interruption?.cleanup();
1322
1336
  }
@@ -1325,7 +1339,7 @@ async function handleMessages(req, res, raw, fixtures, journal, defaults, setCor
1325
1339
  if (require_helpers.isTextResponse(response)) {
1326
1340
  if (response.webSearches?.length) logger.warn("webSearches in fixture response are not supported for Claude Messages API — ignoring");
1327
1341
  const overrides = require_helpers.extractOverrides(response);
1328
- const effectiveStrict = require_helpers.resolveStrictMode(defaults.strict, req.headers);
1342
+ const effectiveStrict = require_policy.resolveRequestDecisions(defaults.strict, req.headers).reasoningSuppression;
1329
1343
  const effReasoning = require_helpers.resolveReasoningForModel(response.reasoning, completionReq.model, effectiveStrict, defaults.logger);
1330
1344
  const { reasoningSignature: effReasoningSignature, redactedThinking: effRedactedThinking } = require_helpers.resolveReasoningArtifactsForModel(response.reasoningSignature, response.redactedThinking, completionReq.model, effectiveStrict, defaults.logger);
1331
1345
  const journalEntry = journal.add({
@@ -1361,7 +1375,7 @@ async function handleMessages(req, res, raw, fixtures, journal, defaults, setCor
1361
1375
  })) {
1362
1376
  if (!res.writableEnded) res.destroy();
1363
1377
  journalEntry.response.interrupted = true;
1364
- journalEntry.response.interruptReason = interruption?.reason();
1378
+ journalEntry.response.interruptReason = interruption?.reason() ?? "client aborted";
1365
1379
  }
1366
1380
  interruption?.cleanup();
1367
1381
  }
@@ -1370,7 +1384,7 @@ async function handleMessages(req, res, raw, fixtures, journal, defaults, setCor
1370
1384
  if (require_helpers.isToolCallResponse(response)) {
1371
1385
  if (response.webSearches?.length) logger.warn("webSearches in fixture response are not supported for Claude Messages API — ignoring");
1372
1386
  const overrides = require_helpers.extractOverrides(response);
1373
- const effectiveStrict = require_helpers.resolveStrictMode(defaults.strict, req.headers);
1387
+ const effectiveStrict = require_policy.resolveRequestDecisions(defaults.strict, req.headers).reasoningSuppression;
1374
1388
  const effReasoning = require_helpers.resolveReasoningForModel(response.reasoning, completionReq.model, effectiveStrict, defaults.logger);
1375
1389
  const { reasoningSignature: effReasoningSignature, redactedThinking: effRedactedThinking } = require_helpers.resolveReasoningArtifactsForModel(response.reasoningSignature, response.redactedThinking, completionReq.model, effectiveStrict, defaults.logger);
1376
1390
  const journalEntry = journal.add({
@@ -1407,7 +1421,7 @@ async function handleMessages(req, res, raw, fixtures, journal, defaults, setCor
1407
1421
  })) {
1408
1422
  if (!res.writableEnded) res.destroy();
1409
1423
  journalEntry.response.interrupted = true;
1410
- journalEntry.response.interruptReason = interruption?.reason();
1424
+ journalEntry.response.interruptReason = interruption?.reason() ?? "client aborted";
1411
1425
  }
1412
1426
  interruption?.cleanup();
1413
1427
  }
@@ -1428,13 +1442,14 @@ async function handleMessages(req, res, raw, fixtures, journal, defaults, setCor
1428
1442
  defaults,
1429
1443
  testId
1430
1444
  });
1431
- require_sse_writer.writeErrorResponse(res, 500, JSON.stringify({ error: {
1445
+ require_sse_writer.writeErrorResponse(res, 500, require_errors.renderError("messages", "unknown-response", {
1432
1446
  message: "Fixture response did not match any known type",
1433
1447
  type: "server_error"
1434
- } }));
1448
+ }).body);
1435
1449
  }
1436
1450
 
1437
1451
  //#endregion
1452
+ exports.claudeToCompletionRequest = claudeToCompletionRequest;
1438
1453
  exports.handleMessages = handleMessages;
1439
1454
  exports.prepareClaudeMisbehavior = prepareClaudeMisbehavior;
1440
1455
  //# sourceMappingURL=messages.cjs.map