@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,364 @@
1
+ /**
2
+ * Voice state machine — explicit state-machine wrapper that drives the
3
+ * optimistic-rollback path the C1 checkpoint enables.
4
+ *
5
+ * This is the thin layer the brief calls for: the existing
6
+ * `OptimisticRollbackController` already covers the pre-draft / draft-response
7
+ * path; this module adds the SPEAKING state and the barge-in restore path on
8
+ * top, exposed as a single state-machine surface (`getState`, `dispatch`)
9
+ * that the voice loop drives from VAD events + scheduler events.
10
+ *
11
+ * IDLE
12
+ * │ speech-start
13
+ * ▼
14
+ * LISTENING ────────────── speech-pause ────────────▶ PAUSE_TENTATIVE
15
+ * ▲ │
16
+ * │ speech-active (within 2× hangover) │
17
+ * │ ──── discard C1 ──────────────────────────────────────┤
18
+ * │ │
19
+ * │ │ speech-end
20
+ * │ ▼
21
+ * │ SPEAKING
22
+ * │ │
23
+ * │ ◀──── restore C1, re-enter LISTENING ───── barge-in ──┘
24
+ *
25
+ * Key transitions (all wired to a `CheckpointManagerLike`):
26
+ *
27
+ * - `speech-pause` (LISTENING → PAUSE_TENTATIVE)
28
+ * Save checkpoint named "pre-draft" (C1). Kick the drafter on the
29
+ * current partial transcript via the caller-supplied `startDrafter`.
30
+ *
31
+ * - `speech-active` within 2× hangover (PAUSE_TENTATIVE → LISTENING)
32
+ * Discard C1. Abort the speculative drafter. No rollback is required
33
+ * because the drafter's KV writes were speculative against a snapshot
34
+ * we never committed.
35
+ *
36
+ * - `speech-end` (PAUSE_TENTATIVE → SPEAKING)
37
+ * Commit the ASR final. The drafter's output is promoted: callers
38
+ * wire the verifier on top via `onCommit`. **Retain** C1 — a barge-in
39
+ * while the agent is speaking must roll the KV cache back to the
40
+ * pre-draft point so the next user turn doesn't see the agent's own
41
+ * half-spoken response in the prompt.
42
+ *
43
+ * - `barge-in` (SPEAKING → LISTENING)
44
+ * Restore C1. Hand the new user speech to the next LISTENING turn.
45
+ * The same C1 may be restored multiple times — useful when two
46
+ * consecutive barge-ins land before the next checkpoint is taken
47
+ * (the test suite covers this).
48
+ *
49
+ * No fallback sludge: a checkpoint failure surfaces via `onError`. The
50
+ * state machine never silently downgrades to a non-checkpointed path —
51
+ * callers turn the feature off via the constructor option.
52
+ */
53
+ import type { CheckpointHandle, CheckpointManagerLike } from "./checkpoint-manager";
54
+ import type { ContextPartial } from "./eager-context-builder";
55
+ import { type EotClassifier } from "./eot-classifier";
56
+ import type { OptimisticGenerationPolicy } from "./optimistic-policy";
57
+ import { type PrefillOptimisticOptions, type PrefillOptimisticResult } from "./prefill-client";
58
+ /** Public state. Closed union — exhaustive switches catch new variants. */
59
+ export type VoiceState = "IDLE" | "LISTENING" | "PAUSE_TENTATIVE" | "SPEAKING";
60
+ /**
61
+ * Events that drive the state machine. Wall-clock timestamps are caller-
62
+ * supplied so the machine is testable without a fake clock.
63
+ */
64
+ export type VoiceStateEvent = {
65
+ type: "speech-start";
66
+ timestampMs: number;
67
+ } | {
68
+ type: "speech-pause";
69
+ timestampMs: number;
70
+ partialTranscript: string;
71
+ } | {
72
+ type: "speech-active";
73
+ timestampMs: number;
74
+ } | {
75
+ type: "speech-end";
76
+ timestampMs: number;
77
+ finalTranscript: string;
78
+ } | {
79
+ type: "barge-in";
80
+ timestampMs: number;
81
+ }
82
+ /**
83
+ * Tier-3 — streamed partial transcript chunk from the ASR. When an
84
+ * `eotClassifier` is configured the machine will run `checkEot()` and may
85
+ * transition to PAUSE_TENTATIVE early or commit immediately depending on
86
+ * the returned probability and the elapsed silence since the last speech
87
+ * audio frame (provided by the caller via `silenceSinceMs`).
88
+ */
89
+ | {
90
+ type: "partial-transcript";
91
+ timestampMs: number;
92
+ text: string;
93
+ /** Milliseconds of silence elapsed since the last speech audio frame. */
94
+ silenceSinceMs: number;
95
+ };
96
+ /**
97
+ * Reason a speculative drafter handle was aborted by the state machine.
98
+ *
99
+ * - `resumed` — `speech-active` re-entered LISTENING; the draft was
100
+ * speculative against a transcript that turned out to be
101
+ * still provisional.
102
+ * - `barge-in` — the user interrupted while the agent was speaking; the
103
+ * draft's downstream TTS has already been hard-stopped.
104
+ * - `shutdown` — `dispose()` was called.
105
+ */
106
+ export type DrafterAbortReason = "resumed" | "barge-in" | "shutdown";
107
+ /**
108
+ * Handle returned by `startDrafter`. The state machine calls `abort()`
109
+ * (idempotent) when the draft must be cancelled.
110
+ */
111
+ export interface DrafterHandle {
112
+ abort(reason: DrafterAbortReason): void;
113
+ }
114
+ /**
115
+ * Caller-supplied drafter starter. Receives the partial transcript at the
116
+ * `speech-pause` instant and a turn id. Must return synchronously; the
117
+ * draft itself runs in the background until the state machine calls
118
+ * `abort()` or the draft completes (which is observed via `onCommit`).
119
+ */
120
+ export type StartDrafterFn = (args: {
121
+ partialTranscript: string;
122
+ turnId: string;
123
+ /** Aborted when the drafter must be cancelled. */
124
+ signal: AbortSignal;
125
+ }) => DrafterHandle;
126
+ export interface VoiceStateMachineEvents {
127
+ /** State transition occurred. Called AFTER the new state is set. */
128
+ onStateChange?(prev: VoiceState, next: VoiceState, turnId: string): void;
129
+ /** Speculative drafter was started on `speech-pause`. */
130
+ onDrafterStart?(turnId: string, partialTranscript: string): void;
131
+ /** Speculative drafter was aborted (resumed / barge-in / shutdown). */
132
+ onDrafterAbort?(turnId: string, reason: DrafterAbortReason): void;
133
+ /**
134
+ * `speech-end` reached SPEAKING. The verifier should now run on top of
135
+ * the speculative drafter output against the final transcript.
136
+ *
137
+ * `prefillResult` is present when the C7 optimistic prefill completed
138
+ * before `speech-end` arrived. The verifier can resume generation from
139
+ * `prefillResult.checkpointHandle` to skip one full prefill RTT.
140
+ */
141
+ onCommit?(turnId: string, finalTranscript: string, prefillResult?: PrefillOptimisticResult): void;
142
+ /**
143
+ * A barge-in restored C1. The voice loop should drop any in-flight TTS
144
+ * (separate concern owned by the barge-in controller) and begin a new
145
+ * LISTENING turn with the new user audio.
146
+ */
147
+ onRollback?(turnId: string, restoredFrom: CheckpointHandle): void;
148
+ /**
149
+ * Surfaced when `CheckpointManager.{save,restore,discard}` rejects.
150
+ * The state machine continues — checkpoint failures must not break the
151
+ * voice loop — but the operator can flip the feature flag off in
152
+ * response.
153
+ */
154
+ onError?(op: "save" | "restore" | "discard", error: unknown, turnId: string): void;
155
+ /**
156
+ * Fired when the Tier-3 EOT classifier scores a partial transcript.
157
+ * Useful for telemetry and debugging — P values are emitted before the
158
+ * state machine decides whether to act on them.
159
+ */
160
+ onEotScore?(turnId: string, text: string, pDone: number): void;
161
+ /**
162
+ * Fired when the C7 optimistic prefill completes (either successfully or
163
+ * with an error). On success `result` is set; on error `error` is set.
164
+ * The state machine never blocks on the prefill result — it resolves or
165
+ * rejects in the background while PAUSE_TENTATIVE is active.
166
+ */
167
+ onPrefill?(turnId: string, result: PrefillOptimisticResult | null, error: unknown | null): void;
168
+ }
169
+ export interface VoiceStateMachineOptions {
170
+ /** Slot identifier for the conversation pinning. */
171
+ slotId: string;
172
+ /**
173
+ * Whether to actually call into the `CheckpointManager`. When `false`,
174
+ * the state machine still transitions through the same states but
175
+ * never saves/restores. Default `true` — callers turn the feature off
176
+ * here when upstream `--ctx-checkpoints` is unavailable.
177
+ */
178
+ enableCheckpoints?: boolean;
179
+ /**
180
+ * VAD pause hangover (ms). The rollback window is `2 × hangoverMs`. If
181
+ * a `speech-active` arrives later than this after a `speech-pause`, the
182
+ * machine treats the pause as a real speech-end equivalent (it commits
183
+ * instead of discarding).
184
+ */
185
+ pauseHangoverMs?: number;
186
+ checkpointManager: CheckpointManagerLike;
187
+ /** Drafter starter — see `StartDrafterFn`. */
188
+ startDrafter: StartDrafterFn;
189
+ /** Events sink. */
190
+ events?: VoiceStateMachineEvents;
191
+ /**
192
+ * Tier-3 semantic EOT classifier. When provided, partial transcripts are
193
+ * scored on each `partial-transcript` dispatch:
194
+ *
195
+ * P ≥ 0.9 AND silence ≥ 50 ms → commit immediately (skip remaining hangover)
196
+ * P ≥ 0.6 AND silence ≥ 20 ms → enter PAUSE_TENTATIVE early (start drafter)
197
+ * P < 0.4 → extend hangover by 50 ms (user is mid-clause)
198
+ *
199
+ * When absent the machine behaves as before (tiers 1 + 2 only).
200
+ */
201
+ eotClassifier?: EotClassifier;
202
+ /**
203
+ * C7 — optimistic prefill configuration. When provided the machine fires
204
+ * `prefillOptimistic` on `PAUSE_TENTATIVE` entry (fire-and-forget) so the
205
+ * KV cache is pre-warmed with the partial transcript by the time ASR
206
+ * finalizes. The prefill result is passed to `onCommit` via `prefillResult`.
207
+ *
208
+ * Omit to disable the prefill path entirely.
209
+ */
210
+ prefillConfig?: {
211
+ /** Base URL of the llama-server (`http://host:port`). */
212
+ baseUrl: string;
213
+ /** `CheckpointManager` options forwarded to `prefillOptimistic`. */
214
+ checkpointOptions?: Omit<PrefillOptimisticOptions, "checkpointManager">;
215
+ /**
216
+ * Optional deterministic context from `EagerContextBuilder` (C3).
217
+ * When supplied, the prefill `/completion` call includes the system
218
+ * prompt + conversation history so the KV cache is maximally warm.
219
+ */
220
+ getContext?: () => ContextPartial | null;
221
+ };
222
+ /**
223
+ * W3-9 / F1 — optional optimistic-generation policy. When provided, the
224
+ * machine consults `policy.shouldStartOptimisticLm(eotProb)` at the
225
+ * `firePrefill` site before kicking off the speculative prefill. When
226
+ * the policy says no (e.g. on battery, or below the configured EOT
227
+ * threshold) `firePrefill` is a no-op and `handleSpeechEnd` falls back
228
+ * to a regular (non-prefilled) verifier pass. Omit to keep the prior
229
+ * behaviour (fire on every PAUSE_TENTATIVE entry regardless of EOT
230
+ * probability).
231
+ */
232
+ optimisticPolicy?: OptimisticGenerationPolicy;
233
+ }
234
+ /**
235
+ * Explicit state-machine implementation. Stateful (state + active
236
+ * checkpoint + drafter handle); methods are NOT thread-safe — call them
237
+ * from a single event loop.
238
+ */
239
+ export declare class VoiceStateMachine {
240
+ private readonly slotId;
241
+ private readonly enabled;
242
+ private readonly pauseHangoverMs;
243
+ private readonly mgr;
244
+ private readonly startDrafterFn;
245
+ private readonly events;
246
+ /** Tier-3 semantic EOT classifier. Optional — omit for tiers 1+2 only. */
247
+ private readonly eotClassifier;
248
+ private state;
249
+ private turnCounter;
250
+ /** Most recent C1 handle. Retained across `speech-end` until barge-in or next IDLE. */
251
+ private checkpoint;
252
+ private activeDraft;
253
+ private pauseTimestampMs;
254
+ private disposed;
255
+ /**
256
+ * Accumulated hangover extension from EOT mid-clause detections (ms).
257
+ * Reset on each new turn (speech-start). Added to the effective hangover
258
+ * so that consecutive mid-clause detections stack.
259
+ */
260
+ private eotHangoverExtensionMs;
261
+ /**
262
+ * C7 — in-flight prefill promise. Set on PAUSE_TENTATIVE entry; awaited
263
+ * (or discarded) on SPEECH_END / SPEECH_ACTIVE_REBOUND. Fire-and-forget
264
+ * from the perspective of the state machine — the result is surfaced via
265
+ * `onPrefill` and `onCommit(prefillResult)`.
266
+ */
267
+ private prefillPromise;
268
+ private readonly prefillConfig;
269
+ /** W3-9 / F1 — optimistic-generation policy gate for `firePrefill`. */
270
+ private readonly optimisticPolicy;
271
+ /**
272
+ * Most recently observed EOT probability from the Tier-3 classifier.
273
+ * Used as the `eotProb` argument to `prefillOptimistic` when PAUSE_TENTATIVE
274
+ * is entered. Starts at 0.5 (uncertain). Updated on each `partial-transcript`
275
+ * event when an EOT classifier is wired.
276
+ */
277
+ private latestEotProb;
278
+ constructor(opts: VoiceStateMachineOptions);
279
+ /** Current state — read-only view for tests / telemetry. */
280
+ getState(): VoiceState;
281
+ /** Internal turn id for the current turn. Stable across pause/active. */
282
+ getTurnId(): string;
283
+ /**
284
+ * Active checkpoint handle, if any. Exposed for tests; production code
285
+ * should use `onCommit` / `onRollback` events instead.
286
+ */
287
+ getActiveCheckpoint(): CheckpointHandle | null;
288
+ /**
289
+ * Accumulated EOT hangover extension (ms). The `VadDetector` (Tier 2)
290
+ * should add this to its effective pause hangover so mid-clause pauses
291
+ * are not committed prematurely. Resets to 0 on each `speech-start`.
292
+ */
293
+ getEotHangoverExtensionMs(): number;
294
+ /**
295
+ * Drive the machine. Returns a promise that resolves after any async
296
+ * checkpoint work for this event finishes (await it in tests for
297
+ * deterministic assertions). Callers in production may ignore the
298
+ * returned promise — events fire synchronously regardless.
299
+ */
300
+ dispatch(event: VoiceStateEvent): Promise<void>;
301
+ /**
302
+ * Tear down: abort any in-flight drafter, discard the live checkpoint.
303
+ * Safe to call multiple times. After `dispose` the machine ignores
304
+ * further events.
305
+ */
306
+ dispose(): Promise<void>;
307
+ private handleSpeechStart;
308
+ private handleSpeechPause;
309
+ private handleSpeechActive;
310
+ private handleSpeechEnd;
311
+ private handleBargeIn;
312
+ /**
313
+ * Handle a partial transcript chunk from streaming ASR.
314
+ *
315
+ * When an `eotClassifier` is configured, scores the text and applies:
316
+ *
317
+ * P ≥ EOT_COMMIT_THRESHOLD AND silence ≥ EOT_COMMIT_SILENCE_MS
318
+ * → behave as `speech-end` (commit immediately, skip remaining hangover)
319
+ *
320
+ * P ≥ EOT_TENTATIVE_THRESHOLD AND silence ≥ EOT_TENTATIVE_SILENCE_MS
321
+ * AND state is LISTENING
322
+ * → behave as `speech-pause` (enter PAUSE_TENTATIVE, start drafter)
323
+ *
324
+ * P < EOT_MID_CLAUSE_THRESHOLD
325
+ * → accumulate EOT_HANGOVER_EXTENSION_MS into the hangover extension
326
+ * (the VadDetector reads this via `getEotHangoverExtensionMs()`)
327
+ *
328
+ * No-ops when `eotClassifier` is not set, or when the machine is not in
329
+ * LISTENING or PAUSE_TENTATIVE.
330
+ */
331
+ private handlePartialTranscript;
332
+ /**
333
+ * Score the partial transcript with the Tier-3 EOT classifier.
334
+ * Returns 0.5 when no classifier is configured (uncertain — let tiers 1+2 decide).
335
+ */
336
+ private checkEot;
337
+ /**
338
+ * C7 — fire the optimistic prefill in the background and store the
339
+ * promise so `handleSpeechEnd` can await it. The machine never awaits
340
+ * here — it stays in PAUSE_TENTATIVE whether or not the prefill has
341
+ * finished. On `SPEECH_ACTIVE_REBOUND` the promise is discarded; on
342
+ * `SPEECH_END` it is awaited (or its cached result used) and passed
343
+ * through `onCommit(prefillResult)`.
344
+ *
345
+ * W3-9 / F1 — when an `optimisticPolicy` is configured, this is gated on
346
+ * `policy.shouldStartOptimisticLm(eotProb)`. The policy folds the
347
+ * device's power source (plugged-in / battery / unknown), the user's
348
+ * explicit override, and the EOT threshold into a single decision; when
349
+ * it returns false the prefill is suppressed and `handleSpeechEnd`
350
+ * runs a regular (non-prefilled) verifier pass.
351
+ */
352
+ private firePrefill;
353
+ private startSpeculativeDrafter;
354
+ private abortActiveDraft;
355
+ private setState;
356
+ /**
357
+ * Returns `this.state` as the wider `VoiceState` union. Used in
358
+ * post-`await` re-checks where the entry-guard narrowing would
359
+ * otherwise convince TS the state can't have changed (it doesn't track
360
+ * mutations through `setState`).
361
+ */
362
+ private currentState;
363
+ }
364
+ //# sourceMappingURL=voice-state-machine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"voice-state-machine.d.ts","sourceRoot":"","sources":["../../../src/services/voice/voice-state-machine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,117 @@
1
+ /**
2
+ * Voice Workbench benchmark report (#8785).
3
+ *
4
+ * Rolls a matrix of per-scenario scorer results into one machine-readable
5
+ * report + a Markdown rendering, mirroring `voicebench`'s p95/p99 output and the
6
+ * `summarizeVoiceE2e` verdict shape. Pure: it consumes already-scored
7
+ * `VoiceE2eCaseResult`s (the runners — headless services / headful frontend —
8
+ * produce those), so it can be unit-tested without audio, models, or a browser.
9
+ *
10
+ * Honesty contract: a scenario whose corpus/backend artifacts are absent is
11
+ * `skipped`, never `pass`. `overall` is `skipped` only when *every* scenario was
12
+ * skipped; one ran-and-failed scenario makes the whole report `fail`.
13
+ */
14
+ import type { VoiceE2eCaseResult } from "./e2e-harness";
15
+ import type { VoiceScenarioClass } from "./voice-scenario";
16
+ export type VoiceWorkbenchStatus = "ran" | "skipped";
17
+ export type VoiceWorkbenchVerdict = "pass" | "fail" | "skipped";
18
+ /**
19
+ * A `.wav` artifact written for one scenario run when a capture sink is active.
20
+ * `path` is RELATIVE to the run dir the headless runner was told to write under,
21
+ * so the scenario run viewer (served from that dir) can reference it directly.
22
+ */
23
+ export interface VoiceAudioArtifact {
24
+ /** Turn index this artifact belongs to; the full corpus uses turn 0. */
25
+ turnIndex: number;
26
+ /** `generated` = the full synthesized corpus; `consumed` = a per-turn slice. */
27
+ kind: "generated" | "consumed";
28
+ /** Path to the `.wav`, relative to the run dir (forward-slash separated). */
29
+ path: string;
30
+ sampleRate: number;
31
+ durationMs?: number;
32
+ /** Diarization ground-truth speaker label for a consumed per-turn slice. */
33
+ speakerLabel?: string;
34
+ }
35
+ /** One scenario's outcome in a workbench run. */
36
+ export interface VoiceWorkbenchScenarioRun {
37
+ scenarioId: string;
38
+ classes: VoiceScenarioClass[];
39
+ /** `skipped` when corpus/backend artifacts were absent (never scored). */
40
+ status: VoiceWorkbenchStatus;
41
+ /** Scored cases for this scenario (empty when skipped). */
42
+ cases: VoiceE2eCaseResult[];
43
+ /** Why the scenario was skipped (artifact/backend absence), if it was. */
44
+ skipReason?: string;
45
+ /** `.wav` artifacts written when a capture sink was active (else absent). */
46
+ audioArtifacts?: VoiceAudioArtifact[];
47
+ }
48
+ export interface VoiceWorkbenchScenarioReport {
49
+ scenarioId: string;
50
+ classes: VoiceScenarioClass[];
51
+ status: VoiceWorkbenchStatus;
52
+ verdict: VoiceWorkbenchVerdict;
53
+ caseCount: number;
54
+ failedCaseKinds: string[];
55
+ skipReason?: string;
56
+ }
57
+ /** Mean + worst + sample-count for one metric across all ran scenarios. */
58
+ export interface MetricRollup {
59
+ count: number;
60
+ mean: number | null;
61
+ worst: number | null;
62
+ }
63
+ export interface VoiceWorkbenchMetrics {
64
+ /** Transcription word-error-rate (`worst` = max). */
65
+ wer: MetricRollup;
66
+ /** EOT false-trigger rate (`worst` = max) + latency percentiles. */
67
+ eotFalseTriggerRate: MetricRollup;
68
+ eotLatencyP50Ms: number | null;
69
+ eotLatencyP95Ms: number | null;
70
+ /** Diarization error rate (`worst` = max). */
71
+ der: MetricRollup;
72
+ /** Respond-decision accuracy (`worst` = min). */
73
+ respondAccuracy: MetricRollup;
74
+ /** Entity-extraction F1 (`worst` = min). */
75
+ entityF1: MetricRollup;
76
+ /** Voice→entity match rate (`worst` = min). */
77
+ voiceEntityMatchRate: MetricRollup;
78
+ /** First-audio latency ms (`worst` = max). */
79
+ firstAudioMs: MetricRollup;
80
+ /** Self-echo rejection rate (`worst` = min). */
81
+ echoRejectionRate: MetricRollup;
82
+ /** Owner-vs-intruder accuracy (`worst` = min). */
83
+ ownerAccuracy: MetricRollup;
84
+ /** Impostor-accept rate (`worst` = max) — non-owner accepted as owner. */
85
+ impostorAcceptRate: MetricRollup;
86
+ }
87
+ export interface VoiceWorkbenchReport {
88
+ schemaVersion: 1;
89
+ overall: VoiceWorkbenchVerdict;
90
+ scenariosTotal: number;
91
+ scenariosRan: number;
92
+ scenariosSkipped: number;
93
+ scenarios: VoiceWorkbenchScenarioReport[];
94
+ metrics: VoiceWorkbenchMetrics;
95
+ }
96
+ /**
97
+ * Aggregate per-scenario scorer results into one gating report. `overall` is
98
+ * `fail` if any scenario ran and failed, else `pass` if any scenario ran and
99
+ * passed, else `skipped`.
100
+ */
101
+ export declare function buildVoiceWorkbenchReport(runs: ReadonlyArray<VoiceWorkbenchScenarioRun>): VoiceWorkbenchReport;
102
+ /** Render a workbench report as Markdown (one metric table + a scenario table). */
103
+ export declare function formatVoiceWorkbenchMarkdown(report: VoiceWorkbenchReport): string;
104
+ export interface MetricRegression {
105
+ metric: string;
106
+ baseline: number;
107
+ current: number;
108
+ delta: number;
109
+ }
110
+ /**
111
+ * Compare two reports and flag metrics that regressed beyond `tolerance`.
112
+ * "Lower is better" metrics (WER, EOT FTR, DER, latencies) regress when they
113
+ * rise; "higher is better" metrics (accuracies, F1, match rate) regress when
114
+ * they fall. Only metrics present (non-null mean) in both reports are compared.
115
+ */
116
+ export declare function regressionsAgainstBaseline(current: VoiceWorkbenchReport, baseline: VoiceWorkbenchReport, tolerance?: number): MetricRegression[];
117
+ //# sourceMappingURL=voice-workbench-report.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"voice-workbench-report.d.ts","sourceRoot":"","sources":["../../../src/services/voice/voice-workbench-report.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,100 @@
1
+ /**
2
+ * Wake-word detection — native runtime binding.
3
+ *
4
+ * Loads the standalone `packages/native/plugins/wakeword-cpp/`
5
+ * library directly via `bun:ffi` and exposes the `WakeWordModel`
6
+ * interface as `OpenWakeWordGgmlModel`. The sibling `./wake-word.ts`
7
+ * is the fused-`libelizainference` path (`GgmlWakeWordModel`, the
8
+ * `eliza_inference_wakeword_*` FFI surface) and selects between the two
9
+ * native backends; both implement the same interface so the voice
10
+ * lifecycle can swap them without changing anything upstream. There is
11
+ * NO ONNX path on either — `onnxruntime-node` was removed.
12
+ *
13
+ * This binding is the standalone-library backend, used when the
14
+ * `libwakeword.{so,dylib,dll}` shared library and three converted
15
+ * GGUFs are present. The C runtime is a pure-fp32 reference
16
+ * implementation of the openWakeWord three-stage pipeline (melspec
17
+ * → embedding CNN → classifier head) — no ggml link, no SIMD; a
18
+ * laptop CPU runs it under 1 % of real time. ABI parity with the
19
+ * upstream openWakeWord ONNX graphs is gated by
20
+ * `packages/native/plugins/wakeword-cpp/test/wakeword_parity_test.py`.
21
+ *
22
+ * Three GGUFs back one session, mirroring openWakeWord's three ONNX
23
+ * graphs (the C library is the single source of truth on shapes —
24
+ * see `packages/native/plugins/wakeword-cpp/include/wakeword/wakeword.h`):
25
+ *
26
+ * 1. melspec — 16 kHz PCM → 32-bin log-mel frames.
27
+ * 2. embedding — 20-Conv2D CNN over a 76-mel-frame sliding window
28
+ * → 96-dim embedding.
29
+ * 3. classifier — 4-layer MLP over a 16-embedding window → P(wake)
30
+ * ∈ [0, 1].
31
+ */
32
+ import type { WakeWordModel } from "./types";
33
+ /** Three GGUF paths that back one session. */
34
+ export interface WakeWordGgmlPaths {
35
+ /** Frozen Hann window + mel filter bank + STFT params metadata. */
36
+ melspec: string;
37
+ /** Embedding-CNN weights (fp16) + architecture metadata. */
38
+ embedding: string;
39
+ /** Classifier-head weights (fp16) + (1, 16, 96) input shape. */
40
+ classifier: string;
41
+ }
42
+ export interface WakeWordGgmlConfig {
43
+ /** Detection threshold ∈ [0, 1]. Default 0.5 (matches upstream openWakeWord). */
44
+ threshold?: number;
45
+ }
46
+ /**
47
+ * Thrown when the native ggml backend cannot be used. Distinct from
48
+ * `WakeWordUnavailableError` in `./wake-word.ts` so callers that fall
49
+ * back to the legacy ONNX path can tell the two failure modes apart
50
+ * during the migration.
51
+ */
52
+ export declare class WakeWordGgmlUnavailableError extends Error {
53
+ readonly code: "not-bun" | "library-load-failed" | "model-load-failed" | "abi-error";
54
+ constructor(code: WakeWordGgmlUnavailableError["code"], message: string);
55
+ }
56
+ /**
57
+ * Streaming wake-word detector backed by `libwakeword`.
58
+ *
59
+ * Implements the same `WakeWordModel` interface as `OpenWakeWordModel`
60
+ * in `./wake-word.ts` so the voice lifecycle can swap implementations
61
+ * without changing anything upstream.
62
+ */
63
+ export declare class OpenWakeWordGgmlModel implements WakeWordModel {
64
+ private readonly lib;
65
+ private readonly handle;
66
+ readonly frameSamples = 1280;
67
+ readonly sampleRate = 16000;
68
+ private constructor();
69
+ /**
70
+ * Load a wake-word model from its three GGUFs and the
71
+ * `libwakeword` shared library. Returns a ready-to-use detector
72
+ * with a fresh streaming session. Throws
73
+ * `WakeWordGgmlUnavailableError` on dlopen / ABI / GGUF failure.
74
+ */
75
+ static load(args: {
76
+ libraryPath: string;
77
+ paths: WakeWordGgmlPaths;
78
+ config?: WakeWordGgmlConfig;
79
+ }): Promise<OpenWakeWordGgmlModel>;
80
+ /**
81
+ * Score one 1280-sample (80 ms @ 16 kHz) fp32 mono frame and
82
+ * return the most recent classifier probability ∈ [0, 1]. Early
83
+ * frames (before enough mel + embedding context has accumulated)
84
+ * return 0.
85
+ */
86
+ scoreFrame(frame: Float32Array): Promise<number>;
87
+ /**
88
+ * Streaming state lives on the native side. The C ABI does not
89
+ * expose a separate `reset` entry point yet (Phase 2 will add one
90
+ * if the ggml-backed implementation needs it); for now, reset is
91
+ * a no-op on the JS side. Callers that need a hard state clear
92
+ * close + reopen the session.
93
+ */
94
+ reset(): void;
95
+ /** Release the native session and the dlopen handle. */
96
+ close(): void;
97
+ /** Diagnostics: `"native-cpu"` on this build (pure-fp32 reference). */
98
+ activeBackend(): string;
99
+ }
100
+ //# sourceMappingURL=wake-word-ggml.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wake-word-ggml.d.ts","sourceRoot":"","sources":["../../../src/services/voice/wake-word-ggml.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAM7C,8CAA8C;AAC9C,MAAM,WAAW,iBAAiB;IACjC,mEAAmE;IACnE,OAAO,EAAE,MAAM,CAAC;IAChB,4DAA4D;IAC5D,SAAS,EAAE,MAAM,CAAC;IAClB,gEAAgE;IAChE,UAAU,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB;IAClC,iFAAiF;IACjF,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;GAKG;AACH,qBAAa,4BAA6B,SAAQ,KAAK;IACtD,QAAQ,CAAC,IAAI,EACV,SAAS,GACT,qBAAqB,GACrB,mBAAmB,GACnB,WAAW,CAAC;gBACH,IAAI,EAAE,4BAA4B,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,MAAM;CAKvE;AAkID;;;;;;GAMG;AACH,qBAAa,qBAAsB,YAAW,aAAa;IAKzD,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,MAAM;IALxB,QAAQ,CAAC,YAAY,QAAiB;IACtC,QAAQ,CAAC,UAAU,SAAe;IAElC,OAAO;IAKP;;;;;OAKG;WACU,IAAI,CAAC,IAAI,EAAE;QACvB,WAAW,EAAE,MAAM,CAAC;QACpB,KAAK,EAAE,iBAAiB,CAAC;QACzB,MAAM,CAAC,EAAE,kBAAkB,CAAC;KAC5B,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAyClC;;;;;OAKG;IACG,UAAU,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IAuBtD;;;;;;OAMG;IACH,KAAK,IAAI,IAAI;IAIb,wDAAwD;IACxD,KAAK,IAAI,IAAI;IAKb,uEAAuE;IACvE,aAAa,IAAI,MAAM;CAIvB"}