@elizaos/plugin-elizacloud 2.0.0-alpha.8 → 2.0.3-beta.2

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 (453) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +196 -0
  3. package/auto-enable.ts +22 -0
  4. package/dist/browser/index.browser.js +2 -21
  5. package/dist/browser/index.browser.js.map +5 -38
  6. package/dist/cjs/index.d.ts +2 -2
  7. package/dist/cjs/index.node.cjs +9122 -2264
  8. package/dist/cjs/index.node.js.map +68 -30
  9. package/dist/cloud/auth-service-types.d.ts +8 -0
  10. package/dist/cloud/auth-service-types.d.ts.map +1 -0
  11. package/dist/cloud/auth-service-types.js +36 -0
  12. package/dist/cloud/auth-service-types.js.map +10 -0
  13. package/dist/cloud/auth.d.ts +19 -0
  14. package/dist/cloud/auth.d.ts.map +1 -0
  15. package/dist/cloud/auth.js +283 -0
  16. package/dist/cloud/auth.js.map +12 -0
  17. package/dist/cloud/backup.d.ts +18 -0
  18. package/dist/cloud/backup.d.ts.map +1 -0
  19. package/dist/cloud/backup.js +63 -0
  20. package/dist/cloud/backup.js.map +10 -0
  21. package/dist/cloud/base-url.d.ts +7 -0
  22. package/dist/cloud/base-url.d.ts.map +1 -0
  23. package/dist/cloud/base-url.js +29 -0
  24. package/dist/cloud/base-url.js.map +10 -0
  25. package/dist/cloud/bridge-client.d.ts +126 -0
  26. package/dist/cloud/bridge-client.d.ts.map +1 -0
  27. package/dist/cloud/bridge-client.js +384 -0
  28. package/dist/cloud/bridge-client.js.map +11 -0
  29. package/dist/cloud/clack-observer.d.ts +35 -0
  30. package/dist/cloud/clack-observer.d.ts.map +1 -0
  31. package/dist/cloud/clack-observer.js +143 -0
  32. package/dist/cloud/clack-observer.js.map +10 -0
  33. package/dist/cloud/cloud-api-key.d.ts +26 -0
  34. package/dist/cloud/cloud-api-key.d.ts.map +1 -0
  35. package/dist/cloud/cloud-api-key.js +60 -0
  36. package/dist/cloud/cloud-api-key.js.map +10 -0
  37. package/dist/cloud/cloud-manager.d.ts +33 -0
  38. package/dist/cloud/cloud-manager.d.ts.map +1 -0
  39. package/dist/cloud/cloud-manager.js +806 -0
  40. package/dist/cloud/cloud-manager.js.map +16 -0
  41. package/dist/cloud/cloud-proxy.d.ts +20 -0
  42. package/dist/cloud/cloud-proxy.d.ts.map +1 -0
  43. package/dist/cloud/cloud-proxy.js +54 -0
  44. package/dist/cloud/cloud-proxy.js.map +10 -0
  45. package/dist/cloud/cloud-wallet.d.ts +94 -0
  46. package/dist/cloud/cloud-wallet.d.ts.map +1 -0
  47. package/dist/cloud/cloud-wallet.js +362 -0
  48. package/dist/cloud/cloud-wallet.js.map +13 -0
  49. package/dist/cloud/duffel-client.d.ts +181 -0
  50. package/dist/cloud/duffel-client.d.ts.map +1 -0
  51. package/dist/cloud/duffel-client.js +506 -0
  52. package/dist/cloud/duffel-client.js.map +11 -0
  53. package/dist/cloud/index.d.ts +15 -0
  54. package/dist/cloud/index.d.ts.map +1 -0
  55. package/dist/cloud/index.js +908 -0
  56. package/dist/cloud/index.js.map +15 -0
  57. package/dist/cloud/lifeops-schedule-sync-client.d.ts +43 -0
  58. package/dist/cloud/lifeops-schedule-sync-client.d.ts.map +1 -0
  59. package/dist/cloud/lifeops-schedule-sync-client.js +180 -0
  60. package/dist/cloud/lifeops-schedule-sync-client.js.map +11 -0
  61. package/dist/cloud/lifeops-schedule-sync-contracts.d.ts +89 -0
  62. package/dist/cloud/lifeops-schedule-sync-contracts.d.ts.map +1 -0
  63. package/dist/cloud/lifeops-schedule-sync-contracts.js +39 -0
  64. package/dist/cloud/lifeops-schedule-sync-contracts.js.map +10 -0
  65. package/dist/cloud/managed-payment-clients.d.ts +166 -0
  66. package/dist/cloud/managed-payment-clients.d.ts.map +1 -0
  67. package/dist/cloud/managed-payment-clients.js +238 -0
  68. package/dist/cloud/managed-payment-clients.js.map +11 -0
  69. package/dist/cloud/null-observer.d.ts +35 -0
  70. package/dist/cloud/null-observer.d.ts.map +1 -0
  71. package/dist/cloud/null-observer.js +45 -0
  72. package/dist/cloud/null-observer.js.map +10 -0
  73. package/dist/cloud/reconnect.d.ts +26 -0
  74. package/dist/cloud/reconnect.d.ts.map +1 -0
  75. package/dist/cloud/reconnect.js +104 -0
  76. package/dist/cloud/reconnect.js.map +10 -0
  77. package/dist/cloud/setup-observer.d.ts +98 -0
  78. package/dist/cloud/setup-observer.d.ts.map +1 -0
  79. package/dist/cloud/setup-observer.js +2 -0
  80. package/dist/cloud/setup-observer.js.map +9 -0
  81. package/dist/cloud/validate-url.d.ts +2 -0
  82. package/dist/cloud/validate-url.d.ts.map +1 -0
  83. package/dist/cloud/validate-url.js +175 -0
  84. package/dist/cloud/validate-url.js.map +10 -0
  85. package/dist/cloud/x402-payment-handler.d.ts +85 -0
  86. package/dist/cloud/x402-payment-handler.d.ts.map +1 -0
  87. package/dist/cloud/x402-payment-handler.js +119 -0
  88. package/dist/cloud/x402-payment-handler.js.map +10 -0
  89. package/dist/cloud-providers/cloud-status.d.ts.map +1 -1
  90. package/dist/cloud-providers/cloud-status.js +78 -0
  91. package/dist/cloud-providers/cloud-status.js.map +10 -0
  92. package/dist/cloud-providers/container-health.d.ts.map +1 -1
  93. package/dist/cloud-providers/container-health.js +74 -0
  94. package/dist/cloud-providers/container-health.js.map +10 -0
  95. package/dist/cloud-providers/credit-balance.d.ts.map +1 -1
  96. package/dist/cloud-providers/credit-balance.js +85 -0
  97. package/dist/cloud-providers/credit-balance.js.map +10 -0
  98. package/dist/cloud-providers/index.d.ts.map +1 -1
  99. package/dist/cloud-providers/index.js +24 -0
  100. package/dist/cloud-providers/index.js.map +9 -0
  101. package/dist/cloud-providers/model-registry.d.ts.map +1 -1
  102. package/dist/cloud-providers/model-registry.js +71 -0
  103. package/dist/cloud-providers/model-registry.js.map +10 -0
  104. package/dist/cloud-setup.d.ts +36 -0
  105. package/dist/cloud-setup.d.ts.map +1 -0
  106. package/dist/cloud-setup.js +883 -0
  107. package/dist/cloud-setup.js.map +14 -0
  108. package/dist/cloud-voice-catalog.d.ts +65 -0
  109. package/dist/cloud-voice-catalog.d.ts.map +1 -0
  110. package/dist/cloud-voice-catalog.js +278 -0
  111. package/dist/cloud-voice-catalog.js.map +12 -0
  112. package/dist/index.browser.d.ts +15 -3
  113. package/dist/index.browser.d.ts.map +1 -1
  114. package/dist/index.d.ts +24 -0
  115. package/dist/index.d.ts.map +1 -1
  116. package/dist/index.js +9868 -0
  117. package/dist/index.js.map +76 -0
  118. package/dist/index.node.d.ts +21 -2
  119. package/dist/index.node.d.ts.map +1 -1
  120. package/dist/init.d.ts.map +1 -1
  121. package/dist/init.js +182 -0
  122. package/dist/init.js.map +12 -0
  123. package/dist/lib/cloud-connection.d.ts +77 -0
  124. package/dist/lib/cloud-connection.d.ts.map +1 -0
  125. package/dist/lib/cloud-connection.js +654 -0
  126. package/dist/lib/cloud-connection.js.map +14 -0
  127. package/dist/lib/cloud-secrets.d.ts +10 -0
  128. package/dist/lib/cloud-secrets.d.ts.map +1 -0
  129. package/dist/lib/cloud-secrets.js +36 -0
  130. package/dist/lib/cloud-secrets.js.map +10 -0
  131. package/dist/lib/config-env.d.ts +5 -0
  132. package/dist/lib/config-env.d.ts.map +1 -0
  133. package/dist/lib/config-env.js +191 -0
  134. package/dist/lib/config-env.js.map +11 -0
  135. package/dist/lib/config-like.d.ts +40 -0
  136. package/dist/lib/config-like.d.ts.map +1 -0
  137. package/dist/lib/config-like.js +103 -0
  138. package/dist/lib/config-like.js.map +10 -0
  139. package/dist/lib/credential-type-map.d.ts +53 -0
  140. package/dist/lib/credential-type-map.d.ts.map +1 -0
  141. package/dist/lib/credential-type-map.js +88 -0
  142. package/dist/lib/credential-type-map.js.map +10 -0
  143. package/dist/lib/feature-flags.d.ts +2 -0
  144. package/dist/lib/feature-flags.d.ts.map +1 -0
  145. package/dist/lib/feature-flags.js +40 -0
  146. package/dist/lib/feature-flags.js.map +10 -0
  147. package/dist/lib/http.d.ts +11 -0
  148. package/dist/lib/http.d.ts.map +1 -0
  149. package/dist/lib/http.js +107 -0
  150. package/dist/lib/http.js.map +10 -0
  151. package/dist/lib/server-cloud-tts.d.ts +21 -0
  152. package/dist/lib/server-cloud-tts.d.ts.map +1 -0
  153. package/dist/lib/server-cloud-tts.js +251 -0
  154. package/dist/lib/server-cloud-tts.js.map +10 -0
  155. package/dist/lib/state-paths.d.ts +4 -0
  156. package/dist/lib/state-paths.d.ts.map +1 -0
  157. package/dist/lib/state-paths.js +52 -0
  158. package/dist/lib/state-paths.js.map +10 -0
  159. package/dist/lib/tts-debug.d.ts +6 -0
  160. package/dist/lib/tts-debug.d.ts.map +1 -0
  161. package/dist/lib/tts-debug.js +24 -0
  162. package/dist/lib/tts-debug.js.map +9 -0
  163. package/dist/models/embeddings.d.ts +7 -0
  164. package/dist/models/embeddings.d.ts.map +1 -1
  165. package/dist/models/embeddings.js +341 -0
  166. package/dist/models/embeddings.js.map +13 -0
  167. package/dist/models/image.d.ts.map +1 -1
  168. package/dist/models/image.js +401 -0
  169. package/dist/models/image.js.map +14 -0
  170. package/dist/models/index.d.ts +1 -2
  171. package/dist/models/index.d.ts.map +1 -1
  172. package/dist/models/index.js +1906 -0
  173. package/dist/models/index.js.map +19 -0
  174. package/dist/models/research.d.ts.map +1 -1
  175. package/dist/models/research.js +341 -0
  176. package/dist/models/research.js.map +13 -0
  177. package/dist/models/speech.d.ts +61 -3
  178. package/dist/models/speech.d.ts.map +1 -1
  179. package/dist/models/speech.js +429 -0
  180. package/dist/models/speech.js.map +13 -0
  181. package/dist/models/text.d.ts +118 -3
  182. package/dist/models/text.d.ts.map +1 -1
  183. package/dist/models/text.js +1174 -0
  184. package/dist/models/text.js.map +14 -0
  185. package/dist/models/tokenization.d.ts.map +1 -1
  186. package/dist/models/tokenization.js +65 -0
  187. package/dist/models/tokenization.js.map +10 -0
  188. package/dist/models/transcription.d.ts.map +1 -1
  189. package/dist/models/transcription.js +297 -0
  190. package/dist/models/transcription.js.map +13 -0
  191. package/dist/node/index.d.ts +2 -2
  192. package/dist/node/index.node.js +9198 -2293
  193. package/dist/node/index.node.js.map +68 -30
  194. package/dist/plugin.d.ts +20 -0
  195. package/dist/plugin.d.ts.map +1 -0
  196. package/dist/plugin.js +2937 -0
  197. package/dist/plugin.js.map +28 -0
  198. package/dist/providers/openai.d.ts.map +1 -1
  199. package/dist/providers/openai.js +136 -0
  200. package/dist/providers/openai.js.map +11 -0
  201. package/dist/register-routes.d.ts +2 -0
  202. package/dist/register-routes.d.ts.map +1 -0
  203. package/dist/register-routes.js +2938 -0
  204. package/dist/register-routes.js.map +29 -0
  205. package/dist/routes/cloud-billing-routes.d.ts +9 -0
  206. package/dist/routes/cloud-billing-routes.d.ts.map +1 -0
  207. package/dist/routes/cloud-billing-routes.js +764 -0
  208. package/dist/routes/cloud-billing-routes.js.map +15 -0
  209. package/dist/routes/cloud-coding-container-routes.d.ts +8 -0
  210. package/dist/routes/cloud-coding-container-routes.d.ts.map +1 -0
  211. package/dist/routes/cloud-coding-container-routes.js +214 -0
  212. package/dist/routes/cloud-coding-container-routes.js.map +11 -0
  213. package/dist/routes/cloud-compat-routes.d.ts +10 -0
  214. package/dist/routes/cloud-compat-routes.d.ts.map +1 -0
  215. package/dist/routes/cloud-compat-routes.js +495 -0
  216. package/dist/routes/cloud-compat-routes.js.map +15 -0
  217. package/dist/routes/cloud-features-routes.d.ts +9 -0
  218. package/dist/routes/cloud-features-routes.d.ts.map +1 -0
  219. package/dist/routes/cloud-features-routes.js +124 -0
  220. package/dist/routes/cloud-features-routes.js.map +11 -0
  221. package/dist/routes/cloud-provisioning.d.ts +14 -0
  222. package/dist/routes/cloud-provisioning.d.ts.map +1 -0
  223. package/dist/routes/cloud-provisioning.js +37 -0
  224. package/dist/routes/cloud-provisioning.js.map +10 -0
  225. package/dist/routes/cloud-relay-routes.d.ts +23 -0
  226. package/dist/routes/cloud-relay-routes.d.ts.map +1 -0
  227. package/dist/routes/cloud-relay-routes.js +142 -0
  228. package/dist/routes/cloud-relay-routes.js.map +11 -0
  229. package/dist/routes/cloud-routes-autonomous.d.ts +82 -0
  230. package/dist/routes/cloud-routes-autonomous.d.ts.map +1 -0
  231. package/dist/routes/cloud-routes-autonomous.js +1252 -0
  232. package/dist/routes/cloud-routes-autonomous.js.map +18 -0
  233. package/dist/routes/cloud-routes.d.ts +35 -0
  234. package/dist/routes/cloud-routes.d.ts.map +1 -0
  235. package/dist/routes/cloud-routes.js +2173 -0
  236. package/dist/routes/cloud-routes.js.map +23 -0
  237. package/dist/routes/cloud-status-routes-autonomous.d.ts +14 -0
  238. package/dist/routes/cloud-status-routes-autonomous.d.ts.map +1 -0
  239. package/dist/routes/cloud-status-routes-autonomous.js +349 -0
  240. package/dist/routes/cloud-status-routes-autonomous.js.map +13 -0
  241. package/dist/routes/cloud-status-routes.d.ts +4 -0
  242. package/dist/routes/cloud-status-routes.d.ts.map +1 -0
  243. package/dist/routes/cloud-status-routes.js +695 -0
  244. package/dist/routes/cloud-status-routes.js.map +15 -0
  245. package/dist/routes/home-remote-runner-access-url.d.ts +16 -0
  246. package/dist/routes/home-remote-runner-access-url.d.ts.map +1 -0
  247. package/dist/routes/home-remote-runner-access-url.js +91 -0
  248. package/dist/routes/home-remote-runner-access-url.js.map +10 -0
  249. package/dist/routes/travel-provider-relay-routes.d.ts +9 -0
  250. package/dist/routes/travel-provider-relay-routes.d.ts.map +1 -0
  251. package/dist/routes/travel-provider-relay-routes.js +358 -0
  252. package/dist/routes/travel-provider-relay-routes.js.map +14 -0
  253. package/dist/services/cloud-auth.d.ts +140 -5
  254. package/dist/services/cloud-auth.d.ts.map +1 -1
  255. package/dist/services/cloud-auth.js +368 -0
  256. package/dist/services/cloud-auth.js.map +12 -0
  257. package/dist/services/cloud-backup.d.ts.map +1 -1
  258. package/dist/services/cloud-backup.js +176 -0
  259. package/dist/services/cloud-backup.js.map +11 -0
  260. package/dist/services/cloud-bootstrap.d.ts +38 -0
  261. package/dist/services/cloud-bootstrap.d.ts.map +1 -0
  262. package/dist/services/cloud-bootstrap.js +84 -0
  263. package/dist/services/cloud-bootstrap.js.map +10 -0
  264. package/dist/services/cloud-bridge.d.ts +1 -1
  265. package/dist/services/cloud-bridge.d.ts.map +1 -1
  266. package/dist/services/cloud-bridge.js +308 -0
  267. package/dist/services/cloud-bridge.js.map +11 -0
  268. package/dist/services/cloud-container.d.ts +5 -1
  269. package/dist/services/cloud-container.d.ts.map +1 -1
  270. package/dist/services/cloud-container.js +292 -0
  271. package/dist/services/cloud-container.js.map +11 -0
  272. package/dist/services/cloud-credential-provider.d.ts +55 -0
  273. package/dist/services/cloud-credential-provider.d.ts.map +1 -0
  274. package/dist/services/cloud-credential-provider.js +190 -0
  275. package/dist/services/cloud-credential-provider.js.map +11 -0
  276. package/dist/services/cloud-managed-gateway-relay.d.ts +38 -0
  277. package/dist/services/cloud-managed-gateway-relay.d.ts.map +1 -0
  278. package/dist/services/cloud-managed-gateway-relay.js +479 -0
  279. package/dist/services/cloud-managed-gateway-relay.js.map +10 -0
  280. package/dist/services/cloud-model-registry.d.ts.map +1 -1
  281. package/dist/services/cloud-model-registry.js +175 -0
  282. package/dist/services/cloud-model-registry.js.map +10 -0
  283. package/dist/services/index.d.ts +3 -1
  284. package/dist/services/index.d.ts.map +1 -1
  285. package/dist/services/index.js +29 -0
  286. package/dist/services/index.js.map +9 -0
  287. package/dist/types/cloud.d.ts +42 -19
  288. package/dist/types/cloud.d.ts.map +1 -1
  289. package/dist/types/cloud.js +52 -0
  290. package/dist/types/cloud.js.map +10 -0
  291. package/dist/types/index.d.ts +1 -1
  292. package/dist/types/index.d.ts.map +1 -1
  293. package/dist/types/index.js +24 -0
  294. package/dist/types/index.js.map +9 -0
  295. package/dist/utils/cloud-api.d.ts +2 -27
  296. package/dist/utils/cloud-api.d.ts.map +1 -1
  297. package/dist/utils/cloud-api.js +33 -0
  298. package/dist/utils/cloud-api.js.map +10 -0
  299. package/dist/utils/cloud-sdk/client.d.ts +133 -0
  300. package/dist/utils/cloud-sdk/client.d.ts.map +1 -0
  301. package/dist/utils/cloud-sdk/client.js +3693 -0
  302. package/dist/utils/cloud-sdk/client.js.map +13 -0
  303. package/dist/utils/cloud-sdk/http.d.ts +37 -0
  304. package/dist/utils/cloud-sdk/http.d.ts.map +1 -0
  305. package/dist/utils/cloud-sdk/http.js +237 -0
  306. package/dist/utils/cloud-sdk/http.js.map +11 -0
  307. package/dist/utils/cloud-sdk/index.d.ts +6 -0
  308. package/dist/utils/cloud-sdk/index.d.ts.map +1 -0
  309. package/dist/utils/cloud-sdk/index.js +29 -0
  310. package/dist/utils/cloud-sdk/index.js.map +9 -0
  311. package/dist/utils/cloud-sdk/public-routes.d.ts +5563 -0
  312. package/dist/utils/cloud-sdk/public-routes.d.ts.map +1 -0
  313. package/dist/utils/cloud-sdk/public-routes.js +3048 -0
  314. package/dist/utils/cloud-sdk/public-routes.js.map +10 -0
  315. package/dist/utils/cloud-sdk/types.cloud-api.d.ts +101 -0
  316. package/dist/utils/cloud-sdk/types.cloud-api.d.ts.map +1 -0
  317. package/dist/utils/cloud-sdk/types.cloud-api.js +2 -0
  318. package/dist/utils/cloud-sdk/types.cloud-api.js.map +9 -0
  319. package/dist/utils/cloud-sdk/types.d.ts +653 -0
  320. package/dist/utils/cloud-sdk/types.d.ts.map +1 -0
  321. package/dist/utils/cloud-sdk/types.js +29 -0
  322. package/dist/utils/cloud-sdk/types.js.map +10 -0
  323. package/dist/utils/config.d.ts +16 -3
  324. package/dist/utils/config.d.ts.map +1 -1
  325. package/dist/utils/config.js +147 -0
  326. package/dist/utils/config.js.map +10 -0
  327. package/dist/utils/events.d.ts +23 -2
  328. package/dist/utils/events.d.ts.map +1 -1
  329. package/dist/utils/events.js +45 -0
  330. package/dist/utils/events.js.map +10 -0
  331. package/dist/utils/helpers.d.ts.map +1 -1
  332. package/dist/utils/helpers.js +103 -0
  333. package/dist/utils/helpers.js.map +10 -0
  334. package/dist/utils/responses-output.d.ts +13 -0
  335. package/dist/utils/responses-output.d.ts.map +1 -0
  336. package/dist/utils/responses-output.js +102 -0
  337. package/dist/utils/responses-output.js.map +10 -0
  338. package/dist/utils/sdk-client.d.ts +5 -0
  339. package/dist/utils/sdk-client.d.ts.map +1 -0
  340. package/dist/utils/sdk-client.js +157 -0
  341. package/dist/utils/sdk-client.js.map +11 -0
  342. package/dist/utils/waifu-metering.d.ts +108 -0
  343. package/dist/utils/waifu-metering.d.ts.map +1 -0
  344. package/dist/utils/waifu-metering.js +166 -0
  345. package/dist/utils/waifu-metering.js.map +10 -0
  346. package/package.json +139 -21
  347. package/src/cloud/auth-service-types.ts +24 -0
  348. package/src/cloud/auth.ts +175 -0
  349. package/src/cloud/backup.ts +46 -0
  350. package/src/cloud/base-url.ts +6 -0
  351. package/src/cloud/bridge-client.ts +602 -0
  352. package/src/cloud/clack-observer.ts +189 -0
  353. package/src/cloud/cloud-api-key.ts +80 -0
  354. package/src/cloud/cloud-manager.ts +163 -0
  355. package/src/cloud/cloud-proxy.ts +52 -0
  356. package/src/cloud/cloud-wallet.ts +341 -0
  357. package/src/cloud/duffel-client.ts +847 -0
  358. package/src/cloud/index.ts +38 -0
  359. package/src/cloud/lifeops-schedule-sync-client.ts +245 -0
  360. package/src/cloud/lifeops-schedule-sync-contracts.ts +124 -0
  361. package/src/cloud/managed-payment-clients.ts +374 -0
  362. package/src/cloud/null-observer.ts +45 -0
  363. package/src/cloud/reconnect.ts +111 -0
  364. package/src/cloud/setup-observer.ts +125 -0
  365. package/src/cloud/validate-url.ts +187 -0
  366. package/src/cloud/x402-payment-handler.ts +215 -0
  367. package/src/cloud-providers/cloud-status.ts +75 -0
  368. package/src/cloud-providers/container-health.ts +68 -0
  369. package/src/cloud-providers/credit-balance.ts +70 -0
  370. package/src/cloud-providers/index.ts +3 -0
  371. package/src/cloud-providers/model-registry.ts +74 -0
  372. package/src/cloud-setup.ts +531 -0
  373. package/src/cloud-voice-catalog.test.ts +254 -0
  374. package/src/cloud-voice-catalog.ts +246 -0
  375. package/src/index.browser.ts +39 -0
  376. package/src/index.node.ts +69 -0
  377. package/src/index.ts +424 -0
  378. package/src/init.ts +39 -0
  379. package/src/lib/cloud-connection.ts +661 -0
  380. package/src/lib/cloud-secrets.ts +14 -0
  381. package/src/lib/config-env.ts +168 -0
  382. package/src/lib/config-like.ts +149 -0
  383. package/src/lib/credential-type-map.ts +130 -0
  384. package/src/lib/feature-flags.ts +26 -0
  385. package/src/lib/http.ts +122 -0
  386. package/src/lib/server-cloud-tts.ts +301 -0
  387. package/src/lib/state-paths.ts +28 -0
  388. package/src/lib/tts-debug.ts +5 -0
  389. package/src/models/embeddings.ts +334 -0
  390. package/src/models/image.ts +234 -0
  391. package/src/models/index.ts +16 -0
  392. package/src/models/research.ts +275 -0
  393. package/src/models/speech.ts +324 -0
  394. package/src/models/text.ts +1493 -0
  395. package/src/models/tokenization.ts +67 -0
  396. package/src/models/transcription.ts +101 -0
  397. package/src/plugin.ts +281 -0
  398. package/src/providers/openai.ts +16 -0
  399. package/src/register-routes.ts +6 -0
  400. package/src/routes/cloud-billing-routes.ts +744 -0
  401. package/src/routes/cloud-coding-container-routes.ts +198 -0
  402. package/src/routes/cloud-compat-routes.ts +304 -0
  403. package/src/routes/cloud-features-routes.ts +57 -0
  404. package/src/routes/cloud-provisioning.ts +37 -0
  405. package/src/routes/cloud-relay-routes.ts +135 -0
  406. package/src/routes/cloud-routes-autonomous.ts +993 -0
  407. package/src/routes/cloud-routes.ts +637 -0
  408. package/src/routes/cloud-status-routes-autonomous.ts +238 -0
  409. package/src/routes/cloud-status-routes.ts +73 -0
  410. package/src/routes/home-remote-runner-access-url.ts +83 -0
  411. package/src/routes/travel-provider-relay-routes.ts +193 -0
  412. package/src/services/cloud-auth.ts +574 -0
  413. package/src/services/cloud-backup.ts +208 -0
  414. package/src/services/cloud-bootstrap.ts +106 -0
  415. package/src/services/cloud-bridge.ts +386 -0
  416. package/src/services/cloud-container.ts +390 -0
  417. package/src/services/cloud-credential-provider.ts +210 -0
  418. package/src/services/cloud-managed-gateway-relay.ts +663 -0
  419. package/src/services/cloud-model-registry.ts +202 -0
  420. package/src/services/index.ts +17 -0
  421. package/{types → src/types}/cloud.ts +74 -29
  422. package/{types → src/types}/index.ts +25 -0
  423. package/src/utils/cloud-api.ts +10 -0
  424. package/src/utils/cloud-sdk/client.ts +774 -0
  425. package/src/utils/cloud-sdk/http.ts +291 -0
  426. package/src/utils/cloud-sdk/index.ts +23 -0
  427. package/src/utils/cloud-sdk/public-routes.ts +5238 -0
  428. package/src/utils/cloud-sdk/types.cloud-api.ts +120 -0
  429. package/src/utils/cloud-sdk/types.ts +760 -0
  430. package/src/utils/config.ts +193 -0
  431. package/src/utils/events.ts +65 -0
  432. package/src/utils/helpers.ts +107 -0
  433. package/src/utils/responses-output.ts +115 -0
  434. package/src/utils/sdk-client.ts +41 -0
  435. package/src/utils/waifu-metering.ts +302 -0
  436. package/dist/actions/check-credits.d.ts +0 -6
  437. package/dist/actions/check-credits.d.ts.map +0 -1
  438. package/dist/actions/freeze-agent.d.ts +0 -9
  439. package/dist/actions/freeze-agent.d.ts.map +0 -1
  440. package/dist/actions/index.d.ts +0 -5
  441. package/dist/actions/index.d.ts.map +0 -1
  442. package/dist/actions/provision-agent.d.ts +0 -8
  443. package/dist/actions/provision-agent.d.ts.map +0 -1
  444. package/dist/actions/resume-agent.d.ts +0 -9
  445. package/dist/actions/resume-agent.d.ts.map +0 -1
  446. package/dist/build.d.ts +0 -3
  447. package/dist/build.d.ts.map +0 -1
  448. package/dist/generated/specs/specs.d.ts +0 -55
  449. package/dist/generated/specs/specs.d.ts.map +0 -1
  450. package/dist/models/object.d.ts +0 -4
  451. package/dist/models/object.d.ts.map +0 -1
  452. package/dist/utils/forwarded-settings.d.ts +0 -8
  453. package/dist/utils/forwarded-settings.d.ts.map +0 -1
