@copilotkit/aimock 1.16.4 → 1.18.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 (326) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/CHANGELOG.md +35 -0
  4. package/README.md +10 -10
  5. package/dist/a2a-mock.d.cts +2 -2
  6. package/dist/a2a-mock.d.cts.map +1 -1
  7. package/dist/a2a-mock.d.ts +2 -2
  8. package/dist/a2a-mock.d.ts.map +1 -1
  9. package/dist/a2a-mock.js +2 -2
  10. package/dist/a2a-mock.js.map +1 -1
  11. package/dist/agui-handler.cjs +120 -5
  12. package/dist/agui-handler.cjs.map +1 -1
  13. package/dist/agui-handler.d.cts +41 -5
  14. package/dist/agui-handler.d.cts.map +1 -1
  15. package/dist/agui-handler.d.ts +41 -5
  16. package/dist/agui-handler.d.ts.map +1 -1
  17. package/dist/agui-handler.js +114 -6
  18. package/dist/agui-handler.js.map +1 -1
  19. package/dist/agui-mock.cjs +18 -7
  20. package/dist/agui-mock.cjs.map +1 -1
  21. package/dist/agui-mock.d.cts +2 -2
  22. package/dist/agui-mock.d.cts.map +1 -1
  23. package/dist/agui-mock.d.ts +2 -2
  24. package/dist/agui-mock.d.ts.map +1 -1
  25. package/dist/agui-mock.js +20 -9
  26. package/dist/agui-mock.js.map +1 -1
  27. package/dist/agui-recorder.cjs +43 -22
  28. package/dist/agui-recorder.cjs.map +1 -1
  29. package/dist/agui-recorder.d.cts +4 -3
  30. package/dist/agui-recorder.d.cts.map +1 -1
  31. package/dist/agui-recorder.d.ts +4 -3
  32. package/dist/agui-recorder.d.ts.map +1 -1
  33. package/dist/agui-recorder.js +45 -24
  34. package/dist/agui-recorder.js.map +1 -1
  35. package/dist/agui-stub.cjs +28 -0
  36. package/dist/agui-stub.d.cts +5 -0
  37. package/dist/agui-stub.d.ts +5 -0
  38. package/dist/agui-stub.js +5 -0
  39. package/dist/agui-types.d.cts +33 -6
  40. package/dist/agui-types.d.cts.map +1 -1
  41. package/dist/agui-types.d.ts +33 -6
  42. package/dist/agui-types.d.ts.map +1 -1
  43. package/dist/aimock-cli.cjs +1 -1
  44. package/dist/aimock-cli.js +1 -1
  45. package/dist/aws-event-stream.d.cts +2 -2
  46. package/dist/aws-event-stream.d.cts.map +1 -1
  47. package/dist/aws-event-stream.d.ts +2 -2
  48. package/dist/aws-event-stream.d.ts.map +1 -1
  49. package/dist/bedrock-converse.cjs +4 -4
  50. package/dist/bedrock-converse.cjs.map +1 -1
  51. package/dist/bedrock-converse.d.cts +3 -3
  52. package/dist/bedrock-converse.d.cts.map +1 -1
  53. package/dist/bedrock-converse.d.ts +3 -3
  54. package/dist/bedrock-converse.d.ts.map +1 -1
  55. package/dist/bedrock-converse.js +4 -4
  56. package/dist/bedrock-converse.js.map +1 -1
  57. package/dist/bedrock.cjs +4 -4
  58. package/dist/bedrock.cjs.map +1 -1
  59. package/dist/bedrock.d.cts +3 -3
  60. package/dist/bedrock.d.cts.map +1 -1
  61. package/dist/bedrock.d.ts +3 -3
  62. package/dist/bedrock.d.ts.map +1 -1
  63. package/dist/bedrock.js +4 -4
  64. package/dist/bedrock.js.map +1 -1
  65. package/dist/chaos.cjs +35 -9
  66. package/dist/chaos.cjs.map +1 -1
  67. package/dist/chaos.d.cts +19 -4
  68. package/dist/chaos.d.cts.map +1 -1
  69. package/dist/chaos.d.ts +19 -4
  70. package/dist/chaos.d.ts.map +1 -1
  71. package/dist/chaos.js +35 -10
  72. package/dist/chaos.js.map +1 -1
  73. package/dist/cli.cjs +6 -5
  74. package/dist/cli.cjs.map +1 -1
  75. package/dist/cli.js +6 -5
  76. package/dist/cli.js.map +1 -1
  77. package/dist/cohere.cjs +2 -2
  78. package/dist/cohere.cjs.map +1 -1
  79. package/dist/cohere.d.cts +2 -2
  80. package/dist/cohere.d.cts.map +1 -1
  81. package/dist/cohere.d.ts +2 -2
  82. package/dist/cohere.d.ts.map +1 -1
  83. package/dist/cohere.js +2 -2
  84. package/dist/cohere.js.map +1 -1
  85. package/dist/config-loader.cjs +3 -3
  86. package/dist/config-loader.d.cts +1 -1
  87. package/dist/config-loader.d.cts.map +1 -1
  88. package/dist/config-loader.d.ts +1 -1
  89. package/dist/config-loader.d.ts.map +1 -1
  90. package/dist/config-loader.js +2 -2
  91. package/dist/convert-vidaimock.cjs +1 -1
  92. package/dist/convert-vidaimock.js +1 -1
  93. package/dist/convert.cjs +1 -1
  94. package/dist/convert.js +1 -1
  95. package/dist/elevenlabs-audio.cjs +212 -0
  96. package/dist/elevenlabs-audio.cjs.map +1 -0
  97. package/dist/elevenlabs-audio.d.cts +11 -0
  98. package/dist/elevenlabs-audio.d.cts.map +1 -0
  99. package/dist/elevenlabs-audio.d.ts +11 -0
  100. package/dist/elevenlabs-audio.d.ts.map +1 -0
  101. package/dist/elevenlabs-audio.js +212 -0
  102. package/dist/elevenlabs-audio.js.map +1 -0
  103. package/dist/embeddings.cjs +2 -2
  104. package/dist/embeddings.cjs.map +1 -1
  105. package/dist/embeddings.d.cts +2 -2
  106. package/dist/embeddings.d.cts.map +1 -1
  107. package/dist/embeddings.d.ts +2 -2
  108. package/dist/embeddings.d.ts.map +1 -1
  109. package/dist/embeddings.js +2 -2
  110. package/dist/embeddings.js.map +1 -1
  111. package/dist/fal-audio.cjs +484 -0
  112. package/dist/fal-audio.cjs.map +1 -0
  113. package/dist/fal-audio.d.cts +10 -0
  114. package/dist/fal-audio.d.cts.map +1 -0
  115. package/dist/fal-audio.d.ts +10 -0
  116. package/dist/fal-audio.d.ts.map +1 -0
  117. package/dist/fal-audio.js +480 -0
  118. package/dist/fal-audio.js.map +1 -0
  119. package/dist/fal.cjs +424 -0
  120. package/dist/fal.cjs.map +1 -0
  121. package/dist/fal.d.cts +39 -0
  122. package/dist/fal.d.cts.map +1 -0
  123. package/dist/fal.d.ts +39 -0
  124. package/dist/fal.d.ts.map +1 -0
  125. package/dist/fal.js +420 -0
  126. package/dist/fal.js.map +1 -0
  127. package/dist/fixture-loader.cjs +16 -3
  128. package/dist/fixture-loader.cjs.map +1 -1
  129. package/dist/fixture-loader.d.cts.map +1 -1
  130. package/dist/fixture-loader.d.ts.map +1 -1
  131. package/dist/fixture-loader.js +17 -4
  132. package/dist/fixture-loader.js.map +1 -1
  133. package/dist/fixtures-remote.cjs +1 -1
  134. package/dist/fixtures-remote.js +1 -1
  135. package/dist/gemini-interactions.cjs +619 -0
  136. package/dist/gemini-interactions.cjs.map +1 -0
  137. package/dist/gemini-interactions.d.cts +46 -0
  138. package/dist/gemini-interactions.d.cts.map +1 -0
  139. package/dist/gemini-interactions.d.ts +46 -0
  140. package/dist/gemini-interactions.d.ts.map +1 -0
  141. package/dist/gemini-interactions.js +618 -0
  142. package/dist/gemini-interactions.js.map +1 -0
  143. package/dist/gemini.cjs +78 -2
  144. package/dist/gemini.cjs.map +1 -1
  145. package/dist/gemini.d.cts +2 -2
  146. package/dist/gemini.d.cts.map +1 -1
  147. package/dist/gemini.d.ts +2 -2
  148. package/dist/gemini.d.ts.map +1 -1
  149. package/dist/gemini.js +79 -3
  150. package/dist/gemini.js.map +1 -1
  151. package/dist/helpers.cjs +28 -1
  152. package/dist/helpers.cjs.map +1 -1
  153. package/dist/helpers.d.cts +13 -3
  154. package/dist/helpers.d.cts.map +1 -1
  155. package/dist/helpers.d.ts +13 -3
  156. package/dist/helpers.d.ts.map +1 -1
  157. package/dist/helpers.js +26 -2
  158. package/dist/helpers.js.map +1 -1
  159. package/dist/images.cjs +2 -2
  160. package/dist/images.cjs.map +1 -1
  161. package/dist/images.d.cts +2 -2
  162. package/dist/images.d.cts.map +1 -1
  163. package/dist/images.d.ts +2 -2
  164. package/dist/images.d.ts.map +1 -1
  165. package/dist/images.js +2 -2
  166. package/dist/images.js.map +1 -1
  167. package/dist/index.cjs +24 -4
  168. package/dist/index.d.cts +12 -8
  169. package/dist/index.d.ts +12 -8
  170. package/dist/index.js +11 -7
  171. package/dist/jest.cjs +1 -1
  172. package/dist/jest.js +1 -1
  173. package/dist/jsonrpc.d.cts +3 -3
  174. package/dist/jsonrpc.d.cts.map +1 -1
  175. package/dist/jsonrpc.d.ts +3 -3
  176. package/dist/jsonrpc.d.ts.map +1 -1
  177. package/dist/llmock.cjs +53 -2
  178. package/dist/llmock.cjs.map +1 -1
  179. package/dist/llmock.d.cts +6 -0
  180. package/dist/llmock.d.cts.map +1 -1
  181. package/dist/llmock.d.ts +6 -0
  182. package/dist/llmock.d.ts.map +1 -1
  183. package/dist/llmock.js +53 -2
  184. package/dist/llmock.js.map +1 -1
  185. package/dist/logger.cjs +5 -4
  186. package/dist/logger.cjs.map +1 -1
  187. package/dist/logger.d.cts +1 -1
  188. package/dist/logger.d.cts.map +1 -1
  189. package/dist/logger.d.ts +1 -1
  190. package/dist/logger.d.ts.map +1 -1
  191. package/dist/logger.js +5 -4
  192. package/dist/logger.js.map +1 -1
  193. package/dist/mcp-mock.d.cts +2 -2
  194. package/dist/mcp-mock.d.cts.map +1 -1
  195. package/dist/mcp-mock.d.ts +2 -2
  196. package/dist/mcp-mock.d.ts.map +1 -1
  197. package/dist/mcp-mock.js +2 -2
  198. package/dist/mcp-mock.js.map +1 -1
  199. package/dist/messages.cjs +2 -2
  200. package/dist/messages.cjs.map +1 -1
  201. package/dist/messages.d.cts +2 -2
  202. package/dist/messages.d.cts.map +1 -1
  203. package/dist/messages.d.ts +2 -2
  204. package/dist/messages.d.ts.map +1 -1
  205. package/dist/messages.js +2 -2
  206. package/dist/messages.js.map +1 -1
  207. package/dist/moderation.d.cts +3 -3
  208. package/dist/moderation.d.cts.map +1 -1
  209. package/dist/moderation.d.ts +3 -3
  210. package/dist/moderation.d.ts.map +1 -1
  211. package/dist/ndjson-writer.d.cts +2 -2
  212. package/dist/ndjson-writer.d.cts.map +1 -1
  213. package/dist/ndjson-writer.d.ts +2 -2
  214. package/dist/ndjson-writer.d.ts.map +1 -1
  215. package/dist/ollama.cjs +4 -4
  216. package/dist/ollama.cjs.map +1 -1
  217. package/dist/ollama.d.cts +3 -3
  218. package/dist/ollama.d.cts.map +1 -1
  219. package/dist/ollama.d.ts +3 -3
  220. package/dist/ollama.d.ts.map +1 -1
  221. package/dist/ollama.js +4 -4
  222. package/dist/ollama.js.map +1 -1
  223. package/dist/recorder.cjs +106 -38
  224. package/dist/recorder.cjs.map +1 -1
  225. package/dist/recorder.d.cts +52 -7
  226. package/dist/recorder.d.cts.map +1 -1
  227. package/dist/recorder.d.ts +52 -7
  228. package/dist/recorder.d.ts.map +1 -1
  229. package/dist/recorder.js +108 -40
  230. package/dist/recorder.js.map +1 -1
  231. package/dist/rerank.d.cts +3 -3
  232. package/dist/rerank.d.cts.map +1 -1
  233. package/dist/rerank.d.ts +3 -3
  234. package/dist/rerank.d.ts.map +1 -1
  235. package/dist/responses.cjs +2 -2
  236. package/dist/responses.cjs.map +1 -1
  237. package/dist/responses.d.cts +2 -2
  238. package/dist/responses.d.cts.map +1 -1
  239. package/dist/responses.d.ts +2 -2
  240. package/dist/responses.d.ts.map +1 -1
  241. package/dist/responses.js +2 -2
  242. package/dist/responses.js.map +1 -1
  243. package/dist/router.cjs +1 -1
  244. package/dist/router.cjs.map +1 -1
  245. package/dist/router.d.cts.map +1 -1
  246. package/dist/router.d.ts.map +1 -1
  247. package/dist/router.js +2 -2
  248. package/dist/router.js.map +1 -1
  249. package/dist/search.d.cts +3 -3
  250. package/dist/search.d.cts.map +1 -1
  251. package/dist/search.d.ts +3 -3
  252. package/dist/search.d.ts.map +1 -1
  253. package/dist/server.cjs +253 -8
  254. package/dist/server.cjs.map +1 -1
  255. package/dist/server.d.cts +2 -2
  256. package/dist/server.d.cts.map +1 -1
  257. package/dist/server.d.ts +2 -2
  258. package/dist/server.d.ts.map +1 -1
  259. package/dist/server.js +257 -12
  260. package/dist/server.js.map +1 -1
  261. package/dist/speech.cjs +20 -11
  262. package/dist/speech.cjs.map +1 -1
  263. package/dist/speech.d.cts +2 -2
  264. package/dist/speech.d.cts.map +1 -1
  265. package/dist/speech.d.ts +2 -2
  266. package/dist/speech.d.ts.map +1 -1
  267. package/dist/speech.js +20 -11
  268. package/dist/speech.js.map +1 -1
  269. package/dist/sse-writer.d.cts +3 -3
  270. package/dist/sse-writer.d.cts.map +1 -1
  271. package/dist/sse-writer.d.ts +3 -3
  272. package/dist/sse-writer.d.ts.map +1 -1
  273. package/dist/stream-collapse.cjs +80 -9
  274. package/dist/stream-collapse.cjs.map +1 -1
  275. package/dist/stream-collapse.d.cts +11 -1
  276. package/dist/stream-collapse.d.cts.map +1 -1
  277. package/dist/stream-collapse.d.ts +11 -1
  278. package/dist/stream-collapse.d.ts.map +1 -1
  279. package/dist/stream-collapse.js +80 -10
  280. package/dist/stream-collapse.js.map +1 -1
  281. package/dist/suite.cjs +1 -1
  282. package/dist/suite.d.cts +2 -2
  283. package/dist/suite.d.ts +2 -2
  284. package/dist/suite.js +1 -1
  285. package/dist/transcription.cjs +2 -2
  286. package/dist/transcription.cjs.map +1 -1
  287. package/dist/transcription.d.cts +2 -2
  288. package/dist/transcription.d.cts.map +1 -1
  289. package/dist/transcription.d.ts +2 -2
  290. package/dist/transcription.d.ts.map +1 -1
  291. package/dist/transcription.js +2 -2
  292. package/dist/transcription.js.map +1 -1
  293. package/dist/types.d.cts +38 -11
  294. package/dist/types.d.cts.map +1 -1
  295. package/dist/types.d.ts +38 -11
  296. package/dist/types.d.ts.map +1 -1
  297. package/dist/vector-mock.d.cts +2 -2
  298. package/dist/vector-mock.d.cts.map +1 -1
  299. package/dist/vector-mock.d.ts +2 -2
  300. package/dist/vector-mock.d.ts.map +1 -1
  301. package/dist/vector-mock.js +2 -2
  302. package/dist/vector-mock.js.map +1 -1
  303. package/dist/vector-types.d.cts.map +1 -1
  304. package/dist/vector-types.d.ts.map +1 -1
  305. package/dist/video.cjs +9 -3
  306. package/dist/video.cjs.map +1 -1
  307. package/dist/video.d.cts +3 -3
  308. package/dist/video.d.cts.map +1 -1
  309. package/dist/video.d.ts +3 -3
  310. package/dist/video.d.ts.map +1 -1
  311. package/dist/video.js +9 -3
  312. package/dist/video.js.map +1 -1
  313. package/dist/vitest.cjs +1 -1
  314. package/dist/vitest.js +1 -1
  315. package/dist/ws-framing.d.cts +2 -2
  316. package/dist/ws-framing.d.cts.map +1 -1
  317. package/dist/ws-framing.d.ts +2 -2
  318. package/dist/ws-framing.d.ts.map +1 -1
  319. package/dist/ws-gemini-live.cjs +145 -2
  320. package/dist/ws-gemini-live.cjs.map +1 -1
  321. package/dist/ws-gemini-live.d.cts.map +1 -1
  322. package/dist/ws-gemini-live.d.ts.map +1 -1
  323. package/dist/ws-gemini-live.js +146 -3
  324. package/dist/ws-gemini-live.js.map +1 -1
  325. package/package.json +16 -2
  326. package/skills/write-fixtures/SKILL.md +10 -10
