@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.
Files changed (182) hide show
  1. package/dist/cjs/index.node.cjs +32 -8
  2. package/dist/cjs/index.node.js.map +7 -7
  3. package/dist/cloud/auth-service-types.js +1 -1
  4. package/dist/cloud/auth-service-types.js.map +1 -1
  5. package/dist/cloud/auth.js +1 -1
  6. package/dist/cloud/auth.js.map +1 -1
  7. package/dist/cloud/backup.js +1 -1
  8. package/dist/cloud/backup.js.map +1 -1
  9. package/dist/cloud/base-url.js +1 -1
  10. package/dist/cloud/base-url.js.map +1 -1
  11. package/dist/cloud/bridge-client.js +1 -1
  12. package/dist/cloud/bridge-client.js.map +1 -1
  13. package/dist/cloud/clack-observer.js +1 -1
  14. package/dist/cloud/clack-observer.js.map +1 -1
  15. package/dist/cloud/cloud-api-key.js +1 -1
  16. package/dist/cloud/cloud-api-key.js.map +1 -1
  17. package/dist/cloud/cloud-manager.js +1 -1
  18. package/dist/cloud/cloud-manager.js.map +1 -1
  19. package/dist/cloud/cloud-proxy.js +1 -1
  20. package/dist/cloud/cloud-proxy.js.map +1 -1
  21. package/dist/cloud/cloud-wallet.js +1 -1
  22. package/dist/cloud/cloud-wallet.js.map +1 -1
  23. package/dist/cloud/duffel-client.js +1 -1
  24. package/dist/cloud/duffel-client.js.map +1 -1
  25. package/dist/cloud/index.js +914 -11
  26. package/dist/cloud/index.js.map +13 -4
  27. package/dist/cloud/lifeops-schedule-sync-client.js +1 -1
  28. package/dist/cloud/lifeops-schedule-sync-client.js.map +1 -1
  29. package/dist/cloud/lifeops-schedule-sync-contracts.js +1 -1
  30. package/dist/cloud/lifeops-schedule-sync-contracts.js.map +1 -1
  31. package/dist/cloud/managed-payment-clients.js +1 -1
  32. package/dist/cloud/managed-payment-clients.js.map +1 -1
  33. package/dist/cloud/null-observer.js +1 -1
  34. package/dist/cloud/null-observer.js.map +1 -1
  35. package/dist/cloud/reconnect.js +1 -1
  36. package/dist/cloud/reconnect.js.map +1 -1
  37. package/dist/cloud/validate-url.js +1 -1
  38. package/dist/cloud/validate-url.js.map +1 -1
  39. package/dist/cloud/x402-payment-handler.js +1 -1
  40. package/dist/cloud/x402-payment-handler.js.map +1 -1
  41. package/dist/cloud-providers/cloud-status.js +1 -1
  42. package/dist/cloud-providers/cloud-status.js.map +1 -1
  43. package/dist/cloud-providers/container-health.js +1 -1
  44. package/dist/cloud-providers/container-health.js.map +1 -1
  45. package/dist/cloud-providers/credit-balance.js +1 -1
  46. package/dist/cloud-providers/credit-balance.js.map +1 -1
  47. package/dist/cloud-providers/index.js +1 -1
  48. package/dist/cloud-providers/index.js.map +1 -1
  49. package/dist/cloud-providers/model-registry.js +1 -1
  50. package/dist/cloud-providers/model-registry.js.map +1 -1
  51. package/dist/cloud-setup.js +1 -1
  52. package/dist/cloud-setup.js.map +1 -1
  53. package/dist/cloud-voice-catalog.js +1 -1
  54. package/dist/cloud-voice-catalog.js.map +2 -2
  55. package/dist/index.js +45 -16
  56. package/dist/index.js.map +9 -8
  57. package/dist/init.js +1 -1
  58. package/dist/init.js.map +1 -1
  59. package/dist/lib/cloud-connection.js +1 -1
  60. package/dist/lib/cloud-connection.js.map +1 -1
  61. package/dist/lib/cloud-secrets.js +1 -1
  62. package/dist/lib/cloud-secrets.js.map +1 -1
  63. package/dist/lib/config-env.js +1 -1
  64. package/dist/lib/config-env.js.map +1 -1
  65. package/dist/lib/config-like.js +1 -1
  66. package/dist/lib/config-like.js.map +1 -1
  67. package/dist/lib/credential-type-map.js +1 -1
  68. package/dist/lib/credential-type-map.js.map +1 -1
  69. package/dist/lib/feature-flags.js +1 -1
  70. package/dist/lib/feature-flags.js.map +1 -1
  71. package/dist/lib/http.js +1 -1
  72. package/dist/lib/http.js.map +1 -1
  73. package/dist/lib/server-cloud-tts.js +1 -1
  74. package/dist/lib/server-cloud-tts.js.map +1 -1
  75. package/dist/lib/state-paths.js +1 -1
  76. package/dist/lib/state-paths.js.map +1 -1
  77. package/dist/lib/tts-debug.js +1 -1
  78. package/dist/lib/tts-debug.js.map +1 -1
  79. package/dist/models/embeddings.d.ts.map +1 -1
  80. package/dist/models/embeddings.js +4 -1
  81. package/dist/models/embeddings.js.map +3 -3
  82. package/dist/models/image.js +1 -1
  83. package/dist/models/image.js.map +1 -1
  84. package/dist/models/index.js +32 -8
  85. package/dist/models/index.js.map +5 -5
  86. package/dist/models/research.js +1 -1
  87. package/dist/models/research.js.map +1 -1
  88. package/dist/models/speech.js +1 -1
  89. package/dist/models/speech.js.map +2 -2
  90. package/dist/models/text.d.ts +1 -0
  91. package/dist/models/text.d.ts.map +1 -1
  92. package/dist/models/text.js +30 -8
  93. package/dist/models/text.js.map +3 -3
  94. package/dist/models/tokenization.js +1 -1
  95. package/dist/models/tokenization.js.map +1 -1
  96. package/dist/models/transcription.js +1 -1
  97. package/dist/models/transcription.js.map +1 -1
  98. package/dist/node/index.node.js +32 -8
  99. package/dist/node/index.node.js.map +7 -7
  100. package/dist/plugin.js +1 -1
  101. package/dist/plugin.js.map +1 -1
  102. package/dist/providers/openai.js +1 -1
  103. package/dist/providers/openai.js.map +1 -1
  104. package/dist/register-routes.js +1 -1
  105. package/dist/register-routes.js.map +1 -1
  106. package/dist/routes/cloud-billing-routes.js +1 -1
  107. package/dist/routes/cloud-billing-routes.js.map +1 -1
  108. package/dist/routes/cloud-coding-container-routes.js +1 -1
  109. package/dist/routes/cloud-coding-container-routes.js.map +1 -1
  110. package/dist/routes/cloud-compat-routes.js +1 -1
  111. package/dist/routes/cloud-compat-routes.js.map +1 -1
  112. package/dist/routes/cloud-features-routes.js +1 -1
  113. package/dist/routes/cloud-features-routes.js.map +1 -1
  114. package/dist/routes/cloud-provisioning.js +1 -1
  115. package/dist/routes/cloud-provisioning.js.map +1 -1
  116. package/dist/routes/cloud-relay-routes.js +1 -1
  117. package/dist/routes/cloud-relay-routes.js.map +1 -1
  118. package/dist/routes/cloud-routes-autonomous.js +1 -1
  119. package/dist/routes/cloud-routes-autonomous.js.map +1 -1
  120. package/dist/routes/cloud-routes.js +1 -1
  121. package/dist/routes/cloud-routes.js.map +1 -1
  122. package/dist/routes/cloud-status-routes-autonomous.js +1 -1
  123. package/dist/routes/cloud-status-routes-autonomous.js.map +1 -1
  124. package/dist/routes/cloud-status-routes.js +1 -1
  125. package/dist/routes/cloud-status-routes.js.map +1 -1
  126. package/dist/routes/home-remote-runner-access-url.js +1 -1
  127. package/dist/routes/home-remote-runner-access-url.js.map +1 -1
  128. package/dist/routes/travel-provider-relay-routes.js +1 -1
  129. package/dist/routes/travel-provider-relay-routes.js.map +1 -1
  130. package/dist/services/cloud-auth.js +1 -1
  131. package/dist/services/cloud-auth.js.map +1 -1
  132. package/dist/services/cloud-backup.js +1 -1
  133. package/dist/services/cloud-backup.js.map +1 -1
  134. package/dist/services/cloud-bootstrap.js +1 -1
  135. package/dist/services/cloud-bootstrap.js.map +1 -1
  136. package/dist/services/cloud-bridge.js +1 -1
  137. package/dist/services/cloud-bridge.js.map +1 -1
  138. package/dist/services/cloud-container.js +1 -1
  139. package/dist/services/cloud-container.js.map +1 -1
  140. package/dist/services/cloud-credential-provider.js +1 -1
  141. package/dist/services/cloud-credential-provider.js.map +1 -1
  142. package/dist/services/cloud-managed-gateway-relay.js +1 -1
  143. package/dist/services/cloud-managed-gateway-relay.js.map +1 -1
  144. package/dist/services/cloud-model-registry.js +1 -1
  145. package/dist/services/cloud-model-registry.js.map +1 -1
  146. package/dist/services/index.js +1 -1
  147. package/dist/services/index.js.map +1 -1
  148. package/dist/types/cloud.js +1 -1
  149. package/dist/types/cloud.js.map +1 -1
  150. package/dist/types/index.js +1 -1
  151. package/dist/types/index.js.map +1 -1
  152. package/dist/utils/cloud-api.js +1 -1
  153. package/dist/utils/cloud-api.js.map +1 -1
  154. package/dist/utils/cloud-sdk/client.js +1 -1
  155. package/dist/utils/cloud-sdk/client.js.map +1 -1
  156. package/dist/utils/cloud-sdk/http.js +1 -1
  157. package/dist/utils/cloud-sdk/http.js.map +1 -1
  158. package/dist/utils/cloud-sdk/index.js +1 -1
  159. package/dist/utils/cloud-sdk/index.js.map +1 -1
  160. package/dist/utils/cloud-sdk/public-routes.js +1 -1
  161. package/dist/utils/cloud-sdk/public-routes.js.map +1 -1
  162. package/dist/utils/cloud-sdk/types.js +1 -1
  163. package/dist/utils/cloud-sdk/types.js.map +1 -1
  164. package/dist/utils/config.js +1 -1
  165. package/dist/utils/config.js.map +1 -1
  166. package/dist/utils/events.js +1 -1
  167. package/dist/utils/events.js.map +1 -1
  168. package/dist/utils/helpers.js +1 -1
  169. package/dist/utils/helpers.js.map +1 -1
  170. package/dist/utils/responses-output.js +1 -1
  171. package/dist/utils/responses-output.js.map +1 -1
  172. package/dist/utils/sdk-client.js +1 -1
  173. package/dist/utils/sdk-client.js.map +1 -1
  174. package/dist/utils/waifu-metering.js +1 -1
  175. package/dist/utils/waifu-metering.js.map +1 -1
  176. package/package.json +6 -5
  177. package/registry-entry.json +208 -0
  178. package/src/cloud-voice-catalog.ts +2 -2
  179. package/src/index.ts +1 -1
  180. package/src/models/embeddings.ts +9 -0
  181. package/src/models/speech.ts +2 -2
  182. package/src/models/text.ts +54 -6
