@lobehub/lobehub 2.0.0-next.96 → 2.0.0-next.98

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 (272) hide show
  1. package/.console-log-whitelist.json +14 -0
  2. package/.github/workflows/check-console-log.yml +117 -0
  3. package/.github/workflows/desktop-pr-build.yml +4 -4
  4. package/.github/workflows/release-desktop-beta.yml +4 -4
  5. package/.github/workflows/release.yml +1 -1
  6. package/.github/workflows/test.yml +5 -5
  7. package/CHANGELOG.md +66 -0
  8. package/apps/desktop/src/preload/index.ts +2 -2
  9. package/apps/desktop/src/preload/invoke.ts +1 -1
  10. package/apps/desktop/src/preload/routeInterceptor.ts +41 -41
  11. package/changelog/v1.json +21 -0
  12. package/docs/development/database-schema.dbml +1 -0
  13. package/e2e/package.json +1 -1
  14. package/locales/ar/file.json +9 -11
  15. package/locales/ar/models.json +6 -0
  16. package/locales/bg-BG/file.json +8 -10
  17. package/locales/bg-BG/models.json +6 -0
  18. package/locales/de-DE/file.json +9 -11
  19. package/locales/de-DE/models.json +6 -0
  20. package/locales/en-US/file.json +12 -14
  21. package/locales/en-US/models.json +6 -0
  22. package/locales/es-ES/file.json +7 -9
  23. package/locales/es-ES/models.json +6 -0
  24. package/locales/fa-IR/file.json +9 -11
  25. package/locales/fa-IR/models.json +6 -0
  26. package/locales/fr-FR/file.json +6 -8
  27. package/locales/fr-FR/models.json +6 -0
  28. package/locales/it-IT/file.json +8 -10
  29. package/locales/it-IT/models.json +6 -0
  30. package/locales/ja-JP/file.json +10 -12
  31. package/locales/ja-JP/models.json +6 -0
  32. package/locales/ko-KR/file.json +8 -10
  33. package/locales/ko-KR/models.json +6 -0
  34. package/locales/nl-NL/file.json +8 -10
  35. package/locales/nl-NL/models.json +6 -0
  36. package/locales/pl-PL/file.json +7 -9
  37. package/locales/pl-PL/models.json +6 -0
  38. package/locales/pt-BR/file.json +7 -9
  39. package/locales/pt-BR/models.json +6 -0
  40. package/locales/ru-RU/file.json +9 -11
  41. package/locales/ru-RU/models.json +6 -0
  42. package/locales/tr-TR/file.json +8 -10
  43. package/locales/tr-TR/models.json +6 -0
  44. package/locales/vi-VN/file.json +9 -11
  45. package/locales/vi-VN/models.json +6 -0
  46. package/locales/zh-CN/file.json +10 -12
  47. package/locales/zh-CN/models.json +6 -0
  48. package/locales/zh-TW/file.json +10 -12
  49. package/locales/zh-TW/models.json +6 -0
  50. package/package.json +3 -2
  51. package/packages/database/migrations/0047_add_slug_document.sql +6 -0
  52. package/packages/database/migrations/meta/0047_snapshot.json +7891 -0
  53. package/packages/database/migrations/meta/_journal.json +7 -0
  54. package/packages/database/src/client/db.ts +12 -12
  55. package/packages/database/src/core/migrations.json +16 -7
  56. package/packages/database/src/models/document.ts +2 -2
  57. package/packages/database/src/repositories/dataImporter/index.ts +10 -10
  58. package/packages/database/src/schemas/file.ts +7 -1
  59. package/packages/database/src/schemas/topic.ts +1 -1
  60. package/packages/database/src/server/models/ragEval/evaluation.ts +1 -1
  61. package/packages/model-bank/src/aiModels/qwen.ts +5 -3
  62. package/packages/model-runtime/src/core/openaiCompatibleFactory/index.ts +21 -21
  63. package/packages/obervability-otel/package.json +2 -2
  64. package/scripts/checkConsoleLog.mts +148 -0
  65. package/scripts/prebuild.mts +5 -5
  66. package/src/app/[variants]/(main)/changelog/index.tsx +1 -1
  67. package/src/app/[variants]/(main)/chat/components/conversation/features/ChatInput/Desktop/ClassicChat.tsx +1 -1
  68. package/src/app/[variants]/(main)/chat/components/conversation/features/ChatInput/Desktop/GroupChat.tsx +1 -1
  69. package/src/app/[variants]/(main)/chat/components/conversation/features/ChatList/ChatItem/index.tsx +1 -1
  70. package/src/app/[variants]/(main)/chat/components/conversation/features/ChatList/Content.tsx +2 -2
  71. package/src/app/[variants]/(main)/chat/components/conversation/features/ChatList/index.tsx +1 -1
  72. package/src/app/[variants]/(main)/chat/components/conversation/features/ChatMinimap/index.tsx +1 -1
  73. package/src/app/[variants]/(main)/settings/_layout/Desktop/index.tsx +20 -16
  74. package/src/app/[variants]/(main)/settings/provider/(list)/ProviderGrid/Card.tsx +6 -3
  75. package/src/app/[variants]/(main)/settings/provider/(list)/index.tsx +3 -2
  76. package/src/app/[variants]/(main)/settings/provider/detail/index.tsx +14 -4
  77. package/src/app/[variants]/desktopRouter.config.tsx +23 -0
  78. package/src/app/[variants]/mobileRouter.config.tsx +23 -0
  79. package/src/components/InvalidAPIKey/APIKeyForm/Bedrock.tsx +1 -1
  80. package/src/components/InvalidAPIKey/APIKeyForm/ComfyUIForm.tsx +1 -1
  81. package/src/components/InvalidAPIKey/APIKeyForm/ProviderApiKeyForm.tsx +1 -1
  82. package/src/components/InvalidAPIKey/APIKeyForm/__tests__/ComfyUIForm.test.tsx +1 -1
  83. package/src/components/InvalidAPIKey/index.tsx +1 -1
  84. package/src/features/{Conversation → ChatList}/MarkdownElements/remarkPlugins/getNodeContent.test.ts +1 -2
  85. package/src/features/{Conversation → ChatList}/Messages/Assistant/Actions/index.tsx +2 -2
  86. package/src/features/{Conversation → ChatList}/Messages/Assistant/Extra/index.test.tsx +3 -3
  87. package/src/features/{Conversation → ChatList}/Messages/Assistant/Extra/index.tsx +6 -5
  88. package/src/features/{Conversation → ChatList}/Messages/Assistant/MessageContent.tsx +1 -1
  89. package/src/features/{Conversation → ChatList}/Messages/Group/Actions/WithContentId.tsx +2 -2
  90. package/src/features/{Conversation → ChatList}/Messages/Group/ContentBlock.tsx +2 -2
  91. package/src/features/{Conversation → ChatList}/Messages/Group/Error/index.tsx +2 -1
  92. package/src/features/{Conversation → ChatList}/Messages/Group/Group.tsx +1 -1
  93. package/src/features/{Conversation → ChatList}/Messages/Group/GroupItem.tsx +3 -2
  94. package/src/features/{Conversation → ChatList}/Messages/Group/Tool/Render/Intervention/ApprovalActions.tsx +1 -1
  95. package/src/features/{Conversation → ChatList}/Messages/Group/Tool/Render/index.tsx +1 -2
  96. package/src/features/{Conversation → ChatList}/Messages/Group/index.tsx +1 -1
  97. package/src/features/{Conversation → ChatList}/Messages/User/Extra.tsx +3 -3
  98. package/src/features/{Conversation → ChatList}/Messages/User/index.tsx +1 -1
  99. package/src/features/{Conversation → ChatList}/Messages/index.tsx +1 -1
  100. package/src/features/{Conversation → ChatList}/components/ShareMessageModal/ShareImage/Preview.tsx +1 -1
  101. package/src/features/{Conversation → ChatList}/components/SkeletonList.tsx +1 -1
  102. package/src/features/{Conversation → ChatList}/components/VirtualizedList/index.tsx +1 -1
  103. package/src/features/KnowledgeManager/DocumentExplorer/NoteEditorModal.tsx +0 -20
  104. package/src/features/KnowledgeManager/DocumentExplorer/index.tsx +3 -3
  105. package/src/features/KnowledgeManager/FileExplorer/MasonryFileItem/index.tsx +0 -20
  106. package/src/features/KnowledgeManager/Header/AddButton.tsx +0 -1
  107. package/src/features/KnowledgeManager/Header/NewNoteButton.tsx +1 -1
  108. package/src/features/KnowledgeManager/Header/TogglePanelButton.tsx +2 -2
  109. package/src/features/KnowledgeManager/Home/UploadEntries.tsx +2 -2
  110. package/src/features/KnowledgeManager/Home/index.tsx +4 -4
  111. package/src/features/OllamaSetupGuide/index.tsx +1 -1
  112. package/src/features/PluginsUI/Render/MCPType/index.tsx +1 -1
  113. package/src/features/Portal/GroupThread/Body/ThreadChatItem.tsx +1 -1
  114. package/src/features/Portal/GroupThread/Body/ThreadChatList.tsx +1 -1
  115. package/src/features/Portal/Thread/Chat/ChatInput/index.tsx +1 -1
  116. package/src/features/Portal/Thread/Chat/ChatItem.tsx +1 -1
  117. package/src/features/Portal/Thread/Chat/ChatList.tsx +1 -1
  118. package/src/features/Portal/Thread/Chat/index.tsx +1 -1
  119. package/src/features/ShareModal/ShareImage/ChatList/index.tsx +1 -1
  120. package/src/features/User/UserPanel/useMenu.tsx +7 -3
  121. package/src/locales/default/file.ts +11 -13
  122. package/src/services/debug.ts +4 -4
  123. package/src/services/electron/remoteServer.ts +5 -5
  124. package/src/services/electron/settings.ts +6 -6
  125. package/src/services/mcp.ts +18 -18
  126. package/src/services/models.ts +20 -20
  127. package/src/store/chat/agents/__tests__/createAgentExecutors/helpers/testExecutor.ts +1 -4
  128. /package/src/features/{Conversation → ChatList}/Error/AccessCodeForm.tsx +0 -0
  129. /package/src/features/{Conversation → ChatList}/Error/ChatInvalidApiKey.tsx +0 -0
  130. /package/src/features/{Conversation → ChatList}/Error/ClerkLogin/index.tsx +0 -0
  131. /package/src/features/{Conversation → ChatList}/Error/ErrorJsonViewer.tsx +0 -0
  132. /package/src/features/{Conversation → ChatList}/Error/OAuthForm.tsx +0 -0
  133. /package/src/features/{Conversation → ChatList}/Error/OllamaBizError/InvalidOllamaModel.tsx +0 -0
  134. /package/src/features/{Conversation → ChatList}/Error/OllamaBizError/index.tsx +0 -0
  135. /package/src/features/{Conversation → ChatList}/Error/index.tsx +0 -0
  136. /package/src/features/{Conversation → ChatList}/Error/style.tsx +0 -0
  137. /package/src/features/{Conversation → ChatList}/MarkdownElements/LobeArtifact/Render/Icon.tsx +0 -0
  138. /package/src/features/{Conversation → ChatList}/MarkdownElements/LobeArtifact/Render/index.tsx +0 -0
  139. /package/src/features/{Conversation → ChatList}/MarkdownElements/LobeArtifact/index.ts +0 -0
  140. /package/src/features/{Conversation → ChatList}/MarkdownElements/LobeArtifact/rehypePlugin.test.ts +0 -0
  141. /package/src/features/{Conversation → ChatList}/MarkdownElements/LobeArtifact/rehypePlugin.ts +0 -0
  142. /package/src/features/{Conversation → ChatList}/MarkdownElements/LobeThinking/Render.tsx +0 -0
  143. /package/src/features/{Conversation → ChatList}/MarkdownElements/LobeThinking/index.ts +0 -0
  144. /package/src/features/{Conversation → ChatList}/MarkdownElements/LocalFile/Render/index.tsx +0 -0
  145. /package/src/features/{Conversation → ChatList}/MarkdownElements/LocalFile/index.ts +0 -0
  146. /package/src/features/{Conversation → ChatList}/MarkdownElements/Mention/Render.tsx +0 -0
  147. /package/src/features/{Conversation → ChatList}/MarkdownElements/Mention/index.ts +0 -0
  148. /package/src/features/{Conversation → ChatList}/MarkdownElements/Thinking/Render.tsx +0 -0
  149. /package/src/features/{Conversation → ChatList}/MarkdownElements/Thinking/index.ts +0 -0
  150. /package/src/features/{Conversation → ChatList}/MarkdownElements/index.ts +0 -0
  151. /package/src/features/{Conversation → ChatList}/MarkdownElements/remarkPlugins/__snapshots__/createRemarkSelfClosingTagPlugin.test.ts.snap +0 -0
  152. /package/src/features/{Conversation → ChatList}/MarkdownElements/remarkPlugins/createRemarkCustomTagPlugin.ts +0 -0
  153. /package/src/features/{Conversation → ChatList}/MarkdownElements/remarkPlugins/createRemarkCustomTagWithAttributesPlugin.ts +0 -0
  154. /package/src/features/{Conversation → ChatList}/MarkdownElements/remarkPlugins/createRemarkSelfClosingTagPlugin.test.ts +0 -0
  155. /package/src/features/{Conversation → ChatList}/MarkdownElements/remarkPlugins/createRemarkSelfClosingTagPlugin.ts +0 -0
  156. /package/src/features/{Conversation → ChatList}/MarkdownElements/remarkPlugins/getNodeContent.ts +0 -0
  157. /package/src/features/{Conversation → ChatList}/MarkdownElements/type.ts +0 -0
  158. /package/src/features/{Conversation → ChatList}/MarkdownElements/utils.ts +0 -0
  159. /package/src/features/{Conversation → ChatList}/Messages/Assistant/Actions/Error.tsx +0 -0
  160. /package/src/features/{Conversation → ChatList}/Messages/Assistant/CollapsedMessage.tsx +0 -0
  161. /package/src/features/{Conversation → ChatList}/Messages/Assistant/FileChunks/Item/index.tsx +0 -0
  162. /package/src/features/{Conversation → ChatList}/Messages/Assistant/FileChunks/Item/style.ts +0 -0
  163. /package/src/features/{Conversation → ChatList}/Messages/Assistant/FileChunks/index.tsx +0 -0
  164. /package/src/features/{Conversation → ChatList}/Messages/Assistant/IntentUnderstanding.tsx +0 -0
  165. /package/src/features/{Conversation → ChatList}/Messages/Assistant/Reasoning/index.tsx +0 -0
  166. /package/src/features/{Conversation → ChatList}/Messages/Assistant/SearchGrounding.tsx +0 -0
  167. /package/src/features/{Conversation → ChatList}/Messages/Assistant/index.tsx +0 -0
  168. /package/src/features/{Conversation → ChatList}/Messages/Default.tsx +0 -0
  169. /package/src/features/{Conversation → ChatList}/Messages/Group/Actions/WithoutContentId.tsx +0 -0
  170. /package/src/features/{Conversation → ChatList}/Messages/Group/Actions/index.tsx +0 -0
  171. /package/src/features/{Conversation → ChatList}/Messages/Group/CollapsedMessage.tsx +0 -0
  172. /package/src/features/{Conversation → ChatList}/Messages/Group/EditState.tsx +0 -0
  173. /package/src/features/{Conversation → ChatList}/Messages/Group/GroupContext.ts +0 -0
  174. /package/src/features/{Conversation → ChatList}/Messages/Group/MessageContent.tsx +0 -0
  175. /package/src/features/{Conversation → ChatList}/Messages/Group/Tool/Inspector/BuiltinPluginTitle.tsx +0 -0
  176. /package/src/features/{Conversation → ChatList}/Messages/Group/Tool/Inspector/Debug.tsx +0 -0
  177. /package/src/features/{Conversation → ChatList}/Messages/Group/Tool/Inspector/PluginResult.tsx +0 -0
  178. /package/src/features/{Conversation → ChatList}/Messages/Group/Tool/Inspector/PluginState.tsx +0 -0
  179. /package/src/features/{Conversation → ChatList}/Messages/Group/Tool/Inspector/Settings.tsx +0 -0
  180. /package/src/features/{Conversation → ChatList}/Messages/Group/Tool/Inspector/StatusIndicator.tsx +0 -0
  181. /package/src/features/{Conversation → ChatList}/Messages/Group/Tool/Inspector/ToolTitle.tsx +0 -0
  182. /package/src/features/{Conversation → ChatList}/Messages/Group/Tool/Inspector/index.tsx +0 -0
  183. /package/src/features/{Conversation → ChatList}/Messages/Group/Tool/Render/AbortResponse.tsx +0 -0
  184. /package/src/features/{Conversation → ChatList}/Messages/Group/Tool/Render/Arguments/ObjectEntity.tsx +0 -0
  185. /package/src/features/{Conversation → ChatList}/Messages/Group/Tool/Render/Arguments/ValueCell.tsx +0 -0
  186. /package/src/features/{Conversation → ChatList}/Messages/Group/Tool/Render/Arguments/index.tsx +0 -0
  187. /package/src/features/{Conversation → ChatList}/Messages/Group/Tool/Render/CustomRender.tsx +0 -0
  188. /package/src/features/{Conversation → ChatList}/Messages/Group/Tool/Render/ErrorResponse.tsx +0 -0
  189. /package/src/features/{Conversation → ChatList}/Messages/Group/Tool/Render/Intervention/Fallback.tsx +0 -0
  190. /package/src/features/{Conversation → ChatList}/Messages/Group/Tool/Render/Intervention/KeyValueEditor.tsx +0 -0
  191. /package/src/features/{Conversation → ChatList}/Messages/Group/Tool/Render/Intervention/ModeSelector.tsx +0 -0
  192. /package/src/features/{Conversation → ChatList}/Messages/Group/Tool/Render/Intervention/index.tsx +0 -0
  193. /package/src/features/{Conversation → ChatList}/Messages/Group/Tool/Render/LoadingPlaceholder/index.tsx +0 -0
  194. /package/src/features/{Conversation → ChatList}/Messages/Group/Tool/Render/PluginSettings.tsx +0 -0
  195. /package/src/features/{Conversation → ChatList}/Messages/Group/Tool/Render/RejectedResponse.tsx +0 -0
  196. /package/src/features/{Conversation → ChatList}/Messages/Group/Tool/index.tsx +0 -0
  197. /package/src/features/{Conversation → ChatList}/Messages/Group/Tools.tsx +0 -0
  198. /package/src/features/{Conversation → ChatList}/Messages/Supervisor/TodoList.tsx +0 -0
  199. /package/src/features/{Conversation → ChatList}/Messages/Supervisor/index.tsx +0 -0
  200. /package/src/features/{Conversation → ChatList}/Messages/Tool/Inspector/BuiltinPluginTitle.tsx +0 -0
  201. /package/src/features/{Conversation → ChatList}/Messages/Tool/Inspector/Debug.tsx +0 -0
  202. /package/src/features/{Conversation → ChatList}/Messages/Tool/Inspector/PluginResult.tsx +0 -0
  203. /package/src/features/{Conversation → ChatList}/Messages/Tool/Inspector/PluginState.tsx +0 -0
  204. /package/src/features/{Conversation → ChatList}/Messages/Tool/Inspector/Settings.tsx +0 -0
  205. /package/src/features/{Conversation → ChatList}/Messages/Tool/Inspector/ToolTitle.tsx +0 -0
  206. /package/src/features/{Conversation → ChatList}/Messages/Tool/Inspector/index.tsx +0 -0
  207. /package/src/features/{Conversation → ChatList}/Messages/Tool/Render/Arguments/ObjectEntity.tsx +0 -0
  208. /package/src/features/{Conversation → ChatList}/Messages/Tool/Render/Arguments/ValueCell.tsx +0 -0
  209. /package/src/features/{Conversation → ChatList}/Messages/Tool/Render/Arguments/index.tsx +0 -0
  210. /package/src/features/{Conversation → ChatList}/Messages/Tool/Render/CustomRender.tsx +0 -0
  211. /package/src/features/{Conversation → ChatList}/Messages/Tool/Render/ErrorResponse.tsx +0 -0
  212. /package/src/features/{Conversation → ChatList}/Messages/Tool/Render/KeyValueEditor.tsx +0 -0
  213. /package/src/features/{Conversation → ChatList}/Messages/Tool/Render/PluginSettings.tsx +0 -0
  214. /package/src/features/{Conversation → ChatList}/Messages/Tool/Render/index.tsx +0 -0
  215. /package/src/features/{Conversation → ChatList}/Messages/Tool/ToolItem.tsx +0 -0
  216. /package/src/features/{Conversation → ChatList}/Messages/Tool/index.tsx +0 -0
  217. /package/src/features/{Conversation → ChatList}/Messages/User/Actions/ActionsBar.tsx +0 -0
  218. /package/src/features/{Conversation → ChatList}/Messages/User/Actions/MessageBranch.tsx +0 -0
  219. /package/src/features/{Conversation → ChatList}/Messages/User/Actions/index.tsx +0 -0
  220. /package/src/features/{Conversation → ChatList}/Messages/User/BelowMessage.tsx +0 -0
  221. /package/src/features/{Conversation → ChatList}/Messages/User/FileListViewer/Item.tsx +0 -0
  222. /package/src/features/{Conversation → ChatList}/Messages/User/FileListViewer/index.tsx +0 -0
  223. /package/src/features/{Conversation → ChatList}/Messages/User/ImageFileListViewer.tsx +0 -0
  224. /package/src/features/{Conversation → ChatList}/Messages/User/MarkdownRender/ContentPreview.tsx +0 -0
  225. /package/src/features/{Conversation → ChatList}/Messages/User/MarkdownRender/index.tsx +0 -0
  226. /package/src/features/{Conversation → ChatList}/Messages/User/MessageContent.tsx +0 -0
  227. /package/src/features/{Conversation → ChatList}/Messages/User/VideoFileListViewer.tsx +0 -0
  228. /package/src/features/{Conversation → ChatList}/components/AutoScroll.tsx +0 -0
  229. /package/src/features/{Conversation → ChatList}/components/BackBottom/index.tsx +0 -0
  230. /package/src/features/{Conversation → ChatList}/components/BackBottom/style.ts +0 -0
  231. /package/src/features/{Conversation → ChatList}/components/ChatItem/ShareMessageModal/SharePdf/PdfPreview.tsx +0 -0
  232. /package/src/features/{Conversation → ChatList}/components/ChatItem/ShareMessageModal/SharePdf/index.tsx +0 -0
  233. /package/src/features/{Conversation → ChatList}/components/ChatItem/ShareMessageModal/SharePdf/style.ts +0 -0
  234. /package/src/features/{Conversation → ChatList}/components/ChatItem/ShareMessageModal/SharePdf/template.ts +0 -0
  235. /package/src/features/{Conversation → ChatList}/components/ChatItem/ShareMessageModal/SharePdf/usePdfGeneration.ts +0 -0
  236. /package/src/features/{Conversation → ChatList}/components/Extras/ExtraContainer.tsx +0 -0
  237. /package/src/features/{Conversation → ChatList}/components/Extras/TTS/FilePlayer.tsx +0 -0
  238. /package/src/features/{Conversation → ChatList}/components/Extras/TTS/InitPlayer.tsx +0 -0
  239. /package/src/features/{Conversation → ChatList}/components/Extras/TTS/Player.tsx +0 -0
  240. /package/src/features/{Conversation → ChatList}/components/Extras/TTS/index.tsx +0 -0
  241. /package/src/features/{Conversation → ChatList}/components/Extras/Translate.tsx +0 -0
  242. /package/src/features/{Conversation → ChatList}/components/Extras/Usage/UsageDetail/AnimatedNumber.tsx +0 -0
  243. /package/src/features/{Conversation → ChatList}/components/Extras/Usage/UsageDetail/ModelCard.tsx +0 -0
  244. /package/src/features/{Conversation → ChatList}/components/Extras/Usage/UsageDetail/TokenProgress.tsx +0 -0
  245. /package/src/features/{Conversation → ChatList}/components/Extras/Usage/UsageDetail/index.tsx +0 -0
  246. /package/src/features/{Conversation → ChatList}/components/Extras/Usage/UsageDetail/pricing.ts +0 -0
  247. /package/src/features/{Conversation → ChatList}/components/Extras/Usage/UsageDetail/tokens.test.ts +0 -0
  248. /package/src/features/{Conversation → ChatList}/components/Extras/Usage/UsageDetail/tokens.ts +0 -0
  249. /package/src/features/{Conversation → ChatList}/components/Extras/Usage/index.tsx +0 -0
  250. /package/src/features/{Conversation → ChatList}/components/History/HistoryDivider.tsx +0 -0
  251. /package/src/features/{Conversation → ChatList}/components/History/index.tsx +0 -0
  252. /package/src/features/{Conversation → ChatList}/components/OTPInput.tsx +0 -0
  253. /package/src/features/{Conversation → ChatList}/components/ShareMessageModal/ShareImage/index.tsx +0 -0
  254. /package/src/features/{Conversation → ChatList}/components/ShareMessageModal/ShareImage/style.ts +0 -0
  255. /package/src/features/{Conversation → ChatList}/components/ShareMessageModal/ShareImage/type.ts +0 -0
  256. /package/src/features/{Conversation → ChatList}/components/ShareMessageModal/ShareText/Preview.tsx +0 -0
  257. /package/src/features/{Conversation → ChatList}/components/ShareMessageModal/ShareText/index.tsx +0 -0
  258. /package/src/features/{Conversation → ChatList}/components/ShareMessageModal/ShareText/template.test.ts +0 -0
  259. /package/src/features/{Conversation → ChatList}/components/ShareMessageModal/ShareText/template.ts +0 -0
  260. /package/src/features/{Conversation → ChatList}/components/ShareMessageModal/ShareText/type.ts +0 -0
  261. /package/src/features/{Conversation → ChatList}/components/ShareMessageModal/index.tsx +0 -0
  262. /package/src/features/{Conversation → ChatList}/components/ShareMessageModal/style.ts +0 -0
  263. /package/src/features/{Conversation → ChatList}/components/ThreadDivider/index.tsx +0 -0
  264. /package/src/features/{Conversation → ChatList}/components/VirtualizedList/VirtuosoContext.ts +0 -0
  265. /package/src/features/{Conversation → ChatList}/components/WideScreenContainer/index.tsx +0 -0
  266. /package/src/features/{Conversation → ChatList}/context/InPortalThreadContext.ts +0 -0
  267. /package/src/features/{Conversation → ChatList}/hooks/useChatListActionsBar.tsx +0 -0
  268. /package/src/features/{Conversation → ChatList}/hooks/useDoubleClickEdit.ts +0 -0
  269. /package/src/features/{Conversation → ChatList}/index.ts +0 -0
  270. /package/src/features/{Conversation → ChatList}/types/index.ts +0 -0
  271. /package/src/features/{Conversation → ChatList}/utils/markdown.test.ts +0 -0
  272. /package/src/features/{Conversation → ChatList}/utils/markdown.ts +0 -0