package/dist/index.d.ts CHANGED
@@ -1,15 +1,18 @@
1
1
  import { DEFAULT_TEST_ID, Journal } from "./journal.js";
2
2
  import { LogLevel, Logger } from "./logger.js";
3
3
  import { MetricsRegistry, createMetricsRegistry, normalizePathLabel } from "./metrics.js";
4
- import { AudioResponse, ChaosAction, ChaosConfig, ChatCompletion, ChatCompletionChoice, ChatCompletionMessage, ChatCompletionRequest, ChatMessage, ContentPart, ContentWithToolCallsResponse, EmbeddingFixtureOpts, EmbeddingResponse, ErrorResponse, Fixture, FixtureFile, FixtureFileContentWithToolCallsResponse, FixtureFileEntry, FixtureFileResponse, FixtureFileTextResponse, FixtureFileToolCall, FixtureFileToolCallResponse, FixtureMatch, FixtureOpts, FixtureResponse, ImageItem, ImageResponse, JournalEntry, MockServerOptions, Mountable, RecordConfig, RecordProviderKey, ResponseOverrides, SSEChoice, SSEChunk, SSEDelta, SSEToolCallDelta, StreamingProfile, TextResponse, ToolCall, ToolCallMessage, ToolCallResponse, ToolDefinition, TranscriptionResponse, VideoResponse } from "./types.js";
4
+ import { AudioResponse, ChaosAction, ChaosConfig, ChatCompletion, ChatCompletionChoice, ChatCompletionMessage, ChatCompletionRequest, ChatMessage, ContentPart, ContentWithToolCallsResponse, EmbeddingFixtureOpts, EmbeddingResponse, ErrorResponse, Fixture, FixtureFile, FixtureFileContentWithToolCallsResponse, FixtureFileEntry, FixtureFileResponse, FixtureFileTextResponse, FixtureFileToolCall, FixtureFileToolCallResponse, FixtureMatch, FixtureOpts, FixtureResponse, ImageItem, ImageResponse, JournalEntry, MockServerOptions, Mountable, RawJSONResponse, RecordConfig, RecordProviderKey, ResponseOverrides, SSEChoice, SSEChunk, SSEDelta, SSEToolCallDelta, StreamingProfile, TextResponse, ToolCall, ToolCallMessage, ToolCallResponse, ToolDefinition, TranscriptionResponse, VideoResponse } from "./types.js";
5
5
  import { A2AAgentDefinition, A2AArtifact, A2AMessage, A2AMockOptions, A2APart, A2ARole, A2AStreamEvent, A2ATask, A2ATaskResponse, A2ATaskState } from "./a2a-types.js";
6
6
  import { A2AMock } from "./a2a-mock.js";
7
+ import { AGUIActivityDeltaEvent, AGUIActivitySnapshotEvent, AGUIBaseEvent, AGUICustomEvent, AGUIEvent, AGUIEventType, AGUIFixture, AGUIFixtureMatch, AGUIInterrupt, AGUIMessage, AGUIMessageRole, AGUIMessagesSnapshotEvent, AGUIMockOptions, AGUIRawEvent, AGUIReasoningEncryptedValueEvent, AGUIReasoningEncryptedValueSubtype, AGUIReasoningEndEvent, AGUIReasoningMessageChunkEvent, AGUIReasoningMessageContentEvent, AGUIReasoningMessageEndEvent, AGUIReasoningMessageStartEvent, AGUIReasoningStartEvent, AGUIRecordConfig, AGUIResumeEntry, AGUIRunAgentInput, AGUIRunErrorEvent, AGUIRunFinishedEvent, AGUIRunFinishedOutcome, AGUIRunStartedEvent, AGUIStateDeltaEvent, AGUIStateSnapshotEvent, AGUIStepFinishedEvent, AGUIStepStartedEvent, AGUITextMessageChunkEvent, AGUITextMessageContentEvent, AGUITextMessageEndEvent, AGUITextMessageRole, AGUITextMessageStartEvent, AGUIThinkingEndEvent, AGUIThinkingStartEvent, AGUIThinkingTextMessageContentEvent, AGUIThinkingTextMessageEndEvent, AGUIThinkingTextMessageStartEvent, AGUIToolCall, AGUIToolCallArgsEvent, AGUIToolCallChunkEvent, AGUIToolCallEndEvent, AGUIToolCallResultEvent, AGUIToolCallStartEvent, AGUIToolDefinition } from "./agui-types.js";
8
+ import { AGUIMock } from "./agui-mock.js";
9
+ import { AGUIBuildOpts, buildActivityDelta, buildActivityResponse, buildCompositeResponse, buildCustomEvent, buildErrorResponse, buildMessagesSnapshot, buildRawEvent, buildReasoningChunk, buildReasoningEncryptedValue, buildReasoningResponse, buildStateDelta, buildStateUpdate, buildStepWithText, buildTextChunkResponse, buildTextResponse, buildToolCallChunk, buildToolCallResponse, extractLastUserMessage, findFixture, matchesFixture, writeAGUIEventStream } from "./agui-handler.js";
10
+ import { proxyAndRecordAGUI } from "./agui-recorder.js";
7
11
  import { SearchFixture, SearchResult, handleSearch } from "./search.js";
8
12
  import { RerankFixture, RerankResult, handleRerank } from "./rerank.js";
9
13
  import { ModerationFixture, ModerationResult, handleModeration } from "./moderation.js";
10
14
  import { LLMock } from "./llmock.js";
11
15
  import { MCPContent, MCPMockOptions, MCPPromptDefinition, MCPPromptResult, MCPResourceContent, MCPResourceDefinition, MCPSession, MCPToolDefinition } from "./mcp-types.js";
