@elizaos/plugin-elizacloud 2.0.0-beta.1 → 2.0.3-beta.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (338) 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 +2918 -5924
  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/backup.js +1 -1
  14. package/dist/cloud/backup.js.map +1 -1
  15. package/dist/cloud/base-url.d.ts +6 -2
  16. package/dist/cloud/base-url.d.ts.map +1 -1
  17. package/dist/cloud/base-url.js +3 -51
  18. package/dist/cloud/base-url.js.map +3 -3
  19. package/dist/cloud/bridge-client.d.ts +3 -3
  20. package/dist/cloud/bridge-client.d.ts.map +1 -1
  21. package/dist/cloud/bridge-client.js +3 -51
  22. package/dist/cloud/bridge-client.js.map +3 -3
  23. package/dist/cloud/clack-observer.d.ts +35 -0
  24. package/dist/cloud/clack-observer.d.ts.map +1 -0
  25. package/dist/cloud/clack-observer.js +143 -0
  26. package/dist/cloud/clack-observer.js.map +10 -0
  27. package/dist/cloud/cloud-api-key.js +1 -1
  28. package/dist/cloud/cloud-api-key.js.map +1 -1
  29. package/dist/cloud/cloud-manager.js +45 -92
  30. package/dist/cloud/cloud-manager.js.map +6 -6
  31. package/dist/cloud/cloud-proxy.js +1 -1
  32. package/dist/cloud/cloud-proxy.js.map +1 -1
  33. package/dist/cloud/cloud-wallet.js +2 -4835
  34. package/dist/cloud/cloud-wallet.js.map +3 -82
  35. package/dist/cloud/duffel-client.d.ts +181 -0
  36. package/dist/cloud/duffel-client.d.ts.map +1 -0
  37. package/dist/cloud/duffel-client.js +506 -0
  38. package/dist/cloud/duffel-client.js.map +11 -0
  39. package/dist/cloud/index.d.ts +6 -0
  40. package/dist/cloud/index.d.ts.map +1 -1
  41. package/dist/cloud/index.js +1782 -1
  42. package/dist/cloud/index.js.map +18 -3
  43. package/dist/cloud/lifeops-schedule-sync-client.d.ts +43 -0
  44. package/dist/cloud/lifeops-schedule-sync-client.d.ts.map +1 -0
  45. package/dist/cloud/lifeops-schedule-sync-client.js +180 -0
  46. package/dist/cloud/lifeops-schedule-sync-client.js.map +11 -0
  47. package/dist/cloud/lifeops-schedule-sync-contracts.d.ts +89 -0
  48. package/dist/cloud/lifeops-schedule-sync-contracts.d.ts.map +1 -0
  49. package/dist/cloud/lifeops-schedule-sync-contracts.js +39 -0
  50. package/dist/cloud/lifeops-schedule-sync-contracts.js.map +10 -0
  51. package/dist/cloud/managed-payment-clients.d.ts +166 -0
  52. package/dist/cloud/managed-payment-clients.d.ts.map +1 -0
  53. package/dist/cloud/managed-payment-clients.js +238 -0
  54. package/dist/cloud/managed-payment-clients.js.map +11 -0
  55. package/dist/cloud/null-observer.d.ts +35 -0
  56. package/dist/cloud/null-observer.d.ts.map +1 -0
  57. package/dist/cloud/null-observer.js +45 -0
  58. package/dist/cloud/null-observer.js.map +10 -0
  59. package/dist/cloud/reconnect.js +1 -1
  60. package/dist/cloud/reconnect.js.map +1 -1
  61. package/dist/cloud/setup-observer.d.ts +98 -0
  62. package/dist/cloud/setup-observer.d.ts.map +1 -0
  63. package/dist/cloud/setup-observer.js +2 -0
  64. package/dist/cloud/setup-observer.js.map +9 -0
  65. package/dist/cloud/validate-url.d.ts.map +1 -1
  66. package/dist/cloud/validate-url.js +2 -1
  67. package/dist/cloud/validate-url.js.map +3 -3
  68. package/dist/cloud/x402-payment-handler.d.ts +85 -0
  69. package/dist/cloud/x402-payment-handler.d.ts.map +1 -0
  70. package/dist/cloud/x402-payment-handler.js +119 -0
  71. package/dist/cloud/x402-payment-handler.js.map +10 -0
  72. package/dist/cloud-providers/cloud-status.js +1 -1
  73. package/dist/cloud-providers/cloud-status.js.map +1 -1
  74. package/dist/cloud-providers/container-health.js +1 -1
  75. package/dist/cloud-providers/container-health.js.map +1 -1
  76. package/dist/cloud-providers/credit-balance.js +1 -1
  77. package/dist/cloud-providers/credit-balance.js.map +1 -1
  78. package/dist/cloud-providers/index.js +1 -1
  79. package/dist/cloud-providers/index.js.map +1 -1
  80. package/dist/cloud-providers/model-registry.js +1 -1
  81. package/dist/cloud-providers/model-registry.js.map +1 -1
  82. package/dist/cloud-setup.d.ts +36 -0
  83. package/dist/cloud-setup.d.ts.map +1 -0
  84. package/dist/{onboarding.js → cloud-setup.js} +139 -139
  85. package/dist/cloud-setup.js.map +14 -0
  86. package/dist/cloud-voice-catalog.d.ts +65 -0
  87. package/dist/cloud-voice-catalog.d.ts.map +1 -0
  88. package/dist/cloud-voice-catalog.js +278 -0
  89. package/dist/cloud-voice-catalog.js.map +12 -0
  90. package/dist/index.browser.d.ts +11 -0
  91. package/dist/index.browser.d.ts.map +1 -1
  92. package/dist/index.d.ts +7 -1
  93. package/dist/index.d.ts.map +1 -1
  94. package/dist/index.js +5458 -8412
  95. package/dist/index.js.map +48 -116
  96. package/dist/index.node.d.ts +8 -1
  97. package/dist/index.node.d.ts.map +1 -1
  98. package/dist/init.js +17 -4
  99. package/dist/init.js.map +4 -4
  100. package/dist/lib/cloud-connection.d.ts +0 -1
  101. package/dist/lib/cloud-connection.d.ts.map +1 -1
  102. package/dist/lib/cloud-connection.js +14 -91
  103. package/dist/lib/cloud-connection.js.map +7 -7
  104. package/dist/lib/cloud-secrets.d.ts +5 -18
  105. package/dist/lib/cloud-secrets.d.ts.map +1 -1
  106. package/dist/lib/cloud-secrets.js +8 -36
  107. package/dist/lib/cloud-secrets.js.map +3 -3
  108. package/dist/lib/config-env.js +1 -1
  109. package/dist/lib/config-env.js.map +1 -1
  110. package/dist/lib/config-like.d.ts +1 -1
  111. package/dist/lib/config-like.d.ts.map +1 -1
  112. package/dist/lib/config-like.js +3 -3
  113. package/dist/lib/config-like.js.map +3 -3
  114. package/dist/lib/credential-type-map.d.ts +1 -1
  115. package/dist/lib/credential-type-map.js +1 -1
  116. package/dist/lib/credential-type-map.js.map +2 -2
  117. package/dist/lib/feature-flags.js +1 -1
  118. package/dist/lib/feature-flags.js.map +1 -1
  119. package/dist/lib/http.d.ts +0 -11
  120. package/dist/lib/http.d.ts.map +1 -1
  121. package/dist/lib/http.js +1 -1
  122. package/dist/lib/http.js.map +3 -3
  123. package/dist/lib/server-cloud-tts.d.ts +12 -25
  124. package/dist/lib/server-cloud-tts.d.ts.map +1 -1
  125. package/dist/lib/server-cloud-tts.js +31 -329
  126. package/dist/lib/server-cloud-tts.js.map +4 -7
  127. package/dist/lib/state-paths.js +1 -1
  128. package/dist/lib/state-paths.js.map +1 -1
  129. package/dist/lib/tts-debug.d.ts +5 -3
  130. package/dist/lib/tts-debug.d.ts.map +1 -1
  131. package/dist/lib/tts-debug.js +1 -34
  132. package/dist/lib/tts-debug.js.map +3 -4
  133. package/dist/models/embeddings.d.ts +7 -0
  134. package/dist/models/embeddings.d.ts.map +1 -1
  135. package/dist/models/embeddings.js +98 -73
  136. package/dist/models/embeddings.js.map +6 -6
  137. package/dist/models/image.d.ts.map +1 -1
  138. package/dist/models/image.js +42 -15
  139. package/dist/models/image.js.map +6 -6
  140. package/dist/models/index.js +719 -175
  141. package/dist/models/index.js.map +11 -12
  142. package/dist/models/research.d.ts.map +1 -1
  143. package/dist/models/research.js +24 -7
  144. package/dist/models/research.js.map +6 -6
  145. package/dist/models/speech.d.ts +61 -3
  146. package/dist/models/speech.d.ts.map +1 -1
  147. package/dist/models/speech.js +173 -17
  148. package/dist/models/speech.js.map +5 -5
  149. package/dist/models/text.d.ts +114 -1
  150. package/dist/models/text.d.ts.map +1 -1
  151. package/dist/models/text.js +481 -88
  152. package/dist/models/text.js.map +7 -8
  153. package/dist/models/tokenization.d.ts.map +1 -1
  154. package/dist/models/tokenization.js +1 -1
  155. package/dist/models/tokenization.js.map +3 -3
  156. package/dist/models/transcription.d.ts.map +1 -1
  157. package/dist/models/transcription.js +20 -6
  158. package/dist/models/transcription.js.map +5 -5
  159. package/dist/node/index.node.js +2872 -5847
  160. package/dist/node/index.node.js.map +47 -116
  161. package/dist/plugin.d.ts.map +1 -1
  162. package/dist/plugin.js +376 -5050
  163. package/dist/plugin.js.map +16 -92
  164. package/dist/providers/openai.js +11 -2
  165. package/dist/providers/openai.js.map +3 -3
  166. package/dist/register-routes.js +376 -5050
  167. package/dist/register-routes.js.map +16 -92
  168. package/dist/routes/cloud-billing-routes.d.ts.map +1 -1
  169. package/dist/routes/cloud-billing-routes.js +17 -60
  170. package/dist/routes/cloud-billing-routes.js.map +8 -7
  171. package/dist/routes/cloud-coding-container-routes.d.ts +8 -0
  172. package/dist/routes/cloud-coding-container-routes.d.ts.map +1 -0
  173. package/dist/routes/cloud-coding-container-routes.js +214 -0
  174. package/dist/routes/cloud-coding-container-routes.js.map +11 -0
  175. package/dist/routes/cloud-compat-routes.d.ts.map +1 -1
  176. package/dist/routes/cloud-compat-routes.js +17 -60
  177. package/dist/routes/cloud-compat-routes.js.map +8 -7
  178. package/dist/routes/cloud-features-routes.js +2 -2
  179. package/dist/routes/cloud-features-routes.js.map +4 -4
  180. package/dist/routes/cloud-provisioning.js +1 -1
  181. package/dist/routes/cloud-provisioning.js.map +1 -1
  182. package/dist/routes/cloud-relay-routes.d.ts +2 -1
  183. package/dist/routes/cloud-relay-routes.d.ts.map +1 -1
  184. package/dist/routes/cloud-relay-routes.js +84 -2
  185. package/dist/routes/cloud-relay-routes.js.map +5 -4
  186. package/dist/routes/cloud-routes-autonomous.d.ts +3 -4
  187. package/dist/routes/cloud-routes-autonomous.d.ts.map +1 -1
  188. package/dist/routes/cloud-routes-autonomous.js +11 -4893
  189. package/dist/routes/cloud-routes-autonomous.js.map +8 -87
  190. package/dist/routes/cloud-routes.d.ts +2 -2
  191. package/dist/routes/cloud-routes.d.ts.map +1 -1
  192. package/dist/routes/cloud-routes.js +343 -5058
  193. package/dist/routes/cloud-routes.js.map +13 -90
  194. package/dist/routes/cloud-status-routes-autonomous.d.ts +1 -2
  195. package/dist/routes/cloud-status-routes-autonomous.d.ts.map +1 -1
  196. package/dist/routes/cloud-status-routes-autonomous.js +4 -51
  197. package/dist/routes/cloud-status-routes-autonomous.js.map +5 -5
  198. package/dist/routes/cloud-status-routes.js +14 -90
  199. package/dist/routes/cloud-status-routes.js.map +7 -7
  200. package/dist/routes/home-remote-runner-access-url.d.ts +16 -0
  201. package/dist/routes/home-remote-runner-access-url.d.ts.map +1 -0
  202. package/dist/routes/home-remote-runner-access-url.js +91 -0
  203. package/dist/routes/home-remote-runner-access-url.js.map +10 -0
  204. package/dist/routes/travel-provider-relay-routes.d.ts +9 -0
  205. package/dist/routes/travel-provider-relay-routes.d.ts.map +1 -0
  206. package/dist/routes/travel-provider-relay-routes.js +358 -0
  207. package/dist/routes/travel-provider-relay-routes.js.map +14 -0
  208. package/dist/services/cloud-auth.d.ts +1 -1
  209. package/dist/services/cloud-auth.d.ts.map +1 -1
  210. package/dist/services/cloud-auth.js +7 -2
  211. package/dist/services/cloud-auth.js.map +4 -4
  212. package/dist/services/cloud-backup.js +1 -1
  213. package/dist/services/cloud-backup.js.map +3 -3
  214. package/dist/services/cloud-bootstrap.d.ts.map +1 -1
  215. package/dist/services/cloud-bootstrap.js +1 -1
  216. package/dist/services/cloud-bootstrap.js.map +3 -3
  217. package/dist/services/cloud-bridge.js +1 -1
  218. package/dist/services/cloud-bridge.js.map +4 -4
  219. package/dist/services/cloud-container.d.ts +5 -1
  220. package/dist/services/cloud-container.d.ts.map +1 -1
  221. package/dist/services/cloud-container.js +52 -1
  222. package/dist/services/cloud-container.js.map +4 -4
  223. package/dist/services/cloud-credential-provider.js +1 -1
  224. package/dist/services/cloud-credential-provider.js.map +3 -3
  225. package/dist/services/cloud-managed-gateway-relay.js +1 -1
  226. package/dist/services/cloud-managed-gateway-relay.js.map +1 -1
  227. package/dist/services/cloud-model-registry.js +1 -1
  228. package/dist/services/cloud-model-registry.js.map +3 -3
  229. package/dist/services/index.js +1 -1
  230. package/dist/services/index.js.map +1 -1
  231. package/dist/types/cloud.d.ts +1 -0
  232. package/dist/types/cloud.d.ts.map +1 -1
  233. package/dist/types/cloud.js +1 -1
  234. package/dist/types/cloud.js.map +3 -3
  235. package/dist/types/index.d.ts +1 -1
  236. package/dist/types/index.d.ts.map +1 -1
  237. package/dist/types/index.js +1 -1
  238. package/dist/types/index.js.map +1 -1
  239. package/dist/utils/cloud-api.js +1 -1
  240. package/dist/utils/cloud-api.js.map +1 -1
  241. package/dist/utils/cloud-sdk/client.d.ts.map +1 -1
  242. package/dist/utils/cloud-sdk/client.js +136 -4
  243. package/dist/utils/cloud-sdk/client.js.map +5 -5
  244. package/dist/utils/cloud-sdk/http.js +1 -1
  245. package/dist/utils/cloud-sdk/http.js.map +2 -2
  246. package/dist/utils/cloud-sdk/index.js +1 -1
  247. package/dist/utils/cloud-sdk/index.js.map +1 -1
  248. package/dist/utils/cloud-sdk/public-routes.d.ts +186 -0
  249. package/dist/utils/cloud-sdk/public-routes.d.ts.map +1 -1
  250. package/dist/utils/cloud-sdk/public-routes.js +99 -1
  251. package/dist/utils/cloud-sdk/public-routes.js.map +3 -3
  252. package/dist/utils/cloud-sdk/types.d.ts +0 -2
  253. package/dist/utils/cloud-sdk/types.d.ts.map +1 -1
  254. package/dist/utils/cloud-sdk/types.js +1 -1
  255. package/dist/utils/cloud-sdk/types.js.map +2 -2
  256. package/dist/utils/config.d.ts +10 -1
  257. package/dist/utils/config.d.ts.map +1 -1
  258. package/dist/utils/config.js +12 -2
  259. package/dist/utils/config.js.map +3 -3
  260. package/dist/utils/events.d.ts +23 -2
  261. package/dist/utils/events.d.ts.map +1 -1
  262. package/dist/utils/events.js +5 -3
  263. package/dist/utils/events.js.map +3 -3
  264. package/dist/utils/helpers.js +1 -1
  265. package/dist/utils/helpers.js.map +1 -1
  266. package/dist/utils/responses-output.js +1 -1
  267. package/dist/utils/responses-output.js.map +1 -1
  268. package/dist/utils/sdk-client.d.ts.map +1 -1
  269. package/dist/utils/sdk-client.js +17 -4
  270. package/dist/utils/sdk-client.js.map +4 -4
  271. package/dist/utils/waifu-metering.d.ts +108 -0
  272. package/dist/utils/waifu-metering.d.ts.map +1 -0
  273. package/dist/utils/waifu-metering.js +166 -0
  274. package/dist/utils/waifu-metering.js.map +10 -0
  275. package/package.json +52 -22
  276. package/registry-entry.json +208 -0
  277. package/src/cloud/auth-service-types.ts +24 -0
  278. package/src/cloud/base-url.ts +6 -62
  279. package/src/cloud/clack-observer.ts +189 -0
  280. package/src/cloud/duffel-client.ts +847 -0
  281. package/src/cloud/index.ts +10 -0
  282. package/src/cloud/lifeops-schedule-sync-client.ts +245 -0
  283. package/src/cloud/lifeops-schedule-sync-contracts.ts +124 -0
  284. package/src/cloud/managed-payment-clients.ts +374 -0
  285. package/src/cloud/null-observer.ts +45 -0
  286. package/src/cloud/setup-observer.ts +125 -0
  287. package/src/cloud/validate-url.ts +7 -1
  288. package/src/cloud/x402-payment-handler.ts +215 -0
  289. package/src/cloud-setup.ts +531 -0
  290. package/src/cloud-voice-catalog.test.ts +254 -0
  291. package/src/cloud-voice-catalog.ts +246 -0
  292. package/src/index.browser.ts +29 -0
  293. package/src/index.node.ts +31 -1
  294. package/src/index.ts +81 -4
  295. package/src/lib/cloud-connection.ts +2 -4
  296. package/src/lib/cloud-secrets.ts +10 -54
  297. package/src/lib/config-like.ts +1 -1
  298. package/src/lib/credential-type-map.ts +2 -2
  299. package/src/lib/http.ts +0 -17
  300. package/src/lib/server-cloud-tts.ts +33 -341
  301. package/src/lib/tts-debug.ts +5 -34
  302. package/src/models/embeddings.ts +187 -78
  303. package/src/models/image.ts +29 -14
  304. package/src/models/research.ts +11 -1
  305. package/src/models/speech.ts +269 -23
  306. package/src/models/text.ts +756 -114
  307. package/src/models/tokenization.ts +2 -2
  308. package/src/models/transcription.ts +7 -3
  309. package/src/plugin.ts +38 -0
  310. package/src/routes/cloud-billing-routes.ts +4 -14
  311. package/src/routes/cloud-coding-container-routes.ts +198 -0
  312. package/src/routes/cloud-compat-routes.ts +4 -14
  313. package/src/routes/cloud-features-routes.ts +1 -1
  314. package/src/routes/cloud-relay-routes.ts +47 -1
  315. package/src/routes/cloud-routes-autonomous.ts +7 -10
  316. package/src/routes/cloud-routes.ts +68 -7
  317. package/src/routes/cloud-status-routes-autonomous.ts +6 -2
  318. package/src/routes/home-remote-runner-access-url.ts +83 -0
  319. package/src/routes/travel-provider-relay-routes.ts +193 -0
  320. package/src/services/cloud-auth.ts +9 -2
  321. package/src/services/cloud-bootstrap.ts +1 -3
  322. package/src/services/cloud-bridge.ts +1 -1
  323. package/src/services/cloud-container.ts +93 -0
  324. package/src/services/cloud-credential-provider.ts +1 -1
  325. package/src/services/cloud-model-registry.ts +1 -1
  326. package/src/types/cloud.ts +22 -0
  327. package/src/types/index.ts +19 -0
  328. package/src/utils/cloud-sdk/client.ts +42 -3
  329. package/src/utils/cloud-sdk/public-routes.ts +168 -0
  330. package/src/utils/cloud-sdk/types.ts +0 -2
  331. package/src/utils/config.ts +20 -1
  332. package/src/utils/events.ts +30 -2
  333. package/src/utils/sdk-client.ts +5 -1
  334. package/src/utils/waifu-metering.ts +302 -0
  335. package/dist/onboarding.d.ts +0 -35
  336. package/dist/onboarding.d.ts.map +0 -1
  337. package/dist/onboarding.js.map +0 -14
  338. package/src/onboarding.ts +0 -396
