@absolutejs/voice 0.0.22-beta.53 → 0.0.22-beta.530

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 (480) hide show
  1. package/README.md +4518 -951
  2. package/dist/agent.d.ts +79 -5
  3. package/dist/agentPerformanceReport.d.ts +40 -0
  4. package/dist/agentSquadContract.d.ts +98 -0
  5. package/dist/agentState.d.ts +12 -0
  6. package/dist/agentTools.d.ts +133 -0
  7. package/dist/aiScorecard.d.ts +32 -0
  8. package/dist/aiVoiceModel.d.ts +15 -0
  9. package/dist/amdDetector.d.ts +25 -0
  10. package/dist/angular/index.d.ts +36 -6
  11. package/dist/angular/index.js +3995 -577
  12. package/dist/angular/voice-agent-squad-status.service.d.ts +12 -0
  13. package/dist/angular/voice-call-debugger.service.d.ts +12 -0
  14. package/dist/angular/voice-call-player.service.d.ts +19 -0
  15. package/dist/angular/voice-campaign-dialer-proof.service.d.ts +14 -0
  16. package/dist/angular/voice-controller.service.d.ts +3 -1
  17. package/dist/angular/voice-cost-dashboard.service.d.ts +15 -0
  18. package/dist/angular/voice-delivery-runtime.component.d.ts +17 -0
  19. package/dist/angular/voice-delivery-runtime.service.d.ts +16 -0
  20. package/dist/angular/voice-live-agent-console.service.d.ts +16 -0
  21. package/dist/angular/voice-live-call-viewer.service.d.ts +16 -0
  22. package/dist/angular/voice-live-ops.service.d.ts +11 -0
  23. package/dist/angular/voice-ops-action-center.service.d.ts +13 -0
  24. package/dist/angular/voice-ops-status.component.d.ts +2 -2
  25. package/dist/angular/voice-ops-status.service.d.ts +12 -0
  26. package/dist/angular/voice-platform-coverage.service.d.ts +12 -0
  27. package/dist/angular/voice-profile-comparison.service.d.ts +12 -0
  28. package/dist/angular/voice-proof-trends.service.d.ts +12 -0
  29. package/dist/angular/voice-provider-capabilities.service.d.ts +12 -0
  30. package/dist/angular/voice-provider-contracts.service.d.ts +12 -0
  31. package/dist/angular/voice-provider-status.service.d.ts +2 -2
  32. package/dist/angular/voice-readiness-failures.service.d.ts +13 -0
  33. package/dist/angular/voice-reconnect-profile-evidence.service.d.ts +12 -0
  34. package/dist/angular/voice-replay-timeline.service.d.ts +13 -0
  35. package/dist/angular/voice-routing-status.service.d.ts +11 -0
  36. package/dist/angular/voice-session-observability.service.d.ts +12 -0
  37. package/dist/angular/voice-session-snapshot.service.d.ts +13 -0
  38. package/dist/angular/voice-stream.service.d.ts +4 -1
  39. package/dist/angular/voice-trace-timeline.service.d.ts +12 -0
  40. package/dist/angular/voice-turn-latency.service.d.ts +13 -0
  41. package/dist/angular/voice-turn-quality.service.d.ts +12 -0
  42. package/dist/angular/voice-widget.service.d.ts +18 -0
  43. package/dist/angular/voice-workflow-status.service.d.ts +2 -2
  44. package/dist/assistant.d.ts +12 -13
  45. package/dist/assistantExperiment.d.ts +41 -0
  46. package/dist/assistantHealth.d.ts +6 -6
  47. package/dist/assistantMemory.d.ts +3 -3
  48. package/dist/assistantMode.d.ts +22 -0
  49. package/dist/audioConditioning.d.ts +1 -1
  50. package/dist/audit.d.ts +131 -0
  51. package/dist/auditDeliveryRoutes.d.ts +85 -0
  52. package/dist/auditExport.d.ts +34 -0
  53. package/dist/auditRoutes.d.ts +66 -0
  54. package/dist/auditSinks.d.ts +151 -0
  55. package/dist/backchannel.d.ts +18 -0
  56. package/dist/bargeInRoutes.d.ts +56 -0
  57. package/dist/bookingFlow.d.ts +43 -0
  58. package/dist/browserCallProfiles.d.ts +120 -0
  59. package/dist/browserMediaRoutes.d.ts +62 -0
  60. package/dist/calendarAdapter.d.ts +47 -0
  61. package/dist/calendarSlots.d.ts +35 -0
  62. package/dist/callDebugger.d.ts +66 -0
  63. package/dist/callDisposition.d.ts +38 -0
  64. package/dist/callQuota.d.ts +54 -0
  65. package/dist/callScorecard.d.ts +53 -0
  66. package/dist/callerCRMLinker.d.ts +29 -0
  67. package/dist/callerMemory.d.ts +37 -0
  68. package/dist/callingWindow.d.ts +26 -0
  69. package/dist/campaign.d.ts +794 -0
  70. package/dist/campaignControls.d.ts +37 -0
  71. package/dist/campaignDialers.d.ts +111 -0
  72. package/dist/campaignTemplate.d.ts +16 -0
  73. package/dist/client/actions.d.ts +95 -1
  74. package/dist/client/agentSquadStatus.d.ts +37 -0
  75. package/dist/client/agentSquadStatusWidget.d.ts +24 -0
  76. package/dist/client/audioPlayer.d.ts +2 -2
  77. package/dist/client/bargeInMonitor.d.ts +7 -0
  78. package/dist/client/browserMedia.d.ts +8 -0
  79. package/dist/client/browserNoiseSuppression.d.ts +42 -0
  80. package/dist/client/browserVoiceSupport.d.ts +22 -0
  81. package/dist/client/callDebugger.d.ts +19 -0
  82. package/dist/client/callDebuggerWidget.d.ts +30 -0
  83. package/dist/client/callPlayer.d.ts +41 -0
  84. package/dist/client/campaignDialerProof.d.ts +23 -0
  85. package/dist/client/connection.d.ts +4 -3
  86. package/dist/client/controller.d.ts +1 -1
  87. package/dist/client/conversationAnalytics.d.ts +29 -0
  88. package/dist/client/costDashboard.d.ts +27 -0
  89. package/dist/client/createVoiceStream.d.ts +1 -1
  90. package/dist/client/deliveryRuntime.d.ts +34 -0
  91. package/dist/client/deliveryRuntimeWidget.d.ts +37 -0
  92. package/dist/client/duplex.d.ts +2 -2
  93. package/dist/client/htmx.d.ts +1 -1
  94. package/dist/client/htmxAttributes.d.ts +28 -0
  95. package/dist/client/htmxBootstrap.js +971 -15
  96. package/dist/client/htmxDashboardRenderers.d.ts +72 -0
  97. package/dist/client/index.d.ts +104 -15
  98. package/dist/client/index.js +10142 -139
  99. package/dist/client/liveAgentConsole.d.ts +28 -0
  100. package/dist/client/liveCallViewer.d.ts +42 -0
  101. package/dist/client/liveOps.d.ts +22 -0
  102. package/dist/client/liveOpsWidget.d.ts +23 -0
  103. package/dist/client/liveTurnLatency.d.ts +41 -0
  104. package/dist/client/microphone.d.ts +4 -4
  105. package/dist/client/opsActionCenter.d.ts +54 -0
  106. package/dist/client/opsActionCenterWidget.d.ts +29 -0
  107. package/dist/client/opsActionHistory.d.ts +19 -0
  108. package/dist/client/opsActionHistoryWidget.d.ts +11 -0
  109. package/dist/client/opsStatus.d.ts +19 -0
  110. package/dist/client/opsStatusWidget.d.ts +9 -9
  111. package/dist/client/platformCoverage.d.ts +19 -0
  112. package/dist/client/platformCoverageWidget.d.ts +37 -0
  113. package/dist/client/profileComparison.d.ts +19 -0
  114. package/dist/client/profileComparisonWidget.d.ts +41 -0
  115. package/dist/client/profileSwitchRecommendation.d.ts +19 -0
  116. package/dist/client/profileSwitchRecommendationWidget.d.ts +12 -0
  117. package/dist/client/proofTrends.d.ts +19 -0
  118. package/dist/client/proofTrendsWidget.d.ts +37 -0
  119. package/dist/client/providerCapabilities.d.ts +19 -0
  120. package/dist/client/providerCapabilitiesWidget.d.ts +32 -0
  121. package/dist/client/providerContracts.d.ts +19 -0
  122. package/dist/client/providerContractsWidget.d.ts +37 -0
  123. package/dist/client/providerSimulationControls.d.ts +33 -0
  124. package/dist/client/providerSimulationControlsWidget.d.ts +20 -0
  125. package/dist/client/providerStatus.d.ts +1 -1
  126. package/dist/client/providerStatusWidget.d.ts +32 -0
  127. package/dist/client/readinessFailures.d.ts +19 -0
  128. package/dist/client/readinessFailuresWidget.d.ts +42 -0
  129. package/dist/client/reconnectProfileEvidence.d.ts +19 -0
  130. package/dist/client/reconnectProfileEvidenceWidget.d.ts +39 -0
  131. package/dist/client/replayTimeline.d.ts +26 -0
  132. package/dist/client/routingStatus.d.ts +19 -0
  133. package/dist/client/routingStatusWidget.d.ts +32 -0
  134. package/dist/client/sessionObservability.d.ts +19 -0
  135. package/dist/client/sessionObservabilityWidget.d.ts +31 -0
  136. package/dist/client/sessionSnapshot.d.ts +21 -0
  137. package/dist/client/sessionSnapshotWidget.d.ts +33 -0
  138. package/dist/client/store.d.ts +1 -1
  139. package/dist/client/traceTimeline.d.ts +19 -0
  140. package/dist/client/traceTimelineWidget.d.ts +36 -0
  141. package/dist/client/turnLatency.d.ts +22 -0
  142. package/dist/client/turnLatencyWidget.d.ts +33 -0
  143. package/dist/client/turnQuality.d.ts +19 -0
  144. package/dist/client/turnQualityWidget.d.ts +32 -0
  145. package/dist/client/voiceWidgetView.d.ts +50 -0
  146. package/dist/client/workflowStatus.d.ts +1 -1
  147. package/dist/competitiveCoverage.d.ts +141 -0
  148. package/dist/conversationSimulator.d.ts +73 -0
  149. package/dist/correction.d.ts +2 -2
  150. package/dist/costAccounting.d.ts +76 -0
  151. package/dist/costPredictor.d.ts +74 -0
  152. package/dist/crmCallLogger.d.ts +37 -0
  153. package/dist/crmContract.d.ts +70 -0
  154. package/dist/dataControl.d.ts +180 -0
  155. package/dist/defineVoiceAssistant.d.ts +68 -0
  156. package/dist/deliveryRuntime.d.ts +158 -0
  157. package/dist/deliverySinkRoutes.d.ts +117 -0
  158. package/dist/demoReadyRoutes.d.ts +98 -0
  159. package/dist/diagnosticsRoutes.d.ts +2 -2
  160. package/dist/dncRegistry.d.ts +38 -0
  161. package/dist/dtmfCollector.d.ts +37 -0
  162. package/dist/embed/index.d.ts +38 -0
  163. package/dist/embed/index.js +1710 -0
  164. package/dist/embed/voice-widget.js +10 -0
  165. package/dist/evalRoutes.d.ts +10 -4
  166. package/dist/fileStore.d.ts +21 -7
  167. package/dist/guardrails.d.ts +128 -0
  168. package/dist/handoff.d.ts +6 -6
  169. package/dist/handoffHealth.d.ts +5 -5
  170. package/dist/holdAudio.d.ts +23 -0
  171. package/dist/htmx.d.ts +1 -1
  172. package/dist/htmxDashboardRoutes.d.ts +249 -0
  173. package/dist/iceServers.d.ts +34 -0
  174. package/dist/incidentBundle.d.ts +119 -0
  175. package/dist/incidentTimeline.d.ts +260 -0
  176. package/dist/index.d.ts +369 -74
  177. package/dist/index.js +44682 -6184
  178. package/dist/internal/html.d.ts +6 -0
  179. package/dist/internal/status.d.ts +9 -0
  180. package/dist/ivrPlan.d.ts +40 -0
  181. package/dist/latencySlo.d.ts +56 -0
  182. package/dist/liveCoach.d.ts +43 -0
  183. package/dist/liveLatency.d.ts +78 -0
  184. package/dist/liveOps.d.ts +190 -0
  185. package/dist/llmJudge.d.ts +45 -0
  186. package/dist/logger.d.ts +1 -1
  187. package/dist/mcpToolset.d.ts +58 -0
  188. package/dist/mediaPipelineRoutes.d.ts +171 -0
  189. package/dist/mediaPipelineSurfaces.d.ts +48 -0
  190. package/dist/memoryStore.d.ts +1 -1
  191. package/dist/midCallSummary.d.ts +27 -0
  192. package/dist/modelAdapters.d.ts +59 -7
  193. package/dist/monitor.d.ts +148 -0
  194. package/dist/multilingualProof.d.ts +77 -0
  195. package/dist/noShowPredictor.d.ts +46 -0
  196. package/dist/oauth2TokenSource.d.ts +21 -0
  197. package/dist/observabilityExport.d.ts +501 -0
  198. package/dist/openaiTTS.d.ts +18 -0
  199. package/dist/operationalStatus.d.ts +87 -0
  200. package/dist/operationsRecord.d.ts +370 -0
  201. package/dist/ops.d.ts +12 -12
  202. package/dist/opsActionAuditRoutes.d.ts +99 -0
  203. package/dist/opsConsoleRoutes.d.ts +8 -5
  204. package/dist/opsPresets.d.ts +2 -2
  205. package/dist/opsRecovery.d.ts +137 -0
  206. package/dist/opsRuntime.d.ts +6 -6
  207. package/dist/opsSinks.d.ts +13 -13
  208. package/dist/opsStatus.d.ts +76 -0
  209. package/dist/opsStatusRoutes.d.ts +33 -0
  210. package/dist/opsWebhook.d.ts +6 -6
  211. package/dist/otelExporter.d.ts +83 -0
  212. package/dist/outcomeContract.d.ts +146 -0
  213. package/dist/outcomeRecipes.d.ts +4 -4
  214. package/dist/pathway.d.ts +94 -0
  215. package/dist/pathwayCompiler.d.ts +31 -0
  216. package/dist/pathwayGenerator.d.ts +27 -0
  217. package/dist/pathwayRuntime.d.ts +57 -0
  218. package/dist/pathwaySlotCollector.d.ts +29 -0
  219. package/dist/pathwayVisualizer.d.ts +8 -0
  220. package/dist/phoneAgent.d.ts +139 -0
  221. package/dist/phoneAgentProductionSmoke.d.ts +115 -0
  222. package/dist/phoneProvisioning.d.ts +29 -0
  223. package/dist/platformCoverage.d.ts +91 -0
  224. package/dist/plugin.d.ts +2 -2
  225. package/dist/postCallAnalysis.d.ts +98 -0
  226. package/dist/postCallSurvey.d.ts +41 -0
  227. package/dist/postgresStore.d.ts +17 -6
  228. package/dist/presets.d.ts +3 -3
  229. package/dist/productionReadiness.d.ts +756 -0
  230. package/dist/profileSwitchRecommendation.d.ts +350 -0
  231. package/dist/promptInjectionGuard.d.ts +30 -0
  232. package/dist/proofAssertions.d.ts +32 -0
  233. package/dist/proofPack.d.ts +211 -0
  234. package/dist/proofRunner.d.ts +79 -0
  235. package/dist/proofTrends.d.ts +966 -0
  236. package/dist/providerAdapters.d.ts +16 -5
  237. package/dist/providerCapabilities.d.ts +92 -0
  238. package/dist/providerDecisionTraces.d.ts +130 -0
  239. package/dist/providerHealth.d.ts +13 -3
  240. package/dist/providerOrchestration.d.ts +109 -0
  241. package/dist/providerRouterTraces.d.ts +35 -0
  242. package/dist/providerRoutingContract.d.ts +71 -0
  243. package/dist/providerSlo.d.ts +142 -0
  244. package/dist/providerStackRecommendations.d.ts +187 -0
  245. package/dist/qualityDriftDetector.d.ts +44 -0
  246. package/dist/qualityRoutes.d.ts +4 -4
  247. package/dist/queue.d.ts +23 -14
  248. package/dist/ragTool.d.ts +52 -0
  249. package/dist/react/VoiceAgentSquadStatus.d.ts +5 -0
  250. package/dist/react/VoiceCallDebuggerLaunch.d.ts +6 -0
  251. package/dist/react/VoiceCallPlayer.d.ts +11 -0
  252. package/dist/react/VoiceCostDashboard.d.ts +10 -0
  253. package/dist/react/VoiceDeliveryRuntime.d.ts +7 -0
  254. package/dist/react/VoiceLiveAgentConsole.d.ts +11 -0
  255. package/dist/react/VoiceLiveCallViewer.d.ts +9 -0
  256. package/dist/react/VoiceOpsActionCenter.d.ts +5 -0
  257. package/dist/react/VoiceOpsStatus.d.ts +1 -1
  258. package/dist/react/VoicePlatformCoverage.d.ts +6 -0
  259. package/dist/react/VoiceProfileComparison.d.ts +6 -0
  260. package/dist/react/VoiceProfileSwitchRecommendation.d.ts +6 -0
  261. package/dist/react/VoiceProofTrends.d.ts +6 -0
  262. package/dist/react/VoiceProviderCapabilities.d.ts +6 -0
  263. package/dist/react/VoiceProviderContracts.d.ts +6 -0
  264. package/dist/react/VoiceProviderSimulationControls.d.ts +5 -0
  265. package/dist/react/VoiceProviderStatus.d.ts +6 -0
  266. package/dist/react/VoiceReadinessFailures.d.ts +6 -0
  267. package/dist/react/VoiceReconnectProfileEvidence.d.ts +6 -0
  268. package/dist/react/VoiceReplayTimeline.d.ts +6 -0
  269. package/dist/react/VoiceRoutingStatus.d.ts +6 -0
  270. package/dist/react/VoiceSessionObservability.d.ts +6 -0
  271. package/dist/react/VoiceSessionSnapshot.d.ts +6 -0
  272. package/dist/react/VoiceTraceTimeline.d.ts +6 -0
  273. package/dist/react/VoiceTurnLatency.d.ts +6 -0
  274. package/dist/react/VoiceTurnQuality.d.ts +6 -0
  275. package/dist/react/VoiceWidget.d.ts +13 -0
  276. package/dist/react/index.d.ts +59 -6
  277. package/dist/react/index.js +12684 -322
  278. package/dist/react/useVoiceAgentSquadStatus.d.ts +8 -0
  279. package/dist/react/useVoiceCallDebugger.d.ts +8 -0
  280. package/dist/react/useVoiceCampaignDialerProof.d.ts +10 -0
  281. package/dist/react/useVoiceController.d.ts +4 -1
  282. package/dist/react/useVoiceDeliveryRuntime.d.ts +13 -0
  283. package/dist/react/useVoiceLiveOps.d.ts +9 -0
  284. package/dist/react/useVoiceOpsActionCenter.d.ts +11 -0
  285. package/dist/react/useVoiceOpsStatus.d.ts +8 -0
  286. package/dist/react/useVoicePlatformCoverage.d.ts +8 -0
  287. package/dist/react/useVoiceProfileComparison.d.ts +8 -0
  288. package/dist/react/useVoiceProfileSwitchRecommendation.d.ts +8 -0
  289. package/dist/react/useVoiceProofTrends.d.ts +8 -0
  290. package/dist/react/useVoiceProviderCapabilities.d.ts +8 -0
  291. package/dist/react/useVoiceProviderContracts.d.ts +8 -0
  292. package/dist/react/useVoiceProviderSimulationControls.d.ts +10 -0
  293. package/dist/react/useVoiceProviderStatus.d.ts +1 -1
  294. package/dist/react/useVoiceReadinessFailures.d.ts +8 -0
  295. package/dist/react/useVoiceReconnectProfileEvidence.d.ts +8 -0
  296. package/dist/react/useVoiceRoutingStatus.d.ts +8 -0
  297. package/dist/react/useVoiceSessionObservability.d.ts +8 -0
  298. package/dist/react/useVoiceSessionSnapshot.d.ts +9 -0
  299. package/dist/react/useVoiceStream.d.ts +4 -1
  300. package/dist/react/useVoiceTraceTimeline.d.ts +8 -0
  301. package/dist/react/useVoiceTurnLatency.d.ts +9 -0
  302. package/dist/react/useVoiceTurnQuality.d.ts +8 -0
  303. package/dist/react/useVoiceWorkflowStatus.d.ts +1 -1
  304. package/dist/readinessProfiles.d.ts +45 -0
  305. package/dist/realtimeChannel.d.ts +136 -0
  306. package/dist/realtimeProviderContracts.d.ts +133 -0
  307. package/dist/reconnectContract.d.ts +176 -0
  308. package/dist/recordingRedaction.d.ts +47 -0
  309. package/dist/recordingStore.d.ts +60 -0
  310. package/dist/redaction.d.ts +13 -0
  311. package/dist/reminderScheduler.d.ts +43 -0
  312. package/dist/resilienceRoutes.d.ts +45 -5
  313. package/dist/retention.d.ts +37 -0
  314. package/dist/retryPolicy.d.ts +38 -0
  315. package/dist/routeAuth.d.ts +58 -0
  316. package/dist/routing.d.ts +1 -1
  317. package/dist/runtimeOps.d.ts +3 -3
  318. package/dist/s3Store.d.ts +18 -3
  319. package/dist/scorecardCalibration.d.ts +31 -0
  320. package/dist/semanticTurn.d.ts +27 -0
  321. package/dist/session.d.ts +1 -1
  322. package/dist/sessionObservability.d.ts +145 -0
  323. package/dist/sessionReplay.d.ts +19 -7
  324. package/dist/sessionSnapshot.d.ts +109 -0
  325. package/dist/simulationSuite.d.ts +143 -0
  326. package/dist/sloCalibration.d.ts +185 -0
  327. package/dist/sqliteStore.d.ts +17 -6
  328. package/dist/store.d.ts +1 -1
  329. package/dist/supervisorPermissions.d.ts +33 -0
  330. package/dist/supervisorPresence.d.ts +49 -0
  331. package/dist/svelte/createVoiceAgentSquadStatus.d.ts +9 -0
  332. package/dist/svelte/createVoiceCallDebugger.d.ts +12 -0
  333. package/dist/svelte/createVoiceCallPlayer.d.ts +33 -0
  334. package/dist/svelte/createVoiceCampaignDialerProof.d.ts +9 -0
  335. package/dist/svelte/createVoiceCostDashboard.d.ts +13 -0
  336. package/dist/svelte/createVoiceDeliveryRuntime.d.ts +11 -0
  337. package/dist/svelte/createVoiceLiveAgentConsole.d.ts +23 -0
  338. package/dist/svelte/createVoiceLiveCallViewer.d.ts +26 -0
  339. package/dist/svelte/createVoiceLiveOps.d.ts +13 -0
  340. package/dist/svelte/createVoiceOpsActionCenter.d.ts +10 -0
  341. package/dist/svelte/createVoiceOpsStatus.d.ts +3 -3
  342. package/dist/svelte/createVoicePlatformCoverage.d.ts +7 -0
  343. package/dist/svelte/createVoiceProfileComparison.d.ts +7 -0
  344. package/dist/svelte/createVoiceProofTrends.d.ts +7 -0
  345. package/dist/svelte/createVoiceProviderCapabilities.d.ts +10 -0
  346. package/dist/svelte/createVoiceProviderContracts.d.ts +10 -0
  347. package/dist/svelte/createVoiceProviderSimulationControls.d.ts +11 -0
  348. package/dist/svelte/createVoiceProviderStatus.d.ts +4 -2
  349. package/dist/svelte/createVoiceReadinessFailures.d.ts +7 -0
  350. package/dist/svelte/createVoiceReconnectProfileEvidence.d.ts +7 -0
  351. package/dist/svelte/createVoiceReplayTimeline.d.ts +13 -0
  352. package/dist/svelte/createVoiceRoutingStatus.d.ts +10 -0
  353. package/dist/svelte/createVoiceSessionObservability.d.ts +10 -0
  354. package/dist/svelte/createVoiceSessionSnapshot.d.ts +13 -0
  355. package/dist/svelte/createVoiceStream.d.ts +1 -1
  356. package/dist/svelte/createVoiceTraceTimeline.d.ts +10 -0
  357. package/dist/svelte/createVoiceTurnLatency.d.ts +11 -0
  358. package/dist/svelte/createVoiceTurnQuality.d.ts +10 -0
  359. package/dist/svelte/createVoiceWidget.d.ts +19 -0
  360. package/dist/svelte/createVoiceWorkflowStatus.d.ts +1 -1
  361. package/dist/svelte/index.d.ts +37 -6
  362. package/dist/svelte/index.js +6834 -729
  363. package/dist/telephony/contract.d.ts +61 -0
  364. package/dist/telephony/matrix.d.ts +97 -0
  365. package/dist/telephony/plivo.d.ts +303 -0
  366. package/dist/telephony/response.d.ts +1 -1
  367. package/dist/telephony/security.d.ts +182 -0
  368. package/dist/telephony/telnyx.d.ts +291 -0
  369. package/dist/telephony/twilio.d.ts +147 -13
  370. package/dist/telephonyMediaRoutes.d.ts +72 -0
  371. package/dist/telephonyOutcome.d.ts +273 -0
  372. package/dist/testing/accuracy.d.ts +1 -1
  373. package/dist/testing/benchmark.d.ts +9 -9
  374. package/dist/testing/corrected.d.ts +5 -5
  375. package/dist/testing/duplex.d.ts +3 -3
  376. package/dist/testing/fixtures.d.ts +3 -3
  377. package/dist/testing/index.d.ts +13 -13
  378. package/dist/testing/index.js +5260 -158
  379. package/dist/testing/ioProviderSimulator.d.ts +5 -5
  380. package/dist/testing/providerSimulator.d.ts +5 -5
  381. package/dist/testing/review.d.ts +4 -4
  382. package/dist/testing/sessionBenchmark.d.ts +3 -3
  383. package/dist/testing/stt.d.ts +3 -3
  384. package/dist/testing/telephony.d.ts +25 -0
  385. package/dist/testing/tts.d.ts +1 -1
  386. package/dist/toolContract.d.ts +161 -0
  387. package/dist/toolRuntime.d.ts +50 -0
  388. package/dist/trace.d.ts +46 -7
  389. package/dist/traceDeliveryRoutes.d.ts +86 -0
  390. package/dist/traceTimeline.d.ts +97 -0
  391. package/dist/transcriptAnnotator.d.ts +41 -0
  392. package/dist/turnDetection.d.ts +1 -1
  393. package/dist/turnLatency.d.ts +95 -0
  394. package/dist/turnProfiles.d.ts +2 -2
  395. package/dist/turnQuality.d.ts +94 -0
  396. package/dist/types.d.ts +408 -80
  397. package/dist/vapiAdapter.d.ts +160 -0
  398. package/dist/variableAnalytics.d.ts +47 -0
  399. package/dist/voiceConfiguration.d.ts +8 -0
  400. package/dist/voiceMonitoring.d.ts +444 -0
  401. package/dist/vue/VoiceCallDebuggerLaunch.d.ts +68 -0
  402. package/dist/vue/VoiceCallPlayer.d.ts +40 -0
  403. package/dist/vue/VoiceCostDashboard.d.ts +57 -0
  404. package/dist/vue/VoiceDeliveryRuntime.d.ts +30 -0
  405. package/dist/vue/VoiceLiveAgentConsole.d.ts +50 -0
  406. package/dist/vue/VoiceLiveCallViewer.d.ts +35 -0
  407. package/dist/vue/VoiceOpsActionCenter.d.ts +13 -0
  408. package/dist/vue/VoicePlatformCoverage.d.ts +23 -0
  409. package/dist/vue/VoiceProofTrends.d.ts +21 -0
  410. package/dist/vue/VoiceProviderCapabilities.d.ts +51 -0
  411. package/dist/vue/VoiceProviderContracts.d.ts +21 -0
  412. package/dist/vue/VoiceProviderSimulationControls.d.ts +88 -0
  413. package/dist/vue/VoiceProviderStatus.d.ts +51 -0
  414. package/dist/vue/VoiceReadinessFailures.d.ts +21 -0
  415. package/dist/vue/VoiceReconnectProfileEvidence.d.ts +21 -0
  416. package/dist/vue/VoiceReplayTimeline.d.ts +17 -0
  417. package/dist/vue/VoiceRoutingStatus.d.ts +51 -0
  418. package/dist/vue/VoiceSessionObservability.d.ts +23 -0
  419. package/dist/vue/VoiceSessionSnapshot.d.ts +68 -0
  420. package/dist/vue/VoiceTurnLatency.d.ts +69 -0
  421. package/dist/vue/VoiceTurnQuality.d.ts +51 -0
  422. package/dist/vue/VoiceWidget.d.ts +77 -0
  423. package/dist/vue/index.d.ts +49 -6
  424. package/dist/vue/index.js +11965 -407
  425. package/dist/vue/useVoiceAgentSquadStatus.d.ts +9 -0
  426. package/dist/vue/useVoiceCallDebugger.d.ts +10 -0
  427. package/dist/vue/useVoiceCampaignDialerProof.d.ts +11 -0
  428. package/dist/vue/useVoiceController.d.ts +4 -2
  429. package/dist/vue/useVoiceDeliveryRuntime.d.ts +13 -0
  430. package/dist/vue/useVoiceLiveOps.d.ts +9 -0
  431. package/dist/vue/useVoiceOpsActionCenter.d.ts +11 -0
  432. package/dist/vue/useVoiceOpsStatus.d.ts +9 -0
  433. package/dist/vue/useVoicePlatformCoverage.d.ts +9 -0
  434. package/dist/vue/useVoiceProfileComparison.d.ts +9 -0
  435. package/dist/vue/useVoiceProofTrends.d.ts +9 -0
  436. package/dist/vue/useVoiceProviderCapabilities.d.ts +9 -0
  437. package/dist/vue/useVoiceProviderContracts.d.ts +9 -0
  438. package/dist/vue/useVoiceProviderSimulationControls.d.ts +24 -0
  439. package/dist/vue/useVoiceProviderStatus.d.ts +3 -3
  440. package/dist/vue/useVoiceReadinessFailures.d.ts +959 -0
  441. package/dist/vue/useVoiceReconnectProfileEvidence.d.ts +9 -0
  442. package/dist/vue/useVoiceRoutingStatus.d.ts +8 -0
  443. package/dist/vue/useVoiceSessionObservability.d.ts +9 -0
  444. package/dist/vue/useVoiceSessionSnapshot.d.ts +10 -0
  445. package/dist/vue/useVoiceStream.d.ts +5 -2
  446. package/dist/vue/useVoiceTraceTimeline.d.ts +9 -0
  447. package/dist/vue/useVoiceTurnLatency.d.ts +10 -0
  448. package/dist/vue/useVoiceTurnQuality.d.ts +9 -0
  449. package/dist/vue/useVoiceWorkflowStatus.d.ts +3 -3
  450. package/dist/webhookFanout.d.ts +48 -0
  451. package/dist/webhookVerification.d.ts +27 -0
  452. package/dist/whisperChannel.d.ts +50 -0
  453. package/dist/workflowContract.d.ts +8 -8
  454. package/dist/zeroDataRetention.d.ts +41 -0
  455. package/package.json +129 -256
  456. package/dist/angular/voice-app-kit-status.service.d.ts +0 -12
  457. package/dist/appKit.d.ts +0 -92
  458. package/dist/client/appKitStatus.d.ts +0 -19
  459. package/dist/react/useVoiceAppKitStatus.d.ts +0 -8
  460. package/dist/svelte/createVoiceAppKitStatus.d.ts +0 -8
  461. package/dist/vue/useVoiceAppKitStatus.d.ts +0 -9
  462. package/fixtures/README.md +0 -57
  463. package/fixtures/manifest.json +0 -199
  464. package/fixtures/pcm/dialogue-three-clean.pcm +0 -0
  465. package/fixtures/pcm/dialogue-three-mixed.pcm +0 -0
  466. package/fixtures/pcm/dialogue-two-clean.pcm +0 -0
  467. package/fixtures/pcm/dialogue-two-noisy.pcm +0 -0
  468. package/fixtures/pcm/multiturn-three-mixed.pcm +0 -0
  469. package/fixtures/pcm/multiturn-two-clean.pcm +0 -0
  470. package/fixtures/pcm/quietly-alone-clean.pcm +0 -0
  471. package/fixtures/pcm/rainstorms-noisy.pcm +0 -0
  472. package/fixtures/pcm/stella-bulgaria-bulgarian20.pcm +0 -0
  473. package/fixtures/pcm/stella-ghana-english507.pcm +0 -0
  474. package/fixtures/pcm/stella-india-english37.pcm +0 -0
  475. package/fixtures/pcm/stella-jamaica-jamaican-creole-english1.pcm +0 -0
  476. package/fixtures/pcm/stella-liberia-liberian-pidgin-english2.pcm +0 -0
  477. package/fixtures/pcm/stella-pakistan-english519.pcm +0 -0
  478. package/fixtures/pcm/stella-sierra-leone-krio5.pcm +0 -0
  479. package/fixtures/pcm/stella-singapore-english655.pcm +0 -0
  480. package/fixtures/pcm/traveled-back-route-clean.pcm +0 -0
