@absolutejs/voice 0.0.22-beta.58 → 0.0.22-beta.580

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 (497) hide show
  1. package/LICENSE +88 -0
  2. package/README.md +4543 -1181
  3. package/dist/angular/index.d.ts +36 -5
  4. package/dist/angular/index.js +4229 -393
  5. package/dist/angular/voice-agent-squad-status.service.d.ts +12 -0
  6. package/dist/angular/voice-call-debugger.service.d.ts +12 -0
  7. package/dist/angular/voice-call-player.service.d.ts +19 -0
  8. package/dist/angular/voice-campaign-dialer-proof.service.d.ts +14 -0
  9. package/dist/angular/voice-controller.service.d.ts +4 -1
  10. package/dist/angular/voice-cost-dashboard.service.d.ts +15 -0
  11. package/dist/angular/voice-delivery-runtime.service.d.ts +16 -0
  12. package/dist/angular/voice-live-agent-console.service.d.ts +16 -0
  13. package/dist/angular/voice-live-call-viewer.service.d.ts +16 -0
  14. package/dist/angular/voice-live-ops.service.d.ts +11 -0
  15. package/dist/angular/voice-ops-action-center.service.d.ts +13 -0
  16. package/dist/angular/voice-ops-status.service.d.ts +12 -0
  17. package/dist/angular/voice-platform-coverage.service.d.ts +12 -0
  18. package/dist/angular/voice-profile-comparison.service.d.ts +12 -0
  19. package/dist/angular/voice-proof-trends.service.d.ts +12 -0
  20. package/dist/angular/voice-provider-capabilities.service.d.ts +12 -0
  21. package/dist/angular/voice-provider-contracts.service.d.ts +12 -0
  22. package/dist/angular/voice-provider-status.service.d.ts +2 -2
  23. package/dist/angular/voice-readiness-failures.service.d.ts +13 -0
  24. package/dist/angular/voice-reconnect-profile-evidence.service.d.ts +12 -0
  25. package/dist/angular/voice-replay-timeline.service.d.ts +13 -0
  26. package/dist/angular/voice-routing-status.service.d.ts +11 -0
  27. package/dist/angular/voice-session-observability.service.d.ts +12 -0
  28. package/dist/angular/voice-session-snapshot.service.d.ts +13 -0
  29. package/dist/angular/voice-stream.service.d.ts +5 -1
  30. package/dist/angular/voice-trace-timeline.service.d.ts +12 -0
  31. package/dist/angular/voice-turn-latency.service.d.ts +13 -0
  32. package/dist/angular/voice-turn-quality.service.d.ts +12 -0
  33. package/dist/angular/voice-widget.service.d.ts +18 -0
  34. package/dist/angular/voice-workflow-status.service.d.ts +2 -2
  35. package/dist/client/actions.d.ts +128 -2
  36. package/dist/client/agentSquadStatus.d.ts +37 -0
  37. package/dist/client/agentSquadStatusWidget.d.ts +24 -0
  38. package/dist/client/audioPlayer.d.ts +5 -2
  39. package/dist/client/bargeInMonitor.d.ts +7 -0
  40. package/dist/client/browserMedia.d.ts +8 -0
  41. package/dist/client/browserNoiseSuppression.d.ts +42 -0
  42. package/dist/client/browserVoiceSupport.d.ts +22 -0
  43. package/dist/client/callDebugger.d.ts +21 -0
  44. package/dist/client/callDebuggerWidget.d.ts +30 -0
  45. package/dist/client/callPlayer.d.ts +41 -0
  46. package/dist/client/campaignDialerProof.d.ts +25 -0
  47. package/dist/client/connection.d.ts +4 -3
  48. package/dist/client/controller.d.ts +1 -1
  49. package/dist/client/conversationAnalytics.d.ts +30 -0
  50. package/dist/client/costDashboard.d.ts +27 -0
  51. package/dist/client/createVoiceStream.d.ts +1 -1
  52. package/dist/client/deliveryRuntime.d.ts +36 -0
  53. package/dist/client/deliveryRuntimeWidget.d.ts +37 -0
  54. package/dist/client/duplex.d.ts +2 -2
  55. package/dist/client/htmx.d.ts +1 -1
  56. package/dist/client/htmxAttributes.d.ts +24 -0
  57. package/dist/client/htmxBootstrap.js +1279 -77
  58. package/dist/client/htmxDashboardRenderers.d.ts +71 -0
  59. package/dist/client/index.d.ts +107 -15
  60. package/dist/client/index.js +10742 -254
  61. package/dist/client/liveAgentConsole.d.ts +28 -0
  62. package/dist/client/liveCallViewer.d.ts +42 -0
  63. package/dist/client/liveOps.d.ts +22 -0
  64. package/dist/client/liveOpsWidget.d.ts +23 -0
  65. package/dist/client/liveTurnLatency.d.ts +41 -0
  66. package/dist/client/microphone.d.ts +5 -4
  67. package/dist/client/opsActionCenter.d.ts +56 -0
  68. package/dist/client/opsActionCenterWidget.d.ts +29 -0
  69. package/dist/client/opsActionHistory.d.ts +21 -0
  70. package/dist/client/opsActionHistoryWidget.d.ts +11 -0
  71. package/dist/client/opsStatus.d.ts +21 -0
  72. package/dist/client/opsStatusWidget.d.ts +10 -10
  73. package/dist/client/platformCoverage.d.ts +21 -0
  74. package/dist/client/platformCoverageWidget.d.ts +38 -0
  75. package/dist/client/profileComparison.d.ts +21 -0
  76. package/dist/client/profileComparisonWidget.d.ts +41 -0
  77. package/dist/client/profileSwitchRecommendation.d.ts +21 -0
  78. package/dist/client/profileSwitchRecommendationWidget.d.ts +12 -0
  79. package/dist/client/proofTrends.d.ts +21 -0
  80. package/dist/client/proofTrendsWidget.d.ts +38 -0
  81. package/dist/client/providerCapabilities.d.ts +21 -0
  82. package/dist/client/providerCapabilitiesWidget.d.ts +32 -0
  83. package/dist/client/providerContracts.d.ts +21 -0
  84. package/dist/client/providerContractsWidget.d.ts +37 -0
  85. package/dist/client/providerSimulationControls.d.ts +33 -0
  86. package/dist/client/providerSimulationControlsWidget.d.ts +20 -0
  87. package/dist/client/providerStatus.d.ts +5 -3
  88. package/dist/client/providerStatusWidget.d.ts +32 -0
  89. package/dist/client/reactiveSource.d.ts +8 -0
  90. package/dist/client/readinessFailures.d.ts +21 -0
  91. package/dist/client/readinessFailuresWidget.d.ts +42 -0
  92. package/dist/client/reconnectProfileEvidence.d.ts +21 -0
  93. package/dist/client/reconnectProfileEvidenceWidget.d.ts +39 -0
  94. package/dist/client/replayTimeline.d.ts +26 -0
  95. package/dist/client/routingStatus.d.ts +21 -0
  96. package/dist/client/routingStatusWidget.d.ts +32 -0
  97. package/dist/client/sessionObservability.d.ts +21 -0
  98. package/dist/client/sessionObservabilityWidget.d.ts +31 -0
  99. package/dist/client/sessionSnapshot.d.ts +23 -0
  100. package/dist/client/sessionSnapshotWidget.d.ts +33 -0
  101. package/dist/client/store.d.ts +1 -1
  102. package/dist/client/timeStretch.d.ts +5 -0
  103. package/dist/client/traceTimeline.d.ts +21 -0
  104. package/dist/client/traceTimelineWidget.d.ts +36 -0
  105. package/dist/client/turnLatency.d.ts +24 -0
  106. package/dist/client/turnLatencyWidget.d.ts +33 -0
  107. package/dist/client/turnQuality.d.ts +21 -0
  108. package/dist/client/turnQualityWidget.d.ts +32 -0
  109. package/dist/client/voiceWidgetView.d.ts +48 -0
  110. package/dist/client/workflowStatus.d.ts +5 -3
  111. package/dist/{agent.d.ts → core/agent.d.ts} +83 -6
  112. package/dist/core/agentPerformanceReport.d.ts +40 -0
  113. package/dist/core/agentSquadContract.d.ts +98 -0
  114. package/dist/core/agentState.d.ts +12 -0
  115. package/dist/core/agentTools.d.ts +132 -0
  116. package/dist/core/aiScorecard.d.ts +32 -0
  117. package/dist/core/aiVoiceModel.d.ts +15 -0
  118. package/dist/core/amdDetector.d.ts +25 -0
  119. package/dist/{assistant.d.ts → core/assistant.d.ts} +14 -14
  120. package/dist/core/assistantExperiment.d.ts +42 -0
  121. package/dist/{assistantHealth.d.ts → core/assistantHealth.d.ts} +9 -9
  122. package/dist/{assistantMemory.d.ts → core/assistantMemory.d.ts} +10 -10
  123. package/dist/core/assistantMode.d.ts +22 -0
  124. package/dist/{audioConditioning.d.ts → core/audioConditioning.d.ts} +2 -2
  125. package/dist/core/audit.d.ts +131 -0
  126. package/dist/core/auditDeliveryRoutes.d.ts +85 -0
  127. package/dist/core/auditExport.d.ts +34 -0
  128. package/dist/core/auditRoutes.d.ts +66 -0
  129. package/dist/core/auditSinks.d.ts +151 -0
  130. package/dist/core/backchannel.d.ts +24 -0
  131. package/dist/core/bargeInRoutes.d.ts +56 -0
  132. package/dist/core/bookingFlow.d.ts +43 -0
  133. package/dist/core/browserCallProfiles.d.ts +120 -0
  134. package/dist/core/browserMediaRoutes.d.ts +62 -0
  135. package/dist/core/cachedTTS.d.ts +54 -0
  136. package/dist/core/calendarAdapter.d.ts +47 -0
  137. package/dist/core/calendarSlots.d.ts +35 -0
  138. package/dist/core/callDebugger.d.ts +66 -0
  139. package/dist/core/callDisposition.d.ts +38 -0
  140. package/dist/core/callQuota.d.ts +54 -0
  141. package/dist/core/callScorecard.d.ts +53 -0
  142. package/dist/core/callerCRMLinker.d.ts +29 -0
  143. package/dist/core/callerMemory.d.ts +37 -0
  144. package/dist/core/callingWindow.d.ts +26 -0
  145. package/dist/core/campaign.d.ts +795 -0
  146. package/dist/core/campaignControls.d.ts +37 -0
  147. package/dist/core/campaignDialers.d.ts +111 -0
  148. package/dist/core/campaignTemplate.d.ts +16 -0
  149. package/dist/core/competitiveCoverage.d.ts +141 -0
  150. package/dist/core/conversationSimulator.d.ts +73 -0
  151. package/dist/{correction.d.ts → core/correction.d.ts} +5 -4
  152. package/dist/core/costAccounting.d.ts +76 -0
  153. package/dist/core/costPredictor.d.ts +74 -0
  154. package/dist/core/crmCallLogger.d.ts +37 -0
  155. package/dist/core/crmContract.d.ts +70 -0
  156. package/dist/core/dataControl.d.ts +180 -0
  157. package/dist/core/defineVoiceAssistant.d.ts +68 -0
  158. package/dist/core/deliveryRuntime.d.ts +159 -0
  159. package/dist/core/deliverySinkRoutes.d.ts +117 -0
  160. package/dist/core/demoReadyRoutes.d.ts +98 -0
  161. package/dist/{diagnosticsRoutes.d.ts → core/diagnosticsRoutes.d.ts} +2 -2
  162. package/dist/core/dncRegistry.d.ts +38 -0
  163. package/dist/core/dtmfCollector.d.ts +37 -0
  164. package/dist/{evalRoutes.d.ts → core/evalRoutes.d.ts} +26 -20
  165. package/dist/{fileStore.d.ts → core/fileStore.d.ts} +34 -20
  166. package/dist/core/guardrails.d.ts +128 -0
  167. package/dist/{handoff.d.ts → core/handoff.d.ts} +10 -10
  168. package/dist/{handoffHealth.d.ts → core/handoffHealth.d.ts} +9 -9
  169. package/dist/core/holdAudio.d.ts +23 -0
  170. package/dist/{htmx.d.ts → core/htmx.d.ts} +2 -2
  171. package/dist/core/htmxDashboardRoutes.d.ts +250 -0
  172. package/dist/core/iceServers.d.ts +34 -0
  173. package/dist/core/incidentBundle.d.ts +119 -0
  174. package/dist/core/incidentTimeline.d.ts +260 -0
  175. package/dist/core/ivrPlan.d.ts +40 -0
  176. package/dist/core/latencySlo.d.ts +56 -0
  177. package/dist/core/liveCoach.d.ts +43 -0
  178. package/dist/core/liveLatency.d.ts +78 -0
  179. package/dist/core/liveOps.d.ts +190 -0
  180. package/dist/core/llmJudge.d.ts +45 -0
  181. package/dist/{logger.d.ts → core/logger.d.ts} +1 -2
  182. package/dist/core/mcpToolset.d.ts +58 -0
  183. package/dist/core/mediaPipelineRoutes.d.ts +171 -0
  184. package/dist/core/mediaPipelineSurfaces.d.ts +48 -0
  185. package/dist/{memoryStore.d.ts → core/memoryStore.d.ts} +1 -1
  186. package/dist/core/midCallSummary.d.ts +27 -0
  187. package/dist/{modelAdapters.d.ts → core/modelAdapters.d.ts} +52 -7
  188. package/dist/core/monitor.d.ts +148 -0
  189. package/dist/core/multilingualProof.d.ts +77 -0
  190. package/dist/core/noShowPredictor.d.ts +46 -0
  191. package/dist/core/oauth2TokenSource.d.ts +21 -0
  192. package/dist/core/observabilityExport.d.ts +501 -0
  193. package/dist/core/openaiTTS.d.ts +18 -0
  194. package/dist/core/operationalStatus.d.ts +87 -0
  195. package/dist/core/operationsRecord.d.ts +371 -0
  196. package/dist/{ops.d.ts → core/ops.d.ts} +70 -70
  197. package/dist/core/opsActionAuditRoutes.d.ts +99 -0
  198. package/dist/{opsConsoleRoutes.d.ts → core/opsConsoleRoutes.d.ts} +11 -8
  199. package/dist/{opsPresets.d.ts → core/opsPresets.d.ts} +2 -2
  200. package/dist/core/opsRecovery.d.ts +137 -0
  201. package/dist/{opsRuntime.d.ts → core/opsRuntime.d.ts} +6 -6
  202. package/dist/{opsSinks.d.ts → core/opsSinks.d.ts} +19 -19
  203. package/dist/core/opsStatus.d.ts +76 -0
  204. package/dist/core/opsStatusRoutes.d.ts +33 -0
  205. package/dist/{opsWebhook.d.ts → core/opsWebhook.d.ts} +15 -15
  206. package/dist/core/otelExporter.d.ts +83 -0
  207. package/dist/core/outcomeContract.d.ts +146 -0
  208. package/dist/{outcomeRecipes.d.ts → core/outcomeRecipes.d.ts} +4 -4
  209. package/dist/core/pathway.d.ts +94 -0
  210. package/dist/core/pathwayCompiler.d.ts +31 -0
  211. package/dist/core/pathwayGenerator.d.ts +27 -0
  212. package/dist/core/pathwayRuntime.d.ts +57 -0
  213. package/dist/core/pathwaySlotCollector.d.ts +29 -0
  214. package/dist/core/pathwayVisualizer.d.ts +8 -0
  215. package/dist/core/phoneAgent.d.ts +139 -0
  216. package/dist/core/phoneAgentProductionSmoke.d.ts +115 -0
  217. package/dist/core/phoneProvisioning.d.ts +29 -0
  218. package/dist/core/platformCoverage.d.ts +91 -0
  219. package/dist/{plugin.d.ts → core/plugin.d.ts} +2 -2
  220. package/dist/core/postCallAnalysis.d.ts +98 -0
  221. package/dist/core/postCallSurvey.d.ts +41 -0
  222. package/dist/{postgresStore.d.ts → core/postgresStore.d.ts} +20 -9
  223. package/dist/{presets.d.ts → core/presets.d.ts} +3 -3
  224. package/dist/core/productionReadiness.d.ts +757 -0
  225. package/dist/core/profileSwitchRecommendation.d.ts +350 -0
  226. package/dist/core/promptInjectionGuard.d.ts +30 -0
  227. package/dist/core/proofAssertions.d.ts +32 -0
  228. package/dist/core/proofPack.d.ts +211 -0
  229. package/dist/core/proofRunner.d.ts +79 -0
  230. package/dist/core/proofTrends.d.ts +966 -0
  231. package/dist/{providerAdapters.d.ts → core/providerAdapters.d.ts} +5 -5
  232. package/dist/core/providerCapabilities.d.ts +92 -0
  233. package/dist/core/providerDecisionTraces.d.ts +130 -0
  234. package/dist/{providerHealth.d.ts → core/providerHealth.d.ts} +15 -5
  235. package/dist/core/providerOrchestration.d.ts +109 -0
  236. package/dist/core/providerRouterTraces.d.ts +35 -0
  237. package/dist/core/providerRoutingContract.d.ts +71 -0
  238. package/dist/core/providerSlo.d.ts +142 -0
  239. package/dist/core/providerStackRecommendations.d.ts +188 -0
  240. package/dist/core/qualityDriftDetector.d.ts +44 -0
  241. package/dist/{qualityRoutes.d.ts → core/qualityRoutes.d.ts} +7 -7
  242. package/dist/{queue.d.ts → core/queue.d.ts} +48 -39
  243. package/dist/core/ragTool.d.ts +52 -0
  244. package/dist/core/readinessProfiles.d.ts +45 -0
  245. package/dist/core/realtimeChannel.d.ts +136 -0
  246. package/dist/core/realtimeProviderContracts.d.ts +133 -0
  247. package/dist/core/reconnectContract.d.ts +177 -0
  248. package/dist/core/recordingRedaction.d.ts +47 -0
  249. package/dist/core/recordingStore.d.ts +60 -0
  250. package/dist/core/redaction.d.ts +13 -0
  251. package/dist/core/reminderScheduler.d.ts +43 -0
  252. package/dist/{resilienceRoutes.d.ts → core/resilienceRoutes.d.ts} +34 -5
  253. package/dist/core/retention.d.ts +37 -0
  254. package/dist/core/retryPolicy.d.ts +38 -0
  255. package/dist/core/routeAuth.d.ts +58 -0
  256. package/dist/{routing.d.ts → core/routing.d.ts} +2 -2
  257. package/dist/{runtimeOps.d.ts → core/runtimeOps.d.ts} +3 -3
  258. package/dist/{s3Store.d.ts → core/s3Store.d.ts} +12 -3
  259. package/dist/core/scorecardCalibration.d.ts +31 -0
  260. package/dist/core/scribe.d.ts +50 -0
  261. package/dist/core/semanticTurn.d.ts +27 -0
  262. package/dist/{session.d.ts → core/session.d.ts} +1 -1
  263. package/dist/core/sessionObservability.d.ts +145 -0
  264. package/dist/{sessionReplay.d.ts → core/sessionReplay.d.ts} +31 -19
  265. package/dist/core/sessionSnapshot.d.ts +109 -0
  266. package/dist/core/simulationSuite.d.ts +144 -0
  267. package/dist/core/sloCalibration.d.ts +185 -0
  268. package/dist/{sqliteStore.d.ts → core/sqliteStore.d.ts} +20 -9
  269. package/dist/{store.d.ts → core/store.d.ts} +1 -1
  270. package/dist/core/supervisorPermissions.d.ts +33 -0
  271. package/dist/core/supervisorPresence.d.ts +49 -0
  272. package/dist/core/telephonyMediaRoutes.d.ts +72 -0
  273. package/dist/core/telephonyOutcome.d.ts +269 -0
  274. package/dist/core/toolContract.d.ts +161 -0
  275. package/dist/core/toolRuntime.d.ts +50 -0
  276. package/dist/{trace.d.ts → core/trace.d.ts} +61 -22
  277. package/dist/core/traceDeliveryRoutes.d.ts +86 -0
  278. package/dist/core/traceTimeline.d.ts +97 -0
  279. package/dist/core/transcriptAnnotator.d.ts +41 -0
  280. package/dist/{turnDetection.d.ts → core/turnDetection.d.ts} +1 -1
  281. package/dist/core/turnLatency.d.ts +95 -0
  282. package/dist/core/turnProfiles.d.ts +3 -0
  283. package/dist/core/turnQuality.d.ts +94 -0
  284. package/dist/{types.d.ts → core/types.d.ts} +573 -81
  285. package/dist/core/vapiAdapter.d.ts +160 -0
  286. package/dist/core/variableAnalytics.d.ts +47 -0
  287. package/dist/core/voiceConfiguration.d.ts +8 -0
  288. package/dist/core/voiceMonitoring.d.ts +444 -0
  289. package/dist/core/webhookFanout.d.ts +48 -0
  290. package/dist/core/webhookVerification.d.ts +27 -0
  291. package/dist/core/whisperChannel.d.ts +50 -0
  292. package/dist/{workflowContract.d.ts → core/workflowContract.d.ts} +21 -21
  293. package/dist/core/zeroDataRetention.d.ts +31 -0
  294. package/dist/drizzle/assistantMemory.d.ts +100 -0
  295. package/dist/drizzle/eval.d.ts +55 -0
  296. package/dist/drizzle/handoff.d.ts +56 -0
  297. package/dist/drizzle/incidentBundle.d.ts +55 -0
  298. package/dist/drizzle/index.d.ts +991 -0
  299. package/dist/drizzle/index.js +3059 -0
  300. package/dist/drizzle/observabilityExport.d.ts +55 -0
  301. package/dist/drizzle/proofTrends.d.ts +114 -0
  302. package/dist/drizzle/runtimeStorage.d.ts +1183 -0
  303. package/dist/drizzle/shared.d.ts +69 -0
  304. package/dist/embed/index.d.ts +38 -0
  305. package/dist/embed/index.js +1741 -0
  306. package/dist/embed/voice-widget.js +10 -0
  307. package/dist/index.d.ts +373 -74
  308. package/dist/index.js +46542 -7575
  309. package/dist/internal/evidence.d.ts +10 -0
  310. package/dist/internal/html.d.ts +6 -0
  311. package/dist/internal/status.d.ts +7 -0
  312. package/dist/react/VoiceAgentSquadStatus.d.ts +5 -0
  313. package/dist/react/VoiceCallDebuggerLaunch.d.ts +6 -0
  314. package/dist/react/VoiceCallPlayer.d.ts +11 -0
  315. package/dist/react/VoiceCostDashboard.d.ts +10 -0
  316. package/dist/react/VoiceDeliveryRuntime.d.ts +7 -0
  317. package/dist/react/VoiceLiveAgentConsole.d.ts +11 -0
  318. package/dist/react/VoiceLiveCallViewer.d.ts +9 -0
  319. package/dist/react/VoiceOpsActionCenter.d.ts +5 -0
  320. package/dist/react/VoiceOpsStatus.d.ts +1 -1
  321. package/dist/react/VoicePlatformCoverage.d.ts +6 -0
  322. package/dist/react/VoiceProfileComparison.d.ts +6 -0
  323. package/dist/react/VoiceProfileSwitchRecommendation.d.ts +6 -0
  324. package/dist/react/VoiceProofTrends.d.ts +6 -0
  325. package/dist/react/VoiceProviderCapabilities.d.ts +6 -0
  326. package/dist/react/VoiceProviderContracts.d.ts +6 -0
  327. package/dist/react/VoiceProviderSimulationControls.d.ts +5 -0
  328. package/dist/react/VoiceProviderStatus.d.ts +6 -0
  329. package/dist/react/VoiceReadinessFailures.d.ts +6 -0
  330. package/dist/react/VoiceReconnectProfileEvidence.d.ts +6 -0
  331. package/dist/react/VoiceReplayTimeline.d.ts +6 -0
  332. package/dist/react/VoiceRoutingStatus.d.ts +6 -0
  333. package/dist/react/VoiceSessionObservability.d.ts +6 -0
  334. package/dist/react/VoiceSessionSnapshot.d.ts +6 -0
  335. package/dist/react/VoiceTraceTimeline.d.ts +6 -0
  336. package/dist/react/VoiceTurnLatency.d.ts +6 -0
  337. package/dist/react/VoiceTurnQuality.d.ts +6 -0
  338. package/dist/react/VoiceWidget.d.ts +13 -0
  339. package/dist/react/index.d.ts +80 -6
  340. package/dist/react/index.js +12960 -323
  341. package/dist/react/useVoiceAgentSquadStatus.d.ts +8 -0
  342. package/dist/react/useVoiceCallDebugger.d.ts +8 -0
  343. package/dist/react/useVoiceCampaignDialerProof.d.ts +10 -0
  344. package/dist/react/useVoiceController.d.ts +5 -1
  345. package/dist/react/useVoiceDeliveryRuntime.d.ts +13 -0
  346. package/dist/react/useVoiceLiveOps.d.ts +9 -0
  347. package/dist/react/useVoiceOpsActionCenter.d.ts +11 -0
  348. package/dist/react/useVoiceOpsStatus.d.ts +8 -0
  349. package/dist/react/useVoicePlatformCoverage.d.ts +8 -0
  350. package/dist/react/useVoiceProfileComparison.d.ts +8 -0
  351. package/dist/react/useVoiceProfileSwitchRecommendation.d.ts +8 -0
  352. package/dist/react/useVoiceProofTrends.d.ts +8 -0
  353. package/dist/react/useVoiceProviderCapabilities.d.ts +8 -0
  354. package/dist/react/useVoiceProviderContracts.d.ts +8 -0
  355. package/dist/react/useVoiceProviderSimulationControls.d.ts +10 -0
  356. package/dist/react/useVoiceProviderStatus.d.ts +1 -1
  357. package/dist/react/useVoiceReadinessFailures.d.ts +8 -0
  358. package/dist/react/useVoiceReconnectProfileEvidence.d.ts +8 -0
  359. package/dist/react/useVoiceRoutingStatus.d.ts +8 -0
  360. package/dist/react/useVoiceSessionObservability.d.ts +8 -0
  361. package/dist/react/useVoiceSessionSnapshot.d.ts +9 -0
  362. package/dist/react/useVoiceStream.d.ts +5 -1
  363. package/dist/react/useVoiceTraceTimeline.d.ts +8 -0
  364. package/dist/react/useVoiceTurnLatency.d.ts +9 -0
  365. package/dist/react/useVoiceTurnQuality.d.ts +8 -0
  366. package/dist/react/useVoiceWorkflowStatus.d.ts +1 -1
  367. package/dist/svelte/createVoiceAgentSquadStatus.d.ts +9 -0
  368. package/dist/svelte/createVoiceCallDebugger.d.ts +10 -0
  369. package/dist/svelte/createVoiceCallPlayer.d.ts +33 -0
  370. package/dist/svelte/createVoiceCampaignDialerProof.d.ts +9 -0
  371. package/dist/svelte/createVoiceCostDashboard.d.ts +13 -0
  372. package/dist/svelte/createVoiceDeliveryRuntime.d.ts +11 -0
  373. package/dist/svelte/createVoiceLiveAgentConsole.d.ts +23 -0
  374. package/dist/svelte/createVoiceLiveCallViewer.d.ts +26 -0
  375. package/dist/svelte/createVoiceLiveOps.d.ts +13 -0
  376. package/dist/svelte/createVoiceOpsActionCenter.d.ts +10 -0
  377. package/dist/svelte/createVoiceOpsStatus.d.ts +4 -4
  378. package/dist/svelte/createVoicePlatformCoverage.d.ts +7 -0
  379. package/dist/svelte/createVoiceProfileComparison.d.ts +7 -0
  380. package/dist/svelte/createVoiceProofTrends.d.ts +7 -0
  381. package/dist/svelte/createVoiceProviderCapabilities.d.ts +10 -0
  382. package/dist/svelte/createVoiceProviderContracts.d.ts +10 -0
  383. package/dist/svelte/createVoiceProviderSimulationControls.d.ts +11 -0
  384. package/dist/svelte/createVoiceProviderStatus.d.ts +5 -3
  385. package/dist/svelte/createVoiceReadinessFailures.d.ts +7 -0
  386. package/dist/svelte/createVoiceReconnectProfileEvidence.d.ts +7 -0
  387. package/dist/svelte/createVoiceReplayTimeline.d.ts +13 -0
  388. package/dist/svelte/createVoiceRoutingStatus.d.ts +10 -0
  389. package/dist/svelte/createVoiceSessionObservability.d.ts +10 -0
  390. package/dist/svelte/createVoiceSessionSnapshot.d.ts +11 -0
  391. package/dist/svelte/createVoiceStream.d.ts +1 -1
  392. package/dist/svelte/createVoiceTraceTimeline.d.ts +10 -0
  393. package/dist/svelte/createVoiceTurnLatency.d.ts +11 -0
  394. package/dist/svelte/createVoiceTurnQuality.d.ts +10 -0
  395. package/dist/svelte/createVoiceWidget.d.ts +19 -0
  396. package/dist/svelte/createVoiceWorkflowStatus.d.ts +2 -2
  397. package/dist/svelte/index.d.ts +37 -6
  398. package/dist/svelte/index.js +7083 -753
  399. package/dist/telephony/contract.d.ts +61 -0
  400. package/dist/telephony/matrix.d.ts +97 -0
  401. package/dist/telephony/plivo.d.ts +303 -0
  402. package/dist/telephony/response.d.ts +1 -1
  403. package/dist/telephony/security.d.ts +182 -0
  404. package/dist/telephony/telnyx.d.ts +291 -0
  405. package/dist/telephony/twilio.d.ts +152 -15
  406. package/dist/testing/accuracy.d.ts +1 -1
  407. package/dist/testing/benchmark.d.ts +15 -15
  408. package/dist/testing/corrected.d.ts +9 -9
  409. package/dist/testing/duplex.d.ts +5 -5
  410. package/dist/testing/fixtures.d.ts +4 -4
  411. package/dist/testing/index.d.ts +13 -13
  412. package/dist/testing/index.js +6818 -957
  413. package/dist/testing/ioProviderSimulator.d.ts +5 -5
  414. package/dist/testing/providerSimulator.d.ts +5 -5
  415. package/dist/testing/review.d.ts +8 -8
  416. package/dist/testing/sessionBenchmark.d.ts +13 -13
  417. package/dist/testing/stt.d.ts +3 -3
  418. package/dist/testing/telephony.d.ts +27 -2
  419. package/dist/testing/tts.d.ts +2 -2
  420. package/dist/vue/VoiceCallDebuggerLaunch.d.ts +72 -0
  421. package/dist/vue/VoiceCallPlayer.d.ts +40 -0
  422. package/dist/vue/VoiceCostDashboard.d.ts +57 -0
  423. package/dist/vue/VoiceDeliveryRuntime.d.ts +34 -0
  424. package/dist/vue/VoiceLiveAgentConsole.d.ts +50 -0
  425. package/dist/vue/VoiceLiveCallViewer.d.ts +35 -0
  426. package/dist/vue/VoiceOpsActionCenter.d.ts +13 -0
  427. package/dist/vue/VoiceOpsStatus.d.ts +4 -0
  428. package/dist/vue/VoicePlatformCoverage.d.ts +27 -0
  429. package/dist/vue/VoiceProofTrends.d.ts +25 -0
  430. package/dist/vue/VoiceProviderCapabilities.d.ts +55 -0
  431. package/dist/vue/VoiceProviderContracts.d.ts +25 -0
  432. package/dist/vue/VoiceProviderSimulationControls.d.ts +88 -0
  433. package/dist/vue/VoiceProviderStatus.d.ts +55 -0
  434. package/dist/vue/VoiceReadinessFailures.d.ts +25 -0
  435. package/dist/vue/VoiceReconnectProfileEvidence.d.ts +25 -0
  436. package/dist/vue/VoiceReplayTimeline.d.ts +17 -0
  437. package/dist/vue/VoiceRoutingStatus.d.ts +55 -0
  438. package/dist/vue/VoiceSessionObservability.d.ts +27 -0
  439. package/dist/vue/VoiceSessionSnapshot.d.ts +72 -0
  440. package/dist/vue/VoiceTurnLatency.d.ts +73 -0
  441. package/dist/vue/VoiceTurnQuality.d.ts +55 -0
  442. package/dist/vue/VoiceWidget.d.ts +77 -0
  443. package/dist/vue/index.d.ts +49 -6
  444. package/dist/vue/index.js +12265 -417
  445. package/dist/vue/useVoiceAgentSquadStatus.d.ts +9 -0
  446. package/dist/vue/useVoiceCallDebugger.d.ts +10 -0
  447. package/dist/vue/useVoiceCampaignDialerProof.d.ts +11 -0
  448. package/dist/vue/useVoiceController.d.ts +10 -7
  449. package/dist/vue/useVoiceDeliveryRuntime.d.ts +13 -0
  450. package/dist/vue/useVoiceLiveOps.d.ts +9 -0
  451. package/dist/vue/useVoiceOpsActionCenter.d.ts +11 -0
  452. package/dist/vue/useVoiceOpsStatus.d.ts +9 -0
  453. package/dist/vue/useVoicePlatformCoverage.d.ts +9 -0
  454. package/dist/vue/useVoiceProfileComparison.d.ts +9 -0
  455. package/dist/vue/useVoiceProofTrends.d.ts +9 -0
  456. package/dist/vue/useVoiceProviderCapabilities.d.ts +9 -0
  457. package/dist/vue/useVoiceProviderContracts.d.ts +9 -0
  458. package/dist/vue/useVoiceProviderSimulationControls.d.ts +24 -0
  459. package/dist/vue/useVoiceProviderStatus.d.ts +3 -3
  460. package/dist/vue/useVoiceReadinessFailures.d.ts +959 -0
  461. package/dist/vue/useVoiceReconnectProfileEvidence.d.ts +9 -0
  462. package/dist/vue/useVoiceRoutingStatus.d.ts +8 -0
  463. package/dist/vue/useVoiceSessionObservability.d.ts +9 -0
  464. package/dist/vue/useVoiceSessionSnapshot.d.ts +10 -0
  465. package/dist/vue/useVoiceStream.d.ts +10 -6
  466. package/dist/vue/useVoiceTraceTimeline.d.ts +9 -0
  467. package/dist/vue/useVoiceTurnLatency.d.ts +10 -0
  468. package/dist/vue/useVoiceTurnQuality.d.ts +9 -0
  469. package/dist/vue/useVoiceWorkflowStatus.d.ts +3 -3
  470. package/package.json +155 -256
  471. package/dist/angular/voice-app-kit-status.service.d.ts +0 -12
  472. package/dist/angular/voice-ops-status.component.d.ts +0 -15
  473. package/dist/appKit.d.ts +0 -92
  474. package/dist/client/appKitStatus.d.ts +0 -19
  475. package/dist/react/useVoiceAppKitStatus.d.ts +0 -8
  476. package/dist/svelte/createVoiceAppKitStatus.d.ts +0 -8
  477. package/dist/turnProfiles.d.ts +0 -6
  478. package/dist/vue/useVoiceAppKitStatus.d.ts +0 -9
  479. package/fixtures/README.md +0 -57
  480. package/fixtures/manifest.json +0 -199
  481. package/fixtures/pcm/dialogue-three-clean.pcm +0 -0
  482. package/fixtures/pcm/dialogue-three-mixed.pcm +0 -0
  483. package/fixtures/pcm/dialogue-two-clean.pcm +0 -0
  484. package/fixtures/pcm/dialogue-two-noisy.pcm +0 -0
  485. package/fixtures/pcm/multiturn-three-mixed.pcm +0 -0
  486. package/fixtures/pcm/multiturn-two-clean.pcm +0 -0
  487. package/fixtures/pcm/quietly-alone-clean.pcm +0 -0
  488. package/fixtures/pcm/rainstorms-noisy.pcm +0 -0
  489. package/fixtures/pcm/stella-bulgaria-bulgarian20.pcm +0 -0
  490. package/fixtures/pcm/stella-ghana-english507.pcm +0 -0
  491. package/fixtures/pcm/stella-india-english37.pcm +0 -0
  492. package/fixtures/pcm/stella-jamaica-jamaican-creole-english1.pcm +0 -0
  493. package/fixtures/pcm/stella-liberia-liberian-pidgin-english2.pcm +0 -0
  494. package/fixtures/pcm/stella-pakistan-english519.pcm +0 -0
  495. package/fixtures/pcm/stella-sierra-leone-krio5.pcm +0 -0
  496. package/fixtures/pcm/stella-singapore-english655.pcm +0 -0
  497. package/fixtures/pcm/traveled-back-route-clean.pcm +0 -0
