@elizaos/app-core 2.0.0-beta.3 → 2.0.11-beta.6
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/agent-bridge.d.ts +27 -0
- package/agent-bridge.d.ts.map +1 -0
- package/agent-bridge.js +26 -0
- package/api/__tests__/sandbox-test-helpers.js +1 -1
- package/api/auth/audit.js +1 -1
- package/api/auth/auth-context.js +1 -1
- package/api/auth/bootstrap-token.js +2 -2
- package/api/auth/index.d.ts +9 -10
- package/api/auth/index.d.ts.map +1 -1
- package/api/auth/index.js +9 -10
- package/api/auth/passwords.js +2 -2
- package/api/auth/sensitive-rate-limit.d.ts +1 -4
- package/api/auth/sensitive-rate-limit.d.ts.map +1 -1
- package/api/auth/sensitive-rate-limit.js +6 -6
- package/api/auth/sessions.js +2 -2
- package/api/auth-bootstrap-routes.d.ts +6 -13
- package/api/auth-bootstrap-routes.d.ts.map +1 -1
- package/api/auth-bootstrap-routes.js +14 -27
- package/api/auth-pairing-routes.d.ts +17 -0
- package/api/auth-pairing-routes.d.ts.map +1 -0
- package/api/auth-pairing-routes.js +300 -0
- package/api/auth-session-routes.d.ts.map +1 -1
- package/api/auth-session-routes.js +36 -15
- package/api/auth.d.ts +12 -19
- package/api/auth.d.ts.map +1 -1
- package/api/auth.js +32 -27
- package/api/automations-compat-routes.d.ts.map +1 -1
- package/api/automations-compat-routes.js +5 -5
- package/api/background-tasks-routes.d.ts +4 -0
- package/api/background-tasks-routes.d.ts.map +1 -0
- package/api/background-tasks-routes.js +63 -0
- package/api/catalog-routes.js +3 -3
- package/api/cloud-pair-route.d.ts +26 -0
- package/api/cloud-pair-route.d.ts.map +1 -0
- package/api/cloud-pair-route.js +222 -0
- package/api/cloud-voice-routes.d.ts +52 -0
- package/api/cloud-voice-routes.d.ts.map +1 -0
- package/api/cloud-voice-routes.js +50 -0
- package/api/compat-route-shared.d.ts +2 -2
- package/api/compat-route-shared.d.ts.map +1 -1
- package/api/compat-route-shared.js +11 -7
- package/api/credential-resolver.d.ts +2 -2
- package/api/credential-resolver.d.ts.map +1 -1
- package/api/credential-resolver.js +8 -2
- package/api/database-rows-compat-routes.d.ts.map +1 -1
- package/api/database-rows-compat-routes.js +69 -31
- package/api/dev-boot-history.d.ts +26 -0
- package/api/dev-boot-history.d.ts.map +1 -0
- package/api/dev-boot-history.js +69 -0
- package/api/dev-compat-routes.d.ts +5 -0
- package/api/dev-compat-routes.d.ts.map +1 -1
- package/api/dev-compat-routes.js +127 -4
- package/api/dev-console-log.d.ts +2 -2
- package/api/dev-console-log.d.ts.map +1 -1
- package/api/dev-console-log.js +8 -5
- package/api/dev-route-catalog.d.ts +58 -0
- package/api/dev-route-catalog.d.ts.map +1 -0
- package/api/dev-route-catalog.js +447 -0
- package/api/dev-stack.d.ts.map +1 -1
- package/api/dev-stack.js +6 -9
- package/api/first-run-routes.d.ts +4 -0
- package/api/first-run-routes.d.ts.map +1 -0
- package/api/first-run-routes.js +208 -0
- package/api/first-run-tts-route.d.ts +19 -0
- package/api/first-run-tts-route.d.ts.map +1 -0
- package/api/first-run-tts-route.js +59 -0
- package/api/internal-routes.d.ts +23 -0
- package/api/internal-routes.d.ts.map +1 -0
- package/api/internal-routes.js +203 -0
- package/api/ios-local-agent-transport.d.ts +36 -0
- package/api/ios-local-agent-transport.d.ts.map +1 -0
- package/api/ios-local-agent-transport.js +566 -0
- package/api/onboarding-voice-lines.d.ts +23 -0
- package/api/onboarding-voice-lines.d.ts.map +1 -0
- package/api/onboarding-voice-lines.js +8 -0
- package/api/perf-instrument.d.ts +43 -0
- package/api/perf-instrument.d.ts.map +1 -0
- package/api/perf-instrument.js +113 -0
- package/api/response.d.ts.map +1 -1
- package/api/response.js +14 -14
- package/api/runtime-mode-routes.d.ts.map +1 -1
- package/api/runtime-mode-routes.js +2 -2
- package/api/secrets-inventory-routes.js +2 -2
- package/api/secrets-manager-routes.d.ts +1 -1
- package/api/secrets-manager-routes.d.ts.map +1 -1
- package/api/secrets-manager-routes.js +9 -10
- package/api/sensitive-request-routes.js +5 -5
- package/api/server-cors.d.ts.map +1 -1
- package/api/server-cors.js +13 -2
- package/api/server-first-run-helpers.d.ts +26 -0
- package/api/server-first-run-helpers.d.ts.map +1 -0
- package/api/server-first-run-helpers.js +271 -0
- package/api/server-security.js +1 -1
- package/api/server-startup.d.ts.map +1 -1
- package/api/server-startup.js +3 -4
- package/api/server-wallet-trade.js +1 -1
- package/api/server.d.ts +4 -4
- package/api/server.d.ts.map +1 -1
- package/api/server.js +222 -88
- package/api/setup-contract.d.ts +63 -0
- package/api/setup-contract.d.ts.map +1 -0
- package/api/setup-contract.js +39 -0
- package/api/training-benchmarks.d.ts +97 -0
- package/api/training-benchmarks.d.ts.map +1 -0
- package/api/training-benchmarks.js +307 -0
- package/api/workbench-compat-routes.js +2 -2
- package/benchmark/cerebras-autowire.d.ts +28 -0
- package/benchmark/cerebras-autowire.d.ts.map +1 -0
- package/benchmark/cerebras-autowire.js +62 -0
- package/benchmark/lifeops-bench-handler.d.ts +36 -0
- package/benchmark/lifeops-bench-handler.d.ts.map +1 -1
- package/benchmark/lifeops-bench-handler.js +63 -1
- package/benchmark/lifeops-fake-backend.d.ts +39 -0
- package/benchmark/lifeops-fake-backend.d.ts.map +1 -1
- package/benchmark/lifeops-fake-backend.js +993 -21
- package/benchmark/mock-plugin.d.ts.map +1 -1
- package/benchmark/mock-plugin.js +0 -24
- package/benchmark/plugin.d.ts +2 -1
- package/benchmark/plugin.d.ts.map +1 -1
- package/benchmark/plugin.js +989 -68
- package/benchmark/replay-capture.d.ts +2 -2
- package/benchmark/replay-capture.d.ts.map +1 -1
- package/benchmark/replay-capture.js +3 -3
- package/benchmark/server-utils.d.ts +162 -9
- package/benchmark/server-utils.d.ts.map +1 -1
- package/benchmark/server-utils.js +625 -62
- package/benchmark/server.d.ts.map +1 -1
- package/benchmark/server.js +1962 -118
- package/boot-profile.d.ts +3 -0
- package/boot-profile.d.ts.map +1 -0
- package/boot-profile.js +30 -0
- package/browser.d.ts +23 -1
- package/browser.d.ts.map +1 -1
- package/browser.js +20 -1
- package/cli/argv.js +1 -1
- package/cli/banner.js +1 -1
- package/cli/command-format.js +2 -2
- package/cli/doctor/checks.d.ts.map +1 -1
- package/cli/doctor/checks.js +6 -6
- package/cli/plugins-cli.d.ts.map +1 -1
- package/cli/plugins-cli.js +77 -32
- package/cli/profile.d.ts.map +1 -1
- package/cli/profile.js +5 -4
- package/cli/program/build-program.js +4 -4
- package/cli/program/command-registry.d.ts.map +1 -1
- package/cli/program/command-registry.js +13 -11
- package/cli/program/help.js +5 -5
- package/cli/program/preaction.js +5 -5
- package/cli/program/register.auth.d.ts.map +1 -1
- package/cli/program/register.auth.js +6 -12
- package/cli/program/register.capability-router.d.ts +29 -0
- package/cli/program/register.capability-router.d.ts.map +1 -0
- package/cli/program/register.capability-router.js +568 -0
- package/cli/program/register.config.js +1 -1
- package/cli/program/register.configure.d.ts.map +1 -1
- package/cli/program/register.configure.js +1 -1
- package/cli/program/register.dashboard.d.ts.map +1 -1
- package/cli/program/register.dashboard.js +6 -7
- package/cli/program/register.db.d.ts.map +1 -1
- package/cli/program/register.db.js +3 -4
- package/cli/program/register.doctor.js +7 -7
- package/cli/program/register.setup.d.ts.map +1 -1
- package/cli/program/register.setup.js +14 -10
- package/cli/program/register.start.d.ts.map +1 -1
- package/cli/program/register.start.js +5 -3
- package/cli/program/register.subclis.js +3 -3
- package/cli/program/register.update.d.ts +6 -0
- package/cli/program/register.update.d.ts.map +1 -1
- package/cli/program/register.update.js +58 -6
- package/cli/program.js +1 -1
- package/cli/run-main.js +4 -4
- package/config/app-config.d.ts +2 -0
- package/config/app-config.d.ts.map +1 -0
- package/config/app-config.js +1 -0
- package/connectors/capacitor-jsc.d.ts.map +1 -1
- package/connectors/capacitor-jsc.js +16 -10
- package/connectors/capacitor-quickjs.d.ts.map +1 -1
- package/connectors/capacitor-quickjs.js +18 -13
- package/connectors/capacitor-sqlite.d.ts.map +1 -1
- package/connectors/capacitor-sqlite.js +27 -12
- package/dispatch/approval-queue.d.ts +37 -0
- package/dispatch/approval-queue.d.ts.map +1 -0
- package/dispatch/approval-queue.js +25 -0
- package/dispatch/channel-registry.d.ts +30 -0
- package/dispatch/channel-registry.d.ts.map +1 -0
- package/dispatch/channel-registry.js +22 -0
- package/dispatch/connector-registry.d.ts +39 -0
- package/dispatch/connector-registry.d.ts.map +1 -0
- package/dispatch/connector-registry.js +24 -0
- package/dispatch/index.d.ts +14 -0
- package/dispatch/index.d.ts.map +1 -0
- package/dispatch/index.js +13 -0
- package/dispatch/send-policy.d.ts +36 -0
- package/dispatch/send-policy.d.ts.map +1 -0
- package/dispatch/send-policy.js +16 -0
- package/entry.js +28 -11
- package/first-run/first-run-config.d.ts +55 -0
- package/first-run/first-run-config.d.ts.map +1 -0
- package/first-run/first-run-config.js +178 -0
- package/first-run/runtime-target.d.ts +4 -0
- package/first-run/runtime-target.d.ts.map +1 -0
- package/first-run/runtime-target.js +13 -0
- package/index.d.ts +16 -3
- package/index.d.ts.map +1 -1
- package/index.js +57 -33
- package/package.json +159 -50
- package/packaging/debian/apt-repo-config/README.md +18 -0
- package/packaging/debian/apt-repo-config/conf/distributions +11 -0
- package/packaging/flatpak/README.md +26 -16
- package/packaging/flatpak/ai.elizaos.App.metainfo.xml +17 -12
- package/packaging/flatpak/ai.elizaos.App.store.yml +5 -5
- package/packaging/flatpak/ai.elizaos.App.yml +10 -24
- package/packaging/flatpak/elizaos-app-wrapper.store.sh +2 -2
- package/packaging/flatpak/generate-sources.sh +74 -0
- package/packaging/flatpak/node-sources.json +7930 -0
- package/packaging/inno/build-inno.ps1 +34 -9
- package/packaging/msix/AppxManifest.store.xml +1 -1
- package/packaging/msix/README.md +39 -19
- package/packaging/msix/build-msix.ps1 +44 -14
- package/packaging/snap/snapcraft.yaml +22 -21
- package/packaging/test-packaging.sh +2 -2
- package/permissions/types.d.ts +1 -1
- package/permissions/types.js +1 -1
- package/platform/elizaos-agent-browser-stub.d.ts +144 -0
- package/platform/elizaos-agent-browser-stub.d.ts.map +1 -0
- package/platform/elizaos-agent-browser-stub.js +158 -0
- package/platform/elizaos-plugin-elizacloud-browser-stub.d.ts +34 -0
- package/platform/elizaos-plugin-elizacloud-browser-stub.d.ts.map +1 -0
- package/platform/elizaos-plugin-elizacloud-browser-stub.js +51 -0
- package/platform/empty-node-module.d.ts +148 -0
- package/platform/empty-node-module.d.ts.map +1 -1
- package/platform/empty-node-module.js +140 -3
- package/platform/ios-runtime-backends.d.ts +83 -0
- package/platform/ios-runtime-backends.d.ts.map +1 -0
- package/platform/ios-runtime-backends.js +133 -0
- package/platform/ios-runtime-bridge.d.ts +15 -0
- package/platform/ios-runtime-bridge.d.ts.map +1 -0
- package/platform/ios-runtime-bridge.js +527 -0
- package/platform/native-library-policy.d.ts +23 -0
- package/platform/native-library-policy.d.ts.map +1 -0
- package/platform/native-library-policy.js +112 -0
- package/platform/native-plugin-entrypoints.d.ts +19 -0
- package/platform/native-plugin-entrypoints.d.ts.map +1 -0
- package/platform/native-plugin-entrypoints.js +29 -0
- package/platforms/android/README.md +68 -10
- package/platforms/android/app/build.gradle +268 -3
- package/platforms/android/app/capacitor.build.gradle +18 -1
- package/platforms/android/app/proguard-rules.pro +17 -2
- package/platforms/android/app/src/androidTest/java/ai/elizaos/app/ElizaOsInstrumentedTest.java +1 -1
- package/platforms/android/app/src/main/AndroidManifest.xml +334 -17
- package/platforms/android/app/src/main/assets/runners/eliza-tasks.js +177 -0
- package/platforms/android/app/src/main/elizavoice-jni/CMakeLists.txt +100 -0
- package/platforms/android/app/src/main/elizavoice-jni/elizavoice-jni.cpp +1349 -0
- package/platforms/android/app/src/main/java/ai/elizaos/app/AgentPlugin.java +111 -171
- package/platforms/android/app/src/main/java/ai/elizaos/app/AndroidVirtualizationBridge.java +284 -0
- package/platforms/android/app/src/main/java/ai/elizaos/app/BatteryOptimizationPlugin.java +95 -0
- package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaAccessibilityService.java +55 -0
- package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaAgentService.java +1198 -141
- package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaAndroidSystemBridge.java +83 -0
- package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaAssistActivity.java +50 -1
- package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaBootReceiver.java +90 -8
- package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaBrowserActivity.java +2 -2
- package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaCalendarActivity.java +1 -1
- package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaCameraActivity.java +1 -1
- package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaClockActivity.java +2 -2
- package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaContactsActivity.java +1 -1
- package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaDialActivity.java +1 -1
- package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaInCallService.java +1 -1
- package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaMmsReceiver.java +1 -1
- package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaNativeBridge.java +22 -0
- package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaNotificationListenerService.java +45 -0
- package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaQuickActionsWidgetProvider.java +68 -0
- package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaShareActivity.java +132 -0
- package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaSmsComposeActivity.java +1 -1
- package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaSmsGatewayService.java +268 -0
- package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaSmsReceiver.java +12 -1
- package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaTasksWorker.java +194 -0
- package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaVoiceCaptureService.java +198 -0
- package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaVoiceNative.java +205 -0
- package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaVoicePlugin.java +498 -0
- package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaVoiceTileService.java +39 -0
- package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaWorkScheduler.java +60 -0
- package/platforms/android/app/src/main/java/ai/elizaos/app/GatewayConnectionService.java +53 -19
- package/platforms/android/app/src/main/java/ai/elizaos/app/MainActivity.java +160 -33
- package/platforms/android/app/src/main/java/ai/elizaos/app/ResourceProbePlugin.java +169 -0
- package/platforms/android/app/src/main/java/ai/elizaos/app/VoiceCapturePlugin.java +119 -0
- package/platforms/android/app/src/main/res/drawable/eliza_widget_background.xml +10 -0
- package/platforms/android/app/src/main/res/drawable/eliza_widget_button_background.xml +13 -0
- package/platforms/android/app/src/main/res/drawable/splash.png +0 -0
- package/platforms/android/app/src/main/res/drawable-land-hdpi/splash.png +0 -0
- package/platforms/android/app/src/main/res/drawable-land-mdpi/splash.png +0 -0
- package/platforms/android/app/src/main/res/drawable-land-xhdpi/splash.png +0 -0
- package/platforms/android/app/src/main/res/drawable-land-xxhdpi/splash.png +0 -0
- package/platforms/android/app/src/main/res/drawable-land-xxxhdpi/splash.png +0 -0
- package/platforms/android/app/src/main/res/drawable-port-hdpi/splash.png +0 -0
- package/platforms/android/app/src/main/res/drawable-port-mdpi/splash.png +0 -0
- package/platforms/android/app/src/main/res/drawable-port-xhdpi/splash.png +0 -0
- package/platforms/android/app/src/main/res/drawable-port-xxhdpi/splash.png +0 -0
- package/platforms/android/app/src/main/res/drawable-port-xxxhdpi/splash.png +0 -0
- package/platforms/android/app/src/main/res/layout/eliza_quick_actions_widget.xml +86 -0
- package/platforms/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +2 -1
- package/platforms/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml +2 -1
- package/platforms/android/app/src/main/res/mipmap-hdpi/ic_launcher.png +0 -0
- package/platforms/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png +0 -0
- package/platforms/android/app/src/main/res/mipmap-hdpi/ic_launcher_monochrome.png +0 -0
- package/platforms/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png +0 -0
- package/platforms/android/app/src/main/res/mipmap-mdpi/ic_launcher.png +0 -0
- package/platforms/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png +0 -0
- package/platforms/android/app/src/main/res/mipmap-mdpi/ic_launcher_monochrome.png +0 -0
- package/platforms/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png +0 -0
- package/platforms/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png +0 -0
- package/platforms/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png +0 -0
- package/platforms/android/app/src/main/res/mipmap-xhdpi/ic_launcher_monochrome.png +0 -0
- package/platforms/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png +0 -0
- package/platforms/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png +0 -0
- package/platforms/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png +0 -0
- package/platforms/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_monochrome.png +0 -0
- package/platforms/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png +0 -0
- package/platforms/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png +0 -0
- package/platforms/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png +0 -0
- package/platforms/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_monochrome.png +0 -0
- package/platforms/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png +0 -0
- package/platforms/android/app/src/main/res/values/android_app_actions.xml +48 -0
- package/platforms/android/app/src/main/res/values/colors.xml +8 -0
- package/platforms/android/app/src/main/res/values/ic_launcher_background.xml +2 -2
- package/platforms/android/app/src/main/res/values/strings.xml +2 -2
- package/platforms/android/app/src/main/res/values/styles.xml +25 -1
- package/platforms/android/app/src/main/res/xml/eliza_accessibility_service.xml +9 -0
- package/platforms/android/app/src/main/res/xml/eliza_quick_actions_widget.xml +13 -0
- package/platforms/android/app/src/main/res/xml/shortcuts.xml +121 -0
- package/platforms/android/build.gradle +2 -2
- package/platforms/android/capacitor-cordova-android-plugins/build.gradle +9 -3
- package/platforms/android/capacitor-cordova-android-plugins/cordova.variables.gradle +6 -2
- package/platforms/android/capacitor-cordova-android-plugins/src/main/AndroidManifest.xml +7 -2
- package/platforms/android/capacitor-cordova-android-plugins/src/main/java/.gitkeep +0 -1
- package/platforms/android/capacitor.settings.gradle +66 -16
- package/platforms/android/gradle.properties +1 -0
- package/platforms/android/update-manifest/generate-manifest.mjs +97 -0
- package/platforms/android/update-manifest/schema.json +26 -0
- package/platforms/apple-store-entitlements.reviewed.json +155 -0
- package/platforms/electrobun/.generated/brand-config.json +3 -2
- package/platforms/electrobun/LICENSE +21 -0
- package/platforms/electrobun/README.md +15 -1
- package/platforms/electrobun/assets/appIcon.icns +0 -0
- package/platforms/electrobun/assets/appIcon.ico +0 -0
- package/platforms/electrobun/assets/appIcon.iconset/icon_128x128.png +0 -0
- package/platforms/electrobun/assets/appIcon.iconset/icon_128x128@2x.png +0 -0
- package/platforms/electrobun/assets/appIcon.iconset/icon_16x16.png +0 -0
- package/platforms/electrobun/assets/appIcon.iconset/icon_16x16@2x.png +0 -0
- package/platforms/electrobun/assets/appIcon.iconset/icon_256x256.png +0 -0
- package/platforms/electrobun/assets/appIcon.iconset/icon_256x256@2x.png +0 -0
- package/platforms/electrobun/assets/appIcon.iconset/icon_32x32.png +0 -0
- package/platforms/electrobun/assets/appIcon.iconset/icon_32x32@2x.png +0 -0
- package/platforms/electrobun/assets/appIcon.iconset/icon_512x512.png +0 -0
- package/platforms/electrobun/assets/brand-config.json +6 -6
- package/platforms/electrobun/biome.json +9 -9
- package/platforms/electrobun/docs/capability-collapse-matrix.json +318 -0
- package/platforms/electrobun/docs/capability-collapse-matrix.md +129 -0
- package/platforms/electrobun/docs/capability-routing.md +86 -0
- package/platforms/electrobun/docs/convergence-audit.json +3505 -0
- package/platforms/electrobun/docs/convergence-audit.md +694 -0
- package/platforms/electrobun/docs/database-boot-policy.md +90 -0
- package/platforms/electrobun/docs/riscv64-port.md +175 -0
- package/platforms/electrobun/docs/startup-first-run-cleanup.md +18 -0
- package/platforms/electrobun/docs/trace-first-annotations.md +52 -0
- package/platforms/electrobun/docs/ui-boundary-audit.json +580 -0
- package/platforms/electrobun/docs/ui-boundary-audit.md +257 -0
- package/platforms/electrobun/electrobun.config.ts +592 -364
- package/platforms/electrobun/entitlements/JUSTIFICATIONS.md +141 -0
- package/platforms/electrobun/entitlements/README.md +34 -6
- package/platforms/electrobun/entitlements/mas-bun.entitlements +15 -0
- package/platforms/electrobun/entitlements/mas.entitlements +6 -4
- package/platforms/electrobun/native/macos/window-effects.mm +1522 -0
- package/platforms/electrobun/package.json +18 -12
- package/platforms/electrobun/remotes/fs/README.md +70 -0
- package/platforms/electrobun/remotes/fs/electrobun.config.ts +38 -0
- package/platforms/electrobun/remotes/fs/package.json +12 -0
- package/platforms/electrobun/remotes/fs/plugin.json +25 -0
- package/platforms/electrobun/remotes/fs/src/bun/errors.ts +57 -0
- package/platforms/electrobun/remotes/fs/src/bun/file-limits.ts +50 -0
- package/platforms/electrobun/remotes/fs/src/bun/fs-service.ts +389 -0
- package/platforms/electrobun/remotes/fs/src/bun/path-guard.ts +270 -0
- package/platforms/electrobun/remotes/fs/src/bun/protocol.ts +149 -0
- package/platforms/electrobun/remotes/fs/src/bun/worker.ts +174 -0
- package/platforms/electrobun/remotes/fs/src/dev/phase5-smoke.ts +171 -0
- package/platforms/electrobun/remotes/fs/src/web/index.html +8 -0
- package/platforms/electrobun/remotes/git/README.md +75 -0
- package/platforms/electrobun/remotes/git/electrobun.config.ts +44 -0
- package/platforms/electrobun/remotes/git/package.json +12 -0
- package/platforms/electrobun/remotes/git/plugin.json +31 -0
- package/platforms/electrobun/remotes/git/src/bun/errors.ts +69 -0
- package/platforms/electrobun/remotes/git/src/bun/git-command.ts +156 -0
- package/platforms/electrobun/remotes/git/src/bun/git-service.ts +446 -0
- package/platforms/electrobun/remotes/git/src/bun/operation-history.ts +124 -0
- package/platforms/electrobun/remotes/git/src/bun/protocol.ts +252 -0
- package/platforms/electrobun/remotes/git/src/bun/worker.ts +316 -0
- package/platforms/electrobun/remotes/git/src/dev/phase7-smoke.ts +141 -0
- package/platforms/electrobun/remotes/git/src/web/index.html +8 -0
- package/platforms/electrobun/remotes/local-model/README.md +138 -0
- package/platforms/electrobun/remotes/local-model/electrobun.config.ts +46 -0
- package/platforms/electrobun/remotes/local-model/package.json +12 -0
- package/platforms/electrobun/remotes/local-model/plugin.json +33 -0
- package/platforms/electrobun/remotes/local-model/src/bun/download-state.ts +115 -0
- package/platforms/electrobun/remotes/local-model/src/bun/eliza1-catalog.ts +425 -0
- package/platforms/electrobun/remotes/local-model/src/bun/errors.ts +74 -0
- package/platforms/electrobun/remotes/local-model/src/bun/hf-eliza1-client.ts +169 -0
- package/platforms/electrobun/remotes/local-model/src/bun/local-inference-api-client.ts +245 -0
- package/platforms/electrobun/remotes/local-model/src/bun/model-service.ts +490 -0
- package/platforms/electrobun/remotes/local-model/src/bun/protocol.ts +301 -0
- package/platforms/electrobun/remotes/local-model/src/bun/worker.ts +248 -0
- package/platforms/electrobun/remotes/local-model/src/dev/phase8-smoke.ts +117 -0
- package/platforms/electrobun/remotes/local-model/src/web/index.html +13 -0
- package/platforms/electrobun/remotes/pty/README.md +65 -0
- package/platforms/electrobun/remotes/pty/electrobun.config.ts +47 -0
- package/platforms/electrobun/remotes/pty/package.json +12 -0
- package/platforms/electrobun/remotes/pty/plugin.json +34 -0
- package/platforms/electrobun/remotes/pty/src/bun/errors.ts +57 -0
- package/platforms/electrobun/remotes/pty/src/bun/output-buffer.ts +127 -0
- package/platforms/electrobun/remotes/pty/src/bun/protocol.ts +192 -0
- package/platforms/electrobun/remotes/pty/src/bun/pty-service.ts +562 -0
- package/platforms/electrobun/remotes/pty/src/bun/worker.ts +218 -0
- package/platforms/electrobun/remotes/pty/src/dev/phase6-smoke.ts +127 -0
- package/platforms/electrobun/remotes/pty/src/web/index.html +8 -0
- package/platforms/electrobun/remotes/runtime/README.md +370 -0
- package/platforms/electrobun/remotes/runtime/electrobun.config.ts +48 -0
- package/platforms/electrobun/remotes/runtime/package.json +14 -0
- package/platforms/electrobun/remotes/runtime/plugin.json +30 -0
- package/platforms/electrobun/remotes/runtime/src/bun/api-client.ts +620 -0
- package/platforms/electrobun/remotes/runtime/src/bun/errors.ts +45 -0
- package/platforms/electrobun/remotes/runtime/src/bun/log-buffer.ts +33 -0
- package/platforms/electrobun/remotes/runtime/src/bun/protocol.ts +366 -0
- package/platforms/electrobun/remotes/runtime/src/bun/route-discovery.ts +419 -0
- package/platforms/electrobun/remotes/runtime/src/bun/runtime-manager.ts +423 -0
- package/platforms/electrobun/remotes/runtime/src/bun/sse-parser.ts +99 -0
- package/platforms/electrobun/remotes/runtime/src/bun/stream-manager.ts +887 -0
- package/platforms/electrobun/remotes/runtime/src/bun/worker.ts +1231 -0
- package/platforms/electrobun/remotes/runtime/src/dev/phase1-smoke.ts +34 -0
- package/platforms/electrobun/remotes/runtime/src/dev/phase2-smoke.ts +86 -0
- package/platforms/electrobun/remotes/runtime/src/dev/phase3-smoke.ts +141 -0
- package/platforms/electrobun/remotes/runtime/src/web/index.css +187 -0
- package/platforms/electrobun/remotes/runtime/src/web/index.html +76 -0
- package/platforms/electrobun/remotes/runtime/src/web/index.ts +192 -0
- package/platforms/electrobun/remotes/surface/README.md +201 -0
- package/platforms/electrobun/remotes/surface/electrobun.config.ts +38 -0
- package/platforms/electrobun/remotes/surface/package.json +12 -0
- package/platforms/electrobun/remotes/surface/plugin.json +28 -0
- package/platforms/electrobun/remotes/surface/src/bun/worker.ts +132 -0
- package/platforms/electrobun/remotes/surface/src/dev/phase4-smoke.ts +566 -0
- package/platforms/electrobun/remotes/surface/src/protocol/event-types.ts +84 -0
- package/platforms/electrobun/remotes/surface/src/protocol/runtime-client.ts +673 -0
- package/platforms/electrobun/remotes/surface/src/web/app.ts +595 -0
- package/platforms/electrobun/remotes/surface/src/web/index.css +460 -0
- package/platforms/electrobun/remotes/surface/src/web/index.html +466 -0
- package/platforms/electrobun/remotes/surface/src/web/index.ts +5 -0
- package/platforms/electrobun/remotes/surface/src/web/render.ts +455 -0
- package/platforms/electrobun/remotes/surface/src/web/state.ts +427 -0
- package/platforms/electrobun/scripts/build-macos-effects.sh +4 -0
- package/platforms/electrobun/scripts/ensure-build-folder.ts +28 -0
- package/platforms/electrobun/scripts/ensure-whisper-gguf.sh +55 -0
- package/platforms/electrobun/scripts/ensure-whisper-model.sh +22 -80
- package/platforms/electrobun/scripts/generate-convergence-audit.ts +1203 -0
- package/platforms/electrobun/scripts/local-adhoc-sign-macos.ts +159 -159
- package/platforms/electrobun/scripts/postwrap-diagnostics.ts +424 -339
- package/platforms/electrobun/scripts/postwrap-sign-runtime-macos.ts +302 -271
- package/platforms/electrobun/scripts/smoke-test-windows.ps1 +17 -16
- package/platforms/electrobun/scripts/smoke-test.sh +5 -7
- package/platforms/electrobun/scripts/sync-web-assets.mjs +13 -13
- package/platforms/electrobun/scripts/verify-rpc-handlers.ts +109 -110
- package/platforms/electrobun/scripts/verify-windows-installer-proof.ps1 +3 -8
- package/platforms/electrobun/src/__stubs__/bun-ffi.ts +31 -31
- package/platforms/electrobun/src/__stubs__/electrobun-bun.ts +1 -1
- package/platforms/electrobun/src/agent-ready-state.ts +8 -8
- package/platforms/electrobun/src/agent-reset-from-main.test.ts +162 -0
- package/platforms/electrobun/src/agent-reset-from-main.ts +62 -62
- package/platforms/electrobun/src/agent-status-rpc.test.ts +95 -0
- package/platforms/electrobun/src/agent-status-rpc.ts +156 -0
- package/platforms/electrobun/src/api-base.test.ts +247 -0
- package/platforms/electrobun/src/api-base.ts +202 -93
- package/platforms/electrobun/src/application-menu-action-registry.ts +9 -9
- package/platforms/electrobun/src/application-menu.ts +348 -348
- package/platforms/electrobun/src/background-notice.ts +36 -36
- package/platforms/electrobun/src/boot-progress.test.ts +188 -0
- package/platforms/electrobun/src/boot-progress.ts +111 -0
- package/platforms/electrobun/src/brand-config.test.ts +39 -0
- package/platforms/electrobun/src/brand-config.ts +141 -129
- package/platforms/electrobun/src/bridge/browser-tabs-renderer-registry.ts +28 -28
- package/platforms/electrobun/src/bridge/electrobun-boot-config.ts +42 -0
- package/platforms/electrobun/src/bridge/electrobun-crypto-ready.ts +120 -0
- package/platforms/electrobun/src/bridge/electrobun-direct-rpc.ts +342 -357
- package/platforms/electrobun/src/bridge/electrobun-stub.ts +13 -13
- package/platforms/electrobun/src/browser-workspace-bridge-server.ts +285 -243
- package/platforms/electrobun/src/cloud-auth-window.ts +136 -136
- package/platforms/electrobun/src/cloud-disconnect-from-main.ts +90 -90
- package/platforms/electrobun/src/config-and-auth-rpc.test.ts +256 -0
- package/platforms/electrobun/src/config-and-auth-rpc.ts +302 -0
- package/platforms/electrobun/src/conversations-and-character-rpc.test.ts +185 -0
- package/platforms/electrobun/src/conversations-and-character-rpc.ts +131 -0
- package/platforms/electrobun/src/dashboard-rpc.test.ts +200 -0
- package/platforms/electrobun/src/dashboard-rpc.ts +344 -0
- package/platforms/electrobun/src/database/database-lock.ts +141 -0
- package/platforms/electrobun/src/database/database-mode.ts +149 -0
- package/platforms/electrobun/src/database/database-recovery.ts +72 -0
- package/platforms/electrobun/src/database/database-snapshot.ts +190 -0
- package/platforms/electrobun/src/database/database.test.ts +196 -0
- package/platforms/electrobun/src/database/index.ts +5 -0
- package/platforms/electrobun/src/database/pglite-paths.ts +100 -0
- package/platforms/electrobun/src/desktop-deep-link-events.test.ts +30 -0
- package/platforms/electrobun/src/desktop-deep-link-events.ts +17 -0
- package/platforms/electrobun/src/desktop-http-request.test.ts +73 -73
- package/platforms/electrobun/src/desktop-http-request.ts +85 -85
- package/platforms/electrobun/src/desktop-pill-config.test.ts +27 -0
- package/platforms/electrobun/src/desktop-pill-config.ts +40 -0
- package/platforms/electrobun/src/desktop-test-bridge-server.ts +204 -204
- package/platforms/electrobun/src/desktop-tray-config.test.ts +87 -0
- package/platforms/electrobun/src/desktop-tray-config.ts +84 -0
- package/platforms/electrobun/src/devtools-layout.ts +41 -41
- package/platforms/electrobun/src/diagnostic-format.test.ts +71 -0
- package/platforms/electrobun/src/diagnostic-format.ts +75 -36
- package/platforms/electrobun/src/dynamic-view-rpc-schema.test.ts +37 -0
- package/platforms/electrobun/src/dynamic-views/README.md +44 -0
- package/platforms/electrobun/src/dynamic-views/demo/agent-run-trace.html +135 -0
- package/platforms/electrobun/src/dynamic-views/errors.ts +29 -0
- package/platforms/electrobun/src/dynamic-views/host.test.ts +353 -0
- package/platforms/electrobun/src/dynamic-views/host.ts +332 -0
- package/platforms/electrobun/src/dynamic-views/index.ts +57 -0
- package/platforms/electrobun/src/dynamic-views/kiosk-canvas.ts +89 -0
- package/platforms/electrobun/src/dynamic-views/registry.test.ts +139 -0
- package/platforms/electrobun/src/dynamic-views/registry.ts +196 -0
- package/platforms/electrobun/src/dynamic-views/session-manager.test.ts +355 -0
- package/platforms/electrobun/src/dynamic-views/session-manager.ts +348 -0
- package/platforms/electrobun/src/dynamic-views/types.ts +105 -0
- package/platforms/electrobun/src/electrobun-boot-config.test.ts +50 -0
- package/platforms/electrobun/src/electrobun-config.test.ts +62 -0
- package/platforms/electrobun/src/electrobun-crypto-ready.test.ts +65 -0
- package/platforms/electrobun/src/electrobun-window-options.ts +25 -0
- package/platforms/electrobun/src/extension-rpc.test.ts +88 -0
- package/platforms/electrobun/src/extension-rpc.ts +102 -0
- package/platforms/electrobun/src/fatal-shutdown.test.ts +10 -10
- package/platforms/electrobun/src/fatal-shutdown.ts +1 -1
- package/platforms/electrobun/src/first-party-remotes.test.ts +169 -0
- package/platforms/electrobun/src/first-party-remotes.ts +297 -0
- package/platforms/electrobun/src/first-run-rpc.test.ts +192 -0
- package/platforms/electrobun/src/first-run-rpc.ts +146 -0
- package/platforms/electrobun/src/floating-chat-window.ts +181 -181
- package/platforms/electrobun/src/inbox-rpc.test.ts +123 -0
- package/platforms/electrobun/src/inbox-rpc.ts +158 -0
- package/platforms/electrobun/src/index.ts +2555 -2096
- package/platforms/electrobun/src/kiosk-mode.ts +50 -0
- package/platforms/electrobun/src/launch/index.ts +4 -0
- package/platforms/electrobun/src/launch/launch-dynamic-view.ts +37 -0
- package/platforms/electrobun/src/launch/launch-orchestrator.test.ts +224 -0
- package/platforms/electrobun/src/launch/launch-orchestrator.ts +456 -0
- package/platforms/electrobun/src/launch/launch-store.test.ts +97 -0
- package/platforms/electrobun/src/launch/launch-store.ts +134 -0
- package/platforms/electrobun/src/launch/types.ts +103 -0
- package/platforms/electrobun/src/launch/views/launch-diagnostics.html +205 -0
- package/platforms/electrobun/src/lifecycle/agent-ready-publish.test.ts +50 -0
- package/platforms/electrobun/src/lifecycle/agent-ready-publish.ts +27 -0
- package/platforms/electrobun/src/lifecycle/api-base-owner.ts +42 -31
- package/platforms/electrobun/src/lifecycle/desktop-session-prime.ts +44 -44
- package/platforms/electrobun/src/logger.ts +14 -14
- package/platforms/electrobun/src/main-window-runtime.ts +83 -83
- package/platforms/electrobun/src/main-window-session.test.ts +109 -0
- package/platforms/electrobun/src/main-window-session.ts +87 -51
- package/platforms/electrobun/src/menu-reset-from-main.ts +158 -158
- package/platforms/electrobun/src/native/agent-env.test.ts +52 -0
- package/platforms/electrobun/src/native/agent-runtime-layout.test.ts +42 -0
- package/platforms/electrobun/src/native/agent-state-dir.test.ts +91 -0
- package/platforms/electrobun/src/native/agent.ts +2122 -1682
- package/platforms/electrobun/src/native/auth-bridge.test.ts +67 -0
- package/platforms/electrobun/src/native/auth-bridge.ts +464 -360
- package/platforms/electrobun/src/native/browser-workspace.ts +723 -471
- package/platforms/electrobun/src/native/camera.ts +50 -50
- package/platforms/electrobun/src/native/canvas.ts +444 -445
- package/platforms/electrobun/src/native/credentials.ts +673 -616
- package/platforms/electrobun/src/native/desktop-window.test.ts +300 -0
- package/platforms/electrobun/src/native/desktop.ts +2196 -2156
- package/platforms/electrobun/src/native/editor-bridge.ts +201 -201
- package/platforms/electrobun/src/native/file-watcher.ts +154 -154
- package/platforms/electrobun/src/native/gateway.ts +179 -180
- package/platforms/electrobun/src/native/gpu-window.ts +256 -256
- package/platforms/electrobun/src/native/index.ts +76 -74
- package/platforms/electrobun/src/native/location.test.ts +44 -0
- package/platforms/electrobun/src/native/location.ts +90 -80
- package/platforms/electrobun/src/native/loopback-port.ts +60 -60
- package/platforms/electrobun/src/native/mac-window-effects.ts +166 -104
- package/platforms/electrobun/src/native/music-player.ts +38 -38
- package/platforms/electrobun/src/native/permissions-shared.ts +249 -150
- package/platforms/electrobun/src/native/permissions.ts +301 -208
- package/platforms/electrobun/src/native/power-state.ts +129 -129
- package/platforms/electrobun/src/native/remote-plugin-host.test.ts +1394 -0
- package/platforms/electrobun/src/native/remote-plugin-host.ts +1531 -0
- package/platforms/electrobun/src/native/screencapture.ts +667 -573
- package/platforms/electrobun/src/native/steward.ts +207 -204
- package/platforms/electrobun/src/native/swabble.ts +68 -324
- package/platforms/electrobun/src/native/talkmode.ts +253 -422
- package/platforms/electrobun/src/native/webgpu-browser-support.test.ts +18 -0
- package/platforms/electrobun/src/native/webgpu-browser-support.ts +165 -147
- package/platforms/electrobun/src/native/whisper-env.test.ts +71 -0
- package/platforms/electrobun/src/native/whisper-env.ts +68 -0
- package/platforms/electrobun/src/native-onboarding.ts +270 -0
- package/platforms/electrobun/src/onboarding-overlay-window.ts +141 -0
- package/platforms/electrobun/src/persisted-deployment.ts +91 -0
- package/platforms/electrobun/src/pill-window.test.ts +91 -0
- package/platforms/electrobun/src/pill-window.ts +99 -0
- package/platforms/electrobun/src/preload-validation.ts +44 -44
- package/platforms/electrobun/src/preload.js +1 -1
- package/platforms/electrobun/src/print-electrobun-dev-settings-banner.ts +120 -120
- package/platforms/electrobun/src/renderer-api-proxy.test.ts +73 -0
- package/platforms/electrobun/src/renderer-api-proxy.ts +86 -0
- package/platforms/electrobun/src/renderer-static.test.ts +53 -0
- package/platforms/electrobun/src/renderer-static.ts +144 -57
- package/platforms/electrobun/src/rpc-handler-slices.ts +121 -0
- package/platforms/electrobun/src/rpc-handlers.test.ts +267 -0
- package/platforms/electrobun/src/rpc-handlers.ts +1306 -913
- package/platforms/electrobun/src/rpc-parse-utils.ts +57 -0
- package/platforms/electrobun/src/rpc-port-resolver.test.ts +45 -0
- package/platforms/electrobun/src/rpc-port-resolver.ts +31 -0
- package/platforms/electrobun/src/rpc-schema.ts +2556 -1619
- package/platforms/electrobun/src/runtime-layout.ts +105 -105
- package/platforms/electrobun/src/runtime-permissions.ts +95 -95
- package/platforms/electrobun/src/runtime-rpc.test.ts +126 -0
- package/platforms/electrobun/src/runtime-rpc.ts +237 -0
- package/platforms/electrobun/src/screenshot-dev-server.ts +87 -87
- package/platforms/electrobun/src/settings-mutations-rpc.test.ts +193 -0
- package/platforms/electrobun/src/settings-mutations-rpc.ts +220 -0
- package/platforms/electrobun/src/startup-trace.ts +274 -270
- package/platforms/electrobun/src/subscription-rpc.test.ts +89 -0
- package/platforms/electrobun/src/subscription-rpc.ts +192 -0
- package/platforms/electrobun/src/surface-windows.test.ts +355 -0
- package/platforms/electrobun/src/surface-windows.ts +410 -410
- package/platforms/electrobun/src/trace/README.md +73 -0
- package/platforms/electrobun/src/trace/errors.ts +21 -0
- package/platforms/electrobun/src/trace/index.ts +40 -0
- package/platforms/electrobun/src/trace/trace-dynamic-view.ts +40 -0
- package/platforms/electrobun/src/trace/trace-host-requests.ts +473 -0
- package/platforms/electrobun/src/trace/trace-service.test.ts +186 -0
- package/platforms/electrobun/src/trace/trace-service.ts +324 -0
- package/platforms/electrobun/src/trace/trace-store.test.ts +141 -0
- package/platforms/electrobun/src/trace/trace-store.ts +551 -0
- package/platforms/electrobun/src/trace/types.ts +250 -0
- package/platforms/electrobun/src/trace/views/agent-run-trace.html +311 -0
- package/platforms/electrobun/src/types/web-speech.d.ts +28 -28
- package/platforms/electrobun/src/types.ts +5 -5
- package/platforms/electrobun/src/update-availability.test.ts +72 -0
- package/platforms/electrobun/src/update-availability.ts +90 -0
- package/platforms/electrobun/src/update-rpc.test.ts +83 -0
- package/platforms/electrobun/src/update-rpc.ts +123 -0
- package/platforms/electrobun/src/voice/README.md +184 -0
- package/platforms/electrobun/src/voice/errors.ts +42 -0
- package/platforms/electrobun/src/voice/index.ts +78 -0
- package/platforms/electrobun/src/voice/types.ts +316 -0
- package/platforms/electrobun/src/voice/voice-host-requests.ts +259 -0
- package/platforms/electrobun/src/voice/voice-latency-budget.test.ts +66 -0
- package/platforms/electrobun/src/voice/voice-latency-budget.ts +243 -0
- package/platforms/electrobun/src/voice/voice-live-validation.test.ts +352 -0
- package/platforms/electrobun/src/voice/voice-live-validation.ts +838 -0
- package/platforms/electrobun/src/voice/voice-pipeline.ts +250 -0
- package/platforms/electrobun/src/voice/voice-playback-adapter.ts +31 -0
- package/platforms/electrobun/src/voice/voice-runtime-adapter.test.ts +213 -0
- package/platforms/electrobun/src/voice/voice-runtime-adapter.ts +686 -0
- package/platforms/electrobun/src/voice/voice-service.test.ts +561 -0
- package/platforms/electrobun/src/voice/voice-service.ts +1027 -0
- package/platforms/electrobun/src/voice/voice-stream-coordinator.test.ts +115 -0
- package/platforms/electrobun/src/voice/voice-stream-coordinator.ts +270 -0
- package/platforms/electrobun/src/voice/voice-trace.ts +97 -0
- package/platforms/electrobun/src/voice/voice-tts-chunker.test.ts +91 -0
- package/platforms/electrobun/src/voice/voice-tts-chunker.ts +194 -0
- package/platforms/electrobun/src/windows-cef-profile.ts +88 -88
- package/platforms/electrobun/tsconfig.json +73 -13
- package/platforms/electrobun/update-channels.json +22 -0
- package/platforms/electrobun/vitest.electrobun.config.ts +72 -42
- package/platforms/ios/App/App/App.entitlements +4 -0
- package/platforms/ios/App/App/AppDelegate.swift +80 -18
- package/platforms/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-ios-marketing-1024.png +0 -0
- package/platforms/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-ipad-20x20@1x.png +0 -0
- package/platforms/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-ipad-20x20@2x.png +0 -0
- package/platforms/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-ipad-29x29@1x.png +0 -0
- package/platforms/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-ipad-29x29@2x.png +0 -0
- package/platforms/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-ipad-40x40@1x.png +0 -0
- package/platforms/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-ipad-40x40@2x.png +0 -0
- package/platforms/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-ipad-76x76@1x.png +0 -0
- package/platforms/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-ipad-76x76@2x.png +0 -0
- package/platforms/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-ipad-83_5x83_5@2x.png +0 -0
- package/platforms/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-iphone-20x20@2x.png +0 -0
- package/platforms/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-iphone-20x20@3x.png +0 -0
- package/platforms/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-iphone-29x29@2x.png +0 -0
- package/platforms/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-iphone-29x29@3x.png +0 -0
- package/platforms/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-iphone-40x40@2x.png +0 -0
- package/platforms/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-iphone-40x40@3x.png +0 -0
- package/platforms/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-iphone-60x60@2x.png +0 -0
- package/platforms/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-iphone-60x60@3x.png +0 -0
- package/platforms/ios/App/App/Base.lproj/LaunchScreen.storyboard +1 -4
- package/platforms/ios/App/App/ComputerUseBridge.swift +589 -0
- package/platforms/ios/App/App/DeviceActivityMonitorExtension/DeviceActivityMonitorExtension.entitlements +12 -0
- package/platforms/ios/App/App/DeviceActivityMonitorExtension/DeviceActivityMonitorExtension.swift +34 -0
- package/platforms/ios/App/App/DeviceActivityMonitorExtension/Info.plist +29 -0
- package/platforms/ios/App/App/DeviceActivityReportExtension/DeviceActivityReportExtension.entitlements +12 -0
- package/platforms/ios/App/App/DeviceActivityReportExtension/DeviceActivityReportExtension.swift +53 -0
- package/platforms/ios/App/App/DeviceActivityReportExtension/Info.plist +27 -0
- package/platforms/ios/App/App/ElizaAppIntents.swift +183 -0
- package/platforms/ios/App/App/ElizaIntentPlugin.swift +342 -5
- package/platforms/ios/App/App/Info.plist +17 -1
- package/platforms/ios/App/App/runners/eliza-tasks.js +177 -0
- package/platforms/ios/App/App.xcodeproj/project.pbxproj +262 -6
- package/platforms/ios/App/BroadcastExtension/SampleHandler.swift +100 -0
- package/platforms/ios/App/Podfile +5 -0
- package/platforms/ios/App/Podfile.lock +83 -59
- package/register-runtime-hooks.js +11 -5
- package/registry/app-registry.d.ts +14 -0
- package/registry/app-registry.d.ts.map +1 -0
- package/registry/app-registry.js +29 -0
- package/registry/entries/apps/app-polymarket.json +31 -0
- package/registry/entries/apps/clawville.json +27 -0
- package/registry/entries/apps/companion.json +28 -0
- package/registry/entries/apps/database-viewer.json +27 -0
- package/registry/entries/apps/defense-of-the-agents.json +27 -0
- package/registry/entries/apps/documents.json +30 -0
- package/registry/entries/apps/feed.json +27 -0
- package/registry/entries/apps/hyperliquid.json +31 -0
- package/registry/entries/apps/log-viewer.json +27 -0
- package/registry/entries/apps/memory-viewer.json +27 -0
- package/registry/entries/apps/model-tester.json +31 -0
- package/registry/entries/apps/plugin-viewer.json +27 -0
- package/registry/entries/apps/relationship-viewer.json +27 -0
- package/registry/entries/apps/runtime-debugger.json +27 -0
- package/registry/entries/apps/shopify.json +31 -0
- package/registry/entries/apps/skills-viewer.json +27 -0
- package/registry/entries/apps/steward.json +31 -0
- package/registry/entries/apps/training.json +54 -0
- package/registry/entries/apps/trajectory-viewer.json +27 -0
- package/registry/entries/apps/vincent.json +31 -0
- package/registry/entries/connectors/bluebubbles.json +99 -0
- package/registry/entries/connectors/bluesky.json +173 -0
- package/registry/entries/connectors/discord.json +119 -0
- package/registry/entries/connectors/farcaster.json +174 -0
- package/registry/entries/connectors/feishu.json +79 -0
- package/registry/entries/connectors/google-chat.json +120 -0
- package/registry/entries/connectors/google.json +82 -0
- package/registry/entries/connectors/imessage.json +96 -0
- package/registry/entries/connectors/instagram.json +64 -0
- package/registry/entries/connectors/line.json +86 -0
- package/registry/entries/connectors/matrix.json +94 -0
- package/registry/entries/connectors/mattermost.json +110 -0
- package/registry/entries/connectors/msteams.json +104 -0
- package/registry/entries/connectors/nextcloud-talk.json +104 -0
- package/registry/entries/connectors/nostr.json +70 -0
- package/registry/entries/connectors/signal.json +81 -0
- package/registry/entries/connectors/slack.json +102 -0
- package/registry/entries/connectors/telegram.json +71 -0
- package/registry/entries/connectors/tlon.json +94 -0
- package/registry/entries/connectors/twitch.json +110 -0
- package/registry/entries/connectors/whatsapp.json +113 -0
- package/registry/entries/connectors/x.json +231 -0
- package/registry/entries/connectors/zalo.json +112 -0
- package/registry/entries/connectors/zalouser.json +122 -0
- package/registry/entries/plugins/agent-orchestrator.json +33 -0
- package/registry/entries/plugins/agent-skills.json +72 -0
- package/registry/entries/plugins/anthropic.json +73 -0
- package/registry/entries/plugins/app-control.json +23 -0
- package/registry/entries/plugins/auto-trader.json +203 -0
- package/registry/entries/plugins/background-runner.json +26 -0
- package/registry/entries/plugins/blooio.json +102 -0
- package/registry/entries/plugins/browser.json +75 -0
- package/registry/entries/plugins/cli.json +40 -0
- package/registry/entries/plugins/clipboard.json +44 -0
- package/registry/entries/plugins/coding-tools.json +71 -0
- package/registry/entries/plugins/commands.json +63 -0
- package/registry/entries/plugins/computeruse.json +74 -0
- package/registry/entries/plugins/copilot-proxy.json +93 -0
- package/registry/entries/plugins/directives.json +63 -0
- package/registry/entries/plugins/edge-tts.json +97 -0
- package/registry/entries/plugins/elevenlabs.json +169 -0
- package/registry/entries/plugins/elizacloud.json +208 -0
- package/registry/entries/plugins/evm.json +134 -0
- package/registry/entries/plugins/experience.json +34 -0
- package/registry/entries/plugins/facewear.json +131 -0
- package/registry/entries/plugins/form.json +26 -0
- package/registry/entries/plugins/github.json +93 -0
- package/registry/entries/plugins/gmail-watch.json +25 -0
- package/registry/entries/plugins/goals.json +77 -0
- package/registry/entries/plugins/google-genai.json +106 -0
- package/registry/entries/plugins/groq.json +93 -0
- package/registry/entries/plugins/hedera.json +48 -0
- package/registry/entries/plugins/inmemorydb.json +25 -0
- package/registry/entries/plugins/linear.json +51 -0
- package/registry/entries/plugins/local-inference.json +142 -0
- package/registry/entries/plugins/local-storage.json +36 -0
- package/registry/entries/plugins/localdb.json +25 -0
- package/registry/entries/plugins/mcp.json +44 -0
- package/registry/entries/plugins/memory.json +124 -0
- package/registry/entries/plugins/minecraft.json +79 -0
- package/registry/entries/plugins/moltbook.json +83 -0
- package/registry/entries/plugins/music.json +155 -0
- package/registry/entries/plugins/mysticism.json +48 -0
- package/registry/entries/plugins/nearai.json +82 -0
- package/registry/entries/plugins/ngrok.json +69 -0
- package/registry/entries/plugins/ollama.json +96 -0
- package/registry/entries/plugins/openai.json +189 -0
- package/registry/entries/plugins/openrouter.json +188 -0
- package/registry/entries/plugins/pdf.json +26 -0
- package/registry/entries/plugins/plugin-manager.json +23 -0
- package/registry/entries/plugins/prose.json +48 -0
- package/registry/entries/plugins/rlm.json +26 -0
- package/registry/entries/plugins/roblox.json +88 -0
- package/registry/entries/plugins/rss.json +64 -0
- package/registry/entries/plugins/s3-storage.json +91 -0
- package/registry/entries/plugins/scheduling.json +35 -0
- package/registry/entries/plugins/shell.json +94 -0
- package/registry/entries/plugins/social-alpha.json +72 -0
- package/registry/entries/plugins/tailscale.json +81 -0
- package/registry/entries/plugins/tee.json +53 -0
- package/registry/entries/plugins/todos.json +26 -0
- package/registry/entries/plugins/trajectory-logger.json +33 -0
- package/registry/entries/plugins/trust.json +39 -0
- package/registry/entries/plugins/tts.json +71 -0
- package/registry/entries/plugins/tunnel.json +45 -0
- package/registry/entries/plugins/twilio.json +168 -0
- package/registry/entries/plugins/vercel-ai-gateway.json +128 -0
- package/registry/entries/plugins/video.json +23 -0
- package/registry/entries/plugins/vision.json +43 -0
- package/registry/entries/plugins/webhooks.json +23 -0
- package/registry/entries/plugins/workflow.json +25 -0
- package/registry/entries/plugins/xai.json +75 -0
- package/registry/index.d.ts +2 -1
- package/registry/index.d.ts.map +1 -1
- package/registry/index.js +46 -12
- package/registry/loader.d.ts +2 -1
- package/registry/loader.d.ts.map +1 -1
- package/registry/loader.js +49 -2
- package/registry/schema.d.ts +244 -34
- package/registry/schema.d.ts.map +1 -1
- package/registry/schema.js +36 -0
- package/runtime/android-avf-microdroid-bridge.d.ts +29 -0
- package/runtime/android-avf-microdroid-bridge.d.ts.map +1 -0
- package/runtime/android-avf-microdroid-bridge.js +149 -0
- package/runtime/api-dev-settings-banner.d.ts.map +1 -1
- package/runtime/api-dev-settings-banner.js +5 -13
- package/runtime/app-core-runtime-hooks.d.ts +21 -0
- package/runtime/app-core-runtime-hooks.d.ts.map +1 -0
- package/runtime/app-core-runtime-hooks.js +10 -0
- package/runtime/autonomy-policy.d.ts +2 -0
- package/runtime/autonomy-policy.d.ts.map +1 -0
- package/runtime/autonomy-policy.js +4 -0
- package/runtime/desktop/AppWindowRenderer.d.ts +17 -0
- package/runtime/desktop/AppWindowRenderer.d.ts.map +1 -0
- package/runtime/desktop/AppWindowRenderer.js +360 -0
- package/runtime/desktop/DesktopSurfaceNavigationRuntime.d.ts +2 -0
- package/runtime/desktop/DesktopSurfaceNavigationRuntime.d.ts.map +1 -0
- package/runtime/desktop/DesktopSurfaceNavigationRuntime.js +41 -0
- package/runtime/desktop/DesktopTrayRuntime.d.ts +2 -0
- package/runtime/desktop/DesktopTrayRuntime.d.ts.map +1 -0
- package/runtime/desktop/DesktopTrayRuntime.js +174 -0
- package/runtime/desktop/DetachedShellRoot.d.ts +10 -0
- package/runtime/desktop/DetachedShellRoot.d.ts.map +1 -0
- package/runtime/desktop/DetachedShellRoot.js +111 -0
- package/runtime/desktop/index.d.ts +6 -0
- package/runtime/desktop/index.d.ts.map +1 -0
- package/runtime/desktop/index.js +5 -0
- package/runtime/desktop/tray-menu.d.ts +20 -0
- package/runtime/desktop/tray-menu.d.ts.map +1 -0
- package/runtime/desktop/tray-menu.js +143 -0
- package/runtime/dev-server.d.ts +1 -1
- package/runtime/dev-server.d.ts.map +1 -1
- package/runtime/dev-server.js +93 -17
- package/runtime/eliza.d.ts +75 -1
- package/runtime/eliza.d.ts.map +1 -1
- package/runtime/eliza.js +596 -122
- package/runtime/ensure-text-to-speech-handler.d.ts.map +1 -1
- package/runtime/ensure-text-to-speech-handler.js +10 -3
- package/runtime/mobile-safe-runtime.d.ts +181 -2
- package/runtime/mobile-safe-runtime.d.ts.map +1 -1
- package/runtime/mobile-safe-runtime.js +1019 -12
- package/runtime/mode/remote-forwarder.d.ts.map +1 -1
- package/runtime/mode/remote-forwarder.js +2 -2
- package/runtime/mode/route-mode-guard.d.ts +1 -2
- package/runtime/mode/route-mode-guard.d.ts.map +1 -1
- package/runtime/mode/route-mode-guard.js +4 -5
- package/runtime/mode/route-mode-matrix.d.ts.map +1 -1
- package/runtime/mode/route-mode-matrix.js +14 -1
- package/runtime/mode/runtime-mode.d.ts +1 -1
- package/runtime/mode/runtime-mode.js +1 -1
- package/runtime/runtime-bootstrap-policy.d.ts.map +1 -1
- package/runtime/runtime-bootstrap-policy.js +14 -2
- package/runtime/telegram-standalone-handler.d.ts.map +1 -1
- package/runtime/telegram-standalone-handler.js +10 -9
- package/runtime/tts-cache-wiring.d.ts +29 -0
- package/runtime/tts-cache-wiring.d.ts.map +1 -0
- package/runtime/tts-cache-wiring.js +114 -0
- package/runtime/voice-warmup.d.ts +81 -0
- package/runtime/voice-warmup.d.ts.map +1 -0
- package/runtime/voice-warmup.js +111 -0
- package/scripts/android-sms-gateway-template.test.mjs +1014 -0
- package/scripts/aosp/README.md +19 -15
- package/scripts/aosp/compile-libllama.mjs +1344 -248
- package/scripts/aosp/compile-shim.mjs +47 -18
- package/scripts/aosp/deploy-pixel.mjs +405 -0
- package/scripts/aosp/lib/load-variant-config.mjs +3 -3
- package/scripts/aosp/llama-cpp-patches/README.md +8 -8
- package/scripts/aosp/llama-cpp-patches/apply-patches.mjs +23 -6
- package/scripts/aosp/llama-cpp-patches/polarquant/README.md +37 -0
- package/scripts/aosp/llama-cpp-patches/qjl/README.md +37 -0
- package/scripts/aosp/seccomp-shim/sigsys-handler-arm64.c +169 -0
- package/scripts/aosp/seccomp-shim/sigsys-handler-riscv64.c +217 -0
- package/scripts/aosp/smoke-cuttlefish.mjs +34 -4
- package/scripts/aosp/stage-default-models.mjs +18 -18
- package/scripts/aosp/variant-config-schema.ts +2 -2
- package/scripts/assert-required-bundled-packages.test.ts +534 -0
- package/scripts/audit-apple-store-sandbox.mjs +146 -0
- package/scripts/audit-live-test-surface.mjs +5 -2
- package/scripts/build-capacitor-app.mjs +21 -0
- package/scripts/build-flatpak.mjs +5 -5
- package/scripts/build-helpers/arm64-simd.mjs +72 -0
- package/scripts/build-helpers/omnivoice-merged.mjs +87 -0
- package/scripts/build-helpers/verify-fused-symbols.mjs +567 -0
- package/scripts/build-image.sh +1 -1
- package/scripts/build-llama-cpp-mtp.mjs +487 -0
- package/scripts/build-native-plugins.mjs +230 -18
- package/scripts/build-patched-electrobun-cli.mjs +68 -10
- package/scripts/build-win.mjs +1 -1
- package/scripts/bun-riscv64/Dockerfile +418 -0
- package/scripts/bun-riscv64/README.md +316 -0
- package/scripts/bun-riscv64/build.sh +469 -0
- package/scripts/bun-riscv64/bun-patches/0001-config-add-riscv64-arch.patch +74 -0
- package/scripts/bun-riscv64/bun-patches/0002-flags-add-riscv64-march-mabi.patch +16 -0
- package/scripts/bun-riscv64/bun-patches/0003-zig-add-riscv64-target-triple-and-cpu.patch +26 -0
- package/scripts/bun-riscv64/bun-patches/0004-webkit-force-local-mode-on-riscv64.patch +33 -0
- package/scripts/bun-riscv64/bun-patches/0005-tinycc-disable-on-riscv64.patch +16 -0
- package/scripts/bun-riscv64/bun-patches/0006-build-add-riscv64-cli-validation.patch +15 -0
- package/scripts/bun-riscv64/bun-patches/0007-deps-per-dep-riscv64-checks.patch +24 -0
- package/scripts/bun-riscv64/bun-patches/0008-source-stabilize-riscv64-musl-build.patch +226 -0
- package/scripts/bun-riscv64/bun-patches/0009-disable-wasm-streaming-hooks-for-c-loop.patch +162 -0
- package/scripts/bun-riscv64/bun-patches/0010-disable-inspector-profiler-for-riscv64-c-loop.patch +80 -0
- package/scripts/bun-riscv64/bun-patches/0011-process-arch-add-riscv64.patch +23 -0
- package/scripts/bun-riscv64/bun-patches/0012-cpu-features-add-riscv64-fallback.patch +13 -0
- package/scripts/bun-riscv64/bun-patches/0013-disable-console-inspector-hooks-for-riscv64-c-loop.patch +43 -0
- package/scripts/bun-riscv64/bun-patches/0014-disable-custom-inspector-dispatchers-on-riscv64.patch +127 -0
- package/scripts/bun-riscv64/bun-patches/0015-disable-jsc-profiler-builtins-on-riscv64.patch +75 -0
- package/scripts/bun-riscv64/bun-patches/0016-node-vm-disable-jit-cached-data-on-riscv64-c-loop.patch +96 -0
- package/scripts/bun-riscv64/bun-patches/0017-disable-performance-domjit-signature-on-riscv64-c-loop.patch +34 -0
- package/scripts/bun-riscv64/bun-patches/0018-fix-serialized-script-identifier-big-endian-path.patch +19 -0
- package/scripts/bun-riscv64/bun-patches/0019-add-wtf-timer-fire-bridge-for-c-loop.patch +24 -0
- package/scripts/bun-riscv64/bun-patches/0020-run-riscv64-smoke-test-under-qemu.patch +13 -0
- package/scripts/bun-riscv64/bun-patches/0021-fix-riscv64-linux-open-flags.patch +25 -0
- package/scripts/bun-riscv64/bun-patches/0022-zlib-riscv64-generic-kernels.patch +25 -0
- package/scripts/bun-riscv64/bun-patches/README.md +127 -0
- package/scripts/bun-riscv64/bun-version.json +202 -0
- package/scripts/bun-riscv64/run-build.sh +162 -0
- package/scripts/bun-riscv64/rust-core/0001-riscv64-rust-core-port.patch +868 -0
- package/scripts/bun-riscv64/rust-core/0002-second-wave-riscv64-source-gaps.patch +130 -0
- package/scripts/bun-riscv64/rust-core/0003-third-wave-riscv64-crash-handler-gaps.patch +78 -0
- package/scripts/bun-riscv64/rust-core/0004-rust-target-cpu-riscv64.patch +39 -0
- package/scripts/bun-riscv64/rust-core/0005-fifth-wave-riscv64-source-gaps.patch +96 -0
- package/scripts/bun-riscv64/rust-core/0006-cpp-wasm-and-inspector-guards-riscv64.patch +91 -0
- package/scripts/bun-riscv64/rust-core/0007-bun-alloc-max-align-t-riscv64.patch +36 -0
- package/scripts/bun-riscv64/rust-core/0008-workspace-lints-warn-not-deny-riscv64.patch +75 -0
- package/scripts/bun-riscv64/rust-core/0009-zigglobalobject-wasm-streaming-guards-riscv64.patch +109 -0
- package/scripts/bun-riscv64/rust-core/0010-tcc-externs-stub-on-riscv64.patch +62 -0
- package/scripts/bun-riscv64/rust-core/0011-clippy-ptr-cast-lints-warn-riscv64.patch +61 -0
- package/scripts/bun-riscv64/rust-core/README.md +80 -0
- package/scripts/bun-riscv64/rust-core/webkit-patches/0003-disable-dfg-ftl-on-riscv64.patch +60 -0
- package/scripts/bun-riscv64/rust-core/webkit-patches/0004-riscv64-do-not-force-wasm-in-c-loop.patch +31 -0
- package/scripts/bun-riscv64/rust-core/webkit-patches/0005-domjit-effect-allow-no-dfg-c-loop.patch +40 -0
- package/scripts/bun-riscv64/rust-core/webkit-patches/0006-disable-usewasm-when-webassembly-compiled-out.patch +33 -0
- package/scripts/bun-riscv64/rust-core/webkit-patches/0007-restore-dropped-includes-and-llint-fwd-decl.patch +31 -0
- package/scripts/bun-riscv64/validate.sh +264 -0
- package/scripts/bun-riscv64/webkit-patches/0001-cherry-pick-llint-riscv64.recipe +155 -0
- package/scripts/bun-riscv64/webkit-patches/0002-cherry-pick-baseline-jit-riscv64.recipe +40 -0
- package/scripts/bun-riscv64/webkit-patches/0003-disable-dfg-ftl-on-riscv64.patch +60 -0
- package/scripts/bun-riscv64/webkit-patches/0004-riscv64-do-not-force-wasm-in-c-loop.patch +31 -0
- package/scripts/bun-riscv64/webkit-patches/0005-domjit-effect-allow-no-dfg-c-loop.patch +40 -0
- package/scripts/bun-riscv64/webkit-patches/0006-disable-usewasm-when-webassembly-compiled-out.patch +33 -0
- package/scripts/bun-riscv64/webkit-patches/0007-restore-dropped-includes-and-llint-fwd-decl.patch +72 -0
- package/scripts/bun-riscv64/webkit-patches/README.md +146 -0
- package/scripts/check-homepage-public-readiness.mjs +353 -0
- package/scripts/check-homepage-release-data.mjs +110 -0
- package/scripts/check-i18n.mjs +2 -1
- package/scripts/check-real-local-chat.ts +147 -0
- package/scripts/check-real-local-provisioning.ts +104 -0
- package/scripts/check-real-local-reset.ts +249 -0
- package/scripts/check-sms-gateway-completion-audit.mjs +428 -0
- package/scripts/check-sms-gateway-readiness.mjs +266 -0
- package/scripts/clean-repo.mjs +5 -5
- package/scripts/codesign-mas.mjs +222 -16
- package/scripts/collect-docker-runtime-deps.mjs +229 -0
- package/scripts/continue-sms-gateway-work.mjs +121 -0
- package/scripts/copy-runtime-node-modules.ts +903 -195
- package/scripts/deploy-cloud-api-production-gateway.mjs +52 -0
- package/scripts/desktop-build.mjs +655 -101
- package/scripts/dev-platform.mjs +346 -102
- package/scripts/dev-startup-smoke.mjs +248 -0
- package/scripts/dev-ui.mjs +418 -176
- package/scripts/disable-local-eliza-workspace.mjs +35 -0
- package/scripts/docker-ci-smoke.sh +298 -96
- package/scripts/docker-entrypoint.sh +62 -1
- package/scripts/docker-entrypoint.test.ts +283 -0
- package/scripts/ensure-avatars.mjs +2 -2
- package/scripts/ensure-electrobun-core.mjs +1 -1
- package/scripts/ensure-generated-core-proto-js.mjs +1 -1
- package/scripts/ensure-type-package-aliases.mjs +62 -5
- package/scripts/ensure-vision-deps.mjs +20 -1
- package/scripts/entry.ts +1 -1
- package/scripts/ffi-stub/Makefile +64 -0
- package/scripts/ffi-stub/README.md +391 -0
- package/scripts/ffi-stub/asr-ffi-smoke.ts +139 -0
- package/scripts/ffi-stub/ffi-stub.c +539 -0
- package/scripts/ffi-stub/ffi.h +538 -0
- package/scripts/ffi-stub/libelizainference_stub.so +0 -0
- package/scripts/ffi-stub/tts-stream-ffi-smoke.ts +349 -0
- package/scripts/generate-first-run-voicelines.mjs +194 -0
- package/scripts/generate-plugin-index.js +4 -3
- package/scripts/generate-static-asset-manifest.mjs +1 -1
- package/scripts/i18n-dynamic-keys.json +5 -5
- package/scripts/init-submodules.mjs +2 -2
- package/scripts/install-android-sms-gateway.md +177 -0
- package/scripts/install-android-sms-gateway.mjs +1088 -0
- package/scripts/ios-xcframework/README.md +74 -72
- package/scripts/ios-xcframework/build-xcframework.mjs +204 -43
- package/scripts/ios-xcframework/run-physical-device-smoke.mjs +1943 -0
- package/scripts/ios-xcframework/runtime-symbol-shim.c +450 -0
- package/scripts/kernel-patches/cpu-polar-kernels.mjs +441 -0
- package/scripts/kernel-patches/cpu-simd-kernels.mjs +253 -0
- package/scripts/kernel-patches/cpu-thread-parallelism.mjs +368 -0
- package/scripts/kernel-patches/cuda-kernels.mjs +117 -0
- package/scripts/kernel-patches/metal-kernels.mjs +1698 -109
- package/scripts/kernel-patches/server-omnivoice-route.mjs +718 -0
- package/scripts/kernel-patches/server-structured-output.mjs +279 -0
- package/scripts/kernel-patches/vulkan-dispatch-log.mjs +166 -0
- package/scripts/kernel-patches/vulkan-dispatch-log.test.mjs +50 -0
- package/scripts/kernel-patches/vulkan-dispatch-patches/01-vulkan-shaders-gen.patch +30 -16
- package/scripts/kernel-patches/vulkan-dispatch-patches/02-ggml-vulkan-pipelines.patch +75 -30
- package/scripts/kernel-patches/vulkan-kernels.mjs +800 -49
- package/scripts/lib/agent-source-watcher.mjs +174 -0
- package/scripts/lib/agent-source-watcher.test.mjs +184 -0
- package/scripts/lib/api-supervisor.mjs +78 -9
- package/scripts/lib/api-supervisor.test.mjs +121 -0
- package/scripts/lib/app-dir.mjs +2 -16
- package/scripts/lib/apple-entitlement-audit.mjs +655 -0
- package/scripts/lib/apple-entitlement-audit.test.mjs +144 -0
- package/scripts/lib/bun-version-guard.mjs +13 -13
- package/scripts/lib/capacitor-plugin-build-needed.mjs +4 -3
- package/scripts/lib/capacitor-plugin-names.mjs +30 -14
- package/scripts/lib/desktop-preflight.mjs +9 -5
- package/scripts/lib/desktop-startup-embedding-warmup-policy.mjs +51 -0
- package/scripts/lib/desktop-startup-embedding-warmup-policy.test.mjs +55 -0
- package/scripts/lib/duet-bridge.d.mts +63 -0
- package/scripts/lib/duet-bridge.mjs +193 -0
- package/scripts/lib/node-path-env.mjs +4 -2
- package/scripts/lib/orchestrator-desktop-dev-banner.mjs +12 -3
- package/scripts/lib/patch-bun-exports.mjs +90 -27
- package/scripts/lib/patch-bun-exports.test.mjs +79 -0
- package/scripts/lib/renderer-build-action.mjs +35 -0
- package/scripts/lib/renderer-build-action.test.mjs +70 -0
- package/scripts/lib/stage-android-agent.mjs +748 -99
- package/scripts/lib/sync-eliza-env-aliases.mjs +3 -25
- package/scripts/lib/ui-smoke-stub-decision.mjs +33 -0
- package/scripts/lib/ui-smoke-stub-decision.test.mjs +46 -0
- package/scripts/lib/vite-renderer-dist-stale.mjs +5 -0
- package/scripts/lib/voice-latency-report.mjs +154 -0
- package/scripts/lifeops-prompt-benchmark.ts +21 -12
- package/scripts/link-docker-local-app-packages.mjs +89 -36
- package/scripts/local-stt-bench.ts +192 -0
- package/scripts/maintain-cloud-api-production-gateway.mjs +54 -0
- package/scripts/mas-smoke.mjs +459 -0
- package/scripts/mas-smoke.test.mjs +220 -0
- package/scripts/mobile-auth-simulator-smoke.mjs +0 -1
- package/scripts/normalize-eliza-capture.ts +97 -0
- package/scripts/omnivoice-fuse/prepare.mjs +2543 -23
- package/scripts/pack-upstreams.mjs +65 -5
- package/scripts/package-electrobun-linux.mjs +303 -0
- package/scripts/patch-deps.mjs +5 -3
- package/scripts/patches/llama-mobile-kokoro-tts.patch +480 -0
- package/scripts/playwright-ui-live-stack.ts +194 -49
- package/scripts/playwright-ui-smoke-api-stub.mjs +3501 -109
- package/scripts/pre-review-local.mjs +2 -2
- package/scripts/prepare-ios-cocoapods.sh +41 -3
- package/scripts/release-check.ts +180 -84
- package/scripts/release-workflow-drift.test.ts +57 -0
- package/scripts/relink-workspace-packages-to-dist.mjs +21 -4
- package/scripts/rt.mjs +16 -1
- package/scripts/run-biome-check.mjs +1 -1
- package/scripts/run-coding-agent-e2e.mjs +3 -3
- package/scripts/run-eliza-app-core-script.mjs +34 -0
- package/scripts/run-local-plugin-live-smoke.mjs +71 -2
- package/scripts/run-mobile-build-android-app-actions.test.mjs +426 -0
- package/scripts/run-mobile-build.mjs +4757 -607
- package/scripts/run-node-runtime.mjs +184 -7
- package/scripts/run-node-runtime.test.mjs +167 -0
- package/scripts/run-node-tsx.mjs +80 -33
- package/scripts/run-node.mjs +41 -1
- package/scripts/run-production-build.mjs +34 -27
- package/scripts/run-release-check.mjs +19 -0
- package/scripts/run-release-contract-suite.mjs +107 -14
- package/scripts/run-ui-smoke-playwright-suite.mjs +0 -2
- package/scripts/runtime-package-manifest.ts +21 -3
- package/scripts/setup-upstreams.mjs +42 -1
- package/scripts/sms-gateway-status.mjs +194 -0
- package/scripts/stage-android-agent.test.mjs +97 -0
- package/scripts/stage-elizavoice-lib.mjs +203 -0
- package/scripts/startup-integration-script-drift.test.ts +82 -4
- package/scripts/streaming-pipeline-bench.ts +543 -0
- package/scripts/sync-homepage-porkbun-dns.mjs +262 -0
- package/scripts/test-sms-gateway-software.mjs +100 -0
- package/scripts/type-audit.mjs +1 -1
- package/scripts/validate-bluebubbles-outbound.mjs +293 -0
- package/scripts/validate-cdn-assets.mjs +15 -7
- package/scripts/validate-regression-matrix.mjs +109 -8
- package/scripts/verify-android-sms-gateway-e2e.mjs +362 -0
- package/scripts/verify-bluebubbles-gateway-e2e.mjs +191 -0
- package/scripts/verify-bluebubbles-inbound-readiness.mjs +88 -0
- package/scripts/verify-cloud-api-production-deploy.mjs +87 -0
- package/scripts/verify-cloud-sms-onboarding-flow.mjs +336 -0
- package/scripts/voice/freeze-voice.mjs +521 -0
- package/scripts/voice-attribution-smoke.ts +538 -0
- package/scripts/voice-create-profile.mjs +379 -0
- package/scripts/voice-duet.mjs +1355 -0
- package/scripts/voice-e2e-hardware.ts +871 -0
- package/scripts/voice-interactive.mjs +1750 -0
- package/scripts/voice-latency-report.mjs +96 -0
- package/scripts/voice-latency-report.test.ts +176 -0
- package/scripts/voice-preset/build-default-voice-preset.mjs +249 -0
- package/scripts/voice-preset/build-onboarding-voice.mjs +281 -0
- package/scripts/watch-sms-gateway-readiness.mjs +303 -0
- package/scripts/write-homepage-release-data.mjs +458 -26
- package/security/agent-vault-id.d.ts +1 -1
- package/security/agent-vault-id.js +1 -1
- package/security/hydrate-wallet-keys-from-platform-store.d.ts.map +1 -1
- package/security/hydrate-wallet-keys-from-platform-store.js +23 -14
- package/security/platform-secure-store-node.d.ts +2 -2
- package/security/platform-secure-store-node.js +3 -3
- package/security/wallet-os-store-actions.d.ts +0 -9
- package/security/wallet-os-store-actions.d.ts.map +1 -1
- package/security/wallet-os-store-actions.js +3 -10
- package/services/account-pool.d.ts +23 -14
- package/services/account-pool.d.ts.map +1 -1
- package/services/account-pool.js +86 -24
- package/services/account-usage.d.ts.map +1 -1
- package/services/account-usage.js +2 -5
- package/services/ambient-audio/consent.d.ts +9 -0
- package/services/ambient-audio/consent.d.ts.map +1 -0
- package/services/ambient-audio/consent.js +28 -0
- package/services/ambient-audio/index.d.ts +7 -0
- package/services/ambient-audio/index.d.ts.map +1 -0
- package/services/ambient-audio/index.js +4 -0
- package/services/ambient-audio/replay-buffer.d.ts +14 -0
- package/services/ambient-audio/replay-buffer.d.ts.map +1 -0
- package/services/ambient-audio/replay-buffer.js +66 -0
- package/services/ambient-audio/response-gate.d.ts +3 -0
- package/services/ambient-audio/response-gate.d.ts.map +1 -0
- package/services/ambient-audio/response-gate.js +33 -0
- package/services/ambient-audio/service.d.ts +22 -0
- package/services/ambient-audio/service.d.ts.map +1 -0
- package/services/ambient-audio/service.js +47 -0
- package/services/ambient-audio/types.d.ts +42 -0
- package/services/ambient-audio/types.d.ts.map +1 -0
- package/services/app-updates/update-policy.d.ts +64 -0
- package/services/app-updates/update-policy.d.ts.map +1 -0
- package/services/app-updates/update-policy.js +228 -0
- package/services/auth-store.d.ts +37 -1
- package/services/auth-store.d.ts.map +1 -1
- package/services/auth-store.js +59 -26
- package/services/cloud-jwks-store.d.ts +3 -3
- package/services/cloud-jwks-store.d.ts.map +1 -1
- package/services/cloud-jwks-store.js +5 -8
- package/services/coding-account-bridge.d.ts +71 -0
- package/services/coding-account-bridge.d.ts.map +1 -0
- package/services/coding-account-bridge.js +267 -0
- package/services/connector-target-catalog.d.ts +10 -3
- package/services/connector-target-catalog.d.ts.map +1 -1
- package/services/connector-target-catalog.js +7 -4
- package/services/credential-tunnel-service.d.ts +66 -0
- package/services/credential-tunnel-service.d.ts.map +1 -0
- package/services/credential-tunnel-service.js +227 -0
- package/services/github-credentials.d.ts +1 -1
- package/services/github-credentials.js +1 -1
- package/services/inference-abort.d.ts +47 -0
- package/services/inference-abort.d.ts.map +1 -0
- package/services/inference-abort.js +76 -0
- package/services/persistence.d.ts +2 -3
- package/services/persistence.d.ts.map +1 -1
- package/services/persistence.js +2 -3
- package/services/phrase-chunked-tts.d.ts +136 -0
- package/services/phrase-chunked-tts.d.ts.map +1 -0
- package/services/phrase-chunked-tts.js +208 -0
- package/services/sandbox-registry.d.ts +78 -0
- package/services/sandbox-registry.d.ts.map +1 -0
- package/services/sandbox-registry.js +323 -0
- package/services/secrets-manager-installer.d.ts +8 -1
- package/services/secrets-manager-installer.d.ts.map +1 -1
- package/services/secrets-manager-installer.js +27 -2
- package/services/sensitive-requests/cloud-link-adapter.d.ts +15 -0
- package/services/sensitive-requests/cloud-link-adapter.d.ts.map +1 -0
- package/services/sensitive-requests/cloud-link-adapter.js +73 -0
- package/services/sensitive-requests/index.d.ts +27 -0
- package/services/sensitive-requests/index.d.ts.map +1 -0
- package/services/sensitive-requests/index.js +51 -0
- package/services/sensitive-requests/instruct-dm-only-adapter.d.ts +14 -0
- package/services/sensitive-requests/instruct-dm-only-adapter.d.ts.map +1 -0
- package/services/sensitive-requests/instruct-dm-only-adapter.js +22 -0
- package/services/sensitive-requests/owner-app-inline-adapter.d.ts +3 -0
- package/services/sensitive-requests/owner-app-inline-adapter.d.ts.map +1 -0
- package/services/sensitive-requests/owner-app-inline-adapter.js +146 -0
- package/services/sensitive-requests/owner-app-oauth-adapter.d.ts +3 -0
- package/services/sensitive-requests/owner-app-oauth-adapter.d.ts.map +1 -0
- package/services/sensitive-requests/owner-app-oauth-adapter.js +156 -0
- package/services/sensitive-requests/public-link-adapter.d.ts +14 -0
- package/services/sensitive-requests/public-link-adapter.d.ts.map +1 -0
- package/services/sensitive-requests/public-link-adapter.js +86 -0
- package/services/sensitive-requests/tunnel-link-adapter.d.ts +17 -0
- package/services/sensitive-requests/tunnel-link-adapter.d.ts.map +1 -0
- package/services/sensitive-requests/tunnel-link-adapter.js +38 -0
- package/services/steward-credentials.d.ts +1 -1
- package/services/steward-credentials.d.ts.map +1 -1
- package/services/steward-credentials.js +10 -6
- package/services/steward-sidecar/health-check.d.ts.map +1 -1
- package/services/steward-sidecar/health-check.js +4 -3
- package/services/steward-sidecar/process-management.d.ts +1 -1
- package/services/steward-sidecar/process-management.d.ts.map +1 -1
- package/services/steward-sidecar/process-management.js +9 -3
- package/services/steward-sidecar/types.d.ts +1 -1
- package/services/steward-sidecar/types.d.ts.map +1 -1
- package/services/steward-sidecar/wallet-setup.d.ts.map +1 -1
- package/services/steward-sidecar/wallet-setup.js +8 -7
- package/services/steward-sidecar.d.ts +2 -2
- package/services/steward-sidecar.d.ts.map +1 -1
- package/services/steward-sidecar.js +27 -19
- package/services/task-host-capabilities.d.ts +60 -0
- package/services/task-host-capabilities.d.ts.map +1 -0
- package/services/task-host-capabilities.js +122 -0
- package/services/tool-call-cache/index.d.ts +2 -2
- package/services/tool-call-cache/index.d.ts.map +1 -1
- package/services/tool-call-cache/index.js +1 -1
- package/services/trigger-event-bridge.js +1 -1
- package/services/tunnel-to-mobile/index.d.ts +2 -0
- package/services/tunnel-to-mobile/index.d.ts.map +1 -0
- package/services/tunnel-to-mobile/index.js +1 -0
- package/services/tunnel-to-mobile/tunnel-to-mobile-client.d.ts +105 -0
- package/services/tunnel-to-mobile/tunnel-to-mobile-client.d.ts.map +1 -0
- package/services/tunnel-to-mobile/tunnel-to-mobile-client.js +190 -0
- package/services/vault-bootstrap.d.ts.map +1 -1
- package/services/vault-bootstrap.js +48 -21
- package/services/vault-mirror.d.ts +1 -1
- package/services/vault-mirror.d.ts.map +1 -1
- package/services/vault-mirror.js +29 -6
- package/services/voice-profiles/diarization-pipeline.d.ts +6 -0
- package/services/voice-profiles/diarization-pipeline.d.ts.map +1 -0
- package/services/voice-profiles/diarization-pipeline.js +20 -0
- package/services/voice-profiles/index.d.ts +12 -0
- package/services/voice-profiles/index.d.ts.map +1 -0
- package/services/voice-profiles/index.js +5 -0
- package/services/voice-profiles/nickname-evaluator.d.ts +14 -0
- package/services/voice-profiles/nickname-evaluator.d.ts.map +1 -0
- package/services/voice-profiles/nickname-evaluator.js +46 -0
- package/services/voice-profiles/owner-confidence.d.ts +10 -0
- package/services/voice-profiles/owner-confidence.d.ts.map +1 -0
- package/services/voice-profiles/owner-confidence.js +38 -0
- package/services/voice-profiles/private-challenge.d.ts +20 -0
- package/services/voice-profiles/private-challenge.d.ts.map +1 -0
- package/services/voice-profiles/private-challenge.js +44 -0
- package/services/voice-profiles/store.d.ts +21 -0
- package/services/voice-profiles/store.d.ts.map +1 -0
- package/services/voice-profiles/store.js +50 -0
- package/services/voice-profiles/types.d.ts +38 -0
- package/services/voice-profiles/types.d.ts.map +1 -0
- package/services/voice-profiles/types.js +1 -0
- package/styles/electrobun-mac-window-drag.css +4 -4
- package/test/helpers/__tests__/live-agent-test.smoke.test.ts +43 -70
- package/test/helpers/browser-mocks.ts +2 -2
- package/test/helpers/conditional-tests.ts +2 -2
- package/test/helpers/i18n.ts +1 -1
- package/test/helpers/live-agent-test.ts +537 -551
- package/test/helpers/live-provider.test.ts +4 -4
- package/test/helpers/live-provider.ts +41 -7
- package/test/helpers/live-runtime-server.ts +4 -4
- package/test/helpers/pglite-runtime.ts +1 -1
- package/test/helpers/real-runtime.ts +54 -15
- package/test/helpers/trajectory-harness.ts +11 -7
- package/test/scripts/start-eliza-live.ts +9 -0
- package/test/scripts/test-parallel.mjs +1 -1
- package/test/scripts/test-root-unit.mjs +6 -7
- package/ui-compat.d.ts +13 -2
- package/ui-compat.d.ts.map +1 -1
- package/ui-compat.js +19 -3
- package/api/auth-pairing-compat-routes.d.ts +0 -17
- package/api/auth-pairing-compat-routes.d.ts.map +0 -1
- package/api/auth-pairing-compat-routes.js +0 -301
- package/api/local-inference-compat-routes.d.ts +0 -16
- package/api/local-inference-compat-routes.d.ts.map +0 -1
- package/api/local-inference-compat-routes.js +0 -617
- package/api/onboarding-compat-routes.d.ts +0 -4
- package/api/onboarding-compat-routes.d.ts.map +0 -1
- package/api/onboarding-compat-routes.js +0 -207
- package/api/plugins-compat-routes.d.ts +0 -103
- package/api/plugins-compat-routes.d.ts.map +0 -1
- package/api/plugins-compat-routes.js +0 -1181
- package/api/server-onboarding-compat.d.ts +0 -31
- package/api/server-onboarding-compat.d.ts.map +0 -1
- package/api/server-onboarding-compat.js +0 -283
- package/benchmark/cua-routes.d.ts +0 -10
- package/benchmark/cua-routes.d.ts.map +0 -1
- package/benchmark/cua-routes.js +0 -179
- package/benchmark/mock-plugin-base.d.ts +0 -9
- package/benchmark/mock-plugin-base.d.ts.map +0 -1
- package/benchmark/mock-plugin-base.js +0 -325
- package/cli/parse-duration.d.ts +0 -5
- package/cli/parse-duration.d.ts.map +0 -1
- package/cli/parse-duration.js +0 -27
- package/patches/llama-cpp-capacitor@0.1.5.patch +0 -2387
- package/platform/agent-browser-stub.d.ts +0 -27
- package/platform/agent-browser-stub.d.ts.map +0 -1
- package/platform/agent-browser-stub.js +0 -16
- package/platforms/android/app/src/androidTest/java/com/getcapacitor/myapp/ExampleInstrumentedTest.java +0 -26
- package/platforms/android/app/src/main/res/drawable/ic_launcher_background.xml +0 -170
- package/platforms/android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml +0 -34
- package/platforms/android/app/src/test/java/com/getcapacitor/myapp/ExampleUnitTest.java +0 -18
- package/platforms/electrobun/assets/appIcon.iconset/icon_512x512@2x.png +0 -0
- package/platforms/electrobun/assets/appIcon.png +0 -0
- package/platforms/electrobun/scripts/build-whisper-universal.sh +0 -137
- package/platforms/electrobun/scripts/build-whisper.sh +0 -95
- package/platforms/electrobun/src/libMacWindowEffects.dylib +0 -0
- package/platforms/electrobun/src/native/whisper.ts +0 -280
- package/platforms/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-1.png +0 -0
- package/platforms/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-2.png +0 -0
- package/platforms/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732.png +0 -0
- package/registry/generate-apps.d.ts +0 -2
- package/registry/generate-apps.d.ts.map +0 -1
- package/registry/generate-apps.js +0 -338
- package/registry/generate.d.ts +0 -2
- package/registry/generate.d.ts.map +0 -1
- package/registry/generate.js +0 -506
- package/runtime/embedding-manager-support.d.ts +0 -77
- package/runtime/embedding-manager-support.d.ts.map +0 -1
- package/runtime/embedding-manager-support.js +0 -309
- package/runtime/embedding-presets.d.ts +0 -5
- package/runtime/embedding-presets.d.ts.map +0 -1
- package/runtime/embedding-presets.js +0 -47
- package/runtime/embedding-warmup-policy.d.ts +0 -13
- package/runtime/embedding-warmup-policy.d.ts.map +0 -1
- package/runtime/embedding-warmup-policy.js +0 -33
- package/runtime/ensure-local-inference-handler.d.ts +0 -25
- package/runtime/ensure-local-inference-handler.d.ts.map +0 -1
- package/runtime/ensure-local-inference-handler.js +0 -389
- package/runtime/mobile-local-inference-gate.d.ts +0 -21
- package/runtime/mobile-local-inference-gate.d.ts.map +0 -1
- package/runtime/mobile-local-inference-gate.js +0 -24
- package/scripts/aosp/avd-test.mjs +0 -403
- package/scripts/aosp/boot-validate.mjs +0 -536
- package/scripts/aosp/build-aosp.mjs +0 -448
- package/scripts/aosp/build-bootanimation.mjs +0 -178
- package/scripts/aosp/capture-screens.mjs +0 -325
- package/scripts/aosp/e2e-validate.mjs +0 -225
- package/scripts/aosp/lint-init-rc.mjs +0 -258
- package/scripts/aosp/llama-shim/eliza_llama_shim.c +0 -276
- package/scripts/aosp/sim.mjs +0 -277
- package/scripts/aosp/sync-to-aosp.mjs +0 -134
- package/scripts/aosp/validate.mjs +0 -1273
- package/scripts/build-llama-cpp-dflash.mjs +0 -1866
- package/scripts/generate-onboarding-voicelines.mjs +0 -194
- package/scripts/generated/static-asset-manifest.json +0 -4
- package/scripts/normalize-parallax-capture.ts +0 -97
- package/scripts/omnivoice-fuse/Makefile +0 -44
- package/scripts/omnivoice-fuse/README.md +0 -266
- package/scripts/omnivoice-fuse/cmake-graft.mjs +0 -180
- package/scripts/omnivoice-fuse/ffi-stub.c +0 -222
- package/scripts/omnivoice-fuse/ffi.h +0 -158
- package/scripts/omnivoice-fuse/libelizainference_stub.dylib +0 -0
- package/scripts/omnivoice-fuse/verify-symbols.mjs +0 -138
- package/security/cloud-secret-store.d.ts +0 -34
- package/security/cloud-secret-store.d.ts.map +0 -1
- package/security/cloud-secret-store.js +0 -65
- package/security/export-guard.d.ts +0 -34
- package/security/export-guard.d.ts.map +0 -1
- package/security/export-guard.js +0 -127
- package/services/local-inference/__stress__/cache-stress-helpers.d.ts +0 -76
- package/services/local-inference/__stress__/cache-stress-helpers.d.ts.map +0 -1
- package/services/local-inference/__stress__/cache-stress-helpers.js +0 -238
- package/services/local-inference/active-model.d.ts +0 -180
- package/services/local-inference/active-model.d.ts.map +0 -1
- package/services/local-inference/active-model.js +0 -362
- package/services/local-inference/assignments.d.ts +0 -58
- package/services/local-inference/assignments.d.ts.map +0 -1
- package/services/local-inference/assignments.js +0 -179
- package/services/local-inference/backend.d.ts +0 -200
- package/services/local-inference/backend.d.ts.map +0 -1
- package/services/local-inference/backend.js +0 -242
- package/services/local-inference/bundled-models.d.ts +0 -34
- package/services/local-inference/bundled-models.d.ts.map +0 -1
- package/services/local-inference/bundled-models.js +0 -104
- package/services/local-inference/cache-bridge.d.ts +0 -184
- package/services/local-inference/cache-bridge.d.ts.map +0 -1
- package/services/local-inference/cache-bridge.js +0 -333
- package/services/local-inference/catalog.d.ts +0 -57
- package/services/local-inference/catalog.d.ts.map +0 -1
- package/services/local-inference/catalog.js +0 -262
- package/services/local-inference/conversation-registry.d.ts +0 -122
- package/services/local-inference/conversation-registry.d.ts.map +0 -1
- package/services/local-inference/conversation-registry.js +0 -182
- package/services/local-inference/device-bridge.d.ts +0 -139
- package/services/local-inference/device-bridge.d.ts.map +0 -1
- package/services/local-inference/device-bridge.js +0 -774
- package/services/local-inference/dflash-doctor.d.ts +0 -27
- package/services/local-inference/dflash-doctor.d.ts.map +0 -1
- package/services/local-inference/dflash-doctor.js +0 -149
- package/services/local-inference/dflash-server.d.ts +0 -248
- package/services/local-inference/dflash-server.d.ts.map +0 -1
- package/services/local-inference/dflash-server.js +0 -1076
- package/services/local-inference/downloader.d.ts +0 -48
- package/services/local-inference/downloader.d.ts.map +0 -1
- package/services/local-inference/downloader.js +0 -688
- package/services/local-inference/engine.d.ts +0 -282
- package/services/local-inference/engine.d.ts.map +0 -1
- package/services/local-inference/engine.js +0 -743
- package/services/local-inference/external-scanner.d.ts +0 -17
- package/services/local-inference/external-scanner.d.ts.map +0 -1
- package/services/local-inference/external-scanner.js +0 -261
- package/services/local-inference/handler-registry.d.ts +0 -72
- package/services/local-inference/handler-registry.d.ts.map +0 -1
- package/services/local-inference/handler-registry.js +0 -159
- package/services/local-inference/hardware.d.ts +0 -26
- package/services/local-inference/hardware.d.ts.map +0 -1
- package/services/local-inference/hardware.js +0 -139
- package/services/local-inference/hf-search.d.ts +0 -19
- package/services/local-inference/hf-search.d.ts.map +0 -1
- package/services/local-inference/hf-search.js +0 -169
- package/services/local-inference/index.d.ts +0 -10
- package/services/local-inference/index.d.ts.map +0 -1
- package/services/local-inference/index.js +0 -7
- package/services/local-inference/llama-server-metrics.d.ts +0 -108
- package/services/local-inference/llama-server-metrics.d.ts.map +0 -1
- package/services/local-inference/llama-server-metrics.js +0 -175
- package/services/local-inference/manifest/index.d.ts +0 -4
- package/services/local-inference/manifest/index.d.ts.map +0 -1
- package/services/local-inference/manifest/index.js +0 -5
- package/services/local-inference/manifest/schema.d.ts +0 -419
- package/services/local-inference/manifest/schema.d.ts.map +0 -1
- package/services/local-inference/manifest/schema.js +0 -227
- package/services/local-inference/manifest/types.d.ts +0 -23
- package/services/local-inference/manifest/types.d.ts.map +0 -1
- package/services/local-inference/manifest/types.js +0 -5
- package/services/local-inference/manifest/validator.d.ts +0 -43
- package/services/local-inference/manifest/validator.d.ts.map +0 -1
- package/services/local-inference/manifest/validator.js +0 -187
- package/services/local-inference/paths.d.ts +0 -8
- package/services/local-inference/paths.d.ts.map +0 -1
- package/services/local-inference/paths.js +0 -7
- package/services/local-inference/providers.d.ts +0 -61
- package/services/local-inference/providers.d.ts.map +0 -1
- package/services/local-inference/providers.js +0 -334
- package/services/local-inference/ram-budget.d.ts +0 -57
- package/services/local-inference/ram-budget.d.ts.map +0 -1
- package/services/local-inference/ram-budget.js +0 -107
- package/services/local-inference/readiness.d.ts +0 -9
- package/services/local-inference/readiness.d.ts.map +0 -1
- package/services/local-inference/readiness.js +0 -153
- package/services/local-inference/recommendation.d.ts +0 -62
- package/services/local-inference/recommendation.d.ts.map +0 -1
- package/services/local-inference/recommendation.js +0 -309
- package/services/local-inference/registry.d.ts +0 -35
- package/services/local-inference/registry.d.ts.map +0 -1
- package/services/local-inference/registry.js +0 -117
- package/services/local-inference/router-handler.d.ts +0 -51
- package/services/local-inference/router-handler.d.ts.map +0 -1
- package/services/local-inference/router-handler.js +0 -165
- package/services/local-inference/routing-policy.d.ts +0 -55
- package/services/local-inference/routing-policy.d.ts.map +0 -1
- package/services/local-inference/routing-policy.js +0 -195
- package/services/local-inference/routing-preferences.d.ts +0 -8
- package/services/local-inference/routing-preferences.d.ts.map +0 -1
- package/services/local-inference/routing-preferences.js +0 -7
- package/services/local-inference/service.d.ts +0 -88
- package/services/local-inference/service.d.ts.map +0 -1
- package/services/local-inference/service.js +0 -210
- package/services/local-inference/session-pool.d.ts +0 -72
- package/services/local-inference/session-pool.d.ts.map +0 -1
- package/services/local-inference/session-pool.js +0 -125
- package/services/local-inference/types.d.ts +0 -309
- package/services/local-inference/types.d.ts.map +0 -1
- package/services/local-inference/types.js +0 -23
- package/services/local-inference/verify.d.ts +0 -8
- package/services/local-inference/verify.d.ts.map +0 -1
- package/services/local-inference/verify.js +0 -7
- package/services/local-inference/voice/barge-in.d.ts +0 -15
- package/services/local-inference/voice/barge-in.d.ts.map +0 -1
- package/services/local-inference/voice/barge-in.js +0 -20
- package/services/local-inference/voice/engine-bridge.d.ts +0 -256
- package/services/local-inference/voice/engine-bridge.d.ts.map +0 -1
- package/services/local-inference/voice/engine-bridge.js +0 -398
- package/services/local-inference/voice/ffi-bindings.d.ts +0 -114
- package/services/local-inference/voice/ffi-bindings.d.ts.map +0 -1
- package/services/local-inference/voice/ffi-bindings.js +0 -281
- package/services/local-inference/voice/index.d.ts +0 -51
- package/services/local-inference/voice/index.d.ts.map +0 -1
- package/services/local-inference/voice/index.js +0 -50
- package/services/local-inference/voice/lifecycle.d.ts +0 -135
- package/services/local-inference/voice/lifecycle.d.ts.map +0 -1
- package/services/local-inference/voice/lifecycle.js +0 -189
- package/services/local-inference/voice/phoneme-tokenizer.d.ts +0 -58
- package/services/local-inference/voice/phoneme-tokenizer.d.ts.map +0 -1
- package/services/local-inference/voice/phoneme-tokenizer.js +0 -53
- package/services/local-inference/voice/phrase-cache.d.ts +0 -24
- package/services/local-inference/voice/phrase-cache.d.ts.map +0 -1
- package/services/local-inference/voice/phrase-cache.js +0 -32
- package/services/local-inference/voice/phrase-chunker.d.ts +0 -20
- package/services/local-inference/voice/phrase-chunker.d.ts.map +0 -1
- package/services/local-inference/voice/phrase-chunker.js +0 -85
- package/services/local-inference/voice/ring-buffer.d.ts +0 -40
- package/services/local-inference/voice/ring-buffer.d.ts.map +0 -1
- package/services/local-inference/voice/ring-buffer.js +0 -85
- package/services/local-inference/voice/rollback-queue.d.ts +0 -24
- package/services/local-inference/voice/rollback-queue.d.ts.map +0 -1
- package/services/local-inference/voice/rollback-queue.js +0 -49
- package/services/local-inference/voice/scheduler.d.ts +0 -47
- package/services/local-inference/voice/scheduler.d.ts.map +0 -1
- package/services/local-inference/voice/scheduler.js +0 -123
- package/services/local-inference/voice/shared-resources.d.ts +0 -119
- package/services/local-inference/voice/shared-resources.d.ts.map +0 -1
- package/services/local-inference/voice/shared-resources.js +0 -83
- package/services/local-inference/voice/speaker-preset-cache.d.ts +0 -28
- package/services/local-inference/voice/speaker-preset-cache.d.ts.map +0 -1
- package/services/local-inference/voice/speaker-preset-cache.js +0 -44
- package/services/local-inference/voice/types.d.ts +0 -80
- package/services/local-inference/voice/types.d.ts.map +0 -1
- package/services/local-inference/voice/voice-preset-format.d.ts +0 -56
- package/services/local-inference/voice/voice-preset-format.d.ts.map +0 -1
- package/services/local-inference/voice/voice-preset-format.js +0 -184
- package/services/plugin-installer.d.ts +0 -22
- package/services/plugin-installer.d.ts.map +0 -1
- package/services/plugin-installer.js +0 -41
- package/test/scripts/task-agent-live-smoke.ts +0 -1335
- /package/services/{local-inference/voice → ambient-audio}/types.js +0 -0
|
@@ -1,1076 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Out-of-process llama-server backend for DFlash speculative decoding.
|
|
3
|
-
*
|
|
4
|
-
* DFlash needs llama-server flags (`-md`, `--spec-type dflash`) that the
|
|
5
|
-
* in-process node-llama-cpp API does not expose. This backend is deliberately
|
|
6
|
-
* small: spawn a compatible llama-server, wait for health, and use the
|
|
7
|
-
* OpenAI-compatible chat endpoint so llama-server applies the model chat
|
|
8
|
-
* template and reasoning controls consistently with LlamaChatSession.
|
|
9
|
-
*/
|
|
10
|
-
import { spawn, spawnSync } from "node:child_process";
|
|
11
|
-
import fs from "node:fs";
|
|
12
|
-
import net from "node:net";
|
|
13
|
-
import os from "node:os";
|
|
14
|
-
import path from "node:path";
|
|
15
|
-
import { buildModelHash, DEFAULT_CACHE_TTLS, deriveSlotId, evictExpired, readCacheStats, slotSavePath, } from "./cache-bridge";
|
|
16
|
-
import { findCatalogModel } from "./catalog";
|
|
17
|
-
import { diffSnapshots, fetchMetricsSnapshot, } from "./llama-server-metrics";
|
|
18
|
-
import { localInferenceRoot } from "./paths";
|
|
19
|
-
const DEFAULT_HOST = "127.0.0.1";
|
|
20
|
-
const DEFAULT_START_TIMEOUT_MS = 120_000;
|
|
21
|
-
const METAL_UNSUPPORTED_CACHE_TYPES = new Set([
|
|
22
|
-
"turbo2",
|
|
23
|
-
"turbo3",
|
|
24
|
-
"turbo4",
|
|
25
|
-
"turbo2_0",
|
|
26
|
-
"turbo3_0",
|
|
27
|
-
"turbo4_0",
|
|
28
|
-
"turbo2_tcq",
|
|
29
|
-
"turbo3_tcq",
|
|
30
|
-
]);
|
|
31
|
-
const DFLASH_METRIC_ALIASES = {
|
|
32
|
-
decoded: ["llamacpp:n_decode_total", "llamacpp:n_decode"],
|
|
33
|
-
drafted: ["llamacpp:n_drafted_total", "llamacpp:n_drafted"],
|
|
34
|
-
accepted: [
|
|
35
|
-
"llamacpp:n_drafted_accepted_total",
|
|
36
|
-
"llamacpp:n_drafted_accepted",
|
|
37
|
-
"llamacpp:n_accepted_total",
|
|
38
|
-
"llamacpp:n_accepted",
|
|
39
|
-
],
|
|
40
|
-
};
|
|
41
|
-
export function parseDflashMetrics(body) {
|
|
42
|
-
const samples = new Map();
|
|
43
|
-
for (const rawLine of body.split(/\r?\n/)) {
|
|
44
|
-
const line = rawLine.trim();
|
|
45
|
-
if (!line || line.startsWith("#"))
|
|
46
|
-
continue;
|
|
47
|
-
const match = line.match(/^([a-zA-Z_:][\w:]*)(?:\{[^}]*\})?\s+([+-]?\d+(?:\.\d+)?(?:e[+-]?\d+)?)/);
|
|
48
|
-
if (!match)
|
|
49
|
-
continue;
|
|
50
|
-
const name = match[1];
|
|
51
|
-
const value = Number(match[2]);
|
|
52
|
-
if (!name || !Number.isFinite(value))
|
|
53
|
-
continue;
|
|
54
|
-
samples.set(name, (samples.get(name) ?? 0) + value);
|
|
55
|
-
}
|
|
56
|
-
const readFirst = (aliases) => {
|
|
57
|
-
for (const alias of aliases) {
|
|
58
|
-
const value = samples.get(alias);
|
|
59
|
-
if (value !== undefined)
|
|
60
|
-
return value;
|
|
61
|
-
}
|
|
62
|
-
return null;
|
|
63
|
-
};
|
|
64
|
-
const drafted = readFirst(DFLASH_METRIC_ALIASES.drafted);
|
|
65
|
-
const accepted = readFirst(DFLASH_METRIC_ALIASES.accepted);
|
|
66
|
-
if (drafted === null || accepted === null)
|
|
67
|
-
return null;
|
|
68
|
-
const decoded = readFirst(DFLASH_METRIC_ALIASES.decoded) ?? 0;
|
|
69
|
-
return {
|
|
70
|
-
decoded,
|
|
71
|
-
drafted,
|
|
72
|
-
accepted,
|
|
73
|
-
acceptanceRate: drafted > 0 ? accepted / drafted : Number.NaN,
|
|
74
|
-
};
|
|
75
|
-
}
|
|
76
|
-
function readBool(name) {
|
|
77
|
-
const raw = process.env[name]?.trim().toLowerCase();
|
|
78
|
-
return raw === "1" || raw === "true" || raw === "yes";
|
|
79
|
-
}
|
|
80
|
-
function managedDflashBinaryPath() {
|
|
81
|
-
return path.join(localInferenceRoot(), "bin", "dflash", platformKey(), "llama-server");
|
|
82
|
-
}
|
|
83
|
-
function managedDflashCapabilitiesPath() {
|
|
84
|
-
return path.join(localInferenceRoot(), "bin", "dflash", platformKey(), "CAPABILITIES.json");
|
|
85
|
-
}
|
|
86
|
-
let capabilitiesCache = null;
|
|
87
|
-
/**
|
|
88
|
-
* Read CAPABILITIES.json for the currently-installed binary, if present.
|
|
89
|
-
* Returns null when the file is missing or unreadable — older binaries
|
|
90
|
-
* built before the capabilities probe landed simply don't have it.
|
|
91
|
-
*
|
|
92
|
-
* Cached by path+mtime so repeated probes are cheap.
|
|
93
|
-
*/
|
|
94
|
-
export function readDflashBinaryCapabilities() {
|
|
95
|
-
const capsPath = managedDflashCapabilitiesPath();
|
|
96
|
-
let stat;
|
|
97
|
-
try {
|
|
98
|
-
stat = fs.statSync(capsPath);
|
|
99
|
-
}
|
|
100
|
-
catch {
|
|
101
|
-
return null;
|
|
102
|
-
}
|
|
103
|
-
if (capabilitiesCache &&
|
|
104
|
-
capabilitiesCache.path === capsPath &&
|
|
105
|
-
capabilitiesCache.mtimeMs === stat.mtimeMs) {
|
|
106
|
-
return capabilitiesCache.caps;
|
|
107
|
-
}
|
|
108
|
-
try {
|
|
109
|
-
const parsed = JSON.parse(fs.readFileSync(capsPath, "utf8"));
|
|
110
|
-
if (typeof parsed === "object" &&
|
|
111
|
-
parsed !== null &&
|
|
112
|
-
typeof parsed.kernels === "object" &&
|
|
113
|
-
parsed.kernels !== null) {
|
|
114
|
-
capabilitiesCache = {
|
|
115
|
-
path: capsPath,
|
|
116
|
-
mtimeMs: stat.mtimeMs,
|
|
117
|
-
caps: parsed,
|
|
118
|
-
};
|
|
119
|
-
return parsed;
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
catch {
|
|
123
|
-
// fall through
|
|
124
|
-
}
|
|
125
|
-
return null;
|
|
126
|
-
}
|
|
127
|
-
function isMetalDflashRuntime() {
|
|
128
|
-
return platformKey().endsWith("-metal");
|
|
129
|
-
}
|
|
130
|
-
function dflashMetalAutoEnabled() {
|
|
131
|
-
return (readBool("ELIZA_DFLASH_METAL_AUTO") ||
|
|
132
|
-
readBool("ELIZA_DFLASH_METAL_ENABLED"));
|
|
133
|
-
}
|
|
134
|
-
function assertCacheTypeSupportedOnBackend(name, value) {
|
|
135
|
-
if (isMetalDflashRuntime() &&
|
|
136
|
-
METAL_UNSUPPORTED_CACHE_TYPES.has(value.toLowerCase())) {
|
|
137
|
-
// Wave-3 hardware-verified all 5 Metal kernels 8/8 PASS on Apple M4 Max
|
|
138
|
-
// via the JIT harness, but the patch coverage audit (2026-05-10) found
|
|
139
|
-
// the standalones do NOT actually ship in the v0.4.0-milady binary —
|
|
140
|
-
// build-llama-cpp-dflash.mjs's patchMetal* hooks are decorative-only.
|
|
141
|
-
// Until the shader-shipping work lands AND the shipped binary itself
|
|
142
|
-
// is re-verified, the runtime correctly refuses these cache types on
|
|
143
|
-
// Metal. Once capabilities.kernels.turbo3 etc. flip to true via a real
|
|
144
|
-
// build, gate this on the capability instead of the static set.
|
|
145
|
-
throw new Error(`${name}=${value} is not yet shipped in the Metal binary. Wave-3 verified the kernels in a JIT harness but the build pipeline doesn't compile them into the shipped artifact. Use f16 KV on Metal until the kernel-shipping work lands.`);
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
export function dflashEnabled() {
|
|
149
|
-
if (readBool("ELIZA_DFLASH_DISABLED"))
|
|
150
|
-
return false;
|
|
151
|
-
if (readBool("ELIZA_DFLASH_ENABLED"))
|
|
152
|
-
return true;
|
|
153
|
-
if (!fs.existsSync(managedDflashBinaryPath()))
|
|
154
|
-
return false;
|
|
155
|
-
if (isMetalDflashRuntime())
|
|
156
|
-
return dflashMetalAutoEnabled();
|
|
157
|
-
return true;
|
|
158
|
-
}
|
|
159
|
-
export function dflashRequired() {
|
|
160
|
-
return readBool("ELIZA_DFLASH_REQUIRED");
|
|
161
|
-
}
|
|
162
|
-
function candidateBinaryPaths() {
|
|
163
|
-
const explicit = process.env.ELIZA_DFLASH_LLAMA_SERVER?.trim();
|
|
164
|
-
const out = explicit ? [explicit] : [];
|
|
165
|
-
out.push(managedDflashBinaryPath());
|
|
166
|
-
if (readBool("ELIZA_DFLASH_ENABLED"))
|
|
167
|
-
out.push("llama-server");
|
|
168
|
-
return out;
|
|
169
|
-
}
|
|
170
|
-
function platformKey() {
|
|
171
|
-
const forced = process.env.ELIZA_DFLASH_BACKEND?.trim().toLowerCase();
|
|
172
|
-
if (forced)
|
|
173
|
-
return `${process.platform}-${process.arch}-${forced}`;
|
|
174
|
-
const backend = process.platform === "darwin"
|
|
175
|
-
? "metal"
|
|
176
|
-
: process.env.HIP_VISIBLE_DEVICES || process.env.ROCR_VISIBLE_DEVICES
|
|
177
|
-
? "rocm"
|
|
178
|
-
: process.env.CUDA_VISIBLE_DEVICES &&
|
|
179
|
-
process.env.CUDA_VISIBLE_DEVICES !== "-1"
|
|
180
|
-
? "cuda"
|
|
181
|
-
: "cpu";
|
|
182
|
-
return `${process.platform}-${process.arch}-${backend}`;
|
|
183
|
-
}
|
|
184
|
-
export function resolveDflashBinary() {
|
|
185
|
-
for (const candidate of candidateBinaryPaths()) {
|
|
186
|
-
if (candidate.includes(path.sep)) {
|
|
187
|
-
if (fs.existsSync(candidate))
|
|
188
|
-
return candidate;
|
|
189
|
-
continue;
|
|
190
|
-
}
|
|
191
|
-
const pathEnv = process.env.PATH ?? "";
|
|
192
|
-
for (const dir of pathEnv.split(path.delimiter)) {
|
|
193
|
-
const resolved = path.join(dir, candidate);
|
|
194
|
-
if (fs.existsSync(resolved))
|
|
195
|
-
return resolved;
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
return null;
|
|
199
|
-
}
|
|
200
|
-
export function getDflashRuntimeStatus() {
|
|
201
|
-
const binary = resolveDflashBinary();
|
|
202
|
-
const capabilities = readDflashBinaryCapabilities();
|
|
203
|
-
if (!dflashEnabled()) {
|
|
204
|
-
const managedBinaryExists = fs.existsSync(managedDflashBinaryPath());
|
|
205
|
-
const reason = managedBinaryExists && isMetalDflashRuntime()
|
|
206
|
-
? "DFlash Metal binary found but auto-disabled because the current Eliza-1 Metal path is faster target-only; set ELIZA_DFLASH_ENABLED=1 or ELIZA_DFLASH_METAL_AUTO=1 to force it."
|
|
207
|
-
: "DFlash auto-enables when the managed llama-server binary is installed; set ELIZA_DFLASH_ENABLED=1 to force a PATH/explicit binary, or run packages/app-core/scripts/build-llama-cpp-dflash.mjs.";
|
|
208
|
-
return {
|
|
209
|
-
enabled: false,
|
|
210
|
-
required: dflashRequired(),
|
|
211
|
-
binaryPath: binary,
|
|
212
|
-
reason,
|
|
213
|
-
capabilities,
|
|
214
|
-
};
|
|
215
|
-
}
|
|
216
|
-
if (!binary) {
|
|
217
|
-
return {
|
|
218
|
-
enabled: false,
|
|
219
|
-
required: dflashRequired(),
|
|
220
|
-
binaryPath: null,
|
|
221
|
-
reason: "No compatible llama-server found. Set ELIZA_DFLASH_LLAMA_SERVER or run packages/app-core/scripts/build-llama-cpp-dflash.mjs.",
|
|
222
|
-
capabilities,
|
|
223
|
-
};
|
|
224
|
-
}
|
|
225
|
-
return {
|
|
226
|
-
enabled: true,
|
|
227
|
-
required: dflashRequired(),
|
|
228
|
-
binaryPath: binary,
|
|
229
|
-
reason: "DFlash llama-server binary found.",
|
|
230
|
-
capabilities,
|
|
231
|
-
};
|
|
232
|
-
}
|
|
233
|
-
function normalizeGpuLayers(value) {
|
|
234
|
-
return value === "auto" ? "99" : String(value);
|
|
235
|
-
}
|
|
236
|
-
function findPython() {
|
|
237
|
-
for (const candidate of ["python3", "python"]) {
|
|
238
|
-
const result = spawnSync(candidate, ["--version"], {
|
|
239
|
-
stdio: "ignore",
|
|
240
|
-
env: process.env,
|
|
241
|
-
});
|
|
242
|
-
if (result.status === 0)
|
|
243
|
-
return candidate;
|
|
244
|
-
}
|
|
245
|
-
return null;
|
|
246
|
-
}
|
|
247
|
-
function maybeRepairDflashDrafter(binaryPath, targetModelPath, drafterModelPath) {
|
|
248
|
-
if (readBool("ELIZA_DFLASH_REPAIR_DISABLED"))
|
|
249
|
-
return drafterModelPath;
|
|
250
|
-
if (!fs.existsSync(targetModelPath) || !fs.existsSync(drafterModelPath)) {
|
|
251
|
-
return drafterModelPath;
|
|
252
|
-
}
|
|
253
|
-
const repairedPath = drafterModelPath.replace(/\.gguf$/i, ".repaired.gguf");
|
|
254
|
-
if (repairedPath === drafterModelPath)
|
|
255
|
-
return drafterModelPath;
|
|
256
|
-
if (fs.existsSync(repairedPath))
|
|
257
|
-
return repairedPath;
|
|
258
|
-
const python = findPython();
|
|
259
|
-
if (!python)
|
|
260
|
-
return drafterModelPath;
|
|
261
|
-
const bundledGgufPy = path.join(path.dirname(binaryPath), "gguf-py");
|
|
262
|
-
const pythonPath = [
|
|
263
|
-
fs.existsSync(bundledGgufPy) ? bundledGgufPy : null,
|
|
264
|
-
process.env.PYTHONPATH,
|
|
265
|
-
]
|
|
266
|
-
.filter((value) => Boolean(value))
|
|
267
|
-
.join(path.delimiter);
|
|
268
|
-
const repairCode = `
|
|
269
|
-
import sys
|
|
270
|
-
from pathlib import Path
|
|
271
|
-
|
|
272
|
-
if len(sys.argv) != 4:
|
|
273
|
-
raise SystemExit("usage: repair_dflash.py TARGET DRAFTER OUT")
|
|
274
|
-
|
|
275
|
-
target = Path(sys.argv[1])
|
|
276
|
-
drafter = Path(sys.argv[2])
|
|
277
|
-
out = Path(sys.argv[3])
|
|
278
|
-
|
|
279
|
-
import gguf
|
|
280
|
-
from gguf.scripts.gguf_new_metadata import MetadataDetails, copy_with_new_metadata, get_field_data
|
|
281
|
-
|
|
282
|
-
target_reader = gguf.GGUFReader(target, "r")
|
|
283
|
-
draft_reader = gguf.GGUFReader(drafter, "r")
|
|
284
|
-
|
|
285
|
-
if get_field_data(draft_reader, gguf.Keys.Tokenizer.MERGES):
|
|
286
|
-
print(drafter)
|
|
287
|
-
raise SystemExit(0)
|
|
288
|
-
|
|
289
|
-
merges = get_field_data(target_reader, gguf.Keys.Tokenizer.MERGES)
|
|
290
|
-
if not merges:
|
|
291
|
-
raise SystemExit("target GGUF has no tokenizer.ggml.merges metadata")
|
|
292
|
-
|
|
293
|
-
arch = get_field_data(draft_reader, gguf.Keys.General.ARCHITECTURE)
|
|
294
|
-
writer = gguf.GGUFWriter(out, arch=arch, endianess=draft_reader.endianess)
|
|
295
|
-
alignment = get_field_data(draft_reader, gguf.Keys.General.ALIGNMENT)
|
|
296
|
-
if alignment is not None:
|
|
297
|
-
writer.data_alignment = alignment
|
|
298
|
-
copy_with_new_metadata(
|
|
299
|
-
draft_reader,
|
|
300
|
-
writer,
|
|
301
|
-
{gguf.Keys.Tokenizer.MERGES: MetadataDetails(gguf.GGUFValueType.ARRAY, merges, sub_type=gguf.GGUFValueType.STRING)},
|
|
302
|
-
[],
|
|
303
|
-
)
|
|
304
|
-
print(out)
|
|
305
|
-
`;
|
|
306
|
-
const result = spawnSync(python, ["-c", repairCode, targetModelPath, drafterModelPath, repairedPath], {
|
|
307
|
-
env: {
|
|
308
|
-
...process.env,
|
|
309
|
-
...(pythonPath ? { PYTHONPATH: pythonPath } : {}),
|
|
310
|
-
},
|
|
311
|
-
encoding: "utf8",
|
|
312
|
-
maxBuffer: 16 * 1024 * 1024,
|
|
313
|
-
});
|
|
314
|
-
if (result.status !== 0) {
|
|
315
|
-
console.warn("[local-inference] DFlash drafter tokenizer repair failed; trying original drafter:", result.stderr || result.stdout);
|
|
316
|
-
return drafterModelPath;
|
|
317
|
-
}
|
|
318
|
-
const outputPath = result.stdout.trim().split(/\r?\n/).at(-1)?.trim();
|
|
319
|
-
return outputPath && fs.existsSync(outputPath)
|
|
320
|
-
? outputPath
|
|
321
|
-
: drafterModelPath;
|
|
322
|
-
}
|
|
323
|
-
function resolvePort() {
|
|
324
|
-
const explicit = Number.parseInt(process.env.ELIZA_DFLASH_PORT ?? "", 10);
|
|
325
|
-
if (Number.isFinite(explicit) && explicit > 0) {
|
|
326
|
-
return Promise.resolve(explicit);
|
|
327
|
-
}
|
|
328
|
-
return new Promise((resolve, reject) => {
|
|
329
|
-
const server = net.createServer();
|
|
330
|
-
server.unref();
|
|
331
|
-
server.on("error", reject);
|
|
332
|
-
server.listen(0, DEFAULT_HOST, () => {
|
|
333
|
-
const address = server.address();
|
|
334
|
-
server.close(() => {
|
|
335
|
-
if (address && typeof address === "object") {
|
|
336
|
-
resolve(address.port);
|
|
337
|
-
}
|
|
338
|
-
else {
|
|
339
|
-
reject(new Error("Could not allocate a loopback port for llama-server"));
|
|
340
|
-
}
|
|
341
|
-
});
|
|
342
|
-
});
|
|
343
|
-
});
|
|
344
|
-
}
|
|
345
|
-
async function sleep(ms) {
|
|
346
|
-
await new Promise((resolve) => setTimeout(resolve, ms));
|
|
347
|
-
}
|
|
348
|
-
async function fetchJson(url, init, timeoutMs = 60_000) {
|
|
349
|
-
const controller = new AbortController();
|
|
350
|
-
const timer = setTimeout(() => controller.abort(), timeoutMs);
|
|
351
|
-
try {
|
|
352
|
-
const res = await fetch(url, { ...init, signal: controller.signal });
|
|
353
|
-
if (!res.ok) {
|
|
354
|
-
const body = await res.text().catch(() => "");
|
|
355
|
-
throw new Error(`HTTP ${res.status} from ${url}${body ? `: ${body}` : ""}`);
|
|
356
|
-
}
|
|
357
|
-
return await res.json();
|
|
358
|
-
}
|
|
359
|
-
finally {
|
|
360
|
-
clearTimeout(timer);
|
|
361
|
-
}
|
|
362
|
-
}
|
|
363
|
-
/**
|
|
364
|
-
* Default `--parallel` when caching is enabled. Higher values give more
|
|
365
|
-
* distinct cache slots so concurrent prefixes don't evict each other,
|
|
366
|
-
* at the cost of KV memory. 4 is a balance that works for a single-user
|
|
367
|
-
* desktop while still saturating a single GPU under load.
|
|
368
|
-
*/
|
|
369
|
-
const DEFAULT_CACHE_PARALLEL = 4;
|
|
370
|
-
/**
|
|
371
|
-
* Resolve `--parallel`. Order: ELIZA_LOCAL_PARALLEL (generalised) →
|
|
372
|
-
* ELIZA_DFLASH_PARALLEL (legacy) → catalog `optimizations.parallel` →
|
|
373
|
-
* DEFAULT_CACHE_PARALLEL. The generalised env wins because it's the
|
|
374
|
-
* operator's explicit override; the legacy DFlash-specific env stays
|
|
375
|
-
* for back-compat.
|
|
376
|
-
*/
|
|
377
|
-
function resolveParallel(catalogParallel) {
|
|
378
|
-
for (const raw of [
|
|
379
|
-
process.env.ELIZA_LOCAL_PARALLEL,
|
|
380
|
-
process.env.ELIZA_DFLASH_PARALLEL,
|
|
381
|
-
]) {
|
|
382
|
-
const trimmed = raw?.trim();
|
|
383
|
-
if (!trimmed)
|
|
384
|
-
continue;
|
|
385
|
-
const parsed = Number.parseInt(trimmed, 10);
|
|
386
|
-
if (Number.isFinite(parsed) && parsed >= 1)
|
|
387
|
-
return parsed;
|
|
388
|
-
}
|
|
389
|
-
if (typeof catalogParallel === "number" &&
|
|
390
|
-
Number.isFinite(catalogParallel) &&
|
|
391
|
-
catalogParallel >= 1) {
|
|
392
|
-
return catalogParallel;
|
|
393
|
-
}
|
|
394
|
-
return DEFAULT_CACHE_PARALLEL;
|
|
395
|
-
}
|
|
396
|
-
/**
|
|
397
|
-
* Append optimization flags driven by env overrides + catalog metadata to a
|
|
398
|
-
* llama-server arg list. Env wins over the catalog when both supply the
|
|
399
|
-
* same knob — the operator's escape hatch.
|
|
400
|
-
*
|
|
401
|
-
* Env mapping (per AGENTS.md / task brief):
|
|
402
|
-
*
|
|
403
|
-
* ELIZA_LOCAL_LOOKAHEAD=N → --lookahead N
|
|
404
|
-
* ELIZA_LOCAL_NGRAM=on → enable n-gram drafter (uses
|
|
405
|
-
* optimizations.ngramDraft when set,
|
|
406
|
-
* else conservative defaults)
|
|
407
|
-
* ELIZA_LOCAL_PARALLEL=N → --parallel N (handled by resolveParallel
|
|
408
|
-
* at the call site, not here)
|
|
409
|
-
* ELIZA_LOCAL_MOE_OFFLOAD=cpu → -ot ".*=CPU"
|
|
410
|
-
* ELIZA_LOCAL_MLOCK=1 → --mlock
|
|
411
|
-
* ELIZA_LOCAL_NO_MMAP=1 → --no-mmap
|
|
412
|
-
* ELIZA_LOCAL_FLASH_ATTENTION=on → -fa on (DFlash already implies it via
|
|
413
|
-
* spec config; this is for non-DFlash
|
|
414
|
-
* llama-server use cases)
|
|
415
|
-
*/
|
|
416
|
-
function readBoolFlag(name) {
|
|
417
|
-
const raw = process.env[name]?.trim().toLowerCase();
|
|
418
|
-
if (raw === undefined)
|
|
419
|
-
return undefined;
|
|
420
|
-
if (raw === "1" || raw === "true" || raw === "yes" || raw === "on") {
|
|
421
|
-
return true;
|
|
422
|
-
}
|
|
423
|
-
if (raw === "0" || raw === "false" || raw === "no" || raw === "off") {
|
|
424
|
-
return false;
|
|
425
|
-
}
|
|
426
|
-
return undefined;
|
|
427
|
-
}
|
|
428
|
-
export function appendOptimizationFlags(args, optimizations) {
|
|
429
|
-
// --lookahead N
|
|
430
|
-
const lookaheadEnv = process.env.ELIZA_LOCAL_LOOKAHEAD?.trim();
|
|
431
|
-
const lookaheadValue = lookaheadEnv
|
|
432
|
-
? Number.parseInt(lookaheadEnv, 10)
|
|
433
|
-
: optimizations?.lookahead;
|
|
434
|
-
if (typeof lookaheadValue === "number" &&
|
|
435
|
-
Number.isFinite(lookaheadValue) &&
|
|
436
|
-
lookaheadValue > 0) {
|
|
437
|
-
args.push("--lookahead", String(lookaheadValue));
|
|
438
|
-
}
|
|
439
|
-
// N-gram drafter — only meaningful when DFlash is NOT in use (mutually
|
|
440
|
-
// exclusive). Caller is responsible for not setting ngramDraft on a
|
|
441
|
-
// DFlash-configured catalog entry.
|
|
442
|
-
const ngramEnvOn = readBoolFlag("ELIZA_LOCAL_NGRAM");
|
|
443
|
-
const ngramConfig = optimizations?.ngramDraft;
|
|
444
|
-
const ngramEffective = ngramEnvOn === false
|
|
445
|
-
? null
|
|
446
|
-
: (ngramConfig ?? (ngramEnvOn ? { min: 4, max: 8, minProb: 0.5 } : null));
|
|
447
|
-
if (ngramEffective) {
|
|
448
|
-
args.push("--draft-min", String(ngramEffective.min));
|
|
449
|
-
args.push("--draft-max", String(ngramEffective.max));
|
|
450
|
-
args.push("--draft-min-prob", String(ngramEffective.minProb));
|
|
451
|
-
}
|
|
452
|
-
// -ot ".*=CPU" — MoE expert offload to CPU.
|
|
453
|
-
const moeEnv = process.env.ELIZA_LOCAL_MOE_OFFLOAD?.trim().toLowerCase();
|
|
454
|
-
const moeMode = moeEnv ?? optimizations?.moeOffload;
|
|
455
|
-
if (moeMode === "cpu") {
|
|
456
|
-
args.push("-ot", ".*=CPU");
|
|
457
|
-
}
|
|
458
|
-
// --mlock
|
|
459
|
-
const mlockEnv = readBoolFlag("ELIZA_LOCAL_MLOCK");
|
|
460
|
-
const mlock = mlockEnv ?? optimizations?.mlock;
|
|
461
|
-
if (mlock === true)
|
|
462
|
-
args.push("--mlock");
|
|
463
|
-
// --no-mmap
|
|
464
|
-
const noMmapEnv = readBoolFlag("ELIZA_LOCAL_NO_MMAP");
|
|
465
|
-
const noMmap = noMmapEnv ?? optimizations?.noMmap;
|
|
466
|
-
if (noMmap === true)
|
|
467
|
-
args.push("--no-mmap");
|
|
468
|
-
// --mmproj <path>
|
|
469
|
-
const mmprojEnv = process.env.ELIZA_LOCAL_MMPROJ?.trim();
|
|
470
|
-
const mmproj = mmprojEnv || optimizations?.mmproj;
|
|
471
|
-
if (mmproj)
|
|
472
|
-
args.push("--mmproj", mmproj);
|
|
473
|
-
// --alias <name>
|
|
474
|
-
const aliasEnv = process.env.ELIZA_LOCAL_ALIAS?.trim();
|
|
475
|
-
const alias = aliasEnv || optimizations?.alias;
|
|
476
|
-
if (alias)
|
|
477
|
-
args.push("--alias", alias);
|
|
478
|
-
// -fa on / -fa off (catalog default off so existing DFlash behaviour
|
|
479
|
-
// — which compiles flash attention into the spec config — is unchanged
|
|
480
|
-
// unless the operator opts in).
|
|
481
|
-
const faEnv = readBoolFlag("ELIZA_LOCAL_FLASH_ATTENTION");
|
|
482
|
-
const fa = faEnv ?? optimizations?.flashAttention;
|
|
483
|
-
if (fa === true)
|
|
484
|
-
args.push("-fa", "on");
|
|
485
|
-
return args;
|
|
486
|
-
}
|
|
487
|
-
/**
|
|
488
|
-
* Default eviction sweep interval. Set to 5 minutes to match the short
|
|
489
|
-
* TTL — a slot file at most one short-TTL window stale before it's
|
|
490
|
-
* deleted. Override via `ELIZA_LOCAL_EVICTION_INTERVAL_MS`.
|
|
491
|
-
*/
|
|
492
|
-
const DEFAULT_EVICTION_INTERVAL_MS = 5 * 60 * 1000;
|
|
493
|
-
function resolveEvictionIntervalMs() {
|
|
494
|
-
const raw = process.env.ELIZA_LOCAL_EVICTION_INTERVAL_MS?.trim();
|
|
495
|
-
if (!raw)
|
|
496
|
-
return DEFAULT_EVICTION_INTERVAL_MS;
|
|
497
|
-
const parsed = Number.parseInt(raw, 10);
|
|
498
|
-
if (!Number.isFinite(parsed) || parsed < 60_000) {
|
|
499
|
-
// Anything under a minute is almost certainly a typo; clamp to
|
|
500
|
-
// protect the disk from sweep storms.
|
|
501
|
-
return DEFAULT_EVICTION_INTERVAL_MS;
|
|
502
|
-
}
|
|
503
|
-
return parsed;
|
|
504
|
-
}
|
|
505
|
-
export class DflashLlamaServer {
|
|
506
|
-
id = "llama-server";
|
|
507
|
-
child = null;
|
|
508
|
-
baseUrl = null;
|
|
509
|
-
stderrTail = [];
|
|
510
|
-
loadedPlan = null;
|
|
511
|
-
/**
|
|
512
|
-
* Cache state captured at `start()`. The model hash + parallel count
|
|
513
|
-
* stay constant for the lifetime of the spawned process so we record
|
|
514
|
-
* them once and reuse them on every `generate()` call.
|
|
515
|
-
*/
|
|
516
|
-
cacheModelHash = null;
|
|
517
|
-
cacheParallel = DEFAULT_CACHE_PARALLEL;
|
|
518
|
-
cacheSlotDir = null;
|
|
519
|
-
evictionTimer = null;
|
|
520
|
-
/**
|
|
521
|
-
* Per-conversation slot files persisted on shutdown for cross-restart
|
|
522
|
-
* KV reuse. Distinct from the per-slot save dir: this directory keys
|
|
523
|
-
* by conversation id, so a conversation that comes back with a different
|
|
524
|
-
* slot id (e.g. after a --parallel resize) can still find its KV.
|
|
525
|
-
*/
|
|
526
|
-
conversationKvDir = null;
|
|
527
|
-
/**
|
|
528
|
-
* Track which conversation ids have written KV state so far this
|
|
529
|
-
* process lifetime. Used for diagnostics and the "did the last save
|
|
530
|
-
* actually happen" assertion in tests.
|
|
531
|
-
*/
|
|
532
|
-
persistedConversations = new Set();
|
|
533
|
-
hasLoadedModel() {
|
|
534
|
-
return this.child !== null && this.loadedPlan !== null;
|
|
535
|
-
}
|
|
536
|
-
currentModelPath() {
|
|
537
|
-
return this.loadedPlan?.targetModelPath ?? null;
|
|
538
|
-
}
|
|
539
|
-
/**
|
|
540
|
-
* Scrape the running llama-server's `/metrics` endpoint and return a
|
|
541
|
-
* `DflashMetricsSnapshot` with `drafted` / `accepted` / `decoded` counts.
|
|
542
|
-
* Returns `null` when no server is loaded, the endpoint isn't reachable,
|
|
543
|
-
* or the response doesn't contain the expected speculative counters.
|
|
544
|
-
* Mirrors the UI twin's API so `dflash-doctor` works against either copy.
|
|
545
|
-
*/
|
|
546
|
-
async getMetrics() {
|
|
547
|
-
if (!this.baseUrl)
|
|
548
|
-
return null;
|
|
549
|
-
try {
|
|
550
|
-
const res = await fetch(`${this.baseUrl.replace(/\/$/, "")}/metrics`, {
|
|
551
|
-
method: "GET",
|
|
552
|
-
});
|
|
553
|
-
if (!res.ok)
|
|
554
|
-
return null;
|
|
555
|
-
return parseDflashMetrics(await res.text());
|
|
556
|
-
}
|
|
557
|
-
catch {
|
|
558
|
-
return null;
|
|
559
|
-
}
|
|
560
|
-
}
|
|
561
|
-
/**
|
|
562
|
-
* Parallel slot count negotiated at `start()`. Used by the engine's
|
|
563
|
-
* conversation handle API to size new conversations into available
|
|
564
|
-
* slots. Returns the static default when no server is running.
|
|
565
|
-
*/
|
|
566
|
-
parallelSlots() {
|
|
567
|
-
return this.cacheParallel;
|
|
568
|
-
}
|
|
569
|
-
/** Soft probe — does the binary resolve and is DFlash enabled. */
|
|
570
|
-
async available() {
|
|
571
|
-
return getDflashRuntimeStatus().enabled;
|
|
572
|
-
}
|
|
573
|
-
/**
|
|
574
|
-
* Unified backend contract entry point. Resolves the catalog entry from
|
|
575
|
-
* the plan and delegates to `start()` if a DFlash plan is configured.
|
|
576
|
-
* For non-DFlash llama-server use (e.g. `requiresKernel` for turbo3
|
|
577
|
-
* without spec decoding), the catalog can declare an `optimizations`
|
|
578
|
-
* block without `dflash` and we still launch the server here.
|
|
579
|
-
*/
|
|
580
|
-
async load(plan) {
|
|
581
|
-
const catalog = plan.catalog ??
|
|
582
|
-
(plan.modelId ? findCatalogModel(plan.modelId) : undefined);
|
|
583
|
-
const dflash = catalog?.runtime?.dflash;
|
|
584
|
-
const optimizations = catalog?.runtime?.optimizations ?? null;
|
|
585
|
-
if (!dflash) {
|
|
586
|
-
throw new Error(`[dflash] llama-server backend currently requires a catalog 'runtime.dflash' block. Model '${plan.modelId ?? plan.modelPath}' has none — declare DFlash or route this model through node-llama-cpp.`);
|
|
587
|
-
}
|
|
588
|
-
// The drafter is resolved from the registry by the engine before this
|
|
589
|
-
// dispatcher call, but the engine no longer pre-builds the dflash plan,
|
|
590
|
-
// so we resolve it here. Inline import avoids the engine ↔ dflash-server
|
|
591
|
-
// import cycle.
|
|
592
|
-
const { listInstalledModels } = await import("./registry");
|
|
593
|
-
const installed = await listInstalledModels();
|
|
594
|
-
const target = installed.find((m) => m.path === plan.modelPath) ??
|
|
595
|
-
installed.find((m) => m.id === plan.modelId);
|
|
596
|
-
if (!target) {
|
|
597
|
-
throw new Error(`[dflash] No installed model matched plan path/id (${plan.modelPath}; ${plan.modelId ?? "no id"}).`);
|
|
598
|
-
}
|
|
599
|
-
const drafter = installed.find((m) => m.id === dflash.drafterModelId);
|
|
600
|
-
if (!drafter) {
|
|
601
|
-
throw new Error(`[dflash] ${target.displayName} requires companion drafter ${dflash.drafterModelId}; install it first.`);
|
|
602
|
-
}
|
|
603
|
-
// Per-load overrides win over catalog defaults. The active-model
|
|
604
|
-
// coordinator merges these in before the dispatcher is called; this
|
|
605
|
-
// keeps the same precedence on the llama-server path so a benchmark
|
|
606
|
-
// run that asks for `contextSize: 131072` actually starts the server
|
|
607
|
-
// with `--ctx-size 131072` instead of the smaller catalog default.
|
|
608
|
-
const overrides = plan.overrides;
|
|
609
|
-
const contextSize = typeof overrides?.contextSize === "number"
|
|
610
|
-
? overrides.contextSize
|
|
611
|
-
: dflash.contextSize;
|
|
612
|
-
const gpuLayers = typeof overrides?.gpuLayers === "number"
|
|
613
|
-
? overrides.gpuLayers
|
|
614
|
-
: dflash.gpuLayers;
|
|
615
|
-
await this.start({
|
|
616
|
-
targetModelPath: target.path,
|
|
617
|
-
drafterModelPath: drafter.path,
|
|
618
|
-
contextSize,
|
|
619
|
-
draftContextSize: dflash.draftContextSize,
|
|
620
|
-
draftMin: dflash.draftMin,
|
|
621
|
-
draftMax: dflash.draftMax,
|
|
622
|
-
gpuLayers,
|
|
623
|
-
draftGpuLayers: dflash.draftGpuLayers,
|
|
624
|
-
disableThinking: dflash.disableThinking,
|
|
625
|
-
}, optimizations);
|
|
626
|
-
}
|
|
627
|
-
/** Backend interface alias for stop(). */
|
|
628
|
-
async unload() {
|
|
629
|
-
await this.stop();
|
|
630
|
-
}
|
|
631
|
-
async start(plan, optimizations) {
|
|
632
|
-
if (this.child &&
|
|
633
|
-
this.loadedPlan?.targetModelPath === plan.targetModelPath &&
|
|
634
|
-
this.loadedPlan.drafterModelPath === plan.drafterModelPath) {
|
|
635
|
-
return;
|
|
636
|
-
}
|
|
637
|
-
await this.stop();
|
|
638
|
-
const status = getDflashRuntimeStatus();
|
|
639
|
-
if (!status.enabled || !status.binaryPath) {
|
|
640
|
-
throw new Error(`[dflash] ${status.reason}`);
|
|
641
|
-
}
|
|
642
|
-
const drafterModelPath = maybeRepairDflashDrafter(status.binaryPath, plan.targetModelPath, plan.drafterModelPath);
|
|
643
|
-
const port = await resolvePort();
|
|
644
|
-
const host = process.env.ELIZA_DFLASH_HOST?.trim() || DEFAULT_HOST;
|
|
645
|
-
const cacheTypeK = process.env.ELIZA_DFLASH_CACHE_TYPE_K?.trim();
|
|
646
|
-
const cacheTypeV = process.env.ELIZA_DFLASH_CACHE_TYPE_V?.trim();
|
|
647
|
-
const parallel = resolveParallel(optimizations?.parallel);
|
|
648
|
-
const modelHash = buildModelHash({
|
|
649
|
-
targetModelPath: plan.targetModelPath,
|
|
650
|
-
drafterModelPath,
|
|
651
|
-
cacheTypeK: cacheTypeK ?? null,
|
|
652
|
-
cacheTypeV: cacheTypeV ?? null,
|
|
653
|
-
extra: `ctx=${plan.contextSize};parallel=${parallel}`,
|
|
654
|
-
});
|
|
655
|
-
const slotDir = slotSavePath(modelHash);
|
|
656
|
-
// llama-server's slot API treats `filename` as a basename relative to
|
|
657
|
-
// --slot-save-path. Keep per-conversation KV files in that same root so
|
|
658
|
-
// save and restore agree on the exact path.
|
|
659
|
-
const conversationKvDir = slotDir;
|
|
660
|
-
fs.mkdirSync(slotDir, { recursive: true });
|
|
661
|
-
// Fire-and-forget eviction: stale slot files on disk shouldn't block
|
|
662
|
-
// server startup, but we don't want them to grow without bound.
|
|
663
|
-
void evictExpired(slotDir, DEFAULT_CACHE_TTLS).catch(() => {
|
|
664
|
-
// Best effort; an EACCES or similar should not prevent server start.
|
|
665
|
-
});
|
|
666
|
-
void evictExpired(conversationKvDir, DEFAULT_CACHE_TTLS).catch(() => { });
|
|
667
|
-
this.cacheModelHash = modelHash;
|
|
668
|
-
this.cacheParallel = parallel;
|
|
669
|
-
this.cacheSlotDir = slotDir;
|
|
670
|
-
this.conversationKvDir = conversationKvDir;
|
|
671
|
-
const args = [
|
|
672
|
-
"--model",
|
|
673
|
-
plan.targetModelPath,
|
|
674
|
-
"-md",
|
|
675
|
-
drafterModelPath,
|
|
676
|
-
"--spec-type",
|
|
677
|
-
"dflash",
|
|
678
|
-
"--host",
|
|
679
|
-
host,
|
|
680
|
-
"--port",
|
|
681
|
-
String(port),
|
|
682
|
-
"--n-gpu-layers",
|
|
683
|
-
normalizeGpuLayers(plan.gpuLayers),
|
|
684
|
-
"--n-gpu-layers-draft",
|
|
685
|
-
normalizeGpuLayers(plan.draftGpuLayers),
|
|
686
|
-
"--ctx-size",
|
|
687
|
-
String(plan.contextSize),
|
|
688
|
-
"--ctx-size-draft",
|
|
689
|
-
String(plan.draftContextSize),
|
|
690
|
-
"--draft-min",
|
|
691
|
-
String(plan.draftMin),
|
|
692
|
-
"--draft-max",
|
|
693
|
-
String(plan.draftMax),
|
|
694
|
-
"--parallel",
|
|
695
|
-
String(parallel),
|
|
696
|
-
// Persist per-slot KV state to disk so prefix reuse survives the
|
|
697
|
-
// process lifetime. llama-server keys files by slot id, not by
|
|
698
|
-
// prompt hash, but combined with deterministic slot_id derivation
|
|
699
|
-
// this gives effective prefix caching across restarts.
|
|
700
|
-
"--slot-save-path",
|
|
701
|
-
slotDir,
|
|
702
|
-
// Allow the server to fall back to a similar slot (>= 0.7
|
|
703
|
-
// similarity) when an exact match isn't loaded — useful when
|
|
704
|
-
// distinct keys land on the same slot due to hash collision.
|
|
705
|
-
"--slot-prompt-similarity",
|
|
706
|
-
"0.7",
|
|
707
|
-
"--metrics",
|
|
708
|
-
"--jinja",
|
|
709
|
-
];
|
|
710
|
-
if (plan.disableThinking) {
|
|
711
|
-
args.push("--reasoning", "off");
|
|
712
|
-
args.push("--chat-template-kwargs", '{"enable_thinking":false}');
|
|
713
|
-
}
|
|
714
|
-
if (cacheTypeK) {
|
|
715
|
-
assertCacheTypeSupportedOnBackend("ELIZA_DFLASH_CACHE_TYPE_K", cacheTypeK);
|
|
716
|
-
args.push("--cache-type-k", cacheTypeK);
|
|
717
|
-
}
|
|
718
|
-
if (cacheTypeV) {
|
|
719
|
-
assertCacheTypeSupportedOnBackend("ELIZA_DFLASH_CACHE_TYPE_V", cacheTypeV);
|
|
720
|
-
args.push("--cache-type-v", cacheTypeV);
|
|
721
|
-
}
|
|
722
|
-
appendOptimizationFlags(args, optimizations ?? null);
|
|
723
|
-
const extra = process.env.ELIZA_DFLASH_LLAMA_ARGS?.trim();
|
|
724
|
-
if (extra && isMetalDflashRuntime()) {
|
|
725
|
-
for (const cacheType of METAL_UNSUPPORTED_CACHE_TYPES) {
|
|
726
|
-
if (extra.toLowerCase().split(/\s+/).includes(cacheType)) {
|
|
727
|
-
throw new Error(`ELIZA_DFLASH_LLAMA_ARGS includes ${cacheType}, but that KV cache type is not production-safe on Metal in the DFlash fork. Use f16 KV on Metal or run this variant on CUDA/ROCm.`);
|
|
728
|
-
}
|
|
729
|
-
}
|
|
730
|
-
}
|
|
731
|
-
if (extra)
|
|
732
|
-
args.push(...extra.split(/\s+/).filter(Boolean));
|
|
733
|
-
fs.mkdirSync(path.join(localInferenceRoot(), "logs"), { recursive: true });
|
|
734
|
-
this.stderrTail = [];
|
|
735
|
-
const child = spawn(status.binaryPath, args, {
|
|
736
|
-
env: { ...process.env },
|
|
737
|
-
stdio: ["ignore", "pipe", "pipe"],
|
|
738
|
-
});
|
|
739
|
-
this.child = child;
|
|
740
|
-
this.baseUrl = `http://${host}:${port}`;
|
|
741
|
-
this.loadedPlan = plan;
|
|
742
|
-
child.stdout?.on("data", (chunk) => this.captureLog(chunk));
|
|
743
|
-
child.stderr?.on("data", (chunk) => this.captureLog(chunk));
|
|
744
|
-
child.on("exit", (code, signal) => {
|
|
745
|
-
if (this.child && (code !== null || signal !== null)) {
|
|
746
|
-
this.child = null;
|
|
747
|
-
this.baseUrl = null;
|
|
748
|
-
this.loadedPlan = null;
|
|
749
|
-
}
|
|
750
|
-
});
|
|
751
|
-
await this.waitUntilReady(DEFAULT_START_TIMEOUT_MS);
|
|
752
|
-
// Periodic eviction sweep — short TTL or shorter, capped to one
|
|
753
|
-
// sweep per minute. Without this, stale slot files accumulate to
|
|
754
|
-
// gigabytes over a long-running session because eviction was only
|
|
755
|
-
// ever fired at startup.
|
|
756
|
-
this.startEvictionTimer();
|
|
757
|
-
}
|
|
758
|
-
/**
|
|
759
|
-
* Set up the periodic eviction sweep that keeps stale slot files from
|
|
760
|
-
* accumulating. Runs `evictExpired` against both the per-slot save
|
|
761
|
-
* directory (used by llama-server's own KV save) and the per-conversation
|
|
762
|
-
* directory (used by our `persistConversationKv` saves) so neither can
|
|
763
|
-
* grow without bound.
|
|
764
|
-
*/
|
|
765
|
-
startEvictionTimer() {
|
|
766
|
-
if (this.evictionTimer)
|
|
767
|
-
return;
|
|
768
|
-
const intervalMs = resolveEvictionIntervalMs();
|
|
769
|
-
const timer = setInterval(() => {
|
|
770
|
-
const slotDir = this.cacheSlotDir;
|
|
771
|
-
const conversationDir = this.conversationKvDir;
|
|
772
|
-
if (slotDir) {
|
|
773
|
-
void evictExpired(slotDir, DEFAULT_CACHE_TTLS).catch(() => {
|
|
774
|
-
// Don't crash the timer on a single failed sweep — we'll try again
|
|
775
|
-
// on the next tick.
|
|
776
|
-
});
|
|
777
|
-
}
|
|
778
|
-
if (conversationDir) {
|
|
779
|
-
void evictExpired(conversationDir, DEFAULT_CACHE_TTLS).catch(() => { });
|
|
780
|
-
}
|
|
781
|
-
}, intervalMs);
|
|
782
|
-
timer.unref();
|
|
783
|
-
this.evictionTimer = timer;
|
|
784
|
-
}
|
|
785
|
-
async stop() {
|
|
786
|
-
if (this.evictionTimer) {
|
|
787
|
-
clearInterval(this.evictionTimer);
|
|
788
|
-
this.evictionTimer = null;
|
|
789
|
-
}
|
|
790
|
-
const child = this.child;
|
|
791
|
-
const baseUrl = this.baseUrl;
|
|
792
|
-
const conversationDir = this.conversationKvDir;
|
|
793
|
-
this.child = null;
|
|
794
|
-
this.baseUrl = null;
|
|
795
|
-
this.loadedPlan = null;
|
|
796
|
-
this.cacheModelHash = null;
|
|
797
|
-
this.cacheSlotDir = null;
|
|
798
|
-
this.conversationKvDir = null;
|
|
799
|
-
this.cacheParallel = DEFAULT_CACHE_PARALLEL;
|
|
800
|
-
if (!child)
|
|
801
|
-
return;
|
|
802
|
-
// Best-effort: tell llama-server to flush per-conversation KV state
|
|
803
|
-
// to disk before we kill it. If the dispatcher restarts the server
|
|
804
|
-
// (or the whole process restarts), conversations re-opening with the
|
|
805
|
-
// same id will lazy-restore from these files on first generate.
|
|
806
|
-
if (baseUrl && conversationDir) {
|
|
807
|
-
await this.persistAllConversationsBeforeStop(baseUrl, conversationDir);
|
|
808
|
-
}
|
|
809
|
-
child.kill("SIGTERM");
|
|
810
|
-
await Promise.race([
|
|
811
|
-
new Promise((resolve) => child.once("exit", () => resolve())),
|
|
812
|
-
sleep(5_000).then(() => {
|
|
813
|
-
if (!child.killed)
|
|
814
|
-
child.kill("SIGKILL");
|
|
815
|
-
}),
|
|
816
|
-
]);
|
|
817
|
-
}
|
|
818
|
-
/**
|
|
819
|
-
* Issue `POST /slots/<slot_id>?action=save` for every conversation slot
|
|
820
|
-
* the registry knows about. Best-effort — a single slot's save failing
|
|
821
|
-
* must not block the rest of the shutdown sequence.
|
|
822
|
-
*
|
|
823
|
-
* The slot file path is `<conversationDir>/<conversationId>.bin`, which
|
|
824
|
-
* is what `restoreConversationKv` reads on the next `generate` for the
|
|
825
|
-
* same conversation id.
|
|
826
|
-
*/
|
|
827
|
-
async persistAllConversationsBeforeStop(baseUrl, conversationDir) {
|
|
828
|
-
// Inline import to avoid a hard cycle with the engine, which imports
|
|
829
|
-
// this file at module load time.
|
|
830
|
-
const { conversationRegistry } = await import("./conversation-registry");
|
|
831
|
-
const handles = conversationRegistry.snapshot();
|
|
832
|
-
if (handles.length === 0)
|
|
833
|
-
return;
|
|
834
|
-
const tasks = handles.map(async (handle) => {
|
|
835
|
-
const targetPath = path.join(conversationDir, `${handle.conversationId}.bin`);
|
|
836
|
-
try {
|
|
837
|
-
await this.requestSlotSave(baseUrl, handle.slotId, targetPath);
|
|
838
|
-
this.persistedConversations.add(handle.conversationId);
|
|
839
|
-
}
|
|
840
|
-
catch {
|
|
841
|
-
// A single failed slot save must not block the stop path —
|
|
842
|
-
// the worst case is that conversation cold-prefills on next use.
|
|
843
|
-
}
|
|
844
|
-
});
|
|
845
|
-
await Promise.all(tasks);
|
|
846
|
-
}
|
|
847
|
-
/**
|
|
848
|
-
* Issue a single slot save. Splits out so `persistConversationKv` can
|
|
849
|
-
* call it from any path (graceful save, periodic checkpoint), not just
|
|
850
|
-
* the shutdown path.
|
|
851
|
-
*
|
|
852
|
-
* The fork's REST API: `POST /slots/<id>?action=save` with a JSON
|
|
853
|
-
* `{ filename: "<absolute-path>" }` body. llama-server writes the slot
|
|
854
|
-
* KV to that absolute path. Filename MUST be a basename within the
|
|
855
|
-
* directory llama-server was started with `--slot-save-path`; we
|
|
856
|
-
* generate filenames inside that root so the constraint is satisfied
|
|
857
|
-
* naturally.
|
|
858
|
-
*/
|
|
859
|
-
async requestSlotSave(baseUrl, slotId, targetPath) {
|
|
860
|
-
if (slotId < 0)
|
|
861
|
-
return;
|
|
862
|
-
// llama-server expects `filename` as a basename inside the
|
|
863
|
-
// --slot-save-path root, not a full path. Strip the path prefix
|
|
864
|
-
// before sending; we reconstruct it from `cacheSlotDir` below.
|
|
865
|
-
const baseName = path.basename(targetPath);
|
|
866
|
-
await fetchJson(`${baseUrl}/slots/${slotId}?action=save`, {
|
|
867
|
-
method: "POST",
|
|
868
|
-
headers: { "content-type": "application/json" },
|
|
869
|
-
body: JSON.stringify({ filename: baseName }),
|
|
870
|
-
}, 10_000);
|
|
871
|
-
}
|
|
872
|
-
/**
|
|
873
|
-
* Issue a single slot restore. Mirror of `requestSlotSave`. Skips when
|
|
874
|
-
* the file doesn't exist — a fresh conversation has no KV to restore.
|
|
875
|
-
*/
|
|
876
|
-
async requestSlotRestore(baseUrl, slotId, sourcePath) {
|
|
877
|
-
if (slotId < 0)
|
|
878
|
-
return false;
|
|
879
|
-
if (!fs.existsSync(sourcePath))
|
|
880
|
-
return false;
|
|
881
|
-
const baseName = path.basename(sourcePath);
|
|
882
|
-
await fetchJson(`${baseUrl}/slots/${slotId}?action=restore`, {
|
|
883
|
-
method: "POST",
|
|
884
|
-
headers: { "content-type": "application/json" },
|
|
885
|
-
body: JSON.stringify({ filename: baseName }),
|
|
886
|
-
}, 10_000);
|
|
887
|
-
return true;
|
|
888
|
-
}
|
|
889
|
-
/**
|
|
890
|
-
* Persist this conversation's KV state to a stable, cross-restart
|
|
891
|
-
* filename. Callers should fire this on a long-cache TTL boundary, on
|
|
892
|
-
* `closeConversation`, and at process shutdown.
|
|
893
|
-
*
|
|
894
|
-
* Returns true when a save was issued, false when there was no slot to
|
|
895
|
-
* save (e.g. slot pinning disabled, server not running).
|
|
896
|
-
*/
|
|
897
|
-
async persistConversationKv(conversationId, slotId) {
|
|
898
|
-
const baseUrl = this.baseUrl;
|
|
899
|
-
const conversationDir = this.conversationKvDir;
|
|
900
|
-
if (!baseUrl || !conversationDir || slotId < 0)
|
|
901
|
-
return false;
|
|
902
|
-
const targetPath = path.join(conversationDir, `${conversationId}.bin`);
|
|
903
|
-
try {
|
|
904
|
-
await this.requestSlotSave(baseUrl, slotId, targetPath);
|
|
905
|
-
this.persistedConversations.add(conversationId);
|
|
906
|
-
return true;
|
|
907
|
-
}
|
|
908
|
-
catch {
|
|
909
|
-
return false;
|
|
910
|
-
}
|
|
911
|
-
}
|
|
912
|
-
/**
|
|
913
|
-
* Lazy-restore a previously-persisted conversation's KV state into the
|
|
914
|
-
* given slot. Called from the generate path on the first request for a
|
|
915
|
-
* conversation id whose registry handle was just opened.
|
|
916
|
-
*/
|
|
917
|
-
async restoreConversationKv(conversationId, slotId) {
|
|
918
|
-
const baseUrl = this.baseUrl;
|
|
919
|
-
const conversationDir = this.conversationKvDir;
|
|
920
|
-
if (!baseUrl || !conversationDir || slotId < 0)
|
|
921
|
-
return false;
|
|
922
|
-
const sourcePath = path.join(conversationDir, `${conversationId}.bin`);
|
|
923
|
-
try {
|
|
924
|
-
const restored = await this.requestSlotRestore(baseUrl, slotId, sourcePath);
|
|
925
|
-
return restored;
|
|
926
|
-
}
|
|
927
|
-
catch {
|
|
928
|
-
return false;
|
|
929
|
-
}
|
|
930
|
-
}
|
|
931
|
-
/** Diagnostic snapshot of the on-disk slot save directory for this server. */
|
|
932
|
-
async describeCache() {
|
|
933
|
-
if (!this.cacheSlotDir) {
|
|
934
|
-
return {
|
|
935
|
-
modelHash: this.cacheModelHash,
|
|
936
|
-
slotDir: null,
|
|
937
|
-
parallel: this.cacheParallel,
|
|
938
|
-
files: [],
|
|
939
|
-
};
|
|
940
|
-
}
|
|
941
|
-
return {
|
|
942
|
-
modelHash: this.cacheModelHash,
|
|
943
|
-
slotDir: this.cacheSlotDir,
|
|
944
|
-
parallel: this.cacheParallel,
|
|
945
|
-
files: await readCacheStats(this.cacheSlotDir),
|
|
946
|
-
};
|
|
947
|
-
}
|
|
948
|
-
async generate(args) {
|
|
949
|
-
const result = await this.generateWithUsage(args);
|
|
950
|
-
return result.text;
|
|
951
|
-
}
|
|
952
|
-
/**
|
|
953
|
-
* Run one generation and return both the text AND the Anthropic-shape
|
|
954
|
-
* usage block. The usage block is built by differencing two `/metrics`
|
|
955
|
-
* snapshots taken before/after the request, plus the per-call
|
|
956
|
-
* `usage` body the chat-completion response itself returns.
|
|
957
|
-
*
|
|
958
|
-
* Falls back to zero counters when the metrics scrape fails — the
|
|
959
|
-
* response text is still surfaced. Callers that don't need usage can
|
|
960
|
-
* keep using `generate()`.
|
|
961
|
-
*/
|
|
962
|
-
async generateWithUsage(args) {
|
|
963
|
-
const baseUrl = this.baseUrl;
|
|
964
|
-
if (!baseUrl) {
|
|
965
|
-
throw new Error("[dflash] llama-server is not running");
|
|
966
|
-
}
|
|
967
|
-
const dflashArgs = args;
|
|
968
|
-
const slotId = typeof dflashArgs.slotId === "number" && dflashArgs.slotId >= -1
|
|
969
|
-
? dflashArgs.slotId
|
|
970
|
-
: deriveSlotId(args.cacheKey ?? "", this.cacheParallel);
|
|
971
|
-
const payload = {
|
|
972
|
-
model: "local-dflash",
|
|
973
|
-
messages: [{ role: "user", content: args.prompt }],
|
|
974
|
-
max_tokens: args.maxTokens ?? 2048,
|
|
975
|
-
temperature: args.temperature ?? 0.7,
|
|
976
|
-
top_p: args.topP ?? 0.9,
|
|
977
|
-
stop: args.stopSequences,
|
|
978
|
-
stream: false,
|
|
979
|
-
// `cache_prompt: true` is always safe — the worst case is the
|
|
980
|
-
// server matches no prefix tokens and the request behaves like a
|
|
981
|
-
// cold call. Pinning by `slot_id` only happens when the runtime
|
|
982
|
-
// gave us a stable cache key.
|
|
983
|
-
cache_prompt: true,
|
|
984
|
-
slot_id: slotId,
|
|
985
|
-
};
|
|
986
|
-
const before = await fetchMetricsSnapshot(baseUrl);
|
|
987
|
-
const json = (await fetchJson(`${baseUrl}/v1/chat/completions`, {
|
|
988
|
-
method: "POST",
|
|
989
|
-
headers: { "content-type": "application/json" },
|
|
990
|
-
body: JSON.stringify(payload),
|
|
991
|
-
}));
|
|
992
|
-
const after = await fetchMetricsSnapshot(baseUrl);
|
|
993
|
-
const text = extractCompletionText(json);
|
|
994
|
-
const responseUsage = extractResponseUsage(json);
|
|
995
|
-
const usage = diffSnapshots(before, after, responseUsage);
|
|
996
|
-
return { text, usage, slotId };
|
|
997
|
-
}
|
|
998
|
-
captureLog(chunk) {
|
|
999
|
-
const text = chunk.toString();
|
|
1000
|
-
for (const line of text.split(/\r?\n/)) {
|
|
1001
|
-
const trimmed = line.trim();
|
|
1002
|
-
if (!trimmed)
|
|
1003
|
-
continue;
|
|
1004
|
-
this.stderrTail.push(trimmed);
|
|
1005
|
-
while (this.stderrTail.length > 30)
|
|
1006
|
-
this.stderrTail.shift();
|
|
1007
|
-
}
|
|
1008
|
-
}
|
|
1009
|
-
async waitUntilReady(timeoutMs) {
|
|
1010
|
-
if (!this.baseUrl)
|
|
1011
|
-
throw new Error("[dflash] llama-server did not start");
|
|
1012
|
-
const started = Date.now();
|
|
1013
|
-
while (Date.now() - started < timeoutMs) {
|
|
1014
|
-
if (!this.child) {
|
|
1015
|
-
throw new Error(`[dflash] llama-server exited during startup: ${this.stderrTail.join(os.EOL)}`);
|
|
1016
|
-
}
|
|
1017
|
-
try {
|
|
1018
|
-
await fetchJson(`${this.baseUrl}/health`, { method: "GET" }, 2_000);
|
|
1019
|
-
return;
|
|
1020
|
-
}
|
|
1021
|
-
catch {
|
|
1022
|
-
try {
|
|
1023
|
-
await fetchJson(`${this.baseUrl}/v1/models`, { method: "GET" }, 2_000);
|
|
1024
|
-
return;
|
|
1025
|
-
}
|
|
1026
|
-
catch {
|
|
1027
|
-
await sleep(500);
|
|
1028
|
-
}
|
|
1029
|
-
}
|
|
1030
|
-
}
|
|
1031
|
-
const detail = this.stderrTail.length
|
|
1032
|
-
? ` Last logs: ${this.stderrTail.join(os.EOL)}`
|
|
1033
|
-
: "";
|
|
1034
|
-
throw new Error(`[dflash] llama-server did not become ready within ${timeoutMs}ms.${detail}`);
|
|
1035
|
-
}
|
|
1036
|
-
}
|
|
1037
|
-
export const dflashLlamaServer = new DflashLlamaServer();
|
|
1038
|
-
/**
|
|
1039
|
-
* Extract the assistant text from a llama-server `/v1/chat/completions`
|
|
1040
|
-
* response. Throws when no recognised text shape is present — silently
|
|
1041
|
-
* returning empty would mask a real protocol mismatch.
|
|
1042
|
-
*/
|
|
1043
|
-
function extractCompletionText(json) {
|
|
1044
|
-
const choice = Array.isArray(json.choices) ? json.choices[0] : null;
|
|
1045
|
-
const message = choice && typeof choice === "object"
|
|
1046
|
-
? choice.message
|
|
1047
|
-
: null;
|
|
1048
|
-
const content = message && typeof message === "object"
|
|
1049
|
-
? message.content
|
|
1050
|
-
: null;
|
|
1051
|
-
if (typeof content === "string")
|
|
1052
|
-
return content;
|
|
1053
|
-
const text = json.text;
|
|
1054
|
-
if (typeof text === "string")
|
|
1055
|
-
return text;
|
|
1056
|
-
throw new Error(`[dflash] Unexpected llama-server response: ${JSON.stringify(json)}`);
|
|
1057
|
-
}
|
|
1058
|
-
/**
|
|
1059
|
-
* Extract the per-call usage block from a llama-server response. Returns
|
|
1060
|
-
* undefined when the response did not include one — `diffSnapshots` then
|
|
1061
|
-
* falls back to the metric-delta input/output counts.
|
|
1062
|
-
*/
|
|
1063
|
-
function extractResponseUsage(json) {
|
|
1064
|
-
const usage = json.usage;
|
|
1065
|
-
if (!usage || typeof usage !== "object")
|
|
1066
|
-
return undefined;
|
|
1067
|
-
const u = usage;
|
|
1068
|
-
const out = {};
|
|
1069
|
-
if (typeof u.prompt_tokens === "number") {
|
|
1070
|
-
out.prompt_tokens = u.prompt_tokens;
|
|
1071
|
-
}
|
|
1072
|
-
if (typeof u.completion_tokens === "number") {
|
|
1073
|
-
out.completion_tokens = u.completion_tokens;
|
|
1074
|
-
}
|
|
1075
|
-
return Object.keys(out).length > 0 ? out : undefined;
|
|
1076
|
-
}
|