@copilotkit/aimock 1.7.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 (368) hide show
  1. package/.claude-plugin/marketplace.json +17 -0
  2. package/.claude-plugin/plugin.json +12 -0
  3. package/LICENSE +21 -0
  4. package/README.md +82 -0
  5. package/dist/_virtual/_rolldown/runtime.cjs +29 -0
  6. package/dist/a2a-handler.cjs +203 -0
  7. package/dist/a2a-handler.cjs.map +1 -0
  8. package/dist/a2a-handler.js +199 -0
  9. package/dist/a2a-handler.js.map +1 -0
  10. package/dist/a2a-mock.cjs +292 -0
  11. package/dist/a2a-mock.cjs.map +1 -0
  12. package/dist/a2a-mock.d.cts +41 -0
  13. package/dist/a2a-mock.d.cts.map +1 -0
  14. package/dist/a2a-mock.d.ts +41 -0
  15. package/dist/a2a-mock.d.ts.map +1 -0
  16. package/dist/a2a-mock.js +290 -0
  17. package/dist/a2a-mock.js.map +1 -0
  18. package/dist/a2a-stub.cjs +4 -0
  19. package/dist/a2a-stub.d.cts +3 -0
  20. package/dist/a2a-stub.d.ts +3 -0
  21. package/dist/a2a-stub.js +3 -0
  22. package/dist/a2a-types.d.cts +68 -0
  23. package/dist/a2a-types.d.cts.map +1 -0
  24. package/dist/a2a-types.d.ts +68 -0
  25. package/dist/a2a-types.d.ts.map +1 -0
  26. package/dist/aimock-cli.cjs +112 -0
  27. package/dist/aimock-cli.cjs.map +1 -0
  28. package/dist/aimock-cli.d.cts +19 -0
  29. package/dist/aimock-cli.d.cts.map +1 -0
  30. package/dist/aimock-cli.d.ts +19 -0
  31. package/dist/aimock-cli.d.ts.map +1 -0
  32. package/dist/aimock-cli.js +110 -0
  33. package/dist/aimock-cli.js.map +1 -0
  34. package/dist/aws-event-stream.cjs +117 -0
  35. package/dist/aws-event-stream.cjs.map +1 -0
  36. package/dist/aws-event-stream.d.cts +38 -0
  37. package/dist/aws-event-stream.d.cts.map +1 -0
  38. package/dist/aws-event-stream.d.ts +38 -0
  39. package/dist/aws-event-stream.d.ts.map +1 -0
  40. package/dist/aws-event-stream.js +114 -0
  41. package/dist/aws-event-stream.js.map +1 -0
  42. package/dist/bedrock-converse.cjs +445 -0
  43. package/dist/bedrock-converse.cjs.map +1 -0
  44. package/dist/bedrock-converse.d.cts +50 -0
  45. package/dist/bedrock-converse.d.cts.map +1 -0
  46. package/dist/bedrock-converse.d.ts +50 -0
  47. package/dist/bedrock-converse.d.ts.map +1 -0
  48. package/dist/bedrock-converse.js +443 -0
  49. package/dist/bedrock-converse.js.map +1 -0
  50. package/dist/bedrock.cjs +557 -0
  51. package/dist/bedrock.cjs.map +1 -0
  52. package/dist/bedrock.d.cts +41 -0
  53. package/dist/bedrock.d.cts.map +1 -0
  54. package/dist/bedrock.d.ts +41 -0
  55. package/dist/bedrock.d.ts.map +1 -0
  56. package/dist/bedrock.js +553 -0
  57. package/dist/bedrock.js.map +1 -0
  58. package/dist/chaos.cjs +114 -0
  59. package/dist/chaos.cjs.map +1 -0
  60. package/dist/chaos.d.cts +27 -0
  61. package/dist/chaos.d.cts.map +1 -0
  62. package/dist/chaos.d.ts +27 -0
  63. package/dist/chaos.d.ts.map +1 -0
  64. package/dist/chaos.js +113 -0
  65. package/dist/chaos.js.map +1 -0
  66. package/dist/cli.cjs +268 -0
  67. package/dist/cli.cjs.map +1 -0
  68. package/dist/cli.d.cts +1 -0
  69. package/dist/cli.d.ts +1 -0
  70. package/dist/cli.js +268 -0
  71. package/dist/cli.js.map +1 -0
  72. package/dist/cohere.cjs +434 -0
  73. package/dist/cohere.cjs.map +1 -0
  74. package/dist/cohere.d.cts +34 -0
  75. package/dist/cohere.d.cts.map +1 -0
  76. package/dist/cohere.d.ts +34 -0
  77. package/dist/cohere.d.ts.map +1 -0
  78. package/dist/cohere.js +433 -0
  79. package/dist/cohere.js.map +1 -0
  80. package/dist/config-loader.cjs +111 -0
  81. package/dist/config-loader.cjs.map +1 -0
  82. package/dist/config-loader.d.cts +100 -0
  83. package/dist/config-loader.d.cts.map +1 -0
  84. package/dist/config-loader.d.ts +100 -0
  85. package/dist/config-loader.d.ts.map +1 -0
  86. package/dist/config-loader.js +107 -0
  87. package/dist/config-loader.js.map +1 -0
  88. package/dist/embeddings.cjs +150 -0
  89. package/dist/embeddings.cjs.map +1 -0
  90. package/dist/embeddings.d.cts +12 -0
  91. package/dist/embeddings.d.cts.map +1 -0
  92. package/dist/embeddings.d.ts +12 -0
  93. package/dist/embeddings.d.ts.map +1 -0
  94. package/dist/embeddings.js +150 -0
  95. package/dist/embeddings.js.map +1 -0
  96. package/dist/fixture-loader.cjs +269 -0
  97. package/dist/fixture-loader.cjs.map +1 -0
  98. package/dist/fixture-loader.d.cts +17 -0
  99. package/dist/fixture-loader.d.cts.map +1 -0
  100. package/dist/fixture-loader.d.ts +17 -0
  101. package/dist/fixture-loader.d.ts.map +1 -0
  102. package/dist/fixture-loader.js +265 -0
  103. package/dist/fixture-loader.js.map +1 -0
  104. package/dist/gemini.cjs +403 -0
  105. package/dist/gemini.cjs.map +1 -0
  106. package/dist/gemini.d.cts +10 -0
  107. package/dist/gemini.d.cts.map +1 -0
  108. package/dist/gemini.d.ts +10 -0
  109. package/dist/gemini.d.ts.map +1 -0
  110. package/dist/gemini.js +403 -0
  111. package/dist/gemini.js.map +1 -0
  112. package/dist/helpers.cjs +276 -0
  113. package/dist/helpers.cjs.map +1 -0
  114. package/dist/helpers.d.cts +39 -0
  115. package/dist/helpers.d.cts.map +1 -0
  116. package/dist/helpers.d.ts +39 -0
  117. package/dist/helpers.d.ts.map +1 -0
  118. package/dist/helpers.js +259 -0
  119. package/dist/helpers.js.map +1 -0
  120. package/dist/index.cjs +113 -0
  121. package/dist/index.d.cts +42 -0
  122. package/dist/index.d.ts +42 -0
  123. package/dist/index.js +39 -0
  124. package/dist/interruption.cjs +40 -0
  125. package/dist/interruption.cjs.map +1 -0
  126. package/dist/interruption.d.cts +15 -0
  127. package/dist/interruption.d.cts.map +1 -0
  128. package/dist/interruption.d.ts +15 -0
  129. package/dist/interruption.d.ts.map +1 -0
  130. package/dist/interruption.js +39 -0
  131. package/dist/interruption.js.map +1 -0
  132. package/dist/journal.cjs +65 -0
  133. package/dist/journal.cjs.map +1 -0
  134. package/dist/journal.d.cts +23 -0
  135. package/dist/journal.d.cts.map +1 -0
  136. package/dist/journal.d.ts +23 -0
  137. package/dist/journal.d.ts.map +1 -0
  138. package/dist/journal.js +65 -0
  139. package/dist/journal.js.map +1 -0
  140. package/dist/jsonrpc.cjs +91 -0
  141. package/dist/jsonrpc.cjs.map +1 -0
  142. package/dist/jsonrpc.d.cts +24 -0
  143. package/dist/jsonrpc.d.cts.map +1 -0
  144. package/dist/jsonrpc.d.ts +24 -0
  145. package/dist/jsonrpc.d.ts.map +1 -0
  146. package/dist/jsonrpc.js +90 -0
  147. package/dist/jsonrpc.js.map +1 -0
  148. package/dist/llmock.cjs +223 -0
  149. package/dist/llmock.cjs.map +1 -0
  150. package/dist/llmock.d.cts +70 -0
  151. package/dist/llmock.d.cts.map +1 -0
  152. package/dist/llmock.d.ts +70 -0
  153. package/dist/llmock.d.ts.map +1 -0
  154. package/dist/llmock.js +223 -0
  155. package/dist/llmock.js.map +1 -0
  156. package/dist/logger.cjs +29 -0
  157. package/dist/logger.cjs.map +1 -0
  158. package/dist/logger.d.cts +14 -0
  159. package/dist/logger.d.cts.map +1 -0
  160. package/dist/logger.d.ts +14 -0
  161. package/dist/logger.d.ts.map +1 -0
  162. package/dist/logger.js +28 -0
  163. package/dist/logger.js.map +1 -0
  164. package/dist/mcp-handler.cjs +189 -0
  165. package/dist/mcp-handler.cjs.map +1 -0
  166. package/dist/mcp-handler.js +188 -0
  167. package/dist/mcp-handler.js.map +1 -0
  168. package/dist/mcp-mock.cjs +169 -0
  169. package/dist/mcp-mock.cjs.map +1 -0
  170. package/dist/mcp-mock.d.cts +40 -0
  171. package/dist/mcp-mock.d.cts.map +1 -0
  172. package/dist/mcp-mock.d.ts +40 -0
  173. package/dist/mcp-mock.d.ts.map +1 -0
  174. package/dist/mcp-mock.js +167 -0
  175. package/dist/mcp-mock.js.map +1 -0
  176. package/dist/mcp-stub.cjs +4 -0
  177. package/dist/mcp-stub.d.cts +3 -0
  178. package/dist/mcp-stub.d.ts +3 -0
  179. package/dist/mcp-stub.js +3 -0
  180. package/dist/mcp-types.d.cts +65 -0
  181. package/dist/mcp-types.d.cts.map +1 -0
  182. package/dist/mcp-types.d.ts +65 -0
  183. package/dist/mcp-types.d.ts.map +1 -0
  184. package/dist/messages.cjs +489 -0
  185. package/dist/messages.cjs.map +1 -0
  186. package/dist/messages.d.cts +10 -0
  187. package/dist/messages.d.cts.map +1 -0
  188. package/dist/messages.d.ts +10 -0
  189. package/dist/messages.d.ts.map +1 -0
  190. package/dist/messages.js +489 -0
  191. package/dist/messages.js.map +1 -0
  192. package/dist/metrics.cjs +160 -0
  193. package/dist/metrics.cjs.map +1 -0
  194. package/dist/metrics.d.cts +24 -0
  195. package/dist/metrics.d.cts.map +1 -0
  196. package/dist/metrics.d.ts +24 -0
  197. package/dist/metrics.d.ts.map +1 -0
  198. package/dist/metrics.js +158 -0
  199. package/dist/metrics.js.map +1 -0
  200. package/dist/moderation.cjs +91 -0
  201. package/dist/moderation.cjs.map +1 -0
  202. package/dist/moderation.d.cts +23 -0
  203. package/dist/moderation.d.cts.map +1 -0
  204. package/dist/moderation.d.ts +23 -0
  205. package/dist/moderation.d.ts.map +1 -0
  206. package/dist/moderation.js +91 -0
  207. package/dist/moderation.js.map +1 -0
  208. package/dist/ndjson-writer.cjs +31 -0
  209. package/dist/ndjson-writer.cjs.map +1 -0
  210. package/dist/ndjson-writer.d.cts +17 -0
  211. package/dist/ndjson-writer.d.cts.map +1 -0
  212. package/dist/ndjson-writer.d.ts +17 -0
  213. package/dist/ndjson-writer.d.ts.map +1 -0
  214. package/dist/ndjson-writer.js +31 -0
  215. package/dist/ndjson-writer.js.map +1 -0
  216. package/dist/ollama.cjs +519 -0
  217. package/dist/ollama.cjs.map +1 -0
  218. package/dist/ollama.d.cts +34 -0
  219. package/dist/ollama.d.cts.map +1 -0
  220. package/dist/ollama.d.ts +34 -0
  221. package/dist/ollama.d.ts.map +1 -0
  222. package/dist/ollama.js +517 -0
  223. package/dist/ollama.js.map +1 -0
  224. package/dist/recorder.cjs +311 -0
  225. package/dist/recorder.cjs.map +1 -0
  226. package/dist/recorder.d.cts +23 -0
  227. package/dist/recorder.d.cts.map +1 -0
  228. package/dist/recorder.d.ts +23 -0
  229. package/dist/recorder.d.ts.map +1 -0
  230. package/dist/recorder.js +305 -0
  231. package/dist/recorder.js.map +1 -0
  232. package/dist/rerank.cjs +71 -0
  233. package/dist/rerank.cjs.map +1 -0
  234. package/dist/rerank.d.cts +22 -0
  235. package/dist/rerank.d.cts.map +1 -0
  236. package/dist/rerank.d.ts +22 -0
  237. package/dist/rerank.d.ts.map +1 -0
  238. package/dist/rerank.js +71 -0
  239. package/dist/rerank.js.map +1 -0
  240. package/dist/responses.cjs +637 -0
  241. package/dist/responses.cjs.map +1 -0
  242. package/dist/responses.d.cts +16 -0
  243. package/dist/responses.d.cts.map +1 -0
  244. package/dist/responses.d.ts +16 -0
  245. package/dist/responses.d.ts.map +1 -0
  246. package/dist/responses.js +634 -0
  247. package/dist/responses.js.map +1 -0
  248. package/dist/router.cjs +68 -0
  249. package/dist/router.cjs.map +1 -0
  250. package/dist/router.d.cts +16 -0
  251. package/dist/router.d.cts.map +1 -0
  252. package/dist/router.d.ts +16 -0
  253. package/dist/router.d.ts.map +1 -0
  254. package/dist/router.js +65 -0
  255. package/dist/router.js.map +1 -0
  256. package/dist/search.cjs +59 -0
  257. package/dist/search.cjs.map +1 -0
  258. package/dist/search.d.cts +23 -0
  259. package/dist/search.d.cts.map +1 -0
  260. package/dist/search.d.ts +23 -0
  261. package/dist/search.d.ts.map +1 -0
  262. package/dist/search.js +59 -0
  263. package/dist/search.js.map +1 -0
  264. package/dist/server.cjs +935 -0
  265. package/dist/server.cjs.map +1 -0
  266. package/dist/server.d.cts +28 -0
  267. package/dist/server.d.cts.map +1 -0
  268. package/dist/server.d.ts +28 -0
  269. package/dist/server.d.ts.map +1 -0
  270. package/dist/server.js +933 -0
  271. package/dist/server.js.map +1 -0
  272. package/dist/sse-writer.cjs +59 -0
  273. package/dist/sse-writer.cjs.map +1 -0
  274. package/dist/sse-writer.d.cts +19 -0
  275. package/dist/sse-writer.d.cts.map +1 -0
  276. package/dist/sse-writer.d.ts +19 -0
  277. package/dist/sse-writer.d.ts.map +1 -0
  278. package/dist/sse-writer.js +55 -0
  279. package/dist/sse-writer.js.map +1 -0
  280. package/dist/stream-collapse.cjs +496 -0
  281. package/dist/stream-collapse.cjs.map +1 -0
  282. package/dist/stream-collapse.d.cts +70 -0
  283. package/dist/stream-collapse.d.cts.map +1 -0
  284. package/dist/stream-collapse.d.ts +70 -0
  285. package/dist/stream-collapse.d.ts.map +1 -0
  286. package/dist/stream-collapse.js +489 -0
  287. package/dist/stream-collapse.js.map +1 -0
  288. package/dist/suite.cjs +46 -0
  289. package/dist/suite.cjs.map +1 -0
  290. package/dist/suite.d.cts +31 -0
  291. package/dist/suite.d.cts.map +1 -0
  292. package/dist/suite.d.ts +31 -0
  293. package/dist/suite.d.ts.map +1 -0
  294. package/dist/suite.js +46 -0
  295. package/dist/suite.js.map +1 -0
  296. package/dist/types.d.cts +243 -0
  297. package/dist/types.d.cts.map +1 -0
  298. package/dist/types.d.ts +243 -0
  299. package/dist/types.d.ts.map +1 -0
  300. package/dist/url.cjs +21 -0
  301. package/dist/url.cjs.map +1 -0
  302. package/dist/url.d.cts +16 -0
  303. package/dist/url.d.cts.map +1 -0
  304. package/dist/url.d.ts +16 -0
  305. package/dist/url.d.ts.map +1 -0
  306. package/dist/url.js +20 -0
  307. package/dist/url.js.map +1 -0
  308. package/dist/vector-handler.cjs +239 -0
  309. package/dist/vector-handler.cjs.map +1 -0
  310. package/dist/vector-handler.js +238 -0
  311. package/dist/vector-handler.js.map +1 -0
  312. package/dist/vector-mock.cjs +229 -0
  313. package/dist/vector-mock.cjs.map +1 -0
  314. package/dist/vector-mock.d.cts +39 -0
  315. package/dist/vector-mock.d.cts.map +1 -0
  316. package/dist/vector-mock.d.ts +39 -0
  317. package/dist/vector-mock.d.ts.map +1 -0
  318. package/dist/vector-mock.js +227 -0
  319. package/dist/vector-mock.js.map +1 -0
  320. package/dist/vector-stub.cjs +4 -0
  321. package/dist/vector-stub.d.cts +3 -0
  322. package/dist/vector-stub.d.ts +3 -0
  323. package/dist/vector-stub.js +3 -0
  324. package/dist/vector-types.d.cts +32 -0
  325. package/dist/vector-types.d.cts.map +1 -0
  326. package/dist/vector-types.d.ts +32 -0
  327. package/dist/vector-types.d.ts.map +1 -0
  328. package/dist/watcher.cjs +59 -0
  329. package/dist/watcher.cjs.map +1 -0
  330. package/dist/watcher.js +58 -0
  331. package/dist/watcher.js.map +1 -0
  332. package/dist/ws-framing.cjs +187 -0
  333. package/dist/ws-framing.cjs.map +1 -0
  334. package/dist/ws-framing.d.cts +26 -0
  335. package/dist/ws-framing.d.cts.map +1 -0
  336. package/dist/ws-framing.d.ts +26 -0
  337. package/dist/ws-framing.d.ts.map +1 -0
  338. package/dist/ws-framing.js +184 -0
  339. package/dist/ws-framing.js.map +1 -0
  340. package/dist/ws-gemini-live.cjs +364 -0
  341. package/dist/ws-gemini-live.cjs.map +1 -0
  342. package/dist/ws-gemini-live.d.cts +18 -0
  343. package/dist/ws-gemini-live.d.cts.map +1 -0
  344. package/dist/ws-gemini-live.d.ts +18 -0
  345. package/dist/ws-gemini-live.d.ts.map +1 -0
  346. package/dist/ws-gemini-live.js +364 -0
  347. package/dist/ws-gemini-live.js.map +1 -0
  348. package/dist/ws-realtime.cjs +435 -0
  349. package/dist/ws-realtime.cjs.map +1 -0
  350. package/dist/ws-realtime.d.cts +17 -0
  351. package/dist/ws-realtime.d.cts.map +1 -0
  352. package/dist/ws-realtime.d.ts +17 -0
  353. package/dist/ws-realtime.d.ts.map +1 -0
  354. package/dist/ws-realtime.js +435 -0
  355. package/dist/ws-realtime.js.map +1 -0
  356. package/dist/ws-responses.cjs +164 -0
  357. package/dist/ws-responses.cjs.map +1 -0
  358. package/dist/ws-responses.d.cts +18 -0
  359. package/dist/ws-responses.d.cts.map +1 -0
  360. package/dist/ws-responses.d.ts +18 -0
  361. package/dist/ws-responses.d.ts.map +1 -0
  362. package/dist/ws-responses.js +164 -0
  363. package/dist/ws-responses.js.map +1 -0
  364. package/fixtures/example-greeting.json +12 -0
  365. package/fixtures/example-multi-turn.json +14 -0
  366. package/fixtures/example-tool-call.json +15 -0
  367. package/package.json +118 -0
  368. package/skills/write-fixtures/SKILL.md +625 -0
