@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/cohere.js CHANGED
@@ -1,47 +1,22 @@
1
- import { extractOverrides, flattenHeaders, generateDeterministicEmbedding, generateMessageId, generateToolCallId, getContext, getTestId, isCombinedFixtureResponse, isEmbeddingResponse, isErrorResponse, isJsonObject, isTextResponse, isToolCallResponse, prepareOpenAIChatMisbehavior, requireEmittedFunctionToolCalls, resolveFixtureBlockOutcome, resolveOpenAIChatMisbehaviorUsage, resolveReasoningForModel, resolveResponse, resolveStrictMode, serializeErrorResponse, servedToolArgs, strictNoMatchLogLine, strictNoMatchMessage, strictOverrideField, validateChatMessages, validateToolsField } from "./helpers.js";
1
+ import { renderError } from "./response/errors.js";
2
+ import { resolveRequestDecisions, strictOverrideField } from "./response/policy.js";
3
+ import { extractOverrides, flattenHeaders, generateDeterministicEmbedding, generateMessageId, generateToolCallId, getContext, getTestId, isCombinedFixtureResponse, isEmbeddingResponse, isErrorResponse, isJsonObject, isTextResponse, isToolCallResponse, prepareOpenAIChatMisbehavior, requireEmittedFunctionToolCalls, resolveFixtureBlockOutcome, resolveOpenAIChatMisbehaviorUsage, resolveReasoningForModel, resolveResponse, servedToolArgs, strictNoMatchLogLine, strictNoMatchMessage, validateChatMessages, validateToolsField } from "./helpers.js";
2
4
  import { calculateDelay, delay, writeErrorResponse } from "./sse-writer.js";
3
5
  import { applyChaosAsync } from "./chaos.js";
4
6
  import { normalizeDirectToolSchema, 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 { mapCohereFinish } from "./response/finish.js";
11
+ import { render } from "./response/usage/codecs/cohere.js";
8
12
 
9
13
  //#region src/cohere.ts
10
- const ZERO_USAGE = {
11
- billed_units: {
12
- input_tokens: 0,
13
- output_tokens: 0,
14
- search_units: 0,
15
- classifications: 0
16
- },
17
- tokens: {
18
- input_tokens: 0,
19
- output_tokens: 0
20
- }
21
- };
22
14
  function cohereFinishReason(overrideFinishReason, defaultReason) {
23
15
  if (!overrideFinishReason) return defaultReason;
24
- if (overrideFinishReason === "stop") return "COMPLETE";
25
- if (overrideFinishReason === "tool_calls") return "TOOL_CALL";
26
- if (overrideFinishReason === "length") return "MAX_TOKENS";
27
- return overrideFinishReason;
16
+ return mapCohereFinish(overrideFinishReason);
28
17
  }
29
18
  function cohereUsage(overrides) {
30
- if (!overrides?.usage) return ZERO_USAGE;
31
- const inputTokens = overrides.usage.input_tokens ?? overrides.usage.prompt_tokens ?? 0;
32
- const outputTokens = overrides.usage.output_tokens ?? overrides.usage.completion_tokens ?? 0;
33
- return {
34
- billed_units: {
35
- input_tokens: inputTokens,
36
- output_tokens: outputTokens,
37
- search_units: 0,
38
- classifications: 0
39
- },
40
- tokens: {
41
- input_tokens: inputTokens,
42
- output_tokens: outputTokens
43
- }
44
- };
19
+ return render(overrides);
45
20
  }
46
21
  /** Extract plain text from structured content (array of { type, text } parts) or passthrough string. */
47
22
  function extractTextContent(content) {
@@ -576,10 +551,10 @@ async function handleCohere(req, res, raw, fixtures, journal, defaults, setCorsH
576
551
  fixture: null
577
552
  }
578
553
  });
579
- writeErrorResponse(res, 400, JSON.stringify({ error: {
554
+ writeErrorResponse(res, 400, renderError("cohere", "validation", {
580
555
  message: `Malformed JSON body: ${detail}`,
581
556
  type: "invalid_request_error"
582
- } }));
557
+ }).body);
583
558
  return;
584
559
  }
585
560
  if (!isJsonObject(cohereReq)) {
@@ -593,10 +568,10 @@ async function handleCohere(req, res, raw, fixtures, journal, defaults, setCorsH
593
568
  fixture: null
594
569
  }
595
570
  });
596
- writeErrorResponse(res, 400, JSON.stringify({ error: {
571
+ writeErrorResponse(res, 400, renderError("cohere", "validation", {
597
572
  message: "Request body must be a JSON object",
598
573
  type: "invalid_request_error"
599
- } }));
574
+ }).body);
600
575
  return;
601
576
  }
