@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.
- package/LICENSE +21 -0
- package/README.md +83 -0
- package/package.json +81 -15
- package/src/actions/generate-media.d.ts +59 -0
- package/src/actions/generate-media.d.ts.map +1 -0
- package/src/actions/generate-media.ts +647 -0
- package/src/actions/identify-speaker.d.ts +23 -0
- package/src/actions/identify-speaker.d.ts.map +1 -0
- package/src/actions/identify-speaker.ts +171 -0
- package/src/adapters/capacitor-llama/__tests__/compat-behavior.test.ts +218 -0
- package/src/adapters/capacitor-llama/__tests__/index.test.ts +68 -0
- package/src/adapters/capacitor-llama/__tests__/structured-output.test.ts +215 -0
- package/src/adapters/capacitor-llama/__tests__/text-streaming.test.ts +174 -0
- package/src/adapters/capacitor-llama/environment.ts +71 -0
- package/src/adapters/capacitor-llama/index.browser.ts +83 -0
- package/src/adapters/capacitor-llama/index.ts +807 -0
- package/src/adapters/capacitor-llama/loader.ts +109 -0
- package/src/adapters/capacitor-llama/structured-output.ts +165 -0
- package/src/adapters/capacitor-llama/text-streaming.ts +227 -0
- package/src/adapters/capacitor-llama/types.ts +374 -0
- package/src/backends/apple-foundation.ts +127 -0
- package/src/index.d.ts +7 -0
- package/src/index.d.ts.map +1 -0
- package/src/index.ts +54 -0
- package/src/local-inference-routes.d.ts +38 -0
- package/src/local-inference-routes.d.ts.map +1 -0
- package/src/local-inference-routes.test.ts +344 -0
- package/src/local-inference-routes.ts +1543 -0
- package/src/provider.d.ts +21 -0
- package/src/provider.d.ts.map +1 -0
- package/src/provider.ts +1171 -0
- package/src/routes/compat-helpers.d.ts +18 -0
- package/src/routes/compat-helpers.d.ts.map +1 -0
- package/src/routes/compat-helpers.ts +274 -0
- package/src/routes/family-member-route.d.ts +62 -0
- package/src/routes/family-member-route.d.ts.map +1 -0
- package/src/routes/family-member-route.ts +353 -0
- package/src/routes/index.d.ts +19 -0
- package/src/routes/index.d.ts.map +1 -0
- package/src/routes/index.ts +60 -0
- package/src/routes/live-diarization-route.d.ts +26 -0
- package/src/routes/live-diarization-route.d.ts.map +1 -0
- package/src/routes/live-diarization-route.test.ts +213 -0
- package/src/routes/live-diarization-route.ts +122 -0
- package/src/routes/local-inference-asr-route.d.ts +4 -0
- package/src/routes/local-inference-asr-route.d.ts.map +1 -0
- package/src/routes/local-inference-asr-route.test.ts +190 -0
- package/src/routes/local-inference-asr-route.ts +213 -0
- package/src/routes/local-inference-compat-routes.d.ts +16 -0
- package/src/routes/local-inference-compat-routes.d.ts.map +1 -0
- package/src/routes/local-inference-compat-routes.test.ts +423 -0
- package/src/routes/local-inference-compat-routes.ts +782 -0
- package/src/routes/local-inference-tts-route.d.ts +7 -0
- package/src/routes/local-inference-tts-route.d.ts.map +1 -0
- package/src/routes/local-inference-tts-route.test.ts +179 -0
- package/src/routes/local-inference-tts-route.ts +230 -0
- package/src/routes/voice-first-run-routes.d.ts +62 -0
- package/src/routes/voice-first-run-routes.d.ts.map +1 -0
- package/src/routes/voice-first-run-routes.ts +524 -0
- package/src/routes/voice-models-routes.d.ts +62 -0
- package/src/routes/voice-models-routes.d.ts.map +1 -0
- package/src/routes/voice-models-routes.ts +554 -0
- package/src/routes/voice-profile-plugin-routes.d.ts +19 -0
- package/src/routes/voice-profile-plugin-routes.d.ts.map +1 -0
- package/src/routes/voice-profile-plugin-routes.ts +138 -0
- package/src/routes/voice-profiles-management-routes.d.ts +52 -0
- package/src/routes/voice-profiles-management-routes.d.ts.map +1 -0
- package/src/routes/voice-profiles-management-routes.ts +476 -0
- package/src/routes/voice-speaker-profile-routes.d.ts +57 -0
- package/src/routes/voice-speaker-profile-routes.d.ts.map +1 -0
- package/src/routes/voice-speaker-profile-routes.ts +199 -0
- package/src/runtime/aosp-llama-loader-selection.test.ts +80 -0
- package/src/runtime/capacitor-llama.d.ts +25 -0
- package/src/runtime/embedding-manager-support.d.ts +77 -0
- package/src/runtime/embedding-manager-support.d.ts.map +1 -0
- package/src/runtime/embedding-manager-support.ts +497 -0
- package/src/runtime/embedding-presets.d.ts +16 -0
- package/src/runtime/embedding-presets.d.ts.map +1 -0
- package/src/runtime/embedding-presets.ts +81 -0
- package/src/runtime/embedding-warmup-policy.d.ts +14 -0
- package/src/runtime/embedding-warmup-policy.d.ts.map +1 -0
- package/src/runtime/embedding-warmup-policy.test.ts +53 -0
- package/src/runtime/embedding-warmup-policy.ts +48 -0
- package/src/runtime/ensure-local-inference-handler.d.ts +53 -0
- package/src/runtime/ensure-local-inference-handler.d.ts.map +1 -0
- package/src/runtime/ensure-local-inference-handler.test.ts +528 -0
- package/src/runtime/ensure-local-inference-handler.ts +1398 -0
- package/src/runtime/index.d.ts +14 -0
- package/src/runtime/index.d.ts.map +1 -0
- package/src/runtime/index.ts +27 -0
- package/src/runtime/mobile-local-inference-gate.d.ts +31 -0
- package/src/runtime/mobile-local-inference-gate.d.ts.map +1 -0
- package/src/runtime/mobile-local-inference-gate.test.ts +69 -0
- package/src/runtime/mobile-local-inference-gate.ts +44 -0
- package/src/runtime/voice-entity-binding.d.ts +103 -0
- package/src/runtime/voice-entity-binding.d.ts.map +1 -0
- package/src/runtime/voice-entity-binding.transcript.test.ts +69 -0
- package/src/runtime/voice-entity-binding.ts +328 -0
- package/src/services/README.md +71 -0
- package/src/services/__tests__/backend-selector.test.ts +101 -0
- package/src/services/__tests__/checkpoint-manager.test.ts +376 -0
- package/src/services/__tests__/gpu-autotune.test.ts +400 -0
- package/src/services/__tests__/llm-streaming-binding.test.ts +85 -0
- package/src/services/__tests__/planner-grammar.test.ts +372 -0
- package/src/services/__tests__/runtime-target.test.ts +176 -0
- package/src/services/active-model-switch-rollback.test.ts +183 -0
- package/src/services/active-model.d.ts +282 -0
- package/src/services/active-model.d.ts.map +1 -0
- package/src/services/active-model.ts +1213 -0
- package/src/services/asr/errors.d.ts +21 -0
- package/src/services/asr/errors.d.ts.map +1 -0
- package/src/services/asr/errors.ts +50 -0
- package/src/services/asr/hash.d.ts +28 -0
- package/src/services/asr/hash.d.ts.map +1 -0
- package/src/services/asr/hash.ts +49 -0
- package/src/services/asr/index.d.ts +76 -0
- package/src/services/asr/index.d.ts.map +1 -0
- package/src/services/asr/index.ts +178 -0
- package/src/services/asr/types.d.ts +91 -0
- package/src/services/asr/types.d.ts.map +1 -0
- package/src/services/asr/types.ts +95 -0
- package/src/services/assignments.d.ts +71 -0
- package/src/services/assignments.d.ts.map +1 -0
- package/src/services/assignments.test.ts +80 -0
- package/src/services/assignments.ts +230 -0
- package/src/services/backend-selector.ts +95 -0
- package/src/services/backend.d.ts +346 -0
- package/src/services/backend.d.ts.map +1 -0
- package/src/services/backend.ts +612 -0
- package/src/services/bundled-models.d.ts +34 -0
- package/src/services/bundled-models.d.ts.map +1 -0
- package/src/services/bundled-models.ts +129 -0
- package/src/services/cache-bridge.d.ts +206 -0
- package/src/services/cache-bridge.d.ts.map +1 -0
- package/src/services/cache-bridge.test.ts +516 -0
- package/src/services/cache-bridge.ts +423 -0
- package/src/services/catalog.d.ts +10 -0
- package/src/services/catalog.d.ts.map +1 -0
- package/src/services/catalog.test.ts +240 -0
- package/src/services/catalog.ts +27 -0
- package/src/services/checkpoint-client.d.ts +109 -0
- package/src/services/checkpoint-client.d.ts.map +1 -0
- package/src/services/checkpoint-client.ts +258 -0
- package/src/services/checkpoint-manager.ts +474 -0
- package/src/services/cloud-fallback.d.ts +102 -0
- package/src/services/cloud-fallback.d.ts.map +1 -0
- package/src/services/cloud-fallback.ts +230 -0
- package/src/services/conversation-registry.d.ts +142 -0
- package/src/services/conversation-registry.d.ts.map +1 -0
- package/src/services/conversation-registry.test.ts +235 -0
- package/src/services/conversation-registry.ts +264 -0
- package/src/services/desktop-fused-ffi-backend-runtime.d.ts +92 -0
- package/src/services/desktop-fused-ffi-backend-runtime.d.ts.map +1 -0
- package/src/services/desktop-fused-ffi-backend-runtime.ts +333 -0
- package/src/services/device-bridge.d.ts +188 -0
- package/src/services/device-bridge.d.ts.map +1 -0
- package/src/services/device-bridge.ts +1237 -0
- package/src/services/device-resource-metrics.d.ts +149 -0
- package/src/services/device-resource-metrics.d.ts.map +1 -0
- package/src/services/device-resource-metrics.test.ts +98 -0
- package/src/services/device-resource-metrics.ts +346 -0
- package/src/services/device-tier.d.ts +115 -0
- package/src/services/device-tier.d.ts.map +1 -0
- package/src/services/device-tier.test.ts +371 -0
- package/src/services/device-tier.ts +410 -0
- package/src/services/downloader.d.ts +82 -0
- package/src/services/downloader.d.ts.map +1 -0
- package/src/services/downloader.test.ts +724 -0
- package/src/services/downloader.ts +899 -0
- package/src/services/engine-direct-bundle.test.ts +58 -0
- package/src/services/engine-streaming.test.ts +80 -0
- package/src/services/engine.d.ts +534 -0
- package/src/services/engine.d.ts.map +1 -0
- package/src/services/engine.ts +1891 -0
- package/src/services/ensure-local-artifacts.integration.test.ts +273 -0
- package/src/services/ensure-local-artifacts.test.ts +368 -0
- package/src/services/ensure-local-artifacts.ts +351 -0
- package/src/services/external-scanner.d.ts +17 -0
- package/src/services/external-scanner.d.ts.map +1 -0
- package/src/services/external-scanner.ts +312 -0
- package/src/services/ffi-llm-mock.ts +354 -0
- package/src/services/ffi-llm-streaming-abi.ts +442 -0
- package/src/services/ffi-streaming-backend.d.ts +180 -0
- package/src/services/ffi-streaming-backend.d.ts.map +1 -0
- package/src/services/ffi-streaming-backend.ts +382 -0
- package/src/services/ffi-streaming-runner.d.ts +122 -0
- package/src/services/ffi-streaming-runner.d.ts.map +1 -0
- package/src/services/ffi-streaming-runner.test.ts +60 -0
- package/src/services/ffi-streaming-runner.ts +354 -0
- package/src/services/ffi-unload-ordering.test.ts +162 -0
- package/src/services/gpu-autotune.ts +534 -0
- package/src/services/gpu-detect.ts +139 -0
- package/src/services/handler-registry.d.ts +72 -0
- package/src/services/handler-registry.d.ts.map +1 -0
- package/src/services/handler-registry.ts +240 -0
- package/src/services/hardware.d.ts +63 -0
- package/src/services/hardware.d.ts.map +1 -0
- package/src/services/hardware.test.ts +183 -0
- package/src/services/hardware.ts +404 -0
- package/src/services/hf-search.d.ts +26 -0
- package/src/services/hf-search.d.ts.map +1 -0
- package/src/services/hf-search.test.ts +69 -0
- package/src/services/hf-search.ts +420 -0
- package/src/services/image-description-runtime.d.ts +14 -0
- package/src/services/image-description-runtime.d.ts.map +1 -0
- package/src/services/image-description-runtime.test.ts +61 -0
- package/src/services/image-description-runtime.ts +118 -0
- package/src/services/imagegen/aosp-unavailable.d.ts +134 -0
- package/src/services/imagegen/aosp-unavailable.d.ts.map +1 -0
- package/src/services/imagegen/aosp-unavailable.ts +229 -0
- package/src/services/imagegen/backend-selector.d.ts +118 -0
- package/src/services/imagegen/backend-selector.d.ts.map +1 -0
- package/src/services/imagegen/backend-selector.ts +281 -0
- package/src/services/imagegen/coreml-unavailable.d.ts +105 -0
- package/src/services/imagegen/coreml-unavailable.d.ts.map +1 -0
- package/src/services/imagegen/coreml-unavailable.ts +237 -0
- package/src/services/imagegen/errors.d.ts +16 -0
- package/src/services/imagegen/errors.d.ts.map +1 -0
- package/src/services/imagegen/errors.ts +40 -0
- package/src/services/imagegen/index.d.ts +58 -0
- package/src/services/imagegen/index.d.ts.map +1 -0
- package/src/services/imagegen/index.ts +144 -0
- package/src/services/imagegen/mflux.d.ts +74 -0
- package/src/services/imagegen/mflux.d.ts.map +1 -0
- package/src/services/imagegen/mflux.ts +313 -0
- package/src/services/imagegen/sd-cpp.d.ts +180 -0
- package/src/services/imagegen/sd-cpp.d.ts.map +1 -0
- package/src/services/imagegen/sd-cpp.ts +718 -0
- package/src/services/imagegen/tensorrt-unavailable.d.ts +83 -0
- package/src/services/imagegen/tensorrt-unavailable.d.ts.map +1 -0
- package/src/services/imagegen/tensorrt-unavailable.ts +295 -0
- package/src/services/imagegen/types.d.ts +181 -0
- package/src/services/imagegen/types.d.ts.map +1 -0
- package/src/services/imagegen/types.ts +193 -0
- package/src/services/index.d.ts +30 -0
- package/src/services/index.d.ts.map +1 -0
- package/src/services/index.ts +225 -0
- package/src/services/inference-capabilities.d.ts +132 -0
- package/src/services/inference-capabilities.d.ts.map +1 -0
- package/src/services/inference-capabilities.test.ts +75 -0
- package/src/services/inference-capabilities.ts +204 -0
- package/src/services/inference-telemetry.d.ts +59 -0
- package/src/services/inference-telemetry.d.ts.map +1 -0
- package/src/services/inference-telemetry.ts +143 -0
- package/src/services/ios-llama-streaming.ts +248 -0
- package/src/services/kv-spill.d.ts +189 -0
- package/src/services/kv-spill.d.ts.map +1 -0
- package/src/services/kv-spill.test.ts +222 -0
- package/src/services/kv-spill.ts +356 -0
- package/src/services/latency-trace.d.ts +346 -0
- package/src/services/latency-trace.d.ts.map +1 -0
- package/src/services/latency-trace.test.ts +266 -0
- package/src/services/latency-trace.ts +844 -0
- package/src/services/llama-server-metrics.ts +304 -0
- package/src/services/llm-streaming-binding.d.ts +96 -0
- package/src/services/llm-streaming-binding.d.ts.map +1 -0
- package/src/services/llm-streaming-binding.ts +136 -0
- package/src/services/load-args.d.ts +82 -0
- package/src/services/load-args.d.ts.map +1 -0
- package/src/services/load-args.ts +81 -0
- package/src/services/manifest/eliza-1.manifest.v1.json +708 -0
- package/src/services/manifest/index.d.ts +4 -0
- package/src/services/manifest/index.d.ts.map +1 -0
- package/src/services/manifest/index.ts +66 -0
- package/src/services/manifest/manifest.test.ts +693 -0
- package/src/services/manifest/schema.d.ts +715 -0
- package/src/services/manifest/schema.d.ts.map +1 -0
- package/src/services/manifest/schema.ts +655 -0
- package/src/services/manifest/types.d.ts +30 -0
- package/src/services/manifest/types.d.ts.map +1 -0
- package/src/services/manifest/types.ts +55 -0
- package/src/services/manifest/validator.d.ts +66 -0
- package/src/services/manifest/validator.d.ts.map +1 -0
- package/src/services/manifest/validator.ts +569 -0
- package/src/services/memory-arbiter.d.ts +343 -0
- package/src/services/memory-arbiter.d.ts.map +1 -0
- package/src/services/memory-arbiter.test.ts +419 -0
- package/src/services/memory-arbiter.ts +1000 -0
- package/src/services/memory-monitor.d.ts +119 -0
- package/src/services/memory-monitor.d.ts.map +1 -0
- package/src/services/memory-monitor.test.ts +208 -0
- package/src/services/memory-monitor.ts +296 -0
- package/src/services/memory-pressure.d.ts +127 -0
- package/src/services/memory-pressure.d.ts.map +1 -0
- package/src/services/memory-pressure.ts +413 -0
- package/src/services/mtp-doctor.d.ts +13 -0
- package/src/services/mtp-doctor.d.ts.map +1 -0
- package/src/services/mtp-doctor.ts +78 -0
- package/src/services/network-policy.d.ts +127 -0
- package/src/services/network-policy.d.ts.map +1 -0
- package/src/services/network-policy.ts +346 -0
- package/src/services/paths.d.ts +6 -0
- package/src/services/paths.d.ts.map +1 -0
- package/src/services/paths.ts +25 -0
- package/src/services/planner-skeleton.d.ts +124 -0
- package/src/services/planner-skeleton.d.ts.map +1 -0
- package/src/services/planner-skeleton.ts +175 -0
- package/src/services/providers.d.ts +38 -0
- package/src/services/providers.d.ts.map +1 -0
- package/src/services/providers.ts +507 -0
- package/src/services/ram-budget-cache.test.ts +163 -0
- package/src/services/ram-budget.d.ts +110 -0
- package/src/services/ram-budget.d.ts.map +1 -0
- package/src/services/ram-budget.ts +0 -0
- package/src/services/readiness.d.ts +9 -0
- package/src/services/readiness.d.ts.map +1 -0
- package/src/services/readiness.test.ts +87 -0
- package/src/services/readiness.ts +238 -0
- package/src/services/recommendation.d.ts +111 -0
- package/src/services/recommendation.d.ts.map +1 -0
- package/src/services/recommendation.ts +672 -0
- package/src/services/registry.d.ts +35 -0
- package/src/services/registry.d.ts.map +1 -0
- package/src/services/registry.ts +151 -0
- package/src/services/router-handler.d.ts +92 -0
- package/src/services/router-handler.d.ts.map +1 -0
- package/src/services/router-handler.test.ts +45 -0
- package/src/services/router-handler.ts +376 -0
- package/src/services/routing-policy.d.ts +55 -0
- package/src/services/routing-policy.d.ts.map +1 -0
- package/src/services/routing-policy.ts +228 -0
- package/src/services/routing-preferences.d.ts +8 -0
- package/src/services/routing-preferences.d.ts.map +1 -0
- package/src/services/routing-preferences.ts +15 -0
- package/src/services/runtime-target.d.ts +98 -0
- package/src/services/runtime-target.d.ts.map +1 -0
- package/src/services/runtime-target.ts +154 -0
- package/src/services/service.d.ts +128 -0
- package/src/services/service.d.ts.map +1 -0
- package/src/services/service.test.ts +223 -0
- package/src/services/service.ts +735 -0
- package/src/services/session-pool.d.ts +72 -0
- package/src/services/session-pool.d.ts.map +1 -0
- package/src/services/session-pool.ts +153 -0
- package/src/services/structured-output/deterministic-repair.d.ts +23 -0
- package/src/services/structured-output/deterministic-repair.d.ts.map +1 -0
- package/src/services/structured-output/deterministic-repair.test.ts +169 -0
- package/src/services/structured-output/deterministic-repair.ts +443 -0
- package/src/services/structured-output/index.ts +4 -0
- package/src/services/structured-output.d.ts +311 -0
- package/src/services/structured-output.d.ts.map +1 -0
- package/src/services/structured-output.test.ts +483 -0
- package/src/services/structured-output.ts +712 -0
- package/src/services/transcription-priority.test.ts +211 -0
- package/src/services/tts/errors.ts +46 -0
- package/src/services/tts/index.ts +214 -0
- package/src/services/tts/tts-audio-cache.ts +235 -0
- package/src/services/tts/types.ts +157 -0
- package/src/services/types.d.ts +19 -0
- package/src/services/types.d.ts.map +1 -0
- package/src/services/types.ts +55 -0
- package/src/services/verify-on-device.d.ts +34 -0
- package/src/services/verify-on-device.d.ts.map +1 -0
- package/src/services/verify-on-device.test.ts +87 -0
- package/src/services/verify-on-device.ts +127 -0
- package/src/services/verify.d.ts +8 -0
- package/src/services/verify.d.ts.map +1 -0
- package/src/services/verify.ts +13 -0
- package/src/services/vision/aosp-unavailable.d.ts +115 -0
- package/src/services/vision/aosp-unavailable.d.ts.map +1 -0
- package/src/services/vision/aosp-unavailable.ts +163 -0
- package/src/services/vision/capacitor-llama.d.ts +99 -0
- package/src/services/vision/capacitor-llama.d.ts.map +1 -0
- package/src/services/vision/capacitor-llama.ts +255 -0
- package/src/services/vision/cloud-fallback.d.ts +47 -0
- package/src/services/vision/cloud-fallback.d.ts.map +1 -0
- package/src/services/vision/cloud-fallback.test.ts +243 -0
- package/src/services/vision/cloud-fallback.ts +268 -0
- package/src/services/vision/fallback-chain.test.ts +86 -0
- package/src/services/vision/hash.d.ts +71 -0
- package/src/services/vision/hash.d.ts.map +1 -0
- package/src/services/vision/hash.ts +157 -0
- package/src/services/vision/index.d.ts +95 -0
- package/src/services/vision/index.d.ts.map +1 -0
- package/src/services/vision/index.ts +251 -0
- package/src/services/vision/llama-server.d.ts +73 -0
- package/src/services/vision/llama-server.d.ts.map +1 -0
- package/src/services/vision/llama-server.ts +177 -0
- package/src/services/vision/types.d.ts +153 -0
- package/src/services/vision/types.d.ts.map +1 -0
- package/src/services/vision/types.ts +154 -0
- package/src/services/vision/vast-fallback.d.ts +18 -0
- package/src/services/vision/vast-fallback.d.ts.map +1 -0
- package/src/services/vision/vast-fallback.ts +127 -0
- package/src/services/vision-embedding-cache.d.ts +98 -0
- package/src/services/vision-embedding-cache.d.ts.map +1 -0
- package/src/services/vision-embedding-cache.ts +189 -0
- package/src/services/voice/VOICE_WORKBENCH.md +88 -0
- package/src/services/voice/__test-helpers__/fake-ffi.ts +92 -0
- package/src/services/voice/__test-helpers__/synthetic-speech.ts +124 -0
- package/src/services/voice/__tests__/checkpoint-manager.test.ts +241 -0
- package/src/services/voice/__tests__/checkpoint-policy.test.ts +270 -0
- package/src/services/voice/__tests__/eager-context-builder.test.ts +257 -0
- package/src/services/voice/__tests__/eliza1-eot-scorer.test.ts +288 -0
- package/src/services/voice/__tests__/eot-classifier.test.ts +431 -0
- package/src/services/voice/__tests__/optimistic-rollback.test.ts +312 -0
- package/src/services/voice/__tests__/prefill-client.test.ts +266 -0
- package/src/services/voice/__tests__/prefix-preserving-queue.test.ts +208 -0
- package/src/services/voice/__tests__/streaming-asr.test.ts +450 -0
- package/src/services/voice/__tests__/streaming-transcriber.test.ts +339 -0
- package/src/services/voice/__tests__/turn-detector-resolver.test.ts +197 -0
- package/src/services/voice/__tests__/voice-state-machine-prefill.test.ts +275 -0
- package/src/services/voice/__tests__/voice-state-machine.test.ts +354 -0
- package/src/services/voice/audio-frame-consumer.d.ts +212 -0
- package/src/services/voice/audio-frame-consumer.d.ts.map +1 -0
- package/src/services/voice/audio-frame-consumer.test.ts +343 -0
- package/src/services/voice/audio-frame-consumer.ts +491 -0
- package/src/services/voice/barge-in.d.ts +112 -0
- package/src/services/voice/barge-in.d.ts.map +1 -0
- package/src/services/voice/barge-in.test.ts +244 -0
- package/src/services/voice/barge-in.ts +336 -0
- package/src/services/voice/cancellation-coordinator.d.ts +127 -0
- package/src/services/voice/cancellation-coordinator.d.ts.map +1 -0
- package/src/services/voice/cancellation-coordinator.test.ts +196 -0
- package/src/services/voice/cancellation-coordinator.ts +269 -0
- package/src/services/voice/checkpoint-manager.d.ts +199 -0
- package/src/services/voice/checkpoint-manager.d.ts.map +1 -0
- package/src/services/voice/checkpoint-manager.ts +401 -0
- package/src/services/voice/checkpoint-policy.ts +336 -0
- package/src/services/voice/composite-eot-classifier.test.ts +59 -0
- package/src/services/voice/e2e-harness.test.ts +182 -0
- package/src/services/voice/e2e-harness.ts +743 -0
- package/src/services/voice/eager-context-builder.d.ts +170 -0
- package/src/services/voice/eager-context-builder.d.ts.map +1 -0
- package/src/services/voice/eager-context-builder.ts +262 -0
- package/src/services/voice/eliza1-eot-scorer.d.ts +124 -0
- package/src/services/voice/eliza1-eot-scorer.d.ts.map +1 -0
- package/src/services/voice/eliza1-eot-scorer.ts +242 -0
- package/src/services/voice/embedding-server.ts +200 -0
- package/src/services/voice/embedding.d.ts +133 -0
- package/src/services/voice/embedding.d.ts.map +1 -0
- package/src/services/voice/embedding.test.ts +148 -0
- package/src/services/voice/embedding.ts +244 -0
- package/src/services/voice/emotion-attribution.d.ts +68 -0
- package/src/services/voice/emotion-attribution.d.ts.map +1 -0
- package/src/services/voice/emotion-attribution.test.ts +129 -0
- package/src/services/voice/emotion-attribution.ts +361 -0
- package/src/services/voice/engine-bridge-cancellation.test.ts +422 -0
- package/src/services/voice/engine-bridge.d.ts +746 -0
- package/src/services/voice/engine-bridge.d.ts.map +1 -0
- package/src/services/voice/engine-bridge.test.ts +384 -0
- package/src/services/voice/engine-bridge.ts +2226 -0
- package/src/services/voice/eot-classifier-ggml.d.ts +179 -0
- package/src/services/voice/eot-classifier-ggml.d.ts.map +1 -0
- package/src/services/voice/eot-classifier-ggml.ts +566 -0
- package/src/services/voice/eot-classifier.d.ts +214 -0
- package/src/services/voice/eot-classifier.d.ts.map +1 -0
- package/src/services/voice/eot-classifier.ts +533 -0
- package/src/services/voice/errors.d.ts +20 -0
- package/src/services/voice/errors.d.ts.map +1 -0
- package/src/services/voice/errors.ts +32 -0
- package/src/services/voice/expressive-tags.d.ts +158 -0
- package/src/services/voice/expressive-tags.d.ts.map +1 -0
- package/src/services/voice/expressive-tags.ts +405 -0
- package/src/services/voice/ffi-bindings.d.ts +636 -0
- package/src/services/voice/ffi-bindings.d.ts.map +1 -0
- package/src/services/voice/ffi-bindings.test.ts +671 -0
- package/src/services/voice/ffi-bindings.ts +3050 -0
- package/src/services/voice/first-line-cache.d.ts +181 -0
- package/src/services/voice/first-line-cache.d.ts.map +1 -0
- package/src/services/voice/first-line-cache.ts +725 -0
- package/src/services/voice/fused-eot-scorer.d.ts +51 -0
- package/src/services/voice/fused-eot-scorer.d.ts.map +1 -0
- package/src/services/voice/fused-eot-scorer.ts +135 -0
- package/src/services/voice/index.d.ts +91 -0
- package/src/services/voice/index.d.ts.map +1 -0
- package/src/services/voice/index.ts +481 -0
- package/src/services/voice/kokoro/__tests__/kokoro-backend.test.ts +151 -0
- package/src/services/voice/kokoro/__tests__/kokoro-engine-bridge.real.test.ts +151 -0
- package/src/services/voice/kokoro/__tests__/kokoro-engine-bridge.test.ts +60 -0
- package/src/services/voice/kokoro/__tests__/kokoro-engine-discovery.test.ts +277 -0
- package/src/services/voice/kokoro/__tests__/kokoro-ffi-runtime.test.ts +235 -0
- package/src/services/voice/kokoro/__tests__/kokoro-runtime.test.ts +95 -0
- package/src/services/voice/kokoro/__tests__/phonemizer.test.ts +53 -0
- package/src/services/voice/kokoro/__tests__/runtime-selection.test.ts +231 -0
- package/src/services/voice/kokoro/__tests__/voices.test.ts +57 -0
- package/src/services/voice/kokoro/index.ts +79 -0
- package/src/services/voice/kokoro/kokoro-backend.d.ts +72 -0
- package/src/services/voice/kokoro/kokoro-backend.d.ts.map +1 -0
- package/src/services/voice/kokoro/kokoro-backend.ts +207 -0
- package/src/services/voice/kokoro/kokoro-engine-discovery.d.ts +58 -0
- package/src/services/voice/kokoro/kokoro-engine-discovery.d.ts.map +1 -0
- package/src/services/voice/kokoro/kokoro-engine-discovery.ts +177 -0
- package/src/services/voice/kokoro/kokoro-ffi-runtime.d.ts +75 -0
- package/src/services/voice/kokoro/kokoro-ffi-runtime.d.ts.map +1 -0
- package/src/services/voice/kokoro/kokoro-ffi-runtime.ts +233 -0
- package/src/services/voice/kokoro/kokoro-runtime.d.ts +100 -0
- package/src/services/voice/kokoro/kokoro-runtime.d.ts.map +1 -0
- package/src/services/voice/kokoro/kokoro-runtime.ts +170 -0
- package/src/services/voice/kokoro/phoneme-stream.ts +123 -0
- package/src/services/voice/kokoro/phonemizer.d.ts +50 -0
- package/src/services/voice/kokoro/phonemizer.d.ts.map +1 -0
- package/src/services/voice/kokoro/phonemizer.ts +344 -0
- package/src/services/voice/kokoro/pick-runtime.d.ts +61 -0
- package/src/services/voice/kokoro/pick-runtime.d.ts.map +1 -0
- package/src/services/voice/kokoro/pick-runtime.test.ts +91 -0
- package/src/services/voice/kokoro/pick-runtime.ts +130 -0
- package/src/services/voice/kokoro/runtime-selection.d.ts +92 -0
- package/src/services/voice/kokoro/runtime-selection.d.ts.map +1 -0
- package/src/services/voice/kokoro/runtime-selection.ts +237 -0
- package/src/services/voice/kokoro/types.d.ts +82 -0
- package/src/services/voice/kokoro/types.d.ts.map +1 -0
- package/src/services/voice/kokoro/types.ts +95 -0
- package/src/services/voice/kokoro/voice-presets.d.ts +23 -0
- package/src/services/voice/kokoro/voice-presets.d.ts.map +1 -0
- package/src/services/voice/kokoro/voice-presets.ts +129 -0
- package/src/services/voice/kokoro/voices.d.ts +30 -0
- package/src/services/voice/kokoro/voices.d.ts.map +1 -0
- package/src/services/voice/kokoro/voices.ts +64 -0
- package/src/services/voice/lifecycle.d.ts +135 -0
- package/src/services/voice/lifecycle.d.ts.map +1 -0
- package/src/services/voice/lifecycle.test.ts +315 -0
- package/src/services/voice/lifecycle.ts +301 -0
- package/src/services/voice/live-diarization-session.d.ts +96 -0
- package/src/services/voice/live-diarization-session.d.ts.map +1 -0
- package/src/services/voice/live-diarization-session.ts +289 -0
- package/src/services/voice/mic-source.d.ts +136 -0
- package/src/services/voice/mic-source.d.ts.map +1 -0
- package/src/services/voice/mic-source.test.ts +210 -0
- package/src/services/voice/mic-source.ts +503 -0
- package/src/services/voice/optimistic-policy.d.ts +109 -0
- package/src/services/voice/optimistic-policy.d.ts.map +1 -0
- package/src/services/voice/optimistic-policy.test.ts +101 -0
- package/src/services/voice/optimistic-policy.ts +192 -0
- package/src/services/voice/optimistic-rollback.ts +343 -0
- package/src/services/voice/partial-stabilizer.d.ts +73 -0
- package/src/services/voice/partial-stabilizer.d.ts.map +1 -0
- package/src/services/voice/partial-stabilizer.test.ts +68 -0
- package/src/services/voice/partial-stabilizer.ts +140 -0
- package/src/services/voice/phoneme-tokenizer.d.ts +49 -0
- package/src/services/voice/phoneme-tokenizer.d.ts.map +1 -0
- package/src/services/voice/phoneme-tokenizer.ts +158 -0
- package/src/services/voice/phrase-cache.d.ts +76 -0
- package/src/services/voice/phrase-cache.d.ts.map +1 -0
- package/src/services/voice/phrase-cache.test.ts +242 -0
- package/src/services/voice/phrase-cache.ts +186 -0
- package/src/services/voice/phrase-chunker.d.ts +62 -0
- package/src/services/voice/phrase-chunker.d.ts.map +1 -0
- package/src/services/voice/phrase-chunker.test.ts +239 -0
- package/src/services/voice/phrase-chunker.ts +281 -0
- package/src/services/voice/pipeline-impls.d.ts +151 -0
- package/src/services/voice/pipeline-impls.d.ts.map +1 -0
- package/src/services/voice/pipeline-impls.l6.test.ts +110 -0
- package/src/services/voice/pipeline-impls.test.ts +292 -0
- package/src/services/voice/pipeline-impls.ts +315 -0
- package/src/services/voice/pipeline.d.ts +216 -0
- package/src/services/voice/pipeline.d.ts.map +1 -0
- package/src/services/voice/pipeline.ts +505 -0
- package/src/services/voice/prefill-client.d.ts +123 -0
- package/src/services/voice/prefill-client.d.ts.map +1 -0
- package/src/services/voice/prefill-client.ts +316 -0
- package/src/services/voice/prefix-preserving-queue.d.ts +113 -0
- package/src/services/voice/prefix-preserving-queue.d.ts.map +1 -0
- package/src/services/voice/prefix-preserving-queue.ts +162 -0
- package/src/services/voice/profile-store.d.ts +248 -0
- package/src/services/voice/profile-store.d.ts.map +1 -0
- package/src/services/voice/profile-store.ts +887 -0
- package/src/services/voice/ring-buffer.d.ts +40 -0
- package/src/services/voice/ring-buffer.d.ts.map +1 -0
- package/src/services/voice/ring-buffer.ts +105 -0
- package/src/services/voice/rollback-queue.d.ts +24 -0
- package/src/services/voice/rollback-queue.d.ts.map +1 -0
- package/src/services/voice/rollback-queue.ts +74 -0
- package/src/services/voice/samantha-preset-placeholder.d.ts +67 -0
- package/src/services/voice/samantha-preset-placeholder.d.ts.map +1 -0
- package/src/services/voice/samantha-preset-placeholder.test.ts +97 -0
- package/src/services/voice/samantha-preset-placeholder.ts +148 -0
- package/src/services/voice/samantha-preset-regenerator.d.ts +87 -0
- package/src/services/voice/samantha-preset-regenerator.d.ts.map +1 -0
- package/src/services/voice/samantha-preset-regenerator.ts +393 -0
- package/src/services/voice/scheduler.d.ts +146 -0
- package/src/services/voice/scheduler.d.ts.map +1 -0
- package/src/services/voice/scheduler.t2.test.ts +141 -0
- package/src/services/voice/scheduler.ts +927 -0
- package/src/services/voice/shared-resources.d.ts +190 -0
- package/src/services/voice/shared-resources.d.ts.map +1 -0
- package/src/services/voice/shared-resources.ts +320 -0
- package/src/services/voice/speaker/attribution-pipeline.d.ts +74 -0
- package/src/services/voice/speaker/attribution-pipeline.d.ts.map +1 -0
- package/src/services/voice/speaker/attribution-pipeline.ts +386 -0
- package/src/services/voice/speaker/diarizer-fused.d.ts +59 -0
- package/src/services/voice/speaker/diarizer-fused.d.ts.map +1 -0
- package/src/services/voice/speaker/diarizer-fused.real.test.ts +100 -0
- package/src/services/voice/speaker/diarizer-fused.ts +154 -0
- package/src/services/voice/speaker/diarizer.d.ts +75 -0
- package/src/services/voice/speaker/diarizer.d.ts.map +1 -0
- package/src/services/voice/speaker/diarizer.ts +218 -0
- package/src/services/voice/speaker/encoder-fused.d.ts +60 -0
- package/src/services/voice/speaker/encoder-fused.d.ts.map +1 -0
- package/src/services/voice/speaker/encoder-fused.real.test.ts +113 -0
- package/src/services/voice/speaker/encoder-fused.ts +138 -0
- package/src/services/voice/speaker/encoder-ggml.d.ts +33 -0
- package/src/services/voice/speaker/encoder-ggml.d.ts.map +1 -0
- package/src/services/voice/speaker/encoder-ggml.ts +79 -0
- package/src/services/voice/speaker/encoder.d.ts +37 -0
- package/src/services/voice/speaker/encoder.d.ts.map +1 -0
- package/src/services/voice/speaker/encoder.ts +105 -0
- package/src/services/voice/speaker-imprint.d.ts +83 -0
- package/src/services/voice/speaker-imprint.d.ts.map +1 -0
- package/src/services/voice/speaker-imprint.test.ts +185 -0
- package/src/services/voice/speaker-imprint.ts +312 -0
- package/src/services/voice/speaker-preset-cache.d.ts +77 -0
- package/src/services/voice/speaker-preset-cache.d.ts.map +1 -0
- package/src/services/voice/speaker-preset-cache.test.ts +154 -0
- package/src/services/voice/speaker-preset-cache.ts +195 -0
- package/src/services/voice/streaming-asr/streaming-pipeline-adapter.ts +292 -0
- package/src/services/voice/system-audio-sink.d.ts +73 -0
- package/src/services/voice/system-audio-sink.d.ts.map +1 -0
- package/src/services/voice/system-audio-sink.test.ts +29 -0
- package/src/services/voice/system-audio-sink.ts +366 -0
- package/src/services/voice/transcriber.d.ts +244 -0
- package/src/services/voice/transcriber.d.ts.map +1 -0
- package/src/services/voice/transcriber.test.ts +392 -0
- package/src/services/voice/transcriber.ts +704 -0
- package/src/services/voice/turn-controller.d.ts +183 -0
- package/src/services/voice/turn-controller.d.ts.map +1 -0
- package/src/services/voice/turn-controller.test.ts +575 -0
- package/src/services/voice/turn-controller.ts +596 -0
- package/src/services/voice/types.d.ts +643 -0
- package/src/services/voice/types.d.ts.map +1 -0
- package/src/services/voice/types.ts +699 -0
- package/src/services/voice/vad.d.ts +282 -0
- package/src/services/voice/vad.d.ts.map +1 -0
- package/src/services/voice/vad.test.ts +480 -0
- package/src/services/voice/vad.ts +827 -0
- package/src/services/voice/vad.v1-v4.test.ts +222 -0
- package/src/services/voice/voice-budget.d.ts +241 -0
- package/src/services/voice/voice-budget.d.ts.map +1 -0
- package/src/services/voice/voice-budget.test.ts +420 -0
- package/src/services/voice/voice-budget.ts +656 -0
- package/src/services/voice/voice-duet.test.ts +375 -0
- package/src/services/voice/voice-emotion-classifier.d.ts +95 -0
- package/src/services/voice/voice-emotion-classifier.d.ts.map +1 -0
- package/src/services/voice/voice-emotion-classifier.test.ts +210 -0
- package/src/services/voice/voice-emotion-classifier.ts +273 -0
- package/src/services/voice/voice-preset-format.d.ts +158 -0
- package/src/services/voice/voice-preset-format.d.ts.map +1 -0
- package/src/services/voice/voice-preset-format.ts +700 -0
- package/src/services/voice/voice-preset-generator.test.ts +89 -0
- package/src/services/voice/voice-profile-artifact.d.ts +116 -0
- package/src/services/voice/voice-profile-artifact.d.ts.map +1 -0
- package/src/services/voice/voice-profile-artifact.test.ts +138 -0
- package/src/services/voice/voice-profile-artifact.ts +518 -0
- package/src/services/voice/voice-profile-routes.d.ts +83 -0
- package/src/services/voice/voice-profile-routes.d.ts.map +1 -0
- package/src/services/voice/voice-profile-routes.test.ts +429 -0
- package/src/services/voice/voice-profile-routes.ts +425 -0
- package/src/services/voice/voice-scenario.ts +154 -0
- package/src/services/voice/voice-settings.d.ts +82 -0
- package/src/services/voice/voice-settings.d.ts.map +1 -0
- package/src/services/voice/voice-settings.ts +172 -0
- package/src/services/voice/voice-state-machine.d.ts +364 -0
- package/src/services/voice/voice-state-machine.d.ts.map +1 -0
- package/src/services/voice/voice-state-machine.ts +727 -0
- package/src/services/voice/voice-workbench-report.test.ts +168 -0
- package/src/services/voice/voice-workbench-report.ts +326 -0
- package/src/services/voice/voice-workbench.test.ts +158 -0
- package/src/services/voice/voice.test.ts +1070 -0
- package/src/services/voice/wake-word-ggml.d.ts +101 -0
- package/src/services/voice/wake-word-ggml.d.ts.map +1 -0
- package/src/services/voice/wake-word-ggml.ts +320 -0
- package/src/services/voice/wake-word.d.ts +255 -0
- package/src/services/voice/wake-word.d.ts.map +1 -0
- package/src/services/voice/wake-word.test.ts +298 -0
- package/src/services/voice/wake-word.ts +554 -0
- package/src/services/voice/wrap-with-first-line-cache.d.ts +70 -0
- package/src/services/voice/wrap-with-first-line-cache.d.ts.map +1 -0
- package/src/services/voice/wrap-with-first-line-cache.ts +267 -0
- package/src/services/voice-model-updater.d.ts +240 -0
- package/src/services/voice-model-updater.d.ts.map +1 -0
- package/src/services/voice-model-updater.ts +724 -0
- package/src/services/voice-prewarm.d.ts +3 -0
- package/src/services/voice-prewarm.d.ts.map +1 -0
- package/src/services/voice-prewarm.ts +51 -0
- package/dist/index.d.ts +0 -37
- package/dist/index.js +0 -1098
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* NetworkPolicy bridge for `plugin-local-inference` (R5-versioning §4).
|
|
3
|
+
*
|
|
4
|
+
* The shared module `@elizaos/shared/local-inference/network-policy` defines
|
|
5
|
+
* the platform-agnostic classifier + decision rule. This module wires the
|
|
6
|
+
* platform-specific probes:
|
|
7
|
+
*
|
|
8
|
+
* - **Android** (Capacitor / AOSP runtime): `@capacitor/network`'s
|
|
9
|
+
* `Network.getStatus()` for connection type, plus an explicit native
|
|
10
|
+
* shim (`getMeteredHint`) that reads `NetworkCapabilities.hasCapability(
|
|
11
|
+
* NET_CAPABILITY_NOT_METERED)`. Android docs explicitly warn against
|
|
12
|
+
* equating "cellular" with "metered" — the metered flag is mandatory.
|
|
13
|
+
* - **iOS** (Capacitor / native): `@capacitor/network` for connection type
|
|
14
|
+
* plus our native bridge that reads `NWPathMonitor.path.isExpensive`.
|
|
15
|
+
* `isExpensive == true` is Apple's "treat as metered" flag.
|
|
16
|
+
* - **Desktop** (Electron/Electrobun): platform-specific OS shims —
|
|
17
|
+
* WinRT `NetworkCostType` on Windows, NetworkManager dbus
|
|
18
|
+
* `ActiveConnection.Metered` on Linux, `NWPathMonitor` on macOS.
|
|
19
|
+
* When no shim is available, falls back to `metered: false` on a wired
|
|
20
|
+
* link and `metered: null` (unknown) on Wi-Fi; the policy turns
|
|
21
|
+
* `unknown` into `ask` so the user is never surprised.
|
|
22
|
+
* - **Headless server / CLI** (`ELIZA_NETWORK_POLICY=headless` or
|
|
23
|
+
* `process.stdout.isTTY === false && process.env.CI !== undefined`):
|
|
24
|
+
* skip auto-update entirely. The `eliza models update` CLI invocation
|
|
25
|
+
* still works, but the runtime tick is silent.
|
|
26
|
+
*
|
|
27
|
+
* The Capacitor / native bridges that hook into the global `window`
|
|
28
|
+
* object on mobile are installed by the AOSP / iOS plugin layers; this
|
|
29
|
+
* module reads them through an injectable adapter so the server-side
|
|
30
|
+
* runtime stays platform-pure and tests can drive the state machine
|
|
31
|
+
* without any of the native dependencies.
|
|
32
|
+
*
|
|
33
|
+
* Spec: `.swarm/research/R5-versioning.md` §4.
|
|
34
|
+
*/
|
|
35
|
+
import { type NetworkClass, type NetworkPolicyDecision, type NetworkPolicyPreferences, type RawNetworkState } from "@elizaos/shared";
|
|
36
|
+
/**
|
|
37
|
+
* Platform probe — produces a `RawNetworkState` from whatever OS API is
|
|
38
|
+
* available. Each platform shim implements this; the registry below picks
|
|
39
|
+
* the active one at runtime.
|
|
40
|
+
*/
|
|
41
|
+
export interface NetworkProbe {
|
|
42
|
+
readonly id: "node-default" | "capacitor-android" | "capacitor-ios" | "electron-darwin" | "electron-win32" | "electron-linux" | "headless";
|
|
43
|
+
probe(): Promise<RawNetworkState>;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Heuristic: are we running headless (no TTY, in CI, or with an explicit
|
|
47
|
+
* override)? Headless callers should NOT auto-update because there is no
|
|
48
|
+
* one around to confirm a multi-GB download.
|
|
49
|
+
*/
|
|
50
|
+
export declare function isHeadlessRuntime(): boolean;
|
|
51
|
+
/**
|
|
52
|
+
* Default Node probe — returns `unknown` for everything. Useful in tests
|
|
53
|
+
* and on packaged servers where there is no Capacitor / Electron bridge.
|
|
54
|
+
* The policy will downgrade `unknown` to `ask`, which is correct for the
|
|
55
|
+
* platform-uncertain case.
|
|
56
|
+
*/
|
|
57
|
+
export declare const NODE_DEFAULT_PROBE: NetworkProbe;
|
|
58
|
+
/**
|
|
59
|
+
* Headless probe — fires when `isHeadlessRuntime()` is true. The decision
|
|
60
|
+
* rule short-circuits to `headless-explicit-only` regardless of state.
|
|
61
|
+
*/
|
|
62
|
+
export declare const HEADLESS_PROBE: NetworkProbe;
|
|
63
|
+
/**
|
|
64
|
+
* Capacitor Android probe (R5 §4.1).
|
|
65
|
+
*
|
|
66
|
+
* Reads connection type from `@capacitor/network` and metered status from
|
|
67
|
+
* a native shim exposed at `(window as any).ElizaNetworkPolicy` (provided
|
|
68
|
+
* by the `@elizaos/capacitor-network-policy` Capacitor plugin at
|
|
69
|
+
* `plugins/plugin-native-network-policy/`). Importing the plugin from
|
|
70
|
+
* the app bootstrap installs `globalThis.ElizaNetworkPolicy` via the
|
|
71
|
+
* plugin's `installNetworkPolicyGlobal()` side-effect, so the runtime
|
|
72
|
+
* picks it up automatically. When the shim is missing the metered flag
|
|
73
|
+
* falls back to `null` (= unknown), which triggers `ask` per R5 §4.1.
|
|
74
|
+
*/
|
|
75
|
+
export declare function capacitorAndroidProbe(): NetworkProbe;
|
|
76
|
+
/**
|
|
77
|
+
* Capacitor iOS probe (R5 §4.2). Connection type from `@capacitor/network`
|
|
78
|
+
* plus iOS `NWPathMonitor.currentPath.isExpensive` via the
|
|
79
|
+
* `@elizaos/capacitor-network-policy` Capacitor plugin at
|
|
80
|
+
* `plugins/plugin-native-network-policy/`. The plugin exposes
|
|
81
|
+
* `(window as any).ElizaNetworkPolicy.getPathHints()`; falls back to
|
|
82
|
+
* `metered: null` when the bridge is missing.
|
|
83
|
+
*/
|
|
84
|
+
export declare function capacitorIosProbe(): NetworkProbe;
|
|
85
|
+
/**
|
|
86
|
+
* Electron / desktop probe. Calls into a process-bridge-exposed function
|
|
87
|
+
* (Electrobun: `Bun.napi`/`electrobunNative.networkPolicyProbe`; classic
|
|
88
|
+
* Electron: `electronAPI.networkPolicyProbe`) that wraps the OS call.
|
|
89
|
+
* Returns `unknown` when no bridge is wired (development-mode browser
|
|
90
|
+
* preview), which downgrades to `ask` on `wifi-*` and `auto` on
|
|
91
|
+
* `ethernet-unmetered` per the matrix.
|
|
92
|
+
*/
|
|
93
|
+
export declare function electronDesktopProbe(): NetworkProbe;
|
|
94
|
+
/**
|
|
95
|
+
* Pick the active probe based on platform heuristics. Order:
|
|
96
|
+
*
|
|
97
|
+
* 1. `ELIZA_NETWORK_POLICY=headless` (or CI / no-TTY-no-DISPLAY) → headless.
|
|
98
|
+
* 2. Capacitor android bridge present → Android probe.
|
|
99
|
+
* 3. Capacitor iOS bridge present → iOS probe (`process.platform` !==
|
|
100
|
+
* `android` and a `Capacitor` global exists).
|
|
101
|
+
* 4. Desktop bridge present → desktop probe.
|
|
102
|
+
* 5. Otherwise → node-default (returns `unknown`).
|
|
103
|
+
*/
|
|
104
|
+
export declare function pickActiveProbe(): NetworkProbe;
|
|
105
|
+
/**
|
|
106
|
+
* High-level: probe + classify + apply prefs in one call. Used by the
|
|
107
|
+
* voice-model updater and by the local-inference download routes.
|
|
108
|
+
*/
|
|
109
|
+
export declare function evaluateRuntimePolicy(args: {
|
|
110
|
+
prefs?: NetworkPolicyPreferences;
|
|
111
|
+
estimatedBytes: number;
|
|
112
|
+
probe?: NetworkProbe;
|
|
113
|
+
now?: Date;
|
|
114
|
+
}): Promise<NetworkPolicyDecision>;
|
|
115
|
+
/** Surface for tests: full snapshot of the raw probe result + decision. */
|
|
116
|
+
export declare function describeRuntimeNetwork(args?: {
|
|
117
|
+
prefs?: NetworkPolicyPreferences;
|
|
118
|
+
estimatedBytes?: number;
|
|
119
|
+
probe?: NetworkProbe;
|
|
120
|
+
now?: Date;
|
|
121
|
+
}): Promise<{
|
|
122
|
+
probeId: NetworkProbe["id"];
|
|
123
|
+
state: RawNetworkState;
|
|
124
|
+
class: NetworkClass;
|
|
125
|
+
decision: NetworkPolicyDecision;
|
|
126
|
+
}>;
|
|
127
|
+
//# sourceMappingURL=network-policy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"network-policy.d.ts","sourceRoot":"","sources":["network-policy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH,OAAO,EAIN,KAAK,YAAY,EACjB,KAAK,qBAAqB,EAC1B,KAAK,wBAAwB,EAC7B,KAAK,eAAe,EACpB,MAAM,iBAAiB,CAAC;AAEzB;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC5B,QAAQ,CAAC,EAAE,EACR,cAAc,GACd,mBAAmB,GACnB,eAAe,GACf,iBAAiB,GACjB,gBAAgB,GAChB,gBAAgB,GAChB,UAAU,CAAC;IACd,KAAK,IAAI,OAAO,CAAC,eAAe,CAAC,CAAC;CAClC;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAkB3C;AAED;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,EAAE,YAKhC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,cAAc,EAAE,YAK5B,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,wBAAgB,qBAAqB,IAAI,YAAY,CAkBpD;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,IAAI,YAAY,CAmBhD;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,IAAI,YAAY,CAsBnD;AA2ED;;;;;;;;;GASG;AACH,wBAAgB,eAAe,IAAI,YAAY,CAU9C;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,CAAC,IAAI,EAAE;IACjD,KAAK,CAAC,EAAE,wBAAwB,CAAC;IACjC,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,GAAG,CAAC,EAAE,IAAI,CAAC;CACX,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAWjC;AAED,2EAA2E;AAC3E,wBAAsB,sBAAsB,CAAC,IAAI,CAAC,EAAE;IACnD,KAAK,CAAC,EAAE,wBAAwB,CAAC;IACjC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,GAAG,CAAC,EAAE,IAAI,CAAC;CACX,GAAG,OAAO,CAAC;IACX,OAAO,EAAE,YAAY,CAAC,IAAI,CAAC,CAAC;IAC5B,KAAK,EAAE,eAAe,CAAC;IACvB,KAAK,EAAE,YAAY,CAAC;IACpB,QAAQ,EAAE,qBAAqB,CAAC;CAChC,CAAC,CAaD"}
|
|
@@ -0,0 +1,346 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* NetworkPolicy bridge for `plugin-local-inference` (R5-versioning §4).
|
|
3
|
+
*
|
|
4
|
+
* The shared module `@elizaos/shared/local-inference/network-policy` defines
|
|
5
|
+
* the platform-agnostic classifier + decision rule. This module wires the
|
|
6
|
+
* platform-specific probes:
|
|
7
|
+
*
|
|
8
|
+
* - **Android** (Capacitor / AOSP runtime): `@capacitor/network`'s
|
|
9
|
+
* `Network.getStatus()` for connection type, plus an explicit native
|
|
10
|
+
* shim (`getMeteredHint`) that reads `NetworkCapabilities.hasCapability(
|
|
11
|
+
* NET_CAPABILITY_NOT_METERED)`. Android docs explicitly warn against
|
|
12
|
+
* equating "cellular" with "metered" — the metered flag is mandatory.
|
|
13
|
+
* - **iOS** (Capacitor / native): `@capacitor/network` for connection type
|
|
14
|
+
* plus our native bridge that reads `NWPathMonitor.path.isExpensive`.
|
|
15
|
+
* `isExpensive == true` is Apple's "treat as metered" flag.
|
|
16
|
+
* - **Desktop** (Electron/Electrobun): platform-specific OS shims —
|
|
17
|
+
* WinRT `NetworkCostType` on Windows, NetworkManager dbus
|
|
18
|
+
* `ActiveConnection.Metered` on Linux, `NWPathMonitor` on macOS.
|
|
19
|
+
* When no shim is available, falls back to `metered: false` on a wired
|
|
20
|
+
* link and `metered: null` (unknown) on Wi-Fi; the policy turns
|
|
21
|
+
* `unknown` into `ask` so the user is never surprised.
|
|
22
|
+
* - **Headless server / CLI** (`ELIZA_NETWORK_POLICY=headless` or
|
|
23
|
+
* `process.stdout.isTTY === false && process.env.CI !== undefined`):
|
|
24
|
+
* skip auto-update entirely. The `eliza models update` CLI invocation
|
|
25
|
+
* still works, but the runtime tick is silent.
|
|
26
|
+
*
|
|
27
|
+
* The Capacitor / native bridges that hook into the global `window`
|
|
28
|
+
* object on mobile are installed by the AOSP / iOS plugin layers; this
|
|
29
|
+
* module reads them through an injectable adapter so the server-side
|
|
30
|
+
* runtime stays platform-pure and tests can drive the state machine
|
|
31
|
+
* without any of the native dependencies.
|
|
32
|
+
*
|
|
33
|
+
* Spec: `.swarm/research/R5-versioning.md` §4.
|
|
34
|
+
*/
|
|
35
|
+
|
|
36
|
+
import {
|
|
37
|
+
applyNetworkPolicy,
|
|
38
|
+
classifyNetwork,
|
|
39
|
+
DEFAULT_NETWORK_POLICY_PREFERENCES,
|
|
40
|
+
type NetworkClass,
|
|
41
|
+
type NetworkPolicyDecision,
|
|
42
|
+
type NetworkPolicyPreferences,
|
|
43
|
+
type RawNetworkState,
|
|
44
|
+
} from "@elizaos/shared";
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Platform probe — produces a `RawNetworkState` from whatever OS API is
|
|
48
|
+
* available. Each platform shim implements this; the registry below picks
|
|
49
|
+
* the active one at runtime.
|
|
50
|
+
*/
|
|
51
|
+
export interface NetworkProbe {
|
|
52
|
+
readonly id:
|
|
53
|
+
| "node-default"
|
|
54
|
+
| "capacitor-android"
|
|
55
|
+
| "capacitor-ios"
|
|
56
|
+
| "electron-darwin"
|
|
57
|
+
| "electron-win32"
|
|
58
|
+
| "electron-linux"
|
|
59
|
+
| "headless";
|
|
60
|
+
probe(): Promise<RawNetworkState>;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Heuristic: are we running headless (no TTY, in CI, or with an explicit
|
|
65
|
+
* override)? Headless callers should NOT auto-update because there is no
|
|
66
|
+
* one around to confirm a multi-GB download.
|
|
67
|
+
*/
|
|
68
|
+
export function isHeadlessRuntime(): boolean {
|
|
69
|
+
if (process.env.ELIZA_NETWORK_POLICY === "headless") return true;
|
|
70
|
+
if (process.env.ELIZA_HEADLESS === "1") return true;
|
|
71
|
+
if (process.env.CI !== undefined && process.env.CI !== "false") return true;
|
|
72
|
+
if (typeof process.stdout.isTTY === "boolean" && !process.stdout.isTTY) {
|
|
73
|
+
// On a Linux server with no TTY this is a strong "headless" signal;
|
|
74
|
+
// but a packaged Electron app also has no TTY. Use the explicit env
|
|
75
|
+
// override above when we want to force one way or the other.
|
|
76
|
+
// Default: only headless when ALSO no DISPLAY / no Wayland session.
|
|
77
|
+
if (
|
|
78
|
+
process.platform === "linux" &&
|
|
79
|
+
!process.env.DISPLAY &&
|
|
80
|
+
!process.env.WAYLAND_DISPLAY
|
|
81
|
+
) {
|
|
82
|
+
return true;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return false;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* Default Node probe — returns `unknown` for everything. Useful in tests
|
|
90
|
+
* and on packaged servers where there is no Capacitor / Electron bridge.
|
|
91
|
+
* The policy will downgrade `unknown` to `ask`, which is correct for the
|
|
92
|
+
* platform-uncertain case.
|
|
93
|
+
*/
|
|
94
|
+
export const NODE_DEFAULT_PROBE: NetworkProbe = {
|
|
95
|
+
id: "node-default",
|
|
96
|
+
async probe(): Promise<RawNetworkState> {
|
|
97
|
+
return { connectionType: "unknown", metered: null };
|
|
98
|
+
},
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Headless probe — fires when `isHeadlessRuntime()` is true. The decision
|
|
103
|
+
* rule short-circuits to `headless-explicit-only` regardless of state.
|
|
104
|
+
*/
|
|
105
|
+
export const HEADLESS_PROBE: NetworkProbe = {
|
|
106
|
+
id: "headless",
|
|
107
|
+
async probe(): Promise<RawNetworkState> {
|
|
108
|
+
return { connectionType: "unknown", metered: null };
|
|
109
|
+
},
|
|
110
|
+
};
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* Capacitor Android probe (R5 §4.1).
|
|
114
|
+
*
|
|
115
|
+
* Reads connection type from `@capacitor/network` and metered status from
|
|
116
|
+
* a native shim exposed at `(window as any).ElizaNetworkPolicy` (provided
|
|
117
|
+
* by the `@elizaos/capacitor-network-policy` Capacitor plugin at
|
|
118
|
+
* `plugins/plugin-native-network-policy/`). Importing the plugin from
|
|
119
|
+
* the app bootstrap installs `globalThis.ElizaNetworkPolicy` via the
|
|
120
|
+
* plugin's `installNetworkPolicyGlobal()` side-effect, so the runtime
|
|
121
|
+
* picks it up automatically. When the shim is missing the metered flag
|
|
122
|
+
* falls back to `null` (= unknown), which triggers `ask` per R5 §4.1.
|
|
123
|
+
*/
|
|
124
|
+
export function capacitorAndroidProbe(): NetworkProbe {
|
|
125
|
+
return {
|
|
126
|
+
id: "capacitor-android",
|
|
127
|
+
async probe(): Promise<RawNetworkState> {
|
|
128
|
+
const cap = readGlobalCapacitor();
|
|
129
|
+
const status = await cap?.Network?.getStatus?.();
|
|
130
|
+
const ctype: RawNetworkState["connectionType"] =
|
|
131
|
+
status?.connectionType === "wifi"
|
|
132
|
+
? "wifi"
|
|
133
|
+
: status?.connectionType === "cellular"
|
|
134
|
+
? "cellular"
|
|
135
|
+
: status?.connectionType === "none"
|
|
136
|
+
? "none"
|
|
137
|
+
: "unknown";
|
|
138
|
+
const meteredHint = await readAndroidMeteredShim();
|
|
139
|
+
return { connectionType: ctype, metered: meteredHint };
|
|
140
|
+
},
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* Capacitor iOS probe (R5 §4.2). Connection type from `@capacitor/network`
|
|
146
|
+
* plus iOS `NWPathMonitor.currentPath.isExpensive` via the
|
|
147
|
+
* `@elizaos/capacitor-network-policy` Capacitor plugin at
|
|
148
|
+
* `plugins/plugin-native-network-policy/`. The plugin exposes
|
|
149
|
+
* `(window as any).ElizaNetworkPolicy.getPathHints()`; falls back to
|
|
150
|
+
* `metered: null` when the bridge is missing.
|
|
151
|
+
*/
|
|
152
|
+
export function capacitorIosProbe(): NetworkProbe {
|
|
153
|
+
return {
|
|
154
|
+
id: "capacitor-ios",
|
|
155
|
+
async probe(): Promise<RawNetworkState> {
|
|
156
|
+
const cap = readGlobalCapacitor();
|
|
157
|
+
const status = await cap?.Network?.getStatus?.();
|
|
158
|
+
const ctype: RawNetworkState["connectionType"] =
|
|
159
|
+
status?.connectionType === "wifi"
|
|
160
|
+
? "wifi"
|
|
161
|
+
: status?.connectionType === "cellular"
|
|
162
|
+
? "cellular"
|
|
163
|
+
: status?.connectionType === "none"
|
|
164
|
+
? "none"
|
|
165
|
+
: "unknown";
|
|
166
|
+
const hints = await readIosPathHintsShim();
|
|
167
|
+
const metered = hints === null ? null : Boolean(hints.isExpensive);
|
|
168
|
+
return { connectionType: ctype, metered };
|
|
169
|
+
},
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
/**
|
|
174
|
+
* Electron / desktop probe. Calls into a process-bridge-exposed function
|
|
175
|
+
* (Electrobun: `Bun.napi`/`electrobunNative.networkPolicyProbe`; classic
|
|
176
|
+
* Electron: `electronAPI.networkPolicyProbe`) that wraps the OS call.
|
|
177
|
+
* Returns `unknown` when no bridge is wired (development-mode browser
|
|
178
|
+
* preview), which downgrades to `ask` on `wifi-*` and `auto` on
|
|
179
|
+
* `ethernet-unmetered` per the matrix.
|
|
180
|
+
*/
|
|
181
|
+
export function electronDesktopProbe(): NetworkProbe {
|
|
182
|
+
const detectId = (): NetworkProbe["id"] => {
|
|
183
|
+
if (process.platform === "darwin") return "electron-darwin";
|
|
184
|
+
if (process.platform === "win32") return "electron-win32";
|
|
185
|
+
return "electron-linux";
|
|
186
|
+
};
|
|
187
|
+
return {
|
|
188
|
+
id: detectId(),
|
|
189
|
+
async probe(): Promise<RawNetworkState> {
|
|
190
|
+
const bridge = readGlobalDesktopBridge();
|
|
191
|
+
if (!bridge) return { connectionType: "unknown", metered: null };
|
|
192
|
+
try {
|
|
193
|
+
const res = await bridge.networkPolicyProbe();
|
|
194
|
+
return {
|
|
195
|
+
connectionType: res.connectionType ?? "unknown",
|
|
196
|
+
metered: res.metered ?? null,
|
|
197
|
+
};
|
|
198
|
+
} catch {
|
|
199
|
+
return { connectionType: "unknown", metered: null };
|
|
200
|
+
}
|
|
201
|
+
},
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
interface CapacitorBridge {
|
|
206
|
+
Network?: {
|
|
207
|
+
getStatus?: () => Promise<{
|
|
208
|
+
connected?: boolean;
|
|
209
|
+
connectionType?: "wifi" | "cellular" | "none" | "unknown";
|
|
210
|
+
}>;
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
function readGlobalCapacitor(): CapacitorBridge | null {
|
|
215
|
+
const g = globalThis as unknown as {
|
|
216
|
+
Capacitor?: { Plugins?: CapacitorBridge };
|
|
217
|
+
};
|
|
218
|
+
return g.Capacitor?.Plugins ?? null;
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
interface AndroidMeteredShim {
|
|
222
|
+
getMeteredHint?: () => Promise<{ metered?: boolean }>;
|
|
223
|
+
}
|
|
224
|
+
interface IosPathHintsShim {
|
|
225
|
+
getPathHints?: () => Promise<{
|
|
226
|
+
isExpensive?: boolean;
|
|
227
|
+
isConstrained?: boolean;
|
|
228
|
+
}>;
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
async function readAndroidMeteredShim(): Promise<boolean | null> {
|
|
232
|
+
const g = globalThis as unknown as {
|
|
233
|
+
ElizaNetworkPolicy?: AndroidMeteredShim;
|
|
234
|
+
};
|
|
235
|
+
const fn = g.ElizaNetworkPolicy?.getMeteredHint;
|
|
236
|
+
if (typeof fn !== "function") return null;
|
|
237
|
+
try {
|
|
238
|
+
const res = await fn();
|
|
239
|
+
return typeof res.metered === "boolean" ? res.metered : null;
|
|
240
|
+
} catch {
|
|
241
|
+
return null;
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
async function readIosPathHintsShim(): Promise<{
|
|
246
|
+
isExpensive: boolean;
|
|
247
|
+
isConstrained: boolean;
|
|
248
|
+
} | null> {
|
|
249
|
+
const g = globalThis as unknown as { ElizaNetworkPolicy?: IosPathHintsShim };
|
|
250
|
+
const fn = g.ElizaNetworkPolicy?.getPathHints;
|
|
251
|
+
if (typeof fn !== "function") return null;
|
|
252
|
+
try {
|
|
253
|
+
const res = await fn();
|
|
254
|
+
return {
|
|
255
|
+
isExpensive: Boolean(res.isExpensive),
|
|
256
|
+
isConstrained: Boolean(res.isConstrained),
|
|
257
|
+
};
|
|
258
|
+
} catch {
|
|
259
|
+
return null;
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
interface DesktopBridge {
|
|
264
|
+
networkPolicyProbe(): Promise<{
|
|
265
|
+
connectionType?: RawNetworkState["connectionType"];
|
|
266
|
+
metered?: boolean | null;
|
|
267
|
+
}>;
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
function readGlobalDesktopBridge(): DesktopBridge | null {
|
|
271
|
+
const g = globalThis as unknown as {
|
|
272
|
+
electrobunNative?: DesktopBridge;
|
|
273
|
+
electronAPI?: DesktopBridge;
|
|
274
|
+
};
|
|
275
|
+
return g.electrobunNative ?? g.electronAPI ?? null;
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
/**
|
|
279
|
+
* Pick the active probe based on platform heuristics. Order:
|
|
280
|
+
*
|
|
281
|
+
* 1. `ELIZA_NETWORK_POLICY=headless` (or CI / no-TTY-no-DISPLAY) → headless.
|
|
282
|
+
* 2. Capacitor android bridge present → Android probe.
|
|
283
|
+
* 3. Capacitor iOS bridge present → iOS probe (`process.platform` !==
|
|
284
|
+
* `android` and a `Capacitor` global exists).
|
|
285
|
+
* 4. Desktop bridge present → desktop probe.
|
|
286
|
+
* 5. Otherwise → node-default (returns `unknown`).
|
|
287
|
+
*/
|
|
288
|
+
export function pickActiveProbe(): NetworkProbe {
|
|
289
|
+
if (isHeadlessRuntime()) return HEADLESS_PROBE;
|
|
290
|
+
const g = globalThis as unknown as {
|
|
291
|
+
Capacitor?: { getPlatform?: () => string };
|
|
292
|
+
};
|
|
293
|
+
const platform = g.Capacitor?.getPlatform?.();
|
|
294
|
+
if (platform === "android") return capacitorAndroidProbe();
|
|
295
|
+
if (platform === "ios") return capacitorIosProbe();
|
|
296
|
+
if (readGlobalDesktopBridge() !== null) return electronDesktopProbe();
|
|
297
|
+
return NODE_DEFAULT_PROBE;
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
/**
|
|
301
|
+
* High-level: probe + classify + apply prefs in one call. Used by the
|
|
302
|
+
* voice-model updater and by the local-inference download routes.
|
|
303
|
+
*/
|
|
304
|
+
export async function evaluateRuntimePolicy(args: {
|
|
305
|
+
prefs?: NetworkPolicyPreferences;
|
|
306
|
+
estimatedBytes: number;
|
|
307
|
+
probe?: NetworkProbe;
|
|
308
|
+
now?: Date;
|
|
309
|
+
}): Promise<NetworkPolicyDecision> {
|
|
310
|
+
const probe = args.probe ?? pickActiveProbe();
|
|
311
|
+
const state = await probe.probe();
|
|
312
|
+
const klass = classifyNetwork(state);
|
|
313
|
+
const isHeadless = probe.id === "headless";
|
|
314
|
+
return applyNetworkPolicy(
|
|
315
|
+
klass,
|
|
316
|
+
args.prefs ?? DEFAULT_NETWORK_POLICY_PREFERENCES,
|
|
317
|
+
args.estimatedBytes,
|
|
318
|
+
{ now: args.now, isHeadless },
|
|
319
|
+
);
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
/** Surface for tests: full snapshot of the raw probe result + decision. */
|
|
323
|
+
export async function describeRuntimeNetwork(args?: {
|
|
324
|
+
prefs?: NetworkPolicyPreferences;
|
|
325
|
+
estimatedBytes?: number;
|
|
326
|
+
probe?: NetworkProbe;
|
|
327
|
+
now?: Date;
|
|
328
|
+
}): Promise<{
|
|
329
|
+
probeId: NetworkProbe["id"];
|
|
330
|
+
state: RawNetworkState;
|
|
331
|
+
class: NetworkClass;
|
|
332
|
+
decision: NetworkPolicyDecision;
|
|
333
|
+
}> {
|
|
334
|
+
const probe = args?.probe ?? pickActiveProbe();
|
|
335
|
+
const state = await probe.probe();
|
|
336
|
+
const klass = classifyNetwork(state);
|
|
337
|
+
const estimatedBytes = args?.estimatedBytes ?? 0;
|
|
338
|
+
const isHeadless = probe.id === "headless";
|
|
339
|
+
const decision = applyNetworkPolicy(
|
|
340
|
+
klass,
|
|
341
|
+
args?.prefs ?? DEFAULT_NETWORK_POLICY_PREFERENCES,
|
|
342
|
+
estimatedBytes,
|
|
343
|
+
{ now: args?.now, isHeadless },
|
|
344
|
+
);
|
|
345
|
+
return { probeId: probe.id, state, class: klass, decision };
|
|
346
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare function localInferenceRoot(): string;
|
|
2
|
+
export declare function elizaModelsDir(): string;
|
|
3
|
+
export declare function registryPath(): string;
|
|
4
|
+
export declare function downloadsStagingDir(): string;
|
|
5
|
+
export declare function isWithinElizaRoot(target: string): boolean;
|
|
6
|
+
//# sourceMappingURL=paths.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["paths.ts"],"names":[],"mappings":"AAGA,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAKzD"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { resolveStateDir } from "@elizaos/core";
|
|
3
|
+
|
|
4
|
+
export function localInferenceRoot(): string {
|
|
5
|
+
return path.join(resolveStateDir(), "local-inference");
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export function elizaModelsDir(): string {
|
|
9
|
+
return path.join(localInferenceRoot(), "models");
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export function registryPath(): string {
|
|
13
|
+
return path.join(localInferenceRoot(), "registry.json");
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export function downloadsStagingDir(): string {
|
|
17
|
+
return path.join(localInferenceRoot(), "downloads");
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export function isWithinElizaRoot(target: string): boolean {
|
|
21
|
+
const root = path.resolve(localInferenceRoot());
|
|
22
|
+
const resolved = path.resolve(target);
|
|
23
|
+
if (resolved === root) return false;
|
|
24
|
+
return resolved.startsWith(`${root}${path.sep}`);
|
|
25
|
+
}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Planner (`PLAN_ACTIONS`) skeleton + GBNF wiring for the local-inference
|
|
3
|
+
* stage.
|
|
4
|
+
*
|
|
5
|
+
* The response-handler stage is already constrained — `shouldRespond` is a
|
|
6
|
+
* three-value enum that the lazy GBNF pins (see
|
|
7
|
+
* `packages/core/src/runtime/builtin-field-evaluators.ts`). The planner
|
|
8
|
+
* stage, however, has historically emitted `PLAN_ACTIONS({...})` calls
|
|
9
|
+
* unconstrained for local backends: the model could hallucinate action
|
|
10
|
+
* names, drop required parameters, or invent free-form parameter values
|
|
11
|
+
* outside the registered enum.
|
|
12
|
+
*
|
|
13
|
+
* This module is the local-inference-side surface for the same guided-decode
|
|
14
|
+
* contract the response handler uses:
|
|
15
|
+
*
|
|
16
|
+
* 1. `buildPlanActionsSkeleton(actions)` — top-level envelope skeleton
|
|
17
|
+
* `{"action": <enum>, "parameters": <free-json>, "thought": <free-string>}`.
|
|
18
|
+
* `action` is pinned to the alternation of registered action names and
|
|
19
|
+
* collapses to a literal when only one action is exposed.
|
|
20
|
+
*
|
|
21
|
+
* 2. `buildPlannerGuidedDecode(actions)` — the full bundle: the skeleton
|
|
22
|
+
* above, the precise GBNF (`@elizaos/core`'s `buildPlannerActionGrammar`
|
|
23
|
+
* emits one that also pins the array-element enum), and per-action
|
|
24
|
+
* `parameters` schemas + sub-skeletons for the engine's optional second
|
|
25
|
+
* pass once `action` is committed.
|
|
26
|
+
*
|
|
27
|
+
* Why this lives in app-core (not core): the helper is meaningful only to
|
|
28
|
+
* the local-inference layer — cloud adapters can satisfy the portable `tools`
|
|
29
|
+
* contract without honoring `responseSkeleton` / `grammar`. Keeping the
|
|
30
|
+
* wrapper here makes the local-only nature explicit at the import site and
|
|
31
|
+
* pins the test surface (`__tests__/planner-grammar.test.ts`) next to the
|
|
32
|
+
* engine that consumes the output.
|
|
33
|
+
*
|
|
34
|
+
* GBNF compiler limitation: `compileSkeletonToGbnf` cannot express
|
|
35
|
+
* per-action parameter discrimination in a single flat skeleton (the spans
|
|
36
|
+
* are positional; there's no anyOf-with-discriminator branch). We therefore
|
|
37
|
+
* fall back to the documented two-pass shape — top-level skeleton pins
|
|
38
|
+
* `action`, the engine drives a second constrained pass against the chosen
|
|
39
|
+
* action's normalized JSON schema. `buildPlannerParamsSkeleton` (re-exported
|
|
40
|
+
* from `@elizaos/core`) provides the per-action sub-skeleton.
|
|
41
|
+
*/
|
|
42
|
+
import { type Action, type JSONSchema, type ResponseSkeleton } from "@elizaos/core";
|
|
43
|
+
import { type ElizaHarnessSchema } from "./structured-output";
|
|
44
|
+
/**
|
|
45
|
+
* The minimal shape this module consumes from an `Action`. Accepting the
|
|
46
|
+
* structural pick keeps the helper testable in isolation (no handlers /
|
|
47
|
+
* validators need test doubles).
|
|
48
|
+
*/
|
|
49
|
+
export type PlannerAction = Pick<Action, "name" | "parameters" | "allowAdditionalParameters">;
|
|
50
|
+
/**
|
|
51
|
+
* Bundle of the structure-forcing artefacts the local-inference engine needs
|
|
52
|
+
* to constrain a `PLAN_ACTIONS` generation.
|
|
53
|
+
*/
|
|
54
|
+
export interface PlannerGuidedDecode {
|
|
55
|
+
/**
|
|
56
|
+
* Top-level skeleton: `{"action": <enum>, "parameters": <free-json>,
|
|
57
|
+
* "thought": <free-string>}`. Compiles to a lazy GBNF via
|
|
58
|
+
* `compileSkeletonToGbnf` — `action` is the alternation of registered
|
|
59
|
+
* action names (or a literal when only one action is exposed).
|
|
60
|
+
*/
|
|
61
|
+
responseSkeleton: ResponseSkeleton;
|
|
62
|
+
/**
|
|
63
|
+
* Pre-built GBNF for the top-level envelope. Wins over compiling the
|
|
64
|
+
* skeleton (the explicit grammar carries the same alternation as the
|
|
65
|
+
* skeleton's enum span — they are byte-equivalent — but the explicit
|
|
66
|
+
* grammar is what the cloud-mirroring code path in
|
|
67
|
+
* `@elizaos/core`'s `buildPlannerActionGrammar` already produces).
|
|
68
|
+
*/
|
|
69
|
+
grammar: string;
|
|
70
|
+
/**
|
|
71
|
+
* Map of action name → normalized JSON Schema for its `parameters` object.
|
|
72
|
+
* The engine uses this for the optional second constrained pass once
|
|
73
|
+
* `action` is committed. Cloud adapters ignore it; tools carry the
|
|
74
|
+
* equivalent (unforced) contract for them.
|
|
75
|
+
*/
|
|
76
|
+
actionSchemas: Record<string, JSONSchema>;
|
|
77
|
+
/**
|
|
78
|
+
* Per-action `parameters` skeleton (single-value enums collapse to
|
|
79
|
+
* literals; multi-value enums stay as enum spans). Keyed by action name.
|
|
80
|
+
* Engines may compile each entry on demand for the second pass.
|
|
81
|
+
*/
|
|
82
|
+
paramsSkeletons: Record<string, ResponseSkeleton>;
|
|
83
|
+
/**
|
|
84
|
+
* Eliza harness schema for the top-level envelope — the bundle of
|
|
85
|
+
* skeleton + grammar + derived prefill plan. Pass this on
|
|
86
|
+
* {@link StructuredGenerateParams.elizaSchema} to engage the
|
|
87
|
+
* deterministic-token prefill-plan fast-forward on top of the GBNF
|
|
88
|
+
* constrained decode.
|
|
89
|
+
*/
|
|
90
|
+
elizaSchema: ElizaHarnessSchema;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Build the top-level `PLAN_ACTIONS` envelope skeleton from the action set
|
|
94
|
+
* exposed this turn.
|
|
95
|
+
*
|
|
96
|
+
* Shape:
|
|
97
|
+
* `{"action": <enum>, "parameters": <free-json>, "thought": <free-string>}`
|
|
98
|
+
*
|
|
99
|
+
* Returns `null` when no actions are exposed (caller should skip
|
|
100
|
+
* structure-forcing — there is nothing to constrain `action` to).
|
|
101
|
+
*
|
|
102
|
+
* GBNF compiler limitation: `compileSkeletonToGbnf` does not support
|
|
103
|
+
* anyOf-with-discriminator in a single skeleton — the per-action parameter
|
|
104
|
+
* shape cannot be expressed positionally. The engine drives a second
|
|
105
|
+
* constrained pass against {@link PlannerGuidedDecode.actionSchemas} /
|
|
106
|
+
* {@link PlannerGuidedDecode.paramsSkeletons} once `action` is committed.
|
|
107
|
+
*/
|
|
108
|
+
export declare function buildPlanActionsSkeleton(actions: ReadonlyArray<PlannerAction>): ResponseSkeleton | null;
|
|
109
|
+
/**
|
|
110
|
+
* Build the full guided-decode bundle for a `PLAN_ACTIONS` generation: the
|
|
111
|
+
* top-level skeleton, the precise GBNF, the per-action parameter schemas,
|
|
112
|
+
* and the per-action `parameters` sub-skeletons.
|
|
113
|
+
*
|
|
114
|
+
* Returns `null` when no actions are exposed.
|
|
115
|
+
*/
|
|
116
|
+
export declare function buildPlannerGuidedDecode(actions: ReadonlyArray<PlannerAction>): PlannerGuidedDecode | null;
|
|
117
|
+
/**
|
|
118
|
+
* Convenience: normalize a single action's `parameters` to a core
|
|
119
|
+
* {@link JSONSchema}. Re-exported here so callers staying inside the
|
|
120
|
+
* local-inference module can build per-action constraints without
|
|
121
|
+
* pulling `@elizaos/core/runtime/...`.
|
|
122
|
+
*/
|
|
123
|
+
export declare function planActionParameterSchema(action: PlannerAction): JSONSchema;
|
|
124
|
+
//# sourceMappingURL=planner-skeleton.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"planner-skeleton.d.ts","sourceRoot":"","sources":["planner-skeleton.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AAEH,OAAO,EACN,KAAK,MAAM,EAGX,KAAK,UAAU,EAEf,KAAK,gBAAgB,EACrB,MAAM,eAAe,CAAC;AAEvB,OAAO,EACN,KAAK,kBAAkB,EAEvB,MAAM,qBAAqB,CAAC;AAE7B;;;;GAIG;AACH,MAAM,MAAM,aAAa,GAAG,IAAI,CAC/B,MAAM,EACN,MAAM,GAAG,YAAY,GAAG,2BAA2B,CACnD,CAAC;AAEF;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IACnC;;;;;OAKG;IACH,gBAAgB,EAAE,gBAAgB,CAAC;IACnC;;;;;;OAMG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB;;;;;OAKG;IACH,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAC1C;;;;OAIG;IACH,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAClD;;;;;;OAMG;IACH,WAAW,EAAE,kBAAkB,CAAC;CAChC;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,wBAAwB,CACvC,OAAO,EAAE,aAAa,CAAC,aAAa,CAAC,GACnC,gBAAgB,GAAG,IAAI,CAIzB;AAED;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CACvC,OAAO,EAAE,aAAa,CAAC,aAAa,CAAC,GACnC,mBAAmB,GAAG,IAAI,CAsB5B;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,aAAa,GAAG,UAAU,CAE3E"}
|