@lobehub/chat 1.77.5 → 1.77.7

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 (73) hide show
  1. package/.github/scripts/pr-comment.js +80 -0
  2. package/.github/scripts/pr-release-body.js +59 -0
  3. package/.github/workflows/release-desktop.yml +331 -0
  4. package/.github/workflows/test.yml +1 -1
  5. package/CHANGELOG.md +50 -0
  6. package/changelog/v1.json +18 -0
  7. package/next.config.ts +16 -11
  8. package/package.json +92 -89
  9. package/packages/electron-client-ipc/README.md +48 -0
  10. package/packages/electron-client-ipc/package.json +7 -0
  11. package/packages/electron-client-ipc/src/events/devtools.ts +6 -0
  12. package/packages/electron-client-ipc/src/events/index.ts +13 -0
  13. package/packages/electron-client-ipc/src/index.ts +2 -0
  14. package/packages/electron-client-ipc/src/types/dispatch.ts +10 -0
  15. package/packages/electron-client-ipc/src/types/index.ts +1 -0
  16. package/packages/electron-server-ipc/README.md +1 -1
  17. package/pnpm-workspace.yaml +1 -0
  18. package/scripts/setup-test-postgres-db.sh +21 -0
  19. package/src/app/desktop/devtools/page.tsx +89 -0
  20. package/src/app/desktop/layout.tsx +31 -0
  21. package/src/app/layout.tsx +11 -0
  22. package/src/app/not-found.tsx +1 -0
  23. package/src/const/desktop.ts +1 -0
  24. package/src/const/version.ts +2 -0
  25. package/src/database/client/db.ts +3 -10
  26. package/src/database/core/db-adaptor.ts +20 -2
  27. package/src/database/models/__tests__/aiProvider.test.ts +2 -0
  28. package/src/database/models/__tests__/message.test.ts +97 -26
  29. package/src/database/models/__tests__/session.test.ts +2 -0
  30. package/src/database/models/drizzleMigration.ts +15 -0
  31. package/src/database/models/message.ts +10 -5
  32. package/src/database/models/session.ts +8 -0
  33. package/src/database/models/user.ts +10 -1
  34. package/src/database/server/index.ts +1 -1
  35. package/src/features/DevPanel/features/FloatPanel.tsx +23 -6
  36. package/src/features/User/UserPanel/index.tsx +10 -6
  37. package/src/libs/trpc/async/index.ts +11 -1
  38. package/src/libs/trpc/lambda/index.ts +1 -0
  39. package/src/libs/trpc/lambda/serverDatabase.ts +10 -0
  40. package/src/libs/trpc/middleware/userAuth.ts +10 -0
  41. package/src/server/routers/async/file.ts +4 -5
  42. package/src/server/routers/async/ragEval.ts +3 -4
  43. package/src/server/routers/lambda/_template.ts +3 -5
  44. package/src/server/routers/lambda/agent.ts +8 -8
  45. package/src/server/routers/lambda/aiModel.ts +5 -5
  46. package/src/server/routers/lambda/aiProvider.test.ts +0 -2
  47. package/src/server/routers/lambda/aiProvider.ts +5 -5
  48. package/src/server/routers/lambda/chunk.ts +18 -15
  49. package/src/server/routers/lambda/exporter.ts +4 -4
  50. package/src/server/routers/lambda/file.ts +5 -5
  51. package/src/server/routers/lambda/importer.ts +3 -3
  52. package/src/server/routers/lambda/knowledgeBase.ts +3 -3
  53. package/src/server/routers/lambda/message.ts +5 -3
  54. package/src/server/routers/lambda/plugin.ts +5 -3
  55. package/src/server/routers/lambda/ragEval.ts +17 -14
  56. package/src/server/routers/lambda/session.ts +6 -4
  57. package/src/server/routers/lambda/sessionGroup.ts +3 -3
  58. package/src/server/routers/lambda/thread.ts +4 -4
  59. package/src/server/routers/lambda/topic.ts +5 -3
  60. package/src/server/routers/lambda/user.ts +7 -7
  61. package/src/server/routers/tools/__tests__/search.test.ts +1 -0
  62. package/src/server/services/nextAuthUser/index.test.ts +1 -2
  63. package/src/server/translation.test.ts +72 -52
  64. package/src/server/translation.ts +2 -11
  65. package/src/services/electron/devtools.ts +9 -0
  66. package/src/styles/electron.ts +14 -0
  67. package/src/tools/web-browsing/Portal/Search/ResultList/SearchItem/index.tsx +3 -8
  68. package/src/tools/web-browsing/Render/Search/SearchResult/ShowMore.tsx +2 -4
  69. package/src/types/electron.ts +11 -0
  70. package/src/utils/electron/dispatch.ts +10 -0
  71. package/tsconfig.json +6 -6
  72. package/vitest.config.ts +3 -1
  73. package/vitest.server.config.ts +7 -3
