@elizaos/plugin-local-inference 2.0.0-beta.1 → 2.0.11-beta.7

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 (676) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +83 -0
  3. package/package.json +81 -15
  4. package/src/actions/generate-media.d.ts +59 -0
  5. package/src/actions/generate-media.d.ts.map +1 -0
  6. package/src/actions/generate-media.ts +647 -0
  7. package/src/actions/identify-speaker.d.ts +23 -0
  8. package/src/actions/identify-speaker.d.ts.map +1 -0
  9. package/src/actions/identify-speaker.ts +171 -0
  10. package/src/adapters/capacitor-llama/__tests__/compat-behavior.test.ts +218 -0
  11. package/src/adapters/capacitor-llama/__tests__/index.test.ts +68 -0
  12. package/src/adapters/capacitor-llama/__tests__/structured-output.test.ts +215 -0
  13. package/src/adapters/capacitor-llama/__tests__/text-streaming.test.ts +174 -0
  14. package/src/adapters/capacitor-llama/environment.ts +71 -0
  15. package/src/adapters/capacitor-llama/index.browser.ts +83 -0
  16. package/src/adapters/capacitor-llama/index.ts +807 -0
  17. package/src/adapters/capacitor-llama/loader.ts +109 -0
  18. package/src/adapters/capacitor-llama/structured-output.ts +165 -0
  19. package/src/adapters/capacitor-llama/text-streaming.ts +227 -0
  20. package/src/adapters/capacitor-llama/types.ts +374 -0
  21. package/src/backends/apple-foundation.ts +127 -0
  22. package/src/index.d.ts +7 -0
  23. package/src/index.d.ts.map +1 -0
  24. package/src/index.ts +54 -0
  25. package/src/local-inference-routes.d.ts +38 -0
  26. package/src/local-inference-routes.d.ts.map +1 -0
  27. package/src/local-inference-routes.test.ts +344 -0
  28. package/src/local-inference-routes.ts +1543 -0
  29. package/src/provider.d.ts +21 -0
  30. package/src/provider.d.ts.map +1 -0
  31. package/src/provider.ts +1171 -0
  32. package/src/routes/compat-helpers.d.ts +18 -0
  33. package/src/routes/compat-helpers.d.ts.map +1 -0
  34. package/src/routes/compat-helpers.ts +274 -0
  35. package/src/routes/family-member-route.d.ts +62 -0
  36. package/src/routes/family-member-route.d.ts.map +1 -0
  37. package/src/routes/family-member-route.ts +353 -0
  38. package/src/routes/index.d.ts +19 -0
  39. package/src/routes/index.d.ts.map +1 -0
  40. package/src/routes/index.ts +60 -0
  41. package/src/routes/live-diarization-route.d.ts +26 -0
  42. package/src/routes/live-diarization-route.d.ts.map +1 -0
  43. package/src/routes/live-diarization-route.test.ts +213 -0
  44. package/src/routes/live-diarization-route.ts +122 -0
  45. package/src/routes/local-inference-asr-route.d.ts +4 -0
  46. package/src/routes/local-inference-asr-route.d.ts.map +1 -0
  47. package/src/routes/local-inference-asr-route.test.ts +190 -0
  48. package/src/routes/local-inference-asr-route.ts +213 -0
  49. package/src/routes/local-inference-compat-routes.d.ts +16 -0
  50. package/src/routes/local-inference-compat-routes.d.ts.map +1 -0
  51. package/src/routes/local-inference-compat-routes.test.ts +423 -0
  52. package/src/routes/local-inference-compat-routes.ts +782 -0
  53. package/src/routes/local-inference-tts-route.d.ts +7 -0
  54. package/src/routes/local-inference-tts-route.d.ts.map +1 -0
  55. package/src/routes/local-inference-tts-route.test.ts +179 -0
  56. package/src/routes/local-inference-tts-route.ts +230 -0
  57. package/src/routes/voice-first-run-routes.d.ts +62 -0
  58. package/src/routes/voice-first-run-routes.d.ts.map +1 -0
  59. package/src/routes/voice-first-run-routes.ts +524 -0
  60. package/src/routes/voice-models-routes.d.ts +62 -0
  61. package/src/routes/voice-models-routes.d.ts.map +1 -0
  62. package/src/routes/voice-models-routes.ts +554 -0
  63. package/src/routes/voice-profile-plugin-routes.d.ts +19 -0
  64. package/src/routes/voice-profile-plugin-routes.d.ts.map +1 -0
  65. package/src/routes/voice-profile-plugin-routes.ts +138 -0
  66. package/src/routes/voice-profiles-management-routes.d.ts +52 -0
  67. package/src/routes/voice-profiles-management-routes.d.ts.map +1 -0
  68. package/src/routes/voice-profiles-management-routes.ts +476 -0
  69. package/src/routes/voice-speaker-profile-routes.d.ts +57 -0
  70. package/src/routes/voice-speaker-profile-routes.d.ts.map +1 -0
  71. package/src/routes/voice-speaker-profile-routes.ts +199 -0
  72. package/src/runtime/aosp-llama-loader-selection.test.ts +80 -0
  73. package/src/runtime/capacitor-llama.d.ts +25 -0
  74. package/src/runtime/embedding-manager-support.d.ts +77 -0
  75. package/src/runtime/embedding-manager-support.d.ts.map +1 -0
  76. package/src/runtime/embedding-manager-support.ts +497 -0
  77. package/src/runtime/embedding-presets.d.ts +16 -0
  78. package/src/runtime/embedding-presets.d.ts.map +1 -0
  79. package/src/runtime/embedding-presets.ts +81 -0
  80. package/src/runtime/embedding-warmup-policy.d.ts +14 -0
  81. package/src/runtime/embedding-warmup-policy.d.ts.map +1 -0
  82. package/src/runtime/embedding-warmup-policy.test.ts +53 -0
  83. package/src/runtime/embedding-warmup-policy.ts +48 -0
  84. package/src/runtime/ensure-local-inference-handler.d.ts +53 -0
  85. package/src/runtime/ensure-local-inference-handler.d.ts.map +1 -0
  86. package/src/runtime/ensure-local-inference-handler.test.ts +528 -0
  87. package/src/runtime/ensure-local-inference-handler.ts +1398 -0
  88. package/src/runtime/index.d.ts +14 -0
  89. package/src/runtime/index.d.ts.map +1 -0
  90. package/src/runtime/index.ts +27 -0
  91. package/src/runtime/mobile-local-inference-gate.d.ts +31 -0
  92. package/src/runtime/mobile-local-inference-gate.d.ts.map +1 -0
  93. package/src/runtime/mobile-local-inference-gate.test.ts +69 -0
  94. package/src/runtime/mobile-local-inference-gate.ts +44 -0
  95. package/src/runtime/voice-entity-binding.d.ts +103 -0
  96. package/src/runtime/voice-entity-binding.d.ts.map +1 -0
  97. package/src/runtime/voice-entity-binding.transcript.test.ts +69 -0
  98. package/src/runtime/voice-entity-binding.ts +328 -0
  99. package/src/services/README.md +71 -0
  100. package/src/services/__tests__/backend-selector.test.ts +101 -0
  101. package/src/services/__tests__/checkpoint-manager.test.ts +376 -0
  102. package/src/services/__tests__/gpu-autotune.test.ts +400 -0
  103. package/src/services/__tests__/llm-streaming-binding.test.ts +85 -0
  104. package/src/services/__tests__/planner-grammar.test.ts +372 -0
  105. package/src/services/__tests__/runtime-target.test.ts +176 -0
  106. package/src/services/active-model-switch-rollback.test.ts +183 -0
  107. package/src/services/active-model.d.ts +282 -0
  108. package/src/services/active-model.d.ts.map +1 -0
  109. package/src/services/active-model.ts +1213 -0
  110. package/src/services/asr/errors.d.ts +21 -0
  111. package/src/services/asr/errors.d.ts.map +1 -0
  112. package/src/services/asr/errors.ts +50 -0
  113. package/src/services/asr/hash.d.ts +28 -0
  114. package/src/services/asr/hash.d.ts.map +1 -0
  115. package/src/services/asr/hash.ts +49 -0
  116. package/src/services/asr/index.d.ts +76 -0
  117. package/src/services/asr/index.d.ts.map +1 -0
  118. package/src/services/asr/index.ts +178 -0
  119. package/src/services/asr/types.d.ts +91 -0
  120. package/src/services/asr/types.d.ts.map +1 -0
  121. package/src/services/asr/types.ts +95 -0
  122. package/src/services/assignments.d.ts +71 -0
  123. package/src/services/assignments.d.ts.map +1 -0
  124. package/src/services/assignments.test.ts +80 -0
  125. package/src/services/assignments.ts +230 -0
  126. package/src/services/backend-selector.ts +95 -0
  127. package/src/services/backend.d.ts +346 -0
  128. package/src/services/backend.d.ts.map +1 -0
  129. package/src/services/backend.ts +612 -0
  130. package/src/services/bundled-models.d.ts +34 -0
  131. package/src/services/bundled-models.d.ts.map +1 -0
  132. package/src/services/bundled-models.ts +129 -0
  133. package/src/services/cache-bridge.d.ts +206 -0
  134. package/src/services/cache-bridge.d.ts.map +1 -0
  135. package/src/services/cache-bridge.test.ts +516 -0
  136. package/src/services/cache-bridge.ts +423 -0
  137. package/src/services/catalog.d.ts +10 -0
  138. package/src/services/catalog.d.ts.map +1 -0
  139. package/src/services/catalog.test.ts +240 -0
  140. package/src/services/catalog.ts +27 -0
  141. package/src/services/checkpoint-client.d.ts +109 -0
  142. package/src/services/checkpoint-client.d.ts.map +1 -0
  143. package/src/services/checkpoint-client.ts +258 -0
  144. package/src/services/checkpoint-manager.ts +474 -0
  145. package/src/services/cloud-fallback.d.ts +102 -0
  146. package/src/services/cloud-fallback.d.ts.map +1 -0
  147. package/src/services/cloud-fallback.ts +230 -0
  148. package/src/services/conversation-registry.d.ts +142 -0
  149. package/src/services/conversation-registry.d.ts.map +1 -0
  150. package/src/services/conversation-registry.test.ts +235 -0
  151. package/src/services/conversation-registry.ts +264 -0
  152. package/src/services/desktop-fused-ffi-backend-runtime.d.ts +92 -0
  153. package/src/services/desktop-fused-ffi-backend-runtime.d.ts.map +1 -0
  154. package/src/services/desktop-fused-ffi-backend-runtime.ts +333 -0
  155. package/src/services/device-bridge.d.ts +188 -0
  156. package/src/services/device-bridge.d.ts.map +1 -0
  157. package/src/services/device-bridge.ts +1237 -0
  158. package/src/services/device-resource-metrics.d.ts +149 -0
  159. package/src/services/device-resource-metrics.d.ts.map +1 -0
  160. package/src/services/device-resource-metrics.test.ts +98 -0
  161. package/src/services/device-resource-metrics.ts +346 -0
  162. package/src/services/device-tier.d.ts +115 -0
  163. package/src/services/device-tier.d.ts.map +1 -0
  164. package/src/services/device-tier.test.ts +371 -0
  165. package/src/services/device-tier.ts +410 -0
  166. package/src/services/downloader.d.ts +82 -0
  167. package/src/services/downloader.d.ts.map +1 -0
  168. package/src/services/downloader.test.ts +724 -0
  169. package/src/services/downloader.ts +899 -0
  170. package/src/services/engine-direct-bundle.test.ts +58 -0
  171. package/src/services/engine-streaming.test.ts +80 -0
  172. package/src/services/engine.d.ts +534 -0
  173. package/src/services/engine.d.ts.map +1 -0
  174. package/src/services/engine.ts +1891 -0
  175. package/src/services/ensure-local-artifacts.integration.test.ts +273 -0
  176. package/src/services/ensure-local-artifacts.test.ts +368 -0
  177. package/src/services/ensure-local-artifacts.ts +351 -0
  178. package/src/services/external-scanner.d.ts +17 -0
  179. package/src/services/external-scanner.d.ts.map +1 -0
  180. package/src/services/external-scanner.ts +312 -0
  181. package/src/services/ffi-llm-mock.ts +354 -0
  182. package/src/services/ffi-llm-streaming-abi.ts +442 -0
  183. package/src/services/ffi-streaming-backend.d.ts +180 -0
  184. package/src/services/ffi-streaming-backend.d.ts.map +1 -0
  185. package/src/services/ffi-streaming-backend.ts +382 -0
  186. package/src/services/ffi-streaming-runner.d.ts +122 -0
  187. package/src/services/ffi-streaming-runner.d.ts.map +1 -0
  188. package/src/services/ffi-streaming-runner.test.ts +60 -0
  189. package/src/services/ffi-streaming-runner.ts +354 -0
  190. package/src/services/ffi-unload-ordering.test.ts +162 -0
  191. package/src/services/gpu-autotune.ts +534 -0
  192. package/src/services/gpu-detect.ts +139 -0
  193. package/src/services/handler-registry.d.ts +72 -0
  194. package/src/services/handler-registry.d.ts.map +1 -0
  195. package/src/services/handler-registry.ts +240 -0
  196. package/src/services/hardware.d.ts +63 -0
  197. package/src/services/hardware.d.ts.map +1 -0
  198. package/src/services/hardware.test.ts +183 -0
  199. package/src/services/hardware.ts +404 -0
  200. package/src/services/hf-search.d.ts +26 -0
  201. package/src/services/hf-search.d.ts.map +1 -0
  202. package/src/services/hf-search.test.ts +69 -0
  203. package/src/services/hf-search.ts +420 -0
  204. package/src/services/image-description-runtime.d.ts +14 -0
  205. package/src/services/image-description-runtime.d.ts.map +1 -0
  206. package/src/services/image-description-runtime.test.ts +61 -0
  207. package/src/services/image-description-runtime.ts +118 -0
  208. package/src/services/imagegen/aosp-unavailable.d.ts +134 -0
  209. package/src/services/imagegen/aosp-unavailable.d.ts.map +1 -0
  210. package/src/services/imagegen/aosp-unavailable.ts +229 -0
  211. package/src/services/imagegen/backend-selector.d.ts +118 -0
  212. package/src/services/imagegen/backend-selector.d.ts.map +1 -0
  213. package/src/services/imagegen/backend-selector.ts +281 -0
  214. package/src/services/imagegen/coreml-unavailable.d.ts +105 -0
  215. package/src/services/imagegen/coreml-unavailable.d.ts.map +1 -0
  216. package/src/services/imagegen/coreml-unavailable.ts +237 -0
  217. package/src/services/imagegen/errors.d.ts +16 -0
  218. package/src/services/imagegen/errors.d.ts.map +1 -0
  219. package/src/services/imagegen/errors.ts +40 -0
  220. package/src/services/imagegen/index.d.ts +58 -0
  221. package/src/services/imagegen/index.d.ts.map +1 -0
  222. package/src/services/imagegen/index.ts +144 -0
  223. package/src/services/imagegen/mflux.d.ts +74 -0
  224. package/src/services/imagegen/mflux.d.ts.map +1 -0
  225. package/src/services/imagegen/mflux.ts +313 -0
  226. package/src/services/imagegen/sd-cpp.d.ts +180 -0
  227. package/src/services/imagegen/sd-cpp.d.ts.map +1 -0
  228. package/src/services/imagegen/sd-cpp.ts +718 -0
  229. package/src/services/imagegen/tensorrt-unavailable.d.ts +83 -0
  230. package/src/services/imagegen/tensorrt-unavailable.d.ts.map +1 -0
  231. package/src/services/imagegen/tensorrt-unavailable.ts +295 -0
  232. package/src/services/imagegen/types.d.ts +181 -0
  233. package/src/services/imagegen/types.d.ts.map +1 -0
  234. package/src/services/imagegen/types.ts +193 -0
  235. package/src/services/index.d.ts +30 -0
  236. package/src/services/index.d.ts.map +1 -0
  237. package/src/services/index.ts +225 -0
  238. package/src/services/inference-capabilities.d.ts +132 -0
  239. package/src/services/inference-capabilities.d.ts.map +1 -0
  240. package/src/services/inference-capabilities.test.ts +75 -0
  241. package/src/services/inference-capabilities.ts +204 -0
  242. package/src/services/inference-telemetry.d.ts +59 -0
  243. package/src/services/inference-telemetry.d.ts.map +1 -0
  244. package/src/services/inference-telemetry.ts +143 -0
  245. package/src/services/ios-llama-streaming.ts +248 -0
  246. package/src/services/kv-spill.d.ts +189 -0
  247. package/src/services/kv-spill.d.ts.map +1 -0
  248. package/src/services/kv-spill.test.ts +222 -0
  249. package/src/services/kv-spill.ts +356 -0
  250. package/src/services/latency-trace.d.ts +346 -0
  251. package/src/services/latency-trace.d.ts.map +1 -0
  252. package/src/services/latency-trace.test.ts +266 -0
  253. package/src/services/latency-trace.ts +844 -0
  254. package/src/services/llama-server-metrics.ts +304 -0
  255. package/src/services/llm-streaming-binding.d.ts +96 -0
  256. package/src/services/llm-streaming-binding.d.ts.map +1 -0
  257. package/src/services/llm-streaming-binding.ts +136 -0
  258. package/src/services/load-args.d.ts +82 -0
  259. package/src/services/load-args.d.ts.map +1 -0
  260. package/src/services/load-args.ts +81 -0
  261. package/src/services/manifest/eliza-1.manifest.v1.json +708 -0
  262. package/src/services/manifest/index.d.ts +4 -0
  263. package/src/services/manifest/index.d.ts.map +1 -0
  264. package/src/services/manifest/index.ts +66 -0
  265. package/src/services/manifest/manifest.test.ts +693 -0
  266. package/src/services/manifest/schema.d.ts +715 -0
  267. package/src/services/manifest/schema.d.ts.map +1 -0
  268. package/src/services/manifest/schema.ts +655 -0
  269. package/src/services/manifest/types.d.ts +30 -0
  270. package/src/services/manifest/types.d.ts.map +1 -0
  271. package/src/services/manifest/types.ts +55 -0
  272. package/src/services/manifest/validator.d.ts +66 -0
  273. package/src/services/manifest/validator.d.ts.map +1 -0
  274. package/src/services/manifest/validator.ts +569 -0
  275. package/src/services/memory-arbiter.d.ts +343 -0
  276. package/src/services/memory-arbiter.d.ts.map +1 -0
  277. package/src/services/memory-arbiter.test.ts +419 -0
  278. package/src/services/memory-arbiter.ts +1000 -0
  279. package/src/services/memory-monitor.d.ts +119 -0
  280. package/src/services/memory-monitor.d.ts.map +1 -0
  281. package/src/services/memory-monitor.test.ts +208 -0
  282. package/src/services/memory-monitor.ts +296 -0
  283. package/src/services/memory-pressure.d.ts +127 -0
  284. package/src/services/memory-pressure.d.ts.map +1 -0
  285. package/src/services/memory-pressure.ts +413 -0
  286. package/src/services/mtp-doctor.d.ts +13 -0
  287. package/src/services/mtp-doctor.d.ts.map +1 -0
  288. package/src/services/mtp-doctor.ts +78 -0
  289. package/src/services/network-policy.d.ts +127 -0
  290. package/src/services/network-policy.d.ts.map +1 -0
  291. package/src/services/network-policy.ts +346 -0
  292. package/src/services/paths.d.ts +6 -0
  293. package/src/services/paths.d.ts.map +1 -0
  294. package/src/services/paths.ts +25 -0
  295. package/src/services/planner-skeleton.d.ts +124 -0
  296. package/src/services/planner-skeleton.d.ts.map +1 -0
  297. package/src/services/planner-skeleton.ts +175 -0
  298. package/src/services/providers.d.ts +38 -0
  299. package/src/services/providers.d.ts.map +1 -0
  300. package/src/services/providers.ts +507 -0
  301. package/src/services/ram-budget-cache.test.ts +163 -0
  302. package/src/services/ram-budget.d.ts +110 -0
  303. package/src/services/ram-budget.d.ts.map +1 -0
  304. package/src/services/ram-budget.ts +0 -0
  305. package/src/services/readiness.d.ts +9 -0
  306. package/src/services/readiness.d.ts.map +1 -0
  307. package/src/services/readiness.test.ts +87 -0
  308. package/src/services/readiness.ts +238 -0
  309. package/src/services/recommendation.d.ts +111 -0
  310. package/src/services/recommendation.d.ts.map +1 -0
  311. package/src/services/recommendation.ts +672 -0
  312. package/src/services/registry.d.ts +35 -0
  313. package/src/services/registry.d.ts.map +1 -0
  314. package/src/services/registry.ts +151 -0
  315. package/src/services/router-handler.d.ts +92 -0
  316. package/src/services/router-handler.d.ts.map +1 -0
  317. package/src/services/router-handler.test.ts +45 -0
  318. package/src/services/router-handler.ts +376 -0
  319. package/src/services/routing-policy.d.ts +55 -0
  320. package/src/services/routing-policy.d.ts.map +1 -0
  321. package/src/services/routing-policy.ts +228 -0
  322. package/src/services/routing-preferences.d.ts +8 -0
  323. package/src/services/routing-preferences.d.ts.map +1 -0
  324. package/src/services/routing-preferences.ts +15 -0
  325. package/src/services/runtime-target.d.ts +98 -0
  326. package/src/services/runtime-target.d.ts.map +1 -0
  327. package/src/services/runtime-target.ts +154 -0
  328. package/src/services/service.d.ts +128 -0
  329. package/src/services/service.d.ts.map +1 -0
  330. package/src/services/service.test.ts +223 -0
  331. package/src/services/service.ts +735 -0
  332. package/src/services/session-pool.d.ts +72 -0
  333. package/src/services/session-pool.d.ts.map +1 -0
  334. package/src/services/session-pool.ts +153 -0
  335. package/src/services/structured-output/deterministic-repair.d.ts +23 -0
  336. package/src/services/structured-output/deterministic-repair.d.ts.map +1 -0
  337. package/src/services/structured-output/deterministic-repair.test.ts +169 -0
  338. package/src/services/structured-output/deterministic-repair.ts +443 -0
  339. package/src/services/structured-output/index.ts +4 -0
  340. package/src/services/structured-output.d.ts +311 -0
  341. package/src/services/structured-output.d.ts.map +1 -0
  342. package/src/services/structured-output.test.ts +483 -0
  343. package/src/services/structured-output.ts +712 -0
  344. package/src/services/transcription-priority.test.ts +211 -0
  345. package/src/services/tts/errors.ts +46 -0
  346. package/src/services/tts/index.ts +214 -0
  347. package/src/services/tts/tts-audio-cache.ts +235 -0
  348. package/src/services/tts/types.ts +157 -0
  349. package/src/services/types.d.ts +19 -0
  350. package/src/services/types.d.ts.map +1 -0
  351. package/src/services/types.ts +55 -0
  352. package/src/services/verify-on-device.d.ts +34 -0
  353. package/src/services/verify-on-device.d.ts.map +1 -0
  354. package/src/services/verify-on-device.test.ts +87 -0
  355. package/src/services/verify-on-device.ts +127 -0
  356. package/src/services/verify.d.ts +8 -0
  357. package/src/services/verify.d.ts.map +1 -0
  358. package/src/services/verify.ts +13 -0
  359. package/src/services/vision/aosp-unavailable.d.ts +115 -0
  360. package/src/services/vision/aosp-unavailable.d.ts.map +1 -0
  361. package/src/services/vision/aosp-unavailable.ts +163 -0
  362. package/src/services/vision/capacitor-llama.d.ts +99 -0
  363. package/src/services/vision/capacitor-llama.d.ts.map +1 -0
  364. package/src/services/vision/capacitor-llama.ts +255 -0
  365. package/src/services/vision/cloud-fallback.d.ts +47 -0
  366. package/src/services/vision/cloud-fallback.d.ts.map +1 -0
  367. package/src/services/vision/cloud-fallback.test.ts +243 -0
  368. package/src/services/vision/cloud-fallback.ts +268 -0
  369. package/src/services/vision/fallback-chain.test.ts +86 -0
  370. package/src/services/vision/hash.d.ts +71 -0
  371. package/src/services/vision/hash.d.ts.map +1 -0
  372. package/src/services/vision/hash.ts +157 -0
  373. package/src/services/vision/index.d.ts +95 -0
  374. package/src/services/vision/index.d.ts.map +1 -0
  375. package/src/services/vision/index.ts +251 -0
  376. package/src/services/vision/llama-server.d.ts +73 -0
  377. package/src/services/vision/llama-server.d.ts.map +1 -0
  378. package/src/services/vision/llama-server.ts +177 -0
  379. package/src/services/vision/types.d.ts +153 -0
  380. package/src/services/vision/types.d.ts.map +1 -0
  381. package/src/services/vision/types.ts +154 -0
  382. package/src/services/vision/vast-fallback.d.ts +18 -0
  383. package/src/services/vision/vast-fallback.d.ts.map +1 -0
  384. package/src/services/vision/vast-fallback.ts +127 -0
  385. package/src/services/vision-embedding-cache.d.ts +98 -0
  386. package/src/services/vision-embedding-cache.d.ts.map +1 -0
  387. package/src/services/vision-embedding-cache.ts +189 -0
  388. package/src/services/voice/VOICE_WORKBENCH.md +88 -0
  389. package/src/services/voice/__test-helpers__/fake-ffi.ts +92 -0
  390. package/src/services/voice/__test-helpers__/synthetic-speech.ts +124 -0
  391. package/src/services/voice/__tests__/checkpoint-manager.test.ts +241 -0
  392. package/src/services/voice/__tests__/checkpoint-policy.test.ts +270 -0
  393. package/src/services/voice/__tests__/eager-context-builder.test.ts +257 -0
  394. package/src/services/voice/__tests__/eliza1-eot-scorer.test.ts +288 -0
  395. package/src/services/voice/__tests__/eot-classifier.test.ts +431 -0
  396. package/src/services/voice/__tests__/optimistic-rollback.test.ts +312 -0
  397. package/src/services/voice/__tests__/prefill-client.test.ts +266 -0
  398. package/src/services/voice/__tests__/prefix-preserving-queue.test.ts +208 -0
  399. package/src/services/voice/__tests__/streaming-asr.test.ts +450 -0
  400. package/src/services/voice/__tests__/streaming-transcriber.test.ts +339 -0
  401. package/src/services/voice/__tests__/turn-detector-resolver.test.ts +197 -0
  402. package/src/services/voice/__tests__/voice-state-machine-prefill.test.ts +275 -0
  403. package/src/services/voice/__tests__/voice-state-machine.test.ts +354 -0
  404. package/src/services/voice/audio-frame-consumer.d.ts +212 -0
  405. package/src/services/voice/audio-frame-consumer.d.ts.map +1 -0
  406. package/src/services/voice/audio-frame-consumer.test.ts +343 -0
  407. package/src/services/voice/audio-frame-consumer.ts +491 -0
  408. package/src/services/voice/barge-in.d.ts +112 -0
  409. package/src/services/voice/barge-in.d.ts.map +1 -0
  410. package/src/services/voice/barge-in.test.ts +244 -0
  411. package/src/services/voice/barge-in.ts +336 -0
  412. package/src/services/voice/cancellation-coordinator.d.ts +127 -0
  413. package/src/services/voice/cancellation-coordinator.d.ts.map +1 -0
  414. package/src/services/voice/cancellation-coordinator.test.ts +196 -0
  415. package/src/services/voice/cancellation-coordinator.ts +269 -0
  416. package/src/services/voice/checkpoint-manager.d.ts +199 -0
  417. package/src/services/voice/checkpoint-manager.d.ts.map +1 -0
  418. package/src/services/voice/checkpoint-manager.ts +401 -0
  419. package/src/services/voice/checkpoint-policy.ts +336 -0
  420. package/src/services/voice/composite-eot-classifier.test.ts +59 -0
  421. package/src/services/voice/e2e-harness.test.ts +182 -0
  422. package/src/services/voice/e2e-harness.ts +743 -0
  423. package/src/services/voice/eager-context-builder.d.ts +170 -0
  424. package/src/services/voice/eager-context-builder.d.ts.map +1 -0
  425. package/src/services/voice/eager-context-builder.ts +262 -0
  426. package/src/services/voice/eliza1-eot-scorer.d.ts +124 -0
  427. package/src/services/voice/eliza1-eot-scorer.d.ts.map +1 -0
  428. package/src/services/voice/eliza1-eot-scorer.ts +242 -0
  429. package/src/services/voice/embedding-server.ts +200 -0
  430. package/src/services/voice/embedding.d.ts +133 -0
  431. package/src/services/voice/embedding.d.ts.map +1 -0
  432. package/src/services/voice/embedding.test.ts +148 -0
  433. package/src/services/voice/embedding.ts +244 -0
  434. package/src/services/voice/emotion-attribution.d.ts +68 -0
  435. package/src/services/voice/emotion-attribution.d.ts.map +1 -0
  436. package/src/services/voice/emotion-attribution.test.ts +129 -0
  437. package/src/services/voice/emotion-attribution.ts +361 -0
  438. package/src/services/voice/engine-bridge-cancellation.test.ts +422 -0
  439. package/src/services/voice/engine-bridge.d.ts +746 -0
  440. package/src/services/voice/engine-bridge.d.ts.map +1 -0
  441. package/src/services/voice/engine-bridge.test.ts +384 -0
  442. package/src/services/voice/engine-bridge.ts +2226 -0
  443. package/src/services/voice/eot-classifier-ggml.d.ts +179 -0
  444. package/src/services/voice/eot-classifier-ggml.d.ts.map +1 -0
  445. package/src/services/voice/eot-classifier-ggml.ts +566 -0
  446. package/src/services/voice/eot-classifier.d.ts +214 -0
  447. package/src/services/voice/eot-classifier.d.ts.map +1 -0
  448. package/src/services/voice/eot-classifier.ts +533 -0
  449. package/src/services/voice/errors.d.ts +20 -0
  450. package/src/services/voice/errors.d.ts.map +1 -0
  451. package/src/services/voice/errors.ts +32 -0
  452. package/src/services/voice/expressive-tags.d.ts +158 -0
  453. package/src/services/voice/expressive-tags.d.ts.map +1 -0
  454. package/src/services/voice/expressive-tags.ts +405 -0
  455. package/src/services/voice/ffi-bindings.d.ts +636 -0
  456. package/src/services/voice/ffi-bindings.d.ts.map +1 -0
  457. package/src/services/voice/ffi-bindings.test.ts +671 -0
  458. package/src/services/voice/ffi-bindings.ts +3050 -0
  459. package/src/services/voice/first-line-cache.d.ts +181 -0
  460. package/src/services/voice/first-line-cache.d.ts.map +1 -0
  461. package/src/services/voice/first-line-cache.ts +725 -0
  462. package/src/services/voice/fused-eot-scorer.d.ts +51 -0
  463. package/src/services/voice/fused-eot-scorer.d.ts.map +1 -0
  464. package/src/services/voice/fused-eot-scorer.ts +135 -0
  465. package/src/services/voice/index.d.ts +91 -0
  466. package/src/services/voice/index.d.ts.map +1 -0
  467. package/src/services/voice/index.ts +481 -0
  468. package/src/services/voice/kokoro/__tests__/kokoro-backend.test.ts +151 -0
  469. package/src/services/voice/kokoro/__tests__/kokoro-engine-bridge.real.test.ts +151 -0
  470. package/src/services/voice/kokoro/__tests__/kokoro-engine-bridge.test.ts +60 -0
  471. package/src/services/voice/kokoro/__tests__/kokoro-engine-discovery.test.ts +277 -0
  472. package/src/services/voice/kokoro/__tests__/kokoro-ffi-runtime.test.ts +235 -0
  473. package/src/services/voice/kokoro/__tests__/kokoro-runtime.test.ts +95 -0
  474. package/src/services/voice/kokoro/__tests__/phonemizer.test.ts +53 -0
  475. package/src/services/voice/kokoro/__tests__/runtime-selection.test.ts +231 -0
  476. package/src/services/voice/kokoro/__tests__/voices.test.ts +57 -0
  477. package/src/services/voice/kokoro/index.ts +79 -0
  478. package/src/services/voice/kokoro/kokoro-backend.d.ts +72 -0
  479. package/src/services/voice/kokoro/kokoro-backend.d.ts.map +1 -0
  480. package/src/services/voice/kokoro/kokoro-backend.ts +207 -0
  481. package/src/services/voice/kokoro/kokoro-engine-discovery.d.ts +58 -0
  482. package/src/services/voice/kokoro/kokoro-engine-discovery.d.ts.map +1 -0
  483. package/src/services/voice/kokoro/kokoro-engine-discovery.ts +177 -0
  484. package/src/services/voice/kokoro/kokoro-ffi-runtime.d.ts +75 -0
  485. package/src/services/voice/kokoro/kokoro-ffi-runtime.d.ts.map +1 -0
  486. package/src/services/voice/kokoro/kokoro-ffi-runtime.ts +233 -0
  487. package/src/services/voice/kokoro/kokoro-runtime.d.ts +100 -0
  488. package/src/services/voice/kokoro/kokoro-runtime.d.ts.map +1 -0
  489. package/src/services/voice/kokoro/kokoro-runtime.ts +170 -0
  490. package/src/services/voice/kokoro/phoneme-stream.ts +123 -0
  491. package/src/services/voice/kokoro/phonemizer.d.ts +50 -0
  492. package/src/services/voice/kokoro/phonemizer.d.ts.map +1 -0
  493. package/src/services/voice/kokoro/phonemizer.ts +344 -0
  494. package/src/services/voice/kokoro/pick-runtime.d.ts +61 -0
  495. package/src/services/voice/kokoro/pick-runtime.d.ts.map +1 -0
  496. package/src/services/voice/kokoro/pick-runtime.test.ts +91 -0
  497. package/src/services/voice/kokoro/pick-runtime.ts +130 -0
  498. package/src/services/voice/kokoro/runtime-selection.d.ts +92 -0
  499. package/src/services/voice/kokoro/runtime-selection.d.ts.map +1 -0
  500. package/src/services/voice/kokoro/runtime-selection.ts +237 -0
  501. package/src/services/voice/kokoro/types.d.ts +82 -0
  502. package/src/services/voice/kokoro/types.d.ts.map +1 -0
  503. package/src/services/voice/kokoro/types.ts +95 -0
  504. package/src/services/voice/kokoro/voice-presets.d.ts +23 -0
  505. package/src/services/voice/kokoro/voice-presets.d.ts.map +1 -0
  506. package/src/services/voice/kokoro/voice-presets.ts +129 -0
  507. package/src/services/voice/kokoro/voices.d.ts +30 -0
  508. package/src/services/voice/kokoro/voices.d.ts.map +1 -0
  509. package/src/services/voice/kokoro/voices.ts +64 -0
  510. package/src/services/voice/lifecycle.d.ts +135 -0
  511. package/src/services/voice/lifecycle.d.ts.map +1 -0
  512. package/src/services/voice/lifecycle.test.ts +315 -0
  513. package/src/services/voice/lifecycle.ts +301 -0
  514. package/src/services/voice/live-diarization-session.d.ts +96 -0
  515. package/src/services/voice/live-diarization-session.d.ts.map +1 -0
  516. package/src/services/voice/live-diarization-session.ts +289 -0
  517. package/src/services/voice/mic-source.d.ts +136 -0
  518. package/src/services/voice/mic-source.d.ts.map +1 -0
  519. package/src/services/voice/mic-source.test.ts +210 -0
  520. package/src/services/voice/mic-source.ts +503 -0
  521. package/src/services/voice/optimistic-policy.d.ts +109 -0
  522. package/src/services/voice/optimistic-policy.d.ts.map +1 -0
  523. package/src/services/voice/optimistic-policy.test.ts +101 -0
  524. package/src/services/voice/optimistic-policy.ts +192 -0
  525. package/src/services/voice/optimistic-rollback.ts +343 -0
  526. package/src/services/voice/partial-stabilizer.d.ts +73 -0
  527. package/src/services/voice/partial-stabilizer.d.ts.map +1 -0
  528. package/src/services/voice/partial-stabilizer.test.ts +68 -0
  529. package/src/services/voice/partial-stabilizer.ts +140 -0
  530. package/src/services/voice/phoneme-tokenizer.d.ts +49 -0
  531. package/src/services/voice/phoneme-tokenizer.d.ts.map +1 -0
  532. package/src/services/voice/phoneme-tokenizer.ts +158 -0
  533. package/src/services/voice/phrase-cache.d.ts +76 -0
  534. package/src/services/voice/phrase-cache.d.ts.map +1 -0
  535. package/src/services/voice/phrase-cache.test.ts +242 -0
  536. package/src/services/voice/phrase-cache.ts +186 -0
  537. package/src/services/voice/phrase-chunker.d.ts +62 -0
  538. package/src/services/voice/phrase-chunker.d.ts.map +1 -0
  539. package/src/services/voice/phrase-chunker.test.ts +239 -0
  540. package/src/services/voice/phrase-chunker.ts +281 -0
  541. package/src/services/voice/pipeline-impls.d.ts +151 -0
  542. package/src/services/voice/pipeline-impls.d.ts.map +1 -0
  543. package/src/services/voice/pipeline-impls.l6.test.ts +110 -0
  544. package/src/services/voice/pipeline-impls.test.ts +292 -0
  545. package/src/services/voice/pipeline-impls.ts +315 -0
  546. package/src/services/voice/pipeline.d.ts +216 -0
  547. package/src/services/voice/pipeline.d.ts.map +1 -0
  548. package/src/services/voice/pipeline.ts +505 -0
  549. package/src/services/voice/prefill-client.d.ts +123 -0
  550. package/src/services/voice/prefill-client.d.ts.map +1 -0
  551. package/src/services/voice/prefill-client.ts +316 -0
  552. package/src/services/voice/prefix-preserving-queue.d.ts +113 -0
  553. package/src/services/voice/prefix-preserving-queue.d.ts.map +1 -0
  554. package/src/services/voice/prefix-preserving-queue.ts +162 -0
  555. package/src/services/voice/profile-store.d.ts +248 -0
  556. package/src/services/voice/profile-store.d.ts.map +1 -0
  557. package/src/services/voice/profile-store.ts +887 -0
  558. package/src/services/voice/ring-buffer.d.ts +40 -0
  559. package/src/services/voice/ring-buffer.d.ts.map +1 -0
  560. package/src/services/voice/ring-buffer.ts +105 -0
  561. package/src/services/voice/rollback-queue.d.ts +24 -0
  562. package/src/services/voice/rollback-queue.d.ts.map +1 -0
  563. package/src/services/voice/rollback-queue.ts +74 -0
  564. package/src/services/voice/samantha-preset-placeholder.d.ts +67 -0
  565. package/src/services/voice/samantha-preset-placeholder.d.ts.map +1 -0
  566. package/src/services/voice/samantha-preset-placeholder.test.ts +97 -0
  567. package/src/services/voice/samantha-preset-placeholder.ts +148 -0
  568. package/src/services/voice/samantha-preset-regenerator.d.ts +87 -0
  569. package/src/services/voice/samantha-preset-regenerator.d.ts.map +1 -0
  570. package/src/services/voice/samantha-preset-regenerator.ts +393 -0
  571. package/src/services/voice/scheduler.d.ts +146 -0
  572. package/src/services/voice/scheduler.d.ts.map +1 -0
  573. package/src/services/voice/scheduler.t2.test.ts +141 -0
  574. package/src/services/voice/scheduler.ts +927 -0
  575. package/src/services/voice/shared-resources.d.ts +190 -0
  576. package/src/services/voice/shared-resources.d.ts.map +1 -0
  577. package/src/services/voice/shared-resources.ts +320 -0
  578. package/src/services/voice/speaker/attribution-pipeline.d.ts +74 -0
  579. package/src/services/voice/speaker/attribution-pipeline.d.ts.map +1 -0
  580. package/src/services/voice/speaker/attribution-pipeline.ts +386 -0
  581. package/src/services/voice/speaker/diarizer-fused.d.ts +59 -0
  582. package/src/services/voice/speaker/diarizer-fused.d.ts.map +1 -0
  583. package/src/services/voice/speaker/diarizer-fused.real.test.ts +100 -0
  584. package/src/services/voice/speaker/diarizer-fused.ts +154 -0
  585. package/src/services/voice/speaker/diarizer.d.ts +75 -0
  586. package/src/services/voice/speaker/diarizer.d.ts.map +1 -0
  587. package/src/services/voice/speaker/diarizer.ts +218 -0
  588. package/src/services/voice/speaker/encoder-fused.d.ts +60 -0
  589. package/src/services/voice/speaker/encoder-fused.d.ts.map +1 -0
  590. package/src/services/voice/speaker/encoder-fused.real.test.ts +113 -0
  591. package/src/services/voice/speaker/encoder-fused.ts +138 -0
  592. package/src/services/voice/speaker/encoder-ggml.d.ts +33 -0
  593. package/src/services/voice/speaker/encoder-ggml.d.ts.map +1 -0
  594. package/src/services/voice/speaker/encoder-ggml.ts +79 -0
  595. package/src/services/voice/speaker/encoder.d.ts +37 -0
  596. package/src/services/voice/speaker/encoder.d.ts.map +1 -0
  597. package/src/services/voice/speaker/encoder.ts +105 -0
  598. package/src/services/voice/speaker-imprint.d.ts +83 -0
  599. package/src/services/voice/speaker-imprint.d.ts.map +1 -0
  600. package/src/services/voice/speaker-imprint.test.ts +185 -0
  601. package/src/services/voice/speaker-imprint.ts +312 -0
  602. package/src/services/voice/speaker-preset-cache.d.ts +77 -0
  603. package/src/services/voice/speaker-preset-cache.d.ts.map +1 -0
  604. package/src/services/voice/speaker-preset-cache.test.ts +154 -0
  605. package/src/services/voice/speaker-preset-cache.ts +195 -0
  606. package/src/services/voice/streaming-asr/streaming-pipeline-adapter.ts +292 -0
  607. package/src/services/voice/system-audio-sink.d.ts +73 -0
  608. package/src/services/voice/system-audio-sink.d.ts.map +1 -0
  609. package/src/services/voice/system-audio-sink.test.ts +29 -0
  610. package/src/services/voice/system-audio-sink.ts +366 -0
  611. package/src/services/voice/transcriber.d.ts +244 -0
  612. package/src/services/voice/transcriber.d.ts.map +1 -0
  613. package/src/services/voice/transcriber.test.ts +392 -0
  614. package/src/services/voice/transcriber.ts +704 -0
  615. package/src/services/voice/turn-controller.d.ts +183 -0
  616. package/src/services/voice/turn-controller.d.ts.map +1 -0
  617. package/src/services/voice/turn-controller.test.ts +575 -0
  618. package/src/services/voice/turn-controller.ts +596 -0
  619. package/src/services/voice/types.d.ts +643 -0
  620. package/src/services/voice/types.d.ts.map +1 -0
  621. package/src/services/voice/types.ts +699 -0
  622. package/src/services/voice/vad.d.ts +282 -0
  623. package/src/services/voice/vad.d.ts.map +1 -0
  624. package/src/services/voice/vad.test.ts +480 -0
  625. package/src/services/voice/vad.ts +827 -0
  626. package/src/services/voice/vad.v1-v4.test.ts +222 -0
  627. package/src/services/voice/voice-budget.d.ts +241 -0
  628. package/src/services/voice/voice-budget.d.ts.map +1 -0
  629. package/src/services/voice/voice-budget.test.ts +420 -0
  630. package/src/services/voice/voice-budget.ts +656 -0
  631. package/src/services/voice/voice-duet.test.ts +375 -0
  632. package/src/services/voice/voice-emotion-classifier.d.ts +95 -0
  633. package/src/services/voice/voice-emotion-classifier.d.ts.map +1 -0
  634. package/src/services/voice/voice-emotion-classifier.test.ts +210 -0
  635. package/src/services/voice/voice-emotion-classifier.ts +273 -0
  636. package/src/services/voice/voice-preset-format.d.ts +158 -0
  637. package/src/services/voice/voice-preset-format.d.ts.map +1 -0
  638. package/src/services/voice/voice-preset-format.ts +700 -0
  639. package/src/services/voice/voice-preset-generator.test.ts +89 -0
  640. package/src/services/voice/voice-profile-artifact.d.ts +116 -0
  641. package/src/services/voice/voice-profile-artifact.d.ts.map +1 -0
  642. package/src/services/voice/voice-profile-artifact.test.ts +138 -0
  643. package/src/services/voice/voice-profile-artifact.ts +518 -0
  644. package/src/services/voice/voice-profile-routes.d.ts +83 -0
  645. package/src/services/voice/voice-profile-routes.d.ts.map +1 -0
  646. package/src/services/voice/voice-profile-routes.test.ts +429 -0
  647. package/src/services/voice/voice-profile-routes.ts +425 -0
  648. package/src/services/voice/voice-scenario.ts +154 -0
  649. package/src/services/voice/voice-settings.d.ts +82 -0
  650. package/src/services/voice/voice-settings.d.ts.map +1 -0
  651. package/src/services/voice/voice-settings.ts +172 -0
  652. package/src/services/voice/voice-state-machine.d.ts +364 -0
  653. package/src/services/voice/voice-state-machine.d.ts.map +1 -0
  654. package/src/services/voice/voice-state-machine.ts +727 -0
  655. package/src/services/voice/voice-workbench-report.test.ts +168 -0
  656. package/src/services/voice/voice-workbench-report.ts +326 -0
  657. package/src/services/voice/voice-workbench.test.ts +158 -0
  658. package/src/services/voice/voice.test.ts +1070 -0
  659. package/src/services/voice/wake-word-ggml.d.ts +101 -0
  660. package/src/services/voice/wake-word-ggml.d.ts.map +1 -0
  661. package/src/services/voice/wake-word-ggml.ts +320 -0
  662. package/src/services/voice/wake-word.d.ts +255 -0
  663. package/src/services/voice/wake-word.d.ts.map +1 -0
  664. package/src/services/voice/wake-word.test.ts +298 -0
  665. package/src/services/voice/wake-word.ts +554 -0
  666. package/src/services/voice/wrap-with-first-line-cache.d.ts +70 -0
  667. package/src/services/voice/wrap-with-first-line-cache.d.ts.map +1 -0
  668. package/src/services/voice/wrap-with-first-line-cache.ts +267 -0
  669. package/src/services/voice-model-updater.d.ts +240 -0
  670. package/src/services/voice-model-updater.d.ts.map +1 -0
  671. package/src/services/voice-model-updater.ts +724 -0
  672. package/src/services/voice-prewarm.d.ts +3 -0
  673. package/src/services/voice-prewarm.d.ts.map +1 -0
  674. package/src/services/voice-prewarm.ts +51 -0
  675. package/dist/index.d.ts +0 -37
  676. package/dist/index.js +0 -1098