12
- import { AGUIActivityDeltaEvent, AGUIActivitySnapshotEvent, AGUIEvent, AGUIEventType, AGUIFixture, AGUIFixtureMatch, AGUIMessage, AGUIMessagesSnapshotEvent, AGUIMockOptions, AGUIRecordConfig, AGUIRunAgentInput, AGUIRunErrorEvent, AGUIRunFinishedEvent, AGUIRunStartedEvent, AGUIStateDeltaEvent, AGUIStateSnapshotEvent, AGUITextMessageChunkEvent, AGUITextMessageContentEvent, AGUITextMessageEndEvent, AGUITextMessageStartEvent, AGUIToolCall, AGUIToolCallArgsEvent, AGUIToolCallEndEvent, AGUIToolCallResultEvent, AGUIToolCallStartEvent, AGUIToolDefinition } from "./agui-types.js";
13
16
  import { QueryHandler, QueryResult, VectorCollection, VectorEntry, VectorMockOptions, VectorQuery } from "./vector-types.js";
14
17
  import { AimockConfig, loadConfig, startFromConfig } from "./config-loader.js";
15
18
  import { VideoStateMap, handleVideoCreate, handleVideoStatus } from "./video.js";
@@ -22,6 +25,7 @@ import { handleGemini } from "./gemini.js";
22
25
  import { handleEmbeddings } from "./embeddings.js";
23
26
  import { bedrockToCompletionRequest, handleBedrock, handleBedrockStream } from "./bedrock.js";
24
27
  import { converseToCompletionRequest, handleConverse, handleConverseStream } from "./bedrock-converse.js";
28
+ import { geminiInteractionsToCompletionRequest, handleGeminiInteractions } from "./gemini-interactions.js";
25
29
  import { encodeEventStreamFrame, encodeEventStreamMessage, writeEventStream } from "./aws-event-stream.js";
26
30
  import { NDJSONStreamOptions, writeNDJSONStream } from "./ndjson-writer.js";
27
31
  import { handleOllama, handleOllamaGenerate, ollamaToCompletionRequest } from "./ollama.js";
@@ -33,18 +37,18 @@ import { handleWebSocketGeminiLive } from "./ws-gemini-live.js";
33
37
  import { handleImages } from "./images.js";
34
38
  import { handleSpeech } from "./speech.js";
35
39
  import { handleTranscription } from "./transcription.js";
36
- import { EmbeddingAPIResponse, buildContentWithToolCallsChunks, buildContentWithToolCallsCompletion, buildEmbeddingResponse, buildTextChunks, buildTextCompletion, buildToolCallChunks, buildToolCallCompletion, extractOverrides, flattenHeaders, generateDeterministicEmbedding, generateId, generateMessageId, generateToolCallId, generateToolUseId, isAudioResponse, isContentWithToolCallsResponse, isEmbeddingResponse, isErrorResponse, isImageResponse, isTextResponse, isToolCallResponse, isTranscriptionResponse, isVideoResponse } from "./helpers.js";
40
+ import { handleElevenLabsAudio } from "./elevenlabs-audio.js";
41
+ import { handleFalQueue } from "./fal-audio.js";
42
+ import { FalQueueStateMap, handleFal } from "./fal.js";
43
+ import { EmbeddingAPIResponse, FORMAT_TO_CONTENT_TYPE, buildContentWithToolCallsChunks, buildContentWithToolCallsCompletion, buildEmbeddingResponse, buildTextChunks, buildTextCompletion, buildToolCallChunks, buildToolCallCompletion, extractOverrides, flattenHeaders, formatToMime, generateDeterministicEmbedding, generateId, generateMessageId, generateToolCallId, generateToolUseId, isAudioResponse, isContentWithToolCallsResponse, isEmbeddingResponse, isErrorResponse, isImageResponse, isTextResponse, isToolCallResponse, isTranscriptionResponse, isVideoResponse } from "./helpers.js";
37
44
  import { InterruptionControl, createInterruptionSignal } from "./interruption.js";
38
45
  import { StreamOptions, calculateDelay, delay, writeErrorResponse, writeSSEStream } from "./sse-writer.js";
39
46
  import { applyChaos, evaluateChaos } from "./chaos.js";
40
47
  import { proxyAndRecord } from "./recorder.js";
41
48
  import { resolveUpstreamUrl } from "./url.js";
42
- import { CollapseResult, collapseAnthropicSSE, collapseBedrockEventStream, collapseCohereSSE, collapseGeminiSSE, collapseOllamaNDJSON, collapseOpenAISSE, collapseStreamingResponse } from "./stream-collapse.js";
49
+ import { CollapseResult, collapseAnthropicSSE, collapseBedrockEventStream, collapseCohereSSE, collapseGeminiInteractionsSSE, collapseGeminiSSE, collapseOllamaNDJSON, collapseOpenAISSE, collapseStreamingResponse } from "./stream-collapse.js";
43
50
  import { MCPMock } from "./mcp-mock.js";
44
51
  import { VectorMock } from "./vector-mock.js";
45
- import { AGUIMock } from "./agui-mock.js";
46
- import { proxyAndRecordAGUI } from "./agui-recorder.js";
47
- import { buildActivityResponse, buildCompositeResponse, buildErrorResponse, buildMessagesSnapshot, buildReasoningResponse, buildStateDelta, buildStateUpdate, buildStepWithText, buildTextChunkResponse, buildTextResponse, buildToolCallResponse, extractLastUserMessage, findFixture, writeAGUIEventStream } from "./agui-handler.js";
48
52
  import { JsonRpcDispatcherOptions, JsonRpcResponse, MethodHandler, createJsonRpcDispatcher } from "./jsonrpc.js";
49
53
  import { MockSuite, MockSuiteOptions, createMockSuite } from "./suite.js";
