@copilotkit/aimock 1.42.0 → 1.43.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.
- package/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +1 -1
- package/CHANGELOG.md +56 -0
- package/README.md +102 -16
- package/dist/agui-mock.cjs +1 -1
- package/dist/agui-mock.cjs.map +1 -1
- package/dist/agui-mock.d.cts.map +1 -1
- package/dist/agui-mock.d.ts.map +1 -1
- package/dist/agui-mock.js +1 -1
- package/dist/agui-mock.js.map +1 -1
- package/dist/agui-recorder.cjs +33 -11
- package/dist/agui-recorder.cjs.map +1 -1
- package/dist/agui-recorder.d.cts +10 -1
- package/dist/agui-recorder.d.cts.map +1 -1
- package/dist/agui-recorder.d.ts +10 -1
- package/dist/agui-recorder.d.ts.map +1 -1
- package/dist/agui-recorder.js +33 -11
- package/dist/agui-recorder.js.map +1 -1
- package/dist/agui-types.d.cts +1 -0
- package/dist/agui-types.d.cts.map +1 -1
- package/dist/agui-types.d.ts +1 -0
- package/dist/agui-types.d.ts.map +1 -1
- package/dist/aimock-cli.cjs +38 -10
- package/dist/aimock-cli.cjs.map +1 -1
- package/dist/aimock-cli.d.cts +5 -0
- package/dist/aimock-cli.d.cts.map +1 -1
- package/dist/aimock-cli.d.ts +5 -0
- package/dist/aimock-cli.d.ts.map +1 -1
- package/dist/aimock-cli.js +38 -10
- package/dist/aimock-cli.js.map +1 -1
- package/dist/batches.cjs +458 -0
- package/dist/batches.cjs.map +1 -0
- package/dist/batches.d.cts +57 -0
- package/dist/batches.d.cts.map +1 -0
- package/dist/batches.d.ts +57 -0
- package/dist/batches.d.ts.map +1 -0
- package/dist/batches.js +453 -0
- package/dist/batches.js.map +1 -0
- package/dist/bedrock-converse.cjs +12 -8
- package/dist/bedrock-converse.cjs.map +1 -1
- package/dist/bedrock-converse.d.cts.map +1 -1
- package/dist/bedrock-converse.d.ts.map +1 -1
- package/dist/bedrock-converse.js +14 -10
- package/dist/bedrock-converse.js.map +1 -1
- package/dist/bedrock.cjs +10 -8
- package/dist/bedrock.cjs.map +1 -1
- package/dist/bedrock.d.cts.map +1 -1
- package/dist/bedrock.d.ts.map +1 -1
- package/dist/bedrock.js +12 -10
- package/dist/bedrock.js.map +1 -1
- package/dist/byteplus-video.cjs +3 -3
- package/dist/byteplus-video.cjs.map +1 -1
- package/dist/byteplus-video.js +4 -4
- package/dist/byteplus-video.js.map +1 -1
- package/dist/chaos.cjs +622 -72
- package/dist/chaos.cjs.map +1 -1
- package/dist/chaos.d.cts +164 -7
- package/dist/chaos.d.cts.map +1 -1
- package/dist/chaos.d.ts +164 -7
- package/dist/chaos.d.ts.map +1 -1
- package/dist/chaos.js +613 -74
- package/dist/chaos.js.map +1 -1
- package/dist/cli.cjs +42 -23
- package/dist/cli.cjs.map +1 -1
- package/dist/cli.js +42 -23
- package/dist/cli.js.map +1 -1
- package/dist/cohere.cjs +10 -8
- package/dist/cohere.cjs.map +1 -1
- package/dist/cohere.d.cts.map +1 -1
- package/dist/cohere.d.ts.map +1 -1
- package/dist/cohere.js +12 -10
- package/dist/cohere.js.map +1 -1
- package/dist/config-loader.d.cts.map +1 -1
- package/dist/config-loader.d.ts.map +1 -1
- package/dist/convert.cjs +1 -1
- package/dist/convert.cjs.map +1 -1
- package/dist/convert.js +1 -1
- package/dist/convert.js.map +1 -1
- package/dist/elevenlabs-audio.cjs +3 -3
- package/dist/elevenlabs-audio.cjs.map +1 -1
- package/dist/elevenlabs-audio.js +4 -4
- package/dist/elevenlabs-audio.js.map +1 -1
- package/dist/elevenlabs-voice.cjs +1053 -0
- package/dist/elevenlabs-voice.cjs.map +1 -0
- package/dist/elevenlabs-voice.d.cts +72 -0
- package/dist/elevenlabs-voice.d.cts.map +1 -0
- package/dist/elevenlabs-voice.d.ts +72 -0
- package/dist/elevenlabs-voice.d.ts.map +1 -0
- package/dist/elevenlabs-voice.js +1048 -0
- package/dist/elevenlabs-voice.js.map +1 -0
- package/dist/embeddings.cjs +8 -4
- package/dist/embeddings.cjs.map +1 -1
- package/dist/embeddings.d.cts.map +1 -1
- package/dist/embeddings.d.ts.map +1 -1
- package/dist/embeddings.js +9 -5
- package/dist/embeddings.js.map +1 -1
- package/dist/fal-audio.cjs +3 -3
- package/dist/fal-audio.cjs.map +1 -1
- package/dist/fal-audio.js +4 -4
- package/dist/fal-audio.js.map +1 -1
- package/dist/fal.cjs +28 -4
- package/dist/fal.cjs.map +1 -1
- package/dist/fal.d.cts +16 -1
- package/dist/fal.d.cts.map +1 -1
- package/dist/fal.d.ts +16 -1
- package/dist/fal.d.ts.map +1 -1
- package/dist/fal.js +28 -5
- package/dist/fal.js.map +1 -1
- package/dist/files.cjs +1071 -0
- package/dist/files.cjs.map +1 -0
- package/dist/files.d.cts +68 -0
- package/dist/files.d.cts.map +1 -0
- package/dist/files.d.ts +68 -0
- package/dist/files.d.ts.map +1 -0
- package/dist/files.js +1059 -0
- package/dist/files.js.map +1 -0
- package/dist/fine-tuning.cjs +1051 -0
- package/dist/fine-tuning.cjs.map +1 -0
- package/dist/fine-tuning.d.cts +96 -0
- package/dist/fine-tuning.d.cts.map +1 -0
- package/dist/fine-tuning.d.ts +96 -0
- package/dist/fine-tuning.d.ts.map +1 -0
- package/dist/fine-tuning.js +1044 -0
- package/dist/fine-tuning.js.map +1 -0
- package/dist/fixture-loader.cjs +0 -0
- package/dist/fixture-loader.cjs.map +1 -1
- package/dist/fixture-loader.d.cts +37 -5
- package/dist/fixture-loader.d.cts.map +1 -1
- package/dist/fixture-loader.d.ts +37 -5
- package/dist/fixture-loader.d.ts.map +1 -1
- package/dist/fixture-loader.js +0 -0
- package/dist/fixture-loader.js.map +1 -1
- package/dist/gemini-embeddings.cjs +2 -2
- package/dist/gemini-embeddings.cjs.map +1 -1
- package/dist/gemini-embeddings.js +3 -3
- package/dist/gemini-embeddings.js.map +1 -1
- package/dist/gemini-interactions.cjs +13 -7
- package/dist/gemini-interactions.cjs.map +1 -1
- package/dist/gemini-interactions.d.cts.map +1 -1
- package/dist/gemini-interactions.d.ts.map +1 -1
- package/dist/gemini-interactions.js +15 -9
- package/dist/gemini-interactions.js.map +1 -1
- package/dist/gemini.cjs +11 -7
- package/dist/gemini.cjs.map +1 -1
- package/dist/gemini.d.cts.map +1 -1
- package/dist/gemini.d.ts.map +1 -1
- package/dist/gemini.js +13 -9
- package/dist/gemini.js.map +1 -1
- package/dist/grok-video.cjs +14 -14
- package/dist/grok-video.cjs.map +1 -1
- package/dist/grok-video.js +15 -15
- package/dist/grok-video.js.map +1 -1
- package/dist/helpers.cjs +229 -7
- package/dist/helpers.cjs.map +1 -1
- package/dist/helpers.d.cts +38 -2
- package/dist/helpers.d.cts.map +1 -1
- package/dist/helpers.d.ts +38 -2
- package/dist/helpers.d.ts.map +1 -1
- package/dist/helpers.js +221 -8
- package/dist/helpers.js.map +1 -1
- package/dist/images.cjs +54 -123
- package/dist/images.cjs.map +1 -1
- package/dist/images.d.cts.map +1 -1
- package/dist/images.d.ts.map +1 -1
- package/dist/images.js +55 -124
- package/dist/images.js.map +1 -1
- package/dist/index.cjs +41 -8
- package/dist/index.d.cts +12 -7
- package/dist/index.d.ts +12 -7
- package/dist/index.js +14 -10
- package/dist/jest.cjs +14 -7
- package/dist/jest.cjs.map +1 -1
- package/dist/jest.d.cts +3 -2
- package/dist/jest.d.cts.map +1 -1
- package/dist/jest.d.ts +3 -2
- package/dist/jest.d.ts.map +1 -1
- package/dist/jest.js +14 -7
- package/dist/jest.js.map +1 -1
- package/dist/journal.cjs +41 -4
- package/dist/journal.cjs.map +1 -1
- package/dist/journal.d.cts +44 -3
- package/dist/journal.d.cts.map +1 -1
- package/dist/journal.d.ts +44 -3
- package/dist/journal.d.ts.map +1 -1
- package/dist/journal.js +41 -5
- package/dist/journal.js.map +1 -1
- package/dist/live-fixture.cjs +1192 -0
- package/dist/live-fixture.cjs.map +1 -0
- package/dist/live-fixture.js +1187 -0
- package/dist/live-fixture.js.map +1 -0
- package/dist/live-recorder.cjs +256 -0
- package/dist/live-recorder.cjs.map +1 -0
- package/dist/live-recorder.js +254 -0
- package/dist/live-recorder.js.map +1 -0
- package/dist/live-replay.cjs +286 -0
- package/dist/live-replay.cjs.map +1 -0
- package/dist/live-replay.js +285 -0
- package/dist/live-replay.js.map +1 -0
- package/dist/live-sanitize.cjs +196 -0
- package/dist/live-sanitize.cjs.map +1 -0
- package/dist/live-sanitize.js +196 -0
- package/dist/live-sanitize.js.map +1 -0
- package/dist/live-types.d.cts +71 -0
- package/dist/live-types.d.cts.map +1 -0
- package/dist/live-types.d.ts +71 -0
- package/dist/live-types.d.ts.map +1 -0
- package/dist/llmock.cjs +52 -41
- package/dist/llmock.cjs.map +1 -1
- package/dist/llmock.d.cts +16 -5
- package/dist/llmock.d.cts.map +1 -1
- package/dist/llmock.d.ts +16 -5
- package/dist/llmock.d.ts.map +1 -1
- package/dist/llmock.js +53 -42
- package/dist/llmock.js.map +1 -1
- package/dist/messages.cjs +11 -7
- package/dist/messages.cjs.map +1 -1
- package/dist/messages.d.cts.map +1 -1
- package/dist/messages.d.ts.map +1 -1
- package/dist/messages.js +13 -9
- package/dist/messages.js.map +1 -1
- package/dist/metrics.cjs +258 -5
- package/dist/metrics.cjs.map +1 -1
- package/dist/metrics.d.cts +3 -1
- package/dist/metrics.d.cts.map +1 -1
- package/dist/metrics.d.ts +3 -1
- package/dist/metrics.d.ts.map +1 -1
- package/dist/metrics.js +255 -6
- package/dist/metrics.js.map +1 -1
- package/dist/moderation.cjs +10 -1
- package/dist/moderation.cjs.map +1 -1
- package/dist/moderation.d.cts.map +1 -1
- package/dist/moderation.d.ts.map +1 -1
- package/dist/moderation.js +10 -1
- package/dist/moderation.js.map +1 -1
- package/dist/ollama.cjs +5 -5
- package/dist/ollama.cjs.map +1 -1
- package/dist/ollama.js +6 -6
- package/dist/ollama.js.map +1 -1
- package/dist/openrouter-video.cjs +5 -5
- package/dist/openrouter-video.cjs.map +1 -1
- package/dist/openrouter-video.js +6 -6
- package/dist/openrouter-video.js.map +1 -1
- package/dist/recorder.cjs +45 -9
- package/dist/recorder.cjs.map +1 -1
- package/dist/recorder.d.cts.map +1 -1
- package/dist/recorder.d.ts.map +1 -1
- package/dist/recorder.js +43 -11
- package/dist/recorder.js.map +1 -1
- package/dist/responses.cjs +4 -3
- package/dist/responses.cjs.map +1 -1
- package/dist/responses.js +5 -5
- package/dist/responses.js.map +1 -1
- package/dist/router.cjs +20 -33
- package/dist/router.cjs.map +1 -1
- package/dist/router.d.cts +4 -1
- package/dist/router.d.cts.map +1 -1
- package/dist/router.d.ts +4 -1
- package/dist/router.d.ts.map +1 -1
- package/dist/router.js +20 -34
- package/dist/router.js.map +1 -1
- package/dist/server.cjs +701 -625
- package/dist/server.cjs.map +1 -1
- package/dist/server.d.cts +1 -0
- package/dist/server.d.cts.map +1 -1
- package/dist/server.d.ts +1 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +704 -628
- package/dist/server.js.map +1 -1
- package/dist/speech.cjs +2 -2
- package/dist/speech.cjs.map +1 -1
- package/dist/speech.js +3 -3
- package/dist/speech.js.map +1 -1
- package/dist/transcription.cjs +4 -4
- package/dist/transcription.cjs.map +1 -1
- package/dist/transcription.js +5 -5
- package/dist/transcription.js.map +1 -1
- package/dist/types.d.cts +119 -16
- package/dist/types.d.cts.map +1 -1
- package/dist/types.d.ts +119 -16
- package/dist/types.d.ts.map +1 -1
- package/dist/validate-cli.cjs +925 -0
- package/dist/validate-cli.cjs.map +1 -0
- package/dist/validate-cli.js +924 -0
- package/dist/validate-cli.js.map +1 -0
- package/dist/vector-types.d.cts.map +1 -1
- package/dist/vector-types.d.ts.map +1 -1
- package/dist/veo-video.cjs +13 -13
- package/dist/veo-video.cjs.map +1 -1
- package/dist/veo-video.js +14 -14
- package/dist/veo-video.js.map +1 -1
- package/dist/video.cjs +4 -4
- package/dist/video.cjs.map +1 -1
- package/dist/video.d.cts +1 -1
- package/dist/video.d.cts.map +1 -1
- package/dist/video.d.ts +1 -1
- package/dist/video.d.ts.map +1 -1
- package/dist/video.js +5 -5
- package/dist/video.js.map +1 -1
- package/dist/vitest.cjs +13 -6
- package/dist/vitest.cjs.map +1 -1
- package/dist/vitest.d.cts +2 -1
- package/dist/vitest.d.cts.map +1 -1
- package/dist/vitest.d.ts +2 -1
- package/dist/vitest.d.ts.map +1 -1
- package/dist/vitest.js +14 -7
- package/dist/vitest.js.map +1 -1
- package/dist/watcher.cjs +2 -1
- package/dist/watcher.cjs.map +1 -1
- package/dist/watcher.js +2 -1
- package/dist/watcher.js.map +1 -1
- package/dist/ws-framing.cjs +150 -35
- package/dist/ws-framing.cjs.map +1 -1
- package/dist/ws-framing.d.cts +18 -3
- package/dist/ws-framing.d.cts.map +1 -1
- package/dist/ws-framing.d.ts +18 -3
- package/dist/ws-framing.d.ts.map +1 -1
- package/dist/ws-framing.js +151 -36
- package/dist/ws-framing.js.map +1 -1
- package/dist/ws-gemini-live.cjs +2 -2
- package/dist/ws-gemini-live.d.ts +2 -2
- package/dist/ws-gemini-live.js +2 -2
- package/dist/ws-live.cjs +401 -0
- package/dist/ws-live.cjs.map +1 -0
- package/dist/ws-live.js +400 -0
- package/dist/ws-live.js.map +1 -0
- package/dist/ws-realtime.cjs +46 -2
- package/dist/ws-realtime.cjs.map +1 -1
- package/dist/ws-realtime.d.cts.map +1 -1
- package/dist/ws-realtime.d.ts +2 -2
- package/dist/ws-realtime.d.ts.map +1 -1
- package/dist/ws-realtime.js +46 -2
- package/dist/ws-realtime.js.map +1 -1
- package/dist/ws-responses.cjs +2 -2
- package/dist/ws-responses.js +2 -2
- package/dist/ws-upstream.cjs +118 -0
- package/dist/ws-upstream.cjs.map +1 -0
- package/dist/ws-upstream.js +115 -0
- package/dist/ws-upstream.js.map +1 -0
- package/fixtures/openai-live-client.json +390 -0
- package/fixtures/openai-live-managed.json +709 -0
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"live-fixture.js","names":[],"sources":["../src/live-fixture.ts"],"sourcesContent":["import type {\n LiveFixtureResponse,\n LiveJson,\n LiveObject,\n LiveOptions,\n LivePosition,\n LiveTranscript,\n} from \"./live-types.js\";\n\nexport const DEFAULT_LIVE_OPTIONS = Object.freeze({\n maxSessions: 16,\n maxMessageBytes: 1024 * 1024,\n maxBufferedBytes: 2 * 1024 * 1024,\n maxWriteBytes: 1024 * 1024,\n maxDecodedAudioBytes: 16 * 1024 * 1024,\n maxDurationMs: 120_000,\n idleTimeoutMs: 30_000,\n mismatchTimeoutMs: 30_000,\n});\n\n// Frozen from independently reviewed contract.v3.json (a2ccf050b464c2ca0cfb2f8e880b4976\n// 17d2a028c5147662a1accbcbacd6339d). Additional JSON fields remain literal.\ninterface Shape {\n type?: string | string[];\n const?: LiveJson;\n enum?: LiveJson[];\n $ref?: string;\n anyOf?: Shape[];\n properties?: { [key: string]: Shape };\n required?: string[];\n items?: Shape;\n additionalProperties?: boolean;\n}\nconst DEFINITIONS: { [key: string]: Shape } = {\n Pcm24: {\n type: \"object\",\n properties: { type: { const: \"audio/pcm\" }, rate: { const: 24000 } },\n required: [\"type\", \"rate\"],\n additionalProperties: true,\n },\n Voice: {\n anyOf: [\n { type: \"string\" },\n {\n type: \"object\",\n properties: { id: { type: \"string\" } },\n required: [\"id\"],\n additionalProperties: true,\n },\n ],\n },\n Audio: {\n type: \"object\",\n properties: {\n format: { $ref: \"#/$defs/Pcm24\" },\n output: {\n type: \"object\",\n properties: { voice: { $ref: \"#/$defs/Voice\" } },\n required: [],\n additionalProperties: true,\n },\n },\n required: [],\n additionalProperties: true,\n },\n FunctionTool: {\n type: \"object\",\n properties: {\n type: { const: \"function\" },\n name: { type: \"string\" },\n description: { type: [\"string\", \"null\"] },\n parameters: { type: [\"object\", \"null\"] },\n strict: { type: [\"boolean\", \"null\"] },\n },\n required: [\"type\", \"name\"],\n additionalProperties: true,\n },\n Backend: {\n type: \"object\",\n properties: {\n model: { type: \"string\" },\n instructions: { type: [\"string\", \"null\"] },\n max_output_tokens: { type: [\"number\", \"null\"] },\n parallel_tool_calls: { type: [\"boolean\", \"null\"] },\n reasoning: {\n anyOf: [\n { type: \"null\" },\n {\n type: \"object\",\n properties: {\n effort: { enum: [\"none\", \"minimal\", \"low\", \"medium\", \"high\", \"xhigh\", null] },\n summary: { enum: [\"concise\", \"detailed\", \"auto\", null] },\n },\n required: [],\n additionalProperties: true,\n },\n ],\n },\n service_tier: {\n enum: [\"auto\", \"default\", \"fast_tier_temp_pilot\", \"flex\", \"priority\", \"ultrafast\", null],\n },\n text: {\n anyOf: [\n { type: \"null\" },\n {\n type: \"object\",\n properties: { verbosity: { enum: [\"low\", \"medium\", \"high\", null] } },\n required: [],\n additionalProperties: true,\n },\n ],\n },\n tool_choice: {\n anyOf: [\n { enum: [\"auto\", \"none\", \"required\"] },\n {\n type: \"object\",\n properties: { type: { const: \"function\" }, name: { type: \"string\" } },\n required: [\"type\", \"name\"],\n additionalProperties: true,\n },\n {\n type: \"object\",\n properties: {\n type: { const: \"mcp\" },\n name: { type: \"string\" },\n server_label: { type: \"string\" },\n },\n required: [\"type\", \"name\", \"server_label\"],\n additionalProperties: true,\n },\n ],\n },\n tools: {\n type: \"array\",\n items: {\n anyOf: [\n { $ref: \"#/$defs/FunctionTool\" },\n {\n type: \"object\",\n properties: { type: { const: \"web_search\" } },\n required: [\"type\"],\n additionalProperties: true,\n },\n ],\n },\n },\n },\n required: [\"model\"],\n additionalProperties: true,\n },\n BackendPatch: {\n type: \"object\",\n properties: {\n model: { type: \"string\" },\n instructions: { type: [\"string\", \"null\"] },\n max_output_tokens: { type: [\"number\", \"null\"] },\n parallel_tool_calls: { type: [\"boolean\", \"null\"] },\n reasoning: {\n anyOf: [\n { type: \"null\" },\n {\n type: \"object\",\n properties: {\n effort: { enum: [\"none\", \"minimal\", \"low\", \"medium\", \"high\", \"xhigh\", null] },\n summary: { enum: [\"concise\", \"detailed\", \"auto\", null] },\n },\n required: [],\n additionalProperties: true,\n },\n ],\n },\n service_tier: {\n enum: [\"auto\", \"default\", \"fast_tier_temp_pilot\", \"flex\", \"priority\", \"ultrafast\", null],\n },\n text: {\n anyOf: [\n { type: \"null\" },\n {\n type: \"object\",\n properties: { verbosity: { enum: [\"low\", \"medium\", \"high\", null] } },\n required: [],\n additionalProperties: true,\n },\n ],\n },\n tool_choice: {\n anyOf: [\n { enum: [\"auto\", \"none\", \"required\"] },\n {\n type: \"object\",\n properties: { type: { const: \"function\" }, name: { type: \"string\" } },\n required: [\"type\", \"name\"],\n additionalProperties: true,\n },\n {\n type: \"object\",\n properties: {\n type: { const: \"mcp\" },\n name: { type: \"string\" },\n server_label: { type: \"string\" },\n },\n required: [\"type\", \"name\", \"server_label\"],\n additionalProperties: true,\n },\n ],\n },\n tools: {\n type: \"array\",\n items: {\n anyOf: [\n { $ref: \"#/$defs/FunctionTool\" },\n {\n type: \"object\",\n properties: { type: { const: \"web_search\" } },\n required: [\"type\"],\n additionalProperties: true,\n },\n ],\n },\n },\n },\n required: [],\n additionalProperties: true,\n },\n Delegation: {\n anyOf: [\n { type: \"null\" },\n {\n type: \"object\",\n properties: { type: { const: \"client\" } },\n required: [\"type\"],\n additionalProperties: true,\n },\n {\n type: \"object\",\n properties: { type: { const: \"responses\" }, responses: { $ref: \"#/$defs/Backend\" } },\n required: [\"type\", \"responses\"],\n additionalProperties: true,\n },\n ],\n },\n DelegationPatch: {\n anyOf: [\n { type: \"null\" },\n {\n type: \"object\",\n properties: { type: { const: \"client\" } },\n required: [\"type\"],\n additionalProperties: true,\n },\n {\n type: \"object\",\n properties: { type: { const: \"responses\" }, responses: { $ref: \"#/$defs/BackendPatch\" } },\n required: [\"type\"],\n additionalProperties: true,\n },\n ],\n },\n SessionConfig: {\n type: \"object\",\n properties: {\n model: { const: \"gpt-live-1\" },\n audio: { $ref: \"#/$defs/Audio\" },\n delegation: { $ref: \"#/$defs/Delegation\" },\n instructions: { type: [\"string\", \"null\"] },\n store: { type: \"boolean\" },\n input: { type: \"array\", items: { type: \"object\" } },\n client: { type: \"object\" },\n },\n required: [\"model\"],\n additionalProperties: true,\n },\n SessionResource: {\n type: \"object\",\n properties: {\n model: { const: \"gpt-live-1\" },\n audio: { $ref: \"#/$defs/Audio\" },\n delegation: { $ref: \"#/$defs/Delegation\" },\n instructions: { type: [\"string\", \"null\"] },\n store: { type: \"boolean\" },\n input: { type: \"array\", items: { type: \"object\" } },\n client: { type: \"object\" },\n id: { type: \"string\" },\n expires_at: { type: \"number\" },\n status: { const: \"active\" },\n },\n required: [\"id\", \"expires_at\", \"model\", \"status\"],\n additionalProperties: true,\n },\n SessionPatch: {\n type: \"object\",\n properties: { delegation: { $ref: \"#/$defs/DelegationPatch\" } },\n required: [],\n additionalProperties: true,\n },\n Usage: {\n type: \"object\",\n properties: { seconds: { type: \"number\" } },\n required: [\"seconds\"],\n additionalProperties: true,\n },\n DelegationEventBody: {\n type: \"object\",\n properties: {\n id: { type: \"string\" },\n type: { const: \"delegation\" },\n target: { enum: [\"client\", \"responses\"] },\n response_id: { type: \"string\" },\n },\n required: [\"id\", \"type\", \"target\"],\n additionalProperties: true,\n },\n Error: {\n type: \"object\",\n properties: {\n type: { type: \"string\" },\n code: { type: \"string\" },\n message: { type: \"string\" },\n param: { type: [\"string\", \"null\"] },\n client_event_id: { type: \"string\" },\n },\n required: [\"type\", \"code\", \"message\"],\n additionalProperties: true,\n },\n FunctionOutput: {\n type: \"object\",\n properties: {\n type: { const: \"function_call_output\" },\n call_id: { type: \"string\" },\n output: { type: \"string\" },\n id: { type: \"string\" },\n status: { enum: [\"in_progress\", \"completed\", \"incomplete\"] },\n },\n required: [\"type\", \"call_id\", \"output\"],\n additionalProperties: true,\n },\n NestedResponse: {\n type: \"object\",\n properties: {\n type: { type: \"string\" },\n sequence_number: { type: \"number\" },\n response: {\n type: \"object\",\n properties: {\n id: { type: \"string\" },\n previous_response_id: { type: [\"string\", \"null\"] },\n status: { type: \"string\" },\n usage: { type: [\"object\", \"null\"] },\n output: { type: \"array\" },\n instructions: { type: [\"string\", \"null\"] },\n tools: { type: \"array\" },\n },\n required: [],\n additionalProperties: true,\n },\n item: {\n type: \"object\",\n properties: {\n id: { type: \"string\" },\n type: { type: \"string\" },\n call_id: { type: \"string\" },\n arguments: { type: \"string\" },\n name: { type: \"string\" },\n status: { type: \"string\" },\n },\n required: [],\n additionalProperties: true,\n },\n item_id: { type: \"string\" },\n output_index: { type: \"number\" },\n delta: { type: \"string\" },\n arguments: { type: \"string\" },\n },\n required: [],\n additionalProperties: true,\n },\n};\nconst CLIENT_SCHEMAS: { [key: string]: Shape } = {\n \"session.start\": {\n type: \"object\",\n properties: {\n type: { const: \"session.start\" },\n event_id: { type: [\"string\", \"null\"] },\n session: { $ref: \"#/$defs/SessionConfig\" },\n },\n required: [\"type\", \"session\"],\n additionalProperties: true,\n },\n \"session.update\": {\n type: \"object\",\n properties: {\n type: { const: \"session.update\" },\n event_id: { type: [\"string\", \"null\"] },\n session: { $ref: \"#/$defs/SessionPatch\" },\n },\n required: [\"type\", \"session\"],\n additionalProperties: true,\n },\n \"session.input_audio.append\": {\n type: \"object\",\n properties: {\n type: { const: \"session.input_audio.append\" },\n event_id: { type: [\"string\", \"null\"] },\n audio: { type: \"string\" },\n },\n required: [\"type\", \"audio\"],\n additionalProperties: true,\n },\n \"response.item.create\": {\n type: \"object\",\n properties: {\n type: { const: \"response.item.create\" },\n event_id: { type: [\"string\", \"null\"] },\n item: { $ref: \"#/$defs/FunctionOutput\" },\n },\n required: [\"type\", \"item\"],\n additionalProperties: true,\n },\n \"response.create\": {\n type: \"object\",\n properties: { type: { const: \"response.create\" }, event_id: { type: [\"string\", \"null\"] } },\n required: [\"type\"],\n additionalProperties: true,\n },\n \"session.close\": {\n type: \"object\",\n properties: { type: { const: \"session.close\" }, event_id: { type: [\"string\", \"null\"] } },\n required: [\"type\"],\n additionalProperties: true,\n },\n \"session.instructions.append\": {\n type: \"object\",\n properties: {\n type: { const: \"session.instructions.append\" },\n event_id: { type: [\"string\", \"null\"] },\n content: { type: \"string\" },\n delegation_id: { type: [\"string\", \"null\"] },\n },\n required: [\"type\", \"content\", \"delegation_id\"],\n additionalProperties: true,\n },\n \"session.thinking.append\": {\n type: \"object\",\n properties: {\n type: { const: \"session.thinking.append\" },\n event_id: { type: [\"string\", \"null\"] },\n content: { type: \"string\" },\n delegation_id: { type: [\"string\", \"null\"] },\n },\n required: [\"type\", \"content\", \"delegation_id\"],\n additionalProperties: true,\n },\n \"session.commentary.append\": {\n type: \"object\",\n properties: {\n type: { const: \"session.commentary.append\" },\n event_id: { type: [\"string\", \"null\"] },\n content: { type: \"string\" },\n delegation_id: { type: [\"string\", \"null\"] },\n },\n required: [\"type\", \"content\", \"delegation_id\"],\n additionalProperties: true,\n },\n \"session.input_audio.mute\": {\n type: \"object\",\n properties: {\n type: { const: \"session.input_audio.mute\" },\n event_id: { type: [\"string\", \"null\"] },\n },\n required: [\"type\"],\n additionalProperties: true,\n },\n \"session.input_audio.unmute\": {\n type: \"object\",\n properties: {\n type: { const: \"session.input_audio.unmute\" },\n event_id: { type: [\"string\", \"null\"] },\n },\n required: [\"type\"],\n additionalProperties: true,\n },\n};\nconst SERVER_SCHEMAS: { [key: string]: Shape } = {\n \"session.started\": {\n type: \"object\",\n properties: {\n type: { const: \"session.started\" },\n event_id: { type: \"string\" },\n client_event_id: { type: \"string\" },\n session: { $ref: \"#/$defs/SessionResource\" },\n },\n required: [\"type\", \"event_id\", \"session\"],\n additionalProperties: true,\n },\n \"session.updated\": {\n type: \"object\",\n properties: {\n type: { const: \"session.updated\" },\n event_id: { type: \"string\" },\n client_event_id: { type: \"string\" },\n session: { $ref: \"#/$defs/SessionResource\" },\n },\n required: [\"type\", \"event_id\", \"session\"],\n additionalProperties: true,\n },\n \"session.closed\": {\n type: \"object\",\n properties: {\n type: { const: \"session.closed\" },\n event_id: { type: \"string\" },\n client_event_id: { type: \"string\" },\n session: { $ref: \"#/$defs/SessionResource\" },\n usage: { $ref: \"#/$defs/Usage\" },\n reason: {\n enum: [\"close_requested\", \"expired\", \"content\", \"remote_hangup\", \"connection_lost\"],\n },\n },\n required: [\"type\", \"event_id\", \"session\", \"usage\", \"reason\"],\n additionalProperties: true,\n },\n \"session.output_audio.delta\": {\n type: \"object\",\n properties: {\n type: { const: \"session.output_audio.delta\" },\n delta: { type: \"string\" },\n start_ms: { type: \"number\" },\n end_ms: { type: \"number\" },\n },\n required: [\"type\", \"delta\"],\n additionalProperties: true,\n },\n \"session.input_transcript.delta\": {\n type: \"object\",\n properties: {\n type: { const: \"session.input_transcript.delta\" },\n event_id: { type: \"string\" },\n client_event_id: { type: \"string\" },\n start_ms: { type: \"number\" },\n end_ms: { type: \"number\" },\n delta: { type: \"string\" },\n },\n required: [\"type\", \"event_id\", \"start_ms\", \"end_ms\", \"delta\"],\n additionalProperties: true,\n },\n \"session.output_transcript.delta\": {\n type: \"object\",\n properties: {\n type: { const: \"session.output_transcript.delta\" },\n event_id: { type: \"string\" },\n client_event_id: { type: \"string\" },\n start_ms: { type: \"number\" },\n end_ms: { type: \"number\" },\n delta: { type: \"string\" },\n },\n required: [\"type\", \"event_id\", \"start_ms\", \"end_ms\", \"delta\"],\n additionalProperties: true,\n },\n \"session.instructions.appended\": {\n type: \"object\",\n properties: {\n type: { const: \"session.instructions.appended\" },\n event_id: { type: \"string\" },\n client_event_id: { type: \"string\" },\n start_ms: { type: \"number\" },\n end_ms: { type: \"number\" },\n },\n required: [\"type\", \"event_id\", \"start_ms\", \"end_ms\"],\n additionalProperties: true,\n },\n \"session.thinking.appended\": {\n type: \"object\",\n properties: {\n type: { const: \"session.thinking.appended\" },\n event_id: { type: \"string\" },\n client_event_id: { type: \"string\" },\n start_ms: { type: \"number\" },\n end_ms: { type: \"number\" },\n },\n required: [\"type\", \"event_id\", \"start_ms\", \"end_ms\"],\n additionalProperties: true,\n },\n \"session.commentary.appended\": {\n type: \"object\",\n properties: {\n type: { const: \"session.commentary.appended\" },\n event_id: { type: \"string\" },\n client_event_id: { type: \"string\" },\n start_ms: { type: \"number\" },\n end_ms: { type: \"number\" },\n },\n required: [\"type\", \"event_id\", \"start_ms\", \"end_ms\"],\n additionalProperties: true,\n },\n \"session.input_audio.muted\": {\n type: \"object\",\n properties: {\n type: { const: \"session.input_audio.muted\" },\n event_id: { type: \"string\" },\n client_event_id: { type: \"string\" },\n },\n required: [\"type\", \"event_id\"],\n additionalProperties: true,\n },\n \"session.input_audio.unmuted\": {\n type: \"object\",\n properties: {\n type: { const: \"session.input_audio.unmuted\" },\n event_id: { type: \"string\" },\n client_event_id: { type: \"string\" },\n },\n required: [\"type\", \"event_id\"],\n additionalProperties: true,\n },\n \"session.delegation.created\": {\n type: \"object\",\n properties: {\n type: { const: \"session.delegation.created\" },\n event_id: { type: \"string\" },\n client_event_id: { type: \"string\" },\n delegation: { $ref: \"#/$defs/DelegationEventBody\" },\n offset_ms: { type: \"number\" },\n },\n required: [\"type\", \"event_id\", \"delegation\", \"offset_ms\"],\n additionalProperties: true,\n },\n \"session.usage.updated\": {\n type: \"object\",\n properties: {\n type: { const: \"session.usage.updated\" },\n event_id: { type: \"string\" },\n client_event_id: { type: \"string\" },\n usage: { $ref: \"#/$defs/Usage\" },\n context_window: {\n type: \"object\",\n properties: { usage_ratio: { type: \"number\" } },\n required: [\"usage_ratio\"],\n additionalProperties: true,\n },\n },\n required: [\"type\", \"event_id\", \"usage\"],\n additionalProperties: true,\n },\n \"response.event\": {\n type: \"object\",\n properties: {\n type: { const: \"response.event\" },\n event_id: { type: \"string\" },\n client_event_id: { type: \"string\" },\n event: { $ref: \"#/$defs/NestedResponse\" },\n delegation_id: { type: [\"string\", \"null\"] },\n },\n required: [\"type\", \"event_id\", \"event\"],\n additionalProperties: true,\n },\n error: {\n type: \"object\",\n properties: {\n type: { const: \"error\" },\n event_id: { type: \"string\" },\n client_event_id: { type: \"string\" },\n error: { $ref: \"#/$defs/Error\" },\n },\n required: [\"type\", \"event_id\", \"error\"],\n additionalProperties: true,\n },\n};\nconst DOCUMENTED_ONLY = new Set([\n \"session.instructions.append\",\n \"session.input_audio.mute\",\n \"session.input_audio.unmute\",\n]);\n\nconst MAX_JSON_BYTES = 64 * 1024 * 1024;\nconst MAX_ENTRIES = 5_000_000;\nconst dangerous = new Set([\"__proto__\", \"prototype\", \"constructor\"]);\nfunction fail(path: string, message: string): never {\n throw new Error(`Live fixture ${path}: ${message}`);\n}\nfunction object(value: LiveJson | undefined, path: string): LiveObject {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) fail(path, \"must be an object\");\n return value;\n}\nfunction string(value: LiveJson | undefined, path: string): string {\n if (typeof value !== \"string\" || !value.length) fail(path, \"must be a nonempty string\");\n return value;\n}\nfunction integer(value: LiveJson | undefined, path: string): number {\n if (typeof value !== \"number\" || !Number.isSafeInteger(value) || value < 0)\n fail(path, \"must be a nonnegative safe integer\");\n return value;\n}\nfunction array(value: LiveJson | undefined, path: string): LiveJson[] {\n if (!Array.isArray(value)) fail(path, \"must be an array\");\n return value;\n}\n\n/** Clone before registration; reject getters, prototypes, cycles and oversized JSON before allocating. */\nfunction cloneJson(value: unknown, maxBytes = MAX_JSON_BYTES, rootPath = \"live\"): LiveJson {\n let bytes = 0;\n const ancestors = new Set<object>();\n function charge(count: number, path: string) {\n bytes += count;\n if (bytes > maxBytes) fail(path, \"exceeds JSON byte limit\");\n }\n function visit(current: unknown, path: string, depth: number): LiveJson {\n if (depth > 32) fail(path, \"exceeds JSON depth 32\");\n if (\n current === null ||\n typeof current === \"boolean\" ||\n typeof current === \"number\" ||\n typeof current === \"string\"\n ) {\n if (typeof current === \"number\" && !Number.isFinite(current))\n fail(path, \"must be finite JSON\");\n // A string's UTF-16 length is a lower bound on its serialized byte length.\n if (typeof current === \"string\" && current.length > maxBytes - bytes)\n fail(path, \"exceeds JSON byte limit\");\n charge(Buffer.byteLength(JSON.stringify(current)), path);\n return current;\n }\n if (typeof current !== \"object\") fail(path, \"must be JSON\");\n if (ancestors.has(current)) fail(path, \"contains a cycle\");\n const isArray = Array.isArray(current);\n if (\n Object.getPrototypeOf(current) !== (isArray ? Array.prototype : Object.prototype) &&\n Object.getPrototypeOf(current) !== null\n )\n fail(path, \"must have a plain JSON prototype\");\n if (Object.getOwnPropertySymbols(current).length) fail(path, \"symbol properties are not JSON\");\n ancestors.add(current);\n charge(2, path);\n const result: LiveObject | LiveJson[] = isArray ? [] : {};\n const keys = Object.getOwnPropertyNames(current);\n if (isArray && current.length > MAX_ENTRIES) fail(path, \"exceeds array entry limit\");\n let count = 0;\n for (const key of keys) {\n if (isArray && key === \"length\") continue;\n if (dangerous.has(key)) fail(`${path}.${key}`, \"unsafe property\");\n const desc = Object.getOwnPropertyDescriptor(current, key);\n if (!desc || !desc.enumerable || !(\"value\" in desc))\n fail(`${path}.${key}`, \"must be an enumerable data property\");\n if (isArray && key !== String(count)) fail(path, \"must be a dense JSON array\");\n charge((count++ ? 1 : 0) + (isArray ? 0 : Buffer.byteLength(JSON.stringify(key)) + 1), path);\n const child = visit(desc.value, isArray ? `${path}[${key}]` : `${path}.${key}`, depth + 1);\n if (Array.isArray(result)) result.push(child);\n else result[key] = child;\n }\n if (isArray && count !== current.length) fail(path, \"must be a dense JSON array\");\n ancestors.delete(current);\n return result;\n }\n return visit(value, rootPath, 0);\n}\n\nfunction shape(value: LiveJson | undefined, schema: Shape, path: string): void {\n if (schema.$ref) return shape(value, DEFINITIONS[schema.$ref.slice(\"#/$defs/\".length)], path);\n if (schema.anyOf) {\n for (const option of schema.anyOf) {\n try {\n shape(value, option, path);\n return;\n } catch {\n /* Try the next documented union member. */\n }\n }\n fail(path, \"does not match documented shape\");\n }\n if (\"const\" in schema && value !== schema.const)\n fail(path, `must equal ${JSON.stringify(schema.const)}`);\n if (schema.enum && !schema.enum.includes(value ?? null)) fail(path, \"is not a documented value\");\n if (schema.type) {\n const types = typeof schema.type === \"string\" ? [schema.type] : schema.type;\n const actual = value === null ? \"null\" : Array.isArray(value) ? \"array\" : typeof value;\n if (!types.includes(actual)) fail(path, `must be ${types.join(\" or \")}`);\n }\n if (schema.properties || schema.required) {\n const obj = object(value, path);\n for (const key of schema.required ?? [])\n if (!Object.hasOwn(obj, key)) fail(`${path}.${key}`, \"is required\");\n for (const [key, child] of Object.entries(schema.properties ?? {}))\n if (Object.hasOwn(obj, key)) shape(obj[key], child, `${path}.${key}`);\n }\n if (schema.items)\n array(value, path).forEach((item, i) => shape(item, schema.items!, `${path}[${i}]`));\n}\n\nexport function normalizeLiveOptions(options: LiveOptions = {}) {\n const result: { -readonly [K in keyof typeof DEFAULT_LIVE_OPTIONS]: number } = {\n ...DEFAULT_LIVE_OPTIONS,\n };\n for (const key of Object.keys(DEFAULT_LIVE_OPTIONS) as (keyof typeof DEFAULT_LIVE_OPTIONS)[]) {\n const value = options[key];\n if (value !== undefined) {\n if (!Number.isSafeInteger(value) || value <= 0)\n fail(`options.${key}`, \"must be a positive safe integer\");\n result[key] = value;\n }\n }\n if (\n options.secretValues !== undefined &&\n (!Array.isArray(options.secretValues) ||\n options.secretValues.some((value) => typeof value !== \"string\"))\n )\n fail(\"options.secretValues\", \"must be strings\");\n return { ...result, secretValues: options.secretValues?.slice() ?? [] };\n}\n\n/** Canonical object ordering without changing arrays or literal unknown fields. */\nfunction canonical(value: LiveJson): string {\n if (Array.isArray(value)) return `[${value.map(canonical).join(\",\")}]`;\n if (value && typeof value === \"object\")\n return `{${Object.keys(value)\n .sort()\n .map((key) => `${JSON.stringify(key)}:${canonical(value[key])}`)\n .join(\",\")}}`;\n return JSON.stringify(value);\n}\n// Provider snapshots may add resolved fields, but cannot change explicitly configured values.\nfunction matchConfiguration(expected: LiveJson, actual: LiveJson | undefined, path: string): void {\n if (expected && typeof expected === \"object\" && !Array.isArray(expected)) {\n const actualObject = object(actual, path);\n for (const [key, value] of Object.entries(expected))\n matchConfiguration(value, actualObject[key], `${path}.${key}`);\n } else if (actual === undefined || canonical(expected) !== canonical(actual))\n fail(path, \"differs from accepted configuration\");\n}\nfunction pcmBytes(value: LiveJson | undefined, path: string, remaining: number): number {\n if (typeof value !== \"string\") fail(path, \"must be canonical base64 PCM\");\n if (\n value.length % 4 ||\n !/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(value)\n )\n fail(path, \"must be canonical base64 PCM\");\n const bytes = (value.length / 4) * 3 - (value.endsWith(\"==\") ? 2 : value.endsWith(\"=\") ? 1 : 0);\n if (bytes > remaining) fail(path, \"exceeds decoded audio byte limit\");\n if (bytes % 2) fail(path, \"must contain complete PCM16 samples\");\n // Check unused padding bits without decoding/allocating a second audio buffer.\n const alphabet = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\n if (\n (value.endsWith(\"==\") && alphabet.indexOf(value.at(-3)!) & 15) ||\n (value.endsWith(\"=\") && !value.endsWith(\"==\") && alphabet.indexOf(value.at(-2)!) & 3)\n )\n fail(path, \"must be canonical base64 PCM\");\n return bytes;\n}\n/** Shared shape check; callers retain capture source, mode and lifecycle policy. */\nfunction validateClientShape(event: LiveObject, path: string): void {\n const type = string(event.type, `${path}.type`);\n if (!Object.hasOwn(CLIENT_SCHEMAS, type)) fail(`${path}.type`, \"unsupported client command\");\n shape(event, CLIENT_SCHEMAS[type], path);\n}\n\n/** Validate one inbound command before matching a fixture or starting a recording.\n * Per-session audio totals, startup configuration and update/lifecycle policy belong to the caller.\n */\nexport function validateLiveClientEvent(value: unknown, options: LiveOptions = {}): LiveObject {\n const limits = normalizeLiveOptions(options);\n const event = object(\n cloneJson(value, Math.min(limits.maxMessageBytes, MAX_JSON_BYTES), \"event\"),\n \"event\",\n );\n validateClientShape(event, \"event\");\n if (event.type === \"session.input_audio.append\")\n pcmBytes(event.audio, \"event.audio\", limits.maxDecodedAudioBytes);\n return event;\n}\n\nfunction pointer(event: LiveObject, path: string): LiveJson | undefined {\n if (!path.startsWith(\"/\") || /~(?![01])/u.test(path))\n fail(\"bindings.pointer\", \"must be a JSON Pointer\");\n let value: LiveJson | undefined = event;\n for (const segment of path.slice(1).split(\"/\")) {\n const key = segment.replace(/~1/g, \"/\").replace(/~0/g, \"~\");\n if (dangerous.has(key)) fail(\"bindings.pointer\", \"unsafe segment\");\n if (!value || typeof value !== \"object\" || !Object.hasOwn(value, key)) return undefined;\n value = Array.isArray(value) ? value[Number(key)] : value[key];\n }\n return value;\n}\n\nexport type Site = {\n namespace: string;\n owner: \"client\" | \"server\";\n define: boolean;\n imported?: boolean;\n};\nconst lifecycle = new Set([\"response.created\", \"response.in_progress\", \"response.completed\"]);\nexport function bindingSites(event: LiveObject, direction: string): Map<string, Site> {\n const sites = new Map<string, Site>();\n const server = direction === \"server\";\n function add(\n path: string,\n namespace: string,\n define = false,\n owner: \"client\" | \"server\" = \"server\",\n imported = false,\n ) {\n if (typeof pointer(event, path) === \"string\")\n sites.set(path, { namespace, owner, define, imported });\n }\n add(\"/event_id\", server ? \"server-event\" : \"client-event\", true, server ? \"server\" : \"client\");\n if (server) add(\"/client_event_id\", \"client-event\", false, \"client\");\n if (server && event.type === \"error\")\n add(\"/error/client_event_id\", \"client-event\", false, \"client\");\n if (\n server &&\n [\"session.started\", \"session.updated\", \"session.closed\"].includes(String(event.type))\n )\n add(\"/session/id\", \"session\", event.type === \"session.started\");\n if (server && event.type === \"session.delegation.created\") {\n add(\"/delegation/id\", \"delegation\", true);\n add(\"/delegation/response_id\", \"response\", true);\n }\n if (\n (!server &&\n [\n \"session.thinking.append\",\n \"session.commentary.append\",\n \"session.instructions.append\",\n ].includes(String(event.type))) ||\n (server && event.type === \"response.event\")\n )\n add(\"/delegation_id\", \"delegation\");\n if (!server && event.type === \"response.item.create\") add(\"/item/call_id\", \"tool-call\");\n if (server && event.type === \"response.event\") {\n const nested = object(event.event, \"event.event\");\n add(\"/event/response/id\", \"response\", nested.type === \"response.created\");\n add(\n \"/event/response/previous_response_id\",\n \"response\",\n false,\n \"server\",\n lifecycle.has(String(nested.type)),\n );\n add(\"/event/item/id\", \"response-item\", nested.type === \"response.output_item.added\");\n add(\"/event/item_id\", \"response-item\");\n add(\"/event/item/call_id\", \"tool-call\", nested.type === \"response.output_item.added\");\n }\n return sites;\n}\n\nexport function validateLiveTranscript(value: unknown, options: LiveOptions = {}): LiveTranscript {\n const limits = normalizeLiveOptions(options);\n const root = object(cloneJson(value), \"live\");\n if (root.version !== 1) fail(\"version\", \"must equal 1\");\n if (root.model !== \"gpt-live-1\") fail(\"model\", \"must equal gpt-live-1\");\n if (root.mode !== \"client\" && root.mode !== \"managed\") fail(\"mode\", \"must be client or managed\");\n const audio = object(root.audio, \"audio\");\n if (audio.encoding !== \"pcm16le\" || audio.sampleRateHz !== 24000 || audio.channels !== 1)\n fail(\"audio\", \"requires mono PCM16LE at 24000 Hz\");\n const config = object(root.configuration, \"configuration\");\n shape(config, DEFINITIONS.SessionConfig, \"configuration\");\n shape(\n object(config.audio, \"configuration.audio\").format,\n DEFINITIONS.Pcm24,\n \"configuration.audio.format\",\n );\n const delegation = object(config.delegation, \"configuration.delegation\");\n if (delegation.type !== (root.mode === \"managed\" ? \"responses\" : \"client\"))\n fail(\"configuration.delegation\", \"must match mode explicitly\");\n let effectiveConfiguration = structuredClone(config);\n const capture = object(root.capture, \"capture\");\n if (capture.complete !== true)\n fail(\"capture.complete\", \"only complete successful captures are loadable\");\n if (capture.source !== \"authored\" && capture.source !== \"provider\")\n fail(\"capture.source\", \"must be authored or provider\");\n if (capture.provenance !== undefined) {\n const provenance = object(capture.provenance, \"capture.provenance\");\n string(provenance.host, \"capture.provenance.host\");\n string(provenance.referenceVersion, \"capture.provenance.referenceVersion\");\n if (\n !Number.isFinite(Date.parse(string(provenance.observedAt, \"capture.provenance.observedAt\")))\n )\n fail(\"capture.provenance.observedAt\", \"must be a timestamp\");\n if (provenance.path !== \"/v1/live/sessions\" || provenance.sanitationVersion !== 1)\n fail(\"capture.provenance\", \"invalid path or sanitationVersion\");\n }\n const entries = array(root.entries, \"entries\");\n if (!entries.length || entries.length > MAX_ENTRIES) fail(\"entries\", \"invalid entry count\");\n const terminal = integer(capture.terminalEntry, \"capture.terminalEntry\");\n if (terminal !== entries.length - 1)\n fail(\"capture.terminalEntry\", \"must identify the final session.closed event\");\n const bindings = array(root.bindings, \"bindings\");\n const byEntry = new Map<number, { binding: LiveObject; path: string }[]>();\n bindings.forEach((raw, index) => {\n const path = `bindings[${index}]`;\n const binding = object(raw, path);\n const entry = integer(binding.entry, `${path}.entry`);\n if (entry >= entries.length) fail(`${path}.entry`, \"out of range\");\n const bucket = byEntry.get(entry) ?? [];\n bucket.push({ binding, path });\n byEntry.set(entry, bucket);\n });\n const identities = new Map<string, { name: string; owner: string; value: string }>();\n const names = new Map<\n string,\n { namespace: string; owner: string; value: string; acceptedAt?: LivePosition }\n >();\n let command = 0,\n audioBytes = 0,\n previousTime = -1,\n previousServerCommand = 0,\n previousServerAudio = 0;\n const runBytes = new Map<number, number>([[0, 0]]);\n const totals = { client: 0, server: 0 };\n for (let i = 0; i < entries.length; i++) {\n const path = `entries[${i}]`;\n const entry = object(entries[i], path);\n if (entry.direction !== \"client\" && entry.direction !== \"server\")\n fail(`${path}.direction`, \"must be client or server\");\n const atMs = integer(entry.atMs, `${path}.atMs`);\n if (atMs < previousTime || atMs > limits.maxDurationMs)\n fail(`${path}.atMs`, \"must be monotonic and within duration limit\");\n previousTime = atMs;\n const event = object(entry.event, `${path}.event`);\n const type = string(event.type, `${path}.event.type`);\n const client = entry.direction === \"client\";\n if (client) {\n validateClientShape(event, `${path}.event`);\n if (capture.source === \"provider\" && DOCUMENTED_ONLY.has(type))\n fail(`${path}.event.type`, \"unsupported client command for this capture source\");\n } else if (Object.hasOwn(SERVER_SCHEMAS, type))\n shape(event, SERVER_SCHEMAS[type], `${path}.event`);\n if (Buffer.byteLength(JSON.stringify(event)) > limits.maxMessageBytes)\n fail(`${path}.event`, \"exceeds message byte limit\");\n if (type === \"error\") fail(`${path}.event`, \"error probes are not successful fixtures\");\n if (i === 0 && (!client || type !== \"session.start\"))\n fail(path, \"must begin with client session.start\");\n if (type === \"session.start\") {\n if (!client || i !== 0) fail(`${path}.event.type`, \"session.start is only valid at startup\");\n if (canonical(event.session) !== canonical(config))\n fail(`${path}.event.session`, \"must equal configuration\");\n }\n if (type === \"session.update\" && client) {\n const patch = object(event.session, `${path}.event.session`);\n const del = object(patch.delegation, `${path}.event.session.delegation`);\n const backend = object(del.responses, `${path}.event.session.delegation.responses`);\n if (\n root.mode !== \"managed\" ||\n Object.keys(patch).some((key) => key !== \"delegation\") ||\n Object.keys(del).some((key) => key !== \"type\" && key !== \"responses\") ||\n (del.type !== undefined && del.type !== \"responses\") ||\n Object.keys(backend).some((key) => key !== \"instructions\") ||\n !Object.hasOwn(backend, \"instructions\")\n )\n fail(`${path}.event.session`, \"only observed backend instructions update is supported\");\n }\n if (client && type === \"session.update\") {\n const backend = object(\n object(\n object(event.session, `${path}.event.session`).delegation,\n `${path}.event.session.delegation`,\n ).responses,\n `${path}.event.session.delegation.responses`,\n );\n const del = object(effectiveConfiguration.delegation, \"configuration.delegation\");\n effectiveConfiguration = {\n ...effectiveConfiguration,\n delegation: {\n ...del,\n responses: {\n ...object(del.responses, \"configuration.delegation.responses\"),\n instructions: backend.instructions,\n },\n },\n };\n }\n if (!client && [\"session.started\", \"session.updated\", \"session.closed\"].includes(type))\n matchConfiguration(effectiveConfiguration, event.session, `${path}.event.session`);\n if (!client && type === \"response.event\") {\n const nested = object(event.event, `${path}.event.event`);\n if (lifecycle.has(String(nested.type)))\n string(\n object(nested.response, `${path}.event.event.response`).id,\n `${path}.event.event.response.id`,\n );\n if (\n [\"response.output_item.added\", \"response.output_item.done\"].includes(String(nested.type)) &&\n object(nested.item, `${path}.event.event.item`).type === \"function_call\"\n ) {\n const item = object(nested.item, `${path}.event.event.item`);\n for (const field of [\"id\", \"call_id\", \"name\"])\n string(item[field], `${path}.event.event.item.${field}`);\n if (typeof item.arguments !== \"string\")\n fail(`${path}.event.event.item.arguments`, \"must be a string\");\n }\n if (\n [\n \"response.function_call_arguments.delta\",\n \"response.function_call_arguments.done\",\n ].includes(String(nested.type))\n )\n string(nested.item_id, `${path}.event.event.item_id`);\n }\n let decoded = 0;\n if (\n (client && type === \"session.input_audio.append\") ||\n (!client && type === \"session.output_audio.delta\")\n ) {\n decoded = pcmBytes(\n event[client ? \"audio\" : \"delta\"],\n `${path}.event.${client ? \"audio\" : \"delta\"}`,\n limits.maxDecodedAudioBytes - totals[entry.direction],\n );\n totals[entry.direction] += decoded;\n }\n if (client) {\n if (entry.barrier !== undefined)\n fail(`${path}.barrier`, \"client entries cannot have barriers\");\n if (type === \"session.input_audio.append\") audioBytes += decoded;\n else {\n command++;\n audioBytes = 0;\n }\n runBytes.set(command, audioBytes);\n } else {\n const barrier = object(entry.barrier, `${path}.barrier`);\n const c = integer(barrier.command, `${path}.barrier.command`);\n const a = integer(barrier.audioBytes, `${path}.barrier.audioBytes`);\n if (\n a % 2 ||\n c > command ||\n a > (runBytes.get(c) ?? -1) ||\n c < previousServerCommand ||\n (c === previousServerCommand && a < previousServerAudio)\n )\n fail(\n `${path}.barrier`,\n \"must be monotonic, sample-aligned and within preceding client prefix\",\n );\n previousServerCommand = c;\n previousServerAudio = a;\n }\n if (\n i === terminal &&\n (client ||\n type !== \"session.closed\" ||\n ![\"close_requested\", \"remote_hangup\"].includes(String(event.reason)))\n )\n fail(\"capture.terminalEntry\", \"must identify successful server session.closed\");\n if (i !== terminal && type === \"session.closed\")\n fail(`${path}.event.type`, \"session.closed must be terminal\");\n const sites = bindingSites(event, entry.direction);\n const annotated = new Set<string>();\n // Ordinary definitions first, imported definitions next, then references at one wire entry.\n const ordered = (byEntry.get(i) ?? []).slice().sort((a, b) => {\n const rank = (binding: LiveObject) =>\n binding.action === \"reference\" ? 2 : binding.origin === \"imported-context\" ? 1 : 0;\n return rank(a.binding) - rank(b.binding);\n });\n for (const { binding, path: bindingPath } of ordered) {\n const ptr = string(binding.pointer, `${bindingPath}.pointer`);\n const value = pointer(event, ptr);\n const site = sites.get(ptr);\n if (!site || typeof value !== \"string\" || !value.length)\n fail(`${bindingPath}.pointer`, \"not a non-null described identifier field\");\n if (annotated.has(ptr)) fail(bindingPath, \"duplicate pointer annotation\");\n annotated.add(ptr);\n const name = string(binding.name, `${bindingPath}.name`);\n if (binding.owner !== site.owner) fail(`${bindingPath}.owner`, \"does not match descriptor\");\n if (binding.action !== \"define\" && binding.action !== \"reference\")\n fail(`${bindingPath}.action`, \"must be define or reference\");\n if (\n binding.origin !== undefined &&\n binding.origin !== \"observed\" &&\n binding.origin !== \"imported-context\"\n )\n fail(`${bindingPath}.origin`, \"invalid origin\");\n const imported = binding.origin === \"imported-context\";\n if (\n imported &&\n (binding.action !== \"define\" || !site.imported || client || site.owner !== \"server\")\n )\n fail(`${bindingPath}.origin`, \"illegal imported-context site\");\n const key = JSON.stringify([site.namespace, value]);\n const prior = identities.get(key);\n const named = names.get(name);\n if (binding.action === \"define\") {\n if ((!site.define && !imported) || prior || named)\n fail(bindingPath, \"invalid or duplicate identity definition\");\n identities.set(key, { name, owner: site.owner, value });\n names.set(name, {\n namespace: site.namespace,\n owner: site.owner,\n value,\n ...(client ? { acceptedAt: { command, audioBytes } } : {}),\n });\n } else if (\n !prior ||\n !named ||\n prior.name !== name ||\n named.namespace !== site.namespace ||\n named.owner !== site.owner ||\n named.value !== value\n )\n fail(bindingPath, \"reference precedes definition or violates identifier bijection\");\n else if (\n !client &&\n named.acceptedAt &&\n (previousServerCommand < named.acceptedAt.command ||\n (previousServerCommand === named.acceptedAt.command &&\n previousServerAudio < named.acceptedAt.audioBytes))\n )\n fail(`${path}.barrier`, `precedes referenced client input at ${ptr}`);\n }\n for (const ptr of sites.keys())\n if (!annotated.has(ptr)) fail(`${path}.event${ptr}`, \"missing identifier binding\");\n }\n // Every structural field and all JSON values have been checked above; the cast exposes the public contract.\n return root as LiveObject & LiveTranscript;\n}\n\nexport function normalizeLiveFixture(\n value: unknown,\n options: LiveOptions = {},\n): LiveFixtureResponse {\n if (!value || typeof value !== \"object\" || Array.isArray(value))\n fail(\"response\", \"must be an object\");\n const descriptor = Object.getOwnPropertyDescriptor(value, \"live\");\n if (!descriptor || !(\"value\" in descriptor))\n fail(\"response.live\", \"must be an own data property\");\n const timing = Object.getOwnPropertyDescriptor(value, \"liveTiming\");\n if (\n timing &&\n (!(\"value\" in timing) || (timing.value !== \"recorded\" && timing.value !== \"immediate\"))\n )\n fail(\"response.liveTiming\", \"must be recorded or immediate\");\n const live = validateLiveTranscript(descriptor.value, options);\n return timing ? { live, liveTiming: timing.value } : { live };\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
const require_runtime = require('./_virtual/_rolldown/runtime.cjs');
|
|
2
|
+
const require_constants = require('./constants.cjs');
|
|
3
|
+
const require_live_fixture = require('./live-fixture.cjs');
|
|
4
|
+
const require_recorder = require('./recorder.cjs');
|
|
5
|
+
const require_logger = require('./logger.cjs');
|
|
6
|
+
const require_live_sanitize = require('./live-sanitize.cjs');
|
|
7
|
+
let node_perf_hooks = require("node:perf_hooks");
|
|
8
|
+
|
|
9
|
+
//#region src/live-recorder.ts
|
|
10
|
+
var LiveRecorderError = class extends Error {
|
|
11
|
+
constructor(category) {
|
|
12
|
+
super(`Live capture failed: ${category}`);
|
|
13
|
+
this.category = category;
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
function object(value) {
|
|
17
|
+
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
18
|
+
}
|
|
19
|
+
function boundedJson(value, depth = 0) {
|
|
20
|
+
if (depth > 32) return false;
|
|
21
|
+
if (value === null || typeof value === "string" || typeof value === "boolean") return true;
|
|
22
|
+
if (typeof value === "number") return Number.isFinite(value);
|
|
23
|
+
if (Array.isArray(value)) return value.every((v) => boundedJson(v, depth + 1));
|
|
24
|
+
return typeof value === "object" && Object.entries(value).every(([key, v]) => ![
|
|
25
|
+
"__proto__",
|
|
26
|
+
"prototype",
|
|
27
|
+
"constructor"
|
|
28
|
+
].includes(key) && boundedJson(v, depth + 1));
|
|
29
|
+
}
|
|
30
|
+
function field(event, pointer) {
|
|
31
|
+
let value = event;
|
|
32
|
+
for (const part of pointer.slice(1).split("/")) {
|
|
33
|
+
const key = part.replace(/~1/g, "/").replace(/~0/g, "~");
|
|
34
|
+
if (!object(value)) throw new LiveRecorderError("protocol-divergence");
|
|
35
|
+
value = value[key];
|
|
36
|
+
}
|
|
37
|
+
if (typeof value !== "string") throw new LiveRecorderError("protocol-divergence");
|
|
38
|
+
return value;
|
|
39
|
+
}
|
|
40
|
+
function limit(value, fallback) {
|
|
41
|
+
const result = value ?? fallback;
|
|
42
|
+
if (!Number.isSafeInteger(result) || result <= 0) throw new LiveRecorderError("resource-limit");
|
|
43
|
+
return result;
|
|
44
|
+
}
|
|
45
|
+
/** Capture at arrival/acceptance, before awaiting any downstream socket write.
|
|
46
|
+
* Inputs are complete wire JSON strings, so byte caps apply before parse/copy.
|
|
47
|
+
* The socket owner owns deadlines, mode/lifecycle forwarding checks and cleanup;
|
|
48
|
+
* abort on any failed send or premature socket close before calling finish.
|
|
49
|
+
*/
|
|
50
|
+
function createLiveRecorder(options) {
|
|
51
|
+
const limits = require_live_fixture.normalizeLiveOptions(options.live);
|
|
52
|
+
const maxBytes = Math.min(limit(options.record.maxProxyBufferBytes, require_recorder.DEFAULT_MAX_PROXY_BUFFER_BYTES), require_recorder.PROXY_BUFFER_HARD_CEILING);
|
|
53
|
+
const maxFrames = limit(options.record.maxProxyBufferFrames, require_recorder.DEFAULT_MAX_PROXY_BUFFER_FRAMES);
|
|
54
|
+
const started = node_perf_hooks.performance.now();
|
|
55
|
+
const entries = [];
|
|
56
|
+
const bindings = [];
|
|
57
|
+
const identities = /* @__PURE__ */ new Map();
|
|
58
|
+
let configuration;
|
|
59
|
+
let bytes = 0, frames = 0, lastTime = 0, command = 0, audioBytes = 0;
|
|
60
|
+
const audioTotals = {
|
|
61
|
+
client: 0,
|
|
62
|
+
server: 0
|
|
63
|
+
};
|
|
64
|
+
let terminal = false;
|
|
65
|
+
let failure;
|
|
66
|
+
let result;
|
|
67
|
+
function clear() {
|
|
68
|
+
entries.length = 0;
|
|
69
|
+
bindings.length = 0;
|
|
70
|
+
identities.clear();
|
|
71
|
+
configuration = void 0;
|
|
72
|
+
}
|
|
73
|
+
function abort(category = "incomplete-capture") {
|
|
74
|
+
if (result) return;
|
|
75
|
+
failure ??= category;
|
|
76
|
+
clear();
|
|
77
|
+
}
|
|
78
|
+
function fail(category) {
|
|
79
|
+
abort(category);
|
|
80
|
+
throw new LiveRecorderError(failure ?? category);
|
|
81
|
+
}
|
|
82
|
+
function annotate(event, direction) {
|
|
83
|
+
const sites = [...require_live_fixture.bindingSites(event, direction)].sort((a, b) => Number(!a[1].define) - Number(!b[1].define) || Number(!a[1].imported) - Number(!b[1].imported));
|
|
84
|
+
for (const [pointer, site] of sites) {
|
|
85
|
+
const value = field(event, pointer);
|
|
86
|
+
const key = JSON.stringify([site.namespace, value]);
|
|
87
|
+
const known = identities.get(key);
|
|
88
|
+
if (known && known.owner !== site.owner) fail("protocol-divergence");
|
|
89
|
+
if (!known && !site.define && !site.imported) fail("protocol-divergence");
|
|
90
|
+
const name = known?.name ?? `${site.namespace}:${identities.size}`;
|
|
91
|
+
if (!known) identities.set(key, {
|
|
92
|
+
name,
|
|
93
|
+
owner: site.owner
|
|
94
|
+
});
|
|
95
|
+
if (!options.record.proxyOnly) bindings.push({
|
|
96
|
+
entry: entries.length,
|
|
97
|
+
pointer,
|
|
98
|
+
name,
|
|
99
|
+
owner: site.owner,
|
|
100
|
+
action: known ? "reference" : "define",
|
|
101
|
+
...!known && !site.define && site.imported ? { origin: "imported-context" } : {}
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
function accept(direction, raw, atMs = Math.floor(node_perf_hooks.performance.now() - started)) {
|
|
106
|
+
if (result) throw new LiveRecorderError("incomplete-capture");
|
|
107
|
+
if (failure) throw new LiveRecorderError(failure);
|
|
108
|
+
if (terminal) fail("protocol-divergence");
|
|
109
|
+
if (!Number.isSafeInteger(atMs) || atMs < lastTime) fail("protocol-divergence");
|
|
110
|
+
if (atMs > limits.maxDurationMs) fail("timeout");
|
|
111
|
+
const length = Buffer.byteLength(raw);
|
|
112
|
+
if (length > limits.maxMessageBytes || length > maxBytes - bytes || frames >= maxFrames) fail("resource-limit");
|
|
113
|
+
let value;
|
|
114
|
+
try {
|
|
115
|
+
value = JSON.parse(raw);
|
|
116
|
+
} catch {
|
|
117
|
+
fail(direction === "client" ? "invalid-client" : "protocol-divergence");
|
|
118
|
+
}
|
|
119
|
+
if (!boundedJson(value) || !object(value) || typeof value.type !== "string") fail(direction === "client" ? "invalid-client" : "protocol-divergence");
|
|
120
|
+
const event = value;
|
|
121
|
+
if (frames === 0 && (direction !== "client" || event.type !== "session.start")) fail("invalid-client");
|
|
122
|
+
if (event.type === "session.start") {
|
|
123
|
+
if (frames !== 0 || direction !== "client" || !object(event.session)) fail("invalid-client");
|
|
124
|
+
configuration = event.session;
|
|
125
|
+
}
|
|
126
|
+
if (event.type === "error") fail("protocol-divergence");
|
|
127
|
+
if (event.type === "session.closed") {
|
|
128
|
+
if (direction !== "server" || !["close_requested", "remote_hangup"].includes(String(event.reason))) fail("incomplete-capture");
|
|
129
|
+
terminal = true;
|
|
130
|
+
}
|
|
131
|
+
let decoded = 0;
|
|
132
|
+
if (direction === "client" && event.type === "session.input_audio.append" || direction === "server" && event.type === "session.output_audio.delta") {
|
|
133
|
+
const pcm = event[direction === "client" ? "audio" : "delta"];
|
|
134
|
+
if (typeof pcm !== "string" || pcm.length % 4 || !/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(pcm)) fail(direction === "client" ? "invalid-client" : "protocol-divergence");
|
|
135
|
+
decoded = pcm.length / 4 * 3 - (pcm.endsWith("==") ? 2 : pcm.endsWith("=") ? 1 : 0);
|
|
136
|
+
if (decoded % 2) fail(direction === "client" ? "invalid-client" : "protocol-divergence");
|
|
137
|
+
if (decoded > limits.maxDecodedAudioBytes - audioTotals[direction]) fail("resource-limit");
|
|
138
|
+
if (Buffer.from(pcm, "base64").toString("base64") !== pcm) fail("protocol-divergence");
|
|
139
|
+
audioTotals[direction] += decoded;
|
|
140
|
+
}
|
|
141
|
+
if (direction === "client") try {
|
|
142
|
+
require_live_fixture.validateLiveClientEvent(event, limits);
|
|
143
|
+
} catch {
|
|
144
|
+
fail("invalid-client");
|
|
145
|
+
}
|
|
146
|
+
if (direction === "client") if (event.type === "session.input_audio.append") audioBytes += decoded;
|
|
147
|
+
else {
|
|
148
|
+
command++;
|
|
149
|
+
audioBytes = 0;
|
|
150
|
+
}
|
|
151
|
+
bytes += length;
|
|
152
|
+
frames++;
|
|
153
|
+
lastTime = atMs;
|
|
154
|
+
try {
|
|
155
|
+
annotate(event, direction);
|
|
156
|
+
} catch {
|
|
157
|
+
fail("protocol-divergence");
|
|
158
|
+
}
|
|
159
|
+
if (!options.record.proxyOnly) entries.push({
|
|
160
|
+
direction,
|
|
161
|
+
atMs,
|
|
162
|
+
event,
|
|
163
|
+
...direction === "server" ? { barrier: {
|
|
164
|
+
command,
|
|
165
|
+
audioBytes
|
|
166
|
+
} } : {}
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
function finish() {
|
|
170
|
+
if (result) return result;
|
|
171
|
+
if (!terminal && !failure) abort("incomplete-capture");
|
|
172
|
+
if (failure) return result = {
|
|
173
|
+
kind: "failed",
|
|
174
|
+
category: failure,
|
|
175
|
+
error: `Live capture failed: ${failure}`
|
|
176
|
+
};
|
|
177
|
+
if (options.record.proxyOnly) {
|
|
178
|
+
clear();
|
|
179
|
+
return result = { kind: "skipped" };
|
|
180
|
+
}
|
|
181
|
+
if (!configuration || !object(configuration.delegation)) {
|
|
182
|
+
abort();
|
|
183
|
+
return finish();
|
|
184
|
+
}
|
|
185
|
+
const mode = configuration.delegation.type === "client" ? "client" : "managed";
|
|
186
|
+
let transcript;
|
|
187
|
+
try {
|
|
188
|
+
transcript = require_live_fixture.validateLiveTranscript({
|
|
189
|
+
version: 1,
|
|
190
|
+
model: "gpt-live-1",
|
|
191
|
+
mode,
|
|
192
|
+
audio: {
|
|
193
|
+
encoding: "pcm16le",
|
|
194
|
+
sampleRateHz: 24e3,
|
|
195
|
+
channels: 1
|
|
196
|
+
},
|
|
197
|
+
configuration,
|
|
198
|
+
entries,
|
|
199
|
+
bindings,
|
|
200
|
+
capture: {
|
|
201
|
+
source: "provider",
|
|
202
|
+
complete: true,
|
|
203
|
+
terminalEntry: entries.length - 1,
|
|
204
|
+
...options.provenance ? { provenance: options.provenance } : {}
|
|
205
|
+
}
|
|
206
|
+
}, limits);
|
|
207
|
+
} catch {
|
|
208
|
+
abort("protocol-divergence");
|
|
209
|
+
return finish();
|
|
210
|
+
}
|
|
211
|
+
try {
|
|
212
|
+
transcript = require_live_sanitize.sanitizeLiveTranscript(transcript, [...limits.secretValues, ...options.secretValues ?? []], options.credentialFields, limits);
|
|
213
|
+
} catch {
|
|
214
|
+
abort("unsafe-export");
|
|
215
|
+
return finish();
|
|
216
|
+
}
|
|
217
|
+
const fixture = {
|
|
218
|
+
match: {
|
|
219
|
+
endpoint: "openai-live",
|
|
220
|
+
model: "gpt-live-1"
|
|
221
|
+
},
|
|
222
|
+
response: { live: transcript }
|
|
223
|
+
};
|
|
224
|
+
const persisted = require_recorder.persistFixture({
|
|
225
|
+
record: options.record,
|
|
226
|
+
providerKey: "openai",
|
|
227
|
+
filePrefix: "openai-live",
|
|
228
|
+
testId: options.testId ?? require_constants.DEFAULT_TEST_ID,
|
|
229
|
+
fixture,
|
|
230
|
+
fixtures: options.fixtures,
|
|
231
|
+
logger: new require_logger.Logger("silent")
|
|
232
|
+
});
|
|
233
|
+
clear();
|
|
234
|
+
if (persisted.kind === "failed") {
|
|
235
|
+
options.logger.warn("Live capture persistence failed");
|
|
236
|
+
return result = {
|
|
237
|
+
kind: "failed",
|
|
238
|
+
category: "incomplete-capture",
|
|
239
|
+
error: "Live capture persistence failed"
|
|
240
|
+
};
|
|
241
|
+
}
|
|
242
|
+
options.logger.info("Complete Live capture recorded");
|
|
243
|
+
return result = persisted;
|
|
244
|
+
}
|
|
245
|
+
return {
|
|
246
|
+
acceptClient: (raw, atMs) => accept("client", raw, atMs),
|
|
247
|
+
acceptServer: (raw, atMs) => accept("server", raw, atMs),
|
|
248
|
+
finish,
|
|
249
|
+
abort
|
|
250
|
+
};
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
//#endregion
|
|
254
|
+
exports.LiveRecorderError = LiveRecorderError;
|
|
255
|
+
exports.createLiveRecorder = createLiveRecorder;
|
|
256
|
+
//# sourceMappingURL=live-recorder.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"live-recorder.cjs","names":["normalizeLiveOptions","DEFAULT_MAX_PROXY_BUFFER_BYTES","PROXY_BUFFER_HARD_CEILING","DEFAULT_MAX_PROXY_BUFFER_FRAMES","performance","bindingSites","validateLiveTranscript","sanitizeLiveTranscript","persistFixture","DEFAULT_TEST_ID","Logger"],"sources":["../src/live-recorder.ts"],"sourcesContent":["import { performance } from \"node:perf_hooks\";\nimport {\n bindingSites,\n normalizeLiveOptions,\n validateLiveClientEvent,\n validateLiveTranscript,\n} from \"./live-fixture.js\";\nimport { sanitizeLiveTranscript, type LiveCredentialField } from \"./live-sanitize.js\";\nimport type {\n LiveBinding,\n LiveEntry,\n LiveFailureCategory,\n LiveJson,\n LiveObject,\n LiveOptions,\n LiveTranscript,\n} from \"./live-types.js\";\nimport type { Fixture, RecordConfig } from \"./types.js\";\nimport { Logger } from \"./logger.js\";\nimport { DEFAULT_TEST_ID } from \"./constants.js\";\nimport {\n DEFAULT_MAX_PROXY_BUFFER_BYTES,\n DEFAULT_MAX_PROXY_BUFFER_FRAMES,\n PROXY_BUFFER_HARD_CEILING,\n persistFixture,\n type PersistFixtureResult,\n} from \"./recorder.js\";\n\nexport interface LiveRecorderOptions {\n record: RecordConfig;\n fixtures: Fixture[];\n logger: Logger;\n testId?: string;\n live?: LiveOptions;\n /** Include the actual selected upstream credential as well as configured Live secrets. */\n secretValues?: readonly string[];\n credentialFields?: readonly LiveCredentialField[];\n provenance?: NonNullable<LiveTranscript[\"capture\"][\"provenance\"]>;\n}\nexport type LiveRecorderResult =\n | Exclude<PersistFixtureResult, { kind: \"failed\" }>\n | {\n kind: \"failed\";\n category: LiveFailureCategory;\n error: string;\n };\nexport class LiveRecorderError extends Error {\n constructor(readonly category: LiveFailureCategory) {\n super(`Live capture failed: ${category}`);\n }\n}\nfunction object(value: LiveJson | undefined): value is LiveObject {\n return value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\nfunction boundedJson(value: unknown, depth = 0): value is LiveJson {\n if (depth > 32) return false;\n if (value === null || typeof value === \"string\" || typeof value === \"boolean\") return true;\n if (typeof value === \"number\") return Number.isFinite(value);\n if (Array.isArray(value)) return value.every((v) => boundedJson(v, depth + 1));\n return (\n typeof value === \"object\" &&\n Object.entries(value).every(\n ([key, v]) =>\n ![\"__proto__\", \"prototype\", \"constructor\"].includes(key) && boundedJson(v, depth + 1),\n )\n );\n}\nfunction field(event: LiveObject, pointer: string): string {\n let value: LiveJson = event;\n for (const part of pointer.slice(1).split(\"/\")) {\n const key = part.replace(/~1/g, \"/\").replace(/~0/g, \"~\");\n if (!object(value)) throw new LiveRecorderError(\"protocol-divergence\");\n value = value[key];\n }\n if (typeof value !== \"string\") throw new LiveRecorderError(\"protocol-divergence\");\n return value;\n}\nfunction limit(value: number | undefined, fallback: number): number {\n const result = value ?? fallback;\n if (!Number.isSafeInteger(result) || result <= 0) throw new LiveRecorderError(\"resource-limit\");\n return result;\n}\n\n/** Capture at arrival/acceptance, before awaiting any downstream socket write.\n * Inputs are complete wire JSON strings, so byte caps apply before parse/copy.\n * The socket owner owns deadlines, mode/lifecycle forwarding checks and cleanup;\n * abort on any failed send or premature socket close before calling finish.\n */\nexport function createLiveRecorder(options: LiveRecorderOptions) {\n const limits = normalizeLiveOptions(options.live);\n const maxBytes = Math.min(\n limit(options.record.maxProxyBufferBytes, DEFAULT_MAX_PROXY_BUFFER_BYTES),\n PROXY_BUFFER_HARD_CEILING,\n );\n const maxFrames = limit(options.record.maxProxyBufferFrames, DEFAULT_MAX_PROXY_BUFFER_FRAMES);\n const started = performance.now();\n const entries: LiveEntry[] = [];\n const bindings: LiveBinding[] = [];\n const identities = new Map<string, { name: string; owner: \"client\" | \"server\" }>();\n let configuration: LiveObject | undefined;\n let bytes = 0,\n frames = 0,\n lastTime = 0,\n command = 0,\n audioBytes = 0;\n const audioTotals = { client: 0, server: 0 };\n let terminal = false;\n let failure: LiveFailureCategory | undefined;\n let result: LiveRecorderResult | undefined;\n function clear() {\n entries.length = 0;\n bindings.length = 0;\n identities.clear();\n configuration = undefined;\n }\n function abort(category: LiveFailureCategory = \"incomplete-capture\") {\n if (result) return;\n failure ??= category;\n clear();\n }\n function fail(category: LiveFailureCategory): never {\n abort(category);\n throw new LiveRecorderError(failure ?? category);\n }\n function annotate(event: LiveObject, direction: \"client\" | \"server\") {\n const sites = [...bindingSites(event, direction)].sort(\n (a, b) =>\n Number(!a[1].define) - Number(!b[1].define) ||\n Number(!a[1].imported) - Number(!b[1].imported),\n );\n for (const [pointer, site] of sites) {\n const value = field(event, pointer);\n const key = JSON.stringify([site.namespace, value]);\n const known = identities.get(key);\n if (known && known.owner !== site.owner) fail(\"protocol-divergence\");\n if (!known && !site.define && !site.imported) fail(\"protocol-divergence\");\n const name = known?.name ?? `${site.namespace}:${identities.size}`;\n if (!known) identities.set(key, { name, owner: site.owner });\n if (!options.record.proxyOnly)\n bindings.push({\n entry: entries.length,\n pointer,\n name,\n owner: site.owner,\n action: known ? \"reference\" : \"define\",\n ...(!known && !site.define && site.imported\n ? { origin: \"imported-context\" as const }\n : {}),\n });\n }\n }\n function accept(\n direction: \"client\" | \"server\",\n raw: string,\n atMs = Math.floor(performance.now() - started),\n ) {\n if (result) throw new LiveRecorderError(\"incomplete-capture\");\n if (failure) throw new LiveRecorderError(failure);\n if (terminal) fail(\"protocol-divergence\");\n if (!Number.isSafeInteger(atMs) || atMs < lastTime) fail(\"protocol-divergence\");\n if (atMs > limits.maxDurationMs) fail(\"timeout\");\n const length = Buffer.byteLength(raw);\n if (length > limits.maxMessageBytes || length > maxBytes - bytes || frames >= maxFrames)\n fail(\"resource-limit\");\n let value: unknown;\n try {\n value = JSON.parse(raw);\n } catch {\n fail(direction === \"client\" ? \"invalid-client\" : \"protocol-divergence\");\n }\n if (!boundedJson(value) || !object(value) || typeof value.type !== \"string\")\n fail(direction === \"client\" ? \"invalid-client\" : \"protocol-divergence\");\n const event = value;\n if (frames === 0 && (direction !== \"client\" || event.type !== \"session.start\"))\n fail(\"invalid-client\");\n if (event.type === \"session.start\") {\n if (frames !== 0 || direction !== \"client\" || !object(event.session)) fail(\"invalid-client\");\n configuration = event.session;\n }\n if (event.type === \"error\") fail(\"protocol-divergence\");\n if (event.type === \"session.closed\") {\n if (\n direction !== \"server\" ||\n ![\"close_requested\", \"remote_hangup\"].includes(String(event.reason))\n )\n fail(\"incomplete-capture\");\n terminal = true;\n }\n let decoded = 0;\n if (\n (direction === \"client\" && event.type === \"session.input_audio.append\") ||\n (direction === \"server\" && event.type === \"session.output_audio.delta\")\n ) {\n const pcm = event[direction === \"client\" ? \"audio\" : \"delta\"];\n if (\n typeof pcm !== \"string\" ||\n pcm.length % 4 ||\n !/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(pcm)\n )\n fail(direction === \"client\" ? \"invalid-client\" : \"protocol-divergence\");\n decoded = (pcm.length / 4) * 3 - (pcm.endsWith(\"==\") ? 2 : pcm.endsWith(\"=\") ? 1 : 0);\n if (decoded % 2) fail(direction === \"client\" ? \"invalid-client\" : \"protocol-divergence\");\n if (decoded > limits.maxDecodedAudioBytes - audioTotals[direction]) fail(\"resource-limit\");\n if (Buffer.from(pcm, \"base64\").toString(\"base64\") !== pcm) fail(\"protocol-divergence\");\n audioTotals[direction] += decoded;\n }\n if (direction === \"client\") {\n try {\n validateLiveClientEvent(event, limits);\n } catch {\n fail(\"invalid-client\");\n }\n }\n if (direction === \"client\") {\n if (event.type === \"session.input_audio.append\") audioBytes += decoded;\n else {\n command++;\n audioBytes = 0;\n }\n }\n bytes += length;\n frames++;\n lastTime = atMs;\n try {\n annotate(event, direction);\n } catch {\n fail(\"protocol-divergence\");\n }\n if (!options.record.proxyOnly) {\n entries.push({\n direction,\n atMs,\n event,\n ...(direction === \"server\" ? { barrier: { command, audioBytes } } : {}),\n });\n }\n }\n function finish(): LiveRecorderResult {\n if (result) return result;\n if (!terminal && !failure) abort(\"incomplete-capture\");\n if (failure)\n return (result = {\n kind: \"failed\",\n category: failure,\n error: `Live capture failed: ${failure}`,\n });\n if (options.record.proxyOnly) {\n clear();\n return (result = { kind: \"skipped\" });\n }\n if (!configuration || !object(configuration.delegation)) {\n abort();\n return finish();\n }\n const mode = configuration.delegation.type === \"client\" ? \"client\" : \"managed\";\n let transcript: LiveTranscript;\n try {\n transcript = validateLiveTranscript(\n {\n version: 1,\n model: \"gpt-live-1\",\n mode,\n audio: { encoding: \"pcm16le\", sampleRateHz: 24000, channels: 1 },\n configuration,\n entries,\n bindings,\n capture: {\n source: \"provider\",\n complete: true,\n terminalEntry: entries.length - 1,\n ...(options.provenance ? { provenance: options.provenance } : {}),\n },\n },\n limits,\n );\n } catch {\n abort(\"protocol-divergence\");\n return finish();\n }\n try {\n transcript = sanitizeLiveTranscript(\n transcript,\n [...limits.secretValues, ...(options.secretValues ?? [])],\n options.credentialFields,\n limits,\n );\n } catch {\n abort(\"unsafe-export\");\n return finish();\n }\n const fixture: Fixture = {\n match: { endpoint: \"openai-live\", model: \"gpt-live-1\" },\n response: { live: transcript },\n };\n // Existing persistence diagnostics include configured paths. Do not expose those\n // through Live's safe journal/error surface; report only a category here.\n const persisted = persistFixture({\n record: options.record,\n providerKey: \"openai\",\n filePrefix: \"openai-live\",\n testId: options.testId ?? DEFAULT_TEST_ID,\n fixture,\n fixtures: options.fixtures,\n logger: new Logger(\"silent\"),\n });\n clear();\n if (persisted.kind === \"failed\") {\n options.logger.warn(\"Live capture persistence failed\");\n return (result = {\n kind: \"failed\",\n category: \"incomplete-capture\",\n error: \"Live capture persistence failed\",\n });\n }\n options.logger.info(\"Complete Live capture recorded\");\n return (result = persisted);\n }\n return {\n acceptClient: (raw: string, atMs?: number) => accept(\"client\", raw, atMs),\n acceptServer: (raw: string, atMs?: number) => accept(\"server\", raw, atMs),\n finish,\n abort,\n };\n}\n"],"mappings":"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"}
|