@elizaos/plugin-elizacloud 2.0.3-beta.2 → 2.0.3-beta.4

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
package/dist/init.js CHANGED
@@ -179,4 +179,4 @@ export {
179
179
  initializeOpenAI
180
180
  };
181
181
 
182
- //# debugId=7C13C32DACCFD75F64756E2164756E21
182
+ //# debugId=4F743185698A871764756E2164756E21
package/dist/init.js.map CHANGED
@@ -7,6 +7,6 @@
7
7
  "import { type IAgentRuntime, logger } from \"@elizaos/core\";\nimport { getApiKey, isBrowser } from \"./utils/config\";\nimport { createCloudApiClient } from \"./utils/sdk-client\";\n\nexport function initializeOpenAI(\n _config: Record<string, string | null>,\n runtime: IAgentRuntime\n): void {\n void (async () => {\n try {\n if (!getApiKey(runtime) && !isBrowser()) {\n logger.warn(\n \"ELIZAOS_CLOUD_API_KEY is not set in environment - ElizaOS Cloud functionality will be limited\"\n );\n logger.info(\"Get your API key from https://www.elizacloud.ai/dashboard/api-keys\");\n return;\n }\n try {\n await createCloudApiClient(runtime).get(\"/models\");\n logger.log(\"ElizaOS Cloud API key validated successfully\");\n } catch (fetchError) {\n const message = fetchError instanceof Error ? fetchError.message : String(fetchError);\n logger.warn(`ElizaOS Cloud API key validation failed: ${message}`);\n logger.warn(\n \"ElizaOS Cloud functionality will be limited until a valid API key is provided\"\n );\n }\n } catch (error) {\n const message =\n (error as { errors?: Array<{ message: string }> })?.errors\n ?.map((e) => e.message)\n .join(\", \") || (error instanceof Error ? error.message : String(error));\n logger.warn(\n `ElizaOS Cloud plugin configuration issue: ${message} - You need to configure the ELIZAOS_CLOUD_API_KEY in your environment variables`\n );\n logger.info(\"Get your API key from https://www.elizacloud.ai/dashboard/api-keys\");\n }\n })();\n}\n"
8
8
  ],
9
9
  "mappings": "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",
10
- "debugId": "7C13C32DACCFD75F64756E2164756E21",
10
+ "debugId": "4F743185698A871764756E2164756E21",
11
11
  "names": []
12
12
  }
@@ -651,4 +651,4 @@ export {
651
651
  CLOUD_BILLING_URL
652
652
  };
653
653
 
