@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,255 @@
1
+ /**
2
+ * Wake-word detection (openWakeWord) — opt-in, local-mode only.
3
+ *
4
+ * Replaces the previous `onnxruntime-node`-backed implementation with a
5
+ * pure GGML / llama.cpp path. The three-stage openWakeWord pipeline (mel
6
+ * filterbank → speech embedding model → per-phrase classifier head) is
7
+ * compiled into one combined GGUF
8
+ * (`wake/openwakeword.gguf`, produced by
9
+ * `packages/training/scripts/wakeword/convert_openwakeword_to_gguf.py`)
10
+ * and executed natively by the fused `libelizainference` build via the
11
+ * `eliza_inference_wakeword_*` FFI surface (ABI v5).
12
+ *
13
+ * The JS side is now a thin adapter over that surface — there is NO ONNX
14
+ * fallback. When the fused library was built without the wake-word
15
+ * runtime, the JS path throws a structured `WakeWordUnavailableError`
16
+ * (AGENTS.md §3, §8 — no silent fallbacks).
17
+ *
18
+ * Per `packages/inference/AGENTS.md` §1 + the three-mode rules (§1, §5):
19
+ * - openWakeWord (Apache-2.0, ~3 MB) ships in the bundle but is
20
+ * **opt-in**: voice mode works without it (push-to-talk / VAD-gated).
21
+ * - It is **local-mode only**. In `cloud` mode the surface is hidden
22
+ * *and inert* (hide-not-disable §5): the model is not loaded, the
23
+ * setting is rejected by the API, no background job runs it.
24
+ * - Detections feed the same place a push-to-talk press would: they arm
25
+ * a listening window that the VAD gate then bounds.
26
+ *
27
+ * Streaming pipeline shape (16 kHz mono):
28
+ * - 1280-sample (80 ms) PCM frames per `scoreFrame` call.
29
+ * - Internally: mel filterbank → 32-bin frames; embedding model windows
30
+ * 76 mel frames, hop 8 → 96-dim embedding; head windows 16 embeddings
31
+ * → P(wake) in [0, 1].
32
+ * - The native runtime owns the audio tail, mel ring and embedding
33
+ * ring; the JS side feeds frames and reads back probabilities.
34
+ */
35
+ import type { ElizaInferenceContextHandle, ElizaInferenceFfi } from "./ffi-bindings";
36
+ /** Directory holding the bundled openWakeWord GGUF inside a bundle. */
37
+ export declare const OPENWAKEWORD_DIR_REL_PATH = "wake";
38
+ /**
39
+ * Combined wake-word GGUF: contains the mel filterbank constants, the
40
+ * speech embedding model weights, AND every per-phrase classifier head
41
+ * (`head.<name>.*` tensors). The fused `libelizainference` build mmaps
42
+ * this file from `<bundleRoot>/wake/openwakeword.gguf` (or the shared
43
+ * cache at `<state-dir>/local-inference/wake/openwakeword.gguf`).
44
+ */
45
+ export declare const OPENWAKEWORD_GGUF_REL_PATH: string;
46
+ /**
47
+ * Default wake-phrase head shipped with a voice bundle. The documented
48
+ * default Eliza-1 wake phrase is **"hey eliza"** — a two-word,
49
+ * four-syllable phrase the openWakeWord TTS-augmented pipeline handles
50
+ * well. It is replaceable: retrain on a different `--phrase` via
51
+ * `packages/training/scripts/wakeword/train_eliza1_wakeword_head.py`,
52
+ * convert to GGUF via
53
+ * `packages/training/scripts/wakeword/convert_openwakeword_to_gguf.py`,
54
+ * and re-point this constant.
55
+ */
56
+ export declare const OPENWAKEWORD_DEFAULT_HEAD = "hey-eliza";
57
+ /**
58
+ * Heads that are placeholders, not trained on the Eliza-1 wake phrase.
59
+ *
60
+ * `hey-eliza` stays in this set until a head trained against the real
61
+ * phrase ships in every tier bundle (the bundled binary is still the
62
+ * upstream `hey_jarvis_v0.1` weights renamed). `hey_jarvis` stays by
63
+ * definition — it is the wrong phrase.
64
+ *
65
+ * A real "hey eliza" head HAS been trained and verified end-to-end through
66
+ * this exact runtime — ~98% true-accept / ~4-7% false-accept on a held-out set
67
+ * scored via `libwakeword.so` (see
68
+ * `packages/training/scripts/wakeword/HEY_ELIZA_HEAD_PROVENANCE.md`). It must
69
+ * be trained with `train_eliza1_wakeword_head.py --no-mel-rescale` to match
70
+ * this runtime's mel preprocessing.
71
+ *
72
+ * The trained GGUFs are now PUBLISHED to `elizaos/eliza-1` at
73
+ * `voice/wakeword/hey-eliza.{melspec,embedding,classifier}.gguf` and registered
74
+ * in the voice catalog as `wakeword` v0.3.0 (`VOICE_MODEL_VERSIONS` in
75
+ * `@elizaos/shared`). `hey-eliza` nonetheless STAYS in this set until that head
76
+ * ships in every tier BUNDLE's `wake/` dir — the gated `publish_all_eliza1.sh`
77
+ * re-publish — because the bundles users currently download still carry the
78
+ * renamed `hey_jarvis` placeholder; removing the flag before the bundle ships
79
+ * the real head would make the runtime treat the placeholder as authentic.
80
+ * `hey_jarvis` stays by definition (wrong phrase). A future pass should make
81
+ * this data-driven off the bundle manifest's `releaseState` rather than
82
+ * hard-coded.
83
+ */
84
+ export declare const OPENWAKEWORD_PLACEHOLDER_HEADS: ReadonlySet<string>;
85
+ export declare function isPlaceholderWakeWordHead(head: string): boolean;
86
+ /**
87
+ * Per-frame wake-word probability source. openWakeWord runs on 80 ms
88
+ * frames of 16 kHz audio; `scoreFrame` takes one PCM frame and returns
89
+ * the latest P(wake) in [0, 1] (the head only re-runs once enough
90
+ * context has accumulated — early frames return 0). Stateful (the
91
+ * streaming front-end carries its buffers); `reset()` clears it.
92
+ *
93
+ * The default backend (`GgmlWakeWordModel`) calls into the native FFI
94
+ * synchronously; the method is still `async` so the interface fits a
95
+ * async-friendly backend variant (e.g. worker-thread based) and
96
+ * matches the same shape the previous ONNX backend exposed to callers.
97
+ */
98
+ export type { WakeWordModel } from "./types.js";
99
+ import type { WakeWordModel } from "./types.js";
100
+ export interface WakeWordConfig {
101
+ /** P(wake) above this fires a detection. openWakeWord default ~0.5. */
102
+ threshold?: number;
103
+ /**
104
+ * Refractory frames after a detection during which no new detection
105
+ * fires (debounce a single utterance into one event).
106
+ */
107
+ refractoryFrames?: number;
108
+ }
109
+ /**
110
+ * Thrown when the native openWakeWord runtime cannot service this call:
111
+ * - `ffi-missing`: the FFI handle was not provided to the loader (the
112
+ * voice lifecycle hands one in via `loadBundledWakeWordModel`).
113
+ * - `runtime-not-ready`: the fused `libelizainference` build does not
114
+ * export `eliza_inference_wakeword_*` — the wake-word GGUF runtime
115
+ * is not yet compiled into this binary. NOT thrown for an absent
116
+ * bundled GGUF (that is "wake word unavailable for this bundle",
117
+ * not a broken build — `resolveWakeWordModel` returns null instead).
118
+ * - `model-load-failed`: the native side rejected the GGUF or the
119
+ * selected head name at session open.
120
+ */
121
+ export declare class WakeWordUnavailableError extends Error {
122
+ readonly code: "ffi-missing" | "runtime-not-ready" | "model-load-failed";
123
+ constructor(code: WakeWordUnavailableError["code"], message: string);
124
+ }
125
+ /** Path to the combined wake-word GGUF and the name of the head to bind. */
126
+ export interface WakeWordModelPaths {
127
+ /** Absolute path to `wake/openwakeword.gguf`. */
128
+ gguf: string;
129
+ /** Name of the classifier head inside the GGUF (e.g. "hey-eliza"). */
130
+ head: string;
131
+ }
132
+ /**
133
+ * The real openWakeWord streaming detector, backed by the native FFI.
134
+ * Owns one `eliza_inference_wakeword_*` session; `scoreFrame` consumes
135
+ * exactly `frameSamples` (1280) samples at 16 kHz and returns the most
136
+ * recent head probability the native pipeline produced. The audio tail,
137
+ * mel ring and embedding ring live on the C side; this class is a thin
138
+ * handle.
139
+ */
140
+ export declare class GgmlWakeWordModel implements WakeWordModel {
141
+ private readonly ffi;
142
+ private readonly handle;
143
+ readonly frameSamples = 1280;
144
+ readonly sampleRate = 16000;
145
+ private closed;
146
+ private constructor();
147
+ /**
148
+ * True only when the fused `libelizainference` build exports the
149
+ * wake-word ABI and advertises support at runtime. The wake-word
150
+ * loader uses this to surface a structured `runtime-not-ready` error
151
+ * before attempting to open a session.
152
+ */
153
+ static isSupported(ffi: ElizaInferenceFfi | null | undefined): boolean;
154
+ /**
155
+ * Open a native wake-word session. Throws `WakeWordUnavailableError`
156
+ * when the runtime is not present or rejects the head name. No silent
157
+ * fallback (AGENTS.md §3).
158
+ */
159
+ static load(opts: {
160
+ ffi: ElizaInferenceFfi;
161
+ ctx: ElizaInferenceContextHandle | (() => ElizaInferenceContextHandle);
162
+ headName: string;
163
+ }): Promise<GgmlWakeWordModel>;
164
+ scoreFrame(frame: Float32Array): Promise<number>;
165
+ reset(): void;
166
+ close(): void;
167
+ }
168
+ /**
169
+ * Resolve the bundled wake-word GGUF. Unlike the VAD model this is
170
+ * *optional* — a missing file means "wake word unavailable for this
171
+ * bundle", not "broken bundle". Returns null when the GGUF is absent so
172
+ * callers keep voice mode working (push-to-talk / VAD-gated) without it.
173
+ *
174
+ * Search order:
175
+ * 1. `<bundleRoot>/wake/openwakeword.gguf`
176
+ * 2. `<state-dir>/local-inference/wake/openwakeword.gguf` (shared cache)
177
+ *
178
+ * `head` defaults to the bundle's default wake phrase. The head name is
179
+ * resolved by the native runtime against tensors inside the GGUF, so it
180
+ * is validated at open time, not here.
181
+ *
182
+ * MUST only be called in `local` mode. The cloud-mode router does not
183
+ * reach this (the wake-word setting is rejected there) — see AGENTS.md §5
184
+ * hide-not-disable.
185
+ */
186
+ export declare function resolveWakeWordModel(opts: {
187
+ bundleRoot?: string;
188
+ head?: string;
189
+ }): WakeWordModelPaths | null;
190
+ /** Resolved triple of standalone wakeword-cpp paths (library + 3 GGUFs). */
191
+ export interface WakeWordStandalonePaths {
192
+ libraryPath: string;
193
+ melspec: string;
194
+ embedding: string;
195
+ classifier: string;
196
+ head: string;
197
+ }
198
+ export declare function resolveWakeWordStandalonePaths(opts: {
199
+ bundleRoot?: string;
200
+ head?: string;
201
+ }): WakeWordStandalonePaths | null;
202
+ /**
203
+ * Open a wake-word session, preferring the fused `libelizainference`
204
+ * wake-word path (the single native engine the whole voice pipeline runs
205
+ * through — the user directive: no separate bun:ffi-musl libs). Falls back to
206
+ * the standalone `wakeword-cpp` build only when the fused build does not carry
207
+ * the wake-word GGUF. Returns `null` when neither provider can serve a session.
208
+ *
209
+ * Provider order:
210
+ * 1. `GgmlWakeWordModel` (this file) — the fused-`libelizainference` path
211
+ * that consumes `wake/openwakeword.gguf` from the bundle cache via the
212
+ * `eliza_inference_wakeword_*` ABI. Tried first whenever the bundled GGUF
213
+ * is on disk; uses the same `ffi`/`ctx` as VAD / speaker / TTS / ASR.
214
+ * 2. `OpenWakeWordGgmlModel` from `./wake-word-ggml.ts` — the standalone
215
+ * `packages/native/plugins/wakeword-cpp` build (three GGUFs). Guarded
216
+ * fallback for paths where the fused build lacks the wake-word runtime.
217
+ *
218
+ * `ffi` and `ctx` come from the voice lifecycle — they are the same
219
+ * `ElizaInferenceFfi` handle and context the VAD / speaker / TTS / ASR paths
220
+ * use. The standalone fallback uses neither.
221
+ */
222
+ export declare function loadBundledWakeWordModel(opts: {
223
+ ffi: ElizaInferenceFfi;
224
+ ctx: ElizaInferenceContextHandle | (() => ElizaInferenceContextHandle);
225
+ bundleRoot?: string;
226
+ head?: string;
227
+ }): Promise<WakeWordModel | null>;
228
+ /**
229
+ * Streaming wake-word detector. Feed frames; `onWake` fires once per
230
+ * detected utterance (refractory-debounced). The voice loop wires
231
+ * `onWake` to "start a listening window" — exactly what a push-to-talk
232
+ * press does.
233
+ *
234
+ * Only constructed in `local` mode. `cloud` mode never instantiates this
235
+ * (and `resolveWakeWordModel` is never called there), so the surface is
236
+ * inert per the hide-not-disable rule.
237
+ */
238
+ export declare class OpenWakeWordDetector {
239
+ private readonly model;
240
+ private readonly cfg;
241
+ private cooldown;
242
+ private readonly onWake;
243
+ constructor(args: {
244
+ model: WakeWordModel;
245
+ config?: WakeWordConfig;
246
+ onWake: () => void;
247
+ });
248
+ /**
249
+ * Score one PCM frame; fire `onWake` on a fresh detection. Resolves
250
+ * to true when this frame fired the wake word.
251
+ */
252
+ pushFrame(frame: Float32Array): Promise<boolean>;
253
+ reset(): void;
254
+ }
255
+ //# sourceMappingURL=wake-word.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wake-word.d.ts","sourceRoot":"","sources":["../../../src/services/voice/wake-word.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAKH,OAAO,KAAK,EACX,2BAA2B,EAC3B,iBAAiB,EAEjB,MAAM,gBAAgB,CAAC;AAMxB,uEAAuE;AACvE,eAAO,MAAM,yBAAyB,SAAS,CAAC;AAEhD;;;;;;GAMG;AACH,eAAO,MAAM,0BAA0B,QAGtC,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,yBAAyB,cAAc,CAAC;AAErD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,eAAO,MAAM,8BAA8B,EAAE,WAAW,CAAC,MAAM,CAG7D,CAAC;AAEH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE/D;AAKD;;;;;;;;;;;GAWG;AACH,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,MAAM,WAAW,cAAc;IAC9B,uEAAuE;IACvE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC1B;AAOD;;;;;;;;;;;GAWG;AACH,qBAAa,wBAAyB,SAAQ,KAAK;IAClD,QAAQ,CAAC,IAAI,EAAE,aAAa,GAAG,mBAAmB,GAAG,mBAAmB,CAAC;gBAC7D,IAAI,EAAE,wBAAwB,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,MAAM;CAKnE;AAED,4EAA4E;AAC5E,MAAM,WAAW,kBAAkB;IAClC,iDAAiD;IACjD,IAAI,EAAE,MAAM,CAAC;IACb,sEAAsE;IACtE,IAAI,EAAE,MAAM,CAAC;CACb;AAED;;;;;;;GAOG;AACH,qBAAa,iBAAkB,YAAW,aAAa;IAMrD,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,MAAM;IANxB,QAAQ,CAAC,YAAY,QAAiB;IACtC,QAAQ,CAAC,UAAU,SAAU;IAC7B,OAAO,CAAC,MAAM,CAAS;IAEvB,OAAO;IAKP;;;;;OAKG;IACH,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,iBAAiB,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO;IAKtE;;;;OAIG;WACU,IAAI,CAAC,IAAI,EAAE;QACvB,GAAG,EAAE,iBAAiB,CAAC;QACvB,GAAG,EAAE,2BAA2B,GAAG,CAAC,MAAM,2BAA2B,CAAC,CAAC;QACvE,QAAQ,EAAE,MAAM,CAAC;KACjB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAqCxB,UAAU,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IAkBtD,KAAK,IAAI,IAAI;IASb,KAAK,IAAI,IAAI;CAKb;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE;IAC1C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;CACd,GAAG,kBAAkB,GAAG,IAAI,CAW5B;AAoCD,4EAA4E;AAC5E,MAAM,WAAW,uBAAuB;IACvC,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;CACb;AAED,wBAAgB,8BAA8B,CAAC,IAAI,EAAE;IACpD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;CACd,GAAG,uBAAuB,GAAG,IAAI,CAwDjC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,wBAAwB,CAAC,IAAI,EAAE;IACpD,GAAG,EAAE,iBAAiB,CAAC;IACvB,GAAG,EAAE,2BAA2B,GAAG,CAAC,MAAM,2BAA2B,CAAC,CAAC;IACvE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;CACd,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAmDhC;AAED;;;;;;;;;GASG;AACH,qBAAa,oBAAoB;IAChC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAgB;IACtC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAA2B;IAC/C,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAa;gBAExB,IAAI,EAAE;QACjB,KAAK,EAAE,aAAa,CAAC;QACrB,MAAM,CAAC,EAAE,cAAc,CAAC;QACxB,MAAM,EAAE,MAAM,IAAI,CAAC;KACnB;IAMD;;;OAGG;IACG,SAAS,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC;IAoBtD,KAAK,IAAI,IAAI;CAIb"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Mono PCM16 WAV codec — dependency-light so corpus / fixture / test code can
3
+ * encode + decode WAV without dragging in the heavy `engine-bridge` module
4
+ * graph. `engine-bridge` re-exports these for its existing callers.
5
+ */
6
+ import type { TranscriptionAudio } from "./types";
7
+ /** Encode mono float PCM as a 16-bit little-endian WAV byte stream. */
8
+ export declare function encodeMonoPcm16Wav(pcm: Float32Array, sampleRate: number): Uint8Array;
9
+ /** Decode a mono PCM16 WAV byte stream into float PCM + sample rate. */
10
+ export declare function decodeMonoPcm16Wav(bytes: Uint8Array): TranscriptionAudio;
11
+ //# sourceMappingURL=wav-codec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wav-codec.d.ts","sourceRoot":"","sources":["../../../src/services/voice/wav-codec.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAgBlD,uEAAuE;AACvE,wBAAgB,kBAAkB,CACjC,GAAG,EAAE,YAAY,EACjB,UAAU,EAAE,MAAM,GAChB,UAAU,CA4BZ;AAED,wEAAwE;AACxE,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,UAAU,GAAG,kBAAkB,CA2CxE"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Voice Workbench entrypoint (#8785).
3
+ *
4
+ * One call that generates the corpus for a scenario matrix, runs them headless
5
+ * through the (injected) voice services, and rolls the result into the single
6
+ * JSON + Markdown benchmark report. The CLI (`voice:workbench`) and the CI lane
7
+ * are thin shells over this:
8
+ * - mocked lane (always): pass `groundTruthMockServices()` → runs + passes,
9
+ * exercising corpus → runner → scorers → report end-to-end with no model;
10
+ * - real lane (where provisioned): pass a real services adapter; absent
11
+ * backend → `services: null` → every scenario `skipped` (never `pass`).
12
+ *
13
+ * Pure orchestration over the already-tested pieces, so it is unit-testable
14
+ * without a model or a browser.
15
+ */
16
+ import { type CorpusTtsSynthesizer } from "./corpus-generator";
17
+ import type { VoiceScenario } from "./voice-scenario";
18
+ import { type VoiceWorkbenchReport } from "./voice-workbench-report";
19
+ import { type VoiceWorkbenchServices } from "./workbench-headless-runner";
20
+ export interface BuildAndRunVoiceWorkbenchArgs {
21
+ /** Scenario matrix to run (defaults to the built-in set). */
22
+ scenarios?: ReadonlyArray<VoiceScenario>;
23
+ /** Voice services; null → every scenario is skipped (no backend). */
24
+ services: VoiceWorkbenchServices | null;
25
+ /** Corpus sample rate (default 16 kHz). */
26
+ sampleRate?: number;
27
+ /** Real TTS for the corpus; omitted → deterministic synthetic speech. */
28
+ synthesizer?: CorpusTtsSynthesizer;
29
+ }
30
+ export interface VoiceWorkbenchResult {
31
+ report: VoiceWorkbenchReport;
32
+ markdown: string;
33
+ }
34
+ /** Generate corpus → run headless → build the report + Markdown. */
35
+ export declare function buildAndRunVoiceWorkbench(args: BuildAndRunVoiceWorkbenchArgs): Promise<VoiceWorkbenchResult>;
36
+ export interface VoiceWorkbenchArtifacts {
37
+ reportJsonPath: string;
38
+ reportMarkdownPath: string;
39
+ }
40
+ /** Persist the workbench result as `report.json` + `report.md` under `outDir`. */
41
+ export declare function writeVoiceWorkbenchResult(result: VoiceWorkbenchResult, outDir: string): VoiceWorkbenchArtifacts;
42
+ //# sourceMappingURL=workbench-entrypoint.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workbench-entrypoint.d.ts","sourceRoot":"","sources":["../../../src/services/voice/workbench-entrypoint.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,OAAO,EACN,KAAK,oBAAoB,EAEzB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAGN,KAAK,oBAAoB,EACzB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAEN,KAAK,sBAAsB,EAC3B,MAAM,6BAA6B,CAAC;AAGrC,MAAM,WAAW,6BAA6B;IAC7C,6DAA6D;IAC7D,SAAS,CAAC,EAAE,aAAa,CAAC,aAAa,CAAC,CAAC;IACzC,qEAAqE;IACrE,QAAQ,EAAE,sBAAsB,GAAG,IAAI,CAAC;IACxC,2CAA2C;IAC3C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yEAAyE;IACzE,WAAW,CAAC,EAAE,oBAAoB,CAAC;CACnC;AAED,MAAM,WAAW,oBAAoB;IACpC,MAAM,EAAE,oBAAoB,CAAC;IAC7B,QAAQ,EAAE,MAAM,CAAC;CACjB;AAED,oEAAoE;AACpE,wBAAsB,yBAAyB,CAC9C,IAAI,EAAE,6BAA6B,GACjC,OAAO,CAAC,oBAAoB,CAAC,CAgB/B;AAED,MAAM,WAAW,uBAAuB;IACvC,cAAc,EAAE,MAAM,CAAC;IACvB,kBAAkB,EAAE,MAAM,CAAC;CAC3B;AAED,kFAAkF;AAClF,wBAAgB,yBAAyB,CACxC,MAAM,EAAE,oBAAoB,EAC5B,MAAM,EAAE,MAAM,GACZ,uBAAuB,CAOzB"}
@@ -0,0 +1,102 @@
1
+ /**
2
+ * Voice Workbench headless runner (#8785).
3
+ *
4
+ * Drives a {@link VoiceScenario} + its generated corpus through the real voice
5
+ * services WITHOUT a browser, scores every turn with the shared scorers
6
+ * (`e2e-harness.ts`), and emits one {@link VoiceWorkbenchScenarioRun} the report
7
+ * layer (`voice-workbench-report.ts`) aggregates. The services are injected
8
+ * through {@link VoiceWorkbenchServices} so:
9
+ * - a provisioned local backend wires the real ASR / diarization / EOT /
10
+ * respond / entity / TTS path,
11
+ * - a mock returns ground-truth-derived observations for the CI plumbing lane,
12
+ * - and an ABSENT backend (`services === null`) or absent corpus
13
+ * (`corpus === null`) yields a `skipped` run — never a `pass` (honesty
14
+ * contract).
15
+ *
16
+ * Pure orchestration: it slices the corpus per turn, asks the services to
17
+ * observe the turn, and maps observations onto scorer inputs. No model loading
18
+ * here, so it is unit-testable with a fake services adapter.
19
+ */
20
+ import type { CorpusGroundTruth, CorpusTurnLabel, GeneratedVoiceCorpus } from "./corpus-generator";
21
+ import type { VoiceScenario } from "./voice-scenario";
22
+ import type { VoiceWorkbenchScenarioRun } from "./voice-workbench-report";
23
+ /** What the real (or mock) services observed for one turn of audio. */
24
+ export interface VoiceTurnObservation {
25
+ /** ASR hypothesis transcript for the turn's audio. */
26
+ hypothesisTranscript: string;
27
+ /** Diarized speaker label, or null when the diarizer missed the turn. */
28
+ predictedSpeakerLabel: string | null;
29
+ /** The EOT classifier decided end-of-turn at this turn's boundary. */
30
+ eotDecided: boolean;
31
+ /** EOT decision latency (ms) from the true boundary, when measured. */
32
+ eotLatencyMs?: number;
33
+ /** The agent decided to respond to this turn. */
34
+ responded: boolean;
35
+ /** Entities inferred from this turn's transcript (name/partner extraction). */
36
+ inferredEntities: string[];
37
+ /** Voice→entity match: the entity the recognized voice resolved to (or null). */
38
+ matchedEntityId: string | null;
39
+ /** First-audio latency (ms) of the agent's spoken reply, when it replied. */
40
+ firstAudioMs?: number;
41
+ /** The system judged this turn to be the device owner (owner-security). */
42
+ predictedOwner?: boolean;
43
+ }
44
+ export interface VoiceWorkbenchServices {
45
+ /**
46
+ * Optional one-shot hook before a scenario's turns are scored. Real services
47
+ * use this to enroll speaker centroids from the generated corpus; mock
48
+ * services can omit it.
49
+ */
50
+ prepareScenario?(args: {
51
+ scenario: VoiceScenario;
52
+ corpus: GeneratedVoiceCorpus;
53
+ }): Promise<void> | void;
54
+ /**
55
+ * Feed one turn's audio slice through the real services and report what was
56
+ * observed. The `label` carries the turn's ground truth (so a mock can echo
57
+ * it); the real adapter ignores it and measures.
58
+ */
59
+ observeTurn(args: {
60
+ turnIndex: number;
61
+ audio: Float32Array;
62
+ sampleRate: number;
63
+ label: CorpusTurnLabel;
64
+ /** Scenario-level ground truth (participants, owner set, agents). */
65
+ groundTruth: CorpusGroundTruth;
66
+ }): Promise<VoiceTurnObservation>;
67
+ }
68
+ /**
69
+ * Where to write per-run `.wav` artifacts. When present, the runner encodes the
70
+ * full corpus + each consumed per-turn slice to disk under `dir` and records the
71
+ * paths (relative to `relativeTo`) on the run's `audioArtifacts`. Absent ⇒ no IO.
72
+ */
73
+ export interface VoiceAudioCaptureSink {
74
+ /** Directory the `.wav` files are written into (created recursively). */
75
+ dir: string;
76
+ /** Artifact paths are recorded relative to this dir (the scenario run dir). */
77
+ relativeTo: string;
78
+ }
79
+ export interface RunVoiceScenarioHeadlessArgs {
80
+ scenario: VoiceScenario;
81
+ /** The generated/loaded corpus; null when its artifacts are absent. */
82
+ corpus: GeneratedVoiceCorpus | null;
83
+ /** The voice services; null when no backend is provisioned. */
84
+ services: VoiceWorkbenchServices | null;
85
+ /** When set, write the run's audio as `.wav` artifacts and record their paths. */
86
+ captureAudio?: VoiceAudioCaptureSink;
87
+ }
88
+ /**
89
+ * Run one scenario headless and score it. Returns a `skipped` run (never a
90
+ * pass) when the corpus or the backend is absent.
91
+ */
92
+ export declare function runVoiceScenarioHeadless(args: RunVoiceScenarioHeadlessArgs): Promise<VoiceWorkbenchScenarioRun>;
93
+ export interface RunVoiceWorkbenchArgs {
94
+ scenarios: ReadonlyArray<{
95
+ scenario: VoiceScenario;
96
+ corpus: GeneratedVoiceCorpus | null;
97
+ }>;
98
+ services: VoiceWorkbenchServices | null;
99
+ }
100
+ /** Run a matrix of scenarios headless, returning one run per scenario. */
101
+ export declare function runVoiceWorkbenchHeadless(args: RunVoiceWorkbenchArgs): Promise<VoiceWorkbenchScenarioRun[]>;
102
+ //# sourceMappingURL=workbench-headless-runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workbench-headless-runner.d.ts","sourceRoot":"","sources":["../../../src/services/voice/workbench-headless-runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAIH,OAAO,KAAK,EACX,iBAAiB,EACjB,eAAe,EACf,oBAAoB,EACpB,MAAM,oBAAoB,CAAC;AAc5B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,KAAK,EAEX,yBAAyB,EACzB,MAAM,0BAA0B,CAAC;AAGlC,uEAAuE;AACvE,MAAM,WAAW,oBAAoB;IACpC,sDAAsD;IACtD,oBAAoB,EAAE,MAAM,CAAC;IAC7B,yEAAyE;IACzE,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,sEAAsE;IACtE,UAAU,EAAE,OAAO,CAAC;IACpB,uEAAuE;IACvE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iDAAiD;IACjD,SAAS,EAAE,OAAO,CAAC;IACnB,+EAA+E;IAC/E,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,iFAAiF;IACjF,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,6EAA6E;IAC7E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,2EAA2E;IAC3E,cAAc,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,sBAAsB;IACtC;;;;OAIG;IACH,eAAe,CAAC,CAAC,IAAI,EAAE;QACtB,QAAQ,EAAE,aAAa,CAAC;QACxB,MAAM,EAAE,oBAAoB,CAAC;KAC7B,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACzB;;;;OAIG;IACH,WAAW,CAAC,IAAI,EAAE;QACjB,SAAS,EAAE,MAAM,CAAC;QAClB,KAAK,EAAE,YAAY,CAAC;QACpB,UAAU,EAAE,MAAM,CAAC;QACnB,KAAK,EAAE,eAAe,CAAC;QACvB,qEAAqE;QACrE,WAAW,EAAE,iBAAiB,CAAC;KAC/B,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;CAClC;AAED;;;;GAIG;AACH,MAAM,WAAW,qBAAqB;IACrC,yEAAyE;IACzE,GAAG,EAAE,MAAM,CAAC;IACZ,+EAA+E;IAC/E,UAAU,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,4BAA4B;IAC5C,QAAQ,EAAE,aAAa,CAAC;IACxB,uEAAuE;IACvE,MAAM,EAAE,oBAAoB,GAAG,IAAI,CAAC;IACpC,+DAA+D;IAC/D,QAAQ,EAAE,sBAAsB,GAAG,IAAI,CAAC;IACxC,kFAAkF;IAClF,YAAY,CAAC,EAAE,qBAAqB,CAAC;CACrC;AA2CD;;;GAGG;AACH,wBAAsB,wBAAwB,CAC7C,IAAI,EAAE,4BAA4B,GAChC,OAAO,CAAC,yBAAyB,CAAC,CA+MpC;AAED,MAAM,WAAW,qBAAqB;IACrC,SAAS,EAAE,aAAa,CAAC;QACxB,QAAQ,EAAE,aAAa,CAAC;QACxB,MAAM,EAAE,oBAAoB,GAAG,IAAI,CAAC;KACpC,CAAC,CAAC;IACH,QAAQ,EAAE,sBAAsB,GAAG,IAAI,CAAC;CACxC;AAED,0EAA0E;AAC1E,wBAAsB,yBAAyB,CAC9C,IAAI,EAAE,qBAAqB,GACzB,OAAO,CAAC,yBAAyB,EAAE,CAAC,CAYtC"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Voice Workbench real-decision-logic services adapter (#8785, #9427).
3
+ *
4
+ * The ground-truth mock (`groundTruthMockServices`) echoes the corpus labels —
5
+ * it proves the runner → scorers → report wiring, but it can never catch a
6
+ * regression in the DECISION logic because it never runs it. This adapter does:
7
+ * for every turn it runs the REAL, shipped modules —
8
+ *
9
+ * - end-of-turn: `scoreEndOfTurnHeuristic` (`@elizaos/shared/voice-eot`)
10
+ * - respond / echo / `buildVoiceTurnSignal` (`@elizaos/shared/voice/respond-gate`)
11
+ * bystander / wake-word — the SAME gate the UI client ships
12
+ * - diarization: `OnlineSpeakerClusterer` clusters each turn BY ITS
13
+ * AUDIO (blind to the ground-truth label), so the DER
14
+ * gate measures a real attribution and can actually fail
15
+ * on a misattribution (#9427).
16
+ * - acoustic self-voice: `selfVoiceSimilarity` measures the turn audio against
17
+ * the agent's TTS imprint — the real value the echo gate
18
+ * consumes (no more hardcoded `0.9`).
19
+ * - name extraction: the inline patterns below (mirrors IDENTIFY_SPEAKER)
20
+ *
21
+ * — so the workbench catches a regression in the gate the moment it lands. It is
22
+ * CI-runnable with NO models or network: it keeps only the perfect-ASR
23
+ * assumption (the transcript comes from ground truth), so it does NOT measure
24
+ * ASR WER or EOT latency — those need the real model lane. Everything else is
25
+ * genuine: EOT decisions, respond/echo/bystander/wake-word, blind speaker
26
+ * clustering, acoustic self-voice, and name extraction.
27
+ */
28
+ import type { VoiceWorkbenchServices } from "./workbench-headless-runner";
29
+ /**
30
+ * Build a services adapter that runs the real decision logic. Stateful across a
31
+ * scenario's turns (it remembers the agent's last reply so a following
32
+ * `isAgentEcho` turn is gated against a genuine reply string); state resets at
33
+ * each scenario's first turn.
34
+ */
35
+ export declare function realDecisionLogicServices(): VoiceWorkbenchServices;
36
+ //# sourceMappingURL=workbench-logic-services.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workbench-logic-services.d.ts","sourceRoot":"","sources":["../../../src/services/voice/workbench-logic-services.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAaH,OAAO,KAAK,EAEX,sBAAsB,EACtB,MAAM,6BAA6B,CAAC;AAmCrC;;;;;GAKG;AACH,wBAAgB,yBAAyB,IAAI,sBAAsB,CAoGlE"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Voice Workbench real services adapter (#9147).
3
+ *
4
+ * `voice:workbench --real` must not be an all-skipped honesty stub: the
5
+ * provisioned lane has a fused libelizainference build, ASR/TTS regions,
6
+ * WeSpeaker, pyannote, and ElevenLabs-generated human speech. This adapter
7
+ * drives those real pieces through the existing workbench runner/scorers.
8
+ */
9
+ import type { CorpusTtsSynthesizer } from "./corpus-generator";
10
+ import type { VoiceWorkbenchServices } from "./workbench-headless-runner";
11
+ export interface RealVoiceWorkbenchRuntime {
12
+ services: VoiceWorkbenchServices;
13
+ synthesizer: CorpusTtsSynthesizer;
14
+ dispose(): Promise<void>;
15
+ }
16
+ export declare function createRealVoiceWorkbenchRuntimeFromEnv(env?: NodeJS.ProcessEnv): Promise<RealVoiceWorkbenchRuntime>;
17
+ //# sourceMappingURL=workbench-real-services.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workbench-real-services.d.ts","sourceRoot":"","sources":["../../../src/services/voice/workbench-real-services.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAYH,OAAO,KAAK,EAEX,oBAAoB,EAEpB,MAAM,oBAAoB,CAAC;AAS5B,OAAO,KAAK,EAEX,sBAAsB,EACtB,MAAM,6BAA6B,CAAC;AAiDrC,MAAM,WAAW,yBAAyB;IACzC,QAAQ,EAAE,sBAAsB,CAAC;IACjC,WAAW,EAAE,oBAAoB,CAAC;IAClC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACzB;AAweD,wBAAsB,sCAAsC,CAC3D,GAAG,GAAE,MAAM,CAAC,UAAwB,GAClC,OAAO,CAAC,yBAAyB,CAAC,CAkDpC"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Built-in Voice Workbench scenarios + a ground-truth mock services adapter
3
+ * (#8785).
4
+ *
5
+ * The scenario set spans every {@link VoiceScenarioClass} so the headless runner
6
+ * and the headful spec matrix exercise the whole surface from one source. The
7
+ * mock adapter echoes each turn's ground truth, so the CI plumbing lane runs the
8
+ * runner → scorers → report end-to-end and PASSES without any model — separate
9
+ * from the gated real-backend lane.
10
+ */
11
+ import type { VoiceScenario } from "./voice-scenario";
12
+ import type { VoiceWorkbenchServices } from "./workbench-headless-runner";
13
+ export declare const VOICE_WORKBENCH_SCENARIOS: VoiceScenario[];
14
+ /**
15
+ * A services adapter that echoes each turn's ground truth — perfect ASR /
16
+ * diarization / EOT / respond / entity / match. Drives the CI plumbing lane
17
+ * (runner → scorers → report) to a real PASS with no model. NOT a stand-in for
18
+ * the real backend: it proves the wiring, not the models.
19
+ */
20
+ export declare function groundTruthMockServices(opts?: {
21
+ firstAudioMs?: number;
22
+ eotLatencyMs?: number;
23
+ }): VoiceWorkbenchServices;
24
+ //# sourceMappingURL=workbench-scenarios.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workbench-scenarios.d.ts","sourceRoot":"","sources":["../../../src/services/voice/workbench-scenarios.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,KAAK,EAEX,sBAAsB,EACtB,MAAM,6BAA6B,CAAC;AAErC,eAAO,MAAM,yBAAyB,EAAE,aAAa,EAmWpD,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACtC,IAAI,GAAE;IAAE,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAO,GACzD,sBAAsB,CAuBxB"}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * Wrap a TTS model handler (`ModelType.TEXT_TO_SPEECH`) with the
3
+ * `FirstLineCache` disk-tier.
4
+ *
5
+ * Behaviour on a wrapped handler call:
6
+ * 1. Snip the first sentence of the input text. Reject if > 10 words or
7
+ * no terminator found → defer to the inner handler unchanged.
8
+ * 2. Build the cache key from the snip + caller-supplied
9
+ * `(provider, voiceId, voiceRevision, codec, voiceSettingsFingerprint)`.
10
+ * 3. On hit: if the snip is the WHOLE input, return cached bytes. If the
11
+ * snip is only a prefix, return `cachedBytes ++ synthesize(remainder)`.
12
+ * The concat path is safe for the codecs we cache today (mp3, opus,
13
+ * ogg are self-framed; wav/pcm_f32 are not, and the wrapper falls
14
+ * through for those).
15
+ * 4. On miss: call the inner handler with the full input, return that.
16
+ * In the background, call the inner handler with JUST the snip to get
17
+ * a cleanly-framed cache entry (no mid-stream-byte alignment hazards).
18
+ *
19
+ * The wrapper is provider-agnostic — `WrapOptions.resolveContext` is the
20
+ * single seam where each TTS plugin teaches the cache its provider name +
21
+ * voice id + revision + voice-settings fingerprint.
22
+ */
23
+ import type { IAgentRuntime } from "@elizaos/core";
24
+ import { type FirstLineCache, type FirstLineCacheKey } from "./first-line-cache";
25
+ export type TtsBytes = Uint8Array | ArrayBuffer | Buffer;
26
+ export type TtsHandlerInput = string | {
27
+ text: string;
28
+ [k: string]: unknown;
29
+ };
30
+ export type TtsHandlerOutput = TtsBytes;
31
+ export type TtsHandler = (runtime: IAgentRuntime, input: TtsHandlerInput) => Promise<TtsHandlerOutput>;
32
+ /** Caller-supplied context resolver — provider name + voice metadata. */
33
+ export interface TtsResolvedContext {
34
+ provider: string;
35
+ voiceId: string;
36
+ voiceRevision: string;
37
+ codec: FirstLineCacheKey["codec"];
38
+ contentType: string;
39
+ sampleRate: number;
40
+ voiceSettingsFingerprint: string;
41
+ /** Optional: if true, bypass the cache entirely on this call. */
42
+ bypass?: boolean;
43
+ }
44
+ export interface WrapOptions {
45
+ /** Inject for tests. */
46
+ cache?: FirstLineCache;
47
+ /**
48
+ * Resolve the per-call provider/voice context. Must be cheap (typically
49
+ * a settings read + a small sha256). Return `null` to bypass the cache.
50
+ */
51
+ resolveContext: (runtime: IAgentRuntime, input: TtsHandlerInput) => Promise<TtsResolvedContext | null> | TtsResolvedContext | null;
52
+ /**
53
+ * Whether to attempt to concatenate cached bytes + remainder synthesis.
54
+ * Defaults to true for mp3/opus/ogg, false for wav/pcm_f32 (concat would
55
+ * corrupt the RIFF / raw stream).
56
+ */
57
+ concatRemainder?: boolean;
58
+ /** Optional pre-resolved fingerprint of voiceSettings; rarely needed. */
59
+ enableCachePopulation?: boolean;
60
+ }
61
+ /**
62
+ * Wrap a TTS handler with first-sentence caching. Returns a new handler with
63
+ * the same signature.
64
+ *
65
+ * The wrapper is safe to apply at runtime registration time — if the cache
66
+ * is disabled (env / no sqlite), the wrapper short-circuits to the inner
67
+ * handler with zero overhead beyond a snip attempt.
68
+ */
69
+ export declare function wrapWithFirstLineCache(inner: TtsHandler, options: WrapOptions): TtsHandler;
70
+ //# sourceMappingURL=wrap-with-first-line-cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wrap-with-first-line-cache.d.ts","sourceRoot":"","sources":["../../../src/services/voice/wrap-with-first-line-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAOnD,OAAO,EACN,KAAK,cAAc,EAEnB,KAAK,iBAAiB,EAGtB,MAAM,oBAAoB,CAAC;AAM5B,MAAM,MAAM,QAAQ,GAAG,UAAU,GAAG,WAAW,GAAG,MAAM,CAAC;AACzD,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,CAAC;AAC9E,MAAM,MAAM,gBAAgB,GAAG,QAAQ,CAAC;AACxC,MAAM,MAAM,UAAU,GAAG,CACxB,OAAO,EAAE,aAAa,EACtB,KAAK,EAAE,eAAe,KAClB,OAAO,CAAC,gBAAgB,CAAC,CAAC;AAE/B,yEAAyE;AACzE,MAAM,WAAW,kBAAkB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,wBAAwB,EAAE,MAAM,CAAC;IACjC,iEAAiE;IACjE,MAAM,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC3B,wBAAwB;IACxB,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB;;;OAGG;IACH,cAAc,EAAE,CACf,OAAO,EAAE,aAAa,EACtB,KAAK,EAAE,eAAe,KAClB,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,GAAG,kBAAkB,GAAG,IAAI,CAAC;IACpE;;;;OAIG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,yEAAyE;IACzE,qBAAqB,CAAC,EAAE,OAAO,CAAC;CAChC;AA2CD;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CACrC,KAAK,EAAE,UAAU,EACjB,OAAO,EAAE,WAAW,GAClB,UAAU,CAgEZ"}