602
577
  if (!cohereReq.model) {
@@ -610,10 +585,10 @@ async function handleCohere(req, res, raw, fixtures, journal, defaults, setCorsH
610
585
  fixture: null
611
586
  }
612
587
  });
613
- writeErrorResponse(res, 400, JSON.stringify({ error: {
588
+ writeErrorResponse(res, 400, renderError("cohere", "validation", {
614
589
  message: "model is required",
615
590
  type: "invalid_request_error"
616
- } }));
591
+ }).body);
617
592
  return;
618
593
  }
619
594
  let shapeError = validateChatMessages(cohereReq.messages) ?? validateToolsField(cohereReq.tools);
@@ -632,10 +607,10 @@ async function handleCohere(req, res, raw, fixtures, journal, defaults, setCorsH
632
607
  fixture: null
633
608
  }
634
609
  });
635
- writeErrorResponse(res, 400, JSON.stringify({ error: {
610
+ writeErrorResponse(res, 400, renderError("cohere", "validation", {
636
611
  message: `Invalid request: ${shapeError}`,
637
612
  type: "invalid_request_error"
638
- } }));
613
+ }).body);
639
614
  return;
640
615
  }
641
616
  const completionReq = cohereToCompletionRequest(cohereReq);
@@ -654,7 +629,7 @@ async function handleCohere(req, res, raw, fixtures, journal, defaults, setCorsH
654
629
  body: completionReq
655
630
  }, fixture ? "fixture" : "proxy", defaults.registry, defaults.logger)) return;
656
631
  if (!fixture) {
657
- if (resolveStrictMode(defaults.strict, req.headers)) {
632
+ if (resolveRequestDecisions(defaults.strict, req.headers).fixtureMiss) {
658
633
  const strictStatus = 503;
659
634
  const strictMessage = strictNoMatchMessage(skippedBySequenceOrTurn);
660
635
  logger.error(strictNoMatchLogLine(req.method ?? "POST", req.url ?? "/v2/chat", skippedBySequenceOrTurn));
@@ -669,10 +644,10 @@ async function handleCohere(req, res, raw, fixtures, journal, defaults, setCorsH
669
644
  ...strictOverrideField(defaults.strict, req.headers)
670
645
  }
671
646
  });
672
- writeErrorResponse(res, strictStatus, JSON.stringify({ error: {
647
+ writeErrorResponse(res, strictStatus, renderError("cohere", "strict-miss", {
673
648
  message: strictMessage,
674
649
  type: "invalid_request_error"
675
- } }));
650
+ }).body);
676
651
  return;
677
652
  }
678
653
  if (defaults.record) {
@@ -704,10 +679,10 @@ async function handleCohere(req, res, raw, fixtures, journal, defaults, setCorsH
704
679
  ...strictOverrideField(defaults.strict, req.headers)
705
680
  }
706
681
  });
707
- writeErrorResponse(res, 404, JSON.stringify({ error: {
682
+ writeErrorResponse(res, 404, renderError("cohere", "fixture-miss", {
708
683
  message: "No fixture matched",
709
684
  type: "invalid_request_error"
710
- } }));
685
+ }).body);
711
686
  return;
712
687
  }
713
688
  const resolvedResponse = await resolveResponse(fixture, completionReq);
@@ -739,15 +714,15 @@ async function handleCohere(req, res, raw, fixtures, journal, defaults, setCorsH
739
714
  testId
740
715
  });
741
716
  if (!misbehavior.summary?.evaluations.length) logger.error(misbehavior.message);
742
- writeErrorResponse(res, misbehavior.status, JSON.stringify({
717
+ writeErrorResponse(res, misbehavior.status, renderError("cohere", "misbehavior", {
743
718
  message: misbehavior.message,
744
719
  code: misbehavior.code
745
- }));
720
+ }).body);
746
721
  return;
747
722
  }
748
723
  const prepared = misbehavior.kind === "applied" ? prepareOpenAIChatMisbehavior(misbehavior) : void 0;
749
724
  const observedK5Stream = cohereReq.stream === true && prepared?.summary.fault === "stop-length-mid-tool";
750
- const appliedReasoning = prepared && "reasoning" in prepared.response ? resolveReasoningForModel(prepared.response.reasoning, cohereReq.model, resolveStrictMode(defaults.strict, req.headers), logger) : void 0;
725
+ const appliedReasoning = prepared && "reasoning" in prepared.response ? resolveReasoningForModel(prepared.response.reasoning, cohereReq.model, resolveRequestDecisions(defaults.strict, req.headers).reasoningSuppression, logger) : void 0;
751
726
  const usage = prepared ? resolveOpenAIChatMisbehaviorUsage(prepared, completionReq, appliedReasoning !== void 0) : void 0;
