@lobehub/lobehub 2.0.0-next.296 → 2.0.0-next.297

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 (48) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/changelog/v1.json +9 -0
  3. package/package.json +2 -2
  4. package/packages/types/package.json +1 -1
  5. package/packages/types/src/discover/assistants.ts +4 -0
  6. package/packages/types/src/discover/groupAgents.ts +196 -0
  7. package/packages/types/src/discover/index.ts +5 -1
  8. package/src/app/[variants]/(main)/community/(detail)/group_agent/features/DetailProvider.tsx +19 -0
  9. package/src/app/[variants]/(main)/community/(detail)/group_agent/features/Details/Members/index.tsx +137 -0
  10. package/src/app/[variants]/(main)/community/(detail)/group_agent/features/Details/Nav.tsx +88 -0
  11. package/src/app/[variants]/(main)/community/(detail)/group_agent/features/Details/Overview/index.tsx +213 -0
  12. package/src/app/[variants]/(main)/community/(detail)/group_agent/features/Details/Related/index.tsx +85 -0
  13. package/src/app/[variants]/(main)/community/(detail)/group_agent/features/Details/SystemRole/TagList.tsx +20 -0
  14. package/src/app/[variants]/(main)/community/(detail)/group_agent/features/Details/SystemRole/index.tsx +71 -0
  15. package/src/app/[variants]/(main)/community/(detail)/group_agent/features/Details/Versions/index.tsx +119 -0
  16. package/src/app/[variants]/(main)/community/(detail)/group_agent/features/Details/index.tsx +51 -0
  17. package/src/app/[variants]/(main)/community/(detail)/group_agent/features/Header.tsx +253 -0
  18. package/src/app/[variants]/(main)/community/(detail)/group_agent/features/Sidebar/ActionButton/AddGroupAgent.tsx +222 -0
  19. package/src/app/[variants]/(main)/community/(detail)/group_agent/features/Sidebar/ActionButton/index.tsx +34 -0
  20. package/src/app/[variants]/(main)/community/(detail)/group_agent/features/Sidebar/Summary/index.tsx +42 -0
  21. package/src/app/[variants]/(main)/community/(detail)/group_agent/features/Sidebar/index.tsx +41 -0
  22. package/src/app/[variants]/(main)/community/(detail)/group_agent/features/StatusPage/index.tsx +104 -0
  23. package/src/app/[variants]/(main)/community/(detail)/group_agent/index.tsx +103 -0
  24. package/src/app/[variants]/(main)/community/(detail)/group_agent/loading.tsx +1 -0
  25. package/src/app/[variants]/(main)/community/(detail)/user/features/DetailProvider.tsx +7 -1
  26. package/src/app/[variants]/(main)/community/(detail)/user/features/UserContent.tsx +2 -0
  27. package/src/app/[variants]/(main)/community/(detail)/user/features/UserGroupCard.tsx +186 -0
  28. package/src/app/[variants]/(main)/community/(detail)/user/features/UserGroupList.tsx +59 -0
  29. package/src/app/[variants]/(main)/community/(detail)/user/index.tsx +3 -1
  30. package/src/app/[variants]/(main)/community/(list)/assistant/features/List/Item.tsx +26 -8
  31. package/src/app/[variants]/(main)/community/(list)/assistant/index.tsx +1 -0
  32. package/src/app/[variants]/(main)/group/profile/features/GroupProfile/index.tsx +2 -0
  33. package/src/app/[variants]/(main)/group/profile/features/Header/AgentPublishButton/PublishResultModal.tsx +2 -1
  34. package/src/app/[variants]/(main)/group/profile/features/Header/GroupPublishButton/GroupForkConfirmModal.tsx +60 -0
  35. package/src/app/[variants]/(main)/group/profile/features/Header/GroupPublishButton/GroupPublishResultModal.tsx +62 -0
  36. package/src/app/[variants]/(main)/group/profile/features/Header/GroupPublishButton/PublishButton.tsx +122 -0
  37. package/src/app/[variants]/(main)/group/profile/features/Header/GroupPublishButton/index.tsx +46 -0
  38. package/src/app/[variants]/(main)/group/profile/features/Header/GroupPublishButton/types.ts +12 -0
  39. package/src/app/[variants]/(main)/group/profile/features/Header/GroupPublishButton/useMarketGroupPublish.ts +211 -0
  40. package/src/app/[variants]/(main)/group/profile/features/Header/GroupPublishButton/utils.ts +22 -0
  41. package/src/app/[variants]/router/desktopRouter.config.tsx +7 -0
  42. package/src/locales/default/setting.ts +12 -0
  43. package/src/server/routers/lambda/market/agentGroup.ts +296 -0
  44. package/src/server/routers/lambda/market/index.ts +134 -4
  45. package/src/server/services/discover/index.ts +123 -7
  46. package/src/services/discover.ts +55 -0
  47. package/src/store/discover/slices/groupAgent/action.ts +80 -0
  48. package/src/store/discover/store.ts +3 -0