654
- //# debugId=58E0F22026D243D464756E2164756E21
654
+ //# debugId=06BC13FBB45CA72E64756E2164756E21
@@ -9,6 +9,6 @@
9
9
  "import {\n isCloudInferenceSelectedInConfig,\n isElizaSettingsDebugEnabled,\n migrateLegacyRuntimeConfig,\n settingsDebugCloudSummary,\n} from \"@elizaos/core\";\nimport { resolveCloudApiBaseUrl as resolveCanonicalCloudApiBaseUrl } from \"../cloud/base-url.js\";\nimport { validateCloudBaseUrl } from \"../cloud/validate-url.js\";\nimport type { AgentRuntime } from \"@elizaos/core\";\nimport { logger } from \"@elizaos/core\";\nimport {\n applyCanonicalSetupConfig,\n type ElizaConfig,\n normalizeEnvValue,\n} from \"./config-like\";\nimport {\n clearCloudSecrets,\n getCloudSecret,\n scrubCloudSecretsFromEnv,\n} from \"./cloud-secrets\";\n\nconst DEFAULT_CLOUD_API_BASE_URL = \"https://www.elizacloud.ai/api/v1\";\nexport const CLOUD_BILLING_URL =\n \"https://www.elizacloud.ai/dashboard/settings?tab=billing\";\n\nconst CLOUD_ENV_KEYS = [\n \"ELIZAOS_CLOUD_API_KEY\",\n \"ELIZAOS_CLOUD_ENABLED\",\n \"ELIZAOS_CLOUD_BASE_URL\",\n \"ELIZAOS_CLOUD_NANO_MODEL\",\n \"ELIZAOS_CLOUD_MEDIUM_MODEL\",\n \"ELIZAOS_CLOUD_SMALL_MODEL\",\n \"ELIZAOS_CLOUD_LARGE_MODEL\",\n \"ELIZAOS_CLOUD_MEGA_MODEL\",\n \"ELIZAOS_CLOUD_RESPONSE_HANDLER_MODEL\",\n \"ELIZAOS_CLOUD_SHOULD_RESPOND_MODEL\",\n \"ELIZAOS_CLOUD_ACTION_PLANNER_MODEL\",\n \"ELIZAOS_CLOUD_PLANNER_MODEL\",\n \"ELIZAOS_CLOUD_USE_INFERENCE\",\n \"ELIZAOS_CLOUD_USE_TTS\",\n \"ELIZAOS_CLOUD_USE_MEDIA\",\n \"ELIZAOS_CLOUD_USE_EMBEDDINGS\",\n \"ELIZAOS_CLOUD_USE_RPC\",\n] as const;\n\nconst CLOUD_RUNTIME_SECRET_KEYS = [\n \"ELIZAOS_CLOUD_API_KEY\",\n \"ELIZAOS_CLOUD_ENABLED\",\n \"ELIZAOS_CLOUD_BASE_URL\",\n \"ELIZAOS_CLOUD_NANO_MODEL\",\n \"ELIZAOS_CLOUD_MEDIUM_MODEL\",\n \"ELIZAOS_CLOUD_SMALL_MODEL\",\n \"ELIZAOS_CLOUD_LARGE_MODEL\",\n \"ELIZAOS_CLOUD_MEGA_MODEL\",\n \"ELIZAOS_CLOUD_RESPONSE_HANDLER_MODEL\",\n \"ELIZAOS_CLOUD_SHOULD_RESPOND_MODEL\",\n \"ELIZAOS_CLOUD_ACTION_PLANNER_MODEL\",\n \"ELIZAOS_CLOUD_PLANNER_MODEL\",\n \"ELIZA_CLOUD_AUTH_TOKEN\",\n \"ELIZA_CLOUD_USER_ID\",\n \"ELIZA_CLOUD_ORGANIZATION_ID\",\n] as const;\n\nconst CLOUD_RUNTIME_SETTING_KEYS = [\n \"ELIZA_CLOUD_AUTH_TOKEN\",\n \"ELIZA_CLOUD_USER_ID\",\n \"ELIZA_CLOUD_ORGANIZATION_ID\",\n] as const;\n\nconst CLOUD_AUTH_CLEAR_METHODS = [\n \"disconnect\",\n \"logout\",\n \"signOut\",\n \"signout\",\n \"clearSession\",\n \"clearAuth\",\n \"resetAuth\",\n \"reset\",\n] as const;\n\ntype CloudClientLike = {\n get?: (path: string) => Promise<unknown>;\n};\n\nexport type CloudAuthLike = {\n authenticateWithApiKey?: (input: {\n apiKey: string;\n organizationId?: string;\n userId?: string;\n }) => unknown;\n isAuthenticated?: () => boolean;\n getUserId?: () => string | undefined;\n getOrganizationId?: () => string | undefined;\n getClient?: () => CloudClientLike | null;\n} & Partial<\n Record<\n (typeof CLOUD_AUTH_CLEAR_METHODS)[number],\n (() => Promise<unknown>) | (() => unknown)\n >\n>;\n\nexport type RuntimeCloudLike = AgentRuntime & {\n agentId: string;\n character: {\n secrets?: Record<string, string | number | boolean>;\n settings?: Record<string, unknown>;\n };\n updateAgent?: (\n agentId: string,\n update: { secrets: Record<string, string | number | boolean> },\n ) => Promise<unknown>;\n setSetting?: (key: string, value: string | null) => unknown;\n getService?: (name: string) => unknown;\n};\n\ntype CloudManagerLike = {\n disconnect?: () => Promise<void>;\n} | null;\n\nexport type CloudConnectionSnapshot = {\n apiKey: string | undefined;\n authConnected: boolean;\n cloudAuth: CloudAuthLike | null;\n connected: boolean;\n enabled: boolean;\n hasApiKey: boolean;\n organizationId: string | undefined;\n userId: string | undefined;\n};\n\ntype CloudCreditsResponse = {\n balance: number | null;\n connected: boolean;\n authRejected?: boolean;\n critical?: boolean;\n error?: string;\n low?: boolean;\n topUpUrl?: string;\n};\n\n/** Thrown when the credits endpoint returns 401 — same credential path as chat completions. */\nexport class CloudCreditsAuthRejectedError extends Error {\n override readonly name = \"CloudCreditsAuthRejectedError\";\n constructor(message = \"Eliza Cloud API key was rejected\") {\n super(message);\n }\n}\n\nfunction cloudCreditsHttpErrorMessage(\n status: number,\n creditResponse: { error?: unknown },\n): string {\n const err = creditResponse.error;\n if (typeof err === \"string\" && err.trim()) {\n return err.trim();\n }\n if (err && typeof err === \"object\" && \"message\" in err) {\n const msg = (err as { message?: unknown }).message;\n if (typeof msg === \"string\" && msg.trim()) {\n return msg.trim();\n }\n }\n return `HTTP ${status}`;\n}\n\nfunction asRuntimeCloud(runtime: AgentRuntime | null): RuntimeCloudLike | null {\n return runtime as RuntimeCloudLike | null;\n}\n\nexport function getCloudAuth(\n runtime: AgentRuntime | null,\n): CloudAuthLike | null {\n const runtimeWithServices = asRuntimeCloud(runtime);\n if (typeof runtimeWithServices?.getService !== \"function\") {\n return null;\n }\n\n const service = runtimeWithServices.getService(\"CLOUD_AUTH\");\n return service && typeof service === \"object\"\n ? (service as CloudAuthLike)\n : null;\n}\n\nfunction resolvePersistedCloudIdentity(runtime: AgentRuntime | null): {\n organizationId: string | undefined;\n userId: string | undefined;\n} {\n const runtimeWithCloud = asRuntimeCloud(runtime);\n return {\n organizationId:\n normalizeEnvValue(\n runtimeWithCloud?.getSetting?.(\"ELIZA_CLOUD_ORGANIZATION_ID\") as\n | string\n | undefined,\n ) ??\n normalizeEnvValue(\n runtimeWithCloud?.character?.secrets?.ELIZA_CLOUD_ORGANIZATION_ID as\n | string\n | undefined,\n ),\n userId:\n normalizeEnvValue(\n runtimeWithCloud?.getSetting?.(\"ELIZA_CLOUD_USER_ID\") as\n | string\n | undefined,\n ) ??\n normalizeEnvValue(\n runtimeWithCloud?.character?.secrets?.ELIZA_CLOUD_USER_ID as\n | string\n | undefined,\n ),\n };\n}\n\nexport function resolveCloudApiBaseUrl(rawBaseUrl?: string): string {\n return (\n resolveCanonicalCloudApiBaseUrl(rawBaseUrl ?? DEFAULT_CLOUD_API_BASE_URL) ??\n DEFAULT_CLOUD_API_BASE_URL\n );\n}\n\nexport function resolveCloudApiKey(\n config: Pick<ElizaConfig, \"cloud\"> | Record<string, unknown>,\n runtime?: {\n character?: { secrets?: Record<string, unknown> };\n getSetting?: (key: string) => unknown;\n } | null,\n): string | undefined {\n migrateLegacyRuntimeConfig(config as Record<string, unknown>);\n // 1. Config file (disk)\n const configApiKey = normalizeEnvValue(\n (config as { cloud?: { apiKey?: string } }).cloud?.apiKey,\n );\n if (configApiKey) return configApiKey;\n\n if (!isCloudInferenceSelectedInConfig(config as Record<string, unknown>)) {\n // A linked cloud account is represented by the persisted disk key above.\n // Do not resurrect cloud from sealed/env/runtime fallbacks when the\n // canonical connection is local, remote, or unset.\n return undefined;\n }\n\n // 2. Sealed in-process secret store\n const sealedKey = normalizeEnvValue(getCloudSecret(\"ELIZAOS_CLOUD_API_KEY\"));\n if (sealedKey) return sealedKey;\n\n // 3. Process environment (may not be scrubbed yet)\n const envKey = normalizeEnvValue(process.env.ELIZAOS_CLOUD_API_KEY);\n if (envKey) return envKey;\n\n // 4. Runtime settings (persisted in database, survives restarts)\n const runtimeSettingKey = normalizeEnvValue(\n runtime?.getSetting?.(\"ELIZAOS_CLOUD_API_KEY\") as string | undefined,\n );\n if (runtimeSettingKey) return runtimeSettingKey;\n\n // 5. Runtime character secrets (persisted in database, survives restarts)\n const runtimeKey = normalizeEnvValue(\n runtime?.character?.secrets?.ELIZAOS_CLOUD_API_KEY as string | undefined,\n );\n if (runtimeKey) return runtimeKey;\n\n return undefined;\n}\n\nexport function resolveCloudConnectionSnapshot(\n config: Partial<ElizaConfig>,\n runtime: AgentRuntime | null,\n): CloudConnectionSnapshot {\n migrateLegacyRuntimeConfig(config as Record<string, unknown>);\n const _cloudRecord =\n config.cloud && typeof config.cloud === \"object\"\n ? (config.cloud as Record<string, unknown>)\n : undefined;\n const enabled = isCloudInferenceSelectedInConfig(\n config as Record<string, unknown>,\n );\n const apiKey = resolveCloudApiKey(config, runtime);\n const cloudAuth = getCloudAuth(runtime);\n const authConnected = Boolean(cloudAuth?.isAuthenticated?.());\n const hasApiKey = Boolean(apiKey);\n const persistedIdentity = resolvePersistedCloudIdentity(runtime);\n const shouldExposeIdentity = authConnected || hasApiKey;\n\n return {\n apiKey,\n authConnected,\n cloudAuth,\n connected: authConnected || hasApiKey,\n enabled,\n hasApiKey,\n organizationId: shouldExposeIdentity\n ? (normalizeEnvValue(cloudAuth?.getOrganizationId?.()) ??\n persistedIdentity.organizationId)\n : undefined,\n userId: shouldExposeIdentity\n ? (normalizeEnvValue(cloudAuth?.getUserId?.()) ??\n persistedIdentity.userId)\n : undefined,\n };\n}\n\n/**\n * Coerce an Eliza Cloud `balance` field into a number. The cloud API\n * returns `balance` as `string | number` (per the Bridge client + config\n * type definitions) — string when the upstream is using a fixed-precision\n * decimal, number when it's been arithmetic'd. Treat both as the same\n * dollar amount; reject anything else as an unexpected response.\n */\nfunction coerceCloudBalance(value: unknown): number | null {\n if (typeof value === \"number\" && Number.isFinite(value)) {\n return value;\n }\n if (typeof value === \"string\") {\n const trimmed = value.trim();\n if (!trimmed) return null;\n const parsed = Number.parseFloat(trimmed);\n return Number.isFinite(parsed) ? parsed : null;\n }\n return null;\n}\n\nasync function fetchCloudCreditsByApiKey(\n baseUrl: string,\n apiKey: string,\n): Promise<number | null> {\n const response = await fetch(`${baseUrl}/credits/balance`, {\n headers: {\n Accept: \"application/json\",\n Authorization: `Bearer ${apiKey}`,\n },\n redirect: \"manual\",\n signal: AbortSignal.timeout(10_000),\n });\n\n if (response.status >= 300 && response.status < 400) {\n throw new Error(\n \"Cloud credits request was redirected; redirects are not allowed\",\n );\n }\n\n const creditResponse = (await response.json().catch((err: unknown) => {\n console.warn(\n \"[cloud-connection] Failed to parse credit balance response JSON:\",\n err,\n );\n return {};\n })) as {\n balance?: unknown;\n data?: { balance?: unknown };\n error?: unknown;\n };\n\n if (response.status === 401) {\n throw new CloudCreditsAuthRejectedError(\n cloudCreditsHttpErrorMessage(401, creditResponse),\n );\n }\n\n if (!response.ok) {\n throw new Error(\n cloudCreditsHttpErrorMessage(response.status, creditResponse),\n );\n }\n\n const balance =\n coerceCloudBalance(creditResponse.balance) ??\n coerceCloudBalance(creditResponse.data?.balance);\n\n return balance;\n}\n\n/** Configurable credit thresholds. Override via env vars if defaults don't fit. */\nconst CREDIT_LOW_THRESHOLD = Number(\n process.env.ELIZA_CREDIT_LOW_THRESHOLD ?? \"2.0\",\n);\nconst CREDIT_CRITICAL_THRESHOLD = Number(\n process.env.ELIZA_CREDIT_CRITICAL_THRESHOLD ?? \"0.5\",\n);\n\nfunction withCreditFlags(balance: number): CloudCreditsResponse {\n return {\n connected: true,\n balance,\n low: balance < CREDIT_LOW_THRESHOLD,\n critical: balance < CREDIT_CRITICAL_THRESHOLD,\n topUpUrl: CLOUD_BILLING_URL,\n };\n}\n\nexport async function fetchCloudCredits(\n config: Partial<ElizaConfig>,\n runtime: AgentRuntime | null,\n): Promise<CloudCreditsResponse> {\n const snapshot = resolveCloudConnectionSnapshot(config, runtime);\n let authenticatedFailure: string | null = null;\n let authenticatedUnexpectedResponse = false;\n\n if (!snapshot.connected) {\n return { balance: null, connected: false };\n }\n\n const cloudClient = snapshot.cloudAuth?.getClient?.();\n if (snapshot.authConnected && typeof cloudClient?.get === \"function\") {\n try {\n const creditResponse = (await cloudClient.get(\"/credits/balance\")) as {\n balance?: unknown;\n data?: { balance?: unknown };\n };\n const rawBalance =\n coerceCloudBalance(creditResponse?.balance) ??\n coerceCloudBalance(creditResponse?.data?.balance);\n\n if (typeof rawBalance === \"number\") {\n return withCreditFlags(rawBalance);\n }\n\n authenticatedUnexpectedResponse = true;\n logger.debug(\n `[cloud/credits] Unexpected authenticated response shape: ${JSON.stringify(creditResponse)}`,\n );\n } catch (err) {\n const msg = err instanceof Error ? err.message : \"cloud API unreachable\";\n authenticatedFailure = msg;\n logger.debug(\n `[cloud/credits] Authenticated balance fetch failed: ${msg}`,\n );\n }\n }\n\n if (!snapshot.apiKey) {\n return {\n balance: null,\n connected: snapshot.connected,\n error:\n authenticatedFailure ??\n (authenticatedUnexpectedResponse\n ? \"unexpected response\"\n : \"missing cloud api key\"),\n };\n }\n\n const resolvedBaseUrl = resolveCloudApiBaseUrl(config.cloud?.baseUrl);\n const baseUrlRejection = await validateCloudBaseUrl(resolvedBaseUrl);\n if (baseUrlRejection) {\n return {\n balance: null,\n connected: true,\n error: baseUrlRejection,\n };\n }\n\n try {\n const balance = await fetchCloudCreditsByApiKey(\n resolvedBaseUrl,\n snapshot.apiKey,\n );\n\n if (typeof balance !== \"number\") {\n return {\n balance: null,\n connected: true,\n error: \"unexpected response\",\n };\n }\n\n return withCreditFlags(balance);\n } catch (err) {\n if (err instanceof CloudCreditsAuthRejectedError) {\n logger.debug(`[cloud/credits] API key rejected: ${err.message}`);\n return {\n balance: null,\n connected: true,\n authRejected: true,\n error: err.message,\n topUpUrl: CLOUD_BILLING_URL,\n };\n }\n const msg = err instanceof Error ? err.message : \"cloud API unreachable\";\n logger.debug(`[cloud/credits] Failed to fetch balance via API key: ${msg}`);\n return {\n balance: null,\n connected: true,\n error: msg,\n };\n }\n}\n\nexport async function clearCloudAuthService(\n cloudAuth: CloudAuthLike | null,\n): Promise<void> {\n if (!cloudAuth) {\n return;\n }\n\n const seen = new Set<(...args: never[]) => unknown>();\n for (const methodName of CLOUD_AUTH_CLEAR_METHODS) {\n const method = cloudAuth[methodName];\n if (typeof method !== \"function\" || seen.has(method)) {\n continue;\n }\n\n seen.add(method);\n try {\n await method.call(cloudAuth);\n // First successful clear method is sufficient — stop trying remaining ones.\n break;\n } catch (err) {\n logger.warn(\n `[cloud/disconnect] Failed to invoke CLOUD_AUTH.${methodName}: ${\n err instanceof Error ? err.message : String(err)\n }`,\n );\n }\n }\n}\n\nfunction clearCloudEnv(): void {\n for (const key of CLOUD_ENV_KEYS) {\n delete process.env[key];\n }\n clearCloudSecrets();\n scrubCloudSecretsFromEnv();\n}\n\nasync function clearRuntimeCloudState(\n runtime: AgentRuntime | null,\n): Promise<void> {\n const runtimeWithCloud = asRuntimeCloud(runtime);\n if (!runtimeWithCloud) {\n return;\n }\n\n const existingSecrets = runtimeWithCloud.character.secrets ?? {};\n const nextSecrets = { ...existingSecrets };\n for (const key of CLOUD_RUNTIME_SECRET_KEYS) {\n delete nextSecrets[key];\n }\n runtimeWithCloud.character.secrets = nextSecrets;\n\n if (\n runtimeWithCloud.character.settings &&\n typeof runtimeWithCloud.character.settings === \"object\"\n ) {\n for (const key of CLOUD_RUNTIME_SETTING_KEYS) {\n delete runtimeWithCloud.character.settings[key];\n }\n }\n\n if (typeof runtimeWithCloud.setSetting === \"function\") {\n for (const key of CLOUD_RUNTIME_SETTING_KEYS) {\n try {\n runtimeWithCloud.setSetting(key, null);\n } catch (err) {\n logger.warn(\n `[cloud/disconnect] Failed to clear runtime setting ${key}: ${\n err instanceof Error ? err.message : String(err)\n }`,\n );\n }\n }\n }\n\n if (typeof runtimeWithCloud.updateAgent === \"function\") {\n try {\n await runtimeWithCloud.updateAgent(runtimeWithCloud.agentId, {\n secrets: { ...nextSecrets },\n });\n } catch (err) {\n logger.warn(\n `[cloud/disconnect] Failed to clear cloud secrets from agent DB: ${\n err instanceof Error ? err.message : String(err)\n }`,\n );\n }\n }\n}\n\nexport async function disconnectCloudConnection(args: {\n cloudManager?: CloudManagerLike;\n config: Partial<ElizaConfig>;\n runtime: AgentRuntime | null;\n saveConfig?: (config: Partial<ElizaConfig>) => void;\n}): Promise<void> {\n const { cloudManager = null, config, runtime, saveConfig } = args;\n\n if (isElizaSettingsDebugEnabled()) {\n const c = config.cloud as Record<string, unknown> | undefined;\n logger.debug(\n `[eliza][settings][cloud] disconnectCloudConnection start cloud=${JSON.stringify(settingsDebugCloudSummary(c))}`,\n );\n }\n\n if (typeof cloudManager?.disconnect === \"function\") {\n try {\n await cloudManager.disconnect();\n } catch (err) {\n logger.warn(\n `[cloud/disconnect] Failed to disconnect cloud manager: ${\n err instanceof Error ? err.message : String(err)\n }`,\n );\n }\n }\n\n await clearCloudAuthService(getCloudAuth(runtime));\n\n const nextCloud = { ...(config.cloud ?? {}) };\n delete nextCloud.apiKey;\n config.cloud = nextCloud;\n applyCanonicalSetupConfig(config as ElizaConfig, {\n deploymentTarget: { runtime: \"local\" },\n linkedAccounts: {\n elizacloud: {\n status: \"unlinked\",\n source: \"api-key\",\n },\n },\n clearRoutes: [\"llmText\", \"tts\", \"media\", \"embeddings\", \"rpc\"],\n });\n migrateLegacyRuntimeConfig(config as Record<string, unknown>);\n\n try {\n saveConfig?.(config);\n if (isElizaSettingsDebugEnabled()) {\n const c = config.cloud as Record<string, unknown> | undefined;\n logger.debug(\n `[eliza][settings][cloud] disconnectCloudConnection saveConfig OK cloud=${JSON.stringify(settingsDebugCloudSummary(c))}`,\n );\n }\n } catch (err) {\n logger.warn(\n `[cloud/disconnect] Failed to save cloud disconnect state: ${\n err instanceof Error ? err.message : String(err)\n }`,\n );\n }\n\n clearCloudEnv();\n await clearRuntimeCloudState(runtime);\n\n if (isElizaSettingsDebugEnabled()) {\n logger.debug(\n \"[eliza][settings][cloud] disconnectCloudConnection done (env cleared + runtime cloud state cleared)\",\n );\n }\n}\n\n/** Matches `reason` from GET /api/cloud/status when connected via API key without CLOUD_AUTH. */\nconst CLOUD_STATUS_API_KEY_ONLY_REASONS: ReadonlySet<string> = new Set([\n \"api_key_present_not_authenticated\",\n \"api_key_present_runtime_not_started\",\n]);\n\nexport function isCloudStatusReasonApiKeyOnly(\n reason: string | null | undefined,\n): boolean {\n return (\n typeof reason === \"string\" && CLOUD_STATUS_API_KEY_ONLY_REASONS.has(reason)\n );\n}\n"
