@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,17 +1,30 @@
1
1
  const require_runtime = require('./_virtual/_rolldown/runtime.cjs');
2
+ const require_errors = require('./response/errors.cjs');
3
+ const require_policy = require('./response/policy.cjs');
2
4
  const require_helpers = require('./helpers.cjs');
3
5
  const require_sse_writer = require('./sse-writer.cjs');
4
6
  const require_chaos = require('./chaos.cjs');
5
7
  const require_router = require('./router.cjs');
6
8
  const require_url = require('./url.cjs');
7
9
  const require_recorder = require('./recorder.cjs');
10
+ const require_collect = require('./response/catalog/collect.cjs');
11
+ const require_render = require('./response/catalog/render.cjs');
8
12
  const require_fal = require('./fal.cjs');
9
13
  const require_video_proxy_shared = require('./video-proxy-shared.cjs');
10
14
  let node_crypto = require("node:crypto");
11
15
  node_crypto = require_runtime.__toESM(node_crypto);
12
16
 
13
17
  //#region src/openrouter-video.ts
14
- const DEFAULT_OPENROUTER_VIDEO_MODEL = "bytedance/seedance-2.0";
18
+ /**
19
+ * Video models OpenRouter has REMOVED (deprecation policy: a removed surface
20
+ * never mocks success — it serves the rejection the real API serves now).
21
+ *
22
+ * openai/sora-2: gone from the live /api/v1/videos/models listing and from
23
+ * /api/v1/models (its /endpoints page is a 404). A live submit observed on
24
+ * 2026-10-10 is rejected with HTTP 400, content-type application/json, body
25
+ * `{"error":{"message":"Model openai/sora-2 does not exist","code":400}}` —
26
+ * the same rejection OpenRouter gives any unknown model id.
27
+ */
15
28
  const OPENROUTER_VIDEO_MAX_ENTRIES = 1e4;
16
29
  const OPENROUTER_VIDEO_TTL_MS = 36e5;