50
- export { type A2AAgentDefinition, type A2AArtifact, type A2AMessage, A2AMock, type A2AMockOptions, type A2APart, type A2ARole, type A2AStreamEvent, type A2ATask, type A2ATaskResponse, type A2ATaskState, type AGUIActivityDeltaEvent, type AGUIActivitySnapshotEvent, type AGUIEvent, type AGUIEventType, type AGUIFixture, type AGUIFixtureMatch, type AGUIMessage, type AGUIMessagesSnapshotEvent, AGUIMock, type AGUIMockOptions, type AGUIRecordConfig, type AGUIRunAgentInput, type AGUIRunErrorEvent, type AGUIRunFinishedEvent, type AGUIRunStartedEvent, type AGUIStateDeltaEvent, type AGUIStateSnapshotEvent, type AGUITextMessageChunkEvent, type AGUITextMessageContentEvent, type AGUITextMessageEndEvent, type AGUITextMessageStartEvent, type AGUIToolCall, type AGUIToolCallArgsEvent, type AGUIToolCallEndEvent, type AGUIToolCallResultEvent, type AGUIToolCallStartEvent, type AGUIToolDefinition, type AimockConfig, type AudioResponse, type ChaosAction, type ChaosConfig, type ChatCompletion, type ChatCompletionChoice, type ChatCompletionMessage, type ChatCompletionRequest, type ChatMessage, type CollapseResult, type ContentPart, type ContentWithToolCallsResponse, DEFAULT_TEST_ID, type EmbeddingAPIResponse, type EmbeddingFixtureOpts, type EmbeddingResponse, type ErrorResponse, type Fixture, type FixtureFile, type FixtureFileContentWithToolCallsResponse, type FixtureFileEntry, type FixtureFileResponse, type FixtureFileTextResponse, type FixtureFileToolCall, type FixtureFileToolCallResponse, type FixtureMatch, type FixtureOpts, type FixtureResponse, type ImageItem, type ImageResponse, type InterruptionControl, Journal, type JournalEntry, type JsonRpcDispatcherOptions, type JsonRpcResponse, LLMock, type LogLevel, Logger, type MCPContent, MCPMock, type MCPMockOptions, type MCPPromptDefinition, type MCPPromptResult, type MCPResourceContent, type MCPResourceDefinition, type MCPSession, type MCPToolDefinition, type MethodHandler, type MetricsRegistry, type MockServerOptions, type MockSuite, type MockSuiteOptions, type ModerationFixture, type ModerationResult, type Mountable, type NDJSONStreamOptions, type QueryHandler, type QueryResult, type RecordConfig, type RecordProviderKey, type RerankFixture, type RerankResult, type ResponseOverrides, type ResponsesSSEEvent, type SSEChoice, type SSEChunk, type SSEDelta, type SSEToolCallDelta, type SearchFixture, type SearchResult, type ServerInstance, type ServiceFixtures, type StreamOptions, type StreamingProfile, type TextResponse, type ToolCall, type ToolCallMessage, type ToolCallResponse, type ToolDefinition, type TranscriptionResponse, type ValidationResult, type VectorCollection, type VectorEntry, VectorMock, type VectorMockOptions, type VectorQuery, type VideoResponse, VideoStateMap, WebSocketConnection, applyChaos, bedrockToCompletionRequest, buildActivityResponse as buildAGUIActivityResponse, buildCompositeResponse as buildAGUICompositeResponse, buildErrorResponse as buildAGUIErrorResponse, buildMessagesSnapshot as buildAGUIMessagesSnapshot, buildReasoningResponse as buildAGUIReasoningResponse, buildStateDelta as buildAGUIStateDelta, buildStateUpdate as buildAGUIStateUpdate, buildStepWithText as buildAGUIStepWithText, buildTextChunkResponse as buildAGUITextChunkResponse, buildTextResponse as buildAGUITextResponse, buildToolCallResponse as buildAGUIToolCallResponse, buildContentWithToolCallsChunks, buildContentWithToolCallsCompletion, buildContentWithToolCallsStreamEvents, buildEmbeddingResponse, buildTextChunks, buildTextCompletion, buildTextStreamEvents, buildToolCallChunks, buildToolCallCompletion, buildToolCallStreamEvents, calculateDelay, cohereToCompletionRequest, collapseAnthropicSSE, collapseBedrockEventStream, collapseCohereSSE, collapseGeminiSSE, collapseOllamaNDJSON, collapseOpenAISSE, collapseStreamingResponse, computeAcceptKey, converseToCompletionRequest, createInterruptionSignal, createJsonRpcDispatcher, createMetricsRegistry, createMockSuite, createServer, delay, encodeEventStreamFrame, encodeEventStreamMessage, evaluateChaos, extractLastUserMessage as extractAGUILastUserMessage, extractOverrides, findFixture as findAGUIFixture, flattenHeaders, generateDeterministicEmbedding, generateId, generateMessageId, generateToolCallId, generateToolUseId, getTextContent, handleBedrock, handleBedrockStream, handleCohere, handleConverse, handleConverseStream, handleEmbeddings, handleGemini, handleImages, handleMessages, handleModeration, handleOllama, handleOllamaGenerate, handleRerank, handleResponses, handleSearch, handleSpeech, handleTranscription, handleVideoCreate, handleVideoStatus, handleWebSocketGeminiLive, handleWebSocketRealtime, handleWebSocketResponses, isAudioResponse, isContentWithToolCallsResponse, isEmbeddingResponse, isErrorResponse, isImageResponse, isTextResponse, isToolCallResponse, isTranscriptionResponse, isVideoResponse, loadConfig, loadFixtureFile, loadFixturesFromDir, matchFixture, normalizePathLabel, normalizeResponse, ollamaToCompletionRequest, proxyAndRecord, proxyAndRecordAGUI, resolveUpstreamUrl, startFromConfig, upgradeToWebSocket, validateFixtures, writeAGUIEventStream, writeErrorResponse, writeEventStream, writeNDJSONStream, writeSSEStream };
54
+ export { type A2AAgentDefinition, type A2AArtifact, type A2AMessage, A2AMock, type A2AMockOptions, type A2APart, type A2ARole, type A2AStreamEvent, type A2ATask, type A2ATaskResponse, type A2ATaskState, type AGUIActivityDeltaEvent, type AGUIActivitySnapshotEvent, type AGUIBaseEvent, type AGUIBuildOpts, type AGUICustomEvent, type AGUIEvent, type AGUIEventType, type AGUIFixture, type AGUIFixtureMatch, type AGUIInterrupt, type AGUIMessage, type AGUIMessageRole, type AGUIMessagesSnapshotEvent, AGUIMock, type AGUIMockOptions, type AGUIRawEvent, type AGUIReasoningEncryptedValueEvent, type AGUIReasoningEncryptedValueSubtype, type AGUIReasoningEndEvent, type AGUIReasoningMessageChunkEvent, type AGUIReasoningMessageContentEvent, type AGUIReasoningMessageEndEvent, type AGUIReasoningMessageStartEvent, type AGUIReasoningStartEvent, type AGUIRecordConfig, type AGUIResumeEntry, type AGUIRunAgentInput, type AGUIRunErrorEvent, type AGUIRunFinishedEvent, type AGUIRunFinishedOutcome, type AGUIRunStartedEvent, type AGUIStateDeltaEvent, type AGUIStateSnapshotEvent, type AGUIStepFinishedEvent, type AGUIStepStartedEvent, type AGUITextMessageChunkEvent, type AGUITextMessageContentEvent, type AGUITextMessageEndEvent, type AGUITextMessageRole, type AGUITextMessageStartEvent, type AGUIThinkingEndEvent, type AGUIThinkingStartEvent, type AGUIThinkingTextMessageContentEvent, type AGUIThinkingTextMessageEndEvent, type AGUIThinkingTextMessageStartEvent, type AGUIToolCall, type AGUIToolCallArgsEvent, type AGUIToolCallChunkEvent, type AGUIToolCallEndEvent, type AGUIToolCallResultEvent, type AGUIToolCallStartEvent, type AGUIToolDefinition, type AimockConfig, type AudioResponse, type ChaosAction, type ChaosConfig, type ChatCompletion, type ChatCompletionChoice, type ChatCompletionMessage, type ChatCompletionRequest, type ChatMessage, type CollapseResult, type ContentPart, type ContentWithToolCallsResponse, DEFAULT_TEST_ID, type EmbeddingAPIResponse, type EmbeddingFixtureOpts, type EmbeddingResponse, type ErrorResponse, FORMAT_TO_CONTENT_TYPE, FalQueueStateMap, type Fixture, type FixtureFile, type FixtureFileContentWithToolCallsResponse, type FixtureFileEntry, type FixtureFileResponse, type FixtureFileTextResponse, type FixtureFileToolCall, type FixtureFileToolCallResponse, type FixtureMatch, type FixtureOpts, type FixtureResponse, type ImageItem, type ImageResponse, type InterruptionControl, Journal, type JournalEntry, type JsonRpcDispatcherOptions, type JsonRpcResponse, LLMock, type LogLevel, Logger, type MCPContent, MCPMock, type MCPMockOptions, type MCPPromptDefinition, type MCPPromptResult, type MCPResourceContent, type MCPResourceDefinition, type MCPSession, type MCPToolDefinition, type MethodHandler, type MetricsRegistry, type MockServerOptions, type MockSuite, type MockSuiteOptions, type ModerationFixture, type ModerationResult, type Mountable, type NDJSONStreamOptions, type QueryHandler, type QueryResult, type RawJSONResponse, type RecordConfig, type RecordProviderKey, type RerankFixture, type RerankResult, type ResponseOverrides, type ResponsesSSEEvent, type SSEChoice, type SSEChunk, type SSEDelta, type SSEToolCallDelta, type SearchFixture, type SearchResult, type ServerInstance, type ServiceFixtures, type StreamOptions, type StreamingProfile, type TextResponse, type ToolCall, type ToolCallMessage, type ToolCallResponse, type ToolDefinition, type TranscriptionResponse, type ValidationResult, type VectorCollection, type VectorEntry, VectorMock, type VectorMockOptions, type VectorQuery, type VideoResponse, VideoStateMap, WebSocketConnection, applyChaos, bedrockToCompletionRequest, buildActivityDelta as buildAGUIActivityDelta, buildActivityResponse as buildAGUIActivityResponse, buildCompositeResponse as buildAGUICompositeResponse, buildCustomEvent as buildAGUICustomEvent, buildErrorResponse as buildAGUIErrorResponse, buildMessagesSnapshot as buildAGUIMessagesSnapshot, buildRawEvent as buildAGUIRawEvent, buildReasoningChunk as buildAGUIReasoningChunk, buildReasoningEncryptedValue as buildAGUIReasoningEncryptedValue, buildReasoningResponse as buildAGUIReasoningResponse, buildStateDelta as buildAGUIStateDelta, buildStateUpdate as buildAGUIStateUpdate, buildStepWithText as buildAGUIStepWithText, buildTextChunkResponse as buildAGUITextChunkResponse, buildTextResponse as buildAGUITextResponse, buildToolCallChunk as buildAGUIToolCallChunk, buildToolCallResponse as buildAGUIToolCallResponse, buildContentWithToolCallsChunks, buildContentWithToolCallsCompletion, buildContentWithToolCallsStreamEvents, buildEmbeddingResponse, buildTextChunks, buildTextCompletion, buildTextStreamEvents, buildToolCallChunks, buildToolCallCompletion, buildToolCallStreamEvents, calculateDelay, cohereToCompletionRequest, collapseAnthropicSSE, collapseBedrockEventStream, collapseCohereSSE, collapseGeminiInteractionsSSE, collapseGeminiSSE, collapseOllamaNDJSON, collapseOpenAISSE, collapseStreamingResponse, computeAcceptKey, converseToCompletionRequest, createInterruptionSignal, createJsonRpcDispatcher, createMetricsRegistry, createMockSuite, createServer, delay, encodeEventStreamFrame, encodeEventStreamMessage, evaluateChaos, extractLastUserMessage as extractAGUILastUserMessage, extractOverrides, findFixture as findAGUIFixture, flattenHeaders, formatToMime, geminiInteractionsToCompletionRequest, generateDeterministicEmbedding, generateId, generateMessageId, generateToolCallId, generateToolUseId, getTextContent, handleBedrock, handleBedrockStream, handleCohere, handleConverse, handleConverseStream, handleElevenLabsAudio, handleEmbeddings, handleFal, handleFalQueue, handleGemini, handleGeminiInteractions, handleImages, handleMessages, handleModeration, handleOllama, handleOllamaGenerate, handleRerank, handleResponses, handleSearch, handleSpeech, handleTranscription, handleVideoCreate, handleVideoStatus, handleWebSocketGeminiLive, handleWebSocketRealtime, handleWebSocketResponses, isAudioResponse, isContentWithToolCallsResponse, isEmbeddingResponse, isErrorResponse, isImageResponse, isTextResponse, isToolCallResponse, isTranscriptionResponse, isVideoResponse, loadConfig, loadFixtureFile, loadFixturesFromDir, matchFixture, matchesFixture as matchesAGUIFixture, normalizePathLabel, normalizeResponse, ollamaToCompletionRequest, proxyAndRecord, proxyAndRecordAGUI, resolveUpstreamUrl, startFromConfig, upgradeToWebSocket, validateFixtures, writeAGUIEventStream, writeErrorResponse, writeEventStream, writeNDJSONStream, writeSSEStream };
package/dist/index.js CHANGED
@@ -1,13 +1,17 @@
1
- import { buildContentWithToolCallsChunks, buildContentWithToolCallsCompletion, buildEmbeddingResponse, buildTextChunks, buildTextCompletion, buildToolCallChunks, buildToolCallCompletion, extractOverrides, flattenHeaders, generateDeterministicEmbedding, generateId, generateMessageId, generateToolCallId, generateToolUseId, isAudioResponse, isContentWithToolCallsResponse, isEmbeddingResponse, isErrorResponse, isImageResponse, isTextResponse, isToolCallResponse, isTranscriptionResponse, isVideoResponse } from "./helpers.js";
1
+ import { FORMAT_TO_CONTENT_TYPE, buildContentWithToolCallsChunks, buildContentWithToolCallsCompletion, buildEmbeddingResponse, buildTextChunks, buildTextCompletion, buildToolCallChunks, buildToolCallCompletion, extractOverrides, flattenHeaders, formatToMime, generateDeterministicEmbedding, generateId, generateMessageId, generateToolCallId, generateToolUseId, isAudioResponse, isContentWithToolCallsResponse, isEmbeddingResponse, isErrorResponse, isImageResponse, isTextResponse, isToolCallResponse, isTranscriptionResponse, isVideoResponse } from "./helpers.js";
2
2
  import { createJsonRpcDispatcher } from "./jsonrpc.js";
3
3
  import { A2AMock } from "./a2a-mock.js";
4
+ import { buildActivityDelta, buildActivityResponse, buildCompositeResponse, buildCustomEvent, buildErrorResponse, buildMessagesSnapshot, buildRawEvent, buildReasoningChunk, buildReasoningEncryptedValue, buildReasoningResponse, buildStateDelta, buildStateUpdate, buildStepWithText, buildTextChunkResponse, buildTextResponse, buildToolCallChunk, buildToolCallResponse, extractLastUserMessage, findFixture, matchesFixture, writeAGUIEventStream } from "./agui-handler.js";
5
+ import { proxyAndRecordAGUI } from "./agui-recorder.js";
6
+ import { Logger } from "./logger.js";
7
+ import { AGUIMock } from "./agui-mock.js";
4
8
  import { DEFAULT_TEST_ID, Journal } from "./journal.js";
5
9
  import { getTextContent, matchFixture } from "./router.js";
6
10
  import { loadFixtureFile, loadFixturesFromDir, normalizeResponse, validateFixtures } from "./fixture-loader.js";
7
11
  import { calculateDelay, delay, writeErrorResponse, writeSSEStream } from "./sse-writer.js";
8
12
  import { createInterruptionSignal } from "./interruption.js";
9
13
  import { applyChaos, evaluateChaos } from "./chaos.js";
10
- import { collapseAnthropicSSE, collapseBedrockEventStream, collapseCohereSSE, collapseGeminiSSE, collapseOllamaNDJSON, collapseOpenAISSE, collapseStreamingResponse } from "./stream-collapse.js";
14
+ import { collapseAnthropicSSE, collapseBedrockEventStream, collapseCohereSSE, collapseGeminiInteractionsSSE, collapseGeminiSSE, collapseOllamaNDJSON, collapseOpenAISSE, collapseStreamingResponse } from "./stream-collapse.js";
11
15
  import { resolveUpstreamUrl } from "./url.js";
12
16
  import { proxyAndRecord } from "./recorder.js";
13
17
  import { buildContentWithToolCallsStreamEvents, buildTextStreamEvents, buildToolCallStreamEvents, handleResponses } from "./responses.js";
@@ -16,11 +20,15 @@ import { handleGemini } from "./gemini.js";
16
20
  import { encodeEventStreamFrame, encodeEventStreamMessage, writeEventStream } from "./aws-event-stream.js";
17
21
  import { bedrockToCompletionRequest, handleBedrock, handleBedrockStream } from "./bedrock.js";
18
22
  import { converseToCompletionRequest, handleConverse, handleConverseStream } from "./bedrock-converse.js";
23
+ import { geminiInteractionsToCompletionRequest, handleGeminiInteractions } from "./gemini-interactions.js";
19
24
  import { handleEmbeddings } from "./embeddings.js";
20
25
  import { handleImages } from "./images.js";
21
26
  import { handleSpeech } from "./speech.js";
22
27
  import { handleTranscription } from "./transcription.js";
23
28
  import { VideoStateMap, handleVideoCreate, handleVideoStatus } from "./video.js";
29
+ import { handleElevenLabsAudio } from "./elevenlabs-audio.js";
30
+ import { handleFalQueue } from "./fal-audio.js";
31
+ import { FalQueueStateMap, handleFal } from "./fal.js";
24
32
  import { writeNDJSONStream } from "./ndjson-writer.js";
25
33
  import { handleOllama, handleOllamaGenerate, ollamaToCompletionRequest } from "./ollama.js";
26
34
  import { cohereToCompletionRequest, handleCohere } from "./cohere.js";
@@ -31,16 +39,12 @@ import { WebSocketConnection, computeAcceptKey, upgradeToWebSocket } from "./ws-
31
39
  import { handleWebSocketResponses } from "./ws-responses.js";
32
40
  import { handleWebSocketRealtime } from "./ws-realtime.js";
33
41
  import { handleWebSocketGeminiLive } from "./ws-gemini-live.js";
34
- import { Logger } from "./logger.js";
35
42
  import { createMetricsRegistry, normalizePathLabel } from "./metrics.js";
36
43
  import { createServer } from "./server.js";
37
44
  import { LLMock } from "./llmock.js";