@@ -0,0 +1,637 @@
1
+ const require_helpers = require('./helpers.cjs');
2
+ const require_router = require('./router.cjs');
3
+ const require_sse_writer = require('./sse-writer.cjs');
4
+ const require_interruption = require('./interruption.cjs');
5
+ const require_chaos = require('./chaos.cjs');
6
+ const require_recorder = require('./recorder.cjs');
7
+
8
+ //#region src/responses.ts
9
+ function extractTextContent(content) {
10
+ if (!content) return "";
11
+ if (typeof content === "string") return content;
12
+ return content.filter((p) => p.type === "input_text" || p.type === "output_text").map((p) => p.text ?? "").join("");
13
+ }
14
+ function responsesInputToMessages(req) {
15
+ const messages = [];
16
+ if (req.instructions) messages.push({
17
+ role: "system",
18
+ content: req.instructions
19
+ });
20
+ for (const item of req.input) if (item.role === "system" || item.role === "developer") messages.push({
21
+ role: "system",
22
+ content: extractTextContent(item.content)
23
+ });
24
+ else if (item.role === "user") messages.push({
25
+ role: "user",
26
+ content: extractTextContent(item.content)
27
+ });
28
+ else if (item.role === "assistant") messages.push({
29
+ role: "assistant",
30
+ content: extractTextContent(item.content)
31
+ });
32
+ else if (item.type === "function_call") messages.push({
33
+ role: "assistant",
34
+ content: null,
35
+ tool_calls: [{
36
+ id: item.call_id ?? require_helpers.generateToolCallId(),
37
+ type: "function",
38
+ function: {
39
+ name: item.name ?? "",
40
+ arguments: item.arguments ?? ""
41
+ }
42
+ }]
43
+ });
44
+ else if (item.type === "function_call_output") messages.push({
45
+ role: "tool",
46
+ content: item.output ?? "",
47
+ tool_call_id: item.call_id
48
+ });
49
+ return messages;
50
+ }
51
+ function responsesToolsToCompletionsTools(tools) {
52
+ if (!tools || tools.length === 0) return void 0;
53
+ return tools.filter((t) => t.type === "function").map((t) => ({
54
+ type: "function",
55
+ function: {
56
+ name: t.name,
57
+ description: t.description,
58
+ parameters: t.parameters
59
+ }
60
+ }));
61
+ }
62
+ function responsesToCompletionRequest(req) {
63
+ return {
64
+ model: req.model,
65
+ messages: responsesInputToMessages(req),
66
+ stream: req.stream,
67
+ temperature: req.temperature,
68
+ tools: responsesToolsToCompletionsTools(req.tools),
69
+ tool_choice: req.tool_choice
70
+ };
71
+ }
72
+ function responseId() {
73
+ return require_helpers.generateId("resp");
74
+ }
75
+ function itemId() {
76
+ return require_helpers.generateId("msg");
77
+ }
78
+ function buildTextStreamEvents(content, model, chunkSize, reasoning, webSearches) {
79
+ const respId = responseId();
80
+ const msgId = itemId();
81
+ const created = Math.floor(Date.now() / 1e3);
82
+ const events = [];
83
+ let msgOutputIndex = 0;
84
+ const prefixOutputItems = [];
85
+ events.push({
86
+ type: "response.created",
87
+ response: {
88
+ id: respId,
89
+ object: "response",
90
+ created_at: created,
91
+ model,
92
+ status: "in_progress",
93
+ output: []
94
+ }
95
+ });
96
+ events.push({
97
+ type: "response.in_progress",
98
+ response: {
99
+ id: respId,
100
+ object: "response",
101
+ created_at: created,
102
+ model,
103
+ status: "in_progress",
104
+ output: []
105
+ }
106
+ });
107
+ if (reasoning) {
108
+ const reasoningEvents = buildReasoningStreamEvents(reasoning, model, chunkSize);
109
+ events.push(...reasoningEvents);
110
+ const doneEvent = reasoningEvents.find((e) => e.type === "response.output_item.done" && e.item?.type === "reasoning");
111
+ if (doneEvent) prefixOutputItems.push(doneEvent.item);
112
+ msgOutputIndex++;
113
+ }
114
+ if (webSearches && webSearches.length > 0) {
115
+ const searchEvents = buildWebSearchStreamEvents(webSearches, msgOutputIndex);
116
+ events.push(...searchEvents);
117
+ const doneEvents = searchEvents.filter((e) => e.type === "response.output_item.done" && e.item?.type === "web_search_call");
118
+ for (const de of doneEvents) prefixOutputItems.push(de.item);
119
+ msgOutputIndex += webSearches.length;
120
+ }
121
+ events.push({
122
+ type: "response.output_item.added",
123
+ output_index: msgOutputIndex,
124
+ item: {
125
+ type: "message",
126
+ id: msgId,
127
+ status: "in_progress",
128
+ role: "assistant",
129
+ content: []
130
+ }
131
+ });
132
+ events.push({
133
+ type: "response.content_part.added",
134
+ output_index: msgOutputIndex,
135
+ content_index: 0,
136
+ part: {
137
+ type: "output_text",
138
+ text: ""
139
+ }
140
+ });
141
+ for (let i = 0; i < content.length; i += chunkSize) {
142
+ const slice = content.slice(i, i + chunkSize);
143
+ events.push({
144
+ type: "response.output_text.delta",
145
+ item_id: msgId,
146
+ output_index: msgOutputIndex,
147
+ content_index: 0,
148
+ delta: slice
149
+ });
150
+ }
151
+ events.push({
152
+ type: "response.output_text.done",
153
+ output_index: msgOutputIndex,
154
+ content_index: 0,
155
+ text: content
156
+ });
157
+ events.push({
158
+ type: "response.content_part.done",
159
+ output_index: msgOutputIndex,
160
+ content_index: 0,
161
+ part: {
162
+ type: "output_text",
163
+ text: content
164
+ }
165
+ });
166
+ const msgItem = {
167
+ type: "message",
168
+ id: msgId,
169
+ status: "completed",
170
+ role: "assistant",
171
+ content: [{
172
+ type: "output_text",
173
+ text: content
174
+ }]
175
+ };
176
+ events.push({
177
+ type: "response.output_item.done",
178
+ output_index: msgOutputIndex,
179
+ item: msgItem
180
+ });
181
+ events.push({
182
+ type: "response.completed",
183
+ response: {
184
+ id: respId,
185
+ object: "response",
186
+ created_at: created,
187
+ model,
188
+ status: "completed",
189
+ output: [...prefixOutputItems, msgItem],
190
+ usage: {
191
+ input_tokens: 0,
192
+ output_tokens: 0,
193
+ total_tokens: 0
194
+ }
195
+ }
196
+ });
197
+ return events;
198
+ }
199
+ function buildToolCallStreamEvents(toolCalls, model, chunkSize) {
200
+ const respId = responseId();
201
+ const created = Math.floor(Date.now() / 1e3);
202
+ const events = [];
203
+ events.push({
204
+ type: "response.created",
205
+ response: {
206
+ id: respId,
207
+ object: "response",
208
+ created_at: created,
209
+ model,
210
+ status: "in_progress",
211
+ output: []
212
+ }
213
+ });
214
+ events.push({
215
+ type: "response.in_progress",
216
+ response: {
217
+ id: respId,
218
+ object: "response",
219
+ created_at: created,
220
+ model,
221
+ status: "in_progress",
222
+ output: []
223
+ }
224
+ });
225
+ const outputItems = [];
226
+ for (let idx = 0; idx < toolCalls.length; idx++) {
227
+ const tc = toolCalls[idx];
228
+ const callId = tc.id || require_helpers.generateToolCallId();
229
+ const fcId = require_helpers.generateId("fc");
230
+ events.push({
231
+ type: "response.output_item.added",
232
+ output_index: idx,
233
+ item: {
234
+ type: "function_call",
235
+ id: fcId,
236
+ call_id: callId,
237
+ name: tc.name,
238
+ arguments: "",
239
+ status: "in_progress"
240
+ }
241
+ });
242
+ const args = tc.arguments;
243
+ for (let i = 0; i < args.length; i += chunkSize) {
244
+ const slice = args.slice(i, i + chunkSize);
245
+ events.push({
246
+ type: "response.function_call_arguments.delta",
247
+ item_id: fcId,
248
+ output_index: idx,
249
+ delta: slice
250
+ });
251
+ }
252
+ events.push({
253
+ type: "response.function_call_arguments.done",
254
+ output_index: idx,
255
+ arguments: args
256
+ });
257
+ const doneItem = {
258
+ type: "function_call",
259
+ id: fcId,
260
+ call_id: callId,
261
+ name: tc.name,
262
+ arguments: args,
263
+ status: "completed"
264
+ };
265
+ events.push({
266
+ type: "response.output_item.done",
267
+ output_index: idx,
268
+ item: doneItem
269
+ });
270
+ outputItems.push(doneItem);
271
+ }
272
+ events.push({
273
+ type: "response.completed",
274
+ response: {
275
+ id: respId,
276
+ object: "response",
277
+ created_at: created,
278
+ model,
279
+ status: "completed",
280
+ output: outputItems,
281
+ usage: {
282
+ input_tokens: 0,
283
+ output_tokens: 0,
284
+ total_tokens: 0
285
+ }
286
+ }
287
+ });
288
+ return events;
289
+ }
290
+ function buildReasoningStreamEvents(reasoning, model, chunkSize) {
291
+ const reasoningId = require_helpers.generateId("rs");
292
+ const events = [];
293
+ events.push({
294
+ type: "response.output_item.added",
295
+ output_index: 0,
296
+ item: {
297
+ type: "reasoning",
298
+ id: reasoningId,
299
+ summary: []
300
+ }
301
+ });
302
+ events.push({
303
+ type: "response.reasoning_summary_part.added",
304
+ output_index: 0,
305
+ summary_index: 0,
306
+ part: {
307
+ type: "summary_text",
308
+ text: ""
309
+ }
310
+ });
311
+ for (let i = 0; i < reasoning.length; i += chunkSize) {
312
+ const slice = reasoning.slice(i, i + chunkSize);
313
+ events.push({
314
+ type: "response.reasoning_summary_text.delta",
315
+ item_id: reasoningId,
316
+ output_index: 0,
317
+ summary_index: 0,
318
+ delta: slice
319
+ });
320
+ }
321
+ events.push({
322
+ type: "response.reasoning_summary_text.done",
323
+ output_index: 0,
324
+ summary_index: 0,
325
+ text: reasoning
326
+ });
327
+ events.push({
328
+ type: "response.reasoning_summary_part.done",
329
+ output_index: 0,
330
+ summary_index: 0,
331
+ part: {
332
+ type: "summary_text",
333
+ text: reasoning
334
+ }
335
+ });
336
+ events.push({
337
+ type: "response.output_item.done",
338
+ output_index: 0,
339
+ item: {
340
+ type: "reasoning",
341
+ id: reasoningId,
342
+ summary: [{
343
+ type: "summary_text",
344
+ text: reasoning
345
+ }]
346
+ }
347
+ });
348
+ return events;
349
+ }
350
+ function buildWebSearchStreamEvents(queries, startOutputIndex) {
351
+ const events = [];
352
+ for (let i = 0; i < queries.length; i++) {
353
+ const searchId = require_helpers.generateId("ws");
354
+ const outputIndex = startOutputIndex + i;
355
+ events.push({
356
+ type: "response.output_item.added",
357
+ output_index: outputIndex,
358
+ item: {
359
+ type: "web_search_call",
360
+ id: searchId,
361
+ status: "in_progress",
362
+ query: queries[i]
363
+ }
364
+ });
365
+ events.push({
366
+ type: "response.output_item.done",
367
+ output_index: outputIndex,
368
+ item: {
369
+ type: "web_search_call",
370
+ id: searchId,
371
+ status: "completed",
372
+ query: queries[i]
373
+ }
374
+ });
375
+ }
376
+ return events;
377
+ }
378
+ function buildTextResponse(content, model, reasoning, webSearches) {
379
+ const respId = responseId();
380
+ const msgId = itemId();
381
+ const output = [];
382
+ if (reasoning) output.push({
383
+ type: "reasoning",
384
+ id: require_helpers.generateId("rs"),
385
+ summary: [{
386
+ type: "summary_text",
387
+ text: reasoning
388
+ }]
389
+ });
390
+ if (webSearches && webSearches.length > 0) for (const query of webSearches) output.push({
391
+ type: "web_search_call",
392
+ id: require_helpers.generateId("ws"),
393
+ status: "completed",
394
+ query
395
+ });
396
+ output.push({
397
+ type: "message",
398
+ id: msgId,
399
+ status: "completed",
400
+ role: "assistant",
401
+ content: [{
402
+ type: "output_text",
403
+ text: content
404
+ }]
405
+ });
406
+ return {
407
+ id: respId,
408
+ object: "response",
409
+ created_at: Math.floor(Date.now() / 1e3),
410
+ model,
411
+ status: "completed",
412
+ output,
413
+ usage: {
414
+ input_tokens: 0,
415
+ output_tokens: 0,
416
+ total_tokens: 0
417
+ }
418
+ };
419
+ }
420
+ function buildToolCallResponse(toolCalls, model) {
421
+ return {
422
+ id: responseId(),
423
+ object: "response",
424
+ created_at: Math.floor(Date.now() / 1e3),
425
+ model,
426
+ status: "completed",
427
+ output: toolCalls.map((tc) => ({
428
+ type: "function_call",
429
+ id: require_helpers.generateId("fc"),
430
+ call_id: tc.id || require_helpers.generateToolCallId(),
431
+ name: tc.name,
432
+ arguments: tc.arguments,
433
+ status: "completed"
434
+ })),
435
+ usage: {
436
+ input_tokens: 0,
437
+ output_tokens: 0,
438
+ total_tokens: 0
439
+ }
440
+ };
441
+ }
442
+ async function writeResponsesSSEStream(res, events, optionsOrLatency) {
443
+ const opts = typeof optionsOrLatency === "number" ? { latency: optionsOrLatency } : optionsOrLatency ?? {};
444
+ const latency = opts.latency ?? 0;
445
+ const profile = opts.streamingProfile;
446
+ const signal = opts.signal;
447
+ const onChunkSent = opts.onChunkSent;
448
+ if (res.writableEnded) return true;
449
+ res.setHeader("Content-Type", "text/event-stream");
450
+ res.setHeader("Cache-Control", "no-cache");
451
+ res.setHeader("Connection", "keep-alive");
452
+ let chunkIndex = 0;
453
+ for (const event of events) {
454
+ const chunkDelay = require_sse_writer.calculateDelay(chunkIndex, profile, latency);
455
+ if (chunkDelay > 0) await require_sse_writer.delay(chunkDelay, signal);
456
+ if (signal?.aborted) return false;
457
+ if (res.writableEnded) return true;
458
+ res.write(`event: ${event.type}\ndata: ${JSON.stringify(event)}\n\n`);
459
+ onChunkSent?.();
460
+ if (signal?.aborted) return false;
461
+ chunkIndex++;
462
+ }
463
+ if (!res.writableEnded) res.end();
464
+ return true;
465
+ }
466
+ async function handleResponses(req, res, raw, fixtures, journal, defaults, setCorsHeaders) {
467
+ setCorsHeaders(res);
468
+ let responsesReq;
469
+ try {
470
+ responsesReq = JSON.parse(raw);
471
+ } catch {
472
+ journal.add({
473
+ method: req.method ?? "POST",
474
+ path: req.url ?? "/v1/responses",
475
+ headers: require_helpers.flattenHeaders(req.headers),
476
+ body: null,
477
+ response: {
478
+ status: 400,
479
+ fixture: null
480
+ }
481
+ });
482
+ require_sse_writer.writeErrorResponse(res, 400, JSON.stringify({ error: {
483
+ message: "Malformed JSON",
484
+ type: "invalid_request_error",
485
+ code: "invalid_json"
486
+ } }));
487
+ return;
488
+ }
489
+ const completionReq = responsesToCompletionRequest(responsesReq);
490
+ const fixture = require_router.matchFixture(fixtures, completionReq, journal.fixtureMatchCounts);
491
+ if (fixture) journal.incrementFixtureMatchCount(fixture, fixtures);
492
+ if (require_chaos.applyChaos(res, fixture, defaults.chaos, req.headers, journal, {
493
+ method: req.method ?? "POST",
494
+ path: req.url ?? "/v1/responses",
495
+ headers: require_helpers.flattenHeaders(req.headers),
496
+ body: completionReq
497
+ }, defaults.registry, defaults.logger)) return;
498
+ if (!fixture) {
499
+ if (defaults.record) {
500
+ if (await require_recorder.proxyAndRecord(req, res, completionReq, "openai", req.url ?? "/v1/responses", fixtures, defaults, raw)) {
501
+ journal.add({
502
+ method: req.method ?? "POST",
503
+ path: req.url ?? "/v1/responses",
504
+ headers: require_helpers.flattenHeaders(req.headers),
505
+ body: completionReq,
506
+ response: {
507
+ status: res.statusCode ?? 200,
508
+ fixture: null
509
+ }
510
+ });
511
+ return;
512
+ }
513
+ }
514
+ const strictStatus = defaults.strict ? 503 : 404;
515
+ const strictMessage = defaults.strict ? "Strict mode: no fixture matched" : "No fixture matched";
516
+ if (defaults.strict) defaults.logger.error(`STRICT: No fixture matched for ${req.method ?? "POST"} ${req.url ?? "/v1/responses"}`);
517
+ journal.add({
518
+ method: req.method ?? "POST",
519
+ path: req.url ?? "/v1/responses",
520
+ headers: require_helpers.flattenHeaders(req.headers),
521
+ body: completionReq,
522
+ response: {
523
+ status: strictStatus,
524
+ fixture: null
525
+ }
526
+ });
527
+ require_sse_writer.writeErrorResponse(res, strictStatus, JSON.stringify({ error: {
528
+ message: strictMessage,
529
+ type: "invalid_request_error",
530
+ code: "no_fixture_match"
531
+ } }));
532
+ return;
533
+ }
534
+ const response = fixture.response;
535
+ const latency = fixture.latency ?? defaults.latency;
536
+ const chunkSize = Math.max(1, fixture.chunkSize ?? defaults.chunkSize);
537
+ if (require_helpers.isErrorResponse(response)) {
538
+ const status = response.status ?? 500;
539
+ journal.add({
540
+ method: req.method ?? "POST",
541
+ path: req.url ?? "/v1/responses",
542
+ headers: require_helpers.flattenHeaders(req.headers),
543
+ body: completionReq,
544
+ response: {
545
+ status,
546
+ fixture
547
+ }
548
+ });
549
+ require_sse_writer.writeErrorResponse(res, status, JSON.stringify(response));
550
+ return;
551
+ }
552
+ if (require_helpers.isTextResponse(response)) {
553
+ const journalEntry = journal.add({
554
+ method: req.method ?? "POST",
555
+ path: req.url ?? "/v1/responses",
556
+ headers: require_helpers.flattenHeaders(req.headers),
557
+ body: completionReq,
558
+ response: {
559
+ status: 200,
560
+ fixture
561
+ }
562
+ });
563
+ if (responsesReq.stream !== true) {
564
+ const body = buildTextResponse(response.content, completionReq.model, response.reasoning, response.webSearches);
565
+ res.writeHead(200, { "Content-Type": "application/json" });
566
+ res.end(JSON.stringify(body));
567
+ } else {
568
+ const events = buildTextStreamEvents(response.content, completionReq.model, chunkSize, response.reasoning, response.webSearches);
569
+ const interruption = require_interruption.createInterruptionSignal(fixture);
570
+ if (!await writeResponsesSSEStream(res, events, {
571
+ latency,
572
+ streamingProfile: fixture.streamingProfile,
573
+ signal: interruption?.signal,
574
+ onChunkSent: interruption?.tick
575
+ })) {
576
+ if (!res.writableEnded) res.destroy();
577
+ journalEntry.response.interrupted = true;
578
+ journalEntry.response.interruptReason = interruption?.reason();
579
+ }
580
+ interruption?.cleanup();
581
+ }
582
+ return;
583
+ }
584
+ if (require_helpers.isToolCallResponse(response)) {
585
+ const journalEntry = journal.add({
586
+ method: req.method ?? "POST",
587
+ path: req.url ?? "/v1/responses",
588
+ headers: require_helpers.flattenHeaders(req.headers),
589
+ body: completionReq,
590
+ response: {
591
+ status: 200,
592
+ fixture
593
+ }
594
+ });
595
+ if (responsesReq.stream !== true) {
596
+ const body = buildToolCallResponse(response.toolCalls, completionReq.model);
597
+ res.writeHead(200, { "Content-Type": "application/json" });
598
+ res.end(JSON.stringify(body));
599
+ } else {
600
+ const events = buildToolCallStreamEvents(response.toolCalls, completionReq.model, chunkSize);
601
+ const interruption = require_interruption.createInterruptionSignal(fixture);
602
+ if (!await writeResponsesSSEStream(res, events, {
603
+ latency,
604
+ streamingProfile: fixture.streamingProfile,
605
+ signal: interruption?.signal,
606
+ onChunkSent: interruption?.tick
607
+ })) {
608
+ if (!res.writableEnded) res.destroy();
609
+ journalEntry.response.interrupted = true;
610
+ journalEntry.response.interruptReason = interruption?.reason();
611
+ }
612
+ interruption?.cleanup();
613
+ }
614
+ return;
615
+ }
616
+ journal.add({
617
+ method: req.method ?? "POST",
618
+ path: req.url ?? "/v1/responses",
619
+ headers: require_helpers.flattenHeaders(req.headers),
620
+ body: completionReq,
621
+ response: {
622
+ status: 500,
623
+ fixture
624
+ }
625
+ });
626
+ require_sse_writer.writeErrorResponse(res, 500, JSON.stringify({ error: {
627
+ message: "Fixture response did not match any known type",
628
+ type: "server_error"
629
+ } }));
630
+ }
631
+
632
+ //#endregion
633
+ exports.buildTextStreamEvents = buildTextStreamEvents;
634
+ exports.buildToolCallStreamEvents = buildToolCallStreamEvents;
635
+ exports.handleResponses = handleResponses;
636
+ exports.responsesToCompletionRequest = responsesToCompletionRequest;
637
+ //# sourceMappingURL=responses.cjs.map