752
727
  const response = prepared && usage ? {
753
728
  ...prepared.response,
@@ -775,13 +750,13 @@ async function handleCohere(req, res, raw, fixtures, journal, defaults, setCorsH
775
750
  defaults,
776
751
  testId
777
752
  });
778
- writeErrorResponse(res, status, serializeErrorResponse(response), { retryAfter: response.retryAfter });
753
+ writeErrorResponse(res, status, renderError("openai", "fixture", response.error).body, { retryAfter: response.retryAfter });
779
754
  return;
780
755
  }
781
756
  if (isCombinedFixtureResponse(response)) {
782
757
  if (response.webSearches?.length) logger.warn("webSearches in fixture response are not supported for Cohere v2 Chat API — ignoring");
783
758
  const overrides = extractOverrides(response);
784
- const effectiveStrict = resolveStrictMode(defaults.strict, req.headers);
759
+ const effectiveStrict = resolveRequestDecisions(defaults.strict, req.headers).reasoningSuppression;
785
760
  const effReasoning = prepared ? appliedReasoning : resolveReasoningForModel(response.reasoning, cohereReq.model, effectiveStrict, logger);
786
761
  const journalEntry = journal.add({
787
762
  method: req.method ?? "POST",
@@ -827,7 +802,7 @@ async function handleCohere(req, res, raw, fixtures, journal, defaults, setCorsH
827
802
  if (isTextResponse(response)) {
828
803
  if (response.webSearches?.length) logger.warn("webSearches in fixture response are not supported for Cohere v2 Chat API — ignoring");
829
804
  const overrides = extractOverrides(response);
830
- const effectiveStrict = resolveStrictMode(defaults.strict, req.headers);
805
+ const effectiveStrict = resolveRequestDecisions(defaults.strict, req.headers).reasoningSuppression;
831
806
  const effReasoning = prepared ? appliedReasoning : resolveReasoningForModel(response.reasoning, cohereReq.model, effectiveStrict, logger);
832
807
  const journalEntry = journal.add({
833
808
  method: req.method ?? "POST",
@@ -881,7 +856,7 @@ async function handleCohere(req, res, raw, fixtures, journal, defaults, setCorsH
881
856
  if (isToolCallResponse(response)) {
882
857
  if (response.webSearches?.length) logger.warn("webSearches in fixture response are not supported for Cohere v2 Chat API — ignoring");
883
858
  const overrides = extractOverrides(response);
884
- const effectiveStrict = resolveStrictMode(defaults.strict, req.headers);
859
+ const effectiveStrict = resolveRequestDecisions(defaults.strict, req.headers).reasoningSuppression;
885
860
  const effReasoning = prepared ? appliedReasoning : resolveReasoningForModel(response.reasoning, cohereReq.model, effectiveStrict, logger);
886
861
  const journalEntry = journal.add({
887
862
  method: req.method ?? "POST",
@@ -939,10 +914,10 @@ async function handleCohere(req, res, raw, fixtures, journal, defaults, setCorsH
939
914
  defaults,
940
915
  testId
941
916
  });
942
- writeErrorResponse(res, 500, JSON.stringify({ error: {
917
+ writeErrorResponse(res, 500, renderError("cohere", "unknown-response", {
943
918
  message: "Fixture response did not match any known type",
944
919
  type: "server_error"
945
- } }));
920
+ }).body);
946
921
  }
947
922
  async function handleCohereEmbed(req, res, raw, fixtures, journal, defaults, setCorsHeaders) {
948
923
  const { logger } = defaults;
@@ -962,10 +937,10 @@ async function handleCohereEmbed(req, res, raw, fixtures, journal, defaults, set
962
937
  fixture: null
963
938
  }
964
939
  });
965
- writeErrorResponse(res, 400, JSON.stringify({ error: {
940
+ writeErrorResponse(res, 400, renderError("cohere", "validation", {
966
941
  message: `Malformed JSON body: ${detail}`,
967
942
  type: "invalid_request_error"
968
- } }));
943
+ }).body);
969
944
  return;
970
945
  }
971
946
  if (!isJsonObject(embedReq)) {
@@ -979,10 +954,10 @@ async function handleCohereEmbed(req, res, raw, fixtures, journal, defaults, set
979
954
  fixture: null
980
955
  }
981
956
  });
982
- writeErrorResponse(res, 400, JSON.stringify({ error: {
957
+ writeErrorResponse(res, 400, renderError("cohere", "validation", {
983
958
  message: "Request body must be a JSON object",
984
959
  type: "invalid_request_error"
985
- } }));
960
+ }).body);
986
961
  return;
987
962
  }
988
963
  if (!embedReq.model) {
@@ -996,10 +971,10 @@ async function handleCohereEmbed(req, res, raw, fixtures, journal, defaults, set
996
971
  fixture: null
997
972
  }
998
973
  });
999
- writeErrorResponse(res, 400, JSON.stringify({ error: {
974
+ writeErrorResponse(res, 400, renderError("cohere", "validation", {
1000
975
  message: "model is required",
1001
976
  type: "invalid_request_error"
1002
- } }));
977
+ }).body);
1003
978
  return;
1004
979
  }
1005
980
  if (!embedReq.texts || !Array.isArray(embedReq.texts)) {
@@ -1013,10 +988,10 @@ async function handleCohereEmbed(req, res, raw, fixtures, journal, defaults, set
1013
988
  fixture: null
1014
989
  }
1015
990
  });
1016
- writeErrorResponse(res, 400, JSON.stringify({ error: {
991
+ writeErrorResponse(res, 400, renderError("cohere", "validation", {
1017
992
  message: "Invalid request: texts array is required",
1018
993
  type: "invalid_request_error"
1019
- } }));
994
+ }).body);
1020
995
  return;
1021
996
  }
1022
997
  if (!embedReq.texts.every((text) => typeof text === "string")) {
@@ -1030,10 +1005,10 @@ async function handleCohereEmbed(req, res, raw, fixtures, journal, defaults, set
1030
1005
  fixture: null
1031
1006
  }
1032
1007
  });
