@elizaos/app-core 2.0.0-alpha.74 → 2.0.0-alpha.76

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 (1183) hide show
  1. package/App.d.ts.map +1 -0
  2. package/{dist/App.js → App.js} +3 -3
  3. package/{dist/components → components}/AdvancedPageView.d.ts.map +1 -1
  4. package/{dist/components → components}/AdvancedPageView.js +0 -10
  5. package/{dist/components → components}/CharacterView.d.ts.map +1 -1
  6. package/components/CharacterView.js +685 -0
  7. package/{dist/components → components}/ChatComposer.d.ts.map +1 -1
  8. package/{dist/components → components}/ChatComposer.js +4 -4
  9. package/{dist/components → components}/ChatView.d.ts.map +1 -1
  10. package/{dist/components → components}/ChatView.js +15 -0
  11. package/{dist/components → components}/CompanionView.js +1 -1
  12. package/{dist/components → components}/ConfigPageView.js +1 -1
  13. package/{dist/components → components}/ElizaCloudDashboard.js +1 -1
  14. package/{dist/components → components}/FlaminaGuide.js +1 -1
  15. package/{dist/components → components}/OnboardingWizard.d.ts.map +1 -1
  16. package/{dist/components → components}/OnboardingWizard.js +3 -2
  17. package/{dist/components → components}/PluginsView.d.ts.map +1 -1
  18. package/{dist/components → components}/PluginsView.js +1 -5
  19. package/{dist/components → components}/avatar/VrmEngine.d.ts +13 -0
  20. package/{dist/components → components}/avatar/VrmEngine.d.ts.map +1 -1
  21. package/{dist/components → components}/avatar/VrmEngine.js +66 -0
  22. package/{dist/components → components}/avatar/VrmViewer.d.ts +15 -0
  23. package/{dist/components → components}/avatar/VrmViewer.d.ts.map +1 -1
  24. package/{dist/components → components}/avatar/VrmViewer.js +56 -1
  25. package/{src/components/index.ts → components/index.d.ts} +1 -1
  26. package/{dist/components → components}/index.d.ts.map +1 -1
  27. package/{dist/components → components}/index.js +0 -1
  28. package/{dist/components → components}/onboarding/ConnectionStep.d.ts.map +1 -1
  29. package/{dist/components → components}/onboarding/ConnectionStep.js +12 -7
  30. package/{dist/components → components}/permissions/StreamingPermissions.d.ts.map +1 -1
  31. package/{dist/components → components}/permissions/StreamingPermissions.js +1 -1
  32. package/{dist/components → components}/ui-switch.js +4 -4
  33. package/{dist/i18n → i18n}/locales/en.json +45 -1
  34. package/{src/i18n → i18n}/locales/es.json +41 -0
  35. package/{dist/i18n → i18n}/locales/ko.json +41 -0
  36. package/{dist/i18n → i18n}/locales/pt.json +41 -0
  37. package/{dist/i18n → i18n}/locales/zh-CN.json +41 -0
  38. package/package.json +143 -53
  39. package/{dist/state → state}/AppContext.d.ts.map +1 -1
  40. package/{dist/state → state}/AppContext.js +38 -16
  41. package/{dist/styles → styles}/anime.css +1 -4
  42. package/{dist/styles → styles}/onboarding-game.css +125 -9
  43. package/.turbo/turbo-build.log +0 -2
  44. package/.turbo/turbo-lint$colon$check.log +0 -2
  45. package/.turbo/turbo-typecheck.log +0 -1
  46. package/dist/App.d.ts.map +0 -1
  47. package/dist/components/CharacterView.js +0 -719
  48. package/dist/components/MiladyBar.d.ts +0 -2
  49. package/dist/components/MiladyBar.d.ts.map +0 -1
  50. package/dist/components/MiladyBar.js +0 -50
  51. package/dist/components/MiladyBarSettings.d.ts +0 -2
  52. package/dist/components/MiladyBarSettings.d.ts.map +0 -1
  53. package/dist/components/MiladyBarSettings.js +0 -513
  54. package/dist/components/SecurityPageView.d.ts +0 -2
  55. package/dist/components/SecurityPageView.d.ts.map +0 -1
  56. package/dist/components/SecurityPageView.js +0 -81
  57. package/dist/components/index.d.ts +0 -97
  58. package/dist/components/milady-bar/CloudCreditsChip.d.ts +0 -2
  59. package/dist/components/milady-bar/CloudCreditsChip.d.ts.map +0 -1
  60. package/dist/components/milady-bar/CloudCreditsChip.js +0 -25
  61. package/dist/components/milady-bar/ProviderDropdown.d.ts +0 -13
  62. package/dist/components/milady-bar/ProviderDropdown.d.ts.map +0 -1
  63. package/dist/components/milady-bar/ProviderDropdown.js +0 -68
  64. package/dist/components/milady-bar/WalletSummary.d.ts +0 -2
  65. package/dist/components/milady-bar/WalletSummary.d.ts.map +0 -1
  66. package/dist/components/milady-bar/WalletSummary.js +0 -37
  67. package/dist/components/milady-bar/index.d.ts +0 -4
  68. package/dist/components/milady-bar/index.d.ts.map +0 -1
  69. package/dist/components/milady-bar/index.js +0 -3
  70. package/dist/hooks/useMiladyBar.d.ts +0 -2
  71. package/dist/hooks/useMiladyBar.d.ts.map +0 -1
  72. package/dist/hooks/useMiladyBar.js +0 -472
  73. package/dist/i18n/locales/es.json +0 -1195
  74. package/dist/package.json +0 -180
  75. package/src/App.tsx +0 -504
  76. package/src/actions/character.test.ts +0 -139
  77. package/src/actions/character.ts +0 -334
  78. package/src/actions/chat-helpers.ts +0 -100
  79. package/src/actions/cloud.ts +0 -59
  80. package/src/actions/index.ts +0 -12
  81. package/src/actions/lifecycle.ts +0 -175
  82. package/src/actions/onboarding.ts +0 -38
  83. package/src/actions/triggers.ts +0 -190
  84. package/src/ambient.d.ts +0 -33
  85. package/src/api/client.ts +0 -5659
  86. package/src/api/index.ts +0 -1
  87. package/src/autonomy/index.ts +0 -477
  88. package/src/bridge/capacitor-bridge.ts +0 -295
  89. package/src/bridge/electrobun-rpc.ts +0 -78
  90. package/src/bridge/electrobun-runtime.ts +0 -28
  91. package/src/bridge/index.ts +0 -5
  92. package/src/bridge/native-plugins.ts +0 -138
  93. package/src/bridge/plugin-bridge.ts +0 -352
  94. package/src/bridge/storage-bridge.ts +0 -162
  95. package/src/chat/index.ts +0 -250
  96. package/src/coding/index.ts +0 -43
  97. package/src/components/AdvancedPageView.tsx +0 -382
  98. package/src/components/AgentActivityBox.tsx +0 -49
  99. package/src/components/ApiKeyConfig.tsx +0 -222
  100. package/src/components/AppsPageView.tsx +0 -52
  101. package/src/components/AppsView.tsx +0 -293
  102. package/src/components/AvatarLoader.tsx +0 -104
  103. package/src/components/AvatarSelector.tsx +0 -223
  104. package/src/components/BscTradePanel.tsx +0 -549
  105. package/src/components/BugReportModal.tsx +0 -499
  106. package/src/components/CharacterRoster.tsx +0 -143
  107. package/src/components/CharacterView.tsx +0 -1575
  108. package/src/components/ChatAvatar.test.ts +0 -97
  109. package/src/components/ChatAvatar.tsx +0 -147
  110. package/src/components/ChatComposer.tsx +0 -330
  111. package/src/components/ChatMessage.tsx +0 -448
  112. package/src/components/ChatModalView.test.tsx +0 -118
  113. package/src/components/ChatModalView.tsx +0 -125
  114. package/src/components/ChatView.tsx +0 -992
  115. package/src/components/CloudOnboarding.tsx +0 -81
  116. package/src/components/CloudSourceControls.tsx +0 -85
  117. package/src/components/CodingAgentSettingsSection.tsx +0 -537
  118. package/src/components/CommandPalette.tsx +0 -284
  119. package/src/components/CompanionSceneHost.tsx +0 -517
  120. package/src/components/CompanionShell.tsx +0 -31
  121. package/src/components/CompanionView.tsx +0 -110
  122. package/src/components/ConfigPageView.tsx +0 -763
  123. package/src/components/ConfigSaveFooter.tsx +0 -41
  124. package/src/components/ConfirmModal.tsx +0 -379
  125. package/src/components/ConnectionFailedBanner.tsx +0 -91
  126. package/src/components/ConnectorsPageView.tsx +0 -13
  127. package/src/components/ConversationsSidebar.tsx +0 -279
  128. package/src/components/CustomActionEditor.tsx +0 -1127
  129. package/src/components/CustomActionsPanel.tsx +0 -288
  130. package/src/components/CustomActionsView.tsx +0 -325
  131. package/src/components/DatabasePageView.tsx +0 -55
  132. package/src/components/DatabaseView.tsx +0 -814
  133. package/src/components/ElizaCloudDashboard.tsx +0 -1696
  134. package/src/components/EmotePicker.tsx +0 -529
  135. package/src/components/ErrorBoundary.tsx +0 -76
  136. package/src/components/FineTuningView.tsx +0 -1080
  137. package/src/components/FlaminaGuide.test.tsx +0 -61
  138. package/src/components/FlaminaGuide.tsx +0 -212
  139. package/src/components/GameView.tsx +0 -551
  140. package/src/components/GameViewOverlay.tsx +0 -133
  141. package/src/components/GlobalEmoteOverlay.tsx +0 -152
  142. package/src/components/Header.test.tsx +0 -413
  143. package/src/components/Header.tsx +0 -400
  144. package/src/components/HeartbeatsView.tsx +0 -1003
  145. package/src/components/InventoryView.tsx +0 -393
  146. package/src/components/KnowledgeView.tsx +0 -1128
  147. package/src/components/LanguageDropdown.tsx +0 -192
  148. package/src/components/LifoMonitorPanel.tsx +0 -196
  149. package/src/components/LifoSandboxView.tsx +0 -499
  150. package/src/components/LoadingScreen.tsx +0 -112
  151. package/src/components/LogsPageView.tsx +0 -17
  152. package/src/components/LogsView.tsx +0 -239
  153. package/src/components/MediaGalleryView.tsx +0 -431
  154. package/src/components/MediaSettingsSection.tsx +0 -893
  155. package/src/components/MessageContent.tsx +0 -815
  156. package/src/components/MiladyBar.tsx +0 -103
  157. package/src/components/MiladyBarSettings.tsx +0 -872
  158. package/src/components/OnboardingWizard.test.tsx +0 -104
  159. package/src/components/OnboardingWizard.tsx +0 -249
  160. package/src/components/PairingView.tsx +0 -109
  161. package/src/components/PermissionsSection.tsx +0 -1184
  162. package/src/components/PluginsPageView.tsx +0 -9
  163. package/src/components/PluginsView.tsx +0 -3129
  164. package/src/components/ProviderSwitcher.tsx +0 -903
  165. package/src/components/RestartBanner.tsx +0 -76
  166. package/src/components/RuntimeView.tsx +0 -460
  167. package/src/components/SaveCommandModal.tsx +0 -211
  168. package/src/components/SecretsView.tsx +0 -569
  169. package/src/components/SecurityPageView.tsx +0 -242
  170. package/src/components/SettingsView.tsx +0 -825
  171. package/src/components/ShellOverlays.tsx +0 -41
  172. package/src/components/ShortcutsOverlay.tsx +0 -155
  173. package/src/components/SkillsView.tsx +0 -1435
  174. package/src/components/StartupFailureView.tsx +0 -63
  175. package/src/components/StreamView.tsx +0 -481
  176. package/src/components/StripeEmbeddedCheckout.tsx +0 -155
  177. package/src/components/SubscriptionStatus.tsx +0 -640
  178. package/src/components/SystemWarningBanner.tsx +0 -71
  179. package/src/components/ThemeToggle.tsx +0 -103
  180. package/src/components/TrajectoriesView.tsx +0 -526
  181. package/src/components/TrajectoryDetailView.tsx +0 -426
  182. package/src/components/TriggersView.tsx +0 -1
  183. package/src/components/VectorBrowserView.tsx +0 -1633
  184. package/src/components/VoiceConfigView.tsx +0 -674
  185. package/src/components/VrmStage.test.ts +0 -176
  186. package/src/components/VrmStage.tsx +0 -309
  187. package/src/components/WhatsAppQrOverlay.tsx +0 -230
  188. package/src/components/__tests__/chainConfig.test.ts +0 -220
  189. package/src/components/apps/AppDetailPane.tsx +0 -242
  190. package/src/components/apps/AppsCatalogGrid.tsx +0 -137
  191. package/src/components/apps/extensions/registry.ts +0 -13
  192. package/src/components/apps/extensions/types.ts +0 -9
  193. package/src/components/apps/helpers.ts +0 -43
  194. package/src/components/avatar/VrmAnimationLoader.test.ts +0 -164
  195. package/src/components/avatar/VrmAnimationLoader.ts +0 -151
  196. package/src/components/avatar/VrmBlinkController.ts +0 -118
  197. package/src/components/avatar/VrmCameraManager.ts +0 -407
  198. package/src/components/avatar/VrmEngine.ts +0 -2767
  199. package/src/components/avatar/VrmFootShadow.ts +0 -96
  200. package/src/components/avatar/VrmViewer.tsx +0 -421
  201. package/src/components/avatar/__tests__/VrmCameraManager.test.ts +0 -168
  202. package/src/components/avatar/__tests__/VrmEngine.test.ts +0 -1574
  203. package/src/components/avatar/mixamoVRMRigMap.ts +0 -62
  204. package/src/components/avatar/retargetMixamoFbxToVrm.ts +0 -144
  205. package/src/components/avatar/retargetMixamoGltfToVrm.ts +0 -119
  206. package/src/components/chainConfig.ts +0 -400
  207. package/src/components/companion/CompanionHeader.tsx +0 -50
  208. package/src/components/companion/CompanionSceneHost.tsx +0 -5
  209. package/src/components/companion/VrmStage.tsx +0 -2
  210. package/src/components/companion/__tests__/walletUtils.test.ts +0 -742
  211. package/src/components/companion/index.ts +0 -18
  212. package/src/components/companion/walletUtils.ts +0 -290
  213. package/src/components/companion-shell-styles.test.ts +0 -142
  214. package/src/components/companion-shell-styles.ts +0 -270
  215. package/src/components/confirm-delete-control.tsx +0 -69
  216. package/src/components/conversations/ConversationListItem.tsx +0 -185
  217. package/src/components/conversations/conversation-utils.ts +0 -151
  218. package/src/components/format.ts +0 -131
  219. package/src/components/inventory/CopyableAddress.tsx +0 -41
  220. package/src/components/inventory/InventoryToolbar.tsx +0 -142
  221. package/src/components/inventory/NftGrid.tsx +0 -99
  222. package/src/components/inventory/TokenLogo.tsx +0 -71
  223. package/src/components/inventory/TokensTable.tsx +0 -216
  224. package/src/components/inventory/constants.ts +0 -170
  225. package/src/components/inventory/index.ts +0 -29
  226. package/src/components/inventory/media-url.test.ts +0 -38
  227. package/src/components/inventory/media-url.ts +0 -36
  228. package/src/components/inventory/useInventoryData.ts +0 -460
  229. package/src/components/knowledge-upload-image.ts +0 -215
  230. package/src/components/labels.ts +0 -46
  231. package/src/components/milady-bar/CloudCreditsChip.tsx +0 -61
  232. package/src/components/milady-bar/ProviderDropdown.tsx +0 -166
  233. package/src/components/milady-bar/WalletSummary.tsx +0 -61
  234. package/src/components/milady-bar/index.ts +0 -3
  235. package/src/components/onboarding/ActivateStep.tsx +0 -34
  236. package/src/components/onboarding/ConnectionStep.tsx +0 -1590
  237. package/src/components/onboarding/IdentityStep.tsx +0 -251
  238. package/src/components/onboarding/OnboardingPanel.tsx +0 -39
  239. package/src/components/onboarding/OnboardingStepNav.tsx +0 -41
  240. package/src/components/onboarding/PermissionsStep.tsx +0 -20
  241. package/src/components/onboarding/RpcStep.tsx +0 -402
  242. package/src/components/permissions/PermissionIcon.tsx +0 -25
  243. package/src/components/permissions/StreamingPermissions.tsx +0 -413
  244. package/src/components/plugins/showcase-data.ts +0 -481
  245. package/src/components/shared/ShellHeaderControls.tsx +0 -198
  246. package/src/components/shared-companion-scene-context.ts +0 -15
  247. package/src/components/skeletons.tsx +0 -88
  248. package/src/components/stream/ActivityFeed.tsx +0 -113
  249. package/src/components/stream/AvatarPip.tsx +0 -10
  250. package/src/components/stream/ChatContent.tsx +0 -126
  251. package/src/components/stream/ChatTicker.tsx +0 -55
  252. package/src/components/stream/IdleContent.tsx +0 -73
  253. package/src/components/stream/StatusBar.tsx +0 -463
  254. package/src/components/stream/StreamSettings.tsx +0 -506
  255. package/src/components/stream/StreamTerminal.tsx +0 -94
  256. package/src/components/stream/StreamVoiceConfig.tsx +0 -160
  257. package/src/components/stream/helpers.ts +0 -134
  258. package/src/components/stream/overlays/OverlayLayer.tsx +0 -75
  259. package/src/components/stream/overlays/built-in/ActionTickerWidget.tsx +0 -64
  260. package/src/components/stream/overlays/built-in/AlertPopupWidget.tsx +0 -87
  261. package/src/components/stream/overlays/built-in/BrandingWidget.tsx +0 -51
  262. package/src/components/stream/overlays/built-in/CustomHtmlWidget.tsx +0 -105
  263. package/src/components/stream/overlays/built-in/PeonGlassWidget.tsx +0 -265
  264. package/src/components/stream/overlays/built-in/PeonHudWidget.tsx +0 -247
  265. package/src/components/stream/overlays/built-in/PeonSakuraWidget.tsx +0 -278
  266. package/src/components/stream/overlays/built-in/ThoughtBubbleWidget.tsx +0 -77
  267. package/src/components/stream/overlays/built-in/ViewerCountWidget.tsx +0 -46
  268. package/src/components/stream/overlays/built-in/index.ts +0 -13
  269. package/src/components/stream/overlays/registry.ts +0 -22
  270. package/src/components/stream/overlays/types.ts +0 -90
  271. package/src/components/stream/overlays/useOverlayLayout.ts +0 -218
  272. package/src/components/trajectory-format.ts +0 -50
  273. package/src/components/ui-badges.tsx +0 -109
  274. package/src/components/ui-switch.tsx +0 -57
  275. package/src/components/vector-browser-three.ts +0 -29
  276. package/src/config/branding.ts +0 -67
  277. package/src/config/config-catalog.ts +0 -1092
  278. package/src/config/config-field.tsx +0 -1924
  279. package/src/config/config-renderer.tsx +0 -734
  280. package/src/config/index.ts +0 -12
  281. package/src/config/ui-renderer.tsx +0 -1751
  282. package/src/config/ui-spec.ts +0 -256
  283. package/src/events/index.ts +0 -96
  284. package/src/hooks/index.ts +0 -14
  285. package/src/hooks/useBugReport.tsx +0 -43
  286. package/src/hooks/useCanvasWindow.ts +0 -372
  287. package/src/hooks/useChatAvatarVoice.ts +0 -111
  288. package/src/hooks/useClickOutside.ts +0 -31
  289. package/src/hooks/useContextMenu.ts +0 -127
  290. package/src/hooks/useKeyboardShortcuts.ts +0 -86
  291. package/src/hooks/useLifoSync.ts +0 -143
  292. package/src/hooks/useMemoryMonitor.ts +0 -334
  293. package/src/hooks/useMiladyBar.ts +0 -594
  294. package/src/hooks/useRenderGuard.ts +0 -43
  295. package/src/hooks/useRetakeCapture.ts +0 -68
  296. package/src/hooks/useStreamPopoutNavigation.ts +0 -27
  297. package/src/hooks/useTimeout.ts +0 -37
  298. package/src/hooks/useVoiceChat.ts +0 -1442
  299. package/src/hooks/useWhatsAppPairing.ts +0 -123
  300. package/src/i18n/index.ts +0 -76
  301. package/src/i18n/locales/en.json +0 -1195
  302. package/src/i18n/locales/ko.json +0 -1195
  303. package/src/i18n/locales/pt.json +0 -1195
  304. package/src/i18n/locales/zh-CN.json +0 -1195
  305. package/src/i18n/messages.ts +0 -21
  306. package/src/index.ts +0 -6
  307. package/src/navigation/index.ts +0 -286
  308. package/src/navigation.test.ts +0 -189
  309. package/src/onboarding-config.test.ts +0 -104
  310. package/src/onboarding-config.ts +0 -122
  311. package/src/platform/browser-launch.test.ts +0 -94
  312. package/src/platform/browser-launch.ts +0 -149
  313. package/src/platform/index.ts +0 -58
  314. package/src/platform/init.ts +0 -238
  315. package/src/platform/lifo.ts +0 -225
  316. package/src/providers/index.ts +0 -108
  317. package/src/shell-params.test.ts +0 -48
  318. package/src/shell-params.ts +0 -36
  319. package/src/state/AppContext.tsx +0 -6415
  320. package/src/state/index.ts +0 -6
  321. package/src/state/internal.ts +0 -91
  322. package/src/state/onboarding-resume.test.ts +0 -135
  323. package/src/state/onboarding-resume.ts +0 -263
  324. package/src/state/parsers.test.ts +0 -124
  325. package/src/state/parsers.ts +0 -309
  326. package/src/state/persistence.ts +0 -379
  327. package/src/state/shell-routing.ts +0 -39
  328. package/src/state/types.ts +0 -724
  329. package/src/state/ui-preferences.ts +0 -3
  330. package/src/state/useApp.ts +0 -23
  331. package/src/state/vrm.ts +0 -108
  332. package/src/styles/anime.css +0 -6324
  333. package/src/styles/base.css +0 -213
  334. package/src/styles/onboarding-game.css +0 -976
  335. package/src/styles/styles.css +0 -2087
  336. package/src/styles/xterm.css +0 -241
  337. package/src/types/index.ts +0 -715
  338. package/src/types/react-test-renderer.d.ts +0 -45
  339. package/src/utils/asset-url.ts +0 -110
  340. package/src/utils/assistant-text.ts +0 -172
  341. package/src/utils/clipboard.ts +0 -41
  342. package/src/utils/desktop-dialogs.ts +0 -80
  343. package/src/utils/eliza-globals.ts +0 -44
  344. package/src/utils/index.ts +0 -7
  345. package/src/utils/number-parsing.ts +0 -125
  346. package/src/utils/openExternalUrl.ts +0 -20
  347. package/src/utils/spoken-text.ts +0 -65
  348. package/src/utils/streaming-text.ts +0 -120
  349. package/src/voice/index.ts +0 -1
  350. package/src/voice/types.ts +0 -197
  351. package/src/wallet-rpc.ts +0 -176
  352. package/test/app/AppContext.pty-sessions.test.tsx +0 -143
  353. package/test/app/MessageContent.test.tsx +0 -366
  354. package/test/app/PermissionsOnboarding.test.tsx +0 -358
  355. package/test/app/PermissionsSection.test.tsx +0 -575
  356. package/test/app/advanced-trajectory-fine-tuning.e2e.test.ts +0 -396
  357. package/test/app/agent-activity-box.test.tsx +0 -132
  358. package/test/app/agent-transfer-lock.test.ts +0 -279
  359. package/test/app/api-client-electrobun-fallback.test.ts +0 -139
  360. package/test/app/api-client-electron-fallback.test.ts +0 -139
  361. package/test/app/api-client-timeout.test.ts +0 -75
  362. package/test/app/api-client-ws.test.ts +0 -98
  363. package/test/app/api-client.ws-max-reconnect.test.ts +0 -139
  364. package/test/app/api-client.ws-reconnect.test.ts +0 -157
  365. package/test/app/app-context-autonomy-events.test.ts +0 -559
  366. package/test/app/apps-page-view.test.ts +0 -114
  367. package/test/app/apps-view.test.ts +0 -768
  368. package/test/app/autonomous-workflows.e2e.test.ts +0 -765
  369. package/test/app/autonomy-events.test.ts +0 -150
  370. package/test/app/avatar-selector.test.tsx +0 -52
  371. package/test/app/bsc-trade-panel.test.tsx +0 -134
  372. package/test/app/bug-report-modal.test.tsx +0 -353
  373. package/test/app/character-action-bar-visibility.test.ts +0 -70
  374. package/test/app/character-customization.e2e.test.ts +0 -1384
  375. package/test/app/character-save-journey.test.ts +0 -1245
  376. package/test/app/chat-advanced-features.e2e.test.ts +0 -706
  377. package/test/app/chat-composer.test.tsx +0 -181
  378. package/test/app/chat-journey.test.ts +0 -1075
  379. package/test/app/chat-language-header.test.ts +0 -64
  380. package/test/app/chat-message.test.tsx +0 -222
  381. package/test/app/chat-modal-view.test.tsx +0 -191
  382. package/test/app/chat-routine-filter.test.ts +0 -96
  383. package/test/app/chat-send-lock.test.ts +0 -1465
  384. package/test/app/chat-stream-api-client.test.tsx +0 -390
  385. package/test/app/chat-view-game-modal.test.tsx +0 -661
  386. package/test/app/chat-view.test.tsx +0 -877
  387. package/test/app/cloud-api.e2e.test.ts +0 -258
  388. package/test/app/cloud-login-flow.e2e.test.ts +0 -494
  389. package/test/app/cloud-login-lock.test.ts +0 -416
  390. package/test/app/command-palette.test.tsx +0 -184
  391. package/test/app/command-registry.test.ts +0 -75
  392. package/test/app/companion-greeting-wave.test.tsx +0 -431
  393. package/test/app/companion-scene-host.test.tsx +0 -85
  394. package/test/app/companion-stale-conversation.test.tsx +0 -447
  395. package/test/app/companion-view.test.tsx +0 -690
  396. package/test/app/confirm-delete-control.test.ts +0 -79
  397. package/test/app/confirm-modal.test.tsx +0 -219
  398. package/test/app/connection-mode-persistence.test.ts +0 -411
  399. package/test/app/connectors-ui.e2e.test.ts +0 -508
  400. package/test/app/conversations-sidebar-game-modal.test.tsx +0 -265
  401. package/test/app/conversations-sidebar.test.tsx +0 -185
  402. package/test/app/custom-actions-smoke.test.ts +0 -387
  403. package/test/app/custom-avatar-api-client.test.ts +0 -207
  404. package/test/app/desktop-utils.test.ts +0 -145
  405. package/test/app/electrobun-rpc-bridge.test.ts +0 -83
  406. package/test/app/events.test.ts +0 -88
  407. package/test/app/export-import-flows.e2e.test.ts +0 -700
  408. package/test/app/fine-tuning-view.test.ts +0 -471
  409. package/test/app/game-view-auth-session.test.tsx +0 -187
  410. package/test/app/game-view.test.ts +0 -444
  411. package/test/app/global-emote-overlay.test.tsx +0 -106
  412. package/test/app/header-status.test.tsx +0 -149
  413. package/test/app/i18n.test.ts +0 -152
  414. package/test/app/inventory-bsc-view.test.ts +0 -940
  415. package/test/app/knowledge-ui.e2e.test.ts +0 -762
  416. package/test/app/knowledge-upload-helpers.test.ts +0 -124
  417. package/test/app/lifecycle-lock.test.ts +0 -267
  418. package/test/app/lifo-popout-utils.test.ts +0 -208
  419. package/test/app/lifo-safe-endpoint.test.ts +0 -34
  420. package/test/app/loading-screen.test.tsx +0 -45
  421. package/test/app/memory-monitor.test.ts +0 -331
  422. package/test/app/milady-bar-regression.test.tsx +0 -519
  423. package/test/app/milady-bar-settings.test.tsx +0 -1056
  424. package/test/app/milady-bar.test.tsx +0 -583
  425. package/test/app/navigation.test.tsx +0 -22
  426. package/test/app/onboarding-e2e-journey.test.ts +0 -1391
  427. package/test/app/onboarding-finish-lock.test.ts +0 -676
  428. package/test/app/onboarding-language.test.tsx +0 -160
  429. package/test/app/onboarding-steps.test.tsx +0 -376
  430. package/test/app/open-external-url.test.ts +0 -65
  431. package/test/app/pages-navigation-smoke.e2e.test.ts +0 -646
  432. package/test/app/pairing-lock.test.ts +0 -260
  433. package/test/app/pairing-view.test.tsx +0 -74
  434. package/test/app/permissions-section.test.ts +0 -432
  435. package/test/app/plugin-bridge.test.ts +0 -109
  436. package/test/app/plugins-ui.e2e.test.ts +0 -605
  437. package/test/app/plugins-view-game-modal.test.tsx +0 -686
  438. package/test/app/plugins-view-toggle-restart.test.ts +0 -129
  439. package/test/app/provider-dropdown-default.test.tsx +0 -300
  440. package/test/app/restart-banner.test.tsx +0 -205
  441. package/test/app/retake-capture.test.ts +0 -84
  442. package/test/app/sandbox-api-client.test.ts +0 -108
  443. package/test/app/save-command-modal.test.tsx +0 -109
  444. package/test/app/secrets-view.test.tsx +0 -92
  445. package/test/app/settings-control-styles.test.tsx +0 -142
  446. package/test/app/settings-reset.e2e.test.ts +0 -726
  447. package/test/app/settings-sections.e2e.test.ts +0 -614
  448. package/test/app/shared-format.test.ts +0 -44
  449. package/test/app/shared-switch.test.ts +0 -69
  450. package/test/app/shell-mode-switching.e2e.test.ts +0 -841
  451. package/test/app/shell-mode-tab-memory.test.tsx +0 -58
  452. package/test/app/shell-overlays.test.tsx +0 -50
  453. package/test/app/shortcuts-overlay.test.tsx +0 -111
  454. package/test/app/sse-interruption.test.ts +0 -122
  455. package/test/app/startup-asset-missing.e2e.test.ts +0 -126
  456. package/test/app/startup-backend-missing.e2e.test.ts +0 -126
  457. package/test/app/startup-chat.e2e.test.ts +0 -323
  458. package/test/app/startup-conversation-restore.test.tsx +0 -381
  459. package/test/app/startup-failure-view.test.tsx +0 -103
  460. package/test/app/startup-onboarding.e2e.test.ts +0 -712
  461. package/test/app/startup-timeout.test.tsx +0 -80
  462. package/test/app/startup-token-401.e2e.test.ts +0 -103
  463. package/test/app/stream-helpers.test.ts +0 -46
  464. package/test/app/stream-popout-navigation.test.tsx +0 -41
  465. package/test/app/stream-status-bar.test.tsx +0 -89
  466. package/test/app/theme-toggle.test.tsx +0 -40
  467. package/test/app/training-api-client.test.ts +0 -128
  468. package/test/app/trajectories-view.test.tsx +0 -220
  469. package/test/app/triggers-api-client.test.ts +0 -77
  470. package/test/app/triggers-navigation.test.ts +0 -113
  471. package/test/app/triggers-view.e2e.test.ts +0 -675
  472. package/test/app/update-channel-lock.test.ts +0 -259
  473. package/test/app/vector-browser.async-cleanup.test.tsx +0 -367
  474. package/test/app/vector-browser.e2e.test.ts +0 -653
  475. package/test/app/vrm-stage.test.tsx +0 -351
  476. package/test/app/vrm-viewer.test.tsx +0 -298
  477. package/test/app/wallet-api-save-lock.test.ts +0 -299
  478. package/test/app/wallet-hooks.test.ts +0 -405
  479. package/test/app/wallet-ui-flows.e2e.test.ts +0 -556
  480. package/test/avatar/asset-url.test.ts +0 -90
  481. package/test/avatar/avatar-selector.test.ts +0 -173
  482. package/test/avatar/mixamo-vrm-rig-map.test.ts +0 -111
  483. package/test/avatar/voice-chat-streaming-text.test.ts +0 -96
  484. package/test/avatar/voice-chat.test.ts +0 -391
  485. package/test/browser-extension/README.md +0 -138
  486. package/test/browser-extension/test-harness.ts +0 -499
  487. package/test/capacitor-plugins.e2e.test.ts +0 -168
  488. package/test/test-types.ts +0 -5
  489. package/test/ui/command-palette-commands.test.ts +0 -57
  490. package/test/ui/ui-renderer.test.ts +0 -39
  491. package/test/utils/assistant-text.test.ts +0 -68
  492. package/test/utils/eliza-globals.test.ts +0 -59
  493. package/test/utils/package-exports.test.ts +0 -70
  494. package/test/utils/streaming-text.test.ts +0 -89
  495. package/tsconfig.build.json +0 -19
  496. package/tsconfig.json +0 -20
  497. package/tsconfig.typecheck.json +0 -12
  498. /package/{dist/App.d.ts → App.d.ts} +0 -0
  499. /package/{dist/actions → actions}/character.d.ts +0 -0
  500. /package/{dist/actions → actions}/character.d.ts.map +0 -0
  501. /package/{dist/actions → actions}/character.js +0 -0
  502. /package/{dist/actions → actions}/chat-helpers.d.ts +0 -0
  503. /package/{dist/actions → actions}/chat-helpers.d.ts.map +0 -0
  504. /package/{dist/actions → actions}/chat-helpers.js +0 -0
  505. /package/{dist/actions → actions}/cloud.d.ts +0 -0
  506. /package/{dist/actions → actions}/cloud.d.ts.map +0 -0
  507. /package/{dist/actions → actions}/cloud.js +0 -0
  508. /package/{dist/actions → actions}/index.d.ts +0 -0
  509. /package/{dist/actions → actions}/index.d.ts.map +0 -0
  510. /package/{dist/actions → actions}/index.js +0 -0
  511. /package/{dist/actions → actions}/lifecycle.d.ts +0 -0
  512. /package/{dist/actions → actions}/lifecycle.d.ts.map +0 -0
  513. /package/{dist/actions → actions}/lifecycle.js +0 -0
  514. /package/{dist/actions → actions}/onboarding.d.ts +0 -0
  515. /package/{dist/actions → actions}/onboarding.d.ts.map +0 -0
  516. /package/{dist/actions → actions}/onboarding.js +0 -0
  517. /package/{dist/actions → actions}/triggers.d.ts +0 -0
  518. /package/{dist/actions → actions}/triggers.d.ts.map +0 -0
  519. /package/{dist/actions → actions}/triggers.js +0 -0
  520. /package/{dist/api → api}/client.d.ts +0 -0
  521. /package/{dist/api → api}/client.d.ts.map +0 -0
  522. /package/{dist/api → api}/client.js +0 -0
  523. /package/{dist/api → api}/index.d.ts +0 -0
  524. /package/{dist/api → api}/index.d.ts.map +0 -0
  525. /package/{dist/api → api}/index.js +0 -0
  526. /package/{dist/autonomy → autonomy}/index.d.ts +0 -0
  527. /package/{dist/autonomy → autonomy}/index.d.ts.map +0 -0
  528. /package/{dist/autonomy → autonomy}/index.js +0 -0
  529. /package/{dist/bridge → bridge}/capacitor-bridge.d.ts +0 -0
  530. /package/{dist/bridge → bridge}/capacitor-bridge.d.ts.map +0 -0
  531. /package/{dist/bridge → bridge}/capacitor-bridge.js +0 -0
  532. /package/{dist/bridge → bridge}/electrobun-rpc.d.ts +0 -0
  533. /package/{dist/bridge → bridge}/electrobun-rpc.d.ts.map +0 -0
  534. /package/{dist/bridge → bridge}/electrobun-rpc.js +0 -0
  535. /package/{dist/bridge → bridge}/electrobun-runtime.d.ts +0 -0
  536. /package/{dist/bridge → bridge}/electrobun-runtime.d.ts.map +0 -0
  537. /package/{dist/bridge → bridge}/electrobun-runtime.js +0 -0
  538. /package/{dist/bridge → bridge}/index.d.ts +0 -0
  539. /package/{dist/bridge → bridge}/index.d.ts.map +0 -0
  540. /package/{dist/bridge → bridge}/index.js +0 -0
  541. /package/{dist/bridge → bridge}/native-plugins.d.ts +0 -0
  542. /package/{dist/bridge → bridge}/native-plugins.d.ts.map +0 -0
  543. /package/{dist/bridge → bridge}/native-plugins.js +0 -0
  544. /package/{dist/bridge → bridge}/plugin-bridge.d.ts +0 -0
  545. /package/{dist/bridge → bridge}/plugin-bridge.d.ts.map +0 -0
  546. /package/{dist/bridge → bridge}/plugin-bridge.js +0 -0
  547. /package/{dist/bridge → bridge}/storage-bridge.d.ts +0 -0
  548. /package/{dist/bridge → bridge}/storage-bridge.d.ts.map +0 -0
  549. /package/{dist/bridge → bridge}/storage-bridge.js +0 -0
  550. /package/{dist/chat → chat}/index.d.ts +0 -0
  551. /package/{dist/chat → chat}/index.d.ts.map +0 -0
  552. /package/{dist/chat → chat}/index.js +0 -0
  553. /package/{dist/coding → coding}/index.d.ts +0 -0
  554. /package/{dist/coding → coding}/index.d.ts.map +0 -0
  555. /package/{dist/coding → coding}/index.js +0 -0
  556. /package/{dist/components → components}/AdvancedPageView.d.ts +0 -0
  557. /package/{dist/components → components}/AgentActivityBox.d.ts +0 -0
  558. /package/{dist/components → components}/AgentActivityBox.d.ts.map +0 -0
  559. /package/{dist/components → components}/AgentActivityBox.js +0 -0
  560. /package/{dist/components → components}/ApiKeyConfig.d.ts +0 -0
  561. /package/{dist/components → components}/ApiKeyConfig.d.ts.map +0 -0
  562. /package/{dist/components → components}/ApiKeyConfig.js +0 -0
  563. /package/{dist/components → components}/AppsPageView.d.ts +0 -0
  564. /package/{dist/components → components}/AppsPageView.d.ts.map +0 -0
  565. /package/{dist/components → components}/AppsPageView.js +0 -0
  566. /package/{dist/components → components}/AppsView.d.ts +0 -0
  567. /package/{dist/components → components}/AppsView.d.ts.map +0 -0
  568. /package/{dist/components → components}/AppsView.js +0 -0
  569. /package/{dist/components → components}/AvatarLoader.d.ts +0 -0
  570. /package/{dist/components → components}/AvatarLoader.d.ts.map +0 -0
  571. /package/{dist/components → components}/AvatarLoader.js +0 -0
  572. /package/{dist/components → components}/AvatarSelector.d.ts +0 -0
  573. /package/{dist/components → components}/AvatarSelector.d.ts.map +0 -0
  574. /package/{dist/components → components}/AvatarSelector.js +0 -0
  575. /package/{dist/components → components}/BscTradePanel.d.ts +0 -0
  576. /package/{dist/components → components}/BscTradePanel.d.ts.map +0 -0
  577. /package/{dist/components → components}/BscTradePanel.js +0 -0
  578. /package/{dist/components → components}/BugReportModal.d.ts +0 -0
  579. /package/{dist/components → components}/BugReportModal.d.ts.map +0 -0
  580. /package/{dist/components → components}/BugReportModal.js +0 -0
  581. /package/{dist/components → components}/CharacterRoster.d.ts +0 -0
  582. /package/{dist/components → components}/CharacterRoster.d.ts.map +0 -0
  583. /package/{dist/components → components}/CharacterRoster.js +0 -0
  584. /package/{dist/components → components}/CharacterView.d.ts +0 -0
  585. /package/{dist/components → components}/ChatAvatar.d.ts +0 -0
  586. /package/{dist/components → components}/ChatAvatar.d.ts.map +0 -0
  587. /package/{dist/components → components}/ChatAvatar.js +0 -0
  588. /package/{dist/components → components}/ChatComposer.d.ts +0 -0
  589. /package/{dist/components → components}/ChatMessage.d.ts +0 -0
  590. /package/{dist/components → components}/ChatMessage.d.ts.map +0 -0
  591. /package/{dist/components → components}/ChatMessage.js +0 -0
  592. /package/{dist/components → components}/ChatModalView.d.ts +0 -0
  593. /package/{dist/components → components}/ChatModalView.d.ts.map +0 -0
  594. /package/{dist/components → components}/ChatModalView.js +0 -0
  595. /package/{dist/components → components}/ChatView.d.ts +0 -0
  596. /package/{dist/components → components}/CloudOnboarding.d.ts +0 -0
  597. /package/{dist/components → components}/CloudOnboarding.d.ts.map +0 -0
  598. /package/{dist/components → components}/CloudOnboarding.js +0 -0
  599. /package/{dist/components → components}/CloudSourceControls.d.ts +0 -0
  600. /package/{dist/components → components}/CloudSourceControls.d.ts.map +0 -0
  601. /package/{dist/components → components}/CloudSourceControls.js +0 -0
  602. /package/{dist/components → components}/CodingAgentSettingsSection.d.ts +0 -0
  603. /package/{dist/components → components}/CodingAgentSettingsSection.d.ts.map +0 -0
  604. /package/{dist/components → components}/CodingAgentSettingsSection.js +0 -0
  605. /package/{dist/components → components}/CommandPalette.d.ts +0 -0
  606. /package/{dist/components → components}/CommandPalette.d.ts.map +0 -0
  607. /package/{dist/components → components}/CommandPalette.js +0 -0
  608. /package/{dist/components → components}/CompanionSceneHost.d.ts +0 -0
  609. /package/{dist/components → components}/CompanionSceneHost.d.ts.map +0 -0
  610. /package/{dist/components → components}/CompanionSceneHost.js +0 -0
  611. /package/{dist/components → components}/CompanionShell.d.ts +0 -0
  612. /package/{dist/components → components}/CompanionShell.d.ts.map +0 -0
  613. /package/{dist/components → components}/CompanionShell.js +0 -0
  614. /package/{dist/components → components}/CompanionView.d.ts +0 -0
  615. /package/{dist/components → components}/CompanionView.d.ts.map +0 -0
  616. /package/{dist/components → components}/ConfigPageView.d.ts +0 -0
  617. /package/{dist/components → components}/ConfigPageView.d.ts.map +0 -0
  618. /package/{dist/components → components}/ConfigSaveFooter.d.ts +0 -0
  619. /package/{dist/components → components}/ConfigSaveFooter.d.ts.map +0 -0
  620. /package/{dist/components → components}/ConfigSaveFooter.js +0 -0
  621. /package/{dist/components → components}/ConfirmModal.d.ts +0 -0
  622. /package/{dist/components → components}/ConfirmModal.d.ts.map +0 -0
  623. /package/{dist/components → components}/ConfirmModal.js +0 -0
  624. /package/{dist/components → components}/ConnectionFailedBanner.d.ts +0 -0
  625. /package/{dist/components → components}/ConnectionFailedBanner.d.ts.map +0 -0
  626. /package/{dist/components → components}/ConnectionFailedBanner.js +0 -0
  627. /package/{dist/components → components}/ConnectorsPageView.d.ts +0 -0
  628. /package/{dist/components → components}/ConnectorsPageView.d.ts.map +0 -0
  629. /package/{dist/components → components}/ConnectorsPageView.js +0 -0
  630. /package/{dist/components → components}/ConversationsSidebar.d.ts +0 -0
  631. /package/{dist/components → components}/ConversationsSidebar.d.ts.map +0 -0
  632. /package/{dist/components → components}/ConversationsSidebar.js +0 -0
  633. /package/{dist/components → components}/CustomActionEditor.d.ts +0 -0
  634. /package/{dist/components → components}/CustomActionEditor.d.ts.map +0 -0
  635. /package/{dist/components → components}/CustomActionEditor.js +0 -0
  636. /package/{dist/components → components}/CustomActionsPanel.d.ts +0 -0
  637. /package/{dist/components → components}/CustomActionsPanel.d.ts.map +0 -0
  638. /package/{dist/components → components}/CustomActionsPanel.js +0 -0
  639. /package/{dist/components → components}/CustomActionsView.d.ts +0 -0
  640. /package/{dist/components → components}/CustomActionsView.d.ts.map +0 -0
  641. /package/{dist/components → components}/CustomActionsView.js +0 -0
  642. /package/{dist/components → components}/DatabasePageView.d.ts +0 -0
  643. /package/{dist/components → components}/DatabasePageView.d.ts.map +0 -0
  644. /package/{dist/components → components}/DatabasePageView.js +0 -0
  645. /package/{dist/components → components}/DatabaseView.d.ts +0 -0
  646. /package/{dist/components → components}/DatabaseView.d.ts.map +0 -0
  647. /package/{dist/components → components}/DatabaseView.js +0 -0
  648. /package/{dist/components → components}/ElizaCloudDashboard.d.ts +0 -0
  649. /package/{dist/components → components}/ElizaCloudDashboard.d.ts.map +0 -0
  650. /package/{dist/components → components}/EmotePicker.d.ts +0 -0
  651. /package/{dist/components → components}/EmotePicker.d.ts.map +0 -0
  652. /package/{dist/components → components}/EmotePicker.js +0 -0
  653. /package/{dist/components → components}/ErrorBoundary.d.ts +0 -0
  654. /package/{dist/components → components}/ErrorBoundary.d.ts.map +0 -0
  655. /package/{dist/components → components}/ErrorBoundary.js +0 -0
  656. /package/{dist/components → components}/FineTuningView.d.ts +0 -0
  657. /package/{dist/components → components}/FineTuningView.d.ts.map +0 -0
  658. /package/{dist/components → components}/FineTuningView.js +0 -0
  659. /package/{dist/components → components}/FlaminaGuide.d.ts +0 -0
  660. /package/{dist/components → components}/FlaminaGuide.d.ts.map +0 -0
  661. /package/{dist/components → components}/GameView.d.ts +0 -0
  662. /package/{dist/components → components}/GameView.d.ts.map +0 -0
  663. /package/{dist/components → components}/GameView.js +0 -0
  664. /package/{dist/components → components}/GameViewOverlay.d.ts +0 -0
  665. /package/{dist/components → components}/GameViewOverlay.d.ts.map +0 -0
  666. /package/{dist/components → components}/GameViewOverlay.js +0 -0
  667. /package/{dist/components → components}/GlobalEmoteOverlay.d.ts +0 -0
  668. /package/{dist/components → components}/GlobalEmoteOverlay.d.ts.map +0 -0
  669. /package/{dist/components → components}/GlobalEmoteOverlay.js +0 -0
  670. /package/{dist/components → components}/Header.d.ts +0 -0
  671. /package/{dist/components → components}/Header.d.ts.map +0 -0
  672. /package/{dist/components → components}/Header.js +0 -0
  673. /package/{dist/components → components}/HeartbeatsView.d.ts +0 -0
  674. /package/{dist/components → components}/HeartbeatsView.d.ts.map +0 -0
  675. /package/{dist/components → components}/HeartbeatsView.js +0 -0
  676. /package/{dist/components → components}/InventoryView.d.ts +0 -0
  677. /package/{dist/components → components}/InventoryView.d.ts.map +0 -0
  678. /package/{dist/components → components}/InventoryView.js +0 -0
  679. /package/{dist/components → components}/KnowledgeView.d.ts +0 -0
  680. /package/{dist/components → components}/KnowledgeView.d.ts.map +0 -0
  681. /package/{dist/components → components}/KnowledgeView.js +0 -0
  682. /package/{dist/components → components}/LanguageDropdown.d.ts +0 -0
  683. /package/{dist/components → components}/LanguageDropdown.d.ts.map +0 -0
  684. /package/{dist/components → components}/LanguageDropdown.js +0 -0
  685. /package/{dist/components → components}/LifoMonitorPanel.d.ts +0 -0
  686. /package/{dist/components → components}/LifoMonitorPanel.d.ts.map +0 -0
  687. /package/{dist/components → components}/LifoMonitorPanel.js +0 -0
  688. /package/{dist/components → components}/LifoSandboxView.d.ts +0 -0
  689. /package/{dist/components → components}/LifoSandboxView.d.ts.map +0 -0
  690. /package/{dist/components → components}/LifoSandboxView.js +0 -0
  691. /package/{dist/components → components}/LoadingScreen.d.ts +0 -0
  692. /package/{dist/components → components}/LoadingScreen.d.ts.map +0 -0
  693. /package/{dist/components → components}/LoadingScreen.js +0 -0
  694. /package/{dist/components → components}/LogsPageView.d.ts +0 -0
  695. /package/{dist/components → components}/LogsPageView.d.ts.map +0 -0
  696. /package/{dist/components → components}/LogsPageView.js +0 -0
  697. /package/{dist/components → components}/LogsView.d.ts +0 -0
  698. /package/{dist/components → components}/LogsView.d.ts.map +0 -0
  699. /package/{dist/components → components}/LogsView.js +0 -0
  700. /package/{dist/components → components}/MediaGalleryView.d.ts +0 -0
  701. /package/{dist/components → components}/MediaGalleryView.d.ts.map +0 -0
  702. /package/{dist/components → components}/MediaGalleryView.js +0 -0
  703. /package/{dist/components → components}/MediaSettingsSection.d.ts +0 -0
  704. /package/{dist/components → components}/MediaSettingsSection.d.ts.map +0 -0
  705. /package/{dist/components → components}/MediaSettingsSection.js +0 -0
  706. /package/{dist/components → components}/MessageContent.d.ts +0 -0
  707. /package/{dist/components → components}/MessageContent.d.ts.map +0 -0
  708. /package/{dist/components → components}/MessageContent.js +0 -0
  709. /package/{dist/components → components}/OnboardingWizard.d.ts +0 -0
  710. /package/{dist/components → components}/PairingView.d.ts +0 -0
  711. /package/{dist/components → components}/PairingView.d.ts.map +0 -0
  712. /package/{dist/components → components}/PairingView.js +0 -0
  713. /package/{dist/components → components}/PermissionsSection.d.ts +0 -0
  714. /package/{dist/components → components}/PermissionsSection.d.ts.map +0 -0
  715. /package/{dist/components → components}/PermissionsSection.js +0 -0
  716. /package/{dist/components → components}/PluginsPageView.d.ts +0 -0
  717. /package/{dist/components → components}/PluginsPageView.d.ts.map +0 -0
  718. /package/{dist/components → components}/PluginsPageView.js +0 -0
  719. /package/{dist/components → components}/PluginsView.d.ts +0 -0
  720. /package/{dist/components → components}/ProviderSwitcher.d.ts +0 -0
  721. /package/{dist/components → components}/ProviderSwitcher.d.ts.map +0 -0
  722. /package/{dist/components → components}/ProviderSwitcher.js +0 -0
  723. /package/{dist/components → components}/RestartBanner.d.ts +0 -0
  724. /package/{dist/components → components}/RestartBanner.d.ts.map +0 -0
  725. /package/{dist/components → components}/RestartBanner.js +0 -0
  726. /package/{dist/components → components}/RuntimeView.d.ts +0 -0
  727. /package/{dist/components → components}/RuntimeView.d.ts.map +0 -0
  728. /package/{dist/components → components}/RuntimeView.js +0 -0
  729. /package/{dist/components → components}/SaveCommandModal.d.ts +0 -0
  730. /package/{dist/components → components}/SaveCommandModal.d.ts.map +0 -0
  731. /package/{dist/components → components}/SaveCommandModal.js +0 -0
  732. /package/{dist/components → components}/SecretsView.d.ts +0 -0
  733. /package/{dist/components → components}/SecretsView.d.ts.map +0 -0
  734. /package/{dist/components → components}/SecretsView.js +0 -0
  735. /package/{dist/components → components}/SettingsView.d.ts +0 -0
  736. /package/{dist/components → components}/SettingsView.d.ts.map +0 -0
  737. /package/{dist/components → components}/SettingsView.js +0 -0
  738. /package/{dist/components → components}/ShellOverlays.d.ts +0 -0
  739. /package/{dist/components → components}/ShellOverlays.d.ts.map +0 -0
  740. /package/{dist/components → components}/ShellOverlays.js +0 -0
  741. /package/{dist/components → components}/ShortcutsOverlay.d.ts +0 -0
  742. /package/{dist/components → components}/ShortcutsOverlay.d.ts.map +0 -0
  743. /package/{dist/components → components}/ShortcutsOverlay.js +0 -0
  744. /package/{dist/components → components}/SkillsView.d.ts +0 -0
  745. /package/{dist/components → components}/SkillsView.d.ts.map +0 -0
  746. /package/{dist/components → components}/SkillsView.js +0 -0
  747. /package/{dist/components → components}/StartupFailureView.d.ts +0 -0
  748. /package/{dist/components → components}/StartupFailureView.d.ts.map +0 -0
  749. /package/{dist/components → components}/StartupFailureView.js +0 -0
  750. /package/{dist/components → components}/StreamView.d.ts +0 -0
  751. /package/{dist/components → components}/StreamView.d.ts.map +0 -0
  752. /package/{dist/components → components}/StreamView.js +0 -0
  753. /package/{dist/components → components}/StripeEmbeddedCheckout.d.ts +0 -0
  754. /package/{dist/components → components}/StripeEmbeddedCheckout.d.ts.map +0 -0
  755. /package/{dist/components → components}/StripeEmbeddedCheckout.js +0 -0
  756. /package/{dist/components → components}/SubscriptionStatus.d.ts +0 -0
  757. /package/{dist/components → components}/SubscriptionStatus.d.ts.map +0 -0
  758. /package/{dist/components → components}/SubscriptionStatus.js +0 -0
  759. /package/{dist/components → components}/SystemWarningBanner.d.ts +0 -0
  760. /package/{dist/components → components}/SystemWarningBanner.d.ts.map +0 -0
  761. /package/{dist/components → components}/SystemWarningBanner.js +0 -0
  762. /package/{dist/components → components}/ThemeToggle.d.ts +0 -0
  763. /package/{dist/components → components}/ThemeToggle.d.ts.map +0 -0
  764. /package/{dist/components → components}/ThemeToggle.js +0 -0
  765. /package/{dist/components → components}/TrajectoriesView.d.ts +0 -0
  766. /package/{dist/components → components}/TrajectoriesView.d.ts.map +0 -0
  767. /package/{dist/components → components}/TrajectoriesView.js +0 -0
  768. /package/{dist/components → components}/TrajectoryDetailView.d.ts +0 -0
  769. /package/{dist/components → components}/TrajectoryDetailView.d.ts.map +0 -0
  770. /package/{dist/components → components}/TrajectoryDetailView.js +0 -0
  771. /package/{dist/components → components}/TriggersView.d.ts +0 -0
  772. /package/{dist/components → components}/TriggersView.d.ts.map +0 -0
  773. /package/{dist/components → components}/TriggersView.js +0 -0
  774. /package/{dist/components → components}/VectorBrowserView.d.ts +0 -0
  775. /package/{dist/components → components}/VectorBrowserView.d.ts.map +0 -0
  776. /package/{dist/components → components}/VectorBrowserView.js +0 -0
  777. /package/{dist/components → components}/VoiceConfigView.d.ts +0 -0
  778. /package/{dist/components → components}/VoiceConfigView.d.ts.map +0 -0
  779. /package/{dist/components → components}/VoiceConfigView.js +0 -0
  780. /package/{dist/components → components}/VrmStage.d.ts +0 -0
  781. /package/{dist/components → components}/VrmStage.d.ts.map +0 -0
  782. /package/{dist/components → components}/VrmStage.js +0 -0
  783. /package/{dist/components → components}/WhatsAppQrOverlay.d.ts +0 -0
  784. /package/{dist/components → components}/WhatsAppQrOverlay.d.ts.map +0 -0
  785. /package/{dist/components → components}/WhatsAppQrOverlay.js +0 -0
  786. /package/{dist/components → components}/apps/AppDetailPane.d.ts +0 -0
  787. /package/{dist/components → components}/apps/AppDetailPane.d.ts.map +0 -0
  788. /package/{dist/components → components}/apps/AppDetailPane.js +0 -0
  789. /package/{dist/components → components}/apps/AppsCatalogGrid.d.ts +0 -0
  790. /package/{dist/components → components}/apps/AppsCatalogGrid.d.ts.map +0 -0
  791. /package/{dist/components → components}/apps/AppsCatalogGrid.js +0 -0
  792. /package/{dist/components → components}/apps/extensions/registry.d.ts +0 -0
  793. /package/{dist/components → components}/apps/extensions/registry.d.ts.map +0 -0
  794. /package/{dist/components → components}/apps/extensions/registry.js +0 -0
  795. /package/{dist/components → components}/apps/extensions/types.d.ts +0 -0
  796. /package/{dist/components → components}/apps/extensions/types.d.ts.map +0 -0
  797. /package/{dist/components → components}/apps/extensions/types.js +0 -0
  798. /package/{dist/components → components}/apps/helpers.d.ts +0 -0
  799. /package/{dist/components → components}/apps/helpers.d.ts.map +0 -0
  800. /package/{dist/components → components}/apps/helpers.js +0 -0
  801. /package/{dist/components → components}/avatar/VrmAnimationLoader.d.ts +0 -0
  802. /package/{dist/components → components}/avatar/VrmAnimationLoader.d.ts.map +0 -0
  803. /package/{dist/components → components}/avatar/VrmAnimationLoader.js +0 -0
  804. /package/{dist/components → components}/avatar/VrmBlinkController.d.ts +0 -0
  805. /package/{dist/components → components}/avatar/VrmBlinkController.d.ts.map +0 -0
  806. /package/{dist/components → components}/avatar/VrmBlinkController.js +0 -0
  807. /package/{dist/components → components}/avatar/VrmCameraManager.d.ts +0 -0
  808. /package/{dist/components → components}/avatar/VrmCameraManager.d.ts.map +0 -0
  809. /package/{dist/components → components}/avatar/VrmCameraManager.js +0 -0
  810. /package/{dist/components → components}/avatar/VrmFootShadow.d.ts +0 -0
  811. /package/{dist/components → components}/avatar/VrmFootShadow.d.ts.map +0 -0
  812. /package/{dist/components → components}/avatar/VrmFootShadow.js +0 -0
  813. /package/{dist/components → components}/avatar/mixamoVRMRigMap.d.ts +0 -0
  814. /package/{dist/components → components}/avatar/mixamoVRMRigMap.d.ts.map +0 -0
  815. /package/{dist/components → components}/avatar/mixamoVRMRigMap.js +0 -0
  816. /package/{dist/components → components}/avatar/retargetMixamoFbxToVrm.d.ts +0 -0
  817. /package/{dist/components → components}/avatar/retargetMixamoFbxToVrm.d.ts.map +0 -0
  818. /package/{dist/components → components}/avatar/retargetMixamoFbxToVrm.js +0 -0
  819. /package/{dist/components → components}/avatar/retargetMixamoGltfToVrm.d.ts +0 -0
  820. /package/{dist/components → components}/avatar/retargetMixamoGltfToVrm.d.ts.map +0 -0
  821. /package/{dist/components → components}/avatar/retargetMixamoGltfToVrm.js +0 -0
  822. /package/{dist/components → components}/chainConfig.d.ts +0 -0
  823. /package/{dist/components → components}/chainConfig.d.ts.map +0 -0
  824. /package/{dist/components → components}/chainConfig.js +0 -0
  825. /package/{dist/components → components}/companion/CompanionHeader.d.ts +0 -0
  826. /package/{dist/components → components}/companion/CompanionHeader.d.ts.map +0 -0
  827. /package/{dist/components → components}/companion/CompanionHeader.js +0 -0
  828. /package/{dist/components → components}/companion/CompanionSceneHost.d.ts +0 -0
  829. /package/{dist/components → components}/companion/CompanionSceneHost.d.ts.map +0 -0
  830. /package/{dist/components → components}/companion/CompanionSceneHost.js +0 -0
  831. /package/{dist/components → components}/companion/VrmStage.d.ts +0 -0
  832. /package/{dist/components → components}/companion/VrmStage.d.ts.map +0 -0
  833. /package/{dist/components → components}/companion/VrmStage.js +0 -0
  834. /package/{dist/components → components}/companion/index.d.ts +0 -0
  835. /package/{dist/components → components}/companion/index.d.ts.map +0 -0
  836. /package/{dist/components → components}/companion/index.js +0 -0
  837. /package/{dist/components → components}/companion/walletUtils.d.ts +0 -0
  838. /package/{dist/components → components}/companion/walletUtils.d.ts.map +0 -0
  839. /package/{dist/components → components}/companion/walletUtils.js +0 -0
  840. /package/{dist/components → components}/companion-shell-styles.d.ts +0 -0
  841. /package/{dist/components → components}/companion-shell-styles.d.ts.map +0 -0
  842. /package/{dist/components → components}/companion-shell-styles.js +0 -0
  843. /package/{dist/components → components}/confirm-delete-control.d.ts +0 -0
  844. /package/{dist/components → components}/confirm-delete-control.d.ts.map +0 -0
  845. /package/{dist/components → components}/confirm-delete-control.js +0 -0
  846. /package/{dist/components → components}/conversations/ConversationListItem.d.ts +0 -0
  847. /package/{dist/components → components}/conversations/ConversationListItem.d.ts.map +0 -0
  848. /package/{dist/components → components}/conversations/ConversationListItem.js +0 -0
  849. /package/{dist/components → components}/conversations/conversation-utils.d.ts +0 -0
  850. /package/{dist/components → components}/conversations/conversation-utils.d.ts.map +0 -0
  851. /package/{dist/components → components}/conversations/conversation-utils.js +0 -0
  852. /package/{dist/components → components}/format.d.ts +0 -0
  853. /package/{dist/components → components}/format.d.ts.map +0 -0
  854. /package/{dist/components → components}/format.js +0 -0
  855. /package/{dist/components → components}/inventory/CopyableAddress.d.ts +0 -0
  856. /package/{dist/components → components}/inventory/CopyableAddress.d.ts.map +0 -0
  857. /package/{dist/components → components}/inventory/CopyableAddress.js +0 -0
  858. /package/{dist/components → components}/inventory/InventoryToolbar.d.ts +0 -0
  859. /package/{dist/components → components}/inventory/InventoryToolbar.d.ts.map +0 -0
  860. /package/{dist/components → components}/inventory/InventoryToolbar.js +0 -0
  861. /package/{dist/components → components}/inventory/NftGrid.d.ts +0 -0
  862. /package/{dist/components → components}/inventory/NftGrid.d.ts.map +0 -0
  863. /package/{dist/components → components}/inventory/NftGrid.js +0 -0
  864. /package/{dist/components → components}/inventory/TokenLogo.d.ts +0 -0
  865. /package/{dist/components → components}/inventory/TokenLogo.d.ts.map +0 -0
  866. /package/{dist/components → components}/inventory/TokenLogo.js +0 -0
  867. /package/{dist/components → components}/inventory/TokensTable.d.ts +0 -0
  868. /package/{dist/components → components}/inventory/TokensTable.d.ts.map +0 -0
  869. /package/{dist/components → components}/inventory/TokensTable.js +0 -0
  870. /package/{dist/components → components}/inventory/constants.d.ts +0 -0
  871. /package/{dist/components → components}/inventory/constants.d.ts.map +0 -0
  872. /package/{dist/components → components}/inventory/constants.js +0 -0
  873. /package/{dist/components → components}/inventory/index.d.ts +0 -0
  874. /package/{dist/components → components}/inventory/index.d.ts.map +0 -0
  875. /package/{dist/components → components}/inventory/index.js +0 -0
  876. /package/{dist/components → components}/inventory/media-url.d.ts +0 -0
  877. /package/{dist/components → components}/inventory/media-url.d.ts.map +0 -0
  878. /package/{dist/components → components}/inventory/media-url.js +0 -0
  879. /package/{dist/components → components}/inventory/useInventoryData.d.ts +0 -0
  880. /package/{dist/components → components}/inventory/useInventoryData.d.ts.map +0 -0
  881. /package/{dist/components → components}/inventory/useInventoryData.js +0 -0
  882. /package/{dist/components → components}/knowledge-upload-image.d.ts +0 -0
  883. /package/{dist/components → components}/knowledge-upload-image.d.ts.map +0 -0
  884. /package/{dist/components → components}/knowledge-upload-image.js +0 -0
  885. /package/{dist/components → components}/labels.d.ts +0 -0
  886. /package/{dist/components → components}/labels.d.ts.map +0 -0
  887. /package/{dist/components → components}/labels.js +0 -0
  888. /package/{dist/components → components}/onboarding/ActivateStep.d.ts +0 -0
  889. /package/{dist/components → components}/onboarding/ActivateStep.d.ts.map +0 -0
  890. /package/{dist/components → components}/onboarding/ActivateStep.js +0 -0
  891. /package/{dist/components → components}/onboarding/ConnectionStep.d.ts +0 -0
  892. /package/{dist/components → components}/onboarding/IdentityStep.d.ts +0 -0
  893. /package/{dist/components → components}/onboarding/IdentityStep.d.ts.map +0 -0
  894. /package/{dist/components → components}/onboarding/IdentityStep.js +0 -0
  895. /package/{dist/components → components}/onboarding/OnboardingPanel.d.ts +0 -0
  896. /package/{dist/components → components}/onboarding/OnboardingPanel.d.ts.map +0 -0
  897. /package/{dist/components → components}/onboarding/OnboardingPanel.js +0 -0
  898. /package/{dist/components → components}/onboarding/OnboardingStepNav.d.ts +0 -0
  899. /package/{dist/components → components}/onboarding/OnboardingStepNav.d.ts.map +0 -0
  900. /package/{dist/components → components}/onboarding/OnboardingStepNav.js +0 -0
  901. /package/{dist/components → components}/onboarding/PermissionsStep.d.ts +0 -0
  902. /package/{dist/components → components}/onboarding/PermissionsStep.d.ts.map +0 -0
  903. /package/{dist/components → components}/onboarding/PermissionsStep.js +0 -0
  904. /package/{dist/components → components}/onboarding/RpcStep.d.ts +0 -0
  905. /package/{dist/components → components}/onboarding/RpcStep.d.ts.map +0 -0
  906. /package/{dist/components → components}/onboarding/RpcStep.js +0 -0
  907. /package/{dist/components → components}/permissions/PermissionIcon.d.ts +0 -0
  908. /package/{dist/components → components}/permissions/PermissionIcon.d.ts.map +0 -0
  909. /package/{dist/components → components}/permissions/PermissionIcon.js +0 -0
  910. /package/{dist/components → components}/permissions/StreamingPermissions.d.ts +0 -0
  911. /package/{dist/components → components}/plugins/showcase-data.d.ts +0 -0
  912. /package/{dist/components → components}/plugins/showcase-data.d.ts.map +0 -0
  913. /package/{dist/components → components}/plugins/showcase-data.js +0 -0
  914. /package/{dist/components → components}/shared/ShellHeaderControls.d.ts +0 -0
  915. /package/{dist/components → components}/shared/ShellHeaderControls.d.ts.map +0 -0
  916. /package/{dist/components → components}/shared/ShellHeaderControls.js +0 -0
  917. /package/{dist/components → components}/shared-companion-scene-context.d.ts +0 -0
  918. /package/{dist/components → components}/shared-companion-scene-context.d.ts.map +0 -0
  919. /package/{dist/components → components}/shared-companion-scene-context.js +0 -0
  920. /package/{dist/components → components}/skeletons.d.ts +0 -0
  921. /package/{dist/components → components}/skeletons.d.ts.map +0 -0
  922. /package/{dist/components → components}/skeletons.js +0 -0
  923. /package/{dist/components → components}/stream/ActivityFeed.d.ts +0 -0
  924. /package/{dist/components → components}/stream/ActivityFeed.d.ts.map +0 -0
  925. /package/{dist/components → components}/stream/ActivityFeed.js +0 -0
  926. /package/{dist/components → components}/stream/AvatarPip.d.ts +0 -0
  927. /package/{dist/components → components}/stream/AvatarPip.d.ts.map +0 -0
  928. /package/{dist/components → components}/stream/AvatarPip.js +0 -0
  929. /package/{dist/components → components}/stream/ChatContent.d.ts +0 -0
  930. /package/{dist/components → components}/stream/ChatContent.d.ts.map +0 -0
  931. /package/{dist/components → components}/stream/ChatContent.js +0 -0
  932. /package/{dist/components → components}/stream/ChatTicker.d.ts +0 -0
  933. /package/{dist/components → components}/stream/ChatTicker.d.ts.map +0 -0
  934. /package/{dist/components → components}/stream/ChatTicker.js +0 -0
  935. /package/{dist/components → components}/stream/IdleContent.d.ts +0 -0
  936. /package/{dist/components → components}/stream/IdleContent.d.ts.map +0 -0
  937. /package/{dist/components → components}/stream/IdleContent.js +0 -0
  938. /package/{dist/components → components}/stream/StatusBar.d.ts +0 -0
  939. /package/{dist/components → components}/stream/StatusBar.d.ts.map +0 -0
  940. /package/{dist/components → components}/stream/StatusBar.js +0 -0
  941. /package/{dist/components → components}/stream/StreamSettings.d.ts +0 -0
  942. /package/{dist/components → components}/stream/StreamSettings.d.ts.map +0 -0
  943. /package/{dist/components → components}/stream/StreamSettings.js +0 -0
  944. /package/{dist/components → components}/stream/StreamTerminal.d.ts +0 -0
  945. /package/{dist/components → components}/stream/StreamTerminal.d.ts.map +0 -0
  946. /package/{dist/components → components}/stream/StreamTerminal.js +0 -0
  947. /package/{dist/components → components}/stream/StreamVoiceConfig.d.ts +0 -0
  948. /package/{dist/components → components}/stream/StreamVoiceConfig.d.ts.map +0 -0
  949. /package/{dist/components → components}/stream/StreamVoiceConfig.js +0 -0
  950. /package/{dist/components → components}/stream/helpers.d.ts +0 -0
  951. /package/{dist/components → components}/stream/helpers.d.ts.map +0 -0
  952. /package/{dist/components → components}/stream/helpers.js +0 -0
  953. /package/{dist/components → components}/stream/overlays/OverlayLayer.d.ts +0 -0
  954. /package/{dist/components → components}/stream/overlays/OverlayLayer.d.ts.map +0 -0
  955. /package/{dist/components → components}/stream/overlays/OverlayLayer.js +0 -0
  956. /package/{dist/components → components}/stream/overlays/built-in/ActionTickerWidget.d.ts +0 -0
  957. /package/{dist/components → components}/stream/overlays/built-in/ActionTickerWidget.d.ts.map +0 -0
  958. /package/{dist/components → components}/stream/overlays/built-in/ActionTickerWidget.js +0 -0
  959. /package/{dist/components → components}/stream/overlays/built-in/AlertPopupWidget.d.ts +0 -0
  960. /package/{dist/components → components}/stream/overlays/built-in/AlertPopupWidget.d.ts.map +0 -0
  961. /package/{dist/components → components}/stream/overlays/built-in/AlertPopupWidget.js +0 -0
  962. /package/{dist/components → components}/stream/overlays/built-in/BrandingWidget.d.ts +0 -0
  963. /package/{dist/components → components}/stream/overlays/built-in/BrandingWidget.d.ts.map +0 -0
  964. /package/{dist/components → components}/stream/overlays/built-in/BrandingWidget.js +0 -0
  965. /package/{dist/components → components}/stream/overlays/built-in/CustomHtmlWidget.d.ts +0 -0
  966. /package/{dist/components → components}/stream/overlays/built-in/CustomHtmlWidget.d.ts.map +0 -0
  967. /package/{dist/components → components}/stream/overlays/built-in/CustomHtmlWidget.js +0 -0
  968. /package/{dist/components → components}/stream/overlays/built-in/PeonGlassWidget.d.ts +0 -0
  969. /package/{dist/components → components}/stream/overlays/built-in/PeonGlassWidget.d.ts.map +0 -0
  970. /package/{dist/components → components}/stream/overlays/built-in/PeonGlassWidget.js +0 -0
  971. /package/{dist/components → components}/stream/overlays/built-in/PeonHudWidget.d.ts +0 -0
  972. /package/{dist/components → components}/stream/overlays/built-in/PeonHudWidget.d.ts.map +0 -0
  973. /package/{dist/components → components}/stream/overlays/built-in/PeonHudWidget.js +0 -0
  974. /package/{dist/components → components}/stream/overlays/built-in/PeonSakuraWidget.d.ts +0 -0
  975. /package/{dist/components → components}/stream/overlays/built-in/PeonSakuraWidget.d.ts.map +0 -0
  976. /package/{dist/components → components}/stream/overlays/built-in/PeonSakuraWidget.js +0 -0
  977. /package/{dist/components → components}/stream/overlays/built-in/ThoughtBubbleWidget.d.ts +0 -0
  978. /package/{dist/components → components}/stream/overlays/built-in/ThoughtBubbleWidget.d.ts.map +0 -0
  979. /package/{dist/components → components}/stream/overlays/built-in/ThoughtBubbleWidget.js +0 -0
  980. /package/{dist/components → components}/stream/overlays/built-in/ViewerCountWidget.d.ts +0 -0
  981. /package/{dist/components → components}/stream/overlays/built-in/ViewerCountWidget.d.ts.map +0 -0
  982. /package/{dist/components → components}/stream/overlays/built-in/ViewerCountWidget.js +0 -0
  983. /package/{dist/components → components}/stream/overlays/built-in/index.d.ts +0 -0
  984. /package/{dist/components → components}/stream/overlays/built-in/index.d.ts.map +0 -0
  985. /package/{dist/components → components}/stream/overlays/built-in/index.js +0 -0
  986. /package/{dist/components → components}/stream/overlays/registry.d.ts +0 -0
  987. /package/{dist/components → components}/stream/overlays/registry.d.ts.map +0 -0
  988. /package/{dist/components → components}/stream/overlays/registry.js +0 -0
  989. /package/{dist/components → components}/stream/overlays/types.d.ts +0 -0
  990. /package/{dist/components → components}/stream/overlays/types.d.ts.map +0 -0
  991. /package/{dist/components → components}/stream/overlays/types.js +0 -0
  992. /package/{dist/components → components}/stream/overlays/useOverlayLayout.d.ts +0 -0
  993. /package/{dist/components → components}/stream/overlays/useOverlayLayout.d.ts.map +0 -0
  994. /package/{dist/components → components}/stream/overlays/useOverlayLayout.js +0 -0
  995. /package/{dist/components → components}/trajectory-format.d.ts +0 -0
  996. /package/{dist/components → components}/trajectory-format.d.ts.map +0 -0
  997. /package/{dist/components → components}/trajectory-format.js +0 -0
  998. /package/{dist/components → components}/ui-badges.d.ts +0 -0
  999. /package/{dist/components → components}/ui-badges.d.ts.map +0 -0
  1000. /package/{dist/components → components}/ui-badges.js +0 -0
  1001. /package/{dist/components → components}/ui-switch.d.ts +0 -0
  1002. /package/{dist/components → components}/ui-switch.d.ts.map +0 -0
  1003. /package/{dist/components → components}/vector-browser-three.d.ts +0 -0
  1004. /package/{dist/components → components}/vector-browser-three.d.ts.map +0 -0
  1005. /package/{dist/components → components}/vector-browser-three.js +0 -0
  1006. /package/{dist/config → config}/branding.d.ts +0 -0
  1007. /package/{dist/config → config}/branding.d.ts.map +0 -0
  1008. /package/{dist/config → config}/branding.js +0 -0
  1009. /package/{dist/config → config}/config-catalog.d.ts +0 -0
  1010. /package/{dist/config → config}/config-catalog.d.ts.map +0 -0
  1011. /package/{dist/config → config}/config-catalog.js +0 -0
  1012. /package/{dist/config → config}/config-field.d.ts +0 -0
  1013. /package/{dist/config → config}/config-field.d.ts.map +0 -0
  1014. /package/{dist/config → config}/config-field.js +0 -0
  1015. /package/{dist/config → config}/config-renderer.d.ts +0 -0
  1016. /package/{dist/config → config}/config-renderer.d.ts.map +0 -0
  1017. /package/{dist/config → config}/config-renderer.js +0 -0
  1018. /package/{dist/config → config}/index.d.ts +0 -0
  1019. /package/{dist/config → config}/index.d.ts.map +0 -0
  1020. /package/{dist/config → config}/index.js +0 -0
  1021. /package/{dist/config → config}/ui-renderer.d.ts +0 -0
  1022. /package/{dist/config → config}/ui-renderer.d.ts.map +0 -0
  1023. /package/{dist/config → config}/ui-renderer.js +0 -0
  1024. /package/{dist/config → config}/ui-spec.d.ts +0 -0
  1025. /package/{dist/config → config}/ui-spec.d.ts.map +0 -0
  1026. /package/{dist/config → config}/ui-spec.js +0 -0
  1027. /package/{dist/events → events}/index.d.ts +0 -0
  1028. /package/{dist/events → events}/index.d.ts.map +0 -0
  1029. /package/{dist/events → events}/index.js +0 -0
  1030. /package/{dist/hooks → hooks}/index.d.ts +0 -0
  1031. /package/{dist/hooks → hooks}/index.d.ts.map +0 -0
  1032. /package/{dist/hooks → hooks}/index.js +0 -0
  1033. /package/{dist/hooks → hooks}/useBugReport.d.ts +0 -0
  1034. /package/{dist/hooks → hooks}/useBugReport.d.ts.map +0 -0
  1035. /package/{dist/hooks → hooks}/useBugReport.js +0 -0
  1036. /package/{dist/hooks → hooks}/useCanvasWindow.d.ts +0 -0
  1037. /package/{dist/hooks → hooks}/useCanvasWindow.d.ts.map +0 -0
  1038. /package/{dist/hooks → hooks}/useCanvasWindow.js +0 -0
  1039. /package/{dist/hooks → hooks}/useChatAvatarVoice.d.ts +0 -0
  1040. /package/{dist/hooks → hooks}/useChatAvatarVoice.d.ts.map +0 -0
  1041. /package/{dist/hooks → hooks}/useChatAvatarVoice.js +0 -0
  1042. /package/{dist/hooks → hooks}/useClickOutside.d.ts +0 -0
  1043. /package/{dist/hooks → hooks}/useClickOutside.d.ts.map +0 -0
  1044. /package/{dist/hooks → hooks}/useClickOutside.js +0 -0
  1045. /package/{dist/hooks → hooks}/useContextMenu.d.ts +0 -0
  1046. /package/{dist/hooks → hooks}/useContextMenu.d.ts.map +0 -0
  1047. /package/{dist/hooks → hooks}/useContextMenu.js +0 -0
  1048. /package/{dist/hooks → hooks}/useKeyboardShortcuts.d.ts +0 -0
  1049. /package/{dist/hooks → hooks}/useKeyboardShortcuts.d.ts.map +0 -0
  1050. /package/{dist/hooks → hooks}/useKeyboardShortcuts.js +0 -0
  1051. /package/{dist/hooks → hooks}/useLifoSync.d.ts +0 -0
  1052. /package/{dist/hooks → hooks}/useLifoSync.d.ts.map +0 -0
  1053. /package/{dist/hooks → hooks}/useLifoSync.js +0 -0
  1054. /package/{dist/hooks → hooks}/useMemoryMonitor.d.ts +0 -0
  1055. /package/{dist/hooks → hooks}/useMemoryMonitor.d.ts.map +0 -0
  1056. /package/{dist/hooks → hooks}/useMemoryMonitor.js +0 -0
  1057. /package/{dist/hooks → hooks}/useRenderGuard.d.ts +0 -0
  1058. /package/{dist/hooks → hooks}/useRenderGuard.d.ts.map +0 -0
  1059. /package/{dist/hooks → hooks}/useRenderGuard.js +0 -0
  1060. /package/{dist/hooks → hooks}/useRetakeCapture.d.ts +0 -0
  1061. /package/{dist/hooks → hooks}/useRetakeCapture.d.ts.map +0 -0
  1062. /package/{dist/hooks → hooks}/useRetakeCapture.js +0 -0
  1063. /package/{dist/hooks → hooks}/useStreamPopoutNavigation.d.ts +0 -0
  1064. /package/{dist/hooks → hooks}/useStreamPopoutNavigation.d.ts.map +0 -0
  1065. /package/{dist/hooks → hooks}/useStreamPopoutNavigation.js +0 -0
  1066. /package/{dist/hooks → hooks}/useTimeout.d.ts +0 -0
  1067. /package/{dist/hooks → hooks}/useTimeout.d.ts.map +0 -0
  1068. /package/{dist/hooks → hooks}/useTimeout.js +0 -0
  1069. /package/{dist/hooks → hooks}/useVoiceChat.d.ts +0 -0
  1070. /package/{dist/hooks → hooks}/useVoiceChat.d.ts.map +0 -0
  1071. /package/{dist/hooks → hooks}/useVoiceChat.js +0 -0
  1072. /package/{dist/hooks → hooks}/useWhatsAppPairing.d.ts +0 -0
  1073. /package/{dist/hooks → hooks}/useWhatsAppPairing.d.ts.map +0 -0
  1074. /package/{dist/hooks → hooks}/useWhatsAppPairing.js +0 -0
  1075. /package/{dist/i18n → i18n}/index.d.ts +0 -0
  1076. /package/{dist/i18n → i18n}/index.d.ts.map +0 -0
  1077. /package/{dist/i18n → i18n}/index.js +0 -0
  1078. /package/{dist/i18n → i18n}/messages.d.ts +0 -0
  1079. /package/{dist/i18n → i18n}/messages.d.ts.map +0 -0
  1080. /package/{dist/i18n → i18n}/messages.js +0 -0
  1081. /package/{dist/index.d.ts → index.d.ts} +0 -0
  1082. /package/{dist/index.d.ts.map → index.d.ts.map} +0 -0
  1083. /package/{dist/index.js → index.js} +0 -0
  1084. /package/{dist/navigation → navigation}/index.d.ts +0 -0
  1085. /package/{dist/navigation → navigation}/index.d.ts.map +0 -0
  1086. /package/{dist/navigation → navigation}/index.js +0 -0
  1087. /package/{dist/onboarding-config.d.ts → onboarding-config.d.ts} +0 -0
  1088. /package/{dist/onboarding-config.d.ts.map → onboarding-config.d.ts.map} +0 -0
  1089. /package/{dist/onboarding-config.js → onboarding-config.js} +0 -0
  1090. /package/{dist/platform → platform}/browser-launch.d.ts +0 -0
  1091. /package/{dist/platform → platform}/browser-launch.d.ts.map +0 -0
  1092. /package/{dist/platform → platform}/browser-launch.js +0 -0
  1093. /package/{dist/platform → platform}/index.d.ts +0 -0
  1094. /package/{dist/platform → platform}/index.d.ts.map +0 -0
  1095. /package/{dist/platform → platform}/index.js +0 -0
  1096. /package/{dist/platform → platform}/init.d.ts +0 -0
  1097. /package/{dist/platform → platform}/init.d.ts.map +0 -0
  1098. /package/{dist/platform → platform}/init.js +0 -0
  1099. /package/{dist/platform → platform}/lifo.d.ts +0 -0
  1100. /package/{dist/platform → platform}/lifo.d.ts.map +0 -0
  1101. /package/{dist/platform → platform}/lifo.js +0 -0
  1102. /package/{dist/providers → providers}/index.d.ts +0 -0
  1103. /package/{dist/providers → providers}/index.d.ts.map +0 -0
  1104. /package/{dist/providers → providers}/index.js +0 -0
  1105. /package/{dist/shell-params.d.ts → shell-params.d.ts} +0 -0
  1106. /package/{dist/shell-params.d.ts.map → shell-params.d.ts.map} +0 -0
  1107. /package/{dist/shell-params.js → shell-params.js} +0 -0
  1108. /package/{dist/state → state}/AppContext.d.ts +0 -0
  1109. /package/{dist/state → state}/index.d.ts +0 -0
  1110. /package/{dist/state → state}/index.d.ts.map +0 -0
  1111. /package/{dist/state → state}/index.js +0 -0
  1112. /package/{dist/state → state}/internal.d.ts +0 -0
  1113. /package/{dist/state → state}/internal.d.ts.map +0 -0
  1114. /package/{dist/state → state}/internal.js +0 -0
  1115. /package/{dist/state → state}/onboarding-resume.d.ts +0 -0
  1116. /package/{dist/state → state}/onboarding-resume.d.ts.map +0 -0
  1117. /package/{dist/state → state}/onboarding-resume.js +0 -0
  1118. /package/{dist/state → state}/parsers.d.ts +0 -0
  1119. /package/{dist/state → state}/parsers.d.ts.map +0 -0
  1120. /package/{dist/state → state}/parsers.js +0 -0
  1121. /package/{dist/state → state}/persistence.d.ts +0 -0
  1122. /package/{dist/state → state}/persistence.d.ts.map +0 -0
  1123. /package/{dist/state → state}/persistence.js +0 -0
  1124. /package/{dist/state → state}/shell-routing.d.ts +0 -0
  1125. /package/{dist/state → state}/shell-routing.d.ts.map +0 -0
  1126. /package/{dist/state → state}/shell-routing.js +0 -0
  1127. /package/{dist/state → state}/types.d.ts +0 -0
  1128. /package/{dist/state → state}/types.d.ts.map +0 -0
  1129. /package/{dist/state → state}/types.js +0 -0
  1130. /package/{dist/state → state}/ui-preferences.d.ts +0 -0
  1131. /package/{dist/state → state}/ui-preferences.d.ts.map +0 -0
  1132. /package/{dist/state → state}/ui-preferences.js +0 -0
  1133. /package/{dist/state → state}/useApp.d.ts +0 -0
  1134. /package/{dist/state → state}/useApp.d.ts.map +0 -0
  1135. /package/{dist/state → state}/useApp.js +0 -0
  1136. /package/{dist/state → state}/vrm.d.ts +0 -0
  1137. /package/{dist/state → state}/vrm.d.ts.map +0 -0
  1138. /package/{dist/state → state}/vrm.js +0 -0
  1139. /package/{dist/styles → styles}/base.css +0 -0
  1140. /package/{dist/styles → styles}/styles.css +0 -0
  1141. /package/{dist/styles → styles}/xterm.css +0 -0
  1142. /package/{dist/types → types}/index.d.ts +0 -0
  1143. /package/{dist/types → types}/index.d.ts.map +0 -0
  1144. /package/{dist/types → types}/index.js +0 -0
  1145. /package/{dist/utils → utils}/asset-url.d.ts +0 -0
  1146. /package/{dist/utils → utils}/asset-url.d.ts.map +0 -0
  1147. /package/{dist/utils → utils}/asset-url.js +0 -0
  1148. /package/{dist/utils → utils}/assistant-text.d.ts +0 -0
  1149. /package/{dist/utils → utils}/assistant-text.d.ts.map +0 -0
  1150. /package/{dist/utils → utils}/assistant-text.js +0 -0
  1151. /package/{dist/utils → utils}/clipboard.d.ts +0 -0
  1152. /package/{dist/utils → utils}/clipboard.d.ts.map +0 -0
  1153. /package/{dist/utils → utils}/clipboard.js +0 -0
  1154. /package/{dist/utils → utils}/desktop-dialogs.d.ts +0 -0
  1155. /package/{dist/utils → utils}/desktop-dialogs.d.ts.map +0 -0
  1156. /package/{dist/utils → utils}/desktop-dialogs.js +0 -0
  1157. /package/{dist/utils → utils}/eliza-globals.d.ts +0 -0
  1158. /package/{dist/utils → utils}/eliza-globals.d.ts.map +0 -0
  1159. /package/{dist/utils → utils}/eliza-globals.js +0 -0
  1160. /package/{dist/utils → utils}/index.d.ts +0 -0
  1161. /package/{dist/utils → utils}/index.d.ts.map +0 -0
  1162. /package/{dist/utils → utils}/index.js +0 -0
  1163. /package/{dist/utils → utils}/number-parsing.d.ts +0 -0
  1164. /package/{dist/utils → utils}/number-parsing.d.ts.map +0 -0
  1165. /package/{dist/utils → utils}/number-parsing.js +0 -0
  1166. /package/{dist/utils → utils}/openExternalUrl.d.ts +0 -0
  1167. /package/{dist/utils → utils}/openExternalUrl.d.ts.map +0 -0
  1168. /package/{dist/utils → utils}/openExternalUrl.js +0 -0
  1169. /package/{dist/utils → utils}/spoken-text.d.ts +0 -0
  1170. /package/{dist/utils → utils}/spoken-text.d.ts.map +0 -0
  1171. /package/{dist/utils → utils}/spoken-text.js +0 -0
  1172. /package/{dist/utils → utils}/streaming-text.d.ts +0 -0
  1173. /package/{dist/utils → utils}/streaming-text.d.ts.map +0 -0
  1174. /package/{dist/utils → utils}/streaming-text.js +0 -0
  1175. /package/{dist/voice → voice}/index.d.ts +0 -0
  1176. /package/{dist/voice → voice}/index.d.ts.map +0 -0
  1177. /package/{dist/voice → voice}/index.js +0 -0
  1178. /package/{dist/voice → voice}/types.d.ts +0 -0
  1179. /package/{dist/voice → voice}/types.d.ts.map +0 -0
  1180. /package/{dist/voice → voice}/types.js +0 -0
  1181. /package/{dist/wallet-rpc.d.ts → wallet-rpc.d.ts} +0 -0
  1182. /package/{dist/wallet-rpc.d.ts.map → wallet-rpc.d.ts.map} +0 -0
  1183. /package/{dist/wallet-rpc.js → wallet-rpc.js} +0 -0
