@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
@@ -1,19 +1,20 @@
1
- import { InvalidToolArgumentsError, estimatePromptTokens, estimateTokens, extractOverrides, flattenHeaders, generateToolUseId, getContext, getTestId, isCombinedFixtureResponse, isErrorResponse, isJsonObject, isTextResponse, isToolCallResponse, requireEmittedFunctionToolCalls, resolveFixtureBlockOutcome, resolveReasoningForModel, resolveResponse, resolveStrictMode, servedToolArgs, strictNoMatchLogLine, strictNoMatchMessage, strictOverrideField, toolArgsForWire } from "./helpers.js";
1
+ import { renderError } from "./response/errors.js";
2
+ import { resolveRequestDecisions, strictOverrideField } from "./response/policy.js";
3
+ import { InvalidToolArgumentsError, estimatePromptTokens, estimateTokens, extractOverrides, flattenHeaders, generateToolUseId, getContext, getTestId, isCombinedFixtureResponse, isErrorResponse, isJsonObject, isTextResponse, isToolCallResponse, requireEmittedFunctionToolCalls, resolveFixtureBlockOutcome, resolveReasoningForModel, resolveResponse, servedToolArgs, strictNoMatchLogLine, strictNoMatchMessage, toolArgsForWire } from "./helpers.js";
2
4
  import { writeErrorResponse } from "./sse-writer.js";
3
5
  import { applyChaosAsync } from "./chaos.js";
4
6
  import { planMisbehavior, recordMisbehaviorOutcome } from "./misbehavior.js";
5
7
  import { matchFixtureDiagnostic, recordMatchOptions } from "./router.js";
6
8
  import { proxyAndRecord } from "./recorder.js";
7
9
  import { createInterruptionSignal } from "./interruption.js";
10
+ import { mapAnthropicFinish } from "./response/finish.js";
8
11
  import { writeEventStream } from "./aws-event-stream.js";
12
+ import { render } from "./response/usage/codecs/converse.js";
9
13
 
10
14
  //#region src/bedrock-converse.ts
11
15
  function converseStopReason(overrideFinishReason, defaultReason) {
12
16
  if (!overrideFinishReason) return defaultReason;
13
- if (overrideFinishReason === "stop") return "end_turn";
14
- if (overrideFinishReason === "tool_calls") return "tool_use";
15
- if (overrideFinishReason === "length") return "max_tokens";
16
- return overrideFinishReason;
17
+ return mapAnthropicFinish(overrideFinishReason);
17
18
  }
18
19
  /**
19
20
  * Build Converse-format usage from fixture overrides.
@@ -24,18 +25,7 @@ function converseStopReason(overrideFinishReason, defaultReason) {
24
25
  * usage should supply explicit `usage` overrides in their fixture.
25
26
  */
26
27
  function converseUsage(overrides) {
27
- if (!overrides?.usage) return {
28
- inputTokens: 0,
29
- outputTokens: 0,
30
- totalTokens: 0
31
- };
32
- const inputTokens = overrides.usage.input_tokens ?? overrides.usage.prompt_tokens ?? 0;
33
- const outputTokens = overrides.usage.output_tokens ?? overrides.usage.completion_tokens ?? 0;
34
- return {
35
- inputTokens,
36
- outputTokens,
37
- totalTokens: inputTokens + outputTokens
38
- };
28
+ return render(overrides);
39
29
  }
40
30
  function parseConverseToolArgumentsForStream(toolCall, logger) {
41
31
  return servedToolArgs(toolCall, "string", logger).text;
@@ -519,7 +509,7 @@ function prepareConverseMisbehavior(plan, request, stream, defaults, headers) {
519
509
  } : block;
520
510
  });
521
511
  }
