@lobehub/lobehub 2.0.0-next.34 → 2.0.0-next.36

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 (282) hide show
  1. package/CHANGELOG.md +50 -0
  2. package/changelog/v1.json +18 -0
  3. package/next.config.ts +5 -6
  4. package/package.json +2 -2
  5. package/packages/agent-runtime/src/core/__tests__/runtime.test.ts +112 -77
  6. package/packages/agent-runtime/src/core/runtime.ts +63 -18
  7. package/packages/agent-runtime/src/types/generalAgent.ts +55 -0
  8. package/packages/agent-runtime/src/types/index.ts +1 -0
  9. package/packages/agent-runtime/src/types/instruction.ts +10 -3
  10. package/packages/const/src/user.ts +0 -1
  11. package/packages/context-engine/src/processors/GroupMessageFlatten.ts +8 -6
  12. package/packages/context-engine/src/processors/__tests__/GroupMessageFlatten.test.ts +12 -12
  13. package/packages/conversation-flow/src/__tests__/fixtures/inputs/branch/assistant-group-branches.json +249 -0
  14. package/packages/conversation-flow/src/__tests__/fixtures/inputs/branch/index.ts +4 -0
  15. package/packages/conversation-flow/src/__tests__/fixtures/inputs/branch/multi-assistant-group.json +260 -0
  16. package/packages/conversation-flow/src/__tests__/fixtures/outputs/branch/active-index-1.json +4 -0
  17. package/packages/conversation-flow/src/__tests__/fixtures/outputs/branch/assistant-group-branches.json +481 -0
  18. package/packages/conversation-flow/src/__tests__/fixtures/outputs/branch/conversation.json +5 -1
  19. package/packages/conversation-flow/src/__tests__/fixtures/outputs/branch/index.ts +4 -0
  20. package/packages/conversation-flow/src/__tests__/fixtures/outputs/branch/multi-assistant-group.json +407 -0
  21. package/packages/conversation-flow/src/__tests__/fixtures/outputs/branch/nested.json +18 -2
  22. package/packages/conversation-flow/src/__tests__/fixtures/outputs/complex-scenario.json +25 -3
  23. package/packages/conversation-flow/src/__tests__/parse.test.ts +12 -0
  24. package/packages/conversation-flow/src/index.ts +1 -1
  25. package/packages/conversation-flow/src/transformation/FlatListBuilder.ts +112 -34
  26. package/packages/conversation-flow/src/types/flatMessageList.ts +0 -12
  27. package/packages/conversation-flow/src/{types.ts → types/index.ts} +3 -14
  28. package/packages/database/src/models/message.ts +18 -19
  29. package/packages/types/src/aiChat.ts +2 -0
  30. package/packages/types/src/importer.ts +2 -2
  31. package/packages/types/src/message/ui/chat.ts +17 -1
  32. package/packages/types/src/message/ui/extra.ts +2 -2
  33. package/packages/types/src/message/ui/params.ts +2 -2
  34. package/packages/types/src/user/preference.ts +0 -4
  35. package/packages/utils/src/tokenizer/index.ts +3 -11
  36. package/src/app/[variants]/(main)/chat/ChatRouter.tsx +83 -0
  37. package/src/app/[variants]/(main)/chat/_layout/ChatLayout.tsx +22 -0
  38. package/src/app/[variants]/(main)/chat/_layout/Desktop/SessionPanel.tsx +12 -7
  39. package/src/app/[variants]/(main)/chat/_layout/Desktop/index.tsx +2 -2
  40. package/src/app/[variants]/(main)/chat/_layout/FeatureFlagsProvider.tsx +24 -0
  41. package/src/app/[variants]/(main)/chat/_layout/Mobile.tsx +3 -2
  42. package/src/app/[variants]/(main)/chat/_layout/type.ts +0 -1
  43. package/src/app/[variants]/(main)/chat/components/ConversationArea.tsx +29 -0
  44. package/src/app/[variants]/(main)/chat/components/MainChatPage.tsx +25 -0
  45. package/src/app/[variants]/(main)/chat/components/PortalPanel.tsx +28 -0
  46. package/src/app/[variants]/(main)/chat/components/SessionPanel.tsx +33 -0
  47. package/src/app/[variants]/(main)/chat/{settings/page.tsx → components/SettingsPage.tsx} +35 -3
  48. package/src/app/[variants]/(main)/chat/components/TopicSidebar.tsx +30 -0
  49. package/src/app/[variants]/(main)/chat/components/WorkspaceLayout.tsx +73 -0
  50. package/src/app/[variants]/(main)/chat/{(workspace)/@conversation → components/conversation}/features/ChatInput/Desktop/MessageFromUrl.tsx +3 -3
  51. package/src/app/[variants]/(main)/chat/{(workspace)/@conversation → components/conversation}/features/ChatInput/V1Mobile/index.tsx +1 -1
  52. package/src/app/[variants]/(main)/chat/{(workspace)/@conversation → components/conversation}/features/ChatInput/V1Mobile/useSend.ts +3 -3
  53. package/src/app/[variants]/(main)/chat/{(workspace)/@conversation → components/conversation}/features/ChatInput/useSend.ts +6 -6
  54. package/src/app/[variants]/(main)/chat/{(workspace)/@conversation → components/conversation}/features/ChatList/ChatItem/index.tsx +1 -1
  55. package/src/app/[variants]/(main)/chat/{(workspace)/@conversation → components/conversation}/features/ChatList/Content.tsx +5 -3
  56. package/src/app/[variants]/(main)/chat/{(workspace)/@conversation → components/conversation}/features/ChatList/WelcomeChatItem/AgentWelcome/OpeningQuestions.tsx +2 -2
  57. package/src/app/[variants]/(main)/chat/{(workspace)/@conversation → components/conversation}/features/ChatList/WelcomeChatItem/GroupWelcome/GroupUsageSuggest.tsx +2 -2
  58. package/src/app/[variants]/(main)/chat/{layout.ts → layout.tsx} +0 -1
  59. package/src/app/[variants]/(main)/chat/page.tsx +12 -0
  60. package/src/app/[variants]/(main)/labs/page.tsx +0 -9
  61. package/src/features/ChatInput/ActionBar/STT/browser.tsx +3 -3
  62. package/src/features/ChatInput/ActionBar/STT/openai.tsx +3 -3
  63. package/src/features/Conversation/Error/AccessCodeForm.tsx +1 -1
  64. package/src/features/Conversation/Error/ChatInvalidApiKey.tsx +1 -1
  65. package/src/features/Conversation/Error/ClerkLogin/index.tsx +1 -1
  66. package/src/features/Conversation/Error/OAuthForm.tsx +1 -1
  67. package/src/features/Conversation/Error/index.tsx +0 -5
  68. package/src/features/Conversation/Messages/Assistant/Actions/index.tsx +13 -10
  69. package/src/features/Conversation/Messages/Assistant/Extra/index.test.tsx +3 -8
  70. package/src/features/Conversation/Messages/Assistant/Extra/index.tsx +2 -6
  71. package/src/features/Conversation/Messages/Assistant/MessageContent.tsx +7 -9
  72. package/src/features/Conversation/Messages/Assistant/Tool/Inspector/PluginResult.tsx +2 -2
  73. package/src/features/Conversation/Messages/Assistant/Tool/Inspector/PluginState.tsx +2 -2
  74. package/src/features/Conversation/Messages/Assistant/Tool/Render/PluginSettings.tsx +4 -1
  75. package/src/features/Conversation/Messages/Assistant/Tool/Render/index.tsx +2 -3
  76. package/src/features/Conversation/Messages/Assistant/index.tsx +57 -60
  77. package/src/features/Conversation/Messages/Default.tsx +1 -0
  78. package/src/features/Conversation/Messages/Group/Actions/WithContentId.tsx +38 -10
  79. package/src/features/Conversation/Messages/Group/Actions/index.tsx +1 -1
  80. package/src/features/Conversation/Messages/Group/ContentBlock.tsx +1 -3
  81. package/src/features/Conversation/Messages/Group/GroupChildren.tsx +12 -12
  82. package/src/features/Conversation/Messages/Group/MessageContent.tsx +7 -1
  83. package/src/features/Conversation/Messages/Group/Tool/Render/PluginSettings.tsx +1 -1
  84. package/src/features/Conversation/Messages/Group/index.tsx +2 -1
  85. package/src/features/Conversation/Messages/Supervisor/index.tsx +2 -2
  86. package/src/features/Conversation/Messages/User/{Actions.tsx → Actions/ActionsBar.tsx} +26 -25
  87. package/src/features/Conversation/Messages/User/Actions/MessageBranch.tsx +107 -0
  88. package/src/features/Conversation/Messages/User/Actions/index.tsx +42 -0
  89. package/src/features/Conversation/Messages/User/index.tsx +43 -44
  90. package/src/features/Conversation/Messages/index.tsx +3 -3
  91. package/src/features/Conversation/components/AutoScroll.tsx +3 -3
  92. package/src/features/Conversation/components/Extras/Usage/UsageDetail/AnimatedNumber.tsx +55 -0
  93. package/src/features/Conversation/components/Extras/Usage/UsageDetail/index.tsx +5 -2
  94. package/src/features/Conversation/components/VirtualizedList/index.tsx +29 -20
  95. package/src/features/Conversation/hooks/useChatListActionsBar.tsx +8 -10
  96. package/src/features/Portal/GroupThread/Body/index.tsx +1 -1
  97. package/src/features/Portal/Thread/Chat/ChatInput/useSend.ts +3 -3
  98. package/src/hooks/useHotkeys/chatScope.ts +16 -8
  99. package/src/server/routers/lambda/__tests__/aiChat.test.ts +1 -1
  100. package/src/server/routers/lambda/__tests__/integration/message.integration.test.ts +0 -26
  101. package/src/server/routers/lambda/aiChat.ts +3 -2
  102. package/src/server/routers/lambda/message.ts +8 -16
  103. package/src/server/services/message/__tests__/index.test.ts +29 -39
  104. package/src/server/services/message/index.ts +41 -36
  105. package/src/services/electron/desktopNotification.ts +6 -6
  106. package/src/services/electron/file.ts +6 -6
  107. package/src/services/file/ClientS3/index.ts +8 -8
  108. package/src/services/message/__tests__/metadata-race-condition.test.ts +157 -0
  109. package/src/services/message/index.ts +21 -15
  110. package/src/services/upload.ts +11 -11
  111. package/src/services/utils/abortableRequest.test.ts +161 -0
  112. package/src/services/utils/abortableRequest.ts +67 -0
  113. package/src/store/chat/agents/GeneralChatAgent.ts +137 -0
  114. package/src/store/chat/agents/createAgentExecutors.ts +395 -0
  115. package/src/store/chat/helpers.test.ts +0 -99
  116. package/src/store/chat/helpers.ts +0 -11
  117. package/src/store/chat/slices/aiChat/actions/__tests__/conversationControl.test.ts +332 -0
  118. package/src/store/chat/slices/aiChat/actions/__tests__/conversationLifecycle.test.ts +257 -0
  119. package/src/store/chat/slices/aiChat/actions/__tests__/helpers.ts +11 -2
  120. package/src/store/chat/slices/aiChat/actions/__tests__/rag.test.ts +6 -6
  121. package/src/store/chat/slices/aiChat/actions/__tests__/streamingExecutor.test.ts +391 -0
  122. package/src/store/chat/slices/aiChat/actions/__tests__/streamingStates.test.ts +179 -0
  123. package/src/store/chat/slices/aiChat/actions/conversationControl.ts +157 -0
  124. package/src/store/chat/slices/aiChat/actions/conversationLifecycle.ts +329 -0
  125. package/src/store/chat/slices/aiChat/actions/generateAIGroupChat.ts +14 -14
  126. package/src/store/chat/slices/aiChat/actions/index.ts +12 -6
  127. package/src/store/chat/slices/aiChat/actions/rag.ts +9 -6
  128. package/src/store/chat/slices/aiChat/actions/streamingExecutor.ts +604 -0
  129. package/src/store/chat/slices/aiChat/actions/streamingStates.ts +84 -0
  130. package/src/store/chat/slices/builtinTool/actions/__tests__/localSystem.test.ts +4 -4
  131. package/src/store/chat/slices/builtinTool/actions/__tests__/search.test.ts +11 -11
  132. package/src/store/chat/slices/builtinTool/actions/interpreter.ts +8 -8
  133. package/src/store/chat/slices/builtinTool/actions/localSystem.ts +2 -2
  134. package/src/store/chat/slices/builtinTool/actions/search.ts +8 -8
  135. package/src/store/chat/slices/message/action.test.ts +79 -68
  136. package/src/store/chat/slices/message/actions/index.ts +39 -0
  137. package/src/store/chat/slices/message/actions/internals.ts +77 -0
  138. package/src/store/chat/slices/message/actions/optimisticUpdate.ts +260 -0
  139. package/src/store/chat/slices/message/actions/publicApi.ts +224 -0
  140. package/src/store/chat/slices/message/actions/query.ts +120 -0
  141. package/src/store/chat/slices/message/actions/runtimeState.ts +108 -0
  142. package/src/store/chat/slices/message/initialState.ts +13 -0
  143. package/src/store/chat/slices/message/reducer.test.ts +48 -370
  144. package/src/store/chat/slices/message/reducer.ts +17 -81
  145. package/src/store/chat/slices/message/selectors/chat.test.ts +13 -50
  146. package/src/store/chat/slices/message/selectors/chat.ts +78 -242
  147. package/src/store/chat/slices/message/selectors/dbMessage.ts +140 -0
  148. package/src/store/chat/slices/message/selectors/displayMessage.ts +301 -0
  149. package/src/store/chat/slices/message/selectors/messageState.ts +5 -2
  150. package/src/store/chat/slices/plugin/action.test.ts +62 -64
  151. package/src/store/chat/slices/plugin/action.ts +34 -28
  152. package/src/store/chat/slices/thread/action.test.ts +28 -31
  153. package/src/store/chat/slices/thread/action.ts +13 -10
  154. package/src/store/chat/slices/thread/selectors/index.ts +8 -6
  155. package/src/store/chat/slices/topic/reducer.ts +11 -3
  156. package/src/store/chat/store.ts +1 -1
  157. package/src/store/user/slices/preference/selectors/labPrefer.ts +0 -3
  158. package/packages/database/src/models/__tests__/message.grouping.test.ts +0 -812
  159. package/packages/database/src/utils/__tests__/groupMessages.test.ts +0 -1132
  160. package/packages/database/src/utils/groupMessages.ts +0 -361
  161. package/packages/utils/src/tokenizer/client.ts +0 -35
  162. package/packages/utils/src/tokenizer/estimated.ts +0 -4
  163. package/packages/utils/src/tokenizer/server.ts +0 -11
  164. package/packages/utils/src/tokenizer/tokenizer.worker.ts +0 -12
  165. package/src/app/(backend)/webapi/tokenizer/index.test.ts +0 -32
  166. package/src/app/(backend)/webapi/tokenizer/route.ts +0 -8
  167. package/src/app/[variants]/(main)/chat/(workspace)/layout.ts +0 -11
  168. package/src/app/[variants]/(main)/chat/(workspace)/page.tsx +0 -53
  169. package/src/app/[variants]/(main)/chat/@session/default.tsx +0 -31
  170. package/src/app/[variants]/(main)/chat/settings/layout.tsx +0 -21
  171. package/src/features/Conversation/Error/InvalidAccessCode.tsx +0 -79
  172. package/src/store/chat/slices/aiChat/actions/__tests__/generateAIChat.test.ts +0 -975
  173. package/src/store/chat/slices/aiChat/actions/__tests__/generateAIChatV2.test.ts +0 -1050
  174. package/src/store/chat/slices/aiChat/actions/generateAIChat.ts +0 -720
  175. package/src/store/chat/slices/aiChat/actions/generateAIChatV2.ts +0 -849
  176. package/src/store/chat/slices/message/action.ts +0 -629
  177. /package/src/app/[variants]/(main)/chat/{(workspace)/@conversation → components/conversation}/default.tsx +0 -0
  178. /package/src/app/[variants]/(main)/chat/{(workspace)/@conversation → components/conversation}/features/ChatHydration/index.tsx +0 -0
  179. /package/src/app/[variants]/(main)/chat/{(workspace)/@conversation → components/conversation}/features/ChatInput/Desktop/ClassicChat.tsx +0 -0
  180. /package/src/app/[variants]/(main)/chat/{(workspace)/@conversation → components/conversation}/features/ChatInput/Desktop/GroupChat.tsx +0 -0
  181. /package/src/app/[variants]/(main)/chat/{(workspace)/@conversation → components/conversation}/features/ChatInput/Desktop/index.tsx +0 -0
  182. /package/src/app/[variants]/(main)/chat/{(workspace)/@conversation → components/conversation}/features/ChatInput/Desktop/useSendMenuItems.tsx +0 -0
  183. /package/src/app/[variants]/(main)/chat/{(workspace)/@conversation → components/conversation}/features/ChatInput/Mobile/MentionedUsers/MentionedUserItem.tsx +0 -0
  184. /package/src/app/[variants]/(main)/chat/{(workspace)/@conversation → components/conversation}/features/ChatInput/Mobile/MentionedUsers/index.tsx +0 -0
  185. /package/src/app/[variants]/(main)/chat/{(workspace)/@conversation → components/conversation}/features/ChatInput/Mobile/index.tsx +0 -0
  186. /package/src/app/[variants]/(main)/chat/{(workspace)/@conversation → components/conversation}/features/ChatInput/V1Mobile/ActionBar.tsx +0 -0
  187. /package/src/app/[variants]/(main)/chat/{(workspace)/@conversation → components/conversation}/features/ChatInput/V1Mobile/Files/index.tsx +0 -0
  188. /package/src/app/[variants]/(main)/chat/{(workspace)/@conversation → components/conversation}/features/ChatInput/V1Mobile/InputArea/Container.tsx +0 -0
  189. /package/src/app/[variants]/(main)/chat/{(workspace)/@conversation → components/conversation}/features/ChatInput/V1Mobile/InputArea/index.tsx +0 -0
  190. /package/src/app/[variants]/(main)/chat/{(workspace)/@conversation → components/conversation}/features/ChatInput/V1Mobile/Send.tsx +0 -0
  191. /package/src/app/[variants]/(main)/chat/{(workspace)/@conversation → components/conversation}/features/ChatInput/index.tsx +0 -0
  192. /package/src/app/[variants]/(main)/chat/{(workspace)/@conversation → components/conversation}/features/ChatList/ChatItem/OrchestratorThinking.tsx +0 -0
  193. /package/src/app/[variants]/(main)/chat/{(workspace)/@conversation → components/conversation}/features/ChatList/ChatItem/Thread.tsx +0 -0
  194. /package/src/app/[variants]/(main)/chat/{(workspace)/@conversation → components/conversation}/features/ChatList/ChatItem/ThreadItem.tsx +0 -0
  195. /package/src/app/[variants]/(main)/chat/{(workspace)/@conversation → components/conversation}/features/ChatList/WelcomeChatItem/AgentWelcome/AddButton.tsx +0 -0
  196. /package/src/app/[variants]/(main)/chat/{(workspace)/@conversation → components/conversation}/features/ChatList/WelcomeChatItem/AgentWelcome/index.tsx +0 -0
  197. /package/src/app/[variants]/(main)/chat/{(workspace)/@conversation → components/conversation}/features/ChatList/WelcomeChatItem/GroupWelcome/index.tsx +0 -0
  198. /package/src/app/[variants]/(main)/chat/{(workspace)/@conversation → components/conversation}/features/ChatList/WelcomeChatItem/GroupWelcome/useTemplateMatching.ts +0 -0
  199. /package/src/app/[variants]/(main)/chat/{(workspace)/@conversation → components/conversation}/features/ChatList/WelcomeChatItem/index.tsx +0 -0
  200. /package/src/app/[variants]/(main)/chat/{(workspace)/@conversation → components/conversation}/features/ChatList/index.tsx +0 -0
  201. /package/src/app/[variants]/(main)/chat/{(workspace)/@conversation → components/conversation}/features/ChatMinimap/index.tsx +0 -0
  202. /package/src/app/[variants]/(main)/chat/{(workspace)/@conversation → components/conversation}/features/ThreadHydration.tsx +0 -0
  203. /package/src/app/[variants]/(main)/chat/{(workspace)/@conversation → components/conversation}/features/ZenModeToast/Toast.tsx +0 -0
  204. /package/src/app/[variants]/(main)/chat/{(workspace)/@conversation → components/conversation}/features/ZenModeToast/index.tsx +0 -0
  205. /package/src/app/[variants]/(main)/chat/{(workspace) → components}/features/AgentSettings/index.tsx +0 -0
  206. /package/src/app/[variants]/(main)/chat/{(workspace) → components}/features/AgentTeamSettings/index.tsx +0 -0
  207. /package/src/app/[variants]/(main)/chat/{(workspace) → components}/features/ChangelogModal.tsx +0 -0
  208. /package/src/app/[variants]/(main)/chat/{(workspace) → components}/features/SettingButton.tsx +0 -0
  209. /package/src/app/[variants]/(main)/chat/{(workspace) → components}/features/ShareButton/index.tsx +0 -0
  210. /package/src/app/[variants]/(main)/chat/{(workspace) → components}/features/TelemetryNotification.tsx +0 -0
  211. /package/src/app/[variants]/(main)/chat/{(workspace)/_layout → components/layout}/Desktop/ChatHeader/HeaderAction.tsx +0 -0
  212. /package/src/app/[variants]/(main)/chat/{(workspace)/_layout → components/layout}/Desktop/ChatHeader/Main.tsx +0 -0
  213. /package/src/app/[variants]/(main)/chat/{(workspace)/_layout → components/layout}/Desktop/ChatHeader/Tags/HistoryLimitTags.tsx +0 -0
  214. /package/src/app/[variants]/(main)/chat/{(workspace)/_layout → components/layout}/Desktop/ChatHeader/Tags/KnowledgeTag.tsx +0 -0
  215. /package/src/app/[variants]/(main)/chat/{(workspace)/_layout → components/layout}/Desktop/ChatHeader/Tags/MemberCountTag.tsx +0 -0
  216. /package/src/app/[variants]/(main)/chat/{(workspace)/_layout → components/layout}/Desktop/ChatHeader/Tags/SearchTags.tsx +0 -0
  217. /package/src/app/[variants]/(main)/chat/{(workspace)/_layout → components/layout}/Desktop/ChatHeader/Tags/index.tsx +0 -0
  218. /package/src/app/[variants]/(main)/chat/{(workspace)/_layout → components/layout}/Desktop/ChatHeader/index.tsx +0 -0
  219. /package/src/app/[variants]/(main)/chat/{(workspace)/_layout → components/layout}/Desktop/Portal.tsx +0 -0
  220. /package/src/app/[variants]/(main)/chat/{(workspace)/_layout → components/layout}/Desktop/TopicPanel.tsx +0 -0
  221. /package/src/app/[variants]/(main)/chat/{(workspace)/_layout → components/layout}/Desktop/index.tsx +0 -0
  222. /package/src/app/[variants]/(main)/chat/{(workspace)/_layout → components/layout}/Mobile/ChatHeader/ChatHeaderTitle.tsx +0 -0
  223. /package/src/app/[variants]/(main)/chat/{(workspace)/_layout → components/layout}/Mobile/ChatHeader/index.tsx +0 -0
  224. /package/src/app/[variants]/(main)/chat/{(workspace)/_layout → components/layout}/Mobile/TopicModal.tsx +0 -0
  225. /package/src/app/[variants]/(main)/chat/{(workspace)/_layout → components/layout}/Mobile/index.tsx +0 -0
  226. /package/src/app/[variants]/(main)/chat/{(workspace)/_layout → components/layout}/type.ts +0 -0
  227. /package/src/app/[variants]/(main)/chat/{(workspace)/@portal → components/portal}/_layout/Desktop.tsx +0 -0
  228. /package/src/app/[variants]/(main)/chat/{(workspace)/@portal → components/portal}/_layout/Mobile.tsx +0 -0
  229. /package/src/app/[variants]/(main)/chat/{(workspace)/@portal → components/portal}/default.tsx +0 -0
  230. /package/src/app/[variants]/(main)/chat/{(workspace)/@portal → components/portal}/error.tsx +0 -0
  231. /package/src/app/[variants]/(main)/chat/{(workspace)/@portal → components/portal}/features/Body.tsx +0 -0
  232. /package/src/app/[variants]/(main)/chat/{(workspace)/@portal → components/portal}/loading.tsx +0 -0
  233. /package/src/app/[variants]/(main)/chat/{(workspace)/@topic → components/topic}/_layout/Desktop.tsx +0 -0
  234. /package/src/app/[variants]/(main)/chat/{(workspace)/@topic → components/topic}/_layout/Mobile.tsx +0 -0
  235. /package/src/app/[variants]/(main)/chat/{(workspace)/@topic → components/topic}/default.tsx +0 -0
  236. /package/src/app/[variants]/(main)/chat/{(workspace)/@topic → components/topic}/features/AgentConfig/SystemRole.tsx +0 -0
  237. /package/src/app/[variants]/(main)/chat/{(workspace)/@topic → components/topic}/features/AgentConfig/index.tsx +0 -0
  238. /package/src/app/[variants]/(main)/chat/{(workspace)/@topic → components/topic}/features/ConfigLayout.tsx +0 -0
  239. /package/src/app/[variants]/(main)/chat/{(workspace)/@topic → components/topic}/features/ConfigSwitcher.tsx +0 -0
  240. /package/src/app/[variants]/(main)/chat/{(workspace)/@topic → components/topic}/features/GroupConfig/GroupMember.tsx +0 -0
  241. /package/src/app/[variants]/(main)/chat/{(workspace)/@topic → components/topic}/features/GroupConfig/GroupMemberItem.tsx +0 -0
  242. /package/src/app/[variants]/(main)/chat/{(workspace)/@topic → components/topic}/features/GroupConfig/GroupRole.tsx +0 -0
  243. /package/src/app/[variants]/(main)/chat/{(workspace)/@topic → components/topic}/features/GroupConfig/index.tsx +0 -0
  244. /package/src/app/[variants]/(main)/chat/{(workspace)/@topic → components/topic}/features/GroupConfig/style.ts +0 -0
  245. /package/src/app/[variants]/(main)/chat/{(workspace)/@topic → components/topic}/features/SkeletonList.tsx +0 -0
  246. /package/src/app/[variants]/(main)/chat/{(workspace)/@topic → components/topic}/features/Topic/Header.tsx +0 -0
  247. /package/src/app/[variants]/(main)/chat/{(workspace)/@topic → components/topic}/features/Topic/TopicListContent/ByTimeMode/GroupItem.tsx +0 -0
  248. /package/src/app/[variants]/(main)/chat/{(workspace)/@topic → components/topic}/features/Topic/TopicListContent/ByTimeMode/index.tsx +0 -0
  249. /package/src/app/[variants]/(main)/chat/{(workspace)/@topic → components/topic}/features/Topic/TopicListContent/FlatMode/index.tsx +0 -0
  250. /package/src/app/[variants]/(main)/chat/{(workspace)/@topic → components/topic}/features/Topic/TopicListContent/SearchResult/index.tsx +0 -0
  251. /package/src/app/[variants]/(main)/chat/{(workspace)/@topic → components/topic}/features/Topic/TopicListContent/ThreadItem/Content.tsx +0 -0
  252. /package/src/app/[variants]/(main)/chat/{(workspace)/@topic → components/topic}/features/Topic/TopicListContent/ThreadItem/index.tsx +0 -0
  253. /package/src/app/[variants]/(main)/chat/{(workspace)/@topic → components/topic}/features/Topic/TopicListContent/ThreadList/index.tsx +0 -0
  254. /package/src/app/[variants]/(main)/chat/{(workspace)/@topic → components/topic}/features/Topic/TopicListContent/TopicItem/DefaultContent.tsx +0 -0
  255. /package/src/app/[variants]/(main)/chat/{(workspace)/@topic → components/topic}/features/Topic/TopicListContent/TopicItem/TopicContent.tsx +0 -0
  256. /package/src/app/[variants]/(main)/chat/{(workspace)/@topic → components/topic}/features/Topic/TopicListContent/TopicItem/index.tsx +0 -0
  257. /package/src/app/[variants]/(main)/chat/{(workspace)/@topic → components/topic}/features/Topic/TopicListContent/index.tsx +0 -0
  258. /package/src/app/[variants]/(main)/chat/{(workspace)/@topic → components/topic}/features/Topic/TopicSearchBar/index.tsx +0 -0
  259. /package/src/app/[variants]/(main)/chat/{(workspace)/@topic → components/topic}/features/Topic/index.tsx +0 -0
  260. /package/src/app/[variants]/(main)/chat/{@session → session}/features/SessionHydration.tsx +0 -0
  261. /package/src/app/[variants]/(main)/chat/{@session → session}/features/SessionListContent/CollapseGroup/Actions.tsx +0 -0
  262. /package/src/app/[variants]/(main)/chat/{@session → session}/features/SessionListContent/CollapseGroup/index.tsx +0 -0
  263. /package/src/app/[variants]/(main)/chat/{@session → session}/features/SessionListContent/DefaultMode.tsx +0 -0
  264. /package/src/app/[variants]/(main)/chat/{@session → session}/features/SessionListContent/Inbox/index.tsx +0 -0
  265. /package/src/app/[variants]/(main)/chat/{@session → session}/features/SessionListContent/List/AddButton.tsx +0 -0
  266. /package/src/app/[variants]/(main)/chat/{@session → session}/features/SessionListContent/List/Item/Actions.tsx +0 -0
  267. /package/src/app/[variants]/(main)/chat/{@session → session}/features/SessionListContent/List/Item/index.tsx +0 -0
  268. /package/src/app/[variants]/(main)/chat/{@session → session}/features/SessionListContent/List/index.tsx +0 -0
  269. /package/src/app/[variants]/(main)/chat/{@session → session}/features/SessionListContent/ListItem/index.tsx +0 -0
  270. /package/src/app/[variants]/(main)/chat/{@session → session}/features/SessionListContent/Modals/ConfigGroupModal/GroupItem.tsx +0 -0
  271. /package/src/app/[variants]/(main)/chat/{@session → session}/features/SessionListContent/Modals/ConfigGroupModal/index.tsx +0 -0
  272. /package/src/app/[variants]/(main)/chat/{@session → session}/features/SessionListContent/Modals/CreateGroupModal.tsx +0 -0
  273. /package/src/app/[variants]/(main)/chat/{@session → session}/features/SessionListContent/Modals/RenameGroupModal.tsx +0 -0
  274. /package/src/app/[variants]/(main)/chat/{@session → session}/features/SessionListContent/SearchMode.tsx +0 -0
  275. /package/src/app/[variants]/(main)/chat/{@session → session}/features/SessionListContent/index.tsx +0 -0
  276. /package/src/app/[variants]/(main)/chat/{@session → session}/features/SessionSearchBar.tsx +0 -0
  277. /package/src/app/[variants]/(main)/chat/{@session → session}/features/SkeletonList.tsx +0 -0
  278. /package/src/app/[variants]/(main)/chat/{@session/_layout → session/layout}/Desktop/PanelBody.tsx +0 -0
  279. /package/src/app/[variants]/(main)/chat/{@session/_layout → session/layout}/Desktop/SessionHeader.tsx +0 -0
  280. /package/src/app/[variants]/(main)/chat/{@session/_layout → session/layout}/Desktop/index.tsx +0 -0
  281. /package/src/app/[variants]/(main)/chat/{@session/_layout → session/layout}/Mobile/SessionHeader.tsx +0 -0
  282. /package/src/app/[variants]/(main)/chat/{@session/_layout → session/layout}/Mobile/index.tsx +0 -0