10
10
  ],
11
11
  "mappings": "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",
12
- "debugId": "58E0F22026D243D464756E2164756E21",
12
+ "debugId": "06BC13FBB45CA72E64756E2164756E21",
13
13
  "names": []
14
14
  }
@@ -33,4 +33,4 @@ export {
33
33
  _resetCloudSecretsForTesting
34
34
  };
35
35
 
36
- //# debugId=099592669B1CE26764756E2164756E21
36
+ //# debugId=98B876DEDE1FE09164756E2164756E21
@@ -5,6 +5,6 @@
5
5
  "/**\n * Sealed in-process secret store for cloud credentials.\n *\n * The implementation moved to `@elizaos/shared/elizacloud/cloud-secrets` so\n * app-core and other host-layer packages can read sealed cloud secrets without\n * reverse-importing this plugin. This module remains for backwards\n * compatibility with plugin-internal callers.\n */\nexport {\n clearCloudSecrets,\n getCloudSecret,\n scrubCloudSecretsFromEnv,\n _resetCloudSecretsForTesting,\n} from \"@elizaos/shared\";\n"
6
6
  ],
7
7
  "mappings": ";;;;;;;;;;;;;;;;;;;AAQA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;",
8
- "debugId": "099592669B1CE26764756E2164756E21",
8
+ "debugId": "98B876DEDE1FE09164756E2164756E21",
9
9
  "names": []
10
10
  }
@@ -188,4 +188,4 @@ export {
188
188
  persistConfigEnv
189
189
  };
190
190
 
191
- //# debugId=1B185D85653B0B0864756E2164756E21
191
+ //# debugId=8549973E614DD3CF64756E2164756E21
@@ -6,6 +6,6 @@
6
6
  "import fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { resolveStateDir } from \"./state-paths\";\n\nconst CONFIG_ENV_FILENAME = \"config.env\";\nconst BAK_SUFFIX = \".bak\";\nconst TMP_SUFFIX = \".tmp\";\nconst KEY_PATTERN = /^[A-Z][A-Z0-9_]*$/;\n\nconst BLOCKED_CONFIG_ENV_KEYS: ReadonlySet<string> = new Set([\n \"NODE_OPTIONS\",\n \"NODE_EXTRA_CA_CERTS\",\n \"NODE_TLS_REJECT_UNAUTHORIZED\",\n \"NODE_PATH\",\n \"LD_PRELOAD\",\n \"LD_LIBRARY_PATH\",\n \"DYLD_INSERT_LIBRARIES\",\n \"DYLD_LIBRARY_PATH\",\n \"DYLD_FRAMEWORK_PATH\",\n \"DYLD_FALLBACK_FRAMEWORK_PATH\",\n \"DYLD_FALLBACK_LIBRARY_PATH\",\n \"PATH\",\n \"HOME\",\n \"SHELL\",\n \"HTTP_PROXY\",\n \"HTTPS_PROXY\",\n \"ALL_PROXY\",\n \"NO_PROXY\",\n \"SSL_CERT_FILE\",\n \"SSL_CERT_DIR\",\n \"CURL_CA_BUNDLE\",\n]);\n\nexport interface PersistConfigEnvOptions {\n stateDir?: string;\n}\n\ninterface ParsedConfigEnv {\n lines: string[];\n index: Map<string, number>;\n}\n\nfunction parseConfigEnv(contents: string): ParsedConfigEnv {\n const lines = contents.length === 0 ? [] : contents.split(/\\r?\\n/);\n if (lines.length > 0 && lines[lines.length - 1] === \"\") {\n lines.pop();\n }\n const index = new Map<string, number>();\n for (let i = 0; i < lines.length; i += 1) {\n const line = lines[i] ?? \"\";\n const trimmed = line.trim();\n if (!trimmed || trimmed.startsWith(\"#\")) continue;\n const eq = line.indexOf(\"=\");\n if (eq <= 0) continue;\n const key = line.slice(0, eq).trim();\n if (KEY_PATTERN.test(key)) index.set(key, i);\n }\n return { lines, index };\n}\n\nfunction serialiseConfigEnv(parsed: ParsedConfigEnv): string {\n return parsed.lines.length === 0 ? \"\" : `${parsed.lines.join(\"\\n\")}\\n`;\n}\n\nfunction encodeValue(value: string): string {\n if (value === \"\") return \"\";\n const needsQuoting = /[\\s#\"'\\\\]|^\\s|\\s$/.test(value) || /\\n|\\r/.test(value);\n if (!needsQuoting) return value;\n const escaped = value\n .replace(/\\\\/g, \"\\\\\\\\\")\n .replace(/\"/g, '\\\\\"')\n .replace(/\\n/g, \"\\\\n\")\n .replace(/\\r/g, \"\\\\r\");\n return `\"${escaped}\"`;\n}\n\nfunction validateKey(key: string): void {\n if (!KEY_PATTERN.test(key)) {\n throw new Error(\n `persistConfigEnv: invalid key \"${key}\" - must match /^[A-Z][A-Z0-9_]*$/`,\n );\n }\n if (BLOCKED_CONFIG_ENV_KEYS.has(key)) {\n throw new Error(\n `persistConfigEnv: key \"${key}\" is a shell/runtime hijack vector and cannot be written`,\n );\n }\n}\n\nasync function readIfExists(filePath: string): Promise<string | null> {\n try {\n return await fs.readFile(filePath, \"utf8\");\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\") return null;\n throw error;\n }\n}\n\nasync function writeAtomic(filePath: string, contents: string): Promise<void> {\n const tmpPath = `${filePath}${TMP_SUFFIX}`;\n const handle = await fs.open(tmpPath, \"w\", 0o600);\n try {\n await handle.writeFile(contents, \"utf8\");\n await handle.sync();\n } finally {\n await handle.close();\n }\n await fs.rename(tmpPath, filePath);\n}\n\nlet writeChain: Promise<unknown> = Promise.resolve();\n\nfunction serialise<T>(fn: () => Promise<T>): Promise<T> {\n const next = writeChain.then(fn, fn);\n writeChain = next.catch(() => undefined);\n return next;\n}\n\nfunction resolveConfigEnvPath(stateDir?: string): string {\n return path.join(stateDir ?? resolveStateDir(), CONFIG_ENV_FILENAME);\n}\n\nexport async function persistConfigEnv(\n key: string,\n value: string,\n opts: PersistConfigEnvOptions = {},\n): Promise<void> {\n validateKey(key);\n\n await serialise(async () => {\n const filePath = resolveConfigEnvPath(opts.stateDir);\n await fs.mkdir(path.dirname(filePath), { recursive: true });\n\n const existing = (await readIfExists(filePath)) ?? \"\";\n const parsed = parseConfigEnv(existing);\n const existingIdx = parsed.index.get(key);\n const isDelete = value === \"\";\n\n if (isDelete) {\n if (existingIdx === undefined) {\n delete process.env[key];\n return;\n }\n parsed.lines.splice(existingIdx, 1);\n } else {\n const encoded = `${key}=${encodeValue(value)}`;\n if (existingIdx === undefined) {\n parsed.lines.push(encoded);\n } else {\n parsed.lines[existingIdx] = encoded;\n }\n }\n\n if (existing.length > 0) {\n await fs.writeFile(`${filePath}${BAK_SUFFIX}`, existing, {\n encoding: \"utf8\",\n mode: 0o600,\n });\n }\n\n await writeAtomic(filePath, serialiseConfigEnv(parsed));\n if (isDelete) {\n delete process.env[key];\n } else {\n process.env[key] = value;\n }\n });\n}\n"
7
7
  ],
8
8
  "mappings": "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",
9
- "debugId": "1B185D85653B0B0864756E2164756E21",
9
+ "debugId": "8549973E614DD3CF64756E2164756E21",
10
10
  "names": []
11
11
  }
@@ -100,4 +100,4 @@ export {
100
100
  applyCanonicalSetupConfig
101
101
  };
102
102
 
103
- //# debugId=DC75593A0040E29E64756E2164756E21
103
+ //# debugId=81402C51118CE61364756E2164756E21
@@ -5,6 +5,6 @@
5
5
  "import type {\n DeploymentTargetConfig,\n LinkedAccountFlagsConfig,\n ServiceCapability,\n ServiceRoutingConfig,\n} from \"@elizaos/core\";\n\nexport interface CloudProxyConfigLike {\n cloud?: {\n apiKey?: string;\n baseUrl?: string;\n enabled?: boolean;\n serviceKey?: string;\n backup?: {\n autoBackupIntervalMs?: number;\n };\n bridge?: {\n heartbeatIntervalMs?: number;\n };\n };\n}\n\nexport type CloudConfig = NonNullable<CloudProxyConfigLike[\"cloud\"]>;\n\nexport type ElizaConfig = Record<string, unknown> &\n CloudProxyConfigLike & {\n deploymentTarget?: DeploymentTargetConfig;\n linkedAccounts?: LinkedAccountFlagsConfig;\n serviceRouting?: ServiceRoutingConfig;\n };\n\nexport interface AutonomousConfigLike {\n [key: string]: unknown;\n}\n\ntype MutableElizaConfig = Partial<ElizaConfig> & {\n cloud?: Record<string, unknown>;\n deploymentTarget?: DeploymentTargetConfig;\n linkedAccounts?: LinkedAccountFlagsConfig;\n serviceRouting?: ServiceRoutingConfig;\n};\n\nfunction ensureLinkedAccounts(\n config: MutableElizaConfig,\n): LinkedAccountFlagsConfig {\n config.linkedAccounts ??= {};\n return config.linkedAccounts;\n}\n\nfunction ensureServiceRouting(\n config: MutableElizaConfig,\n): ServiceRoutingConfig {\n config.serviceRouting ??= {};\n return config.serviceRouting;\n}\n\nfunction persistDeploymentTarget(\n config: MutableElizaConfig,\n deploymentTarget: DeploymentTargetConfig | null | undefined,\n): void {\n if (!deploymentTarget) {\n delete config.deploymentTarget;\n return;\n }\n config.deploymentTarget = { ...deploymentTarget };\n}\n\nfunction persistLinkedAccounts(\n config: MutableElizaConfig,\n linkedAccounts: LinkedAccountFlagsConfig | null | undefined,\n): void {\n if (!linkedAccounts) return;\n\n const existing = ensureLinkedAccounts(config);\n for (const [accountId, account] of Object.entries(linkedAccounts)) {\n if (!account || Object.keys(account).length === 0) {\n delete existing[accountId];\n continue;\n }\n existing[accountId] = {\n ...existing[accountId],\n ...account,\n };\n }\n\n if (Object.keys(existing).length === 0) {\n delete config.linkedAccounts;\n }\n}\n\nfunction persistServiceRouting(\n config: MutableElizaConfig,\n serviceRouting: ServiceRoutingConfig | null | undefined,\n clearRoutes: readonly ServiceCapability[] = [],\n): void {\n const existing = ensureServiceRouting(config);\n\n for (const capability of clearRoutes) {\n delete existing[capability];\n }\n\n if (serviceRouting) {\n for (const [capability, route] of Object.entries(serviceRouting)) {\n const serviceKey = capability as ServiceCapability;\n if (!route || Object.keys(route).length === 0) {\n delete existing[serviceKey];\n continue;\n }\n existing[serviceKey] = { ...route };\n }\n }\n\n if (Object.keys(existing).length === 0) {\n delete config.serviceRouting;\n }\n}\n\nexport function applyCanonicalSetupConfig(\n config: MutableElizaConfig,\n args: {\n deploymentTarget?: DeploymentTargetConfig | null;\n linkedAccounts?: LinkedAccountFlagsConfig | null;\n serviceRouting?: ServiceRoutingConfig | null;\n clearRoutes?: readonly ServiceCapability[];\n },\n): void {\n if (args.deploymentTarget !== undefined) {\n persistDeploymentTarget(config, args.deploymentTarget);\n }\n if (args.linkedAccounts !== undefined) {\n persistLinkedAccounts(config, args.linkedAccounts);\n }\n if (args.serviceRouting !== undefined || args.clearRoutes?.length) {\n persistServiceRouting(config, args.serviceRouting, args.clearRoutes);\n }\n}\n\nexport function normalizeEnvValue(value: unknown): string | undefined {\n if (typeof value !== \"string\") return undefined;\n const trimmed = value.trim();\n return trimmed || undefined;\n}\n\nexport function isTimeoutError(error: unknown): boolean {\n if (!(error instanceof Error)) return false;\n if (error.name === \"TimeoutError\" || error.name === \"AbortError\") return true;\n const message = error.message.toLowerCase();\n return message.includes(\"timed out\") || message.includes(\"timeout\");\n}\n"