@@ -26,4 +26,4 @@ export {
26
26
  DEFAULT_ELIZA_CLOUD_API_BASE_URL
27
27
  };
28
28
 
29
- //# debugId=C5963BADA4A6696664756E2164756E21
29
+ //# debugId=97842615318BBA6764756E2164756E21
@@ -5,6 +5,6 @@
5
5
  "export type {\n AgentDatabaseStatus,\n AgentDetailDto,\n AgentDetailDto as Agent,\n AgentListItemDto,\n AgentResponse,\n AgentSandboxStatus,\n AgentsResponse as AgentListResponse,\n AgentWalletStatus,\n ApiSuccessEnvelope,\n CreditBalanceResponse,\n CurrentUserDto,\n CurrentUserOrganizationDto,\n CurrentUserResponse,\n CurrentUserResponse as UserProfileResponse,\n IsoDateString,\n UpdatedUserDto,\n UpdatedUserResponse,\n} from \"./types.cloud-api.js\";\n\nexport const DEFAULT_ELIZA_CLOUD_BASE_URL = \"https://www.elizacloud.ai\";\nexport const DEFAULT_ELIZA_CLOUD_API_ORIGIN = \"https://api.elizacloud.ai\";\nexport const DEFAULT_ELIZA_CLOUD_API_BASE_URL = `${DEFAULT_ELIZA_CLOUD_API_ORIGIN}/api/v1`;\n\nexport type JsonPrimitive = boolean | number | string | null;\nexport type JsonValue = JsonPrimitive | JsonObject | JsonValue[];\n\nexport interface JsonObject {\n [key: string]: JsonValue | undefined;\n}\n\nexport type HttpMethod = \"GET\" | \"POST\" | \"PUT\" | \"PATCH\" | \"DELETE\" | \"OPTIONS\" | \"HEAD\";\n\nexport type QueryValue = boolean | number | string | null | undefined;\nexport type QueryParams = URLSearchParams | Record<string, QueryValue | QueryValue[]>;\n\nexport interface CloudApiErrorBody {\n success: false;\n error: string;\n details?: Record<string, unknown>;\n requiredCredits?: number;\n quota?: { current: number; max: number };\n}\n\nexport interface CloudRequestOptions {\n query?: QueryParams;\n headers?: HeadersInit;\n json?: unknown;\n body?: BodyInit | null;\n skipAuth?: boolean;\n signal?: AbortSignal;\n timeoutMs?: number;\n}\n\nexport interface ElizaCloudClientOptions {\n baseUrl?: string;\n apiBaseUrl?: string;\n apiKey?: string;\n bearerToken?: string;\n fetchImpl?: typeof fetch;\n defaultHeaders?: HeadersInit;\n}\n\nexport interface OpenApiSpec {\n openapi: string;\n info: {\n title: string;\n version: string;\n description?: string;\n };\n servers?: Array<{ url: string; description?: string }>;\n paths: Record<string, Record<string, unknown>>;\n components?: Record<string, unknown>;\n tags?: Array<Record<string, unknown>>;\n}\n\nexport interface EndpointCallOptions extends CloudRequestOptions {\n pathParams?: Record<string, string | number>;\n}\n\nexport interface CliLoginStartOptions {\n sessionId?: string;\n returnTo?: string;\n}\n\nexport interface CliLoginStartResponse {\n sessionId: string;\n browserUrl: string;\n status?: string;\n expiresAt?: string;\n}\n\nexport interface CliLoginPollResponse {\n status: \"pending\" | \"authenticated\" | \"expired\" | \"error\" | string;\n apiKey?: string;\n token?: string;\n keyPrefix?: string;\n expiresAt?: string;\n userId?: string;\n error?: string;\n}\n\nexport interface PairingTokenResponse {\n token: string;\n redirectUrl: string;\n expiresIn: number;\n}\n\nexport interface AuthPairResponse {\n message: string;\n apiKey: string | null;\n agentName: string;\n}\n\nexport interface ModelListEntry {\n id: string;\n object: string;\n created: number;\n owned_by: string;\n}\n\nexport interface ModelListResponse {\n object: \"list\" | string;\n data: ModelListEntry[];\n}\n\nexport interface ResponsesCreateRequest extends Record<string, unknown> {\n model: string;\n input?: unknown;\n}\n\nexport interface ResponsesCreateResponse extends Record<string, unknown> {\n id?: string;\n status?: string;\n output?: unknown;\n output_text?: string;\n usage?: {\n input_tokens?: number;\n output_tokens?: number;\n total_tokens?: number;\n };\n error?: {\n message?: string;\n type?: string;\n };\n}\n\nexport interface ChatCompletionRequest extends Record<string, unknown> {\n model?: string;\n messages: unknown[];\n}\n\nexport interface ChatCompletionResponse extends Record<string, unknown> {\n id?: string;\n choices?: Array<{\n message?: { content?: string | null };\n finish_reason?: string | null;\n }>;\n usage?: {\n prompt_tokens?: number;\n completion_tokens?: number;\n total_tokens?: number;\n };\n}\n\nexport interface EmbeddingsRequest {\n model: string;\n input: string | string[];\n dimensions?: number;\n}\n\nexport interface EmbeddingsResponse {\n object?: string;\n data: Array<{ embedding: number[]; index: number; object?: string }>;\n usage?: { prompt_tokens?: number; total_tokens?: number };\n}\n\nexport interface GenerateImageRequest {\n prompt: string;\n numImages?: number;\n aspectRatio?: string;\n model?: string;\n [key: string]: unknown;\n}\n\nexport interface GenerateImageResponse {\n images: Array<{ url?: string; image?: string }>;\n numImages?: number;\n}\n\nexport interface CreditSummaryResponse extends Record<string, unknown> {\n success: true;\n organization: {\n id: string;\n name: string;\n creditBalance: number;\n autoTopUpEnabled?: boolean;\n autoTopUpThreshold?: number | null;\n autoTopUpAmount?: number | null;\n hasPaymentMethod?: boolean;\n };\n}\n\nexport interface CreateCreditsCheckoutRequest {\n credits: number;\n success_url: string;\n cancel_url: string;\n}\n\nexport interface CreateCreditsCheckoutResponse extends Record<string, unknown> {\n url?: string | null;\n sessionId?: string;\n checkoutUrl?: string | null;\n}\n\nexport interface AppCreditsBalanceResponse extends Record<string, unknown> {\n success: boolean;\n balance?: number;\n totalPurchased?: number;\n totalSpent?: number;\n isLow?: boolean;\n error?: string;\n}\n\nexport interface CreateAppCreditsCheckoutRequest {\n app_id: string;\n amount: number;\n success_url: string;\n cancel_url: string;\n}\n\nexport interface CreateAppCreditsCheckoutResponse extends Record<string, unknown> {\n success: boolean;\n url?: string | null;\n sessionId?: string;\n error?: string;\n}\n\nexport interface VerifyAppCreditsCheckoutResponse extends Record<string, unknown> {\n success: boolean;\n amount?: number;\n message?: string;\n status?: string;\n error?: string;\n}\n\nexport type AppChargeProvider = \"stripe\" | \"oxapay\";\nexport type AppChargePaymentContext = \"verified_payer\" | \"any_payer\";\nexport type AppChargeStatus = \"requested\" | \"pending\" | \"confirmed\" | \"expired\" | string;\n\nexport interface PaymentCallbackChannel extends Record<string, unknown> {\n roomId?: string;\n room_id?: string;\n agentId?: string;\n agent_id?: string;\n source?: string;\n}\n\nexport interface AppChargeRequestView extends Record<string, unknown> {\n id: string;\n appId: string;\n amountUsd: number;\n description: string | null;\n providers: AppChargeProvider[];\n paymentContext: AppChargePaymentContext;\n paymentUrl: string;\n status: AppChargeStatus;\n paidAt: string | null;\n paidProvider?: AppChargeProvider;\n providerPaymentId?: string;\n payerUserId?: string;\n payerOrganizationId?: string;\n expiresAt: string;\n createdAt: string;\n successUrl?: string;\n cancelUrl?: string;\n metadata: Record<string, unknown>;\n}\n\nexport interface CreateAppChargeRequest {\n amount: number;\n description?: string;\n providers?: AppChargeProvider[];\n payment_context?: AppChargePaymentContext;\n success_url?: string;\n cancel_url?: string;\n callback_url?: string;\n callback_secret?: string;\n callback_channel?: PaymentCallbackChannel;\n callback_metadata?: Record<string, unknown>;\n lifetime_seconds?: number;\n metadata?: Record<string, unknown>;\n}\n\nexport interface CreateAppChargeResponse extends Record<string, unknown> {\n success: boolean;\n charge: AppChargeRequestView;\n}\n\nexport interface ListAppChargesResponse extends Record<string, unknown> {\n success: boolean;\n charges: AppChargeRequestView[];\n}\n\nexport interface GetAppChargeResponse extends Record<string, unknown> {\n success: boolean;\n charge: AppChargeRequestView;\n app?: {\n id: string;\n name: string;\n description?: string | null;\n logo_url?: string | null;\n website_url?: string | null;\n };\n}\n\nexport type OxaPayNetwork = \"ERC20\" | \"TRC20\" | \"BEP20\" | \"POLYGON\" | \"SOL\" | \"BASE\" | \"ARB\" | \"OP\";\n\nexport interface CreateAppChargeCheckoutRequest {\n provider: AppChargeProvider;\n success_url?: string;\n cancel_url?: string;\n return_url?: string;\n payCurrency?: string;\n network?: OxaPayNetwork;\n}\n\nexport interface CreateAppChargeCheckoutResponse extends Record<string, unknown> {\n success: boolean;\n checkout: Record<string, unknown> & {\n provider: AppChargeProvider;\n url?: string | null;\n sessionId?: string;\n paymentId?: string;\n trackId?: string;\n payLink?: string;\n expiresAt?: string;\n };\n}\n\nexport interface AffiliateCodeView extends Record<string, unknown> {\n id?: string;\n code?: string;\n userId?: string;\n markupPercent?: number;\n createdAt?: string;\n updatedAt?: string;\n}\n\nexport interface AffiliateCodeResponse extends Record<string, unknown> {\n code: AffiliateCodeView | string | null;\n}\n\nexport interface UpsertAffiliateCodeRequest {\n markupPercent: number;\n}\n\nexport interface LinkAffiliateRequest {\n code: string;\n}\n\nexport interface LinkAffiliateResponse extends Record<string, unknown> {\n success: boolean;\n link?: Record<string, unknown>;\n error?: string;\n}\n\nexport interface X402SupportedResponse extends Record<string, unknown> {\n success: boolean;\n version?: string;\n kinds?: unknown[];\n schemes?: string[];\n networks?: string[];\n addresses?: Record<string, string>;\n error?: string;\n code?: string;\n}\n\nexport interface X402FacilitatorPaymentRequest {\n paymentPayload: unknown;\n paymentRequirements: unknown;\n}\n\nexport interface X402VerifyResponse extends Record<string, unknown> {\n isValid: boolean;\n invalidReason?: string;\n payer?: string;\n}\n\nexport interface X402SettleResponse extends Record<string, unknown> {\n success: boolean;\n transaction: string;\n network: string;\n payer?: string;\n errorReason?: string;\n}\n\nexport interface X402PaymentRequestView extends Record<string, unknown> {\n id: string;\n status: string;\n paid: boolean;\n amountUsd: number;\n platformFeeUsd: number;\n serviceFeeUsd: number;\n totalChargedUsd: number;\n network: string;\n asset: string;\n payTo: string;\n description: string;\n appId?: string;\n callbackUrl?: string;\n transaction?: string | null;\n payer?: string;\n createdAt: string;\n expiresAt: string;\n paidAt?: string | null;\n}\n\nexport interface CreateX402PaymentRequest {\n amountUsd: number;\n network?: string;\n description?: string;\n callbackUrl?: string;\n callback_channel?: PaymentCallbackChannel;\n appId?: string;\n metadata?: Record<string, unknown>;\n expiresInSeconds?: number;\n}\n\nexport interface CreateX402PaymentRequestResponse extends Record<string, unknown> {\n success: boolean;\n paymentRequest: X402PaymentRequestView;\n paymentRequired: Record<string, unknown>;\n paymentRequiredHeader: string;\n}\n\nexport interface ListX402PaymentRequestsResponse extends Record<string, unknown> {\n success: boolean;\n paymentRequests: X402PaymentRequestView[];\n}\n\nexport interface GetX402PaymentRequestResponse extends Record<string, unknown> {\n success: boolean;\n paymentRequest: X402PaymentRequestView;\n}\n\nexport interface SettleX402PaymentRequestResponse extends Record<string, unknown> {\n success: boolean;\n paymentRequest: X402PaymentRequestView;\n}\n\nexport type RedemptionNetwork = \"ethereum\" | \"base\" | \"bnb\" | \"bsc\" | \"solana\";\n\nexport interface CreateRedemptionRequest {\n appId?: string;\n pointsAmount: number;\n network: RedemptionNetwork;\n payoutAddress: string;\n signature?: string;\n idempotencyKey?: string;\n}\n\nexport interface CreateRedemptionResponse extends Record<string, unknown> {\n success: boolean;\n redemptionId?: string;\n quote?: Record<string, unknown>;\n warnings?: string[];\n message?: string;\n error?: string;\n}\n\nexport interface ListRedemptionsResponse extends Record<string, unknown> {\n success: boolean;\n redemptions: Array<Record<string, unknown>>;\n paused?: boolean;\n}\n\nexport interface RedemptionBalanceResponse extends Record<string, unknown> {\n success: boolean;\n balance?: Record<string, unknown>;\n earningsBySource?: Array<Record<string, unknown>>;\n recentEarnings?: Array<Record<string, unknown>>;\n error?: string;\n}\n\nexport interface RedemptionQuoteResponse extends Record<string, unknown> {\n success: boolean;\n quote?: Record<string, unknown>;\n canRedeem?: boolean;\n availableNetworks?: string[];\n error?: string;\n}\n\nexport interface RedemptionStatusResponse extends Record<string, unknown> {\n success: boolean;\n operational?: boolean;\n canRedeem?: boolean;\n message?: string;\n availableNetworks?: string[];\n unavailableNetworks?: string[];\n wallets?: Record<string, unknown>;\n networks?: Array<Record<string, unknown>>;\n warnings?: string[];\n lastChecked?: string;\n}\n\nexport interface AppEarningsResponse extends Record<string, unknown> {\n success: boolean;\n earnings?: Record<string, unknown>;\n monetization?: Record<string, unknown>;\n error?: string;\n}\n\nexport interface AppEarningsHistoryResponse extends Record<string, unknown> {\n success: boolean;\n transactions?: Array<Record<string, unknown>>;\n pagination?: Record<string, unknown>;\n error?: string;\n}\n\nexport interface WithdrawAppEarningsRequest {\n amount: number;\n idempotency_key?: string;\n}\n\nexport interface WithdrawAppEarningsResponse extends Record<string, unknown> {\n success: boolean;\n message?: string;\n transactionId?: string;\n newBalance?: number;\n error?: string;\n}\n\nexport type ContainerStatus =\n | \"pending\"\n | \"building\"\n | \"deploying\"\n | \"running\"\n | \"stopped\"\n | \"failed\"\n | \"suspended\";\n\nexport type ContainerBillingStatus =\n | \"active\"\n | \"warning\"\n | \"suspended\"\n | \"shutdown_pending\"\n | \"archived\";\nexport type ContainerArchitecture = \"arm64\" | \"x86_64\";\n\nexport interface CloudContainer {\n id: string;\n name: string;\n project_name: string;\n description: string | null;\n organization_id: string;\n user_id: string;\n status: ContainerStatus;\n image_tag: string | null;\n port: number;\n desired_count: number;\n cpu: number;\n memory: number;\n architecture: ContainerArchitecture;\n environment_vars: Record<string, string>;\n health_check_path: string;\n load_balancer_url: string | null;\n billing_status: ContainerBillingStatus;\n total_billed: string;\n last_deployed_at: string | null;\n last_health_check: string | null;\n deployment_log: string | null;\n error_message: string | null;\n metadata: Record<string, unknown>;\n created_at: string;\n updated_at: string;\n}\n\nexport interface CreateContainerRequest {\n name: string;\n project_name: string;\n description?: string;\n port?: number;\n desired_count?: number;\n cpu?: number;\n memory?: number;\n environment_vars?: Record<string, string>;\n health_check_path?: string;\n /** Full image reference (e.g. `ghcr.io/owner/repo:tag`). The Hetzner-Docker backend pulls it directly. */\n image: string;\n}\n\nexport interface UpdateContainerRequest extends Partial<CreateContainerRequest> {\n status?: ContainerStatus;\n}\n\nexport interface CreateContainerResponse {\n success: boolean;\n data: CloudContainer;\n message?: string;\n creditsDeducted?: number;\n creditsRemaining?: number;\n polling?: {\n endpoint: string;\n intervalMs: number;\n expectedDurationMs: number;\n };\n}\n\nexport interface ContainerListResponse {\n success: boolean;\n data: CloudContainer[];\n}\n\nexport interface ContainerGetResponse {\n success: boolean;\n data: CloudContainer;\n}\n\nexport interface ContainerHealthResponse {\n success: boolean;\n data: {\n status: string;\n healthy: boolean;\n lastCheck: string | null;\n uptime: number | null;\n };\n}\n\nexport interface ContainerQuotaResponse extends Record<string, unknown> {\n success?: boolean;\n}\n\nexport interface ContainerCredentialsResponse extends Record<string, unknown> {\n success?: boolean;\n}\n\nexport interface CreateAgentRequest {\n agentName: string;\n characterId?: string;\n agentConfig?: Record<string, unknown>;\n environmentVars?: Record<string, string>;\n}\n\nexport interface CreateAgentResponse {\n success: boolean;\n data: {\n id: string;\n agentName: string | null;\n status: import(\"./types.cloud-api.js\").AgentSandboxStatus;\n createdAt?: string;\n };\n}\n\nexport interface AgentLifecycleResponse extends Record<string, unknown> {\n success?: boolean;\n data?: Record<string, unknown>;\n jobId?: string;\n}\n\nexport type SnapshotType = \"manual\" | \"auto\" | \"pre-eviction\";\n\nexport interface AgentSnapshot {\n id: string;\n containerId?: string;\n organizationId?: string;\n snapshotType?: SnapshotType | string;\n storageUrl?: string;\n sizeBytes?: number;\n metadata?: Record<string, unknown>;\n createdAt?: string;\n created_at?: string;\n}\n\nexport interface SnapshotListResponse {\n success: boolean;\n data: AgentSnapshot[];\n}\n\nexport interface GatewayRelaySession {\n id: string;\n organizationId: string;\n userId: string;\n runtimeAgentId: string;\n agentName: string | null;\n platform: \"local-runtime\";\n createdAt: string;\n lastSeenAt: string;\n}\n\nexport interface GatewayRelayRequest {\n jsonrpc: \"2.0\";\n id?: string | number;\n method: string;\n params?: Record<string, unknown>;\n}\n\nexport interface GatewayRelayResponse {\n jsonrpc: \"2.0\";\n id?: string | number;\n result?: Record<string, unknown>;\n error?: {\n code: number;\n message: string;\n data?: unknown;\n };\n}\n\nexport interface GatewayRelayRequestEnvelope {\n requestId: string;\n rpc: GatewayRelayRequest;\n queuedAt: string;\n}\n\nexport interface RegisterGatewayRelaySessionResponse {\n success: boolean;\n data: {\n session: GatewayRelaySession;\n };\n}\n\nexport interface PollGatewayRelayResponse {\n success: boolean;\n data: {\n request: GatewayRelayRequestEnvelope | null;\n };\n}\n\nexport interface JobStatus {\n id: string;\n status: \"pending\" | \"in_progress\" | \"completed\" | \"failed\" | string;\n result?: unknown;\n error?: string;\n}\n\nexport interface ApiKeySummary {\n id: string;\n name: string;\n description?: string | null;\n key_prefix: string;\n created_at: string;\n rate_limit?: number | null;\n expires_at?: string | null;\n}\n\nexport interface ApiKeyCreateRequest {\n name: string;\n description?: string;\n rate_limit?: number;\n expires_at?: string | null;\n}\n\nexport interface ApiKeyCreateResponse {\n apiKey: ApiKeySummary;\n plainKey: string;\n}\n\nexport interface ApiKeyListResponse {\n keys: ApiKeySummary[];\n}\n"
