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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1108) hide show
  1. package/{dist/actions → actions}/character.d.ts +2 -2
  2. package/{dist/actions → actions}/character.d.ts.map +1 -1
  3. package/{dist/actions → actions}/cloud.d.ts +2 -2
  4. package/{dist/actions → actions}/cloud.d.ts.map +1 -1
  5. package/{dist/actions → actions}/lifecycle.d.ts +3 -3
  6. package/{dist/actions → actions}/lifecycle.d.ts.map +1 -1
  7. package/{dist/actions → actions}/lifecycle.js +1 -1
  8. package/{dist/actions → actions}/triggers.d.ts +2 -2
  9. package/{dist/actions → actions}/triggers.d.ts.map +1 -1
  10. package/{dist/api → api}/client.d.ts +5 -5
  11. package/{dist/api → api}/client.d.ts.map +1 -1
  12. package/{dist/api → api}/client.js +20 -20
  13. package/{dist/bridge → bridge}/capacitor-bridge.d.ts +10 -10
  14. package/{dist/bridge → bridge}/capacitor-bridge.d.ts.map +1 -1
  15. package/{dist/bridge → bridge}/capacitor-bridge.js +7 -7
  16. package/{dist/bridge → bridge}/electrobun-rpc.js +1 -1
  17. package/{dist/bridge → bridge}/plugin-bridge.d.ts +4 -4
  18. package/{dist/bridge → bridge}/plugin-bridge.d.ts.map +1 -1
  19. package/{dist/bridge → bridge}/plugin-bridge.js +1 -1
  20. package/{dist/bridge → bridge}/storage-bridge.js +3 -3
  21. package/{dist/chat → chat}/index.d.ts +1 -1
  22. package/{dist/chat → chat}/index.d.ts.map +1 -1
  23. package/{dist/chat → chat}/index.js +1 -1
  24. package/{dist/components → components}/BugReportModal.js +1 -1
  25. package/{dist/components → components}/CommandPalette.js +1 -1
  26. package/{dist/components → components}/CompanionSceneHost.js +1 -1
  27. package/{dist/components → components}/ElizaCloudDashboard.js +2 -2
  28. package/{dist/components → components}/EmotePicker.js +2 -2
  29. package/{dist/components → components}/GlobalEmoteOverlay.js +4 -4
  30. package/{dist/components → components}/PairingView.js +1 -1
  31. package/{dist/components → components}/ProviderSwitcher.js +16 -16
  32. package/{dist/components → components}/SecretsView.js +1 -1
  33. package/{dist/components → components}/StartupFailureView.js +1 -1
  34. package/{dist/components → components}/StreamView.js +4 -4
  35. package/{dist/components → components}/StripeEmbeddedCheckout.js +2 -2
  36. package/{dist/components → components}/SubscriptionStatus.js +1 -1
  37. package/{dist/components → components}/VoiceConfigView.js +1 -1
  38. package/{dist/components → components}/avatar/VrmEngine.js +1 -1
  39. package/{dist/components → components}/avatar/VrmViewer.d.ts +1 -1
  40. package/{dist/components → components}/avatar/VrmViewer.d.ts.map +1 -1
  41. package/{dist/components → components}/avatar/VrmViewer.js +3 -3
  42. package/{dist/components → components}/companion/walletUtils.d.ts +1 -1
  43. package/{dist/components → components}/companion/walletUtils.d.ts.map +1 -1
  44. package/{dist/components → components}/companion/walletUtils.js +1 -1
  45. package/{dist/components → components}/format.d.ts +1 -1
  46. package/{dist/components → components}/format.js +1 -1
  47. package/{dist/components → components}/permissions/StreamingPermissions.js +1 -1
  48. package/{dist/components → components}/stream/StatusBar.js +2 -2
  49. package/{dist/components → components}/stream/overlays/useOverlayLayout.d.ts +1 -1
  50. package/{dist/components → components}/stream/overlays/useOverlayLayout.js +2 -2
  51. package/events/index.d.ts +42 -0
  52. package/events/index.d.ts.map +1 -0
  53. package/{dist/events → events}/index.js +16 -16
  54. package/{dist/hooks → hooks}/useRetakeCapture.js +1 -1
  55. package/{src/i18n → i18n}/locales/en.json +9 -9
  56. package/{src/i18n → i18n}/locales/es.json +10 -10
  57. package/{src/i18n → i18n}/locales/ko.json +9 -9
  58. package/{src/i18n → i18n}/locales/pt.json +9 -9
  59. package/{src/i18n → i18n}/locales/zh-CN.json +10 -10
  60. package/{dist/navigation → navigation}/index.js +1 -1
  61. package/package.json +142 -52
  62. package/{dist/platform → platform}/browser-launch.js +1 -1
  63. package/{dist/platform → platform}/init.d.ts +1 -1
  64. package/{dist/platform → platform}/init.d.ts.map +1 -1
  65. package/{dist/platform → platform}/init.js +5 -5
  66. package/{dist/platform → platform}/lifo.d.ts +1 -1
  67. package/{dist/platform → platform}/lifo.d.ts.map +1 -1
  68. package/{dist/platform → platform}/lifo.js +1 -1
  69. package/{dist/state → state}/AppContext.js +14 -14
  70. package/{dist/state → state}/onboarding-resume.js +1 -1
  71. package/{dist/state → state}/persistence.js +11 -11
  72. package/{dist/state → state}/vrm.d.ts +1 -1
  73. package/{dist/state → state}/vrm.d.ts.map +1 -1
  74. package/{dist/state → state}/vrm.js +6 -6
  75. package/{dist/utils → utils}/asset-url.d.ts +1 -1
  76. package/{dist/utils → utils}/asset-url.js +2 -2
  77. package/.turbo/turbo-build.log +0 -12
  78. package/LICENSE +0 -21
  79. package/dist/events/index.d.ts +0 -42
  80. package/dist/events/index.d.ts.map +0 -1
  81. package/dist/i18n/locales/en.json +0 -1195
  82. package/dist/i18n/locales/es.json +0 -1195
  83. package/dist/i18n/locales/ko.json +0 -1195
  84. package/dist/i18n/locales/pt.json +0 -1195
  85. package/dist/i18n/locales/zh-CN.json +0 -1195
  86. package/src/App.tsx +0 -498
  87. package/src/actions/character.test.ts +0 -139
  88. package/src/actions/character.ts +0 -152
  89. package/src/actions/chat-helpers.ts +0 -100
  90. package/src/actions/cloud.ts +0 -59
  91. package/src/actions/index.ts +0 -12
  92. package/src/actions/lifecycle.ts +0 -175
  93. package/src/actions/onboarding.ts +0 -42
  94. package/src/actions/triggers.ts +0 -190
  95. package/src/ambient.d.ts +0 -16
  96. package/src/api/client.ts +0 -5339
  97. package/src/api/index.ts +0 -1
  98. package/src/autonomy/index.ts +0 -477
  99. package/src/bridge/capacitor-bridge.ts +0 -295
  100. package/src/bridge/electrobun-rpc.ts +0 -58
  101. package/src/bridge/electrobun-runtime.ts +0 -28
  102. package/src/bridge/index.ts +0 -5
  103. package/src/bridge/native-plugins.ts +0 -134
  104. package/src/bridge/plugin-bridge.ts +0 -352
  105. package/src/bridge/storage-bridge.ts +0 -162
  106. package/src/chat/index.ts +0 -250
  107. package/src/coding/index.ts +0 -43
  108. package/src/components/AdvancedPageView.tsx +0 -362
  109. package/src/components/AgentActivityBox.tsx +0 -49
  110. package/src/components/ApiKeyConfig.tsx +0 -224
  111. package/src/components/AppsPageView.tsx +0 -52
  112. package/src/components/AppsView.tsx +0 -293
  113. package/src/components/AvatarLoader.tsx +0 -92
  114. package/src/components/AvatarSelector.tsx +0 -223
  115. package/src/components/BscTradePanel.tsx +0 -549
  116. package/src/components/BugReportModal.tsx +0 -499
  117. package/src/components/CharacterView.tsx +0 -1814
  118. package/src/components/ChatAvatar.test.ts +0 -97
  119. package/src/components/ChatAvatar.tsx +0 -147
  120. package/src/components/ChatComposer.tsx +0 -330
  121. package/src/components/ChatMessage.tsx +0 -448
  122. package/src/components/ChatModalView.test.tsx +0 -118
  123. package/src/components/ChatModalView.tsx +0 -125
  124. package/src/components/ChatView.tsx +0 -992
  125. package/src/components/CloudSourceControls.tsx +0 -80
  126. package/src/components/CodingAgentSettingsSection.tsx +0 -538
  127. package/src/components/CommandPalette.tsx +0 -284
  128. package/src/components/CompanionSceneHost.tsx +0 -497
  129. package/src/components/CompanionShell.tsx +0 -31
  130. package/src/components/CompanionView.tsx +0 -109
  131. package/src/components/ConfigPageView.tsx +0 -762
  132. package/src/components/ConfigSaveFooter.tsx +0 -41
  133. package/src/components/ConfirmModal.tsx +0 -379
  134. package/src/components/ConnectionFailedBanner.tsx +0 -91
  135. package/src/components/ConnectorsPageView.tsx +0 -13
  136. package/src/components/ConversationsSidebar.tsx +0 -279
  137. package/src/components/CustomActionEditor.tsx +0 -1127
  138. package/src/components/CustomActionsPanel.tsx +0 -288
  139. package/src/components/CustomActionsView.tsx +0 -322
  140. package/src/components/DatabasePageView.tsx +0 -55
  141. package/src/components/DatabaseView.tsx +0 -814
  142. package/src/components/ElizaCloudDashboard.tsx +0 -1696
  143. package/src/components/EmotePicker.tsx +0 -529
  144. package/src/components/ErrorBoundary.tsx +0 -76
  145. package/src/components/FineTuningView.tsx +0 -1080
  146. package/src/components/GameView.tsx +0 -551
  147. package/src/components/GameViewOverlay.tsx +0 -133
  148. package/src/components/GlobalEmoteOverlay.tsx +0 -152
  149. package/src/components/Header.test.tsx +0 -413
  150. package/src/components/Header.tsx +0 -403
  151. package/src/components/HeartbeatsView.tsx +0 -1003
  152. package/src/components/InventoryView.tsx +0 -388
  153. package/src/components/KnowledgeView.tsx +0 -1128
  154. package/src/components/LanguageDropdown.tsx +0 -188
  155. package/src/components/LifoMonitorPanel.tsx +0 -196
  156. package/src/components/LifoSandboxView.tsx +0 -499
  157. package/src/components/LoadingScreen.tsx +0 -112
  158. package/src/components/LogsPageView.tsx +0 -17
  159. package/src/components/LogsView.tsx +0 -239
  160. package/src/components/MediaGalleryView.tsx +0 -433
  161. package/src/components/MediaSettingsSection.tsx +0 -893
  162. package/src/components/MessageContent.tsx +0 -815
  163. package/src/components/OnboardingWizard.test.tsx +0 -104
  164. package/src/components/OnboardingWizard.tsx +0 -206
  165. package/src/components/PairingView.tsx +0 -110
  166. package/src/components/PermissionsSection.tsx +0 -1186
  167. package/src/components/PluginsPageView.tsx +0 -9
  168. package/src/components/PluginsView.tsx +0 -3165
  169. package/src/components/ProviderSwitcher.tsx +0 -905
  170. package/src/components/RestartBanner.tsx +0 -76
  171. package/src/components/RuntimeView.tsx +0 -460
  172. package/src/components/SaveCommandModal.tsx +0 -211
  173. package/src/components/SecretsView.tsx +0 -569
  174. package/src/components/SettingsView.tsx +0 -825
  175. package/src/components/ShellOverlays.tsx +0 -41
  176. package/src/components/ShortcutsOverlay.tsx +0 -155
  177. package/src/components/SkillsView.tsx +0 -1435
  178. package/src/components/StartupFailureView.tsx +0 -63
  179. package/src/components/StreamView.tsx +0 -483
  180. package/src/components/StripeEmbeddedCheckout.tsx +0 -155
  181. package/src/components/SubscriptionStatus.tsx +0 -640
  182. package/src/components/SystemWarningBanner.tsx +0 -71
  183. package/src/components/ThemeToggle.tsx +0 -100
  184. package/src/components/TrajectoriesView.tsx +0 -526
  185. package/src/components/TrajectoryDetailView.tsx +0 -426
  186. package/src/components/TriggersView.tsx +0 -1
  187. package/src/components/VectorBrowserView.tsx +0 -1633
  188. package/src/components/VoiceConfigView.tsx +0 -674
  189. package/src/components/VrmStage.test.ts +0 -219
  190. package/src/components/VrmStage.tsx +0 -432
  191. package/src/components/WhatsAppQrOverlay.tsx +0 -230
  192. package/src/components/__tests__/chainConfig.test.ts +0 -220
  193. package/src/components/apps/AppDetailPane.tsx +0 -242
  194. package/src/components/apps/AppsCatalogGrid.tsx +0 -137
  195. package/src/components/apps/extensions/registry.ts +0 -13
  196. package/src/components/apps/extensions/types.ts +0 -9
  197. package/src/components/apps/helpers.ts +0 -43
  198. package/src/components/avatar/VrmAnimationLoader.test.ts +0 -164
  199. package/src/components/avatar/VrmAnimationLoader.ts +0 -151
  200. package/src/components/avatar/VrmBlinkController.ts +0 -118
  201. package/src/components/avatar/VrmCameraManager.ts +0 -407
  202. package/src/components/avatar/VrmEngine.ts +0 -2696
  203. package/src/components/avatar/VrmFootShadow.ts +0 -96
  204. package/src/components/avatar/VrmViewer.tsx +0 -421
  205. package/src/components/avatar/__tests__/VrmCameraManager.test.ts +0 -168
  206. package/src/components/avatar/__tests__/VrmEngine.test.ts +0 -1574
  207. package/src/components/avatar/mixamoVRMRigMap.ts +0 -62
  208. package/src/components/avatar/retargetMixamoFbxToVrm.ts +0 -144
  209. package/src/components/avatar/retargetMixamoGltfToVrm.ts +0 -119
  210. package/src/components/chainConfig.ts +0 -380
  211. package/src/components/companion/CompanionHeader.tsx +0 -47
  212. package/src/components/companion/CompanionSceneHost.tsx +0 -5
  213. package/src/components/companion/VrmStage.tsx +0 -2
  214. package/src/components/companion/__tests__/walletUtils.test.ts +0 -742
  215. package/src/components/companion/walletUtils.ts +0 -290
  216. package/src/components/companion-shell-styles.test.ts +0 -142
  217. package/src/components/companion-shell-styles.ts +0 -270
  218. package/src/components/confirm-delete-control.tsx +0 -69
  219. package/src/components/conversations/ConversationListItem.tsx +0 -185
  220. package/src/components/conversations/conversation-utils.ts +0 -151
  221. package/src/components/format.ts +0 -131
  222. package/src/components/index.ts +0 -94
  223. package/src/components/inventory/CopyableAddress.tsx +0 -41
  224. package/src/components/inventory/InventoryToolbar.tsx +0 -142
  225. package/src/components/inventory/NftGrid.tsx +0 -99
  226. package/src/components/inventory/TokenLogo.tsx +0 -71
  227. package/src/components/inventory/TokensTable.tsx +0 -216
  228. package/src/components/inventory/constants.ts +0 -170
  229. package/src/components/inventory/index.ts +0 -29
  230. package/src/components/inventory/media-url.test.ts +0 -38
  231. package/src/components/inventory/media-url.ts +0 -36
  232. package/src/components/inventory/useInventoryData.ts +0 -460
  233. package/src/components/knowledge-upload-image.ts +0 -215
  234. package/src/components/labels.ts +0 -46
  235. package/src/components/onboarding/ActivateStep.tsx +0 -30
  236. package/src/components/onboarding/ConnectionStep.tsx +0 -1530
  237. package/src/components/onboarding/IdentityStep.tsx +0 -272
  238. package/src/components/onboarding/OnboardingPanel.tsx +0 -39
  239. package/src/components/onboarding/OnboardingStepNav.tsx +0 -31
  240. package/src/components/onboarding/PermissionsStep.tsx +0 -20
  241. package/src/components/onboarding/RpcStep.tsx +0 -402
  242. package/src/components/permissions/PermissionIcon.tsx +0 -25
  243. package/src/components/permissions/StreamingPermissions.tsx +0 -413
  244. package/src/components/plugins/showcase-data.ts +0 -481
  245. package/src/components/shared/ShellHeaderControls.tsx +0 -193
  246. package/src/components/shared-companion-scene-context.ts +0 -15
  247. package/src/components/skeletons.tsx +0 -88
  248. package/src/components/stream/ActivityFeed.tsx +0 -113
  249. package/src/components/stream/AvatarPip.tsx +0 -10
  250. package/src/components/stream/ChatContent.tsx +0 -126
  251. package/src/components/stream/ChatTicker.tsx +0 -55
  252. package/src/components/stream/IdleContent.tsx +0 -73
  253. package/src/components/stream/StatusBar.tsx +0 -469
  254. package/src/components/stream/StreamSettings.tsx +0 -506
  255. package/src/components/stream/StreamTerminal.tsx +0 -94
  256. package/src/components/stream/StreamVoiceConfig.tsx +0 -160
  257. package/src/components/stream/helpers.ts +0 -134
  258. package/src/components/stream/overlays/OverlayLayer.tsx +0 -75
  259. package/src/components/stream/overlays/built-in/ActionTickerWidget.tsx +0 -64
  260. package/src/components/stream/overlays/built-in/AlertPopupWidget.tsx +0 -87
  261. package/src/components/stream/overlays/built-in/BrandingWidget.tsx +0 -51
  262. package/src/components/stream/overlays/built-in/CustomHtmlWidget.tsx +0 -105
  263. package/src/components/stream/overlays/built-in/PeonGlassWidget.tsx +0 -265
  264. package/src/components/stream/overlays/built-in/PeonHudWidget.tsx +0 -247
  265. package/src/components/stream/overlays/built-in/PeonSakuraWidget.tsx +0 -278
  266. package/src/components/stream/overlays/built-in/ThoughtBubbleWidget.tsx +0 -77
  267. package/src/components/stream/overlays/built-in/ViewerCountWidget.tsx +0 -46
  268. package/src/components/stream/overlays/built-in/index.ts +0 -13
  269. package/src/components/stream/overlays/registry.ts +0 -22
  270. package/src/components/stream/overlays/types.ts +0 -90
  271. package/src/components/stream/overlays/useOverlayLayout.ts +0 -218
  272. package/src/components/trajectory-format.ts +0 -50
  273. package/src/components/ui-badges.tsx +0 -109
  274. package/src/components/ui-switch.tsx +0 -57
  275. package/src/components/vector-browser-three.ts +0 -27
  276. package/src/config/config-catalog.ts +0 -1092
  277. package/src/config/config-field.tsx +0 -1924
  278. package/src/config/config-renderer.tsx +0 -734
  279. package/src/config/index.ts +0 -11
  280. package/src/config/ui-renderer.tsx +0 -1751
  281. package/src/config/ui-spec.ts +0 -256
  282. package/src/events/index.ts +0 -89
  283. package/src/hooks/index.ts +0 -13
  284. package/src/hooks/useBugReport.tsx +0 -43
  285. package/src/hooks/useCanvasWindow.ts +0 -372
  286. package/src/hooks/useChatAvatarVoice.ts +0 -111
  287. package/src/hooks/useContextMenu.ts +0 -127
  288. package/src/hooks/useKeyboardShortcuts.ts +0 -86
  289. package/src/hooks/useLifoSync.ts +0 -143
  290. package/src/hooks/useMemoryMonitor.ts +0 -334
  291. package/src/hooks/useRenderGuard.ts +0 -43
  292. package/src/hooks/useRetakeCapture.ts +0 -67
  293. package/src/hooks/useStreamPopoutNavigation.ts +0 -27
  294. package/src/hooks/useTimeout.ts +0 -37
  295. package/src/hooks/useVoiceChat.ts +0 -1440
  296. package/src/hooks/useWhatsAppPairing.ts +0 -123
  297. package/src/i18n/index.ts +0 -76
  298. package/src/i18n/messages.ts +0 -21
  299. package/src/index.ts +0 -6
  300. package/src/navigation/index.ts +0 -282
  301. package/src/navigation.test.ts +0 -189
  302. package/src/onboarding-config.test.ts +0 -104
  303. package/src/onboarding-config.ts +0 -114
  304. package/src/platform/browser-launch.test.ts +0 -94
  305. package/src/platform/browser-launch.ts +0 -149
  306. package/src/platform/index.ts +0 -58
  307. package/src/platform/init.ts +0 -236
  308. package/src/platform/lifo.ts +0 -225
  309. package/src/providers/index.ts +0 -99
  310. package/src/state/AppContext.tsx +0 -5869
  311. package/src/state/index.ts +0 -6
  312. package/src/state/internal.ts +0 -86
  313. package/src/state/onboarding-resume.test.ts +0 -135
  314. package/src/state/onboarding-resume.ts +0 -263
  315. package/src/state/parsers.test.ts +0 -124
  316. package/src/state/parsers.ts +0 -309
  317. package/src/state/persistence.ts +0 -320
  318. package/src/state/shell-routing.ts +0 -32
  319. package/src/state/types.ts +0 -696
  320. package/src/state/ui-preferences.ts +0 -3
  321. package/src/state/useApp.ts +0 -23
  322. package/src/state/vrm.ts +0 -76
  323. package/src/stories/AppMockProvider.tsx +0 -32
  324. package/src/stories/ChatEmptyState.stories.tsx +0 -27
  325. package/src/stories/ChatMessage.stories.tsx +0 -115
  326. package/src/stories/CompanionHeader.stories.tsx +0 -74
  327. package/src/stories/CompanionView.stories.tsx +0 -33
  328. package/src/stories/ConversationListItem.stories.tsx +0 -102
  329. package/src/stories/TypingIndicator.stories.tsx +0 -28
  330. package/src/types/index.ts +0 -715
  331. package/src/types/react-test-renderer.d.ts +0 -45
  332. package/src/utils/asset-url.ts +0 -110
  333. package/src/utils/assistant-text.ts +0 -172
  334. package/src/utils/clipboard.ts +0 -41
  335. package/src/utils/desktop-dialogs.ts +0 -80
  336. package/src/utils/index.ts +0 -6
  337. package/src/utils/number-parsing.ts +0 -125
  338. package/src/utils/openExternalUrl.ts +0 -20
  339. package/src/utils/spoken-text.ts +0 -65
  340. package/src/utils/streaming-text.ts +0 -120
  341. package/src/voice/index.ts +0 -1
  342. package/src/voice/types.ts +0 -197
  343. package/src/wallet-rpc.ts +0 -176
  344. package/test/app/AppContext.pty-sessions.test.tsx +0 -143
  345. package/test/app/MessageContent.test.tsx +0 -366
  346. package/test/app/PermissionsOnboarding.test.tsx +0 -356
  347. package/test/app/PermissionsSection.test.tsx +0 -573
  348. package/test/app/advanced-trajectory-fine-tuning.e2e.test.ts +0 -397
  349. package/test/app/agent-activity-box.test.tsx +0 -132
  350. package/test/app/agent-transfer-lock.test.ts +0 -274
  351. package/test/app/api-client-electron-fallback.test.ts +0 -139
  352. package/test/app/api-client-timeout.test.ts +0 -75
  353. package/test/app/api-client-ws.test.ts +0 -98
  354. package/test/app/api-client.ws-max-reconnect.test.ts +0 -139
  355. package/test/app/api-client.ws-reconnect.test.ts +0 -157
  356. package/test/app/app-context-autonomy-events.test.ts +0 -478
  357. package/test/app/apps-page-view.test.ts +0 -114
  358. package/test/app/apps-view.test.ts +0 -591
  359. package/test/app/autonomous-workflows.e2e.test.ts +0 -765
  360. package/test/app/autonomy-events.test.ts +0 -150
  361. package/test/app/avatar-selector.test.tsx +0 -52
  362. package/test/app/bsc-trade-panel.test.tsx +0 -134
  363. package/test/app/bug-report-modal.test.tsx +0 -353
  364. package/test/app/character-customization.e2e.test.ts +0 -1199
  365. package/test/app/chat-advanced-features.e2e.test.ts +0 -706
  366. package/test/app/chat-composer.test.tsx +0 -181
  367. package/test/app/chat-language-header.test.ts +0 -64
  368. package/test/app/chat-message.test.tsx +0 -222
  369. package/test/app/chat-modal-view.test.tsx +0 -191
  370. package/test/app/chat-routine-filter.test.ts +0 -96
  371. package/test/app/chat-send-lock.test.ts +0 -1465
  372. package/test/app/chat-stream-api-client.test.tsx +0 -390
  373. package/test/app/chat-view-game-modal.test.tsx +0 -661
  374. package/test/app/chat-view.test.tsx +0 -877
  375. package/test/app/cloud-api.e2e.test.ts +0 -258
  376. package/test/app/cloud-login-flow.e2e.test.ts +0 -494
  377. package/test/app/cloud-login-lock.test.ts +0 -412
  378. package/test/app/command-palette.test.tsx +0 -184
  379. package/test/app/command-registry.test.ts +0 -75
  380. package/test/app/companion-greeting-wave.test.tsx +0 -431
  381. package/test/app/companion-stale-conversation.test.tsx +0 -447
  382. package/test/app/companion-view.test.tsx +0 -690
  383. package/test/app/confirm-delete-control.test.ts +0 -79
  384. package/test/app/confirm-modal.test.tsx +0 -219
  385. package/test/app/connectors-ui.e2e.test.ts +0 -508
  386. package/test/app/conversations-sidebar-game-modal.test.tsx +0 -265
  387. package/test/app/conversations-sidebar.test.tsx +0 -185
  388. package/test/app/custom-actions-smoke.test.ts +0 -387
  389. package/test/app/custom-avatar-api-client.test.ts +0 -207
  390. package/test/app/desktop-utils.test.ts +0 -145
  391. package/test/app/electrobun-rpc-bridge.test.ts +0 -83
  392. package/test/app/events.test.ts +0 -88
  393. package/test/app/export-import-flows.e2e.test.ts +0 -700
  394. package/test/app/fine-tuning-view.test.ts +0 -471
  395. package/test/app/game-view-auth-session.test.tsx +0 -187
  396. package/test/app/game-view.test.ts +0 -444
  397. package/test/app/global-emote-overlay.test.tsx +0 -106
  398. package/test/app/header-status.test.tsx +0 -149
  399. package/test/app/i18n.test.ts +0 -152
  400. package/test/app/inventory-bsc-view.test.ts +0 -940
  401. package/test/app/knowledge-ui.e2e.test.ts +0 -762
  402. package/test/app/knowledge-upload-helpers.test.ts +0 -124
  403. package/test/app/lifecycle-lock.test.ts +0 -267
  404. package/test/app/lifo-popout-utils.test.ts +0 -208
  405. package/test/app/lifo-safe-endpoint.test.ts +0 -34
  406. package/test/app/loading-screen.test.tsx +0 -45
  407. package/test/app/memory-monitor.test.ts +0 -332
  408. package/test/app/navigation.test.tsx +0 -22
  409. package/test/app/onboarding-finish-lock.test.ts +0 -673
  410. package/test/app/onboarding-language.test.tsx +0 -160
  411. package/test/app/onboarding-steps.test.tsx +0 -375
  412. package/test/app/open-external-url.test.ts +0 -65
  413. package/test/app/pages-navigation-smoke.e2e.test.ts +0 -638
  414. package/test/app/pairing-lock.test.ts +0 -260
  415. package/test/app/pairing-view.test.tsx +0 -74
  416. package/test/app/permissions-section.test.ts +0 -432
  417. package/test/app/plugin-bridge.test.ts +0 -109
  418. package/test/app/plugins-ui.e2e.test.ts +0 -605
  419. package/test/app/plugins-view-game-modal.test.tsx +0 -687
  420. package/test/app/plugins-view-toggle-restart.test.ts +0 -129
  421. package/test/app/provider-dropdown-default.test.tsx +0 -300
  422. package/test/app/restart-banner.test.tsx +0 -197
  423. package/test/app/retake-capture.test.ts +0 -84
  424. package/test/app/sandbox-api-client.test.ts +0 -108
  425. package/test/app/save-command-modal.test.tsx +0 -109
  426. package/test/app/secrets-view.test.tsx +0 -92
  427. package/test/app/settings-control-styles.test.tsx +0 -142
  428. package/test/app/settings-reset.e2e.test.ts +0 -726
  429. package/test/app/settings-sections.e2e.test.ts +0 -614
  430. package/test/app/shared-format.test.ts +0 -44
  431. package/test/app/shared-switch.test.ts +0 -69
  432. package/test/app/shell-mode-switching.e2e.test.ts +0 -840
  433. package/test/app/shell-mode-tab-memory.test.tsx +0 -58
  434. package/test/app/shell-overlays.test.tsx +0 -50
  435. package/test/app/shortcuts-overlay.test.tsx +0 -111
  436. package/test/app/sse-interruption.test.ts +0 -122
  437. package/test/app/startup-asset-missing.e2e.test.ts +0 -126
  438. package/test/app/startup-backend-missing.e2e.test.ts +0 -118
  439. package/test/app/startup-chat.e2e.test.ts +0 -322
  440. package/test/app/startup-conversation-restore.test.tsx +0 -381
  441. package/test/app/startup-failure-view.test.tsx +0 -103
  442. package/test/app/startup-onboarding.e2e.test.ts +0 -618
  443. package/test/app/startup-timeout.test.tsx +0 -80
  444. package/test/app/startup-token-401.e2e.test.ts +0 -103
  445. package/test/app/stream-helpers.test.ts +0 -46
  446. package/test/app/stream-popout-navigation.test.tsx +0 -41
  447. package/test/app/stream-status-bar.test.tsx +0 -89
  448. package/test/app/theme-toggle.test.tsx +0 -33
  449. package/test/app/training-api-client.test.ts +0 -128
  450. package/test/app/trajectories-view.test.tsx +0 -220
  451. package/test/app/triggers-api-client.test.ts +0 -77
  452. package/test/app/triggers-navigation.test.ts +0 -113
  453. package/test/app/triggers-view.e2e.test.ts +0 -675
  454. package/test/app/update-channel-lock.test.ts +0 -259
  455. package/test/app/vector-browser.async-cleanup.test.tsx +0 -367
  456. package/test/app/vector-browser.e2e.test.ts +0 -653
  457. package/test/app/vrm-stage.test.tsx +0 -351
  458. package/test/app/vrm-viewer.test.tsx +0 -298
  459. package/test/app/wallet-api-save-lock.test.ts +0 -299
  460. package/test/app/wallet-hooks.test.ts +0 -405
  461. package/test/app/wallet-ui-flows.e2e.test.ts +0 -556
  462. package/test/avatar/asset-url.test.ts +0 -90
  463. package/test/avatar/avatar-selector.test.ts +0 -173
  464. package/test/avatar/mixamo-vrm-rig-map.test.ts +0 -111
  465. package/test/avatar/voice-chat-streaming-text.test.ts +0 -96
  466. package/test/avatar/voice-chat.test.ts +0 -391
  467. package/test/browser-extension/README.md +0 -138
  468. package/test/browser-extension/test-harness.ts +0 -499
  469. package/test/capacitor-plugins.e2e.test.ts +0 -168
  470. package/test/test-types.ts +0 -5
  471. package/test/ui/command-palette-commands.test.ts +0 -57
  472. package/test/ui/ui-renderer.test.ts +0 -39
  473. package/test/utils/assistant-text.test.ts +0 -68
  474. package/test/utils/streaming-text.test.ts +0 -89
  475. package/tsconfig.build.json +0 -19
  476. package/tsconfig.json +0 -20
  477. package/tsconfig.typecheck.json +0 -12
  478. /package/{dist/App.d.ts → App.d.ts} +0 -0
  479. /package/{dist/App.d.ts.map → App.d.ts.map} +0 -0
  480. /package/{dist/App.js → App.js} +0 -0
  481. /package/{dist/actions → actions}/character.js +0 -0
  482. /package/{dist/actions → actions}/chat-helpers.d.ts +0 -0
  483. /package/{dist/actions → actions}/chat-helpers.d.ts.map +0 -0
  484. /package/{dist/actions → actions}/chat-helpers.js +0 -0
  485. /package/{dist/actions → actions}/cloud.js +0 -0
  486. /package/{dist/actions → actions}/index.d.ts +0 -0
  487. /package/{dist/actions → actions}/index.d.ts.map +0 -0
  488. /package/{dist/actions → actions}/index.js +0 -0
  489. /package/{dist/actions → actions}/onboarding.d.ts +0 -0
  490. /package/{dist/actions → actions}/onboarding.d.ts.map +0 -0
  491. /package/{dist/actions → actions}/onboarding.js +0 -0
  492. /package/{dist/actions → actions}/triggers.js +0 -0
  493. /package/{dist/api → api}/index.d.ts +0 -0
  494. /package/{dist/api → api}/index.d.ts.map +0 -0
  495. /package/{dist/api → api}/index.js +0 -0
  496. /package/{dist/autonomy → autonomy}/index.d.ts +0 -0
  497. /package/{dist/autonomy → autonomy}/index.d.ts.map +0 -0
  498. /package/{dist/autonomy → autonomy}/index.js +0 -0
  499. /package/{dist/bridge → bridge}/electrobun-rpc.d.ts +0 -0
  500. /package/{dist/bridge → bridge}/electrobun-rpc.d.ts.map +0 -0
  501. /package/{dist/bridge → bridge}/electrobun-runtime.d.ts +0 -0
  502. /package/{dist/bridge → bridge}/electrobun-runtime.d.ts.map +0 -0
  503. /package/{dist/bridge → bridge}/electrobun-runtime.js +0 -0
  504. /package/{dist/bridge → bridge}/index.d.ts +0 -0
  505. /package/{dist/bridge → bridge}/index.d.ts.map +0 -0
  506. /package/{dist/bridge → bridge}/index.js +0 -0
  507. /package/{dist/bridge → bridge}/native-plugins.d.ts +0 -0
  508. /package/{dist/bridge → bridge}/native-plugins.d.ts.map +0 -0
  509. /package/{dist/bridge → bridge}/native-plugins.js +0 -0
  510. /package/{dist/bridge → bridge}/storage-bridge.d.ts +0 -0
  511. /package/{dist/bridge → bridge}/storage-bridge.d.ts.map +0 -0
  512. /package/{dist/coding → coding}/index.d.ts +0 -0
  513. /package/{dist/coding → coding}/index.d.ts.map +0 -0
  514. /package/{dist/coding → coding}/index.js +0 -0
  515. /package/{dist/components → components}/AdvancedPageView.d.ts +0 -0
  516. /package/{dist/components → components}/AdvancedPageView.d.ts.map +0 -0
  517. /package/{dist/components → components}/AdvancedPageView.js +0 -0
  518. /package/{dist/components → components}/AgentActivityBox.d.ts +0 -0
  519. /package/{dist/components → components}/AgentActivityBox.d.ts.map +0 -0
  520. /package/{dist/components → components}/AgentActivityBox.js +0 -0
  521. /package/{dist/components → components}/ApiKeyConfig.d.ts +0 -0
  522. /package/{dist/components → components}/ApiKeyConfig.d.ts.map +0 -0
  523. /package/{dist/components → components}/ApiKeyConfig.js +0 -0
  524. /package/{dist/components → components}/AppsPageView.d.ts +0 -0
  525. /package/{dist/components → components}/AppsPageView.d.ts.map +0 -0
  526. /package/{dist/components → components}/AppsPageView.js +0 -0
  527. /package/{dist/components → components}/AppsView.d.ts +0 -0
  528. /package/{dist/components → components}/AppsView.d.ts.map +0 -0
  529. /package/{dist/components → components}/AppsView.js +0 -0
  530. /package/{dist/components → components}/AvatarLoader.d.ts +0 -0
  531. /package/{dist/components → components}/AvatarLoader.d.ts.map +0 -0
  532. /package/{dist/components → components}/AvatarLoader.js +0 -0
  533. /package/{dist/components → components}/AvatarSelector.d.ts +0 -0
  534. /package/{dist/components → components}/AvatarSelector.d.ts.map +0 -0
  535. /package/{dist/components → components}/AvatarSelector.js +0 -0
  536. /package/{dist/components → components}/BscTradePanel.d.ts +0 -0
  537. /package/{dist/components → components}/BscTradePanel.d.ts.map +0 -0
  538. /package/{dist/components → components}/BscTradePanel.js +0 -0
  539. /package/{dist/components → components}/BugReportModal.d.ts +0 -0
  540. /package/{dist/components → components}/BugReportModal.d.ts.map +0 -0
  541. /package/{dist/components → components}/CharacterView.d.ts +0 -0
  542. /package/{dist/components → components}/CharacterView.d.ts.map +0 -0
  543. /package/{dist/components → components}/CharacterView.js +0 -0
  544. /package/{dist/components → components}/ChatAvatar.d.ts +0 -0
  545. /package/{dist/components → components}/ChatAvatar.d.ts.map +0 -0
  546. /package/{dist/components → components}/ChatAvatar.js +0 -0
  547. /package/{dist/components → components}/ChatComposer.d.ts +0 -0
  548. /package/{dist/components → components}/ChatComposer.d.ts.map +0 -0
  549. /package/{dist/components → components}/ChatComposer.js +0 -0
  550. /package/{dist/components → components}/ChatMessage.d.ts +0 -0
  551. /package/{dist/components → components}/ChatMessage.d.ts.map +0 -0
  552. /package/{dist/components → components}/ChatMessage.js +0 -0
  553. /package/{dist/components → components}/ChatModalView.d.ts +0 -0
  554. /package/{dist/components → components}/ChatModalView.d.ts.map +0 -0
  555. /package/{dist/components → components}/ChatModalView.js +0 -0
  556. /package/{dist/components → components}/ChatView.d.ts +0 -0
  557. /package/{dist/components → components}/ChatView.d.ts.map +0 -0
  558. /package/{dist/components → components}/ChatView.js +0 -0
  559. /package/{dist/components → components}/CloudSourceControls.d.ts +0 -0
  560. /package/{dist/components → components}/CloudSourceControls.d.ts.map +0 -0
  561. /package/{dist/components → components}/CloudSourceControls.js +0 -0
  562. /package/{dist/components → components}/CodingAgentSettingsSection.d.ts +0 -0
  563. /package/{dist/components → components}/CodingAgentSettingsSection.d.ts.map +0 -0
  564. /package/{dist/components → components}/CodingAgentSettingsSection.js +0 -0
  565. /package/{dist/components → components}/CommandPalette.d.ts +0 -0
  566. /package/{dist/components → components}/CommandPalette.d.ts.map +0 -0
  567. /package/{dist/components → components}/CompanionSceneHost.d.ts +0 -0
  568. /package/{dist/components → components}/CompanionSceneHost.d.ts.map +0 -0
  569. /package/{dist/components → components}/CompanionShell.d.ts +0 -0
  570. /package/{dist/components → components}/CompanionShell.d.ts.map +0 -0
  571. /package/{dist/components → components}/CompanionShell.js +0 -0
  572. /package/{dist/components → components}/CompanionView.d.ts +0 -0
  573. /package/{dist/components → components}/CompanionView.d.ts.map +0 -0
  574. /package/{dist/components → components}/CompanionView.js +0 -0
  575. /package/{dist/components → components}/ConfigPageView.d.ts +0 -0
  576. /package/{dist/components → components}/ConfigPageView.d.ts.map +0 -0
  577. /package/{dist/components → components}/ConfigPageView.js +0 -0
  578. /package/{dist/components → components}/ConfigSaveFooter.d.ts +0 -0
  579. /package/{dist/components → components}/ConfigSaveFooter.d.ts.map +0 -0
  580. /package/{dist/components → components}/ConfigSaveFooter.js +0 -0
  581. /package/{dist/components → components}/ConfirmModal.d.ts +0 -0
  582. /package/{dist/components → components}/ConfirmModal.d.ts.map +0 -0
  583. /package/{dist/components → components}/ConfirmModal.js +0 -0
  584. /package/{dist/components → components}/ConnectionFailedBanner.d.ts +0 -0
  585. /package/{dist/components → components}/ConnectionFailedBanner.d.ts.map +0 -0
  586. /package/{dist/components → components}/ConnectionFailedBanner.js +0 -0
  587. /package/{dist/components → components}/ConnectorsPageView.d.ts +0 -0
  588. /package/{dist/components → components}/ConnectorsPageView.d.ts.map +0 -0
  589. /package/{dist/components → components}/ConnectorsPageView.js +0 -0
  590. /package/{dist/components → components}/ConversationsSidebar.d.ts +0 -0
  591. /package/{dist/components → components}/ConversationsSidebar.d.ts.map +0 -0
  592. /package/{dist/components → components}/ConversationsSidebar.js +0 -0
  593. /package/{dist/components → components}/CustomActionEditor.d.ts +0 -0
  594. /package/{dist/components → components}/CustomActionEditor.d.ts.map +0 -0
  595. /package/{dist/components → components}/CustomActionEditor.js +0 -0
  596. /package/{dist/components → components}/CustomActionsPanel.d.ts +0 -0
  597. /package/{dist/components → components}/CustomActionsPanel.d.ts.map +0 -0
  598. /package/{dist/components → components}/CustomActionsPanel.js +0 -0
  599. /package/{dist/components → components}/CustomActionsView.d.ts +0 -0
  600. /package/{dist/components → components}/CustomActionsView.d.ts.map +0 -0
  601. /package/{dist/components → components}/CustomActionsView.js +0 -0
  602. /package/{dist/components → components}/DatabasePageView.d.ts +0 -0
  603. /package/{dist/components → components}/DatabasePageView.d.ts.map +0 -0
  604. /package/{dist/components → components}/DatabasePageView.js +0 -0
  605. /package/{dist/components → components}/DatabaseView.d.ts +0 -0
  606. /package/{dist/components → components}/DatabaseView.d.ts.map +0 -0
  607. /package/{dist/components → components}/DatabaseView.js +0 -0
  608. /package/{dist/components → components}/ElizaCloudDashboard.d.ts +0 -0
  609. /package/{dist/components → components}/ElizaCloudDashboard.d.ts.map +0 -0
  610. /package/{dist/components → components}/EmotePicker.d.ts +0 -0
  611. /package/{dist/components → components}/EmotePicker.d.ts.map +0 -0
  612. /package/{dist/components → components}/ErrorBoundary.d.ts +0 -0
  613. /package/{dist/components → components}/ErrorBoundary.d.ts.map +0 -0
  614. /package/{dist/components → components}/ErrorBoundary.js +0 -0
  615. /package/{dist/components → components}/FineTuningView.d.ts +0 -0
  616. /package/{dist/components → components}/FineTuningView.d.ts.map +0 -0
  617. /package/{dist/components → components}/FineTuningView.js +0 -0
  618. /package/{dist/components → components}/GameView.d.ts +0 -0
  619. /package/{dist/components → components}/GameView.d.ts.map +0 -0
  620. /package/{dist/components → components}/GameView.js +0 -0
  621. /package/{dist/components → components}/GameViewOverlay.d.ts +0 -0
  622. /package/{dist/components → components}/GameViewOverlay.d.ts.map +0 -0
  623. /package/{dist/components → components}/GameViewOverlay.js +0 -0
  624. /package/{dist/components → components}/GlobalEmoteOverlay.d.ts +0 -0
  625. /package/{dist/components → components}/GlobalEmoteOverlay.d.ts.map +0 -0
  626. /package/{dist/components → components}/Header.d.ts +0 -0
  627. /package/{dist/components → components}/Header.d.ts.map +0 -0
  628. /package/{dist/components → components}/Header.js +0 -0
  629. /package/{dist/components → components}/HeartbeatsView.d.ts +0 -0
  630. /package/{dist/components → components}/HeartbeatsView.d.ts.map +0 -0
  631. /package/{dist/components → components}/HeartbeatsView.js +0 -0
  632. /package/{dist/components → components}/InventoryView.d.ts +0 -0
  633. /package/{dist/components → components}/InventoryView.d.ts.map +0 -0
  634. /package/{dist/components → components}/InventoryView.js +0 -0
  635. /package/{dist/components → components}/KnowledgeView.d.ts +0 -0
  636. /package/{dist/components → components}/KnowledgeView.d.ts.map +0 -0
  637. /package/{dist/components → components}/KnowledgeView.js +0 -0
  638. /package/{dist/components → components}/LanguageDropdown.d.ts +0 -0
  639. /package/{dist/components → components}/LanguageDropdown.d.ts.map +0 -0
  640. /package/{dist/components → components}/LanguageDropdown.js +0 -0
  641. /package/{dist/components → components}/LifoMonitorPanel.d.ts +0 -0
  642. /package/{dist/components → components}/LifoMonitorPanel.d.ts.map +0 -0
  643. /package/{dist/components → components}/LifoMonitorPanel.js +0 -0
  644. /package/{dist/components → components}/LifoSandboxView.d.ts +0 -0
  645. /package/{dist/components → components}/LifoSandboxView.d.ts.map +0 -0
  646. /package/{dist/components → components}/LifoSandboxView.js +0 -0
  647. /package/{dist/components → components}/LoadingScreen.d.ts +0 -0
  648. /package/{dist/components → components}/LoadingScreen.d.ts.map +0 -0
  649. /package/{dist/components → components}/LoadingScreen.js +0 -0
  650. /package/{dist/components → components}/LogsPageView.d.ts +0 -0
  651. /package/{dist/components → components}/LogsPageView.d.ts.map +0 -0
  652. /package/{dist/components → components}/LogsPageView.js +0 -0
  653. /package/{dist/components → components}/LogsView.d.ts +0 -0
  654. /package/{dist/components → components}/LogsView.d.ts.map +0 -0
  655. /package/{dist/components → components}/LogsView.js +0 -0
  656. /package/{dist/components → components}/MediaGalleryView.d.ts +0 -0
  657. /package/{dist/components → components}/MediaGalleryView.d.ts.map +0 -0
  658. /package/{dist/components → components}/MediaGalleryView.js +0 -0
  659. /package/{dist/components → components}/MediaSettingsSection.d.ts +0 -0
  660. /package/{dist/components → components}/MediaSettingsSection.d.ts.map +0 -0
  661. /package/{dist/components → components}/MediaSettingsSection.js +0 -0
  662. /package/{dist/components → components}/MessageContent.d.ts +0 -0
  663. /package/{dist/components → components}/MessageContent.d.ts.map +0 -0
  664. /package/{dist/components → components}/MessageContent.js +0 -0
  665. /package/{dist/components → components}/OnboardingWizard.d.ts +0 -0
  666. /package/{dist/components → components}/OnboardingWizard.d.ts.map +0 -0
  667. /package/{dist/components → components}/OnboardingWizard.js +0 -0
  668. /package/{dist/components → components}/PairingView.d.ts +0 -0
  669. /package/{dist/components → components}/PairingView.d.ts.map +0 -0
  670. /package/{dist/components → components}/PermissionsSection.d.ts +0 -0
  671. /package/{dist/components → components}/PermissionsSection.d.ts.map +0 -0
  672. /package/{dist/components → components}/PermissionsSection.js +0 -0
  673. /package/{dist/components → components}/PluginsPageView.d.ts +0 -0
  674. /package/{dist/components → components}/PluginsPageView.d.ts.map +0 -0
  675. /package/{dist/components → components}/PluginsPageView.js +0 -0
  676. /package/{dist/components → components}/PluginsView.d.ts +0 -0
  677. /package/{dist/components → components}/PluginsView.d.ts.map +0 -0
  678. /package/{dist/components → components}/PluginsView.js +0 -0
  679. /package/{dist/components → components}/ProviderSwitcher.d.ts +0 -0
  680. /package/{dist/components → components}/ProviderSwitcher.d.ts.map +0 -0
  681. /package/{dist/components → components}/RestartBanner.d.ts +0 -0
  682. /package/{dist/components → components}/RestartBanner.d.ts.map +0 -0
  683. /package/{dist/components → components}/RestartBanner.js +0 -0
  684. /package/{dist/components → components}/RuntimeView.d.ts +0 -0
  685. /package/{dist/components → components}/RuntimeView.d.ts.map +0 -0
  686. /package/{dist/components → components}/RuntimeView.js +0 -0
  687. /package/{dist/components → components}/SaveCommandModal.d.ts +0 -0
  688. /package/{dist/components → components}/SaveCommandModal.d.ts.map +0 -0
  689. /package/{dist/components → components}/SaveCommandModal.js +0 -0
  690. /package/{dist/components → components}/SecretsView.d.ts +0 -0
  691. /package/{dist/components → components}/SecretsView.d.ts.map +0 -0
  692. /package/{dist/components → components}/SettingsView.d.ts +0 -0
  693. /package/{dist/components → components}/SettingsView.d.ts.map +0 -0
  694. /package/{dist/components → components}/SettingsView.js +0 -0
  695. /package/{dist/components → components}/ShellOverlays.d.ts +0 -0
  696. /package/{dist/components → components}/ShellOverlays.d.ts.map +0 -0
  697. /package/{dist/components → components}/ShellOverlays.js +0 -0
  698. /package/{dist/components → components}/ShortcutsOverlay.d.ts +0 -0
  699. /package/{dist/components → components}/ShortcutsOverlay.d.ts.map +0 -0
  700. /package/{dist/components → components}/ShortcutsOverlay.js +0 -0
  701. /package/{dist/components → components}/SkillsView.d.ts +0 -0
  702. /package/{dist/components → components}/SkillsView.d.ts.map +0 -0
  703. /package/{dist/components → components}/SkillsView.js +0 -0
  704. /package/{dist/components → components}/StartupFailureView.d.ts +0 -0
  705. /package/{dist/components → components}/StartupFailureView.d.ts.map +0 -0
  706. /package/{dist/components → components}/StreamView.d.ts +0 -0
  707. /package/{dist/components → components}/StreamView.d.ts.map +0 -0
  708. /package/{dist/components → components}/StripeEmbeddedCheckout.d.ts +0 -0
  709. /package/{dist/components → components}/StripeEmbeddedCheckout.d.ts.map +0 -0
  710. /package/{dist/components → components}/SubscriptionStatus.d.ts +0 -0
  711. /package/{dist/components → components}/SubscriptionStatus.d.ts.map +0 -0
  712. /package/{dist/components → components}/SystemWarningBanner.d.ts +0 -0
  713. /package/{dist/components → components}/SystemWarningBanner.d.ts.map +0 -0
  714. /package/{dist/components → components}/SystemWarningBanner.js +0 -0
  715. /package/{dist/components → components}/ThemeToggle.d.ts +0 -0
  716. /package/{dist/components → components}/ThemeToggle.d.ts.map +0 -0
  717. /package/{dist/components → components}/ThemeToggle.js +0 -0
  718. /package/{dist/components → components}/TrajectoriesView.d.ts +0 -0
  719. /package/{dist/components → components}/TrajectoriesView.d.ts.map +0 -0
  720. /package/{dist/components → components}/TrajectoriesView.js +0 -0
  721. /package/{dist/components → components}/TrajectoryDetailView.d.ts +0 -0
  722. /package/{dist/components → components}/TrajectoryDetailView.d.ts.map +0 -0
  723. /package/{dist/components → components}/TrajectoryDetailView.js +0 -0
  724. /package/{dist/components → components}/TriggersView.d.ts +0 -0
  725. /package/{dist/components → components}/TriggersView.d.ts.map +0 -0
  726. /package/{dist/components → components}/TriggersView.js +0 -0
  727. /package/{dist/components → components}/VectorBrowserView.d.ts +0 -0
  728. /package/{dist/components → components}/VectorBrowserView.d.ts.map +0 -0
  729. /package/{dist/components → components}/VectorBrowserView.js +0 -0
  730. /package/{dist/components → components}/VoiceConfigView.d.ts +0 -0
  731. /package/{dist/components → components}/VoiceConfigView.d.ts.map +0 -0
  732. /package/{dist/components → components}/VrmStage.d.ts +0 -0
  733. /package/{dist/components → components}/VrmStage.d.ts.map +0 -0
  734. /package/{dist/components → components}/VrmStage.js +0 -0
  735. /package/{dist/components → components}/WhatsAppQrOverlay.d.ts +0 -0
  736. /package/{dist/components → components}/WhatsAppQrOverlay.d.ts.map +0 -0
  737. /package/{dist/components → components}/WhatsAppQrOverlay.js +0 -0
  738. /package/{dist/components → components}/apps/AppDetailPane.d.ts +0 -0
  739. /package/{dist/components → components}/apps/AppDetailPane.d.ts.map +0 -0
  740. /package/{dist/components → components}/apps/AppDetailPane.js +0 -0
  741. /package/{dist/components → components}/apps/AppsCatalogGrid.d.ts +0 -0
  742. /package/{dist/components → components}/apps/AppsCatalogGrid.d.ts.map +0 -0
  743. /package/{dist/components → components}/apps/AppsCatalogGrid.js +0 -0
  744. /package/{dist/components → components}/apps/extensions/registry.d.ts +0 -0
  745. /package/{dist/components → components}/apps/extensions/registry.d.ts.map +0 -0
  746. /package/{dist/components → components}/apps/extensions/registry.js +0 -0
  747. /package/{dist/components → components}/apps/extensions/types.d.ts +0 -0
  748. /package/{dist/components → components}/apps/extensions/types.d.ts.map +0 -0
  749. /package/{dist/components → components}/apps/extensions/types.js +0 -0
  750. /package/{dist/components → components}/apps/helpers.d.ts +0 -0
  751. /package/{dist/components → components}/apps/helpers.d.ts.map +0 -0
  752. /package/{dist/components → components}/apps/helpers.js +0 -0
  753. /package/{dist/components → components}/avatar/VrmAnimationLoader.d.ts +0 -0
  754. /package/{dist/components → components}/avatar/VrmAnimationLoader.d.ts.map +0 -0
  755. /package/{dist/components → components}/avatar/VrmAnimationLoader.js +0 -0
  756. /package/{dist/components → components}/avatar/VrmBlinkController.d.ts +0 -0
  757. /package/{dist/components → components}/avatar/VrmBlinkController.d.ts.map +0 -0
  758. /package/{dist/components → components}/avatar/VrmBlinkController.js +0 -0
  759. /package/{dist/components → components}/avatar/VrmCameraManager.d.ts +0 -0
  760. /package/{dist/components → components}/avatar/VrmCameraManager.d.ts.map +0 -0
  761. /package/{dist/components → components}/avatar/VrmCameraManager.js +0 -0
  762. /package/{dist/components → components}/avatar/VrmEngine.d.ts +0 -0
  763. /package/{dist/components → components}/avatar/VrmEngine.d.ts.map +0 -0
  764. /package/{dist/components → components}/avatar/VrmFootShadow.d.ts +0 -0
  765. /package/{dist/components → components}/avatar/VrmFootShadow.d.ts.map +0 -0
  766. /package/{dist/components → components}/avatar/VrmFootShadow.js +0 -0
  767. /package/{dist/components → components}/avatar/mixamoVRMRigMap.d.ts +0 -0
  768. /package/{dist/components → components}/avatar/mixamoVRMRigMap.d.ts.map +0 -0
  769. /package/{dist/components → components}/avatar/mixamoVRMRigMap.js +0 -0
  770. /package/{dist/components → components}/avatar/retargetMixamoFbxToVrm.d.ts +0 -0
  771. /package/{dist/components → components}/avatar/retargetMixamoFbxToVrm.d.ts.map +0 -0
  772. /package/{dist/components → components}/avatar/retargetMixamoFbxToVrm.js +0 -0
  773. /package/{dist/components → components}/avatar/retargetMixamoGltfToVrm.d.ts +0 -0
  774. /package/{dist/components → components}/avatar/retargetMixamoGltfToVrm.d.ts.map +0 -0
  775. /package/{dist/components → components}/avatar/retargetMixamoGltfToVrm.js +0 -0
  776. /package/{dist/components → components}/chainConfig.d.ts +0 -0
  777. /package/{dist/components → components}/chainConfig.d.ts.map +0 -0
  778. /package/{dist/components → components}/chainConfig.js +0 -0
  779. /package/{dist/components → components}/companion/CompanionHeader.d.ts +0 -0
  780. /package/{dist/components → components}/companion/CompanionHeader.d.ts.map +0 -0
  781. /package/{dist/components → components}/companion/CompanionHeader.js +0 -0
  782. /package/{dist/components → components}/companion/CompanionSceneHost.d.ts +0 -0
  783. /package/{dist/components → components}/companion/CompanionSceneHost.d.ts.map +0 -0
  784. /package/{dist/components → components}/companion/CompanionSceneHost.js +0 -0
  785. /package/{dist/components → components}/companion/VrmStage.d.ts +0 -0
  786. /package/{dist/components → components}/companion/VrmStage.d.ts.map +0 -0
  787. /package/{dist/components → components}/companion/VrmStage.js +0 -0
  788. /package/{dist/components → components}/companion-shell-styles.d.ts +0 -0
  789. /package/{dist/components → components}/companion-shell-styles.d.ts.map +0 -0
  790. /package/{dist/components → components}/companion-shell-styles.js +0 -0
  791. /package/{dist/components → components}/confirm-delete-control.d.ts +0 -0
  792. /package/{dist/components → components}/confirm-delete-control.d.ts.map +0 -0
  793. /package/{dist/components → components}/confirm-delete-control.js +0 -0
  794. /package/{dist/components → components}/conversations/ConversationListItem.d.ts +0 -0
  795. /package/{dist/components → components}/conversations/ConversationListItem.d.ts.map +0 -0
  796. /package/{dist/components → components}/conversations/ConversationListItem.js +0 -0
  797. /package/{dist/components → components}/conversations/conversation-utils.d.ts +0 -0
  798. /package/{dist/components → components}/conversations/conversation-utils.d.ts.map +0 -0
  799. /package/{dist/components → components}/conversations/conversation-utils.js +0 -0
  800. /package/{dist/components → components}/format.d.ts.map +0 -0
  801. /package/{dist/components → components}/index.d.ts +0 -0
  802. /package/{dist/components → components}/index.d.ts.map +0 -0
  803. /package/{dist/components → components}/index.js +0 -0
  804. /package/{dist/components → components}/inventory/CopyableAddress.d.ts +0 -0
  805. /package/{dist/components → components}/inventory/CopyableAddress.d.ts.map +0 -0
  806. /package/{dist/components → components}/inventory/CopyableAddress.js +0 -0
  807. /package/{dist/components → components}/inventory/InventoryToolbar.d.ts +0 -0
  808. /package/{dist/components → components}/inventory/InventoryToolbar.d.ts.map +0 -0
  809. /package/{dist/components → components}/inventory/InventoryToolbar.js +0 -0
  810. /package/{dist/components → components}/inventory/NftGrid.d.ts +0 -0
  811. /package/{dist/components → components}/inventory/NftGrid.d.ts.map +0 -0
  812. /package/{dist/components → components}/inventory/NftGrid.js +0 -0
  813. /package/{dist/components → components}/inventory/TokenLogo.d.ts +0 -0
  814. /package/{dist/components → components}/inventory/TokenLogo.d.ts.map +0 -0
  815. /package/{dist/components → components}/inventory/TokenLogo.js +0 -0
  816. /package/{dist/components → components}/inventory/TokensTable.d.ts +0 -0
  817. /package/{dist/components → components}/inventory/TokensTable.d.ts.map +0 -0
  818. /package/{dist/components → components}/inventory/TokensTable.js +0 -0
  819. /package/{dist/components → components}/inventory/constants.d.ts +0 -0
  820. /package/{dist/components → components}/inventory/constants.d.ts.map +0 -0
  821. /package/{dist/components → components}/inventory/constants.js +0 -0
  822. /package/{dist/components → components}/inventory/index.d.ts +0 -0
  823. /package/{dist/components → components}/inventory/index.d.ts.map +0 -0
  824. /package/{dist/components → components}/inventory/index.js +0 -0
  825. /package/{dist/components → components}/inventory/media-url.d.ts +0 -0
  826. /package/{dist/components → components}/inventory/media-url.d.ts.map +0 -0
  827. /package/{dist/components → components}/inventory/media-url.js +0 -0
  828. /package/{dist/components → components}/inventory/useInventoryData.d.ts +0 -0
  829. /package/{dist/components → components}/inventory/useInventoryData.d.ts.map +0 -0
  830. /package/{dist/components → components}/inventory/useInventoryData.js +0 -0
  831. /package/{dist/components → components}/knowledge-upload-image.d.ts +0 -0
  832. /package/{dist/components → components}/knowledge-upload-image.d.ts.map +0 -0
  833. /package/{dist/components → components}/knowledge-upload-image.js +0 -0
  834. /package/{dist/components → components}/labels.d.ts +0 -0
  835. /package/{dist/components → components}/labels.d.ts.map +0 -0
  836. /package/{dist/components → components}/labels.js +0 -0
  837. /package/{dist/components → components}/onboarding/ActivateStep.d.ts +0 -0
  838. /package/{dist/components → components}/onboarding/ActivateStep.d.ts.map +0 -0
  839. /package/{dist/components → components}/onboarding/ActivateStep.js +0 -0
  840. /package/{dist/components → components}/onboarding/ConnectionStep.d.ts +0 -0
  841. /package/{dist/components → components}/onboarding/ConnectionStep.d.ts.map +0 -0
  842. /package/{dist/components → components}/onboarding/ConnectionStep.js +0 -0
  843. /package/{dist/components → components}/onboarding/IdentityStep.d.ts +0 -0
  844. /package/{dist/components → components}/onboarding/IdentityStep.d.ts.map +0 -0
  845. /package/{dist/components → components}/onboarding/IdentityStep.js +0 -0
  846. /package/{dist/components → components}/onboarding/OnboardingPanel.d.ts +0 -0
  847. /package/{dist/components → components}/onboarding/OnboardingPanel.d.ts.map +0 -0
  848. /package/{dist/components → components}/onboarding/OnboardingPanel.js +0 -0
  849. /package/{dist/components → components}/onboarding/OnboardingStepNav.d.ts +0 -0
  850. /package/{dist/components → components}/onboarding/OnboardingStepNav.d.ts.map +0 -0
  851. /package/{dist/components → components}/onboarding/OnboardingStepNav.js +0 -0
  852. /package/{dist/components → components}/onboarding/PermissionsStep.d.ts +0 -0
  853. /package/{dist/components → components}/onboarding/PermissionsStep.d.ts.map +0 -0
  854. /package/{dist/components → components}/onboarding/PermissionsStep.js +0 -0
  855. /package/{dist/components → components}/onboarding/RpcStep.d.ts +0 -0
  856. /package/{dist/components → components}/onboarding/RpcStep.d.ts.map +0 -0
  857. /package/{dist/components → components}/onboarding/RpcStep.js +0 -0
  858. /package/{dist/components → components}/permissions/PermissionIcon.d.ts +0 -0
  859. /package/{dist/components → components}/permissions/PermissionIcon.d.ts.map +0 -0
  860. /package/{dist/components → components}/permissions/PermissionIcon.js +0 -0
  861. /package/{dist/components → components}/permissions/StreamingPermissions.d.ts +0 -0
  862. /package/{dist/components → components}/permissions/StreamingPermissions.d.ts.map +0 -0
  863. /package/{dist/components → components}/plugins/showcase-data.d.ts +0 -0
  864. /package/{dist/components → components}/plugins/showcase-data.d.ts.map +0 -0
  865. /package/{dist/components → components}/plugins/showcase-data.js +0 -0
  866. /package/{dist/components → components}/shared/ShellHeaderControls.d.ts +0 -0
  867. /package/{dist/components → components}/shared/ShellHeaderControls.d.ts.map +0 -0
  868. /package/{dist/components → components}/shared/ShellHeaderControls.js +0 -0
  869. /package/{dist/components → components}/shared-companion-scene-context.d.ts +0 -0
  870. /package/{dist/components → components}/shared-companion-scene-context.d.ts.map +0 -0
  871. /package/{dist/components → components}/shared-companion-scene-context.js +0 -0
  872. /package/{dist/components → components}/skeletons.d.ts +0 -0
  873. /package/{dist/components → components}/skeletons.d.ts.map +0 -0
  874. /package/{dist/components → components}/skeletons.js +0 -0
  875. /package/{dist/components → components}/stream/ActivityFeed.d.ts +0 -0
  876. /package/{dist/components → components}/stream/ActivityFeed.d.ts.map +0 -0
  877. /package/{dist/components → components}/stream/ActivityFeed.js +0 -0
  878. /package/{dist/components → components}/stream/AvatarPip.d.ts +0 -0
  879. /package/{dist/components → components}/stream/AvatarPip.d.ts.map +0 -0
  880. /package/{dist/components → components}/stream/AvatarPip.js +0 -0
  881. /package/{dist/components → components}/stream/ChatContent.d.ts +0 -0
  882. /package/{dist/components → components}/stream/ChatContent.d.ts.map +0 -0
  883. /package/{dist/components → components}/stream/ChatContent.js +0 -0
  884. /package/{dist/components → components}/stream/ChatTicker.d.ts +0 -0
  885. /package/{dist/components → components}/stream/ChatTicker.d.ts.map +0 -0
  886. /package/{dist/components → components}/stream/ChatTicker.js +0 -0
  887. /package/{dist/components → components}/stream/IdleContent.d.ts +0 -0
  888. /package/{dist/components → components}/stream/IdleContent.d.ts.map +0 -0
  889. /package/{dist/components → components}/stream/IdleContent.js +0 -0
  890. /package/{dist/components → components}/stream/StatusBar.d.ts +0 -0
  891. /package/{dist/components → components}/stream/StatusBar.d.ts.map +0 -0
  892. /package/{dist/components → components}/stream/StreamSettings.d.ts +0 -0
  893. /package/{dist/components → components}/stream/StreamSettings.d.ts.map +0 -0
  894. /package/{dist/components → components}/stream/StreamSettings.js +0 -0
  895. /package/{dist/components → components}/stream/StreamTerminal.d.ts +0 -0
  896. /package/{dist/components → components}/stream/StreamTerminal.d.ts.map +0 -0
  897. /package/{dist/components → components}/stream/StreamTerminal.js +0 -0
  898. /package/{dist/components → components}/stream/StreamVoiceConfig.d.ts +0 -0
  899. /package/{dist/components → components}/stream/StreamVoiceConfig.d.ts.map +0 -0
  900. /package/{dist/components → components}/stream/StreamVoiceConfig.js +0 -0
  901. /package/{dist/components → components}/stream/helpers.d.ts +0 -0
  902. /package/{dist/components → components}/stream/helpers.d.ts.map +0 -0
  903. /package/{dist/components → components}/stream/helpers.js +0 -0
  904. /package/{dist/components → components}/stream/overlays/OverlayLayer.d.ts +0 -0
  905. /package/{dist/components → components}/stream/overlays/OverlayLayer.d.ts.map +0 -0
  906. /package/{dist/components → components}/stream/overlays/OverlayLayer.js +0 -0
  907. /package/{dist/components → components}/stream/overlays/built-in/ActionTickerWidget.d.ts +0 -0
  908. /package/{dist/components → components}/stream/overlays/built-in/ActionTickerWidget.d.ts.map +0 -0
  909. /package/{dist/components → components}/stream/overlays/built-in/ActionTickerWidget.js +0 -0
  910. /package/{dist/components → components}/stream/overlays/built-in/AlertPopupWidget.d.ts +0 -0
  911. /package/{dist/components → components}/stream/overlays/built-in/AlertPopupWidget.d.ts.map +0 -0
  912. /package/{dist/components → components}/stream/overlays/built-in/AlertPopupWidget.js +0 -0
  913. /package/{dist/components → components}/stream/overlays/built-in/BrandingWidget.d.ts +0 -0
  914. /package/{dist/components → components}/stream/overlays/built-in/BrandingWidget.d.ts.map +0 -0
  915. /package/{dist/components → components}/stream/overlays/built-in/BrandingWidget.js +0 -0
  916. /package/{dist/components → components}/stream/overlays/built-in/CustomHtmlWidget.d.ts +0 -0
  917. /package/{dist/components → components}/stream/overlays/built-in/CustomHtmlWidget.d.ts.map +0 -0
  918. /package/{dist/components → components}/stream/overlays/built-in/CustomHtmlWidget.js +0 -0
  919. /package/{dist/components → components}/stream/overlays/built-in/PeonGlassWidget.d.ts +0 -0
  920. /package/{dist/components → components}/stream/overlays/built-in/PeonGlassWidget.d.ts.map +0 -0
  921. /package/{dist/components → components}/stream/overlays/built-in/PeonGlassWidget.js +0 -0
  922. /package/{dist/components → components}/stream/overlays/built-in/PeonHudWidget.d.ts +0 -0
  923. /package/{dist/components → components}/stream/overlays/built-in/PeonHudWidget.d.ts.map +0 -0
  924. /package/{dist/components → components}/stream/overlays/built-in/PeonHudWidget.js +0 -0
  925. /package/{dist/components → components}/stream/overlays/built-in/PeonSakuraWidget.d.ts +0 -0
  926. /package/{dist/components → components}/stream/overlays/built-in/PeonSakuraWidget.d.ts.map +0 -0
  927. /package/{dist/components → components}/stream/overlays/built-in/PeonSakuraWidget.js +0 -0
  928. /package/{dist/components → components}/stream/overlays/built-in/ThoughtBubbleWidget.d.ts +0 -0
  929. /package/{dist/components → components}/stream/overlays/built-in/ThoughtBubbleWidget.d.ts.map +0 -0
  930. /package/{dist/components → components}/stream/overlays/built-in/ThoughtBubbleWidget.js +0 -0
  931. /package/{dist/components → components}/stream/overlays/built-in/ViewerCountWidget.d.ts +0 -0
  932. /package/{dist/components → components}/stream/overlays/built-in/ViewerCountWidget.d.ts.map +0 -0
  933. /package/{dist/components → components}/stream/overlays/built-in/ViewerCountWidget.js +0 -0
  934. /package/{dist/components → components}/stream/overlays/built-in/index.d.ts +0 -0
  935. /package/{dist/components → components}/stream/overlays/built-in/index.d.ts.map +0 -0
  936. /package/{dist/components → components}/stream/overlays/built-in/index.js +0 -0
  937. /package/{dist/components → components}/stream/overlays/registry.d.ts +0 -0
  938. /package/{dist/components → components}/stream/overlays/registry.d.ts.map +0 -0
  939. /package/{dist/components → components}/stream/overlays/registry.js +0 -0
  940. /package/{dist/components → components}/stream/overlays/types.d.ts +0 -0
  941. /package/{dist/components → components}/stream/overlays/types.d.ts.map +0 -0
  942. /package/{dist/components → components}/stream/overlays/types.js +0 -0
  943. /package/{dist/components → components}/stream/overlays/useOverlayLayout.d.ts.map +0 -0
  944. /package/{dist/components → components}/trajectory-format.d.ts +0 -0
  945. /package/{dist/components → components}/trajectory-format.d.ts.map +0 -0
  946. /package/{dist/components → components}/trajectory-format.js +0 -0
  947. /package/{dist/components → components}/ui-badges.d.ts +0 -0
  948. /package/{dist/components → components}/ui-badges.d.ts.map +0 -0
  949. /package/{dist/components → components}/ui-badges.js +0 -0
  950. /package/{dist/components → components}/ui-switch.d.ts +0 -0
  951. /package/{dist/components → components}/ui-switch.d.ts.map +0 -0
  952. /package/{dist/components → components}/ui-switch.js +0 -0
  953. /package/{dist/components → components}/vector-browser-three.d.ts +0 -0
  954. /package/{dist/components → components}/vector-browser-three.d.ts.map +0 -0
  955. /package/{dist/components → components}/vector-browser-three.js +0 -0
  956. /package/{dist/config → config}/config-catalog.d.ts +0 -0
  957. /package/{dist/config → config}/config-catalog.d.ts.map +0 -0
  958. /package/{dist/config → config}/config-catalog.js +0 -0
  959. /package/{dist/config → config}/config-field.d.ts +0 -0
  960. /package/{dist/config → config}/config-field.d.ts.map +0 -0
  961. /package/{dist/config → config}/config-field.js +0 -0
  962. /package/{dist/config → config}/config-renderer.d.ts +0 -0
  963. /package/{dist/config → config}/config-renderer.d.ts.map +0 -0
  964. /package/{dist/config → config}/config-renderer.js +0 -0
  965. /package/{dist/config → config}/index.d.ts +0 -0
  966. /package/{dist/config → config}/index.d.ts.map +0 -0
  967. /package/{dist/config → config}/index.js +0 -0
  968. /package/{dist/config → config}/ui-renderer.d.ts +0 -0
  969. /package/{dist/config → config}/ui-renderer.d.ts.map +0 -0
  970. /package/{dist/config → config}/ui-renderer.js +0 -0
  971. /package/{dist/config → config}/ui-spec.d.ts +0 -0
  972. /package/{dist/config → config}/ui-spec.d.ts.map +0 -0
  973. /package/{dist/config → config}/ui-spec.js +0 -0
  974. /package/{dist/hooks → hooks}/index.d.ts +0 -0
  975. /package/{dist/hooks → hooks}/index.d.ts.map +0 -0
  976. /package/{dist/hooks → hooks}/index.js +0 -0
  977. /package/{dist/hooks → hooks}/useBugReport.d.ts +0 -0
  978. /package/{dist/hooks → hooks}/useBugReport.d.ts.map +0 -0
  979. /package/{dist/hooks → hooks}/useBugReport.js +0 -0
  980. /package/{dist/hooks → hooks}/useCanvasWindow.d.ts +0 -0
  981. /package/{dist/hooks → hooks}/useCanvasWindow.d.ts.map +0 -0
  982. /package/{dist/hooks → hooks}/useCanvasWindow.js +0 -0
  983. /package/{dist/hooks → hooks}/useChatAvatarVoice.d.ts +0 -0
  984. /package/{dist/hooks → hooks}/useChatAvatarVoice.d.ts.map +0 -0
  985. /package/{dist/hooks → hooks}/useChatAvatarVoice.js +0 -0
  986. /package/{dist/hooks → hooks}/useContextMenu.d.ts +0 -0
  987. /package/{dist/hooks → hooks}/useContextMenu.d.ts.map +0 -0
  988. /package/{dist/hooks → hooks}/useContextMenu.js +0 -0
  989. /package/{dist/hooks → hooks}/useKeyboardShortcuts.d.ts +0 -0
  990. /package/{dist/hooks → hooks}/useKeyboardShortcuts.d.ts.map +0 -0
  991. /package/{dist/hooks → hooks}/useKeyboardShortcuts.js +0 -0
  992. /package/{dist/hooks → hooks}/useLifoSync.d.ts +0 -0
  993. /package/{dist/hooks → hooks}/useLifoSync.d.ts.map +0 -0
  994. /package/{dist/hooks → hooks}/useLifoSync.js +0 -0
  995. /package/{dist/hooks → hooks}/useMemoryMonitor.d.ts +0 -0
  996. /package/{dist/hooks → hooks}/useMemoryMonitor.d.ts.map +0 -0
  997. /package/{dist/hooks → hooks}/useMemoryMonitor.js +0 -0
  998. /package/{dist/hooks → hooks}/useRenderGuard.d.ts +0 -0
  999. /package/{dist/hooks → hooks}/useRenderGuard.d.ts.map +0 -0
  1000. /package/{dist/hooks → hooks}/useRenderGuard.js +0 -0
  1001. /package/{dist/hooks → hooks}/useRetakeCapture.d.ts +0 -0
  1002. /package/{dist/hooks → hooks}/useRetakeCapture.d.ts.map +0 -0
  1003. /package/{dist/hooks → hooks}/useStreamPopoutNavigation.d.ts +0 -0
  1004. /package/{dist/hooks → hooks}/useStreamPopoutNavigation.d.ts.map +0 -0
  1005. /package/{dist/hooks → hooks}/useStreamPopoutNavigation.js +0 -0
  1006. /package/{dist/hooks → hooks}/useTimeout.d.ts +0 -0
  1007. /package/{dist/hooks → hooks}/useTimeout.d.ts.map +0 -0
  1008. /package/{dist/hooks → hooks}/useTimeout.js +0 -0
  1009. /package/{dist/hooks → hooks}/useVoiceChat.d.ts +0 -0
  1010. /package/{dist/hooks → hooks}/useVoiceChat.d.ts.map +0 -0
  1011. /package/{dist/hooks → hooks}/useVoiceChat.js +0 -0
  1012. /package/{dist/hooks → hooks}/useWhatsAppPairing.d.ts +0 -0
  1013. /package/{dist/hooks → hooks}/useWhatsAppPairing.d.ts.map +0 -0
  1014. /package/{dist/hooks → hooks}/useWhatsAppPairing.js +0 -0
  1015. /package/{dist/i18n → i18n}/index.d.ts +0 -0
  1016. /package/{dist/i18n → i18n}/index.d.ts.map +0 -0
  1017. /package/{dist/i18n → i18n}/index.js +0 -0
  1018. /package/{dist/i18n → i18n}/messages.d.ts +0 -0
  1019. /package/{dist/i18n → i18n}/messages.d.ts.map +0 -0
  1020. /package/{dist/i18n → i18n}/messages.js +0 -0
  1021. /package/{dist/index.d.ts → index.d.ts} +0 -0
  1022. /package/{dist/index.d.ts.map → index.d.ts.map} +0 -0
  1023. /package/{dist/index.js → index.js} +0 -0
  1024. /package/{dist/navigation → navigation}/index.d.ts +0 -0
  1025. /package/{dist/navigation → navigation}/index.d.ts.map +0 -0
  1026. /package/{dist/onboarding-config.d.ts → onboarding-config.d.ts} +0 -0
  1027. /package/{dist/onboarding-config.d.ts.map → onboarding-config.d.ts.map} +0 -0
  1028. /package/{dist/onboarding-config.js → onboarding-config.js} +0 -0
  1029. /package/{dist/platform → platform}/browser-launch.d.ts +0 -0
  1030. /package/{dist/platform → platform}/browser-launch.d.ts.map +0 -0
  1031. /package/{dist/platform → platform}/index.d.ts +0 -0
  1032. /package/{dist/platform → platform}/index.d.ts.map +0 -0
  1033. /package/{dist/platform → platform}/index.js +0 -0
  1034. /package/{dist/providers → providers}/index.d.ts +0 -0
  1035. /package/{dist/providers → providers}/index.d.ts.map +0 -0
  1036. /package/{dist/providers → providers}/index.js +0 -0
  1037. /package/{dist/state → state}/AppContext.d.ts +0 -0
  1038. /package/{dist/state → state}/AppContext.d.ts.map +0 -0
  1039. /package/{dist/state → state}/index.d.ts +0 -0
  1040. /package/{dist/state → state}/index.d.ts.map +0 -0
  1041. /package/{dist/state → state}/index.js +0 -0
  1042. /package/{dist/state → state}/internal.d.ts +0 -0
  1043. /package/{dist/state → state}/internal.d.ts.map +0 -0
  1044. /package/{dist/state → state}/internal.js +0 -0
  1045. /package/{dist/state → state}/onboarding-resume.d.ts +0 -0
  1046. /package/{dist/state → state}/onboarding-resume.d.ts.map +0 -0
  1047. /package/{dist/state → state}/parsers.d.ts +0 -0
  1048. /package/{dist/state → state}/parsers.d.ts.map +0 -0
  1049. /package/{dist/state → state}/parsers.js +0 -0
  1050. /package/{dist/state → state}/persistence.d.ts +0 -0
  1051. /package/{dist/state → state}/persistence.d.ts.map +0 -0
  1052. /package/{dist/state → state}/shell-routing.d.ts +0 -0
  1053. /package/{dist/state → state}/shell-routing.d.ts.map +0 -0
  1054. /package/{dist/state → state}/shell-routing.js +0 -0
  1055. /package/{dist/state → state}/types.d.ts +0 -0
  1056. /package/{dist/state → state}/types.d.ts.map +0 -0
  1057. /package/{dist/state → state}/types.js +0 -0
  1058. /package/{dist/state → state}/ui-preferences.d.ts +0 -0
  1059. /package/{dist/state → state}/ui-preferences.d.ts.map +0 -0
  1060. /package/{dist/state → state}/ui-preferences.js +0 -0
  1061. /package/{dist/state → state}/useApp.d.ts +0 -0
  1062. /package/{dist/state → state}/useApp.d.ts.map +0 -0
  1063. /package/{dist/state → state}/useApp.js +0 -0
  1064. /package/{dist/stories → stories}/AppMockProvider.d.ts +0 -0
  1065. /package/{dist/stories → stories}/AppMockProvider.d.ts.map +0 -0
  1066. /package/{dist/stories → stories}/AppMockProvider.js +0 -0
  1067. /package/{src/styles → styles}/anime.css +0 -0
  1068. /package/{src/styles → styles}/base.css +0 -0
  1069. /package/{src/styles → styles}/onboarding-game.css +0 -0
  1070. /package/{src/styles → styles}/styles.css +0 -0
  1071. /package/{src/styles → styles}/xterm.css +0 -0
  1072. /package/{dist/types → types}/index.d.ts +0 -0
  1073. /package/{dist/types → types}/index.d.ts.map +0 -0
  1074. /package/{dist/types → types}/index.js +0 -0
  1075. /package/{dist/utils → utils}/asset-url.d.ts.map +0 -0
  1076. /package/{dist/utils → utils}/assistant-text.d.ts +0 -0
  1077. /package/{dist/utils → utils}/assistant-text.d.ts.map +0 -0
  1078. /package/{dist/utils → utils}/assistant-text.js +0 -0
  1079. /package/{dist/utils → utils}/clipboard.d.ts +0 -0
  1080. /package/{dist/utils → utils}/clipboard.d.ts.map +0 -0
  1081. /package/{dist/utils → utils}/clipboard.js +0 -0
  1082. /package/{dist/utils → utils}/desktop-dialogs.d.ts +0 -0
  1083. /package/{dist/utils → utils}/desktop-dialogs.d.ts.map +0 -0
  1084. /package/{dist/utils → utils}/desktop-dialogs.js +0 -0
  1085. /package/{dist/utils → utils}/index.d.ts +0 -0
  1086. /package/{dist/utils → utils}/index.d.ts.map +0 -0
  1087. /package/{dist/utils → utils}/index.js +0 -0
  1088. /package/{dist/utils → utils}/number-parsing.d.ts +0 -0
  1089. /package/{dist/utils → utils}/number-parsing.d.ts.map +0 -0
  1090. /package/{dist/utils → utils}/number-parsing.js +0 -0
  1091. /package/{dist/utils → utils}/openExternalUrl.d.ts +0 -0
  1092. /package/{dist/utils → utils}/openExternalUrl.d.ts.map +0 -0
  1093. /package/{dist/utils → utils}/openExternalUrl.js +0 -0
  1094. /package/{dist/utils → utils}/spoken-text.d.ts +0 -0
  1095. /package/{dist/utils → utils}/spoken-text.d.ts.map +0 -0
  1096. /package/{dist/utils → utils}/spoken-text.js +0 -0
  1097. /package/{dist/utils → utils}/streaming-text.d.ts +0 -0
  1098. /package/{dist/utils → utils}/streaming-text.d.ts.map +0 -0
  1099. /package/{dist/utils → utils}/streaming-text.js +0 -0
  1100. /package/{dist/voice → voice}/index.d.ts +0 -0
  1101. /package/{dist/voice → voice}/index.d.ts.map +0 -0
  1102. /package/{dist/voice → voice}/index.js +0 -0
  1103. /package/{dist/voice → voice}/types.d.ts +0 -0
  1104. /package/{dist/voice → voice}/types.d.ts.map +0 -0
  1105. /package/{dist/voice → voice}/types.js +0 -0
  1106. /package/{dist/wallet-rpc.d.ts → wallet-rpc.d.ts} +0 -0
  1107. /package/{dist/wallet-rpc.d.ts.map → wallet-rpc.d.ts.map} +0 -0
  1108. /package/{dist/wallet-rpc.js → wallet-rpc.js} +0 -0
