@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.
Files changed (112) hide show
  1. package/.github/workflows/bundle-analyzer.yml +1 -1
  2. package/.github/workflows/e2e.yml +62 -53
  3. package/.github/workflows/manual-build-desktop.yml +5 -5
  4. package/.github/workflows/pr-build-desktop.yml +4 -4
  5. package/.github/workflows/pr-build-docker.yml +2 -2
  6. package/.github/workflows/release-desktop-beta.yml +4 -4
  7. package/.github/workflows/release-docker.yml +2 -2
  8. package/.github/workflows/test.yml +44 -7
  9. package/CHANGELOG.md +59 -0
  10. package/CLAUDE.md +1 -1
  11. package/changelog/v1.json +14 -0
  12. package/docs/development/basic/feature-development.mdx +4 -5
  13. package/docs/development/basic/feature-development.zh-CN.mdx +4 -5
  14. package/docs/self-hosting/environment-variables/auth.mdx +7 -0
  15. package/docs/self-hosting/environment-variables/auth.zh-CN.mdx +7 -0
  16. package/e2e/README.md +6 -6
  17. package/e2e/src/features/community/detail-pages.feature +9 -9
  18. package/e2e/src/features/community/interactions.feature +13 -13
  19. package/e2e/src/features/community/smoke.feature +6 -6
  20. package/e2e/src/steps/agent/conversation-mgmt.steps.ts +196 -25
  21. package/e2e/src/steps/agent/conversation.steps.ts +58 -0
  22. package/e2e/src/steps/agent/message-ops.steps.ts +20 -15
  23. package/e2e/src/steps/community/detail-pages.steps.ts +60 -19
  24. package/e2e/src/steps/community/interactions.steps.ts +145 -32
  25. package/e2e/src/steps/hooks.ts +12 -2
  26. package/locales/en-US/setting.json +3 -0
  27. package/locales/zh-CN/file.json +4 -0
  28. package/locales/zh-CN/setting.json +3 -0
  29. package/package.json +5 -5
  30. package/packages/business/config/src/llm.ts +6 -1
  31. package/packages/const/src/index.ts +1 -0
  32. package/packages/const/src/lobehubSkill.ts +55 -0
  33. package/packages/const/src/settings/image.ts +1 -1
  34. package/packages/model-bank/src/aiModels/azure.ts +2 -2
  35. package/packages/model-bank/src/aiModels/google.ts +1 -0
  36. package/packages/model-bank/src/aiModels/lobehub.ts +33 -13
  37. package/packages/model-bank/src/aiModels/openai.ts +21 -4
  38. package/packages/model-runtime/src/core/openaiCompatibleFactory/createImage.ts +4 -1
  39. package/packages/model-runtime/src/providers/openai/__snapshots__/index.test.ts.snap +1 -1
  40. package/packages/ssrf-safe-fetch/index.test.ts +5 -34
  41. package/packages/ssrf-safe-fetch/index.ts +12 -2
  42. package/packages/types/package.json +1 -1
  43. package/packages/types/src/files/upload.ts +11 -1
  44. package/packages/types/src/message/common/tools.ts +1 -1
  45. package/packages/types/src/serverConfig.ts +1 -0
  46. package/public/not-compatible.html +1296 -0
  47. package/src/app/[variants]/(main)/image/_layout/ConfigPanel/components/MultiImagesUpload/index.tsx +3 -3
  48. package/src/app/[variants]/(main)/image/features/GenerationFeed/index.tsx +3 -10
  49. package/src/app/[variants]/(main)/image/index.tsx +1 -1
  50. package/src/app/[variants]/(main)/resource/features/FileDetail.tsx +20 -12
  51. package/src/app/[variants]/(main)/resource/features/modal/FullscreenModal.tsx +2 -4
  52. package/src/app/[variants]/layout.tsx +50 -1
  53. package/src/envs/auth.ts +15 -0
  54. package/src/features/ChatInput/ActionBar/Tools/LobehubSkillServerItem.tsx +304 -0
  55. package/src/features/ChatInput/ActionBar/Tools/useControls.tsx +74 -10
  56. package/src/features/Conversation/Messages/AssistantGroup/Tool/Inspector/ToolTitle.tsx +9 -0
  57. package/src/features/FileViewer/Renderer/Code/index.tsx +224 -0
  58. package/src/features/FileViewer/Renderer/Image/index.tsx +8 -1
  59. package/src/features/FileViewer/Renderer/PDF/index.tsx +3 -1
  60. package/src/features/FileViewer/Renderer/PDF/style.ts +2 -1
  61. package/src/features/FileViewer/index.tsx +135 -24
  62. package/src/features/PageEditor/EditorCanvas/useSlashItems.tsx +7 -4
  63. package/src/features/PageEditor/store/initialState.ts +2 -1
  64. package/src/features/ResourceManager/components/Editor/FileContent.tsx +1 -4
  65. package/src/features/ResourceManager/components/Editor/FileCopilot.tsx +64 -0
  66. package/src/features/ResourceManager/components/Editor/index.tsx +98 -31
  67. package/src/features/ResourceManager/components/Explorer/ItemDropdown/useFileItemDropdown.tsx +3 -2
  68. package/src/features/ResourceManager/components/Explorer/ListView/ColumnResizeHandle.tsx +119 -0
  69. package/src/features/ResourceManager/components/Explorer/ListView/ListItem/index.tsx +67 -22
  70. package/src/features/ResourceManager/components/Explorer/ListView/Skeleton.tsx +46 -11
  71. package/src/features/ResourceManager/components/Explorer/ListView/index.tsx +140 -81
  72. package/src/features/ResourceManager/components/Explorer/ToolBar/SortDropdown.tsx +20 -12
  73. package/src/features/ResourceManager/components/Explorer/ToolBar/ViewSwitcher.tsx +18 -10
  74. package/src/features/ResourceManager/components/UploadDock/Item.tsx +38 -6
  75. package/src/features/ResourceManager/components/UploadDock/index.tsx +62 -41
  76. package/src/features/ResourceManager/index.tsx +1 -0
  77. package/src/helpers/toolEngineering/index.test.ts +3 -0
  78. package/src/helpers/toolEngineering/index.ts +12 -1
  79. package/src/hooks/useFetchAiImageConfig.ts +54 -10
  80. package/src/libs/trpc/utils/internalJwt.ts +2 -2
  81. package/src/locales/default/file.ts +4 -0
  82. package/src/locales/default/setting.ts +3 -0
  83. package/src/server/globalConfig/index.ts +1 -0
  84. package/src/server/modules/ModelRuntime/index.test.ts +214 -1
  85. package/src/server/modules/ModelRuntime/index.ts +43 -7
  86. package/src/server/routers/lambda/document.ts +44 -0
  87. package/src/server/routers/tools/market.ts +261 -0
  88. package/src/server/services/document/index.ts +22 -0
  89. package/src/services/document/index.ts +4 -0
  90. package/src/services/upload.ts +22 -2
  91. package/src/store/chat/slices/plugin/actions/internals.ts +15 -2
  92. package/src/store/chat/slices/plugin/actions/pluginTypes.ts +104 -0
  93. package/src/store/file/slices/fileManager/action.test.ts +9 -3
  94. package/src/store/file/slices/fileManager/action.ts +165 -70
  95. package/src/store/file/slices/upload/action.ts +3 -0
  96. package/src/store/global/actions/general.ts +15 -0
  97. package/src/store/global/initialState.ts +13 -0
  98. package/src/store/image/slices/generationConfig/initialState.ts +5 -5
  99. package/src/store/image/slices/generationConfig/selectors.test.ts +11 -4
  100. package/src/store/serverConfig/selectors.ts +1 -0
  101. package/src/store/tool/initialState.ts +11 -2
  102. package/src/store/tool/selectors/index.ts +1 -0
  103. package/src/store/tool/selectors/tool.ts +3 -1
  104. package/src/store/tool/slices/lobehubSkillStore/action.ts +361 -0
  105. package/src/store/tool/slices/lobehubSkillStore/index.ts +4 -0
  106. package/src/store/tool/slices/lobehubSkillStore/initialState.ts +24 -0
  107. package/src/store/tool/slices/lobehubSkillStore/selectors.ts +145 -0
  108. package/src/store/tool/slices/lobehubSkillStore/types.ts +100 -0
  109. package/src/store/tool/store.ts +8 -2
  110. package/vitest.config.mts +11 -6
  111. package/src/features/FileViewer/Renderer/JavaScript/index.tsx +0 -66
  112. 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@v4
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
- group: e2e-${{ github.ref }}
11
- cancel-in-progress: true
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
- e2e:
28
- name: Test Web App
29
- runs-on: ubuntu-latest
30
- services:
31
- postgres:
32
- image: paradedb/paradedb:latest
33
- env:
34
- POSTGRES_PASSWORD: postgres
35
- options: >-
36
- --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5
37
-
38
- ports:
39
- - 5432:5432
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
- timeout-minutes: 30
42
- steps:
43
- - name: Checkout
44
- uses: actions/checkout@v6
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
- - name: Setup Bun
47
- uses: oven-sh/setup-bun@v2
48
- with:
49
- bun-version: latest
56
+ timeout-minutes: 30
57
+ steps:
58
+ - name: Checkout
59
+ uses: actions/checkout@v6
50
60
 