@@ -0,0 +1,29 @@
1
+ import { memo } from 'react';
2
+
3
+ import ChatHydration from './conversation/features/ChatHydration';
4
+ import ChatInput from './conversation/features/ChatInput';
5
+ import ChatList from './conversation/features/ChatList';
6
+ import ChatMinimap from './conversation/features/ChatMinimap';
7
+ import ThreadHydration from './conversation/features/ThreadHydration';
8
+ import ZenModeToast from './conversation/features/ZenModeToast';
9
+
10
+ interface ConversationAreaProps {
11
+ mobile?: boolean;
12
+ }
13
+
14
+ const ConversationArea = memo<ConversationAreaProps>(({ mobile = false }) => {
15
+ return (
16
+ <>
17
+ <ZenModeToast />
18
+ <ChatList mobile={mobile} />
19
+ <ChatInput mobile={mobile} />
20
+ <ChatHydration />
21
+ <ThreadHydration />
22
+ {!mobile && <ChatMinimap />}
23
+ </>
24
+ );
25
+ });
26
+
27
+ ConversationArea.displayName = 'ConversationArea';
28
+
29
+ export default ConversationArea;
@@ -0,0 +1,25 @@
1
+ 'use client';
2
+
3
+ import { memo } from 'react';
4
+
5
+ import TelemetryNotification from '../components/features/TelemetryNotification';
6
+ import PageTitle from '../features/PageTitle';
7
+ import WorkspaceLayout from './WorkspaceLayout';
8
+
9
+ interface MainChatPageProps {
10
+ mobile?: boolean;
11
+ }
12
+
13
+ const MainChatPage = memo<MainChatPageProps>(({ mobile }) => {
14
+ return (
15
+ <>
16
+ <PageTitle />
17
+ <WorkspaceLayout mobile={mobile} />
18
+ <TelemetryNotification mobile={mobile} />
19
+ </>
20
+ );
21
+ });
22
+
23
+ MainChatPage.displayName = 'MainChatPage';
24
+
25
+ export default MainChatPage;
@@ -0,0 +1,28 @@
1
+ import { Suspense, lazy, memo } from 'react';
2
+
3
+ import Loading from '@/components/Loading/BrandTextLoading';
4
+
5
+ import DesktopLayout from './portal/_layout/Desktop';
6
+ import MobileLayout from './portal/_layout/Mobile';
7
+
8
+ const PortalBody = lazy(() => import('@/features/Portal/router'));
9
+
10
+ interface PortalPanelProps {
11
+ mobile?: boolean;
12
+ }
13
+
14
+ const PortalPanel = memo<PortalPanelProps>(({ mobile }) => {
15
+ const Layout = mobile ? MobileLayout : DesktopLayout;
16
+
17
+ return (
18
+ <Suspense fallback={<Loading />}>
19
+ <Layout>
20
+ <PortalBody />
21
+ </Layout>
22
+ </Suspense>
23
+ );
24
+ });
25
+
26
+ PortalPanel.displayName = 'PortalPanel';
27
+
28
+ export default PortalPanel;
@@ -0,0 +1,33 @@
1
+ import { Suspense, lazy, memo } from 'react';
2
+
3
+ import CircleLoading from '@/components/Loading/CircleLoading';
4
+
5
+ import DesktopLayout from '../session/layout/Desktop';
6
+ import MobileLayout from '../session/layout/Mobile';
7
+ import SessionHydration from '../session/features/SessionHydration';
8
+ import SkeletonList from '../session/features/SkeletonList';
9
+
10
+ const SessionListContent = lazy(() => import('../session/features/SessionListContent'));
11
+
12
+ interface SessionPanelProps {
13
+ mobile?: boolean;
14
+ }
15
+
16
+ const SessionPanel = memo<SessionPanelProps>(({ mobile }) => {
17
+ const Layout = mobile ? MobileLayout : DesktopLayout;
18
+
19
+ return (
20
+ <Suspense fallback={<CircleLoading />}>
21
+ <Layout>
22
+ <Suspense fallback={<SkeletonList />}>
23
+ <SessionListContent />
24
+ </Suspense>
25
+ </Layout>
26
+ <SessionHydration />
27
+ </Suspense>
28
+ );
29
+ });
30
+
31
+ SessionPanel.displayName = 'SessionPanel';
32
+
33
+ export default SessionPanel;
@@ -6,9 +6,14 @@ import isEqual from 'fast-deep-equal';
6
6
  import { memo, useState } from 'react';