@@ -1,24 +1,48 @@
1
- import type { SessionStore } from '@absolutejs/absolute';
2
- import type { VoiceOpsDispositionTaskPolicies, VoiceOpsTaskAssignmentRule, VoiceOpsTaskAssignmentRules, VoiceIntegrationWebhookConfig, StoredVoiceIntegrationEvent, StoredVoiceOpsTask, VoiceIntegrationEventStore, VoiceOpsTaskPolicy, VoiceOpsTask, VoiceOpsTaskStore } from './ops';
3
- import type { VoiceIntegrationSink } from './opsSinks';
4
- import type { StoredVoiceCallReviewArtifact, VoiceCallReviewArtifact, VoiceCallReviewStore } from './testing/review';
5
- import type { VoiceTraceEventStore } from './trace';
1
+ import type { MediaWebRTCStatsCollector, MediaWebRTCStatsReport, MediaWebRTCStatsReportInput, MediaWebRTCStreamContinuityInput, MediaWebRTCStreamContinuityReport } from "@absolutejs/media";
2
+ import type { VoiceOpsDispositionTaskPolicies, VoiceOpsTaskAssignmentRule, VoiceOpsTaskAssignmentRules, VoiceIntegrationWebhookConfig, StoredVoiceIntegrationEvent, StoredVoiceOpsTask, VoiceIntegrationEventStore, VoiceOpsTaskPolicy, VoiceOpsTask, VoiceOpsTaskStore } from "./ops";
3
+ import type { VoiceIntegrationSink } from "./opsSinks";
4
+ import type { StoredVoiceCallReviewArtifact, VoiceCallReviewArtifact, VoiceCallReviewStore } from "../testing/review";
5
+ import type { VoiceTraceEventStore } from "./trace";
6
+ import type { VoiceLiveOpsControlState } from "./liveOps";
7
+ import type { VoiceAuditActor, VoiceAuditEventStore } from "./audit";
8
+ import type { VoiceProfileSwitchGuardDecision, VoiceProfileSwitchGuardMode, VoiceProfileSwitchObservedSignals } from "./profileSwitchRecommendation";
9
+ import type { VoiceRealCallProfileDefaultsReport, VoiceRealCallProfileHistoryReport } from "./proofTrends";
6
10
  export type AudioFormat = {
7
- container: 'raw';
8
- encoding: 'alaw' | 'mulaw' | 'pcm_s16le';
11
+ container: "raw";
12
+ encoding: "alaw" | "mulaw" | "pcm_s16le";
9
13
  sampleRateHz: number;
10
14
  channels: 1 | 2;
11
15
  };