@@ -0,0 +1,18 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/cloud/base-url.ts", "../src/cloud/validate-url.ts", "../src/lib/state-paths.ts", "../src/lib/config-env.ts", "../src/lib/feature-flags.ts", "../src/cloud/cloud-wallet.ts", "../src/lib/http.ts", "../src/lib/config-like.ts", "../src/routes/cloud-routes-autonomous.ts"],
4
+ "sourcesContent": [
5
+ "/**\n * Cloud site/API URL normalizer. The implementation moved to\n * `@elizaos/shared/elizacloud/base-url` so host-layer packages can normalize\n * URLs without reverse-importing this plugin.\n */\nexport { normalizeCloudSiteUrl, resolveCloudApiBaseUrl } from \"@elizaos/shared\";\n",
6
+ "import dns from \"node:dns\";\nimport net from \"node:net\";\nimport { promisify } from \"node:util\";\n\nconst dnsLookupAll = promisify(dns.lookup);\n\nconst BLOCKED_IPV4_CIDRS: Array<{ base: number; mask: number }> = [\n cidrV4(\"0.0.0.0\", 8),\n cidrV4(\"10.0.0.0\", 8),\n cidrV4(\"172.16.0.0\", 12),\n cidrV4(\"192.168.0.0\", 16),\n cidrV4(\"100.64.0.0\", 10),\n cidrV4(\"127.0.0.0\", 8),\n cidrV4(\"169.254.0.0\", 16),\n cidrV4(\"192.0.0.0\", 24),\n cidrV4(\"198.18.0.0\", 15),\n cidrV4(\"192.0.2.0\", 24),\n cidrV4(\"198.51.100.0\", 24),\n cidrV4(\"203.0.113.0\", 24),\n cidrV4(\"224.0.0.0\", 4),\n cidrV4(\"240.0.0.0\", 4),\n];\n\nfunction normalizeHostLike(value: string): string {\n return value\n .trim()\n .toLowerCase()\n .replace(/^\\[|\\]$/g, \"\");\n}\n\nfunction decodeIpv6MappedHex(mapped: string): string | null {\n const parts = mapped.split(\":\");\n if (parts.length < 1 || parts.length > 2) return null;\n\n const parsed = parts.map((part) => {\n if (!/^[0-9a-f]{1,4}$/i.test(part)) return Number.NaN;\n return Number.parseInt(part, 16);\n });\n if (parsed.some((value) => !Number.isFinite(value))) return null;\n\n const [hi, lo] = parsed.length === 1 ? [0, parsed[0]] : parsed;\n const octets = [hi >> 8, hi & 0xff, lo >> 8, lo & 0xff];\n return octets.join(\".\");\n}\n\nfunction canonicalizeIpv6(ip: string): string | null {\n try {\n return new URL(`http://[${ip}]/`).hostname.replace(/^\\[|\\]$/g, \"\");\n } catch {\n return null;\n }\n}\n\nfunction normalizeIpForPolicy(ip: string): string {\n const base = normalizeHostLike(ip).split(\"%\")[0];\n if (!base) return base;\n\n let normalized = base;\n if (net.isIP(normalized) === 6) {\n normalized = canonicalizeIpv6(normalized) ?? normalized;\n }\n\n let mapped: string | null = null;\n if (normalized.startsWith(\"::ffff:\")) {\n mapped = normalized.slice(\"::ffff:\".length);\n } else if (normalized.startsWith(\"0:0:0:0:0:ffff:\")) {\n mapped = normalized.slice(\"0:0:0:0:0:ffff:\".length);\n }\n if (!mapped) return normalized;\n\n if (net.isIP(mapped) === 4) return mapped;\n return decodeIpv6MappedHex(mapped) ?? normalized;\n}\n\nfunction cidrV4(base: string, prefix: number): { base: number; mask: number } {\n const parsed = parseIpv4ToInt(base);\n if (parsed === null) {\n throw new Error(`Invalid CIDR base IPv4 address: ${base}`);\n }\n const shift = 32 - prefix;\n const mask = shift === 32 ? 0 : (0xffffffff << shift) >>> 0;\n return { base: parsed & mask, mask };\n}\n\nfunction parseIpv4ToInt(ip: string): number | null {\n const parts = ip.split(\".\");\n if (parts.length !== 4) return null;\n\n let value = 0;\n for (const part of parts) {\n if (!/^\\d{1,3}$/.test(part)) return null;\n const octet = Number.parseInt(part, 10);\n if (!Number.isInteger(octet) || octet < 0 || octet > 255) return null;\n value = (value << 8) | octet;\n }\n\n return value >>> 0;\n}\n\nfunction isBlockedIpv4(ip: string): boolean {\n const asInt = parseIpv4ToInt(ip);\n if (asInt === null) return true;\n return BLOCKED_IPV4_CIDRS.some((cidr) => (asInt & cidr.mask) === cidr.base);\n}\n\nfunction isBlockedIpv6(ip: string): boolean {\n const normalized = ip.toLowerCase();\n return (\n normalized === \"::\" ||\n normalized === \"::1\" ||\n /^fe[89ab][0-9a-f]:/.test(normalized) ||\n /^f[cd][0-9a-f]{2}:/i.test(normalized) ||\n normalized.startsWith(\"ff\")\n );\n}\n\nfunction isBlockedIp(ip: string): boolean {\n const normalized = normalizeIpForPolicy(ip);\n const family = net.isIP(normalized);\n if (family === 4) return isBlockedIpv4(normalized);\n if (family === 6) return isBlockedIpv6(normalized);\n return false;\n}\n\nexport async function validateCloudBaseUrl(\n rawUrl: string,\n): Promise<string | null> {\n let parsed: URL;\n try {\n parsed = new URL(rawUrl);\n } catch {\n return `Invalid cloud base URL: \"${rawUrl}\"`;\n }\n\n if (parsed.protocol !== \"https:\") {\n return `Cloud base URL must use HTTPS, got \"${parsed.protocol}\" in \"${rawUrl}\"`;\n }\n\n const hostname = normalizeHostLike(parsed.hostname);\n if (!hostname) {\n return `Invalid cloud base URL: \"${rawUrl}\"`;\n }\n\n if (\n hostname === \"localhost\" ||\n hostname.endsWith(\".localhost\") ||\n hostname.endsWith(\".local\")\n ) {\n return `Cloud base URL \"${rawUrl}\" points to a blocked local hostname.`;\n }\n\n // Dev-mode bypass: skip IP-range blocking but keep URL format checks above.\n const elizaDev = process.env.ELIZA_DEV?.trim().toLowerCase();\n if (\n process.env.NODE_ENV === \"development\" ||\n elizaDev === \"1\" ||\n elizaDev === \"true\" ||\n elizaDev === \"yes\"\n ) {\n return null;\n }\n\n if (isBlockedIp(hostname)) {\n return `Cloud base URL \"${rawUrl}\" points to a blocked address.`;\n }\n\n try {\n const results = await dnsLookupAll(hostname, { all: true });\n const addresses = Array.isArray(results) ? results : [results];\n for (const entry of addresses) {\n const ip =\n typeof entry === \"string\"\n ? entry\n : (entry as { address: string }).address;\n if (isBlockedIp(ip)) {\n return (\n `Cloud base URL \"${rawUrl}\" resolves to ${ip}, ` +\n \"which is a blocked internal/metadata address.\"\n );\n }\n }\n } catch {\n return `Cloud base URL \"${rawUrl}\" could not be resolved via DNS.`;\n }\n\n return null;\n}\n",
7
+ "import fs from \"node:fs\";\nimport path from \"node:path\";\nimport {\n getElizaNamespace,\n resolveStateDir,\n resolveUserPath,\n} from \"@elizaos/core\";\n\nexport { getElizaNamespace, resolveStateDir, resolveUserPath };\n\nexport function resolveConfigPath(\n env: NodeJS.ProcessEnv = process.env,\n stateDirPath: string = resolveStateDir(env),\n): string {\n const override = env.ELIZA_CONFIG_PATH?.trim();\n if (override) return resolveUserPath(override);\n\n const namespace = getElizaNamespace(env);\n const primaryPath = path.join(stateDirPath, `${namespace}.json`);\n if (fs.existsSync(primaryPath)) return primaryPath;\n\n if (namespace !== \"eliza\") {\n const legacyPath = path.join(stateDirPath, \"eliza.json\");\n if (fs.existsSync(legacyPath)) return legacyPath;\n }\n\n return primaryPath;\n}\n",
8
+ "import fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { resolveStateDir } from \"./state-paths\";\n\nconst CONFIG_ENV_FILENAME = \"config.env\";\nconst BAK_SUFFIX = \".bak\";\nconst TMP_SUFFIX = \".tmp\";\nconst KEY_PATTERN = /^[A-Z][A-Z0-9_]*$/;\n\nconst BLOCKED_CONFIG_ENV_KEYS: ReadonlySet<string> = new Set([\n \"NODE_OPTIONS\",\n \"NODE_EXTRA_CA_CERTS\",\n \"NODE_TLS_REJECT_UNAUTHORIZED\",\n \"NODE_PATH\",\n \"LD_PRELOAD\",\n \"LD_LIBRARY_PATH\",\n \"DYLD_INSERT_LIBRARIES\",\n \"DYLD_LIBRARY_PATH\",\n \"DYLD_FRAMEWORK_PATH\",\n \"DYLD_FALLBACK_FRAMEWORK_PATH\",\n \"DYLD_FALLBACK_LIBRARY_PATH\",\n \"PATH\",\n \"HOME\",\n \"SHELL\",\n \"HTTP_PROXY\",\n \"HTTPS_PROXY\",\n \"ALL_PROXY\",\n \"NO_PROXY\",\n \"SSL_CERT_FILE\",\n \"SSL_CERT_DIR\",\n \"CURL_CA_BUNDLE\",\n]);\n\nexport interface PersistConfigEnvOptions {\n stateDir?: string;\n}\n\ninterface ParsedConfigEnv {\n lines: string[];\n index: Map<string, number>;\n}\n\nfunction parseConfigEnv(contents: string): ParsedConfigEnv {\n const lines = contents.length === 0 ? [] : contents.split(/\\r?\\n/);\n if (lines.length > 0 && lines[lines.length - 1] === \"\") {\n lines.pop();\n }\n const index = new Map<string, number>();\n for (let i = 0; i < lines.length; i += 1) {\n const line = lines[i] ?? \"\";\n const trimmed = line.trim();\n if (!trimmed || trimmed.startsWith(\"#\")) continue;\n const eq = line.indexOf(\"=\");\n if (eq <= 0) continue;\n const key = line.slice(0, eq).trim();\n if (KEY_PATTERN.test(key)) index.set(key, i);\n }\n return { lines, index };\n}\n\nfunction serialiseConfigEnv(parsed: ParsedConfigEnv): string {\n return parsed.lines.length === 0 ? \"\" : `${parsed.lines.join(\"\\n\")}\\n`;\n}\n\nfunction encodeValue(value: string): string {\n if (value === \"\") return \"\";\n const needsQuoting = /[\\s#\"'\\\\]|^\\s|\\s$/.test(value) || /\\n|\\r/.test(value);\n if (!needsQuoting) return value;\n const escaped = value\n .replace(/\\\\/g, \"\\\\\\\\\")\n .replace(/\"/g, '\\\\\"')\n .replace(/\\n/g, \"\\\\n\")\n .replace(/\\r/g, \"\\\\r\");\n return `\"${escaped}\"`;\n}\n\nfunction validateKey(key: string): void {\n if (!KEY_PATTERN.test(key)) {\n throw new Error(\n `persistConfigEnv: invalid key \"${key}\" - must match /^[A-Z][A-Z0-9_]*$/`,\n );\n }\n if (BLOCKED_CONFIG_ENV_KEYS.has(key)) {\n throw new Error(\n `persistConfigEnv: key \"${key}\" is a shell/runtime hijack vector and cannot be written`,\n );\n }\n}\n\nasync function readIfExists(filePath: string): Promise<string | null> {\n try {\n return await fs.readFile(filePath, \"utf8\");\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\") return null;\n throw error;\n }\n}\n\nasync function writeAtomic(filePath: string, contents: string): Promise<void> {\n const tmpPath = `${filePath}${TMP_SUFFIX}`;\n const handle = await fs.open(tmpPath, \"w\", 0o600);\n try {\n await handle.writeFile(contents, \"utf8\");\n await handle.sync();\n } finally {\n await handle.close();\n }\n await fs.rename(tmpPath, filePath);\n}\n\nlet writeChain: Promise<unknown> = Promise.resolve();\n\nfunction serialise<T>(fn: () => Promise<T>): Promise<T> {\n const next = writeChain.then(fn, fn);\n writeChain = next.catch(() => undefined);\n return next;\n}\n\nfunction resolveConfigEnvPath(stateDir?: string): string {\n return path.join(stateDir ?? resolveStateDir(), CONFIG_ENV_FILENAME);\n}\n\nexport async function persistConfigEnv(\n key: string,\n value: string,\n opts: PersistConfigEnvOptions = {},\n): Promise<void> {\n validateKey(key);\n\n await serialise(async () => {\n const filePath = resolveConfigEnvPath(opts.stateDir);\n await fs.mkdir(path.dirname(filePath), { recursive: true });\n\n const existing = (await readIfExists(filePath)) ?? \"\";\n const parsed = parseConfigEnv(existing);\n const existingIdx = parsed.index.get(key);\n const isDelete = value === \"\";\n\n if (isDelete) {\n if (existingIdx === undefined) {\n delete process.env[key];\n return;\n }\n parsed.lines.splice(existingIdx, 1);\n } else {\n const encoded = `${key}=${encodeValue(value)}`;\n if (existingIdx === undefined) {\n parsed.lines.push(encoded);\n } else {\n parsed.lines[existingIdx] = encoded;\n }\n }\n\n if (existing.length > 0) {\n await fs.writeFile(`${filePath}${BAK_SUFFIX}`, existing, {\n encoding: \"utf8\",\n mode: 0o600,\n });\n }\n\n await writeAtomic(filePath, serialiseConfigEnv(parsed));\n if (isDelete) {\n delete process.env[key];\n } else {\n process.env[key] = value;\n }\n });\n}\n",
9
+ "function readBoolFlag(name: string, fallback = false): boolean {\n const raw = process.env[name];\n if (raw === undefined || raw === null || raw === \"\") return fallback;\n const trimmed = String(raw).trim().toLowerCase();\n if (\n trimmed === \"1\" ||\n trimmed === \"true\" ||\n trimmed === \"yes\" ||\n trimmed === \"on\"\n ) {\n return true;\n }\n if (\n trimmed === \"0\" ||\n trimmed === \"false\" ||\n trimmed === \"no\" ||\n trimmed === \"off\"\n ) {\n return false;\n }\n return fallback;\n}\n\nexport function isCloudWalletEnabled(): boolean {\n return readBoolFlag(\"ENABLE_CLOUD_WALLET\");\n}\n",
10
+ "/**\n * Cloud wallet provisioning + client-address key management.\n *\n * Gated by ENABLE_CLOUD_WALLET. Every export short-circuits when the flag\n * is off so no cloud code paths run in legacy builds.\n *\n * Responsibilities:\n * 1. Generate + persist ELIZA_CLOUD_CLIENT_ADDRESS_KEY (the local secp256k1\n * key whose address ties this install to cloud-custodied wallets).\n * 2. Provision EVM + Solana cloud wallets for an agent, guarded by a\n * single-flight mutex keyed on (agentId, chainType) to prevent duplicate\n * provision under concurrent cloud-login triggers.\n * 3. Write the resulting descriptors into the in-memory config under\n * wallet.cloud.{evm,solana}; caller persists via saveConfig().\n */\n\nimport { generatePrivateKey, privateKeyToAccount } from \"viem/accounts\";\nimport type {\n CloudBridgeError,\n CloudChainType,\n CloudWalletDescriptor,\n CloudWalletProvider,\n} from \"./bridge-client.js\";\nimport { persistConfigEnv } from \"../lib/config-env\";\nimport { isCloudWalletEnabled } from \"../lib/feature-flags\";\n\nexport const ELIZA_CLOUD_CLIENT_ADDRESS_KEY_ENV =\n \"ELIZA_CLOUD_CLIENT_ADDRESS_KEY\";\n\nexport class CloudWalletFlagDisabledError extends Error {\n constructor() {\n super(\"ENABLE_CLOUD_WALLET is off; cloud wallet code paths are inactive\");\n this.name = \"CloudWalletFlagDisabledError\";\n }\n}\n\nfunction ensureFlag(): void {\n if (!isCloudWalletEnabled()) {\n throw new CloudWalletFlagDisabledError();\n }\n}\n\n/**\n * Normalize a hex private key to the 0x-prefixed form viem expects.\n */\nfunction normalizePrivateKey(raw: string): `0x${string}` {\n const trimmed = raw.trim();\n const hex = trimmed.startsWith(\"0x\") ? trimmed.slice(2) : trimmed;\n if (!/^[0-9a-fA-F]{64}$/.test(hex)) {\n throw new Error(\n `Malformed ${ELIZA_CLOUD_CLIENT_ADDRESS_KEY_ENV}: expected 32-byte hex`,\n );\n }\n return `0x${hex.toLowerCase()}`;\n}\n\nexport interface GetOrCreateKeyOptions {\n /** Override state dir for config.env persistence. Used by tests. */\n stateDir?: string;\n}\n\nexport interface CloudWalletProvisionBridge {\n getAgentWallet(\n agentId: string,\n chain: CloudChainType,\n ): Promise<CloudWalletDescriptor>;\n provisionWallet(input: {\n chainType: CloudChainType;\n clientAddress: string;\n }): Promise<{\n walletId: string;\n address: string;\n chainType: CloudChainType;\n provider: CloudWalletProvider;\n }>;\n}\n\n/**\n * Read or mint the local client-address secp256k1 key.\n *\n * Priority:\n * 1. process.env[ELIZA_CLOUD_CLIENT_ADDRESS_KEY] — respected as-is.\n * 2. Generate a fresh key, write to `process.env` AND disk (`config.env`)\n * so it survives restart.\n *\n * The key is in `BLOCKED_STARTUP_ENV_KEYS` so it never syncs into\n * `eliza.json` — `config.env` is the designated disk home for it.\n */\nexport async function getOrCreateClientAddressKey(\n opts: GetOrCreateKeyOptions = {},\n): Promise<{\n privateKey: `0x${string}`;\n address: `0x${string}`;\n minted: boolean;\n}> {\n ensureFlag();\n\n const existing = process.env[ELIZA_CLOUD_CLIENT_ADDRESS_KEY_ENV];\n if (existing && existing.trim().length > 0) {\n const privateKey = normalizePrivateKey(existing);\n const account = privateKeyToAccount(privateKey);\n return { privateKey, address: account.address, minted: false };\n }\n\n const privateKey = generatePrivateKey();\n const account = privateKeyToAccount(privateKey);\n\n process.env[ELIZA_CLOUD_CLIENT_ADDRESS_KEY_ENV] = privateKey;\n await persistConfigEnv(ELIZA_CLOUD_CLIENT_ADDRESS_KEY_ENV, privateKey, {\n stateDir: opts.stateDir,\n });\n\n return { privateKey, address: account.address, minted: true };\n}\n\n// ---------------------------------------------------------------------------\n// Single-flight provisioning\n// ---------------------------------------------------------------------------\n\nconst inflight = new Map<string, Promise<CloudWalletDescriptor>>();\n\nfunction inflightKey(agentId: string, chain: CloudChainType): string {\n return `${agentId}::${chain}`;\n}\n\nasync function provisionOne(\n bridge: CloudWalletProvisionBridge,\n agentId: string,\n chain: CloudChainType,\n clientAddress: string,\n): Promise<CloudWalletDescriptor> {\n try {\n return await bridge.getAgentWallet(agentId, chain);\n } catch (error) {\n if (!isMissingCloudWalletError(error, chain)) {\n throw error;\n }\n }\n\n const provisioned = await bridge.provisionWallet({\n chainType: chain,\n clientAddress,\n });\n\n return {\n agentWalletId: provisioned.walletId,\n walletAddress: provisioned.address,\n walletProvider: provisioned.provider,\n chainType: chain,\n };\n}\n\nfunction isMissingCloudWalletError(\n error: unknown,\n chain: CloudChainType,\n): boolean {\n if (\n error instanceof Error &&\n new RegExp(`no cloud ${chain} wallet provisioned`, \"i\").test(error.message)\n ) {\n return true;\n }\n\n return (\n typeof error === \"object\" &&\n error !== null &&\n \"name\" in error &&\n error.name === \"CloudBridgeError\" &&\n typeof (error as CloudBridgeError).status === \"number\" &&\n (error as CloudBridgeError).status === 404\n );\n}\n\nexport interface ProvisionOptions {\n agentId: string;\n clientAddress: string;\n chains?: CloudChainType[];\n}\n\nexport interface CloudWalletDescriptors {\n evm: CloudWalletDescriptor;\n solana: CloudWalletDescriptor;\n}\n\nexport interface CloudWalletProvisionFailure {\n chain: CloudChainType;\n error: unknown;\n}\n\nexport interface CloudWalletProvisionResult {\n descriptors: Partial<CloudWalletDescriptors>;\n failures: CloudWalletProvisionFailure[];\n warnings: string[];\n}\n\nfunction formatProvisionWarning(chain: CloudChainType, error: unknown): string {\n const message = error instanceof Error ? error.message : String(error);\n return `Cloud ${chain} wallet import failed: ${message}`;\n}\n\n/**\n * Provision EVM + Solana cloud wallets idempotently.\n *\n * Concurrent callers for the same (agentId, chain) share a single in-flight\n * promise so we never send duplicate provision requests.\n */\nexport async function provisionCloudWalletsBestEffort(\n bridge: CloudWalletProvisionBridge,\n opts: ProvisionOptions,\n): Promise<CloudWalletProvisionResult> {\n ensureFlag();\n\n const chains: CloudChainType[] = opts.chains ?? [\"evm\", \"solana\"];\n\n const results = await Promise.all(\n chains.map((chain) => {\n const key = inflightKey(opts.agentId, chain);\n const pending = inflight.get(key);\n if (pending) {\n return pending.then(\n (descriptor) =>\n ({\n chain,\n ok: true as const,\n descriptor,\n }) as const,\n (error) =>\n ({\n chain,\n ok: false as const,\n error,\n }) as const,\n );\n }\n\n const p = provisionOne(\n bridge,\n opts.agentId,\n chain,\n opts.clientAddress,\n ).finally(() => {\n inflight.delete(key);\n });\n inflight.set(key, p);\n return p.then(\n (descriptor) =>\n ({\n chain,\n ok: true as const,\n descriptor,\n }) as const,\n (error) =>\n ({\n chain,\n ok: false as const,\n error,\n }) as const,\n );\n }),\n );\n\n const out: Partial<CloudWalletDescriptors> = {};\n const failures: CloudWalletProvisionFailure[] = [];\n for (const result of results) {\n if (\"descriptor\" in result) {\n out[result.chain] = result.descriptor;\n continue;\n }\n failures.push({ chain: result.chain, error: result.error });\n }\n\n return {\n descriptors: out,\n failures,\n warnings: failures.map(({ chain, error }) =>\n formatProvisionWarning(chain, error),\n ),\n };\n}\n\nexport async function provisionCloudWallets(\n bridge: CloudWalletProvisionBridge,\n opts: ProvisionOptions,\n): Promise<Partial<CloudWalletDescriptors>> {\n const result = await provisionCloudWalletsBestEffort(bridge, opts);\n if (\n result.failures.length > 0 &&\n Object.keys(result.descriptors).length === 0\n ) {\n const firstFailure = result.failures[0];\n if (firstFailure?.error instanceof Error) {\n throw firstFailure.error;\n }\n throw new Error(result.warnings[0] ?? \"Failed to provision cloud wallets\");\n }\n\n return result.descriptors;\n}\n\n// ---------------------------------------------------------------------------\n// Config cache write\n// ---------------------------------------------------------------------------\n\nexport interface CloudWalletCacheTarget {\n wallet?: {\n cloud?: Partial<Record<CloudChainType, CloudWalletDescriptor>>;\n [k: string]: unknown;\n };\n [k: string]: unknown;\n}\n\n/**\n * Write the descriptors into the provided config object under\n * `wallet.cloud.{evm,solana}`. Caller is responsible for persisting\n * (state.saveConfig()).\n */\nexport function persistCloudWalletCache(\n config: CloudWalletCacheTarget,\n descriptors: Partial<CloudWalletDescriptors>,\n): void {\n ensureFlag();\n\n const wallet = (config.wallet ?? {}) as NonNullable<\n CloudWalletCacheTarget[\"wallet\"]\n >;\n const cloud = { ...(wallet.cloud ?? {}) };\n if (descriptors.evm) cloud.evm = descriptors.evm;\n if (descriptors.solana) cloud.solana = descriptors.solana;\n wallet.cloud = cloud;\n config.wallet = wallet;\n}\n\n// ---------------------------------------------------------------------------\n// Test hooks\n// ---------------------------------------------------------------------------\n\n/** @internal — exposed for tests to reset state between cases. */\nexport function __resetCloudWalletModuleForTests(): void {\n inflight.clear();\n delete process.env[ELIZA_CLOUD_CLIENT_ADDRESS_KEY_ENV];\n}\n",
11
+ "import type http from \"node:http\";\n\nexport interface ReadJsonBodyOptions {\n maxBytes?: number;\n tooLargeMessage?: string;\n destroyOnTooLarge?: boolean;\n requireObject?: boolean;\n}\n\nfunction scrubStackFields(value: unknown): unknown {\n if (value instanceof Error) {\n return { error: value.message || \"Internal error\" };\n }\n if (Array.isArray(value)) {\n return value.map(scrubStackFields);\n }\n if (value && typeof value === \"object\") {\n const out: Record<string, unknown> = {};\n for (const [key, nested] of Object.entries(value)) {\n if (key === \"stack\" || key === \"stackTrace\") continue;\n out[key] = scrubStackFields(nested);\n }\n return out;\n }\n return value;\n}\n\nexport function sendJson(\n res: http.ServerResponse,\n body: unknown,\n status = 200,\n): void {\n if (res.headersSent) return;\n res.statusCode = status;\n res.setHeader(\"content-type\", \"application/json; charset=utf-8\");\n res.end(JSON.stringify(scrubStackFields(body)));\n}\n\nexport function sendJsonError(\n res: http.ServerResponse,\n message: string,\n status = 400,\n): void {\n sendJson(res, { error: message }, status);\n}\n\nasync function readRequestBody(\n req: http.IncomingMessage,\n options: ReadJsonBodyOptions,\n): Promise<string | null> {\n const maxBytes = options.maxBytes ?? 1_048_576;\n const chunks: Buffer[] = [];\n let size = 0;\n\n for await (const chunk of req) {\n const buffer = typeof chunk === \"string\" ? Buffer.from(chunk) : chunk;\n size += buffer.length;\n if (size > maxBytes) {\n if (options.destroyOnTooLarge) req.destroy();\n throw new Error(options.tooLargeMessage ?? \"Request body too large\");\n }\n chunks.push(buffer);\n }\n\n if (chunks.length === 0) return null;\n return Buffer.concat(chunks).toString(\"utf8\");\n}\n\nexport async function readJsonBody<T extends object = Record<string, unknown>>(\n req: http.IncomingMessage,\n res: http.ServerResponse,\n options: ReadJsonBodyOptions = {},\n): Promise<T | null> {\n const cached = (req as http.IncomingMessage & { body?: unknown }).body;\n if (cached !== undefined) {\n if (\n options.requireObject !== false &&\n (!cached || typeof cached !== \"object\" || Array.isArray(cached))\n ) {\n sendJsonError(res, \"Request body must be a JSON object\", 400);\n return null;\n }\n return cached as T;\n }\n\n let raw: string | null;\n try {\n raw = await readRequestBody(req, options);\n } catch (error) {\n sendJsonError(\n res,\n error instanceof Error ? error.message : \"Failed to read request body\",\n 413,\n );\n return null;\n }\n\n if (!raw?.trim()) {\n const empty = {} as T;\n (req as http.IncomingMessage & { body?: unknown }).body = empty;\n return empty;\n }\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(raw);\n } catch {\n sendJsonError(res, \"Invalid JSON in request body\", 400);\n return null;\n }\n\n if (\n options.requireObject !== false &&\n (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed))\n ) {\n sendJsonError(res, \"Request body must be a JSON object\", 400);\n return null;\n }\n\n (req as http.IncomingMessage & { body?: unknown }).body = parsed;\n return parsed as T;\n}\n",
12
+ "import type {\n DeploymentTargetConfig,\n LinkedAccountFlagsConfig,\n ServiceCapability,\n ServiceRoutingConfig,\n} from \"@elizaos/core\";\n\nexport interface CloudProxyConfigLike {\n cloud?: {\n apiKey?: string;\n baseUrl?: string;\n enabled?: boolean;\n serviceKey?: string;\n backup?: {\n autoBackupIntervalMs?: number;\n };\n bridge?: {\n heartbeatIntervalMs?: number;\n };\n };\n}\n\nexport type CloudConfig = NonNullable<CloudProxyConfigLike[\"cloud\"]>;\n\nexport type ElizaConfig = Record<string, unknown> &\n CloudProxyConfigLike & {\n deploymentTarget?: DeploymentTargetConfig;\n linkedAccounts?: LinkedAccountFlagsConfig;\n serviceRouting?: ServiceRoutingConfig;\n };\n\nexport interface AutonomousConfigLike {\n [key: string]: unknown;\n}\n\ntype MutableElizaConfig = Partial<ElizaConfig> & {\n cloud?: Record<string, unknown>;\n deploymentTarget?: DeploymentTargetConfig;\n linkedAccounts?: LinkedAccountFlagsConfig;\n serviceRouting?: ServiceRoutingConfig;\n};\n\nfunction ensureLinkedAccounts(\n config: MutableElizaConfig,\n): LinkedAccountFlagsConfig {\n config.linkedAccounts ??= {};\n return config.linkedAccounts;\n}\n\nfunction ensureServiceRouting(\n config: MutableElizaConfig,\n): ServiceRoutingConfig {\n config.serviceRouting ??= {};\n return config.serviceRouting;\n}\n\nfunction persistDeploymentTarget(\n config: MutableElizaConfig,\n deploymentTarget: DeploymentTargetConfig | null | undefined,\n): void {\n if (!deploymentTarget) {\n delete config.deploymentTarget;\n return;\n }\n config.deploymentTarget = { ...deploymentTarget };\n}\n\nfunction persistLinkedAccounts(\n config: MutableElizaConfig,\n linkedAccounts: LinkedAccountFlagsConfig | null | undefined,\n): void {\n if (!linkedAccounts) return;\n\n const existing = ensureLinkedAccounts(config);\n for (const [accountId, account] of Object.entries(linkedAccounts)) {\n if (!account || Object.keys(account).length === 0) {\n delete existing[accountId];\n continue;\n }\n existing[accountId] = {\n ...existing[accountId],\n ...account,\n };\n }\n\n if (Object.keys(existing).length === 0) {\n delete config.linkedAccounts;\n }\n}\n\nfunction persistServiceRouting(\n config: MutableElizaConfig,\n serviceRouting: ServiceRoutingConfig | null | undefined,\n clearRoutes: readonly ServiceCapability[] = [],\n): void {\n const existing = ensureServiceRouting(config);\n\n for (const capability of clearRoutes) {\n delete existing[capability];\n }\n\n if (serviceRouting) {\n for (const [capability, route] of Object.entries(serviceRouting)) {\n const serviceKey = capability as ServiceCapability;\n if (!route || Object.keys(route).length === 0) {\n delete existing[serviceKey];\n continue;\n }\n existing[serviceKey] = { ...route };\n }\n }\n\n if (Object.keys(existing).length === 0) {\n delete config.serviceRouting;\n }\n}\n\nexport function applyCanonicalSetupConfig(\n config: MutableElizaConfig,\n args: {\n deploymentTarget?: DeploymentTargetConfig | null;\n linkedAccounts?: LinkedAccountFlagsConfig | null;\n serviceRouting?: ServiceRoutingConfig | null;\n clearRoutes?: readonly ServiceCapability[];\n },\n): void {\n if (args.deploymentTarget !== undefined) {\n persistDeploymentTarget(config, args.deploymentTarget);\n }\n if (args.linkedAccounts !== undefined) {\n persistLinkedAccounts(config, args.linkedAccounts);\n }\n if (args.serviceRouting !== undefined || args.clearRoutes?.length) {\n persistServiceRouting(config, args.serviceRouting, args.clearRoutes);\n }\n}\n\nexport function normalizeEnvValue(value: unknown): string | undefined {\n if (typeof value !== \"string\") return undefined;\n const trimmed = value.trim();\n return trimmed || undefined;\n}\n\nexport function isTimeoutError(error: unknown): boolean {\n if (!(error instanceof Error)) return false;\n if (error.name === \"TimeoutError\" || error.name === \"AbortError\") return true;\n const message = error.message.toLowerCase();\n return message.includes(\"timed out\") || message.includes(\"timeout\");\n}\n",
13
+ "import fs from \"node:fs/promises\";\nimport type http from \"node:http\";\nimport path from \"node:path\";\nimport {\n isCloudInferenceSelectedInConfig,\n migrateLegacyRuntimeConfig,\n} from \"@elizaos/core\";\nimport { logger } from \"@elizaos/core\";\nimport { normalizeCloudSiteUrl } from \"../cloud/base-url.js\";\nimport type {\n CloudChainType,\n CloudWalletDescriptor,\n CloudWalletProvider,\n} from \"../cloud/bridge-client.js\";\nimport {\n ELIZA_CLOUD_CLIENT_ADDRESS_KEY_ENV,\n getOrCreateClientAddressKey,\n persistCloudWalletCache,\n provisionCloudWallets,\n} from \"../cloud/cloud-wallet.js\";\nimport { validateCloudBaseUrl } from \"../cloud/validate-url.js\";\nimport { persistConfigEnv } from \"../lib/config-env\";\nimport {\n applyCanonicalSetupConfig,\n isTimeoutError,\n} from \"../lib/config-like\";\nimport { isCloudWalletEnabled } from \"../lib/feature-flags\";\nimport {\n readJsonBody as parseJsonBody,\n sendJson,\n sendJsonError,\n} from \"../lib/http\";\nimport { resolveStateDir } from \"../lib/state-paths\";\n\nexport interface CloudConfigLike {\n cloud?: {\n enabled?: boolean;\n apiKey?: string;\n baseUrl?: string;\n };\n}\n\ninterface CloudClientLike {\n listAgents: () => Promise<unknown>;\n createAgent: (args: {\n agentName: string;\n agentConfig?: Record<string, unknown>;\n environmentVars?: Record<string, string>;\n }) => Promise<unknown>;\n deleteAgent: (agentId: string) => Promise<unknown>;\n getAgentWallet: (\n agentId: string,\n chain: CloudChainType,\n ) => Promise<CloudWalletDescriptor>;\n provisionWallet: (input: {\n chainType: CloudChainType;\n clientAddress: string;\n }) => Promise<{\n walletId: string;\n address: string;\n chainType: CloudChainType;\n provider: CloudWalletProvider;\n }>;\n}\n\ninterface ConnectedCloudAgentLike {\n agentName: string;\n}\n\ninterface CloudManagerLike {\n init?: () => Promise<void>;\n replaceApiKey?: (apiKey: string) => Promise<void>;\n getClient: () => CloudClientLike | null;\n connect: (agentId: string) => Promise<ConnectedCloudAgentLike>;\n disconnect: () => Promise<void>;\n getStatus: () => unknown;\n getActiveAgentId: () => string | null;\n}\n\ninterface RuntimeLike {\n agentId: string;\n character?: {\n secrets?: Record<string, string | number | boolean>;\n };\n getService?: (name: string) => unknown;\n setSetting?: (key: string, value: string | null) => unknown;\n updateAgent?: (\n agentId: string,\n update: {\n secrets: Record<string, string | number | boolean>;\n },\n ) => Promise<unknown>;\n}\n\ninterface IntegrationTelemetrySpanLike {\n success: (args?: { statusCode?: number }) => void;\n failure: (args?: {\n statusCode?: number;\n error?: unknown;\n errorKind?: string;\n }) => void;\n}\n\ninterface CloudAuthLike {\n authenticateWithApiKey?: (input: {\n apiKey: string;\n organizationId?: string;\n userId?: string;\n }) => unknown;\n clearAuth?: () => unknown;\n}\n\ntype CreateTelemetrySpanLike = (meta: {\n boundary: \"cloud\";\n operation: string;\n timeoutMs?: number;\n}) => IntegrationTelemetrySpanLike | null | undefined;\n\nexport interface CloudRouteState {\n config: CloudConfigLike;\n cloudManager: CloudManagerLike | null;\n runtime: RuntimeLike | null;\n saveConfig?: (config: CloudConfigLike) => void;\n createTelemetrySpan?: CreateTelemetrySpanLike;\n /**\n * Optional runtime restart hook used after cloud-login provisioning to\n * rebind plugin-wallet to the cloud provider. Threaded from server.ts the\n * same way provider-switch-routes does.\n */\n restartRuntime?: (reason: string) => Promise<boolean> | boolean;\n}\n\nconst UUID_RE =\n /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;\n\nconst CLOUD_LOGIN_CREATE_TIMEOUT_MS = 10_000;\nconst CLOUD_LOGIN_POLL_TIMEOUT_MS = 10_000;\nconst CONFIG_ENV_FILENAME = \"config.env\";\nconst CONFIG_ENV_BAK_SUFFIX = \".bak\";\nconst CLOUD_WALLET_ROLLBACK_ENV_KEYS = [\n ELIZA_CLOUD_CLIENT_ADDRESS_KEY_ENV,\n \"ELIZA_CLOUD_EVM_ADDRESS\",\n \"ELIZA_CLOUD_SOLANA_ADDRESS\",\n \"WALLET_SOURCE_EVM\",\n \"WALLET_SOURCE_SOLANA\",\n] as const;\n\ntype CloudWalletRollbackEnvKey =\n (typeof CLOUD_WALLET_ROLLBACK_ENV_KEYS)[number];\n\ninterface ConfigEnvRollbackSnapshot {\n bakPath: string;\n filePath: string;\n originalRaw: string | null;\n previousEnv: Partial<Record<CloudWalletRollbackEnvKey, string>>;\n}\n\nfunction extractAgentId(pathname: string): string | null {\n const id = pathname.split(\"/\")[4];\n return id && UUID_RE.test(id) ? id : null;\n}\n\nfunction replaceMutableRoot<T extends object>(target: T, snapshot: T): void {\n const targetRecord = target as Record<string, unknown>;\n for (const key of Object.keys(targetRecord)) {\n delete targetRecord[key];\n }\n Object.assign(\n targetRecord,\n structuredClone(snapshot as Record<string, unknown>),\n );\n}\n\nfunction getCloudAuth(runtime: RuntimeLike | null): CloudAuthLike | null {\n if (typeof runtime?.getService !== \"function\") {\n return null;\n }\n const service = runtime.getService(\"CLOUD_AUTH\");\n return service && typeof service === \"object\"\n ? (service as CloudAuthLike)\n : null;\n}\n\nfunction clearCloudAuth(runtime: RuntimeLike | null): CloudAuthLike | null {\n const cloudAuth = getCloudAuth(runtime);\n if (typeof cloudAuth?.clearAuth === \"function\") {\n cloudAuth.clearAuth();\n }\n return cloudAuth;\n}\n\nasync function captureConfigEnvRollbackSnapshot(): Promise<ConfigEnvRollbackSnapshot> {\n const filePath = path.join(resolveStateDir(), CONFIG_ENV_FILENAME);\n const bakPath = `${filePath}${CONFIG_ENV_BAK_SUFFIX}`;\n\n let originalRaw: string | null = null;\n try {\n originalRaw = await fs.readFile(filePath, \"utf8\");\n } catch (err) {\n if ((err as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw err;\n }\n }\n\n const previousEnv = Object.fromEntries(\n CLOUD_WALLET_ROLLBACK_ENV_KEYS.flatMap((key) => {\n const value = process.env[key];\n return typeof value === \"string\" ? ([[key, value]] as const) : [];\n }),\n ) as Partial<Record<CloudWalletRollbackEnvKey, string>>;\n\n return {\n bakPath,\n filePath,\n originalRaw,\n previousEnv,\n };\n}\n\nasync function restoreConfigEnvRollbackSnapshot(\n snapshot: ConfigEnvRollbackSnapshot,\n): Promise<void> {\n await fs.mkdir(path.dirname(snapshot.filePath), { recursive: true });\n\n if (snapshot.originalRaw === null) {\n await fs.rm(snapshot.filePath, { force: true });\n await fs.rm(snapshot.bakPath, { force: true });\n } else {\n await fs.writeFile(snapshot.filePath, snapshot.originalRaw, {\n encoding: \"utf8\",\n mode: 0o600,\n });\n await fs.writeFile(snapshot.bakPath, snapshot.originalRaw, {\n encoding: \"utf8\",\n mode: 0o600,\n });\n }\n\n for (const key of CLOUD_WALLET_ROLLBACK_ENV_KEYS) {\n const previousValue = snapshot.previousEnv[key];\n if (typeof previousValue === \"string\") {\n process.env[key] = previousValue;\n } else {\n delete process.env[key];\n }\n }\n}\n\nfunction saveConfigOrThrow(state: CloudRouteState): void {\n if (!state.saveConfig) {\n throw new Error(\"saveConfig not available\");\n }\n state.saveConfig(state.config);\n}\n\nasync function readJsonBody<T = Record<string, unknown>>(\n req: http.IncomingMessage,\n res: http.ServerResponse,\n): Promise<T | null> {\n return (await parseJsonBody(req, res, {\n maxBytes: 1_048_576,\n tooLargeMessage: \"Request body too large\",\n destroyOnTooLarge: true,\n })) as T | null;\n}\n\nfunction isRedirectResponse(response: Response): boolean {\n return response.status >= 300 && response.status < 400;\n}\n\nfunction createNoopTelemetrySpan(): IntegrationTelemetrySpanLike {\n return {\n success: () => {},\n failure: () => {},\n };\n}\n\nfunction getTelemetrySpan(\n state: CloudRouteState,\n meta: {\n boundary: \"cloud\";\n operation: string;\n timeoutMs?: number;\n },\n): IntegrationTelemetrySpanLike {\n return state.createTelemetrySpan?.(meta) ?? createNoopTelemetrySpan();\n}\n\nasync function fetchWithTimeout(\n input: string,\n init: RequestInit,\n timeoutMs: number,\n): Promise<Response> {\n return fetch(input, {\n ...init,\n redirect: \"manual\",\n signal: AbortSignal.timeout(timeoutMs),\n });\n}\n\nexport async function handleCloudRoute(\n req: http.IncomingMessage,\n res: http.ServerResponse,\n pathname: string,\n method: string,\n state: CloudRouteState,\n): Promise<boolean> {\n if (method === \"POST\" && pathname === \"/api/cloud/login\") {\n const baseUrl = normalizeCloudSiteUrl(state.config.cloud?.baseUrl);\n const urlError = await validateCloudBaseUrl(baseUrl);\n if (urlError) {\n sendJsonError(res, urlError);\n return true;\n }\n const sessionId = crypto.randomUUID();\n const loginCreateSpan = getTelemetrySpan(state, {\n boundary: \"cloud\",\n operation: \"login_create_session\",\n timeoutMs: CLOUD_LOGIN_CREATE_TIMEOUT_MS,\n });\n\n let createRes: Response;\n try {\n createRes = await fetchWithTimeout(\n `${baseUrl}/api/auth/cli-session`,\n {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ sessionId }),\n },\n CLOUD_LOGIN_CREATE_TIMEOUT_MS,\n );\n } catch (err) {\n if (isTimeoutError(err)) {\n loginCreateSpan.failure({ error: err, statusCode: 504 });\n sendJsonError(res, \"Eliza Cloud login request timed out\", 504);\n return true;\n }\n loginCreateSpan.failure({ error: err, statusCode: 502 });\n sendJsonError(res, \"Failed to reach Eliza Cloud\", 502);\n return true;\n }\n\n if (isRedirectResponse(createRes)) {\n loginCreateSpan.failure({\n statusCode: createRes.status,\n errorKind: \"redirect_response\",\n });\n sendJsonError(\n res,\n \"Eliza Cloud login request was redirected; redirects are not allowed\",\n 502,\n );\n return true;\n }\n\n if (!createRes.ok) {\n loginCreateSpan.failure({\n statusCode: createRes.status,\n errorKind: \"http_error\",\n });\n sendJsonError(res, \"Failed to create auth session with Eliza Cloud\", 502);\n return true;\n }\n\n loginCreateSpan.success({ statusCode: createRes.status });\n sendJson(res, {\n ok: true,\n sessionId,\n browserUrl: `${baseUrl}/auth/cli-login?session=${encodeURIComponent(sessionId)}`,\n });\n return true;\n }\n\n if (method === \"GET\" && pathname.startsWith(\"/api/cloud/login/status\")) {\n const url = new URL(\n req.url ?? \"/\",\n `http://${req.headers.host ?? \"localhost\"}`,\n );\n const sessionId = url.searchParams.get(\"sessionId\");\n if (!sessionId) {\n sendJsonError(res, \"sessionId query parameter is required\");\n return true;\n }\n\n const baseUrl = normalizeCloudSiteUrl(state.config.cloud?.baseUrl);\n const urlError = await validateCloudBaseUrl(baseUrl);\n if (urlError) {\n sendJsonError(res, urlError);\n return true;\n }\n const loginPollSpan = getTelemetrySpan(state, {\n boundary: \"cloud\",\n operation: \"login_poll_status\",\n timeoutMs: CLOUD_LOGIN_POLL_TIMEOUT_MS,\n });\n let pollRes: Response;\n try {\n pollRes = await fetchWithTimeout(\n `${baseUrl}/api/auth/cli-session/${encodeURIComponent(sessionId)}`,\n {},\n CLOUD_LOGIN_POLL_TIMEOUT_MS,\n );\n } catch (err) {\n if (isTimeoutError(err)) {\n loginPollSpan.failure({ error: err, statusCode: 504 });\n sendJson(\n res,\n {\n status: \"error\",\n error: \"Eliza Cloud status request timed out\",\n },\n 504,\n );\n return true;\n }\n loginPollSpan.failure({ error: err, statusCode: 502 });\n sendJson(\n res,\n {\n status: \"error\",\n error: \"Failed to reach Eliza Cloud\",\n },\n 502,\n );\n return true;\n }\n\n if (isRedirectResponse(pollRes)) {\n loginPollSpan.failure({\n statusCode: pollRes.status,\n errorKind: \"redirect_response\",\n });\n sendJson(\n res,\n {\n status: \"error\",\n error:\n \"Eliza Cloud status request was redirected; redirects are not allowed\",\n },\n 502,\n );\n return true;\n }\n\n if (!pollRes.ok) {\n loginPollSpan.failure({\n statusCode: pollRes.status,\n errorKind: \"http_error\",\n });\n sendJson(\n res,\n pollRes.status === 404\n ? { status: \"expired\", error: \"Session not found or expired\" }\n : {\n status: \"error\",\n error: `Eliza Cloud returned HTTP ${pollRes.status}`,\n },\n );\n return true;\n }\n\n let data: {\n status: string;\n apiKey?: string;\n keyPrefix?: string;\n organizationId?: string;\n userId?: string;\n };\n try {\n data = (await pollRes.json()) as {\n status: string;\n apiKey?: string;\n keyPrefix?: string;\n organizationId?: string;\n userId?: string;\n };\n } catch (parseErr) {\n loginPollSpan.failure({ error: parseErr, statusCode: pollRes.status });\n sendJson(\n res,\n { status: \"error\", error: \"Eliza Cloud returned invalid JSON\" },\n 502,\n );\n return true;\n }\n loginPollSpan.success({ statusCode: pollRes.status });\n\n if (data.status === \"authenticated\" && data.apiKey) {\n const organizationId =\n typeof data.organizationId === \"string\"\n ? data.organizationId.trim()\n : undefined;\n const userId =\n typeof data.userId === \"string\" ? data.userId.trim() : undefined;\n const cloudAuth = clearCloudAuth(state.runtime);\n migrateLegacyRuntimeConfig(state.config as Record<string, unknown>);\n const cloud = (state.config.cloud ?? {}) as NonNullable<\n CloudConfigLike[\"cloud\"]\n >;\n cloud.apiKey = data.apiKey;\n (state.config as Record<string, unknown>).cloud = cloud;\n applyCanonicalSetupConfig(state.config as never, {\n linkedAccounts: {\n elizacloud: {\n status: \"linked\",\n source: \"api-key\",\n },\n },\n });\n const cloudInferenceSelected = isCloudInferenceSelectedInConfig(\n state.config as Record<string, unknown>,\n );\n migrateLegacyRuntimeConfig(state.config as Record<string, unknown>);\n try {\n if (state.saveConfig) {\n state.saveConfig(state.config);\n } else {\n logger.warn(\n \"[cloud-login] saveConfig not available — config not persisted\",\n );\n }\n logger.info(\"[cloud-login] API key saved to config file\");\n } catch (saveErr) {\n logger.error(`[cloud-login] Failed to save config: ${String(saveErr)}`);\n sendJson(\n res,\n { status: \"error\", error: \"Authenticated but failed to save config\" },\n 500,\n );\n return true;\n }\n\n process.env.ELIZAOS_CLOUD_API_KEY = data.apiKey;\n if (cloudInferenceSelected) {\n process.env.ELIZAOS_CLOUD_ENABLED = \"true\";\n } else {\n delete process.env.ELIZAOS_CLOUD_ENABLED;\n }\n\n if (state.runtime) {\n const character = state.runtime.character ?? {};\n state.runtime.character = character;\n if (!character.secrets) {\n character.secrets = {};\n }\n const secrets = character.secrets as Record<string, string>;\n secrets.ELIZAOS_CLOUD_API_KEY = data.apiKey;\n if (userId) {\n secrets.ELIZA_CLOUD_USER_ID = userId;\n } else {\n delete secrets.ELIZA_CLOUD_USER_ID;\n }\n if (organizationId) {\n secrets.ELIZA_CLOUD_ORGANIZATION_ID = organizationId;\n } else {\n delete secrets.ELIZA_CLOUD_ORGANIZATION_ID;\n }\n if (cloudInferenceSelected) {\n secrets.ELIZAOS_CLOUD_ENABLED = \"true\";\n } else {\n delete secrets.ELIZAOS_CLOUD_ENABLED;\n }\n\n if (typeof state.runtime.setSetting === \"function\") {\n state.runtime.setSetting(\"ELIZA_CLOUD_USER_ID\", userId ?? null);\n state.runtime.setSetting(\n \"ELIZA_CLOUD_ORGANIZATION_ID\",\n organizationId ?? null,\n );\n }\n\n if (typeof state.runtime.updateAgent === \"function\") {\n await state.runtime.updateAgent(state.runtime.agentId, {\n secrets: { ...secrets },\n });\n logger.info(\"[cloud-login] API key persisted to agent DB record\");\n } else {\n logger.warn(\n \"[cloud-login] runtime.updateAgent not available — agent DB secrets not persisted\",\n );\n }\n }\n\n if (\n state.cloudManager &&\n typeof state.cloudManager.replaceApiKey === \"function\"\n ) {\n await state.cloudManager.replaceApiKey(data.apiKey);\n } else if (\n state.cloudManager &&\n !state.cloudManager.getClient() &&\n typeof state.cloudManager.init === \"function\"\n ) {\n await state.cloudManager.init();\n }\n\n if (typeof cloudAuth?.authenticateWithApiKey === \"function\") {\n cloudAuth.authenticateWithApiKey({\n apiKey: data.apiKey,\n organizationId,\n userId,\n });\n }\n\n // Cloud-wallet remote-signing bridge (gated by ENABLE_CLOUD_WALLET).\n // Failures here do NOT abort the cloud-login response — the API key\n // is already saved. We log, rollback the partial wallet bind, and\n // fall through so the user stays logged in.\n if (isCloudWalletEnabled()) {\n const rollbackConfigSnapshot = structuredClone(\n state.config as Record<string, unknown>,\n ) as CloudConfigLike;\n const rollbackEnvSnapshot = await captureConfigEnvRollbackSnapshot();\n\n try {\n const bridge = state.cloudManager?.getClient();\n const agentId = state.runtime?.agentId;\n if (!bridge) {\n throw new Error(\"cloud-wallet bridge unavailable\");\n }\n if (!agentId) {\n throw new Error(\"cloud-wallet runtime agentId missing\");\n }\n\n const { address: clientAddress, minted } =\n await getOrCreateClientAddressKey();\n if (minted) {\n logger.info(\n `[cloud-login] cloud-wallet: minted client_address ${clientAddress}`,\n );\n }\n\n const descriptors = await provisionCloudWallets(bridge, {\n agentId,\n clientAddress,\n });\n\n persistCloudWalletCache(\n state.config as Record<string, unknown>,\n descriptors,\n );\n\n const cloudCfg = (state.config.cloud ?? {}) as Record<\n string,\n unknown\n >;\n cloudCfg.clientAddressPublicKey = clientAddress;\n (state.config as Record<string, unknown>).cloud = cloudCfg;\n saveConfigOrThrow(state);\n\n if (descriptors.evm?.walletAddress) {\n process.env.ELIZA_CLOUD_EVM_ADDRESS = descriptors.evm.walletAddress;\n await persistConfigEnv(\n \"ELIZA_CLOUD_EVM_ADDRESS\",\n descriptors.evm.walletAddress,\n );\n }\n if (descriptors.solana?.walletAddress) {\n process.env.ELIZA_CLOUD_SOLANA_ADDRESS =\n descriptors.solana.walletAddress;\n await persistConfigEnv(\n \"ELIZA_CLOUD_SOLANA_ADDRESS\",\n descriptors.solana.walletAddress,\n );\n }\n\n if (descriptors.evm) {\n await persistConfigEnv(\"WALLET_SOURCE_EVM\", \"cloud\");\n }\n if (descriptors.solana) {\n await persistConfigEnv(\"WALLET_SOURCE_SOLANA\", \"cloud\");\n }\n\n const wallet = ((state.config as Record<string, unknown>).wallet ??\n {}) as Record<string, unknown>;\n const primary = {\n ...((wallet.primary ?? {}) as Record<string, string>),\n };\n if (descriptors.evm) primary.evm = \"cloud\";\n if (descriptors.solana) primary.solana = \"cloud\";\n wallet.primary = primary;\n (state.config as Record<string, unknown>).wallet = wallet;\n saveConfigOrThrow(state);\n\n logger.info(\n `[cloud-login] cloud-wallet: provisioned ${Object.keys(descriptors).join(\", \")} — applying runtime reload`,\n );\n\n const restarted = state.restartRuntime\n ? await Promise.resolve(state.restartRuntime(\"cloud-wallet-bound\"))\n : false;\n if (!restarted) {\n logger.warn(\n \"[cloud-login] cloud-wallet: restartRuntime not wired or restart declined — user must restart manually\",\n );\n }\n } catch (cloudWalletErr) {\n try {\n await restoreConfigEnvRollbackSnapshot(rollbackEnvSnapshot);\n } catch (rollbackErr) {\n logger.error(\n `[cloud-login] cloud-wallet rollback failed: ${String(\n rollbackErr,\n )}`,\n );\n }\n\n replaceMutableRoot(state.config, rollbackConfigSnapshot);\n try {\n saveConfigOrThrow(state);\n } catch (saveRollbackErr) {\n logger.error(\n `[cloud-login] cloud-wallet config rollback failed: ${String(\n saveRollbackErr,\n )}`,\n );\n }\n\n logger.error(\n `[cloud-login] cloud-wallet provision failed: ${String(\n cloudWalletErr,\n )}`,\n );\n }\n }\n\n // Return the cloud API key to the renderer so it can populate\n // `globalThis.__ELIZA_CLOUD_AUTH_TOKEN__` and use the direct cloud\n // path (`/api/v1/eliza/agents`) for agent creation/provisioning.\n // Without this, every cloud op falls back to the proxy compat path,\n // which creates agents in a namespace whose queue never drains\n // (agents stay `status: \"queued\"` forever — setup hangs).\n //\n // ## Security trade-off — token in HTTP response body\n //\n // Sending an API key in the response body is a deliberate choice\n // for our architecture, NOT an oversight:\n // - The agent process and the renderer (Electrobun WebView) live\n // on the same machine. They communicate over loopback HTTP\n // (`127.0.0.1`). Any process that can sniff the loopback\n // interface (tcpdump, attached debugger) already has the\n // ambient privilege to read the renderer's memory or the\n // vault directly — the HTTP body is not the weakest link.\n // - The key IS the user's own secret (not server-owned), and\n // the response only goes to the renderer the user is\n // actively using.\n // - Returning a short-lived \"handle\" that the renderer\n // exchanges for the real token would just shift the same\n // cleartext transit one hop, not eliminate it.\n //\n // The principled fix is to push the token over an Electrobun RPC\n // channel (the same IPC the api-base-owner module uses for\n // `pushApiBaseToRenderer`). That requires routing the cloud\n // login outcome from the agent process to the Electrobun main\n // process and back to the renderer — three-process choreography\n // that doesn't fit this PR. Tracked as a follow-up.\n logger.info(\n `[cloud-login] sending API key to loopback renderer (single-user desktop trust model)`,\n );\n sendJson(res, {\n status: \"authenticated\",\n token: data.apiKey,\n keyPrefix: data.keyPrefix,\n organizationId,\n userId,\n });\n } else {\n sendJson(res, { status: data.status });\n }\n return true;\n }\n\n if (method === \"GET\" && pathname === \"/api/cloud/agents\") {\n const client = state.cloudManager?.getClient();\n if (!client) {\n sendJsonError(res, \"Not connected to Eliza Cloud\", 401);\n return true;\n }\n sendJson(res, { ok: true, agents: await client.listAgents() });\n return true;\n }\n\n if (method === \"POST\" && pathname === \"/api/cloud/agents\") {\n const client = state.cloudManager?.getClient();\n if (!client) {\n sendJsonError(res, \"Not connected to Eliza Cloud\", 401);\n return true;\n }\n\n const body = await readJsonBody<{\n agentName?: string;\n agentConfig?: Record<string, unknown>;\n environmentVars?: Record<string, string>;\n }>(req, res);\n if (!body) return true;\n\n if (!body.agentName?.trim()) {\n sendJsonError(res, \"agentName is required\");\n return true;\n }\n\n let agent: unknown;\n try {\n agent = await client.createAgent({\n agentName: body.agentName,\n agentConfig: body.agentConfig,\n environmentVars: body.environmentVars,\n });\n } catch (err) {\n logger.error(`[cloud] createAgent failed: ${String(err)}`);\n sendJson(\n res,\n { ok: false, error: `Cloud createAgent failed: ${String(err)}` },\n 502,\n );\n return true;\n }\n sendJson(res, { ok: true, agent }, 201);\n return true;\n }\n\n if (\n method === \"POST\" &&\n pathname.startsWith(\"/api/cloud/agents/\") &&\n pathname.endsWith(\"/provision\")\n ) {\n const agentId = extractAgentId(pathname);\n if (!agentId || !state.cloudManager) {\n sendJsonError(res, \"Invalid agent ID or cloud not connected\", 400);\n return true;\n }\n let proxy: { agentName?: string };\n try {\n proxy = await state.cloudManager.connect(agentId);\n } catch (err) {\n logger.error(`[cloud] provision/connect failed: ${String(err)}`);\n sendJson(\n res,\n { ok: false, error: `Cloud provision failed: ${String(err)}` },\n 502,\n );\n return true;\n }\n sendJson(res, {\n ok: true,\n agentId,\n agentName: proxy.agentName,\n status: state.cloudManager.getStatus(),\n });\n return true;\n }\n\n if (\n method === \"POST\" &&\n pathname.startsWith(\"/api/cloud/agents/\") &&\n pathname.endsWith(\"/shutdown\")\n ) {\n const agentId = extractAgentId(pathname);\n if (!agentId || !state.cloudManager) {\n sendJsonError(res, \"Invalid agent ID or cloud not connected\", 400);\n return true;\n }\n const client = state.cloudManager.getClient();\n if (!client) {\n sendJsonError(res, \"Not connected to Eliza Cloud\", 401);\n return true;\n }\n try {\n if (state.cloudManager.getActiveAgentId() === agentId) {\n await state.cloudManager.disconnect();\n }\n await client.deleteAgent(agentId);\n } catch (err) {\n logger.error(`[cloud] shutdown/deleteAgent failed: ${String(err)}`);\n sendJson(\n res,\n { ok: false, error: `Cloud shutdown failed: ${String(err)}` },\n 502,\n );\n return true;\n }\n sendJson(res, { ok: true, agentId, status: \"stopped\" });\n return true;\n }\n\n if (\n method === \"POST\" &&\n pathname.startsWith(\"/api/cloud/agents/\") &&\n pathname.endsWith(\"/connect\")\n ) {\n const agentId = extractAgentId(pathname);\n if (!agentId || !state.cloudManager) {\n sendJsonError(res, \"Invalid agent ID or cloud not connected\", 400);\n return true;\n }\n let proxy: { agentName?: string };\n try {\n if (state.cloudManager.getActiveAgentId()) {\n await state.cloudManager.disconnect();\n }\n proxy = await state.cloudManager.connect(agentId);\n } catch (err) {\n logger.error(`[cloud] connect failed: ${String(err)}`);\n sendJson(\n res,\n { ok: false, error: `Cloud connect failed: ${String(err)}` },\n 502,\n );\n return true;\n }\n sendJson(res, {\n ok: true,\n agentId,\n agentName: proxy.agentName,\n status: state.cloudManager.getStatus(),\n });\n return true;\n }\n\n if (method === \"POST\" && pathname === \"/api/cloud/disconnect\") {\n if (state.cloudManager) {\n await state.cloudManager.disconnect();\n }\n const cloud = (state.config.cloud ?? {}) as NonNullable<\n CloudConfigLike[\"cloud\"]\n >;\n delete cloud.apiKey;\n (state.config as Record<string, unknown>).cloud = cloud;\n applyCanonicalSetupConfig(state.config as never, {\n deploymentTarget: { runtime: \"local\" },\n linkedAccounts: {\n elizacloud: {\n status: \"unlinked\",\n source: \"api-key\",\n },\n },\n clearRoutes: [\"llmText\", \"tts\", \"media\", \"embeddings\", \"rpc\"],\n });\n migrateLegacyRuntimeConfig(state.config as Record<string, unknown>);\n\n try {\n if (state.saveConfig) {\n state.saveConfig(state.config);\n } else {\n logger.warn(\n \"[cloud-disconnect] saveConfig not available — config not persisted\",\n );\n }\n } catch (saveErr) {\n logger.error(\n `[cloud-disconnect] Failed to save config: ${String(saveErr)}`,\n );\n sendJson(\n res,\n { ok: false, error: \"Disconnected but failed to save config\" },\n 500,\n );\n return true;\n }\n\n delete process.env.ELIZAOS_CLOUD_API_KEY;\n delete process.env.ELIZAOS_CLOUD_ENABLED;\n\n if (state.runtime) {\n const character = state.runtime.character ?? {};\n state.runtime.character = character;\n if (!character.secrets) {\n character.secrets = {};\n }\n const secrets = character.secrets as Record<\n string,\n string | number | boolean\n >;\n delete secrets.ELIZAOS_CLOUD_API_KEY;\n delete secrets.ELIZAOS_CLOUD_ENABLED;\n if (typeof state.runtime.updateAgent === \"function\") {\n await state.runtime.updateAgent(state.runtime.agentId, {\n secrets: { ...secrets },\n });\n } else {\n logger.warn(\n \"[cloud-disconnect] updateAgent not available — runtime secrets not persisted\",\n );\n }\n }\n\n sendJson(res, { ok: true, status: \"disconnected\" });\n return true;\n }\n\n return false;\n}\n"
14
+ ],
15
+ "mappings": "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",
16
+ "debugId": "8DCC6EACC808486C64756E2164756E21",
17
+ "names": []
18
+ }
@@ -0,0 +1,35 @@
1
+ import type http from "node:http";
2
+ import { handleCloudRoute as handleAutonomousCloudRoute } from "./cloud-routes-autonomous.js";
3
+ import { normalizeCloudSiteUrl } from "../cloud/base-url.js";
4
+ import type { CloudManager } from "../cloud/cloud-manager.js";
5
+ import { validateCloudBaseUrl } from "../cloud/validate-url.js";
6
+ import { type AgentRuntime } from "@elizaos/core";
7
+ import { applyCanonicalSetupConfig, type ElizaConfig } from "../lib/config-like";
8
+ export interface CloudRouteState {
9
+ config: ElizaConfig;
10
+ cloudManager: CloudManager | null;
11
+ /** The running agent runtime — needed to persist cloud credentials to the DB. */
12
+ runtime: AgentRuntime | null;
13
+ restartRuntime?: (reason: string) => Promise<boolean> | boolean;
14
+ services?: Partial<CloudRouteServices>;
15
+ }
16
+ type CreateIntegrationTelemetrySpan = (meta: {
17
+ boundary: "cloud";
18
+ operation: string;
19
+ timeoutMs?: number;
20
+ }) => TelemetrySpan | null | undefined;
21
+ export interface CloudRouteServices {
22
+ applyCanonicalSetupConfig: typeof applyCanonicalSetupConfig;
23
+ createIntegrationTelemetrySpan: CreateIntegrationTelemetrySpan;
24
+ handleAutonomousCloudRoute: typeof handleAutonomousCloudRoute;
25
+ normalizeCloudSiteUrl: typeof normalizeCloudSiteUrl;
26
+ saveElizaConfig: (config: ElizaConfig) => void;
27
+ validateCloudBaseUrl: typeof validateCloudBaseUrl;
28
+ }
29
+ type TelemetrySpan = {
30
+ success: (meta?: Record<string, unknown>) => void;
31
+ failure: (meta?: Record<string, unknown>) => void;
32
+ };
33
+ export declare function handleCloudRoute(req: http.IncomingMessage, res: http.ServerResponse, pathname: string, method: string, state: CloudRouteState): Promise<boolean>;
34
+ export {};
35
+ //# sourceMappingURL=cloud-routes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cloud-routes.d.ts","sourceRoot":"","sources":["../../src/routes/cloud-routes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAKlC,OAAO,EAAqD,gBAAgB,IAAI,0BAA0B,EAAG,MAAM,8BAA8B,CAAC;AAKlJ,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,KAAK,YAAY,EAAU,MAAM,eAAe,CAAC;AAY1D,OAAO,EACL,yBAAyB,EACzB,KAAK,WAAW,EAEjB,MAAM,oBAAoB,CAAC;AAG5B,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,WAAW,CAAC;IACpB,YAAY,EAAE,YAAY,GAAG,IAAI,CAAC;IAClC,iFAAiF;IACjF,OAAO,EAAE,YAAY,GAAG,IAAI,CAAC;IAC7B,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;IAChE,QAAQ,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;CACxC;AAED,KAAK,8BAA8B,GAAG,CAAC,IAAI,EAAE;IAC3C,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,KAAK,aAAa,GAAG,IAAI,GAAG,SAAS,CAAC;AAEvC,MAAM,WAAW,kBAAkB;IACjC,yBAAyB,EAAE,OAAO,yBAAyB,CAAC;IAC5D,8BAA8B,EAAE,8BAA8B,CAAC;IAC/D,0BAA0B,EAAE,OAAO,0BAA0B,CAAC;IAC9D,qBAAqB,EAAE,OAAO,qBAAqB,CAAC;IACpD,eAAe,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,CAAC;IAC/C,oBAAoB,EAAE,OAAO,oBAAoB,CAAC;CACnD;AAyED,KAAK,aAAa,GAAG;IACnB,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IAClD,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;CACnD,CAAC;AA0NF,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,IAAI,CAAC,eAAe,EACzB,GAAG,EAAE,IAAI,CAAC,cAAc,EACxB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,eAAe,GACrB,OAAO,CAAC,OAAO,CAAC,CA0RlB"}