@elizaos/plugin-elizacloud 2.0.0-beta.1 → 2.0.11-beta.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (285) hide show
  1. package/README.md +20 -44
  2. package/auto-enable.ts +10 -5
  3. package/dist/browser/index.browser.js +2 -2
  4. package/dist/browser/index.browser.js.map +4 -4
  5. package/dist/cjs/index.node.cjs +2874 -5915
  6. package/dist/cjs/index.node.js.map +47 -116
  7. package/dist/cloud/auth-service-types.d.ts +8 -0
  8. package/dist/cloud/auth-service-types.d.ts.map +1 -0
  9. package/dist/cloud/auth-service-types.js +36 -0
  10. package/dist/cloud/auth-service-types.js.map +10 -0
  11. package/dist/cloud/auth.js +4 -51
  12. package/dist/cloud/auth.js.map +4 -4
  13. package/dist/cloud/base-url.d.ts +6 -2
  14. package/dist/cloud/base-url.d.ts.map +1 -1
  15. package/dist/cloud/base-url.js +3 -51
  16. package/dist/cloud/base-url.js.map +3 -3
  17. package/dist/cloud/bridge-client.d.ts +3 -3
  18. package/dist/cloud/bridge-client.d.ts.map +1 -1
  19. package/dist/cloud/bridge-client.js +3 -51
  20. package/dist/cloud/bridge-client.js.map +3 -3
  21. package/dist/cloud/clack-observer.d.ts +35 -0
  22. package/dist/cloud/clack-observer.d.ts.map +1 -0
  23. package/dist/cloud/clack-observer.js +143 -0
  24. package/dist/cloud/clack-observer.js.map +10 -0
  25. package/dist/cloud/cloud-manager.js +45 -92
  26. package/dist/cloud/cloud-manager.js.map +6 -6
  27. package/dist/cloud/cloud-wallet.js +2 -4835
  28. package/dist/cloud/cloud-wallet.js.map +3 -82
  29. package/dist/cloud/duffel-client.d.ts +181 -0
  30. package/dist/cloud/duffel-client.d.ts.map +1 -0
  31. package/dist/cloud/duffel-client.js +506 -0
  32. package/dist/cloud/duffel-client.js.map +11 -0
  33. package/dist/cloud/index.d.ts +6 -0
  34. package/dist/cloud/index.d.ts.map +1 -1
  35. package/dist/cloud/index.js +1782 -1
  36. package/dist/cloud/index.js.map +18 -3
  37. package/dist/cloud/lifeops-schedule-sync-client.d.ts +43 -0
  38. package/dist/cloud/lifeops-schedule-sync-client.d.ts.map +1 -0
  39. package/dist/cloud/lifeops-schedule-sync-client.js +180 -0
  40. package/dist/cloud/lifeops-schedule-sync-client.js.map +11 -0
  41. package/dist/cloud/lifeops-schedule-sync-contracts.d.ts +89 -0
  42. package/dist/cloud/lifeops-schedule-sync-contracts.d.ts.map +1 -0
  43. package/dist/cloud/lifeops-schedule-sync-contracts.js +39 -0
  44. package/dist/cloud/lifeops-schedule-sync-contracts.js.map +10 -0
  45. package/dist/cloud/managed-payment-clients.d.ts +166 -0
  46. package/dist/cloud/managed-payment-clients.d.ts.map +1 -0
  47. package/dist/cloud/managed-payment-clients.js +238 -0
  48. package/dist/cloud/managed-payment-clients.js.map +11 -0
  49. package/dist/cloud/null-observer.d.ts +35 -0
  50. package/dist/cloud/null-observer.d.ts.map +1 -0
  51. package/dist/cloud/null-observer.js +45 -0
  52. package/dist/cloud/null-observer.js.map +10 -0
  53. package/dist/cloud/setup-observer.d.ts +98 -0
  54. package/dist/cloud/setup-observer.d.ts.map +1 -0
  55. package/dist/cloud/setup-observer.js +2 -0
  56. package/dist/cloud/setup-observer.js.map +9 -0
  57. package/dist/cloud/validate-url.d.ts.map +1 -1
  58. package/dist/cloud/validate-url.js +2 -1
  59. package/dist/cloud/validate-url.js.map +3 -3
  60. package/dist/cloud/x402-payment-handler.d.ts +85 -0
  61. package/dist/cloud/x402-payment-handler.d.ts.map +1 -0
  62. package/dist/cloud/x402-payment-handler.js +119 -0
  63. package/dist/cloud/x402-payment-handler.js.map +10 -0
  64. package/dist/cloud-setup.d.ts +36 -0
  65. package/dist/cloud-setup.d.ts.map +1 -0
  66. package/dist/{onboarding.js → cloud-setup.js} +139 -139
  67. package/dist/cloud-setup.js.map +14 -0
  68. package/dist/cloud-voice-catalog.d.ts +65 -0
  69. package/dist/cloud-voice-catalog.d.ts.map +1 -0
  70. package/dist/cloud-voice-catalog.js +278 -0
  71. package/dist/cloud-voice-catalog.js.map +12 -0
  72. package/dist/index.browser.d.ts +11 -0
  73. package/dist/index.browser.d.ts.map +1 -1
  74. package/dist/index.d.ts +7 -1
  75. package/dist/index.d.ts.map +1 -1
  76. package/dist/index.js +5416 -8405
  77. package/dist/index.js.map +48 -116
  78. package/dist/index.node.d.ts +8 -1
  79. package/dist/index.node.d.ts.map +1 -1
  80. package/dist/init.js +17 -4
  81. package/dist/init.js.map +4 -4
  82. package/dist/lib/cloud-connection.d.ts +0 -1
  83. package/dist/lib/cloud-connection.d.ts.map +1 -1
  84. package/dist/lib/cloud-connection.js +14 -91
  85. package/dist/lib/cloud-connection.js.map +7 -7
  86. package/dist/lib/cloud-secrets.d.ts +5 -18
  87. package/dist/lib/cloud-secrets.d.ts.map +1 -1
  88. package/dist/lib/cloud-secrets.js +8 -36
  89. package/dist/lib/cloud-secrets.js.map +3 -3
  90. package/dist/lib/config-like.d.ts +1 -1
  91. package/dist/lib/config-like.d.ts.map +1 -1
  92. package/dist/lib/config-like.js +3 -3
  93. package/dist/lib/config-like.js.map +3 -3
  94. package/dist/lib/credential-type-map.d.ts +1 -1
  95. package/dist/lib/credential-type-map.js.map +1 -1
  96. package/dist/lib/http.d.ts +0 -11
  97. package/dist/lib/http.d.ts.map +1 -1
  98. package/dist/lib/http.js.map +2 -2
  99. package/dist/lib/server-cloud-tts.d.ts +12 -25
  100. package/dist/lib/server-cloud-tts.d.ts.map +1 -1
  101. package/dist/lib/server-cloud-tts.js +31 -329
  102. package/dist/lib/server-cloud-tts.js.map +4 -7
  103. package/dist/lib/tts-debug.d.ts +5 -3
  104. package/dist/lib/tts-debug.d.ts.map +1 -1
  105. package/dist/lib/tts-debug.js +1 -34
  106. package/dist/lib/tts-debug.js.map +3 -4
  107. package/dist/models/embeddings.d.ts.map +1 -1
  108. package/dist/models/embeddings.js +79 -69
  109. package/dist/models/embeddings.js.map +6 -6
  110. package/dist/models/image.d.ts.map +1 -1
  111. package/dist/models/image.js +42 -15
  112. package/dist/models/image.js.map +6 -6
  113. package/dist/models/index.js +676 -166
  114. package/dist/models/index.js.map +11 -12
  115. package/dist/models/research.d.ts.map +1 -1
  116. package/dist/models/research.js +24 -7
  117. package/dist/models/research.js.map +6 -6
  118. package/dist/models/speech.d.ts +61 -3
  119. package/dist/models/speech.d.ts.map +1 -1
  120. package/dist/models/speech.js +173 -17
  121. package/dist/models/speech.js.map +5 -5
  122. package/dist/models/text.d.ts +106 -1
  123. package/dist/models/text.d.ts.map +1 -1
  124. package/dist/models/text.js +452 -82
  125. package/dist/models/text.js.map +7 -8
  126. package/dist/models/tokenization.d.ts.map +1 -1
  127. package/dist/models/tokenization.js.map +2 -2
  128. package/dist/models/transcription.d.ts.map +1 -1
  129. package/dist/models/transcription.js +20 -6
  130. package/dist/models/transcription.js.map +5 -5
  131. package/dist/node/index.node.js +2828 -5838
  132. package/dist/node/index.node.js.map +47 -116
  133. package/dist/plugin.d.ts.map +1 -1
  134. package/dist/plugin.js +376 -5050
  135. package/dist/plugin.js.map +16 -92
  136. package/dist/providers/openai.js +11 -2
  137. package/dist/providers/openai.js.map +3 -3
  138. package/dist/register-routes.js +376 -5050
  139. package/dist/register-routes.js.map +16 -92
  140. package/dist/routes/cloud-billing-routes.d.ts.map +1 -1
  141. package/dist/routes/cloud-billing-routes.js +17 -60
  142. package/dist/routes/cloud-billing-routes.js.map +8 -7
  143. package/dist/routes/cloud-coding-container-routes.d.ts +8 -0
  144. package/dist/routes/cloud-coding-container-routes.d.ts.map +1 -0
  145. package/dist/routes/cloud-coding-container-routes.js +214 -0
  146. package/dist/routes/cloud-coding-container-routes.js.map +11 -0
  147. package/dist/routes/cloud-compat-routes.d.ts.map +1 -1
  148. package/dist/routes/cloud-compat-routes.js +17 -60
  149. package/dist/routes/cloud-compat-routes.js.map +8 -7
  150. package/dist/routes/cloud-features-routes.js +2 -2
  151. package/dist/routes/cloud-features-routes.js.map +4 -4
  152. package/dist/routes/cloud-relay-routes.d.ts +2 -1
  153. package/dist/routes/cloud-relay-routes.d.ts.map +1 -1
  154. package/dist/routes/cloud-relay-routes.js +84 -2
  155. package/dist/routes/cloud-relay-routes.js.map +5 -4
  156. package/dist/routes/cloud-routes-autonomous.d.ts +3 -4
  157. package/dist/routes/cloud-routes-autonomous.d.ts.map +1 -1
  158. package/dist/routes/cloud-routes-autonomous.js +11 -4893
  159. package/dist/routes/cloud-routes-autonomous.js.map +8 -87
  160. package/dist/routes/cloud-routes.d.ts +2 -2
  161. package/dist/routes/cloud-routes.d.ts.map +1 -1
  162. package/dist/routes/cloud-routes.js +343 -5058
  163. package/dist/routes/cloud-routes.js.map +13 -90
  164. package/dist/routes/cloud-status-routes-autonomous.d.ts +1 -2
  165. package/dist/routes/cloud-status-routes-autonomous.d.ts.map +1 -1
  166. package/dist/routes/cloud-status-routes-autonomous.js +4 -51
  167. package/dist/routes/cloud-status-routes-autonomous.js.map +5 -5
  168. package/dist/routes/cloud-status-routes.js +14 -90
  169. package/dist/routes/cloud-status-routes.js.map +7 -7
  170. package/dist/routes/home-remote-runner-access-url.d.ts +16 -0
  171. package/dist/routes/home-remote-runner-access-url.d.ts.map +1 -0
  172. package/dist/routes/home-remote-runner-access-url.js +91 -0
  173. package/dist/routes/home-remote-runner-access-url.js.map +10 -0
  174. package/dist/routes/travel-provider-relay-routes.d.ts +9 -0
  175. package/dist/routes/travel-provider-relay-routes.d.ts.map +1 -0
  176. package/dist/routes/travel-provider-relay-routes.js +358 -0
  177. package/dist/routes/travel-provider-relay-routes.js.map +14 -0
  178. package/dist/services/cloud-auth.d.ts +1 -1
  179. package/dist/services/cloud-auth.d.ts.map +1 -1
  180. package/dist/services/cloud-auth.js +7 -2
  181. package/dist/services/cloud-auth.js.map +4 -4
  182. package/dist/services/cloud-backup.js.map +2 -2
  183. package/dist/services/cloud-bootstrap.d.ts.map +1 -1
  184. package/dist/services/cloud-bootstrap.js.map +2 -2
  185. package/dist/services/cloud-bridge.js.map +3 -3
  186. package/dist/services/cloud-container.d.ts +5 -1
  187. package/dist/services/cloud-container.d.ts.map +1 -1
  188. package/dist/services/cloud-container.js +52 -1
  189. package/dist/services/cloud-container.js.map +4 -4
  190. package/dist/services/cloud-credential-provider.js.map +2 -2
  191. package/dist/services/cloud-model-registry.js.map +2 -2
  192. package/dist/types/cloud.d.ts +1 -0
  193. package/dist/types/cloud.d.ts.map +1 -1
  194. package/dist/types/cloud.js.map +2 -2
  195. package/dist/types/index.d.ts +1 -1
  196. package/dist/types/index.d.ts.map +1 -1
  197. package/dist/utils/cloud-sdk/client.d.ts.map +1 -1
  198. package/dist/utils/cloud-sdk/client.js +136 -4
  199. package/dist/utils/cloud-sdk/client.js.map +5 -5
  200. package/dist/utils/cloud-sdk/http.js.map +1 -1
  201. package/dist/utils/cloud-sdk/public-routes.d.ts +186 -0
  202. package/dist/utils/cloud-sdk/public-routes.d.ts.map +1 -1
  203. package/dist/utils/cloud-sdk/public-routes.js +99 -1
  204. package/dist/utils/cloud-sdk/public-routes.js.map +3 -3
  205. package/dist/utils/cloud-sdk/types.d.ts +0 -2
  206. package/dist/utils/cloud-sdk/types.d.ts.map +1 -1
  207. package/dist/utils/cloud-sdk/types.js.map +1 -1
  208. package/dist/utils/config.d.ts +10 -1
  209. package/dist/utils/config.d.ts.map +1 -1
  210. package/dist/utils/config.js +12 -2
  211. package/dist/utils/config.js.map +3 -3
  212. package/dist/utils/events.d.ts +23 -2
  213. package/dist/utils/events.d.ts.map +1 -1
  214. package/dist/utils/events.js +5 -3
  215. package/dist/utils/events.js.map +3 -3
  216. package/dist/utils/sdk-client.d.ts.map +1 -1
  217. package/dist/utils/sdk-client.js +17 -4
  218. package/dist/utils/sdk-client.js.map +4 -4
  219. package/dist/utils/waifu-metering.d.ts +108 -0
  220. package/dist/utils/waifu-metering.d.ts.map +1 -0
  221. package/dist/utils/waifu-metering.js +166 -0
  222. package/dist/utils/waifu-metering.js.map +10 -0
  223. package/package.json +51 -22
  224. package/src/cloud/auth-service-types.ts +24 -0
  225. package/src/cloud/base-url.ts +6 -62
  226. package/src/cloud/clack-observer.ts +189 -0
  227. package/src/cloud/duffel-client.ts +847 -0
  228. package/src/cloud/index.ts +10 -0
  229. package/src/cloud/lifeops-schedule-sync-client.ts +245 -0
  230. package/src/cloud/lifeops-schedule-sync-contracts.ts +124 -0
  231. package/src/cloud/managed-payment-clients.ts +374 -0
  232. package/src/cloud/null-observer.ts +45 -0
  233. package/src/cloud/setup-observer.ts +125 -0
  234. package/src/cloud/validate-url.ts +7 -1
  235. package/src/cloud/x402-payment-handler.ts +215 -0
  236. package/src/cloud-setup.ts +531 -0
  237. package/src/cloud-voice-catalog.test.ts +254 -0
  238. package/src/cloud-voice-catalog.ts +246 -0
  239. package/src/index.browser.ts +29 -0
  240. package/src/index.node.ts +31 -1
  241. package/src/index.ts +76 -4
  242. package/src/lib/cloud-connection.ts +2 -4
  243. package/src/lib/cloud-secrets.ts +10 -54
  244. package/src/lib/config-like.ts +1 -1
  245. package/src/lib/credential-type-map.ts +2 -2
  246. package/src/lib/http.ts +0 -17
  247. package/src/lib/server-cloud-tts.ts +33 -341
  248. package/src/lib/tts-debug.ts +5 -34
  249. package/src/models/embeddings.ts +140 -76
  250. package/src/models/image.ts +29 -14
  251. package/src/models/research.ts +11 -1
  252. package/src/models/speech.ts +269 -23
  253. package/src/models/text.ts +704 -110
  254. package/src/models/tokenization.ts +2 -2
  255. package/src/models/transcription.ts +7 -3
  256. package/src/plugin.ts +38 -0
  257. package/src/routes/cloud-billing-routes.ts +4 -14
  258. package/src/routes/cloud-coding-container-routes.ts +198 -0
  259. package/src/routes/cloud-compat-routes.ts +4 -14
  260. package/src/routes/cloud-features-routes.ts +1 -1
  261. package/src/routes/cloud-relay-routes.ts +47 -1
  262. package/src/routes/cloud-routes-autonomous.ts +7 -10
  263. package/src/routes/cloud-routes.ts +68 -7
  264. package/src/routes/cloud-status-routes-autonomous.ts +6 -2
  265. package/src/routes/home-remote-runner-access-url.ts +83 -0
  266. package/src/routes/travel-provider-relay-routes.ts +193 -0
  267. package/src/services/cloud-auth.ts +9 -2
  268. package/src/services/cloud-bootstrap.ts +1 -3
  269. package/src/services/cloud-bridge.ts +1 -1
  270. package/src/services/cloud-container.ts +93 -0
  271. package/src/services/cloud-credential-provider.ts +1 -1
  272. package/src/services/cloud-model-registry.ts +1 -1
  273. package/src/types/cloud.ts +22 -0
  274. package/src/types/index.ts +19 -0
  275. package/src/utils/cloud-sdk/client.ts +42 -3
  276. package/src/utils/cloud-sdk/public-routes.ts +168 -0
  277. package/src/utils/cloud-sdk/types.ts +0 -2
  278. package/src/utils/config.ts +20 -1
  279. package/src/utils/events.ts +30 -2
  280. package/src/utils/sdk-client.ts +5 -1
  281. package/src/utils/waifu-metering.ts +302 -0
  282. package/dist/onboarding.d.ts +0 -35
  283. package/dist/onboarding.d.ts.map +0 -1
  284. package/dist/onboarding.js.map +0 -14
  285. package/src/onboarding.ts +0 -396