17
30
  /**
@@ -217,7 +230,7 @@ async function handleOpenRouterVideoStatus(req, res, jobId, fixtures, journal, d
217
230
  return;
218
231
  }
219
232
  if (job.kind === "record") {
220
- if (require_helpers.resolveStrictMode(defaults.strict, req.headers)) {
233
+ if (!require_policy.resolveRequestDecisions(defaults.strict, req.headers).upstream) {
221
234
  defaults.logger.error(`STRICT: video job ${jobId} is proxied live upstream (record mode) — refusing the upstream poll`);
222
235
  journal.add({
223
236
  method,
@@ -227,14 +240,14 @@ async function handleOpenRouterVideoStatus(req, res, jobId, fixtures, journal, d
227
240
  response: {
228
241
  status: 503,
229
242
  fixture: null,
230
- ...require_helpers.strictOverrideField(defaults.strict, req.headers)
243
+ ...require_policy.strictOverrideField(defaults.strict, req.headers)
231
244
  }
232
245
  });
233
- require_sse_writer.writeErrorResponse(res, 503, JSON.stringify({ error: {
246
+ require_sse_writer.writeErrorResponse(res, 503, require_errors.renderError("openai", "strict-miss", {
234
247
  message: `Strict mode: video job ${jobId} is proxied live upstream (record mode) — nothing reaches an upstream under strict mode`,
235
248
  type: "invalid_request_error",
236
249
  code: "no_fixture_match"
237
- } }));
250
+ }).body);
238
251
  return;
239
252
  }
240
253
  await proxyOpenRouterVideoRecordPoll({
@@ -375,7 +388,7 @@ async function handleOpenRouterVideoContent(req, res, jobId, journal, defaults,
375
388
  const queryIdx = path.indexOf("?");
376
389
  const indexParam = queryIdx === -1 ? null : new URLSearchParams(path.slice(queryIdx + 1)).get("index");
377
390
  if (job.kind === "record") {
378
- if (require_helpers.resolveStrictMode(defaults.strict, req.headers)) {
391
+ if (!require_policy.resolveRequestDecisions(defaults.strict, req.headers).upstream) {
379
392
  defaults.logger.error(`STRICT: video job ${jobId} content is proxied live upstream (record mode) — refusing the upstream fetch`);
380
393
  journal.add({
381
394
  method,
@@ -385,14 +398,14 @@ async function handleOpenRouterVideoContent(req, res, jobId, journal, defaults,
385
398
  response: {
386
399
  status: 503,
387
400
  fixture: null,
388
- ...require_helpers.strictOverrideField(defaults.strict, req.headers)
401
+ ...require_policy.strictOverrideField(defaults.strict, req.headers)
389
402
  }
390
403
  });
391
- require_sse_writer.writeErrorResponse(res, 503, JSON.stringify({ error: {
404
+ require_sse_writer.writeErrorResponse(res, 503, require_errors.renderError("openai", "strict-miss", {
392
405
  message: `Strict mode: video job ${jobId} is proxied live upstream (record mode) — nothing reaches an upstream under strict mode`,
393
406
  type: "invalid_request_error",
394
407
  code: "no_fixture_match"
395
- } }));
408
+ }).body);
396
409
  return;
397
410
  }
398
411
  await proxyOpenRouterVideoRecordContent({
@@ -475,13 +488,13 @@ async function proxyOpenRouterVideoRecordContent(args) {
475
488
  status: 502,
476
489
  fixture: null,
477
490
  source: "proxy",
478
- ...require_helpers.strictOverrideField(defaults.strict, req.headers)
491
+ ...require_policy.strictOverrideField(defaults.strict, req.headers)
479
492
  }
480
493
  });
481
- require_sse_writer.writeErrorResponse(res, 502, JSON.stringify({ error: {
494
+ require_sse_writer.writeErrorResponse(res, 502, require_errors.renderError("openai", "transport-failure", {
482
495
  message: `Proxy to upstream failed: ${msg}`,
483
496
  type: "proxy_error"
484
- } }));
497
+ }).body);
485
498
  };
486
499
  const record = defaults.record;
487
500
  if (!record) {
@@ -562,7 +575,7 @@ async function proxyOpenRouterVideoRecordContent(args) {
562
575
  status: contentRes.status,
563
576
  fixture: null,
564
577
  source: "proxy",
565
- ...require_helpers.strictOverrideField(defaults.strict, req.headers)
578
+ ...require_policy.strictOverrideField(defaults.strict, req.headers)
566
579
  }
567
580
  });
568
581
  res.writeHead(contentRes.status, { "Content-Type": contentRes.headers.get("content-type") ?? "application/json" });
@@ -591,7 +604,7 @@ async function proxyOpenRouterVideoRecordContent(args) {
591
604
  status: 200,
592
605
  fixture: null,
593
606
  source: "proxy",
594
- ...require_helpers.strictOverrideField(defaults.strict, req.headers)
607
+ ...require_policy.strictOverrideField(defaults.strict, req.headers)
595
608
  }
596
609
  });
597
610
  if (jobs.get(key) === job) jobs.set(key, job);
@@ -649,25 +662,6 @@ async function proxyOpenRouterVideoRecordContent(args) {
649
662
  reader.cancel().catch(() => {});
650
663
  }
651
664
  }
652
- const DEFAULT_OPENROUTER_VIDEO_MODELS = [DEFAULT_OPENROUTER_VIDEO_MODEL, "openai/sora-2"];
653
- function modelEntry(id) {
654
- return {
655
- id,
656
- name: id,
657
- supported_durations: [4, 8],
658
- supported_resolutions: ["720p", "1080p"],
659
- supported_aspect_ratios: [
660
- "16:9",
661
- "9:16",
662
- "1:1"
663
- ],
664
- supported_frame_images: [],
665
- supported_sizes: [],
666
- generate_audio: false,
667
- seed: true,
668
- pricing_skus: []
669
- };
670
- }
671
665
  /**
672
666
  * Synthesizes the OpenRouter video model listing from loaded fixtures —
673
667
  * video-endpoint fixtures with a string `match.model` (mirrors the Ollama
@@ -695,7 +689,7 @@ async function handleOpenRouterVideoModels(req, res, fixtures, journal, defaults
695
689
  const record = defaults.record;
696
690
  const upstreamBase = record?.providers.openrouter;
697
691
  let proxyAttemptFailed = false;
698
- if (upstreamBase && !require_helpers.resolveStrictMode(defaults.strict, req.headers)) {
692
+ if (upstreamBase && require_policy.resolveRequestDecisions(defaults.strict, req.headers).upstream) {
699
693
  let relay;
700
694
  try {
701
695
  const target = require_url.resolveUpstreamUrl(upstreamBase, "/api/v1/videos/models");
@@ -727,7 +721,7 @@ async function handleOpenRouterVideoModels(req, res, fixtures, journal, defaults
727
721
  status: 200,
728
722
  fixture: null,
729
723
  source: "proxy",
730
- ...require_helpers.strictOverrideField(defaults.strict, req.headers)
724
+ ...require_policy.strictOverrideField(defaults.strict, req.headers)
731
725
  }
732
726
  });
733
727
  res.writeHead(200, { "Content-Type": relay.contentType });
@@ -735,14 +729,9 @@ async function handleOpenRouterVideoModels(req, res, fixtures, journal, defaults
735
729
  return;
736
730
  }
737
731
  }
738
- const modelIds = /* @__PURE__ */ new Set();
739
- let sawVideoFixture = false;
740
- for (const f of fixtures) if (f.match.endpoint === "video") {
741
- sawVideoFixture = true;
742
- if (f.match.model && typeof f.match.model === "string") modelIds.add(f.match.model);
743
- }
744
- if (modelIds.size === 0 && sawVideoFixture) defaults.logger.warn("No video fixture contributes a string model — serving the default video model set");
745
- const ids = modelIds.size > 0 ? [...modelIds] : DEFAULT_OPENROUTER_VIDEO_MODELS;
732
+ const collection = require_collect.collect(fixtures, "video-active");
733
+ if (collection.ids.length === 0 && collection.diagnostics.sawVideoFixture) defaults.logger.warn("No video fixture contributes a string model — serving the default video model set");
734
+ const body = require_render.renderOpenRouterVideoModels(collection.ids);
746
735
  if (res.destroyed || res.writableEnded) return;
