@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,531 @@
1
+ /**
2
+ * Cloud setup flow for Eliza Cloud integration.
3
+ *
4
+ * Handles availability check → browser-based auth → agent provisioning
5
+ * during `runFirstTimeSetup()`. Transport-agnostic: every user-visible
6
+ * event and every interactive prompt is funneled through a
7
+ * `CloudSetupObserver`. CLI callers wrap their clack instance in
8
+ * `ClackObserver`; web/desktop callers provide an event-bridge observer.
9
+ *
10
+ * @module cloud-setup
11
+ */
12
+
13
+ import { logger } from "@elizaos/core";
14
+ import type { StylePreset } from "@elizaos/core";
15
+ import { type CloudLoginResult, cloudLogin } from "./cloud/auth.js";
16
+ import { normalizeCloudSiteUrl } from "./cloud/base-url.js";
17
+ import {
18
+ type CloudAgentCreateParams,
19
+ ElizaCloudClient,
20
+ } from "./cloud/bridge-client.js";
21
+ import type { CloudSetupObserver } from "./cloud/setup-observer.js";
22
+
23
+ // ---------------------------------------------------------------------------
24
+ // Types
25
+ // ---------------------------------------------------------------------------
26
+
27
+ /** Result of a successful cloud setup flow. */
28
+ export interface CloudSetupResult {
29
+ apiKey: string;
30
+ agentId: string | undefined;
31
+ baseUrl: string;
32
+ bridgeUrl?: string;
33
+ }
34
+
35
+ /**
36
+ * Outcome of the agent-provisioning step. Distinguishes a fully-running
37
+ * agent from one that timed out mid-provisioning so callers do not treat
38
+ * the timeout path as a success.
39
+ */
40
+ type ProvisionOutcome =
41
+ | { kind: "running"; agentId: string; bridgeUrl?: string }
42
+ | { kind: "pending-after-timeout"; agentId: string }
43
+ | null;
44
+
45
+ // ---------------------------------------------------------------------------
46
+ // Constants
47
+ // ---------------------------------------------------------------------------
48
+
49
+ const DEFAULT_CLOUD_BASE_URL = "https://www.elizacloud.ai";
50
+ const PROVISION_TIMEOUT_MS = 120_000; // 2 minutes
51
+ const PROVISION_POLL_INTERVAL_MS = 3_000;
52
+
53
+ // ---------------------------------------------------------------------------
54
+ // Availability check
55
+ // ---------------------------------------------------------------------------
56
+
57
+ /**
58
+ * Quick pre-flight check: is Eliza Cloud accepting new agents?
59
+ * Returns null if available, or an error message string if not.
60
+ */
61
+ export async function checkCloudAvailability(
62
+ baseUrl: string,
63
+ ): Promise<string | null> {
64
+ try {
65
+ const url = `${normalizeCloudSiteUrl(baseUrl)}/api/compat/availability`;
66
+ const res = await fetch(url, {
67
+ method: "GET",
68
+ headers: { Accept: "application/json" },
69
+ signal: AbortSignal.timeout(10_000),
70
+ });
71
+
72
+ if (!res.ok) {
73
+ return `Cloud returned HTTP ${res.status}. It may be temporarily unavailable.`;
74
+ }
75
+
76
+ const body = (await res.json()) as {
77
+ success?: boolean;
78
+ data?: { acceptingNewAgents?: boolean; availableSlots?: number };
79
+ };
80
+
81
+ if (!body.success || !body.data?.acceptingNewAgents) {
82
+ return "Eliza Cloud is currently at capacity. Try again later or run locally.";
83
+ }
84
+
85
+ return null; // Available!
86
+ } catch (err) {
87
+ const msg = String(err);
88
+ if (msg.includes("timed out") || msg.includes("timeout")) {
89
+ return "Could not reach Eliza Cloud (request timed out). Check your internet connection.";
90
+ }
91
+ return `Could not reach Eliza Cloud: ${msg}`;
92
+ }
93
+ }
94
+
95
+ // ---------------------------------------------------------------------------
96
+ // Cloud auth wrapper
97
+ // ---------------------------------------------------------------------------
98
+
99
+ /**
100
+ * Run the Eliza Cloud browser-based login, surfacing every transition
101
+ * through the observer. Returns the API key/result or null on failure.
102
+ */
103
+ async function runCloudAuth(
104
+ observer: CloudSetupObserver,
105
+ baseUrl: string,
106
+ ): Promise<CloudLoginResult | null> {
107
+ try {
108
+ const result = await cloudLogin({
109
+ baseUrl,
110
+ timeoutMs: 300_000, // 5 minutes
111
+ onBrowserUrl: (url: string) => {
112
+ observer.onAuthStart(url);
113
+
114
+ // Try to open the browser. Failure is surfaced through the
115
+ // observer instead of being swallowed at debug-level — desktop /
116
+ // web setup wrappers need to render an inline "couldn't open
117
+ // browser" affordance.
118
+ openBrowser(url).catch((err) => {
119
+ const error = err instanceof Error ? err : new Error(String(err));
120
+ observer.onAuthBrowserOpenFailed(url, error);
121
+ });
122
+ },
123
+ onPollStatus: (status: string) => {
124
+ observer.onAuthPollStatus(status);
125
+ },
126
+ });
127
+
128
+ observer.onAuthSuccess();
129
+ return result;
130
+ } catch (err) {
131
+ observer.onAuthFailure(describeCloudAuthError(err));
132
+ return null;
133
+ }
134
+ }
135
+
136
+ /**
137
+ * Translate the various error categories `cloudLogin` can throw into a
138
+ * single user-facing line. The categories are derived from the strings
139
+ * `cloud/auth.ts` and `cloud/validate-url.ts` already produce — we don't
140
+ * invent new error types, we just steer them into the right bucket.
141
+ */
142
+ function describeCloudAuthError(err: unknown): string {
143
+ const raw = err instanceof Error ? err.message : String(err);
144
+ const msg = raw.toLowerCase();
145
+
146
+ // Overall 5-minute browser timeout from cloudLogin.
147
+ if (
148
+ msg.includes("login timed out") ||
149
+ msg.includes("not completed within")
150
+ ) {
151
+ return "Cloud sign-in timed out after 5 minutes. Try again or run locally.";
152
+ }
153
+
154
+ // validateCloudBaseUrl rejections (HTTPS-only, blocked host, DNS, …).
155
+ if (
156
+ msg.includes("invalid cloud base url") ||
157
+ msg.includes("cloud base url") ||
158
+ msg.includes("could not be resolved via dns")
159
+ ) {
160
+ return `Cloud sign-in failed: ${raw}`;
161
+ }
162
+
163
+ // Per-request timeouts (session create / polling) and any fetch network
164
+ // failure from `cloudLogin`.
165
+ if (
166
+ msg.includes("timed out") ||
167
+ msg.includes("failed to create auth session") ||
168
+ msg.includes("polling failed") ||
169
+ msg.includes("polling request timed out")
170
+ ) {
171
+ return "Couldn't reach Eliza Cloud. Check your connection or run locally.";
172
+ }
173
+
174
+ // Fallback: surface the underlying message verbatim.
175
+ return `Cloud sign-in failed: ${raw}`;
176
+ }
177
+
178
+ // ---------------------------------------------------------------------------
179
+ // Agent provisioning
180
+ // ---------------------------------------------------------------------------
181
+
182
+ /**
183
+ * Create and provision a cloud agent, polling until it's running.
184
+ *
185
+ * Returns a discriminated outcome:
186
+ * - `{ kind: "running", agentId, bridgeUrl? }` — agent reached a
187
+ * terminal "up" state.
188
+ * - `{ kind: "pending-after-timeout", agentId }` — agent was created
189
+ * but never reached a running/failed terminal status before
190
+ * `PROVISION_TIMEOUT_MS`. The caller is expected to surface the
191
+ * timeout to the user; we don't pretend it succeeded.
192
+ * - `null` — agent creation failed outright, or provisioning failed
193
+ * with an `error`/`failed` status, or the polling loop hit a
194
+ * terminal auth error (401/403). The caller falls back.
195
+ */
196
+ async function provisionCloudAgent(
197
+ observer: CloudSetupObserver,
198
+ client: ElizaCloudClient,
199
+ agentName: string,
200
+ preset?: StylePreset,
201
+ ): Promise<ProvisionOutcome> {
202
+ observer.onProvisionStart(agentName);
203
+
204
+ let agentId: string;
205
+ let initialStatus: string;
206
+ try {
207
+ const agentConfig: Record<string, unknown> = {};
208
+ if (preset) {
209
+ agentConfig.bio = preset.bio;
210
+ agentConfig.system = preset.system;
211
+ agentConfig.style = preset.style;
212
+ agentConfig.adjectives = preset.adjectives;
213
+ agentConfig.topics = preset.topics;
214
+ agentConfig.postExamples = preset.postExamples;
215
+ agentConfig.messageExamples = preset.messageExamples;
216
+ }
217
+
218
+ const params: CloudAgentCreateParams = {
219
+ agentName,
220
+ agentConfig,
221
+ };
222
+
223
+ const agent = await client.createAgent(params);
224
+ agentId = agent.id;
225
+ initialStatus = agent.status;
226
+ } catch (err) {
227
+ observer.onProvisionFailure(`Failed to create cloud agent: ${String(err)}`);
228
+ return null;
229
+ }
230
+
231
+ observer.onProvisionStatus("created");
232
+
233
+ // Poll for terminal status. Order: poll first (terminal-on-first-read
234
+ // skips the wasted sleep), then sleep at the END of each iteration if
235
+ // the loop has time remaining.
236
+ const deadline = Date.now() + PROVISION_TIMEOUT_MS;
237
+ let lastStatus = initialStatus;
238
+
239
+ while (Date.now() < deadline) {
240
+ let current: Awaited<ReturnType<ElizaCloudClient["getAgent"]>> | null;
241
+ try {
242
+ current = await client.getAgent(agentId);
243
+ } catch (pollErr) {
244
+ const classification = classifyPollError(pollErr);
245
+ if (classification === "auth") {
246
+ observer.onProvisionFailure(
247
+ `Cloud rejected the API key (last status: ${lastStatus}). Please sign in again.`,
248
+ );
249
+ return null;
250
+ }
251
+ if (classification === "transient") {
252
+ // 5xx / network: keep trying, but at warn level so a sustained
253
+ // outage is visible in logs (not silently buried at debug).
254
+ logger.warn(
255
+ `[cloud-setup] Transient poll error, will retry: ${String(pollErr)}`,
256
+ );
257
+ current = null;
258
+ } else {
259
+ // Terminal but not auth — propagate and stop the flow.
260
+ observer.onProvisionFailure(`Provisioning poll failed: ${String(pollErr)}`);
261
+ return null;
262
+ }
263
+ }
264
+
265
+ if (current) {
266
+ lastStatus = current.status;
267
+ switch (lastStatus) {
268
+ case "running":
269
+ case "completed":
270
+ observer.onProvisionSuccess({
271
+ agentId,
272
+ bridgeUrl: current.bridgeUrl,
273
+ });
274
+ return {
275
+ kind: "running",
276
+ agentId,
277
+ bridgeUrl: current.bridgeUrl,
278
+ };
279
+
280
+ case "failed":
281
+ case "error":
282
+ observer.onProvisionFailure(
283
+ `Provisioning failed: ${current.errorMessage ?? "unknown error"}`,
284
+ );
285
+ return null;
286
+
287
+ default:
288
+ observer.onProvisionStatus(lastStatus, current);
289
+ }
290
+ }
291
+
292
+ // Sleep AFTER the read. If the previous read was terminal we would
293
+ // have returned above; if it pushed us past the deadline the loop
294
+ // condition will exit on the next iteration without another sleep.
295
+ if (Date.now() + PROVISION_POLL_INTERVAL_MS < deadline) {
296
+ await sleep(PROVISION_POLL_INTERVAL_MS);
297
+ } else {
298
+ break;
299
+ }
300
+ }
301
+
302
+ // Reached the deadline without a terminal status. Surface that
303
+ // explicitly — callers must not treat this as a success.
304
+ observer.onProvisionTimeout(agentId, lastStatus);
305
+ return { kind: "pending-after-timeout", agentId };
306
+ }
307
+
308
+ /**
309
+ * Classify a `getAgent` poll error. The bridge client's `request<T>`
310
+ * surfaces non-2xx responses as plain `Error("HTTP <status>: ...")` from
311
+ * `getAgent` (see `cloud/bridge-client.ts`), so the message-prefix match
312
+ * is the canonical signal.
313
+ *
314
+ * "auth" — 401/403: stop polling immediately.
315
+ * "transient" — 5xx or network/fetch error: keep retrying.
316
+ * "terminal" — anything else (404, malformed body, etc.): stop.
317
+ */
318
+ function classifyPollError(err: unknown): "auth" | "transient" | "terminal" {
319
+ const raw = err instanceof Error ? err.message : String(err);
320
+ if (/\bHTTP\s+40[13]\b/i.test(raw)) {
321
+ return "auth";
322
+ }
323
+ if (/\bHTTP\s+5\d{2}\b/i.test(raw)) {
324
+ return "transient";
325
+ }
326
+ // AbortError / TimeoutError / fetch failures from the request layer.
327
+ if (
328
+ err instanceof Error &&
329
+ (err.name === "AbortError" ||
330
+ err.name === "TimeoutError" ||
331
+ /fetch failed|network|timed out|timeout/i.test(raw))
332
+ ) {
333
+ return "transient";
334
+ }
335
+ return "terminal";
336
+ }
337
+
338
+ // ---------------------------------------------------------------------------
339
+ // Main orchestrator
340
+ // ---------------------------------------------------------------------------
341
+
342
+ /**
343
+ * Run the full cloud setup flow:
344
+ * 1. Check availability
345
+ * 2. Authenticate via browser
346
+ * 3. Create + provision agent
347
+ *
348
+ * Returns the result or null if the user cancels / an error occurs.
349
+ * On failure, the caller should fall back to local mode.
350
+ */
351
+ export async function runCloudSetup(
352
+ observer: CloudSetupObserver,
353
+ agentName: string,
354
+ preset?: StylePreset,
355
+ baseUrl?: string,
356
+ ): Promise<CloudSetupResult | null> {
357
+ const resolvedBaseUrl = normalizeCloudSiteUrl(
358
+ baseUrl ?? DEFAULT_CLOUD_BASE_URL,
359
+ );
360
+
361
+ // ── Step 1: Availability check ──────────────────────────────────────
362
+ const unavailableReason = await checkCloudAvailability(resolvedBaseUrl);
363
+ observer.onAvailabilityChecked({
364
+ ok: unavailableReason === null,
365
+ ...(unavailableReason ? { reason: unavailableReason } : {}),
366
+ });
367
+
368
+ if (unavailableReason) {
369
+ const fallback = await observer.confirm({
370
+ message: "Run locally instead?",
371
+ defaultValue: true,
372
+ });
373
+
374
+ // Cancel (null) and explicit "yes, run locally" both bail to local.
375
+ if (fallback === null || fallback === true) {
376
+ return null;
377
+ }
378
+ // User said "no" to fallback — try auth anyway (maybe availability is
379
+ // temporarily wrong).
380
+ }
381
+
382
+ // ── Step 2: Browser-based auth ──────────────────────────────────────
383
+ const authResult = await runCloudAuth(observer, resolvedBaseUrl);
384
+ if (!authResult) {
385
+ observer.onNotice("Cloud login was not completed.");
386
+
387
+ const retry = await observer.confirm({
388
+ message: "Try again, or run locally?",
389
+ activeLabel: "Try again",
390
+ inactiveLabel: "Run locally",
391
+ defaultValue: false,
392
+ });
393
+
394
+ // Cancel or "run locally" both bail.
395
+ if (retry === null || retry === false) {
396
+ return null;
397
+ }
398
+
399
+ // Retry auth once
400
+ const retryResult = await runCloudAuth(observer, resolvedBaseUrl);
401
+ if (!retryResult) {
402
+ observer.onNotice("Login was not completed. Falling back to local mode.");
403
+ return null;
404
+ }
405
+
406
+ return await finishProvisioning(
407
+ observer,
408
+ resolvedBaseUrl,
409
+ retryResult,
410
+ agentName,
411
+ preset,
412
+ );
413
+ }
414
+
415
+ return await finishProvisioning(
416
+ observer,
417
+ resolvedBaseUrl,
418
+ authResult,
419
+ agentName,
420
+ preset,
421
+ );
422
+ }
423
+
424
+ /**
425
+ * Complete provisioning after successful auth.
426
+ *
427
+ * Branches on the explicit `ProvisionOutcome` kind: a "pending-after-
428
+ * timeout" outcome is NOT treated as success — the caller is prompted
429
+ * to fall back to local, the same as for outright failure, but the
430
+ * agent id is preserved on the result so the user can reconnect later
431
+ * with `eliza cloud connect`.
432
+ */
433
+ async function finishProvisioning(
434
+ observer: CloudSetupObserver,
435
+ baseUrl: string,
436
+ authResult: CloudLoginResult,
437
+ agentName: string,
438
+ preset?: StylePreset,
439
+ ): Promise<CloudSetupResult | null> {
440
+ // ── Step 3: Create + provision agent ──────────────────────────────
441
+ const client = new ElizaCloudClient(baseUrl, authResult.apiKey);
442
+ const provisionResult = await provisionCloudAgent(
443
+ observer,
444
+ client,
445
+ agentName,
446
+ preset,
447
+ );
448
+
449
+ if (provisionResult && provisionResult.kind === "running") {
450
+ return {
451
+ apiKey: authResult.apiKey,
452
+ agentId: provisionResult.agentId,
453
+ baseUrl,
454
+ bridgeUrl: provisionResult.bridgeUrl,
455
+ };
456
+ }
457
+
458
+ // Either provisioning errored (`null`) or timed out mid-flight.
459
+ // Prompt the user to fall back. We preserve any agentId we got so
460
+ // a later `eliza cloud connect` can resume.
461
+ const pendingAgentId =
462
+ provisionResult?.kind === "pending-after-timeout"
463
+ ? provisionResult.agentId
464
+ : undefined;
465
+
466
+ observer.onNotice(
467
+ pendingAgentId
468
+ ? "Cloud agent is still starting up. You can try `eliza cloud connect` once it's ready."
469
+ : "Cloud provisioning did not complete. You can try `eliza cloud connect` later.",
470
+ );
471
+
472
+ const runLocal = await observer.confirm({
473
+ message: "Continue with local setup instead?",
474
+ defaultValue: true,
475
+ });
476
+
477
+ if (runLocal === null || runLocal === true) {
478
+ return null;
479
+ }
480
+
481
+ // User doesn't want local either — save the auth result (and the
482
+ // pending agent id, if we have one) so they can reconnect later.
483
+ return {
484
+ apiKey: authResult.apiKey,
485
+ agentId: pendingAgentId,
486
+ baseUrl,
487
+ };
488
+ }
489
+
490
+ // ---------------------------------------------------------------------------
491
+ // Helpers
492
+ // ---------------------------------------------------------------------------
493
+
494
+ function sleep(ms: number): Promise<void> {
495
+ return new Promise((resolve) => setTimeout(resolve, ms));
496
+ }
497
+
498
+ /**
499
+ * Try to open a URL in the user's default browser.
500
+ *
501
+ * Rejects with a real Error when the underlying OS command fails (binary
502
+ * not on PATH, etc.). The caller is responsible for surfacing the failure
503
+ * — `runCloudAuth` routes it through `observer.onAuthBrowserOpenFailed`.
504
+ *
505
+ * Uses execFile with an args array (not exec with string interpolation)
506
+ * to avoid shell injection via crafted URLs.
507
+ */
508
+ async function openBrowser(url: string): Promise<void> {
509
+ const { execFile } = await import("node:child_process");
510
+ const { platform } = await import("node:os");
511
+
512
+ const p = platform();
513
+
514
+ return new Promise((resolve, reject) => {
515
+ const onError = (err: Error | null) => {
516
+ if (err) {
517
+ reject(err);
518
+ return;
519
+ }
520
+ resolve();
521
+ };
522
+
523
+ if (p === "darwin") {
524
+ execFile("open", [url], onError);
525
+ } else if (p === "win32") {
526
+ execFile("cmd.exe", ["/c", "start", "", url], onError);
527
+ } else {
528
+ execFile("xdg-open", [url], onError);
529
+ }
530
+ });
531
+ }