6
6
  ],
7
7
  "mappings": ";;;;;;;;;;;;;;;;;;;AA0CA,SAAS,oBAAoB,CAC3B,QAC0B;AAAA,EAC1B,OAAO,mBAAmB,CAAC;AAAA,EAC3B,OAAO,OAAO;AAAA;AAGhB,SAAS,oBAAoB,CAC3B,QACsB;AAAA,EACtB,OAAO,mBAAmB,CAAC;AAAA,EAC3B,OAAO,OAAO;AAAA;AAGhB,SAAS,uBAAuB,CAC9B,QACA,kBACM;AAAA,EACN,IAAI,CAAC,kBAAkB;AAAA,IACrB,OAAO,OAAO;AAAA,IACd;AAAA,EACF;AAAA,EACA,OAAO,mBAAmB,KAAK,iBAAiB;AAAA;AAGlD,SAAS,qBAAqB,CAC5B,QACA,gBACM;AAAA,EACN,IAAI,CAAC;AAAA,IAAgB;AAAA,EAErB,MAAM,WAAW,qBAAqB,MAAM;AAAA,EAC5C,YAAY,WAAW,YAAY,OAAO,QAAQ,cAAc,GAAG;AAAA,IACjE,IAAI,CAAC,WAAW,OAAO,KAAK,OAAO,EAAE,WAAW,GAAG;AAAA,MACjD,OAAO,SAAS;AAAA,MAChB;AAAA,IACF;AAAA,IACA,SAAS,aAAa;AAAA,SACjB,SAAS;AAAA,SACT;AAAA,IACL;AAAA,EACF;AAAA,EAEA,IAAI,OAAO,KAAK,QAAQ,EAAE,WAAW,GAAG;AAAA,IACtC,OAAO,OAAO;AAAA,EAChB;AAAA;AAGF,SAAS,qBAAqB,CAC5B,QACA,gBACA,cAA4C,CAAC,GACvC;AAAA,EACN,MAAM,WAAW,qBAAqB,MAAM;AAAA,EAE5C,WAAW,cAAc,aAAa;AAAA,IACpC,OAAO,SAAS;AAAA,EAClB;AAAA,EAEA,IAAI,gBAAgB;AAAA,IAClB,YAAY,YAAY,UAAU,OAAO,QAAQ,cAAc,GAAG;AAAA,MAChE,MAAM,aAAa;AAAA,MACnB,IAAI,CAAC,SAAS,OAAO,KAAK,KAAK,EAAE,WAAW,GAAG;AAAA,QAC7C,OAAO,SAAS;AAAA,QAChB;AAAA,MACF;AAAA,MACA,SAAS,cAAc,KAAK,MAAM;AAAA,IACpC;AAAA,EACF;AAAA,EAEA,IAAI,OAAO,KAAK,QAAQ,EAAE,WAAW,GAAG;AAAA,IACtC,OAAO,OAAO;AAAA,EAChB;AAAA;AAGK,SAAS,yBAAyB,CACvC,QACA,MAMM;AAAA,EACN,IAAI,KAAK,qBAAqB,WAAW;AAAA,IACvC,wBAAwB,QAAQ,KAAK,gBAAgB;AAAA,EACvD;AAAA,EACA,IAAI,KAAK,mBAAmB,WAAW;AAAA,IACrC,sBAAsB,QAAQ,KAAK,cAAc;AAAA,EACnD;AAAA,EACA,IAAI,KAAK,mBAAmB,aAAa,KAAK,aAAa,QAAQ;AAAA,IACjE,sBAAsB,QAAQ,KAAK,gBAAgB,KAAK,WAAW;AAAA,EACrE;AAAA;AAGK,SAAS,iBAAiB,CAAC,OAAoC;AAAA,EACpE,IAAI,OAAO,UAAU;AAAA,IAAU;AAAA,EAC/B,MAAM,UAAU,MAAM,KAAK;AAAA,EAC3B,OAAO,WAAW;AAAA;AAGb,SAAS,cAAc,CAAC,OAAyB;AAAA,EACtD,IAAI,EAAE,iBAAiB;AAAA,IAAQ,OAAO;AAAA,EACtC,IAAI,MAAM,SAAS,kBAAkB,MAAM,SAAS;AAAA,IAAc,OAAO;AAAA,EACzE,MAAM,UAAU,MAAM,QAAQ,YAAY;AAAA,EAC1C,OAAO,QAAQ,SAAS,WAAW,KAAK,QAAQ,SAAS,SAAS;AAAA;",
8
- "debugId": "DC75593A0040E29E64756E2164756E21",
8
+ "debugId": "81402C51118CE61364756E2164756E21",
9
9
  "names": []
10
10
  }
@@ -85,4 +85,4 @@ export {
85
85
  credTypeToConnector
86
86
  };
87
87
 
88
- //# debugId=ABCE65BAC140795564756E2164756E21
88
+ //# debugId=2CBCFC5043B7123564756E2164756E21
@@ -5,6 +5,6 @@
5
5
  "/**\n * Mapping from workflow-plugin credential type names → Eliza Cloud connector slugs.\n *\n * The workflow plugin's LLM emits credential type strings (e.g. `gmailOAuth2`,\n * `slackOAuth2Api`) on each node that needs an external account. The cloud\n * exposes per-connector OAuth flows under `/api/v1/eliza/<connector>/...`.\n *\n * This map is the single source of truth for which workflow credential type\n * resolves through which cloud connector + with which OAuth scopes. Add new\n * entries when the cloud gains support for additional connectors; do not\n * scatter cred-type → connector logic elsewhere.\n *\n * Cloud-side endpoint convention (see packages/cloud-api/v1/eliza/<connector>/):\n * POST /api/v1/eliza/<connector>/connect/initiate → { authUrl }\n * GET /api/v1/eliza/<connector>/status → { connected, ... }\n *\n * Not every connector below has a fully-implemented cloud endpoint yet — the\n * provider returns `null` for unmapped types and `needs_auth` (with the\n * cloud-issued OAuth URL) for mapped-but-not-connected accounts. See\n * `cloud-credential-provider.ts` for the resolution logic.\n */\n\nexport interface CredentialTypeMapping {\n /**\n * Cloud connector slug used in the URL path\n * (`/api/v1/eliza/<connector>/connect/initiate`).\n */\n connector: string;\n /**\n * Optional capability tokens passed to the cloud's `connect/initiate`\n * endpoint. The cloud translates these to provider-specific OAuth scopes\n * (e.g. Google's `google.gmail.send` → `https://www.googleapis.com/auth/gmail.send`).\n */\n capabilities?: string[];\n /**\n * Friendly description used in `needs_auth` UI prompts. The runtime may\n * surface this verbatim to the end-user.\n */\n friendlyName: string;\n}\n\n/**\n * Workflow credential type → cloud connector mapping.\n *\n * Names mirror the n8n / workflows-plugin convention used by the LLM in\n * `plugins/plugin-workflow/src/utils/workflow-prompts/workflowGeneration.ts`.\n * Both `gmailOAuth2` and `gmailOAuth2Api` map to the same connector — the\n * workflow resolver does fuzzy `Api`-suffix matching upstream, but we keep\n * both keys here so `checkCredentialTypes` answers truthfully without the\n * caller having to know about that fuzziness.\n */\nexport const credTypeToConnector: ReadonlyMap<string, CredentialTypeMapping> = new Map([\n // ─── Google ──────────────────────────────────────────────────────────\n // Cloud endpoint: /api/v1/eliza/google/{connect/initiate,status,disconnect}\n // The cloud's capability tokens are documented in\n // packages/cloud-api/v1/eliza/google/connect/initiate/route.ts.\n [\n \"gmailOAuth2\",\n {\n connector: \"google\",\n capabilities: [\"google.gmail.triage\", \"google.gmail.send\", \"google.gmail.manage\"],\n friendlyName: \"Gmail\",\n },\n ],\n [\n \"gmailOAuth2Api\",\n {\n connector: \"google\",\n capabilities: [\"google.gmail.triage\", \"google.gmail.send\", \"google.gmail.manage\"],\n friendlyName: \"Gmail\",\n },\n ],\n [\n \"googleCalendarOAuth2Api\",\n {\n connector: \"google\",\n capabilities: [\"google.calendar.read\", \"google.calendar.write\"],\n friendlyName: \"Google Calendar\",\n },\n ],\n [\n \"googleSheetsOAuth2Api\",\n {\n connector: \"google\",\n capabilities: [\"google.basic_identity\"],\n friendlyName: \"Google Sheets\",\n },\n ],\n\n // ─── GitHub ──────────────────────────────────────────────────────────\n // Cloud endpoint: /api/v1/eliza/github-oauth-complete/ (callback only).\n // The initiate flow is host-driven; the provider returns `needs_auth`\n // pointing at the cloud's GitHub install URL when not connected.\n [\n \"githubOAuth2Api\",\n {\n connector: \"github\",\n friendlyName: \"GitHub\",\n },\n ],\n [\n \"githubApi\",\n {\n connector: \"github\",\n friendlyName: \"GitHub\",\n },\n ],\n\n // ─── Discord ─────────────────────────────────────────────────────────\n // Cloud endpoint: /api/v1/eliza/discord/gateway-agent/ (gateway pairing).\n // No OAuth-token-issuance flow yet — provider returns `null` so the\n // workflow resolver falls back to its default missing-connection report.\n [\n \"discordApi\",\n {\n connector: \"discord\",\n friendlyName: \"Discord\",\n },\n ],\n [\n \"discordBotApi\",\n {\n connector: \"discord\",\n friendlyName: \"Discord (Bot)\",\n },\n ],\n]);\n\n/** Set used by `checkCredentialTypes` for O(1) supported-set membership. */\nexport const supportedCredTypes: ReadonlySet<string> = new Set(credTypeToConnector.keys());\n"
6
6
  ],
7
7
  "mappings": ";;;;;;;;;;;;;;;;;;;AAmDO,IAAM,sBAAkE,IAAI,IAAI;AAAA,EAKrF;AAAA,IACE;AAAA,IACA;AAAA,MACE,WAAW;AAAA,MACX,cAAc,CAAC,uBAAuB,qBAAqB,qBAAqB;AAAA,MAChF,cAAc;AAAA,IAChB;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,MACE,WAAW;AAAA,MACX,cAAc,CAAC,uBAAuB,qBAAqB,qBAAqB;AAAA,MAChF,cAAc;AAAA,IAChB;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,MACE,WAAW;AAAA,MACX,cAAc,CAAC,wBAAwB,uBAAuB;AAAA,MAC9D,cAAc;AAAA,IAChB;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,MACE,WAAW;AAAA,MACX,cAAc,CAAC,uBAAuB;AAAA,MACtC,cAAc;AAAA,IAChB;AAAA,EACF;AAAA,EAMA;AAAA,IACE;AAAA,IACA;AAAA,MACE,WAAW;AAAA,MACX,cAAc;AAAA,IAChB;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,MACE,WAAW;AAAA,MACX,cAAc;AAAA,IAChB;AAAA,EACF;AAAA,EAMA;AAAA,IACE;AAAA,IACA;AAAA,MACE,WAAW;AAAA,MACX,cAAc;AAAA,IAChB;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,MACE,WAAW;AAAA,MACX,cAAc;AAAA,IAChB;AAAA,EACF;AACF,CAAC;AAGM,IAAM,qBAA0C,IAAI,IAAI,oBAAoB,KAAK,CAAC;",
8
- "debugId": "ABCE65BAC140795564756E2164756E21",
8
+ "debugId": "2CBCFC5043B7123564756E2164756E21",
9
9
  "names": []
10
10
  }
@@ -37,4 +37,4 @@ export {
37
37
  isCloudWalletEnabled
38
38
  };
39
39
 
