@kuralle-syrinx/core 4.4.0 → 4.5.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 (217) hide show
  1. package/dist/audio/alaw.d.ts +3 -0
  2. package/dist/audio/alaw.d.ts.map +1 -0
  3. package/dist/audio/alaw.js +53 -0
  4. package/dist/audio/alaw.js.map +1 -0
  5. package/dist/audio/g722.d.ts +39 -0
  6. package/dist/audio/g722.d.ts.map +1 -0
  7. package/dist/audio/g722.js +286 -0
  8. package/dist/audio/g722.js.map +1 -0
  9. package/dist/audio/index.d.ts +7 -0
  10. package/dist/audio/index.d.ts.map +1 -0
  11. package/dist/audio/index.js +8 -0
  12. package/dist/audio/index.js.map +1 -0
  13. package/dist/audio/loudness.d.ts +13 -0
  14. package/dist/audio/loudness.d.ts.map +1 -0
  15. package/dist/audio/loudness.js +65 -0
  16. package/dist/audio/loudness.js.map +1 -0
  17. package/dist/audio/mulaw.d.ts +3 -0
  18. package/dist/audio/mulaw.d.ts.map +1 -0
  19. package/dist/audio/mulaw.js +39 -0
  20. package/dist/audio/mulaw.js.map +1 -0
  21. package/dist/audio/pcm.d.ts +5 -0
  22. package/dist/audio/pcm.d.ts.map +1 -0
  23. package/dist/audio/pcm.js +40 -0
  24. package/dist/audio/pcm.js.map +1 -0
  25. package/dist/audio/resample.d.ts +12 -0
  26. package/dist/audio/resample.d.ts.map +1 -0
  27. package/dist/audio/resample.js +157 -0
  28. package/dist/audio/resample.js.map +1 -0
  29. package/dist/audio-envelope.d.ts +23 -0
  30. package/dist/audio-envelope.d.ts.map +1 -0
  31. package/dist/audio-envelope.js +114 -0
  32. package/dist/audio-envelope.js.map +1 -0
  33. package/dist/confidence-to-wait.d.ts +12 -0
  34. package/dist/confidence-to-wait.d.ts.map +1 -0
  35. package/dist/confidence-to-wait.js +18 -0
  36. package/dist/confidence-to-wait.js.map +1 -0
  37. package/dist/conversation-event.d.ts +19 -0
  38. package/dist/conversation-event.d.ts.map +1 -0
  39. package/dist/conversation-event.js +44 -0
  40. package/dist/conversation-event.js.map +1 -0
  41. package/dist/error-handler.d.ts +35 -0
  42. package/dist/error-handler.d.ts.map +1 -0
  43. package/dist/error-handler.js +136 -0
  44. package/dist/error-handler.js.map +1 -0
  45. package/dist/idle-timeout.d.ts +69 -0
  46. package/dist/idle-timeout.d.ts.map +1 -0
  47. package/dist/idle-timeout.js +149 -0
  48. package/dist/idle-timeout.js.map +1 -0
  49. package/dist/incremental-unit.d.ts +17 -0
  50. package/dist/incremental-unit.d.ts.map +1 -0
  51. package/dist/incremental-unit.js +5 -0
  52. package/dist/incremental-unit.js.map +1 -0
  53. package/dist/index.d.ts +47 -0
  54. package/dist/index.d.ts.map +1 -0
  55. package/dist/index.js +61 -0
  56. package/dist/index.js.map +1 -0
  57. package/dist/init-chain.d.ts +35 -0
  58. package/dist/init-chain.d.ts.map +1 -0
  59. package/dist/init-chain.js +102 -0
  60. package/dist/init-chain.js.map +1 -0
  61. package/dist/init-stage-order.d.ts +5 -0
  62. package/dist/init-stage-order.d.ts.map +1 -0
  63. package/dist/init-stage-order.js +74 -0
  64. package/dist/init-stage-order.js.map +1 -0
  65. package/dist/interaction-coordinator.d.ts +45 -0
  66. package/dist/interaction-coordinator.d.ts.map +1 -0
  67. package/dist/interaction-coordinator.js +197 -0
  68. package/dist/interaction-coordinator.js.map +1 -0
  69. package/dist/interaction-policy.d.ts +103 -0
  70. package/dist/interaction-policy.d.ts.map +1 -0
  71. package/dist/interaction-policy.js +6 -0
  72. package/dist/interaction-policy.js.map +1 -0
  73. package/dist/iu-ledger.d.ts +39 -0
  74. package/dist/iu-ledger.d.ts.map +1 -0
  75. package/dist/iu-ledger.js +90 -0
  76. package/dist/iu-ledger.js.map +1 -0
  77. package/dist/latency-filler-fixtures.d.ts +7 -0
  78. package/dist/latency-filler-fixtures.d.ts.map +1 -0
  79. package/dist/latency-filler-fixtures.js +10 -0
  80. package/dist/latency-filler-fixtures.js.map +1 -0
  81. package/dist/latency-filler.d.ts +29 -0
  82. package/dist/latency-filler.d.ts.map +1 -0
  83. package/dist/latency-filler.js +102 -0
  84. package/dist/latency-filler.js.map +1 -0
  85. package/dist/mode-switcher.d.ts +24 -0
  86. package/dist/mode-switcher.d.ts.map +1 -0
  87. package/dist/mode-switcher.js +83 -0
  88. package/dist/mode-switcher.js.map +1 -0
  89. package/dist/observability-observer.d.ts +36 -0
  90. package/dist/observability-observer.d.ts.map +1 -0
  91. package/dist/observability-observer.js +141 -0
  92. package/dist/observability-observer.js.map +1 -0
  93. package/dist/observability.d.ts +68 -0
  94. package/dist/observability.d.ts.map +1 -0
  95. package/dist/observability.js +70 -0
  96. package/dist/observability.js.map +1 -0
  97. package/dist/packet-factories.d.ts +58 -0
  98. package/dist/packet-factories.d.ts.map +1 -0
  99. package/dist/packet-factories.js +181 -0
  100. package/dist/packet-factories.js.map +1 -0
  101. package/dist/packets.d.ts +532 -0
  102. package/dist/packets.d.ts.map +1 -0
  103. package/dist/packets.js +51 -0
  104. package/dist/packets.js.map +1 -0
  105. package/dist/pipeline-bus.d.ts +92 -0
  106. package/dist/pipeline-bus.d.ts.map +1 -0
  107. package/dist/pipeline-bus.js +294 -0
  108. package/dist/pipeline-bus.js.map +1 -0
  109. package/dist/plugin-contract.d.ts +73 -0
  110. package/dist/plugin-contract.d.ts.map +1 -0
  111. package/dist/plugin-contract.js +30 -0
  112. package/dist/plugin-contract.js.map +1 -0
  113. package/dist/policies/defer.d.ts +11 -0
  114. package/dist/policies/defer.d.ts.map +1 -0
  115. package/dist/policies/defer.js +13 -0
  116. package/dist/policies/defer.js.map +1 -0
  117. package/dist/policies/rule-based.d.ts +35 -0
  118. package/dist/policies/rule-based.d.ts.map +1 -0
  119. package/dist/policies/rule-based.js +130 -0
  120. package/dist/policies/rule-based.js.map +1 -0
  121. package/dist/pricing.d.ts +34 -0
  122. package/dist/pricing.d.ts.map +1 -0
  123. package/dist/pricing.js +108 -0
  124. package/dist/pricing.js.map +1 -0
  125. package/dist/primary-speaker-fixtures.d.ts +12 -0
  126. package/dist/primary-speaker-fixtures.d.ts.map +1 -0
  127. package/dist/primary-speaker-fixtures.js +37 -0
  128. package/dist/primary-speaker-fixtures.js.map +1 -0
  129. package/dist/primary-speaker-gate.d.ts +42 -0
  130. package/dist/primary-speaker-gate.d.ts.map +1 -0
  131. package/dist/primary-speaker-gate.js +178 -0
  132. package/dist/primary-speaker-gate.js.map +1 -0
  133. package/dist/provider-fallback.d.ts +28 -0
  134. package/dist/provider-fallback.d.ts.map +1 -0
  135. package/dist/provider-fallback.js +72 -0
  136. package/dist/provider-fallback.js.map +1 -0
  137. package/dist/reasoner-hedge.d.ts +21 -0
  138. package/dist/reasoner-hedge.d.ts.map +1 -0
  139. package/dist/reasoner-hedge.js +170 -0
  140. package/dist/reasoner-hedge.js.map +1 -0
  141. package/dist/reasoner-route.d.ts +24 -0
  142. package/dist/reasoner-route.d.ts.map +1 -0
  143. package/dist/reasoner-route.js +87 -0
  144. package/dist/reasoner-route.js.map +1 -0
  145. package/dist/reasoner-session-store.d.ts +18 -0
  146. package/dist/reasoner-session-store.d.ts.map +1 -0
  147. package/dist/reasoner-session-store.js +21 -0
  148. package/dist/reasoner-session-store.js.map +1 -0
  149. package/dist/reasoner.d.ts +97 -0
  150. package/dist/reasoner.d.ts.map +1 -0
  151. package/dist/reasoner.js +9 -0
  152. package/dist/reasoner.js.map +1 -0
  153. package/dist/retry.d.ts +31 -0
  154. package/dist/retry.d.ts.map +1 -0
  155. package/dist/retry.js +83 -0
  156. package/dist/retry.js.map +1 -0
  157. package/dist/scheduler.d.ts +11 -0
  158. package/dist/scheduler.d.ts.map +1 -0
  159. package/dist/scheduler.js +20 -0
  160. package/dist/scheduler.js.map +1 -0
  161. package/dist/spend-cap.d.ts +27 -0
  162. package/dist/spend-cap.d.ts.map +1 -0
  163. package/dist/spend-cap.js +38 -0
  164. package/dist/spend-cap.js.map +1 -0
  165. package/dist/tts-playout-clock.d.ts +43 -0
  166. package/dist/tts-playout-clock.d.ts.map +1 -0
  167. package/dist/tts-playout-clock.js +125 -0
  168. package/dist/tts-playout-clock.js.map +1 -0
  169. package/dist/turn-arbiter.d.ts +41 -0
  170. package/dist/turn-arbiter.d.ts.map +1 -0
  171. package/dist/turn-arbiter.js +259 -0
  172. package/dist/turn-arbiter.js.map +1 -0
  173. package/dist/voice-agent-session-util.d.ts +60 -0
  174. package/dist/voice-agent-session-util.d.ts.map +1 -0
  175. package/dist/voice-agent-session-util.js +204 -0
  176. package/dist/voice-agent-session-util.js.map +1 -0
  177. package/dist/voice-agent-session.d.ts +435 -0
  178. package/dist/voice-agent-session.d.ts.map +1 -0
  179. package/dist/voice-agent-session.js +1597 -0
  180. package/dist/voice-agent-session.js.map +1 -0
  181. package/dist/voice-text.d.ts +46 -0
  182. package/dist/voice-text.d.ts.map +1 -0
  183. package/dist/voice-text.js +209 -0
  184. package/dist/voice-text.js.map +1 -0
  185. package/package.json +19 -6
  186. package/src/audio/alaw.test.ts +87 -0
  187. package/src/audio/audio.test.ts +285 -0
  188. package/src/audio/g722.test.ts +149 -0
  189. package/src/audio/loudness.test.ts +58 -0
  190. package/src/audio-envelope.test.ts +167 -0
  191. package/src/confidence-to-wait.test.ts +21 -0
  192. package/src/error-handler.test.ts +56 -0
  193. package/src/hedge-throwing-backend.test.ts +46 -0
  194. package/src/interaction-coordinator.test.ts +529 -0
  195. package/src/iu-ledger.test.ts +276 -0
  196. package/src/latency-filler.test.ts +62 -0
  197. package/src/observability-observer.test.ts +248 -0
  198. package/src/observability.test.ts +94 -0
  199. package/src/packet-factories.test.ts +126 -0
  200. package/src/pipeline-bus.g10.test.ts +145 -0
  201. package/src/pipeline-bus.test.ts +211 -0
  202. package/src/policies/defer.test.ts +86 -0
  203. package/src/policies/rule-based.test.ts +334 -0
  204. package/src/pricing.test.ts +226 -0
  205. package/src/primary-speaker-gate.test.ts +150 -0
  206. package/src/provider-fallback.test.ts +87 -0
  207. package/src/reasoner-hedge.test.ts +361 -0
  208. package/src/reasoner-route.test.ts +248 -0
  209. package/src/reasoner.test.ts +69 -0
  210. package/src/retry.test.ts +83 -0
  211. package/src/route-throwing-spec.test.ts +44 -0
  212. package/src/spend-cap.test.ts +114 -0
  213. package/src/tts-playout-clock.test.ts +125 -0
  214. package/src/turn-arbiter.characterization.test.ts +477 -0
  215. package/src/turn-arbiter.test.ts +762 -0
  216. package/src/voice-agent-session.test.ts +4165 -0
  217. package/src/voice-text.test.ts +156 -0
