@lobehub/lobehub 2.0.0-next.294 → 2.0.0-next.295

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 (170) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/apps/desktop/src/main/__mocks__/node-mac-permissions.ts +0 -1
  3. package/apps/desktop/src/main/__mocks__/setup.ts +0 -1
  4. package/apps/desktop/src/main/controllers/__tests__/SystemCtr.test.ts +1 -4
  5. package/apps/desktop/tsconfig.json +4 -10
  6. package/changelog/v1.json +9 -0
  7. package/e2e/scripts/setup.ts +45 -32
  8. package/package.json +1 -1
  9. package/packages/database/src/models/__tests__/knowledgeBase.test.ts +1 -1
  10. package/packages/database/src/repositories/knowledge/index.ts +1 -4
  11. package/packages/types/src/discover/assistants.ts +2 -2
  12. package/scripts/migrate-spa-navigation.ts +129 -0
  13. package/src/app/(backend)/api/workflows/memory-user-memory/pipelines/chat-topic/process-topics/route.ts +112 -109
  14. package/src/app/(backend)/api/workflows/memory-user-memory/pipelines/chat-topic/process-user-topics/route.ts +125 -113
  15. package/src/app/(backend)/api/workflows/memory-user-memory/pipelines/chat-topic/process-users/route.ts +74 -65
  16. package/src/app/[variants]/(auth)/auth-error/page.tsx +1 -1
  17. package/src/app/[variants]/(auth)/login/[[...login]]/page.tsx +1 -1
  18. package/src/app/[variants]/(auth)/next-auth/error/AuthErrorPage.tsx +1 -1
  19. package/src/app/[variants]/(auth)/next-auth/signin/AuthSignInBox.tsx +1 -1
  20. package/src/app/[variants]/(auth)/oauth/callback/error/page.tsx +1 -1
  21. package/src/app/[variants]/(auth)/oauth/callback/success/page.tsx +1 -1
  22. package/src/app/[variants]/(auth)/oauth/consent/[uid]/page.tsx +1 -1
  23. package/src/app/[variants]/(auth)/reset-password/layout.tsx +1 -1
  24. package/src/app/[variants]/(auth)/reset-password/page.tsx +2 -2
  25. package/src/app/[variants]/(auth)/signin/layout.tsx +1 -1
  26. package/src/app/[variants]/(auth)/signin/useSignIn.ts +1 -1
  27. package/src/app/[variants]/(auth)/signup/[[...signup]]/BetterAuthSignUpForm.tsx +2 -2
  28. package/src/app/[variants]/(auth)/signup/[[...signup]]/page.tsx +1 -1
  29. package/src/app/[variants]/(auth)/signup/[[...signup]]/useSignUp.tsx +1 -1
  30. package/src/app/[variants]/(auth)/verify-email/layout.tsx +1 -1
  31. package/src/app/[variants]/(auth)/verify-email/page.tsx +2 -2
  32. package/src/app/[variants]/(main)/_layout/index.tsx +1 -1
  33. package/src/app/[variants]/(main)/agent/_layout/Sidebar/Cron/CronTopicGroup.tsx +1 -1
  34. package/src/app/[variants]/(main)/agent/_layout/Sidebar/Header/AddTopicButon.tsx +1 -1
  35. package/src/app/[variants]/(main)/agent/_layout/Sidebar/Header/Nav.tsx +1 -1
  36. package/src/app/[variants]/(main)/agent/_layout/Sidebar/Topic/AllTopicsDrawer/index.tsx +1 -1
  37. package/src/app/[variants]/(main)/agent/_layout/Sidebar/Topic/hooks/useThreadNavigation.ts +1 -1
  38. package/src/app/[variants]/(main)/agent/_layout/Sidebar/Topic/hooks/useTopicNavigation.ts +1 -1
  39. package/src/app/[variants]/(main)/agent/features/TelemetryNotification.tsx +2 -3
  40. package/src/app/[variants]/(main)/community/(detail)/assistant/features/Details/Nav.tsx +9 -9
  41. package/src/app/[variants]/(main)/community/(detail)/assistant/features/Details/Versions/index.tsx +2 -3
  42. package/src/app/[variants]/(main)/community/(detail)/features/MakedownRender.tsx +1 -2
  43. package/src/app/[variants]/(main)/community/(detail)/features/ShareButton.tsx +2 -3
  44. package/src/app/[variants]/(main)/community/(detail)/features/Toc/Heading.tsx +2 -3
  45. package/src/app/[variants]/(main)/community/(detail)/mcp/features/Details/Versions/index.tsx +2 -2
  46. package/src/app/[variants]/(main)/community/(detail)/model/features/Details/Nav.tsx +12 -11
  47. package/src/app/[variants]/(main)/community/(detail)/model/features/Details/Parameter/ParameterItem.tsx +2 -3
  48. package/src/app/[variants]/(main)/community/(detail)/provider/features/Details/Nav.tsx +11 -10
  49. package/src/app/[variants]/(main)/community/(detail)/provider/features/Header.tsx +10 -9
  50. package/src/app/[variants]/(main)/community/(list)/(home)/index.tsx +1 -1
  51. package/src/app/[variants]/(main)/community/(list)/assistant/features/Category/useCategory.tsx +1 -1
  52. package/src/app/[variants]/(main)/community/(list)/features/SortButton/index.tsx +2 -3
  53. package/src/app/[variants]/(main)/community/_layout/Sidebar/Header/Nav.tsx +1 -1
  54. package/src/app/[variants]/(main)/community/features/CreateButton/Inner.tsx +1 -1
  55. package/src/app/[variants]/(main)/community/features/CreateButton/index.tsx +1 -1
  56. package/src/app/[variants]/(main)/community/features/Search.tsx +1 -2
  57. package/src/app/[variants]/(main)/community/features/Title.tsx +5 -5
  58. package/src/app/[variants]/(main)/group/_layout/Sidebar/Header/Nav.tsx +1 -1
  59. package/src/app/[variants]/(main)/group/_layout/Sidebar/Topic/AllTopicsDrawer/index.tsx +1 -1
  60. package/src/app/[variants]/(main)/group/_layout/Sidebar/Topic/hooks/useThreadNavigation.ts +1 -1
  61. package/src/app/[variants]/(main)/group/features/Conversation/Header/ShareButton/index.tsx +1 -1
  62. package/src/app/[variants]/(main)/group/features/TelemetryNotification.tsx +2 -3
  63. package/src/app/[variants]/(main)/home/_layout/Body/Agent/AllAgentsDrawer/index.tsx +1 -1
  64. package/src/app/[variants]/(main)/hooks/useActiveTabKey.ts +6 -11
  65. package/src/app/[variants]/(main)/image/NotSupportClient.tsx +4 -3
  66. package/src/app/[variants]/(main)/image/_layout/ConfigPanel/components/ImageUpload.tsx +1 -1
  67. package/src/app/[variants]/(main)/image/_layout/ConfigPanel/components/MultiImagesUpload/ImageManageModal.tsx +1 -1
  68. package/src/app/[variants]/(main)/image/_layout/ConfigPanel/components/MultiImagesUpload/index.tsx +1 -1
  69. package/src/app/[variants]/(main)/memory/(home)/features/RoleTagCloud/index.tsx +1 -1
  70. package/src/app/[variants]/(main)/memory/_layout/Sidebar/Header/Nav.tsx +1 -1
  71. package/src/app/[variants]/(main)/memory/features/SourceLink.tsx +1 -1
  72. package/src/app/[variants]/(main)/page/_layout/Body/AllPagesDrawer/index.tsx +1 -1
  73. package/src/app/[variants]/(main)/settings/about/features/ItemCard.tsx +2 -3
  74. package/src/app/[variants]/(main)/settings/about/features/ItemLink.tsx +2 -3
  75. package/src/app/[variants]/(main)/settings/about/features/Version.tsx +6 -7
  76. package/src/app/[variants]/(main)/settings/features/SettingsContent.tsx +1 -1
  77. package/src/app/[variants]/(main)/settings/features/UpgradeAlert.tsx +4 -4
  78. package/src/app/[variants]/(main)/settings/provider/(list)/Footer.tsx +2 -2
  79. package/src/app/[variants]/(main)/settings/provider/detail/index.tsx +1 -1
  80. package/src/app/[variants]/(main)/settings/provider/detail/ollama/CheckError.tsx +1 -1
  81. package/src/app/[variants]/(main)/settings/provider/features/ProviderConfig/index.tsx +12 -6
  82. package/src/app/[variants]/(main)/settings/security/index.tsx +1 -1
  83. package/src/app/[variants]/(main)/settings/stats/features/overview/ShareButton/ShareModal.tsx +1 -1
  84. package/src/app/[variants]/(main)/settings/stats/features/rankings/AssistantsRank.tsx +1 -1
  85. package/src/app/[variants]/(main)/settings/stats/features/rankings/TopicsRank.tsx +1 -1
  86. package/src/app/[variants]/(mobile)/_layout/index.tsx +1 -1
  87. package/src/app/[variants]/(mobile)/chat/settings/features/AgentInfoDescription/index.tsx +1 -1
  88. package/src/app/[variants]/(mobile)/chat/settings/features/SettingButton.tsx +1 -1
  89. package/src/app/[variants]/(mobile)/router/index.tsx +1 -1
  90. package/src/app/[variants]/page.tsx +1 -1
  91. package/src/app/[variants]/router/index.tsx +1 -1
  92. package/src/components/404/index.tsx +4 -4
  93. package/src/components/Analytics/index.tsx +1 -1
  94. package/src/components/BrandWatermark/index.tsx +4 -4
  95. package/src/components/Branding/ProductLogo/Custom.tsx +1 -1
  96. package/src/components/Error/index.tsx +3 -4
  97. package/src/components/GoBack/index.tsx +2 -2
  98. package/src/components/LabsModal/LabCard.tsx +1 -1
  99. package/src/components/Link.tsx +25 -5
  100. package/src/components/OllamaSetupGuide/index.tsx +5 -4
  101. package/src/components/WebFavicon/index.tsx +1 -1
  102. package/src/components/client/ClientResponsiveContent/index.tsx +1 -1
  103. package/src/components/client/ClientResponsiveLayout.tsx +1 -1
  104. package/src/components/mdx/Image.tsx +1 -1
  105. package/src/components/mdx/Link.tsx +26 -9
  106. package/src/features/AlertBanner/CloudBanner.tsx +2 -3
  107. package/src/features/ChatInput/ActionBar/Model/ControlsForm.tsx +8 -7
  108. package/src/features/ChatInput/ActionBar/Params/Controls.tsx +1 -3
  109. package/src/features/ChatInput/ActionBar/Token/index.tsx +1 -1
  110. package/src/features/ChatInput/Mobile/index.tsx +1 -1
  111. package/src/features/Conversation/ChatItem/components/MessageContent/index.tsx +1 -1
  112. package/src/features/Conversation/Error/OllamaBizError/index.tsx +1 -1
  113. package/src/features/Conversation/Error/OllamaSetupGuide/Desktop.tsx +1 -2
  114. package/src/features/Conversation/Error/index.tsx +1 -1
  115. package/src/features/Conversation/Messages/AssistantGroup/Tool/Actions/Settings.tsx +1 -1
  116. package/src/features/Conversation/Messages/AssistantGroup/Tool/index.tsx +1 -1
  117. package/src/features/Conversation/Messages/AssistantGroup/index.tsx +1 -1
  118. package/src/features/Conversation/Messages/Tool/Tool/index.tsx +1 -1
  119. package/src/features/Conversation/Messages/components/SearchGrounding.tsx +1 -1
  120. package/src/features/DataImporter/Error.tsx +3 -3
  121. package/src/features/DevPanel/CacheViewer/cacheProvider.tsx +2 -1
  122. package/src/features/DevPanel/MetadataViewer/Og.tsx +1 -1
  123. package/src/features/DevPanel/features/FloatPanel.tsx +1 -1
  124. package/src/features/DevPanel/features/Table/TooltipContent.tsx +3 -4
  125. package/src/features/DevPanel/index.tsx +1 -1
  126. package/src/features/EditorCanvas/InlineToolbar.tsx +1 -6
  127. package/src/features/FileViewer/NotSupport/index.tsx +2 -3
  128. package/src/features/Follow/index.tsx +8 -9
  129. package/src/features/LibraryModal/AddFilesToKnowledgeBase/SelectForm.tsx +2 -2
  130. package/src/features/MCP/Scores.tsx +1 -1
  131. package/src/features/MCPPluginDetail/Nav.tsx +8 -8
  132. package/src/features/MCPPluginDetail/Overview/TagList.tsx +1 -1
  133. package/src/features/MobileTabBar/index.tsx +2 -1
  134. package/src/features/OllamaSetupGuide/Desktop.tsx +1 -2
  135. package/src/features/PWAInstall/Install.tsx +1 -1
  136. package/src/features/PWAInstall/index.tsx +1 -1
  137. package/src/features/PluginStore/McpList/index.tsx +1 -1
  138. package/src/features/PluginStore/PluginList/Detail/Header.tsx +6 -6
  139. package/src/features/PluginsUI/Render/DefaultType/index.tsx +1 -1
  140. package/src/features/Portal/Artifacts/Body/Renderer/index.tsx +1 -1
  141. package/src/features/ResourceManager/components/ChunkDrawer/index.tsx +1 -1
  142. package/src/features/ResourceManager/components/Explorer/ListView/Skeleton.tsx +26 -26
  143. package/src/features/ResourceManager/components/Explorer/ToolBar/BatchActionsDropdown.tsx +147 -149
  144. package/src/features/ResourceManager/index.tsx +1 -1
  145. package/src/features/Setting/Footer.tsx +4 -5
  146. package/src/features/User/UserPanel/PanelContent.tsx +1 -1
  147. package/src/hooks/useActiveTabKey.ts +6 -3
  148. package/src/hooks/useIsSingleMode.test.ts +10 -24
  149. package/src/hooks/useIsSingleMode.ts +4 -2
  150. package/src/hooks/useIsSubSlug.ts +2 -1
  151. package/src/hooks/useQuery.ts +5 -5
  152. package/src/layout/GlobalProvider/AppTheme.tsx +2 -2
  153. package/src/layout/GlobalProvider/StyleRegistry.tsx +1 -1
  154. package/src/layout/GlobalProvider/useUserStateRedirect.ts +13 -25
  155. package/src/libs/next/Image.tsx +13 -0
  156. package/src/libs/next/Link.tsx +13 -0
  157. package/src/libs/next/dynamic.tsx +13 -0
  158. package/src/libs/next/index.ts +22 -0
  159. package/src/libs/next/navigation.ts +22 -0
  160. package/src/libs/router/Link.tsx +30 -0
  161. package/src/libs/router/index.ts +18 -0
  162. package/src/libs/router/navigation.ts +72 -0
  163. package/src/server/modules/AgentRuntime/AgentStateManager.ts +5 -1
  164. package/src/store/chat/slices/portal/selectors.test.ts +5 -15
  165. package/src/store/page/index.ts +1 -1
  166. package/src/store/page/slices/crud/index.ts +1 -1
  167. package/src/app/[variants]/(main)/hooks/usePathname.ts +0 -10
  168. package/src/app/[variants]/(main)/hooks/useQuery.ts +0 -12
  169. package/src/app/[variants]/(main)/hooks/useRouter.ts +0 -22
  170. package/src/app/[variants]/(main)/hooks/useSearchParams.ts +0 -11