522
- const reasoning = plan.reasoning ?? resolveReasoningForModel("reasoning" in response ? response.reasoning : void 0, request.model, resolveStrictMode(defaults.strict, headers), defaults.logger) ?? "";
512
+ const reasoning = plan.reasoning ?? resolveReasoningForModel("reasoning" in response ? response.reasoning : void 0, request.model, resolveRequestDecisions(defaults.strict, headers).reasoningSuppression, defaults.logger) ?? "";
523
513
  const servedToolCalls = blocks.flatMap((block) => block.type === "toolCall" ? [{
524
514
  name: block.name,
525
515
  arguments: block.arguments,
@@ -538,11 +528,10 @@ function prepareConverseMisbehavior(plan, request, stream, defaults, headers) {
538
528
  blocks,
539
529
  reasoning,
540
530
  stopReason,
541
- usage: {
542
- inputTokens,
543
- outputTokens,
544
- totalTokens: inputTokens + outputTokens
545
- }
531
+ usage: render(void 0, {
532
+ input: inputTokens,
533
+ output: outputTokens
534
+ })
546
535
  };
547
536
  }
548
537
  function buildConverseMisbehaviorResponse(prepared) {
@@ -651,10 +640,10 @@ async function handleConverse(req, res, raw, modelId, fixtures, journal, default
651
640
  fixture: null
652
641
  }
653
642
  });
654
- writeErrorResponse(res, 400, JSON.stringify({ error: {
643
+ writeErrorResponse(res, 400, renderError("bedrock", "validation", {
655
644
  message: `Malformed JSON: ${detail}`,
656
645
  type: "invalid_request_error"
657
- } }));
646
+ }).body);
658
647
  return;
659
648
  }
660
649
  if (!isJsonObject(converseReq)) {
@@ -668,10 +657,10 @@ async function handleConverse(req, res, raw, modelId, fixtures, journal, default
668
657
  fixture: null
669
658
  }
670
659
  });
671
- writeErrorResponse(res, 400, JSON.stringify({ error: {
660
+ writeErrorResponse(res, 400, renderError("bedrock", "validation", {
672
661
  message: "Request body must be a JSON object",
673
662
  type: "invalid_request_error"
674
- } }));
663
+ }).body);
675
664
  return;
676
665
  }
677
666
  const messageError = !Array.isArray(converseReq.messages) ? "Invalid request: messages array is required" : validateConverseMessages(converseReq) ?? validateConverseSystem(converseReq) ?? validateConverseTools(converseReq);
@@ -686,10 +675,10 @@ async function handleConverse(req, res, raw, modelId, fixtures, journal, default
686
675
  fixture: null
687
676
  }
688
677
  });
689
- writeErrorResponse(res, 400, JSON.stringify({ error: {
678
+ writeErrorResponse(res, 400, renderError("bedrock", "validation", {
690
679
  message: messageError,
691
680
  type: "invalid_request_error"
692
- } }));
681
+ }).body);
693
682
  return;
694
683
  }
695
684
  const completionReq = converseToCompletionRequest(converseReq, modelId, logger);
@@ -707,7 +696,7 @@ async function handleConverse(req, res, raw, modelId, fixtures, journal, default
707
696
  body: completionReq
708
697
  }, fixture ? "fixture" : "proxy", defaults.registry, defaults.logger)) return;
709
698
  if (!fixture) {
710
- if (resolveStrictMode(defaults.strict, req.headers)) {
699
+ if (resolveRequestDecisions(defaults.strict, req.headers).fixtureMiss) {
711
700
  const strictStatus = 503;
712
701
  const strictMessage = strictNoMatchMessage(skippedBySequenceOrTurn);
713
702
  logger.error(strictNoMatchLogLine(req.method ?? "POST", urlPath, skippedBySequenceOrTurn));
@@ -722,10 +711,10 @@ async function handleConverse(req, res, raw, modelId, fixtures, journal, default
722
711
  ...strictOverrideField(defaults.strict, req.headers)
723
712
  }
724
713
  });
725
- writeErrorResponse(res, strictStatus, JSON.stringify({ error: {
714
+ writeErrorResponse(res, strictStatus, renderError("bedrock", "strict-miss", {
726
715
  message: strictMessage,
727
716
  type: "invalid_request_error"
728
- } }));
717
+ }).body);
729
718
  return;
730
719
  }
731
720
  if (defaults.record) {
@@ -757,10 +746,10 @@ async function handleConverse(req, res, raw, modelId, fixtures, journal, default
757
746
  ...strictOverrideField(defaults.strict, req.headers)
758
747
  }
759
748
  });
760
- writeErrorResponse(res, 404, JSON.stringify({ error: {
749
+ writeErrorResponse(res, 404, renderError("bedrock", "fixture-miss", {
761
750
  message: "No fixture matched",
762
751
  type: "invalid_request_error"
763
- } }));
752
+ }).body);
764
753
  return;
765
754
  }
