@elizaos/plugin-elizacloud 2.0.3-beta.2 → 2.0.3-beta.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/index.node.cjs +32 -8
- package/dist/cjs/index.node.js.map +7 -7
- package/dist/cloud/auth-service-types.js +1 -1
- package/dist/cloud/auth-service-types.js.map +1 -1
- package/dist/cloud/auth.js +1 -1
- package/dist/cloud/auth.js.map +1 -1
- package/dist/cloud/backup.js +1 -1
- package/dist/cloud/backup.js.map +1 -1
- package/dist/cloud/base-url.js +1 -1
- package/dist/cloud/base-url.js.map +1 -1
- package/dist/cloud/bridge-client.js +1 -1
- package/dist/cloud/bridge-client.js.map +1 -1
- package/dist/cloud/clack-observer.js +1 -1
- package/dist/cloud/clack-observer.js.map +1 -1
- package/dist/cloud/cloud-api-key.js +1 -1
- package/dist/cloud/cloud-api-key.js.map +1 -1
- package/dist/cloud/cloud-manager.js +1 -1
- package/dist/cloud/cloud-manager.js.map +1 -1
- package/dist/cloud/cloud-proxy.js +1 -1
- package/dist/cloud/cloud-proxy.js.map +1 -1
- package/dist/cloud/cloud-wallet.js +1 -1
- package/dist/cloud/cloud-wallet.js.map +1 -1
- package/dist/cloud/duffel-client.js +1 -1
- package/dist/cloud/duffel-client.js.map +1 -1
- package/dist/cloud/index.js +914 -11
- package/dist/cloud/index.js.map +13 -4
- package/dist/cloud/lifeops-schedule-sync-client.js +1 -1
- package/dist/cloud/lifeops-schedule-sync-client.js.map +1 -1
- package/dist/cloud/lifeops-schedule-sync-contracts.js +1 -1
- package/dist/cloud/lifeops-schedule-sync-contracts.js.map +1 -1
- package/dist/cloud/managed-payment-clients.js +1 -1
- package/dist/cloud/managed-payment-clients.js.map +1 -1
- package/dist/cloud/null-observer.js +1 -1
- package/dist/cloud/null-observer.js.map +1 -1
- package/dist/cloud/reconnect.js +1 -1
- package/dist/cloud/reconnect.js.map +1 -1
- package/dist/cloud/validate-url.js +1 -1
- package/dist/cloud/validate-url.js.map +1 -1
- package/dist/cloud/x402-payment-handler.js +1 -1
- package/dist/cloud/x402-payment-handler.js.map +1 -1
- package/dist/cloud-providers/cloud-status.js +1 -1
- package/dist/cloud-providers/cloud-status.js.map +1 -1
- package/dist/cloud-providers/container-health.js +1 -1
- package/dist/cloud-providers/container-health.js.map +1 -1
- package/dist/cloud-providers/credit-balance.js +1 -1
- package/dist/cloud-providers/credit-balance.js.map +1 -1
- package/dist/cloud-providers/index.js +1 -1
- package/dist/cloud-providers/index.js.map +1 -1
- package/dist/cloud-providers/model-registry.js +1 -1
- package/dist/cloud-providers/model-registry.js.map +1 -1
- package/dist/cloud-setup.js +1 -1
- package/dist/cloud-setup.js.map +1 -1
- package/dist/cloud-voice-catalog.js +1 -1
- package/dist/cloud-voice-catalog.js.map +2 -2
- package/dist/index.js +45 -16
- package/dist/index.js.map +9 -8
- package/dist/init.js +1 -1
- package/dist/init.js.map +1 -1
- package/dist/lib/cloud-connection.js +1 -1
- package/dist/lib/cloud-connection.js.map +1 -1
- package/dist/lib/cloud-secrets.js +1 -1
- package/dist/lib/cloud-secrets.js.map +1 -1
- package/dist/lib/config-env.js +1 -1
- package/dist/lib/config-env.js.map +1 -1
- package/dist/lib/config-like.js +1 -1
- package/dist/lib/config-like.js.map +1 -1
- package/dist/lib/credential-type-map.js +1 -1
- package/dist/lib/credential-type-map.js.map +1 -1
- package/dist/lib/feature-flags.js +1 -1
- package/dist/lib/feature-flags.js.map +1 -1
- package/dist/lib/http.js +1 -1
- package/dist/lib/http.js.map +1 -1
- package/dist/lib/server-cloud-tts.js +1 -1
- package/dist/lib/server-cloud-tts.js.map +1 -1
- package/dist/lib/state-paths.js +1 -1
- package/dist/lib/state-paths.js.map +1 -1
- package/dist/lib/tts-debug.js +1 -1
- package/dist/lib/tts-debug.js.map +1 -1
- package/dist/models/embeddings.d.ts.map +1 -1
- package/dist/models/embeddings.js +4 -1
- package/dist/models/embeddings.js.map +3 -3
- package/dist/models/image.js +1 -1
- package/dist/models/image.js.map +1 -1
- package/dist/models/index.js +32 -8
- package/dist/models/index.js.map +5 -5
- package/dist/models/research.js +1 -1
- package/dist/models/research.js.map +1 -1
- package/dist/models/speech.js +1 -1
- package/dist/models/speech.js.map +2 -2
- package/dist/models/text.d.ts +1 -0
- package/dist/models/text.d.ts.map +1 -1
- package/dist/models/text.js +30 -8
- package/dist/models/text.js.map +3 -3
- package/dist/models/tokenization.js +1 -1
- package/dist/models/tokenization.js.map +1 -1
- package/dist/models/transcription.js +1 -1
- package/dist/models/transcription.js.map +1 -1
- package/dist/node/index.node.js +32 -8
- package/dist/node/index.node.js.map +7 -7
- package/dist/plugin.js +1 -1
- package/dist/plugin.js.map +1 -1
- package/dist/providers/openai.js +1 -1
- package/dist/providers/openai.js.map +1 -1
- package/dist/register-routes.js +1 -1
- package/dist/register-routes.js.map +1 -1
- package/dist/routes/cloud-billing-routes.js +1 -1
- package/dist/routes/cloud-billing-routes.js.map +1 -1
- package/dist/routes/cloud-coding-container-routes.js +1 -1
- package/dist/routes/cloud-coding-container-routes.js.map +1 -1
- package/dist/routes/cloud-compat-routes.js +1 -1
- package/dist/routes/cloud-compat-routes.js.map +1 -1
- package/dist/routes/cloud-features-routes.js +1 -1
- package/dist/routes/cloud-features-routes.js.map +1 -1
- package/dist/routes/cloud-provisioning.js +1 -1
- package/dist/routes/cloud-provisioning.js.map +1 -1
- package/dist/routes/cloud-relay-routes.js +1 -1
- package/dist/routes/cloud-relay-routes.js.map +1 -1
- package/dist/routes/cloud-routes-autonomous.js +1 -1
- package/dist/routes/cloud-routes-autonomous.js.map +1 -1
- package/dist/routes/cloud-routes.js +1 -1
- package/dist/routes/cloud-routes.js.map +1 -1
- package/dist/routes/cloud-status-routes-autonomous.js +1 -1
- package/dist/routes/cloud-status-routes-autonomous.js.map +1 -1
- package/dist/routes/cloud-status-routes.js +1 -1
- package/dist/routes/cloud-status-routes.js.map +1 -1
- package/dist/routes/home-remote-runner-access-url.js +1 -1
- package/dist/routes/home-remote-runner-access-url.js.map +1 -1
- package/dist/routes/travel-provider-relay-routes.js +1 -1
- package/dist/routes/travel-provider-relay-routes.js.map +1 -1
- package/dist/services/cloud-auth.js +1 -1
- package/dist/services/cloud-auth.js.map +1 -1
- package/dist/services/cloud-backup.js +1 -1
- package/dist/services/cloud-backup.js.map +1 -1
- package/dist/services/cloud-bootstrap.js +1 -1
- package/dist/services/cloud-bootstrap.js.map +1 -1
- package/dist/services/cloud-bridge.js +1 -1
- package/dist/services/cloud-bridge.js.map +1 -1
- package/dist/services/cloud-container.js +1 -1
- package/dist/services/cloud-container.js.map +1 -1
- package/dist/services/cloud-credential-provider.js +1 -1
- package/dist/services/cloud-credential-provider.js.map +1 -1
- package/dist/services/cloud-managed-gateway-relay.js +1 -1
- package/dist/services/cloud-managed-gateway-relay.js.map +1 -1
- package/dist/services/cloud-model-registry.js +1 -1
- package/dist/services/cloud-model-registry.js.map +1 -1
- package/dist/services/index.js +1 -1
- package/dist/services/index.js.map +1 -1
- package/dist/types/cloud.js +1 -1
- package/dist/types/cloud.js.map +1 -1
- package/dist/types/index.js +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/utils/cloud-api.js +1 -1
- package/dist/utils/cloud-api.js.map +1 -1
- package/dist/utils/cloud-sdk/client.js +1 -1
- package/dist/utils/cloud-sdk/client.js.map +1 -1
- package/dist/utils/cloud-sdk/http.js +1 -1
- package/dist/utils/cloud-sdk/http.js.map +1 -1
- package/dist/utils/cloud-sdk/index.js +1 -1
- package/dist/utils/cloud-sdk/index.js.map +1 -1
- package/dist/utils/cloud-sdk/public-routes.js +1 -1
- package/dist/utils/cloud-sdk/public-routes.js.map +1 -1
- package/dist/utils/cloud-sdk/types.js +1 -1
- package/dist/utils/cloud-sdk/types.js.map +1 -1
- package/dist/utils/config.js +1 -1
- package/dist/utils/config.js.map +1 -1
- package/dist/utils/events.js +1 -1
- package/dist/utils/events.js.map +1 -1
- package/dist/utils/helpers.js +1 -1
- package/dist/utils/helpers.js.map +1 -1
- package/dist/utils/responses-output.js +1 -1
- package/dist/utils/responses-output.js.map +1 -1
- package/dist/utils/sdk-client.js +1 -1
- package/dist/utils/sdk-client.js.map +1 -1
- package/dist/utils/waifu-metering.js +1 -1
- package/dist/utils/waifu-metering.js.map +1 -1
- package/package.json +6 -5
- package/registry-entry.json +208 -0
- package/src/cloud-voice-catalog.ts +2 -2
- package/src/index.ts +1 -1
- package/src/models/embeddings.ts +9 -0
- package/src/models/speech.ts +2 -2
- package/src/models/text.ts +54 -6
|
@@ -5,6 +5,6 @@
|
|
|
5
5
|
"/**\n * Heartbeat monitor with auto-reconnect via exponential backoff.\n */\n\nimport { logger } from \"@elizaos/core\";\nimport type { ElizaCloudClient } from \"./bridge-client.js\";\n\nexport interface ConnectionMonitorCallbacks {\n onDisconnect: () => void;\n onReconnect: () => void;\n onStatusChange?: (\n status: \"connected\" | \"reconnecting\" | \"disconnected\",\n ) => void;\n}\n\nexport class ConnectionMonitor {\n private timer: ReturnType<typeof setInterval> | null = null;\n private consecutiveFailures = 0;\n private reconnecting = false;\n\n constructor(\n private client: ElizaCloudClient,\n private agentId: string,\n private callbacks: ConnectionMonitorCallbacks,\n private heartbeatIntervalMs: number = 30_000,\n private maxFailures: number = 3,\n ) {}\n\n start(): void {\n if (this.timer) return;\n logger.info(\n `[cloud-monitor] Starting connection monitor (interval: ${this.heartbeatIntervalMs}ms, maxFailures: ${this.maxFailures})`,\n );\n this.consecutiveFailures = 0;\n this.timer = setInterval(() => {\n this.tick();\n }, this.heartbeatIntervalMs);\n }\n\n stop(): void {\n if (this.timer) {\n clearInterval(this.timer);\n this.timer = null;\n }\n this.consecutiveFailures = 0;\n this.reconnecting = false;\n logger.info(\"[cloud-monitor] Connection monitor stopped\");\n }\n\n isMonitoring(): boolean {\n return this.timer !== null;\n }\n\n private async tick(): Promise<void> {\n if (this.reconnecting) return;\n\n const alive = await this.client.heartbeat(this.agentId).catch(() => false);\n\n if (alive) {\n if (this.consecutiveFailures > 0) {\n this.consecutiveFailures = 0;\n this.callbacks.onStatusChange?.(\"connected\");\n }\n return;\n }\n\n this.consecutiveFailures++;\n logger.warn(\n `[cloud-monitor] Heartbeat failed (${this.consecutiveFailures}/${this.maxFailures})`,\n );\n\n if (this.consecutiveFailures >= this.maxFailures) {\n // Don't emit \"disconnected\" here — attemptReconnect() will emit\n // \"reconnecting\" first, and only emits \"disconnected\" if all\n // retry attempts fail. This avoids a misleading disconnected→\n // reconnecting flicker for callers.\n this.callbacks.onDisconnect();\n await this.attemptReconnect();\n }\n }\n\n private async attemptReconnect(): Promise<void> {\n this.reconnecting = true;\n this.callbacks.onStatusChange?.(\"reconnecting\");\n\n let delay = 3_000;\n for (let attempt = 1; attempt <= 10; attempt++) {\n logger.info(`[cloud-monitor] Reconnect attempt ${attempt}/10...`);\n const ok = await this.client\n .provision(this.agentId)\n .then(() => true)\n .catch(() => false);\n\n if (ok) {\n logger.info(\"[cloud-monitor] Reconnection successful\");\n this.consecutiveFailures = 0;\n this.reconnecting = false;\n this.callbacks.onStatusChange?.(\"connected\");\n this.callbacks.onReconnect();\n return;\n }\n\n await new Promise((r) => setTimeout(r, delay));\n delay = Math.min(delay * 2, 60_000);\n }\n\n logger.error(\"[cloud-monitor] Failed to reconnect after 10 attempts\");\n this.reconnecting = false;\n this.callbacks.onStatusChange?.(\"disconnected\");\n }\n}\n"
|
|
6
6
|
],
|
|
7
7
|
"mappings": ";;;;;;;;;;;;;;;;;;;AAIA;AAAA;AAWO,MAAM,kBAAkB;AAAA,EAMnB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EATF,QAA+C;AAAA,EAC/C,sBAAsB;AAAA,EACtB,eAAe;AAAA,EAEvB,WAAW,CACD,QACA,SACA,WACA,sBAA8B,OAC9B,cAAsB,GAC9B;AAAA,IALQ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,EAGV,KAAK,GAAS;AAAA,IACZ,IAAI,KAAK;AAAA,MAAO;AAAA,IAChB,OAAO,KACL,0DAA0D,KAAK,uCAAuC,KAAK,cAC7G;AAAA,IACA,KAAK,sBAAsB;AAAA,IAC3B,KAAK,QAAQ,YAAY,MAAM;AAAA,MAC7B,KAAK,KAAK;AAAA,OACT,KAAK,mBAAmB;AAAA;AAAA,EAG7B,IAAI,GAAS;AAAA,IACX,IAAI,KAAK,OAAO;AAAA,MACd,cAAc,KAAK,KAAK;AAAA,MACxB,KAAK,QAAQ;AAAA,IACf;AAAA,IACA,KAAK,sBAAsB;AAAA,IAC3B,KAAK,eAAe;AAAA,IACpB,OAAO,KAAK,4CAA4C;AAAA;AAAA,EAG1D,YAAY,GAAY;AAAA,IACtB,OAAO,KAAK,UAAU;AAAA;AAAA,OAGV,KAAI,GAAkB;AAAA,IAClC,IAAI,KAAK;AAAA,MAAc;AAAA,IAEvB,MAAM,QAAQ,MAAM,KAAK,OAAO,UAAU,KAAK,OAAO,EAAE,MAAM,MAAM,KAAK;AAAA,IAEzE,IAAI,OAAO;AAAA,MACT,IAAI,KAAK,sBAAsB,GAAG;AAAA,QAChC,KAAK,sBAAsB;AAAA,QAC3B,KAAK,UAAU,iBAAiB,WAAW;AAAA,MAC7C;AAAA,MACA;AAAA,IACF;AAAA,IAEA,KAAK;AAAA,IACL,OAAO,KACL,qCAAqC,KAAK,uBAAuB,KAAK,cACxE;AAAA,IAEA,IAAI,KAAK,uBAAuB,KAAK,aAAa;AAAA,MAKhD,KAAK,UAAU,aAAa;AAAA,MAC5B,MAAM,KAAK,iBAAiB;AAAA,IAC9B;AAAA;AAAA,OAGY,iBAAgB,GAAkB;AAAA,IAC9C,KAAK,eAAe;AAAA,IACpB,KAAK,UAAU,iBAAiB,cAAc;AAAA,IAE9C,IAAI,QAAQ;AAAA,IACZ,SAAS,UAAU,EAAG,WAAW,IAAI,WAAW;AAAA,MAC9C,OAAO,KAAK,qCAAqC,eAAe;AAAA,MAChE,MAAM,KAAK,MAAM,KAAK,OACnB,UAAU,KAAK,OAAO,EACtB,KAAK,MAAM,IAAI,EACf,MAAM,MAAM,KAAK;AAAA,MAEpB,IAAI,IAAI;AAAA,QACN,OAAO,KAAK,yCAAyC;AAAA,QACrD,KAAK,sBAAsB;AAAA,QAC3B,KAAK,eAAe;AAAA,QACpB,KAAK,UAAU,iBAAiB,WAAW;AAAA,QAC3C,KAAK,UAAU,YAAY;AAAA,QAC3B;AAAA,MACF;AAAA,MAEA,MAAM,IAAI,QAAQ,CAAC,MAAM,WAAW,GAAG,KAAK,CAAC;AAAA,MAC7C,QAAQ,KAAK,IAAI,QAAQ,GAAG,KAAM;AAAA,IACpC;AAAA,IAEA,OAAO,MAAM,uDAAuD;AAAA,IACpE,KAAK,eAAe;AAAA,IACpB,KAAK,UAAU,iBAAiB,cAAc;AAAA;AAElD;",
|
|
8
|
-
"debugId": "
|
|
8
|
+
"debugId": "531128DB12411F3B64756E2164756E21",
|
|
9
9
|
"names": []
|
|
10
10
|
}
|
|
@@ -5,6 +5,6 @@
|
|
|
5
5
|
"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"
|
|
6
6
|
],
|
|
7
7
|
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AACA;AACA;AAqBA,SAAS,iBAAiB,CAAC,OAAuB;AAAA,EAChD,OAAO,MACJ,KAAK,EACL,YAAY,EACZ,QAAQ,YAAY,EAAE;AAAA;AAG3B,SAAS,mBAAmB,CAAC,QAA+B;AAAA,EAC1D,MAAM,QAAQ,OAAO,MAAM,GAAG;AAAA,EAC9B,IAAI,MAAM,SAAS,KAAK,MAAM,SAAS;AAAA,IAAG,OAAO;AAAA,EAEjD,MAAM,SAAS,MAAM,IAAI,CAAC,SAAS;AAAA,IACjC,IAAI,CAAC,mBAAmB,KAAK,IAAI;AAAA,MAAG,OAAO,OAAO;AAAA,IAClD,OAAO,OAAO,SAAS,MAAM,EAAE;AAAA,GAChC;AAAA,EACD,IAAI,OAAO,KAAK,CAAC,UAAU,CAAC,OAAO,SAAS,KAAK,CAAC;AAAA,IAAG,OAAO;AAAA,EAE5D,OAAO,IAAI,MAAM,OAAO,WAAW,IAAI,CAAC,GAAG,OAAO,EAAE,IAAI;AAAA,EACxD,MAAM,SAAS,CAAC,MAAM,GAAG,KAAK,KAAM,MAAM,GAAG,KAAK,GAAI;AAAA,EACtD,OAAO,OAAO,KAAK,GAAG;AAAA;AAGxB,SAAS,gBAAgB,CAAC,IAA2B;AAAA,EACnD,IAAI;AAAA,IACF,OAAO,IAAI,IAAI,WAAW,MAAM,EAAE,SAAS,QAAQ,YAAY,EAAE;AAAA,IACjE,MAAM;AAAA,IACN,OAAO;AAAA;AAAA;AAIX,SAAS,oBAAoB,CAAC,IAAoB;AAAA,EAChD,MAAM,OAAO,kBAAkB,EAAE,EAAE,MAAM,GAAG,EAAE;AAAA,EAC9C,IAAI,CAAC;AAAA,IAAM,OAAO;AAAA,EAElB,IAAI,aAAa;AAAA,EACjB,IAAI,IAAI,KAAK,UAAU,MAAM,GAAG;AAAA,IAC9B,aAAa,iBAAiB,UAAU,KAAK;AAAA,EAC/C;AAAA,EAEA,IAAI,SAAwB;AAAA,EAC5B,IAAI,WAAW,WAAW,SAAS,GAAG;AAAA,IACpC,SAAS,WAAW,MAAM,UAAU,MAAM;AAAA,EAC5C,EAAO,SAAI,WAAW,WAAW,iBAAiB,GAAG;AAAA,IACnD,SAAS,WAAW,MAAM,kBAAkB,MAAM;AAAA,EACpD;AAAA,EACA,IAAI,CAAC;AAAA,IAAQ,OAAO;AAAA,EAEpB,IAAI,IAAI,KAAK,MAAM,MAAM;AAAA,IAAG,OAAO;AAAA,EACnC,OAAO,oBAAoB,MAAM,KAAK;AAAA;AAGxC,SAAS,MAAM,CAAC,MAAc,QAAgD;AAAA,EAC5E,MAAM,SAAS,eAAe,IAAI;AAAA,EAClC,IAAI,WAAW,MAAM;AAAA,IACnB,MAAM,IAAI,MAAM,mCAAmC,MAAM;AAAA,EAC3D;AAAA,EACA,MAAM,QAAQ,KAAK;AAAA,EACnB,MAAM,OAAO,UAAU,KAAK,IAAK,cAAc,UAAW;AAAA,EAC1D,OAAO,EAAE,MAAM,SAAS,MAAM,KAAK;AAAA;AAGrC,SAAS,cAAc,CAAC,IAA2B;AAAA,EACjD,MAAM,QAAQ,GAAG,MAAM,GAAG;AAAA,EAC1B,IAAI,MAAM,WAAW;AAAA,IAAG,OAAO;AAAA,EAE/B,IAAI,QAAQ;AAAA,EACZ,WAAW,QAAQ,OAAO;AAAA,IACxB,IAAI,CAAC,YAAY,KAAK,IAAI;AAAA,MAAG,OAAO;AAAA,IACpC,MAAM,QAAQ,OAAO,SAAS,MAAM,EAAE;AAAA,IACtC,IAAI,CAAC,OAAO,UAAU,KAAK,KAAK,QAAQ,KAAK,QAAQ;AAAA,MAAK,OAAO;AAAA,IACjE,QAAS,SAAS,IAAK;AAAA,EACzB;AAAA,EAEA,OAAO,UAAU;AAAA;AAGnB,SAAS,aAAa,CAAC,IAAqB;AAAA,EAC1C,MAAM,QAAQ,eAAe,EAAE;AAAA,EAC/B,IAAI,UAAU;AAAA,IAAM,OAAO;AAAA,EAC3B,OAAO,mBAAmB,KAAK,CAAC,UAAU,QAAQ,KAAK,UAAU,KAAK,IAAI;AAAA;AAG5E,SAAS,aAAa,CAAC,IAAqB;AAAA,EAC1C,MAAM,aAAa,GAAG,YAAY;AAAA,EAClC,OACE,eAAe,QACf,eAAe,SACf,qBAAqB,KAAK,UAAU,KACpC,sBAAsB,KAAK,UAAU,KACrC,WAAW,WAAW,IAAI;AAAA;AAI9B,SAAS,WAAW,CAAC,IAAqB;AAAA,EACxC,MAAM,aAAa,qBAAqB,EAAE;AAAA,EAC1C,MAAM,SAAS,IAAI,KAAK,UAAU;AAAA,EAClC,IAAI,WAAW;AAAA,IAAG,OAAO,cAAc,UAAU;AAAA,EACjD,IAAI,WAAW;AAAA,IAAG,OAAO,cAAc,UAAU;AAAA,EACjD,OAAO;AAAA;AAGT,eAAsB,oBAAoB,CACxC,QACwB;AAAA,EACxB,IAAI;AAAA,EACJ,IAAI;AAAA,IACF,SAAS,IAAI,IAAI,MAAM;AAAA,IACvB,MAAM;AAAA,IACN,OAAO,4BAA4B;AAAA;AAAA,EAGrC,IAAI,OAAO,aAAa,UAAU;AAAA,IAChC,OAAO,uCAAuC,OAAO,iBAAiB;AAAA,EACxE;AAAA,EAEA,MAAM,WAAW,kBAAkB,OAAO,QAAQ;AAAA,EAClD,IAAI,CAAC,UAAU;AAAA,IACb,OAAO,4BAA4B;AAAA,EACrC;AAAA,EAEA,IACE,aAAa,eACb,SAAS,SAAS,YAAY,KAC9B,SAAS,SAAS,QAAQ,GAC1B;AAAA,IACA,OAAO,mBAAmB;AAAA,EAC5B;AAAA,EAGA,MAAM,WAAW,QAAQ,IAAI,WAAW,KAAK,EAAE,YAAY;AAAA,EAC3D,IACE,MAIA;AAAA,IACA,OAAO;AAAA,EACT;AAAA,EAEA,IAAI,YAAY,QAAQ,GAAG;AAAA,IACzB,OAAO,mBAAmB;AAAA,EAC5B;AAAA,EAEA,IAAI;AAAA,IACF,MAAM,UAAU,MAAM,aAAa,UAAU,EAAE,KAAK,KAAK,CAAC;AAAA,IAC1D,MAAM,YAAY,MAAM,QAAQ,OAAO,IAAI,UAAU,CAAC,OAAO;AAAA,IAC7D,WAAW,SAAS,WAAW;AAAA,MAC7B,MAAM,KACJ,OAAO,UAAU,WACb,QACC,MAA8B;AAAA,MACrC,IAAI,YAAY,EAAE,GAAG;AAAA,QACnB,OACE,mBAAmB,uBAAuB,SAC1C;AAAA,MAEJ;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,OAAO,mBAAmB;AAAA;AAAA,EAG5B,OAAO;AAAA;AAAA,IArLH,cAEA;AAAA;AAAA,EAFA,eAAe,UAAU,IAAI,MAAM;AAAA,EAEnC,qBAA4D;AAAA,IAChE,OAAO,WAAW,CAAC;AAAA,IACnB,OAAO,YAAY,CAAC;AAAA,IACpB,OAAO,cAAc,EAAE;AAAA,IACvB,OAAO,eAAe,EAAE;AAAA,IACxB,OAAO,cAAc,EAAE;AAAA,IACvB,OAAO,aAAa,CAAC;AAAA,IACrB,OAAO,eAAe,EAAE;AAAA,IACxB,OAAO,aAAa,EAAE;AAAA,IACtB,OAAO,cAAc,EAAE;AAAA,IACvB,OAAO,aAAa,EAAE;AAAA,IACtB,OAAO,gBAAgB,EAAE;AAAA,IACzB,OAAO,eAAe,EAAE;AAAA,IACxB,OAAO,aAAa,CAAC;AAAA,IACrB,OAAO,aAAa,CAAC;AAAA,EACvB;AAAA;",
|
|
8
|
-
"debugId": "
|
|
8
|
+
"debugId": "A764CAB630724B7864756E2164756E21",
|
|
9
9
|
"names": []
|
|
10
10
|
}
|
|
@@ -5,6 +5,6 @@
|
|
|
5
5
|
"/**\n * x402 (HTTP 402 Payment Required) handler for Eliza Cloud relays.\n *\n * Spec reference: https://www.x402.org\n *\n * When the user's Cloud credit balance can't cover a metered call, the\n * Cloud relay returns HTTP 402 with a `payment-requirements` envelope —\n * either as a `WWW-Authenticate: x402 <json>` header or as a JSON body\n * with a top-level `paymentRequirements` array. Each requirement\n * describes one acceptable payment option (asset, network, recipient,\n * amount).\n *\n * This module is intentionally thin:\n * - `parseX402Response` extracts requirements from a Response.\n * - `PaymentRequiredError` carries them up to the action layer.\n * - `requestPayment` is the agent-side bridge: today it surfaces the\n * requirement back to the owner via the runtime logger so the UI /\n * planner can route the user to the existing wallet top-up flow.\n * Auto-pay intentionally lives outside this bridge — the actual money\n * movement is Cloud-side and gated by the wallet UI (commandment 4).\n *\n * No silent failures: a malformed 402 throws so the action layer can\n * surface a clear \"payment-required\" message rather than treating the\n * upstream as a generic HTTP error.\n */\n\nimport { type IAgentRuntime, logger } from \"@elizaos/core\";\n\n/**\n * One acceptable payment option as advertised by the server.\n *\n * Fields mirror the x402 spec's `paymentRequirements` entry. We type\n * everything as required so silent partial parses are impossible — the\n * parser either yields a complete requirement or rejects it.\n */\nexport interface X402PaymentRequirement {\n /** Decimal amount in the asset's smallest unit (e.g. \"1500000\" for\n * 1.50 USDC). String, not number, to preserve precision. */\n readonly amount: string;\n /** Asset symbol or ERC-20 contract address (e.g. \"USDC\"). */\n readonly asset: string;\n /** Network identifier (e.g. \"base\", \"ethereum\", \"solana\"). */\n readonly network: string;\n /** Recipient address that should receive the payment. */\n readonly payTo: string;\n /** Payment scheme — currently x402 supports \"exact\" only. */\n readonly scheme: string;\n /** ISO-8601 deadline after which the requirement is no longer valid. */\n readonly expiresAt: string | null;\n /** Human-readable description of the resource being purchased. */\n readonly description: string | null;\n}\n\n/**\n * Wire shape we accept from JSON bodies. Loose at the boundary, strict\n * after parsing.\n */\ninterface RawRequirement {\n readonly amount?: unknown;\n readonly asset?: unknown;\n readonly network?: unknown;\n readonly payTo?: unknown;\n readonly scheme?: unknown;\n readonly expiresAt?: unknown;\n readonly description?: unknown;\n}\n\ninterface RawX402Body {\n readonly paymentRequirements?: ReadonlyArray<RawRequirement>;\n readonly accepts?: ReadonlyArray<RawRequirement>;\n}\n\nfunction readString(value: unknown): string | null {\n if (typeof value !== \"string\") return null;\n const trimmed = value.trim();\n return trimmed.length > 0 ? trimmed : null;\n}\n\nfunction readAmount(value: unknown): string | null {\n if (typeof value === \"string\") {\n const trimmed = value.trim();\n return trimmed.length > 0 ? trimmed : null;\n }\n if (typeof value === \"number\" && Number.isFinite(value)) {\n return String(value);\n }\n return null;\n}\n\nfunction normalizeRequirement(\n raw: RawRequirement | null | undefined,\n): X402PaymentRequirement | null {\n if (!raw || typeof raw !== \"object\") return null;\n const amount = readAmount(raw.amount);\n const asset = readString(raw.asset);\n const network = readString(raw.network);\n const payTo = readString(raw.payTo);\n if (!amount || !asset || !network || !payTo) return null;\n const scheme = readString(raw.scheme) ?? \"exact\";\n return {\n amount,\n asset,\n network,\n payTo,\n scheme,\n expiresAt: readString(raw.expiresAt),\n description: readString(raw.description),\n };\n}\n\nfunction parseRequirementsArray(\n raw: ReadonlyArray<RawRequirement> | undefined,\n): X402PaymentRequirement[] {\n if (!Array.isArray(raw)) return [];\n const out: X402PaymentRequirement[] = [];\n for (const entry of raw) {\n const normalized = normalizeRequirement(entry);\n if (normalized) out.push(normalized);\n }\n return out;\n}\n\n/**\n * Pull payment requirements out of an x402 response. Tries the header\n * form first (lowest-overhead per spec), then falls back to the JSON\n * body. Returns `null` when the response carries no parseable\n * requirements — callers should treat that as a generic 402 and\n * surface the upstream status text.\n */\nexport async function parseX402Response(\n response: Response,\n): Promise<X402PaymentRequirement[] | null> {\n const headerValue = response.headers.get(\"www-authenticate\");\n if (headerValue?.toLowerCase().startsWith(\"x402\")) {\n const jsonPart = headerValue.slice(4).trim();\n if (jsonPart.length > 0) {\n const parsed = JSON.parse(jsonPart) as RawX402Body | RawRequirement[];\n const requirements = Array.isArray(parsed)\n ? parseRequirementsArray(parsed)\n : parseRequirementsArray(parsed.paymentRequirements ?? parsed.accepts);\n if (requirements.length > 0) return requirements;\n }\n }\n // Fall back to body parse. Clone so the caller can still read it.\n const cloned = response.clone();\n const text = await cloned.text();\n if (text.length === 0) return null;\n const body = JSON.parse(text) as RawX402Body;\n const requirements = parseRequirementsArray(\n body.paymentRequirements ?? body.accepts,\n );\n return requirements.length > 0 ? requirements : null;\n}\n\n/**\n * Thrown by adapters when an upstream metered call returns 402 with\n * actionable payment requirements. Action handlers convert this into an\n * approval-queue entry so the user sees both the cost and the\n * top-up prompt together.\n */\nexport class PaymentRequiredError extends Error {\n readonly code = \"PAYMENT_REQUIRED\" as const;\n readonly requirements: ReadonlyArray<X402PaymentRequirement>;\n\n constructor(\n requirements: ReadonlyArray<X402PaymentRequirement>,\n message?: string,\n ) {\n const text =\n message ??\n `Eliza Cloud returned HTTP 402 — your credit balance can't cover this call. ${requirements.length} payment option(s) available.`;\n super(text);\n this.name = \"PaymentRequiredError\";\n this.requirements = requirements;\n }\n}\n\nexport interface PaymentReceipt {\n readonly status: \"surfaced\" | \"paid\";\n readonly requirement: X402PaymentRequirement;\n /** Transaction id when status === \"paid\", null when only surfaced. */\n readonly txId: string | null;\n}\n\n/**\n * Bridge from a raw payment requirement to user action. For now this\n * does not auto-pay: the actual money movement happens in the existing\n * wallet UI (Cloud-side). We log the requirement so the agent's\n * messaging surface and the desktop dev console both pick it up, then\n * return a \"surfaced\" receipt for the action layer to forward into the\n * approval queue.\n */\nexport async function requestPayment(\n runtime: IAgentRuntime,\n requirements: ReadonlyArray<X402PaymentRequirement>,\n): Promise<PaymentReceipt> {\n if (requirements.length === 0) {\n throw new Error(\n \"[x402] requestPayment called with no requirements — adapter bug\",\n );\n }\n const preferred = requirements[0];\n logger.warn(\n {\n boundary: \"elizacloud\",\n integration: \"x402\",\n asset: preferred.asset,\n network: preferred.network,\n amount: preferred.amount,\n runtimeId: runtime.agentId,\n },\n `[x402] payment-required: ${preferred.amount} ${preferred.asset} on ${preferred.network} → ${preferred.payTo}${preferred.description ? ` (${preferred.description})` : \"\"}`,\n );\n return { status: \"surfaced\", requirement: preferred, txId: null };\n}\n"
|
|
6
6
|
],
|
|
7
7
|
"mappings": "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",
|
|
8
|
-
"debugId": "
|
|
8
|
+
"debugId": "B5A0403551BAF62164756E2164756E21",
|
|
9
9
|
"names": []
|
|
10
10
|
}
|
|
@@ -5,6 +5,6 @@
|
|
|
5
5
|
"/**\n * cloudStatusProvider — Container and connection status in agent state.\n */\n\nimport type { IAgentRuntime, Memory, Provider, ProviderResult, State } from \"@elizaos/core\";\nimport type { CloudAuthService } from \"../services/cloud-auth\";\nimport type { CloudBridgeService } from \"../services/cloud-bridge\";\nimport type { CloudContainerService } from \"../services/cloud-container\";\n\nconst MAX_CONTAINER_SUMMARIES = 10;\n\nexport const cloudStatusProvider: Provider = {\n name: \"elizacloud_status\",\n description: \"ElizaCloud container and connection status\",\n descriptionCompressed: \"ElizaCloud container/connection status.\",\n dynamic: true,\n position: 90,\n contexts: [\"settings\", \"finance\"],\n contextGate: { anyOf: [\"settings\", \"finance\"] },\n cacheStable: false,\n cacheScope: \"turn\",\n async get(runtime: IAgentRuntime, _message: Memory, _state: State): Promise<ProviderResult> {\n try {\n const auth = runtime.getService(\"CLOUD_AUTH\") as CloudAuthService | undefined;\n if (!auth?.isAuthenticated()) {\n return {\n text: \"ElizaCloud: Not authenticated\",\n values: { cloudAuthenticated: false },\n };\n }\n\n const containerSvc = runtime.getService(\"CLOUD_CONTAINER\") as\n | CloudContainerService\n | undefined;\n const bridgeSvc = runtime.getService(\"CLOUD_BRIDGE\") as CloudBridgeService | undefined;\n const containers = containerSvc?.getTrackedContainers() ?? [];\n const connected = bridgeSvc?.getConnectedContainerIds() ?? [];\n\n const running = containers.filter((c) => c.status === \"running\").length;\n const deploying = containers.filter(\n (c) => c.status === \"pending\" || c.status === \"building\" || c.status === \"deploying\"\n ).length;\n\n const summaries = containers.slice(0, MAX_CONTAINER_SUMMARIES).map((c) => ({\n id: c.id,\n name: c.name,\n status: c.status,\n url: c.load_balancer_url,\n billing: c.billing_status,\n bridged: connected.includes(c.id),\n }));\n\n const lines = [\n `ElizaCloud: ${containers.length} container(s), ${running} running, ${connected.length} bridged`,\n ...summaries.map(\n (c) =>\n ` - ${c.name} [${c.status}]${c.url ? ` @ ${c.url}` : \"\"}${c.bridged ? \" (bridged)\" : \"\"}`\n ),\n ];\n\n return {\n text: lines.join(\"\\n\"),\n values: {\n cloudAuthenticated: true,\n totalContainers: containers.length,\n runningContainers: running,\n deployingContainers: deploying,\n },\n data: { containers: summaries, truncated: containers.length > summaries.length },\n };\n } catch {\n return { text: \"\", values: {}, data: {} };\n }\n },\n};\n"
|
|
6
6
|
],
|
|
7
7
|
"mappings": ";;;;;;;;;;;;;;;;;;;AASA,IAAM,0BAA0B;AAEzB,IAAM,sBAAgC;AAAA,EAC3C,MAAM;AAAA,EACN,aAAa;AAAA,EACb,uBAAuB;AAAA,EACvB,SAAS;AAAA,EACT,UAAU;AAAA,EACV,UAAU,CAAC,YAAY,SAAS;AAAA,EAChC,aAAa,EAAE,OAAO,CAAC,YAAY,SAAS,EAAE;AAAA,EAC9C,aAAa;AAAA,EACb,YAAY;AAAA,OACN,IAAG,CAAC,SAAwB,UAAkB,QAAwC;AAAA,IAC1F,IAAI;AAAA,MACF,MAAM,OAAO,QAAQ,WAAW,YAAY;AAAA,MAC5C,IAAI,CAAC,MAAM,gBAAgB,GAAG;AAAA,QAC5B,OAAO;AAAA,UACL,MAAM;AAAA,UACN,QAAQ,EAAE,oBAAoB,MAAM;AAAA,QACtC;AAAA,MACF;AAAA,MAEA,MAAM,eAAe,QAAQ,WAAW,iBAAiB;AAAA,MAGzD,MAAM,YAAY,QAAQ,WAAW,cAAc;AAAA,MACnD,MAAM,aAAa,cAAc,qBAAqB,KAAK,CAAC;AAAA,MAC5D,MAAM,YAAY,WAAW,yBAAyB,KAAK,CAAC;AAAA,MAE5D,MAAM,UAAU,WAAW,OAAO,CAAC,MAAM,EAAE,WAAW,SAAS,EAAE;AAAA,MACjE,MAAM,YAAY,WAAW,OAC3B,CAAC,MAAM,EAAE,WAAW,aAAa,EAAE,WAAW,cAAc,EAAE,WAAW,WAC3E,EAAE;AAAA,MAEF,MAAM,YAAY,WAAW,MAAM,GAAG,uBAAuB,EAAE,IAAI,CAAC,OAAO;AAAA,QACzE,IAAI,EAAE;AAAA,QACN,MAAM,EAAE;AAAA,QACR,QAAQ,EAAE;AAAA,QACV,KAAK,EAAE;AAAA,QACP,SAAS,EAAE;AAAA,QACX,SAAS,UAAU,SAAS,EAAE,EAAE;AAAA,MAClC,EAAE;AAAA,MAEF,MAAM,QAAQ;AAAA,QACZ,eAAe,WAAW,wBAAwB,oBAAoB,UAAU;AAAA,QAChF,GAAG,UAAU,IACX,CAAC,MACC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,MAAM,EAAE,QAAQ,KAAK,EAAE,UAAU,eAAe,IAC1F;AAAA,MACF;AAAA,MAEA,OAAO;AAAA,QACL,MAAM,MAAM,KAAK;AAAA,CAAI;AAAA,QACrB,QAAQ;AAAA,UACN,oBAAoB;AAAA,UACpB,iBAAiB,WAAW;AAAA,UAC5B,mBAAmB;AAAA,UACnB,qBAAqB;AAAA,QACvB;AAAA,QACA,MAAM,EAAE,YAAY,WAAW,WAAW,WAAW,SAAS,UAAU,OAAO;AAAA,MACjF;AAAA,MACA,MAAM;AAAA,MACN,OAAO,EAAE,MAAM,IAAI,QAAQ,CAAC,GAAG,MAAM,CAAC,EAAE;AAAA;AAAA;AAG9C;",
|
|
8
|
-
"debugId": "
|
|
8
|
+
"debugId": "CB2950615438FAEE64756E2164756E21",
|
|
9
9
|
"names": []
|
|
10
10
|
}
|
|
@@ -5,6 +5,6 @@
|
|
|
5
5
|
"/**\n * containerHealthProvider — Container health in agent state (private, on-demand).\n */\n\nimport type { IAgentRuntime, Memory, Provider, ProviderResult, State } from \"@elizaos/core\";\nimport type { CloudAuthService } from \"../services/cloud-auth\";\nimport type { CloudContainerService } from \"../services/cloud-container\";\n\nconst MAX_HEALTH_REPORTS = 10;\n\nexport const containerHealthProvider: Provider = {\n name: \"elizacloud_health\",\n description: \"ElizaCloud container health\",\n descriptionCompressed: \"ElizaCloud container health.\",\n dynamic: true,\n position: 92,\n private: true,\n contexts: [\"settings\", \"finance\"],\n contextGate: { anyOf: [\"settings\", \"finance\"] },\n cacheStable: false,\n cacheScope: \"turn\",\n async get(runtime: IAgentRuntime, _message: Memory, _state: State): Promise<ProviderResult> {\n try {\n const auth = runtime.getService(\"CLOUD_AUTH\") as CloudAuthService | undefined;\n if (!auth?.isAuthenticated()) return { text: \"\" };\n\n const svc = runtime.getService(\"CLOUD_CONTAINER\") as CloudContainerService | undefined;\n const running = svc?.getTrackedContainers().filter((c) => c.status === \"running\") ?? [];\n if (running.length === 0)\n return {\n text: \"No running containers.\",\n values: { healthyContainers: 0 },\n };\n\n // NOTE: True health would require hitting each container's health_check_path\n // endpoint over the network. We approximate here using locally-cached state:\n // a container is considered healthy when it is running, billing is active,\n // and there is no recorded error message.\n const reports = running.slice(0, MAX_HEALTH_REPORTS).map((c) => ({\n id: c.id,\n name: c.name,\n healthy: c.status === \"running\" && c.billing_status === \"active\" && !c.error_message,\n status: c.status,\n billing: c.billing_status,\n }));\n\n const healthy = reports.filter((r) => r.healthy).length;\n const text = [\n `Health: ${healthy}/${reports.length} healthy`,\n ...reports.map(\n (r) =>\n ` - ${r.name}: ${r.healthy ? \"OK\" : \"UNHEALTHY\"} (status=${r.status}, billing=${r.billing})`\n ),\n ].join(\"\\n\");\n\n return {\n text,\n values: {\n healthyContainers: healthy,\n unhealthyContainers: reports.length - healthy,\n },\n data: { reports, truncated: running.length > reports.length },\n };\n } catch {\n return { text: \"\", values: {}, data: {} };\n }\n },\n};\n"
|
|
6
6
|
],
|
|
7
7
|
"mappings": ";;;;;;;;;;;;;;;;;;;AAQA,IAAM,qBAAqB;AAEpB,IAAM,0BAAoC;AAAA,EAC/C,MAAM;AAAA,EACN,aAAa;AAAA,EACb,uBAAuB;AAAA,EACvB,SAAS;AAAA,EACT,UAAU;AAAA,EACV,SAAS;AAAA,EACT,UAAU,CAAC,YAAY,SAAS;AAAA,EAChC,aAAa,EAAE,OAAO,CAAC,YAAY,SAAS,EAAE;AAAA,EAC9C,aAAa;AAAA,EACb,YAAY;AAAA,OACN,IAAG,CAAC,SAAwB,UAAkB,QAAwC;AAAA,IAC1F,IAAI;AAAA,MACF,MAAM,OAAO,QAAQ,WAAW,YAAY;AAAA,MAC5C,IAAI,CAAC,MAAM,gBAAgB;AAAA,QAAG,OAAO,EAAE,MAAM,GAAG;AAAA,MAEhD,MAAM,MAAM,QAAQ,WAAW,iBAAiB;AAAA,MAChD,MAAM,UAAU,KAAK,qBAAqB,EAAE,OAAO,CAAC,MAAM,EAAE,WAAW,SAAS,KAAK,CAAC;AAAA,MACtF,IAAI,QAAQ,WAAW;AAAA,QACrB,OAAO;AAAA,UACL,MAAM;AAAA,UACN,QAAQ,EAAE,mBAAmB,EAAE;AAAA,QACjC;AAAA,MAMF,MAAM,UAAU,QAAQ,MAAM,GAAG,kBAAkB,EAAE,IAAI,CAAC,OAAO;AAAA,QAC/D,IAAI,EAAE;AAAA,QACN,MAAM,EAAE;AAAA,QACR,SAAS,EAAE,WAAW,aAAa,EAAE,mBAAmB,YAAY,CAAC,EAAE;AAAA,QACvE,QAAQ,EAAE;AAAA,QACV,SAAS,EAAE;AAAA,MACb,EAAE;AAAA,MAEF,MAAM,UAAU,QAAQ,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE;AAAA,MACjD,MAAM,OAAO;AAAA,QACX,WAAW,WAAW,QAAQ;AAAA,QAC9B,GAAG,QAAQ,IACT,CAAC,MACC,OAAO,EAAE,SAAS,EAAE,UAAU,OAAO,uBAAuB,EAAE,mBAAmB,EAAE,UACvF;AAAA,MACF,EAAE,KAAK;AAAA,CAAI;AAAA,MAEX,OAAO;AAAA,QACL;AAAA,QACA,QAAQ;AAAA,UACN,mBAAmB;AAAA,UACnB,qBAAqB,QAAQ,SAAS;AAAA,QACxC;AAAA,QACA,MAAM,EAAE,SAAS,WAAW,QAAQ,SAAS,QAAQ,OAAO;AAAA,MAC9D;AAAA,MACA,MAAM;AAAA,MACN,OAAO,EAAE,MAAM,IAAI,QAAQ,CAAC,GAAG,MAAM,CAAC,EAAE;AAAA;AAAA;AAG9C;",
|
|
8
|
-
"debugId": "
|
|
8
|
+
"debugId": "DE16BB514A03D4A064756E2164756E21",
|
|
9
9
|
"names": []
|
|
10
10
|
}
|
|
@@ -5,6 +5,6 @@
|
|
|
5
5
|
"/** Credit balance in agent state (60s cache). */\n\nimport type { IAgentRuntime, Memory, Provider, ProviderResult, State } from \"@elizaos/core\";\nimport { logger } from \"@elizaos/core\";\nimport type { CloudAuthService } from \"../services/cloud-auth\";\nimport type { CreditBalanceResponse } from \"../types/cloud\";\n\nconst TOP_UP_URL = \"https://www.elizacloud.ai/dashboard/settings?tab=billing\";\nconst creditCaches = new WeakMap<IAgentRuntime, { value: number; at: number }>();\nconst TTL = 60_000;\nconst MAX_CREDIT_TEXT_CHARS = 240;\n\nexport const creditBalanceProvider: Provider = {\n name: \"elizacloud_credits\",\n description: \"ElizaCloud credit balance\",\n descriptionCompressed: \"ElizaCloud credit balance.\",\n dynamic: true,\n contexts: [\"settings\", \"finance\"],\n contextGate: { anyOf: [\"settings\", \"finance\"] },\n cacheStable: false,\n cacheScope: \"turn\",\n position: 91,\n async get(runtime: IAgentRuntime, _message: Memory, _state: State): Promise<ProviderResult> {\n const auth = runtime.getService(\"CLOUD_AUTH\") as CloudAuthService | undefined;\n if (!auth?.isAuthenticated()) return { text: \"\" };\n\n const cached = creditCaches.get(runtime);\n if (cached && Date.now() - cached.at < TTL) {\n const result = format(cached.value);\n return { ...result, text: (result.text ?? \"\").slice(0, MAX_CREDIT_TEXT_CHARS) };\n }\n\n let balance: number;\n try {\n const { data } = await auth.getClient().get<CreditBalanceResponse>(\"/credits/balance\");\n balance = data.balance;\n } catch (err) {\n logger.warn(\n `[CloudCredits] Failed to fetch balance: ${err instanceof Error ? err.message : err}`\n );\n if (cached) {\n const result = format(cached.value);\n return { ...result, text: (result.text ?? \"\").slice(0, MAX_CREDIT_TEXT_CHARS) };\n }\n return { text: \"\", values: { cloudCreditsUnavailable: true }, data: {} };\n }\n creditCaches.set(runtime, { value: balance, at: Date.now() });\n\n if (balance < 1.0) logger.warn(`[CloudCredits] Low balance: $${balance.toFixed(2)}`);\n const result = format(balance);\n return { ...result, text: (result.text ?? \"\").slice(0, MAX_CREDIT_TEXT_CHARS) };\n },\n};\n\nfunction format(balance: number): ProviderResult {\n const low = balance < 2.0;\n const critical = balance < 0.5;\n let text = `ElizaCloud credits: $${balance.toFixed(2)}`;\n if (critical) text += ` (CRITICAL — top up at ${TOP_UP_URL})`;\n else if (low) text += ` (LOW — top up at ${TOP_UP_URL})`;\n return {\n text,\n values: {\n cloudCredits: balance,\n cloudCreditsLow: low,\n cloudCreditsCritical: critical,\n cloudTopUpUrl: TOP_UP_URL,\n },\n };\n}\n"
|
|
6
6
|
],
|
|
7
7
|
"mappings": ";;;;;;;;;;;;;;;;;;;AAGA;AAIA,IAAM,aAAa;AACnB,IAAM,eAAe,IAAI;AACzB,IAAM,MAAM;AACZ,IAAM,wBAAwB;AAEvB,IAAM,wBAAkC;AAAA,EAC7C,MAAM;AAAA,EACN,aAAa;AAAA,EACb,uBAAuB;AAAA,EACvB,SAAS;AAAA,EACT,UAAU,CAAC,YAAY,SAAS;AAAA,EAChC,aAAa,EAAE,OAAO,CAAC,YAAY,SAAS,EAAE;AAAA,EAC9C,aAAa;AAAA,EACb,YAAY;AAAA,EACZ,UAAU;AAAA,OACJ,IAAG,CAAC,SAAwB,UAAkB,QAAwC;AAAA,IAC1F,MAAM,OAAO,QAAQ,WAAW,YAAY;AAAA,IAC5C,IAAI,CAAC,MAAM,gBAAgB;AAAA,MAAG,OAAO,EAAE,MAAM,GAAG;AAAA,IAEhD,MAAM,SAAS,aAAa,IAAI,OAAO;AAAA,IACvC,IAAI,UAAU,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK;AAAA,MAC1C,MAAM,UAAS,OAAO,OAAO,KAAK;AAAA,MAClC,OAAO,KAAK,SAAQ,OAAO,QAAO,QAAQ,IAAI,MAAM,GAAG,qBAAqB,EAAE;AAAA,IAChF;AAAA,IAEA,IAAI;AAAA,IACJ,IAAI;AAAA,MACF,QAAQ,SAAS,MAAM,KAAK,UAAU,EAAE,IAA2B,kBAAkB;AAAA,MACrF,UAAU,KAAK;AAAA,MACf,OAAO,KAAK;AAAA,MACZ,OAAO,KACL,2CAA2C,eAAe,QAAQ,IAAI,UAAU,KAClF;AAAA,MACA,IAAI,QAAQ;AAAA,QACV,MAAM,UAAS,OAAO,OAAO,KAAK;AAAA,QAClC,OAAO,KAAK,SAAQ,OAAO,QAAO,QAAQ,IAAI,MAAM,GAAG,qBAAqB,EAAE;AAAA,MAChF;AAAA,MACA,OAAO,EAAE,MAAM,IAAI,QAAQ,EAAE,yBAAyB,KAAK,GAAG,MAAM,CAAC,EAAE;AAAA;AAAA,IAEzE,aAAa,IAAI,SAAS,EAAE,OAAO,SAAS,IAAI,KAAK,IAAI,EAAE,CAAC;AAAA,IAE5D,IAAI,UAAU;AAAA,MAAK,OAAO,KAAK,gCAAgC,QAAQ,QAAQ,CAAC,GAAG;AAAA,IACnF,MAAM,SAAS,OAAO,OAAO;AAAA,IAC7B,OAAO,KAAK,QAAQ,OAAO,OAAO,QAAQ,IAAI,MAAM,GAAG,qBAAqB,EAAE;AAAA;AAElF;AAEA,SAAS,MAAM,CAAC,SAAiC;AAAA,EAC/C,MAAM,MAAM,UAAU;AAAA,EACtB,MAAM,WAAW,UAAU;AAAA,EAC3B,IAAI,OAAO,wBAAwB,QAAQ,QAAQ,CAAC;AAAA,EACpD,IAAI;AAAA,IAAU,QAAQ,0BAAyB;AAAA,EAC1C,SAAI;AAAA,IAAK,QAAQ,qBAAoB;AAAA,EAC1C,OAAO;AAAA,IACL;AAAA,IACA,QAAQ;AAAA,MACN,cAAc;AAAA,MACd,iBAAiB;AAAA,MACjB,sBAAsB;AAAA,MACtB,eAAe;AAAA,IACjB;AAAA,EACF;AAAA;",
|
|
8
|
-
"debugId": "
|
|
8
|
+
"debugId": "503A37C6EFAF4B3A64756E2164756E21",
|
|
9
9
|
"names": []
|
|
10
10
|
}
|
|
@@ -5,6 +5,6 @@
|
|
|
5
5
|
"/** Exposes available cloud models in agent state. */\n\nimport type { IAgentRuntime, Memory, Provider, ProviderResult, State } from \"@elizaos/core\";\nimport type { CloudModelRegistryService, ModelsByProvider } from \"../services/cloud-model-registry\";\n\nconst TTL = 300_000; // 5 minutes\nconst MAX_MODEL_PROVIDERS = 12;\nconst MAX_MODELS_PER_PROVIDER = 50;\n\n/**\n * Per-runtime cache using a WeakMap keyed by the runtime object.\n * This avoids sharing stale model data between different agent instances\n * running in the same process.\n */\nconst runtimeCaches = new WeakMap<IAgentRuntime, { value: ModelsByProvider; at: number }>();\n\nexport const modelRegistryProvider: Provider = {\n name: \"elizacloud_models\",\n description: \"Available AI models from ElizaCloud grouped by provider\",\n descriptionCompressed: \"Available AI models from ElizaCloud by provider.\",\n dynamic: true,\n contexts: [\"settings\", \"finance\"],\n contextGate: { anyOf: [\"settings\", \"finance\"] },\n cacheStable: false,\n cacheScope: \"turn\",\n position: 92,\n async get(runtime: IAgentRuntime, _message: Memory, _state: State): Promise<ProviderResult> {\n try {\n const registry = runtime.getService(\"CLOUD_MODEL_REGISTRY\") as\n | CloudModelRegistryService\n | undefined;\n\n if (!registry) return { text: \"\" };\n\n const cached = runtimeCaches.get(runtime);\n if (cached && Date.now() - cached.at < TTL) {\n const cachedValue = Object.fromEntries(\n Object.entries(cached.value).slice(0, MAX_MODEL_PROVIDERS)\n ) as ModelsByProvider;\n return formatModels(cachedValue);\n }\n\n const byProvider = await registry.getModelsByProvider();\n\n if (Object.keys(byProvider).length === 0) {\n return { text: \"\" };\n }\n\n runtimeCaches.set(runtime, { value: byProvider, at: Date.now() });\n const capped = Object.fromEntries(\n Object.entries(byProvider).slice(0, MAX_MODEL_PROVIDERS)\n ) as ModelsByProvider;\n return formatModels(capped);\n } catch {\n return { text: \"\", values: {}, data: {} };\n }\n },\n};\n\nfunction formatModels(byProvider: ModelsByProvider): ProviderResult {\n const providers = Object.keys(byProvider).sort().slice(0, MAX_MODEL_PROVIDERS);\n const total = providers.reduce(\n (n, provider) => n + byProvider[provider].slice(0, MAX_MODELS_PER_PROVIDER).length,\n 0\n );\n\n return {\n text: `ElizaCloud: ${total} models (${providers.join(\", \")})`,\n values: {\n cloudModelProviders: providers.join(\",\"),\n cloudModelCount: total,\n },\n };\n}\n"
|
|
6
6
|
],
|
|
7
7
|
"mappings": ";;;;;;;;;;;;;;;;;;;AAKA,IAAM,MAAM;AACZ,IAAM,sBAAsB;AAC5B,IAAM,0BAA0B;AAOhC,IAAM,gBAAgB,IAAI;AAEnB,IAAM,wBAAkC;AAAA,EAC7C,MAAM;AAAA,EACN,aAAa;AAAA,EACb,uBAAuB;AAAA,EACvB,SAAS;AAAA,EACT,UAAU,CAAC,YAAY,SAAS;AAAA,EAChC,aAAa,EAAE,OAAO,CAAC,YAAY,SAAS,EAAE;AAAA,EAC9C,aAAa;AAAA,EACb,YAAY;AAAA,EACZ,UAAU;AAAA,OACJ,IAAG,CAAC,SAAwB,UAAkB,QAAwC;AAAA,IAC1F,IAAI;AAAA,MACF,MAAM,WAAW,QAAQ,WAAW,sBAAsB;AAAA,MAI1D,IAAI,CAAC;AAAA,QAAU,OAAO,EAAE,MAAM,GAAG;AAAA,MAEjC,MAAM,SAAS,cAAc,IAAI,OAAO;AAAA,MACxC,IAAI,UAAU,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK;AAAA,QAC1C,MAAM,cAAc,OAAO,YACzB,OAAO,QAAQ,OAAO,KAAK,EAAE,MAAM,GAAG,mBAAmB,CAC3D;AAAA,QACA,OAAO,aAAa,WAAW;AAAA,MACjC;AAAA,MAEA,MAAM,aAAa,MAAM,SAAS,oBAAoB;AAAA,MAEtD,IAAI,OAAO,KAAK,UAAU,EAAE,WAAW,GAAG;AAAA,QACxC,OAAO,EAAE,MAAM,GAAG;AAAA,MACpB;AAAA,MAEA,cAAc,IAAI,SAAS,EAAE,OAAO,YAAY,IAAI,KAAK,IAAI,EAAE,CAAC;AAAA,MAChE,MAAM,SAAS,OAAO,YACpB,OAAO,QAAQ,UAAU,EAAE,MAAM,GAAG,mBAAmB,CACzD;AAAA,MACA,OAAO,aAAa,MAAM;AAAA,MAC1B,MAAM;AAAA,MACN,OAAO,EAAE,MAAM,IAAI,QAAQ,CAAC,GAAG,MAAM,CAAC,EAAE;AAAA;AAAA;AAG9C;AAEA,SAAS,YAAY,CAAC,YAA8C;AAAA,EAClE,MAAM,YAAY,OAAO,KAAK,UAAU,EAAE,KAAK,EAAE,MAAM,GAAG,mBAAmB;AAAA,EAC7E,MAAM,QAAQ,UAAU,OACtB,CAAC,GAAG,aAAa,IAAI,WAAW,UAAU,MAAM,GAAG,uBAAuB,EAAE,QAC5E,CACF;AAAA,EAEA,OAAO;AAAA,IACL,MAAM,eAAe,iBAAiB,UAAU,KAAK,IAAI;AAAA,IACzD,QAAQ;AAAA,MACN,qBAAqB,UAAU,KAAK,GAAG;AAAA,MACvC,iBAAiB;AAAA,IACnB;AAAA,EACF;AAAA;",
|
|
8
|
-
"debugId": "
|
|
8
|
+
"debugId": "E37AE729E6707C7D64756E2164756E21",
|
|
9
9
|
"names": []
|
|
10
10
|
}
|
package/dist/cloud-setup.js
CHANGED
package/dist/cloud-setup.js.map
CHANGED
|
@@ -9,6 +9,6 @@
|
|
|
9
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
10
|
],
|
|
11
11
|
"mappings": "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",
|
|
12
|
-
"debugId": "
|
|
12
|
+
"debugId": "605FF693C04E1DC364756E2164756E21",
|
|
13
13
|
"names": []
|
|
14
14
|
}
|
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
"sourcesContent": [
|
|
5
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
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
|
|
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 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 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
8
|
],
|
|
9
9
|
"mappings": "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",
|
|
10
|
-
"debugId": "
|
|
10
|
+
"debugId": "920B09D12940A40164756E2164756E21",
|
|
11
11
|
"names": []
|
|
12
12
|
}
|
package/dist/index.js
CHANGED
|
@@ -1089,13 +1089,13 @@ var init_cloud_billing_routes = __esm(() => {
|
|
|
1089
1089
|
});
|
|
1090
1090
|
|
|
1091
1091
|
// src/routes/home-remote-runner-access-url.ts
|
|
1092
|
-
import { normalizeCloudSiteUrl as
|
|
1092
|
+
import { normalizeCloudSiteUrl as normalizeCloudSiteUrl2 } from "@elizaos/shared";
|
|
1093
1093
|
function buildHomeRemoteRunnerAccessUrl(input) {
|
|
1094
1094
|
const sessionId = input.sessionId?.trim();
|
|
1095
1095
|
if (!sessionId)
|
|
1096
1096
|
return null;
|
|
1097
1097
|
try {
|
|
1098
|
-
const url = new URL(
|
|
1098
|
+
const url = new URL(normalizeCloudSiteUrl2(input.cloudBaseUrl ?? undefined));
|
|
1099
1099
|
url.pathname = "/dashboard/app";
|
|
1100
1100
|
url.search = "";
|
|
1101
1101
|
url.hash = "";
|
|
@@ -1859,7 +1859,7 @@ function resolvePersistedCloudIdentity(runtime) {
|
|
|
1859
1859
|
userId: normalizeEnvValue(runtimeWithCloud?.getSetting?.("ELIZA_CLOUD_USER_ID")) ?? normalizeEnvValue(runtimeWithCloud?.character?.secrets?.ELIZA_CLOUD_USER_ID)
|
|
1860
1860
|
};
|
|
1861
1861
|
}
|
|
1862
|
-
function
|
|
1862
|
+
function resolveCloudApiBaseUrl3(rawBaseUrl) {
|
|
1863
1863
|
return resolveCloudApiBaseUrl(rawBaseUrl ?? DEFAULT_CLOUD_API_BASE_URL2) ?? DEFAULT_CLOUD_API_BASE_URL2;
|
|
1864
1864
|
}
|
|
1865
1865
|
function resolveCloudApiKey2(config, runtime) {
|
|
@@ -1982,7 +1982,7 @@ async function fetchCloudCredits(config, runtime) {
|
|
|
1982
1982
|
error: authenticatedFailure ?? (authenticatedUnexpectedResponse ? "unexpected response" : "missing cloud api key")
|
|
1983
1983
|
};
|
|
1984
1984
|
}
|
|
1985
|
-
const resolvedBaseUrl =
|
|
1985
|
+
const resolvedBaseUrl = resolveCloudApiBaseUrl3(config.cloud?.baseUrl);
|
|
1986
1986
|
const baseUrlRejection = await validateCloudBaseUrl(resolvedBaseUrl);
|
|
1987
1987
|
if (baseUrlRejection) {
|
|
1988
1988
|
return {
|
|
@@ -5351,6 +5351,11 @@ class PaypalManagedClient {
|
|
|
5351
5351
|
return readPaypalJson(response);
|
|
5352
5352
|
}
|
|
5353
5353
|
}
|
|
5354
|
+
|
|
5355
|
+
// src/cloud/index.ts
|
|
5356
|
+
init_base_url();
|
|
5357
|
+
init_validate_url();
|
|
5358
|
+
|
|
5354
5359
|
// src/cloud/null-observer.ts
|
|
5355
5360
|
class NullCloudSetupObserver {
|
|
5356
5361
|
onAvailabilityChecked(_result) {}
|
|
@@ -5545,6 +5550,9 @@ async function handleBatchTextEmbedding(runtime, texts) {
|
|
|
5545
5550
|
if (response.status === 401 || response.status === 403) {
|
|
5546
5551
|
throw new Error(`[BatchEmbeddings] Authentication failed (${response.status}). ` + `Check ELIZAOS_CLOUD_API_KEY or ELIZAOS_CLOUD_EMBEDDING_API_KEY — ` + `the current key is not authorized for the embedding endpoint.`);
|
|
5547
5552
|
}
|
|
5553
|
+
if (response.status === 429) {
|
|
5554
|
+
throw new Error(`[BatchEmbeddings] Rate-limit retry exhausted: API error: ${response.status} ${response.statusText}`);
|
|
5555
|
+
}
|
|
5548
5556
|
throw new Error(`[BatchEmbeddings] API error: ${response.status} ${response.statusText}`);
|
|
5549
5557
|
}
|
|
5550
5558
|
const data = await response.json();
|
|
@@ -6364,6 +6372,9 @@ function isReasoningModel(modelName) {
|
|
|
6364
6372
|
const lower = modelName.toLowerCase();
|
|
6365
6373
|
return REASONING_MODEL_PATTERNS.some((pattern) => lower.includes(pattern));
|
|
6366
6374
|
}
|
|
6375
|
+
function isCerebrasServedModel(modelName) {
|
|
6376
|
+
return modelName.toLowerCase().includes("gpt-oss");
|
|
6377
|
+
}
|
|
6367
6378
|
function isRecord(value) {
|
|
6368
6379
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
6369
6380
|
}
|
|
@@ -6485,7 +6496,15 @@ function normalizeNativeToolChoice(toolChoice) {
|
|
|
6485
6496
|
}
|
|
6486
6497
|
const choice = asRecord3(toolChoice);
|
|
6487
6498
|
if (choice.type === "function") {
|
|
6488
|
-
|
|
6499
|
+
const functionChoice2 = recordAt(choice, "function");
|
|
6500
|
+
const toolName2 = firstString(functionChoice2.name, choice.name, choice.toolName);
|
|
6501
|
+
return toolName2 ? {
|
|
6502
|
+
type: "function",
|
|
6503
|
+
function: {
|
|
6504
|
+
...functionChoice2,
|
|
6505
|
+
name: toolName2
|
|
6506
|
+
}
|
|
6507
|
+
} : undefined;
|
|
6489
6508
|
}
|
|
6490
6509
|
if (choice.type === "tool") {
|
|
6491
6510
|
const toolName2 = firstString(choice.toolName, choice.name);
|
|
@@ -6495,10 +6514,13 @@ function normalizeNativeToolChoice(toolChoice) {
|
|
|
6495
6514
|
const toolName = firstString(choice.toolName, choice.name, functionChoice.name);
|
|
6496
6515
|
return toolName ? { type: "function", function: { name: toolName } } : toolChoice;
|
|
6497
6516
|
}
|
|
6498
|
-
function buildNativeResponseFormat(responseSchema) {
|
|
6517
|
+
function buildNativeResponseFormat(responseSchema, modelName) {
|
|
6499
6518
|
if (!responseSchema) {
|
|
6500
6519
|
return;
|
|
6501
6520
|
}
|
|
6521
|
+
if (isCerebrasServedModel(modelName)) {
|
|
6522
|
+
return { type: "json_object" };
|
|
6523
|
+
}
|
|
6502
6524
|
const schemaRecord = asRecord3(responseSchema);
|
|
6503
6525
|
if (schemaRecord.responseFormat) {
|
|
6504
6526
|
return schemaRecord.responseFormat;
|
|
@@ -6576,15 +6598,20 @@ function buildNativeRequestBody(params, modelName, promptText, systemPrompt) {
|
|
|
6576
6598
|
const promptCacheKey = providerOptions ? resolvePromptCacheKey(providerOptions) : undefined;
|
|
6577
6599
|
const tools = normalizeNativeTools(params.tools);
|
|
6578
6600
|
const toolChoice = normalizeNativeToolChoice(params.toolChoice);
|
|
6579
|
-
const responseFormat = buildNativeResponseFormat(params.responseSchema);
|
|
6601
|
+
const responseFormat = buildNativeResponseFormat(params.responseSchema, modelName);
|
|
6580
6602
|
const requestBody = {
|
|
6581
6603
|
model: modelName,
|
|
6582
|
-
messages: buildNativeMessages(params, promptText, systemPrompt)
|
|
6583
|
-
max_tokens: params.maxTokens ?? 8192
|
|
6604
|
+
messages: buildNativeMessages(params, promptText, systemPrompt)
|
|
6584
6605
|
};
|
|
6606
|
+
if (!params.omitMaxTokens) {
|
|
6607
|
+
requestBody.max_tokens = params.maxTokens ?? 8192;
|
|
6608
|
+
}
|
|
6585
6609
|
if (!isReasoningModel(modelName) && typeof params.temperature === "number") {
|
|
6586
6610
|
requestBody.temperature = params.temperature;
|
|
6587
6611
|
}
|
|
6612
|
+
if (isCerebrasServedModel(modelName) && recordAt(asRecord3(params.providerOptions), "eliza").thinking === "off") {
|
|
6613
|
+
requestBody.reasoning_effort = "low";
|
|
6614
|
+
}
|
|
6588
6615
|
if (tools) {
|
|
6589
6616
|
requestBody.tools = tools;
|
|
6590
6617
|
}
|
|
@@ -6746,9 +6773,11 @@ async function generateTextWithModel(runtime, modelType, params) {
|
|
|
6746
6773
|
});
|
|
6747
6774
|
const requestBody = {
|
|
6748
6775
|
model: modelName,
|
|
6749
|
-
input
|
|
6750
|
-
max_output_tokens: params.maxTokens ?? 8192
|
|
6776
|
+
input
|
|
6751
6777
|
};
|
|
6778
|
+
if (!params.omitMaxTokens) {
|
|
6779
|
+
requestBody.max_output_tokens = params.maxTokens ?? 8192;
|
|
6780
|
+
}
|
|
6752
6781
|
if (!reasoning && typeof params.temperature === "number") {
|
|
6753
6782
|
requestBody.temperature = params.temperature;
|
|
6754
6783
|
}
|
|
@@ -9841,7 +9870,7 @@ export {
|
|
|
9841
9870
|
src_default as default,
|
|
9842
9871
|
createPayment,
|
|
9843
9872
|
createOrder,
|
|
9844
|
-
|
|
9873
|
+
cloudLogin,
|
|
9845
9874
|
clearCloudSecrets,
|
|
9846
9875
|
__resetCloudBaseUrlCache,
|
|
9847
9876
|
PlaidManagedClientError,
|
|
@@ -9857,12 +9886,12 @@ export {
|
|
|
9857
9886
|
LIFEOPS_SCHEDULE_DEVICE_KINDS,
|
|
9858
9887
|
ElizaCloudClient,
|
|
9859
9888
|
DuffelConfigError,
|
|
9860
|
-
|
|
9889
|
+
ConnectionMonitor,
|
|
9861
9890
|
CloudTtsUnavailableError,
|
|
9862
|
-
|
|
9891
|
+
CloudRuntimeProxy,
|
|
9863
9892
|
CloudManager,
|
|
9864
9893
|
ClackObserver,
|
|
9865
|
-
|
|
9894
|
+
BackupScheduler
|
|
9866
9895
|
};
|
|
9867
9896
|
|
|
9868
|
-
//# debugId=
|
|
9897
|
+
//# debugId=2FE7D4ED3F49EFD864756E2164756E21
|