6
6
  ],
7
7
  "mappings": ";;;;;;;;;;;;;;;;;;;AAoBO,IAAM,+BAA+B;AACrC,IAAM,iCAAiC;AACvC,IAAM,mCAAmC,GAAG;",
8
- "debugId": "C5963BADA4A6696664756E2164756E21",
8
+ "debugId": "97842615318BBA6764756E2164756E21",
9
9
  "names": []
10
10
  }
@@ -144,4 +144,4 @@ export {
144
144
  DEFAULT_ELIZA_CLOUD_LARGE_MODEL
145
145
  };
146
146
 
147
- //# debugId=F9A635DDABEAF06664756E2164756E21
147
+ //# debugId=4E68F9696FAF8FDE64756E2164756E21
@@ -5,6 +5,6 @@
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
  ],
7
7
  "mappings": "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",
8
- "debugId": "F9A635DDABEAF06664756E2164756E21",
8
+ "debugId": "4E68F9696FAF8FDE64756E2164756E21",
9
9
  "names": []
10
10
  }
@@ -42,4 +42,4 @@ export {
42
42
  emitModelUsageEvent
43
43
  };
44
44
 
45
- //# debugId=ED0F7797B874D7A564756E2164756E21
45
+ //# debugId=049A146D130C969464756E2164756E21
@@ -5,6 +5,6 @@
5
5
  "import {\n EventType,\n type IAgentRuntime,\n type ModelEventPayload,\n type ModelTypeName,\n} from \"@elizaos/core\";\nimport type { LanguageModelUsage } from \"ai\";\n\n/**\n * Extra metadata that rides along with a {@link ModelEventPayload} so that\n * downstream consumers (e.g. the waifu metering bridge) can attribute spend\n * to a concrete model id and, when the cloud surfaces it, the authoritative\n * post-markup USD cost it just debited from the org's credit balance.\n *\n * These are additive fields layered onto the standard payload — the core\n * {@link ModelEventPayload} shape is unchanged for every other listener.\n */\nexport interface ModelUsageEventMeta {\n /** Resolved provider model id, e.g. \"anthropic/claude-opus-4.7\". */\n modelName?: string;\n /**\n * Authoritative USD cost the metered gateway charged for this call, when\n * available (e.g. from a `usage.cost_usd` field or `X-Eliza-Cost-Usd`\n * response header). Undefined when the cloud does not surface it; consumers\n * then fall back to a token-based estimate.\n */\n costUsd?: number;\n}\n\nexport type ModelUsageEventPayload = ModelEventPayload & ModelUsageEventMeta;\n\nexport function emitModelUsageEvent(\n runtime: IAgentRuntime,\n type: ModelTypeName,\n _prompt: string,\n usage: Partial<LanguageModelUsage> & {\n inputTokens?: number;\n outputTokens?: number;\n totalTokens?: number;\n },\n meta: ModelUsageEventMeta = {}\n) {\n const inputTokens = Number(usage.inputTokens || 0);\n const outputTokens = Number(usage.outputTokens || 0);\n const totalTokens = Number(\n usage.totalTokens != null ? usage.totalTokens : inputTokens + outputTokens\n );\n\n const payload: ModelUsageEventPayload = {\n runtime,\n source: \"elizacloud\",\n type,\n tokens: {\n prompt: inputTokens,\n completion: outputTokens,\n total: totalTokens,\n },\n ...(meta.modelName ? { modelName: meta.modelName } : {}),\n ...(typeof meta.costUsd === \"number\" && Number.isFinite(meta.costUsd)\n ? { costUsd: meta.costUsd }\n : {}),\n };\n\n runtime.emitEvent(EventType.MODEL_USED, payload);\n}\n"
