@elizaos/app-core 2.0.3-beta.2 → 2.0.3-beta.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/agent-bridge.d.ts +5 -5
- package/api/auth/audit.d.ts +1 -1
- package/api/auth/auth-context.d.ts +1 -1
- package/api/auth/bootstrap-token.d.ts +1 -1
- package/api/auth/sessions.d.ts +1 -1
- package/api/auth-bootstrap-routes.d.ts +1 -1
- package/api/auth-pairing-routes.d.ts +1 -1
- package/api/auth-pairing-routes.d.ts.map +1 -1
- package/api/auth-pairing-routes.js +2 -3
- package/api/auth-session-routes.d.ts +2 -2
- package/api/auth.d.ts +1 -1
- package/api/automations-compat-routes.d.ts +1 -1
- package/api/background-tasks-routes.d.ts +1 -1
- package/api/catalog-routes.d.ts +1 -1
- package/api/cloud-voice-routes.d.ts +1 -1
- package/api/compat-route-shared.d.ts +12 -5
- package/api/compat-route-shared.d.ts.map +1 -1
- package/api/compat-route-shared.js +22 -187
- package/api/database-rows-compat-routes.d.ts +1 -1
- package/api/dev-compat-routes.d.ts +1 -1
- package/api/dev-route-catalog.d.ts.map +1 -1
- package/api/dev-route-catalog.js +20 -0
- package/api/drop-status-compat-route.d.ts +3 -0
- package/api/drop-status-compat-route.d.ts.map +1 -0
- package/api/drop-status-compat-route.js +12 -0
- package/api/first-run-routes.d.ts +1 -1
- package/api/internal-routes.d.ts +1 -1
- package/api/runtime-mode-routes.d.ts +1 -1
- package/api/secrets-manager-routes.d.ts.map +1 -1
- package/api/sensitive-request-routes.d.ts +2 -2
- package/api/server-config-filter.d.ts.map +1 -1
- package/api/server-config-filter.js +0 -1
- package/api/server-first-run-helpers.d.ts.map +1 -1
- package/api/server-first-run-helpers.js +0 -3
- package/api/server.d.ts +8 -8
- package/api/server.d.ts.map +1 -1
- package/api/server.js +13 -59
- package/api/training-benchmarks.d.ts +1 -1
- package/api/training-benchmarks.d.ts.map +1 -1
- package/api/training-benchmarks.js +31 -9
- package/api/workbench-compat-routes.d.ts +1 -1
- package/benchmark/server-utils.d.ts +2 -2
- package/browser.d.ts +4 -4
- package/cli/plugins-cli.d.ts.map +1 -1
- package/cli/plugins-cli.js +5 -0
- package/cli/program/register.auth.d.ts +27 -1
- package/cli/program/register.auth.d.ts.map +1 -1
- package/cli/program/register.auth.js +187 -0
- package/cli/program/register.dashboard.d.ts.map +1 -1
- package/cli/program/register.dashboard.js +11 -1
- package/cli/program.d.ts +1 -1
- package/first-run/first-run-config.d.ts +1 -1
- package/index.d.ts +46 -47
- package/index.d.ts.map +1 -1
- package/index.js +3 -7
- package/package.json +42 -36
- package/packaging/PUBLISHING_GUIDE.md +20 -20
- package/platform/elizaos-agent-browser-stub.d.ts +0 -1
- package/platform/elizaos-agent-browser-stub.d.ts.map +1 -1
- package/platform/elizaos-agent-browser-stub.js +0 -1
- package/platform/ios-runtime-bridge.d.ts.map +1 -1
- package/platform/ios-runtime-bridge.js +0 -1
- package/platform/native-plugin-entrypoints.d.ts +2 -2
- package/platforms/android/app/build.gradle +30 -7
- package/platforms/android/app/src/main/elizavoice-jni/elizavoice-jni.cpp +179 -35
- package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaAgentService.java +60 -32
- package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaBionicInferenceServer.java +405 -65
- package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaVoiceNative.java +35 -0
- package/platforms/android/app/src/main/java/ai/elizaos/app/ElizaVoicePlugin.java +13 -6
- 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/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/colors.xml +5 -1
- package/platforms/android/app/src/main/res/values/ic_launcher_background.xml +1 -1
- package/platforms/android/app/src/main/res/values/styles.xml +4 -1
- package/platforms/electrobun/electrobun.config.ts +0 -1
- package/platforms/electrobun/native/macos/window-effects.mm +4 -0
- package/platforms/electrobun/package.json +11 -9
- package/platforms/electrobun/remotes/local-model/src/bun/eliza1-catalog.ts +1 -1
- package/platforms/electrobun/remotes/runtime/src/dev/phase2-smoke.ts +10 -5
- package/platforms/electrobun/remotes/runtime/src/dev/phase3-smoke.ts +11 -15
- package/platforms/electrobun/src/application-menu.ts +0 -7
- package/platforms/electrobun/src/desktop-http-request.test.ts +30 -1
- package/platforms/electrobun/src/desktop-http-request.ts +14 -2
- package/platforms/electrobun/src/desktop-test-bridge-server.ts +28 -0
- package/platforms/electrobun/src/fatal-shutdown.test.ts +3 -7
- package/platforms/electrobun/src/index.ts +64 -13
- package/platforms/electrobun/src/lifecycle/api-base-owner.test.ts +83 -0
- package/platforms/electrobun/src/lifecycle/api-base-owner.ts +37 -16
- package/platforms/electrobun/src/native/agent.ts +28 -17
- package/platforms/electrobun/src/native/credentials.ts +6 -1
- package/platforms/electrobun/src/native/desktop-window.test.ts +142 -26
- package/platforms/electrobun/src/native/desktop.ts +8 -4
- package/platforms/electrobun/src/native/index.ts +6 -0
- package/platforms/electrobun/src/native/remote-plugin-host.ts +18 -8
- package/platforms/electrobun/src/preload.js +1 -1
- package/platforms/electrobun/src/voice/voice-live-validation.test.ts +10 -5
- package/platforms/electrobun/src/voice/voice-runtime-adapter.ts +3 -2
- package/platforms/electrobun/src/voice/voice-service.test.ts +26 -0
- package/platforms/electrobun/src/voice/voice-service.ts +57 -17
- package/platforms/electrobun/tsconfig.json +17 -1
- package/platforms/ios/App/App/Base.lproj/LaunchScreen.storyboard +4 -6
- package/registry/index.d.ts +1 -6
- package/registry/index.d.ts.map +1 -1
- package/registry/index.js +9 -101
- package/runtime/android-avf-microdroid-bridge.d.ts +1 -1
- package/runtime/bundled-fused-lib.d.ts +36 -0
- package/runtime/bundled-fused-lib.d.ts.map +1 -0
- package/runtime/bundled-fused-lib.js +77 -0
- package/runtime/channel-plugin-map.d.ts +1 -5
- package/runtime/channel-plugin-map.d.ts.map +1 -1
- package/runtime/channel-plugin-map.js +11 -31
- package/runtime/desktop/index.d.ts +5 -5
- package/runtime/dev-server.js +11 -2
- package/runtime/eliza.d.ts.map +1 -1
- package/runtime/eliza.js +18 -8
- package/runtime/mode/route-mode-guard.d.ts +1 -1
- package/runtime/mode/route-mode-matrix.d.ts +1 -1
- package/runtime/voice-warmup.d.ts +4 -19
- package/runtime/voice-warmup.d.ts.map +1 -1
- package/runtime/voice-warmup.js +4 -14
- package/scripts/aosp/README.md +10 -1
- package/scripts/aosp/compile-libllama-zig-pin.test.mjs +147 -0
- package/scripts/aosp/compile-libllama.mjs +446 -59
- package/scripts/aosp/compile-libllama.test.mjs +133 -0
- package/scripts/aosp/compile-shim.mjs +21 -1
- package/scripts/aosp/deploy-pixel.mjs +1 -1
- package/scripts/aosp/stage-default-models.mjs +24 -31
- package/scripts/aosp/stage-default-models.test.mjs +23 -0
- package/scripts/assert-required-bundled-packages.test.ts +22 -1
- package/scripts/build-helpers/verify-fused-symbols.mjs +33 -0
- package/scripts/build-helpers/verify-fused-symbols.test.mjs +0 -0
- package/scripts/build-image.sh +1 -3
- package/scripts/build-llama-cpp-mtp.mjs +17 -16
- package/scripts/check-i18n.mjs +0 -1
- package/scripts/copy-runtime-node-modules.ts +147 -0
- package/scripts/desktop-build.mjs +317 -4
- package/scripts/docker-ci-smoke.sh +33 -8
- package/scripts/ensure-type-package-aliases.mjs +1 -1
- package/scripts/ios-xcframework/run-physical-device-smoke.mjs +1 -1
- package/scripts/lib/agent-source-watcher.mjs +0 -1
- package/scripts/lib/artifact-staleness.d.mts +33 -0
- package/scripts/lib/artifact-staleness.mjs +122 -0
- package/scripts/lib/artifact-staleness.test.mts +98 -0
- package/scripts/lib/duet-bridge.mjs +1 -1
- package/scripts/lib/ios-plist-url-scheme.mjs +80 -0
- package/scripts/lib/mobile-build-decisions.mjs +97 -0
- package/scripts/lib/renderer-build-manifest.d.mts +65 -0
- package/scripts/lib/renderer-build-manifest.mjs +257 -0
- package/scripts/lib/renderer-build-manifest.test.mts +277 -0
- package/scripts/lib/stage-android-agent.mjs +13 -4
- package/scripts/lib/verify-ondevice-artifact.d.mts +16 -0
- package/scripts/lib/verify-ondevice-artifact.mjs +61 -0
- package/scripts/lib/verify-ondevice-artifact.test.mts +98 -0
- package/scripts/lib/websocket-pending-queue.ts +92 -0
- package/scripts/link-docker-local-app-packages.mjs +6 -0
- package/scripts/playwright-ui-live-stack.ts +430 -144
- package/scripts/playwright-ui-smoke-api-stub.mjs +160 -168
- package/scripts/run-local-plugin-live-smoke.mjs +1 -6
- package/scripts/run-mobile-build-brand-separation.test.mts +33 -0
- package/scripts/run-mobile-build-ios-engine-gate.test.mjs +85 -0
- package/scripts/run-mobile-build-mtp-staleness.test.mts +198 -0
- package/scripts/run-mobile-build.mjs +408 -86
- package/scripts/serve-real-local-agent.ts +72 -0
- package/scripts/stage-desktop-fused-lib.mjs +43 -14
- package/scripts/verify-ondevice-artifact.mjs +111 -0
- package/scripts/voice-attribution-smoke.ts +144 -38
- package/scripts/voice-duet.mjs +6 -6
- package/scripts/voice-e2e-hardware.ts +22 -16
- package/scripts/voice-interactive.mjs +16 -45
- package/security/agent-vault-id.d.ts +1 -1
- package/security/platform-secure-store-node.d.ts +1 -1
- package/services/ambient-audio/consent.d.ts +1 -1
- package/services/ambient-audio/index.d.ts +6 -6
- package/services/ambient-audio/replay-buffer.d.ts +1 -1
- package/services/ambient-audio/response-gate.d.ts +1 -1
- package/services/ambient-audio/service.d.ts +3 -3
- package/services/connector-target-catalog.d.ts +1 -1
- package/services/sensitive-requests/index.d.ts +6 -6
- package/services/steward-sidecar/wallet-setup.d.ts +1 -1
- package/services/steward-sidecar.d.ts +3 -3
- package/services/tunnel-to-mobile/index.d.ts +1 -1
- package/services/vault-bootstrap.d.ts.map +1 -1
- package/services/vault-bootstrap.js +14 -10
- package/services/voice-profiles/diarization-pipeline.d.ts +1 -1
- package/services/voice-profiles/index.d.ts +11 -11
- package/services/voice-profiles/owner-confidence.d.ts +1 -1
- package/services/voice-profiles/private-challenge.d.ts +1 -1
- package/services/voice-profiles/store.d.ts +1 -1
- package/test/helpers/live-provider.test.ts +91 -1
- package/test/helpers/live-provider.ts +195 -51
- package/test/scripts/websocket-pending-queue.test.ts +119 -0
- package/test-support/test-helpers.d.ts +0 -33
- package/test-support/test-helpers.d.ts.map +1 -1
- package/test-support/test-helpers.js +81 -189
- package/ui-compat.d.ts +1 -0
- package/ui-compat.d.ts.map +1 -1
- package/ui-compat.js +4 -0
- package/platforms/electrobun/docs/convergence-audit.json +0 -3505
- package/platforms/electrobun/docs/convergence-audit.md +0 -694
- package/platforms/electrobun/scripts/ensure-whisper-gguf.sh +0 -55
- package/platforms/electrobun/scripts/ensure-whisper-model.sh +0 -35
- package/platforms/electrobun/scripts/generate-convergence-audit.ts +0 -1203
- package/platforms/electrobun/src/native/whisper-env.test.ts +0 -71
- package/platforms/electrobun/src/native/whisper-env.ts +0 -68
- package/registry/app-registry.d.ts +0 -14
- package/registry/app-registry.d.ts.map +0 -1
- package/registry/app-registry.js +0 -29
- package/registry/entries/apps/app-polymarket.json +0 -31
- package/registry/entries/apps/clawville.json +0 -27
- package/registry/entries/apps/companion.json +0 -28
- package/registry/entries/apps/database-viewer.json +0 -27
- package/registry/entries/apps/defense-of-the-agents.json +0 -27
- package/registry/entries/apps/documents.json +0 -30
- package/registry/entries/apps/feed.json +0 -27
- package/registry/entries/apps/hyperliquid.json +0 -31
- package/registry/entries/apps/log-viewer.json +0 -27
- package/registry/entries/apps/memory-viewer.json +0 -27
- package/registry/entries/apps/model-tester.json +0 -31
- package/registry/entries/apps/plugin-viewer.json +0 -27
- package/registry/entries/apps/relationship-viewer.json +0 -27
- package/registry/entries/apps/runtime-debugger.json +0 -27
- package/registry/entries/apps/shopify.json +0 -31
- package/registry/entries/apps/skills-viewer.json +0 -27
- package/registry/entries/apps/steward.json +0 -31
- package/registry/entries/apps/training.json +0 -54
- package/registry/entries/apps/trajectory-viewer.json +0 -27
- package/registry/entries/apps/vincent.json +0 -31
- package/registry/entries/connectors/bluebubbles.json +0 -99
- package/registry/entries/connectors/bluesky.json +0 -173
- package/registry/entries/connectors/discord.json +0 -119
- package/registry/entries/connectors/farcaster.json +0 -174
- package/registry/entries/connectors/feishu.json +0 -79
- package/registry/entries/connectors/google-chat.json +0 -120
- package/registry/entries/connectors/google.json +0 -82
- package/registry/entries/connectors/imessage.json +0 -96
- package/registry/entries/connectors/instagram.json +0 -64
- package/registry/entries/connectors/line.json +0 -86
- package/registry/entries/connectors/matrix.json +0 -94
- package/registry/entries/connectors/mattermost.json +0 -110
- package/registry/entries/connectors/msteams.json +0 -104
- package/registry/entries/connectors/nextcloud-talk.json +0 -104
- package/registry/entries/connectors/nostr.json +0 -70
- package/registry/entries/connectors/signal.json +0 -81
- package/registry/entries/connectors/slack.json +0 -102
- package/registry/entries/connectors/telegram.json +0 -71
- package/registry/entries/connectors/tlon.json +0 -94
- package/registry/entries/connectors/twitch.json +0 -110
- package/registry/entries/connectors/whatsapp.json +0 -113
- package/registry/entries/connectors/x.json +0 -231
- package/registry/entries/connectors/zalo.json +0 -112
- package/registry/entries/connectors/zalouser.json +0 -122
- package/registry/entries/plugins/agent-orchestrator.json +0 -33
- package/registry/entries/plugins/agent-skills.json +0 -72
- package/registry/entries/plugins/anthropic.json +0 -73
- package/registry/entries/plugins/app-control.json +0 -23
- package/registry/entries/plugins/auto-trader.json +0 -203
- package/registry/entries/plugins/background-runner.json +0 -26
- package/registry/entries/plugins/blooio.json +0 -102
- package/registry/entries/plugins/browser.json +0 -75
- package/registry/entries/plugins/cli.json +0 -40
- package/registry/entries/plugins/clipboard.json +0 -44
- package/registry/entries/plugins/coding-tools.json +0 -71
- package/registry/entries/plugins/commands.json +0 -63
- package/registry/entries/plugins/computeruse.json +0 -74
- package/registry/entries/plugins/copilot-proxy.json +0 -93
- package/registry/entries/plugins/directives.json +0 -63
- package/registry/entries/plugins/edge-tts.json +0 -97
- package/registry/entries/plugins/elevenlabs.json +0 -169
- package/registry/entries/plugins/elizacloud.json +0 -208
- package/registry/entries/plugins/evm.json +0 -134
- package/registry/entries/plugins/experience.json +0 -34
- package/registry/entries/plugins/facewear.json +0 -131
- package/registry/entries/plugins/form.json +0 -26
- package/registry/entries/plugins/github.json +0 -93
- package/registry/entries/plugins/gmail-watch.json +0 -25
- package/registry/entries/plugins/goals.json +0 -77
- package/registry/entries/plugins/google-genai.json +0 -106
- package/registry/entries/plugins/groq.json +0 -93
- package/registry/entries/plugins/hedera.json +0 -48
- package/registry/entries/plugins/inmemorydb.json +0 -25
- package/registry/entries/plugins/linear.json +0 -51
- package/registry/entries/plugins/local-inference.json +0 -137
- package/registry/entries/plugins/local-storage.json +0 -36
- package/registry/entries/plugins/localdb.json +0 -25
- package/registry/entries/plugins/mcp.json +0 -44
- package/registry/entries/plugins/memory.json +0 -124
- package/registry/entries/plugins/minecraft.json +0 -79
- package/registry/entries/plugins/moltbook.json +0 -83
- package/registry/entries/plugins/music.json +0 -155
- package/registry/entries/plugins/mysticism.json +0 -48
- package/registry/entries/plugins/nearai.json +0 -82
- package/registry/entries/plugins/ngrok.json +0 -69
- package/registry/entries/plugins/ollama.json +0 -96
- package/registry/entries/plugins/openai.json +0 -189
- package/registry/entries/plugins/openrouter.json +0 -188
- package/registry/entries/plugins/pdf.json +0 -26
- package/registry/entries/plugins/plugin-manager.json +0 -23
- package/registry/entries/plugins/prose.json +0 -48
- package/registry/entries/plugins/rlm.json +0 -26
- package/registry/entries/plugins/roblox.json +0 -88
- package/registry/entries/plugins/rss.json +0 -64
- package/registry/entries/plugins/s3-storage.json +0 -91
- package/registry/entries/plugins/scheduling.json +0 -35
- package/registry/entries/plugins/shell.json +0 -94
- package/registry/entries/plugins/social-alpha.json +0 -72
- package/registry/entries/plugins/tailscale.json +0 -81
- package/registry/entries/plugins/tee.json +0 -53
- package/registry/entries/plugins/todos.json +0 -26
- package/registry/entries/plugins/trajectory-logger.json +0 -33
- package/registry/entries/plugins/trust.json +0 -39
- package/registry/entries/plugins/tts.json +0 -71
- package/registry/entries/plugins/tunnel.json +0 -45
- package/registry/entries/plugins/twilio.json +0 -168
- package/registry/entries/plugins/vercel-ai-gateway.json +0 -128
- package/registry/entries/plugins/video.json +0 -23
- package/registry/entries/plugins/vision.json +0 -43
- package/registry/entries/plugins/webhooks.json +0 -23
- package/registry/entries/plugins/workflow.json +0 -25
- package/registry/entries/plugins/xai.json +0 -75
- package/registry/loader.d.ts +0 -28
- package/registry/loader.d.ts.map +0 -1
- package/registry/loader.js +0 -158
- package/registry/schema.d.ts +0 -1199
- package/registry/schema.d.ts.map +0 -1
- package/registry/schema.js +0 -300
- package/scripts/patches/llama-mobile-kokoro-tts.patch +0 -480
- package/scripts/release-workflow-drift.test.ts +0 -57
- package/test/helpers/i18n.ts +0 -5
- package/test/helpers/loopback.ts +0 -33
- package/test/helpers/react-test.ts +0 -40
- package/test/helpers/skip-without.ts +0 -53
|
@@ -1218,7 +1218,9 @@ export class RemotePluginHost {
|
|
|
1218
1218
|
): Promise<JsonValue> {
|
|
1219
1219
|
switch (method) {
|
|
1220
1220
|
case "list-remote-plugins":
|
|
1221
|
-
return
|
|
1221
|
+
return JSON.parse(
|
|
1222
|
+
JSON.stringify(this.listRemotePlugins()),
|
|
1223
|
+
) as JsonValue;
|
|
1222
1224
|
case "start-remote-plugin": {
|
|
1223
1225
|
this.requireManageRemotePlugins(callerId, "start-remote-plugin");
|
|
1224
1226
|
const targetId = hostRequestStringField(params, "id");
|
|
@@ -1233,18 +1235,26 @@ export class RemotePluginHost {
|
|
|
1233
1235
|
}
|
|
1234
1236
|
case "agent-manager-start":
|
|
1235
1237
|
this.requireManageRemotePlugins(callerId, "agent-manager-start");
|
|
1236
|
-
return
|
|
1238
|
+
return JSON.parse(
|
|
1239
|
+
JSON.stringify(await getAgentManager().start()),
|
|
1240
|
+
) as JsonValue;
|
|
1237
1241
|
case "agent-manager-stop": {
|
|
1238
1242
|
this.requireManageRemotePlugins(callerId, "agent-manager-stop");
|
|
1239
1243
|
await getAgentManager().stop();
|
|
1240
|
-
return
|
|
1244
|
+
return JSON.parse(
|
|
1245
|
+
JSON.stringify(getAgentManager().getStatus()),
|
|
1246
|
+
) as JsonValue;
|
|
1241
1247
|
}
|
|
1242
1248
|
case "agent-manager-restart":
|
|
1243
1249
|
this.requireManageRemotePlugins(callerId, "agent-manager-restart");
|
|
1244
|
-
return
|
|
1250
|
+
return JSON.parse(
|
|
1251
|
+
JSON.stringify(await getAgentManager().restart()),
|
|
1252
|
+
) as JsonValue;
|
|
1245
1253
|
case "agent-manager-status":
|
|
1246
1254
|
this.requireManageRemotePlugins(callerId, "agent-manager-status");
|
|
1247
|
-
return
|
|
1255
|
+
return JSON.parse(
|
|
1256
|
+
JSON.stringify(getAgentManager().getStatus()),
|
|
1257
|
+
) as JsonValue;
|
|
1248
1258
|
case "agent-manager-health":
|
|
1249
1259
|
this.requireManageRemotePlugins(callerId, "agent-manager-health");
|
|
1250
1260
|
return this.readAgentManagerHealth();
|
|
@@ -1383,7 +1393,7 @@ export class RemotePluginHost {
|
|
|
1383
1393
|
path: "/api/health",
|
|
1384
1394
|
status: null,
|
|
1385
1395
|
error: "AgentManager has no active API port.",
|
|
1386
|
-
agentStatus: status as
|
|
1396
|
+
agentStatus: JSON.parse(JSON.stringify(status)) as JsonValue,
|
|
1387
1397
|
};
|
|
1388
1398
|
}
|
|
1389
1399
|
const apiBase = `http://127.0.0.1:${status.port}`;
|
|
@@ -1397,7 +1407,7 @@ export class RemotePluginHost {
|
|
|
1397
1407
|
path: "/api/health",
|
|
1398
1408
|
status: response.status,
|
|
1399
1409
|
body: await response.text(),
|
|
1400
|
-
agentStatus: status as
|
|
1410
|
+
agentStatus: JSON.parse(JSON.stringify(status)) as JsonValue,
|
|
1401
1411
|
};
|
|
1402
1412
|
} catch (error) {
|
|
1403
1413
|
return {
|
|
@@ -1406,7 +1416,7 @@ export class RemotePluginHost {
|
|
|
1406
1416
|
path: "/api/health",
|
|
1407
1417
|
status: null,
|
|
1408
1418
|
error: error instanceof Error ? error.message : String(error),
|
|
1409
|
-
agentStatus: status as
|
|
1419
|
+
agentStatus: JSON.parse(JSON.stringify(status)) as JsonValue,
|
|
1410
1420
|
};
|
|
1411
1421
|
}
|
|
1412
1422
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
(()=>{function S(e,t){let r=e.map((n)=>`"${n}"`).join(", ");return Error(`This RPC instance cannot ${t} because the transport did not provide one or more of these methods: ${r}`)}function I(e={}){let t={},r={},n=void 0;function o(s){if(r.unregisterHandler)r.unregisterHandler();r=s,r.registerHandler?.($)}function c(s){if(typeof s==="function"){n=s;return}n=(i,u)=>{let p=s[i];if(p)return p(u);let g=s._;if(!g)throw Error(`The requested method has no handler: ${String(i)}`);return g(i,u)}}let{maxRequestTime:a=1000}=e;if(e.transport)o(e.transport);if(e.requestHandler)c(e.requestHandler);if(e._debugHooks)t=e._debugHooks;let R=0;function m(){if(R<=10000000000)return++R;return R=0}let d=new Map,l=new Map;function w(s,...i){let u=i[0];return new Promise((p,g)=>{if(!r.send)throw S(["send"],"make requests");let f=m(),B={type:"request",id:f,method:s,params:u};if(d.set(f,{resolve:p,reject:g}),a!==1/0)l.set(f,setTimeout(()=>{l.delete(f),d.delete(f),g(Error("RPC request timed out."))},a));t.onSend?.(B),r.send(B)})}let q=new Proxy(w,{get:(s,i,u)=>{if(i in s)return Reflect.get(s,i,u);return(p)=>w(i,p)}}),x=q;function T(s,...i){let u=i[0];if(!r.send)throw S(["send"],"send messages");let p={type:"message",id:s,payload:u};t.onSend?.(p),r.send(p)}let v=new Proxy(T,{get:(s,i,u)=>{if(i in s)return Reflect.get(s,i,u);return(p)=>T(i,p)}}),O=v,h=new Map,b=new Set;function Y(s,i){if(!r.registerHandler)throw S(["registerHandler"],"register message listeners");if(s==="*"){b.add(i);return}if(!h.has(s))h.set(s,new Set);h.get(s).add(i)}function U(s,i){if(s==="*"){b.delete(i);return}if(h.get(s)?.delete(i),h.get(s)?.size===0)h.delete(s)}async function $(s){if(t.onReceive?.(s),!("type"in s))throw Error("Message does not contain a type.");if(s.type==="request"){if(!r.send||!n)throw S(["send","requestHandler"],"handle requests");let{id:i,method:u,params:p}=s,g;try{g={type:"response",id:i,success:!0,payload:await n(u,p)}}catch(f){if(!(f instanceof Error))throw f;g={type:"response",id:i,success:!1,error:f.message}}t.onSend?.(g),r.send(g);return}if(s.type==="response"){let i=l.get(s.id);if(i!=null)clearTimeout(i);l.delete(s.id);let{resolve:u,reject:p}=d.get(s.id)??{};if(d.delete(s.id),!s.success)p?.(Error(s.error));else u?.(s.payload);return}if(s.type==="message"){for(let u of b)u(s.id,s.payload);let i=h.get(s.id);if(!i)return;for(let u of i)u(s.payload);return}throw Error(`Unexpected RPC message type: ${s.type}`)}return{setTransport:o,setRequestHandler:c,request:q,requestProxy:x,send:v,sendProxy:O,addMessageListener:Y,removeMessageListener:U,proxy:{send:O,request:x}}}function H(e,t){let r={maxRequestTime:t.maxRequestTime,requestHandler:{...t.handlers.requests,...t.extraRequestHandlers},transport:{registerHandler:()=>{}}},n=I(r),o=t.handlers.messages;if(o)n.addMessageListener("*",(c,a)=>{let R=o["*"];if(R)R(c,a);let m=o[c];if(m)m(a)});return n}var{__electrobunWebviewId:L,__electrobunRpcSocketPort:W}=window;class P{bunSocket;rpc;rpcHandler;constructor(e){this.rpc=e.rpc,this.init()}init(){if(this.initSocketToBun(),window.__electrobun.receiveMessageFromBun=this.receiveMessageFromBun.bind(this),this.rpc)this.rpc.setTransport(this.createTransport())}initSocketToBun(){if(!W||!L)return;let e=new WebSocket(`ws://localhost:${W}/socket?webviewId=${L}`);this.bunSocket=e,e.addEventListener("open",()=>{}),e.addEventListener("message",async(t)=>{let r=t.data;if(typeof r==="string")try{let n=JSON.parse(r),o=await window.__electrobun_decrypt(n.encryptedData,n.iv,n.tag);this.rpcHandler?.(JSON.parse(o))}catch(n){console.error("Error parsing bun message:",n)}else if(r instanceof Blob);else console.error("UNKNOWN DATA TYPE RECEIVED:",t.data)}),e.addEventListener("error",(t)=>{console.error("Socket error:",t)}),e.addEventListener("close",(t)=>{})}createTransport(){let e=this;return{send(t){try{let r=JSON.stringify(t);e.bunBridge(r)}catch(r){console.error("bun: failed to serialize message to webview",r)}},registerHandler(t){e.rpcHandler=t}}}async bunBridge(e){if(this.bunSocket?.readyState===WebSocket.OPEN)try{let{encryptedData:t,iv:r,tag:n}=await window.__electrobun_encrypt(e),c=JSON.stringify({encryptedData:t,iv:r,tag:n});this.bunSocket.send(c);return}catch(t){console.error("Error sending message to bun via socket:",t)}window.__electrobunBunBridge?.postMessage(e)}receiveMessageFromBun(e){if(this.rpcHandler)this.rpcHandler(e)}static defineRPC(e){return H("webview",{...e,extraRequestHandlers:{evaluateJavascriptWithResponse:({script:t})=>
|
|
1
|
+
(()=>{function S(e,t){let r=e.map((n)=>`"${n}"`).join(", ");return Error(`This RPC instance cannot ${t} because the transport did not provide one or more of these methods: ${r}`)}function I(e={}){let t={},r={},n=void 0;function o(s){if(r.unregisterHandler)r.unregisterHandler();r=s,r.registerHandler?.($)}function c(s){if(typeof s==="function"){n=s;return}n=(i,u)=>{let p=s[i];if(p)return p(u);let g=s._;if(!g)throw Error(`The requested method has no handler: ${String(i)}`);return g(i,u)}}let{maxRequestTime:a=1000}=e;if(e.transport)o(e.transport);if(e.requestHandler)c(e.requestHandler);if(e._debugHooks)t=e._debugHooks;let R=0;function m(){if(R<=10000000000)return++R;return R=0}let d=new Map,l=new Map;function w(s,...i){let u=i[0];return new Promise((p,g)=>{if(!r.send)throw S(["send"],"make requests");let f=m(),B={type:"request",id:f,method:s,params:u};if(d.set(f,{resolve:p,reject:g}),a!==1/0)l.set(f,setTimeout(()=>{l.delete(f),d.delete(f),g(Error("RPC request timed out."))},a));t.onSend?.(B),r.send(B)})}let q=new Proxy(w,{get:(s,i,u)=>{if(i in s)return Reflect.get(s,i,u);return(p)=>w(i,p)}}),x=q;function T(s,...i){let u=i[0];if(!r.send)throw S(["send"],"send messages");let p={type:"message",id:s,payload:u};t.onSend?.(p),r.send(p)}let v=new Proxy(T,{get:(s,i,u)=>{if(i in s)return Reflect.get(s,i,u);return(p)=>T(i,p)}}),O=v,h=new Map,b=new Set;function Y(s,i){if(!r.registerHandler)throw S(["registerHandler"],"register message listeners");if(s==="*"){b.add(i);return}if(!h.has(s))h.set(s,new Set);h.get(s).add(i)}function U(s,i){if(s==="*"){b.delete(i);return}if(h.get(s)?.delete(i),h.get(s)?.size===0)h.delete(s)}async function $(s){if(t.onReceive?.(s),!("type"in s))throw Error("Message does not contain a type.");if(s.type==="request"){if(!r.send||!n)throw S(["send","requestHandler"],"handle requests");let{id:i,method:u,params:p}=s,g;try{g={type:"response",id:i,success:!0,payload:await n(u,p)}}catch(f){if(!(f instanceof Error))throw f;g={type:"response",id:i,success:!1,error:f.message}}t.onSend?.(g),r.send(g);return}if(s.type==="response"){let i=l.get(s.id);if(i!=null)clearTimeout(i);l.delete(s.id);let{resolve:u,reject:p}=d.get(s.id)??{};if(d.delete(s.id),!s.success)p?.(Error(s.error));else u?.(s.payload);return}if(s.type==="message"){for(let u of b)u(s.id,s.payload);let i=h.get(s.id);if(!i)return;for(let u of i)u(s.payload);return}throw Error(`Unexpected RPC message type: ${s.type}`)}return{setTransport:o,setRequestHandler:c,request:q,requestProxy:x,send:v,sendProxy:O,addMessageListener:Y,removeMessageListener:U,proxy:{send:O,request:x}}}function H(e,t){let r={maxRequestTime:t.maxRequestTime,requestHandler:{...t.handlers.requests,...t.extraRequestHandlers},transport:{registerHandler:()=>{}}},n=I(r),o=t.handlers.messages;if(o)n.addMessageListener("*",(c,a)=>{let R=o["*"];if(R)R(c,a);let m=o[c];if(m)m(a)});return n}var{__electrobunWebviewId:L,__electrobunRpcSocketPort:W}=window;class P{bunSocket;rpc;rpcHandler;constructor(e){this.rpc=e.rpc,this.init()}init(){if(this.initSocketToBun(),window.__electrobun.receiveMessageFromBun=this.receiveMessageFromBun.bind(this),this.rpc)this.rpc.setTransport(this.createTransport())}initSocketToBun(){if(!W||!L)return;let e=new WebSocket(`ws://localhost:${W}/socket?webviewId=${L}`);this.bunSocket=e,e.addEventListener("open",()=>{}),e.addEventListener("message",async(t)=>{let r=t.data;if(typeof r==="string")try{let n=JSON.parse(r),o=await window.__electrobun_decrypt(n.encryptedData,n.iv,n.tag);this.rpcHandler?.(JSON.parse(o))}catch(n){console.error("Error parsing bun message:",n)}else if(r instanceof Blob);else console.error("UNKNOWN DATA TYPE RECEIVED:",t.data)}),e.addEventListener("error",(t)=>{console.error("Socket error:",t)}),e.addEventListener("close",(t)=>{})}createTransport(){let e=this;return{send(t){try{let r=JSON.stringify(t);e.bunBridge(r)}catch(r){console.error("bun: failed to serialize message to webview",r)}},registerHandler(t){e.rpcHandler=t}}}async bunBridge(e){if(this.bunSocket?.readyState===WebSocket.OPEN)try{let{encryptedData:t,iv:r,tag:n}=await window.__electrobun_encrypt(e),c=JSON.stringify({encryptedData:t,iv:r,tag:n});this.bunSocket.send(c);return}catch(t){console.error("Error sending message to bun via socket:",t)}window.__electrobunBunBridge?.postMessage(e)}receiveMessageFromBun(e){if(this.rpcHandler)this.rpcHandler(e)}static defineRPC(e){return H("webview",{...e,extraRequestHandlers:{evaluateJavascriptWithResponse:({script:t})=>new Promise((r)=>{try{let o=Function(t)();if(o instanceof Promise)o.then((c)=>{r(c)}).catch((c)=>{console.error("bun: async script execution failed",c),r(String(c))});else r(o)}catch(n){console.error("bun: failed to eval script",n),r(String(n))}})}})}}function C(e,t){if(e===404&&z(t))return null;return e>=500?"error":"warn"}function z(e){let t=e?.method?.toUpperCase()??"GET";if(t!=="GET"&&t!=="HEAD")return!1;let r=e?.url;if(!r)return!1;let n=r;try{n=new URL(r,"http://localhost").pathname}catch{n=r.split("?")[0]??r}return n==="/api/vincent/status"}var A={evaluate:async(e)=>({ok:!1,error:`BrowserWorkspaceView is not mounted — cannot evaluate tab ${e}`}),getTabRect:async()=>null};function E(){if(typeof window>"u")return A;return window.__ELIZA_BROWSER_TABS_REGISTRY__??A}var Z=Symbol.for("elizaos.app.boot-config"),F=Z;function N(e,t){let n={...e.__ELIZAOS_APP_BOOT_CONFIG__??e.__ELIZA_APP_BOOT_CONFIG__??e[F]?.current??{},...t};return e.__ELIZAOS_APP_BOOT_CONFIG__=n,e.__ELIZA_APP_BOOT_CONFIG__=n,e[F]={current:n},n}function D(){if(typeof window.__electrobun>"u")window.__electrobun={receiveMessageFromBun:(e)=>{},receiveInternalMessageFromBun:(e)=>{}}}var y={},K="__ELIZA_ELECTROBUN_LOG_MIRROR__";function G(e){if(!e||typeof e!=="object")throw Error("Electrobun RPC params must be an object");return e}function k(e,t){let r=e[t];if(typeof r!=="string")throw Error(`Electrobun RPC param "${t}" must be a string`);return r}function j(e,t){let r=e[t];if(typeof r!=="number"||!Number.isFinite(r))throw Error(`Electrobun RPC param "${t}" must be a finite number`);return r}D();function X(e,t){if(e==="apiBaseUpdate"){let n=t;if(window.__ELIZA_API_BASE__=n.base,n.token)Object.defineProperty(window,"__ELIZA_API_TOKEN__",{value:n.token,configurable:!0,writable:!0,enumerable:!1});N(window,{apiBase:n.base,...n.token?{apiToken:n.token}:{}})}let r=y[e];if(!r)return;for(let n of Array.from(r))try{n(t)}catch(o){console.error(`[ElectrobunBridge] Listener error for ${e}:`,o)}}function J(e,t){if(typeof e==="string")X(e,t)}var _=P.defineRPC({maxRequestTime:600000,handlers:{requests:{browserWorkspaceRendererEvaluate:async(e)=>{let t=G(e),r=k(t,"id"),n=k(t,"script"),o=j(t,"timeoutMs");return await E().evaluate(r,n,o)},browserWorkspaceRendererGetTabRect:async(e)=>{let t=G(e);return E().getTabRect(k(t,"id"))}},messages:{"*":J}}});new P({rpc:_});function M(e){if(e instanceof Error)return{name:e.name,message:e.message,stack:e.stack};return e}var V=new Proxy(_.request,{get(e,t,r){let n=Reflect.get(e,t,r);if(typeof n!=="function")return n;return async(o)=>{try{return await n.call(e,o)}catch(c){throw _.request.rendererReportDiagnostic({level:"error",source:"rpc",message:`Electrobun RPC request failed: ${String(t)}`,details:M(c)}).catch(()=>{}),c}}}}),Q={request:V,onMessage:(e,t)=>{if(!y[e])y[e]=new Set;y[e].add(t)},offMessage:(e,t)=>{if(y[e]?.delete(t),y[e]?.size===0)delete y[e]}};window.__ELIZA_ELECTROBUN_RPC__=Q;function ee(){let e=window;if(e[K])return;e[K]=!0;let t=(n,o,c,a)=>{_.request.rendererReportDiagnostic({level:n,source:o,message:c,details:a}).catch(()=>{})},r=["log","info","warn","error"];for(let n of r){let o=console[n].bind(console);console[n]=(...c)=>{o(...c),t(n,"console",c.map((a)=>{if(typeof a==="string")return a;try{return JSON.stringify(a)}catch{return String(a)}}).join(" "))}}if(window.addEventListener("error",(n)=>{let o=n.target;if(o&&(o.src||o.href)){t("error","resource","Failed to load resource",{tagName:o.tagName,src:o.src,href:o.href});return}t("error","window.onerror",n.message||"Unhandled window error",{filename:n.filename,lineno:n.lineno,colno:n.colno})},!0),window.addEventListener("unhandledrejection",(n)=>{t("error","unhandledrejection","Unhandled promise rejection",M(n.reason))}),typeof window.fetch==="function"){let n=window.fetch.bind(window);window.fetch=async(...o)=>{let c=Date.now(),a=o[0],R=o[1],m=typeof a==="string"?a:a instanceof Request?a.url:String(a),d=R?.method??(a instanceof Request?a.method:void 0)??"GET";try{let l=await n(...o),w=l.ok?null:C(l.status,{url:m,method:d});if(w)t(w,"fetch",`HTTP ${l.status} ${l.statusText}`,{url:m,method:d,durationMs:Date.now()-c});return l}catch(l){throw t("error","fetch","Fetch failed",{url:m,method:d,durationMs:Date.now()-c,error:M(l)}),l}}}if(typeof XMLHttpRequest<"u"){let n=XMLHttpRequest.prototype.open,o=XMLHttpRequest.prototype.send;XMLHttpRequest.prototype.open=function(c,a,...R){return this.__elizaDiag={method:c,url:String(a),startedAt:Date.now()},n.call(this,c,a,...R)},XMLHttpRequest.prototype.send=function(...c){let a=this,R=()=>{let d=a.__elizaDiag;if(!d)return;let l=a.status>=400?C(a.status,{url:d.url,method:d.method}):null;if(l)t(l,"xhr",`HTTP ${a.status}`,{url:d.url,method:d.method,durationMs:Date.now()-d.startedAt})},m=()=>{let d=a.__elizaDiag;t("error","xhr","XMLHttpRequest failed",{url:d?.url,method:d?.method,durationMs:d?Date.now()-d.startedAt:void 0})};return a.addEventListener("loadend",R,{once:!0}),a.addEventListener("error",m,{once:!0}),o.call(this,...c)}}}ee();})();
|
|
@@ -315,11 +315,16 @@ describe("runVoiceLiveValidation", () => {
|
|
|
315
315
|
});
|
|
316
316
|
|
|
317
317
|
expect(report.mode).toBe("full");
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
318
|
+
const runtimeBudget = report.budgetResults?.find(
|
|
319
|
+
(result) => result.stage === "runtime_to_first_token",
|
|
320
|
+
);
|
|
321
|
+
expect(runtimeBudget).toMatchObject({
|
|
322
|
+
ok: false,
|
|
323
|
+
stage: "runtime_to_first_token",
|
|
324
|
+
budgetMs: 1,
|
|
325
|
+
});
|
|
326
|
+
expect(runtimeBudget?.actualMs).toEqual(expect.any(Number));
|
|
327
|
+
expect(runtimeBudget?.actualMs).toBeGreaterThan(1);
|
|
323
328
|
expect(
|
|
324
329
|
report.recommendations.some((item) =>
|
|
325
330
|
item.includes("runtime_to_first_token missed budget"),
|
|
@@ -666,12 +666,13 @@ export async function* parseVoiceSseStream(
|
|
|
666
666
|
const { value, done } = await reader.read();
|
|
667
667
|
if (done) break;
|
|
668
668
|
buffer += decoder.decode(value, { stream: true });
|
|
669
|
-
let nl
|
|
670
|
-
while (
|
|
669
|
+
let nl = buffer.indexOf("\n");
|
|
670
|
+
while (nl >= 0) {
|
|
671
671
|
const line = buffer.slice(0, nl);
|
|
672
672
|
buffer = buffer.slice(nl + 1);
|
|
673
673
|
const frame = handle(line);
|
|
674
674
|
if (frame) yield frame;
|
|
675
|
+
nl = buffer.indexOf("\n");
|
|
675
676
|
}
|
|
676
677
|
}
|
|
677
678
|
const tail = handle(buffer);
|
|
@@ -58,6 +58,7 @@ class MockVoiceRuntimeAdapter implements VoiceRuntimeAdapter {
|
|
|
58
58
|
played = false;
|
|
59
59
|
runtimeHandedOff = false;
|
|
60
60
|
runtimeHandoffCount = 0;
|
|
61
|
+
lastHandoffParams: VoiceRuntimeHandoffParams | undefined;
|
|
61
62
|
playbackAvailable = true;
|
|
62
63
|
asrAvailable = true;
|
|
63
64
|
ttsAvailable = true;
|
|
@@ -179,6 +180,7 @@ class MockVoiceRuntimeAdapter implements VoiceRuntimeAdapter {
|
|
|
179
180
|
): Promise<VoiceRuntimeHandoffResult> {
|
|
180
181
|
this.runtimeHandedOff = true;
|
|
181
182
|
this.runtimeHandoffCount += 1;
|
|
183
|
+
this.lastHandoffParams = params;
|
|
182
184
|
return {
|
|
183
185
|
firstTokenText: "ok",
|
|
184
186
|
responseText: `response:${params.text}`,
|
|
@@ -462,6 +464,30 @@ describe("VoiceService", () => {
|
|
|
462
464
|
expect(adapter.runtimeHandoffCount).toBe(1);
|
|
463
465
|
});
|
|
464
466
|
|
|
467
|
+
it("hands the final transcript off as VOICE_DM with a COMPUTED turn signal (#8786)", async () => {
|
|
468
|
+
const { voice, adapter } = harness({
|
|
469
|
+
ELIZA_VOICE_LIVE_RUNTIME: "1",
|
|
470
|
+
});
|
|
471
|
+
|
|
472
|
+
await voice.start({ mode: "local-runtime" });
|
|
473
|
+
adapter.emitAsrFinal({ text: "what is on my calendar today" });
|
|
474
|
+
await flushVoiceEvents();
|
|
475
|
+
|
|
476
|
+
expect(adapter.runtimeHandedOff).toBe(true);
|
|
477
|
+
// The signal must be COMPUTED by voice-service from the transcript — not
|
|
478
|
+
// injected by the caller — so the server voice gate
|
|
479
|
+
// (core.voice_turn_signal / _confirm) actually has something to read on
|
|
480
|
+
// desktop. Before #8786 this path sent a bare { text } and the gate was inert.
|
|
481
|
+
const signal = adapter.lastHandoffParams?.metadata?.voiceTurnSignal as
|
|
482
|
+
| Record<string, unknown>
|
|
483
|
+
| undefined;
|
|
484
|
+
expect(signal).toBeDefined();
|
|
485
|
+
expect(typeof signal?.endOfTurnProbability).toBe("number");
|
|
486
|
+
expect(signal?.agentShouldSpeak).toBe(true);
|
|
487
|
+
expect(["agent", "user", "unknown"]).toContain(signal?.nextSpeaker);
|
|
488
|
+
expect(String(signal?.source)).toMatch(/^client-ambient/);
|
|
489
|
+
});
|
|
490
|
+
|
|
465
491
|
it("starts live audio mode with a mocked adapter", async () => {
|
|
466
492
|
const { voice, adapter } = harness({
|
|
467
493
|
ELIZA_VOICE_LIVE_AUDIO: "1",
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { JsonValue } from "@elizaos/plugin-remote-manifest";
|
|
2
|
+
import { buildVoiceTurnSignal } from "@elizaos/shared/voice/respond-gate";
|
|
2
3
|
import type { TraceService } from "../trace/trace-service";
|
|
3
4
|
import { VoiceError } from "./errors";
|
|
4
5
|
import type {
|
|
@@ -11,6 +12,7 @@ import type {
|
|
|
11
12
|
VoicePipelineId,
|
|
12
13
|
VoicePipelineSnapshot,
|
|
13
14
|
VoicePipelineStatus,
|
|
15
|
+
VoiceRuntimeHandoffParams,
|
|
14
16
|
VoiceRuntimeStatus,
|
|
15
17
|
VoiceSpeakParams,
|
|
16
18
|
VoiceStartParams,
|
|
@@ -165,6 +167,9 @@ export class VoiceService {
|
|
|
165
167
|
private traceSessionReady: Promise<void> | null = null;
|
|
166
168
|
private readonly unsubscriptions: Array<() => void> = [];
|
|
167
169
|
private runtimeCommitTurnId: VoiceTurnId | null = null;
|
|
170
|
+
/** Agent's most recent spoken reply + when it landed — feeds the echo guard. */
|
|
171
|
+
private lastAgentReply: string | undefined;
|
|
172
|
+
private lastAgentReplyAtMs: number | undefined;
|
|
168
173
|
|
|
169
174
|
constructor(options: VoiceServiceOptions = {}) {
|
|
170
175
|
this.traceService = options.traceService ?? null;
|
|
@@ -774,6 +779,36 @@ export class VoiceService {
|
|
|
774
779
|
text,
|
|
775
780
|
});
|
|
776
781
|
|
|
782
|
+
// Build the client voice-turn signal from the final transcript so the
|
|
783
|
+
// server voice gate (`core.voice_turn_signal` / `_confirm`) actually runs on
|
|
784
|
+
// desktop — matching the web `useShellController` path (#8786). Without it
|
|
785
|
+
// `getVoiceTurnSignalMetadata` returns null and both gates are inert, so
|
|
786
|
+
// desktop voice silently bypasses the turn-taking authority. The echo guard
|
|
787
|
+
// uses the agent's most recent spoken reply (recorded below).
|
|
788
|
+
// At handoff the agent is "thinking" (the user just finished), so echo
|
|
789
|
+
// suppression keys off how recently the agent last spoke, not a live
|
|
790
|
+
// agentSpeaking flag (which is always false here).
|
|
791
|
+
const signal = buildVoiceTurnSignal(text, {
|
|
792
|
+
recentAgentReply: this.lastAgentReply,
|
|
793
|
+
replyAgeMs:
|
|
794
|
+
this.lastAgentReplyAtMs !== undefined
|
|
795
|
+
? this.now().getTime() - this.lastAgentReplyAtMs
|
|
796
|
+
: undefined,
|
|
797
|
+
});
|
|
798
|
+
const handoff: VoiceRuntimeHandoffParams = {
|
|
799
|
+
text,
|
|
800
|
+
// Spelled out as a JSON-safe literal (the signal is an interface, which is
|
|
801
|
+
// not assignable to Record<string, JsonValue> without an index signature).
|
|
802
|
+
metadata: {
|
|
803
|
+
voiceTurnSignal: {
|
|
804
|
+
endOfTurnProbability: signal.endOfTurnProbability,
|
|
805
|
+
nextSpeaker: signal.nextSpeaker,
|
|
806
|
+
agentShouldSpeak: signal.agentShouldSpeak,
|
|
807
|
+
source: signal.source,
|
|
808
|
+
},
|
|
809
|
+
},
|
|
810
|
+
};
|
|
811
|
+
|
|
777
812
|
// Streaming handoff: consume the reply token-by-token so the first_token
|
|
778
813
|
// mark reflects the true time-to-first-token (not full-reply latency) and
|
|
779
814
|
// so a future phrase-by-phrase synth can begin before generation finishes.
|
|
@@ -789,29 +824,26 @@ export class VoiceService {
|
|
|
789
824
|
try {
|
|
790
825
|
let firstMarked = false;
|
|
791
826
|
let accumulated = "";
|
|
792
|
-
const result = await streamFn.call(
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
// Mark at first-delta wall time (mark() stamps now()).
|
|
801
|
-
void this.markModelFirstToken(fullText.slice(0, 32) || "…");
|
|
802
|
-
}
|
|
803
|
-
},
|
|
804
|
-
onDone: ({ fullText }: { fullText: string }) => {
|
|
805
|
-
if (fullText) accumulated = fullText;
|
|
806
|
-
},
|
|
827
|
+
const result = await streamFn.call(this.runtimeAdapter, handoff, {
|
|
828
|
+
onTextDelta: (_delta: string, fullText: string) => {
|
|
829
|
+
accumulated = fullText;
|
|
830
|
+
if (!firstMarked) {
|
|
831
|
+
firstMarked = true;
|
|
832
|
+
// Mark at first-delta wall time (mark() stamps now()).
|
|
833
|
+
void this.markModelFirstToken(fullText.slice(0, 32) || "…");
|
|
834
|
+
}
|
|
807
835
|
},
|
|
808
|
-
|
|
836
|
+
onDone: ({ fullText }: { fullText: string }) => {
|
|
837
|
+
if (fullText) accumulated = fullText;
|
|
838
|
+
},
|
|
839
|
+
});
|
|
809
840
|
const responseText = result.responseText ?? accumulated;
|
|
810
841
|
if (!firstMarked) {
|
|
811
842
|
await this.markModelFirstToken(responseText.slice(0, 32) || "…");
|
|
812
843
|
}
|
|
813
844
|
if (responseText) {
|
|
814
845
|
this.requireActiveTurn().responseText = responseText;
|
|
846
|
+
this.recordAgentReply(responseText);
|
|
815
847
|
}
|
|
816
848
|
return;
|
|
817
849
|
} catch {
|
|
@@ -827,11 +859,12 @@ export class VoiceService {
|
|
|
827
859
|
(this.mode === "local-runtime" || this.mode === "live-audio") &&
|
|
828
860
|
this.runtimeAdapter.sendRuntimeMessage
|
|
829
861
|
) {
|
|
830
|
-
const result = await this.runtimeAdapter.sendRuntimeMessage(
|
|
862
|
+
const result = await this.runtimeAdapter.sendRuntimeMessage(handoff);
|
|
831
863
|
firstTokenText = result.firstTokenText ?? result.responseText ?? "";
|
|
832
864
|
responseText = result.responseText;
|
|
833
865
|
raw = result.raw;
|
|
834
866
|
}
|
|
867
|
+
if (responseText) this.recordAgentReply(responseText);
|
|
835
868
|
const modelMark = await this.markModelFirstToken(
|
|
836
869
|
firstTokenText,
|
|
837
870
|
raw ?? null,
|
|
@@ -850,6 +883,13 @@ export class VoiceService {
|
|
|
850
883
|
}
|
|
851
884
|
}
|
|
852
885
|
|
|
886
|
+
/** Remember the agent's last spoken reply so the next turn's echo guard can
|
|
887
|
+
* suppress the agent's own TTS bleeding back into an always-on mic (#8786). */
|
|
888
|
+
private recordAgentReply(reply: string): void {
|
|
889
|
+
this.lastAgentReply = reply;
|
|
890
|
+
this.lastAgentReplyAtMs = this.now().getTime();
|
|
891
|
+
}
|
|
892
|
+
|
|
853
893
|
private async handleTtsResult(
|
|
854
894
|
params: VoiceSynthesizeSpeechParams,
|
|
855
895
|
result: VoiceSynthesisResult,
|
|
@@ -45,8 +45,12 @@
|
|
|
45
45
|
"@elizaos/agent/*": ["../../../agent/src/*"],
|
|
46
46
|
"@elizaos/core": ["../../../core/src/index.node.ts"],
|
|
47
47
|
"@elizaos/core/*": ["../../../core/src/*"],
|
|
48
|
+
"@elizaos/logger": ["../../../logger/src/index.ts"],
|
|
49
|
+
"@elizaos/logger/*": ["../../../logger/src/*"],
|
|
48
50
|
"@elizaos/shared": ["../../../shared/src/index.ts"],
|
|
49
51
|
"@elizaos/shared/*": ["../../../shared/src/*"],
|
|
52
|
+
"@elizaos/security": ["../../../security/src/index.ts"],
|
|
53
|
+
"@elizaos/security/*": ["../../../security/src/*"],
|
|
50
54
|
"@elizaos/ui": ["../../../ui/src/index.ts"],
|
|
51
55
|
"@elizaos/ui/*": ["../../../ui/src/*"],
|
|
52
56
|
"@elizaos/plugin-elizacloud": [
|
|
@@ -63,6 +67,12 @@
|
|
|
63
67
|
"@elizaos/plugin-coding-tools/*": [
|
|
64
68
|
"../../../../plugins/plugin-coding-tools/src/*"
|
|
65
69
|
],
|
|
70
|
+
"@elizaos/plugin-capacitor-bridge": [
|
|
71
|
+
"../../../../plugins/plugin-capacitor-bridge/src/index.ts"
|
|
72
|
+
],
|
|
73
|
+
"@elizaos/plugin-capacitor-bridge/*": [
|
|
74
|
+
"../../../../plugins/plugin-capacitor-bridge/src/*"
|
|
75
|
+
],
|
|
66
76
|
"@elizaos/plugin-local-inference": [
|
|
67
77
|
"../../../../plugins/plugin-local-inference/src/index.ts"
|
|
68
78
|
],
|
|
@@ -122,7 +132,13 @@
|
|
|
122
132
|
"@elizaos/plugin-sql": [
|
|
123
133
|
"../../../../plugins/plugin-sql/src/index.node.ts"
|
|
124
134
|
],
|
|
125
|
-
"@elizaos/plugin-sql/*": ["../../../../plugins/plugin-sql/src/*"]
|
|
135
|
+
"@elizaos/plugin-sql/*": ["../../../../plugins/plugin-sql/src/*"],
|
|
136
|
+
"@elizaos/plugin-streaming": [
|
|
137
|
+
"../../../../plugins/plugin-streaming/src/index.ts"
|
|
138
|
+
],
|
|
139
|
+
"@elizaos/plugin-streaming/*": [
|
|
140
|
+
"../../../../plugins/plugin-streaming/src/*"
|
|
141
|
+
]
|
|
126
142
|
}
|
|
127
143
|
},
|
|
128
144
|
"include": [
|
|
@@ -12,18 +12,16 @@
|
|
|
12
12
|
<scene sceneID="EHf-IW-A2E">
|
|
13
13
|
<objects>
|
|
14
14
|
<viewController id="01J-lp-oVM" sceneMemberID="viewController">
|
|
15
|
-
<
|
|
15
|
+
<view key="view" contentMode="scaleToFill" id="snD-IY-ifK">
|
|
16
16
|
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
|
|
17
17
|
<autoresizingMask key="autoresizingMask"/>
|
|
18
|
-
|
|
19
|
-
|
|
18
|
+
<!-- #ef5a1f (default home-background orange) in sRGB to 3 decimals: matches the React home so the launch screen does not flash a different orange (issue #9565). -->
|
|
19
|
+
<color key="backgroundColor" red="0.937" green="0.353" blue="0.122" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
|
20
|
+
</view>
|
|
20
21
|
</viewController>
|
|
21
22
|
<placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
|
22
23
|
</objects>
|
|
23
24
|
<point key="canvasLocation" x="53" y="375"/>
|
|
24
25
|
</scene>
|
|
25
26
|
</scenes>
|
|
26
|
-
<resources>
|
|
27
|
-
<image name="Splash" width="1366" height="1366"/>
|
|
28
|
-
</resources>
|
|
29
27
|
</document>
|
package/registry/index.d.ts
CHANGED
|
@@ -1,7 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
export * from "./app-registry";
|
|
3
|
-
export { getApps, getConnectors, getEntry, getEntryByNpmName, getPlugins, indexEntries, type LoadedRegistry, mergeWithRuntime, normalizeConnectorAuth, type RegistryValidationError, } from "./loader";
|
|
4
|
-
export * from "./schema";
|
|
5
|
-
export declare function loadRegistry(): LoadedRegistry;
|
|
6
|
-
export declare function clearRegistryCacheForTests(): void;
|
|
1
|
+
export * from "@elizaos/registry/first-party";
|
|
7
2
|
//# sourceMappingURL=index.d.ts.map
|
package/registry/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/registry/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/registry/index.ts"],"names":[],"mappings":"AASA,cAAc,+BAA+B,CAAC"}
|
package/registry/index.js
CHANGED
|
@@ -1,102 +1,10 @@
|
|
|
1
|
-
//
|
|
2
|
-
// exposes typed accessors. The single import path the rest of the codebase
|
|
3
|
-
// uses to consume the registry.
|
|
4
|
-
import { existsSync, readdirSync, readFileSync } from "node:fs";
|
|
5
|
-
import { dirname, join, resolve } from "node:path";
|
|
6
|
-
import { fileURLToPath } from "node:url";
|
|
7
|
-
import { loadRegistryFromRawEntries } from "./loader.js";
|
|
8
|
-
export * from "./app-registry.js";
|
|
9
|
-
export { getApps, getConnectors, getEntry, getEntryByNpmName, getPlugins, indexEntries, mergeWithRuntime, normalizeConnectorAuth, } from "./loader.js";
|
|
10
|
-
export * from "./schema.js";
|
|
11
|
-
// Bun.build collapses these top-level `const` declarations into `var`s
|
|
12
|
-
// inside an `__esm` wrapper, and `import.meta.url` inside that wrapper
|
|
13
|
-
// can resolve to `undefined` on the on-device runtime when the registry
|
|
14
|
-
// module is initialised through the `Promise.resolve().then(() => init_xxx())`
|
|
15
|
-
// adapter the bundler emits for dynamic-import re-exports of `@elizaos/app-core`.
|
|
16
|
-
// The fallback to `process.argv[1]` matches the bundle's own entrypoint
|
|
17
|
-
// (e.g. `/data/data/.../agent-bundle.js`) so the registry sits at
|
|
18
|
-
// `<bundle-dir>/entries/`. Phase A asset extraction stages the `entries/`
|
|
19
|
-
// payload alongside the bundle.
|
|
20
|
-
function resolveEntriesDir() {
|
|
21
|
-
const url = typeof import.meta.url === "string" && import.meta.url
|
|
22
|
-
? import.meta.url
|
|
23
|
-
: null;
|
|
24
|
-
let moduleDir;
|
|
25
|
-
if (url) {
|
|
26
|
-
try {
|
|
27
|
-
moduleDir = dirname(fileURLToPath(url));
|
|
28
|
-
}
|
|
29
|
-
catch {
|
|
30
|
-
moduleDir = dirname(process.argv[1] ?? process.cwd());
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
else {
|
|
34
|
-
moduleDir = dirname(process.argv[1] ?? process.cwd());
|
|
35
|
-
}
|
|
36
|
-
const distEntries = join(moduleDir, "entries");
|
|
37
|
-
// When running from a freshly-cloned workspace (dist/ not built yet) the
|
|
38
|
-
// module sits at `packages/app-core/dist/registry/index.js` but the entries
|
|
39
|
-
// haven't been copied across yet. Fall back to the colocated source tree at
|
|
40
|
-
// `packages/app-core/src/registry/entries/` so dev boots survive missing
|
|
41
|
-
// builds. Packaged builds (where moduleDir resolves under .../dist/...) and
|
|
42
|
-
// the on-device runtime (where there is no `src/` sibling) keep using
|
|
43
|
-
// `distEntries` as before.
|
|
44
|
-
if (!existsSync(distEntries)) {
|
|
45
|
-
const sourceFallback = resolve(moduleDir, "..", "..", "src", "registry", "entries");
|
|
46
|
-
if (existsSync(sourceFallback)) {
|
|
47
|
-
return sourceFallback;
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
return distEntries;
|
|
51
|
-
}
|
|
52
|
-
// TDZ-hardening (see also packages/app-core/src/services/vault-mirror.ts).
|
|
53
|
-
// This module's cached registry slot must survive being re-entered during
|
|
54
|
-
// circular-import partial evaluation on Bun's strict ESM runtime. A bare
|
|
55
|
-
// `let cache = null` would still be in the temporal dead zone when an
|
|
56
|
-
// import cycle re-enters `loadRegistry()`, throwing
|
|
57
|
-
// `Cannot access 'cache' before initialization` and bricking boot
|
|
58
|
-
// (observed: vault-bootstrap → sensitiveKeysFromRegistry → loadRegistry
|
|
59
|
-
// during agent startup on the elizaOS live USB).
|
|
1
|
+
// Backwards-compatibility shim.
|
|
60
2
|
//
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
if (cacheSlot.value)
|
|
70
|
-
return cacheSlot.value;
|
|
71
|
-
const entriesDir = resolveEntriesDir();
|
|
72
|
-
const raws = [];
|
|
73
|
-
for (const kind of ["apps", "plugins", "connectors"]) {
|
|
74
|
-
const kindDir = join(entriesDir, kind);
|
|
75
|
-
let entries;
|
|
76
|
-
try {
|
|
77
|
-
entries = readdirSync(kindDir);
|
|
78
|
-
}
|
|
79
|
-
catch {
|
|
80
|
-
// In packaged desktop builds the registry entries may not be bundled.
|
|
81
|
-
// Log and continue rather than crashing the agent subprocess.
|
|
82
|
-
console.warn(`[registry] ${kind} directory missing: ${kindDir}`);
|
|
83
|
-
continue;
|
|
84
|
-
}
|
|
85
|
-
for (const filename of entries) {
|
|
86
|
-
if (!filename.endsWith(".json"))
|
|
87
|
-
continue;
|
|
88
|
-
const file = join(kindDir, filename);
|
|
89
|
-
const data = JSON.parse(readFileSync(file, "utf-8"));
|
|
90
|
-
raws.push({ file, data });
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
cacheSlot.value = loadRegistryFromRawEntries(raws);
|
|
94
|
-
return cacheSlot.value;
|
|
95
|
-
}
|
|
96
|
-
export function clearRegistryCacheForTests() {
|
|
97
|
-
if (!cacheSlot) {
|
|
98
|
-
cacheSlot = { value: null };
|
|
99
|
-
return;
|
|
100
|
-
}
|
|
101
|
-
cacheSlot.value = null;
|
|
102
|
-
}
|
|
3
|
+
// The first-party curated registry (schema, loader, entries, and the runtime
|
|
4
|
+
// registration overlay) moved to `@elizaos/registry/first-party`. This re-export
|
|
5
|
+
// keeps the `@elizaos/app-core/registry` subpath — and the `@elizaos/app-core`
|
|
6
|
+
// barrel re-exports — stable for existing consumers (plugin-registry,
|
|
7
|
+
// plugin-capacitor-bridge, app-core's own catalog/eliza/vault-bootstrap).
|
|
8
|
+
//
|
|
9
|
+
// New code should import directly from `@elizaos/registry/first-party`.
|
|
10
|
+
export * from "@elizaos/registry/first-party";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { AndroidAvfMicrodroidBoundary, AndroidAvfMicrodroidCapabilityState, MobileSafeRuntimeFeatureProbe } from "./mobile-safe-runtime";
|
|
1
|
+
import type { AndroidAvfMicrodroidBoundary, AndroidAvfMicrodroidCapabilityState, MobileSafeRuntimeFeatureProbe } from "./mobile-safe-runtime.js";
|
|
2
2
|
export declare const ANDROID_AVF_MICRODROID_REQUEST_CONTRACT_VERSION = 1;
|
|
3
3
|
export interface AndroidVirtualizationNativeBridge {
|
|
4
4
|
getAndroidVirtualization?: () => string | null | undefined;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Locate + wire the fused `libelizainference` that ships INSIDE a packaged
|
|
3
|
+
* desktop app, so a compiled app serves local inference with no env wiring and
|
|
4
|
+
* no separate download.
|
|
5
|
+
*
|
|
6
|
+
* The desktop packaging (`packages/app-core/scripts/desktop-build.mjs` →
|
|
7
|
+
* `stage-desktop-fused-lib.mjs`) stages the fused set into
|
|
8
|
+
* `<eliza-dist>/local-inference/lib/`, and the Electrobun build copies the
|
|
9
|
+
* whole `dist` tree to `Resources/app/eliza-dist/`. At runtime this module
|
|
10
|
+
* lives at `<eliza-dist>/node_modules/@elizaos/app-core/dist/runtime/…`, so we
|
|
11
|
+
* walk up looking for a `local-inference/lib/<fused>` that actually exists.
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* Candidate filenames for the fused library, per platform. Mirrors
|
|
15
|
+
* `plugin-local-inference`'s `resolveFusedLibraryPath` / the FFI loader so the
|
|
16
|
+
* probe and the runtime agree on what counts as "the fused lib is here".
|
|
17
|
+
*/
|
|
18
|
+
export declare function fusedLibraryFilenames(): string[];
|
|
19
|
+
/**
|
|
20
|
+
* Walk up from `startUrl`'s directory looking for a `local-inference/lib`
|
|
21
|
+
* directory that already contains a platform fused lib. Self-validating (only
|
|
22
|
+
* matches where the artifact is), so there is no layout ambiguity. Returns null
|
|
23
|
+
* in dev (run from source, nothing staged) and on mobile (native lib ships via
|
|
24
|
+
* jniLibs / xcframework). Best-effort; never throws.
|
|
25
|
+
*/
|
|
26
|
+
export declare function findBundledFusedLibDir(startUrl?: string): string | null;
|
|
27
|
+
/**
|
|
28
|
+
* Point the local-inference runtime at the app-bundled fused lib when one is
|
|
29
|
+
* present. Respects an explicit operator override (`ELIZA_INFERENCE_LIBRARY` /
|
|
30
|
+
* `ELIZA_INFERENCE_LIB_DIR`) and is a no-op when nothing is bundled (dev,
|
|
31
|
+
* mobile) — `resolveFusedLibraryPath` then falls back to
|
|
32
|
+
* `<stateDir>/local-inference/lib` as before. Idempotent. Returns the dir it
|
|
33
|
+
* wired (or already-set override), else null.
|
|
34
|
+
*/
|
|
35
|
+
export declare function ensureBundledFusedLibDir(env?: NodeJS.ProcessEnv, startUrl?: string): string | null;
|
|
36
|
+
//# sourceMappingURL=bundled-fused-lib.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bundled-fused-lib.d.ts","sourceRoot":"","sources":["../../../../../src/runtime/bundled-fused-lib.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAQH;;;;GAIG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,EAAE,CAKhD;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,GAAE,MAAwB,GACjC,MAAM,GAAG,IAAI,CAiBf;AAED;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CACtC,GAAG,GAAE,MAAM,CAAC,UAAwB,EACpC,QAAQ,GAAE,MAAwB,GACjC,MAAM,GAAG,IAAI,CAYf"}
|