766
755
  const response = await resolveResponse(fixture, completionReq);
@@ -800,11 +789,11 @@ async function handleConverse(req, res, raw, modelId, fixtures, journal, default
800
789
  });
801
790
  const type = misbehavior.status === 400 ? "ValidationException" : "InternalServerException";
802
791
  res.setHeader("x-amzn-errortype", type);
803
- writeErrorResponse(res, misbehavior.status, JSON.stringify({
804
- __type: type,
792
+ writeErrorResponse(res, misbehavior.status, renderError("bedrock-converse", "misbehavior", {
793
+ type,
805
794
  message: misbehavior.message,
806
795
  code: misbehavior.code
807
- }));
796
+ }).body);
808
797
  return;
809
798
  }
810
799
  if (misbehavior.kind === "applied") {
@@ -837,20 +826,16 @@ async function handleConverse(req, res, raw, modelId, fixtures, journal, default
837
826
  fixture
838
827
  }
839
828
  });
840
- const errBody = {
841
- type: "error",
842
- error: {
843
- type: response.error.type ?? "invalid_request_error",
844
- message: response.error.message
845
- }
846
- };
847
- writeErrorResponse(res, status, JSON.stringify(errBody), { retryAfter: response.retryAfter });
829
+ writeErrorResponse(res, status, renderError("bedrock", "fixture", {
830
+ message: response.error.message,
831
+ type: response.error.type ?? "invalid_request_error"
832
+ }).body, { retryAfter: response.retryAfter });
848
833
  return;
849
834
  }
850
835
  if (isCombinedFixtureResponse(response)) {
851
836
  if (response.webSearches?.length) logger.warn("webSearches in fixture response are not supported for Bedrock Converse API — ignoring");
852
837
  const overrides = extractOverrides(response);
853
- const effReasoning = resolveReasoningForModel(response.reasoning, completionReq.model, resolveStrictMode(defaults.strict, req.headers), logger);
838
+ const effReasoning = resolveReasoningForModel(response.reasoning, completionReq.model, resolveRequestDecisions(defaults.strict, req.headers).reasoningSuppression, logger);
854
839
  addResponseEntry({
855
840
  method: req.method ?? "POST",
856
841
  path: urlPath,
@@ -870,7 +855,7 @@ async function handleConverse(req, res, raw, modelId, fixtures, journal, default
870
855
  if (isTextResponse(response)) {
871
856
  if (response.webSearches?.length) logger.warn("webSearches in fixture response are not supported for Bedrock Converse API — ignoring");
872
857
  const overrides = extractOverrides(response);
873
- const effReasoning = resolveReasoningForModel(response.reasoning, completionReq.model, resolveStrictMode(defaults.strict, req.headers), logger);
858
+ const effReasoning = resolveReasoningForModel(response.reasoning, completionReq.model, resolveRequestDecisions(defaults.strict, req.headers).reasoningSuppression, logger);
874
859
  addResponseEntry({
875
860
  method: req.method ?? "POST",
876
861
  path: urlPath,
@@ -889,7 +874,7 @@ async function handleConverse(req, res, raw, modelId, fixtures, journal, default
889
874
  if (isToolCallResponse(response)) {
890
875
  if (response.webSearches?.length) logger.warn("webSearches in fixture response are not supported for Bedrock Converse API — ignoring");
891
876
  const overrides = extractOverrides(response);
892
- const effReasoning = resolveReasoningForModel(response.reasoning, completionReq.model, resolveStrictMode(defaults.strict, req.headers), logger);
877
+ const effReasoning = resolveReasoningForModel(response.reasoning, completionReq.model, resolveRequestDecisions(defaults.strict, req.headers).reasoningSuppression, logger);
893
878
  addResponseEntry({
894
879
  method: req.method ?? "POST",
895
880
  path: urlPath,
@@ -915,10 +900,10 @@ async function handleConverse(req, res, raw, modelId, fixtures, journal, default
915
900
  fixture
916
901
  }
917
902
  });
918
- writeErrorResponse(res, 500, JSON.stringify({ error: {
903
+ writeErrorResponse(res, 500, renderError("bedrock", "unknown-response", {
919
904
  message: "Fixture response did not match any known type",
920
905
  type: "server_error"
921
- } }));
906
+ }).body);
922
907
  }
923
908
  async function handleConverseStream(req, res, raw, modelId, fixtures, journal, defaults, setCorsHeaders) {
924
909
  const { logger } = defaults;
@@ -939,10 +924,10 @@ async function handleConverseStream(req, res, raw, modelId, fixtures, journal, d
939
924
  fixture: null
940
925
  }
941
926
  });
942
- writeErrorResponse(res, 400, JSON.stringify({ error: {
927
+ writeErrorResponse(res, 400, renderError("bedrock", "validation", {
943
928
  message: `Malformed JSON: ${detail}`,
944
929
  type: "invalid_request_error"
945
- } }));
930
+ }).body);
946
931
  return;
947
932
  }
948
933
  if (!isJsonObject(converseReq)) {
@@ -956,10 +941,10 @@ async function handleConverseStream(req, res, raw, modelId, fixtures, journal, d
956
941
  fixture: null
957
942
  }
958
943
  });
959
- writeErrorResponse(res, 400, JSON.stringify({ error: {
944
+ writeErrorResponse(res, 400, renderError("bedrock", "validation", {
960
945
  message: "Request body must be a JSON object",
961
946
  type: "invalid_request_error"
962
- } }));
947
+ }).body);
963
948
  return;
964
949
  }
965
950
  const messageError = !Array.isArray(converseReq.messages) ? "Invalid request: messages array is required" : validateConverseMessages(converseReq) ?? validateConverseSystem(converseReq) ?? validateConverseTools(converseReq);
@@ -974,10 +959,10 @@ async function handleConverseStream(req, res, raw, modelId, fixtures, journal, d
974
959
  fixture: null
975
960
  }
976
961
  });
977
- writeErrorResponse(res, 400, JSON.stringify({ error: {
962
+ writeErrorResponse(res, 400, renderError("bedrock", "validation", {
978
963
  message: messageError,
979
964
  type: "invalid_request_error"
980
- } }));
965
+ }).body);
981
966
  return;
982
967
  }
983
968
  const completionReq = converseToCompletionRequest(converseReq, modelId, logger);
@@ -996,7 +981,7 @@ async function handleConverseStream(req, res, raw, modelId, fixtures, journal, d
996
981
  body: completionReq
997
982
  }, fixture ? "fixture" : "proxy", defaults.registry, defaults.logger)) return;