6
6
  ],
7
7
  "mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AA+BO,SAAS,mBAAmB,CACjC,SACA,MACA,SACA,OAKA,OAA4B,CAAC,GAC7B;AAAA,EACA,MAAM,cAAc,OAAO,MAAM,eAAe,CAAC;AAAA,EACjD,MAAM,eAAe,OAAO,MAAM,gBAAgB,CAAC;AAAA,EACnD,MAAM,cAAc,OAClB,MAAM,eAAe,OAAO,MAAM,cAAc,cAAc,YAChE;AAAA,EAEA,MAAM,UAAkC;AAAA,IACtC;AAAA,IACA,QAAQ;AAAA,IACR;AAAA,IACA,QAAQ;AAAA,MACN,QAAQ;AAAA,MACR,YAAY;AAAA,MACZ,OAAO;AAAA,IACT;AAAA,OACI,KAAK,YAAY,EAAE,WAAW,KAAK,UAAU,IAAI,CAAC;AAAA,OAClD,OAAO,KAAK,YAAY,YAAY,OAAO,SAAS,KAAK,OAAO,IAChE,EAAE,SAAS,KAAK,QAAQ,IACxB,CAAC;AAAA,EACP;AAAA,EAEA,QAAQ,UAAU,UAAU,YAAY,OAAO;AAAA;",
8
- "debugId": "ED0F7797B874D7A564756E2164756E21",
8
+ "debugId": "049A146D130C969464756E2164756E21",
9
9
  "names": []
10
10
  }
@@ -100,4 +100,4 @@ export {
100
100
  detectAudioMimeType
101
101
  };
102
102
 
103
- //# debugId=201330EAE8A8689F64756E2164756E21
103
+ //# debugId=61ECDADB40BCCCF964756E2164756E21
@@ -5,6 +5,6 @@
5
5
  "import { logger } from \"@elizaos/core\";\nimport { JSONParseError } from \"ai\";\nimport type { ImageDescriptionResult } from \"../types\";\n\nexport function getJsonRepairFunction(): (params: {\n text: string;\n error: unknown;\n}) => Promise<string | null> {\n return async ({ text, error }: { text: string; error: unknown }) => {\n try {\n if (error instanceof JSONParseError) {\n const cleanedText = text.replace(/```json\\n|\\n```|```/g, \"\");\n JSON.parse(cleanedText);\n return cleanedText;\n }\n return null;\n } catch (jsonError) {\n const message = jsonError instanceof Error ? jsonError.message : String(jsonError);\n logger.warn(`Failed to repair JSON text: ${message}`);\n return null;\n }\n };\n}\n\nexport function detectAudioMimeType(buffer: Buffer): string {\n if (buffer.length < 12) {\n return \"application/octet-stream\";\n }\n\n if (\n buffer[0] === 0x52 &&\n buffer[1] === 0x49 &&\n buffer[2] === 0x46 &&\n buffer[3] === 0x46 &&\n buffer[8] === 0x57 &&\n buffer[9] === 0x41 &&\n buffer[10] === 0x56 &&\n buffer[11] === 0x45\n ) {\n return \"audio/wav\";\n }\n\n if (\n (buffer[0] === 0x49 && buffer[1] === 0x44 && buffer[2] === 0x33) || // ID3\n (buffer[0] === 0xff && (buffer[1] & 0xe0) === 0xe0) // MPEG sync\n ) {\n return \"audio/mpeg\";\n }\n\n if (buffer[0] === 0x4f && buffer[1] === 0x67 && buffer[2] === 0x67 && buffer[3] === 0x53) {\n return \"audio/ogg\";\n }\n\n if (buffer[0] === 0x66 && buffer[1] === 0x4c && buffer[2] === 0x61 && buffer[3] === 0x43) {\n return \"audio/flac\";\n }\n\n if (buffer[4] === 0x66 && buffer[5] === 0x74 && buffer[6] === 0x79 && buffer[7] === 0x70) {\n return \"audio/mp4\";\n }\n\n if (buffer[0] === 0x1a && buffer[1] === 0x45 && buffer[2] === 0xdf && buffer[3] === 0xa3) {\n return \"audio/webm\";\n }\n\n logger.warn(\"Could not detect audio format from buffer, using generic binary type\");\n return \"application/octet-stream\";\n}\n\nexport async function webStreamToNodeStream(webStream: ReadableStream<Uint8Array>) {\n try {\n const { Readable } = await import(\"node:stream\");\n const reader = webStream.getReader();\n\n return new Readable({\n async read() {\n try {\n const { done, value } = await reader.read();\n if (done) {\n this.push(null);\n } else {\n this.push(value);\n }\n } catch (error) {\n this.destroy(error as Error);\n }\n },\n destroy(error, callback) {\n reader.cancel().finally(() => callback(error));\n },\n });\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n logger.error(`Failed to load node:stream module: ${message}`);\n throw new Error(\n `Cannot convert stream: node:stream module unavailable. This feature requires a Node.js environment.`\n );\n }\n}\n\nexport function parseImageDescriptionResponse(responseText: string): ImageDescriptionResult {\n const titleMatch = responseText.match(/title[:\\s]+(.+?)(?:\\n|$)/i);\n const title = titleMatch?.[1]?.trim() || \"Image Analysis\";\n const description = responseText.replace(/title[:\\s]+(.+?)(?:\\n|$)/i, \"\").trim();\n\n return { title, description };\n}\n"
6
6
  ],
7
7
  "mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AACA;AAGO,SAAS,qBAAqB,GAGR;AAAA,EAC3B,OAAO,SAAS,MAAM,YAA8C;AAAA,IAClE,IAAI;AAAA,MACF,IAAI,iBAAiB,gBAAgB;AAAA,QACnC,MAAM,cAAc,KAAK,QAAQ,wBAAwB,EAAE;AAAA,QAC3D,KAAK,MAAM,WAAW;AAAA,QACtB,OAAO;AAAA,MACT;AAAA,MACA,OAAO;AAAA,MACP,OAAO,WAAW;AAAA,MAClB,MAAM,UAAU,qBAAqB,QAAQ,UAAU,UAAU,OAAO,SAAS;AAAA,MACjF,OAAO,KAAK,+BAA+B,SAAS;AAAA,MACpD,OAAO;AAAA;AAAA;AAAA;AAKN,SAAS,mBAAmB,CAAC,QAAwB;AAAA,EAC1D,IAAI,OAAO,SAAS,IAAI;AAAA,IACtB,OAAO;AAAA,EACT;AAAA,EAEA,IACE,OAAO,OAAO,MACd,OAAO,OAAO,MACd,OAAO,OAAO,MACd,OAAO,OAAO,MACd,OAAO,OAAO,MACd,OAAO,OAAO,MACd,OAAO,QAAQ,MACf,OAAO,QAAQ,IACf;AAAA,IACA,OAAO;AAAA,EACT;AAAA,EAEA,IACG,OAAO,OAAO,MAAQ,OAAO,OAAO,MAAQ,OAAO,OAAO,MAC1D,OAAO,OAAO,QAAS,OAAO,KAAK,SAAU,KAC9C;AAAA,IACA,OAAO;AAAA,EACT;AAAA,EAEA,IAAI,OAAO,OAAO,MAAQ,OAAO,OAAO,OAAQ,OAAO,OAAO,OAAQ,OAAO,OAAO,IAAM;AAAA,IACxF,OAAO;AAAA,EACT;AAAA,EAEA,IAAI,OAAO,OAAO,OAAQ,OAAO,OAAO,MAAQ,OAAO,OAAO,MAAQ,OAAO,OAAO,IAAM;AAAA,IACxF,OAAO;AAAA,EACT;AAAA,EAEA,IAAI,OAAO,OAAO,OAAQ,OAAO,OAAO,OAAQ,OAAO,OAAO,OAAQ,OAAO,OAAO,KAAM;AAAA,IACxF,OAAO;AAAA,EACT;AAAA,EAEA,IAAI,OAAO,OAAO,MAAQ,OAAO,OAAO,MAAQ,OAAO,OAAO,OAAQ,OAAO,OAAO,KAAM;AAAA,IACxF,OAAO;AAAA,EACT;AAAA,EAEA,OAAO,KAAK,sEAAsE;AAAA,EAClF,OAAO;AAAA;AAGT,eAAsB,qBAAqB,CAAC,WAAuC;AAAA,EACjF,IAAI;AAAA,IACF,QAAQ,aAAa,MAAa;AAAA,IAClC,MAAM,SAAS,UAAU,UAAU;AAAA,IAEnC,OAAO,IAAI,SAAS;AAAA,WACZ,KAAI,GAAG;AAAA,QACX,IAAI;AAAA,UACF,QAAQ,MAAM,UAAU,MAAM,OAAO,KAAK;AAAA,UAC1C,IAAI,MAAM;AAAA,YACR,KAAK,KAAK,IAAI;AAAA,UAChB,EAAO;AAAA,YACL,KAAK,KAAK,KAAK;AAAA;AAAA,UAEjB,OAAO,OAAO;AAAA,UACd,KAAK,QAAQ,KAAc;AAAA;AAAA;AAAA,MAG/B,OAAO,CAAC,OAAO,UAAU;AAAA,QACvB,OAAO,OAAO,EAAE,QAAQ,MAAM,SAAS,KAAK,CAAC;AAAA;AAAA,IAEjD,CAAC;AAAA,IACD,OAAO,OAAO;AAAA,IACd,MAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,IACrE,OAAO,MAAM,sCAAsC,SAAS;AAAA,IAC5D,MAAM,IAAI,MACR,qGACF;AAAA;AAAA;AAIG,SAAS,6BAA6B,CAAC,cAA8C;AAAA,EAC1F,MAAM,aAAa,aAAa,MAAM,2BAA2B;AAAA,EACjE,MAAM,QAAQ,aAAa,IAAI,KAAK,KAAK;AAAA,EACzC,MAAM,cAAc,aAAa,QAAQ,6BAA6B,EAAE,EAAE,KAAK;AAAA,EAE/E,OAAO,EAAE,OAAO,YAAY;AAAA;",
