@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,474 @@
1
+ /**
2
+ * Feature-flagged + capability-detected wrapper around the REST-backed
3
+ * `CheckpointManager` from `voice/checkpoint-manager.ts`.
4
+ *
5
+ * Why two layers?
6
+ *
7
+ * - `voice/checkpoint-manager.ts` is the production primitive: REST adapter
8
+ * + handle bookkeeping + mock implementation. It is referenced directly
9
+ * by `voice/voice-state-machine.ts` and by `voice/prefill-client.ts`,
10
+ * both of which expect callers to have already decided whether the
11
+ * feature is on.
12
+ *
13
+ * - This module is the *runtime gate*. It owns:
14
+ * 1. The process-wide feature flag (`ELIZA_CTX_CHECKPOINTS=1` env, or
15
+ * `useCtxCheckpoints` constructor option — env wins when set).
16
+ * 2. Capability detection against a running checkpoint runtime (`/health`
17
+ * probe via the underlying `CheckpointClient`).
18
+ * 3. A no-op fallback path so callers — the `checkpoint-policy.ts`
19
+ * module in particular — can write unconditional `save / restore /
20
+ * erase / cancel` calls without branching on the flag.
21
+ * 4. A named-handle registry with TTL eviction. The upstream server
22
+ * has its own LRU on `--ctx-checkpoints N`; this registry tracks
23
+ * *our* names → handles so the policy module can refer to
24
+ * `'pre-speculative-T123'` instead of opaque filenames.
25
+ *
26
+ * When the upstream merge lands, flip `ELIZA_CTX_CHECKPOINTS=1` and the
27
+ * wrapper starts forwarding to the REST manager. Until then, every call
28
+ * short-circuits to a logged no-op.
29
+ *
30
+ * Feature-flag behavior matrix:
31
+ *
32
+ * | flag | runtime-supports | save | restore | erase | cancel |
33
+ * | OFF | n/a | no-op + warn | no-op + warn | no-op | SSE-disconnect cb |
34
+ * | ON | NO (probe=fail)| no-op + warn | no-op + warn | no-op | SSE-disconnect cb |
35
+ * | ON | YES (probe=ok) | REST POST /slots/.../save | REST POST /slots/.../restore | n/a | DELETE /slots/<id> |
36
+ *
37
+ * The stream-disconnect callback is supplied by the caller (the voice loop
38
+ * owns the stream and the abort handle); when the flag/probe is off the
39
+ * wrapper just invokes the callback synchronously.
40
+ *
41
+ * This module deliberately does NOT modify `turn-controller.ts`,
42
+ * `pipeline.ts`, `pipeline-impls.ts`, `vad.ts`, `scheduler.ts`,
43
+ * `phrase-chunker.ts`, `barge-in.ts`, `transcriber.ts`, or anything under
44
+ * `voice/kokoro/` / `voice/streaming-asr/`. Those files are owned by other
45
+ * agents; the policy in `voice/checkpoint-policy.ts` is the integration
46
+ * point.
47
+ */
48
+
49
+ import { logger } from "@elizaos/core";
50
+ import { CheckpointClient, type CheckpointFetch } from "./checkpoint-client";
51
+ import {
52
+ type CheckpointHandle,
53
+ type CheckpointManagerLike,
54
+ CheckpointManager as RestCheckpointManager,
55
+ } from "./voice/checkpoint-manager";
56
+
57
+ export type {
58
+ CheckpointHandle,
59
+ CheckpointManagerLike,
60
+ } from "./voice/checkpoint-manager";
61
+
62
+ /**
63
+ * Env-var name that flips the JS-side feature on. The matching server-side
64
+ * `--ctx-checkpoints` flag is appended by the native runtime when the catalog
65
+ * tier declares `optimizations.ctxCheckpoints` and the binding supports it.
66
+ */
67
+ export const CTX_CHECKPOINTS_ENV_VAR = "ELIZA_CTX_CHECKPOINTS";
68
+
69
+ /**
70
+ * Default TTL for entries in the named registry. The upstream server runs
71
+ * its own LRU on `--ctx-checkpoints N` (default 8 per slot); this TTL is
72
+ * for *our* name → handle mapping so a stale name doesn't keep a handle
73
+ * pinned forever. 10 minutes covers any plausible mid-conversation pause
74
+ * with margin; anything older than that the policy module should re-save
75
+ * rather than reuse.
76
+ */
77
+ export const DEFAULT_NAMED_HANDLE_TTL_MS = 10 * 60 * 1000;
78
+
79
+ /**
80
+ * Read the process-wide feature flag. Truthy values: `1`, `true`, `yes`.
81
+ * Anything else (including absent) is `false`.
82
+ */
83
+ export function readCtxCheckpointsEnvFlag(): boolean {
84
+ const raw = process.env[CTX_CHECKPOINTS_ENV_VAR]?.trim().toLowerCase();
85
+ return raw === "1" || raw === "true" || raw === "yes";
86
+ }
87
+
88
+ /**
89
+ * Caller-supplied "abort the in-flight stream for this slot" hook. The
90
+ * voice loop owns the actual stream handle (held by `turn-controller.ts` via
91
+ * the speculative `AbortController`); the policy module hands a thunk in
92
+ * here so `cancel(slotId)` works identically with the flag on or off.
93
+ */
94
+ export type SseDisconnectFn = (slotId: number) => void;
95
+
96
+ export interface GatedCheckpointManagerOptions {
97
+ /**
98
+ * `http://host:port` base URL of the running checkpoint runtime. May be `null`
99
+ * before the caller starts the server — every method then routes through
100
+ * the no-op path until `setBaseUrl` is called.
101
+ */
102
+ baseUrl: string | null;
103
+ /**
104
+ * Explicit override for the feature flag. When unset, the env var
105
+ * (`ELIZA_CTX_CHECKPOINTS`) is consulted. When set, the env var is
106
+ * ignored. Tests pass `false` to assert the no-op path; production code
107
+ * leaves this `undefined` so the env var wins.
108
+ */
109
+ useCtxCheckpoints?: boolean;
110
+ /**
111
+ * Optional custom fetch (mostly for unit tests). Forwarded to
112
+ * `CheckpointClient`.
113
+ */
114
+ fetchImpl?: CheckpointFetch;
115
+ /** Per-request timeout for REST calls (ms). Default 1500ms. */
116
+ requestTimeoutMs?: number;
117
+ /**
118
+ * Optional slot-id resolver. Forwarded to the underlying
119
+ * `CheckpointManager`. Default is the 31-bit hash → `% 256` resolver
120
+ * defined in `voice/checkpoint-manager.ts`.
121
+ */
122
+ resolveSlotId?: (slotIdString: string) => number;
123
+ /**
124
+ * TTL (ms) for entries in the named handle registry. Default 10 minutes.
125
+ * Set to 0 to disable TTL eviction (entries live until explicitly
126
+ * cleared).
127
+ */
128
+ namedHandleTtlMs?: number;
129
+ /** Injected clock for tests. Defaults to `Date.now`. */
130
+ now?: () => number;
131
+ }
132
+
133
+ interface NamedHandleEntry {
134
+ handle: CheckpointHandle;
135
+ /** Wall-clock ms at which this entry was registered. */
136
+ registeredAtMs: number;
137
+ }
138
+
139
+ /**
140
+ * Process-wide gate around the REST-backed `CheckpointManager`. Owns the
141
+ * feature flag, capability detection cache, named-handle registry, and a
142
+ * fallback path for `cancel` that calls back into the voice loop's SSE
143
+ * disconnect when REST is not available.
144
+ *
145
+ * Stateless w.r.t. checkpoint data — handles live in the underlying
146
+ * REST manager / on the runtime's slot-save directory. Stateful
147
+ * w.r.t. names: the registry maps human-readable names like
148
+ * `'pre-speculative-T123'` to the underlying `CheckpointHandle`.
149
+ */
150
+ export class GatedCheckpointManager {
151
+ private readonly explicitFlag: boolean | undefined;
152
+ private readonly fetchImpl?: CheckpointFetch;
153
+ private readonly requestTimeoutMs?: number;
154
+ private readonly resolveSlotId?: (slotIdString: string) => number;
155
+ private readonly namedHandleTtlMs: number;
156
+ private readonly now: () => number;
157
+ private readonly named = new Map<string, NamedHandleEntry>();
158
+
159
+ private baseUrl: string | null;
160
+ /** Lazy: built on first use once `baseUrl` is non-null. */
161
+ private restManager: RestCheckpointManager | null = null;
162
+ /** Lazy: built on first capability probe. */
163
+ private capabilityClient: CheckpointClient | null = null;
164
+ /** Cached capability probe result. Cleared on `setBaseUrl`. */
165
+ private serverSupportsCheckpoints: boolean | null = null;
166
+
167
+ constructor(opts: GatedCheckpointManagerOptions) {
168
+ this.baseUrl = opts.baseUrl;
169
+ this.explicitFlag = opts.useCtxCheckpoints;
170
+ if (opts.fetchImpl !== undefined) {
171
+ this.fetchImpl = opts.fetchImpl;
172
+ }
173
+ if (opts.requestTimeoutMs !== undefined) {
174
+ this.requestTimeoutMs = opts.requestTimeoutMs;
175
+ }
176
+ if (opts.resolveSlotId !== undefined) {
177
+ this.resolveSlotId = opts.resolveSlotId;
178
+ }
179
+ this.namedHandleTtlMs =
180
+ opts.namedHandleTtlMs ?? DEFAULT_NAMED_HANDLE_TTL_MS;
181
+ this.now = opts.now ?? Date.now;
182
+ }
183
+
184
+ /**
185
+ * Whether the JS-side feature flag is on. Does NOT check capability —
186
+ * call `detectCapability()` for the combined gate.
187
+ */
188
+ isFeatureFlagOn(): boolean {
189
+ return this.explicitFlag !== undefined
190
+ ? this.explicitFlag
191
+ : readCtxCheckpointsEnvFlag();
192
+ }
193
+
194
+ /**
195
+ * Combined gate: feature flag AND base URL set AND server probe (cached)
196
+ * returned true. Callers that want the up-to-the-second view should call
197
+ * `detectCapability(true)` to force a re-probe.
198
+ */
199
+ isEnabled(): boolean {
200
+ return (
201
+ this.isFeatureFlagOn() &&
202
+ this.baseUrl !== null &&
203
+ this.serverSupportsCheckpoints === true
204
+ );
205
+ }
206
+
207
+ /**
208
+ * Update the base URL after a server (re)start. Clears the capability
209
+ * cache so the next `detectCapability()` re-probes.
210
+ */
211
+ setBaseUrl(baseUrl: string | null): void {
212
+ if (this.baseUrl === baseUrl) return;
213
+ this.baseUrl = baseUrl;
214
+ this.restManager = null;
215
+ this.capabilityClient = null;
216
+ this.serverSupportsCheckpoints = null;
217
+ }
218
+
219
+ /**
220
+ * Probe the runtime for checkpoint support. Caches the result; pass
221
+ * `force=true` to re-probe (e.g. after the server reports a restart).
222
+ * Returns `false` when the feature flag is off — the probe is short-
223
+ * circuited because there's no point asking the server when the JS side
224
+ * isn't going to call the endpoints anyway.
225
+ */
226
+ async detectCapability(force = false): Promise<boolean> {
227
+ if (!this.isFeatureFlagOn()) {
228
+ this.serverSupportsCheckpoints = false;
229
+ return false;
230
+ }
231
+ if (this.baseUrl === null) {
232
+ this.serverSupportsCheckpoints = false;
233
+ return false;
234
+ }
235
+ if (!force && this.serverSupportsCheckpoints !== null) {
236
+ return this.serverSupportsCheckpoints;
237
+ }
238
+ const client = this.getCapabilityClient();
239
+ try {
240
+ const supported = await client.probeSupported();
241
+ this.serverSupportsCheckpoints = supported;
242
+ if (!supported) {
243
+ logger.warn(
244
+ `[checkpoint-manager] runtime at ${this.baseUrl} did not advertise ctx-checkpoint support; falling back to stream cancel and no-op save/restore.`,
245
+ );
246
+ }
247
+ return supported;
248
+ } catch (error) {
249
+ logger.warn(
250
+ { error },
251
+ "[checkpoint-manager] capability probe failed; assuming unsupported",
252
+ );
253
+ this.serverSupportsCheckpoints = false;
254
+ return false;
255
+ }
256
+ }
257
+
258
+ /**
259
+ * Snapshot the slot's KV state under `name`. Registers `name → handle`
260
+ * in the registry so later `restore(slotId, name)` / `erase(slotId,
261
+ * name)` calls can look the handle up. Replaces any prior entry with the
262
+ * same name. No-op (returns `null`) when the gate is off.
263
+ *
264
+ * Naming convention: callers should encode the conversation/turn id
265
+ * into the name so multiple slots don't collide
266
+ * (`pre-speculative-T123`, not `pre-speculative`).
267
+ */
268
+ async save(slotId: number, name: string): Promise<CheckpointHandle | null> {
269
+ this.evictExpired();
270
+ if (!this.isEnabled()) {
271
+ logger.debug(
272
+ `[checkpoint-manager] save(${slotId}, ${name}) — no-op (feature flag off or server unsupported)`,
273
+ );
274
+ return null;
275
+ }
276
+ const manager = this.getRestManager();
277
+ const handle = await manager.saveCheckpoint(restSlotIdString(slotId), name);
278
+ this.named.set(name, { handle, registeredAtMs: this.now() });
279
+ return handle;
280
+ }
281
+
282
+ /**
283
+ * Restore the slot from a previously-saved snapshot. The `handle`
284
+ * argument may be:
285
+ *
286
+ * - A `CheckpointHandle` returned from a prior `save()` — pass it
287
+ * directly; the manager goes straight to the REST endpoint.
288
+ * - A string `name` — looked up in the registry. Returns `false` if
289
+ * the name is unknown or has expired; callers can fall back to
290
+ * re-running the speculative draft from scratch.
291
+ *
292
+ * Returns `true` on success, `false` on no-op / unknown handle. Never
293
+ * throws for the "feature off" path; REST errors do propagate.
294
+ */
295
+ async restore(
296
+ slotId: number,
297
+ handleOrName: CheckpointHandle | string,
298
+ ): Promise<boolean> {
299
+ this.evictExpired();
300
+ if (!this.isEnabled()) {
301
+ logger.debug(
302
+ `[checkpoint-manager] restore(${slotId}, ${typeof handleOrName === "string" ? handleOrName : handleOrName.name}) — no-op (feature flag off or server unsupported)`,
303
+ );
304
+ return false;
305
+ }
306
+ const handle = this.resolveHandle(handleOrName);
307
+ if (!handle) {
308
+ logger.debug(
309
+ `[checkpoint-manager] restore(${slotId}, ${String(handleOrName)}) — handle not found in registry (expired or never saved)`,
310
+ );
311
+ return false;
312
+ }
313
+ const manager = this.getRestManager();
314
+ await manager.restoreCheckpoint(handle);
315
+ return true;
316
+ }
317
+
318
+ /**
319
+ * Erase the named entry from the local registry AND ask the underlying
320
+ * REST manager to discard the checkpoint. No-op when the gate is off or
321
+ * the name is unknown. The upstream server has no per-file delete today
322
+ * (see comments in `voice/checkpoint-manager.ts`), so `discard` actually
323
+ * cancels in-flight decode on the slot — semantically "drop everything
324
+ * speculative".
325
+ */
326
+ async erase(
327
+ slotId: number,
328
+ handleOrName: CheckpointHandle | string,
329
+ ): Promise<void> {
330
+ if (!this.isEnabled()) {
331
+ if (typeof handleOrName === "string") {
332
+ this.named.delete(handleOrName);
333
+ }
334
+ logger.debug(
335
+ `[checkpoint-manager] erase(${slotId}, ${typeof handleOrName === "string" ? handleOrName : handleOrName.name}) — no-op (feature flag off or server unsupported)`,
336
+ );
337
+ return;
338
+ }
339
+ const handle = this.resolveHandle(handleOrName);
340
+ if (!handle) return;
341
+ if (typeof handleOrName === "string") this.named.delete(handleOrName);
342
+ const manager = this.getRestManager();
343
+ try {
344
+ await manager.discardCheckpoint(handle);
345
+ } catch (error) {
346
+ logger.warn(
347
+ { error, slotId, name: handle.name },
348
+ "[checkpoint-manager] discard failed",
349
+ );
350
+ }
351
+ }
352
+
353
+ /**
354
+ * Cancel any in-flight generation on `slotId`. When the gate is on this
355
+ * is `DELETE /slots/<id>`; when off it falls back to the SSE-disconnect
356
+ * callback the voice loop supplied (so the speculative draft is still
357
+ * aborted, just via the existing path).
358
+ */
359
+ async cancel(slotId: number, sseDisconnect: SseDisconnectFn): Promise<void> {
360
+ if (!this.isEnabled()) {
361
+ sseDisconnect(slotId);
362
+ return;
363
+ }
364
+ const manager = this.getRestManager();
365
+ try {
366
+ // Synthesize a handle scoped to the slot so the underlying manager's
367
+ // `discardCheckpoint` performs the cancel-slot REST call. We can't
368
+ // use `discardCheckpoint` directly with a registry entry here
369
+ // because the caller may not have one — `cancel` is the bare
370
+ // "abort whatever is running" primitive.
371
+ const fakeHandle = await manager.saveCheckpoint(
372
+ restSlotIdString(slotId),
373
+ cancelSentinelName(slotId, this.now()),
374
+ );
375
+ await manager.discardCheckpoint(fakeHandle);
376
+ } catch (error) {
377
+ logger.warn(
378
+ { error, slotId },
379
+ "[checkpoint-manager] cancel via REST failed; falling back to SSE-disconnect",
380
+ );
381
+ sseDisconnect(slotId);
382
+ }
383
+ }
384
+
385
+ /** Look up a previously-registered name. */
386
+ getNamedHandle(name: string): CheckpointHandle | null {
387
+ this.evictExpired();
388
+ return this.named.get(name)?.handle ?? null;
389
+ }
390
+
391
+ /** Number of live entries in the named registry. */
392
+ registrySize(): number {
393
+ this.evictExpired();
394
+ return this.named.size;
395
+ }
396
+
397
+ /** Clear the entire registry. Useful on conversation end / server restart. */
398
+ clearRegistry(): void {
399
+ this.named.clear();
400
+ }
401
+
402
+ // --- internals -------------------------------------------------------
403
+
404
+ private resolveHandle(
405
+ handleOrName: CheckpointHandle | string,
406
+ ): CheckpointHandle | null {
407
+ if (typeof handleOrName !== "string") return handleOrName;
408
+ return this.named.get(handleOrName)?.handle ?? null;
409
+ }
410
+
411
+ private evictExpired(): void {
412
+ if (this.namedHandleTtlMs <= 0) return;
413
+ const cutoff = this.now() - this.namedHandleTtlMs;
414
+ for (const [name, entry] of this.named) {
415
+ if (entry.registeredAtMs < cutoff) {
416
+ this.named.delete(name);
417
+ }
418
+ }
419
+ }
420
+
421
+ private getRestManager(): CheckpointManagerLike {
422
+ if (this.restManager !== null) return this.restManager;
423
+ if (this.baseUrl === null) {
424
+ throw new Error(
425
+ "[checkpoint-manager] baseUrl is null; call setBaseUrl() after starting the runtime",
426
+ );
427
+ }
428
+ this.restManager = new RestCheckpointManager({
429
+ baseUrl: this.baseUrl,
430
+ ...(this.fetchImpl ? { fetchImpl: this.fetchImpl } : {}),
431
+ ...(this.requestTimeoutMs !== undefined
432
+ ? { requestTimeoutMs: this.requestTimeoutMs }
433
+ : {}),
434
+ ...(this.resolveSlotId ? { resolveSlotId: this.resolveSlotId } : {}),
435
+ });
436
+ return this.restManager;
437
+ }
438
+
439
+ private getCapabilityClient(): CheckpointClient {
440
+ if (this.capabilityClient !== null) return this.capabilityClient;
441
+ if (this.baseUrl === null) {
442
+ throw new Error(
443
+ "[checkpoint-manager] baseUrl is null; call setBaseUrl() before detectCapability()",
444
+ );
445
+ }
446
+ this.capabilityClient = new CheckpointClient({
447
+ baseUrl: this.baseUrl,
448
+ ...(this.fetchImpl ? { fetchImpl: this.fetchImpl } : {}),
449
+ ...(this.requestTimeoutMs !== undefined
450
+ ? { requestTimeoutMs: this.requestTimeoutMs }
451
+ : {}),
452
+ });
453
+ return this.capabilityClient;
454
+ }
455
+ }
456
+
457
+ /**
458
+ * Wrap a numeric slot id as the string form `voice/checkpoint-manager.ts`
459
+ * expects. Voice callers carry a string-form id throughout (so per-
460
+ * conversation slots round-trip cleanly); the gated layer's public
461
+ * surface is integer-keyed because the REST endpoints are.
462
+ */
463
+ function restSlotIdString(slotId: number): string {
464
+ return `s${slotId}`;
465
+ }
466
+
467
+ /**
468
+ * Build a one-shot checkpoint name for `cancel(slotId)`. Each cancel call
469
+ * needs a unique name so the inner `MockCheckpointManager` / REST manager
470
+ * doesn't dedupe — appended with the monotonic clock value.
471
+ */
472
+ function cancelSentinelName(slotId: number, nowMs: number): string {
473
+ return `cancel-s${slotId}-${nowMs.toString(36)}`;
474
+ }
@@ -0,0 +1,102 @@
1
+ /**
2
+ * Soft cloud-fallback wrapper for local-inference TEXT_LARGE / TEXT_SMALL.
3
+ *
4
+ * Why this exists: on mobile (AOSP / iOS) the local llama backend has very
5
+ * different failure modes from a desktop process. The model GGUF may not be
6
+ * staged yet, the FFI dlopen may have failed, the device may be in low-power
7
+ * mode and refuse to prefill, or the user may have explicitly disabled the
8
+ * local engine. We do not want any of those states to surface as a
9
+ * "No handler found for delegate type: TEXT_LARGE" runtime error — when an
10
+ * Anthropic / OpenAI / Eliza Cloud handler is also registered, the runtime
11
+ * should transparently fall through to cloud.
12
+ *
13
+ * Design constraints (per AGENTS.md):
14
+ * - No silent try/catch. The wrapper distinguishes "ran successfully" from
15
+ * "ran and decided to fallback" via an EXPLICIT typed return:
16
+ * { kind: "ok"; text: string }
17
+ * | { kind: "fallback"; reason: FallbackReason }
18
+ * Callers branch on `kind`. The wrapper does NOT swallow errors —
19
+ * any unhandled throw bubbles up to the runtime.
20
+ * - Local errors are CLASSIFIED. Unrecoverable bugs (programming errors,
21
+ * out-of-memory, OS kill signals) propagate. Recoverable conditions
22
+ * (model not staged, abort, downstream provider transient) trigger
23
+ * fallback.
24
+ * - Cloud forwarding is registry-driven. We look up the next-highest
25
+ * priority handler from the runtime's model registry rather than
26
+ * hardcoding "anthropic" or "openai". That keeps the wrapper neutral
27
+ * to which cloud is paired.
28
+ */
29
+ import type { GenerateTextParams, IAgentRuntime, JsonValue, ModelTypeName } from "@elizaos/core";
30
+ export type FallbackReason =
31
+ /** Local backend reported it can't serve this request at all (no model, FFI dlopen failed, etc). */
32
+ "local-unavailable"
33
+ /** Local backend was busy, queued past a deadline, or refused (thermal, low-power). */
34
+ | "local-overloaded"
35
+ /** Local backend errored during prefill or decode. */
36
+ | "local-error"
37
+ /** Caller cancelled before local could finish; cloud may still serve. */
38
+ | "local-aborted-pre-completion"
39
+ /** Local handler isn't registered on this runtime build. */
40
+ | "local-not-registered";
41
+ export type LocalGenerateOutcome = {
42
+ kind: "ok";
43
+ text: string;
44
+ } | {
45
+ kind: "fallback";
46
+ reason: FallbackReason;
47
+ cause?: Error;
48
+ };
49
+ /**
50
+ * Classify a thrown error as a fallback-eligible failure or a hard bug that
51
+ * should propagate. The split is conservative: only well-known recoverable
52
+ * shapes flip to fallback; anything else bubbles up so the operator sees the
53
+ * real failure instead of a silent rotation to cloud.
54
+ */
55
+ export declare function classifyLocalError(err: unknown): {
56
+ fallback: boolean;
57
+ reason: FallbackReason;
58
+ };
59
+ /**
60
+ * Locate a cloud TEXT_* handler in the runtime's model registry that is NOT
61
+ * the supplied `localProvider`. The runtime stores handlers per-modelType
62
+ * sorted by priority; we walk the list and skip our own provider so we
63
+ * delegate to cloud instead of recursing into local.
64
+ */
65
+ export type RuntimeWithModelLookup = IAgentRuntime & {
66
+ models: Map<string, Array<{
67
+ provider: string;
68
+ priority: number;
69
+ handler: (runtime: IAgentRuntime, params: Record<string, JsonValue | object>) => Promise<JsonValue | object>;
70
+ }>>;
71
+ };
72
+ export interface CloudCandidate {
73
+ provider: string;
74
+ priority: number;
75
+ handler: (runtime: IAgentRuntime, params: Record<string, JsonValue | object>) => Promise<JsonValue | object>;
76
+ }
77
+ export declare function findCloudCandidate(runtime: IAgentRuntime, modelType: ModelTypeName | string, excludeProvider: string): CloudCandidate | null;
78
+ export interface CloudFallbackOptions {
79
+ /** Provider id of the local handler being wrapped (e.g. "eliza-aosp-llama"). */
80
+ localProvider: string;
81
+ /** Model type this wrapper services (TEXT_LARGE, TEXT_SMALL, etc). */
82
+ modelType: ModelTypeName | string;
83
+ /**
84
+ * The local handler we wrap. Returns `{ kind: "ok" }` on success;
85
+ * `{ kind: "fallback", reason }` to delegate to cloud.
86
+ */
87
+ localGenerate: (runtime: IAgentRuntime, params: GenerateTextParams) => Promise<LocalGenerateOutcome>;
88
+ /** Optional logger; defaults to `console`-style no-op so we stay framework-free. */
89
+ log?: (message: string, detail?: Record<string, unknown>) => void;
90
+ }
91
+ /**
92
+ * Build a registered-handler-shape function that:
93
+ * 1. Calls `localGenerate`.
94
+ * 2. If `localGenerate` returns `{ kind: "ok" }`, returns that text.
95
+ * 3. If it returns `{ kind: "fallback" }`, looks up the next-best cloud
96
+ * handler for the same modelType and forwards to it. If no cloud
97
+ * handler exists, throws a typed error with the fallback reason.
98
+ *
99
+ * The returned function is suitable for `runtime.registerModel`.
100
+ */
101
+ export declare function makeCloudFallbackHandler(opts: CloudFallbackOptions): (runtime: IAgentRuntime, params: Record<string, JsonValue | object>) => Promise<string>;
102
+ //# sourceMappingURL=cloud-fallback.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cloud-fallback.d.ts","sourceRoot":"","sources":["cloud-fallback.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,KAAK,EACX,kBAAkB,EAClB,aAAa,EACb,SAAS,EACT,aAAa,EACb,MAAM,eAAe,CAAC;AAEvB,MAAM,MAAM,cAAc;AACzB,oGAAoG;AAClG,mBAAmB;AACrB,uFAAuF;GACrF,kBAAkB;AACpB,sDAAsD;GACpD,aAAa;AACf,yEAAyE;GACvE,8BAA8B;AAChC,4DAA4D;GAC1D,sBAAsB,CAAC;AAE1B,MAAM,MAAM,oBAAoB,GAC7B;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC5B;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,MAAM,EAAE,cAAc,CAAC;IAAC,KAAK,CAAC,EAAE,KAAK,CAAA;CAAE,CAAC;AAE/D;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG;IACjD,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,cAAc,CAAC;CACvB,CAyCA;AAED;;;;;GAKG;AACH,MAAM,MAAM,sBAAsB,GAAG,aAAa,GAAG;IACpD,MAAM,EAAE,GAAG,CACV,MAAM,EACN,KAAK,CAAC;QACL,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,EAAE,CACR,OAAO,EAAE,aAAa,EACtB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,GAAG,MAAM,CAAC,KACtC,OAAO,CAAC,SAAS,GAAG,MAAM,CAAC,CAAC;KACjC,CAAC,CACF,CAAC;CACF,CAAC;AAEF,MAAM,WAAW,cAAc;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,CACR,OAAO,EAAE,aAAa,EACtB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,GAAG,MAAM,CAAC,KACtC,OAAO,CAAC,SAAS,GAAG,MAAM,CAAC,CAAC;CACjC;AAED,wBAAgB,kBAAkB,CACjC,OAAO,EAAE,aAAa,EACtB,SAAS,EAAE,aAAa,GAAG,MAAM,EACjC,eAAe,EAAE,MAAM,GACrB,cAAc,GAAG,IAAI,CAgBvB;AAED,MAAM,WAAW,oBAAoB;IACpC,gFAAgF;IAChF,aAAa,EAAE,MAAM,CAAC;IACtB,sEAAsE;IACtE,SAAS,EAAE,aAAa,GAAG,MAAM,CAAC;IAClC;;;OAGG;IACH,aAAa,EAAE,CACd,OAAO,EAAE,aAAa,EACtB,MAAM,EAAE,kBAAkB,KACtB,OAAO,CAAC,oBAAoB,CAAC,CAAC;IACnC,oFAAoF;IACpF,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;CAClE;AAED;;;;;;;;;GASG;AACH,wBAAgB,wBAAwB,CACvC,IAAI,EAAE,oBAAoB,GACxB,CACF,OAAO,EAAE,aAAa,EACtB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,GAAG,MAAM,CAAC,KACtC,OAAO,CAAC,MAAM,CAAC,CA0CnB"}