@elizaos/plugin-elizacloud 2.0.0-alpha.8 → 2.0.11-beta.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +196 -0
- package/auto-enable.ts +22 -0
- package/dist/browser/index.browser.js +2 -21
- package/dist/browser/index.browser.js.map +5 -38
- package/dist/cjs/index.d.ts +2 -2
- package/dist/cjs/index.node.cjs +9112 -2265
- package/dist/cjs/index.node.js.map +68 -30
- package/dist/cloud/auth-service-types.d.ts +8 -0
- package/dist/cloud/auth-service-types.d.ts.map +1 -0
- package/dist/cloud/auth-service-types.js +36 -0
- package/dist/cloud/auth-service-types.js.map +10 -0
- package/dist/cloud/auth.d.ts +19 -0
- package/dist/cloud/auth.d.ts.map +1 -0
- package/dist/cloud/auth.js +283 -0
- package/dist/cloud/auth.js.map +12 -0
- package/dist/cloud/backup.d.ts +18 -0
- package/dist/cloud/backup.d.ts.map +1 -0
- package/dist/cloud/backup.js +63 -0
- package/dist/cloud/backup.js.map +10 -0
- package/dist/cloud/base-url.d.ts +7 -0
- package/dist/cloud/base-url.d.ts.map +1 -0
- package/dist/cloud/base-url.js +29 -0
- package/dist/cloud/base-url.js.map +10 -0
- package/dist/cloud/bridge-client.d.ts +126 -0
- package/dist/cloud/bridge-client.d.ts.map +1 -0
- package/dist/cloud/bridge-client.js +384 -0
- package/dist/cloud/bridge-client.js.map +11 -0
- package/dist/cloud/clack-observer.d.ts +35 -0
- package/dist/cloud/clack-observer.d.ts.map +1 -0
- package/dist/cloud/clack-observer.js +143 -0
- package/dist/cloud/clack-observer.js.map +10 -0
- package/dist/cloud/cloud-api-key.d.ts +26 -0
- package/dist/cloud/cloud-api-key.d.ts.map +1 -0
- package/dist/cloud/cloud-api-key.js +60 -0
- package/dist/cloud/cloud-api-key.js.map +10 -0
- package/dist/cloud/cloud-manager.d.ts +33 -0
- package/dist/cloud/cloud-manager.d.ts.map +1 -0
- package/dist/cloud/cloud-manager.js +806 -0
- package/dist/cloud/cloud-manager.js.map +16 -0
- package/dist/cloud/cloud-proxy.d.ts +20 -0
- package/dist/cloud/cloud-proxy.d.ts.map +1 -0
- package/dist/cloud/cloud-proxy.js +54 -0
- package/dist/cloud/cloud-proxy.js.map +10 -0
- package/dist/cloud/cloud-wallet.d.ts +94 -0
- package/dist/cloud/cloud-wallet.d.ts.map +1 -0
- package/dist/cloud/cloud-wallet.js +362 -0
- package/dist/cloud/cloud-wallet.js.map +13 -0
- package/dist/cloud/duffel-client.d.ts +181 -0
- package/dist/cloud/duffel-client.d.ts.map +1 -0
- package/dist/cloud/duffel-client.js +506 -0
- package/dist/cloud/duffel-client.js.map +11 -0
- package/dist/cloud/index.d.ts +15 -0
- package/dist/cloud/index.d.ts.map +1 -0
- package/dist/cloud/index.js +1811 -0
- package/dist/cloud/index.js.map +24 -0
- package/dist/cloud/lifeops-schedule-sync-client.d.ts +43 -0
- package/dist/cloud/lifeops-schedule-sync-client.d.ts.map +1 -0
- package/dist/cloud/lifeops-schedule-sync-client.js +180 -0
- package/dist/cloud/lifeops-schedule-sync-client.js.map +11 -0
- package/dist/cloud/lifeops-schedule-sync-contracts.d.ts +89 -0
- package/dist/cloud/lifeops-schedule-sync-contracts.d.ts.map +1 -0
- package/dist/cloud/lifeops-schedule-sync-contracts.js +39 -0
- package/dist/cloud/lifeops-schedule-sync-contracts.js.map +10 -0
- package/dist/cloud/managed-payment-clients.d.ts +166 -0
- package/dist/cloud/managed-payment-clients.d.ts.map +1 -0
- package/dist/cloud/managed-payment-clients.js +238 -0
- package/dist/cloud/managed-payment-clients.js.map +11 -0
- package/dist/cloud/null-observer.d.ts +35 -0
- package/dist/cloud/null-observer.d.ts.map +1 -0
- package/dist/cloud/null-observer.js +45 -0
- package/dist/cloud/null-observer.js.map +10 -0
- package/dist/cloud/reconnect.d.ts +26 -0
- package/dist/cloud/reconnect.d.ts.map +1 -0
- package/dist/cloud/reconnect.js +104 -0
- package/dist/cloud/reconnect.js.map +10 -0
- package/dist/cloud/setup-observer.d.ts +98 -0
- package/dist/cloud/setup-observer.d.ts.map +1 -0
- package/dist/cloud/setup-observer.js +2 -0
- package/dist/cloud/setup-observer.js.map +9 -0
- package/dist/cloud/validate-url.d.ts +2 -0
- package/dist/cloud/validate-url.d.ts.map +1 -0
- package/dist/cloud/validate-url.js +175 -0
- package/dist/cloud/validate-url.js.map +10 -0
- package/dist/cloud/x402-payment-handler.d.ts +85 -0
- package/dist/cloud/x402-payment-handler.d.ts.map +1 -0
- package/dist/cloud/x402-payment-handler.js +119 -0
- package/dist/cloud/x402-payment-handler.js.map +10 -0
- package/dist/cloud-providers/cloud-status.d.ts.map +1 -1
- package/dist/cloud-providers/cloud-status.js +78 -0
- package/dist/cloud-providers/cloud-status.js.map +10 -0
- package/dist/cloud-providers/container-health.d.ts.map +1 -1
- package/dist/cloud-providers/container-health.js +74 -0
- package/dist/cloud-providers/container-health.js.map +10 -0
- package/dist/cloud-providers/credit-balance.d.ts.map +1 -1
- package/dist/cloud-providers/credit-balance.js +85 -0
- package/dist/cloud-providers/credit-balance.js.map +10 -0
- package/dist/cloud-providers/index.d.ts.map +1 -1
- package/dist/cloud-providers/index.js +24 -0
- package/dist/cloud-providers/index.js.map +9 -0
- package/dist/cloud-providers/model-registry.d.ts.map +1 -1
- package/dist/cloud-providers/model-registry.js +71 -0
- package/dist/cloud-providers/model-registry.js.map +10 -0
- package/dist/cloud-setup.d.ts +36 -0
- package/dist/cloud-setup.d.ts.map +1 -0
- package/dist/cloud-setup.js +883 -0
- package/dist/cloud-setup.js.map +14 -0
- package/dist/cloud-voice-catalog.d.ts +65 -0
- package/dist/cloud-voice-catalog.d.ts.map +1 -0
- package/dist/cloud-voice-catalog.js +278 -0
- package/dist/cloud-voice-catalog.js.map +12 -0
- package/dist/index.browser.d.ts +15 -3
- package/dist/index.browser.d.ts.map +1 -1
- package/dist/index.d.ts +24 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9862 -0
- package/dist/index.js.map +77 -0
- package/dist/index.node.d.ts +21 -2
- package/dist/index.node.d.ts.map +1 -1
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +182 -0
- package/dist/init.js.map +12 -0
- package/dist/lib/cloud-connection.d.ts +77 -0
- package/dist/lib/cloud-connection.d.ts.map +1 -0
- package/dist/lib/cloud-connection.js +654 -0
- package/dist/lib/cloud-connection.js.map +14 -0
- package/dist/lib/cloud-secrets.d.ts +10 -0
- package/dist/lib/cloud-secrets.d.ts.map +1 -0
- package/dist/lib/cloud-secrets.js +36 -0
- package/dist/lib/cloud-secrets.js.map +10 -0
- package/dist/lib/config-env.d.ts +5 -0
- package/dist/lib/config-env.d.ts.map +1 -0
- package/dist/lib/config-env.js +191 -0
- package/dist/lib/config-env.js.map +11 -0
- package/dist/lib/config-like.d.ts +40 -0
- package/dist/lib/config-like.d.ts.map +1 -0
- package/dist/lib/config-like.js +103 -0
- package/dist/lib/config-like.js.map +10 -0
- package/dist/lib/credential-type-map.d.ts +53 -0
- package/dist/lib/credential-type-map.d.ts.map +1 -0
- package/dist/lib/credential-type-map.js +88 -0
- package/dist/lib/credential-type-map.js.map +10 -0
- package/dist/lib/feature-flags.d.ts +2 -0
- package/dist/lib/feature-flags.d.ts.map +1 -0
- package/dist/lib/feature-flags.js +40 -0
- package/dist/lib/feature-flags.js.map +10 -0
- package/dist/lib/http.d.ts +11 -0
- package/dist/lib/http.d.ts.map +1 -0
- package/dist/lib/http.js +107 -0
- package/dist/lib/http.js.map +10 -0
- package/dist/lib/server-cloud-tts.d.ts +21 -0
- package/dist/lib/server-cloud-tts.d.ts.map +1 -0
- package/dist/lib/server-cloud-tts.js +251 -0
- package/dist/lib/server-cloud-tts.js.map +10 -0
- package/dist/lib/state-paths.d.ts +4 -0
- package/dist/lib/state-paths.d.ts.map +1 -0
- package/dist/lib/state-paths.js +52 -0
- package/dist/lib/state-paths.js.map +10 -0
- package/dist/lib/tts-debug.d.ts +6 -0
- package/dist/lib/tts-debug.d.ts.map +1 -0
- package/dist/lib/tts-debug.js +24 -0
- package/dist/lib/tts-debug.js.map +9 -0
- package/dist/models/embeddings.d.ts.map +1 -1
- package/dist/models/embeddings.js +329 -0
- package/dist/models/embeddings.js.map +13 -0
- package/dist/models/image.d.ts.map +1 -1
- package/dist/models/image.js +401 -0
- package/dist/models/image.js.map +14 -0
- package/dist/models/index.d.ts +1 -2
- package/dist/models/index.d.ts.map +1 -1
- package/dist/models/index.js +1896 -0
- package/dist/models/index.js.map +19 -0
- package/dist/models/research.d.ts.map +1 -1
- package/dist/models/research.js +341 -0
- package/dist/models/research.js.map +13 -0
- package/dist/models/speech.d.ts +61 -3
- package/dist/models/speech.d.ts.map +1 -1
- package/dist/models/speech.js +429 -0
- package/dist/models/speech.js.map +13 -0
- package/dist/models/text.d.ts +111 -3
- package/dist/models/text.d.ts.map +1 -1
- package/dist/models/text.js +1173 -0
- package/dist/models/text.js.map +14 -0
- package/dist/models/tokenization.d.ts.map +1 -1
- package/dist/models/tokenization.js +65 -0
- package/dist/models/tokenization.js.map +10 -0
- package/dist/models/transcription.d.ts.map +1 -1
- package/dist/models/transcription.js +297 -0
- package/dist/models/transcription.js.map +13 -0
- package/dist/node/index.d.ts +2 -2
- package/dist/node/index.node.js +9189 -2295
- package/dist/node/index.node.js.map +68 -30
- package/dist/plugin.d.ts +20 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/plugin.js +2937 -0
- package/dist/plugin.js.map +28 -0
- package/dist/providers/openai.d.ts.map +1 -1
- package/dist/providers/openai.js +136 -0
- package/dist/providers/openai.js.map +11 -0
- package/dist/register-routes.d.ts +2 -0
- package/dist/register-routes.d.ts.map +1 -0
- package/dist/register-routes.js +2938 -0
- package/dist/register-routes.js.map +29 -0
- package/dist/routes/cloud-billing-routes.d.ts +9 -0
- package/dist/routes/cloud-billing-routes.d.ts.map +1 -0
- package/dist/routes/cloud-billing-routes.js +764 -0
- package/dist/routes/cloud-billing-routes.js.map +15 -0
- package/dist/routes/cloud-coding-container-routes.d.ts +8 -0
- package/dist/routes/cloud-coding-container-routes.d.ts.map +1 -0
- package/dist/routes/cloud-coding-container-routes.js +214 -0
- package/dist/routes/cloud-coding-container-routes.js.map +11 -0
- package/dist/routes/cloud-compat-routes.d.ts +10 -0
- package/dist/routes/cloud-compat-routes.d.ts.map +1 -0
- package/dist/routes/cloud-compat-routes.js +495 -0
- package/dist/routes/cloud-compat-routes.js.map +15 -0
- package/dist/routes/cloud-features-routes.d.ts +9 -0
- package/dist/routes/cloud-features-routes.d.ts.map +1 -0
- package/dist/routes/cloud-features-routes.js +124 -0
- package/dist/routes/cloud-features-routes.js.map +11 -0
- package/dist/routes/cloud-provisioning.d.ts +14 -0
- package/dist/routes/cloud-provisioning.d.ts.map +1 -0
- package/dist/routes/cloud-provisioning.js +37 -0
- package/dist/routes/cloud-provisioning.js.map +10 -0
- package/dist/routes/cloud-relay-routes.d.ts +23 -0
- package/dist/routes/cloud-relay-routes.d.ts.map +1 -0
- package/dist/routes/cloud-relay-routes.js +142 -0
- package/dist/routes/cloud-relay-routes.js.map +11 -0
- package/dist/routes/cloud-routes-autonomous.d.ts +82 -0
- package/dist/routes/cloud-routes-autonomous.d.ts.map +1 -0
- package/dist/routes/cloud-routes-autonomous.js +1252 -0
- package/dist/routes/cloud-routes-autonomous.js.map +18 -0
- package/dist/routes/cloud-routes.d.ts +35 -0
- package/dist/routes/cloud-routes.d.ts.map +1 -0
- package/dist/routes/cloud-routes.js +2173 -0
- package/dist/routes/cloud-routes.js.map +23 -0
- package/dist/routes/cloud-status-routes-autonomous.d.ts +14 -0
- package/dist/routes/cloud-status-routes-autonomous.d.ts.map +1 -0
- package/dist/routes/cloud-status-routes-autonomous.js +349 -0
- package/dist/routes/cloud-status-routes-autonomous.js.map +13 -0
- package/dist/routes/cloud-status-routes.d.ts +4 -0
- package/dist/routes/cloud-status-routes.d.ts.map +1 -0
- package/dist/routes/cloud-status-routes.js +695 -0
- package/dist/routes/cloud-status-routes.js.map +15 -0
- package/dist/routes/home-remote-runner-access-url.d.ts +16 -0
- package/dist/routes/home-remote-runner-access-url.d.ts.map +1 -0
- package/dist/routes/home-remote-runner-access-url.js +91 -0
- package/dist/routes/home-remote-runner-access-url.js.map +10 -0
- package/dist/routes/travel-provider-relay-routes.d.ts +9 -0
- package/dist/routes/travel-provider-relay-routes.d.ts.map +1 -0
- package/dist/routes/travel-provider-relay-routes.js +358 -0
- package/dist/routes/travel-provider-relay-routes.js.map +14 -0
- package/dist/services/cloud-auth.d.ts +140 -5
- package/dist/services/cloud-auth.d.ts.map +1 -1
- package/dist/services/cloud-auth.js +368 -0
- package/dist/services/cloud-auth.js.map +12 -0
- package/dist/services/cloud-backup.d.ts.map +1 -1
- package/dist/services/cloud-backup.js +176 -0
- package/dist/services/cloud-backup.js.map +11 -0
- package/dist/services/cloud-bootstrap.d.ts +38 -0
- package/dist/services/cloud-bootstrap.d.ts.map +1 -0
- package/dist/services/cloud-bootstrap.js +84 -0
- package/dist/services/cloud-bootstrap.js.map +10 -0
- package/dist/services/cloud-bridge.d.ts +1 -1
- package/dist/services/cloud-bridge.d.ts.map +1 -1
- package/dist/services/cloud-bridge.js +308 -0
- package/dist/services/cloud-bridge.js.map +11 -0
- package/dist/services/cloud-container.d.ts +5 -1
- package/dist/services/cloud-container.d.ts.map +1 -1
- package/dist/services/cloud-container.js +292 -0
- package/dist/services/cloud-container.js.map +11 -0
- package/dist/services/cloud-credential-provider.d.ts +55 -0
- package/dist/services/cloud-credential-provider.d.ts.map +1 -0
- package/dist/services/cloud-credential-provider.js +190 -0
- package/dist/services/cloud-credential-provider.js.map +11 -0
- package/dist/services/cloud-managed-gateway-relay.d.ts +38 -0
- package/dist/services/cloud-managed-gateway-relay.d.ts.map +1 -0
- package/dist/services/cloud-managed-gateway-relay.js +479 -0
- package/dist/services/cloud-managed-gateway-relay.js.map +10 -0
- package/dist/services/cloud-model-registry.d.ts.map +1 -1
- package/dist/services/cloud-model-registry.js +175 -0
- package/dist/services/cloud-model-registry.js.map +10 -0
- package/dist/services/index.d.ts +3 -1
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +29 -0
- package/dist/services/index.js.map +9 -0
- package/dist/types/cloud.d.ts +42 -19
- package/dist/types/cloud.d.ts.map +1 -1
- package/dist/types/cloud.js +52 -0
- package/dist/types/cloud.js.map +10 -0
- package/dist/types/index.d.ts +1 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +24 -0
- package/dist/types/index.js.map +9 -0
- package/dist/utils/cloud-api.d.ts +2 -27
- package/dist/utils/cloud-api.d.ts.map +1 -1
- package/dist/utils/cloud-api.js +33 -0
- package/dist/utils/cloud-api.js.map +10 -0
- package/dist/utils/cloud-sdk/client.d.ts +133 -0
- package/dist/utils/cloud-sdk/client.d.ts.map +1 -0
- package/dist/utils/cloud-sdk/client.js +3693 -0
- package/dist/utils/cloud-sdk/client.js.map +13 -0
- package/dist/utils/cloud-sdk/http.d.ts +37 -0
- package/dist/utils/cloud-sdk/http.d.ts.map +1 -0
- package/dist/utils/cloud-sdk/http.js +237 -0
- package/dist/utils/cloud-sdk/http.js.map +11 -0
- package/dist/utils/cloud-sdk/index.d.ts +6 -0
- package/dist/utils/cloud-sdk/index.d.ts.map +1 -0
- package/dist/utils/cloud-sdk/index.js +29 -0
- package/dist/utils/cloud-sdk/index.js.map +9 -0
- package/dist/utils/cloud-sdk/public-routes.d.ts +5563 -0
- package/dist/utils/cloud-sdk/public-routes.d.ts.map +1 -0
- package/dist/utils/cloud-sdk/public-routes.js +3048 -0
- package/dist/utils/cloud-sdk/public-routes.js.map +10 -0
- package/dist/utils/cloud-sdk/types.cloud-api.d.ts +101 -0
- package/dist/utils/cloud-sdk/types.cloud-api.d.ts.map +1 -0
- package/dist/utils/cloud-sdk/types.cloud-api.js +2 -0
- package/dist/utils/cloud-sdk/types.cloud-api.js.map +9 -0
- package/dist/utils/cloud-sdk/types.d.ts +653 -0
- package/dist/utils/cloud-sdk/types.d.ts.map +1 -0
- package/dist/utils/cloud-sdk/types.js +29 -0
- package/dist/utils/cloud-sdk/types.js.map +10 -0
- package/dist/utils/config.d.ts +16 -3
- package/dist/utils/config.d.ts.map +1 -1
- package/dist/utils/config.js +147 -0
- package/dist/utils/config.js.map +10 -0
- package/dist/utils/events.d.ts +23 -2
- package/dist/utils/events.d.ts.map +1 -1
- package/dist/utils/events.js +45 -0
- package/dist/utils/events.js.map +10 -0
- package/dist/utils/helpers.d.ts.map +1 -1
- package/dist/utils/helpers.js +103 -0
- package/dist/utils/helpers.js.map +10 -0
- package/dist/utils/responses-output.d.ts +13 -0
- package/dist/utils/responses-output.d.ts.map +1 -0
- package/dist/utils/responses-output.js +102 -0
- package/dist/utils/responses-output.js.map +10 -0
- package/dist/utils/sdk-client.d.ts +5 -0
- package/dist/utils/sdk-client.d.ts.map +1 -0
- package/dist/utils/sdk-client.js +157 -0
- package/dist/utils/sdk-client.js.map +11 -0
- package/dist/utils/waifu-metering.d.ts +108 -0
- package/dist/utils/waifu-metering.d.ts.map +1 -0
- package/dist/utils/waifu-metering.js +166 -0
- package/dist/utils/waifu-metering.js.map +10 -0
- package/package.json +139 -21
- package/src/cloud/auth-service-types.ts +24 -0
- package/src/cloud/auth.ts +175 -0
- package/src/cloud/backup.ts +46 -0
- package/src/cloud/base-url.ts +6 -0
- package/src/cloud/bridge-client.ts +602 -0
- package/src/cloud/clack-observer.ts +189 -0
- package/src/cloud/cloud-api-key.ts +80 -0
- package/src/cloud/cloud-manager.ts +163 -0
- package/src/cloud/cloud-proxy.ts +52 -0
- package/src/cloud/cloud-wallet.ts +341 -0
- package/src/cloud/duffel-client.ts +847 -0
- package/src/cloud/index.ts +38 -0
- package/src/cloud/lifeops-schedule-sync-client.ts +245 -0
- package/src/cloud/lifeops-schedule-sync-contracts.ts +124 -0
- package/src/cloud/managed-payment-clients.ts +374 -0
- package/src/cloud/null-observer.ts +45 -0
- package/src/cloud/reconnect.ts +111 -0
- package/src/cloud/setup-observer.ts +125 -0
- package/src/cloud/validate-url.ts +187 -0
- package/src/cloud/x402-payment-handler.ts +215 -0
- package/src/cloud-providers/cloud-status.ts +75 -0
- package/src/cloud-providers/container-health.ts +68 -0
- package/src/cloud-providers/credit-balance.ts +70 -0
- package/src/cloud-providers/index.ts +3 -0
- package/src/cloud-providers/model-registry.ts +74 -0
- package/src/cloud-setup.ts +531 -0
- package/src/cloud-voice-catalog.test.ts +254 -0
- package/src/cloud-voice-catalog.ts +246 -0
- package/src/index.browser.ts +39 -0
- package/src/index.node.ts +69 -0
- package/src/index.ts +419 -0
- package/src/init.ts +39 -0
- package/src/lib/cloud-connection.ts +661 -0
- package/src/lib/cloud-secrets.ts +14 -0
- package/src/lib/config-env.ts +168 -0
- package/src/lib/config-like.ts +149 -0
- package/src/lib/credential-type-map.ts +130 -0
- package/src/lib/feature-flags.ts +26 -0
- package/src/lib/http.ts +122 -0
- package/src/lib/server-cloud-tts.ts +301 -0
- package/src/lib/state-paths.ts +28 -0
- package/src/lib/tts-debug.ts +5 -0
- package/src/models/embeddings.ts +298 -0
- package/src/models/image.ts +234 -0
- package/src/models/index.ts +16 -0
- package/src/models/research.ts +275 -0
- package/src/models/speech.ts +324 -0
- package/src/models/text.ts +1493 -0
- package/src/models/tokenization.ts +67 -0
- package/src/models/transcription.ts +101 -0
- package/src/plugin.ts +281 -0
- package/src/providers/openai.ts +16 -0
- package/src/register-routes.ts +6 -0
- package/src/routes/cloud-billing-routes.ts +744 -0
- package/src/routes/cloud-coding-container-routes.ts +198 -0
- package/src/routes/cloud-compat-routes.ts +304 -0
- package/src/routes/cloud-features-routes.ts +57 -0
- package/src/routes/cloud-provisioning.ts +37 -0
- package/src/routes/cloud-relay-routes.ts +135 -0
- package/src/routes/cloud-routes-autonomous.ts +993 -0
- package/src/routes/cloud-routes.ts +637 -0
- package/src/routes/cloud-status-routes-autonomous.ts +238 -0
- package/src/routes/cloud-status-routes.ts +73 -0
- package/src/routes/home-remote-runner-access-url.ts +83 -0
- package/src/routes/travel-provider-relay-routes.ts +193 -0
- package/src/services/cloud-auth.ts +574 -0
- package/src/services/cloud-backup.ts +208 -0
- package/src/services/cloud-bootstrap.ts +106 -0
- package/src/services/cloud-bridge.ts +386 -0
- package/src/services/cloud-container.ts +390 -0
- package/src/services/cloud-credential-provider.ts +210 -0
- package/src/services/cloud-managed-gateway-relay.ts +663 -0
- package/src/services/cloud-model-registry.ts +202 -0
- package/src/services/index.ts +17 -0
- package/{types → src/types}/cloud.ts +74 -29
- package/{types → src/types}/index.ts +25 -0
- package/src/utils/cloud-api.ts +10 -0
- package/src/utils/cloud-sdk/client.ts +774 -0
- package/src/utils/cloud-sdk/http.ts +291 -0
- package/src/utils/cloud-sdk/index.ts +23 -0
- package/src/utils/cloud-sdk/public-routes.ts +5238 -0
- package/src/utils/cloud-sdk/types.cloud-api.ts +120 -0
- package/src/utils/cloud-sdk/types.ts +760 -0
- package/src/utils/config.ts +193 -0
- package/src/utils/events.ts +65 -0
- package/src/utils/helpers.ts +107 -0
- package/src/utils/responses-output.ts +115 -0
- package/src/utils/sdk-client.ts +41 -0
- package/src/utils/waifu-metering.ts +302 -0
- package/dist/actions/check-credits.d.ts +0 -6
- package/dist/actions/check-credits.d.ts.map +0 -1
- package/dist/actions/freeze-agent.d.ts +0 -9
- package/dist/actions/freeze-agent.d.ts.map +0 -1
- package/dist/actions/index.d.ts +0 -5
- package/dist/actions/index.d.ts.map +0 -1
- package/dist/actions/provision-agent.d.ts +0 -8
- package/dist/actions/provision-agent.d.ts.map +0 -1
- package/dist/actions/resume-agent.d.ts +0 -9
- package/dist/actions/resume-agent.d.ts.map +0 -1
- package/dist/build.d.ts +0 -3
- package/dist/build.d.ts.map +0 -1
- package/dist/generated/specs/specs.d.ts +0 -55
- package/dist/generated/specs/specs.d.ts.map +0 -1
- package/dist/models/object.d.ts +0 -4
- package/dist/models/object.d.ts.map +0 -1
- package/dist/utils/forwarded-settings.d.ts +0 -8
- package/dist/utils/forwarded-settings.d.ts.map +0 -1
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/cloud/base-url.ts", "../src/cloud/validate-url.ts", "../src/cloud/auth.ts", "../src/cloud/bridge-client.ts", "../src/cloud-setup.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"/**\n * Cloud site/API URL normalizer. The implementation moved to\n * `@elizaos/shared/elizacloud/base-url` so host-layer packages can normalize\n * URLs without reverse-importing this plugin.\n */\nexport { normalizeCloudSiteUrl, resolveCloudApiBaseUrl } from \"@elizaos/shared\";\n",
|
|
6
|
+
"import dns from \"node:dns\";\nimport net from \"node:net\";\nimport { promisify } from \"node:util\";\n\nconst dnsLookupAll = promisify(dns.lookup);\n\nconst BLOCKED_IPV4_CIDRS: Array<{ base: number; mask: number }> = [\n cidrV4(\"0.0.0.0\", 8),\n cidrV4(\"10.0.0.0\", 8),\n cidrV4(\"172.16.0.0\", 12),\n cidrV4(\"192.168.0.0\", 16),\n cidrV4(\"100.64.0.0\", 10),\n cidrV4(\"127.0.0.0\", 8),\n cidrV4(\"169.254.0.0\", 16),\n cidrV4(\"192.0.0.0\", 24),\n cidrV4(\"198.18.0.0\", 15),\n cidrV4(\"192.0.2.0\", 24),\n cidrV4(\"198.51.100.0\", 24),\n cidrV4(\"203.0.113.0\", 24),\n cidrV4(\"224.0.0.0\", 4),\n cidrV4(\"240.0.0.0\", 4),\n];\n\nfunction normalizeHostLike(value: string): string {\n return value\n .trim()\n .toLowerCase()\n .replace(/^\\[|\\]$/g, \"\");\n}\n\nfunction decodeIpv6MappedHex(mapped: string): string | null {\n const parts = mapped.split(\":\");\n if (parts.length < 1 || parts.length > 2) return null;\n\n const parsed = parts.map((part) => {\n if (!/^[0-9a-f]{1,4}$/i.test(part)) return Number.NaN;\n return Number.parseInt(part, 16);\n });\n if (parsed.some((value) => !Number.isFinite(value))) return null;\n\n const [hi, lo] = parsed.length === 1 ? [0, parsed[0]] : parsed;\n const octets = [hi >> 8, hi & 0xff, lo >> 8, lo & 0xff];\n return octets.join(\".\");\n}\n\nfunction canonicalizeIpv6(ip: string): string | null {\n try {\n return new URL(`http://[${ip}]/`).hostname.replace(/^\\[|\\]$/g, \"\");\n } catch {\n return null;\n }\n}\n\nfunction normalizeIpForPolicy(ip: string): string {\n const base = normalizeHostLike(ip).split(\"%\")[0];\n if (!base) return base;\n\n let normalized = base;\n if (net.isIP(normalized) === 6) {\n normalized = canonicalizeIpv6(normalized) ?? normalized;\n }\n\n let mapped: string | null = null;\n if (normalized.startsWith(\"::ffff:\")) {\n mapped = normalized.slice(\"::ffff:\".length);\n } else if (normalized.startsWith(\"0:0:0:0:0:ffff:\")) {\n mapped = normalized.slice(\"0:0:0:0:0:ffff:\".length);\n }\n if (!mapped) return normalized;\n\n if (net.isIP(mapped) === 4) return mapped;\n return decodeIpv6MappedHex(mapped) ?? normalized;\n}\n\nfunction cidrV4(base: string, prefix: number): { base: number; mask: number } {\n const parsed = parseIpv4ToInt(base);\n if (parsed === null) {\n throw new Error(`Invalid CIDR base IPv4 address: ${base}`);\n }\n const shift = 32 - prefix;\n const mask = shift === 32 ? 0 : (0xffffffff << shift) >>> 0;\n return { base: parsed & mask, mask };\n}\n\nfunction parseIpv4ToInt(ip: string): number | null {\n const parts = ip.split(\".\");\n if (parts.length !== 4) return null;\n\n let value = 0;\n for (const part of parts) {\n if (!/^\\d{1,3}$/.test(part)) return null;\n const octet = Number.parseInt(part, 10);\n if (!Number.isInteger(octet) || octet < 0 || octet > 255) return null;\n value = (value << 8) | octet;\n }\n\n return value >>> 0;\n}\n\nfunction isBlockedIpv4(ip: string): boolean {\n const asInt = parseIpv4ToInt(ip);\n if (asInt === null) return true;\n return BLOCKED_IPV4_CIDRS.some((cidr) => (asInt & cidr.mask) === cidr.base);\n}\n\nfunction isBlockedIpv6(ip: string): boolean {\n const normalized = ip.toLowerCase();\n return (\n normalized === \"::\" ||\n normalized === \"::1\" ||\n /^fe[89ab][0-9a-f]:/.test(normalized) ||\n /^f[cd][0-9a-f]{2}:/i.test(normalized) ||\n normalized.startsWith(\"ff\")\n );\n}\n\nfunction isBlockedIp(ip: string): boolean {\n const normalized = normalizeIpForPolicy(ip);\n const family = net.isIP(normalized);\n if (family === 4) return isBlockedIpv4(normalized);\n if (family === 6) return isBlockedIpv6(normalized);\n return false;\n}\n\nexport async function validateCloudBaseUrl(\n rawUrl: string,\n): Promise<string | null> {\n let parsed: URL;\n try {\n parsed = new URL(rawUrl);\n } catch {\n return `Invalid cloud base URL: \"${rawUrl}\"`;\n }\n\n if (parsed.protocol !== \"https:\") {\n return `Cloud base URL must use HTTPS, got \"${parsed.protocol}\" in \"${rawUrl}\"`;\n }\n\n const hostname = normalizeHostLike(parsed.hostname);\n if (!hostname) {\n return `Invalid cloud base URL: \"${rawUrl}\"`;\n }\n\n if (\n hostname === \"localhost\" ||\n hostname.endsWith(\".localhost\") ||\n hostname.endsWith(\".local\")\n ) {\n return `Cloud base URL \"${rawUrl}\" points to a blocked local hostname.`;\n }\n\n // Dev-mode bypass: skip IP-range blocking but keep URL format checks above.\n const elizaDev = process.env.ELIZA_DEV?.trim().toLowerCase();\n if (\n process.env.NODE_ENV === \"development\" ||\n elizaDev === \"1\" ||\n elizaDev === \"true\" ||\n elizaDev === \"yes\"\n ) {\n return null;\n }\n\n if (isBlockedIp(hostname)) {\n return `Cloud base URL \"${rawUrl}\" points to a blocked address.`;\n }\n\n try {\n const results = await dnsLookupAll(hostname, { all: true });\n const addresses = Array.isArray(results) ? results : [results];\n for (const entry of addresses) {\n const ip =\n typeof entry === \"string\"\n ? entry\n : (entry as { address: string }).address;\n if (isBlockedIp(ip)) {\n return (\n `Cloud base URL \"${rawUrl}\" resolves to ${ip}, ` +\n \"which is a blocked internal/metadata address.\"\n );\n }\n }\n } catch {\n return `Cloud base URL \"${rawUrl}\" could not be resolved via DNS.`;\n }\n\n return null;\n}\n",
|
|
7
|
+
"/**\n * Eliza Cloud login flow — reuses the CLI auth session pattern:\n * create session, open browser, poll until authenticated, return API key.\n */\n\nimport crypto from \"node:crypto\";\nimport { logger } from \"@elizaos/core\";\nimport { normalizeCloudSiteUrl } from \"./base-url.js\";\nimport { validateCloudBaseUrl } from \"./validate-url.js\";\n\nexport interface CloudLoginResult {\n apiKey: string;\n keyPrefix: string;\n expiresAt: string | null;\n}\n\nexport interface CloudLoginOptions {\n baseUrl?: string;\n timeoutMs?: number;\n requestTimeoutMs?: number;\n pollIntervalMs?: number;\n onBrowserUrl?: (url: string) => void;\n onPollStatus?: (status: string) => void;\n}\n\nconst DEFAULT_CLOUD_REQUEST_TIMEOUT_MS = 10_000;\n\nfunction isRedirectResponse(response: Response): boolean {\n return response.status >= 300 && response.status < 400;\n}\n\nfunction isTimeoutError(err: unknown): boolean {\n if (!(err instanceof Error)) return false;\n if (err.name === \"TimeoutError\" || err.name === \"AbortError\") return true;\n const msg = err.message.toLowerCase();\n return msg.includes(\"timed out\") || msg.includes(\"timeout\");\n}\n\nasync function fetchWithTimeout(\n input: string,\n init: RequestInit,\n timeoutMs: number,\n): Promise<Response> {\n return fetch(input, {\n ...init,\n redirect: \"manual\",\n signal: AbortSignal.timeout(timeoutMs),\n });\n}\n\nexport async function cloudLogin(\n options: CloudLoginOptions = {},\n): Promise<CloudLoginResult> {\n const baseUrl = normalizeCloudSiteUrl(options.baseUrl);\n const urlError = await validateCloudBaseUrl(baseUrl);\n if (urlError) {\n throw new Error(urlError);\n }\n const timeoutMs = options.timeoutMs ?? 300_000;\n const requestTimeoutMs =\n options.requestTimeoutMs ?? DEFAULT_CLOUD_REQUEST_TIMEOUT_MS;\n const pollIntervalMs = options.pollIntervalMs ?? 2_000;\n const sessionId = crypto.randomUUID();\n\n logger.info(\"[cloud-auth] Creating auth session...\");\n\n let createResponse: Response;\n try {\n createResponse = await fetchWithTimeout(\n `${baseUrl}/api/auth/cli-session`,\n {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ sessionId }),\n },\n requestTimeoutMs,\n );\n } catch (err) {\n if (isTimeoutError(err)) {\n throw new Error(\n `Cloud login request timed out while creating session (>${requestTimeoutMs}ms).`,\n );\n }\n throw new Error(`Failed to create auth session: ${String(err)}`);\n }\n\n if (!createResponse.ok) {\n if (isRedirectResponse(createResponse)) {\n throw new Error(\n \"Cloud login request was redirected; redirects are not allowed.\",\n );\n }\n const errorText = await createResponse.text();\n throw new Error(\n `Failed to create auth session (HTTP ${createResponse.status}): ${errorText}`,\n );\n }\n\n const browserUrl = `${baseUrl}/auth/cli-login?session=${encodeURIComponent(sessionId)}`;\n logger.info(`[cloud-auth] Browser URL: ${browserUrl}`);\n options.onBrowserUrl?.(browserUrl);\n\n const deadline = Date.now() + timeoutMs;\n\n while (Date.now() < deadline) {\n const remainingBeforeSleep = deadline - Date.now();\n if (remainingBeforeSleep <= 0) break;\n await new Promise((resolve) =>\n setTimeout(resolve, Math.min(pollIntervalMs, remainingBeforeSleep)),\n );\n\n const remaining = deadline - Date.now();\n if (remaining <= 0) break;\n\n let pollResponse: Response;\n try {\n pollResponse = await fetchWithTimeout(\n `${baseUrl}/api/auth/cli-session/${encodeURIComponent(sessionId)}`,\n {},\n Math.min(requestTimeoutMs, remaining),\n );\n } catch (err) {\n if (isTimeoutError(err)) {\n if (remaining <= requestTimeoutMs) {\n break;\n }\n throw new Error(\n `Cloud login polling request timed out (>${Math.min(requestTimeoutMs, remaining)}ms).`,\n );\n }\n throw new Error(`Cloud login polling failed: ${String(err)}`);\n }\n\n if (!pollResponse.ok) {\n if (isRedirectResponse(pollResponse)) {\n throw new Error(\n \"Cloud login polling request was redirected; redirects are not allowed.\",\n );\n }\n if (pollResponse.status === 404) {\n throw new Error(\"Auth session expired or not found. Please try again.\");\n }\n options.onPollStatus?.(\"error\");\n continue;\n }\n\n const data = (await pollResponse.json()) as {\n status: string;\n apiKey?: string;\n keyPrefix?: string;\n expiresAt?: string;\n };\n\n options.onPollStatus?.(data.status);\n\n if (data.status === \"authenticated\" && data.apiKey) {\n logger.info(\"[cloud-auth] Authentication complete\");\n return {\n apiKey: data.apiKey,\n keyPrefix: data.keyPrefix ?? \"\",\n expiresAt: data.expiresAt ?? null,\n };\n }\n\n if (data.status === \"authenticated\" && !data.apiKey) {\n throw new Error(\n \"Auth session was completed but the API key was already retrieved. Please try logging in again.\",\n );\n }\n }\n\n throw new Error(\n `Cloud login timed out. The browser login was not completed within ${Math.round(timeoutMs / 1000)} seconds.`,\n );\n}\n",
|
|
8
|
+
"/**\n * HTTP client for the Eliza Cloud Eliza Sandbox API.\n */\nimport { normalizeCloudSiteUrl } from \"./base-url.js\";\n\nexport type CloudChainType = \"evm\" | \"solana\";\nexport type CloudWalletProvider = \"privy\" | \"steward\";\n\nexport interface CloudWalletDescriptor {\n agentWalletId: string;\n walletAddress: string;\n walletProvider: CloudWalletProvider;\n chainType: CloudChainType;\n balance?: string | number;\n}\n\ninterface CloudWalletAddresses {\n evm?: string | null;\n solana?: string | null;\n}\n\nexport interface SignedRpcEnvelope {\n clientAddress: string;\n payload: {\n method: string;\n params: unknown[];\n };\n nonce: string;\n timestamp: number;\n signature: string;\n correlationId?: string;\n}\n\nexport interface RpcResult {\n [key: string]: unknown;\n}\n\nexport class CloudBridgeError extends Error {\n constructor(\n message: string,\n public readonly status?: number,\n public readonly body?: string,\n ) {\n super(message);\n this.name = \"CloudBridgeError\";\n }\n}\n\nexport class SignatureInvalidError extends CloudBridgeError {\n constructor(message: string, body?: string) {\n super(message, 401, body);\n this.name = \"SignatureInvalidError\";\n }\n}\n\nexport class NonceReplayError extends CloudBridgeError {\n constructor(message: string, body?: string) {\n super(message, 409, body);\n this.name = \"NonceReplayError\";\n }\n}\n\nexport class SessionExpiredError extends CloudBridgeError {\n constructor(message: string, body?: string) {\n super(message, 410, body);\n this.name = \"SessionExpiredError\";\n }\n}\n\nexport class CloudUnavailableError extends CloudBridgeError {\n constructor(message: string, status: number, body?: string) {\n super(message, status, body);\n this.name = \"CloudUnavailableError\";\n }\n}\n\nexport interface CloudAgent {\n id: string;\n agentName: string;\n status: string;\n databaseStatus: string;\n bridgeUrl?: string;\n lastBackupAt?: string;\n lastHeartbeatAt?: string;\n errorMessage?: string;\n errorCount?: number;\n createdAt: string;\n updatedAt: string;\n}\n\nexport interface CloudAgentCreateParams {\n agentName: string;\n agentConfig?: Record<string, unknown>;\n environmentVars?: Record<string, string>;\n}\n\nexport interface ProvisionInfo {\n id: string;\n agentName: string;\n status: string;\n bridgeUrl?: string;\n healthUrl?: string;\n}\n\nexport interface BackupInfo {\n id: string;\n snapshotType: string;\n sizeBytes: number | null;\n createdAt: string;\n}\n\nexport type ChatChannelType =\n | \"DM\"\n | \"GROUP\"\n | \"VOICE_DM\"\n | \"VOICE_GROUP\"\n | \"API\";\n\ninterface ApiResponse<T> {\n success: boolean;\n data?: T;\n error?: string;\n}\n\nfunction formatApiErrorBody(text: string): string | null {\n if (!text) return null;\n try {\n const parsed = JSON.parse(text) as {\n error?: unknown;\n details?: Array<{ message?: unknown }>;\n };\n const baseError =\n typeof parsed.error === \"string\" && parsed.error.trim().length > 0\n ? parsed.error.trim()\n : null;\n const details = Array.isArray(parsed.details)\n ? parsed.details\n .map((detail) =>\n typeof detail?.message === \"string\" ? detail.message.trim() : \"\",\n )\n .filter((message) => message.length > 0)\n : [];\n if (baseError && details.length > 0) {\n return `${baseError}: ${details.join(\"; \")}`;\n }\n if (baseError) return baseError;\n } catch {\n /* plain text */\n }\n\n return text.slice(0, 200) || null;\n}\n\nfunction isRedirectResponse(response: Response): boolean {\n return response.status >= 300 && response.status < 400;\n}\n\nfunction normalizeChainAddress(\n addresses: CloudWalletAddresses | null | undefined,\n chain: CloudChainType,\n): string | null {\n const value = addresses?.[chain];\n if (typeof value !== \"string\") return null;\n const trimmed = value.trim();\n return trimmed.length > 0 ? trimmed : null;\n}\n\nfunction looksLikeChainAddress(\n address: string,\n chain: CloudChainType,\n): boolean {\n if (chain === \"evm\") {\n return /^0x[a-fA-F0-9]{40}$/.test(address);\n }\n\n return /^[1-9A-HJ-NP-Za-km-z]{32,44}$/.test(address);\n}\n\nfunction resolveRequestedWalletAddress(\n data: {\n walletAddress: string | null;\n walletAddresses?: CloudWalletAddresses | null;\n },\n chain: CloudChainType,\n): string | null {\n const explicit = normalizeChainAddress(data.walletAddresses, chain);\n if (explicit) return explicit;\n if (typeof data.walletAddress !== \"string\") return null;\n\n const trimmed = data.walletAddress.trim();\n if (!trimmed) return null;\n return looksLikeChainAddress(trimmed, chain) ? trimmed : null;\n}\n\nexport class ElizaCloudClient {\n private baseUrl: string;\n private apiKey: string;\n\n constructor(baseUrl: string, apiKey: string) {\n this.baseUrl = normalizeCloudSiteUrl(baseUrl);\n this.apiKey = apiKey;\n }\n\n async listAgents(): Promise<CloudAgent[]> {\n const res = await this.request<CloudAgent[]>(\"GET\", \"/api/v1/eliza/agents\");\n return res.data ?? [];\n }\n\n async createAgent(params: CloudAgentCreateParams): Promise<CloudAgent> {\n const res = await this.request<CloudAgent>(\n \"POST\",\n \"/api/v1/eliza/agents\",\n params,\n );\n if (!res.success || !res.data)\n throw new Error(res.error ?? \"Failed to create cloud agent\");\n return res.data;\n }\n\n async getAgent(agentId: string): Promise<CloudAgent> {\n const res = await this.request<CloudAgent>(\n \"GET\",\n `/api/v1/eliza/agents/${agentId}`,\n );\n if (!res.success || !res.data)\n throw new Error(res.error ?? \"Agent not found\");\n return res.data;\n }\n\n async deleteAgent(agentId: string): Promise<void> {\n const res = await this.request<void>(\n \"DELETE\",\n `/api/v1/eliza/agents/${agentId}`,\n );\n if (!res.success) throw new Error(res.error ?? \"Failed to delete agent\");\n }\n\n async provision(agentId: string): Promise<ProvisionInfo> {\n const res = await this.request<ProvisionInfo>(\n \"POST\",\n `/api/v1/eliza/agents/${agentId}/provision`,\n );\n if (!res.success || !res.data)\n throw new Error(res.error ?? \"Failed to provision sandbox\");\n return res.data;\n }\n\n async sendMessage(\n agentId: string,\n text: string,\n roomId = \"web-chat\",\n channelType: ChatChannelType = \"DM\",\n ): Promise<string> {\n const url = `${this.baseUrl}/api/v1/eliza/agents/${agentId}/bridge`;\n const response = await fetch(url, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\", \"X-Api-Key\": this.apiKey },\n body: JSON.stringify({\n jsonrpc: \"2.0\",\n id: crypto.randomUUID(),\n method: \"message.send\",\n params: { text, roomId, channelType },\n }),\n redirect: \"manual\",\n signal: AbortSignal.timeout(60_000),\n });\n\n if (isRedirectResponse(response)) {\n throw new Error(\n \"Bridge request was redirected; redirects are not allowed\",\n );\n }\n\n if (!response.ok) {\n const errorText = await response.text().catch(() => \"\");\n throw new Error(\n `Bridge request failed: HTTP ${response.status} ${errorText.slice(0, 200)}`,\n );\n }\n\n const rpc = (await response.json()) as {\n result?: { text?: string };\n error?: { code: number; message: string };\n };\n\n if (rpc.error) throw new Error(rpc.error.message);\n return rpc.result?.text ?? \"(no response)\";\n }\n\n async *sendMessageStream(\n agentId: string,\n text: string,\n roomId = \"web-chat\",\n channelType: ChatChannelType = \"DM\",\n ): AsyncGenerator<{ type: string; data: Record<string, unknown> }> {\n const url = `${this.baseUrl}/api/v1/eliza/agents/${agentId}/stream`;\n const response = await fetch(url, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\", \"X-Api-Key\": this.apiKey },\n body: JSON.stringify({\n jsonrpc: \"2.0\",\n id: crypto.randomUUID(),\n method: \"message.send\",\n params: { text, roomId, channelType },\n }),\n redirect: \"manual\",\n });\n\n if (isRedirectResponse(response)) {\n throw new Error(\n \"Stream request was redirected; redirects are not allowed\",\n );\n }\n\n if (!response.ok || !response.body) {\n throw new Error(`Stream request failed: HTTP ${response.status}`);\n }\n\n const reader = response.body.getReader();\n const decoder = new TextDecoder();\n let buffer = \"\";\n\n for (;;) {\n const { done, value } = await reader.read();\n if (done) break;\n\n buffer += decoder.decode(value, { stream: true });\n const parts = buffer.split(\"\\n\\n\");\n buffer = parts.pop() ?? \"\";\n\n for (const part of parts) {\n if (!part.trim()) continue;\n let eventType = \"message\";\n let eventData = \"\";\n\n for (const line of part.split(\"\\n\")) {\n if (line.startsWith(\"event: \")) eventType = line.slice(7).trim();\n else if (line.startsWith(\"data: \"))\n eventData += (eventData ? \"\\n\" : \"\") + line.slice(6);\n }\n\n if (eventData) {\n let data: Record<string, unknown>;\n try {\n data = JSON.parse(eventData) as Record<string, unknown>;\n } catch {\n continue;\n }\n yield { type: eventType, data };\n }\n }\n }\n }\n\n async snapshot(agentId: string): Promise<BackupInfo> {\n const res = await this.request<BackupInfo>(\n \"POST\",\n `/api/v1/eliza/agents/${agentId}/snapshot`,\n );\n if (!res.success || !res.data)\n throw new Error(res.error ?? \"Snapshot failed\");\n return res.data;\n }\n\n async listBackups(agentId: string): Promise<BackupInfo[]> {\n const res = await this.request<BackupInfo[]>(\n \"GET\",\n `/api/v1/eliza/agents/${agentId}/backups`,\n );\n return res.data ?? [];\n }\n\n async restore(agentId: string, backupId?: string): Promise<void> {\n const res = await this.request<void>(\n \"POST\",\n `/api/v1/eliza/agents/${agentId}/restore`,\n backupId ? { backupId } : {},\n );\n if (!res.success) throw new Error(res.error ?? \"Restore failed\");\n }\n\n async heartbeat(agentId: string): Promise<boolean> {\n const url = `${this.baseUrl}/api/v1/eliza/agents/${agentId}/bridge`;\n try {\n const response = await fetch(url, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"X-Api-Key\": this.apiKey,\n },\n body: JSON.stringify({ jsonrpc: \"2.0\", method: \"heartbeat\" }),\n redirect: \"manual\",\n signal: AbortSignal.timeout(10_000),\n });\n if (isRedirectResponse(response)) return false;\n return response.ok;\n } catch {\n return false;\n }\n }\n\n /**\n * Fetch the cloud-side wallet descriptor for an agent.\n * Uses the standard API-key auth (X-Api-Key).\n */\n async getAgentWallet(\n agentId: string,\n chain: CloudChainType,\n ): Promise<CloudWalletDescriptor> {\n const res = await this.request<{\n agentId?: string;\n walletAddress: string | null;\n walletAddresses?: CloudWalletAddresses | null;\n walletProvider: CloudWalletProvider | null;\n walletStatus?: string;\n balance?: string | number | null;\n chain?: string;\n }>(\n \"GET\",\n `/api/v1/eliza/agents/${encodeURIComponent(agentId)}/wallet?chain=${encodeURIComponent(chain)}`,\n );\n\n if (!res.success || !res.data) {\n throw new CloudBridgeError(res.error ?? \"Failed to fetch agent wallet\");\n }\n\n const data = res.data;\n const walletAddress = resolveRequestedWalletAddress(data, chain);\n if (!walletAddress || !data.walletProvider) {\n throw new CloudBridgeError(\n `Agent has no cloud ${chain} wallet provisioned`,\n );\n }\n\n return {\n agentWalletId: data.agentId ?? agentId,\n walletAddress,\n walletProvider: data.walletProvider,\n chainType: chain,\n balance: data.balance ?? undefined,\n };\n }\n\n /**\n * Provision a cloud-custodied server wallet tied to a local client address.\n * Idempotent server-side: returns the existing wallet if one already exists\n * for the (user, clientAddress, chain) tuple.\n */\n async provisionWallet(input: {\n chainType: CloudChainType;\n clientAddress: string;\n }): Promise<{\n walletId: string;\n address: string;\n chainType: CloudChainType;\n provider: CloudWalletProvider;\n }> {\n const res = await this.request<{\n id: string;\n address: string;\n chainType: CloudChainType;\n clientAddress: string;\n provider?: CloudWalletProvider;\n }>(\"POST\", \"/api/v1/user/wallets/provision\", input);\n\n if (!res.success || !res.data) {\n throw new CloudBridgeError(res.error ?? \"Failed to provision wallet\");\n }\n\n return {\n walletId: res.data.id,\n address: res.data.address,\n chainType: res.data.chainType,\n provider: res.data.provider ?? \"privy\",\n };\n }\n\n /**\n * Execute a signed RPC envelope through the cloud custodial signer.\n *\n * Auth: body-embedded wallet signature — we MUST NOT send X-Api-Key/Bearer\n * headers here. The cloud verifies the signature against the\n * agentServerWallets.client_address registered at provision time.\n *\n * Error mapping:\n * 401 → SignatureInvalidError\n * 409 → NonceReplayError\n * 410 → SessionExpiredError\n * 5xx → CloudUnavailableError\n */\n async executeRpc(envelope: SignedRpcEnvelope): Promise<RpcResult> {\n const { correlationId, ...body } = envelope;\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n };\n if (correlationId) {\n headers[\"X-Correlation-Id\"] = correlationId;\n }\n\n let response: Response;\n try {\n response = await fetch(`${this.baseUrl}/api/v1/user/wallets/rpc`, {\n method: \"POST\",\n headers,\n body: JSON.stringify(body),\n redirect: \"manual\",\n signal: AbortSignal.timeout(60_000),\n });\n } catch (err) {\n throw new CloudUnavailableError(\n `Cloud RPC network error: ${(err as Error).message}`,\n 0,\n );\n }\n\n if (isRedirectResponse(response)) {\n throw new CloudBridgeError(\n \"Cloud RPC request was redirected; redirects are not allowed\",\n response.status,\n );\n }\n\n const text = await response.text().catch(() => \"\");\n\n if (response.ok) {\n try {\n const parsed = JSON.parse(text) as ApiResponse<RpcResult>;\n if (!parsed.success || parsed.data === undefined) {\n throw new CloudBridgeError(\n parsed.error ?? \"Cloud RPC returned no data\",\n response.status,\n text,\n );\n }\n return parsed.data;\n } catch (err) {\n if (err instanceof CloudBridgeError) throw err;\n throw new CloudBridgeError(\n `Cloud RPC returned malformed JSON: ${(err as Error).message}`,\n response.status,\n text,\n );\n }\n }\n\n let errMessage = `HTTP ${response.status}`;\n try {\n const parsed = JSON.parse(text) as { error?: string };\n if (parsed.error) errMessage = parsed.error;\n } catch {\n if (text) errMessage = text.slice(0, 200);\n }\n\n if (response.status === 401) {\n throw new SignatureInvalidError(errMessage, text);\n }\n if (response.status === 409) {\n throw new NonceReplayError(errMessage, text);\n }\n if (response.status === 410) {\n throw new SessionExpiredError(errMessage, text);\n }\n if (response.status >= 500) {\n throw new CloudUnavailableError(errMessage, response.status, text);\n }\n throw new CloudBridgeError(errMessage, response.status, text);\n }\n\n private async request<T>(\n method: string,\n path: string,\n body?: unknown,\n ): Promise<ApiResponse<T>> {\n const headers: Record<string, string> = { \"X-Api-Key\": this.apiKey };\n if (body !== undefined) headers[\"Content-Type\"] = \"application/json\";\n\n const response = await fetch(`${this.baseUrl}${path}`, {\n method,\n headers,\n body: body !== undefined ? JSON.stringify(body) : undefined,\n redirect: \"manual\",\n signal: AbortSignal.timeout(30_000),\n });\n\n if (isRedirectResponse(response)) {\n return {\n success: false,\n error: \"Cloud API request was redirected; redirects are not allowed\",\n };\n }\n\n if (!response.ok) {\n const text = await response.text().catch(() => \"\");\n return {\n success: false,\n error: formatApiErrorBody(text) ?? `HTTP ${response.status}`,\n };\n }\n\n return (await response.json()) as ApiResponse<T>;\n }\n}\n",
|
|
9
|
+
"/**\n * Cloud setup flow for Eliza Cloud integration.\n *\n * Handles availability check → browser-based auth → agent provisioning\n * during `runFirstTimeSetup()`. Transport-agnostic: every user-visible\n * event and every interactive prompt is funneled through a\n * `CloudSetupObserver`. CLI callers wrap their clack instance in\n * `ClackObserver`; web/desktop callers provide an event-bridge observer.\n *\n * @module cloud-setup\n */\n\nimport { logger } from \"@elizaos/core\";\nimport type { StylePreset } from \"@elizaos/core\";\nimport { type CloudLoginResult, cloudLogin } from \"./cloud/auth.js\";\nimport { normalizeCloudSiteUrl } from \"./cloud/base-url.js\";\nimport {\n type CloudAgentCreateParams,\n ElizaCloudClient,\n} from \"./cloud/bridge-client.js\";\nimport type { CloudSetupObserver } from \"./cloud/setup-observer.js\";\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\n/** Result of a successful cloud setup flow. */\nexport interface CloudSetupResult {\n apiKey: string;\n agentId: string | undefined;\n baseUrl: string;\n bridgeUrl?: string;\n}\n\n/**\n * Outcome of the agent-provisioning step. Distinguishes a fully-running\n * agent from one that timed out mid-provisioning so callers do not treat\n * the timeout path as a success.\n */\ntype ProvisionOutcome =\n | { kind: \"running\"; agentId: string; bridgeUrl?: string }\n | { kind: \"pending-after-timeout\"; agentId: string }\n | null;\n\n// ---------------------------------------------------------------------------\n// Constants\n// ---------------------------------------------------------------------------\n\nconst DEFAULT_CLOUD_BASE_URL = \"https://www.elizacloud.ai\";\nconst PROVISION_TIMEOUT_MS = 120_000; // 2 minutes\nconst PROVISION_POLL_INTERVAL_MS = 3_000;\n\n// ---------------------------------------------------------------------------\n// Availability check\n// ---------------------------------------------------------------------------\n\n/**\n * Quick pre-flight check: is Eliza Cloud accepting new agents?\n * Returns null if available, or an error message string if not.\n */\nexport async function checkCloudAvailability(\n baseUrl: string,\n): Promise<string | null> {\n try {\n const url = `${normalizeCloudSiteUrl(baseUrl)}/api/compat/availability`;\n const res = await fetch(url, {\n method: \"GET\",\n headers: { Accept: \"application/json\" },\n signal: AbortSignal.timeout(10_000),\n });\n\n if (!res.ok) {\n return `Cloud returned HTTP ${res.status}. It may be temporarily unavailable.`;\n }\n\n const body = (await res.json()) as {\n success?: boolean;\n data?: { acceptingNewAgents?: boolean; availableSlots?: number };\n };\n\n if (!body.success || !body.data?.acceptingNewAgents) {\n return \"Eliza Cloud is currently at capacity. Try again later or run locally.\";\n }\n\n return null; // Available!\n } catch (err) {\n const msg = String(err);\n if (msg.includes(\"timed out\") || msg.includes(\"timeout\")) {\n return \"Could not reach Eliza Cloud (request timed out). Check your internet connection.\";\n }\n return `Could not reach Eliza Cloud: ${msg}`;\n }\n}\n\n// ---------------------------------------------------------------------------\n// Cloud auth wrapper\n// ---------------------------------------------------------------------------\n\n/**\n * Run the Eliza Cloud browser-based login, surfacing every transition\n * through the observer. Returns the API key/result or null on failure.\n */\nasync function runCloudAuth(\n observer: CloudSetupObserver,\n baseUrl: string,\n): Promise<CloudLoginResult | null> {\n try {\n const result = await cloudLogin({\n baseUrl,\n timeoutMs: 300_000, // 5 minutes\n onBrowserUrl: (url: string) => {\n observer.onAuthStart(url);\n\n // Try to open the browser. Failure is surfaced through the\n // observer instead of being swallowed at debug-level — desktop /\n // web setup wrappers need to render an inline \"couldn't open\n // browser\" affordance.\n openBrowser(url).catch((err) => {\n const error = err instanceof Error ? err : new Error(String(err));\n observer.onAuthBrowserOpenFailed(url, error);\n });\n },\n onPollStatus: (status: string) => {\n observer.onAuthPollStatus(status);\n },\n });\n\n observer.onAuthSuccess();\n return result;\n } catch (err) {\n observer.onAuthFailure(describeCloudAuthError(err));\n return null;\n }\n}\n\n/**\n * Translate the various error categories `cloudLogin` can throw into a\n * single user-facing line. The categories are derived from the strings\n * `cloud/auth.ts` and `cloud/validate-url.ts` already produce — we don't\n * invent new error types, we just steer them into the right bucket.\n */\nfunction describeCloudAuthError(err: unknown): string {\n const raw = err instanceof Error ? err.message : String(err);\n const msg = raw.toLowerCase();\n\n // Overall 5-minute browser timeout from cloudLogin.\n if (\n msg.includes(\"login timed out\") ||\n msg.includes(\"not completed within\")\n ) {\n return \"Cloud sign-in timed out after 5 minutes. Try again or run locally.\";\n }\n\n // validateCloudBaseUrl rejections (HTTPS-only, blocked host, DNS, …).\n if (\n msg.includes(\"invalid cloud base url\") ||\n msg.includes(\"cloud base url\") ||\n msg.includes(\"could not be resolved via dns\")\n ) {\n return `Cloud sign-in failed: ${raw}`;\n }\n\n // Per-request timeouts (session create / polling) and any fetch network\n // failure from `cloudLogin`.\n if (\n msg.includes(\"timed out\") ||\n msg.includes(\"failed to create auth session\") ||\n msg.includes(\"polling failed\") ||\n msg.includes(\"polling request timed out\")\n ) {\n return \"Couldn't reach Eliza Cloud. Check your connection or run locally.\";\n }\n\n // Fallback: surface the underlying message verbatim.\n return `Cloud sign-in failed: ${raw}`;\n}\n\n// ---------------------------------------------------------------------------\n// Agent provisioning\n// ---------------------------------------------------------------------------\n\n/**\n * Create and provision a cloud agent, polling until it's running.\n *\n * Returns a discriminated outcome:\n * - `{ kind: \"running\", agentId, bridgeUrl? }` — agent reached a\n * terminal \"up\" state.\n * - `{ kind: \"pending-after-timeout\", agentId }` — agent was created\n * but never reached a running/failed terminal status before\n * `PROVISION_TIMEOUT_MS`. The caller is expected to surface the\n * timeout to the user; we don't pretend it succeeded.\n * - `null` — agent creation failed outright, or provisioning failed\n * with an `error`/`failed` status, or the polling loop hit a\n * terminal auth error (401/403). The caller falls back.\n */\nasync function provisionCloudAgent(\n observer: CloudSetupObserver,\n client: ElizaCloudClient,\n agentName: string,\n preset?: StylePreset,\n): Promise<ProvisionOutcome> {\n observer.onProvisionStart(agentName);\n\n let agentId: string;\n let initialStatus: string;\n try {\n const agentConfig: Record<string, unknown> = {};\n if (preset) {\n agentConfig.bio = preset.bio;\n agentConfig.system = preset.system;\n agentConfig.style = preset.style;\n agentConfig.adjectives = preset.adjectives;\n agentConfig.topics = preset.topics;\n agentConfig.postExamples = preset.postExamples;\n agentConfig.messageExamples = preset.messageExamples;\n }\n\n const params: CloudAgentCreateParams = {\n agentName,\n agentConfig,\n };\n\n const agent = await client.createAgent(params);\n agentId = agent.id;\n initialStatus = agent.status;\n } catch (err) {\n observer.onProvisionFailure(`Failed to create cloud agent: ${String(err)}`);\n return null;\n }\n\n observer.onProvisionStatus(\"created\");\n\n // Poll for terminal status. Order: poll first (terminal-on-first-read\n // skips the wasted sleep), then sleep at the END of each iteration if\n // the loop has time remaining.\n const deadline = Date.now() + PROVISION_TIMEOUT_MS;\n let lastStatus = initialStatus;\n\n while (Date.now() < deadline) {\n let current: Awaited<ReturnType<ElizaCloudClient[\"getAgent\"]>> | null;\n try {\n current = await client.getAgent(agentId);\n } catch (pollErr) {\n const classification = classifyPollError(pollErr);\n if (classification === \"auth\") {\n observer.onProvisionFailure(\n `Cloud rejected the API key (last status: ${lastStatus}). Please sign in again.`,\n );\n return null;\n }\n if (classification === \"transient\") {\n // 5xx / network: keep trying, but at warn level so a sustained\n // outage is visible in logs (not silently buried at debug).\n logger.warn(\n `[cloud-setup] Transient poll error, will retry: ${String(pollErr)}`,\n );\n current = null;\n } else {\n // Terminal but not auth — propagate and stop the flow.\n observer.onProvisionFailure(`Provisioning poll failed: ${String(pollErr)}`);\n return null;\n }\n }\n\n if (current) {\n lastStatus = current.status;\n switch (lastStatus) {\n case \"running\":\n case \"completed\":\n observer.onProvisionSuccess({\n agentId,\n bridgeUrl: current.bridgeUrl,\n });\n return {\n kind: \"running\",\n agentId,\n bridgeUrl: current.bridgeUrl,\n };\n\n case \"failed\":\n case \"error\":\n observer.onProvisionFailure(\n `Provisioning failed: ${current.errorMessage ?? \"unknown error\"}`,\n );\n return null;\n\n default:\n observer.onProvisionStatus(lastStatus, current);\n }\n }\n\n // Sleep AFTER the read. If the previous read was terminal we would\n // have returned above; if it pushed us past the deadline the loop\n // condition will exit on the next iteration without another sleep.\n if (Date.now() + PROVISION_POLL_INTERVAL_MS < deadline) {\n await sleep(PROVISION_POLL_INTERVAL_MS);\n } else {\n break;\n }\n }\n\n // Reached the deadline without a terminal status. Surface that\n // explicitly — callers must not treat this as a success.\n observer.onProvisionTimeout(agentId, lastStatus);\n return { kind: \"pending-after-timeout\", agentId };\n}\n\n/**\n * Classify a `getAgent` poll error. The bridge client's `request<T>`\n * surfaces non-2xx responses as plain `Error(\"HTTP <status>: ...\")` from\n * `getAgent` (see `cloud/bridge-client.ts`), so the message-prefix match\n * is the canonical signal.\n *\n * \"auth\" — 401/403: stop polling immediately.\n * \"transient\" — 5xx or network/fetch error: keep retrying.\n * \"terminal\" — anything else (404, malformed body, etc.): stop.\n */\nfunction classifyPollError(err: unknown): \"auth\" | \"transient\" | \"terminal\" {\n const raw = err instanceof Error ? err.message : String(err);\n if (/\\bHTTP\\s+40[13]\\b/i.test(raw)) {\n return \"auth\";\n }\n if (/\\bHTTP\\s+5\\d{2}\\b/i.test(raw)) {\n return \"transient\";\n }\n // AbortError / TimeoutError / fetch failures from the request layer.\n if (\n err instanceof Error &&\n (err.name === \"AbortError\" ||\n err.name === \"TimeoutError\" ||\n /fetch failed|network|timed out|timeout/i.test(raw))\n ) {\n return \"transient\";\n }\n return \"terminal\";\n}\n\n// ---------------------------------------------------------------------------\n// Main orchestrator\n// ---------------------------------------------------------------------------\n\n/**\n * Run the full cloud setup flow:\n * 1. Check availability\n * 2. Authenticate via browser\n * 3. Create + provision agent\n *\n * Returns the result or null if the user cancels / an error occurs.\n * On failure, the caller should fall back to local mode.\n */\nexport async function runCloudSetup(\n observer: CloudSetupObserver,\n agentName: string,\n preset?: StylePreset,\n baseUrl?: string,\n): Promise<CloudSetupResult | null> {\n const resolvedBaseUrl = normalizeCloudSiteUrl(\n baseUrl ?? DEFAULT_CLOUD_BASE_URL,\n );\n\n // ── Step 1: Availability check ──────────────────────────────────────\n const unavailableReason = await checkCloudAvailability(resolvedBaseUrl);\n observer.onAvailabilityChecked({\n ok: unavailableReason === null,\n ...(unavailableReason ? { reason: unavailableReason } : {}),\n });\n\n if (unavailableReason) {\n const fallback = await observer.confirm({\n message: \"Run locally instead?\",\n defaultValue: true,\n });\n\n // Cancel (null) and explicit \"yes, run locally\" both bail to local.\n if (fallback === null || fallback === true) {\n return null;\n }\n // User said \"no\" to fallback — try auth anyway (maybe availability is\n // temporarily wrong).\n }\n\n // ── Step 2: Browser-based auth ──────────────────────────────────────\n const authResult = await runCloudAuth(observer, resolvedBaseUrl);\n if (!authResult) {\n observer.onNotice(\"Cloud login was not completed.\");\n\n const retry = await observer.confirm({\n message: \"Try again, or run locally?\",\n activeLabel: \"Try again\",\n inactiveLabel: \"Run locally\",\n defaultValue: false,\n });\n\n // Cancel or \"run locally\" both bail.\n if (retry === null || retry === false) {\n return null;\n }\n\n // Retry auth once\n const retryResult = await runCloudAuth(observer, resolvedBaseUrl);\n if (!retryResult) {\n observer.onNotice(\"Login was not completed. Falling back to local mode.\");\n return null;\n }\n\n return await finishProvisioning(\n observer,\n resolvedBaseUrl,\n retryResult,\n agentName,\n preset,\n );\n }\n\n return await finishProvisioning(\n observer,\n resolvedBaseUrl,\n authResult,\n agentName,\n preset,\n );\n}\n\n/**\n * Complete provisioning after successful auth.\n *\n * Branches on the explicit `ProvisionOutcome` kind: a \"pending-after-\n * timeout\" outcome is NOT treated as success — the caller is prompted\n * to fall back to local, the same as for outright failure, but the\n * agent id is preserved on the result so the user can reconnect later\n * with `eliza cloud connect`.\n */\nasync function finishProvisioning(\n observer: CloudSetupObserver,\n baseUrl: string,\n authResult: CloudLoginResult,\n agentName: string,\n preset?: StylePreset,\n): Promise<CloudSetupResult | null> {\n // ── Step 3: Create + provision agent ──────────────────────────────\n const client = new ElizaCloudClient(baseUrl, authResult.apiKey);\n const provisionResult = await provisionCloudAgent(\n observer,\n client,\n agentName,\n preset,\n );\n\n if (provisionResult && provisionResult.kind === \"running\") {\n return {\n apiKey: authResult.apiKey,\n agentId: provisionResult.agentId,\n baseUrl,\n bridgeUrl: provisionResult.bridgeUrl,\n };\n }\n\n // Either provisioning errored (`null`) or timed out mid-flight.\n // Prompt the user to fall back. We preserve any agentId we got so\n // a later `eliza cloud connect` can resume.\n const pendingAgentId =\n provisionResult?.kind === \"pending-after-timeout\"\n ? provisionResult.agentId\n : undefined;\n\n observer.onNotice(\n pendingAgentId\n ? \"Cloud agent is still starting up. You can try `eliza cloud connect` once it's ready.\"\n : \"Cloud provisioning did not complete. You can try `eliza cloud connect` later.\",\n );\n\n const runLocal = await observer.confirm({\n message: \"Continue with local setup instead?\",\n defaultValue: true,\n });\n\n if (runLocal === null || runLocal === true) {\n return null;\n }\n\n // User doesn't want local either — save the auth result (and the\n // pending agent id, if we have one) so they can reconnect later.\n return {\n apiKey: authResult.apiKey,\n agentId: pendingAgentId,\n baseUrl,\n };\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\n/**\n * Try to open a URL in the user's default browser.\n *\n * Rejects with a real Error when the underlying OS command fails (binary\n * not on PATH, etc.). The caller is responsible for surfacing the failure\n * — `runCloudAuth` routes it through `observer.onAuthBrowserOpenFailed`.\n *\n * Uses execFile with an args array (not exec with string interpolation)\n * to avoid shell injection via crafted URLs.\n */\nasync function openBrowser(url: string): Promise<void> {\n const { execFile } = await import(\"node:child_process\");\n const { platform } = await import(\"node:os\");\n\n const p = platform();\n\n return new Promise((resolve, reject) => {\n const onError = (err: Error | null) => {\n if (err) {\n reject(err);\n return;\n }\n resolve();\n };\n\n if (p === \"darwin\") {\n execFile(\"open\", [url], onError);\n } else if (p === \"win32\") {\n execFile(\"cmd.exe\", [\"/c\", \"start\", \"\", url], onError);\n } else {\n execFile(\"xdg-open\", [url], onError);\n }\n });\n}\n"
|
|
10
|
+
],
|
|
11
|
+
"mappings": "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",
|
|
12
|
+
"debugId": "A5B0B19A52D9EE9F64756E2164756E21",
|
|
13
|
+
"names": []
|
|
14
|
+
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cloud-routed ElevenLabs voice catalog.
|
|
3
|
+
*
|
|
4
|
+
* The Eliza Cloud SDK exposes two voice-listing endpoints:
|
|
5
|
+
* - `GET /api/elevenlabs/voices` — ElevenLabs **premade** voices (shared).
|
|
6
|
+
* - `GET /api/elevenlabs/voices/user` — voices cloned / saved by the
|
|
7
|
+
* authenticated user.
|
|
8
|
+
*
|
|
9
|
+
* We expose the union of both to consumers so the dashboard, the agent, and
|
|
10
|
+
* any other client see the full set of voices the user can actually use.
|
|
11
|
+
*
|
|
12
|
+
* Results are cached in-memory for {@link CACHE_TTL_MS} (1 hour). The cache
|
|
13
|
+
* is keyed by the runtime's cloud base URL + API key so multi-tenant or
|
|
14
|
+
* test-isolated runtimes don't share entries. On any fetch error we return
|
|
15
|
+
* a normalized empty list rather than throwing — callers can decide whether
|
|
16
|
+
* to surface a UI hint.
|
|
17
|
+
*/
|
|
18
|
+
import type { IAgentRuntime } from "@elizaos/core";
|
|
19
|
+
export interface CloudVoiceCatalogEntry {
|
|
20
|
+
id: string;
|
|
21
|
+
name: string;
|
|
22
|
+
gender?: string;
|
|
23
|
+
preview?: string;
|
|
24
|
+
category?: string;
|
|
25
|
+
language?: string;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Narrow interface the catalog actually uses. Lets tests substitute a
|
|
29
|
+
* fake without rebuilding the full SDK surface.
|
|
30
|
+
*/
|
|
31
|
+
export interface CloudVoiceClient {
|
|
32
|
+
routes: {
|
|
33
|
+
getApiElevenlabsVoices<T = unknown>(options?: {
|
|
34
|
+
query?: Record<string, unknown>;
|
|
35
|
+
}): Promise<T>;
|
|
36
|
+
getApiElevenlabsVoicesUser<T = unknown>(options?: {
|
|
37
|
+
query?: Record<string, unknown>;
|
|
38
|
+
}): Promise<T>;
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
type ClientFactory = (runtime: IAgentRuntime) => CloudVoiceClient;
|
|
42
|
+
/**
|
|
43
|
+
* Test seam: substitute the SDK client factory. Pass `null` to reset to
|
|
44
|
+
* the real `createElizaCloudClient`. Production code should never call
|
|
45
|
+
* this.
|
|
46
|
+
*/
|
|
47
|
+
export declare function setCloudVoiceClientFactoryForTesting(factory: ClientFactory | null): void;
|
|
48
|
+
/**
|
|
49
|
+
* Test seam: drop the in-memory cache. Production code should never call
|
|
50
|
+
* this; the TTL handles eviction by itself.
|
|
51
|
+
*/
|
|
52
|
+
export declare function resetCloudVoiceCatalogCacheForTesting(): void;
|
|
53
|
+
/**
|
|
54
|
+
* Fetch the user-visible voice catalog from Eliza Cloud (premade + cloned).
|
|
55
|
+
*
|
|
56
|
+
* Returns an empty array when:
|
|
57
|
+
* - Eliza Cloud isn't connected (no API key / not enabled).
|
|
58
|
+
* - Both upstream endpoints fail (network, auth, etc.).
|
|
59
|
+
*
|
|
60
|
+
* Results are cached for {@link CACHE_TTL_MS} per runtime. Subsequent calls
|
|
61
|
+
* within that window are served from memory.
|
|
62
|
+
*/
|
|
63
|
+
export declare function fetchCloudVoiceCatalog(runtime: IAgentRuntime): Promise<CloudVoiceCatalogEntry[]>;
|
|
64
|
+
export {};
|
|
65
|
+
//# sourceMappingURL=cloud-voice-catalog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cloud-voice-catalog.d.ts","sourceRoot":"","sources":["../src/cloud-voice-catalog.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAOnD,MAAM,WAAW,sBAAsB;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE;QACN,sBAAsB,CAAC,CAAC,GAAG,OAAO,EAAE,OAAO,CAAC,EAAE;YAC5C,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;SACjC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QACf,0BAA0B,CAAC,CAAC,GAAG,OAAO,EAAE,OAAO,CAAC,EAAE;YAChD,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;SACjC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;KAChB,CAAC;CACH;AAED,KAAK,aAAa,GAAG,CAAC,OAAO,EAAE,aAAa,KAAK,gBAAgB,CAAC;AAKlE;;;;GAIG;AACH,wBAAgB,oCAAoC,CAClD,OAAO,EAAE,aAAa,GAAG,IAAI,GAC5B,IAAI,CAON;AAUD;;;GAGG;AACH,wBAAgB,qCAAqC,IAAI,IAAI,CAE5D;AAiID;;;;;;;;;GASG;AACH,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,sBAAsB,EAAE,CAAC,CAqBnC"}
|
|
@@ -0,0 +1,278 @@
|
|
|
1
|
+
import { createRequire } from "node:module";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __returnValue = (v) => v;
|
|
4
|
+
function __exportSetter(name, newValue) {
|
|
5
|
+
this[name] = __returnValue.bind(null, newValue);
|
|
6
|
+
}
|
|
7
|
+
var __export = (target, all) => {
|
|
8
|
+
for (var name in all)
|
|
9
|
+
__defProp(target, name, {
|
|
10
|
+
get: all[name],
|
|
11
|
+
enumerable: true,
|
|
12
|
+
configurable: true,
|
|
13
|
+
set: __exportSetter.bind(all, name)
|
|
14
|
+
});
|
|
15
|
+
};
|
|
16
|
+
var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
|
|
17
|
+
var __require = /* @__PURE__ */ createRequire(import.meta.url);
|
|
18
|
+
|
|
19
|
+
// src/utils/config.ts
|
|
20
|
+
import { logger } from "@elizaos/core";
|
|
21
|
+
import { DEFAULT_ELIZA_CLOUD_TEXT_MODEL } from "@elizaos/core";
|
|
22
|
+
var DEFAULT_ELIZA_CLOUD_LARGE_MODEL = "zai-glm-4.7";
|
|
23
|
+
function getEnvValue(key) {
|
|
24
|
+
if (typeof process === "undefined") {
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
const value = process.env[key];
|
|
28
|
+
return value === undefined ? undefined : String(value);
|
|
29
|
+
}
|
|
30
|
+
function getSetting(runtime, key, defaultValue) {
|
|
31
|
+
const value = runtime.getSetting(key);
|
|
32
|
+
if (value !== undefined && value !== null) {
|
|
33
|
+
return String(value);
|
|
34
|
+
}
|
|
35
|
+
return getEnvValue(key) ?? defaultValue;
|
|
36
|
+
}
|
|
37
|
+
function isBrowser() {
|
|
38
|
+
return typeof globalThis !== "undefined" && typeof globalThis.document !== "undefined";
|
|
39
|
+
}
|
|
40
|
+
function isProxyMode(runtime) {
|
|
41
|
+
return isBrowser() && !!getSetting(runtime, "ELIZAOS_CLOUD_BROWSER_BASE_URL");
|
|
42
|
+
}
|
|
43
|
+
function getBaseURL(runtime) {
|
|
44
|
+
const browserURL = getSetting(runtime, "ELIZAOS_CLOUD_BROWSER_BASE_URL");
|
|
45
|
+
const baseURL = isBrowser() && browserURL ? browserURL : getSetting(runtime, "ELIZAOS_CLOUD_BASE_URL", "https://www.elizacloud.ai/api/v1");
|
|
46
|
+
return baseURL;
|
|
47
|
+
}
|
|
48
|
+
function getEmbeddingBaseURL(runtime) {
|
|
49
|
+
const embeddingURL = isBrowser() ? getSetting(runtime, "ELIZAOS_CLOUD_BROWSER_EMBEDDING_URL") || getSetting(runtime, "ELIZAOS_CLOUD_BROWSER_BASE_URL") : getSetting(runtime, "ELIZAOS_CLOUD_EMBEDDING_URL");
|
|
50
|
+
if (embeddingURL) {
|
|
51
|
+
logger.debug(`[ELIZAOS_CLOUD] Using specific embedding base URL: ${embeddingURL}`);
|
|
52
|
+
return embeddingURL;
|
|
53
|
+
}
|
|
54
|
+
logger.debug("[ELIZAOS_CLOUD] Falling back to general base URL for embeddings.");
|
|
55
|
+
return getBaseURL(runtime);
|
|
56
|
+
}
|
|
57
|
+
function getApiKey(runtime) {
|
|
58
|
+
return getSetting(runtime, "ELIZAOS_CLOUD_API_KEY");
|
|
59
|
+
}
|
|
60
|
+
function getEmbeddingApiKey(runtime) {
|
|
61
|
+
const embeddingApiKey = getSetting(runtime, "ELIZAOS_CLOUD_EMBEDDING_API_KEY");
|
|
62
|
+
if (embeddingApiKey) {
|
|
63
|
+
logger.debug("[ELIZAOS_CLOUD] Using specific embedding API key (present)");
|
|
64
|
+
return embeddingApiKey;
|
|
65
|
+
}
|
|
66
|
+
logger.debug("[ELIZAOS_CLOUD] Falling back to general API key for embeddings.");
|
|
67
|
+
return getApiKey(runtime);
|
|
68
|
+
}
|
|
69
|
+
function getSmallModel(runtime) {
|
|
70
|
+
return getSetting(runtime, "ELIZAOS_CLOUD_SMALL_MODEL") ?? getSetting(runtime, "SMALL_MODEL", DEFAULT_ELIZA_CLOUD_TEXT_MODEL);
|
|
71
|
+
}
|
|
72
|
+
function getNanoModel(runtime) {
|
|
73
|
+
return getSetting(runtime, "ELIZAOS_CLOUD_NANO_MODEL") ?? getSetting(runtime, "NANO_MODEL") ?? getSmallModel(runtime);
|
|
74
|
+
}
|
|
75
|
+
function getMediumModel(runtime) {
|
|
76
|
+
return getSetting(runtime, "ELIZAOS_CLOUD_MEDIUM_MODEL") ?? getSetting(runtime, "MEDIUM_MODEL") ?? getSmallModel(runtime);
|
|
77
|
+
}
|
|
78
|
+
function getLargeModel(runtime) {
|
|
79
|
+
return getSetting(runtime, "ELIZAOS_CLOUD_LARGE_MODEL") ?? getSetting(runtime, "LARGE_MODEL", DEFAULT_ELIZA_CLOUD_LARGE_MODEL);
|
|
80
|
+
}
|
|
81
|
+
function getMegaModel(runtime) {
|
|
82
|
+
return getSetting(runtime, "ELIZAOS_CLOUD_MEGA_MODEL") ?? getSetting(runtime, "MEGA_MODEL") ?? getLargeModel(runtime);
|
|
83
|
+
}
|
|
84
|
+
function getResponseHandlerModel(runtime) {
|
|
85
|
+
return getSetting(runtime, "ELIZAOS_CLOUD_RESPONSE_HANDLER_MODEL") ?? getSetting(runtime, "ELIZAOS_CLOUD_SHOULD_RESPOND_MODEL") ?? getSetting(runtime, "RESPONSE_HANDLER_MODEL") ?? getSetting(runtime, "SHOULD_RESPOND_MODEL") ?? getSmallModel(runtime);
|
|
86
|
+
}
|
|
87
|
+
function getActionPlannerModel(runtime) {
|
|
88
|
+
return getSetting(runtime, "ELIZAOS_CLOUD_ACTION_PLANNER_MODEL") ?? getSetting(runtime, "ELIZAOS_CLOUD_PLANNER_MODEL") ?? getSetting(runtime, "ACTION_PLANNER_MODEL") ?? getSetting(runtime, "PLANNER_MODEL") ?? getLargeModel(runtime);
|
|
89
|
+
}
|
|
90
|
+
function getResponseModel(runtime) {
|
|
91
|
+
return getSetting(runtime, "ELIZAOS_CLOUD_RESPONSE_MODEL") ?? getSetting(runtime, "RESPONSE_MODEL") ?? getLargeModel(runtime);
|
|
92
|
+
}
|
|
93
|
+
function getImageDescriptionModel(runtime) {
|
|
94
|
+
return getSetting(runtime, "ELIZAOS_CLOUD_IMAGE_DESCRIPTION_MODEL", "gpt-5.4-mini");
|
|
95
|
+
}
|
|
96
|
+
function getImageGenerationModel(runtime) {
|
|
97
|
+
return getSetting(runtime, "ELIZAOS_CLOUD_IMAGE_GENERATION_MODEL", "google/gemini-2.5-flash-image") ?? "google/gemini-2.5-flash-image";
|
|
98
|
+
}
|
|
99
|
+
function getResearchModel(runtime) {
|
|
100
|
+
return getSetting(runtime, "ELIZAOS_CLOUD_RESEARCH_MODEL") ?? getSetting(runtime, "RESEARCH_MODEL", "o3-deep-research");
|
|
101
|
+
}
|
|
102
|
+
function getTTSModel(runtime) {
|
|
103
|
+
return getSetting(runtime, "ELIZAOS_CLOUD_TTS_MODEL", "gpt-5-mini-tts");
|
|
104
|
+
}
|
|
105
|
+
function getTranscriptionModel(runtime) {
|
|
106
|
+
return getSetting(runtime, "ELIZAOS_CLOUD_TRANSCRIPTION_MODEL", "gpt-5-mini-transcribe");
|
|
107
|
+
}
|
|
108
|
+
function getExperimentalTelemetry(runtime) {
|
|
109
|
+
const setting = getSetting(runtime, "ELIZAOS_CLOUD_EXPERIMENTAL_TELEMETRY", "false");
|
|
110
|
+
return String(setting).toLowerCase() === "true";
|
|
111
|
+
}
|
|
112
|
+
function resolveCloudTimeoutMs(envKey, defaultMs) {
|
|
113
|
+
const raw = typeof process !== "undefined" ? process.env[envKey] : undefined;
|
|
114
|
+
if (raw === undefined || raw.trim() === "")
|
|
115
|
+
return defaultMs;
|
|
116
|
+
const parsed = Number.parseInt(raw, 10);
|
|
117
|
+
if (!Number.isFinite(parsed))
|
|
118
|
+
return defaultMs;
|
|
119
|
+
return parsed <= 0 ? undefined : parsed;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
// src/utils/sdk-client.ts
|
|
123
|
+
import { ElizaCloudClient } from "@elizaos/cloud-sdk";
|
|
124
|
+
function trimTrailingSlash(value) {
|
|
125
|
+
return value.replace(/\/+$/, "");
|
|
126
|
+
}
|
|
127
|
+
function apiBaseToSiteBaseUrl(apiBaseUrl) {
|
|
128
|
+
const trimmed = trimTrailingSlash(apiBaseUrl);
|
|
129
|
+
return trimmed.endsWith("/api/v1") ? trimmed.slice(0, -"/api/v1".length) : trimmed;
|
|
130
|
+
}
|
|
131
|
+
function apiKeyForRuntime(runtime, embedding = false) {
|
|
132
|
+
if (isBrowser())
|
|
133
|
+
return;
|
|
134
|
+
return embedding ? getEmbeddingApiKey(runtime) : getApiKey(runtime);
|
|
135
|
+
}
|
|
136
|
+
function createCloudApiClient(runtime, embedding = false) {
|
|
137
|
+
const baseUrl = embedding ? getEmbeddingBaseURL(runtime) : getBaseURL(runtime);
|
|
138
|
+
return new ElizaCloudClient({
|
|
139
|
+
apiBaseUrl: trimTrailingSlash(baseUrl),
|
|
140
|
+
baseUrl: apiBaseToSiteBaseUrl(baseUrl),
|
|
141
|
+
apiKey: apiKeyForRuntime(runtime, embedding)
|
|
142
|
+
}).v1;
|
|
143
|
+
}
|
|
144
|
+
function createElizaCloudClient(runtime) {
|
|
145
|
+
const apiBaseUrl = trimTrailingSlash(getBaseURL(runtime));
|
|
146
|
+
return new ElizaCloudClient({
|
|
147
|
+
apiBaseUrl,
|
|
148
|
+
baseUrl: apiBaseToSiteBaseUrl(apiBaseUrl),
|
|
149
|
+
apiKey: apiKeyForRuntime(runtime)
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
// src/cloud-voice-catalog.ts
|
|
154
|
+
import { isCloudConnected, logger as logger2, toRuntimeSettings } from "@elizaos/core";
|
|
155
|
+
var CACHE_TTL_MS = 60 * 60 * 1000;
|
|
156
|
+
var clientFactory = (runtime) => createElizaCloudClient(runtime);
|
|
157
|
+
function setCloudVoiceClientFactoryForTesting(factory) {
|
|
158
|
+
if (factory === null) {
|
|
159
|
+
clientFactory = (runtime) => createElizaCloudClient(runtime);
|
|
160
|
+
} else {
|
|
161
|
+
clientFactory = factory;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
var cache = new Map;
|
|
165
|
+
function resetCloudVoiceCatalogCacheForTesting() {
|
|
166
|
+
cache.clear();
|
|
167
|
+
}
|
|
168
|
+
function cacheKeyFor(runtime) {
|
|
169
|
+
const baseUrl = getBaseURL(runtime) || "";
|
|
170
|
+
const apiKey = getApiKey(runtime) || "";
|
|
171
|
+
return `${baseUrl}|${apiKey}`;
|
|
172
|
+
}
|
|
173
|
+
function pickString(record, key) {
|
|
174
|
+
const v = record[key];
|
|
175
|
+
return typeof v === "string" && v.trim() ? v.trim() : undefined;
|
|
176
|
+
}
|
|
177
|
+
function pickStringFromAny(record, ...keys) {
|
|
178
|
+
for (const key of keys) {
|
|
179
|
+
const v = pickString(record, key);
|
|
180
|
+
if (v)
|
|
181
|
+
return v;
|
|
182
|
+
}
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
function asRecord(value) {
|
|
186
|
+
if (!value || typeof value !== "object" || Array.isArray(value))
|
|
187
|
+
return null;
|
|
188
|
+
return value;
|
|
189
|
+
}
|
|
190
|
+
function normalizeVoiceEntry(raw) {
|
|
191
|
+
const record = asRecord(raw);
|
|
192
|
+
if (!record)
|
|
193
|
+
return null;
|
|
194
|
+
const id = pickStringFromAny(record, "voice_id", "voiceId", "id");
|
|
195
|
+
if (!id)
|
|
196
|
+
return null;
|
|
197
|
+
const name = pickStringFromAny(record, "name", "display_name", "displayName") ?? id;
|
|
198
|
+
const preview = pickStringFromAny(record, "preview_url", "previewUrl", "preview");
|
|
199
|
+
const category = pickStringFromAny(record, "category");
|
|
200
|
+
const labels = asRecord(record.labels);
|
|
201
|
+
const gender = pickStringFromAny(record, "gender") ?? (labels ? pickStringFromAny(labels, "gender") : undefined);
|
|
202
|
+
const language = pickStringFromAny(record, "language", "language_code", "languageCode") ?? (labels ? pickStringFromAny(labels, "language", "language_code", "languageCode") : undefined);
|
|
203
|
+
return {
|
|
204
|
+
id,
|
|
205
|
+
name,
|
|
206
|
+
...gender ? { gender } : {},
|
|
207
|
+
...preview ? { preview } : {},
|
|
208
|
+
...category ? { category } : {},
|
|
209
|
+
...language ? { language } : {}
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
function extractVoiceArray(payload) {
|
|
213
|
+
if (Array.isArray(payload))
|
|
214
|
+
return payload;
|
|
215
|
+
const record = asRecord(payload);
|
|
216
|
+
if (!record)
|
|
217
|
+
return [];
|
|
218
|
+
for (const key of ["voices", "data", "items", "results"]) {
|
|
219
|
+
const v = record[key];
|
|
220
|
+
if (Array.isArray(v))
|
|
221
|
+
return v;
|
|
222
|
+
}
|
|
223
|
+
return [];
|
|
224
|
+
}
|
|
225
|
+
function dedupeById(entries) {
|
|
226
|
+
const seen = new Set;
|
|
227
|
+
const out = [];
|
|
228
|
+
for (const entry of entries) {
|
|
229
|
+
if (seen.has(entry.id))
|
|
230
|
+
continue;
|
|
231
|
+
seen.add(entry.id);
|
|
232
|
+
out.push(entry);
|
|
233
|
+
}
|
|
234
|
+
return out;
|
|
235
|
+
}
|
|
236
|
+
async function fetchEndpointVoices(runtime, endpoint) {
|
|
237
|
+
try {
|
|
238
|
+
const client = clientFactory(runtime);
|
|
239
|
+
const payload = endpoint === "premade" ? await client.routes.getApiElevenlabsVoices() : await client.routes.getApiElevenlabsVoicesUser();
|
|
240
|
+
const raw = extractVoiceArray(payload);
|
|
241
|
+
const normalized = [];
|
|
242
|
+
for (const entry of raw) {
|
|
243
|
+
const v = normalizeVoiceEntry(entry);
|
|
244
|
+
if (v)
|
|
245
|
+
normalized.push(v);
|
|
246
|
+
}
|
|
247
|
+
return normalized;
|
|
248
|
+
} catch (err) {
|
|
249
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
250
|
+
logger2.debug(`[ELIZAOS_CLOUD] voice catalog ${endpoint} fetch failed: ${message}`);
|
|
251
|
+
return [];
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
async function fetchCloudVoiceCatalog(runtime) {
|
|
255
|
+
if (!isCloudConnected(toRuntimeSettings(runtime))) {
|
|
256
|
+
return [];
|
|
257
|
+
}
|
|
258
|
+
const key = cacheKeyFor(runtime);
|
|
259
|
+
const now = Date.now();
|
|
260
|
+
const cached = cache.get(key);
|
|
261
|
+
if (cached && now - cached.fetchedAt < CACHE_TTL_MS) {
|
|
262
|
+
return cached.voices;
|
|
263
|
+
}
|
|
264
|
+
const [premade, user] = await Promise.all([
|
|
265
|
+
fetchEndpointVoices(runtime, "premade"),
|
|
266
|
+
fetchEndpointVoices(runtime, "user")
|
|
267
|
+
]);
|
|
268
|
+
const merged = dedupeById([...user, ...premade]);
|
|
269
|
+
cache.set(key, { fetchedAt: now, voices: merged });
|
|
270
|
+
return merged;
|
|
271
|
+
}
|
|
272
|
+
export {
|
|
273
|
+
setCloudVoiceClientFactoryForTesting,
|
|
274
|
+
resetCloudVoiceCatalogCacheForTesting,
|
|
275
|
+
fetchCloudVoiceCatalog
|
|
276
|
+
};
|
|
277
|
+
|
|
278
|
+
//# debugId=A29B7A59D382285064756E2164756E21
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/utils/config.ts", "../src/utils/sdk-client.ts", "../src/cloud-voice-catalog.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"import type { IAgentRuntime } from \"@elizaos/core\";\nimport { logger } from \"@elizaos/core\";\nimport { DEFAULT_ELIZA_CLOUD_TEXT_MODEL } from \"@elizaos/core\";\n\nexport const DEFAULT_ELIZA_CLOUD_LARGE_MODEL = \"zai-glm-4.7\";\n\nfunction getEnvValue(key: string): string | undefined {\n if (typeof process === \"undefined\") {\n return undefined;\n }\n const value = process.env[key];\n return value === undefined ? undefined : String(value);\n}\n\nexport function getSetting(\n runtime: IAgentRuntime,\n key: string,\n defaultValue?: string\n): string | undefined {\n const value = runtime.getSetting(key);\n if (value !== undefined && value !== null) {\n return String(value);\n }\n return getEnvValue(key) ?? defaultValue;\n}\n\nexport function isBrowser(): boolean {\n return (\n typeof globalThis !== \"undefined\" &&\n typeof (globalThis as { document?: Document }).document !== \"undefined\"\n );\n}\n\nexport function isProxyMode(runtime: IAgentRuntime): boolean {\n return isBrowser() && !!getSetting(runtime, \"ELIZAOS_CLOUD_BROWSER_BASE_URL\");\n}\n\nexport function getBaseURL(runtime: IAgentRuntime): string {\n const browserURL = getSetting(runtime, \"ELIZAOS_CLOUD_BROWSER_BASE_URL\");\n const baseURL = (\n isBrowser() && browserURL\n ? browserURL\n : getSetting(runtime, \"ELIZAOS_CLOUD_BASE_URL\", \"https://www.elizacloud.ai/api/v1\")\n ) as string;\n return baseURL;\n}\n\nexport function getEmbeddingBaseURL(runtime: IAgentRuntime): string {\n const embeddingURL = isBrowser()\n ? getSetting(runtime, \"ELIZAOS_CLOUD_BROWSER_EMBEDDING_URL\") ||\n getSetting(runtime, \"ELIZAOS_CLOUD_BROWSER_BASE_URL\")\n : getSetting(runtime, \"ELIZAOS_CLOUD_EMBEDDING_URL\");\n if (embeddingURL) {\n logger.debug(`[ELIZAOS_CLOUD] Using specific embedding base URL: ${embeddingURL}`);\n return embeddingURL;\n }\n logger.debug(\"[ELIZAOS_CLOUD] Falling back to general base URL for embeddings.\");\n return getBaseURL(runtime);\n}\n\nexport function getApiKey(runtime: IAgentRuntime): string | undefined {\n return getSetting(runtime, \"ELIZAOS_CLOUD_API_KEY\");\n}\n\nexport function getEmbeddingApiKey(runtime: IAgentRuntime): string | undefined {\n const embeddingApiKey = getSetting(runtime, \"ELIZAOS_CLOUD_EMBEDDING_API_KEY\");\n if (embeddingApiKey) {\n logger.debug(\"[ELIZAOS_CLOUD] Using specific embedding API key (present)\");\n return embeddingApiKey;\n }\n logger.debug(\"[ELIZAOS_CLOUD] Falling back to general API key for embeddings.\");\n return getApiKey(runtime);\n}\n\nexport function getSmallModel(runtime: IAgentRuntime): string {\n return (\n getSetting(runtime, \"ELIZAOS_CLOUD_SMALL_MODEL\") ??\n (getSetting(runtime, \"SMALL_MODEL\", DEFAULT_ELIZA_CLOUD_TEXT_MODEL) as string)\n );\n}\n\nexport function getNanoModel(runtime: IAgentRuntime): string {\n return (\n getSetting(runtime, \"ELIZAOS_CLOUD_NANO_MODEL\") ??\n getSetting(runtime, \"NANO_MODEL\") ??\n getSmallModel(runtime)\n );\n}\n\nexport function getMediumModel(runtime: IAgentRuntime): string {\n return (\n getSetting(runtime, \"ELIZAOS_CLOUD_MEDIUM_MODEL\") ??\n getSetting(runtime, \"MEDIUM_MODEL\") ??\n getSmallModel(runtime)\n );\n}\n\nexport function getLargeModel(runtime: IAgentRuntime): string {\n return (\n getSetting(runtime, \"ELIZAOS_CLOUD_LARGE_MODEL\") ??\n (getSetting(runtime, \"LARGE_MODEL\", DEFAULT_ELIZA_CLOUD_LARGE_MODEL) as string)\n );\n}\n\nexport function getMegaModel(runtime: IAgentRuntime): string {\n return (\n getSetting(runtime, \"ELIZAOS_CLOUD_MEGA_MODEL\") ??\n getSetting(runtime, \"MEGA_MODEL\") ??\n getLargeModel(runtime)\n );\n}\n\nexport function getResponseHandlerModel(runtime: IAgentRuntime): string {\n return (\n getSetting(runtime, \"ELIZAOS_CLOUD_RESPONSE_HANDLER_MODEL\") ??\n getSetting(runtime, \"ELIZAOS_CLOUD_SHOULD_RESPOND_MODEL\") ??\n getSetting(runtime, \"RESPONSE_HANDLER_MODEL\") ??\n getSetting(runtime, \"SHOULD_RESPOND_MODEL\") ??\n getSmallModel(runtime)\n );\n}\n\nexport function getActionPlannerModel(runtime: IAgentRuntime): string {\n return (\n getSetting(runtime, \"ELIZAOS_CLOUD_ACTION_PLANNER_MODEL\") ??\n getSetting(runtime, \"ELIZAOS_CLOUD_PLANNER_MODEL\") ??\n getSetting(runtime, \"ACTION_PLANNER_MODEL\") ??\n getSetting(runtime, \"PLANNER_MODEL\") ??\n getLargeModel(runtime)\n );\n}\n\nexport function getResponseModel(runtime: IAgentRuntime): string {\n return (\n getSetting(runtime, \"ELIZAOS_CLOUD_RESPONSE_MODEL\") ??\n getSetting(runtime, \"RESPONSE_MODEL\") ??\n getLargeModel(runtime)\n );\n}\n\nexport function getImageDescriptionModel(runtime: IAgentRuntime): string {\n return getSetting(runtime, \"ELIZAOS_CLOUD_IMAGE_DESCRIPTION_MODEL\", \"gpt-5.4-mini\") as string;\n}\n\nexport function getImageGenerationModel(runtime: IAgentRuntime): string {\n return (\n getSetting(runtime, \"ELIZAOS_CLOUD_IMAGE_GENERATION_MODEL\", \"google/gemini-2.5-flash-image\") ??\n \"google/gemini-2.5-flash-image\"\n );\n}\n\nexport function getResearchModel(runtime: IAgentRuntime): string {\n return (\n getSetting(runtime, \"ELIZAOS_CLOUD_RESEARCH_MODEL\") ??\n (getSetting(runtime, \"RESEARCH_MODEL\", \"o3-deep-research\") as string)\n );\n}\n\nexport function getTTSModel(runtime: IAgentRuntime): string {\n return getSetting(runtime, \"ELIZAOS_CLOUD_TTS_MODEL\", \"gpt-5-mini-tts\") as string;\n}\n\nexport function getTranscriptionModel(runtime: IAgentRuntime): string {\n return getSetting(\n runtime,\n \"ELIZAOS_CLOUD_TRANSCRIPTION_MODEL\",\n \"gpt-5-mini-transcribe\"\n ) as string;\n}\n\nexport function getExperimentalTelemetry(runtime: IAgentRuntime): boolean {\n const setting = getSetting(runtime, \"ELIZAOS_CLOUD_EXPERIMENTAL_TELEMETRY\", \"false\");\n return String(setting).toLowerCase() === \"true\";\n}\n\n/**\n * Resolve a client-side timeout (ms) for a cloud model round-trip from `envKey`,\n * falling back to `defaultMs`. `0`/negative/non-numeric → undefined (opt out).\n *\n * cloud-sdk applies NO default timeout (a fetch with no signal hangs until the\n * platform default), so turn-blocking calls (TTS/STT in a voice turn, deep\n * research) need an explicit ceiling or a stalled gateway hangs the turn.\n */\nexport function resolveCloudTimeoutMs(\n envKey: string,\n defaultMs: number\n): number | undefined {\n const raw = typeof process !== \"undefined\" ? process.env[envKey] : undefined;\n if (raw === undefined || raw.trim() === \"\") return defaultMs;\n const parsed = Number.parseInt(raw, 10);\n if (!Number.isFinite(parsed)) return defaultMs;\n return parsed <= 0 ? undefined : parsed;\n}\n",
|
|
6
|
+
"import { CloudApiClient, ElizaCloudClient } from \"@elizaos/cloud-sdk\";\nimport type { IAgentRuntime } from \"@elizaos/core\";\nimport {\n getApiKey,\n getBaseURL,\n getEmbeddingApiKey,\n getEmbeddingBaseURL,\n isBrowser,\n} from \"./config\";\n\nfunction trimTrailingSlash(value: string): string {\n return value.replace(/\\/+$/, \"\");\n}\n\nfunction apiBaseToSiteBaseUrl(apiBaseUrl: string): string {\n const trimmed = trimTrailingSlash(apiBaseUrl);\n return trimmed.endsWith(\"/api/v1\") ? trimmed.slice(0, -\"/api/v1\".length) : trimmed;\n}\n\nfunction apiKeyForRuntime(runtime: IAgentRuntime, embedding = false): string | undefined {\n if (isBrowser()) return undefined;\n return embedding ? getEmbeddingApiKey(runtime) : getApiKey(runtime);\n}\n\nexport function createCloudApiClient(runtime: IAgentRuntime, embedding = false): CloudApiClient {\n const baseUrl = embedding ? getEmbeddingBaseURL(runtime) : getBaseURL(runtime);\n return new ElizaCloudClient({\n apiBaseUrl: trimTrailingSlash(baseUrl),\n baseUrl: apiBaseToSiteBaseUrl(baseUrl),\n apiKey: apiKeyForRuntime(runtime, embedding),\n }).v1;\n}\n\nexport function createElizaCloudClient(runtime: IAgentRuntime): ElizaCloudClient {\n const apiBaseUrl = trimTrailingSlash(getBaseURL(runtime));\n return new ElizaCloudClient({\n apiBaseUrl,\n baseUrl: apiBaseToSiteBaseUrl(apiBaseUrl),\n apiKey: apiKeyForRuntime(runtime),\n });\n}\n",
|
|
7
|
+
"/**\n * Cloud-routed ElevenLabs voice catalog.\n *\n * The Eliza Cloud SDK exposes two voice-listing endpoints:\n * - `GET /api/elevenlabs/voices` — ElevenLabs **premade** voices (shared).\n * - `GET /api/elevenlabs/voices/user` — voices cloned / saved by the\n * authenticated user.\n *\n * We expose the union of both to consumers so the dashboard, the agent, and\n * any other client see the full set of voices the user can actually use.\n *\n * Results are cached in-memory for {@link CACHE_TTL_MS} (1 hour). The cache\n * is keyed by the runtime's cloud base URL + API key so multi-tenant or\n * test-isolated runtimes don't share entries. On any fetch error we return\n * a normalized empty list rather than throwing — callers can decide whether\n * to surface a UI hint.\n */\nimport type { IAgentRuntime } from \"@elizaos/core\";\nimport { isCloudConnected, logger, toRuntimeSettings } from \"@elizaos/core\";\nimport { getApiKey, getBaseURL } from \"./utils/config\";\nimport { createElizaCloudClient } from \"./utils/sdk-client\";\n\nconst CACHE_TTL_MS = 60 * 60 * 1000; // 1 hour\n\nexport interface CloudVoiceCatalogEntry {\n id: string;\n name: string;\n gender?: string;\n preview?: string;\n category?: string;\n language?: string;\n}\n\n/**\n * Narrow interface the catalog actually uses. Lets tests substitute a\n * fake without rebuilding the full SDK surface.\n */\nexport interface CloudVoiceClient {\n routes: {\n getApiElevenlabsVoices<T = unknown>(options?: {\n query?: Record<string, unknown>;\n }): Promise<T>;\n getApiElevenlabsVoicesUser<T = unknown>(options?: {\n query?: Record<string, unknown>;\n }): Promise<T>;\n };\n}\n\ntype ClientFactory = (runtime: IAgentRuntime) => CloudVoiceClient;\n\nlet clientFactory: ClientFactory = (runtime) =>\n createElizaCloudClient(runtime) as unknown as CloudVoiceClient;\n\n/**\n * Test seam: substitute the SDK client factory. Pass `null` to reset to\n * the real `createElizaCloudClient`. Production code should never call\n * this.\n */\nexport function setCloudVoiceClientFactoryForTesting(\n factory: ClientFactory | null,\n): void {\n if (factory === null) {\n clientFactory = (runtime) =>\n createElizaCloudClient(runtime) as unknown as CloudVoiceClient;\n } else {\n clientFactory = factory;\n }\n}\n\ninterface CacheEntry {\n fetchedAt: number;\n voices: CloudVoiceCatalogEntry[];\n}\n\n/** Module-level cache. Keyed by `${baseUrl}|${apiKey}`. */\nconst cache = new Map<string, CacheEntry>();\n\n/**\n * Test seam: drop the in-memory cache. Production code should never call\n * this; the TTL handles eviction by itself.\n */\nexport function resetCloudVoiceCatalogCacheForTesting(): void {\n cache.clear();\n}\n\nfunction cacheKeyFor(runtime: IAgentRuntime): string {\n const baseUrl = getBaseURL(runtime) || \"\";\n const apiKey = getApiKey(runtime) || \"\";\n return `${baseUrl}|${apiKey}`;\n}\n\nfunction pickString(\n record: Record<string, unknown>,\n key: string,\n): string | undefined {\n const v = record[key];\n return typeof v === \"string\" && v.trim() ? v.trim() : undefined;\n}\n\nfunction pickStringFromAny(\n record: Record<string, unknown>,\n ...keys: string[]\n): string | undefined {\n for (const key of keys) {\n const v = pickString(record, key);\n if (v) return v;\n }\n return undefined;\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> | null {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return null;\n return value as Record<string, unknown>;\n}\n\n/**\n * Best-effort normalizer for the heterogeneous shapes the upstream returns.\n *\n * ElevenLabs's premade voices include `labels: { gender, accent, ... }`,\n * `preview_url`, `category`. User-cloned voices look very similar but may\n * omit some fields. We accept any shape that has at least a `voice_id`\n * (or `id`) and produce a uniform record.\n */\nfunction normalizeVoiceEntry(raw: unknown): CloudVoiceCatalogEntry | null {\n const record = asRecord(raw);\n if (!record) return null;\n const id = pickStringFromAny(record, \"voice_id\", \"voiceId\", \"id\");\n if (!id) return null;\n\n const name =\n pickStringFromAny(record, \"name\", \"display_name\", \"displayName\") ?? id;\n const preview = pickStringFromAny(\n record,\n \"preview_url\",\n \"previewUrl\",\n \"preview\",\n );\n const category = pickStringFromAny(record, \"category\");\n\n // `labels` is the canonical ElevenLabs metadata block.\n const labels = asRecord(record.labels);\n const gender =\n pickStringFromAny(record, \"gender\") ??\n (labels ? pickStringFromAny(labels, \"gender\") : undefined);\n const language =\n pickStringFromAny(record, \"language\", \"language_code\", \"languageCode\") ??\n (labels\n ? pickStringFromAny(labels, \"language\", \"language_code\", \"languageCode\")\n : undefined);\n\n return {\n id,\n name,\n ...(gender ? { gender } : {}),\n ...(preview ? { preview } : {}),\n ...(category ? { category } : {}),\n ...(language ? { language } : {}),\n };\n}\n\n/**\n * Some endpoints return `{ voices: [...] }`, others return a bare array.\n * Accept both.\n */\nfunction extractVoiceArray(payload: unknown): unknown[] {\n if (Array.isArray(payload)) return payload;\n const record = asRecord(payload);\n if (!record) return [];\n for (const key of [\"voices\", \"data\", \"items\", \"results\"]) {\n const v = record[key];\n if (Array.isArray(v)) return v;\n }\n return [];\n}\n\nfunction dedupeById(entries: CloudVoiceCatalogEntry[]): CloudVoiceCatalogEntry[] {\n const seen = new Set<string>();\n const out: CloudVoiceCatalogEntry[] = [];\n for (const entry of entries) {\n if (seen.has(entry.id)) continue;\n seen.add(entry.id);\n out.push(entry);\n }\n return out;\n}\n\nasync function fetchEndpointVoices(\n runtime: IAgentRuntime,\n endpoint: \"premade\" | \"user\",\n): Promise<CloudVoiceCatalogEntry[]> {\n try {\n const client = clientFactory(runtime);\n const payload =\n endpoint === \"premade\"\n ? await client.routes.getApiElevenlabsVoices<unknown>()\n : await client.routes.getApiElevenlabsVoicesUser<unknown>();\n const raw = extractVoiceArray(payload);\n const normalized: CloudVoiceCatalogEntry[] = [];\n for (const entry of raw) {\n const v = normalizeVoiceEntry(entry);\n if (v) normalized.push(v);\n }\n return normalized;\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n logger.debug(\n `[ELIZAOS_CLOUD] voice catalog ${endpoint} fetch failed: ${message}`,\n );\n return [];\n }\n}\n\n/**\n * Fetch the user-visible voice catalog from Eliza Cloud (premade + cloned).\n *\n * Returns an empty array when:\n * - Eliza Cloud isn't connected (no API key / not enabled).\n * - Both upstream endpoints fail (network, auth, etc.).\n *\n * Results are cached for {@link CACHE_TTL_MS} per runtime. Subsequent calls\n * within that window are served from memory.\n */\nexport async function fetchCloudVoiceCatalog(\n runtime: IAgentRuntime,\n): Promise<CloudVoiceCatalogEntry[]> {\n if (!isCloudConnected(toRuntimeSettings(runtime))) {\n return [];\n }\n const key = cacheKeyFor(runtime);\n const now = Date.now();\n const cached = cache.get(key);\n if (cached && now - cached.fetchedAt < CACHE_TTL_MS) {\n return cached.voices;\n }\n\n const [premade, user] = await Promise.all([\n fetchEndpointVoices(runtime, \"premade\"),\n fetchEndpointVoices(runtime, \"user\"),\n ]);\n\n // User voices first so cloned voices appear before the shared premade\n // list — most users care about their own clones.\n const merged = dedupeById([...user, ...premade]);\n cache.set(key, { fetchedAt: now, voices: merged });\n return merged;\n}\n"
|
|
8
|
+
],
|
|
9
|
+
"mappings": "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",
|
|
10
|
+
"debugId": "A29B7A59D382285064756E2164756E21",
|
|
11
|
+
"names": []
|
|
12
|
+
}
|
package/dist/index.browser.d.ts
CHANGED
|
@@ -1,4 +1,16 @@
|
|
|
1
|
-
import
|
|
2
|
-
export
|
|
3
|
-
export
|
|
1
|
+
import type { Plugin } from "@elizaos/core";
|
|
2
|
+
export declare const elizaOSCloudPlugin: Plugin;
|
|
3
|
+
export declare function getCloudSecret(_key?: "ELIZAOS_CLOUD_API_KEY" | "ELIZAOS_CLOUD_ENABLED"): string | undefined;
|
|
4
|
+
export declare function clearCloudSecrets(): void;
|
|
5
|
+
export declare const ensureCloudTtsApiKeyAlias: () => undefined;
|
|
6
|
+
export declare const handleCloudTtsPreviewRoute: () => undefined;
|
|
7
|
+
export declare const mirrorCompatHeaders: () => undefined;
|
|
8
|
+
export declare const normalizeCloudSiteUrl: () => undefined;
|
|
9
|
+
export declare const scrubCloudSecretsFromEnv: () => undefined;
|
|
10
|
+
export declare const __resetCloudBaseUrlCache: () => undefined;
|
|
11
|
+
export declare const resolveCloudTtsBaseUrl: () => undefined;
|
|
12
|
+
export declare const resolveElevenLabsApiKeyForCloudMode: () => undefined;
|
|
13
|
+
export declare const resolveCloudApiBaseUrl: () => undefined;
|
|
14
|
+
export * from "./types";
|
|
15
|
+
export default elizaOSCloudPlugin;
|
|
4
16
|
//# sourceMappingURL=index.browser.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.browser.d.ts","sourceRoot":"","sources":["../index.browser.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.browser.d.ts","sourceRoot":"","sources":["../src/index.browser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAE5C,eAAO,MAAM,kBAAkB,EAAE,MAIhC,CAAC;AASF,wBAAgB,cAAc,CAC5B,IAAI,CAAC,EAAE,uBAAuB,GAAG,uBAAuB,GACvD,MAAM,GAAG,SAAS,CAEpB;AAED,wBAAgB,iBAAiB,IAAI,IAAI,CAAG;AAE5C,eAAO,MAAM,yBAAyB,QAVD,SAU4B,CAAC;AAClE,eAAO,MAAM,0BAA0B,QAXF,SAW6B,CAAC;AACnE,eAAO,MAAM,mBAAmB,QAZK,SAYsB,CAAC;AAC5D,eAAO,MAAM,qBAAqB,QAbG,SAawB,CAAC;AAC9D,eAAO,MAAM,wBAAwB,QAdA,SAc2B,CAAC;AACjE,eAAO,MAAM,wBAAwB,QAfA,SAe2B,CAAC;AACjE,eAAO,MAAM,sBAAsB,QAhBE,SAgByB,CAAC;AAC/D,eAAO,MAAM,mCAAmC,QAjBX,SAiBsC,CAAC;AAK5E,eAAO,MAAM,sBAAsB,QAAO,SAAsB,CAAC;AAEjE,cAAc,SAAS,CAAC;AACxB,eAAe,kBAAkB,CAAC"}
|