8
- "debugId": "201330EAE8A8689F64756E2164756E21",
8
+ "debugId": "61ECDADB40BCCCF964756E2164756E21",
9
9
  "names": []
10
10
  }
@@ -99,4 +99,4 @@ export {
99
99
  extractResponsesOutputText
100
100
  };
101
101
 
102
- //# debugId=EE6436AA65D99EB164756E2164756E21
102
+ //# debugId=6E305C78835906BA64756E2164756E21
@@ -5,6 +5,6 @@
5
5
  "type JsonRecord = Record<string, unknown>;\n\nfunction asRecord(value: unknown): JsonRecord | null {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n return null;\n }\n return value as JsonRecord;\n}\n\nfunction normalizeContentItems(value: unknown): unknown[] {\n if (Array.isArray(value)) return value;\n if (typeof value === \"string\") return [{ type: \"text\", text: value }];\n return value && typeof value === \"object\" ? [value] : [];\n}\n\nfunction extractTextFromContentItem(value: unknown): string[] {\n if (typeof value === \"string\") {\n return [value];\n }\n\n const record = asRecord(value);\n if (!record) return [];\n\n const text =\n typeof record.text === \"string\"\n ? record.text\n : typeof record.output_text === \"string\"\n ? record.output_text\n : typeof record.content === \"string\"\n ? record.content\n : \"\";\n const type = typeof record.type === \"string\" ? record.type : undefined;\n\n if (text && (!type || type === \"output_text\" || type === \"text\")) {\n return [text];\n }\n\n return [];\n}\n\nfunction extractTextFromOutputItem(value: unknown): string[] {\n const record = asRecord(value);\n if (!record) return [];\n\n const directContent = normalizeContentItems(record.content);\n if (directContent.length > 0) {\n return directContent.flatMap(extractTextFromContentItem);\n }\n\n const nestedMessage = asRecord(record.message);\n if (nestedMessage) {\n return normalizeContentItems(nestedMessage.content).flatMap(extractTextFromContentItem);\n }\n\n const type = typeof record.type === \"string\" ? record.type : undefined;\n const text =\n typeof record.text === \"string\"\n ? record.text\n : typeof record.output_text === \"string\"\n ? record.output_text\n : \"\";\n if (text && (type === \"output_text\" || type === \"text\")) {\n return [text];\n }\n\n return [];\n}\n\nfunction extractTextFromChoice(value: unknown): string[] {\n const record = asRecord(value);\n if (!record) return [];\n\n if (typeof record.text === \"string\" && record.text) {\n return [record.text];\n }\n\n const message = asRecord(record.message);\n if (!message) {\n return [];\n }\n\n return normalizeContentItems(message.content).flatMap(extractTextFromContentItem);\n}\n\n/**\n * Recover text from Responses-style payloads, tolerating both the documented\n * `output_text` field and the common structured `output` item variants.\n *\n * Cloud responses sometimes carry the same body in BOTH `output_text` AND\n * `output[]`/`choices[]`. Joining segments in that case duplicates the model\n * output downstream (caller sees `…json{…}\\n``````json{…}…`), which then\n * trips JSON.parse with \"Unrecognized token '`'\" because of the run of\n * backticks where the two copies meet. Prefer the first non-empty source\n * instead of joining.\n */\nexport function extractResponsesOutputText(data: unknown): string {\n const record = asRecord(data);\n if (!record) return \"\";\n\n if (typeof record.output_text === \"string\" && record.output_text.trim()) {\n return record.output_text;\n }\n\n if (Array.isArray(record.output)) {\n const fromOutput = record.output.flatMap(extractTextFromOutputItem).join(\"\");\n if (fromOutput.trim()) return fromOutput;\n }\n\n if (Array.isArray(record.choices)) {\n const fromChoices = record.choices.flatMap(extractTextFromChoice).join(\"\");\n if (fromChoices.trim()) return fromChoices;\n }\n\n return \"\";\n}\n"
6
6
  ],
7
7
  "mappings": "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",
8
- "debugId": "EE6436AA65D99EB164756E2164756E21",
8
+ "debugId": "6E305C78835906BA64756E2164756E21",
9
9
  "names": []
10
10
  }
@@ -154,4 +154,4 @@ export {
154
154
  createCloudApiClient
155
155
  };
156
156
 
157
- //# debugId=0DD7E6E062EFC6E864756E2164756E21
157
+ //# debugId=92550E76F8FC7AAF64756E2164756E21
@@ -6,6 +6,6 @@
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
7
  ],
8
8
  "mappings": "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",
9
- "debugId": "0DD7E6E062EFC6E864756E2164756E21",
9
+ "debugId": "92550E76F8FC7AAF64756E2164756E21",
10
10
  "names": []
11
11
  }
@@ -163,4 +163,4 @@ export {
163
163
  CLOUD_INFERENCE_SOURCE
164
164
  };
165
165
 
