@elizaos/plugin-local-inference 2.0.0-beta.1 → 2.0.3-beta.3

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 (893) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +157 -0
  3. package/dist/actions/generate-media.d.ts +59 -0
  4. package/dist/actions/generate-media.d.ts.map +1 -0
  5. package/dist/actions/identify-speaker.d.ts +23 -0
  6. package/dist/actions/identify-speaker.d.ts.map +1 -0
  7. package/dist/actions/transcription-control.d.ts +29 -0
  8. package/dist/actions/transcription-control.d.ts.map +1 -0
  9. package/dist/adapters/capacitor-llama/environment.d.ts +12 -0
  10. package/dist/adapters/capacitor-llama/environment.d.ts.map +1 -0
  11. package/dist/adapters/capacitor-llama/index.browser.d.ts +9 -0
  12. package/dist/adapters/capacitor-llama/index.browser.d.ts.map +1 -0
  13. package/dist/adapters/capacitor-llama/index.d.ts +18 -0
  14. package/dist/adapters/capacitor-llama/index.d.ts.map +1 -0
  15. package/dist/adapters/capacitor-llama/loader.d.ts +35 -0
  16. package/dist/adapters/capacitor-llama/loader.d.ts.map +1 -0
  17. package/dist/adapters/capacitor-llama/native-voice-capture.d.ts +70 -0
  18. package/dist/adapters/capacitor-llama/native-voice-capture.d.ts.map +1 -0
  19. package/dist/adapters/capacitor-llama/structured-output.d.ts +62 -0
  20. package/dist/adapters/capacitor-llama/structured-output.d.ts.map +1 -0
  21. package/dist/adapters/capacitor-llama/text-streaming.d.ts +24 -0
  22. package/dist/adapters/capacitor-llama/text-streaming.d.ts.map +1 -0
  23. package/dist/adapters/capacitor-llama/types.d.ts +338 -0
  24. package/dist/adapters/capacitor-llama/types.d.ts.map +1 -0
  25. package/dist/adapters/capacitor-llama/voice-turn.d.ts +86 -0
  26. package/dist/adapters/capacitor-llama/voice-turn.d.ts.map +1 -0
  27. package/dist/backends/apple-foundation.d.ts +56 -0
  28. package/dist/backends/apple-foundation.d.ts.map +1 -0
  29. package/dist/index.d.ts +8 -37
  30. package/dist/index.d.ts.map +1 -0
  31. package/dist/index.js +38979 -430
  32. package/dist/index.js.map +217 -0
  33. package/dist/local-inference-routes.d.ts +47 -0
  34. package/dist/local-inference-routes.d.ts.map +1 -0
  35. package/dist/provider.d.ts +21 -0
  36. package/dist/provider.d.ts.map +1 -0
  37. package/dist/routes/compat-helpers.d.ts +18 -0
  38. package/dist/routes/compat-helpers.d.ts.map +1 -0
  39. package/dist/routes/family-member-route.d.ts +62 -0
  40. package/dist/routes/family-member-route.d.ts.map +1 -0
  41. package/dist/routes/index.d.ts +20 -0
  42. package/dist/routes/index.d.ts.map +1 -0
  43. package/dist/routes/index.js +42040 -0
  44. package/dist/routes/index.js.map +236 -0
  45. package/dist/routes/live-diarization-route.d.ts +33 -0
  46. package/dist/routes/live-diarization-route.d.ts.map +1 -0
  47. package/dist/routes/local-inference-asr-route.d.ts +4 -0
  48. package/dist/routes/local-inference-asr-route.d.ts.map +1 -0
  49. package/dist/routes/local-inference-asr-transcribe.d.ts +20 -0
  50. package/dist/routes/local-inference-asr-transcribe.d.ts.map +1 -0
  51. package/dist/routes/local-inference-compat-routes.d.ts +16 -0
  52. package/dist/routes/local-inference-compat-routes.d.ts.map +1 -0
  53. package/dist/routes/local-inference-tts-route.d.ts +7 -0
  54. package/dist/routes/local-inference-tts-route.d.ts.map +1 -0
  55. package/dist/routes/native-pcm-turn-route.d.ts +3 -0
  56. package/dist/routes/native-pcm-turn-route.d.ts.map +1 -0
  57. package/dist/routes/transcript-audio-store.d.ts +15 -0
  58. package/dist/routes/transcript-audio-store.d.ts.map +1 -0
  59. package/dist/routes/transcripts-routes.d.ts +44 -0
  60. package/dist/routes/transcripts-routes.d.ts.map +1 -0
  61. package/dist/routes/voice-first-run-routes.d.ts +62 -0
  62. package/dist/routes/voice-first-run-routes.d.ts.map +1 -0
  63. package/dist/routes/voice-models-routes.d.ts +62 -0
  64. package/dist/routes/voice-models-routes.d.ts.map +1 -0
  65. package/dist/routes/voice-profile-plugin-routes.d.ts +19 -0
  66. package/dist/routes/voice-profile-plugin-routes.d.ts.map +1 -0
  67. package/dist/routes/voice-profiles-management-routes.d.ts +52 -0
  68. package/dist/routes/voice-profiles-management-routes.d.ts.map +1 -0
  69. package/dist/routes/voice-speaker-profile-routes.d.ts +57 -0
  70. package/dist/routes/voice-speaker-profile-routes.d.ts.map +1 -0
  71. package/dist/runtime/embedding-manager-support.d.ts +77 -0
  72. package/dist/runtime/embedding-manager-support.d.ts.map +1 -0
  73. package/dist/runtime/embedding-presets.d.ts +16 -0
  74. package/dist/runtime/embedding-presets.d.ts.map +1 -0
  75. package/dist/runtime/embedding-warmup-policy.d.ts +14 -0
  76. package/dist/runtime/embedding-warmup-policy.d.ts.map +1 -0
  77. package/dist/runtime/ensure-local-inference-handler.d.ts +70 -0
  78. package/dist/runtime/ensure-local-inference-handler.d.ts.map +1 -0
  79. package/dist/runtime/index.d.ts +15 -0
  80. package/dist/runtime/index.d.ts.map +1 -0
  81. package/dist/runtime/index.js +38768 -0
  82. package/dist/runtime/index.js.map +217 -0
  83. package/dist/runtime/mobile-local-inference-gate.d.ts +63 -0
  84. package/dist/runtime/mobile-local-inference-gate.d.ts.map +1 -0
  85. package/dist/runtime/voice-entity-binding.d.ts +113 -0
  86. package/dist/runtime/voice-entity-binding.d.ts.map +1 -0
  87. package/dist/services/active-model.d.ts +310 -0
  88. package/dist/services/active-model.d.ts.map +1 -0
  89. package/dist/services/asr-provenance.d.ts +5 -0
  90. package/dist/services/asr-provenance.d.ts.map +1 -0
  91. package/dist/services/assignments.d.ts +84 -0
  92. package/dist/services/assignments.d.ts.map +1 -0
  93. package/dist/services/backend-selector.d.ts +55 -0
  94. package/dist/services/backend-selector.d.ts.map +1 -0
  95. package/dist/services/backend.d.ts +440 -0
  96. package/dist/services/backend.d.ts.map +1 -0
  97. package/dist/services/bionic-host-loader.d.ts +67 -0
  98. package/dist/services/bionic-host-loader.d.ts.map +1 -0
  99. package/dist/services/bundled-models.d.ts +34 -0
  100. package/dist/services/bundled-models.d.ts.map +1 -0
  101. package/dist/services/cache-bridge.d.ts +206 -0
  102. package/dist/services/cache-bridge.d.ts.map +1 -0
  103. package/dist/services/catalog.d.ts +10 -0
  104. package/dist/services/catalog.d.ts.map +1 -0
  105. package/dist/services/checkpoint-client.d.ts +109 -0
  106. package/dist/services/checkpoint-client.d.ts.map +1 -0
  107. package/dist/services/checkpoint-manager.d.ts +217 -0
  108. package/dist/services/checkpoint-manager.d.ts.map +1 -0
  109. package/dist/services/cloud-fallback.d.ts +102 -0
  110. package/dist/services/cloud-fallback.d.ts.map +1 -0
  111. package/dist/services/context-fit.d.ts +36 -0
  112. package/dist/services/context-fit.d.ts.map +1 -0
  113. package/dist/services/conversation-registry.d.ts +142 -0
  114. package/dist/services/conversation-registry.d.ts.map +1 -0
  115. package/dist/services/desktop-fused-ffi-backend-runtime.d.ts +111 -0
  116. package/dist/services/desktop-fused-ffi-backend-runtime.d.ts.map +1 -0
  117. package/dist/services/device-bridge.d.ts +188 -0
  118. package/dist/services/device-bridge.d.ts.map +1 -0
  119. package/dist/services/device-resource-metrics.d.ts +149 -0
  120. package/dist/services/device-resource-metrics.d.ts.map +1 -0
  121. package/dist/services/device-tier.d.ts +133 -0
  122. package/dist/services/device-tier.d.ts.map +1 -0
  123. package/dist/services/downloader.d.ts +94 -0
  124. package/dist/services/downloader.d.ts.map +1 -0
  125. package/dist/services/engine.d.ts +579 -0
  126. package/dist/services/engine.d.ts.map +1 -0
  127. package/dist/services/ensure-local-artifacts.d.ts +82 -0
  128. package/dist/services/ensure-local-artifacts.d.ts.map +1 -0
  129. package/dist/services/external-scanner.d.ts +17 -0
  130. package/dist/services/external-scanner.d.ts.map +1 -0
  131. package/dist/services/ffi-llm-mock.d.ts +90 -0
  132. package/dist/services/ffi-llm-mock.d.ts.map +1 -0
  133. package/dist/services/ffi-llm-streaming-abi.d.ts +318 -0
  134. package/dist/services/ffi-llm-streaming-abi.d.ts.map +1 -0
  135. package/dist/services/ffi-streaming-backend.d.ts +201 -0
  136. package/dist/services/ffi-streaming-backend.d.ts.map +1 -0
  137. package/dist/services/ffi-streaming-runner.d.ts +146 -0
  138. package/dist/services/ffi-streaming-runner.d.ts.map +1 -0
  139. package/dist/services/gpu-autotune.d.ts +150 -0
  140. package/dist/services/gpu-autotune.d.ts.map +1 -0
  141. package/dist/services/gpu-detect.d.ts +56 -0
  142. package/dist/services/gpu-detect.d.ts.map +1 -0
  143. package/dist/services/handler-registry.d.ts +72 -0
  144. package/dist/services/handler-registry.d.ts.map +1 -0
  145. package/dist/services/hardware.d.ts +63 -0
  146. package/dist/services/hardware.d.ts.map +1 -0
  147. package/dist/services/image-description-runtime.d.ts +14 -0
  148. package/dist/services/image-description-runtime.d.ts.map +1 -0
  149. package/dist/services/imagegen/aosp-unavailable.d.ts +134 -0
  150. package/dist/services/imagegen/aosp-unavailable.d.ts.map +1 -0
  151. package/dist/services/imagegen/backend-selector.d.ts +118 -0
  152. package/dist/services/imagegen/backend-selector.d.ts.map +1 -0
  153. package/dist/services/imagegen/coreml-unavailable.d.ts +105 -0
  154. package/dist/services/imagegen/coreml-unavailable.d.ts.map +1 -0
  155. package/dist/services/imagegen/errors.d.ts +16 -0
  156. package/dist/services/imagegen/errors.d.ts.map +1 -0
  157. package/dist/services/imagegen/index.d.ts +58 -0
  158. package/dist/services/imagegen/index.d.ts.map +1 -0
  159. package/dist/services/imagegen/mflux.d.ts +74 -0
  160. package/dist/services/imagegen/mflux.d.ts.map +1 -0
  161. package/dist/services/imagegen/sd-cpp.d.ts +181 -0
  162. package/dist/services/imagegen/sd-cpp.d.ts.map +1 -0
  163. package/dist/services/imagegen/tensorrt-unavailable.d.ts +83 -0
  164. package/dist/services/imagegen/tensorrt-unavailable.d.ts.map +1 -0
  165. package/dist/services/imagegen/types.d.ts +181 -0
  166. package/dist/services/imagegen/types.d.ts.map +1 -0
  167. package/dist/services/index.d.ts +31 -0
  168. package/dist/services/index.d.ts.map +1 -0
  169. package/dist/services/index.js +39453 -0
  170. package/dist/services/index.js.map +227 -0
  171. package/dist/services/inference-capabilities.d.ts +132 -0
  172. package/dist/services/inference-capabilities.d.ts.map +1 -0
  173. package/dist/services/inference-telemetry.d.ts +59 -0
  174. package/dist/services/inference-telemetry.d.ts.map +1 -0
  175. package/dist/services/ios-llama-streaming.d.ts +119 -0
  176. package/dist/services/ios-llama-streaming.d.ts.map +1 -0
  177. package/dist/services/kv-spill.d.ts +189 -0
  178. package/dist/services/kv-spill.d.ts.map +1 -0
  179. package/dist/services/latency-trace.d.ts +346 -0
  180. package/dist/services/latency-trace.d.ts.map +1 -0
  181. package/dist/services/lib-target.d.ts +55 -0
  182. package/dist/services/lib-target.d.ts.map +1 -0
  183. package/dist/services/live-signals.d.ts +86 -0
  184. package/dist/services/live-signals.d.ts.map +1 -0
  185. package/dist/services/llama-server-metrics.d.ts +114 -0
  186. package/dist/services/llama-server-metrics.d.ts.map +1 -0
  187. package/dist/services/llm-streaming-binding.d.ts +96 -0
  188. package/dist/services/llm-streaming-binding.d.ts.map +1 -0
  189. package/dist/services/load-args.d.ts +82 -0
  190. package/dist/services/load-args.d.ts.map +1 -0
  191. package/dist/services/manifest/index.d.ts +4 -0
  192. package/dist/services/manifest/index.d.ts.map +1 -0
  193. package/dist/services/manifest/schema.d.ts +903 -0
  194. package/dist/services/manifest/schema.d.ts.map +1 -0
  195. package/dist/services/manifest/types.d.ts +32 -0
  196. package/dist/services/manifest/types.d.ts.map +1 -0
  197. package/dist/services/manifest/validator.d.ts +66 -0
  198. package/dist/services/manifest/validator.d.ts.map +1 -0
  199. package/dist/services/memory-arbiter.d.ts +348 -0
  200. package/dist/services/memory-arbiter.d.ts.map +1 -0
  201. package/dist/services/memory-benchmark.d.ts +76 -0
  202. package/dist/services/memory-benchmark.d.ts.map +1 -0
  203. package/dist/services/memory-monitor.d.ts +128 -0
  204. package/dist/services/memory-monitor.d.ts.map +1 -0
  205. package/dist/services/memory-pressure.d.ts +130 -0
  206. package/dist/services/memory-pressure.d.ts.map +1 -0
  207. package/dist/services/mtp-doctor.d.ts +13 -0
  208. package/dist/services/mtp-doctor.d.ts.map +1 -0
  209. package/dist/services/network-policy.d.ts +127 -0
  210. package/dist/services/network-policy.d.ts.map +1 -0
  211. package/dist/services/paths.d.ts +6 -0
  212. package/dist/services/paths.d.ts.map +1 -0
  213. package/dist/services/planner-skeleton.d.ts +124 -0
  214. package/dist/services/planner-skeleton.d.ts.map +1 -0
  215. package/dist/services/providers.d.ts +38 -0
  216. package/dist/services/providers.d.ts.map +1 -0
  217. package/dist/services/ram-budget.d.ts +110 -0
  218. package/dist/services/ram-budget.d.ts.map +1 -0
  219. package/dist/services/readiness.d.ts +9 -0
  220. package/dist/services/readiness.d.ts.map +1 -0
  221. package/dist/services/recommendation.d.ts +111 -0
  222. package/dist/services/recommendation.d.ts.map +1 -0
  223. package/dist/services/registry.d.ts +33 -0
  224. package/dist/services/registry.d.ts.map +1 -0
  225. package/dist/services/router-handler.d.ts +92 -0
  226. package/dist/services/router-handler.d.ts.map +1 -0
  227. package/dist/services/routing-policy.d.ts +92 -0
  228. package/dist/services/routing-policy.d.ts.map +1 -0
  229. package/dist/services/routing-preferences.d.ts +8 -0
  230. package/dist/services/routing-preferences.d.ts.map +1 -0
  231. package/dist/services/runtime-target.d.ts +98 -0
  232. package/dist/services/runtime-target.d.ts.map +1 -0
  233. package/dist/services/service.d.ts +128 -0
  234. package/dist/services/service.d.ts.map +1 -0
  235. package/dist/services/session-pool.d.ts +72 -0
  236. package/dist/services/session-pool.d.ts.map +1 -0
  237. package/dist/services/structured-output/deterministic-repair.d.ts +23 -0
  238. package/dist/services/structured-output/deterministic-repair.d.ts.map +1 -0
  239. package/dist/services/structured-output/index.d.ts +2 -0
  240. package/dist/services/structured-output/index.d.ts.map +1 -0
  241. package/dist/services/structured-output.d.ts +311 -0
  242. package/dist/services/structured-output.d.ts.map +1 -0
  243. package/dist/services/system-memory.d.ts +33 -0
  244. package/dist/services/system-memory.d.ts.map +1 -0
  245. package/dist/services/types.d.ts +19 -0
  246. package/dist/services/types.d.ts.map +1 -0
  247. package/dist/services/verify-on-device.d.ts +34 -0
  248. package/dist/services/verify-on-device.d.ts.map +1 -0
  249. package/dist/services/verify.d.ts +8 -0
  250. package/dist/services/verify.d.ts.map +1 -0
  251. package/dist/services/vision/aosp-unavailable.d.ts +115 -0
  252. package/dist/services/vision/aosp-unavailable.d.ts.map +1 -0
  253. package/dist/services/vision/capacitor-llama.d.ts +99 -0
  254. package/dist/services/vision/capacitor-llama.d.ts.map +1 -0
  255. package/dist/services/vision/cloud-fallback.d.ts +47 -0
  256. package/dist/services/vision/cloud-fallback.d.ts.map +1 -0
  257. package/dist/services/vision/hash.d.ts +71 -0
  258. package/dist/services/vision/hash.d.ts.map +1 -0
  259. package/dist/services/vision/index.d.ts +95 -0
  260. package/dist/services/vision/index.d.ts.map +1 -0
  261. package/dist/services/vision/llama-server.d.ts +73 -0
  262. package/dist/services/vision/llama-server.d.ts.map +1 -0
  263. package/dist/services/vision/types.d.ts +162 -0
  264. package/dist/services/vision/types.d.ts.map +1 -0
  265. package/dist/services/vision/vast-fallback.d.ts +18 -0
  266. package/dist/services/vision/vast-fallback.d.ts.map +1 -0
  267. package/dist/services/vision-embedding-cache.d.ts +98 -0
  268. package/dist/services/vision-embedding-cache.d.ts.map +1 -0
  269. package/dist/services/voice/__test-helpers__/fake-ffi.d.ts +27 -0
  270. package/dist/services/voice/__test-helpers__/fake-ffi.d.ts.map +1 -0
  271. package/dist/services/voice/__test-helpers__/synthetic-speech.d.ts +66 -0
  272. package/dist/services/voice/__test-helpers__/synthetic-speech.d.ts.map +1 -0
  273. package/dist/services/voice/acoustic-speaker-attribution.d.ts +61 -0
  274. package/dist/services/voice/acoustic-speaker-attribution.d.ts.map +1 -0
  275. package/dist/services/voice/audio-frame-consumer.d.ts +294 -0
  276. package/dist/services/voice/audio-frame-consumer.d.ts.map +1 -0
  277. package/dist/services/voice/barge-in.d.ts +112 -0
  278. package/dist/services/voice/barge-in.d.ts.map +1 -0
  279. package/dist/services/voice/cancellation-coordinator.d.ts +127 -0
  280. package/dist/services/voice/cancellation-coordinator.d.ts.map +1 -0
  281. package/dist/services/voice/checkpoint-manager.d.ts +199 -0
  282. package/dist/services/voice/checkpoint-manager.d.ts.map +1 -0
  283. package/dist/services/voice/checkpoint-policy.d.ts +178 -0
  284. package/dist/services/voice/checkpoint-policy.d.ts.map +1 -0
  285. package/dist/services/voice/corpus-augment.d.ts +111 -0
  286. package/dist/services/voice/corpus-augment.d.ts.map +1 -0
  287. package/dist/services/voice/corpus-generator.d.ts +134 -0
  288. package/dist/services/voice/corpus-generator.d.ts.map +1 -0
  289. package/dist/services/voice/diarization-error-rate.d.ts +40 -0
  290. package/dist/services/voice/diarization-error-rate.d.ts.map +1 -0
  291. package/dist/services/voice/e2e-harness.d.ts +297 -0
  292. package/dist/services/voice/e2e-harness.d.ts.map +1 -0
  293. package/dist/services/voice/eager-context-builder.d.ts +170 -0
  294. package/dist/services/voice/eager-context-builder.d.ts.map +1 -0
  295. package/dist/services/voice/echo-delay.d.ts +67 -0
  296. package/dist/services/voice/echo-delay.d.ts.map +1 -0
  297. package/dist/services/voice/echo-metrics.d.ts +7 -0
  298. package/dist/services/voice/echo-metrics.d.ts.map +1 -0
  299. package/dist/services/voice/echo-reference-buffer.d.ts +65 -0
  300. package/dist/services/voice/echo-reference-buffer.d.ts.map +1 -0
  301. package/dist/services/voice/eliza1-eot-scorer.d.ts +124 -0
  302. package/dist/services/voice/eliza1-eot-scorer.d.ts.map +1 -0
  303. package/dist/services/voice/embedding-server.d.ts +37 -0
  304. package/dist/services/voice/embedding-server.d.ts.map +1 -0
  305. package/dist/services/voice/embedding.d.ts +132 -0
  306. package/dist/services/voice/embedding.d.ts.map +1 -0
  307. package/dist/services/voice/emotion-attribution.d.ts +68 -0
  308. package/dist/services/voice/emotion-attribution.d.ts.map +1 -0
  309. package/dist/services/voice/engine-bridge.d.ts +762 -0
  310. package/dist/services/voice/engine-bridge.d.ts.map +1 -0
  311. package/dist/services/voice/eot-classifier-ggml.d.ts +179 -0
  312. package/dist/services/voice/eot-classifier-ggml.d.ts.map +1 -0
  313. package/dist/services/voice/eot-classifier.d.ts +211 -0
  314. package/dist/services/voice/eot-classifier.d.ts.map +1 -0
  315. package/dist/services/voice/errors.d.ts +20 -0
  316. package/dist/services/voice/errors.d.ts.map +1 -0
  317. package/dist/services/voice/expressive-tags.d.ts +158 -0
  318. package/dist/services/voice/expressive-tags.d.ts.map +1 -0
  319. package/dist/services/voice/ffi-bindings.d.ts +696 -0
  320. package/dist/services/voice/ffi-bindings.d.ts.map +1 -0
  321. package/dist/services/voice/first-line-cache.d.ts +181 -0
  322. package/dist/services/voice/first-line-cache.d.ts.map +1 -0
  323. package/dist/services/voice/fused-eot-scorer.d.ts +51 -0
  324. package/dist/services/voice/fused-eot-scorer.d.ts.map +1 -0
  325. package/dist/services/voice/index.d.ts +96 -0
  326. package/dist/services/voice/index.d.ts.map +1 -0
  327. package/dist/services/voice/kokoro/index.d.ts +24 -0
  328. package/dist/services/voice/kokoro/index.d.ts.map +1 -0
  329. package/dist/services/voice/kokoro/kokoro-backend.d.ts +87 -0
  330. package/dist/services/voice/kokoro/kokoro-backend.d.ts.map +1 -0
  331. package/dist/services/voice/kokoro/kokoro-engine-discovery.d.ts +58 -0
  332. package/dist/services/voice/kokoro/kokoro-engine-discovery.d.ts.map +1 -0
  333. package/dist/services/voice/kokoro/kokoro-ffi-runtime.d.ts +75 -0
  334. package/dist/services/voice/kokoro/kokoro-ffi-runtime.d.ts.map +1 -0
  335. package/dist/services/voice/kokoro/kokoro-runtime.d.ts +100 -0
  336. package/dist/services/voice/kokoro/kokoro-runtime.d.ts.map +1 -0
  337. package/dist/services/voice/kokoro/phoneme-stream.d.ts +51 -0
  338. package/dist/services/voice/kokoro/phoneme-stream.d.ts.map +1 -0
  339. package/dist/services/voice/kokoro/phonemizer.d.ts +50 -0
  340. package/dist/services/voice/kokoro/phonemizer.d.ts.map +1 -0
  341. package/dist/services/voice/kokoro/pick-runtime.d.ts +61 -0
  342. package/dist/services/voice/kokoro/pick-runtime.d.ts.map +1 -0
  343. package/dist/services/voice/kokoro/runtime-selection.d.ts +31 -0
  344. package/dist/services/voice/kokoro/runtime-selection.d.ts.map +1 -0
  345. package/dist/services/voice/kokoro/types.d.ts +82 -0
  346. package/dist/services/voice/kokoro/types.d.ts.map +1 -0
  347. package/dist/services/voice/kokoro/voice-presets.d.ts +23 -0
  348. package/dist/services/voice/kokoro/voice-presets.d.ts.map +1 -0
  349. package/dist/services/voice/kokoro/voices.d.ts +30 -0
  350. package/dist/services/voice/kokoro/voices.d.ts.map +1 -0
  351. package/dist/services/voice/lifecycle.d.ts +135 -0
  352. package/dist/services/voice/lifecycle.d.ts.map +1 -0
  353. package/dist/services/voice/live-diarization-session.d.ts +196 -0
  354. package/dist/services/voice/live-diarization-session.d.ts.map +1 -0
  355. package/dist/services/voice/metric-math.d.ts +10 -0
  356. package/dist/services/voice/metric-math.d.ts.map +1 -0
  357. package/dist/services/voice/mic-source.d.ts +136 -0
  358. package/dist/services/voice/mic-source.d.ts.map +1 -0
  359. package/dist/services/voice/nlms-echo-canceller.d.ts +137 -0
  360. package/dist/services/voice/nlms-echo-canceller.d.ts.map +1 -0
  361. package/dist/services/voice/optimistic-policy.d.ts +109 -0
  362. package/dist/services/voice/optimistic-policy.d.ts.map +1 -0
  363. package/dist/services/voice/optimistic-rollback.d.ts +151 -0
  364. package/dist/services/voice/optimistic-rollback.d.ts.map +1 -0
  365. package/dist/services/voice/partial-stabilizer.d.ts +73 -0
  366. package/dist/services/voice/partial-stabilizer.d.ts.map +1 -0
  367. package/dist/services/voice/phoneme-tokenizer.d.ts +49 -0
  368. package/dist/services/voice/phoneme-tokenizer.d.ts.map +1 -0
  369. package/dist/services/voice/phrase-cache.d.ts +76 -0
  370. package/dist/services/voice/phrase-cache.d.ts.map +1 -0
  371. package/dist/services/voice/phrase-chunker.d.ts +62 -0
  372. package/dist/services/voice/phrase-chunker.d.ts.map +1 -0
  373. package/dist/services/voice/pipeline-impls.d.ts +151 -0
  374. package/dist/services/voice/pipeline-impls.d.ts.map +1 -0
  375. package/dist/services/voice/pipeline.d.ts +216 -0
  376. package/dist/services/voice/pipeline.d.ts.map +1 -0
  377. package/dist/services/voice/prefill-client.d.ts +123 -0
  378. package/dist/services/voice/prefill-client.d.ts.map +1 -0
  379. package/dist/services/voice/prefix-preserving-queue.d.ts +113 -0
  380. package/dist/services/voice/prefix-preserving-queue.d.ts.map +1 -0
  381. package/dist/services/voice/profile-store.d.ts +248 -0
  382. package/dist/services/voice/profile-store.d.ts.map +1 -0
  383. package/dist/services/voice/ring-buffer.d.ts +40 -0
  384. package/dist/services/voice/ring-buffer.d.ts.map +1 -0
  385. package/dist/services/voice/rollback-queue.d.ts +24 -0
  386. package/dist/services/voice/rollback-queue.d.ts.map +1 -0
  387. package/dist/services/voice/samantha-preset-placeholder.d.ts +67 -0
  388. package/dist/services/voice/samantha-preset-placeholder.d.ts.map +1 -0
  389. package/dist/services/voice/samantha-preset-regenerator.d.ts +87 -0
  390. package/dist/services/voice/samantha-preset-regenerator.d.ts.map +1 -0
  391. package/dist/services/voice/scheduler.d.ts +146 -0
  392. package/dist/services/voice/scheduler.d.ts.map +1 -0
  393. package/dist/services/voice/self-voice-imprint.d.ts +33 -0
  394. package/dist/services/voice/self-voice-imprint.d.ts.map +1 -0
  395. package/dist/services/voice/shared-resources.d.ts +204 -0
  396. package/dist/services/voice/shared-resources.d.ts.map +1 -0
  397. package/dist/services/voice/speaker/attribution-pipeline.d.ts +74 -0
  398. package/dist/services/voice/speaker/attribution-pipeline.d.ts.map +1 -0
  399. package/dist/services/voice/speaker/diarizer-fused.d.ts +59 -0
  400. package/dist/services/voice/speaker/diarizer-fused.d.ts.map +1 -0
  401. package/dist/services/voice/speaker/diarizer.d.ts +75 -0
  402. package/dist/services/voice/speaker/diarizer.d.ts.map +1 -0
  403. package/dist/services/voice/speaker/encoder-fused.d.ts +60 -0
  404. package/dist/services/voice/speaker/encoder-fused.d.ts.map +1 -0
  405. package/dist/services/voice/speaker/encoder-ggml.d.ts +33 -0
  406. package/dist/services/voice/speaker/encoder-ggml.d.ts.map +1 -0
  407. package/dist/services/voice/speaker/encoder.d.ts +37 -0
  408. package/dist/services/voice/speaker/encoder.d.ts.map +1 -0
  409. package/dist/services/voice/speaker-imprint.d.ts +83 -0
  410. package/dist/services/voice/speaker-imprint.d.ts.map +1 -0
  411. package/dist/services/voice/speaker-preset-cache.d.ts +77 -0
  412. package/dist/services/voice/speaker-preset-cache.d.ts.map +1 -0
  413. package/dist/services/voice/streaming-asr/streaming-pipeline-adapter.d.ts +160 -0
  414. package/dist/services/voice/streaming-asr/streaming-pipeline-adapter.d.ts.map +1 -0
  415. package/dist/services/voice/system-audio-sink.d.ts +73 -0
  416. package/dist/services/voice/system-audio-sink.d.ts.map +1 -0
  417. package/dist/services/voice/transcriber.d.ts +244 -0
  418. package/dist/services/voice/transcriber.d.ts.map +1 -0
  419. package/dist/services/voice/transcript-knowledge.d.ts +37 -0
  420. package/dist/services/voice/transcript-knowledge.d.ts.map +1 -0
  421. package/dist/services/voice/transcript-service.d.ts +60 -0
  422. package/dist/services/voice/transcript-service.d.ts.map +1 -0
  423. package/dist/services/voice/transcript-store.d.ts +64 -0
  424. package/dist/services/voice/transcript-store.d.ts.map +1 -0
  425. package/dist/services/voice/turn-controller.d.ts +183 -0
  426. package/dist/services/voice/turn-controller.d.ts.map +1 -0
  427. package/dist/services/voice/types.d.ts +643 -0
  428. package/dist/services/voice/types.d.ts.map +1 -0
  429. package/dist/services/voice/vad.d.ts +283 -0
  430. package/dist/services/voice/vad.d.ts.map +1 -0
  431. package/dist/services/voice/voice-budget.d.ts +241 -0
  432. package/dist/services/voice/voice-budget.d.ts.map +1 -0
  433. package/dist/services/voice/voice-emotion-classifier.d.ts +95 -0
  434. package/dist/services/voice/voice-emotion-classifier.d.ts.map +1 -0
  435. package/dist/services/voice/voice-preload-predictor.d.ts +76 -0
  436. package/dist/services/voice/voice-preload-predictor.d.ts.map +1 -0
  437. package/dist/services/voice/voice-preset-format.d.ts +158 -0
  438. package/dist/services/voice/voice-preset-format.d.ts.map +1 -0
  439. package/dist/services/voice/voice-profile-artifact.d.ts +116 -0
  440. package/dist/services/voice/voice-profile-artifact.d.ts.map +1 -0
  441. package/dist/services/voice/voice-profile-routes.d.ts +83 -0
  442. package/dist/services/voice/voice-profile-routes.d.ts.map +1 -0
  443. package/dist/services/voice/voice-scenario.d.ts +131 -0
  444. package/dist/services/voice/voice-scenario.d.ts.map +1 -0
  445. package/dist/services/voice/voice-state-machine.d.ts +364 -0
  446. package/dist/services/voice/voice-state-machine.d.ts.map +1 -0
  447. package/dist/services/voice/voice-workbench-report.d.ts +117 -0
  448. package/dist/services/voice/voice-workbench-report.d.ts.map +1 -0
  449. package/dist/services/voice/wake-word-ggml.d.ts +100 -0
  450. package/dist/services/voice/wake-word-ggml.d.ts.map +1 -0
  451. package/dist/services/voice/wake-word.d.ts +255 -0
  452. package/dist/services/voice/wake-word.d.ts.map +1 -0
  453. package/dist/services/voice/wav-codec.d.ts +11 -0
  454. package/dist/services/voice/wav-codec.d.ts.map +1 -0
  455. package/dist/services/voice/workbench-entrypoint.d.ts +42 -0
  456. package/dist/services/voice/workbench-entrypoint.d.ts.map +1 -0
  457. package/dist/services/voice/workbench-headless-runner.d.ts +102 -0
  458. package/dist/services/voice/workbench-headless-runner.d.ts.map +1 -0
  459. package/dist/services/voice/workbench-logic-services.d.ts +36 -0
  460. package/dist/services/voice/workbench-logic-services.d.ts.map +1 -0
  461. package/dist/services/voice/workbench-real-services.d.ts +17 -0
  462. package/dist/services/voice/workbench-real-services.d.ts.map +1 -0
  463. package/dist/services/voice/workbench-scenarios.d.ts +24 -0
  464. package/dist/services/voice/workbench-scenarios.d.ts.map +1 -0
  465. package/dist/services/voice/wrap-with-first-line-cache.d.ts +70 -0
  466. package/dist/services/voice/wrap-with-first-line-cache.d.ts.map +1 -0
  467. package/dist/services/voice-model-updater.d.ts +240 -0
  468. package/dist/services/voice-model-updater.d.ts.map +1 -0
  469. package/dist/services/voice-prewarm.d.ts +3 -0
  470. package/dist/services/voice-prewarm.d.ts.map +1 -0
  471. package/dist/voice-workbench.d.ts +18 -0
  472. package/dist/voice-workbench.d.ts.map +1 -0
  473. package/dist/voice-workbench.js +5259 -0
  474. package/dist/voice-workbench.js.map +34 -0
  475. package/package.json +101 -15
  476. package/registry-entry.json +137 -0
  477. package/src/actions/generate-media.ts +647 -0
  478. package/src/actions/identify-speaker.ts +171 -0
  479. package/src/actions/transcription-control.test.ts +100 -0
  480. package/src/actions/transcription-control.ts +127 -0
  481. package/src/adapters/capacitor-llama/__tests__/compat-behavior.test.ts +218 -0
  482. package/src/adapters/capacitor-llama/__tests__/index.test.ts +68 -0
  483. package/src/adapters/capacitor-llama/__tests__/structured-output.test.ts +215 -0
  484. package/src/adapters/capacitor-llama/__tests__/text-streaming.test.ts +174 -0
  485. package/src/adapters/capacitor-llama/__tests__/voice-turn.test.ts +293 -0
  486. package/src/adapters/capacitor-llama/environment.ts +71 -0
  487. package/src/adapters/capacitor-llama/index.browser.ts +83 -0
  488. package/src/adapters/capacitor-llama/index.ts +831 -0
  489. package/src/adapters/capacitor-llama/loader.ts +109 -0
  490. package/src/adapters/capacitor-llama/native-voice-capture.ts +140 -0
  491. package/src/adapters/capacitor-llama/structured-output.ts +165 -0
  492. package/src/adapters/capacitor-llama/text-streaming.ts +227 -0
  493. package/src/adapters/capacitor-llama/types.ts +374 -0
  494. package/src/adapters/capacitor-llama/voice-turn.ts +178 -0
  495. package/src/backends/apple-foundation.ts +127 -0
  496. package/src/index.ts +62 -0
  497. package/src/local-inference-routes.test.ts +390 -0
  498. package/src/local-inference-routes.ts +1625 -0
  499. package/src/provider.ts +1111 -0
  500. package/src/routes/compat-helpers.ts +275 -0
  501. package/src/routes/family-member-route.ts +353 -0
  502. package/src/routes/index.ts +61 -0
  503. package/src/routes/live-diarization-route.test.ts +347 -0
  504. package/src/routes/live-diarization-route.ts +198 -0
  505. package/src/routes/local-inference-asr-route.test.ts +246 -0
  506. package/src/routes/local-inference-asr-route.ts +166 -0
  507. package/src/routes/local-inference-asr-transcribe.test.ts +118 -0
  508. package/src/routes/local-inference-asr-transcribe.ts +97 -0
  509. package/src/routes/local-inference-compat-routes.test.ts +485 -0
  510. package/src/routes/local-inference-compat-routes.ts +775 -0
  511. package/src/routes/local-inference-tts-route.test.ts +179 -0
  512. package/src/routes/local-inference-tts-route.ts +230 -0
  513. package/src/routes/native-pcm-turn-route.test.ts +136 -0
  514. package/src/routes/native-pcm-turn-route.ts +121 -0
  515. package/src/routes/transcript-audio-store.ts +27 -0
  516. package/src/routes/transcripts-routes.test.ts +195 -0
  517. package/src/routes/transcripts-routes.ts +191 -0
  518. package/src/routes/voice-first-run-routes.ts +524 -0
  519. package/src/routes/voice-models-routes.ts +554 -0
  520. package/src/routes/voice-profile-plugin-routes.ts +138 -0
  521. package/src/routes/voice-profiles-management-routes.ts +476 -0
  522. package/src/routes/voice-speaker-profile-routes.ts +199 -0
  523. package/src/runtime/aosp-llama-loader-selection.test.ts +80 -0
  524. package/src/runtime/bionic-wire-encoding.test.ts +147 -0
  525. package/src/runtime/capacitor-llama.d.ts +25 -0
  526. package/src/runtime/embedding-manager-support.ts +497 -0
  527. package/src/runtime/embedding-presets.ts +81 -0
  528. package/src/runtime/embedding-warmup-policy.test.ts +53 -0
  529. package/src/runtime/embedding-warmup-policy.ts +48 -0
  530. package/src/runtime/ensure-local-inference-handler.test.ts +726 -0
  531. package/src/runtime/ensure-local-inference-handler.ts +1640 -0
  532. package/src/runtime/index.ts +36 -0
  533. package/src/runtime/mobile-local-inference-gate.test.ts +152 -0
  534. package/src/runtime/mobile-local-inference-gate.ts +99 -0
  535. package/src/runtime/voice-entity-binding.transcript.test.ts +98 -0
  536. package/src/runtime/voice-entity-binding.ts +368 -0
  537. package/src/runtime/voice-speaker-entity-contract.test.ts +149 -0
  538. package/src/services/README.md +71 -0
  539. package/src/services/__tests__/backend-selector.precedence.test.ts +333 -0
  540. package/src/services/__tests__/backend-selector.test.ts +101 -0
  541. package/src/services/__tests__/checkpoint-manager.test.ts +376 -0
  542. package/src/services/__tests__/gpu-autotune.test.ts +400 -0
  543. package/src/services/__tests__/llm-streaming-binding.test.ts +85 -0
  544. package/src/services/__tests__/planner-grammar.test.ts +372 -0
  545. package/src/services/__tests__/runtime-target.test.ts +176 -0
  546. package/src/services/active-model-context-fit.test.ts +125 -0
  547. package/src/services/active-model-switch-rollback.test.ts +183 -0
  548. package/src/services/active-model.ts +1416 -0
  549. package/src/services/asr-provenance.ts +68 -0
  550. package/src/services/assignment-validation.test.ts +118 -0
  551. package/src/services/assignments.test.ts +106 -0
  552. package/src/services/assignments.ts +278 -0
  553. package/src/services/backend-selector.ts +95 -0
  554. package/src/services/backend.test.ts +84 -0
  555. package/src/services/backend.ts +791 -0
  556. package/src/services/bionic-host-loader.test.ts +226 -0
  557. package/src/services/bionic-host-loader.ts +252 -0
  558. package/src/services/bundled-models.ts +129 -0
  559. package/src/services/cache-bridge.test.ts +516 -0
  560. package/src/services/cache-bridge.ts +423 -0
  561. package/src/services/catalog.test.ts +259 -0
  562. package/src/services/catalog.ts +33 -0
  563. package/src/services/checkpoint-client.ts +258 -0
  564. package/src/services/checkpoint-manager.ts +474 -0
  565. package/src/services/cloud-fallback.ts +230 -0
  566. package/src/services/context-fit.test.ts +121 -0
  567. package/src/services/context-fit.ts +113 -0
  568. package/src/services/conversation-registry.test.ts +235 -0
  569. package/src/services/conversation-registry.ts +264 -0
  570. package/src/services/desktop-fused-ffi-backend-runtime.ts +431 -0
  571. package/src/services/device-bridge.ts +1237 -0
  572. package/src/services/device-resource-metrics.test.ts +98 -0
  573. package/src/services/device-resource-metrics.ts +346 -0
  574. package/src/services/device-tier.test.ts +458 -0
  575. package/src/services/device-tier.ts +502 -0
  576. package/src/services/downloader.test.ts +888 -0
  577. package/src/services/downloader.ts +1039 -0
  578. package/src/services/engine-direct-bundle.test.ts +90 -0
  579. package/src/services/engine-streaming.test.ts +80 -0
  580. package/src/services/engine.ts +2096 -0
  581. package/src/services/ensure-local-artifacts.integration.test.ts +273 -0
  582. package/src/services/ensure-local-artifacts.test.ts +368 -0
  583. package/src/services/ensure-local-artifacts.ts +351 -0
  584. package/src/services/external-scanner.ts +312 -0
  585. package/src/services/ffi-llm-mock.ts +354 -0
  586. package/src/services/ffi-llm-streaming-abi.ts +445 -0
  587. package/src/services/ffi-streaming-backend.ts +418 -0
  588. package/src/services/ffi-streaming-runner.test.ts +220 -0
  589. package/src/services/ffi-streaming-runner.ts +407 -0
  590. package/src/services/ffi-unload-ordering.test.ts +166 -0
  591. package/src/services/fused-eliza1-no-regression.test.ts +144 -0
  592. package/src/services/gpu-autotune.ts +534 -0
  593. package/src/services/gpu-detect.ts +139 -0
  594. package/src/services/handler-registry.ts +240 -0
  595. package/src/services/hardware.test.ts +236 -0
  596. package/src/services/hardware.ts +438 -0
  597. package/src/services/image-description-runtime.test.ts +61 -0
  598. package/src/services/image-description-runtime.ts +118 -0
  599. package/src/services/imagegen/aosp-unavailable.ts +229 -0
  600. package/src/services/imagegen/backend-selector.test.ts +190 -0
  601. package/src/services/imagegen/backend-selector.ts +277 -0
  602. package/src/services/imagegen/coreml-unavailable.ts +237 -0
  603. package/src/services/imagegen/errors.ts +40 -0
  604. package/src/services/imagegen/index.ts +144 -0
  605. package/src/services/imagegen/mflux.ts +313 -0
  606. package/src/services/imagegen/sd-cpp.ts +715 -0
  607. package/src/services/imagegen/tensorrt-unavailable.ts +295 -0
  608. package/src/services/imagegen/types.ts +193 -0
  609. package/src/services/index.ts +229 -0
  610. package/src/services/inference-capabilities.test.ts +75 -0
  611. package/src/services/inference-capabilities.ts +204 -0
  612. package/src/services/inference-telemetry.ts +143 -0
  613. package/src/services/ios-llama-streaming.ts +248 -0
  614. package/src/services/kv-spill.test.ts +222 -0
  615. package/src/services/kv-spill.ts +357 -0
  616. package/src/services/latency-trace.test.ts +266 -0
  617. package/src/services/latency-trace.ts +844 -0
  618. package/src/services/lib-target.test.ts +145 -0
  619. package/src/services/lib-target.ts +102 -0
  620. package/src/services/live-signals.test.ts +132 -0
  621. package/src/services/live-signals.ts +177 -0
  622. package/src/services/llama-server-metrics.test.ts +168 -0
  623. package/src/services/llama-server-metrics.ts +304 -0
  624. package/src/services/llm-streaming-binding.ts +136 -0
  625. package/src/services/load-args.ts +81 -0
  626. package/src/services/manifest/eliza-1.manifest.v1.json +790 -0
  627. package/src/services/manifest/index.ts +72 -0
  628. package/src/services/manifest/manifest.test.ts +791 -0
  629. package/src/services/manifest/schema.ts +761 -0
  630. package/src/services/manifest/types.ts +61 -0
  631. package/src/services/manifest/validator.ts +633 -0
  632. package/src/services/memory-arbiter.test.ts +558 -0
  633. package/src/services/memory-arbiter.ts +991 -0
  634. package/src/services/memory-benchmark.test.ts +91 -0
  635. package/src/services/memory-benchmark.ts +354 -0
  636. package/src/services/memory-monitor.test.ts +232 -0
  637. package/src/services/memory-monitor.ts +309 -0
  638. package/src/services/memory-pressure.ts +414 -0
  639. package/src/services/mtp-doctor.ts +86 -0
  640. package/src/services/network-policy.ts +346 -0
  641. package/src/services/paths.ts +25 -0
  642. package/src/services/planner-skeleton.ts +175 -0
  643. package/src/services/providers.ts +507 -0
  644. package/src/services/ram-budget-cache.test.ts +164 -0
  645. package/src/services/ram-budget.ts +309 -0
  646. package/src/services/readiness.test.ts +87 -0
  647. package/src/services/readiness.ts +238 -0
  648. package/src/services/recommendation.test.ts +216 -0
  649. package/src/services/recommendation.ts +671 -0
  650. package/src/services/registry.ts +157 -0
  651. package/src/services/required-kernels-gate.test.ts +64 -0
  652. package/src/services/router-handler.test.ts +45 -0
  653. package/src/services/router-handler.ts +426 -0
  654. package/src/services/routing-policy.test.ts +352 -0
  655. package/src/services/routing-policy.ts +367 -0
  656. package/src/services/routing-preferences.ts +17 -0
  657. package/src/services/runtime-target.ts +154 -0
  658. package/src/services/service.test.ts +223 -0
  659. package/src/services/service.ts +750 -0
  660. package/src/services/session-pool.ts +153 -0
  661. package/src/services/structured-output/deterministic-repair.test.ts +169 -0
  662. package/src/services/structured-output/deterministic-repair.ts +443 -0
  663. package/src/services/structured-output/index.ts +4 -0
  664. package/src/services/structured-output.test.ts +483 -0
  665. package/src/services/structured-output.ts +712 -0
  666. package/src/services/system-memory.test.ts +47 -0
  667. package/src/services/system-memory.ts +67 -0
  668. package/src/services/transcription-priority.test.ts +211 -0
  669. package/src/services/types.ts +59 -0
  670. package/src/services/verify-on-device.test.ts +87 -0
  671. package/src/services/verify-on-device.ts +127 -0
  672. package/src/services/verify.ts +13 -0
  673. package/src/services/vision/aosp-unavailable.ts +163 -0
  674. package/src/services/vision/capacitor-llama.ts +255 -0
  675. package/src/services/vision/cloud-fallback.test.ts +243 -0
  676. package/src/services/vision/cloud-fallback.ts +268 -0
  677. package/src/services/vision/fallback-chain.test.ts +86 -0
  678. package/src/services/vision/hash.ts +157 -0
  679. package/src/services/vision/index.ts +251 -0
  680. package/src/services/vision/llama-server.ts +177 -0
  681. package/src/services/vision/types.ts +163 -0
  682. package/src/services/vision/vast-fallback.ts +127 -0
  683. package/src/services/vision-embedding-cache.ts +189 -0
  684. package/src/services/voice/VOICE_WORKBENCH.md +133 -0
  685. package/src/services/voice/__fixtures__/voice-workbench-logic-baseline.json +180 -0
  686. package/src/services/voice/__test-helpers__/fake-ffi.ts +94 -0
  687. package/src/services/voice/__test-helpers__/synthetic-speech.ts +194 -0
  688. package/src/services/voice/__tests__/checkpoint-manager.test.ts +241 -0
  689. package/src/services/voice/__tests__/checkpoint-policy.test.ts +270 -0
  690. package/src/services/voice/__tests__/eager-context-builder.test.ts +257 -0
  691. package/src/services/voice/__tests__/eliza1-eot-scorer.test.ts +288 -0
  692. package/src/services/voice/__tests__/eot-classifier.test.ts +431 -0
  693. package/src/services/voice/__tests__/optimistic-rollback.test.ts +312 -0
  694. package/src/services/voice/__tests__/prefill-client.test.ts +266 -0
  695. package/src/services/voice/__tests__/prefix-preserving-queue.test.ts +208 -0
  696. package/src/services/voice/__tests__/streaming-asr.test.ts +450 -0
  697. package/src/services/voice/__tests__/streaming-transcriber.test.ts +339 -0
  698. package/src/services/voice/__tests__/turn-detector-resolver.test.ts +195 -0
  699. package/src/services/voice/__tests__/voice-state-machine-prefill.test.ts +275 -0
  700. package/src/services/voice/__tests__/voice-state-machine.test.ts +354 -0
  701. package/src/services/voice/acoustic-speaker-attribution.test.ts +165 -0
  702. package/src/services/voice/acoustic-speaker-attribution.ts +336 -0
  703. package/src/services/voice/asr-timed.real.test.ts +139 -0
  704. package/src/services/voice/audio-frame-consumer.test.ts +669 -0
  705. package/src/services/voice/audio-frame-consumer.ts +651 -0
  706. package/src/services/voice/barge-in.test.ts +244 -0
  707. package/src/services/voice/barge-in.ts +335 -0
  708. package/src/services/voice/cancellation-coordinator.test.ts +196 -0
  709. package/src/services/voice/cancellation-coordinator.ts +269 -0
  710. package/src/services/voice/checkpoint-manager.ts +401 -0
  711. package/src/services/voice/checkpoint-policy.ts +336 -0
  712. package/src/services/voice/composite-eot-classifier.test.ts +59 -0
  713. package/src/services/voice/corpus-augment.test.ts +276 -0
  714. package/src/services/voice/corpus-augment.ts +451 -0
  715. package/src/services/voice/corpus-generator.test.ts +201 -0
  716. package/src/services/voice/corpus-generator.ts +413 -0
  717. package/src/services/voice/diarization-error-rate.greedy.test.ts +140 -0
  718. package/src/services/voice/diarization-error-rate.test.ts +100 -0
  719. package/src/services/voice/diarization-error-rate.ts +249 -0
  720. package/src/services/voice/e2e-harness.der.test.ts +94 -0
  721. package/src/services/voice/e2e-harness.respond-eot-entity.test.ts +277 -0
  722. package/src/services/voice/e2e-harness.security-echo.test.ts +103 -0
  723. package/src/services/voice/e2e-harness.test.ts +182 -0
  724. package/src/services/voice/e2e-harness.ts +902 -0
  725. package/src/services/voice/eager-context-builder.ts +262 -0
  726. package/src/services/voice/echo-delay.test.ts +118 -0
  727. package/src/services/voice/echo-delay.ts +135 -0
  728. package/src/services/voice/echo-metrics.test.ts +17 -0
  729. package/src/services/voice/echo-metrics.ts +20 -0
  730. package/src/services/voice/echo-reference-buffer.test.ts +86 -0
  731. package/src/services/voice/echo-reference-buffer.ts +165 -0
  732. package/src/services/voice/eliza1-eot-scorer.ts +242 -0
  733. package/src/services/voice/embedding-server.ts +200 -0
  734. package/src/services/voice/embedding.test.ts +131 -0
  735. package/src/services/voice/embedding.ts +242 -0
  736. package/src/services/voice/emotion-attribution.test.ts +129 -0
  737. package/src/services/voice/emotion-attribution.ts +361 -0
  738. package/src/services/voice/engine-bridge-cancellation.test.ts +422 -0
  739. package/src/services/voice/engine-bridge-transcript-join.test.ts +278 -0
  740. package/src/services/voice/engine-bridge.test.ts +384 -0
  741. package/src/services/voice/engine-bridge.ts +2343 -0
  742. package/src/services/voice/eot-classifier-ggml.ts +569 -0
  743. package/src/services/voice/eot-classifier.test.ts +98 -0
  744. package/src/services/voice/eot-classifier.ts +422 -0
  745. package/src/services/voice/errors.ts +34 -0
  746. package/src/services/voice/expressive-tags.asr.test.ts +77 -0
  747. package/src/services/voice/expressive-tags.test.ts +102 -0
  748. package/src/services/voice/expressive-tags.ts +405 -0
  749. package/src/services/voice/ffi-bindings.test.ts +735 -0
  750. package/src/services/voice/ffi-bindings.ts +3387 -0
  751. package/src/services/voice/first-line-cache.ts +725 -0
  752. package/src/services/voice/fused-eot-scorer.ts +139 -0
  753. package/src/services/voice/index.ts +502 -0
  754. package/src/services/voice/kokoro/__tests__/kokoro-backend.test.ts +262 -0
  755. package/src/services/voice/kokoro/__tests__/kokoro-engine-bridge.real.test.ts +236 -0
  756. package/src/services/voice/kokoro/__tests__/kokoro-engine-bridge.test.ts +60 -0
  757. package/src/services/voice/kokoro/__tests__/kokoro-engine-discovery.test.ts +277 -0
  758. package/src/services/voice/kokoro/__tests__/kokoro-ffi-runtime.test.ts +235 -0
  759. package/src/services/voice/kokoro/__tests__/kokoro-runtime.test.ts +95 -0
  760. package/src/services/voice/kokoro/__tests__/phonemizer.test.ts +53 -0
  761. package/src/services/voice/kokoro/__tests__/runtime-selection.test.ts +67 -0
  762. package/src/services/voice/kokoro/__tests__/voices.test.ts +57 -0
  763. package/src/services/voice/kokoro/index.ts +79 -0
  764. package/src/services/voice/kokoro/kokoro-backend.ts +223 -0
  765. package/src/services/voice/kokoro/kokoro-engine-discovery.ts +177 -0
  766. package/src/services/voice/kokoro/kokoro-ffi-runtime.ts +233 -0
  767. package/src/services/voice/kokoro/kokoro-runtime.ts +170 -0
  768. package/src/services/voice/kokoro/phoneme-stream.ts +123 -0
  769. package/src/services/voice/kokoro/phonemizer.ts +344 -0
  770. package/src/services/voice/kokoro/pick-runtime.test.ts +91 -0
  771. package/src/services/voice/kokoro/pick-runtime.ts +130 -0
  772. package/src/services/voice/kokoro/runtime-selection.ts +64 -0
  773. package/src/services/voice/kokoro/types.ts +95 -0
  774. package/src/services/voice/kokoro/voice-presets.ts +129 -0
  775. package/src/services/voice/kokoro/voices.ts +64 -0
  776. package/src/services/voice/lifecycle.test.ts +315 -0
  777. package/src/services/voice/lifecycle.ts +301 -0
  778. package/src/services/voice/live-diarization-session.echo.test.ts +232 -0
  779. package/src/services/voice/live-diarization-session.ts +622 -0
  780. package/src/services/voice/metric-math.test.ts +61 -0
  781. package/src/services/voice/metric-math.ts +25 -0
  782. package/src/services/voice/mic-source.test.ts +210 -0
  783. package/src/services/voice/mic-source.ts +503 -0
  784. package/src/services/voice/nlms-echo-canceller.test.ts +244 -0
  785. package/src/services/voice/nlms-echo-canceller.ts +317 -0
  786. package/src/services/voice/optimistic-policy.power-source.test.ts +36 -0
  787. package/src/services/voice/optimistic-policy.test.ts +101 -0
  788. package/src/services/voice/optimistic-policy.ts +192 -0
  789. package/src/services/voice/optimistic-rollback.ts +343 -0
  790. package/src/services/voice/partial-stabilizer.test.ts +68 -0
  791. package/src/services/voice/partial-stabilizer.ts +140 -0
  792. package/src/services/voice/phoneme-tokenizer.ts +158 -0
  793. package/src/services/voice/phrase-cache.test.ts +242 -0
  794. package/src/services/voice/phrase-cache.ts +186 -0
  795. package/src/services/voice/phrase-chunker.test.ts +239 -0
  796. package/src/services/voice/phrase-chunker.ts +281 -0
  797. package/src/services/voice/pipeline-impls.l6.test.ts +110 -0
  798. package/src/services/voice/pipeline-impls.test.ts +292 -0
  799. package/src/services/voice/pipeline-impls.ts +315 -0
  800. package/src/services/voice/pipeline.ts +504 -0
  801. package/src/services/voice/prefill-client.ts +316 -0
  802. package/src/services/voice/prefix-preserving-queue.ts +162 -0
  803. package/src/services/voice/profile-store.ts +887 -0
  804. package/src/services/voice/real-audio-decode.test.ts +148 -0
  805. package/src/services/voice/research/VOICE_8785_ASSESSMENT.md +141 -0
  806. package/src/services/voice/research/VOICE_PIPELINE_RESEARCH_2026.md +117 -0
  807. package/src/services/voice/research/VOICE_VALIDATION_RUNBOOK.md +135 -0
  808. package/src/services/voice/ring-buffer.test.ts +129 -0
  809. package/src/services/voice/ring-buffer.ts +123 -0
  810. package/src/services/voice/rollback-queue.ts +74 -0
  811. package/src/services/voice/samantha-preset-placeholder.test.ts +97 -0
  812. package/src/services/voice/samantha-preset-placeholder.ts +148 -0
  813. package/src/services/voice/samantha-preset-regenerator.ts +393 -0
  814. package/src/services/voice/samantha-preset-regenerator.wav.test.ts +90 -0
  815. package/src/services/voice/scheduler.t2.test.ts +141 -0
  816. package/src/services/voice/scheduler.ts +927 -0
  817. package/src/services/voice/self-voice-imprint.test.ts +59 -0
  818. package/src/services/voice/self-voice-imprint.ts +102 -0
  819. package/src/services/voice/shared-resources.ts +343 -0
  820. package/src/services/voice/speaker/attribution-pipeline.test.ts +221 -0
  821. package/src/services/voice/speaker/attribution-pipeline.ts +449 -0
  822. package/src/services/voice/speaker/diarizer-fused.real.test.ts +100 -0
  823. package/src/services/voice/speaker/diarizer-fused.ts +154 -0
  824. package/src/services/voice/speaker/diarizer.ts +218 -0
  825. package/src/services/voice/speaker/encoder-fused.real.test.ts +113 -0
  826. package/src/services/voice/speaker/encoder-fused.ts +138 -0
  827. package/src/services/voice/speaker/encoder-ggml.test.ts +59 -0
  828. package/src/services/voice/speaker/encoder-ggml.ts +79 -0
  829. package/src/services/voice/speaker/encoder.ts +105 -0
  830. package/src/services/voice/speaker-imprint.test.ts +185 -0
  831. package/src/services/voice/speaker-imprint.ts +312 -0
  832. package/src/services/voice/speaker-preset-cache.test.ts +154 -0
  833. package/src/services/voice/speaker-preset-cache.ts +195 -0
  834. package/src/services/voice/streaming-asr/streaming-pipeline-adapter.ts +292 -0
  835. package/src/services/voice/system-audio-sink.test.ts +29 -0
  836. package/src/services/voice/system-audio-sink.ts +366 -0
  837. package/src/services/voice/transcriber.asr-backend.test.ts +76 -0
  838. package/src/services/voice/transcriber.test.ts +392 -0
  839. package/src/services/voice/transcriber.ts +704 -0
  840. package/src/services/voice/transcript-knowledge.test.ts +68 -0
  841. package/src/services/voice/transcript-knowledge.ts +75 -0
  842. package/src/services/voice/transcript-service.test.ts +195 -0
  843. package/src/services/voice/transcript-service.ts +205 -0
  844. package/src/services/voice/transcript-store.test.ts +189 -0
  845. package/src/services/voice/transcript-store.ts +164 -0
  846. package/src/services/voice/turn-controller.test.ts +575 -0
  847. package/src/services/voice/turn-controller.ts +596 -0
  848. package/src/services/voice/types.ts +699 -0
  849. package/src/services/voice/vad.test.ts +498 -0
  850. package/src/services/voice/vad.ts +832 -0
  851. package/src/services/voice/vad.v1-v4.test.ts +222 -0
  852. package/src/services/voice/voice-budget.test.ts +415 -0
  853. package/src/services/voice/voice-budget.ts +635 -0
  854. package/src/services/voice/voice-duet.test.ts +375 -0
  855. package/src/services/voice/voice-emotion-classifier.test.ts +210 -0
  856. package/src/services/voice/voice-emotion-classifier.ts +273 -0
  857. package/src/services/voice/voice-hardening.fuzz.test.ts +116 -0
  858. package/src/services/voice/voice-preload-predictor.test.ts +130 -0
  859. package/src/services/voice/voice-preload-predictor.ts +113 -0
  860. package/src/services/voice/voice-preset-format.fuzz.test.ts +89 -0
  861. package/src/services/voice/voice-preset-format.test.ts +75 -0
  862. package/src/services/voice/voice-preset-format.ts +713 -0
  863. package/src/services/voice/voice-preset-generator.test.ts +89 -0
  864. package/src/services/voice/voice-profile-artifact.test.ts +138 -0
  865. package/src/services/voice/voice-profile-artifact.ts +518 -0
  866. package/src/services/voice/voice-profile-routes.test.ts +429 -0
  867. package/src/services/voice/voice-profile-routes.ts +425 -0
  868. package/src/services/voice/voice-scenario.test.ts +159 -0
  869. package/src/services/voice/voice-scenario.ts +280 -0
  870. package/src/services/voice/voice-scenario.turn-helpers.test.ts +77 -0
  871. package/src/services/voice/voice-state-machine.ts +727 -0
  872. package/src/services/voice/voice-workbench-report.test.ts +168 -0
  873. package/src/services/voice/voice-workbench-report.ts +367 -0
  874. package/src/services/voice/voice-workbench.test.ts +158 -0
  875. package/src/services/voice/voice.test.ts +1070 -0
  876. package/src/services/voice/wake-word-ggml.ts +319 -0
  877. package/src/services/voice/wake-word.test.ts +298 -0
  878. package/src/services/voice/wake-word.ts +554 -0
  879. package/src/services/voice/wav-codec.fuzz.test.ts +59 -0
  880. package/src/services/voice/wav-codec.test.ts +32 -0
  881. package/src/services/voice/wav-codec.ts +101 -0
  882. package/src/services/voice/workbench-entrypoint.test.ts +55 -0
  883. package/src/services/voice/workbench-entrypoint.ts +88 -0
  884. package/src/services/voice/workbench-headless-runner.test.ts +162 -0
  885. package/src/services/voice/workbench-headless-runner.ts +396 -0
  886. package/src/services/voice/workbench-logic-services.test.ts +225 -0
  887. package/src/services/voice/workbench-logic-services.ts +184 -0
  888. package/src/services/voice/workbench-real-services.ts +629 -0
  889. package/src/services/voice/workbench-scenarios.ts +407 -0
  890. package/src/services/voice/wrap-with-first-line-cache.ts +267 -0
  891. package/src/services/voice-model-updater.ts +724 -0
  892. package/src/services/voice-prewarm.ts +51 -0
  893. package/src/voice-workbench.ts +71 -0