998
983
  if (!fixture) {
999
- if (resolveStrictMode(defaults.strict, req.headers)) {
984
+ if (resolveRequestDecisions(defaults.strict, req.headers).fixtureMiss) {
1000
985
  const strictStatus = 503;
1001
986
  const strictMessage = strictNoMatchMessage(skippedBySequenceOrTurn);
1002
987
  logger.error(strictNoMatchLogLine(req.method ?? "POST", urlPath, skippedBySequenceOrTurn));
@@ -1011,10 +996,10 @@ async function handleConverseStream(req, res, raw, modelId, fixtures, journal, d
1011
996
  ...strictOverrideField(defaults.strict, req.headers)
1012
997
  }
1013
998
  });
1014
- writeErrorResponse(res, strictStatus, JSON.stringify({ error: {
999
+ writeErrorResponse(res, strictStatus, renderError("bedrock", "strict-miss", {
1015
1000
  message: strictMessage,
1016
1001
  type: "invalid_request_error"
1017
- } }));
1002
+ }).body);
1018
1003
  return;
1019
1004
  }
1020
1005
  if (defaults.record) {
@@ -1046,10 +1031,10 @@ async function handleConverseStream(req, res, raw, modelId, fixtures, journal, d
1046
1031
  ...strictOverrideField(defaults.strict, req.headers)
1047
1032
  }
1048
1033
  });
1049
- writeErrorResponse(res, 404, JSON.stringify({ error: {
1034
+ writeErrorResponse(res, 404, renderError("bedrock", "fixture-miss", {
1050
1035
  message: "No fixture matched",
1051
1036
  type: "invalid_request_error"
1052
- } }));
1037
+ }).body);
1053
1038
  return;
1054
1039
  }
1055
1040
  const response = await resolveResponse(fixture, completionReq);
@@ -1089,11 +1074,11 @@ async function handleConverseStream(req, res, raw, modelId, fixtures, journal, d
1089
1074
  });
1090
1075
  const type = misbehavior.status === 400 ? "ValidationException" : "InternalServerException";
1091
1076
  res.setHeader("x-amzn-errortype", type);
