@elizaos/app-core 2.0.0-alpha.52 → 2.0.0-alpha.53

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 (1108) hide show
  1. package/{dist/actions → actions}/character.d.ts +2 -2
  2. package/{dist/actions → actions}/character.d.ts.map +1 -1
  3. package/{dist/actions → actions}/cloud.d.ts +2 -2
  4. package/{dist/actions → actions}/cloud.d.ts.map +1 -1
  5. package/{dist/actions → actions}/lifecycle.d.ts +3 -3
  6. package/{dist/actions → actions}/lifecycle.d.ts.map +1 -1
  7. package/{dist/actions → actions}/lifecycle.js +1 -1
  8. package/{dist/actions → actions}/triggers.d.ts +2 -2
  9. package/{dist/actions → actions}/triggers.d.ts.map +1 -1
  10. package/{dist/api → api}/client.d.ts +5 -5
  11. package/{dist/api → api}/client.d.ts.map +1 -1
  12. package/{dist/api → api}/client.js +20 -20
  13. package/{dist/bridge → bridge}/capacitor-bridge.d.ts +10 -10
  14. package/{dist/bridge → bridge}/capacitor-bridge.d.ts.map +1 -1
  15. package/{dist/bridge → bridge}/capacitor-bridge.js +7 -7
  16. package/{dist/bridge → bridge}/electrobun-rpc.js +1 -1
  17. package/{dist/bridge → bridge}/plugin-bridge.d.ts +4 -4
  18. package/{dist/bridge → bridge}/plugin-bridge.d.ts.map +1 -1
  19. package/{dist/bridge → bridge}/plugin-bridge.js +1 -1
  20. package/{dist/bridge → bridge}/storage-bridge.js +3 -3
  21. package/{dist/chat → chat}/index.d.ts +1 -1
  22. package/{dist/chat → chat}/index.d.ts.map +1 -1
  23. package/{dist/chat → chat}/index.js +1 -1
  24. package/{dist/components → components}/BugReportModal.js +1 -1
  25. package/{dist/components → components}/CommandPalette.js +1 -1
  26. package/{dist/components → components}/CompanionSceneHost.js +1 -1
  27. package/{dist/components → components}/ElizaCloudDashboard.js +2 -2
  28. package/{dist/components → components}/EmotePicker.js +2 -2
  29. package/{dist/components → components}/GlobalEmoteOverlay.js +4 -4
  30. package/{dist/components → components}/PairingView.js +1 -1
  31. package/{dist/components → components}/ProviderSwitcher.js +16 -16
  32. package/{dist/components → components}/SecretsView.js +1 -1
  33. package/{dist/components → components}/StartupFailureView.js +1 -1
  34. package/{dist/components → components}/StreamView.js +4 -4
  35. package/{dist/components → components}/StripeEmbeddedCheckout.js +2 -2
  36. package/{dist/components → components}/SubscriptionStatus.js +1 -1
  37. package/{dist/components → components}/VoiceConfigView.js +1 -1
  38. package/{dist/components → components}/avatar/VrmEngine.js +1 -1
  39. package/{dist/components → components}/avatar/VrmViewer.d.ts +1 -1
  40. package/{dist/components → components}/avatar/VrmViewer.d.ts.map +1 -1
  41. package/{dist/components → components}/avatar/VrmViewer.js +3 -3
  42. package/{dist/components → components}/companion/walletUtils.d.ts +1 -1
  43. package/{dist/components → components}/companion/walletUtils.d.ts.map +1 -1
  44. package/{dist/components → components}/companion/walletUtils.js +1 -1
  45. package/{dist/components → components}/format.d.ts +1 -1
  46. package/{dist/components → components}/format.js +1 -1
  47. package/{dist/components → components}/permissions/StreamingPermissions.js +1 -1
  48. package/{dist/components → components}/stream/StatusBar.js +2 -2
  49. package/{dist/components → components}/stream/overlays/useOverlayLayout.d.ts +1 -1
  50. package/{dist/components → components}/stream/overlays/useOverlayLayout.js +2 -2
  51. package/events/index.d.ts +42 -0
  52. package/events/index.d.ts.map +1 -0
  53. package/{dist/events → events}/index.js +16 -16
  54. package/{dist/hooks → hooks}/useRetakeCapture.js +1 -1
  55. package/{src/i18n → i18n}/locales/en.json +9 -9
  56. package/{src/i18n → i18n}/locales/es.json +10 -10
  57. package/{src/i18n → i18n}/locales/ko.json +9 -9
  58. package/{src/i18n → i18n}/locales/pt.json +9 -9
  59. package/{src/i18n → i18n}/locales/zh-CN.json +10 -10
  60. package/{dist/navigation → navigation}/index.js +1 -1
  61. package/package.json +142 -52
  62. package/{dist/platform → platform}/browser-launch.js +1 -1
  63. package/{dist/platform → platform}/init.d.ts +1 -1
  64. package/{dist/platform → platform}/init.d.ts.map +1 -1
  65. package/{dist/platform → platform}/init.js +5 -5
  66. package/{dist/platform → platform}/lifo.d.ts +1 -1
  67. package/{dist/platform → platform}/lifo.d.ts.map +1 -1
  68. package/{dist/platform → platform}/lifo.js +1 -1
  69. package/{dist/state → state}/AppContext.js +14 -14
  70. package/{dist/state → state}/onboarding-resume.js +1 -1
  71. package/{dist/state → state}/persistence.js +11 -11
  72. package/{dist/state → state}/vrm.d.ts +1 -1
  73. package/{dist/state → state}/vrm.d.ts.map +1 -1
  74. package/{dist/state → state}/vrm.js +6 -6
  75. package/{dist/utils → utils}/asset-url.d.ts +1 -1
  76. package/{dist/utils → utils}/asset-url.js +2 -2
  77. package/.turbo/turbo-build.log +0 -12
  78. package/LICENSE +0 -21
  79. package/dist/events/index.d.ts +0 -42
  80. package/dist/events/index.d.ts.map +0 -1
  81. package/dist/i18n/locales/en.json +0 -1195
  82. package/dist/i18n/locales/es.json +0 -1195
  83. package/dist/i18n/locales/ko.json +0 -1195
  84. package/dist/i18n/locales/pt.json +0 -1195
  85. package/dist/i18n/locales/zh-CN.json +0 -1195
  86. package/src/App.tsx +0 -498
  87. package/src/actions/character.test.ts +0 -139
  88. package/src/actions/character.ts +0 -152
  89. package/src/actions/chat-helpers.ts +0 -100
  90. package/src/actions/cloud.ts +0 -59
  91. package/src/actions/index.ts +0 -12
  92. package/src/actions/lifecycle.ts +0 -175
  93. package/src/actions/onboarding.ts +0 -42
  94. package/src/actions/triggers.ts +0 -190
  95. package/src/ambient.d.ts +0 -16
  96. package/src/api/client.ts +0 -5339
  97. package/src/api/index.ts +0 -1
  98. package/src/autonomy/index.ts +0 -477
  99. package/src/bridge/capacitor-bridge.ts +0 -295
  100. package/src/bridge/electrobun-rpc.ts +0 -58
  101. package/src/bridge/electrobun-runtime.ts +0 -28
  102. package/src/bridge/index.ts +0 -5
  103. package/src/bridge/native-plugins.ts +0 -134
  104. package/src/bridge/plugin-bridge.ts +0 -352
  105. package/src/bridge/storage-bridge.ts +0 -162
  106. package/src/chat/index.ts +0 -250
  107. package/src/coding/index.ts +0 -43
  108. package/src/components/AdvancedPageView.tsx +0 -362
  109. package/src/components/AgentActivityBox.tsx +0 -49
  110. package/src/components/ApiKeyConfig.tsx +0 -224
  111. package/src/components/AppsPageView.tsx +0 -52
  112. package/src/components/AppsView.tsx +0 -293
  113. package/src/components/AvatarLoader.tsx +0 -92
  114. package/src/components/AvatarSelector.tsx +0 -223
  115. package/src/components/BscTradePanel.tsx +0 -549
  116. package/src/components/BugReportModal.tsx +0 -499
  117. package/src/components/CharacterView.tsx +0 -1814
  118. package/src/components/ChatAvatar.test.ts +0 -97
  119. package/src/components/ChatAvatar.tsx +0 -147
  120. package/src/components/ChatComposer.tsx +0 -330
  121. package/src/components/ChatMessage.tsx +0 -448
  122. package/src/components/ChatModalView.test.tsx +0 -118
  123. package/src/components/ChatModalView.tsx +0 -125
  124. package/src/components/ChatView.tsx +0 -992
  125. package/src/components/CloudSourceControls.tsx +0 -80
  126. package/src/components/CodingAgentSettingsSection.tsx +0 -538
  127. package/src/components/CommandPalette.tsx +0 -284
  128. package/src/components/CompanionSceneHost.tsx +0 -497
  129. package/src/components/CompanionShell.tsx +0 -31
  130. package/src/components/CompanionView.tsx +0 -109
  131. package/src/components/ConfigPageView.tsx +0 -762
  132. package/src/components/ConfigSaveFooter.tsx +0 -41
  133. package/src/components/ConfirmModal.tsx +0 -379
  134. package/src/components/ConnectionFailedBanner.tsx +0 -91
  135. package/src/components/ConnectorsPageView.tsx +0 -13
  136. package/src/components/ConversationsSidebar.tsx +0 -279
  137. package/src/components/CustomActionEditor.tsx +0 -1127
  138. package/src/components/CustomActionsPanel.tsx +0 -288
  139. package/src/components/CustomActionsView.tsx +0 -322
  140. package/src/components/DatabasePageView.tsx +0 -55
  141. package/src/components/DatabaseView.tsx +0 -814
  142. package/src/components/ElizaCloudDashboard.tsx +0 -1696
  143. package/src/components/EmotePicker.tsx +0 -529
  144. package/src/components/ErrorBoundary.tsx +0 -76
  145. package/src/components/FineTuningView.tsx +0 -1080
  146. package/src/components/GameView.tsx +0 -551
  147. package/src/components/GameViewOverlay.tsx +0 -133
  148. package/src/components/GlobalEmoteOverlay.tsx +0 -152
  149. package/src/components/Header.test.tsx +0 -413
  150. package/src/components/Header.tsx +0 -403
  151. package/src/components/HeartbeatsView.tsx +0 -1003
  152. package/src/components/InventoryView.tsx +0 -388
  153. package/src/components/KnowledgeView.tsx +0 -1128
  154. package/src/components/LanguageDropdown.tsx +0 -188
  155. package/src/components/LifoMonitorPanel.tsx +0 -196
  156. package/src/components/LifoSandboxView.tsx +0 -499
  157. package/src/components/LoadingScreen.tsx +0 -112
  158. package/src/components/LogsPageView.tsx +0 -17
  159. package/src/components/LogsView.tsx +0 -239
  160. package/src/components/MediaGalleryView.tsx +0 -433
  161. package/src/components/MediaSettingsSection.tsx +0 -893
  162. package/src/components/MessageContent.tsx +0 -815
  163. package/src/components/OnboardingWizard.test.tsx +0 -104
  164. package/src/components/OnboardingWizard.tsx +0 -206
  165. package/src/components/PairingView.tsx +0 -110
  166. package/src/components/PermissionsSection.tsx +0 -1186
  167. package/src/components/PluginsPageView.tsx +0 -9
  168. package/src/components/PluginsView.tsx +0 -3165
  169. package/src/components/ProviderSwitcher.tsx +0 -905
  170. package/src/components/RestartBanner.tsx +0 -76
  171. package/src/components/RuntimeView.tsx +0 -460
  172. package/src/components/SaveCommandModal.tsx +0 -211
  173. package/src/components/SecretsView.tsx +0 -569
  174. package/src/components/SettingsView.tsx +0 -825
  175. package/src/components/ShellOverlays.tsx +0 -41
  176. package/src/components/ShortcutsOverlay.tsx +0 -155
  177. package/src/components/SkillsView.tsx +0 -1435
  178. package/src/components/StartupFailureView.tsx +0 -63
  179. package/src/components/StreamView.tsx +0 -483
  180. package/src/components/StripeEmbeddedCheckout.tsx +0 -155
  181. package/src/components/SubscriptionStatus.tsx +0 -640
  182. package/src/components/SystemWarningBanner.tsx +0 -71
  183. package/src/components/ThemeToggle.tsx +0 -100
  184. package/src/components/TrajectoriesView.tsx +0 -526
  185. package/src/components/TrajectoryDetailView.tsx +0 -426
  186. package/src/components/TriggersView.tsx +0 -1
  187. package/src/components/VectorBrowserView.tsx +0 -1633
  188. package/src/components/VoiceConfigView.tsx +0 -674
  189. package/src/components/VrmStage.test.ts +0 -219
  190. package/src/components/VrmStage.tsx +0 -432
  191. package/src/components/WhatsAppQrOverlay.tsx +0 -230
  192. package/src/components/__tests__/chainConfig.test.ts +0 -220
  193. package/src/components/apps/AppDetailPane.tsx +0 -242
  194. package/src/components/apps/AppsCatalogGrid.tsx +0 -137
  195. package/src/components/apps/extensions/registry.ts +0 -13
  196. package/src/components/apps/extensions/types.ts +0 -9
  197. package/src/components/apps/helpers.ts +0 -43
  198. package/src/components/avatar/VrmAnimationLoader.test.ts +0 -164
  199. package/src/components/avatar/VrmAnimationLoader.ts +0 -151
  200. package/src/components/avatar/VrmBlinkController.ts +0 -118
  201. package/src/components/avatar/VrmCameraManager.ts +0 -407
  202. package/src/components/avatar/VrmEngine.ts +0 -2696
  203. package/src/components/avatar/VrmFootShadow.ts +0 -96
  204. package/src/components/avatar/VrmViewer.tsx +0 -421
  205. package/src/components/avatar/__tests__/VrmCameraManager.test.ts +0 -168
  206. package/src/components/avatar/__tests__/VrmEngine.test.ts +0 -1574
  207. package/src/components/avatar/mixamoVRMRigMap.ts +0 -62
  208. package/src/components/avatar/retargetMixamoFbxToVrm.ts +0 -144
  209. package/src/components/avatar/retargetMixamoGltfToVrm.ts +0 -119
  210. package/src/components/chainConfig.ts +0 -380
  211. package/src/components/companion/CompanionHeader.tsx +0 -47
  212. package/src/components/companion/CompanionSceneHost.tsx +0 -5
  213. package/src/components/companion/VrmStage.tsx +0 -2
  214. package/src/components/companion/__tests__/walletUtils.test.ts +0 -742
  215. package/src/components/companion/walletUtils.ts +0 -290
  216. package/src/components/companion-shell-styles.test.ts +0 -142
  217. package/src/components/companion-shell-styles.ts +0 -270
  218. package/src/components/confirm-delete-control.tsx +0 -69
  219. package/src/components/conversations/ConversationListItem.tsx +0 -185
  220. package/src/components/conversations/conversation-utils.ts +0 -151
  221. package/src/components/format.ts +0 -131
  222. package/src/components/index.ts +0 -94
  223. package/src/components/inventory/CopyableAddress.tsx +0 -41
  224. package/src/components/inventory/InventoryToolbar.tsx +0 -142
  225. package/src/components/inventory/NftGrid.tsx +0 -99
  226. package/src/components/inventory/TokenLogo.tsx +0 -71
  227. package/src/components/inventory/TokensTable.tsx +0 -216
  228. package/src/components/inventory/constants.ts +0 -170
  229. package/src/components/inventory/index.ts +0 -29
  230. package/src/components/inventory/media-url.test.ts +0 -38
  231. package/src/components/inventory/media-url.ts +0 -36
  232. package/src/components/inventory/useInventoryData.ts +0 -460
  233. package/src/components/knowledge-upload-image.ts +0 -215
  234. package/src/components/labels.ts +0 -46
  235. package/src/components/onboarding/ActivateStep.tsx +0 -30
  236. package/src/components/onboarding/ConnectionStep.tsx +0 -1530
  237. package/src/components/onboarding/IdentityStep.tsx +0 -272
  238. package/src/components/onboarding/OnboardingPanel.tsx +0 -39
  239. package/src/components/onboarding/OnboardingStepNav.tsx +0 -31
  240. package/src/components/onboarding/PermissionsStep.tsx +0 -20
  241. package/src/components/onboarding/RpcStep.tsx +0 -402
  242. package/src/components/permissions/PermissionIcon.tsx +0 -25
  243. package/src/components/permissions/StreamingPermissions.tsx +0 -413
  244. package/src/components/plugins/showcase-data.ts +0 -481
  245. package/src/components/shared/ShellHeaderControls.tsx +0 -193
  246. package/src/components/shared-companion-scene-context.ts +0 -15
  247. package/src/components/skeletons.tsx +0 -88
  248. package/src/components/stream/ActivityFeed.tsx +0 -113
  249. package/src/components/stream/AvatarPip.tsx +0 -10
  250. package/src/components/stream/ChatContent.tsx +0 -126
  251. package/src/components/stream/ChatTicker.tsx +0 -55
  252. package/src/components/stream/IdleContent.tsx +0 -73
  253. package/src/components/stream/StatusBar.tsx +0 -469
  254. package/src/components/stream/StreamSettings.tsx +0 -506
  255. package/src/components/stream/StreamTerminal.tsx +0 -94
  256. package/src/components/stream/StreamVoiceConfig.tsx +0 -160
  257. package/src/components/stream/helpers.ts +0 -134
  258. package/src/components/stream/overlays/OverlayLayer.tsx +0 -75
  259. package/src/components/stream/overlays/built-in/ActionTickerWidget.tsx +0 -64
  260. package/src/components/stream/overlays/built-in/AlertPopupWidget.tsx +0 -87
  261. package/src/components/stream/overlays/built-in/BrandingWidget.tsx +0 -51
  262. package/src/components/stream/overlays/built-in/CustomHtmlWidget.tsx +0 -105
  263. package/src/components/stream/overlays/built-in/PeonGlassWidget.tsx +0 -265
  264. package/src/components/stream/overlays/built-in/PeonHudWidget.tsx +0 -247
  265. package/src/components/stream/overlays/built-in/PeonSakuraWidget.tsx +0 -278
  266. package/src/components/stream/overlays/built-in/ThoughtBubbleWidget.tsx +0 -77
  267. package/src/components/stream/overlays/built-in/ViewerCountWidget.tsx +0 -46
  268. package/src/components/stream/overlays/built-in/index.ts +0 -13
  269. package/src/components/stream/overlays/registry.ts +0 -22
  270. package/src/components/stream/overlays/types.ts +0 -90
  271. package/src/components/stream/overlays/useOverlayLayout.ts +0 -218
  272. package/src/components/trajectory-format.ts +0 -50
  273. package/src/components/ui-badges.tsx +0 -109
  274. package/src/components/ui-switch.tsx +0 -57
  275. package/src/components/vector-browser-three.ts +0 -27
  276. package/src/config/config-catalog.ts +0 -1092
  277. package/src/config/config-field.tsx +0 -1924
  278. package/src/config/config-renderer.tsx +0 -734
  279. package/src/config/index.ts +0 -11
  280. package/src/config/ui-renderer.tsx +0 -1751
  281. package/src/config/ui-spec.ts +0 -256
  282. package/src/events/index.ts +0 -89
  283. package/src/hooks/index.ts +0 -13
  284. package/src/hooks/useBugReport.tsx +0 -43
  285. package/src/hooks/useCanvasWindow.ts +0 -372
  286. package/src/hooks/useChatAvatarVoice.ts +0 -111
  287. package/src/hooks/useContextMenu.ts +0 -127
  288. package/src/hooks/useKeyboardShortcuts.ts +0 -86
  289. package/src/hooks/useLifoSync.ts +0 -143
  290. package/src/hooks/useMemoryMonitor.ts +0 -334
  291. package/src/hooks/useRenderGuard.ts +0 -43
  292. package/src/hooks/useRetakeCapture.ts +0 -67
  293. package/src/hooks/useStreamPopoutNavigation.ts +0 -27
  294. package/src/hooks/useTimeout.ts +0 -37
  295. package/src/hooks/useVoiceChat.ts +0 -1440
  296. package/src/hooks/useWhatsAppPairing.ts +0 -123
  297. package/src/i18n/index.ts +0 -76
  298. package/src/i18n/messages.ts +0 -21
  299. package/src/index.ts +0 -6
  300. package/src/navigation/index.ts +0 -282
  301. package/src/navigation.test.ts +0 -189
  302. package/src/onboarding-config.test.ts +0 -104
  303. package/src/onboarding-config.ts +0 -114
  304. package/src/platform/browser-launch.test.ts +0 -94
  305. package/src/platform/browser-launch.ts +0 -149
  306. package/src/platform/index.ts +0 -58
  307. package/src/platform/init.ts +0 -236
  308. package/src/platform/lifo.ts +0 -225
  309. package/src/providers/index.ts +0 -99
  310. package/src/state/AppContext.tsx +0 -5869
  311. package/src/state/index.ts +0 -6
  312. package/src/state/internal.ts +0 -86
  313. package/src/state/onboarding-resume.test.ts +0 -135
  314. package/src/state/onboarding-resume.ts +0 -263
  315. package/src/state/parsers.test.ts +0 -124
  316. package/src/state/parsers.ts +0 -309
  317. package/src/state/persistence.ts +0 -320
  318. package/src/state/shell-routing.ts +0 -32
  319. package/src/state/types.ts +0 -696
  320. package/src/state/ui-preferences.ts +0 -3
  321. package/src/state/useApp.ts +0 -23
  322. package/src/state/vrm.ts +0 -76
  323. package/src/stories/AppMockProvider.tsx +0 -32
  324. package/src/stories/ChatEmptyState.stories.tsx +0 -27
  325. package/src/stories/ChatMessage.stories.tsx +0 -115
  326. package/src/stories/CompanionHeader.stories.tsx +0 -74
  327. package/src/stories/CompanionView.stories.tsx +0 -33
  328. package/src/stories/ConversationListItem.stories.tsx +0 -102
  329. package/src/stories/TypingIndicator.stories.tsx +0 -28
  330. package/src/types/index.ts +0 -715
  331. package/src/types/react-test-renderer.d.ts +0 -45
  332. package/src/utils/asset-url.ts +0 -110
  333. package/src/utils/assistant-text.ts +0 -172
  334. package/src/utils/clipboard.ts +0 -41
  335. package/src/utils/desktop-dialogs.ts +0 -80
  336. package/src/utils/index.ts +0 -6
  337. package/src/utils/number-parsing.ts +0 -125
  338. package/src/utils/openExternalUrl.ts +0 -20
  339. package/src/utils/spoken-text.ts +0 -65
  340. package/src/utils/streaming-text.ts +0 -120
  341. package/src/voice/index.ts +0 -1
  342. package/src/voice/types.ts +0 -197
  343. package/src/wallet-rpc.ts +0 -176
  344. package/test/app/AppContext.pty-sessions.test.tsx +0 -143
  345. package/test/app/MessageContent.test.tsx +0 -366
  346. package/test/app/PermissionsOnboarding.test.tsx +0 -356
  347. package/test/app/PermissionsSection.test.tsx +0 -573
  348. package/test/app/advanced-trajectory-fine-tuning.e2e.test.ts +0 -397
  349. package/test/app/agent-activity-box.test.tsx +0 -132
  350. package/test/app/agent-transfer-lock.test.ts +0 -274
  351. package/test/app/api-client-electron-fallback.test.ts +0 -139
  352. package/test/app/api-client-timeout.test.ts +0 -75
  353. package/test/app/api-client-ws.test.ts +0 -98
  354. package/test/app/api-client.ws-max-reconnect.test.ts +0 -139
  355. package/test/app/api-client.ws-reconnect.test.ts +0 -157
  356. package/test/app/app-context-autonomy-events.test.ts +0 -478
  357. package/test/app/apps-page-view.test.ts +0 -114
  358. package/test/app/apps-view.test.ts +0 -591
  359. package/test/app/autonomous-workflows.e2e.test.ts +0 -765
  360. package/test/app/autonomy-events.test.ts +0 -150
  361. package/test/app/avatar-selector.test.tsx +0 -52
  362. package/test/app/bsc-trade-panel.test.tsx +0 -134
  363. package/test/app/bug-report-modal.test.tsx +0 -353
  364. package/test/app/character-customization.e2e.test.ts +0 -1199
  365. package/test/app/chat-advanced-features.e2e.test.ts +0 -706
  366. package/test/app/chat-composer.test.tsx +0 -181
  367. package/test/app/chat-language-header.test.ts +0 -64
  368. package/test/app/chat-message.test.tsx +0 -222
  369. package/test/app/chat-modal-view.test.tsx +0 -191
  370. package/test/app/chat-routine-filter.test.ts +0 -96
  371. package/test/app/chat-send-lock.test.ts +0 -1465
  372. package/test/app/chat-stream-api-client.test.tsx +0 -390
  373. package/test/app/chat-view-game-modal.test.tsx +0 -661
  374. package/test/app/chat-view.test.tsx +0 -877
  375. package/test/app/cloud-api.e2e.test.ts +0 -258
  376. package/test/app/cloud-login-flow.e2e.test.ts +0 -494
  377. package/test/app/cloud-login-lock.test.ts +0 -412
  378. package/test/app/command-palette.test.tsx +0 -184
  379. package/test/app/command-registry.test.ts +0 -75
  380. package/test/app/companion-greeting-wave.test.tsx +0 -431
  381. package/test/app/companion-stale-conversation.test.tsx +0 -447
  382. package/test/app/companion-view.test.tsx +0 -690
  383. package/test/app/confirm-delete-control.test.ts +0 -79
  384. package/test/app/confirm-modal.test.tsx +0 -219
  385. package/test/app/connectors-ui.e2e.test.ts +0 -508
  386. package/test/app/conversations-sidebar-game-modal.test.tsx +0 -265
  387. package/test/app/conversations-sidebar.test.tsx +0 -185
  388. package/test/app/custom-actions-smoke.test.ts +0 -387
  389. package/test/app/custom-avatar-api-client.test.ts +0 -207
  390. package/test/app/desktop-utils.test.ts +0 -145
  391. package/test/app/electrobun-rpc-bridge.test.ts +0 -83
  392. package/test/app/events.test.ts +0 -88
  393. package/test/app/export-import-flows.e2e.test.ts +0 -700
  394. package/test/app/fine-tuning-view.test.ts +0 -471
  395. package/test/app/game-view-auth-session.test.tsx +0 -187
  396. package/test/app/game-view.test.ts +0 -444
  397. package/test/app/global-emote-overlay.test.tsx +0 -106
  398. package/test/app/header-status.test.tsx +0 -149
  399. package/test/app/i18n.test.ts +0 -152
  400. package/test/app/inventory-bsc-view.test.ts +0 -940
  401. package/test/app/knowledge-ui.e2e.test.ts +0 -762
  402. package/test/app/knowledge-upload-helpers.test.ts +0 -124
  403. package/test/app/lifecycle-lock.test.ts +0 -267
  404. package/test/app/lifo-popout-utils.test.ts +0 -208
  405. package/test/app/lifo-safe-endpoint.test.ts +0 -34
  406. package/test/app/loading-screen.test.tsx +0 -45
  407. package/test/app/memory-monitor.test.ts +0 -332
  408. package/test/app/navigation.test.tsx +0 -22
  409. package/test/app/onboarding-finish-lock.test.ts +0 -673
  410. package/test/app/onboarding-language.test.tsx +0 -160
  411. package/test/app/onboarding-steps.test.tsx +0 -375
  412. package/test/app/open-external-url.test.ts +0 -65
  413. package/test/app/pages-navigation-smoke.e2e.test.ts +0 -638
  414. package/test/app/pairing-lock.test.ts +0 -260
  415. package/test/app/pairing-view.test.tsx +0 -74
  416. package/test/app/permissions-section.test.ts +0 -432
  417. package/test/app/plugin-bridge.test.ts +0 -109
  418. package/test/app/plugins-ui.e2e.test.ts +0 -605
  419. package/test/app/plugins-view-game-modal.test.tsx +0 -687
  420. package/test/app/plugins-view-toggle-restart.test.ts +0 -129
  421. package/test/app/provider-dropdown-default.test.tsx +0 -300
  422. package/test/app/restart-banner.test.tsx +0 -197
  423. package/test/app/retake-capture.test.ts +0 -84
  424. package/test/app/sandbox-api-client.test.ts +0 -108
  425. package/test/app/save-command-modal.test.tsx +0 -109
  426. package/test/app/secrets-view.test.tsx +0 -92
  427. package/test/app/settings-control-styles.test.tsx +0 -142
  428. package/test/app/settings-reset.e2e.test.ts +0 -726
  429. package/test/app/settings-sections.e2e.test.ts +0 -614
  430. package/test/app/shared-format.test.ts +0 -44
  431. package/test/app/shared-switch.test.ts +0 -69
  432. package/test/app/shell-mode-switching.e2e.test.ts +0 -840
  433. package/test/app/shell-mode-tab-memory.test.tsx +0 -58
  434. package/test/app/shell-overlays.test.tsx +0 -50
  435. package/test/app/shortcuts-overlay.test.tsx +0 -111
  436. package/test/app/sse-interruption.test.ts +0 -122
  437. package/test/app/startup-asset-missing.e2e.test.ts +0 -126
  438. package/test/app/startup-backend-missing.e2e.test.ts +0 -118
  439. package/test/app/startup-chat.e2e.test.ts +0 -322
  440. package/test/app/startup-conversation-restore.test.tsx +0 -381
  441. package/test/app/startup-failure-view.test.tsx +0 -103
  442. package/test/app/startup-onboarding.e2e.test.ts +0 -618
  443. package/test/app/startup-timeout.test.tsx +0 -80
  444. package/test/app/startup-token-401.e2e.test.ts +0 -103
  445. package/test/app/stream-helpers.test.ts +0 -46
  446. package/test/app/stream-popout-navigation.test.tsx +0 -41
  447. package/test/app/stream-status-bar.test.tsx +0 -89
  448. package/test/app/theme-toggle.test.tsx +0 -33
  449. package/test/app/training-api-client.test.ts +0 -128
  450. package/test/app/trajectories-view.test.tsx +0 -220
  451. package/test/app/triggers-api-client.test.ts +0 -77
  452. package/test/app/triggers-navigation.test.ts +0 -113
  453. package/test/app/triggers-view.e2e.test.ts +0 -675
  454. package/test/app/update-channel-lock.test.ts +0 -259
  455. package/test/app/vector-browser.async-cleanup.test.tsx +0 -367
  456. package/test/app/vector-browser.e2e.test.ts +0 -653
  457. package/test/app/vrm-stage.test.tsx +0 -351
  458. package/test/app/vrm-viewer.test.tsx +0 -298
  459. package/test/app/wallet-api-save-lock.test.ts +0 -299
  460. package/test/app/wallet-hooks.test.ts +0 -405
  461. package/test/app/wallet-ui-flows.e2e.test.ts +0 -556
  462. package/test/avatar/asset-url.test.ts +0 -90
  463. package/test/avatar/avatar-selector.test.ts +0 -173
  464. package/test/avatar/mixamo-vrm-rig-map.test.ts +0 -111
  465. package/test/avatar/voice-chat-streaming-text.test.ts +0 -96
  466. package/test/avatar/voice-chat.test.ts +0 -391
  467. package/test/browser-extension/README.md +0 -138
  468. package/test/browser-extension/test-harness.ts +0 -499
  469. package/test/capacitor-plugins.e2e.test.ts +0 -168
  470. package/test/test-types.ts +0 -5
  471. package/test/ui/command-palette-commands.test.ts +0 -57
  472. package/test/ui/ui-renderer.test.ts +0 -39
  473. package/test/utils/assistant-text.test.ts +0 -68
  474. package/test/utils/streaming-text.test.ts +0 -89
  475. package/tsconfig.build.json +0 -19
  476. package/tsconfig.json +0 -20
  477. package/tsconfig.typecheck.json +0 -12
  478. /package/{dist/App.d.ts → App.d.ts} +0 -0
  479. /package/{dist/App.d.ts.map → App.d.ts.map} +0 -0
  480. /package/{dist/App.js → App.js} +0 -0
  481. /package/{dist/actions → actions}/character.js +0 -0
  482. /package/{dist/actions → actions}/chat-helpers.d.ts +0 -0
  483. /package/{dist/actions → actions}/chat-helpers.d.ts.map +0 -0
  484. /package/{dist/actions → actions}/chat-helpers.js +0 -0
  485. /package/{dist/actions → actions}/cloud.js +0 -0
  486. /package/{dist/actions → actions}/index.d.ts +0 -0
  487. /package/{dist/actions → actions}/index.d.ts.map +0 -0
  488. /package/{dist/actions → actions}/index.js +0 -0
  489. /package/{dist/actions → actions}/onboarding.d.ts +0 -0
  490. /package/{dist/actions → actions}/onboarding.d.ts.map +0 -0
  491. /package/{dist/actions → actions}/onboarding.js +0 -0
  492. /package/{dist/actions → actions}/triggers.js +0 -0
  493. /package/{dist/api → api}/index.d.ts +0 -0
  494. /package/{dist/api → api}/index.d.ts.map +0 -0
  495. /package/{dist/api → api}/index.js +0 -0
  496. /package/{dist/autonomy → autonomy}/index.d.ts +0 -0
  497. /package/{dist/autonomy → autonomy}/index.d.ts.map +0 -0
  498. /package/{dist/autonomy → autonomy}/index.js +0 -0
  499. /package/{dist/bridge → bridge}/electrobun-rpc.d.ts +0 -0
  500. /package/{dist/bridge → bridge}/electrobun-rpc.d.ts.map +0 -0
  501. /package/{dist/bridge → bridge}/electrobun-runtime.d.ts +0 -0
  502. /package/{dist/bridge → bridge}/electrobun-runtime.d.ts.map +0 -0
  503. /package/{dist/bridge → bridge}/electrobun-runtime.js +0 -0
  504. /package/{dist/bridge → bridge}/index.d.ts +0 -0
  505. /package/{dist/bridge → bridge}/index.d.ts.map +0 -0
  506. /package/{dist/bridge → bridge}/index.js +0 -0
  507. /package/{dist/bridge → bridge}/native-plugins.d.ts +0 -0
  508. /package/{dist/bridge → bridge}/native-plugins.d.ts.map +0 -0
  509. /package/{dist/bridge → bridge}/native-plugins.js +0 -0
  510. /package/{dist/bridge → bridge}/storage-bridge.d.ts +0 -0
  511. /package/{dist/bridge → bridge}/storage-bridge.d.ts.map +0 -0
  512. /package/{dist/coding → coding}/index.d.ts +0 -0
  513. /package/{dist/coding → coding}/index.d.ts.map +0 -0
  514. /package/{dist/coding → coding}/index.js +0 -0
  515. /package/{dist/components → components}/AdvancedPageView.d.ts +0 -0
  516. /package/{dist/components → components}/AdvancedPageView.d.ts.map +0 -0
  517. /package/{dist/components → components}/AdvancedPageView.js +0 -0
  518. /package/{dist/components → components}/AgentActivityBox.d.ts +0 -0
  519. /package/{dist/components → components}/AgentActivityBox.d.ts.map +0 -0
  520. /package/{dist/components → components}/AgentActivityBox.js +0 -0
  521. /package/{dist/components → components}/ApiKeyConfig.d.ts +0 -0
  522. /package/{dist/components → components}/ApiKeyConfig.d.ts.map +0 -0
  523. /package/{dist/components → components}/ApiKeyConfig.js +0 -0
  524. /package/{dist/components → components}/AppsPageView.d.ts +0 -0
  525. /package/{dist/components → components}/AppsPageView.d.ts.map +0 -0
  526. /package/{dist/components → components}/AppsPageView.js +0 -0
  527. /package/{dist/components → components}/AppsView.d.ts +0 -0
  528. /package/{dist/components → components}/AppsView.d.ts.map +0 -0
  529. /package/{dist/components → components}/AppsView.js +0 -0
  530. /package/{dist/components → components}/AvatarLoader.d.ts +0 -0
  531. /package/{dist/components → components}/AvatarLoader.d.ts.map +0 -0
  532. /package/{dist/components → components}/AvatarLoader.js +0 -0
  533. /package/{dist/components → components}/AvatarSelector.d.ts +0 -0
  534. /package/{dist/components → components}/AvatarSelector.d.ts.map +0 -0
  535. /package/{dist/components → components}/AvatarSelector.js +0 -0
  536. /package/{dist/components → components}/BscTradePanel.d.ts +0 -0
  537. /package/{dist/components → components}/BscTradePanel.d.ts.map +0 -0
  538. /package/{dist/components → components}/BscTradePanel.js +0 -0
  539. /package/{dist/components → components}/BugReportModal.d.ts +0 -0
  540. /package/{dist/components → components}/BugReportModal.d.ts.map +0 -0
  541. /package/{dist/components → components}/CharacterView.d.ts +0 -0
  542. /package/{dist/components → components}/CharacterView.d.ts.map +0 -0
  543. /package/{dist/components → components}/CharacterView.js +0 -0
  544. /package/{dist/components → components}/ChatAvatar.d.ts +0 -0
  545. /package/{dist/components → components}/ChatAvatar.d.ts.map +0 -0
  546. /package/{dist/components → components}/ChatAvatar.js +0 -0
  547. /package/{dist/components → components}/ChatComposer.d.ts +0 -0
  548. /package/{dist/components → components}/ChatComposer.d.ts.map +0 -0
  549. /package/{dist/components → components}/ChatComposer.js +0 -0
  550. /package/{dist/components → components}/ChatMessage.d.ts +0 -0
  551. /package/{dist/components → components}/ChatMessage.d.ts.map +0 -0
  552. /package/{dist/components → components}/ChatMessage.js +0 -0
  553. /package/{dist/components → components}/ChatModalView.d.ts +0 -0
  554. /package/{dist/components → components}/ChatModalView.d.ts.map +0 -0
  555. /package/{dist/components → components}/ChatModalView.js +0 -0
  556. /package/{dist/components → components}/ChatView.d.ts +0 -0
  557. /package/{dist/components → components}/ChatView.d.ts.map +0 -0
  558. /package/{dist/components → components}/ChatView.js +0 -0
  559. /package/{dist/components → components}/CloudSourceControls.d.ts +0 -0
  560. /package/{dist/components → components}/CloudSourceControls.d.ts.map +0 -0
  561. /package/{dist/components → components}/CloudSourceControls.js +0 -0
  562. /package/{dist/components → components}/CodingAgentSettingsSection.d.ts +0 -0
  563. /package/{dist/components → components}/CodingAgentSettingsSection.d.ts.map +0 -0
  564. /package/{dist/components → components}/CodingAgentSettingsSection.js +0 -0
  565. /package/{dist/components → components}/CommandPalette.d.ts +0 -0
  566. /package/{dist/components → components}/CommandPalette.d.ts.map +0 -0
  567. /package/{dist/components → components}/CompanionSceneHost.d.ts +0 -0
  568. /package/{dist/components → components}/CompanionSceneHost.d.ts.map +0 -0
  569. /package/{dist/components → components}/CompanionShell.d.ts +0 -0
  570. /package/{dist/components → components}/CompanionShell.d.ts.map +0 -0
  571. /package/{dist/components → components}/CompanionShell.js +0 -0
  572. /package/{dist/components → components}/CompanionView.d.ts +0 -0
  573. /package/{dist/components → components}/CompanionView.d.ts.map +0 -0
  574. /package/{dist/components → components}/CompanionView.js +0 -0
  575. /package/{dist/components → components}/ConfigPageView.d.ts +0 -0
  576. /package/{dist/components → components}/ConfigPageView.d.ts.map +0 -0
  577. /package/{dist/components → components}/ConfigPageView.js +0 -0
  578. /package/{dist/components → components}/ConfigSaveFooter.d.ts +0 -0
  579. /package/{dist/components → components}/ConfigSaveFooter.d.ts.map +0 -0
  580. /package/{dist/components → components}/ConfigSaveFooter.js +0 -0
  581. /package/{dist/components → components}/ConfirmModal.d.ts +0 -0
  582. /package/{dist/components → components}/ConfirmModal.d.ts.map +0 -0
  583. /package/{dist/components → components}/ConfirmModal.js +0 -0
  584. /package/{dist/components → components}/ConnectionFailedBanner.d.ts +0 -0
  585. /package/{dist/components → components}/ConnectionFailedBanner.d.ts.map +0 -0
  586. /package/{dist/components → components}/ConnectionFailedBanner.js +0 -0
  587. /package/{dist/components → components}/ConnectorsPageView.d.ts +0 -0
  588. /package/{dist/components → components}/ConnectorsPageView.d.ts.map +0 -0
  589. /package/{dist/components → components}/ConnectorsPageView.js +0 -0
  590. /package/{dist/components → components}/ConversationsSidebar.d.ts +0 -0
  591. /package/{dist/components → components}/ConversationsSidebar.d.ts.map +0 -0
  592. /package/{dist/components → components}/ConversationsSidebar.js +0 -0
  593. /package/{dist/components → components}/CustomActionEditor.d.ts +0 -0
  594. /package/{dist/components → components}/CustomActionEditor.d.ts.map +0 -0
  595. /package/{dist/components → components}/CustomActionEditor.js +0 -0
  596. /package/{dist/components → components}/CustomActionsPanel.d.ts +0 -0
  597. /package/{dist/components → components}/CustomActionsPanel.d.ts.map +0 -0
  598. /package/{dist/components → components}/CustomActionsPanel.js +0 -0
  599. /package/{dist/components → components}/CustomActionsView.d.ts +0 -0
  600. /package/{dist/components → components}/CustomActionsView.d.ts.map +0 -0
  601. /package/{dist/components → components}/CustomActionsView.js +0 -0
  602. /package/{dist/components → components}/DatabasePageView.d.ts +0 -0
  603. /package/{dist/components → components}/DatabasePageView.d.ts.map +0 -0
  604. /package/{dist/components → components}/DatabasePageView.js +0 -0
  605. /package/{dist/components → components}/DatabaseView.d.ts +0 -0
  606. /package/{dist/components → components}/DatabaseView.d.ts.map +0 -0
  607. /package/{dist/components → components}/DatabaseView.js +0 -0
  608. /package/{dist/components → components}/ElizaCloudDashboard.d.ts +0 -0
  609. /package/{dist/components → components}/ElizaCloudDashboard.d.ts.map +0 -0
  610. /package/{dist/components → components}/EmotePicker.d.ts +0 -0
  611. /package/{dist/components → components}/EmotePicker.d.ts.map +0 -0
  612. /package/{dist/components → components}/ErrorBoundary.d.ts +0 -0
  613. /package/{dist/components → components}/ErrorBoundary.d.ts.map +0 -0
  614. /package/{dist/components → components}/ErrorBoundary.js +0 -0
  615. /package/{dist/components → components}/FineTuningView.d.ts +0 -0
  616. /package/{dist/components → components}/FineTuningView.d.ts.map +0 -0
  617. /package/{dist/components → components}/FineTuningView.js +0 -0
  618. /package/{dist/components → components}/GameView.d.ts +0 -0
  619. /package/{dist/components → components}/GameView.d.ts.map +0 -0
  620. /package/{dist/components → components}/GameView.js +0 -0
  621. /package/{dist/components → components}/GameViewOverlay.d.ts +0 -0
  622. /package/{dist/components → components}/GameViewOverlay.d.ts.map +0 -0
  623. /package/{dist/components → components}/GameViewOverlay.js +0 -0
  624. /package/{dist/components → components}/GlobalEmoteOverlay.d.ts +0 -0
  625. /package/{dist/components → components}/GlobalEmoteOverlay.d.ts.map +0 -0
  626. /package/{dist/components → components}/Header.d.ts +0 -0
  627. /package/{dist/components → components}/Header.d.ts.map +0 -0
  628. /package/{dist/components → components}/Header.js +0 -0
  629. /package/{dist/components → components}/HeartbeatsView.d.ts +0 -0
  630. /package/{dist/components → components}/HeartbeatsView.d.ts.map +0 -0
  631. /package/{dist/components → components}/HeartbeatsView.js +0 -0
  632. /package/{dist/components → components}/InventoryView.d.ts +0 -0
  633. /package/{dist/components → components}/InventoryView.d.ts.map +0 -0
  634. /package/{dist/components → components}/InventoryView.js +0 -0
  635. /package/{dist/components → components}/KnowledgeView.d.ts +0 -0
  636. /package/{dist/components → components}/KnowledgeView.d.ts.map +0 -0
  637. /package/{dist/components → components}/KnowledgeView.js +0 -0
  638. /package/{dist/components → components}/LanguageDropdown.d.ts +0 -0
  639. /package/{dist/components → components}/LanguageDropdown.d.ts.map +0 -0
  640. /package/{dist/components → components}/LanguageDropdown.js +0 -0
  641. /package/{dist/components → components}/LifoMonitorPanel.d.ts +0 -0
  642. /package/{dist/components → components}/LifoMonitorPanel.d.ts.map +0 -0
  643. /package/{dist/components → components}/LifoMonitorPanel.js +0 -0
  644. /package/{dist/components → components}/LifoSandboxView.d.ts +0 -0
  645. /package/{dist/components → components}/LifoSandboxView.d.ts.map +0 -0
  646. /package/{dist/components → components}/LifoSandboxView.js +0 -0
  647. /package/{dist/components → components}/LoadingScreen.d.ts +0 -0
  648. /package/{dist/components → components}/LoadingScreen.d.ts.map +0 -0
  649. /package/{dist/components → components}/LoadingScreen.js +0 -0
  650. /package/{dist/components → components}/LogsPageView.d.ts +0 -0
  651. /package/{dist/components → components}/LogsPageView.d.ts.map +0 -0
  652. /package/{dist/components → components}/LogsPageView.js +0 -0
  653. /package/{dist/components → components}/LogsView.d.ts +0 -0
  654. /package/{dist/components → components}/LogsView.d.ts.map +0 -0
  655. /package/{dist/components → components}/LogsView.js +0 -0
  656. /package/{dist/components → components}/MediaGalleryView.d.ts +0 -0
  657. /package/{dist/components → components}/MediaGalleryView.d.ts.map +0 -0
  658. /package/{dist/components → components}/MediaGalleryView.js +0 -0
  659. /package/{dist/components → components}/MediaSettingsSection.d.ts +0 -0
  660. /package/{dist/components → components}/MediaSettingsSection.d.ts.map +0 -0
  661. /package/{dist/components → components}/MediaSettingsSection.js +0 -0
  662. /package/{dist/components → components}/MessageContent.d.ts +0 -0
  663. /package/{dist/components → components}/MessageContent.d.ts.map +0 -0
  664. /package/{dist/components → components}/MessageContent.js +0 -0
  665. /package/{dist/components → components}/OnboardingWizard.d.ts +0 -0
  666. /package/{dist/components → components}/OnboardingWizard.d.ts.map +0 -0
  667. /package/{dist/components → components}/OnboardingWizard.js +0 -0
  668. /package/{dist/components → components}/PairingView.d.ts +0 -0
  669. /package/{dist/components → components}/PairingView.d.ts.map +0 -0
  670. /package/{dist/components → components}/PermissionsSection.d.ts +0 -0
  671. /package/{dist/components → components}/PermissionsSection.d.ts.map +0 -0
  672. /package/{dist/components → components}/PermissionsSection.js +0 -0
  673. /package/{dist/components → components}/PluginsPageView.d.ts +0 -0
  674. /package/{dist/components → components}/PluginsPageView.d.ts.map +0 -0
  675. /package/{dist/components → components}/PluginsPageView.js +0 -0
  676. /package/{dist/components → components}/PluginsView.d.ts +0 -0
  677. /package/{dist/components → components}/PluginsView.d.ts.map +0 -0
  678. /package/{dist/components → components}/PluginsView.js +0 -0
  679. /package/{dist/components → components}/ProviderSwitcher.d.ts +0 -0
  680. /package/{dist/components → components}/ProviderSwitcher.d.ts.map +0 -0
  681. /package/{dist/components → components}/RestartBanner.d.ts +0 -0
  682. /package/{dist/components → components}/RestartBanner.d.ts.map +0 -0
  683. /package/{dist/components → components}/RestartBanner.js +0 -0
  684. /package/{dist/components → components}/RuntimeView.d.ts +0 -0
  685. /package/{dist/components → components}/RuntimeView.d.ts.map +0 -0
  686. /package/{dist/components → components}/RuntimeView.js +0 -0
  687. /package/{dist/components → components}/SaveCommandModal.d.ts +0 -0
  688. /package/{dist/components → components}/SaveCommandModal.d.ts.map +0 -0
  689. /package/{dist/components → components}/SaveCommandModal.js +0 -0
  690. /package/{dist/components → components}/SecretsView.d.ts +0 -0
  691. /package/{dist/components → components}/SecretsView.d.ts.map +0 -0
  692. /package/{dist/components → components}/SettingsView.d.ts +0 -0
  693. /package/{dist/components → components}/SettingsView.d.ts.map +0 -0
  694. /package/{dist/components → components}/SettingsView.js +0 -0
  695. /package/{dist/components → components}/ShellOverlays.d.ts +0 -0
  696. /package/{dist/components → components}/ShellOverlays.d.ts.map +0 -0
  697. /package/{dist/components → components}/ShellOverlays.js +0 -0
  698. /package/{dist/components → components}/ShortcutsOverlay.d.ts +0 -0
  699. /package/{dist/components → components}/ShortcutsOverlay.d.ts.map +0 -0
  700. /package/{dist/components → components}/ShortcutsOverlay.js +0 -0
  701. /package/{dist/components → components}/SkillsView.d.ts +0 -0
  702. /package/{dist/components → components}/SkillsView.d.ts.map +0 -0
  703. /package/{dist/components → components}/SkillsView.js +0 -0
  704. /package/{dist/components → components}/StartupFailureView.d.ts +0 -0
  705. /package/{dist/components → components}/StartupFailureView.d.ts.map +0 -0
  706. /package/{dist/components → components}/StreamView.d.ts +0 -0
  707. /package/{dist/components → components}/StreamView.d.ts.map +0 -0
  708. /package/{dist/components → components}/StripeEmbeddedCheckout.d.ts +0 -0
  709. /package/{dist/components → components}/StripeEmbeddedCheckout.d.ts.map +0 -0
  710. /package/{dist/components → components}/SubscriptionStatus.d.ts +0 -0
  711. /package/{dist/components → components}/SubscriptionStatus.d.ts.map +0 -0
  712. /package/{dist/components → components}/SystemWarningBanner.d.ts +0 -0
  713. /package/{dist/components → components}/SystemWarningBanner.d.ts.map +0 -0
  714. /package/{dist/components → components}/SystemWarningBanner.js +0 -0
  715. /package/{dist/components → components}/ThemeToggle.d.ts +0 -0
  716. /package/{dist/components → components}/ThemeToggle.d.ts.map +0 -0
  717. /package/{dist/components → components}/ThemeToggle.js +0 -0
  718. /package/{dist/components → components}/TrajectoriesView.d.ts +0 -0
  719. /package/{dist/components → components}/TrajectoriesView.d.ts.map +0 -0
  720. /package/{dist/components → components}/TrajectoriesView.js +0 -0
  721. /package/{dist/components → components}/TrajectoryDetailView.d.ts +0 -0
  722. /package/{dist/components → components}/TrajectoryDetailView.d.ts.map +0 -0
  723. /package/{dist/components → components}/TrajectoryDetailView.js +0 -0
  724. /package/{dist/components → components}/TriggersView.d.ts +0 -0
  725. /package/{dist/components → components}/TriggersView.d.ts.map +0 -0
  726. /package/{dist/components → components}/TriggersView.js +0 -0
  727. /package/{dist/components → components}/VectorBrowserView.d.ts +0 -0
  728. /package/{dist/components → components}/VectorBrowserView.d.ts.map +0 -0
  729. /package/{dist/components → components}/VectorBrowserView.js +0 -0
  730. /package/{dist/components → components}/VoiceConfigView.d.ts +0 -0
  731. /package/{dist/components → components}/VoiceConfigView.d.ts.map +0 -0
  732. /package/{dist/components → components}/VrmStage.d.ts +0 -0
  733. /package/{dist/components → components}/VrmStage.d.ts.map +0 -0
  734. /package/{dist/components → components}/VrmStage.js +0 -0
  735. /package/{dist/components → components}/WhatsAppQrOverlay.d.ts +0 -0
  736. /package/{dist/components → components}/WhatsAppQrOverlay.d.ts.map +0 -0
  737. /package/{dist/components → components}/WhatsAppQrOverlay.js +0 -0
  738. /package/{dist/components → components}/apps/AppDetailPane.d.ts +0 -0
  739. /package/{dist/components → components}/apps/AppDetailPane.d.ts.map +0 -0
  740. /package/{dist/components → components}/apps/AppDetailPane.js +0 -0
  741. /package/{dist/components → components}/apps/AppsCatalogGrid.d.ts +0 -0
  742. /package/{dist/components → components}/apps/AppsCatalogGrid.d.ts.map +0 -0
  743. /package/{dist/components → components}/apps/AppsCatalogGrid.js +0 -0
  744. /package/{dist/components → components}/apps/extensions/registry.d.ts +0 -0
  745. /package/{dist/components → components}/apps/extensions/registry.d.ts.map +0 -0
  746. /package/{dist/components → components}/apps/extensions/registry.js +0 -0
  747. /package/{dist/components → components}/apps/extensions/types.d.ts +0 -0
  748. /package/{dist/components → components}/apps/extensions/types.d.ts.map +0 -0
  749. /package/{dist/components → components}/apps/extensions/types.js +0 -0
  750. /package/{dist/components → components}/apps/helpers.d.ts +0 -0
  751. /package/{dist/components → components}/apps/helpers.d.ts.map +0 -0
  752. /package/{dist/components → components}/apps/helpers.js +0 -0
  753. /package/{dist/components → components}/avatar/VrmAnimationLoader.d.ts +0 -0
  754. /package/{dist/components → components}/avatar/VrmAnimationLoader.d.ts.map +0 -0
  755. /package/{dist/components → components}/avatar/VrmAnimationLoader.js +0 -0
  756. /package/{dist/components → components}/avatar/VrmBlinkController.d.ts +0 -0
  757. /package/{dist/components → components}/avatar/VrmBlinkController.d.ts.map +0 -0
  758. /package/{dist/components → components}/avatar/VrmBlinkController.js +0 -0
  759. /package/{dist/components → components}/avatar/VrmCameraManager.d.ts +0 -0
  760. /package/{dist/components → components}/avatar/VrmCameraManager.d.ts.map +0 -0
  761. /package/{dist/components → components}/avatar/VrmCameraManager.js +0 -0
  762. /package/{dist/components → components}/avatar/VrmEngine.d.ts +0 -0
  763. /package/{dist/components → components}/avatar/VrmEngine.d.ts.map +0 -0
  764. /package/{dist/components → components}/avatar/VrmFootShadow.d.ts +0 -0
  765. /package/{dist/components → components}/avatar/VrmFootShadow.d.ts.map +0 -0
  766. /package/{dist/components → components}/avatar/VrmFootShadow.js +0 -0
  767. /package/{dist/components → components}/avatar/mixamoVRMRigMap.d.ts +0 -0
  768. /package/{dist/components → components}/avatar/mixamoVRMRigMap.d.ts.map +0 -0
  769. /package/{dist/components → components}/avatar/mixamoVRMRigMap.js +0 -0
  770. /package/{dist/components → components}/avatar/retargetMixamoFbxToVrm.d.ts +0 -0
  771. /package/{dist/components → components}/avatar/retargetMixamoFbxToVrm.d.ts.map +0 -0
  772. /package/{dist/components → components}/avatar/retargetMixamoFbxToVrm.js +0 -0
  773. /package/{dist/components → components}/avatar/retargetMixamoGltfToVrm.d.ts +0 -0
  774. /package/{dist/components → components}/avatar/retargetMixamoGltfToVrm.d.ts.map +0 -0
  775. /package/{dist/components → components}/avatar/retargetMixamoGltfToVrm.js +0 -0
  776. /package/{dist/components → components}/chainConfig.d.ts +0 -0
  777. /package/{dist/components → components}/chainConfig.d.ts.map +0 -0
  778. /package/{dist/components → components}/chainConfig.js +0 -0
  779. /package/{dist/components → components}/companion/CompanionHeader.d.ts +0 -0
  780. /package/{dist/components → components}/companion/CompanionHeader.d.ts.map +0 -0
  781. /package/{dist/components → components}/companion/CompanionHeader.js +0 -0
  782. /package/{dist/components → components}/companion/CompanionSceneHost.d.ts +0 -0
  783. /package/{dist/components → components}/companion/CompanionSceneHost.d.ts.map +0 -0
  784. /package/{dist/components → components}/companion/CompanionSceneHost.js +0 -0
  785. /package/{dist/components → components}/companion/VrmStage.d.ts +0 -0
  786. /package/{dist/components → components}/companion/VrmStage.d.ts.map +0 -0
  787. /package/{dist/components → components}/companion/VrmStage.js +0 -0
  788. /package/{dist/components → components}/companion-shell-styles.d.ts +0 -0
  789. /package/{dist/components → components}/companion-shell-styles.d.ts.map +0 -0
  790. /package/{dist/components → components}/companion-shell-styles.js +0 -0
  791. /package/{dist/components → components}/confirm-delete-control.d.ts +0 -0
  792. /package/{dist/components → components}/confirm-delete-control.d.ts.map +0 -0
  793. /package/{dist/components → components}/confirm-delete-control.js +0 -0
  794. /package/{dist/components → components}/conversations/ConversationListItem.d.ts +0 -0
  795. /package/{dist/components → components}/conversations/ConversationListItem.d.ts.map +0 -0
  796. /package/{dist/components → components}/conversations/ConversationListItem.js +0 -0
  797. /package/{dist/components → components}/conversations/conversation-utils.d.ts +0 -0
  798. /package/{dist/components → components}/conversations/conversation-utils.d.ts.map +0 -0
  799. /package/{dist/components → components}/conversations/conversation-utils.js +0 -0
  800. /package/{dist/components → components}/format.d.ts.map +0 -0
  801. /package/{dist/components → components}/index.d.ts +0 -0
  802. /package/{dist/components → components}/index.d.ts.map +0 -0
  803. /package/{dist/components → components}/index.js +0 -0
  804. /package/{dist/components → components}/inventory/CopyableAddress.d.ts +0 -0
  805. /package/{dist/components → components}/inventory/CopyableAddress.d.ts.map +0 -0
  806. /package/{dist/components → components}/inventory/CopyableAddress.js +0 -0
  807. /package/{dist/components → components}/inventory/InventoryToolbar.d.ts +0 -0
  808. /package/{dist/components → components}/inventory/InventoryToolbar.d.ts.map +0 -0
  809. /package/{dist/components → components}/inventory/InventoryToolbar.js +0 -0
  810. /package/{dist/components → components}/inventory/NftGrid.d.ts +0 -0
  811. /package/{dist/components → components}/inventory/NftGrid.d.ts.map +0 -0
  812. /package/{dist/components → components}/inventory/NftGrid.js +0 -0
  813. /package/{dist/components → components}/inventory/TokenLogo.d.ts +0 -0
  814. /package/{dist/components → components}/inventory/TokenLogo.d.ts.map +0 -0
  815. /package/{dist/components → components}/inventory/TokenLogo.js +0 -0
  816. /package/{dist/components → components}/inventory/TokensTable.d.ts +0 -0
  817. /package/{dist/components → components}/inventory/TokensTable.d.ts.map +0 -0
  818. /package/{dist/components → components}/inventory/TokensTable.js +0 -0
  819. /package/{dist/components → components}/inventory/constants.d.ts +0 -0
  820. /package/{dist/components → components}/inventory/constants.d.ts.map +0 -0
  821. /package/{dist/components → components}/inventory/constants.js +0 -0
  822. /package/{dist/components → components}/inventory/index.d.ts +0 -0
  823. /package/{dist/components → components}/inventory/index.d.ts.map +0 -0
  824. /package/{dist/components → components}/inventory/index.js +0 -0
  825. /package/{dist/components → components}/inventory/media-url.d.ts +0 -0
  826. /package/{dist/components → components}/inventory/media-url.d.ts.map +0 -0
  827. /package/{dist/components → components}/inventory/media-url.js +0 -0
  828. /package/{dist/components → components}/inventory/useInventoryData.d.ts +0 -0
  829. /package/{dist/components → components}/inventory/useInventoryData.d.ts.map +0 -0
  830. /package/{dist/components → components}/inventory/useInventoryData.js +0 -0
  831. /package/{dist/components → components}/knowledge-upload-image.d.ts +0 -0
  832. /package/{dist/components → components}/knowledge-upload-image.d.ts.map +0 -0
  833. /package/{dist/components → components}/knowledge-upload-image.js +0 -0
  834. /package/{dist/components → components}/labels.d.ts +0 -0
  835. /package/{dist/components → components}/labels.d.ts.map +0 -0
  836. /package/{dist/components → components}/labels.js +0 -0
  837. /package/{dist/components → components}/onboarding/ActivateStep.d.ts +0 -0
  838. /package/{dist/components → components}/onboarding/ActivateStep.d.ts.map +0 -0
  839. /package/{dist/components → components}/onboarding/ActivateStep.js +0 -0
  840. /package/{dist/components → components}/onboarding/ConnectionStep.d.ts +0 -0
  841. /package/{dist/components → components}/onboarding/ConnectionStep.d.ts.map +0 -0
  842. /package/{dist/components → components}/onboarding/ConnectionStep.js +0 -0
  843. /package/{dist/components → components}/onboarding/IdentityStep.d.ts +0 -0
  844. /package/{dist/components → components}/onboarding/IdentityStep.d.ts.map +0 -0
  845. /package/{dist/components → components}/onboarding/IdentityStep.js +0 -0
  846. /package/{dist/components → components}/onboarding/OnboardingPanel.d.ts +0 -0
  847. /package/{dist/components → components}/onboarding/OnboardingPanel.d.ts.map +0 -0
  848. /package/{dist/components → components}/onboarding/OnboardingPanel.js +0 -0
  849. /package/{dist/components → components}/onboarding/OnboardingStepNav.d.ts +0 -0
  850. /package/{dist/components → components}/onboarding/OnboardingStepNav.d.ts.map +0 -0
  851. /package/{dist/components → components}/onboarding/OnboardingStepNav.js +0 -0
  852. /package/{dist/components → components}/onboarding/PermissionsStep.d.ts +0 -0
  853. /package/{dist/components → components}/onboarding/PermissionsStep.d.ts.map +0 -0
  854. /package/{dist/components → components}/onboarding/PermissionsStep.js +0 -0
  855. /package/{dist/components → components}/onboarding/RpcStep.d.ts +0 -0
  856. /package/{dist/components → components}/onboarding/RpcStep.d.ts.map +0 -0
  857. /package/{dist/components → components}/onboarding/RpcStep.js +0 -0
  858. /package/{dist/components → components}/permissions/PermissionIcon.d.ts +0 -0
  859. /package/{dist/components → components}/permissions/PermissionIcon.d.ts.map +0 -0
  860. /package/{dist/components → components}/permissions/PermissionIcon.js +0 -0
  861. /package/{dist/components → components}/permissions/StreamingPermissions.d.ts +0 -0
  862. /package/{dist/components → components}/permissions/StreamingPermissions.d.ts.map +0 -0
  863. /package/{dist/components → components}/plugins/showcase-data.d.ts +0 -0
  864. /package/{dist/components → components}/plugins/showcase-data.d.ts.map +0 -0
  865. /package/{dist/components → components}/plugins/showcase-data.js +0 -0
  866. /package/{dist/components → components}/shared/ShellHeaderControls.d.ts +0 -0
  867. /package/{dist/components → components}/shared/ShellHeaderControls.d.ts.map +0 -0
  868. /package/{dist/components → components}/shared/ShellHeaderControls.js +0 -0
  869. /package/{dist/components → components}/shared-companion-scene-context.d.ts +0 -0
  870. /package/{dist/components → components}/shared-companion-scene-context.d.ts.map +0 -0
  871. /package/{dist/components → components}/shared-companion-scene-context.js +0 -0
  872. /package/{dist/components → components}/skeletons.d.ts +0 -0
  873. /package/{dist/components → components}/skeletons.d.ts.map +0 -0
  874. /package/{dist/components → components}/skeletons.js +0 -0
  875. /package/{dist/components → components}/stream/ActivityFeed.d.ts +0 -0
  876. /package/{dist/components → components}/stream/ActivityFeed.d.ts.map +0 -0
  877. /package/{dist/components → components}/stream/ActivityFeed.js +0 -0
  878. /package/{dist/components → components}/stream/AvatarPip.d.ts +0 -0
  879. /package/{dist/components → components}/stream/AvatarPip.d.ts.map +0 -0
  880. /package/{dist/components → components}/stream/AvatarPip.js +0 -0
  881. /package/{dist/components → components}/stream/ChatContent.d.ts +0 -0
  882. /package/{dist/components → components}/stream/ChatContent.d.ts.map +0 -0
  883. /package/{dist/components → components}/stream/ChatContent.js +0 -0
  884. /package/{dist/components → components}/stream/ChatTicker.d.ts +0 -0
  885. /package/{dist/components → components}/stream/ChatTicker.d.ts.map +0 -0
  886. /package/{dist/components → components}/stream/ChatTicker.js +0 -0
  887. /package/{dist/components → components}/stream/IdleContent.d.ts +0 -0
  888. /package/{dist/components → components}/stream/IdleContent.d.ts.map +0 -0
  889. /package/{dist/components → components}/stream/IdleContent.js +0 -0
  890. /package/{dist/components → components}/stream/StatusBar.d.ts +0 -0
  891. /package/{dist/components → components}/stream/StatusBar.d.ts.map +0 -0
  892. /package/{dist/components → components}/stream/StreamSettings.d.ts +0 -0
  893. /package/{dist/components → components}/stream/StreamSettings.d.ts.map +0 -0
  894. /package/{dist/components → components}/stream/StreamSettings.js +0 -0
  895. /package/{dist/components → components}/stream/StreamTerminal.d.ts +0 -0
  896. /package/{dist/components → components}/stream/StreamTerminal.d.ts.map +0 -0
  897. /package/{dist/components → components}/stream/StreamTerminal.js +0 -0
  898. /package/{dist/components → components}/stream/StreamVoiceConfig.d.ts +0 -0
  899. /package/{dist/components → components}/stream/StreamVoiceConfig.d.ts.map +0 -0
  900. /package/{dist/components → components}/stream/StreamVoiceConfig.js +0 -0
  901. /package/{dist/components → components}/stream/helpers.d.ts +0 -0
  902. /package/{dist/components → components}/stream/helpers.d.ts.map +0 -0
  903. /package/{dist/components → components}/stream/helpers.js +0 -0
  904. /package/{dist/components → components}/stream/overlays/OverlayLayer.d.ts +0 -0
  905. /package/{dist/components → components}/stream/overlays/OverlayLayer.d.ts.map +0 -0
  906. /package/{dist/components → components}/stream/overlays/OverlayLayer.js +0 -0
  907. /package/{dist/components → components}/stream/overlays/built-in/ActionTickerWidget.d.ts +0 -0
  908. /package/{dist/components → components}/stream/overlays/built-in/ActionTickerWidget.d.ts.map +0 -0
  909. /package/{dist/components → components}/stream/overlays/built-in/ActionTickerWidget.js +0 -0
  910. /package/{dist/components → components}/stream/overlays/built-in/AlertPopupWidget.d.ts +0 -0
  911. /package/{dist/components → components}/stream/overlays/built-in/AlertPopupWidget.d.ts.map +0 -0
  912. /package/{dist/components → components}/stream/overlays/built-in/AlertPopupWidget.js +0 -0
  913. /package/{dist/components → components}/stream/overlays/built-in/BrandingWidget.d.ts +0 -0
  914. /package/{dist/components → components}/stream/overlays/built-in/BrandingWidget.d.ts.map +0 -0
  915. /package/{dist/components → components}/stream/overlays/built-in/BrandingWidget.js +0 -0
  916. /package/{dist/components → components}/stream/overlays/built-in/CustomHtmlWidget.d.ts +0 -0
  917. /package/{dist/components → components}/stream/overlays/built-in/CustomHtmlWidget.d.ts.map +0 -0
  918. /package/{dist/components → components}/stream/overlays/built-in/CustomHtmlWidget.js +0 -0
  919. /package/{dist/components → components}/stream/overlays/built-in/PeonGlassWidget.d.ts +0 -0
  920. /package/{dist/components → components}/stream/overlays/built-in/PeonGlassWidget.d.ts.map +0 -0
  921. /package/{dist/components → components}/stream/overlays/built-in/PeonGlassWidget.js +0 -0
  922. /package/{dist/components → components}/stream/overlays/built-in/PeonHudWidget.d.ts +0 -0
  923. /package/{dist/components → components}/stream/overlays/built-in/PeonHudWidget.d.ts.map +0 -0
  924. /package/{dist/components → components}/stream/overlays/built-in/PeonHudWidget.js +0 -0
  925. /package/{dist/components → components}/stream/overlays/built-in/PeonSakuraWidget.d.ts +0 -0
  926. /package/{dist/components → components}/stream/overlays/built-in/PeonSakuraWidget.d.ts.map +0 -0
  927. /package/{dist/components → components}/stream/overlays/built-in/PeonSakuraWidget.js +0 -0
  928. /package/{dist/components → components}/stream/overlays/built-in/ThoughtBubbleWidget.d.ts +0 -0
  929. /package/{dist/components → components}/stream/overlays/built-in/ThoughtBubbleWidget.d.ts.map +0 -0
  930. /package/{dist/components → components}/stream/overlays/built-in/ThoughtBubbleWidget.js +0 -0
  931. /package/{dist/components → components}/stream/overlays/built-in/ViewerCountWidget.d.ts +0 -0
  932. /package/{dist/components → components}/stream/overlays/built-in/ViewerCountWidget.d.ts.map +0 -0
  933. /package/{dist/components → components}/stream/overlays/built-in/ViewerCountWidget.js +0 -0
  934. /package/{dist/components → components}/stream/overlays/built-in/index.d.ts +0 -0
  935. /package/{dist/components → components}/stream/overlays/built-in/index.d.ts.map +0 -0
  936. /package/{dist/components → components}/stream/overlays/built-in/index.js +0 -0
  937. /package/{dist/components → components}/stream/overlays/registry.d.ts +0 -0
  938. /package/{dist/components → components}/stream/overlays/registry.d.ts.map +0 -0
  939. /package/{dist/components → components}/stream/overlays/registry.js +0 -0
  940. /package/{dist/components → components}/stream/overlays/types.d.ts +0 -0
  941. /package/{dist/components → components}/stream/overlays/types.d.ts.map +0 -0
  942. /package/{dist/components → components}/stream/overlays/types.js +0 -0
  943. /package/{dist/components → components}/stream/overlays/useOverlayLayout.d.ts.map +0 -0
  944. /package/{dist/components → components}/trajectory-format.d.ts +0 -0
  945. /package/{dist/components → components}/trajectory-format.d.ts.map +0 -0
  946. /package/{dist/components → components}/trajectory-format.js +0 -0
  947. /package/{dist/components → components}/ui-badges.d.ts +0 -0
  948. /package/{dist/components → components}/ui-badges.d.ts.map +0 -0
  949. /package/{dist/components → components}/ui-badges.js +0 -0
  950. /package/{dist/components → components}/ui-switch.d.ts +0 -0
  951. /package/{dist/components → components}/ui-switch.d.ts.map +0 -0
  952. /package/{dist/components → components}/ui-switch.js +0 -0
  953. /package/{dist/components → components}/vector-browser-three.d.ts +0 -0
  954. /package/{dist/components → components}/vector-browser-three.d.ts.map +0 -0
  955. /package/{dist/components → components}/vector-browser-three.js +0 -0
  956. /package/{dist/config → config}/config-catalog.d.ts +0 -0
  957. /package/{dist/config → config}/config-catalog.d.ts.map +0 -0
  958. /package/{dist/config → config}/config-catalog.js +0 -0
  959. /package/{dist/config → config}/config-field.d.ts +0 -0
  960. /package/{dist/config → config}/config-field.d.ts.map +0 -0
  961. /package/{dist/config → config}/config-field.js +0 -0
  962. /package/{dist/config → config}/config-renderer.d.ts +0 -0
  963. /package/{dist/config → config}/config-renderer.d.ts.map +0 -0
  964. /package/{dist/config → config}/config-renderer.js +0 -0
  965. /package/{dist/config → config}/index.d.ts +0 -0
  966. /package/{dist/config → config}/index.d.ts.map +0 -0
  967. /package/{dist/config → config}/index.js +0 -0
  968. /package/{dist/config → config}/ui-renderer.d.ts +0 -0
  969. /package/{dist/config → config}/ui-renderer.d.ts.map +0 -0
  970. /package/{dist/config → config}/ui-renderer.js +0 -0
  971. /package/{dist/config → config}/ui-spec.d.ts +0 -0
  972. /package/{dist/config → config}/ui-spec.d.ts.map +0 -0
  973. /package/{dist/config → config}/ui-spec.js +0 -0
  974. /package/{dist/hooks → hooks}/index.d.ts +0 -0
  975. /package/{dist/hooks → hooks}/index.d.ts.map +0 -0
  976. /package/{dist/hooks → hooks}/index.js +0 -0
  977. /package/{dist/hooks → hooks}/useBugReport.d.ts +0 -0
  978. /package/{dist/hooks → hooks}/useBugReport.d.ts.map +0 -0
  979. /package/{dist/hooks → hooks}/useBugReport.js +0 -0
  980. /package/{dist/hooks → hooks}/useCanvasWindow.d.ts +0 -0
  981. /package/{dist/hooks → hooks}/useCanvasWindow.d.ts.map +0 -0
  982. /package/{dist/hooks → hooks}/useCanvasWindow.js +0 -0
  983. /package/{dist/hooks → hooks}/useChatAvatarVoice.d.ts +0 -0
  984. /package/{dist/hooks → hooks}/useChatAvatarVoice.d.ts.map +0 -0
  985. /package/{dist/hooks → hooks}/useChatAvatarVoice.js +0 -0
  986. /package/{dist/hooks → hooks}/useContextMenu.d.ts +0 -0
  987. /package/{dist/hooks → hooks}/useContextMenu.d.ts.map +0 -0
  988. /package/{dist/hooks → hooks}/useContextMenu.js +0 -0
  989. /package/{dist/hooks → hooks}/useKeyboardShortcuts.d.ts +0 -0
  990. /package/{dist/hooks → hooks}/useKeyboardShortcuts.d.ts.map +0 -0
  991. /package/{dist/hooks → hooks}/useKeyboardShortcuts.js +0 -0
  992. /package/{dist/hooks → hooks}/useLifoSync.d.ts +0 -0
  993. /package/{dist/hooks → hooks}/useLifoSync.d.ts.map +0 -0
  994. /package/{dist/hooks → hooks}/useLifoSync.js +0 -0
  995. /package/{dist/hooks → hooks}/useMemoryMonitor.d.ts +0 -0
  996. /package/{dist/hooks → hooks}/useMemoryMonitor.d.ts.map +0 -0
  997. /package/{dist/hooks → hooks}/useMemoryMonitor.js +0 -0
  998. /package/{dist/hooks → hooks}/useRenderGuard.d.ts +0 -0
  999. /package/{dist/hooks → hooks}/useRenderGuard.d.ts.map +0 -0
  1000. /package/{dist/hooks → hooks}/useRenderGuard.js +0 -0
  1001. /package/{dist/hooks → hooks}/useRetakeCapture.d.ts +0 -0
  1002. /package/{dist/hooks → hooks}/useRetakeCapture.d.ts.map +0 -0
  1003. /package/{dist/hooks → hooks}/useStreamPopoutNavigation.d.ts +0 -0
  1004. /package/{dist/hooks → hooks}/useStreamPopoutNavigation.d.ts.map +0 -0
  1005. /package/{dist/hooks → hooks}/useStreamPopoutNavigation.js +0 -0
  1006. /package/{dist/hooks → hooks}/useTimeout.d.ts +0 -0
  1007. /package/{dist/hooks → hooks}/useTimeout.d.ts.map +0 -0
  1008. /package/{dist/hooks → hooks}/useTimeout.js +0 -0
  1009. /package/{dist/hooks → hooks}/useVoiceChat.d.ts +0 -0
  1010. /package/{dist/hooks → hooks}/useVoiceChat.d.ts.map +0 -0
  1011. /package/{dist/hooks → hooks}/useVoiceChat.js +0 -0
  1012. /package/{dist/hooks → hooks}/useWhatsAppPairing.d.ts +0 -0
  1013. /package/{dist/hooks → hooks}/useWhatsAppPairing.d.ts.map +0 -0
  1014. /package/{dist/hooks → hooks}/useWhatsAppPairing.js +0 -0
  1015. /package/{dist/i18n → i18n}/index.d.ts +0 -0
  1016. /package/{dist/i18n → i18n}/index.d.ts.map +0 -0
  1017. /package/{dist/i18n → i18n}/index.js +0 -0
  1018. /package/{dist/i18n → i18n}/messages.d.ts +0 -0
  1019. /package/{dist/i18n → i18n}/messages.d.ts.map +0 -0
  1020. /package/{dist/i18n → i18n}/messages.js +0 -0
  1021. /package/{dist/index.d.ts → index.d.ts} +0 -0
  1022. /package/{dist/index.d.ts.map → index.d.ts.map} +0 -0
  1023. /package/{dist/index.js → index.js} +0 -0
  1024. /package/{dist/navigation → navigation}/index.d.ts +0 -0
  1025. /package/{dist/navigation → navigation}/index.d.ts.map +0 -0
  1026. /package/{dist/onboarding-config.d.ts → onboarding-config.d.ts} +0 -0
  1027. /package/{dist/onboarding-config.d.ts.map → onboarding-config.d.ts.map} +0 -0
  1028. /package/{dist/onboarding-config.js → onboarding-config.js} +0 -0
  1029. /package/{dist/platform → platform}/browser-launch.d.ts +0 -0
  1030. /package/{dist/platform → platform}/browser-launch.d.ts.map +0 -0
  1031. /package/{dist/platform → platform}/index.d.ts +0 -0
  1032. /package/{dist/platform → platform}/index.d.ts.map +0 -0
  1033. /package/{dist/platform → platform}/index.js +0 -0
  1034. /package/{dist/providers → providers}/index.d.ts +0 -0
  1035. /package/{dist/providers → providers}/index.d.ts.map +0 -0
  1036. /package/{dist/providers → providers}/index.js +0 -0
  1037. /package/{dist/state → state}/AppContext.d.ts +0 -0
  1038. /package/{dist/state → state}/AppContext.d.ts.map +0 -0
  1039. /package/{dist/state → state}/index.d.ts +0 -0
  1040. /package/{dist/state → state}/index.d.ts.map +0 -0
  1041. /package/{dist/state → state}/index.js +0 -0
  1042. /package/{dist/state → state}/internal.d.ts +0 -0
  1043. /package/{dist/state → state}/internal.d.ts.map +0 -0
  1044. /package/{dist/state → state}/internal.js +0 -0
  1045. /package/{dist/state → state}/onboarding-resume.d.ts +0 -0
  1046. /package/{dist/state → state}/onboarding-resume.d.ts.map +0 -0
  1047. /package/{dist/state → state}/parsers.d.ts +0 -0
  1048. /package/{dist/state → state}/parsers.d.ts.map +0 -0
  1049. /package/{dist/state → state}/parsers.js +0 -0
  1050. /package/{dist/state → state}/persistence.d.ts +0 -0
  1051. /package/{dist/state → state}/persistence.d.ts.map +0 -0
  1052. /package/{dist/state → state}/shell-routing.d.ts +0 -0
  1053. /package/{dist/state → state}/shell-routing.d.ts.map +0 -0
  1054. /package/{dist/state → state}/shell-routing.js +0 -0
  1055. /package/{dist/state → state}/types.d.ts +0 -0
  1056. /package/{dist/state → state}/types.d.ts.map +0 -0
  1057. /package/{dist/state → state}/types.js +0 -0
  1058. /package/{dist/state → state}/ui-preferences.d.ts +0 -0
  1059. /package/{dist/state → state}/ui-preferences.d.ts.map +0 -0
  1060. /package/{dist/state → state}/ui-preferences.js +0 -0
  1061. /package/{dist/state → state}/useApp.d.ts +0 -0
  1062. /package/{dist/state → state}/useApp.d.ts.map +0 -0
  1063. /package/{dist/state → state}/useApp.js +0 -0
  1064. /package/{dist/stories → stories}/AppMockProvider.d.ts +0 -0
  1065. /package/{dist/stories → stories}/AppMockProvider.d.ts.map +0 -0
  1066. /package/{dist/stories → stories}/AppMockProvider.js +0 -0
  1067. /package/{src/styles → styles}/anime.css +0 -0
  1068. /package/{src/styles → styles}/base.css +0 -0
  1069. /package/{src/styles → styles}/onboarding-game.css +0 -0
  1070. /package/{src/styles → styles}/styles.css +0 -0
  1071. /package/{src/styles → styles}/xterm.css +0 -0
  1072. /package/{dist/types → types}/index.d.ts +0 -0
  1073. /package/{dist/types → types}/index.d.ts.map +0 -0
  1074. /package/{dist/types → types}/index.js +0 -0
  1075. /package/{dist/utils → utils}/asset-url.d.ts.map +0 -0
  1076. /package/{dist/utils → utils}/assistant-text.d.ts +0 -0
  1077. /package/{dist/utils → utils}/assistant-text.d.ts.map +0 -0
  1078. /package/{dist/utils → utils}/assistant-text.js +0 -0
  1079. /package/{dist/utils → utils}/clipboard.d.ts +0 -0
  1080. /package/{dist/utils → utils}/clipboard.d.ts.map +0 -0
  1081. /package/{dist/utils → utils}/clipboard.js +0 -0
  1082. /package/{dist/utils → utils}/desktop-dialogs.d.ts +0 -0
  1083. /package/{dist/utils → utils}/desktop-dialogs.d.ts.map +0 -0
  1084. /package/{dist/utils → utils}/desktop-dialogs.js +0 -0
  1085. /package/{dist/utils → utils}/index.d.ts +0 -0
  1086. /package/{dist/utils → utils}/index.d.ts.map +0 -0
  1087. /package/{dist/utils → utils}/index.js +0 -0
  1088. /package/{dist/utils → utils}/number-parsing.d.ts +0 -0
  1089. /package/{dist/utils → utils}/number-parsing.d.ts.map +0 -0
  1090. /package/{dist/utils → utils}/number-parsing.js +0 -0
  1091. /package/{dist/utils → utils}/openExternalUrl.d.ts +0 -0
  1092. /package/{dist/utils → utils}/openExternalUrl.d.ts.map +0 -0
  1093. /package/{dist/utils → utils}/openExternalUrl.js +0 -0
  1094. /package/{dist/utils → utils}/spoken-text.d.ts +0 -0
  1095. /package/{dist/utils → utils}/spoken-text.d.ts.map +0 -0
  1096. /package/{dist/utils → utils}/spoken-text.js +0 -0
  1097. /package/{dist/utils → utils}/streaming-text.d.ts +0 -0
  1098. /package/{dist/utils → utils}/streaming-text.d.ts.map +0 -0
  1099. /package/{dist/utils → utils}/streaming-text.js +0 -0
  1100. /package/{dist/voice → voice}/index.d.ts +0 -0
  1101. /package/{dist/voice → voice}/index.d.ts.map +0 -0
  1102. /package/{dist/voice → voice}/index.js +0 -0
  1103. /package/{dist/voice → voice}/types.d.ts +0 -0
  1104. /package/{dist/voice → voice}/types.d.ts.map +0 -0
  1105. /package/{dist/voice → voice}/types.js +0 -0
  1106. /package/{dist/wallet-rpc.d.ts → wallet-rpc.d.ts} +0 -0
  1107. /package/{dist/wallet-rpc.d.ts.map → wallet-rpc.d.ts.map} +0 -0
  1108. /package/{dist/wallet-rpc.js → wallet-rpc.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%2Fmilady";
41
- const ELIZA_CLOUD_INSTANCES_URL = "https://www.elizacloud.ai/dashboard/milady";
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
- }