@elizaos/app-core 2.0.0-alpha.73 → 2.0.0-alpha.75

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 (1143) hide show
  1. package/App.d.ts +5 -0
  2. package/App.d.ts.map +1 -0
  3. package/App.js +220 -0
  4. package/actions/character.d.ts +39 -0
  5. package/actions/character.d.ts.map +1 -0
  6. package/actions/character.js +247 -0
  7. package/actions/chat-helpers.d.ts +47 -0
  8. package/actions/chat-helpers.d.ts.map +1 -0
  9. package/actions/chat-helpers.js +79 -0
  10. package/actions/cloud.d.ts +17 -0
  11. package/actions/cloud.d.ts.map +1 -0
  12. package/actions/cloud.js +43 -0
  13. package/actions/index.d.ts +12 -0
  14. package/actions/index.d.ts.map +1 -0
  15. package/actions/index.js +11 -0
  16. package/actions/lifecycle.d.ts +43 -0
  17. package/actions/lifecycle.d.ts.map +1 -0
  18. package/actions/lifecycle.js +118 -0
  19. package/actions/onboarding.d.ts +12 -0
  20. package/actions/onboarding.d.ts.map +1 -0
  21. package/actions/onboarding.js +26 -0
  22. package/actions/triggers.d.ts +23 -0
  23. package/actions/triggers.d.ts.map +1 -0
  24. package/actions/triggers.js +148 -0
  25. package/api/client.d.ts +2736 -0
  26. package/api/client.d.ts.map +1 -0
  27. package/api/client.js +2492 -0
  28. package/api/index.d.ts +2 -0
  29. package/api/index.d.ts.map +1 -0
  30. package/autonomy/index.d.ts +48 -0
  31. package/autonomy/index.d.ts.map +1 -0
  32. package/autonomy/index.js +330 -0
  33. package/bridge/capacitor-bridge.d.ts +153 -0
  34. package/bridge/capacitor-bridge.d.ts.map +1 -0
  35. package/bridge/capacitor-bridge.js +193 -0
  36. package/bridge/electrobun-rpc.d.ts +28 -0
  37. package/bridge/electrobun-rpc.d.ts.map +1 -0
  38. package/bridge/electrobun-rpc.js +35 -0
  39. package/bridge/electrobun-runtime.d.ts +3 -0
  40. package/bridge/electrobun-runtime.d.ts.map +1 -0
  41. package/bridge/electrobun-runtime.js +17 -0
  42. package/bridge/index.d.ts +6 -0
  43. package/bridge/index.d.ts.map +1 -0
  44. package/bridge/native-plugins.d.ts +82 -0
  45. package/bridge/native-plugins.d.ts.map +1 -0
  46. package/bridge/native-plugins.js +39 -0
  47. package/bridge/plugin-bridge.d.ts +116 -0
  48. package/bridge/plugin-bridge.d.ts.map +1 -0
  49. package/bridge/plugin-bridge.js +203 -0
  50. package/bridge/storage-bridge.d.ts +39 -0
  51. package/bridge/storage-bridge.d.ts.map +1 -0
  52. package/bridge/storage-bridge.js +135 -0
  53. package/chat/index.d.ts +57 -0
  54. package/chat/index.d.ts.map +1 -0
  55. package/chat/index.js +160 -0
  56. package/coding/index.d.ts +25 -0
  57. package/coding/index.d.ts.map +1 -0
  58. package/coding/index.js +25 -0
  59. package/components/AdvancedPageView.d.ts +17 -0
  60. package/components/AdvancedPageView.d.ts.map +1 -0
  61. package/components/AdvancedPageView.js +146 -0
  62. package/components/AgentActivityBox.d.ts +7 -0
  63. package/components/AgentActivityBox.d.ts.map +1 -0
  64. package/components/AgentActivityBox.js +25 -0
  65. package/components/ApiKeyConfig.d.ts +26 -0
  66. package/components/ApiKeyConfig.d.ts.map +1 -0
  67. package/components/ApiKeyConfig.js +119 -0
  68. package/components/AppsPageView.d.ts +7 -0
  69. package/components/AppsPageView.d.ts.map +1 -0
  70. package/components/AppsPageView.js +31 -0
  71. package/components/AppsView.d.ts +8 -0
  72. package/components/AppsView.d.ts.map +1 -0
  73. package/components/AppsView.js +149 -0
  74. package/components/AvatarLoader.d.ts +13 -0
  75. package/components/AvatarLoader.d.ts.map +1 -0
  76. package/components/AvatarLoader.js +53 -0
  77. package/components/AvatarSelector.d.ts +23 -0
  78. package/components/AvatarSelector.d.ts.map +1 -0
  79. package/components/AvatarSelector.js +105 -0
  80. package/components/BscTradePanel.d.ts +22 -0
  81. package/components/BscTradePanel.d.ts.map +1 -0
  82. package/components/BscTradePanel.js +221 -0
  83. package/components/BugReportModal.d.ts +2 -0
  84. package/components/BugReportModal.d.ts.map +1 -0
  85. package/components/BugReportModal.js +219 -0
  86. package/components/CharacterRoster.d.ts +31 -0
  87. package/components/CharacterRoster.d.ts.map +1 -0
  88. package/components/CharacterRoster.js +41 -0
  89. package/components/CharacterView.d.ts +8 -0
  90. package/components/CharacterView.d.ts.map +1 -0
  91. package/components/CharacterView.js +685 -0
  92. package/components/ChatAvatar.d.ts +8 -0
  93. package/components/ChatAvatar.d.ts.map +1 -0
  94. package/components/ChatAvatar.js +89 -0
  95. package/components/ChatComposer.d.ts +37 -0
  96. package/components/ChatComposer.d.ts.map +1 -0
  97. package/components/ChatComposer.js +136 -0
  98. package/components/ChatMessage.d.ts +24 -0
  99. package/components/ChatMessage.d.ts.map +1 -0
  100. package/components/ChatMessage.js +167 -0
  101. package/components/ChatModalView.d.ts +10 -0
  102. package/components/ChatModalView.d.ts.map +1 -0
  103. package/components/ChatModalView.js +57 -0
  104. package/components/ChatView.d.ts +14 -0
  105. package/components/ChatView.d.ts.map +1 -0
  106. package/components/ChatView.js +526 -0
  107. package/components/CloudOnboarding.d.ts +7 -0
  108. package/components/CloudOnboarding.d.ts.map +1 -0
  109. package/components/CloudOnboarding.js +22 -0
  110. package/components/CloudSourceControls.d.ts +13 -0
  111. package/components/CloudSourceControls.d.ts.map +1 -0
  112. package/components/CloudSourceControls.js +16 -0
  113. package/components/CodingAgentSettingsSection.d.ts +2 -0
  114. package/components/CodingAgentSettingsSection.d.ts.map +1 -0
  115. package/components/CodingAgentSettingsSection.js +270 -0
  116. package/components/CommandPalette.d.ts +2 -0
  117. package/components/CommandPalette.d.ts.map +1 -0
  118. package/components/CommandPalette.js +181 -0
  119. package/components/CompanionSceneHost.d.ts +14 -0
  120. package/components/CompanionSceneHost.d.ts.map +1 -0
  121. package/components/CompanionSceneHost.js +360 -0
  122. package/components/CompanionShell.d.ts +17 -0
  123. package/components/CompanionShell.d.ts.map +1 -0
  124. package/components/CompanionShell.js +15 -0
  125. package/components/CompanionView.d.ts +2 -0
  126. package/components/CompanionView.d.ts.map +1 -0
  127. package/components/CompanionView.js +22 -0
  128. package/components/ConfigPageView.d.ts +11 -0
  129. package/components/ConfigPageView.d.ts.map +1 -0
  130. package/components/ConfigPageView.js +303 -0
  131. package/components/ConfigSaveFooter.d.ts +8 -0
  132. package/components/ConfigSaveFooter.d.ts.map +1 -0
  133. package/components/ConfigSaveFooter.js +10 -0
  134. package/components/ConfirmModal.d.ts +61 -0
  135. package/components/ConfirmModal.d.ts.map +1 -0
  136. package/components/ConfirmModal.js +164 -0
  137. package/components/ConnectionFailedBanner.d.ts +6 -0
  138. package/components/ConnectionFailedBanner.d.ts.map +1 -0
  139. package/components/ConnectionFailedBanner.js +22 -0
  140. package/components/ConnectorsPageView.d.ts +7 -0
  141. package/components/ConnectorsPageView.d.ts.map +1 -0
  142. package/components/ConnectorsPageView.js +8 -0
  143. package/components/ConversationsSidebar.d.ts +9 -0
  144. package/components/ConversationsSidebar.d.ts.map +1 -0
  145. package/components/ConversationsSidebar.js +116 -0
  146. package/components/CustomActionEditor.d.ts +10 -0
  147. package/components/CustomActionEditor.d.ts.map +1 -0
  148. package/components/CustomActionEditor.js +578 -0
  149. package/components/CustomActionsPanel.d.ts +9 -0
  150. package/components/CustomActionsPanel.d.ts.map +1 -0
  151. package/components/CustomActionsPanel.js +107 -0
  152. package/components/CustomActionsView.d.ts +2 -0
  153. package/components/CustomActionsView.d.ts.map +1 -0
  154. package/components/CustomActionsView.js +134 -0
  155. package/components/DatabasePageView.d.ts +5 -0
  156. package/components/DatabasePageView.d.ts.map +1 -0
  157. package/components/DatabasePageView.js +28 -0
  158. package/components/DatabaseView.d.ts +9 -0
  159. package/components/DatabaseView.d.ts.map +1 -0
  160. package/components/DatabaseView.js +311 -0
  161. package/components/ElizaCloudDashboard.d.ts +2 -0
  162. package/components/ElizaCloudDashboard.d.ts.map +1 -0
  163. package/components/ElizaCloudDashboard.js +657 -0
  164. package/components/EmotePicker.d.ts +2 -0
  165. package/components/EmotePicker.d.ts.map +1 -0
  166. package/components/EmotePicker.js +343 -0
  167. package/components/ErrorBoundary.d.ts +22 -0
  168. package/components/ErrorBoundary.d.ts.map +1 -0
  169. package/components/ErrorBoundary.js +31 -0
  170. package/components/FineTuningView.d.ts +2 -0
  171. package/components/FineTuningView.d.ts.map +1 -0
  172. package/components/FineTuningView.js +433 -0
  173. package/components/FlaminaGuide.d.ts +10 -0
  174. package/components/FlaminaGuide.d.ts.map +1 -0
  175. package/components/FlaminaGuide.js +64 -0
  176. package/components/GameView.d.ts +11 -0
  177. package/components/GameView.d.ts.map +1 -0
  178. package/components/GameView.js +294 -0
  179. package/components/GameViewOverlay.d.ts +8 -0
  180. package/components/GameViewOverlay.d.ts.map +1 -0
  181. package/components/GameViewOverlay.js +70 -0
  182. package/components/GlobalEmoteOverlay.d.ts +2 -0
  183. package/components/GlobalEmoteOverlay.d.ts.map +1 -0
  184. package/components/GlobalEmoteOverlay.js +112 -0
  185. package/components/Header.d.ts +9 -0
  186. package/components/Header.d.ts.map +1 -0
  187. package/components/Header.js +123 -0
  188. package/components/HeartbeatsView.d.ts +2 -0
  189. package/components/HeartbeatsView.d.ts.map +1 -0
  190. package/components/HeartbeatsView.js +378 -0
  191. package/components/InventoryView.d.ts +10 -0
  192. package/components/InventoryView.d.ts.map +1 -0
  193. package/components/InventoryView.js +176 -0
  194. package/components/KnowledgeView.d.ts +20 -0
  195. package/components/KnowledgeView.d.ts.map +1 -0
  196. package/components/KnowledgeView.js +480 -0
  197. package/components/LanguageDropdown.d.ts +30 -0
  198. package/components/LanguageDropdown.d.ts.map +1 -0
  199. package/components/LanguageDropdown.js +99 -0
  200. package/components/LifoMonitorPanel.d.ts +21 -0
  201. package/components/LifoMonitorPanel.d.ts.map +1 -0
  202. package/components/LifoMonitorPanel.js +24 -0
  203. package/components/LifoSandboxView.d.ts +5 -0
  204. package/components/LifoSandboxView.d.ts.map +1 -0
  205. package/components/LifoSandboxView.js +333 -0
  206. package/components/LoadingScreen.d.ts +13 -0
  207. package/components/LoadingScreen.d.ts.map +1 -0
  208. package/components/LoadingScreen.js +70 -0
  209. package/components/LogsPageView.d.ts +2 -0
  210. package/components/LogsPageView.d.ts.map +1 -0
  211. package/components/LogsPageView.js +7 -0
  212. package/components/LogsView.d.ts +5 -0
  213. package/components/LogsView.d.ts.map +1 -0
  214. package/components/LogsView.js +71 -0
  215. package/components/MediaGalleryView.d.ts +9 -0
  216. package/components/MediaGalleryView.d.ts.map +1 -0
  217. package/components/MediaGalleryView.js +236 -0
  218. package/components/MediaSettingsSection.d.ts +11 -0
  219. package/components/MediaSettingsSection.d.ts.map +1 -0
  220. package/components/MediaSettingsSection.js +329 -0
  221. package/components/MessageContent.d.ts +51 -0
  222. package/components/MessageContent.d.ts.map +1 -0
  223. package/components/MessageContent.js +553 -0
  224. package/components/OnboardingWizard.d.ts +2 -0
  225. package/components/OnboardingWizard.d.ts.map +1 -0
  226. package/components/OnboardingWizard.js +96 -0
  227. package/components/PairingView.d.ts +5 -0
  228. package/components/PairingView.d.ts.map +1 -0
  229. package/components/PairingView.js +29 -0
  230. package/components/PermissionsSection.d.ts +20 -0
  231. package/components/PermissionsSection.d.ts.map +1 -0
  232. package/components/PermissionsSection.js +573 -0
  233. package/components/PluginsPageView.d.ts +5 -0
  234. package/components/PluginsPageView.d.ts.map +1 -0
  235. package/components/PluginsPageView.js +8 -0
  236. package/components/PluginsView.d.ts +21 -0
  237. package/components/PluginsView.d.ts.map +1 -0
  238. package/components/PluginsView.js +1534 -0
  239. package/components/ProviderSwitcher.d.ts +42 -0
  240. package/components/ProviderSwitcher.d.ts.map +1 -0
  241. package/components/ProviderSwitcher.js +493 -0
  242. package/components/RestartBanner.d.ts +2 -0
  243. package/components/RestartBanner.d.ts.map +1 -0
  244. package/components/RestartBanner.js +36 -0
  245. package/components/RuntimeView.d.ts +10 -0
  246. package/components/RuntimeView.d.ts.map +1 -0
  247. package/components/RuntimeView.js +165 -0
  248. package/components/SaveCommandModal.d.ts +12 -0
  249. package/components/SaveCommandModal.d.ts.map +1 -0
  250. package/components/SaveCommandModal.js +84 -0
  251. package/components/SecretsView.d.ts +9 -0
  252. package/components/SecretsView.d.ts.map +1 -0
  253. package/components/SecretsView.js +249 -0
  254. package/components/SettingsView.d.ts +9 -0
  255. package/components/SettingsView.d.ts.map +1 -0
  256. package/components/SettingsView.js +230 -0
  257. package/components/ShellOverlays.d.ts +8 -0
  258. package/components/ShellOverlays.d.ts.map +1 -0
  259. package/components/ShellOverlays.js +10 -0
  260. package/components/ShortcutsOverlay.d.ts +2 -0
  261. package/components/ShortcutsOverlay.d.ts.map +1 -0
  262. package/components/ShortcutsOverlay.js +79 -0
  263. package/components/SkillsView.d.ts +11 -0
  264. package/components/SkillsView.d.ts.map +1 -0
  265. package/components/SkillsView.js +358 -0
  266. package/components/StartupFailureView.d.ts +8 -0
  267. package/components/StartupFailureView.d.ts.map +1 -0
  268. package/components/StartupFailureView.js +16 -0
  269. package/components/StreamView.d.ts +16 -0
  270. package/components/StreamView.d.ts.map +1 -0
  271. package/components/StreamView.js +300 -0
  272. package/components/StripeEmbeddedCheckout.d.ts +24 -0
  273. package/components/StripeEmbeddedCheckout.d.ts.map +1 -0
  274. package/components/StripeEmbeddedCheckout.js +101 -0
  275. package/components/SubscriptionStatus.d.ts +23 -0
  276. package/components/SubscriptionStatus.d.ts.map +1 -0
  277. package/components/SubscriptionStatus.js +301 -0
  278. package/components/SystemWarningBanner.d.ts +6 -0
  279. package/components/SystemWarningBanner.d.ts.map +1 -0
  280. package/components/SystemWarningBanner.js +46 -0
  281. package/components/ThemeToggle.d.ts +21 -0
  282. package/components/ThemeToggle.d.ts.map +1 -0
  283. package/components/ThemeToggle.js +24 -0
  284. package/components/TrajectoriesView.d.ts +12 -0
  285. package/components/TrajectoriesView.d.ts.map +1 -0
  286. package/components/TrajectoriesView.js +183 -0
  287. package/components/TrajectoryDetailView.d.ts +13 -0
  288. package/components/TrajectoryDetailView.d.ts.map +1 -0
  289. package/components/TrajectoryDetailView.js +112 -0
  290. package/components/TriggersView.d.ts +2 -0
  291. package/components/TriggersView.d.ts.map +1 -0
  292. package/components/VectorBrowserView.d.ts +10 -0
  293. package/components/VectorBrowserView.d.ts.map +1 -0
  294. package/components/VectorBrowserView.js +997 -0
  295. package/components/VoiceConfigView.d.ts +11 -0
  296. package/components/VoiceConfigView.d.ts.map +1 -0
  297. package/components/VoiceConfigView.js +329 -0
  298. package/components/VrmStage.d.ts +28 -0
  299. package/components/VrmStage.d.ts.map +1 -0
  300. package/components/VrmStage.js +178 -0
  301. package/components/WhatsAppQrOverlay.d.ts +8 -0
  302. package/components/WhatsAppQrOverlay.d.ts.map +1 -0
  303. package/components/WhatsAppQrOverlay.js +63 -0
  304. package/components/apps/AppDetailPane.d.ts +15 -0
  305. package/components/apps/AppDetailPane.d.ts.map +1 -0
  306. package/components/apps/AppDetailPane.js +13 -0
  307. package/components/apps/AppsCatalogGrid.d.ts +20 -0
  308. package/components/apps/AppsCatalogGrid.d.ts.map +1 -0
  309. package/components/apps/AppsCatalogGrid.js +18 -0
  310. package/components/apps/extensions/registry.d.ts +4 -0
  311. package/components/apps/extensions/registry.d.ts.map +1 -0
  312. package/components/apps/extensions/registry.js +7 -0
  313. package/components/apps/extensions/types.d.ts +7 -0
  314. package/components/apps/extensions/types.d.ts.map +1 -0
  315. package/components/apps/extensions/types.js +1 -0
  316. package/components/apps/helpers.d.ts +7 -0
  317. package/components/apps/helpers.d.ts.map +1 -0
  318. package/components/apps/helpers.js +44 -0
  319. package/components/avatar/VrmAnimationLoader.d.ts +30 -0
  320. package/components/avatar/VrmAnimationLoader.d.ts.map +1 -0
  321. package/components/avatar/VrmAnimationLoader.js +99 -0
  322. package/components/avatar/VrmBlinkController.d.ts +37 -0
  323. package/components/avatar/VrmBlinkController.d.ts.map +1 -0
  324. package/components/avatar/VrmBlinkController.js +98 -0
  325. package/components/avatar/VrmCameraManager.d.ts +57 -0
  326. package/components/avatar/VrmCameraManager.d.ts.map +1 -0
  327. package/components/avatar/VrmCameraManager.js +277 -0
  328. package/components/avatar/VrmEngine.d.ts +246 -0
  329. package/components/avatar/VrmEngine.d.ts.map +1 -0
  330. package/components/avatar/VrmEngine.js +2076 -0
  331. package/components/avatar/VrmFootShadow.d.ts +18 -0
  332. package/components/avatar/VrmFootShadow.d.ts.map +1 -0
  333. package/components/avatar/VrmFootShadow.js +83 -0
  334. package/components/avatar/VrmViewer.d.ts +60 -0
  335. package/components/avatar/VrmViewer.d.ts.map +1 -0
  336. package/components/avatar/VrmViewer.js +396 -0
  337. package/components/avatar/mixamoVRMRigMap.d.ts +3 -0
  338. package/components/avatar/mixamoVRMRigMap.d.ts.map +1 -0
  339. package/components/avatar/mixamoVRMRigMap.js +56 -0
  340. package/components/avatar/retargetMixamoFbxToVrm.d.ts +9 -0
  341. package/components/avatar/retargetMixamoFbxToVrm.d.ts.map +1 -0
  342. package/components/avatar/retargetMixamoFbxToVrm.js +88 -0
  343. package/components/avatar/retargetMixamoGltfToVrm.d.ts +11 -0
  344. package/components/avatar/retargetMixamoGltfToVrm.d.ts.map +1 -0
  345. package/components/avatar/retargetMixamoGltfToVrm.js +80 -0
  346. package/components/chainConfig.d.ts +89 -0
  347. package/components/chainConfig.d.ts.map +1 -0
  348. package/components/chainConfig.js +287 -0
  349. package/components/companion/CompanionHeader.d.ts +15 -0
  350. package/components/companion/CompanionHeader.d.ts.map +1 -0
  351. package/components/companion/CompanionHeader.js +7 -0
  352. package/components/companion/CompanionSceneHost.d.ts +2 -0
  353. package/components/companion/CompanionSceneHost.d.ts.map +1 -0
  354. package/components/companion/CompanionSceneHost.js +1 -0
  355. package/components/companion/VrmStage.d.ts +3 -0
  356. package/components/companion/VrmStage.d.ts.map +1 -0
  357. package/components/companion/VrmStage.js +1 -0
  358. package/components/companion/index.d.ts +18 -0
  359. package/components/companion/index.d.ts.map +1 -0
  360. package/components/companion/index.js +17 -0
  361. package/components/companion/walletUtils.d.ts +95 -0
  362. package/components/companion/walletUtils.d.ts.map +1 -0
  363. package/components/companion/walletUtils.js +167 -0
  364. package/components/companion-shell-styles.d.ts +38 -0
  365. package/components/companion-shell-styles.d.ts.map +1 -0
  366. package/components/companion-shell-styles.js +248 -0
  367. package/components/confirm-delete-control.d.ts +16 -0
  368. package/components/confirm-delete-control.d.ts.map +1 -0
  369. package/components/confirm-delete-control.js +12 -0
  370. package/components/conversations/ConversationListItem.d.ts +31 -0
  371. package/components/conversations/ConversationListItem.d.ts.map +1 -0
  372. package/components/conversations/ConversationListItem.js +52 -0
  373. package/components/conversations/conversation-utils.d.ts +9 -0
  374. package/components/conversations/conversation-utils.d.ts.map +1 -0
  375. package/components/conversations/conversation-utils.js +138 -0
  376. package/components/format.d.ts +54 -0
  377. package/components/format.d.ts.map +1 -0
  378. package/components/format.js +82 -0
  379. package/components/index.d.ts +96 -0
  380. package/components/index.d.ts.map +1 -0
  381. package/components/index.js +95 -0
  382. package/components/inventory/CopyableAddress.d.ts +8 -0
  383. package/components/inventory/CopyableAddress.d.ts.map +1 -0
  384. package/components/inventory/CopyableAddress.js +18 -0
  385. package/components/inventory/InventoryToolbar.d.ts +25 -0
  386. package/components/inventory/InventoryToolbar.d.ts.map +1 -0
  387. package/components/inventory/InventoryToolbar.js +28 -0
  388. package/components/inventory/NftGrid.d.ts +13 -0
  389. package/components/inventory/NftGrid.d.ts.map +1 -0
  390. package/components/inventory/NftGrid.js +29 -0
  391. package/components/inventory/TokenLogo.d.ts +12 -0
  392. package/components/inventory/TokenLogo.d.ts.map +1 -0
  393. package/components/inventory/TokenLogo.js +33 -0
  394. package/components/inventory/TokensTable.d.ts +24 -0
  395. package/components/inventory/TokensTable.d.ts.map +1 -0
  396. package/components/inventory/TokensTable.js +26 -0
  397. package/components/inventory/constants.d.ts +52 -0
  398. package/components/inventory/constants.d.ts.map +1 -0
  399. package/components/inventory/constants.js +121 -0
  400. package/components/inventory/index.d.ts +9 -0
  401. package/components/inventory/index.d.ts.map +1 -0
  402. package/components/inventory/index.js +8 -0
  403. package/components/inventory/media-url.d.ts +6 -0
  404. package/components/inventory/media-url.d.ts.map +1 -0
  405. package/components/inventory/media-url.js +28 -0
  406. package/components/inventory/useInventoryData.d.ts +53 -0
  407. package/components/inventory/useInventoryData.d.ts.map +1 -0
  408. package/components/inventory/useInventoryData.js +332 -0
  409. package/components/knowledge-upload-image.d.ts +27 -0
  410. package/components/knowledge-upload-image.d.ts.map +1 -0
  411. package/components/knowledge-upload-image.js +146 -0
  412. package/components/labels.d.ts +6 -0
  413. package/components/labels.d.ts.map +1 -0
  414. package/components/labels.js +40 -0
  415. package/components/onboarding/ActivateStep.d.ts +2 -0
  416. package/components/onboarding/ActivateStep.d.ts.map +1 -0
  417. package/components/onboarding/ActivateStep.js +10 -0
  418. package/components/onboarding/ConnectionStep.d.ts +2 -0
  419. package/components/onboarding/ConnectionStep.d.ts.map +1 -0
  420. package/components/onboarding/ConnectionStep.js +609 -0
  421. package/components/onboarding/IdentityStep.d.ts +2 -0
  422. package/components/onboarding/IdentityStep.d.ts.map +1 -0
  423. package/components/onboarding/IdentityStep.js +102 -0
  424. package/components/onboarding/OnboardingPanel.d.ts +9 -0
  425. package/components/onboarding/OnboardingPanel.d.ts.map +1 -0
  426. package/components/onboarding/OnboardingPanel.js +24 -0
  427. package/components/onboarding/OnboardingStepNav.d.ts +2 -0
  428. package/components/onboarding/OnboardingStepNav.d.ts.map +1 -0
  429. package/components/onboarding/OnboardingStepNav.js +23 -0
  430. package/components/onboarding/PermissionsStep.d.ts +2 -0
  431. package/components/onboarding/PermissionsStep.d.ts.map +1 -0
  432. package/components/onboarding/PermissionsStep.js +7 -0
  433. package/components/onboarding/RpcStep.d.ts +2 -0
  434. package/components/onboarding/RpcStep.d.ts.map +1 -0
  435. package/components/onboarding/RpcStep.js +125 -0
  436. package/components/permissions/PermissionIcon.d.ts +4 -0
  437. package/components/permissions/PermissionIcon.d.ts.map +1 -0
  438. package/components/permissions/PermissionIcon.js +12 -0
  439. package/components/permissions/StreamingPermissions.d.ts +20 -0
  440. package/components/permissions/StreamingPermissions.d.ts.map +1 -0
  441. package/components/permissions/StreamingPermissions.js +177 -0
  442. package/components/plugins/showcase-data.d.ts +7 -0
  443. package/components/plugins/showcase-data.d.ts.map +1 -0
  444. package/components/plugins/showcase-data.js +464 -0
  445. package/components/shared/ShellHeaderControls.d.ts +27 -0
  446. package/components/shared/ShellHeaderControls.d.ts.map +1 -0
  447. package/components/shared/ShellHeaderControls.js +60 -0
  448. package/components/shared-companion-scene-context.d.ts +3 -0
  449. package/components/shared-companion-scene-context.d.ts.map +1 -0
  450. package/components/shared-companion-scene-context.js +13 -0
  451. package/components/skeletons.d.ts +17 -0
  452. package/components/skeletons.d.ts.map +1 -0
  453. package/components/skeletons.js +22 -0
  454. package/components/stream/ActivityFeed.d.ts +5 -0
  455. package/components/stream/ActivityFeed.d.ts.map +1 -0
  456. package/components/stream/ActivityFeed.js +57 -0
  457. package/components/stream/AvatarPip.d.ts +5 -0
  458. package/components/stream/AvatarPip.d.ts.map +1 -0
  459. package/components/stream/AvatarPip.js +6 -0
  460. package/components/stream/ChatContent.d.ts +6 -0
  461. package/components/stream/ChatContent.d.ts.map +1 -0
  462. package/components/stream/ChatContent.js +69 -0
  463. package/components/stream/ChatTicker.d.ts +5 -0
  464. package/components/stream/ChatTicker.d.ts.map +1 -0
  465. package/components/stream/ChatTicker.js +34 -0
  466. package/components/stream/IdleContent.d.ts +5 -0
  467. package/components/stream/IdleContent.d.ts.map +1 -0
  468. package/components/stream/IdleContent.js +17 -0
  469. package/components/stream/StatusBar.d.ts +36 -0
  470. package/components/stream/StatusBar.d.ts.map +1 -0
  471. package/components/stream/StatusBar.js +140 -0
  472. package/components/stream/StreamSettings.d.ts +33 -0
  473. package/components/stream/StreamSettings.d.ts.map +1 -0
  474. package/components/stream/StreamSettings.js +99 -0
  475. package/components/stream/StreamTerminal.d.ts +2 -0
  476. package/components/stream/StreamTerminal.d.ts.map +1 -0
  477. package/components/stream/StreamTerminal.js +52 -0
  478. package/components/stream/StreamVoiceConfig.d.ts +10 -0
  479. package/components/stream/StreamVoiceConfig.d.ts.map +1 -0
  480. package/components/stream/StreamVoiceConfig.js +88 -0
  481. package/components/stream/helpers.d.ts +32 -0
  482. package/components/stream/helpers.d.ts.map +1 -0
  483. package/components/stream/helpers.js +110 -0
  484. package/components/stream/overlays/OverlayLayer.d.ts +20 -0
  485. package/components/stream/overlays/OverlayLayer.d.ts.map +1 -0
  486. package/components/stream/overlays/OverlayLayer.js +24 -0
  487. package/components/stream/overlays/built-in/ActionTickerWidget.d.ts +8 -0
  488. package/components/stream/overlays/built-in/ActionTickerWidget.d.ts.map +1 -0
  489. package/components/stream/overlays/built-in/ActionTickerWidget.js +44 -0
  490. package/components/stream/overlays/built-in/AlertPopupWidget.d.ts +7 -0
  491. package/components/stream/overlays/built-in/AlertPopupWidget.d.ts.map +1 -0
  492. package/components/stream/overlays/built-in/AlertPopupWidget.js +62 -0
  493. package/components/stream/overlays/built-in/BrandingWidget.d.ts +7 -0
  494. package/components/stream/overlays/built-in/BrandingWidget.d.ts.map +1 -0
  495. package/components/stream/overlays/built-in/BrandingWidget.js +36 -0
  496. package/components/stream/overlays/built-in/CustomHtmlWidget.d.ts +26 -0
  497. package/components/stream/overlays/built-in/CustomHtmlWidget.d.ts.map +1 -0
  498. package/components/stream/overlays/built-in/CustomHtmlWidget.js +78 -0
  499. package/components/stream/overlays/built-in/PeonGlassWidget.d.ts +11 -0
  500. package/components/stream/overlays/built-in/PeonGlassWidget.d.ts.map +1 -0
  501. package/components/stream/overlays/built-in/PeonGlassWidget.js +188 -0
  502. package/components/stream/overlays/built-in/PeonHudWidget.d.ts +10 -0
  503. package/components/stream/overlays/built-in/PeonHudWidget.d.ts.map +1 -0
  504. package/components/stream/overlays/built-in/PeonHudWidget.js +168 -0
  505. package/components/stream/overlays/built-in/PeonSakuraWidget.d.ts +11 -0
  506. package/components/stream/overlays/built-in/PeonSakuraWidget.d.ts.map +1 -0
  507. package/components/stream/overlays/built-in/PeonSakuraWidget.js +213 -0
  508. package/components/stream/overlays/built-in/ThoughtBubbleWidget.d.ts +8 -0
  509. package/components/stream/overlays/built-in/ThoughtBubbleWidget.d.ts.map +1 -0
  510. package/components/stream/overlays/built-in/ThoughtBubbleWidget.js +59 -0
  511. package/components/stream/overlays/built-in/ViewerCountWidget.d.ts +7 -0
  512. package/components/stream/overlays/built-in/ViewerCountWidget.d.ts.map +1 -0
  513. package/components/stream/overlays/built-in/ViewerCountWidget.js +34 -0
  514. package/components/stream/overlays/built-in/index.d.ts +13 -0
  515. package/components/stream/overlays/built-in/index.d.ts.map +1 -0
  516. package/components/stream/overlays/built-in/index.js +12 -0
  517. package/components/stream/overlays/registry.d.ts +11 -0
  518. package/components/stream/overlays/registry.d.ts.map +1 -0
  519. package/components/stream/overlays/registry.js +16 -0
  520. package/components/stream/overlays/types.d.ts +67 -0
  521. package/components/stream/overlays/types.d.ts.map +1 -0
  522. package/components/stream/overlays/types.js +7 -0
  523. package/components/stream/overlays/useOverlayLayout.d.ts +27 -0
  524. package/components/stream/overlays/useOverlayLayout.d.ts.map +1 -0
  525. package/components/stream/overlays/useOverlayLayout.js +162 -0
  526. package/components/trajectory-format.d.ts +6 -0
  527. package/components/trajectory-format.d.ts.map +1 -0
  528. package/components/trajectory-format.js +43 -0
  529. package/components/ui-badges.d.ts +23 -0
  530. package/components/ui-badges.d.ts.map +1 -0
  531. package/components/ui-badges.js +38 -0
  532. package/components/ui-switch.d.ts +14 -0
  533. package/components/ui-switch.d.ts.map +1 -0
  534. package/components/ui-switch.js +15 -0
  535. package/components/vector-browser-three.d.ts +4 -0
  536. package/components/vector-browser-three.d.ts.map +1 -0
  537. package/components/vector-browser-three.js +21 -0
  538. package/config/branding.d.ts +49 -0
  539. package/config/branding.d.ts.map +1 -0
  540. package/config/branding.js +16 -0
  541. package/config/config-catalog.d.ts +376 -0
  542. package/config/config-catalog.d.ts.map +1 -0
  543. package/config/config-catalog.js +724 -0
  544. package/config/config-field.d.ts +68 -0
  545. package/config/config-field.d.ts.map +1 -0
  546. package/config/config-field.js +840 -0
  547. package/config/config-renderer.d.ts +176 -0
  548. package/config/config-renderer.d.ts.map +1 -0
  549. package/config/config-renderer.js +405 -0
  550. package/config/index.d.ts +6 -0
  551. package/config/index.d.ts.map +1 -0
  552. package/config/index.js +5 -0
  553. package/config/ui-renderer.d.ts +26 -0
  554. package/config/ui-renderer.d.ts.map +1 -0
  555. package/config/ui-renderer.js +815 -0
  556. package/config/ui-spec.d.ts +164 -0
  557. package/config/ui-spec.d.ts.map +1 -0
  558. package/config/ui-spec.js +13 -0
  559. package/events/index.d.ts +47 -0
  560. package/events/index.d.ts.map +1 -0
  561. package/events/index.js +43 -0
  562. package/hooks/index.d.ts +15 -0
  563. package/hooks/index.d.ts.map +1 -0
  564. package/hooks/useBugReport.d.ts +14 -0
  565. package/hooks/useBugReport.d.ts.map +1 -0
  566. package/hooks/useBugReport.js +18 -0
  567. package/hooks/useCanvasWindow.d.ts +38 -0
  568. package/hooks/useCanvasWindow.d.ts.map +1 -0
  569. package/hooks/useCanvasWindow.js +273 -0
  570. package/hooks/useChatAvatarVoice.d.ts +10 -0
  571. package/hooks/useChatAvatarVoice.d.ts.map +1 -0
  572. package/hooks/useChatAvatarVoice.js +71 -0
  573. package/hooks/useClickOutside.d.ts +6 -0
  574. package/hooks/useClickOutside.d.ts.map +1 -0
  575. package/hooks/useClickOutside.js +25 -0
  576. package/hooks/useContextMenu.d.ts +17 -0
  577. package/hooks/useContextMenu.d.ts.map +1 -0
  578. package/hooks/useContextMenu.js +100 -0
  579. package/hooks/useKeyboardShortcuts.d.ts +17 -0
  580. package/hooks/useKeyboardShortcuts.d.ts.map +1 -0
  581. package/hooks/useKeyboardShortcuts.js +67 -0
  582. package/hooks/useLifoSync.d.ts +18 -0
  583. package/hooks/useLifoSync.d.ts.map +1 -0
  584. package/hooks/useLifoSync.js +113 -0
  585. package/hooks/useMemoryMonitor.d.ts +87 -0
  586. package/hooks/useMemoryMonitor.d.ts.map +1 -0
  587. package/hooks/useMemoryMonitor.js +209 -0
  588. package/hooks/useRenderGuard.d.ts +17 -0
  589. package/hooks/useRenderGuard.d.ts.map +1 -0
  590. package/hooks/useRenderGuard.js +36 -0
  591. package/hooks/useRetakeCapture.d.ts +12 -0
  592. package/hooks/useRetakeCapture.d.ts.map +1 -0
  593. package/hooks/useRetakeCapture.js +60 -0
  594. package/hooks/useStreamPopoutNavigation.d.ts +3 -0
  595. package/hooks/useStreamPopoutNavigation.d.ts.map +1 -0
  596. package/hooks/useStreamPopoutNavigation.js +17 -0
  597. package/hooks/useTimeout.d.ts +11 -0
  598. package/hooks/useTimeout.d.ts.map +1 -0
  599. package/hooks/useTimeout.js +32 -0
  600. package/hooks/useVoiceChat.d.ts +94 -0
  601. package/hooks/useVoiceChat.d.ts.map +1 -0
  602. package/hooks/useVoiceChat.js +1074 -0
  603. package/hooks/useWhatsAppPairing.d.ts +11 -0
  604. package/hooks/useWhatsAppPairing.d.ts.map +1 -0
  605. package/hooks/useWhatsAppPairing.js +95 -0
  606. package/i18n/index.d.ts +7 -0
  607. package/i18n/index.d.ts.map +1 -0
  608. package/i18n/index.js +53 -0
  609. package/i18n/locales/en.json +1239 -0
  610. package/i18n/locales/es.json +1236 -0
  611. package/i18n/locales/ko.json +1236 -0
  612. package/i18n/locales/pt.json +1236 -0
  613. package/i18n/locales/zh-CN.json +1236 -0
  614. package/i18n/messages.d.ts +6 -0
  615. package/i18n/messages.d.ts.map +1 -0
  616. package/i18n/messages.js +14 -0
  617. package/index.d.ts +5 -0
  618. package/index.d.ts.map +1 -0
  619. package/navigation/index.d.ts +27 -0
  620. package/navigation/index.d.ts.map +1 -0
  621. package/navigation/index.js +232 -0
  622. package/onboarding-config.d.ts +25 -0
  623. package/onboarding-config.d.ts.map +1 -0
  624. package/onboarding-config.js +76 -0
  625. package/package.json +143 -53
  626. package/platform/browser-launch.d.ts +2 -0
  627. package/platform/browser-launch.d.ts.map +1 -0
  628. package/platform/browser-launch.js +109 -0
  629. package/platform/index.d.ts +14 -0
  630. package/platform/index.d.ts.map +1 -0
  631. package/platform/index.js +24 -0
  632. package/platform/init.d.ts +40 -0
  633. package/platform/init.d.ts.map +1 -0
  634. package/platform/init.js +160 -0
  635. package/platform/lifo.d.ts +51 -0
  636. package/platform/lifo.d.ts.map +1 -0
  637. package/platform/lifo.js +138 -0
  638. package/providers/index.d.ts +19 -0
  639. package/providers/index.d.ts.map +1 -0
  640. package/providers/index.js +80 -0
  641. package/shell-params.d.ts +12 -0
  642. package/shell-params.d.ts.map +1 -0
  643. package/shell-params.js +19 -0
  644. package/state/AppContext.d.ts +12 -0
  645. package/state/AppContext.d.ts.map +1 -0
  646. package/state/AppContext.js +5060 -0
  647. package/state/index.d.ts +7 -0
  648. package/state/index.d.ts.map +1 -0
  649. package/state/internal.d.ts +7 -0
  650. package/state/internal.d.ts.map +1 -0
  651. package/state/internal.js +6 -0
  652. package/state/onboarding-resume.d.ts +11 -0
  653. package/state/onboarding-resume.d.ts.map +1 -0
  654. package/state/onboarding-resume.js +189 -0
  655. package/state/parsers.d.ts +26 -0
  656. package/state/parsers.d.ts.map +1 -0
  657. package/state/parsers.js +255 -0
  658. package/state/persistence.d.ts +59 -0
  659. package/state/persistence.d.ts.map +1 -0
  660. package/state/persistence.js +326 -0
  661. package/state/shell-routing.d.ts +12 -0
  662. package/state/shell-routing.d.ts.map +1 -0
  663. package/state/shell-routing.js +25 -0
  664. package/state/types.d.ts +421 -0
  665. package/state/types.d.ts.map +1 -0
  666. package/state/types.js +75 -0
  667. package/state/ui-preferences.d.ts +3 -0
  668. package/state/ui-preferences.d.ts.map +1 -0
  669. package/state/ui-preferences.js +1 -0
  670. package/state/useApp.d.ts +4 -0
  671. package/state/useApp.d.ts.map +1 -0
  672. package/state/useApp.js +22 -0
  673. package/state/vrm.d.ts +30 -0
  674. package/state/vrm.d.ts.map +1 -0
  675. package/state/vrm.js +82 -0
  676. package/styles/anime.css +6321 -0
  677. package/styles/onboarding-game.css +1092 -0
  678. package/types/index.d.ts +657 -0
  679. package/types/index.d.ts.map +1 -0
  680. package/types/index.js +1 -0
  681. package/utils/asset-url.d.ts +26 -0
  682. package/utils/asset-url.d.ts.map +1 -0
  683. package/utils/asset-url.js +99 -0
  684. package/utils/assistant-text.d.ts +2 -0
  685. package/utils/assistant-text.d.ts.map +1 -0
  686. package/utils/assistant-text.js +161 -0
  687. package/utils/clipboard.d.ts +2 -0
  688. package/utils/clipboard.d.ts.map +1 -0
  689. package/utils/clipboard.js +38 -0
  690. package/utils/desktop-dialogs.d.ts +19 -0
  691. package/utils/desktop-dialogs.d.ts.map +1 -0
  692. package/utils/desktop-dialogs.js +50 -0
  693. package/utils/eliza-globals.d.ts +11 -0
  694. package/utils/eliza-globals.d.ts.map +1 -0
  695. package/utils/eliza-globals.js +33 -0
  696. package/utils/index.d.ts +8 -0
  697. package/utils/index.d.ts.map +1 -0
  698. package/utils/number-parsing.d.ts +44 -0
  699. package/utils/number-parsing.d.ts.map +1 -0
  700. package/utils/number-parsing.js +56 -0
  701. package/utils/openExternalUrl.d.ts +2 -0
  702. package/utils/openExternalUrl.d.ts.map +1 -0
  703. package/utils/openExternalUrl.js +17 -0
  704. package/utils/spoken-text.d.ts +2 -0
  705. package/utils/spoken-text.d.ts.map +1 -0
  706. package/utils/spoken-text.js +56 -0
  707. package/utils/streaming-text.d.ts +3 -0
  708. package/utils/streaming-text.d.ts.map +1 -0
  709. package/utils/streaming-text.js +87 -0
  710. package/voice/index.d.ts +2 -0
  711. package/voice/index.d.ts.map +1 -0
  712. package/voice/types.d.ts +25 -0
  713. package/voice/types.d.ts.map +1 -0
  714. package/voice/types.js +166 -0
  715. package/wallet-rpc.d.ts +8 -0
  716. package/wallet-rpc.d.ts.map +1 -0
  717. package/wallet-rpc.js +131 -0
  718. package/.turbo/turbo-build.log +0 -5
  719. package/src/App.tsx +0 -504
  720. package/src/actions/character.test.ts +0 -139
  721. package/src/actions/character.ts +0 -334
  722. package/src/actions/chat-helpers.ts +0 -100
  723. package/src/actions/cloud.ts +0 -59
  724. package/src/actions/index.ts +0 -12
  725. package/src/actions/lifecycle.ts +0 -175
  726. package/src/actions/onboarding.ts +0 -38
  727. package/src/actions/triggers.ts +0 -190
  728. package/src/ambient.d.ts +0 -33
  729. package/src/api/client.ts +0 -5659
  730. package/src/autonomy/index.ts +0 -477
  731. package/src/bridge/capacitor-bridge.ts +0 -295
  732. package/src/bridge/electrobun-rpc.ts +0 -78
  733. package/src/bridge/electrobun-runtime.ts +0 -28
  734. package/src/bridge/native-plugins.ts +0 -138
  735. package/src/bridge/plugin-bridge.ts +0 -352
  736. package/src/bridge/storage-bridge.ts +0 -162
  737. package/src/chat/index.ts +0 -250
  738. package/src/coding/index.ts +0 -43
  739. package/src/components/AdvancedPageView.tsx +0 -382
  740. package/src/components/AgentActivityBox.tsx +0 -49
  741. package/src/components/ApiKeyConfig.tsx +0 -222
  742. package/src/components/AppsPageView.tsx +0 -52
  743. package/src/components/AppsView.tsx +0 -293
  744. package/src/components/AvatarLoader.tsx +0 -104
  745. package/src/components/AvatarSelector.tsx +0 -223
  746. package/src/components/BscTradePanel.tsx +0 -549
  747. package/src/components/BugReportModal.tsx +0 -499
  748. package/src/components/CharacterRoster.tsx +0 -143
  749. package/src/components/CharacterView.tsx +0 -1575
  750. package/src/components/ChatAvatar.test.ts +0 -97
  751. package/src/components/ChatAvatar.tsx +0 -147
  752. package/src/components/ChatComposer.tsx +0 -330
  753. package/src/components/ChatMessage.tsx +0 -448
  754. package/src/components/ChatModalView.test.tsx +0 -118
  755. package/src/components/ChatModalView.tsx +0 -125
  756. package/src/components/ChatView.tsx +0 -992
  757. package/src/components/CloudOnboarding.tsx +0 -81
  758. package/src/components/CloudSourceControls.tsx +0 -85
  759. package/src/components/CodingAgentSettingsSection.tsx +0 -537
  760. package/src/components/CommandPalette.tsx +0 -284
  761. package/src/components/CompanionSceneHost.tsx +0 -517
  762. package/src/components/CompanionShell.tsx +0 -31
  763. package/src/components/CompanionView.tsx +0 -110
  764. package/src/components/ConfigPageView.tsx +0 -763
  765. package/src/components/ConfigSaveFooter.tsx +0 -41
  766. package/src/components/ConfirmModal.tsx +0 -379
  767. package/src/components/ConnectionFailedBanner.tsx +0 -91
  768. package/src/components/ConnectorsPageView.tsx +0 -13
  769. package/src/components/ConversationsSidebar.tsx +0 -279
  770. package/src/components/CustomActionEditor.tsx +0 -1127
  771. package/src/components/CustomActionsPanel.tsx +0 -288
  772. package/src/components/CustomActionsView.tsx +0 -325
  773. package/src/components/DatabasePageView.tsx +0 -55
  774. package/src/components/DatabaseView.tsx +0 -814
  775. package/src/components/ElizaCloudDashboard.tsx +0 -1696
  776. package/src/components/EmotePicker.tsx +0 -529
  777. package/src/components/ErrorBoundary.tsx +0 -76
  778. package/src/components/FineTuningView.tsx +0 -1080
  779. package/src/components/FlaminaGuide.test.tsx +0 -61
  780. package/src/components/FlaminaGuide.tsx +0 -212
  781. package/src/components/GameView.tsx +0 -551
  782. package/src/components/GameViewOverlay.tsx +0 -133
  783. package/src/components/GlobalEmoteOverlay.tsx +0 -152
  784. package/src/components/Header.test.tsx +0 -413
  785. package/src/components/Header.tsx +0 -400
  786. package/src/components/HeartbeatsView.tsx +0 -1003
  787. package/src/components/InventoryView.tsx +0 -393
  788. package/src/components/KnowledgeView.tsx +0 -1128
  789. package/src/components/LanguageDropdown.tsx +0 -192
  790. package/src/components/LifoMonitorPanel.tsx +0 -196
  791. package/src/components/LifoSandboxView.tsx +0 -499
  792. package/src/components/LoadingScreen.tsx +0 -112
  793. package/src/components/LogsPageView.tsx +0 -17
  794. package/src/components/LogsView.tsx +0 -239
  795. package/src/components/MediaGalleryView.tsx +0 -431
  796. package/src/components/MediaSettingsSection.tsx +0 -893
  797. package/src/components/MessageContent.tsx +0 -815
  798. package/src/components/MiladyBar.tsx +0 -103
  799. package/src/components/MiladyBarSettings.tsx +0 -872
  800. package/src/components/OnboardingWizard.test.tsx +0 -104
  801. package/src/components/OnboardingWizard.tsx +0 -249
  802. package/src/components/PairingView.tsx +0 -109
  803. package/src/components/PermissionsSection.tsx +0 -1184
  804. package/src/components/PluginsPageView.tsx +0 -9
  805. package/src/components/PluginsView.tsx +0 -3129
  806. package/src/components/ProviderSwitcher.tsx +0 -903
  807. package/src/components/RestartBanner.tsx +0 -76
  808. package/src/components/RuntimeView.tsx +0 -460
  809. package/src/components/SaveCommandModal.tsx +0 -211
  810. package/src/components/SecretsView.tsx +0 -569
  811. package/src/components/SecurityPageView.tsx +0 -242
  812. package/src/components/SettingsView.tsx +0 -825
  813. package/src/components/ShellOverlays.tsx +0 -41
  814. package/src/components/ShortcutsOverlay.tsx +0 -155
  815. package/src/components/SkillsView.tsx +0 -1435
  816. package/src/components/StartupFailureView.tsx +0 -63
  817. package/src/components/StreamView.tsx +0 -481
  818. package/src/components/StripeEmbeddedCheckout.tsx +0 -155
  819. package/src/components/SubscriptionStatus.tsx +0 -640
  820. package/src/components/SystemWarningBanner.tsx +0 -71
  821. package/src/components/ThemeToggle.tsx +0 -103
  822. package/src/components/TrajectoriesView.tsx +0 -526
  823. package/src/components/TrajectoryDetailView.tsx +0 -426
  824. package/src/components/VectorBrowserView.tsx +0 -1633
  825. package/src/components/VoiceConfigView.tsx +0 -674
  826. package/src/components/VrmStage.test.ts +0 -176
  827. package/src/components/VrmStage.tsx +0 -309
  828. package/src/components/WhatsAppQrOverlay.tsx +0 -230
  829. package/src/components/__tests__/chainConfig.test.ts +0 -220
  830. package/src/components/apps/AppDetailPane.tsx +0 -242
  831. package/src/components/apps/AppsCatalogGrid.tsx +0 -137
  832. package/src/components/apps/extensions/registry.ts +0 -13
  833. package/src/components/apps/extensions/types.ts +0 -9
  834. package/src/components/apps/helpers.ts +0 -43
  835. package/src/components/avatar/VrmAnimationLoader.test.ts +0 -164
  836. package/src/components/avatar/VrmAnimationLoader.ts +0 -151
  837. package/src/components/avatar/VrmBlinkController.ts +0 -118
  838. package/src/components/avatar/VrmCameraManager.ts +0 -407
  839. package/src/components/avatar/VrmEngine.ts +0 -2767
  840. package/src/components/avatar/VrmFootShadow.ts +0 -96
  841. package/src/components/avatar/VrmViewer.tsx +0 -421
  842. package/src/components/avatar/__tests__/VrmCameraManager.test.ts +0 -168
  843. package/src/components/avatar/__tests__/VrmEngine.test.ts +0 -1574
  844. package/src/components/avatar/mixamoVRMRigMap.ts +0 -62
  845. package/src/components/avatar/retargetMixamoFbxToVrm.ts +0 -144
  846. package/src/components/avatar/retargetMixamoGltfToVrm.ts +0 -119
  847. package/src/components/chainConfig.ts +0 -400
  848. package/src/components/companion/CompanionHeader.tsx +0 -50
  849. package/src/components/companion/CompanionSceneHost.tsx +0 -5
  850. package/src/components/companion/VrmStage.tsx +0 -2
  851. package/src/components/companion/__tests__/walletUtils.test.ts +0 -742
  852. package/src/components/companion/index.ts +0 -18
  853. package/src/components/companion/walletUtils.ts +0 -290
  854. package/src/components/companion-shell-styles.test.ts +0 -142
  855. package/src/components/companion-shell-styles.ts +0 -270
  856. package/src/components/confirm-delete-control.tsx +0 -69
  857. package/src/components/conversations/ConversationListItem.tsx +0 -185
  858. package/src/components/conversations/conversation-utils.ts +0 -151
  859. package/src/components/format.ts +0 -131
  860. package/src/components/index.ts +0 -96
  861. package/src/components/inventory/CopyableAddress.tsx +0 -41
  862. package/src/components/inventory/InventoryToolbar.tsx +0 -142
  863. package/src/components/inventory/NftGrid.tsx +0 -99
  864. package/src/components/inventory/TokenLogo.tsx +0 -71
  865. package/src/components/inventory/TokensTable.tsx +0 -216
  866. package/src/components/inventory/constants.ts +0 -170
  867. package/src/components/inventory/index.ts +0 -29
  868. package/src/components/inventory/media-url.test.ts +0 -38
  869. package/src/components/inventory/media-url.ts +0 -36
  870. package/src/components/inventory/useInventoryData.ts +0 -460
  871. package/src/components/knowledge-upload-image.ts +0 -215
  872. package/src/components/labels.ts +0 -46
  873. package/src/components/milady-bar/CloudCreditsChip.tsx +0 -61
  874. package/src/components/milady-bar/ProviderDropdown.tsx +0 -166
  875. package/src/components/milady-bar/WalletSummary.tsx +0 -61
  876. package/src/components/milady-bar/index.ts +0 -3
  877. package/src/components/onboarding/ActivateStep.tsx +0 -34
  878. package/src/components/onboarding/ConnectionStep.tsx +0 -1591
  879. package/src/components/onboarding/IdentityStep.tsx +0 -251
  880. package/src/components/onboarding/OnboardingPanel.tsx +0 -39
  881. package/src/components/onboarding/OnboardingStepNav.tsx +0 -41
  882. package/src/components/onboarding/PermissionsStep.tsx +0 -20
  883. package/src/components/onboarding/RpcStep.tsx +0 -402
  884. package/src/components/permissions/PermissionIcon.tsx +0 -25
  885. package/src/components/permissions/StreamingPermissions.tsx +0 -413
  886. package/src/components/plugins/showcase-data.ts +0 -481
  887. package/src/components/shared/ShellHeaderControls.tsx +0 -198
  888. package/src/components/shared-companion-scene-context.ts +0 -15
  889. package/src/components/skeletons.tsx +0 -88
  890. package/src/components/stream/ActivityFeed.tsx +0 -113
  891. package/src/components/stream/AvatarPip.tsx +0 -10
  892. package/src/components/stream/ChatContent.tsx +0 -126
  893. package/src/components/stream/ChatTicker.tsx +0 -55
  894. package/src/components/stream/IdleContent.tsx +0 -73
  895. package/src/components/stream/StatusBar.tsx +0 -463
  896. package/src/components/stream/StreamSettings.tsx +0 -506
  897. package/src/components/stream/StreamTerminal.tsx +0 -94
  898. package/src/components/stream/StreamVoiceConfig.tsx +0 -160
  899. package/src/components/stream/helpers.ts +0 -134
  900. package/src/components/stream/overlays/OverlayLayer.tsx +0 -75
  901. package/src/components/stream/overlays/built-in/ActionTickerWidget.tsx +0 -64
  902. package/src/components/stream/overlays/built-in/AlertPopupWidget.tsx +0 -87
  903. package/src/components/stream/overlays/built-in/BrandingWidget.tsx +0 -51
  904. package/src/components/stream/overlays/built-in/CustomHtmlWidget.tsx +0 -105
  905. package/src/components/stream/overlays/built-in/PeonGlassWidget.tsx +0 -265
  906. package/src/components/stream/overlays/built-in/PeonHudWidget.tsx +0 -247
  907. package/src/components/stream/overlays/built-in/PeonSakuraWidget.tsx +0 -278
  908. package/src/components/stream/overlays/built-in/ThoughtBubbleWidget.tsx +0 -77
  909. package/src/components/stream/overlays/built-in/ViewerCountWidget.tsx +0 -46
  910. package/src/components/stream/overlays/built-in/index.ts +0 -13
  911. package/src/components/stream/overlays/registry.ts +0 -22
  912. package/src/components/stream/overlays/types.ts +0 -90
  913. package/src/components/stream/overlays/useOverlayLayout.ts +0 -218
  914. package/src/components/trajectory-format.ts +0 -50
  915. package/src/components/ui-badges.tsx +0 -109
  916. package/src/components/ui-switch.tsx +0 -57
  917. package/src/components/vector-browser-three.ts +0 -29
  918. package/src/config/branding.ts +0 -67
  919. package/src/config/config-catalog.ts +0 -1092
  920. package/src/config/config-field.tsx +0 -1924
  921. package/src/config/config-renderer.tsx +0 -734
  922. package/src/config/index.ts +0 -12
  923. package/src/config/ui-renderer.tsx +0 -1751
  924. package/src/config/ui-spec.ts +0 -256
  925. package/src/events/index.ts +0 -96
  926. package/src/hooks/useBugReport.tsx +0 -43
  927. package/src/hooks/useCanvasWindow.ts +0 -372
  928. package/src/hooks/useChatAvatarVoice.ts +0 -111
  929. package/src/hooks/useClickOutside.ts +0 -31
  930. package/src/hooks/useContextMenu.ts +0 -127
  931. package/src/hooks/useKeyboardShortcuts.ts +0 -86
  932. package/src/hooks/useLifoSync.ts +0 -143
  933. package/src/hooks/useMemoryMonitor.ts +0 -334
  934. package/src/hooks/useMiladyBar.ts +0 -594
  935. package/src/hooks/useRenderGuard.ts +0 -43
  936. package/src/hooks/useRetakeCapture.ts +0 -68
  937. package/src/hooks/useStreamPopoutNavigation.ts +0 -27
  938. package/src/hooks/useTimeout.ts +0 -37
  939. package/src/hooks/useVoiceChat.ts +0 -1442
  940. package/src/hooks/useWhatsAppPairing.ts +0 -123
  941. package/src/i18n/index.ts +0 -76
  942. package/src/i18n/locales/en.json +0 -1195
  943. package/src/i18n/locales/es.json +0 -1195
  944. package/src/i18n/locales/ko.json +0 -1195
  945. package/src/i18n/locales/pt.json +0 -1195
  946. package/src/i18n/locales/zh-CN.json +0 -1195
  947. package/src/i18n/messages.ts +0 -21
  948. package/src/navigation/index.ts +0 -286
  949. package/src/navigation.test.ts +0 -189
  950. package/src/onboarding-config.test.ts +0 -104
  951. package/src/onboarding-config.ts +0 -122
  952. package/src/platform/browser-launch.test.ts +0 -94
  953. package/src/platform/browser-launch.ts +0 -149
  954. package/src/platform/index.ts +0 -58
  955. package/src/platform/init.ts +0 -238
  956. package/src/platform/lifo.ts +0 -225
  957. package/src/providers/index.ts +0 -108
  958. package/src/shell-params.test.ts +0 -48
  959. package/src/shell-params.ts +0 -36
  960. package/src/state/AppContext.tsx +0 -6415
  961. package/src/state/internal.ts +0 -91
  962. package/src/state/onboarding-resume.test.ts +0 -135
  963. package/src/state/onboarding-resume.ts +0 -263
  964. package/src/state/parsers.test.ts +0 -124
  965. package/src/state/parsers.ts +0 -309
  966. package/src/state/persistence.ts +0 -379
  967. package/src/state/shell-routing.ts +0 -39
  968. package/src/state/types.ts +0 -724
  969. package/src/state/ui-preferences.ts +0 -3
  970. package/src/state/useApp.ts +0 -23
  971. package/src/state/vrm.ts +0 -108
  972. package/src/styles/anime.css +0 -6324
  973. package/src/styles/onboarding-game.css +0 -976
  974. package/src/types/index.ts +0 -715
  975. package/src/types/react-test-renderer.d.ts +0 -45
  976. package/src/utils/asset-url.ts +0 -110
  977. package/src/utils/assistant-text.ts +0 -172
  978. package/src/utils/clipboard.ts +0 -41
  979. package/src/utils/desktop-dialogs.ts +0 -80
  980. package/src/utils/eliza-globals.ts +0 -44
  981. package/src/utils/number-parsing.ts +0 -125
  982. package/src/utils/openExternalUrl.ts +0 -20
  983. package/src/utils/spoken-text.ts +0 -65
  984. package/src/utils/streaming-text.ts +0 -120
  985. package/src/voice/types.ts +0 -197
  986. package/src/wallet-rpc.ts +0 -176
  987. package/test/app/AppContext.pty-sessions.test.tsx +0 -143
  988. package/test/app/MessageContent.test.tsx +0 -366
  989. package/test/app/PermissionsOnboarding.test.tsx +0 -358
  990. package/test/app/PermissionsSection.test.tsx +0 -575
  991. package/test/app/advanced-trajectory-fine-tuning.e2e.test.ts +0 -396
  992. package/test/app/agent-activity-box.test.tsx +0 -132
  993. package/test/app/agent-transfer-lock.test.ts +0 -279
  994. package/test/app/api-client-electrobun-fallback.test.ts +0 -139
  995. package/test/app/api-client-electron-fallback.test.ts +0 -139
  996. package/test/app/api-client-timeout.test.ts +0 -75
  997. package/test/app/api-client-ws.test.ts +0 -98
  998. package/test/app/api-client.ws-max-reconnect.test.ts +0 -139
  999. package/test/app/api-client.ws-reconnect.test.ts +0 -157
  1000. package/test/app/app-context-autonomy-events.test.ts +0 -559
  1001. package/test/app/apps-page-view.test.ts +0 -114
  1002. package/test/app/apps-view.test.ts +0 -768
  1003. package/test/app/autonomous-workflows.e2e.test.ts +0 -765
  1004. package/test/app/autonomy-events.test.ts +0 -150
  1005. package/test/app/avatar-selector.test.tsx +0 -52
  1006. package/test/app/bsc-trade-panel.test.tsx +0 -134
  1007. package/test/app/bug-report-modal.test.tsx +0 -353
  1008. package/test/app/character-action-bar-visibility.test.ts +0 -70
  1009. package/test/app/character-customization.e2e.test.ts +0 -1384
  1010. package/test/app/character-save-journey.test.ts +0 -1245
  1011. package/test/app/chat-advanced-features.e2e.test.ts +0 -706
  1012. package/test/app/chat-composer.test.tsx +0 -181
  1013. package/test/app/chat-journey.test.ts +0 -1075
  1014. package/test/app/chat-language-header.test.ts +0 -64
  1015. package/test/app/chat-message.test.tsx +0 -222
  1016. package/test/app/chat-modal-view.test.tsx +0 -191
  1017. package/test/app/chat-routine-filter.test.ts +0 -96
  1018. package/test/app/chat-send-lock.test.ts +0 -1465
  1019. package/test/app/chat-stream-api-client.test.tsx +0 -390
  1020. package/test/app/chat-view-game-modal.test.tsx +0 -661
  1021. package/test/app/chat-view.test.tsx +0 -877
  1022. package/test/app/cloud-api.e2e.test.ts +0 -258
  1023. package/test/app/cloud-login-flow.e2e.test.ts +0 -494
  1024. package/test/app/cloud-login-lock.test.ts +0 -416
  1025. package/test/app/command-palette.test.tsx +0 -184
  1026. package/test/app/command-registry.test.ts +0 -75
  1027. package/test/app/companion-greeting-wave.test.tsx +0 -431
  1028. package/test/app/companion-scene-host.test.tsx +0 -85
  1029. package/test/app/companion-stale-conversation.test.tsx +0 -447
  1030. package/test/app/companion-view.test.tsx +0 -690
  1031. package/test/app/confirm-delete-control.test.ts +0 -79
  1032. package/test/app/confirm-modal.test.tsx +0 -219
  1033. package/test/app/connection-mode-persistence.test.ts +0 -411
  1034. package/test/app/connectors-ui.e2e.test.ts +0 -508
  1035. package/test/app/conversations-sidebar-game-modal.test.tsx +0 -265
  1036. package/test/app/conversations-sidebar.test.tsx +0 -185
  1037. package/test/app/custom-actions-smoke.test.ts +0 -387
  1038. package/test/app/custom-avatar-api-client.test.ts +0 -207
  1039. package/test/app/desktop-utils.test.ts +0 -145
  1040. package/test/app/electrobun-rpc-bridge.test.ts +0 -83
  1041. package/test/app/events.test.ts +0 -88
  1042. package/test/app/export-import-flows.e2e.test.ts +0 -700
  1043. package/test/app/fine-tuning-view.test.ts +0 -471
  1044. package/test/app/game-view-auth-session.test.tsx +0 -187
  1045. package/test/app/game-view.test.ts +0 -444
  1046. package/test/app/global-emote-overlay.test.tsx +0 -106
  1047. package/test/app/header-status.test.tsx +0 -149
  1048. package/test/app/i18n.test.ts +0 -152
  1049. package/test/app/inventory-bsc-view.test.ts +0 -940
  1050. package/test/app/knowledge-ui.e2e.test.ts +0 -762
  1051. package/test/app/knowledge-upload-helpers.test.ts +0 -124
  1052. package/test/app/lifecycle-lock.test.ts +0 -267
  1053. package/test/app/lifo-popout-utils.test.ts +0 -208
  1054. package/test/app/lifo-safe-endpoint.test.ts +0 -34
  1055. package/test/app/loading-screen.test.tsx +0 -45
  1056. package/test/app/memory-monitor.test.ts +0 -331
  1057. package/test/app/milady-bar-regression.test.tsx +0 -519
  1058. package/test/app/milady-bar-settings.test.tsx +0 -1056
  1059. package/test/app/milady-bar.test.tsx +0 -583
  1060. package/test/app/navigation.test.tsx +0 -22
  1061. package/test/app/onboarding-e2e-journey.test.ts +0 -1409
  1062. package/test/app/onboarding-finish-lock.test.ts +0 -676
  1063. package/test/app/onboarding-language.test.tsx +0 -160
  1064. package/test/app/onboarding-steps.test.tsx +0 -375
  1065. package/test/app/open-external-url.test.ts +0 -65
  1066. package/test/app/pages-navigation-smoke.e2e.test.ts +0 -646
  1067. package/test/app/pairing-lock.test.ts +0 -260
  1068. package/test/app/pairing-view.test.tsx +0 -74
  1069. package/test/app/permissions-section.test.ts +0 -432
  1070. package/test/app/plugin-bridge.test.ts +0 -109
  1071. package/test/app/plugins-ui.e2e.test.ts +0 -605
  1072. package/test/app/plugins-view-game-modal.test.tsx +0 -686
  1073. package/test/app/plugins-view-toggle-restart.test.ts +0 -129
  1074. package/test/app/provider-dropdown-default.test.tsx +0 -300
  1075. package/test/app/restart-banner.test.tsx +0 -205
  1076. package/test/app/retake-capture.test.ts +0 -84
  1077. package/test/app/sandbox-api-client.test.ts +0 -108
  1078. package/test/app/save-command-modal.test.tsx +0 -109
  1079. package/test/app/secrets-view.test.tsx +0 -92
  1080. package/test/app/settings-control-styles.test.tsx +0 -142
  1081. package/test/app/settings-reset.e2e.test.ts +0 -726
  1082. package/test/app/settings-sections.e2e.test.ts +0 -614
  1083. package/test/app/shared-format.test.ts +0 -44
  1084. package/test/app/shared-switch.test.ts +0 -69
  1085. package/test/app/shell-mode-switching.e2e.test.ts +0 -841
  1086. package/test/app/shell-mode-tab-memory.test.tsx +0 -58
  1087. package/test/app/shell-overlays.test.tsx +0 -50
  1088. package/test/app/shortcuts-overlay.test.tsx +0 -111
  1089. package/test/app/sse-interruption.test.ts +0 -122
  1090. package/test/app/startup-asset-missing.e2e.test.ts +0 -126
  1091. package/test/app/startup-backend-missing.e2e.test.ts +0 -126
  1092. package/test/app/startup-chat.e2e.test.ts +0 -323
  1093. package/test/app/startup-conversation-restore.test.tsx +0 -381
  1094. package/test/app/startup-failure-view.test.tsx +0 -103
  1095. package/test/app/startup-onboarding.e2e.test.ts +0 -712
  1096. package/test/app/startup-timeout.test.tsx +0 -80
  1097. package/test/app/startup-token-401.e2e.test.ts +0 -103
  1098. package/test/app/stream-helpers.test.ts +0 -46
  1099. package/test/app/stream-popout-navigation.test.tsx +0 -41
  1100. package/test/app/stream-status-bar.test.tsx +0 -89
  1101. package/test/app/theme-toggle.test.tsx +0 -40
  1102. package/test/app/training-api-client.test.ts +0 -128
  1103. package/test/app/trajectories-view.test.tsx +0 -220
  1104. package/test/app/triggers-api-client.test.ts +0 -77
  1105. package/test/app/triggers-navigation.test.ts +0 -113
  1106. package/test/app/triggers-view.e2e.test.ts +0 -675
  1107. package/test/app/update-channel-lock.test.ts +0 -259
  1108. package/test/app/vector-browser.async-cleanup.test.tsx +0 -367
  1109. package/test/app/vector-browser.e2e.test.ts +0 -653
  1110. package/test/app/vrm-stage.test.tsx +0 -351
  1111. package/test/app/vrm-viewer.test.tsx +0 -298
  1112. package/test/app/wallet-api-save-lock.test.ts +0 -299
  1113. package/test/app/wallet-hooks.test.ts +0 -405
  1114. package/test/app/wallet-ui-flows.e2e.test.ts +0 -556
  1115. package/test/avatar/asset-url.test.ts +0 -90
  1116. package/test/avatar/avatar-selector.test.ts +0 -173
  1117. package/test/avatar/mixamo-vrm-rig-map.test.ts +0 -111
  1118. package/test/avatar/voice-chat-streaming-text.test.ts +0 -96
  1119. package/test/avatar/voice-chat.test.ts +0 -391
  1120. package/test/browser-extension/README.md +0 -138
  1121. package/test/browser-extension/test-harness.ts +0 -499
  1122. package/test/capacitor-plugins.e2e.test.ts +0 -168
  1123. package/test/test-types.ts +0 -5
  1124. package/test/ui/command-palette-commands.test.ts +0 -57
  1125. package/test/ui/ui-renderer.test.ts +0 -39
  1126. package/test/utils/assistant-text.test.ts +0 -68
  1127. package/test/utils/eliza-globals.test.ts +0 -59
  1128. package/test/utils/package-exports.test.ts +0 -70
  1129. package/test/utils/streaming-text.test.ts +0 -89
  1130. package/tsconfig.build.json +0 -19
  1131. package/tsconfig.json +0 -20
  1132. package/tsconfig.typecheck.json +0 -12
  1133. /package/{src/api/index.ts → api/index.js} +0 -0
  1134. /package/{src/bridge/index.ts → bridge/index.js} +0 -0
  1135. /package/{src/components/TriggersView.tsx → components/TriggersView.js} +0 -0
  1136. /package/{src/hooks/index.ts → hooks/index.js} +0 -0
  1137. /package/{src/index.ts → index.js} +0 -0
  1138. /package/{src/state/index.ts → state/index.js} +0 -0
  1139. /package/{src/styles → styles}/base.css +0 -0
  1140. /package/{src/styles → styles}/styles.css +0 -0
  1141. /package/{src/styles → styles}/xterm.css +0 -0
  1142. /package/{src/utils/index.ts → utils/index.js} +0 -0
  1143. /package/{src/voice/index.ts → voice/index.js} +0 -0
