@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,762 @@
1
+ /**
2
+ * Engine ↔ voice scheduler bridge.
3
+ *
4
+ * Adapts the live `LocalInferenceEngine` (`engine.ts`) plus the MTP
5
+ * llama-server (`ffi-streaming-backend.ts`) onto the voice scaffold's
6
+ * `VoiceScheduler`. See `packages/inference/AGENTS.md` §4 for the
7
+ * streaming graph this implements:
8
+ *
9
+ * ASR → text tokens → MTP drafter ↔ target verifier (text model)
10
+ * → phrase chunker → speaker preset cache + phrase cache
11
+ * → OmniVoice TTS → PCM ring buffer → audio out
12
+ *
13
+ * Plus rollback queue (MTP rejection → cancel pending TTS chunks)
14
+ * and barge-in cancellation (mic VAD → drain ring buffer + cancel TTS).
15
+ *
16
+ * Two TTS backends are exposed:
17
+ * - `StubOmniVoiceBackend`: deterministic synthetic PCM. Used by tests
18
+ * and any path that wants the streaming graph without real audio.
19
+ * - `FfiOmniVoiceBackend`: forwards through the fused
20
+ * `libelizainference.{dylib,so,dll}` ABI. The bridge creates the
21
+ * context lazily when voice is armed or first used, so voice-off
22
+ * does not keep OmniVoice weights resident.
23
+ *
24
+ * Per AGENTS.md §3 + §9 (no defensive code, no log-and-continue), every
25
+ * startup precondition surfaces as a thrown `VoiceStartupError`. There
26
+ * is no silent fallback to text-only.
27
+ */
28
+ import type { IAgentRuntime } from "@elizaos/core";
29
+ import type { VoiceCancellationReason } from "@elizaos/shared";
30
+ import { type CoordinatorRuntime, VoiceCancellationCoordinator } from "./cancellation-coordinator";
31
+ import { VoiceStartupError } from "./errors";
32
+ import type { AsrWordTiming, ElizaInferenceContextHandle, ElizaInferenceFfi, NativeVerifierEvent } from "./ffi-bindings";
33
+ import { KokoroTtsBackend } from "./kokoro/kokoro-backend";
34
+ import type { KokoroEngineDiscoveryResult } from "./kokoro/kokoro-engine-discovery";
35
+ import { VoiceLifecycle, type VoiceLifecycleLoaders } from "./lifecycle";
36
+ import { OptimisticGenerationPolicy, type OptimisticPolicyOptions } from "./optimistic-policy";
37
+ import { type CachedPhraseAudio } from "./phrase-cache";
38
+ import { VoicePipeline, type VoicePipelineConfig, type VoicePipelineEvents } from "./pipeline";
39
+ import { type MtpTextRunner } from "./pipeline-impls";
40
+ import type { VoiceProfileStore } from "./profile-store";
41
+ import { type SchedulerEvents, VoiceScheduler } from "./scheduler";
42
+ import { SharedResourceRegistry } from "./shared-resources";
43
+ import { type VoiceAttributionOutput } from "./speaker/attribution-pipeline";
44
+ import type { AudioChunk, AudioSink, OmniVoiceBackend, Phrase, RejectedTokenRange, SpeakerPreset, StreamingTranscriber, TextToken, TranscriptionAudio, VadEventSource } from "./types";
45
+ import { decodeMonoPcm16Wav, encodeMonoPcm16Wav } from "./wav-codec";
46
+ /** Re-exported from `./errors` so existing `engine-bridge` importers don't churn. */
47
+ export { VoiceStartupError };
48
+ /**
49
+ * Native verifier callbacks report rejected token ranges as half-open
50
+ * `[from, to)` intervals. The scheduler rollback queue uses inclusive
51
+ * token indexes, so convert in exactly one place.
52
+ */
53
+ export declare function nativeRejectedRangeToRollbackRange(event: Pick<NativeVerifierEvent, "rejectedFrom" | "rejectedTo">): RejectedTokenRange | null;
54
+ /**
55
+ * One PCM segment delivered to a `StreamingTtsBackend.synthesizeStream`
56
+ * consumer (W9's scheduler) as TTS decodes it. `isFinal` marks the
57
+ * zero-length tail chunk that closes the phrase.
58
+ */
59
+ export interface TtsPcmChunk {
60
+ pcm: Float32Array;
61
+ sampleRate: number;
62
+ isFinal: boolean;
63
+ }
64
+ /**
65
+ * Streaming-TTS seam between the fused `libelizainference` runtime and
66
+ * W9's voice scheduler. The scheduler calls `synthesizeStream(...)` for
67
+ * a phrase and writes each delivered `pcm` segment into the
68
+ * `PcmRingBuffer` on the same scheduler tick (AGENTS.md §4 —
69
+ * phrase-chunk → TTS within one scheduler tick); returning `true` from
70
+ * `onChunk` (or flipping `cancelSignal.cancelled`) hard-cancels the
71
+ * in-flight forward pass at the next kernel boundary (barge-in /
72
+ * MTP-rejected tail).
73
+ *
74
+ * Both `OmniVoiceBackend` implementations in this module satisfy it:
75
+ * - `FfiOmniVoiceBackend` forwards to
76
+ * `eliza_inference_tts_synthesize_stream` when the loaded build
77
+ * advertises streaming TTS (`tts_stream_supported() == 1`), else it
78
+ * synthesizes whole and emits the result as one body chunk + a final
79
+ * tail (no silent "streaming" lie — the chunk count just collapses
80
+ * to one when the build is non-streaming);
81
+ * - `StubOmniVoiceBackend` emits deterministic synthetic PCM split
82
+ * into a fixed number of chunks so scheduler tests can observe the
83
+ * incremental handoff without a real model.
84
+ */
85
+ export interface StreamingTtsBackend {
86
+ /**
87
+ * Synthesize `phrase` with `preset` and deliver PCM in chunks. The
88
+ * scheduler owns the ring-buffer write inside `onChunk`. Resolves with
89
+ * `cancelled: true` if `onChunk` requested a stop (or `cancelSignal`
90
+ * was set), `false` on a clean finish. The final `onChunk` call always
91
+ * has `isFinal: true` (possibly a zero-length `pcm`) so the consumer
92
+ * can settle per-phrase state.
93
+ */
94
+ synthesizeStream(args: {
95
+ phrase: Phrase;
96
+ preset: SpeakerPreset;
97
+ cancelSignal: {
98
+ cancelled: boolean;
99
+ };
100
+ onChunk: (chunk: TtsPcmChunk) => boolean | undefined;
101
+ onKernelTick?: () => void;
102
+ }): Promise<{
103
+ cancelled: boolean;
104
+ }>;
105
+ }
106
+ /** True when `backend` implements the `StreamingTtsBackend` seam. */
107
+ export declare function isStreamingTtsBackend(backend: OmniVoiceBackend): backend is OmniVoiceBackend & StreamingTtsBackend;
108
+ /**
109
+ * Deterministic test TTS backend. Each phrase yields
110
+ * `STUB_PCM_MS_PER_PHRASE` ms of silence (zeros), with the
111
+ * cancel signal honoured at the kernel-tick boundary so barge-in tests
112
+ * observe cancellation without waiting on a real model.
113
+ */
114
+ export declare class StubOmniVoiceBackend implements OmniVoiceBackend, StreamingTtsBackend {
115
+ readonly id: "stub";
116
+ private readonly sampleRate;
117
+ calls: number;
118
+ streamCalls: number;
119
+ constructor(sampleRate?: number);
120
+ synthesize(args: {
121
+ phrase: Phrase;
122
+ preset: SpeakerPreset;
123
+ cancelSignal: {
124
+ cancelled: boolean;
125
+ };
126
+ onKernelTick?: () => void;
127
+ }): Promise<AudioChunk>;
128
+ synthesizeStream(args: {
129
+ phrase: Phrase;
130
+ preset: SpeakerPreset;
131
+ cancelSignal: {
132
+ cancelled: boolean;
133
+ };
134
+ onChunk: (chunk: TtsPcmChunk) => boolean | undefined;
135
+ onKernelTick?: () => void;
136
+ }): Promise<{
137
+ cancelled: boolean;
138
+ }>;
139
+ }
140
+ /**
141
+ * FFI-backed TTS backend. Forwards each `synthesize()` call through the
142
+ * fused `libelizainference` ABI declared in
143
+ * `packages/app-core/scripts/omnivoice-fuse/ffi.h`. The library handle
144
+ * + a per-engine context pointer are held by the bridge and passed in
145
+ * at construction so this backend stays a thin adapter.
146
+ *
147
+ * Until the real fused build ships, the binding is exercised against
148
+ * the compatibility C library at `scripts/omnivoice-fuse/ffi-stub.c`, which returns
149
+ * `ELIZA_ERR_NOT_IMPLEMENTED` for `tts_synthesize` — the binding then
150
+ * raises `VoiceLifecycleError({code:"kernel-missing"})`. The adapter
151
+ * re-wraps that as `VoiceStartupError("missing-fused-build", ...)` so
152
+ * the engine layer's startup-error taxonomy stays unified. No silent
153
+ * fallback (AGENTS.md §3 + §9).
154
+ */
155
+ export declare class FfiOmniVoiceBackend implements OmniVoiceBackend, StreamingTtsBackend {
156
+ readonly id: "ffi";
157
+ private readonly ffi;
158
+ private readonly getContext;
159
+ private readonly sampleRate;
160
+ private readonly maxSecondsPerPhrase;
161
+ constructor(args: {
162
+ ffi: ElizaInferenceFfi;
163
+ ctx?: ElizaInferenceContextHandle;
164
+ getContext?: () => ElizaInferenceContextHandle;
165
+ sampleRate?: number;
166
+ maxSecondsPerPhrase?: number;
167
+ });
168
+ /** True when the loaded `libelizainference` advertises streaming TTS. */
169
+ supportsStreamingTts(): boolean;
170
+ /**
171
+ * One-shot synthesis returning the whole phrase as an `AudioChunk`.
172
+ * When the loaded build advertises streaming TTS this routes through
173
+ * `eliza_inference_tts_synthesize_stream` and concatenates the
174
+ * delivered chunks (so the chunk-aware native path is exercised even
175
+ * for whole-phrase callers); otherwise it uses the batch
176
+ * `eliza_inference_tts_synthesize` symbol. `cancelSignal` is honoured
177
+ * at chunk boundaries — a cancelled stream returns whatever was
178
+ * synthesized so far.
179
+ */
180
+ synthesize(args: {
181
+ phrase: Phrase;
182
+ preset: SpeakerPreset;
183
+ cancelSignal: {
184
+ cancelled: boolean;
185
+ };
186
+ onKernelTick?: () => void;
187
+ }): Promise<AudioChunk>;
188
+ /**
189
+ * Streaming synthesis: forwards to `eliza_inference_tts_synthesize_stream`
190
+ * when the build advertises a streaming decoder. When it does NOT
191
+ * (`tts_stream_supported() == 0`), this still satisfies the seam — but
192
+ * with exactly one body chunk + one final tail (the batch synthesis
193
+ * result), so the caller never mistakes a non-streaming build for a
194
+ * streaming one (no fallback sludge — the chunk count is the honest
195
+ * signal). The native side checks `ctx->tts_cancel` (set via
196
+ * `eliza_inference_cancel_tts`) on top of the `onChunk` return value.
197
+ * A non-streaming build cannot be interrupted while the native batch
198
+ * forward pass is inside `ttsSynthesize`; it only observes cancellation
199
+ * before emitting the body chunk. Barge-in-critical product paths should
200
+ * require `supportsStreamingTts()`.
201
+ */
202
+ synthesizeStream(args: {
203
+ phrase: Phrase;
204
+ preset: SpeakerPreset;
205
+ cancelSignal: {
206
+ cancelled: boolean;
207
+ };
208
+ onChunk: (chunk: TtsPcmChunk) => boolean | undefined;
209
+ onKernelTick?: () => void;
210
+ }): Promise<{
211
+ cancelled: boolean;
212
+ }>;
213
+ /** Hard-cancel any in-flight TTS forward pass on this backend's context. */
214
+ cancelTts(): void;
215
+ /**
216
+ * Batch transcription. One-shot callers should use the fused batch ABI
217
+ * directly so the native side receives the original sample-rate metadata
218
+ * and can apply its own audio preprocessing. Live mic streaming remains
219
+ * available through `EngineVoiceBridge.createStreamingTranscriber()`.
220
+ */
221
+ transcribe(args: TranscriptionAudio): Promise<string>;
222
+ /** Transcribe + per-word timings when the fused build is ABI v12+; otherwise
223
+ * the text with empty `words` (the caller degrades to segment highlight). */
224
+ transcribeTimed(args: TranscriptionAudio): Promise<{
225
+ text: string;
226
+ words: AsrWordTiming[];
227
+ }>;
228
+ }
229
+ export interface EngineVoiceBridgeOptions {
230
+ /**
231
+ * Bundle root on disk. Must contain `cache/voice-preset-default.bin`
232
+ * and the FFI library (`lib/libelizainference.{dylib,so}`) when
233
+ * `useFfiBackend === true`.
234
+ */
235
+ bundleRoot: string;
236
+ /**
237
+ * When true, use `FfiOmniVoiceBackend`. When false, use the deterministic test backend
238
+ * only for lifecycle/unit tests; live sessions and direct synthesis reject
239
+ * the deterministic test backend before user-visible audio can be emitted.
240
+ */
241
+ useFfiBackend: boolean;
242
+ /** Override sample rate. Defaults to 24 kHz. */
243
+ sampleRate?: number;
244
+ /** Override ring buffer capacity (samples). Defaults to 4 s @ 24 kHz. */
245
+ ringBufferCapacity?: number;
246
+ /** Phrase chunker `maxTokensPerPhrase` (no-punctuation run-on cap). Defaults to
247
+ * `ELIZA_VOICE_MAX_TOKENS_PER_PHRASE` or 8 (one MTP draft round). */
248
+ maxTokensPerPhrase?: number;
249
+ /** Max concurrent TTS phrase dispatches. Defaults to env or scheduler default. */
250
+ maxInFlightPhrases?: number;
251
+ /**
252
+ * Pre-warmed phrase cache entries. Per AGENTS.md §4, a precomputed
253
+ * phrase cache for common assistant utterances is mandatory for the
254
+ * first-byte-latency win. Empty by default — callers wire actual
255
+ * entries from the bundle when available.
256
+ */
257
+ prewarmedPhrases?: ReadonlyArray<CachedPhraseAudio>;
258
+ /**
259
+ * Optional sink override (e.g. for tests or for routing PCM to a
260
+ * platform-specific audio device). Defaults to the in-memory sink the
261
+ * scheduler creates.
262
+ */
263
+ sink?: AudioSink;
264
+ /** Optional scheduler event listeners (rollback, audio, cancel). */
265
+ events?: SchedulerEvents;
266
+ /**
267
+ * Optional override for the TTS backend. When set, supersedes
268
+ * `useFfiBackend`. Tests use this to inject a controllable backend
269
+ * (e.g. one that holds synthesis open until a deferred resolves) so
270
+ * rollback timing can be observed deterministically.
271
+ */
272
+ backendOverride?: OmniVoiceBackend;
273
+ /**
274
+ * Override only the TTS backend while keeping the fused bundle lifecycle
275
+ * and ASR FFI loaded. Used when a bundle falls back from OmniVoice speech
276
+ * to Kokoro speech but still needs bundled Gemma ASR for mic input.
277
+ */
278
+ ttsBackendOverride?: OmniVoiceBackend;
279
+ /** Optional speaker preset paired with `ttsBackendOverride`. */
280
+ speakerPresetOverride?: SpeakerPreset;
281
+ /**
282
+ * Optional shared resource registry. When the bridge is created
283
+ * inside an engine that already owns one (text + voice on the same
284
+ * tokenizer / mmap regions), the engine passes its registry in so
285
+ * voice ref-counts against the same canonical resources. Tests can
286
+ * leave this unset to get a private registry.
287
+ */
288
+ sharedResources?: SharedResourceRegistry;
289
+ /**
290
+ * Optional lifecycle loaders override. Production wires real
291
+ * `madvise`-backed mmap handles via the FFI; tests inject mocks so
292
+ * the disarm path can assert eviction without a real file mapping.
293
+ * When unset, default loaders are derived from the bundle root.
294
+ */
295
+ lifecycleLoaders?: VoiceLifecycleLoaders;
296
+ /**
297
+ * Construct a `KokoroTtsBackend` directly and skip the bundle-root +
298
+ * speaker-preset + FFI checks the fused omnivoice path requires.
299
+ * Kokoro voices are picked by id (`KOKORO_VOICE_PACKS`), so the bundle's
300
+ * per-user speaker preset is not used. Mutually exclusive with
301
+ * `useFfiBackend: true` and `backendOverride`. Lifecycle loaders
302
+ * default to empty lifecycle handles (ORT owns the model memory; nothing to
303
+ * mmap-evict).
304
+ */
305
+ kokoroOnly?: KokoroEngineDiscoveryResult;
306
+ /**
307
+ * Optional pre-loaded fused inference handle for the `kokoroOnly` path. When
308
+ * set, the Kokoro FFI runtime reuses it instead of dlopen-ing a second copy
309
+ * of `libelizainference` (tests inject a stub; production may share the
310
+ * engine's handle).
311
+ */
312
+ kokoroFfi?: ElizaInferenceFfi;
313
+ /**
314
+ * Optional voice-profile store for speaker-attribution. When set, the
315
+ * bridge constructs a `VoiceAttributionPipeline` and runs attribution
316
+ * in parallel with ASR on every turn via `runVoiceTurn`. Callers receive
317
+ * the resolved `VoiceAttributionOutput` via `onAttribution` in the turn
318
+ * events passed to `runVoiceTurn`.
319
+ *
320
+ * When absent, attribution is skipped and the pipeline operates exactly
321
+ * as before (no diarizer / encoder overhead).
322
+ */
323
+ profileStore?: VoiceProfileStore;
324
+ /**
325
+ * W3-9 / F1 — the agent runtime. When supplied, the bridge constructs a
326
+ * `VoiceCancellationCoordinator` and an `OptimisticGenerationPolicy`
327
+ * scoped to this voice session. The coordinator owns one cancellation
328
+ * token per `roomId` and fans abort out to:
329
+ * 1. `runtime.turnControllers.abortTurn(roomId, reason)` — the
330
+ * planner-loop / action handlers / streaming `useModel` see the
331
+ * abort within one tick.
332
+ * 2. The slot-abort callback (`slotAbort`) when the LM slot id is
333
+ * registered with the turn.
334
+ * 3. The TTS hard-stop callback (`ttsStop`), which the bridge wires
335
+ * to its existing `triggerBargeIn()` (audio sink drain + FFI/HTTP
336
+ * synthesis cancel).
337
+ * 4. The standard `AbortSignal` every fetch / `useModel` / FFI call
338
+ * that took `token.signal` honours.
339
+ *
340
+ * The reverse direction (runtime → voice) is wired symmetrically via
341
+ * the coordinator's `runtime.turnControllers.onEvent` subscription.
342
+ *
343
+ * Omit to keep the prior behaviour — the bridge then exposes no
344
+ * coordinator / policy and callers fall back to the legacy
345
+ * `BargeInController` + `triggerBargeIn()` surface.
346
+ *
347
+ * Structural type — `CoordinatorRuntime` is the minimum surface the
348
+ * coordinator needs (`turnControllers.{abortTurn, onEvent}`). Production
349
+ * passes a full `IAgentRuntime`; tests can pass a fake matching the
350
+ * structural shape.
351
+ */
352
+ runtime?: IAgentRuntime | CoordinatorRuntime;
353
+ /**
354
+ * W3-9 / F1 — optional `OptimisticGenerationPolicy` overrides. When
355
+ * `runtime` is set and `optimisticPolicyOptions` is omitted, the bridge
356
+ * constructs a default policy gated on the resolved power source
357
+ * (plugged-in / battery / unknown) and the canonical EOT threshold.
358
+ */
359
+ optimisticPolicyOptions?: OptimisticPolicyOptions;
360
+ /**
361
+ * W3-9 / F1 — optional LM slot-abort callback for the cancellation
362
+ * coordinator. Production wires this to `MtpLlamaServer.abortSlot`
363
+ * once a slot id is known per turn. The bridge passes this directly
364
+ * into the coordinator; the bridge itself does not own slot ids.
365
+ *
366
+ * Has no effect when `runtime` is unset (no coordinator is constructed).
367
+ */
368
+ slotAbort?: (slotId: number, reason: VoiceCancellationReason) => void;
369
+ /**
370
+ * Live speaker-attribution gating. When set alongside a `profileStore` AND
371
+ * a full `runtime` (with `emitEvent`), `runVoiceTurn` automatically:
372
+ * 1. emits `VOICE_TURN_OBSERVED` for every attributed turn, and
373
+ * 2. folds the diarization decision into the turn's `voiceTurnSignal`
374
+ * (stamped onto `output.turn.metadata`) so the server gate
375
+ * `core.voice_turn_signal` can suppress confident-bystander cross-talk.
376
+ *
377
+ * `knownSpeakerEntityIds` / `ownerEntityId` may be functions so the caller
378
+ * can resolve the enrolled-speaker set lazily per turn (the household roster
379
+ * changes as people are named). When omitted, attribution still emits
380
+ * `VOICE_TURN_OBSERVED` and produces a fail-open signal (no bystander
381
+ * suppression — every attribution is treated as potentially addressed to us).
382
+ */
383
+ liveAttribution?: LiveAttributionConfig;
384
+ }
385
+ /** Gating inputs for the automatic live-attribution → voiceTurnSignal seam. */
386
+ export interface LiveAttributionConfig {
387
+ /** Owner / primary-enrolled entity id (always allowed to speak). */
388
+ ownerEntityId?: string | (() => string | null | undefined);
389
+ /** Entity ids the agent answers without a wake word (owner + enrolled). */
390
+ knownSpeakerEntityIds?: readonly string[] | (() => readonly string[] | undefined);
391
+ /** True when a wake word fired within the recent listen window. */
392
+ wakeWordActive?: boolean | (() => boolean);
393
+ }
394
+ export declare function createKokoroTtsBackend(kokoro: KokoroEngineDiscoveryResult, opts?: {
395
+ bundleRoot?: string;
396
+ ffi?: ElizaInferenceFfi;
397
+ }): KokoroTtsBackend;
398
+ export declare function createKokoroSpeakerPreset(kokoro: KokoroEngineDiscoveryResult): SpeakerPreset;
399
+ /**
400
+ * Per-turn events that include the optional attribution result alongside
401
+ * the existing `VoicePipelineEvents`. The attribution runs in parallel
402
+ * with ASR; it resolves some time after `onAsrComplete` and before
403
+ * `onComplete`.
404
+ */
405
+ export interface VoiceTurnEvents extends VoicePipelineEvents {
406
+ /**
407
+ * Called once per turn when the `VoiceAttributionPipeline` resolves
408
+ * (diarizer + encoder + profile-store match). Only fired when the
409
+ * bridge was constructed with a `profileStore`. May arrive after
410
+ * `onAsrComplete` but before `onComplete`. Fire-and-forget from the
411
+ * bridge's perspective — callers attach the metadata to the turn's
412
+ * transcript asynchronously.
413
+ */
414
+ onAttribution?(output: VoiceAttributionOutput): void;
415
+ }
416
+ /**
417
+ * Wires the voice scaffold (`VoiceScheduler` + helpers) onto the engine.
418
+ * One bridge per active voice session — created in
419
+ * `LocalInferenceEngine.startVoice()` and disposed when the engine
420
+ * unloads or `stopVoice()` is called.
421
+ */
422
+ export declare class EngineVoiceBridge {
423
+ private readonly selfVoiceImprint;
424
+ readonly scheduler: VoiceScheduler;
425
+ readonly backend: OmniVoiceBackend;
426
+ readonly lifecycle: VoiceLifecycle;
427
+ /** Loaded FFI handle when running against the fused build (else null). */
428
+ readonly ffi: ElizaInferenceFfi | null;
429
+ /** Lazily-created FFI context this bridge owns; destroyed in `dispose()`. */
430
+ private readonly ffiContextRef;
431
+ readonly asrAvailable: boolean;
432
+ private readonly bundleRoot;
433
+ /** The phrase cache the scheduler dispatches against — held so the bridge
434
+ * can answer "is phrase X cached" for the first-audio filler and seed the
435
+ * idle-time auto-prewarm. */
436
+ private readonly phraseCache;
437
+ /** In-flight fused turn (`runVoiceTurn`), if any — cancelled on barge-in. */
438
+ private activePipeline;
439
+ /**
440
+ * Optional attribution pipeline. Populated when the bridge was created
441
+ * with a `profileStore` option. When present, `runVoiceTurn` fires
442
+ * attribution in parallel with ASR and delivers the result via
443
+ * `VoiceTurnEvents.onAttribution`.
444
+ */
445
+ private readonly attributionPipeline;
446
+ /**
447
+ * Full agent runtime, retained only when `opts.runtime` supports
448
+ * `emitEvent` (i.e. it is a real `IAgentRuntime`, not the structural
449
+ * `CoordinatorRuntime` a test may pass). Used by the automatic
450
+ * live-attribution seam in `runVoiceTurn` to emit `VOICE_TURN_OBSERVED`.
451
+ * Null when no event-capable runtime was supplied.
452
+ */
453
+ private readonly eventRuntime;
454
+ /** Gating inputs for the live-attribution → voiceTurnSignal seam. */
455
+ private readonly liveAttribution;
456
+ /**
457
+ * W3-9 / F1 — voice cancellation coordinator. Populated when the bridge
458
+ * was created with a `runtime` option. Owns one
459
+ * `VoiceCancellationToken` per active `roomId` and fans abort out to
460
+ * the runtime turn controller, the LM slot, the TTS pipeline, and the
461
+ * standard `AbortSignal`. See `cancellation-coordinator.ts` for the
462
+ * full contract.
463
+ */
464
+ private readonly cancellationCoordinator;
465
+ /**
466
+ * W3-9 / F1 — optimistic-generation policy. Constructed once per
467
+ * session when `runtime` is supplied. Gates the speculative LM prefill
468
+ * at the `firePrefill` site (see `voice-state-machine.ts`). Hot-swappable
469
+ * via `setPowerSource()` / `setOverride()` from Settings or a device-
470
+ * event listener.
471
+ */
472
+ private readonly optimisticGenerationPolicy;
473
+ /**
474
+ * W3-9 / F1 — per-room `BargeInController` bindings the bridge owns.
475
+ * Holds the unsubscribe handle returned by
476
+ * `coordinator.bindBargeInController` so `dispose()` can tear them down.
477
+ */
478
+ private readonly bargeInBindings;
479
+ private constructor();
480
+ get ffiCtx(): ElizaInferenceContextHandle | null;
481
+ /**
482
+ * Tear down the FFI context the bridge owns. Idempotent; safe to call
483
+ * multiple times. Callers should `disarm()` first to drop voice
484
+ * resources, then `dispose()` to close the FFI handle.
485
+ */
486
+ dispose(): void;
487
+ /**
488
+ * Start the voice session for a bundle. Validates the bundle layout
489
+ * up-front (per AGENTS.md §3 + §7 — required artifacts checked before
490
+ * activation) and throws `VoiceStartupError` for any missing piece.
491
+ * No partial activation: either the scheduler exists and is wired or
492
+ * the call throws.
493
+ */
494
+ static start(opts: EngineVoiceBridgeOptions): EngineVoiceBridge;
495
+ /**
496
+ * Kokoro-only path. Skips bundle-root / speaker-preset / FFI checks
497
+ * (Kokoro picks voices by id against `KOKORO_VOICE_PACKS`) and
498
+ * synthesizes a minimal `SpeakerPreset` keyed to the discovered voice
499
+ * id. Defaults lifecycle loaders to empty handles since ORT owns the
500
+ * model memory. `asrAvailable` is `false`: callers needing ASR
501
+ * construct `createStreamingTranscriber` directly.
502
+ */
503
+ private static startKokoroOnly;
504
+ /**
505
+ * True when this bridge runs against a TTS backend that produces real
506
+ * audio — i.e. anything but the `StubOmniVoiceBackend` (which yields
507
+ * zeros and is tests-only). The prewarm + first-audio-filler paths gate
508
+ * on this so the cache never holds silence (AGENTS.md §3 — no fake data).
509
+ */
510
+ hasRealTtsBackend(): boolean;
511
+ /**
512
+ * Lazy-load the TTS mmap region, optional ASR region, and the voice
513
+ * scheduler nodes via the lifecycle state machine. Idempotent for
514
+ * repeated calls in `voice-on` (returns the existing armed resources).
515
+ * Surfaces RAM pressure / mmap-fail / kernel-missing as `VoiceLifecycleError` —
516
+ * see `lifecycle.ts` for the full error taxonomy.
517
+ */
518
+ arm(): Promise<void>;
519
+ /**
520
+ * Drain in-flight TTS, settle the scheduler, then disarm the
521
+ * lifecycle. Disarm calls `evictPages()` (madvise / VirtualUnlock
522
+ * equivalent) on the TTS + optional ASR mmap regions and releases every
523
+ * voice-only ref. Speaker preset + phrase cache survive in the
524
+ * registry as small LRU entries (KB-scale; not worth evicting).
525
+ */
526
+ disarm(): Promise<void>;
527
+ /**
528
+ * Forward an accepted text token from the verifier into the scheduler.
529
+ * Tokens that fill a phrase trigger TTS dispatch on the same scheduler
530
+ * tick (AGENTS.md §4 — no buffering past phrase boundaries).
531
+ */
532
+ pushAcceptedToken(token: TextToken, acceptedAt?: number): Promise<void>;
533
+ /**
534
+ * MTP rejection → rollback queue. The scheduler cancels any
535
+ * in-flight TTS forward pass for phrases that overlap the rejected
536
+ * token range and emits an `onRollback` event for observability.
537
+ * Already-played audio cannot be unplayed; the chunker is sized so
538
+ * rollback is rare and cheap.
539
+ */
540
+ pushRejectedRange(range: RejectedTokenRange): Promise<void>;
541
+ /**
542
+ * Voice activity detected on the mic input → cancel everything.
543
+ * Drains the ring buffer immediately, flushes the chunker queue, and
544
+ * marks every in-flight cancel signal so synthesise loops exit at the
545
+ * next kernel boundary (AGENTS.md §4 — barge-in cancellation MUST be
546
+ * within one kernel tick).
547
+ */
548
+ triggerBargeIn(): void;
549
+ /**
550
+ * W3-9 / F1 — the canonical voice cancellation coordinator for this
551
+ * session, or `null` when the bridge was constructed without a
552
+ * `runtime` option. Callers (turn controller, mic VAD source, UI cancel
553
+ * route) use this to arm per-turn tokens, fire `bargeIn(roomId)` on
554
+ * VAD speech-start, fire `revokeEot(roomId)` when the turn detector
555
+ * revokes a tentative EOT, etc. See
556
+ * `plugins/plugin-local-inference/docs/voice-cancellation-contract.md`.
557
+ */
558
+ cancellationCoordinatorOrNull(): VoiceCancellationCoordinator | null;
559
+ /**
560
+ * W3-9 / F1 — the optimistic-generation policy for this session, or
561
+ * `null` when the bridge was constructed without a `runtime` option.
562
+ * The bridge primes it with the resolved power source at construction
563
+ * time; callers can mutate it via `setPowerSource()` / `setOverride()`
564
+ * to respond to Settings toggles or battery-state events.
565
+ */
566
+ optimisticPolicyOrNull(): OptimisticGenerationPolicy | null;
567
+ /**
568
+ * W3-9 / F1 — bind the scheduler's `BargeInController` into the
569
+ * cancellation coordinator for `roomId`. Subsequent
570
+ * `BargeInController.hardStop()` calls (typically fired by the
571
+ * ASR-confirmed barge-in words ladder) translate into
572
+ * `coordinator.bargeIn(roomId)` so the canonical token (and every
573
+ * downstream consumer: runtime turn abort, LM slot abort, TTS stop,
574
+ * AbortSignal) sees the abort.
575
+ *
576
+ * Idempotent per `roomId` — repeated calls for the same room return
577
+ * the same unsubscribe handle (the prior binding is torn down first).
578
+ *
579
+ * When the bridge was constructed without a `runtime` option, this returns
580
+ * an empty unsubscribe. Callers should still call it
581
+ * unconditionally — back-compat for the legacy path is automatic.
582
+ */
583
+ bindBargeInControllerForRoom(roomId: string): () => void;
584
+ /**
585
+ * Drain pending phrase data and wait for in-flight TTS to settle.
586
+ * Used at the end of a turn so callers can synchronise on a quiescent
587
+ * scheduler before they tear it down.
588
+ */
589
+ settle(): Promise<void>;
590
+ synthesizeTextToWav(text: string, signal?: AbortSignal): Promise<Uint8Array>;
591
+ /**
592
+ * The streaming-TTS seam W9's scheduler drives: returns the active
593
+ * backend as a `StreamingTtsBackend` (`FfiOmniVoiceBackend` against the
594
+ * fused build, `StubOmniVoiceBackend` for tests). The scheduler calls
595
+ * `synthesizeStream(...)` for each phrase and writes the delivered PCM
596
+ * segments into its `PcmRingBuffer` on the same scheduler tick. Returns
597
+ * null when an injected `backendOverride` does not implement the seam.
598
+ */
599
+ streamingTtsBackend(): StreamingTtsBackend | null;
600
+ /**
601
+ * True when the loaded fused `libelizainference` runs the MTP
602
+ * speculative loop in-process and can emit native accept/reject
603
+ * verifier events. When true, callers (W9's turn controller /
604
+ * `ffi-streaming-backend.ts` wiring) should subscribe via
605
+ * `subscribeNativeVerifier()` and SKIP the `llama-server` SSE
606
+ * `{"verifier":{"rejected":[a,b]}}` side-channel — the SSE path stays
607
+ * only as the non-fused desktop text fallback. False whenever there is
608
+ * no FFI handle or the build pre-dates the verifier callback.
609
+ */
610
+ hasNativeVerifier(): boolean;
611
+ /**
612
+ * Register the native MTP verifier callback on the fused runtime
613
+ * and adapt each `NativeVerifierEvent` into the rollback-queue domain:
614
+ * accepted/corrected token-id ranges become `VerifierStreamEvent`s and
615
+ * rejected ranges become `RejectedTokenRange`s fed to `pushRejectedRange`.
616
+ * The returned handle MUST be `close()`d (clears the native callback +
617
+ * frees the bun:ffi `JSCallback`). Throws if no fused runtime is loaded.
618
+ *
619
+ * `onEvent` (optional) also receives the raw `NativeVerifierEvent` for
620
+ * callers that want the accepted-token stream (W9's phrase-chunker can
621
+ * commit accepted draft tokens directly off this instead of round-trip
622
+ * SSE deltas).
623
+ */
624
+ subscribeNativeVerifier(onEvent?: (event: NativeVerifierEvent) => void): {
625
+ close(): void;
626
+ };
627
+ prewarmPhrases(texts: ReadonlyArray<string>, opts?: {
628
+ concurrency?: number;
629
+ }): Promise<{
630
+ warmed: number;
631
+ cached: number;
632
+ }>;
633
+ /**
634
+ * Idle-time auto-prewarm hook: synthesize the canonical phrase-cache seed
635
+ * (`DEFAULT_PHRASE_CACHE_SEED`) so common openers/acks are cached before
636
+ * the next turn. The voice bridge / connector calls this when the loop is
637
+ * idle. No-op (returns `{ warmed: 0, cached: 0 }`) unless a real TTS
638
+ * backend is present and voice is armed — we never cache the test backend's zeros
639
+ * (AGENTS.md §3).
640
+ */
641
+ prewarmIdlePhrases(opts?: {
642
+ concurrency?: number;
643
+ }): Promise<{
644
+ warmed: number;
645
+ cached: number;
646
+ }>;
647
+ /**
648
+ * First-audio filler (AGENTS.md §4 / H4): the instant W1's VAD fires
649
+ * `speech-start`, play a short cached acknowledgement ("one sec", "okay",
650
+ * …) into the audio sink to mask first-token latency. W9's turn controller
651
+ * owns the call site (it gets the `speech-start` event and the cutover to
652
+ * real `replyText` audio); this method is the seam.
653
+ *
654
+ * It only ever plays audio that is *already in the phrase cache* — it does
655
+ * not synthesize. Returns the filler text that was played, or `null` if no
656
+ * filler was played (no real TTS backend, voice not armed, or none of the
657
+ * filler phrases are cached). When real reply audio is ready, W9 cuts over
658
+ * by writing it through the scheduler as usual (a `triggerBargeIn()` or a
659
+ * direct `ringBuffer.drain()` truncates any still-playing filler first).
660
+ */
661
+ playFirstAudioFiller(): string | null;
662
+ /**
663
+ * Construct a `StreamingTranscriber` for live ASR — the contract the
664
+ * voice turn controller (W9) feeds mic frames into and the barge-in
665
+ * word-confirm gate (W1) listens to. Resolves the adapter chain:
666
+ * fused `libelizainference` streaming ASR (final path, gated on a
667
+ * working decoder AND a bundled ASR model) → fused batch ASR over the
668
+ * same bundled model → `AsrUnavailableError`. The Eliza-1 bridge runs
669
+ * only the fused path; the whisper.cpp interim fallback has been removed.
670
+ *
671
+ * Pass W1's `vad` event stream to gate decoding to active speech
672
+ * windows. Caller owns the returned transcriber's lifecycle (`dispose()`).
673
+ */
674
+ createStreamingTranscriber(opts?: {
675
+ vad?: VadEventSource;
676
+ }): StreamingTranscriber;
677
+ /**
678
+ * Batch transcription: one-shot over a whole PCM buffer. When the active
679
+ * backend exposes the fused batch ASR ABI, use it directly so the native
680
+ * side receives the original sample rate and can apply its own resampling.
681
+ * Otherwise drive a `StreamingTranscriber` (fused streaming ASR →
682
+ * fused-batch interim) by feeding the buffer as a single frame and
683
+ * `flush()`ing. Throws `AsrUnavailableError` when no ASR backend is
684
+ * available — never a silent empty string.
685
+ */
686
+ /** Transcribe + per-word timings through the fused ASR (v12). Prefers the
687
+ * backend's timed path; falls back to the plain transcript with empty
688
+ * `words` when timing isn't available. */
689
+ transcribePcmTimed(args: TranscriptionAudio, signal?: AbortSignal): Promise<{
690
+ text: string;
691
+ words: AsrWordTiming[];
692
+ }>;
693
+ transcribePcm(args: TranscriptionAudio, signal?: AbortSignal, onPartial?: (delta: string) => void): Promise<string>;
694
+ /**
695
+ * Run one fused mic→speech turn through the overlapped `VoicePipeline`
696
+ * (AGENTS.md §4): ASR streams; the instant its last token lands the
697
+ * MTP drafter and the target verifier kick off concurrently, accepted
698
+ * tokens flow into this bridge's phrase chunker → TTS → ring buffer on
699
+ * the same tick, rejected draft tails roll back not-yet-spoken audio, and
700
+ * a mic-VAD barge-in cancels everything at the next kernel boundary.
701
+ *
702
+ * The drafter + verifier are wired against the running MTP llama-server
703
+ * (`textRunner`); the transcriber is the fused ABI's ASR when this bridge
704
+ * was started with the FFI backend and the bundle ships an `asr/` region.
705
+ * In voice mode a missing ASR region is a hard `VoiceStartupError` — no
706
+ * silent cloud fallback (AGENTS.md §3 + §7).
707
+ *
708
+ * Resolves with the turn's exit reason. Throws if no turn is wired or one
709
+ * is already in flight. The created pipeline is held until the turn ends
710
+ * so `bargeIn()` can cancel it.
711
+ */
712
+ runVoiceTurn(audio: TranscriptionAudio, textRunner: MtpTextRunner, config: VoicePipelineConfig, events?: VoiceTurnEvents): Promise<"done" | "token-cap" | "cancelled">;
713
+ /** Construct the `VoicePipeline` for this bridge (no-run). Exposed for tests. */
714
+ buildPipeline(textRunner: MtpTextRunner, config: VoicePipelineConfig, events?: VoicePipelineEvents): VoicePipeline;
715
+ /**
716
+ * Resolve the pipeline's ASR backend: a live `StreamingTranscriber` —
717
+ * the fused `eliza_inference_asr_stream_*` decoder when the loaded build
718
+ * advertises one and the bundle ships an `asr/` region, else the fused
719
+ * batch ASR adapter. The `VoicePipeline` drives it as a batch
720
+ * (feed the whole utterance, `flush()`, split the transcript into
721
+ * tokens). When no ASR backend is available the failure is surfaced as a
722
+ * `MissingAsrTranscriber` that throws on first use — AGENTS.md §3, no
723
+ * silent cloud fallback.
724
+ */
725
+ private resolveTranscriber;
726
+ /** Diagnostic accessor — bundle root the bridge is wired against. */
727
+ bundlePath(): string;
728
+ private assertVoiceOn;
729
+ }
730
+ export { decodeMonoPcm16Wav, encodeMonoPcm16Wav };
731
+ /**
732
+ * Default lifecycle loaders derived from the bundle layout (per
733
+ * AGENTS.md §2: `tts/omnivoice-<size>.gguf` + `asr/...`).
734
+ *
735
+ * When a live `ffi`/`ctx` pair is passed in, arming calls
736
+ * `ffi.mmapAcquire(ctx, "tts" | "asr")` before the lifecycle can enter
737
+ * `voice-on`, and the returned handles' `evictPages()` calls forward
738
+ * to `ffi.mmapEvict(ctx, "tts" | "asr")`. The C ABI is declared in
739
+ * `scripts/omnivoice-fuse/ffi.h`. Production builds may implement this
740
+ * as page eviction or as a full voice-runtime unload for mobile RAM
741
+ * pressure; callers must reacquire before using the region again. The
742
+ * compatibility library returns `ELIZA_ERR_NOT_IMPLEMENTED`, which the binding raises as
743
+ * `VoiceLifecycleError({code:"kernel-missing"})`.
744
+ *
745
+ * When `ffi` is null, acquire/evict are documented empty transitions — used by the
746
+ * development TTS path in tests + dev (no real mmap exists). Directory and
747
+ * "contains at least one file" checks still run for both TTS and ASR.
748
+ * ASR never gets a virtual fallback: voice-on requires a real bundled ASR
749
+ * model file so the FFI path can acquire the `"asr"` region and surface
750
+ * the fused ABI's diagnostic if the runtime lacks the required region support.
751
+ */
752
+ interface FfiContextRef {
753
+ current: ElizaInferenceContextHandle | null;
754
+ ensure(): ElizaInferenceContextHandle;
755
+ }
756
+ declare function defaultLifecycleLoaders(bundleRoot: string, ffi: ElizaInferenceFfi | null, ctx: ElizaInferenceContextHandle | FfiContextRef | null, options?: {
757
+ skipTtsRegion?: boolean;
758
+ }): VoiceLifecycleLoaders;
759
+ /** Re-export for the engine and tests that want the default loader. */
760
+ export { defaultLifecycleLoaders };
761
+ export declare function isOmniVoiceBundleAvailable(bundleRoot: string): boolean;
762
+ //# sourceMappingURL=engine-bridge.d.ts.map