@lobehub/chat 1.71.5 → 1.72.1
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/CHANGELOG.md +50 -0
- package/changelog/v1.json +18 -0
- package/docs/developer/database-schema.dbml +16 -0
- package/package.json +3 -3
- package/src/database/client/db.ts +14 -8
- package/src/database/client/migrations.json +62 -0
- package/src/database/migrations/0017_add_user_id_to_tables.sql +225 -0
- package/src/database/migrations/meta/0017_snapshot.json +3858 -0
- package/src/database/migrations/meta/_journal.json +7 -0
- package/src/database/{server/models → models}/__tests__/_test_template.ts +2 -2
- package/src/database/models/__tests__/_util.ts +12 -0
- package/src/database/{server/models → models}/__tests__/agent.test.ts +6 -5
- package/src/database/{server/models → models}/__tests__/aiModel.test.ts +5 -4
- package/src/database/{server/models → models}/__tests__/aiProvider.test.ts +5 -4
- package/src/database/{server/models → models}/__tests__/asyncTask.test.ts +5 -4
- package/src/database/{server/models → models}/__tests__/chunk.test.ts +25 -21
- package/src/database/{server/models → models}/__tests__/file.test.ts +19 -5
- package/src/database/{server/models → models}/__tests__/knowledgeBase.test.ts +9 -4
- package/src/database/{server/models → models}/__tests__/message.test.ts +625 -29
- package/src/database/{server/models → models}/__tests__/plugin.test.ts +5 -4
- package/src/database/{server/models → models}/__tests__/session.test.ts +23 -20
- package/src/database/{server/models → models}/__tests__/sessionGroup.test.ts +5 -4
- package/src/database/{server/models → models}/__tests__/topic.test.ts +5 -4
- package/src/database/repositories/dataImporter/index.ts +3 -0
- package/src/database/schemas/file.ts +38 -32
- package/src/database/schemas/message.ts +21 -0
- package/src/database/schemas/relations.ts +10 -0
- package/src/database/server/models/__tests__/nextauth.test.ts +2 -0
- package/src/database/server/models/__tests__/user.test.ts +13 -1
- package/src/database/server/models/chunk.ts +5 -1
- package/src/database/server/models/file.ts +6 -3
- package/src/database/server/models/message.ts +29 -12
- package/src/database/server/models/session.ts +1 -0
- package/src/services/file/client.test.ts +2 -1
- package/src/services/message/client.test.ts +3 -3
- package/src/services/session/client.test.ts +5 -3
- package/src/store/agent/slices/chat/selectors/chatConfig.ts +1 -1
- package/src/types/message/base.ts +7 -0
- package/vitest.server.config.ts +1 -1
- package/src/database/server/models/user.test.ts +0 -58
- /package/src/database/{server/models → models}/__tests__/fixtures/embedding.ts +0 -0
@@ -32,7 +32,9 @@ beforeEach(async () => {
|
|
32
32
|
await trx.insert(users).values([{ id: userId }, { id: '456' }]);
|
33
33
|
await trx.insert(sessions).values([{ id: mockSessionId, userId }]);
|
34
34
|
await trx.insert(agents).values([{ id: mockAgentId, userId }]);
|
35
|
-
await trx
|
35
|
+
await trx
|
36
|
+
.insert(agentsToSessions)
|
37
|
+
.values([{ agentId: mockAgentId, sessionId: mockSessionId, userId }]);
|
36
38
|
await trx.insert(sessionGroups).values([
|
37
39
|
{ id: 'group-1', name: 'group-A', sort: 2, userId },
|
38
40
|
{ id: 'group-2', name: 'group-B', sort: 1, userId },
|
@@ -176,7 +178,7 @@ describe('SessionService', () => {
|
|
176
178
|
await clientDB.insert(agents).values({ userId, id: 'agent-1', title: 'Session Name' });
|
177
179
|
await clientDB
|
178
180
|
.insert(agentsToSessions)
|
179
|
-
.values({ agentId: 'agent-1', sessionId: mockSessionId });
|
181
|
+
.values({ agentId: 'agent-1', sessionId: mockSessionId, userId });
|
180
182
|
|
181
183
|
// Execute
|
182
184
|
const keyword = 'Name';
|
@@ -201,7 +203,7 @@ describe('SessionService', () => {
|
|
201
203
|
await clientDB.insert(agents).values({ userId, id: 'agent-1' });
|
202
204
|
await clientDB
|
203
205
|
.insert(agentsToSessions)
|
204
|
-
.values({ agentId: 'agent-1', sessionId: 'duplicated-session-id' });
|
206
|
+
.values({ agentId: 'agent-1', sessionId: 'duplicated-session-id', userId });
|
205
207
|
|
206
208
|
// Execute
|
207
209
|
const duplicatedSessionId = await sessionService.cloneSession(mockSessionId, newTitle);
|
@@ -37,7 +37,7 @@ const enableHistoryCount = (s: AgentStoreState) => {
|
|
37
37
|
const historyCount = (s: AgentStoreState): number => {
|
38
38
|
const chatConfig = currentAgentChatConfig(s);
|
39
39
|
|
40
|
-
return chatConfig.historyCount
|
40
|
+
return chatConfig.historyCount ?? (DEFAULT_AGENT_CHAT_CONFIG.historyCount as number); // historyCount 为 0 即不携带历史消息
|
41
41
|
};
|
42
42
|
|
43
43
|
const displayMode = (s: AgentStoreState) => {
|
@@ -117,3 +117,10 @@ export interface UpdateMessageParams {
|
|
117
117
|
toolCalls?: MessageToolCall[];
|
118
118
|
tools?: ChatToolPayload[] | null;
|
119
119
|
}
|
120
|
+
|
121
|
+
export interface NewMessageQueryParams {
|
122
|
+
embeddingsId: string;
|
123
|
+
messageId: string;
|
124
|
+
rewriteQuery: string;
|
125
|
+
userQuery: string;
|
126
|
+
}
|
package/vitest.server.config.ts
CHANGED
@@ -15,7 +15,7 @@ export default defineConfig({
|
|
15
15
|
reportsDirectory: './coverage/server',
|
16
16
|
},
|
17
17
|
environment: 'node',
|
18
|
-
include: ['src/database/server/**/**/*.test.ts'],
|
18
|
+
include: ['src/database/models/**/**/*.test.ts', 'src/database/server/**/**/*.test.ts'],
|
19
19
|
poolOptions: {
|
20
20
|
threads: { singleThread: true },
|
21
21
|
},
|
@@ -1,58 +0,0 @@
|
|
1
|
-
// @vitest-environment node
|
2
|
-
import { TRPCError } from '@trpc/server';
|
3
|
-
import { describe, expect, it, vi } from 'vitest';
|
4
|
-
|
5
|
-
import { UserModel, UserNotFoundError } from '@/database/server/models/user';
|
6
|
-
|
7
|
-
describe('UserNotFoundError', () => {
|
8
|
-
it('should extend TRPCError with correct code and message', () => {
|
9
|
-
const error = new UserNotFoundError();
|
10
|
-
|
11
|
-
expect(error).toBeInstanceOf(TRPCError);
|
12
|
-
expect(error.code).toBe('UNAUTHORIZED');
|
13
|
-
expect(error.message).toBe('user not found');
|
14
|
-
});
|
15
|
-
});
|
16
|
-
|
17
|
-
describe('UserModel', () => {
|
18
|
-
const mockDb = {
|
19
|
-
query: {
|
20
|
-
users: {
|
21
|
-
findFirst: vi.fn(),
|
22
|
-
},
|
23
|
-
},
|
24
|
-
};
|
25
|
-
|
26
|
-
const mockUserId = 'test-user-id';
|
27
|
-
const userModel = new UserModel(mockDb as any, mockUserId);
|
28
|
-
|
29
|
-
describe('getUserRegistrationDuration', () => {
|
30
|
-
it('should return default values when user not found', async () => {
|
31
|
-
mockDb.query.users.findFirst.mockResolvedValue(null);
|
32
|
-
|
33
|
-
const result = await userModel.getUserRegistrationDuration();
|
34
|
-
|
35
|
-
expect(result).toEqual({
|
36
|
-
createdAt: expect.any(String),
|
37
|
-
duration: 1,
|
38
|
-
updatedAt: expect.any(String),
|
39
|
-
});
|
40
|
-
});
|
41
|
-
|
42
|
-
it('should calculate duration correctly for existing user', async () => {
|
43
|
-
const createdAt = new Date('2024-01-01');
|
44
|
-
mockDb.query.users.findFirst.mockResolvedValue({
|
45
|
-
createdAt,
|
46
|
-
});
|
47
|
-
|
48
|
-
const result = await userModel.getUserRegistrationDuration();
|
49
|
-
|
50
|
-
expect(result).toEqual({
|
51
|
-
createdAt: '2024-01-01',
|
52
|
-
duration: expect.any(Number),
|
53
|
-
updatedAt: expect.any(String),
|
54
|
-
});
|
55
|
-
expect(result.duration).toBeGreaterThan(0);
|
56
|
-
});
|
57
|
-
});
|
58
|
-
});
|
File without changes
|