@@ -1,7 +1,6 @@
1
1
  import { Alert, Button, Flexbox, Highlighter, Icon } from '@lobehub/ui';
2
2
  import { Result } from 'antd';
3
3
  import { ShieldAlert } from 'lucide-react';
4
- import Link from 'next/link';
5
4
  import React, { memo } from 'react';
6
5
  import { Trans, useTranslation } from 'react-i18next';
7
6
  import Balancer from 'react-wrap-balancer';
@@ -41,17 +40,18 @@ const Error = memo<ErrorProps>(({ error, onClick }) => {
41
40
  <Balancer>
42
41
  <Trans i18nKey="importModal.error.desc" ns={'common'}>
43
42
  非常抱歉,数据库升级过程发生异常。请重试升级,或
44
- <Link
43
+ <a
45
44
  aria-label={'issue'}
46
45
  href={GITHUB_ISSUES}
47
46
  onClick={(e) => {
48
47
  e.preventDefault();
49
48
  githubService.submitImportError(error!);
50
49
  }}
50
+ rel="noreferrer"
51
51
  target="_blank"
52
52
  >
53
53
  提交问题
54
- </Link>
54
+ </a>
55
55
  我们将会第一时间帮你排查问题。
56
56
  </Trans>
57
57
  </Balancer>
@@ -1,6 +1,5 @@
1
1
  'use client';
2
2
 
3
- import { usePathname } from 'next/navigation';
4
3
  import {
5
4
  type PropsWithChildren,
6
5
  createContext,
@@ -10,6 +9,8 @@ import {
10
9
  useTransition,
11
10
  } from 'react';
12
11
 
12
+ import { usePathname } from '@/libs/router/navigation';
13
+
13
14
  import { getCacheFiles } from './getCacheEntries';
14
15
  import type { NextCacheFileData } from './schema';
15
16
 
@@ -1,5 +1,5 @@
1
1
  import { Flexbox, Form, Input, TextArea } from '@lobehub/ui';
2
- import Image from 'next/image';
2
+ import Image from '@/libs/next/Image';
3
3
  import { memo } from 'react';
4
4
 
5
5
  import { useHead } from './useHead';
@@ -5,11 +5,11 @@ import { ActionIcon, Flexbox, FluentEmoji, Icon, SideNav } from '@lobehub/ui';
5
5
  import { FloatButton } from 'antd';
6
6
  import { createStaticStyles, cssVar, cx } from 'antd-style';
7
7
  import { BugIcon, BugOff, XIcon } from 'lucide-react';
8
- import { usePathname } from 'next/navigation';
9
8
  import { type ReactNode, memo, useEffect, useState } from 'react';
10
9
  import { Rnd } from 'react-rnd';
11
10
 
12
11
  import { isDesktop } from '@/const/version';
12
+ import { usePathname } from '@/libs/next/navigation';
13
13
 
14
14
  // 定义样式
15
15
  const styles = createStaticStyles(({ css }) => {
@@ -1,6 +1,5 @@
1
1
  import { Flexbox, Highlighter } from '@lobehub/ui';
2
- import Image from 'next/image';
3
- import Link from 'next/link';
2
+ import Image from '@/libs/next/Image';
4
3
  import { type ReactNode, memo } from 'react';
5
4
 
6
5
  const TooltipContent = memo<{ children: ReactNode }>(({ children }) => {
@@ -19,9 +18,9 @@ const TooltipContent = memo<{ children: ReactNode }>(({ children }) => {
19
18
 
20
19
  if (children.startsWith('http'))
21
20
  return (
22
- <Link href={children} target={'_blank'}>
21
+ <a href={children} rel="noreferrer" target="_blank">
23
22
  {children}
24
- </Link>
23
+ </a>
25
24
  );
26
25
 
27
26
  const code = children.trim().trimEnd();
@@ -1,7 +1,7 @@
1
1
  'use client';
2
2
 
3
3
  import { BookText, Cog, FlagIcon, GlobeLockIcon } from 'lucide-react';
4
- import dynamic from 'next/dynamic';
4
+ import dynamic from '@/libs/next/dynamic';
5
5
 
6
6
  import CacheViewer from './CacheViewer';
7
7
  import FeatureFlagViewer from './FeatureFlagViewer';
@@ -1,11 +1,6 @@
1
1
  'use client';
2
2
 
3
- import {
4
- HotkeyEnum,
5
- INSERT_HEADING_COMMAND,
6
- getHotkeyById,
7
- type IEditor,
8
- } from '@lobehub/editor';
3
+ import { HotkeyEnum, type IEditor, INSERT_HEADING_COMMAND, getHotkeyById } from '@lobehub/editor';
9
4
  import {
10
5
  ChatInputActions,
11
6
  type ChatInputActionsProps,
@@ -1,6 +1,5 @@
1
1
  import { Button, Center, Flexbox, FluentEmoji } from '@lobehub/ui';
2
2
  import { createStaticStyles } from 'antd-style';
3
- import Link from 'next/link';
4
3
  import { type CSSProperties, type ComponentType, useState } from 'react';
5
4
  import { Trans, useTranslation } from 'react-i18next';
6
5
 
@@ -37,9 +36,9 @@ const NotSupport: ComponentType<NotSupportProps> = ({ fileName, url, style }) =>
37
36
  <Flexbox style={{ textAlign: 'center' }}>
38
37
  <Trans i18nKey="preview.unsupportedFileAndContact" ns={'file'}>
39
38
  此文件格式暂不支持在线预览,如有预览诉求,欢迎
40
- <Link aria-label={'todo'} href={MORE_FILE_PREVIEW_REQUEST_URL} target="_blank">
39
+ <a aria-label={'todo'} href={MORE_FILE_PREVIEW_REQUEST_URL} rel="noreferrer" target="_blank">
41
40
  反馈给我们
42
- </Link>
41
+ </a>
43
42
  </Trans>
44
43
  </Flexbox>
45
44
  {url && (
@@ -4,7 +4,6 @@ import { SiDiscord, SiGithub, SiMedium, SiX } from '@icons-pack/react-simple-ico
4
4
  import { SOCIAL_URL } from '@lobechat/business-const';
5
5
  import { ActionIcon, Flexbox } from '@lobehub/ui';
6
6
  import { createStaticStyles, cssVar } from 'antd-style';
7
- import Link from 'next/link';
8
7
  import { memo } from 'react';
9
8
  import { useTranslation } from 'react-i18next';
10
9
 
@@ -30,30 +29,30 @@ const Follow = memo(() => {
30
29
  const { t } = useTranslation('common');
31
30
  return (
32
31
  <Flexbox gap={8} horizontal>
33
- <Link href={GITHUB} rel="noreferrer" target={'_blank'}>
32
+ <a href={GITHUB} rel="noreferrer" target="_blank">
34
33
  <ActionIcon
35
34
  className={styles.icon}
36
35
  icon={SiGithub as any}
37
36
  title={t('follow', { name: 'GitHub' })}
38
37
  />
39
- </Link>
40
- <Link href={SOCIAL_URL.x} rel="noreferrer" target={'_blank'}>
38
+ </a>
39
+ <a href={SOCIAL_URL.x} rel="noreferrer" target="_blank">
41
40
  <ActionIcon className={styles.icon} icon={SiX as any} title={t('follow', { name: 'X' })} />
42
- </Link>
43
- <Link href={SOCIAL_URL.discord} rel="noreferrer" target={'_blank'}>
41
+ </a>
42
+ <a href={SOCIAL_URL.discord} rel="noreferrer" target="_blank">
44
43
  <ActionIcon
45
44
  className={styles.icon}
46
45
  icon={SiDiscord as any}
47
46
  title={t('follow', { name: 'Discord' })}
48
47
  />
49
- </Link>
50
- <Link href={SOCIAL_URL.medium} rel="noreferrer" target={'_blank'}>
48
+ </a>
49
+ <a href={SOCIAL_URL.medium} rel="noreferrer" target="_blank">
51
50
  <ActionIcon
52
51
  className={styles.icon}
53
52
  icon={SiMedium as any}
54
53
  title={t('follow', { name: 'Medium' })}
55
54
  />
56
- </Link>
55
+ </a>
57
56
  </Flexbox>
58
57
  );
59
58
  });
@@ -1,8 +1,8 @@
1
1
  import { Block, Button, Flexbox, Form, MaterialFileTypeIcon, Select } from '@lobehub/ui';
2
2
  import { App } from 'antd';
3
- import Link from 'next/link';
4
3
  import { memo, useState } from 'react';
5
4
  import { Trans, useTranslation } from 'react-i18next';
5
+ import { Link } from 'react-router-dom';
6
6
 
7
7
  import RepoIcon from '@/components/LibIcon';
8
8
  import { useKnowledgeBaseStore } from '@/store/library';
@@ -34,7 +34,7 @@ const SelectForm = memo<CreateFormProps>(({ onClose, knowledgeBaseId, fileIds })
34
34
  <Trans
35
35
  components={[
36
36
  <span key="0" />,
37
- <Link href={`/knowledge/library/${values.id}`} key="1" />,
37
+ <Link key="1" to={`/knowledge/library/${values.id}`} />,
38
38
  ]}
39
39
  i18nKey={'addToKnowledgeBase.addSuccess'}
40
40
  ns={'knowledgeBase'}
@@ -3,7 +3,7 @@
3
3
  import { Center, Flexbox, Icon, Tooltip } from '@lobehub/ui';
4
4
  import { createStaticStyles, cssVar, cx } from 'antd-style';
5
5
  import { CircleDashedIcon, HammerIcon, LayersIcon, MessageSquareQuoteIcon } from 'lucide-react';
6
- import Link from 'next/link';
6
+ import { Link } from '@/libs/router';
7
7
  import qs from 'query-string';
8
8
  import { memo } from 'react';
9
9
  import { useTranslation } from 'react-i18next';
@@ -12,7 +12,6 @@ import {
12
12
  PackageCheckIcon,
13
13
  SettingsIcon,
14
14
  } from 'lucide-react';
15
- import Link from 'next/link';
16
15
  import { memo } from 'react';
17
16
  import { useTranslation } from 'react-i18next';
18
17
  import urlJoin from 'url-join';
@@ -178,21 +177,22 @@ const Nav = memo<NavProps>(
178
177
  {nav}
179
178
  {!inModal && (
180
179
  <Flexbox gap={12} horizontal>
181
- <Link className={styles.link} href={SOCIAL_URL.discord} target={'_blank'}>
180
+ <a className={styles.link} href={SOCIAL_URL.discord} rel="noreferrer" target="_blank">
182
181
  {t('mcp.details.nav.needHelp')}
183
- </Link>
182
+ </a>
184
183
  {github?.url && (
185
184
  <>
186
- <Link className={styles.link} href={github.url} target={'_blank'}>
185
+ <a className={styles.link} href={github.url} rel="noreferrer" target="_blank">
187
186
  {t('mcp.details.nav.viewSourceCode')}
188
- </Link>
189
- <Link
187
+ </a>
188
+ <a
190
189
  className={styles.link}
191
190
  href={urlJoin(github.url, 'issues')}
192
- target={'_blank'}
191
+ rel="noreferrer"
192
+ target="_blank"
193
193
  >
194
194
  {t('mcp.details.nav.reportIssue')}
195
- </Link>
195
+ </a>
196
196
  </>
197
197
  )}
198
198
  </Flexbox>
@@ -2,7 +2,7 @@
2
2
 
3
3
  import { Flexbox, Tag } from '@lobehub/ui';
4
4
  import { createStaticStyles } from 'antd-style';
5
- import Link from 'next/link';
5
+ import { Link } from '@/libs/router';
6
6
  import qs from 'query-string';
7
7
  import { memo } from 'react';
8
8
 
@@ -2,10 +2,11 @@ import { Icon } from '@lobehub/ui';
2
2
  import { TabBar, type TabBarProps } from '@lobehub/ui/mobile';
3
3
  import { createStaticStyles, cssVar } from 'antd-style';
4
4
  import { Bot, MessageSquare, User } from 'lucide-react';
5
- import { useRouter } from 'next/navigation';
6
5
  import { memo, useMemo } from 'react';
7
6
  import { useTranslation } from 'react-i18next';
8
7
 
8
+ import { useRouter } from '@/libs/router/navigation';
9
+
9
10
  import { SidebarTabKey } from '@/store/global/initialState';
10
11
  import { featureFlagsSelectors, useServerConfigStore } from '@/store/serverConfig';
11
12
 
@@ -1,7 +1,6 @@
1
1
  import { Ollama } from '@lobehub/icons';
2
2
  import { Center } from '@lobehub/ui';
3
3
  import { cssVar } from 'antd-style';
4
- import Link from 'next/link';
5
4
  import { memo } from 'react';
6
5
  import { Trans, useTranslation } from 'react-i18next';
7
6
 
@@ -17,7 +16,7 @@ const OllamaDesktopSetupGuide = memo(() => {
17
16
  description={
18
17
  <span>
19
18
  <Trans
20
- components={[<span key="0" />, <Link href={'https://ollama.com/download'} key="1" />]}
19
+ components={[<span key="0" />, <a href={'https://ollama.com/download'} key="1" rel="noreferrer" target="_blank" />]}
21
20
  i18nKey={'OllamaSetupGuide.install.description'}
22
21
  ns={'components'}
23
22
  />
@@ -1,7 +1,7 @@
1
1
  'use client';
2
2
 
3
3
  import { BRANDING_NAME } from '@lobechat/business-const';
4
- import dynamic from 'next/dynamic';
4
+ import dynamic from '@/libs/next/dynamic';
5
5
  import { memo, useEffect, useLayoutEffect } from 'react';
6
6
  import { useTranslation } from 'react-i18next';
7
7
 
@@ -1,6 +1,6 @@
1
1
  'use client';
2
2
 
3
- import dynamic from 'next/dynamic';
3
+ import dynamic from '@/libs/next/dynamic';
4
4
  import { pwaInstallHandler } from 'pwa-install-handler';
5
5
  import { memo, useEffect, useState } from 'react';
6
6
 
@@ -1,6 +1,6 @@
1
1
  import { DraggablePanel, Flexbox } from '@lobehub/ui';
2
2
  import { cssVar, useTheme } from 'antd-style';
3
- import dynamic from 'next/dynamic';
3
+ import dynamic from '@/libs/next/dynamic';
4
4
  import { memo, useRef } from 'react';
5
5
 
6
6
  import { useServerConfigStore } from '@/store/serverConfig';
@@ -4,7 +4,6 @@ import { Github } from '@lobehub/icons';
4
4
  import { ActionIcon, Avatar, Collapse, Flexbox, Icon, Text } from '@lobehub/ui';
5
5
  import { createStaticStyles, cssVar, useResponsive } from 'antd-style';
6
6
  import { DotIcon } from 'lucide-react';
7
- import Link from 'next/link';
8
7
  import { memo } from 'react';
9
8
  import { useTranslation } from 'react-i18next';
10
9
  import urlJoin from 'url-join';
@@ -77,16 +76,17 @@ const Header = memo<{ inModal?: boolean; mobile?: boolean }>(({ mobile: isMobile
77
76
  </Flexbox>
78
77
  {identifier && (
79
78
  <Flexbox align={'center'} gap={6} horizontal>
80
- <Link
79
+ <a
81
80
  href={urlJoin(
82
81
  'https://github.com/lobehub/lobe-chat-agents/tree/main/locales',
83
82
  identifier,
84
83
  )}
85
84
  onClick={(e) => e.stopPropagation()}
86
- target={'_blank'}
85
+ rel="noreferrer"
86
+ target="_blank"
87
87
  >
88
88
  <ActionIcon fill={cssVar.colorTextDescription} icon={Github} />
89
- </Link>
89
+ </a>
90
90
  </Flexbox>
91
91
  )}
92
92
  </Flexbox>
@@ -94,9 +94,9 @@ const Header = memo<{ inModal?: boolean; mobile?: boolean }>(({ mobile: isMobile
94
94
  <Flexbox>
95
95
  <Flexbox align={'center'} gap={4} horizontal>
96
96
  {author && (
97
- <Link href={urlJoin('https://github.com', author)} target={'_blank'}>
97
+ <a href={urlJoin('https://github.com', author)} rel="noreferrer" target="_blank">
98
98
  {author}
99
- </Link>
99
+ </a>
100
100
  )}
101
101
  <Icon icon={DotIcon} />
102
102
  <PublishedTime
@@ -1,5 +1,5 @@
1
1
  import { Skeleton } from '@lobehub/ui';
2
- import dynamic from 'next/dynamic';
2
+ import dynamic from '@/libs/next/dynamic';
3
3
  import { Suspense, memo } from 'react';
4
4
 
5
5
  import { useToolStore } from '@/store/tool';
@@ -1,5 +1,5 @@
1
1
  import { Markdown, Mermaid } from '@lobehub/ui';
2
- import dynamic from 'next/dynamic';
2
+ import dynamic from '@/libs/next/dynamic';
3
3
  import { memo } from 'react';
4
4
 
5
5
  import HTMLRenderer from './HTML';
@@ -1,7 +1,7 @@
1
1
  import { Flexbox } from '@lobehub/ui';
2
2
  import { Drawer } from 'antd';
3
3
  import { cssVar } from 'antd-style';
4
- import dynamic from 'next/dynamic';
4
+ import dynamic from '@/libs/next/dynamic';
5
5
  import { memo } from 'react';
6
6
 
7
7
  import { fileManagerSelectors, useFileStore } from '@/store/file';
@@ -34,33 +34,33 @@ const ListViewSkeleton = ({
34
34
  opacity: getOpacity(index),
35
35
  }}
36
36
  >
37
- <Center height={40} style={{ paddingInline: 4 }}>
38
- <Checkbox disabled />
39
- </Center>
40
- <Flexbox
41
- align={'center'}
42
- horizontal
43
- style={{
44
- flexShrink: 0,
45
- maxWidth: columnWidths.name,
46
- minWidth: columnWidths.name,
47
- paddingInline: 8,
48
- width: columnWidths.name,
49
- }}
50
- >
51
- <Skeleton.Avatar active shape={'square'} size={24} style={{ marginInline: 8 }} />
52
- <Skeleton.Button active style={{ height: 16, width: '60%' }} />
53
- </Flexbox>
54
- <Flexbox style={{ flexShrink: 0, paddingInline: '0 24px' }} width={columnWidths.date}>
55
- <Skeleton.Button active style={{ height: 16, width: '80%' }} />
56
- </Flexbox>
57
- <Flexbox style={{ flexShrink: 0, paddingInline: '0 24px' }} width={columnWidths.size}>
58
- <Skeleton.Button active style={{ height: 16, width: '60%' }} />
37
+ <Center height={40} style={{ paddingInline: 4 }}>
38
+ <Checkbox disabled />
39
+ </Center>
40
+ <Flexbox
41
+ align={'center'}
42
+ horizontal
43
+ style={{
44
+ flexShrink: 0,
45
+ maxWidth: columnWidths.name,
46
+ minWidth: columnWidths.name,
47
+ paddingInline: 8,
48
+ width: columnWidths.name,
49
+ }}
50
+ >
51
+ <Skeleton.Avatar active shape={'square'} size={24} style={{ marginInline: 8 }} />
52
+ <Skeleton.Button active style={{ height: 16, width: '60%' }} />
53
+ </Flexbox>
54
+ <Flexbox style={{ flexShrink: 0, paddingInline: '0 24px' }} width={columnWidths.date}>
55
+ <Skeleton.Button active style={{ height: 16, width: '80%' }} />
56
+ </Flexbox>
57
+ <Flexbox style={{ flexShrink: 0, paddingInline: '0 24px' }} width={columnWidths.size}>
58
+ <Skeleton.Button active style={{ height: 16, width: '60%' }} />
59
+ </Flexbox>
59
60
  </Flexbox>
60
- </Flexbox>
61
- ))}
62
- </Flexbox>
63
- );
61
+ ))}
62
+ </Flexbox>
63
+ );
64
64
  };
65
65
 
66
66
  export default ListViewSkeleton;