12
16
  export type AudioChunk = ArrayBuffer | ArrayBufferView;
17
+ /**
18
+ * Structural contract for an inbound noise suppressor applied before STT.
19
+ * Matches `@absolutejs/media`'s `NoiseSuppressor`, so any media suppressor
20
+ * (`createFFmpegNoiseSuppressor`, `createEnergyGateNoiseSuppressor`, a Krisp
21
+ * adapter, etc.) satisfies it without a hard import.
22
+ */
23
+ export type VoiceNoiseSuppressor = {
24
+ readonly kind: string;
25
+ process: (input: {
26
+ format: AudioFormat;
27
+ pcm: ArrayBuffer | ArrayBufferView;
28
+ }) => Promise<{
29
+ bytes: Uint8Array;
30
+ format: AudioFormat;
31
+ }> | {
32
+ bytes: Uint8Array;
33
+ format: AudioFormat;
34
+ };
35
+ close?: () => Promise<void> | void;
36
+ };
13
37
  export type VoiceLanguageStrategy = {
14
- mode: 'auto-detect';
38
+ mode: "auto-detect";
15
39
  allowedLanguages?: string[];
16
40
  } | {
17
- mode: 'fixed';
41
+ mode: "fixed";
18
42
  primaryLanguage: string;
19
43
  secondaryLanguages?: string[];
20
44
  } | {
21
- mode: 'allow-switching';
45
+ mode: "allow-switching";
22
46
  primaryLanguage?: string;
23
47
  secondaryLanguages: string[];
24
48
  };