@@ -1,1633 +0,0 @@
1
- /**
2
- * Vector Browser — explore agent memories and embeddings.
3
- *
4
- * Reads from the memories table (or similar vector-storage tables) using
5
- * the generic database APIs. Shows paginated memory records with content,
6
- * metadata, and embedding previews. Click any card to see full details.
7
- * Toggle to a 2D scatter-plot graph view of embeddings.
8
- */
9
-
10
- import { Button, Input } from "@elizaos/ui";
11
- import { useCallback, useEffect, useMemo, useRef, useState } from "react";
12
- import { client, type QueryResult, type TableInfo } from "../api";
13
- import { useApp } from "../state";
14
- import { createVectorBrowserRenderer, THREE } from "./vector-browser-three";
15
-
16
- const PAGE_SIZE = 25;
17
- const MAX_THREE_PIXEL_RATIO = 2;
18
-
19
- type ViewMode = "list" | "graph" | "3d";
20
-
21
- /** The dimension columns in the elizaOS `embeddings` table. */
22
- const DIM_COLUMNS = [
23
- "dim_384",
24
- "dim_512",
25
- "dim_768",
26
- "dim_1024",
27
- "dim_1536",
28
- "dim_3072",
29
- ] as const;
30
-
31
- interface MemoryRecord {
32
- id: string;
33
- content: string;
34
- roomId: string;
35
- entityId: string;
36
- type: string;
37
- createdAt: string;
38
- unique: boolean;
39
- embedding: number[] | null;
40
- raw: Record<string, unknown>;
41
- }
42
-
43
- function hasEmbedding(
44
- memory: MemoryRecord,
45
- ): memory is MemoryRecord & { embedding: number[] } {
46
- return memory.embedding !== null;
47
- }
48
-
49
- interface VectorGraph2DBounds {
50
- minX: number;
51
- minY: number;
52
- rangeX: number;
53
- rangeY: number;
54
- }
55
-
56
- interface VectorGraph2DLayout {
57
- bounds: VectorGraph2DBounds;
58
- points: [number, number][];
59
- typeColors: Record<string, string>;
60
- withEmbeddings: Array<MemoryRecord & { embedding: number[] }>;
61
- }
62
-
63
- const VECTOR_GRAPH_2D_PALETTE = [
64
- "#6cf",
65
- "#f59e0b",
66
- "#10b981",
67
- "#ef4444",
68
- "#8b5cf6",
69
- "#ec4899",
70
- "#06b6d4",
71
- "#84cc16",
72
- ];
73
-
74
- /** Try to parse a JSON content field, returning the text content or the raw string. */
75
- function parseContent(val: unknown): string {
76
- if (typeof val !== "string") return String(val ?? "");
77
- if (val.startsWith("{")) {
78
- try {
79
- const parsed = JSON.parse(val);
80
- if (parsed.text) return String(parsed.text);
81
- return val;
82
- } catch {
83
- return val;
84
- }
85
- }
86
- return val;
87
- }
88
-
89
- /** Parse an embedding from various storage formats (pgvector text, JSON, typed arrays). */
90
- function parseEmbedding(val: unknown): number[] | null {
91
- if (!val) return null;
92
- if (Array.isArray(val)) return val as number[];
93
- // Handle typed arrays (Float32Array, Float64Array, Uint8Array etc.)
94
- if (ArrayBuffer.isView(val)) {
95
- return Array.from(val as Float64Array);
96
- }
97
- if (typeof val === "string" && val.length > 2) {
98
- const trimmed = val.trim();
99
- // pgvector text format: [0.1,0.2,0.3] — also valid JSON
100
- // Also handle without brackets: 0.1,0.2,0.3
101
- const inner =
102
- trimmed.startsWith("[") && trimmed.endsWith("]")
103
- ? trimmed.slice(1, -1)
104
- : trimmed;
105
- if (!inner) return null;
106
- // Fast path: split by comma and parse floats
107
- const parts = inner.split(",");
108
- if (parts.length < 2) return null;
109
- const nums: number[] = [];
110
- for (const p of parts) {
111
- const n = Number.parseFloat(p);
112
- if (Number.isNaN(n)) return null;
113
- nums.push(n);
114
- }
115
- return nums;
116
- }
117
- return null;
118
- }
119
-
120
- function rowToMemory(row: Record<string, unknown>): MemoryRecord {
121
- // Try explicit embedding/vector column first, then check elizaOS dim_* columns
122
- let embeddingVal = row.embedding ?? row.vector ?? row.embeddings;
123
- if (!embeddingVal) {
124
- for (const dim of DIM_COLUMNS) {
125
- if (row[dim]) {
126
- embeddingVal = row[dim];
127
- break;
128
- }
129
- }
130
- }
131
-
132
- return {
133
- id: String(row.id ?? row.ID ?? row.memory_id ?? ""),
134
- content: parseContent(row.content ?? row.body ?? row.text ?? ""),
135
- roomId: String(row.roomId ?? row.room_id ?? row.roomID ?? ""),
136
- entityId: String(
137
- row.entityId ??
138
- row.entity_id ??
139
- row.entityID ??
140
- row.userId ??
141
- row.user_id ??
142
- "",
143
- ),
144
- type: String(row.type ?? row.memoryType ?? row.memory_type ?? ""),
145
- createdAt: String(row.createdAt ?? row.created_at ?? row.timestamp ?? ""),
146
- unique: row.unique === true || row.unique === 1 || row.isUnique === true,
147
- embedding: parseEmbedding(embeddingVal),
148
- raw: row,
149
- };
150
- }
151
-
152
- function buildVectorGraph2DLayout(
153
- memories: MemoryRecord[],
154
- ): VectorGraph2DLayout | null {
155
- const withEmbeddings = memories.filter(hasEmbedding);
156
- if (withEmbeddings.length < 2) {
157
- return null;
158
- }
159
-
160
- const points = projectTo2D(withEmbeddings.map((memory) => memory.embedding));
161
- let minX = Infinity;
162
- let maxX = -Infinity;
163
- let minY = Infinity;
164
- let maxY = -Infinity;
165
- for (const [x, y] of points) {
166
- if (x < minX) minX = x;
167
- if (x > maxX) maxX = x;
168
- if (y < minY) minY = y;
169
- if (y > maxY) maxY = y;
170
- }
171
-
172
- const typeColors: Record<string, string> = {};
173
- const types = [...new Set(withEmbeddings.map((memory) => memory.type))];
174
- for (let index = 0; index < types.length; index += 1) {
175
- typeColors[types[index]] =
176
- VECTOR_GRAPH_2D_PALETTE[index % VECTOR_GRAPH_2D_PALETTE.length];
177
- }
178
-
179
- return {
180
- bounds: {
181
- minX,
182
- minY,
183
- rangeX: maxX - minX || 1,
184
- rangeY: maxY - minY || 1,
185
- },
186
- points,
187
- typeColors,
188
- withEmbeddings,
189
- };
190
- }
191
-
192
- function toVectorGraph2DScreenX(
193
- x: number,
194
- width: number,
195
- padding: number,
196
- bounds: VectorGraph2DBounds,
197
- ): number {
198
- return padding + ((x - bounds.minX) / bounds.rangeX) * (width - 2 * padding);
199
- }
200
-
201
- function toVectorGraph2DScreenY(
202
- y: number,
203
- height: number,
204
- padding: number,
205
- bounds: VectorGraph2DBounds,
206
- ): number {
207
- return padding + ((y - bounds.minY) / bounds.rangeY) * (height - 2 * padding);
208
- }
209
-
210
- // ── PCA projection utilities ───────────────────────────────────────────
211
-
212
- function dot(a: number[], b: Float64Array | number[]): number {
213
- let s = 0;
214
- for (let i = 0; i < a.length; i++) s += a[i] * (b[i] ?? 0);
215
- return s;
216
- }
217
-
218
- function powerIteration(
219
- data: number[][],
220
- dims: number,
221
- iters = 30,
222
- ): Float64Array {
223
- const v = new Float64Array(dims);
224
- // Random init
225
- for (let d = 0; d < dims; d++) v[d] = Math.random() - 0.5;
226
- normalize(v);
227
-
228
- for (let iter = 0; iter < iters; iter++) {
229
- const w = new Float64Array(dims);
230
- for (const row of data) {
231
- const d = dot(row, v);
232
- for (let j = 0; j < dims; j++) w[j] += d * row[j];
233
- }
234
- normalize(w);
235
- for (let d = 0; d < dims; d++) v[d] = w[d];
236
- }
237
- return v;
238
- }
239
-
240
- function normalize(v: Float64Array) {
241
- let len = 0;
242
- for (let i = 0; i < v.length; i++) len += v[i] * v[i];
243
- len = Math.sqrt(len) || 1;
244
- for (let i = 0; i < v.length; i++) v[i] /= len;
245
- }
246
-
247
- /** Compute mean and center data for PCA. */
248
- function centerData(vectors: number[][]): {
249
- centered: number[][];
250
- mean: Float64Array;
251
- } {
252
- const dims = vectors[0].length;
253
- const n = vectors.length;
254
- const mean = new Float64Array(dims);
255
- for (const v of vectors) {
256
- for (let d = 0; d < dims; d++) mean[d] += v[d];
257
- }
258
- for (let d = 0; d < dims; d++) mean[d] /= n;
259
- const centered = vectors.map((v) => v.map((x, d) => x - mean[d]));
260
- return { centered, mean };
261
- }
262
-
263
- /** Deflate data by removing projection onto a principal component. */
264
- function deflate(data: number[][], pc: Float64Array): number[][] {
265
- const proj = data.map((v) => dot(v, pc));
266
- return data.map((v, i) => v.map((x, d) => x - proj[i] * pc[d]));
267
- }
268
-
269
- /** Project high-dimensional vectors to 2D using the first two principal axes. */
270
- function projectTo2D(vectors: number[][]): [number, number][] {
271
- if (vectors.length === 0) return [];
272
- const dims = vectors[0].length;
273
- const { centered } = centerData(vectors);
274
-
275
- const pc1 = powerIteration(centered, dims);
276
- const deflated1 = deflate(centered, pc1);
277
- const pc2 = powerIteration(deflated1, dims);
278
-
279
- return centered.map((v) => [dot(v, pc1), dot(v, pc2)] as [number, number]);
280
- }
281
-
282
- /** Project high-dimensional vectors to 3D using the first three principal axes. */
283
- function projectTo3D(vectors: number[][]): [number, number, number][] {
284
- if (vectors.length === 0) return [];
285
- const dims = vectors[0].length;
286
- const { centered } = centerData(vectors);
287
-
288
- const pc1 = powerIteration(centered, dims);
289
- const deflated1 = deflate(centered, pc1);
290
- const pc2 = powerIteration(deflated1, dims);
291
- const deflated2 = deflate(deflated1, pc2);
292
- const pc3 = powerIteration(deflated2, dims);
293
-
294
- return centered.map(
295
- (v) => [dot(v, pc1), dot(v, pc2), dot(v, pc3)] as [number, number, number],
296
- );
297
- }
298
-
299
- // ── Graph sub-component ────────────────────────────────────────────────
300
-
301
- function VectorGraph({
302
- memories,
303
- onSelect,
304
- }: {
305
- memories: MemoryRecord[];
306
- onSelect: (mem: MemoryRecord) => void;
307
- }) {
308
- const { t } = useApp();
309
- const canvasRef = useRef<HTMLCanvasElement>(null);
310
- const containerRef = useRef<HTMLDivElement>(null);
311
- const [hoveredIdx, setHoveredIdx] = useState<number | null>(null);
312
- const graph = useMemo(() => buildVectorGraph2DLayout(memories), [memories]);
313
-
314
- useEffect(() => {
315
- const canvas = canvasRef.current;
316
- const container = containerRef.current;
317
- if (!canvas || !container || !graph) return;
318
-
319
- const rect = container.getBoundingClientRect();
320
- const W = rect.width;
321
- const H = 500;
322
- const dpr = window.devicePixelRatio || 1;
323
- canvas.width = W * dpr;
324
- canvas.height = H * dpr;
325
- canvas.style.width = `${W}px`;
326
- canvas.style.height = `${H}px`;
327
-
328
- const ctx = canvas.getContext("2d");
329
- if (!ctx) return;
330
- ctx.setTransform(dpr, 0, 0, dpr, 0, 0);
331
-
332
- const pad = 40;
333
-
334
- // Background
335
- const style = getComputedStyle(document.documentElement);
336
- const bgColor = style.getPropertyValue("--bg").trim() || "#111";
337
- const borderColor = style.getPropertyValue("--border").trim() || "#333";
338
- const accentColor = style.getPropertyValue("--accent").trim() || "#6cf";
339
- const mutedColor = style.getPropertyValue("--muted").trim() || "#888";
340
-
341
- ctx.fillStyle = bgColor;
342
- ctx.fillRect(0, 0, W, H);
343
-
344
- // Grid lines
345
- ctx.strokeStyle = borderColor;
346
- ctx.lineWidth = 0.5;
347
- for (let i = 0; i <= 4; i++) {
348
- const x = pad + (i / 4) * (W - 2 * pad);
349
- const y = pad + (i / 4) * (H - 2 * pad);
350
- ctx.beginPath();
351
- ctx.moveTo(x, pad);
352
- ctx.lineTo(x, H - pad);
353
- ctx.stroke();
354
- ctx.beginPath();
355
- ctx.moveTo(pad, y);
356
- ctx.lineTo(W - pad, y);
357
- ctx.stroke();
358
- }
359
-
360
- // Axis labels
361
- ctx.fillStyle = mutedColor;
362
- ctx.font = "10px monospace";
363
- ctx.textAlign = "center";
364
- ctx.fillText("PC1", W / 2, H - 8);
365
- ctx.save();
366
- ctx.translate(12, H / 2);
367
- ctx.rotate(-Math.PI / 2);
368
- ctx.fillText("PC2", 0, 0);
369
- ctx.restore();
370
-
371
- // Draw points
372
- for (let i = 0; i < graph.points.length; i++) {
373
- const sx = toVectorGraph2DScreenX(
374
- graph.points[i][0],
375
- W,
376
- pad,
377
- graph.bounds,
378
- );
379
- const sy = toVectorGraph2DScreenY(
380
- graph.points[i][1],
381
- H,
382
- pad,
383
- graph.bounds,
384
- );
385
- const memory = graph.withEmbeddings[i];
386
- const color = graph.typeColors[memory.type] || accentColor;
387
- const isHovered = hoveredIdx === i;
388
-
389
- ctx.beginPath();
390
- ctx.arc(sx, sy, isHovered ? 6 : 4, 0, Math.PI * 2);
391
- ctx.fillStyle = color;
392
- ctx.globalAlpha = isHovered ? 1 : 0.7;
393
- ctx.fill();
394
- ctx.globalAlpha = 1;
395
-
396
- if (isHovered) {
397
- ctx.strokeStyle = "#fff";
398
- ctx.lineWidth = 1.5;
399
- ctx.stroke();
400
- }
401
- }
402
-
403
- // Tooltip for hovered point
404
- if (hoveredIdx !== null && hoveredIdx < graph.points.length) {
405
- const sx = toVectorGraph2DScreenX(
406
- graph.points[hoveredIdx][0],
407
- W,
408
- pad,
409
- graph.bounds,
410
- );
411
- const sy = toVectorGraph2DScreenY(
412
- graph.points[hoveredIdx][1],
413
- H,
414
- pad,
415
- graph.bounds,
416
- );
417
- const memory = graph.withEmbeddings[hoveredIdx];
418
- const label =
419
- memory.content.slice(0, 60) + (memory.content.length > 60 ? "..." : "");
420
-
421
- ctx.font = "11px sans-serif";
422
- const metrics = ctx.measureText(label);
423
- const tw = metrics.width + 12;
424
- const th = 22;
425
- let tx = sx + 10;
426
- let ty = sy - 10 - th;
427
- if (tx + tw > W) tx = sx - tw - 10;
428
- if (ty < 0) ty = sy + 10;
429
-
430
- ctx.fillStyle = "rgba(0,0,0,0.85)";
431
- ctx.fillRect(tx, ty, tw, th);
432
- ctx.fillStyle = "#fff";
433
- ctx.textAlign = "left";
434
- ctx.fillText(label, tx + 6, ty + 15);
435
- }
436
-
437
- // Legend
438
- const types = Object.keys(graph.typeColors);
439
- if (types.length > 1) {
440
- let lx = pad;
441
- const ly = H - 4;
442
- ctx.font = "10px sans-serif";
443
- ctx.textAlign = "left";
444
- for (const type of types) {
445
- if (!type || type === "undefined") continue;
446
- ctx.fillStyle = graph.typeColors[type];
447
- ctx.fillRect(lx, ly - 8, 8, 8);
448
- ctx.fillStyle = mutedColor;
449
- ctx.fillText(type, lx + 11, ly);
450
- lx += ctx.measureText(type).width + 24;
451
- }
452
- }
453
- }, [graph, hoveredIdx]);
454
-
455
- // Mouse interaction
456
- const handleMouseMove = useCallback(
457
- (e: React.MouseEvent<HTMLCanvasElement>) => {
458
- const canvas = canvasRef.current;
459
- if (!canvas || !graph) return;
460
- const rect = canvas.getBoundingClientRect();
461
- const mx = e.clientX - rect.left;
462
- const my = e.clientY - rect.top;
463
-
464
- const W = rect.width;
465
- const H = rect.height;
466
- const pad = 40;
467
-
468
- let closest = -1;
469
- let closestDist = 15; // max pixel distance
470
- for (let i = 0; i < graph.points.length; i++) {
471
- const sx = toVectorGraph2DScreenX(
472
- graph.points[i][0],
473
- W,
474
- pad,
475
- graph.bounds,
476
- );
477
- const sy = toVectorGraph2DScreenY(
478
- graph.points[i][1],
479
- H,
480
- pad,
481
- graph.bounds,
482
- );
483
- const dist = Math.sqrt((mx - sx) ** 2 + (my - sy) ** 2);
484
- if (dist < closestDist) {
485
- closestDist = dist;
486
- closest = i;
487
- }
488
- }
489
- setHoveredIdx(closest >= 0 ? closest : null);
490
- },
491
- [graph],
492
- );
493
-
494
- const handleClick = useCallback(() => {
495
- if (
496
- graph &&
497
- hoveredIdx !== null &&
498
- hoveredIdx < graph.withEmbeddings.length
499
- ) {
500
- onSelect(graph.withEmbeddings[hoveredIdx]);
501
- }
502
- }, [graph, hoveredIdx, onSelect]);
503
-
504
- if (!graph) {
505
- const withEmbeddings = memories.filter(hasEmbedding);
506
- return (
507
- <div className="text-center py-16">
508
- <div className="text-[var(--muted)] text-sm mb-2">
509
- {t("vectorbrowserview.NotEnoughEmbedding")}
510
- </div>
511
- <div className="text-[var(--muted)] text-xs">
512
- {t("vectorbrowserview.NeedAtLeast2Memo")} {withEmbeddings.length}.
513
- </div>
514
- </div>
515
- );
516
- }
517
-
518
- return (
519
- <div ref={containerRef} className="w-full">
520
- <div className="text-[11px] text-[var(--muted)] mb-2">
521
- {graph.withEmbeddings.length}{" "}
522
- {t("vectorbrowserview.vectorsProjectedTo")}
523
- </div>
524
- <canvas
525
- ref={canvasRef}
526
- className="w-full border border-[var(--border)] cursor-crosshair"
527
- style={{ height: 500 }}
528
- onMouseMove={handleMouseMove}
529
- onMouseLeave={() => setHoveredIdx(null)}
530
- onClick={handleClick}
531
- />
532
- </div>
533
- );
534
- }
535
-
536
- // ── 3D Graph sub-component (Three.js) ──────────────────────────────────
537
-
538
- function VectorGraph3D({
539
- memories,
540
- onSelect,
541
- }: {
542
- memories: MemoryRecord[];
543
- onSelect: (mem: MemoryRecord) => void;
544
- }) {
545
- const { t } = useApp();
546
- const containerRef = useRef<HTMLDivElement>(null);
547
- const rendererRef = useRef<THREE.WebGLRenderer | null>(null);
548
- const sceneRef = useRef<THREE.Scene | null>(null);
549
- const cameraRef = useRef<THREE.PerspectiveCamera | null>(null);
550
- const spheresRef = useRef<THREE.Mesh[]>([]);
551
- const animationRef = useRef<number>(0);
552
- const [hoveredIdx, setHoveredIdx] = useState<number | null>(null);
553
- const [tooltipPos, setTooltipPos] = useState<{ x: number; y: number } | null>(
554
- null,
555
- );
556
- const [rendererUnavailable, setRendererUnavailable] = useState(false);
557
- const isDraggingRef = useRef(false);
558
- const mouseDownPosRef = useRef<{ x: number; y: number } | null>(null);
559
- const cleanupRef = useRef<(() => void) | null>(null);
560
-
561
- const withEmbeddings = useMemo(
562
- () => memories.filter(hasEmbedding),
563
- [memories],
564
- );
565
-
566
- const points3D = useMemo(() => {
567
- if (withEmbeddings.length < 2) return [];
568
- const vecs = withEmbeddings.map((m) => m.embedding);
569
- return projectTo3D(vecs);
570
- }, [withEmbeddings]);
571
-
572
- // Color palette for types
573
- const typeColors = useMemo(() => {
574
- const types = [...new Set(withEmbeddings.map((m) => m.type))];
575
- const palette = [
576
- 0x6699ff, 0xf59e0b, 0x10b981, 0xef4444, 0x8b5cf6, 0xec4899, 0x06b6d4,
577
- 0x84cc16,
578
- ];
579
- const map: Record<string, number> = {};
580
- types.forEach((t, i) => {
581
- map[t] = palette[i % palette.length];
582
- });
583
- return map;
584
- }, [withEmbeddings]);
585
-
586
- // Initialize Three.js scene
587
- useEffect(() => {
588
- const container = containerRef.current;
589
- if (!container || points3D.length === 0) return;
590
-
591
- let cancelled = false;
592
- cleanupRef.current = null;
593
- setRendererUnavailable(false);
594
-
595
- // Async renderer creation — tries WebGPU, falls back to WebGL.
596
- // All scene setup runs inside this async IIFE so the useEffect callback
597
- // itself remains synchronous (required for React cleanup return).
598
- void (async () => {
599
- const W = container.clientWidth;
600
- const H = 550;
601
-
602
- // Scene
603
- const scene = new THREE.Scene();
604
- scene.background = new THREE.Color(0x111111);
605
- sceneRef.current = scene;
606
-
607
- // Camera
608
- const camera = new THREE.PerspectiveCamera(60, W / H, 0.1, 1000);
609
- camera.position.set(0, 0, 5);
610
- cameraRef.current = camera;
611
-
612
- let renderer: THREE.WebGLRenderer;
613
- try {
614
- renderer = await createVectorBrowserRenderer();
615
- } catch {
616
- if (!cancelled) {
617
- setRendererUnavailable(true);
618
- }
619
- return;
620
- }
621
-
622
- // Guard: if the effect was cleaned up while awaiting WebGPU init, abort.
623
- if (cancelled) {
624
- renderer.dispose();
625
- return;
626
- }
627
-
628
- const raycaster = new THREE.Raycaster();
629
- const pointer = new THREE.Vector2();
630
- const geometry = new THREE.SphereGeometry(0.06, 16, 16);
631
- const spheres: THREE.Mesh[] = [];
632
- let gridHelper: THREE.GridHelper | null = null;
633
- let axisGeom: THREE.BufferGeometry | null = null;
634
- let axisMat: THREE.LineBasicMaterial | null = null;
635
- let onMouseDown: ((e: MouseEvent) => void) | null = null;
636
- let onMouseUp: (() => void) | null = null;
637
- let onMouseMove: ((e: MouseEvent) => void) | null = null;
638
- let onClick: ((e: MouseEvent) => void) | null = null;
639
- let onWheel: ((e: WheelEvent) => void) | null = null;
640
- let onMouseLeave: (() => void) | null = null;
641
- let handleResize: (() => void) | null = null;
642
- let cleanedUp = false;
643
-
644
- cleanupRef.current = () => {
645
- if (cleanedUp) return;
646
- cleanedUp = true;
647
- cancelAnimationFrame(animationRef.current);
648
- if (handleResize) {
649
- window.removeEventListener("resize", handleResize);
650
- }
651
- if (onMouseDown) {
652
- renderer.domElement.removeEventListener("mousedown", onMouseDown);
653
- }
654
- if (onMouseUp) {
655
- renderer.domElement.removeEventListener("mouseup", onMouseUp);
656
- }
657
- if (onMouseMove) {
658
- renderer.domElement.removeEventListener("mousemove", onMouseMove);
659
- }
660
- if (onClick) {
661
- renderer.domElement.removeEventListener("click", onClick);
662
- }
663
- if (onWheel) {
664
- renderer.domElement.removeEventListener("wheel", onWheel);
665
- }
666
- if (onMouseLeave) {
667
- renderer.domElement.removeEventListener("mouseleave", onMouseLeave);
668
- }
669
- geometry.dispose();
670
- axisGeom?.dispose();
671
- axisMat?.dispose();
672
- if (gridHelper) {
673
- const gridMaterial = Array.isArray(gridHelper.material)
674
- ? gridHelper.material
675
- : [gridHelper.material];
676
- for (const material of gridMaterial) {
677
- material.dispose();
678
- }
679
- gridHelper.geometry.dispose();
680
- }
681
- for (const sphere of spheres) {
682
- const material = sphere.material;
683
- if (Array.isArray(material)) {
684
- for (const entry of material) {
685
- entry.dispose();
686
- }
687
- } else {
688
- material.dispose();
689
- }
690
- }
691
- renderer.dispose();
692
- rendererRef.current = null;
693
- sceneRef.current = null;
694
- cameraRef.current = null;
695
- spheresRef.current = [];
696
- if (container.contains(renderer.domElement)) {
697
- container.removeChild(renderer.domElement);
698
- }
699
- };
700
-
701
- renderer.setSize(W, H);
702
- renderer.setPixelRatio(
703
- Math.min(window.devicePixelRatio || 1, MAX_THREE_PIXEL_RATIO),
704
- );
705
- container.appendChild(renderer.domElement);
706
- rendererRef.current = renderer;
707
- if (cancelled) {
708
- cleanupRef.current?.();
709
- cleanupRef.current = null;
710
- return;
711
- }
712
-
713
- // Compute bounds for scaling
714
- let minX = Infinity,
715
- maxX = -Infinity;
716
- let minY = Infinity,
717
- maxY = -Infinity;
718
- let minZ = Infinity,
719
- maxZ = -Infinity;
720
- for (const [x, y, z] of points3D) {
721
- if (x < minX) minX = x;
722
- if (x > maxX) maxX = x;
723
- if (y < minY) minY = y;
724
- if (y > maxY) maxY = y;
725
- if (z < minZ) minZ = z;
726
- if (z > maxZ) maxZ = z;
727
- }
728
- const rangeX = maxX - minX || 1;
729
- const rangeY = maxY - minY || 1;
730
- const rangeZ = maxZ - minZ || 1;
731
- const maxRange = Math.max(rangeX, rangeY, rangeZ);
732
- const scale = 3 / maxRange;
733
- const centerX = (minX + maxX) / 2;
734
- const centerY = (minY + maxY) / 2;
735
- const centerZ = (minZ + maxZ) / 2;
736
-
737
- for (let i = 0; i < points3D.length; i++) {
738
- const [x, y, z] = points3D[i];
739
- const mem = withEmbeddings[i];
740
- const color = typeColors[mem.type] ?? 0x6699ff;
741
- const material = new THREE.MeshBasicMaterial({
742
- color,
743
- transparent: true,
744
- opacity: 0.85,
745
- });
746
- const sphere = new THREE.Mesh(geometry, material);
747
- sphere.position.set(
748
- (x - centerX) * scale,
749
- (y - centerY) * scale,
750
- (z - centerZ) * scale,
751
- );
752
- sphere.userData = { index: i };
753
- scene.add(sphere);
754
- spheres.push(sphere);
755
- }
756
- spheresRef.current = spheres;
757
-
758
- // Add subtle grid helper
759
- gridHelper = new THREE.GridHelper(6, 12, 0x333333, 0x222222);
760
- gridHelper.position.y = -2;
761
- scene.add(gridHelper);
762
-
763
- // Add axis lines
764
- const axisLength = 2.5;
765
- axisGeom = new THREE.BufferGeometry();
766
- const axisPositions = new Float32Array([
767
- -axisLength,
768
- 0,
769
- 0,
770
- axisLength,
771
- 0,
772
- 0, // X axis
773
- 0,
774
- -axisLength,
775
- 0,
776
- 0,
777
- axisLength,
778
- 0, // Y axis
779
- 0,
780
- 0,
781
- -axisLength,
782
- 0,
783
- 0,
784
- axisLength, // Z axis
785
- ]);
786
- axisGeom.setAttribute(
787
- "position",
788
- new THREE.BufferAttribute(axisPositions, 3),
789
- );
790
- axisMat = new THREE.LineBasicMaterial({ color: 0x444444 });
791
- const axisLines = new THREE.LineSegments(axisGeom, axisMat);
792
- scene.add(axisLines);
793
-
794
- // Simple orbit controls (manual implementation)
795
- let theta = 0;
796
- let phi = Math.PI / 4;
797
- let radius = 5;
798
- let targetTheta = theta;
799
- let targetPhi = phi;
800
- let targetRadius = radius;
801
- const updatePointerFromEvent = (e: MouseEvent) => {
802
- const rect = renderer.domElement.getBoundingClientRect();
803
- pointer.set(
804
- ((e.clientX - rect.left) / rect.width) * 2 - 1,
805
- -((e.clientY - rect.top) / rect.height) * 2 + 1,
806
- );
807
- return rect;
808
- };
809
-
810
- const updateCamera = () => {
811
- theta += (targetTheta - theta) * 0.1;
812
- phi += (targetPhi - phi) * 0.1;
813
- radius += (targetRadius - radius) * 0.1;
814
- phi = Math.max(0.1, Math.min(Math.PI - 0.1, phi));
815
- camera.position.x = radius * Math.sin(phi) * Math.cos(theta);
816
- camera.position.y = radius * Math.cos(phi);
817
- camera.position.z = radius * Math.sin(phi) * Math.sin(theta);
818
- camera.lookAt(0, 0, 0);
819
- };
820
-
821
- onMouseDown = (e: MouseEvent) => {
822
- isDraggingRef.current = true;
823
- mouseDownPosRef.current = { x: e.clientX, y: e.clientY };
824
- };
825
-
826
- onMouseUp = () => {
827
- isDraggingRef.current = false;
828
- mouseDownPosRef.current = null;
829
- };
830
-
831
- onMouseMove = (e: MouseEvent) => {
832
- if (isDraggingRef.current) {
833
- targetTheta -= e.movementX * 0.01;
834
- targetPhi -= e.movementY * 0.01;
835
- }
836
-
837
- // Raycasting for hover
838
- const rect = updatePointerFromEvent(e);
839
- raycaster.setFromCamera(pointer, camera);
840
- const intersects = raycaster.intersectObjects(spheres);
841
-
842
- if (intersects.length > 0) {
843
- const idx = intersects[0].object.userData.index;
844
- setHoveredIdx(idx);
845
- setTooltipPos({ x: e.clientX - rect.left, y: e.clientY - rect.top });
846
- // Highlight hovered sphere
847
- spheres.forEach((s, i) => {
848
- const mat = s.material as THREE.MeshBasicMaterial;
849
- mat.opacity = i === idx ? 1 : 0.5;
850
- s.scale.setScalar(i === idx ? 1.5 : 1);
851
- });
852
- } else {
853
- setHoveredIdx(null);
854
- setTooltipPos(null);
855
- spheres.forEach((s) => {
856
- const mat = s.material as THREE.MeshBasicMaterial;
857
- mat.opacity = 0.85;
858
- s.scale.setScalar(1);
859
- });
860
- }
861
- };
862
-
863
- onClick = (e: MouseEvent) => {
864
- // Only trigger click if we didn't drag much
865
- if (mouseDownPosRef.current) {
866
- const dx = Math.abs(e.clientX - mouseDownPosRef.current.x);
867
- const dy = Math.abs(e.clientY - mouseDownPosRef.current.y);
868
- if (dx > 5 || dy > 5) return; // Was a drag, not a click
869
- }
870
-
871
- updatePointerFromEvent(e);
872
- raycaster.setFromCamera(pointer, camera);
873
- const intersects = raycaster.intersectObjects(spheres);
874
- if (intersects.length > 0) {
875
- const idx = intersects[0].object.userData.index;
876
- if (idx < withEmbeddings.length) {
877
- onSelect(withEmbeddings[idx]);
878
- }
879
- }
880
- };
881
-
882
- onWheel = (e: WheelEvent) => {
883
- e.preventDefault();
884
- targetRadius += e.deltaY * 0.005;
885
- targetRadius = Math.max(2, Math.min(15, targetRadius));
886
- };
887
-
888
- onMouseLeave = () => {
889
- isDraggingRef.current = false;
890
- setHoveredIdx(null);
891
- setTooltipPos(null);
892
- };
893
-
894
- renderer.domElement.addEventListener("mousedown", onMouseDown);
895
- renderer.domElement.addEventListener("mouseup", onMouseUp);
896
- renderer.domElement.addEventListener("mousemove", onMouseMove);
897
- renderer.domElement.addEventListener("click", onClick);
898
- renderer.domElement.addEventListener("wheel", onWheel, {
899
- passive: false,
900
- });
901
- renderer.domElement.addEventListener("mouseleave", onMouseLeave);
902
- if (cancelled) {
903
- cleanupRef.current?.();
904
- cleanupRef.current = null;
905
- return;
906
- }
907
-
908
- // Animation loop
909
- const animate = () => {
910
- updateCamera();
911
- renderer.render(scene, camera);
912
- animationRef.current = requestAnimationFrame(animate);
913
- };
914
- animate();
915
-
916
- // Resize handler
917
- handleResize = () => {
918
- const newW = container.clientWidth;
919
- camera.aspect = newW / H;
920
- camera.updateProjectionMatrix();
921
- renderer.setSize(newW, H);
922
- };
923
- window.addEventListener("resize", handleResize);
924
- })(); // end async IIFE
925
-
926
- return () => {
927
- cancelled = true;
928
- cleanupRef.current?.();
929
- cleanupRef.current = null;
930
- };
931
- }, [points3D, withEmbeddings, typeColors, onSelect]);
932
-
933
- if (withEmbeddings.length < 2) {
934
- return (
935
- <div className="text-center py-16">
936
- <div className="text-[var(--muted)] text-sm mb-2">
937
- {t("vectorbrowserview.NotEnoughEmbedding1")}
938
- </div>
939
- <div className="text-[var(--muted)] text-xs">
940
- {t("vectorbrowserview.NeedAtLeast2Memo")} {withEmbeddings.length}.
941
- </div>
942
- </div>
943
- );
944
- }
945
-
946
- if (rendererUnavailable) {
947
- return (
948
- <div className="border border-[var(--border)] bg-[var(--card)] px-4 py-10 text-center">
949
- <div className="text-sm text-[var(--txt)]">
950
- 3D view unavailable in this environment.
951
- </div>
952
- <div className="mt-2 text-xs text-[var(--muted)]">
953
- The current runtime could not initialize a renderer.
954
- </div>
955
- </div>
956
- );
957
- }
958
-
959
- const hoveredMem = hoveredIdx !== null ? withEmbeddings[hoveredIdx] : null;
960
-
961
- return (
962
- <div className="relative">
963
- <div className="text-[11px] text-[var(--muted)] mb-2">
964
- {withEmbeddings.length} {t("vectorbrowserview.vectorsProjectedTo1")}
965
- </div>
966
- <div
967
- ref={containerRef}
968
- className="w-full border border-[var(--border)] cursor-grab active:cursor-grabbing"
969
- style={{ height: 550 }}
970
- />
971
- {/* Tooltip */}
972
- {hoveredMem && tooltipPos && (
973
- <div
974
- className="absolute pointer-events-none bg-black/90 text-white text-[11px] px-3 py-2 max-w-[300px] z-10"
975
- style={{
976
- left: tooltipPos.x + 15,
977
- top: tooltipPos.y + 15,
978
- transform: tooltipPos.x > 400 ? "translateX(-100%)" : undefined,
979
- }}
980
- >
981
- <div className="font-medium mb-1 truncate">
982
- {hoveredMem.type && hoveredMem.type !== "undefined" && (
983
- <span className="px-1.5 py-0.5 bg-[var(--accent)]/30 text-[var(--accent)] mr-2 text-[10px]">
984
- {hoveredMem.type}
985
- </span>
986
- )}
987
- {hoveredMem.id.slice(0, 12)}...
988
- </div>
989
- <div className="text-[var(--muted)] line-clamp-3">
990
- {hoveredMem.content.slice(0, 150)}
991
- {hoveredMem.content.length > 150 ? "..." : ""}
992
- </div>
993
- </div>
994
- )}
995
- {/* Legend */}
996
- <div className="flex flex-wrap gap-3 mt-2 text-[10px]">
997
- {Object.entries(typeColors).map(
998
- ([type, color]) =>
999
- type &&
1000
- type !== "undefined" && (
1001
- <div key={type} className="flex items-center gap-1.5">
1002
- <div
1003
- className="w-3 h-3 rounded-full"
1004
- style={{
1005
- backgroundColor: `#${color.toString(16).padStart(6, "0")}`,
1006
- }}
1007
- />
1008
- <span className="text-[var(--muted)]">{type}</span>
1009
- </div>
1010
- ),
1011
- )}
1012
- </div>
1013
- </div>
1014
- );
1015
- }
1016
-
1017
- // ── Detail modal ───────────────────────────────────────────────────────
1018
-
1019
- function MemoryDetailModal({
1020
- memory,
1021
- onClose,
1022
- }: {
1023
- memory: MemoryRecord;
1024
- onClose: () => void;
1025
- }) {
1026
- const { t } = useApp();
1027
- return (
1028
- <div
1029
- className="fixed inset-0 bg-black/80 z-50 flex items-center justify-center p-8"
1030
- onClick={(e) => {
1031
- if (e.target === e.currentTarget) onClose();
1032
- }}
1033
- onKeyDown={(e) => {
1034
- if (e.key === "Escape" || e.key === "Enter" || e.key === " ") {
1035
- e.preventDefault();
1036
- onClose();
1037
- }
1038
- }}
1039
- role="dialog"
1040
- aria-modal="true"
1041
- >
1042
- <div className="bg-[var(--card)] border border-[var(--border)] max-w-[700px] w-full max-h-[90vh] overflow-auto">
1043
- {/* Header */}
1044
- <div className="flex items-center justify-between p-3 border-b border-[var(--border)]">
1045
- <div className="text-xs font-medium text-[var(--txt)]">
1046
- {t("vectorbrowserview.MemoryDetail")}
1047
- </div>
1048
- <Button
1049
- variant="ghost"
1050
- size="icon"
1051
- className="text-[var(--muted)] hover:text-[var(--txt)] hover:bg-transparent h-6 w-6 text-lg"
1052
- onClick={onClose}
1053
- >
1054
- ×
1055
- </Button>
1056
- </div>
1057
-
1058
- {/* Content */}
1059
- <div className="p-4">
1060
- <div className="text-[11px] text-[var(--muted)] mb-1 uppercase font-bold">
1061
- {t("vectorbrowserview.Content")}
1062
- </div>
1063
- <div className="text-xs text-[var(--txt)] whitespace-pre-wrap break-words mb-4 p-2 bg-[var(--bg)] border border-[var(--border)] max-h-[200px] overflow-auto">
1064
- {memory.content || "(empty)"}
1065
- </div>
1066
-
1067
- {/* Metadata */}
1068
- <div className="text-[11px] text-[var(--muted)] mb-1 uppercase font-bold">
1069
- {t("vectorbrowserview.Metadata")}
1070
- </div>
1071
- <div className="grid grid-cols-2 gap-x-4 gap-y-1 text-xs mb-4">
1072
- <span className="text-[var(--muted)]">ID</span>
1073
- <span className="text-[var(--txt)] font-mono truncate">
1074
- {memory.id || "—"}
1075
- </span>
1076
- <span className="text-[var(--muted)]">
1077
- {t("vectorbrowserview.Type")}
1078
- </span>
1079
- <span className="text-[var(--txt)]">{memory.type || "—"}</span>
1080
- <span className="text-[var(--muted)]">
1081
- {t("vectorbrowserview.Room")}
1082
- </span>
1083
- <span className="text-[var(--txt)] font-mono truncate">
1084
- {memory.roomId || "—"}
1085
- </span>
1086
- <span className="text-[var(--muted)]">
1087
- {t("vectorbrowserview.Entity")}
1088
- </span>
1089
- <span className="text-[var(--txt)] font-mono truncate">
1090
- {memory.entityId || "—"}
1091
- </span>
1092
- <span className="text-[var(--muted)]">
1093
- {t("vectorbrowserview.Created")}
1094
- </span>
1095
- <span className="text-[var(--txt)]">{memory.createdAt || "—"}</span>
1096
- <span className="text-[var(--muted)]">
1097
- {t("vectorbrowserview.Unique")}
1098
- </span>
1099
- <span className="text-[var(--txt)]">
1100
- {memory.unique ? "Yes" : "No"}
1101
- </span>
1102
- </div>
1103
-
1104
- {/* Embedding */}
1105
- {memory.embedding && (
1106
- <>
1107
- <div className="text-[11px] text-[var(--muted)] mb-1 uppercase font-bold">
1108
- {t("vectorbrowserview.Embedding")}
1109
- {memory.embedding.length} {t("vectorbrowserview.dimensions")}
1110
- </div>
1111
- <div className="p-2 bg-[var(--bg)] border border-[var(--border)] text-[10px] font-mono text-[var(--muted)] max-h-[150px] overflow-auto break-all mb-4">
1112
- [{memory.embedding.map((v) => v.toFixed(6)).join(", ")}]
1113
- </div>
1114
- </>
1115
- )}
1116
-
1117
- {/* Raw data */}
1118
- <details>
1119
- <summary className="text-[11px] text-[var(--muted)] cursor-pointer hover:text-[var(--txt)] uppercase font-bold mb-1">
1120
- {t("vectorbrowserview.RawRecord")}
1121
- </summary>
1122
- <div className="p-2 bg-[var(--bg)] border border-[var(--border)] text-[10px] font-mono text-[var(--muted)] max-h-[200px] overflow-auto break-all">
1123
- {JSON.stringify(memory.raw, null, 2)}
1124
- </div>
1125
- </details>
1126
- </div>
1127
- </div>
1128
- </div>
1129
- );
1130
- }
1131
-
1132
- // ── Main component ─────────────────────────────────────────────────────
1133
-
1134
- export function VectorBrowserView() {
1135
- const { t } = useApp();
1136
- const [tables, setTables] = useState<TableInfo[]>([]);
1137
- const [selectedTable, setSelectedTable] = useState("");
1138
- const [memories, setMemories] = useState<MemoryRecord[]>([]);
1139
- const [totalCount, setTotalCount] = useState(0);
1140
- const [page, setPage] = useState(0);
1141
- const [loading, setLoading] = useState(true);
1142
- const [error, setError] = useState("");
1143
- const [search, setSearch] = useState("");
1144
- const [searchInput, setSearchInput] = useState("");
1145
- const [selectedMemory, setSelectedMemory] = useState<MemoryRecord | null>(
1146
- null,
1147
- );
1148
- const [viewMode, setViewMode] = useState<ViewMode>("list");
1149
- const [graphMemories, setGraphMemories] = useState<MemoryRecord[]>([]);
1150
- const [graphLoading, setGraphLoading] = useState(false);
1151
- const [stats, setStats] = useState<{
1152
- total: number;
1153
- dimensions: number;
1154
- uniqueCount: number;
1155
- } | null>(null);
1156
-
1157
- // Track whether the `embeddings` table exists for JOIN queries
1158
- const [hasEmbeddingsTable, setHasEmbeddingsTable] = useState(false);
1159
-
1160
- // Discover vector/memory tables
1161
- const loadTables = useCallback(async () => {
1162
- try {
1163
- const { tables: allTables } = await client.getDatabaseTables();
1164
- const vectorTables = allTables.filter((t) => {
1165
- const n = t.name.toLowerCase();
1166
- return (
1167
- n.includes("memor") ||
1168
- n.includes("embed") ||
1169
- n.includes("vector") ||
1170
- n.includes("knowledge")
1171
- );
1172
- });
1173
- const available = vectorTables.length > 0 ? vectorTables : allTables;
1174
- setTables(available);
1175
-
1176
- // Check for separate embeddings table (elizaOS stores vectors there)
1177
- const embTbl = allTables.find((t) => t.name === "embeddings");
1178
- setHasEmbeddingsTable(!!embTbl);
1179
-
1180
- if (available.length > 0 && !selectedTable) {
1181
- const preferred =
1182
- available.find((t) => t.name.toLowerCase() === "memories") ??
1183
- available.find((t) => t.name.toLowerCase().includes("memor"));
1184
- setSelectedTable(preferred?.name ?? available[0].name);
1185
- }
1186
- } catch (err) {
1187
- const msg = err instanceof Error ? err.message : "error";
1188
- if (msg === "Failed to fetch" || msg.includes("fetch")) {
1189
- setError("Cannot connect to database. Make sure the agent is running.");
1190
- } else {
1191
- setError(`Failed to load tables: ${msg}`);
1192
- }
1193
- }
1194
- }, [selectedTable]);
1195
-
1196
- // Build a SELECT that casts any vector/embedding column to text so the raw
1197
- // driver returns a parseable string instead of a binary blob.
1198
- const buildSelect = useCallback(async (table: string): Promise<string> => {
1199
- try {
1200
- const colResult: QueryResult = await client.executeDatabaseQuery(
1201
- `SELECT column_name, data_type FROM information_schema.columns WHERE table_name = '${table.replace(/'/g, "''")}' AND table_schema NOT IN ('pg_catalog','information_schema') ORDER BY ordinal_position`,
1202
- );
1203
- const cols = colResult.rows.map((r) => {
1204
- const name = String(r.column_name);
1205
- const dtype = String(r.data_type).toLowerCase();
1206
- // Cast USER-DEFINED types (pgvector) and bytea to text
1207
- if (
1208
- dtype === "user-defined" ||
1209
- dtype === "bytea" ||
1210
- dtype === "vector"
1211
- ) {
1212
- return `"${name}"::text AS "${name}"`;
1213
- }
1214
- return `"${name}"`;
1215
- });
1216
- if (cols.length > 0) return cols.join(", ");
1217
- } catch {
1218
- // fall through to SELECT *
1219
- }
1220
- return "*";
1221
- }, []);
1222
-
1223
- /**
1224
- * Build a query that JOINs memories with the embeddings table when applicable.
1225
- * The embeddings table stores vectors in dim_* columns (pgvector), which we
1226
- * cast to ::text so the driver returns a parseable string.
1227
- */
1228
- const buildJoinQuery = useCallback(
1229
- (opts: { where?: string; limit: number; offset?: number }): string => {
1230
- const isMemories = selectedTable === "memories" && hasEmbeddingsTable;
1231
- const { where, limit, offset } = opts;
1232
-
1233
- if (isMemories) {
1234
- // Build dim column selects with ::text cast
1235
- const dimCols = DIM_COLUMNS.map((d) => `e."${d}"::text AS "${d}"`).join(
1236
- ", ",
1237
- );
1238
- return [
1239
- `SELECT m.*, ${dimCols}`,
1240
- `FROM "memories" m`,
1241
- `LEFT JOIN "embeddings" e ON e."memory_id" = m."id"`,
1242
- where ? `WHERE ${where}` : "",
1243
- `ORDER BY m."created_at" DESC`,
1244
- `LIMIT ${limit}`,
1245
- offset ? `OFFSET ${offset}` : "",
1246
- ]
1247
- .filter(Boolean)
1248
- .join(" ");
1249
- }
1250
-
1251
- // For other tables, use buildSelect to cast any vector columns
1252
- return ""; // signal to caller to use the old path
1253
- },
1254
- [selectedTable, hasEmbeddingsTable],
1255
- );
1256
-
1257
- // Load memory records for list view
1258
- const loadMemories = useCallback(async () => {
1259
- if (!selectedTable) return;
1260
- setLoading(true);
1261
- setError("");
1262
- try {
1263
- const offset = page * PAGE_SIZE;
1264
- const searchEscaped = search.replace(/'/g, "''");
1265
- const countWhere = search
1266
- ? ` WHERE "content"::text LIKE '%${searchEscaped}%'`
1267
- : "";
1268
- const joinWhere = search
1269
- ? `m."content"::text LIKE '%${searchEscaped}%'`
1270
- : undefined;
1271
-
1272
- const countResult: QueryResult = await client.executeDatabaseQuery(
1273
- `SELECT COUNT(*) as cnt FROM "${selectedTable}"${countWhere}`,
1274
- );
1275
- const total = Number(countResult.rows[0]?.cnt ?? 0);
1276
- setTotalCount(total);
1277
-
1278
- // Try JOIN path for memories + embeddings
1279
- const joinSql = buildJoinQuery({
1280
- where: joinWhere,
1281
- limit: PAGE_SIZE,
1282
- offset,
1283
- });
1284
- let result: QueryResult;
1285
-
1286
- if (joinSql) {
1287
- result = await client.executeDatabaseQuery(joinSql);
1288
- } else {
1289
- const selectCols = await buildSelect(selectedTable);
1290
- const plainWhere = search
1291
- ? ` WHERE "content"::text LIKE '%${searchEscaped}%'`
1292
- : "";
1293
- result = await client.executeDatabaseQuery(
1294
- `SELECT ${selectCols} FROM "${selectedTable}"${plainWhere} LIMIT ${PAGE_SIZE} OFFSET ${offset}`,
1295
- );
1296
- }
1297
- setMemories(result.rows.map(rowToMemory));
1298
-
1299
- // Stats on first load
1300
- if (page === 0 && !search) {
1301
- let dims = 0;
1302
- let uniqueCount = 0;
1303
-
1304
- if (result.rows.length > 0) {
1305
- const sample = rowToMemory(result.rows[0]);
1306
- if (sample.embedding) dims = sample.embedding.length;
1307
- }
1308
-
1309
- try {
1310
- const uniqueResult: QueryResult = await client.executeDatabaseQuery(
1311
- `SELECT COUNT(*) as cnt FROM "${selectedTable}" WHERE "unique" = true OR "unique" = 1`,
1312
- );
1313
- uniqueCount = Number(uniqueResult.rows[0]?.cnt ?? 0);
1314
- } catch {
1315
- // column might not exist
1316
- }
1317
-
1318
- setStats({ total, dimensions: dims, uniqueCount });
1319
- }
1320
- } catch (err) {
1321
- setError(
1322
- `Failed to load memories: ${err instanceof Error ? err.message : "error"}`,
1323
- );
1324
- }
1325
- setLoading(false);
1326
- }, [selectedTable, page, search, buildSelect, buildJoinQuery]);
1327
-
1328
- // Load embeddings for graph view (fetch more rows to make graph useful)
1329
- // Only include rows that actually have embeddings (INNER JOIN or filter).
1330
- const loadGraphData = useCallback(async () => {
1331
- if (!selectedTable) return;
1332
- setGraphLoading(true);
1333
- try {
1334
- const isMemories = selectedTable === "memories" && hasEmbeddingsTable;
1335
- let result: QueryResult;
1336
-
1337
- if (isMemories) {
1338
- // INNER JOIN ensures only rows with embeddings are returned
1339
- const dimCols = DIM_COLUMNS.map((d) => `e."${d}"::text AS "${d}"`).join(
1340
- ", ",
1341
- );
1342
- result = await client.executeDatabaseQuery(
1343
- `SELECT m.*, ${dimCols} FROM "memories" m INNER JOIN "embeddings" e ON e."memory_id" = m."id" ORDER BY m."created_at" DESC LIMIT 500`,
1344
- );
1345
- } else {
1346
- const selectCols = await buildSelect(selectedTable);
1347
- result = await client.executeDatabaseQuery(
1348
- `SELECT ${selectCols} FROM "${selectedTable}" LIMIT 500`,
1349
- );
1350
- }
1351
- setGraphMemories(result.rows.map(rowToMemory));
1352
- } catch (err) {
1353
- setError(
1354
- `Failed to load graph data: ${err instanceof Error ? err.message : "error"}`,
1355
- );
1356
- }
1357
- setGraphLoading(false);
1358
- }, [selectedTable, buildSelect, hasEmbeddingsTable]);
1359
-
1360
- useEffect(() => {
1361
- loadTables();
1362
- }, [loadTables]);
1363
-
1364
- useEffect(() => {
1365
- if (viewMode === "list") loadMemories();
1366
- }, [loadMemories, viewMode]);
1367
-
1368
- useEffect(() => {
1369
- if (viewMode === "graph" || viewMode === "3d") loadGraphData();
1370
- }, [loadGraphData, viewMode]);
1371
-
1372
- const handleSearch = () => {
1373
- setSearch(searchInput);
1374
- setPage(0);
1375
- };
1376
-
1377
- const totalPages = Math.ceil(totalCount / PAGE_SIZE);
1378
-
1379
- // Show connection error state prominently
1380
- const isConnectionError = error?.includes("agent is running");
1381
-
1382
- return (
1383
- <div>
1384
- {/* Stats bar */}
1385
- {stats && !isConnectionError && (
1386
- <div className="flex gap-4 mb-4 text-[11px] text-[var(--muted)]">
1387
- <span>
1388
- {Number(stats.total).toLocaleString()}{" "}
1389
- {t("vectorbrowserview.memories")}
1390
- </span>
1391
- {Number(stats.uniqueCount) > 0 && (
1392
- <span>
1393
- {Number(stats.uniqueCount).toLocaleString()}{" "}
1394
- {t("vectorbrowserview.unique")}
1395
- </span>
1396
- )}
1397
- {Number(stats.dimensions) > 0 && (
1398
- <span>
1399
- {stats.dimensions} {t("vectorbrowserview.dimensions1")}
1400
- </span>
1401
- )}
1402
- </div>
1403
- )}
1404
-
1405
- {/* Toolbar - hide when not connected */}
1406
- {!isConnectionError && (
1407
- <div className="flex flex-wrap items-center gap-3 mb-4">
1408
- {viewMode === "list" && (
1409
- <div className="flex gap-1">
1410
- <Input
1411
- type="text"
1412
- placeholder={t("vectorbrowserview.SearchContent")}
1413
- value={searchInput}
1414
- onChange={(e) => setSearchInput(e.target.value)}
1415
- onKeyDown={(e) => e.key === "Enter" && handleSearch()}
1416
- className="w-[220px] bg-card text-xs"
1417
- />
1418
- <Button variant="default" size="sm" onClick={handleSearch}>
1419
- {t("vectorbrowserview.Search")}
1420
- </Button>
1421
- </div>
1422
- )}
1423
-
1424
- {tables.length > 1 && (
1425
- <select
1426
- value={selectedTable}
1427
- onChange={(e) => {
1428
- setSelectedTable(e.target.value);
1429
- setPage(0);
1430
- setSearch("");
1431
- setSearchInput("");
1432
- }}
1433
- className="px-2 py-1.5 border border-[var(--border)] bg-[var(--card)] text-[var(--txt)] text-xs"
1434
- >
1435
- {tables.map((t) => (
1436
- <option key={t.name} value={t.name}>
1437
- {t.name} (
1438
- {typeof t.rowCount === "object"
1439
- ? JSON.stringify(t.rowCount)
1440
- : t.rowCount}
1441
- )
1442
- </option>
1443
- ))}
1444
- </select>
1445
- )}
1446
-
1447
- {/* View mode toggle */}
1448
- <div className="flex gap-1 ml-auto">
1449
- <Button
1450
- variant={viewMode === "list" ? "default" : "outline"}
1451
- size="sm"
1452
- onClick={() => setViewMode("list")}
1453
- >
1454
- {t("vectorbrowserview.List")}
1455
- </Button>
1456
- <Button
1457
- variant={viewMode === "graph" ? "default" : "outline"}
1458
- size="sm"
1459
- onClick={() => setViewMode("graph")}
1460
- >
1461
- 2D
1462
- </Button>
1463
- <Button
1464
- variant={viewMode === "3d" ? "default" : "outline"}
1465
- size="sm"
1466
- onClick={() => setViewMode("3d")}
1467
- >
1468
- 3D
1469
- </Button>
1470
- </div>
1471
-
1472
- {viewMode === "list" && (
1473
- <span className="text-[11px] text-[var(--muted)]">
1474
- {Number(totalCount) > 0
1475
- ? `${page * PAGE_SIZE + 1}-${Math.min((page + 1) * PAGE_SIZE, Number(totalCount))} of ${Number(totalCount).toLocaleString()}`
1476
- : ""}
1477
- </span>
1478
- )}
1479
- </div>
1480
- )}
1481
-
1482
- {error &&
1483
- (error.includes("agent is running") ? (
1484
- <div className="text-center py-16">
1485
- <div className="text-[var(--muted)] text-sm mb-2">
1486
- {t("vectorbrowserview.DatabaseNotAvailab")}
1487
- </div>
1488
- <div className="text-[var(--muted)] text-xs mb-4">
1489
- {t("vectorbrowserview.StartTheAgentToB")}
1490
- </div>
1491
- <Button
1492
- variant="default"
1493
- size="sm"
1494
- onClick={() => {
1495
- setError("");
1496
- loadTables();
1497
- }}
1498
- >
1499
- {t("vectorbrowserview.RetryConnection")}
1500
- </Button>
1501
- </div>
1502
- ) : (
1503
- <div className="p-2.5 border border-[var(--danger)] text-[var(--danger)] text-xs mb-3">
1504
- {error}
1505
- </div>
1506
- ))}
1507
-
1508
- {/* 2D Graph view */}
1509
- {viewMode === "graph" &&
1510
- (graphLoading ? (
1511
- <div className="text-center py-16 text-[var(--muted)] text-sm italic">
1512
- {t("vectorbrowserview.LoadingEmbeddings")}
1513
- </div>
1514
- ) : (
1515
- <VectorGraph memories={graphMemories} onSelect={setSelectedMemory} />
1516
- ))}
1517
-
1518
- {/* 3D Graph view */}
1519
- {viewMode === "3d" &&
1520
- (graphLoading ? (
1521
- <div className="text-center py-16 text-[var(--muted)] text-sm italic">
1522
- {t("vectorbrowserview.LoadingEmbeddings")}
1523
- </div>
1524
- ) : (
1525
- <VectorGraph3D
1526
- memories={graphMemories}
1527
- onSelect={setSelectedMemory}
1528
- />
1529
- ))}
1530
-
1531
- {/* List view */}
1532
- {viewMode === "list" &&
1533
- (loading ? (
1534
- <div className="text-center py-16 text-[var(--muted)] text-sm italic">
1535
- {t("vectorbrowserview.LoadingMemories")}
1536
- </div>
1537
- ) : memories.length === 0 ? (
1538
- <div className="text-center py-16">
1539
- <div className="text-[var(--muted)] text-sm mb-2">
1540
- {t("vectorbrowserview.NoMemoriesFound")}
1541
- </div>
1542
- <div className="text-[var(--muted)] text-xs">
1543
- {search
1544
- ? "No records match your search query."
1545
- : "No memory records detected in the database."}
1546
- </div>
1547
- </div>
1548
- ) : (
1549
- <div className="flex flex-col gap-2">
1550
- {memories.map((mem) => (
1551
- <Button
1552
- key={mem.id || `${mem.content.slice(0, 30)}-${mem.createdAt}`}
1553
- variant="outline"
1554
- className="justify-start items-start text-left h-auto p-3 hover:border-accent w-full flex flex-col"
1555
- onClick={() => setSelectedMemory(mem)}
1556
- >
1557
- {/* Content preview */}
1558
- <div className="text-xs text-[var(--txt)] mb-2 whitespace-pre-wrap break-words">
1559
- {mem.content.length > 200
1560
- ? `${mem.content.slice(0, 200)}...`
1561
- : mem.content}
1562
- </div>
1563
-
1564
- {/* Metadata row */}
1565
- <div className="flex flex-wrap items-center gap-3 text-[10px] text-[var(--muted)]">
1566
- {mem.type && mem.type !== "undefined" && (
1567
- <span className="px-1.5 py-0.5 bg-[var(--accent)]/10 text-[var(--accent)]">
1568
- {mem.type}
1569
- </span>
1570
- )}
1571
- {mem.roomId && mem.roomId !== "undefined" && (
1572
- <span>
1573
- {t("vectorbrowserview.Room1")} {mem.roomId.slice(0, 12)}
1574
- </span>
1575
- )}
1576
- {mem.entityId && mem.entityId !== "undefined" && (
1577
- <span>
1578
- {t("vectorbrowserview.Entity1")}{" "}
1579
- {mem.entityId.slice(0, 12)}
1580
- </span>
1581
- )}
1582
- {mem.createdAt && mem.createdAt !== "undefined" && (
1583
- <span>{mem.createdAt}</span>
1584
- )}
1585
- {mem.unique && (
1586
- <span className="px-1.5 py-0.5 bg-green-500/20 text-green-400 font-bold">
1587
- {t("vectorbrowserview.unique")}
1588
- </span>
1589
- )}
1590
- {mem.embedding && (
1591
- <span className="font-mono">[{mem.embedding.length}d]</span>
1592
- )}
1593
- </div>
1594
- </Button>
1595
- ))}
1596
- </div>
1597
- ))}
1598
-
1599
- {/* Pagination (list view only) */}
1600
- {viewMode === "list" && totalPages > 1 && (
1601
- <div className="flex items-center justify-center gap-3 mt-4 pb-4">
1602
- <Button
1603
- variant="default"
1604
- size="sm"
1605
- disabled={page === 0}
1606
- onClick={() => setPage((p) => p - 1)}
1607
- >
1608
- {t("vectorbrowserview.Prev")}
1609
- </Button>
1610
- <span className="text-[11px] text-[var(--muted)]">
1611
- {t("vectorbrowserview.Page")} {page + 1} of {totalPages}
1612
- </span>
1613
- <Button
1614
- variant="default"
1615
- size="sm"
1616
- disabled={page >= totalPages - 1}
1617
- onClick={() => setPage((p) => p + 1)}
1618
- >
1619
- {t("vectorbrowserview.Next")}
1620
- </Button>
1621
- </div>
1622
- )}
1623
-
1624
- {/* Detail modal */}
1625
- {selectedMemory && (
1626
- <MemoryDetailModal
1627
- memory={selectedMemory}
1628
- onClose={() => setSelectedMemory(null)}
1629
- />
1630
- )}
1631
- </div>
1632
- );
1633
- }