@@ -0,0 +1,10 @@
1
+ (()=>{var{defineProperty:H,getOwnPropertyNames:oc,getOwnPropertyDescriptor:lc}=Object,Ac=Object.prototype.hasOwnProperty;function Cc(c){return this[c]}var ic=(c)=>{var n=(Y??=new WeakMap).get(c),o;if(n)return n;if(n=H({},"__esModule",{value:!0}),c&&typeof c==="object"||typeof c==="function"){for(var g of oc(c))if(!Ac.call(n,g))H(n,g,{get:Cc.bind(c,g),enumerable:!(o=lc(c,g))||o.enumerable})}return Y.set(c,n),n},Y;var Tc=(c)=>c;function yc(c,n){this[c]=Tc.bind(null,n)}var Vc=(c,n)=>{for(var o in n)H(c,o,{get:n[o],enumerable:!0,configurable:!0,set:yc.bind(n,o)})};var Bc={};Vc(Bc,{mount:()=>p,default:()=>Kc,VOICE_EMBED_VERSION:()=>cc});var Ic=(c)=>{if(typeof c!=="string")return c;return document.querySelector(c)},Rc=(c,n,o,g)=>{let l=n??c.getAttribute("hx-get")??"";if(!l)return"";let i=new URL(l,window.location.origin);if(g)i.searchParams.set(o,g);else i.searchParams.delete(o);return`${i.pathname}${i.search}${i.hash}`},Q=(c,n)=>{if(typeof window>"u"||typeof document>"u")return()=>{};let o=Ic(n.element);if(!o)return()=>{};let g=n.eventName??"voice-refresh",l=n.sessionQueryParam??"sessionId",i=()=>{let V=window,I=Rc(o,n.route,l,c.sessionId);if(I)o.setAttribute("hx-get",I);V.htmx?.process?.(o),V.htmx?.trigger?.(o,g)},C=c.subscribe(i);return i(),()=>{C()}};var hc=(c)=>Math.max(-1,Math.min(1,c)),dc=(c)=>{let n=new Int16Array(c.length);for(let o=0;o<c.length;o+=1){let g=hc(c[o]??0);n[o]=g<0?g*32768:g*32767}return new Uint8Array(n.buffer)},Sc=(c)=>{let n=c instanceof Uint8Array?c:new Uint8Array(c);if(n.byteLength<2)return 0;let o=new Int16Array(n.buffer,n.byteOffset,Math.floor(n.byteLength/2));if(o.length===0)return 0;let g=0;for(let l of o){let i=l/32768;g+=i*i}return Math.min(1,Math.max(0,Math.sqrt(g/o.length)*5.5))},_c=(c,n,o)=>{if(n===o)return c;let g=n/o,l=Math.round(c.length/g),i=new Float32Array(l),C=0,V=0;while(C<i.length){let I=Math.round((C+1)*g),d=0,y=0;for(let h=V;h<I&&h<c.length;h+=1)d+=c[h]??0,y+=1;i[C]=y>0?d/y:0,C+=1,V=I}return i},J=(c)=>{let n=null,o=null,g=null,l=null;return{start:async()=>{if(typeof navigator>"u"||!navigator.mediaDevices?.getUserMedia)throw Error("Browser microphone capture requires navigator.mediaDevices.getUserMedia.");let V=(typeof window<"u"?window.AudioContext??window.webkitAudioContext:void 0)??AudioContext;if(!V)throw Error("Browser microphone capture requires AudioContext support.");l=await navigator.mediaDevices.getUserMedia({audio:{channelCount:c.channelCount??1}}),n=new V,o=n.createMediaStreamSource(l),g=n.createScriptProcessor(4096,1,1),g.onaudioprocess=(I)=>{let d=I.inputBuffer.getChannelData(0),y=_c(d,n?.sampleRate??48000,c.sampleRateHz??16000),h=dc(y);c.onLevel?.(Sc(h)),c.onAudio(h)},o.connect(g),g.connect(n.destination)},stop:()=>{g?.disconnect(),o?.disconnect(),l?.getTracks().forEach((V)=>V.stop()),n?.close(),c.onLevel?.(0),n=null,l=null,g=null,o=null}}};var G=(c)=>{if(typeof c==="string"&&c.trim())return c;if(c instanceof Error&&c.message.trim())return c.message;if(c&&typeof c==="object"){let n=c;for(let o of["message","reason","description"]){let g=n[o];if(typeof g==="string"&&g.trim())return g}if("error"in n)return G(n.error);if("cause"in n)return G(n.cause);try{return JSON.stringify(c)}catch{}}return"Unexpected error"},q=(c)=>{switch(c.type){case"audio":return{chunk:Uint8Array.from(atob(c.chunkBase64),(n)=>n.charCodeAt(0)),format:c.format,receivedAt:c.receivedAt,turnId:c.turnId,type:"audio"};case"assistant":return{text:c.text,type:"assistant"};case"complete":return{sessionId:c.sessionId,type:"complete"};case"connection":return{reconnect:c.reconnect,type:"connection"};case"call_lifecycle":return{event:c.event,sessionId:c.sessionId,type:"call_lifecycle"};case"error":return{message:G(c.message),type:"error"};case"final":return{transcript:c.transcript,type:"final"};case"partial":return{transcript:c.transcript,type:"partial"};case"replay":return{assistantTexts:c.assistantTexts,call:c.call,partial:c.partial,scenarioId:c.scenarioId,sessionId:c.sessionId,sessionMetadata:c.sessionMetadata,status:c.status,turns:c.turns,type:"replay"};case"session":return{sessionId:c.sessionId,sessionMetadata:c.sessionMetadata,scenarioId:c.scenarioId,status:c.status,type:"session"};case"turn":return{turn:c.turn,type:"turn"};default:return null}};var tc=Math.PI*2;var D=(c,n,o,g)=>{c.push({code:o,message:g,severity:n})};var wc=(c)=>c.length===0?void 0:c.reduce((n,o)=>n+o,0)/c.length,$=(c)=>c.length===0?void 0:Math.max(...c);var _=(c,n)=>{let o=c[n];return typeof o==="number"&&Number.isFinite(o)?o:void 0},N=(c,n)=>{let o=c[n];return typeof o==="boolean"?o:void 0},w=(c,n)=>{let o=c[n];return typeof o==="string"?o:void 0},X=(c)=>String(c.id??w(c,"ssrc")??_(c,"ssrc")??w(c,"trackIdentifier")??w(c,"mid")??"unknown"),Z=(c)=>c===void 0?void 0:c*1000;var Lc=(c)=>{let n={};for(let[o,g]of Object.entries(c))if(g===null||typeof g==="boolean"||typeof g==="number"||typeof g==="string")n[o]=g;return n};var z=(c={})=>{let n=c.stats??[],o=[],g=n.filter((A)=>A.type==="inbound-rtp"&&w(A,"kind")!=="video"),l=n.filter((A)=>A.type==="outbound-rtp"&&w(A,"kind")!=="video"),i=n.filter((A)=>A.type==="candidate-pair"),C=n.filter((A)=>(A.type==="track"||A.type==="media-source")&&w(A,"kind")==="audio"),V=i.filter((A)=>N(A,"selected")===!0||N(A,"nominated")===!0||w(A,"state")==="succeeded").length,I=C.filter((A)=>w(A,"readyState")!=="ended"&&w(A,"trackState")!=="ended"&&N(A,"ended")!==!0).length,d=C.filter((A)=>w(A,"readyState")==="ended"||w(A,"trackState")==="ended"||N(A,"ended")===!0).length,y=g.reduce((A,S)=>A+(_(S,"packetsReceived")??0),0),h=l.reduce((A,S)=>A+(_(S,"packetsSent")??0),0),T=[...g,...l].reduce((A,S)=>A+Math.max(0,_(S,"packetsLost")??0),0),L=y+T,R=L===0?0:T/L,E=g.reduce((A,S)=>A+(_(S,"bytesReceived")??0),0),b=l.reduce((A,S)=>A+(_(S,"bytesSent")??0),0),M=$(i.map((A)=>Z(_(A,"currentRoundTripTime")??_(A,"roundTripTime"))).filter((A)=>A!==void 0)),O=$([...g,...l].map((A)=>Z(_(A,"jitter"))).filter((A)=>A!==void 0)),W=$(g.map((A)=>{let S=_(A,"jitterBufferDelay"),U=_(A,"jitterBufferEmittedCount");return S!==void 0&&U!==void 0&&U>0?S/U*1000:void 0}).filter((A)=>A!==void 0)),P=C.map((A)=>_(A,"audioLevel")).filter((A)=>A!==void 0);if(c.requireConnectedCandidatePair&&i.length>0&&V===0)D(o,"error","media.webrtc_candidate_pair_missing","No active WebRTC candidate pair was observed.");if(c.requireLiveAudioTrack&&I===0)D(o,"error","media.webrtc_audio_track_missing","No live WebRTC audio track was observed.");if(c.maxPacketLossRatio!==void 0&&R>c.maxPacketLossRatio)D(o,"warning","media.webrtc_packet_loss",`Observed WebRTC packet loss ratio ${String(R)} above ${String(c.maxPacketLossRatio)}.`);if(c.maxRoundTripTimeMs!==void 0&&M!==void 0&&M>c.maxRoundTripTimeMs)D(o,"warning","media.webrtc_round_trip_time",`Observed WebRTC RTT ${String(M)}ms above ${String(c.maxRoundTripTimeMs)}ms.`);if(c.maxJitterMs!==void 0&&O!==void 0&&O>c.maxJitterMs)D(o,"warning","media.webrtc_jitter",`Observed WebRTC jitter ${String(O)}ms above ${String(c.maxJitterMs)}ms.`);return{activeCandidatePairs:V,audioLevelAverage:wc(P),bytesReceived:E,bytesSent:b,checkedAt:Date.now(),endedAudioTracks:d,inboundPackets:y,issues:o,jitterBufferDelayMs:W,jitterMs:O,liveAudioTracks:I,outboundPackets:h,packetLossRatio:R,packetsLost:T,roundTripTimeMs:M,status:o.some((A)=>A.severity==="error")?"fail":o.length>0?"warn":"pass",totalStats:n.length}},B=async(c)=>{return[...(await c.peerConnection.getStats(c.selector??null)).values()].map(Lc)};var K=(c={})=>{let n=c.stats??[],o=c.previousStats??[],g=[],l=new Map(o.map((T)=>[X(T),T])),C=n.filter((T)=>(T.type==="inbound-rtp"||T.type==="outbound-rtp")&&w(T,"kind")!=="video"&&w(T,"mediaType")!=="video").map((T)=>{let L=T.type==="outbound-rtp"?"outbound":"inbound",R=L==="outbound"?"packetsSent":"packetsReceived",E=L==="outbound"?"bytesSent":"bytesReceived",b=l.get(X(T)),M=_(T,R),O=b?_(b,R):void 0,W=_(T,E),P=b?_(b,E):void 0,A=T.timestamp!==void 0&&b?.timestamp!==void 0?T.timestamp-b.timestamp:void 0;return{bytesDelta:W!==void 0&&P!==void 0?W-P:void 0,currentPackets:M,direction:L,id:X(T),packetDelta:M!==void 0&&O!==void 0?M-O:void 0,previousPackets:O,timeDeltaMs:A}}),V=C.filter((T)=>T.direction==="inbound"),I=C.filter((T)=>T.direction==="outbound"),d=$(C.map((T)=>T.timeDeltaMs).filter((T)=>T!==void 0)),y=V.filter((T)=>c.maxInboundPacketStallMs!==void 0&&T.timeDeltaMs!==void 0&&T.timeDeltaMs>=c.maxInboundPacketStallMs&&T.packetDelta!==void 0&&T.packetDelta<=0).length,h=I.filter((T)=>c.maxOutboundPacketStallMs!==void 0&&T.timeDeltaMs!==void 0&&T.timeDeltaMs>=c.maxOutboundPacketStallMs&&T.packetDelta!==void 0&&T.packetDelta<=0).length;if(c.requireInboundAudio&&V.length===0)D(g,"error","media.webrtc_inbound_audio_missing","No inbound WebRTC audio RTP stream was observed.");if(c.requireOutboundAudio&&I.length===0)D(g,"error","media.webrtc_outbound_audio_missing","No outbound WebRTC audio RTP stream was observed.");if(c.maxGapMs!==void 0&&d!==void 0&&d>c.maxGapMs)D(g,"warning","media.webrtc_stream_gap",`Observed WebRTC stream sample gap ${String(d)}ms above ${String(c.maxGapMs)}ms.`);if(y>0)D(g,"error","media.webrtc_inbound_stalled",`${String(y)} inbound WebRTC audio stream(s) stopped receiving packets.`);if(h>0)D(g,"error","media.webrtc_outbound_stalled",`${String(h)} outbound WebRTC audio stream(s) stopped sending packets.`);return{checkedAt:Date.now(),inboundAudioStreams:V.length,issues:g,maxObservedGapMs:d,outboundAudioStreams:I.length,stalledInboundStreams:y,stalledOutboundStreams:h,status:g.some((T)=>T.severity==="error")?"fail":g.length>0?"warn":"pass",streams:C,totalStats:n.length}};var Uc="/api/voice/browser-media",bc=5000,Mc=async(c)=>c.peerConnection??await c.getPeerConnection?.()??null,Oc=async(c,n)=>{let o=n.fetch??globalThis.fetch;if(!o)return;await o(n.path??Uc,{body:JSON.stringify(c),headers:{"Content-Type":"application/json"},keepalive:!0,method:"POST"})},j=(c)=>{let n=null,o=[],g=async()=>{let C=await Mc(c);if(!C)return;let V=await B({peerConnection:C}),I=z({...c,stats:V}),d=c.continuity===!1?void 0:K({...c.continuity,previousStats:o,stats:V}),y={at:Date.now(),continuity:d,report:I,scenarioId:c.getScenarioId?.()??null,sessionId:c.getSessionId?.()??null};return o=V,c.onReport?.(y),await Oc(y,c),y},l=()=>{g().catch((C)=>{c.onError?.(C)})},i=()=>{if(n)clearInterval(n),n=null};return{close:i,reportOnce:g,start:()=>{if(n)return;l(),n=setInterval(l,c.intervalMs??bc)},stop:i}};var x=()=>{},Dc=()=>x,sc={callControl:x,close:x,endTurn:x,getReadyState:()=>3,getScenarioId:()=>"",getSessionId:()=>"",send:x,sendAudio:x,simulateDisconnect:x,start:()=>{},subscribe:Dc},xc=()=>crypto.randomUUID(),Ec=(c,n,o)=>{let{hostname:g,port:l,protocol:i}=window.location,C=i==="https:"?"wss:":"ws:",V=l?`:${l}`:"",I=new URL(`${C}//${g}${V}${c}`);if(I.searchParams.set("sessionId",n),o)I.searchParams.set("scenarioId",o);return I.toString()},Wc=(c)=>{if(!c||typeof c!=="object"||!("type"in c))return!1;switch(c.type){case"audio":case"assistant":case"call_lifecycle":case"complete":case"connection":case"error":case"final":case"partial":case"pong":case"replay":case"session":case"turn":return!0;default:return!1}},Pc=(c)=>{if(typeof c.data!=="string")return null;try{let n=JSON.parse(c.data);return Wc(n)?n:null}catch{return null}},f=(c,n={})=>{if(typeof window>"u")return sc;let o=new Set,g=n.reconnect!==!1,l=n.maxReconnectAttempts??10,i=n.pingInterval??30000,C={isConnected:!1,pendingMessages:[],scenarioId:n.scenarioId??null,pingInterval:null,reconnectAttempts:0,reconnectTimeout:null,sessionId:n.sessionId??xc(),ws:null},V=(A)=>{o.forEach((S)=>S(A))},I=()=>{if(C.pingInterval)clearInterval(C.pingInterval),C.pingInterval=null;if(C.reconnectTimeout)clearTimeout(C.reconnectTimeout),C.reconnectTimeout=null},d=()=>{if(C.ws?.readyState!==1)return;while(C.pendingMessages.length>0){let A=C.pendingMessages.shift();if(A!==void 0)C.ws.send(A)}},y=()=>{let A=Date.now()+500;C.reconnectAttempts+=1,V({reconnect:{attempts:C.reconnectAttempts,lastDisconnectAt:Date.now(),maxAttempts:l,nextAttemptAt:A,status:"reconnecting"},type:"connection"}),C.reconnectTimeout=setTimeout(()=>{if(C.reconnectAttempts>l){V({reconnect:{attempts:C.reconnectAttempts,maxAttempts:l,status:"exhausted"},type:"connection"});return}h()},500)},h=()=>{let A=new WebSocket(Ec(c,C.sessionId,C.scenarioId));A.binaryType="arraybuffer",A.onopen=()=>{let S=C.reconnectAttempts>0;if(C.isConnected=!0,d(),S)V({reconnect:{attempts:C.reconnectAttempts,lastResumedAt:Date.now(),maxAttempts:l,status:"resumed"},type:"connection"}),C.reconnectAttempts=0;o.forEach((U)=>U({scenarioId:C.scenarioId??void 0,sessionId:C.sessionId,status:"active",type:"session"})),C.pingInterval=setInterval(()=>{if(A.readyState===1)A.send(JSON.stringify({type:"ping"}))},i)},A.onmessage=(S)=>{let U=Pc(S);if(!U)return;if(U.type==="session")C.sessionId=U.sessionId,C.scenarioId=U.scenarioId??C.scenarioId;o.forEach((gc)=>gc(U))},A.onclose=(S)=>{if(C.isConnected=!1,I(),g&&S.code!==1000&&C.reconnectAttempts<l)y();else if(g&&S.code!==1000)V({reconnect:{attempts:C.reconnectAttempts,lastDisconnectAt:Date.now(),maxAttempts:l,status:"exhausted"},type:"connection"})},C.ws=A},T=(A)=>{if(C.ws?.readyState===1){C.ws.send(A);return}C.pendingMessages.push(A)},L=(A)=>{T(JSON.stringify(A))},R=(A={})=>{if(A.sessionId)C.sessionId=A.sessionId;if(A.scenarioId)C.scenarioId=A.scenarioId;L({type:"start",sessionId:C.sessionId,scenarioId:C.scenarioId??void 0})},E=(A)=>{T(A)},b=()=>{L({type:"end_turn"})},M=(A)=>{L({...A,type:"call_control"})},O=()=>{if(I(),C.ws)C.ws.close(1000),C.ws=null;C.isConnected=!1,o.clear()},W=()=>{if(C.ws?.readyState===1)C.ws.close(4000,"absolutejs-voice-reconnect-proof")},P=(A)=>{return o.add(A),()=>{o.delete(A)}};return h(),{callControl:M,close:O,endTurn:b,getReadyState:()=>C.ws?.readyState??3,getScenarioId:()=>C.scenarioId??"",getSessionId:()=>C.sessionId,send:L,sendAudio:E,simulateDisconnect:W,start:R,subscribe:P}};var Nc=()=>({attempts:0,maxAttempts:0,status:"idle"}),$c=()=>({assistantAudio:[],assistantTexts:[],call:null,error:null,isConnected:!1,sessionMetadata:null,scenarioId:null,partial:"",reconnect:Nc(),sessionId:null,status:"idle",turns:[]}),e=()=>{let c=$c(),n=new Set,o=()=>{n.forEach((l)=>l())};return{dispatch:(l)=>{switch(l.type){case"audio":c={...c,assistantAudio:[...c.assistantAudio,{chunk:l.chunk,format:l.format,receivedAt:l.receivedAt,turnId:l.turnId}]};break;case"assistant":c={...c,assistantTexts:[...c.assistantTexts,l.text]};break;case"complete":c={...c,sessionId:l.sessionId,status:"completed"};break;case"call_lifecycle":c={...c,call:{...c.call,disposition:l.event.type==="end"?l.event.disposition:c.call?.disposition,endedAt:l.event.type==="end"?l.event.at:c.call?.endedAt,events:[...c.call?.events??[],l.event],lastEventAt:l.event.at,startedAt:c.call?.startedAt??l.event.at},sessionId:l.sessionId};break;case"connected":c={...c,isConnected:!0,reconnect:c.reconnect.status==="reconnecting"?{...c.reconnect,lastResumedAt:Date.now(),nextAttemptAt:void 0,status:"resumed"}:c.reconnect};break;case"connection":c={...c,reconnect:l.reconnect};break;case"disconnected":c={...c,isConnected:!1};break;case"error":c={...c,error:l.message};break;case"final":c={...c,partial:l.transcript.text,turns:c.turns.map((i)=>i)};break;case"partial":c={...c,partial:l.transcript.text};break;case"replay":c={...c,assistantTexts:[...l.assistantTexts],call:l.call??null,error:null,isConnected:l.status==="active",partial:l.partial,reconnect:c.reconnect.status==="reconnecting"?{...c.reconnect,lastResumedAt:Date.now(),nextAttemptAt:void 0,status:"resumed"}:c.reconnect,scenarioId:l.scenarioId??c.scenarioId,sessionId:l.sessionId,sessionMetadata:l.sessionMetadata??c.sessionMetadata,status:l.status,turns:[...l.turns]};break;case"session":c={...c,error:null,scenarioId:l.scenarioId??c.scenarioId,isConnected:l.status==="active",sessionId:l.sessionId,sessionMetadata:l.sessionMetadata??c.sessionMetadata,status:l.status};break;case"turn":c={...c,partial:"",turns:[...c.turns,l.turn]};break}o()},getServerSnapshot:()=>c,getSnapshot:()=>c,subscribe:(l)=>{return n.add(l),()=>{n.delete(l)}}}};var k=(c,n={})=>{let o=f(c,n),g=e(),l=n.browserMedia&&typeof window<"u"?j({...n.browserMedia,getScenarioId:()=>n.browserMedia?n.browserMedia.getScenarioId?.()??o.getScenarioId():o.getScenarioId(),getSessionId:()=>n.browserMedia?n.browserMedia.getSessionId?.()??o.getSessionId():o.getSessionId()}):null,i=new Set,C=(y)=>Promise.resolve().then(()=>{if(!y?.sessionId&&!y?.scenarioId)return;o.start(y),l?.start()}),V=()=>{i.forEach((y)=>y())},I=()=>{if(!n.reconnectReportPath||typeof fetch>"u")return;let y=g.getSnapshot(),h=JSON.stringify({at:Date.now(),reconnect:y.reconnect,scenarioId:y.scenarioId,sessionId:o.getSessionId(),turnIds:y.turns.map((T)=>T.id)});fetch(n.reconnectReportPath,{body:h,headers:{"Content-Type":"application/json"},keepalive:!0,method:"POST"}).catch(()=>{})},d=o.subscribe((y)=>{let h=q(y);if(h){if(g.dispatch(h),y.type==="connection")I();V()}});return{callControl(y){o.callControl(y)},close(){d(),l?.close(),o.close(),g.dispatch({type:"disconnected"}),V()},endTurn(){o.endTurn()},get error(){return g.getSnapshot().error},getServerSnapshot(){return g.getServerSnapshot()},getSnapshot(){return g.getSnapshot()},get isConnected(){return g.getSnapshot().isConnected},get scenarioId(){return g.getSnapshot().scenarioId},get sessionMetadata(){return g.getSnapshot().sessionMetadata},start:C,get partial(){return g.getSnapshot().partial},get reconnect(){return g.getSnapshot().reconnect},get sessionId(){return o.getSessionId()},get status(){return g.getSnapshot().status},get turns(){return g.getSnapshot().turns},get assistantTexts(){return g.getSnapshot().assistantTexts},get assistantAudio(){return g.getSnapshot().assistantAudio},get call(){return g.getSnapshot().call},sendAudio(y){o.sendAudio(y)},simulateDisconnect(){o.simulateDisconnect()},subscribe(y){return i.add(y),()=>{i.delete(y)}}}};var t=(c)=>{if(!c||c.enabled===!1)return;return{enabled:!0,maxGain:c.maxGain??3,noiseGateAttenuation:c.noiseGateAttenuation??0.15,noiseGateThreshold:c.noiseGateThreshold??0.006,targetLevel:c.targetLevel??0.08}};var Hc={balanced:{qualityProfile:"general",silenceMs:1400,speechThreshold:0.012,transcriptStabilityMs:1000},fast:{qualityProfile:"general",silenceMs:700,speechThreshold:0.015,transcriptStabilityMs:450},"long-form":{qualityProfile:"general",silenceMs:2200,speechThreshold:0.01,transcriptStabilityMs:1500}},Gc={general:{},"accent-heavy":{silenceMs:1200,speechThreshold:0.01,transcriptStabilityMs:1200},"noisy-room":{silenceMs:2000,speechThreshold:0.02,transcriptStabilityMs:1600},"short-command":{silenceMs:500,speechThreshold:0.016,transcriptStabilityMs:420}};var F=(c)=>{let n=c?.profile??"fast",o=c?.qualityProfile??"general",g=Hc[n],l=Gc[o];return{profile:n,qualityProfile:o,silenceMs:c?.silenceMs??l.silenceMs??g.silenceMs,speechThreshold:c?.speechThreshold??l.speechThreshold??g.speechThreshold,transcriptStabilityMs:c?.transcriptStabilityMs??l.transcriptStabilityMs??g.transcriptStabilityMs}};var Xc={chat:{audioConditioning:{enabled:!0,maxGain:2.5,noiseGateAttenuation:0,noiseGateThreshold:0.004,targetLevel:0.08},capture:{channelCount:1,sampleRateHz:16000},connection:{maxReconnectAttempts:10,pingInterval:30000,reconnect:!0},sttLifecycle:"continuous",turnDetection:{qualityProfile:"short-command",profile:"balanced"}},default:{capture:{channelCount:1,sampleRateHz:16000},connection:{maxReconnectAttempts:10,pingInterval:30000,reconnect:!0},sttLifecycle:"continuous",turnDetection:{qualityProfile:"general",profile:"fast"}},dictation:{audioConditioning:{enabled:!0,maxGain:2.25,noiseGateAttenuation:0.05,noiseGateThreshold:0.003,targetLevel:0.08},capture:{channelCount:1,sampleRateHz:16000},connection:{maxReconnectAttempts:12,pingInterval:30000,reconnect:!0},sttLifecycle:"continuous",turnDetection:{qualityProfile:"accent-heavy",profile:"long-form"}},"guided-intake":{audioConditioning:{enabled:!0,maxGain:2.5,noiseGateAttenuation:0,noiseGateThreshold:0.004,targetLevel:0.08},capture:{channelCount:1,sampleRateHz:16000},connection:{maxReconnectAttempts:12,pingInterval:30000,reconnect:!0},sttLifecycle:"turn-scoped",turnDetection:{qualityProfile:"accent-heavy",profile:"long-form"}},"noisy-room":{audioConditioning:{enabled:!0,maxGain:3,noiseGateAttenuation:0.12,noiseGateThreshold:0.006,targetLevel:0.085},capture:{channelCount:1,sampleRateHz:16000},connection:{maxReconnectAttempts:14,pingInterval:45000,reconnect:!0},sttLifecycle:"continuous",turnDetection:{qualityProfile:"noisy-room",profile:"long-form",silenceMs:2100,speechThreshold:0.02,transcriptStabilityMs:1650}},"pstn-balanced":{audioConditioning:{enabled:!0,maxGain:2.8,noiseGateAttenuation:0.07,noiseGateThreshold:0.005,targetLevel:0.08},capture:{channelCount:1,sampleRateHz:16000},connection:{maxReconnectAttempts:14,pingInterval:45000,reconnect:!0},sttLifecycle:"continuous",turnDetection:{qualityProfile:"noisy-room",profile:"long-form",silenceMs:660,speechThreshold:0.012,transcriptStabilityMs:300}},"pstn-fast":{audioConditioning:{enabled:!0,maxGain:2.75,noiseGateAttenuation:0.06,noiseGateThreshold:0.005,targetLevel:0.08},capture:{channelCount:1,sampleRateHz:16000},connection:{maxReconnectAttempts:14,pingInterval:45000,reconnect:!0},sttLifecycle:"continuous",turnDetection:{qualityProfile:"noisy-room",profile:"long-form",silenceMs:620,speechThreshold:0.012,transcriptStabilityMs:280}},reliability:{audioConditioning:{enabled:!0,maxGain:2.9,noiseGateAttenuation:0.08,noiseGateThreshold:0.005,targetLevel:0.08},capture:{channelCount:1,sampleRateHz:16000},connection:{maxReconnectAttempts:14,pingInterval:45000,reconnect:!0},sttLifecycle:"continuous",turnDetection:{qualityProfile:"noisy-room",profile:"long-form"}}},r=(c="default")=>{let n=Xc[c];return{audioConditioning:t(n.audioConditioning),capture:{channelCount:n.capture?.channelCount??1,sampleRateHz:n.capture?.sampleRateHz??16000},connection:{...n.connection},name:c,sttLifecycle:n.sttLifecycle??"continuous",turnDetection:F(n.turnDetection)}};var Yc=(c)=>({assistantAudio:[...c.assistantAudio],assistantTexts:[...c.assistantTexts],call:c.call,error:c.error,isConnected:c.isConnected,isRecording:!1,partial:c.partial,reconnect:c.reconnect,recordingError:null,sessionId:c.sessionId,sessionMetadata:c.sessionMetadata,scenarioId:c.scenarioId,status:c.status,turns:[...c.turns]}),a=(c,n={})=>{let o=r(n.preset),g=k(c,{...o.connection,...n.connection}),l=null,i=Yc(g),C=new Set,V=()=>{for(let R of C)R()},I=()=>{if(i={...i,assistantAudio:[...g.assistantAudio],assistantTexts:[...g.assistantTexts],call:g.call,error:g.error,isConnected:g.isConnected,partial:g.partial,reconnect:g.reconnect,sessionId:g.sessionId,sessionMetadata:g.sessionMetadata,scenarioId:g.scenarioId,status:g.status,turns:[...g.turns]},n.autoStopOnComplete!==!1&&i.status==="completed"&&i.isRecording)l?.stop(),l=null,i={...i,isRecording:!1};V()},d=g.subscribe(I);I();let y=()=>{if(l)return l;return l=J({channelCount:n.capture?.channelCount??o.capture.channelCount,onLevel:n.capture?.onLevel,onAudio:(R)=>{if(n.capture?.onAudio){n.capture.onAudio(R,g.sendAudio);return}g.sendAudio(R)},sampleRateHz:n.capture?.sampleRateHz??o.capture.sampleRateHz}),l},h=()=>{l?.stop(),l=null,i={...i,isRecording:!1},V()},T=async()=>{if(i.isRecording)return;try{i={...i,recordingError:null},V(),await y().start(),i={...i,isRecording:!0},V()}catch(R){throw l=null,i={...i,isRecording:!1,recordingError:R instanceof Error?R.message:String(R)},V(),R}};return{bindHTMX(R){return Q(g,R)},callControl:(R)=>g.callControl(R),close:()=>{d(),h(),g.close()},endTurn:()=>g.endTurn(),get error(){return i.error},getServerSnapshot:()=>i,getSnapshot:()=>i,get isConnected(){return i.isConnected},get isRecording(){return i.isRecording},get partial(){return i.partial},get recordingError(){return i.recordingError},get reconnect(){return i.reconnect},sendAudio:(R)=>g.sendAudio(R),simulateDisconnect:()=>g.simulateDisconnect(),get sessionId(){return i.sessionId},get sessionMetadata(){return i.sessionMetadata},get scenarioId(){return i.scenarioId},startRecording:T,get status(){return i.status},stopRecording:h,subscribe:(R)=>{return C.add(R),()=>{C.delete(R)}},toggleRecording:async()=>{if(i.isRecording){h();return}await T()},get turns(){return i.turns},get assistantTexts(){return i.assistantTexts},get assistantAudio(){return i.assistantAudio},get call(){return i.call}}};var s=(c)=>String(c).replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;").replaceAll("'","&#39;");var v=(c)=>{if(!c.isConnected)return"idle";if(c.isPlaying)return"speaking";if(c.isRecording&&c.hasActivePartial)return"listening";if(c.isRecording)return"listening";if(c.lastTranscriptAt&&!c.lastAssistantAt)return"thinking";if(c.lastTranscriptAt&&c.lastAssistantAt&&c.lastTranscriptAt>c.lastAssistantAt)return"thinking";return"idle"};var Qc={accent:"#3b82f6",background:"#0f172a",errorAccent:"#ef4444",fontFamily:'ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif',foreground:"#f8fafc",radius:16},Jc={callEnded:"Call ended",connecting:"Connecting…",endCall:"End call",idle:"Idle",listening:"Listening",mute:"Mute",speaking:"Speaking",startCall:"Start call",thinking:"Thinking",unmute:"Unmute"},qc=(c,n)=>{switch(c){case"listening":return n.listening;case"speaking":return n.speaking;case"thinking":return n.thinking;case"idle":return n.idle}},u=(c)=>{let n={...Qc,...c.theme},o={...Jc,...c.labels},g=c.state.assistantAudio.at(-1)?.receivedAt,l=c.state.turns.at(-1)?.committedAt,i=v({hasActivePartial:c.state.partial.length>0,isConnected:c.state.isConnected,isPlaying:!1,isRecording:c.state.isRecording,lastAssistantAt:g,lastTranscriptAt:l}),C=!c.state.isConnected&&c.state.status!=="idle"&&!c.state.error,V=c.state.error?"Error":C?o.connecting:c.state.status==="completed"?o.callEnded:qc(i,o);return{agentState:i,classes:{container:`absolute-voice-widget absolute-voice-widget--${i}`,dot:`absolute-voice-widget__dot${c.state.error?" absolute-voice-widget__dot--error":""}`},controls:{canEnd:c.state.isConnected,canMute:c.state.isRecording,canStart:!c.state.isRecording&&c.state.status!=="completed"},errorMessage:c.state.error??void 0,labels:o,partial:c.state.partial||void 0,statusLabel:V,theme:n,title:c.title??"Voice"}},Zc=(c)=>typeof c==="number"?`${c}px`:c,m=(c)=>{let n=c.theme,o=`background:${n.background};border-radius:${Zc(n.radius)};color:${n.foreground};font-family:${n.fontFamily};min-width:240px;padding:20px 22px;`,g=`background:${c.errorMessage?n.errorAccent:c.agentState==="idle"?"rgba(148,163,184,0.6)":n.accent};border-radius:50%;height:10px;width:10px;`,l=[];if(c.controls.canStart)l.push(`<button type="button" data-action="start" style="background:${n.accent};border:none;border-radius:12px;color:${n.foreground};cursor:pointer;font-size:14px;font-weight:500;padding:10px 14px;">${s(c.labels.startCall)}</button>`);if(c.controls.canMute)l.push(`<button type="button" data-action="mute" style="background:transparent;border:1px solid rgba(255,255,255,0.18);border-radius:12px;color:${n.foreground};cursor:pointer;font-size:14px;font-weight:500;padding:10px 14px;">${s(c.labels.mute)}</button>`);if(c.controls.canEnd)l.push(`<button type="button" data-action="end" style="background:${n.errorAccent};border:none;border-radius:12px;color:${n.foreground};cursor:pointer;font-size:14px;font-weight:500;padding:10px 14px;">${s(c.labels.endCall)}</button>`);return`<div role="region" aria-live="polite" data-agent-state="${c.agentState}" class="${s(c.classes.container)}" style="${o}">
2
+ <div style="align-items:center;display:flex;gap:10px;margin-bottom:12px;">
3
+ <span aria-hidden="true" class="${s(c.classes.dot)}" style="${g}"></span>
4
+ <strong style="font-size:15px;">${s(c.title)}</strong>
5
+ <span style="font-size:13px;margin-left:auto;opacity:0.7;">${s(c.statusLabel)}</span>
6
+ </div>
7
+ ${c.partial?`<p style="font-size:13px;margin:8px 0 12px;opacity:0.85;word-break:break-word;">“${s(c.partial)}”</p>`:""}
8
+ <div style="display:flex;gap:10px;">${l.join("")}</div>
9
+ ${c.errorMessage?`<p style="color:${n.errorAccent};font-size:12px;margin-top:12px;">${s(c.errorMessage)}</p>`:""}
10
+ </div>`};var zc=(c)=>{if(typeof c!=="string")return c;let n=document.querySelector(c);if(!n)throw Error(`AbsoluteVoice.mount: no element matches "${c}"`);return n},p=(c,n={})=>{let o=zc(c),g=a(n.path??"/voice",n.controllerOptions),l=null,i=null,C=()=>{let I=u({...n.labels!==void 0?{labels:n.labels}:{},state:{assistantAudio:g.assistantAudio,error:g.error,isConnected:g.isConnected,isRecording:g.isRecording,partial:g.partial,status:g.status,turns:g.turns},...n.theme!==void 0?{theme:n.theme}:{},...n.title!==void 0?{title:n.title}:{}});o.innerHTML=m(I);for(let d of o.querySelectorAll("button[data-action]")){let y=d.dataset.action;d.addEventListener("click",()=>{if(y==="start")g.startRecording();else if(y==="mute")g.stopRecording();else if(y==="end")g.close()})}if(g.error&&g.error!==l)l=g.error,n.onError?.(g.error);if(g.status!==i)i=g.status,n.onStatusChange?.(g.status)},V=g.subscribe(C);if(C(),n.autoStart)g.startRecording();return{controller:g,async end(){await g.close()},mute(){g.stopRecording()},async start(){await g.startRecording()},unmount(){V(),g.close(),o.innerHTML=""}}},cc="0.0.22-beta.516",nc={mount:p,version:cc};if(typeof globalThis<"u")globalThis.AbsoluteVoice=nc;var Kc=nc;})();
@@ -1,10 +1,11 @@
1
- import { Elysia } from 'elysia';
2
- import { type VoiceQualityReport, type VoiceQualityThresholds } from './qualityRoutes';
3
- import { summarizeVoiceTrace, type StoredVoiceTraceEvent, type VoiceTraceEventStore } from './trace';
4
- export type VoiceEvalStatus = 'pass' | 'fail';
1
+ import { Elysia } from "elysia";
2
+ import { type VoiceQualityReport, type VoiceQualityThresholds } from "./qualityRoutes";
3
+ import { summarizeVoiceTrace, type StoredVoiceTraceEvent, type VoiceTraceEventStore } from "./trace";
4
+ export type VoiceEvalStatus = "pass" | "fail";
5
5
  export type VoiceEvalSessionReport = {
6
6
  endedAt?: number;
7
7
  eventCount: number;
8
+ operationsRecordHref?: string;
8
9
  quality: VoiceQualityReport;
9
10
  scenarioId?: string;
10
11
  sessionId: string;
@@ -81,6 +82,7 @@ export type VoiceScenarioEvalDefinition = {
81
82
  export type VoiceScenarioEvalSessionResult = {
82
83
  eventCount: number;
83
84
  issues: string[];
85
+ operationsRecordHref?: string;
84
86
  sessionId: string;
85
87
  status: VoiceEvalStatus;
86
88
  };
@@ -142,6 +144,7 @@ export type VoiceEvalRoutesOptions = {
142
144
  links?: VoiceEvalLink[];
143
145
  limit?: number;
144
146
  name?: string;
147
+ operationsRecordHref?: false | string | ((sessionId: string) => string);
145
148
  path?: string;
146
149
  scenarios?: VoiceScenarioEvalDefinition[];
147
150
  store?: VoiceTraceEventStore;
@@ -151,17 +154,20 @@ export type VoiceEvalRoutesOptions = {
151
154
  export declare const runVoiceSessionEvals: (options?: {
152
155
  events?: StoredVoiceTraceEvent[];
153
156
  limit?: number;
157
+ operationsRecordHref?: false | string | ((sessionId: string) => string);
154
158
  store?: VoiceTraceEventStore;
155
159
  thresholds?: VoiceQualityThresholds;
156
160
  }) => Promise<VoiceEvalReport>;
157
161
  export declare const runVoiceScenarioEvals: (options?: {
158
162
  events?: StoredVoiceTraceEvent[];
163
+ operationsRecordHref?: false | string | ((sessionId: string) => string);
159
164
  scenarios?: VoiceScenarioEvalDefinition[];
160
165
  store?: VoiceTraceEventStore;
161
166
  }) => Promise<VoiceScenarioEvalReport>;
162
167
  export declare const runVoiceScenarioFixtureEvals: (options?: {
163
168
  fixtures?: VoiceScenarioFixture[];
164
169
  fixtureStore?: VoiceScenarioFixtureStore;
170
+ operationsRecordHref?: false | string | ((sessionId: string) => string);
165
171
  scenarios?: VoiceScenarioEvalDefinition[];
166
172
  }) => Promise<VoiceScenarioFixtureEvalReport>;
167
173
  export declare const compareVoiceEvalBaseline: (currentReport: VoiceEvalReport, baselineReport: VoiceEvalReport, options?: VoiceEvalBaselineComparisonOptions) => VoiceEvalBaselineComparison;
@@ -1,15 +1,24 @@
1
- import { type VoiceAssistantMemoryRecord, type VoiceAssistantMemoryStore } from './assistantMemory';
2
- import { type StoredVoiceTraceEvent, type VoiceTraceSinkDeliveryRecord, type VoiceTraceSinkDeliveryStore, type VoiceTraceEventStore } from './trace';
3
- import type { StoredVoiceIntegrationEvent, StoredVoiceExternalObjectMap, StoredVoiceOpsTask, VoiceExternalObjectMap, VoiceExternalObjectMapStore, VoiceIntegrationEvent, VoiceIntegrationEventStore, VoiceOpsTask, VoiceOpsTaskStore } from './ops';
4
- import type { StoredVoiceCallReviewArtifact, VoiceCallReviewArtifact, VoiceCallReviewStore } from './testing/review';
5
- import type { VoiceSessionRecord, VoiceSessionStore } from './types';
1
+ import { type StoredVoiceAuditEvent, type VoiceAuditEventStore } from "./audit";
2
+ import type { VoiceAuditSinkDeliveryRecord, VoiceAuditSinkDeliveryStore } from "./auditSinks";
3
+ import type { VoiceCampaignStore } from "./campaign";
4
+ import { type VoiceAssistantMemoryRecord, type VoiceAssistantMemoryStore } from "./assistantMemory";
5
+ import type { StoredVoiceIncidentBundleArtifact, VoiceIncidentBundleStore } from "./incidentBundle";
6
+ import { type StoredVoiceTraceEvent, type VoiceTraceSinkDeliveryRecord, type VoiceTraceSinkDeliveryStore, type VoiceTraceEventStore } from "./trace";
7
+ import type { StoredVoiceIntegrationEvent, StoredVoiceExternalObjectMap, StoredVoiceOpsTask, VoiceExternalObjectMap, VoiceExternalObjectMapStore, VoiceIntegrationEvent, VoiceIntegrationEventStore, VoiceOpsTask, VoiceOpsTaskStore } from "./ops";
8
+ import type { StoredVoiceCallReviewArtifact, VoiceCallReviewArtifact, VoiceCallReviewStore } from "./testing/review";
9
+ import type { VoiceSessionRecord, VoiceSessionStore } from "./types";
10
+ import type { VoiceRecordingStore } from "./recordingStore";
6
11
  export type VoiceFileStoreOptions = {
7
12
  directory: string;
8
13
  pretty?: boolean;
9
14
  };
10
- export type VoiceFileRuntimeStorage<TSession extends VoiceSessionRecord = VoiceSessionRecord, TReview extends StoredVoiceCallReviewArtifact = StoredVoiceCallReviewArtifact, TTask extends StoredVoiceOpsTask = StoredVoiceOpsTask, TEvent extends StoredVoiceIntegrationEvent = StoredVoiceIntegrationEvent, TMapping extends StoredVoiceExternalObjectMap = StoredVoiceExternalObjectMap, TTrace extends StoredVoiceTraceEvent = StoredVoiceTraceEvent, TTraceDelivery extends VoiceTraceSinkDeliveryRecord = VoiceTraceSinkDeliveryRecord, TMemory extends VoiceAssistantMemoryRecord = VoiceAssistantMemoryRecord> = {
15
+ export type VoiceFileRuntimeStorage<TSession extends VoiceSessionRecord = VoiceSessionRecord, TReview extends StoredVoiceCallReviewArtifact = StoredVoiceCallReviewArtifact, TTask extends StoredVoiceOpsTask = StoredVoiceOpsTask, TEvent extends StoredVoiceIntegrationEvent = StoredVoiceIntegrationEvent, TMapping extends StoredVoiceExternalObjectMap = StoredVoiceExternalObjectMap, TTrace extends StoredVoiceTraceEvent = StoredVoiceTraceEvent, TTraceDelivery extends VoiceTraceSinkDeliveryRecord = VoiceTraceSinkDeliveryRecord, TAudit extends StoredVoiceAuditEvent = StoredVoiceAuditEvent, TAuditDelivery extends VoiceAuditSinkDeliveryRecord = VoiceAuditSinkDeliveryRecord, TIncident extends StoredVoiceIncidentBundleArtifact = StoredVoiceIncidentBundleArtifact, TMemory extends VoiceAssistantMemoryRecord = VoiceAssistantMemoryRecord> = {
16
+ audit: VoiceAuditEventStore<TAudit>;
17
+ auditDeliveries: VoiceAuditSinkDeliveryStore<TAuditDelivery>;
18
+ campaigns: VoiceCampaignStore;
11
19
  events: VoiceIntegrationEventStore<TEvent>;
12
20
  externalObjects: VoiceExternalObjectMapStore<TMapping>;
21
+ incidentBundles: VoiceIncidentBundleStore<TIncident>;
13
22
  memories: VoiceAssistantMemoryStore<TMemory>;
14
23
  reviews: VoiceCallReviewStore<TReview>;
15
24
  session: VoiceSessionStore<TSession>;
@@ -20,12 +29,16 @@ export type VoiceFileRuntimeStorage<TSession extends VoiceSessionRecord = VoiceS
20
29
  export declare const createVoiceFileSessionStore: <TSession extends VoiceSessionRecord = VoiceSessionRecord>(options: VoiceFileStoreOptions) => VoiceSessionStore<TSession>;
21
30
  export declare const createVoiceFileReviewStore: <TArtifact extends StoredVoiceCallReviewArtifact = StoredVoiceCallReviewArtifact>(options: VoiceFileStoreOptions) => VoiceCallReviewStore<TArtifact>;
22
31
  export declare const createVoiceFileTaskStore: <TTask extends StoredVoiceOpsTask = StoredVoiceOpsTask>(options: VoiceFileStoreOptions) => VoiceOpsTaskStore<TTask>;
32
+ export declare const createVoiceFileCampaignStore: (options: VoiceFileStoreOptions) => VoiceCampaignStore;
23
33
  export declare const createVoiceFileIntegrationEventStore: <TEvent extends StoredVoiceIntegrationEvent = StoredVoiceIntegrationEvent>(options: VoiceFileStoreOptions) => VoiceIntegrationEventStore<TEvent>;
24
34
  export declare const createVoiceFileExternalObjectMapStore: <TMapping extends StoredVoiceExternalObjectMap = StoredVoiceExternalObjectMap>(options: VoiceFileStoreOptions) => VoiceExternalObjectMapStore<TMapping>;
25
35
  export declare const createVoiceFileTraceEventStore: <TEvent extends StoredVoiceTraceEvent = StoredVoiceTraceEvent>(options: VoiceFileStoreOptions) => VoiceTraceEventStore<TEvent>;
26
36
  export declare const createVoiceFileTraceSinkDeliveryStore: <TDelivery extends VoiceTraceSinkDeliveryRecord = VoiceTraceSinkDeliveryRecord>(options: VoiceFileStoreOptions) => VoiceTraceSinkDeliveryStore<TDelivery>;
37
+ export declare const createVoiceFileAuditEventStore: <TEvent extends StoredVoiceAuditEvent = StoredVoiceAuditEvent>(options: VoiceFileStoreOptions) => VoiceAuditEventStore<TEvent>;
38
+ export declare const createVoiceFileAuditSinkDeliveryStore: <TDelivery extends VoiceAuditSinkDeliveryRecord = VoiceAuditSinkDeliveryRecord>(options: VoiceFileStoreOptions) => VoiceAuditSinkDeliveryStore<TDelivery>;
27
39
  export declare const createVoiceFileAssistantMemoryStore: <TRecord extends VoiceAssistantMemoryRecord = VoiceAssistantMemoryRecord>(options: VoiceFileStoreOptions) => VoiceAssistantMemoryStore<TRecord>;
28
- export declare const createVoiceFileRuntimeStorage: <TSession extends VoiceSessionRecord = VoiceSessionRecord, TReview extends StoredVoiceCallReviewArtifact = StoredVoiceCallReviewArtifact, TTask extends StoredVoiceOpsTask = StoredVoiceOpsTask, TEvent extends StoredVoiceIntegrationEvent = StoredVoiceIntegrationEvent, TMapping extends StoredVoiceExternalObjectMap = StoredVoiceExternalObjectMap, TTrace extends StoredVoiceTraceEvent = StoredVoiceTraceEvent, TTraceDelivery extends VoiceTraceSinkDeliveryRecord = VoiceTraceSinkDeliveryRecord, TMemory extends VoiceAssistantMemoryRecord = VoiceAssistantMemoryRecord>(options: VoiceFileStoreOptions) => VoiceFileRuntimeStorage<TSession, TReview, TTask, TEvent, TMapping, TTrace, TTraceDelivery, TMemory>;
40
+ export declare const createVoiceFileIncidentBundleStore: <TArtifact extends StoredVoiceIncidentBundleArtifact = StoredVoiceIncidentBundleArtifact>(options: VoiceFileStoreOptions) => VoiceIncidentBundleStore<TArtifact>;
41
+ export declare const createVoiceFileRuntimeStorage: <TSession extends VoiceSessionRecord = VoiceSessionRecord, TReview extends StoredVoiceCallReviewArtifact = StoredVoiceCallReviewArtifact, TTask extends StoredVoiceOpsTask = StoredVoiceOpsTask, TEvent extends StoredVoiceIntegrationEvent = StoredVoiceIntegrationEvent, TMapping extends StoredVoiceExternalObjectMap = StoredVoiceExternalObjectMap, TTrace extends StoredVoiceTraceEvent = StoredVoiceTraceEvent, TTraceDelivery extends VoiceTraceSinkDeliveryRecord = VoiceTraceSinkDeliveryRecord, TAudit extends StoredVoiceAuditEvent = StoredVoiceAuditEvent, TAuditDelivery extends VoiceAuditSinkDeliveryRecord = VoiceAuditSinkDeliveryRecord, TIncident extends StoredVoiceIncidentBundleArtifact = StoredVoiceIncidentBundleArtifact, TMemory extends VoiceAssistantMemoryRecord = VoiceAssistantMemoryRecord>(options: VoiceFileStoreOptions) => VoiceFileRuntimeStorage<TSession, TReview, TTask, TEvent, TMapping, TTrace, TTraceDelivery, TAudit, TAuditDelivery, TIncident, TMemory>;
29
42
  export declare const createStoredVoiceCallReviewArtifact: <TArtifact extends VoiceCallReviewArtifact = VoiceCallReviewArtifact>(id: string, artifact: TArtifact) => TArtifact & {
30
43
  id: string;
31
44
  };
@@ -38,3 +51,4 @@ export declare const createStoredVoiceIntegrationEvent: <TEvent extends Omit<Voi
38
51
  export declare const createStoredVoiceExternalObjectMap: <TMapping extends Omit<VoiceExternalObjectMap, "id" | "createdAt" | "updatedAt"> = Omit<VoiceExternalObjectMap, "id" | "createdAt" | "updatedAt">>(mapping: TMapping & {
39
52
  at?: number;
40
53
  }) => VoiceExternalObjectMap;
54
+ export declare const createVoiceFileRecordingStore: (options: VoiceFileStoreOptions) => VoiceRecordingStore;
@@ -0,0 +1,128 @@
1
+ import { Elysia } from "elysia";
2
+ import type { VoiceAgentTool } from "./agent";
3
+ import type { VoiceTraceEventStore } from "./trace";
4
+ import type { VoiceOnTurnObjectHandler, VoiceRouteResult, VoiceSessionRecord } from "./types";
5
+ import type { VoiceAssistantGuardrails } from "./assistant";
6
+ export type VoiceGuardrailStage = "assistant-output" | "handoff" | "model-input" | "tool-input" | "tool-output" | "transcript";
7
+ export type VoiceGuardrailSeverity = "block" | "warn";
8
+ export type VoiceGuardrailStatus = "blocked" | "pass" | "warn";
9
+ export type VoiceGuardrailRule = {
10
+ action?: VoiceGuardrailSeverity;
11
+ description?: string;
12
+ id: string;
13
+ label?: string;
14
+ match: RegExp | string | ((input: VoiceGuardrailEvaluationInput) => boolean | Promise<boolean>);
15
+ redactWith?: string;
16
+ stages?: VoiceGuardrailStage[];
17
+ };
18
+ export type VoiceGuardrailEvaluationInput = {
19
+ content?: unknown;
20
+ metadata?: Record<string, unknown>;
21
+ sessionId?: string;
22
+ stage: VoiceGuardrailStage;
23
+ turnId?: string;
24
+ };
25
+ export type VoiceGuardrailFinding = {
26
+ action: VoiceGuardrailSeverity;
27
+ description?: string;
28
+ label: string;
29
+ ruleId: string;
30
+ stage: VoiceGuardrailStage;
31
+ };
32
+ export type VoiceGuardrailDecision = {
33
+ allowed: boolean;
34
+ checkedAt: number;
35
+ content?: unknown;
36
+ findings: VoiceGuardrailFinding[];
37
+ redactedContent?: unknown;
38
+ sessionId?: string;
39
+ stage: VoiceGuardrailStage;
40
+ status: VoiceGuardrailStatus;
41
+ turnId?: string;
42
+ };
43
+ export type VoiceGuardrailPolicy = {
44
+ defaultAction?: VoiceGuardrailSeverity;
45
+ id: string;
46
+ label?: string;
47
+ rules: VoiceGuardrailRule[];
48
+ };
49
+ export type VoiceGuardrailReport = {
50
+ checkedAt: number;
51
+ decisions: VoiceGuardrailDecision[];
52
+ failed: number;
53
+ policies: Array<{
54
+ id: string;
55
+ label?: string;
56
+ rules: number;
57
+ }>;
58
+ status: "fail" | "pass" | "warn";
59
+ summary: {
60
+ blocked: number;
61
+ passed: number;
62
+ warned: number;
63
+ };
64
+ total: number;
65
+ };
66
+ export type VoiceGuardrailRoutesOptions = {
67
+ headers?: HeadersInit;
68
+ name?: string;
69
+ path?: string;
70
+ policies?: VoiceGuardrailPolicy[];
71
+ source?: ((input: VoiceGuardrailEvaluationInput) => Promise<VoiceGuardrailDecision | VoiceGuardrailReport> | VoiceGuardrailDecision | VoiceGuardrailReport) | VoiceGuardrailDecision | VoiceGuardrailReport;
72
+ trace?: VoiceTraceEventStore;
73
+ };
74
+ export type VoiceGuardrailRuntimeBlockInput<TContext = unknown, TSession extends VoiceSessionRecord = VoiceSessionRecord, TResult = unknown> = Parameters<VoiceOnTurnObjectHandler<TContext, TSession, TResult>>[0] & {
75
+ decision: VoiceGuardrailDecision;
76
+ stage: VoiceGuardrailStage;
77
+ };
78
+ export type VoiceGuardrailRuntimeOptions<TContext = unknown, TSession extends VoiceSessionRecord = VoiceSessionRecord, TResult = unknown> = {
79
+ blockResult?: (input: VoiceGuardrailRuntimeBlockInput<TContext, TSession, TResult>) => Promise<VoiceRouteResult<TResult>> | VoiceRouteResult<TResult>;
80
+ name?: string;
81
+ policies: VoiceGuardrailPolicy[];
82
+ trace?: VoiceTraceEventStore;
83
+ };
84
+ export type VoiceGuardrailRuntime<TContext = unknown, TSession extends VoiceSessionRecord = VoiceSessionRecord, TResult = unknown> = {
85
+ assistantGuardrails: VoiceAssistantGuardrails<TContext, TSession, TResult>;
86
+ evaluate: (input: VoiceGuardrailEvaluationInput) => Promise<VoiceGuardrailDecision>;
87
+ wrapTool: <TArgs extends Record<string, unknown>, TToolResult>(tool: VoiceAgentTool<TContext, TSession, TArgs, TToolResult, TResult>) => VoiceAgentTool<TContext, TSession, TArgs, TToolResult, TResult>;
88
+ wrapTools: (tools: Array<VoiceAgentTool<TContext, TSession, Record<string, unknown>, unknown, TResult>>) => Array<VoiceAgentTool<TContext, TSession, Record<string, unknown>, unknown, TResult>>;
89
+ };
90
+ export declare const evaluateVoiceGuardrailPolicy: (policy: VoiceGuardrailPolicy, input: VoiceGuardrailEvaluationInput) => Promise<VoiceGuardrailDecision>;
91
+ export declare const buildVoiceGuardrailReport: (input?: {
92
+ decisions: VoiceGuardrailDecision[];
93
+ policies?: VoiceGuardrailPolicy[];
94
+ }) => VoiceGuardrailReport;
95
+ export declare const createVoiceGuardrailPolicy: (policy: VoiceGuardrailPolicy) => VoiceGuardrailPolicy;
96
+ export declare const createVoiceGuardrailRuntime: <TContext = unknown, TSession extends VoiceSessionRecord = VoiceSessionRecord, TResult = unknown>(options: VoiceGuardrailRuntimeOptions<TContext, TSession, TResult>) => VoiceGuardrailRuntime<TContext, TSession, TResult>;
97
+ export declare const voiceGuardrailPolicyPresets: {
98
+ supportSafeDefaults: VoiceGuardrailPolicy;
99
+ };
100
+ export declare const renderVoiceGuardrailMarkdown: (report: VoiceGuardrailReport) => string;
101
+ export declare const createVoiceGuardrailRoutes: (options?: VoiceGuardrailRoutesOptions) => Elysia<"", {
102
+ decorator: {};
103
+ store: {};
104
+ derive: {};
105
+ resolve: {};
106
+ }, {
107
+ typebox: {};
108
+ error: {};
109
+ }, {
110
+ schema: {};
111
+ standaloneSchema: {};
112
+ macro: {};
113
+ macroFn: {};
114
+ parser: {};
115
+ response: {};
116
+ }, {}, {
117
+ derive: {};
118
+ resolve: {};
119
+ schema: {};
120
+ standaloneSchema: {};
121
+ response: {};
122
+ }, {
123
+ derive: {};
124
+ resolve: {};
125
+ schema: {};
126
+ standaloneSchema: {};
127
+ response: {};
128
+ }>;
package/dist/handoff.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type { VoiceHandoffAction, VoiceHandoffAdapter, VoiceHandoffConfig, VoiceHandoffDeliveryStore, VoiceHandoffInput, VoiceHandoffResult, VoiceSessionRecord, StoredVoiceHandoffDelivery } from './types';
1
+ import type { VoiceHandoffAction, VoiceHandoffAdapter, VoiceHandoffConfig, VoiceHandoffDeliveryStore, VoiceHandoffInput, VoiceHandoffResult, VoiceSessionRecord, StoredVoiceHandoffDelivery } from "./types";
2
2
  type MaybePromise<T> = T | Promise<T>;
3
3
  export type VoiceHandoffDelivery = VoiceHandoffResult & {
4
4
  adapterId: string;
@@ -8,16 +8,16 @@ export type VoiceHandoffDeliveryRecord<TContext = unknown, TSession extends Voic
8
8
  export type VoiceHandoffFanoutResult = {
9
9
  action: VoiceHandoffAction;
10
10
  deliveries: Record<string, VoiceHandoffDelivery>;
11
- status: VoiceHandoffResult['status'];
11
+ status: VoiceHandoffResult["status"];
12
12
  };
13
- export type VoiceHandoffDeliveryRecordInput<TContext = unknown, TSession extends VoiceSessionRecord = VoiceSessionRecord, TResult = unknown> = Omit<VoiceHandoffInput<TContext, TSession, TResult>, 'api'> & {
13
+ export type VoiceHandoffDeliveryRecordInput<TContext = unknown, TSession extends VoiceSessionRecord = VoiceSessionRecord, TResult = unknown> = Omit<VoiceHandoffInput<TContext, TSession, TResult>, "api"> & {
14
14
  id?: string;
15
15
  };
16
16
  export type VoiceQueuedHandoffDeliveryOptions<TContext = unknown, TSession extends VoiceSessionRecord = VoiceSessionRecord, TResult = unknown> = {
17
17
  adapters: VoiceHandoffAdapter<TContext, TSession, TResult>[];
18
- api: VoiceHandoffInput<TContext, TSession, TResult>['api'];
18
+ api: VoiceHandoffInput<TContext, TSession, TResult>["api"];
19
19
  delivery: VoiceHandoffDeliveryRecord<TContext, TSession, TResult>;
20
- failMode?: VoiceHandoffConfig<TContext, TSession, TResult>['failMode'];
20
+ failMode?: VoiceHandoffConfig<TContext, TSession, TResult>["failMode"];
21
21
  };
22
22
  export type VoiceWebhookHandoffAdapterOptions<TContext = unknown, TSession extends VoiceSessionRecord = VoiceSessionRecord, TResult = unknown> = {
23
23
  actions?: VoiceHandoffAction[];
@@ -26,7 +26,7 @@ export type VoiceWebhookHandoffAdapterOptions<TContext = unknown, TSession exten
26
26
  headers?: Record<string, string>;
27
27
  id: string;
28
28
  kind?: string;
29
- method?: 'POST' | 'PUT' | 'PATCH';
29
+ method?: "POST" | "PUT" | "PATCH";
30
30
  signingSecret?: string;
31
31
  timeoutMs?: number;
32
32
  url: string;
@@ -1,6 +1,6 @@
1
- import { Elysia } from 'elysia';
2
- import type { StoredVoiceTraceEvent, VoiceTraceEventStore } from './trace';
3
- export type VoiceHandoffHealthStatus = 'delivered' | 'failed' | 'skipped';
1
+ import { Elysia } from "elysia";
2
+ import type { StoredVoiceTraceEvent, VoiceTraceEventStore } from "./trace";
3
+ export type VoiceHandoffHealthStatus = "delivered" | "failed" | "skipped";
4
4
  export type VoiceHandoffHealthDelivery = {
5
5
  adapterId: string;
6
6
  adapterKind?: string;
@@ -31,8 +31,8 @@ export type VoiceHandoffHealthSummaryOptions = {
31
31
  events?: StoredVoiceTraceEvent[];
32
32
  limit?: number;
33
33
  q?: string;
34
- replayHref?: false | string | ((event: Omit<VoiceHandoffHealthEvent, 'replayHref'>) => string);
35
- status?: VoiceHandoffHealthStatus | 'all';
34
+ replayHref?: false | string | ((event: Omit<VoiceHandoffHealthEvent, "replayHref">) => string);
35
+ status?: VoiceHandoffHealthStatus | "all";
36
36
  store?: VoiceTraceEventStore;
37
37
  };
38
38
  export type VoiceHandoffHealthHTMLHandlerOptions = VoiceHandoffHealthSummaryOptions & {
@@ -0,0 +1,23 @@
1
+ export type VoiceHoldAudioCue = {
2
+ audioUrl?: string;
3
+ metadata?: Record<string, unknown>;
4
+ text?: string;
5
+ };
6
+ export type VoiceHoldAudioDriverOptions = {
7
+ /** Cooldown between hold cues so we don't spam the caller. Default 4_000ms. */
8
+ cooldownMs?: number;
9
+ /** Cues to play. Picked in order; cycles back to start. */
10
+ cues?: ReadonlyArray<VoiceHoldAudioCue>;
11
+ /** Operator callback invoked when a cue is selected. Wire to TTS or a pre-rendered clip. */
12
+ onCue: (cue: VoiceHoldAudioCue) => Promise<void> | void;
13
+ /** Minimum agent-thinking duration before the first cue fires. Default 1_500ms. */
14
+ thinkingThresholdMs?: number;
15
+ };
16
+ export type VoiceHoldAudioDriver = {
17
+ /** Note that the agent has started thinking (e.g. tool call dispatched). */
18
+ noteThinking: (timestampMs?: number) => void;
19
+ /** Note that the agent has produced output (e.g. assistant text / audio). */
20
+ noteResponse: (timestampMs?: number) => void;
21
+ reset: () => void;
22
+ };
23
+ export declare const createVoiceHoldAudioDriver: (options: VoiceHoldAudioDriverOptions) => VoiceHoldAudioDriver;
package/dist/htmx.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type { VoiceHTMXConfig, VoiceHTMXRenderConfig, VoiceHTMXRenderInput, VoiceHTMXTargets, VoiceSessionRecord } from './types';
1
+ import type { VoiceHTMXConfig, VoiceHTMXRenderConfig, VoiceHTMXRenderInput, VoiceHTMXTargets, VoiceSessionRecord } from "./types";
2
2
  type ResolvedVoiceHTMXRenderConfig<TSession extends VoiceSessionRecord = VoiceSessionRecord, TResult = unknown> = Required<VoiceHTMXRenderConfig<TSession, TResult>>;
3
3
  export declare const resolveVoiceHTMXTargets: (custom?: Partial<VoiceHTMXTargets>) => VoiceHTMXTargets;
4
4
  export declare const resolveVoiceHTMXRenderers: <TSession extends VoiceSessionRecord = VoiceSessionRecord, TResult = unknown>(custom?: VoiceHTMXConfig<TSession, TResult>) => ResolvedVoiceHTMXRenderConfig<TSession, TResult>;