package/CHANGELOG.md CHANGED
@@ -2,6 +2,31 @@
2
2
 
3
3
  # Changelog
4
4
 
5
+ ## [Version 2.0.0-next.297](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.296...v2.0.0-next.297)
6
+
7
+ <sup>Released on **2026-01-16**</sup>
8
+
9
+ #### ✨ Features
10
+
11
+ - **misc**: Add agent group publish into market & use market group agents in lobehub.
12
+
13
+ <br/>
14
+
15
+ <details>
16
+ <summary><kbd>Improvements and Fixes</kbd></summary>
17
+
18
+ #### What's improved
19
+
20
+ - **misc**: Add agent group publish into market & use market group agents in lobehub, closes [#11535](https://github.com/lobehub/lobe-chat/issues/11535) ([02b9e76](https://github.com/lobehub/lobe-chat/commit/02b9e76))
21
+
22
+ </details>
23
+
24
+ <div align="right">
25
+
26
+ [![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)
27
+
28
+ </div>
29
+
5
30
  ## [Version 2.0.0-next.296](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.295...v2.0.0-next.296)
6
31
 
7
32
  <sup>Released on **2026-01-16**</sup>
package/changelog/v1.json CHANGED
@@ -1,4 +1,13 @@
1
1
  [
2
+ {
3
+ "children": {
4
+ "features": [
5
+ "Add agent group publish into market & use market group agents in lobehub."
6
+ ]
7
+ },
8
+ "date": "2026-01-16",
9
+ "version": "2.0.0-next.297"
10
+ },
2
11
  {
3
12
  "children": {
4
13
  "improvements": [
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lobehub/lobehub",
3
- "version": "2.0.0-next.296",
3
+ "version": "2.0.0-next.297",
4
4
  "description": "LobeHub - an open-source,comprehensive AI Agent framework that supports speech synthesis, multimodal, and extensible Function Call plugin system. Supports one-click free deployment of your private ChatGPT/LLM web application.",
5
5
  "keywords": [
6
6
  "framework",
@@ -204,7 +204,7 @@
204
204
  "@lobehub/desktop-ipc-typings": "workspace:*",
205
205
  "@lobehub/editor": "^3.11.0",
206
206
  "@lobehub/icons": "^4.0.2",
207
- "@lobehub/market-sdk": "0.28.1",
207
+ "@lobehub/market-sdk": "0.29.0",
208
208
  "@lobehub/tts": "^4.0.2",
209
209
  "@lobehub/ui": "^4.19.0",
210
210
  "@modelcontextprotocol/sdk": "^1.25.1",
@@ -8,7 +8,7 @@
8
8
  "@lobechat/python-interpreter": "workspace:*",
9
9
  "@lobechat/web-crawler": "workspace:*",
10
10
  "@lobehub/chat-plugin-sdk": "^1.32.4",
11
- "@lobehub/market-sdk": "0.28.1",
11
+ "@lobehub/market-sdk": "0.29.0",
12
12
  "@lobehub/market-types": "^1.12.3",
13
13
  "model-bank": "workspace:*",
14
14
  "type-fest": "^4.41.0",
@@ -42,6 +42,8 @@ export enum AssistantNavKey {
42
42
 
43
43
  export type AgentStatus = 'published' | 'unpublished' | 'archived' | 'deprecated';
44
44
 
45
+ export type AgentType = 'agent' | 'agent-group';
46
+
45
47
  export interface DiscoverAssistantItem extends Omit<LobeAgentSettings, 'meta'>, MetaData {
46
48
  author: string;
47
49
  category?: AssistantCategory;
@@ -53,6 +55,7 @@ export interface DiscoverAssistantItem extends Omit<LobeAgentSettings, 'meta'>,
53
55
  pluginCount: number;
54
56
  status?: AgentStatus;
55
57
  tokenUsage: number;
58
+ type?: AgentType;
56
59
  userName?: string;
57
60
  }
58
61
 
@@ -60,6 +63,7 @@ export type AssistantMarketSource = 'legacy' | 'new';
60
63
 
61
64
  export interface AssistantQueryParams {
62
65
  category?: string;
66
+ includeAgentGroup?: boolean;
63
67
  locale?: string;
64
68
  order?: 'asc' | 'desc';
65
69
  ownerId?: string;
@@ -0,0 +1,196 @@
1
+ import type { MetaData } from '../meta';
2
+
3
+ /**
4
+ * Group Agent Member - represents a member agent in a group
5
+ */
6
+ export interface GroupAgentMember {
7
+ avatar?: string;
8
+ category?: string;
9
+ config?: Record<string, any>;
10
+ description: string;
11
+ displayOrder?: number;
12
+ enabled?: boolean;
13
+ identifier: string;
14
+ name: string;
15
+ role: 'supervisor' | 'participant';
16
+ url: string;
17
+ version?: string;
18
+ }
19
+
20
+ /**
21
+ * Group Agent Status
22
+ */
23
+ export type GroupAgentStatus = 'published' | 'unpublished' | 'archived' | 'deprecated';
24
+
25
+ /**
26
+ * Group Agent Visibility
27
+ */
28
+ export type GroupAgentVisibility = 'public' | 'private' | 'internal';
29
+
30
+ /**
31
+ * Group Agent Category
32
+ */
33
+ export type GroupAgentCategory =
34
+ | 'productivity'
35
+ | 'entertainment'
36
+ | 'education'
37
+ | 'development'
38
+ | 'business'
39
+ | 'other';
40
+
41
+ /**
42
+ * Group Agent Config - similar to LobeAgentConfig but for groups
43
+ */
44
+ export interface GroupAgentConfig {
45
+ /**
46
+ * Opening message when starting a conversation with the group
47
+ */
48
+ openingMessage?: string;
49
+ /**
50
+ * Opening questions to guide users
51
+ */
52
+ openingQuestions?: string[];
53
+ /**
54
+ * System role/prompt for the group
55
+ */
56
+ systemRole?: string;
57
+ /**
58
+ * Additional configuration
59
+ */
60
+ [key: string]: any;
61
+ }
62
+
63
+ /**
64
+ * Group Agent Item - basic info for list display
65
+ */
66
+ export interface DiscoverGroupAgentItem extends MetaData {
67
+ author?: string;
68
+ avatar?: string;
69
+ backgroundColor?: string;
70
+ category?: GroupAgentCategory;
71
+ config?: GroupAgentConfig;
72
+ createdAt: string;
73
+ description?: string;
74
+ homepage?: string;
75
+ identifier: string;
76
+ installCount?: number;
77
+ isFeatured?: boolean;
78
+ isOfficial?: boolean;
79
+ /**
80
+ * Number of knowledge bases across all member agents
81
+ */
82
+ knowledgeCount?: number;
83
+ /**
84
+ * Number of member agents in the group
85
+ */
86
+ memberCount: number;
87
+ /**
88
+ * Number of plugins across all member agents
89
+ */
90
+ pluginCount?: number;
91
+ status?: GroupAgentStatus;
92
+ tags?: string[];
93
+ title: string;
94
+ /**
95
+ * Estimated token usage for the group
96
+ */
97
+ tokenUsage?: number;
98
+ updatedAt: string;
99
+ userName?: string;
100
+ version?: string;
101
+ versionNumber?: number;
102
+ visibility?: GroupAgentVisibility;
103
+ }
104
+
105
+ /**
106
+ * Group Agent Version
107
+ */
108
+ export interface DiscoverGroupAgentVersion {
109
+ changelog?: string;
110
+ createdAt?: string;
111
+ isLatest?: boolean;
112
+ isValidated?: boolean;
113
+ status?: GroupAgentStatus;
114
+ version: string;
115
+ versionNumber: number;
116
+ }
117
+
118
+ /**
119
+ * Group Agent Detail - complete info for detail page
120
+ */
121
+ export interface DiscoverGroupAgentDetail extends DiscoverGroupAgentItem {
122
+ /**
123
+ * Current version string
124
+ */
125
+ currentVersion?: string;
126
+ /**
127
+ * Current version number
128
+ */
129
+ currentVersionNumber?: number;
130
+ /**
131
+ * Example conversations (if available from config)
132
+ */
133
+ examples?: any;
134
+ /**
135
+ * Member agents in the group
136
+ */
137
+ memberAgents: GroupAgentMember[];
138
+ /**
139
+ * Owner ID
140
+ */
141
+ ownerId?: string;
142
+ /**
143
+ * Related group agents
144
+ */
145
+ related?: DiscoverGroupAgentItem[];
146
+ /**
147
+ * Summary text (extracted from description or config)
148
+ */
149
+ summary?: string;
150
+ /**
151
+ * Version history
152
+ */
153
+ versions?: DiscoverGroupAgentVersion[];
154
+ }
155
+
156
+ /**
157
+ * Group Agent List Response
158
+ */
159
+ export interface GroupAgentListResponse {
160
+ currentPage: number;
161
+ items: DiscoverGroupAgentItem[];
162
+ totalCount: number;
163
+ totalPages: number;
164
+ }
165
+
166
+ /**
167
+ * Group Agent Query Parameters
168
+ */
169
+ export interface GroupAgentQueryParams {
170
+ category?: string;
171
+ locale?: string;
172
+ order?: 'asc' | 'desc';
173
+ ownerId?: string;
174
+ page?: number;
175
+ pageSize?: number;
176
+ q?: string;
177
+ sort?: 'createdAt' | 'updatedAt' | 'name' | 'recommended';
178
+ }
179
+
180
+ /**
181
+ * Group Agent Detail Query Parameters
182
+ */
183
+ export interface GroupAgentDetailParams {
184
+ identifier: string;
185
+ locale?: string;
186
+ version?: string;
187
+ }
188
+
189
+ /**
190
+ * Group Agent Category Item
191
+ */
192
+ export interface GroupAgentCategoryItem {
193
+ category: GroupAgentCategory;
194
+ count: number;
195
+ name: string;
196
+ }
@@ -1,6 +1,8 @@
1
1
  import { DiscoverAssistantItem } from './assistants';
2
+ import { DiscoverGroupAgentItem } from './groupAgents';
2
3
 
3
4
  export * from './assistants';
5
+ export * from './groupAgents';
4
6
  export * from './mcp';
5
7
  export * from './models';
6
8
  export * from './plugins';
@@ -8,6 +10,7 @@ export * from './providers';
8
10
 
9
11
  export enum DiscoverTab {
10
12
  Assistants = 'assistant',
13
+ GroupAgents = 'group_agent',
11
14
  Home = 'home',
12
15
  Mcp = 'mcp',
13
16
  Models = 'model',
@@ -58,9 +61,10 @@ export interface DiscoverUserInfo {
58
61
  }
59
62
 
60
63
  /**
61
- * User profile with their published agents
64
+ * User profile with their published agents and groups
62
65
  */
63
66
  export interface DiscoverUserProfile {
67
+ agentGroups?: DiscoverGroupAgentItem[];
64
68
  agents: DiscoverAssistantItem[];
65
69
  user: DiscoverUserInfo;
66
70
  }
@@ -0,0 +1,19 @@
1
+ 'use client';
2
+
3
+ import { type ReactNode, createContext, memo, use } from 'react';
4
+
5
+ import { type DiscoverGroupAgentDetail } from '@/types/discover';
6
+
7
+ export type DetailContextConfig = Partial<DiscoverGroupAgentDetail>;
8
+
9
+ export const DetailContext = createContext<DetailContextConfig>({});
10
+
11
+ export const DetailProvider = memo<{ children: ReactNode; config?: DetailContextConfig }>(
12
+ ({ children, config = {} }) => {
13
+ return <DetailContext value={config}>{children}</DetailContext>;
14
+ },
15
+ );
16
+
17
+ export const useDetailContext = () => {
18
+ return use(DetailContext);
19
+ };
@@ -0,0 +1,137 @@
1
+ import { Avatar, Flexbox, Tag } from '@lobehub/ui';
2
+ import { Card, Typography } from 'antd';
3
+ import { Crown, User } from 'lucide-react';
4
+ import { memo } from 'react';
5
+ import { useTranslation } from 'react-i18next';
6
+
7
+ import { useDetailContext } from '../../DetailProvider';
8
+
9
+ const { Title, Text, Paragraph } = Typography;
10
+
11
+ const MemberCard = memo(
12
+ ({
13
+ agent,
14
+ currentVersion,
15
+ }: {
16
+ agent: any;
17
+ currentVersion: any;
18
+ }) => {
19
+ const { t } = useTranslation('discover');
20
+ const isSupervisor = agent.role === 'supervisor';
21
+
22
+ return (
23
+ <Card hoverable>
24
+ <Flexbox gap={12}>
25
+ {/* Avatar and Basic Info */}
26
+ <Flexbox align="center" gap={12} horizontal>
27
+ <Avatar avatar={currentVersion.avatar || agent.name[0]} size={48} />
28
+ <Flexbox flex={1} gap={4}>
29
+ <Flexbox align="center" gap={8} horizontal>
30
+ <Title level={5} style={{ margin: 0 }}>
31
+ {currentVersion.name || agent.name}
32
+ </Title>
33
+ {isSupervisor ? (
34
+ <Tag color="gold" icon={<Crown size={12} />}>
35
+ {t('members.supervisor', { defaultValue: 'Supervisor' })}
36
+ </Tag>
37
+ ) : (
38
+ <Tag color="blue" icon={<User size={12} />}>
39
+ {t('members.participant', { defaultValue: 'Participant' })}
40
+ </Tag>
41
+ )}
42
+ </Flexbox>
43
+ <Text type="secondary">{agent.identifier}</Text>
44
+ </Flexbox>
45
+ </Flexbox>
46
+
47
+ {/* Description */}
48
+ {currentVersion.description && (
49
+ <Paragraph ellipsis={{ rows: 2 }} style={{ margin: 0 }} type="secondary">
50
+ {currentVersion.description}
51
+ </Paragraph>
52
+ )}
53
+
54
+ {/* System Role (if available) */}
55
+ {currentVersion.config?.systemRole && (
56
+ <Flexbox gap={4}>
57
+ <Text strong>{t('members.systemRole', { defaultValue: 'System Role' })}:</Text>
58
+ <Paragraph ellipsis={{ rows: 3 }} style={{ margin: 0 }} type="secondary">
59
+ {currentVersion.config.systemRole}
60
+ </Paragraph>
61
+ </Flexbox>
62
+ )}
63
+
64
+ {/* Metadata */}
65
+ <Flexbox gap={8} horizontal wrap="wrap">
66
+ {currentVersion.version && (
67
+ <Text type="secondary">
68
+ {t('members.version', { defaultValue: 'Version' })}: {currentVersion.version}
69
+ </Text>
70
+ )}
71
+ {currentVersion.tokenUsage !== undefined && (
72
+ <Text type="secondary">
73
+ {t('members.tokenUsage', { defaultValue: 'Token Usage' })}:{' '}
74
+ {currentVersion.tokenUsage}
75
+ </Text>
76
+ )}
77
+ </Flexbox>
78
+
79
+ {/* URL */}
80
+ {currentVersion.url && (
81
+ <Text
82
+ copyable={{ text: currentVersion.url }}
83
+ ellipsis
84
+ style={{ fontSize: 12 }}
85
+ type="secondary"
86
+ >
87
+ {currentVersion.url}
88
+ </Text>
89
+ )}
90
+ </Flexbox>
91
+ </Card>
92
+ );
93
+ },
94
+ );
95
+
96
+ MemberCard.displayName = 'MemberCard';
97
+
98
+ const Members = memo(() => {
99
+ const { t } = useTranslation('discover');
100
+ const { memberAgents = [] } = useDetailContext();
101
+
102
+ // Sort: supervisors first, then by displayOrder
103
+ const sortedMembers = [...(memberAgents || [])].sort((a: any, b: any) => {
104
+ const aRole = a.role || a.agent?.role;
105
+ const bRole = b.role || b.agent?.role;
106
+ if (aRole === 'supervisor' && bRole !== 'supervisor') return -1;
107
+ if (aRole !== 'supervisor' && bRole === 'supervisor') return 1;
108
+ const aOrder = a.displayOrder || a.agent?.displayOrder || 0;
109
+ const bOrder = b.displayOrder || b.agent?.displayOrder || 0;
110
+ return aOrder - bOrder;
111
+ });
112
+
113
+ return (
114
+ <Flexbox gap={16}>
115
+ <Title level={4}>
116
+ {t('members.title', { defaultValue: 'Member Agents' })} ({memberAgents?.length || 0})
117
+ </Title>
118
+
119
+ <Flexbox gap={12}>
120
+ {sortedMembers.map((member: any, index) => {
121
+ // Support both flat structure and nested structure
122
+ const agent = member.agent || member;
123
+ const currentVersion = member.currentVersion || member;
124
+ return (
125
+ <MemberCard
126
+ agent={agent}
127
+ currentVersion={currentVersion}
128
+ key={agent.identifier || index}
129
+ />
130
+ );
131
+ })}
132
+ </Flexbox>
133
+ </Flexbox>
134
+ );
135
+ });
136
+
137
+ export default Members;
@@ -0,0 +1,88 @@
1
+ 'use client';
2
+
3
+ import { SOCIAL_URL } from '@lobechat/business-const';
4
+ import { Flexbox, Icon, Tabs } from '@lobehub/ui';
5
+ import { createStaticStyles } from 'antd-style';
6
+ import { BookOpenIcon, HistoryIcon, SquareUserIcon } from 'lucide-react';
7
+ import { memo } from 'react';
8
+ import { useTranslation } from 'react-i18next';
9
+
10
+
11
+ const styles = createStaticStyles(({ css, cssVar }) => {
12
+ return {
13
+ link: css`
14
+ color: ${cssVar.colorTextDescription};
15
+
16
+ &:hover {
17
+ color: ${cssVar.colorInfo};
18
+ }
19
+ `,
20
+ nav: css`
21
+ border-block-end: 1px solid ${cssVar.colorBorder};
22
+ `,
23
+ };
24
+ });
25
+
26
+ export enum GroupAgentNavKey {
27
+ Overview = 'overview',
28
+ SystemRole = 'systemRole',
29
+ Versions = 'versions',
30
+ }
31
+
32
+ interface NavProps {
33
+ activeTab?: GroupAgentNavKey;
34
+ mobile?: boolean;
35
+ setActiveTab?: (tab: GroupAgentNavKey) => void;
36
+ }
37
+
38
+ const Nav = memo<NavProps>(({ mobile, setActiveTab, activeTab = GroupAgentNavKey.Overview }) => {
39
+ const { t } = useTranslation('discover');
40
+
41
+ const nav = (
42
+ <Tabs
43
+ activeKey={activeTab}
44
+ compact={mobile}
45
+ items={[
46
+ {
47
+ icon: <Icon icon={BookOpenIcon} size={16} />,
48
+ key: GroupAgentNavKey.Overview,
49
+ label: t('groupAgents.details.overview.title', { defaultValue: 'Overview' }),
50
+ },
51
+ {
52
+ icon: <Icon icon={SquareUserIcon} size={16} />,
53
+ key: GroupAgentNavKey.SystemRole,
54
+ label: t('groupAgents.details.systemRole.title', { defaultValue: 'System Role' }),
55
+ },
56
+ {
57
+ icon: <Icon icon={HistoryIcon} size={16} />,
58
+ key: GroupAgentNavKey.Versions,
59
+ label: t('groupAgents.details.versions.title', { defaultValue: 'Versions' }),
60
+ },
61
+ ]}
62
+ onChange={(key) => setActiveTab?.(key as GroupAgentNavKey)}
63
+ />
64
+ );
65
+
66
+ return mobile ? (
67
+ nav
68
+ ) : (
69
+ <Flexbox align={'center'} className={styles.nav} horizontal justify={'space-between'}>
70
+ {nav}
71
+ <Flexbox gap={12} horizontal>
72
+ <a className={styles.link} href={SOCIAL_URL.discord} rel="noreferrer" target="_blank">
73
+ {t('groupAgents.details.nav.needHelp', { defaultValue: 'Need help?' })}
74
+ </a>
75
+ <a
76
+ className={styles.link}
77
+ href="https://github.com/lobehub/lobe-chat/issues/new/choose"
78
+ rel="noreferrer"
79
+ target="_blank"
80
+ >
81
+ {t('groupAgents.details.nav.reportIssue', { defaultValue: 'Report issue' })}
82
+ </a>
83
+ </Flexbox>
84
+ </Flexbox>
85
+ );
86
+ });
87
+
88
+ export default Nav;