@@ -16,111 +16,31 @@ var __export = (target, all) => {
16
16
  var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
17
17
  var __require = /* @__PURE__ */ createRequire(import.meta.url);
18
18
 
19
- // src/lib/state-paths.ts
20
- import fs from "node:fs";
21
- import path from "node:path";
22
- import {
23
- getElizaNamespace,
24
- resolveStateDir,
25
- resolveUserPath
26
- } from "@elizaos/core";
27
- function resolveConfigPath(env = process.env, stateDirPath = resolveStateDir(env)) {
28
- const override = env.ELIZA_CONFIG_PATH?.trim();
29
- if (override)
30
- return resolveUserPath(override);
31
- const namespace = getElizaNamespace(env);
32
- const primaryPath = path.join(stateDirPath, `${namespace}.json`);
33
- if (fs.existsSync(primaryPath))
34
- return primaryPath;
35
- if (namespace !== "eliza") {
36
- const legacyPath = path.join(stateDirPath, "eliza.json");
37
- if (fs.existsSync(legacyPath))
38
- return legacyPath;
39
- }
40
- return primaryPath;
41
- }
42
- var init_state_paths = () => {};
43
-
44
- // src/lib/cloud-secrets.ts
45
- function getCloudSecret(key) {
46
- return _cloudSecrets[key] ?? process.env[key];
47
- }
48
- function scrubCloudSecretsFromEnv() {
49
- for (const key of [
50
- "ELIZAOS_CLOUD_API_KEY",
51
- "ELIZAOS_CLOUD_ENABLED"
52
- ]) {
53
- if (process.env[key] !== undefined) {
54
- _cloudSecrets[key] = process.env[key];
55
- delete process.env[key];
56
- }
57
- }
58
- }
59
- function clearCloudSecrets() {
60
- for (const key of [
61
- "ELIZAOS_CLOUD_API_KEY",
62
- "ELIZAOS_CLOUD_ENABLED"
63
- ]) {
64
- delete _cloudSecrets[key];
65
- }
66
- }
67
- function _resetCloudSecretsForTesting() {
68
- for (const key of Object.keys(_cloudSecrets)) {
69
- delete _cloudSecrets[key];
70
- }
71
- }
72
- var _cloudSecrets;
73
- var init_cloud_secrets = __esm(() => {
74
- _cloudSecrets = Object.create(null);
75
- Object.defineProperty(_cloudSecrets, Symbol.toStringTag, {
76
- value: "CloudSecrets",
77
- enumerable: false
78
- });
79
- });
80
-
81
- // src/lib/tts-debug.ts
82
- function truthy(raw) {
83
- if (raw == null)
84
- return false;
85
- const value = String(raw).trim().toLowerCase();
86
- return value === "1" || value === "true" || value === "yes" || value === "on";
87
- }
88
- function ttsDebugEnabled() {
89
- if (typeof process !== "undefined" && process.env) {
90
- if (truthy(process.env.ELIZA_TTS_DEBUG))
91
- return true;
92
- }
93
- return false;
94
- }
95
- function isTtsDebugEnabled() {
96
- return ttsDebugEnabled();
97
- }
98
- function ttsDebugTextPreview(text, maxChars = 160) {
99
- const singleLine = text.replace(/\r?\n/g, "↵ ").replace(/\s+/g, " ").trim();
100
- if (singleLine.length <= maxChars)
101
- return singleLine;
102
- return `${singleLine.slice(0, maxChars)}…`;
103
- }
104
- function ttsDebug(phase, detail) {
105
- if (!ttsDebugEnabled())
106
- return;
107
- if (detail && Object.keys(detail).length > 0) {
108
- console.info(`[eliza][tts] ${phase}`, detail);
109
- } else {
110
- console.info(`[eliza][tts] ${phase}`);
111
- }
112
- }
113
-
114
19
  // src/lib/server-cloud-tts.ts
115
- init_cloud_secrets();
116
- init_state_paths();
117
- import fs2 from "node:fs";
118
- import { isElizaCloudServiceSelectedInConfig, sanitizeSpeechText } from "@elizaos/core";
119
- function loadElizaConfig() {
120
- const raw = fs2.readFileSync(resolveConfigPath(), "utf8");
121
- const parsed = JSON.parse(raw);
122
- return parsed && typeof parsed === "object" && !Array.isArray(parsed) ? parsed : {};
123
- }
20
+ import { sanitizeSpeechText } from "@elizaos/core";
21
+ import {
22
+ _internalResolveCloudApiKey,
23
+ ELIZA_CLOUD_TTS_MAX_TEXT_CHARS,
24
+ resolveCloudProxyTtsModel,
25
+ resolveCloudTtsCandidateUrls,
26
+ resolveElizaCloudTtsVoiceId,
27
+ shouldRetryCloudTtsUpstream,
28
+ ttsDebug,
29
+ ttsDebugTextPreview
30
+ } from "@elizaos/shared";
31
+ import {
32
+ __resetCloudBaseUrlCache,
33
+ ELIZA_CLOUD_TTS_MAX_TEXT_CHARS as ELIZA_CLOUD_TTS_MAX_TEXT_CHARS2,
34
+ ensureCloudTtsApiKeyAlias,
35
+ mirrorCompatHeaders,
36
+ normalizeElizaCloudTtsModelId,
37
+ resolveCloudProxyTtsModel as resolveCloudProxyTtsModel2,
38
+ resolveCloudTtsBaseUrl,
39
+ resolveCloudTtsCandidateUrls as resolveCloudTtsCandidateUrls2,
40
+ resolveElevenLabsApiKeyForCloudMode,
41
+ resolveElizaCloudTtsVoiceId as resolveElizaCloudTtsVoiceId2,
42
+ shouldRetryCloudTtsUpstream as shouldRetryCloudTtsUpstream2
43
+ } from "@elizaos/shared";
124
44
  function readTtsDebugClientHeaders(req) {
125
45
  const pick = (name) => {
126
46
  const raw = req.headers[name];
@@ -154,97 +74,6 @@ function ttsClientDbgFields(hdr) {
154
74
  o.hearingFull = hdr.hearingFull;
155
75
  return o;
156
76
  }
157
- function normalizeSecretEnvValue(value) {
158
- const trimmed = value?.trim();
159
- if (!trimmed) {
160
- return null;
161
- }
162
- if (trimmed === "REDACTED" || trimmed === "[REDACTED]" || /^\*+$/.test(trimmed)) {
163
- return null;
164
- }
165
- return trimmed;
166
- }
167
- var OPENAI_STYLE_VOICE_ALIASES = new Set([
168
- "alloy",
169
- "ash",
170
- "ballad",
171
- "coral",
172
- "echo",
173
- "nova",
174
- "sage",
175
- "shimmer",
176
- "verse"
177
- ]);
178
- var DEFAULT_ELIZA_CLOUD_TTS_VOICE_ID = "EXAVITQu4vr4xnSDxMaL";
179
- var DEFAULT_ELIZA_CLOUD_TTS_MODEL_ID = "eleven_flash_v2_5";
180
- var ELIZA_CLOUD_TTS_MAX_TEXT_CHARS = 5000;
181
- function isLikelyEdgeOrAzureNeuralVoiceId(raw) {
182
- const t = raw.trim();
183
- return /^[a-z]{2}-[A-Z]{2}-/i.test(t) && /Neural$/i.test(t);
184
- }
185
- function normalizeElizaCloudVoiceId(raw) {
186
- const trimmed = raw.trim();
187
- if (!trimmed)
188
- return DEFAULT_ELIZA_CLOUD_TTS_VOICE_ID;
189
- const lower = trimmed.toLowerCase();
190
- if (OPENAI_STYLE_VOICE_ALIASES.has(lower)) {
191
- return DEFAULT_ELIZA_CLOUD_TTS_VOICE_ID;
192
- }
193
- if (isLikelyEdgeOrAzureNeuralVoiceId(trimmed)) {
194
- return DEFAULT_ELIZA_CLOUD_TTS_VOICE_ID;
195
- }
196
- return trimmed;
197
- }
198
- function resolveElizaCloudTtsVoiceId(bodyVoiceId, env = process.env) {
199
- if (typeof bodyVoiceId === "string" && bodyVoiceId.trim()) {
200
- return normalizeElizaCloudVoiceId(bodyVoiceId);
201
- }
202
- const envVoice = env.ELIZAOS_CLOUD_TTS_VOICE?.trim() ?? "";
203
- if (envVoice) {
204
- return normalizeElizaCloudVoiceId(envVoice);
205
- }
206
- return DEFAULT_ELIZA_CLOUD_TTS_VOICE_ID;
207
- }
208
- function resolveCloudApiKey(env = process.env) {
209
- const envKey = normalizeSecretEnvValue(env.ELIZAOS_CLOUD_API_KEY);
210
- if (envKey) {
211
- return envKey;
212
- }
213
- try {
214
- const config = loadElizaConfig();
215
- const configKey = normalizeSecretEnvValue(typeof config.cloud?.apiKey === "string" ? config.cloud.apiKey : undefined);
216
- if (configKey) {
217
- return configKey;
218
- }
219
- } catch {}
220
- const sealedKey = normalizeSecretEnvValue(getCloudSecret("ELIZAOS_CLOUD_API_KEY"));
221
- if (sealedKey) {
222
- return sealedKey;
223
- }
224
- return null;
225
- }
226
- var cachedCloudBaseUrlFromConfig;
227
- var hasResolvedCloudBaseUrlFromConfig = false;
228
- function __resetCloudBaseUrlCache() {
229
- cachedCloudBaseUrlFromConfig = undefined;
230
- hasResolvedCloudBaseUrlFromConfig = false;
231
- }
232
- function resolveCloudBaseUrlFromConfig() {
233
- if (hasResolvedCloudBaseUrlFromConfig) {
234
- return cachedCloudBaseUrlFromConfig ?? null;
235
- }
236
- try {
237
- const config = loadElizaConfig();
238
- const raw = typeof config.cloud?.baseUrl === "string" ? config.cloud.baseUrl.trim() : "";
239
- cachedCloudBaseUrlFromConfig = raw.length > 0 ? raw : null;
240
- hasResolvedCloudBaseUrlFromConfig = true;
241
- return cachedCloudBaseUrlFromConfig;
242
- } catch {
243
- cachedCloudBaseUrlFromConfig = null;
244
- hasResolvedCloudBaseUrlFromConfig = true;
245
- return null;
246
- }
247
- }
248
77
  function pickBodyString(body, camel, snake) {
249
78
  const a = body[camel];
250
79
  if (typeof a === "string" && a.trim())
@@ -271,9 +100,6 @@ function sendJsonResponse(res, status, body) {
271
100
  function sendJsonErrorResponse(res, status, message) {
272
101
  sendJsonResponse(res, status, { error: message });
273
102
  }
274
- function shouldRetryCloudTtsUpstream(status) {
275
- return status === 404 || status === 502 || status === 503;
276
- }
277
103
  function forwardCloudTtsUpstreamError(res, status, bodyText) {
278
104
  if (res.headersSent)
279
105
  return;
@@ -289,114 +115,10 @@ function forwardCloudTtsUpstreamError(res, status, bodyText) {
289
115
  res.setHeader("content-type", "application/json; charset=utf-8");
290
116
  res.end(JSON.stringify({ error: trimmed || "Eliza Cloud TTS request failed" }));
291
117
  }
292
- function normalizeElizaCloudTtsModelId(raw) {
293
- const trimmed = raw.trim();
294
- if (!trimmed)
295
- return DEFAULT_ELIZA_CLOUD_TTS_MODEL_ID;
296
- const lower = trimmed.toLowerCase();
297
- if (OPENAI_STYLE_VOICE_ALIASES.has(lower)) {
298
- return DEFAULT_ELIZA_CLOUD_TTS_MODEL_ID;
299
- }
300
- if (/^gpt-/i.test(trimmed)) {
301
- return DEFAULT_ELIZA_CLOUD_TTS_MODEL_ID;
302
- }
303
- if (/^tts-1/i.test(trimmed)) {
304
- return DEFAULT_ELIZA_CLOUD_TTS_MODEL_ID;
305
- }
306
- if (/mini-tts/i.test(trimmed)) {
307
- return DEFAULT_ELIZA_CLOUD_TTS_MODEL_ID;
308
- }
309
- return trimmed;
310
- }
311
- function resolveCloudProxyTtsModel(bodyModel, env = process.env) {
312
- const envModel = env.ELIZAOS_CLOUD_TTS_MODEL?.trim() ?? "";
313
- const raw = typeof bodyModel === "string" && bodyModel.trim() ? bodyModel.trim() : "";
314
- const chosen = raw || envModel;
315
- if (!chosen)
316
- return DEFAULT_ELIZA_CLOUD_TTS_MODEL_ID;
317
- return normalizeElizaCloudTtsModelId(chosen);
318
- }
319
- function resolveElevenLabsApiKeyForCloudMode(env = process.env) {
320
- const directKey = normalizeSecretEnvValue(env.ELEVENLABS_API_KEY);
321
- if (directKey) {
322
- return directKey;
323
- }
324
- let configWantsCloudTts = false;
325
- try {
326
- configWantsCloudTts = isElizaCloudServiceSelectedInConfig(loadElizaConfig(), "tts");
327
- } catch {
328
- configWantsCloudTts = false;
329
- }
330
- const cloudTtsEnabled = env.ELIZAOS_CLOUD_USE_TTS === "true" || env.ELIZAOS_CLOUD_USE_TTS === undefined && configWantsCloudTts;
331
- if (!cloudTtsEnabled) {
332
- return null;
333
- }
334
- if (env.ELIZA_CLOUD_TTS_DISABLED === "true") {
335
- return null;
336
- }
337
- return resolveCloudApiKey(env);
338
- }
339
- function ensureCloudTtsApiKeyAlias(env = process.env) {
340
- const directKey = normalizeSecretEnvValue(env.ELEVENLABS_API_KEY);
341
- if (directKey) {
342
- return false;
343
- }
344
- const cloudBackedKey = resolveElevenLabsApiKeyForCloudMode(env);
345
- if (!cloudBackedKey) {
346
- return false;
347
- }
348
- env.ELEVENLABS_API_KEY = cloudBackedKey;
349
- return true;
350
- }
351
- function resolveCloudTtsBaseUrl(env = process.env) {
352
- const fromEnv = env.ELIZAOS_CLOUD_BASE_URL?.trim() ?? "";
353
- const fromConfig = fromEnv.length > 0 ? null : resolveCloudBaseUrlFromConfig();
354
- const configured = fromEnv.length > 0 ? fromEnv : fromConfig?.trim() ?? "";
355
- const fallback = "https://www.elizacloud.ai/api/v1";
356
- const base = configured.length > 0 ? configured : fallback;
357
- try {
358
- const parsed = new URL(base);
359
- let path2 = parsed.pathname.replace(/\/+$/, "");
360
- if (!path2 || path2 === "/") {
361
- path2 = "/api/v1";
362
- }
363
- parsed.pathname = path2;
364
- return parsed.toString().replace(/\/$/, "");
365
- } catch {
366
- return fallback;
367
- }
368
- }
369
- function resolveCloudTtsCandidateUrls(env = process.env) {
370
- const base = resolveCloudTtsBaseUrl(env).replace(/\/+$/, "");
371
- const candidates = new Set;
372
- const addEndpointsForApiV1Base = (baseUrl) => {
373
- const trimmed = baseUrl.replace(/\/+$/, "");
374
- candidates.add(`${trimmed}/voice/tts`);
375
- try {
376
- const u = new URL(trimmed);
377
- const path2 = u.pathname.replace(/\/+$/, "");
378
- if (path2.endsWith("/api/v1")) {
379
- candidates.add(`${u.origin}/api/elevenlabs/tts`);
380
- }
381
- } catch {}
382
- };
383
- addEndpointsForApiV1Base(base);
384
- try {
385
- const parsed = new URL(base);
386
- if (parsed.hostname.startsWith("www.")) {
387
- parsed.hostname = parsed.hostname.slice(4);
388
- addEndpointsForApiV1Base(parsed.toString().replace(/\/$/, ""));
389
- } else {
390
- parsed.hostname = `www.${parsed.hostname}`;
391
- addEndpointsForApiV1Base(parsed.toString().replace(/\/$/, ""));
392
- }
393
- } catch {}
394
- return [...candidates];
395
- }
396
118
  async function handleCloudTtsPreviewRoute(req, res) {
397
119
  const clientTtsDbg = readTtsDebugClientHeaders(req);
398
120
  const dbgExtra = ttsClientDbgFields(clientTtsDbg);
399
- const cloudApiKey = resolveCloudApiKey();
121
+ const cloudApiKey = _internalResolveCloudApiKey();
400
122
  if (!cloudApiKey) {
401
123
  ttsDebug("server:cloud-tts:reject", {
402
124
  reason: "no_api_key",
@@ -510,40 +232,20 @@ async function handleCloudTtsPreviewRoute(req, res) {
510
232
  return true;
511
233
  }
512
234
  }
513
- function mirrorCompatHeaders(req) {
514
- const HEADER_ALIASES = [
515
- ["x-elizaos-token", "x-eliza-token"],
516
- ["x-elizaos-export-token", "x-eliza-export-token"],
517
- ["x-elizaos-client-id", "x-eliza-client-id"],
518
- ["x-elizaos-terminal-token", "x-eliza-terminal-token"],
519
- ["x-elizaos-ui-language", "x-eliza-ui-language"],
520
- ["x-elizaos-agent-action", "x-eliza-agent-action"]
521
- ];
522
- for (const [appHeader, elizaHeader] of HEADER_ALIASES) {
523
- const appValue = req.headers[appHeader];
524
- const elizaValue = req.headers[elizaHeader];
525
- if (appValue != null && elizaValue == null) {
526
- req.headers[elizaHeader] = appValue;
527
- }
528
- if (elizaValue != null && appValue == null) {
529
- req.headers[appHeader] = elizaValue;
530
- }
531
- }
532
- }
533
235
  export {
534
- shouldRetryCloudTtsUpstream,
535
- resolveElizaCloudTtsVoiceId,
236
+ shouldRetryCloudTtsUpstream2 as shouldRetryCloudTtsUpstream,
237
+ resolveElizaCloudTtsVoiceId2 as resolveElizaCloudTtsVoiceId,
536
238
  resolveElevenLabsApiKeyForCloudMode,
537
- resolveCloudTtsCandidateUrls,
239
+ resolveCloudTtsCandidateUrls2 as resolveCloudTtsCandidateUrls,
538
240
  resolveCloudTtsBaseUrl,
539
- resolveCloudProxyTtsModel,
241
+ resolveCloudProxyTtsModel2 as resolveCloudProxyTtsModel,
540
242
  readTtsDebugClientHeaders,
541
243
  normalizeElizaCloudTtsModelId,
542
244
  mirrorCompatHeaders,
543
245
  handleCloudTtsPreviewRoute,
544
246
  ensureCloudTtsApiKeyAlias,
545
247
  __resetCloudBaseUrlCache,
546
- ELIZA_CLOUD_TTS_MAX_TEXT_CHARS
248
+ ELIZA_CLOUD_TTS_MAX_TEXT_CHARS2 as ELIZA_CLOUD_TTS_MAX_TEXT_CHARS
547
249
  };
548
250
 
549
- //# debugId=6733258098F6092A64756E2164756E21
251
+ //# debugId=8E6B79F7D105205464756E2164756E21
@@ -1,13 +1,10 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/lib/state-paths.ts", "../src/lib/cloud-secrets.ts", "../src/lib/tts-debug.ts", "../src/lib/server-cloud-tts.ts"],
3
+ "sources": ["../src/lib/server-cloud-tts.ts"],
4
4
  "sourcesContent": [
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
- "/**\n * Sealed in-process secret store for cloud credentials.\n *\n * Cloud API keys are scrubbed from process.env after login and stored\n * here so they are not visible in environment dumps, child processes,\n * or /proc/self/environ.\n *\n * This module has NO external dependencies so it can be imported by\n * any module without pulling in host-layer packages.\n */\n\nconst _cloudSecrets: Record<string, string | undefined> = Object.create(null);\n\nObject.defineProperty(_cloudSecrets, Symbol.toStringTag, {\n value: \"CloudSecrets\",\n enumerable: false,\n});\n\n/**\n * Read a cloud secret without exposing it in process.env.\n * Falls back to process.env for backwards compatibility with code that\n * sets the key before this module loads (e.g. docker entrypoints).\n */\nexport function getCloudSecret(\n key: \"ELIZAOS_CLOUD_API_KEY\" | \"ELIZAOS_CLOUD_ENABLED\",\n): string | undefined {\n return _cloudSecrets[key] ?? process.env[key];\n}\n\n/** Scrub cloud secrets from process.env and capture into the sealed store. */\nexport function scrubCloudSecretsFromEnv(): void {\n for (const key of [\n \"ELIZAOS_CLOUD_API_KEY\",\n \"ELIZAOS_CLOUD_ENABLED\",\n ] as const) {\n if (process.env[key] !== undefined) {\n _cloudSecrets[key] = process.env[key];\n delete process.env[key];\n }\n }\n}\n\n/** Clear any sealed cloud secrets after an explicit disconnect. */\nexport function clearCloudSecrets(): void {\n for (const key of [\n \"ELIZAOS_CLOUD_API_KEY\",\n \"ELIZAOS_CLOUD_ENABLED\",\n ] as const) {\n delete _cloudSecrets[key];\n }\n}\n\n/** Reset the sealed secret store. Test-only. */\nexport function _resetCloudSecretsForTesting(): void {\n for (const key of Object.keys(_cloudSecrets)) {\n delete _cloudSecrets[key];\n }\n}\n",
7
- "function truthy(raw: string | undefined | null): boolean {\n if (raw == null) return false;\n const value = String(raw).trim().toLowerCase();\n return value === \"1\" || value === \"true\" || value === \"yes\" || value === \"on\";\n}\n\nfunction ttsDebugEnabled(): boolean {\n if (typeof process !== \"undefined\" && process.env) {\n if (truthy(process.env.ELIZA_TTS_DEBUG)) return true;\n }\n return false;\n}\n\nexport function isTtsDebugEnabled(): boolean {\n return ttsDebugEnabled();\n}\n\nexport function ttsDebugTextPreview(text: string, maxChars = 160): string {\n const singleLine = text.replace(/\\r?\\n/g, \"↵ \").replace(/\\s+/g, \" \").trim();\n if (singleLine.length <= maxChars) return singleLine;\n return `${singleLine.slice(0, maxChars)}…`;\n}\n\nexport function ttsDebug(\n phase: string,\n detail?: Record<string, unknown>,\n): void {\n if (!ttsDebugEnabled()) return;\n if (detail && Object.keys(detail).length > 0) {\n console.info(`[eliza][tts] ${phase}`, detail);\n } else {\n console.info(`[eliza][tts] ${phase}`);\n }\n}\n",
8
- "/**\n * Cloud TTS helpers — proxy to Eliza Cloud (`elizacloud.ai`).\n *\n * Upstream routes (see eliza-cloud-v2): `POST /api/v1/voice/tts` and legacy\n * `POST /api/elevenlabs/tts`. Both accept `{ text, voiceId?, modelId? }` with\n * **ElevenLabs** voice and model ids; the cloud runs ElevenLabs server-side.\n */\nimport fs from \"node:fs\";\nimport type http from \"node:http\";\nimport { isElizaCloudServiceSelectedInConfig, sanitizeSpeechText } from \"@elizaos/core\";\nimport { getCloudSecret } from \"./cloud-secrets\";\nimport { resolveConfigPath } from \"./state-paths\";\nimport { ttsDebug, ttsDebugTextPreview } from \"./tts-debug\";\n\n// ---------------------------------------------------------------------------\n// Internal helpers (not exported)\n// ---------------------------------------------------------------------------\n\ntype ConfigLike = Record<string, unknown> & {\n cloud?: {\n apiKey?: unknown;\n baseUrl?: unknown;\n };\n};\n\nfunction loadElizaConfig(): ConfigLike {\n const raw = fs.readFileSync(resolveConfigPath(), \"utf8\");\n const parsed = JSON.parse(raw) as unknown;\n return parsed && typeof parsed === \"object\" && !Array.isArray(parsed)\n ? (parsed as ConfigLike)\n : {};\n}\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 normalizeSecretEnvValue(value: string | undefined): string | null {\n const trimmed = value?.trim();\n if (!trimmed) {\n return null;\n }\n if (\n trimmed === \"REDACTED\" ||\n trimmed === \"[REDACTED]\" ||\n /^\\*+$/.test(trimmed)\n ) {\n return null;\n }\n return trimmed;\n}\n\n/** OpenAI-style names — not valid ElevenLabs `voiceId`; map to default voice. */\nconst OPENAI_STYLE_VOICE_ALIASES = new Set([\n \"alloy\",\n \"ash\",\n \"ballad\",\n \"coral\",\n \"echo\",\n \"nova\",\n \"sage\",\n \"shimmer\",\n \"verse\",\n]);\n\n/** Eliza Cloud default premade voice (matches eliza-cloud-v2 ElevenLabs service). */\nconst DEFAULT_ELIZA_CLOUD_TTS_VOICE_ID = \"EXAVITQu4vr4xnSDxMaL\";\nconst DEFAULT_ELIZA_CLOUD_TTS_MODEL_ID = \"eleven_flash_v2_5\";\n\n/** Matches `MAX_TEXT_LENGTH` in eliza-cloud-v2 `app/api/v1/voice/tts/route.ts`. */\nexport const ELIZA_CLOUD_TTS_MAX_TEXT_CHARS = 5000;\n\n/** Edge / Azure neural ids (e.g. `en-US-AriaNeural`) are not ElevenLabs `voiceId`s. */\nfunction isLikelyEdgeOrAzureNeuralVoiceId(raw: string): boolean {\n const t = raw.trim();\n return /^[a-z]{2}-[A-Z]{2}-/i.test(t) && /Neural$/i.test(t);\n}\n\nfunction normalizeElizaCloudVoiceId(raw: string): string {\n const trimmed = raw.trim();\n if (!trimmed) return DEFAULT_ELIZA_CLOUD_TTS_VOICE_ID;\n const lower = trimmed.toLowerCase();\n if (OPENAI_STYLE_VOICE_ALIASES.has(lower)) {\n return DEFAULT_ELIZA_CLOUD_TTS_VOICE_ID;\n }\n if (isLikelyEdgeOrAzureNeuralVoiceId(trimmed)) {\n return DEFAULT_ELIZA_CLOUD_TTS_VOICE_ID;\n }\n return trimmed;\n}\n\n/**\n * Resolve `voiceId` for Eliza Cloud TTS (ElevenLabs ids). OpenAI-style names\n * in the request are replaced with the default premade voice.\n */\nexport function resolveElizaCloudTtsVoiceId(\n bodyVoiceId: unknown,\n env: NodeJS.ProcessEnv = process.env,\n): string {\n if (typeof bodyVoiceId === \"string\" && bodyVoiceId.trim()) {\n return normalizeElizaCloudVoiceId(bodyVoiceId);\n }\n const envVoice = env.ELIZAOS_CLOUD_TTS_VOICE?.trim() ?? \"\";\n if (envVoice) {\n return normalizeElizaCloudVoiceId(envVoice);\n }\n return DEFAULT_ELIZA_CLOUD_TTS_VOICE_ID;\n}\n\nfunction resolveCloudApiKey(\n env: NodeJS.ProcessEnv = process.env,\n): string | null {\n const envKey = normalizeSecretEnvValue(env.ELIZAOS_CLOUD_API_KEY);\n if (envKey) {\n return envKey;\n }\n\n try {\n const config = loadElizaConfig();\n const configKey = normalizeSecretEnvValue(\n typeof config.cloud?.apiKey === \"string\"\n ? config.cloud.apiKey\n : undefined,\n );\n if (configKey) {\n return configKey;\n }\n } catch {\n // ignore config load errors and continue with secret store fallback\n }\n\n const sealedKey = normalizeSecretEnvValue(\n getCloudSecret(\"ELIZAOS_CLOUD_API_KEY\"),\n );\n if (sealedKey) {\n return sealedKey;\n }\n\n return null;\n}\n\nlet cachedCloudBaseUrlFromConfig: string | null | undefined;\nlet hasResolvedCloudBaseUrlFromConfig = false;\n\nexport function __resetCloudBaseUrlCache(): void {\n cachedCloudBaseUrlFromConfig = undefined;\n hasResolvedCloudBaseUrlFromConfig = false;\n}\n\nfunction resolveCloudBaseUrlFromConfig(): string | null {\n if (hasResolvedCloudBaseUrlFromConfig) {\n return cachedCloudBaseUrlFromConfig ?? null;\n }\n\n try {\n const config = loadElizaConfig();\n const raw =\n typeof config.cloud?.baseUrl === \"string\"\n ? config.cloud.baseUrl.trim()\n : \"\";\n cachedCloudBaseUrlFromConfig = raw.length > 0 ? raw : null;\n hasResolvedCloudBaseUrlFromConfig = true;\n return cachedCloudBaseUrlFromConfig;\n } catch {\n // On failure, remember that we attempted resolution to avoid repeated I/O.\n cachedCloudBaseUrlFromConfig = null;\n hasResolvedCloudBaseUrlFromConfig = true;\n return null;\n }\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\n/**\n * After a non-OK upstream response, only try the next URL for likely-transient /\n * wrong-route issues. Avoid retrying 401/402/429 etc. so we do not double-charge TTS.\n */\nexport function shouldRetryCloudTtsUpstream(status: number): boolean {\n return status === 404 || status === 502 || status === 503;\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\n/**\n * Coerce stored/configured values to an ElevenLabs model id Eliza Cloud accepts.\n * Maps OpenAI TTS ids and common copy-paste mistakes; passes through real `eleven_*` ids.\n */\nexport function normalizeElizaCloudTtsModelId(raw: string): string {\n const trimmed = raw.trim();\n if (!trimmed) return DEFAULT_ELIZA_CLOUD_TTS_MODEL_ID;\n const lower = trimmed.toLowerCase();\n if (OPENAI_STYLE_VOICE_ALIASES.has(lower)) {\n return DEFAULT_ELIZA_CLOUD_TTS_MODEL_ID;\n }\n if (/^gpt-/i.test(trimmed)) {\n return DEFAULT_ELIZA_CLOUD_TTS_MODEL_ID;\n }\n if (/^tts-1/i.test(trimmed)) {\n return DEFAULT_ELIZA_CLOUD_TTS_MODEL_ID;\n }\n if (/mini-tts/i.test(trimmed)) {\n return DEFAULT_ELIZA_CLOUD_TTS_MODEL_ID;\n }\n return trimmed;\n}\n\n/** Eliza Cloud TTS `modelId` (ElevenLabs), from body or env or default. */\nexport function resolveCloudProxyTtsModel(\n bodyModel: unknown,\n env: NodeJS.ProcessEnv = process.env,\n): string {\n const envModel = env.ELIZAOS_CLOUD_TTS_MODEL?.trim() ?? \"\";\n const raw =\n typeof bodyModel === \"string\" && bodyModel.trim() ? bodyModel.trim() : \"\";\n const chosen = raw || envModel;\n if (!chosen) return DEFAULT_ELIZA_CLOUD_TTS_MODEL_ID;\n return normalizeElizaCloudTtsModelId(chosen);\n}\n\n// ---------------------------------------------------------------------------\n// Exported Cloud TTS functions\n// ---------------------------------------------------------------------------\n\nexport function resolveElevenLabsApiKeyForCloudMode(\n env: NodeJS.ProcessEnv = process.env,\n): string | null {\n const directKey = normalizeSecretEnvValue(env.ELEVENLABS_API_KEY);\n if (directKey) {\n return directKey;\n }\n let configWantsCloudTts = false;\n try {\n configWantsCloudTts = isElizaCloudServiceSelectedInConfig(\n loadElizaConfig() as Record<string, unknown>,\n \"tts\",\n );\n } catch {\n configWantsCloudTts = false;\n }\n const cloudTtsEnabled =\n env.ELIZAOS_CLOUD_USE_TTS === \"true\" ||\n (env.ELIZAOS_CLOUD_USE_TTS === undefined && configWantsCloudTts);\n if (!cloudTtsEnabled) {\n return null;\n }\n if (env.ELIZA_CLOUD_TTS_DISABLED === \"true\") {\n return null;\n }\n return resolveCloudApiKey(env);\n}\n\nexport function ensureCloudTtsApiKeyAlias(\n env: NodeJS.ProcessEnv = process.env,\n): boolean {\n const directKey = normalizeSecretEnvValue(env.ELEVENLABS_API_KEY);\n if (directKey) {\n return false;\n }\n const cloudBackedKey = resolveElevenLabsApiKeyForCloudMode(env);\n if (!cloudBackedKey) {\n return false;\n }\n env.ELEVENLABS_API_KEY = cloudBackedKey;\n return true;\n}\n\nexport function resolveCloudTtsBaseUrl(\n env: NodeJS.ProcessEnv = process.env,\n): string {\n const fromEnv = env.ELIZAOS_CLOUD_BASE_URL?.trim() ?? \"\";\n const fromConfig =\n fromEnv.length > 0 ? null : resolveCloudBaseUrlFromConfig();\n const configured = fromEnv.length > 0 ? fromEnv : (fromConfig?.trim() ?? \"\");\n const fallback = \"https://www.elizacloud.ai/api/v1\";\n const base = configured.length > 0 ? configured : fallback;\n\n try {\n const parsed = new URL(base);\n let path = parsed.pathname.replace(/\\/+$/, \"\");\n if (!path || path === \"/\") {\n path = \"/api/v1\";\n }\n parsed.pathname = path;\n return parsed.toString().replace(/\\/$/, \"\");\n } catch {\n return fallback;\n }\n}\n\nexport function resolveCloudTtsCandidateUrls(\n env: NodeJS.ProcessEnv = process.env,\n): string[] {\n const base = resolveCloudTtsBaseUrl(env).replace(/\\/+$/, \"\");\n const candidates = new Set<string>();\n\n const addEndpointsForApiV1Base = (baseUrl: string): void => {\n const trimmed = baseUrl.replace(/\\/+$/, \"\");\n candidates.add(`${trimmed}/voice/tts`);\n try {\n const u = new URL(trimmed);\n const path = u.pathname.replace(/\\/+$/, \"\");\n if (path.endsWith(\"/api/v1\")) {\n // Preserve the ElevenLabs-shaped compat route; `/audio/speech` would\n // require OpenAI-style model/voice ids and is intentionally not used.\n candidates.add(`${u.origin}/api/elevenlabs/tts`);\n }\n } catch {\n /* ignore */\n }\n };\n\n addEndpointsForApiV1Base(base);\n try {\n const parsed = new URL(base);\n if (parsed.hostname.startsWith(\"www.\")) {\n parsed.hostname = parsed.hostname.slice(4);\n addEndpointsForApiV1Base(parsed.toString().replace(/\\/$/, \"\"));\n } else {\n parsed.hostname = `www.${parsed.hostname}`;\n addEndpointsForApiV1Base(parsed.toString().replace(/\\/$/, \"\"));\n }\n } catch {\n // no-op\n }\n\n return [...candidates];\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 = resolveCloudApiKey();\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\nexport function mirrorCompatHeaders(\n req: Pick<http.IncomingMessage, \"headers\">,\n): void {\n const HEADER_ALIASES = [\n [\"x-elizaos-token\", \"x-eliza-token\"],\n [\"x-elizaos-export-token\", \"x-eliza-export-token\"],\n [\"x-elizaos-client-id\", \"x-eliza-client-id\"],\n [\"x-elizaos-terminal-token\", \"x-eliza-terminal-token\"],\n [\"x-elizaos-ui-language\", \"x-eliza-ui-language\"],\n [\"x-elizaos-agent-action\", \"x-eliza-agent-action\"],\n ] as const;\n\n for (const [appHeader, elizaHeader] of HEADER_ALIASES) {\n const appValue = req.headers[appHeader];\n const elizaValue = req.headers[elizaHeader];\n\n if (appValue != null && elizaValue == null) {\n req.headers[elizaHeader] = appValue;\n }\n\n if (elizaValue != null && appValue == null) {\n req.headers[appHeader] = elizaValue;\n }\n }\n}\n"
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"
9
6
  ],
10
- "mappings": "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",
11
- "debugId": "6733258098F6092A64756E2164756E21",
7
+ "mappings": "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",
8
+ "debugId": "8E6B79F7D105205464756E2164756E21",
12
9
  "names": []
13
10
  }
@@ -1,4 +1,6 @@
1
- export declare function isTtsDebugEnabled(): boolean;
2
- export declare function ttsDebugTextPreview(text: string, maxChars?: number): string;
3
- export declare function ttsDebug(phase: string, detail?: Record<string, unknown>): void;
1
+ /**
2
+ * TTS debug logging. Implementation moved to
3
+ * `@elizaos/shared/elizacloud/tts-debug`.
4
+ */
5
+ export { isTtsDebugEnabled, ttsDebug, ttsDebugTextPreview } from "@elizaos/shared";
4
6
  //# sourceMappingURL=tts-debug.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tts-debug.d.ts","sourceRoot":"","sources":["../../src/lib/tts-debug.ts"],"names":[],"mappings":"AAaA,wBAAgB,iBAAiB,IAAI,OAAO,CAE3C;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,SAAM,GAAG,MAAM,CAIxE;AAED,wBAAgB,QAAQ,CACtB,KAAK,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,IAAI,CAON"}
1
+ {"version":3,"file":"tts-debug.d.ts","sourceRoot":"","sources":["../../src/lib/tts-debug.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC"}
@@ -15,43 +15,10 @@ var __export = (target, all) => {
15
15
  };
16
16
  var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
17
17
  var __require = /* @__PURE__ */ createRequire(import.meta.url);
18
-
19
- // src/lib/tts-debug.ts
20
- function truthy(raw) {
21
- if (raw == null)
22
- return false;
23
- const value = String(raw).trim().toLowerCase();
24
- return value === "1" || value === "true" || value === "yes" || value === "on";
25
- }
26
- function ttsDebugEnabled() {
27
- if (typeof process !== "undefined" && process.env) {
28
- if (truthy(process.env.ELIZA_TTS_DEBUG))
29
- return true;
30
- }
31
- return false;
32
- }
33
- function isTtsDebugEnabled() {
34
- return ttsDebugEnabled();
35
- }
36
- function ttsDebugTextPreview(text, maxChars = 160) {
37
- const singleLine = text.replace(/\r?\n/g, "↵ ").replace(/\s+/g, " ").trim();
38
- if (singleLine.length <= maxChars)
39
- return singleLine;
40
- return `${singleLine.slice(0, maxChars)}…`;
41
- }
42
- function ttsDebug(phase, detail) {
43
- if (!ttsDebugEnabled())
44
- return;
45
- if (detail && Object.keys(detail).length > 0) {
46
- console.info(`[eliza][tts] ${phase}`, detail);
47
- } else {
48
- console.info(`[eliza][tts] ${phase}`);
49
- }
50
- }
51
18
  export {
52
19
  ttsDebugTextPreview,
53
20
  ttsDebug,
54
21
  isTtsDebugEnabled
55
22
  };
56
23
 
57
- //# debugId=376622FFADD0F6E764756E2164756E21
24
+ //# debugId=11FA601D97731E0C64756E2164756E21
@@ -1,10 +1,9 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/lib/tts-debug.ts"],
3
+ "sources": [],
4
4
  "sourcesContent": [
5
- "function truthy(raw: string | undefined | null): boolean {\n if (raw == null) return false;\n const value = String(raw).trim().toLowerCase();\n return value === \"1\" || value === \"true\" || value === \"yes\" || value === \"on\";\n}\n\nfunction ttsDebugEnabled(): boolean {\n if (typeof process !== \"undefined\" && process.env) {\n if (truthy(process.env.ELIZA_TTS_DEBUG)) return true;\n }\n return false;\n}\n\nexport function isTtsDebugEnabled(): boolean {\n return ttsDebugEnabled();\n}\n\nexport function ttsDebugTextPreview(text: string, maxChars = 160): string {\n const singleLine = text.replace(/\\r?\\n/g, \"↵ \").replace(/\\s+/g, \" \").trim();\n if (singleLine.length <= maxChars) return singleLine;\n return `${singleLine.slice(0, maxChars)}…`;\n}\n\nexport function ttsDebug(\n phase: string,\n detail?: Record<string, unknown>,\n): void {\n if (!ttsDebugEnabled()) return;\n if (detail && Object.keys(detail).length > 0) {\n console.info(`[eliza][tts] ${phase}`, detail);\n } else {\n console.info(`[eliza][tts] ${phase}`);\n }\n}\n"
6
5
  ],
7
- "mappings": ";;;;;;;;;;;;;;;;;;;AAAA,SAAS,MAAM,CAAC,KAAyC;AAAA,EACvD,IAAI,OAAO;AAAA,IAAM,OAAO;AAAA,EACxB,MAAM,QAAQ,OAAO,GAAG,EAAE,KAAK,EAAE,YAAY;AAAA,EAC7C,OAAO,UAAU,OAAO,UAAU,UAAU,UAAU,SAAS,UAAU;AAAA;AAG3E,SAAS,eAAe,GAAY;AAAA,EAClC,IAAI,OAAO,YAAY,eAAe,QAAQ,KAAK;AAAA,IACjD,IAAI,OAAO,QAAQ,IAAI,eAAe;AAAA,MAAG,OAAO;AAAA,EAClD;AAAA,EACA,OAAO;AAAA;AAGF,SAAS,iBAAiB,GAAY;AAAA,EAC3C,OAAO,gBAAgB;AAAA;AAGlB,SAAS,mBAAmB,CAAC,MAAc,WAAW,KAAa;AAAA,EACxE,MAAM,aAAa,KAAK,QAAQ,UAAU,IAAG,EAAE,QAAQ,QAAQ,GAAG,EAAE,KAAK;AAAA,EACzE,IAAI,WAAW,UAAU;AAAA,IAAU,OAAO;AAAA,EAC1C,OAAO,GAAG,WAAW,MAAM,GAAG,QAAQ;AAAA;AAGjC,SAAS,QAAQ,CACtB,OACA,QACM;AAAA,EACN,IAAI,CAAC,gBAAgB;AAAA,IAAG;AAAA,EACxB,IAAI,UAAU,OAAO,KAAK,MAAM,EAAE,SAAS,GAAG;AAAA,IAC5C,QAAQ,KAAK,gBAAgB,SAAS,MAAM;AAAA,EAC9C,EAAO;AAAA,IACL,QAAQ,KAAK,gBAAgB,OAAO;AAAA;AAAA;",
8
- "debugId": "376622FFADD0F6E764756E2164756E21",
6
+ "mappings": "",
7
+ "debugId": "11FA601D97731E0C64756E2164756E21",
9
8
  "names": []
10
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;AAwDxE,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,CAyBnB;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,CAqIrB"}
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;AA2GxE,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,CAiJrB"}