166
- //# debugId=17310B83242297D764756E2164756E21
166
+ //# debugId=3231454BE054157364756E2164756E21
@@ -5,6 +5,6 @@
5
5
  "/**\n * Waifu metering bridge.\n *\n * A hosted waifu agent runs as a sandboxed container whose model inference is\n * routed through the Eliza Cloud metered inference gateway. The gateway is the\n * honest meter: it owns the per-model pricing table and the platform markup,\n * and it debits the organization's credit balance on every call. That debit is\n * authoritative and already happens server-side.\n *\n * What was missing is the *signal back to waifu*: waifu's burn rollup\n * (`apps/worker/src/processors/agent-rollup.ts`) reads `inference.spent`\n * agent_events to compute `agentDailyBurnUsd` / `agentRunwayDays`, but falls\n * back to a $5/day default estimate when no such events exist. Nothing emitted them.\n *\n * This bridge listens for the runtime `MODEL_USED` event (emitted by the cloud\n * model handlers after each inference) and POSTs a signed `inference.spent`\n * webhook to waifu's receiver (`POST /webhooks/eliza-cloud/inference`). It is\n * inactive unless the container is provisioned with the waifu metering env knobs,\n * so it never fires for non-hosted (local dev / standalone) agents.\n *\n * Token counts are exact (reported by the gateway). USD is the authoritative\n * post-markup cost when the gateway surfaces it (`usage.cost_usd` /\n * `X-Eliza-Cost-Usd`); otherwise a conservative token-based estimate is used,\n * configurable per-model via WAIFU_METER_USD_PER_1K_INPUT / _OUTPUT. The credit\n * debit itself is always the cloud's authoritative number; the estimate only\n * affects waifu's burn display until the cloud cost is wired through.\n */\n\nimport crypto from \"node:crypto\";\nimport { type IAgentRuntime, logger } from \"@elizaos/core\";\nimport type { ModelUsageEventPayload } from \"./events\";\n\nconst DEFAULT_USD_PER_1K_INPUT = 0.003;\nconst DEFAULT_USD_PER_1K_OUTPUT = 0.015;\n\n/**\n * The MODEL_USED event `source` set by the Eliza Cloud metered inference path\n * (see ./events.ts emitModelUsageEvent). ElizaOS event dispatch is global: every\n * MODEL_USED handler receives every MODEL_USED event regardless of which plugin\n * emitted it. Only inference that actually went through the cloud metered\n * gateway debits real credits, so we must meter only those events. Other model\n * providers (e.g. plugin-local-inference emits source \"local-ai\" for free CPU\n * inference, plugin-openrouter emits \"openrouter\", etc.) must never be metered\n * as cloud burn.\n */\nexport const CLOUD_INFERENCE_SOURCE = \"elizacloud\";\n\nexport interface WaifuMeteringConfig {\n webhookUrl: string;\n secret: string;\n agentId: string;\n usdPer1kInput: number;\n usdPer1kOutput: number;\n}\n\nfunction readEnv(runtime: IAgentRuntime, key: string): string | undefined {\n const fromSettings =\n typeof runtime.getSetting === \"function\" ? runtime.getSetting(key) : undefined;\n const value =\n (typeof fromSettings === \"string\" && fromSettings) ||\n (typeof process !== \"undefined\" ? process.env?.[key] : undefined);\n const trimmed = typeof value === \"string\" ? value.trim() : \"\";\n return trimmed.length > 0 ? trimmed : undefined;\n}\n\nfunction readNumberEnv(\n runtime: IAgentRuntime,\n key: string,\n fallback: number\n): number {\n const raw = readEnv(runtime, key);\n if (!raw) return fallback;\n const parsed = Number(raw);\n return Number.isFinite(parsed) && parsed >= 0 ? parsed : fallback;\n}\n\n/**\n * Resolve the metering config from the container environment. Returns null\n * (bridge disabled) when the required knobs are absent, which is the case for\n * any agent that is not a hosted waifu agent.\n */\nexport function resolveWaifuMeteringConfig(\n runtime: IAgentRuntime\n): WaifuMeteringConfig | null {\n const webhookUrl = resolveInferenceWebhookUrl(runtime);\n const secret =\n readEnv(runtime, \"WAIFU_WEBHOOK_SECRET\") ?? readEnv(runtime, \"WAIFU_INFERENCE_WEBHOOK_SECRET\");\n const agentId = readEnv(runtime, \"WAIFU_AGENT_ID\") ?? readEnv(runtime, \"WAIFU_CORE_AGENT_ID\");\n\n if (!webhookUrl || !secret || !agentId) {\n return null;\n }\n\n return {\n webhookUrl,\n secret,\n agentId,\n usdPer1kInput: readNumberEnv(runtime, \"WAIFU_METER_USD_PER_1K_INPUT\", DEFAULT_USD_PER_1K_INPUT),\n usdPer1kOutput: readNumberEnv(\n runtime,\n \"WAIFU_METER_USD_PER_1K_OUTPUT\",\n DEFAULT_USD_PER_1K_OUTPUT\n ),\n };\n}\n\n/**\n * Resolve the inference webhook URL from the container environment.\n *\n * Prefers the explicit WAIFU_INFERENCE_WEBHOOK_URL. If that is absent but a\n * credits webhook URL (WAIFU_WEBHOOK_URL) is present, derive the sibling\n * `/inference` receiver path from the known `/credits` path. We NEVER post\n * inference events to the credits receiver: the credits mapper defaults unknown\n * payloads to `credits.topped_up`, which would corrupt credit state. If we\n * cannot safely derive an inference URL, return undefined so the bridge stays\n * disabled.\n */\nexport function resolveInferenceWebhookUrl(runtime: IAgentRuntime): string | undefined {\n const explicit = readEnv(runtime, \"WAIFU_INFERENCE_WEBHOOK_URL\");\n if (explicit) return explicit;\n\n const creditsUrl = readEnv(runtime, \"WAIFU_WEBHOOK_URL\");\n if (!creditsUrl) return undefined;\n\n // Only derive when the credits URL ends in a recognizable `/credits` segment.\n // Replacing the trailing `/credits` with `/inference` keeps the same host,\n // base path, and query string. Anything we cannot confidently map is treated\n // as unsafe and skipped, never reused as-is for inference.\n const derived = deriveInferenceUrlFromCredits(creditsUrl);\n if (derived) return derived;\n\n return undefined;\n}\n\n/**\n * Map a known `/credits` webhook URL to its sibling `/inference` URL. Returns\n * undefined when the input does not contain a `/credits` path segment, so we\n * never accidentally post inference to a non-inference endpoint.\n */\nexport function deriveInferenceUrlFromCredits(creditsUrl: string): string | undefined {\n try {\n const url = new URL(creditsUrl);\n if (!/\\/credits\\/?$/.test(url.pathname)) {\n return undefined;\n }\n url.pathname = url.pathname.replace(/\\/credits(\\/?)$/, \"/inference$1\");\n return url.toString();\n } catch {\n // Fall back to a string replacement for non-absolute URLs, still requiring\n // an explicit `/credits` segment so we cannot mis-route.\n if (/\\/credits\\/?$/.test(creditsUrl)) {\n return creditsUrl.replace(/\\/credits(\\/?)$/, \"/inference$1\");\n }\n return undefined;\n }\n}\n\n/**\n * HMAC signature compatible with waifu's webhook receiver:\n * `sha256=` + HMAC-SHA256 over `${timestamp}.${rawBody}`.\n */\nexport function signWaifuWebhook(rawBody: string, timestamp: string, secret: string): string {\n return `sha256=${crypto.createHmac(\"sha256\", secret).update(`${timestamp}.${rawBody}`).digest(\"hex\")}`;\n}\n\nexport function estimateUsd(\n config: WaifuMeteringConfig,\n inputTokens: number,\n outputTokens: number\n): number {\n const usd =\n (inputTokens / 1000) * config.usdPer1kInput +\n (outputTokens / 1000) * config.usdPer1kOutput;\n return Number.isFinite(usd) && usd > 0 ? usd : 0;\n}\n\nexport interface InferenceSpentPayload {\n agentId: string;\n modelType: string;\n modelName?: string;\n promptTokens: number;\n completionTokens: number;\n totalTokens: number;\n usd: number;\n costSource: \"gateway\" | \"estimate\";\n timestamp: string;\n idempotencyKey: string;\n source: \"elizacloud\";\n}\n\nexport function buildInferenceSpentPayload(\n config: WaifuMeteringConfig,\n event: ModelUsageEventPayload,\n now: Date = new Date()\n): InferenceSpentPayload | null {\n const promptTokens = Math.max(0, Math.round(Number(event.tokens?.prompt ?? 0)));\n const completionTokens = Math.max(0, Math.round(Number(event.tokens?.completion ?? 0)));\n const totalTokens = Math.max(\n 0,\n Math.round(Number(event.tokens?.total ?? promptTokens + completionTokens))\n );\n\n // Nothing was actually spent (e.g. a cached/short-circuited call with no\n // tokens). Skip so we never inflate the burn with empty events.\n if (totalTokens === 0 && promptTokens === 0 && completionTokens === 0) {\n return null;\n }\n\n const gatewayCost =\n typeof event.costUsd === \"number\" && Number.isFinite(event.costUsd) && event.costUsd >= 0\n ? event.costUsd\n : undefined;\n const usd = gatewayCost ?? estimateUsd(config, promptTokens, completionTokens);\n\n const timestamp = now.toISOString();\n return {\n agentId: config.agentId,\n modelType: String(event.type ?? \"unknown\"),\n ...(event.modelName ? { modelName: event.modelName } : {}),\n promptTokens,\n completionTokens,\n totalTokens,\n usd,\n costSource: gatewayCost !== undefined ? \"gateway\" : \"estimate\",\n timestamp,\n idempotencyKey: `inference:${config.agentId}:${crypto.randomUUID()}`,\n source: \"elizacloud\",\n };\n}\n\nconst POST_TIMEOUT_MS = 10000;\n\n/**\n * POST a signed `inference.spent` webhook to waifu. Best-effort: failures are\n * logged but never thrown, so metering never blocks or breaks an agent reply.\n * A 10s AbortSignal bounds the request so a stuck receiver can never leave a\n * background fetch hanging.\n */\nexport async function postInferenceSpent(\n config: WaifuMeteringConfig,\n payload: InferenceSpentPayload,\n fetchImpl: typeof fetch = fetch\n): Promise<{ ok: boolean; status?: number }> {\n const body = JSON.stringify(payload);\n const signature = signWaifuWebhook(body, payload.timestamp, config.secret);\n try {\n const res = await fetchImpl(config.webhookUrl, {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n \"X-Waifu-Webhook-Signature\": signature,\n },\n body,\n signal: AbortSignal.timeout(POST_TIMEOUT_MS),\n });\n if (!res.ok) {\n logger.warn(\n `[waifu-metering] inference.spent POST returned ${res.status} for agent ${config.agentId}`\n );\n return { ok: false, status: res.status };\n }\n logger.debug(\n `[waifu-metering] inference.spent posted (agent=${config.agentId} tokens=${payload.totalTokens} usd=${payload.usd.toFixed(6)} src=${payload.costSource})`\n );\n return { ok: true, status: res.status };\n } catch (err) {\n const aborted = err instanceof Error && err.name === \"TimeoutError\";\n const detail = aborted\n ? `timed out after ${POST_TIMEOUT_MS}ms`\n : err instanceof Error\n ? err.message\n : String(err);\n logger.warn(\n `[waifu-metering] inference.spent POST failed for agent ${config.agentId}: ${detail}`\n );\n return { ok: false };\n }\n}\n\n/**\n * Build the MODEL_USED event handler that forwards inference spend to waifu.\n * Resolves config lazily per-event so it stays inactive until the metering env\n * is present, and so config changes (rare) are picked up without a restart.\n */\nexport function createWaifuMeteringHandler(\n fetchImpl: typeof fetch = fetch\n): (payload: ModelUsageEventPayload) => Promise<void> {\n return async (payload: ModelUsageEventPayload): Promise<void> => {\n const runtime = payload?.runtime;\n if (!runtime) return;\n // ElizaOS dispatches MODEL_USED globally to every registered handler, so we\n // also receive events from other model providers (local-ai, openrouter,\n // etc.). Only cloud-metered inference debits real credits; meter only that\n // source so we never bill free/local inference as cloud burn.\n if (payload?.source !== CLOUD_INFERENCE_SOURCE) return;\n const config = resolveWaifuMeteringConfig(runtime);\n if (!config) return;\n const spent = buildInferenceSpentPayload(config, payload);\n if (!spent) return;\n await postInferenceSpent(config, spent, fetchImpl);\n };\n}\n"
6
6
  ],