38
45
  import { MCPMock } from "./mcp-mock.js";
39
- import { buildActivityResponse, buildCompositeResponse, buildErrorResponse, buildMessagesSnapshot, buildReasoningResponse, buildStateDelta, buildStateUpdate, buildStepWithText, buildTextChunkResponse, buildTextResponse, buildToolCallResponse, extractLastUserMessage, findFixture, writeAGUIEventStream } from "./agui-handler.js";
40
- import { proxyAndRecordAGUI } from "./agui-recorder.js";
41
- import { AGUIMock } from "./agui-mock.js";
42
46
  import { VectorMock } from "./vector-mock.js";
43
47
  import { loadConfig, startFromConfig } from "./config-loader.js";
44
48
  import { createMockSuite } from "./suite.js";
45
49
 
46
- export { A2AMock, AGUIMock, DEFAULT_TEST_ID, Journal, LLMock, Logger, MCPMock, VectorMock, VideoStateMap, WebSocketConnection, applyChaos, bedrockToCompletionRequest, buildActivityResponse as buildAGUIActivityResponse, buildCompositeResponse as buildAGUICompositeResponse, buildErrorResponse as buildAGUIErrorResponse, buildMessagesSnapshot as buildAGUIMessagesSnapshot, buildReasoningResponse as buildAGUIReasoningResponse, buildStateDelta as buildAGUIStateDelta, buildStateUpdate as buildAGUIStateUpdate, buildStepWithText as buildAGUIStepWithText, buildTextChunkResponse as buildAGUITextChunkResponse, buildTextResponse as buildAGUITextResponse, buildToolCallResponse as buildAGUIToolCallResponse, buildContentWithToolCallsChunks, buildContentWithToolCallsCompletion, buildContentWithToolCallsStreamEvents, buildEmbeddingResponse, buildTextChunks, buildTextCompletion, buildTextStreamEvents, buildToolCallChunks, buildToolCallCompletion, buildToolCallStreamEvents, calculateDelay, cohereToCompletionRequest, collapseAnthropicSSE, collapseBedrockEventStream, collapseCohereSSE, collapseGeminiSSE, collapseOllamaNDJSON, collapseOpenAISSE, collapseStreamingResponse, computeAcceptKey, converseToCompletionRequest, createInterruptionSignal, createJsonRpcDispatcher, createMetricsRegistry, createMockSuite, createServer, delay, encodeEventStreamFrame, encodeEventStreamMessage, evaluateChaos, extractLastUserMessage as extractAGUILastUserMessage, extractOverrides, findFixture as findAGUIFixture, flattenHeaders, generateDeterministicEmbedding, generateId, generateMessageId, generateToolCallId, generateToolUseId, getTextContent, handleBedrock, handleBedrockStream, handleCohere, handleConverse, handleConverseStream, handleEmbeddings, handleGemini, handleImages, handleMessages, handleModeration, handleOllama, handleOllamaGenerate, handleRerank, handleResponses, handleSearch, handleSpeech, handleTranscription, handleVideoCreate, handleVideoStatus, handleWebSocketGeminiLive, handleWebSocketRealtime, handleWebSocketResponses, isAudioResponse, isContentWithToolCallsResponse, isEmbeddingResponse, isErrorResponse, isImageResponse, isTextResponse, isToolCallResponse, isTranscriptionResponse, isVideoResponse, loadConfig, loadFixtureFile, loadFixturesFromDir, matchFixture, normalizePathLabel, normalizeResponse, ollamaToCompletionRequest, proxyAndRecord, proxyAndRecordAGUI, resolveUpstreamUrl, startFromConfig, upgradeToWebSocket, validateFixtures, writeAGUIEventStream, writeErrorResponse, writeEventStream, writeNDJSONStream, writeSSEStream };
50
+ export { A2AMock, AGUIMock, DEFAULT_TEST_ID, FORMAT_TO_CONTENT_TYPE, FalQueueStateMap, Journal, LLMock, Logger, MCPMock, VectorMock, VideoStateMap, WebSocketConnection, applyChaos, bedrockToCompletionRequest, buildActivityDelta as buildAGUIActivityDelta, buildActivityResponse as buildAGUIActivityResponse, buildCompositeResponse as buildAGUICompositeResponse, buildCustomEvent as buildAGUICustomEvent, buildErrorResponse as buildAGUIErrorResponse, buildMessagesSnapshot as buildAGUIMessagesSnapshot, buildRawEvent as buildAGUIRawEvent, buildReasoningChunk as buildAGUIReasoningChunk, buildReasoningEncryptedValue as buildAGUIReasoningEncryptedValue, buildReasoningResponse as buildAGUIReasoningResponse, buildStateDelta as buildAGUIStateDelta, buildStateUpdate as buildAGUIStateUpdate, buildStepWithText as buildAGUIStepWithText, buildTextChunkResponse as buildAGUITextChunkResponse, buildTextResponse as buildAGUITextResponse, buildToolCallChunk as buildAGUIToolCallChunk, buildToolCallResponse as buildAGUIToolCallResponse, buildContentWithToolCallsChunks, buildContentWithToolCallsCompletion, buildContentWithToolCallsStreamEvents, buildEmbeddingResponse, buildTextChunks, buildTextCompletion, buildTextStreamEvents, buildToolCallChunks, buildToolCallCompletion, buildToolCallStreamEvents, calculateDelay, cohereToCompletionRequest, collapseAnthropicSSE, collapseBedrockEventStream, collapseCohereSSE, collapseGeminiInteractionsSSE, collapseGeminiSSE, collapseOllamaNDJSON, collapseOpenAISSE, collapseStreamingResponse, computeAcceptKey, converseToCompletionRequest, createInterruptionSignal, createJsonRpcDispatcher, createMetricsRegistry, createMockSuite, createServer, delay, encodeEventStreamFrame, encodeEventStreamMessage, evaluateChaos, extractLastUserMessage as extractAGUILastUserMessage, extractOverrides, findFixture as findAGUIFixture, flattenHeaders, formatToMime, geminiInteractionsToCompletionRequest, generateDeterministicEmbedding, generateId, generateMessageId, generateToolCallId, generateToolUseId, getTextContent, handleBedrock, handleBedrockStream, handleCohere, handleConverse, handleConverseStream, handleElevenLabsAudio, handleEmbeddings, handleFal, handleFalQueue, handleGemini, handleGeminiInteractions, handleImages, handleMessages, handleModeration, handleOllama, handleOllamaGenerate, handleRerank, handleResponses, handleSearch, handleSpeech, handleTranscription, handleVideoCreate, handleVideoStatus, handleWebSocketGeminiLive, handleWebSocketRealtime, handleWebSocketResponses, isAudioResponse, isContentWithToolCallsResponse, isEmbeddingResponse, isErrorResponse, isImageResponse, isTextResponse, isToolCallResponse, isTranscriptionResponse, isVideoResponse, loadConfig, loadFixtureFile, loadFixturesFromDir, matchFixture, matchesFixture as matchesAGUIFixture, normalizePathLabel, normalizeResponse, ollamaToCompletionRequest, proxyAndRecord, proxyAndRecordAGUI, resolveUpstreamUrl, startFromConfig, upgradeToWebSocket, validateFixtures, writeAGUIEventStream, writeErrorResponse, writeEventStream, writeNDJSONStream, writeSSEStream };
package/dist/jest.cjs CHANGED
@@ -2,8 +2,8 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
2
  const require_runtime = require('./_virtual/_rolldown/runtime.cjs');
3
3
  const require_fixture_loader = require('./fixture-loader.cjs');
4
4
  const require_llmock = require('./llmock.cjs');
5
- let node_path = require("node:path");
6
5
  let node_fs = require("node:fs");
6
+ let node_path = require("node:path");
7
7
 
8
8
  //#region src/jest.ts