@@ -0,0 +1,491 @@
1
+ /**
2
+ * AudioFrameConsumer — turn the Android `audioFrame` PCM stream into live,
3
+ * VAD-segmented, speaker-attributed voice turns.
4
+ *
5
+ * The Android native capture path (`plugin-native-talkmode`) streams an
6
+ * `audioFrame` Capacitor event: base64 little-endian s16 mono PCM at 16 kHz,
7
+ * 20 ms per frame, plus `{ sampleRate, channels, samples, rms, timestamp,
8
+ * frameIndex }`. This module is the platform-agnostic consumer that subscribes
9
+ * to that stream (wherever the bun:ffi voice libs are present) and runs:
10
+ *
11
+ * audioFrame (base64 LE-s16) → decode → VadDetector (turn segmentation)
12
+ * → on speech-end: VoiceAttributionPipeline.attribute(turn PCM)
13
+ * → handleLiveVoiceAttribution → VOICE_TURN_OBSERVED + voiceTurnSignal
14
+ *
15
+ * Design notes:
16
+ * - It does NOT reinvent VAD: it drives the existing `VadDetector` state
17
+ * machine (`speech-start` / `speech-pause` / `speech-end`), reusing its
18
+ * Silero onset/offset/hangover logic. It buffers the turn's PCM between
19
+ * `speech-start` and `speech-end`, then attributes the whole utterance.
20
+ * - Every native dependency (`VadDetector`, `VoiceAttributionPipeline`, the
21
+ * runtime) is INJECTED, so the consumer is fully unit-testable with fakes
22
+ * and has no static import of bun:ffi. A `build*` factory in the smoke
23
+ * harness wires the real ggml-backed deps.
24
+ * - The decode boundary (`decodeAudioFramePcm`) is the ONLY place that knows
25
+ * the wire format (base64 LE-s16). Internally everything is Float32 [-1,1].
26
+ *
27
+ * What this module does NOT do: it does not transcribe (ASR text is the
28
+ * separate streaming-ASR path) and it does not own the WebView→agent
29
+ * transport — see `android/AUDIO_FRAMES.md` and `LIVE_PIPELINE.md` for the
30
+ * remaining device wiring.
31
+ */
32
+
33
+ import {
34
+ type EmitVoiceTurnObservedArgs,
35
+ type HandleLiveVoiceAttributionOptions,
36
+ handleLiveVoiceAttribution,
37
+ } from "../../runtime/voice-entity-binding.js";
38
+ import type { VoiceTurnSignal } from "./eot-classifier.js";
39
+ import type {
40
+ VoiceAttributionOutput,
41
+ VoiceAttributionPipeline,
42
+ } from "./speaker/attribution-pipeline.js";
43
+ import type { PcmFrame, VadEvent, VoiceInputSource } from "./types.js";
44
+
45
+ // ---------------------------------------------------------------------------
46
+ // Wire format → Float32 boundary
47
+ // ---------------------------------------------------------------------------
48
+
49
+ /**
50
+ * The `audioFrame` event payload, mirroring `TalkModeAudioFrameEvent` in
51
+ * `@elizaos/capacitor-talkmode`. Re-declared structurally here so this
52
+ * package does not take a build dep on the Capacitor plugin.
53
+ */
54
+ export interface AudioFrameEvent {
55
+ /** Base64-encoded little-endian signed 16-bit mono PCM for this frame. */
56
+ pcm16: string;
57
+ /** Sample rate of the captured PCM in Hz (e.g. 16000). */
58
+ sampleRate: number;
59
+ /** Channel count (always 1 — mono). */
60
+ channels: number;
61
+ /** Number of PCM samples in this frame (`pcm16` byte length / 2). */
62
+ samples: number;
63
+ /** RMS amplitude of this frame, normalized 0..1. */
64
+ rms: number;
65
+ /** Monotonic capture timestamp for this frame, ms. */
66
+ timestamp: number;
67
+ /** Running index of this frame since capture started (0-based). */
68
+ frameIndex: number;
69
+ }
70
+
71
+ /** The sample rate every voice model in this pipeline is dimensioned for. */
72
+ export const AUDIO_FRAME_PIPELINE_SAMPLE_RATE = 16_000;
73
+
74
+ export class AudioFrameDecodeError extends Error {
75
+ constructor(message: string) {
76
+ super(message);
77
+ this.name = "AudioFrameDecodeError";
78
+ }
79
+ }
80
+
81
+ /**
82
+ * Decode an `audioFrame` payload into a Float32 [-1, 1] window. This is the
83
+ * single boundary that understands the base64 LE-s16 wire format.
84
+ *
85
+ * The native capture path only ever produces 16 kHz mono; this asserts that
86
+ * invariant rather than resampling silently (the downstream Silero/WeSpeaker
87
+ * graphs are 16 kHz-only — a wrong rate is a bug to surface, not paper over).
88
+ */
89
+ export function decodeAudioFramePcm(frame: AudioFrameEvent): Float32Array {
90
+ if (frame.channels !== 1) {
91
+ throw new AudioFrameDecodeError(
92
+ `[audio-frame-consumer] expected mono (channels=1); got channels=${frame.channels}`,
93
+ );
94
+ }
95
+ if (frame.sampleRate !== AUDIO_FRAME_PIPELINE_SAMPLE_RATE) {
96
+ throw new AudioFrameDecodeError(
97
+ `[audio-frame-consumer] expected ${AUDIO_FRAME_PIPELINE_SAMPLE_RATE} Hz; got ${frame.sampleRate} Hz. Capture at 16 kHz (startAudioFrames default).`,
98
+ );
99
+ }
100
+ const bytes = base64ToBytes(frame.pcm16);
101
+ if (bytes.length % 2 !== 0) {
102
+ throw new AudioFrameDecodeError(
103
+ `[audio-frame-consumer] PCM byte length ${bytes.length} is odd — not a whole number of s16 samples`,
104
+ );
105
+ }
106
+ const sampleCount = bytes.length >> 1;
107
+ // Read LE-s16 over the decoded bytes. A DataView reads the bytes regardless
108
+ // of the host's native endianness, so this is correct on any platform.
109
+ const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);
110
+ const out = new Float32Array(sampleCount);
111
+ for (let i = 0; i < sampleCount; i += 1) {
112
+ out[i] = view.getInt16(i * 2, true) / 32_768;
113
+ }
114
+ return out;
115
+ }
116
+
117
+ /**
118
+ * Decode base64 → bytes without assuming a runtime global. Prefers Node/Bun
119
+ * `Buffer`; falls back to `atob` (browsers / web workers).
120
+ */
121
+ function base64ToBytes(b64: string): Uint8Array {
122
+ const maybeBuffer = (
123
+ globalThis as { Buffer?: { from(s: string, enc: string): Uint8Array } }
124
+ ).Buffer;
125
+ if (maybeBuffer) {
126
+ const buf = maybeBuffer.from(b64, "base64");
127
+ return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength);
128
+ }
129
+ const atobFn = (globalThis as { atob?: (s: string) => string }).atob;
130
+ if (!atobFn) {
131
+ throw new AudioFrameDecodeError(
132
+ "[audio-frame-consumer] no base64 decoder available (neither Buffer nor atob)",
133
+ );
134
+ }
135
+ const binary = atobFn(b64);
136
+ const out = new Uint8Array(binary.length);
137
+ for (let i = 0; i < binary.length; i += 1) out[i] = binary.charCodeAt(i);
138
+ return out;
139
+ }
140
+
141
+ // ---------------------------------------------------------------------------
142
+ // VadDetector structural view (injectable)
143
+ // ---------------------------------------------------------------------------
144
+
145
+ /**
146
+ * The structural slice of `VadDetector` the consumer needs. Taking the
147
+ * structural view (not the concrete class) keeps the consumer testable with a
148
+ * fake VAD and avoids pulling the optional native VAD surface into callers
149
+ * that only want to feed frames.
150
+ */
151
+ export interface VadSegmenter {
152
+ /** True while a speech segment (incl. its pause hangover) is open. */
153
+ readonly inSpeech: boolean;
154
+ /** Subscribe to the authoritative VAD timeline. Returns an unsubscribe fn. */
155
+ onVadEvent(listener: (event: VadEvent) => void): () => void;
156
+ /** Feed one mic frame; resolves once its windows are processed. */
157
+ pushFrame(frame: PcmFrame): Promise<void>;
158
+ /** Flush trailing samples and finalize any open segment. */
159
+ flush(): Promise<void>;
160
+ /** Clear all state at a hard boundary. */
161
+ reset(): void;
162
+ }
163
+
164
+ /**
165
+ * The structural slice of `VoiceAttributionPipeline` the consumer needs.
166
+ */
167
+ export interface AttributionPipelineLike {
168
+ attribute(
169
+ req: Parameters<VoiceAttributionPipeline["attribute"]>[0],
170
+ ): Promise<VoiceAttributionOutput>;
171
+ }
172
+
173
+ /**
174
+ * The structural slice of `IAgentRuntime` the consumer needs:
175
+ * `handleLiveVoiceAttribution` calls `emitEvent`.
176
+ */
177
+ export interface RuntimeEventSink {
178
+ emitEvent(type: unknown, payload: Record<string, unknown>): Promise<void>;
179
+ }
180
+
181
+ // ---------------------------------------------------------------------------
182
+ // Consumer
183
+ // ---------------------------------------------------------------------------
184
+
185
+ export interface AudioFrameConsumerDeps {
186
+ /** Turn-segmentation VAD (drives speech-start/pause/end). */
187
+ vad: VadSegmenter;
188
+ /** Diarization + speaker-attribution pipeline. */
189
+ pipeline: AttributionPipelineLike;
190
+ /** Runtime event sink for VOICE_TURN_OBSERVED. */
191
+ runtime: RuntimeEventSink;
192
+ }
193
+
194
+ export interface AudioFrameConsumerConfig {
195
+ /** Source metadata stamped onto every attributed turn. */
196
+ source?: VoiceInputSource;
197
+ /** Gating options forwarded to `handleLiveVoiceAttribution` per turn. */
198
+ attributionOptions?: HandleLiveVoiceAttributionOptions;
199
+ /**
200
+ * Hard cap on a single buffered turn, in seconds. A speaker who never
201
+ * triggers `speech-end` (e.g. continuous noise) must not grow the buffer
202
+ * without bound. When exceeded the turn is force-finalized. Default 30 s.
203
+ */
204
+ maxTurnSeconds?: number;
205
+ /**
206
+ * Pre-roll seconds of audio kept before `speech-start` so the onset of the
207
+ * first word (which the VAD only confirms a window or two in) is not clipped
208
+ * out of the attribution buffer. Default 0.3 s.
209
+ */
210
+ preRollSeconds?: number;
211
+ }
212
+
213
+ /** A finalized, attributed turn the consumer surfaces to its caller. */
214
+ export interface AttributedTurn {
215
+ turnId: string;
216
+ output: VoiceAttributionOutput;
217
+ signal: VoiceTurnSignal;
218
+ /** Turn span in the mic-clock (frame `timestamp`) domain. */
219
+ startedAtMs: number;
220
+ endedAtMs: number;
221
+ /** Total buffered turn samples that were attributed. */
222
+ samples: number;
223
+ }
224
+
225
+ export type AttributedTurnListener = (turn: AttributedTurn) => void;
226
+
227
+ /**
228
+ * Drives the `audioFrame` → VAD turn-segmentation → attribution → signal
229
+ * pipeline. One instance per capture session.
230
+ *
231
+ * Frame ingestion is serialized through the injected VAD's `pushFrame`
232
+ * (which itself serializes the Silero forward pass), so `onAudioFrame` is
233
+ * safe to fire-and-forget from a Capacitor event listener; turns surface in
234
+ * order via `onTurn`.
235
+ */
236
+ export class AudioFrameConsumer {
237
+ private readonly vad: VadSegmenter;
238
+ private readonly pipeline: AttributionPipelineLike;
239
+ private readonly runtime: RuntimeEventSink;
240
+ private readonly source: VoiceInputSource | undefined;
241
+ private readonly attributionOptions: HandleLiveVoiceAttributionOptions;
242
+ private readonly maxTurnSamples: number;
243
+ private readonly preRollSamples: number;
244
+ private readonly unsubscribeVad: () => void;
245
+ private readonly turnListeners = new Set<AttributedTurnListener>();
246
+
247
+ /** Float32 chunks of the in-flight turn, oldest first. */
248
+ private turnChunks: Float32Array[] = [];
249
+ private turnSamples = 0;
250
+ /** Rolling pre-roll ring (frames captured before speech-start). */
251
+ private preRoll: Float32Array[] = [];
252
+ private preRollSampleCount = 0;
253
+ private capturing = false;
254
+ private turnSeq = 0;
255
+ private turnStartedAtMs = 0;
256
+ private lastFrameEndMs = 0;
257
+ /** Serialized attribution chain so turns finalize one at a time, in order. */
258
+ private attributing: Promise<void> = Promise.resolve();
259
+ private closed = false;
260
+
261
+ /** Count of frames that failed to decode (surfaced via getters, not thrown). */
262
+ droppedFrames = 0;
263
+
264
+ constructor(
265
+ deps: AudioFrameConsumerDeps,
266
+ config: AudioFrameConsumerConfig = {},
267
+ ) {
268
+ this.vad = deps.vad;
269
+ this.pipeline = deps.pipeline;
270
+ this.runtime = deps.runtime;
271
+ this.source = config.source;
272
+ this.attributionOptions = config.attributionOptions ?? {};
273
+ const sr = AUDIO_FRAME_PIPELINE_SAMPLE_RATE;
274
+ this.maxTurnSamples = Math.max(
275
+ sr,
276
+ Math.round((config.maxTurnSeconds ?? 30) * sr),
277
+ );
278
+ this.preRollSamples = Math.max(
279
+ 0,
280
+ Math.round((config.preRollSeconds ?? 0.3) * sr),
281
+ );
282
+ this.unsubscribeVad = this.vad.onVadEvent((event) =>
283
+ this.onVadEvent(event),
284
+ );
285
+ }
286
+
287
+ /** True while a turn is being buffered (between speech-start and speech-end). */
288
+ get inTurn(): boolean {
289
+ return this.capturing;
290
+ }
291
+
292
+ /** Subscribe to finalized attributed turns. Returns an unsubscribe fn. */
293
+ onTurn(listener: AttributedTurnListener): () => void {
294
+ this.turnListeners.add(listener);
295
+ return () => this.turnListeners.delete(listener);
296
+ }
297
+
298
+ /**
299
+ * Feed one decoded-or-raw `audioFrame`. Accepts either the wire-format
300
+ * `AudioFrameEvent` (decoded here) or a pre-decoded Float32 window with the
301
+ * frame's mic-clock timestamp. Resolves once the frame's VAD windows are
302
+ * processed.
303
+ */
304
+ async onAudioFrame(frame: AudioFrameEvent): Promise<void> {
305
+ if (this.closed) return;
306
+ let pcm: Float32Array;
307
+ try {
308
+ pcm = decodeAudioFramePcm(frame);
309
+ } catch (err) {
310
+ this.droppedFrames += 1;
311
+ throw err instanceof AudioFrameDecodeError
312
+ ? err
313
+ : new AudioFrameDecodeError(
314
+ `[audio-frame-consumer] frame decode failed: ${
315
+ err instanceof Error ? err.message : String(err)
316
+ }`,
317
+ );
318
+ }
319
+ await this.pushDecodedFrame(pcm, frame.timestamp);
320
+ }
321
+
322
+ /**
323
+ * Feed a pre-decoded Float32 16 kHz window with its mic-clock timestamp
324
+ * (ms). The decode boundary already ran; used by transports that decode
325
+ * upstream and by the host harness.
326
+ */
327
+ async pushDecodedFrame(
328
+ pcm: Float32Array,
329
+ timestampMs: number,
330
+ ): Promise<void> {
331
+ if (this.closed) return;
332
+ this.lastFrameEndMs =
333
+ timestampMs + (pcm.length / AUDIO_FRAME_PIPELINE_SAMPLE_RATE) * 1000;
334
+ if (this.capturing) {
335
+ this.appendTurnChunk(pcm);
336
+ } else {
337
+ this.appendPreRoll(pcm);
338
+ }
339
+ await this.vad.pushFrame({
340
+ pcm,
341
+ sampleRate: AUDIO_FRAME_PIPELINE_SAMPLE_RATE,
342
+ timestampMs,
343
+ });
344
+ }
345
+
346
+ /**
347
+ * Flush the VAD (finalize any open segment) and await all pending
348
+ * attribution. Call at end-of-capture so a trailing utterance is not lost.
349
+ */
350
+ async flush(): Promise<void> {
351
+ if (this.closed) return;
352
+ await this.vad.flush();
353
+ await this.attributing;
354
+ }
355
+
356
+ /** Release listeners and clear all buffers. Idempotent. */
357
+ async close(): Promise<void> {
358
+ if (this.closed) return;
359
+ this.closed = true;
360
+ this.unsubscribeVad();
361
+ await this.attributing;
362
+ this.turnListeners.clear();
363
+ this.turnChunks = [];
364
+ this.preRoll = [];
365
+ this.turnSamples = 0;
366
+ this.preRollSampleCount = 0;
367
+ }
368
+
369
+ // ---- VAD event handling ------------------------------------------------
370
+
371
+ private onVadEvent(event: VadEvent): void {
372
+ switch (event.type) {
373
+ case "speech-start":
374
+ this.beginTurn(event.timestampMs);
375
+ break;
376
+ case "speech-end":
377
+ this.finalizeTurn(event.timestampMs);
378
+ break;
379
+ // speech-active / speech-pause / blip do not alter buffering: PCM
380
+ // keeps accumulating through pauses (mid-utterance micro-silences are
381
+ // part of the turn), and a `blip` never opened a turn.
382
+ default:
383
+ break;
384
+ }
385
+ }
386
+
387
+ private beginTurn(startedAtMs: number): void {
388
+ if (this.capturing) return;
389
+ this.capturing = true;
390
+ this.turnStartedAtMs = startedAtMs;
391
+ // Seed the turn with the pre-roll so the leading word isn't clipped.
392
+ this.turnChunks = this.preRoll;
393
+ this.turnSamples = this.preRollSampleCount;
394
+ this.preRoll = [];
395
+ this.preRollSampleCount = 0;
396
+ }
397
+
398
+ private finalizeTurn(endedAtMs: number): void {
399
+ if (!this.capturing) return;
400
+ this.capturing = false;
401
+ const chunks = this.turnChunks;
402
+ const total = this.turnSamples;
403
+ this.turnChunks = [];
404
+ this.turnSamples = 0;
405
+ if (total === 0) return;
406
+ const pcm = concatFloat32(chunks, total);
407
+ const turnId = `aframe_${this.turnSeq++}`;
408
+ const startedAtMs = this.turnStartedAtMs;
409
+ // Serialize attribution so turns surface in order and a slow turn can't
410
+ // interleave with the next one's buffer.
411
+ this.attributing = this.attributing.then(() =>
412
+ this.attributeTurn({ turnId, pcm, startedAtMs, endedAtMs }),
413
+ );
414
+ }
415
+
416
+ private async attributeTurn(args: {
417
+ turnId: string;
418
+ pcm: Float32Array;
419
+ startedAtMs: number;
420
+ endedAtMs: number;
421
+ }): Promise<void> {
422
+ const output = await this.pipeline.attribute({
423
+ turnId: args.turnId,
424
+ pcm: args.pcm,
425
+ startedAtMs: args.startedAtMs,
426
+ endedAtMs: args.endedAtMs,
427
+ ...(this.source ? { source: this.source } : {}),
428
+ });
429
+ const signal = await handleLiveVoiceAttribution(
430
+ this.runtime as Parameters<typeof handleLiveVoiceAttribution>[0],
431
+ output,
432
+ this.attributionOptions,
433
+ );
434
+ const turn: AttributedTurn = {
435
+ turnId: args.turnId,
436
+ output,
437
+ signal,
438
+ startedAtMs: args.startedAtMs,
439
+ endedAtMs: args.endedAtMs,
440
+ samples: args.pcm.length,
441
+ };
442
+ for (const listener of this.turnListeners) listener(turn);
443
+ }
444
+
445
+ // ---- buffering ---------------------------------------------------------
446
+
447
+ private appendTurnChunk(pcm: Float32Array): void {
448
+ this.turnChunks.push(pcm);
449
+ this.turnSamples += pcm.length;
450
+ // Hard cap: force-finalize a runaway turn at the current frame edge.
451
+ if (this.turnSamples >= this.maxTurnSamples) {
452
+ this.finalizeTurn(this.lastFrameEndMs);
453
+ this.vad.reset();
454
+ }
455
+ }
456
+
457
+ private appendPreRoll(pcm: Float32Array): void {
458
+ if (this.preRollSamples === 0) return;
459
+ this.preRoll.push(pcm);
460
+ this.preRollSampleCount += pcm.length;
461
+ // Drop oldest pre-roll chunks once over the pre-roll budget.
462
+ while (
463
+ this.preRoll.length > 1 &&
464
+ this.preRollSampleCount - this.preRoll[0].length >= this.preRollSamples
465
+ ) {
466
+ const dropped = this.preRoll.shift();
467
+ if (dropped) this.preRollSampleCount -= dropped.length;
468
+ }
469
+ }
470
+ }
471
+
472
+ /** Concatenate Float32 chunks into a single buffer of known total length. */
473
+ function concatFloat32(
474
+ chunks: readonly Float32Array[],
475
+ total: number,
476
+ ): Float32Array {
477
+ const out = new Float32Array(total);
478
+ let cursor = 0;
479
+ for (const c of chunks) {
480
+ out.set(c, cursor);
481
+ cursor += c.length;
482
+ }
483
+ return out;
484
+ }
485
+
486
+ /**
487
+ * Re-export of the producer's emit args, so a consumer caller can construct a
488
+ * VOICE_TURN_OBSERVED payload directly when wiring a custom transport without
489
+ * importing the runtime subpath twice.
490
+ */
491
+ export type { EmitVoiceTurnObservedArgs };
@@ -0,0 +1,112 @@
1
+ /**
2
+ * Barge-in controller — distinguishes a blip from real speech while the
3
+ * agent is talking, and turns that into TTS pause/resume/hard-stop plus an
4
+ * LLM-generation abort.
5
+ *
6
+ * Inputs:
7
+ * - the `VadEvent` stream from `VadDetector` (subscribe via `bindVad()`),
8
+ * - W2's ASR word-confirm callback (`onWordsDetected()` — the
9
+ * `WordsDetectedSink` contract).
10
+ *
11
+ * Behaviour while the agent is speaking (`agentSpeaking === true`):
12
+ * - `speech-active` → emit `pause-tts`. (Provisional — could still be a
13
+ * blip; the energy-duration heuristic guesses, ASR
14
+ * confirms.)
15
+ * - `blip` (or a short `speech-end` before any words)
16
+ * → emit `resume-tts`. The agent keeps talking.
17
+ * - `onWordsDetected({wordCount ≥ 1})` → emit `hard-stop` with a fresh
18
+ * `BargeInCancelToken`. Hard-stop means: cancel TTS
19
+ * *and* abort the in-flight LLM / MTP drafter
20
+ * generation. The engine layer (W9) threads
21
+ * `token.signal` into `dispatcher.generate` and polls
22
+ * `token.cancelled` at kernel boundaries.
23
+ * - `speech-end` with a long-enough segment but no ASR words yet →
24
+ * treated as words-pending: emit `hard-stop` only
25
+ * once ASR confirms; if ASR never confirms within
26
+ * `wordsGraceMs`, resume TTS (it was non-speech the
27
+ * Silero VAD let through).
28
+ *
29
+ * Legacy API (still used by `VoiceScheduler` and `EngineVoiceBridge`):
30
+ * `attach({onCancel})`, `onMicActive()`, `cancelSignal()`, `reset()` — a
31
+ * thin "everything cancelled" path. `onMicActive()` is now equivalent to
32
+ * `hardStop("manual")`.
33
+ *
34
+ * No fallback sludge: a `hard-stop` always carries a real `AbortSignal`; the
35
+ * controller never swallows a VAD event.
36
+ */
37
+ import type { BargeInCancelToken, BargeInSignalListener, VadEventListener, WordsDetectedSink } from "./types";
38
+ /** Minimal structural view of `VadDetector` — avoids a module dependency on
39
+ * `vad.ts` (which pulls in the fused `libelizainference` VAD FFI surface). */
40
+ interface VadEventSource {
41
+ onVadEvent(listener: VadEventListener): () => void;
42
+ }
43
+ export interface BargeInListener {
44
+ onCancel(): void;
45
+ }
46
+ export interface CancelSignal {
47
+ cancelled: boolean;
48
+ }
49
+ export interface BargeInControllerConfig {
50
+ /**
51
+ * After a `speech-active` (TTS paused) with no ASR word confirmation,
52
+ * resume TTS if ASR has not reported ≥1 word within this window. Default
53
+ * 600 ms. Long enough for a streaming ASR partial; short enough that a
54
+ * cough doesn't keep the agent muted.
55
+ */
56
+ wordsGraceMs?: number;
57
+ }
58
+ export declare class BargeInController implements WordsDetectedSink {
59
+ private readonly listeners;
60
+ private readonly signalListeners;
61
+ private readonly wordsGraceMs;
62
+ /** Legacy single-shot cancel flag, reset by `reset()`. */
63
+ private signal;
64
+ /** True while the agent's TTS is playing. The turn controller / scheduler
65
+ * flips this via `setAgentSpeaking()`. Barge-in logic only acts while
66
+ * this is true. */
67
+ private agentSpeaking;
68
+ /** True while we have emitted `pause-tts` and are waiting on the
69
+ * blip-vs-words decision. */
70
+ private awaitingWordConfirm;
71
+ private wordConfirmDeadlineTimer;
72
+ private wordConfirmExpiresAtMs;
73
+ private lastEventTimestampMs;
74
+ private vadUnsub;
75
+ constructor(config?: BargeInControllerConfig);
76
+ /** Subscribe to `pause-tts` / `resume-tts` / `hard-stop`. */
77
+ onSignal(listener: BargeInSignalListener): () => void;
78
+ /** Wire this controller to a `VadDetector`. Returns an unsubscribe fn. */
79
+ bindVad(detector: VadEventSource): () => void;
80
+ unbindVad(): void;
81
+ /** The turn controller flips this when TTS starts/stops playing. */
82
+ setAgentSpeaking(speaking: boolean): void;
83
+ get isAgentSpeaking(): boolean;
84
+ private onVadEvent;
85
+ onWordsDetected(args: {
86
+ wordCount: number;
87
+ partialText: string;
88
+ timestampMs: number;
89
+ }): void;
90
+ /**
91
+ * Cancel TTS + abort the in-flight LLM / drafter generation. Returns the
92
+ * `BargeInCancelToken` whose `signal` the engine layer aborts on. Idempotent
93
+ * within a single barge-in episode — calling it again returns the same
94
+ * token until `reset()`.
95
+ */
96
+ hardStop(reason?: NonNullable<BargeInCancelToken["reason"]>, timestampMs?: number): BargeInCancelToken;
97
+ private activeToken;
98
+ /** The cancel token for the current barge-in episode (null until a
99
+ * `hard-stop`). The engine threads `.signal` into generation. */
100
+ currentCancelToken(): BargeInCancelToken | null;
101
+ /** @deprecated Use `currentCancelToken()`; kept for `VoiceScheduler`. */
102
+ cancelSignal(): CancelSignal;
103
+ attach(listener: BargeInListener): () => void;
104
+ /** @deprecated Equivalent to `hardStop("manual")`; kept for the bridge. */
105
+ onMicActive(): void;
106
+ reset(): void;
107
+ private emitSignal;
108
+ private armWordConfirmDeadline;
109
+ private clearWordConfirm;
110
+ }
111
+ export {};
112
+ //# sourceMappingURL=barge-in.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"barge-in.d.ts","sourceRoot":"","sources":["barge-in.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAEH,OAAO,KAAK,EACX,kBAAkB,EAElB,qBAAqB,EAErB,gBAAgB,EAChB,iBAAiB,EACjB,MAAM,SAAS,CAAC;AAEjB;+EAC+E;AAC/E,UAAU,cAAc;IACvB,UAAU,CAAC,QAAQ,EAAE,gBAAgB,GAAG,MAAM,IAAI,CAAC;CACnD;AAID,MAAM,WAAW,eAAe;IAC/B,QAAQ,IAAI,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC5B,SAAS,EAAE,OAAO,CAAC;CACnB;AAmCD,MAAM,WAAW,uBAAuB;IACvC;;;;;OAKG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,qBAAa,iBAAkB,YAAW,iBAAiB;IAC1D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA8B;IACxD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAoC;IACpE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IAEtC,0DAA0D;IAC1D,OAAO,CAAC,MAAM,CAAsC;IAEpD;;wBAEoB;IACpB,OAAO,CAAC,aAAa,CAAS;IAC9B;kCAC8B;IAC9B,OAAO,CAAC,mBAAmB,CAAS;IACpC,OAAO,CAAC,wBAAwB,CAA8C;IAC9E,OAAO,CAAC,sBAAsB,CAAuB;IACrD,OAAO,CAAC,oBAAoB,CAAK;IACjC,OAAO,CAAC,QAAQ,CAA6B;gBAEjC,MAAM,GAAE,uBAA4B;IAMhD,6DAA6D;IAC7D,QAAQ,CAAC,QAAQ,EAAE,qBAAqB,GAAG,MAAM,IAAI;IAKrD,0EAA0E;IAC1E,OAAO,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM,IAAI;IAM7C,SAAS,IAAI,IAAI;IAOjB,oEAAoE;IACpE,gBAAgB,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI;IAUzC,IAAI,eAAe,IAAI,OAAO,CAE7B;IAID,OAAO,CAAC,UAAU;IA8ClB,eAAe,CAAC,IAAI,EAAE;QACrB,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,EAAE,MAAM,CAAC;KACpB,GAAG,IAAI;IAiBR;;;;;OAKG;IACH,QAAQ,CACP,MAAM,GAAE,WAAW,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAY,EAC5D,WAAW,GAAE,MAAgD,GAC3D,kBAAkB;IAkBrB,OAAO,CAAC,WAAW,CAAmC;IAEtD;sEACkE;IAClE,kBAAkB,IAAI,kBAAkB,GAAG,IAAI;IAM/C,yEAAyE;IACzE,YAAY,IAAI,YAAY;IAI5B,MAAM,CAAC,QAAQ,EAAE,eAAe,GAAG,MAAM,IAAI;IAK7C,2EAA2E;IAC3E,WAAW,IAAI,IAAI;IAInB,KAAK,IAAI,IAAI;IASb,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,sBAAsB;IA0B9B,OAAO,CAAC,gBAAgB;CASxB"}