@@ -0,0 +1,14 @@
1
+ {
2
+ "files": ["drizzle.config.ts"],
3
+ "patterns": [
4
+ "scripts/**",
5
+ "**/*.test.ts",
6
+ "**/*.test.tsx",
7
+ "**/*.spec.ts",
8
+ "**/*.spec.tsx",
9
+ "**/examples/**",
10
+ "e2e/**",
11
+ ".github/scripts/**",
12
+ "apps/desktop/**"
13
+ ]
14
+ }
@@ -0,0 +1,117 @@
1
+ name: Check Console Log (Warning)
2
+
3
+ on:
4
+ pull_request:
5
+ branches:
6
+ - main
7
+ - next
8
+
9
+ permissions:
10
+ contents: read
11
+ pull-requests: write
12
+
13
+ jobs:
14
+ check-console-log:
15
+ name: Check for console.log statements (non-blocking)
16
+ runs-on: ubuntu-latest
17
+
18
+ steps:
19
+ - uses: actions/checkout@v5
20
+
21
+ - name: Install bun
22
+ uses: oven-sh/setup-bun@v2
23
+
24
+ - name: Run console.log check
25
+ id: check
26
+ run: |
27
+ OUTPUT=$(bunx tsx scripts/checkConsoleLog.mts 2>&1)
28
+ echo "$OUTPUT"
29
+
30
+ # Save output to file for later use
31
+ echo "$OUTPUT" > /tmp/console-log-output.txt
32
+
33
+ # Check if violations were found
34
+ if echo "$OUTPUT" | grep -q "Total violations:"; then
35
+ echo "has_violations=true" >> $GITHUB_OUTPUT
36
+ TOTAL=$(echo "$OUTPUT" | grep -oP "Total violations: \K\d+")
37
+ echo "total=$TOTAL" >> $GITHUB_OUTPUT
38
+ else
39
+ echo "has_violations=false" >> $GITHUB_OUTPUT
40
+ fi
41
+
42
+ - name: Comment on PR
43
+ if: steps.check.outputs.has_violations == 'true'
44
+ uses: actions/github-script@v7
45
+ env:
46
+ VIOLATION_COUNT: ${{ steps.check.outputs.total }}
47
+ with:
48
+ script: |
49
+ const fs = require('fs');
50
+ const output = fs.readFileSync('/tmp/console-log-output.txt', 'utf8');
51
+ const total = process.env.VIOLATION_COUNT || '0';
52
+
53
+ // Parse violations from output (format: " file:line" followed by " content")
54
+ const lines = output.split('\n');
55
+ const violations = [];
56
+ for (let i = 0; i < lines.length; i++) {
57
+ const line = lines[i];
58
+ // Match lines like " packages/database/src/client/db.ts:258"
59
+ const fileMatch = line.match(/^\s{2}(\S+:\d+)\s*$/);
60
+ if (fileMatch) {
61
+ const file = fileMatch[1];
62
+ const content = lines[i + 1]?.trim() || '';
63
+ violations.push({ file, content });
64
+ i++;
65
+ }
66
+ }
67
+
68
+ // Build comment body
69
+ const maxDisplay = 30;
70
+ let body = `## ⚠️ Console.log Check Warning\n\n`;
71
+ body += `Found **${total}** \`console.log\` statement(s) in this PR.\n\n`;
72
+
73
+ if (violations.length > 0) {
74
+ body += `<details>\n<summary>📋 Click to see violations (${Math.min(violations.length, maxDisplay)} of ${total} shown)</summary>\n\n`;
75
+ body += `| File | Code |\n|------|------|\n`;
76
+ violations.slice(0, maxDisplay).forEach(v => {
77
+ const escapedContent = v.content
78
+ .substring(0, 60)
79
+ .replace(/\|/g, '\\|')
80
+ .replace(/`/g, "'");
81
+ body += `| \`${v.file}\` | \`${escapedContent}${v.content.length > 60 ? '...' : ''}\` |\n`;
82
+ });
83
+ if (parseInt(total) > maxDisplay) {
84
+ body += `\n*...and ${parseInt(total) - maxDisplay} more violations*\n`;
85
+ }
86
+ body += `\n</details>\n\n`;
87
+ }
88
+
89
+ body += `> 💡 **Tip:** Remove \`console.log\` or add files to \`.console-log-whitelist.json\`\n`;
90
+ body += `> ✅ This check is **non-blocking** and won't prevent merging.`;
91
+
92
+ // Find existing comment to update instead of creating duplicates
93
+ const { data: comments } = await github.rest.issues.listComments({
94
+ owner: context.repo.owner,
95
+ repo: context.repo.repo,
96
+ issue_number: context.issue.number,
97
+ });
98
+
99
+ const botComment = comments.find(c =>
100
+ c.user.type === 'Bot' && c.body.includes('Console.log Check Warning')
101
+ );
102
+
103
+ if (botComment) {
104
+ await github.rest.issues.updateComment({
105
+ owner: context.repo.owner,
106
+ repo: context.repo.repo,
107
+ comment_id: botComment.id,
108
+ body,
109
+ });
110
+ } else {
111
+ await github.rest.issues.createComment({
112
+ owner: context.repo.owner,
113
+ repo: context.repo.repo,
114
+ issue_number: context.issue.number,
115
+ body,
116
+ });
117
+ }
@@ -32,7 +32,7 @@ jobs:
32
32
  - name: Setup Node.js
33
33
  uses: actions/setup-node@v6
34
34
  with:
35
- node-version: 24
35
+ node-version: 24.11.1
36
36
  package-manager-cache: false
37
37
 
38
38
  - name: Install bun
@@ -66,7 +66,7 @@ jobs:
66
66
  - name: Setup Node.js
67
67
  uses: actions/setup-node@v6
68
68
  with:
69
- node-version: 24
69
+ node-version: 24.11.1
70
70
  package-manager-cache: false
71
71
 
72
72
  # 主要逻辑:确定构建版本号
@@ -111,7 +111,7 @@ jobs:
111
111
  - name: Setup Node.js
112
112
  uses: actions/setup-node@v6
113
113
  with:
114
- node-version: 24
114
+ node-version: 24.11.1
115
115
  package-manager-cache: false
116
116
 
117
117
  # node-linker=hoisted 模式将可以确保 asar 压缩可用
@@ -232,7 +232,7 @@ jobs:
232
232
  - name: Setup Node.js
233
233
  uses: actions/setup-node@v6
234
234
  with:
235
- node-version: 24
235
+ node-version: 24.11.1
236
236
  package-manager-cache: false
237
237
 
238
238
  - name: Install bun
@@ -26,7 +26,7 @@ jobs:
26
26
  - name: Setup Node.js
27
27
  uses: actions/setup-node@v6
28
28
  with:
29
- node-version: 24
29
+ node-version: 24.11.1
30
30
  package-manager-cache: false
31
31
 
32
32
  - name: Install bun
@@ -55,7 +55,7 @@ jobs:
55
55
  - name: Setup Node.js
56
56
  uses: actions/setup-node@v6
57
57
  with:
58
- node-version: 24
58
+ node-version: 24.11.1
59
59
  package-manager-cache: false
60
60
 
61
61
  # 主要逻辑:确定构建版本号
@@ -96,7 +96,7 @@ jobs:
96
96
  - name: Setup Node.js
97
97
  uses: actions/setup-node@v6
98
98
  with:
99
- node-version: 24
99
+ node-version: 24.11.1
100
100
  package-manager-cache: false
101
101
 
102
102
  # node-linker=hoisted 模式将可以确保 asar 压缩可用
@@ -210,7 +210,7 @@ jobs:
210
210
  - name: Setup Node.js
211
211
  uses: actions/setup-node@v6
212
212
  with:
213
- node-version: 24
213
+ node-version: 24.11.1
214
214
  package-manager-cache: false
215
215
 
216
216
  - name: Install bun
@@ -35,7 +35,7 @@ jobs:
35
35
  - name: Setup Node.js
36
36
  uses: actions/setup-node@v6
37
37
  with:
38
- node-version: 24
38
+ node-version: 24.11.1
39
39
  package-manager-cache: false
40
40
 
41
41
  - name: Install bun
@@ -31,7 +31,7 @@ jobs:
31
31
  - name: Setup Node.js
32
32
  uses: actions/setup-node@v6
33
33
  with:
34
- node-version: 24
34
+ node-version: 24.11.1
35
35
  package-manager-cache: false
36
36
 
37
37
  - name: Install bun
@@ -66,7 +66,7 @@ jobs:
66
66
  - name: Setup Node.js
67
67
  uses: actions/setup-node@v6
68
68
  with:
69
- node-version: 24
69
+ node-version: 24.11.1
70
70
  package-manager-cache: false
71
71
 
72
72
  - name: Install bun
@@ -99,7 +99,7 @@ jobs:
99
99
  - name: Setup Node.js
100
100
  uses: actions/setup-node@v6
101
101
  with:
102
- node-version: 24
102
+ node-version: 24.11.1
103
103
  package-manager-cache: false
104
104
 
105
105
  - name: Install bun
@@ -131,7 +131,7 @@ jobs:
131
131
  - name: Setup Node.js
132
132
  uses: actions/setup-node@v6
133
133
  with:
134
- node-version: 24
134
+ node-version: 24.11.1
135
135
  package-manager-cache: false
136
136
 
137
137
  - name: Setup pnpm
@@ -179,7 +179,7 @@ jobs:
179
179
  - name: Setup Node.js
180
180
  uses: actions/setup-node@v6
181
181
  with:
182
- node-version: 24
182
+ node-version: 24.11.1
183
183
  package-manager-cache: false
184
184
 
185
185
  - name: Install pnpm
package/CHANGELOG.md CHANGED
@@ -2,6 +2,72 @@
2
2
 
3
3
  # Changelog
4
4
 
5
+ ## [Version 2.0.0-next.98](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.97...v2.0.0-next.98)
6
+
7
+ <sup>Released on **2025-11-21**</sup>
8
+
9
+ #### 🐛 Bug Fixes
10
+
11
+ - **misc**: Fixed changelog pages and open again.
12
+
13
+ #### 💄 Styles
14
+
15
+ - **misc**: Fix some translations.
16
+
17
+ <br/>
18
+
19
+ <details>
20
+ <summary><kbd>Improvements and Fixes</kbd></summary>
21
+
22
+ #### What's fixed
23
+
24
+ - **misc**: Fixed changelog pages and open again, closes [#10285](https://github.com/lobehub/lobe-chat/issues/10285) ([871d141](https://github.com/lobehub/lobe-chat/commit/871d141))
25
+
26
+ #### Styles
27
+
28
+ - **misc**: Fix some translations, closes [#10343](https://github.com/lobehub/lobe-chat/issues/10343) ([ed193e0](https://github.com/lobehub/lobe-chat/commit/ed193e0))
29
+
30
+ </details>
31
+
32
+ <div align="right">
33
+
34
+ [![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)
35
+
36
+ </div>
37
+
38
+ ## [Version 2.0.0-next.97](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.96...v2.0.0-next.97)
39
+
40
+ <sup>Released on **2025-11-21**</sup>
41
+
42
+ #### ♻ Code Refactoring
43
+
44
+ - **misc**: Refactor Conversation to ChatList.
45
+
46
+ #### 💄 Styles
47
+
48
+ - **misc**: Update i18n.
49
+
50
+ <br/>
51
+
52
+ <details>
53
+ <summary><kbd>Improvements and Fixes</kbd></summary>
54
+
55
+ #### Code refactoring
56
+
57
+ - **misc**: Refactor Conversation to ChatList, closes [#10330](https://github.com/lobehub/lobe-chat/issues/10330) ([bca70e2](https://github.com/lobehub/lobe-chat/commit/bca70e2))
58
+
59
+ #### Styles
60
+
61
+ - **misc**: Update i18n, closes [#10338](https://github.com/lobehub/lobe-chat/issues/10338) ([9c8cf81](https://github.com/lobehub/lobe-chat/commit/9c8cf81))
62
+
63
+ </details>
64
+
65
+ <div align="right">
66
+
67
+ [![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)
68
+
69
+ </div>
70
+
5
71
  ## [Version 2.0.0-next.96](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.95...v2.0.0-next.96)
6
72
 
7
73
  <sup>Released on **2025-11-20**</sup>
@@ -4,9 +4,9 @@ import { setupRouteInterceptors } from './routeInterceptor';
4
4
  const setupPreload = () => {
5
5
  setupElectronApi();
6
6
 
7
- // 设置路由拦截逻辑
7
+ // Setup route interception logic
8
8
  window.addEventListener('DOMContentLoaded', () => {
9
- // 设置客户端路由拦截器
9
+ // Setup client-side route interceptor
10
10
  setupRouteInterceptors();
11
11
  });
12
12
  };
@@ -2,7 +2,7 @@ import { ClientDispatchEventKey, DispatchInvoke } from '@lobechat/electron-clien
2
2
  import { ipcRenderer } from 'electron';
3
3
 
4
4
  /**
5
- * client 端请求 electron main 端方法
5
+ * Client-side method to invoke electron main process
6
6
  */
7
7
  export const invoke: DispatchInvoke = async <T extends ClientDispatchEventKey>(
8
8
  event: T,
@@ -9,7 +9,7 @@ const interceptRoute = async (
9
9
  ) => {
10
10
  console.log(`[preload] Intercepted ${source} and prevented default behavior:`, path);
11
11
 
12
- // 使用electron-client-ipcdispatch方法
12
+ // Use electron-client-ipc's dispatch method
13
13
  try {
14
14
  await invoke('interceptRoute', { path, source, url });
15
15
  } catch (e) {
@@ -17,15 +17,15 @@ const interceptRoute = async (
17
17
  }
18
18
  };
19
19
  /**
20
- * 路由拦截器 - 负责捕获和拦截客户端路由导航
20
+ * Route interceptor - Responsible for capturing and intercepting client-side route navigation
21
21
  */
22
22
  export const setupRouteInterceptors = function () {
23
23
  console.log('[preload] Setting up route interceptors');
24
24
 
25
- // 存储被阻止的路径,避免pushState重复触发
25
+ // Store prevented paths to avoid pushState duplicate triggers
26
26
  const preventedPaths = new Set<string>();
27
27
 
28
- // 重写 window.open 方法来拦截 JavaScript 调用
28
+ // Override window.open method to intercept JavaScript calls
29
29
  const originalWindowOpen = window.open;
30
30
  window.open = function (url?: string | URL, target?: string, features?: string) {
31
31
  if (url) {
@@ -33,15 +33,15 @@ export const setupRouteInterceptors = function () {
33
33
  const urlString = typeof url === 'string' ? url : url.toString();
34
34
  const urlObj = new URL(urlString, window.location.href);
35
35
 
36
- // 检查是否为外部链接
36
+ // Check if it's an external link
37
37
  if (urlObj.origin !== window.location.origin) {
38
38
  console.log(`[preload] Intercepted window.open for external URL:`, urlString);
39
- // 调用主进程处理外部链接
39
+ // Call main process to handle external link
40
40
  invoke('openExternalLink', urlString);
41
- return null; // 返回 null 表示没有打开新窗口
41
+ return null; // Return null to indicate no window was opened
42
42
  }
43
43
  } catch (error) {
44
- // 处理无效 URL 或特殊协议
44
+ // Handle invalid URL or special protocol
45
45
  console.error(`[preload] Intercepted window.open for special protocol:`, url);
46
46
  console.error(error);
47
47
  invoke('openExternalLink', typeof url === 'string' ? url : url.toString());
@@ -49,11 +49,11 @@ export const setupRouteInterceptors = function () {
49
49
  }
50
50
  }
51
51
 
52
- // 对于内部链接,调用原始的 window.open
52
+ // For internal links, call original window.open
53
53
  return originalWindowOpen.call(window, url, target, features);
54
54
  };
55
55
 
56
- // 拦截所有a标签的点击事件 - 针对Next.jsLink组件
56
+ // Intercept all a tag click events - For Next.js Link component
57
57
  document.addEventListener(
58
58
  'click',
59
59
  async (e) => {
@@ -62,30 +62,30 @@ export const setupRouteInterceptors = function () {
62
62
  try {
63
63
  const url = new URL(link.href);
64
64
 
65
- // 检查是否为外部链接
65
+ // Check if it's an external link
66
66
  if (url.origin !== window.location.origin) {
67
67
  console.log(`[preload] Intercepted external link click:`, url.href);
68
- // 阻止默认的链接跳转行为
68
+ // Prevent default link navigation behavior
69
69
  e.preventDefault();
70
70
  e.stopPropagation();
71
- // 调用主进程处理外部链接
71
+ // Call main process to handle external link
72
72
  await invoke('openExternalLink', url.href);
73
- return false; // 明确阻止后续处理
73
+ return false; // Explicitly prevent subsequent processing
74
74
  }
75
75
 
76
- // 如果不是外部链接,则继续处理内部路由拦截逻辑
77
- // 使用共享配置检查是否需要拦截
76
+ // If not external link, continue with internal route interception logic
77
+ // Use shared config to check if interception is needed
78
78
  const matchedRoute = findMatchingRoute(url.pathname);
79
79
 
80
- // 如果是需要拦截的路径
80
+ // If it's a path that needs interception
81
81
  if (matchedRoute) {
82
82
  const currentPath = window.location.pathname;
83
83
  const isAlreadyInTargetPage = currentPath.startsWith(matchedRoute.pathPrefix);
84
84
 
85
- // 如果已经在目标页面下,则不拦截,让默认导航继续
85
+ // If already in target page, don't intercept, let default navigation continue
86
86
  if (isAlreadyInTargetPage) return;
87
87
 
88
- // 立即阻止默认行为,避免Next.js接管路由
88
+ // Immediately prevent default behavior to avoid Next.js taking over routing
89
89
  e.preventDefault();
90
90
  e.stopPropagation();
91
91
 
@@ -94,15 +94,15 @@ export const setupRouteInterceptors = function () {
94
94
  return false;
95
95
  }
96
96
  } catch (err) {
97
- // 处理可能的 URL 解析错误或其他问题
98
- // 例如 mailto:, tel: 等协议会导致 new URL() 抛出错误
97
+ // Handle possible URL parsing errors or other issues
98
+ // For example mailto:, tel: protocols will cause new URL() to throw error
99
99
  if (err instanceof TypeError && err.message.includes('Invalid URL')) {
100
100
  console.log(
101
101
  '[preload] Non-HTTP link clicked, allowing default browser behavior:',
102
102
  link.href,
103
103
  );
104
- // 对于非 HTTP/HTTPS 链接,允许浏览器默认处理
105
- // 不需要 e.preventDefault() invoke
104
+ // For non-HTTP/HTTPS links, allow browser default handling
105
+ // No need for e.preventDefault() or invoke
106
106
  } else {
107
107
  console.error('[preload] Link interception error:', err);
108
108
  }
@@ -112,28 +112,28 @@ export const setupRouteInterceptors = function () {
112
112
  true,
113
113
  );
114
114
 
115
- // 拦截 history API (用于捕获Next.jsuseRouter().push/replace)
115
+ // Intercept history API (for capturing Next.js useRouter().push/replace etc.)
116
116
  const originalPushState = history.pushState;
117
117
  const originalReplaceState = history.replaceState;
118
118
 
119
- // 重写pushState
119
+ // Override pushState
120
120
  history.pushState = function () {
121
121
  const url = arguments[2];
122
122
  if (typeof url === 'string') {
123
123
  try {
124
- // 只处理相对路径或当前域的URL
124
+ // Only handle relative paths or current domain URLs
125
125
  const parsedUrl = new URL(url, window.location.origin);
126
126
 
127
- // 使用共享配置检查是否需要拦截
127
+ // Use shared config to check if interception is needed
128
128
  const matchedRoute = findMatchingRoute(parsedUrl.pathname);
129
129
 
130
- // 检查是否需要拦截这个导航
130
+ // Check if this navigation needs interception
131
131
  if (matchedRoute) {
132
- // 检查当前页面是否已经在目标路径下,如果是则不拦截
132
+ // Check if current page is already under target path, if so don't intercept
133
133
  const currentPath = window.location.pathname;
134
134
  const isAlreadyInTargetPage = currentPath.startsWith(matchedRoute.pathPrefix);
135
135
 
136
- // 如果已经在目标页面下,则不拦截,让默认导航继续
136
+ // If already in target page, don't intercept, let default navigation continue
137
137
  if (isAlreadyInTargetPage) {
138
138
  console.log(
139
139
  `[preload] Skip pushState interception for ${parsedUrl.pathname} because already in target page ${matchedRoute.pathPrefix}`,
@@ -141,13 +141,13 @@ export const setupRouteInterceptors = function () {
141
141
  return Reflect.apply(originalPushState, this, arguments);
142
142
  }
143
143
 
144
- // 将此路径添加到已阻止集合中
144
+ // Add this path to prevented set
145
145
  preventedPaths.add(parsedUrl.pathname);
146
146
 
147
147
  interceptRoute(parsedUrl.pathname, 'push-state', parsedUrl.href);
148
148
 
149
- // 不执行原始的pushState操作,阻止导航发生
150
- // 但返回undefined以避免错误
149
+ // Don't execute original pushState operation, prevent navigation
150
+ // But return undefined to avoid errors
151
151
  return;
152
152
  }
153
153
  } catch (err) {
@@ -157,23 +157,23 @@ export const setupRouteInterceptors = function () {
157
157
  return Reflect.apply(originalPushState, this, arguments);
158
158
  };
159
159
 
160
- // 重写replaceState
160
+ // Override replaceState
161
161
  history.replaceState = function () {
162
162
  const url = arguments[2];
163
163
  if (typeof url === 'string') {
164
164
  try {
165
165
  const parsedUrl = new URL(url, window.location.origin);
166
166
 
167
- // 使用共享配置检查是否需要拦截
167
+ // Use shared config to check if interception is needed
168
168
  const matchedRoute = findMatchingRoute(parsedUrl.pathname);
169
169
 
170
- // 检查是否需要拦截这个导航
170
+ // Check if this navigation needs interception
171
171
  if (matchedRoute) {
172
- // 检查当前页面是否已经在目标路径下,如果是则不拦截
172
+ // Check if current page is already under target path, if so don't intercept
173
173
  const currentPath = window.location.pathname;
174
174
  const isAlreadyInTargetPage = currentPath.startsWith(matchedRoute.pathPrefix);
175
175
 
176
- // 如果已经在目标页面下,则不拦截,让默认导航继续
176
+ // If already in target page, don't intercept, let default navigation continue
177
177
  if (isAlreadyInTargetPage) {
178
178
  console.log(
179
179
  `[preload] Skip replaceState interception for ${parsedUrl.pathname} because already in target page ${matchedRoute.pathPrefix}`,
@@ -181,12 +181,12 @@ export const setupRouteInterceptors = function () {
181
181
  return Reflect.apply(originalReplaceState, this, arguments);
182
182
  }
183
183
 
184
- // 添加到已阻止集合
184
+ // Add to prevented set
185
185
  preventedPaths.add(parsedUrl.pathname);
186
186
 
187
187
  interceptRoute(parsedUrl.pathname, 'replace-state', parsedUrl.href);
188
188
 
189
- // 阻止导航
189
+ // Prevent navigation
190
190
  return;
191
191
  }
192
192
  } catch (err) {
@@ -196,7 +196,7 @@ export const setupRouteInterceptors = function () {
196
196
  return Reflect.apply(originalReplaceState, this, arguments);
197
197
  };
198
198
 
199
- // 监听并拦截路由错误 - 有时Next.js会在路由错误时尝试恢复导航
199
+ // Listen and intercept routing errors - Sometimes Next.js tries to recover navigation on routing errors
200
200
  window.addEventListener(
201
201
  'error',
202
202
  function (e) {
package/changelog/v1.json CHANGED
@@ -1,4 +1,25 @@
1
1
  [
2
+ {
3
+ "children": {
4
+ "fixes": [
5
+ "Fixed changelog pages and open again."
6
+ ],
7
+ "improvements": [
8
+ "Fix some translations."
9
+ ]
10
+ },
11
+ "date": "2025-11-21",
12
+ "version": "2.0.0-next.98"
13
+ },
14
+ {
15
+ "children": {
16
+ "improvements": [
17
+ "Update i18n."
18
+ ]
19
+ },
20
+ "date": "2025-11-21",
21
+ "version": "2.0.0-next.97"
22
+ },
2
23
  {
3
24
  "children": {
4
25
  "features": [
@@ -214,6 +214,7 @@ table files {
214
214
  metadata jsonb
215
215
  chunk_task_id uuid
216
216
  embedding_task_id uuid
217
+ slug text [unique]
217
218
  accessed_at "timestamp with time zone" [not null, default: `now()`]
218
219
  created_at "timestamp with time zone" [not null, default: `now()`]
219
220
  updated_at "timestamp with time zone" [not null, default: `now()`]
package/e2e/package.json CHANGED
@@ -17,7 +17,7 @@
17
17
  "playwright": "^1.56.1"
18
18
  },
19
19
  "devDependencies": {
20
- "@types/node": "^22.19.1",
20
+ "@types/node": "^24.10.1",
21
21
  "tsx": "^4.20.6",
22
22
  "typescript": "^5.9.3"
23
23
  }