@@ -221,6 +221,45 @@ class CloudContainerService extends Service {
221
221
  const client = this.getClient();
222
222
  return client.get(`/containers/${containerId}/health`);
223
223
  }
224
+ async promoteVfsToCloudContainer(request) {
225
+ if (!this.isAuthenticated()) {
226
+ throw cloudCodingUnavailable("Cloud auth is not connected");
227
+ }
228
+ try {
229
+ return await this.getClient().post("/coding-containers/promotions", request);
230
+ } catch (error) {
231
+ if (isMissingCloudCodingEndpoint(error)) {
232
+ throw cloudCodingUnavailable("Eliza Cloud coding-container promotion endpoint is not deployed yet");
233
+ }
234
+ throw error;
235
+ }
236
+ }
237
+ async requestCodingAgentContainer(request) {
238
+ if (!this.isAuthenticated()) {
239
+ throw cloudCodingUnavailable("Cloud auth is not connected");
240
+ }
241
+ try {
242
+ return await this.getClient().post("/coding-containers", request);
243
+ } catch (error) {
244
+ if (isMissingCloudCodingEndpoint(error)) {
245
+ throw cloudCodingUnavailable("Eliza Cloud coding-container endpoint is not deployed yet");
246
+ }
247
+ throw error;
248
+ }
249
+ }
250
+ async syncCodingContainerChanges(containerId, request) {
251
+ if (!this.isAuthenticated()) {
252
+ throw cloudCodingUnavailable("Cloud auth is not connected");
253
+ }
254
+ try {
255
+ return await this.getClient().post(`/coding-containers/${encodeURIComponent(containerId)}/sync`, request);
256
+ } catch (error) {
257
+ if (isMissingCloudCodingEndpoint(error)) {
258
+ throw cloudCodingUnavailable("Eliza Cloud coding-container sync endpoint is not deployed yet");
259
+ }
260
+ throw error;
261
+ }
262
+ }
224
263
  getTrackedContainers() {
225
264
  return Array.from(this.tracked.values()).map((t) => t.container);
226
265
  }
@@ -233,9 +272,21 @@ class CloudContainerService extends Service {
233
272
  getContainerUrl(containerId) {
234
273
  return this.tracked.get(containerId)?.container.load_balancer_url ?? null;
235
274
  }
275
+ isAuthenticated() {
276
+ return this.authService?.isAuthenticated?.() === true;
277
+ }
278
+ }
279
+ function isMissingCloudCodingEndpoint(error) {
280
+ const statusCode = typeof error?.statusCode === "number" ? error.statusCode : undefined;
281
+ return statusCode === 404 || statusCode === 501;
282
+ }
283
+ function cloudCodingUnavailable(message) {
284
+ const error = new Error(message);
285
+ error.statusCode = 503;
286
+ return error;
236
287
  }
237
288
  export {
238
289
  CloudContainerService
239
290
  };
240
291
 