9
9
  /**
package/dist/jest.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { loadFixtureFile, loadFixturesFromDir } from "./fixture-loader.js";
2
2
  import { LLMock } from "./llmock.js";
3
- import { resolve } from "node:path";
4
3
  import { statSync } from "node:fs";
4
+ import { resolve } from "node:path";
5
5
 
6
6
  //#region src/jest.ts
7
7
  /**
@@ -1,4 +1,4 @@
1
- import * as http from "node:http";
1
+ import * as http$1 from "node:http";
2
2
 
3
3
  //#region src/jsonrpc.d.ts
4
4
  type JsonRpcResponse = {
@@ -11,12 +11,12 @@ type JsonRpcResponse = {
11
11
  data?: unknown;
12
12
  };
13
13
  };
14
- type MethodHandler = (params: unknown, id: string | number, req: http.IncomingMessage) => Promise<JsonRpcResponse | null>;
14
+ type MethodHandler = (params: unknown, id: string | number, req: http$1.IncomingMessage) => Promise<JsonRpcResponse | null>;
15
15
  interface JsonRpcDispatcherOptions {
16
16
  methods: Record<string, MethodHandler>;
17
17
  onNotification?: (method: string, params: unknown) => void;
18
18
  }
19
- declare function createJsonRpcDispatcher(options: JsonRpcDispatcherOptions): (req: http.IncomingMessage, res: http.ServerResponse, body: string) => Promise<void>;
19
+ declare function createJsonRpcDispatcher(options: JsonRpcDispatcherOptions): (req: http$1.IncomingMessage, res: http$1.ServerResponse, body: string) => Promise<void>;
20
20
  //# sourceMappingURL=jsonrpc.d.ts.map
21
21
 
22
22
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"jsonrpc.d.cts","names":[],"sources":["../src/jsonrpc.ts"],"sourcesContent":[],"mappings":";;;KAEY,eAAA;;EAAA,EAAA,EAAA,MAAA,GAAA,MAAe,GAAA,IAAA;EAOf,MAAA,CAAA,EAAA,OAAa;EAAA,KAAA,CAAA,EAAA;IAGlB,IAAK,EAAA,MAAA;IACC,OAAA,EAAA,MAAA;IAAR,IAAA,CAAA,EAAA,OAAA;EAAO,CAAA;AAEZ,CAAA;AAAyC,KAN7B,aAAA,GAM6B,CAAA,MAAA,EAAA,OAAA,EAAA,EAAA,EAAA,MAAA,GAAA,MAAA,EAAA,GAAA,EAHlC,IAAA,CAAK,eAG6B,EAAA,GAFpC,OAEoC,CAF5B,eAE4B,GAAA,IAAA,CAAA;AACf,UADT,wBAAA,CACS;SAAf,EAAA,MAAA,CAAA,MAAA,EAAe,aAAf,CAAA;EAAM,cAAA,CAAA,EAAA,CAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,GAAA,IAAA;AAsEjB;AAAuC,iBAAvB,uBAAA,CAAuB,OAAA,EAC5B,wBAD4B,CAAA,EAAA,CAAA,GAAA,EAE9B,IAAA,CAAK,eAFyB,EAAA,GAAA,EAEH,IAAA,CAAK,cAFF,EAAA,IAAA,EAAA,MAAA,EAAA,GAEmC,OAFnC,CAAA,IAAA,CAAA"}
1
+ {"version":3,"file":"jsonrpc.d.cts","names":[],"sources":["../src/jsonrpc.ts"],"sourcesContent":[],"mappings":";;;KAEY,eAAA;;EAAA,EAAA,EAAA,MAAA,GAAA,MAAe,GAAA,IAAA;EAOf,MAAA,CAAA,EAAA,OAAa;EAAA,KAAA,CAAA,EAAA;IAGlB,IAAA,EAAK,MAAA;IACC,OAAA,EAAA,MAAA;IAAR,IAAA,CAAA,EAAA,OAAA;EAAO,CAAA;AAEZ,CAAA;AAAyC,KAN7B,aAAA,GAM6B,CAAA,MAAA,EAAA,OAAA,EAAA,EAAA,EAAA,MAAA,GAAA,MAAA,EAAA,GAAA,EAHlC,MAAA,CAAK,eAG6B,EAAA,GAFpC,OAEoC,CAF5B,eAE4B,GAAA,IAAA,CAAA;AACf,UADT,wBAAA,CACS;SAAf,EAAA,MAAA,CAAA,MAAA,EAAe,aAAf,CAAA;EAAM,cAAA,CAAA,EAAA,CAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,GAAA,IAAA;AAsEjB;AAAuC,iBAAvB,uBAAA,CAAuB,OAAA,EAC5B,wBAD4B,CAAA,EAAA,CAAA,GAAA,EAE9B,MAAA,CAAK,eAFyB,EAAA,GAAA,EAEH,MAAA,CAAK,cAFF,EAAA,IAAA,EAAA,MAAA,EAAA,GAEmC,OAFnC,CAAA,IAAA,CAAA"}
package/dist/jsonrpc.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import * as http from "node:http";
1
+ import * as http$1 from "node:http";
2
2
 
3
3
  //#region src/jsonrpc.d.ts
4
4
  type JsonRpcResponse = {
@@ -11,12 +11,12 @@ type JsonRpcResponse = {
11
11
  data?: unknown;
12
12
  };
13
13
  };
14
- type MethodHandler = (params: unknown, id: string | number, req: http.IncomingMessage) => Promise<JsonRpcResponse | null>;
14
+ type MethodHandler = (params: unknown, id: string | number, req: http$1.IncomingMessage) => Promise<JsonRpcResponse | null>;
15
15
  interface JsonRpcDispatcherOptions {
16
16
  methods: Record<string, MethodHandler>;
17
17
  onNotification?: (method: string, params: unknown) => void;
18
18
  }
19
- declare function createJsonRpcDispatcher(options: JsonRpcDispatcherOptions): (req: http.IncomingMessage, res: http.ServerResponse, body: string) => Promise<void>;
19
+ declare function createJsonRpcDispatcher(options: JsonRpcDispatcherOptions): (req: http$1.IncomingMessage, res: http$1.ServerResponse, body: string) => Promise<void>;
20
20
  //# sourceMappingURL=jsonrpc.d.ts.map
21
21
 
22
22
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"jsonrpc.d.ts","names":[],"sources":["../src/jsonrpc.ts"],"sourcesContent":[],"mappings":";;;KAEY,eAAA;;EAAA,EAAA,EAAA,MAAA,GAAA,MAAe,GAAA,IAAA;EAOf,MAAA,CAAA,EAAA,OAAa;EAAA,KAAA,CAAA,EAAA;IAGlB,IAAK,EAAA,MAAA;IACC,OAAA,EAAA,MAAA;IAAR,IAAA,CAAA,EAAA,OAAA;EAAO,CAAA;AAEZ,CAAA;AAAyC,KAN7B,aAAA,GAM6B,CAAA,MAAA,EAAA,OAAA,EAAA,EAAA,EAAA,MAAA,GAAA,MAAA,EAAA,GAAA,EAHlC,IAAA,CAAK,eAG6B,EAAA,GAFpC,OAEoC,CAF5B,eAE4B,GAAA,IAAA,CAAA;AACf,UADT,wBAAA,CACS;SAAf,EAAA,MAAA,CAAA,MAAA,EAAe,aAAf,CAAA;EAAM,cAAA,CAAA,EAAA,CAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,GAAA,IAAA;AAsEjB;AAAuC,iBAAvB,uBAAA,CAAuB,OAAA,EAC5B,wBAD4B,CAAA,EAAA,CAAA,GAAA,EAE9B,IAAA,CAAK,eAFyB,EAAA,GAAA,EAEH,IAAA,CAAK,cAFF,EAAA,IAAA,EAAA,MAAA,EAAA,GAEmC,OAFnC,CAAA,IAAA,CAAA"}
1
+ {"version":3,"file":"jsonrpc.d.ts","names":[],"sources":["../src/jsonrpc.ts"],"sourcesContent":[],"mappings":";;;KAEY,eAAA;;EAAA,EAAA,EAAA,MAAA,GAAA,MAAe,GAAA,IAAA;EAOf,MAAA,CAAA,EAAA,OAAa;EAAA,KAAA,CAAA,EAAA;IAGlB,IAAA,EAAK,MAAA;IACC,OAAA,EAAA,MAAA;IAAR,IAAA,CAAA,EAAA,OAAA;EAAO,CAAA;AAEZ,CAAA;AAAyC,KAN7B,aAAA,GAM6B,CAAA,MAAA,EAAA,OAAA,EAAA,EAAA,EAAA,MAAA,GAAA,MAAA,EAAA,GAAA,EAHlC,MAAA,CAAK,eAG6B,EAAA,GAFpC,OAEoC,CAF5B,eAE4B,GAAA,IAAA,CAAA;AACf,UADT,wBAAA,CACS;SAAf,EAAA,MAAA,CAAA,MAAA,EAAe,aAAf,CAAA;EAAM,cAAA,CAAA,EAAA,CAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,GAAA,IAAA;AAsEjB;AAAuC,iBAAvB,uBAAA,CAAuB,OAAA,EAC5B,wBAD4B,CAAA,EAAA,CAAA,GAAA,EAE9B,MAAA,CAAK,eAFyB,EAAA,GAAA,EAEH,MAAA,CAAK,cAFF,EAAA,IAAA,EAAA,MAAA,EAAA,GAEmC,OAFnC,CAAA,IAAA,CAAA"}
package/dist/llmock.cjs CHANGED
@@ -1,4 +1,6 @@
1
1
  const require_fixture_loader = require('./fixture-loader.cjs');
2
+ const require_fal_audio = require('./fal-audio.cjs');
3
+ const require_fal = require('./fal.cjs');
2
4
  const require_server = require('./server.cjs');
3
5
 
4
6
  //#region src/llmock.ts
@@ -116,6 +118,53 @@ var LLMock = class LLMock {
116
118
  response
117
119
  });
118
120
  }
121
+ onAudio(input, response) {
122
+ return this.addFixture({
123
+ match: { userMessage: input },
124
+ response
125
+ });
126
+ }
127
+ onSoundEffect(text, response) {
128
+ return this.addFixture({
129
+ match: {
130
+ userMessage: text,
131
+ endpoint: "audio-gen"
132
+ },
133
+ response
134
+ });
135
+ }
136
+ onMusic(prompt, response) {
137
+ return this.addFixture({
138
+ match: {
139
+ userMessage: prompt,
140
+ endpoint: "audio-gen"
141
+ },
142
+ response
143
+ });
144
+ }
145
+ onFalAudio(prompt, response, model) {
146
+ return this.addFixture({
147
+ match: {
148
+ userMessage: prompt,
149
+ endpoint: "fal-audio",
150
+ ...model ? { model } : {}
151
+ },
152
+ response
153
+ });
154
+ }
155
+ onFalQueue(modelOrPrompt, response, opts) {
156
+ return this.addFixture({
157
+ match: {
158
+ model: modelOrPrompt,
159
+ endpoint: "fal"
160
+ },
161
+ response: { json: response },
162
+ ...opts
163
+ });
164
+ }
165
+ onFalRun(modelOrPrompt, response, opts) {
166
+ return this.onFalQueue(modelOrPrompt, response, opts);
167
+ }
119
168
  onSearch(pattern, results) {
120
169
  this.searchFixtures.push({
121
170
  match: pattern,
@@ -159,10 +208,10 @@ var LLMock = class LLMock {
159
208
  const original = fixture.match.predicate;
160
209
  fixture.match.predicate = (req) => {
161
210
  const result = original(req);
162
- if (result) queueMicrotask(() => {
211
+ if (result) {
163
212
  const idx = this.fixtures.indexOf(fixture);
164
213
  if (idx !== -1) this.fixtures.splice(idx, 1);
165
- });
214
+ }
166
215
  return result;
167
216
  };
168
217
  return this;
@@ -214,6 +263,8 @@ var LLMock = class LLMock {
214
263
  this.searchFixtures.length = 0;
215
264
  this.rerankFixtures.length = 0;
216
265
  this.moderationFixtures.length = 0;
266
+ require_fal_audio.falJobs.clear();
267
+ require_fal.falQueueStates.clear();
217
268
  if (this.serverInstance) {
218
269
  this.serverInstance.journal.clear();
219
270
  this.serverInstance.videoStates.clear();
@@ -1 +1 @@
1
- {"version":3,"file":"llmock.cjs","names":["loadFixtureFile","loadFixturesFromDir","entryToFixture","validateFixtures","normalizeResponse","createServer"],"sources":["../src/llmock.ts"],"sourcesContent":["import type {\n AudioResponse,\n ChaosConfig,\n EmbeddingFixtureOpts,\n Fixture,\n FixtureFileEntry,\n FixtureFileResponse,\n FixtureMatch,\n FixtureOpts,\n FixtureResponse,\n ImageResponse,\n MockServerOptions,\n Mountable,\n RecordConfig,\n TranscriptionResponse,\n VideoResponse,\n} from \"./types.js\";\nimport { createServer, type ServerInstance } from \"./server.js\";\nimport {\n loadFixtureFile,\n loadFixturesFromDir,\n entryToFixture,\n normalizeResponse,\n validateFixtures,\n} from \"./fixture-loader.js\";\nimport { Journal } from \"./journal.js\";\nimport type { SearchFixture, SearchResult } from \"./search.js\";\nimport type { RerankFixture, RerankResult } from \"./rerank.js\";\nimport type { ModerationFixture, ModerationResult } from \"./moderation.js\";\n\nexport class LLMock {\n private fixtures: Fixture[] = [];\n private searchFixtures: SearchFixture[] = [];\n private rerankFixtures: RerankFixture[] = [];\n private moderationFixtures: ModerationFixture[] = [];\n private mounts: Array<{ path: string; handler: Mountable }> = [];\n private serverInstance: ServerInstance | null = null;\n private options: MockServerOptions;\n\n constructor(options?: MockServerOptions) {\n this.options = options ?? {};\n }\n\n // ---- Fixture management ----\n\n addFixture(fixture: Fixture): this {\n this.fixtures.push(fixture);\n return this;\n }\n\n addFixtures(fixtures: Fixture[]): this {\n this.fixtures.push(...fixtures);\n return this;\n }\n\n prependFixture(fixture: Fixture): this {\n this.fixtures.unshift(fixture);\n return this;\n }\n\n getFixtures(): readonly Fixture[] {\n return this.fixtures;\n }\n\n loadFixtureFile(filePath: string): this {\n this.fixtures.push(...loadFixtureFile(filePath));\n return this;\n }\n\n loadFixtureDir(dirPath: string): this {\n this.fixtures.push(...loadFixturesFromDir(dirPath));\n return this;\n }\n\n /**\n * Add fixtures from a JSON string or pre-parsed array of fixture entries.\n * Validates all fixtures and throws if any have severity \"error\".\n */\n addFixturesFromJSON(input: string | FixtureFileEntry[]): this {\n const entries: FixtureFileEntry[] = typeof input === \"string\" ? JSON.parse(input) : input;\n const converted = entries.map(entryToFixture);\n const issues = validateFixtures(converted);\n const errors = issues.filter((i) => i.severity === \"error\");\n if (errors.length > 0) {\n throw new Error(`Fixture validation failed: ${JSON.stringify(errors)}`);\n }\n this.fixtures.push(...converted);\n return this;\n }\n\n // Uses length = 0 to preserve array reference identity — the running\n // server reads this same array on every request.\n clearFixtures(): this {\n this.fixtures.length = 0;\n return this;\n }\n\n // ---- Convenience ----\n\n on(match: FixtureMatch, response: FixtureFileResponse, opts?: FixtureOpts): this {\n return this.addFixture({\n match,\n response: normalizeResponse(response),\n ...opts,\n });\n }\n\n onMessage(pattern: string | RegExp, response: FixtureFileResponse, opts?: FixtureOpts): this {\n return this.on({ userMessage: pattern }, response, opts);\n }\n\n onEmbedding(\n pattern: string | RegExp,\n response: FixtureFileResponse,\n opts?: EmbeddingFixtureOpts,\n ): this {\n return this.on({ inputText: pattern }, response, opts);\n }\n\n onJsonOutput(pattern: string | RegExp, jsonContent: object | string, opts?: FixtureOpts): this {\n const content = typeof jsonContent === \"string\" ? jsonContent : JSON.stringify(jsonContent);\n return this.on({ userMessage: pattern, responseFormat: \"json_object\" }, { content }, opts);\n }\n\n onToolCall(name: string, response: FixtureFileResponse, opts?: FixtureOpts): this {\n return this.on({ toolName: name }, response, opts);\n }\n\n onToolResult(id: string, response: FixtureFileResponse, opts?: FixtureOpts): this {\n return this.on({ toolCallId: id }, response, opts);\n }\n\n onTurn(\n turn: number,\n pattern: string | RegExp,\n response: FixtureFileResponse,\n opts?: FixtureOpts,\n ): this {\n return this.on({ userMessage: pattern, turnIndex: turn }, response, opts);\n }\n\n onImage(prompt: string | RegExp, response: ImageResponse): this {\n return this.addFixture({\n match: { userMessage: prompt, endpoint: \"image\" },\n response,\n });\n }\n\n onSpeech(input: string | RegExp, response: AudioResponse): this {\n return this.addFixture({\n match: { userMessage: input, endpoint: \"speech\" },\n response,\n });\n }\n\n onTranscription(response: TranscriptionResponse): this {\n return this.addFixture({\n match: { endpoint: \"transcription\" },\n response,\n });\n }\n\n onVideo(prompt: string | RegExp, response: VideoResponse): this {\n return this.addFixture({\n match: { userMessage: prompt, endpoint: \"video\" },\n response,\n });\n }\n\n // ---- Service mock convenience methods ----\n\n onSearch(pattern: string | RegExp, results: SearchResult[]): this {\n this.searchFixtures.push({ match: pattern, results });\n return this;\n }\n\n onRerank(pattern: string | RegExp, results: RerankResult[]): this {\n this.rerankFixtures.push({ match: pattern, results });\n return this;\n }\n\n onModerate(pattern: string | RegExp, result: ModerationResult): this {\n this.moderationFixtures.push({ match: pattern, result });\n return this;\n }\n\n /**\n * Queue a one-shot error that will be returned for the next matching\n * request, then automatically removed. Implemented as an internal fixture\n * with a `predicate` that always matches (so it fires first) and spliced\n * at the front of the fixture list.\n */\n nextRequestError(\n status: number,\n errorBody?: { message?: string; type?: string; code?: string },\n ): this {\n const errorResponse: FixtureResponse = {\n error: {\n message: errorBody?.message ?? \"Injected error\",\n type: errorBody?.type ?? \"server_error\",\n code: errorBody?.code,\n },\n status,\n };\n const fixture: Fixture = {\n match: { predicate: () => true },\n response: errorResponse,\n };\n // Insert at front so it matches before everything else\n this.fixtures.unshift(fixture);\n // Remove after first match — the journal records it so tests can assert\n const original = fixture.match.predicate!;\n fixture.match.predicate = (req) => {\n const result = original(req);\n if (result) {\n // Defer splice so it doesn't mutate the array while matchFixture iterates it\n queueMicrotask(() => {\n const idx = this.fixtures.indexOf(fixture);\n if (idx !== -1) this.fixtures.splice(idx, 1);\n });\n }\n return result;\n };\n return this;\n }\n\n // ---- Mounts ----\n\n mount(path: string, handler: Mountable): this {\n this.mounts.push({ path, handler });\n\n // If server is already running, wire up journal, registry, and baseUrl immediately\n // so late mounts behave identically to pre-start mounts.\n if (this.serverInstance) {\n if (handler.setJournal) handler.setJournal(this.serverInstance.journal);\n if (handler.setBaseUrl) handler.setBaseUrl(this.serverInstance.url + path);\n const registry = this.serverInstance.defaults.registry;\n if (registry && handler.setRegistry) handler.setRegistry(registry);\n }\n\n return this;\n }\n\n // ---- Journal proxies ----\n\n getRequests(): import(\"./types.js\").JournalEntry[] {\n return this.journal.getAll();\n }\n\n getLastRequest(): import(\"./types.js\").JournalEntry | null {\n return this.journal.getLast();\n }\n\n clearRequests(): void {\n this.journal.clear();\n }\n\n resetMatchCounts(testId?: string): this {\n if (this.serverInstance) {\n this.serverInstance.journal.clearMatchCounts(testId);\n }\n return this;\n }\n\n // ---- Chaos ----\n\n setChaos(config: ChaosConfig): this {\n this.options.chaos = config;\n return this;\n }\n\n clearChaos(): this {\n delete this.options.chaos;\n return this;\n }\n\n // ---- Recording ----\n\n enableRecording(config: RecordConfig): this {\n this.options.record = config;\n return this;\n }\n\n disableRecording(): this {\n delete this.options.record;\n return this;\n }\n\n // ---- Reset ----\n\n reset(): this {\n this.clearFixtures();\n this.searchFixtures.length = 0;\n this.rerankFixtures.length = 0;\n this.moderationFixtures.length = 0;\n if (this.serverInstance) {\n this.serverInstance.journal.clear();\n this.serverInstance.videoStates.clear();\n }\n return this;\n }\n\n // ---- Server lifecycle ----\n\n async start(): Promise<string> {\n if (this.serverInstance) {\n throw new Error(\"Server already started\");\n }\n this.serverInstance = await createServer(this.fixtures, this.options, this.mounts, {\n search: this.searchFixtures,\n rerank: this.rerankFixtures,\n moderation: this.moderationFixtures,\n });\n return this.serverInstance.url;\n }\n\n async stop(): Promise<void> {\n if (!this.serverInstance) {\n throw new Error(\"Server not started\");\n }\n const { server } = this.serverInstance;\n await new Promise<void>((resolve, reject) => {\n server.close((err: Error | undefined) => (err ? reject(err) : resolve()));\n });\n this.serverInstance = null;\n }\n\n // ---- Accessors ----\n\n get journal(): Journal {\n if (!this.serverInstance) {\n throw new Error(\"Server not started\");\n }\n return this.serverInstance.journal;\n }\n\n get url(): string {\n if (!this.serverInstance) {\n throw new Error(\"Server not started\");\n }\n return this.serverInstance.url;\n }\n\n get baseUrl(): string {\n return this.url;\n }\n\n get port(): number {\n const parsed = new URL(this.url); // this.url throws if not started\n if (!parsed.port) {\n throw new Error(`Server URL has no explicit port: ${this.url}`);\n }\n return parseInt(parsed.port, 10);\n }\n\n // ---- Static factory ----\n\n static async create(options?: MockServerOptions): Promise<LLMock> {\n const instance = new LLMock(options);\n await instance.start();\n return instance;\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"llmock.cjs","names":["loadFixtureFile","loadFixturesFromDir","entryToFixture","validateFixtures","normalizeResponse","createServer"],"sources":["../src/llmock.ts"],"sourcesContent":["import type {\n AudioResponse,\n ChaosConfig,\n EmbeddingFixtureOpts,\n Fixture,\n FixtureFileEntry,\n FixtureFileResponse,\n FixtureMatch,\n FixtureOpts,\n FixtureResponse,\n ImageResponse,\n MockServerOptions,\n Mountable,\n RecordConfig,\n TranscriptionResponse,\n VideoResponse,\n} from \"./types.js\";\nimport { createServer, type ServerInstance } from \"./server.js\";\nimport {\n loadFixtureFile,\n loadFixturesFromDir,\n entryToFixture,\n normalizeResponse,\n validateFixtures,\n} from \"./fixture-loader.js\";\nimport { Journal } from \"./journal.js\";\nimport type { SearchFixture, SearchResult } from \"./search.js\";\nimport type { RerankFixture, RerankResult } from \"./rerank.js\";\nimport type { ModerationFixture, ModerationResult } from \"./moderation.js\";\nimport { falJobs } from \"./fal-audio.js\";\nimport { falQueueStates } from \"./fal.js\";\n\nexport class LLMock {\n private fixtures: Fixture[] = [];\n private searchFixtures: SearchFixture[] = [];\n private rerankFixtures: RerankFixture[] = [];\n private moderationFixtures: ModerationFixture[] = [];\n private mounts: Array<{ path: string; handler: Mountable }> = [];\n private serverInstance: ServerInstance | null = null;\n private options: MockServerOptions;\n\n constructor(options?: MockServerOptions) {\n this.options = options ?? {};\n }\n\n // ---- Fixture management ----\n\n addFixture(fixture: Fixture): this {\n this.fixtures.push(fixture);\n return this;\n }\n\n addFixtures(fixtures: Fixture[]): this {\n this.fixtures.push(...fixtures);\n return this;\n }\n\n prependFixture(fixture: Fixture): this {\n this.fixtures.unshift(fixture);\n return this;\n }\n\n getFixtures(): readonly Fixture[] {\n return this.fixtures;\n }\n\n loadFixtureFile(filePath: string): this {\n this.fixtures.push(...loadFixtureFile(filePath));\n return this;\n }\n\n loadFixtureDir(dirPath: string): this {\n this.fixtures.push(...loadFixturesFromDir(dirPath));\n return this;\n }\n\n /**\n * Add fixtures from a JSON string or pre-parsed array of fixture entries.\n * Validates all fixtures and throws if any have severity \"error\".\n */\n addFixturesFromJSON(input: string | FixtureFileEntry[]): this {\n const entries: FixtureFileEntry[] = typeof input === \"string\" ? JSON.parse(input) : input;\n const converted = entries.map(entryToFixture);\n const issues = validateFixtures(converted);\n const errors = issues.filter((i) => i.severity === \"error\");\n if (errors.length > 0) {\n throw new Error(`Fixture validation failed: ${JSON.stringify(errors)}`);\n }\n this.fixtures.push(...converted);\n return this;\n }\n\n // Uses length = 0 to preserve array reference identity — the running\n // server reads this same array on every request.\n clearFixtures(): this {\n this.fixtures.length = 0;\n return this;\n }\n\n // ---- Convenience ----\n\n on(match: FixtureMatch, response: FixtureFileResponse, opts?: FixtureOpts): this {\n return this.addFixture({\n match,\n response: normalizeResponse(response),\n ...opts,\n });\n }\n\n onMessage(pattern: string | RegExp, response: FixtureFileResponse, opts?: FixtureOpts): this {\n return this.on({ userMessage: pattern }, response, opts);\n }\n\n onEmbedding(\n pattern: string | RegExp,\n response: FixtureFileResponse,\n opts?: EmbeddingFixtureOpts,\n ): this {\n return this.on({ inputText: pattern }, response, opts);\n }\n\n onJsonOutput(pattern: string | RegExp, jsonContent: object | string, opts?: FixtureOpts): this {\n const content = typeof jsonContent === \"string\" ? jsonContent : JSON.stringify(jsonContent);\n return this.on({ userMessage: pattern, responseFormat: \"json_object\" }, { content }, opts);\n }\n\n onToolCall(name: string, response: FixtureFileResponse, opts?: FixtureOpts): this {\n return this.on({ toolName: name }, response, opts);\n }\n\n onToolResult(id: string, response: FixtureFileResponse, opts?: FixtureOpts): this {\n return this.on({ toolCallId: id }, response, opts);\n }\n\n onTurn(\n turn: number,\n pattern: string | RegExp,\n response: FixtureFileResponse,\n opts?: FixtureOpts,\n ): this {\n return this.on({ userMessage: pattern, turnIndex: turn }, response, opts);\n }\n\n onImage(prompt: string | RegExp, response: ImageResponse): this {\n return this.addFixture({\n match: { userMessage: prompt, endpoint: \"image\" },\n response,\n });\n }\n\n onSpeech(input: string | RegExp, response: AudioResponse): this {\n return this.addFixture({\n match: { userMessage: input, endpoint: \"speech\" },\n response,\n });\n }\n\n onTranscription(response: TranscriptionResponse): this {\n return this.addFixture({\n match: { endpoint: \"transcription\" },\n response,\n });\n }\n\n onVideo(prompt: string | RegExp, response: VideoResponse): this {\n return this.addFixture({\n match: { userMessage: prompt, endpoint: \"video\" },\n response,\n });\n }\n\n onAudio(input: string | RegExp, response: AudioResponse): this {\n return this.addFixture({ match: { userMessage: input }, response });\n }\n\n onSoundEffect(text: string | RegExp, response: AudioResponse): this {\n return this.addFixture({\n match: { userMessage: text, endpoint: \"audio-gen\" },\n response,\n });\n }\n\n onMusic(prompt: string | RegExp, response: AudioResponse): this {\n return this.addFixture({\n match: { userMessage: prompt, endpoint: \"audio-gen\" },\n response,\n });\n }\n\n onFalAudio(prompt: string | RegExp, response: AudioResponse, model?: string): this {\n return this.addFixture({\n match: { userMessage: prompt, endpoint: \"fal-audio\", ...(model ? { model } : {}) },\n response,\n });\n }\n\n // fal.queue.* is the dominant client API; onFalRun is a sync alias.\n onFalQueue(modelOrPrompt: string | RegExp, response: unknown, opts?: FixtureOpts): this {\n return this.addFixture({\n match: { model: modelOrPrompt, endpoint: \"fal\" },\n response: { json: response },\n ...opts,\n });\n }\n\n onFalRun(modelOrPrompt: string | RegExp, response: unknown, opts?: FixtureOpts): this {\n return this.onFalQueue(modelOrPrompt, response, opts);\n }\n\n // ---- Service mock convenience methods ----\n\n onSearch(pattern: string | RegExp, results: SearchResult[]): this {\n this.searchFixtures.push({ match: pattern, results });\n return this;\n }\n\n onRerank(pattern: string | RegExp, results: RerankResult[]): this {\n this.rerankFixtures.push({ match: pattern, results });\n return this;\n }\n\n onModerate(pattern: string | RegExp, result: ModerationResult): this {\n this.moderationFixtures.push({ match: pattern, result });\n return this;\n }\n\n /**\n * Queue a one-shot error that will be returned for the next matching\n * request, then automatically removed. Implemented as an internal fixture\n * with a `predicate` that always matches (so it fires first) and spliced\n * at the front of the fixture list.\n */\n nextRequestError(\n status: number,\n errorBody?: { message?: string; type?: string; code?: string },\n ): this {\n const errorResponse: FixtureResponse = {\n error: {\n message: errorBody?.message ?? \"Injected error\",\n type: errorBody?.type ?? \"server_error\",\n code: errorBody?.code,\n },\n status,\n };\n const fixture: Fixture = {\n match: { predicate: () => true },\n response: errorResponse,\n };\n // Insert at front so it matches before everything else\n this.fixtures.unshift(fixture);\n // Remove after first match — the journal records it so tests can assert\n const original = fixture.match.predicate!;\n fixture.match.predicate = (req) => {\n const result = original(req);\n if (result) {\n // Remove synchronously on first match to prevent race conditions\n const idx = this.fixtures.indexOf(fixture);\n if (idx !== -1) this.fixtures.splice(idx, 1);\n }\n return result;\n };\n return this;\n }\n\n // ---- Mounts ----\n\n mount(path: string, handler: Mountable): this {\n this.mounts.push({ path, handler });\n\n // If server is already running, wire up journal, registry, and baseUrl immediately\n // so late mounts behave identically to pre-start mounts.\n if (this.serverInstance) {\n if (handler.setJournal) handler.setJournal(this.serverInstance.journal);\n if (handler.setBaseUrl) handler.setBaseUrl(this.serverInstance.url + path);\n const registry = this.serverInstance.defaults.registry;\n if (registry && handler.setRegistry) handler.setRegistry(registry);\n }\n\n return this;\n }\n\n // ---- Journal proxies ----\n\n getRequests(): import(\"./types.js\").JournalEntry[] {\n return this.journal.getAll();\n }\n\n getLastRequest(): import(\"./types.js\").JournalEntry | null {\n return this.journal.getLast();\n }\n\n clearRequests(): void {\n this.journal.clear();\n }\n\n resetMatchCounts(testId?: string): this {\n if (this.serverInstance) {\n this.serverInstance.journal.clearMatchCounts(testId);\n }\n return this;\n }\n\n // ---- Chaos ----\n\n setChaos(config: ChaosConfig): this {\n this.options.chaos = config;\n return this;\n }\n\n clearChaos(): this {\n delete this.options.chaos;\n return this;\n }\n\n // ---- Recording ----\n\n enableRecording(config: RecordConfig): this {\n this.options.record = config;\n return this;\n }\n\n disableRecording(): this {\n delete this.options.record;\n return this;\n }\n\n // ---- Reset ----\n\n reset(): this {\n this.clearFixtures();\n this.searchFixtures.length = 0;\n this.rerankFixtures.length = 0;\n this.moderationFixtures.length = 0;\n falJobs.clear();\n falQueueStates.clear();\n if (this.serverInstance) {\n this.serverInstance.journal.clear();\n this.serverInstance.videoStates.clear();\n }\n return this;\n }\n\n // ---- Server lifecycle ----\n\n async start(): Promise<string> {\n if (this.serverInstance) {\n throw new Error(\"Server already started\");\n }\n this.serverInstance = await createServer(this.fixtures, this.options, this.mounts, {\n search: this.searchFixtures,\n rerank: this.rerankFixtures,\n moderation: this.moderationFixtures,\n });\n return this.serverInstance.url;\n }\n\n async stop(): Promise<void> {\n if (!this.serverInstance) {\n throw new Error(\"Server not started\");\n }\n const { server } = this.serverInstance;\n await new Promise<void>((resolve, reject) => {\n server.close((err: Error | undefined) => (err ? reject(err) : resolve()));\n });\n this.serverInstance = null;\n }\n\n // ---- Accessors ----\n\n get journal(): Journal {\n if (!this.serverInstance) {\n throw new Error(\"Server not started\");\n }\n return this.serverInstance.journal;\n }\n\n get url(): string {\n if (!this.serverInstance) {\n throw new Error(\"Server not started\");\n }\n return this.serverInstance.url;\n }\n\n get baseUrl(): string {\n return this.url;\n }\n\n get port(): number {\n const parsed = new URL(this.url); // this.url throws if not started\n if (!parsed.port) {\n throw new Error(`Server URL has no explicit port: ${this.url}`);\n }\n return parseInt(parsed.port, 10);\n }\n\n // ---- Static factory ----\n\n static async create(options?: MockServerOptions): Promise<LLMock> {\n const instance = new LLMock(options);\n await instance.start();\n return instance;\n }\n}\n"],"mappings":"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"}
package/dist/llmock.d.cts CHANGED
@@ -37,6 +37,12 @@ declare class LLMock {
37
37
  onSpeech(input: string | RegExp, response: AudioResponse): this;
38
38
  onTranscription(response: TranscriptionResponse): this;
39
39
  onVideo(prompt: string | RegExp, response: VideoResponse): this;
40
+ onAudio(input: string | RegExp, response: AudioResponse): this;
41
+ onSoundEffect(text: string | RegExp, response: AudioResponse): this;
42
+ onMusic(prompt: string | RegExp, response: AudioResponse): this;
43
+ onFalAudio(prompt: string | RegExp, response: AudioResponse, model?: string): this;
44
+ onFalQueue(modelOrPrompt: string | RegExp, response: unknown, opts?: FixtureOpts): this;
45
+ onFalRun(modelOrPrompt: string | RegExp, response: unknown, opts?: FixtureOpts): this;
40
46
  onSearch(pattern: string | RegExp, results: SearchResult[]): this;
41
47
  onRerank(pattern: string | RegExp, results: RerankResult[]): this;
42
48
  onModerate(pattern: string | RegExp, result: ModerationResult): this;
@@ -1 +1 @@
1
- {"version":3,"file":"llmock.d.cts","names":[],"sources":["../src/llmock.ts"],"sourcesContent":[],"mappings":"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"}
1
+ {"version":3,"file":"llmock.d.cts","names":[],"sources":["../src/llmock.ts"],"sourcesContent":[],"mappings":"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"}
package/dist/llmock.d.ts CHANGED
@@ -37,6 +37,12 @@ declare class LLMock {
37
37
  onSpeech(input: string | RegExp, response: AudioResponse): this;
38
38
  onTranscription(response: TranscriptionResponse): this;
39
39
  onVideo(prompt: string | RegExp, response: VideoResponse): this;
40
+ onAudio(input: string | RegExp, response: AudioResponse): this;
41
+ onSoundEffect(text: string | RegExp, response: AudioResponse): this;
42
+ onMusic(prompt: string | RegExp, response: AudioResponse): this;
43
+ onFalAudio(prompt: string | RegExp, response: AudioResponse, model?: string): this;
44
+ onFalQueue(modelOrPrompt: string | RegExp, response: unknown, opts?: FixtureOpts): this;
45
+ onFalRun(modelOrPrompt: string | RegExp, response: unknown, opts?: FixtureOpts): this;
40
46
  onSearch(pattern: string | RegExp, results: SearchResult[]): this;
41
47
  onRerank(pattern: string | RegExp, results: RerankResult[]): this;
42
48
  onModerate(pattern: string | RegExp, result: ModerationResult): this;
@@ -1 +1 @@
1
- {"version":3,"file":"llmock.d.ts","names":[],"sources":["../src/llmock.ts"],"sourcesContent":[],"mappings":"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"}
1
+ {"version":3,"file":"llmock.d.ts","names":[],"sources":["../src/llmock.ts"],"sourcesContent":[],"mappings":"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"}
package/dist/llmock.js CHANGED
@@ -1,4 +1,6 @@
1
1
  import { entryToFixture, loadFixtureFile, loadFixturesFromDir, normalizeResponse, validateFixtures } from "./fixture-loader.js";
2
+ import { falJobs } from "./fal-audio.js";
3
+ import { falQueueStates } from "./fal.js";
2
4
  import { createServer } from "./server.js";
3
5
 
4
6
  //#region src/llmock.ts
@@ -116,6 +118,53 @@ var LLMock = class LLMock {
116
118
  response
117
119
  });
118
120
  }
