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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (452) 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 +9112 -2265
  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 +1811 -0
  56. package/dist/cloud/index.js.map +24 -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 +9862 -0
  117. package/dist/index.js.map +77 -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.map +1 -1
  164. package/dist/models/embeddings.js +329 -0
  165. package/dist/models/embeddings.js.map +13 -0
  166. package/dist/models/image.d.ts.map +1 -1
  167. package/dist/models/image.js +401 -0
  168. package/dist/models/image.js.map +14 -0
  169. package/dist/models/index.d.ts +1 -2
  170. package/dist/models/index.d.ts.map +1 -1
  171. package/dist/models/index.js +1896 -0
  172. package/dist/models/index.js.map +19 -0
  173. package/dist/models/research.d.ts.map +1 -1
  174. package/dist/models/research.js +341 -0
  175. package/dist/models/research.js.map +13 -0
  176. package/dist/models/speech.d.ts +61 -3
  177. package/dist/models/speech.d.ts.map +1 -1
  178. package/dist/models/speech.js +429 -0
  179. package/dist/models/speech.js.map +13 -0
  180. package/dist/models/text.d.ts +111 -3
  181. package/dist/models/text.d.ts.map +1 -1
  182. package/dist/models/text.js +1173 -0
  183. package/dist/models/text.js.map +14 -0
  184. package/dist/models/tokenization.d.ts.map +1 -1
  185. package/dist/models/tokenization.js +65 -0
  186. package/dist/models/tokenization.js.map +10 -0
  187. package/dist/models/transcription.d.ts.map +1 -1
  188. package/dist/models/transcription.js +297 -0
  189. package/dist/models/transcription.js.map +13 -0
  190. package/dist/node/index.d.ts +2 -2
  191. package/dist/node/index.node.js +9189 -2295
  192. package/dist/node/index.node.js.map +68 -30
  193. package/dist/plugin.d.ts +20 -0
  194. package/dist/plugin.d.ts.map +1 -0
  195. package/dist/plugin.js +2937 -0
  196. package/dist/plugin.js.map +28 -0
  197. package/dist/providers/openai.d.ts.map +1 -1
  198. package/dist/providers/openai.js +136 -0
  199. package/dist/providers/openai.js.map +11 -0
  200. package/dist/register-routes.d.ts +2 -0
  201. package/dist/register-routes.d.ts.map +1 -0
  202. package/dist/register-routes.js +2938 -0
  203. package/dist/register-routes.js.map +29 -0
  204. package/dist/routes/cloud-billing-routes.d.ts +9 -0
  205. package/dist/routes/cloud-billing-routes.d.ts.map +1 -0
  206. package/dist/routes/cloud-billing-routes.js +764 -0
  207. package/dist/routes/cloud-billing-routes.js.map +15 -0
  208. package/dist/routes/cloud-coding-container-routes.d.ts +8 -0
  209. package/dist/routes/cloud-coding-container-routes.d.ts.map +1 -0
  210. package/dist/routes/cloud-coding-container-routes.js +214 -0
  211. package/dist/routes/cloud-coding-container-routes.js.map +11 -0
  212. package/dist/routes/cloud-compat-routes.d.ts +10 -0
  213. package/dist/routes/cloud-compat-routes.d.ts.map +1 -0
  214. package/dist/routes/cloud-compat-routes.js +495 -0
  215. package/dist/routes/cloud-compat-routes.js.map +15 -0
  216. package/dist/routes/cloud-features-routes.d.ts +9 -0
  217. package/dist/routes/cloud-features-routes.d.ts.map +1 -0
  218. package/dist/routes/cloud-features-routes.js +124 -0
  219. package/dist/routes/cloud-features-routes.js.map +11 -0
  220. package/dist/routes/cloud-provisioning.d.ts +14 -0
  221. package/dist/routes/cloud-provisioning.d.ts.map +1 -0
  222. package/dist/routes/cloud-provisioning.js +37 -0
  223. package/dist/routes/cloud-provisioning.js.map +10 -0
  224. package/dist/routes/cloud-relay-routes.d.ts +23 -0
  225. package/dist/routes/cloud-relay-routes.d.ts.map +1 -0
  226. package/dist/routes/cloud-relay-routes.js +142 -0
  227. package/dist/routes/cloud-relay-routes.js.map +11 -0
  228. package/dist/routes/cloud-routes-autonomous.d.ts +82 -0
  229. package/dist/routes/cloud-routes-autonomous.d.ts.map +1 -0
  230. package/dist/routes/cloud-routes-autonomous.js +1252 -0
  231. package/dist/routes/cloud-routes-autonomous.js.map +18 -0
  232. package/dist/routes/cloud-routes.d.ts +35 -0
  233. package/dist/routes/cloud-routes.d.ts.map +1 -0
  234. package/dist/routes/cloud-routes.js +2173 -0
  235. package/dist/routes/cloud-routes.js.map +23 -0
  236. package/dist/routes/cloud-status-routes-autonomous.d.ts +14 -0
  237. package/dist/routes/cloud-status-routes-autonomous.d.ts.map +1 -0
  238. package/dist/routes/cloud-status-routes-autonomous.js +349 -0
  239. package/dist/routes/cloud-status-routes-autonomous.js.map +13 -0
  240. package/dist/routes/cloud-status-routes.d.ts +4 -0
  241. package/dist/routes/cloud-status-routes.d.ts.map +1 -0
  242. package/dist/routes/cloud-status-routes.js +695 -0
  243. package/dist/routes/cloud-status-routes.js.map +15 -0
  244. package/dist/routes/home-remote-runner-access-url.d.ts +16 -0
  245. package/dist/routes/home-remote-runner-access-url.d.ts.map +1 -0
  246. package/dist/routes/home-remote-runner-access-url.js +91 -0
  247. package/dist/routes/home-remote-runner-access-url.js.map +10 -0
  248. package/dist/routes/travel-provider-relay-routes.d.ts +9 -0
  249. package/dist/routes/travel-provider-relay-routes.d.ts.map +1 -0
  250. package/dist/routes/travel-provider-relay-routes.js +358 -0
  251. package/dist/routes/travel-provider-relay-routes.js.map +14 -0
  252. package/dist/services/cloud-auth.d.ts +140 -5
  253. package/dist/services/cloud-auth.d.ts.map +1 -1
  254. package/dist/services/cloud-auth.js +368 -0
  255. package/dist/services/cloud-auth.js.map +12 -0
  256. package/dist/services/cloud-backup.d.ts.map +1 -1
  257. package/dist/services/cloud-backup.js +176 -0
  258. package/dist/services/cloud-backup.js.map +11 -0
  259. package/dist/services/cloud-bootstrap.d.ts +38 -0
  260. package/dist/services/cloud-bootstrap.d.ts.map +1 -0
  261. package/dist/services/cloud-bootstrap.js +84 -0
  262. package/dist/services/cloud-bootstrap.js.map +10 -0
  263. package/dist/services/cloud-bridge.d.ts +1 -1
  264. package/dist/services/cloud-bridge.d.ts.map +1 -1
  265. package/dist/services/cloud-bridge.js +308 -0
  266. package/dist/services/cloud-bridge.js.map +11 -0
  267. package/dist/services/cloud-container.d.ts +5 -1
  268. package/dist/services/cloud-container.d.ts.map +1 -1
  269. package/dist/services/cloud-container.js +292 -0
  270. package/dist/services/cloud-container.js.map +11 -0
  271. package/dist/services/cloud-credential-provider.d.ts +55 -0
  272. package/dist/services/cloud-credential-provider.d.ts.map +1 -0
  273. package/dist/services/cloud-credential-provider.js +190 -0
  274. package/dist/services/cloud-credential-provider.js.map +11 -0
  275. package/dist/services/cloud-managed-gateway-relay.d.ts +38 -0
  276. package/dist/services/cloud-managed-gateway-relay.d.ts.map +1 -0
  277. package/dist/services/cloud-managed-gateway-relay.js +479 -0
  278. package/dist/services/cloud-managed-gateway-relay.js.map +10 -0
  279. package/dist/services/cloud-model-registry.d.ts.map +1 -1
  280. package/dist/services/cloud-model-registry.js +175 -0
  281. package/dist/services/cloud-model-registry.js.map +10 -0
  282. package/dist/services/index.d.ts +3 -1
  283. package/dist/services/index.d.ts.map +1 -1
  284. package/dist/services/index.js +29 -0
  285. package/dist/services/index.js.map +9 -0
  286. package/dist/types/cloud.d.ts +42 -19
  287. package/dist/types/cloud.d.ts.map +1 -1
  288. package/dist/types/cloud.js +52 -0
  289. package/dist/types/cloud.js.map +10 -0
  290. package/dist/types/index.d.ts +1 -1
  291. package/dist/types/index.d.ts.map +1 -1
  292. package/dist/types/index.js +24 -0
  293. package/dist/types/index.js.map +9 -0
  294. package/dist/utils/cloud-api.d.ts +2 -27
  295. package/dist/utils/cloud-api.d.ts.map +1 -1
  296. package/dist/utils/cloud-api.js +33 -0
  297. package/dist/utils/cloud-api.js.map +10 -0
  298. package/dist/utils/cloud-sdk/client.d.ts +133 -0
  299. package/dist/utils/cloud-sdk/client.d.ts.map +1 -0
  300. package/dist/utils/cloud-sdk/client.js +3693 -0
  301. package/dist/utils/cloud-sdk/client.js.map +13 -0
  302. package/dist/utils/cloud-sdk/http.d.ts +37 -0
  303. package/dist/utils/cloud-sdk/http.d.ts.map +1 -0
  304. package/dist/utils/cloud-sdk/http.js +237 -0
  305. package/dist/utils/cloud-sdk/http.js.map +11 -0
  306. package/dist/utils/cloud-sdk/index.d.ts +6 -0
  307. package/dist/utils/cloud-sdk/index.d.ts.map +1 -0
  308. package/dist/utils/cloud-sdk/index.js +29 -0
  309. package/dist/utils/cloud-sdk/index.js.map +9 -0
  310. package/dist/utils/cloud-sdk/public-routes.d.ts +5563 -0
  311. package/dist/utils/cloud-sdk/public-routes.d.ts.map +1 -0
  312. package/dist/utils/cloud-sdk/public-routes.js +3048 -0
  313. package/dist/utils/cloud-sdk/public-routes.js.map +10 -0
  314. package/dist/utils/cloud-sdk/types.cloud-api.d.ts +101 -0
  315. package/dist/utils/cloud-sdk/types.cloud-api.d.ts.map +1 -0
  316. package/dist/utils/cloud-sdk/types.cloud-api.js +2 -0
  317. package/dist/utils/cloud-sdk/types.cloud-api.js.map +9 -0
  318. package/dist/utils/cloud-sdk/types.d.ts +653 -0
  319. package/dist/utils/cloud-sdk/types.d.ts.map +1 -0
  320. package/dist/utils/cloud-sdk/types.js +29 -0
  321. package/dist/utils/cloud-sdk/types.js.map +10 -0
  322. package/dist/utils/config.d.ts +16 -3
  323. package/dist/utils/config.d.ts.map +1 -1
  324. package/dist/utils/config.js +147 -0
  325. package/dist/utils/config.js.map +10 -0
  326. package/dist/utils/events.d.ts +23 -2
  327. package/dist/utils/events.d.ts.map +1 -1
  328. package/dist/utils/events.js +45 -0
  329. package/dist/utils/events.js.map +10 -0
  330. package/dist/utils/helpers.d.ts.map +1 -1
  331. package/dist/utils/helpers.js +103 -0
  332. package/dist/utils/helpers.js.map +10 -0
  333. package/dist/utils/responses-output.d.ts +13 -0
  334. package/dist/utils/responses-output.d.ts.map +1 -0
  335. package/dist/utils/responses-output.js +102 -0
  336. package/dist/utils/responses-output.js.map +10 -0
  337. package/dist/utils/sdk-client.d.ts +5 -0
  338. package/dist/utils/sdk-client.d.ts.map +1 -0
  339. package/dist/utils/sdk-client.js +157 -0
  340. package/dist/utils/sdk-client.js.map +11 -0
  341. package/dist/utils/waifu-metering.d.ts +108 -0
  342. package/dist/utils/waifu-metering.d.ts.map +1 -0
  343. package/dist/utils/waifu-metering.js +166 -0
  344. package/dist/utils/waifu-metering.js.map +10 -0
  345. package/package.json +139 -21
  346. package/src/cloud/auth-service-types.ts +24 -0
  347. package/src/cloud/auth.ts +175 -0
  348. package/src/cloud/backup.ts +46 -0
  349. package/src/cloud/base-url.ts +6 -0
  350. package/src/cloud/bridge-client.ts +602 -0
  351. package/src/cloud/clack-observer.ts +189 -0
  352. package/src/cloud/cloud-api-key.ts +80 -0
  353. package/src/cloud/cloud-manager.ts +163 -0
  354. package/src/cloud/cloud-proxy.ts +52 -0
  355. package/src/cloud/cloud-wallet.ts +341 -0
  356. package/src/cloud/duffel-client.ts +847 -0
  357. package/src/cloud/index.ts +38 -0
  358. package/src/cloud/lifeops-schedule-sync-client.ts +245 -0
  359. package/src/cloud/lifeops-schedule-sync-contracts.ts +124 -0
  360. package/src/cloud/managed-payment-clients.ts +374 -0
  361. package/src/cloud/null-observer.ts +45 -0
  362. package/src/cloud/reconnect.ts +111 -0
  363. package/src/cloud/setup-observer.ts +125 -0
  364. package/src/cloud/validate-url.ts +187 -0
  365. package/src/cloud/x402-payment-handler.ts +215 -0
  366. package/src/cloud-providers/cloud-status.ts +75 -0
  367. package/src/cloud-providers/container-health.ts +68 -0
  368. package/src/cloud-providers/credit-balance.ts +70 -0
  369. package/src/cloud-providers/index.ts +3 -0
  370. package/src/cloud-providers/model-registry.ts +74 -0
  371. package/src/cloud-setup.ts +531 -0
  372. package/src/cloud-voice-catalog.test.ts +254 -0
  373. package/src/cloud-voice-catalog.ts +246 -0
  374. package/src/index.browser.ts +39 -0
  375. package/src/index.node.ts +69 -0
  376. package/src/index.ts +419 -0
  377. package/src/init.ts +39 -0
  378. package/src/lib/cloud-connection.ts +661 -0
  379. package/src/lib/cloud-secrets.ts +14 -0
  380. package/src/lib/config-env.ts +168 -0
  381. package/src/lib/config-like.ts +149 -0
  382. package/src/lib/credential-type-map.ts +130 -0
  383. package/src/lib/feature-flags.ts +26 -0
  384. package/src/lib/http.ts +122 -0
  385. package/src/lib/server-cloud-tts.ts +301 -0
  386. package/src/lib/state-paths.ts +28 -0
  387. package/src/lib/tts-debug.ts +5 -0
  388. package/src/models/embeddings.ts +298 -0
  389. package/src/models/image.ts +234 -0
  390. package/src/models/index.ts +16 -0
  391. package/src/models/research.ts +275 -0
  392. package/src/models/speech.ts +324 -0
  393. package/src/models/text.ts +1493 -0
  394. package/src/models/tokenization.ts +67 -0
  395. package/src/models/transcription.ts +101 -0
  396. package/src/plugin.ts +281 -0
  397. package/src/providers/openai.ts +16 -0
  398. package/src/register-routes.ts +6 -0
  399. package/src/routes/cloud-billing-routes.ts +744 -0
  400. package/src/routes/cloud-coding-container-routes.ts +198 -0
  401. package/src/routes/cloud-compat-routes.ts +304 -0
  402. package/src/routes/cloud-features-routes.ts +57 -0
  403. package/src/routes/cloud-provisioning.ts +37 -0
  404. package/src/routes/cloud-relay-routes.ts +135 -0
  405. package/src/routes/cloud-routes-autonomous.ts +993 -0
  406. package/src/routes/cloud-routes.ts +637 -0
  407. package/src/routes/cloud-status-routes-autonomous.ts +238 -0
  408. package/src/routes/cloud-status-routes.ts +73 -0
  409. package/src/routes/home-remote-runner-access-url.ts +83 -0
  410. package/src/routes/travel-provider-relay-routes.ts +193 -0
  411. package/src/services/cloud-auth.ts +574 -0
  412. package/src/services/cloud-backup.ts +208 -0
  413. package/src/services/cloud-bootstrap.ts +106 -0
  414. package/src/services/cloud-bridge.ts +386 -0
  415. package/src/services/cloud-container.ts +390 -0
  416. package/src/services/cloud-credential-provider.ts +210 -0
  417. package/src/services/cloud-managed-gateway-relay.ts +663 -0
  418. package/src/services/cloud-model-registry.ts +202 -0
  419. package/src/services/index.ts +17 -0
  420. package/{types → src/types}/cloud.ts +74 -29
  421. package/{types → src/types}/index.ts +25 -0
  422. package/src/utils/cloud-api.ts +10 -0
  423. package/src/utils/cloud-sdk/client.ts +774 -0
  424. package/src/utils/cloud-sdk/http.ts +291 -0
  425. package/src/utils/cloud-sdk/index.ts +23 -0
  426. package/src/utils/cloud-sdk/public-routes.ts +5238 -0
  427. package/src/utils/cloud-sdk/types.cloud-api.ts +120 -0
  428. package/src/utils/cloud-sdk/types.ts +760 -0
  429. package/src/utils/config.ts +193 -0
  430. package/src/utils/events.ts +65 -0
  431. package/src/utils/helpers.ts +107 -0
  432. package/src/utils/responses-output.ts +115 -0
  433. package/src/utils/sdk-client.ts +41 -0
  434. package/src/utils/waifu-metering.ts +302 -0
  435. package/dist/actions/check-credits.d.ts +0 -6
  436. package/dist/actions/check-credits.d.ts.map +0 -1
  437. package/dist/actions/freeze-agent.d.ts +0 -9
  438. package/dist/actions/freeze-agent.d.ts.map +0 -1
  439. package/dist/actions/index.d.ts +0 -5
  440. package/dist/actions/index.d.ts.map +0 -1
  441. package/dist/actions/provision-agent.d.ts +0 -8
  442. package/dist/actions/provision-agent.d.ts.map +0 -1
  443. package/dist/actions/resume-agent.d.ts +0 -9
  444. package/dist/actions/resume-agent.d.ts.map +0 -1
  445. package/dist/build.d.ts +0 -3
  446. package/dist/build.d.ts.map +0 -1
  447. package/dist/generated/specs/specs.d.ts +0 -55
  448. package/dist/generated/specs/specs.d.ts.map +0 -1
  449. package/dist/models/object.d.ts +0 -4
  450. package/dist/models/object.d.ts.map +0 -1
  451. package/dist/utils/forwarded-settings.d.ts +0 -8
  452. package/dist/utils/forwarded-settings.d.ts.map +0 -1