241
- //# debugId=AB03C756166CD3A464756E2164756E21
292
+ //# debugId=20249C84B1785B0864756E2164756E21
@@ -2,10 +2,10 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/types/cloud.ts", "../src/services/cloud-container.ts"],
4
4
  "sourcesContent": [
5
- "/**\n * Cloud-specific types for ElizaCloud integration.\n *\n * These types mirror the eliza-cloud-v2 database schemas and API contracts\n * for containers, auth, credits, bridge messaging, and agent state snapshots.\n */\n\n// ─── Container Types ────────────────────────────────────────────────────────\n\nexport type ContainerStatus =\n | \"pending\"\n | \"building\"\n | \"deploying\"\n | \"running\"\n | \"stopped\"\n | \"failed\"\n | \"suspended\";\n\nexport type ContainerBillingStatus =\n | \"active\"\n | \"warning\"\n | \"suspended\"\n | \"shutdown_pending\"\n | \"archived\";\n\nexport type ContainerArchitecture = \"arm64\" | \"x86_64\";\n\nexport interface CloudContainer {\n id: string;\n name: string;\n project_name: string;\n description: string | null;\n organization_id: string;\n user_id: string;\n status: ContainerStatus;\n image_tag: string | null;\n port: number;\n desired_count: number;\n cpu: number;\n memory: number;\n architecture: ContainerArchitecture;\n environment_vars: Record<string, string>;\n health_check_path: string;\n load_balancer_url: string | null;\n ecr_repository_uri: string | null;\n ecr_image_tag: string | null;\n cloudformation_stack_name: string | null;\n billing_status: ContainerBillingStatus;\n total_billed: string;\n last_deployed_at: string | null;\n last_health_check: string | null;\n deployment_log: string | null;\n error_message: string | null;\n metadata: Record<string, unknown>;\n created_at: string;\n updated_at: string;\n}\n\nexport interface CreateContainerRequest {\n name: string;\n project_name: string;\n description?: string;\n port?: number;\n desired_count?: number;\n cpu?: number;\n memory?: number;\n environment_vars?: Record<string, string>;\n health_check_path?: string;\n ecr_image_uri: string;\n ecr_repository_uri?: string;\n image_tag?: string;\n architecture?: ContainerArchitecture;\n}\n\nexport interface CreateContainerResponse {\n success: boolean;\n data: CloudContainer;\n message: string;\n creditsDeducted: number;\n creditsRemaining: number;\n stackName: string;\n polling: {\n endpoint: string;\n intervalMs: number;\n expectedDurationMs: number;\n };\n}\n\nexport interface ContainerListResponse {\n success: boolean;\n data: CloudContainer[];\n}\n\nexport interface ContainerGetResponse {\n success: boolean;\n data: CloudContainer;\n}\n\nexport interface ContainerDeleteResponse {\n success: boolean;\n message?: string;\n}\n\nexport interface ContainerHealthResponse {\n success: boolean;\n data: {\n status: string;\n healthy: boolean;\n lastCheck: string | null;\n uptime: number | null;\n };\n}\n\n// ─── Auth Types ─────────────────────────────────────────────────────────────\n\nexport type DevicePlatform = \"ios\" | \"android\" | \"macos\" | \"windows\" | \"linux\" | \"web\";\n\nexport interface DeviceAuthRequest {\n deviceId: string;\n platform: DevicePlatform;\n appVersion: string;\n deviceName?: string;\n}\n\nexport interface DeviceAuthResponse {\n success: boolean;\n data: {\n apiKey: string;\n userId: string;\n organizationId: string;\n credits: number;\n isNew: boolean;\n };\n}\n\nexport interface CloudCredentials {\n apiKey: string;\n userId: string;\n organizationId: string;\n authenticatedAt: number;\n}\n\n// ─── Credits Types ──────────────────────────────────────────────────────────\n\nexport interface CreditBalanceResponse {\n success: boolean;\n data: {\n balance: number;\n currency: string;\n };\n}\n\nexport interface CreditSummaryResponse {\n success: boolean;\n data: {\n balance: number;\n totalSpent: number;\n totalAdded: number;\n recentTransactions: CreditTransaction[];\n };\n}\n\nexport interface CreditTransaction {\n id: string;\n amount: number;\n description: string;\n type: \"credit\" | \"debit\";\n created_at: string;\n}\n\n// ─── Bridge Types ───────────────────────────────────────────────────────────\n\nexport type BridgeConnectionState = \"disconnected\" | \"connecting\" | \"connected\" | \"reconnecting\";\n\nexport interface BridgeMessage {\n jsonrpc: \"2.0\";\n id?: string | number;\n method?: string;\n params?: Record<string, unknown>;\n result?: unknown;\n error?: BridgeError;\n}\n\nexport interface BridgeError {\n code: number;\n message: string;\n data?: unknown;\n}\n\nexport type BridgeMessageHandler = (message: BridgeMessage) => void;\n\nexport interface BridgeConnection {\n containerId: string;\n state: BridgeConnectionState;\n connectedAt: number | null;\n lastHeartbeat: number | null;\n reconnectAttempts: number;\n}\n\n// ─── Managed Gateway Relay Types ───────────────────────────────────────────\n\nexport interface GatewayRelaySession {\n id: string;\n organizationId: string;\n userId: string;\n runtimeAgentId: string;\n agentName: string | null;\n platform: \"local-runtime\";\n createdAt: string;\n lastSeenAt: string;\n}\n\nexport interface GatewayRelayRequest {\n jsonrpc: \"2.0\";\n id?: string | number;\n method: string;\n params?: Record<string, unknown>;\n}\n\nexport interface GatewayRelayResponse {\n jsonrpc: \"2.0\";\n id?: string | number;\n result?: Record<string, unknown>;\n error?: BridgeError;\n}\n\nexport interface GatewayRelayRequestEnvelope {\n requestId: string;\n rpc: GatewayRelayRequest;\n queuedAt: string;\n}\n\nexport interface RegisterGatewayRelaySessionResponse {\n success: boolean;\n data: {\n session: GatewayRelaySession;\n };\n}\n\nexport interface PollGatewayRelayResponse {\n success: boolean;\n data: {\n request: GatewayRelayRequestEnvelope | null;\n };\n}\n\n// ─── Snapshot / Backup Types ────────────────────────────────────────────────\n\nexport type SnapshotType = \"manual\" | \"auto\" | \"pre-eviction\";\n\nexport interface AgentSnapshot {\n id: string;\n containerId: string;\n organizationId: string;\n snapshotType: SnapshotType;\n storageUrl: string;\n sizeBytes: number;\n agentConfig: Record<string, unknown>;\n metadata: Record<string, unknown>;\n created_at: string;\n}\n\nexport interface CreateSnapshotRequest {\n snapshotType?: SnapshotType;\n metadata?: Record<string, unknown>;\n}\n\nexport interface CreateSnapshotResponse {\n success: boolean;\n data: AgentSnapshot;\n}\n\nexport interface SnapshotListResponse {\n success: boolean;\n data: AgentSnapshot[];\n}\n\nexport interface RestoreSnapshotRequest {\n snapshotId: string;\n}\n\nexport interface RestoreSnapshotResponse {\n success: boolean;\n message: string;\n}\n\n// ─── Cloud Config Types ─────────────────────────────────────────────────────\n\nexport type InferenceMode = \"cloud\" | \"byok\" | \"local\";\n\nexport interface CloudPluginConfig {\n /** Enable ElizaCloud integration. */\n enabled: boolean;\n /** ElizaCloud API base URL. */\n baseUrl: string;\n /** Stored API key for authenticated requests. */\n apiKey?: string;\n /** Device ID used for auto-signup authentication. */\n deviceId?: string;\n /** Platform identifier. */\n platform?: DevicePlatform;\n /** Inference mode: cloud (ElizaCloud proxied), byok (user keys), local (no cloud). */\n inferenceMode: InferenceMode;\n /** Auto-deploy agents to cloud on creation. */\n autoProvision: boolean;\n /** Bridge reconnection settings. */\n bridge: {\n reconnectIntervalMs: number;\n maxReconnectAttempts: number;\n heartbeatIntervalMs: number;\n };\n /** Auto-backup settings. */\n backup: {\n autoBackupIntervalMs: number;\n maxSnapshots: number;\n };\n /** Default container settings for new deployments. */\n container: {\n defaultImage: string;\n defaultArchitecture: ContainerArchitecture;\n defaultCpu: number;\n defaultMemory: number;\n defaultPort: number;\n };\n}\n\nexport const DEFAULT_CLOUD_CONFIG: CloudPluginConfig = {\n enabled: false,\n baseUrl: \"https://www.elizacloud.ai/api/v1\",\n inferenceMode: \"cloud\",\n autoProvision: false,\n bridge: {\n reconnectIntervalMs: 3000,\n maxReconnectAttempts: 20,\n heartbeatIntervalMs: 30_000,\n },\n backup: {\n autoBackupIntervalMs: 3_600_000, // 1 hour\n maxSnapshots: 10,\n },\n container: {\n defaultImage: \"elizaos/agent:latest\",\n defaultArchitecture: \"arm64\",\n defaultCpu: 1792,\n defaultMemory: 1792,\n defaultPort: 3000,\n },\n};\n\n// ─── API Error Types ────────────────────────────────────────────────────────\n\nexport type { CloudApiErrorBody } from \"@elizaos/cloud-sdk\";\nexport {\n CloudApiError,\n InsufficientCreditsError,\n} from \"@elizaos/cloud-sdk\";\n",
6
- "/**\n * CloudContainerService — Manages container lifecycle through ElizaCloud API.\n *\n * Handles creation, listing, status polling, health monitoring, and deletion\n * of ECS-backed containers. Deployments are async (CloudFormation takes 8-12\n * minutes), so `waitForDeployment` polls with exponential backoff.\n */\n\nimport { type IAgentRuntime, logger, Service } from \"@elizaos/core\";\nimport type {\n CloudContainer,\n ContainerDeleteResponse,\n ContainerGetResponse,\n ContainerHealthResponse,\n ContainerListResponse,\n CreateContainerRequest,\n CreateContainerResponse,\n} from \"../types/cloud\";\nimport { DEFAULT_CLOUD_CONFIG } from \"../types/cloud\";\nimport type { CloudApiClient } from \"../utils/cloud-api\";\nimport type { CloudAuthService } from \"./cloud-auth\";\n\n/** Active containers tracked locally for quick access. */\ninterface TrackedContainer {\n container: CloudContainer;\n pollingTimer: ReturnType<typeof setTimeout> | null;\n healthTimer: ReturnType<typeof setInterval> | null;\n}\n\nexport class CloudContainerService extends Service {\n static serviceType = \"CLOUD_CONTAINER\";\n capabilityDescription = \"ElizaCloud container provisioning and lifecycle management\";\n\n private authService!: CloudAuthService;\n private readonly containerDefaults = DEFAULT_CLOUD_CONFIG.container;\n private tracked: Map<string, TrackedContainer> = new Map();\n\n static async start(runtime: IAgentRuntime): Promise<Service> {\n const service = new CloudContainerService(runtime);\n await service.initialize();\n return service;\n }\n\n async stop(): Promise<void> {\n for (const [, tracked] of this.tracked) {\n if (tracked.pollingTimer) clearTimeout(tracked.pollingTimer);\n if (tracked.healthTimer) clearInterval(tracked.healthTimer);\n }\n this.tracked.clear();\n }\n\n private async initialize(): Promise<void> {\n // Get auth service reference\n const auth = this.runtime.getService(\"CLOUD_AUTH\");\n if (!auth) {\n logger.debug(\n \"[CloudContainer] CloudAuthService not available, container operations will fail\"\n );\n return;\n }\n this.authService = auth as CloudAuthService;\n\n // Load existing containers\n if (this.authService.isAuthenticated()) {\n const containers = await this.listContainers();\n for (const container of containers) {\n this.tracked.set(container.id, {\n container,\n pollingTimer: null,\n healthTimer: null,\n });\n\n // Resume polling for containers that are still deploying\n if (\n container.status === \"pending\" ||\n container.status === \"building\" ||\n container.status === \"deploying\"\n ) {\n this.startPolling(container.id);\n }\n\n // Start health monitoring for running containers\n if (container.status === \"running\") {\n this.startHealthMonitoring(container.id);\n }\n }\n logger.info(`[CloudContainer] Loaded ${containers.length} existing container(s)`);\n }\n }\n\n private getClient(): CloudApiClient {\n return this.authService.getClient();\n }\n\n // ─── CRUD ───────────────────────────────────────────────────────────────\n\n async createContainer(request: CreateContainerRequest): Promise<CreateContainerResponse> {\n const client = this.getClient();\n const defaults = this.containerDefaults;\n\n const payload: Record<string, unknown> = {\n name: request.name,\n project_name: request.project_name,\n description: request.description,\n port: request.port ?? defaults.defaultPort,\n desired_count: request.desired_count ?? 1,\n cpu: request.cpu ?? defaults.defaultCpu,\n memory: request.memory ?? defaults.defaultMemory,\n environment_vars: request.environment_vars ?? {},\n health_check_path: request.health_check_path ?? \"/health\",\n ecr_image_uri: request.ecr_image_uri,\n ecr_repository_uri: request.ecr_repository_uri,\n image_tag: request.image_tag,\n architecture: request.architecture ?? defaults.defaultArchitecture,\n };\n\n const response = await client.post<CreateContainerResponse>(\"/containers\", payload);\n\n // Track the new container\n this.tracked.set(response.data.id, {\n container: response.data,\n pollingTimer: null,\n healthTimer: null,\n });\n\n // Start polling for deployment completion\n this.startPolling(response.data.id);\n\n logger.info(\n `[CloudContainer] Created container \"${request.name}\" (id=${response.data.id}, stack=${response.stackName})`\n );\n\n return response;\n }\n\n async listContainers(): Promise<CloudContainer[]> {\n const client = this.getClient();\n const response = await client.get<ContainerListResponse>(\"/containers\");\n return response.data;\n }\n\n async getContainer(containerId: string): Promise<CloudContainer> {\n const client = this.getClient();\n const response = await client.get<ContainerGetResponse>(`/containers/${containerId}`);\n\n // Update local tracking\n const existing = this.tracked.get(containerId);\n if (existing) {\n existing.container = response.data;\n }\n\n return response.data;\n }\n\n async deleteContainer(containerId: string): Promise<void> {\n const client = this.getClient();\n await client.delete<ContainerDeleteResponse>(`/containers/${containerId}`);\n\n // Stop tracking\n const tracked = this.tracked.get(containerId);\n if (tracked) {\n if (tracked.pollingTimer) clearTimeout(tracked.pollingTimer);\n if (tracked.healthTimer) clearInterval(tracked.healthTimer);\n this.tracked.delete(containerId);\n }\n\n logger.info(`[CloudContainer] Deleted container ${containerId}`);\n }\n\n // ─── Deployment Polling ────────────────────────────────────────────────\n\n /**\n * Poll container status until it reaches a terminal state (running, failed, stopped).\n * Uses exponential backoff: 5s, 10s, 20s, 30s, 30s, ...\n */\n private startPolling(containerId: string): void {\n const tracked = this.tracked.get(containerId);\n if (!tracked) return;\n\n let attempt = 0;\n const maxAttempts = 120; // ~1 hour with backoff\n const baseInterval = 5_000;\n const maxInterval = 30_000;\n\n const poll = async () => {\n attempt++;\n if (attempt > maxAttempts) {\n logger.error(\n `[CloudContainer] Polling timed out for container ${containerId} after ${maxAttempts} attempts`\n );\n return;\n }\n\n const container = await this.getContainer(containerId);\n const status = container.status;\n\n logger.debug(`[CloudContainer] Poll #${attempt} for ${containerId}: status=${status}`);\n\n if (status === \"running\") {\n logger.info(\n `[CloudContainer] Container ${containerId} is now running at ${container.load_balancer_url}`\n );\n this.startHealthMonitoring(containerId);\n return;\n }\n\n if (status === \"failed\" || status === \"stopped\" || status === \"suspended\") {\n logger.warn(`[CloudContainer] Container ${containerId} reached terminal state: ${status}`);\n if (container.error_message) {\n logger.error(`[CloudContainer] Error: ${container.error_message}`);\n }\n return;\n }\n\n // Schedule next poll with exponential backoff\n const delay = Math.min(baseInterval * 2 ** Math.min(attempt - 1, 3), maxInterval);\n tracked.pollingTimer = setTimeout(poll, delay);\n };\n\n tracked.pollingTimer = setTimeout(poll, baseInterval);\n }\n\n /**\n * Wait for a container to reach \"running\" status. Returns the updated container.\n * This is the synchronous API for actions that need to block.\n */\n async waitForDeployment(containerId: string, timeoutMs = 900_000): Promise<CloudContainer> {\n const deadline = Date.now() + timeoutMs;\n let interval = 5_000;\n const maxInterval = 30_000;\n\n while (Date.now() < deadline) {\n const container = await this.getContainer(containerId);\n\n if (container.status === \"running\") return container;\n if (container.status === \"failed\") {\n throw new Error(\n `Container deployment failed: ${container.error_message ?? \"unknown error\"}`\n );\n }\n if (container.status === \"stopped\" || container.status === \"suspended\") {\n throw new Error(`Container reached terminal state: ${container.status}`);\n }\n\n await new Promise((resolve) => setTimeout(resolve, interval));\n interval = Math.min(interval * 1.5, maxInterval);\n }\n\n throw new Error(`Container deployment timed out after ${Math.round(timeoutMs / 1000)}s`);\n }\n\n // ─── Health Monitoring ─────────────────────────────────────────────────\n\n private startHealthMonitoring(containerId: string): void {\n const tracked = this.tracked.get(containerId);\n if (!tracked || tracked.healthTimer) return;\n\n const interval = 60_000; // Check every 60 seconds\n\n tracked.healthTimer = setInterval(() => {\n this.getContainerHealth(containerId)\n .then((health) => {\n if (!health.data.healthy) {\n logger.warn(\n `[CloudContainer] Container ${containerId} unhealthy: ${health.data.status}`\n );\n }\n })\n .catch((err: Error) => {\n logger.error(`[CloudContainer] Health check failed for ${containerId}: ${err.message}`);\n });\n }, interval);\n }\n\n async getContainerHealth(containerId: string): Promise<ContainerHealthResponse> {\n const client = this.getClient();\n return client.get<ContainerHealthResponse>(`/containers/${containerId}/health`);\n }\n\n // ─── Accessors ─────────────────────────────────────────────────────────\n\n getTrackedContainers(): CloudContainer[] {\n return Array.from(this.tracked.values()).map((t) => t.container);\n }\n\n getTrackedContainer(containerId: string): CloudContainer | undefined {\n return this.tracked.get(containerId)?.container;\n }\n\n isContainerRunning(containerId: string): boolean {\n return this.tracked.get(containerId)?.container.status === \"running\";\n }\n\n getContainerUrl(containerId: string): string | null {\n return this.tracked.get(containerId)?.container.load_balancer_url ?? null;\n }\n}\n"
5
+ "/**\n * Cloud-specific types for ElizaCloud integration.\n *\n * These types mirror the eliza-cloud-v2 database schemas and API contracts\n * for containers, auth, credits, bridge messaging, and agent state snapshots.\n */\n\nexport type {\n CloudCodingAgent,\n CloudCodingContainerSession,\n CloudCodingContainerStatus,\n CloudCodingPatch,\n CloudCodingPatchFormat,\n CloudCodingPromotion,\n CloudCodingSyncDirection,\n CloudCodingSyncResult,\n CloudVfsBundle,\n CloudVfsDeletedFile,\n CloudVfsFile,\n CloudVfsFileEncoding,\n CloudVfsSourceKind,\n PromoteVfsToCloudContainerRequest,\n PromoteVfsToCloudContainerResponse,\n RequestCodingAgentContainerRequest,\n RequestCodingAgentContainerResponse,\n SyncCloudCodingContainerRequest,\n SyncCloudCodingContainerResponse,\n} from \"@elizaos/shared\";\n\n// ─── Container Types ────────────────────────────────────────────────────────\n\nexport type ContainerStatus =\n | \"pending\"\n | \"building\"\n | \"deploying\"\n | \"running\"\n | \"stopped\"\n | \"failed\"\n | \"suspended\";\n\nexport type ContainerBillingStatus =\n | \"active\"\n | \"warning\"\n | \"suspended\"\n | \"shutdown_pending\"\n | \"archived\";\n\nexport type ContainerArchitecture = \"arm64\" | \"x86_64\";\n\nexport interface CloudContainer {\n id: string;\n name: string;\n project_name: string;\n description: string | null;\n organization_id: string;\n user_id: string;\n status: ContainerStatus;\n image_tag: string | null;\n port: number;\n desired_count: number;\n cpu: number;\n memory: number;\n architecture: ContainerArchitecture;\n environment_vars: Record<string, string>;\n health_check_path: string;\n load_balancer_url: string | null;\n ecr_repository_uri: string | null;\n ecr_image_tag: string | null;\n cloudformation_stack_name: string | null;\n billing_status: ContainerBillingStatus;\n total_billed: string;\n last_deployed_at: string | null;\n last_health_check: string | null;\n deployment_log: string | null;\n error_message: string | null;\n metadata: Record<string, unknown>;\n created_at: string;\n updated_at: string;\n}\n\nexport interface CreateContainerRequest {\n name: string;\n project_name: string;\n description?: string;\n port?: number;\n desired_count?: number;\n cpu?: number;\n memory?: number;\n environment_vars?: Record<string, string>;\n health_check_path?: string;\n ecr_image_uri: string;\n ecr_repository_uri?: string;\n image_tag?: string;\n architecture?: ContainerArchitecture;\n}\n\nexport interface CreateContainerResponse {\n success: boolean;\n data: CloudContainer;\n message: string;\n creditsDeducted: number;\n creditsRemaining: number;\n stackName: string;\n polling: {\n endpoint: string;\n intervalMs: number;\n expectedDurationMs: number;\n };\n}\n\nexport interface ContainerListResponse {\n success: boolean;\n data: CloudContainer[];\n}\n\nexport interface ContainerGetResponse {\n success: boolean;\n data: CloudContainer;\n}\n\nexport interface ContainerDeleteResponse {\n success: boolean;\n message?: string;\n}\n\nexport interface ContainerHealthResponse {\n success: boolean;\n data: {\n status: string;\n healthy: boolean;\n lastCheck: string | null;\n uptime: number | null;\n };\n}\n\n// ─── Auth Types ─────────────────────────────────────────────────────────────\n\nexport type DevicePlatform = \"ios\" | \"android\" | \"macos\" | \"windows\" | \"linux\" | \"web\";\n\nexport interface DeviceAuthRequest {\n deviceId: string;\n platform: DevicePlatform;\n appVersion: string;\n deviceName?: string;\n}\n\nexport interface DeviceAuthResponse {\n success: boolean;\n data: {\n apiKey: string;\n userId: string;\n organizationId: string;\n credits: number;\n isNew: boolean;\n };\n}\n\nexport interface CloudCredentials {\n apiKey: string;\n userId: string;\n organizationId: string;\n authenticatedAt: number;\n}\n\n// ─── Credits Types ──────────────────────────────────────────────────────────\n\nexport interface CreditBalanceResponse {\n success: boolean;\n data: {\n balance: number;\n currency: string;\n };\n}\n\nexport interface CreditSummaryResponse {\n success: boolean;\n data: {\n balance: number;\n totalSpent: number;\n totalAdded: number;\n recentTransactions: CreditTransaction[];\n };\n}\n\nexport interface CreditTransaction {\n id: string;\n amount: number;\n description: string;\n type: \"credit\" | \"debit\";\n created_at: string;\n}\n\n// ─── Bridge Types ───────────────────────────────────────────────────────────\n\nexport type BridgeConnectionState = \"disconnected\" | \"connecting\" | \"connected\" | \"reconnecting\";\n\nexport interface BridgeMessage {\n jsonrpc: \"2.0\";\n id?: string | number;\n method?: string;\n params?: Record<string, unknown>;\n result?: unknown;\n error?: BridgeError;\n}\n\nexport interface BridgeError {\n code: number;\n message: string;\n data?: unknown;\n}\n\nexport type BridgeMessageHandler = (message: BridgeMessage) => void;\n\nexport interface BridgeConnection {\n containerId: string;\n state: BridgeConnectionState;\n connectedAt: number | null;\n lastHeartbeat: number | null;\n reconnectAttempts: number;\n}\n\n// ─── Managed Gateway Relay Types ───────────────────────────────────────────\n\nexport interface GatewayRelaySession {\n id: string;\n organizationId: string;\n userId: string;\n runtimeAgentId: string;\n agentName: string | null;\n platform: \"local-runtime\";\n createdAt: string;\n lastSeenAt: string;\n}\n\nexport interface GatewayRelayRequest {\n jsonrpc: \"2.0\";\n id?: string | number;\n method: string;\n params?: Record<string, unknown>;\n}\n\nexport interface GatewayRelayResponse {\n jsonrpc: \"2.0\";\n id?: string | number;\n result?: Record<string, unknown>;\n error?: BridgeError;\n}\n\nexport interface GatewayRelayRequestEnvelope {\n requestId: string;\n rpc: GatewayRelayRequest;\n queuedAt: string;\n}\n\nexport interface RegisterGatewayRelaySessionResponse {\n success: boolean;\n data: {\n session: GatewayRelaySession;\n };\n}\n\nexport interface PollGatewayRelayResponse {\n success: boolean;\n data: {\n request: GatewayRelayRequestEnvelope | null;\n };\n}\n\n// ─── Snapshot / Backup Types ────────────────────────────────────────────────\n\nexport type SnapshotType = \"manual\" | \"auto\" | \"pre-eviction\";\n\nexport interface AgentSnapshot {\n id: string;\n containerId: string;\n organizationId: string;\n snapshotType: SnapshotType;\n storageUrl: string;\n sizeBytes: number;\n agentConfig: Record<string, unknown>;\n metadata: Record<string, unknown>;\n created_at: string;\n}\n\nexport interface CreateSnapshotRequest {\n snapshotType?: SnapshotType;\n metadata?: Record<string, unknown>;\n}\n\nexport interface CreateSnapshotResponse {\n success: boolean;\n data: AgentSnapshot;\n}\n\nexport interface SnapshotListResponse {\n success: boolean;\n data: AgentSnapshot[];\n}\n\nexport interface RestoreSnapshotRequest {\n snapshotId: string;\n}\n\nexport interface RestoreSnapshotResponse {\n success: boolean;\n message: string;\n}\n\n// ─── Cloud Config Types ─────────────────────────────────────────────────────\n\nexport type InferenceMode = \"cloud\" | \"byok\" | \"local\";\n\nexport interface CloudPluginConfig {\n /** Enable ElizaCloud integration. */\n enabled: boolean;\n /** ElizaCloud API base URL. */\n baseUrl: string;\n /** Stored API key for authenticated requests. */\n apiKey?: string;\n /** Device ID used for auto-signup authentication. */\n deviceId?: string;\n /** Platform identifier. */\n platform?: DevicePlatform;\n /** Inference mode: cloud (ElizaCloud proxied), byok (user keys), local (no cloud). */\n inferenceMode: InferenceMode;\n /** Auto-deploy agents to cloud on creation. */\n autoProvision: boolean;\n /** Bridge reconnection settings. */\n bridge: {\n reconnectIntervalMs: number;\n maxReconnectAttempts: number;\n heartbeatIntervalMs: number;\n };\n /** Auto-backup settings. */\n backup: {\n autoBackupIntervalMs: number;\n maxSnapshots: number;\n };\n /** Default container settings for new deployments. */\n container: {\n defaultImage: string;\n defaultArchitecture: ContainerArchitecture;\n defaultCpu: number;\n defaultMemory: number;\n defaultPort: number;\n };\n}\n\nexport const DEFAULT_CLOUD_CONFIG: CloudPluginConfig = {\n enabled: false,\n baseUrl: \"https://www.elizacloud.ai/api/v1\",\n inferenceMode: \"cloud\",\n autoProvision: false,\n bridge: {\n reconnectIntervalMs: 3000,\n maxReconnectAttempts: 20,\n heartbeatIntervalMs: 30_000,\n },\n backup: {\n autoBackupIntervalMs: 3_600_000, // 1 hour\n maxSnapshots: 10,\n },\n container: {\n defaultImage: \"elizaos/agent:latest\",\n defaultArchitecture: \"arm64\",\n defaultCpu: 1792,\n defaultMemory: 1792,\n defaultPort: 3000,\n },\n};\n\n// ─── API Error Types ────────────────────────────────────────────────────────\n\nexport type { CloudApiErrorBody } from \"@elizaos/cloud-sdk\";\nexport {\n CloudApiError,\n InsufficientCreditsError,\n} from \"@elizaos/cloud-sdk\";\n",
6
+ "/**\n * CloudContainerService — Manages container lifecycle through ElizaCloud API.\n *\n * Handles creation, listing, status polling, health monitoring, and deletion\n * of ECS-backed containers. Deployments are async (CloudFormation takes 8-12\n * minutes), so `waitForDeployment` polls with exponential backoff.\n */\n\nimport { type IAgentRuntime, logger, Service } from \"@elizaos/core\";\nimport type {\n CloudContainer,\n ContainerDeleteResponse,\n ContainerGetResponse,\n ContainerHealthResponse,\n ContainerListResponse,\n CreateContainerRequest,\n CreateContainerResponse,\n PromoteVfsToCloudContainerRequest,\n PromoteVfsToCloudContainerResponse,\n RequestCodingAgentContainerRequest,\n RequestCodingAgentContainerResponse,\n SyncCloudCodingContainerRequest,\n SyncCloudCodingContainerResponse,\n} from \"../types/cloud\";\nimport { DEFAULT_CLOUD_CONFIG } from \"../types/cloud\";\nimport type { CloudApiClient } from \"../utils/cloud-api\";\nimport type { CloudAuthService } from \"./cloud-auth\";\n\n/** Active containers tracked locally for quick access. */\ninterface TrackedContainer {\n container: CloudContainer;\n pollingTimer: ReturnType<typeof setTimeout> | null;\n healthTimer: ReturnType<typeof setInterval> | null;\n}\n\nexport class CloudContainerService extends Service {\n static serviceType = \"CLOUD_CONTAINER\";\n capabilityDescription = \"ElizaCloud container provisioning and lifecycle management\";\n\n private authService!: CloudAuthService;\n private readonly containerDefaults = DEFAULT_CLOUD_CONFIG.container;\n private tracked: Map<string, TrackedContainer> = new Map();\n\n static async start(runtime: IAgentRuntime): Promise<Service> {\n const service = new CloudContainerService(runtime);\n await service.initialize();\n return service;\n }\n\n async stop(): Promise<void> {\n for (const [, tracked] of this.tracked) {\n if (tracked.pollingTimer) clearTimeout(tracked.pollingTimer);\n if (tracked.healthTimer) clearInterval(tracked.healthTimer);\n }\n this.tracked.clear();\n }\n\n private async initialize(): Promise<void> {\n // Get auth service reference\n const auth = this.runtime.getService(\"CLOUD_AUTH\");\n if (!auth) {\n logger.debug(\n \"[CloudContainer] CloudAuthService not available, container operations will fail\"\n );\n return;\n }\n this.authService = auth as CloudAuthService;\n\n // Load existing containers\n if (this.authService.isAuthenticated()) {\n const containers = await this.listContainers();\n for (const container of containers) {\n this.tracked.set(container.id, {\n container,\n pollingTimer: null,\n healthTimer: null,\n });\n\n // Resume polling for containers that are still deploying\n if (\n container.status === \"pending\" ||\n container.status === \"building\" ||\n container.status === \"deploying\"\n ) {\n this.startPolling(container.id);\n }\n\n // Start health monitoring for running containers\n if (container.status === \"running\") {\n this.startHealthMonitoring(container.id);\n }\n }\n logger.info(`[CloudContainer] Loaded ${containers.length} existing container(s)`);\n }\n }\n\n private getClient(): CloudApiClient {\n return this.authService.getClient();\n }\n\n // ─── CRUD ───────────────────────────────────────────────────────────────\n\n async createContainer(request: CreateContainerRequest): Promise<CreateContainerResponse> {\n const client = this.getClient();\n const defaults = this.containerDefaults;\n\n const payload: Record<string, unknown> = {\n name: request.name,\n project_name: request.project_name,\n description: request.description,\n port: request.port ?? defaults.defaultPort,\n desired_count: request.desired_count ?? 1,\n cpu: request.cpu ?? defaults.defaultCpu,\n memory: request.memory ?? defaults.defaultMemory,\n environment_vars: request.environment_vars ?? {},\n health_check_path: request.health_check_path ?? \"/health\",\n ecr_image_uri: request.ecr_image_uri,\n ecr_repository_uri: request.ecr_repository_uri,\n image_tag: request.image_tag,\n architecture: request.architecture ?? defaults.defaultArchitecture,\n };\n\n const response = await client.post<CreateContainerResponse>(\"/containers\", payload);\n\n // Track the new container\n this.tracked.set(response.data.id, {\n container: response.data,\n pollingTimer: null,\n healthTimer: null,\n });\n\n // Start polling for deployment completion\n this.startPolling(response.data.id);\n\n logger.info(\n `[CloudContainer] Created container \"${request.name}\" (id=${response.data.id}, stack=${response.stackName})`\n );\n\n return response;\n }\n\n async listContainers(): Promise<CloudContainer[]> {\n const client = this.getClient();\n const response = await client.get<ContainerListResponse>(\"/containers\");\n return response.data;\n }\n\n async getContainer(containerId: string): Promise<CloudContainer> {\n const client = this.getClient();\n const response = await client.get<ContainerGetResponse>(`/containers/${containerId}`);\n\n // Update local tracking\n const existing = this.tracked.get(containerId);\n if (existing) {\n existing.container = response.data;\n }\n\n return response.data;\n }\n\n async deleteContainer(containerId: string): Promise<void> {\n const client = this.getClient();\n await client.delete<ContainerDeleteResponse>(`/containers/${containerId}`);\n\n // Stop tracking\n const tracked = this.tracked.get(containerId);\n if (tracked) {\n if (tracked.pollingTimer) clearTimeout(tracked.pollingTimer);\n if (tracked.healthTimer) clearInterval(tracked.healthTimer);\n this.tracked.delete(containerId);\n }\n\n logger.info(`[CloudContainer] Deleted container ${containerId}`);\n }\n\n // ─── Deployment Polling ────────────────────────────────────────────────\n\n /**\n * Poll container status until it reaches a terminal state (running, failed, stopped).\n * Uses exponential backoff: 5s, 10s, 20s, 30s, 30s, ...\n */\n private startPolling(containerId: string): void {\n const tracked = this.tracked.get(containerId);\n if (!tracked) return;\n\n let attempt = 0;\n const maxAttempts = 120; // ~1 hour with backoff\n const baseInterval = 5_000;\n const maxInterval = 30_000;\n\n const poll = async () => {\n attempt++;\n if (attempt > maxAttempts) {\n logger.error(\n `[CloudContainer] Polling timed out for container ${containerId} after ${maxAttempts} attempts`\n );\n return;\n }\n\n const container = await this.getContainer(containerId);\n const status = container.status;\n\n logger.debug(`[CloudContainer] Poll #${attempt} for ${containerId}: status=${status}`);\n\n if (status === \"running\") {\n logger.info(\n `[CloudContainer] Container ${containerId} is now running at ${container.load_balancer_url}`\n );\n this.startHealthMonitoring(containerId);\n return;\n }\n\n if (status === \"failed\" || status === \"stopped\" || status === \"suspended\") {\n logger.warn(`[CloudContainer] Container ${containerId} reached terminal state: ${status}`);\n if (container.error_message) {\n logger.error(`[CloudContainer] Error: ${container.error_message}`);\n }\n return;\n }\n\n // Schedule next poll with exponential backoff\n const delay = Math.min(baseInterval * 2 ** Math.min(attempt - 1, 3), maxInterval);\n tracked.pollingTimer = setTimeout(poll, delay);\n };\n\n tracked.pollingTimer = setTimeout(poll, baseInterval);\n }\n\n /**\n * Wait for a container to reach \"running\" status. Returns the updated container.\n * This is the synchronous API for actions that need to block.\n */\n async waitForDeployment(containerId: string, timeoutMs = 900_000): Promise<CloudContainer> {\n const deadline = Date.now() + timeoutMs;\n let interval = 5_000;\n const maxInterval = 30_000;\n\n while (Date.now() < deadline) {\n const container = await this.getContainer(containerId);\n\n if (container.status === \"running\") return container;\n if (container.status === \"failed\") {\n throw new Error(\n `Container deployment failed: ${container.error_message ?? \"unknown error\"}`\n );\n }\n if (container.status === \"stopped\" || container.status === \"suspended\") {\n throw new Error(`Container reached terminal state: ${container.status}`);\n }\n\n await new Promise((resolve) => setTimeout(resolve, interval));\n interval = Math.min(interval * 1.5, maxInterval);\n }\n\n throw new Error(`Container deployment timed out after ${Math.round(timeoutMs / 1000)}s`);\n }\n\n // ─── Health Monitoring ─────────────────────────────────────────────────\n\n private startHealthMonitoring(containerId: string): void {\n const tracked = this.tracked.get(containerId);\n if (!tracked || tracked.healthTimer) return;\n\n const interval = 60_000; // Check every 60 seconds\n\n tracked.healthTimer = setInterval(() => {\n this.getContainerHealth(containerId)\n .then((health) => {\n if (!health.data.healthy) {\n logger.warn(\n `[CloudContainer] Container ${containerId} unhealthy: ${health.data.status}`\n );\n }\n })\n .catch((err: Error) => {\n logger.error(`[CloudContainer] Health check failed for ${containerId}: ${err.message}`);\n });\n }, interval);\n }\n\n async getContainerHealth(containerId: string): Promise<ContainerHealthResponse> {\n const client = this.getClient();\n return client.get<ContainerHealthResponse>(`/containers/${containerId}/health`);\n }\n\n // ─── Coding Containers / VFS Promotion ────────────────────────────────\n\n async promoteVfsToCloudContainer(\n request: PromoteVfsToCloudContainerRequest,\n ): Promise<PromoteVfsToCloudContainerResponse> {\n if (!this.isAuthenticated()) {\n throw cloudCodingUnavailable(\"Cloud auth is not connected\");\n }\n\n try {\n return await this.getClient().post<PromoteVfsToCloudContainerResponse>(\n \"/coding-containers/promotions\",\n request,\n );\n } catch (error) {\n if (isMissingCloudCodingEndpoint(error)) {\n throw cloudCodingUnavailable(\n \"Eliza Cloud coding-container promotion endpoint is not deployed yet\",\n );\n }\n throw error;\n }\n }\n\n async requestCodingAgentContainer(\n request: RequestCodingAgentContainerRequest,\n ): Promise<RequestCodingAgentContainerResponse> {\n if (!this.isAuthenticated()) {\n throw cloudCodingUnavailable(\"Cloud auth is not connected\");\n }\n\n try {\n return await this.getClient().post<RequestCodingAgentContainerResponse>(\n \"/coding-containers\",\n request,\n );\n } catch (error) {\n if (isMissingCloudCodingEndpoint(error)) {\n throw cloudCodingUnavailable(\n \"Eliza Cloud coding-container endpoint is not deployed yet\",\n );\n }\n throw error;\n }\n }\n\n async syncCodingContainerChanges(\n containerId: string,\n request: SyncCloudCodingContainerRequest,\n ): Promise<SyncCloudCodingContainerResponse> {\n if (!this.isAuthenticated()) {\n throw cloudCodingUnavailable(\"Cloud auth is not connected\");\n }\n\n try {\n return await this.getClient().post<SyncCloudCodingContainerResponse>(\n `/coding-containers/${encodeURIComponent(containerId)}/sync`,\n request,\n );\n } catch (error) {\n if (isMissingCloudCodingEndpoint(error)) {\n throw cloudCodingUnavailable(\n \"Eliza Cloud coding-container sync endpoint is not deployed yet\",\n );\n }\n throw error;\n }\n }\n\n // ─── Accessors ─────────────────────────────────────────────────────────\n\n getTrackedContainers(): CloudContainer[] {\n return Array.from(this.tracked.values()).map((t) => t.container);\n }\n\n getTrackedContainer(containerId: string): CloudContainer | undefined {\n return this.tracked.get(containerId)?.container;\n }\n\n isContainerRunning(containerId: string): boolean {\n return this.tracked.get(containerId)?.container.status === \"running\";\n }\n\n getContainerUrl(containerId: string): string | null {\n return this.tracked.get(containerId)?.container.load_balancer_url ?? null;\n }\n\n private isAuthenticated(): boolean {\n return this.authService?.isAuthenticated?.() === true;\n }\n}\n\nfunction isMissingCloudCodingEndpoint(error: unknown): boolean {\n const statusCode =\n typeof (error as { statusCode?: unknown })?.statusCode === \"number\"\n ? (error as { statusCode: number }).statusCode\n : undefined;\n return statusCode === 404 || statusCode === 501;\n}\n\nfunction cloudCodingUnavailable(message: string): Error & { statusCode: number } {\n const error = new Error(message) as Error & { statusCode: number };\n error.statusCode = 503;\n return error;\n}\n"
7
7
  ],