747
736
  journal.add({
748
737
  method,
@@ -753,11 +742,11 @@ async function handleOpenRouterVideoModels(req, res, fixtures, journal, defaults
753
742
  status: 200,
754
743
  fixture: null,
755
744
  ...proxyAttemptFailed ? { source: "internal" } : {},
756
- ...require_helpers.strictOverrideField(defaults.strict, req.headers)
745
+ ...require_policy.strictOverrideField(defaults.strict, req.headers)
757
746
  }
758
747
  });
759
748
  res.writeHead(200, { "Content-Type": "application/json" });
760
- res.end(JSON.stringify({ data: ids.map((id) => modelEntry(id)) }));
749
+ res.end(JSON.stringify(body));
761
750
  }
762
751
  async function handleOpenRouterVideoCreate(req, res, raw, fixtures, journal, defaults, setCorsHeaders, jobs) {
763
752
  setCorsHeaders(res);
@@ -778,11 +767,11 @@ async function handleOpenRouterVideoCreate(req, res, raw, fixtures, journal, def
778
767
  fixture: null
779
768
  }
780
769
  });
781
- require_sse_writer.writeErrorResponse(res, 400, JSON.stringify({ error: {
770
+ require_sse_writer.writeErrorResponse(res, 400, require_errors.renderError("openai", "validation", {
782
771
  message: `Malformed JSON: ${detail}`,
783
772
  type: "invalid_request_error",
784
773
  code: "invalid_json"
785
- } }));
774
+ }).body);
786
775
  return;
787
776
  }
788
777
  if (videoReq === null || typeof videoReq !== "object" || Array.isArray(videoReq)) {
@@ -796,10 +785,10 @@ async function handleOpenRouterVideoCreate(req, res, raw, fixtures, journal, def
796
785
  fixture: null
797
786
  }
798
787
  });
799
- require_sse_writer.writeErrorResponse(res, 400, JSON.stringify({ error: {
788
+ require_sse_writer.writeErrorResponse(res, 400, require_errors.renderError("openai", "validation", {
800
789
  message: "Request body must be a JSON object",
801
790
  type: "invalid_request_error"
802
- } }));
791
+ }).body);
803
792
  return;
804
793
  }
805
794
  const parsedBody = validationJournalBody(videoReq);
@@ -814,11 +803,10 @@ async function handleOpenRouterVideoCreate(req, res, raw, fixtures, journal, def
814
803
  fixture: null
815
804
  }
816
805
  });
