@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,283 @@
1
+ /**
2
+ * Voice activity detection — the audio front-end's two-tier gate.
3
+ *
4
+ * Tier 1 — `RmsEnergyGate`. A frame-level RMS threshold with hysteresis.
5
+ * Sub-frame latency, no model. Its rising edge is the "wake the
6
+ * response pipeline" signal (KV-prefill the response prompt,
7
+ * preload the drafter, pre-generate the first filler). It NEVER
8
+ * substitutes for the model VAD — it only decides "is there
9
+ * acoustic activity right now".
10
+ *
11
+ * Tier 2 — a model VAD provider. Resolver order is an optional injected
12
+ * external VAD adapter when supplied, otherwise the fused
13
+ * `libelizainference` Silero v5 VAD ABI (`eliza_inference_vad_*`,
14
+ * backend id `silero-ggml`). 512-sample windows at 16 kHz (32 ms
15
+ * hop), one speech probability per window. This is the
16
+ * *authoritative* speech/no-speech signal — it gates ASR and drives
17
+ * turn-taking. The fused engine is the sole on-device VAD runtime;
18
+ * there is no standalone VAD library.
19
+ *
20
+ * `VadDetector` wires both together and emits the `VadEvent` stream
21
+ * (`speech-start` / `speech-active` / `speech-pause` / `speech-end` /
22
+ * `blip`) plus the raw `EnergyGateEvent` stream.
23
+ *
24
+ * No fallback sludge: if the fused VAD ABI is unavailable (and no injected
25
+ * adapter is supplied), `createVadDetector()` throws `VadUnavailableError`. The
26
+ * caller surfaces "VAD unavailable — voice features degrade" — there is no
27
+ * silent downgrade to the RMS gate, and no standalone-library fallback
28
+ * (AGENTS.md §3).
29
+ */
30
+ import type { ElizaInferenceContextHandle, ElizaInferenceFfi } from "./ffi-bindings";
31
+ import type { EnergyGateListener, PcmFrame, VadEventListener } from "./types";
32
+ /** Thrown when the Silero VAD backend cannot be loaded — the native VAD FFI
33
+ * is missing or ABI-only, the model file is absent, or the model is corrupt.
34
+ * There is no fallback; voice features that depend on VAD must surface
35
+ * this. */
36
+ export declare class VadUnavailableError extends Error {
37
+ readonly code: "ffi-missing" | "model-missing" | "model-load-failed" | "provider-missing";
38
+ constructor(code: VadUnavailableError["code"], message: string);
39
+ }
40
+ /**
41
+ * Resolve the fused-libelizainference Silero GGML VAD model on disk. An
42
+ * explicit `modelPath` is honored exactly — if it is set but missing, the
43
+ * result is `null` (no silent substitution of a different model). When
44
+ * `modelPath` is not given the search order is:
45
+ * 1. `<bundleRoot>/vad/silero-vad-v5.1.2.ggml.bin`
46
+ * 2. `<bundleRoot>/vad/silero-vad-v5.gguf`
47
+ * 3. `<state-dir>/local-inference/vad/<same filenames>`
48
+ * 3. `$ELIZA_VAD_MODEL_PATH`
49
+ * Returns `null` when none exist.
50
+ */
51
+ export declare function resolveSileroVadPath(opts: {
52
+ modelPath?: string;
53
+ bundleRoot?: string;
54
+ }): string | null;
55
+ /**
56
+ * Fused libelizainference-backed Silero v5 GGML VAD — the sole on-device VAD
57
+ * runtime. The model (`silero-vad-v5.1.2.ggml.bin`) is loaded by the shared
58
+ * ggml context owned by the FFI; `process()` runs one 512-sample 16 kHz window
59
+ * through the native VAD and returns the speech probability. `reset()` clears
60
+ * the recurrent state at utterance boundaries.
61
+ */
62
+ export declare class GgmlSileroVad {
63
+ private readonly ffi;
64
+ private readonly handle;
65
+ readonly sampleRate: number;
66
+ readonly windowSamples = 512;
67
+ private closed;
68
+ private constructor();
69
+ /** True when the libelizainference build exports the native VAD ABI and
70
+ * advertises support. False on ABI-only builds or when the C++ side has
71
+ * not been linked against the GGML Silero VAD runtime. */
72
+ static isSupported(ffi: ElizaInferenceFfi | null | undefined): boolean;
73
+ static load(opts: {
74
+ ffi: ElizaInferenceFfi;
75
+ ctx: ElizaInferenceContextHandle | (() => ElizaInferenceContextHandle);
76
+ sampleRate?: number;
77
+ }): Promise<GgmlSileroVad>;
78
+ process(window: Float32Array): Promise<number>;
79
+ reset(): void;
80
+ close(): void;
81
+ }
82
+ /** @deprecated Use `GgmlSileroVad`. Kept as an alias while callers migrate
83
+ * off the legacy ONNX-era name. */
84
+ export declare const NativeSileroVad: typeof GgmlSileroVad;
85
+ export type NativeSileroVad = GgmlSileroVad;
86
+ export interface RmsEnergyGateConfig {
87
+ /** RMS above this counts as activity. Default 0.012 — between the 0.01 the
88
+ * vision capture stream uses and the 0.05 Discord uses for speaking. */
89
+ riseThreshold?: number;
90
+ /** RMS must drop below this to count as quiet (hysteresis). Default
91
+ * `0.6 * riseThreshold`. */
92
+ fallThreshold?: number;
93
+ /** Consecutive ms below `fallThreshold` before emitting `energy-fall`.
94
+ * Default 200 ms. */
95
+ fallHoldMs?: number;
96
+ }
97
+ export declare function rms(pcm: Float32Array): number;
98
+ /**
99
+ * Hysteretic RMS gate. Feed it `PcmFrame`s; it emits `energy-rise` on the
100
+ * first frame above `riseThreshold` and `energy-fall` after RMS has been
101
+ * below `fallThreshold` for `fallHoldMs`. This is the fast pre-warm trigger
102
+ * — not a speech detector.
103
+ */
104
+ export declare class RmsEnergyGate {
105
+ private readonly riseThreshold;
106
+ private readonly fallThreshold;
107
+ private readonly fallHoldMs;
108
+ private active;
109
+ private quietSinceMs;
110
+ private readonly listeners;
111
+ constructor(config?: RmsEnergyGateConfig);
112
+ get isActive(): boolean;
113
+ onEvent(listener: EnergyGateListener): () => void;
114
+ /** Returns the frame RMS so callers can reuse it. */
115
+ push(frame: PcmFrame): number;
116
+ reset(): void;
117
+ private emit;
118
+ }
119
+ export interface VadDetectorConfig {
120
+ /** Mic sample rate (Hz). MUST be 16 000 — Silero v5 is 16 kHz only. */
121
+ sampleRate?: number;
122
+ /** Speech probability above this opens a speech segment. Default 0.5. */
123
+ onsetThreshold?: number;
124
+ /** Speech probability must drop below this to count toward end-of-speech.
125
+ * Default `onsetThreshold - 0.15`. Below the onset to avoid flapping. */
126
+ offsetThreshold?: number;
127
+ /** Consecutive ms of speech-prob below `offsetThreshold` before the
128
+ * segment is considered *paused* (kick speculative response). Default
129
+ * 100 ms (lowered from 220ms; further reduction gated on semantic EOT
130
+ * classifier V2). Override via `ELIZA_PAUSE_HANGOVER_MS`. */
131
+ pauseHangoverMs?: number;
132
+ /**
133
+ * V1 — "fast endpoint" pause hangover, used when `fastEndpointEnabled`
134
+ * is true. Default 100 ms — short enough that a clean trailing-off
135
+ * end-of-utterance hits the speculative path quickly, but long enough
136
+ * to ride out mid-sentence micro-pauses. Gated by the flag so callers
137
+ * can opt in once they've validated the false-positive rate on their
138
+ * hardware. Default 100 ms.
139
+ */
140
+ fastPauseHangoverMs?: number;
141
+ /**
142
+ * V1 — when true, use `fastPauseHangoverMs` instead of `pauseHangoverMs`.
143
+ * Default false until the streaming-ASR fast path (V2) ships.
144
+ */
145
+ fastEndpointEnabled?: boolean;
146
+ /** Consecutive ms paused before the segment *ends* (finalize the turn).
147
+ * Default 700 ms. Must be ≥ `pauseHangoverMs`. */
148
+ endHangoverMs?: number;
149
+ /** A segment shorter than this (from onset to end) is reclassified as a
150
+ * `blip` rather than `speech-end`. Default 250 ms. */
151
+ minSpeechMs?: number;
152
+ /** Interval between `speech-active` heartbeats while speaking. Default
153
+ * 200 ms. */
154
+ activeHeartbeatMs?: number;
155
+ /**
156
+ * V4 — adaptive pause hangover. When the windowed RMS is in a sharp
157
+ * downward trend across the last few frames (the user audibly trailed
158
+ * off rather than stopping mid-thought), the hangover used to detect a
159
+ * pause is scaled by this factor (clamped to a minimum). Default 0.5
160
+ * (halve the hangover); set to 1.0 to disable.
161
+ */
162
+ adaptiveHangoverScaleOnDrop?: number;
163
+ /**
164
+ * V4 — minimum hangover the adaptive scale is allowed to produce, ms.
165
+ * Default 50 ms. Prevents a steep drop from collapsing the hangover to
166
+ * zero and emitting a pause on a single quiet frame.
167
+ */
168
+ adaptiveHangoverFloorMs?: number;
169
+ /**
170
+ * V4 — energy derivative (ΔRMS over the V4 history window) below this
171
+ * value, combined with RMS below `offsetThreshold`, counts as "audibly
172
+ * trailed off". Default -0.02 (negative slope: RMS dropping at least
173
+ * 0.02 / window).
174
+ */
175
+ adaptiveHangoverDropThreshold?: number;
176
+ /** RMS gate config (tier 1). */
177
+ energyGate?: RmsEnergyGateConfig;
178
+ }
179
+ export type { VadLike } from "./types.js";
180
+ import type { VadLike } from "./types.js";
181
+ export type VadProviderId = "external-vad" | "silero-ggml";
182
+ export type VadProviderPreference = "auto" | VadProviderId;
183
+ export interface ExternalVadAdapter {
184
+ isAvailable?(): boolean | Promise<boolean>;
185
+ loadVad(opts: {
186
+ sampleRate: number;
187
+ }): Promise<VadLike>;
188
+ }
189
+ export interface ResolvedVadProvider {
190
+ id: VadProviderId;
191
+ vad: VadLike;
192
+ }
193
+ export interface CreateVadDetectorOptions {
194
+ modelPath?: string;
195
+ bundleRoot?: string;
196
+ ffi?: ElizaInferenceFfi | null;
197
+ ctx?: ElizaInferenceContextHandle | (() => ElizaInferenceContextHandle);
198
+ externalVad?: ExternalVadAdapter | null;
199
+ config?: VadDetectorConfig;
200
+ prefer?: VadProviderPreference;
201
+ }
202
+ export declare function vadProviderOrder(prefer?: VadProviderPreference): VadProviderId[];
203
+ export declare function resolveVadProvider(opts?: CreateVadDetectorOptions): Promise<ResolvedVadProvider>;
204
+ /**
205
+ * The authoritative VAD. Owns a model VAD provider (or any `VadLike` for tests),
206
+ * an `RmsEnergyGate`, and the speech state machine. `pushFrame()` accepts
207
+ * mic frames of any length ≥ 1 sample; internally it re-windows to the
208
+ * provider's fixed sample window. Emits `VadEvent`s on the VAD timeline and
209
+ * `EnergyGateEvent`s on the fast timeline.
210
+ *
211
+ * Frame ingestion is serialized (`pushFrame` awaits the model forward pass)
212
+ * so events stay in order; callers that can't await may fire-and-forget — a
213
+ * dropped-frame counter (`droppedFrames`) records overruns.
214
+ */
215
+ export declare class VadDetector {
216
+ readonly silero: VadLike;
217
+ readonly energyGate: RmsEnergyGate;
218
+ private readonly sampleRate;
219
+ private readonly onsetThreshold;
220
+ private readonly offsetThreshold;
221
+ private readonly pauseHangoverMs;
222
+ private readonly fastPauseHangoverMs;
223
+ private readonly fastEndpointEnabled;
224
+ private readonly endHangoverMs;
225
+ private readonly minSpeechMs;
226
+ private readonly activeHeartbeatMs;
227
+ private readonly adaptiveHangoverScaleOnDrop;
228
+ private readonly adaptiveHangoverFloorMs;
229
+ private readonly adaptiveHangoverDropThreshold;
230
+ private readonly recentRms;
231
+ private static readonly RECENT_RMS_HISTORY;
232
+ private readonly vadListeners;
233
+ private pending;
234
+ private windowDurationMs;
235
+ private clockMs;
236
+ private busy;
237
+ droppedFrames: number;
238
+ private phase;
239
+ private speechStartMs;
240
+ private lastSpeechMs;
241
+ private pauseStartedMs;
242
+ private lastHeartbeatMs;
243
+ private peakRmsInSegment;
244
+ constructor(silero: VadLike, config?: VadDetectorConfig);
245
+ /**
246
+ * Effective pause hangover for this window. Starts from
247
+ * `fastPauseHangoverMs` or `pauseHangoverMs` (V1: gated on
248
+ * `fastEndpointEnabled`), then optionally scales it down when the RMS
249
+ * trajectory shows an audible trail-off (V4).
250
+ */
251
+ private effectivePauseHangoverMs;
252
+ onVadEvent(listener: VadEventListener): () => void;
253
+ onEnergyEvent(listener: EnergyGateListener): () => void;
254
+ /** True while a speech segment (incl. its pause hangover) is open. */
255
+ get inSpeech(): boolean;
256
+ /**
257
+ * Feed a mic frame. Returns a promise that resolves once every full
258
+ * Silero window contained in (the accumulated buffer up to) this frame
259
+ * has been processed and its events emitted. The fast RMS gate fires
260
+ * synchronously before the await.
261
+ */
262
+ pushFrame(frame: PcmFrame): Promise<void>;
263
+ /** Flush any partial trailing samples (zero-padded to a full window) and
264
+ * finalize an open segment. Call at end-of-stream. */
265
+ flush(): Promise<void>;
266
+ reset(): void;
267
+ private drainWindows;
268
+ private processWindow;
269
+ private endSegment;
270
+ private emit;
271
+ }
272
+ /**
273
+ * Back-compat wrapper for callers that still use the legacy
274
+ * `createSileroVadDetector` name. It now goes through the full provider
275
+ * resolver — same as `createVadDetector`.
276
+ */
277
+ export declare function createSileroVadDetector(opts?: CreateVadDetectorOptions): Promise<VadDetector>;
278
+ /**
279
+ * Convenience: resolve the best available model VAD provider and wrap it in a
280
+ * `VadDetector`.
281
+ */
282
+ export declare function createVadDetector(opts?: CreateVadDetectorOptions): Promise<VadDetector>;
283
+ //# sourceMappingURL=vad.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vad.d.ts","sourceRoot":"","sources":["../../../src/services/voice/vad.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,241 @@
1
+ /**
2
+ * Voice-budget allocator — single arbiter of the co-resident memory budget
3
+ * for the whole voice + text bundle (text LM, drafter, ASR, TTS, embedding,
4
+ * VAD, wake-word, turn-detector, emotion classifier, speaker encoder).
5
+ *
6
+ * Today's `ram-budget.ts` is per-tier: it decides whether ONE text bundle
7
+ * fits a host. `voice-budget.ts` is the cross-model layer the brief
8
+ * mandated in `.swarm/VOICE_WAVE_2.md` §H4 and R9 §4 — every model loader
9
+ * calls `reserve()` before it loads weights, releases on unload, and
10
+ * `reserve()` walks the residents under contention by eviction priority
11
+ * (cold → warm → hot) until the requested amount fits.
12
+ *
13
+ * Priorities (from R9 §4.1, mapped to `ResidentModelRole`):
14
+ *
15
+ * - **hot** (priority ≥ 40): `text-target`, `tts`, `asr` — never load
16
+ * on demand, never evicted before pressure-of-last-resort.
17
+ * - **warm** (priority 25–35): `vad`, `embedding` — may be evicted but
18
+ * reload is expensive.
19
+ * - **cold** (priority ≤ 20): `speaker-id` (18), `emotion` (15),
20
+ * `vision` (20), `drafter` (10) — load-on-demand; first to evict.
21
+ *
22
+ * Eviction policy: walk ascending priority (cheapest first) until enough
23
+ * memory has been reclaimed. The text target evicts only when it is
24
+ * literally the only resident role and pressure persists (matches
25
+ * `SharedResourceRegistry.evictLowestPriorityRole` semantics).
26
+ *
27
+ * The allocator is **memory-only** — it does not load weights. The caller
28
+ * (TTS engine, ASR loader, etc.) holds the typed reservation and runs
29
+ * `release()` on unload.
30
+ *
31
+ * Wire-up plan (handed to follow-up commits, NOT done by I9):
32
+ * - `ffi-streaming-backend.ts` → `reserve(role="text-target")` + `reserve(role="drafter")` at spawn.
33
+ * - `voice/pipeline.ts` → `reserve(role="tts", bytes=transientPeakMb*MB)` per synth.
34
+ * - `voice/wake-word.ts`, `vad.ts`, `eot-classifier.ts` → reserve at session arm.
35
+ * - I2/I3 add `emotion` + `speaker-id` reservations when those models register.
36
+ *
37
+ * NOTE: the wire-up is intentionally separate from the allocator
38
+ * implementation because the in-flight I-agents (I1/I2/I3/I5) own those
39
+ * loader files and we must not race their edits. The allocator + the
40
+ * `evictionPriority` hooks are in place; the loaders adopt it as they
41
+ * land.
42
+ */
43
+ import { type DeviceTier, type DeviceTierAssessment } from "../device-tier";
44
+ import type { HardwareProbe } from "../types";
45
+ import { type ResidentModelRole } from "./shared-resources";
46
+ /** Coarse priority class consumed by `reserve()`. Internally we map this
47
+ * back to the per-role priority number in `RESIDENT_ROLE_PRIORITY`. */
48
+ export type AllocationPriority = "hot" | "warm" | "cold";
49
+ export declare function priorityClassForRole(role: ResidentModelRole): AllocationPriority;
50
+ export interface BudgetReservation {
51
+ readonly id: string;
52
+ readonly role: ResidentModelRole;
53
+ readonly bytes: number;
54
+ readonly priority: AllocationPriority;
55
+ /** Per-role priority number (R9 §4.1 / `RESIDENT_ROLE_PRIORITY`). */
56
+ readonly priorityRank: number;
57
+ /** Idempotent. Multi-release is a no-op (release happens from teardown
58
+ * paths that may race). */
59
+ release(): void;
60
+ }
61
+ /** Diagnostic snapshot row for `VoiceBudget.snapshot()`. */
62
+ export interface ReservationSnapshot {
63
+ id: string;
64
+ role: ResidentModelRole;
65
+ bytes: number;
66
+ priority: AllocationPriority;
67
+ priorityRank: number;
68
+ }
69
+ export declare class BudgetExhaustedError extends Error {
70
+ readonly code = "voice-budget-exhausted";
71
+ readonly details: {
72
+ requestedBytes: number;
73
+ freeBytes: number;
74
+ totalBytes: number;
75
+ role: ResidentModelRole;
76
+ priority: AllocationPriority;
77
+ evictedRoles: ReadonlyArray<ResidentModelRole>;
78
+ evictionCandidate: ResidentModelRole | null;
79
+ };
80
+ constructor(details: BudgetExhaustedError["details"]);
81
+ }
82
+ export interface VoiceBudget {
83
+ /**
84
+ * Reserve `bytes` for `modelId` with `priority`. Returns a handle the
85
+ * caller MUST `.release()` to give the memory back. Throws
86
+ * `BudgetExhaustedError` when the requested amount cannot fit even after
87
+ * evicting every available lower-priority reservation.
88
+ *
89
+ * `evictHook` is optional: when present, the allocator will call it for
90
+ * each role that needs to be evicted (one at a time, ascending priority)
91
+ * before recording the new reservation. When omitted, the allocator just
92
+ * walks its own internal table — the caller is expected to drive the
93
+ * actual weight unload (the loader/eviction path lives in the model's
94
+ * own service, not here).
95
+ */
96
+ reserve(args: {
97
+ modelId: string;
98
+ role: ResidentModelRole;
99
+ bytes: number;
100
+ /** Optional; defaults to `priorityClassForRole(role)`. */
101
+ priority?: AllocationPriority;
102
+ /** Optional eviction callback. When provided, called once per evicted
103
+ * role in ascending-priority order before the new reservation is
104
+ * recorded. The callback should drop the weights and return the
105
+ * bytes actually reclaimed (must be >= the reservation's recorded
106
+ * bytes). When omitted, the allocator only drops the internal
107
+ * reservation entry (eviction-by-accounting). */
108
+ evictHook?: (role: ResidentModelRole, id: string) => Promise<number>;
109
+ }): Promise<BudgetReservation>;
110
+ /** Best-effort current free budget, in bytes. */
111
+ freeBytes(): number;
112
+ /** Total budget on this device, in bytes. */
113
+ totalBytes(): number;
114
+ /** All current reservations, ordered by priority ascending. */
115
+ snapshot(): ReadonlyArray<ReservationSnapshot>;
116
+ /** The tier this budget was sized to. */
117
+ tier(): DeviceTier;
118
+ /** The original assessment. */
119
+ assessment(): DeviceTierAssessment;
120
+ }
121
+ /**
122
+ * Co-resident voice-ensemble RSS estimate in MB. Sourced from R9 §2.3,
123
+ * keyed off the LM-tier slot (the text model that anchors the bundle).
124
+ *
125
+ * Each row is the steady-state weights + KV at default context for the
126
+ * whole voice + text bundle running at once:
127
+ *
128
+ * LM + LM KV + drafter + TTS (omnivoice base + tokenizer or kokoro-q8) +
129
+ * ASR + ASR mmproj + embedding + VAD + wake-word + turn-detector +
130
+ * emotion classifier + speaker encoder.
131
+ *
132
+ * The `transientTtsBufferMb` field is the OmniVoice MaskGIT decode peak
133
+ * (~1.17 GB measured on Metal). Backends that don't run OmniVoice locally
134
+ * (kokoro-only, cloud TTS) have a much smaller transient — kept at 100 MB
135
+ * to leave room for kokoro's ONNX compute path. Mobile defaults to no
136
+ * local TTS, so transient = 0.
137
+ *
138
+ * The figures are MEASURED on-disk (Q4_K_M GGUFs in
139
+ * `<stateDir>/local-inference/models/eliza-1-2b.bundle/`) plus
140
+ * model-card sizes for VAD, wake-word, turn-detector, emotion, speaker-id.
141
+ * See R9 §2.1 + §2.2 + §2.3 for the per-component breakdown.
142
+ */
143
+ export interface VoiceEnsembleBudget {
144
+ readonly tierSlot: VoiceTierSlot;
145
+ readonly lmMb: number;
146
+ readonly lmKvMb: number;
147
+ readonly drafterMb: number;
148
+ readonly ttsMb: number;
149
+ readonly asrMb: number;
150
+ readonly asrMmprojMb: number;
151
+ readonly embeddingMb: number;
152
+ readonly vadMb: number;
153
+ readonly wakeWordMb: number;
154
+ readonly turnDetectorMb: number;
155
+ readonly emotionMb: number;
156
+ readonly speakerEncoderMb: number;
157
+ readonly transientTtsBufferMb: number;
158
+ /** Sum of weights + KV (steady-state). Excludes transient TTS buffer. */
159
+ readonly steadyStateMb: number;
160
+ /** Sum of steady-state + transient TTS peak. */
161
+ readonly peakMb: number;
162
+ }
163
+ /**
164
+ * The voice ensemble's LM tier slot. We key the table off the LM size +
165
+ * the surrounding voice profile (mobile-cloud vs desktop-omnivoice) since
166
+ * the largest co-resident knob is the LM itself.
167
+ */
168
+ export type VoiceTierSlot = "mobile-2b" | "desktop-2b" | "desktop-4b" | "workstation-9b" | "workstation-27b";
169
+ /** R9 §2.3 — measured co-resident bundle for every supported tier slot. */
170
+ export declare const VOICE_ENSEMBLE_BUDGETS: Readonly<Record<VoiceTierSlot, VoiceEnsembleBudget>>;
171
+ /**
172
+ * Estimate the full voice ensemble's peak resident MB for a tier slot.
173
+ * `assertVoiceBundleFitsHost` consults this against the device's host RAM.
174
+ */
175
+ export declare function voiceEnsemblePeakMb(slot: VoiceTierSlot): number;
176
+ /** Sum of weights + KV (steady-state, excludes transient TTS buffer). */
177
+ export declare function voiceEnsembleSteadyStateMb(slot: VoiceTierSlot): number;
178
+ /**
179
+ * Pick the canonical voice-tier slot for an installed text model + device
180
+ * tier. The LM size anchors the slot (`eliza-1-2b` → `2b` (entry tier),
181
+ * `4b` → `4b`, …) and the device tier picks `mobile-` vs `desktop-` vs
182
+ * `workstation-` for the voice surrounding it. Mobile always pulls the
183
+ * `mobile-2b` slot because the brief defaults mobile to cloud TTS+ASR; only
184
+ * the 2B entry-tier local LM stays available there.
185
+ */
186
+ export declare function pickVoiceTierSlot(args: {
187
+ textModelId: string;
188
+ deviceTier: DeviceTier;
189
+ mobile?: boolean;
190
+ }): VoiceTierSlot;
191
+ /**
192
+ * Decision returned by `assertVoiceBundleFitsHost`. Mirrors the shape of
193
+ * `RamFitDecision` in `ram-budget.ts` but at the bundle level.
194
+ */
195
+ export interface VoiceBundleFitDecision {
196
+ tierSlot: VoiceTierSlot;
197
+ deviceTier: DeviceTier;
198
+ /** Steady-state weights + KV, MB. */
199
+ steadyStateMb: number;
200
+ /** Steady-state + transient TTS peak, MB. */
201
+ peakMb: number;
202
+ /** RAM available to the bundle (host MB - OS reserve). */
203
+ usableMb: number;
204
+ /** True iff `peakMb <= usableMb` AND `steadyStateMb <= usableMb`. */
205
+ fits: boolean;
206
+ /** "fits" when peak fits, "tight" when only steady-state fits, "wontfit"
207
+ * when not even steady-state fits. */
208
+ level: "fits" | "tight" | "wontfit";
209
+ }
210
+ /** Default OS reserve subtracted from the host before the bundle check. */
211
+ export declare const DEFAULT_VOICE_BUNDLE_RESERVE_MB = 1536;
212
+ /**
213
+ * Decide whether the whole voice ensemble fits a host. Used by the runtime
214
+ * at voice-session-start to refuse local-voice entry rather than start it
215
+ * and watch `MemoryMonitor` evict the loaders mid-session.
216
+ *
217
+ * `assertVoiceBundleFitsHost` (in `active-model.ts`) wraps this with a
218
+ * typed error. This function returns the raw decision so callers that want
219
+ * to degrade silently can do so. R9 §1.4 spec.
220
+ */
221
+ export declare function assessVoiceBundleFits(args: {
222
+ tierSlot: VoiceTierSlot;
223
+ deviceTier: DeviceTier;
224
+ hostRamMb: number;
225
+ reserveMb?: number;
226
+ }): VoiceBundleFitDecision;
227
+ /** Public factory. */
228
+ export declare function createVoiceBudget(args: {
229
+ probe: HardwareProbe;
230
+ /** Optional user override for the budget cap, in MB. Default: tier
231
+ * natural total. Clamped to the device's effective model memory. */
232
+ maxRamMb?: number;
233
+ /** Optional pre-computed assessment (avoid double classification). */
234
+ assessment?: DeviceTierAssessment;
235
+ }): VoiceBudget;
236
+ /** Test seam — construct a budget with explicit total bytes + assessment. */
237
+ export declare function createVoiceBudgetForTest(args: {
238
+ totalBytes: number;
239
+ assessment: DeviceTierAssessment;
240
+ }): VoiceBudget;
241
+ //# sourceMappingURL=voice-budget.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"voice-budget.d.ts","sourceRoot":"","sources":["../../../src/services/voice/voice-budget.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,95 @@
1
+ /**
2
+ * Voice-emotion types and pure projection functions — consumed by the
3
+ * attribution pipeline (`emotion-attribution.ts`).
4
+ *
5
+ * The ONNX-backed `VoiceEmotionClassifier` class was removed when
6
+ * `onnxruntime-node` was dropped. No resident voice-emotion classifier
7
+ * remains; only the pure types and projection helpers below are kept.
8
+ *
9
+ * Pure exports here:
10
+ * - Model id constants (`WAV2SMALL_INT8_MODEL_ID`, etc.)
11
+ * - Sample rate / window constants
12
+ * - `VoiceEmotionVad`, `VoiceEmotionClassifierOutput` interfaces
13
+ * - `VoiceEmotionHead` type
14
+ * - `VoiceEmotionClassifierError` error class
15
+ * - `projectVadToExpressiveEmotion` — V-A-D → ExpressiveEmotion projection
16
+ * - `interpretCls7Output` — 7-class logit → structured output
17
+ */
18
+ import { type ExpressiveEmotion } from "./expressive-tags";
19
+ /** Stable identifier for the Wav2Small student head we ship. */
20
+ export declare const WAV2SMALL_INT8_MODEL_ID: "wav2small-msp-dim-int8";
21
+ /** Stable identifier for the floating-point parent we use in eval. */
22
+ export declare const WAV2SMALL_FP32_MODEL_ID: "wav2small-msp-dim-fp32";
23
+ export type VoiceEmotionModelId = typeof WAV2SMALL_INT8_MODEL_ID | typeof WAV2SMALL_FP32_MODEL_ID;
24
+ /** Required sample rate for the Wav2Small log-mel front-end. */
25
+ export declare const WAV2SMALL_SAMPLE_RATE = 16000;
26
+ /** Hard minimum window: anything shorter is rejected. */
27
+ export declare const WAV2SMALL_MIN_SAMPLES = 16000;
28
+ /** Soft maximum window: longer inputs are truncated to the trailing window. */
29
+ export declare const WAV2SMALL_MAX_SAMPLES: number;
30
+ /** Raised when the bundled model file can not be loaded or run. */
31
+ export declare class VoiceEmotionClassifierError extends Error {
32
+ constructor(message: string);
33
+ }
34
+ /** Continuous V-A-D output. All three are in [0, 1]. */
35
+ export interface VoiceEmotionVad {
36
+ valence: number;
37
+ arousal: number;
38
+ dominance: number;
39
+ }
40
+ /** One classifier inference output. */
41
+ export interface VoiceEmotionClassifierOutput {
42
+ vad: VoiceEmotionVad;
43
+ /** Projected discrete label, or null when no projection is confident. */
44
+ emotion: ExpressiveEmotion | null;
45
+ /** Confidence in the projected discrete label, [0, 1]. */
46
+ confidence: number;
47
+ /** Per-class soft scores aligned with `EXPRESSIVE_EMOTION_TAGS`. */
48
+ scores: Record<ExpressiveEmotion, number>;
49
+ /** Model id used for this inference (for the attribution evidence row). */
50
+ modelId: VoiceEmotionModelId;
51
+ /** Inference wall-time in ms (CPU side; useful for the bench harness). */
52
+ latencyMs: number;
53
+ }
54
+ /**
55
+ * Project a continuous V-A-D triple into the 7-class
56
+ * `ExpressiveEmotion` tag set. Returns soft scores per tag and the best
57
+ * discrete pick with a confidence score.
58
+ *
59
+ * The projection is Plutchik-aligned and deterministic. The thresholds
60
+ * are tuned against the MSP-Podcast V-A-D mean/std reported in the
61
+ * audeering model card and Wav2Small paper; small enough to be stable but
62
+ * wide enough to give every class some mass on conversational speech.
63
+ *
64
+ * Sign convention (audeering teacher, mirrored by Wav2Small):
65
+ * valence — high = positive affect (happy, calm), low = negative (sad, angry).
66
+ * arousal — high = energetic (excited, angry), low = subdued (calm, sad).
67
+ * dominance — high = assertive (angry), low = submissive (nervous, whisper).
68
+ */
69
+ export declare function projectVadToExpressiveEmotion(vad: VoiceEmotionVad): {
70
+ emotion: ExpressiveEmotion | null;
71
+ confidence: number;
72
+ scores: Record<ExpressiveEmotion, number>;
73
+ };
74
+ /**
75
+ * Stable model-head identifier — declares whether the model emits
76
+ * V-A-D triples or 7-class logits. `vad` = continuous [valence, arousal,
77
+ * dominance]; `cls7` = 7-class logits in `EXPRESSIVE_EMOTION_TAGS` order.
78
+ */
79
+ export type VoiceEmotionHead = "vad" | "cls7";
80
+ /**
81
+ * Convert the 7-class logits from the `cls7` head into a structured
82
+ * emotion read. Applies a numerically-stable softmax (max-subtraction)
83
+ * over `EXPRESSIVE_EMOTION_TAGS` and selects the argmax.
84
+ *
85
+ * Confidence is the softmax probability of the picked class (in [0, 1]),
86
+ * which gives downstream consumers a calibrated mass to compare against
87
+ * the V-A-D-projection path's 0.35 abstain floor.
88
+ *
89
+ * The `vad` field is synthesised at the neutral midpoint (0.5, 0.5, 0.5).
90
+ * The cls7 head is the ground truth for the picked emotion — the V-A-D
91
+ * triple is left at neutral because we no longer regress to a V-A-D
92
+ * target. Consumers that need real V-A-D must use a `head=vad` model.
93
+ */
94
+ export declare function interpretCls7Output(logits: Float32Array, modelId: VoiceEmotionModelId, latencyMs: number): VoiceEmotionClassifierOutput;
95
+ //# sourceMappingURL=voice-emotion-classifier.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"voice-emotion-classifier.d.ts","sourceRoot":"","sources":["../../../src/services/voice/voice-emotion-classifier.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAEN,KAAK,iBAAiB,EACtB,MAAM,mBAAmB,CAAC;AAE3B,gEAAgE;AAChE,eAAO,MAAM,uBAAuB,EAAG,wBAAiC,CAAC;AACzE,sEAAsE;AACtE,eAAO,MAAM,uBAAuB,EAAG,wBAAiC,CAAC;AACzE,MAAM,MAAM,mBAAmB,GAC5B,OAAO,uBAAuB,GAC9B,OAAO,uBAAuB,CAAC;AAElC,gEAAgE;AAChE,eAAO,MAAM,qBAAqB,QAAS,CAAC;AAC5C,yDAAyD;AACzD,eAAO,MAAM,qBAAqB,QAAwB,CAAC;AAC3D,+EAA+E;AAC/E,eAAO,MAAM,qBAAqB,QAA6B,CAAC;AAEhE,mEAAmE;AACnE,qBAAa,2BAA4B,SAAQ,KAAK;gBACzC,OAAO,EAAE,MAAM;CAI3B;AAED,wDAAwD;AACxD,MAAM,WAAW,eAAe;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CAClB;AAED,uCAAuC;AACvC,MAAM,WAAW,4BAA4B;IAC5C,GAAG,EAAE,eAAe,CAAC;IACrB,yEAAyE;IACzE,OAAO,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAClC,0DAA0D;IAC1D,UAAU,EAAE,MAAM,CAAC;IACnB,oEAAoE;IACpE,MAAM,EAAE,MAAM,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;IAC1C,2EAA2E;IAC3E,OAAO,EAAE,mBAAmB,CAAC;IAC7B,0EAA0E;IAC1E,SAAS,EAAE,MAAM,CAAC;CAClB;AAaD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,6BAA6B,CAAC,GAAG,EAAE,eAAe,GAAG;IACpE,OAAO,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;CAC1C,CA6EA;AAED;;;;GAIG;AACH,MAAM,MAAM,gBAAgB,GAAG,KAAK,GAAG,MAAM,CAAC;AAE9C;;;;;;;;;;;;;GAaG;AACH,wBAAgB,mBAAmB,CAClC,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,mBAAmB,EAC5B,SAAS,EAAE,MAAM,GACf,4BAA4B,CA0D9B"}