@@ -0,0 +1,135 @@
1
+ /**
2
+ * Voice on/off state machine.
3
+ *
4
+ * Per `packages/inference/AGENTS.md` §4 + this scope's design goals,
5
+ * voice is OFF by default. Text + native MTP are hot; TTS, ASR, the
6
+ * speaker preset cache and phrase cache, the chunker, the rollback
7
+ * queue, the barge-in controller, and the ring buffer are NOT in RAM.
8
+ *
9
+ * Transitions are explicit. Illegal transitions throw — no
10
+ * "log-and-continue" (AGENTS.md §9). The transition to `voice-off`
11
+ * MUST issue a real page-eviction call on the TTS/ASR mmap regions
12
+ * (see `MmapRegionHandle.evictPages()` in `shared-resources.ts`) so
13
+ * the OS can reclaim those pages.
14
+ *
15
+ * ┌──────────┐ start() ┌──────────────┐ armed ┌──────────┐
16
+ * │ voice-off│─────────▶│ voice-arming │────────▶│ voice-on │
17
+ * └──────────┘ └──────────────┘ └──────────┘
18
+ * ▲ │ start fails │ stop()
19
+ * │ disarmed ▼ ▼
20
+ * ┌──────────────────┐ ┌──────────────┐ ┌────────────────────┐
21
+ * │ voice-disarming │◀───│ voice-error │ │ voice-disarming │
22
+ * └──────────────────┘ └──────────────┘ └────────────────────┘
23
+ * │ │
24
+ * └────────────────── disarmed ◀───────────────┘
25
+ *
26
+ * `voice-error` is terminal until `reset()` is called. There is no
27
+ * automatic retry: a missing kernel, mmap fail, or RAM-pressure
28
+ * refusal MUST surface to the caller.
29
+ */
30
+ import type { KernelSet, MmapRegionHandle, MtpDraftHandle, RefCountedResource, SchedulerSlot, SharedResourceRegistry, SharedTokenizer } from "./shared-resources";
31
+ /**
32
+ * Discriminated union — never widened to `string`. Each state may carry
33
+ * payload (the `armed` payload includes the loaded mmap regions so the
34
+ * disarm path can call `evictPages()` on them).
35
+ */
36
+ export type VoiceLifecycleState = {
37
+ readonly kind: "voice-off";
38
+ } | {
39
+ readonly kind: "voice-arming";
40
+ } | {
41
+ readonly kind: "voice-on";
42
+ readonly resources: ArmedResources;
43
+ } | {
44
+ readonly kind: "voice-disarming";
45
+ readonly resources: ArmedResources;
46
+ } | {
47
+ readonly kind: "voice-error";
48
+ readonly error: VoiceLifecycleError;
49
+ };
50
+ /**
51
+ * Resources held while voice is armed. Released in reverse order on
52
+ * disarm; the mmap regions get an explicit `evictPages()` call before
53
+ * `release()` so the OS reclaims pages even if the FFI keeps the file
54
+ * descriptor open for the next re-arm.
55
+ */
56
+ export interface ArmedResources {
57
+ readonly tts: MmapRegionHandle;
58
+ readonly asr: MmapRegionHandle;
59
+ /** Speaker preset + phrase cache — kept in a small LRU after disarm. */
60
+ readonly voiceCaches: RefCountedResource;
61
+ /** Voice-specific scheduler nodes (chunker, rollback, ring buffer, barge-in). */
62
+ readonly voiceSchedulerNodes: RefCountedResource;
63
+ }
64
+ /**
65
+ * Resources held while text is up. Acquired by the engine when the
66
+ * bundle is activated; voice piggy-backs on these without re-loading.
67
+ */
68
+ export interface TextResources {
69
+ readonly tokenizer: SharedTokenizer;
70
+ readonly textWeights: MmapRegionHandle;
71
+ readonly kernels: KernelSet;
72
+ readonly scheduler: SchedulerSlot;
73
+ readonly mtp: MtpDraftHandle;
74
+ }
75
+ /**
76
+ * Structured failure surfaced to the caller. Never a generic `Error` —
77
+ * the caller (engine + UI) needs to distinguish RAM pressure from a
78
+ * missing kernel from a manifest mismatch (AGENTS.md §3).
79
+ */
80
+ export declare class VoiceLifecycleError extends Error {
81
+ readonly code: "ram-pressure" | "mmap-fail" | "kernel-missing" | "illegal-transition" | "arm-failed" | "disarm-failed";
82
+ constructor(code: VoiceLifecycleError["code"], message: string);
83
+ }
84
+ /**
85
+ * Loader functions injected at construction. Splitting these out keeps
86
+ * `VoiceLifecycle` independent of FFI specifics — the engine wires real
87
+ * loaders at runtime; tests inject mocks. Each loader MUST throw on
88
+ * failure (AGENTS.md §3 — no silent fallback).
89
+ */
90
+ export interface VoiceLifecycleLoaders {
91
+ loadTtsRegion(): Promise<MmapRegionHandle>;
92
+ loadAsrRegion(): Promise<MmapRegionHandle>;
93
+ loadVoiceCaches(): Promise<RefCountedResource>;
94
+ loadVoiceSchedulerNodes(): Promise<RefCountedResource>;
95
+ }
96
+ export interface VoiceLifecycleEvents {
97
+ onTransition?(prev: VoiceLifecycleState, next: VoiceLifecycleState): void;
98
+ }
99
+ export declare class VoiceLifecycle {
100
+ private state;
101
+ private readonly registry;
102
+ private readonly loaders;
103
+ private readonly events;
104
+ constructor(args: {
105
+ registry: SharedResourceRegistry;
106
+ loaders: VoiceLifecycleLoaders;
107
+ events?: VoiceLifecycleEvents;
108
+ });
109
+ current(): VoiceLifecycleState;
110
+ /**
111
+ * Transition `voice-off → voice-arming → voice-on`. Loads TTS + ASR
112
+ * mmap regions, voice caches, voice scheduler nodes. Each load throws
113
+ * on failure; a thrown loader transitions the state to `voice-error`
114
+ * and re-throws so the caller sees the structured cause. No partial
115
+ * arm: either all four resources are held or none are.
116
+ */
117
+ arm(): Promise<ArmedResources>;
118
+ /**
119
+ * Transition `voice-on → voice-disarming → voice-off`. Calls
120
+ * `evictPages()` on the TTS + ASR mmap regions before releasing them
121
+ * so the OS reclaims the pages even if another consumer keeps the
122
+ * file descriptor open. The voice caches stay in the registry as
123
+ * tiny (KB-scale) entries — only the heavy mmap regions get evicted.
124
+ */
125
+ disarm(): Promise<void>;
126
+ /**
127
+ * Reset from `voice-error` back to `voice-off`. Required because
128
+ * `voice-error` is terminal — the engine must explicitly acknowledge
129
+ * the failure before the user can re-attempt voice. There is no
130
+ * automatic retry path.
131
+ */
132
+ reset(): void;
133
+ private transition;
134
+ }
135
+ //# sourceMappingURL=lifecycle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../../../src/services/voice/lifecycle.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,KAAK,EACX,SAAS,EACT,gBAAgB,EAChB,cAAc,EACd,kBAAkB,EAClB,aAAa,EACb,sBAAsB,EACtB,eAAe,EACf,MAAM,oBAAoB,CAAC;AAE5B;;;;GAIG;AACH,MAAM,MAAM,mBAAmB,GAC5B;IAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAA;CAAE,GAC9B;IAAE,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAA;CAAE,GACjC;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,cAAc,CAAA;CAAE,GACjE;IAAE,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,cAAc,CAAA;CAAE,GACxE;IAAE,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,mBAAmB,CAAA;CAAE,CAAC;AAEzE;;;;;GAKG;AACH,MAAM,WAAW,cAAc;IAC9B,QAAQ,CAAC,GAAG,EAAE,gBAAgB,CAAC;IAC/B,QAAQ,CAAC,GAAG,EAAE,gBAAgB,CAAC;IAC/B,wEAAwE;IACxE,QAAQ,CAAC,WAAW,EAAE,kBAAkB,CAAC;IACzC,iFAAiF;IACjF,QAAQ,CAAC,mBAAmB,EAAE,kBAAkB,CAAC;CACjD;AAED;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC7B,QAAQ,CAAC,SAAS,EAAE,eAAe,CAAC;IACpC,QAAQ,CAAC,WAAW,EAAE,gBAAgB,CAAC;IACvC,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC;IAClC,QAAQ,CAAC,GAAG,EAAE,cAAc,CAAC;CAC7B;AAED;;;;GAIG;AACH,qBAAa,mBAAoB,SAAQ,KAAK;IAC7C,QAAQ,CAAC,IAAI,EACV,cAAc,GACd,WAAW,GACX,gBAAgB,GAChB,oBAAoB,GACpB,YAAY,GACZ,eAAe,CAAC;gBAEP,IAAI,EAAE,mBAAmB,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,MAAM;CAK9D;AAED;;;;;GAKG;AACH,MAAM,WAAW,qBAAqB;IACrC,aAAa,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC3C,aAAa,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC3C,eAAe,IAAI,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAC/C,uBAAuB,IAAI,OAAO,CAAC,kBAAkB,CAAC,CAAC;CACvD;AAED,MAAM,WAAW,oBAAoB;IACpC,YAAY,CAAC,CAAC,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,mBAAmB,GAAG,IAAI,CAAC;CAC1E;AAED,qBAAa,cAAc;IAC1B,OAAO,CAAC,KAAK,CAA8C;IAC3D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAyB;IAClD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAwB;IAChD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAuB;gBAElC,IAAI,EAAE;QACjB,QAAQ,EAAE,sBAAsB,CAAC;QACjC,OAAO,EAAE,qBAAqB,CAAC;QAC/B,MAAM,CAAC,EAAE,oBAAoB,CAAC;KAC9B;IAMD,OAAO,IAAI,mBAAmB;IAI9B;;;;;;OAMG;IACG,GAAG,IAAI,OAAO,CAAC,cAAc,CAAC;IAqDpC;;;;;;OAMG;IACG,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAqD7B;;;;;OAKG;IACH,KAAK,IAAI,IAAI;IAUb,OAAO,CAAC,UAAU;CAKlB"}
@@ -0,0 +1,196 @@
1
+ /**
2
+ * Live on-device diarization session — the agent-process owner of an
3
+ * {@link AudioFrameConsumer} wired to the REAL fused VAD / encoder / diarizer /
4
+ * attribution stack.
5
+ *
6
+ * The Android `audioFrame` PCM stream is produced in the Capacitor WebView
7
+ * (JS renderer) but the voice FFI runs in the embedded bun agent process. The
8
+ * agent's `/api/voice/audio-frames` route pumps batched frames into the single
9
+ * session this module owns, where the consumer segments turns, runs
10
+ * diarization + speaker attribution, and emits VOICE_TURN_OBSERVED.
11
+ *
12
+ * This module is the agent-side mirror of the host smoke harness
13
+ * (`packages/app-core/scripts/voice-attribution-smoke.ts`): same real models,
14
+ * same consumer, fed live frames over HTTP instead of a WAV.
15
+ *
16
+ * Single fused engine: VAD, the WeSpeaker speaker encoder, and the pyannote
17
+ * diarizer all run through the ONE fused `libelizainference` handle via its
18
+ * `eliza_inference_vad_*` / `_speaker_*` / `_diariz_*` ABI (the user directive:
19
+ * no separate bun:ffi-musl libs). Resolution:
20
+ * - fused lib: `$ELIZA_INFERENCE_LIBRARY` (exact) or `$ELIZA_INFERENCE_LIB_DIR`
21
+ * (dir) — both exported by ElizaAgentService on Android to the app
22
+ * nativeLibraryDir.
23
+ * - context bundle root: `$ELIZA_VOICE_MODEL_DIR` (the same dir the GGUFs
24
+ * live under); the fused runtime resolves the per-model GGUFs from there.
25
+ */
26
+ import { type AttributionPipelineLike, type AudioFrameConsumerDeps, type AudioFrameEvent, type EchoReferenceProvider, type RuntimeEventSink, type TurnTranscriber, type VadSegmenter } from "./audio-frame-consumer.js";
27
+ export type { RuntimeEventSink } from "./audio-frame-consumer.js";
28
+ export interface LiveDiarizationStatus {
29
+ /** True once the consumer + real fused deps are loaded and accepting frames. */
30
+ ready: boolean;
31
+ /** Resolved fused-library path (null when it could not be resolved). */
32
+ libs: {
33
+ fusedInference: string | null;
34
+ };
35
+ /** Resolved context-bundle dir for the fused runtime. */
36
+ models: {
37
+ dir: string;
38
+ };
39
+ /** Frames received from the WebView across this session. */
40
+ framesReceived: number;
41
+ /** Frames dropped at the decode boundary. */
42
+ framesDropped: number;
43
+ /** Turns segmented + attributed so far. */
44
+ turnsObserved: number;
45
+ /** Live AEC wiring status. Echo cancellation runs only when this is true. */
46
+ aec: {
47
+ echoReferenceWired: boolean;
48
+ /** Playback→mic delay (samples @16 kHz) currently applied to align the
49
+ * far-end reference — self-calibrated from real echo when confident,
50
+ * otherwise the `ELIZA_VOICE_ECHO_DELAY_MS` seed (default 0). */
51
+ echoDelaySamples: number;
52
+ /** Peak cross-correlation [0,1] of the last accepted delay calibration;
53
+ * 0 until a confident estimate replaces the seed. */
54
+ echoDelayConfidence: number;
55
+ };
56
+ /** The most recent attributed turns (capped), for device-evidence reads. */
57
+ recentTurns: LiveDiarizationTurnSummary[];
58
+ /** Populated only when readiness failed — the precise blocker. */
59
+ error?: string;
60
+ }
61
+ /** A compact, JSON-safe summary of one attributed turn (no PCM/embeddings). */
62
+ export interface LiveDiarizationTurnSummary {
63
+ turnId: string;
64
+ startedAtMs: number;
65
+ endedAtMs: number;
66
+ samples: number;
67
+ durationMs: number;
68
+ hasSpeaker: boolean;
69
+ speakerEntityId: string | null;
70
+ speakerConfidence: number | null;
71
+ segments: number;
72
+ agentShouldSpeak: boolean | null;
73
+ nextSpeaker: string | null;
74
+ }
75
+ export interface LiveDiarizationSessionOptions {
76
+ /**
77
+ * Agent-playback PCM provider for AEC. The caller owns playback capture and
78
+ * delay calibration when supplied. Without an external provider, the session
79
+ * uses its built-in playback buffer fed by /api/voice/playback-frames.
80
+ */
81
+ echoReference?: EchoReferenceProvider | null;
82
+ }
83
+ export interface LiveDiarizationConsumerDepsInput {
84
+ vad: VadSegmenter;
85
+ pipeline: AttributionPipelineLike;
86
+ runtime: RuntimeEventSink;
87
+ transcribe?: TurnTranscriber | null;
88
+ echoReference?: EchoReferenceProvider | null;
89
+ }
90
+ export declare function buildLiveDiarizationConsumerDeps({ vad, pipeline, runtime, transcribe, echoReference, }: LiveDiarizationConsumerDepsInput): AudioFrameConsumerDeps;
91
+ /**
92
+ * Owns the single live diarization consumer for the agent process. Built
93
+ * lazily on first frame batch so it does not load voice models at boot.
94
+ */
95
+ export declare class LiveDiarizationSession {
96
+ private readonly runtime;
97
+ private readonly options;
98
+ private consumer;
99
+ private ffi;
100
+ private ctx;
101
+ private encoder;
102
+ private diarizer;
103
+ private vad;
104
+ private building;
105
+ private framesReceived;
106
+ private turnsObserved;
107
+ private readonly recentTurns;
108
+ private resolvedLibPath;
109
+ private buildError;
110
+ /** True once the fused ASR region is mmap-acquired for per-turn transcribe. */
111
+ private asrRegionAcquired;
112
+ /**
113
+ * Far-end (agent TTS playback) alignment buffer for echo cancellation
114
+ * (#9583/#9455). Fed by {@link pushPlayback}; read per mic frame via the
115
+ * consumer's `echoReference` seam. Inert (zero far-end ⇒ NLMS passthrough)
116
+ * until the device streams playback, so wiring it never regresses the
117
+ * no-playback case.
118
+ */
119
+ private readonly echoBuffer;
120
+ /**
121
+ * Playback→mic delay applied when reading the far-end reference. Seeded from
122
+ * `ELIZA_VOICE_ECHO_DELAY_MS` (default 0) and then SELF-CALIBRATED on the live
123
+ * path: once enough playback-active echo is observed, `estimateEchoDelaySamples`
124
+ * (#9586) recovers the bulk transport lag by cross-correlation and replaces the
125
+ * seed (#9583). Mutable for that reason.
126
+ */
127
+ private echoDelaySamples;
128
+ private echoDelayConfidence;
129
+ private echoDelayCalibrated;
130
+ /** Rolling near/far windows accumulated only while the far-end is active, used
131
+ * once to estimate the playback→mic delay. Cleared after a confident estimate
132
+ * and on {@link resetPlayback}. */
133
+ private calNear;
134
+ private calFar;
135
+ private calSampleCount;
136
+ constructor(runtime: RuntimeEventSink, options?: LiveDiarizationSessionOptions);
137
+ /** Ensure the real-deps consumer exists; idempotent + concurrency-safe. */
138
+ private ensureBuilt;
139
+ private build;
140
+ /**
141
+ * Build a per-turn ASR transcriber over the fused batch decoder
142
+ * (`eliza_inference_asr_transcribe`). Returns null when the fused build
143
+ * exposes no ASR decoder; acquiring the ASR mmap region is best-effort (a
144
+ * missing bundled ASR model leaves the path diarization-only rather than
145
+ * failing the whole session). One batch decode per finalized turn — the turn
146
+ * is already fully buffered for attribution, so no streaming state is needed.
147
+ */
148
+ private buildTurnTranscriber;
149
+ private recordTurn;
150
+ /**
151
+ * The far-end (agent TTS playback) reference aligned to a mic frame of
152
+ * `samples` samples — the consumer's `echoReference` seam (#9455/#9583).
153
+ * Reads the alignment buffer at the configured playback→mic delay; the slice
154
+ * is zero-filled (⇒ NLMS passthrough) until the device streams playback.
155
+ * Public so the wiring is unit-testable without the fused FFI.
156
+ */
157
+ echoReferenceFrame(timestampMs: number, samples: number): Float32Array;
158
+ /** Current self-calibrated AEC delay state (for status + tests). */
159
+ aecDelayState(): {
160
+ delaySamples: number;
161
+ confidence: number;
162
+ calibrated: boolean;
163
+ };
164
+ /**
165
+ * Self-calibrate the playback→mic delay (#9583/#9586) from real echo. Called
166
+ * per mic frame while uncalibrated: when the far-end is active (the agent is
167
+ * playing TTS), accumulate the time-aligned near/far windows; once ~0.75 s of
168
+ * playback-active audio is buffered, recover the bulk transport lag by
169
+ * cross-correlation and, if confident, replace the static seed. One-shot — the
170
+ * device's speaker→mic path is stable, so we lock the first confident estimate
171
+ * and stop re-measuring. Public so it can be unit-tested without the fused FFI.
172
+ */
173
+ observeForDelayCalibration(nearPcm: Float32Array, timestampMs: number): void;
174
+ /**
175
+ * Feed a batch of agent-playback (far-end) frames for echo cancellation. The
176
+ * device captures the agent's TTS output in the SAME base64 LE-s16 16 kHz
177
+ * mono wire format as the mic and POSTs it in real time as it renders; we
178
+ * decode + append to the alignment buffer. The device MUST also call
179
+ * {@link resetPlayback} when playback stops (or on barge-in) so the canceller
180
+ * never aligns a later mic frame to stale, no-longer-playing audio.
181
+ */
182
+ pushPlayback(frames: AudioFrameEvent[]): void;
183
+ /** Drop buffered far-end playback (playback stopped / barge-in). Also clears
184
+ * the in-progress delay-calibration window (it would otherwise straddle a
185
+ * playback gap); the already-learned delay is kept. */
186
+ resetPlayback(): void;
187
+ /** Feed a batch of WebView-captured frames; resolves once VAD has processed them. */
188
+ ingest(frames: AudioFrameEvent[]): Promise<void>;
189
+ /** Flush any open segment (call on stopAudioFrames) and await attribution. */
190
+ flush(): Promise<void>;
191
+ /** Build (if needed) and report status — the device-evidence read. */
192
+ status(): Promise<LiveDiarizationStatus>;
193
+ /** Release native handles + listeners. */
194
+ close(): Promise<void>;
195
+ }
196
+ //# sourceMappingURL=live-diarization-session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"live-diarization-session.d.ts","sourceRoot":"","sources":["../../../src/services/voice/live-diarization-session.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Pure rounding + percentile helpers shared by the voice E2E harness and the
3
+ * voice workbench report (#8785). No models, filesystem, or network — just
4
+ * numeric formatting so both consumers report identical metric values.
5
+ */
6
+ export declare function round1(value: number): number;
7
+ export declare function round4(value: number): number;
8
+ /** Nearest-rank percentile over a sample (null when empty), non-finite filtered. */
9
+ export declare function percentile(values: ReadonlyArray<number>, p: number): number | null;
10
+ //# sourceMappingURL=metric-math.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metric-math.d.ts","sourceRoot":"","sources":["../../../src/services/voice/metric-math.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE5C;AAED,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE5C;AAED,oFAAoF;AACpF,wBAAgB,UAAU,CACzB,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,EAC7B,CAAC,EAAE,MAAM,GACP,MAAM,GAAG,IAAI,CAMf"}
@@ -0,0 +1,136 @@
1
+ /**
2
+ * Mic capture → `PcmRingBuffer` + VAD tee.
3
+ *
4
+ * The `MicSource` interface (see `./types`) is the only seam the rest of the
5
+ * voice loop sees. The first concrete implementation, `DesktopMicSource`,
6
+ * shells out to the platform's standard PCM-capable recorder, emits 16 kHz
7
+ * mono `PcmFrame`s, and lets callers tee them anywhere:
8
+ *
9
+ * mic → DesktopMicSource ─┬─→ PcmRingBuffer (ASR reads PCM from here)
10
+ * └─→ VadDetector (speech / barge-in signals)
11
+ *
12
+ * Per-platform recorder selection (in priority order):
13
+ * - Linux: `arecord` (alsa-utils), else `parec` (PulseAudio), else `sox`/`rec`.
14
+ * - macOS: `sox`/`rec` (`sox -d`), else `ffmpeg -f avfoundation`.
15
+ * - Windows: `ffmpeg -f dshow` (DirectShow capture — bundled with most
16
+ * Windows installs of ffmpeg; the renderer's `getUserMedia` path
17
+ * feeding `PushMicSource` is the no-ffmpeg route).
18
+ *
19
+ * Connectors that already have a decoded PCM stream (Discord voice, the
20
+ * Electrobun renderer's `getUserMedia` path, a mobile capture callback —
21
+ * the Capacitor `Microphone` plugin on iOS/Android) implement `MicSource`
22
+ * over `PushMicSource` instead of spawning a process.
23
+ *
24
+ * No fallback sludge: if no recorder binary is on PATH (and no override
25
+ * argv was given), `start()` throws — the caller surfaces "no mic backend
26
+ * available", it does not pretend to capture silence.
27
+ */
28
+ import { PcmRingBuffer } from "./ring-buffer";
29
+ import type { AudioSink, MicSource, PcmFrame } from "./types";
30
+ /**
31
+ * Pick the recorder that streams raw signed 16-bit LE mono PCM at
32
+ * `sampleRate` on stdout for the host platform. Returns `null` when none is
33
+ * available — the caller throws an actionable error or uses `PushMicSource`.
34
+ * Exported so the cross-platform preflight (`voice:interactive
35
+ * --platform-report`) can report which recorder the host would use.
36
+ */
37
+ export declare function resolveDesktopRecorder(sampleRate: number, device?: string): {
38
+ program: string;
39
+ argv: string[];
40
+ } | null;
41
+ declare abstract class BaseMicSource implements MicSource {
42
+ readonly sampleRate: number;
43
+ readonly frameSamples: number;
44
+ protected readonly frameListeners: Set<(frame: PcmFrame) => void>;
45
+ protected readonly errorListeners: Set<(error: Error) => void>;
46
+ protected _running: boolean;
47
+ constructor(sampleRate: number, frameSamples: number);
48
+ get running(): boolean;
49
+ abstract start(): Promise<void>;
50
+ abstract stop(): Promise<void>;
51
+ onFrame(listener: (frame: PcmFrame) => void): () => void;
52
+ onError(listener: (error: Error) => void): () => void;
53
+ protected emitFrame(pcm: Float32Array, timestampMs: number): void;
54
+ protected emitError(error: Error): void;
55
+ }
56
+ export interface DesktopMicSourceOptions {
57
+ /** Capture sample rate. Default 16 kHz (what VAD + Gemma ASR expect). */
58
+ sampleRate?: number;
59
+ /** Frame duration in ms. Default 32 ms (one Silero window @ 16 kHz). */
60
+ frameMs?: number;
61
+ /** Recorder program. Default: auto-resolved per platform (see module doc). */
62
+ program?: string;
63
+ /** Override the recorder argv. When set, `program` is the executable and
64
+ * these are the args (must produce raw little-endian signed 16-bit mono
65
+ * PCM at `sampleRate` on stdout). */
66
+ argv?: string[];
67
+ /** Capture device — ALSA name (Linux `arecord -D`), avfoundation index
68
+ * (macOS, e.g. `:0`), or DirectShow friendly name (Windows). */
69
+ device?: string;
70
+ }
71
+ /**
72
+ * `MicSource` backed by a recorder subprocess. The recorder is auto-resolved
73
+ * per platform (Linux: `arecord`/`parec`/`sox`; macOS: `sox -d`/`ffmpeg -f
74
+ * avfoundation`; Windows: `ffmpeg -f dshow`); all stream raw PCM16 mono to
75
+ * stdout, which this class re-frames into fixed-size `Float32Array` frames
76
+ * in [-1, 1].
77
+ *
78
+ * When no recorder is available `start()` throws — the renderer's
79
+ * `getUserMedia` path (or the Capacitor `Microphone` plugin on mobile),
80
+ * both feeding a `PushMicSource`, are the no-CLI route.
81
+ */
82
+ export declare class DesktopMicSource extends BaseMicSource {
83
+ private readonly program;
84
+ private readonly argv;
85
+ private proc;
86
+ private readonly carry;
87
+ private readonly bytesPerFrame;
88
+ constructor(opts?: DesktopMicSourceOptions);
89
+ start(): Promise<void>;
90
+ stop(): Promise<void>;
91
+ private ingest;
92
+ }
93
+ /**
94
+ * `MicSource` driven by an external producer (Discord opus-decoded PCM, the
95
+ * Electrobun renderer's `getUserMedia` chunks, a mobile capture callback,
96
+ * or a test). The producer calls `push(pcm)` (any sample count, mono,
97
+ * already at `sampleRate`); this class re-frames it to `frameSamples`-long
98
+ * frames and emits them. `start()` / `stop()` just toggle the gate.
99
+ */
100
+ export declare class PushMicSource extends BaseMicSource {
101
+ private pending;
102
+ private pendingStartTimestampMs;
103
+ constructor(opts?: {
104
+ sampleRate?: number;
105
+ frameMs?: number;
106
+ frameSamples?: number;
107
+ });
108
+ start(): Promise<void>;
109
+ stop(): Promise<void>;
110
+ /**
111
+ * Feed mono PCM in [-1, 1] at `sampleRate`. Re-frames and emits. The
112
+ * timestamp is the first sample's timestamp; emitted frames advance by
113
+ * their sample offset so a large pushed buffer still presents a real audio
114
+ * timeline to VAD/ASR.
115
+ */
116
+ push(pcm: Float32Array, timestampMs?: number): void;
117
+ /** Feed mono PCM16 little-endian bytes (Discord / browser path). */
118
+ pushPcm16(bytes: Uint8Array, timestampMs?: number): void;
119
+ /** Surface a fatal producer-side error to subscribers. */
120
+ fail(error: Error): void;
121
+ }
122
+ /**
123
+ * Wire a `MicSource` to a `PcmRingBuffer` (the buffer the ASR reads PCM
124
+ * from). Returns the ring buffer and an unsubscribe function. The ring
125
+ * buffer's `onOverflow` is forwarded so callers can apply backpressure.
126
+ */
127
+ export declare function pipeMicToRingBuffer(source: MicSource, sink: AudioSink, opts?: {
128
+ /** Ring buffer capacity in samples. Default 8 s at the source rate. */
129
+ capacitySamples?: number;
130
+ onOverflow?: (droppedSamples: number) => void;
131
+ }): {
132
+ ringBuffer: PcmRingBuffer;
133
+ unsubscribe: () => void;
134
+ };
135
+ export {};
136
+ //# sourceMappingURL=mic-source.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mic-source.d.ts","sourceRoot":"","sources":["../../../src/services/voice/mic-source.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,137 @@
1
+ /**
2
+ * nlms-echo-canceller.ts — PCM acoustic echo cancellation for the live
3
+ * half-duplex voice pipeline (#9455).
4
+ *
5
+ * When the agent speaks, its TTS playback leaks back into the microphone and
6
+ * corrupts ASR / VAD / diarization (the agent hears itself). This is a
7
+ * single-channel adaptive echo canceller: a normalized least-mean-squares
8
+ * (NLMS) FIR filter models the playback→mic acoustic path and subtracts the
9
+ * estimated echo from the near-end (mic) signal sample-by-sample.
10
+ *
11
+ * near-end d[n] = local_speech[n] + echo[n] (the raw mic)
12
+ * far-end x[n] = agent TTS playback (the reference)
13
+ * estimate ŷ[n] = Σ_k w[k]·x[n−k] (modeled echo)
14
+ * output e[n] = d[n] − ŷ[n] (echo-cancelled mic → ASR)
15
+ * update w[k] += μ·e[n]·x[n−k] / (‖x‖² + ε) (NLMS adaptation)
16
+ *
17
+ * All audio is 16 kHz mono Float32 [-1, 1] — the pipeline's internal format
18
+ * (see audio-frame-consumer.ts). The filter length must cover the
19
+ * playback→mic delay plus the room's reverberation tail; for tails longer than
20
+ * the filter, calibrate `delaySamples` (the bulk transport delay) so the
21
+ * adaptive taps only have to model the short residual impulse.
22
+ *
23
+ * Scope: this targets the dominant failure mode — the agent transcribing its
24
+ * own TTS while the *user is silent* (echo-only), where it achieves ~29 dB of
25
+ * echo-return-loss-enhancement. A far-end-vs-near-end double-talk detector
26
+ * freezes adaptation when a local talker is active so the filter cannot learn
27
+ * (and cancel) the user's voice; barge-in itself is handled upstream by the
28
+ * barge-in detector (which stops playback). Full double-talk residual-echo
29
+ * suppression is AEC3-class work and intentionally out of scope here.
30
+ *
31
+ * Pure DSP, zero dependencies — verified by nlms-echo-canceller.test.ts
32
+ * (ERLE on synthetic echo, passthrough, stability, reset).
33
+ */
34
+ export interface NlmsEchoCancellerOptions {
35
+ /** Adaptive FIR length in samples. 256 ≈ 16 ms of impulse response @16 kHz. */
36
+ filterTaps?: number;
37
+ /** NLMS step size in (0, 2). Larger = faster adaptation, less stable. */
38
+ mu?: number;
39
+ /** Regularization added to the reference energy to avoid divide-by-zero. */
40
+ epsilon?: number;
41
+ /**
42
+ * Bulk playback→mic transport delay in samples. The reference is consumed
43
+ * `delaySamples` ahead of the near-end so the adaptive taps only model the
44
+ * residual room impulse, not the (potentially large) transport latency.
45
+ */
46
+ delaySamples?: number;
47
+ /**
48
+ * Double-talk detector ratio. When the smoothed near-end power exceeds
49
+ * `dtdRatio`× the smoothed far-end reference power (a passive echo path
50
+ * attenuates, so echo power stays below the reference), a local talker is
51
+ * assumed active and adaptation is frozen so the filter cannot learn (and
52
+ * cancel) the user's voice. Set 0 to disable.
53
+ */
54
+ dtdRatio?: number;
55
+ /**
56
+ * Opt-in nonlinear residual-echo suppressor (#9583/#9649). After the linear
57
+ * NLMS subtracts the modeled echo, an echo-only frame (the agent is speaking,
58
+ * the user is NOT — far-end power exceeds near-end power and no double-talk)
59
+ * still carries the residual echo the finite-length filter could not remove.
60
+ * When enabled, the residual on those frames is scaled toward zero. It is
61
+ * **default-off** and never engages during double-talk or near-end-dominant
62
+ * frames, so it can never attenuate the user's voice. Pass `true` for the
63
+ * default gain or `{ gain }` to tune.
64
+ */
65
+ residualSuppression?: boolean | ResidualSuppressionOptions;
66
+ }
67
+ export interface ResidualSuppressionOptions {
68
+ /**
69
+ * Gain (0,1] applied to the residual on echo-only frames. Lower = stronger
70
+ * suppression. Default 0.15 (~−16 dB) — aggressive enough to flatten residual
71
+ * echo while leaving headroom for the gate's hysteresis.
72
+ */
73
+ gain?: number;
74
+ }
75
+ export declare class NlmsEchoCanceller {
76
+ private readonly w;
77
+ private readonly x;
78
+ private readonly taps;
79
+ private readonly mu;
80
+ private readonly eps;
81
+ private readonly delay;
82
+ private readonly dtdRatio;
83
+ /** Residual-suppressor gain, or null when the suppressor is disabled (default). */
84
+ private readonly resGain;
85
+ /** Pending far-end samples not yet aligned to a near-end sample (delay line). */
86
+ private readonly delayLine;
87
+ private xEnergy;
88
+ private peakXEnergy;
89
+ private pNear;
90
+ private pFar;
91
+ private hangover;
92
+ private lastEchoPow;
93
+ /** Stay frozen ~30 ms after the last double-talk trigger so the filter is not
94
+ * corrupted by the bursty onset/offset of the near-end talker. */
95
+ private static readonly HANGOVER_SAMPLES;
96
+ /** Per-sample decay of the far-end energy envelope (~1 s time constant) so a
97
+ * short TTS pause keeps the far-end-active gate closed through the gap. */
98
+ private static readonly PEAK_DECAY;
99
+ /** Far-end is "active" only when the instantaneous ‖x‖² is within this
100
+ * fraction (−20 dB) of the recent envelope. Below it there is no echo to
101
+ * learn, so adaptation freezes (see process()). */
102
+ private static readonly FAR_ACTIVITY_FRAC;
103
+ /** NLMS regularization as a fraction of the far-end envelope. Keeps the step
104
+ * bounded when ‖x‖² momentarily underflows, so a quiet far-end passage can't
105
+ * make the normaliser collapse to the absolute `eps` and blow the filter up. */
106
+ private static readonly REG_FRAC;
107
+ private lastResidualPow;
108
+ constructor(opts?: NlmsEchoCancellerOptions);
109
+ /**
110
+ * Cancel echo from one block of mic audio.
111
+ *
112
+ * @param nearEnd raw mic block (local speech + echo), Float32 [-1, 1]
113
+ * @param farEnd agent playback reference for the same time window. Pass an
114
+ * empty/zero array when the agent is NOT speaking — the filter
115
+ * then passes the mic through unchanged (output ≈ input).
116
+ * @returns echo-cancelled near-end block (same length as `nearEnd`).
117
+ */
118
+ process(nearEnd: Float32Array, farEnd: Float32Array): Float32Array;
119
+ /**
120
+ * Advance cheap detector/reference state while the far-end is silent without
121
+ * running the FIR echo-estimation loop. Learned filter weights are preserved,
122
+ * but stale playback samples are removed from the delay line/ring so the next
123
+ * non-empty reference frame cannot subtract an echo estimate from a previous
124
+ * utterance.
125
+ */
126
+ observeFarEndSilence(nearEnd: Float32Array): void;
127
+ /** Echo-return-loss-enhancement (dB) over the last processed block. Higher is
128
+ * better; >10 dB is a meaningful cancellation. Returns 0 when there is no
129
+ * modeled echo (agent silent) so a passthrough block reads as "no gain". */
130
+ get lastErleDb(): number;
131
+ /** Reset adaptation (e.g. when the playback path changes). */
132
+ reset(): void;
133
+ /** Shift a new far-end sample into the ring buffer, maintaining ‖x‖²
134
+ * incrementally (drop the oldest sample's energy, add the newest). */
135
+ private pushRef;
136
+ }
137
+ //# sourceMappingURL=nlms-echo-canceller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nlms-echo-canceller.d.ts","sourceRoot":"","sources":["../../../src/services/voice/nlms-echo-canceller.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH,MAAM,WAAW,wBAAwB;IACxC,+EAA+E;IAC/E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yEAAyE;IACzE,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,4EAA4E;IAC5E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;;;;;OASG;IACH,mBAAmB,CAAC,EAAE,OAAO,GAAG,0BAA0B,CAAC;CAC3D;AAED,MAAM,WAAW,0BAA0B;IAC1C;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACd;AAWD,qBAAa,iBAAiB;IAC7B,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAe;IACjC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAe;IACjC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAS;IAC5B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,mFAAmF;IACnF,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAgB;IACxC,iFAAiF;IACjF,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAgB;IAC1C,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,IAAI,CAAK;IACjB,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,WAAW,CAAK;IAExB;sEACkE;IAClE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAO;IAC/C;+EAC2E;IAC3E,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAW;IAC7C;;uDAEmD;IACnD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAQ;IACjD;;oFAEgF;IAChF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAQ;IACxC,OAAO,CAAC,eAAe,CAAK;gBAEhB,IAAI,GAAE,wBAA6B;IAc/C;;;;;;;;OAQG;IACH,OAAO,CAAC,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,YAAY,GAAG,YAAY;IAiGlE;;;;;;OAMG;IACH,oBAAoB,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI;IAqBjD;;gFAE4E;IAC5E,IAAI,UAAU,IAAI,MAAM,CAGvB;IAED,8DAA8D;IAC9D,KAAK,IAAI,IAAI;IAab;0EACsE;IACtE,OAAO,CAAC,OAAO;CAOf"}