@multiplayer-app/ai-agent-mongo 0.1.0-beta.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.
Files changed (70) hide show
  1. package/README.md +330 -0
  2. package/dist/__tests__/helpers.d.ts +22 -0
  3. package/dist/__tests__/helpers.d.ts.map +1 -0
  4. package/dist/__tests__/helpers.js +75 -0
  5. package/dist/__tests__/helpers.js.map +1 -0
  6. package/dist/__tests__/repositories/MongoAgentChatRepository.test.d.ts +2 -0
  7. package/dist/__tests__/repositories/MongoAgentChatRepository.test.d.ts.map +1 -0
  8. package/dist/__tests__/repositories/MongoAgentChatRepository.test.js +249 -0
  9. package/dist/__tests__/repositories/MongoAgentChatRepository.test.js.map +1 -0
  10. package/dist/__tests__/repositories/MongoAgentMessageRepository.test.d.ts +2 -0
  11. package/dist/__tests__/repositories/MongoAgentMessageRepository.test.d.ts.map +1 -0
  12. package/dist/__tests__/repositories/MongoAgentMessageRepository.test.js +311 -0
  13. package/dist/__tests__/repositories/MongoAgentMessageRepository.test.js.map +1 -0
  14. package/dist/__tests__/schemas/AgentChatSchema.test.d.ts +2 -0
  15. package/dist/__tests__/schemas/AgentChatSchema.test.d.ts.map +1 -0
  16. package/dist/__tests__/schemas/AgentChatSchema.test.js +120 -0
  17. package/dist/__tests__/schemas/AgentChatSchema.test.js.map +1 -0
  18. package/dist/__tests__/schemas/AgentMessageSchema.test.d.ts +2 -0
  19. package/dist/__tests__/schemas/AgentMessageSchema.test.d.ts.map +1 -0
  20. package/dist/__tests__/schemas/AgentMessageSchema.test.js +293 -0
  21. package/dist/__tests__/schemas/AgentMessageSchema.test.js.map +1 -0
  22. package/dist/__tests__/setup.d.ts +2 -0
  23. package/dist/__tests__/setup.d.ts.map +1 -0
  24. package/dist/__tests__/setup.js +25 -0
  25. package/dist/__tests__/setup.js.map +1 -0
  26. package/dist/index.d.ts +9 -0
  27. package/dist/index.d.ts.map +1 -0
  28. package/dist/index.js +9 -0
  29. package/dist/index.js.map +1 -0
  30. package/dist/mongo/config.d.ts +10 -0
  31. package/dist/mongo/config.d.ts.map +1 -0
  32. package/dist/mongo/config.js +10 -0
  33. package/dist/mongo/config.js.map +1 -0
  34. package/dist/mongo/encryption.d.ts +66 -0
  35. package/dist/mongo/encryption.d.ts.map +1 -0
  36. package/dist/mongo/encryption.js +140 -0
  37. package/dist/mongo/encryption.js.map +1 -0
  38. package/dist/mongo/index.d.ts +25 -0
  39. package/dist/mongo/index.d.ts.map +1 -0
  40. package/dist/mongo/index.js +72 -0
  41. package/dist/mongo/index.js.map +1 -0
  42. package/dist/mongo/logger.d.ts +31 -0
  43. package/dist/mongo/logger.d.ts.map +1 -0
  44. package/dist/mongo/logger.js +36 -0
  45. package/dist/mongo/logger.js.map +1 -0
  46. package/dist/repositories/MongoAgentChatRepository.d.ts +37 -0
  47. package/dist/repositories/MongoAgentChatRepository.d.ts.map +1 -0
  48. package/dist/repositories/MongoAgentChatRepository.js +235 -0
  49. package/dist/repositories/MongoAgentChatRepository.js.map +1 -0
  50. package/dist/repositories/MongoAgentMessageRepository.d.ts +24 -0
  51. package/dist/repositories/MongoAgentMessageRepository.d.ts.map +1 -0
  52. package/dist/repositories/MongoAgentMessageRepository.js +140 -0
  53. package/dist/repositories/MongoAgentMessageRepository.js.map +1 -0
  54. package/dist/repositories/index.d.ts +3 -0
  55. package/dist/repositories/index.d.ts.map +1 -0
  56. package/dist/repositories/index.js +3 -0
  57. package/dist/repositories/index.js.map +1 -0
  58. package/dist/schemas/AgentChatSchema.d.ts +29 -0
  59. package/dist/schemas/AgentChatSchema.d.ts.map +1 -0
  60. package/dist/schemas/AgentChatSchema.js +26 -0
  61. package/dist/schemas/AgentChatSchema.js.map +1 -0
  62. package/dist/schemas/AgentMessageSchema.d.ts +30 -0
  63. package/dist/schemas/AgentMessageSchema.d.ts.map +1 -0
  64. package/dist/schemas/AgentMessageSchema.js +54 -0
  65. package/dist/schemas/AgentMessageSchema.js.map +1 -0
  66. package/dist/schemas/index.d.ts +3 -0
  67. package/dist/schemas/index.d.ts.map +1 -0
  68. package/dist/schemas/index.js +3 -0
  69. package/dist/schemas/index.js.map +1 -0
  70. package/package.json +37 -0