40
- //# debugId=F2AC4B357531E84364756E2164756E21
40
+ //# debugId=55486999AC61027964756E2164756E21
@@ -5,6 +5,6 @@
5
5
  "function readBoolFlag(name: string, fallback = false): boolean {\n const raw = process.env[name];\n if (raw === undefined || raw === null || raw === \"\") return fallback;\n const trimmed = String(raw).trim().toLowerCase();\n if (\n trimmed === \"1\" ||\n trimmed === \"true\" ||\n trimmed === \"yes\" ||\n trimmed === \"on\"\n ) {\n return true;\n }\n if (\n trimmed === \"0\" ||\n trimmed === \"false\" ||\n trimmed === \"no\" ||\n trimmed === \"off\"\n ) {\n return false;\n }\n return fallback;\n}\n\nexport function isCloudWalletEnabled(): boolean {\n return readBoolFlag(\"ENABLE_CLOUD_WALLET\");\n}\n"
6
6
  ],
7
7
  "mappings": ";;;;;;;;;;;;;;;;;;;AAAA,SAAS,YAAY,CAAC,MAAc,WAAW,OAAgB;AAAA,EAC7D,MAAM,MAAM,QAAQ,IAAI;AAAA,EACxB,IAAI,QAAQ,aAAa,QAAQ,QAAQ,QAAQ;AAAA,IAAI,OAAO;AAAA,EAC5D,MAAM,UAAU,OAAO,GAAG,EAAE,KAAK,EAAE,YAAY;AAAA,EAC/C,IACE,YAAY,OACZ,YAAY,UACZ,YAAY,SACZ,YAAY,MACZ;AAAA,IACA,OAAO;AAAA,EACT;AAAA,EACA,IACE,YAAY,OACZ,YAAY,WACZ,YAAY,QACZ,YAAY,OACZ;AAAA,IACA,OAAO;AAAA,EACT;AAAA,EACA,OAAO;AAAA;AAGF,SAAS,oBAAoB,GAAY;AAAA,EAC9C,OAAO,aAAa,qBAAqB;AAAA;",
8
- "debugId": "F2AC4B357531E84364756E2164756E21",
8
+ "debugId": "55486999AC61027964756E2164756E21",
9
9
  "names": []
10
10
  }
package/dist/lib/http.js CHANGED
@@ -104,4 +104,4 @@ export {
104
104
  readJsonBody
105
105
  };
106
106
 
107
- //# debugId=35C1D1B4C679F52364756E2164756E21
107
+ //# debugId=CAF7710FDB7B802764756E2164756E21
@@ -5,6 +5,6 @@
5
5
  "import type http from \"node:http\";\n\nexport interface ReadJsonBodyOptions {\n maxBytes?: number;\n tooLargeMessage?: string;\n destroyOnTooLarge?: boolean;\n requireObject?: boolean;\n}\n\nfunction scrubStackFields(value: unknown): unknown {\n if (value instanceof Error) {\n return { error: value.message || \"Internal error\" };\n }\n if (Array.isArray(value)) {\n return value.map(scrubStackFields);\n }\n if (value && typeof value === \"object\") {\n const out: Record<string, unknown> = {};\n for (const [key, nested] of Object.entries(value)) {\n if (key === \"stack\" || key === \"stackTrace\") continue;\n out[key] = scrubStackFields(nested);\n }\n return out;\n }\n return value;\n}\n\nexport function sendJson(\n res: http.ServerResponse,\n body: unknown,\n status = 200,\n): void {\n if (res.headersSent) return;\n res.statusCode = status;\n res.setHeader(\"content-type\", \"application/json; charset=utf-8\");\n res.end(JSON.stringify(scrubStackFields(body)));\n}\n\nexport function sendJsonError(\n res: http.ServerResponse,\n message: string,\n status = 400,\n): void {\n sendJson(res, { error: message }, status);\n}\n\nasync function readRequestBody(\n req: http.IncomingMessage,\n options: ReadJsonBodyOptions,\n): Promise<string | null> {\n const maxBytes = options.maxBytes ?? 1_048_576;\n const chunks: Buffer[] = [];\n let size = 0;\n\n for await (const chunk of req) {\n const buffer = typeof chunk === \"string\" ? Buffer.from(chunk) : chunk;\n size += buffer.length;\n if (size > maxBytes) {\n if (options.destroyOnTooLarge) req.destroy();\n throw new Error(options.tooLargeMessage ?? \"Request body too large\");\n }\n chunks.push(buffer);\n }\n\n if (chunks.length === 0) return null;\n return Buffer.concat(chunks).toString(\"utf8\");\n}\n\nexport async function readJsonBody<T extends object = Record<string, unknown>>(\n req: http.IncomingMessage,\n res: http.ServerResponse,\n options: ReadJsonBodyOptions = {},\n): Promise<T | null> {\n const cached = (req as http.IncomingMessage & { body?: unknown }).body;\n if (cached !== undefined) {\n if (\n options.requireObject !== false &&\n (!cached || typeof cached !== \"object\" || Array.isArray(cached))\n ) {\n sendJsonError(res, \"Request body must be a JSON object\", 400);\n return null;\n }\n return cached as T;\n }\n\n let raw: string | null;\n try {\n raw = await readRequestBody(req, options);\n } catch (error) {\n sendJsonError(\n res,\n error instanceof Error ? error.message : \"Failed to read request body\",\n 413,\n );\n return null;\n }\n\n if (!raw?.trim()) {\n const empty = {} as T;\n (req as http.IncomingMessage & { body?: unknown }).body = empty;\n return empty;\n }\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(raw);\n } catch {\n sendJsonError(res, \"Invalid JSON in request body\", 400);\n return null;\n }\n\n if (\n options.requireObject !== false &&\n (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed))\n ) {\n sendJsonError(res, \"Request body must be a JSON object\", 400);\n return null;\n }\n\n (req as http.IncomingMessage & { body?: unknown }).body = parsed;\n return parsed as T;\n}\n"
6
6
  ],
7
7
  "mappings": "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",
8
- "debugId": "35C1D1B4C679F52364756E2164756E21",
8
+ "debugId": "CAF7710FDB7B802764756E2164756E21",
9
9
  "names": []
10
10
  }
@@ -248,4 +248,4 @@ export {
248
248
  ELIZA_CLOUD_TTS_MAX_TEXT_CHARS2 as ELIZA_CLOUD_TTS_MAX_TEXT_CHARS
249
249
  };
250
250
 
251
- //# debugId=8E6B79F7D105205464756E2164756E21
251
+ //# debugId=FFD5FF768EBDA98664756E2164756E21
@@ -5,6 +5,6 @@
5
5
  "/**\n * Cloud TTS helpers — proxy to Eliza Cloud (`elizacloud.ai`).\n *\n * Pure / config-driven helpers (TTS API key resolution, base URL resolution,\n * voice / model id normalization, compat header mirroring) live in\n * `@elizaos/shared/elizacloud/server-cloud-tts` so host-layer packages can\n * resolve cloud TTS configuration without reverse-importing this plugin.\n *\n * The HTTP request handler (`handleCloudTtsPreviewRoute`) stays here because\n * it wires together the runtime route system.\n */\nimport type http from \"node:http\";\nimport { sanitizeSpeechText } from \"@elizaos/core\";\nimport {\n _internalResolveCloudApiKey,\n ELIZA_CLOUD_TTS_MAX_TEXT_CHARS,\n resolveCloudProxyTtsModel,\n resolveCloudTtsCandidateUrls,\n resolveElizaCloudTtsVoiceId,\n shouldRetryCloudTtsUpstream,\n ttsDebug,\n ttsDebugTextPreview,\n} from \"@elizaos/shared\";\n\nexport {\n __resetCloudBaseUrlCache,\n ELIZA_CLOUD_TTS_MAX_TEXT_CHARS,\n ensureCloudTtsApiKeyAlias,\n mirrorCompatHeaders,\n normalizeElizaCloudTtsModelId,\n resolveCloudProxyTtsModel,\n resolveCloudTtsBaseUrl,\n resolveCloudTtsCandidateUrls,\n resolveElevenLabsApiKeyForCloudMode,\n resolveElizaCloudTtsVoiceId,\n shouldRetryCloudTtsUpstream,\n} from \"@elizaos/shared\";\n\n/** Browser → API correlation (never forwarded to Eliza Cloud). */\nexport function readTtsDebugClientHeaders(\n req: Pick<http.IncomingMessage, \"headers\">,\n): {\n messageId?: string;\n clipSegment?: string;\n hearingFull?: string;\n} {\n const pick = (name: string): string | undefined => {\n const raw = req.headers[name];\n if (raw == null) return undefined;\n const v = Array.isArray(raw) ? raw[0] : raw;\n return typeof v === \"string\" && v.trim() ? v.trim() : undefined;\n };\n const decode = (enc: string | undefined): string | undefined => {\n if (!enc) return undefined;\n try {\n return decodeURIComponent(enc);\n } catch {\n return enc;\n }\n };\n return {\n messageId: decode(pick(\"x-elizaos-tts-message-id\")),\n clipSegment: decode(pick(\"x-elizaos-tts-clip-segment\")),\n hearingFull: decode(pick(\"x-elizaos-tts-full-preview\")),\n };\n}\n\nfunction ttsClientDbgFields(\n hdr: ReturnType<typeof readTtsDebugClientHeaders>,\n): Record<string, string> {\n const o: Record<string, string> = {};\n if (hdr.messageId) o.messageId = hdr.messageId;\n if (hdr.clipSegment) o.clipSegment = hdr.clipSegment;\n if (hdr.hearingFull) o.hearingFull = hdr.hearingFull;\n return o;\n}\n\nfunction pickBodyString(\n body: Record<string, unknown>,\n camel: string,\n snake: string,\n): unknown {\n const a = body[camel];\n if (typeof a === \"string\" && a.trim()) return a;\n const b = body[snake];\n if (typeof b === \"string\" && b.trim()) return b;\n return undefined;\n}\n\nasync function readRawRequestBody(req: http.IncomingMessage): Promise<Buffer> {\n const chunks: Buffer[] = [];\n for await (const chunk of req) {\n chunks.push(typeof chunk === \"string\" ? Buffer.from(chunk) : chunk);\n }\n return Buffer.concat(chunks);\n}\n\nfunction sendJsonResponse(\n res: http.ServerResponse,\n status: number,\n body: unknown,\n): void {\n if (res.headersSent) return;\n res.statusCode = status;\n res.setHeader(\"content-type\", \"application/json; charset=utf-8\");\n res.end(JSON.stringify(body));\n}\n\nfunction sendJsonErrorResponse(\n res: http.ServerResponse,\n status: number,\n message: string,\n): void {\n sendJsonResponse(res, status, { error: message });\n}\n\nfunction forwardCloudTtsUpstreamError(\n res: http.ServerResponse,\n status: number,\n bodyText: string,\n): void {\n if (res.headersSent) return;\n const trimmed = bodyText.trim();\n if (\n (trimmed.startsWith(\"{\") && trimmed.endsWith(\"}\")) ||\n (trimmed.startsWith(\"[\") && trimmed.endsWith(\"]\"))\n ) {\n try {\n const parsed: unknown = JSON.parse(trimmed);\n sendJsonResponse(res, status, parsed);\n return;\n } catch {\n /* fall through */\n }\n }\n res.statusCode = status;\n res.setHeader(\"content-type\", \"application/json; charset=utf-8\");\n res.end(\n JSON.stringify({ error: trimmed || \"Eliza Cloud TTS request failed\" }),\n );\n}\n\nexport async function handleCloudTtsPreviewRoute(\n req: http.IncomingMessage,\n res: http.ServerResponse,\n): Promise<boolean> {\n const clientTtsDbg = readTtsDebugClientHeaders(req);\n const dbgExtra = ttsClientDbgFields(clientTtsDbg);\n\n const cloudApiKey = _internalResolveCloudApiKey();\n if (!cloudApiKey) {\n ttsDebug(\"server:cloud-tts:reject\", {\n reason: \"no_api_key\",\n ...dbgExtra,\n });\n sendJsonErrorResponse(\n res,\n 401,\n \"Eliza Cloud is not connected. Connect your Eliza Cloud account first.\",\n );\n return true;\n }\n\n const rawBody = await readRawRequestBody(req);\n let body: Record<string, unknown>;\n try {\n body = JSON.parse(rawBody.toString(\"utf8\")) as Record<string, unknown>;\n } catch {\n sendJsonErrorResponse(res, 400, \"Invalid JSON request body\");\n return true;\n }\n\n const text = sanitizeSpeechText(\n typeof body.text === \"string\" ? body.text : \"\",\n );\n if (!text) {\n sendJsonErrorResponse(res, 400, \"Missing text\");\n return true;\n }\n\n if (text.length > ELIZA_CLOUD_TTS_MAX_TEXT_CHARS) {\n sendJsonErrorResponse(\n res,\n 400,\n `Text too long. Maximum length is ${ELIZA_CLOUD_TTS_MAX_TEXT_CHARS} characters`,\n );\n return true;\n }\n\n const cloudModel = resolveCloudProxyTtsModel(\n pickBodyString(body, \"modelId\", \"model_id\"),\n );\n const cloudVoice = resolveElizaCloudTtsVoiceId(\n pickBodyString(body, \"voiceId\", \"voice_id\"),\n );\n const cloudUrls = resolveCloudTtsCandidateUrls();\n\n const ttsPreview = ttsDebugTextPreview(text);\n ttsDebug(\"server:cloud-tts:proxy\", {\n textChars: text.length,\n preview: ttsPreview,\n modelId: cloudModel,\n voiceId: cloudVoice,\n urlCandidates: cloudUrls.length,\n ...dbgExtra,\n });\n\n try {\n let lastStatus = 0;\n let lastDetails = \"unknown error\";\n let cloudResponse: Response | null = null;\n for (let i = 0; i < cloudUrls.length; i++) {\n const cloudUrl = cloudUrls[i];\n if (cloudUrl === undefined) {\n continue;\n }\n const attempt = await fetch(cloudUrl, {\n method: \"POST\",\n headers: {\n Authorization: `Bearer ${cloudApiKey}`,\n \"x-api-key\": cloudApiKey,\n \"Content-Type\": \"application/json\",\n Accept: \"audio/mpeg\",\n },\n body: JSON.stringify({\n text,\n voiceId: cloudVoice,\n modelId: cloudModel,\n }),\n });\n\n if (attempt.ok) {\n cloudResponse = attempt;\n ttsDebug(\"server:cloud-tts:upstream-ok\", {\n urlIndex: i,\n status: attempt.status,\n preview: ttsPreview,\n ...dbgExtra,\n });\n break;\n }\n\n lastStatus = attempt.status;\n lastDetails = await attempt.text().catch(() => \"unknown error\");\n ttsDebug(\"server:cloud-tts:upstream-retry\", {\n urlIndex: i,\n status: attempt.status,\n preview: ttsPreview,\n ...dbgExtra,\n });\n\n const hasMoreCandidates = i < cloudUrls.length - 1;\n if (!hasMoreCandidates || !shouldRetryCloudTtsUpstream(attempt.status)) {\n break;\n }\n }\n if (!cloudResponse) {\n ttsDebug(\"server:cloud-tts:reject\", {\n reason: \"upstream_failed\",\n lastStatus,\n preview: ttsPreview,\n ...dbgExtra,\n });\n if (\n lastStatus === 400 ||\n lastStatus === 401 ||\n lastStatus === 402 ||\n lastStatus === 403 ||\n lastStatus === 429\n ) {\n forwardCloudTtsUpstreamError(res, lastStatus, lastDetails);\n return true;\n }\n sendJsonErrorResponse(\n res,\n 502,\n `Eliza Cloud TTS failed (${lastStatus || 502}): ${lastDetails}`,\n );\n return true;\n }\n\n const audioBuffer = Buffer.from(await cloudResponse.arrayBuffer());\n ttsDebug(\"server:cloud-tts:success\", {\n bytes: audioBuffer.length,\n preview: ttsPreview,\n ...dbgExtra,\n });\n res.statusCode = 200;\n res.setHeader(\"Content-Type\", \"audio/mpeg\");\n res.setHeader(\"Cache-Control\", \"no-store\");\n res.end(audioBuffer);\n return true;\n } catch (err) {\n sendJsonErrorResponse(\n res,\n 502,\n `Eliza Cloud TTS request failed: ${err instanceof Error ? err.message : String(err)}`,\n );\n return true;\n }\n}\n"