51
- - name: Install dependencies (bun)
52
- run: bun install
61
+ - name: Setup Bun
62
+ uses: oven-sh/setup-bun@v2
63
+ with:
64
+ bun-version: latest
53
65
 
54
- - name: Install Playwright browsers (with system deps)
55
- run: bunx playwright install --with-deps chromium
66
+ - name: Install dependencies (bun)
67
+ run: bun install
56
68
 
57
- - name: Run database migrations
58
- run: bun run db:migrate
69
+ - name: Install Playwright browsers (with system deps)
70
+ run: bunx playwright install --with-deps chromium
59
71
 
60
- - name: Build application
61
- run: bun run build
62
- env:
63
- SKIP_LINT: '1'
72
+ - name: Run database migrations
73
+ run: bun run db:migrate
64
74
 
65
- - name: Run E2E tests
66
- run: bun run e2e
75
+ - name: Build application
76
+ run: bun run build
77
+ env:
78
+ SKIP_LINT: '1'
67
79
 
68
- - name: Upload Cucumber HTML report (on failure)
69
- if: failure()
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
- - name: Upload screenshots (on failure)
77
- if: failure()
78
- uses: actions/upload-artifact@v5
79
- with:
80
- name: test-screenshots
81
- path: e2e/screenshots
82
- if-no-files-found: ignore
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@v5
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@v5
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@v5
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@v6
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@v5
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@v5
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@v6
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@v5
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@v6
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@v5
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@v6
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@v5
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@v6
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@v5
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@v6
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@v5
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@v6
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-website:
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
- name: Test Website
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: Test App Coverage
105
- run: bun run test-app:coverage
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
+ [![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#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
+ [![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#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 { createStyles } from 'antd-style';
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 useStyles = createStyles(({ css, token }) => ({
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: ${token.colorBgContainer};
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: ${token.colorErrorText};
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 { createStyles } from 'antd-style';
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 useStyles = createStyles(({ css, token }) => ({
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: ${token.colorBgContainer};
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: ${token.colorErrorText};
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
- @discover @smoke
88
- Feature: Discover Smoke Tests
89
- Critical path tests to ensure the discover module is functional
87
+ @community @smoke
88
+ Feature: Community Smoke Tests
89
+ Critical path tests to ensure the community module is functional
90
90
 
91
- @DISCOVER-SMOKE-001 @P0
92
- Scenario: Load discover assistant list page
93
- Given I navigate to "/discover/assistant"
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
- @discover @detail
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
- @DISCOVER-DETAIL-001 @P1
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
- @DISCOVER-DETAIL-002 @P1
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
- @DISCOVER-DETAIL-003 @P1
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
- @DISCOVER-DETAIL-004 @P1
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
- @DISCOVER-DETAIL-005 @P1
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
- @DISCOVER-DETAIL-006 @P1
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
- @DISCOVER-DETAIL-007 @P1
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
- @DISCOVER-DETAIL-008 @P1
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