121
+ onAudio(input, response) {
122
+ return this.addFixture({
123
+ match: { userMessage: input },
124
+ response
125
+ });
126
+ }
127
+ onSoundEffect(text, response) {
128
+ return this.addFixture({
129
+ match: {
130
+ userMessage: text,
131
+ endpoint: "audio-gen"
132
+ },
133
+ response
134
+ });
135
+ }
136
+ onMusic(prompt, response) {
137
+ return this.addFixture({
138
+ match: {
139
+ userMessage: prompt,
140
+ endpoint: "audio-gen"
141
+ },
142
+ response
143
+ });
144
+ }
145
+ onFalAudio(prompt, response, model) {
146
+ return this.addFixture({
147
+ match: {
148
+ userMessage: prompt,
149
+ endpoint: "fal-audio",
150
+ ...model ? { model } : {}
151
+ },
152
+ response
153
+ });
154
+ }
155
+ onFalQueue(modelOrPrompt, response, opts) {
156
+ return this.addFixture({
157
+ match: {
158
+ model: modelOrPrompt,
159
+ endpoint: "fal"
160
+ },
161
+ response: { json: response },
162
+ ...opts
163
+ });
164
+ }
165
+ onFalRun(modelOrPrompt, response, opts) {
166
+ return this.onFalQueue(modelOrPrompt, response, opts);
167
+ }
119
168
  onSearch(pattern, results) {
120
169
  this.searchFixtures.push({
121
170
  match: pattern,
@@ -159,10 +208,10 @@ var LLMock = class LLMock {
159
208
  const original = fixture.match.predicate;
160
209
  fixture.match.predicate = (req) => {
161
210
  const result = original(req);
162
- if (result) queueMicrotask(() => {
211
+ if (result) {
163
212
  const idx = this.fixtures.indexOf(fixture);
164
213
  if (idx !== -1) this.fixtures.splice(idx, 1);
165
- });
214
+ }
166
215
  return result;
167
216
  };
168
217
  return this;
@@ -214,6 +263,8 @@ var LLMock = class LLMock {
214
263
  this.searchFixtures.length = 0;
215
264
  this.rerankFixtures.length = 0;
216
265
  this.moderationFixtures.length = 0;
266
+ falJobs.clear();
267
+ falQueueStates.clear();
217
268
  if (this.serverInstance) {
218
269
  this.serverInstance.journal.clear();
219
270
  this.serverInstance.videoStates.clear();