6
6
  ],
7
7
  "mappings": "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",
8
- "debugId": "8E6B79F7D105205464756E2164756E21",
8
+ "debugId": "FFD5FF768EBDA98664756E2164756E21",
9
9
  "names": []
10
10
  }
@@ -49,4 +49,4 @@ export {
49
49
  getElizaNamespace
50
50
  };
51
51
 
52
- //# debugId=0F64C89F83EF54F964756E2164756E21
52
+ //# debugId=74AEDE2E72F9DB2E64756E2164756E21
@@ -5,6 +5,6 @@
5
5
  "import fs from \"node:fs\";\nimport path from \"node:path\";\nimport {\n getElizaNamespace,\n resolveStateDir,\n resolveUserPath,\n} from \"@elizaos/core\";\n\nexport { getElizaNamespace, resolveStateDir, resolveUserPath };\n\nexport function resolveConfigPath(\n env: NodeJS.ProcessEnv = process.env,\n stateDirPath: string = resolveStateDir(env),\n): string {\n const override = env.ELIZA_CONFIG_PATH?.trim();\n if (override) return resolveUserPath(override);\n\n const namespace = getElizaNamespace(env);\n const primaryPath = path.join(stateDirPath, `${namespace}.json`);\n if (fs.existsSync(primaryPath)) return primaryPath;\n\n if (namespace !== \"eliza\") {\n const legacyPath = path.join(stateDirPath, \"eliza.json\");\n if (fs.existsSync(legacyPath)) return legacyPath;\n }\n\n return primaryPath;\n}\n"
6
6
  ],
7
7
  "mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAQO,SAAS,iBAAiB,CAC/B,MAAyB,QAAQ,KACjC,eAAuB,gBAAgB,GAAG,GAClC;AAAA,EACR,MAAM,WAAW,IAAI,mBAAmB,KAAK;AAAA,EAC7C,IAAI;AAAA,IAAU,OAAO,gBAAgB,QAAQ;AAAA,EAE7C,MAAM,YAAY,kBAAkB,GAAG;AAAA,EACvC,MAAM,cAAc,KAAK,KAAK,cAAc,GAAG,gBAAgB;AAAA,EAC/D,IAAI,GAAG,WAAW,WAAW;AAAA,IAAG,OAAO;AAAA,EAEvC,IAAI,cAAc,SAAS;AAAA,IACzB,MAAM,aAAa,KAAK,KAAK,cAAc,YAAY;AAAA,IACvD,IAAI,GAAG,WAAW,UAAU;AAAA,MAAG,OAAO;AAAA,EACxC;AAAA,EAEA,OAAO;AAAA;AAAA;",
8
- "debugId": "0F64C89F83EF54F964756E2164756E21",
8
+ "debugId": "74AEDE2E72F9DB2E64756E2164756E21",
9
9
  "names": []
10
10
  }
@@ -21,4 +21,4 @@ export {
21
21
  isTtsDebugEnabled
22
22
  };
23
23
 
24
- //# debugId=11FA601D97731E0C64756E2164756E21
24
+ //# debugId=8974C1DCB11A7E5364756E2164756E21
@@ -4,6 +4,6 @@
4
4
  "sourcesContent": [
5
5
  ],
6
6
  "mappings": "",
7
- "debugId": "11FA601D97731E0C64756E2164756E21",
7
+ "debugId": "8974C1DCB11A7E5364756E2164756E21",
8
8
  "names": []
9
9
  }