817
- const message = videoReq.prompt === void 0 ? "Missing required parameter: 'prompt'" : "Invalid type for parameter: 'prompt' must be a non-empty string";
818
- require_sse_writer.writeErrorResponse(res, 400, JSON.stringify({ error: {
819
- message,
806
+ require_sse_writer.writeErrorResponse(res, 400, require_errors.renderError("openai", "validation", {
807
+ message: videoReq.prompt === void 0 ? "Missing required parameter: 'prompt'" : "Invalid type for parameter: 'prompt' must be a non-empty string",
820
808
  type: "invalid_request_error"
821
- } }));
809
+ }).body);
822
810
  return;
823
811
  }
824
812
  if (videoReq.model !== void 0 && (typeof videoReq.model !== "string" || !videoReq.model)) {
@@ -832,14 +820,31 @@ async function handleOpenRouterVideoCreate(req, res, raw, fixtures, journal, def
832
820
  fixture: null
833
821
  }
834
822
  });
835
- require_sse_writer.writeErrorResponse(res, 400, JSON.stringify({ error: {
823
+ require_sse_writer.writeErrorResponse(res, 400, require_errors.renderError("openai", "validation", {
836
824
  message: "Invalid type for parameter: 'model' must be a non-empty string",
837
825
  type: "invalid_request_error"
826
+ }).body);
827
+ return;
828
+ }
829
+ if (videoReq.model !== void 0 && require_collect.OPENROUTER_VIDEO_SUNSET_MODELS.has(videoReq.model)) {
830
+ journal.add({
831
+ method,
832
+ path,
833
+ headers: require_helpers.flattenHeaders(req.headers),
834
+ body: parsedBody,
835
+ response: {
836
+ status: 400,
837
+ fixture: null
838
+ }
839
+ });
840
+ require_sse_writer.writeErrorResponse(res, 400, JSON.stringify({ error: {
841
+ message: `Model ${videoReq.model} does not exist`,
842
+ code: 400
838
843
  } }));
839
844
  return;
840
845
  }
841
846
  const syntheticReq = {
842
- model: videoReq.model ?? DEFAULT_OPENROUTER_VIDEO_MODEL,
847
+ model: videoReq.model ?? require_render.DEFAULT_OPENROUTER_VIDEO_MODEL,
843
848
  messages: [{
844
849
  role: "user",
845
850
  content: videoReq.prompt
@@ -861,9 +866,9 @@ async function handleOpenRouterVideoCreate(req, res, raw, fixtures, journal, def
861
866
  path,
862
867
  headers: require_helpers.flattenHeaders(req.headers),
863
868
  body: syntheticReq
864
- }, fixture ? "fixture" : require_helpers.resolveStrictMode(defaults.strict, req.headers) ? "internal" : defaults.record?.providers.openrouter ? "proxy" : "internal", defaults.registry, defaults.logger)) return;
869
+ }, fixture ? "fixture" : require_policy.resolveRequestDecisions(defaults.strict, req.headers).fixtureMiss ? "internal" : defaults.record?.providers.openrouter ? "proxy" : "internal", defaults.registry, defaults.logger)) return;
865
870
  if (!fixture) {
866
- if (require_helpers.resolveStrictMode(defaults.strict, req.headers)) {
871
+ if (require_policy.resolveRequestDecisions(defaults.strict, req.headers).fixtureMiss) {
867
872
  const strictMessage = require_helpers.strictNoMatchMessage(skippedBySequenceOrTurn);
868
873
  defaults.logger.error(require_helpers.strictNoMatchLogLine(method, path, skippedBySequenceOrTurn));
869
874
  journal.add({
@@ -874,14 +879,14 @@ async function handleOpenRouterVideoCreate(req, res, raw, fixtures, journal, def
874
879
  response: {
875
880
  status: 503,
876
881
  fixture: null,
877
- ...require_helpers.strictOverrideField(defaults.strict, req.headers)
882
+ ...require_policy.strictOverrideField(defaults.strict, req.headers)
878
883
  }
879
884
  });
880
- require_sse_writer.writeErrorResponse(res, 503, JSON.stringify({ error: {
885
+ require_sse_writer.writeErrorResponse(res, 503, require_errors.renderError("openai", "strict-miss", {
881
886
  message: strictMessage,
882
887
  type: "invalid_request_error",
883
888
  code: "no_fixture_match"
884
- } }));
889
+ }).body);
885
890
  return;
886
891
  }
887
892
  if (defaults.record) {
@@ -906,7 +911,7 @@ async function handleOpenRouterVideoCreate(req, res, raw, fixtures, journal, def
906
911
  response: {
907
912
  status: 404,
908
913
  fixture: null,
909
- ...require_helpers.strictOverrideField(defaults.strict, req.headers)
914
+ ...require_policy.strictOverrideField(defaults.strict, req.headers)
910
915
  }
911
916
  });
912
917
  require_sse_writer.writeErrorResponse(res, 404, JSON.stringify({ error: {
@@ -945,10 +950,10 @@ async function handleOpenRouterVideoCreate(req, res, raw, fixtures, journal, def
945
950
  fixture
946
951
  }
947
952
  });
948
- require_sse_writer.writeErrorResponse(res, 500, JSON.stringify({ error: {
953
+ require_sse_writer.writeErrorResponse(res, 500, require_errors.renderError("openai", "unknown-response", {
949
954
  message: "Fixture response is not a video type",
950
955
  type: "server_error"
951
- } }));
956
+ }).body);
952
957
  return;
953
958
  }
954
959
  if (res.destroyed || res.writableEnded) return;
@@ -1016,13 +1021,13 @@ async function proxyOpenRouterVideoSubmit(args) {
1016
1021
  status: 502,
1017
1022
  fixture: null,
1018
1023
  source: "proxy",
1019
- ...require_helpers.strictOverrideField(defaults.strict, req.headers)
1024
+ ...require_policy.strictOverrideField(defaults.strict, req.headers)
1020
1025
  }
1021
1026
  });
1022
- require_sse_writer.writeErrorResponse(res, 502, JSON.stringify({ error: {
1027
+ require_sse_writer.writeErrorResponse(res, 502, require_errors.renderError("openai", "transport-failure", {
1023
1028
  message: `Proxy to upstream failed: ${msg}`,
1024
1029
  type: "proxy_error"
1025
- } }));
1030
+ }).body);
1026
1031
  return "handled";
1027
1032
  };
1028
1033
  let submitUrl;
@@ -1065,7 +1070,7 @@ async function proxyOpenRouterVideoSubmit(args) {
1065
1070
  status: fetched.status,
1066
1071
  fixture: null,
1067
1072
  source: "proxy",
1068
- ...require_helpers.strictOverrideField(defaults.strict, req.headers)
1073
+ ...require_policy.strictOverrideField(defaults.strict, req.headers)
1069
1074
  }
1070
1075
  });