@@ -1,8 +1,6 @@
1
1
  'use server';
2
2
 
3
3
  import { get } from 'lodash-es';
4
- import { existsSync, readFileSync } from 'node:fs';
5
- import { join } from 'node:path';
6
4
 
7
5
  import { DEFAULT_LANG } from '@/const/locale';
8
6
  import { Locales, NS, normalizeLocale } from '@/locales/resources';
@@ -17,15 +15,8 @@ export const translation = async (ns: NS = 'common', hl: string) => {
17
15
  let i18ns = {};
18
16
  const lng = await getLocale(hl);
19
17
  try {
20
- let filepath = join(process.cwd(), `locales/${normalizeLocale(lng)}/${ns}.json`);
21
- const isExist = existsSync(filepath);
22
- if (!isExist)
23
- filepath = join(
24
- process.cwd(),
25
- `locales/${normalizeLocale(isDev ? 'zh-CN' : DEFAULT_LANG)}/${ns}.json`,
26
- );
27
- const file = readFileSync(filepath, 'utf8');
28
- i18ns = JSON.parse(file);
18
+ if (isDev && lng === 'zh-CN') i18ns = await import(`@/locales/default/${ns}`);
19
+ i18ns = await import(`@/../locales/${normalizeLocale(lng)}/${ns}.json`);
29
20
  } catch (e) {
30
21
  console.error('Error while reading translation file', e);
31
22
  }
@@ -0,0 +1,9 @@
1
+ import { dispatch } from '@/utils/electron/dispatch';
2
+
3
+ class DevtoolsService {
4
+ async openDevtools(): Promise<void> {
5
+ return dispatch('openDevtools');
6
+ }
7
+ }
8
+
9
+ export const electronDevtoolsService = new DevtoolsService();
@@ -0,0 +1,14 @@
1
+ import { css, cx } from 'antd-style';
2
+
3
+ export const draggable = cx(css`
4
+ -webkit-app-region: drag;
5
+ `);
6
+
7
+ export const nodrag = cx(css`
8
+ -webkit-app-region: no-drag;
9
+ `);
10
+
11
+ export const electronStylish = {
12
+ draggable,
13
+ nodrag,
14
+ };
@@ -16,25 +16,22 @@ const useStyles = createStyles(({ css, token }) => {
16
16
  flex: 1;
17
17
 
18
18
  padding: 8px;
19
+ border-radius: 8px;
19
20
 
20
21
  color: initial;
21
22
 
22
- border-radius: 8px;
23
-
24
23
  &:hover {
25
24
  background: ${token.colorFillTertiary};
26
25
  }
27
26
  `,
28
27
  desc: css`
29
28
  overflow: hidden;
30
-
31
29
  display: -webkit-box;
32
30
  -webkit-box-orient: vertical;
31
+ -webkit-line-clamp: 2;
33
32
 
34
33
  color: ${token.colorTextTertiary};
35
34
  text-overflow: ellipsis;
36
-
37
- -webkit-line-clamp: 2;
38
35
  `,
39
36
  displayLink: css`
40
37
  color: ${token.colorTextQuaternary};
@@ -45,14 +42,12 @@ const useStyles = createStyles(({ css, token }) => {
45
42
  `,
46
43
  url: css`
47
44
  overflow: hidden;
48
- { /* stylelint-disable-line */ }
49
45
  display: -webkit-box;
50
46
  -webkit-box-orient: vertical;
47
+ -webkit-line-clamp: 1;
51
48
 
52
49
  color: ${token.colorTextDescription};
53
50
  text-overflow: ellipsis;
54
-
55
- -webkit-line-clamp: 1;
56
51
  `,
57
52
  };
58
53
  });
@@ -14,12 +14,12 @@ const useStyles = createStyles(({ css, token }) => ({
14
14
 
15
15
  height: 100%;
16
16
  padding: 8px;
17
+ border-radius: 8px;
17
18
 
18
19
  font-size: 12px;
19
20
  color: initial;
20
21
 
21
22
  background: ${token.colorFillQuaternary};
22
- border-radius: 8px;
23
23
 
24
24
  &:hover {
25
25
  background: ${token.colorFillTertiary};
@@ -27,13 +27,11 @@ const useStyles = createStyles(({ css, token }) => ({
27
27
  `,
28
28
  title: css`
29
29
  overflow: hidden;
30
- { /* stylelint-disable-line */ }
31
30
  display: -webkit-box;
32
31
  -webkit-box-orient: vertical;
32
+ -webkit-line-clamp: 2;
33
33
 
34
34
  text-overflow: ellipsis;
35
-
36
- -webkit-line-clamp: 2;
37
35
  `,
38
36
  }));
39
37
 
@@ -0,0 +1,11 @@
1
+ import type { DispatchInvoke } from '@lobechat/electron-client-ipc';
2
+
3
+ export interface IElectronAPI {
4
+ invoke: DispatchInvoke;
5
+ }
6
+
7
+ declare global {
8
+ interface Window {
9
+ electronAPI: IElectronAPI;
10
+ }
11
+ }
@@ -0,0 +1,10 @@
1
+ import { DispatchInvoke } from '@lobechat/electron-client-ipc';
2
+
3
+ /**
4
+ * client 端请求 sketch 端 event 数据的方法
5
+ */
6
+ export const dispatch: DispatchInvoke = async (event, ...data) => {
7
+ if (!window.electronAPI) throw new Error('electronAPI not found');
8
+
9
+ return window.electronAPI.invoke(event, ...data);
10
+ };
package/tsconfig.json CHANGED
@@ -27,16 +27,16 @@
27
27
  }
28
28
  ]