1033
- writeErrorResponse(res, 400, JSON.stringify({ error: {
1008
+ writeErrorResponse(res, 400, renderError("cohere", "validation", {
1034
1009
  message: "Invalid request: texts must be an array of strings",
1035
1010
  type: "invalid_request_error"
1036
- } }));
1011
+ }).body);
1037
1012
  return;
1038
1013
  }
1039
1014
  const combinedInput = embedReq.texts.join(" ");
@@ -1071,10 +1046,10 @@ async function handleCohereEmbed(req, res, raw, fixtures, journal, defaults, set
1071
1046
  fixture: fixture ?? null
1072
1047
  }
1073
1048
  });
1074
- writeErrorResponse(res, 400, JSON.stringify({ error: {
1049
+ writeErrorResponse(res, 400, renderError("cohere", "validation", {
1075
1050
  message: isArray ? "Invalid request: embedding_types must be an array of strings" : "Invalid request: embedding_types must be an array",
1076
1051
  type: "invalid_request_error"
1077
- } }));
1052
+ }).body);
1078
1053
  return true;
1079
1054
  }
1080
1055
  if (fixture) {
@@ -1091,7 +1066,7 @@ async function handleCohereEmbed(req, res, raw, fixtures, journal, defaults, set
1091
1066
  fixture
1092
1067
  }
1093
1068
  });
1094
- writeErrorResponse(res, status, serializeErrorResponse(response), { retryAfter: response.retryAfter });
1069
+ writeErrorResponse(res, status, renderError("openai", "fixture", response.error).body, { retryAfter: response.retryAfter });
1095
1070
  return;
1096
1071
  }
1097
1072
  if (isEmbeddingResponse(response)) {
@@ -1129,13 +1104,13 @@ async function handleCohereEmbed(req, res, raw, fixtures, journal, defaults, set
1129
1104
  fixture
1130
1105
  }
1131
1106
  });
1132
- writeErrorResponse(res, 500, JSON.stringify({ error: {
1107
+ writeErrorResponse(res, 500, renderError("cohere", "unknown-response", {
1133
1108
  message: "Fixture response did not match any known embedding type (must have embedding or error)",
1134
1109
  type: "server_error"
1135
- } }));
1110
+ }).body);
1136
1111
  return;
1137
1112
  }
1138
- if (resolveStrictMode(defaults.strict, req.headers)) {
1113
+ if (resolveRequestDecisions(defaults.strict, req.headers).fixtureMiss) {
1139
1114
  const strictMessage = strictNoMatchMessage(skippedBySequenceOrTurn);
1140
1115
  logger.error(strictNoMatchLogLine(req.method ?? "POST", req.url ?? "/v2/embed", skippedBySequenceOrTurn));
1141
1116
  journal.add({
@@ -1149,10 +1124,10 @@ async function handleCohereEmbed(req, res, raw, fixtures, journal, defaults, set
1149
1124
  ...strictOverrideField(defaults.strict, req.headers)
1150
1125
  }
1151
1126
  });
1152
- writeErrorResponse(res, 503, JSON.stringify({ error: {
1127
+ writeErrorResponse(res, 503, renderError("cohere", "strict-miss", {
1153
1128
  message: strictMessage,
1154
1129
  type: "invalid_request_error"
1155
- } }));
1130
+ }).body);
1156
1131
  return;
1157
1132
  }
1158
1133
  if (defaults.record) {