8
- "mappings": "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",
9
- "debugId": "AB03C756166CD3A464756E2164756E21",
8
+ "mappings": "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",
9
+ "debugId": "20249C84B1785B0864756E2164756E21",
10
10
  "names": []
11
11
  }
@@ -187,4 +187,4 @@ export {
187
187
  CloudCredentialProvider
188
188
  };
189
189
 
190
- //# debugId=652A321E521EC52464756E2164756E21
190
+ //# debugId=ECAEB3FA4D76E0A264756E2164756E21
@@ -2,10 +2,10 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/lib/credential-type-map.ts", "../src/services/cloud-credential-provider.ts"],
4
4
  "sourcesContent": [
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 cloud/apps/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 // cloud/apps/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
- "/**\n * CloudCredentialProvider — bridges plugin-workflow's `CredentialProvider`\n * service slot to Eliza Cloud's per-connector OAuth surface.\n *\n * Resolution path on `resolve(userId, credType)`:\n * 1. Look up `credType` in `credTypeToConnector` — return `null` for unmapped.\n * 2. GET `/eliza/<connector>/status` via the authenticated cloud client to\n * check whether the user already has an active connection.\n * 3. When connected → see `RAW_TOKEN_GAP` below; we currently return\n * `needs_auth` because the cloud does not expose raw OAuth tokens.\n * 4. When not connected → POST `/eliza/<connector>/connect/initiate` with\n * the mapped `capabilities`; return `needs_auth` with the authUrl the\n * cloud issued. The workflow plugin surfaces this to the user.\n *\n * RAW_TOKEN_GAP\n * -------------\n * Plugin-workflow's `credential_data` shape requires the actual access token\n * (so the workflow engine can inject it into a node's HTTP calls). The cloud\n * connector endpoints (Google / GitHub / Discord) intentionally do **not**\n * vend raw tokens to the local plugin — they hold the token server-side and\n * proxy connector calls under `/eliza/<connector>/<action>` (e.g.\n * `/eliza/google/gmail/send`). Bridging that proxy model into the workflow\n * engine is a separate piece of work (either: extend the workflow engine to\n * dispatch through cloud proxies, or add a token-vending endpoint cloud-side\n * for clients with a verified pairing). Until then this provider is honest:\n * it confirms the connection exists and either reports it cannot inject\n * (`null` / `needs_auth`) or — once the cloud exposes a vending endpoint —\n * fetches and returns the credential payload.\n *\n * No fallbacks. No fake tokens. The provider fails closed.\n */\n\nimport { type IAgentRuntime, logger, Service } from \"@elizaos/core\";\nimport { credTypeToConnector, supportedCredTypes } from \"../lib/credential-type-map\";\nimport type { CloudAuthLike } from \"../lib/cloud-connection\";\n\n// Inlined to avoid a hard compile-time dep on @elizaos/plugin-workflow.\n// The runtime duck-types the service via the shared service-type string.\nconst WORKFLOW_CREDENTIAL_PROVIDER_TYPE = \"workflow_credential_provider\";\n\nexport type CredentialProviderResult =\n | { status: \"credential_data\"; data: Record<string, unknown> }\n | { status: \"needs_auth\"; authUrl: string }\n | null;\n\nexport interface CheckCredentialTypesResult {\n supported: string[];\n unsupported: string[];\n}\n\ninterface CloudConnectorStatus {\n connected: boolean;\n reason?: string;\n authUrl?: string;\n}\n\ninterface CloudConnectInitiateResponse {\n authUrl?: string;\n}\n\ninterface CloudClientLike {\n get?: (path: string) => Promise<unknown>;\n post?: (path: string, body?: unknown) => Promise<unknown>;\n}\n\nfunction isCloudAuthLike(value: unknown): value is CloudAuthLike {\n if (!value || typeof value !== \"object\") {\n return false;\n }\n return typeof Reflect.get(value, \"getClient\") === \"function\";\n}\n\nfunction isCloudClientLike(value: unknown): value is CloudClientLike {\n if (!value || typeof value !== \"object\") {\n return false;\n }\n const get = Reflect.get(value, \"get\");\n const post = Reflect.get(value, \"post\");\n return (\n (get === undefined || typeof get === \"function\") &&\n (post === undefined || typeof post === \"function\")\n );\n}\n\nexport class CloudCredentialProvider extends Service {\n static override readonly serviceType = WORKFLOW_CREDENTIAL_PROVIDER_TYPE;\n\n override capabilityDescription =\n \"Resolves workflow node credentials via the user's paired Eliza Cloud account.\";\n\n static async start(runtime: IAgentRuntime): Promise<CloudCredentialProvider> {\n return new CloudCredentialProvider(runtime);\n }\n\n override async stop(): Promise<void> {\n // No-op: holds no per-instance state.\n }\n\n async resolve(_userId: string, credType: string): Promise<CredentialProviderResult> {\n const mapping = credTypeToConnector.get(credType);\n if (!mapping) {\n return null;\n }\n\n const client = this.getCloudClient();\n if (!client) {\n logger.debug(\n { src: \"plugin:elizacloud:credential-provider\", credType },\n \"CLOUD_AUTH unavailable — cannot resolve workflow credentials\",\n );\n return null;\n }\n\n const status = await this.fetchConnectorStatus(client, mapping.connector);\n\n if (!status.connected) {\n const authUrl =\n status.authUrl ??\n (await this.initiateConnectorAuth(client, mapping.connector, mapping.capabilities));\n if (!authUrl) {\n return null;\n }\n return { status: \"needs_auth\", authUrl };\n }\n\n // Connected, but the cloud does not expose raw tokens — see RAW_TOKEN_GAP\n // in the file header. We re-prompt for explicit user-side auth so the\n // workflow plugin reports \"missing connection\" instead of silently\n // injecting a stale or empty credential. When the cloud adds a token\n // vending endpoint, fetch + return `credential_data` here.\n const reauthUrl = await this.initiateConnectorAuth(\n client,\n mapping.connector,\n mapping.capabilities,\n );\n if (reauthUrl) {\n return { status: \"needs_auth\", authUrl: reauthUrl };\n }\n return null;\n }\n\n checkCredentialTypes(credTypes: string[]): CheckCredentialTypesResult {\n const supported: string[] = [];\n const unsupported: string[] = [];\n for (const t of credTypes) {\n if (supportedCredTypes.has(t)) {\n supported.push(t);\n } else {\n unsupported.push(t);\n }\n }\n return { supported, unsupported };\n }\n\n // ─── internals ───────────────────────────────────────────────────────\n\n private getCloudClient(): CloudClientLike | null {\n const cloudAuth = this.runtime.getService(\"CLOUD_AUTH\");\n if (!isCloudAuthLike(cloudAuth)) {\n return null;\n }\n const client = cloudAuth.getClient?.();\n if (!isCloudClientLike(client)) {\n return null;\n }\n return client;\n }\n\n private async fetchConnectorStatus(\n client: CloudClientLike,\n connector: string,\n ): Promise<CloudConnectorStatus> {\n if (typeof client.get !== \"function\") {\n return { connected: false };\n }\n const raw = await client.get(`/eliza/${connector}/status`);\n return shapeConnectorStatus(raw);\n }\n\n private async initiateConnectorAuth(\n client: CloudClientLike,\n connector: string,\n capabilities: readonly string[] | undefined,\n ): Promise<string | null> {\n if (typeof client.post !== \"function\") {\n return null;\n }\n const body: Record<string, unknown> = {};\n if (capabilities && capabilities.length > 0) {\n body.capabilities = [...capabilities];\n }\n const raw = (await client.post(\n `/eliza/${connector}/connect/initiate`,\n body,\n )) as CloudConnectInitiateResponse | null;\n const authUrl = raw?.authUrl;\n return typeof authUrl === \"string\" && authUrl.length > 0 ? authUrl : null;\n }\n}\n\nfunction shapeConnectorStatus(raw: unknown): CloudConnectorStatus {\n if (!raw || typeof raw !== \"object\") {\n return { connected: false };\n }\n const obj = raw as Record<string, unknown>;\n const connected = obj.connected === true;\n const reason = typeof obj.reason === \"string\" ? obj.reason : undefined;\n const authUrl = typeof obj.authUrl === \"string\" ? obj.authUrl : undefined;\n return { connected, reason, authUrl };\n}\n"
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
+ "/**\n * CloudCredentialProvider — bridges plugin-workflow's `CredentialProvider`\n * service slot to Eliza Cloud's per-connector OAuth surface.\n *\n * Resolution path on `resolve(userId, credType)`:\n * 1. Look up `credType` in `credTypeToConnector` — return `null` for unmapped.\n * 2. GET `/eliza/<connector>/status` via the authenticated cloud client to\n * check whether the user already has an active connection.\n * 3. When connected → see `RAW_TOKEN_GAP` below; we currently return\n * `needs_auth` because the cloud does not expose raw OAuth tokens.\n * 4. When not connected → POST `/eliza/<connector>/connect/initiate` with\n * the mapped `capabilities`; return `needs_auth` with the authUrl the\n * cloud issued. The workflow plugin surfaces this to the user.\n *\n * RAW_TOKEN_GAP\n * -------------\n * Plugin-workflow's `credential_data` shape requires the actual access token\n * (so the workflow engine can inject it into a node's HTTP calls). The cloud\n * connector endpoints (Google / GitHub / Discord) intentionally do **not**\n * vend raw tokens to the local plugin — they hold the token server-side and\n * proxy connector calls under `/eliza/<connector>/<action>` (e.g.\n * `/eliza/google/gmail/send`). Bridging that proxy model into the workflow\n * engine is a separate piece of work (either: extend the workflow engine to\n * dispatch through cloud proxies, or add a token-vending endpoint cloud-side\n * for clients with a verified pairing). Until then this provider is honest:\n * it confirms the connection exists and either reports it cannot inject\n * (`null` / `needs_auth`) or — once the cloud exposes a vending endpoint —\n * fetches and returns the credential payload.\n *\n * No fallbacks. No fake tokens. The provider fails closed.\n */\n\nimport { type IAgentRuntime, logger, Service } from \"@elizaos/core\";\nimport { credTypeToConnector, supportedCredTypes } from \"../lib/credential-type-map\";\nimport type { CloudAuthLike } from \"../lib/cloud-connection\";\n\n// Inlined to avoid a hard compile-time dep on @elizaos/plugin-workflow.\n// The runtime duck-types the service via the shared service-type string.\nconst WORKFLOW_CREDENTIAL_PROVIDER_TYPE = \"workflow_credential_provider\";\n\nexport type CredentialProviderResult =\n | { status: \"credential_data\"; data: Record<string, unknown> }\n | { status: \"needs_auth\"; authUrl: string }\n | null;\n\nexport interface CheckCredentialTypesResult {\n supported: string[];\n unsupported: string[];\n}\n\ninterface CloudConnectorStatus {\n connected: boolean;\n reason?: string;\n authUrl?: string;\n}\n\ninterface CloudConnectInitiateResponse {\n authUrl?: string;\n}\n\ninterface CloudClientLike {\n get?: (path: string) => Promise<unknown>;\n post?: (path: string, body?: unknown) => Promise<unknown>;\n}\n\nfunction isCloudAuthLike(value: unknown): value is CloudAuthLike {\n if (!value || typeof value !== \"object\") {\n return false;\n }\n return typeof Reflect.get(value, \"getClient\") === \"function\";\n}\n\nfunction isCloudClientLike(value: unknown): value is CloudClientLike {\n if (!value || typeof value !== \"object\") {\n return false;\n }\n const get = Reflect.get(value, \"get\");\n const post = Reflect.get(value, \"post\");\n return (\n (get === undefined || typeof get === \"function\") &&\n (post === undefined || typeof post === \"function\")\n );\n}\n\nexport class CloudCredentialProvider extends Service {\n static override readonly serviceType = WORKFLOW_CREDENTIAL_PROVIDER_TYPE;\n\n override capabilityDescription =\n \"Resolves workflow node credentials via the user's paired Eliza Cloud account.\";\n\n static async start(runtime: IAgentRuntime): Promise<CloudCredentialProvider> {\n return new CloudCredentialProvider(runtime);\n }\n\n override async stop(): Promise<void> {\n // Holds no per-instance state.\n }\n\n async resolve(_userId: string, credType: string): Promise<CredentialProviderResult> {\n const mapping = credTypeToConnector.get(credType);\n if (!mapping) {\n return null;\n }\n\n const client = this.getCloudClient();\n if (!client) {\n logger.debug(\n { src: \"plugin:elizacloud:credential-provider\", credType },\n \"CLOUD_AUTH unavailable — cannot resolve workflow credentials\",\n );\n return null;\n }\n\n const status = await this.fetchConnectorStatus(client, mapping.connector);\n\n if (!status.connected) {\n const authUrl =\n status.authUrl ??\n (await this.initiateConnectorAuth(client, mapping.connector, mapping.capabilities));\n if (!authUrl) {\n return null;\n }\n return { status: \"needs_auth\", authUrl };\n }\n\n // Connected, but the cloud does not expose raw tokens — see RAW_TOKEN_GAP\n // in the file header. We re-prompt for explicit user-side auth so the\n // workflow plugin reports \"missing connection\" instead of silently\n // injecting a stale or empty credential. When the cloud adds a token\n // vending endpoint, fetch + return `credential_data` here.\n const reauthUrl = await this.initiateConnectorAuth(\n client,\n mapping.connector,\n mapping.capabilities,\n );\n if (reauthUrl) {\n return { status: \"needs_auth\", authUrl: reauthUrl };\n }\n return null;\n }\n\n checkCredentialTypes(credTypes: string[]): CheckCredentialTypesResult {\n const supported: string[] = [];\n const unsupported: string[] = [];\n for (const t of credTypes) {\n if (supportedCredTypes.has(t)) {\n supported.push(t);\n } else {\n unsupported.push(t);\n }\n }\n return { supported, unsupported };\n }\n\n // ─── internals ───────────────────────────────────────────────────────\n\n private getCloudClient(): CloudClientLike | null {\n const cloudAuth = this.runtime.getService(\"CLOUD_AUTH\");\n if (!isCloudAuthLike(cloudAuth)) {\n return null;\n }\n const client = cloudAuth.getClient?.();\n if (!isCloudClientLike(client)) {\n return null;\n }\n return client;\n }\n\n private async fetchConnectorStatus(\n client: CloudClientLike,\n connector: string,\n ): Promise<CloudConnectorStatus> {\n if (typeof client.get !== \"function\") {\n return { connected: false };\n }\n const raw = await client.get(`/eliza/${connector}/status`);\n return shapeConnectorStatus(raw);\n }\n\n private async initiateConnectorAuth(\n client: CloudClientLike,\n connector: string,\n capabilities: readonly string[] | undefined,\n ): Promise<string | null> {\n if (typeof client.post !== \"function\") {\n return null;\n }\n const body: Record<string, unknown> = {};\n if (capabilities && capabilities.length > 0) {\n body.capabilities = [...capabilities];\n }\n const raw = (await client.post(\n `/eliza/${connector}/connect/initiate`,\n body,\n )) as CloudConnectInitiateResponse | null;\n const authUrl = raw?.authUrl;\n return typeof authUrl === \"string\" && authUrl.length > 0 ? authUrl : null;\n }\n}\n\nfunction shapeConnectorStatus(raw: unknown): CloudConnectorStatus {\n if (!raw || typeof raw !== \"object\") {\n return { connected: false };\n }\n const obj = raw as Record<string, unknown>;\n const connected = obj.connected === true;\n const reason = typeof obj.reason === \"string\" ? obj.reason : undefined;\n const authUrl = typeof obj.authUrl === \"string\" ? obj.authUrl : undefined;\n return { connected, reason, authUrl };\n}\n"
7
7
  ],