29
29
  },
30
- "exclude": ["node_modules", "public/sw.js"],
30
+ "exclude": ["node_modules", "public/sw.js", "apps/desktop"],
31
31
  "include": [
32
+ "**/*.d.ts",
33
+ "**/*.ts",
34
+ "**/*.tsx",
35
+ ".next/types/**/*.ts",
32
36
  "next-env.d.ts",
33
- "vitest.config.ts",
34
37
  "src",
35
38
  "tests",
36
- "**/*.ts",
37
- "**/*.d.ts",
38
- "**/*.tsx",
39
- ".next/types/**/*.ts"
39
+ "vitest.config.ts"
40
40
  ],
41
41
  "ts-node": {
42
42
  "compilerOptions": {
package/vitest.config.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { resolve } from 'node:path';
2
- import { defineConfig } from 'vitest/config';
2
+ import { coverageConfigDefaults, defineConfig } from 'vitest/config';
3
3
 
4
4
  export default defineConfig({
5
5
  optimizeDeps: {
@@ -14,6 +14,8 @@ export default defineConfig({
14
14
  coverage: {
15
15
  all: false,
16
16
  exclude: [
17
+ // https://github.com/lobehub/lobe-chat/pull/7265
18
+ ...coverageConfigDefaults.exclude,
17
19
  '__mocks__/**',
18
20
  // just ignore the migration code
19
21
  // we will use pglite in the future
@@ -1,5 +1,5 @@
1
1
  import { resolve } from 'node:path';
2
- import { defineConfig } from 'vitest/config';
2
+ import { coverageConfigDefaults, defineConfig } from 'vitest/config';
3
3
 
4
4
  export default defineConfig({
5
5
  test: {
@@ -8,8 +8,12 @@ export default defineConfig({
8
8
  },
9
9
  coverage: {
10
10
  all: false,
11
- exclude: ['src/database/server/core/dbForTest.ts'],
12
- include: ['src/database/server/**/*.ts'],
11
+ exclude: [
12
+ // https://github.com/lobehub/lobe-chat/pull/7265
13
+ ...coverageConfigDefaults.exclude,
14
+ 'src/database/server/core/dbForTest.ts',
15
+ ],
16
+ include: ['src/database/models/**/*.ts', 'src/database/server/**/*.ts'],
13
17
  provider: 'v8',
14
18
  reporter: ['text', 'json', 'lcov', 'text-summary'],
15
19
  reportsDirectory: './coverage/server',