@@ -1,1696 +0,0 @@
1
- import {
2
- Button,
3
- Dialog,
4
- DialogContent,
5
- DialogHeader,
6
- DialogTitle,
7
- Input,
8
- SectionCard,
9
- } from "@elizaos/ui";
10
- import {
11
- AlertCircle,
12
- CircleDollarSign,
13
- CreditCard,
14
- ExternalLink,
15
- LayoutDashboard,
16
- Loader2,
17
- Plus,
18
- RefreshCw,
19
- Server,
20
- Shield,
21
- Terminal,
22
- Trash2,
23
- Wallet,
24
- X,
25
- Zap,
26
- } from "lucide-react";
27
- import { useCallback, useEffect, useReducer, useRef, useState } from "react";
28
- import {
29
- type CloudBillingCheckoutResponse,
30
- type CloudBillingSettings,
31
- type CloudBillingSummary,
32
- type CloudCompatAgent,
33
- client,
34
- } from "../api";
35
- import { useApp } from "../state";
36
- import { openExternalUrl } from "../utils";
37
- import { StripeEmbeddedCheckout } from "./StripeEmbeddedCheckout";
38
-
39
- const ELIZA_CLOUD_LOGIN_URL =
40
- "https://www.elizacloud.ai/login?returnTo=%2Fdashboard%2Feliza";
41
- const ELIZA_CLOUD_INSTANCES_URL = "https://www.elizacloud.ai/dashboard/eliza";
42
- const BILLING_PRESET_AMOUNTS = [10, 25, 100];
43
-
44
- const STATUS_BADGE: Record<string, { label: string; className: string }> = {
45
- running: {
46
- label: "Running",
47
- className: "bg-ok/10 text-ok border-ok/20",
48
- },
49
- queued: {
50
- label: "Queued",
51
- className: "bg-warn/10 text-warn border-warn/20",
52
- },
53
- provisioning: {
54
- label: "Provisioning",
55
- className: "bg-accent/10 text-txt border-accent/20",
56
- },
57
- stopped: {
58
- label: "Stopped",
59
- className: "bg-muted/10 text-muted border-border/40",
60
- },
61
- failed: {
62
- label: "Failed",
63
- className: "bg-danger/10 text-danger border-danger/20",
64
- },
65
- };
66
-
67
- function AgentStatusBadge({ status }: { status: string }) {
68
- const badge = STATUS_BADGE[status] ?? STATUS_BADGE.stopped;
69
- return (
70
- <span
71
- className={`text-[10px] px-2 py-0.5 rounded-full font-bold uppercase tracking-wider border ${badge?.className}`}
72
- >
73
- {badge?.label}
74
- </span>
75
- );
76
- }
77
-
78
- function CloudAgentCard({
79
- agent,
80
- onDelete,
81
- deleting,
82
- launching,
83
- onLaunch,
84
- onSelect,
85
- }: {
86
- agent: CloudCompatAgent;
87
- onDelete: (id: string) => void;
88
- deleting: boolean;
89
- launching: boolean;
90
- onLaunch: (id: string) => void;
91
- onSelect?: (id: string) => void;
92
- }) {
93
- return (
94
- // biome-ignore lint/a11y/useSemanticElements: cannot use button due to nested buttons
95
- <div
96
- className="rounded-2xl border border-border/50 bg-bg/30 p-5 flex flex-col justify-between gap-4 hover:border-accent/30 transition-all duration-200 cursor-pointer"
97
- onClick={() => onSelect?.(agent.agent_id)}
98
- onKeyDown={(e) => {
99
- if (e.key === "Enter" || e.key === " ") {
100
- e.preventDefault();
101
- onSelect?.(agent.agent_id);
102
- }
103
- }}
104
- role="button"
105
- tabIndex={0}
106
- >
107
- <div className="flex items-start justify-between">
108
- <div className="flex items-center gap-2">
109
- <Server className="w-4 h-4 text-txt shrink-0" />
110
- <span className="font-bold text-sm text-txt-strong truncate max-w-[140px]">
111
- {agent.agent_name || "Unnamed Agent"}
112
- </span>
113
- </div>
114
- <AgentStatusBadge status={agent.status} />
115
- </div>
116
-
117
- <div className="text-[11px] text-muted space-y-1">
118
- <div className="flex justify-between">
119
- <span>Node</span>
120
- <span className="font-mono text-txt-strong/70">
121
- {agent.node_id?.slice(0, 8) ?? "—"}
122
- </span>
123
- </div>
124
- <div className="flex justify-between">
125
- <span>Created</span>
126
- <span className="text-txt-strong/70">
127
- {new Date(agent.created_at).toLocaleDateString()}
128
- </span>
129
- </div>
130
- </div>
131
-
132
- <div className="flex gap-2 mt-1">
133
- <Button
134
- variant="outline"
135
- size="sm"
136
- className="flex-1 rounded-xl h-8 text-xs border-border/40"
137
- onClick={(event) => {
138
- event.stopPropagation();
139
- onLaunch(agent.agent_id);
140
- }}
141
- disabled={launching}
142
- >
143
- {launching ? (
144
- <Loader2 className="w-3 h-3 mr-1 animate-spin" />
145
- ) : (
146
- <ExternalLink className="w-3 h-3 mr-1" />
147
- )}
148
- Open
149
- </Button>
150
-
151
- <Button
152
- variant="outline"
153
- size="sm"
154
- className="settings-icon-button rounded-xl h-8 text-xs border-danger/30 text-danger hover:bg-danger/10"
155
- onClick={(event) => {
156
- event.stopPropagation();
157
- onDelete(agent.agent_id);
158
- }}
159
- disabled={deleting || launching}
160
- >
161
- {deleting ? (
162
- <Loader2 className="w-3 h-3 animate-spin" />
163
- ) : (
164
- <Trash2 className="w-3 h-3" />
165
- )}
166
- </Button>
167
- </div>
168
- </div>
169
- );
170
- }
171
-
172
- function isRecord(value: unknown): value is Record<string, unknown> {
173
- return typeof value === "object" && value !== null;
174
- }
175
-
176
- function unwrapBillingData<T extends Record<string, unknown>>(value: T): T {
177
- if (isRecord(value.data)) {
178
- return value.data as T;
179
- }
180
- return value;
181
- }
182
-
183
- function readString(value: unknown): string | undefined {
184
- return typeof value === "string" && value.trim() ? value : undefined;
185
- }
186
-
187
- function readNumber(value: unknown): number | null {
188
- if (typeof value === "number" && Number.isFinite(value)) return value;
189
- if (typeof value === "string" && value.trim()) {
190
- const parsed = Number(value);
191
- return Number.isFinite(parsed) ? parsed : null;
192
- }
193
- return null;
194
- }
195
-
196
- function readBoolean(value: unknown): boolean | undefined {
197
- return typeof value === "boolean" ? value : undefined;
198
- }
199
-
200
- function normalizeBillingSummary(
201
- raw: CloudBillingSummary,
202
- ): CloudBillingSummary {
203
- const source = unwrapBillingData(raw);
204
- return {
205
- ...raw,
206
- ...source,
207
- balance:
208
- readNumber(source.balance) ??
209
- readNumber((source as Record<string, unknown>).creditBalance) ??
210
- null,
211
- currency:
212
- readString(source.currency) ??
213
- readString((source as Record<string, unknown>).balanceCurrency),
214
- topUpUrl:
215
- readString(source.topUpUrl) ??
216
- readString((source as Record<string, unknown>).billingUrl),
217
- embeddedCheckoutEnabled:
218
- readBoolean(source.embeddedCheckoutEnabled) ??
219
- readBoolean((source as Record<string, unknown>).embedded),
220
- hostedCheckoutEnabled:
221
- readBoolean(source.hostedCheckoutEnabled) ??
222
- readBoolean((source as Record<string, unknown>).hosted),
223
- cryptoEnabled:
224
- readBoolean(source.cryptoEnabled) ??
225
- readBoolean((source as Record<string, unknown>).crypto),
226
- low: readBoolean(source.low),
227
- critical: readBoolean(source.critical),
228
- };
229
- }
230
-
231
- function normalizeBillingSettings(
232
- raw: CloudBillingSettings,
233
- ): CloudBillingSettings {
234
- const source = unwrapBillingData(raw);
235
- return {
236
- ...raw,
237
- ...source,
238
- settings: isRecord(source.settings) ? source.settings : raw.settings,
239
- };
240
- }
241
-
242
- function getBillingAutoTopUp(
243
- settings: CloudBillingSettings | null,
244
- ): Record<string, unknown> {
245
- const rawSettings = isRecord(settings?.settings) ? settings.settings : null;
246
- return isRecord(rawSettings?.autoTopUp) ? rawSettings.autoTopUp : {};
247
- }
248
-
249
- function getBillingLimits(
250
- settings: CloudBillingSettings | null,
251
- ): Record<string, unknown> {
252
- const rawSettings = isRecord(settings?.settings) ? settings.settings : null;
253
- return isRecord(rawSettings?.limits) ? rawSettings.limits : {};
254
- }
255
-
256
- function resolveCheckoutUrl(
257
- response: CloudBillingCheckoutResponse,
258
- ): string | null {
259
- return (
260
- readString(response.checkoutUrl) ??
261
- readString(response.url) ??
262
- readString((response as Record<string, unknown>).hostedUrl) ??
263
- null
264
- );
265
- }
266
-
267
- interface AutoTopUpFormState {
268
- amount: string;
269
- dirty: boolean;
270
- enabled: boolean;
271
- sourceKey: string;
272
- threshold: string;
273
- }
274
-
275
- type AutoTopUpFormAction =
276
- | { type: "hydrate"; next: AutoTopUpFormState; force?: boolean }
277
- | { type: "setAmount"; value: string }
278
- | { type: "setEnabled"; value: boolean }
279
- | { type: "setThreshold"; value: string };
280
-
281
- function buildAutoTopUpFormState(
282
- billingSummary: CloudBillingSummary | null,
283
- billingSettings: CloudBillingSettings | null,
284
- ): AutoTopUpFormState {
285
- const autoTopUp = getBillingAutoTopUp(billingSettings);
286
- const minimumTopUp =
287
- readNumber(
288
- (billingSummary as Record<string, unknown> | null)?.minimumTopUp,
289
- ) ?? 1;
290
- const enabled = readBoolean(autoTopUp.enabled) ?? false;
291
- const amount = String(readNumber(autoTopUp.amount) ?? minimumTopUp);
292
- const threshold = String(readNumber(autoTopUp.threshold) ?? 5);
293
- return {
294
- amount,
295
- dirty: false,
296
- enabled,
297
- sourceKey: JSON.stringify([enabled, amount, threshold]),
298
- threshold,
299
- };
300
- }
301
-
302
- function autoTopUpFormReducer(
303
- state: AutoTopUpFormState,
304
- action: AutoTopUpFormAction,
305
- ): AutoTopUpFormState {
306
- switch (action.type) {
307
- case "hydrate":
308
- if (!action.force && state.dirty) {
309
- return state;
310
- }
311
- if (state.sourceKey === action.next.sourceKey && !state.dirty) {
312
- return state;
313
- }
314
- return action.next;
315
- case "setAmount":
316
- return { ...state, amount: action.value, dirty: true };
317
- case "setEnabled":
318
- return { ...state, enabled: action.value, dirty: true };
319
- case "setThreshold":
320
- return { ...state, threshold: action.value, dirty: true };
321
- default:
322
- return state;
323
- }
324
- }
325
-
326
- export function CloudDashboard() {
327
- const {
328
- t,
329
- elizaCloudConnected,
330
- elizaCloudCredits,
331
- elizaCloudCreditsLow,
332
- elizaCloudCreditsCritical,
333
- elizaCloudTopUpUrl,
334
- elizaCloudUserId,
335
- cloudDashboardView,
336
- elizaCloudLoginBusy,
337
- handleCloudLogin,
338
- handleCloudDisconnect,
339
- elizaCloudDisconnecting: cloudDisconnecting,
340
- loadDropStatus,
341
- walletAddresses,
342
- walletBalances,
343
- retryStartup,
344
- setActionNotice,
345
- setState,
346
- setTab,
347
- } = useApp();
348
-
349
- const [refreshing, setRefreshing] = useState(false);
350
- const [billingLoading, setBillingLoading] = useState(false);
351
- const [billingError, setBillingError] = useState<string | null>(null);
352
- const [billingSummary, setBillingSummary] =
353
- useState<CloudBillingSummary | null>(null);
354
- const [billingSettings, setBillingSettings] =
355
- useState<CloudBillingSettings | null>(null);
356
- const [billingAmount, setBillingAmount] = useState("25");
357
- const [autoTopUpForm, dispatchAutoTopUpForm] = useReducer(
358
- autoTopUpFormReducer,
359
- buildAutoTopUpFormState(null, null),
360
- );
361
- const [billingSettingsBusy, setBillingSettingsBusy] = useState(false);
362
- const [checkoutBusy, setCheckoutBusy] = useState(false);
363
- const [checkoutSession, setCheckoutSession] =
364
- useState<CloudBillingCheckoutResponse | null>(null);
365
- const [checkoutDialogOpen, setCheckoutDialogOpen] = useState(false);
366
- const [cryptoBusy, setCryptoBusy] = useState(false);
367
- const [cryptoQuote, setCryptoQuote] = useState<Record<
368
- string,
369
- unknown
370
- > | null>(null);
371
- const [cryptoPayBusy, setCryptoPayBusy] = useState(false);
372
- const [cryptoPayResult, setCryptoPayResult] = useState<string | null>(null);
373
- const [cloudAgents, setCloudAgents] = useState<CloudCompatAgent[]>([]);
374
- const [agentsLoading, setAgentsLoading] = useState(false);
375
- const [agentsError, setAgentsError] = useState<string | null>(null);
376
- const [deletingAgentId, setDeletingAgentId] = useState<string | null>(null);
377
- const [launchingAgentId, setLaunchingAgentId] = useState<string | null>(null);
378
- const [selectedAgentId, setSelectedAgentId] = useState<string | null>(null);
379
- const selectedAgent = cloudAgents.find((a) => a.agent_id === selectedAgentId);
380
- const [showDeployForm, setShowDeployForm] = useState(false);
381
- const [deployAgentName, setDeployAgentName] = useState("");
382
- const [deploying, setDeploying] = useState(false);
383
- const mountedRef = useRef(true);
384
- const autoTopUpEnabled = autoTopUpForm.enabled;
385
- const autoTopUpAmount = autoTopUpForm.amount;
386
- const autoTopUpThreshold = autoTopUpForm.threshold;
387
-
388
- const fetchCloudAgents = useCallback(async () => {
389
- setAgentsLoading(true);
390
- setAgentsError(null);
391
- try {
392
- const data = await client.getCloudCompatAgents();
393
- if (!mountedRef.current) return;
394
- setCloudAgents(Array.isArray(data.data) ? data.data : []);
395
- } catch (err) {
396
- if (!mountedRef.current) return;
397
- setAgentsError(
398
- err instanceof Error ? err.message : "Failed to load cloud agents",
399
- );
400
- setCloudAgents([]);
401
- } finally {
402
- if (mountedRef.current) setAgentsLoading(false);
403
- }
404
- }, []);
405
-
406
- const fetchBillingData = useCallback(async () => {
407
- setBillingLoading(true);
408
- setBillingError(null);
409
- try {
410
- const [summaryResponse, settingsResponse] = await Promise.all([
411
- client.getCloudBillingSummary().catch((err) => ({ __error: err })),
412
- client.getCloudBillingSettings().catch((err) => ({
413
- __error: err,
414
- })),
415
- ]);
416
-
417
- if (!mountedRef.current) return;
418
-
419
- if (isRecord(summaryResponse) && "__error" in summaryResponse) {
420
- const err = summaryResponse.__error;
421
- throw err instanceof Error
422
- ? err
423
- : new Error("Billing summary unavailable.");
424
- }
425
-
426
- setBillingSummary(normalizeBillingSummary(summaryResponse));
427
-
428
- if (isRecord(settingsResponse) && !("__error" in settingsResponse)) {
429
- setBillingSettings(normalizeBillingSettings(settingsResponse));
430
- } else {
431
- setBillingSettings(null);
432
- }
433
- } catch (err) {
434
- if (!mountedRef.current) return;
435
- setBillingSummary(null);
436
- setBillingSettings(null);
437
- setBillingError(
438
- err instanceof Error ? err.message : "Failed to load billing data.",
439
- );
440
- } finally {
441
- if (mountedRef.current) {
442
- setBillingLoading(false);
443
- }
444
- }
445
- }, []);
446
-
447
- useEffect(() => {
448
- dispatchAutoTopUpForm({
449
- type: "hydrate",
450
- next: buildAutoTopUpFormState(billingSummary, billingSettings),
451
- });
452
- }, [billingSettings, billingSummary]);
453
-
454
- const handleDeleteAgent = useCallback(
455
- async (agentId: string) => {
456
- setDeletingAgentId(agentId);
457
- try {
458
- const data = await client.deleteCloudCompatAgent(agentId);
459
- if (data.success) {
460
- setCloudAgents((prev) => prev.filter((a) => a.agent_id !== agentId));
461
- }
462
- } catch {
463
- // Silently fail — user can retry
464
- } finally {
465
- setDeletingAgentId(null);
466
- if (selectedAgentId === agentId) setSelectedAgentId(null);
467
- }
468
- },
469
- [selectedAgentId],
470
- );
471
-
472
- const handleDeployAgent = useCallback(async () => {
473
- if (!deployAgentName.trim()) return;
474
- setDeploying(true);
475
- try {
476
- const response = await client.createCloudCompatAgent({
477
- agentName: deployAgentName.trim(),
478
- });
479
- if (response.success) {
480
- await fetchCloudAgents();
481
- setShowDeployForm(false);
482
- setDeployAgentName("");
483
- }
484
- } catch {
485
- // Intentionally swallow for now
486
- } finally {
487
- setDeploying(false);
488
- }
489
- }, [deployAgentName, fetchCloudAgents]);
490
-
491
- const handleLaunchAgent = useCallback(
492
- async (agentId: string) => {
493
- setLaunchingAgentId(agentId);
494
- try {
495
- const response = await client.launchCloudCompatAgent(agentId);
496
- if (!response.success || !response.data?.connection?.apiBase) {
497
- throw new Error("Eliza Cloud did not return a launch connection.");
498
- }
499
-
500
- const { connection } = response.data;
501
- client.setBaseUrl(connection.apiBase);
502
- client.setToken(connection.token);
503
- setState("startupError", null);
504
- setState("onboardingRunMode", "cloud");
505
- setState("onboardingCloudProvider", "elizacloud");
506
- setState("onboardingRemoteApiBase", connection.apiBase);
507
- setState("onboardingRemoteToken", connection.token);
508
- setState("onboardingRemoteError", null);
509
- setState("onboardingRemoteConnecting", false);
510
- setState("onboardingRemoteConnected", false);
511
- setActionNotice(
512
- "Opened managed Eliza Cloud instance.",
513
- "success",
514
- 3000,
515
- );
516
- setTab("chat");
517
- retryStartup();
518
- } catch (err) {
519
- setActionNotice(
520
- err instanceof Error
521
- ? err.message
522
- : "Failed to open Eliza Cloud instance.",
523
- "error",
524
- 4200,
525
- );
526
- } finally {
527
- if (mountedRef.current) {
528
- setLaunchingAgentId(null);
529
- }
530
- }
531
- },
532
- [retryStartup, setActionNotice, setState, setTab],
533
- );
534
-
535
- const handleRefresh = useCallback(async () => {
536
- setRefreshing(true);
537
- await Promise.all([
538
- loadDropStatus(),
539
- fetchCloudAgents(),
540
- fetchBillingData(),
541
- ]);
542
- setTimeout(() => setRefreshing(false), 600);
543
- }, [fetchBillingData, fetchCloudAgents, loadDropStatus]);
544
-
545
- const handleSaveBillingSettings = useCallback(async () => {
546
- const limits = getBillingLimits(billingSettings);
547
- const amount = Number(autoTopUpAmount);
548
- const threshold = Number(autoTopUpThreshold);
549
- const minAmount = readNumber(limits.minAmount) ?? 1;
550
- const maxAmount = readNumber(limits.maxAmount) ?? 1000;
551
- const minThreshold = readNumber(limits.minThreshold) ?? 0;
552
- const maxThreshold = readNumber(limits.maxThreshold) ?? 1000;
553
- const hasPaymentMethod =
554
- readBoolean(getBillingAutoTopUp(billingSettings).hasPaymentMethod) ??
555
- readBoolean(
556
- (billingSummary as Record<string, unknown> | null)?.hasPaymentMethod,
557
- ) ??
558
- false;
559
-
560
- if (!Number.isFinite(amount) || amount < minAmount || amount > maxAmount) {
561
- setActionNotice(
562
- `Auto top-up amount must be between $${minAmount} and $${maxAmount}.`,
563
- "error",
564
- 3600,
565
- );
566
- return;
567
- }
568
-
569
- if (
570
- !Number.isFinite(threshold) ||
571
- threshold < minThreshold ||
572
- threshold > maxThreshold
573
- ) {
574
- setActionNotice(
575
- `Auto top-up threshold must be between $${minThreshold} and $${maxThreshold}.`,
576
- "error",
577
- 3600,
578
- );
579
- return;
580
- }
581
-
582
- if (autoTopUpEnabled && !hasPaymentMethod) {
583
- setActionNotice(
584
- "Save a payment method through card checkout before enabling auto top-up.",
585
- "info",
586
- 4200,
587
- );
588
- return;
589
- }
590
-
591
- setBillingSettingsBusy(true);
592
- try {
593
- const response = await client.updateCloudBillingSettings({
594
- autoTopUp: {
595
- enabled: autoTopUpEnabled,
596
- amount,
597
- threshold,
598
- },
599
- });
600
- if (!mountedRef.current) return;
601
- const normalizedSettings = normalizeBillingSettings(response);
602
- setBillingSettings(normalizedSettings);
603
- dispatchAutoTopUpForm({
604
- type: "hydrate",
605
- next: buildAutoTopUpFormState(billingSummary, normalizedSettings),
606
- force: true,
607
- });
608
- await fetchBillingData();
609
- setActionNotice("Billing settings updated.", "success", 3200);
610
- } catch (err) {
611
- setActionNotice(
612
- err instanceof Error
613
- ? err.message
614
- : "Failed to update billing settings.",
615
- "error",
616
- 4200,
617
- );
618
- } finally {
619
- if (mountedRef.current) {
620
- setBillingSettingsBusy(false);
621
- }
622
- }
623
- }, [
624
- autoTopUpAmount,
625
- autoTopUpEnabled,
626
- autoTopUpThreshold,
627
- billingSettings,
628
- billingSummary,
629
- fetchBillingData,
630
- setActionNotice,
631
- ]);
632
-
633
- const handleStartCheckout = useCallback(async () => {
634
- const minimumTopUp =
635
- readNumber(
636
- (billingSummary as Record<string, unknown> | null)?.minimumTopUp,
637
- ) ?? 1;
638
- const amountUsd = Number(billingAmount);
639
- if (!Number.isFinite(amountUsd) || amountUsd < minimumTopUp) {
640
- setActionNotice(
641
- `Enter a top-up amount of at least $${minimumTopUp}.`,
642
- "error",
643
- 3200,
644
- );
645
- return;
646
- }
647
-
648
- setCheckoutBusy(true);
649
- try {
650
- const response = await client.createCloudBillingCheckout({
651
- amountUsd,
652
- mode: billingSummary?.embeddedCheckoutEnabled ? "embedded" : "hosted",
653
- });
654
-
655
- const clientSecret = readString(response.clientSecret);
656
- const publishableKey = readString(response.publishableKey);
657
- if (clientSecret && publishableKey) {
658
- setCheckoutSession(response);
659
- setCheckoutDialogOpen(true);
660
- return;
661
- }
662
-
663
- const checkoutUrl = resolveCheckoutUrl(response);
664
- if (checkoutUrl) {
665
- await openExternalUrl(checkoutUrl);
666
- return;
667
- }
668
-
669
- throw new Error(
670
- readString(response.message) ??
671
- "Eliza Cloud did not return a checkout session.",
672
- );
673
- } catch (err) {
674
- setActionNotice(
675
- err instanceof Error ? err.message : "Failed to start checkout.",
676
- "error",
677
- 4200,
678
- );
679
- } finally {
680
- setCheckoutBusy(false);
681
- }
682
- }, [billingAmount, billingSummary, setActionNotice]);
683
-
684
- const handleCreateCryptoQuote = useCallback(async () => {
685
- const minimumTopUp =
686
- readNumber(
687
- (billingSummary as Record<string, unknown> | null)?.minimumTopUp,
688
- ) ?? 1;
689
- const amountUsd = Number(billingAmount);
690
- if (!Number.isFinite(amountUsd) || amountUsd < minimumTopUp) {
691
- setActionNotice(
692
- `Enter a top-up amount of at least $${minimumTopUp}.`,
693
- "error",
694
- 3200,
695
- );
696
- return;
697
- }
698
-
699
- setCryptoBusy(true);
700
- setCryptoPayResult(null);
701
- try {
702
- const response = await client.createCloudBillingCryptoQuote({
703
- amountUsd,
704
- walletAddress:
705
- walletAddresses?.evmAddress ??
706
- walletAddresses?.solanaAddress ??
707
- undefined,
708
- });
709
- setCryptoQuote(response as Record<string, unknown>);
710
- } catch (err) {
711
- setCryptoQuote(null);
712
- setActionNotice(
713
- err instanceof Error ? err.message : "Failed to request crypto quote.",
714
- "error",
715
- 4200,
716
- );
717
- } finally {
718
- setCryptoBusy(false);
719
- }
720
- }, [billingAmount, billingSummary, setActionNotice, walletAddresses]);
721
-
722
- const handlePayCryptoFromAgentWallet = useCallback(async () => {
723
- if (!cryptoQuote) return;
724
-
725
- const network = readString(cryptoQuote.network)?.toLowerCase();
726
- const payToAddress =
727
- readString(cryptoQuote.payToAddress) ??
728
- readString((cryptoQuote as Record<string, unknown>).address);
729
- const amount = readString(cryptoQuote.amount);
730
- const currency = readString(cryptoQuote.currency) ?? "USDC";
731
- const tokenAddress = readString(cryptoQuote.tokenAddress);
732
-
733
- if (!network || network !== "bsc") {
734
- setActionNotice(
735
- "Agent-wallet payment is currently wired for BSC quotes only.",
736
- "info",
737
- 4200,
738
- );
739
- return;
740
- }
741
-
742
- if (!payToAddress || !amount) {
743
- setActionNotice(
744
- "Crypto quote is missing transfer details.",
745
- "error",
746
- 4200,
747
- );
748
- return;
749
- }
750
-
751
- setCryptoPayBusy(true);
752
- try {
753
- const result = await client.executeBscTransfer({
754
- toAddress: payToAddress,
755
- amount,
756
- assetSymbol: currency,
757
- tokenAddress: tokenAddress ?? undefined,
758
- confirm: true,
759
- });
760
-
761
- if (result.executed && result.execution?.hash) {
762
- setCryptoPayResult(
763
- `Submitted ${currency} payment: ${result.execution.hash}`,
764
- );
765
- setActionNotice(
766
- "Crypto payment submitted from the agent wallet.",
767
- "success",
768
- );
769
- } else if (result.requiresUserSignature) {
770
- setCryptoPayResult(
771
- "Cloud returned an unsigned payment request. Sign it from the wallet flow to complete payment.",
772
- );
773
- setActionNotice(
774
- "This wallet requires user-sign mode for crypto payment.",
775
- "info",
776
- 4200,
777
- );
778
- }
779
- } catch (err) {
780
- setCryptoPayResult(null);
781
- setActionNotice(
782
- err instanceof Error ? err.message : "Crypto payment failed.",
783
- "error",
784
- 4200,
785
- );
786
- } finally {
787
- setCryptoPayBusy(false);
788
- }
789
- }, [cryptoQuote, setActionNotice]);
790
-
791
- useEffect(() => {
792
- mountedRef.current = true;
793
- return () => {
794
- mountedRef.current = false;
795
- };
796
- }, []);
797
-
798
- useEffect(() => {
799
- if (elizaCloudConnected) {
800
- void loadDropStatus();
801
- void fetchCloudAgents();
802
- void fetchBillingData();
803
- }
804
- }, [fetchBillingData, fetchCloudAgents, loadDropStatus, elizaCloudConnected]);
805
-
806
- const summaryCritical =
807
- billingSummary?.critical ?? elizaCloudCreditsCritical ?? false;
808
- const summaryLow = billingSummary?.low ?? elizaCloudCreditsLow ?? false;
809
- const creditStatusColor = summaryCritical
810
- ? "text-danger"
811
- : summaryLow
812
- ? "text-warn"
813
- : "text-ok";
814
- const activeView = cloudDashboardView;
815
- const cloudBalance = billingSummary?.balance ?? elizaCloudCredits ?? 0;
816
- const cloudCurrency = billingSummary?.currency ?? "USD";
817
- const fallbackBillingUrl =
818
- billingSummary?.topUpUrl ?? elizaCloudTopUpUrl ?? null;
819
- const minimumTopUp =
820
- readNumber(
821
- (billingSummary as Record<string, unknown> | null)?.minimumTopUp,
822
- ) ?? 1;
823
- const billingAutoTopUp = getBillingAutoTopUp(billingSettings);
824
- const billingLimits = getBillingLimits(billingSettings);
825
- const autoTopUpHasPaymentMethod =
826
- readBoolean(billingAutoTopUp.hasPaymentMethod) ??
827
- readBoolean(
828
- (billingSummary as Record<string, unknown> | null)?.hasPaymentMethod,
829
- ) ??
830
- false;
831
- const autoTopUpMinAmount =
832
- readNumber(billingLimits.minAmount) ?? minimumTopUp;
833
- const autoTopUpMaxAmount = readNumber(billingLimits.maxAmount) ?? 1000;
834
- const autoTopUpMinThreshold = readNumber(billingLimits.minThreshold) ?? 0;
835
- const autoTopUpMaxThreshold = readNumber(billingLimits.maxThreshold) ?? 1000;
836
- const creditStatusTone = summaryCritical
837
- ? t("elizaclouddashboard.CreditsCritical")
838
- : summaryLow
839
- ? t("elizaclouddashboard.CreditsLow")
840
- : t("elizaclouddashboard.CreditsHealthy");
841
- const hasAgentWallet = Boolean(
842
- walletAddresses?.evmAddress || walletAddresses?.solanaAddress,
843
- );
844
- const hasWalletFunds = Boolean(
845
- walletBalances?.evm?.chains.some(
846
- (chain) =>
847
- Number(chain.nativeBalance) > 0 ||
848
- chain.tokens.some((token) => Number(token.balance) > 0),
849
- ) ||
850
- ((walletBalances?.solana &&
851
- (Number(walletBalances.solana.solBalance) > 0 ||
852
- walletBalances.solana.tokens.some(
853
- (token) => Number(token.balance) > 0,
854
- ))) ??
855
- false),
856
- );
857
-
858
- if (!elizaCloudConnected) {
859
- return (
860
- <div className="flex flex-col items-center justify-center max-w-md mx-auto px-4 py-8 text-center animate-in fade-in slide-in-from-bottom-4 duration-700">
861
- <div className="w-12 h-12 rounded-2xl bg-accent/10 flex items-center justify-center mb-5 border border-accent/20">
862
- <Zap className="w-6 h-6 text-txt" />
863
- </div>
864
- <p className="text-sm text-muted mb-6 leading-relaxed">
865
- {t("elizaclouddashboard.ScaleYourAgents")}
866
- </p>
867
- <Button
868
- variant="default"
869
- size="sm"
870
- className="rounded-xl px-8 py-3 text-sm font-semibold shadow-md shadow-accent/15 hover:shadow-accent/30 hover:-translate-y-0.5 transition-all duration-300"
871
- onClick={handleCloudLogin}
872
- disabled={elizaCloudLoginBusy}
873
- >
874
- {elizaCloudLoginBusy ? (
875
- <RefreshCw className="w-4 h-4 mr-2 animate-spin" />
876
- ) : (
877
- <Zap className="w-4 h-4 mr-2" />
878
- )}
879
- {elizaCloudLoginBusy
880
- ? t("elizaclouddashboard.Connecting")
881
- : t("elizaclouddashboard.ConnectElizaCloud")}
882
- </Button>
883
- <p className="mt-4 text-xs text-muted/60">
884
- {t("elizaclouddashboard.NewToElizaCloud")}{" "}
885
- <a
886
- href={ELIZA_CLOUD_LOGIN_URL}
887
- target="_blank"
888
- rel="noopener noreferrer"
889
- className="text-txt underline hover:text-txt-hover transition-colors"
890
- >
891
- {t("elizaclouddashboard.LearnMore")}
892
- </a>
893
- </p>
894
- </div>
895
- );
896
- }
897
-
898
- return (
899
- <div className="custom-scrollbar p-6 lg:p-10 space-y-10 max-w-7xl mx-auto animate-in fade-in duration-500">
900
- <div className="flex flex-col md:flex-row md:items-end justify-between gap-6">
901
- <div>
902
- <div className="flex items-center gap-4 mb-3">
903
- <div className="flex h-12 w-12 shrink-0 items-center justify-center rounded-xl bg-accent p-2.5 shadow-lg shadow-accent/20">
904
- <LayoutDashboard className="h-5 w-5 shrink-0 text-accent-fg" />
905
- </div>
906
- <h1 className="text-3xl font-bold text-txt-strong tracking-tight">
907
- {t("elizaclouddashboard.CloudDashboard")}
908
- </h1>
909
- </div>
910
- <p className="text-muted mt-1">
911
- {t("elizaclouddashboard.ManageInstance")}
912
- </p>
913
- </div>
914
-
915
- <div className="flex items-center gap-3">
916
- <div className="inline-flex items-center gap-1 rounded-2xl border border-border/50 bg-bg/50 p-1">
917
- <button
918
- type="button"
919
- className={`inline-flex items-center gap-2 rounded-xl px-3 py-2 text-sm font-medium transition-colors ${
920
- activeView === "billing"
921
- ? "bg-accent text-accent-fg"
922
- : "text-muted hover:text-txt"
923
- }`}
924
- onClick={() => setState("cloudDashboardView", "billing")}
925
- >
926
- <CircleDollarSign className="w-4 h-4" />
927
- {t("elizaclouddashboard.CloudBilling")}
928
- </button>
929
- <button
930
- type="button"
931
- className={`inline-flex items-center gap-2 rounded-xl px-3 py-2 text-sm font-medium transition-colors ${
932
- activeView === "agents"
933
- ? "bg-accent text-accent-fg"
934
- : "text-muted hover:text-txt"
935
- }`}
936
- onClick={() => setState("cloudDashboardView", "agents")}
937
- >
938
- <Server className="w-4 h-4" />
939
- {t("elizaclouddashboard.CloudAgents")}
940
- </button>
941
- </div>
942
- <Button
943
- variant="outline"
944
- size="sm"
945
- className="rounded-xl border-border/50 bg-bg/50 backdrop-blur-sm"
946
- onClick={handleRefresh}
947
- disabled={refreshing}
948
- >
949
- <RefreshCw
950
- className={`w-4 h-4 mr-2 ${refreshing ? "animate-spin" : ""}`}
951
- />
952
- {t("elizaclouddashboard.Refresh")}
953
- </Button>
954
- <Button
955
- variant="outline"
956
- size="sm"
957
- className="rounded-xl border-danger/30 text-danger hover:bg-danger/10"
958
- onClick={handleCloudDisconnect}
959
- disabled={cloudDisconnecting}
960
- >
961
- {cloudDisconnecting
962
- ? t("elizaclouddashboard.Disconnecting")
963
- : t("elizaclouddashboard.Disconnect")}
964
- </Button>
965
- </div>
966
- </div>
967
-
968
- {activeView === "billing" ? (
969
- <div className="grid grid-cols-1 xl:grid-cols-[minmax(0,1.8fr)_minmax(320px,1fr)] gap-8">
970
- <div className="space-y-8">
971
- <SectionCard
972
- title={t("elizaclouddashboard.CloudBilling")}
973
- description={t("elizaclouddashboard.CloudBillingDesc")}
974
- className="border-border/50 bg-bg/40 backdrop-blur-xl rounded-3xl shadow-sm"
975
- >
976
- {billingError && (
977
- <div className="mt-4 rounded-2xl border border-danger/30 bg-danger/10 px-4 py-3 text-sm text-danger">
978
- {billingError}
979
- </div>
980
- )}
981
-
982
- <div className="mt-4 grid grid-cols-1 gap-4 xl:grid-cols-[minmax(0,1.1fr)_minmax(320px,0.9fr)]">
983
- <div className="rounded-[28px] border border-accent/20 bg-[linear-gradient(160deg,rgba(var(--accent),0.16),rgba(255,255,255,0.02))] p-5 sm:p-6">
984
- <div className="flex items-start justify-between gap-4">
985
- <div>
986
- <div className="text-[11px] uppercase tracking-[0.18em] text-muted">
987
- {t("elizaclouddashboard.AvailableBalance")}
988
- </div>
989
- <div
990
- className={`mt-3 text-4xl font-bold tracking-tight sm:text-5xl ${creditStatusColor}`}
991
- >
992
- {cloudCurrency === "USD" ? "$" : `${cloudCurrency} `}
993
- {cloudBalance.toFixed(2)}
994
- </div>
995
- <div className="mt-3 text-sm text-muted">
996
- {t("elizaclouddashboard.InAppBillingReady")}
997
- </div>
998
- </div>
999
- <div className="flex items-center gap-2">
1000
- {billingLoading ? (
1001
- <Loader2 className="h-4 w-4 animate-spin text-muted" />
1002
- ) : null}
1003
- <span
1004
- className={`rounded-full border px-3 py-1 text-[10px] font-semibold uppercase tracking-[0.18em] ${
1005
- summaryCritical
1006
- ? "border-danger/30 bg-danger/10 text-danger"
1007
- : summaryLow
1008
- ? "border-warn/30 bg-warn/10 text-warn"
1009
- : "border-ok/30 bg-ok/10 text-ok"
1010
- }`}
1011
- >
1012
- {creditStatusTone}
1013
- </span>
1014
- </div>
1015
- </div>
1016
-
1017
- <div className="mt-6 grid grid-cols-1 gap-3 sm:grid-cols-2">
1018
- <div className="rounded-2xl border border-border/40 bg-bg/30 px-4 py-3">
1019
- <div className="text-[11px] uppercase tracking-[0.18em] text-muted">
1020
- {t("elizaclouddashboard.TopUpCredits")}
1021
- </div>
1022
- <div className="mt-2 text-sm text-txt-strong">
1023
- {t("elizaclouddashboard.MinimumTopUp", {
1024
- amount: minimumTopUp.toFixed(2),
1025
- })}
1026
- </div>
1027
- </div>
1028
- <div className="rounded-2xl border border-border/40 bg-bg/30 px-4 py-3">
1029
- <div className="text-[11px] uppercase tracking-[0.18em] text-muted">
1030
- {t("elizaclouddashboard.AutoTopUp")}
1031
- </div>
1032
- <div className="mt-2 text-sm text-txt-strong">
1033
- {autoTopUpEnabled
1034
- ? t("elizaclouddashboard.Enabled")
1035
- : t("elizaclouddashboard.Disabled")}
1036
- </div>
1037
- </div>
1038
- </div>
1039
- </div>
1040
-
1041
- <div className="rounded-[28px] border border-border/50 bg-bg/25 p-5 sm:p-6">
1042
- <div className="flex items-start justify-between gap-4">
1043
- <div>
1044
- <div className="text-sm font-semibold text-txt-strong">
1045
- {t("elizaclouddashboard.AutoTopUp")}
1046
- </div>
1047
- <div className="mt-1 text-sm text-muted">
1048
- {t("elizaclouddashboard.AutoTopUpDesc")}
1049
- </div>
1050
- </div>
1051
- <button
1052
- type="button"
1053
- onClick={() =>
1054
- dispatchAutoTopUpForm({
1055
- type: "setEnabled",
1056
- value: !autoTopUpEnabled,
1057
- })
1058
- }
1059
- className={`relative inline-flex h-7 w-12 items-center rounded-full border transition-colors ${
1060
- autoTopUpEnabled
1061
- ? "border-accent bg-accent"
1062
- : "border-border/60 bg-bg/50"
1063
- }`}
1064
- aria-label={t("elizaclouddashboard.ToggleAutoTopUp")}
1065
- >
1066
- <span
1067
- className={`inline-block h-5 w-5 rounded-full bg-white transition-transform ${
1068
- autoTopUpEnabled ? "translate-x-6" : "translate-x-1"
1069
- }`}
1070
- />
1071
- </button>
1072
- </div>
1073
-
1074
- <div className="mt-4 rounded-2xl border border-border/40 bg-bg/20 px-4 py-3 text-sm text-muted">
1075
- {autoTopUpHasPaymentMethod
1076
- ? t("elizaclouddashboard.AutoTopUpPaymentReady")
1077
- : t("elizaclouddashboard.AutoTopUpNeedsPaymentMethod")}
1078
- </div>
1079
-
1080
- <div className="mt-4 grid grid-cols-1 gap-3 sm:grid-cols-2">
1081
- <div className="space-y-2">
1082
- <label
1083
- htmlFor="cloud-auto-topup-threshold"
1084
- className="text-xs font-medium text-muted"
1085
- >
1086
- {t("elizaclouddashboard.AutoTopUpThreshold")}
1087
- </label>
1088
- <Input
1089
- id="cloud-auto-topup-threshold"
1090
- type="number"
1091
- min={String(autoTopUpMinThreshold)}
1092
- max={String(autoTopUpMaxThreshold)}
1093
- step="1"
1094
- value={autoTopUpThreshold}
1095
- onChange={(event) =>
1096
- dispatchAutoTopUpForm({
1097
- type: "setThreshold",
1098
- value: event.target.value,
1099
- })
1100
- }
1101
- className="rounded-xl bg-bg"
1102
- />
1103
- </div>
1104
- <div className="space-y-2">
1105
- <label
1106
- htmlFor="cloud-auto-topup-amount"
1107
- className="text-xs font-medium text-muted"
1108
- >
1109
- {t("elizaclouddashboard.AutoTopUpAmount")}
1110
- </label>
1111
- <Input
1112
- id="cloud-auto-topup-amount"
1113
- type="number"
1114
- min={String(autoTopUpMinAmount)}
1115
- max={String(autoTopUpMaxAmount)}
1116
- step="1"
1117
- value={autoTopUpAmount}
1118
- onChange={(event) =>
1119
- dispatchAutoTopUpForm({
1120
- type: "setAmount",
1121
- value: event.target.value,
1122
- })
1123
- }
1124
- className="rounded-xl bg-bg"
1125
- />
1126
- </div>
1127
- </div>
1128
-
1129
- <div className="mt-4 flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between">
1130
- <div className="text-xs text-muted">
1131
- {t("elizaclouddashboard.AutoTopUpLimits", {
1132
- minAmount: autoTopUpMinAmount,
1133
- maxAmount: autoTopUpMaxAmount,
1134
- minThreshold: autoTopUpMinThreshold,
1135
- maxThreshold: autoTopUpMaxThreshold,
1136
- })}
1137
- </div>
1138
- <Button
1139
- variant="outline"
1140
- className="rounded-2xl border-border/50"
1141
- disabled={
1142
- billingSettingsBusy ||
1143
- billingLoading ||
1144
- !autoTopUpForm.dirty
1145
- }
1146
- onClick={() => void handleSaveBillingSettings()}
1147
- >
1148
- {billingSettingsBusy ? (
1149
- <Loader2 className="mr-2 h-4 w-4 animate-spin" />
1150
- ) : null}
1151
- {t("elizaclouddashboard.SaveBillingSettings")}
1152
- </Button>
1153
- </div>
1154
- </div>
1155
- </div>
1156
-
1157
- <div className="mt-6 rounded-[28px] border border-border/50 bg-bg/25 p-5 sm:p-6">
1158
- <div className="flex flex-col gap-4 lg:flex-row lg:items-start lg:justify-between">
1159
- <div>
1160
- <div className="text-sm font-semibold text-txt-strong">
1161
- {t("elizaclouddashboard.TopUpCredits")}
1162
- </div>
1163
- <div className="mt-1 text-sm text-muted">
1164
- {t("elizaclouddashboard.TopUpCreditsDesc")}
1165
- </div>
1166
- </div>
1167
-
1168
- {fallbackBillingUrl ? (
1169
- <Button
1170
- variant="ghost"
1171
- className="justify-start rounded-2xl px-0 text-sm text-muted hover:text-txt"
1172
- onClick={() => void openExternalUrl(fallbackBillingUrl)}
1173
- >
1174
- <ExternalLink className="mr-2 h-4 w-4" />
1175
- {t("elizaclouddashboard.OpenBrowserBilling")}
1176
- </Button>
1177
- ) : null}
1178
- </div>
1179
-
1180
- <div className="mt-5 grid grid-cols-1 gap-4 lg:grid-cols-[minmax(0,1fr)_minmax(260px,0.8fr)]">
1181
- <div className="space-y-3">
1182
- <div className="flex flex-wrap gap-2">
1183
- {BILLING_PRESET_AMOUNTS.map((amount) => (
1184
- <button
1185
- key={amount}
1186
- type="button"
1187
- className={`rounded-xl border px-3 py-2 text-sm font-medium transition-colors ${
1188
- billingAmount === String(amount)
1189
- ? "border-accent bg-accent text-accent-fg"
1190
- : "border-border/50 bg-bg/30 text-txt hover:border-accent/40"
1191
- }`}
1192
- onClick={() => setBillingAmount(String(amount))}
1193
- >
1194
- ${amount}
1195
- </button>
1196
- ))}
1197
- </div>
1198
-
1199
- <div className="grid grid-cols-1 gap-3 sm:grid-cols-2">
1200
- <div className="space-y-2">
1201
- <label
1202
- htmlFor="cloud-billing-amount"
1203
- className="text-xs font-medium text-muted"
1204
- >
1205
- {t("elizaclouddashboard.CustomAmount")}
1206
- </label>
1207
- <Input
1208
- id="cloud-billing-amount"
1209
- type="number"
1210
- min={String(minimumTopUp)}
1211
- step="1"
1212
- value={billingAmount}
1213
- onChange={(event) =>
1214
- setBillingAmount(event.target.value)
1215
- }
1216
- className="rounded-xl bg-bg"
1217
- />
1218
- </div>
1219
- <div className="rounded-2xl border border-border/40 bg-bg/20 px-4 py-3 text-sm text-muted">
1220
- {t("elizaclouddashboard.MinimumTopUp", {
1221
- amount: minimumTopUp.toFixed(2),
1222
- })}
1223
- </div>
1224
- </div>
1225
- </div>
1226
-
1227
- <div className="flex flex-col gap-3">
1228
- <Button
1229
- variant="default"
1230
- className="h-12 rounded-2xl font-semibold"
1231
- disabled={checkoutBusy || billingLoading}
1232
- onClick={() => void handleStartCheckout()}
1233
- >
1234
- {checkoutBusy ? (
1235
- <Loader2 className="mr-2 h-4 w-4 animate-spin" />
1236
- ) : (
1237
- <CreditCard className="mr-2 h-4 w-4" />
1238
- )}
1239
- {t("elizaclouddashboard.PayWithCard")}
1240
- </Button>
1241
- <Button
1242
- variant="outline"
1243
- className="h-12 rounded-2xl border-border/50"
1244
- disabled={cryptoBusy || billingLoading}
1245
- onClick={() => void handleCreateCryptoQuote()}
1246
- >
1247
- {cryptoBusy ? (
1248
- <Loader2 className="mr-2 h-4 w-4 animate-spin" />
1249
- ) : (
1250
- <Wallet className="mr-2 h-4 w-4" />
1251
- )}
1252
- {t("elizaclouddashboard.PayWithCrypto")}
1253
- </Button>
1254
- <div className="rounded-2xl border border-border/40 bg-bg/20 px-4 py-3 text-xs text-muted">
1255
- {t("elizaclouddashboard.CheckoutProviderNote")}
1256
- </div>
1257
- </div>
1258
- </div>
1259
- </div>
1260
- </SectionCard>
1261
- </div>
1262
-
1263
- <div className="space-y-8">
1264
- <SectionCard
1265
- title={t("elizaclouddashboard.CryptoTopUp")}
1266
- description={t("elizaclouddashboard.CryptoTopUpDesc")}
1267
- className="border-border/50 bg-bg/40 backdrop-blur-xl rounded-3xl shadow-sm"
1268
- >
1269
- <div className="mt-2 space-y-4">
1270
- <div className="rounded-2xl border border-border/40 bg-bg/25 px-4 py-3 text-sm text-muted">
1271
- {hasAgentWallet
1272
- ? hasWalletFunds
1273
- ? t("elizaclouddashboard.AgentWalletFunded")
1274
- : t("elizaclouddashboard.AgentWalletDetected")
1275
- : t("elizaclouddashboard.NoAgentWalletDetected")}
1276
- </div>
1277
-
1278
- {cryptoQuote ? (
1279
- <div className="rounded-2xl border border-border/40 bg-bg/25 p-4">
1280
- <div className="space-y-2 text-sm">
1281
- <div className="font-semibold text-txt-strong">
1282
- {readString(cryptoQuote.provider) ??
1283
- t("elizaclouddashboard.CryptoQuoteReady")}
1284
- </div>
1285
- <div className="text-muted">
1286
- {readString(cryptoQuote.currency) ?? "USDC"}{" "}
1287
- {readString(cryptoQuote.amount) ?? "0"} on{" "}
1288
- {readString(cryptoQuote.network) ?? "selected network"}
1289
- </div>
1290
- {readString(cryptoQuote.payToAddress) && (
1291
- <code className="block rounded-xl border border-border/40 bg-bg/30 px-3 py-2 text-xs text-txt-strong break-all">
1292
- {readString(cryptoQuote.payToAddress)}
1293
- </code>
1294
- )}
1295
- {readString(cryptoQuote.expiresAt) && (
1296
- <div className="text-xs text-muted">
1297
- Expires{" "}
1298
- {new Date(
1299
- readString(cryptoQuote.expiresAt) ?? "",
1300
- ).toLocaleString()}
1301
- </div>
1302
- )}
1303
- </div>
1304
-
1305
- <div className="mt-4 flex flex-col gap-3">
1306
- {readString(cryptoQuote.paymentLinkUrl) ? (
1307
- <Button
1308
- variant="outline"
1309
- className="rounded-2xl"
1310
- onClick={() =>
1311
- void openExternalUrl(
1312
- readString(cryptoQuote.paymentLinkUrl) ?? "",
1313
- )
1314
- }
1315
- >
1316
- <ExternalLink className="mr-2 h-4 w-4" />
1317
- {t("elizaclouddashboard.OpenHostedCryptoCheckout")}
1318
- </Button>
1319
- ) : null}
1320
-
1321
- <Button
1322
- variant="default"
1323
- className="rounded-2xl"
1324
- disabled={
1325
- cryptoPayBusy ||
1326
- !hasAgentWallet ||
1327
- !hasWalletFunds ||
1328
- readString(cryptoQuote.network)?.toLowerCase() !==
1329
- "bsc" ||
1330
- !readString(cryptoQuote.payToAddress) ||
1331
- !readString(cryptoQuote.amount)
1332
- }
1333
- onClick={() => void handlePayCryptoFromAgentWallet()}
1334
- >
1335
- {cryptoPayBusy ? (
1336
- <Loader2 className="mr-2 h-4 w-4 animate-spin" />
1337
- ) : (
1338
- <Wallet className="mr-2 h-4 w-4" />
1339
- )}
1340
- {t("elizaclouddashboard.PayFromAgentWallet")}
1341
- </Button>
1342
- </div>
1343
- </div>
1344
- ) : (
1345
- <div className="rounded-2xl border border-dashed border-border/50 bg-bg/20 px-4 py-5 text-sm text-muted">
1346
- {t("elizaclouddashboard.CryptoQuoteHint")}
1347
- </div>
1348
- )}
1349
-
1350
- {cryptoPayResult && (
1351
- <div className="rounded-2xl border border-ok/30 bg-ok/10 px-4 py-3 text-sm text-ok">
1352
- {cryptoPayResult}
1353
- </div>
1354
- )}
1355
- </div>
1356
- </SectionCard>
1357
-
1358
- <SectionCard
1359
- title={t("elizaclouddashboard.AccountDetails")}
1360
- className="border-border/50 bg-bg/40 backdrop-blur-xl rounded-3xl shadow-sm"
1361
- >
1362
- <div className="space-y-5 mt-4">
1363
- <div className="p-4 rounded-2xl bg-bg/30 border border-border/30">
1364
- <span className="text-[10px] text-muted uppercase font-bold tracking-wider mb-2 block">
1365
- {t("elizaclouddashboard.CloudUserID")}
1366
- </span>
1367
- <code className="text-xs text-txt-strong break-all font-mono">
1368
- {elizaCloudUserId || t("elizaclouddashboard.NotAvailable")}
1369
- </code>
1370
- </div>
1371
-
1372
- <div className="flex items-center justify-between p-4">
1373
- <div className="flex items-center gap-2">
1374
- <Shield className="w-4 h-4 text-ok" />
1375
- <span className="text-xs font-medium">
1376
- {t("elizaclouddashboard.SecurityStatus")}
1377
- </span>
1378
- </div>
1379
- <span className="text-[10px] px-2 py-0.5 rounded-full bg-ok/10 text-ok font-bold uppercase tracking-wider border border-ok/20">
1380
- {t("elizaclouddashboard.Secure")}
1381
- </span>
1382
- </div>
1383
-
1384
- <Button
1385
- variant="link"
1386
- className="settings-compact-button w-full text-xs text-txt justify-start px-3 h-auto"
1387
- onClick={() =>
1388
- void openExternalUrl(ELIZA_CLOUD_INSTANCES_URL)
1389
- }
1390
- >
1391
- {t("elizaclouddashboard.AdvancedDashboard")}
1392
- <ExternalLink className="w-3 h-3 ml-2" />
1393
- </Button>
1394
- </div>
1395
- </SectionCard>
1396
- </div>
1397
- </div>
1398
- ) : (
1399
- <div className="grid grid-cols-1 lg:grid-cols-3 gap-8">
1400
- <div className="lg:col-span-2 space-y-8">
1401
- <SectionCard
1402
- title={t("elizaclouddashboard.CloudAgents")}
1403
- description={t("elizaclouddashboard.CloudAgentsDesc")}
1404
- className="border-border/50 bg-bg/40 backdrop-blur-xl rounded-3xl overflow-hidden shadow-sm"
1405
- >
1406
- {agentsError && (
1407
- <div className="mt-6 flex items-center gap-3 text-sm text-danger bg-danger/10 rounded-xl p-4 border border-danger/20">
1408
- <AlertCircle className="w-4 h-4 shrink-0" />
1409
- {agentsError}
1410
- </div>
1411
- )}
1412
-
1413
- <div className="grid grid-cols-1 sm:grid-cols-2 gap-6 mt-6">
1414
- {agentsLoading && cloudAgents.length === 0 ? (
1415
- <div className="col-span-full flex items-center justify-center py-12">
1416
- <Loader2 className="w-6 h-6 text-txt animate-spin" />
1417
- </div>
1418
- ) : (
1419
- <>
1420
- {cloudAgents.map((agent) => (
1421
- <CloudAgentCard
1422
- key={agent.agent_id}
1423
- agent={agent}
1424
- onDelete={handleDeleteAgent}
1425
- deleting={deletingAgentId === agent.agent_id}
1426
- launching={launchingAgentId === agent.agent_id}
1427
- onLaunch={handleLaunchAgent}
1428
- onSelect={(id) => setSelectedAgentId(id)}
1429
- />
1430
- ))}
1431
- {showDeployForm ? (
1432
- <div className="aspect-[4/3] rounded-2xl border border-border/50 bg-bg/30 p-8 flex flex-col items-center justify-center text-center">
1433
- <div className="w-full space-y-3">
1434
- <input
1435
- placeholder={t("elizaclouddashboard.AgentName")}
1436
- value={deployAgentName}
1437
- onChange={(e) => setDeployAgentName(e.target.value)}
1438
- onKeyDown={(e) => {
1439
- if (e.key === "Enter") void handleDeployAgent();
1440
- if (e.key === "Escape") setShowDeployForm(false);
1441
- }}
1442
- disabled={deploying}
1443
- className="w-full h-8 px-3 rounded-xl bg-bg/50 border border-border/40 text-xs text-center focus:outline-none focus:border-accent"
1444
- />
1445
- <div className="flex gap-2">
1446
- <Button
1447
- variant="ghost"
1448
- size="sm"
1449
- className="flex-1 rounded-xl h-8 text-xs text-muted hover:text-txt-strong flex items-center justify-center p-0"
1450
- onClick={() => setShowDeployForm(false)}
1451
- disabled={deploying}
1452
- >
1453
- {t("onboarding.cancel")}
1454
- </Button>
1455
- <Button
1456
- variant="default"
1457
- size="sm"
1458
- className="flex-1 rounded-xl h-8 text-xs font-bold"
1459
- onClick={handleDeployAgent}
1460
- disabled={deploying || !deployAgentName.trim()}
1461
- >
1462
- {deploying ? (
1463
- <Loader2 className="w-3 h-3 animate-spin mx-auto" />
1464
- ) : (
1465
- t("elizaclouddashboard.Deploy")
1466
- )}
1467
- </Button>
1468
- </div>
1469
- </div>
1470
- </div>
1471
- ) : (
1472
- <button
1473
- type="button"
1474
- className="aspect-[4/3] rounded-2xl border border-dashed border-border/60 flex flex-col items-center justify-center p-8 lg:p-12 text-center group hover:border-accent/50 hover:bg-accent/5 transition-all duration-300 cursor-pointer"
1475
- onClick={() => setShowDeployForm(true)}
1476
- >
1477
- <div className="w-12 h-12 lg:w-10 lg:h-10 rounded-full bg-bg-accent flex items-center justify-center mb-5 lg:mb-6 group-hover:scale-110 transition-transform">
1478
- <Plus className="w-6 h-6 lg:w-5 lg:h-5 text-muted group-hover:text-txt" />
1479
- </div>
1480
- <h3 className="font-bold text-txt-strong mb-2">
1481
- {t("elizaclouddashboard.DeployNewAgent")}
1482
- </h3>
1483
- <p className="text-xs text-muted max-w-[16rem]">
1484
- {t("elizaclouddashboard.InitializeInstance")}
1485
- </p>
1486
- </button>
1487
- )}
1488
- </>
1489
- )}
1490
- </div>
1491
- </SectionCard>
1492
-
1493
- <SectionCard
1494
- title={t("elizaclouddashboard.UsageMetrics")}
1495
- description={t("elizaclouddashboard.UsageMetricsDesc")}
1496
- className="border-border/50 bg-bg/40 backdrop-blur-xl rounded-3xl shadow-sm"
1497
- >
1498
- <div className="h-48 flex items-center justify-center text-muted italic text-sm border border-border/30 rounded-2xl bg-bg/20 mt-6 p-6">
1499
- {t("elizaclouddashboard.MetricsPlaceholder")}
1500
- </div>
1501
- </SectionCard>
1502
- </div>
1503
-
1504
- <div className="space-y-8">
1505
- {selectedAgentId && selectedAgent ? (
1506
- <AgentDetailSidebar
1507
- agent={selectedAgent}
1508
- onClose={() => setSelectedAgentId(null)}
1509
- />
1510
- ) : (
1511
- <SectionCard
1512
- title={t("elizaclouddashboard.AccountDetails")}
1513
- className="border-border/50 bg-bg/40 backdrop-blur-xl rounded-3xl shadow-sm"
1514
- >
1515
- <div className="space-y-5 mt-4">
1516
- <div className="p-4 rounded-2xl bg-bg/30 border border-border/30">
1517
- <span className="text-[10px] text-muted uppercase font-bold tracking-wider mb-2 block">
1518
- {t("elizaclouddashboard.CloudUserID")}
1519
- </span>
1520
- <code className="text-xs text-txt-strong break-all font-mono">
1521
- {elizaCloudUserId ||
1522
- t("elizaclouddashboard.NotAvailable")}
1523
- </code>
1524
- </div>
1525
-
1526
- <div className="rounded-2xl border border-accent/20 bg-accent/8 p-5">
1527
- <div className="text-[11px] uppercase tracking-[0.18em] text-muted">
1528
- {t("elizaclouddashboard.AvailableBalance")}
1529
- </div>
1530
- <div
1531
- className={`mt-3 text-3xl font-bold ${creditStatusColor}`}
1532
- >
1533
- ${cloudBalance.toFixed(2)}
1534
- </div>
1535
- <div className="mt-2 text-xs text-muted">
1536
- {creditStatusTone}
1537
- </div>
1538
- </div>
1539
-
1540
- <Button
1541
- variant="outline"
1542
- className="w-full justify-start rounded-2xl border-border/40 bg-bg/30 px-5 py-4 text-sm"
1543
- onClick={() => setState("cloudDashboardView", "billing")}
1544
- >
1545
- <CircleDollarSign className="mr-2 h-4 w-4" />
1546
- {t("elizaclouddashboard.CloudBilling")}
1547
- </Button>
1548
- </div>
1549
- </SectionCard>
1550
- )}
1551
- </div>
1552
- </div>
1553
- )}
1554
-
1555
- <Dialog
1556
- open={checkoutDialogOpen}
1557
- onOpenChange={(open) => {
1558
- setCheckoutDialogOpen(open);
1559
- if (!open) {
1560
- void fetchBillingData();
1561
- }
1562
- }}
1563
- >
1564
- <DialogContent className="max-w-4xl">
1565
- <DialogHeader>
1566
- <DialogTitle>{t("elizaclouddashboard.PayWithCard")}</DialogTitle>
1567
- </DialogHeader>
1568
- {checkoutSession?.clientSecret && checkoutSession.publishableKey ? (
1569
- <StripeEmbeddedCheckout
1570
- publishableKey={checkoutSession.publishableKey}
1571
- clientSecret={checkoutSession.clientSecret}
1572
- />
1573
- ) : (
1574
- <div className="rounded-2xl border border-border/40 bg-bg/25 px-4 py-5 text-sm text-muted">
1575
- {t("elizaclouddashboard.CheckoutProviderNote")}
1576
- </div>
1577
- )}
1578
- </DialogContent>
1579
- </Dialog>
1580
- </div>
1581
- );
1582
- }
1583
-
1584
- interface StatusDetail {
1585
- status?: string;
1586
- databaseStatus?: string;
1587
- lastHeartbeat?: string | number | Date | null;
1588
- }
1589
-
1590
- function AgentDetailSidebar({
1591
- agent,
1592
- onClose,
1593
- }: {
1594
- agent: CloudCompatAgent | undefined;
1595
- onClose: () => void;
1596
- }) {
1597
- const [logs, setLogs] = useState<string>("");
1598
- const [statusDetail, setStatusDetail] = useState<StatusDetail | null>(null);
1599
- const logsEndRef = useRef<HTMLDivElement>(null);
1600
-
1601
- useEffect(() => {
1602
- if (!agent) return;
1603
- let mounted = true;
1604
-
1605
- const fetchDetails = async () => {
1606
- try {
1607
- const [statusRes, logsRes] = await Promise.all([
1608
- client.getCloudCompatAgentStatus(agent.agent_id),
1609
- client.getCloudCompatAgentLogs(agent.agent_id, 100),
1610
- ]);
1611
-
1612
- if (!mounted) return;
1613
- setStatusDetail(statusRes.data);
1614
- setLogs(typeof logsRes.data === "string" ? logsRes.data : "");
1615
- } catch {
1616
- // Silently retry next tick
1617
- }
1618
- };
1619
-
1620
- void fetchDetails();
1621
- const intId = setInterval(fetchDetails, 5000);
1622
- return () => {
1623
- mounted = false;
1624
- clearInterval(intId);
1625
- };
1626
- }, [agent]);
1627
-
1628
- // biome-ignore lint/correctness/useExhaustiveDependencies: rerun when logs update
1629
- useEffect(() => {
1630
- if (logsEndRef.current) {
1631
- logsEndRef.current.scrollIntoView({ behavior: "smooth" });
1632
- }
1633
- }, [logs]);
1634
-
1635
- if (!agent) return null;
1636
-
1637
- return (
1638
- <div className="space-y-4 animate-in slide-in-from-right-8 duration-300">
1639
- <SectionCard
1640
- title="Agent Details"
1641
- className="border-accent/40 bg-accent/5 backdrop-blur-xl rounded-3xl shadow-sm relative overflow-hidden"
1642
- >
1643
- <button
1644
- type="button"
1645
- className="absolute top-4 right-4 p-1 rounded-full hover:bg-bg/50 transition-colors text-muted hover:text-txt-strong"
1646
- onClick={onClose}
1647
- >
1648
- <X className="w-5 h-5" />
1649
- </button>
1650
-
1651
- <div className="mt-4 space-y-4">
1652
- <div className="grid grid-cols-2 gap-4">
1653
- <div className="p-3 rounded-xl bg-bg/40 border border-border/40">
1654
- <span className="text-[10px] text-muted uppercase font-bold tracking-wider mb-1 block">
1655
- Status
1656
- </span>
1657
- <AgentStatusBadge status={statusDetail?.status || agent.status} />
1658
- </div>
1659
- <div className="p-3 rounded-xl bg-bg/40 border border-border/40">
1660
- <span className="text-[10px] text-muted uppercase font-bold tracking-wider mb-1 block">
1661
- DB Status
1662
- </span>
1663
- <span className="text-xs font-mono">
1664
- {statusDetail?.databaseStatus || agent.database_status || "—"}
1665
- </span>
1666
- </div>
1667
- <div className="p-3 rounded-xl bg-bg/40 border border-border/40 col-span-2">
1668
- <span className="text-[10px] text-muted uppercase font-bold tracking-wider mb-1 block">
1669
- Heartbeat
1670
- </span>
1671
- <span className="text-xs font-mono">
1672
- {statusDetail?.lastHeartbeat
1673
- ? new Date(statusDetail.lastHeartbeat).toLocaleString()
1674
- : agent.last_heartbeat_at
1675
- ? new Date(agent.last_heartbeat_at).toLocaleString()
1676
- : "No heartbeat yet"}
1677
- </span>
1678
- </div>
1679
- </div>
1680
-
1681
- <div className="p-3 rounded-xl bg-bg/80 border border-border/40">
1682
- <span className="text-[10px] text-muted uppercase font-bold tracking-wider mb-2 flex items-center gap-2">
1683
- <Terminal className="w-3 h-3" /> Live Logs
1684
- </span>
1685
- <div className="h-64 overflow-y-auto custom-scrollbar bg-black/50 rounded-lg p-3 border border-border/20">
1686
- <pre className="text-[10px] font-mono text-txt-strong/80 whitespace-pre-wrap break-all">
1687
- {logs || "No logs available. Deploying..."}
1688
- <div ref={logsEndRef} />
1689
- </pre>
1690
- </div>
1691
- </div>
1692
- </div>
1693
- </SectionCard>
1694
- </div>
1695
- );
1696
- }