8
8
  "mappings": "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",
9
- "debugId": "652A321E521EC52464756E2164756E21",
9
+ "debugId": "ECAEB3FA4D76E0A264756E2164756E21",
10
10
  "names": []
11
11
  }
@@ -476,4 +476,4 @@ export {
476
476
  CloudManagedGatewayRelayService
477
477
  };
478
478
 
479
- //# debugId=964A5D4CCED5804564756E2164756E21
479
+ //# debugId=F08AF67971CE786164756E2164756E21
@@ -5,6 +5,6 @@
5
5
  "import {\n ChannelType,\n type Content,\n ContentType,\n createMessageMemory,\n createUniqueUuid,\n type HandlerCallback,\n type IAgentRuntime,\n type JsonValue,\n logger,\n type Memory,\n Service,\n type UUID,\n} from \"@elizaos/core\";\nimport type {\n GatewayRelayRequest,\n GatewayRelayRequestEnvelope,\n GatewayRelayResponse,\n PollGatewayRelayResponse,\n RegisterGatewayRelaySessionResponse,\n} from \"../types/cloud\";\nimport type { CloudAuthService } from \"./cloud-auth\";\n\nconst POLL_TIMEOUT_MS = 25_000;\nconst REQUEST_TIMEOUT_MS = POLL_TIMEOUT_MS + 5_000;\nconst RETRY_DELAY_MS = 2_000;\nconst IDLE_DELAY_MS = 250;\n\ntype RelayRequestMethod = \"GET\" | \"POST\" | \"DELETE\";\ntype RelayRuntimeStatus = \"idle\" | \"registered\" | \"polling\" | \"error\" | \"stopped\";\n\ninterface RelayRequestJsonOptions {\n method: RelayRequestMethod;\n json?: unknown;\n query?: Record<string, string | number | boolean>;\n timeoutMs?: number;\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isUuidLike(value: string): value is UUID {\n return /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(value);\n}\n\nfunction asTrimmedString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim() ? value.trim() : undefined;\n}\n\nfunction resolveChannelType(value: unknown): ChannelType {\n const candidate = asTrimmedString(value)?.toUpperCase();\n return candidate && candidate in ChannelType\n ? ChannelType[candidate as keyof typeof ChannelType]\n : ChannelType.DM;\n}\n\nfunction isCloudProvisionedRuntime(): boolean {\n if (typeof process === \"undefined\") {\n return false;\n }\n return process.env.ELIZA_CLOUD_PROVISIONED === \"1\";\n}\n\nfunction isNodeHost(): boolean {\n return typeof process !== \"undefined\" && typeof process.versions?.node === \"string\";\n}\n\nfunction normalizeAttachments(value: unknown): Content[\"attachments\"] | undefined {\n if (!Array.isArray(value)) {\n return undefined;\n }\n\n const attachments = value\n .map((entry, index) => {\n if (!isRecord(entry)) {\n return null;\n }\n\n const url = asTrimmedString(entry.url);\n if (!url) {\n return null;\n }\n\n const type = asTrimmedString(entry.type)?.toLowerCase();\n return {\n id: asTrimmedString(entry.id) ?? `${index}:${url}`,\n url,\n source: asTrimmedString(entry.source),\n title: asTrimmedString(entry.title),\n description: asTrimmedString(entry.description),\n text: asTrimmedString(entry.text),\n contentType:\n type === \"image\"\n ? ContentType.IMAGE\n : type === \"video\"\n ? ContentType.VIDEO\n : type === \"audio\"\n ? ContentType.AUDIO\n : type === \"document\"\n ? ContentType.DOCUMENT\n : undefined,\n };\n })\n .filter((entry): entry is NonNullable<typeof entry> => entry !== null);\n\n return attachments.length > 0 ? attachments : undefined;\n}\n\nfunction toJsonRecord(value: unknown): Record<string, unknown> | undefined {\n return isRecord(value) ? value : undefined;\n}\n\nfunction toJsonMetadataRecord(value: unknown): Record<string, JsonValue> | undefined {\n if (!isRecord(value)) {\n return undefined;\n }\n\n return JSON.parse(JSON.stringify(value)) as Record<string, JsonValue>;\n}\n\ntype GatewayMessagePayload = {\n text: string;\n roomKey: string;\n channelType: ChannelType;\n source: string;\n senderId: string;\n senderUserName: string;\n senderName: string;\n attachments?: Content[\"attachments\"];\n senderMetadata?: Record<string, unknown>;\n transportMetadata?: Record<string, unknown>;\n};\n\nfunction buildGatewayMessagePayload(\n runtime: IAgentRuntime,\n rpc: GatewayRelayRequest\n): GatewayMessagePayload | null {\n const params = toJsonRecord(rpc.params);\n const sender = toJsonRecord(params?.sender);\n\n const source = asTrimmedString(params?.source) ?? \"eliza_cloud_gateway\";\n const text = typeof params?.text === \"string\" ? params.text : \"\";\n const senderId = asTrimmedString(sender?.id) ?? `${source}:anonymous`;\n const senderUserName = asTrimmedString(sender?.username) ?? senderId;\n const senderName =\n asTrimmedString(sender?.displayName) ?? asTrimmedString(sender?.name) ?? senderUserName;\n const roomKey =\n asTrimmedString(params?.roomId) ??\n `${source}:${senderId}:${String(rpc.id ?? Date.now())}:${runtime.agentId}`;\n\n if (!text.trim() && !normalizeAttachments(params?.attachments)?.length) {\n return null;\n }\n\n return {\n text: text.trim() || \" \",\n roomKey,\n channelType: resolveChannelType(params?.channelType),\n source,\n senderId,\n senderUserName,\n senderName,\n attachments: normalizeAttachments(params?.attachments),\n senderMetadata: toJsonRecord(sender?.metadata),\n transportMetadata: toJsonRecord(params?.metadata),\n };\n}\n\nfunction buildWorldKey(\n source: string,\n metadata: Record<string, unknown> | undefined,\n roomKey: string\n): string {\n const discord = toJsonRecord(metadata?.discord);\n const guildId = asTrimmedString(discord?.guildId);\n if (guildId) {\n return `gateway:${source}:guild:${guildId}`;\n }\n\n const threadId = asTrimmedString(metadata?.threadId);\n if (threadId) {\n return `gateway:${source}:thread:${threadId}`;\n }\n\n return `gateway:${source}:room:${roomKey}`;\n}\n\nclass SessionMissingError extends Error {\n constructor() {\n super(\"Gateway relay session missing\");\n this.name = \"SessionMissingError\";\n }\n}\n\nexport class CloudManagedGatewayRelayService extends Service {\n static serviceType = \"CLOUD_MANAGED_GATEWAY_RELAY\";\n capabilityDescription =\n \"Registers a local Eliza runtime with the cloud managed gateway and handles inbound relay traffic\";\n\n private authService: CloudAuthService | null = null;\n private loopPromise: Promise<void> | null = null;\n private currentSessionId: string | null = null;\n private stopping = false;\n private activeAbortController: AbortController | null = null;\n private relayStatus: RelayRuntimeStatus = \"idle\";\n private lastSeenAt: string | null = null;\n\n static async start(runtime: IAgentRuntime): Promise<Service> {\n const service = new CloudManagedGatewayRelayService(runtime);\n await service.initialize();\n return service;\n }\n\n async stop(): Promise<void> {\n this.stopping = true;\n this.relayStatus = \"stopped\";\n this.activeAbortController?.abort();\n\n if (this.loopPromise) {\n await this.loopPromise.catch((error) => {\n logger.debug(\n `[CloudManagedGatewayRelay] Ignoring relay loop shutdown error: ${\n error instanceof Error ? error.message : String(error)\n }`\n );\n });\n }\n\n const sessionId = this.currentSessionId;\n this.currentSessionId = null;\n if (sessionId) {\n await this.disconnectSession(sessionId);\n }\n }\n\n private async initialize(): Promise<void> {\n if (!isNodeHost()) {\n logger.debug(\"[CloudManagedGatewayRelay] Skipping gateway relay outside Node.js runtime\");\n this.relayStatus = \"stopped\";\n return;\n }\n\n if (isCloudProvisionedRuntime()) {\n logger.debug(\n \"[CloudManagedGatewayRelay] Skipping local relay inside provisioned cloud runtime\"\n );\n this.relayStatus = \"stopped\";\n return;\n }\n\n if (!this.runtime.messageService) {\n logger.debug(\"[CloudManagedGatewayRelay] Skipping gateway relay without message service\");\n this.relayStatus = \"idle\";\n return;\n }\n\n const auth = this.runtime.getService(\"CLOUD_AUTH\");\n if (!auth) {\n logger.debug(\"[CloudManagedGatewayRelay] CloudAuthService not available\");\n this.relayStatus = \"idle\";\n return;\n }\n\n this.authService = auth as CloudAuthService;\n if (!this.authService.isAuthenticated()) {\n logger.debug(\n \"[CloudManagedGatewayRelay] Skipping gateway relay while cloud auth is inactive\"\n );\n this.relayStatus = \"idle\";\n return;\n }\n\n this.startRelayLoopIfReady();\n }\n\n getSessionInfo(): {\n sessionId: string | null;\n organizationId: string | null;\n userId: string | null;\n agentName: string | null;\n platform: string | null;\n lastSeenAt: string | null;\n status: RelayRuntimeStatus;\n } {\n const auth = this.authService;\n const status =\n this.stopping || this.relayStatus === \"stopped\"\n ? \"stopped\"\n : auth?.isAuthenticated() === false\n ? \"idle\"\n : this.relayStatus;\n\n return {\n sessionId: this.currentSessionId,\n organizationId: auth?.getOrganizationId() ?? null,\n userId: auth?.getUserId() ?? null,\n agentName: this.getAgentName(),\n platform: \"local-runtime\",\n lastSeenAt: this.lastSeenAt,\n status,\n };\n }\n\n startRelayLoopIfReady(): boolean {\n if (this.loopPromise && !this.stopping) {\n return true;\n }\n\n const auth =\n this.authService ?? (this.runtime.getService(\"CLOUD_AUTH\") as CloudAuthService | null);\n if (!auth?.isAuthenticated() || !this.runtime.messageService) {\n this.relayStatus = \"idle\";\n return false;\n }\n\n this.authService = auth;\n this.stopping = false;\n this.relayStatus = \"idle\";\n this.loopPromise = this.runLoop();\n logger.info(\"[CloudManagedGatewayRelay] Local gateway relay loop started\");\n return true;\n }\n\n private async runLoop(): Promise<void> {\n while (!this.stopping) {\n try {\n if (!this.currentSessionId) {\n this.currentSessionId = await this.registerSession();\n this.relayStatus = \"registered\";\n this.lastSeenAt = new Date().toISOString();\n continue;\n }\n\n this.relayStatus = \"polling\";\n const request = await this.pollNextRequest(this.currentSessionId);\n this.lastSeenAt = new Date().toISOString();\n if (!request) {\n this.relayStatus = \"registered\";\n await sleep(IDLE_DELAY_MS);\n continue;\n }\n\n const response = await this.handleRequest(request.rpc);\n await this.submitResponse(this.currentSessionId, request.requestId, response);\n this.relayStatus = \"registered\";\n } catch (error) {\n if (this.stopping) {\n return;\n }\n\n if (error instanceof SessionMissingError) {\n this.currentSessionId = null;\n this.relayStatus = \"idle\";\n await sleep(IDLE_DELAY_MS);\n continue;\n }\n\n this.relayStatus = \"error\";\n logger.warn(\n `[CloudManagedGatewayRelay] Relay loop error: ${\n error instanceof Error ? error.message : String(error)\n }`\n );\n await sleep(RETRY_DELAY_MS);\n }\n }\n }\n\n private getAgentName(): string {\n return this.runtime.character?.name?.trim() || \"Eliza\";\n }\n\n private getClient() {\n const client = this.authService?.getClient();\n if (!client) {\n throw new Error(\"Cloud API client is unavailable\");\n }\n return client;\n }\n\n private async requestJson<T>(\n path: string,\n options: RelayRequestJsonOptions\n ): Promise<{ status: number; body: T }> {\n const timeoutMs = options.timeoutMs ?? REQUEST_TIMEOUT_MS;\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), timeoutMs);\n this.activeAbortController = controller;\n\n try {\n const response = await this.getClient().requestRaw(options.method, path, {\n headers: {\n Accept: \"application/json\",\n },\n json: options.json,\n query: options.query,\n signal: controller.signal,\n });\n\n const body = (await response.json().catch(() => ({}))) as T;\n return { status: response.status, body };\n } finally {\n clearTimeout(timeoutId);\n if (this.activeAbortController === controller) {\n this.activeAbortController = null;\n }\n }\n }\n\n private async registerSession(): Promise<string> {\n const { status, body } = await this.requestJson<RegisterGatewayRelaySessionResponse>(\n \"/eliza/gateway-relay/sessions\",\n {\n method: \"POST\",\n json: {\n runtimeAgentId: this.runtime.agentId,\n agentName: this.getAgentName(),\n },\n }\n );\n\n if (status >= 400 || !body?.success || !body.data?.session?.id) {\n throw new Error(`Failed to register gateway relay session (status=${status})`);\n }\n\n logger.info(\n `[CloudManagedGatewayRelay] Registered local runtime for managed gateway (${body.data.session.id})`\n );\n return body.data.session.id;\n }\n\n private async disconnectSession(sessionId: string): Promise<void> {\n try {\n await this.requestJson<{ success?: boolean }>(\n `/eliza/gateway-relay/sessions/${encodeURIComponent(sessionId)}`,\n {\n method: \"DELETE\",\n timeoutMs: 10_000,\n }\n );\n } catch (error) {\n logger.debug(\n `[CloudManagedGatewayRelay] Failed to disconnect relay session ${sessionId}: ${\n error instanceof Error ? error.message : String(error)\n }`\n );\n }\n }\n\n private async pollNextRequest(sessionId: string): Promise<GatewayRelayRequestEnvelope | null> {\n const { status, body } = await this.requestJson<PollGatewayRelayResponse>(\n `/eliza/gateway-relay/sessions/${encodeURIComponent(sessionId)}/next`,\n {\n method: \"GET\",\n query: { timeoutMs: POLL_TIMEOUT_MS },\n timeoutMs: POLL_TIMEOUT_MS + 5_000,\n }\n );\n\n if (status === 404) {\n throw new SessionMissingError();\n }\n\n if (status >= 400 || !body?.success) {\n throw new Error(`Failed to poll gateway relay session ${sessionId} (status=${status})`);\n }\n\n return body.data?.request ?? null;\n }\n\n private async submitResponse(\n sessionId: string,\n requestId: string,\n response: GatewayRelayResponse\n ): Promise<void> {\n const { status, body } = await this.requestJson<{ success?: boolean }>(\n `/eliza/gateway-relay/sessions/${encodeURIComponent(sessionId)}/responses`,\n {\n method: \"POST\",\n json: { requestId, response },\n }\n );\n\n if (status === 404) {\n throw new SessionMissingError();\n }\n\n if (status >= 400 || body?.success === false) {\n throw new Error(`Failed to submit gateway relay response (status=${status})`);\n }\n }\n\n private async handleRequest(rpc: GatewayRelayRequest): Promise<GatewayRelayResponse> {\n switch (rpc.method) {\n case \"heartbeat\":\n return {\n jsonrpc: \"2.0\",\n id: rpc.id,\n result: { timestamp: Date.now() },\n };\n case \"status.get\":\n return {\n jsonrpc: \"2.0\",\n id: rpc.id,\n result: {\n status: \"running\",\n runtimeAgentId: this.runtime.agentId,\n agentName: this.getAgentName(),\n },\n };\n case \"message.send\":\n return this.handleMessageSend(rpc);\n default:\n return {\n jsonrpc: \"2.0\",\n id: rpc.id,\n error: {\n code: -32601,\n message: `Unsupported relay method: ${rpc.method}`,\n },\n };\n }\n }\n\n private async handleMessageSend(rpc: GatewayRelayRequest): Promise<GatewayRelayResponse> {\n if (!this.runtime.messageService) {\n return {\n jsonrpc: \"2.0\",\n id: rpc.id,\n error: { code: -32603, message: \"Message service is not available\" },\n };\n }\n\n const payload = buildGatewayMessagePayload(this.runtime, rpc);\n if (!payload) {\n return {\n jsonrpc: \"2.0\",\n id: rpc.id,\n error: { code: -32602, message: \"Invalid message relay payload\" },\n };\n }\n\n const roomId = isUuidLike(payload.roomKey)\n ? payload.roomKey\n : createUniqueUuid(this.runtime, payload.roomKey);\n const worldId = createUniqueUuid(\n this.runtime,\n buildWorldKey(payload.source, payload.transportMetadata, payload.roomKey)\n );\n const entityId = createUniqueUuid(this.runtime, `${payload.source}:${payload.senderId}`);\n const messageServerId = createUniqueUuid(this.runtime, `eliza-cloud-gateway:${payload.source}`);\n const messageId = createUniqueUuid(\n this.runtime,\n `${payload.source}:${payload.roomKey}:${String(rpc.id ?? Date.now())}:inbound`\n );\n\n const transportMetadata = toJsonMetadataRecord(payload.transportMetadata);\n\n await this.runtime.ensureConnection({\n entityId,\n roomId,\n roomName: payload.roomKey,\n worldId,\n worldName: payload.source,\n userName: payload.senderUserName,\n name: payload.senderName,\n source: payload.source,\n channelId: payload.roomKey,\n type: payload.channelType,\n messageServerId,\n metadata: transportMetadata,\n });\n\n const message = createMessageMemory({\n id: messageId,\n entityId,\n agentId: this.runtime.agentId,\n roomId,\n content: {\n text: payload.text,\n source: payload.source,\n channelType: payload.channelType,\n ...(payload.attachments ? { attachments: payload.attachments } : {}),\n },\n });\n\n message.metadata = {\n ...(message.metadata as Record<string, JsonValue>),\n entityName: payload.senderName,\n entityUserName: payload.senderUserName,\n ...(payload.senderMetadata\n ? { gatewaySender: toJsonMetadataRecord(payload.senderMetadata) }\n : {}),\n ...(payload.transportMetadata ? { gatewayMetadata: transportMetadata } : {}),\n } as typeof message.metadata;\n\n const callbackTexts: string[] = [];\n const callback: HandlerCallback = async (content: Content) => {\n const responseText = typeof content.text === \"string\" ? content.text : \"\";\n if (responseText.trim()) {\n callbackTexts.push(responseText);\n }\n\n const responseMemory = createMessageMemory({\n id: createUniqueUuid(\n this.runtime,\n `${payload.source}:${payload.roomKey}:${String(\n rpc.id ?? Date.now()\n )}:response:${callbackTexts.length}`\n ),\n entityId: this.runtime.agentId,\n agentId: this.runtime.agentId,\n roomId,\n content: {\n ...content,\n text: responseText,\n source: payload.source,\n channelType: payload.channelType,\n },\n });\n\n await this.runtime.createMemory(responseMemory, \"messages\");\n return [responseMemory as Memory];\n };\n\n try {\n const result = await this.runtime.messageService.handleMessage(\n this.runtime,\n message,\n callback\n );\n const replyText =\n callbackTexts[callbackTexts.length - 1] ??\n (typeof result.responseContent?.text === \"string\"\n ? result.responseContent.text\n : undefined);\n\n return {\n jsonrpc: \"2.0\",\n id: rpc.id,\n result: {\n didRespond: result.didRespond,\n ...(replyText ? { text: replyText } : {}),\n runtimeAgentId: this.runtime.agentId,\n },\n };\n } catch (error) {\n return {\n jsonrpc: \"2.0\",\n id: rpc.id,\n error: {\n code: -32603,\n message: error instanceof Error ? error.message : String(error),\n },\n };\n }\n }\n}\n"
