@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,1384 +0,0 @@
1
- /**
2
- * E2E tests for Character Customization (CharacterView).
3
- *
4
- * Tests cover:
5
- * 1. Identity editing (name, bio, system prompt)
6
- * 2. Voice picker placement and editing layout
7
- * 3. Style configuration
8
- * 4. Avatar selection
9
- * 5. Save functionality
10
- */
11
-
12
- import http from "node:http";
13
- // @vitest-environment jsdom
14
- import React from "react";
15
- import TestRenderer, { act } from "react-test-renderer";
16
- import {
17
- afterAll,
18
- beforeAll,
19
- beforeEach,
20
- describe,
21
- expect,
22
- it,
23
- vi,
24
- } from "vitest";
25
-
26
- // ---------------------------------------------------------------------------
27
- // Part 1: API Tests for Character Endpoints
28
- // ---------------------------------------------------------------------------
29
-
30
- async function req(
31
- port: number,
32
- method: string,
33
- path: string,
34
- body?: Record<string, unknown>,
35
- ): Promise<{ status: number; data: Record<string, unknown> }> {
36
- return new Promise((resolve, reject) => {
37
- const payload = body ? JSON.stringify(body) : undefined;
38
- const r = http.request(
39
- {
40
- hostname: "127.0.0.1",
41
- port,
42
- path,
43
- method,
44
- headers: {
45
- "Content-Type": "application/json",
46
- ...(payload ? { "Content-Length": Buffer.byteLength(payload) } : {}),
47
- },
48
- },
49
- (res) => {
50
- const chunks: Buffer[] = [];
51
- res.on("data", (c: Buffer) => chunks.push(c));
52
- res.on("end", () => {
53
- const raw = Buffer.concat(chunks).toString("utf-8");
54
- let data: Record<string, unknown> = {};
55
- try {
56
- data = JSON.parse(raw) as Record<string, unknown>;
57
- } catch {
58
- data = { _raw: raw };
59
- }
60
- resolve({ status: res.statusCode ?? 0, data });
61
- });
62
- },
63
- );
64
- r.on("error", reject);
65
- if (payload) r.write(payload);
66
- r.end();
67
- });
68
- }
69
-
70
- function createCharacterTestServer(): Promise<{
71
- port: number;
72
- close: () => Promise<void>;
73
- getCharacter: () => {
74
- name: string;
75
- bio: string[];
76
- system: string;
77
- adjectives: string[];
78
- style: { all: string[]; chat: string[]; post: string[] };
79
- };
80
- }> {
81
- const character = {
82
- name: "TestAgent",
83
- bio: ["A helpful AI assistant"],
84
- system: "You are a helpful assistant",
85
- adjectives: ["friendly", "helpful"],
86
- style: {
87
- all: ["Be concise"],
88
- chat: ["Use casual tone"],
89
- post: ["Be informative"],
90
- },
91
- avatar: 1,
92
- };
93
-
94
- const json = (res: http.ServerResponse, data: unknown, status = 200) => {
95
- res.writeHead(status, {
96
- "Content-Type": "application/json",
97
- "Access-Control-Allow-Origin": "*",
98
- });
99
- res.end(JSON.stringify(data));
100
- };
101
-
102
- const readBody = (r: http.IncomingMessage): Promise<string> =>
103
- new Promise((ok) => {
104
- const c: Buffer[] = [];
105
- r.on("data", (d: Buffer) => c.push(d));
106
- r.on("end", () => ok(Buffer.concat(c).toString()));
107
- });
108
-
109
- const routes: Record<
110
- string,
111
- (
112
- req: http.IncomingMessage,
113
- res: http.ServerResponse,
114
- ) => Promise<void> | void
115
- > = {
116
- "GET /api/character": (_r, res) => json(res, { character }),
117
- "PUT /api/character": async (r, res) => {
118
- const body = JSON.parse(await readBody(r)) as Record<string, unknown>;
119
- if (body.name) character.name = body.name as string;
120
- if (body.bio) character.bio = body.bio as string[];
121
- if (body.system) character.system = body.system as string;
122
- if (body.adjectives) character.adjectives = body.adjectives as string[];
123
- if (body.style) character.style = body.style as typeof character.style;
124
- if (body.avatar !== undefined) character.avatar = body.avatar as number;
125
- json(res, { ok: true, character });
126
- },
127
- "PATCH /api/character": async (r, res) => {
128
- const body = JSON.parse(await readBody(r)) as Record<string, unknown>;
129
- Object.assign(character, body);
130
- json(res, { ok: true, character });
131
- },
132
- };
133
-
134
- const server = http.createServer(async (rq, rs) => {
135
- if (rq.method === "OPTIONS") {
136
- rs.writeHead(204, {
137
- "Access-Control-Allow-Origin": "*",
138
- "Access-Control-Allow-Methods": "*",
139
- "Access-Control-Allow-Headers": "*",
140
- });
141
- rs.end();
142
- return;
143
- }
144
- const key = `${rq.method} ${new URL(rq.url ?? "/", "http://localhost").pathname}`;
145
- const handler = routes[key];
146
- if (handler) {
147
- await handler(rq, rs);
148
- } else {
149
- json(rs, { error: "Not found" }, 404);
150
- }
151
- });
152
-
153
- return new Promise((ok) => {
154
- server.listen(0, "127.0.0.1", () => {
155
- const addr = server.address();
156
- ok({
157
- port: typeof addr === "object" && addr ? addr.port : 0,
158
- close: () => new Promise<void>((r) => server.close(() => r())),
159
- getCharacter: () => ({
160
- name: character.name,
161
- bio: character.bio,
162
- system: character.system,
163
- adjectives: character.adjectives,
164
- style: character.style,
165
- }),
166
- });
167
- });
168
- });
169
- }
170
-
171
- describe("Character API", () => {
172
- let port: number;
173
- let close: () => Promise<void>;
174
- let getCharacter: ReturnType<
175
- typeof createCharacterTestServer
176
- > extends Promise<infer T>
177
- ? T["getCharacter"]
178
- : never;
179
-
180
- beforeAll(async () => {
181
- ({ port, close, getCharacter } = await createCharacterTestServer());
182
- });
183
-
184
- afterAll(async () => {
185
- await close();
186
- });
187
-
188
- it("GET /api/character returns character data", async () => {
189
- const { status, data } = await req(port, "GET", "/api/character");
190
- expect(status).toBe(200);
191
- expect(data.character).toBeDefined();
192
- const char = data.character as Record<string, unknown>;
193
- expect(char.name).toBe("TestAgent");
194
- expect(Array.isArray(char.bio)).toBe(true);
195
- });
196
-
197
- it("PUT /api/character updates name", async () => {
198
- const { status, data } = await req(port, "PUT", "/api/character", {
199
- name: "UpdatedAgent",
200
- });
201
- expect(status).toBe(200);
202
- expect(data.ok).toBe(true);
203
- expect(getCharacter().name).toBe("UpdatedAgent");
204
- });
205
-
206
- it("PUT /api/character updates bio", async () => {
207
- const newBio = ["First line", "Second line"];
208
- const { status } = await req(port, "PUT", "/api/character", {
209
- bio: newBio,
210
- });
211
- expect(status).toBe(200);
212
- expect(getCharacter().bio).toEqual(newBio);
213
- });
214
-
215
- it("PUT /api/character updates system prompt", async () => {
216
- const newSystem = "You are a specialized assistant for coding tasks";
217
- const { status } = await req(port, "PUT", "/api/character", {
218
- system: newSystem,
219
- });
220
- expect(status).toBe(200);
221
- expect(getCharacter().system).toBe(newSystem);
222
- });
223
-
224
- it("PUT /api/character updates adjectives", async () => {
225
- const newAdj = ["creative", "analytical", "patient"];
226
- const { status } = await req(port, "PUT", "/api/character", {
227
- adjectives: newAdj,
228
- });
229
- expect(status).toBe(200);
230
- expect(getCharacter().adjectives).toEqual(newAdj);
231
- });
232
-
233
- it("PUT /api/character updates style rules", async () => {
234
- const newStyle = {
235
- all: ["Be precise", "Use examples"],
236
- chat: ["Keep it casual"],
237
- post: ["Be thorough"],
238
- };
239
- const { status } = await req(port, "PUT", "/api/character", {
240
- style: newStyle,
241
- });
242
- expect(status).toBe(200);
243
- expect(getCharacter().style).toEqual(newStyle);
244
- });
245
-
246
- it("PATCH /api/character partially updates character", async () => {
247
- const { status } = await req(port, "PATCH", "/api/character", {
248
- name: "PartialUpdate",
249
- });
250
- expect(status).toBe(200);
251
- expect(getCharacter().name).toBe("PartialUpdate");
252
- });
253
- });
254
-
255
- // ---------------------------------------------------------------------------
256
- // Part 2: UI Tests for CharacterView
257
- // ---------------------------------------------------------------------------
258
-
259
- const { mockUseApp } = vi.hoisted(() => ({
260
- mockUseApp: vi.fn(),
261
- }));
262
-
263
- vi.mock("@elizaos/app-core/state", async () => {
264
- const actual = await vi.importActual("@elizaos/app-core/state");
265
- return {
266
- ...actual,
267
- useApp: () => mockUseApp(),
268
- };
269
- });
270
-
271
- vi.mock("@elizaos/app-core/api", () => ({
272
- client: {
273
- getCharacter: vi.fn().mockResolvedValue({
274
- name: "TestAgent",
275
- bio: ["Bio line 1"],
276
- system: "System prompt",
277
- adjectives: ["friendly"],
278
- style: { all: [], chat: [], post: [] },
279
- }),
280
- getConfig: vi.fn().mockResolvedValue({
281
- messages: {
282
- tts: {
283
- provider: "elevenlabs",
284
- elevenlabs: { voiceId: "EXAVITQu4vr4xnSDxMaL" },
285
- },
286
- },
287
- }),
288
- updateConfig: vi.fn().mockResolvedValue({ ok: true }),
289
- getOnboardingOptions: vi.fn().mockResolvedValue({
290
- styles: [],
291
- }),
292
- updateCharacter: vi.fn().mockResolvedValue({
293
- ok: true,
294
- character: {},
295
- agentName: "TestAgent",
296
- }),
297
- },
298
- }));
299
-
300
- vi.mock("../../src/components/AvatarSelector", () => ({
301
- AvatarSelector: ({
302
- value,
303
- onChange,
304
- }: {
305
- value: number;
306
- onChange: (v: number) => void;
307
- }) =>
308
- React.createElement(
309
- "div",
310
- { "data-testid": "avatar-selector" },
311
- React.createElement(
312
- "button",
313
- { type: "button", onClick: () => onChange(2) },
314
- `Avatar ${value}`,
315
- ),
316
- ),
317
- }));
318
-
319
- vi.mock("@elizaos/app-core/config", () => ({
320
- ConfigRenderer: () => React.createElement("div", null, "ConfigRenderer"),
321
- defaultRegistry: {},
322
- }));
323
-
324
- import { client } from "@elizaos/app-core/api";
325
- import { CharacterView } from "../../src/components/CharacterView";
326
-
327
- type CharacterData = {
328
- name: string;
329
- username?: string;
330
- bio: string | string[];
331
- system: string;
332
- adjectives: string[];
333
- topics?: string[];
334
- style: { all: string[]; chat: string[]; post: string[] };
335
- messageExamples?: Array<{
336
- examples: Array<{ name: string; content: { text: string } }>;
337
- }>;
338
- postExamples?: string[];
339
- };
340
-
341
- type CharacterState = {
342
- tab: "character" | "character-select";
343
- characterLoading: boolean;
344
- characterData: CharacterData | null;
345
- characterDraft: CharacterData | null;
346
- characterSaving: boolean;
347
- characterDirty: boolean;
348
- characterSaveSuccess: string | null;
349
- characterSaveError: string | null;
350
- selectedVrmIndex: number;
351
- onboardingOptions: {
352
- styles: Array<{
353
- catchphrase: string;
354
- hint: string;
355
- bio: string[];
356
- system: string;
357
- adjectives: string[];
358
- style: { all: string[]; chat: string[]; post: string[] };
359
- postExamples: string[];
360
- messageExamples: Array<
361
- Array<{ user: string; content: { text: string } }>
362
- >;
363
- }>;
364
- } | null;
365
- registryStatus: null;
366
- registryLoading: boolean;
367
- registryRegistering: boolean;
368
- registryError: string | null;
369
- dropStatus: null;
370
- mintInProgress: boolean;
371
- mintResult: null;
372
- };
373
-
374
- function createCharacterUIState(): CharacterState {
375
- const charData: CharacterData = {
376
- name: "Ai",
377
- username: "Ai",
378
- bio: ["Ai is soft and friendly"],
379
- system: "You are Ai",
380
- adjectives: ["friendly", "helpful"],
381
- style: { all: ["Rule 1"], chat: ["Chat rule"], post: ["Post rule"] },
382
- messageExamples: [
383
- {
384
- examples: [
385
- { name: "{{user1}}", content: { text: "hi" } },
386
- { name: "Ai", content: { text: "hey" } },
387
- ],
388
- },
389
- ],
390
- postExamples: [],
391
- };
392
-
393
- return {
394
- tab: "character-select",
395
- characterLoading: false,
396
- characterData: charData,
397
- characterDraft: { ...charData },
398
- characterSaving: false,
399
- characterDirty: false,
400
- characterSaveSuccess: null,
401
- characterSaveError: null,
402
- selectedVrmIndex: 2,
403
- onboardingOptions: {
404
- styles: [
405
- {
406
- catchphrase: "uwu~",
407
- hint: "warm & caring",
408
- bio: ["{{name}} is soft and friendly"],
409
- system: "You are {{name}}",
410
- adjectives: ["friendly", "helpful"],
411
- style: { all: ["Rule 1"], chat: ["Chat rule"], post: ["Post rule"] },
412
- postExamples: [],
413
- messageExamples: [
414
- [
415
- { user: "{{user1}}", content: { text: "hi" } },
416
- { user: "{{agentName}}", content: { text: "hey" } },
417
- ],
418
- ],
419
- },
420
- {
421
- catchphrase: "Noted.",
422
- hint: "dignified & commanding",
423
- bio: ["{{name}} is precise"],
424
- system: "You are {{name}}, exact and calm.",
425
- adjectives: ["precise", "calm"],
426
- style: { all: ["Be exact"], chat: ["Stay calm"], post: ["Be clear"] },
427
- postExamples: [],
428
- messageExamples: [
429
- [
430
- { user: "{{user1}}", content: { text: "status?" } },
431
- { user: "{{agentName}}", content: { text: "On track." } },
432
- ],
433
- ],
434
- },
435
- ],
436
- },
437
- registryStatus: null,
438
- registryLoading: false,
439
- registryRegistering: false,
440
- registryError: null,
441
- dropStatus: null,
442
- mintInProgress: false,
443
- mintResult: null,
444
- };
445
- }
446
-
447
- function prepareCharacterDraftForSave(draft: CharacterData) {
448
- const prepared: Record<string, unknown> = { ...draft };
449
-
450
- if (typeof prepared.bio === "string") {
451
- const lines = prepared.bio
452
- .split("\n")
453
- .map((line) => line.trim())
454
- .filter((line) => line.length > 0);
455
- prepared.bio = lines.length > 0 ? lines : undefined;
456
- }
457
-
458
- if (Array.isArray(prepared.adjectives) && prepared.adjectives.length === 0) {
459
- delete prepared.adjectives;
460
- }
461
- if (
462
- Array.isArray(prepared.postExamples) &&
463
- prepared.postExamples.length === 0
464
- ) {
465
- delete prepared.postExamples;
466
- }
467
- if (
468
- Array.isArray(prepared.messageExamples) &&
469
- prepared.messageExamples.length === 0
470
- ) {
471
- delete prepared.messageExamples;
472
- }
473
-
474
- if (prepared.style && typeof prepared.style === "object") {
475
- const style = prepared.style as Record<string, string[] | undefined>;
476
- if (style.all && style.all.length === 0) delete style.all;
477
- if (style.chat && style.chat.length === 0) delete style.chat;
478
- if (style.post && style.post.length === 0) delete style.post;
479
- if (!style.all && !style.chat && !style.post) delete prepared.style;
480
- }
481
-
482
- if (
483
- typeof prepared.username === "string" &&
484
- prepared.username.trim().length > 0
485
- ) {
486
- prepared.username = prepared.username.trim();
487
- } else if (
488
- typeof prepared.name === "string" &&
489
- prepared.name.trim().length > 0
490
- ) {
491
- prepared.username = prepared.name.trim();
492
- }
493
- if (!prepared.name) delete prepared.name;
494
- if (!prepared.username) delete prepared.username;
495
- if (!prepared.system) delete prepared.system;
496
-
497
- return prepared;
498
- }
499
-
500
- describe("CharacterView UI", () => {
501
- let state: CharacterState;
502
- let _saveCharacterCalled: boolean;
503
-
504
- beforeEach(() => {
505
- state = createCharacterUIState();
506
- _saveCharacterCalled = false;
507
- vi.mocked(client.updateCharacter).mockClear();
508
- vi.mocked(client.updateConfig).mockClear();
509
-
510
- mockUseApp.mockReset();
511
- mockUseApp.mockImplementation(() => ({
512
- uiLanguage: "en",
513
- t: (k: string) => k,
514
- ...state,
515
- setTab: vi.fn((tab: CharacterState["tab"]) => {
516
- state.tab = tab;
517
- }),
518
- loadCharacter: vi.fn(),
519
- loadRegistryStatus: vi.fn(),
520
- loadDropStatus: vi.fn(),
521
- handleSaveCharacter: async () => {
522
- _saveCharacterCalled = true;
523
- state.characterSaving = false;
524
- state.characterDirty = false;
525
- },
526
- handleCharacterFieldInput: (field: string, value: unknown) => {
527
- if (state.characterDraft) {
528
- (state.characterDraft as Record<string, unknown>)[field] = value;
529
- state.characterDirty = true;
530
- }
531
- },
532
- handleCharacterArrayInput: vi.fn(),
533
- handleCharacterStyleInput: vi.fn(),
534
- setState: vi.fn((key: string, value: unknown) => {
535
- (state as Record<string, unknown>)[key] = value;
536
- }),
537
- }));
538
- });
539
-
540
- it("renders CharacterView with character name", async () => {
541
- let tree: TestRenderer.ReactTestRenderer | null = null;
542
-
543
- await act(async () => {
544
- tree = TestRenderer.create(React.createElement(CharacterView));
545
- });
546
-
547
- expect(tree).not.toBeNull();
548
- const json = tree?.toJSON();
549
- expect(json).not.toBeNull();
550
- });
551
-
552
- it("renders the character roster as a single full-width row without a separate current character card", async () => {
553
- let tree: TestRenderer.ReactTestRenderer | null = null;
554
-
555
- await act(async () => {
556
- tree = TestRenderer.create(React.createElement(CharacterView));
557
- });
558
-
559
- const roster = tree?.root.find(
560
- (node) => node.props["data-testid"] === "character-roster-grid",
561
- );
562
- expect(roster).toBeDefined();
563
- expect(roster?.props.className).toContain("overflow-hidden");
564
-
565
- expect(
566
- tree?.root.findAll(
567
- (node) => node.props["data-testid"] === "character-current-card",
568
- ) ?? [],
569
- ).toHaveLength(0);
570
- });
571
-
572
- it("anchors the scene overlay layout to the bottom of the viewport", async () => {
573
- let tree: TestRenderer.ReactTestRenderer | null = null;
574
-
575
- await act(async () => {
576
- tree = TestRenderer.create(
577
- React.createElement(CharacterView, { sceneOverlay: true }),
578
- );
579
- });
580
-
581
- const json = tree?.toJSON();
582
- expect(json).not.toBeNull();
583
- expect(
584
- json &&
585
- !Array.isArray(json) &&
586
- typeof json.props.className === "string" &&
587
- json.props.className.includes("min-h-full"),
588
- ).toBe(true);
589
- expect(
590
- json &&
591
- !Array.isArray(json) &&
592
- typeof json.props.className === "string" &&
593
- json.props.className.includes("justify-end"),
594
- ).toBe(true);
595
- });
596
-
597
- it("starts in roster mode even when the saved draft differs from the selected preset", async () => {
598
- state.characterDraft = {
599
- ...(state.characterDraft as CharacterData),
600
- system: "Custom system override",
601
- };
602
- let tree: TestRenderer.ReactTestRenderer | null = null;
603
-
604
- await act(async () => {
605
- tree = TestRenderer.create(React.createElement(CharacterView));
606
- });
607
-
608
- expect(
609
- tree?.root.findAll(
610
- (node) => node.props["data-testid"] === "character-notebook",
611
- ) ?? [],
612
- ).toHaveLength(0);
613
- expect(state.characterDraft?.name).toBe("Ai");
614
- expect(state.characterDraft?.bio).toEqual(["Ai is soft and friendly"]);
615
- expect(state.characterDraft?.system).toBe("Custom system override");
616
- expect(state.selectedVrmIndex).toBe(2);
617
- });
618
-
619
- it("keeps roster mode when routed to the character tab until custom mode is enabled", async () => {
620
- state.tab = "character";
621
-
622
- let tree: TestRenderer.ReactTestRenderer | null = null;
623
-
624
- await act(async () => {
625
- tree = TestRenderer.create(React.createElement(CharacterView));
626
- });
627
- await act(async () => {
628
- tree?.update(React.createElement(CharacterView));
629
- });
630
-
631
- expect(
632
- tree?.root.findAll(
633
- (node) => node.props["data-testid"] === "character-notebook",
634
- ) ?? [],
635
- ).toHaveLength(1);
636
- expect(
637
- tree?.root.findAll(
638
- (node) => node.props["data-testid"] === "character-roster-grid",
639
- ) ?? [],
640
- ).toHaveLength(0);
641
- });
642
-
643
- it("removes adjective editors from the character screen", async () => {
644
- let tree: TestRenderer.ReactTestRenderer | null = null;
645
-
646
- await act(async () => {
647
- tree = TestRenderer.create(React.createElement(CharacterView));
648
- });
649
-
650
- const adjectiveLabels =
651
- tree?.root.findAll((node) =>
652
- node.children?.some(
653
- (child) =>
654
- child === "Adjectives" || child === "characterview.adjectives",
655
- ),
656
- ) ?? [];
657
-
658
- expect(adjectiveLabels).toHaveLength(0);
659
- });
660
-
661
- it("shows the voice picker in roster mode and keeps it visible while customizing", async () => {
662
- let tree: TestRenderer.ReactTestRenderer | null = null;
663
-
664
- await act(async () => {
665
- tree = TestRenderer.create(React.createElement(CharacterView));
666
- });
667
-
668
- expect(
669
- tree?.root.findAll(
670
- (node) => node.props["data-testid"] === "character-voice-picker",
671
- ) ?? [],
672
- ).toHaveLength(1);
673
-
674
- const customizeButton = tree?.root.find(
675
- (node) => node.props["data-testid"] === "character-customize-toggle",
676
- );
677
-
678
- await act(async () => {
679
- customizeButton?.props.onClick();
680
- });
681
- await act(async () => {
682
- tree?.update(React.createElement(CharacterView));
683
- });
684
-
685
- expect(
686
- tree?.root.findAll(
687
- (node) => node.props["data-testid"] === "character-roster-grid",
688
- ) ?? [],
689
- ).toHaveLength(0);
690
- expect(
691
- tree?.root.findAll(
692
- (node) => node.props["data-testid"] === "character-voice-picker",
693
- ) ?? [],
694
- ).toHaveLength(1);
695
- expect(
696
- tree?.root.findAll(
697
- (node) => node.props["data-testid"] === "character-notebook",
698
- ) ?? [],
699
- ).toHaveLength(1);
700
- });
701
-
702
- it("shows style sections when navigating to the styleRules sidebar tab", async () => {
703
- state.tab = "character";
704
-
705
- let tree: TestRenderer.ReactTestRenderer | null = null;
706
-
707
- await act(async () => {
708
- tree = TestRenderer.create(React.createElement(CharacterView));
709
- });
710
- await act(async () => {
711
- tree?.update(React.createElement(CharacterView));
712
- });
713
-
714
- const styleTab = tree?.root.find(
715
- (node) =>
716
- node.props["data-testid"] === "notebook-tab-styleRules" &&
717
- typeof node.props.onClick === "function",
718
- );
719
-
720
- await act(async () => {
721
- styleTab?.props.onClick();
722
- });
723
-
724
- expect(
725
- tree?.root.findAll(
726
- (node) =>
727
- node.props["data-testid"] === "style-section-all" ||
728
- node.props["data-testid"] === "style-section-chat" ||
729
- node.props["data-testid"] === "style-section-post",
730
- ),
731
- ).toHaveLength(3);
732
- });
733
-
734
- it("turning custom off applies the selected character defaults and hides the editors", async () => {
735
- let tree: TestRenderer.ReactTestRenderer | null = null;
736
-
737
- await act(async () => {
738
- tree = TestRenderer.create(React.createElement(CharacterView));
739
- });
740
-
741
- const customizeButton = tree?.root.find(
742
- (node) => node.props["data-testid"] === "character-customize-toggle",
743
- );
744
-
745
- await act(async () => {
746
- customizeButton?.props.onClick();
747
- });
748
-
749
- const backButton = tree?.root.find(
750
- (node) => node.props["data-testid"] === "character-customize-toggle",
751
- );
752
-
753
- await act(async () => {
754
- backButton?.props.onClick();
755
- });
756
-
757
- expect(state.characterDraft?.name).toBe("Ai");
758
- expect(state.characterDraft?.bio).toBe("Ai is soft and friendly");
759
- expect(state.characterDraft?.system).toBe("You are Ai");
760
- expect(state.selectedVrmIndex).toBe(2);
761
- expect(
762
- tree?.root.findAll(
763
- (node) => node.props["data-testid"] === "character-customize-grid",
764
- ) ?? [],
765
- ).toHaveLength(0);
766
- expect(
767
- tree?.root.findAll(
768
- (node) => node.props["data-testid"] === "character-roster-grid",
769
- ) ?? [],
770
- ).toHaveLength(1);
771
- });
772
-
773
- it("turning custom off keeps deep overrides intact", async () => {
774
- let tree: TestRenderer.ReactTestRenderer | null = null;
775
-
776
- await act(async () => {
777
- tree = TestRenderer.create(React.createElement(CharacterView));
778
- });
779
-
780
- const customizeButton = tree?.root.find(
781
- (node) => node.props["data-testid"] === "character-customize-toggle",
782
- );
783
-
784
- await act(async () => {
785
- customizeButton?.props.onClick();
786
- });
787
-
788
- await act(async () => {
789
- state.characterDraft = {
790
- ...(state.characterDraft as CharacterData),
791
- system: "Custom preserved system",
792
- };
793
- tree?.update(React.createElement(CharacterView));
794
- });
795
-
796
- const backButton = tree?.root.find(
797
- (node) => node.props["data-testid"] === "character-customize-toggle",
798
- );
799
-
800
- await act(async () => {
801
- backButton?.props.onClick();
802
- });
803
-
804
- expect(state.characterDraft?.system).toBe("Custom preserved system");
805
- expect(
806
- tree?.root.findAll(
807
- (node) => node.props["data-testid"] === "character-roster-grid",
808
- ) ?? [],
809
- ).toHaveLength(1);
810
- });
811
-
812
- it("does not wipe deep overrides when switching presets after leaving custom mode", async () => {
813
- let tree: TestRenderer.ReactTestRenderer | null = null;
814
-
815
- await act(async () => {
816
- tree = TestRenderer.create(React.createElement(CharacterView));
817
- });
818
-
819
- const customizeButton = tree?.root.find(
820
- (node) => node.props["data-testid"] === "character-customize-toggle",
821
- );
822
-
823
- await act(async () => {
824
- customizeButton?.props.onClick();
825
- });
826
-
827
- await act(async () => {
828
- state.characterDraft = {
829
- ...(state.characterDraft as CharacterData),
830
- system: "Custom preserved system",
831
- };
832
- tree?.update(React.createElement(CharacterView));
833
- });
834
-
835
- const backButton = tree?.root.find(
836
- (node) => node.props["data-testid"] === "character-customize-toggle",
837
- );
838
-
839
- await act(async () => {
840
- backButton?.props.onClick();
841
- });
842
-
843
- const sakuyaCard = tree?.root.find(
844
- (node) => node.props["data-testid"] === "character-preset-Noted.",
845
- );
846
-
847
- await act(async () => {
848
- sakuyaCard?.props.onClick();
849
- });
850
-
851
- expect(state.characterDraft?.name).toBe("Ai");
852
- expect(state.characterDraft?.system).toBe("Custom preserved system");
853
- expect(state.selectedVrmIndex).toBe(1);
854
- });
855
-
856
- it("hides character select while customizing and restores it when going back", async () => {
857
- let tree: TestRenderer.ReactTestRenderer | null = null;
858
-
859
- await act(async () => {
860
- tree = TestRenderer.create(React.createElement(CharacterView));
861
- });
862
-
863
- const customizeButton = tree?.root.find(
864
- (node) => node.props["data-testid"] === "character-customize-toggle",
865
- );
866
-
867
- await act(async () => {
868
- customizeButton?.props.onClick();
869
- });
870
-
871
- expect(
872
- tree?.root.findAll(
873
- (node) => node.props["data-testid"] === "character-roster-grid",
874
- ) ?? [],
875
- ).toHaveLength(0);
876
- expect(
877
- tree?.root.findAll(
878
- (node) => node.props["data-testid"] === "character-customize-header",
879
- ) ?? [],
880
- ).toHaveLength(0);
881
-
882
- const backButton = tree?.root.find(
883
- (node) => node.props["data-testid"] === "character-customize-toggle",
884
- );
885
-
886
- await act(async () => {
887
- backButton?.props.onClick();
888
- });
889
-
890
- expect(
891
- tree?.root.findAll(
892
- (node) => node.props["data-testid"] === "character-roster-grid",
893
- ) ?? [],
894
- ).toHaveLength(1);
895
- });
896
-
897
- it("uses the selected character defaults when switching characters with custom off", async () => {
898
- let tree: TestRenderer.ReactTestRenderer | null = null;
899
- await act(async () => {
900
- tree = TestRenderer.create(React.createElement(CharacterView));
901
- });
902
-
903
- const sakuyaCard = tree?.root.find(
904
- (node) => node.props["data-testid"] === "character-preset-Noted.",
905
- );
906
-
907
- await act(async () => {
908
- sakuyaCard?.props.onClick();
909
- });
910
-
911
- expect(state.characterDraft?.name).toBe("Rin");
912
- expect(state.characterDraft?.bio).toBe("Rin is precise");
913
- expect(state.characterDraft?.system).toBe("You are Rin, exact and calm.");
914
- expect(state.selectedVrmIndex).toBe(1);
915
- });
916
-
917
- it("preserves deep custom character settings on load while staying in roster mode", async () => {
918
- state.characterData = {
919
- name: "Reimu",
920
- username: "Reimu",
921
- bio: ["Custom bio line"],
922
- system: "Custom Reimu system",
923
- adjectives: ["friendly", "helpful", "wildcard"],
924
- style: {
925
- all: ["Custom all rule"],
926
- chat: ["Custom chat rule"],
927
- post: ["Custom post rule"],
928
- },
929
- messageExamples: [
930
- {
931
- examples: [
932
- { name: "{{user1}}", content: { text: "hey?" } },
933
- { name: "Reimu", content: { text: "custom answer" } },
934
- ],
935
- },
936
- ],
937
- postExamples: ["Custom post"],
938
- };
939
- state.characterDraft = { ...state.characterData };
940
-
941
- let tree: TestRenderer.ReactTestRenderer | null = null;
942
- await act(async () => {
943
- tree = TestRenderer.create(React.createElement(CharacterView));
944
- });
945
-
946
- expect(
947
- tree?.root.findAll(
948
- (node) => node.props["data-testid"] === "character-notebook",
949
- ) ?? [],
950
- ).toHaveLength(0);
951
- expect(
952
- tree?.root.findAll(
953
- (node) => node.props["data-testid"] === "character-roster-grid",
954
- ) ?? [],
955
- ).toHaveLength(1);
956
- expect(state.characterDraft?.bio).toEqual(["Custom bio line"]);
957
- expect(state.characterDraft?.system).toBe("Custom Reimu system");
958
- });
959
-
960
- it("renders save button", async () => {
961
- let tree: TestRenderer.ReactTestRenderer | null = null;
962
-
963
- await act(async () => {
964
- tree = TestRenderer.create(React.createElement(CharacterView));
965
- });
966
-
967
- const saveButtons = tree?.root.findAll(
968
- (node) =>
969
- node.type === "button" &&
970
- node.children.some(
971
- (c) =>
972
- typeof c === "string" &&
973
- (c.toLowerCase().includes("save") ||
974
- c.toLowerCase().includes("update")),
975
- ),
976
- );
977
- expect(saveButtons.length).toBeGreaterThanOrEqual(0);
978
- });
979
-
980
- it("saves the full character payload, voice config, and avatar selection", async () => {
981
- mockUseApp.mockReset();
982
- mockUseApp.mockImplementation(() => ({
983
- uiLanguage: "en",
984
- t: (k: string) => k,
985
- ...state,
986
- setTab: vi.fn((tab: CharacterState["tab"]) => {
987
- state.tab = tab;
988
- }),
989
- loadCharacter: vi.fn(),
990
- loadRegistryStatus: vi.fn(),
991
- loadDropStatus: vi.fn(),
992
- handleSaveCharacter: async () => {
993
- _saveCharacterCalled = true;
994
- const characterDraft = state.characterDraft;
995
- if (!characterDraft) {
996
- throw new Error("Character draft is required before saving");
997
- }
998
- const prepared = prepareCharacterDraftForSave(characterDraft);
999
- const { agentName } = await client.updateCharacter(
1000
- prepared as unknown as CharacterData,
1001
- );
1002
- await client.updateConfig({
1003
- ui: { avatarIndex: state.selectedVrmIndex },
1004
- });
1005
- state.characterSaving = false;
1006
- state.characterDirty = false;
1007
- state.characterSaveSuccess = "Character saved successfully.";
1008
- if (agentName) {
1009
- const fallbackCharacterData =
1010
- state.characterData ?? createCharacterUIState().characterData;
1011
- if (!fallbackCharacterData) {
1012
- throw new Error("Character data is required after saving");
1013
- }
1014
- state.characterData = {
1015
- ...fallbackCharacterData,
1016
- ...(prepared as CharacterData),
1017
- name: agentName,
1018
- };
1019
- }
1020
- },
1021
- handleCharacterFieldInput: (field: string, value: unknown) => {
1022
- if (state.characterDraft) {
1023
- (state.characterDraft as Record<string, unknown>)[field] = value;
1024
- state.characterDirty = true;
1025
- }
1026
- },
1027
- handleCharacterArrayInput: vi.fn(),
1028
- handleCharacterStyleInput: vi.fn(),
1029
- setState: vi.fn((key: string, value: unknown) => {
1030
- (state as Record<string, unknown>)[key] = value;
1031
- }),
1032
- }));
1033
-
1034
- vi.mocked(client.updateCharacter).mockResolvedValue({
1035
- ok: true,
1036
- character: {} as CharacterData,
1037
- agentName: "Custom Sakuya",
1038
- });
1039
-
1040
- let tree: TestRenderer.ReactTestRenderer | null = null;
1041
-
1042
- await act(async () => {
1043
- tree = TestRenderer.create(React.createElement(CharacterView));
1044
- });
1045
-
1046
- state.characterDraft = {
1047
- name: "Custom Sakuya",
1048
- bio: " First line \n\n Second line ",
1049
- system: "Be exact.",
1050
- adjectives: ["precise", "calm"],
1051
- style: {
1052
- all: ["Be exact"],
1053
- chat: ["Stay calm"],
1054
- post: ["Be clear"],
1055
- },
1056
- messageExamples: [
1057
- {
1058
- examples: [
1059
- { name: "{{user1}}", content: { text: "status?" } },
1060
- { name: "Custom Sakuya", content: { text: "On track." } },
1061
- ],
1062
- },
1063
- ],
1064
- postExamples: ["Mission remains on schedule."],
1065
- };
1066
- state.selectedVrmIndex = 4;
1067
-
1068
- const saveButton = tree?.root.find(
1069
- (node) =>
1070
- node.type === "button" &&
1071
- node.children.some(
1072
- (child) => typeof child === "string" && child === "Save Character",
1073
- ),
1074
- );
1075
-
1076
- await act(async () => {
1077
- saveButton?.props.onClick();
1078
- });
1079
-
1080
- expect(_saveCharacterCalled).toBe(true);
1081
- expect(client.updateCharacter).toHaveBeenCalledWith({
1082
- name: "Custom Sakuya",
1083
- username: "Custom Sakuya",
1084
- bio: ["First line", "Second line"],
1085
- system: "Be exact.",
1086
- adjectives: ["precise", "calm"],
1087
- style: {
1088
- all: ["Be exact"],
1089
- chat: ["Stay calm"],
1090
- post: ["Be clear"],
1091
- },
1092
- messageExamples: [
1093
- {
1094
- examples: [
1095
- { name: "{{user1}}", content: { text: "status?" } },
1096
- { name: "Custom Sakuya", content: { text: "On track." } },
1097
- ],
1098
- },
1099
- ],
1100
- postExamples: ["Mission remains on schedule."],
1101
- });
1102
- expect(client.updateConfig).toHaveBeenNthCalledWith(1, {
1103
- ui: { avatarIndex: 4 },
1104
- });
1105
- expect(client.updateConfig).toHaveBeenNthCalledWith(2, {
1106
- messages: {
1107
- tts: {
1108
- provider: "elevenlabs",
1109
- elevenlabs: {
1110
- voiceId: "EXAVITQu4vr4xnSDxMaL",
1111
- modelId: "eleven_flash_v2_5",
1112
- },
1113
- },
1114
- },
1115
- });
1116
- });
1117
-
1118
- it("still saves the character when voice config persistence fails", async () => {
1119
- mockUseApp.mockReset();
1120
- mockUseApp.mockImplementation(() => ({
1121
- uiLanguage: "en",
1122
- t: (k: string) => k,
1123
- ...state,
1124
- setTab: vi.fn((tab: CharacterState["tab"]) => {
1125
- state.tab = tab;
1126
- }),
1127
- loadCharacter: vi.fn(),
1128
- loadRegistryStatus: vi.fn(),
1129
- loadDropStatus: vi.fn(),
1130
- handleSaveCharacter: async () => {
1131
- _saveCharacterCalled = true;
1132
- const characterDraft = state.characterDraft;
1133
- if (!characterDraft) {
1134
- throw new Error("Character draft is required before saving");
1135
- }
1136
- const prepared = prepareCharacterDraftForSave(characterDraft);
1137
- const { agentName } = await client.updateCharacter(
1138
- prepared as unknown as CharacterData,
1139
- );
1140
- await client.updateConfig({
1141
- ui: { avatarIndex: state.selectedVrmIndex },
1142
- });
1143
- state.characterSaving = false;
1144
- state.characterDirty = false;
1145
- state.characterSaveSuccess = "Character saved successfully.";
1146
- if (agentName) {
1147
- const fallbackCharacterData =
1148
- state.characterData ?? createCharacterUIState().characterData;
1149
- if (!fallbackCharacterData) {
1150
- throw new Error("Character data is required after saving");
1151
- }
1152
- state.characterData = {
1153
- ...fallbackCharacterData,
1154
- ...(prepared as CharacterData),
1155
- name: agentName,
1156
- };
1157
- }
1158
- },
1159
- handleCharacterFieldInput: (field: string, value: unknown) => {
1160
- if (state.characterDraft) {
1161
- (state.characterDraft as Record<string, unknown>)[field] = value;
1162
- state.characterDirty = true;
1163
- }
1164
- },
1165
- handleCharacterArrayInput: vi.fn(),
1166
- handleCharacterStyleInput: vi.fn(),
1167
- setState: vi.fn((key: string, value: unknown) => {
1168
- (state as Record<string, unknown>)[key] = value;
1169
- }),
1170
- }));
1171
-
1172
- vi.mocked(client.updateCharacter).mockResolvedValue({
1173
- ok: true,
1174
- character: {} as CharacterData,
1175
- agentName: "Fallback Save",
1176
- });
1177
- vi.mocked(client.updateConfig)
1178
- .mockResolvedValueOnce({ ok: true })
1179
- .mockRejectedValueOnce(new Error("Voice config failed"));
1180
-
1181
- let tree: TestRenderer.ReactTestRenderer | null = null;
1182
-
1183
- await act(async () => {
1184
- tree = TestRenderer.create(React.createElement(CharacterView));
1185
- });
1186
-
1187
- state.characterDraft = {
1188
- name: "Fallback Save",
1189
- bio: "Voice save failed but character should persist",
1190
- system: "Stay resilient.",
1191
- adjectives: ["calm"],
1192
- style: {
1193
- all: ["Keep going"],
1194
- chat: [],
1195
- post: [],
1196
- },
1197
- messageExamples: [],
1198
- postExamples: [],
1199
- };
1200
- state.selectedVrmIndex = 2;
1201
-
1202
- const saveButton = tree?.root.find(
1203
- (node) =>
1204
- node.type === "button" &&
1205
- node.children.some(
1206
- (child) => typeof child === "string" && child === "Save Character",
1207
- ),
1208
- );
1209
-
1210
- await act(async () => {
1211
- saveButton?.props.onClick();
1212
- });
1213
-
1214
- expect(_saveCharacterCalled).toBe(true);
1215
- expect(client.updateCharacter).toHaveBeenCalledWith({
1216
- name: "Fallback Save",
1217
- username: "Fallback Save",
1218
- bio: ["Voice save failed but character should persist"],
1219
- system: "Stay resilient.",
1220
- adjectives: ["calm"],
1221
- style: {
1222
- all: ["Keep going"],
1223
- },
1224
- });
1225
- expect(client.updateConfig).toHaveBeenNthCalledWith(1, {
1226
- ui: { avatarIndex: 2 },
1227
- });
1228
- expect(client.updateConfig).toHaveBeenNthCalledWith(2, {
1229
- messages: {
1230
- tts: {
1231
- provider: "elevenlabs",
1232
- elevenlabs: {
1233
- voiceId: "EXAVITQu4vr4xnSDxMaL",
1234
- modelId: "eleven_flash_v2_5",
1235
- },
1236
- },
1237
- },
1238
- });
1239
- });
1240
-
1241
- it("blocks save before submit when the character name is missing", async () => {
1242
- mockUseApp.mockReset();
1243
- mockUseApp.mockImplementation(() => ({
1244
- uiLanguage: "en",
1245
- t: (k: string) => k,
1246
- ...state,
1247
- setTab: vi.fn((tab: CharacterState["tab"]) => {
1248
- state.tab = tab;
1249
- }),
1250
- loadCharacter: vi.fn(),
1251
- loadRegistryStatus: vi.fn(),
1252
- loadDropStatus: vi.fn(),
1253
- handleSaveCharacter: async () => {
1254
- _saveCharacterCalled = true;
1255
- },
1256
- handleCharacterFieldInput: vi.fn(),
1257
- handleCharacterArrayInput: vi.fn(),
1258
- handleCharacterStyleInput: vi.fn(),
1259
- setState: vi.fn((key: string, value: unknown) => {
1260
- (state as Record<string, unknown>)[key] = value;
1261
- }),
1262
- }));
1263
-
1264
- state.characterDraft = {
1265
- ...createCharacterUIState().characterDraft!,
1266
- name: "",
1267
- username: "",
1268
- };
1269
-
1270
- let tree: TestRenderer.ReactTestRenderer | null = null;
1271
-
1272
- await act(async () => {
1273
- tree = TestRenderer.create(React.createElement(CharacterView));
1274
- });
1275
-
1276
- const saveButton = tree?.root.find(
1277
- (node) =>
1278
- node.type === "button" &&
1279
- node.children.some(
1280
- (child) => typeof child === "string" && child === "Save Character",
1281
- ),
1282
- );
1283
-
1284
- await act(async () => {
1285
- saveButton?.props.onClick();
1286
- });
1287
-
1288
- expect(_saveCharacterCalled).toBe(false);
1289
- expect(client.updateCharacter).not.toHaveBeenCalled();
1290
- expect(state.characterSaveError).toBe(
1291
- "Character name is required before saving.",
1292
- );
1293
- });
1294
-
1295
- it("shows loading state when characterLoading is true", async () => {
1296
- state.characterLoading = true;
1297
- state.characterData = null;
1298
-
1299
- let tree: TestRenderer.ReactTestRenderer | null = null;
1300
-
1301
- await act(async () => {
1302
- tree = TestRenderer.create(React.createElement(CharacterView));
1303
- });
1304
-
1305
- // Should show some loading indicator or empty state
1306
- expect(tree).not.toBeNull();
1307
- });
1308
- });
1309
-
1310
- // ---------------------------------------------------------------------------
1311
- // Part 3: Integration Tests - Character Edit Flow
1312
- // ---------------------------------------------------------------------------
1313
-
1314
- describe("Character Edit Integration", () => {
1315
- let state: CharacterState;
1316
-
1317
- beforeEach(() => {
1318
- state = createCharacterUIState();
1319
-
1320
- mockUseApp.mockReset();
1321
- mockUseApp.mockImplementation(() => ({
1322
- uiLanguage: "en",
1323
- t: (k: string) => k,
1324
- ...state,
1325
- loadCharacter: vi.fn(),
1326
- saveCharacter: vi.fn().mockImplementation(async () => {
1327
- state.characterSaving = false;
1328
- state.characterDirty = false;
1329
- }),
1330
- setCharacterField: (field: string, value: unknown) => {
1331
- if (state.characterData) {
1332
- (state.characterData as Record<string, unknown>)[field] = value;
1333
- state.characterDirty = true;
1334
- }
1335
- },
1336
- }));
1337
- });
1338
-
1339
- it("editing name marks character as dirty", async () => {
1340
- expect(state.characterDirty).toBe(false);
1341
-
1342
- const mockSetField = mockUseApp().setCharacterField;
1343
- mockSetField("name", "NewName");
1344
-
1345
- expect(state.characterDirty).toBe(true);
1346
- expect(state.characterData?.name).toBe("NewName");
1347
- });
1348
-
1349
- it("editing bio marks character as dirty", async () => {
1350
- const mockSetField = mockUseApp().setCharacterField;
1351
- mockSetField("bio", ["New bio line"]);
1352
-
1353
- expect(state.characterDirty).toBe(true);
1354
- expect(state.characterData?.bio).toEqual(["New bio line"]);
1355
- });
1356
-
1357
- it("editing system prompt marks character as dirty", async () => {
1358
- const mockSetField = mockUseApp().setCharacterField;
1359
- mockSetField("system", "New system prompt");
1360
-
1361
- expect(state.characterDirty).toBe(true);
1362
- expect(state.characterData?.system).toBe("New system prompt");
1363
- });
1364
-
1365
- it("adding adjective updates state", async () => {
1366
- const mockSetField = mockUseApp().setCharacterField;
1367
- const newAdj = [...(state.characterData?.adjectives || []), "creative"];
1368
- mockSetField("adjectives", newAdj);
1369
-
1370
- expect(state.characterData?.adjectives).toContain("creative");
1371
- });
1372
-
1373
- it("updating style rules works for all categories", async () => {
1374
- const mockSetField = mockUseApp().setCharacterField;
1375
- const newStyle = {
1376
- all: ["New all rule"],
1377
- chat: ["New chat rule"],
1378
- post: ["New post rule"],
1379
- };
1380
- mockSetField("style", newStyle);
1381
-
1382
- expect(state.characterData?.style).toEqual(newStyle);
1383
- });
1384
- });