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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1143) hide show
  1. package/App.d.ts +5 -0
  2. package/App.d.ts.map +1 -0
  3. package/App.js +220 -0
  4. package/actions/character.d.ts +39 -0
  5. package/actions/character.d.ts.map +1 -0
  6. package/actions/character.js +247 -0
  7. package/actions/chat-helpers.d.ts +47 -0
  8. package/actions/chat-helpers.d.ts.map +1 -0
  9. package/actions/chat-helpers.js +79 -0
  10. package/actions/cloud.d.ts +17 -0
  11. package/actions/cloud.d.ts.map +1 -0
  12. package/actions/cloud.js +43 -0
  13. package/actions/index.d.ts +12 -0
  14. package/actions/index.d.ts.map +1 -0
  15. package/actions/index.js +11 -0
  16. package/actions/lifecycle.d.ts +43 -0
  17. package/actions/lifecycle.d.ts.map +1 -0
  18. package/actions/lifecycle.js +118 -0
  19. package/actions/onboarding.d.ts +12 -0
  20. package/actions/onboarding.d.ts.map +1 -0
  21. package/actions/onboarding.js +26 -0
  22. package/actions/triggers.d.ts +23 -0
  23. package/actions/triggers.d.ts.map +1 -0
  24. package/actions/triggers.js +148 -0
  25. package/api/client.d.ts +2736 -0
  26. package/api/client.d.ts.map +1 -0
  27. package/api/client.js +2492 -0
  28. package/api/index.d.ts +2 -0
  29. package/api/index.d.ts.map +1 -0
  30. package/autonomy/index.d.ts +48 -0
  31. package/autonomy/index.d.ts.map +1 -0
  32. package/autonomy/index.js +330 -0
  33. package/bridge/capacitor-bridge.d.ts +153 -0
  34. package/bridge/capacitor-bridge.d.ts.map +1 -0
  35. package/bridge/capacitor-bridge.js +193 -0
  36. package/bridge/electrobun-rpc.d.ts +28 -0
  37. package/bridge/electrobun-rpc.d.ts.map +1 -0
  38. package/bridge/electrobun-rpc.js +35 -0
  39. package/bridge/electrobun-runtime.d.ts +3 -0
  40. package/bridge/electrobun-runtime.d.ts.map +1 -0
  41. package/bridge/electrobun-runtime.js +17 -0
  42. package/bridge/index.d.ts +6 -0
  43. package/bridge/index.d.ts.map +1 -0
  44. package/bridge/native-plugins.d.ts +82 -0
  45. package/bridge/native-plugins.d.ts.map +1 -0
  46. package/bridge/native-plugins.js +39 -0
  47. package/bridge/plugin-bridge.d.ts +116 -0
  48. package/bridge/plugin-bridge.d.ts.map +1 -0
  49. package/bridge/plugin-bridge.js +203 -0
  50. package/bridge/storage-bridge.d.ts +39 -0
  51. package/bridge/storage-bridge.d.ts.map +1 -0
  52. package/bridge/storage-bridge.js +135 -0
  53. package/chat/index.d.ts +57 -0
  54. package/chat/index.d.ts.map +1 -0
  55. package/chat/index.js +160 -0
  56. package/coding/index.d.ts +25 -0
  57. package/coding/index.d.ts.map +1 -0
  58. package/coding/index.js +25 -0
  59. package/components/AdvancedPageView.d.ts +17 -0
  60. package/components/AdvancedPageView.d.ts.map +1 -0
  61. package/components/AdvancedPageView.js +146 -0
  62. package/components/AgentActivityBox.d.ts +7 -0
  63. package/components/AgentActivityBox.d.ts.map +1 -0
  64. package/components/AgentActivityBox.js +25 -0
  65. package/components/ApiKeyConfig.d.ts +26 -0
  66. package/components/ApiKeyConfig.d.ts.map +1 -0
  67. package/components/ApiKeyConfig.js +119 -0
  68. package/components/AppsPageView.d.ts +7 -0
  69. package/components/AppsPageView.d.ts.map +1 -0
  70. package/components/AppsPageView.js +31 -0
  71. package/components/AppsView.d.ts +8 -0
  72. package/components/AppsView.d.ts.map +1 -0
  73. package/components/AppsView.js +149 -0
  74. package/components/AvatarLoader.d.ts +13 -0
  75. package/components/AvatarLoader.d.ts.map +1 -0
  76. package/components/AvatarLoader.js +53 -0
  77. package/components/AvatarSelector.d.ts +23 -0
  78. package/components/AvatarSelector.d.ts.map +1 -0
  79. package/components/AvatarSelector.js +105 -0
  80. package/components/BscTradePanel.d.ts +22 -0
  81. package/components/BscTradePanel.d.ts.map +1 -0
  82. package/components/BscTradePanel.js +221 -0
  83. package/components/BugReportModal.d.ts +2 -0
  84. package/components/BugReportModal.d.ts.map +1 -0
  85. package/components/BugReportModal.js +219 -0
  86. package/components/CharacterRoster.d.ts +31 -0
  87. package/components/CharacterRoster.d.ts.map +1 -0
  88. package/components/CharacterRoster.js +41 -0
  89. package/components/CharacterView.d.ts +8 -0
  90. package/components/CharacterView.d.ts.map +1 -0
  91. package/components/CharacterView.js +685 -0
  92. package/components/ChatAvatar.d.ts +8 -0
  93. package/components/ChatAvatar.d.ts.map +1 -0
  94. package/components/ChatAvatar.js +89 -0
  95. package/components/ChatComposer.d.ts +37 -0
  96. package/components/ChatComposer.d.ts.map +1 -0
  97. package/components/ChatComposer.js +136 -0
  98. package/components/ChatMessage.d.ts +24 -0
  99. package/components/ChatMessage.d.ts.map +1 -0
  100. package/components/ChatMessage.js +167 -0
  101. package/components/ChatModalView.d.ts +10 -0
  102. package/components/ChatModalView.d.ts.map +1 -0
  103. package/components/ChatModalView.js +57 -0
  104. package/components/ChatView.d.ts +14 -0
  105. package/components/ChatView.d.ts.map +1 -0
  106. package/components/ChatView.js +526 -0
  107. package/components/CloudOnboarding.d.ts +7 -0
  108. package/components/CloudOnboarding.d.ts.map +1 -0
  109. package/components/CloudOnboarding.js +22 -0
  110. package/components/CloudSourceControls.d.ts +13 -0
  111. package/components/CloudSourceControls.d.ts.map +1 -0
  112. package/components/CloudSourceControls.js +16 -0
  113. package/components/CodingAgentSettingsSection.d.ts +2 -0
  114. package/components/CodingAgentSettingsSection.d.ts.map +1 -0
  115. package/components/CodingAgentSettingsSection.js +270 -0
  116. package/components/CommandPalette.d.ts +2 -0
  117. package/components/CommandPalette.d.ts.map +1 -0
  118. package/components/CommandPalette.js +181 -0
  119. package/components/CompanionSceneHost.d.ts +14 -0
  120. package/components/CompanionSceneHost.d.ts.map +1 -0
  121. package/components/CompanionSceneHost.js +360 -0
  122. package/components/CompanionShell.d.ts +17 -0
  123. package/components/CompanionShell.d.ts.map +1 -0
  124. package/components/CompanionShell.js +15 -0
  125. package/components/CompanionView.d.ts +2 -0
  126. package/components/CompanionView.d.ts.map +1 -0
  127. package/components/CompanionView.js +22 -0
  128. package/components/ConfigPageView.d.ts +11 -0
  129. package/components/ConfigPageView.d.ts.map +1 -0
  130. package/components/ConfigPageView.js +303 -0
  131. package/components/ConfigSaveFooter.d.ts +8 -0
  132. package/components/ConfigSaveFooter.d.ts.map +1 -0
  133. package/components/ConfigSaveFooter.js +10 -0
  134. package/components/ConfirmModal.d.ts +61 -0
  135. package/components/ConfirmModal.d.ts.map +1 -0
  136. package/components/ConfirmModal.js +164 -0
  137. package/components/ConnectionFailedBanner.d.ts +6 -0
  138. package/components/ConnectionFailedBanner.d.ts.map +1 -0
  139. package/components/ConnectionFailedBanner.js +22 -0
  140. package/components/ConnectorsPageView.d.ts +7 -0
  141. package/components/ConnectorsPageView.d.ts.map +1 -0
  142. package/components/ConnectorsPageView.js +8 -0
  143. package/components/ConversationsSidebar.d.ts +9 -0
  144. package/components/ConversationsSidebar.d.ts.map +1 -0
  145. package/components/ConversationsSidebar.js +116 -0
  146. package/components/CustomActionEditor.d.ts +10 -0
  147. package/components/CustomActionEditor.d.ts.map +1 -0
  148. package/components/CustomActionEditor.js +578 -0
  149. package/components/CustomActionsPanel.d.ts +9 -0
  150. package/components/CustomActionsPanel.d.ts.map +1 -0
  151. package/components/CustomActionsPanel.js +107 -0
  152. package/components/CustomActionsView.d.ts +2 -0
  153. package/components/CustomActionsView.d.ts.map +1 -0
  154. package/components/CustomActionsView.js +134 -0
  155. package/components/DatabasePageView.d.ts +5 -0
  156. package/components/DatabasePageView.d.ts.map +1 -0
  157. package/components/DatabasePageView.js +28 -0
  158. package/components/DatabaseView.d.ts +9 -0
  159. package/components/DatabaseView.d.ts.map +1 -0
  160. package/components/DatabaseView.js +311 -0
  161. package/components/ElizaCloudDashboard.d.ts +2 -0
  162. package/components/ElizaCloudDashboard.d.ts.map +1 -0
  163. package/components/ElizaCloudDashboard.js +657 -0
  164. package/components/EmotePicker.d.ts +2 -0
  165. package/components/EmotePicker.d.ts.map +1 -0
  166. package/components/EmotePicker.js +343 -0
  167. package/components/ErrorBoundary.d.ts +22 -0
  168. package/components/ErrorBoundary.d.ts.map +1 -0
  169. package/components/ErrorBoundary.js +31 -0
  170. package/components/FineTuningView.d.ts +2 -0
  171. package/components/FineTuningView.d.ts.map +1 -0
  172. package/components/FineTuningView.js +433 -0
  173. package/components/FlaminaGuide.d.ts +10 -0
  174. package/components/FlaminaGuide.d.ts.map +1 -0
  175. package/components/FlaminaGuide.js +64 -0
  176. package/components/GameView.d.ts +11 -0
  177. package/components/GameView.d.ts.map +1 -0
  178. package/components/GameView.js +294 -0
  179. package/components/GameViewOverlay.d.ts +8 -0
  180. package/components/GameViewOverlay.d.ts.map +1 -0
  181. package/components/GameViewOverlay.js +70 -0
  182. package/components/GlobalEmoteOverlay.d.ts +2 -0
  183. package/components/GlobalEmoteOverlay.d.ts.map +1 -0
  184. package/components/GlobalEmoteOverlay.js +112 -0
  185. package/components/Header.d.ts +9 -0
  186. package/components/Header.d.ts.map +1 -0
  187. package/components/Header.js +123 -0
  188. package/components/HeartbeatsView.d.ts +2 -0
  189. package/components/HeartbeatsView.d.ts.map +1 -0
  190. package/components/HeartbeatsView.js +378 -0
  191. package/components/InventoryView.d.ts +10 -0
  192. package/components/InventoryView.d.ts.map +1 -0
  193. package/components/InventoryView.js +176 -0
  194. package/components/KnowledgeView.d.ts +20 -0
  195. package/components/KnowledgeView.d.ts.map +1 -0
  196. package/components/KnowledgeView.js +480 -0
  197. package/components/LanguageDropdown.d.ts +30 -0
  198. package/components/LanguageDropdown.d.ts.map +1 -0
  199. package/components/LanguageDropdown.js +99 -0
  200. package/components/LifoMonitorPanel.d.ts +21 -0
  201. package/components/LifoMonitorPanel.d.ts.map +1 -0
  202. package/components/LifoMonitorPanel.js +24 -0
  203. package/components/LifoSandboxView.d.ts +5 -0
  204. package/components/LifoSandboxView.d.ts.map +1 -0
  205. package/components/LifoSandboxView.js +333 -0
  206. package/components/LoadingScreen.d.ts +13 -0
  207. package/components/LoadingScreen.d.ts.map +1 -0
  208. package/components/LoadingScreen.js +70 -0
  209. package/components/LogsPageView.d.ts +2 -0
  210. package/components/LogsPageView.d.ts.map +1 -0
  211. package/components/LogsPageView.js +7 -0
  212. package/components/LogsView.d.ts +5 -0
  213. package/components/LogsView.d.ts.map +1 -0
  214. package/components/LogsView.js +71 -0
  215. package/components/MediaGalleryView.d.ts +9 -0
  216. package/components/MediaGalleryView.d.ts.map +1 -0
  217. package/components/MediaGalleryView.js +236 -0
  218. package/components/MediaSettingsSection.d.ts +11 -0
  219. package/components/MediaSettingsSection.d.ts.map +1 -0
  220. package/components/MediaSettingsSection.js +329 -0
  221. package/components/MessageContent.d.ts +51 -0
  222. package/components/MessageContent.d.ts.map +1 -0
  223. package/components/MessageContent.js +553 -0
  224. package/components/OnboardingWizard.d.ts +2 -0
  225. package/components/OnboardingWizard.d.ts.map +1 -0
  226. package/components/OnboardingWizard.js +96 -0
  227. package/components/PairingView.d.ts +5 -0
  228. package/components/PairingView.d.ts.map +1 -0
  229. package/components/PairingView.js +29 -0
  230. package/components/PermissionsSection.d.ts +20 -0
  231. package/components/PermissionsSection.d.ts.map +1 -0
  232. package/components/PermissionsSection.js +573 -0
  233. package/components/PluginsPageView.d.ts +5 -0
  234. package/components/PluginsPageView.d.ts.map +1 -0
  235. package/components/PluginsPageView.js +8 -0
  236. package/components/PluginsView.d.ts +21 -0
  237. package/components/PluginsView.d.ts.map +1 -0
  238. package/components/PluginsView.js +1534 -0
  239. package/components/ProviderSwitcher.d.ts +42 -0
  240. package/components/ProviderSwitcher.d.ts.map +1 -0
  241. package/components/ProviderSwitcher.js +493 -0
  242. package/components/RestartBanner.d.ts +2 -0
  243. package/components/RestartBanner.d.ts.map +1 -0
  244. package/components/RestartBanner.js +36 -0
  245. package/components/RuntimeView.d.ts +10 -0
  246. package/components/RuntimeView.d.ts.map +1 -0
  247. package/components/RuntimeView.js +165 -0
  248. package/components/SaveCommandModal.d.ts +12 -0
  249. package/components/SaveCommandModal.d.ts.map +1 -0
  250. package/components/SaveCommandModal.js +84 -0
  251. package/components/SecretsView.d.ts +9 -0
  252. package/components/SecretsView.d.ts.map +1 -0
  253. package/components/SecretsView.js +249 -0
  254. package/components/SettingsView.d.ts +9 -0
  255. package/components/SettingsView.d.ts.map +1 -0
  256. package/components/SettingsView.js +230 -0
  257. package/components/ShellOverlays.d.ts +8 -0
  258. package/components/ShellOverlays.d.ts.map +1 -0
  259. package/components/ShellOverlays.js +10 -0
  260. package/components/ShortcutsOverlay.d.ts +2 -0
  261. package/components/ShortcutsOverlay.d.ts.map +1 -0
  262. package/components/ShortcutsOverlay.js +79 -0
  263. package/components/SkillsView.d.ts +11 -0
  264. package/components/SkillsView.d.ts.map +1 -0
  265. package/components/SkillsView.js +358 -0
  266. package/components/StartupFailureView.d.ts +8 -0
  267. package/components/StartupFailureView.d.ts.map +1 -0
  268. package/components/StartupFailureView.js +16 -0
  269. package/components/StreamView.d.ts +16 -0
  270. package/components/StreamView.d.ts.map +1 -0
  271. package/components/StreamView.js +300 -0
  272. package/components/StripeEmbeddedCheckout.d.ts +24 -0
  273. package/components/StripeEmbeddedCheckout.d.ts.map +1 -0
  274. package/components/StripeEmbeddedCheckout.js +101 -0
  275. package/components/SubscriptionStatus.d.ts +23 -0
  276. package/components/SubscriptionStatus.d.ts.map +1 -0
  277. package/components/SubscriptionStatus.js +301 -0
  278. package/components/SystemWarningBanner.d.ts +6 -0
  279. package/components/SystemWarningBanner.d.ts.map +1 -0
  280. package/components/SystemWarningBanner.js +46 -0
  281. package/components/ThemeToggle.d.ts +21 -0
  282. package/components/ThemeToggle.d.ts.map +1 -0
  283. package/components/ThemeToggle.js +24 -0
  284. package/components/TrajectoriesView.d.ts +12 -0
  285. package/components/TrajectoriesView.d.ts.map +1 -0
  286. package/components/TrajectoriesView.js +183 -0
  287. package/components/TrajectoryDetailView.d.ts +13 -0
  288. package/components/TrajectoryDetailView.d.ts.map +1 -0
  289. package/components/TrajectoryDetailView.js +112 -0
  290. package/components/TriggersView.d.ts +2 -0
  291. package/components/TriggersView.d.ts.map +1 -0
  292. package/components/VectorBrowserView.d.ts +10 -0
  293. package/components/VectorBrowserView.d.ts.map +1 -0
  294. package/components/VectorBrowserView.js +997 -0
  295. package/components/VoiceConfigView.d.ts +11 -0
  296. package/components/VoiceConfigView.d.ts.map +1 -0
  297. package/components/VoiceConfigView.js +329 -0
  298. package/components/VrmStage.d.ts +28 -0
  299. package/components/VrmStage.d.ts.map +1 -0
  300. package/components/VrmStage.js +178 -0
  301. package/components/WhatsAppQrOverlay.d.ts +8 -0
  302. package/components/WhatsAppQrOverlay.d.ts.map +1 -0
  303. package/components/WhatsAppQrOverlay.js +63 -0
  304. package/components/apps/AppDetailPane.d.ts +15 -0
  305. package/components/apps/AppDetailPane.d.ts.map +1 -0
  306. package/components/apps/AppDetailPane.js +13 -0
  307. package/components/apps/AppsCatalogGrid.d.ts +20 -0
  308. package/components/apps/AppsCatalogGrid.d.ts.map +1 -0
  309. package/components/apps/AppsCatalogGrid.js +18 -0
  310. package/components/apps/extensions/registry.d.ts +4 -0
  311. package/components/apps/extensions/registry.d.ts.map +1 -0
  312. package/components/apps/extensions/registry.js +7 -0
  313. package/components/apps/extensions/types.d.ts +7 -0
  314. package/components/apps/extensions/types.d.ts.map +1 -0
  315. package/components/apps/extensions/types.js +1 -0
  316. package/components/apps/helpers.d.ts +7 -0
  317. package/components/apps/helpers.d.ts.map +1 -0
  318. package/components/apps/helpers.js +44 -0
  319. package/components/avatar/VrmAnimationLoader.d.ts +30 -0
  320. package/components/avatar/VrmAnimationLoader.d.ts.map +1 -0
  321. package/components/avatar/VrmAnimationLoader.js +99 -0
  322. package/components/avatar/VrmBlinkController.d.ts +37 -0
  323. package/components/avatar/VrmBlinkController.d.ts.map +1 -0
  324. package/components/avatar/VrmBlinkController.js +98 -0
  325. package/components/avatar/VrmCameraManager.d.ts +57 -0
  326. package/components/avatar/VrmCameraManager.d.ts.map +1 -0
  327. package/components/avatar/VrmCameraManager.js +277 -0
  328. package/components/avatar/VrmEngine.d.ts +246 -0
  329. package/components/avatar/VrmEngine.d.ts.map +1 -0
  330. package/components/avatar/VrmEngine.js +2076 -0
  331. package/components/avatar/VrmFootShadow.d.ts +18 -0
  332. package/components/avatar/VrmFootShadow.d.ts.map +1 -0
  333. package/components/avatar/VrmFootShadow.js +83 -0
  334. package/components/avatar/VrmViewer.d.ts +60 -0
  335. package/components/avatar/VrmViewer.d.ts.map +1 -0
  336. package/components/avatar/VrmViewer.js +396 -0
  337. package/components/avatar/mixamoVRMRigMap.d.ts +3 -0
  338. package/components/avatar/mixamoVRMRigMap.d.ts.map +1 -0
  339. package/components/avatar/mixamoVRMRigMap.js +56 -0
  340. package/components/avatar/retargetMixamoFbxToVrm.d.ts +9 -0
  341. package/components/avatar/retargetMixamoFbxToVrm.d.ts.map +1 -0
  342. package/components/avatar/retargetMixamoFbxToVrm.js +88 -0
  343. package/components/avatar/retargetMixamoGltfToVrm.d.ts +11 -0
  344. package/components/avatar/retargetMixamoGltfToVrm.d.ts.map +1 -0
  345. package/components/avatar/retargetMixamoGltfToVrm.js +80 -0
  346. package/components/chainConfig.d.ts +89 -0
  347. package/components/chainConfig.d.ts.map +1 -0
  348. package/components/chainConfig.js +287 -0
  349. package/components/companion/CompanionHeader.d.ts +15 -0
  350. package/components/companion/CompanionHeader.d.ts.map +1 -0
  351. package/components/companion/CompanionHeader.js +7 -0
  352. package/components/companion/CompanionSceneHost.d.ts +2 -0
  353. package/components/companion/CompanionSceneHost.d.ts.map +1 -0
  354. package/components/companion/CompanionSceneHost.js +1 -0
  355. package/components/companion/VrmStage.d.ts +3 -0
  356. package/components/companion/VrmStage.d.ts.map +1 -0
  357. package/components/companion/VrmStage.js +1 -0
  358. package/components/companion/index.d.ts +18 -0
  359. package/components/companion/index.d.ts.map +1 -0
  360. package/components/companion/index.js +17 -0
  361. package/components/companion/walletUtils.d.ts +95 -0
  362. package/components/companion/walletUtils.d.ts.map +1 -0
  363. package/components/companion/walletUtils.js +167 -0
  364. package/components/companion-shell-styles.d.ts +38 -0
  365. package/components/companion-shell-styles.d.ts.map +1 -0
  366. package/components/companion-shell-styles.js +248 -0
  367. package/components/confirm-delete-control.d.ts +16 -0
  368. package/components/confirm-delete-control.d.ts.map +1 -0
  369. package/components/confirm-delete-control.js +12 -0
  370. package/components/conversations/ConversationListItem.d.ts +31 -0
  371. package/components/conversations/ConversationListItem.d.ts.map +1 -0
  372. package/components/conversations/ConversationListItem.js +52 -0
  373. package/components/conversations/conversation-utils.d.ts +9 -0
  374. package/components/conversations/conversation-utils.d.ts.map +1 -0
  375. package/components/conversations/conversation-utils.js +138 -0
  376. package/components/format.d.ts +54 -0
  377. package/components/format.d.ts.map +1 -0
  378. package/components/format.js +82 -0
  379. package/components/index.d.ts +96 -0
  380. package/components/index.d.ts.map +1 -0
  381. package/components/index.js +95 -0
  382. package/components/inventory/CopyableAddress.d.ts +8 -0
  383. package/components/inventory/CopyableAddress.d.ts.map +1 -0
  384. package/components/inventory/CopyableAddress.js +18 -0
  385. package/components/inventory/InventoryToolbar.d.ts +25 -0
  386. package/components/inventory/InventoryToolbar.d.ts.map +1 -0
  387. package/components/inventory/InventoryToolbar.js +28 -0
  388. package/components/inventory/NftGrid.d.ts +13 -0
  389. package/components/inventory/NftGrid.d.ts.map +1 -0
  390. package/components/inventory/NftGrid.js +29 -0
  391. package/components/inventory/TokenLogo.d.ts +12 -0
  392. package/components/inventory/TokenLogo.d.ts.map +1 -0
  393. package/components/inventory/TokenLogo.js +33 -0
  394. package/components/inventory/TokensTable.d.ts +24 -0
  395. package/components/inventory/TokensTable.d.ts.map +1 -0
  396. package/components/inventory/TokensTable.js +26 -0
  397. package/components/inventory/constants.d.ts +52 -0
  398. package/components/inventory/constants.d.ts.map +1 -0
  399. package/components/inventory/constants.js +121 -0
  400. package/components/inventory/index.d.ts +9 -0
  401. package/components/inventory/index.d.ts.map +1 -0
  402. package/components/inventory/index.js +8 -0
  403. package/components/inventory/media-url.d.ts +6 -0
  404. package/components/inventory/media-url.d.ts.map +1 -0
  405. package/components/inventory/media-url.js +28 -0
  406. package/components/inventory/useInventoryData.d.ts +53 -0
  407. package/components/inventory/useInventoryData.d.ts.map +1 -0
  408. package/components/inventory/useInventoryData.js +332 -0
  409. package/components/knowledge-upload-image.d.ts +27 -0
  410. package/components/knowledge-upload-image.d.ts.map +1 -0
  411. package/components/knowledge-upload-image.js +146 -0
  412. package/components/labels.d.ts +6 -0
  413. package/components/labels.d.ts.map +1 -0
  414. package/components/labels.js +40 -0
  415. package/components/onboarding/ActivateStep.d.ts +2 -0
  416. package/components/onboarding/ActivateStep.d.ts.map +1 -0
  417. package/components/onboarding/ActivateStep.js +10 -0
  418. package/components/onboarding/ConnectionStep.d.ts +2 -0
  419. package/components/onboarding/ConnectionStep.d.ts.map +1 -0
  420. package/components/onboarding/ConnectionStep.js +609 -0
  421. package/components/onboarding/IdentityStep.d.ts +2 -0
  422. package/components/onboarding/IdentityStep.d.ts.map +1 -0
  423. package/components/onboarding/IdentityStep.js +102 -0
  424. package/components/onboarding/OnboardingPanel.d.ts +9 -0
  425. package/components/onboarding/OnboardingPanel.d.ts.map +1 -0
  426. package/components/onboarding/OnboardingPanel.js +24 -0
  427. package/components/onboarding/OnboardingStepNav.d.ts +2 -0
  428. package/components/onboarding/OnboardingStepNav.d.ts.map +1 -0
  429. package/components/onboarding/OnboardingStepNav.js +23 -0
  430. package/components/onboarding/PermissionsStep.d.ts +2 -0
  431. package/components/onboarding/PermissionsStep.d.ts.map +1 -0
  432. package/components/onboarding/PermissionsStep.js +7 -0
  433. package/components/onboarding/RpcStep.d.ts +2 -0
  434. package/components/onboarding/RpcStep.d.ts.map +1 -0
  435. package/components/onboarding/RpcStep.js +125 -0
  436. package/components/permissions/PermissionIcon.d.ts +4 -0
  437. package/components/permissions/PermissionIcon.d.ts.map +1 -0
  438. package/components/permissions/PermissionIcon.js +12 -0
  439. package/components/permissions/StreamingPermissions.d.ts +20 -0
  440. package/components/permissions/StreamingPermissions.d.ts.map +1 -0
  441. package/components/permissions/StreamingPermissions.js +177 -0
  442. package/components/plugins/showcase-data.d.ts +7 -0
  443. package/components/plugins/showcase-data.d.ts.map +1 -0
  444. package/components/plugins/showcase-data.js +464 -0
  445. package/components/shared/ShellHeaderControls.d.ts +27 -0
  446. package/components/shared/ShellHeaderControls.d.ts.map +1 -0
  447. package/components/shared/ShellHeaderControls.js +60 -0
  448. package/components/shared-companion-scene-context.d.ts +3 -0
  449. package/components/shared-companion-scene-context.d.ts.map +1 -0
  450. package/components/shared-companion-scene-context.js +13 -0
  451. package/components/skeletons.d.ts +17 -0
  452. package/components/skeletons.d.ts.map +1 -0
  453. package/components/skeletons.js +22 -0
  454. package/components/stream/ActivityFeed.d.ts +5 -0
  455. package/components/stream/ActivityFeed.d.ts.map +1 -0
  456. package/components/stream/ActivityFeed.js +57 -0
  457. package/components/stream/AvatarPip.d.ts +5 -0
  458. package/components/stream/AvatarPip.d.ts.map +1 -0
  459. package/components/stream/AvatarPip.js +6 -0
  460. package/components/stream/ChatContent.d.ts +6 -0
  461. package/components/stream/ChatContent.d.ts.map +1 -0
  462. package/components/stream/ChatContent.js +69 -0
  463. package/components/stream/ChatTicker.d.ts +5 -0
  464. package/components/stream/ChatTicker.d.ts.map +1 -0
  465. package/components/stream/ChatTicker.js +34 -0
  466. package/components/stream/IdleContent.d.ts +5 -0
  467. package/components/stream/IdleContent.d.ts.map +1 -0
  468. package/components/stream/IdleContent.js +17 -0
  469. package/components/stream/StatusBar.d.ts +36 -0
  470. package/components/stream/StatusBar.d.ts.map +1 -0
  471. package/components/stream/StatusBar.js +140 -0
  472. package/components/stream/StreamSettings.d.ts +33 -0
  473. package/components/stream/StreamSettings.d.ts.map +1 -0
  474. package/components/stream/StreamSettings.js +99 -0
  475. package/components/stream/StreamTerminal.d.ts +2 -0
  476. package/components/stream/StreamTerminal.d.ts.map +1 -0
  477. package/components/stream/StreamTerminal.js +52 -0
  478. package/components/stream/StreamVoiceConfig.d.ts +10 -0
  479. package/components/stream/StreamVoiceConfig.d.ts.map +1 -0
  480. package/components/stream/StreamVoiceConfig.js +88 -0
  481. package/components/stream/helpers.d.ts +32 -0
  482. package/components/stream/helpers.d.ts.map +1 -0
  483. package/components/stream/helpers.js +110 -0
  484. package/components/stream/overlays/OverlayLayer.d.ts +20 -0
  485. package/components/stream/overlays/OverlayLayer.d.ts.map +1 -0
  486. package/components/stream/overlays/OverlayLayer.js +24 -0
  487. package/components/stream/overlays/built-in/ActionTickerWidget.d.ts +8 -0
  488. package/components/stream/overlays/built-in/ActionTickerWidget.d.ts.map +1 -0
  489. package/components/stream/overlays/built-in/ActionTickerWidget.js +44 -0
  490. package/components/stream/overlays/built-in/AlertPopupWidget.d.ts +7 -0
  491. package/components/stream/overlays/built-in/AlertPopupWidget.d.ts.map +1 -0
  492. package/components/stream/overlays/built-in/AlertPopupWidget.js +62 -0
  493. package/components/stream/overlays/built-in/BrandingWidget.d.ts +7 -0
  494. package/components/stream/overlays/built-in/BrandingWidget.d.ts.map +1 -0
  495. package/components/stream/overlays/built-in/BrandingWidget.js +36 -0
  496. package/components/stream/overlays/built-in/CustomHtmlWidget.d.ts +26 -0
  497. package/components/stream/overlays/built-in/CustomHtmlWidget.d.ts.map +1 -0
  498. package/components/stream/overlays/built-in/CustomHtmlWidget.js +78 -0
  499. package/components/stream/overlays/built-in/PeonGlassWidget.d.ts +11 -0
  500. package/components/stream/overlays/built-in/PeonGlassWidget.d.ts.map +1 -0
  501. package/components/stream/overlays/built-in/PeonGlassWidget.js +188 -0
  502. package/components/stream/overlays/built-in/PeonHudWidget.d.ts +10 -0
  503. package/components/stream/overlays/built-in/PeonHudWidget.d.ts.map +1 -0
  504. package/components/stream/overlays/built-in/PeonHudWidget.js +168 -0
  505. package/components/stream/overlays/built-in/PeonSakuraWidget.d.ts +11 -0
  506. package/components/stream/overlays/built-in/PeonSakuraWidget.d.ts.map +1 -0
  507. package/components/stream/overlays/built-in/PeonSakuraWidget.js +213 -0
  508. package/components/stream/overlays/built-in/ThoughtBubbleWidget.d.ts +8 -0
  509. package/components/stream/overlays/built-in/ThoughtBubbleWidget.d.ts.map +1 -0
  510. package/components/stream/overlays/built-in/ThoughtBubbleWidget.js +59 -0
  511. package/components/stream/overlays/built-in/ViewerCountWidget.d.ts +7 -0
  512. package/components/stream/overlays/built-in/ViewerCountWidget.d.ts.map +1 -0
  513. package/components/stream/overlays/built-in/ViewerCountWidget.js +34 -0
  514. package/components/stream/overlays/built-in/index.d.ts +13 -0
  515. package/components/stream/overlays/built-in/index.d.ts.map +1 -0
  516. package/components/stream/overlays/built-in/index.js +12 -0
  517. package/components/stream/overlays/registry.d.ts +11 -0
  518. package/components/stream/overlays/registry.d.ts.map +1 -0
  519. package/components/stream/overlays/registry.js +16 -0
  520. package/components/stream/overlays/types.d.ts +67 -0
  521. package/components/stream/overlays/types.d.ts.map +1 -0
  522. package/components/stream/overlays/types.js +7 -0
  523. package/components/stream/overlays/useOverlayLayout.d.ts +27 -0
  524. package/components/stream/overlays/useOverlayLayout.d.ts.map +1 -0
  525. package/components/stream/overlays/useOverlayLayout.js +162 -0
  526. package/components/trajectory-format.d.ts +6 -0
  527. package/components/trajectory-format.d.ts.map +1 -0
  528. package/components/trajectory-format.js +43 -0
  529. package/components/ui-badges.d.ts +23 -0
  530. package/components/ui-badges.d.ts.map +1 -0
  531. package/components/ui-badges.js +38 -0
  532. package/components/ui-switch.d.ts +14 -0
  533. package/components/ui-switch.d.ts.map +1 -0
  534. package/components/ui-switch.js +15 -0
  535. package/components/vector-browser-three.d.ts +4 -0
  536. package/components/vector-browser-three.d.ts.map +1 -0
  537. package/components/vector-browser-three.js +21 -0
  538. package/config/branding.d.ts +49 -0
  539. package/config/branding.d.ts.map +1 -0
  540. package/config/branding.js +16 -0
  541. package/config/config-catalog.d.ts +376 -0
  542. package/config/config-catalog.d.ts.map +1 -0
  543. package/config/config-catalog.js +724 -0
  544. package/config/config-field.d.ts +68 -0
  545. package/config/config-field.d.ts.map +1 -0
  546. package/config/config-field.js +840 -0
  547. package/config/config-renderer.d.ts +176 -0
  548. package/config/config-renderer.d.ts.map +1 -0
  549. package/config/config-renderer.js +405 -0
  550. package/config/index.d.ts +6 -0
  551. package/config/index.d.ts.map +1 -0
  552. package/config/index.js +5 -0
  553. package/config/ui-renderer.d.ts +26 -0
  554. package/config/ui-renderer.d.ts.map +1 -0
  555. package/config/ui-renderer.js +815 -0
  556. package/config/ui-spec.d.ts +164 -0
  557. package/config/ui-spec.d.ts.map +1 -0
  558. package/config/ui-spec.js +13 -0
  559. package/events/index.d.ts +47 -0
  560. package/events/index.d.ts.map +1 -0
  561. package/events/index.js +43 -0
  562. package/hooks/index.d.ts +15 -0
  563. package/hooks/index.d.ts.map +1 -0
  564. package/hooks/useBugReport.d.ts +14 -0
  565. package/hooks/useBugReport.d.ts.map +1 -0
  566. package/hooks/useBugReport.js +18 -0
  567. package/hooks/useCanvasWindow.d.ts +38 -0
  568. package/hooks/useCanvasWindow.d.ts.map +1 -0
  569. package/hooks/useCanvasWindow.js +273 -0
  570. package/hooks/useChatAvatarVoice.d.ts +10 -0
  571. package/hooks/useChatAvatarVoice.d.ts.map +1 -0
  572. package/hooks/useChatAvatarVoice.js +71 -0
  573. package/hooks/useClickOutside.d.ts +6 -0
  574. package/hooks/useClickOutside.d.ts.map +1 -0
  575. package/hooks/useClickOutside.js +25 -0
  576. package/hooks/useContextMenu.d.ts +17 -0
  577. package/hooks/useContextMenu.d.ts.map +1 -0
  578. package/hooks/useContextMenu.js +100 -0
  579. package/hooks/useKeyboardShortcuts.d.ts +17 -0
  580. package/hooks/useKeyboardShortcuts.d.ts.map +1 -0
  581. package/hooks/useKeyboardShortcuts.js +67 -0
  582. package/hooks/useLifoSync.d.ts +18 -0
  583. package/hooks/useLifoSync.d.ts.map +1 -0
  584. package/hooks/useLifoSync.js +113 -0
  585. package/hooks/useMemoryMonitor.d.ts +87 -0
  586. package/hooks/useMemoryMonitor.d.ts.map +1 -0
  587. package/hooks/useMemoryMonitor.js +209 -0
  588. package/hooks/useRenderGuard.d.ts +17 -0
  589. package/hooks/useRenderGuard.d.ts.map +1 -0
  590. package/hooks/useRenderGuard.js +36 -0
  591. package/hooks/useRetakeCapture.d.ts +12 -0
  592. package/hooks/useRetakeCapture.d.ts.map +1 -0
  593. package/hooks/useRetakeCapture.js +60 -0
  594. package/hooks/useStreamPopoutNavigation.d.ts +3 -0
  595. package/hooks/useStreamPopoutNavigation.d.ts.map +1 -0
  596. package/hooks/useStreamPopoutNavigation.js +17 -0
  597. package/hooks/useTimeout.d.ts +11 -0
  598. package/hooks/useTimeout.d.ts.map +1 -0
  599. package/hooks/useTimeout.js +32 -0
  600. package/hooks/useVoiceChat.d.ts +94 -0
  601. package/hooks/useVoiceChat.d.ts.map +1 -0
  602. package/hooks/useVoiceChat.js +1074 -0
  603. package/hooks/useWhatsAppPairing.d.ts +11 -0
  604. package/hooks/useWhatsAppPairing.d.ts.map +1 -0
  605. package/hooks/useWhatsAppPairing.js +95 -0
  606. package/i18n/index.d.ts +7 -0
  607. package/i18n/index.d.ts.map +1 -0
  608. package/i18n/index.js +53 -0
  609. package/i18n/locales/en.json +1239 -0
  610. package/i18n/locales/es.json +1236 -0
  611. package/i18n/locales/ko.json +1236 -0
  612. package/i18n/locales/pt.json +1236 -0
  613. package/i18n/locales/zh-CN.json +1236 -0
  614. package/i18n/messages.d.ts +6 -0
  615. package/i18n/messages.d.ts.map +1 -0
  616. package/i18n/messages.js +14 -0
  617. package/index.d.ts +5 -0
  618. package/index.d.ts.map +1 -0
  619. package/navigation/index.d.ts +27 -0
  620. package/navigation/index.d.ts.map +1 -0
  621. package/navigation/index.js +232 -0
  622. package/onboarding-config.d.ts +25 -0
  623. package/onboarding-config.d.ts.map +1 -0
  624. package/onboarding-config.js +76 -0
  625. package/package.json +143 -53
  626. package/platform/browser-launch.d.ts +2 -0
  627. package/platform/browser-launch.d.ts.map +1 -0
  628. package/platform/browser-launch.js +109 -0
  629. package/platform/index.d.ts +14 -0
  630. package/platform/index.d.ts.map +1 -0
  631. package/platform/index.js +24 -0
  632. package/platform/init.d.ts +40 -0
  633. package/platform/init.d.ts.map +1 -0
  634. package/platform/init.js +160 -0
  635. package/platform/lifo.d.ts +51 -0
  636. package/platform/lifo.d.ts.map +1 -0
  637. package/platform/lifo.js +138 -0
  638. package/providers/index.d.ts +19 -0
  639. package/providers/index.d.ts.map +1 -0
  640. package/providers/index.js +80 -0
  641. package/shell-params.d.ts +12 -0
  642. package/shell-params.d.ts.map +1 -0
  643. package/shell-params.js +19 -0
  644. package/state/AppContext.d.ts +12 -0
  645. package/state/AppContext.d.ts.map +1 -0
  646. package/state/AppContext.js +5060 -0
  647. package/state/index.d.ts +7 -0
  648. package/state/index.d.ts.map +1 -0
  649. package/state/internal.d.ts +7 -0
  650. package/state/internal.d.ts.map +1 -0
  651. package/state/internal.js +6 -0
  652. package/state/onboarding-resume.d.ts +11 -0
  653. package/state/onboarding-resume.d.ts.map +1 -0
  654. package/state/onboarding-resume.js +189 -0
  655. package/state/parsers.d.ts +26 -0
  656. package/state/parsers.d.ts.map +1 -0
  657. package/state/parsers.js +255 -0
  658. package/state/persistence.d.ts +59 -0
  659. package/state/persistence.d.ts.map +1 -0
  660. package/state/persistence.js +326 -0
  661. package/state/shell-routing.d.ts +12 -0
  662. package/state/shell-routing.d.ts.map +1 -0
  663. package/state/shell-routing.js +25 -0
  664. package/state/types.d.ts +421 -0
  665. package/state/types.d.ts.map +1 -0
  666. package/state/types.js +75 -0
  667. package/state/ui-preferences.d.ts +3 -0
  668. package/state/ui-preferences.d.ts.map +1 -0
  669. package/state/ui-preferences.js +1 -0
  670. package/state/useApp.d.ts +4 -0
  671. package/state/useApp.d.ts.map +1 -0
  672. package/state/useApp.js +22 -0
  673. package/state/vrm.d.ts +30 -0
  674. package/state/vrm.d.ts.map +1 -0
  675. package/state/vrm.js +82 -0
  676. package/styles/anime.css +6321 -0
  677. package/styles/onboarding-game.css +1092 -0
  678. package/types/index.d.ts +657 -0
  679. package/types/index.d.ts.map +1 -0
  680. package/types/index.js +1 -0
  681. package/utils/asset-url.d.ts +26 -0
  682. package/utils/asset-url.d.ts.map +1 -0
  683. package/utils/asset-url.js +99 -0
  684. package/utils/assistant-text.d.ts +2 -0
  685. package/utils/assistant-text.d.ts.map +1 -0
  686. package/utils/assistant-text.js +161 -0
  687. package/utils/clipboard.d.ts +2 -0
  688. package/utils/clipboard.d.ts.map +1 -0
  689. package/utils/clipboard.js +38 -0
  690. package/utils/desktop-dialogs.d.ts +19 -0
  691. package/utils/desktop-dialogs.d.ts.map +1 -0
  692. package/utils/desktop-dialogs.js +50 -0
  693. package/utils/eliza-globals.d.ts +11 -0
  694. package/utils/eliza-globals.d.ts.map +1 -0
  695. package/utils/eliza-globals.js +33 -0
  696. package/utils/index.d.ts +8 -0
  697. package/utils/index.d.ts.map +1 -0
  698. package/utils/number-parsing.d.ts +44 -0
  699. package/utils/number-parsing.d.ts.map +1 -0
  700. package/utils/number-parsing.js +56 -0
  701. package/utils/openExternalUrl.d.ts +2 -0
  702. package/utils/openExternalUrl.d.ts.map +1 -0
  703. package/utils/openExternalUrl.js +17 -0
  704. package/utils/spoken-text.d.ts +2 -0
  705. package/utils/spoken-text.d.ts.map +1 -0
  706. package/utils/spoken-text.js +56 -0
  707. package/utils/streaming-text.d.ts +3 -0
  708. package/utils/streaming-text.d.ts.map +1 -0
  709. package/utils/streaming-text.js +87 -0
  710. package/voice/index.d.ts +2 -0
  711. package/voice/index.d.ts.map +1 -0
  712. package/voice/types.d.ts +25 -0
  713. package/voice/types.d.ts.map +1 -0
  714. package/voice/types.js +166 -0
  715. package/wallet-rpc.d.ts +8 -0
  716. package/wallet-rpc.d.ts.map +1 -0
  717. package/wallet-rpc.js +131 -0
  718. package/.turbo/turbo-build.log +0 -5
  719. package/src/App.tsx +0 -504
  720. package/src/actions/character.test.ts +0 -139
  721. package/src/actions/character.ts +0 -334
  722. package/src/actions/chat-helpers.ts +0 -100
  723. package/src/actions/cloud.ts +0 -59
  724. package/src/actions/index.ts +0 -12
  725. package/src/actions/lifecycle.ts +0 -175
  726. package/src/actions/onboarding.ts +0 -38
  727. package/src/actions/triggers.ts +0 -190
  728. package/src/ambient.d.ts +0 -33
  729. package/src/api/client.ts +0 -5659
  730. package/src/autonomy/index.ts +0 -477
  731. package/src/bridge/capacitor-bridge.ts +0 -295
  732. package/src/bridge/electrobun-rpc.ts +0 -78
  733. package/src/bridge/electrobun-runtime.ts +0 -28
  734. package/src/bridge/native-plugins.ts +0 -138
  735. package/src/bridge/plugin-bridge.ts +0 -352
  736. package/src/bridge/storage-bridge.ts +0 -162
  737. package/src/chat/index.ts +0 -250
  738. package/src/coding/index.ts +0 -43
  739. package/src/components/AdvancedPageView.tsx +0 -382
  740. package/src/components/AgentActivityBox.tsx +0 -49
  741. package/src/components/ApiKeyConfig.tsx +0 -222
  742. package/src/components/AppsPageView.tsx +0 -52
  743. package/src/components/AppsView.tsx +0 -293
  744. package/src/components/AvatarLoader.tsx +0 -104
  745. package/src/components/AvatarSelector.tsx +0 -223
  746. package/src/components/BscTradePanel.tsx +0 -549
  747. package/src/components/BugReportModal.tsx +0 -499
  748. package/src/components/CharacterRoster.tsx +0 -143
  749. package/src/components/CharacterView.tsx +0 -1575
  750. package/src/components/ChatAvatar.test.ts +0 -97
  751. package/src/components/ChatAvatar.tsx +0 -147
  752. package/src/components/ChatComposer.tsx +0 -330
  753. package/src/components/ChatMessage.tsx +0 -448
  754. package/src/components/ChatModalView.test.tsx +0 -118
  755. package/src/components/ChatModalView.tsx +0 -125
  756. package/src/components/ChatView.tsx +0 -992
  757. package/src/components/CloudOnboarding.tsx +0 -81
  758. package/src/components/CloudSourceControls.tsx +0 -85
  759. package/src/components/CodingAgentSettingsSection.tsx +0 -537
  760. package/src/components/CommandPalette.tsx +0 -284
  761. package/src/components/CompanionSceneHost.tsx +0 -517
  762. package/src/components/CompanionShell.tsx +0 -31
  763. package/src/components/CompanionView.tsx +0 -110
  764. package/src/components/ConfigPageView.tsx +0 -763
  765. package/src/components/ConfigSaveFooter.tsx +0 -41
  766. package/src/components/ConfirmModal.tsx +0 -379
  767. package/src/components/ConnectionFailedBanner.tsx +0 -91
  768. package/src/components/ConnectorsPageView.tsx +0 -13
  769. package/src/components/ConversationsSidebar.tsx +0 -279
  770. package/src/components/CustomActionEditor.tsx +0 -1127
  771. package/src/components/CustomActionsPanel.tsx +0 -288
  772. package/src/components/CustomActionsView.tsx +0 -325
  773. package/src/components/DatabasePageView.tsx +0 -55
  774. package/src/components/DatabaseView.tsx +0 -814
  775. package/src/components/ElizaCloudDashboard.tsx +0 -1696
  776. package/src/components/EmotePicker.tsx +0 -529
  777. package/src/components/ErrorBoundary.tsx +0 -76
  778. package/src/components/FineTuningView.tsx +0 -1080
  779. package/src/components/FlaminaGuide.test.tsx +0 -61
  780. package/src/components/FlaminaGuide.tsx +0 -212
  781. package/src/components/GameView.tsx +0 -551
  782. package/src/components/GameViewOverlay.tsx +0 -133
  783. package/src/components/GlobalEmoteOverlay.tsx +0 -152
  784. package/src/components/Header.test.tsx +0 -413
  785. package/src/components/Header.tsx +0 -400
  786. package/src/components/HeartbeatsView.tsx +0 -1003
  787. package/src/components/InventoryView.tsx +0 -393
  788. package/src/components/KnowledgeView.tsx +0 -1128
  789. package/src/components/LanguageDropdown.tsx +0 -192
  790. package/src/components/LifoMonitorPanel.tsx +0 -196
  791. package/src/components/LifoSandboxView.tsx +0 -499
  792. package/src/components/LoadingScreen.tsx +0 -112
  793. package/src/components/LogsPageView.tsx +0 -17
  794. package/src/components/LogsView.tsx +0 -239
  795. package/src/components/MediaGalleryView.tsx +0 -431
  796. package/src/components/MediaSettingsSection.tsx +0 -893
  797. package/src/components/MessageContent.tsx +0 -815
  798. package/src/components/MiladyBar.tsx +0 -103
  799. package/src/components/MiladyBarSettings.tsx +0 -872
  800. package/src/components/OnboardingWizard.test.tsx +0 -104
  801. package/src/components/OnboardingWizard.tsx +0 -249
  802. package/src/components/PairingView.tsx +0 -109
  803. package/src/components/PermissionsSection.tsx +0 -1184
  804. package/src/components/PluginsPageView.tsx +0 -9
  805. package/src/components/PluginsView.tsx +0 -3129
  806. package/src/components/ProviderSwitcher.tsx +0 -903
  807. package/src/components/RestartBanner.tsx +0 -76
  808. package/src/components/RuntimeView.tsx +0 -460
  809. package/src/components/SaveCommandModal.tsx +0 -211
  810. package/src/components/SecretsView.tsx +0 -569
  811. package/src/components/SecurityPageView.tsx +0 -242
  812. package/src/components/SettingsView.tsx +0 -825
  813. package/src/components/ShellOverlays.tsx +0 -41
  814. package/src/components/ShortcutsOverlay.tsx +0 -155
  815. package/src/components/SkillsView.tsx +0 -1435
  816. package/src/components/StartupFailureView.tsx +0 -63
  817. package/src/components/StreamView.tsx +0 -481
  818. package/src/components/StripeEmbeddedCheckout.tsx +0 -155
  819. package/src/components/SubscriptionStatus.tsx +0 -640
  820. package/src/components/SystemWarningBanner.tsx +0 -71
  821. package/src/components/ThemeToggle.tsx +0 -103
  822. package/src/components/TrajectoriesView.tsx +0 -526
  823. package/src/components/TrajectoryDetailView.tsx +0 -426
  824. package/src/components/VectorBrowserView.tsx +0 -1633
  825. package/src/components/VoiceConfigView.tsx +0 -674
  826. package/src/components/VrmStage.test.ts +0 -176
  827. package/src/components/VrmStage.tsx +0 -309
  828. package/src/components/WhatsAppQrOverlay.tsx +0 -230
  829. package/src/components/__tests__/chainConfig.test.ts +0 -220
  830. package/src/components/apps/AppDetailPane.tsx +0 -242
  831. package/src/components/apps/AppsCatalogGrid.tsx +0 -137
  832. package/src/components/apps/extensions/registry.ts +0 -13
  833. package/src/components/apps/extensions/types.ts +0 -9
  834. package/src/components/apps/helpers.ts +0 -43
  835. package/src/components/avatar/VrmAnimationLoader.test.ts +0 -164
  836. package/src/components/avatar/VrmAnimationLoader.ts +0 -151
  837. package/src/components/avatar/VrmBlinkController.ts +0 -118
  838. package/src/components/avatar/VrmCameraManager.ts +0 -407
  839. package/src/components/avatar/VrmEngine.ts +0 -2767
  840. package/src/components/avatar/VrmFootShadow.ts +0 -96
  841. package/src/components/avatar/VrmViewer.tsx +0 -421
  842. package/src/components/avatar/__tests__/VrmCameraManager.test.ts +0 -168
  843. package/src/components/avatar/__tests__/VrmEngine.test.ts +0 -1574
  844. package/src/components/avatar/mixamoVRMRigMap.ts +0 -62
  845. package/src/components/avatar/retargetMixamoFbxToVrm.ts +0 -144
  846. package/src/components/avatar/retargetMixamoGltfToVrm.ts +0 -119
  847. package/src/components/chainConfig.ts +0 -400
  848. package/src/components/companion/CompanionHeader.tsx +0 -50
  849. package/src/components/companion/CompanionSceneHost.tsx +0 -5
  850. package/src/components/companion/VrmStage.tsx +0 -2
  851. package/src/components/companion/__tests__/walletUtils.test.ts +0 -742
  852. package/src/components/companion/index.ts +0 -18
  853. package/src/components/companion/walletUtils.ts +0 -290
  854. package/src/components/companion-shell-styles.test.ts +0 -142
  855. package/src/components/companion-shell-styles.ts +0 -270
  856. package/src/components/confirm-delete-control.tsx +0 -69
  857. package/src/components/conversations/ConversationListItem.tsx +0 -185
  858. package/src/components/conversations/conversation-utils.ts +0 -151
  859. package/src/components/format.ts +0 -131
  860. package/src/components/index.ts +0 -96
  861. package/src/components/inventory/CopyableAddress.tsx +0 -41
  862. package/src/components/inventory/InventoryToolbar.tsx +0 -142
  863. package/src/components/inventory/NftGrid.tsx +0 -99
  864. package/src/components/inventory/TokenLogo.tsx +0 -71
  865. package/src/components/inventory/TokensTable.tsx +0 -216
  866. package/src/components/inventory/constants.ts +0 -170
  867. package/src/components/inventory/index.ts +0 -29
  868. package/src/components/inventory/media-url.test.ts +0 -38
  869. package/src/components/inventory/media-url.ts +0 -36
  870. package/src/components/inventory/useInventoryData.ts +0 -460
  871. package/src/components/knowledge-upload-image.ts +0 -215
  872. package/src/components/labels.ts +0 -46
  873. package/src/components/milady-bar/CloudCreditsChip.tsx +0 -61
  874. package/src/components/milady-bar/ProviderDropdown.tsx +0 -166
  875. package/src/components/milady-bar/WalletSummary.tsx +0 -61
  876. package/src/components/milady-bar/index.ts +0 -3
  877. package/src/components/onboarding/ActivateStep.tsx +0 -34
  878. package/src/components/onboarding/ConnectionStep.tsx +0 -1591
  879. package/src/components/onboarding/IdentityStep.tsx +0 -251
  880. package/src/components/onboarding/OnboardingPanel.tsx +0 -39
  881. package/src/components/onboarding/OnboardingStepNav.tsx +0 -41
  882. package/src/components/onboarding/PermissionsStep.tsx +0 -20
  883. package/src/components/onboarding/RpcStep.tsx +0 -402
  884. package/src/components/permissions/PermissionIcon.tsx +0 -25
  885. package/src/components/permissions/StreamingPermissions.tsx +0 -413
  886. package/src/components/plugins/showcase-data.ts +0 -481
  887. package/src/components/shared/ShellHeaderControls.tsx +0 -198
  888. package/src/components/shared-companion-scene-context.ts +0 -15
  889. package/src/components/skeletons.tsx +0 -88
  890. package/src/components/stream/ActivityFeed.tsx +0 -113
  891. package/src/components/stream/AvatarPip.tsx +0 -10
  892. package/src/components/stream/ChatContent.tsx +0 -126
  893. package/src/components/stream/ChatTicker.tsx +0 -55
  894. package/src/components/stream/IdleContent.tsx +0 -73
  895. package/src/components/stream/StatusBar.tsx +0 -463
  896. package/src/components/stream/StreamSettings.tsx +0 -506
  897. package/src/components/stream/StreamTerminal.tsx +0 -94
  898. package/src/components/stream/StreamVoiceConfig.tsx +0 -160
  899. package/src/components/stream/helpers.ts +0 -134
  900. package/src/components/stream/overlays/OverlayLayer.tsx +0 -75
  901. package/src/components/stream/overlays/built-in/ActionTickerWidget.tsx +0 -64
  902. package/src/components/stream/overlays/built-in/AlertPopupWidget.tsx +0 -87
  903. package/src/components/stream/overlays/built-in/BrandingWidget.tsx +0 -51
  904. package/src/components/stream/overlays/built-in/CustomHtmlWidget.tsx +0 -105
  905. package/src/components/stream/overlays/built-in/PeonGlassWidget.tsx +0 -265
  906. package/src/components/stream/overlays/built-in/PeonHudWidget.tsx +0 -247
  907. package/src/components/stream/overlays/built-in/PeonSakuraWidget.tsx +0 -278
  908. package/src/components/stream/overlays/built-in/ThoughtBubbleWidget.tsx +0 -77
  909. package/src/components/stream/overlays/built-in/ViewerCountWidget.tsx +0 -46
  910. package/src/components/stream/overlays/built-in/index.ts +0 -13
  911. package/src/components/stream/overlays/registry.ts +0 -22
  912. package/src/components/stream/overlays/types.ts +0 -90
  913. package/src/components/stream/overlays/useOverlayLayout.ts +0 -218
  914. package/src/components/trajectory-format.ts +0 -50
  915. package/src/components/ui-badges.tsx +0 -109
  916. package/src/components/ui-switch.tsx +0 -57
  917. package/src/components/vector-browser-three.ts +0 -29
  918. package/src/config/branding.ts +0 -67
  919. package/src/config/config-catalog.ts +0 -1092
  920. package/src/config/config-field.tsx +0 -1924
  921. package/src/config/config-renderer.tsx +0 -734
  922. package/src/config/index.ts +0 -12
  923. package/src/config/ui-renderer.tsx +0 -1751
  924. package/src/config/ui-spec.ts +0 -256
  925. package/src/events/index.ts +0 -96
  926. package/src/hooks/useBugReport.tsx +0 -43
  927. package/src/hooks/useCanvasWindow.ts +0 -372
  928. package/src/hooks/useChatAvatarVoice.ts +0 -111
  929. package/src/hooks/useClickOutside.ts +0 -31
  930. package/src/hooks/useContextMenu.ts +0 -127
  931. package/src/hooks/useKeyboardShortcuts.ts +0 -86
  932. package/src/hooks/useLifoSync.ts +0 -143
  933. package/src/hooks/useMemoryMonitor.ts +0 -334
  934. package/src/hooks/useMiladyBar.ts +0 -594
  935. package/src/hooks/useRenderGuard.ts +0 -43
  936. package/src/hooks/useRetakeCapture.ts +0 -68
  937. package/src/hooks/useStreamPopoutNavigation.ts +0 -27
  938. package/src/hooks/useTimeout.ts +0 -37
  939. package/src/hooks/useVoiceChat.ts +0 -1442
  940. package/src/hooks/useWhatsAppPairing.ts +0 -123
  941. package/src/i18n/index.ts +0 -76
  942. package/src/i18n/locales/en.json +0 -1195
  943. package/src/i18n/locales/es.json +0 -1195
  944. package/src/i18n/locales/ko.json +0 -1195
  945. package/src/i18n/locales/pt.json +0 -1195
  946. package/src/i18n/locales/zh-CN.json +0 -1195
  947. package/src/i18n/messages.ts +0 -21
  948. package/src/navigation/index.ts +0 -286
  949. package/src/navigation.test.ts +0 -189
  950. package/src/onboarding-config.test.ts +0 -104
  951. package/src/onboarding-config.ts +0 -122
  952. package/src/platform/browser-launch.test.ts +0 -94
  953. package/src/platform/browser-launch.ts +0 -149
  954. package/src/platform/index.ts +0 -58
  955. package/src/platform/init.ts +0 -238
  956. package/src/platform/lifo.ts +0 -225
  957. package/src/providers/index.ts +0 -108
  958. package/src/shell-params.test.ts +0 -48
  959. package/src/shell-params.ts +0 -36
  960. package/src/state/AppContext.tsx +0 -6415
  961. package/src/state/internal.ts +0 -91
  962. package/src/state/onboarding-resume.test.ts +0 -135
  963. package/src/state/onboarding-resume.ts +0 -263
  964. package/src/state/parsers.test.ts +0 -124
  965. package/src/state/parsers.ts +0 -309
  966. package/src/state/persistence.ts +0 -379
  967. package/src/state/shell-routing.ts +0 -39
  968. package/src/state/types.ts +0 -724
  969. package/src/state/ui-preferences.ts +0 -3
  970. package/src/state/useApp.ts +0 -23
  971. package/src/state/vrm.ts +0 -108
  972. package/src/styles/anime.css +0 -6324
  973. package/src/styles/onboarding-game.css +0 -976
  974. package/src/types/index.ts +0 -715
  975. package/src/types/react-test-renderer.d.ts +0 -45
  976. package/src/utils/asset-url.ts +0 -110
  977. package/src/utils/assistant-text.ts +0 -172
  978. package/src/utils/clipboard.ts +0 -41
  979. package/src/utils/desktop-dialogs.ts +0 -80
  980. package/src/utils/eliza-globals.ts +0 -44
  981. package/src/utils/number-parsing.ts +0 -125
  982. package/src/utils/openExternalUrl.ts +0 -20
  983. package/src/utils/spoken-text.ts +0 -65
  984. package/src/utils/streaming-text.ts +0 -120
  985. package/src/voice/types.ts +0 -197
  986. package/src/wallet-rpc.ts +0 -176
  987. package/test/app/AppContext.pty-sessions.test.tsx +0 -143
  988. package/test/app/MessageContent.test.tsx +0 -366
  989. package/test/app/PermissionsOnboarding.test.tsx +0 -358
  990. package/test/app/PermissionsSection.test.tsx +0 -575
  991. package/test/app/advanced-trajectory-fine-tuning.e2e.test.ts +0 -396
  992. package/test/app/agent-activity-box.test.tsx +0 -132
  993. package/test/app/agent-transfer-lock.test.ts +0 -279
  994. package/test/app/api-client-electrobun-fallback.test.ts +0 -139
  995. package/test/app/api-client-electron-fallback.test.ts +0 -139
  996. package/test/app/api-client-timeout.test.ts +0 -75
  997. package/test/app/api-client-ws.test.ts +0 -98
  998. package/test/app/api-client.ws-max-reconnect.test.ts +0 -139
  999. package/test/app/api-client.ws-reconnect.test.ts +0 -157
  1000. package/test/app/app-context-autonomy-events.test.ts +0 -559
  1001. package/test/app/apps-page-view.test.ts +0 -114
  1002. package/test/app/apps-view.test.ts +0 -768
  1003. package/test/app/autonomous-workflows.e2e.test.ts +0 -765
  1004. package/test/app/autonomy-events.test.ts +0 -150
  1005. package/test/app/avatar-selector.test.tsx +0 -52
  1006. package/test/app/bsc-trade-panel.test.tsx +0 -134
  1007. package/test/app/bug-report-modal.test.tsx +0 -353
  1008. package/test/app/character-action-bar-visibility.test.ts +0 -70
  1009. package/test/app/character-customization.e2e.test.ts +0 -1384
  1010. package/test/app/character-save-journey.test.ts +0 -1245
  1011. package/test/app/chat-advanced-features.e2e.test.ts +0 -706
  1012. package/test/app/chat-composer.test.tsx +0 -181
  1013. package/test/app/chat-journey.test.ts +0 -1075
  1014. package/test/app/chat-language-header.test.ts +0 -64
  1015. package/test/app/chat-message.test.tsx +0 -222
  1016. package/test/app/chat-modal-view.test.tsx +0 -191
  1017. package/test/app/chat-routine-filter.test.ts +0 -96
  1018. package/test/app/chat-send-lock.test.ts +0 -1465
  1019. package/test/app/chat-stream-api-client.test.tsx +0 -390
  1020. package/test/app/chat-view-game-modal.test.tsx +0 -661
  1021. package/test/app/chat-view.test.tsx +0 -877
  1022. package/test/app/cloud-api.e2e.test.ts +0 -258
  1023. package/test/app/cloud-login-flow.e2e.test.ts +0 -494
  1024. package/test/app/cloud-login-lock.test.ts +0 -416
  1025. package/test/app/command-palette.test.tsx +0 -184
  1026. package/test/app/command-registry.test.ts +0 -75
  1027. package/test/app/companion-greeting-wave.test.tsx +0 -431
  1028. package/test/app/companion-scene-host.test.tsx +0 -85
  1029. package/test/app/companion-stale-conversation.test.tsx +0 -447
  1030. package/test/app/companion-view.test.tsx +0 -690
  1031. package/test/app/confirm-delete-control.test.ts +0 -79
  1032. package/test/app/confirm-modal.test.tsx +0 -219
  1033. package/test/app/connection-mode-persistence.test.ts +0 -411
  1034. package/test/app/connectors-ui.e2e.test.ts +0 -508
  1035. package/test/app/conversations-sidebar-game-modal.test.tsx +0 -265
  1036. package/test/app/conversations-sidebar.test.tsx +0 -185
  1037. package/test/app/custom-actions-smoke.test.ts +0 -387
  1038. package/test/app/custom-avatar-api-client.test.ts +0 -207
  1039. package/test/app/desktop-utils.test.ts +0 -145
  1040. package/test/app/electrobun-rpc-bridge.test.ts +0 -83
  1041. package/test/app/events.test.ts +0 -88
  1042. package/test/app/export-import-flows.e2e.test.ts +0 -700
  1043. package/test/app/fine-tuning-view.test.ts +0 -471
  1044. package/test/app/game-view-auth-session.test.tsx +0 -187
  1045. package/test/app/game-view.test.ts +0 -444
  1046. package/test/app/global-emote-overlay.test.tsx +0 -106
  1047. package/test/app/header-status.test.tsx +0 -149
  1048. package/test/app/i18n.test.ts +0 -152
  1049. package/test/app/inventory-bsc-view.test.ts +0 -940
  1050. package/test/app/knowledge-ui.e2e.test.ts +0 -762
  1051. package/test/app/knowledge-upload-helpers.test.ts +0 -124
  1052. package/test/app/lifecycle-lock.test.ts +0 -267
  1053. package/test/app/lifo-popout-utils.test.ts +0 -208
  1054. package/test/app/lifo-safe-endpoint.test.ts +0 -34
  1055. package/test/app/loading-screen.test.tsx +0 -45
  1056. package/test/app/memory-monitor.test.ts +0 -331
  1057. package/test/app/milady-bar-regression.test.tsx +0 -519
  1058. package/test/app/milady-bar-settings.test.tsx +0 -1056
  1059. package/test/app/milady-bar.test.tsx +0 -583
  1060. package/test/app/navigation.test.tsx +0 -22
  1061. package/test/app/onboarding-e2e-journey.test.ts +0 -1409
  1062. package/test/app/onboarding-finish-lock.test.ts +0 -676
  1063. package/test/app/onboarding-language.test.tsx +0 -160
  1064. package/test/app/onboarding-steps.test.tsx +0 -375
  1065. package/test/app/open-external-url.test.ts +0 -65
  1066. package/test/app/pages-navigation-smoke.e2e.test.ts +0 -646
  1067. package/test/app/pairing-lock.test.ts +0 -260
  1068. package/test/app/pairing-view.test.tsx +0 -74
  1069. package/test/app/permissions-section.test.ts +0 -432
  1070. package/test/app/plugin-bridge.test.ts +0 -109
  1071. package/test/app/plugins-ui.e2e.test.ts +0 -605
  1072. package/test/app/plugins-view-game-modal.test.tsx +0 -686
  1073. package/test/app/plugins-view-toggle-restart.test.ts +0 -129
  1074. package/test/app/provider-dropdown-default.test.tsx +0 -300
  1075. package/test/app/restart-banner.test.tsx +0 -205
  1076. package/test/app/retake-capture.test.ts +0 -84
  1077. package/test/app/sandbox-api-client.test.ts +0 -108
  1078. package/test/app/save-command-modal.test.tsx +0 -109
  1079. package/test/app/secrets-view.test.tsx +0 -92
  1080. package/test/app/settings-control-styles.test.tsx +0 -142
  1081. package/test/app/settings-reset.e2e.test.ts +0 -726
  1082. package/test/app/settings-sections.e2e.test.ts +0 -614
  1083. package/test/app/shared-format.test.ts +0 -44
  1084. package/test/app/shared-switch.test.ts +0 -69
  1085. package/test/app/shell-mode-switching.e2e.test.ts +0 -841
  1086. package/test/app/shell-mode-tab-memory.test.tsx +0 -58
  1087. package/test/app/shell-overlays.test.tsx +0 -50
  1088. package/test/app/shortcuts-overlay.test.tsx +0 -111
  1089. package/test/app/sse-interruption.test.ts +0 -122
  1090. package/test/app/startup-asset-missing.e2e.test.ts +0 -126
  1091. package/test/app/startup-backend-missing.e2e.test.ts +0 -126
  1092. package/test/app/startup-chat.e2e.test.ts +0 -323
  1093. package/test/app/startup-conversation-restore.test.tsx +0 -381
  1094. package/test/app/startup-failure-view.test.tsx +0 -103
  1095. package/test/app/startup-onboarding.e2e.test.ts +0 -712
  1096. package/test/app/startup-timeout.test.tsx +0 -80
  1097. package/test/app/startup-token-401.e2e.test.ts +0 -103
  1098. package/test/app/stream-helpers.test.ts +0 -46
  1099. package/test/app/stream-popout-navigation.test.tsx +0 -41
  1100. package/test/app/stream-status-bar.test.tsx +0 -89
  1101. package/test/app/theme-toggle.test.tsx +0 -40
  1102. package/test/app/training-api-client.test.ts +0 -128
  1103. package/test/app/trajectories-view.test.tsx +0 -220
  1104. package/test/app/triggers-api-client.test.ts +0 -77
  1105. package/test/app/triggers-navigation.test.ts +0 -113
  1106. package/test/app/triggers-view.e2e.test.ts +0 -675
  1107. package/test/app/update-channel-lock.test.ts +0 -259
  1108. package/test/app/vector-browser.async-cleanup.test.tsx +0 -367
  1109. package/test/app/vector-browser.e2e.test.ts +0 -653
  1110. package/test/app/vrm-stage.test.tsx +0 -351
  1111. package/test/app/vrm-viewer.test.tsx +0 -298
  1112. package/test/app/wallet-api-save-lock.test.ts +0 -299
  1113. package/test/app/wallet-hooks.test.ts +0 -405
  1114. package/test/app/wallet-ui-flows.e2e.test.ts +0 -556
  1115. package/test/avatar/asset-url.test.ts +0 -90
  1116. package/test/avatar/avatar-selector.test.ts +0 -173
  1117. package/test/avatar/mixamo-vrm-rig-map.test.ts +0 -111
  1118. package/test/avatar/voice-chat-streaming-text.test.ts +0 -96
  1119. package/test/avatar/voice-chat.test.ts +0 -391
  1120. package/test/browser-extension/README.md +0 -138
  1121. package/test/browser-extension/test-harness.ts +0 -499
  1122. package/test/capacitor-plugins.e2e.test.ts +0 -168
  1123. package/test/test-types.ts +0 -5
  1124. package/test/ui/command-palette-commands.test.ts +0 -57
  1125. package/test/ui/ui-renderer.test.ts +0 -39
  1126. package/test/utils/assistant-text.test.ts +0 -68
  1127. package/test/utils/eliza-globals.test.ts +0 -59
  1128. package/test/utils/package-exports.test.ts +0 -70
  1129. package/test/utils/streaming-text.test.ts +0 -89
  1130. package/tsconfig.build.json +0 -19
  1131. package/tsconfig.json +0 -20
  1132. package/tsconfig.typecheck.json +0 -12
  1133. /package/{src/api/index.ts → api/index.js} +0 -0
  1134. /package/{src/bridge/index.ts → bridge/index.js} +0 -0
  1135. /package/{src/components/TriggersView.tsx → components/TriggersView.js} +0 -0
  1136. /package/{src/hooks/index.ts → hooks/index.js} +0 -0
  1137. /package/{src/index.ts → index.js} +0 -0
  1138. /package/{src/state/index.ts → state/index.js} +0 -0
  1139. /package/{src/styles → styles}/base.css +0 -0
  1140. /package/{src/styles → styles}/styles.css +0 -0
  1141. /package/{src/styles → styles}/xterm.css +0 -0
  1142. /package/{src/utils/index.ts → utils/index.js} +0 -0
  1143. /package/{src/voice/index.ts → voice/index.js} +0 -0