@@ -0,0 +1,23 @@
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/routes/home-remote-runner-access-url.ts", "../src/lib/config-like.ts", "../src/routes/cloud-routes-autonomous.ts", "../src/lib/cloud-secrets.ts", "../src/lib/cloud-connection.ts", "../src/routes/cloud-coding-container-routes.ts", "../src/routes/cloud-routes.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 { normalizeCloudSiteUrl } from \"@elizaos/shared\";\n\nexport const HOME_REMOTE_RUNNER_ACCESS_SESSION_PARAM = \"homeRemoteRunnerSession\";\n\nexport interface HomeRemoteRunnerSshTunnel {\n command: string;\n localUrl: string;\n}\n\nexport function buildHomeRemoteRunnerAccessUrl(input: {\n cloudBaseUrl?: string | null;\n sessionId?: string | null;\n}): string | null {\n const sessionId = input.sessionId?.trim();\n if (!sessionId) return null;\n\n try {\n const url = new URL(normalizeCloudSiteUrl(input.cloudBaseUrl ?? undefined));\n url.pathname = \"/dashboard/app\";\n url.search = \"\";\n url.hash = \"\";\n url.searchParams.set(HOME_REMOTE_RUNNER_ACCESS_SESSION_PARAM, sessionId);\n return url.toString();\n } catch {\n return null;\n }\n}\n\nexport function buildHomeRemoteRunnerSshTunnel(input: {\n remoteBaseUrl?: string | null;\n sshTarget?: string | null;\n sshIdentity?: string | null;\n localPort?: string | number | null;\n}): HomeRemoteRunnerSshTunnel | null {\n const sshTarget = normalizeSshTarget(input.sshTarget);\n if (!sshTarget) return null;\n\n let parsed: URL;\n try {\n parsed = new URL(input.remoteBaseUrl?.trim() ?? \"\");\n } catch {\n return null;\n }\n\n if (parsed.protocol !== \"http:\") {\n return null;\n }\n\n const remotePort = parsed.port || \"80\";\n const localPort = normalizePort(input.localPort) ?? remotePort;\n const remoteHost =\n parsed.hostname === \"localhost\" || parsed.hostname === \"127.0.0.1\"\n ? \"127.0.0.1\"\n : parsed.hostname;\n const identityArg = input.sshIdentity?.trim()\n ? ` -i ${quoteShellArg(input.sshIdentity.trim())}`\n : \"\";\n const command = `ssh -N${identityArg} -L 127.0.0.1:${localPort}:${remoteHost}:${remotePort} ${sshTarget}`;\n return {\n command,\n localUrl: `${parsed.protocol}//127.0.0.1:${localPort}`,\n };\n}\n\nfunction normalizePort(value: string | number | null | undefined): string | null {\n if (value === null || value === undefined) return null;\n const raw = String(value).trim();\n if (!/^\\d+$/.test(raw)) return null;\n const port = Number(raw);\n if (!Number.isInteger(port) || port < 1 || port > 65535) return null;\n return String(port);\n}\n\nfunction normalizeSshTarget(value: string | null | undefined): string | null {\n const target = value?.trim();\n if (!target) return null;\n if (!/^[A-Za-z0-9._~%+-]+@[A-Za-z0-9.-]+$/.test(target)) return null;\n return target;\n}\n\nfunction quoteShellArg(value: string): string {\n return `'${value.replace(/'/g, \"'\\\\''\")}'`;\n}\n",
13
+ "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",
14
+ "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",
15
+ "/**\n * Sealed in-process secret store for cloud credentials.\n *\n * The implementation moved to `@elizaos/shared/elizacloud/cloud-secrets` so\n * app-core and other host-layer packages can read sealed cloud secrets without\n * reverse-importing this plugin. This module remains for backwards\n * compatibility with plugin-internal callers.\n */\nexport {\n clearCloudSecrets,\n getCloudSecret,\n scrubCloudSecretsFromEnv,\n _resetCloudSecretsForTesting,\n} from \"@elizaos/shared\";\n",
16
+ "import {\n isCloudInferenceSelectedInConfig,\n isElizaSettingsDebugEnabled,\n migrateLegacyRuntimeConfig,\n settingsDebugCloudSummary,\n} from \"@elizaos/core\";\nimport { resolveCloudApiBaseUrl as resolveCanonicalCloudApiBaseUrl } from \"../cloud/base-url.js\";\nimport { validateCloudBaseUrl } from \"../cloud/validate-url.js\";\nimport type { AgentRuntime } from \"@elizaos/core\";\nimport { logger } from \"@elizaos/core\";\nimport {\n applyCanonicalSetupConfig,\n type ElizaConfig,\n normalizeEnvValue,\n} from \"./config-like\";\nimport {\n clearCloudSecrets,\n getCloudSecret,\n scrubCloudSecretsFromEnv,\n} from \"./cloud-secrets\";\n\nconst DEFAULT_CLOUD_API_BASE_URL = \"https://www.elizacloud.ai/api/v1\";\nexport const CLOUD_BILLING_URL =\n \"https://www.elizacloud.ai/dashboard/settings?tab=billing\";\n\nconst CLOUD_ENV_KEYS = [\n \"ELIZAOS_CLOUD_API_KEY\",\n \"ELIZAOS_CLOUD_ENABLED\",\n \"ELIZAOS_CLOUD_BASE_URL\",\n \"ELIZAOS_CLOUD_NANO_MODEL\",\n \"ELIZAOS_CLOUD_MEDIUM_MODEL\",\n \"ELIZAOS_CLOUD_SMALL_MODEL\",\n \"ELIZAOS_CLOUD_LARGE_MODEL\",\n \"ELIZAOS_CLOUD_MEGA_MODEL\",\n \"ELIZAOS_CLOUD_RESPONSE_HANDLER_MODEL\",\n \"ELIZAOS_CLOUD_SHOULD_RESPOND_MODEL\",\n \"ELIZAOS_CLOUD_ACTION_PLANNER_MODEL\",\n \"ELIZAOS_CLOUD_PLANNER_MODEL\",\n \"ELIZAOS_CLOUD_USE_INFERENCE\",\n \"ELIZAOS_CLOUD_USE_TTS\",\n \"ELIZAOS_CLOUD_USE_MEDIA\",\n \"ELIZAOS_CLOUD_USE_EMBEDDINGS\",\n \"ELIZAOS_CLOUD_USE_RPC\",\n] as const;\n\nconst CLOUD_RUNTIME_SECRET_KEYS = [\n \"ELIZAOS_CLOUD_API_KEY\",\n \"ELIZAOS_CLOUD_ENABLED\",\n \"ELIZAOS_CLOUD_BASE_URL\",\n \"ELIZAOS_CLOUD_NANO_MODEL\",\n \"ELIZAOS_CLOUD_MEDIUM_MODEL\",\n \"ELIZAOS_CLOUD_SMALL_MODEL\",\n \"ELIZAOS_CLOUD_LARGE_MODEL\",\n \"ELIZAOS_CLOUD_MEGA_MODEL\",\n \"ELIZAOS_CLOUD_RESPONSE_HANDLER_MODEL\",\n \"ELIZAOS_CLOUD_SHOULD_RESPOND_MODEL\",\n \"ELIZAOS_CLOUD_ACTION_PLANNER_MODEL\",\n \"ELIZAOS_CLOUD_PLANNER_MODEL\",\n \"ELIZA_CLOUD_AUTH_TOKEN\",\n \"ELIZA_CLOUD_USER_ID\",\n \"ELIZA_CLOUD_ORGANIZATION_ID\",\n] as const;\n\nconst CLOUD_RUNTIME_SETTING_KEYS = [\n \"ELIZA_CLOUD_AUTH_TOKEN\",\n \"ELIZA_CLOUD_USER_ID\",\n \"ELIZA_CLOUD_ORGANIZATION_ID\",\n] as const;\n\nconst CLOUD_AUTH_CLEAR_METHODS = [\n \"disconnect\",\n \"logout\",\n \"signOut\",\n \"signout\",\n \"clearSession\",\n \"clearAuth\",\n \"resetAuth\",\n \"reset\",\n] as const;\n\ntype CloudClientLike = {\n get?: (path: string) => Promise<unknown>;\n};\n\nexport type CloudAuthLike = {\n authenticateWithApiKey?: (input: {\n apiKey: string;\n organizationId?: string;\n userId?: string;\n }) => unknown;\n isAuthenticated?: () => boolean;\n getUserId?: () => string | undefined;\n getOrganizationId?: () => string | undefined;\n getClient?: () => CloudClientLike | null;\n} & Partial<\n Record<\n (typeof CLOUD_AUTH_CLEAR_METHODS)[number],\n (() => Promise<unknown>) | (() => unknown)\n >\n>;\n\nexport type RuntimeCloudLike = AgentRuntime & {\n agentId: string;\n character: {\n secrets?: Record<string, string | number | boolean>;\n settings?: Record<string, unknown>;\n };\n updateAgent?: (\n agentId: string,\n update: { secrets: Record<string, string | number | boolean> },\n ) => Promise<unknown>;\n setSetting?: (key: string, value: string | null) => unknown;\n getService?: (name: string) => unknown;\n};\n\ntype CloudManagerLike = {\n disconnect?: () => Promise<void>;\n} | null;\n\nexport type CloudConnectionSnapshot = {\n apiKey: string | undefined;\n authConnected: boolean;\n cloudAuth: CloudAuthLike | null;\n connected: boolean;\n enabled: boolean;\n hasApiKey: boolean;\n organizationId: string | undefined;\n userId: string | undefined;\n};\n\ntype CloudCreditsResponse = {\n balance: number | null;\n connected: boolean;\n authRejected?: boolean;\n critical?: boolean;\n error?: string;\n low?: boolean;\n topUpUrl?: string;\n};\n\n/** Thrown when the credits endpoint returns 401 — same credential path as chat completions. */\nexport class CloudCreditsAuthRejectedError extends Error {\n override readonly name = \"CloudCreditsAuthRejectedError\";\n constructor(message = \"Eliza Cloud API key was rejected\") {\n super(message);\n }\n}\n\nfunction cloudCreditsHttpErrorMessage(\n status: number,\n creditResponse: { error?: unknown },\n): string {\n const err = creditResponse.error;\n if (typeof err === \"string\" && err.trim()) {\n return err.trim();\n }\n if (err && typeof err === \"object\" && \"message\" in err) {\n const msg = (err as { message?: unknown }).message;\n if (typeof msg === \"string\" && msg.trim()) {\n return msg.trim();\n }\n }\n return `HTTP ${status}`;\n}\n\nfunction asRuntimeCloud(runtime: AgentRuntime | null): RuntimeCloudLike | null {\n return runtime as RuntimeCloudLike | null;\n}\n\nexport function getCloudAuth(\n runtime: AgentRuntime | null,\n): CloudAuthLike | null {\n const runtimeWithServices = asRuntimeCloud(runtime);\n if (typeof runtimeWithServices?.getService !== \"function\") {\n return null;\n }\n\n const service = runtimeWithServices.getService(\"CLOUD_AUTH\");\n return service && typeof service === \"object\"\n ? (service as CloudAuthLike)\n : null;\n}\n\nfunction resolvePersistedCloudIdentity(runtime: AgentRuntime | null): {\n organizationId: string | undefined;\n userId: string | undefined;\n} {\n const runtimeWithCloud = asRuntimeCloud(runtime);\n return {\n organizationId:\n normalizeEnvValue(\n runtimeWithCloud?.getSetting?.(\"ELIZA_CLOUD_ORGANIZATION_ID\") as\n | string\n | undefined,\n ) ??\n normalizeEnvValue(\n runtimeWithCloud?.character?.secrets?.ELIZA_CLOUD_ORGANIZATION_ID as\n | string\n | undefined,\n ),\n userId:\n normalizeEnvValue(\n runtimeWithCloud?.getSetting?.(\"ELIZA_CLOUD_USER_ID\") as\n | string\n | undefined,\n ) ??\n normalizeEnvValue(\n runtimeWithCloud?.character?.secrets?.ELIZA_CLOUD_USER_ID as\n | string\n | undefined,\n ),\n };\n}\n\nexport function resolveCloudApiBaseUrl(rawBaseUrl?: string): string {\n return (\n resolveCanonicalCloudApiBaseUrl(rawBaseUrl ?? DEFAULT_CLOUD_API_BASE_URL) ??\n DEFAULT_CLOUD_API_BASE_URL\n );\n}\n\nexport function resolveCloudApiKey(\n config: Pick<ElizaConfig, \"cloud\"> | Record<string, unknown>,\n runtime?: {\n character?: { secrets?: Record<string, unknown> };\n getSetting?: (key: string) => unknown;\n } | null,\n): string | undefined {\n migrateLegacyRuntimeConfig(config as Record<string, unknown>);\n // 1. Config file (disk)\n const configApiKey = normalizeEnvValue(\n (config as { cloud?: { apiKey?: string } }).cloud?.apiKey,\n );\n if (configApiKey) return configApiKey;\n\n if (!isCloudInferenceSelectedInConfig(config as Record<string, unknown>)) {\n // A linked cloud account is represented by the persisted disk key above.\n // Do not resurrect cloud from sealed/env/runtime fallbacks when the\n // canonical connection is local, remote, or unset.\n return undefined;\n }\n\n // 2. Sealed in-process secret store\n const sealedKey = normalizeEnvValue(getCloudSecret(\"ELIZAOS_CLOUD_API_KEY\"));\n if (sealedKey) return sealedKey;\n\n // 3. Process environment (may not be scrubbed yet)\n const envKey = normalizeEnvValue(process.env.ELIZAOS_CLOUD_API_KEY);\n if (envKey) return envKey;\n\n // 4. Runtime settings (persisted in database, survives restarts)\n const runtimeSettingKey = normalizeEnvValue(\n runtime?.getSetting?.(\"ELIZAOS_CLOUD_API_KEY\") as string | undefined,\n );\n if (runtimeSettingKey) return runtimeSettingKey;\n\n // 5. Runtime character secrets (persisted in database, survives restarts)\n const runtimeKey = normalizeEnvValue(\n runtime?.character?.secrets?.ELIZAOS_CLOUD_API_KEY as string | undefined,\n );\n if (runtimeKey) return runtimeKey;\n\n return undefined;\n}\n\nexport function resolveCloudConnectionSnapshot(\n config: Partial<ElizaConfig>,\n runtime: AgentRuntime | null,\n): CloudConnectionSnapshot {\n migrateLegacyRuntimeConfig(config as Record<string, unknown>);\n const _cloudRecord =\n config.cloud && typeof config.cloud === \"object\"\n ? (config.cloud as Record<string, unknown>)\n : undefined;\n const enabled = isCloudInferenceSelectedInConfig(\n config as Record<string, unknown>,\n );\n const apiKey = resolveCloudApiKey(config, runtime);\n const cloudAuth = getCloudAuth(runtime);\n const authConnected = Boolean(cloudAuth?.isAuthenticated?.());\n const hasApiKey = Boolean(apiKey);\n const persistedIdentity = resolvePersistedCloudIdentity(runtime);\n const shouldExposeIdentity = authConnected || hasApiKey;\n\n return {\n apiKey,\n authConnected,\n cloudAuth,\n connected: authConnected || hasApiKey,\n enabled,\n hasApiKey,\n organizationId: shouldExposeIdentity\n ? (normalizeEnvValue(cloudAuth?.getOrganizationId?.()) ??\n persistedIdentity.organizationId)\n : undefined,\n userId: shouldExposeIdentity\n ? (normalizeEnvValue(cloudAuth?.getUserId?.()) ??\n persistedIdentity.userId)\n : undefined,\n };\n}\n\n/**\n * Coerce an Eliza Cloud `balance` field into a number. The cloud API\n * returns `balance` as `string | number` (per the Bridge client + config\n * type definitions) — string when the upstream is using a fixed-precision\n * decimal, number when it's been arithmetic'd. Treat both as the same\n * dollar amount; reject anything else as an unexpected response.\n */\nfunction coerceCloudBalance(value: unknown): number | null {\n if (typeof value === \"number\" && Number.isFinite(value)) {\n return value;\n }\n if (typeof value === \"string\") {\n const trimmed = value.trim();\n if (!trimmed) return null;\n const parsed = Number.parseFloat(trimmed);\n return Number.isFinite(parsed) ? parsed : null;\n }\n return null;\n}\n\nasync function fetchCloudCreditsByApiKey(\n baseUrl: string,\n apiKey: string,\n): Promise<number | null> {\n const response = await fetch(`${baseUrl}/credits/balance`, {\n headers: {\n Accept: \"application/json\",\n Authorization: `Bearer ${apiKey}`,\n },\n redirect: \"manual\",\n signal: AbortSignal.timeout(10_000),\n });\n\n if (response.status >= 300 && response.status < 400) {\n throw new Error(\n \"Cloud credits request was redirected; redirects are not allowed\",\n );\n }\n\n const creditResponse = (await response.json().catch((err: unknown) => {\n console.warn(\n \"[cloud-connection] Failed to parse credit balance response JSON:\",\n err,\n );\n return {};\n })) as {\n balance?: unknown;\n data?: { balance?: unknown };\n error?: unknown;\n };\n\n if (response.status === 401) {\n throw new CloudCreditsAuthRejectedError(\n cloudCreditsHttpErrorMessage(401, creditResponse),\n );\n }\n\n if (!response.ok) {\n throw new Error(\n cloudCreditsHttpErrorMessage(response.status, creditResponse),\n );\n }\n\n const balance =\n coerceCloudBalance(creditResponse.balance) ??\n coerceCloudBalance(creditResponse.data?.balance);\n\n return balance;\n}\n\n/** Configurable credit thresholds. Override via env vars if defaults don't fit. */\nconst CREDIT_LOW_THRESHOLD = Number(\n process.env.ELIZA_CREDIT_LOW_THRESHOLD ?? \"2.0\",\n);\nconst CREDIT_CRITICAL_THRESHOLD = Number(\n process.env.ELIZA_CREDIT_CRITICAL_THRESHOLD ?? \"0.5\",\n);\n\nfunction withCreditFlags(balance: number): CloudCreditsResponse {\n return {\n connected: true,\n balance,\n low: balance < CREDIT_LOW_THRESHOLD,\n critical: balance < CREDIT_CRITICAL_THRESHOLD,\n topUpUrl: CLOUD_BILLING_URL,\n };\n}\n\nexport async function fetchCloudCredits(\n config: Partial<ElizaConfig>,\n runtime: AgentRuntime | null,\n): Promise<CloudCreditsResponse> {\n const snapshot = resolveCloudConnectionSnapshot(config, runtime);\n let authenticatedFailure: string | null = null;\n let authenticatedUnexpectedResponse = false;\n\n if (!snapshot.connected) {\n return { balance: null, connected: false };\n }\n\n const cloudClient = snapshot.cloudAuth?.getClient?.();\n if (snapshot.authConnected && typeof cloudClient?.get === \"function\") {\n try {\n const creditResponse = (await cloudClient.get(\"/credits/balance\")) as {\n balance?: unknown;\n data?: { balance?: unknown };\n };\n const rawBalance =\n coerceCloudBalance(creditResponse?.balance) ??\n coerceCloudBalance(creditResponse?.data?.balance);\n\n if (typeof rawBalance === \"number\") {\n return withCreditFlags(rawBalance);\n }\n\n authenticatedUnexpectedResponse = true;\n logger.debug(\n `[cloud/credits] Unexpected authenticated response shape: ${JSON.stringify(creditResponse)}`,\n );\n } catch (err) {\n const msg = err instanceof Error ? err.message : \"cloud API unreachable\";\n authenticatedFailure = msg;\n logger.debug(\n `[cloud/credits] Authenticated balance fetch failed: ${msg}`,\n );\n }\n }\n\n if (!snapshot.apiKey) {\n return {\n balance: null,\n connected: snapshot.connected,\n error:\n authenticatedFailure ??\n (authenticatedUnexpectedResponse\n ? \"unexpected response\"\n : \"missing cloud api key\"),\n };\n }\n\n const resolvedBaseUrl = resolveCloudApiBaseUrl(config.cloud?.baseUrl);\n const baseUrlRejection = await validateCloudBaseUrl(resolvedBaseUrl);\n if (baseUrlRejection) {\n return {\n balance: null,\n connected: true,\n error: baseUrlRejection,\n };\n }\n\n try {\n const balance = await fetchCloudCreditsByApiKey(\n resolvedBaseUrl,\n snapshot.apiKey,\n );\n\n if (typeof balance !== \"number\") {\n return {\n balance: null,\n connected: true,\n error: \"unexpected response\",\n };\n }\n\n return withCreditFlags(balance);\n } catch (err) {\n if (err instanceof CloudCreditsAuthRejectedError) {\n logger.debug(`[cloud/credits] API key rejected: ${err.message}`);\n return {\n balance: null,\n connected: true,\n authRejected: true,\n error: err.message,\n topUpUrl: CLOUD_BILLING_URL,\n };\n }\n const msg = err instanceof Error ? err.message : \"cloud API unreachable\";\n logger.debug(`[cloud/credits] Failed to fetch balance via API key: ${msg}`);\n return {\n balance: null,\n connected: true,\n error: msg,\n };\n }\n}\n\nexport async function clearCloudAuthService(\n cloudAuth: CloudAuthLike | null,\n): Promise<void> {\n if (!cloudAuth) {\n return;\n }\n\n const seen = new Set<(...args: never[]) => unknown>();\n for (const methodName of CLOUD_AUTH_CLEAR_METHODS) {\n const method = cloudAuth[methodName];\n if (typeof method !== \"function\" || seen.has(method)) {\n continue;\n }\n\n seen.add(method);\n try {\n await method.call(cloudAuth);\n // First successful clear method is sufficient — stop trying remaining ones.\n break;\n } catch (err) {\n logger.warn(\n `[cloud/disconnect] Failed to invoke CLOUD_AUTH.${methodName}: ${\n err instanceof Error ? err.message : String(err)\n }`,\n );\n }\n }\n}\n\nfunction clearCloudEnv(): void {\n for (const key of CLOUD_ENV_KEYS) {\n delete process.env[key];\n }\n clearCloudSecrets();\n scrubCloudSecretsFromEnv();\n}\n\nasync function clearRuntimeCloudState(\n runtime: AgentRuntime | null,\n): Promise<void> {\n const runtimeWithCloud = asRuntimeCloud(runtime);\n if (!runtimeWithCloud) {\n return;\n }\n\n const existingSecrets = runtimeWithCloud.character.secrets ?? {};\n const nextSecrets = { ...existingSecrets };\n for (const key of CLOUD_RUNTIME_SECRET_KEYS) {\n delete nextSecrets[key];\n }\n runtimeWithCloud.character.secrets = nextSecrets;\n\n if (\n runtimeWithCloud.character.settings &&\n typeof runtimeWithCloud.character.settings === \"object\"\n ) {\n for (const key of CLOUD_RUNTIME_SETTING_KEYS) {\n delete runtimeWithCloud.character.settings[key];\n }\n }\n\n if (typeof runtimeWithCloud.setSetting === \"function\") {\n for (const key of CLOUD_RUNTIME_SETTING_KEYS) {\n try {\n runtimeWithCloud.setSetting(key, null);\n } catch (err) {\n logger.warn(\n `[cloud/disconnect] Failed to clear runtime setting ${key}: ${\n err instanceof Error ? err.message : String(err)\n }`,\n );\n }\n }\n }\n\n if (typeof runtimeWithCloud.updateAgent === \"function\") {\n try {\n await runtimeWithCloud.updateAgent(runtimeWithCloud.agentId, {\n secrets: { ...nextSecrets },\n });\n } catch (err) {\n logger.warn(\n `[cloud/disconnect] Failed to clear cloud secrets from agent DB: ${\n err instanceof Error ? err.message : String(err)\n }`,\n );\n }\n }\n}\n\nexport async function disconnectCloudConnection(args: {\n cloudManager?: CloudManagerLike;\n config: Partial<ElizaConfig>;\n runtime: AgentRuntime | null;\n saveConfig?: (config: Partial<ElizaConfig>) => void;\n}): Promise<void> {\n const { cloudManager = null, config, runtime, saveConfig } = args;\n\n if (isElizaSettingsDebugEnabled()) {\n const c = config.cloud as Record<string, unknown> | undefined;\n logger.debug(\n `[eliza][settings][cloud] disconnectCloudConnection start cloud=${JSON.stringify(settingsDebugCloudSummary(c))}`,\n );\n }\n\n if (typeof cloudManager?.disconnect === \"function\") {\n try {\n await cloudManager.disconnect();\n } catch (err) {\n logger.warn(\n `[cloud/disconnect] Failed to disconnect cloud manager: ${\n err instanceof Error ? err.message : String(err)\n }`,\n );\n }\n }\n\n await clearCloudAuthService(getCloudAuth(runtime));\n\n const nextCloud = { ...(config.cloud ?? {}) };\n delete nextCloud.apiKey;\n config.cloud = nextCloud;\n applyCanonicalSetupConfig(config as ElizaConfig, {\n deploymentTarget: { runtime: \"local\" },\n linkedAccounts: {\n elizacloud: {\n status: \"unlinked\",\n source: \"api-key\",\n },\n },\n clearRoutes: [\"llmText\", \"tts\", \"media\", \"embeddings\", \"rpc\"],\n });\n migrateLegacyRuntimeConfig(config as Record<string, unknown>);\n\n try {\n saveConfig?.(config);\n if (isElizaSettingsDebugEnabled()) {\n const c = config.cloud as Record<string, unknown> | undefined;\n logger.debug(\n `[eliza][settings][cloud] disconnectCloudConnection saveConfig OK cloud=${JSON.stringify(settingsDebugCloudSummary(c))}`,\n );\n }\n } catch (err) {\n logger.warn(\n `[cloud/disconnect] Failed to save cloud disconnect state: ${\n err instanceof Error ? err.message : String(err)\n }`,\n );\n }\n\n clearCloudEnv();\n await clearRuntimeCloudState(runtime);\n\n if (isElizaSettingsDebugEnabled()) {\n logger.debug(\n \"[eliza][settings][cloud] disconnectCloudConnection done (env cleared + runtime cloud state cleared)\",\n );\n }\n}\n\n/** Matches `reason` from GET /api/cloud/status when connected via API key without CLOUD_AUTH. */\nconst CLOUD_STATUS_API_KEY_ONLY_REASONS: ReadonlySet<string> = new Set([\n \"api_key_present_not_authenticated\",\n \"api_key_present_runtime_not_started\",\n]);\n\nexport function isCloudStatusReasonApiKeyOnly(\n reason: string | null | undefined,\n): boolean {\n return (\n typeof reason === \"string\" && CLOUD_STATUS_API_KEY_ONLY_REASONS.has(reason)\n );\n}\n",
17
+ "import type http from \"node:http\";\nimport {\n PromoteVfsToCloudContainerRequestSchema,\n RequestCodingAgentContainerRequestSchema,\n SyncCloudCodingContainerRequestSchema,\n} from \"@elizaos/shared\";\nimport type {\n PromoteVfsToCloudContainerRequest,\n PromoteVfsToCloudContainerResponse,\n RequestCodingAgentContainerRequest,\n RequestCodingAgentContainerResponse,\n SyncCloudCodingContainerRequest,\n SyncCloudCodingContainerResponse,\n} from \"../types/cloud\";\nimport { sendJson, sendJsonError } from \"../lib/http\";\n\nexport interface CloudCodingContainerRouteState {\n runtime: {\n getService?: (name: string) => unknown;\n } | null;\n}\n\ninterface CodingContainerServiceLike {\n promoteVfsToCloudContainer(\n request: PromoteVfsToCloudContainerRequest,\n ): Promise<PromoteVfsToCloudContainerResponse>;\n requestCodingAgentContainer(\n request: RequestCodingAgentContainerRequest,\n ): Promise<RequestCodingAgentContainerResponse>;\n syncCodingContainerChanges(\n containerId: string,\n request: SyncCloudCodingContainerRequest,\n ): Promise<SyncCloudCodingContainerResponse>;\n}\n\nexport async function handleCloudCodingContainerRoute(\n req: http.IncomingMessage,\n res: http.ServerResponse,\n pathname: string,\n method: string,\n state: CloudCodingContainerRouteState,\n): Promise<boolean> {\n if (\n method === \"POST\" &&\n pathname === \"/api/cloud/coding-containers/promotions\"\n ) {\n const service = getCloudContainerService(state);\n if (!service) {\n sendJsonError(res, \"Cloud container service is not available\", 503);\n return true;\n }\n const body = await readJsonBody(req, res);\n if (!body) return true;\n const parsed = PromoteVfsToCloudContainerRequestSchema.safeParse(body);\n if (!parsed.success) {\n sendJsonError(\n res,\n parsed.error.issues[0]?.message ?? \"Invalid promotion request\",\n 400,\n );\n return true;\n }\n await sendServiceResponse(res, () =>\n service.promoteVfsToCloudContainer(\n parsed.data as PromoteVfsToCloudContainerRequest,\n ),\n );\n return true;\n }\n\n if (method === \"POST\" && pathname === \"/api/cloud/coding-containers\") {\n const service = getCloudContainerService(state);\n if (!service) {\n sendJsonError(res, \"Cloud container service is not available\", 503);\n return true;\n }\n const body = await readJsonBody(req, res);\n if (!body) return true;\n const parsed = RequestCodingAgentContainerRequestSchema.safeParse(body);\n if (!parsed.success) {\n sendJsonError(\n res,\n parsed.error.issues[0]?.message ?? \"Invalid coding container request\",\n 400,\n );\n return true;\n }\n await sendServiceResponse(res, () =>\n service.requestCodingAgentContainer(\n parsed.data as RequestCodingAgentContainerRequest,\n ),\n );\n return true;\n }\n\n const syncMatch = /^\\/api\\/cloud\\/coding-containers\\/([^/]+)\\/sync$/.exec(\n pathname,\n );\n if (method === \"POST\" && syncMatch) {\n const service = getCloudContainerService(state);\n if (!service) {\n sendJsonError(res, \"Cloud container service is not available\", 503);\n return true;\n }\n const containerId = decodeURIComponent(syncMatch[1]);\n const body = await readJsonBody(req, res);\n if (!body) return true;\n const parsed = SyncCloudCodingContainerRequestSchema.safeParse(body);\n if (!parsed.success) {\n sendJsonError(\n res,\n parsed.error.issues[0]?.message ?? \"Invalid sync request\",\n 400,\n );\n return true;\n }\n await sendServiceResponse(res, () =>\n service.syncCodingContainerChanges(\n containerId,\n parsed.data as SyncCloudCodingContainerRequest,\n ),\n );\n return true;\n }\n\n return false;\n}\n\nfunction getCloudContainerService(\n state: CloudCodingContainerRouteState,\n): CodingContainerServiceLike | null {\n const service =\n state.runtime?.getService?.(\"CLOUD_CONTAINER\") ??\n state.runtime?.getService?.(\"cloud-container\") ??\n state.runtime?.getService?.(\"cloudContainer\");\n if (!service || typeof service !== \"object\") return null;\n const candidate = service as Partial<CodingContainerServiceLike>;\n if (\n typeof candidate.promoteVfsToCloudContainer === \"function\" &&\n typeof candidate.requestCodingAgentContainer === \"function\" &&\n typeof candidate.syncCodingContainerChanges === \"function\"\n ) {\n return candidate as CodingContainerServiceLike;\n }\n return null;\n}\n\nasync function readJsonBody(\n req: http.IncomingMessage,\n res: http.ServerResponse,\n): Promise<Record<string, unknown> | null> {\n const preParsed = (req as http.IncomingMessage & { body?: unknown }).body;\n if (\n preParsed &&\n typeof preParsed === \"object\" &&\n !Array.isArray(preParsed)\n ) {\n return preParsed as Record<string, unknown>;\n }\n\n const chunks: Buffer[] = [];\n for await (const chunk of req) {\n chunks.push(typeof chunk === \"string\" ? Buffer.from(chunk) : chunk);\n }\n const raw = Buffer.concat(chunks).toString(\"utf8\").trim();\n if (!raw) return {};\n let parsed: unknown;\n try {\n parsed = JSON.parse(raw) as unknown;\n } catch {\n sendJsonError(res, \"Invalid JSON body\", 400);\n return null;\n }\n if (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n sendJsonError(res, \"Invalid JSON body\", 400);\n return null;\n }\n return parsed as Record<string, unknown>;\n}\n\nasync function sendServiceResponse(\n res: http.ServerResponse,\n fn: () => Promise<unknown>,\n): Promise<void> {\n try {\n sendJson(res, await fn());\n } catch (error) {\n const status =\n typeof (error as { statusCode?: unknown })?.statusCode === \"number\"\n ? (error as { statusCode: number }).statusCode\n : 500;\n sendJsonError(\n res,\n error instanceof Error ? error.message : String(error),\n status,\n );\n }\n}\n",
18
+ "import type http from \"node:http\";\nimport {\n isCloudInferenceSelectedInConfig,\n migrateLegacyRuntimeConfig,\n} from \"@elizaos/core\";\nimport { type CloudRouteState as AutonomousCloudRouteState, handleCloudRoute as handleAutonomousCloudRoute, } from \"./cloud-routes-autonomous.js\";\nimport {\n buildHomeRemoteRunnerAccessUrl,\n buildHomeRemoteRunnerSshTunnel,\n} from \"./home-remote-runner-access-url\";\nimport { normalizeCloudSiteUrl } from \"../cloud/base-url.js\";\nimport type { CloudManager } from \"../cloud/cloud-manager.js\";\nimport { validateCloudBaseUrl } from \"../cloud/validate-url.js\";\nimport { type AgentRuntime, logger } from \"@elizaos/core\";\nimport { handleCloudCodingContainerRoute } from \"./cloud-coding-container-routes\";\nimport {\n clearCloudAuthService,\n disconnectCloudConnection,\n getCloudAuth,\n type RuntimeCloudLike,\n} from \"../lib/cloud-connection\";\nimport {\n clearCloudSecrets,\n scrubCloudSecretsFromEnv,\n} from \"../lib/cloud-secrets\";\nimport {\n applyCanonicalSetupConfig,\n type ElizaConfig,\n isTimeoutError,\n} from \"../lib/config-like\";\nimport { sendJson, sendJsonError } from \"../lib/http\";\n\nexport interface CloudRouteState {\n config: ElizaConfig;\n cloudManager: CloudManager | null;\n /** The running agent runtime — needed to persist cloud credentials to the DB. */\n runtime: AgentRuntime | null;\n restartRuntime?: (reason: string) => Promise<boolean> | boolean;\n services?: Partial<CloudRouteServices>;\n}\n\ntype CreateIntegrationTelemetrySpan = (meta: {\n boundary: \"cloud\";\n operation: string;\n timeoutMs?: number;\n}) => TelemetrySpan | null | undefined;\n\nexport interface CloudRouteServices {\n applyCanonicalSetupConfig: typeof applyCanonicalSetupConfig;\n createIntegrationTelemetrySpan: CreateIntegrationTelemetrySpan;\n handleAutonomousCloudRoute: typeof handleAutonomousCloudRoute;\n normalizeCloudSiteUrl: typeof normalizeCloudSiteUrl;\n saveElizaConfig: (config: ElizaConfig) => void;\n validateCloudBaseUrl: typeof validateCloudBaseUrl;\n}\n\ntype CloudRuntimeSecrets = Record<string, string | number | boolean>;\ntype ReplaceableCloudManager = NonNullable<CloudRouteState[\"cloudManager\"]> & {\n replaceApiKey?: (apiKey: string) => Promise<void>;\n};\ntype StartableCloudRelayService = {\n startRelayLoopIfReady?: () => boolean | Promise<boolean>;\n};\ntype RelayStatusService = {\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: \"idle\" | \"registered\" | \"polling\" | \"error\" | \"stopped\";\n };\n};\n\nconst CLOUD_LOGIN_POLL_TIMEOUT_MS = 10_000;\nconst DEFAULT_CLOUD_ROUTE_SERVICES: CloudRouteServices = {\n applyCanonicalSetupConfig,\n createIntegrationTelemetrySpan: () => undefined,\n handleAutonomousCloudRoute,\n normalizeCloudSiteUrl,\n saveElizaConfig: () => {\n logger.warn(\"[cloud-routes] saveConfig unavailable - config not persisted\");\n },\n validateCloudBaseUrl,\n};\n\nasync function readRouteJsonBody(\n req: http.IncomingMessage,\n): Promise<Record<string, unknown>> {\n const preParsed = (req as http.IncomingMessage & { body?: unknown }).body;\n if (\n preParsed &&\n typeof preParsed === \"object\" &&\n !Array.isArray(preParsed)\n ) {\n return preParsed as Record<string, unknown>;\n }\n\n const chunks: Buffer[] = [];\n for await (const chunk of req) {\n chunks.push(typeof chunk === \"string\" ? Buffer.from(chunk) : chunk);\n }\n\n const rawBody = Buffer.concat(chunks).toString(\"utf8\").trim();\n if (!rawBody) {\n return {};\n }\n\n const parsed = JSON.parse(rawBody) as unknown;\n if (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n throw new Error(\"Invalid JSON body\");\n }\n return parsed as Record<string, unknown>;\n}\n\n/**\n * Monotonic counter incremented on every `POST /api/cloud/disconnect`.\n *\n * WHY: We must not persist a stale \"authenticated\" poll after the user\n * disconnects mid-flight. The previous guard (`cloud.enabled === false`)\n * also matched **first-time** cloud (never enabled), so successful logins\n * were discarded. Comparing epoch before/after the poll preserves the race\n * fix without blocking legitimate first connect.\n */\nlet cloudDisconnectEpoch = 0;\n\ntype TelemetrySpan = {\n success: (meta?: Record<string, unknown>) => void;\n failure: (meta?: Record<string, unknown>) => void;\n};\n\nfunction isRedirectResponse(response: Response): boolean {\n return response.status >= 300 && response.status < 400;\n}\n\nfunction createNoopTelemetrySpan(): TelemetrySpan {\n return {\n success: () => {},\n failure: () => {},\n };\n}\n\nfunction getTelemetrySpan(meta: {\n boundary: \"cloud\";\n operation: string;\n timeoutMs: number;\n services: CloudRouteServices;\n}): TelemetrySpan {\n return (\n meta.services.createIntegrationTelemetrySpan(meta) ??\n createNoopTelemetrySpan()\n );\n}\n\nasync function fetchCloudLoginStatus(\n sessionId: string,\n baseUrl: string,\n): Promise<Response> {\n return fetch(\n `${baseUrl}/api/auth/cli-session/${encodeURIComponent(sessionId)}`,\n {\n redirect: \"manual\",\n signal: AbortSignal.timeout(CLOUD_LOGIN_POLL_TIMEOUT_MS),\n },\n );\n}\n\nasync function persistCloudLoginStatus(args: {\n apiKey: string;\n organizationId?: string;\n services: CloudRouteServices;\n state: CloudRouteState;\n userId?: string;\n /**\n * From GET `/api/cloud/login/status`: epoch captured before `fetch` so a\n * disconnect during the poll invalidates this result. Omitted for POST\n * `/api/cloud/login/persist` (direct client push) — no race window.\n */\n epochAtPollStart?: number;\n}): Promise<void> {\n if (\n args.epochAtPollStart !== undefined &&\n args.epochAtPollStart !== cloudDisconnectEpoch\n ) {\n logger.warn(\n \"[cloud-login] Skipping login persist: a disconnect occurred while the login poll was in-flight\",\n );\n return;\n }\n\n migrateLegacyRuntimeConfig(args.state.config as Record<string, unknown>);\n const runtime = args.state.runtime as RuntimeCloudLike | null;\n const cloudAuth = getCloudAuth(runtime);\n await clearCloudAuthService(cloudAuth);\n\n const cloud = { ...(args.state.config.cloud ?? {}) } as Record<\n string,\n unknown\n >;\n\n cloud.apiKey = args.apiKey;\n const cloudInferenceSelected = isCloudInferenceSelectedInConfig(\n args.state.config as Record<string, unknown>,\n );\n\n args.state.config.cloud = cloud as ElizaConfig[\"cloud\"];\n args.services.applyCanonicalSetupConfig(args.state.config, {\n linkedAccounts: {\n elizacloud: {\n status: \"linked\",\n source: \"api-key\",\n },\n },\n });\n migrateLegacyRuntimeConfig(args.state.config as Record<string, unknown>);\n\n try {\n args.services.saveElizaConfig(args.state.config);\n logger.info(\"[cloud-login] Saved cloud API key to config file\");\n logger.warn(\n \"[cloud-login] Cloud API key is stored in cleartext in ~/.eliza/eliza.json. \" +\n \"Ensure this file has restrictive permissions (chmod 600).\",\n );\n } catch (saveErr) {\n logger.error(\n `[cloud-login] Failed to save cloud API key to config: ${\n saveErr instanceof Error ? saveErr.message : String(saveErr)\n }`,\n );\n }\n\n clearCloudSecrets();\n process.env.ELIZAOS_CLOUD_API_KEY = args.apiKey;\n if (cloudInferenceSelected) {\n process.env.ELIZAOS_CLOUD_ENABLED = \"true\";\n } else {\n delete process.env.ELIZAOS_CLOUD_ENABLED;\n }\n scrubCloudSecretsFromEnv();\n\n const cloudManager = args.state\n .cloudManager as ReplaceableCloudManager | null;\n if (cloudManager && typeof cloudManager.replaceApiKey === \"function\") {\n await cloudManager.replaceApiKey(args.apiKey);\n } else if (\n cloudManager &&\n !cloudManager.getClient() &&\n typeof cloudManager.init === \"function\"\n ) {\n await cloudManager.init();\n }\n\n if (typeof cloudAuth?.authenticateWithApiKey === \"function\") {\n cloudAuth.authenticateWithApiKey({\n apiKey: args.apiKey,\n organizationId: args.organizationId,\n userId: args.userId,\n });\n }\n const relayService = (runtime?.getService(\"CLOUD_MANAGED_GATEWAY_RELAY\") ??\n runtime?.getService(\"cloud-managed-gateway-relay\") ??\n runtime?.getService(\n \"cloudManagedGatewayRelay\",\n )) as StartableCloudRelayService | null;\n if (typeof relayService?.startRelayLoopIfReady === \"function\") {\n await relayService.startRelayLoopIfReady();\n }\n\n if (!runtime || typeof runtime.updateAgent !== \"function\") {\n return;\n }\n\n try {\n const nextSecrets: CloudRuntimeSecrets = {\n ...(runtime.character.secrets ?? {}),\n ELIZAOS_CLOUD_API_KEY: args.apiKey,\n };\n if (args.userId) {\n nextSecrets.ELIZA_CLOUD_USER_ID = args.userId;\n nextSecrets.ELIZAOS_CLOUD_USER_ID = args.userId;\n } else {\n delete nextSecrets.ELIZA_CLOUD_USER_ID;\n delete nextSecrets.ELIZAOS_CLOUD_USER_ID;\n }\n if (args.organizationId) {\n nextSecrets.ELIZA_CLOUD_ORGANIZATION_ID = args.organizationId;\n nextSecrets.ELIZAOS_CLOUD_ORG_ID = args.organizationId;\n } else {\n delete nextSecrets.ELIZA_CLOUD_ORGANIZATION_ID;\n delete nextSecrets.ELIZAOS_CLOUD_ORG_ID;\n }\n if (cloudInferenceSelected) {\n nextSecrets.ELIZAOS_CLOUD_ENABLED = \"true\";\n } else {\n delete nextSecrets.ELIZAOS_CLOUD_ENABLED;\n }\n runtime.character.secrets = nextSecrets;\n if (typeof runtime.setSetting === \"function\") {\n runtime.setSetting(\"ELIZA_CLOUD_USER_ID\", args.userId ?? null);\n runtime.setSetting(\"ELIZAOS_CLOUD_USER_ID\", args.userId ?? null);\n runtime.setSetting(\n \"ELIZA_CLOUD_ORGANIZATION_ID\",\n args.organizationId ?? null,\n );\n runtime.setSetting(\"ELIZAOS_CLOUD_ORG_ID\", args.organizationId ?? null);\n }\n await runtime.updateAgent(runtime.agentId, {\n secrets: { ...nextSecrets },\n });\n } catch (err) {\n // Non-fatal: config/sealed secret persistence is enough for login continuity.\n logger.warn(\n `[cloud-routes] Failed to persist cloud secrets to agent DB: ${String(\n err,\n )}`,\n );\n }\n}\n\nfunction getCloudRouteServices(state: CloudRouteState): CloudRouteServices {\n return {\n ...DEFAULT_CLOUD_ROUTE_SERVICES,\n ...state.services,\n };\n}\n\nfunction readRuntimeSetting(\n runtime: AgentRuntime | null,\n key: string,\n): string | null {\n const value = runtime?.getSetting(key);\n if (typeof value !== \"string\") return null;\n const trimmed = value.trim();\n return trimmed ? trimmed : null;\n}\n\nfunction toAutonomousState(\n state: CloudRouteState,\n services: CloudRouteServices,\n): AutonomousCloudRouteState {\n return {\n ...state,\n saveConfig: () => services.saveElizaConfig(state.config),\n createTelemetrySpan: services.createIntegrationTelemetrySpan,\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 const services = getCloudRouteServices(state);\n\n const codingContainerHandled = await handleCloudCodingContainerRoute(\n req,\n res,\n pathname,\n method,\n { runtime: state.runtime },\n );\n if (codingContainerHandled) {\n return true;\n }\n\n if (method === \"GET\" && pathname === \"/api/cloud/relay-status\") {\n const relayService = (state.runtime?.getService(\n \"CLOUD_MANAGED_GATEWAY_RELAY\",\n ) ??\n state.runtime?.getService(\"cloud-managed-gateway-relay\") ??\n state.runtime?.getService(\n \"cloudManagedGatewayRelay\",\n )) as RelayStatusService | null;\n\n if (typeof relayService?.getSessionInfo !== \"function\") {\n sendJson(res, {\n available: false,\n status: \"not_registered\",\n reason:\n \"Gateway relay service not active. Connect to Eliza Cloud in Settings to enable instance routing.\",\n });\n return true;\n }\n\n try {\n const info = relayService.getSessionInfo();\n sendJson(res, {\n available: true,\n ...info,\n accessUrl: buildHomeRemoteRunnerAccessUrl({\n cloudBaseUrl: services.normalizeCloudSiteUrl(\n state.config.cloud?.baseUrl,\n ),\n sessionId: info.sessionId,\n }),\n ssh: buildHomeRemoteRunnerSshTunnel({\n remoteBaseUrl:\n readRuntimeSetting(state.runtime, \"ELIZA_HOME_REMOTE_RUNNER_URL\") ??\n process.env.ELIZA_HOME_REMOTE_RUNNER_URL ??\n readRuntimeSetting(state.runtime, \"ELIZA_HOME_RUNNER_URL\") ??\n process.env.ELIZA_HOME_RUNNER_URL,\n sshTarget:\n readRuntimeSetting(\n state.runtime,\n \"ELIZA_HOME_REMOTE_RUNNER_SSH_TARGET\",\n ) ??\n process.env.ELIZA_HOME_REMOTE_RUNNER_SSH_TARGET ??\n readRuntimeSetting(state.runtime, \"ELIZA_HOME_SSH_TARGET\") ??\n process.env.ELIZA_HOME_SSH_TARGET,\n sshIdentity:\n readRuntimeSetting(\n state.runtime,\n \"ELIZA_HOME_REMOTE_RUNNER_SSH_IDENTITY\",\n ) ??\n process.env.ELIZA_HOME_REMOTE_RUNNER_SSH_IDENTITY ??\n readRuntimeSetting(state.runtime, \"ELIZA_HOME_SSH_IDENTITY\") ??\n process.env.ELIZA_HOME_SSH_IDENTITY,\n localPort:\n readRuntimeSetting(\n state.runtime,\n \"ELIZA_HOME_REMOTE_RUNNER_SSH_LOCAL_PORT\",\n ) ?? process.env.ELIZA_HOME_REMOTE_RUNNER_SSH_LOCAL_PORT,\n }),\n });\n } catch (error) {\n sendJson(res, {\n available: false,\n status: \"error\",\n reason: error instanceof Error ? error.message : String(error),\n });\n }\n return true;\n }\n\n if (method === \"POST\" && pathname === \"/api/cloud/disconnect\") {\n // Invalidate any in-flight login poll (see persistCloudLoginStatus).\n cloudDisconnectEpoch++;\n try {\n await disconnectCloudConnection({\n cloudManager: state.cloudManager,\n config: state.config,\n runtime: state.runtime,\n saveConfig: services.saveElizaConfig,\n });\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n logger.error(`[cloud/disconnect] failed: ${message}`);\n sendJson(res, { ok: false, error: message }, 500);\n return true;\n }\n sendJson(res, { ok: true, status: \"disconnected\" });\n return true;\n }\n\n // Direct-auth persistence: the frontend authenticated directly with Eliza\n // Cloud (bypassing the backend's login/status handler) and needs to push\n // the API key to the backend so billing/compat routes can authenticate.\n if (method === \"POST\" && pathname === \"/api/cloud/login/persist\") {\n try {\n const body = await readRouteJsonBody(req);\n if (typeof body.apiKey !== \"string\" || !body.apiKey.trim()) {\n sendJson(res, { ok: false, error: \"apiKey is required\" }, 400);\n return true;\n }\n await persistCloudLoginStatus({\n apiKey: body.apiKey.trim(),\n organizationId:\n typeof body.organizationId === \"string\"\n ? body.organizationId.trim()\n : undefined,\n services,\n state,\n userId:\n typeof body.userId === \"string\" ? body.userId.trim() : undefined,\n });\n sendJson(res, { ok: true });\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n logger.error(`[cloud/login/persist] Failed: ${msg}`);\n sendJson(res, { ok: false, error: msg }, 500);\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\", 400);\n return true;\n }\n\n const baseUrl = services.normalizeCloudSiteUrl(state.config.cloud?.baseUrl);\n const urlError = await services.validateCloudBaseUrl(baseUrl);\n if (urlError) {\n sendJsonError(res, urlError, 400);\n return true;\n }\n\n const epochBeforePoll = cloudDisconnectEpoch;\n\n const loginPollSpan = getTelemetrySpan({\n boundary: \"cloud\",\n operation: \"login_poll_status\",\n services,\n timeoutMs: CLOUD_LOGIN_POLL_TIMEOUT_MS,\n });\n\n let pollRes: Response;\n try {\n pollRes = await fetchCloudLoginStatus(sessionId, baseUrl);\n } catch (fetchErr) {\n if (isTimeoutError(fetchErr)) {\n loginPollSpan.failure({ error: fetchErr, statusCode: 504 });\n sendJson(res, {\n status: \"error\",\n error: \"Eliza Cloud status request timed out\",\n }, 504);\n return true;\n }\n\n loginPollSpan.failure({ error: fetchErr, statusCode: 502 });\n sendJson(res, {\n status: \"error\",\n error: \"Failed to reach Eliza Cloud\",\n }, 502);\n return true;\n }\n\n if (isRedirectResponse(pollRes)) {\n loginPollSpan.failure({\n statusCode: pollRes.status,\n errorKind: \"redirect_response\",\n });\n sendJson(res, {\n status: \"error\",\n error:\n \"Eliza Cloud status request was redirected; redirects are not allowed\",\n }, 502);\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 apiKey?: unknown;\n keyPrefix?: unknown;\n organizationId?: unknown;\n status?: unknown;\n userId?: unknown;\n };\n try {\n data = (await pollRes.json()) as {\n apiKey?: unknown;\n keyPrefix?: unknown;\n organizationId?: unknown;\n status?: unknown;\n userId?: unknown;\n };\n } catch (parseErr) {\n loginPollSpan.failure({ error: parseErr, statusCode: pollRes.status });\n sendJson(res, {\n status: \"error\",\n error: \"Eliza Cloud returned invalid JSON\",\n }, 502);\n return true;\n }\n\n loginPollSpan.success({ statusCode: pollRes.status });\n\n if (data.status === \"authenticated\" && typeof data.apiKey === \"string\") {\n await persistCloudLoginStatus({\n apiKey: data.apiKey,\n organizationId:\n typeof data.organizationId === \"string\"\n ? data.organizationId\n : undefined,\n services,\n state,\n epochAtPollStart: epochBeforePoll,\n userId: typeof data.userId === \"string\" ? data.userId : undefined,\n });\n sendJson(res, {\n status: \"authenticated\",\n keyPrefix:\n typeof data.keyPrefix === \"string\" ? data.keyPrefix : undefined,\n organizationId:\n typeof data.organizationId === \"string\"\n ? data.organizationId\n : undefined,\n token: data.apiKey,\n userId: typeof data.userId === \"string\" ? data.userId : undefined,\n });\n return true;\n }\n\n sendJson(res, {\n status: typeof data.status === \"string\" ? data.status : \"error\",\n });\n return true;\n }\n\n const result = await services.handleAutonomousCloudRoute(\n req,\n res,\n pathname,\n method,\n toAutonomousState(state, services),\n );\n\n // The upstream handler writes secrets to process.env — scrub them\n // immediately so they don't leak to child processes or env dumps.\n scrubCloudSecretsFromEnv();\n\n return result;\n}\n"
19
+ ],
20
+ "mappings": ";;;;;;;;;;;;;;;;;;;AAKA;AAAA;;;ACLA;AACA;AACA;AAqBA,SAAS,iBAAiB,CAAC,OAAuB;AAAA,EAChD,OAAO,MACJ,KAAK,EACL,YAAY,EACZ,QAAQ,YAAY,EAAE;AAAA;AAG3B,SAAS,mBAAmB,CAAC,QAA+B;AAAA,EAC1D,MAAM,QAAQ,OAAO,MAAM,GAAG;AAAA,EAC9B,IAAI,MAAM,SAAS,KAAK,MAAM,SAAS;AAAA,IAAG,OAAO;AAAA,EAEjD,MAAM,SAAS,MAAM,IAAI,CAAC,SAAS;AAAA,IACjC,IAAI,CAAC,mBAAmB,KAAK,IAAI;AAAA,MAAG,OAAO,OAAO;AAAA,IAClD,OAAO,OAAO,SAAS,MAAM,EAAE;AAAA,GAChC;AAAA,EACD,IAAI,OAAO,KAAK,CAAC,UAAU,CAAC,OAAO,SAAS,KAAK,CAAC;AAAA,IAAG,OAAO;AAAA,EAE5D,OAAO,IAAI,MAAM,OAAO,WAAW,IAAI,CAAC,GAAG,OAAO,EAAE,IAAI;AAAA,EACxD,MAAM,SAAS,CAAC,MAAM,GAAG,KAAK,KAAM,MAAM,GAAG,KAAK,GAAI;AAAA,EACtD,OAAO,OAAO,KAAK,GAAG;AAAA;AAGxB,SAAS,gBAAgB,CAAC,IAA2B;AAAA,EACnD,IAAI;AAAA,IACF,OAAO,IAAI,IAAI,WAAW,MAAM,EAAE,SAAS,QAAQ,YAAY,EAAE;AAAA,IACjE,MAAM;AAAA,IACN,OAAO;AAAA;AAAA;AAIX,SAAS,oBAAoB,CAAC,IAAoB;AAAA,EAChD,MAAM,OAAO,kBAAkB,EAAE,EAAE,MAAM,GAAG,EAAE;AAAA,EAC9C,IAAI,CAAC;AAAA,IAAM,OAAO;AAAA,EAElB,IAAI,aAAa;AAAA,EACjB,IAAI,IAAI,KAAK,UAAU,MAAM,GAAG;AAAA,IAC9B,aAAa,iBAAiB,UAAU,KAAK;AAAA,EAC/C;AAAA,EAEA,IAAI,SAAwB;AAAA,EAC5B,IAAI,WAAW,WAAW,SAAS,GAAG;AAAA,IACpC,SAAS,WAAW,MAAM,UAAU,MAAM;AAAA,EAC5C,EAAO,SAAI,WAAW,WAAW,iBAAiB,GAAG;AAAA,IACnD,SAAS,WAAW,MAAM,kBAAkB,MAAM;AAAA,EACpD;AAAA,EACA,IAAI,CAAC;AAAA,IAAQ,OAAO;AAAA,EAEpB,IAAI,IAAI,KAAK,MAAM,MAAM;AAAA,IAAG,OAAO;AAAA,EACnC,OAAO,oBAAoB,MAAM,KAAK;AAAA;AAGxC,SAAS,MAAM,CAAC,MAAc,QAAgD;AAAA,EAC5E,MAAM,SAAS,eAAe,IAAI;AAAA,EAClC,IAAI,WAAW,MAAM;AAAA,IACnB,MAAM,IAAI,MAAM,mCAAmC,MAAM;AAAA,EAC3D;AAAA,EACA,MAAM,QAAQ,KAAK;AAAA,EACnB,MAAM,OAAO,UAAU,KAAK,IAAK,cAAc,UAAW;AAAA,EAC1D,OAAO,EAAE,MAAM,SAAS,MAAM,KAAK;AAAA;AAGrC,SAAS,cAAc,CAAC,IAA2B;AAAA,EACjD,MAAM,QAAQ,GAAG,MAAM,GAAG;AAAA,EAC1B,IAAI,MAAM,WAAW;AAAA,IAAG,OAAO;AAAA,EAE/B,IAAI,QAAQ;AAAA,EACZ,WAAW,QAAQ,OAAO;AAAA,IACxB,IAAI,CAAC,YAAY,KAAK,IAAI;AAAA,MAAG,OAAO;AAAA,IACpC,MAAM,QAAQ,OAAO,SAAS,MAAM,EAAE;AAAA,IACtC,IAAI,CAAC,OAAO,UAAU,KAAK,KAAK,QAAQ,KAAK,QAAQ;AAAA,MAAK,OAAO;AAAA,IACjE,QAAS,SAAS,IAAK;AAAA,EACzB;AAAA,EAEA,OAAO,UAAU;AAAA;AAGnB,SAAS,aAAa,CAAC,IAAqB;AAAA,EAC1C,MAAM,QAAQ,eAAe,EAAE;AAAA,EAC/B,IAAI,UAAU;AAAA,IAAM,OAAO;AAAA,EAC3B,OAAO,mBAAmB,KAAK,CAAC,UAAU,QAAQ,KAAK,UAAU,KAAK,IAAI;AAAA;AAG5E,SAAS,aAAa,CAAC,IAAqB;AAAA,EAC1C,MAAM,aAAa,GAAG,YAAY;AAAA,EAClC,OACE,eAAe,QACf,eAAe,SACf,qBAAqB,KAAK,UAAU,KACpC,sBAAsB,KAAK,UAAU,KACrC,WAAW,WAAW,IAAI;AAAA;AAI9B,SAAS,WAAW,CAAC,IAAqB;AAAA,EACxC,MAAM,aAAa,qBAAqB,EAAE;AAAA,EAC1C,MAAM,SAAS,IAAI,KAAK,UAAU;AAAA,EAClC,IAAI,WAAW;AAAA,IAAG,OAAO,cAAc,UAAU;AAAA,EACjD,IAAI,WAAW;AAAA,IAAG,OAAO,cAAc,UAAU;AAAA,EACjD,OAAO;AAAA;AAGT,eAAsB,oBAAoB,CACxC,QACwB;AAAA,EACxB,IAAI;AAAA,EACJ,IAAI;AAAA,IACF,SAAS,IAAI,IAAI,MAAM;AAAA,IACvB,MAAM;AAAA,IACN,OAAO,4BAA4B;AAAA;AAAA,EAGrC,IAAI,OAAO,aAAa,UAAU;AAAA,IAChC,OAAO,uCAAuC,OAAO,iBAAiB;AAAA,EACxE;AAAA,EAEA,MAAM,WAAW,kBAAkB,OAAO,QAAQ;AAAA,EAClD,IAAI,CAAC,UAAU;AAAA,IACb,OAAO,4BAA4B;AAAA,EACrC;AAAA,EAEA,IACE,aAAa,eACb,SAAS,SAAS,YAAY,KAC9B,SAAS,SAAS,QAAQ,GAC1B;AAAA,IACA,OAAO,mBAAmB;AAAA,EAC5B;AAAA,EAGA,MAAM,WAAW,QAAQ,IAAI,WAAW,KAAK,EAAE,YAAY;AAAA,EAC3D,IACE,MAIA;AAAA,IACA,OAAO;AAAA,EACT;AAAA,EAEA,IAAI,YAAY,QAAQ,GAAG;AAAA,IACzB,OAAO,mBAAmB;AAAA,EAC5B;AAAA,EAEA,IAAI;AAAA,IACF,MAAM,UAAU,MAAM,aAAa,UAAU,EAAE,KAAK,KAAK,CAAC;AAAA,IAC1D,MAAM,YAAY,MAAM,QAAQ,OAAO,IAAI,UAAU,CAAC,OAAO;AAAA,IAC7D,WAAW,SAAS,WAAW;AAAA,MAC7B,MAAM,KACJ,OAAO,UAAU,WACb,QACC,MAA8B;AAAA,MACrC,IAAI,YAAY,EAAE,GAAG;AAAA,QACnB,OACE,mBAAmB,uBAAuB,SAC1C;AAAA,MAEJ;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,OAAO,mBAAmB;AAAA;AAAA,EAG5B,OAAO;AAAA;AAAA,IArLH,cAEA;AAAA;AAAA,EAFA,eAAe,UAAU,IAAI,MAAM;AAAA,EAEnC,qBAA4D;AAAA,IAChE,OAAO,WAAW,CAAC;AAAA,IACnB,OAAO,YAAY,CAAC;AAAA,IACpB,OAAO,cAAc,EAAE;AAAA,IACvB,OAAO,eAAe,EAAE;AAAA,IACxB,OAAO,cAAc,EAAE;AAAA,IACvB,OAAO,aAAa,CAAC;AAAA,IACrB,OAAO,eAAe,EAAE;AAAA,IACxB,OAAO,aAAa,EAAE;AAAA,IACtB,OAAO,cAAc,EAAE;AAAA,IACvB,OAAO,aAAa,EAAE;AAAA,IACtB,OAAO,gBAAgB,EAAE;AAAA,IACzB,OAAO,eAAe,EAAE;AAAA,IACxB,OAAO,aAAa,CAAC;AAAA,IACrB,OAAO,aAAa,CAAC;AAAA,EACvB;AAAA;;;ACrBA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAQO,SAAS,iBAAiB,CAC/B,MAAyB,QAAQ,KACjC,eAAuB,gBAAgB,GAAG,GAClC;AAAA,EACR,MAAM,WAAW,IAAI,mBAAmB,KAAK;AAAA,EAC7C,IAAI;AAAA,IAAU,OAAO,gBAAgB,QAAQ;AAAA,EAE7C,MAAM,YAAY,kBAAkB,GAAG;AAAA,EACvC,MAAM,cAAc,KAAK,KAAK,cAAc,GAAG,gBAAgB;AAAA,EAC/D,IAAI,GAAG,WAAW,WAAW;AAAA,IAAG,OAAO;AAAA,EAEvC,IAAI,cAAc,SAAS;AAAA,IACzB,MAAM,aAAa,KAAK,KAAK,cAAc,YAAY;AAAA,IACvD,IAAI,GAAG,WAAW,UAAU;AAAA,MAAG,OAAO;AAAA,EACxC;AAAA,EAEA,OAAO;AAAA;AAAA;;;AC1BT;AACA;AAyCA,SAAS,cAAc,CAAC,UAAmC;AAAA,EACzD,MAAM,QAAQ,SAAS,WAAW,IAAI,CAAC,IAAI,SAAS,MAAM,OAAO;AAAA,EACjE,IAAI,MAAM,SAAS,KAAK,MAAM,MAAM,SAAS,OAAO,IAAI;AAAA,IACtD,MAAM,IAAI;AAAA,EACZ;AAAA,EACA,MAAM,QAAQ,IAAI;AAAA,EAClB,SAAS,IAAI,EAAG,IAAI,MAAM,QAAQ,KAAK,GAAG;AAAA,IACxC,MAAM,OAAO,MAAM,MAAM;AAAA,IACzB,MAAM,UAAU,KAAK,KAAK;AAAA,IAC1B,IAAI,CAAC,WAAW,QAAQ,WAAW,GAAG;AAAA,MAAG;AAAA,IACzC,MAAM,KAAK,KAAK,QAAQ,GAAG;AAAA,IAC3B,IAAI,MAAM;AAAA,MAAG;AAAA,IACb,MAAM,MAAM,KAAK,MAAM,GAAG,EAAE,EAAE,KAAK;AAAA,IACnC,IAAI,YAAY,KAAK,GAAG;AAAA,MAAG,MAAM,IAAI,KAAK,CAAC;AAAA,EAC7C;AAAA,EACA,OAAO,EAAE,OAAO,MAAM;AAAA;AAGxB,SAAS,kBAAkB,CAAC,QAAiC;AAAA,EAC3D,OAAO,OAAO,MAAM,WAAW,IAAI,KAAK,GAAG,OAAO,MAAM,KAAK;AAAA,CAAI;AAAA;AAAA;AAGnE,SAAS,WAAW,CAAC,OAAuB;AAAA,EAC1C,IAAI,UAAU;AAAA,IAAI,OAAO;AAAA,EACzB,MAAM,eAAe,oBAAoB,KAAK,KAAK,KAAK,QAAQ,KAAK,KAAK;AAAA,EAC1E,IAAI,CAAC;AAAA,IAAc,OAAO;AAAA,EAC1B,MAAM,UAAU,MACb,QAAQ,OAAO,MAAM,EACrB,QAAQ,MAAM,MAAK,EACnB,QAAQ,OAAO,KAAK,EACpB,QAAQ,OAAO,KAAK;AAAA,EACvB,OAAO,IAAI;AAAA;AAGb,SAAS,WAAW,CAAC,KAAmB;AAAA,EACtC,IAAI,CAAC,YAAY,KAAK,GAAG,GAAG;AAAA,IAC1B,MAAM,IAAI,MACR,kCAAkC,uCACpC;AAAA,EACF;AAAA,EACA,IAAI,wBAAwB,IAAI,GAAG,GAAG;AAAA,IACpC,MAAM,IAAI,MACR,0BAA0B,6DAC5B;AAAA,EACF;AAAA;AAGF,eAAe,YAAY,CAAC,UAA0C;AAAA,EACpE,IAAI;AAAA,IACF,OAAO,MAAM,IAAG,SAAS,UAAU,MAAM;AAAA,IACzC,OAAO,OAAO;AAAA,IACd,IAAK,MAAgC,SAAS;AAAA,MAAU,OAAO;AAAA,IAC/D,MAAM;AAAA;AAAA;AAIV,eAAe,WAAW,CAAC,UAAkB,UAAiC;AAAA,EAC5E,MAAM,UAAU,GAAG,WAAW;AAAA,EAC9B,MAAM,SAAS,MAAM,IAAG,KAAK,SAAS,KAAK,GAAK;AAAA,EAChD,IAAI;AAAA,IACF,MAAM,OAAO,UAAU,UAAU,MAAM;AAAA,IACvC,MAAM,OAAO,KAAK;AAAA,YAClB;AAAA,IACA,MAAM,OAAO,MAAM;AAAA;AAAA,EAErB,MAAM,IAAG,OAAO,SAAS,QAAQ;AAAA;AAKnC,SAAS,SAAY,CAAC,IAAkC;AAAA,EACtD,MAAM,OAAO,WAAW,KAAK,IAAI,EAAE;AAAA,EACnC,aAAa,KAAK,MAAM,MAAG;AAAA,IAAG;AAAA,GAAS;AAAA,EACvC,OAAO;AAAA;AAGT,SAAS,oBAAoB,CAAC,UAA2B;AAAA,EACvD,OAAO,MAAK,KAAK,YAAY,gBAAgB,GAAG,mBAAmB;AAAA;AAGrE,eAAsB,gBAAgB,CACpC,KACA,OACA,OAAgC,CAAC,GAClB;AAAA,EACf,YAAY,GAAG;AAAA,EAEf,MAAM,UAAU,YAAY;AAAA,IAC1B,MAAM,WAAW,qBAAqB,KAAK,QAAQ;AAAA,IACnD,MAAM,IAAG,MAAM,MAAK,QAAQ,QAAQ,GAAG,EAAE,WAAW,KAAK,CAAC;AAAA,IAE1D,MAAM,WAAY,MAAM,aAAa,QAAQ,KAAM;AAAA,IACnD,MAAM,SAAS,eAAe,QAAQ;AAAA,IACtC,MAAM,cAAc,OAAO,MAAM,IAAI,GAAG;AAAA,IACxC,MAAM,WAAW,UAAU;AAAA,IAE3B,IAAI,UAAU;AAAA,MACZ,IAAI,gBAAgB,WAAW;AAAA,QAC7B,OAAO,QAAQ,IAAI;AAAA,QACnB;AAAA,MACF;AAAA,MACA,OAAO,MAAM,OAAO,aAAa,CAAC;AAAA,IACpC,EAAO;AAAA,MACL,MAAM,UAAU,GAAG,OAAO,YAAY,KAAK;AAAA,MAC3C,IAAI,gBAAgB,WAAW;AAAA,QAC7B,OAAO,MAAM,KAAK,OAAO;AAAA,MAC3B,EAAO;AAAA,QACL,OAAO,MAAM,eAAe;AAAA;AAAA;AAAA,IAIhC,IAAI,SAAS,SAAS,GAAG;AAAA,MACvB,MAAM,IAAG,UAAU,GAAG,WAAW,cAAc,UAAU;AAAA,QACvD,UAAU;AAAA,QACV,MAAM;AAAA,MACR,CAAC;AAAA,IACH;AAAA,IAEA,MAAM,YAAY,UAAU,mBAAmB,MAAM,CAAC;AAAA,IACtD,IAAI,UAAU;AAAA,MACZ,OAAO,QAAQ,IAAI;AAAA,IACrB,EAAO;AAAA,MACL,QAAQ,IAAI,OAAO;AAAA;AAAA,GAEtB;AAAA;AAAA,IAlKG,sBAAsB,cACtB,aAAa,QACb,aAAa,QACb,aAEA,yBAqGF;AAAA;AAAA,EA5GJ;AAAA,EAKM,cAAc;AAAA,EAEd,0BAA+C,IAAI,IAAI;AAAA,IAC3D;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAAA,EA+EG,aAA+B,QAAQ,QAAQ;AAAA;;;AC9GnD,SAAS,YAAY,CAAC,MAAc,WAAW,OAAgB;AAAA,EAC7D,MAAM,MAAM,QAAQ,IAAI;AAAA,EACxB,IAAI,QAAQ,aAAa,QAAQ,QAAQ,QAAQ;AAAA,IAAI,OAAO;AAAA,EAC5D,MAAM,UAAU,OAAO,GAAG,EAAE,KAAK,EAAE,YAAY;AAAA,EAC/C,IACE,YAAY,OACZ,YAAY,UACZ,YAAY,SACZ,YAAY,MACZ;AAAA,IACA,OAAO;AAAA,EACT;AAAA,EACA,IACE,YAAY,OACZ,YAAY,WACZ,YAAY,QACZ,YAAY,OACZ;AAAA,IACA,OAAO;AAAA,EACT;AAAA,EACA,OAAO;AAAA;AAGF,SAAS,oBAAoB,GAAY;AAAA,EAC9C,OAAO,aAAa,qBAAqB;AAAA;;;ACR3C;AAoBA,SAAS,UAAU,GAAS;AAAA,EAC1B,IAAI,CAAC,qBAAqB,GAAG;AAAA,IAC3B,MAAM,IAAI;AAAA,EACZ;AAAA;AAMF,SAAS,mBAAmB,CAAC,KAA4B;AAAA,EACvD,MAAM,UAAU,IAAI,KAAK;AAAA,EACzB,MAAM,MAAM,QAAQ,WAAW,IAAI,IAAI,QAAQ,MAAM,CAAC,IAAI;AAAA,EAC1D,IAAI,CAAC,oBAAoB,KAAK,GAAG,GAAG;AAAA,IAClC,MAAM,IAAI,MACR,aAAa,0DACf;AAAA,EACF;AAAA,EACA,OAAO,KAAK,IAAI,YAAY;AAAA;AAmC9B,eAAsB,2BAA2B,CAC/C,OAA8B,CAAC,GAK9B;AAAA,EACD,WAAW;AAAA,EAEX,MAAM,WAAW,QAAQ,IAAI;AAAA,EAC7B,IAAI,YAAY,SAAS,KAAK,EAAE,SAAS,GAAG;AAAA,IAC1C,MAAM,cAAa,oBAAoB,QAAQ;AAAA,IAC/C,MAAM,WAAU,oBAAoB,WAAU;AAAA,IAC9C,OAAO,EAAE,yBAAY,SAAS,SAAQ,SAAS,QAAQ,MAAM;AAAA,EAC/D;AAAA,EAEA,MAAM,aAAa,mBAAmB;AAAA,EACtC,MAAM,UAAU,oBAAoB,UAAU;AAAA,EAE9C,QAAQ,IAAI,sCAAsC;AAAA,EAClD,MAAM,iBAAiB,oCAAoC,YAAY;AAAA,IACrE,UAAU,KAAK;AAAA,EACjB,CAAC;AAAA,EAED,OAAO,EAAE,YAAY,SAAS,QAAQ,SAAS,QAAQ,KAAK;AAAA;AAS9D,SAAS,WAAW,CAAC,SAAiB,OAA+B;AAAA,EACnE,OAAO,GAAG,YAAY;AAAA;AAGxB,eAAe,YAAY,CACzB,QACA,SACA,OACA,eACgC;AAAA,EAChC,IAAI;AAAA,IACF,OAAO,MAAM,OAAO,eAAe,SAAS,KAAK;AAAA,IACjD,OAAO,OAAO;AAAA,IACd,IAAI,CAAC,0BAA0B,OAAO,KAAK,GAAG;AAAA,MAC5C,MAAM;AAAA,IACR;AAAA;AAAA,EAGF,MAAM,cAAc,MAAM,OAAO,gBAAgB;AAAA,IAC/C,WAAW;AAAA,IACX;AAAA,EACF,CAAC;AAAA,EAED,OAAO;AAAA,IACL,eAAe,YAAY;AAAA,IAC3B,eAAe,YAAY;AAAA,IAC3B,gBAAgB,YAAY;AAAA,IAC5B,WAAW;AAAA,EACb;AAAA;AAGF,SAAS,yBAAyB,CAChC,OACA,OACS;AAAA,EACT,IACE,iBAAiB,SACjB,IAAI,OAAO,YAAY,4BAA4B,GAAG,EAAE,KAAK,MAAM,OAAO,GAC1E;AAAA,IACA,OAAO;AAAA,EACT;AAAA,EAEA,OACE,OAAO,UAAU,YACjB,UAAU,QACV,UAAU,SACV,MAAM,SAAS,sBACf,OAAQ,MAA2B,WAAW,YAC7C,MAA2B,WAAW;AAAA;AA0B3C,SAAS,sBAAsB,CAAC,OAAuB,OAAwB;AAAA,EAC7E,MAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,EACrE,OAAO,SAAS,+BAA+B;AAAA;AASjD,eAAsB,+BAA+B,CACnD,QACA,MACqC;AAAA,EACrC,WAAW;AAAA,EAEX,MAAM,SAA2B,KAAK,UAAU,CAAC,OAAO,QAAQ;AAAA,EAEhE,MAAM,UAAU,MAAM,QAAQ,IAC5B,OAAO,IAAI,CAAC,UAAU;AAAA,IACpB,MAAM,MAAM,YAAY,KAAK,SAAS,KAAK;AAAA,IAC3C,MAAM,UAAU,SAAS,IAAI,GAAG;AAAA,IAChC,IAAI,SAAS;AAAA,MACX,OAAO,QAAQ,KACb,CAAC,gBACE;AAAA,QACC;AAAA,QACA,IAAI;AAAA,QACJ;AAAA,MACF,IACF,CAAC,WACE;AAAA,QACC;AAAA,QACA,IAAI;AAAA,QACJ;AAAA,MACF,EACJ;AAAA,IACF;AAAA,IAEA,MAAM,IAAI,aACR,QACA,KAAK,SACL,OACA,KAAK,aACP,EAAE,QAAQ,MAAM;AAAA,MACd,SAAS,OAAO,GAAG;AAAA,KACpB;AAAA,IACD,SAAS,IAAI,KAAK,CAAC;AAAA,IACnB,OAAO,EAAE,KACP,CAAC,gBACE;AAAA,MACC;AAAA,MACA,IAAI;AAAA,MACJ;AAAA,IACF,IACF,CAAC,WACE;AAAA,MACC;AAAA,MACA,IAAI;AAAA,MACJ;AAAA,IACF,EACJ;AAAA,GACD,CACH;AAAA,EAEA,MAAM,MAAuC,CAAC;AAAA,EAC9C,MAAM,WAA0C,CAAC;AAAA,EACjD,WAAW,UAAU,SAAS;AAAA,IAC5B,IAAI,gBAAgB,QAAQ;AAAA,MAC1B,IAAI,OAAO,SAAS,OAAO;AAAA,MAC3B;AAAA,IACF;AAAA,IACA,SAAS,KAAK,EAAE,OAAO,OAAO,OAAO,OAAO,OAAO,MAAM,CAAC;AAAA,EAC5D;AAAA,EAEA,OAAO;AAAA,IACL,aAAa;AAAA,IACb;AAAA,IACA,UAAU,SAAS,IAAI,GAAG,OAAO,YAC/B,uBAAuB,OAAO,KAAK,CACrC;AAAA,EACF;AAAA;AAGF,eAAsB,qBAAqB,CACzC,QACA,MAC0C;AAAA,EAC1C,MAAM,SAAS,MAAM,gCAAgC,QAAQ,IAAI;AAAA,EACjE,IACE,OAAO,SAAS,SAAS,KACzB,OAAO,KAAK,OAAO,WAAW,EAAE,WAAW,GAC3C;AAAA,IACA,MAAM,eAAe,OAAO,SAAS;AAAA,IACrC,IAAI,cAAc,iBAAiB,OAAO;AAAA,MACxC,MAAM,aAAa;AAAA,IACrB;AAAA,IACA,MAAM,IAAI,MAAM,OAAO,SAAS,MAAM,mCAAmC;AAAA,EAC3E;AAAA,EAEA,OAAO,OAAO;AAAA;AAoBT,SAAS,uBAAuB,CACrC,QACA,aACM;AAAA,EACN,WAAW;AAAA,EAEX,MAAM,SAAU,OAAO,UAAU,CAAC;AAAA,EAGlC,MAAM,QAAQ,KAAM,OAAO,SAAS,CAAC,EAAG;AAAA,EACxC,IAAI,YAAY;AAAA,IAAK,MAAM,MAAM,YAAY;AAAA,EAC7C,IAAI,YAAY;AAAA,IAAQ,MAAM,SAAS,YAAY;AAAA,EACnD,OAAO,QAAQ;AAAA,EACf,OAAO,SAAS;AAAA;AAQX,SAAS,gCAAgC,GAAS;AAAA,EACvD,SAAS,MAAM;AAAA,EACf,OAAO,QAAQ,IAAI;AAAA;AAAA,IAzTR,qCACX,kCAEW,8BA0FP;AAAA;AAAA,EAhGN;AAAA,EAMa,+BAAN,MAAM,qCAAqC,MAAM;AAAA,IACtD,WAAW,GAAG;AAAA,MACZ,MAAM,kEAAkE;AAAA,MACxE,KAAK,OAAO;AAAA;AAAA,EAEhB;AAAA,EAqFM,WAAW,IAAI;AAAA;;;AC9GrB,SAAS,gBAAgB,CAAC,OAAyB;AAAA,EACjD,IAAI,iBAAiB,OAAO;AAAA,IAC1B,OAAO,EAAE,OAAO,MAAM,WAAW,iBAAiB;AAAA,EACpD;AAAA,EACA,IAAI,MAAM,QAAQ,KAAK,GAAG;AAAA,IACxB,OAAO,MAAM,IAAI,gBAAgB;AAAA,EACnC;AAAA,EACA,IAAI,SAAS,OAAO,UAAU,UAAU;AAAA,IACtC,MAAM,MAA+B,CAAC;AAAA,IACtC,YAAY,KAAK,WAAW,OAAO,QAAQ,KAAK,GAAG;AAAA,MACjD,IAAI,QAAQ,WAAW,QAAQ;AAAA,QAAc;AAAA,MAC7C,IAAI,OAAO,iBAAiB,MAAM;AAAA,IACpC;AAAA,IACA,OAAO;AAAA,EACT;AAAA,EACA,OAAO;AAAA;AAGF,SAAS,QAAQ,CACtB,KACA,MACA,SAAS,KACH;AAAA,EACN,IAAI,IAAI;AAAA,IAAa;AAAA,EACrB,IAAI,aAAa;AAAA,EACjB,IAAI,UAAU,gBAAgB,iCAAiC;AAAA,EAC/D,IAAI,IAAI,KAAK,UAAU,iBAAiB,IAAI,CAAC,CAAC;AAAA;AAGzC,SAAS,aAAa,CAC3B,KACA,SACA,SAAS,KACH;AAAA,EACN,SAAS,KAAK,EAAE,OAAO,QAAQ,GAAG,MAAM;AAAA;AAG1C,eAAe,eAAe,CAC5B,KACA,SACwB;AAAA,EACxB,MAAM,WAAW,QAAQ,YAAY;AAAA,EACrC,MAAM,SAAmB,CAAC;AAAA,EAC1B,IAAI,OAAO;AAAA,EAEX,iBAAiB,SAAS,KAAK;AAAA,IAC7B,MAAM,SAAS,OAAO,UAAU,WAAW,OAAO,KAAK,KAAK,IAAI;AAAA,IAChE,QAAQ,OAAO;AAAA,IACf,IAAI,OAAO,UAAU;AAAA,MACnB,IAAI,QAAQ;AAAA,QAAmB,IAAI,QAAQ;AAAA,MAC3C,MAAM,IAAI,MAAM,QAAQ,mBAAmB,wBAAwB;AAAA,IACrE;AAAA,IACA,OAAO,KAAK,MAAM;AAAA,EACpB;AAAA,EAEA,IAAI,OAAO,WAAW;AAAA,IAAG,OAAO;AAAA,EAChC,OAAO,OAAO,OAAO,MAAM,EAAE,SAAS,MAAM;AAAA;AAG9C,eAAsB,YAAwD,CAC5E,KACA,KACA,UAA+B,CAAC,GACb;AAAA,EACnB,MAAM,SAAU,IAAkD;AAAA,EAClE,IAAI,WAAW,WAAW;AAAA,IACxB,IACE,QAAQ,kBAAkB,UACzB,CAAC,UAAU,OAAO,WAAW,YAAY,MAAM,QAAQ,MAAM,IAC9D;AAAA,MACA,cAAc,KAAK,sCAAsC,GAAG;AAAA,MAC5D,OAAO;AAAA,IACT;AAAA,IACA,OAAO;AAAA,EACT;AAAA,EAEA,IAAI;AAAA,EACJ,IAAI;AAAA,IACF,MAAM,MAAM,gBAAgB,KAAK,OAAO;AAAA,IACxC,OAAO,OAAO;AAAA,IACd,cACE,KACA,iBAAiB,QAAQ,MAAM,UAAU,+BACzC,GACF;AAAA,IACA,OAAO;AAAA;AAAA,EAGT,IAAI,CAAC,KAAK,KAAK,GAAG;AAAA,IAChB,MAAM,QAAQ,CAAC;AAAA,IACd,IAAkD,OAAO;AAAA,IAC1D,OAAO;AAAA,EACT;AAAA,EAEA,IAAI;AAAA,EACJ,IAAI;AAAA,IACF,SAAS,KAAK,MAAM,GAAG;AAAA,IACvB,MAAM;AAAA,IACN,cAAc,KAAK,gCAAgC,GAAG;AAAA,IACtD,OAAO;AAAA;AAAA,EAGT,IACE,QAAQ,kBAAkB,UACzB,CAAC,UAAU,OAAO,WAAW,YAAY,MAAM,QAAQ,MAAM,IAC9D;AAAA,IACA,cAAc,KAAK,sCAAsC,GAAG;AAAA,IAC5D,OAAO;AAAA,EACT;AAAA,EAEC,IAAkD,OAAO;AAAA,EAC1D,OAAO;AAAA;;;ACxHT,kCAAS;AASF,SAAS,8BAA8B,CAAC,OAG7B;AAAA,EAChB,MAAM,YAAY,MAAM,WAAW,KAAK;AAAA,EACxC,IAAI,CAAC;AAAA,IAAW,OAAO;AAAA,EAEvB,IAAI;AAAA,IACF,MAAM,MAAM,IAAI,IAAI,uBAAsB,MAAM,gBAAgB,SAAS,CAAC;AAAA,IAC1E,IAAI,WAAW;AAAA,IACf,IAAI,SAAS;AAAA,IACb,IAAI,OAAO;AAAA,IACX,IAAI,aAAa,IAAI,yCAAyC,SAAS;AAAA,IACvE,OAAO,IAAI,SAAS;AAAA,IACpB,MAAM;AAAA,IACN,OAAO;AAAA;AAAA;AAIJ,SAAS,8BAA8B,CAAC,OAKV;AAAA,EACnC,MAAM,YAAY,mBAAmB,MAAM,SAAS;AAAA,EACpD,IAAI,CAAC;AAAA,IAAW,OAAO;AAAA,EAEvB,IAAI;AAAA,EACJ,IAAI;AAAA,IACF,SAAS,IAAI,IAAI,MAAM,eAAe,KAAK,KAAK,EAAE;AAAA,IAClD,MAAM;AAAA,IACN,OAAO;AAAA;AAAA,EAGT,IAAI,OAAO,aAAa,SAAS;AAAA,IAC/B,OAAO;AAAA,EACT;AAAA,EAEA,MAAM,aAAa,OAAO,QAAQ;AAAA,EAClC,MAAM,YAAY,cAAc,MAAM,SAAS,KAAK;AAAA,EACpD,MAAM,aACJ,OAAO,aAAa,eAAe,OAAO,aAAa,cACnD,cACA,OAAO;AAAA,EACb,MAAM,cAAc,MAAM,aAAa,KAAK,IACxC,OAAO,cAAc,MAAM,YAAY,KAAK,CAAC,MAC7C;AAAA,EACJ,MAAM,UAAU,SAAS,4BAA4B,aAAa,cAAc,cAAc;AAAA,EAC9F,OAAO;AAAA,IACL;AAAA,IACA,UAAU,GAAG,OAAO,uBAAuB;AAAA,EAC7C;AAAA;AAGF,SAAS,aAAa,CAAC,OAA0D;AAAA,EAC/E,IAAI,UAAU,QAAQ,UAAU;AAAA,IAAW,OAAO;AAAA,EAClD,MAAM,MAAM,OAAO,KAAK,EAAE,KAAK;AAAA,EAC/B,IAAI,CAAC,QAAQ,KAAK,GAAG;AAAA,IAAG,OAAO;AAAA,EAC/B,MAAM,OAAO,OAAO,GAAG;AAAA,EACvB,IAAI,CAAC,OAAO,UAAU,IAAI,KAAK,OAAO,KAAK,OAAO;AAAA,IAAO,OAAO;AAAA,EAChE,OAAO,OAAO,IAAI;AAAA;AAGpB,SAAS,kBAAkB,CAAC,OAAiD;AAAA,EAC3E,MAAM,SAAS,OAAO,KAAK;AAAA,EAC3B,IAAI,CAAC;AAAA,IAAQ,OAAO;AAAA,EACpB,IAAI,CAAC,sCAAsC,KAAK,MAAM;AAAA,IAAG,OAAO;AAAA,EAChE,OAAO;AAAA;AAGT,SAAS,aAAa,CAAC,OAAuB;AAAA,EAC5C,OAAO,IAAI,MAAM,QAAQ,MAAM,OAAO;AAAA;AAAA,IA/E3B,0CAA0C;AAAA;;;ACwCvD,SAAS,oBAAoB,CAC3B,QAC0B;AAAA,EAC1B,OAAO,mBAAmB,CAAC;AAAA,EAC3B,OAAO,OAAO;AAAA;AAGhB,SAAS,oBAAoB,CAC3B,QACsB;AAAA,EACtB,OAAO,mBAAmB,CAAC;AAAA,EAC3B,OAAO,OAAO;AAAA;AAGhB,SAAS,uBAAuB,CAC9B,QACA,kBACM;AAAA,EACN,IAAI,CAAC,kBAAkB;AAAA,IACrB,OAAO,OAAO;AAAA,IACd;AAAA,EACF;AAAA,EACA,OAAO,mBAAmB,KAAK,iBAAiB;AAAA;AAGlD,SAAS,qBAAqB,CAC5B,QACA,gBACM;AAAA,EACN,IAAI,CAAC;AAAA,IAAgB;AAAA,EAErB,MAAM,WAAW,qBAAqB,MAAM;AAAA,EAC5C,YAAY,WAAW,YAAY,OAAO,QAAQ,cAAc,GAAG;AAAA,IACjE,IAAI,CAAC,WAAW,OAAO,KAAK,OAAO,EAAE,WAAW,GAAG;AAAA,MACjD,OAAO,SAAS;AAAA,MAChB;AAAA,IACF;AAAA,IACA,SAAS,aAAa;AAAA,SACjB,SAAS;AAAA,SACT;AAAA,IACL;AAAA,EACF;AAAA,EAEA,IAAI,OAAO,KAAK,QAAQ,EAAE,WAAW,GAAG;AAAA,IACtC,OAAO,OAAO;AAAA,EAChB;AAAA;AAGF,SAAS,qBAAqB,CAC5B,QACA,gBACA,cAA4C,CAAC,GACvC;AAAA,EACN,MAAM,WAAW,qBAAqB,MAAM;AAAA,EAE5C,WAAW,cAAc,aAAa;AAAA,IACpC,OAAO,SAAS;AAAA,EAClB;AAAA,EAEA,IAAI,gBAAgB;AAAA,IAClB,YAAY,YAAY,UAAU,OAAO,QAAQ,cAAc,GAAG;AAAA,MAChE,MAAM,aAAa;AAAA,MACnB,IAAI,CAAC,SAAS,OAAO,KAAK,KAAK,EAAE,WAAW,GAAG;AAAA,QAC7C,OAAO,SAAS;AAAA,QAChB;AAAA,MACF;AAAA,MACA,SAAS,cAAc,KAAK,MAAM;AAAA,IACpC;AAAA,EACF;AAAA,EAEA,IAAI,OAAO,KAAK,QAAQ,EAAE,WAAW,GAAG;AAAA,IACtC,OAAO,OAAO;AAAA,EAChB;AAAA;AAGK,SAAS,yBAAyB,CACvC,QACA,MAMM;AAAA,EACN,IAAI,KAAK,qBAAqB,WAAW;AAAA,IACvC,wBAAwB,QAAQ,KAAK,gBAAgB;AAAA,EACvD;AAAA,EACA,IAAI,KAAK,mBAAmB,WAAW;AAAA,IACrC,sBAAsB,QAAQ,KAAK,cAAc;AAAA,EACnD;AAAA,EACA,IAAI,KAAK,mBAAmB,aAAa,KAAK,aAAa,QAAQ;AAAA,IACjE,sBAAsB,QAAQ,KAAK,gBAAgB,KAAK,WAAW;AAAA,EACrE;AAAA;AAGK,SAAS,iBAAiB,CAAC,OAAoC;AAAA,EACpE,IAAI,OAAO,UAAU;AAAA,IAAU;AAAA,EAC/B,MAAM,UAAU,MAAM,KAAK;AAAA,EAC3B,OAAO,WAAW;AAAA;AAGb,SAAS,cAAc,CAAC,OAAyB;AAAA,EACtD,IAAI,EAAE,iBAAiB;AAAA,IAAQ,OAAO;AAAA,EACtC,IAAI,MAAM,SAAS,kBAAkB,MAAM,SAAS;AAAA,IAAc,OAAO;AAAA,EACzE,MAAM,UAAU,MAAM,QAAQ,YAAY;AAAA,EAC1C,OAAO,QAAQ,SAAS,WAAW,KAAK,QAAQ,SAAS,SAAS;AAAA;;;ACnJpE;AAEA;AACA;AAAA;AAAA;AAAA;AAIA;AAsJA,SAAS,cAAc,CAAC,UAAiC;AAAA,EACvD,MAAM,KAAK,SAAS,MAAM,GAAG,EAAE;AAAA,EAC/B,OAAO,MAAM,QAAQ,KAAK,EAAE,IAAI,KAAK;AAAA;AAGvC,SAAS,kBAAoC,CAAC,QAAW,UAAmB;AAAA,EAC1E,MAAM,eAAe;AAAA,EACrB,WAAW,OAAO,OAAO,KAAK,YAAY,GAAG;AAAA,IAC3C,OAAO,aAAa;AAAA,EACtB;AAAA,EACA,OAAO,OACL,cACA,gBAAgB,QAAmC,CACrD;AAAA;AAGF,SAAS,YAAY,CAAC,SAAmD;AAAA,EACvE,IAAI,OAAO,SAAS,eAAe,YAAY;AAAA,IAC7C,OAAO;AAAA,EACT;AAAA,EACA,MAAM,UAAU,QAAQ,WAAW,YAAY;AAAA,EAC/C,OAAO,WAAW,OAAO,YAAY,WAChC,UACD;AAAA;AAGN,SAAS,cAAc,CAAC,SAAmD;AAAA,EACzE,MAAM,YAAY,aAAa,OAAO;AAAA,EACtC,IAAI,OAAO,WAAW,cAAc,YAAY;AAAA,IAC9C,UAAU,UAAU;AAAA,EACtB;AAAA,EACA,OAAO;AAAA;AAGT,eAAe,gCAAgC,GAAuC;AAAA,EACpF,MAAM,WAAW,MAAK,KAAK,gBAAgB,GAAG,oBAAmB;AAAA,EACjE,MAAM,UAAU,GAAG,WAAW;AAAA,EAE9B,IAAI,cAA6B;AAAA,EACjC,IAAI;AAAA,IACF,cAAc,MAAM,IAAG,SAAS,UAAU,MAAM;AAAA,IAChD,OAAO,KAAK;AAAA,IACZ,IAAK,IAA8B,SAAS,UAAU;AAAA,MACpD,MAAM;AAAA,IACR;AAAA;AAAA,EAGF,MAAM,cAAc,OAAO,YACzB,+BAA+B,QAAQ,CAAC,QAAQ;AAAA,IAC9C,MAAM,QAAQ,QAAQ,IAAI;AAAA,IAC1B,OAAO,OAAO,UAAU,WAAY,CAAC,CAAC,KAAK,KAAK,CAAC,IAAc,CAAC;AAAA,GACjE,CACH;AAAA,EAEA,OAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA;AAGF,eAAe,gCAAgC,CAC7C,UACe;AAAA,EACf,MAAM,IAAG,MAAM,MAAK,QAAQ,SAAS,QAAQ,GAAG,EAAE,WAAW,KAAK,CAAC;AAAA,EAEnE,IAAI,SAAS,gBAAgB,MAAM;AAAA,IACjC,MAAM,IAAG,GAAG,SAAS,UAAU,EAAE,OAAO,KAAK,CAAC;AAAA,IAC9C,MAAM,IAAG,GAAG,SAAS,SAAS,EAAE,OAAO,KAAK,CAAC;AAAA,EAC/C,EAAO;AAAA,IACL,MAAM,IAAG,UAAU,SAAS,UAAU,SAAS,aAAa;AAAA,MAC1D,UAAU;AAAA,MACV,MAAM;AAAA,IACR,CAAC;AAAA,IACD,MAAM,IAAG,UAAU,SAAS,SAAS,SAAS,aAAa;AAAA,MACzD,UAAU;AAAA,MACV,MAAM;AAAA,IACR,CAAC;AAAA;AAAA,EAGH,WAAW,OAAO,gCAAgC;AAAA,IAChD,MAAM,gBAAgB,SAAS,YAAY;AAAA,IAC3C,IAAI,OAAO,kBAAkB,UAAU;AAAA,MACrC,QAAQ,IAAI,OAAO;AAAA,IACrB,EAAO;AAAA,MACL,OAAO,QAAQ,IAAI;AAAA;AAAA,EAEvB;AAAA;AAGF,SAAS,iBAAiB,CAAC,OAA8B;AAAA,EACvD,IAAI,CAAC,MAAM,YAAY;AAAA,IACrB,MAAM,IAAI,MAAM,0BAA0B;AAAA,EAC5C;AAAA,EACA,MAAM,WAAW,MAAM,MAAM;AAAA;AAG/B,eAAe,aAAyC,CACtD,KACA,KACmB;AAAA,EACnB,OAAQ,MAAM,aAAc,KAAK,KAAK;AAAA,IACpC,UAAU;AAAA,IACV,iBAAiB;AAAA,IACjB,mBAAmB;AAAA,EACrB,CAAC;AAAA;AAGH,SAAS,kBAAkB,CAAC,UAA6B;AAAA,EACvD,OAAO,SAAS,UAAU,OAAO,SAAS,SAAS;AAAA;AAGrD,SAAS,uBAAuB,GAAiC;AAAA,EAC/D,OAAO;AAAA,IACL,SAAS,MAAM;AAAA,IACf,SAAS,MAAM;AAAA,EACjB;AAAA;AAGF,SAAS,gBAAgB,CACvB,OACA,MAK8B;AAAA,EAC9B,OAAO,MAAM,sBAAsB,IAAI,KAAK,wBAAwB;AAAA;AAGtE,eAAe,gBAAgB,CAC7B,OACA,MACA,WACmB;AAAA,EACnB,OAAO,MAAM,OAAO;AAAA,OACf;AAAA,IACH,UAAU;AAAA,IACV,QAAQ,YAAY,QAAQ,SAAS;AAAA,EACvC,CAAC;AAAA;AAGH,eAAsB,gBAAgB,CACpC,KACA,KACA,UACA,QACA,OACkB;AAAA,EAClB,IAAI,WAAW,UAAU,aAAa,oBAAoB;AAAA,IACxD,MAAM,UAAU,sBAAsB,MAAM,OAAO,OAAO,OAAO;AAAA,IACjE,MAAM,WAAW,MAAM,qBAAqB,OAAO;AAAA,IACnD,IAAI,UAAU;AAAA,MACZ,cAAc,KAAK,QAAQ;AAAA,MAC3B,OAAO;AAAA,IACT;AAAA,IACA,MAAM,YAAY,OAAO,WAAW;AAAA,IACpC,MAAM,kBAAkB,iBAAiB,OAAO;AAAA,MAC9C,UAAU;AAAA,MACV,WAAW;AAAA,MACX,WAAW;AAAA,IACb,CAAC;AAAA,IAED,IAAI;AAAA,IACJ,IAAI;AAAA,MACF,YAAY,MAAM,iBAChB,GAAG,gCACH;AAAA,QACE,QAAQ;AAAA,QACR,SAAS,EAAE,gBAAgB,mBAAmB;AAAA,QAC9C,MAAM,KAAK,UAAU,EAAE,UAAU,CAAC;AAAA,MACpC,GACA,6BACF;AAAA,MACA,OAAO,KAAK;AAAA,MACZ,IAAI,eAAe,GAAG,GAAG;AAAA,QACvB,gBAAgB,QAAQ,EAAE,OAAO,KAAK,YAAY,IAAI,CAAC;AAAA,QACvD,cAAc,KAAK,uCAAuC,GAAG;AAAA,QAC7D,OAAO;AAAA,MACT;AAAA,MACA,gBAAgB,QAAQ,EAAE,OAAO,KAAK,YAAY,IAAI,CAAC;AAAA,MACvD,cAAc,KAAK,+BAA+B,GAAG;AAAA,MACrD,OAAO;AAAA;AAAA,IAGT,IAAI,mBAAmB,SAAS,GAAG;AAAA,MACjC,gBAAgB,QAAQ;AAAA,QACtB,YAAY,UAAU;AAAA,QACtB,WAAW;AAAA,MACb,CAAC;AAAA,MACD,cACE,KACA,uEACA,GACF;AAAA,MACA,OAAO;AAAA,IACT;AAAA,IAEA,IAAI,CAAC,UAAU,IAAI;AAAA,MACjB,gBAAgB,QAAQ;AAAA,QACtB,YAAY,UAAU;AAAA,QACtB,WAAW;AAAA,MACb,CAAC;AAAA,MACD,cAAc,KAAK,kDAAkD,GAAG;AAAA,MACxE,OAAO;AAAA,IACT;AAAA,IAEA,gBAAgB,QAAQ,EAAE,YAAY,UAAU,OAAO,CAAC;AAAA,IACxD,SAAS,KAAK;AAAA,MACZ,IAAI;AAAA,MACJ;AAAA,MACA,YAAY,GAAG,kCAAkC,mBAAmB,SAAS;AAAA,IAC/E,CAAC;AAAA,IACD,OAAO;AAAA,EACT;AAAA,EAEA,IAAI,WAAW,SAAS,SAAS,WAAW,yBAAyB,GAAG;AAAA,IACtE,MAAM,MAAM,IAAI,IACd,IAAI,OAAO,KACX,UAAU,IAAI,QAAQ,QAAQ,aAChC;AAAA,IACA,MAAM,YAAY,IAAI,aAAa,IAAI,WAAW;AAAA,IAClD,IAAI,CAAC,WAAW;AAAA,MACd,cAAc,KAAK,uCAAuC;AAAA,MAC1D,OAAO;AAAA,IACT;AAAA,IAEA,MAAM,UAAU,sBAAsB,MAAM,OAAO,OAAO,OAAO;AAAA,IACjE,MAAM,WAAW,MAAM,qBAAqB,OAAO;AAAA,IACnD,IAAI,UAAU;AAAA,MACZ,cAAc,KAAK,QAAQ;AAAA,MAC3B,OAAO;AAAA,IACT;AAAA,IACA,MAAM,gBAAgB,iBAAiB,OAAO;AAAA,MAC5C,UAAU;AAAA,MACV,WAAW;AAAA,MACX,WAAW;AAAA,IACb,CAAC;AAAA,IACD,IAAI;AAAA,IACJ,IAAI;AAAA,MACF,UAAU,MAAM,iBACd,GAAG,gCAAgC,mBAAmB,SAAS,KAC/D,CAAC,GACD,2BACF;AAAA,MACA,OAAO,KAAK;AAAA,MACZ,IAAI,eAAe,GAAG,GAAG;AAAA,QACvB,cAAc,QAAQ,EAAE,OAAO,KAAK,YAAY,IAAI,CAAC;AAAA,QACrD,SACE,KACA;AAAA,UACE,QAAQ;AAAA,UACR,OAAO;AAAA,QACT,GACA,GACF;AAAA,QACA,OAAO;AAAA,MACT;AAAA,MACA,cAAc,QAAQ,EAAE,OAAO,KAAK,YAAY,IAAI,CAAC;AAAA,MACrD,SACE,KACA;AAAA,QACE,QAAQ;AAAA,QACR,OAAO;AAAA,MACT,GACA,GACF;AAAA,MACA,OAAO;AAAA;AAAA,IAGT,IAAI,mBAAmB,OAAO,GAAG;AAAA,MAC/B,cAAc,QAAQ;AAAA,QACpB,YAAY,QAAQ;AAAA,QACpB,WAAW;AAAA,MACb,CAAC;AAAA,MACD,SACE,KACA;AAAA,QACE,QAAQ;AAAA,QACR,OACE;AAAA,MACJ,GACA,GACF;AAAA,MACA,OAAO;AAAA,IACT;AAAA,IAEA,IAAI,CAAC,QAAQ,IAAI;AAAA,MACf,cAAc,QAAQ;AAAA,QACpB,YAAY,QAAQ;AAAA,QACpB,WAAW;AAAA,MACb,CAAC;AAAA,MACD,SACE,KACA,QAAQ,WAAW,MACf,EAAE,QAAQ,WAAW,OAAO,+BAA+B,IAC3D;AAAA,QACE,QAAQ;AAAA,QACR,OAAO,6BAA6B,QAAQ;AAAA,MAC9C,CACN;AAAA,MACA,OAAO;AAAA,IACT;AAAA,IAEA,IAAI;AAAA,IAOJ,IAAI;AAAA,MACF,OAAQ,MAAM,QAAQ,KAAK;AAAA,MAO3B,OAAO,UAAU;AAAA,MACjB,cAAc,QAAQ,EAAE,OAAO,UAAU,YAAY,QAAQ,OAAO,CAAC;AAAA,MACrE,SACE,KACA,EAAE,QAAQ,SAAS,OAAO,oCAAoC,GAC9D,GACF;AAAA,MACA,OAAO;AAAA;AAAA,IAET,cAAc,QAAQ,EAAE,YAAY,QAAQ,OAAO,CAAC;AAAA,IAEpD,IAAI,KAAK,WAAW,mBAAmB,KAAK,QAAQ;AAAA,MAClD,MAAM,iBACJ,OAAO,KAAK,mBAAmB,WAC3B,KAAK,eAAe,KAAK,IACzB;AAAA,MACN,MAAM,SACJ,OAAO,KAAK,WAAW,WAAW,KAAK,OAAO,KAAK,IAAI;AAAA,MACzD,MAAM,YAAY,eAAe,MAAM,OAAO;AAAA,MAC9C,2BAA2B,MAAM,MAAiC;AAAA,MAClE,MAAM,QAAS,MAAM,OAAO,SAAS,CAAC;AAAA,MAGtC,MAAM,SAAS,KAAK;AAAA,MACnB,MAAM,OAAmC,QAAQ;AAAA,MAClD,0BAA0B,MAAM,QAAiB;AAAA,QAC/C,gBAAgB;AAAA,UACd,YAAY;AAAA,YACV,QAAQ;AAAA,YACR,QAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF,CAAC;AAAA,MACD,MAAM,yBAAyB,iCAC7B,MAAM,MACR;AAAA,MACA,2BAA2B,MAAM,MAAiC;AAAA,MAClE,IAAI;AAAA,QACF,IAAI,MAAM,YAAY;AAAA,UACpB,MAAM,WAAW,MAAM,MAAM;AAAA,QAC/B,EAAO;AAAA,UACL,OAAO,KACL,+DACF;AAAA;AAAA,QAEF,OAAO,KAAK,4CAA4C;AAAA,QACxD,OAAO,SAAS;AAAA,QAChB,OAAO,MAAM,wCAAwC,OAAO,OAAO,GAAG;AAAA,QACtE,SACE,KACA,EAAE,QAAQ,SAAS,OAAO,0CAA0C,GACpE,GACF;AAAA,QACA,OAAO;AAAA;AAAA,MAGT,QAAQ,IAAI,wBAAwB,KAAK;AAAA,MACzC,IAAI,wBAAwB;AAAA,QAC1B,QAAQ,IAAI,wBAAwB;AAAA,MACtC,EAAO;AAAA,QACL,OAAO,QAAQ,IAAI;AAAA;AAAA,MAGrB,IAAI,MAAM,SAAS;AAAA,QACjB,MAAM,YAAY,MAAM,QAAQ,aAAa,CAAC;AAAA,QAC9C,MAAM,QAAQ,YAAY;AAAA,QAC1B,IAAI,CAAC,UAAU,SAAS;AAAA,UACtB,UAAU,UAAU,CAAC;AAAA,QACvB;AAAA,QACA,MAAM,UAAU,UAAU;AAAA,QAC1B,QAAQ,wBAAwB,KAAK;AAAA,QACrC,IAAI,QAAQ;AAAA,UACV,QAAQ,sBAAsB;AAAA,QAChC,EAAO;AAAA,UACL,OAAO,QAAQ;AAAA;AAAA,QAEjB,IAAI,gBAAgB;AAAA,UAClB,QAAQ,8BAA8B;AAAA,QACxC,EAAO;AAAA,UACL,OAAO,QAAQ;AAAA;AAAA,QAEjB,IAAI,wBAAwB;AAAA,UAC1B,QAAQ,wBAAwB;AAAA,QAClC,EAAO;AAAA,UACL,OAAO,QAAQ;AAAA;AAAA,QAGjB,IAAI,OAAO,MAAM,QAAQ,eAAe,YAAY;AAAA,UAClD,MAAM,QAAQ,WAAW,uBAAuB,UAAU,IAAI;AAAA,UAC9D,MAAM,QAAQ,WACZ,+BACA,kBAAkB,IACpB;AAAA,QACF;AAAA,QAEA,IAAI,OAAO,MAAM,QAAQ,gBAAgB,YAAY;AAAA,UACnD,MAAM,MAAM,QAAQ,YAAY,MAAM,QAAQ,SAAS;AAAA,YACrD,SAAS,KAAK,QAAQ;AAAA,UACxB,CAAC;AAAA,UACD,OAAO,KAAK,oDAAoD;AAAA,QAClE,EAAO;AAAA,UACL,OAAO,KACL,kFACF;AAAA;AAAA,MAEJ;AAAA,MAEA,IACE,MAAM,gBACN,OAAO,MAAM,aAAa,kBAAkB,YAC5C;AAAA,QACA,MAAM,MAAM,aAAa,cAAc,KAAK,MAAM;AAAA,MACpD,EAAO,SACL,MAAM,gBACN,CAAC,MAAM,aAAa,UAAU,KAC9B,OAAO,MAAM,aAAa,SAAS,YACnC;AAAA,QACA,MAAM,MAAM,aAAa,KAAK;AAAA,MAChC;AAAA,MAEA,IAAI,OAAO,WAAW,2BAA2B,YAAY;AAAA,QAC3D,UAAU,uBAAuB;AAAA,UAC/B,QAAQ,KAAK;AAAA,UACb;AAAA,UACA;AAAA,QACF,CAAC;AAAA,MACH;AAAA,MAMA,IAAI,qBAAqB,GAAG;AAAA,QAC1B,MAAM,yBAAyB,gBAC7B,MAAM,MACR;AAAA,QACA,MAAM,sBAAsB,MAAM,iCAAiC;AAAA,QAEnE,IAAI;AAAA,UACF,MAAM,SAAS,MAAM,cAAc,UAAU;AAAA,UAC7C,MAAM,UAAU,MAAM,SAAS;AAAA,UAC/B,IAAI,CAAC,QAAQ;AAAA,YACX,MAAM,IAAI,MAAM,iCAAiC;AAAA,UACnD;AAAA,UACA,IAAI,CAAC,SAAS;AAAA,YACZ,MAAM,IAAI,MAAM,sCAAsC;AAAA,UACxD;AAAA,UAEA,QAAQ,SAAS,eAAe,WAC9B,MAAM,4BAA4B;AAAA,UACpC,IAAI,QAAQ;AAAA,YACV,OAAO,KACL,qDAAqD,eACvD;AAAA,UACF;AAAA,UAEA,MAAM,cAAc,MAAM,sBAAsB,QAAQ;AAAA,YACtD;AAAA,YACA;AAAA,UACF,CAAC;AAAA,UAED,wBACE,MAAM,QACN,WACF;AAAA,UAEA,MAAM,WAAY,MAAM,OAAO,SAAS,CAAC;AAAA,UAIzC,SAAS,yBAAyB;AAAA,UACjC,MAAM,OAAmC,QAAQ;AAAA,UAClD,kBAAkB,KAAK;AAAA,UAEvB,IAAI,YAAY,KAAK,eAAe;AAAA,YAClC,QAAQ,IAAI,0BAA0B,YAAY,IAAI;AAAA,YACtD,MAAM,iBACJ,2BACA,YAAY,IAAI,aAClB;AAAA,UACF;AAAA,UACA,IAAI,YAAY,QAAQ,eAAe;AAAA,YACrC,QAAQ,IAAI,6BACV,YAAY,OAAO;AAAA,YACrB,MAAM,iBACJ,8BACA,YAAY,OAAO,aACrB;AAAA,UACF;AAAA,UAEA,IAAI,YAAY,KAAK;AAAA,YACnB,MAAM,iBAAiB,qBAAqB,OAAO;AAAA,UACrD;AAAA,UACA,IAAI,YAAY,QAAQ;AAAA,YACtB,MAAM,iBAAiB,wBAAwB,OAAO;AAAA,UACxD;AAAA,UAEA,MAAM,SAAW,MAAM,OAAmC,UACxD,CAAC;AAAA,UACH,MAAM,UAAU;AAAA,eACT,OAAO,WAAW,CAAC;AAAA,UAC1B;AAAA,UACA,IAAI,YAAY;AAAA,YAAK,QAAQ,MAAM;AAAA,UACnC,IAAI,YAAY;AAAA,YAAQ,QAAQ,SAAS;AAAA,UACzC,OAAO,UAAU;AAAA,UAChB,MAAM,OAAmC,SAAS;AAAA,UACnD,kBAAkB,KAAK;AAAA,UAEvB,OAAO,KACL,2CAA2C,OAAO,KAAK,WAAW,EAAE,KAAK,IAAI,6BAC/E;AAAA,UAEA,MAAM,YAAY,MAAM,iBACpB,MAAM,QAAQ,QAAQ,MAAM,eAAe,oBAAoB,CAAC,IAChE;AAAA,UACJ,IAAI,CAAC,WAAW;AAAA,YACd,OAAO,KACL,uGACF;AAAA,UACF;AAAA,UACA,OAAO,gBAAgB;AAAA,UACvB,IAAI;AAAA,YACF,MAAM,iCAAiC,mBAAmB;AAAA,YAC1D,OAAO,aAAa;AAAA,YACpB,OAAO,MACL,+CAA+C,OAC7C,WACF,GACF;AAAA;AAAA,UAGF,mBAAmB,MAAM,QAAQ,sBAAsB;AAAA,UACvD,IAAI;AAAA,YACF,kBAAkB,KAAK;AAAA,YACvB,OAAO,iBAAiB;AAAA,YACxB,OAAO,MACL,sDAAsD,OACpD,eACF,GACF;AAAA;AAAA,UAGF,OAAO,MACL,gDAAgD,OAC9C,cACF,GACF;AAAA;AAAA,MAEJ;AAAA,MAgCA,OAAO,KACL,sFACF;AAAA,MACA,SAAS,KAAK;AAAA,QACZ,QAAQ;AAAA,QACR,OAAO,KAAK;AAAA,QACZ,WAAW,KAAK;AAAA,QAChB;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH,EAAO;AAAA,MACL,SAAS,KAAK,EAAE,QAAQ,KAAK,OAAO,CAAC;AAAA;AAAA,IAEvC,OAAO;AAAA,EACT;AAAA,EAEA,IAAI,WAAW,SAAS,aAAa,qBAAqB;AAAA,IACxD,MAAM,SAAS,MAAM,cAAc,UAAU;AAAA,IAC7C,IAAI,CAAC,QAAQ;AAAA,MACX,cAAc,KAAK,gCAAgC,GAAG;AAAA,MACtD,OAAO;AAAA,IACT;AAAA,IACA,SAAS,KAAK,EAAE,IAAI,MAAM,QAAQ,MAAM,OAAO,WAAW,EAAE,CAAC;AAAA,IAC7D,OAAO;AAAA,EACT;AAAA,EAEA,IAAI,WAAW,UAAU,aAAa,qBAAqB;AAAA,IACzD,MAAM,SAAS,MAAM,cAAc,UAAU;AAAA,IAC7C,IAAI,CAAC,QAAQ;AAAA,MACX,cAAc,KAAK,gCAAgC,GAAG;AAAA,MACtD,OAAO;AAAA,IACT;AAAA,IAEA,MAAM,OAAO,MAAM,cAIhB,KAAK,GAAG;AAAA,IACX,IAAI,CAAC;AAAA,MAAM,OAAO;AAAA,IAElB,IAAI,CAAC,KAAK,WAAW,KAAK,GAAG;AAAA,MAC3B,cAAc,KAAK,uBAAuB;AAAA,MAC1C,OAAO;AAAA,IACT;AAAA,IAEA,IAAI;AAAA,IACJ,IAAI;AAAA,MACF,QAAQ,MAAM,OAAO,YAAY;AAAA,QAC/B,WAAW,KAAK;AAAA,QAChB,aAAa,KAAK;AAAA,QAClB,iBAAiB,KAAK;AAAA,MACxB,CAAC;AAAA,MACD,OAAO,KAAK;AAAA,MACZ,OAAO,MAAM,+BAA+B,OAAO,GAAG,GAAG;AAAA,MACzD,SACE,KACA,EAAE,IAAI,OAAO,OAAO,6BAA6B,OAAO,GAAG,IAAI,GAC/D,GACF;AAAA,MACA,OAAO;AAAA;AAAA,IAET,SAAS,KAAK,EAAE,IAAI,MAAM,MAAM,GAAG,GAAG;AAAA,IACtC,OAAO;AAAA,EACT;AAAA,EAEA,IACE,WAAW,UACX,SAAS,WAAW,oBAAoB,KACxC,SAAS,SAAS,YAAY,GAC9B;AAAA,IACA,MAAM,UAAU,eAAe,QAAQ;AAAA,IACvC,IAAI,CAAC,WAAW,CAAC,MAAM,cAAc;AAAA,MACnC,cAAc,KAAK,2CAA2C,GAAG;AAAA,MACjE,OAAO;AAAA,IACT;AAAA,IACA,IAAI;AAAA,IACJ,IAAI;AAAA,MACF,QAAQ,MAAM,MAAM,aAAa,QAAQ,OAAO;AAAA,MAChD,OAAO,KAAK;AAAA,MACZ,OAAO,MAAM,qCAAqC,OAAO,GAAG,GAAG;AAAA,MAC/D,SACE,KACA,EAAE,IAAI,OAAO,OAAO,2BAA2B,OAAO,GAAG,IAAI,GAC7D,GACF;AAAA,MACA,OAAO;AAAA;AAAA,IAET,SAAS,KAAK;AAAA,MACZ,IAAI;AAAA,MACJ;AAAA,MACA,WAAW,MAAM;AAAA,MACjB,QAAQ,MAAM,aAAa,UAAU;AAAA,IACvC,CAAC;AAAA,IACD,OAAO;AAAA,EACT;AAAA,EAEA,IACE,WAAW,UACX,SAAS,WAAW,oBAAoB,KACxC,SAAS,SAAS,WAAW,GAC7B;AAAA,IACA,MAAM,UAAU,eAAe,QAAQ;AAAA,IACvC,IAAI,CAAC,WAAW,CAAC,MAAM,cAAc;AAAA,MACnC,cAAc,KAAK,2CAA2C,GAAG;AAAA,MACjE,OAAO;AAAA,IACT;AAAA,IACA,MAAM,SAAS,MAAM,aAAa,UAAU;AAAA,IAC5C,IAAI,CAAC,QAAQ;AAAA,MACX,cAAc,KAAK,gCAAgC,GAAG;AAAA,MACtD,OAAO;AAAA,IACT;AAAA,IACA,IAAI;AAAA,MACF,IAAI,MAAM,aAAa,iBAAiB,MAAM,SAAS;AAAA,QACrD,MAAM,MAAM,aAAa,WAAW;AAAA,MACtC;AAAA,MACA,MAAM,OAAO,YAAY,OAAO;AAAA,MAChC,OAAO,KAAK;AAAA,MACZ,OAAO,MAAM,wCAAwC,OAAO,GAAG,GAAG;AAAA,MAClE,SACE,KACA,EAAE,IAAI,OAAO,OAAO,0BAA0B,OAAO,GAAG,IAAI,GAC5D,GACF;AAAA,MACA,OAAO;AAAA;AAAA,IAET,SAAS,KAAK,EAAE,IAAI,MAAM,SAAS,QAAQ,UAAU,CAAC;AAAA,IACtD,OAAO;AAAA,EACT;AAAA,EAEA,IACE,WAAW,UACX,SAAS,WAAW,oBAAoB,KACxC,SAAS,SAAS,UAAU,GAC5B;AAAA,IACA,MAAM,UAAU,eAAe,QAAQ;AAAA,IACvC,IAAI,CAAC,WAAW,CAAC,MAAM,cAAc;AAAA,MACnC,cAAc,KAAK,2CAA2C,GAAG;AAAA,MACjE,OAAO;AAAA,IACT;AAAA,IACA,IAAI;AAAA,IACJ,IAAI;AAAA,MACF,IAAI,MAAM,aAAa,iBAAiB,GAAG;AAAA,QACzC,MAAM,MAAM,aAAa,WAAW;AAAA,MACtC;AAAA,MACA,QAAQ,MAAM,MAAM,aAAa,QAAQ,OAAO;AAAA,MAChD,OAAO,KAAK;AAAA,MACZ,OAAO,MAAM,2BAA2B,OAAO,GAAG,GAAG;AAAA,MACrD,SACE,KACA,EAAE,IAAI,OAAO,OAAO,yBAAyB,OAAO,GAAG,IAAI,GAC3D,GACF;AAAA,MACA,OAAO;AAAA;AAAA,IAET,SAAS,KAAK;AAAA,MACZ,IAAI;AAAA,MACJ;AAAA,MACA,WAAW,MAAM;AAAA,MACjB,QAAQ,MAAM,aAAa,UAAU;AAAA,IACvC,CAAC;AAAA,IACD,OAAO;AAAA,EACT;AAAA,EAEA,IAAI,WAAW,UAAU,aAAa,yBAAyB;AAAA,IAC7D,IAAI,MAAM,cAAc;AAAA,MACtB,MAAM,MAAM,aAAa,WAAW;AAAA,IACtC;AAAA,IACA,MAAM,QAAS,MAAM,OAAO,SAAS,CAAC;AAAA,IAGtC,OAAO,MAAM;AAAA,IACZ,MAAM,OAAmC,QAAQ;AAAA,IAClD,0BAA0B,MAAM,QAAiB;AAAA,MAC/C,kBAAkB,EAAE,SAAS,QAAQ;AAAA,MACrC,gBAAgB;AAAA,QACd,YAAY;AAAA,UACV,QAAQ;AAAA,UACR,QAAQ;AAAA,QACV;AAAA,MACF;AAAA,MACA,aAAa,CAAC,WAAW,OAAO,SAAS,cAAc,KAAK;AAAA,IAC9D,CAAC;AAAA,IACD,2BAA2B,MAAM,MAAiC;AAAA,IAElE,IAAI;AAAA,MACF,IAAI,MAAM,YAAY;AAAA,QACpB,MAAM,WAAW,MAAM,MAAM;AAAA,MAC/B,EAAO;AAAA,QACL,OAAO,KACL,oEACF;AAAA;AAAA,MAEF,OAAO,SAAS;AAAA,MAChB,OAAO,MACL,6CAA6C,OAAO,OAAO,GAC7D;AAAA,MACA,SACE,KACA,EAAE,IAAI,OAAO,OAAO,yCAAyC,GAC7D,GACF;AAAA,MACA,OAAO;AAAA;AAAA,IAGT,OAAO,QAAQ,IAAI;AAAA,IACnB,OAAO,QAAQ,IAAI;AAAA,IAEnB,IAAI,MAAM,SAAS;AAAA,MACjB,MAAM,YAAY,MAAM,QAAQ,aAAa,CAAC;AAAA,MAC9C,MAAM,QAAQ,YAAY;AAAA,MAC1B,IAAI,CAAC,UAAU,SAAS;AAAA,QACtB,UAAU,UAAU,CAAC;AAAA,MACvB;AAAA,MACA,MAAM,UAAU,UAAU;AAAA,MAI1B,OAAO,QAAQ;AAAA,MACf,OAAO,QAAQ;AAAA,MACf,IAAI,OAAO,MAAM,QAAQ,gBAAgB,YAAY;AAAA,QACnD,MAAM,MAAM,QAAQ,YAAY,MAAM,QAAQ,SAAS;AAAA,UACrD,SAAS,KAAK,QAAQ;AAAA,QACxB,CAAC;AAAA,MACH,EAAO;AAAA,QACL,OAAO,KACL,8EACF;AAAA;AAAA,IAEJ;AAAA,IAEA,SAAS,KAAK,EAAE,IAAI,MAAM,QAAQ,eAAe,CAAC;AAAA,IAClD,OAAO;AAAA,EACT;AAAA,EAEA,OAAO;AAAA;AAAA,IA31BH,SAGA,gCAAgC,KAChC,8BAA8B,KAC9B,uBAAsB,cACtB,wBAAwB,QACxB;AAAA;AAAA,EAnIN;AAAA,EAMA;AAAA,EAMA;AAAA,EACA;AAAA,EAWA;AAAA,EAoGM,UACJ;AAAA,EAMI,iCAAiC;AAAA,IACrC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA;;;ACzIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACRA;AAAA,sCACE;AAAA;AAAA,gCAEA;AAAA;AAAA;AAMF,mBAAS;AA2IT,SAAS,4BAA4B,CACnC,QACA,gBACQ;AAAA,EACR,MAAM,MAAM,eAAe;AAAA,EAC3B,IAAI,OAAO,QAAQ,YAAY,IAAI,KAAK,GAAG;AAAA,IACzC,OAAO,IAAI,KAAK;AAAA,EAClB;AAAA,EACA,IAAI,OAAO,OAAO,QAAQ,YAAY,aAAa,KAAK;AAAA,IACtD,MAAM,MAAO,IAA8B;AAAA,IAC3C,IAAI,OAAO,QAAQ,YAAY,IAAI,KAAK,GAAG;AAAA,MACzC,OAAO,IAAI,KAAK;AAAA,IAClB;AAAA,EACF;AAAA,EACA,OAAO,QAAQ;AAAA;AAGjB,SAAS,cAAc,CAAC,SAAuD;AAAA,EAC7E,OAAO;AAAA;AAGF,SAAS,aAAY,CAC1B,SACsB;AAAA,EACtB,MAAM,sBAAsB,eAAe,OAAO;AAAA,EAClD,IAAI,OAAO,qBAAqB,eAAe,YAAY;AAAA,IACzD,OAAO;AAAA,EACT;AAAA,EAEA,MAAM,UAAU,oBAAoB,WAAW,YAAY;AAAA,EAC3D,OAAO,WAAW,OAAO,YAAY,WAChC,UACD;AAAA;AAGN,SAAS,6BAA6B,CAAC,SAGrC;AAAA,EACA,MAAM,mBAAmB,eAAe,OAAO;AAAA,EAC/C,OAAO;AAAA,IACL,gBACE,kBACE,kBAAkB,aAAa,6BAA6B,CAG9D,KACA,kBACE,kBAAkB,WAAW,SAAS,2BAGxC;AAAA,IACF,QACE,kBACE,kBAAkB,aAAa,qBAAqB,CAGtD,KACA,kBACE,kBAAkB,WAAW,SAAS,mBAGxC;AAAA,EACJ;AAAA;AAGK,SAAS,uBAAsB,CAAC,YAA6B;AAAA,EAClE,OACE,uBAAgC,cAAc,0BAA0B,KACxE;AAAA;AAIG,SAAS,kBAAkB,CAChC,QACA,SAIoB;AAAA,EACpB,4BAA2B,MAAiC;AAAA,EAE5D,MAAM,eAAe,kBAClB,OAA2C,OAAO,MACrD;AAAA,EACA,IAAI;AAAA,IAAc,OAAO;AAAA,EAEzB,IAAI,CAAC,kCAAiC,MAAiC,GAAG;AAAA,IAIxE;AAAA,EACF;AAAA,EAGA,MAAM,YAAY,kBAAkB,eAAe,uBAAuB,CAAC;AAAA,EAC3E,IAAI;AAAA,IAAW,OAAO;AAAA,EAGtB,MAAM,SAAS,kBAAkB,QAAQ,IAAI,qBAAqB;AAAA,EAClE,IAAI;AAAA,IAAQ,OAAO;AAAA,EAGnB,MAAM,oBAAoB,kBACxB,SAAS,aAAa,uBAAuB,CAC/C;AAAA,EACA,IAAI;AAAA,IAAmB,OAAO;AAAA,EAG9B,MAAM,aAAa,kBACjB,SAAS,WAAW,SAAS,qBAC/B;AAAA,EACA,IAAI;AAAA,IAAY,OAAO;AAAA,EAEvB;AAAA;AAGK,SAAS,8BAA8B,CAC5C,QACA,SACyB;AAAA,EACzB,4BAA2B,MAAiC;AAAA,EAC5D,MAAM,eACJ,OAAO,SAAS,OAAO,OAAO,UAAU,WACnC,OAAO,QACR;AAAA,EACN,MAAM,UAAU,kCACd,MACF;AAAA,EACA,MAAM,SAAS,mBAAmB,QAAQ,OAAO;AAAA,EACjD,MAAM,YAAY,cAAa,OAAO;AAAA,EACtC,MAAM,gBAAgB,QAAQ,WAAW,kBAAkB,CAAC;AAAA,EAC5D,MAAM,YAAY,QAAQ,MAAM;AAAA,EAChC,MAAM,oBAAoB,8BAA8B,OAAO;AAAA,EAC/D,MAAM,uBAAuB,iBAAiB;AAAA,EAE9C,OAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,WAAW,iBAAiB;AAAA,IAC5B;AAAA,IACA;AAAA,IACA,gBAAgB,uBACX,kBAAkB,WAAW,oBAAoB,CAAC,KACnD,kBAAkB,iBAClB;AAAA,IACJ,QAAQ,uBACH,kBAAkB,WAAW,YAAY,CAAC,KAC3C,kBAAkB,SAClB;AAAA,EACN;AAAA;AAUF,SAAS,kBAAkB,CAAC,OAA+B;AAAA,EACzD,IAAI,OAAO,UAAU,YAAY,OAAO,SAAS,KAAK,GAAG;AAAA,IACvD,OAAO;AAAA,EACT;AAAA,EACA,IAAI,OAAO,UAAU,UAAU;AAAA,IAC7B,MAAM,UAAU,MAAM,KAAK;AAAA,IAC3B,IAAI,CAAC;AAAA,MAAS,OAAO;AAAA,IACrB,MAAM,SAAS,OAAO,WAAW,OAAO;AAAA,IACxC,OAAO,OAAO,SAAS,MAAM,IAAI,SAAS;AAAA,EAC5C;AAAA,EACA,OAAO;AAAA;AAGT,eAAe,yBAAyB,CACtC,SACA,QACwB;AAAA,EACxB,MAAM,WAAW,MAAM,MAAM,GAAG,2BAA2B;AAAA,IACzD,SAAS;AAAA,MACP,QAAQ;AAAA,MACR,eAAe,UAAU;AAAA,IAC3B;AAAA,IACA,UAAU;AAAA,IACV,QAAQ,YAAY,QAAQ,GAAM;AAAA,EACpC,CAAC;AAAA,EAED,IAAI,SAAS,UAAU,OAAO,SAAS,SAAS,KAAK;AAAA,IACnD,MAAM,IAAI,MACR,iEACF;AAAA,EACF;AAAA,EAEA,MAAM,iBAAkB,MAAM,SAAS,KAAK,EAAE,MAAM,CAAC,QAAiB;AAAA,IACpE,QAAQ,KACN,oEACA,GACF;AAAA,IACA,OAAO,CAAC;AAAA,GACT;AAAA,EAMD,IAAI,SAAS,WAAW,KAAK;AAAA,IAC3B,MAAM,IAAI,8BACR,6BAA6B,KAAK,cAAc,CAClD;AAAA,EACF;AAAA,EAEA,IAAI,CAAC,SAAS,IAAI;AAAA,IAChB,MAAM,IAAI,MACR,6BAA6B,SAAS,QAAQ,cAAc,CAC9D;AAAA,EACF;AAAA,EAEA,MAAM,UACJ,mBAAmB,eAAe,OAAO,KACzC,mBAAmB,eAAe,MAAM,OAAO;AAAA,EAEjD,OAAO;AAAA;AAWT,SAAS,eAAe,CAAC,SAAuC;AAAA,EAC9D,OAAO;AAAA,IACL,WAAW;AAAA,IACX;AAAA,IACA,KAAK,UAAU;AAAA,IACf,UAAU,UAAU;AAAA,IACpB,UAAU;AAAA,EACZ;AAAA;AAGF,eAAsB,iBAAiB,CACrC,QACA,SAC+B;AAAA,EAC/B,MAAM,WAAW,+BAA+B,QAAQ,OAAO;AAAA,EAC/D,IAAI,uBAAsC;AAAA,EAC1C,IAAI,kCAAkC;AAAA,EAEtC,IAAI,CAAC,SAAS,WAAW;AAAA,IACvB,OAAO,EAAE,SAAS,MAAM,WAAW,MAAM;AAAA,EAC3C;AAAA,EAEA,MAAM,cAAc,SAAS,WAAW,YAAY;AAAA,EACpD,IAAI,SAAS,iBAAiB,OAAO,aAAa,QAAQ,YAAY;AAAA,IACpE,IAAI;AAAA,MACF,MAAM,iBAAkB,MAAM,YAAY,IAAI,kBAAkB;AAAA,MAIhE,MAAM,aACJ,mBAAmB,gBAAgB,OAAO,KAC1C,mBAAmB,gBAAgB,MAAM,OAAO;AAAA,MAElD,IAAI,OAAO,eAAe,UAAU;AAAA,QAClC,OAAO,gBAAgB,UAAU;AAAA,MACnC;AAAA,MAEA,kCAAkC;AAAA,MAClC,QAAO,MACL,4DAA4D,KAAK,UAAU,cAAc,GAC3F;AAAA,MACA,OAAO,KAAK;AAAA,MACZ,MAAM,MAAM,eAAe,QAAQ,IAAI,UAAU;AAAA,MACjD,uBAAuB;AAAA,MACvB,QAAO,MACL,uDAAuD,KACzD;AAAA;AAAA,EAEJ;AAAA,EAEA,IAAI,CAAC,SAAS,QAAQ;AAAA,IACpB,OAAO;AAAA,MACL,SAAS;AAAA,MACT,WAAW,SAAS;AAAA,MACpB,OACE,yBACC,kCACG,wBACA;AAAA,IACR;AAAA,EACF;AAAA,EAEA,MAAM,kBAAkB,wBAAuB,OAAO,OAAO,OAAO;AAAA,EACpE,MAAM,mBAAmB,MAAM,qBAAqB,eAAe;AAAA,EACnE,IAAI,kBAAkB;AAAA,IACpB,OAAO;AAAA,MACL,SAAS;AAAA,MACT,WAAW;AAAA,MACX,OAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEA,IAAI;AAAA,IACF,MAAM,UAAU,MAAM,0BACpB,iBACA,SAAS,MACX;AAAA,IAEA,IAAI,OAAO,YAAY,UAAU;AAAA,MAC/B,OAAO;AAAA,QACL,SAAS;AAAA,QACT,WAAW;AAAA,QACX,OAAO;AAAA,MACT;AAAA,IACF;AAAA,IAEA,OAAO,gBAAgB,OAAO;AAAA,IAC9B,OAAO,KAAK;AAAA,IACZ,IAAI,eAAe,+BAA+B;AAAA,MAChD,QAAO,MAAM,qCAAqC,IAAI,SAAS;AAAA,MAC/D,OAAO;AAAA,QACL,SAAS;AAAA,QACT,WAAW;AAAA,QACX,cAAc;AAAA,QACd,OAAO,IAAI;AAAA,QACX,UAAU;AAAA,MACZ;AAAA,IACF;AAAA,IACA,MAAM,MAAM,eAAe,QAAQ,IAAI,UAAU;AAAA,IACjD,QAAO,MAAM,wDAAwD,KAAK;AAAA,IAC1E,OAAO;AAAA,MACL,SAAS;AAAA,MACT,WAAW;AAAA,MACX,OAAO;AAAA,IACT;AAAA;AAAA;AAIJ,eAAsB,qBAAqB,CACzC,WACe;AAAA,EACf,IAAI,CAAC,WAAW;AAAA,IACd;AAAA,EACF;AAAA,EAEA,MAAM,OAAO,IAAI;AAAA,EACjB,WAAW,cAAc,0BAA0B;AAAA,IACjD,MAAM,SAAS,UAAU;AAAA,IACzB,IAAI,OAAO,WAAW,cAAc,KAAK,IAAI,MAAM,GAAG;AAAA,MACpD;AAAA,IACF;AAAA,IAEA,KAAK,IAAI,MAAM;AAAA,IACf,IAAI;AAAA,MACF,MAAM,OAAO,KAAK,SAAS;AAAA,MAE3B;AAAA,MACA,OAAO,KAAK;AAAA,MACZ,QAAO,KACL,kDAAkD,eAChD,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG,GAEnD;AAAA;AAAA,EAEJ;AAAA;AAGF,SAAS,aAAa,GAAS;AAAA,EAC7B,WAAW,OAAO,gBAAgB;AAAA,IAChC,OAAO,QAAQ,IAAI;AAAA,EACrB;AAAA,EACA,kBAAkB;AAAA,EAClB,yBAAyB;AAAA;AAG3B,eAAe,sBAAsB,CACnC,SACe;AAAA,EACf,MAAM,mBAAmB,eAAe,OAAO;AAAA,EAC/C,IAAI,CAAC,kBAAkB;AAAA,IACrB;AAAA,EACF;AAAA,EAEA,MAAM,kBAAkB,iBAAiB,UAAU,WAAW,CAAC;AAAA,EAC/D,MAAM,cAAc,KAAK,gBAAgB;AAAA,EACzC,WAAW,OAAO,2BAA2B;AAAA,IAC3C,OAAO,YAAY;AAAA,EACrB;AAAA,EACA,iBAAiB,UAAU,UAAU;AAAA,EAErC,IACE,iBAAiB,UAAU,YAC3B,OAAO,iBAAiB,UAAU,aAAa,UAC/C;AAAA,IACA,WAAW,OAAO,4BAA4B;AAAA,MAC5C,OAAO,iBAAiB,UAAU,SAAS;AAAA,IAC7C;AAAA,EACF;AAAA,EAEA,IAAI,OAAO,iBAAiB,eAAe,YAAY;AAAA,IACrD,WAAW,OAAO,4BAA4B;AAAA,MAC5C,IAAI;AAAA,QACF,iBAAiB,WAAW,KAAK,IAAI;AAAA,QACrC,OAAO,KAAK;AAAA,QACZ,QAAO,KACL,sDAAsD,QACpD,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG,GAEnD;AAAA;AAAA,IAEJ;AAAA,EACF;AAAA,EAEA,IAAI,OAAO,iBAAiB,gBAAgB,YAAY;AAAA,IACtD,IAAI;AAAA,MACF,MAAM,iBAAiB,YAAY,iBAAiB,SAAS;AAAA,QAC3D,SAAS,KAAK,YAAY;AAAA,MAC5B,CAAC;AAAA,MACD,OAAO,KAAK;AAAA,MACZ,QAAO,KACL,mEACE,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG,GAEnD;AAAA;AAAA,EAEJ;AAAA;AAGF,eAAsB,yBAAyB,CAAC,MAK9B;AAAA,EAChB,QAAQ,eAAe,MAAM,QAAQ,SAAS,eAAe;AAAA,EAE7D,IAAI,4BAA4B,GAAG;AAAA,IACjC,MAAM,IAAI,OAAO;AAAA,IACjB,QAAO,MACL,kEAAkE,KAAK,UAAU,0BAA0B,CAAC,CAAC,GAC/G;AAAA,EACF;AAAA,EAEA,IAAI,OAAO,cAAc,eAAe,YAAY;AAAA,IAClD,IAAI;AAAA,MACF,MAAM,aAAa,WAAW;AAAA,MAC9B,OAAO,KAAK;AAAA,MACZ,QAAO,KACL,0DACE,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG,GAEnD;AAAA;AAAA,EAEJ;AAAA,EAEA,MAAM,sBAAsB,cAAa,OAAO,CAAC;AAAA,EAEjD,MAAM,YAAY,KAAM,OAAO,SAAS,CAAC,EAAG;AAAA,EAC5C,OAAO,UAAU;AAAA,EACjB,OAAO,QAAQ;AAAA,EACf,0BAA0B,QAAuB;AAAA,IAC/C,kBAAkB,EAAE,SAAS,QAAQ;AAAA,IACrC,gBAAgB;AAAA,MACd,YAAY;AAAA,QACV,QAAQ;AAAA,QACR,QAAQ;AAAA,MACV;AAAA,IACF;AAAA,IACA,aAAa,CAAC,WAAW,OAAO,SAAS,cAAc,KAAK;AAAA,EAC9D,CAAC;AAAA,EACD,4BAA2B,MAAiC;AAAA,EAE5D,IAAI;AAAA,IACF,aAAa,MAAM;AAAA,IACnB,IAAI,4BAA4B,GAAG;AAAA,MACjC,MAAM,IAAI,OAAO;AAAA,MACjB,QAAO,MACL,0EAA0E,KAAK,UAAU,0BAA0B,CAAC,CAAC,GACvH;AAAA,IACF;AAAA,IACA,OAAO,KAAK;AAAA,IACZ,QAAO,KACL,6DACE,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG,GAEnD;AAAA;AAAA,EAGF,cAAc;AAAA,EACd,MAAM,uBAAuB,OAAO;AAAA,EAEpC,IAAI,4BAA4B,GAAG;AAAA,IACjC,QAAO,MACL,qGACF;AAAA,EACF;AAAA;AASK,SAAS,6BAA6B,CAC3C,QACS;AAAA,EACT,OACE,OAAO,WAAW,YAAY,kCAAkC,IAAI,MAAM;AAAA;AAAA,IA7nBxE,6BAA6B,oCACtB,oBACX,4DAEI,gBAoBA,2BAkBA,4BAMA,0BAwEO,+BAwOP,sBAGA,2BAiRA;AAAA;AAAA,EAnoBN;AAAA,EACA;AAAA,EAQA;AAAA,EAUM,iBAAiB;AAAA,IACrB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EAEM,4BAA4B;AAAA,IAChC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EAEM,6BAA6B;AAAA,IACjC;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EAEM,2BAA2B;AAAA,IAC/B;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EA+Da,gCAAN,MAAM,sCAAsC,MAAM;AAAA,IACrC,OAAO;AAAA,IACzB,WAAW,CAAC,UAAU,oCAAoC;AAAA,MACxD,MAAM,OAAO;AAAA;AAAA,EAEjB;AAAA,EAmOM,uBAAuB,OAC3B,QAAQ,IAAI,8BAA8B,KAC5C;AAAA,EACM,4BAA4B,OAChC,QAAQ,IAAI,mCAAmC,KACjD;AAAA,EA+QM,oCAAyD,IAAI,IAAI;AAAA,IACrE;AAAA,IACA;AAAA,EACF,CAAC;AAAA;;;AC3oBD;AAAA;AAAA;AAAA;AAAA;AAkCA,eAAsB,+BAA+B,CACnD,KACA,KACA,UACA,QACA,OACkB;AAAA,EAClB,IACE,WAAW,UACX,aAAa,2CACb;AAAA,IACA,MAAM,UAAU,yBAAyB,KAAK;AAAA,IAC9C,IAAI,CAAC,SAAS;AAAA,MACZ,cAAc,KAAK,4CAA4C,GAAG;AAAA,MAClE,OAAO;AAAA,IACT;AAAA,IACA,MAAM,OAAO,MAAM,cAAa,KAAK,GAAG;AAAA,IACxC,IAAI,CAAC;AAAA,MAAM,OAAO;AAAA,IAClB,MAAM,SAAS,wCAAwC,UAAU,IAAI;AAAA,IACrE,IAAI,CAAC,OAAO,SAAS;AAAA,MACnB,cACE,KACA,OAAO,MAAM,OAAO,IAAI,WAAW,6BACnC,GACF;AAAA,MACA,OAAO;AAAA,IACT;AAAA,IACA,MAAM,oBAAoB,KAAK,MAC7B,QAAQ,2BACN,OAAO,IACT,CACF;AAAA,IACA,OAAO;AAAA,EACT;AAAA,EAEA,IAAI,WAAW,UAAU,aAAa,gCAAgC;AAAA,IACpE,MAAM,UAAU,yBAAyB,KAAK;AAAA,IAC9C,IAAI,CAAC,SAAS;AAAA,MACZ,cAAc,KAAK,4CAA4C,GAAG;AAAA,MAClE,OAAO;AAAA,IACT;AAAA,IACA,MAAM,OAAO,MAAM,cAAa,KAAK,GAAG;AAAA,IACxC,IAAI,CAAC;AAAA,MAAM,OAAO;AAAA,IAClB,MAAM,SAAS,yCAAyC,UAAU,IAAI;AAAA,IACtE,IAAI,CAAC,OAAO,SAAS;AAAA,MACnB,cACE,KACA,OAAO,MAAM,OAAO,IAAI,WAAW,oCACnC,GACF;AAAA,MACA,OAAO;AAAA,IACT;AAAA,IACA,MAAM,oBAAoB,KAAK,MAC7B,QAAQ,4BACN,OAAO,IACT,CACF;AAAA,IACA,OAAO;AAAA,EACT;AAAA,EAEA,MAAM,YAAY,mDAAmD,KACnE,QACF;AAAA,EACA,IAAI,WAAW,UAAU,WAAW;AAAA,IAClC,MAAM,UAAU,yBAAyB,KAAK;AAAA,IAC9C,IAAI,CAAC,SAAS;AAAA,MACZ,cAAc,KAAK,4CAA4C,GAAG;AAAA,MAClE,OAAO;AAAA,IACT;AAAA,IACA,MAAM,cAAc,mBAAmB,UAAU,EAAE;AAAA,IACnD,MAAM,OAAO,MAAM,cAAa,KAAK,GAAG;AAAA,IACxC,IAAI,CAAC;AAAA,MAAM,OAAO;AAAA,IAClB,MAAM,SAAS,sCAAsC,UAAU,IAAI;AAAA,IACnE,IAAI,CAAC,OAAO,SAAS;AAAA,MACnB,cACE,KACA,OAAO,MAAM,OAAO,IAAI,WAAW,wBACnC,GACF;AAAA,MACA,OAAO;AAAA,IACT;AAAA,IACA,MAAM,oBAAoB,KAAK,MAC7B,QAAQ,2BACN,aACA,OAAO,IACT,CACF;AAAA,IACA,OAAO;AAAA,EACT;AAAA,EAEA,OAAO;AAAA;AAGT,SAAS,wBAAwB,CAC/B,OACmC;AAAA,EACnC,MAAM,UACJ,MAAM,SAAS,aAAa,iBAAiB,KAC7C,MAAM,SAAS,aAAa,iBAAiB,KAC7C,MAAM,SAAS,aAAa,gBAAgB;AAAA,EAC9C,IAAI,CAAC,WAAW,OAAO,YAAY;AAAA,IAAU,OAAO;AAAA,EACpD,MAAM,YAAY;AAAA,EAClB,IACE,OAAO,UAAU,+BAA+B,cAChD,OAAO,UAAU,gCAAgC,cACjD,OAAO,UAAU,+BAA+B,YAChD;AAAA,IACA,OAAO;AAAA,EACT;AAAA,EACA,OAAO;AAAA;AAGT,eAAe,aAAY,CACzB,KACA,KACyC;AAAA,EACzC,MAAM,YAAa,IAAkD;AAAA,EACrE,IACE,aACA,OAAO,cAAc,YACrB,CAAC,MAAM,QAAQ,SAAS,GACxB;AAAA,IACA,OAAO;AAAA,EACT;AAAA,EAEA,MAAM,SAAmB,CAAC;AAAA,EAC1B,iBAAiB,SAAS,KAAK;AAAA,IAC7B,OAAO,KAAK,OAAO,UAAU,WAAW,OAAO,KAAK,KAAK,IAAI,KAAK;AAAA,EACpE;AAAA,EACA,MAAM,MAAM,OAAO,OAAO,MAAM,EAAE,SAAS,MAAM,EAAE,KAAK;AAAA,EACxD,IAAI,CAAC;AAAA,IAAK,OAAO,CAAC;AAAA,EAClB,IAAI;AAAA,EACJ,IAAI;AAAA,IACF,SAAS,KAAK,MAAM,GAAG;AAAA,IACvB,MAAM;AAAA,IACN,cAAc,KAAK,qBAAqB,GAAG;AAAA,IAC3C,OAAO;AAAA;AAAA,EAET,IAAI,CAAC,UAAU,OAAO,WAAW,YAAY,MAAM,QAAQ,MAAM,GAAG;AAAA,IAClE,cAAc,KAAK,qBAAqB,GAAG;AAAA,IAC3C,OAAO;AAAA,EACT;AAAA,EACA,OAAO;AAAA;AAGT,eAAe,mBAAmB,CAChC,KACA,IACe;AAAA,EACf,IAAI;AAAA,IACF,SAAS,KAAK,MAAM,GAAG,CAAC;AAAA,IACxB,OAAO,OAAO;AAAA,IACd,MAAM,SACJ,OAAQ,OAAoC,eAAe,WACtD,MAAiC,aAClC;AAAA,IACN,cACE,KACA,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,GACrD,MACF;AAAA;AAAA;AAAA;;;AClMJ;AAAA,sCACE;AAAA,gCACA;AAAA;AAUF,mBAA4B;AA0E5B,eAAe,iBAAiB,CAC9B,KACkC;AAAA,EAClC,MAAM,YAAa,IAAkD;AAAA,EACrE,IACE,aACA,OAAO,cAAc,YACrB,CAAC,MAAM,QAAQ,SAAS,GACxB;AAAA,IACA,OAAO;AAAA,EACT;AAAA,EAEA,MAAM,SAAmB,CAAC;AAAA,EAC1B,iBAAiB,SAAS,KAAK;AAAA,IAC7B,OAAO,KAAK,OAAO,UAAU,WAAW,OAAO,KAAK,KAAK,IAAI,KAAK;AAAA,EACpE;AAAA,EAEA,MAAM,UAAU,OAAO,OAAO,MAAM,EAAE,SAAS,MAAM,EAAE,KAAK;AAAA,EAC5D,IAAI,CAAC,SAAS;AAAA,IACZ,OAAO,CAAC;AAAA,EACV;AAAA,EAEA,MAAM,SAAS,KAAK,MAAM,OAAO;AAAA,EACjC,IAAI,CAAC,UAAU,OAAO,WAAW,YAAY,MAAM,QAAQ,MAAM,GAAG;AAAA,IAClE,MAAM,IAAI,MAAM,mBAAmB;AAAA,EACrC;AAAA,EACA,OAAO;AAAA;AAmBT,SAAS,mBAAkB,CAAC,UAA6B;AAAA,EACvD,OAAO,SAAS,UAAU,OAAO,SAAS,SAAS;AAAA;AAGrD,SAAS,wBAAuB,GAAkB;AAAA,EAChD,OAAO;AAAA,IACL,SAAS,MAAM;AAAA,IACf,SAAS,MAAM;AAAA,EACjB;AAAA;AAGF,SAAS,iBAAgB,CAAC,MAKR;AAAA,EAChB,OACE,KAAK,SAAS,+BAA+B,IAAI,KACjD,yBAAwB;AAAA;AAI5B,eAAe,qBAAqB,CAClC,WACA,SACmB;AAAA,EACnB,OAAO,MACL,GAAG,gCAAgC,mBAAmB,SAAS,KAC/D;AAAA,IACE,UAAU;AAAA,IACV,QAAQ,YAAY,QAAQ,4BAA2B;AAAA,EACzD,CACF;AAAA;AAGF,eAAe,uBAAuB,CAAC,MAYrB;AAAA,EAChB,IACE,KAAK,qBAAqB,aAC1B,KAAK,qBAAqB,sBAC1B;AAAA,IACA,QAAO,KACL,gGACF;AAAA,IACA;AAAA,EACF;AAAA,EAEA,4BAA2B,KAAK,MAAM,MAAiC;AAAA,EACvE,MAAM,UAAU,KAAK,MAAM;AAAA,EAC3B,MAAM,YAAY,cAAa,OAAO;AAAA,EACtC,MAAM,sBAAsB,SAAS;AAAA,EAErC,MAAM,QAAQ,KAAM,KAAK,MAAM,OAAO,SAAS,CAAC,EAAG;AAAA,EAKnD,MAAM,SAAS,KAAK;AAAA,EACpB,MAAM,yBAAyB,kCAC7B,KAAK,MAAM,MACb;AAAA,EAEA,KAAK,MAAM,OAAO,QAAQ;AAAA,EAC1B,KAAK,SAAS,0BAA0B,KAAK,MAAM,QAAQ;AAAA,IACzD,gBAAgB;AAAA,MACd,YAAY;AAAA,QACV,QAAQ;AAAA,QACR,QAAQ;AAAA,MACV;AAAA,IACF;AAAA,EACF,CAAC;AAAA,EACD,4BAA2B,KAAK,MAAM,MAAiC;AAAA,EAEvE,IAAI;AAAA,IACF,KAAK,SAAS,gBAAgB,KAAK,MAAM,MAAM;AAAA,IAC/C,QAAO,KAAK,kDAAkD;AAAA,IAC9D,QAAO,KACL,gFACE,2DACJ;AAAA,IACA,OAAO,SAAS;AAAA,IAChB,QAAO,MACL,yDACE,mBAAmB,QAAQ,QAAQ,UAAU,OAAO,OAAO,GAE/D;AAAA;AAAA,EAGF,kBAAkB;AAAA,EAClB,QAAQ,IAAI,wBAAwB,KAAK;AAAA,EACzC,IAAI,wBAAwB;AAAA,IAC1B,QAAQ,IAAI,wBAAwB;AAAA,EACtC,EAAO;AAAA,IACL,OAAO,QAAQ,IAAI;AAAA;AAAA,EAErB,yBAAyB;AAAA,EAEzB,MAAM,eAAe,KAAK,MACvB;AAAA,EACH,IAAI,gBAAgB,OAAO,aAAa,kBAAkB,YAAY;AAAA,IACpE,MAAM,aAAa,cAAc,KAAK,MAAM;AAAA,EAC9C,EAAO,SACL,gBACA,CAAC,aAAa,UAAU,KACxB,OAAO,aAAa,SAAS,YAC7B;AAAA,IACA,MAAM,aAAa,KAAK;AAAA,EAC1B;AAAA,EAEA,IAAI,OAAO,WAAW,2BAA2B,YAAY;AAAA,IAC3D,UAAU,uBAAuB;AAAA,MAC/B,QAAQ,KAAK;AAAA,MACb,gBAAgB,KAAK;AAAA,MACrB,QAAQ,KAAK;AAAA,IACf,CAAC;AAAA,EACH;AAAA,EACA,MAAM,eAAgB,SAAS,WAAW,6BAA6B,KACrE,SAAS,WAAW,6BAA6B,KACjD,SAAS,WACP,0BACF;AAAA,EACF,IAAI,OAAO,cAAc,0BAA0B,YAAY;AAAA,IAC7D,MAAM,aAAa,sBAAsB;AAAA,EAC3C;AAAA,EAEA,IAAI,CAAC,WAAW,OAAO,QAAQ,gBAAgB,YAAY;AAAA,IACzD;AAAA,EACF;AAAA,EAEA,IAAI;AAAA,IACF,MAAM,cAAmC;AAAA,SACnC,QAAQ,UAAU,WAAW,CAAC;AAAA,MAClC,uBAAuB,KAAK;AAAA,IAC9B;AAAA,IACA,IAAI,KAAK,QAAQ;AAAA,MACf,YAAY,sBAAsB,KAAK;AAAA,MACvC,YAAY,wBAAwB,KAAK;AAAA,IAC3C,EAAO;AAAA,MACL,OAAO,YAAY;AAAA,MACnB,OAAO,YAAY;AAAA;AAAA,IAErB,IAAI,KAAK,gBAAgB;AAAA,MACvB,YAAY,8BAA8B,KAAK;AAAA,MAC/C,YAAY,uBAAuB,KAAK;AAAA,IAC1C,EAAO;AAAA,MACL,OAAO,YAAY;AAAA,MACnB,OAAO,YAAY;AAAA;AAAA,IAErB,IAAI,wBAAwB;AAAA,MAC1B,YAAY,wBAAwB;AAAA,IACtC,EAAO;AAAA,MACL,OAAO,YAAY;AAAA;AAAA,IAErB,QAAQ,UAAU,UAAU;AAAA,IAC5B,IAAI,OAAO,QAAQ,eAAe,YAAY;AAAA,MAC5C,QAAQ,WAAW,uBAAuB,KAAK,UAAU,IAAI;AAAA,MAC7D,QAAQ,WAAW,yBAAyB,KAAK,UAAU,IAAI;AAAA,MAC/D,QAAQ,WACN,+BACA,KAAK,kBAAkB,IACzB;AAAA,MACA,QAAQ,WAAW,wBAAwB,KAAK,kBAAkB,IAAI;AAAA,IACxE;AAAA,IACA,MAAM,QAAQ,YAAY,QAAQ,SAAS;AAAA,MACzC,SAAS,KAAK,YAAY;AAAA,IAC5B,CAAC;AAAA,IACD,OAAO,KAAK;AAAA,IAEZ,QAAO,KACL,+DAA+D,OAC7D,GACF,GACF;AAAA;AAAA;AAIJ,SAAS,qBAAqB,CAAC,OAA4C;AAAA,EACzE,OAAO;AAAA,OACF;AAAA,OACA,MAAM;AAAA,EACX;AAAA;AAGF,SAAS,kBAAkB,CACzB,SACA,KACe;AAAA,EACf,MAAM,QAAQ,SAAS,WAAW,GAAG;AAAA,EACrC,IAAI,OAAO,UAAU;AAAA,IAAU,OAAO;AAAA,EACtC,MAAM,UAAU,MAAM,KAAK;AAAA,EAC3B,OAAO,UAAU,UAAU;AAAA;AAG7B,SAAS,iBAAiB,CACxB,OACA,UAC2B;AAAA,EAC3B,OAAO;AAAA,OACF;AAAA,IACH,YAAY,MAAM,SAAS,gBAAgB,MAAM,MAAM;AAAA,IACvD,qBAAqB,SAAS;AAAA,EAChC;AAAA;AAGF,eAAsB,iBAAgB,CACpC,KACA,KACA,UACA,QACA,OACkB;AAAA,EAClB,MAAM,WAAW,sBAAsB,KAAK;AAAA,EAE5C,MAAM,yBAAyB,MAAM,gCACnC,KACA,KACA,UACA,QACA,EAAE,SAAS,MAAM,QAAQ,CAC3B;AAAA,EACA,IAAI,wBAAwB;AAAA,IAC1B,OAAO;AAAA,EACT;AAAA,EAEA,IAAI,WAAW,SAAS,aAAa,2BAA2B;AAAA,IAC9D,MAAM,eAAgB,MAAM,SAAS,WACnC,6BACF,KACE,MAAM,SAAS,WAAW,6BAA6B,KACvD,MAAM,SAAS,WACb,0BACF;AAAA,IAEF,IAAI,OAAO,cAAc,mBAAmB,YAAY;AAAA,MACtD,SAAS,KAAK;AAAA,QACZ,WAAW;AAAA,QACX,QAAQ;AAAA,QACR,QACE;AAAA,MACJ,CAAC;AAAA,MACD,OAAO;AAAA,IACT;AAAA,IAEA,IAAI;AAAA,MACF,MAAM,OAAO,aAAa,eAAe;AAAA,MACzC,SAAS,KAAK;AAAA,QACZ,WAAW;AAAA,WACR;AAAA,QACH,WAAW,+BAA+B;AAAA,UACxC,cAAc,SAAS,sBACrB,MAAM,OAAO,OAAO,OACtB;AAAA,UACA,WAAW,KAAK;AAAA,QAClB,CAAC;AAAA,QACD,KAAK,+BAA+B;AAAA,UAClC,eACE,mBAAmB,MAAM,SAAS,8BAA8B,KAChE,QAAQ,IAAI,gCACZ,mBAAmB,MAAM,SAAS,uBAAuB,KACzD,QAAQ,IAAI;AAAA,UACd,WACE,mBACE,MAAM,SACN,qCACF,KACA,QAAQ,IAAI,uCACZ,mBAAmB,MAAM,SAAS,uBAAuB,KACzD,QAAQ,IAAI;AAAA,UACd,aACE,mBACE,MAAM,SACN,uCACF,KACA,QAAQ,IAAI,yCACZ,mBAAmB,MAAM,SAAS,yBAAyB,KAC3D,QAAQ,IAAI;AAAA,UACd,WACE,mBACE,MAAM,SACN,yCACF,KAAK,QAAQ,IAAI;AAAA,QACrB,CAAC;AAAA,MACH,CAAC;AAAA,MACD,OAAO,OAAO;AAAA,MACd,SAAS,KAAK;AAAA,QACZ,WAAW;AAAA,QACX,QAAQ;AAAA,QACR,QAAQ,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,MAC/D,CAAC;AAAA;AAAA,IAEH,OAAO;AAAA,EACT;AAAA,EAEA,IAAI,WAAW,UAAU,aAAa,yBAAyB;AAAA,IAE7D;AAAA,IACA,IAAI;AAAA,MACF,MAAM,0BAA0B;AAAA,QAC9B,cAAc,MAAM;AAAA,QACpB,QAAQ,MAAM;AAAA,QACd,SAAS,MAAM;AAAA,QACf,YAAY,SAAS;AAAA,MACvB,CAAC;AAAA,MACD,OAAO,KAAK;AAAA,MACZ,MAAM,UAAU,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;AAAA,MAC/D,QAAO,MAAM,8BAA8B,SAAS;AAAA,MACpD,SAAS,KAAK,EAAE,IAAI,OAAO,OAAO,QAAQ,GAAG,GAAG;AAAA,MAChD,OAAO;AAAA;AAAA,IAET,SAAS,KAAK,EAAE,IAAI,MAAM,QAAQ,eAAe,CAAC;AAAA,IAClD,OAAO;AAAA,EACT;AAAA,EAKA,IAAI,WAAW,UAAU,aAAa,4BAA4B;AAAA,IAChE,IAAI;AAAA,MACF,MAAM,OAAO,MAAM,kBAAkB,GAAG;AAAA,MACxC,IAAI,OAAO,KAAK,WAAW,YAAY,CAAC,KAAK,OAAO,KAAK,GAAG;AAAA,QAC1D,SAAS,KAAK,EAAE,IAAI,OAAO,OAAO,qBAAqB,GAAG,GAAG;AAAA,QAC7D,OAAO;AAAA,MACT;AAAA,MACA,MAAM,wBAAwB;AAAA,QAC5B,QAAQ,KAAK,OAAO,KAAK;AAAA,QACzB,gBACE,OAAO,KAAK,mBAAmB,WAC3B,KAAK,eAAe,KAAK,IACzB;AAAA,QACN;AAAA,QACA;AAAA,QACA,QACE,OAAO,KAAK,WAAW,WAAW,KAAK,OAAO,KAAK,IAAI;AAAA,MAC3D,CAAC;AAAA,MACD,SAAS,KAAK,EAAE,IAAI,KAAK,CAAC;AAAA,MAC1B,OAAO,KAAK;AAAA,MACZ,MAAM,MAAM,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;AAAA,MAC3D,QAAO,MAAM,iCAAiC,KAAK;AAAA,MACnD,SAAS,KAAK,EAAE,IAAI,OAAO,OAAO,IAAI,GAAG,GAAG;AAAA;AAAA,IAE9C,OAAO;AAAA,EACT;AAAA,EAEA,IAAI,WAAW,SAAS,SAAS,WAAW,yBAAyB,GAAG;AAAA,IACtE,MAAM,MAAM,IAAI,IACd,IAAI,OAAO,KACX,UAAU,IAAI,QAAQ,QAAQ,aAChC;AAAA,IACA,MAAM,YAAY,IAAI,aAAa,IAAI,WAAW;AAAA,IAClD,IAAI,CAAC,WAAW;AAAA,MACd,cAAc,KAAK,yCAAyC,GAAG;AAAA,MAC/D,OAAO;AAAA,IACT;AAAA,IAEA,MAAM,UAAU,SAAS,sBAAsB,MAAM,OAAO,OAAO,OAAO;AAAA,IAC1E,MAAM,WAAW,MAAM,SAAS,qBAAqB,OAAO;AAAA,IAC5D,IAAI,UAAU;AAAA,MACZ,cAAc,KAAK,UAAU,GAAG;AAAA,MAChC,OAAO;AAAA,IACT;AAAA,IAEA,MAAM,kBAAkB;AAAA,IAExB,MAAM,gBAAgB,kBAAiB;AAAA,MACrC,UAAU;AAAA,MACV,WAAW;AAAA,MACX;AAAA,MACA,WAAW;AAAA,IACb,CAAC;AAAA,IAED,IAAI;AAAA,IACJ,IAAI;AAAA,MACF,UAAU,MAAM,sBAAsB,WAAW,OAAO;AAAA,MACxD,OAAO,UAAU;AAAA,MACjB,IAAI,eAAe,QAAQ,GAAG;AAAA,QAC5B,cAAc,QAAQ,EAAE,OAAO,UAAU,YAAY,IAAI,CAAC;AAAA,QAC1D,SAAS,KAAK;AAAA,UACZ,QAAQ;AAAA,UACR,OAAO;AAAA,QACT,GAAG,GAAG;AAAA,QACN,OAAO;AAAA,MACT;AAAA,MAEA,cAAc,QAAQ,EAAE,OAAO,UAAU,YAAY,IAAI,CAAC;AAAA,MAC1D,SAAS,KAAK;AAAA,QACZ,QAAQ;AAAA,QACR,OAAO;AAAA,MACT,GAAG,GAAG;AAAA,MACN,OAAO;AAAA;AAAA,IAGT,IAAI,oBAAmB,OAAO,GAAG;AAAA,MAC/B,cAAc,QAAQ;AAAA,QACpB,YAAY,QAAQ;AAAA,QACpB,WAAW;AAAA,MACb,CAAC;AAAA,MACD,SAAS,KAAK;AAAA,QACZ,QAAQ;AAAA,QACR,OACE;AAAA,MACJ,GAAG,GAAG;AAAA,MACN,OAAO;AAAA,IACT;AAAA,IAEA,IAAI,CAAC,QAAQ,IAAI;AAAA,MACf,cAAc,QAAQ;AAAA,QACpB,YAAY,QAAQ;AAAA,QACpB,WAAW;AAAA,MACb,CAAC;AAAA,MACD,SACE,KACA,QAAQ,WAAW,MACf,EAAE,QAAQ,WAAW,OAAO,+BAA+B,IAC3D;AAAA,QACE,QAAQ;AAAA,QACR,OAAO,6BAA6B,QAAQ;AAAA,MAC9C,CACN;AAAA,MACA,OAAO;AAAA,IACT;AAAA,IAEA,IAAI;AAAA,IAOJ,IAAI;AAAA,MACF,OAAQ,MAAM,QAAQ,KAAK;AAAA,MAO3B,OAAO,UAAU;AAAA,MACjB,cAAc,QAAQ,EAAE,OAAO,UAAU,YAAY,QAAQ,OAAO,CAAC;AAAA,MACrE,SAAS,KAAK;AAAA,QACZ,QAAQ;AAAA,QACR,OAAO;AAAA,MACT,GAAG,GAAG;AAAA,MACN,OAAO;AAAA;AAAA,IAGT,cAAc,QAAQ,EAAE,YAAY,QAAQ,OAAO,CAAC;AAAA,IAEpD,IAAI,KAAK,WAAW,mBAAmB,OAAO,KAAK,WAAW,UAAU;AAAA,MACtE,MAAM,wBAAwB;AAAA,QAC5B,QAAQ,KAAK;AAAA,QACb,gBACE,OAAO,KAAK,mBAAmB,WAC3B,KAAK,iBACL;AAAA,QACN;AAAA,QACA;AAAA,QACA,kBAAkB;AAAA,QAClB,QAAQ,OAAO,KAAK,WAAW,WAAW,KAAK,SAAS;AAAA,MAC1D,CAAC;AAAA,MACD,SAAS,KAAK;AAAA,QACZ,QAAQ;AAAA,QACR,WACE,OAAO,KAAK,cAAc,WAAW,KAAK,YAAY;AAAA,QACxD,gBACE,OAAO,KAAK,mBAAmB,WAC3B,KAAK,iBACL;AAAA,QACN,OAAO,KAAK;AAAA,QACZ,QAAQ,OAAO,KAAK,WAAW,WAAW,KAAK,SAAS;AAAA,MAC1D,CAAC;AAAA,MACD,OAAO;AAAA,IACT;AAAA,IAEA,SAAS,KAAK;AAAA,MACZ,QAAQ,OAAO,KAAK,WAAW,WAAW,KAAK,SAAS;AAAA,IAC1D,CAAC;AAAA,IACD,OAAO;AAAA,EACT;AAAA,EAEA,MAAM,SAAS,MAAM,SAAS,2BAC5B,KACA,KACA,UACA,QACA,kBAAkB,OAAO,QAAQ,CACnC;AAAA,EAIA,yBAAyB;AAAA,EAEzB,OAAO;AAAA;AAAA,IAhjBH,+BAA8B,KAC9B,8BAiDF,uBAAuB;AAAA;AAAA,EAxH3B;AAAA,EACA;AAAA,EAIA;AAAA,EAEA;AAAA,EAEA;AAAA,EACA;AAAA,EAMA;AAAA,EAuDM,+BAAmD;AAAA,IACvD;AAAA,IACA,gCAAgC,MAAG;AAAA,MAAG;AAAA;AAAA,IACtC;AAAA,IACA;AAAA,IACA,iBAAiB,MAAM;AAAA,MACrB,QAAO,KAAK,8DAA8D;AAAA;AAAA,IAE5E;AAAA,EACF;AAAA;",
21
+ "debugId": "EBA7A1158F35379764756E2164756E21",
22
+ "names": []
23
+ }
@@ -0,0 +1,14 @@
1
+ import type { AgentRuntime, RouteHelpers, RouteRequestMeta } from "@elizaos/core";
2
+ export interface CloudConfigLike {
3
+ cloud?: {
4
+ enabled?: boolean;
5
+ apiKey?: string;
6
+ baseUrl?: string;
7
+ };
8
+ }
9
+ export interface CloudStatusRouteContext extends RouteRequestMeta, Pick<RouteHelpers, "json"> {
10
+ config: CloudConfigLike;
11
+ runtime: AgentRuntime | null;
12
+ }
13
+ export declare function handleCloudStatusRoutes(ctx: CloudStatusRouteContext): Promise<boolean>;
14
+ //# sourceMappingURL=cloud-status-routes-autonomous.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cloud-status-routes-autonomous.d.ts","sourceRoot":"","sources":["../../src/routes/cloud-status-routes-autonomous.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,YAAY,EACZ,YAAY,EACZ,gBAAgB,EAEjB,MAAM,eAAe,CAAC;AAoBvB,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,EAAE;QACN,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAED,MAAM,WAAW,uBACf,SAAQ,gBAAgB,EACtB,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC;IAC5B,MAAM,EAAE,eAAe,CAAC;IACxB,OAAO,EAAE,YAAY,GAAG,IAAI,CAAC;CAC9B;AAmED,wBAAsB,uBAAuB,CAC3C,GAAG,EAAE,uBAAuB,GAC3B,OAAO,CAAC,OAAO,CAAC,CA6HlB"}