@@ -0,0 +1,249 @@
1
+ import { describe, it, expect, beforeEach } from 'vitest';
2
+ import { MongoAgentChatRepository } from '../../repositories/MongoAgentChatRepository';
3
+ import { clearCollections, createTestChat } from '../helpers';
4
+ describe('MongoAgentChatRepository', () => {
5
+ let repository;
6
+ beforeEach(async () => {
7
+ repository = new MongoAgentChatRepository();
8
+ await clearCollections();
9
+ });
10
+ describe('create', () => {
11
+ it('should create a new chat', async () => {
12
+ const chatData = createTestChat({
13
+ title: 'New Chat',
14
+ contextKey: 'test-context',
15
+ userId: 'user-123',
16
+ });
17
+ const chat = await repository.create(chatData);
18
+ expect(chat).toBeDefined();
19
+ expect(chat.id).toBeDefined();
20
+ expect(chat.title).toBe('New Chat');
21
+ expect(chat.contextKey).toBe('test-context');
22
+ expect(chat.userId).toBe('user-123');
23
+ expect(chat.createdAt).toBeDefined();
24
+ expect(chat.updatedAt).toBeDefined();
25
+ });
26
+ it('should create a guest chat (no userId)', async () => {
27
+ const chatData = createTestChat({
28
+ title: 'Guest Chat',
29
+ contextKey: 'test-context',
30
+ });
31
+ delete chatData.userId;
32
+ const chat = await repository.create(chatData);
33
+ expect(chat).toBeDefined();
34
+ expect(chat.userId).toBeUndefined();
35
+ });
36
+ it('should include metadata when provided', async () => {
37
+ const chatData = createTestChat({
38
+ metadata: { key: 'value', count: 42 },
39
+ });
40
+ const chat = await repository.create(chatData);
41
+ expect(chat.metadata).toEqual({ key: 'value', count: 42 });
42
+ });
43
+ });
44
+ describe('findById', () => {
45
+ it('should find a chat by id', async () => {
46
+ const chatData = createTestChat({ title: 'Find Me' });
47
+ const created = await repository.create(chatData);
48
+ const found = await repository.findById(created.id);
49
+ expect(found).toBeDefined();
50
+ expect(found === null || found === void 0 ? void 0 : found.id).toBe(created.id);
51
+ expect(found === null || found === void 0 ? void 0 : found.title).toBe('Find Me');
52
+ });
53
+ it('should return null if chat not found', async () => {
54
+ const found = await repository.findById('507f1f77bcf86cd799439011');
55
+ expect(found).toBeNull();
56
+ });
57
+ });
58
+ describe('find', () => {
59
+ it('should find all chats when no filter provided', async () => {
60
+ await repository.create(createTestChat({ title: 'Chat 1' }));
61
+ await repository.create(createTestChat({ title: 'Chat 2' }));
62
+ await repository.create(createTestChat({ title: 'Chat 3' }));
63
+ const chats = await repository.find();
64
+ expect(chats).toHaveLength(3);
65
+ });
66
+ it('should find chats by filter', async () => {
67
+ await repository.create(createTestChat({ title: 'Chat 1', contextKey: 'ctx-1' }));
68
+ await repository.create(createTestChat({ title: 'Chat 2', contextKey: 'ctx-1' }));
69
+ await repository.create(createTestChat({ title: 'Chat 3', contextKey: 'ctx-2' }));
70
+ const chats = await repository.find({ contextKey: 'ctx-1' });
71
+ expect(chats).toHaveLength(2);
72
+ expect(chats.every(c => c.contextKey === 'ctx-1')).toBe(true);
73
+ });
74
+ it('should find chat by id in filter', async () => {
75
+ const created = await repository.create(createTestChat({ title: 'Specific Chat' }));
76
+ const chats = await repository.find({ id: created.id });
77
+ expect(chats).toHaveLength(1);
78
+ expect(chats[0].id).toBe(created.id);
79
+ });
80
+ it('should find chats by userId', async () => {
81
+ await repository.create(createTestChat({ userId: 'user-1' }));
82
+ await repository.create(createTestChat({ userId: 'user-1' }));
83
+ await repository.create(createTestChat({ userId: 'user-2' }));
84
+ const chats = await repository.find({ userId: 'user-1' });
85
+ expect(chats).toHaveLength(2);
86
+ });
87
+ });
88
+ describe('findOne', () => {
89
+ it('should find a single chat matching filter', async () => {
90
+ await repository.create(createTestChat({ title: 'Unique Chat', contextKey: 'unique' }));
91
+ const chat = await repository.findOne({ contextKey: 'unique' });
92
+ expect(chat).toBeDefined();
93
+ expect(chat === null || chat === void 0 ? void 0 : chat.title).toBe('Unique Chat');
94
+ });
95
+ it('should return null if no match found', async () => {
96
+ const chat = await repository.findOne({ contextKey: 'non-existent' });
97
+ expect(chat).toBeNull();
98
+ });
99
+ });
100
+ describe('update', () => {
101
+ it('should update chat fields', async () => {
102
+ const created = await repository.create(createTestChat({ title: 'Original' }));
103
+ // Add a small delay to ensure timestamp difference
104
+ await new Promise(resolve => setTimeout(resolve, 10));
105
+ const updated = await repository.update(created.id, { title: 'Updated' });
106
+ expect(updated).toBeDefined();
107
+ expect(updated === null || updated === void 0 ? void 0 : updated.title).toBe('Updated');
108
+ expect(updated === null || updated === void 0 ? void 0 : updated.updatedAt).not.toBe(created.updatedAt);
109
+ expect(new Date(updated.updatedAt).getTime()).toBeGreaterThan(new Date(created.updatedAt).getTime());
110
+ });
111
+ it('should update metadata', async () => {
112
+ const created = await repository.create(createTestChat({ metadata: { old: 'data' } }));
113
+ const updated = await repository.update(created.id, { metadata: { new: 'data' } });
114
+ expect(updated === null || updated === void 0 ? void 0 : updated.metadata).toEqual({ new: 'data' });
115
+ });
116
+ it('should return null if chat not found', async () => {
117
+ const updated = await repository.update('507f1f77bcf86cd799439011', { title: 'Updated' });
118
+ expect(updated).toBeNull();
119
+ });
120
+ });
121
+ describe('delete', () => {
122
+ it('should delete a chat by id', async () => {
123
+ const created = await repository.create(createTestChat());
124
+ const deleted = await repository.delete(created.id);
125
+ expect(deleted).toBe(true);
126
+ const found = await repository.findById(created.id);
127
+ expect(found).toBeNull();
128
+ });
129
+ it('should return false if chat not found', async () => {
130
+ const deleted = await repository.delete('507f1f77bcf86cd799439011');
131
+ expect(deleted).toBe(false);
132
+ });
133
+ });
134
+ describe('exists', () => {
135
+ it('should return true if chat exists', async () => {
136
+ const created = await repository.create(createTestChat());
137
+ const exists = await repository.exists(created.id);
138
+ expect(exists).toBe(true);
139
+ });
140
+ it('should return false if chat does not exist', async () => {
141
+ const exists = await repository.exists('507f1f77bcf86cd799439011');
142
+ expect(exists).toBe(false);
143
+ });
144
+ });
145
+ describe('count', () => {
146
+ it('should count all chats when no filter', async () => {
147
+ await repository.create(createTestChat());
148
+ await repository.create(createTestChat());
149
+ await repository.create(createTestChat());
150
+ const count = await repository.count();
151
+ expect(count).toBe(3);
152
+ });
153
+ it('should count chats matching filter', async () => {
154
+ await repository.create(createTestChat({ contextKey: 'ctx-1' }));
155
+ await repository.create(createTestChat({ contextKey: 'ctx-1' }));
156
+ await repository.create(createTestChat({ contextKey: 'ctx-2' }));
157
+ const count = await repository.count({ contextKey: 'ctx-1' });
158
+ expect(count).toBe(2);
159
+ });
160
+ });
161
+ describe('findByUserId', () => {
162
+ it('should find all chats for a user', async () => {
163
+ await repository.create(createTestChat({ userId: 'user-1' }));
164
+ await repository.create(createTestChat({ userId: 'user-1' }));
165
+ await repository.create(createTestChat({ userId: 'user-2' }));
166
+ const chats = await repository.findByUserId('user-1');
167
+ expect(chats).toHaveLength(2);
168
+ expect(chats.every(c => c.userId === 'user-1')).toBe(true);
169
+ });
170
+ it('should return empty array if user has no chats', async () => {
171
+ const chats = await repository.findByUserId('non-existent');
172
+ expect(chats).toHaveLength(0);
173
+ });
174
+ });
175
+ describe('findByContextKey', () => {
176
+ it('should find all chats for a context key', async () => {
177
+ await repository.create(createTestChat({ contextKey: 'ctx-1' }));
178
+ await repository.create(createTestChat({ contextKey: 'ctx-1' }));
179
+ await repository.create(createTestChat({ contextKey: 'ctx-2' }));
180
+ const chats = await repository.findByContextKey('ctx-1');
181
+ expect(chats).toHaveLength(2);
182
+ expect(chats.every(c => c.contextKey === 'ctx-1')).toBe(true);
183
+ });
184
+ });
185
+ describe('findByUserIdAndContextKey', () => {
186
+ it('should find chats matching both userId and contextKey', async () => {
187
+ await repository.create(createTestChat({ userId: 'user-1', contextKey: 'ctx-1' }));
188
+ await repository.create(createTestChat({ userId: 'user-1', contextKey: 'ctx-1' }));
189
+ await repository.create(createTestChat({ userId: 'user-1', contextKey: 'ctx-2' }));
190
+ await repository.create(createTestChat({ userId: 'user-2', contextKey: 'ctx-1' }));
191
+ const chats = await repository.findByUserIdAndContextKey('user-1', 'ctx-1');
192
+ expect(chats).toHaveLength(2);
193
+ expect(chats.every(c => c.userId === 'user-1' && c.contextKey === 'ctx-1')).toBe(true);
194
+ });
195
+ });
196
+ describe('findGuestChatsByContextKey', () => {
197
+ it('should find guest chats (no userId) for a context key', async () => {
198
+ await repository.create(createTestChat({ contextKey: 'ctx-1' })); // guest
199
+ await repository.create(createTestChat({ contextKey: 'ctx-1' })); // guest
200
+ await repository.create(createTestChat({ userId: 'user-1', contextKey: 'ctx-1' }));
201
+ await repository.create(createTestChat({ contextKey: 'ctx-2' })); // guest
202
+ const chats = await repository.findGuestChatsByContextKey('ctx-1');
203
+ expect(chats).toHaveLength(2);
204
+ expect(chats.every(c => !c.userId && c.contextKey === 'ctx-1')).toBe(true);
205
+ });
206
+ });
207
+ describe('updateTitle', () => {
208
+ it('should update chat title', async () => {
209
+ const created = await repository.create(createTestChat({ title: 'Old Title' }));
210
+ // Add a small delay to ensure timestamp difference
211
+ await new Promise(resolve => setTimeout(resolve, 10));
212
+ const updated = await repository.updateTitle(created.id, 'New Title');
213
+ expect(updated === null || updated === void 0 ? void 0 : updated.title).toBe('New Title');
214
+ expect(updated === null || updated === void 0 ? void 0 : updated.updatedAt).not.toBe(created.updatedAt);
215
+ expect(new Date(updated.updatedAt).getTime()).toBeGreaterThan(new Date(created.updatedAt).getTime());
216
+ });
217
+ it('should return null if chat not found', async () => {
218
+ const updated = await repository.updateTitle('507f1f77bcf86cd799439011', 'New Title');
219
+ expect(updated).toBeNull();
220
+ });
221
+ });
222
+ describe('deleteByUserId', () => {
223
+ it('should delete all chats for a user', async () => {
224
+ await repository.create(createTestChat({ userId: 'user-1' }));
225
+ await repository.create(createTestChat({ userId: 'user-1' }));
226
+ await repository.create(createTestChat({ userId: 'user-2' }));
227
+ const deletedCount = await repository.deleteByUserId('user-1');
228
+ expect(deletedCount).toBe(2);
229
+ const remaining = await repository.findByUserId('user-1');
230
+ expect(remaining).toHaveLength(0);
231
+ });
232
+ it('should return 0 if user has no chats', async () => {
233
+ const deletedCount = await repository.deleteByUserId('non-existent');
234
+ expect(deletedCount).toBe(0);
235
+ });
236
+ });
237
+ describe('deleteByContextKey', () => {
238
+ it('should delete all chats for a context key', async () => {
239
+ await repository.create(createTestChat({ contextKey: 'ctx-1' }));
240
+ await repository.create(createTestChat({ contextKey: 'ctx-1' }));
241
+ await repository.create(createTestChat({ contextKey: 'ctx-2' }));
242
+ const deletedCount = await repository.deleteByContextKey('ctx-1');
243
+ expect(deletedCount).toBe(2);
244
+ const remaining = await repository.findByContextKey('ctx-1');
245
+ expect(remaining).toHaveLength(0);
246
+ });
247
+ });
248
+ });
249
+ //# sourceMappingURL=MongoAgentChatRepository.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MongoAgentChatRepository.test.js","sourceRoot":"","sources":["../../../src/__tests__/repositories/MongoAgentChatRepository.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=MongoAgentMessageRepository.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MongoAgentMessageRepository.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/repositories/MongoAgentMessageRepository.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,311 @@
1
+ import { describe, it, expect, beforeEach } from 'vitest';
2
+ import { MongoAgentMessageRepository } from '../../repositories/MongoAgentMessageRepository';
3
+ import { MongoAgentChatRepository } from '../../repositories/MongoAgentChatRepository';
4
+ import { clearCollections, createTestMessage, createTestMessageWithToolCalls, createTestMessageWithAttachments } from '../helpers';
5
+ import { MessageRole, AgentToolCallStatus, AgentAttachmentType } from '@multiplayer-app/ai-agent-types';
6
+ describe('MongoAgentMessageRepository', () => {
7
+ let repository;
8
+ let chatRepository;
9
+ let chatId;
10
+ beforeEach(async () => {
11
+ repository = new MongoAgentMessageRepository();
12
+ chatRepository = new MongoAgentChatRepository();
13
+ await clearCollections();
14
+ // Create a test chat for messages
15
+ const chat = await chatRepository.create({
16
+ title: 'Test Chat',
17
+ contextKey: 'test-context',
18
+ });
19
+ chatId = chat.id;
20
+ });
21
+ describe('create', () => {
22
+ it('should create a new message', async () => {
23
+ const messageData = createTestMessage(chatId, {
24
+ role: MessageRole.User,
25
+ content: 'Hello, world!',
26
+ });
27
+ const message = await repository.create(messageData);
28
+ expect(message).toBeDefined();
29
+ expect(message.id).toBeDefined();
30
+ expect(message.chat).toBe(chatId);
31
+ expect(message.role).toBe(MessageRole.User);
32
+ expect(message.content).toBe('Hello, world!');
33
+ expect(message.createdAt).toBeDefined();
34
+ });
35
+ it('should create a message with tool calls', async () => {
36
+ var _a, _b;
37
+ const messageData = createTestMessageWithToolCalls(chatId);
38
+ const message = await repository.create(messageData);
39
+ expect(message.toolCalls).toBeDefined();
40
+ expect((_a = message.toolCalls) === null || _a === void 0 ? void 0 : _a.length).toBeGreaterThan(0);
41
+ expect((_b = message.toolCalls) === null || _b === void 0 ? void 0 : _b[0].name).toBe('test_tool');
42
+ });
43
+ it('should create a message with attachments', async () => {
44
+ var _a, _b;
45
+ const messageData = createTestMessageWithAttachments(chatId);
46
+ const message = await repository.create(messageData);
47
+ expect(message.attachments).toBeDefined();
48
+ expect((_a = message.attachments) === null || _a === void 0 ? void 0 : _a.length).toBeGreaterThan(0);
49
+ expect((_b = message.attachments) === null || _b === void 0 ? void 0 : _b[0].type).toBe(AgentAttachmentType.File);
50
+ });
51
+ it('should create a message with annotations', async () => {
52
+ const messageData = createTestMessage(chatId, {
53
+ annotations: { key: 'value', count: 42 },
54
+ });
55
+ const message = await repository.create(messageData);
56
+ expect(message.annotations).toEqual({ key: 'value', count: 42 });
57
+ });
58
+ });
59
+ describe('findById', () => {
60
+ it('should find a message by id', async () => {
61
+ const messageData = createTestMessage(chatId, { content: 'Find Me' });
62
+ const created = await repository.create(messageData);
63
+ const found = await repository.findById(created.id);
64
+ expect(found).toBeDefined();
65
+ expect(found === null || found === void 0 ? void 0 : found.id).toBe(created.id);
66
+ expect(found === null || found === void 0 ? void 0 : found.content).toBe('Find Me');
67
+ });
68
+ it('should return null if message not found', async () => {
69
+ const found = await repository.findById('507f1f77bcf86cd799439011');
70
+ expect(found).toBeNull();
71
+ });
72
+ });
73
+ describe('find', () => {
74
+ it('should find all messages when no filter provided', async () => {
75
+ await repository.create(createTestMessage(chatId, { content: 'Message 1' }));
76
+ await repository.create(createTestMessage(chatId, { content: 'Message 2' }));
77
+ await repository.create(createTestMessage(chatId, { content: 'Message 3' }));
78
+ const messages = await repository.find();
79
+ expect(messages).toHaveLength(3);
80
+ });
81
+ it('should find messages by filter', async () => {
82
+ await repository.create(createTestMessage(chatId, { role: MessageRole.User }));
83
+ await repository.create(createTestMessage(chatId, { role: MessageRole.User }));
84
+ await repository.create(createTestMessage(chatId, { role: MessageRole.Assistant }));
85
+ const messages = await repository.find({ role: MessageRole.User });
86
+ expect(messages).toHaveLength(2);
87
+ expect(messages.every(m => m.role === MessageRole.User)).toBe(true);
88
+ });
89
+ it('should find message by id in filter', async () => {
90
+ const created = await repository.create(createTestMessage(chatId, { content: 'Specific' }));
91
+ const messages = await repository.find({ id: created.id });
92
+ expect(messages).toHaveLength(1);
93
+ expect(messages[0].id).toBe(created.id);
94
+ });
95
+ });
96
+ describe('findOne', () => {
97
+ it('should find a single message matching filter', async () => {
98
+ await repository.create(createTestMessage(chatId, { content: 'Unique Message', role: MessageRole.System }));
99
+ const message = await repository.findOne({ role: MessageRole.System });
100
+ expect(message).toBeDefined();
101
+ expect(message === null || message === void 0 ? void 0 : message.content).toBe('Unique Message');
102
+ });
103
+ it('should return null if no match found', async () => {
104
+ const message = await repository.findOne({ role: MessageRole.Reasoning });
105
+ expect(message).toBeNull();
106
+ });
107
+ });
108
+ describe('update', () => {
109
+ it('should update message fields', async () => {
110
+ const created = await repository.create(createTestMessage(chatId, { content: 'Original' }));
111
+ const updated = await repository.update(created.id, { content: 'Updated' });
112
+ expect(updated).toBeDefined();
113
+ expect(updated === null || updated === void 0 ? void 0 : updated.content).toBe('Updated');
114
+ });
115
+ it('should update tool calls', async () => {
116
+ var _a, _b;
117
+ const created = await repository.create(createTestMessageWithToolCalls(chatId));
118
+ const updatedToolCalls = [
119
+ {
120
+ id: 'tool-call-1',
121
+ name: 'updated_tool',
122
+ input: { query: 'updated' },
123
+ status: AgentToolCallStatus.Succeeded,
124
+ output: { result: 'success' },
125
+ requiresConfirmation: false,
126
+ },
127
+ ];
128
+ const updated = await repository.update(created.id, { toolCalls: updatedToolCalls });
129
+ expect(updated === null || updated === void 0 ? void 0 : updated.toolCalls).toBeDefined();
130
+ expect((_a = updated === null || updated === void 0 ? void 0 : updated.toolCalls) === null || _a === void 0 ? void 0 : _a[0].name).toBe('updated_tool');
131
+ expect((_b = updated === null || updated === void 0 ? void 0 : updated.toolCalls) === null || _b === void 0 ? void 0 : _b[0].status).toBe(AgentToolCallStatus.Succeeded);
132
+ });
133
+ it('should return null if message not found', async () => {
134
+ const updated = await repository.update('507f1f77bcf86cd799439011', { content: 'Updated' });
135
+ expect(updated).toBeNull();
136
+ });
137
+ });
138
+ describe('delete', () => {
139
+ it('should delete a message by id', async () => {
140
+ const created = await repository.create(createTestMessage(chatId));
141
+ const deleted = await repository.delete(created.id);
142
+ expect(deleted).toBe(true);
143
+ const found = await repository.findById(created.id);
144
+ expect(found).toBeNull();
145
+ });
146
+ it('should return false if message not found', async () => {
147
+ const deleted = await repository.delete('507f1f77bcf86cd799439011');
148
+ expect(deleted).toBe(false);
149
+ });
150
+ });
151
+ describe('exists', () => {
152
+ it('should return true if message exists', async () => {
153
+ const created = await repository.create(createTestMessage(chatId));
154
+ const exists = await repository.exists(created.id);
155
+ expect(exists).toBe(true);
156
+ });
157
+ it('should return false if message does not exist', async () => {
158
+ const exists = await repository.exists('507f1f77bcf86cd799439011');
159
+ expect(exists).toBe(false);
160
+ });
161
+ });
162
+ describe('count', () => {
163
+ it('should count all messages when no filter', async () => {
164
+ await repository.create(createTestMessage(chatId));
165
+ await repository.create(createTestMessage(chatId));
166
+ await repository.create(createTestMessage(chatId));
167
+ const count = await repository.count();
168
+ expect(count).toBe(3);
169
+ });
170
+ it('should count messages matching filter', async () => {
171
+ await repository.create(createTestMessage(chatId, { role: MessageRole.User }));
172
+ await repository.create(createTestMessage(chatId, { role: MessageRole.User }));
173
+ await repository.create(createTestMessage(chatId, { role: MessageRole.Assistant }));
174
+ const count = await repository.count({ role: MessageRole.User });
175
+ expect(count).toBe(2);
176
+ });
177
+ });
178
+ describe('findByChatId', () => {
179
+ it('should find all messages for a chat', async () => {
180
+ const chat2 = await chatRepository.create({
181
+ title: 'Chat 2',
182
+ contextKey: 'test-context',
183
+ });
184
+ await repository.create(createTestMessage(chatId));
185
+ await repository.create(createTestMessage(chatId));
186
+ await repository.create(createTestMessage(chat2.id));
187
+ const messages = await repository.findByChatId(chatId);
188
+ expect(messages).toHaveLength(2);
189
+ expect(messages.every(m => m.chat === chatId)).toBe(true);
190
+ });
191
+ it('should return empty array if chat has no messages', async () => {
192
+ const messages = await repository.findByChatId(chatId);
193
+ expect(messages).toHaveLength(0);
194
+ });
195
+ });
196
+ describe('findByRole', () => {
197
+ it('should find all messages with a specific role', async () => {
198
+ await repository.create(createTestMessage(chatId, { role: MessageRole.User }));
199
+ await repository.create(createTestMessage(chatId, { role: MessageRole.User }));
200
+ await repository.create(createTestMessage(chatId, { role: MessageRole.Assistant }));
201
+ const messages = await repository.findByRole(MessageRole.User);
202
+ expect(messages).toHaveLength(2);
203
+ expect(messages.every(m => m.role === MessageRole.User)).toBe(true);
204
+ });
205
+ });
206
+ describe('findByChatIdAndRole', () => {
207
+ it('should find messages by chat and role', async () => {
208
+ await repository.create(createTestMessage(chatId, { role: MessageRole.User }));
209
+ await repository.create(createTestMessage(chatId, { role: MessageRole.User }));
210
+ await repository.create(createTestMessage(chatId, { role: MessageRole.Assistant }));
211
+ const messages = await repository.findByChatIdAndRole(chatId, MessageRole.User);
212
+ expect(messages).toHaveLength(2);
213
+ expect(messages.every(m => m.chat === chatId && m.role === MessageRole.User)).toBe(true);
214
+ });
215
+ it('should find all messages in chat when role not specified', async () => {
216
+ await repository.create(createTestMessage(chatId, { role: MessageRole.User }));
217
+ await repository.create(createTestMessage(chatId, { role: MessageRole.Assistant }));
218
+ const messages = await repository.findByChatIdAndRole(chatId);
219
+ expect(messages).toHaveLength(2);
220
+ });
221
+ });
222
+ describe('findWithToolCalls', () => {
223
+ it('should find messages with tool calls', async () => {
224
+ await repository.create(createTestMessage(chatId));
225
+ await repository.create(createTestMessageWithToolCalls(chatId));
226
+ await repository.create(createTestMessageWithToolCalls(chatId));
227
+ const messages = await repository.findWithToolCalls();
228
+ expect(messages.length).toBeGreaterThanOrEqual(2);
229
+ expect(messages.every(m => m.toolCalls && m.toolCalls.length > 0)).toBe(true);
230
+ });
231
+ it('should find messages with tool calls for a specific chat', async () => {
232
+ const chat2 = await chatRepository.create({
233
+ title: 'Chat 2',
234
+ contextKey: 'test-context',
235
+ });
236
+ await repository.create(createTestMessageWithToolCalls(chatId));
237
+ await repository.create(createTestMessageWithToolCalls(chatId));
238
+ await repository.create(createTestMessageWithToolCalls(chat2.id));
239
+ const messages = await repository.findWithToolCalls(chatId);
240
+ expect(messages).toHaveLength(2);
241
+ expect(messages.every(m => m.chat === chatId)).toBe(true);
242
+ });
243
+ });
244
+ describe('findWithAttachments', () => {
245
+ it('should find messages with attachments', async () => {
246
+ await repository.create(createTestMessage(chatId));
247
+ await repository.create(createTestMessageWithAttachments(chatId));
248
+ await repository.create(createTestMessageWithAttachments(chatId));
249
+ const messages = await repository.findWithAttachments();
250
+ expect(messages.length).toBeGreaterThanOrEqual(2);
251
+ expect(messages.every(m => m.attachments && m.attachments.length > 0)).toBe(true);
252
+ });
253
+ it('should find messages with attachments for a specific chat', async () => {
254
+ const chat2 = await chatRepository.create({
255
+ title: 'Chat 2',
256
+ contextKey: 'test-context',
257
+ });
258
+ await repository.create(createTestMessageWithAttachments(chatId));
259
+ await repository.create(createTestMessageWithAttachments(chatId));
260
+ await repository.create(createTestMessageWithAttachments(chat2.id));
261
+ const messages = await repository.findWithAttachments(chatId);
262
+ expect(messages).toHaveLength(2);
263
+ expect(messages.every(m => m.chat === chatId)).toBe(true);
264
+ });
265
+ });
266
+ describe('deleteByChatId', () => {
267
+ it('should delete all messages for a chat', async () => {
268
+ await repository.create(createTestMessage(chatId));
269
+ await repository.create(createTestMessage(chatId));
270
+ const deletedCount = await repository.deleteByChatId(chatId);
271
+ expect(deletedCount).toBe(2);
272
+ const remaining = await repository.findByChatId(chatId);
273
+ expect(remaining).toHaveLength(0);
274
+ });
275
+ it('should return 0 if chat has no messages', async () => {
276
+ const deletedCount = await repository.deleteByChatId(chatId);
277
+ expect(deletedCount).toBe(0);
278
+ });
279
+ });
280
+ describe('deleteByRole', () => {
281
+ it('should delete all messages with a specific role', async () => {
282
+ await repository.create(createTestMessage(chatId, { role: MessageRole.User }));
283
+ await repository.create(createTestMessage(chatId, { role: MessageRole.User }));
284
+ await repository.create(createTestMessage(chatId, { role: MessageRole.Assistant }));
285
+ const deletedCount = await repository.deleteByRole(MessageRole.User);
286
+ expect(deletedCount).toBe(2);
287
+ const remaining = await repository.findByRole(MessageRole.User);
288
+ expect(remaining).toHaveLength(0);
289
+ });
290
+ });
291
+ describe('deleteByChatIdAndRole', () => {
292
+ it('should delete messages by chat and role', async () => {
293
+ const chat2 = await chatRepository.create({
294
+ title: 'Chat 2',
295
+ contextKey: 'test-context',
296
+ });
297
+ await repository.create(createTestMessage(chatId, { role: MessageRole.User }));
298
+ await repository.create(createTestMessage(chatId, { role: MessageRole.User }));
299
+ await repository.create(createTestMessage(chatId, { role: MessageRole.Assistant }));
300
+ await repository.create(createTestMessage(chat2.id, { role: MessageRole.User }));
301
+ const deletedCount = await repository.deleteByChatIdAndRole(chatId, MessageRole.User);
302
+ expect(deletedCount).toBe(2);
303
+ const remaining = await repository.findByChatIdAndRole(chatId, MessageRole.User);
304
+ expect(remaining).toHaveLength(0);
305
+ // Verify messages in other chat are not deleted
306
+ const chat2Messages = await repository.findByChatIdAndRole(chat2.id, MessageRole.User);
307
+ expect(chat2Messages).toHaveLength(1);
308
+ });
309
+ });
310
+ });
311
+ //# sourceMappingURL=MongoAgentMessageRepository.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MongoAgentMessageRepository.test.js","sourceRoot":"","sources":["../../../src/__tests__/repositories/MongoAgentMessageRepository.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=AgentChatSchema.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AgentChatSchema.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/schemas/AgentChatSchema.test.ts"],"names":[],"mappings":""}