7
7
  import { useTranslation } from 'react-i18next';
8
8
 
9
+ import MobileContentLayout from '@/components/server/MobileNavLayout';
9
10
  import PageTitle from '@/components/PageTitle';
11
+ import SafeSpacing from '@/components/SafeSpacing';
12
+ import { HEADER_HEIGHT } from '@/const/layoutTokens';
10
13
  import { useCategory } from '@/features/AgentSetting/AgentCategory/useCategory';
11
14
  import AgentSettings from '@/features/AgentSetting/AgentSettings';
15
+ import Footer from '@/features/Setting/Footer';
16
+ import SettingContainer from '@/features/Setting/SettingContainer';
12
17
  import { useInitAgentConfig } from '@/hooks/useInitAgentConfig';
13
18
  import { useAgentStore } from '@/store/agent';
14
19
  import { agentSelectors } from '@/store/agent/selectors';
@@ -16,7 +21,14 @@ import { ChatSettingsTabs } from '@/store/global/initialState';
16
21
  import { useSessionStore } from '@/store/session';
17
22
  import { sessionMetaSelectors } from '@/store/session/selectors';
18
23
 
19
- const EditPage = memo(() => {
24
+ import DesktopHeader from '../settings/_layout/Desktop/Header';
25
+ import MobileHeader from '../settings/_layout/Mobile/Header';
26
+
27
+ interface SettingsPageProps {
28
+ mobile?: boolean;
29
+ }
30
+
31
+ const SettingsPage = memo<SettingsPageProps>(({ mobile = false }) => {
20
32
  const { t } = useTranslation('setting');
21
33
  const [tab, setTab] = useState(ChatSettingsTabs.Prompt);
22
34
  const theme = useTheme();
@@ -34,7 +46,7 @@ const EditPage = memo(() => {
34
46
 
35
47
  const { isLoading } = useInitAgentConfig();
36
48
 
37
- return (
49
+ const content = (
38
50
  <>
39
51
  <PageTitle title={t('header.sessionWithName', { name: title })} />
40
52
  <Tabs
@@ -57,6 +69,26 @@ const EditPage = memo(() => {
57
69
  />
58
70
  </>
59
71
  );
72
+
73
+ if (mobile) {
74
+ return (
75
+ <MobileContentLayout header={<MobileHeader />}>
76
+ {content}
77
+ <Footer />
78
+ </MobileContentLayout>
79
+ );
80
+ }
81
+
82
+ return (
83
+ <>
84
+ <DesktopHeader />
85
+ <SettingContainer addonAfter={<Footer />} addonBefore={<SafeSpacing height={HEADER_HEIGHT} />}>
86
+ {content}
87
+ </SettingContainer>
88
+ </>
89
+ );
60
90
  });
61
91
 
62
- export default EditPage;
92
+ SettingsPage.displayName = 'SettingsPage';
93
+
94
+ export default SettingsPage;
@@ -0,0 +1,30 @@
1
+ import dynamic from 'next/dynamic';
2
+ import { memo } from 'react';
3
+
4
+ import DesktopLayout from './topic/_layout/Desktop';
5
+ import MobileLayout from './topic/_layout/Mobile';
6
+ import SkeletonList from './topic/features/SkeletonList';
7
+ import Topic from './topic/features/Topic';
8
+
9
+ const ConfigSwitcher = dynamic(() => import('./topic/features/ConfigSwitcher'), {
10
+ loading: () => <SkeletonList />,
11
+ });
12
+
13
+ interface TopicSidebarProps {
14
+ mobile?: boolean;
15
+ }
16
+
17
+ const TopicSidebar = memo<TopicSidebarProps>(({ mobile }) => {
18
+ const Layout = mobile ? MobileLayout : DesktopLayout;
19
+
20
+ return (
21
+ <Layout>
22
+ <ConfigSwitcher />
23
+ <Topic />
24
+ </Layout>
25
+ );
26
+ });
27
+
28
+ TopicSidebar.displayName = 'TopicSidebar';
29
+
30
+ export default TopicSidebar;
@@ -0,0 +1,73 @@
1
+ import { Suspense, memo } from 'react';
2
+ import { Flexbox } from 'react-layout-kit';
3
+
4
+ import MainInterfaceTracker from '@/components/Analytics/MainInterfaceTracker';
5
+ import BrandTextLoading from '@/components/Loading/BrandTextLoading';
6
+ import MobileContentLayout from '@/components/server/MobileNavLayout';
7
+
8
+ import ChatHeaderDesktop from '../components/layout/Desktop/ChatHeader';
9
+ import Portal from '../components/layout/Desktop/Portal';
10
+ import TopicPanel from '../components/layout/Desktop/TopicPanel';
11
+ import ChatHeaderMobile from '../components/layout/Mobile/ChatHeader';
12
+ import TopicModal from '../components/layout/Mobile/TopicModal';
13
+ import ConversationArea from './ConversationArea';
14
+ import PortalPanel from './PortalPanel';
15
+ import TopicSidebar from './TopicSidebar';
16
+
17
+ interface WorkspaceLayoutProps {
18
+ mobile?: boolean;
19
+ }
20
+
21
+ const DesktopWorkspace = memo(() => (
22
+ <>
23
+ <ChatHeaderDesktop />
24
+ <Flexbox
25
+ height={'100%'}
26
+ horizontal
27
+ style={{ overflow: 'hidden', position: 'relative' }}
28
+ width={'100%'}
29
+ >
30
+ <Flexbox height={'100%'} style={{ overflow: 'hidden', position: 'relative' }} width={'100%'}>
31
+ <ConversationArea mobile={false} />
32
+ </Flexbox>
33
+ <Portal>
34
+ <Suspense fallback={<BrandTextLoading />}>
35
+ <PortalPanel mobile={false} />
36
+ </Suspense>
37
+ </Portal>
38
+ <TopicPanel>
39
+ <TopicSidebar mobile={false} />
40
+ </TopicPanel>
41
+ </Flexbox>
42
+ <MainInterfaceTracker />
43
+ </>
44
+ ));
45
+
46
+ DesktopWorkspace.displayName = 'DesktopWorkspace';
47
+
48
+ const MobileWorkspace = memo(() => (
49
+ <>
50
+ <MobileContentLayout header={<ChatHeaderMobile />} style={{ overflowY: 'hidden' }}>
51
+ <ConversationArea mobile />
52
+ </MobileContentLayout>
53
+ <TopicModal>
54
+ <TopicSidebar mobile />
55
+ </TopicModal>
56
+ <PortalPanel mobile />
57
+ <MainInterfaceTracker />
58
+ </>
59
+ ));
60
+
61
+ MobileWorkspace.displayName = 'MobileWorkspace';
62
+
63
+ const WorkspaceLayout = memo<WorkspaceLayoutProps>(({ mobile }) => {
64
+ if (mobile) {
65
+ return <MobileWorkspace />;
66
+ }
67
+
68
+ return <DesktopWorkspace />;
69
+ });
70
+
71
+ WorkspaceLayout.displayName = 'WorkspaceLayout';
72
+
73
+ export default WorkspaceLayout;
@@ -8,7 +8,7 @@ import { useChatStore } from '@/store/chat';
8
8
  import { useSend } from '../useSend';
9
9
 
10
10
  const MessageFromUrl = () => {
11
- const updateInputMessage = useChatStore((s) => s.updateInputMessage);
11
+ const updateMessageInput = useChatStore((s) => s.updateMessageInput);
12
12
  const { send: sendMessage } = useSend();
13
13
  const searchParams = useSearchParams();
14
14
 
@@ -21,10 +21,10 @@ const MessageFromUrl = () => {
21
21
  const newUrl = `${window.location.pathname}?${params.toString()}`;
22
22
  window.history.replaceState({}, '', newUrl);
23
23
 
24
- updateInputMessage(message);
24
+ updateMessageInput(message);
25
25
  sendMessage();
26
26
  }
27
- }, [searchParams, updateInputMessage, sendMessage]);
27
+ }, [searchParams, updateMessageInput, sendMessage]);
28
28
 
29
29
  return null;
30
30
  };
@@ -39,7 +39,7 @@ const MobileChatInput = memo(() => {
39
39
  const [loading, value, onInput, onStop] = useChatStore((s) => [
40
40
  messageStateSelectors.isAIGenerating(s),
41
41
  s.inputMessage,
42
- s.updateInputMessage,
42
+ s.updateMessageInput,
43
43
  s.stopGenerateMessage,
44
44
  ]);
45
45
 
@@ -16,9 +16,9 @@ export type UseSendMessageParams = Pick<
16
16
  >;
17
17
 
18
18
  export const useSendMessage = () => {
19
- const [sendMessage, updateInputMessage] = useChatStore((s) => [
19
+ const [sendMessage, updateMessageInput] = useChatStore((s) => [
20
20
  s.sendMessage,
21
- s.updateInputMessage,
21
+ s.updateMessageInput,
22
22
  ]);
23
23
  const { analytics } = useAnalytics();
24
24
  const checkGeminiChineseWarning = useGeminiChineseWarning();
@@ -66,7 +66,7 @@ export const useSendMessage = () => {
66
66
  ...params,
67
67
  });
68
68
 
69
- updateInputMessage('');
69
+ updateMessageInput('');
70
70
  clearChatUploadFileList();
71
71
 
72
72
  // 获取分析数据
@@ -161,14 +161,14 @@ export const useSendGroupMessage = () => {
161
161
  const [
162
162
  isContentEmpty,
163
163
  sendGroupMessage,
164
- updateInputMessage,
164
+ updateMessageInput,
165
165
  stopGenerateMessage,
166
166
  isSendButtonDisabledByMessage,
167
167
  isCreatingMessage,
168
168
  ] = useChatStore((s) => [
169
169
  !s.inputMessage,
170
170
  s.sendGroupMessage,
171
- s.updateInputMessage,
171
+ s.updateMessageInput,
172
172
  s.stopGenerateMessage,
173
173
  messageStateSelectors.isSendButtonDisabledByMessage(s),
174
174
  messageStateSelectors.isCreatingMessage(s),
@@ -255,7 +255,7 @@ export const useSendGroupMessage = () => {
255
255
  mainInputEditor.setExpand(false);
256
256
  mainInputEditor.clearContent();
257
257
  mainInputEditor.focus();
258
- updateInputMessage('');
258
+ updateMessageInput('');
259
259
  // clear mentioned users after sending
260
260
  mentionState.clearMentionedUsers();
261
261
 
@@ -284,7 +284,7 @@ export const useSendGroupMessage = () => {
284
284
  canNotSend,
285
285
  fileList,
286
286
  clearChatUploadFileList,
287
- updateInputMessage,
287
+ updateMessageInput,
288
288
  analytics,
289
289
  checkGeminiChineseWarning,
290
290
  ],
@@ -314,8 +314,8 @@ export const useSendGroupMessage = () => {
314
314
  generating: isSupervisorThinking || isCreatingMessage,
315
315
  send: handleSend,
316
316
  stop,
317
- updateInputMessage,
317
+ updateMessageInput,
318
318
  }),
319
- [canNotSend, isSupervisorThinking, isCreatingMessage, handleSend, stop, updateInputMessage],
319
+ [canNotSend, isSupervisorThinking, isCreatingMessage, handleSend, stop, updateMessageInput],
320
320
  );
321
321
  };
@@ -1,7 +1,7 @@
1
1
  import { createStyles } from 'antd-style';
2
2
  import React, { memo } from 'react';
3
3
 
4
- import SupervisorThinkingTag from '@/app/[variants]/(main)/chat/(workspace)/@conversation/features/ChatList/ChatItem/OrchestratorThinking';
4
+ import SupervisorThinkingTag from '@/app/[variants]/(main)/chat/components/conversation/features/ChatList/ChatItem/OrchestratorThinking';
5
5
  import { ChatItem } from '@/features/Conversation';
6
6
  import { useAgentStore } from '@/store/agent';
7
7
  import { agentChatConfigSelectors } from '@/store/agent/selectors';
@@ -6,7 +6,7 @@ import { SkeletonList, VirtualizedList } from '@/features/Conversation';
6
6
  import WideScreenContainer from '@/features/Conversation/components/WideScreenContainer';
7
7
  import { useFetchMessages } from '@/hooks/useFetchMessages';
8
8
  import { useChatStore } from '@/store/chat';
9
- import { chatSelectors } from '@/store/chat/selectors';
9
+ import { displayMessageSelectors } from '@/store/chat/selectors';
10
10
 
11
11
  import MainChatItem from './ChatItem';
12
12
  import Welcome from './WelcomeChatItem';
@@ -16,10 +16,12 @@ interface ListProps {
16
16
  }
17
17
 
18
18
  const Content = memo<ListProps>(({ mobile }) => {
19
- const [isCurrentChatLoaded] = useChatStore((s) => [chatSelectors.isCurrentChatLoaded(s)]);
19
+ const [isCurrentChatLoaded] = useChatStore((s) => [
20
+ displayMessageSelectors.isCurrentDisplayChatLoaded(s),
21
+ ]);
20
22
 
21
23
  useFetchMessages();
22
- const data = useChatStore(chatSelectors.mainDisplayChatIDs);
24
+ const data = useChatStore(displayMessageSelectors.mainDisplayChatIDs);
23
25
 
24
26
  const itemContent = useCallback(
25
27
  (index: number, id: string) => <MainChatItem id={id} index={index} />,
@@ -40,7 +40,7 @@ interface OpeningQuestionsProps {
40
40
 
41
41
  const OpeningQuestions = memo<OpeningQuestionsProps>(({ mobile, questions }) => {
42
42
  const { t } = useTranslation('welcome');
43
- const [updateInputMessage] = useChatStore((s) => [s.updateInputMessage]);
43
+ const [updateMessageInput] = useChatStore((s) => [s.updateMessageInput]);
44
44
 
45
45
  const { styles } = useStyles();
46
46
  const { send: sendMessage } = useSend();
@@ -56,7 +56,7 @@ const OpeningQuestions = memo<OpeningQuestionsProps>(({ mobile, questions }) =>
56
56
  clickable
57
57
  key={question}
58
58
  onClick={() => {
59
- updateInputMessage(question);
59
+ updateMessageInput(question);
60
60
  sendMessage({ isWelcomeQuestion: true });
61
61
  }}
62
62
  paddingBlock={8}
@@ -77,7 +77,7 @@ const getFallbackActivities = (t: any) => {
77
77
  const GroupUsageSuggest = memo<{ mobile?: boolean }>(({ mobile }) => {
78
78
  const { t } = useTranslation('welcome');
79
79
  const { styles } = useStyles();
80
- const { updateInputMessage, send } = useSendGroupMessage();
80
+ const { updateMessageInput, send } = useSendGroupMessage();
81
81
  const templateMatch = useTemplateMatching();
82
82
 
83
83
  const itemsPerPage = mobile ? 2 : 4;
@@ -139,7 +139,7 @@ const GroupUsageSuggest = memo<{ mobile?: boolean }>(({ mobile }) => {
139
139
  horizontal
140
140
  key={activityKey}
141
141
  onClick={() => {
142
- updateInputMessage(prompt);
142
+ updateMessageInput(prompt);
143
143
  send();
144
144
  }}
145
145
  variant={'outlined'}
@@ -1,5 +1,4 @@
1
1
  import ServerLayout from '@/components/server/ServerLayout';
2
-
3
2
  import Desktop from './_layout/Desktop';
4
3
  import Mobile from './_layout/Mobile';
5
4
  import { LayoutProps } from './_layout/type';
@@ -0,0 +1,12 @@
1
+ 'use client';
2
+
3
+ import dynamic from 'next/dynamic';
4
+
5
+ import { BrandTextLoading } from '@/components/Loading';
6
+
7
+ const ChatRouter = dynamic(() => import('./ChatRouter'), {
8
+ loading: BrandTextLoading,
9
+ ssr: false,
10
+ });
11
+
12
+ export default ChatRouter;
@@ -24,13 +24,11 @@ const LabsPage = memo(() => {
24
24
  const [
25
25
  isPreferenceInit,
26
26
  enableInputMarkdown,
27
- enableAssistantMessageGroup,
28
27
  // enableGroupChat,
29
28
  updateLab,
30
29
  ] = useUserStore((s) => [
31
30
  preferenceSelectors.isPreferenceInit(s),
32
31
  labPreferSelectors.enableInputMarkdown(s),
33
- labPreferSelectors.enableAssistantMessageGroup(s),
34
32
  // labPreferSelectors.enableGroupChat(s),
35
33
  s.updateLab,
36
34
  ]);
@@ -43,13 +41,6 @@ const LabsPage = memo(() => {
43
41
  key: 'enableInputMarkdown',
44
42
  title: t('features.inputMarkdown.title'),
45
43
  },
46
- {
47
- checked: enableAssistantMessageGroup,
48
- cover: 'https://github.com/user-attachments/assets/ba517751-1f3b-4269-979e-f8471e3ebb89',
49
- desc: t('features.assistantMessageGroup.desc'),
50
- key: 'enableAssistantMessageGroup',
51
- title: t('features.assistantMessageGroup.title'),
52
- },
53
44
  // {
54
45
  // checked: enableGroupChat,
55
46
  // cover: 'https://github.com/user-attachments/assets/72894d24-a96a-4d7c-a823-ff9e6a1a8b6d',
@@ -42,9 +42,9 @@ const BrowserSTT = memo<{ mobile?: boolean }>(({ mobile }) => {
42
42
  const [error, setError] = useState<ChatMessageError>();
43
43
  const { t } = useTranslation('chat');
44
44
 
45
- const [loading, updateInputMessage] = useChatStore((s) => [
45
+ const [loading, updateMessageInput] = useChatStore((s) => [
46
46
  messageStateSelectors.isAIGenerating(s),
47
- s.updateInputMessage,
47
+ s.updateMessageInput,
48
48
  ]);
49
49
 
50
50
  const setDefaultError = useCallback(
@@ -76,7 +76,7 @@ const BrowserSTT = memo<{ mobile?: boolean }>(({ mobile }) => {
76
76
  },
77
77
  onTextChange: (text) => {
78
78
  if (loading) stop();
79
- if (text) updateInputMessage(text);
79
+ if (text) updateMessageInput(text);
80
80
  },
81
81
  });
82
82
 
@@ -53,9 +53,9 @@ const OpenaiSTT = memo<{ mobile?: boolean }>(({ mobile }) => {
53
53
  const [error, setError] = useState<ChatMessageError>();
54
54
  const { t } = useTranslation('chat');
55
55
 
56
- const [loading, updateInputMessage] = useChatStore((s) => [
56
+ const [loading, updateMessageInput] = useChatStore((s) => [
57
57
  messageStateSelectors.isAIGenerating(s),
58
- s.updateInputMessage,
58
+ s.updateMessageInput,
59
59
  ]);
60
60
 
61
61
  const setDefaultError = useCallback(
@@ -87,7 +87,7 @@ const OpenaiSTT = memo<{ mobile?: boolean }>(({ mobile }) => {
87
87
  },
88
88
  onTextChange: (text) => {
89
89
  if (loading) stop();
90
- if (text) updateInputMessage(text);
90
+ if (text) updateMessageInput(text);
91
91
  },
92
92
  });
93
93
 
@@ -19,7 +19,7 @@ const AccessCodeForm = memo<AccessCodeFormProps>(({ id }) => {
19
19
  keyVaultsConfigSelectors.password(s),
20
20
  s.updateKeyVaults,
21
21
  ]);
22
- const [resend, deleteMessage] = useChatStore((s) => [s.regenerateMessage, s.deleteMessage]);
22
+ const [resend, deleteMessage] = useChatStore((s) => [s.delAndRegenerateMessage, s.deleteMessage]);
23
23
 
24
24
  return (
25
25
  <>
@@ -13,7 +13,7 @@ interface ChatInvalidAPIKeyProps {
13
13
  const ChatInvalidAPIKey = memo<ChatInvalidAPIKeyProps>(({ id, provider }) => {
14
14
  const { t } = useTranslation('modelProvider');
15
15
  const { t: modelProviderErrorT } = useTranslation(['modelProvider', 'error']);
16
- const [resend, deleteMessage] = useChatStore((s) => [s.regenerateMessage, s.deleteMessage]);
16
+ const [resend, deleteMessage] = useChatStore((s) => [s.delAndRegenerateMessage, s.deleteMessage]);
17
17
  const providerName = useProviderName(provider as GlobalLLMProviderKey);
18
18
 
19
19
  return (
@@ -15,7 +15,7 @@ const ClerkLogin = memo<{ id: string }>(({ id }) => {
15
15
  const [openSignIn, isSignedIn] = useUserStore((s) => [s.openLogin, s.isSignedIn]);
16
16
  const greeting = useGreeting();
17
17
  const nickName = useUserStore(userProfileSelectors.nickName);
18
- const [resend, deleteMessage] = useChatStore((s) => [s.regenerateMessage, s.deleteMessage]);
18
+ const [resend, deleteMessage] = useChatStore((s) => [s.delAndRegenerateMessage, s.deleteMessage]);
19
19
 
20
20
  return (
21
21
  <ErrorActionContainer>
@@ -18,7 +18,7 @@ const OAuthForm = memo<{ id: string }>(({ id }) => {
18
18
  const user = useUserStore(userProfileSelectors.userProfile);
19
19
  const isOAuthLoggedIn = useUserStore(authSelectors.isLoginWithAuth);
20
20
 
21
- const [resend, deleteMessage] = useChatStore((s) => [s.regenerateMessage, s.deleteMessage]);
21
+ const [resend, deleteMessage] = useChatStore((s) => [s.delAndRegenerateMessage, s.deleteMessage]);
22
22
 
23
23
  const { message, modal } = App.useApp();
24
24
 
@@ -12,7 +12,6 @@ import { useProviderName } from '@/hooks/useProviderName';
12
12
  import ChatInvalidAPIKey from './ChatInvalidApiKey';
13
13
  import ClerkLogin from './ClerkLogin';
14
14
  import ErrorJsonViewer from './ErrorJsonViewer';
15
- import InvalidAccessCode from './InvalidAccessCode';
16
15
  import { ErrorActionContainer } from './style';
17
16
 
18
17
  interface ErrorMessageData {
@@ -118,10 +117,6 @@ const ErrorMessageExtra = memo<ErrorExtraProps>(({ data, block }) => {
118
117
  return <ClerkLogin id={data.id} />;
119
118
  }
120
119
 
121
- case ChatErrorType.InvalidAccessCode: {
122
- return <InvalidAccessCode id={data.id} provider={data.error?.body?.provider} />;
123
- }
124
-
125
120
  case AgentRuntimeErrorType.NoOpenAIAPIKey: {
126
121
  {
127
122
  return <ChatInvalidAPIKey id={data.id} provider={data.error?.body?.provider} />;