6
6
  ],
7
7
  "mappings": "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",
8
- "debugId": "964A5D4CCED5804564756E2164756E21",
8
+ "debugId": "F08AF67971CE786164756E2164756E21",
9
9
  "names": []
10
10
  }
@@ -172,4 +172,4 @@ export {
172
172
  CloudModelRegistryService
173
173
  };
174
174
 
175
- //# debugId=313128C9445A056E64756E2164756E21
175
+ //# debugId=F0F6AE5C4F42960D64756E2164756E21
@@ -2,9 +2,9 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/services/cloud-model-registry.ts"],
4
4
  "sourcesContent": [
5
- "/** Fetches and caches available models from ElizaCloud. */\n\nimport { type IAgentRuntime, logger, Service } from \"@elizaos/core\";\nimport type { CloudAuthService } from \"./cloud-auth\";\n\ninterface ModelListEntry {\n id: string;\n object: string;\n created: number;\n owned_by: string;\n}\n\ninterface ModelListResponse {\n object: string;\n data: ModelListEntry[];\n}\n\nexport interface AvailableModel {\n id: string;\n provider: string;\n name: string;\n createdAt: number;\n}\n\nexport interface ModelsByProvider {\n [provider: string]: AvailableModel[];\n}\n\nconst CACHE_TTL_MS = 30 * 60 * 1000; // 30 minutes\n\nconst PROVIDER_PREFIXES: ReadonlyArray<[string, string]> = [\n [\"gpt-\", \"openai\"],\n [\"o1\", \"openai\"],\n [\"o3\", \"openai\"],\n [\"o4\", \"openai\"],\n [\"dall-e\", \"openai\"],\n [\"whisper\", \"openai\"],\n [\"tts\", \"openai\"],\n [\"claude-\", \"anthropic\"],\n [\"gemini-\", \"google\"],\n [\"llama\", \"meta\"],\n [\"deepseek\", \"deepseek\"],\n [\"grok\", \"xai\"],\n [\"kimi\", \"moonshot\"],\n];\n\nfunction extractProvider(modelId: string): string {\n if (modelId.includes(\"/\")) return modelId.split(\"/\")[0];\n const lower = modelId.toLowerCase();\n for (const [prefix, provider] of PROVIDER_PREFIXES) {\n if (lower.startsWith(prefix)) return provider;\n }\n return \"unknown\";\n}\n\nfunction stripProvider(modelId: string): string {\n if (modelId.includes(\"/\")) {\n return modelId.split(\"/\").slice(1).join(\"/\");\n }\n return modelId;\n}\n\nexport class CloudModelRegistryService extends Service {\n static serviceType = \"CLOUD_MODEL_REGISTRY\";\n capabilityDescription = \"Discovers and caches available AI models from ElizaCloud\";\n\n private models: AvailableModel[] = [];\n private byProvider: ModelsByProvider = {};\n private lastFetchedAt = 0;\n private fetchPromise: Promise<void> | null = null;\n\n static async start(runtime: IAgentRuntime): Promise<Service> {\n const service = new CloudModelRegistryService(runtime);\n await service.initialize();\n return service;\n }\n\n async stop(): Promise<void> {\n this.models = [];\n this.byProvider = {};\n this.lastFetchedAt = 0;\n }\n\n private async initialize(): Promise<void> {\n const auth = this.runtime.getService(\"CLOUD_AUTH\") as CloudAuthService | undefined;\n\n if (!auth?.isAuthenticated()) {\n logger.info(\"[CloudModelRegistry] Auth not available, will fetch models on first access\");\n return;\n }\n\n await this.fetchModels();\n this.validateConfiguredModels();\n }\n\n private async fetchModels(): Promise<void> {\n if (this.fetchPromise) {\n await this.fetchPromise;\n return;\n }\n\n this.fetchPromise = this.doFetchModels();\n await this.fetchPromise;\n this.fetchPromise = null;\n }\n\n private async doFetchModels(): Promise<void> {\n const auth = this.runtime.getService(\"CLOUD_AUTH\") as CloudAuthService | undefined;\n if (!auth?.isAuthenticated()) return;\n\n const client = auth.getClient();\n\n const response = await client.get<ModelListResponse>(\"/models\");\n const entries = response.data ?? [];\n\n this.models = entries.map((entry) => ({\n id: entry.id,\n provider: extractProvider(entry.id),\n name: stripProvider(entry.id),\n createdAt: entry.created,\n }));\n\n this.byProvider = {};\n for (const model of this.models) {\n if (!this.byProvider[model.provider]) {\n this.byProvider[model.provider] = [];\n }\n this.byProvider[model.provider].push(model);\n }\n\n this.lastFetchedAt = Date.now();\n logger.info(\n `[CloudModelRegistry] Loaded ${this.models.length} models from ${Object.keys(this.byProvider).length} providers`\n );\n }\n\n private validateConfiguredModels(): void {\n if (this.models.length === 0) return;\n\n const modelIds = new Set(this.models.map((m) => m.id));\n const nameSet = new Set(this.models.map((m) => m.name));\n\n const settingsToCheck = [\n { key: \"ELIZAOS_CLOUD_NANO_MODEL\", label: \"nano model\" },\n { key: \"ELIZAOS_CLOUD_MEDIUM_MODEL\", label: \"medium model\" },\n { key: \"ELIZAOS_CLOUD_SMALL_MODEL\", label: \"small model\" },\n { key: \"ELIZAOS_CLOUD_LARGE_MODEL\", label: \"large model\" },\n { key: \"ELIZAOS_CLOUD_MEGA_MODEL\", label: \"mega model\" },\n {\n key: \"ELIZAOS_CLOUD_RESPONSE_HANDLER_MODEL\",\n label: \"response handler model\",\n },\n {\n key: \"ELIZAOS_CLOUD_ACTION_PLANNER_MODEL\",\n label: \"action planner model\",\n },\n { key: \"ELIZAOS_CLOUD_RESPONSE_MODEL\", label: \"response model\" },\n { key: \"ELIZAOS_CLOUD_RESEARCH_MODEL\", label: \"research model\" },\n { key: \"ELIZAOS_CLOUD_EMBEDDING_MODEL\", label: \"embedding model\" },\n {\n key: \"ELIZAOS_CLOUD_IMAGE_DESCRIPTION_MODEL\",\n label: \"image description model\",\n },\n {\n key: \"ELIZAOS_CLOUD_IMAGE_GENERATION_MODEL\",\n label: \"image generation model\",\n },\n { key: \"ELIZAOS_CLOUD_TTS_MODEL\", label: \"TTS model\" },\n {\n key: \"ELIZAOS_CLOUD_TRANSCRIPTION_MODEL\",\n label: \"transcription model\",\n },\n ];\n\n for (const { key, label } of settingsToCheck) {\n const value = this.runtime.getSetting(key);\n if (value && typeof value === \"string\") {\n const found = modelIds.has(value) || nameSet.has(value);\n if (!found) {\n logger.warn(\n `[CloudModelRegistry] Configured ${label} \"${value}\" not found in available models. ` +\n \"It may still work if the gateway supports it, but check your configuration.\"\n );\n }\n }\n }\n }\n\n async getAvailableModels(): Promise<AvailableModel[]> {\n if (Date.now() - this.lastFetchedAt > CACHE_TTL_MS) {\n await this.fetchModels();\n }\n return this.models;\n }\n\n async getModelsByProvider(): Promise<ModelsByProvider> {\n if (Date.now() - this.lastFetchedAt > CACHE_TTL_MS) {\n await this.fetchModels();\n }\n return this.byProvider;\n }\n}\n"
5
+ "/** Fetches and caches available models from ElizaCloud. */\n\nimport { type IAgentRuntime, logger, Service } from \"@elizaos/core\";\nimport type { CloudAuthService } from \"./cloud-auth\";\n\ninterface ModelListEntry {\n id: string;\n object: string;\n created: number;\n owned_by: string;\n}\n\ninterface ModelListResponse {\n object: string;\n data: ModelListEntry[];\n}\n\nexport interface AvailableModel {\n id: string;\n provider: string;\n name: string;\n createdAt: number;\n}\n\nexport interface ModelsByProvider {\n [provider: string]: AvailableModel[];\n}\n\nconst CACHE_TTL_MS = 30 * 60 * 1000; // 30 minutes\n\nconst PROVIDER_PREFIXES: ReadonlyArray<[string, string]> = [\n [\"gpt-\", \"openai\"],\n [\"o1\", \"openai\"],\n [\"o3\", \"openai\"],\n [\"o4\", \"openai\"],\n [\"dall-e\", \"openai\"],\n [\"whisper\", \"openai\"],\n [\"tts\", \"openai\"],\n [\"claude-\", \"anthropic\"],\n [\"gemini-\", \"google\"],\n [\"llama\", \"meta\"],\n [\"deepseek\", \"deepseek\"],\n [\"grok\", \"xai\"],\n [\"kimi\", \"moonshot\"],\n];\n\nfunction extractProvider(modelId: string): string {\n if (modelId.includes(\"/\")) return modelId.split(\"/\")[0];\n const lower = modelId.toLowerCase();\n for (const [prefix, provider] of PROVIDER_PREFIXES) {\n if (lower.startsWith(prefix)) return provider;\n }\n return \"unknown\";\n}\n\nfunction stripProvider(modelId: string): string {\n if (modelId.includes(\"/\")) {\n return modelId.split(\"/\").slice(1).join(\"/\");\n }\n return modelId;\n}\n\nexport class CloudModelRegistryService extends Service {\n static serviceType = \"CLOUD_MODEL_REGISTRY\";\n capabilityDescription = \"Discovers and caches available AI models from ElizaCloud\";\n\n private models: AvailableModel[] = [];\n private byProvider: ModelsByProvider = {};\n private lastFetchedAt = 0;\n private fetchPromise: Promise<void> | null = null;\n\n static async start(runtime: IAgentRuntime): Promise<Service> {\n const service = new CloudModelRegistryService(runtime);\n await service.initialize();\n return service;\n }\n\n async stop(): Promise<void> {\n this.models = [];\n this.byProvider = {};\n this.lastFetchedAt = 0;\n }\n\n private async initialize(): Promise<void> {\n const auth = this.runtime.getService(\"CLOUD_AUTH\") as CloudAuthService | undefined;\n\n if (!auth?.isAuthenticated()) {\n logger.info(\"[CloudModelRegistry] Auth not available, will fetch models on first access\");\n return;\n }\n\n await this.fetchModels();\n this.validateConfiguredModels();\n }\n\n private async fetchModels(): Promise<void> {\n if (this.fetchPromise) {\n await this.fetchPromise;\n return;\n }\n\n this.fetchPromise = this.doFetchModels();\n await this.fetchPromise;\n this.fetchPromise = null;\n }\n\n private async doFetchModels(): Promise<void> {\n const auth = this.runtime.getService(\"CLOUD_AUTH\") as CloudAuthService | undefined;\n if (!auth?.isAuthenticated()) return;\n\n const client = auth.getClient();\n\n const response = await client.get<ModelListResponse>(\"/models\");\n const entries: ModelListEntry[] = response.data ?? [];\n\n this.models = entries.map((entry) => ({\n id: entry.id,\n provider: extractProvider(entry.id),\n name: stripProvider(entry.id),\n createdAt: entry.created,\n }));\n\n this.byProvider = {};\n for (const model of this.models) {\n if (!this.byProvider[model.provider]) {\n this.byProvider[model.provider] = [];\n }\n this.byProvider[model.provider].push(model);\n }\n\n this.lastFetchedAt = Date.now();\n logger.info(\n `[CloudModelRegistry] Loaded ${this.models.length} models from ${Object.keys(this.byProvider).length} providers`\n );\n }\n\n private validateConfiguredModels(): void {\n if (this.models.length === 0) return;\n\n const modelIds = new Set(this.models.map((m) => m.id));\n const nameSet = new Set(this.models.map((m) => m.name));\n\n const settingsToCheck = [\n { key: \"ELIZAOS_CLOUD_NANO_MODEL\", label: \"nano model\" },\n { key: \"ELIZAOS_CLOUD_MEDIUM_MODEL\", label: \"medium model\" },\n { key: \"ELIZAOS_CLOUD_SMALL_MODEL\", label: \"small model\" },\n { key: \"ELIZAOS_CLOUD_LARGE_MODEL\", label: \"large model\" },\n { key: \"ELIZAOS_CLOUD_MEGA_MODEL\", label: \"mega model\" },\n {\n key: \"ELIZAOS_CLOUD_RESPONSE_HANDLER_MODEL\",\n label: \"response handler model\",\n },\n {\n key: \"ELIZAOS_CLOUD_ACTION_PLANNER_MODEL\",\n label: \"action planner model\",\n },\n { key: \"ELIZAOS_CLOUD_RESPONSE_MODEL\", label: \"response model\" },\n { key: \"ELIZAOS_CLOUD_RESEARCH_MODEL\", label: \"research model\" },\n { key: \"ELIZAOS_CLOUD_EMBEDDING_MODEL\", label: \"embedding model\" },\n {\n key: \"ELIZAOS_CLOUD_IMAGE_DESCRIPTION_MODEL\",\n label: \"image description model\",\n },\n {\n key: \"ELIZAOS_CLOUD_IMAGE_GENERATION_MODEL\",\n label: \"image generation model\",\n },\n { key: \"ELIZAOS_CLOUD_TTS_MODEL\", label: \"TTS model\" },\n {\n key: \"ELIZAOS_CLOUD_TRANSCRIPTION_MODEL\",\n label: \"transcription model\",\n },\n ];\n\n for (const { key, label } of settingsToCheck) {\n const value = this.runtime.getSetting(key);\n if (value && typeof value === \"string\") {\n const found = modelIds.has(value) || nameSet.has(value);\n if (!found) {\n logger.warn(\n `[CloudModelRegistry] Configured ${label} \"${value}\" not found in available models. ` +\n \"It may still work if the gateway supports it, but check your configuration.\"\n );\n }\n }\n }\n }\n\n async getAvailableModels(): Promise<AvailableModel[]> {\n if (Date.now() - this.lastFetchedAt > CACHE_TTL_MS) {\n await this.fetchModels();\n }\n return this.models;\n }\n\n async getModelsByProvider(): Promise<ModelsByProvider> {\n if (Date.now() - this.lastFetchedAt > CACHE_TTL_MS) {\n await this.fetchModels();\n }\n return this.byProvider;\n }\n}\n"
6
6
  ],