1092
- writeErrorResponse(res, misbehavior.status, JSON.stringify({
1093
- __type: type,
1077
+ writeErrorResponse(res, misbehavior.status, renderError("bedrock-converse", "misbehavior", {
1078
+ type,
1094
1079
  message: misbehavior.message,
1095
1080
  code: misbehavior.code
1096
- }));
1081
+ }).body);
1097
1082
  return;
1098
1083
  }
1099
1084
  const latency = fixture.latency ?? defaults.latency;
@@ -1140,20 +1125,16 @@ async function handleConverseStream(req, res, raw, modelId, fixtures, journal, d
1140
1125
  fixture
1141
1126
  }
1142
1127
  });
1143
- const errBody = {
1144
- type: "error",
1145
- error: {
1146
- type: response.error.type ?? "invalid_request_error",
1147
- message: response.error.message
1148
- }
1149
- };
1150
- writeErrorResponse(res, status, JSON.stringify(errBody), { retryAfter: response.retryAfter });
1128
+ writeErrorResponse(res, status, renderError("bedrock", "fixture", {
1129
+ message: response.error.message,
1130
+ type: response.error.type ?? "invalid_request_error"
1131
+ }).body, { retryAfter: response.retryAfter });
1151
1132
  return;
1152
1133
  }
1153
1134
  if (isCombinedFixtureResponse(response)) {
1154
1135
  if (response.webSearches?.length) logger.warn("webSearches in fixture response are not supported for Bedrock Converse API — ignoring");
1155
1136
  const overrides = extractOverrides(response);
1156
- const effReasoning = resolveReasoningForModel(response.reasoning, completionReq.model, resolveStrictMode(defaults.strict, req.headers), logger);
1137
+ const effReasoning = resolveReasoningForModel(response.reasoning, completionReq.model, resolveRequestDecisions(defaults.strict, req.headers).reasoningSuppression, logger);
1157
1138
  const journalEntry = addResponseEntry({
1158
1139
  method: req.method ?? "POST",
1159
1140
  path: urlPath,
@@ -1185,7 +1166,7 @@ async function handleConverseStream(req, res, raw, modelId, fixtures, journal, d
1185
1166
  if (isTextResponse(response)) {
1186
1167
  if (response.webSearches?.length) logger.warn("webSearches in fixture response are not supported for Bedrock Converse API — ignoring");
1187
1168
  const overrides = extractOverrides(response);
1188
- const effReasoning = resolveReasoningForModel(response.reasoning, completionReq.model, resolveStrictMode(defaults.strict, req.headers), logger);
1169
+ const effReasoning = resolveReasoningForModel(response.reasoning, completionReq.model, resolveRequestDecisions(defaults.strict, req.headers).reasoningSuppression, logger);
1189
1170
  const journalEntry = addResponseEntry({
1190
1171
  method: req.method ?? "POST",
1191
1172
  path: urlPath,
@@ -1216,7 +1197,7 @@ async function handleConverseStream(req, res, raw, modelId, fixtures, journal, d
1216
1197
  if (isToolCallResponse(response)) {
1217
1198
  if (response.webSearches?.length) logger.warn("webSearches in fixture response are not supported for Bedrock Converse API — ignoring");
1218
1199
  const overrides = extractOverrides(response);
1219
- const effReasoning = resolveReasoningForModel(response.reasoning, completionReq.model, resolveStrictMode(defaults.strict, req.headers), logger);
1200
+ const effReasoning = resolveReasoningForModel(response.reasoning, completionReq.model, resolveRequestDecisions(defaults.strict, req.headers).reasoningSuppression, logger);
1220
1201
  const journalEntry = addResponseEntry({
1221
1202
  method: req.method ?? "POST",
1222
1203
  path: urlPath,
@@ -1254,10 +1235,10 @@ async function handleConverseStream(req, res, raw, modelId, fixtures, journal, d
1254
1235
  fixture
1255
1236
  }
1256
1237
  });
1257
- writeErrorResponse(res, 500, JSON.stringify({ error: {
1238
+ writeErrorResponse(res, 500, renderError("bedrock", "unknown-response", {
1258
1239
  message: "Fixture response did not match any known type",
1259
1240
  type: "server_error"
1260
- } }));
1241
+ }).body);
1261
1242
  }
1262
1243
 
1263
1244
  //#endregion