@@ -0,0 +1,435 @@
1
+ import { type PipelineBus } from "./pipeline-bus.js";
2
+ import type { VoicePlugin, PluginConfig } from "./plugin-contract.js";
3
+ import { type IdleTimeoutConfig } from "./idle-timeout.js";
4
+ import { type ConversationEvent } from "./conversation-event.js";
5
+ import type { UsageStage } from "./packets.js";
6
+ import { SessionState } from "./packets.js";
7
+ import { type InteractionPolicy } from "./interaction-policy.js";
8
+ import { type LoudnessConfig } from "./audio/loudness.js";
9
+ import { type MetricsExporter } from "./observability.js";
10
+ import { type ObservabilityLayer } from "./observability.js";
11
+ import { type Scheduler } from "./scheduler.js";
12
+ export interface VoiceAgentSessionConfig {
13
+ /** Plugin configurations, keyed by plugin name. */
14
+ plugins: Record<string, PluginConfig>;
15
+ /** Idle timeout configuration. */
16
+ idleTimeout?: Partial<IdleTimeoutConfig>;
17
+ /** PipelineBus configuration. */
18
+ busConfig?: {
19
+ mainCapacity?: number;
20
+ bgCapacity?: number;
21
+ criticalBatchSize?: number;
22
+ };
23
+ /**
24
+ * Maximum ms to wait for an STT final transcript after audio injection stops.
25
+ * When this timer fires, asks the streaming STT provider to flush buffered audio.
26
+ * Default: 7000 (endpointing + 2s grace)
27
+ */
28
+ sttForceFinalizeTimeoutMs?: number;
29
+ /**
30
+ * Minimum sustained user-speech duration (ms) during assistant playback before a
31
+ * barge-in is committed. Filters transient noise, clicks, and very short blips that
32
+ * would otherwise falsely cut off the agent. The agent keeps speaking until the
33
+ * user's speech is sustained past this threshold, then interruption fires
34
+ * immediately. Set to 0 to disable the gate and interrupt on the first VAD speech
35
+ * frame (legacy behavior). Default: 280 ms.
36
+ */
37
+ minInterruptionMs?: number;
38
+ /**
39
+ * When true (default), barge-in requires sustained speech from the enrolled
40
+ * primary speaker (first user turn fingerprint) in addition to G1's time gate.
41
+ * Non-primary / echo speech emits `interrupt.suppressed_non_primary`. When no
42
+ * profile is enrolled yet, falls back to G1-only behavior.
43
+ */
44
+ primarySpeakerBargeInEnabled?: boolean;
45
+ /**
46
+ * When true, emit a short discourse connective via TTS at endpoint (before LLM
47
+ * TTFB) and splice the real response in when it arrives. Off by default.
48
+ */
49
+ latencyFillerEnabled?: boolean;
50
+ /**
51
+ * Maximum ms after a user turn ends to wait for first assistant audio before
52
+ * emitting a vaqi.missed_response metric (VAQI-M). 0 disables the check.
53
+ * Default: 4000.
54
+ */
55
+ vaqiMissedResponseMs?: number;
56
+ /**
57
+ * Max ms of silence from the TTS provider AFTER it has begun producing audio for a
58
+ * turn before the output is treated as a stalled provider. Guards against a TTS
59
+ * provider that goes silent mid-utterance without `tts.end` or an error (dead air).
60
+ * Armed only after the first `tts.audio`, so first-audio latency (which can be many
61
+ * seconds on some providers, e.g. Gemini) is never watchdogged. On breach, a
62
+ * recoverable `tts.error` (NetworkTimeout) is emitted so the turn fails visibly
63
+ * instead of hanging. 0 disables. Default: 15000.
64
+ */
65
+ ttsStallMs?: number;
66
+ /** Optional per-session Int16 RMS normalization for outbound assistant audio. Disabled by default. */
67
+ outboundLoudness?: LoudnessConfig;
68
+ /**
69
+ * Max ms of silence on inbound user audio while the session is Ready before a
70
+ * recoverable transport warning is emitted. Continuous streams (telephony, open
71
+ * mic) should set this; push-to-talk / headless sessions leave at 0 (disabled).
72
+ * Default: 0.
73
+ */
74
+ inputCadenceTimeoutMs?: number;
75
+ /**
76
+ * Spoken fallback when the reasoning (LLM) layer fails a turn with a recoverable
77
+ * error. "Never fail silently" (Deepgram guide Ch3): rather than ending the turn in
78
+ * unexplained silence, the agent speaks this line via the normal TTS path (which is
79
+ * unaffected by an LLM failure). Empty string disables. Default: a brief apology.
80
+ * (TTS/STT-failure fallback needs canned audio / a clarification prompt — out of scope.)
81
+ */
82
+ errorFallbackText?: string;
83
+ /**
84
+ * G3 (RFC bimodel-delegate-seam): ms a tool call may stay pending before the
85
+ * `tool_call_cue` session event fires its time-triggered `"delayed"` phase — the
86
+ * "still working" cue clients render during a long reasoner wait (cf. Vapi's
87
+ * `request-response-delayed` + `timingMilliseconds`). 0 disables the delayed
88
+ * phase; started/complete/failed always fire. Default: 2000.
89
+ */
90
+ delayCueAfterMs?: number;
91
+ /**
92
+ * Which component owns turn boundary (EOS) for this session. Defaults to
93
+ * provider STT ownership; Smart Turn sessions must opt in explicitly.
94
+ */
95
+ endpointingOwner?: "provider_stt" | "smart_turn" | "timer";
96
+ /** The front model owns full-duplex interaction (turn-taking + barge-in). When true, the session's
97
+ * InteractionPolicy runs observe-only (DeferInteractionPolicy) — Syrinx does not drive its own
98
+ * turn/interrupt decisions; the front's native decisions stand. Default: false (Syrinx drives).
99
+ * A realtime factory sets this from RealtimeAdapter.caps.supportsFullDuplex. */
100
+ fullDuplex?: boolean;
101
+ /** When true, Syrinx suppresses policy-timed backchannel cue packets (front/provider owns them). */
102
+ emitsBackchannel?: boolean;
103
+ /**
104
+ * Optional interaction policy injected by the caller (learned controllers, Smart Turn policy, etc.).
105
+ * When omitted, the session uses RuleBasedInteractionPolicy. When `fullDuplex` is true, the
106
+ * coordinator runs observe-only via DeferInteractionPolicy regardless of this setting.
107
+ */
108
+ interactionPolicy?: InteractionPolicy;
109
+ /** Config passed to `interactionPolicy.initialize` when the injected policy is lifecycle-capable. */
110
+ interactionPolicyConfig?: Record<string, unknown>;
111
+ readonly metricsExporter?: MetricsExporter;
112
+ readonly scheduler?: Scheduler;
113
+ readonly observability?: {
114
+ readonly sessionId?: string;
115
+ readonly provider?: string;
116
+ readonly model?: string;
117
+ readonly region?: string;
118
+ readonly layer?: ObservabilityLayer;
119
+ };
120
+ }
121
+ export interface VoiceAgentSessionEvents {
122
+ user_started_speaking: (event: {
123
+ tsMs: number;
124
+ turnId: string;
125
+ }) => void;
126
+ user_stopped_speaking: (event: {
127
+ tsMs: number;
128
+ turnId: string;
129
+ }) => void;
130
+ user_input_partial: (event: {
131
+ tsMs: number;
132
+ turnId: string;
133
+ text: string;
134
+ }) => void;
135
+ user_input_final: (event: {
136
+ tsMs: number;
137
+ turnId: string;
138
+ text: string;
139
+ confidence: number;
140
+ }) => void;
141
+ agent_text_delta: (event: {
142
+ tsMs: number;
143
+ turnId: string;
144
+ delta: string;
145
+ }) => void;
146
+ agent_tool_call: (event: {
147
+ tsMs: number;
148
+ turnId: string;
149
+ id: string;
150
+ name: string;
151
+ args: Record<string, unknown>;
152
+ }) => void;
153
+ agent_tool_result: (event: {
154
+ tsMs: number;
155
+ turnId: string;
156
+ id: string;
157
+ result: string;
158
+ durationMs: number;
159
+ }) => void;
160
+ delegate_query: (event: {
161
+ tsMs: number;
162
+ turnId: string;
163
+ query: string;
164
+ toolId?: string;
165
+ toolName?: string;
166
+ }) => void;
167
+ delegate_result: (event: {
168
+ tsMs: number;
169
+ turnId: string;
170
+ query: string;
171
+ answer: string;
172
+ durationMs: number;
173
+ grounded: boolean;
174
+ toolId?: string;
175
+ toolName?: string;
176
+ control?: {
177
+ name: string;
178
+ payload: unknown;
179
+ };
180
+ blocked?: {
181
+ userFacingMessage: string;
182
+ payload?: unknown;
183
+ };
184
+ }) => void;
185
+ /**
186
+ * G3: typed preamble/filler lifecycle for a pending tool call (Vapi-shaped:
187
+ * started / delayed / complete / failed). `delayed` is time-triggered by
188
+ * `delayCueAfterMs` while the call is still pending; `failed` fires on an LLM/bridge
189
+ * error, a barge-in, or a superseding turn while pending (R5). Transports surface
190
+ * these as `tool_call_*` wire messages — the standard "thinking" cue.
191
+ */
192
+ tool_call_cue: (event: {
193
+ tsMs: number;
194
+ turnId: string;
195
+ phase: "started" | "delayed" | "complete" | "failed";
196
+ toolId: string;
197
+ toolName: string;
198
+ afterMs?: number;
199
+ }) => void;
200
+ /**
201
+ * Per-turn latency decomposition, timestamped at the turn's first TTS audio.
202
+ * When generation is still active at first audio, emission waits for `tts.end` so
203
+ * provider passes that follow a spoken tool preamble are included in the totals.
204
+ * `ttfaMs` is anchored to the real end of user speech (VAD speech-end, falling
205
+ * back to the endpoint decision) — `fillerUsed` flags turns where a latency filler spoke
206
+ * first, and `backchannelUsed` flags turns where a wait-gap cue played before the answer.
207
+ * Decomposition: eouDelayMs (speech end → endpoint) + llmTtftMs (endpoint →
208
+ * first LLM delta) + textAggregationMs (first LLM delta → first TTS text) +
209
+ * ttsTtfbMs (first TTS text dispatched → first audio). A stage is omitted when the
210
+ * front does not produce that Syrinx packet for this turn: realtime fronts may emit
211
+ * provider audio directly, and provider-owned endpointing may complete after audio.
212
+ * `unattributedMs` is the explicit residual after subtracting only the stages present.
213
+ */
214
+ turn_latency: (event: {
215
+ tsMs: number;
216
+ turnId: string;
217
+ ttfaMs: number;
218
+ anchor: "speech_end" | "eos";
219
+ eouDelayMs?: number;
220
+ llmTtftMs?: number;
221
+ textAggregationMs?: number;
222
+ ttsTtfbMs?: number;
223
+ unattributedMs: number;
224
+ llmCallCount?: number;
225
+ llmPassTtftMs?: readonly number[];
226
+ fillerUsed: boolean;
227
+ backchannelUsed: boolean;
228
+ }) => void;
229
+ agent_first_audio: (event: {
230
+ tsMs: number;
231
+ turnId: string;
232
+ }) => void;
233
+ agent_finished: (event: {
234
+ tsMs: number;
235
+ turnId: string;
236
+ } & Record<string, unknown>) => void;
237
+ /**
238
+ * End-of-session usage manifest — the total billable resource this session consumed,
239
+ * summed per stage. Emitted once at close. This is the metering seam a host reads to
240
+ * bill, cap spend, or attribute cost to a tenant; today only the LLM stage is populated
241
+ * (STT/TTS producers are not yet wired), so `stages` may hold a single entry.
242
+ */
243
+ usage: (event: {
244
+ tsMs: number;
245
+ stages: readonly SessionStageUsage[];
246
+ }) => void;
247
+ error: (event: {
248
+ tsMs: number;
249
+ stage: string;
250
+ category: string;
251
+ message: string;
252
+ }) => void;
253
+ closed: (event: {
254
+ tsMs: number;
255
+ reason: string;
256
+ }) => void;
257
+ state_changed: (event: {
258
+ tsMs: number;
259
+ from: SessionState;
260
+ to: SessionState;
261
+ }) => void;
262
+ }
263
+ /** Per-stage usage totals for a session. Absent fields were never reported by that stage. */
264
+ export interface SessionStageUsage {
265
+ readonly stage: UsageStage;
266
+ readonly inputTokens?: number;
267
+ readonly outputTokens?: number;
268
+ readonly totalTokens?: number;
269
+ readonly cachedInputTokens?: number;
270
+ readonly reasoningTokens?: number;
271
+ readonly audioSeconds?: number;
272
+ readonly characters?: number;
273
+ }
274
+ export declare class VoiceAgentSession {
275
+ readonly bus: PipelineBus;
276
+ readonly debugEvents: ReadableStream<ConversationEvent>;
277
+ private readonly config;
278
+ private readonly sttForceFinalizeTimeoutMs;
279
+ private _state;
280
+ private plugins;
281
+ private initSteps;
282
+ private idleTimeout;
283
+ private modeSwitcher;
284
+ private debugPush;
285
+ private eventListeners;
286
+ private currentTurnId;
287
+ private busStartPromise;
288
+ private closePromise;
289
+ private readonly scheduler;
290
+ private readonly ttsPlayout;
291
+ private interruptedGenerationContextIds;
292
+ private generatingContextIds;
293
+ private ttsTextBuffers;
294
+ private readonly minInterruptionMs;
295
+ private readonly primarySpeakerGate;
296
+ private readonly ruleBasedPolicy;
297
+ private readonly injectedInteractionPolicy;
298
+ private readonly activeInteractionPolicy;
299
+ private readonly interaction;
300
+ private readonly latencyFiller;
301
+ private firstLlmDeltaReceived;
302
+ private readonly vaqiMissedResponseMs;
303
+ private readonly ttsStallMs;
304
+ private readonly outboundLoudnessConfig;
305
+ private readonly outboundLoudnessState;
306
+ private readonly inputCadenceTimeoutMs;
307
+ private readonly watchdogs;
308
+ private readonly observabilityObserver;
309
+ private readonly metricsExporter;
310
+ private readonly observabilityDims;
311
+ private turnUserStoppedAtMs;
312
+ private turnTimings;
313
+ private pendingTurnLatency;
314
+ /** Running usage totals per stage, summed across the session; emitted at close. */
315
+ private readonly usageByStage;
316
+ private speakerEnrollmentContextId;
317
+ private firstTtsAudioFired;
318
+ private readonly pendingInteractionPlayoutTimers;
319
+ private readonly errorFallbackText;
320
+ private fallbackInjectedContexts;
321
+ private readonly delayCueAfterMs;
322
+ private pendingToolCues;
323
+ private readonly endpointingOwner;
324
+ private readonly fullDuplex;
325
+ private readonly emitsBackchannel;
326
+ private userSpeaking;
327
+ private lastFinalizedContextId;
328
+ private readonly sttPartialWordTimings;
329
+ private readonly turnLocalizationStates;
330
+ private readonly emittedTurnLocalizations;
331
+ constructor(config: VoiceAgentSessionConfig);
332
+ private get turnArbiter();
333
+ get state(): SessionState;
334
+ get currentContextId(): string;
335
+ /** Register a plugin. Must be called before start(). */
336
+ registerPlugin(name: string, plugin: VoicePlugin): void;
337
+ /** Start the session. Runs init chain, starts bus draining. */
338
+ start(): Promise<void>;
339
+ /**
340
+ * Best-effort warm of registered plugins' remote/expensive resources. Call after start() to
341
+ * wake scaled-to-zero endpoints before the first user turn. The host decides when to invoke
342
+ * this — it is not called automatically from start(). Never throws; failed plugin prewarms
343
+ * are swallowed and may emit a prewarm.failed metric on the bus.
344
+ */
345
+ prewarm(): Promise<void>;
346
+ /** Shut down the session. Runs finalize chain in reverse order. */
347
+ close(): Promise<void>;
348
+ private closeOnce;
349
+ /** Switch between text and audio mode. */
350
+ switchMode(mode: "text" | "audio"): Promise<void>;
351
+ requestClientInterrupt(contextId: string): void;
352
+ on<K extends keyof VoiceAgentSessionEvents>(event: K, handler: VoiceAgentSessionEvents[K]): void;
353
+ off<K extends keyof VoiceAgentSessionEvents>(event: K, handler: VoiceAgentSessionEvents[K]): void;
354
+ private emit;
355
+ private wireBusHandlers;
356
+ private handleUserAudio;
357
+ private observeAudioFrame;
358
+ private handleSttAudio;
359
+ private handleUserText;
360
+ private handleSttPartial;
361
+ private handleSttInterim;
362
+ private handleSttResult;
363
+ private handleVadAudioForSpeakerGate;
364
+ private shouldEnrollPrimarySpeaker;
365
+ private observeSttForBargeIn;
366
+ private handleVadSpeechStarted;
367
+ private handleVadSpeechActivity;
368
+ private handleVadSpeechEnded;
369
+ /**
370
+ * A realtime front rotates its contextId when the provider starts responding
371
+ * (`RealtimeBridge.onResponseStarted`), so the user-side anchors (`speechEndedMs`, `eosMs`)
372
+ * are recorded under the PREVIOUS context while `tts.audio` — and therefore the
373
+ * `turn_latency` emit — lands under the new one. Without carrying the record across the
374
+ * rotation, `emitTurnLatency` finds no anchor and silently drops every native turn.
375
+ *
376
+ * Only fills gaps: anything the new context already recorded wins.
377
+ */
378
+ private carryTurnTimingAcrossContextChange;
379
+ private timingFor;
380
+ /** Emit a deferred turn_latency if one is pending, then clear it. Safe to call twice. */
381
+ private flushPendingTurnLatency;
382
+ private emitTurnLatency;
383
+ private handleTurnComplete;
384
+ private handleEosInterim;
385
+ private handleLlmDelta;
386
+ private handleLlmDone;
387
+ private bufferTtsText;
388
+ private flushTtsText;
389
+ private cancelLatencyFillerTurn;
390
+ private handleLlmToolCall;
391
+ private emitToolCallCue;
392
+ /** G3: resolve one pending tool call with a terminal cue phase. */
393
+ private resolveToolCue;
394
+ /** G3: fail every pending tool call for a context (error / barge-in / supersede). */
395
+ private failPendingToolCues;
396
+ private handleDelegateQuery;
397
+ private handleDelegateResult;
398
+ private handleLlmToolResult;
399
+ private handleConversationMetric;
400
+ private emitAcousticSignal;
401
+ private localizationStateFor;
402
+ private markInfrastructureBreach;
403
+ private markConversationFlag;
404
+ private emitTurnLocalization;
405
+ private scheduleTurnLocalization;
406
+ private static readonly USAGE_FIELDS;
407
+ private handleUsageRecorded;
408
+ private emitSessionUsage;
409
+ private handleTtsAudio;
410
+ private normalizeOutboundAudio;
411
+ private handleTtsEnd;
412
+ private scheduleInteractionPlayoutTick;
413
+ private cancelInteractionPlayoutTick;
414
+ private handleTtsPlayoutProgress;
415
+ private handleInterruptDetected;
416
+ /**
417
+ * Cancel a stale prior-turn generation/playout when a new turn supersedes it
418
+ * (L1). Mirrors the interrupt teardown but without the barge-in metrics — this
419
+ * is a turn boundary, not a user interruption. Stops leftover TTS audio, aborts
420
+ * the LLM, and drops late deltas/audio for the stale context.
421
+ */
422
+ private cancelStaleGeneration;
423
+ private handleComponentError;
424
+ private maybeSpeakErrorFallback;
425
+ private handleInitFailed;
426
+ private handleInjectMessage;
427
+ private handleSttReconfigure;
428
+ private handleDisconnect;
429
+ private buildInitChain;
430
+ private applyEndpointingOwnerInvariant;
431
+ private shouldInitializePlugin;
432
+ private emitDebug;
433
+ private latestActiveTtsContextId;
434
+ }
435
+ //# sourceMappingURL=voice-agent-session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"voice-agent-session.d.ts","sourceRoot":"","sources":["../src/voice-agent-session.ts"],"names":[],"mappings":"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"}