7
- "mappings": "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",
8
- "debugId": "313128C9445A056E64756E2164756E21",
7
+ "mappings": "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",
8
+ "debugId": "F0F6AE5C4F42960D64756E2164756E21",
9
9
  "names": []
10
10
  }
@@ -26,4 +26,4 @@ export {
26
26
  CloudAuthService
27
27
  };
28
28
 
29
- //# debugId=4A487A0E75C4AD8864756E2164756E21
29
+ //# debugId=AEB88BAC41C7A90664756E2164756E21
@@ -4,6 +4,6 @@
4
4
  "sourcesContent": [
5
5
  ],
6
6
  "mappings": "",
7
- "debugId": "4A487A0E75C4AD8864756E2164756E21",
7
+ "debugId": "AEB88BAC41C7A90664756E2164756E21",
8
8
  "names": []
9
9
  }
@@ -4,6 +4,7 @@
4
4
  * These types mirror the eliza-cloud-v2 database schemas and API contracts
5
5
  * for containers, auth, credits, bridge messaging, and agent state snapshots.
6
6
  */
7
+ export type { CloudCodingAgent, CloudCodingContainerSession, CloudCodingContainerStatus, CloudCodingPatch, CloudCodingPatchFormat, CloudCodingPromotion, CloudCodingSyncDirection, CloudCodingSyncResult, CloudVfsBundle, CloudVfsDeletedFile, CloudVfsFile, CloudVfsFileEncoding, CloudVfsSourceKind, PromoteVfsToCloudContainerRequest, PromoteVfsToCloudContainerResponse, RequestCodingAgentContainerRequest, RequestCodingAgentContainerResponse, SyncCloudCodingContainerRequest, SyncCloudCodingContainerResponse, } from "@elizaos/shared";
7
8
  export type ContainerStatus = "pending" | "building" | "deploying" | "running" | "stopped" | "failed" | "suspended";
8
9
  export type ContainerBillingStatus = "active" | "warning" | "suspended" | "shutdown_pending" | "archived";
9
10
  export type ContainerArchitecture = "arm64" | "x86_64";