@@ -28,7 +52,7 @@ export type VoicePhraseHint = {
28
52
  boost?: number;
29
53
  metadata?: Record<string, unknown>;
30
54
  };
31
- export type VoiceCorrectionRiskTier = 'safe' | 'balanced' | 'risky';
55
+ export type VoiceCorrectionRiskTier = "safe" | "balanced" | "risky";
32
56
  export type VoiceDomainTerm = {
33
57
  text: string;
34
58
  aliases?: string[];
@@ -44,12 +68,18 @@ export type VoiceLexiconEntry = {
44
68
  metadata?: Record<string, unknown>;
45
69
  pronunciation?: string;
46
70
  };
71
+ export type VoiceTranscriptSentiment = {
72
+ label: "negative" | "neutral" | "positive" | (string & {});
73
+ metadata?: Record<string, unknown>;
74
+ score?: number;
75
+ };
47
76
  export type Transcript = {
48
77
  id: string;
49
78
  text: string;
50
79
  isFinal: boolean;
51
80
  confidence?: number;
52
81
  language?: string;
82
+ sentiment?: VoiceTranscriptSentiment;
53
83
  speaker?: string | number;
54
84
  startedAtMs?: number;
55
85
  endedAtMs?: number;
@@ -65,7 +95,7 @@ export type VoiceTranscriptQuality = {
65
95
  fallback?: VoiceFallbackDiagnostics;
66
96
  partialTranscriptCount: number;
67
97
  selectedTranscriptCount: number;
68
- source: 'fallback' | 'primary';
98
+ source: "fallback" | "primary";
69
99
  };
70
100
  export type VoiceTurnCorrectionDiagnostics = {
71
101
  attempted: boolean;
@@ -83,7 +113,7 @@ export type VoiceTurnCostEstimate = {
83
113
  primaryAudioMs: number;
84
114
  totalBillableAudioMs: number;
85
115
  };
86
- export type VoiceFallbackSelectionReason = 'fallback-empty' | 'primary-empty' | 'word-count-margin' | 'confidence-margin' | 'word-count-tiebreak' | 'kept-primary';
116
+ export type VoiceFallbackSelectionReason = "fallback-empty" | "primary-empty" | "word-count-margin" | "confidence-margin" | "word-count-tiebreak" | "kept-primary";
87
117
  export type VoiceFallbackDiagnostics = {
88
118
  attempted: boolean;
89
119
  fallbackConfidence?: number;
@@ -94,31 +124,31 @@ export type VoiceFallbackDiagnostics = {
94
124
  primaryWordCount: number;
95
125
  selected: boolean;
96
126
  selectionReason: VoiceFallbackSelectionReason;
97
- trigger: 'empty-turn' | 'low-confidence' | 'empty-or-low-confidence' | 'always';
127
+ trigger: "empty-turn" | "low-confidence" | "empty-or-low-confidence" | "always";
98
128
  };
99
129
  export type VoicePartialEvent = {
100
- type: 'partial';
130
+ type: "partial";
101
131
  transcript: Transcript;
102
132
  receivedAt: number;
103
133
  };
104
134
  export type VoiceFinalEvent = {
105
- type: 'final';
135
+ type: "final";
106
136
  transcript: Transcript;
107
137
  receivedAt: number;
108
138
  };
109
139
  export type VoiceEndOfTurnEvent = {
110
- type: 'endOfTurn';
111
- reason: 'vendor' | 'silence' | 'manual';
140
+ type: "endOfTurn";
141
+ reason: "vendor" | "silence" | "manual";
112
142
  receivedAt: number;
113
143
  };
114
144
  export type VoiceErrorEvent = {
115
- type: 'error';
145
+ type: "error";
116
146
  error: Error;
117
147
  recoverable: boolean;
118
148
  code?: string;
119
149
  };
120
150
  export type VoiceCloseEvent = {
121
- type: 'close';
151
+ type: "close";
122
152
  code?: number;
123
153
  reason?: string;
124
154
  recoverable?: boolean;
@@ -144,11 +174,11 @@ export type STTAdapterOpenOptions = {
144
174
  signal?: AbortSignal;
145
175
  };
146
176
  export type STTAdapter<TOptions extends STTAdapterOpenOptions = STTAdapterOpenOptions> = {
147
- kind: 'stt';
177
+ kind: "stt";
148
178
  open: (options: TOptions) => Promise<STTAdapterSession> | STTAdapterSession;
149
179
  };
150
180
  export type TTSAudioEvent = {
151
- type: 'audio';
181
+ type: "audio";
152
182
  chunk: AudioChunk;
153
183
  format: AudioFormat;
154
184
  receivedAt: number;
@@ -161,15 +191,26 @@ export type TTSSessionEventMap = {
161
191
  export type TTSAdapterSession = {
162
192
  on: <K extends keyof TTSSessionEventMap>(event: K, handler: (payload: TTSSessionEventMap[K]) => void | Promise<void>) => () => void;
163
193
  send: (text: string) => Promise<void>;
194
+ cancel?: (reason?: string) => Promise<void>;
164
195
  close: (reason?: string) => Promise<void>;
165
196
  };
197
+ export declare const ttsAdapterSessionCanCancel: (session: TTSAdapterSession) => session is TTSAdapterSession & {
198
+ cancel: (reason?: string) => Promise<void>;
199
+ };
200
+ export type VoiceTTSProsody = {
201
+ emphasis?: number;
202
+ pitch?: number;
203
+ speed?: number;
204
+ style?: string;
205
+ };
166
206
  export type TTSAdapterOpenOptions = {
167
207
  sessionId: string;
168
208
  lexicon?: VoiceLexiconEntry[];
209
+ prosody?: VoiceTTSProsody;
169
210
  signal?: AbortSignal;
170
211
  };
171
212
  export type TTSAdapter<TOptions extends TTSAdapterOpenOptions = TTSAdapterOpenOptions> = {
172
- kind: 'tts';
213
+ kind: "tts";
173
214
  open: (options: TOptions) => Promise<TTSAdapterSession> | TTSAdapterSession;
174
215
  };
175
216
  export type RealtimeSessionEventMap = STTSessionEventMap & {
@@ -185,20 +226,40 @@ export type RealtimeAdapterOpenOptions = {
185
226
  format: AudioFormat;
186
227
  languageStrategy?: VoiceLanguageStrategy;
187
228
  lexicon?: VoiceLexiconEntry[];
229
+ modalities?: ReadonlyArray<"audio" | "text">;
188
230
  phraseHints?: VoicePhraseHint[];
231
+ promptCacheKey?: string;
232
+ semanticVAD?: import("./assistantMode").VoiceSemanticVADConfig;
189
233
  signal?: AbortSignal;
190
234
  };
191
235
  export type RealtimeAdapter<TOptions extends RealtimeAdapterOpenOptions = RealtimeAdapterOpenOptions> = {
192
- kind: 'realtime';
236
+ kind: "realtime";
193
237
  open: (options: TOptions) => Promise<RealtimeAdapterSession> | RealtimeAdapterSession;
194
238
  };
195
- export type VoiceSessionStatus = 'active' | 'reconnecting' | 'completed' | 'failed';
239
+ export type VoiceSessionStatus = "active" | "reconnecting" | "completed" | "failed";
240
+ export type VoiceReconnectClientStatus = "idle" | "reconnecting" | "resumed" | "exhausted";
241
+ export type VoiceReconnectClientState = {
242
+ attempts: number;
243
+ lastDisconnectAt?: number;
244
+ lastResumedAt?: number;
245
+ maxAttempts: number;
246
+ nextAttemptAt?: number;
247
+ status: VoiceReconnectClientStatus;
248
+ };
249
+ export type VoiceTurnCitation = {
250
+ chunkId: string;
251
+ score: number;
252
+ source?: string;
253
+ title?: string;
254
+ };
196
255
  export type VoiceTurnRecord<TResult = unknown> = {
197
256
  id: string;
198
257
  text: string;
199
258
  quality?: VoiceTranscriptQuality;
200
259
  transcripts: Transcript[];
201
260
  assistantText?: string;
261
+ attachments?: import("./agent").VoiceAgentMessageAttachment[];
262
+ citations?: VoiceTurnCitation[];
202
263
  committedAt: number;
203
264
  result?: TResult;
204
265
  };
@@ -253,10 +314,10 @@ export type VoiceSessionSummary = {
253
314
  status: VoiceSessionStatus;
254
315
  turnCount: number;
255
316
  };
256
- export type VoiceCallDisposition = 'completed' | 'transferred' | 'escalated' | 'voicemail' | 'no-answer' | 'failed' | 'closed';
317
+ export type VoiceCallDisposition = "completed" | "transferred" | "escalated" | "voicemail" | "no-answer" | "failed" | "silence-timeout" | "closed";
257
318
  export type VoiceCallLifecycleEvent = {
258
319
  at: number;
259
- type: 'start' | 'end' | 'transfer' | 'escalation' | 'voicemail' | 'no-answer';
320
+ type: "start" | "end" | "transfer" | "escalation" | "voicemail" | "no-answer";
260
321
  disposition?: VoiceCallDisposition;
261
322
  metadata?: Record<string, unknown>;
262
323
  reason?: string;
@@ -269,8 +330,8 @@ export type VoiceCallLifecycleState = {
269
330
  lastEventAt: number;
270
331
  startedAt: number;
271
332
  };
272
- export type VoiceHandoffAction = 'escalate' | 'no-answer' | 'transfer' | 'voicemail';
273
- export type VoiceHandoffStatus = 'delivered' | 'failed' | 'skipped';
333
+ export type VoiceHandoffAction = "escalate" | "no-answer" | "transfer" | "voicemail";
334
+ export type VoiceHandoffStatus = "delivered" | "failed" | "skipped";
274
335
  export type VoiceHandoffResult = {
275
336
  deliveredAt?: number;
276
337
  deliveredTo?: string;
@@ -278,7 +339,7 @@ export type VoiceHandoffResult = {
278
339
  metadata?: Record<string, unknown>;
279
340
  status: VoiceHandoffStatus;
280
341
  };
281
- export type VoiceHandoffDeliveryQueueStatus = VoiceHandoffStatus | 'pending';
342
+ export type VoiceHandoffDeliveryQueueStatus = VoiceHandoffStatus | "pending";
282
343
  export type StoredVoiceHandoffDelivery<TContext = unknown, TSession extends VoiceSessionRecord = VoiceSessionRecord, TResult = unknown> = {
283
344
  action: VoiceHandoffAction;
284
345
  context: TContext;
@@ -326,9 +387,15 @@ export type VoiceHandoffConfig<TContext = unknown, TSession extends VoiceSession
326
387
  adapters: VoiceHandoffAdapter<TContext, TSession, TResult>[];
327
388
  deliveryQueue?: VoiceHandoffDeliveryStore<StoredVoiceHandoffDelivery<TContext, TSession, TResult>>;
328
389
  enqueueOnly?: boolean;
329
- failMode?: 'record' | 'throw';
390
+ failMode?: "record" | "throw";
391
+ };
392
+ export type VoiceSessionStore<TSession extends VoiceSessionRecord = VoiceSessionRecord> = {
393
+ get: (id: string) => Promise<TSession | undefined>;
394
+ getOrCreate: (id: string) => Promise<TSession>;
395
+ set: (id: string, value: TSession) => Promise<void>;
396
+ list: () => Promise<VoiceSessionSummary[]>;
397
+ remove: (id: string) => Promise<void>;
330
398
  };
331
- export type VoiceSessionStore<TSession extends VoiceSessionRecord = VoiceSessionRecord> = SessionStore<TSession, VoiceSessionSummary>;
332
399
  export type VoiceLogger = {
333
400
  debug?: (message: string, meta?: Record<string, unknown>) => void;
334
401
  info?: (message: string, meta?: Record<string, unknown>) => void;
@@ -336,15 +403,15 @@ export type VoiceLogger = {
336
403
  error?: (message: string, meta?: Record<string, unknown>) => void;
337
404
  };
338
405
  export type VoiceReconnectConfig = {
339
- strategy?: 'resume-last-turn' | 'restart' | 'fail';
406
+ strategy?: "resume-last-turn" | "restart" | "fail";
340
407
  timeout?: number;
341
408
  maxAttempts?: number;
342
409
  };
343
- export type VoiceRuntimePreset = 'default' | 'chat' | 'guided-intake' | 'dictation' | 'noisy-room' | 'pstn-balanced' | 'pstn-fast' | 'reliability';
344
- export type VoiceSTTLifecycle = 'continuous' | 'turn-scoped';
345
- export type VoiceTurnProfile = 'fast' | 'balanced' | 'long-form';
346
- export type VoiceTurnQualityProfile = 'general' | 'accent-heavy' | 'noisy-room' | 'short-command';
347
- export type VoiceTurnFallbackTrigger = 'empty-turn' | 'low-confidence' | 'empty-or-low-confidence' | 'always';
410
+ export type VoiceRuntimePreset = "default" | "chat" | "guided-intake" | "dictation" | "noisy-room" | "pstn-balanced" | "pstn-fast" | "reliability";
411
+ export type VoiceSTTLifecycle = "continuous" | "turn-scoped";
412
+ export type VoiceTurnProfile = "fast" | "balanced" | "long-form";
413
+ export type VoiceTurnQualityProfile = "general" | "accent-heavy" | "noisy-room" | "short-command";
414
+ export type VoiceTurnFallbackTrigger = "empty-turn" | "low-confidence" | "empty-or-low-confidence" | "always";
348
415
  export type VoiceSTTFallbackConfig = {
349
416
  adapter: STTAdapter;
350
417
  trigger?: VoiceTurnFallbackTrigger;
@@ -396,12 +463,34 @@ export type VoiceResolvedAudioConditioningConfig = {
396
463
  export type VoiceSocket = {
397
464
  send: (data: string | Uint8Array | ArrayBuffer) => void | Promise<void>;
398
465
  close: (code?: number, reason?: string) => void | Promise<void>;
466
+ /**
467
+ * Discard any audio already buffered downstream (e.g. a telephony carrier's
468
+ * outbound media buffer). Called on barge-in so the caller stops hearing the
469
+ * assistant immediately, even when frames have already been flushed to the
470
+ * transport. Optional: transports without a flush concept omit it.
471
+ */
472
+ clear?: () => void | Promise<void>;
473
+ };
474
+ export type VoiceMonitorRuntimeSessionBinding = {
475
+ deregister: (reason?: string) => void;
476
+ emitAudio: (chunk: Uint8Array | ArrayBuffer, options?: {
477
+ source?: "assistant" | "caller" | (string & {});
478
+ }) => void;
479
+ };
480
+ export type VoiceMonitorRuntimeRegisterInput = {
481
+ handle: VoiceSessionHandle<unknown, VoiceSessionRecord, unknown>;
482
+ metadata?: Record<string, unknown>;
483
+ sessionId: string;
484
+ };
485
+ export type VoiceMonitorRuntimeBinding = {
486
+ registerSession: (input: VoiceMonitorRuntimeRegisterInput) => VoiceMonitorRuntimeSessionBinding;
399
487
  };
400
488
  export type VoiceSessionHandle<TContext = unknown, TSession extends VoiceSessionRecord = VoiceSessionRecord, TResult = unknown> = {
401
489
  id: string;
402
490
  connect: (socket: VoiceSocket) => Promise<void>;
403
491
  receiveAudio: (audio: AudioChunk) => Promise<void>;
404
- commitTurn: (reason?: VoiceEndOfTurnEvent['reason']) => Promise<void>;
492
+ attachUserMedia: (attachment: import("./agent").VoiceAgentMessageAttachment) => Promise<void>;
493
+ commitTurn: (reason?: VoiceEndOfTurnEvent["reason"]) => Promise<void>;
405
494
  disconnect: (event?: VoiceCloseEvent) => Promise<void>;
406
495
  complete: (result?: TResult) => Promise<void>;
407
496
  escalate: (input: {
@@ -423,18 +512,33 @@ export type VoiceSessionHandle<TContext = unknown, TSession extends VoiceSession
423
512
  reason?: string;
424
513
  result?: TResult;
425
514
  target: string;
515
+ transferMode?: "cold" | "warm";
426
516
  }) => Promise<void>;
427
517
  close: (reason?: string) => Promise<void>;
428
518
  snapshot: () => Promise<TSession>;
519
+ /**
520
+ * Mutate the live turn-detection config for this session — useful when a
521
+ * tool call wants to dial silenceMs up ("the caller asked for more time")
522
+ * or down. The change takes effect on the NEXT silence-timer schedule, so
523
+ * an in-flight commit isn't cancelled. Returns the merged config so the
524
+ * caller can confirm.
525
+ */
526
+ setTurnDetection: (patch: Partial<VoiceTurnDetectionConfig>) => Promise<{
527
+ silenceMs: number;
528
+ speechThreshold: number;
529
+ transcriptStabilityMs: number;
530
+ }>;
429
531
  };
430
532
  export type VoiceRouteResult<TResult = unknown> = {
431
533
  complete?: boolean;
432
534
  result?: TResult;
433
535
  assistantText?: string;
536
+ citations?: ReadonlyArray<VoiceTurnCitation>;
434
537
  transfer?: {
435
538
  metadata?: Record<string, unknown>;
436
539
  reason?: string;
437
540
  target: string;
541
+ transferMode?: "cold" | "warm";
438
542
  };
439
543
  escalate?: {
440
544
  metadata?: Record<string, unknown>;
@@ -475,6 +579,11 @@ export type VoiceLexiconResolver<TContext = unknown> = (input: {
475
579
  }) => Promise<VoiceLexiconEntry[] | void> | VoiceLexiconEntry[] | void;
476
580
  export type VoiceOnTurnObjectHandler<TContext = unknown, TSession extends VoiceSessionRecord = VoiceSessionRecord, TResult = unknown> = (input: {
477
581
  context: TContext;
582
+ liveOps?: {
583
+ control: VoiceLiveOpsControlState;
584
+ injectedInstruction?: string;
585
+ };
586
+ onTextDelta?: (delta: string) => void;
478
587
  session: TSession;
479
588
  turn: VoiceTurnRecord;
480
589
  api: VoiceSessionHandle<TContext, TSession, TResult>;
@@ -559,7 +668,7 @@ export type VoiceRuntimeOpsConfig<TContext = unknown, TSession extends VoiceSess
559
668
  disposition: VoiceCallDisposition;
560
669
  review: StoredVoiceCallReviewArtifact;
561
670
  session: TSession;
562
- }) => Promise<Omit<VoiceOpsTask, 'id'> | VoiceOpsTask | StoredVoiceOpsTask | null | void> | Omit<VoiceOpsTask, 'id'> | VoiceOpsTask | StoredVoiceOpsTask | null | void;
671
+ }) => Promise<Omit<VoiceOpsTask, "id"> | VoiceOpsTask | StoredVoiceOpsTask | null | void> | Omit<VoiceOpsTask, "id"> | VoiceOpsTask | StoredVoiceOpsTask | null | void;
563
672
  resolveTaskPolicy?: (input: {
564
673
  api: VoiceSessionHandle<TContext, TSession, TResult>;
565
674
  context: TContext;
@@ -596,7 +705,37 @@ export type VoiceRuntimeOpsConfig<TContext = unknown, TSession extends VoiceSess
596
705
  tasks?: VoiceOpsTaskStore;
597
706
  webhook?: VoiceIntegrationWebhookConfig;
598
707
  };
599
- export type VoiceNormalizedRouteConfig<TContext = unknown, TSession extends VoiceSessionRecord = VoiceSessionRecord, TResult = unknown> = Omit<VoiceRouteConfig<TContext, TSession, TResult>, 'onTurn'> & {
708
+ export type VoiceLiveOpsRuntimeConfig = {
709
+ getControl: (sessionId: string) => Promise<VoiceLiveOpsControlState | null | undefined> | VoiceLiveOpsControlState | null | undefined;
710
+ };
711
+ export type VoiceProfileSwitchGuardResolverInput<TContext = unknown> = {
712
+ context: TContext;
713
+ scenarioId?: string;
714
+ sessionId: string;
715
+ };
716
+ export type VoicePluginProfileSwitchGuardConfig<TContext = unknown, TSession extends VoiceSessionRecord = VoiceSessionRecord, TResult = unknown> = {
717
+ actor?: VoiceAuditActor;
718
+ allowedProfileIds?: string[] | ((input: VoiceProfileSwitchGuardResolverInput<TContext>) => Promise<string[] | undefined> | string[] | undefined);
719
+ audit?: VoiceAuditEventStore;
720
+ blockedProfileIds?: string[] | ((input: VoiceProfileSwitchGuardResolverInput<TContext>) => Promise<string[] | undefined> | string[] | undefined);
721
+ currentProfileId?: string | ((input: VoiceProfileSwitchGuardResolverInput<TContext>) => Promise<string | undefined> | string | undefined);
722
+ defaultProfileId?: string;
723
+ defaults: VoiceRealCallProfileDefaultsReport | VoiceRealCallProfileHistoryReport | ((input: VoiceProfileSwitchGuardResolverInput<TContext>) => Promise<VoiceRealCallProfileDefaultsReport | VoiceRealCallProfileHistoryReport> | VoiceRealCallProfileDefaultsReport | VoiceRealCallProfileHistoryReport);
724
+ metadata?: Record<string, unknown> | ((input: VoiceProfileSwitchGuardResolverInput<TContext>) => Promise<Record<string, unknown> | undefined> | Record<string, unknown> | undefined);
725
+ minConfidence?: number | ((input: VoiceProfileSwitchGuardResolverInput<TContext>) => Promise<number | undefined> | number | undefined);
726
+ maxAutoSwitchesPerSession?: number | ((input: VoiceProfileSwitchGuardResolverInput<TContext>) => Promise<number | undefined> | number | undefined);
727
+ mode?: VoiceProfileSwitchGuardMode | ((input: VoiceProfileSwitchGuardResolverInput<TContext>) => Promise<VoiceProfileSwitchGuardMode | undefined> | VoiceProfileSwitchGuardMode | undefined);
728
+ observed?: VoiceProfileSwitchObservedSignals | ((input: VoiceProfileSwitchGuardResolverInput<TContext>) => Promise<VoiceProfileSwitchObservedSignals | undefined> | VoiceProfileSwitchObservedSignals | undefined);
729
+ onDecision?: (input: {
730
+ context: TContext;
731
+ decision: VoiceProfileSwitchGuardDecision;
732
+ scenarioId?: string;
733
+ sessionId: string;
734
+ }) => Promise<void> | void;
735
+ sessionMetadataKey?: string | false;
736
+ trace?: false | VoiceTraceEventStore;
737
+ };
738
+ export type VoiceNormalizedRouteConfig<TContext = unknown, TSession extends VoiceSessionRecord = VoiceSessionRecord, TResult = unknown> = Omit<VoiceRouteConfig<TContext, TSession, TResult>, "onTurn"> & {
600
739
  onTurn: VoiceOnTurnObjectHandler<TContext, TSession, TResult>;
601
740
  };
602
741
  export type VoiceScenario = {
@@ -609,133 +748,403 @@ export type VoiceExpectedSpeakerTurn = {
609
748
  speaker: string;
610
749
  text: string;
611
750
  };
751
+ /**
752
+ * Configures one of the plugin's optional route surfaces. Pass that surface's
753
+ * options object to mount it, `false` (or omit) to leave it off. Surfaces whose
754
+ * options are entirely optional may also be enabled with `true` for defaults.
755
+ */
756
+ export type VoiceSurfaceConfig<O> = false | O | (Record<string, never> extends O ? true : never);
612
757
  export type VoicePluginConfig<TContext = unknown, TSession extends VoiceSessionRecord = VoiceSessionRecord, TResult = unknown> = {
613
758
  costTelemetry?: VoiceCostTelemetryConfig<TContext, TSession, TResult>;
614
759
  path: string;
760
+ greeting?: string | ((input: {
761
+ session: TSession;
762
+ }) => string | Promise<string>);
615
763
  languageStrategy?: VoiceLanguageStrategy;
616
764
  lexicon?: VoiceLexiconEntry[] | VoiceLexiconResolver<TContext>;
617
765
  phraseHints?: VoicePhraseHint[] | VoicePhraseHintResolver<TContext>;
618
766
  preset?: VoiceRuntimePreset;
619
- stt: STTAdapter;
767
+ stt?: STTAdapter;
620
768
  sttFallback?: VoiceSTTFallbackConfig;
621
769
  sttLifecycle?: VoiceSTTLifecycle;
770
+ realtime?: RealtimeAdapter;
771
+ realtimeInputFormat?: AudioFormat;
622
772
  tts?: TTSAdapter;
623
773
  session: VoiceSessionStore<NoInfer<TSession>>;
624
774
  reconnect?: VoiceReconnectConfig;
625
775
  turnDetection?: VoiceTurnDetectionConfig;
776
+ semanticTurnDetector?: import("./semanticTurn").VoiceSemanticTurnDetector;
777
+ bargeInMinPartialWords?: number;
778
+ fillerPhrases?: ReadonlyArray<string>;
779
+ fillerDelayMs?: number;
780
+ fillerFor?: (input: {
781
+ sessionId: string;
782
+ turnId: string;
783
+ userText: string;
784
+ }) => Promise<string | null>;
785
+ fillerForTimeoutMs?: number;
786
+ backchannel?: import("./backchannel").VoiceBackchannelConfig;
787
+ defaultSilentTurnAck?: string;
788
+ routeOnTurnTimeoutMs?: number;
626
789
  audioConditioning?: VoiceAudioConditioningConfig;
790
+ noiseSuppressor?: VoiceNoiseSuppressor;
791
+ noiseSuppressorFormat?: AudioFormat;
627
792
  logger?: VoiceLogger;
628
793
  htmx?: boolean | VoiceHTMXConfig<TSession, NoInfer<TResult>>;
629
794
  handoff?: VoiceHandoffConfig<TContext, TSession, TResult>;
630
795
  ops?: VoiceRuntimeOpsConfig<TContext, TSession, TResult>;
796
+ liveOps?: VoiceLiveOpsRuntimeConfig;
797
+ monitor?: VoiceMonitorRuntimeBinding;
798
+ profileSwitchGuard?: VoicePluginProfileSwitchGuardConfig<TContext, TSession, TResult>;
631
799
  trace?: VoiceTraceEventStore;
800
+ assistantHealth?: VoiceSurfaceConfig<import("./assistantHealth").VoiceAssistantHealthRoutesOptions>;
801
+ auditDelivery?: VoiceSurfaceConfig<import("./auditDeliveryRoutes").VoiceAuditDeliveryRoutesOptions>;
802
+ auditTrail?: VoiceSurfaceConfig<import("./auditRoutes").VoiceAuditTrailRoutesOptions>;
803
+ bargeIn?: VoiceSurfaceConfig<import("./bargeInRoutes").VoiceBargeInRoutesOptions>;
804
+ browserCallProfile?: VoiceSurfaceConfig<import("./browserCallProfiles").VoiceBrowserCallProfileRoutesOptions>;
805
+ browserMedia?: VoiceSurfaceConfig<import("./browserMediaRoutes").VoiceBrowserMediaRoutesOptions>;
806
+ callDebugger?: VoiceSurfaceConfig<import("./callDebugger").VoiceCallDebuggerRoutesOptions>;
807
+ campaign?: VoiceSurfaceConfig<import("./campaign").VoiceCampaignRoutesOptions>;
808
+ competitiveCoverage?: VoiceSurfaceConfig<import("./competitiveCoverage").VoiceCompetitiveCoverageRoutesOptions>;
809
+ dataControl?: VoiceSurfaceConfig<import("./dataControl").VoiceDataControlRoutesOptions>;
810
+ deliveryRuntime?: VoiceSurfaceConfig<import("./deliveryRuntime").VoiceDeliveryRuntimeRoutesOptions>;
811
+ deliverySink?: VoiceSurfaceConfig<import("./deliverySinkRoutes").VoiceDeliverySinkRoutesOptions>;
812
+ demoReady?: VoiceSurfaceConfig<import("./demoReadyRoutes").VoiceDemoReadyRoutesOptions>;
813
+ diagnostics?: VoiceSurfaceConfig<import("./diagnosticsRoutes").VoiceDiagnosticsRoutesOptions>;
814
+ eval?: VoiceSurfaceConfig<import("./evalRoutes").VoiceEvalRoutesOptions>;
815
+ guardrail?: VoiceSurfaceConfig<import("./guardrails").VoiceGuardrailRoutesOptions>;
816
+ handoffHealth?: VoiceSurfaceConfig<import("./handoffHealth").VoiceHandoffHealthRoutesOptions>;
817
+ htmxDashboard?: VoiceSurfaceConfig<import("./htmxDashboardRoutes").VoiceHTMXDashboardRoutesOptions>;
818
+ incidentBundle?: VoiceSurfaceConfig<import("./incidentBundle").VoiceIncidentBundleRoutesOptions>;
819
+ incidentTimeline?: VoiceSurfaceConfig<import("./incidentTimeline").VoiceIncidentTimelineRoutesOptions>;
820
+ liveLatency?: VoiceSurfaceConfig<import("./liveLatency").VoiceLiveLatencyRoutesOptions>;
821
+ liveMonitor?: VoiceSurfaceConfig<import("./monitor").VoiceLiveMonitorRoutesOptions>;
822
+ liveOpsConsole?: VoiceSurfaceConfig<import("./liveOps").VoiceLiveOpsRoutesOptions>;
823
+ mediaPipeline?: VoiceSurfaceConfig<import("./mediaPipelineRoutes").VoiceMediaPipelineRoutesOptions>;
824
+ monitorReport?: VoiceSurfaceConfig<import("./voiceMonitoring").VoiceMonitorRoutesOptions>;
825
+ monitorRunner?: VoiceSurfaceConfig<import("./voiceMonitoring").VoiceMonitorRunnerRoutesOptions>;
826
+ observabilityExport?: VoiceSurfaceConfig<import("./observabilityExport").VoiceObservabilityExportRoutesOptions>;
827
+ observabilityExportReplay?: VoiceSurfaceConfig<import("./observabilityExport").VoiceObservabilityExportReplayRoutesOptions>;
828
+ operationalStatus?: VoiceSurfaceConfig<import("./operationalStatus").VoiceOperationalStatusRoutesOptions>;
829
+ operationsRecord?: VoiceSurfaceConfig<import("./operationsRecord").VoiceOperationsRecordRoutesOptions>;
830
+ opsActionAudit?: VoiceSurfaceConfig<import("./opsActionAuditRoutes").VoiceOpsActionAuditRoutesOptions>;
831
+ opsConsole?: VoiceSurfaceConfig<import("./opsConsoleRoutes").VoiceOpsConsoleRoutesOptions>;
832
+ opsRecovery?: VoiceSurfaceConfig<import("./opsRecovery").VoiceOpsRecoveryRoutesOptions>;
833
+ opsStatus?: VoiceSurfaceConfig<import("./opsStatus").VoiceOpsStatusRoutesOptions>;
834
+ opsWebhookReceiver?: VoiceSurfaceConfig<import("./opsWebhook").VoiceOpsWebhookReceiverRoutesOptions>;
835
+ outcomeContract?: VoiceSurfaceConfig<import("./outcomeContract").VoiceOutcomeContractRoutesOptions>;
836
+ phoneAgentProductionSmoke?: VoiceSurfaceConfig<import("./phoneAgentProductionSmoke").VoicePhoneAgentProductionSmokeRoutesOptions>;
837
+ platformCoverage?: VoiceSurfaceConfig<import("./platformCoverage").VoicePlatformCoverageRoutesOptions>;
838
+ postCallAnalysis?: VoiceSurfaceConfig<import("./postCallAnalysis").VoicePostCallAnalysisRoutesOptions>;
839
+ productionReadiness?: VoiceSurfaceConfig<import("./productionReadiness").VoiceProductionReadinessRoutesOptions>;
840
+ profileSwitchLiveDecision?: VoiceSurfaceConfig<import("./profileSwitchRecommendation").VoiceProfileSwitchLiveDecisionRoutesOptions>;
841
+ profileSwitchPolicyProof?: VoiceSurfaceConfig<import("./profileSwitchRecommendation").VoiceProfileSwitchPolicyProofRoutesOptions>;
842
+ profileSwitchReadiness?: VoiceSurfaceConfig<import("./profileSwitchRecommendation").VoiceProfileSwitchReadinessRoutesOptions>;
843
+ proofPack?: VoiceSurfaceConfig<import("./proofPack").VoiceProofPackRoutesOptions>;
844
+ proofTrend?: VoiceSurfaceConfig<import("./proofTrends").VoiceProofTrendRoutesOptions>;
845
+ proofTrendRecommendation?: VoiceSurfaceConfig<import("./proofTrends").VoiceProofTrendRecommendationRoutesOptions>;
846
+ providerCapability?: VoiceSurfaceConfig<import("./providerCapabilities").VoiceProviderCapabilityRoutesOptions>;
847
+ providerContractMatrix?: VoiceSurfaceConfig<import("./providerStackRecommendations").VoiceProviderContractMatrixRoutesOptions>;
848
+ providerDecisionTrace?: VoiceSurfaceConfig<import("./providerDecisionTraces").VoiceProviderDecisionTraceRoutesOptions>;
849
+ providerHealth?: VoiceSurfaceConfig<import("./providerHealth").VoiceProviderHealthRoutesOptions>;
850
+ providerOrchestration?: VoiceSurfaceConfig<import("./providerOrchestration").VoiceProviderOrchestrationRoutesOptions>;
851
+ providerSlo?: VoiceSurfaceConfig<import("./providerSlo").VoiceProviderSloRoutesOptions>;
852
+ quality?: VoiceSurfaceConfig<import("./qualityRoutes").VoiceQualityRoutesOptions>;
853
+ realCallEvidenceRuntime?: VoiceSurfaceConfig<import("./proofTrends").VoiceRealCallEvidenceRuntimeRoutesOptions>;
854
+ realCallProfileHistory?: VoiceSurfaceConfig<import("./proofTrends").VoiceRealCallProfileHistoryRoutesOptions>;
855
+ realCallProfileRecoveryAction?: VoiceSurfaceConfig<import("./proofTrends").VoiceRealCallProfileRecoveryActionRoutesOptions>;
856
+ realtimeChannel?: VoiceSurfaceConfig<import("./realtimeChannel").VoiceRealtimeChannelRoutesOptions>;
857
+ realtimeProviderContract?: VoiceSurfaceConfig<import("./realtimeProviderContracts").VoiceRealtimeProviderContractRoutesOptions>;
858
+ reconnectContract?: VoiceSurfaceConfig<import("./reconnectContract").VoiceReconnectContractRoutesOptions>;
859
+ reconnectProof?: VoiceSurfaceConfig<import("./reconnectContract").VoiceReconnectProofRoutesOptions>;
860
+ resilience?: VoiceSurfaceConfig<import("./resilienceRoutes").VoiceResilienceRoutesOptions>;
861
+ sessionList?: VoiceSurfaceConfig<import("./sessionReplay").VoiceSessionListRoutesOptions>;
862
+ sessionObservability?: VoiceSurfaceConfig<import("./sessionObservability").VoiceSessionObservabilityRoutesOptions>;
863
+ sessionReplay?: VoiceSurfaceConfig<import("./sessionReplay").VoiceSessionReplayRoutesOptions>;
864
+ sessionSnapshot?: VoiceSurfaceConfig<import("./sessionSnapshot").VoiceSessionSnapshotRoutesOptions>;
865
+ simulationSuite?: VoiceSurfaceConfig<import("./simulationSuite").VoiceSimulationSuiteRoutesOptions>;
866
+ sloCalibration?: VoiceSurfaceConfig<import("./sloCalibration").VoiceSloCalibrationRoutesOptions>;
867
+ sloReadinessThreshold?: VoiceSurfaceConfig<import("./sloCalibration").VoiceSloReadinessThresholdRoutesOptions>;
868
+ telephonyCarrierMatrix?: VoiceSurfaceConfig<import("../telephony/matrix").VoiceTelephonyCarrierMatrixRoutesOptions>;
869
+ telephonyMedia?: VoiceSurfaceConfig<import("./telephonyMediaRoutes").VoiceTelephonyMediaRoutesOptions>;
870
+ telephonyWebhook?: VoiceSurfaceConfig<import("./telephonyOutcome").VoiceTelephonyWebhookRoutesOptions>;
871
+ telephonyWebhookSecurity?: VoiceSurfaceConfig<import("../telephony/security").VoiceTelephonyWebhookSecurityRoutesOptions>;
872
+ toolContract?: VoiceSurfaceConfig<import("./toolContract").VoiceToolContractRoutesOptions>;
873
+ traceDelivery?: VoiceSurfaceConfig<import("./traceDeliveryRoutes").VoiceTraceDeliveryRoutesOptions>;
874
+ traceTimeline?: VoiceSurfaceConfig<import("./traceTimeline").VoiceTraceTimelineRoutesOptions>;
875
+ turnLatency?: VoiceSurfaceConfig<import("./turnLatency").VoiceTurnLatencyRoutesOptions>;
876
+ turnQuality?: VoiceSurfaceConfig<import("./turnQuality").VoiceTurnQualityRoutesOptions>;
632
877
  } & VoiceRouteConfig<TContext, TSession, TResult>;
878
+ export type VoiceSessionRecordingConfig = {
879
+ channels?: ReadonlyArray<"assistant" | "user">;
880
+ maxBytesPerChannel?: number;
881
+ store: import("./recordingStore").VoiceRecordingStore;
882
+ userInputFormat?: AudioFormat;
883
+ };
633
884
  export type CreateVoiceSessionOptions<TContext = unknown, TSession extends VoiceSessionRecord = VoiceSessionRecord, TResult = unknown> = {
634
885
  costTelemetry?: VoiceCostTelemetryConfig<TContext, TSession, TResult>;
635
886
  id: string;
636
887
  context: TContext;
637
888
  socket: VoiceSocket;
638
- stt: STTAdapter;
889
+ greeting?: string | ((input: {
890
+ session: TSession;
891
+ }) => string | Promise<string>);
892
+ stt?: STTAdapter;
893
+ realtime?: RealtimeAdapter;
894
+ realtimeInputFormat?: AudioFormat;
639
895
  tts?: TTSAdapter;
640
896
  languageStrategy?: VoiceLanguageStrategy;
641
897
  lexicon?: VoiceLexiconEntry[];
642
898
  sttFallback?: VoiceResolvedSTTFallbackConfig;
643
899
  store: VoiceSessionStore<TSession>;
644
900
  trace?: VoiceTraceEventStore;
901
+ recording?: VoiceSessionRecordingConfig;
902
+ callSilenceTimeoutMs?: number;
903
+ amd?: import("./amdDetector").VoiceAMDDetector<TContext, TSession, TResult>;
904
+ costAccountant?: import("./costAccounting").VoiceCostAccountant;
905
+ costTelephony?: {
906
+ provider?: string;
907
+ };
908
+ redact?: import("./redaction").VoiceTranscriptRedactor;
909
+ semanticTurnDetector?: import("./semanticTurn").VoiceSemanticTurnDetector;
910
+ /**
911
+ * Pre-rendered filler phrases the runtime plays in the gap between
912
+ * user-turn-commit and real assistant audio (typically 800-1500ms). The
913
+ * caller hears something within ~150-300ms of stopping speaking, so the
914
+ * LLM/TTS latency feels like the bot thinking instead of dead air. Boardy's
915
+ * killer UX feature.
916
+ *
917
+ * Behavior:
918
+ * - After a turn commits, a timer fires at `fillerDelayMs` (default
919
+ * 250ms). At that point, if the real assistant audio for this turn
920
+ * hasn't started flowing yet, a random phrase is rendered via the
921
+ * configured `tts` adapter and pushed to the socket.
922
+ * - When the real assistant audio's first chunk arrives, any in-flight
923
+ * filler is cancelled (`cancelActiveTTS` clears the carrier buffer).
924
+ * - Cooldown protects against double-fillers per turn.
925
+ *
926
+ * Set `fillerPhrases: []` (or omit) to disable. Reasonable defaults if
927
+ * you enable: `["Hmm.", "Got it.", "Right.", "Mm-hm.", "Let me think.", "Okay."]`.
928
+ */
929
+ /**
930
+ * Minimum word count in an STT partial transcript before speech-gated
931
+ * barge-in cancels the in-flight assistant TTS. Default 1 (any non-empty
932
+ * partial triggers barge-in — backwards-compatible).
933
+ *
934
+ * Set to 2 (or higher) on phone routes where the caller's brief
935
+ * acknowledgements ("yeah", "uh-huh", "you", "am i") would otherwise
936
+ * cut the bot off mid-question. Each extra word added typically delays
937
+ * barge-in by ~100-200ms (one extra STT partial cycle) — cheap compared
938
+ * to losing the bot's response.
939
+ *
940
+ * Word splitting is whitespace-based. Punctuation is left attached.
941
+ */
942
+ bargeInMinPartialWords?: number;
943
+ fillerPhrases?: ReadonlyArray<string>;
944
+ /** Milliseconds after turn-commit before the filler fires. Default 250ms — short enough to feel instant, long enough to skip if the LLM is very fast. */
945
+ fillerDelayMs?: number;
946
+ /**
947
+ * Latency Theater — content-aware filler (Boardy parity move). When
948
+ * defined, the runtime calls `fillerFor({ userText, ... })` in parallel
949
+ * with the main LLM call to generate a brief acknowledgement of what the
950
+ * caller just said ("Freelance CFOs — interesting.", "Yeah, I hear you.").
951
+ * The runtime races the promise against `fillerForTimeoutMs` (default
952
+ * 600ms). If `fillerFor` returns a non-empty string in time, it's spoken
953
+ * INSTEAD of a random `fillerPhrases` entry. On timeout or null return,
954
+ * the runtime falls back to a static random phrase, so a slow / failed
955
+ * acknowledgement call never costs you the filler entirely.
956
+ *
957
+ * Return `null` (or an empty string) to explicitly skip filler for this
958
+ * turn — useful when `userText` is so short ("yes", "no", "okay") that
959
+ * acknowledging it back sounds robotic. Return throws are caught and
960
+ * treated as null.
961
+ *
962
+ * Cost-aware: callers typically wire this to a cheap nano/haiku model
963
+ * (gpt-4.1-nano, claude-haiku-4-5) that returns 2–5 words.
964
+ */
965
+ fillerFor?: (input: {
966
+ sessionId: string;
967
+ turnId: string;
968
+ userText: string;
969
+ }) => Promise<string | null>;
970
+ /** Ceiling for the `fillerFor` call before we fall back to a static phrase. Default 600ms. */
971
+ fillerForTimeoutMs?: number;
972
+ /**
973
+ * Backchannel cues — short "mm-hm"/"right" acknowledgements played while the
974
+ * CALLER is mid-turn (a long answer) so they feel heard, the way a human
975
+ * listener interjects. Plays on the same non-turn TTS path as fillers, so it
976
+ * never registers as the assistant's turn or trips barge-in. Off unless
977
+ * `enabled` is set. Fires only while the assistant is silent.
978
+ */
979
+ backchannel?: import("./backchannel").VoiceBackchannelConfig;
980
+ /**
981
+ * Default spoken ack if the model returns ONLY tool calls (no text) and the
982
+ * turn isn't ending. Without this, the caller hears total silence after
983
+ * their turn and assumes the line dropped. Default is "Sorry, one moment."
984
+ * Set to "" to opt out entirely.
985
+ */
986
+ defaultSilentTurnAck?: string;
987
+ /**
988
+ * Hard timeout on a single `route.onTurn` call. If onTurn hasn't resolved
989
+ * in this many ms, it's rejected with a hard-timeout error which falls
990
+ * through to defaultSilentTurnAck. Default 45s — generous for normal
991
+ * conversational LLM calls (1-3s typical), but catches hangs where the
992
+ * model adapter's own timeout doesn't fire. Set to 0 to disable.
993
+ */
994
+ routeOnTurnTimeoutMs?: number;
995
+ assistantMode?: import("./assistantMode").VoiceAssistantMode;
996
+ modalities?: ReadonlyArray<"audio" | "text">;
997
+ prosody?: VoiceTTSProsody;
645
998
  reconnect: Required<VoiceReconnectConfig>;
646
999
  phraseHints?: VoicePhraseHint[];
1000
+ sessionMetadata?: Record<string, unknown>;
647
1001
  scenarioId?: string;
648
1002
  sttLifecycle: VoiceSTTLifecycle;
649
1003
  turnDetection: VoiceResolvedTurnDetectionConfig;
650
1004
  audioConditioning?: VoiceResolvedAudioConditioningConfig;
1005
+ noiseSuppressor?: VoiceNoiseSuppressor;
1006
+ noiseSuppressorFormat?: AudioFormat;
651
1007
  handoff?: VoiceHandoffConfig<TContext, TSession, TResult>;
1008
+ liveOps?: VoiceLiveOpsRuntimeConfig;
652
1009
  route: VoiceNormalizedRouteConfig<TContext, TSession, TResult>;
653
1010
  logger?: VoiceLogger;
654
1011
  };
655
1012
  export type CreateVoiceSession = <TContext = unknown, TSession extends VoiceSessionRecord = VoiceSessionRecord, TResult = unknown>(options: CreateVoiceSessionOptions<TContext, TSession, TResult>) => VoiceSessionHandle<TContext, TSession, TResult>;
656
1013
  export type VoiceClientStartMessage = {
657
- type: 'start';
1014
+ type: "start";
658
1015
  sessionId?: string;
659
1016
  scenarioId?: string;
660
1017
  };
661
1018
  export type VoiceClientEndTurnMessage = {
662
- type: 'end_turn';
1019
+ type: "end_turn";
663
1020
  };
664
1021
  export type VoiceClientCloseMessage = {
665
- type: 'close';
1022
+ type: "close";
666
1023
  reason?: string;
667
1024
  };
668
1025
  export type VoiceClientCallControlMessage = {
669
- type: 'call_control';
670
- action: 'complete' | 'escalate' | 'no-answer' | 'transfer' | 'voicemail';
1026
+ type: "call_control";
1027
+ action: "complete" | "escalate" | "no-answer" | "transfer" | "voicemail";
671
1028
  metadata?: Record<string, unknown>;
672
1029
  reason?: string;
673
1030
  target?: string;
674
1031
  };
675
1032
  export type VoiceClientPingMessage = {
676
- type: 'ping';
1033
+ type: "ping";
677
1034
  };
678
1035
  export type VoiceClientMessage = VoiceClientStartMessage | VoiceClientEndTurnMessage | VoiceClientCloseMessage | VoiceClientCallControlMessage | VoiceClientPingMessage;
679
1036
  export type VoiceServerSessionMessage = {
680
- type: 'session';
1037
+ type: "session";
681
1038
  sessionId: string;
682
1039
  status: VoiceSessionStatus;
683
1040
  scenarioId?: string;
1041
+ sessionMetadata?: Record<string, unknown>;
1042
+ };
1043
+ export type VoiceServerReplayMessage<TResult = unknown> = {
1044
+ type: "replay";
1045
+ assistantTexts: string[];
1046
+ call?: VoiceCallLifecycleState;
1047
+ partial: string;
1048
+ scenarioId?: string;
1049
+ sessionId: string;
1050
+ sessionMetadata?: Record<string, unknown>;
1051
+ status: VoiceSessionStatus;
1052
+ turns: VoiceTurnRecord<TResult>[];
684
1053
  };
685
1054
  export type VoiceServerPartialMessage = {
686
- type: 'partial';
1055
+ type: "partial";
687
1056
  transcript: Transcript;
688
1057
  };
689
1058
  export type VoiceServerFinalMessage = {
690
- type: 'final';
1059
+ type: "final";
691
1060
  transcript: Transcript;
692
1061
  };
693
1062
  export type VoiceServerTurnMessage<TResult = unknown> = {
694
- type: 'turn';
1063
+ type: "turn";
695
1064
  turn: VoiceTurnRecord<TResult>;
696
1065
  };
697
1066
  export type VoiceServerAssistantMessage = {
698
- type: 'assistant';
1067
+ type: "assistant";
699
1068
  text: string;
700
1069
  turnId?: string;
701
1070
  };
1071
+ export type VoiceServerAssistantDeltaMessage = {
1072
+ type: "assistant_delta";
1073
+ delta: string;
1074
+ turnId?: string;
1075
+ };
702
1076
  export type VoiceServerAudioMessage = {
703
- type: 'audio';
1077
+ type: "audio";
704
1078
  chunkBase64: string;
705
1079
  format: AudioFormat;
706
1080
  receivedAt: number;
707
1081
  turnId?: string;
708
1082
  };
709
1083
  export type VoiceServerCompleteMessage = {
710
- type: 'complete';
1084
+ type: "complete";
711
1085
  sessionId: string;
712
1086
  };
713
1087
  export type VoiceServerCallLifecycleMessage = {
714
- type: 'call_lifecycle';
1088
+ type: "call_lifecycle";
715
1089
  event: VoiceCallLifecycleEvent;
716
1090
  sessionId: string;
717
1091
  };
718
1092
  export type VoiceServerErrorMessage = {
719
- type: 'error';
1093
+ type: "error";
720
1094
  message: string;
721
1095
  recoverable?: boolean;
722
1096
  };
723
1097
  export type VoiceServerPongMessage = {
724
- type: 'pong';
1098
+ type: "pong";
1099
+ };
1100
+ export type VoiceServerConnectionMessage = {
1101
+ type: "connection";
1102
+ reconnect: VoiceReconnectClientState;
725
1103
  };
726
- export type VoiceServerMessage<TResult = unknown> = VoiceServerSessionMessage | VoiceServerPartialMessage | VoiceServerFinalMessage | VoiceServerTurnMessage<TResult> | VoiceServerAssistantMessage | VoiceServerAudioMessage | VoiceServerCallLifecycleMessage | VoiceServerCompleteMessage | VoiceServerErrorMessage | VoiceServerPongMessage;
1104
+ export type VoiceServerMessage<TResult = unknown> = VoiceServerSessionMessage | VoiceServerReplayMessage<TResult> | VoiceServerPartialMessage | VoiceServerFinalMessage | VoiceServerTurnMessage<TResult> | VoiceServerAssistantMessage | VoiceServerAssistantDeltaMessage | VoiceServerAudioMessage | VoiceServerCallLifecycleMessage | VoiceServerCompleteMessage | VoiceServerErrorMessage | VoiceServerPongMessage | VoiceServerConnectionMessage;
727
1105
  export type VoiceConnectionOptions = {
1106
+ browserMedia?: false | VoiceBrowserMediaReporterOptions;
728
1107
  protocols?: string[];
729
1108
  scenarioId?: string;
730
1109
  reconnect?: boolean;
1110
+ reconnectReportPath?: string;
731
1111
  maxReconnectAttempts?: number;
732
1112
  pingInterval?: number;
733
1113
  sessionId?: string;
734
1114
  };
1115
+ export type VoiceBrowserMediaReportPayload = {
1116
+ at: number;
1117
+ continuity?: MediaWebRTCStreamContinuityReport;
1118
+ report: MediaWebRTCStatsReport;
1119
+ scenarioId?: string | null;
1120
+ sessionId?: string | null;
1121
+ };
1122
+ export type VoiceBrowserMediaReporterOptions = Omit<MediaWebRTCStatsReportInput, "peerConnection"> & {
1123
+ fetch?: typeof fetch;
1124
+ getPeerConnection?: (() => MediaWebRTCStatsCollector | null | undefined) | (() => Promise<MediaWebRTCStatsCollector | null | undefined>);
1125
+ getScenarioId?: () => string | null | undefined;
1126
+ getSessionId?: () => string | null | undefined;
1127
+ intervalMs?: number;
1128
+ continuity?: false | Omit<MediaWebRTCStreamContinuityInput, "previousStats" | "stats">;
1129
+ onError?: (error: unknown) => void;
1130
+ onReport?: (payload: VoiceBrowserMediaReportPayload) => void;
1131
+ path?: string;
1132
+ peerConnection?: MediaWebRTCStatsCollector;
1133
+ };
735
1134
  export type VoiceCaptureOptions = {
736
1135
  channelCount?: 1 | 2;
1136
+ onAudio?: (audio: Uint8Array | ArrayBuffer, sendAudio: (audio: Uint8Array | ArrayBuffer) => void) => void;
737
1137
  onLevel?: (level: number) => void;
738
1138
  sampleRateHz?: number;
1139
+ /**
1140
+ * A pre-acquired microphone MediaStream. When set, capture uses it instead of
1141
+ * calling getUserMedia — so a host that requested permission UP FRONT (before
1142
+ * connecting, so the prompt can't interrupt the assistant's greeting) can hand
1143
+ * the SAME stream in rather than release-and-reacquire (a second getUserMedia
1144
+ * + a track stop can trigger an audio-device change that suspends playback and
1145
+ * cuts the greeting). Capture owns it after handoff and stops it on close.
1146
+ */
1147
+ stream?: MediaStream;
739
1148
  };
740
1149
  export type VoiceControllerOptions = {
741
1150
  preset?: VoiceRuntimePreset;
@@ -747,20 +1156,69 @@ export type VoiceBargeInOptions = {
747
1156
  enabled?: boolean;
748
1157
  interruptOnPartial?: boolean;
749
1158
  interruptThreshold?: number;
1159
+ monitor?: VoiceBargeInMonitor;
1160
+ };
1161
+ export type VoiceBargeInTriggerReason = "input-level" | "manual-audio" | "manual-interrupt" | "partial-transcript";
1162
+ export type VoiceBargeInMonitorEvent = {
1163
+ at: number;
1164
+ id: string;
1165
+ latencyMs?: number;
1166
+ playbackStopLatencyMs?: number;
1167
+ reason: VoiceBargeInTriggerReason;
1168
+ sessionId?: string | null;
1169
+ status: "requested" | "stopped" | "skipped";
1170
+ thresholdMs?: number;
1171
+ };
1172
+ export type VoiceBargeInMonitorSnapshot = {
1173
+ averageLatencyMs?: number;
1174
+ events: VoiceBargeInMonitorEvent[];
1175
+ failed: number;
1176
+ lastEvent?: VoiceBargeInMonitorEvent;
1177
+ passed: number;
1178
+ status: "empty" | "fail" | "pass" | "warn";
1179
+ thresholdMs: number;
1180
+ total: number;
1181
+ };
1182
+ export type VoiceBargeInMonitor = {
1183
+ getSnapshot: () => VoiceBargeInMonitorSnapshot;
1184
+ recordRequested: (input: {
1185
+ reason: VoiceBargeInTriggerReason;
1186
+ sessionId?: string | null;
1187
+ }) => VoiceBargeInMonitorEvent;
1188
+ recordSkipped: (input: {
1189
+ reason: VoiceBargeInTriggerReason;
1190
+ sessionId?: string | null;
1191
+ }) => VoiceBargeInMonitorEvent;
1192
+ recordStopped: (input: {
1193
+ latencyMs?: number;
1194
+ playbackStopLatencyMs?: number;
1195
+ reason: VoiceBargeInTriggerReason;
1196
+ sessionId?: string | null;
1197
+ }) => VoiceBargeInMonitorEvent;
1198
+ subscribe: (subscriber: () => void) => () => void;
750
1199
  };
751
1200
  export type VoiceAudioPlayerOptions = {
752
1201
  autoStart?: boolean;
753
1202
  createAudioContext?: () => AudioContext;
754
1203
  lookaheadMs?: number;
1204
+ /**
1205
+ * Playback speed multiplier for the assistant's speech. 1 = normal. Clamped
1206
+ * to [0.5, 2]. Pitch shifts with the rate (Web Audio playbackRate), so keep
1207
+ * UI ranges modest (≈0.85–1.25) to stay natural. Can be changed live via
1208
+ * setPlaybackRate — already-scheduled chunks keep their rate; new chunks
1209
+ * adopt the new one.
1210
+ */
1211
+ playbackRate?: number;
1212
+ volume?: number;
755
1213
  };
756
1214
  export type VoiceDuplexControllerOptions = VoiceControllerOptions & {
757
1215
  audioPlayer?: VoiceAudioPlayerOptions;
758
1216
  bargeIn?: VoiceBargeInOptions;
759
1217
  };
760
- export type VoiceSTTRoutingGoal = 'best' | 'low-cost';
761
- export type VoiceSTTRoutingCorrectionMode = 'generic' | 'none' | 'risky-turn';
1218
+ export type VoiceSTTRoutingGoal = "best" | "low-cost";
1219
+ export type VoiceSTTRoutingCorrectionMode = "generic" | "none" | "risky-turn";
762
1220
  export type VoiceSTTRoutingStrategy = {
763
- benchmarkSessionTarget: 'deepgram-corrected' | 'deepgram-flux';
1221
+ benchmarkSessionTarget: "deepgram-corrected" | "deepgram-flux";
764
1222
  correctionMode: VoiceSTTRoutingCorrectionMode;
765
1223
  goal: VoiceSTTRoutingGoal;
766
1224
  notes: string[];
@@ -774,7 +1232,7 @@ export type VoiceHTMXRenderInput<TResult = unknown, TSession extends VoiceSessio
774
1232
  result?: TResult;
775
1233
  session?: TSession;
776
1234
  sessionId?: string;
777
- status: VoiceSessionStatus | 'idle';
1235
+ status: VoiceSessionStatus | "idle";
778
1236
  turnCount: number;
779
1237
  turns: VoiceTurnRecord<TResult>[];
780
1238
  };
@@ -802,12 +1260,15 @@ export type VoiceHTMXOptions<TSession extends VoiceSessionRecord = VoiceSessionR
802
1260
  export type VoiceHTMXConfig<TSession extends VoiceSessionRecord = VoiceSessionRecord, TResult = unknown> = VoiceHTMXRenderer<TSession, TResult> | VoiceHTMXOptions<TSession, TResult>;
803
1261
  export type VoiceStreamState<TResult = unknown> = {
804
1262
  call: VoiceCallLifecycleState | null;
1263
+ sessionMetadata: Record<string, unknown> | null;
805
1264
  sessionId: string | null;
806
1265
  scenarioId: string | null;
807
- status: VoiceSessionStatus | 'idle';
1266
+ status: VoiceSessionStatus | "idle";
1267
+ reconnect: VoiceReconnectClientState;
808
1268
  partial: string;
809
1269
  turns: VoiceTurnRecord<TResult>[];
810
1270
  assistantTexts: string[];
1271
+ assistantStreamingText: string;
811
1272
  assistantAudio: Array<{
812
1273
  chunk: Uint8Array;
813
1274
  format: AudioFormat;
@@ -819,7 +1280,7 @@ export type VoiceStreamState<TResult = unknown> = {
819
1280
  };
820
1281
  export type VoiceStream<TResult = unknown> = {
821
1282
  call: VoiceCallLifecycleState | null;
822
- callControl: (message: Omit<VoiceClientCallControlMessage, 'type'>) => void;
1283
+ callControl: (message: Omit<VoiceClientCallControlMessage, "type">) => void;
823
1284
  close: () => void;
824
1285
  start: (input?: {
825
1286
  scenarioId?: string;
@@ -831,13 +1292,17 @@ export type VoiceStream<TResult = unknown> = {
831
1292
  getSnapshot: () => VoiceStreamState<TResult>;
832
1293
  isConnected: boolean;
833
1294
  partial: string;
1295
+ reconnect: VoiceReconnectClientState;
834
1296
  sendAudio: (audio: Uint8Array | ArrayBuffer) => void;
1297
+ simulateDisconnect: () => void;
835
1298
  sessionId: string | null;
1299
+ sessionMetadata: Record<string, unknown> | null;
836
1300
  scenarioId: string | null;
837
- status: VoiceSessionStatus | 'idle';
1301
+ status: VoiceSessionStatus | "idle";
838
1302
  subscribe: (subscriber: () => void) => () => void;
839
1303
  turns: VoiceTurnRecord<TResult>[];
840
1304
  assistantTexts: string[];
1305
+ assistantStreamingText: string;
841
1306
  assistantAudio: Array<{
842
1307
  chunk: Uint8Array;
843
1308
  format: AudioFormat;
@@ -860,7 +1325,7 @@ export type VoiceAudioPlayerState = {
860
1325
  queuedChunkCount: number;
861
1326
  };
862
1327
  export type VoiceAudioPlayerSource = {
863
- assistantAudio: VoiceStreamState['assistantAudio'];
1328
+ assistantAudio: VoiceStreamState["assistantAudio"];
864
1329
  subscribe: (subscriber: () => void) => () => void;
865
1330
  };
866
1331
  export type VoiceAudioPlayer = {
@@ -874,10 +1339,14 @@ export type VoiceAudioPlayer = {
874
1339
  lastInterruptLatencyMs?: number;
875
1340
  lastPlaybackStopLatencyMs?: number;
876
1341
  pause: () => Promise<void>;
1342
+ playbackRate: number;
877
1343
  processedChunkCount: number;
878
1344
  queuedChunkCount: number;
1345
+ setPlaybackRate: (rate: number) => void;
1346
+ setVolume: (volume: number) => void;
879
1347
  start: () => Promise<void>;
880
1348
  subscribe: (subscriber: () => void) => () => void;
1349
+ volume: number;
881
1350
  };
882
1351
  export type VoiceBargeInBinding = {
883
1352
  close: () => void;
@@ -887,7 +1356,7 @@ export type VoiceBargeInBinding = {
887
1356
  export type VoiceController<TResult = unknown> = {
888
1357
  bindHTMX: (options: VoiceHTMXBindingOptions) => () => void;
889
1358
  call: VoiceCallLifecycleState | null;
890
- callControl: (message: Omit<VoiceClientCallControlMessage, 'type'>) => void;
1359
+ callControl: (message: Omit<VoiceClientCallControlMessage, "type">) => void;
891
1360
  close: () => void;
892
1361
  endTurn: () => void;
893
1362
  start: (input?: {
@@ -900,17 +1369,21 @@ export type VoiceController<TResult = unknown> = {
900
1369
  isConnected: boolean;
901
1370
  isRecording: boolean;
902
1371
  partial: string;
1372
+ reconnect: VoiceReconnectClientState;
903
1373
  recordingError: string | null;
904
1374
  sendAudio: (audio: Uint8Array | ArrayBuffer) => void;
1375
+ simulateDisconnect: () => void;
905
1376
  sessionId: string | null;
1377
+ sessionMetadata: Record<string, unknown> | null;
906
1378
  scenarioId: string | null;
907
1379
  startRecording: () => Promise<void>;
908
- status: VoiceSessionStatus | 'idle';
1380
+ status: VoiceSessionStatus | "idle";
909
1381
  stopRecording: () => void;
910
1382
  subscribe: (subscriber: () => void) => () => void;
911
1383
  toggleRecording: () => Promise<void>;
912
1384
  turns: VoiceTurnRecord<TResult>[];
913
1385
  assistantTexts: string[];
1386
+ assistantStreamingText: string;
914
1387
  assistantAudio: Array<{
915
1388
  chunk: Uint8Array;
916
1389
  format: AudioFormat;
@@ -929,40 +1402,59 @@ export type VoiceHTMXBindingOptions = {
929
1402
  sessionQueryParam?: string;
930
1403
  };
931
1404
  export type VoiceStoreAction<TResult = unknown> = {
932
- type: 'session';
1405
+ type: "session";
933
1406
  sessionId: string;
1407
+ sessionMetadata?: Record<string, unknown>;
934
1408
  scenarioId?: string;
935
1409
  status: VoiceSessionStatus;
936
1410
  } | {
937
- type: 'call_lifecycle';
1411
+ type: "replay";
1412
+ assistantTexts: string[];
1413
+ call?: VoiceCallLifecycleState;
1414
+ partial: string;
1415
+ scenarioId?: string;
1416
+ sessionId: string;
1417
+ sessionMetadata?: Record<string, unknown>;
1418
+ status: VoiceSessionStatus;
1419
+ turns: VoiceTurnRecord<TResult>[];
1420
+ } | {
1421
+ type: "call_lifecycle";
938
1422
  event: VoiceCallLifecycleEvent;
939
1423
  sessionId: string;
940
1424
  } | {
941
- type: 'partial';
1425
+ type: "partial";
942
1426
  transcript: Transcript;
943
1427
  } | {
944
- type: 'final';
1428
+ type: "final";
945
1429
  transcript: Transcript;
946
1430
  } | {
947
- type: 'turn';
1431
+ type: "turn";
948
1432
  turn: VoiceTurnRecord<TResult>;
949
1433
  } | {
950
- type: 'assistant';
1434
+ type: "assistant";
951
1435
  text: string;
1436
+ turnId?: string;
952
1437
  } | {
953
- type: 'audio';
1438
+ type: "assistant_delta";
1439
+ delta: string;
1440
+ turnId?: string;
1441
+ } | {
1442
+ type: "audio";
954
1443
  chunk: Uint8Array;
955
1444
  format: AudioFormat;
956
1445
  receivedAt: number;
957
1446
  turnId?: string;
958
1447
  } | {
959
- type: 'complete';
1448
+ type: "complete";
960
1449
  sessionId: string;
961
1450
  } | {
962
- type: 'error';
1451
+ type: "error";
963
1452
  message: string;
964
1453
  } | {
965
- type: 'connected';
1454
+ type: "connected";
1455
+ } | {
1456
+ type: "connection";
1457
+ reconnect: VoiceReconnectClientState;
966
1458
  } | {
967
- type: 'disconnected';
1459
+ type: "disconnected";
968
1460
  };