@@ -1,1056 +0,0 @@
1
- // @vitest-environment jsdom
2
- /**
3
- * Tests for MiladyBarSettings — standalone macOS-style settings window.
4
- *
5
- * Covers rendering, tab navigation, deep-linking, General/Providers/Advanced/About
6
- * tab content, dark mode, and API helpers (getApiBase, apiFetch).
7
- */
8
- import React from "react";
9
- import TestRenderer, { act } from "react-test-renderer";
10
- import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
11
-
12
- // ── Hoisted mocks ──────────────────────────────────────────────────────
13
-
14
- const { mockInvoke } = vi.hoisted(() => ({
15
- mockInvoke: vi.fn().mockResolvedValue(null),
16
- }));
17
-
18
- vi.mock("@elizaos/app-core/bridge/electrobun-rpc", () => ({
19
- invokeDesktopBridgeRequest: mockInvoke,
20
- }));
21
-
22
- // ── Imports ────────────────────────────────────────────────────────────
23
-
24
- import { MiladyBarSettings } from "../../src/components/MiladyBarSettings";
25
-
26
- // ── Helpers ────────────────────────────────────────────────────────────
27
-
28
- let mockFetch: ReturnType<typeof vi.fn>;
29
-
30
- function setupFetch(overrides: Record<string, unknown> = {}) {
31
- const defaults: Record<string, unknown> = {
32
- "/api/status": {
33
- state: "running",
34
- agentName: "Milady",
35
- startedAt: Date.now() - 3600000,
36
- },
37
- "/api/subscription/status": { credits: 12.5, connected: true },
38
- "/api/plugins": {
39
- plugins: [
40
- {
41
- id: "openai",
42
- name: "OpenAI",
43
- category: "ai-provider",
44
- enabled: true,
45
- configured: true,
46
- },
47
- {
48
- id: "anthropic",
49
- name: "Anthropic",
50
- category: "ai-provider",
51
- enabled: true,
52
- configured: false,
53
- },
54
- {
55
- id: "streaming-base",
56
- name: "Streaming",
57
- category: "streaming",
58
- enabled: true,
59
- configured: true,
60
- },
61
- ],
62
- },
63
- "/api/models": { models: ["gpt-4", "gpt-3.5-turbo"] },
64
- "/api/config": { model: "gpt-4", temperature: 0.7 },
65
- "/api/agent/restart": { ok: true },
66
- "/api/provider/switch": { ok: true },
67
- ...overrides,
68
- };
69
-
70
- mockFetch = vi.fn().mockImplementation((url: string, _init?: RequestInit) => {
71
- const path = url
72
- .replace(/^http:\/\/127\.0\.0\.1:2138/, "")
73
- .replace(/\?.*$/, "");
74
- const data = defaults[path];
75
- if (data !== undefined) {
76
- return Promise.resolve({
77
- ok: true,
78
- json: () => Promise.resolve(data),
79
- status: 200,
80
- statusText: "OK",
81
- });
82
- }
83
- return Promise.resolve({
84
- ok: false,
85
- status: 404,
86
- statusText: "Not Found",
87
- json: () => Promise.resolve({ error: "not found" }),
88
- });
89
- });
90
- vi.stubGlobal("fetch", mockFetch);
91
- }
92
-
93
- function setLocationSearch(search: string) {
94
- Object.defineProperty(window, "location", {
95
- value: { ...window.location, search },
96
- writable: true,
97
- configurable: true,
98
- });
99
- }
100
-
101
- function renderSettings(): TestRenderer.ReactTestRenderer {
102
- let tree!: TestRenderer.ReactTestRenderer;
103
- act(() => {
104
- tree = TestRenderer.create(React.createElement(MiladyBarSettings));
105
- });
106
- return tree;
107
- }
108
-
109
- async function renderSettingsAsync(): Promise<TestRenderer.ReactTestRenderer> {
110
- let tree!: TestRenderer.ReactTestRenderer;
111
- await act(async () => {
112
- tree = TestRenderer.create(React.createElement(MiladyBarSettings));
113
- });
114
- return tree;
115
- }
116
-
117
- function findByText(
118
- root: TestRenderer.ReactTestInstance,
119
- text: string | RegExp,
120
- ): TestRenderer.ReactTestInstance | null {
121
- const matches = root.findAll((node) => {
122
- if (typeof node.children?.[0] === "string") {
123
- return typeof text === "string"
124
- ? node.children[0] === text
125
- : text.test(node.children[0]);
126
- }
127
- return false;
128
- });
129
- return matches.length > 0 ? matches[0] : null;
130
- }
131
-
132
- function findAllByText(
133
- root: TestRenderer.ReactTestInstance,
134
- text: string | RegExp,
135
- ): TestRenderer.ReactTestInstance[] {
136
- return root.findAll((node) => {
137
- if (typeof node.children?.[0] === "string") {
138
- return typeof text === "string"
139
- ? node.children[0] === text
140
- : text.test(node.children[0]);
141
- }
142
- return false;
143
- });
144
- }
145
-
146
- function findButtons(
147
- root: TestRenderer.ReactTestInstance,
148
- ): TestRenderer.ReactTestInstance[] {
149
- return root.findAll((node) => node.type === "button");
150
- }
151
-
152
- function findInputs(
153
- root: TestRenderer.ReactTestInstance,
154
- ): TestRenderer.ReactTestInstance[] {
155
- return root.findAll((node) => node.type === "input");
156
- }
157
-
158
- function expectDefined<T>(value: T | undefined, message: string): T {
159
- expect(value).toBeDefined();
160
- if (value === undefined) {
161
- throw new Error(message);
162
- }
163
- return value;
164
- }
165
-
166
- // ── Setup / Teardown ───────────────────────────────────────────────────
167
-
168
- beforeEach(() => {
169
- setupFetch();
170
- mockInvoke.mockClear();
171
- // Reset localStorage
172
- localStorage.clear();
173
- // Reset location
174
- setLocationSearch("");
175
- });
176
-
177
- afterEach(() => {
178
- vi.unstubAllGlobals();
179
- vi.clearAllMocks();
180
- });
181
-
182
- // ── 1. Rendering ───────────────────────────────────────────────────────
183
-
184
- describe("MiladyBarSettings — rendering", () => {
185
- it("renders without crashing", () => {
186
- const tree = renderSettings();
187
- expect(tree.toJSON()).not.toBeNull();
188
- });
189
-
190
- it("renders all 4 tab buttons (General, Providers, Advanced, About)", () => {
191
- const tree = renderSettings();
192
- const root = tree.root;
193
- const tabLabels = ["General", "Providers", "Advanced", "About"];
194
- for (const label of tabLabels) {
195
- const found = findByText(root, label);
196
- expect(found).not.toBeNull();
197
- }
198
- });
199
-
200
- it("defaults to the General tab", () => {
201
- const tree = renderSettings();
202
- const root = tree.root;
203
- // The title bar should show "General" when it's the active tab
204
- const titleNode = findByText(root, "General");
205
- expect(titleNode).not.toBeNull();
206
- // AGENT card should be visible on the General tab
207
- const agentCard = findByText(root, "AGENT");
208
- expect(agentCard).not.toBeNull();
209
- });
210
-
211
- it("deep-links to Providers tab with ?tab=providers", () => {
212
- setLocationSearch("?tab=providers");
213
- const tree = renderSettings();
214
- const root = tree.root;
215
- const providersCard = findByText(root, "AI PROVIDERS");
216
- expect(providersCard).not.toBeNull();
217
- });
218
-
219
- it("maps ?tab=plugins to Providers tab", () => {
220
- setLocationSearch("?tab=plugins");
221
- const tree = renderSettings();
222
- const root = tree.root;
223
- const providersCard = findByText(root, "AI PROVIDERS");
224
- expect(providersCard).not.toBeNull();
225
- });
226
-
227
- it("switches tabs when tab button is clicked", () => {
228
- const tree = renderSettings();
229
- const root = tree.root;
230
-
231
- // Find the About tab button
232
- const buttons = findButtons(root);
233
- const aboutButton = buttons.find((btn) => {
234
- const textChildren = btn.findAll(
235
- (n) => typeof n.children?.[0] === "string" && n.children[0] === "About",
236
- );
237
- return textChildren.length > 0;
238
- });
239
- const resolvedAboutButton = expectDefined(
240
- aboutButton,
241
- "About tab button not found",
242
- );
243
-
244
- act(() => {
245
- resolvedAboutButton.props.onClick();
246
- });
247
-
248
- // VERSION card should now be visible (About tab)
249
- const versionCard = findByText(tree.root, "VERSION");
250
- expect(versionCard).not.toBeNull();
251
- });
252
- });
253
-
254
- // ── 2. General Tab ─────────────────────────────────────────────────────
255
-
256
- describe("MiladyBarSettings — General tab", () => {
257
- it("fetches agent status from /api/status on mount", async () => {
258
- await renderSettingsAsync();
259
- expect(mockFetch).toHaveBeenCalledWith(
260
- expect.stringContaining("/api/status"),
261
- undefined,
262
- );
263
- });
264
-
265
- it("displays agent name from API response", async () => {
266
- const tree = await renderSettingsAsync();
267
- const nameNode = findByText(tree.root, "Milady");
268
- expect(nameNode).not.toBeNull();
269
- });
270
-
271
- it("renders running state badge correctly", async () => {
272
- const tree = await renderSettingsAsync();
273
- const badge = findByText(tree.root, /Running/);
274
- expect(badge).not.toBeNull();
275
- });
276
-
277
- it("renders stopped state badge when agent is stopped", async () => {
278
- setupFetch({
279
- "/api/status": { state: "stopped", agentName: "TestBot" },
280
- });
281
- const tree = await renderSettingsAsync();
282
- const badge = findByText(tree.root, /Stopped/);
283
- expect(badge).not.toBeNull();
284
- });
285
-
286
- it("renders error state badge when agent has error", async () => {
287
- setupFetch({
288
- "/api/status": { state: "error", agentName: "TestBot" },
289
- });
290
- const tree = await renderSettingsAsync();
291
- const badge = findByText(tree.root, /Error/);
292
- expect(badge).not.toBeNull();
293
- });
294
-
295
- it("auto-launch toggle calls desktop RPC", async () => {
296
- mockInvoke.mockResolvedValueOnce({ enabled: false });
297
- const tree = await renderSettingsAsync();
298
-
299
- // Find toggle button (the button in the ToggleRow for "Start at Login")
300
- const buttons = findButtons(tree.root);
301
- const toggleButton = buttons.find((btn) => {
302
- // Toggle buttons have the toggle styling (width: 44)
303
- return btn.props.style?.width === 44;
304
- });
305
- const resolvedToggleButton = expectDefined(
306
- toggleButton,
307
- "Auto-launch toggle button not found",
308
- );
309
-
310
- await act(async () => {
311
- resolvedToggleButton.props.onClick();
312
- });
313
-
314
- expect(mockInvoke).toHaveBeenCalledWith(
315
- expect.objectContaining({
316
- rpcMethod: "desktopSetAutoLaunch",
317
- params: { enabled: true },
318
- }),
319
- );
320
- });
321
-
322
- it("displays eliza cloud credits from /api/subscription/status", async () => {
323
- const tree = await renderSettingsAsync();
324
- const credits = findByText(tree.root, "$12.50");
325
- expect(credits).not.toBeNull();
326
- });
327
-
328
- it("shows 'Not connected' when subscription API fails", async () => {
329
- setupFetch({
330
- "/api/subscription/status": undefined, // will 404
331
- });
332
- // Override fetch to reject for this endpoint
333
- mockFetch.mockImplementation((url: string) => {
334
- if (url.includes("/api/subscription/status")) {
335
- return Promise.reject(new Error("Network error"));
336
- }
337
- if (url.includes("/api/status")) {
338
- return Promise.resolve({
339
- ok: true,
340
- json: () =>
341
- Promise.resolve({ state: "running", agentName: "Milady" }),
342
- status: 200,
343
- statusText: "OK",
344
- });
345
- }
346
- return Promise.resolve({
347
- ok: true,
348
- json: () => Promise.resolve({}),
349
- status: 200,
350
- statusText: "OK",
351
- });
352
- });
353
- const tree = await renderSettingsAsync();
354
- const notConnected = findByText(tree.root, "Not connected");
355
- expect(notConnected).not.toBeNull();
356
- });
357
-
358
- it("fetches auto-launch status via desktop RPC on mount", async () => {
359
- mockInvoke.mockResolvedValue({ enabled: true });
360
- await renderSettingsAsync();
361
- expect(mockInvoke).toHaveBeenCalledWith(
362
- expect.objectContaining({
363
- rpcMethod: "desktopGetAutoLaunchStatus",
364
- ipcChannel: "desktop:getAutoLaunchStatus",
365
- }),
366
- );
367
- });
368
- });
369
-
370
- // ── 3. Providers Tab ───────────────────────────────────────────────────
371
-
372
- describe("MiladyBarSettings — Providers tab", () => {
373
- function renderProvidersTab(): Promise<TestRenderer.ReactTestRenderer> {
374
- setLocationSearch("?tab=providers");
375
- return renderSettingsAsync();
376
- }
377
-
378
- it("fetches plugin list from /api/plugins", async () => {
379
- await renderProvidersTab();
380
- expect(mockFetch).toHaveBeenCalledWith(
381
- expect.stringContaining("/api/plugins"),
382
- undefined,
383
- );
384
- });
385
-
386
- it("shows only ai-provider category plugins", async () => {
387
- const tree = await renderProvidersTab();
388
- const root = tree.root;
389
- // OpenAI and Anthropic should appear
390
- expect(findByText(root, "OpenAI")).not.toBeNull();
391
- expect(findByText(root, "Anthropic")).not.toBeNull();
392
- // Streaming plugin should NOT appear
393
- expect(findByText(root, "Streaming")).toBeNull();
394
- });
395
-
396
- it("clicking a provider selects it", async () => {
397
- const tree = await renderProvidersTab();
398
- const root = tree.root;
399
-
400
- // Find the Anthropic button in the provider list
401
- const buttons = findButtons(root);
402
- const anthropicButton = buttons.find((btn) => {
403
- const textNodes = btn.findAll(
404
- (n) =>
405
- typeof n.children?.[0] === "string" && n.children[0] === "Anthropic",
406
- );
407
- return textNodes.length > 0;
408
- });
409
- const resolvedAnthropicButton = expectDefined(
410
- anthropicButton,
411
- "Anthropic provider button not found",
412
- );
413
-
414
- await act(async () => {
415
- resolvedAnthropicButton.props.onClick();
416
- });
417
-
418
- // After selecting Anthropic, detail view should show its name
419
- const detailNodes = findAllByText(tree.root, "Anthropic");
420
- // Should have at least 2: one in the list, one in the detail header
421
- expect(detailNodes.length).toBeGreaterThanOrEqual(2);
422
- });
423
-
424
- it("renders API key input for selected provider", async () => {
425
- const tree = await renderProvidersTab();
426
- const inputs = findInputs(tree.root);
427
- const passwordInput = inputs.find((inp) => inp.props.type === "password");
428
- expect(passwordInput).toBeDefined();
429
- });
430
-
431
- it("'Save & Activate' calls /api/provider/switch with provider + apiKey", async () => {
432
- const tree = await renderProvidersTab();
433
-
434
- // Type an API key
435
- const inputs = findInputs(tree.root);
436
- const passwordInput = expectDefined(
437
- inputs.find((inp) => inp.props.type === "password"),
438
- "Provider API key input not found",
439
- );
440
- await act(async () => {
441
- passwordInput.props.onChange({ target: { value: "sk-test-key-123" } });
442
- });
443
-
444
- // Click Save & Activate
445
- const buttons = findButtons(tree.root);
446
- const saveButton = buttons.find((btn) => {
447
- const textNodes = btn.findAll(
448
- (n) =>
449
- typeof n.children?.[0] === "string" &&
450
- n.children[0] === "Save & Activate",
451
- );
452
- return textNodes.length > 0;
453
- });
454
- const resolvedSaveButton = expectDefined(
455
- saveButton,
456
- "Save & Activate button not found",
457
- );
458
-
459
- await act(async () => {
460
- resolvedSaveButton.props.onClick();
461
- });
462
-
463
- expect(mockFetch).toHaveBeenCalledWith(
464
- expect.stringContaining("/api/provider/switch"),
465
- expect.objectContaining({
466
- method: "POST",
467
- headers: { "Content-Type": "application/json" },
468
- body: expect.stringContaining("sk-test-key-123"),
469
- }),
470
- );
471
- });
472
-
473
- it("'Test Connection' calls /api/models?provider=X", async () => {
474
- const tree = await renderProvidersTab();
475
-
476
- const buttons = findButtons(tree.root);
477
- const testButton = buttons.find((btn) => {
478
- const textNodes = btn.findAll(
479
- (n) =>
480
- typeof n.children?.[0] === "string" &&
481
- n.children[0] === "Test Connection",
482
- );
483
- return textNodes.length > 0;
484
- });
485
- const resolvedTestButton = expectDefined(
486
- testButton,
487
- "Test Connection button not found",
488
- );
489
-
490
- await act(async () => {
491
- resolvedTestButton.props.onClick();
492
- });
493
-
494
- expect(mockFetch).toHaveBeenCalledWith(
495
- expect.stringContaining("/api/models?provider=openai"),
496
- undefined,
497
- );
498
- });
499
-
500
- it("save success shows green checkmark message", async () => {
501
- const tree = await renderProvidersTab();
502
-
503
- // Type API key
504
- const inputs = findInputs(tree.root);
505
- const passwordInput = expectDefined(
506
- inputs.find((inp) => inp.props.type === "password"),
507
- "Provider API key input not found",
508
- );
509
- await act(async () => {
510
- passwordInput.props.onChange({ target: { value: "sk-valid-key" } });
511
- });
512
-
513
- // Click Save
514
- const buttons = findButtons(tree.root);
515
- const saveButton = buttons.find((btn) => {
516
- const textNodes = btn.findAll(
517
- (n) =>
518
- typeof n.children?.[0] === "string" &&
519
- n.children[0] === "Save & Activate",
520
- );
521
- return textNodes.length > 0;
522
- });
523
-
524
- // Mock the provider/switch and plugins refresh calls
525
- const resolvedSaveButton = expectDefined(
526
- saveButton,
527
- "Save & Activate button not found",
528
- );
529
-
530
- await act(async () => {
531
- resolvedSaveButton.props.onClick();
532
- });
533
-
534
- const savedMessage = findByText(tree.root, /Saved/);
535
- expect(savedMessage).not.toBeNull();
536
- });
537
-
538
- it("save failure shows red error message", async () => {
539
- // Make provider/switch fail
540
- mockFetch.mockImplementation((url: string) => {
541
- if (url.includes("/api/provider/switch")) {
542
- return Promise.resolve({
543
- ok: false,
544
- status: 500,
545
- statusText: "Internal Server Error",
546
- });
547
- }
548
- if (url.includes("/api/plugins")) {
549
- return Promise.resolve({
550
- ok: true,
551
- json: () =>
552
- Promise.resolve({
553
- plugins: [
554
- {
555
- id: "openai",
556
- name: "OpenAI",
557
- category: "ai-provider",
558
- enabled: true,
559
- configured: true,
560
- },
561
- ],
562
- }),
563
- status: 200,
564
- statusText: "OK",
565
- });
566
- }
567
- return Promise.resolve({
568
- ok: true,
569
- json: () => Promise.resolve({}),
570
- status: 200,
571
- statusText: "OK",
572
- });
573
- });
574
-
575
- setLocationSearch("?tab=providers");
576
- const tree = await renderSettingsAsync();
577
-
578
- // Type API key
579
- const inputs = findInputs(tree.root);
580
- const passwordInput = expectDefined(
581
- inputs.find((inp) => inp.props.type === "password"),
582
- "Provider API key input not found",
583
- );
584
- await act(async () => {
585
- passwordInput.props.onChange({ target: { value: "sk-bad-key" } });
586
- });
587
-
588
- const buttons = findButtons(tree.root);
589
- const saveButton = buttons.find((btn) => {
590
- const textNodes = btn.findAll(
591
- (n) =>
592
- typeof n.children?.[0] === "string" &&
593
- n.children[0] === "Save & Activate",
594
- );
595
- return textNodes.length > 0;
596
- });
597
-
598
- const resolvedSaveButton = expectDefined(
599
- saveButton,
600
- "Save & Activate button not found",
601
- );
602
-
603
- await act(async () => {
604
- resolvedSaveButton.props.onClick();
605
- });
606
-
607
- const errorMessage = findByText(tree.root, /✗/);
608
- expect(errorMessage).not.toBeNull();
609
- });
610
-
611
- it("configured providers show 'Active' badge", async () => {
612
- const tree = await renderProvidersTab();
613
- // OpenAI is configured: true, so should show "Active"
614
- const activeBadge = findByText(tree.root, /Active/);
615
- expect(activeBadge).not.toBeNull();
616
- });
617
-
618
- it("shows 'No AI providers found' when plugin list is empty", async () => {
619
- setupFetch({
620
- "/api/plugins": { plugins: [] },
621
- });
622
- setLocationSearch("?tab=providers");
623
- const tree = await renderSettingsAsync();
624
- const empty = findByText(tree.root, "No AI providers found");
625
- expect(empty).not.toBeNull();
626
- });
627
-
628
- it("test connection success shows green checkmark", async () => {
629
- const tree = await renderProvidersTab();
630
-
631
- const buttons = findButtons(tree.root);
632
- const testButton = buttons.find((btn) => {
633
- const textNodes = btn.findAll(
634
- (n) =>
635
- typeof n.children?.[0] === "string" &&
636
- n.children[0] === "Test Connection",
637
- );
638
- return textNodes.length > 0;
639
- });
640
-
641
- const resolvedTestButton = expectDefined(
642
- testButton,
643
- "Test Connection button not found",
644
- );
645
-
646
- await act(async () => {
647
- resolvedTestButton.props.onClick();
648
- });
649
-
650
- const okMessage = findByText(tree.root, /Connection OK/);
651
- expect(okMessage).not.toBeNull();
652
- });
653
-
654
- it("test connection failure shows red error", async () => {
655
- mockFetch.mockImplementation((url: string) => {
656
- if (url.includes("/api/models")) {
657
- return Promise.resolve({
658
- ok: false,
659
- status: 401,
660
- statusText: "Unauthorized",
661
- });
662
- }
663
- if (url.includes("/api/plugins")) {
664
- return Promise.resolve({
665
- ok: true,
666
- json: () =>
667
- Promise.resolve({
668
- plugins: [
669
- {
670
- id: "openai",
671
- name: "OpenAI",
672
- category: "ai-provider",
673
- enabled: true,
674
- configured: true,
675
- },
676
- ],
677
- }),
678
- status: 200,
679
- statusText: "OK",
680
- });
681
- }
682
- return Promise.resolve({
683
- ok: true,
684
- json: () => Promise.resolve({}),
685
- status: 200,
686
- statusText: "OK",
687
- });
688
- });
689
-
690
- setLocationSearch("?tab=providers");
691
- const tree = await renderSettingsAsync();
692
-
693
- const buttons = findButtons(tree.root);
694
- const testButton = buttons.find((btn) => {
695
- const textNodes = btn.findAll(
696
- (n) =>
697
- typeof n.children?.[0] === "string" &&
698
- n.children[0] === "Test Connection",
699
- );
700
- return textNodes.length > 0;
701
- });
702
-
703
- const resolvedTestButton = expectDefined(
704
- testButton,
705
- "Test Connection button not found",
706
- );
707
-
708
- await act(async () => {
709
- resolvedTestButton.props.onClick();
710
- });
711
-
712
- const errorMessage = findByText(tree.root, /✗/);
713
- expect(errorMessage).not.toBeNull();
714
- });
715
- });
716
-
717
- // ── 4. Advanced Tab ────────────────────────────────────────────────────
718
-
719
- describe("MiladyBarSettings — Advanced tab", () => {
720
- async function renderAdvancedTab(): Promise<TestRenderer.ReactTestRenderer> {
721
- setLocationSearch("?tab=advanced");
722
- return renderSettingsAsync();
723
- }
724
-
725
- it("export config button triggers download", async () => {
726
- // Mock URL.createObjectURL and URL.revokeObjectURL for jsdom
727
- const mockCreateObjectURL = vi.fn().mockReturnValue("blob:test-url");
728
- const mockRevokeObjectURL = vi.fn();
729
- vi.stubGlobal("URL", {
730
- ...URL,
731
- createObjectURL: mockCreateObjectURL,
732
- revokeObjectURL: mockRevokeObjectURL,
733
- });
734
-
735
- const tree = await renderAdvancedTab();
736
- const buttons = findButtons(tree.root);
737
- const exportButton = buttons.find((btn) => {
738
- const textNodes = btn.findAll(
739
- (n) =>
740
- typeof n.children?.[0] === "string" &&
741
- n.children[0] === "Export Config",
742
- );
743
- return textNodes.length > 0;
744
- });
745
- const resolvedExportButton = expectDefined(
746
- exportButton,
747
- "Export Config button not found",
748
- );
749
-
750
- await act(async () => {
751
- resolvedExportButton.props.onClick();
752
- });
753
-
754
- // Should have fetched /api/config
755
- expect(mockFetch).toHaveBeenCalledWith(
756
- expect.stringContaining("/api/config"),
757
- undefined,
758
- );
759
- // Should have created a blob URL for download
760
- expect(mockCreateObjectURL).toHaveBeenCalled();
761
- });
762
-
763
- it("restart agent button calls API", async () => {
764
- const tree = await renderAdvancedTab();
765
- const buttons = findButtons(tree.root);
766
- const restartButton = buttons.find((btn) => {
767
- const textNodes = btn.findAll(
768
- (n) =>
769
- typeof n.children?.[0] === "string" && n.children[0] === "Restart",
770
- );
771
- return textNodes.length > 0;
772
- });
773
- const resolvedRestartButton = expectDefined(
774
- restartButton,
775
- "Restart button not found",
776
- );
777
-
778
- await act(async () => {
779
- resolvedRestartButton.props.onClick();
780
- });
781
-
782
- expect(mockFetch).toHaveBeenCalledWith(
783
- expect.stringContaining("/api/agent/restart"),
784
- expect.objectContaining({ method: "POST" }),
785
- );
786
- expect(mockInvoke).not.toHaveBeenCalledWith(
787
- expect.objectContaining({
788
- rpcMethod: "desktopOpenSettingsWindow",
789
- ipcChannel: "desktop:openSettingsWindow",
790
- }),
791
- );
792
- });
793
-
794
- it("shows exported result message on success", async () => {
795
- // Mock URL APIs for jsdom
796
- const mockCreateObjectURL = vi.fn().mockReturnValue("blob:test-url");
797
- const mockRevokeObjectURL = vi.fn();
798
- vi.stubGlobal("URL", {
799
- ...URL,
800
- createObjectURL: mockCreateObjectURL,
801
- revokeObjectURL: mockRevokeObjectURL,
802
- });
803
-
804
- const tree = await renderAdvancedTab();
805
- const buttons = findButtons(tree.root);
806
- const exportButton = buttons.find((btn) => {
807
- const textNodes = btn.findAll(
808
- (n) =>
809
- typeof n.children?.[0] === "string" &&
810
- n.children[0] === "Export Config",
811
- );
812
- return textNodes.length > 0;
813
- });
814
-
815
- const resolvedExportButton = expectDefined(
816
- exportButton,
817
- "Export Config button not found",
818
- );
819
-
820
- await act(async () => {
821
- resolvedExportButton.props.onClick();
822
- });
823
-
824
- const exported = findByText(tree.root, /Exported/);
825
- expect(exported).not.toBeNull();
826
- });
827
- });
828
-
829
- // ── 5. About Tab ───────────────────────────────────────────────────────
830
-
831
- describe("MiladyBarSettings — About tab", () => {
832
- async function renderAboutTab(): Promise<TestRenderer.ReactTestRenderer> {
833
- setLocationSearch("?tab=about");
834
- return renderSettingsAsync();
835
- }
836
-
837
- it("fetches version info from desktop RPC", async () => {
838
- mockInvoke.mockResolvedValue({
839
- version: "1.2.3",
840
- name: "Milady",
841
- runtime: "Electrobun",
842
- });
843
- await renderAboutTab();
844
- expect(mockInvoke).toHaveBeenCalledWith(
845
- expect.objectContaining({
846
- rpcMethod: "desktopGetVersion",
847
- ipcChannel: "desktop:getVersion",
848
- }),
849
- );
850
- });
851
-
852
- it("displays version info from RPC response", async () => {
853
- mockInvoke.mockResolvedValue({
854
- version: "1.2.3",
855
- name: "Milady",
856
- runtime: "Electrobun",
857
- });
858
- const tree = await renderAboutTab();
859
- const versionText = findByText(tree.root, "Version: 1.2.3");
860
- expect(versionText).not.toBeNull();
861
- });
862
-
863
- it("displays platform info", async () => {
864
- mockInvoke.mockResolvedValue({
865
- version: "1.0.0",
866
- name: "Milady",
867
- runtime: "Electrobun",
868
- });
869
- const tree = await renderAboutTab();
870
- const platformNode = findByText(tree.root, "Platform");
871
- expect(platformNode).not.toBeNull();
872
- });
873
-
874
- it("displays runtime info from RPC response", async () => {
875
- mockInvoke.mockResolvedValue({
876
- version: "1.0.0",
877
- name: "Milady",
878
- runtime: "Electrobun",
879
- });
880
- const tree = await renderAboutTab();
881
- const runtimeText = findByText(tree.root, "Electrobun");
882
- expect(runtimeText).not.toBeNull();
883
- });
884
-
885
- it("shows fallback values when RPC fails", async () => {
886
- mockInvoke.mockRejectedValue(new Error("RPC unavailable"));
887
- const tree = await renderAboutTab();
888
- // Should show fallback name
889
- const nameNode = findByText(tree.root, "Milady");
890
- expect(nameNode).not.toBeNull();
891
- // Should show dash for version
892
- const versionNode = findByText(tree.root, /Version: —/);
893
- expect(versionNode).not.toBeNull();
894
- });
895
- });
896
-
897
- // ── 6. Dark Mode ───────────────────────────────────────────────────────
898
-
899
- describe("MiladyBarSettings — dark mode", () => {
900
- it("uses dark theme when localStorage has 'dark'", async () => {
901
- localStorage.setItem("milady:ui-theme", "dark");
902
- const tree = await renderSettingsAsync();
903
- const root = tree.toJSON() as TestRenderer.ReactTestRendererJSON;
904
- // Dark mode background is #1c1c1e
905
- expect(root.props.style.backgroundColor).toBe("#1c1c1e");
906
- });
907
-
908
- it("uses light theme when localStorage has 'light'", async () => {
909
- localStorage.setItem("milady:ui-theme", "light");
910
- const tree = await renderSettingsAsync();
911
- const root = tree.toJSON() as TestRenderer.ReactTestRendererJSON;
912
- // Light mode background is #f5f5f7
913
- expect(root.props.style.backgroundColor).toBe("#f5f5f7");
914
- });
915
-
916
- it("theme tokens change based on dark mode state", async () => {
917
- // Render in light mode
918
- localStorage.setItem("milady:ui-theme", "light");
919
- const lightTree = await renderSettingsAsync();
920
- const lightRoot = lightTree.toJSON() as TestRenderer.ReactTestRendererJSON;
921
- const lightBg = lightRoot.props.style.backgroundColor;
922
-
923
- lightTree.unmount();
924
-
925
- // Render in dark mode
926
- localStorage.setItem("milady:ui-theme", "dark");
927
- const darkTree = await renderSettingsAsync();
928
- const darkRoot = darkTree.toJSON() as TestRenderer.ReactTestRendererJSON;
929
- const darkBg = darkRoot.props.style.backgroundColor;
930
-
931
- expect(lightBg).not.toBe(darkBg);
932
- expect(lightBg).toBe("#f5f5f7");
933
- expect(darkBg).toBe("#1c1c1e");
934
- });
935
- });
936
-
937
- // ── 7. API Connection ──────────────────────────────────────────────────
938
-
939
- describe("MiladyBarSettings — API helpers", () => {
940
- it("getApiBase reads from window.__MILADY_API_BASE__", async () => {
941
- window.__MILADY_API_BASE__ = "http://custom:9999";
942
- await renderSettingsAsync();
943
- // Fetch should be called with the custom base
944
- const calls = mockFetch.mock.calls as unknown[][];
945
- const hasCustomBase = calls.some((c) =>
946
- (c[0] as string).startsWith("http://custom:9999"),
947
- );
948
- expect(hasCustomBase).toBe(true);
949
- delete window.__MILADY_API_BASE__;
950
- });
951
-
952
- it("getApiBase falls back to localhost:2138", async () => {
953
- // Ensure __MILADY_API_BASE__ is not set
954
- delete window.__MILADY_API_BASE__;
955
- await renderSettingsAsync();
956
- const calls = mockFetch.mock.calls as unknown[][];
957
- const hasDefault = calls.some((c) =>
958
- (c[0] as string).startsWith("http://127.0.0.1:2138"),
959
- );
960
- expect(hasDefault).toBe(true);
961
- });
962
-
963
- it("apiFetch prepends base URL to path", async () => {
964
- delete window.__MILADY_API_BASE__;
965
- await renderSettingsAsync();
966
- // Should have called fetch with full URL
967
- const statusCall = mockFetch.mock.calls.find((c: unknown[]) =>
968
- (c[0] as string).includes("/api/status"),
969
- );
970
- const resolvedStatusCall = expectDefined(
971
- statusCall,
972
- "Status API call not found",
973
- );
974
- expect(resolvedStatusCall[0]).toBe("http://127.0.0.1:2138/api/status");
975
- });
976
-
977
- it("apiFetch throws on non-OK response", async () => {
978
- // Make /api/status return non-OK
979
- mockFetch.mockImplementation((url: string) => {
980
- if (url.includes("/api/status")) {
981
- return Promise.resolve({
982
- ok: false,
983
- status: 503,
984
- statusText: "Service Unavailable",
985
- });
986
- }
987
- return Promise.resolve({
988
- ok: true,
989
- json: () => Promise.resolve({}),
990
- status: 200,
991
- statusText: "OK",
992
- });
993
- });
994
- // The component catches the error internally, but the fetch was attempted
995
- const tree = await renderSettingsAsync();
996
- // Agent status should fall back to default since the API failed
997
- const loading = findByText(tree.root, "Loading...");
998
- // Either shows Loading or Milady (the default name when API fails)
999
- const fallback = findByText(tree.root, "Milady");
1000
- expect(loading !== null || fallback !== null).toBe(true);
1001
- });
1002
- });
1003
-
1004
- // ── 8. Tab navigation edge cases ───────────────────────────────────────
1005
-
1006
- describe("MiladyBarSettings — tab navigation edge cases", () => {
1007
- it("unknown ?tab value defaults to General", () => {
1008
- setLocationSearch("?tab=nonexistent");
1009
- const tree = renderSettings();
1010
- const agentCard = findByText(tree.root, "AGENT");
1011
- expect(agentCard).not.toBeNull();
1012
- });
1013
-
1014
- it("?tab=connectors maps to Providers tab", () => {
1015
- setLocationSearch("?tab=connectors");
1016
- const tree = renderSettings();
1017
- const providersCard = findByText(tree.root, "AI PROVIDERS");
1018
- expect(providersCard).not.toBeNull();
1019
- });
1020
-
1021
- it("no query string defaults to General", () => {
1022
- setLocationSearch("");
1023
- const tree = renderSettings();
1024
- const agentCard = findByText(tree.root, "AGENT");
1025
- expect(agentCard).not.toBeNull();
1026
- });
1027
-
1028
- it("all tabs render correct title", () => {
1029
- const tree = renderSettings();
1030
- const root = tree.root;
1031
-
1032
- const tabNames = ["General", "Providers", "Advanced", "About"];
1033
- for (const name of tabNames) {
1034
- const buttons = findButtons(root);
1035
- const tabBtn = buttons.find((btn) => {
1036
- const texts = btn.findAll(
1037
- (n) => typeof n.children?.[0] === "string" && n.children[0] === name,
1038
- );
1039
- return texts.length > 0;
1040
- });
1041
- const resolvedTabButton = expectDefined(
1042
- tabBtn,
1043
- `Tab button not found: ${name}`,
1044
- );
1045
-
1046
- act(() => {
1047
- resolvedTabButton.props.onClick();
1048
- });
1049
-
1050
- // Title bar should update to the active tab's label
1051
- // Find the title div (first child of root with the tab label)
1052
- const titleNodes = findAllByText(tree.root, name);
1053
- expect(titleNodes.length).toBeGreaterThanOrEqual(1);
1054
- }
1055
- });
1056
- });