@@ -1 +1 @@
1
- {"version":3,"file":"cloud.d.ts","sourceRoot":"","sources":["../../src/types/cloud.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cloud.d.ts","sourceRoot":"","sources":["../../src/types/cloud.ts"],"names":[],"mappings":"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"}
@@ -49,4 +49,4 @@ export {
49
49
  CloudApiError
50
50
  };
51
51
 
52
- //# debugId=B042EE9708AFD91764756E2164756E21
52
+ //# debugId=3B78CBE1E395E9A764756E2164756E21
@@ -2,9 +2,9 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/types/cloud.ts"],
4
4
  "sourcesContent": [
5
- "/**\n * Cloud-specific types for ElizaCloud integration.\n *\n * These types mirror the eliza-cloud-v2 database schemas and API contracts\n * for containers, auth, credits, bridge messaging, and agent state snapshots.\n */\n\n// ─── Container Types ────────────────────────────────────────────────────────\n\nexport type ContainerStatus =\n | \"pending\"\n | \"building\"\n | \"deploying\"\n | \"running\"\n | \"stopped\"\n | \"failed\"\n | \"suspended\";\n\nexport type ContainerBillingStatus =\n | \"active\"\n | \"warning\"\n | \"suspended\"\n | \"shutdown_pending\"\n | \"archived\";\n\nexport type ContainerArchitecture = \"arm64\" | \"x86_64\";\n\nexport interface CloudContainer {\n id: string;\n name: string;\n project_name: string;\n description: string | null;\n organization_id: string;\n user_id: string;\n status: ContainerStatus;\n image_tag: string | null;\n port: number;\n desired_count: number;\n cpu: number;\n memory: number;\n architecture: ContainerArchitecture;\n environment_vars: Record<string, string>;\n health_check_path: string;\n load_balancer_url: string | null;\n ecr_repository_uri: string | null;\n ecr_image_tag: string | null;\n cloudformation_stack_name: string | null;\n billing_status: ContainerBillingStatus;\n total_billed: string;\n last_deployed_at: string | null;\n last_health_check: string | null;\n deployment_log: string | null;\n error_message: string | null;\n metadata: Record<string, unknown>;\n created_at: string;\n updated_at: string;\n}\n\nexport interface CreateContainerRequest {\n name: string;\n project_name: string;\n description?: string;\n port?: number;\n desired_count?: number;\n cpu?: number;\n memory?: number;\n environment_vars?: Record<string, string>;\n health_check_path?: string;\n ecr_image_uri: string;\n ecr_repository_uri?: string;\n image_tag?: string;\n architecture?: ContainerArchitecture;\n}\n\nexport interface CreateContainerResponse {\n success: boolean;\n data: CloudContainer;\n message: string;\n creditsDeducted: number;\n creditsRemaining: number;\n stackName: string;\n polling: {\n endpoint: string;\n intervalMs: number;\n expectedDurationMs: number;\n };\n}\n\nexport interface ContainerListResponse {\n success: boolean;\n data: CloudContainer[];\n}\n\nexport interface ContainerGetResponse {\n success: boolean;\n data: CloudContainer;\n}\n\nexport interface ContainerDeleteResponse {\n success: boolean;\n message?: string;\n}\n\nexport interface ContainerHealthResponse {\n success: boolean;\n data: {\n status: string;\n healthy: boolean;\n lastCheck: string | null;\n uptime: number | null;\n };\n}\n\n// ─── Auth Types ─────────────────────────────────────────────────────────────\n\nexport type DevicePlatform = \"ios\" | \"android\" | \"macos\" | \"windows\" | \"linux\" | \"web\";\n\nexport interface DeviceAuthRequest {\n deviceId: string;\n platform: DevicePlatform;\n appVersion: string;\n deviceName?: string;\n}\n\nexport interface DeviceAuthResponse {\n success: boolean;\n data: {\n apiKey: string;\n userId: string;\n organizationId: string;\n credits: number;\n isNew: boolean;\n };\n}\n\nexport interface CloudCredentials {\n apiKey: string;\n userId: string;\n organizationId: string;\n authenticatedAt: number;\n}\n\n// ─── Credits Types ──────────────────────────────────────────────────────────\n\nexport interface CreditBalanceResponse {\n success: boolean;\n data: {\n balance: number;\n currency: string;\n };\n}\n\nexport interface CreditSummaryResponse {\n success: boolean;\n data: {\n balance: number;\n totalSpent: number;\n totalAdded: number;\n recentTransactions: CreditTransaction[];\n };\n}\n\nexport interface CreditTransaction {\n id: string;\n amount: number;\n description: string;\n type: \"credit\" | \"debit\";\n created_at: string;\n}\n\n// ─── Bridge Types ───────────────────────────────────────────────────────────\n\nexport type BridgeConnectionState = \"disconnected\" | \"connecting\" | \"connected\" | \"reconnecting\";\n\nexport interface BridgeMessage {\n jsonrpc: \"2.0\";\n id?: string | number;\n method?: string;\n params?: Record<string, unknown>;\n result?: unknown;\n error?: BridgeError;\n}\n\nexport interface BridgeError {\n code: number;\n message: string;\n data?: unknown;\n}\n\nexport type BridgeMessageHandler = (message: BridgeMessage) => void;\n\nexport interface BridgeConnection {\n containerId: string;\n state: BridgeConnectionState;\n connectedAt: number | null;\n lastHeartbeat: number | null;\n reconnectAttempts: number;\n}\n\n// ─── Managed Gateway Relay Types ───────────────────────────────────────────\n\nexport interface GatewayRelaySession {\n id: string;\n organizationId: string;\n userId: string;\n runtimeAgentId: string;\n agentName: string | null;\n platform: \"local-runtime\";\n createdAt: string;\n lastSeenAt: string;\n}\n\nexport interface GatewayRelayRequest {\n jsonrpc: \"2.0\";\n id?: string | number;\n method: string;\n params?: Record<string, unknown>;\n}\n\nexport interface GatewayRelayResponse {\n jsonrpc: \"2.0\";\n id?: string | number;\n result?: Record<string, unknown>;\n error?: BridgeError;\n}\n\nexport interface GatewayRelayRequestEnvelope {\n requestId: string;\n rpc: GatewayRelayRequest;\n queuedAt: string;\n}\n\nexport interface RegisterGatewayRelaySessionResponse {\n success: boolean;\n data: {\n session: GatewayRelaySession;\n };\n}\n\nexport interface PollGatewayRelayResponse {\n success: boolean;\n data: {\n request: GatewayRelayRequestEnvelope | null;\n };\n}\n\n// ─── Snapshot / Backup Types ────────────────────────────────────────────────\n\nexport type SnapshotType = \"manual\" | \"auto\" | \"pre-eviction\";\n\nexport interface AgentSnapshot {\n id: string;\n containerId: string;\n organizationId: string;\n snapshotType: SnapshotType;\n storageUrl: string;\n sizeBytes: number;\n agentConfig: Record<string, unknown>;\n metadata: Record<string, unknown>;\n created_at: string;\n}\n\nexport interface CreateSnapshotRequest {\n snapshotType?: SnapshotType;\n metadata?: Record<string, unknown>;\n}\n\nexport interface CreateSnapshotResponse {\n success: boolean;\n data: AgentSnapshot;\n}\n\nexport interface SnapshotListResponse {\n success: boolean;\n data: AgentSnapshot[];\n}\n\nexport interface RestoreSnapshotRequest {\n snapshotId: string;\n}\n\nexport interface RestoreSnapshotResponse {\n success: boolean;\n message: string;\n}\n\n// ─── Cloud Config Types ─────────────────────────────────────────────────────\n\nexport type InferenceMode = \"cloud\" | \"byok\" | \"local\";\n\nexport interface CloudPluginConfig {\n /** Enable ElizaCloud integration. */\n enabled: boolean;\n /** ElizaCloud API base URL. */\n baseUrl: string;\n /** Stored API key for authenticated requests. */\n apiKey?: string;\n /** Device ID used for auto-signup authentication. */\n deviceId?: string;\n /** Platform identifier. */\n platform?: DevicePlatform;\n /** Inference mode: cloud (ElizaCloud proxied), byok (user keys), local (no cloud). */\n inferenceMode: InferenceMode;\n /** Auto-deploy agents to cloud on creation. */\n autoProvision: boolean;\n /** Bridge reconnection settings. */\n bridge: {\n reconnectIntervalMs: number;\n maxReconnectAttempts: number;\n heartbeatIntervalMs: number;\n };\n /** Auto-backup settings. */\n backup: {\n autoBackupIntervalMs: number;\n maxSnapshots: number;\n };\n /** Default container settings for new deployments. */\n container: {\n defaultImage: string;\n defaultArchitecture: ContainerArchitecture;\n defaultCpu: number;\n defaultMemory: number;\n defaultPort: number;\n };\n}\n\nexport const DEFAULT_CLOUD_CONFIG: CloudPluginConfig = {\n enabled: false,\n baseUrl: \"https://www.elizacloud.ai/api/v1\",\n inferenceMode: \"cloud\",\n autoProvision: false,\n bridge: {\n reconnectIntervalMs: 3000,\n maxReconnectAttempts: 20,\n heartbeatIntervalMs: 30_000,\n },\n backup: {\n autoBackupIntervalMs: 3_600_000, // 1 hour\n maxSnapshots: 10,\n },\n container: {\n defaultImage: \"elizaos/agent:latest\",\n defaultArchitecture: \"arm64\",\n defaultCpu: 1792,\n defaultMemory: 1792,\n defaultPort: 3000,\n },\n};\n\n// ─── API Error Types ────────────────────────────────────────────────────────\n\nexport type { CloudApiErrorBody } from \"@elizaos/cloud-sdk\";\nexport {\n CloudApiError,\n InsufficientCreditsError,\n} from \"@elizaos/cloud-sdk\";\n"
5
+ "/**\n * Cloud-specific types for ElizaCloud integration.\n *\n * These types mirror the eliza-cloud-v2 database schemas and API contracts\n * for containers, auth, credits, bridge messaging, and agent state snapshots.\n */\n\nexport type {\n CloudCodingAgent,\n CloudCodingContainerSession,\n CloudCodingContainerStatus,\n CloudCodingPatch,\n CloudCodingPatchFormat,\n CloudCodingPromotion,\n CloudCodingSyncDirection,\n CloudCodingSyncResult,\n CloudVfsBundle,\n CloudVfsDeletedFile,\n CloudVfsFile,\n CloudVfsFileEncoding,\n CloudVfsSourceKind,\n PromoteVfsToCloudContainerRequest,\n PromoteVfsToCloudContainerResponse,\n RequestCodingAgentContainerRequest,\n RequestCodingAgentContainerResponse,\n SyncCloudCodingContainerRequest,\n SyncCloudCodingContainerResponse,\n} from \"@elizaos/shared\";\n\n// ─── Container Types ────────────────────────────────────────────────────────\n\nexport type ContainerStatus =\n | \"pending\"\n | \"building\"\n | \"deploying\"\n | \"running\"\n | \"stopped\"\n | \"failed\"\n | \"suspended\";\n\nexport type ContainerBillingStatus =\n | \"active\"\n | \"warning\"\n | \"suspended\"\n | \"shutdown_pending\"\n | \"archived\";\n\nexport type ContainerArchitecture = \"arm64\" | \"x86_64\";\n\nexport interface CloudContainer {\n id: string;\n name: string;\n project_name: string;\n description: string | null;\n organization_id: string;\n user_id: string;\n status: ContainerStatus;\n image_tag: string | null;\n port: number;\n desired_count: number;\n cpu: number;\n memory: number;\n architecture: ContainerArchitecture;\n environment_vars: Record<string, string>;\n health_check_path: string;\n load_balancer_url: string | null;\n ecr_repository_uri: string | null;\n ecr_image_tag: string | null;\n cloudformation_stack_name: string | null;\n billing_status: ContainerBillingStatus;\n total_billed: string;\n last_deployed_at: string | null;\n last_health_check: string | null;\n deployment_log: string | null;\n error_message: string | null;\n metadata: Record<string, unknown>;\n created_at: string;\n updated_at: string;\n}\n\nexport interface CreateContainerRequest {\n name: string;\n project_name: string;\n description?: string;\n port?: number;\n desired_count?: number;\n cpu?: number;\n memory?: number;\n environment_vars?: Record<string, string>;\n health_check_path?: string;\n ecr_image_uri: string;\n ecr_repository_uri?: string;\n image_tag?: string;\n architecture?: ContainerArchitecture;\n}\n\nexport interface CreateContainerResponse {\n success: boolean;\n data: CloudContainer;\n message: string;\n creditsDeducted: number;\n creditsRemaining: number;\n stackName: string;\n polling: {\n endpoint: string;\n intervalMs: number;\n expectedDurationMs: number;\n };\n}\n\nexport interface ContainerListResponse {\n success: boolean;\n data: CloudContainer[];\n}\n\nexport interface ContainerGetResponse {\n success: boolean;\n data: CloudContainer;\n}\n\nexport interface ContainerDeleteResponse {\n success: boolean;\n message?: string;\n}\n\nexport interface ContainerHealthResponse {\n success: boolean;\n data: {\n status: string;\n healthy: boolean;\n lastCheck: string | null;\n uptime: number | null;\n };\n}\n\n// ─── Auth Types ─────────────────────────────────────────────────────────────\n\nexport type DevicePlatform = \"ios\" | \"android\" | \"macos\" | \"windows\" | \"linux\" | \"web\";\n\nexport interface DeviceAuthRequest {\n deviceId: string;\n platform: DevicePlatform;\n appVersion: string;\n deviceName?: string;\n}\n\nexport interface DeviceAuthResponse {\n success: boolean;\n data: {\n apiKey: string;\n userId: string;\n organizationId: string;\n credits: number;\n isNew: boolean;\n };\n}\n\nexport interface CloudCredentials {\n apiKey: string;\n userId: string;\n organizationId: string;\n authenticatedAt: number;\n}\n\n// ─── Credits Types ──────────────────────────────────────────────────────────\n\nexport interface CreditBalanceResponse {\n success: boolean;\n data: {\n balance: number;\n currency: string;\n };\n}\n\nexport interface CreditSummaryResponse {\n success: boolean;\n data: {\n balance: number;\n totalSpent: number;\n totalAdded: number;\n recentTransactions: CreditTransaction[];\n };\n}\n\nexport interface CreditTransaction {\n id: string;\n amount: number;\n description: string;\n type: \"credit\" | \"debit\";\n created_at: string;\n}\n\n// ─── Bridge Types ───────────────────────────────────────────────────────────\n\nexport type BridgeConnectionState = \"disconnected\" | \"connecting\" | \"connected\" | \"reconnecting\";\n\nexport interface BridgeMessage {\n jsonrpc: \"2.0\";\n id?: string | number;\n method?: string;\n params?: Record<string, unknown>;\n result?: unknown;\n error?: BridgeError;\n}\n\nexport interface BridgeError {\n code: number;\n message: string;\n data?: unknown;\n}\n\nexport type BridgeMessageHandler = (message: BridgeMessage) => void;\n\nexport interface BridgeConnection {\n containerId: string;\n state: BridgeConnectionState;\n connectedAt: number | null;\n lastHeartbeat: number | null;\n reconnectAttempts: number;\n}\n\n// ─── Managed Gateway Relay Types ───────────────────────────────────────────\n\nexport interface GatewayRelaySession {\n id: string;\n organizationId: string;\n userId: string;\n runtimeAgentId: string;\n agentName: string | null;\n platform: \"local-runtime\";\n createdAt: string;\n lastSeenAt: string;\n}\n\nexport interface GatewayRelayRequest {\n jsonrpc: \"2.0\";\n id?: string | number;\n method: string;\n params?: Record<string, unknown>;\n}\n\nexport interface GatewayRelayResponse {\n jsonrpc: \"2.0\";\n id?: string | number;\n result?: Record<string, unknown>;\n error?: BridgeError;\n}\n\nexport interface GatewayRelayRequestEnvelope {\n requestId: string;\n rpc: GatewayRelayRequest;\n queuedAt: string;\n}\n\nexport interface RegisterGatewayRelaySessionResponse {\n success: boolean;\n data: {\n session: GatewayRelaySession;\n };\n}\n\nexport interface PollGatewayRelayResponse {\n success: boolean;\n data: {\n request: GatewayRelayRequestEnvelope | null;\n };\n}\n\n// ─── Snapshot / Backup Types ────────────────────────────────────────────────\n\nexport type SnapshotType = \"manual\" | \"auto\" | \"pre-eviction\";\n\nexport interface AgentSnapshot {\n id: string;\n containerId: string;\n organizationId: string;\n snapshotType: SnapshotType;\n storageUrl: string;\n sizeBytes: number;\n agentConfig: Record<string, unknown>;\n metadata: Record<string, unknown>;\n created_at: string;\n}\n\nexport interface CreateSnapshotRequest {\n snapshotType?: SnapshotType;\n metadata?: Record<string, unknown>;\n}\n\nexport interface CreateSnapshotResponse {\n success: boolean;\n data: AgentSnapshot;\n}\n\nexport interface SnapshotListResponse {\n success: boolean;\n data: AgentSnapshot[];\n}\n\nexport interface RestoreSnapshotRequest {\n snapshotId: string;\n}\n\nexport interface RestoreSnapshotResponse {\n success: boolean;\n message: string;\n}\n\n// ─── Cloud Config Types ─────────────────────────────────────────────────────\n\nexport type InferenceMode = \"cloud\" | \"byok\" | \"local\";\n\nexport interface CloudPluginConfig {\n /** Enable ElizaCloud integration. */\n enabled: boolean;\n /** ElizaCloud API base URL. */\n baseUrl: string;\n /** Stored API key for authenticated requests. */\n apiKey?: string;\n /** Device ID used for auto-signup authentication. */\n deviceId?: string;\n /** Platform identifier. */\n platform?: DevicePlatform;\n /** Inference mode: cloud (ElizaCloud proxied), byok (user keys), local (no cloud). */\n inferenceMode: InferenceMode;\n /** Auto-deploy agents to cloud on creation. */\n autoProvision: boolean;\n /** Bridge reconnection settings. */\n bridge: {\n reconnectIntervalMs: number;\n maxReconnectAttempts: number;\n heartbeatIntervalMs: number;\n };\n /** Auto-backup settings. */\n backup: {\n autoBackupIntervalMs: number;\n maxSnapshots: number;\n };\n /** Default container settings for new deployments. */\n container: {\n defaultImage: string;\n defaultArchitecture: ContainerArchitecture;\n defaultCpu: number;\n defaultMemory: number;\n defaultPort: number;\n };\n}\n\nexport const DEFAULT_CLOUD_CONFIG: CloudPluginConfig = {\n enabled: false,\n baseUrl: \"https://www.elizacloud.ai/api/v1\",\n inferenceMode: \"cloud\",\n autoProvision: false,\n bridge: {\n reconnectIntervalMs: 3000,\n maxReconnectAttempts: 20,\n heartbeatIntervalMs: 30_000,\n },\n backup: {\n autoBackupIntervalMs: 3_600_000, // 1 hour\n maxSnapshots: 10,\n },\n container: {\n defaultImage: \"elizaos/agent:latest\",\n defaultArchitecture: \"arm64\",\n defaultCpu: 1792,\n defaultMemory: 1792,\n defaultPort: 3000,\n },\n};\n\n// ─── API Error Types ────────────────────────────────────────────────────────\n\nexport type { CloudApiErrorBody } from \"@elizaos/cloud-sdk\";\nexport {\n CloudApiError,\n InsufficientCreditsError,\n} from \"@elizaos/cloud-sdk\";\n"
6
6
  ],
7
- "mappings": ";;;;;;;;;;;;;;;;;;;AAgWA;AAAA;AAAA;AAAA;AA1BO,IAAM,uBAA0C;AAAA,EACrD,SAAS;AAAA,EACT,SAAS;AAAA,EACT,eAAe;AAAA,EACf,eAAe;AAAA,EACf,QAAQ;AAAA,IACN,qBAAqB;AAAA,IACrB,sBAAsB;AAAA,IACtB,qBAAqB;AAAA,EACvB;AAAA,EACA,QAAQ;AAAA,IACN,sBAAsB;AAAA,IACtB,cAAc;AAAA,EAChB;AAAA,EACA,WAAW;AAAA,IACT,cAAc;AAAA,IACd,qBAAqB;AAAA,IACrB,YAAY;AAAA,IACZ,eAAe;AAAA,IACf,aAAa;AAAA,EACf;AACF;",
8
- "debugId": "B042EE9708AFD91764756E2164756E21",
7
+ "mappings": ";;;;;;;;;;;;;;;;;;;AAsXA;AAAA;AAAA;AAAA;AA1BO,IAAM,uBAA0C;AAAA,EACrD,SAAS;AAAA,EACT,SAAS;AAAA,EACT,eAAe;AAAA,EACf,eAAe;AAAA,EACf,QAAQ;AAAA,IACN,qBAAqB;AAAA,IACrB,sBAAsB;AAAA,IACtB,qBAAqB;AAAA,EACvB;AAAA,EACA,QAAQ;AAAA,IACN,sBAAsB;AAAA,IACtB,cAAc;AAAA,EAChB;AAAA,EACA,WAAW;AAAA,IACT,cAAc;AAAA,IACd,qBAAqB;AAAA,IACrB,YAAY;AAAA,IACZ,eAAe;AAAA,IACf,aAAa;AAAA,EACf;AACF;",
8
+ "debugId": "3B78CBE1E395E9A764756E2164756E21",
9
9
  "names": []
10
10
  }