@@ -1 +1 @@
1
- {"version":3,"file":"embeddings.d.ts","sourceRoot":"","sources":["../../src/models/embeddings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AA6BxE,eAAO,MAAM,oBAAoB,OAAQ,CAAC;AAG1C;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,CAQlF;AA8DD,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,aAAa,EACtB,MAAM,EAAE,mBAAmB,GAAG,MAAM,GAAG,IAAI,GAC1C,OAAO,CAAC,MAAM,EAAE,CAAC,CA0BnB;AAED,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,aAAa,EACtB,KAAK,EAAE,MAAM,EAAE,GACd,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAqLrB"}
1
+ {"version":3,"file":"embeddings.d.ts","sourceRoot":"","sources":["../../src/models/embeddings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AA6BxE,eAAO,MAAM,oBAAoB,OAAQ,CAAC;AAG1C;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,CAQlF;AA8DD,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,aAAa,EACtB,MAAM,EAAE,mBAAmB,GAAG,MAAM,GAAG,IAAI,GAC1C,OAAO,CAAC,MAAM,EAAE,CAAC,CA0BnB;AAED,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,aAAa,EACtB,KAAK,EAAE,MAAM,EAAE,GACd,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CA8LrB"}
@@ -295,6 +295,9 @@ async function handleBatchTextEmbedding(runtime, texts) {
295
295
  if (response.status === 401 || response.status === 403) {
296
296
  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.`);
297
297
  }
298
+ if (response.status === 429) {
299
+ throw new Error(`[BatchEmbeddings] Rate-limit retry exhausted: API error: ${response.status} ${response.statusText}`);
300
+ }
298
301
  throw new Error(`[BatchEmbeddings] API error: ${response.status} ${response.statusText}`);
299
302
  }
300
303
  const data = await response.json();
@@ -338,4 +341,4 @@ export {
338
341
  EMBED_BACKOFF_CAP_MS
339
342
  };
340
343
 
341
- //# debugId=A7DC0958AD6D1E1164756E2164756E21
344
+ //# debugId=BF1AD839DA32149764756E2164756E21
@@ -5,9 +5,9 @@
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
7
  "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",
8
- "import type { IAgentRuntime, TextEmbeddingParams } from \"@elizaos/core\";\nimport {\n logger,\n ModelType,\n timeInferenceSpan,\n VECTOR_DIMS,\n} from \"@elizaos/core\";\nimport { getSetting } from \"../utils/config\";\nimport { emitModelUsageEvent } from \"../utils/events\";\nimport { createCloudApiClient } from \"../utils/sdk-client\";\n\nconst MAX_BATCH_SIZE = 100;\n\n// ── Bounded retry/backoff for the /embeddings round-trip ──────────────────\n// Embeddings are off the turn's critical path (queueEmbeddingGeneration is\n// fire-and-forget), so a stall here delays the embedding QUEUE, not a reply.\n// The old behaviour — one blind 30s (or full retry-after) sleep then a single\n// retry — could park the queue for 30s+ on a transient 429. Replaced with\n// bounded exponential backoff + jitter, a CAP on any single wait (so a large\n// server retry-after can't stall the queue indefinitely), and a per-request\n// client-side timeout (the endpoint had none, so a hung gateway hung the\n// queue forever).\n//\n// Handler retries are deliberately SMALL: the EmbeddingGenerationService\n// BatchQueue already wraps generateEmbedding in its own multi-attempt backoff,\n// so this layer absorbs only a single transient burst (one quick retry) and\n// defers sustained pressure to the queue — otherwise the two backoffs compound.\nconst EMBED_MAX_ATTEMPTS = 2;\nconst EMBED_BACKOFF_BASE_MS = 1_000;\nexport const EMBED_BACKOFF_CAP_MS = 8_000;\nconst EMBED_REQUEST_TIMEOUT_MS = 60_000;\n\n/**\n * Backoff before the next embedding attempt. Exponential (base·2^attempt) as a\n * floor, honoring the server's `retry-after` when present, but never longer\n * than {@link EMBED_BACKOFF_CAP_MS}; ±25% jitter spreads retries from a burst.\n */\nexport function embeddingBackoffMs(attempt: number, retryAfterSec?: number): number {\n const exp = EMBED_BACKOFF_BASE_MS * 2 ** attempt;\n const serverHint =\n typeof retryAfterSec === \"number\" && retryAfterSec > 0\n ? retryAfterSec * 1000\n : 0;\n const base = Math.min(EMBED_BACKOFF_CAP_MS, Math.max(exp, serverHint));\n return Math.round(base * (1 + Math.random() * 0.25));\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nfunction extractRateLimitInfo(response: Response): {\n remainingRequests?: number;\n remainingTokens?: number;\n limitRequests?: number;\n limitTokens?: number;\n resetRequests?: string;\n resetTokens?: string;\n retryAfter?: number;\n} {\n return {\n remainingRequests:\n parseInt(response.headers.get(\"x-ratelimit-remaining-requests\") || \"\", 10) || undefined,\n remainingTokens:\n parseInt(response.headers.get(\"x-ratelimit-remaining-tokens\") || \"\", 10) || undefined,\n limitRequests:\n parseInt(response.headers.get(\"x-ratelimit-limit-requests\") || \"\", 10) || undefined,\n limitTokens: parseInt(response.headers.get(\"x-ratelimit-limit-tokens\") || \"\", 10) || undefined,\n resetRequests: response.headers.get(\"x-ratelimit-reset-requests\") || undefined,\n resetTokens: response.headers.get(\"x-ratelimit-reset-tokens\") || undefined,\n retryAfter: parseInt(response.headers.get(\"retry-after\") || \"\", 10) || undefined,\n };\n}\n\nfunction getEmbeddingConfig(runtime: IAgentRuntime) {\n const embeddingModelName = getSetting(\n runtime,\n \"ELIZAOS_CLOUD_EMBEDDING_MODEL\",\n \"text-embedding-3-small\"\n );\n const embeddingDimension = Number.parseInt(\n getSetting(runtime, \"ELIZAOS_CLOUD_EMBEDDING_DIMENSIONS\", \"1536\") || \"1536\",\n 10\n ) as (typeof VECTOR_DIMS)[keyof typeof VECTOR_DIMS];\n\n if (!Object.values(VECTOR_DIMS).includes(embeddingDimension)) {\n const errorMsg = `Invalid embedding dimension: ${embeddingDimension}. Must be one of: ${Object.values(VECTOR_DIMS).join(\", \")}`;\n logger.error(errorMsg);\n throw new Error(errorMsg);\n }\n\n return { embeddingModelName, embeddingDimension };\n}\n\n/**\n * The init probe vector. `runtime.ensureEmbeddingDimension()` calls the handler\n * with `null` purely to learn the vector length; it only inspects `.length`, so\n * a deterministic non-zero[0] marker vector is the correct, legitimate response.\n * This is the ONLY place a synthetic vector is returned — every real failure\n * throws so it can never be persisted as a corrupt embedding (Commandment 8).\n */\nfunction createInitProbeVector(dimension: number): number[] {\n const vector = Array(dimension).fill(0);\n vector[0] = 0.1;\n return vector;\n}\n\nexport interface BatchEmbeddingParams {\n texts: string[];\n}\n\nexport async function handleTextEmbedding(\n runtime: IAgentRuntime,\n params: TextEmbeddingParams | string | null\n): Promise<number[]> {\n const { embeddingDimension } = getEmbeddingConfig(runtime);\n\n if (params === null) {\n logger.debug(\"Creating test embedding for initialization\");\n return createInitProbeVector(embeddingDimension);\n }\n\n let text: string;\n if (typeof params === \"string\") {\n text = params;\n } else if (typeof params === \"object\" && params.text) {\n text = params.text;\n } else {\n // A malformed request is a programming error, not a recoverable runtime\n // state. Throw instead of returning a marker vector that would silently\n // corrupt the embedding store (Commandment 8).\n throw new Error(\"Invalid input format for embedding: expected string or { text: string }\");\n }\n\n if (!text.trim()) {\n throw new Error(\"Cannot generate embedding for empty text\");\n }\n\n const results = await handleBatchTextEmbedding(runtime, [text]);\n return results[0];\n}\n\nexport interface BatchEmbeddingResult {\n embedding: number[];\n index: number;\n success: boolean;\n error?: string;\n}\n\nexport async function handleBatchTextEmbedding(\n runtime: IAgentRuntime,\n texts: string[]\n): Promise<number[][]> {\n const { embeddingModelName, embeddingDimension } = getEmbeddingConfig(runtime);\n const client = createCloudApiClient(runtime, true);\n\n if (!texts || texts.length === 0) {\n return [];\n }\n\n // Every text must be non-empty: an empty input cannot produce a meaningful\n // vector, and a marker/zero vector would silently corrupt the store. Surface\n // the bad input to the caller (Commandment 8) instead of papering over it.\n const validTexts: { text: string; originalIndex: number }[] = [];\n for (let i = 0; i < texts.length; i++) {\n const text = texts[i]?.trim();\n if (!text) {\n throw new Error(`Cannot generate embedding for empty text at index ${i}`);\n }\n validTexts.push({ text, originalIndex: i });\n }\n\n const results: number[][] = new Array(texts.length);\n\n for (let batchStart = 0; batchStart < validTexts.length; batchStart += MAX_BATCH_SIZE) {\n const batchEnd = Math.min(batchStart + MAX_BATCH_SIZE, validTexts.length);\n const batch = validTexts.slice(batchStart, batchEnd);\n const batchTexts = batch.map((b) => b.text);\n\n logger.info(\n `[BatchEmbeddings] Processing batch ${Math.floor(batchStart / MAX_BATCH_SIZE) + 1}/${Math.ceil(validTexts.length / MAX_BATCH_SIZE)}: ${batch.length} texts`\n );\n\n try {\n // Records a `cloud.embedding` span on the active per-turn timer when an\n // embedding happens to be on a turn's critical path (most are queued /\n // detached, so this is a no-op there — which is exactly what proves they\n // don't add to turn latency). Retries transient throttling/5xx with\n // bounded exponential backoff (see EMBED_* constants) instead of a single\n // 30s blind sleep.\n let response: Response | null = null;\n for (let attempt = 0; attempt < EMBED_MAX_ATTEMPTS; attempt++) {\n const resp = await timeInferenceSpan(\n \"cloud.embedding\",\n () =>\n client.requestRaw(\"POST\", \"/embeddings\", {\n json: {\n model: embeddingModelName,\n input: batchTexts,\n // Pin the output width to the agent's configured dimension\n // (text-embedding-3-* honor `dimensions`). Without it the\n // gateway returns the model's native width — e.g. 1536 for a\n // 384-configured agent — which the store then silently drops as\n // a dimension mismatch (#8769). Asking for the exact width makes\n // the contract explicit and the width-check below authoritative.\n dimensions: embeddingDimension,\n },\n timeoutMs: EMBED_REQUEST_TIMEOUT_MS,\n }),\n { batch: batchTexts.length, attempt }\n );\n\n const rateLimitInfo = extractRateLimitInfo(resp);\n if (\n rateLimitInfo.remainingRequests !== undefined &&\n rateLimitInfo.remainingRequests < 50\n ) {\n logger.warn(\n `[BatchEmbeddings] Rate limit: ${rateLimitInfo.remainingRequests}/${rateLimitInfo.limitRequests} requests remaining`\n );\n }\n\n const transient =\n resp.status === 429 ||\n resp.status === 502 ||\n resp.status === 503 ||\n resp.status === 504;\n if (transient && attempt < EMBED_MAX_ATTEMPTS - 1) {\n const delay = embeddingBackoffMs(attempt, rateLimitInfo.retryAfter);\n logger.warn(\n `[BatchEmbeddings] ${resp.status} (attempt ${attempt + 1}/${EMBED_MAX_ATTEMPTS}) — backing off ${delay}ms`\n );\n // Drain the body so the underlying connection can be reused.\n await resp.text().catch(() => undefined);\n await sleep(delay);\n continue;\n }\n response = resp;\n break;\n }\n\n // Type guard: the loop assigns `response` on its final iteration, so this\n // is unreachable in practice.\n if (!response) {\n throw new Error(\"[BatchEmbeddings] No response after retry loop\");\n }\n\n if (!response.ok) {\n // Auth errors (401/403) are non-recoverable with the current key.\n // Every other non-OK status is just as fatal for this batch — neither\n // can produce real vectors. Throw in both cases so the router falls\n // through to the next provider (e.g. local inference) instead of\n // silently persisting marker/zero vectors that corrupt the embedding\n // store. Commandment 8: don't hide broken pipelines behind fallbacks.\n if (response.status === 401 || response.status === 403) {\n throw new Error(\n `[BatchEmbeddings] Authentication failed (${response.status}). ` +\n `Check ELIZAOS_CLOUD_API_KEY or ELIZAOS_CLOUD_EMBEDDING_API_KEY — ` +\n `the current key is not authorized for the embedding endpoint.`\n );\n }\n throw new Error(\n `[BatchEmbeddings] API error: ${response.status} ${response.statusText}`\n );\n }\n\n const data = (await response.json()) as {\n data?: Array<{ embedding: number[]; index: number }>;\n usage?: { prompt_tokens: number; total_tokens: number };\n };\n\n if (!data?.data || !Array.isArray(data.data)) {\n throw new Error(\"[BatchEmbeddings] API returned invalid response structure\");\n }\n\n // A partial response (fewer vectors than inputs) would leave `undefined`\n // holes in `results` that escape as a non-array \"embedding\" to the runtime\n // and silently corrupt the store. Demand one vector per input (Commandment\n // 8: fail loudly, never return holes).\n if (data.data.length !== batch.length) {\n throw new Error(\n `[BatchEmbeddings] expected ${batch.length} embeddings, got ${data.data.length}`\n );\n }\n\n for (const item of data.data) {\n // The response `index` addresses this batch slice. A malformed/duplicated\n // or cross-batch (absolute) index would make `batch[item.index]` undefined\n // and crash on `.originalIndex`; guard it explicitly.\n const slot =\n typeof item.index === \"number\" ? batch[item.index] : undefined;\n if (!slot) {\n throw new Error(\n `[BatchEmbeddings] response index out of range: ${String(item.index)} (batch size ${batch.length})`\n );\n }\n // Width must match the configured dimension exactly. A wrong width is the\n // root of the \"Skipping embedding insert: dimension mismatch\" (#8769)\n // silent drop downstream — surface it here so the router can fall through.\n if (!Array.isArray(item.embedding) || item.embedding.length !== embeddingDimension) {\n throw new Error(\n `[BatchEmbeddings] dimension mismatch: model returned ${\n Array.isArray(item.embedding) ? item.embedding.length : \"non-array\"\n }d but agent is configured for ${embeddingDimension}d`\n );\n }\n results[slot.originalIndex] = item.embedding;\n }\n\n if (data.usage) {\n const usage = {\n inputTokens: data.usage.prompt_tokens,\n outputTokens: 0,\n totalTokens: data.usage.total_tokens,\n };\n emitModelUsageEvent(runtime, ModelType.TEXT_EMBEDDING, `batch:${batch.length}`, usage);\n }\n\n logger.debug(\n `[BatchEmbeddings] Got ${batch.length} embeddings (${embeddingDimension}d)`\n );\n } catch (error) {\n // Any failure in this batch (HTTP error, transport error, malformed body)\n // means we have no real vectors for it. Log context and re-throw so the\n // router can fall through to another provider; never persist marker/zero\n // vectors that would corrupt the embedding store (Commandment 8).\n const message = error instanceof Error ? error.message : String(error);\n logger.error(`[BatchEmbeddings] Batch failed: ${message}`);\n throw error instanceof Error ? error : new Error(message);\n }\n }\n\n return results;\n}\n"
8
+ "import type { IAgentRuntime, TextEmbeddingParams } from \"@elizaos/core\";\nimport {\n logger,\n ModelType,\n timeInferenceSpan,\n VECTOR_DIMS,\n} from \"@elizaos/core\";\nimport { getSetting } from \"../utils/config\";\nimport { emitModelUsageEvent } from \"../utils/events\";\nimport { createCloudApiClient } from \"../utils/sdk-client\";\n\nconst MAX_BATCH_SIZE = 100;\n\n// ── Bounded retry/backoff for the /embeddings round-trip ──────────────────\n// Embeddings are off the turn's critical path (queueEmbeddingGeneration is\n// fire-and-forget), so a stall here delays the embedding QUEUE, not a reply.\n// The old behaviour — one blind 30s (or full retry-after) sleep then a single\n// retry — could park the queue for 30s+ on a transient 429. Replaced with\n// bounded exponential backoff + jitter, a CAP on any single wait (so a large\n// server retry-after can't stall the queue indefinitely), and a per-request\n// client-side timeout (the endpoint had none, so a hung gateway hung the\n// queue forever).\n//\n// Handler retries are deliberately SMALL: the EmbeddingGenerationService\n// BatchQueue already wraps generateEmbedding in its own multi-attempt backoff,\n// so this layer absorbs only a single transient burst (one quick retry) and\n// defers sustained pressure to the queue — otherwise the two backoffs compound.\nconst EMBED_MAX_ATTEMPTS = 2;\nconst EMBED_BACKOFF_BASE_MS = 1_000;\nexport const EMBED_BACKOFF_CAP_MS = 8_000;\nconst EMBED_REQUEST_TIMEOUT_MS = 60_000;\n\n/**\n * Backoff before the next embedding attempt. Exponential (base·2^attempt) as a\n * floor, honoring the server's `retry-after` when present, but never longer\n * than {@link EMBED_BACKOFF_CAP_MS}; ±25% jitter spreads retries from a burst.\n */\nexport function embeddingBackoffMs(attempt: number, retryAfterSec?: number): number {\n const exp = EMBED_BACKOFF_BASE_MS * 2 ** attempt;\n const serverHint =\n typeof retryAfterSec === \"number\" && retryAfterSec > 0\n ? retryAfterSec * 1000\n : 0;\n const base = Math.min(EMBED_BACKOFF_CAP_MS, Math.max(exp, serverHint));\n return Math.round(base * (1 + Math.random() * 0.25));\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nfunction extractRateLimitInfo(response: Response): {\n remainingRequests?: number;\n remainingTokens?: number;\n limitRequests?: number;\n limitTokens?: number;\n resetRequests?: string;\n resetTokens?: string;\n retryAfter?: number;\n} {\n return {\n remainingRequests:\n parseInt(response.headers.get(\"x-ratelimit-remaining-requests\") || \"\", 10) || undefined,\n remainingTokens:\n parseInt(response.headers.get(\"x-ratelimit-remaining-tokens\") || \"\", 10) || undefined,\n limitRequests:\n parseInt(response.headers.get(\"x-ratelimit-limit-requests\") || \"\", 10) || undefined,\n limitTokens: parseInt(response.headers.get(\"x-ratelimit-limit-tokens\") || \"\", 10) || undefined,\n resetRequests: response.headers.get(\"x-ratelimit-reset-requests\") || undefined,\n resetTokens: response.headers.get(\"x-ratelimit-reset-tokens\") || undefined,\n retryAfter: parseInt(response.headers.get(\"retry-after\") || \"\", 10) || undefined,\n };\n}\n\nfunction getEmbeddingConfig(runtime: IAgentRuntime) {\n const embeddingModelName = getSetting(\n runtime,\n \"ELIZAOS_CLOUD_EMBEDDING_MODEL\",\n \"text-embedding-3-small\"\n );\n const embeddingDimension = Number.parseInt(\n getSetting(runtime, \"ELIZAOS_CLOUD_EMBEDDING_DIMENSIONS\", \"1536\") || \"1536\",\n 10\n ) as (typeof VECTOR_DIMS)[keyof typeof VECTOR_DIMS];\n\n if (!Object.values(VECTOR_DIMS).includes(embeddingDimension)) {\n const errorMsg = `Invalid embedding dimension: ${embeddingDimension}. Must be one of: ${Object.values(VECTOR_DIMS).join(\", \")}`;\n logger.error(errorMsg);\n throw new Error(errorMsg);\n }\n\n return { embeddingModelName, embeddingDimension };\n}\n\n/**\n * The init probe vector. `runtime.ensureEmbeddingDimension()` calls the handler\n * with `null` purely to learn the vector length; it only inspects `.length`, so\n * a deterministic non-zero[0] marker vector is the correct, legitimate response.\n * This is the ONLY place a synthetic vector is returned — every real failure\n * throws so it can never be persisted as a corrupt embedding (Commandment 8).\n */\nfunction createInitProbeVector(dimension: number): number[] {\n const vector = Array(dimension).fill(0);\n vector[0] = 0.1;\n return vector;\n}\n\nexport interface BatchEmbeddingParams {\n texts: string[];\n}\n\nexport async function handleTextEmbedding(\n runtime: IAgentRuntime,\n params: TextEmbeddingParams | string | null\n): Promise<number[]> {\n const { embeddingDimension } = getEmbeddingConfig(runtime);\n\n if (params === null) {\n logger.debug(\"Creating test embedding for initialization\");\n return createInitProbeVector(embeddingDimension);\n }\n\n let text: string;\n if (typeof params === \"string\") {\n text = params;\n } else if (typeof params === \"object\" && params.text) {\n text = params.text;\n } else {\n // A malformed request is a programming error, not a recoverable runtime\n // state. Throw instead of returning a marker vector that would silently\n // corrupt the embedding store (Commandment 8).\n throw new Error(\"Invalid input format for embedding: expected string or { text: string }\");\n }\n\n if (!text.trim()) {\n throw new Error(\"Cannot generate embedding for empty text\");\n }\n\n const results = await handleBatchTextEmbedding(runtime, [text]);\n return results[0];\n}\n\nexport interface BatchEmbeddingResult {\n embedding: number[];\n index: number;\n success: boolean;\n error?: string;\n}\n\nexport async function handleBatchTextEmbedding(\n runtime: IAgentRuntime,\n texts: string[]\n): Promise<number[][]> {\n const { embeddingModelName, embeddingDimension } = getEmbeddingConfig(runtime);\n const client = createCloudApiClient(runtime, true);\n\n if (!texts || texts.length === 0) {\n return [];\n }\n\n // Every text must be non-empty: an empty input cannot produce a meaningful\n // vector, and a marker/zero vector would silently corrupt the store. Surface\n // the bad input to the caller (Commandment 8) instead of papering over it.\n const validTexts: { text: string; originalIndex: number }[] = [];\n for (let i = 0; i < texts.length; i++) {\n const text = texts[i]?.trim();\n if (!text) {\n throw new Error(`Cannot generate embedding for empty text at index ${i}`);\n }\n validTexts.push({ text, originalIndex: i });\n }\n\n const results: number[][] = new Array(texts.length);\n\n for (let batchStart = 0; batchStart < validTexts.length; batchStart += MAX_BATCH_SIZE) {\n const batchEnd = Math.min(batchStart + MAX_BATCH_SIZE, validTexts.length);\n const batch = validTexts.slice(batchStart, batchEnd);\n const batchTexts = batch.map((b) => b.text);\n\n logger.info(\n `[BatchEmbeddings] Processing batch ${Math.floor(batchStart / MAX_BATCH_SIZE) + 1}/${Math.ceil(validTexts.length / MAX_BATCH_SIZE)}: ${batch.length} texts`\n );\n\n try {\n // Records a `cloud.embedding` span on the active per-turn timer when an\n // embedding happens to be on a turn's critical path (most are queued /\n // detached, so this is a no-op there — which is exactly what proves they\n // don't add to turn latency). Retries transient throttling/5xx with\n // bounded exponential backoff (see EMBED_* constants) instead of a single\n // 30s blind sleep.\n let response: Response | null = null;\n for (let attempt = 0; attempt < EMBED_MAX_ATTEMPTS; attempt++) {\n const resp = await timeInferenceSpan(\n \"cloud.embedding\",\n () =>\n client.requestRaw(\"POST\", \"/embeddings\", {\n json: {\n model: embeddingModelName,\n input: batchTexts,\n // Pin the output width to the agent's configured dimension\n // (text-embedding-3-* honor `dimensions`). Without it the\n // gateway returns the model's native width — e.g. 1536 for a\n // 384-configured agent — which the store then silently drops as\n // a dimension mismatch (#8769). Asking for the exact width makes\n // the contract explicit and the width-check below authoritative.\n dimensions: embeddingDimension,\n },\n timeoutMs: EMBED_REQUEST_TIMEOUT_MS,\n }),\n { batch: batchTexts.length, attempt }\n );\n\n const rateLimitInfo = extractRateLimitInfo(resp);\n if (\n rateLimitInfo.remainingRequests !== undefined &&\n rateLimitInfo.remainingRequests < 50\n ) {\n logger.warn(\n `[BatchEmbeddings] Rate limit: ${rateLimitInfo.remainingRequests}/${rateLimitInfo.limitRequests} requests remaining`\n );\n }\n\n const transient =\n resp.status === 429 ||\n resp.status === 502 ||\n resp.status === 503 ||\n resp.status === 504;\n if (transient && attempt < EMBED_MAX_ATTEMPTS - 1) {\n const delay = embeddingBackoffMs(attempt, rateLimitInfo.retryAfter);\n logger.warn(\n `[BatchEmbeddings] ${resp.status} (attempt ${attempt + 1}/${EMBED_MAX_ATTEMPTS}) — backing off ${delay}ms`\n );\n // Drain the body so the underlying connection can be reused.\n await resp.text().catch(() => undefined);\n await sleep(delay);\n continue;\n }\n response = resp;\n break;\n }\n\n // Type guard: the loop assigns `response` on its final iteration, so this\n // is unreachable in practice.\n if (!response) {\n throw new Error(\"[BatchEmbeddings] No response after retry loop\");\n }\n\n if (!response.ok) {\n // Auth errors (401/403) are non-recoverable with the current key.\n // Every other non-OK status is just as fatal for this batch — neither\n // can produce real vectors. Throw in both cases so the router falls\n // through to the next provider (e.g. local inference) instead of\n // silently persisting marker/zero vectors that corrupt the embedding\n // store. Commandment 8: don't hide broken pipelines behind fallbacks.\n if (response.status === 401 || response.status === 403) {\n throw new Error(\n `[BatchEmbeddings] Authentication failed (${response.status}). ` +\n `Check ELIZAOS_CLOUD_API_KEY or ELIZAOS_CLOUD_EMBEDDING_API_KEY — ` +\n `the current key is not authorized for the embedding endpoint.`\n );\n }\n // A terminal 429 means the bounded retries were exhausted and the\n // gateway is still rate-limiting us — surface that distinctly. Any\n // other terminal status (incl. a 503/504 that followed an earlier 429)\n // reports its own status, since that is the failure the caller hit.\n if (response.status === 429) {\n throw new Error(\n `[BatchEmbeddings] Rate-limit retry exhausted: API error: ${response.status} ${response.statusText}`\n );\n }\n throw new Error(\n `[BatchEmbeddings] API error: ${response.status} ${response.statusText}`\n );\n }\n\n const data = (await response.json()) as {\n data?: Array<{ embedding: number[]; index: number }>;\n usage?: { prompt_tokens: number; total_tokens: number };\n };\n\n if (!data?.data || !Array.isArray(data.data)) {\n throw new Error(\"[BatchEmbeddings] API returned invalid response structure\");\n }\n\n // A partial response (fewer vectors than inputs) would leave `undefined`\n // holes in `results` that escape as a non-array \"embedding\" to the runtime\n // and silently corrupt the store. Demand one vector per input (Commandment\n // 8: fail loudly, never return holes).\n if (data.data.length !== batch.length) {\n throw new Error(\n `[BatchEmbeddings] expected ${batch.length} embeddings, got ${data.data.length}`\n );\n }\n\n for (const item of data.data) {\n // The response `index` addresses this batch slice. A malformed/duplicated\n // or cross-batch (absolute) index would make `batch[item.index]` undefined\n // and crash on `.originalIndex`; guard it explicitly.\n const slot =\n typeof item.index === \"number\" ? batch[item.index] : undefined;\n if (!slot) {\n throw new Error(\n `[BatchEmbeddings] response index out of range: ${String(item.index)} (batch size ${batch.length})`\n );\n }\n // Width must match the configured dimension exactly. A wrong width is the\n // root of the \"Skipping embedding insert: dimension mismatch\" (#8769)\n // silent drop downstream — surface it here so the router can fall through.\n if (!Array.isArray(item.embedding) || item.embedding.length !== embeddingDimension) {\n throw new Error(\n `[BatchEmbeddings] dimension mismatch: model returned ${\n Array.isArray(item.embedding) ? item.embedding.length : \"non-array\"\n }d but agent is configured for ${embeddingDimension}d`\n );\n }\n results[slot.originalIndex] = item.embedding;\n }\n\n if (data.usage) {\n const usage = {\n inputTokens: data.usage.prompt_tokens,\n outputTokens: 0,\n totalTokens: data.usage.total_tokens,\n };\n emitModelUsageEvent(runtime, ModelType.TEXT_EMBEDDING, `batch:${batch.length}`, usage);\n }\n\n logger.debug(\n `[BatchEmbeddings] Got ${batch.length} embeddings (${embeddingDimension}d)`\n );\n } catch (error) {\n // Any failure in this batch (HTTP error, transport error, malformed body)\n // means we have no real vectors for it. Log context and re-throw so the\n // router can fall through to another provider; never persist marker/zero\n // vectors that would corrupt the embedding store (Commandment 8).\n const message = error instanceof Error ? error.message : String(error);\n logger.error(`[BatchEmbeddings] Batch failed: ${message}`);\n throw error instanceof Error ? error : new Error(message);\n }\n }\n\n return results;\n}\n"
9
9
  ],
10
- "mappings": "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",
11
- "debugId": "A7DC0958AD6D1E1164756E2164756E21",
10
+ "mappings": "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",
11
+ "debugId": "BF1AD839DA32149764756E2164756E21",
12
12
  "names": []
13
13
  }
@@ -398,4 +398,4 @@ export {
398
398
  handleImageDescription
399
399
  };
400
400
 
401
- //# debugId=579602FD6FB0EC2B64756E2164756E21
401
+ //# debugId=60F3AF86C053730564756E2164756E21