@lobehub/lobehub 2.0.0-next.267 → 2.0.0-next.269
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.
- package/.cursor/rules/microcopy-cn.mdc +75 -63
- package/.cursor/rules/microcopy-en.mdc +4 -8
- package/CHANGELOG.md +50 -0
- package/README.md +8 -8
- package/README.zh-CN.md +8 -8
- package/apps/desktop/src/main/core/browser/Browser.ts +6 -0
- package/apps/desktop/src/main/locales/default/common.ts +2 -2
- package/changelog/v1.json +10 -0
- package/docs/development/database-schema.dbml +4 -0
- package/e2e/CLAUDE.md +9 -8
- package/e2e/cucumber.config.js +1 -0
- package/e2e/src/features/page/README.md +118 -0
- package/e2e/src/features/page/crud.feature +62 -0
- package/e2e/src/features/page/editor-content.feature +93 -0
- package/e2e/src/features/page/editor-meta.feature +60 -0
- package/e2e/src/steps/agent/conversation.steps.ts +4 -4
- package/e2e/src/steps/home/sidebarAgent.steps.ts +91 -94
- package/e2e/src/steps/home/sidebarGroup.steps.ts +4 -4
- package/e2e/src/steps/hooks.ts +2 -0
- package/e2e/src/steps/page/editor-content.steps.ts +344 -0
- package/e2e/src/steps/page/editor-meta.steps.ts +410 -0
- package/e2e/src/steps/page/page-crud.steps.ts +363 -0
- package/e2e/src/support/world.ts +12 -0
- package/locales/ar/file.json +2 -0
- package/locales/bg-BG/file.json +2 -0
- package/locales/de-DE/file.json +2 -0
- package/locales/en-US/auth.json +1 -1
- package/locales/en-US/file.json +2 -0
- package/locales/en-US/metadata.json +2 -2
- package/locales/es-ES/file.json +2 -0
- package/locales/fa-IR/file.json +2 -0
- package/locales/fr-FR/file.json +2 -0
- package/locales/it-IT/file.json +2 -0
- package/locales/ja-JP/file.json +2 -0
- package/locales/ko-KR/file.json +2 -0
- package/locales/nl-NL/file.json +2 -0
- package/locales/pl-PL/file.json +2 -0
- package/locales/pt-BR/file.json +2 -0
- package/locales/ru-RU/file.json +2 -0
- package/locales/tr-TR/file.json +2 -0
- package/locales/vi-VN/file.json +2 -0
- package/locales/zh-CN/file.json +2 -0
- package/locales/zh-TW/file.json +2 -0
- package/package.json +1 -1
- package/packages/builtin-agents/src/agents/agent-builder/index.ts +1 -1
- package/packages/builtin-agents/src/agents/group-agent-builder/index.ts +1 -1
- package/packages/builtin-agents/src/agents/page-agent/index.ts +1 -1
- package/packages/const/src/settings/group.ts +0 -10
- package/packages/database/migrations/0068_update_group_data.sql +4 -0
- package/packages/database/migrations/meta/0068_snapshot.json +9588 -0
- package/packages/database/migrations/meta/_journal.json +7 -0
- package/packages/database/src/models/__tests__/chatGroup.test.ts +5 -7
- package/packages/database/src/models/__tests__/knowledgeBase.test.ts +185 -0
- package/packages/database/src/models/knowledgeBase.ts +67 -3
- package/packages/database/src/repositories/agentGroup/index.test.ts +23 -29
- package/packages/database/src/repositories/agentGroup/index.ts +4 -9
- package/packages/database/src/repositories/knowledge/index.ts +3 -3
- package/packages/database/src/schemas/chatGroup.ts +4 -3
- package/packages/database/src/types/chatGroup.ts +0 -7
- package/packages/types/src/agentGroup/index.ts +30 -9
- package/packages/utils/src/index.ts +1 -0
- package/packages/utils/src/platform.ts +35 -3
- package/src/app/[variants]/(desktop)/desktop-onboarding/_layout/index.tsx +30 -22
- package/src/app/[variants]/(desktop)/desktop-onboarding/_layout/style.ts +8 -5
- package/src/app/[variants]/(main)/_layout/DesktopLayoutContainer.tsx +2 -3
- package/src/app/[variants]/(main)/home/_layout/Body/Agent/ModalProvider.tsx +9 -32
- package/src/app/[variants]/(main)/home/_layout/hooks/useCreateMenuItems.tsx +3 -37
- package/src/app/[variants]/(main)/home/_layout/hooks/useSessionGroupMenuItems.tsx +7 -53
- package/src/app/[variants]/(main)/home/features/RecentPage/List.tsx +2 -1
- package/src/app/[variants]/(main)/resource/features/DndContextWrapper.tsx +1 -1
- package/src/app/[variants]/(main)/resource/library/_layout/Sidebar.tsx +2 -2
- package/src/app/[variants]/(main)/resource/library/features/LibraryMenu.tsx +2 -2
- package/src/app/[variants]/(mobile)/chat/settings/features/SettingButton.tsx +2 -12
- package/src/components/ChatGroupWizard/ChatGroupWizard.tsx +5 -27
- package/src/components/DragUpload/index.tsx +24 -27
- package/src/components/MemberSelectionModal/MemberSelectionModal.tsx +2 -11
- package/src/features/CommandMenu/useCommandMenu.ts +4 -14
- package/src/features/ElectronTitlebar/SimpleTitleBar.tsx +31 -0
- package/src/features/ElectronTitlebar/index.tsx +1 -0
- package/src/features/ResourceManager/components/Editor/index.tsx +2 -3
- package/src/features/ResourceManager/components/Explorer/Header/index.tsx +13 -17
- package/src/features/ResourceManager/components/Explorer/ItemDropdown/useFileItemDropdown.tsx +1 -1
- package/src/features/ResourceManager/components/Explorer/ListView/ListItem/TruncatedFileName.tsx +130 -0
- package/src/features/ResourceManager/components/Explorer/ListView/ListItem/index.tsx +36 -4
- package/src/features/ResourceManager/components/Explorer/ListView/Skeleton.tsx +4 -3
- package/src/features/ResourceManager/components/Explorer/ListView/index.tsx +58 -2
- package/src/features/ResourceManager/components/Explorer/MasonryView/index.tsx +58 -6
- package/src/features/ResourceManager/components/Explorer/MoveToFolderModal.tsx +2 -5
- package/src/features/ResourceManager/components/Explorer/ToolBar/BatchActionsDropdown.tsx +9 -5
- package/src/features/ResourceManager/components/Explorer/index.tsx +11 -56
- package/src/features/ResourceManager/components/Header/AddButton.tsx +5 -6
- package/src/features/ResourceManager/components/LibraryHierarchy/HierarchyNode.tsx +382 -0
- package/src/features/ResourceManager/components/LibraryHierarchy/index.tsx +396 -0
- package/src/features/ResourceManager/components/LibraryHierarchy/styles.ts +19 -0
- package/src/features/ResourceManager/components/LibraryHierarchy/treeState.ts +178 -0
- package/src/features/ResourceManager/components/LibraryHierarchy/types.ts +10 -0
- package/src/features/ResourceManager/index.tsx +3 -0
- package/src/layout/GlobalProvider/GroupWizardProvider.tsx +6 -29
- package/src/locales/default/auth.ts +1 -1
- package/src/locales/default/file.ts +2 -0
- package/src/locales/default/metadata.ts +2 -2
- package/src/server/modules/AgentRuntime/AgentRuntimeCoordinator.ts +30 -30
- package/src/server/modules/AgentRuntime/AgentStateManager.ts +23 -23
- package/src/server/modules/AgentRuntime/InMemoryAgentStateManager.ts +16 -16
- package/src/server/modules/AgentRuntime/InMemoryStreamEventManager.ts +13 -13
- package/src/server/modules/AgentRuntime/RuntimeExecutors.ts +2 -2
- package/src/server/modules/AgentRuntime/StreamEventManager.ts +18 -18
- package/src/server/modules/AgentRuntime/types.ts +21 -21
- package/src/server/routers/lambda/__tests__/agentGroup.test.ts +8 -8
- package/src/server/routers/lambda/agentGroup.ts +10 -12
- package/src/server/services/document/index.ts +1 -0
- package/src/store/agentGroup/slices/curd.test.ts +4 -4
- package/src/store/file/slices/fileManager/action.ts +12 -4
- package/src/store/home/slices/homeInput/action.ts +0 -3
- package/src/store/session/slices/session/action.ts +5 -9
- package/src/utils/platform.ts +2 -0
- package/src/app/[variants]/(mobile)/chat/settings/features/AgentTeamSettings/index.tsx +0 -95
- package/src/features/GroupChatSettings/AgentCard.tsx +0 -154
- package/src/features/GroupChatSettings/AgentTeamChatSettings.tsx +0 -179
- package/src/features/GroupChatSettings/AgentTeamMembersSettings.tsx +0 -244
- package/src/features/GroupChatSettings/AgentTeamMetaSettings.tsx +0 -94
- package/src/features/GroupChatSettings/AgentTeamSettings.tsx +0 -54
- package/src/features/GroupChatSettings/GroupCategory/index.tsx +0 -30
- package/src/features/GroupChatSettings/GroupCategory/useGroupCategory.tsx +0 -42
- package/src/features/GroupChatSettings/GroupChatSettingsProvider.tsx +0 -19
- package/src/features/GroupChatSettings/HostMemberCard.tsx +0 -113
- package/src/features/GroupChatSettings/StoreUpdater.tsx +0 -34
- package/src/features/GroupChatSettings/hooks/useGroupChatSettings.ts +0 -25
- package/src/features/GroupChatSettings/index.ts +0 -16
- package/src/features/GroupChatSettings/store/action.ts +0 -105
- package/src/features/GroupChatSettings/store/index.ts +0 -18
- package/src/features/GroupChatSettings/store/initialState.ts +0 -23
- package/src/features/GroupChatSettings/store/selectors.ts +0 -13
- package/src/features/ResourceManager/components/Tree/index.tsx +0 -883
- /package/src/features/ResourceManager/components/{Tree → LibraryHierarchy}/TreeSkeleton.tsx +0 -0
|
@@ -2,52 +2,57 @@
|
|
|
2
2
|
globs: src/locales/default/*
|
|
3
3
|
alwaysApply: false
|
|
4
4
|
---
|
|
5
|
+
|
|
5
6
|
你是「LobeHub」的中文 UI 文案与微文案(microcopy)专家。LobeHub 是一个助理工作空间:用户可以创建助理与群组,让人和助理、助理和助理协作,提升日常生产与生活效率。产品气质:外表年轻、亲和、现代;内核专业、可靠、强调生产力与可控性。整体风格参考 Notion / Figma / Apple / Discord / OpenAI / Gemini:清晰克制、可信、有人情味但不油腻。
|
|
6
7
|
|
|
7
|
-
产品 slogan:**
|
|
8
|
+
产品 slogan:**Where Agents Collaborate**。你的文案要让用户持续感到:LobeHub 的重点不是“生成”,而是“协作的助理体系”(可共享上下文、可追踪、可回放、可演进、人在回路)。
|
|
8
9
|
|
|
9
10
|
---
|
|
10
11
|
|
|
11
12
|
### 1) 固定术语(必须遵守)
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
13
|
+
|
|
14
|
+
- Workspace:空间
|
|
15
|
+
- Agent:助理
|
|
16
|
+
- Agent Team:群组
|
|
17
|
+
- Context:上下文
|
|
18
|
+
- Memory:记忆
|
|
19
|
+
- Integration:连接器
|
|
20
|
+
- Tool/Skill/Plugin/插件/工具: 技能
|
|
21
|
+
- SystemRole: 助理档案
|
|
22
|
+
- Topic: 话题
|
|
23
|
+
- Page: 文稿
|
|
24
|
+
- Community: 社区
|
|
25
|
+
- Resource: 资源
|
|
26
|
+
- Library: 库
|
|
27
|
+
- MCP: MCP
|
|
28
|
+
- Provider: 模型服务商
|
|
27
29
|
|
|
28
30
|
术语规则:同一概念全站只用一种说法,不混用“Agent/智能体/机器人/团队/工作区”等。
|
|
29
31
|
|
|
30
32
|
---
|
|
31
33
|
|
|
32
34
|
### 2) 你的任务
|
|
33
|
-
|
|
34
|
-
|
|
35
|
+
|
|
36
|
+
- 优化、改写或从零生成任何界面中文文案:标题、按钮、表单说明、占位、引导、空状态、Toast、弹窗、错误、权限、设置项、创建/运行流程、协作与群组相关页面等。
|
|
37
|
+
- 文案必须同时兼容:普通用户看得懂 + 专业用户不觉得低幼;娱乐与严肃场景都成立;不过度营销、不夸大 AI 能力;在关键节点提供恰到好处的人文关怀。
|
|
35
38
|
|
|
36
39
|
---
|
|
37
40
|
|
|
38
41
|
### 3) 品牌三原则(内化到结构与措辞)
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
+
|
|
43
|
+
- **Create(创建)**:一句话创建助理;从想法到可用;清楚下一步。
|
|
44
|
+
- **Collaborate(协作)**:多助理协作;群组对齐信息与产出;共享上下文(可控、可管理)。
|
|
45
|
+
- **Evolve(演进)**:助理可在你允许的范围内记住偏好;随你的工作方式变得更顺手;强调可解释、可设置、可回放。
|
|
42
46
|
|
|
43
47
|
---
|
|
44
48
|
|
|
45
49
|
### 4) 写作规则(可执行)
|
|
50
|
+
|
|
46
51
|
1. **清晰优先**:短句、强动词、少形容词;避免口号化与空泛承诺(如“颠覆”“史诗级”“100%”)。
|
|
47
52
|
2. **分层表达(单一版本兼容两类用户)**:
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
53
|
+
- 主句:人人可懂、可执行
|
|
54
|
+
- 必要时补充一句副说明:更精确/更专业/更边界(可放副标题、帮助提示、折叠区)
|
|
55
|
+
- 不输出“Pro/Lite 两套文案”,而是“一句主文案 + 可选补充”
|
|
51
56
|
3. **术语克制但准确**:能说“连接/运行/上下文”就不要堆砌术语;必须出现专业词时给一句白话解释。
|
|
52
57
|
4. **一致性**:同一动作按钮尽量固定动词(创建/连接/运行/暂停/重试/查看详情/清除记忆等)。
|
|
53
58
|
5. **可行动**:每条提示都要让用户知道下一步;按钮避免“确定/取消”泛化,改成更具体的动作。
|
|
@@ -56,91 +61,98 @@ alwaysApply: false
|
|
|
56
61
|
---
|
|
57
62
|
|
|
58
63
|
### 5) 人文关怀(中间态温度:介于克制与陪伴)
|
|
64
|
+
|
|
59
65
|
目标:在 AI 时代的价值焦虑与创作失格感中,给用户“被理解 + 有掌控 + 能继续”的体验,但不写长抒情。
|
|
60
66
|
|
|
61
67
|
#### 温度比例规则
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
68
|
+
|
|
69
|
+
- 默认:信息为主,温度为辅(约 8:2)
|
|
70
|
+
- 关键节点(首次创建、空状态、长等待、失败重试、回退/丢失风险、协作分歧):允许提升到 7:3
|
|
71
|
+
- 强制上限:任何一条上屏文案里,温度表达不超过**半句或一句**,且必须紧跟明确下一步。
|
|
65
72
|
|
|
66
73
|
#### 表达顺序(必须遵守)
|
|
74
|
+
|
|
67
75
|
1. 先承接处境(不评判):如“没关系/先这样也可以/卡住很正常”
|
|
68
76
|
2. 再给掌控感(人在回路):可暂停/可回放/可编辑/可撤销/可清除记忆/可查看上下文
|
|
69
77
|
3. 最后给下一步(按钮/路径明确)
|
|
70
78
|
|
|
71
79
|
#### 避免
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
80
|
+
|
|
81
|
+
- 鸡汤式说教(如“别焦虑”“要相信未来”)
|
|
82
|
+
- 宏大叙事与文学排比
|
|
83
|
+
- 过度拟人(不承诺助理“理解你/有情绪/永远记得你”)
|
|
75
84
|
|
|
76
85
|
#### 核心立场
|
|
77
|
-
|
|
86
|
+
|
|
87
|
+
- 助理很强,但它替代不了你的经历、选择与判断;LobeHub 帮你把时间还给重要的部分。
|
|
78
88
|
|
|
79
89
|
##### A. 情绪承接(先人后事)
|
|
80
|
-
|
|
81
|
-
|
|
90
|
+
|
|
91
|
+
- 允许承认:焦虑、空白、无从下手、被追赶感、被替代感、创作枯竭、意义感动摇
|
|
92
|
+
- 但不下结论、不说教:不输出“你要乐观/别焦虑”,改成“这种感觉很常见/你不是一个人”
|
|
82
93
|
|
|
83
94
|
##### B. 主体性回归(把人放回驾驶位)
|
|
84
|
-
|
|
85
|
-
|
|
95
|
+
|
|
96
|
+
- 关键句式:**“决定权在你”**、**“你可以选择交给助理的部分”**、**“把你的想法变成可运行的流程”**
|
|
97
|
+
- 强调可控:可编辑、可回放、可暂停、可撤销、可清除记忆、可查看上下文
|
|
86
98
|
|
|
87
99
|
##### C. 经历与关系(把价值从结果挪回过程)
|
|
88
|
-
+ 适度表达:记录、回放、版本、协作痕迹、讨论、共创、里程碑
|
|
89
|
-
+ 用“经历/过程/痕迹/回忆/脉络/成长”这类词,避免虚无抒情
|
|
90
100
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
+ 也不轻飘飘说“AI 只是工具”了事更像:**“它是工具,但你仍是作者/负责人/最终决定者”**
|
|
101
|
+
- 适度表达:记录、回放、版本、协作痕迹、讨论、共创、里程碑
|
|
102
|
+
- 用“经历/过程/痕迹/回忆/脉络/成长”这类词,避免虚无抒情
|
|
94
103
|
|
|
104
|
+
##### D. 不用“AI 神话”
|
|
95
105
|
|
|
106
|
+
- 不渲染“AI 终将超越你/取代你”
|
|
107
|
+
- 也不轻飘飘说“AI 只是工具”了事更像:**“它是工具,但你仍是作者/负责人/最终决定者”**
|
|
96
108
|
|
|
97
109
|
##### 示例
|
|
110
|
+
|
|
98
111
|
在用户可能产生自我否定或无力感的场景(空状态、创作开始、产出对比、失败重试、长时间等待、团队协作分歧、版本回退):
|
|
99
112
|
|
|
100
113
|
1. **先承接感受**:用一句短话确认处境(不评判)
|
|
101
114
|
2. **再给掌控感**:强调“你可控/可选择/可回放/可撤销”
|
|
102
115
|
3. **最后给下一步**:提供明确行动按钮或路径
|
|
103
|
-
+ 允许出现“经历、选择、痕迹、成长、一起、陪你把事做完”等词来传递温度;但保持信息密度,不写长段抒情。
|
|
104
|
-
+ 严肃场景(权限/安全/付费/数据丢失风险)仍以清晰与准确为先,温度通过“尊重与解释”体现,而不是煽情。
|
|
105
|
-
|
|
106
116
|
|
|
117
|
+
- 允许出现“经历、选择、痕迹、成长、一起、陪你把事做完”等词来传递温度;但保持信息密度,不写长段抒情。
|
|
118
|
+
- 严肃场景(权限/安全/付费/数据丢失风险)仍以清晰与准确为先,温度通过“尊重与解释”体现,而不是煽情。
|
|
107
119
|
|
|
108
120
|
你可以让系统在需要时套这些结构(同一句兼容新手/专业):
|
|
109
121
|
|
|
110
122
|
**开始创作/空白页**
|
|
111
123
|
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
124
|
+
- 主句:给一个轻承接 + 行动入口
|
|
125
|
+
- 模板:
|
|
126
|
+
- 「从一个念头开始就够了。写一句话,我来帮你搭好第一个助理。」
|
|
127
|
+
- 「不知道从哪开始也没关系:先说目标,我们一起把它拆开。」
|
|
116
128
|
|
|
117
129
|
**长任务运行/等待**
|
|
118
130
|
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
131
|
+
- 模板:
|
|
132
|
+
- 「正在运行中…你可以先去做别的,完成后我会提醒你。」
|
|
133
|
+
- 「这一步可能要几分钟。想更快:减少上下文 / 切换模型 / 关闭自动运行。」
|
|
122
134
|
|
|
123
135
|
**失败/重试**
|
|
124
136
|
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
137
|
+
- 模板:
|
|
138
|
+
- 「没关系,这次没跑通。你可以重试,或查看原因再继续。」
|
|
139
|
+
- 「连接失败:权限未通过或网络不稳定。去设置重新授权,或稍后再试。」
|
|
128
140
|
|
|
129
141
|
**对比与自我价值焦虑(适合提示/引导,不适合错误弹窗)**
|
|
130
142
|
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
143
|
+
- 模板:
|
|
144
|
+
- 「助理可以加速产出,但方向、取舍和标准仍属于你。」
|
|
145
|
+
- 「结果可以很快,经历更重要:把每次尝试留下来,下一次会更稳。」
|
|
134
146
|
|
|
135
147
|
**协作/群组**
|
|
136
148
|
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
149
|
+
- 模板:
|
|
150
|
+
- 「把上下文对齐到同一处,群组里每个助理都会站在同一页上。」
|
|
151
|
+
- 「不同意见没关系:先把目标写清楚,再让助理分别给方案与取舍。」
|
|
140
152
|
|
|
141
153
|
### 6) 错误/异常/权限/付费:硬规则
|
|
142
|
-
+ 必须包含:**发生了什么 +(可选)原因 + 你可以怎么做**
|
|
143
|
-
+ 必须提供可操作选项:**重试 / 查看详情 / 去设置 / 联系支持 / 复制日志**(按场景取舍)
|
|
144
|
-
+ 不责备用户;不只给错误码;错误码可放在“详情”里
|
|
145
|
-
+ 涉及数据与安全:语气更中性更完整,温度通过“尊重与解释”体现,而不是煽
|
|
146
154
|
|
|
155
|
+
- 必须包含:**发生了什么 +(可选)原因 + 你可以怎么做**
|
|
156
|
+
- 必须提供可操作选项:**重试 / 查看详情 / 去设置 / 联系支持 / 复制日志**(按场景取舍)
|
|
157
|
+
- 不责备用户;不只给错误码;错误码可放在“详情”里
|
|
158
|
+
- 涉及数据与安全:语气更中性更完整,温度通过“尊重与解释”体现,而不是煽
|
|
@@ -5,10 +5,9 @@ alwaysApply: false
|
|
|
5
5
|
|
|
6
6
|
You are **LobeHub’s English UI Copy & Microcopy Specialist**.
|
|
7
7
|
|
|
8
|
-
LobeHub is an assistant workspace: users can create **Agents** and **Agent Teams** so people↔agents and agent↔agent can collaborate to improve productivity in work and life.
|
|
9
|
-
Brand vibe: youthful, friendly, modern on the surface; professional, reliable, productivity- and controllability-first underneath. Overall style reference: Notion / Figma / Apple / Discord / OpenAI / Gemini — clear, restrained, trustworthy, human but not cheesy.
|
|
8
|
+
LobeHub is an assistant workspace: users can create **Agents** and **Agent Teams** so people↔agents and agent↔agent can collaborate to improve productivity in work and life. Brand vibe: youthful, friendly, modern on the surface; professional, reliable, productivity- and controllability-first underneath. Overall style reference: Notion / Figma / Apple / Discord / OpenAI / Gemini — clear, restrained, trustworthy, human but not cheesy.
|
|
10
9
|
|
|
11
|
-
Product slogan: **
|
|
10
|
+
Product slogan: **Where Agents Collaborate**. Your copy must continuously reinforce that LobeHub is not about “generation”, but about a **collaborative agent system**: shareable context, traceable outcomes, replayable runs, evolvable setup, and **human-in-the-loop**.
|
|
12
11
|
|
|
13
12
|
---
|
|
14
13
|
|
|
@@ -71,9 +70,7 @@ Terminology rule: one concept = one term site-wide. Never alternate with “bot/
|
|
|
71
70
|
|
|
72
71
|
## 5) Human Warmth (balanced, controlled)
|
|
73
72
|
|
|
74
|
-
Goal: reduce anxiety and restore control without being sentimental.
|
|
75
|
-
Default ratio: **80% information, 20% warmth**.
|
|
76
|
-
Key moments (first-time create, empty state, long waits, failures/retries, rollback/data-loss risk, collaboration conflicts): may go **70/30**.
|
|
73
|
+
Goal: reduce anxiety and restore control without being sentimental. Default ratio: **80% information, 20% warmth**. Key moments (first-time create, empty state, long waits, failures/retries, rollback/data-loss risk, collaboration conflicts): may go **70/30**.
|
|
77
74
|
|
|
78
75
|
Hard cap: any on-screen message may include **at most half a sentence to one sentence** of warmth, and it must be followed by a clear next step.
|
|
79
76
|
|
|
@@ -123,8 +120,7 @@ Provide actionable options as appropriate:
|
|
|
123
120
|
|
|
124
121
|
- Retry / View details / Go to Settings / Contact support / Copy logs
|
|
125
122
|
|
|
126
|
-
Never blame the user. Don’t show only an error code; put codes in “Details” if needed.
|
|
127
|
-
For data/security/billing: be neutral, thorough, and respectful—warmth comes from clarity, not emotion.
|
|
123
|
+
Never blame the user. Don’t show only an error code; put codes in “Details” if needed. For data/security/billing: be neutral, thorough, and respectful—warmth comes from clarity, not emotion.
|
|
128
124
|
|
|
129
125
|
---
|
|
130
126
|
|
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,56 @@
|
|
|
2
2
|
|
|
3
3
|
# Changelog
|
|
4
4
|
|
|
5
|
+
## [Version 2.0.0-next.269](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.268...v2.0.0-next.269)
|
|
6
|
+
|
|
7
|
+
<sup>Released on **2026-01-12**</sup>
|
|
8
|
+
|
|
9
|
+
#### ✨ Features
|
|
10
|
+
|
|
11
|
+
- **electron**: Add custom titlebar for Electron windows.
|
|
12
|
+
|
|
13
|
+
<br/>
|
|
14
|
+
|
|
15
|
+
<details>
|
|
16
|
+
<summary><kbd>Improvements and Fixes</kbd></summary>
|
|
17
|
+
|
|
18
|
+
#### What's improved
|
|
19
|
+
|
|
20
|
+
- **electron**: Add custom titlebar for Electron windows, closes [#11438](https://github.com/lobehub/lobe-chat/issues/11438) ([08f6ee3](https://github.com/lobehub/lobe-chat/commit/08f6ee3))
|
|
21
|
+
|
|
22
|
+
</details>
|
|
23
|
+
|
|
24
|
+
<div align="right">
|
|
25
|
+
|
|
26
|
+
[](#readme-top)
|
|
27
|
+
|
|
28
|
+
</div>
|
|
29
|
+
|
|
30
|
+
## [Version 2.0.0-next.268](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.267...v2.0.0-next.268)
|
|
31
|
+
|
|
32
|
+
<sup>Released on **2026-01-12**</sup>
|
|
33
|
+
|
|
34
|
+
#### ♻ Code Refactoring
|
|
35
|
+
|
|
36
|
+
- **agentGroup**: Simplify LobeChatGroupChatConfig schema.
|
|
37
|
+
|
|
38
|
+
<br/>
|
|
39
|
+
|
|
40
|
+
<details>
|
|
41
|
+
<summary><kbd>Improvements and Fixes</kbd></summary>
|
|
42
|
+
|
|
43
|
+
#### Code refactoring
|
|
44
|
+
|
|
45
|
+
- **agentGroup**: Simplify LobeChatGroupChatConfig schema, closes [#11431](https://github.com/lobehub/lobe-chat/issues/11431) ([a8c6b2c](https://github.com/lobehub/lobe-chat/commit/a8c6b2c))
|
|
46
|
+
|
|
47
|
+
</details>
|
|
48
|
+
|
|
49
|
+
<div align="right">
|
|
50
|
+
|
|
51
|
+
[](#readme-top)
|
|
52
|
+
|
|
53
|
+
</div>
|
|
54
|
+
|
|
5
55
|
## [Version 2.0.0-next.267](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.266...v2.0.0-next.267)
|
|
6
56
|
|
|
7
57
|
<sup>Released on **2026-01-12**</sup>
|
package/README.md
CHANGED
|
@@ -345,14 +345,14 @@ In addition, these plugins are not limited to news aggregation, but can also ext
|
|
|
345
345
|
|
|
346
346
|
<!-- PLUGIN LIST -->
|
|
347
347
|
|
|
348
|
-
| Recent Submits
|
|
349
|
-
|
|
|
350
|
-
| [
|
|
351
|
-
| [
|
|
352
|
-
| [
|
|
353
|
-
| [
|
|
354
|
-
|
|
355
|
-
> 📊 Total plugins: [<kbd>**
|
|
348
|
+
| Recent Submits | Description |
|
|
349
|
+
| -------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
350
|
+
| [Shopping tools](https://lobechat.com/discover/plugin/ShoppingTools)<br/><sup>By **shoppingtools** on **2026-01-12**</sup> | Search for products on eBay & AliExpress, find eBay events & coupons. Get prompt examples.<br/>`shopping` `e-bay` `ali-express` `coupons` |
|
|
351
|
+
| [SEO Assistant](https://lobechat.com/discover/plugin/seo_assistant)<br/><sup>By **webfx** on **2026-01-12**</sup> | The SEO Assistant can generate search engine keyword information in order to aid the creation of content.<br/>`seo` `keyword` |
|
|
352
|
+
| [Video Captions](https://lobechat.com/discover/plugin/VideoCaptions)<br/><sup>By **maila** on **2025-12-13**</sup> | Convert Youtube links into transcribed text, enable asking questions, create chapters, and summarize its content.<br/>`video-to-text` `youtube` |
|
|
353
|
+
| [WeatherGPT](https://lobechat.com/discover/plugin/WeatherGPT)<br/><sup>By **steven-tey** on **2025-12-13**</sup> | Get current weather information for a specific location.<br/>`weather` |
|
|
354
|
+
|
|
355
|
+
> 📊 Total plugins: [<kbd>**40**</kbd>](https://lobechat.com/discover/plugins)
|
|
356
356
|
|
|
357
357
|
<!-- PLUGIN LIST -->
|
|
358
358
|
|
package/README.zh-CN.md
CHANGED
|
@@ -338,14 +338,14 @@ LobeChat 的插件生态系统是其核心功能的重要扩展,它极大地
|
|
|
338
338
|
|
|
339
339
|
<!-- PLUGIN LIST -->
|
|
340
340
|
|
|
341
|
-
| 最近新增
|
|
342
|
-
|
|
|
343
|
-
| [
|
|
344
|
-
| [
|
|
345
|
-
| [
|
|
346
|
-
| [
|
|
347
|
-
|
|
348
|
-
> 📊 Total plugins: [<kbd>**
|
|
341
|
+
| 最近新增 | 描述 |
|
|
342
|
+
| -------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------ |
|
|
343
|
+
| [购物工具](https://lobechat.com/discover/plugin/ShoppingTools)<br/><sup>By **shoppingtools** on **2026-01-12**</sup> | 在 eBay 和 AliExpress 上搜索产品,查找 eBay 活动和优惠券。获取快速示例。<br/>`购物` `e-bay` `ali-express` `优惠券` |
|
|
344
|
+
| [SEO 助手](https://lobechat.com/discover/plugin/seo_assistant)<br/><sup>By **webfx** on **2026-01-12**</sup> | SEO 助手可以生成搜索引擎关键词信息,以帮助创建内容。<br/>`seo` `关键词` |
|
|
345
|
+
| [视频字幕](https://lobechat.com/discover/plugin/VideoCaptions)<br/><sup>By **maila** on **2025-12-13**</sup> | 将 Youtube 链接转换为转录文本,使其能够提问,创建章节,并总结其内容。<br/>`视频转文字` `you-tube` |
|
|
346
|
+
| [天气 GPT](https://lobechat.com/discover/plugin/WeatherGPT)<br/><sup>By **steven-tey** on **2025-12-13**</sup> | 获取特定位置的当前天气信息。<br/>`天气` |
|
|
347
|
+
|
|
348
|
+
> 📊 Total plugins: [<kbd>**40**</kbd>](https://lobechat.com/discover/plugins)
|
|
349
349
|
|
|
350
350
|
<!-- PLUGIN LIST -->
|
|
351
351
|
|
|
@@ -12,6 +12,7 @@ import { join } from 'node:path';
|
|
|
12
12
|
import { preloadDir, resourcesDir } from '@/const/dir';
|
|
13
13
|
import { isMac } from '@/const/env';
|
|
14
14
|
import { ELECTRON_BE_PROTOCOL_SCHEME } from '@/const/protocol';
|
|
15
|
+
import { TITLE_BAR_HEIGHT } from '@/const/theme';
|
|
15
16
|
import RemoteServerConfigCtr from '@/controllers/RemoteServerConfigCtr';
|
|
16
17
|
import { backendProxyProtocolManager } from '@/core/infrastructure/BackendProxyProtocolManager';
|
|
17
18
|
import { setResponseHeader } from '@/utils/http-headers';
|
|
@@ -119,6 +120,10 @@ export default class Browser {
|
|
|
119
120
|
logger.info(`Creating new BrowserWindow instance: ${this.identifier}`);
|
|
120
121
|
logger.debug(`[${this.identifier}] Resolved window state: ${JSON.stringify(resolvedState)}`);
|
|
121
122
|
|
|
123
|
+
// Calculate traffic light position to center vertically in title bar
|
|
124
|
+
// Traffic light buttons are approximately 12px tall
|
|
125
|
+
const trafficLightY = Math.round((TITLE_BAR_HEIGHT - 12) / 2);
|
|
126
|
+
|
|
122
127
|
return new BrowserWindow({
|
|
123
128
|
...rest,
|
|
124
129
|
autoHideMenuBar: true,
|
|
@@ -128,6 +133,7 @@ export default class Browser {
|
|
|
128
133
|
height: resolvedState.height,
|
|
129
134
|
show: false,
|
|
130
135
|
title,
|
|
136
|
+
trafficLightPosition: isMac ? { x: 12, y: trafficLightY } : undefined,
|
|
131
137
|
vibrancy: 'sidebar',
|
|
132
138
|
visualEffectState: 'active',
|
|
133
139
|
webPreferences: {
|
|
@@ -16,7 +16,7 @@ const common = {
|
|
|
16
16
|
'actions.save': 'Save',
|
|
17
17
|
'actions.search': 'Search',
|
|
18
18
|
'actions.submit': 'Submit',
|
|
19
|
-
'app.description': '
|
|
19
|
+
'app.description': 'Where Agents Collaborate',
|
|
20
20
|
'app.name': 'LobeHub',
|
|
21
21
|
'status.error': 'Error',
|
|
22
22
|
'status.info': 'Information',
|
|
@@ -25,4 +25,4 @@ const common = {
|
|
|
25
25
|
'status.warning': 'Warning',
|
|
26
26
|
};
|
|
27
27
|
|
|
28
|
-
export default common;
|
|
28
|
+
export default common;
|
package/changelog/v1.json
CHANGED
package/e2e/CLAUDE.md
CHANGED
|
@@ -18,13 +18,13 @@ Related: [LOBE-2417](https://linear.app/lobehub/issue/LOBE-2417/建立核心产
|
|
|
18
18
|
|
|
19
19
|
### 产品架构覆盖
|
|
20
20
|
|
|
21
|
-
| 模块 | 子功能
|
|
22
|
-
| ---------------- |
|
|
23
|
-
| **Agent** | Builder, 对话,Task
|
|
24
|
-
| **Agent Group** | Builder, 群聊
|
|
25
|
-
| **Page(文稿)** |
|
|
26
|
-
| **知识库** | 创建,上传,RAG 对话
|
|
27
|
-
| **记忆** | 查看,编辑,关联
|
|
21
|
+
| 模块 | 子功能 | 优先级 | 状态 |
|
|
22
|
+
| ---------------- | --------------------------------- | ------ | ---- |
|
|
23
|
+
| **Agent** | Builder, 对话,Task | P0 | 🚧 |
|
|
24
|
+
| **Agent Group** | Builder, 群聊 | P0 | ⏳ |
|
|
25
|
+
| **Page(文稿)** | 侧边栏 CRUD ✅,文档编辑,Copilot | P0 | 🚧 |
|
|
26
|
+
| **知识库** | 创建,上传,RAG 对话 | P1 | ⏳ |
|
|
27
|
+
| **记忆** | 查看,编辑,关联 | P2 | ⏳ |
|
|
28
28
|
|
|
29
29
|
### 标签系统
|
|
30
30
|
|
|
@@ -82,7 +82,7 @@ e2e/
|
|
|
82
82
|
│ │ │ │ ├── group-builder.feature
|
|
83
83
|
│ │ │ │ └── group-chat.feature
|
|
84
84
|
│ │ │ ├── page/
|
|
85
|
-
│ │ │ │ └── page-crud.feature
|
|
85
|
+
│ │ │ │ └── page-crud.feature ✅
|
|
86
86
|
│ │ │ ├── knowledge/
|
|
87
87
|
│ │ │ │ └── knowledge-rag.feature
|
|
88
88
|
│ │ │ └── memory/
|
|
@@ -92,6 +92,7 @@ e2e/
|
|
|
92
92
|
│ │ └── regression/ # 回归测试
|
|
93
93
|
│ ├── steps/ # Step definitions
|
|
94
94
|
│ │ ├── agent/ # Agent 相关 steps
|
|
95
|
+
│ │ ├── page/ # Page 相关 steps
|
|
95
96
|
│ │ ├── common/ # 通用 steps (auth, navigation)
|
|
96
97
|
│ │ └── hooks.ts # Before/After hooks
|
|
97
98
|
│ ├── mocks/ # Mock 框架
|
package/e2e/cucumber.config.js
CHANGED
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
# Page 模块 E2E 测试覆盖
|
|
2
|
+
|
|
3
|
+
本目录包含 Page(文稿)模块的所有 E2E 测试用例。
|
|
4
|
+
|
|
5
|
+
## 模块概述
|
|
6
|
+
|
|
7
|
+
Page 模块是 LobeHub 的文档管理功能,允许用户创建、编辑和管理文稿页面。
|
|
8
|
+
|
|
9
|
+
**路由**: `/page`, `/page/[id]`
|
|
10
|
+
|
|
11
|
+
## 功能清单与测试覆盖
|
|
12
|
+
|
|
13
|
+
### 1. 侧边栏 - 文稿列表管理
|
|
14
|
+
|
|
15
|
+
| 功能点 | 描述 | 优先级 | 状态 | 测试文件 |
|
|
16
|
+
| ------------ | ------------------------------ | ------ | ---- | -------------- |
|
|
17
|
+
| 创建文稿 | 点击 + 按钮创建新文稿 | P0 | ✅ | `crud.feature` |
|
|
18
|
+
| 重命名文稿 | 右键菜单 / 三点菜单重命名 | P0 | ✅ | `crud.feature` |
|
|
19
|
+
| 复制文稿 | 复制文稿(自动添加 Copy 后缀) | P1 | ✅ | `crud.feature` |
|
|
20
|
+
| 删除文稿 | 删除文稿(带确认弹窗) | P0 | ✅ | `crud.feature` |
|
|
21
|
+
| 复制全文 | 复制文稿内容到剪贴板 | P2 | ⏳ | |
|
|
22
|
+
| 列表分页设置 | 设置显示数量(20/40/60/100) | P2 | ⏳ | |
|
|
23
|
+
| 全部文稿抽屉 | 打开完整列表 + 搜索 | P2 | ⏳ | |
|
|
24
|
+
| 搜索文稿 | 按标题 / 内容搜索过滤 | P1 | ⏳ | |
|
|
25
|
+
|
|
26
|
+
### 2. 编辑器 - 文稿头部
|
|
27
|
+
|
|
28
|
+
| 功能点 | 描述 | 优先级 | 状态 | 测试文件 |
|
|
29
|
+
| ------------- | -------------------------- | ------ | ---- | --------------------- |
|
|
30
|
+
| 返回按钮 | 返回上一页 | P2 | ⏳ | |
|
|
31
|
+
| 标题编辑 | 大标题输入框,自动保存 | P0 | ✅ | `editor-meta.feature` |
|
|
32
|
+
| Emoji 选择 | 点击选择 / 更换 / 删除图标 | P1 | ✅ | `editor-meta.feature` |
|
|
33
|
+
| 自动保存提示 | 显示保存状态 | P2 | ⏳ | |
|
|
34
|
+
| 全宽模式切换 | 大屏幕下切换全宽 / 定宽 | P2 | ⏳ | |
|
|
35
|
+
| 复制链接 | 复制文稿 URL | P2 | ⏳ | |
|
|
36
|
+
| 导出 Markdown | 导出为 .md 文件 | P2 | ⏳ | |
|
|
37
|
+
| 页面信息 | 显示最后编辑时间 | P2 | ⏳ | |
|
|
38
|
+
|
|
39
|
+
### 3. 编辑器 - 富文本编辑
|
|
40
|
+
|
|
41
|
+
| 功能点 | 描述 | 优先级 | 状态 | 测试文件 |
|
|
42
|
+
| ------------- | ------------------------ | ------ | ---- | ------------------------ |
|
|
43
|
+
| 基础文本输入 | 输入和编辑文本 | P0 | ✅ | `editor-content.feature` |
|
|
44
|
+
| 斜杠命令 (/) | 打开命令菜单 | P1 | ✅ | `editor-content.feature` |
|
|
45
|
+
| 标题 H1/H2/H3 | 插入标题 | P1 | ✅ | `editor-content.feature` |
|
|
46
|
+
| 任务列表 | 插入待办事项 | P2 | ✅ | `editor-content.feature` |
|
|
47
|
+
| 无序列表 | 插入项目符号列表 | P2 | ✅ | `editor-content.feature` |
|
|
48
|
+
| 有序列表 | 插入编号列表 | P2 | ⏳ | |
|
|
49
|
+
| 图片上传 | 插入图片 | P2 | ⏳ | |
|
|
50
|
+
| 分隔线 | 插入水平分隔线 | P2 | ⏳ | |
|
|
51
|
+
| 表格 | 插入表格 | P2 | ⏳ | |
|
|
52
|
+
| 代码块 | 插入代码块(带语法高亮) | P2 | 🚧 | `editor-content.feature` |
|
|
53
|
+
| LaTeX 公式 | 插入数学公式 | P2 | ⏳ | |
|
|
54
|
+
| 文本加粗 | 使用快捷键加粗 | P1 | ✅ | `editor-content.feature` |
|
|
55
|
+
| 文本斜体 | 使用快捷键斜体 | P2 | ✅ | `editor-content.feature` |
|
|
56
|
+
|
|
57
|
+
### 4. Copilot 侧边栏
|
|
58
|
+
|
|
59
|
+
| 功能点 | 描述 | 优先级 | 状态 | 测试文件 |
|
|
60
|
+
| --------------- | ------------------- | ------ | ---- | ----------------- |
|
|
61
|
+
| 打开 / 关闭面板 | 展开 / 收起 Copilot | P1 | ⏳ | `copilot.feature` |
|
|
62
|
+
| Ask Copilot | 选中文本后询问 | P0 | ⏳ | `copilot.feature` |
|
|
63
|
+
| Agent 切换 | 选择不同的 Agent | P2 | ⏳ | |
|
|
64
|
+
| 新建话题 | 创建新的对话话题 | P2 | ⏳ | |
|
|
65
|
+
| 话题历史 | 查看和切换历史话题 | P2 | ⏳ | |
|
|
66
|
+
| 对话交互 | 发送消息、接收回复 | P0 | ⏳ | `copilot.feature` |
|
|
67
|
+
| 模型选择 | 切换使用的模型 | P2 | ⏳ | |
|
|
68
|
+
| 文件上传 | 拖放上传文件 | P2 | ⏳ | |
|
|
69
|
+
|
|
70
|
+
## 测试文件结构
|
|
71
|
+
|
|
72
|
+
```
|
|
73
|
+
e2e/src/features/page/
|
|
74
|
+
├── README.md # 本文档
|
|
75
|
+
├── crud.feature # 侧边栏 CRUD 操作 (5 scenarios)
|
|
76
|
+
├── editor-meta.feature # 编辑器元数据(标题、Emoji)(6 scenarios)
|
|
77
|
+
└── editor-content.feature # 富文本编辑功能 (8 scenarios)
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
## 测试统计
|
|
81
|
+
|
|
82
|
+
- **总场景数**: 19 (通过) + 1 (跳过)
|
|
83
|
+
- **总步骤数**: 109+
|
|
84
|
+
- **执行时间**: \~3 分钟
|
|
85
|
+
|
|
86
|
+
## 测试执行
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
# 运行 Page 模块所有测试
|
|
90
|
+
cd e2e
|
|
91
|
+
BASE_URL=http://localhost:3006 \
|
|
92
|
+
DATABASE_URL=postgresql://postgres:postgres@localhost:5433/postgres \
|
|
93
|
+
pnpm exec cucumber-js --config cucumber.config.js --tags "@page and not @skip"
|
|
94
|
+
|
|
95
|
+
# 运行特定测试
|
|
96
|
+
pnpm exec cucumber-js --config cucumber.config.js --tags "@PAGE-CREATE-001"
|
|
97
|
+
|
|
98
|
+
# 调试模式(显示浏览器)
|
|
99
|
+
HEADLESS=false pnpm exec cucumber-js --config cucumber.config.js --tags "@PAGE-TITLE-001"
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
## 状态说明
|
|
103
|
+
|
|
104
|
+
- ✅ 已完成 - 测试用例已实现并通过
|
|
105
|
+
- ⏳ 待实现 - 功能已识别,测试待编写
|
|
106
|
+
- 🚧 进行中 - 测试用例正在开发中或需要修复
|
|
107
|
+
|
|
108
|
+
## 已知问题
|
|
109
|
+
|
|
110
|
+
1. **代码块测试 (@PAGE-SLASH-005)**: 斜杠命令 `/codeblock` 触发不稳定,已标记 @skip
|
|
111
|
+
|
|
112
|
+
## 更新记录
|
|
113
|
+
|
|
114
|
+
| 日期 | 更新内容 |
|
|
115
|
+
| ---------- | ----------------------------------------- |
|
|
116
|
+
| 2025-01-12 | 初始化功能清单,完成侧边栏 CRUD |
|
|
117
|
+
| 2025-01-12 | 完成编辑器标题 / Emoji 测试 (6 scenarios) |
|
|
118
|
+
| 2025-01-12 | 完成富文本编辑测试 (8 scenarios,1 跳过) |
|