1071
1076
  res.writeHead(fetched.status, { "Content-Type": fetched.contentType ?? "application/json" });
@@ -1119,7 +1124,7 @@ async function proxyOpenRouterVideoSubmit(args) {
1119
1124
  status: 202,
1120
1125
  fixture: null,
1121
1126
  source: "proxy",
1122
- ...require_helpers.strictOverrideField(defaults.strict, req.headers)
1127
+ ...require_policy.strictOverrideField(defaults.strict, req.headers)
1123
1128
  }
1124
1129
  });
1125
1130
  res.writeHead(202, { "Content-Type": "application/json" });
@@ -1179,7 +1184,7 @@ async function proxyOpenRouterVideoRecordPoll(args) {
1179
1184
  status,
1180
1185
  fixture: null,
1181
1186
  source: "proxy",
1182
- ...require_helpers.strictOverrideField(defaults.strict, req.headers)
1187
+ ...require_policy.strictOverrideField(defaults.strict, req.headers)
1183
1188
  }
1184
1189
  });
1185
1190
  };
@@ -1187,10 +1192,10 @@ async function proxyOpenRouterVideoRecordPoll(args) {
1187
1192
  logger.error(`OpenRouter video poll proxy failed: ${msg}`);
1188
1193
  if (res.destroyed || res.writableEnded) return;
1189
1194
  journalProxy(502);
1190
- require_sse_writer.writeErrorResponse(res, 502, JSON.stringify({ error: {
1195
+ require_sse_writer.writeErrorResponse(res, 502, require_errors.renderError("openai", "transport-failure", {
1191
1196
  message: `Proxy to upstream failed: ${msg}`,
1192
1197
  type: "proxy_error"
1193
- } }));
1198
+ }).body);
1194
1199
  };
1195
1200
  const record = defaults.record;
1196
1201
  if (!record) {