7
7
  "mappings": ";;;;;;;;;;;;;;;;;;;AA4BA;AACA;AAGA,IAAM,2BAA2B;AACjC,IAAM,4BAA4B;AAY3B,IAAM,yBAAyB;AAUtC,SAAS,OAAO,CAAC,SAAwB,KAAiC;AAAA,EACxE,MAAM,eACJ,OAAO,QAAQ,eAAe,aAAa,QAAQ,WAAW,GAAG,IAAI;AAAA,EACvE,MAAM,QACH,OAAO,iBAAiB,YAAY,iBACpC,OAAO,YAAY,cAAc,QAAQ,MAAM,OAAO;AAAA,EACzD,MAAM,UAAU,OAAO,UAAU,WAAW,MAAM,KAAK,IAAI;AAAA,EAC3D,OAAO,QAAQ,SAAS,IAAI,UAAU;AAAA;AAGxC,SAAS,aAAa,CACpB,SACA,KACA,UACQ;AAAA,EACR,MAAM,MAAM,QAAQ,SAAS,GAAG;AAAA,EAChC,IAAI,CAAC;AAAA,IAAK,OAAO;AAAA,EACjB,MAAM,SAAS,OAAO,GAAG;AAAA,EACzB,OAAO,OAAO,SAAS,MAAM,KAAK,UAAU,IAAI,SAAS;AAAA;AAQpD,SAAS,0BAA0B,CACxC,SAC4B;AAAA,EAC5B,MAAM,aAAa,2BAA2B,OAAO;AAAA,EACrD,MAAM,SACJ,QAAQ,SAAS,sBAAsB,KAAK,QAAQ,SAAS,gCAAgC;AAAA,EAC/F,MAAM,UAAU,QAAQ,SAAS,gBAAgB,KAAK,QAAQ,SAAS,qBAAqB;AAAA,EAE5F,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,SAAS;AAAA,IACtC,OAAO;AAAA,EACT;AAAA,EAEA,OAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,eAAe,cAAc,SAAS,gCAAgC,wBAAwB;AAAA,IAC9F,gBAAgB,cACd,SACA,iCACA,yBACF;AAAA,EACF;AAAA;AAcK,SAAS,0BAA0B,CAAC,SAA4C;AAAA,EACrF,MAAM,WAAW,QAAQ,SAAS,6BAA6B;AAAA,EAC/D,IAAI;AAAA,IAAU,OAAO;AAAA,EAErB,MAAM,aAAa,QAAQ,SAAS,mBAAmB;AAAA,EACvD,IAAI,CAAC;AAAA,IAAY;AAAA,EAMjB,MAAM,UAAU,8BAA8B,UAAU;AAAA,EACxD,IAAI;AAAA,IAAS,OAAO;AAAA,EAEpB;AAAA;AAQK,SAAS,6BAA6B,CAAC,YAAwC;AAAA,EACpF,IAAI;AAAA,IACF,MAAM,MAAM,IAAI,IAAI,UAAU;AAAA,IAC9B,IAAI,CAAC,gBAAgB,KAAK,IAAI,QAAQ,GAAG;AAAA,MACvC;AAAA,IACF;AAAA,IACA,IAAI,WAAW,IAAI,SAAS,QAAQ,mBAAmB,cAAc;AAAA,IACrE,OAAO,IAAI,SAAS;AAAA,IACpB,MAAM;AAAA,IAGN,IAAI,gBAAgB,KAAK,UAAU,GAAG;AAAA,MACpC,OAAO,WAAW,QAAQ,mBAAmB,cAAc;AAAA,IAC7D;AAAA,IACA;AAAA;AAAA;AAQG,SAAS,gBAAgB,CAAC,SAAiB,WAAmB,QAAwB;AAAA,EAC3F,OAAO,UAAU,OAAO,WAAW,UAAU,MAAM,EAAE,OAAO,GAAG,aAAa,SAAS,EAAE,OAAO,KAAK;AAAA;AAG9F,SAAS,WAAW,CACzB,QACA,aACA,cACQ;AAAA,EACR,MAAM,MACH,cAAc,OAAQ,OAAO,gBAC7B,eAAe,OAAQ,OAAO;AAAA,EACjC,OAAO,OAAO,SAAS,GAAG,KAAK,MAAM,IAAI,MAAM;AAAA;AAiB1C,SAAS,0BAA0B,CACxC,QACA,OACA,MAAY,IAAI,MACc;AAAA,EAC9B,MAAM,eAAe,KAAK,IAAI,GAAG,KAAK,MAAM,OAAO,MAAM,QAAQ,UAAU,CAAC,CAAC,CAAC;AAAA,EAC9E,MAAM,mBAAmB,KAAK,IAAI,GAAG,KAAK,MAAM,OAAO,MAAM,QAAQ,cAAc,CAAC,CAAC,CAAC;AAAA,EACtF,MAAM,cAAc,KAAK,IACvB,GACA,KAAK,MAAM,OAAO,MAAM,QAAQ,SAAS,eAAe,gBAAgB,CAAC,CAC3E;AAAA,EAIA,IAAI,gBAAgB,KAAK,iBAAiB,KAAK,qBAAqB,GAAG;AAAA,IACrE,OAAO;AAAA,EACT;AAAA,EAEA,MAAM,cACJ,OAAO,MAAM,YAAY,YAAY,OAAO,SAAS,MAAM,OAAO,KAAK,MAAM,WAAW,IACpF,MAAM,UACN;AAAA,EACN,MAAM,MAAM,eAAe,YAAY,QAAQ,cAAc,gBAAgB;AAAA,EAE7E,MAAM,YAAY,IAAI,YAAY;AAAA,EAClC,OAAO;AAAA,IACL,SAAS,OAAO;AAAA,IAChB,WAAW,OAAO,MAAM,QAAQ,SAAS;AAAA,OACrC,MAAM,YAAY,EAAE,WAAW,MAAM,UAAU,IAAI,CAAC;AAAA,IACxD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,YAAY,gBAAgB,YAAY,YAAY;AAAA,IACpD;AAAA,IACA,gBAAgB,aAAa,OAAO,WAAW,OAAO,WAAW;AAAA,IACjE,QAAQ;AAAA,EACV;AAAA;AAGF,IAAM,kBAAkB;AAQxB,eAAsB,kBAAkB,CACtC,QACA,SACA,YAA0B,OACiB;AAAA,EAC3C,MAAM,OAAO,KAAK,UAAU,OAAO;AAAA,EACnC,MAAM,YAAY,iBAAiB,MAAM,QAAQ,WAAW,OAAO,MAAM;AAAA,EACzE,IAAI;AAAA,IACF,MAAM,MAAM,MAAM,UAAU,OAAO,YAAY;AAAA,MAC7C,QAAQ;AAAA,MACR,SAAS;AAAA,QACP,gBAAgB;AAAA,QAChB,6BAA6B;AAAA,MAC/B;AAAA,MACA;AAAA,MACA,QAAQ,YAAY,QAAQ,eAAe;AAAA,IAC7C,CAAC;AAAA,IACD,IAAI,CAAC,IAAI,IAAI;AAAA,MACX,OAAO,KACL,kDAAkD,IAAI,oBAAoB,OAAO,SACnF;AAAA,MACA,OAAO,EAAE,IAAI,OAAO,QAAQ,IAAI,OAAO;AAAA,IACzC;AAAA,IACA,OAAO,MACL,kDAAkD,OAAO,kBAAkB,QAAQ,mBAAmB,QAAQ,IAAI,QAAQ,CAAC,SAAS,QAAQ,aAC9I;AAAA,IACA,OAAO,EAAE,IAAI,MAAM,QAAQ,IAAI,OAAO;AAAA,IACtC,OAAO,KAAK;AAAA,IACZ,MAAM,UAAU,eAAe,SAAS,IAAI,SAAS;AAAA,IACrD,MAAM,SAAS,UACX,mBAAmB,sBACnB,eAAe,QACb,IAAI,UACJ,OAAO,GAAG;AAAA,IAChB,OAAO,KACL,0DAA0D,OAAO,YAAY,QAC/E;AAAA,IACA,OAAO,EAAE,IAAI,MAAM;AAAA;AAAA;AAShB,SAAS,0BAA0B,CACxC,YAA0B,OAC0B;AAAA,EACpD,OAAO,OAAO,YAAmD;AAAA,IAC/D,MAAM,UAAU,SAAS;AAAA,IACzB,IAAI,CAAC;AAAA,MAAS;AAAA,IAKd,IAAI,SAAS,WAAW;AAAA,MAAwB;AAAA,IAChD,MAAM,SAAS,2BAA2B,OAAO;AAAA,IACjD,IAAI,CAAC;AAAA,MAAQ;AAAA,IACb,MAAM,QAAQ,2BAA2B,QAAQ,OAAO;AAAA,IACxD,IAAI,CAAC;AAAA,MAAO;AAAA,IACZ,MAAM,mBAAmB,QAAQ,OAAO,SAAS;AAAA;AAAA;",
8
- "debugId": "17310B83242297D764756E2164756E21",
8
+ "debugId": "3231454BE054157364756E2164756E21",
9
9
  "names": []
10
10
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@elizaos/plugin-elizacloud",
3
- "version": "2.0.3-beta.2",
3
+ "version": "2.0.3-beta.3",
4
4
  "type": "module",
5
5
  "main": "dist/node/index.node.js",
6
6
  "module": "dist/node/index.node.js",
@@ -45,6 +45,7 @@
45
45
  }
46
46
  },
47
47
  "files": [
48
+ "registry-entry.json",
48
49
  "dist",
49
50
  "src",
50
51
  "types",
@@ -68,9 +69,9 @@
68
69
  "@ai-sdk/openai": "^3.0.9",
69
70
  "@ai-sdk/provider": "3.0.10",
70
71
  "@ai-sdk/provider-utils": "4.0.26",
71
- "@elizaos/cloud-sdk": "2.0.3-beta.2",
72
- "@elizaos/core": "2.0.3-beta.2",
73
- "@elizaos/shared": "2.0.3-beta.2",
72
+ "@elizaos/cloud-sdk": "2.0.3-beta.3",
73
+ "@elizaos/core": "2.0.3-beta.3",
74
+ "@elizaos/shared": "2.0.3-beta.3",
74
75
  "@noble/curves": "2.2.0",
75
76
  "@noble/hashes": "1.8.0",
76
77
  "@opentelemetry/api": "1.9.1",
@@ -321,7 +322,7 @@
321
322
  }
322
323
  }
323
324
  },
