@lobehub/lobehub 2.0.0-next.232 → 2.0.0-next.234
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/.github/workflows/bundle-analyzer.yml +1 -1
- package/.github/workflows/e2e.yml +62 -53
- package/.github/workflows/manual-build-desktop.yml +5 -5
- package/.github/workflows/pr-build-desktop.yml +4 -4
- package/.github/workflows/pr-build-docker.yml +2 -2
- package/.github/workflows/release-desktop-beta.yml +4 -4
- package/.github/workflows/release-docker.yml +2 -2
- package/.github/workflows/test.yml +44 -7
- package/CHANGELOG.md +59 -0
- package/CLAUDE.md +1 -1
- package/changelog/v1.json +14 -0
- package/docs/development/basic/feature-development.mdx +4 -5
- package/docs/development/basic/feature-development.zh-CN.mdx +4 -5
- package/docs/self-hosting/environment-variables/auth.mdx +7 -0
- package/docs/self-hosting/environment-variables/auth.zh-CN.mdx +7 -0
- package/e2e/README.md +6 -6
- package/e2e/src/features/community/detail-pages.feature +9 -9
- package/e2e/src/features/community/interactions.feature +13 -13
- package/e2e/src/features/community/smoke.feature +6 -6
- package/e2e/src/steps/agent/conversation-mgmt.steps.ts +196 -25
- package/e2e/src/steps/agent/conversation.steps.ts +58 -0
- package/e2e/src/steps/agent/message-ops.steps.ts +20 -15
- package/e2e/src/steps/community/detail-pages.steps.ts +60 -19
- package/e2e/src/steps/community/interactions.steps.ts +145 -32
- package/e2e/src/steps/hooks.ts +12 -2
- package/locales/en-US/setting.json +3 -0
- package/locales/zh-CN/file.json +4 -0
- package/locales/zh-CN/setting.json +3 -0
- package/package.json +5 -5
- package/packages/business/config/src/llm.ts +6 -1
- package/packages/const/src/index.ts +1 -0
- package/packages/const/src/lobehubSkill.ts +55 -0
- package/packages/const/src/settings/image.ts +1 -1
- package/packages/model-bank/src/aiModels/azure.ts +2 -2
- package/packages/model-bank/src/aiModels/google.ts +1 -0
- package/packages/model-bank/src/aiModels/lobehub.ts +33 -13
- package/packages/model-bank/src/aiModels/openai.ts +21 -4
- package/packages/model-runtime/src/core/openaiCompatibleFactory/createImage.ts +4 -1
- package/packages/model-runtime/src/providers/openai/__snapshots__/index.test.ts.snap +1 -1
- package/packages/ssrf-safe-fetch/index.test.ts +5 -34
- package/packages/ssrf-safe-fetch/index.ts +12 -2
- package/packages/types/package.json +1 -1
- package/packages/types/src/files/upload.ts +11 -1
- package/packages/types/src/message/common/tools.ts +1 -1
- package/packages/types/src/serverConfig.ts +1 -0
- package/public/not-compatible.html +1296 -0
- package/src/app/[variants]/(main)/image/_layout/ConfigPanel/components/MultiImagesUpload/index.tsx +3 -3
- package/src/app/[variants]/(main)/image/features/GenerationFeed/index.tsx +3 -10
- package/src/app/[variants]/(main)/image/index.tsx +1 -1
- package/src/app/[variants]/(main)/resource/features/FileDetail.tsx +20 -12
- package/src/app/[variants]/(main)/resource/features/modal/FullscreenModal.tsx +2 -4
- package/src/app/[variants]/layout.tsx +50 -1
- package/src/envs/auth.ts +15 -0
- package/src/features/ChatInput/ActionBar/Tools/LobehubSkillServerItem.tsx +304 -0
- package/src/features/ChatInput/ActionBar/Tools/useControls.tsx +74 -10
- package/src/features/Conversation/Messages/AssistantGroup/Tool/Inspector/ToolTitle.tsx +9 -0
- package/src/features/FileViewer/Renderer/Code/index.tsx +224 -0
- package/src/features/FileViewer/Renderer/Image/index.tsx +8 -1
- package/src/features/FileViewer/Renderer/PDF/index.tsx +3 -1
- package/src/features/FileViewer/Renderer/PDF/style.ts +2 -1
- package/src/features/FileViewer/index.tsx +135 -24
- package/src/features/PageEditor/EditorCanvas/useSlashItems.tsx +7 -4
- package/src/features/PageEditor/store/initialState.ts +2 -1
- package/src/features/ResourceManager/components/Editor/FileContent.tsx +1 -4
- package/src/features/ResourceManager/components/Editor/FileCopilot.tsx +64 -0
- package/src/features/ResourceManager/components/Editor/index.tsx +98 -31
- package/src/features/ResourceManager/components/Explorer/ItemDropdown/useFileItemDropdown.tsx +3 -2
- package/src/features/ResourceManager/components/Explorer/ListView/ColumnResizeHandle.tsx +119 -0
- package/src/features/ResourceManager/components/Explorer/ListView/ListItem/index.tsx +67 -22
- package/src/features/ResourceManager/components/Explorer/ListView/Skeleton.tsx +46 -11
- package/src/features/ResourceManager/components/Explorer/ListView/index.tsx +140 -81
- package/src/features/ResourceManager/components/Explorer/ToolBar/SortDropdown.tsx +20 -12
- package/src/features/ResourceManager/components/Explorer/ToolBar/ViewSwitcher.tsx +18 -10
- package/src/features/ResourceManager/components/UploadDock/Item.tsx +38 -6
- package/src/features/ResourceManager/components/UploadDock/index.tsx +62 -41
- package/src/features/ResourceManager/index.tsx +1 -0
- package/src/helpers/toolEngineering/index.test.ts +3 -0
- package/src/helpers/toolEngineering/index.ts +12 -1
- package/src/hooks/useFetchAiImageConfig.ts +54 -10
- package/src/libs/trpc/utils/internalJwt.ts +2 -2
- package/src/locales/default/file.ts +4 -0
- package/src/locales/default/setting.ts +3 -0
- package/src/server/globalConfig/index.ts +1 -0
- package/src/server/modules/ModelRuntime/index.test.ts +214 -1
- package/src/server/modules/ModelRuntime/index.ts +43 -7
- package/src/server/routers/lambda/document.ts +44 -0
- package/src/server/routers/tools/market.ts +261 -0
- package/src/server/services/document/index.ts +22 -0
- package/src/services/document/index.ts +4 -0
- package/src/services/upload.ts +22 -2
- package/src/store/chat/slices/plugin/actions/internals.ts +15 -2
- package/src/store/chat/slices/plugin/actions/pluginTypes.ts +104 -0
- package/src/store/file/slices/fileManager/action.test.ts +9 -3
- package/src/store/file/slices/fileManager/action.ts +165 -70
- package/src/store/file/slices/upload/action.ts +3 -0
- package/src/store/global/actions/general.ts +15 -0
- package/src/store/global/initialState.ts +13 -0
- package/src/store/image/slices/generationConfig/initialState.ts +5 -5
- package/src/store/image/slices/generationConfig/selectors.test.ts +11 -4
- package/src/store/serverConfig/selectors.ts +1 -0
- package/src/store/tool/initialState.ts +11 -2
- package/src/store/tool/selectors/index.ts +1 -0
- package/src/store/tool/selectors/tool.ts +3 -1
- package/src/store/tool/slices/lobehubSkillStore/action.ts +361 -0
- package/src/store/tool/slices/lobehubSkillStore/index.ts +4 -0
- package/src/store/tool/slices/lobehubSkillStore/initialState.ts +24 -0
- package/src/store/tool/slices/lobehubSkillStore/selectors.ts +145 -0
- package/src/store/tool/slices/lobehubSkillStore/types.ts +100 -0
- package/src/store/tool/store.ts +8 -2
- package/vitest.config.mts +11 -6
- package/src/features/FileViewer/Renderer/JavaScript/index.tsx +0 -66
- package/src/features/FileViewer/Renderer/TXT/index.tsx +0 -50
|
@@ -98,7 +98,7 @@ jobs:
|
|
|
98
98
|
echo "- \`pnpm-lock.yaml\` - pnpm lockfile (for reproducible builds)" >> bundle-report/README.md
|
|
99
99
|
|
|
100
100
|
- name: Upload bundle analyzer reports
|
|
101
|
-
uses: actions/upload-artifact@
|
|
101
|
+
uses: actions/upload-artifact@v6
|
|
102
102
|
with:
|
|
103
103
|
name: bundle-report-${{ github.run_id }}
|
|
104
104
|
path: bundle-report/
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
name: E2E CI
|
|
2
|
+
|
|
3
|
+
on: [push, pull_request]
|
|
4
|
+
|
|
2
5
|
permissions:
|
|
6
|
+
actions: write
|
|
3
7
|
contents: read
|
|
4
8
|
|
|
5
|
-
on:
|
|
6
|
-
pull_request:
|
|
7
|
-
push:
|
|
8
|
-
|
|
9
9
|
concurrency:
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
group: ${{ github.workflow }}-${{ github.ref }}
|
|
11
|
+
cancel-in-progress: true
|
|
12
12
|
|
|
13
13
|
env:
|
|
14
14
|
DATABASE_URL: postgresql://postgres:postgres@localhost:5432/postgres
|
|
@@ -24,59 +24,68 @@ env:
|
|
|
24
24
|
S3_ENDPOINT: https://e2e-mock-s3.localhost
|
|
25
25
|
|
|
26
26
|
jobs:
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
27
|
+
# Check for duplicate runs
|
|
28
|
+
check-duplicate-run:
|
|
29
|
+
name: Check Duplicate Run
|
|
30
|
+
runs-on: ubuntu-latest
|
|
31
|
+
outputs:
|
|
32
|
+
should_skip: ${{ steps.skip_check.outputs.should_skip }}
|
|
33
|
+
steps:
|
|
34
|
+
- id: skip_check
|
|
35
|
+
uses: fkirc/skip-duplicate-actions@v5
|
|
36
|
+
with:
|
|
37
|
+
concurrent_skipping: 'same_content_newer'
|
|
38
|
+
skip_after_successful_duplicate: 'true'
|
|
39
|
+
do_not_skip: '["workflow_dispatch", "schedule"]'
|
|
40
40
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
41
|
+
e2e:
|
|
42
|
+
needs: check-duplicate-run
|
|
43
|
+
if: needs.check-duplicate-run.outputs.should_skip != 'true'
|
|
44
|
+
name: Test Web App
|
|
45
|
+
runs-on: ubuntu-latest
|
|
46
|
+
services:
|
|
47
|
+
postgres:
|
|
48
|
+
image: paradedb/paradedb:latest
|
|
49
|
+
env:
|
|
50
|
+
POSTGRES_PASSWORD: postgres
|
|
51
|
+
options: >-
|
|
52
|
+
--health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5
|
|
53
|
+
ports:
|
|
54
|
+
- 5432:5432
|
|
45
55
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
56
|
+
timeout-minutes: 30
|
|
57
|
+
steps:
|
|
58
|
+
- name: Checkout
|
|
59
|
+
uses: actions/checkout@v6
|
|
50
60
|
|
|
51
|
-
|
|
52
|
-
|
|
61
|
+
- name: Setup Bun
|
|
62
|
+
uses: oven-sh/setup-bun@v2
|
|
63
|
+
with:
|
|
64
|
+
bun-version: latest
|
|
53
65
|
|
|
54
|
-
|
|
55
|
-
|
|
66
|
+
- name: Install dependencies (bun)
|
|
67
|
+
run: bun install
|
|
56
68
|
|
|
57
|
-
|
|
58
|
-
|
|
69
|
+
- name: Install Playwright browsers (with system deps)
|
|
70
|
+
run: bunx playwright install --with-deps chromium
|
|
59
71
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
env:
|
|
63
|
-
SKIP_LINT: '1'
|
|
72
|
+
- name: Run database migrations
|
|
73
|
+
run: bun run db:migrate
|
|
64
74
|
|
|
65
|
-
|
|
66
|
-
|
|
75
|
+
- name: Build application
|
|
76
|
+
run: bun run build
|
|
77
|
+
env:
|
|
78
|
+
SKIP_LINT: '1'
|
|
67
79
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
uses: actions/upload-artifact@v5
|
|
71
|
-
with:
|
|
72
|
-
name: cucumber-report
|
|
73
|
-
path: e2e/reports
|
|
74
|
-
if-no-files-found: ignore
|
|
80
|
+
- name: Run E2E tests
|
|
81
|
+
run: bun run e2e
|
|
75
82
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
+
- name: Upload E2E test artifacts (on failure)
|
|
84
|
+
if: failure()
|
|
85
|
+
uses: actions/upload-artifact@v6
|
|
86
|
+
with:
|
|
87
|
+
name: e2e-artifacts
|
|
88
|
+
path: |
|
|
89
|
+
e2e/reports
|
|
90
|
+
e2e/screenshots
|
|
91
|
+
if-no-files-found: ignore
|
|
@@ -171,7 +171,7 @@ jobs:
|
|
|
171
171
|
fi
|
|
172
172
|
|
|
173
173
|
- name: Upload artifact
|
|
174
|
-
uses: actions/upload-artifact@
|
|
174
|
+
uses: actions/upload-artifact@v6
|
|
175
175
|
with:
|
|
176
176
|
name: release-${{ matrix.os }}
|
|
177
177
|
path: |
|
|
@@ -224,7 +224,7 @@ jobs:
|
|
|
224
224
|
TMP: C:\temp
|
|
225
225
|
|
|
226
226
|
- name: Upload artifact
|
|
227
|
-
uses: actions/upload-artifact@
|
|
227
|
+
uses: actions/upload-artifact@v6
|
|
228
228
|
with:
|
|
229
229
|
name: release-windows-2025
|
|
230
230
|
path: |
|
|
@@ -275,7 +275,7 @@ jobs:
|
|
|
275
275
|
NEXT_PUBLIC_DESKTOP_UMAMI_BASE_URL: ${{ inputs.channel == 'beta' && secrets.UMAMI_BETA_DESKTOP_BASE_URL || secrets.UMAMI_NIGHTLY_DESKTOP_BASE_URL }}
|
|
276
276
|
|
|
277
277
|
- name: Upload artifact
|
|
278
|
-
uses: actions/upload-artifact@
|
|
278
|
+
uses: actions/upload-artifact@v6
|
|
279
279
|
with:
|
|
280
280
|
name: release-ubuntu-latest
|
|
281
281
|
path: |
|
|
@@ -309,7 +309,7 @@ jobs:
|
|
|
309
309
|
package-manager-cache: 'false'
|
|
310
310
|
|
|
311
311
|
- name: Download artifacts
|
|
312
|
-
uses: actions/download-artifact@
|
|
312
|
+
uses: actions/download-artifact@v7
|
|
313
313
|
with:
|
|
314
314
|
path: release
|
|
315
315
|
pattern: release-*
|
|
@@ -330,7 +330,7 @@ jobs:
|
|
|
330
330
|
run: bun run scripts/electronWorkflow/mergeMacReleaseFiles.js
|
|
331
331
|
|
|
332
332
|
- name: Upload artifacts with merged macOS files
|
|
333
|
-
uses: actions/upload-artifact@
|
|
333
|
+
uses: actions/upload-artifact@v6
|
|
334
334
|
with:
|
|
335
335
|
name: merged-release-manual
|
|
336
336
|
path: release/
|
|
@@ -194,7 +194,7 @@ jobs:
|
|
|
194
194
|
|
|
195
195
|
# 上传构建产物
|
|
196
196
|
- name: Upload artifact
|
|
197
|
-
uses: actions/upload-artifact@
|
|
197
|
+
uses: actions/upload-artifact@v6
|
|
198
198
|
with:
|
|
199
199
|
name: release-${{ matrix.os }}
|
|
200
200
|
path: |
|
|
@@ -229,7 +229,7 @@ jobs:
|
|
|
229
229
|
|
|
230
230
|
# 下载所有平台的构建产物
|
|
231
231
|
- name: Download artifacts
|
|
232
|
-
uses: actions/download-artifact@
|
|
232
|
+
uses: actions/download-artifact@v7
|
|
233
233
|
with:
|
|
234
234
|
path: release
|
|
235
235
|
pattern: release-*
|
|
@@ -255,7 +255,7 @@ jobs:
|
|
|
255
255
|
|
|
256
256
|
# 上传合并后的构建产物
|
|
257
257
|
- name: Upload artifacts with merged macOS files
|
|
258
|
-
uses: actions/upload-artifact@
|
|
258
|
+
uses: actions/upload-artifact@v6
|
|
259
259
|
with:
|
|
260
260
|
name: merged-release-pr
|
|
261
261
|
path: release/
|
|
@@ -280,7 +280,7 @@ jobs:
|
|
|
280
280
|
|
|
281
281
|
# 下载合并后的构建产物
|
|
282
282
|
- name: Download merged artifacts
|
|
283
|
-
uses: actions/download-artifact@
|
|
283
|
+
uses: actions/download-artifact@v7
|
|
284
284
|
with:
|
|
285
285
|
name: merged-release-pr
|
|
286
286
|
path: release
|
|
@@ -91,7 +91,7 @@ jobs:
|
|
|
91
91
|
touch "/tmp/digests/${digest#sha256:}"
|
|
92
92
|
|
|
93
93
|
- name: Upload artifact
|
|
94
|
-
uses: actions/upload-artifact@
|
|
94
|
+
uses: actions/upload-artifact@v6
|
|
95
95
|
with:
|
|
96
96
|
name: digest-${{ env.PLATFORM_PAIR }}
|
|
97
97
|
path: /tmp/digests/*
|
|
@@ -111,7 +111,7 @@ jobs:
|
|
|
111
111
|
fetch-depth: 0
|
|
112
112
|
|
|
113
113
|
- name: Download digests
|
|
114
|
-
uses: actions/download-artifact@
|
|
114
|
+
uses: actions/download-artifact@v7
|
|
115
115
|
with:
|
|
116
116
|
path: /tmp/digests
|
|
117
117
|
pattern: digest-*
|
|
@@ -181,7 +181,7 @@ jobs:
|
|
|
181
181
|
|
|
182
182
|
# 上传构建产物 (工作流处理重命名,不依赖 electron-builder 钩子)
|
|
183
183
|
- name: Upload artifact
|
|
184
|
-
uses: actions/upload-artifact@
|
|
184
|
+
uses: actions/upload-artifact@v6
|
|
185
185
|
with:
|
|
186
186
|
name: release-${{ matrix.os }}
|
|
187
187
|
path: |
|
|
@@ -220,7 +220,7 @@ jobs:
|
|
|
220
220
|
|
|
221
221
|
# 下载所有平台的构建产物
|
|
222
222
|
- name: Download artifacts
|
|
223
|
-
uses: actions/download-artifact@
|
|
223
|
+
uses: actions/download-artifact@v7
|
|
224
224
|
with:
|
|
225
225
|
path: release
|
|
226
226
|
pattern: release-*
|
|
@@ -246,7 +246,7 @@ jobs:
|
|
|
246
246
|
|
|
247
247
|
# 上传合并后的构建产物
|
|
248
248
|
- name: Upload artifacts with merged macOS files
|
|
249
|
-
uses: actions/upload-artifact@
|
|
249
|
+
uses: actions/upload-artifact@v6
|
|
250
250
|
with:
|
|
251
251
|
name: merged-release
|
|
252
252
|
path: release/
|
|
@@ -262,7 +262,7 @@ jobs:
|
|
|
262
262
|
steps:
|
|
263
263
|
# 下载合并后的构建产物
|
|
264
264
|
- name: Download merged artifacts
|
|
265
|
-
uses: actions/download-artifact@
|
|
265
|
+
uses: actions/download-artifact@v7
|
|
266
266
|
with:
|
|
267
267
|
name: merged-release
|
|
268
268
|
path: release
|
|
@@ -80,7 +80,7 @@ jobs:
|
|
|
80
80
|
touch "/tmp/digests/${digest#sha256:}"
|
|
81
81
|
|
|
82
82
|
- name: Upload artifact
|
|
83
|
-
uses: actions/upload-artifact@
|
|
83
|
+
uses: actions/upload-artifact@v6
|
|
84
84
|
with:
|
|
85
85
|
name: digest-${{ env.PLATFORM_PAIR }}
|
|
86
86
|
path: /tmp/digests/*
|
|
@@ -98,7 +98,7 @@ jobs:
|
|
|
98
98
|
fetch-depth: 0
|
|
99
99
|
|
|
100
100
|
- name: Download digests
|
|
101
|
-
uses: actions/download-artifact@
|
|
101
|
+
uses: actions/download-artifact@v7
|
|
102
102
|
with:
|
|
103
103
|
path: /tmp/digests
|
|
104
104
|
pattern: digest-*
|
|
@@ -76,14 +76,15 @@ jobs:
|
|
|
76
76
|
fi
|
|
77
77
|
done
|
|
78
78
|
|
|
79
|
-
# App tests
|
|
80
|
-
test-
|
|
79
|
+
# App tests - run sharded tests
|
|
80
|
+
test-app:
|
|
81
81
|
needs: check-duplicate-run
|
|
82
82
|
if: needs.check-duplicate-run.outputs.should_skip != 'true'
|
|
83
|
-
|
|
84
|
-
|
|
83
|
+
strategy:
|
|
84
|
+
matrix:
|
|
85
|
+
shard: [1, 2]
|
|
86
|
+
name: Test App (shard ${{ matrix.shard }}/2)
|
|
85
87
|
runs-on: ubuntu-latest
|
|
86
|
-
|
|
87
88
|
steps:
|
|
88
89
|
- uses: actions/checkout@v6
|
|
89
90
|
|
|
@@ -101,8 +102,44 @@ jobs:
|
|
|
101
102
|
- name: Install deps
|
|
102
103
|
run: bun i
|
|
103
104
|
|
|
104
|
-
- name:
|
|
105
|
-
run:
|
|
105
|
+
- name: Run tests
|
|
106
|
+
run: bunx vitest --coverage --silent='passed-only' --shard=${{ matrix.shard }}/2
|
|
107
|
+
|
|
108
|
+
- name: Upload blob report
|
|
109
|
+
if: ${{ !cancelled() }}
|
|
110
|
+
uses: actions/upload-artifact@v6
|
|
111
|
+
with:
|
|
112
|
+
name: blob-report-${{ matrix.shard }}
|
|
113
|
+
path: .vitest-reports
|
|
114
|
+
include-hidden-files: true
|
|
115
|
+
retention-days: 1
|
|
116
|
+
|
|
117
|
+
# Merge sharded test reports and upload coverage
|
|
118
|
+
merge-app-coverage:
|
|
119
|
+
needs: test-app
|
|
120
|
+
if: ${{ !cancelled() && needs.test-app.result == 'success' }}
|
|
121
|
+
name: Merge and Upload App Coverage
|
|
122
|
+
runs-on: ubuntu-latest
|
|
123
|
+
steps:
|
|
124
|
+
- uses: actions/checkout@v6
|
|
125
|
+
|
|
126
|
+
- name: Install bun
|
|
127
|
+
uses: oven-sh/setup-bun@v2
|
|
128
|
+
with:
|
|
129
|
+
bun-version: latest
|
|
130
|
+
|
|
131
|
+
- name: Install deps
|
|
132
|
+
run: bun i
|
|
133
|
+
|
|
134
|
+
- name: Download blob reports
|
|
135
|
+
uses: actions/download-artifact@v7
|
|
136
|
+
with:
|
|
137
|
+
path: .vitest-reports
|
|
138
|
+
pattern: blob-report-*
|
|
139
|
+
merge-multiple: true
|
|
140
|
+
|
|
141
|
+
- name: Merge reports
|
|
142
|
+
run: bunx vitest --merge-reports --reporter=default --coverage
|
|
106
143
|
|
|
107
144
|
- name: Upload App Coverage to Codecov
|
|
108
145
|
uses: codecov/codecov-action@v5
|
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,65 @@
|
|
|
2
2
|
|
|
3
3
|
# Changelog
|
|
4
4
|
|
|
5
|
+
## [Version 2.0.0-next.234](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.233...v2.0.0-next.234)
|
|
6
|
+
|
|
7
|
+
<sup>Released on **2026-01-07**</sup>
|
|
8
|
+
|
|
9
|
+
#### ✨ Features
|
|
10
|
+
|
|
11
|
+
- **misc**: Add browser compatibility detection and fallback page, add the lobehub market tools servers.
|
|
12
|
+
|
|
13
|
+
#### 🐛 Bug Fixes
|
|
14
|
+
|
|
15
|
+
- **editor**: Fix slash command codeblock not working.
|
|
16
|
+
|
|
17
|
+
<br/>
|
|
18
|
+
|
|
19
|
+
<details>
|
|
20
|
+
<summary><kbd>Improvements and Fixes</kbd></summary>
|
|
21
|
+
|
|
22
|
+
#### What's improved
|
|
23
|
+
|
|
24
|
+
- **misc**: Add browser compatibility detection and fallback page, closes [#11309](https://github.com/lobehub/lobe-chat/issues/11309) ([8be32c2](https://github.com/lobehub/lobe-chat/commit/8be32c2))
|
|
25
|
+
- **misc**: Add the lobehub market tools servers, closes [#11315](https://github.com/lobehub/lobe-chat/issues/11315) ([a4003a3](https://github.com/lobehub/lobe-chat/commit/a4003a3))
|
|
26
|
+
|
|
27
|
+
#### What's fixed
|
|
28
|
+
|
|
29
|
+
- **editor**: Fix slash command codeblock not working, closes [#11321](https://github.com/lobehub/lobe-chat/issues/11321) ([f9a35eb](https://github.com/lobehub/lobe-chat/commit/f9a35eb))
|
|
30
|
+
|
|
31
|
+
</details>
|
|
32
|
+
|
|
33
|
+
<div align="right">
|
|
34
|
+
|
|
35
|
+
[](#readme-top)
|
|
36
|
+
|
|
37
|
+
</div>
|
|
38
|
+
|
|
39
|
+
## [Version 2.0.0-next.233](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.232...v2.0.0-next.233)
|
|
40
|
+
|
|
41
|
+
<sup>Released on **2026-01-07**</sup>
|
|
42
|
+
|
|
43
|
+
#### ✨ Features
|
|
44
|
+
|
|
45
|
+
- **image**: Improve image generation with new models and bug fixes.
|
|
46
|
+
|
|
47
|
+
<br/>
|
|
48
|
+
|
|
49
|
+
<details>
|
|
50
|
+
<summary><kbd>Improvements and Fixes</kbd></summary>
|
|
51
|
+
|
|
52
|
+
#### What's improved
|
|
53
|
+
|
|
54
|
+
- **image**: Improve image generation with new models and bug fixes, closes [#11311](https://github.com/lobehub/lobe-chat/issues/11311) ([4fc03bb](https://github.com/lobehub/lobe-chat/commit/4fc03bb))
|
|
55
|
+
|
|
56
|
+
</details>
|
|
57
|
+
|
|
58
|
+
<div align="right">
|
|
59
|
+
|
|
60
|
+
[](#readme-top)
|
|
61
|
+
|
|
62
|
+
</div>
|
|
63
|
+
|
|
5
64
|
## [Version 2.0.0-next.232](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.231...v2.0.0-next.232)
|
|
6
65
|
|
|
7
66
|
<sup>Released on **2026-01-07**</sup>
|
package/CLAUDE.md
CHANGED
|
@@ -80,7 +80,7 @@ When creating new Linear issues using `mcp__linear-server__create_issue`, **MUST
|
|
|
80
80
|
|
|
81
81
|
### PR Linear Issue Association (REQUIRED)
|
|
82
82
|
|
|
83
|
-
**When creating PRs for Linear issues, MUST include magic keywords in PR body:** `Fixes LOBE-123`, `Closes LOBE-123`, or `Resolves LOBE-123
|
|
83
|
+
**When creating PRs for Linear issues, MUST include magic keywords in PR body:** `Fixes LOBE-123`, `Closes LOBE-123`, or `Resolves LOBE-123`, and summarize the work done in the linear issue comment and update the issue status to "In Review".
|
|
84
84
|
|
|
85
85
|
### IMPORTANT: Per-Issue Completion Rule
|
|
86
86
|
|
package/changelog/v1.json
CHANGED
|
@@ -1,4 +1,18 @@
|
|
|
1
1
|
[
|
|
2
|
+
{
|
|
3
|
+
"children": {
|
|
4
|
+
"features": [
|
|
5
|
+
"Add browser compatibility detection and fallback page, add the lobehub market tools servers."
|
|
6
|
+
]
|
|
7
|
+
},
|
|
8
|
+
"date": "2026-01-07",
|
|
9
|
+
"version": "2.0.0-next.234"
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
"children": {},
|
|
13
|
+
"date": "2026-01-07",
|
|
14
|
+
"version": "2.0.0-next.233"
|
|
15
|
+
},
|
|
2
16
|
{
|
|
3
17
|
"children": {
|
|
4
18
|
"fixes": [
|
|
@@ -254,14 +254,14 @@ Let's take the subcomponent `OpeningQuestion.tsx` as an example. Component imple
|
|
|
254
254
|
import { DeleteOutlined, PlusOutlined } from '@ant-design/icons';
|
|
255
255
|
import { Flexbox, SortableList } from '@lobehub/ui';
|
|
256
256
|
import { Button, Empty, Input } from 'antd';
|
|
257
|
-
import {
|
|
257
|
+
import { createStaticStyles } from 'antd-style';
|
|
258
258
|
import { memo, useCallback, useMemo, useState } from 'react';
|
|
259
259
|
import { useTranslation } from 'react-i18next';
|
|
260
260
|
|
|
261
261
|
import { useStore } from '../store';
|
|
262
262
|
import { selectors } from '../store/selectors';
|
|
263
263
|
|
|
264
|
-
const
|
|
264
|
+
const styles = createStaticStyles(({ css, cssVar }) => ({
|
|
265
265
|
empty: css`
|
|
266
266
|
margin-block: 24px;
|
|
267
267
|
margin-inline: 0;
|
|
@@ -270,7 +270,7 @@ const useStyles = createStyles(({ css, token }) => ({
|
|
|
270
270
|
margin-block-end: 8px;
|
|
271
271
|
padding-block: 2px;
|
|
272
272
|
padding-inline: 10px 0;
|
|
273
|
-
background: ${
|
|
273
|
+
background: ${cssVar.colorBgContainer};
|
|
274
274
|
`,
|
|
275
275
|
questionItemContent: css`
|
|
276
276
|
flex: 1;
|
|
@@ -281,7 +281,7 @@ const useStyles = createStyles(({ css, token }) => ({
|
|
|
281
281
|
`,
|
|
282
282
|
repeatError: css`
|
|
283
283
|
margin: 0;
|
|
284
|
-
color: ${
|
|
284
|
+
color: ${cssVar.colorErrorText};
|
|
285
285
|
`,
|
|
286
286
|
}));
|
|
287
287
|
|
|
@@ -292,7 +292,6 @@ interface QuestionItem {
|
|
|
292
292
|
|
|
293
293
|
const OpeningQuestions = memo(() => {
|
|
294
294
|
const { t } = useTranslation('setting');
|
|
295
|
-
const { styles } = useStyles();
|
|
296
295
|
const [questionInput, setQuestionInput] = useState('');
|
|
297
296
|
|
|
298
297
|
// Use selector to access corresponding configuration
|
|
@@ -254,14 +254,14 @@ lobe-chat 是个国际化项目,新加的文案需要更新默认的 `locale`
|
|
|
254
254
|
import { DeleteOutlined, PlusOutlined } from '@ant-design/icons';
|
|
255
255
|
import { Flexbox, SortableList } from '@lobehub/ui';
|
|
256
256
|
import { Button, Empty, Input } from 'antd';
|
|
257
|
-
import {
|
|
257
|
+
import { createStaticStyles } from 'antd-style';
|
|
258
258
|
import { memo, useCallback, useMemo, useState } from 'react';
|
|
259
259
|
import { useTranslation } from 'react-i18next';
|
|
260
260
|
|
|
261
261
|
import { useStore } from '../store';
|
|
262
262
|
import { selectors } from '../store/selectors';
|
|
263
263
|
|
|
264
|
-
const
|
|
264
|
+
const styles = createStaticStyles(({ css, cssVar }) => ({
|
|
265
265
|
empty: css`
|
|
266
266
|
margin-block: 24px;
|
|
267
267
|
margin-inline: 0;
|
|
@@ -270,7 +270,7 @@ const useStyles = createStyles(({ css, token }) => ({
|
|
|
270
270
|
margin-block-end: 8px;
|
|
271
271
|
padding-block: 2px;
|
|
272
272
|
padding-inline: 10px 0;
|
|
273
|
-
background: ${
|
|
273
|
+
background: ${cssVar.colorBgContainer};
|
|
274
274
|
`,
|
|
275
275
|
questionItemContent: css`
|
|
276
276
|
flex: 1;
|
|
@@ -281,7 +281,7 @@ const useStyles = createStyles(({ css, token }) => ({
|
|
|
281
281
|
`,
|
|
282
282
|
repeatError: css`
|
|
283
283
|
margin: 0;
|
|
284
|
-
color: ${
|
|
284
|
+
color: ${cssVar.colorErrorText};
|
|
285
285
|
`,
|
|
286
286
|
}));
|
|
287
287
|
|
|
@@ -292,7 +292,6 @@ interface QuestionItem {
|
|
|
292
292
|
|
|
293
293
|
const OpeningQuestions = memo(() => {
|
|
294
294
|
const { t } = useTranslation('setting');
|
|
295
|
-
const { styles } = useStyles();
|
|
296
295
|
const [questionInput, setQuestionInput] = useState('');
|
|
297
296
|
|
|
298
297
|
// 使用 selector 访问对应配置
|
|
@@ -63,6 +63,13 @@ LobeChat provides a complete authentication service capability when deployed. Th
|
|
|
63
63
|
|
|
64
64
|
<OIDCJWKs />
|
|
65
65
|
|
|
66
|
+
#### `INTERNAL_JWT_EXPIRATION`
|
|
67
|
+
|
|
68
|
+
- Type: Optional
|
|
69
|
+
- Description: Expiration time for internal JWT tokens used in lambda → async calls. Format: number followed by unit (s=seconds, m=minutes, h=hours). Should be as short as possible for security, but long enough to account for network latency and server processing time.
|
|
70
|
+
- Default: `30s`
|
|
71
|
+
- Example: `30s`, `1m`, `1h`
|
|
72
|
+
|
|
66
73
|
### Email Service (SMTP)
|
|
67
74
|
|
|
68
75
|
These settings are required for email verification and password reset features.
|
|
@@ -61,6 +61,13 @@ LobeChat 在部署时提供了完善的身份验证服务能力,以下是相
|
|
|
61
61
|
|
|
62
62
|
<OIDCJWKs />
|
|
63
63
|
|
|
64
|
+
#### `INTERNAL_JWT_EXPIRATION`
|
|
65
|
+
|
|
66
|
+
- 类型:可选
|
|
67
|
+
- 描述:内部 JWT 令牌的过期时间,用于 lambda → async 调用。格式:数字后跟单位(s = 秒,m = 分钟,h = 小时)。为了安全性应尽可能短,但需要足够长以应对网络延迟和服务器处理时间。
|
|
68
|
+
- 默认值:`30s`
|
|
69
|
+
- 示例:`30s`、`1m`、`1h`
|
|
70
|
+
|
|
64
71
|
### 邮件服务(SMTP)
|
|
65
72
|
|
|
66
73
|
启用邮箱验证和密码重置功能需要配置以下设置。
|
package/e2e/README.md
CHANGED
|
@@ -84,13 +84,13 @@ HEADLESS=false BASE_URL=http://localhost:3000 npm run test:smoke
|
|
|
84
84
|
Feature files are written in Gherkin syntax and placed in the `src/features/` directory:
|
|
85
85
|
|
|
86
86
|
```gherkin
|
|
87
|
-
@
|
|
88
|
-
Feature:
|
|
89
|
-
Critical path tests to ensure the
|
|
87
|
+
@community @smoke
|
|
88
|
+
Feature: Community Smoke Tests
|
|
89
|
+
Critical path tests to ensure the community module is functional
|
|
90
90
|
|
|
91
|
-
@
|
|
92
|
-
Scenario: Load
|
|
93
|
-
Given I navigate to "/
|
|
91
|
+
@COMMUNITY-SMOKE-001 @P0
|
|
92
|
+
Scenario: Load community assistant list page
|
|
93
|
+
Given I navigate to "/community/assistant"
|
|
94
94
|
Then the page should load without errors
|
|
95
95
|
And I should see the page body
|
|
96
96
|
And I should see the search bar
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
@
|
|
1
|
+
@community @detail
|
|
2
2
|
Feature: Discover Detail Pages
|
|
3
3
|
Tests for detail pages in the discover module
|
|
4
4
|
|
|
@@ -9,7 +9,7 @@ Feature: Discover Detail Pages
|
|
|
9
9
|
# Assistant Detail Page
|
|
10
10
|
# ============================================
|
|
11
11
|
|
|
12
|
-
@
|
|
12
|
+
@COMMUNITY-DETAIL-001 @P1
|
|
13
13
|
Scenario: Load assistant detail page and verify content
|
|
14
14
|
Given I navigate to "/community/assistant"
|
|
15
15
|
And I wait for the page to fully load
|
|
@@ -20,7 +20,7 @@ Feature: Discover Detail Pages
|
|
|
20
20
|
And I should see the assistant author information
|
|
21
21
|
And I should see the add to workspace button
|
|
22
22
|
|
|
23
|
-
@
|
|
23
|
+
@COMMUNITY-DETAIL-002 @P1
|
|
24
24
|
Scenario: Navigate back from assistant detail page
|
|
25
25
|
Given I navigate to "/community/assistant"
|
|
26
26
|
And I wait for the page to fully load
|
|
@@ -32,7 +32,7 @@ Feature: Discover Detail Pages
|
|
|
32
32
|
# Model Detail Page
|
|
33
33
|
# ============================================
|
|
34
34
|
|
|
35
|
-
@
|
|
35
|
+
@COMMUNITY-DETAIL-003 @P1
|
|
36
36
|
Scenario: Load model detail page and verify content
|
|
37
37
|
Given I navigate to "/community/model"
|
|
38
38
|
And I wait for the page to fully load
|
|
@@ -42,7 +42,7 @@ Feature: Discover Detail Pages
|
|
|
42
42
|
And I should see the model description
|
|
43
43
|
And I should see the model parameters information
|
|
44
44
|
|
|
45
|
-
@
|
|
45
|
+
@COMMUNITY-DETAIL-004 @P1
|
|
46
46
|
Scenario: Navigate back from model detail page
|
|
47
47
|
Given I navigate to "/community/model"
|
|
48
48
|
And I wait for the page to fully load
|
|
@@ -54,7 +54,7 @@ Feature: Discover Detail Pages
|
|
|
54
54
|
# Provider Detail Page
|
|
55
55
|
# ============================================
|
|
56
56
|
|
|
57
|
-
@
|
|
57
|
+
@COMMUNITY-DETAIL-005 @P1
|
|
58
58
|
Scenario: Load provider detail page and verify content
|
|
59
59
|
Given I navigate to "/community/provider"
|
|
60
60
|
And I wait for the page to fully load
|
|
@@ -64,7 +64,7 @@ Feature: Discover Detail Pages
|
|
|
64
64
|
And I should see the provider description
|
|
65
65
|
And I should see the provider website link
|
|
66
66
|
|
|
67
|
-
@
|
|
67
|
+
@COMMUNITY-DETAIL-006 @P1
|
|
68
68
|
Scenario: Navigate back from provider detail page
|
|
69
69
|
Given I navigate to "/community/provider"
|
|
70
70
|
And I wait for the page to fully load
|
|
@@ -76,7 +76,7 @@ Feature: Discover Detail Pages
|
|
|
76
76
|
# MCP Detail Page
|
|
77
77
|
# ============================================
|
|
78
78
|
|
|
79
|
-
@
|
|
79
|
+
@COMMUNITY-DETAIL-007 @P1
|
|
80
80
|
Scenario: Load MCP detail page and verify content
|
|
81
81
|
Given I navigate to "/community/mcp"
|
|
82
82
|
And I wait for the page to fully load
|
|
@@ -86,7 +86,7 @@ Feature: Discover Detail Pages
|
|
|
86
86
|
And I should see the MCP description
|
|
87
87
|
And I should see the install button
|
|
88
88
|
|
|
89
|
-
@
|
|
89
|
+
@COMMUNITY-DETAIL-008 @P1
|
|
90
90
|
Scenario: Navigate back from MCP detail page
|
|
91
91
|
Given I navigate to "/community/mcp"
|
|
92
92
|
And I wait for the page to fully load
|