@@ -1,1575 +0,0 @@
1
- /**
2
- * Character view — roster-first character selection with optional customization.
3
- */
4
-
5
- import {
6
- type CharacterData,
7
- client,
8
- type StylePreset,
9
- type VoiceConfig,
10
- } from "@elizaos/app-core/api";
11
- import { AvatarSelector } from "./AvatarSelector";
12
- import {
13
- dispatchWindowEvent,
14
- VOICE_CONFIG_UPDATED_EVENT,
15
- } from "@elizaos/app-core/events";
16
- import { COMPANION_ENABLED } from "@elizaos/app-core/navigation";
17
- import { normalizeGeneratedMessageExamples } from "../actions/character";
18
- import { useApp } from "@elizaos/app-core/state";
19
- import {
20
- CharacterRoster,
21
- type CharacterRosterEntry,
22
- resolveRosterEntries,
23
- } from "./CharacterRoster";
24
- import {
25
- PREMADE_VOICES,
26
- sanitizeApiKey,
27
- type VoicePreset,
28
- } from "@elizaos/app-core/voice";
29
- import { Button, Input, Textarea, ThemedSelect } from "@elizaos/ui";
30
- import { BookOpen, FileText, Lock, LockOpen, Palette, Volume2, VolumeX } from "lucide-react";
31
- import { useCallback, useEffect, useState } from "react";
32
-
33
- const DEFAULT_ELEVEN_FAST_MODEL = "eleven_flash_v2_5";
34
-
35
- type StyleSectionKey = "all" | "chat" | "post";
36
- type CustomizeStep = "core" | "examples";
37
- type ActiveSection = "aboutMe" | "directions" | "styleRules";
38
- const STYLE_SECTION_KEYS: StyleSectionKey[] = ["all", "chat", "post"];
39
- const STYLE_SECTION_PLACEHOLDERS: Record<StyleSectionKey, string> = {
40
- all: "Add shared rule",
41
- chat: "Add chat rule",
42
- post: "Add post rule",
43
- };
44
- const STYLE_SECTION_EMPTY_STATES: Record<StyleSectionKey, string> = {
45
- all: "No shared rules yet.",
46
- chat: "No chat rules yet.",
47
- post: "No post rules yet.",
48
- };
49
- const VOICE_SELECT_GROUPS = [
50
- {
51
- label: "Female",
52
- items: PREMADE_VOICES.filter((preset) => preset.gender === "female").map(
53
- (preset) => ({
54
- id: preset.id,
55
- text: preset.name,
56
- }),
57
- ),
58
- },
59
- {
60
- label: "Male",
61
- items: PREMADE_VOICES.filter((preset) => preset.gender === "male").map(
62
- (preset) => ({
63
- id: preset.id,
64
- text: preset.name,
65
- }),
66
- ),
67
- },
68
- {
69
- label: "Character",
70
- items: PREMADE_VOICES.filter((preset) => preset.gender === "character").map(
71
- (preset) => ({
72
- id: preset.id,
73
- text: preset.name,
74
- }),
75
- ),
76
- },
77
- ];
78
-
79
- function replaceCharacterToken(value: string, name: string) {
80
- return value.replaceAll("{{name}}", name).replaceAll("{{agentName}}", name);
81
- }
82
-
83
- function buildCharacterFromPreset(
84
- preset: StylePreset,
85
- name: string,
86
- ): CharacterData {
87
- return {
88
- name,
89
- username: name,
90
- bio: preset.bio.map((line) => replaceCharacterToken(line, name)),
91
- system: replaceCharacterToken(preset.system, name),
92
- adjectives: [...preset.adjectives],
93
- style: {
94
- all: [...preset.style.all],
95
- chat: [...preset.style.chat],
96
- post: [...preset.style.post],
97
- },
98
- messageExamples: preset.messageExamples.map((conversation) => ({
99
- examples: conversation.map((message) => ({
100
- name:
101
- message.user === "{{agentName}}"
102
- ? name
103
- : replaceCharacterToken(message.user, name),
104
- content: {
105
- text: replaceCharacterToken(message.content.text, name),
106
- },
107
- })),
108
- })),
109
- postExamples: preset.postExamples.map((example) =>
110
- replaceCharacterToken(example, name),
111
- ),
112
- };
113
- }
114
-
115
- function buildCharacterDraftFromPreset(
116
- entry: CharacterRosterEntry,
117
- ): CharacterData {
118
- const character = buildCharacterFromPreset(entry.preset, entry.name);
119
- return {
120
- name: character.name ?? "",
121
- username: character.username ?? "",
122
- bio: Array.isArray(character.bio)
123
- ? character.bio.join("\n")
124
- : (character.bio ?? ""),
125
- system: character.system ?? "",
126
- adjectives: character.adjectives ?? [],
127
- style: {
128
- all: character.style?.all ?? [],
129
- chat: character.style?.chat ?? [],
130
- post: character.style?.post ?? [],
131
- },
132
- messageExamples: character.messageExamples ?? [],
133
- postExamples: character.postExamples ?? [],
134
- };
135
- }
136
-
137
- function normalizeCharacterDraftForComparison(
138
- character: CharacterData | null | undefined,
139
- ) {
140
- return {
141
- name: (character?.name ?? "").trim(),
142
- username: (character?.username ?? "").trim(),
143
- bio:
144
- typeof character?.bio === "string"
145
- ? character.bio.trim()
146
- : Array.isArray(character?.bio)
147
- ? character.bio.join("\n").trim()
148
- : "",
149
- system: (character?.system ?? "").trim(),
150
- adjectives: [...(character?.adjectives ?? [])],
151
- style: {
152
- all: [...(character?.style?.all ?? [])],
153
- chat: [...(character?.style?.chat ?? [])],
154
- post: [...(character?.style?.post ?? [])],
155
- },
156
- messageExamples: (character?.messageExamples ?? []).map((conversation) => ({
157
- examples: (conversation.examples ?? []).map((message) => ({
158
- name: message.name,
159
- content: {
160
- text: message.content?.text ?? "",
161
- },
162
- })),
163
- })),
164
- postExamples: [...(character?.postExamples ?? [])],
165
- };
166
- }
167
-
168
- function characterDraftMatchesPreset(
169
- character: CharacterData | null | undefined,
170
- avatarIndex: number,
171
- entry: CharacterRosterEntry,
172
- ) {
173
- if (avatarIndex !== entry.avatarIndex) return false;
174
- const normalizedCurrent = normalizeCharacterDraftForComparison(character);
175
- const normalizedPreset = normalizeCharacterDraftForComparison(
176
- buildCharacterDraftFromPreset(entry),
177
- );
178
- return JSON.stringify(normalizedCurrent) === JSON.stringify(normalizedPreset);
179
- }
180
-
181
-
182
- function findMatchingRosterEntry(
183
- character: CharacterData | null,
184
- avatarIndex: number,
185
- roster: CharacterRosterEntry[],
186
- ) {
187
- if (!character) return null;
188
- const currentName =
189
- typeof character.name === "string" ? character.name.trim() : "";
190
- const exactNameMatch = roster.find((entry) => entry.name === currentName);
191
- if (exactNameMatch) return exactNameMatch.id;
192
-
193
- let bestMatch: { id: string; score: number } | null = null;
194
- for (const entry of roster) {
195
- let score = 0;
196
- if (entry.avatarIndex === avatarIndex) score += 3;
197
-
198
- const draftAdjectives = new Set(character.adjectives ?? []);
199
- for (const adjective of entry.preset.adjectives) {
200
- if (draftAdjectives.has(adjective)) score += 1;
201
- }
202
-
203
- if (
204
- typeof character.system === "string" &&
205
- character.system.includes(entry.preset.catchphrase)
206
- ) {
207
- score += 1;
208
- }
209
-
210
- if (!bestMatch || score > bestMatch.score) {
211
- bestMatch = { id: entry.id, score };
212
- }
213
- }
214
-
215
- return bestMatch && bestMatch.score >= 4 ? bestMatch.id : null;
216
- }
217
-
218
- function findExactRosterEntry(
219
- character: CharacterData | null,
220
- roster: CharacterRosterEntry[],
221
- ) {
222
- if (!character) return null;
223
- const currentName =
224
- typeof character.name === "string" ? character.name.trim() : "";
225
- return roster.find((entry) => entry.name === currentName) ?? null;
226
- }
227
-
228
- function hasCharacterContent(character: CharacterData | null | undefined) {
229
- return Boolean(character && Object.keys(character).length > 0);
230
- }
231
-
232
- function resolveActiveRosterEntry(
233
- character: CharacterData | null | undefined,
234
- avatarIndex: number,
235
- selectedCharacterId: string | null,
236
- roster: CharacterRosterEntry[],
237
- ) {
238
- if (selectedCharacterId) {
239
- const selectedEntry =
240
- roster.find((entry) => entry.id === selectedCharacterId) ?? null;
241
- if (selectedEntry) return selectedEntry;
242
- }
243
-
244
- const exactEntry = findExactRosterEntry(character ?? null, roster);
245
- if (exactEntry) return exactEntry;
246
-
247
- const matchedId = findMatchingRosterEntry(
248
- character ?? null,
249
- avatarIndex,
250
- roster,
251
- );
252
- if (!matchedId) return null;
253
- return roster.find((entry) => entry.id === matchedId) ?? null;
254
- }
255
-
256
- function getStyleEntryRenderKey(
257
- section: StyleSectionKey,
258
- items: string[],
259
- item: string,
260
- index: number,
261
- ) {
262
- let occurrence = 0;
263
- for (const current of items.slice(0, index + 1)) {
264
- if (current === item) occurrence += 1;
265
- }
266
- return `${section}:${item}:${occurrence}`;
267
- }
268
-
269
- /* ── CharacterView ──────────────────────────────────────────────────── */
270
-
271
- export function CharacterView({
272
- inModal,
273
- sceneOverlay = false,
274
- }: {
275
- inModal?: boolean;
276
- sceneOverlay?: boolean;
277
- } = {}) {
278
- const {
279
- tab,
280
- setTab,
281
- characterData,
282
- characterDraft,
283
- characterLoading,
284
- characterSaving,
285
- characterSaveSuccess,
286
- characterSaveError,
287
- handleCharacterFieldInput,
288
- handleCharacterArrayInput,
289
- handleCharacterStyleInput,
290
- handleSaveCharacter,
291
- loadCharacter,
292
- setState,
293
- onboardingOptions,
294
- selectedVrmIndex,
295
- t,
296
- // Registry / Drop
297
- registryStatus,
298
- registryLoading,
299
- registryRegistering,
300
- registryError,
301
- dropStatus,
302
- loadRegistryStatus,
303
- registerOnChain,
304
- syncRegistryProfile,
305
- loadDropStatus,
306
- walletConfig,
307
- } = useApp();
308
-
309
- useEffect(() => {
310
- void loadCharacter();
311
- void loadRegistryStatus();
312
- void loadDropStatus();
313
- }, [loadCharacter, loadRegistryStatus, loadDropStatus]);
314
-
315
- const handleFieldEdit = useCallback(
316
- <K extends keyof CharacterData>(field: K, value: CharacterData[K]) => {
317
- handleCharacterFieldInput(field, value);
318
- },
319
- [handleCharacterFieldInput],
320
- );
321
-
322
- const handleStyleEdit = useCallback(
323
- (key: "all" | "chat" | "post", value: string) => {
324
- handleCharacterStyleInput(key, value);
325
- },
326
- [handleCharacterStyleInput],
327
- );
328
-
329
- /* ── Character generation state ─────────────────────────────────── */
330
- const [generating, setGenerating] = useState<string | null>(null);
331
- const [pendingStyleEntries, setPendingStyleEntries] = useState<
332
- Record<StyleSectionKey, string>
333
- >({
334
- all: "",
335
- chat: "",
336
- post: "",
337
- });
338
- const [styleEntryDrafts, setStyleEntryDrafts] = useState<
339
- Record<StyleSectionKey, string[]>
340
- >({
341
- all: [],
342
- chat: [],
343
- post: [],
344
- });
345
- const [customizeStep, setCustomizeStep] = useState<CustomizeStep>("core");
346
- const [activeSection, setActiveSection] = useState<ActiveSection>("aboutMe");
347
- const [customOverridesEnabled, setCustomOverridesEnabled] = useState(false);
348
- const [selectedCharacterId, setSelectedCharacterId] = useState<string | null>(
349
- null,
350
- );
351
- const [rosterStyles, setRosterStyles] = useState<StylePreset[]>(
352
- onboardingOptions?.styles ?? [],
353
- );
354
-
355
- /* ── Voice config state ─────────────────────────────────────────── */
356
- const [voiceConfig, setVoiceConfig] = useState<VoiceConfig>({});
357
- const [voiceLoading, setVoiceLoading] = useState(false);
358
- const [voiceSaving, setVoiceSaving] = useState(false);
359
- const [voiceSaveError, setVoiceSaveError] = useState<string | null>(null);
360
- const [voiceTesting, setVoiceTesting] = useState(false);
361
- const [voiceTestAudio, setVoiceTestAudio] = useState<HTMLAudioElement | null>(
362
- null,
363
- );
364
- const [selectedVoicePresetId, setSelectedVoicePresetId] = useState<
365
- string | null
366
- >(null);
367
- const [voiceSelectionLocked, setVoiceSelectionLocked] = useState(false);
368
-
369
- useEffect(() => {
370
- if (onboardingOptions?.styles?.length) {
371
- setRosterStyles(onboardingOptions.styles);
372
- return;
373
- }
374
-
375
- let cancelled = false;
376
- void client
377
- .getOnboardingOptions()
378
- .then((options) => {
379
- if (!cancelled) {
380
- setRosterStyles(options.styles ?? []);
381
- }
382
- })
383
- .catch(() => {
384
- /* ignore */
385
- });
386
-
387
- return () => {
388
- cancelled = true;
389
- };
390
- }, [onboardingOptions?.styles]);
391
-
392
- const characterRoster = resolveRosterEntries(rosterStyles);
393
- const visibleCharacterRoster = characterRoster;
394
- const currentCharacter = hasCharacterContent(characterDraft)
395
- ? characterDraft
396
- : characterData;
397
- const activeRosterEntry = resolveActiveRosterEntry(
398
- currentCharacter,
399
- selectedVrmIndex,
400
- selectedCharacterId,
401
- characterRoster,
402
- );
403
- const detailedEditMode = tab === "character";
404
-
405
- /* Load voice config on mount */
406
- useEffect(() => {
407
- void (async () => {
408
- setVoiceLoading(true);
409
- try {
410
- const cfg = await client.getConfig();
411
- const messages = cfg.messages as
412
- | Record<string, Record<string, unknown>>
413
- | undefined;
414
- const tts = messages?.tts as VoiceConfig | undefined;
415
- if (tts) {
416
- setVoiceConfig(tts);
417
- if (tts.elevenlabs?.voiceId) {
418
- const preset = PREMADE_VOICES.find(
419
- (p) => p.voiceId === tts.elevenlabs?.voiceId,
420
- );
421
- setSelectedVoicePresetId(preset?.id ?? null);
422
- }
423
- }
424
- } catch {
425
- /* ignore */
426
- }
427
- setVoiceLoading(false);
428
- })();
429
- }, []);
430
-
431
- const handleSelectPreset = useCallback((preset: VoicePreset) => {
432
- setSelectedVoicePresetId(preset.id);
433
- setVoiceConfig((prev) => ({
434
- ...prev,
435
- elevenlabs: { ...(prev.elevenlabs ?? {}), voiceId: preset.voiceId },
436
- }));
437
- }, []);
438
-
439
- const applyVoicePresetForEntry = useCallback(
440
- (entry: CharacterRosterEntry) => {
441
- setVoiceSaveError(null);
442
- if (!entry.voicePresetId) return;
443
- const voicePreset = PREMADE_VOICES.find(
444
- (preset) => preset.id === entry.voicePresetId,
445
- );
446
- if (voicePreset) handleSelectPreset(voicePreset);
447
- },
448
- [handleSelectPreset],
449
- );
450
-
451
- const applyCharacterDefaults = useCallback(
452
- (entry: CharacterRosterEntry) => {
453
- const nextCharacter = buildCharacterDraftFromPreset(entry);
454
- handleFieldEdit("name", nextCharacter.name ?? "");
455
- handleFieldEdit("username", nextCharacter.username ?? "");
456
- handleFieldEdit("bio", nextCharacter.bio ?? "");
457
- handleFieldEdit("system", nextCharacter.system ?? "");
458
- handleFieldEdit("adjectives", nextCharacter.adjectives ?? []);
459
- handleFieldEdit(
460
- "style",
461
- nextCharacter.style ?? { all: [], chat: [], post: [] },
462
- );
463
- handleFieldEdit("messageExamples", nextCharacter.messageExamples ?? []);
464
- handleFieldEdit("postExamples", nextCharacter.postExamples ?? []);
465
- },
466
- [handleFieldEdit],
467
- );
468
-
469
- const commitCharacterSelection = useCallback(
470
- (entry: CharacterRosterEntry, applyDefaults: boolean) => {
471
- setSelectedCharacterId(entry.id);
472
- setState("selectedVrmIndex", entry.avatarIndex);
473
- if (!voiceSelectionLocked && selectedCharacterId !== entry.id) {
474
- applyVoicePresetForEntry(entry);
475
- }
476
- if (applyDefaults) {
477
- applyCharacterDefaults(entry);
478
- }
479
- },
480
- [
481
- applyCharacterDefaults,
482
- applyVoicePresetForEntry,
483
- selectedCharacterId,
484
- setState,
485
- voiceSelectionLocked,
486
- ],
487
- );
488
-
489
- const handleTestVoice = useCallback(
490
- (previewUrl: string) => {
491
- if (voiceTestAudio) {
492
- voiceTestAudio.pause();
493
- voiceTestAudio.currentTime = 0;
494
- }
495
- setVoiceTesting(true);
496
- const audio = new Audio(previewUrl);
497
- setVoiceTestAudio(audio);
498
- audio.onended = () => setVoiceTesting(false);
499
- audio.onerror = () => setVoiceTesting(false);
500
- audio.play().catch(() => setVoiceTesting(false));
501
- },
502
- [voiceTestAudio],
503
- );
504
-
505
- const handleStopTest = useCallback(() => {
506
- if (voiceTestAudio) {
507
- voiceTestAudio.pause();
508
- voiceTestAudio.currentTime = 0;
509
- }
510
- setVoiceTesting(false);
511
- }, [voiceTestAudio]);
512
-
513
- const persistVoiceConfig = useCallback(async () => {
514
- setVoiceSaveError(null);
515
- const normalizedElevenlabs = {
516
- ...voiceConfig.elevenlabs,
517
- modelId: voiceConfig.elevenlabs?.modelId ?? DEFAULT_ELEVEN_FAST_MODEL,
518
- };
519
- const sanitizedKey = sanitizeApiKey(normalizedElevenlabs?.apiKey);
520
- if (sanitizedKey) normalizedElevenlabs.apiKey = sanitizedKey;
521
- else delete normalizedElevenlabs.apiKey;
522
-
523
- const normalizedVoiceConfig: VoiceConfig = {
524
- ...voiceConfig,
525
- provider: voiceConfig.provider ?? "elevenlabs",
526
- elevenlabs: normalizedElevenlabs,
527
- };
528
-
529
- await client.updateConfig({
530
- messages: {
531
- tts: normalizedVoiceConfig,
532
- },
533
- });
534
- dispatchWindowEvent(VOICE_CONFIG_UPDATED_EVENT, normalizedVoiceConfig);
535
- }, [voiceConfig]);
536
-
537
- const d = characterDraft ?? ({} as Record<string, unknown>);
538
- const bioText =
539
- typeof d.bio === "string"
540
- ? d.bio
541
- : Array.isArray(d.bio)
542
- ? (d.bio as string[]).join("\n")
543
- : "";
544
-
545
- const getCharContext = useCallback(
546
- () => ({
547
- name: d.name ?? "",
548
- system: d.system ?? "",
549
- bio: bioText,
550
- style: d.style ?? { all: [], chat: [], post: [] },
551
- postExamples: d.postExamples ?? [],
552
- }),
553
- [d, bioText],
554
- );
555
-
556
- useEffect(() => {
557
- setStyleEntryDrafts({
558
- all: [...(d.style?.all ?? [])],
559
- chat: [...(d.style?.chat ?? [])],
560
- post: [...(d.style?.post ?? [])],
561
- });
562
- }, [d.style]);
563
-
564
- const handleGenerate = useCallback(
565
- async (field: string, mode: "append" | "replace" = "replace") => {
566
- setGenerating(field);
567
- try {
568
- const { generated } = await client.generateCharacterField(
569
- field,
570
- getCharContext(),
571
- mode,
572
- );
573
- if (field === "bio") {
574
- handleFieldEdit("bio", generated.trim());
575
- } else if (field === "system") {
576
- handleFieldEdit("system", generated.trim());
577
- } else if (field === "style") {
578
- try {
579
- const parsed = JSON.parse(generated);
580
- if (mode === "append") {
581
- handleStyleEdit(
582
- "all",
583
- [...(d.style?.all ?? []), ...(parsed.all ?? [])].join("\n"),
584
- );
585
- handleStyleEdit(
586
- "chat",
587
- [...(d.style?.chat ?? []), ...(parsed.chat ?? [])].join("\n"),
588
- );
589
- handleStyleEdit(
590
- "post",
591
- [...(d.style?.post ?? []), ...(parsed.post ?? [])].join("\n"),
592
- );
593
- } else {
594
- if (parsed.all) handleStyleEdit("all", parsed.all.join("\n"));
595
- if (parsed.chat) handleStyleEdit("chat", parsed.chat.join("\n"));
596
- if (parsed.post) handleStyleEdit("post", parsed.post.join("\n"));
597
- }
598
- } catch {
599
- /* raw text fallback */
600
- }
601
- } else if (field === "chatExamples") {
602
- const formatted = normalizeGeneratedMessageExamples(
603
- generated,
604
- d.name?.trim() || "Agent",
605
- );
606
- if (formatted.length > 0) {
607
- setState("characterSaveError", null);
608
- handleFieldEdit("messageExamples", formatted);
609
- } else {
610
- setState(
611
- "characterSaveError",
612
- "Generated chat examples could not be parsed. Try again.",
613
- );
614
- }
615
- } else if (field === "postExamples") {
616
- try {
617
- const parsed = JSON.parse(generated);
618
- if (Array.isArray(parsed)) {
619
- if (mode === "append") {
620
- handleCharacterArrayInput(
621
- "postExamples",
622
- [...(d.postExamples ?? []), ...parsed].join("\n"),
623
- );
624
- } else {
625
- handleCharacterArrayInput("postExamples", parsed.join("\n"));
626
- }
627
- }
628
- } catch {
629
- /* raw text fallback */
630
- }
631
- }
632
- } catch (err) {
633
- if (field === "chatExamples") {
634
- setState(
635
- "characterSaveError",
636
- err instanceof Error
637
- ? `Failed to generate chat examples: ${err.message}`
638
- : "Failed to generate chat examples.",
639
- );
640
- }
641
- }
642
- setGenerating(null);
643
- },
644
- [
645
- getCharContext,
646
- d,
647
- handleFieldEdit,
648
- handleStyleEdit,
649
- handleCharacterArrayInput,
650
- setState,
651
- ],
652
- );
653
-
654
- const handlePendingStyleEntryChange = useCallback(
655
- (key: StyleSectionKey, value: string) => {
656
- setPendingStyleEntries((prev) => ({ ...prev, [key]: value }));
657
- },
658
- [],
659
- );
660
-
661
- const handleAddStyleEntry = useCallback(
662
- (key: StyleSectionKey) => {
663
- const value = pendingStyleEntries[key].trim();
664
- if (!value) return;
665
-
666
- const nextItems = [...(d.style?.[key] ?? [])];
667
- if (!nextItems.includes(value)) {
668
- nextItems.push(value);
669
- handleStyleEdit(key, nextItems.join("\n"));
670
- }
671
-
672
- setPendingStyleEntries((prev) => ({ ...prev, [key]: "" }));
673
- },
674
- [d.style, handleStyleEdit, pendingStyleEntries],
675
- );
676
-
677
- const handleRemoveStyleEntry = useCallback(
678
- (key: StyleSectionKey, index: number) => {
679
- const nextItems = [...(d.style?.[key] ?? [])];
680
- nextItems.splice(index, 1);
681
- handleStyleEdit(key, nextItems.join("\n"));
682
- },
683
- [d.style, handleStyleEdit],
684
- );
685
-
686
- const handleStyleEntryDraftChange = useCallback(
687
- (key: StyleSectionKey, index: number, value: string) => {
688
- setStyleEntryDrafts((prev) => {
689
- const nextItems = [...(prev[key] ?? [])];
690
- nextItems[index] = value;
691
- return { ...prev, [key]: nextItems };
692
- });
693
- },
694
- [],
695
- );
696
-
697
- const handleCommitStyleEntry = useCallback(
698
- (key: StyleSectionKey, index: number) => {
699
- const nextValue = styleEntryDrafts[key]?.[index]?.trim() ?? "";
700
- const nextItems = [...(d.style?.[key] ?? [])];
701
-
702
- if (!nextValue) {
703
- nextItems.splice(index, 1);
704
- } else {
705
- nextItems[index] = nextValue;
706
- }
707
-
708
- handleStyleEdit(key, nextItems.join("\n"));
709
- },
710
- [d.style, handleStyleEdit, styleEntryDrafts],
711
- );
712
-
713
- const handleSelectCharacter = useCallback(
714
- (entry: CharacterRosterEntry) => {
715
- const shouldApplyDefaults =
716
- !customOverridesEnabled &&
717
- (!currentCharacter ||
718
- !activeRosterEntry ||
719
- characterDraftMatchesPreset(
720
- currentCharacter,
721
- selectedVrmIndex,
722
- activeRosterEntry,
723
- ));
724
- commitCharacterSelection(entry, shouldApplyDefaults);
725
- },
726
- [
727
- activeRosterEntry,
728
- commitCharacterSelection,
729
- currentCharacter,
730
- customOverridesEnabled,
731
- selectedVrmIndex,
732
- ],
733
- );
734
-
735
- const handleCustomOverridesChange = useCallback(
736
- (enabled: boolean) => {
737
- setTab(enabled ? "character" : "character-select");
738
- setCustomOverridesEnabled(enabled);
739
- setCustomizeStep("core");
740
- if (enabled) return;
741
-
742
- const activeEntry = resolveActiveRosterEntry(
743
- currentCharacter,
744
- selectedVrmIndex,
745
- selectedCharacterId,
746
- characterRoster,
747
- );
748
- if (activeEntry) {
749
- setSelectedCharacterId(activeEntry.id);
750
- }
751
- },
752
- [
753
- characterRoster,
754
- currentCharacter,
755
- selectedCharacterId,
756
- selectedVrmIndex,
757
- setTab,
758
- ],
759
- );
760
-
761
- useEffect(() => {
762
- setCustomOverridesEnabled(detailedEditMode);
763
- if (detailedEditMode) {
764
- setCustomizeStep("core");
765
- }
766
- }, [detailedEditMode]);
767
-
768
- useEffect(() => {
769
- if (
770
- characterLoading ||
771
- selectedCharacterId ||
772
- !characterRoster.length ||
773
- !currentCharacter
774
- ) {
775
- return;
776
- }
777
-
778
- const activeEntry =
779
- resolveActiveRosterEntry(
780
- currentCharacter,
781
- selectedVrmIndex,
782
- selectedCharacterId,
783
- characterRoster,
784
- ) ??
785
- characterRoster[0] ??
786
- null;
787
- if (!activeEntry) return;
788
- const matchesFactory = characterDraftMatchesPreset(
789
- currentCharacter,
790
- selectedVrmIndex,
791
- activeEntry,
792
- );
793
- setSelectedCharacterId(activeEntry.id);
794
- setCustomOverridesEnabled(detailedEditMode);
795
- if (matchesFactory) {
796
- commitCharacterSelection(activeEntry, true);
797
- }
798
- }, [
799
- characterLoading,
800
- characterRoster,
801
- commitCharacterSelection,
802
- currentCharacter,
803
- detailedEditMode,
804
- selectedCharacterId,
805
- selectedVrmIndex,
806
- ]);
807
-
808
- const handleSaveAll = useCallback(async () => {
809
- const trimmedName =
810
- typeof characterDraft?.name === "string" ? characterDraft.name.trim() : "";
811
- if (!trimmedName) {
812
- setVoiceSaveError(null);
813
- setState("characterSaveSuccess", null);
814
- setState("characterSaveError", "Character name is required before saving.");
815
- return;
816
- }
817
-
818
- setVoiceSaveError(null);
819
- try {
820
- await handleSaveCharacter();
821
- } catch {
822
- return;
823
- }
824
-
825
- setVoiceSaving(true);
826
- let voiceSaveFailed = false;
827
- try {
828
- await persistVoiceConfig();
829
- } catch (err) {
830
- voiceSaveFailed = true;
831
- setVoiceSaveError(
832
- err instanceof Error ? err.message : "Failed to save voice settings.",
833
- );
834
- } finally {
835
- setVoiceSaving(false);
836
- }
837
- if (!voiceSaveFailed) {
838
- setTab(COMPANION_ENABLED ? "companion" : "chat");
839
- }
840
- }, [
841
- characterDraft?.name,
842
- handleSaveCharacter,
843
- persistVoiceConfig,
844
- setState,
845
- setTab,
846
- ]);
847
-
848
- /* ── Helpers ────────────────────────────────────────────────────── */
849
- const cardCls = sceneOverlay
850
- ? "p-5 border border-white/10 bg-black/15 backdrop-blur-md rounded-2xl shadow-[0_18px_48px_rgba(0,0,0,0.28)]"
851
- : "p-5 border border-border/40 bg-card/40 backdrop-blur-xl rounded-2xl shadow-sm";
852
- const sectionCls =
853
- sceneOverlay && !inModal ? "relative z-10 mt-4 px-1" : `mt-4 ${cardCls}`;
854
- const scrollPaneCls =
855
- "min-h-0 overflow-y-auto pr-1 [scrollbar-gutter:stable] custom-scrollbar";
856
-
857
- const SIDEBAR_TABS: { key: ActiveSection; icon: typeof FileText; labelKey: string }[] = [
858
- { key: "aboutMe", icon: FileText, labelKey: "characterview.aboutMe" },
859
- { key: "directions", icon: BookOpen, labelKey: "characterview.directionsAndThing" },
860
- { key: "styleRules", icon: Palette, labelKey: "characterview.StyleRules" },
861
- ];
862
-
863
- const bookPageCls = sceneOverlay
864
- ? "relative overflow-hidden bg-[linear-gradient(180deg,rgba(255,251,242,0.98)_0%,rgba(243,233,214,0.96)_100%)] backdrop-blur-md dark:bg-[linear-gradient(180deg,rgba(46,43,38,0.98)_0%,rgba(31,28,25,0.96)_100%)]"
865
- : "relative overflow-hidden bg-[linear-gradient(180deg,#fffaf1_0%,#f4ead7_100%)] dark:bg-[linear-gradient(180deg,hsl(35,14%,18%)_0%,hsl(35,10%,13%)_100%)]";
866
- const bookSidebarCls =
867
- "relative overflow-hidden bg-[linear-gradient(180deg,#333842_0%,#23272f_42%,#191c22_100%)] dark:bg-[linear-gradient(180deg,hsl(220,14%,15%)_0%,hsl(220,16%,10%)_42%,hsl(220,20%,7%)_100%)]";
868
- const notebookShellCls =
869
- "relative isolate flex h-[34.75rem] w-full max-w-[29rem] overflow-visible";
870
- const notebookFrameCls = sceneOverlay
871
- ? "relative flex h-full w-full overflow-hidden rounded-[1.75rem] border border-[#2f261b]/20 bg-[#f8f0df]/70 dark:border-white/10 dark:bg-[#1c1c1e]/90 shadow-[0_24px_60px_rgba(0,0,0,0.34),inset_0_1px_0_rgba(255,255,255,0.5)]"
872
- : "relative flex h-full w-full overflow-hidden rounded-[1.75rem] border border-[#2f261b]/14 bg-[#f8f0df] dark:border-white/10 dark:bg-[#1c1c1e] shadow-[0_26px_60px_rgba(36,28,18,0.2),inset_0_1px_0_rgba(255,255,255,0.58)]";
873
-
874
- const handleCustomVrmUpload = useCallback(
875
- (file: File) => {
876
- const url = URL.createObjectURL(file);
877
- setState("customVrmUrl", url);
878
- setState("selectedVrmIndex", 0);
879
- },
880
- [setState],
881
- );
882
-
883
- if (characterLoading && !characterData) {
884
- return (
885
- <div className={sectionCls}>
886
- <div className="text-center py-6 text-[var(--muted)] text-[13px]">
887
- {t("characterview.loadingCharacterDa")}
888
- </div>
889
- </div>
890
- );
891
- }
892
-
893
- const hasWallet = Boolean(walletConfig?.evmAddress);
894
- const isRegistered = registryStatus?.registered === true;
895
- const dropLive =
896
- dropStatus?.dropEnabled &&
897
- dropStatus?.publicMintOpen &&
898
- !dropStatus?.mintedOut;
899
- const userMinted = dropStatus?.userHasMinted === true;
900
- const activeVoicePreset =
901
- PREMADE_VOICES.find((preset) => preset.id === selectedVoicePresetId) ??
902
- null;
903
- const voiceSelectValue = selectedVoicePresetId ?? null;
904
- const combinedSaveError = characterSaveError;
905
- const saveAdvisory =
906
- characterSaveSuccess && voiceSaveError
907
- ? `Character saved. Voice settings still need attention: ${voiceSaveError}`
908
- : null;
909
- const customizationActionLabel = customOverridesEnabled
910
- ? t("characterview.backToCharacterSelect")
911
- : t("characterview.customize");
912
- const rootCls =
913
- sceneOverlay && !inModal
914
- ? "relative z-10 flex min-h-full flex-col justify-end pb-4"
915
- : `${inModal || sceneOverlay ? "pb-8" : ""} ${sceneOverlay ? "relative z-10" : ""
916
- }`;
917
-
918
- return (
919
- <div className={rootCls}>
920
- {/* ═══ ON-CHAIN IDENTITY ═══ */}
921
- {hasWallet && (
922
- <div className={sectionCls}>
923
- {!isRegistered && !dropLive && (
924
- <div className="flex flex-col gap-3">
925
- <div className="text-[12px] text-[var(--muted)]">
926
- {t("characterview.RegisterYourAgent")}
927
- </div>
928
- <div className="flex items-center gap-2">
929
- <button
930
- type="button"
931
- className="btn text-xs py-[5px] px-4 !mt-0 cursor-pointer"
932
- disabled={registryRegistering || registryLoading}
933
- onClick={() => void registerOnChain()}
934
- >
935
- {registryRegistering ? "registering..." : "register now"}
936
- </button>
937
- {registryError && (
938
- <span className="text-xs text-[var(--danger,#e74c3c)]">
939
- {registryError}
940
- </span>
941
- )}
942
- </div>
943
- </div>
944
- )}
945
- </div>
946
- )}
947
-
948
- {isRegistered &&
949
- (() => {
950
- const currentName = characterDraft?.name || d.name || "";
951
- const onChainName = registryStatus.agentName || "";
952
- const nameOutOfSync =
953
- currentName && onChainName && currentName !== onChainName;
954
- return (
955
- <div className={sectionCls}>
956
- <div className="flex flex-col gap-2">
957
- <div className="flex items-center gap-2 text-[12px]">
958
- <span className="text-green-400 font-bold tracking-wide">
959
- {t("characterview.Registered")}
960
- </span>
961
- <span className="text-muted/50">|</span>
962
- <span className="text-muted font-medium">
963
- {t("characterview.Token")}
964
- {registryStatus.tokenId}
965
- </span>
966
- <span className="text-muted/50">|</span>
967
- <span className="text-txt font-semibold">{onChainName}</span>
968
- </div>
969
- {nameOutOfSync && (
970
- <div className="flex items-center gap-3 bg-amber-400/10 border border-amber-400/20 px-3 py-2 rounded-lg">
971
- <span className="text-[11px] text-amber-400/80 font-medium tracking-wide">
972
- {t("characterview.OnChainName")}{" "}
973
- <strong className="text-amber-400">{onChainName}</strong>{" "}
974
- {t("characterview.DiffersFrom")}{" "}
975
- <strong className="text-amber-400">{currentName}"</strong>
976
- </span>
977
- <Button
978
- variant="outline"
979
- size="sm"
980
- className="text-[10px] h-6 px-2.5 border-amber-400/50 text-amber-400 hover:bg-amber-400/20 transition-all font-bold"
981
- disabled={registryRegistering}
982
- onClick={() => void syncRegistryProfile()}
983
- >
984
- {registryRegistering ? "syncing..." : "sync to chain"}
985
- </Button>
986
- </div>
987
- )}
988
- {registryError && (
989
- <span className="text-xs text-[var(--danger,#e74c3c)]">
990
- {registryError}
991
- </span>
992
- )}
993
- <a
994
- href={`https://etherscan.io/token/${registryStatus.walletAddress}`}
995
- target="_blank"
996
- rel="noopener noreferrer"
997
- className="text-[11px] underline text-[var(--accent)]"
998
- >
999
- {t("characterview.viewOnEtherscan")}
1000
- </a>
1001
- </div>
1002
- </div>
1003
- );
1004
- })()}
1005
-
1006
- {hasWallet && userMinted && !isRegistered && (
1007
- <div className={sectionCls}>
1008
- <div className="text-[12px] text-[var(--ok,#16a34a)]">
1009
- {t("characterview.MintedFromCollecti")}
1010
- </div>
1011
- </div>
1012
- )}
1013
-
1014
- {!customOverridesEnabled ? (
1015
- <CharacterRoster
1016
- entries={visibleCharacterRoster}
1017
- selectedId={selectedCharacterId}
1018
- onSelect={handleSelectCharacter}
1019
- variant={sceneOverlay ? "onboarding" : "editor"}
1020
- testIdPrefix="character"
1021
- />
1022
- ) : null}
1023
-
1024
- {customOverridesEnabled && (
1025
- <div className="mt-3 flex justify-end">
1026
- {/* ── Book container ── */}
1027
- <div
1028
- className={notebookShellCls}
1029
- data-testid="character-notebook"
1030
- >
1031
- <div className="pointer-events-none absolute inset-x-5 bottom-[-1.2rem] top-6 rounded-[1.9rem] bg-[linear-gradient(180deg,rgba(35,27,18,0.12)_0%,rgba(16,12,9,0.32)_100%)] dark:bg-[linear-gradient(180deg,rgba(0,0,0,0.3)_0%,rgba(0,0,0,0.5)_100%)] blur-xl" />
1032
- <div className="pointer-events-none absolute inset-[0.35rem] translate-x-2 translate-y-2 rounded-[1.9rem] border border-[#d7c5a4]/50 bg-[linear-gradient(180deg,rgba(251,246,235,0.86)_0%,rgba(236,224,198,0.7)_100%)] dark:border-white/10 dark:bg-[linear-gradient(180deg,rgba(38,38,40,0.9)_0%,rgba(28,28,30,0.8)_100%)] shadow-[0_12px_26px_rgba(62,44,21,0.12)]" />
1033
- <div className="pointer-events-none absolute bottom-[-0.95rem] left-8 h-14 w-4 rounded-b-sm bg-[linear-gradient(180deg,#ddb45e_0%,#be8530_100%)] [clip-path:polygon(0_0,100%_0,100%_78%,50%_100%,0_78%)] shadow-[0_10px_20px_rgba(141,97,34,0.28)]" />
1034
- <div className={notebookFrameCls}>
1035
- <div className="pointer-events-none absolute left-4 top-4 h-2 w-2 rounded-full border border-[#d8c295]/70 bg-[#fff9eb]/85 shadow-[0_0_0_2px_rgba(150,116,61,0.08)] dark:border-white/20 dark:bg-white/10 dark:shadow-[0_0_0_2px_rgba(255,255,255,0.05)]" />
1036
- <div className="pointer-events-none absolute bottom-4 left-4 h-2 w-2 rounded-full border border-[#d8c295]/70 bg-[#fff9eb]/85 shadow-[0_0_0_2px_rgba(150,116,61,0.08)] dark:border-white/20 dark:bg-white/10 dark:shadow-[0_0_0_2px_rgba(255,255,255,0.05)]" />
1037
- <div className="pointer-events-none absolute right-4 top-4 h-2 w-2 rounded-full border border-white/10 bg-white/10 shadow-[0_0_0_2px_rgba(255,255,255,0.03)]" />
1038
- <div className="pointer-events-none absolute bottom-4 right-4 h-2 w-2 rounded-full border border-white/10 bg-white/10 shadow-[0_0_0_2px_rgba(255,255,255,0.03)]" />
1039
- <div className="pointer-events-none absolute inset-x-0 bottom-0 h-14 bg-[linear-gradient(180deg,rgba(0,0,0,0)_0%,rgba(104,77,39,0.07)_100%)] dark:bg-[linear-gradient(180deg,rgba(0,0,0,0)_0%,rgba(0,0,0,0.15)_100%)]" />
1040
- <div className="pointer-events-none absolute bottom-3 right-[4.95rem] top-3 w-[0.7rem] rounded-full bg-[linear-gradient(90deg,rgba(116,92,55,0.16)_0%,rgba(255,255,255,0.5)_45%,rgba(112,88,52,0.2)_100%)] shadow-[inset_0_0_7px_rgba(89,67,37,0.16),0_0_18px_rgba(255,246,220,0.16)] dark:bg-[linear-gradient(90deg,rgba(255,255,255,0.05)_0%,rgba(255,255,255,0.15)_45%,rgba(255,255,255,0.05)_100%)] dark:shadow-[inset_0_0_7px_rgba(0,0,0,0.3),0_0_18px_rgba(255,255,255,0.05)]" />
1041
- {/* ── Book page (left) ── */}
1042
- <div
1043
- className={`${bookPageCls} flex flex-1 flex-col rounded-l-[1.75rem] border-r border-[#cdbb98]/60 text-[#1e2329] dark:border-white/[0.08] dark:text-[hsl(40,10%,84%)]`}
1044
- >
1045
- <div className="pointer-events-none absolute inset-[0.7rem] rounded-[1.25rem] border border-[#efe3cc]/85 shadow-[inset_0_0_0_1px_rgba(207,184,141,0.24)] dark:border-white/5 dark:shadow-[inset_0_0_0_1px_rgba(255,255,255,0.03)]" />
1046
- <div className="pointer-events-none absolute inset-0 bg-[radial-gradient(circle_at_top_left,rgba(255,255,255,0.72)_0%,rgba(255,255,255,0)_36%),linear-gradient(180deg,rgba(255,255,255,0.14)_0%,rgba(255,255,255,0)_24%),repeating-linear-gradient(0deg,rgba(168,139,87,0.035)_0px,rgba(168,139,87,0.035)_1px,transparent_1px,transparent_11px)] opacity-85 dark:opacity-25" />
1047
- <div className="pointer-events-none absolute bottom-0 right-0 top-0 w-5 bg-[linear-gradient(90deg,rgba(123,98,61,0)_0%,rgba(123,98,61,0.08)_55%,rgba(255,255,255,0.14)_100%)] dark:bg-[linear-gradient(90deg,rgba(255,255,255,0)_0%,rgba(255,255,255,0.03)_60%,rgba(255,255,255,0.08)_100%)]" />
1048
- {/* Mode toggle: Core / Examples */}
1049
- <div className="relative z-10 flex items-end gap-2 bg-[linear-gradient(180deg,rgba(255,255,255,0.26)_0%,rgba(255,255,255,0)_100%)] px-5 pb-3 pt-4 dark:bg-[linear-gradient(180deg,rgba(255,255,255,0.06)_0%,rgba(255,255,255,0)_100%)]">
1050
- <button
1051
- type="button"
1052
- className={`relative h-9 rounded-b-md rounded-t-[1rem] border px-3.5 text-[10px] font-bold uppercase tracking-[0.18em] transition-all ${customizeStep === "core"
1053
- ? "border-[#c59b47] bg-[linear-gradient(180deg,#f4cf79_0%,#d69f45_100%)] text-[#2d2418] shadow-[0_10px_18px_rgba(137,97,36,0.22)]"
1054
- : "border-[#d4c6ad]/90 bg-[linear-gradient(180deg,rgba(255,252,245,0.96)_0%,rgba(243,235,222,0.82)_100%)] text-[#7b7365] shadow-[inset_0_1px_0_rgba(255,255,255,0.75)] hover:bg-[linear-gradient(180deg,rgba(255,255,255,0.98)_0%,rgba(248,240,226,0.9)_100%)] dark:border-white/10 dark:bg-[linear-gradient(180deg,rgba(255,255,255,0.1)_0%,rgba(255,255,255,0.04)_100%)] dark:text-muted dark:shadow-none dark:hover:bg-[linear-gradient(180deg,rgba(255,255,255,0.14)_0%,rgba(255,255,255,0.05)_100%)]"
1055
- }`}
1056
- onClick={() => setCustomizeStep("core")}
1057
- >
1058
- {t("characterview.core")}
1059
- </button>
1060
- {activeSection !== "styleRules" && (
1061
- <button
1062
- type="button"
1063
- className={`relative h-9 rounded-b-md rounded-t-[1rem] border px-3.5 text-[10px] font-bold uppercase tracking-[0.18em] transition-all ${customizeStep === "examples"
1064
- ? "border-[#c59b47] bg-[linear-gradient(180deg,#f4cf79_0%,#d69f45_100%)] text-[#2d2418] shadow-[0_10px_18px_rgba(137,97,36,0.22)]"
1065
- : "border-[#d4c6ad]/90 bg-[linear-gradient(180deg,rgba(255,252,245,0.96)_0%,rgba(243,235,222,0.82)_100%)] text-[#7b7365] shadow-[inset_0_1px_0_rgba(255,255,255,0.75)] hover:bg-[linear-gradient(180deg,rgba(255,255,255,0.98)_0%,rgba(248,240,226,0.9)_100%)] dark:border-white/10 dark:bg-[linear-gradient(180deg,rgba(255,255,255,0.1)_0%,rgba(255,255,255,0.04)_100%)] dark:text-muted dark:shadow-none dark:hover:bg-[linear-gradient(180deg,rgba(255,255,255,0.14)_0%,rgba(255,255,255,0.05)_100%)]"
1066
- }`}
1067
- onClick={() => setCustomizeStep("examples")}
1068
- >
1069
- {t("characterview.examples")}
1070
- </button>
1071
- )}
1072
- <div className="pointer-events-none absolute inset-x-4 bottom-0 h-px bg-[linear-gradient(90deg,rgba(209,193,165,0)_0%,rgba(209,193,165,0.92)_10%,rgba(209,193,165,0.92)_90%,rgba(209,193,165,0)_100%)] dark:bg-[linear-gradient(90deg,rgba(255,255,255,0)_0%,rgba(255,255,255,0.08)_10%,rgba(255,255,255,0.08)_90%,rgba(255,255,255,0)_100%)]" />
1073
- </div>
1074
-
1075
- {/* Content area */}
1076
- <div className="relative z-10 flex flex-1 flex-col overflow-y-auto p-5 custom-scrollbar" role="tabpanel" aria-labelledby={`notebook-tab-${activeSection}`}>
1077
- {/* ── About Me (Core) ── */}
1078
- {activeSection === "aboutMe" && customizeStep === "core" && (
1079
- <div className="flex flex-1 flex-col gap-3" data-testid="character-core-editor">
1080
- {/* Name */}
1081
- <div className="flex flex-col gap-1.5">
1082
- <span className="text-xs font-medium text-[#6d737a] dark:text-muted">Name</span>
1083
- <Input
1084
- type="text"
1085
- value={d.name ?? ""}
1086
- placeholder="Agent name"
1087
- onChange={(e) => handleFieldEdit("name", e.target.value)}
1088
- className="h-8 rounded-lg border-[#d6d3c6] dark:border-border/40 bg-white/60 dark:bg-white/5 text-sm text-[#1e2329] dark:text-[hsl(40,10%,84%)] focus-visible:border-accent focus-visible:ring-accent/50"
1089
- />
1090
- </div>
1091
-
1092
- {/* Avatar */}
1093
- <div className="flex flex-col gap-1.5">
1094
- <span className="text-xs font-medium text-[#6d737a] dark:text-muted">Avatar</span>
1095
- <AvatarSelector
1096
- selected={selectedVrmIndex}
1097
- onSelect={(index: number) => setState("selectedVrmIndex", index)}
1098
- onUpload={handleCustomVrmUpload}
1099
- showUpload={true}
1100
- fullWidth={true}
1101
- />
1102
- </div>
1103
-
1104
- <div className="flex items-center justify-between">
1105
- <span className="text-xs font-medium text-[#6d737a] dark:text-muted">{t("characterview.aboutMe")}</span>
1106
- <Button
1107
- variant="ghost"
1108
- size="sm"
1109
- className="h-6 rounded-md px-2 text-[10px] font-bold text-accent"
1110
- onClick={() => void handleGenerate("bio")}
1111
- disabled={generating === "bio"}
1112
- >
1113
- {generating === "bio" ? "generating..." : "regenerate"}
1114
- </Button>
1115
- </div>
1116
- <Textarea
1117
- value={bioText}
1118
- placeholder={t("characterview.describeWhoYourAg")}
1119
- onChange={(e) => handleFieldEdit("bio", e.target.value)}
1120
- className="flex-1 resize-none overflow-y-auto rounded-lg border-[#d6d3c6] dark:border-border/40 bg-white/60 dark:bg-white/5 p-3 font-mono text-xs leading-relaxed text-[#1e2329] dark:text-[hsl(40,10%,84%)] focus-visible:border-accent focus-visible:ring-accent/50"
1121
- />
1122
- </div>
1123
- )}
1124
-
1125
- {/* ── Directions (Core) ── */}
1126
- {activeSection === "directions" && customizeStep === "core" && (
1127
- <div className="flex flex-1 flex-col gap-3">
1128
- <div className="flex items-center justify-between">
1129
- <span className="text-xs font-medium text-[#6d737a] dark:text-muted">{t("characterview.directionsAndThing")}</span>
1130
- <Button
1131
- variant="ghost"
1132
- size="sm"
1133
- className="h-6 rounded-md px-2 text-[10px] font-bold text-accent"
1134
- onClick={() => void handleGenerate("system")}
1135
- disabled={generating === "system"}
1136
- >
1137
- {generating === "system" ? "generating..." : "regenerate"}
1138
- </Button>
1139
- </div>
1140
- <Textarea
1141
- value={d.system ?? ""}
1142
- maxLength={10000}
1143
- placeholder={t("characterview.writeInFirstPerso")}
1144
- onChange={(e) => handleFieldEdit("system", e.target.value)}
1145
- className="flex-1 resize-none overflow-y-auto rounded-lg border-[#d6d3c6] dark:border-border/40 bg-white/60 dark:bg-white/5 p-3 font-mono text-xs leading-relaxed text-[#1e2329] dark:text-[hsl(40,10%,84%)] focus-visible:border-accent focus-visible:ring-accent/50"
1146
- />
1147
- </div>
1148
- )}
1149
-
1150
- {/* ── Style Rules (Core) ── */}
1151
- {activeSection === "styleRules" && customizeStep === "core" && (
1152
- <div className="flex flex-col gap-3" data-testid="character-style-editor">
1153
- <div className="flex items-center justify-between">
1154
- <span className="text-xs font-medium text-[#6d737a] dark:text-muted">{t("characterview.StyleRules")}</span>
1155
- <Button
1156
- variant="ghost"
1157
- size="sm"
1158
- className="h-6 rounded-md px-2 text-[10px] font-bold text-accent"
1159
- onClick={() => void handleGenerate("style", "replace")}
1160
- disabled={generating === "style"}
1161
- >
1162
- {generating === "style" ? "generating..." : "regenerate"}
1163
- </Button>
1164
- </div>
1165
- {STYLE_SECTION_KEYS.map((key) => {
1166
- const items = d.style?.[key] ?? [];
1167
- return (
1168
- <div
1169
- key={key}
1170
- className="flex flex-col gap-1.5"
1171
- data-testid={`style-section-${key}`}
1172
- >
1173
- <div className="flex items-center gap-2 border-b border-[#d6d3c6]/60 dark:border-border/30 pb-1">
1174
- <span className="text-[10px] font-bold uppercase tracking-widest text-[#6d737a] dark:text-muted">{key}</span>
1175
- <span className="text-[9px] font-medium uppercase tracking-wider text-[#9ca3af] dark:text-muted/60">
1176
- {items.length} rule{items.length === 1 ? "" : "s"}
1177
- </span>
1178
- </div>
1179
- <div className={`${scrollPaneCls} max-h-[12rem]`}>
1180
- <div className="flex flex-col gap-1">
1181
- {items.length > 0 ? (
1182
- items.map((item, index) => (
1183
- <div
1184
- key={getStyleEntryRenderKey(key, items, item, index)}
1185
- className="group flex items-start gap-2 rounded-md border border-[#d6d3c6]/40 dark:border-border/20 bg-white/50 dark:bg-white/3 px-2.5 py-2"
1186
- data-testid={`style-entry-${key}-${index}`}
1187
- >
1188
- <span className="mt-0.5 shrink-0 text-[10px] font-bold text-accent">
1189
- {index + 1}
1190
- </span>
1191
- <Textarea
1192
- value={styleEntryDrafts[key]?.[index] ?? item}
1193
- rows={1}
1194
- onChange={(e) => handleStyleEntryDraftChange(key, index, e.target.value)}
1195
- onBlur={() => handleCommitStyleEntry(key, index)}
1196
- className="min-h-[2rem] min-w-0 flex-1 resize-none rounded border-0 bg-transparent p-0 font-mono text-xs leading-relaxed text-[#1e2329] dark:text-[hsl(40,10%,84%)] focus-visible:ring-0"
1197
- data-testid={`style-entry-editor-${key}-${index}`}
1198
- />
1199
- <button
1200
- type="button"
1201
- className="mt-0.5 shrink-0 text-[#9ca3af] opacity-0 transition-opacity group-hover:opacity-100 hover:text-red-500"
1202
- onClick={() => handleRemoveStyleEntry(key, index)}
1203
- title={t("characterview.remove")}
1204
- >
1205
- <svg width="10" height="10" viewBox="0 0 10 10" fill="none" stroke="currentColor" strokeWidth="1.5" strokeLinecap="round"><path d="M2 2l6 6M8 2l-6 6" /></svg>
1206
- </button>
1207
- </div>
1208
- ))
1209
- ) : (
1210
- <div className="rounded-md border border-dashed border-[#d6d3c6]/60 dark:border-border/30 px-3 py-2 text-[11px] text-[#9ca3af] dark:text-muted">
1211
- {STYLE_SECTION_EMPTY_STATES[key]}
1212
- </div>
1213
- )}
1214
- </div>
1215
- </div>
1216
- <div className="flex items-center gap-2">
1217
- <Input
1218
- type="text"
1219
- value={pendingStyleEntries[key]}
1220
- placeholder={STYLE_SECTION_PLACEHOLDERS[key]}
1221
- onChange={(e) => handlePendingStyleEntryChange(key, e.target.value)}
1222
- onKeyDown={(e) => {
1223
- if (e.key === "Enter") {
1224
- e.preventDefault();
1225
- handleAddStyleEntry(key);
1226
- }
1227
- }}
1228
- className="h-7 min-w-0 flex-1 rounded-md border-[#d6d3c6]/60 dark:border-border/30 bg-white/50 dark:bg-white/5 text-xs text-[#1e2329] dark:text-[hsl(40,10%,84%)] focus-visible:border-accent focus-visible:ring-accent/50"
1229
- data-testid={`style-entry-input-${key}`}
1230
- />
1231
- <Button
1232
- variant="ghost"
1233
- size="sm"
1234
- className="h-7 shrink-0 rounded-md px-2 text-[10px] font-bold text-accent"
1235
- onClick={() => handleAddStyleEntry(key)}
1236
- disabled={!pendingStyleEntries[key].trim()}
1237
- >
1238
- + add
1239
- </Button>
1240
- </div>
1241
- </div>
1242
- );
1243
- })}
1244
- </div>
1245
- )}
1246
-
1247
- {/* ── Chat Examples (About Me + Examples mode) ── */}
1248
- {activeSection === "aboutMe" && customizeStep === "examples" && (
1249
- <div className="flex flex-col gap-2" data-testid="character-chat-examples-card">
1250
- <div className="flex items-center justify-between">
1251
- <span className="text-xs font-medium text-[#6d737a] dark:text-muted">{t("characterview.chatExamples")}</span>
1252
- <Button
1253
- variant="ghost"
1254
- size="sm"
1255
- className="h-6 rounded-md px-2 text-[10px] font-bold text-accent"
1256
- onClick={() => void handleGenerate("chatExamples", "replace")}
1257
- disabled={generating === "chatExamples"}
1258
- >
1259
- {generating === "chatExamples" ? "generating..." : "generate"}
1260
- </Button>
1261
- </div>
1262
- <div className={`${scrollPaneCls} flex flex-col gap-2`}>
1263
- {(d.messageExamples ?? []).map((convo, ci) => (
1264
- <div
1265
- key={convo.examples.map((msg) => `${msg.name}:${msg.content?.text ?? ""}`).join("|")}
1266
- className="rounded-lg border border-[#d6d3c6]/40 dark:border-border/30 p-2.5"
1267
- >
1268
- <div className="mb-2 flex items-center justify-between">
1269
- <span className="text-[9px] font-bold uppercase tracking-widest text-[#9ca3af] dark:text-muted/60">
1270
- {t("characterview.conversation")} {ci + 1}
1271
- </span>
1272
- <button
1273
- type="button"
1274
- className="text-[#9ca3af] hover:text-red-500 transition-colors"
1275
- onClick={() => {
1276
- const updated = [...(d.messageExamples ?? [])];
1277
- updated.splice(ci, 1);
1278
- handleFieldEdit("messageExamples", updated);
1279
- }}
1280
- >
1281
- <svg width="10" height="10" viewBox="0 0 10 10" fill="none" stroke="currentColor" strokeWidth="1.5" strokeLinecap="round"><path d="M2 2l6 6M8 2l-6 6" /></svg>
1282
- </button>
1283
- </div>
1284
- <div className="flex flex-col gap-1.5">
1285
- {convo.examples.map((msg, mi) => (
1286
- <div key={`${msg.name}:${msg.content?.text ?? ""}`} className="flex items-center gap-2">
1287
- <span className={`w-10 shrink-0 text-right text-[9px] font-bold uppercase tracking-wider ${msg.name === "{{user1}}" ? "text-[#9ca3af] dark:text-muted" : "text-accent"}`}>
1288
- {msg.name === "{{user1}}" ? "user" : "agent"}
1289
- </span>
1290
- <input
1291
- type="text"
1292
- value={msg.content?.text ?? ""}
1293
- onChange={(e) => {
1294
- const updated = [...(d.messageExamples ?? [])];
1295
- const convoClone = { examples: [...updated[ci].examples] };
1296
- convoClone.examples[mi] = { ...convoClone.examples[mi], content: { text: e.target.value } };
1297
- updated[ci] = convoClone;
1298
- handleFieldEdit("messageExamples", updated);
1299
- }}
1300
- className="h-7 flex-1 rounded-md border border-[#d6d3c6]/40 dark:border-border/30 bg-white/60 dark:bg-white/5 px-2 font-mono text-[11px] text-[#1e2329] dark:text-[hsl(40,10%,84%)] outline-none focus:border-accent"
1301
- />
1302
- </div>
1303
- ))}
1304
- </div>
1305
- </div>
1306
- ))}
1307
- {(d.messageExamples ?? []).length === 0 && (
1308
- <div className="rounded-md border border-dashed border-[#d6d3c6]/60 dark:border-border/30 py-2 text-center text-[11px] text-[#9ca3af] dark:text-muted">
1309
- {t("characterview.noChatExamplesYet")}
1310
- </div>
1311
- )}
1312
- </div>
1313
- </div>
1314
- )}
1315
-
1316
- {/* ── Post Examples (Directions + Examples mode) ── */}
1317
- {activeSection === "directions" && customizeStep === "examples" && (
1318
- <div className="flex flex-col gap-2" data-testid="character-post-examples-card">
1319
- <div className="flex items-center justify-between">
1320
- <span className="text-xs font-medium text-[#6d737a] dark:text-muted">{t("characterview.postExamples")}</span>
1321
- <Button
1322
- variant="ghost"
1323
- size="sm"
1324
- className="h-6 rounded-md px-2 text-[10px] font-bold text-accent"
1325
- onClick={() => void handleGenerate("postExamples", "replace")}
1326
- disabled={generating === "postExamples"}
1327
- >
1328
- {generating === "postExamples" ? "generating..." : "generate"}
1329
- </Button>
1330
- </div>
1331
- <div className={`${scrollPaneCls} flex flex-col gap-1.5`}>
1332
- {(d.postExamples ?? []).map((post: string, pi: number) => (
1333
- <div key={post || `post-${pi}`} className="group flex items-center gap-1.5">
1334
- <input
1335
- type="text"
1336
- value={post}
1337
- onChange={(e) => {
1338
- const updated = [...(d.postExamples ?? [])];
1339
- updated[pi] = e.target.value;
1340
- handleFieldEdit("postExamples", updated);
1341
- }}
1342
- className="h-7 flex-1 rounded-md border border-[#d6d3c6]/40 dark:border-border/30 bg-white/60 dark:bg-white/5 px-2 font-mono text-[11px] text-[#1e2329] dark:text-[hsl(40,10%,84%)] outline-none focus:border-accent"
1343
- />
1344
- <button
1345
- type="button"
1346
- className="shrink-0 text-[#9ca3af] opacity-0 transition-opacity group-hover:opacity-100 hover:text-red-500"
1347
- onClick={() => {
1348
- const updated = [...(d.postExamples ?? [])];
1349
- updated.splice(pi, 1);
1350
- handleFieldEdit("postExamples", updated);
1351
- }}
1352
- >
1353
- <svg width="10" height="10" viewBox="0 0 10 10" fill="none" stroke="currentColor" strokeWidth="1.5" strokeLinecap="round"><path d="M2 2l6 6M8 2l-6 6" /></svg>
1354
- </button>
1355
- </div>
1356
- ))}
1357
- {(d.postExamples ?? []).length === 0 && (
1358
- <div className="rounded-md border border-dashed border-[#d6d3c6]/60 dark:border-border/30 py-2 text-center text-[11px] text-[#9ca3af] dark:text-muted">
1359
- {t("characterview.noPostExamplesYet")}
1360
- </div>
1361
- )}
1362
- </div>
1363
- <div className="border-t border-[#d6d3c6]/40 dark:border-border/30 pt-2">
1364
- <button
1365
- type="button"
1366
- className="text-[10px] font-bold text-accent hover:underline"
1367
- onClick={() => {
1368
- const updated = [...(d.postExamples ?? []), ""];
1369
- handleFieldEdit("postExamples", updated);
1370
- }}
1371
- >
1372
- {t("characterview.AddPost")}
1373
- </button>
1374
- </div>
1375
- </div>
1376
- )}
1377
- </div>
1378
- </div>
1379
-
1380
- {/* ── Sidebar (right) ── */}
1381
- <div
1382
- className={`${bookSidebarCls} flex w-20 flex-col items-center rounded-r-[1.75rem] border-l border-white/[0.08] py-3`}
1383
- role="tablist"
1384
- aria-orientation="vertical"
1385
- >
1386
- <div className="pointer-events-none absolute inset-x-2 top-2 h-10 rounded-full bg-[linear-gradient(180deg,rgba(255,255,255,0.12)_0%,rgba(255,255,255,0)_100%)] blur-sm" />
1387
- <div className="pointer-events-none absolute inset-y-0 left-0 w-px bg-white/[0.08]" />
1388
- <div className="pointer-events-none absolute inset-y-0 right-0 w-px bg-black/35" />
1389
- {SIDEBAR_TABS.map(({ key, icon: Icon, labelKey }) => {
1390
- const isActive = activeSection === key;
1391
- return (
1392
- <button
1393
- key={key}
1394
- type="button"
1395
- role="tab"
1396
- aria-selected={isActive}
1397
- className={`relative flex w-full items-center justify-center px-2 py-3.5 transition-colors border-b border-white/[0.06] last:border-b-0 ${isActive ? "text-[#f7e7bf]" : "text-[#999da7] hover:text-white/80"
1398
- }`}
1399
- onClick={() => {
1400
- setActiveSection(key);
1401
- if (key === "styleRules" && customizeStep === "examples") {
1402
- setCustomizeStep("core");
1403
- }
1404
- }}
1405
- onKeyDown={(e) => {
1406
- const keys = SIDEBAR_TABS.map((tab) => tab.key);
1407
- const idx = keys.indexOf(key);
1408
- if (e.key === "ArrowDown") {
1409
- e.preventDefault();
1410
- const next = keys[(idx + 1) % keys.length];
1411
- setActiveSection(next);
1412
- } else if (e.key === "ArrowUp") {
1413
- e.preventDefault();
1414
- const prev = keys[(idx - 1 + keys.length) % keys.length];
1415
- setActiveSection(prev);
1416
- }
1417
- }}
1418
- id={`notebook-tab-${key}`}
1419
- data-testid={`notebook-tab-${key}`}
1420
- >
1421
- {isActive && (
1422
- <div className="absolute inset-y-2 left-0 w-[4px] rounded-r-full bg-[#d4a14c] shadow-[0_0_12px_rgba(212,161,76,0.45)]" />
1423
- )}
1424
- <div className="relative z-10 flex flex-col items-center gap-1.5">
1425
- <div
1426
- className={`flex h-10 w-10 items-center justify-center rounded-full border transition-all ${isActive
1427
- ? "border-[#f0ce85]/55 bg-[radial-gradient(circle_at_30%_30%,rgba(255,236,195,0.28)_0%,rgba(255,236,195,0.05)_42%,rgba(255,255,255,0)_100%)] shadow-[0_0_18px_rgba(220,176,90,0.22)]"
1428
- : "border-white/10 bg-white/[0.03]"
1429
- }`}
1430
- >
1431
- <Icon className="h-4.5 w-4.5" />
1432
- </div>
1433
- <span className="max-w-[4.1rem] text-center text-[8px] font-semibold uppercase tracking-[0.16em] leading-[1.22]">
1434
- {t(labelKey)}
1435
- </span>
1436
- </div>
1437
- </button>
1438
- );
1439
- })}
1440
- </div>
1441
- </div>
1442
- </div>
1443
- </div>
1444
- )}
1445
-
1446
- <div className={`${sectionCls} relative z-10 ${sceneOverlay ? "character-action-bar" : ""}`}>
1447
- {(characterSaveSuccess || combinedSaveError || saveAdvisory) && (
1448
- <div className="mb-3 flex flex-wrap items-center justify-center gap-2">
1449
- {characterSaveSuccess && (
1450
- <span className="rounded-lg border border-green-400/20 bg-green-400/10 px-3 py-1.5 text-xs font-bold text-green-400">
1451
- {characterSaveSuccess}
1452
- </span>
1453
- )}
1454
- {saveAdvisory && (
1455
- <span className="rounded-lg border border-amber-400/20 bg-amber-400/10 px-3 py-1.5 text-xs font-medium text-amber-300">
1456
- {saveAdvisory}
1457
- </span>
1458
- )}
1459
- {combinedSaveError && (
1460
- <span className="rounded-lg border border-danger/20 bg-danger/10 px-3 py-1.5 text-xs font-medium text-danger">
1461
- {combinedSaveError}
1462
- </span>
1463
- )}
1464
- </div>
1465
- )}
1466
-
1467
- <div className="flex min-h-10 flex-row items-center justify-between gap-2">
1468
- <div className="flex items-center justify-start">
1469
- <div
1470
- className="flex min-w-0 items-center gap-2"
1471
- data-testid="character-voice-picker"
1472
- >
1473
- <Button
1474
- type="button"
1475
- variant={voiceSelectionLocked ? "default" : "outline"}
1476
- size="icon"
1477
- className="h-8 w-8 rounded-full border-border/50 bg-bg/65 p-0 shadow-inner backdrop-blur-sm"
1478
- onClick={() => setVoiceSelectionLocked((value) => !value)}
1479
- aria-label={
1480
- voiceSelectionLocked
1481
- ? "Unlock voice selection"
1482
- : "Lock voice selection"
1483
- }
1484
- title={
1485
- voiceSelectionLocked
1486
- ? "Voice stays pinned when switching characters"
1487
- : "Lock current voice"
1488
- }
1489
- >
1490
- {voiceSelectionLocked ? (
1491
- <Lock className="h-3.5 w-3.5" />
1492
- ) : (
1493
- <LockOpen className="h-3.5 w-3.5" />
1494
- )}
1495
- </Button>
1496
- <ThemedSelect
1497
- value={voiceSelectValue}
1498
- groups={VOICE_SELECT_GROUPS}
1499
- onChange={(id) => {
1500
- const preset = PREMADE_VOICES.find(
1501
- (voicePreset) => voicePreset.id === id,
1502
- );
1503
- if (preset) handleSelectPreset(preset);
1504
- }}
1505
- placeholder={t("characterview.selectAVoice")}
1506
- menuPlacement="top"
1507
- className="min-w-0 w-[7rem] sm:w-[11rem]"
1508
- triggerClassName="h-8 rounded-full border-border/50 bg-bg/65 px-4 py-0 text-[11px] shadow-inner backdrop-blur-sm"
1509
- menuClassName="border-border/60 bg-bg/92 shadow-2xl backdrop-blur-md"
1510
- />
1511
- <Button
1512
- type="button"
1513
- variant={voiceTesting ? "destructive" : "outline"}
1514
- size="icon"
1515
- className="h-8 w-8 rounded-full border-border/50 bg-bg/65 p-0 shadow-inner backdrop-blur-sm"
1516
- onClick={() =>
1517
- voiceTesting
1518
- ? handleStopTest()
1519
- : activeVoicePreset
1520
- ? handleTestVoice(activeVoicePreset.previewUrl)
1521
- : undefined
1522
- }
1523
- aria-label={voiceTesting ? "Stop voice preview" : "Preview voice"}
1524
- title={voiceTesting ? "Stop voice preview" : "Preview voice"}
1525
- disabled={!activeVoicePreset || voiceLoading}
1526
- >
1527
- {voiceTesting ? (
1528
- <VolumeX className="h-3.5 w-3.5" />
1529
- ) : (
1530
- <Volume2 className="h-3.5 w-3.5" />
1531
- )}
1532
- </Button>
1533
- </div>
1534
- </div>
1535
-
1536
- <div className="flex items-center">
1537
- <Button
1538
- size="lg"
1539
- className="ce-save-btn"
1540
- disabled={characterSaving || voiceSaving}
1541
- onClick={() => void handleSaveAll()}
1542
- >
1543
- {characterSaving || voiceSaving ? (
1544
- "saving..."
1545
- ) : (
1546
- <>
1547
- <span className="hidden sm:inline">Save Character</span>
1548
- <span className="sm:hidden">Save</span>
1549
- </>
1550
- )}
1551
- </Button>
1552
- </div>
1553
-
1554
- <div className="flex items-center justify-end">
1555
- <Button
1556
- type="button"
1557
- variant={customOverridesEnabled ? "outline" : "default"}
1558
- size="sm"
1559
- className={`ce-customize-btn ${customOverridesEnabled
1560
- ? "border-border/40 bg-bg/40 text-txt"
1561
- : ""
1562
- }`}
1563
- onClick={() =>
1564
- handleCustomOverridesChange(!customOverridesEnabled)
1565
- }
1566
- data-testid="character-customize-toggle"
1567
- >
1568
- {customizationActionLabel}
1569
- </Button>
1570
- </div>
1571
- </div>
1572
- </div>
1573
- </div>
1574
- );
1575
- }