324
- "gitHead": "82fe0f44215954c2417328203f5bd6510985c1fc",
325
+ "gitHead": "f54b0f4eaed317d59fa7dbcdce20f4cdb0734420",
325
326
  "eliza": {
326
327
  "platforms": [
327
328
  "browser",
@@ -0,0 +1,208 @@
1
+ {
2
+ "id": "elizacloud",
3
+ "name": "Elizacloud",
4
+ "description": "elizaOS plugin to connect with elizaOS Cloud services",
5
+ "npmName": "@elizaos/plugin-elizacloud",
6
+ "version": "2.0.0-beta.0",
7
+ "source": "bundled",
8
+ "tags": ["elizacloud"],
9
+ "config": {
10
+ "ELIZAOS_CLOUD_API_KEY": {
11
+ "type": "secret",
12
+ "required": true,
13
+ "sensitive": true,
14
+ "label": "Cloud Api Key",
15
+ "help": "API key used to authenticate requests to ElizaOS Cloud API (format: eliza_xxxxx). Get it from https://www.elizacloud.ai/dashboard/api-keys",
16
+ "advanced": false
17
+ },
18
+ "ELIZAOS_CLOUD_BASE_URL": {
19
+ "type": "url",
20
+ "required": false,
21
+ "sensitive": false,
22
+ "default": "https://www.elizacloud.ai/api/v1",
23
+ "label": "Cloud Base Url",
24
+ "help": "Base URL for all ElizaOS Cloud API requests.",
25
+ "advanced": false
26
+ },
27
+ "ELIZAOS_CLOUD_SMALL_MODEL": {
28
+ "type": "string",
29
+ "required": false,
30
+ "sensitive": false,
31
+ "default": "openai/gpt-oss-120b:nitro",
32
+ "label": "Cloud Small Model",
33
+ "help": "Small/fast model for quick tasks (overrides SMALL_MODEL). Default: openai/gpt-oss-120b:nitro",
34
+ "placeholder": "openai/gpt-oss-120b:nitro",
35
+ "advanced": false
36
+ },
37
+ "SMALL_MODEL": {
38
+ "type": "string",
39
+ "required": false,
40
+ "sensitive": false,
41
+ "default": "openai/gpt-oss-120b:nitro",
42
+ "label": "Model",
43
+ "help": "Fallback identifier for the small language model if ELIZAOS_CLOUD_SMALL_MODEL is not set.",
44
+ "placeholder": "openai/gpt-oss-120b:nitro",
45
+ "advanced": false
46
+ },
47
+ "ELIZAOS_CLOUD_LARGE_MODEL": {
48
+ "type": "string",
49
+ "required": false,
50
+ "sensitive": false,
51
+ "default": "openai/gpt-oss-120b:nitro",
52
+ "label": "Cloud Large Model",
53
+ "help": "Large/powerful model for complex tasks (overrides LARGE_MODEL). Default: openai/gpt-oss-120b:nitro",
54
+ "placeholder": "openai/gpt-oss-120b:nitro",
55
+ "advanced": false
56
+ },
57
+ "LARGE_MODEL": {
58
+ "type": "string",
59
+ "required": false,
60
+ "sensitive": false,
61
+ "default": "openai/gpt-oss-120b:nitro",
62
+ "label": "Model",
63
+ "help": "Fallback identifier for the large language model if ELIZAOS_CLOUD_LARGE_MODEL is not set.",
64
+ "placeholder": "openai/gpt-oss-120b:nitro",
65
+ "advanced": false
66
+ },
67
+ "ELIZAOS_CLOUD_EMBEDDING_MODEL": {
68
+ "type": "string",
69
+ "required": false,
70
+ "sensitive": false,
71
+ "default": "text-embedding-3-small",
72
+ "label": "Cloud Embedding Model",
73
+ "help": "Identifier of the model to use for generating text embeddings.",
74
+ "placeholder": "e.g., text-embedding-3-small",
75
+ "advanced": false
76
+ },
77
+ "ELIZAOS_CLOUD_EMBEDDING_URL": {
78
+ "type": "url",
79
+ "required": false,
80
+ "sensitive": false,
81
+ "label": "Cloud Embedding Url",
82
+ "help": "Custom base URL for the ElizaOS Cloud embeddings endpoint.",
83
+ "advanced": false
84
+ },
85
+ "ELIZAOS_CLOUD_EMBEDDING_API_KEY": {
86
+ "type": "secret",
87
+ "required": false,
88
+ "sensitive": true,
89
+ "label": "Cloud Embedding Api Key",
90
+ "help": "Custom API key for the ElizaOS Cloud embeddings endpoint.",
91
+ "advanced": false
92
+ },
93
+ "ELIZAOS_CLOUD_EMBEDDING_DIMENSIONS": {
94
+ "type": "number",
95
+ "required": false,
96
+ "sensitive": false,
97
+ "default": "1536",
98
+ "label": "Cloud Embedding Dimensions",
99
+ "help": "Number of dimensions for the returned embedding vectors.",
100
+ "advanced": false
101
+ },
102
+ "ELIZAOS_CLOUD_IMAGE_DESCRIPTION_MODEL": {
103
+ "type": "string",
104
+ "required": false,
105
+ "sensitive": false,
106
+ "default": "gpt-5-mini",
107
+ "label": "Cloud Image Description Model",
108
+ "help": "Identifier of the model used for describing images.",
109
+ "placeholder": "e.g., gpt-4o, claude-sonnet-4-20250514",
110
+ "advanced": false
111
+ },
112
+ "ELIZAOS_CLOUD_IMAGE_DESCRIPTION_MAX_TOKENS": {
113
+ "type": "secret",
114
+ "required": false,
115
+ "sensitive": true,
116
+ "default": "8192",
117
+ "label": "Cloud Image Description Max Tokens",
118
+ "help": "Maximum number of tokens allowed in the image-description model response.",
119
+ "advanced": false
120
+ },
121
+ "ELIZAOS_CLOUD_TTS_MODEL": {
122
+ "type": "string",
123
+ "required": false,
124
+ "sensitive": false,
125
+ "default": "gpt-5-mini-tts",
126
+ "label": "Cloud Tts Model",
127
+ "help": "Identifier of the model used for text-to-speech generation.",
128
+ "placeholder": "e.g., tts-1, eleven_multilingual_v2",
129
+ "advanced": false
130
+ },
131
+ "ELIZAOS_CLOUD_TTS_VOICE": {
132
+ "type": "string",
133
+ "required": false,
134
+ "sensitive": false,
135
+ "default": "nova",
136
+ "label": "Cloud Tts Voice",
137
+ "help": "Voice profile to use for text-to-speech output.",
138
+ "advanced": false
139
+ },
140
+ "ELIZAOS_CLOUD_TTS_INSTRUCTIONS": {
141
+ "type": "textarea",
142
+ "required": false,
143
+ "sensitive": false,
144
+ "label": "Cloud Tts Instructions",
145
+ "help": "Optional instructions to control the style or behavior of the text-to-speech request.",
146
+ "advanced": false
147
+ },
148
+ "ELIZAOS_CLOUD_EXPERIMENTAL_TELEMETRY": {
149
+ "type": "boolean",
150
+ "required": false,
151
+ "sensitive": false,
152
+ "default": "False",
153
+ "label": "Cloud Experimental Telemetry",
154
+ "help": "Enable experimental telemetry features for enhanced debugging and usage analytics.",
155
+ "advanced": true
156
+ },
157
+ "ELIZAOS_CLOUD_BROWSER_BASE_URL": {
158
+ "type": "url",
159
+ "required": false,
160
+ "sensitive": false,
161
+ "label": "Cloud Browser Base Url",
162
+ "help": "Browser-only proxy endpoint base URL for ElizaOS Cloud requests (no secrets in the client).",
163
+ "advanced": false
164
+ },
165
+ "ELIZAOS_CLOUD_BROWSER_EMBEDDING_URL": {
166
+ "type": "url",
167
+ "required": false,
168
+ "sensitive": false,
169
+ "label": "Cloud Browser Embedding Url",
170
+ "help": "Browser-only proxy endpoint base URL for ElizaOS Cloud embeddings.",
171
+ "advanced": false
172
+ },
173
+ "ELIZAOS_CLOUD_ENABLED": {
174
+ "type": "boolean",
175
+ "required": false,
176
+ "sensitive": false,
177
+ "default": "False",
178
+ "label": "Cloud Enabled",
179
+ "help": "Enable ElizaCloud container provisioning, device auth, bridge, and backup services. When false, only inference model handlers are active.",
180
+ "advanced": false
181
+ },
182
+ "ELIZAOS_CLOUD_APP_VERSION": {
183
+ "type": "string",
184
+ "required": false,
185
+ "sensitive": false,
186
+ "default": "2.0.0-beta.0",
187
+ "label": "Cloud App Version",
188
+ "help": "Application version sent during device authentication.",
189
+ "advanced": false
190
+ }
191
+ },
192
+ "render": {
193
+ "visible": true,
194
+ "pinTo": [],
195
+ "style": "card",
196
+ "icon": "Cloud",
197
+ "group": "feature-other",
198
+ "groupOrder": 12,
199
+ "actions": ["enable", "configure"]
200
+ },
201
+ "resources": {
202
+ "homepage": "https://github.com/eliza-ai/eliza/tree/develop/packages/plugin-elizacloud#readme",
203
+ "repository": "https://github.com/eliza-ai/eliza"
204
+ },
205
+ "dependsOn": [],
206
+ "kind": "plugin",
207
+ "subtype": "other"
208
+ }
@@ -49,7 +49,7 @@ export interface CloudVoiceClient {
49
49
  type ClientFactory = (runtime: IAgentRuntime) => CloudVoiceClient;
50
50
 
51
51
  let clientFactory: ClientFactory = (runtime) =>
52
- createElizaCloudClient(runtime) as unknown as CloudVoiceClient;
52
+ createElizaCloudClient(runtime) as CloudVoiceClient;
53
53
 
54
54
  /**
55
55
  * Test seam: substitute the SDK client factory. Pass `null` to reset to
@@ -61,7 +61,7 @@ export function setCloudVoiceClientFactoryForTesting(
61
61
  ): void {
62
62
  if (factory === null) {
63
63
  clientFactory = (runtime) =>
64
- createElizaCloudClient(runtime) as unknown as CloudVoiceClient;
64
+ createElizaCloudClient(runtime) as CloudVoiceClient;
65
65
  } else {
66
66
  clientFactory = factory;
67
67
  }
package/src/index.ts CHANGED
@@ -174,7 +174,7 @@ export const elizaOSCloudPlugin: Plugin = {
174
174
  models: {
175
175
  [ModelType.TEXT_EMBEDDING]: handleTextEmbedding,
176
176
  // Batch path: one request embeds N texts (the embedding-drain service uses
177
- // this to collapse ~19 serial single-text round-trips into ~2 batched calls).
177
+ // this to collapse serial single-text round-trips into fewer batched calls).
178
178
  [ModelType.TEXT_EMBEDDING_BATCH]: (runtime, params: { texts: string[] }) =>
179
179
  handleBatchTextEmbedding(runtime, params.texts),
180
180
  [TEXT_NANO_MODEL_TYPE]: handleTextNano,
@@ -259,6 +259,15 @@ export async function handleBatchTextEmbedding(
259
259
  `the current key is not authorized for the embedding endpoint.`
260
260
  );
261
261
  }
262
+ // A terminal 429 means the bounded retries were exhausted and the
263
+ // gateway is still rate-limiting us — surface that distinctly. Any
264
+ // other terminal status (incl. a 503/504 that followed an earlier 429)
265
+ // reports its own status, since that is the failure the caller hit.
266
+ if (response.status === 429) {
267
+ throw new Error(
268
+ `[BatchEmbeddings] Rate-limit retry exhausted: API error: ${response.status} ${response.statusText}`
269
+ );
270
+ }
262
271
  throw new Error(
263
272
  `[BatchEmbeddings] API error: ${response.status} ${response.statusText}`
264
273
  );
@@ -23,7 +23,7 @@ export interface CloudTtsClient {
23
23
  type CloudTtsClientFactory = (runtime: IAgentRuntime) => CloudTtsClient;
24
24
 
25
25
  let cloudTtsClientFactory: CloudTtsClientFactory = (runtime) =>
26
- createElizaCloudClient(runtime) as unknown as CloudTtsClient;
26
+ createElizaCloudClient(runtime) as CloudTtsClient;
27
27
 
28
28
  /**
29
29
  * Test seam: substitute the SDK client factory used by `handleTextToSpeech`.
@@ -35,7 +35,7 @@ export function setCloudTtsClientFactoryForTesting(
35
35
  ): void {
36
36
  if (factory === null) {
37
37
  cloudTtsClientFactory = (runtime) =>
38
- createElizaCloudClient(runtime) as unknown as CloudTtsClient;
38
+ createElizaCloudClient(runtime) as CloudTtsClient;
39
39
  } else {
40
40
  cloudTtsClientFactory = factory;
41
41
  }