@xalia/agent 0.6.9 → 0.6.11

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 (199) hide show
  1. package/README.md +11 -0
  2. package/dist/agent/src/agent/agent.js +77 -18
  3. package/dist/agent/src/agent/agentUtils.js +3 -2
  4. package/dist/agent/src/agent/documentSummarizer.js +126 -0
  5. package/dist/agent/src/agent/dummyLLM.js +25 -22
  6. package/dist/agent/src/agent/imageGenLLM.js +22 -19
  7. package/dist/agent/src/agent/llm.js +1 -1
  8. package/dist/agent/src/agent/openAILLM.js +15 -12
  9. package/dist/agent/src/agent/openAILLMStreaming.js +68 -37
  10. package/dist/agent/src/agent/repeatLLM.js +16 -7
  11. package/dist/agent/src/agent/tokenCounter.js +390 -0
  12. package/dist/agent/src/agent/tokenCounter.test.js +206 -0
  13. package/dist/agent/src/agent/toolSettings.js +17 -0
  14. package/dist/agent/src/agent/tools/calculatorTool.js +45 -0
  15. package/dist/agent/src/agent/tools/contentExtractors/pdfToText.js +55 -0
  16. package/dist/agent/src/agent/tools/datetimeTool.js +38 -0
  17. package/dist/agent/src/agent/tools/fileManager/fileManagerTool.js +156 -0
  18. package/dist/agent/src/agent/tools/fileManager/index.js +31 -0
  19. package/dist/agent/src/agent/tools/fileManager/memoryFileManager.js +102 -0
  20. package/dist/agent/src/{chat/data → agent/tools/fileManager}/mimeTypes.js +3 -1
  21. package/dist/agent/src/agent/tools/fileManager/prompt.js +33 -0
  22. package/dist/agent/src/{chat/data/dbSessionFileModels.js → agent/tools/fileManager/types.js} +7 -0
  23. package/dist/agent/src/agent/tools/index.js +64 -0
  24. package/dist/agent/src/agent/tools/openUrlTool.js +57 -0
  25. package/dist/agent/src/agent/tools/renderTool.js +89 -0
  26. package/dist/agent/src/agent/tools/utils.js +61 -0
  27. package/dist/agent/src/{chat/utils/search.js → agent/tools/webSearch.js} +1 -2
  28. package/dist/agent/src/agent/tools/webSearchTool.js +40 -0
  29. package/dist/agent/src/chat/client/chatClient.js +28 -0
  30. package/dist/agent/src/chat/client/index.js +4 -1
  31. package/dist/agent/src/chat/client/sessionClient.js +28 -2
  32. package/dist/agent/src/chat/constants.js +8 -0
  33. package/dist/agent/src/chat/data/dbSessionFiles.js +11 -6
  34. package/dist/agent/src/chat/protocol/messages.js +5 -0
  35. package/dist/agent/src/chat/server/chatContextManager.js +45 -25
  36. package/dist/agent/src/chat/server/conversation.js +3 -0
  37. package/dist/agent/src/chat/server/imageGeneratorTools.js +20 -8
  38. package/dist/agent/src/chat/server/openAIRouterLLM.js +0 -3
  39. package/dist/agent/src/chat/server/openSession.js +218 -55
  40. package/dist/agent/src/chat/server/promptRefiner.js +86 -0
  41. package/dist/agent/src/chat/server/server.js +5 -1
  42. package/dist/agent/src/chat/server/sessionFileManager.js +22 -221
  43. package/dist/agent/src/chat/server/sessionRegistry.js +87 -0
  44. package/dist/agent/src/chat/server/titleGenerator.js +112 -0
  45. package/dist/agent/src/chat/server/titleGenerator.test.js +113 -0
  46. package/dist/agent/src/chat/server/tools.js +63 -287
  47. package/dist/agent/src/chat/utils/approvalManager.js +6 -3
  48. package/dist/agent/src/chat/utils/multiAsyncQueue.js +3 -0
  49. package/dist/agent/src/test/agent.test.js +16 -17
  50. package/dist/agent/src/test/chatContextManager.test.js +15 -3
  51. package/dist/agent/src/test/dbMcpServerConfigs.test.js +4 -4
  52. package/dist/agent/src/test/dbSessionFiles.test.js +17 -17
  53. package/dist/agent/src/test/testTools.js +6 -1
  54. package/dist/agent/src/test/tools.test.js +27 -9
  55. package/dist/agent/src/tool/agentChat.js +5 -2
  56. package/dist/agent/src/tool/chatMain.js +34 -7
  57. package/dist/agent/src/tool/commandPrompt.js +2 -2
  58. package/dist/agent/src/tool/files.js +7 -8
  59. package/package.json +8 -2
  60. package/.env.development +0 -1
  61. package/.prettierrc.json +0 -11
  62. package/dist/agent/src/agent/tools.js +0 -44
  63. package/eslint.config.mjs +0 -38
  64. package/scripts/chat_server +0 -8
  65. package/scripts/git_message +0 -31
  66. package/scripts/git_wip +0 -21
  67. package/scripts/pr_message +0 -18
  68. package/scripts/pr_review +0 -16
  69. package/scripts/setup_chat +0 -90
  70. package/scripts/shutdown_chat_server +0 -42
  71. package/scripts/start_chat_server +0 -24
  72. package/scripts/sudomcp_import +0 -23
  73. package/scripts/test_chat +0 -308
  74. package/src/agent/agent.ts +0 -624
  75. package/src/agent/agentUtils.ts +0 -285
  76. package/src/agent/compressingContextManager.ts +0 -129
  77. package/src/agent/context.ts +0 -265
  78. package/src/agent/contextWithWorkspace.ts +0 -162
  79. package/src/agent/dummyLLM.ts +0 -126
  80. package/src/agent/iAgentEventHandler.ts +0 -64
  81. package/src/agent/imageGenLLM.ts +0 -97
  82. package/src/agent/imageGenerator.ts +0 -45
  83. package/src/agent/iplatform.ts +0 -18
  84. package/src/agent/llm.ts +0 -74
  85. package/src/agent/mcpServerManager.ts +0 -541
  86. package/src/agent/nullAgentEventHandler.ts +0 -26
  87. package/src/agent/nullPlatform.ts +0 -13
  88. package/src/agent/openAI.ts +0 -123
  89. package/src/agent/openAILLM.ts +0 -95
  90. package/src/agent/openAILLMStreaming.ts +0 -609
  91. package/src/agent/promptProvider.ts +0 -87
  92. package/src/agent/repeatLLM.ts +0 -50
  93. package/src/agent/sudoMcpServerManager.ts +0 -361
  94. package/src/agent/tokenAuth.ts +0 -50
  95. package/src/agent/tools.ts +0 -57
  96. package/src/chat/client/chatClient.ts +0 -922
  97. package/src/chat/client/connection.test.ts +0 -241
  98. package/src/chat/client/connection.ts +0 -286
  99. package/src/chat/client/constants.ts +0 -1
  100. package/src/chat/client/index.ts +0 -18
  101. package/src/chat/client/interfaces.ts +0 -34
  102. package/src/chat/client/sessionClient.ts +0 -537
  103. package/src/chat/client/sessionFiles.ts +0 -142
  104. package/src/chat/client/teamManager.ts +0 -29
  105. package/src/chat/data/apiKeyManager.ts +0 -76
  106. package/src/chat/data/dataModels.ts +0 -101
  107. package/src/chat/data/database.ts +0 -997
  108. package/src/chat/data/dbMcpServerConfigs.ts +0 -59
  109. package/src/chat/data/dbSessionFileModels.ts +0 -113
  110. package/src/chat/data/dbSessionFiles.ts +0 -99
  111. package/src/chat/data/dbSessionMessages.ts +0 -102
  112. package/src/chat/data/mimeTypes.ts +0 -58
  113. package/src/chat/protocol/connectionMessages.ts +0 -49
  114. package/src/chat/protocol/constants.ts +0 -55
  115. package/src/chat/protocol/errors.ts +0 -16
  116. package/src/chat/protocol/messages.ts +0 -846
  117. package/src/chat/server/README.md +0 -127
  118. package/src/chat/server/chatContextManager.ts +0 -639
  119. package/src/chat/server/connectionManager.test.ts +0 -246
  120. package/src/chat/server/connectionManager.ts +0 -506
  121. package/src/chat/server/conversation.ts +0 -316
  122. package/src/chat/server/errorUtils.ts +0 -28
  123. package/src/chat/server/imageGeneratorTools.ts +0 -160
  124. package/src/chat/server/openAIRouterLLM.ts +0 -171
  125. package/src/chat/server/openSession.ts +0 -1689
  126. package/src/chat/server/openSessionMessageSender.ts +0 -4
  127. package/src/chat/server/server.ts +0 -175
  128. package/src/chat/server/sessionFileManager.ts +0 -422
  129. package/src/chat/server/sessionRegistry.test.ts +0 -137
  130. package/src/chat/server/sessionRegistry.ts +0 -1425
  131. package/src/chat/server/test-utils/mockFactories.ts +0 -422
  132. package/src/chat/server/tools.ts +0 -397
  133. package/src/chat/utils/agentSessionMap.ts +0 -76
  134. package/src/chat/utils/approvalManager.ts +0 -183
  135. package/src/chat/utils/asyncLock.ts +0 -43
  136. package/src/chat/utils/asyncQueue.ts +0 -62
  137. package/src/chat/utils/htmlToText.ts +0 -61
  138. package/src/chat/utils/multiAsyncQueue.ts +0 -62
  139. package/src/chat/utils/responseAwaiter.ts +0 -181
  140. package/src/chat/utils/search.ts +0 -139
  141. package/src/chat/utils/userResolver.ts +0 -48
  142. package/src/chat/utils/websocket.ts +0 -16
  143. package/src/index.ts +0 -0
  144. package/src/test/agent.test.ts +0 -590
  145. package/src/test/approvalManager.test.ts +0 -141
  146. package/src/test/chatContextManager.test.ts +0 -527
  147. package/src/test/clientServerConnection.test.ts +0 -205
  148. package/src/test/compressingContextManager.test.ts +0 -77
  149. package/src/test/context.test.ts +0 -150
  150. package/src/test/contextTestTools.ts +0 -95
  151. package/src/test/conversation.test.ts +0 -109
  152. package/src/test/db.test.ts +0 -363
  153. package/src/test/dbMcpServerConfigs.test.ts +0 -112
  154. package/src/test/dbSessionFiles.test.ts +0 -258
  155. package/src/test/dbSessionMessages.test.ts +0 -85
  156. package/src/test/dbTestTools.ts +0 -157
  157. package/src/test/imageLoad.test.ts +0 -15
  158. package/src/test/mcpServerManager.test.ts +0 -114
  159. package/src/test/multiAsyncQueue.test.ts +0 -183
  160. package/src/test/openaiStreaming.test.ts +0 -177
  161. package/src/test/prompt.test.ts +0 -27
  162. package/src/test/promptProvider.test.ts +0 -33
  163. package/src/test/responseAwaiter.test.ts +0 -103
  164. package/src/test/sudoMcpServerManager.test.ts +0 -63
  165. package/src/test/testTools.ts +0 -171
  166. package/src/test/tools.test.ts +0 -39
  167. package/src/tool/agentChat.ts +0 -194
  168. package/src/tool/agentMain.ts +0 -180
  169. package/src/tool/chatMain.ts +0 -594
  170. package/src/tool/commandPrompt.ts +0 -264
  171. package/src/tool/files.ts +0 -84
  172. package/src/tool/main.ts +0 -25
  173. package/src/tool/nodePlatform.ts +0 -73
  174. package/src/tool/options.ts +0 -144
  175. package/src/tool/prompt.ts +0 -101
  176. package/test_data/background_test_profile.json +0 -6
  177. package/test_data/background_test_script.json +0 -11
  178. package/test_data/dummyllm_script_crash.json +0 -32
  179. package/test_data/dummyllm_script_image_gen.json +0 -19
  180. package/test_data/dummyllm_script_image_gen_fe.json +0 -29
  181. package/test_data/dummyllm_script_invoke_image_gen_tool.json +0 -37
  182. package/test_data/dummyllm_script_render_tool.json +0 -29
  183. package/test_data/dummyllm_script_simplecalc.json +0 -28
  184. package/test_data/dummyllm_script_test_auto_approve.json +0 -81
  185. package/test_data/dummyllm_script_test_simplecalc_addition.json +0 -29
  186. package/test_data/frog.png +0 -0
  187. package/test_data/frog.png.b64 +0 -1
  188. package/test_data/git_message_profile.json +0 -4
  189. package/test_data/git_wip_system.txt +0 -5
  190. package/test_data/image_gen_test_profile.json +0 -5
  191. package/test_data/pr_message_profile.json +0 -4
  192. package/test_data/pr_review_profile.json +0 -4
  193. package/test_data/prompt_simplecalc.txt +0 -1
  194. package/test_data/simplecalc_profile.json +0 -4
  195. package/test_data/sudomcp_import_profile.json +0 -4
  196. package/test_data/test_script_profile.json +0 -8
  197. package/tsconfig.json +0 -13
  198. package/vitest.config.ts +0 -39
  199. /package/dist/agent/src/{chat/utils → agent/tools/contentExtractors}/htmlToText.js +0 -0
@@ -1,363 +0,0 @@
1
- import { expect, beforeEach, afterEach, describe, it } from "vitest";
2
- import { Database } from "../chat/data/database";
3
- import { SessionDescriptor } from "../chat/data/dataModels";
4
- import { strict as assert } from "assert";
5
- import { v4 as uuidv4 } from "uuid";
6
- import {
7
- AGENT_PROFILE,
8
- AGENT_PROFILE_2,
9
- TestUserSpec,
10
- cleanupTestUser,
11
- createTestSession,
12
- createTestTeamSession,
13
- createTestUser,
14
- getLocalDB,
15
- testUserSpec,
16
- } from "./dbTestTools";
17
-
18
- describe("DB", () => {
19
- let db: Database;
20
- let testUsers: TestUserSpec[];
21
-
22
- beforeEach(() => {
23
- // Generate unique test data for each test
24
- db = getLocalDB();
25
- testUsers = [testUserSpec(), testUserSpec()];
26
- });
27
-
28
- afterEach(async () => {
29
- // Clean up test data after each test
30
- await Promise.all(testUsers.map((tu) => cleanupTestUser(db, tu)));
31
- testUsers = [];
32
- });
33
-
34
- it("should get data for existing user", async () => {
35
- await createTestUser(db, testUsers[0]);
36
- const userData = await db.getUserDataFromApiKey(testUsers[0].api_key);
37
- expect(userData).eql({
38
- uuid: testUsers[0].uuid,
39
- email: testUsers[0].email,
40
- nickname: testUsers[0].name,
41
- timezone: "UTC",
42
- });
43
- });
44
-
45
- it("should return undefined for non-existant user", async () => {
46
- const userData = await db.getUserDataFromApiKey("no_such_key_" + uuidv4());
47
- expect(userData).eql(undefined);
48
- });
49
-
50
- it("should get user by uuid", async () => {
51
- await createTestUser(db, testUsers[0]);
52
- const userData = await db.getUserFromUuid(testUsers[0].uuid);
53
- assert(userData);
54
- expect(userData.uuid).eql(testUsers[0].uuid);
55
- expect(userData.nickname).eql(testUsers[0].name);
56
- });
57
-
58
- it("should create and retrieve agent profiles", async () => {
59
- await createTestUser(db, testUsers[0]);
60
-
61
- const agentProfile = await db.createAgentProfile(
62
- testUsers[0].uuid,
63
- undefined /* team_uuid */,
64
- "test_profile",
65
- AGENT_PROFILE
66
- );
67
- assert(agentProfile);
68
- const agentProfileId = agentProfile.uuid;
69
-
70
- const savedAgentProfile = await db.getSavedAgentProfileById(agentProfileId);
71
- const savedAgentProfileByName = await db.getSavedAgentProfileByName(
72
- testUsers[0].uuid,
73
- "test_profile"
74
- );
75
- const fetchedAgentProfile = await db.getAgentProfileById(agentProfileId);
76
-
77
- assert(savedAgentProfile);
78
- assert(savedAgentProfileByName);
79
- assert(fetchedAgentProfile);
80
-
81
- expect(savedAgentProfile.uuid).eql(agentProfileId);
82
- expect(savedAgentProfile.profile).eql(AGENT_PROFILE);
83
- expect(savedAgentProfile.user_uuid).eql(testUsers[0].uuid);
84
- expect(savedAgentProfile.profile_name).eql("test_profile");
85
-
86
- expect(savedAgentProfileByName).eql(savedAgentProfile);
87
-
88
- expect(fetchedAgentProfile).eql(AGENT_PROFILE);
89
- });
90
-
91
- it("should update agent profiles", async () => {
92
- await createTestUser(db, testUsers[0]);
93
-
94
- const agentProfile = await db.createAgentProfile(
95
- testUsers[0].uuid,
96
- undefined /* team_uuid */,
97
- "test_profile",
98
- AGENT_PROFILE
99
- );
100
- const agentProfileId = agentProfile ? agentProfile.uuid : undefined;
101
- expect(agentProfileId).not.eql(undefined);
102
- assert(agentProfileId);
103
-
104
- await db.updateAgentProfile(agentProfileId, AGENT_PROFILE_2);
105
-
106
- const agentProfileFromDB = await db.getAgentProfileById(agentProfileId);
107
- assert(agentProfileFromDB);
108
- expect(agentProfileFromDB).eql(AGENT_PROFILE_2);
109
- });
110
-
111
- it("should update settings on saved agent profiles", async () => {
112
- await createTestUser(db, testUsers[0]);
113
-
114
- const agentProfile = await db.createAgentProfile(
115
- testUsers[0].uuid,
116
- undefined /* team_uuid */,
117
- "test_profile",
118
- AGENT_PROFILE
119
- );
120
- assert(agentProfile);
121
- const agentProfileId = agentProfile.uuid;
122
- const savedAgentProfile0 =
123
- await db.getSavedAgentProfileById(agentProfileId);
124
- assert(savedAgentProfile0);
125
-
126
- const prefsNone = await db.getAgentProfilePreferences(
127
- agentProfileId + "aa"
128
- );
129
- expect(prefsNone).eql(undefined);
130
-
131
- const prefs0 = await db.getAgentProfilePreferences(agentProfileId);
132
- expect(prefs0).eql({ auto_approve: {} });
133
-
134
- const newPrefs1 = {
135
- skip_welcome: true,
136
- auto_approve: { some_server: ["tool1"] },
137
- };
138
- await db.updateAgentProfilePreferences(agentProfileId, newPrefs1);
139
- const prefs1 = await db.getAgentProfilePreferences(agentProfileId);
140
- expect(prefs1).eql(newPrefs1);
141
-
142
- const newPrefs2 = {
143
- skip_welcome: true,
144
- auto_approve: { different_server: ["toolA", "tool2"] },
145
- };
146
- await db.updateAgentProfilePreferences(agentProfileId, newPrefs2);
147
- const prefs2 = await db.getAgentProfilePreferences(agentProfileId);
148
- expect(prefs2).eql(newPrefs2);
149
- assert(prefs2);
150
-
151
- // Check that the rest of the profile is unchanged
152
-
153
- const savedAgentProfile2 =
154
- await db.getSavedAgentProfileById(agentProfileId);
155
-
156
- // Linter doesn't like this, so we overwrite preferences on
157
- // savedAgentProfile0.
158
- //
159
- // expect(savedAgentProfile2).eql({
160
- // ...savedAgentProfile0,
161
- // preferences: prefs2,
162
- // });
163
-
164
- savedAgentProfile0.preferences = prefs2;
165
- expect(savedAgentProfile2).eql(savedAgentProfile0);
166
- });
167
-
168
- it("should create and retrieve sessions", async () => {
169
- await createTestUser(db, testUsers[0]);
170
-
171
- const agentProfile = await db.createAgentProfile(
172
- testUsers[0].uuid,
173
- undefined /* team_uuid */,
174
- "test_profile",
175
- AGENT_PROFILE
176
- );
177
- assert(agentProfile);
178
- const agentProfileId = agentProfile.uuid;
179
-
180
- const sessionId = Database.sessionNewUUID();
181
- await db.sessionCreate({
182
- session_uuid: sessionId,
183
- user_uuid: testUsers[0].uuid,
184
- title: "test_session",
185
- agent_profile_uuid: agentProfileId,
186
- agent_paused: false,
187
- });
188
- assert(sessionId);
189
-
190
- function checkSession(session: SessionDescriptor | undefined) {
191
- assert(session);
192
- expect(session.agent_profile_uuid).eql(agentProfileId);
193
- expect(session.title).eql("test_session");
194
- expect(session.user_uuid).eql(testUsers[0].uuid);
195
- expect(session.session_uuid).eql(sessionId);
196
- }
197
-
198
- checkSession(await db.sessionGetDescriptorById(sessionId));
199
- checkSession(await db.sessionGetById(sessionId));
200
-
201
- // Delete session and check conv is empty
202
-
203
- await db.sessionDeleteById(sessionId);
204
- const session2 = await db.sessionGetDescriptorById(sessionId);
205
- expect(!!session2).eql(false);
206
- });
207
-
208
- it("should update session titles", async () => {
209
- const { agentProfileId, sessionId } = await createTestSession(
210
- db,
211
- testUsers[0]
212
- );
213
-
214
- // Change the title
215
-
216
- await db.sessionUpdateTitle(sessionId, "new_title");
217
-
218
- // Check the session
219
-
220
- const session = await db.sessionGetDescriptorById(sessionId);
221
- assert(session);
222
- expect(session.agent_profile_uuid).eql(agentProfileId);
223
- expect(session.title).eql("new_title");
224
- expect(session.user_uuid).eql(testUsers[0].uuid);
225
- expect(session.session_uuid).eql(sessionId);
226
- });
227
-
228
- it("should update session workspace", async () => {
229
- const { sessionId } = await createTestSession(db, testUsers[0]);
230
-
231
- // Set the workspace
232
-
233
- const ws1 = { message: "workspace1" };
234
- await db.sessionUpdateWorkspace(sessionId, ws1);
235
- const session1 = await db.sessionGetById(sessionId);
236
-
237
- // Change the workspace
238
-
239
- const ws2 = {
240
- message: "workspace2",
241
- imageB64: "data:image/png;base64;asdfadfadsfads",
242
- };
243
- await db.sessionUpdateWorkspace(sessionId, ws2);
244
- const session2 = await db.sessionGetById(sessionId);
245
-
246
- // Removed the workspace
247
-
248
- await db.sessionUpdateWorkspace(sessionId, undefined);
249
- const session3 = await db.sessionGetById(sessionId);
250
-
251
- // Check
252
-
253
- assert(session1);
254
- expect(session1.workspace).eql(ws1);
255
-
256
- assert(session2);
257
- expect(session2.workspace).eql(ws2);
258
-
259
- assert(session3);
260
- expect(session3.workspace).eql(undefined);
261
- });
262
-
263
- it("should update session access token", async () => {
264
- const { sessionId } = await createTestSession(db, testUsers[0]);
265
- const token = "access_token_A";
266
-
267
- // Initial state
268
-
269
- const session0 = await db.sessionGetDescriptorById(sessionId);
270
-
271
- // Change the access token
272
-
273
- await db.sessionUpdateAccessToken(sessionId, token);
274
- const session1 = await db.sessionGetDescriptorById(sessionId);
275
-
276
- // Reset access token
277
-
278
- await db.sessionUpdateAccessToken(sessionId, undefined);
279
- const session2 = await db.sessionGetDescriptorById(sessionId);
280
-
281
- // Asserts
282
-
283
- assert(session0);
284
- assert(session1);
285
- assert(session2);
286
-
287
- expect(session0.access_token).eql(undefined);
288
- expect(session1.access_token).eql(token);
289
- expect(session2.access_token).eql(undefined);
290
- });
291
-
292
- it("handles team participants correctly", async () => {
293
- const { sessionId, teamId } = await createTestTeamSession(
294
- db,
295
- "team1",
296
- testUsers
297
- );
298
-
299
- // Only owner should be a participant
300
-
301
- const participants0 = await db.sessionGetParticipants(sessionId);
302
- expect(participants0).to.have.lengthOf(1);
303
- expect(participants0).to.deep.include({
304
- user_uuid: testUsers[0].uuid,
305
- nickname: testUsers[0].name,
306
- email: testUsers[0].email,
307
- role: "owner",
308
- });
309
-
310
- // Add secondary user as participant
311
- await db.teamAddMember(teamId, testUsers[1].uuid);
312
- const participants1 = await db.sessionGetParticipants(sessionId);
313
- expect(participants1).to.have.lengthOf(2);
314
- expect(participants1).to.deep.include({
315
- user_uuid: testUsers[0].uuid,
316
- nickname: testUsers[0].name,
317
- email: testUsers[0].email,
318
- role: "owner",
319
- });
320
- expect(participants1).to.deep.include({
321
- user_uuid: testUsers[1].uuid,
322
- nickname: testUsers[1].name,
323
- email: testUsers[1].email,
324
- role: "participant",
325
- });
326
-
327
- // Remove secondary user
328
- await db.teamRemoveMember(teamId, testUsers[1].uuid);
329
- const participants2 = await db.sessionGetParticipants(sessionId);
330
- expect(participants2).to.have.lengthOf(1);
331
- expect(participants2).to.deep.include({
332
- user_uuid: testUsers[0].uuid,
333
- nickname: testUsers[0].name,
334
- email: testUsers[0].email,
335
- role: "owner",
336
- });
337
- });
338
-
339
- it("handles session_checkpoints correctly", async () => {
340
- const { sessionId } = await createTestSession(db, testUsers[0]);
341
-
342
- await db.sessionCheckpointDelete(sessionId);
343
-
344
- // No checkpoints
345
-
346
- const noCheckpoint = await db.sessionCheckpointGet(sessionId);
347
- expect(noCheckpoint).eql(undefined);
348
-
349
- // Create checkpoint and check
350
-
351
- const cpModel1 = { message_idx: 3, summary: "summaryA" };
352
- await db.sessionCheckpointSet(sessionId, cpModel1);
353
- const cp1 = await db.sessionCheckpointGet(sessionId);
354
- expect(cp1).eql(cpModel1);
355
-
356
- // Replace
357
-
358
- const cpModel2 = { message_idx: 6, summary: "summaryB" };
359
- await db.sessionCheckpointSet(sessionId, cpModel2);
360
- const cp2 = await db.sessionCheckpointGet(sessionId);
361
- expect(cp2).eql(cpModel2);
362
- });
363
- });
@@ -1,112 +0,0 @@
1
- import { expect } from "chai";
2
- import { strict as assert } from "assert";
3
-
4
- import { Database } from "../chat/data/database";
5
- import {
6
- TestUser,
7
- TestUserSpec,
8
- cleanupTestUser,
9
- createTestUser,
10
- getLocalDB,
11
- testUserSpec,
12
- } from "./dbTestTools";
13
- import { DbMcpServerConfigs } from "../chat/data/dbMcpServerConfigs";
14
- import { McpServerConfiguration } from "@xalia/xmcp/sdk";
15
-
16
- type ConfigDesc = {
17
- server_name: string;
18
- config: McpServerConfiguration | undefined;
19
- };
20
-
21
- const DEFAULT_CONFIGS: ConfigDesc[] = [
22
- {
23
- server_name: "server_1",
24
- config: {
25
- a: "123",
26
- b: "456",
27
- },
28
- },
29
- {
30
- server_name: "server_2",
31
- config: {
32
- d: "adsf",
33
- e: "qwer",
34
- },
35
- },
36
- ];
37
-
38
- async function setup(
39
- db: Database,
40
- user1: TestUserSpec
41
- ): Promise<{
42
- msc: DbMcpServerConfigs;
43
- user0: TestUser;
44
- }> {
45
- const user0 = await createTestUser(db, user1);
46
- const msc = db.createTypedClient(DbMcpServerConfigs);
47
-
48
- await Promise.all(
49
- DEFAULT_CONFIGS.map((cfg) => {
50
- assert(cfg.config);
51
- return msc.setConfigForUser(user0.uuid, cfg.server_name, cfg.config);
52
- })
53
- );
54
-
55
- return { msc, user0 };
56
- }
57
-
58
- describe("DB McpServerConfigurations", () => {
59
- let db: Database;
60
- let user: TestUserSpec;
61
-
62
- beforeEach(() => {
63
- db = getLocalDB();
64
- user = testUserSpec();
65
- });
66
-
67
- afterEach(async () => {
68
- await cleanupTestUser(db, user);
69
- });
70
-
71
- it("retrieves configs", async function () {
72
- const { user0, msc } = await setup(db, user);
73
- for (const cfgDesc of DEFAULT_CONFIGS) {
74
- const cfg = await msc.getConfigForUser(user0.uuid, cfgDesc.server_name);
75
- expect(cfg).eql(cfgDesc.config);
76
- }
77
- });
78
-
79
- it("delete config", async function () {
80
- const { user0, msc } = await setup(db, user);
81
-
82
- const cfgDescs: ConfigDesc[] = DEFAULT_CONFIGS.map(
83
- (x) => JSON.parse(JSON.stringify(x)) as ConfigDesc
84
- );
85
- assert(cfgDescs[0]);
86
- await msc.deleteConfigForUser(user0.uuid, cfgDescs[0].server_name);
87
- cfgDescs[0].config = undefined;
88
-
89
- for (const cfgDesc of cfgDescs) {
90
- const cfg = await msc.getConfigForUser(user0.uuid, cfgDesc.server_name);
91
- expect(cfg).eql(cfgDesc.config);
92
- }
93
- });
94
-
95
- it("overwrite config", async function () {
96
- const { user0, msc } = await setup(db, user);
97
-
98
- const newConfig = { a: "123", b: "789", c: "uiop" };
99
- const cfgDescs: ConfigDesc[] = DEFAULT_CONFIGS.map(
100
- (x) => JSON.parse(JSON.stringify(x)) as ConfigDesc
101
- );
102
-
103
- assert(cfgDescs[0]);
104
- await msc.setConfigForUser(user0.uuid, cfgDescs[0].server_name, newConfig);
105
- cfgDescs[0].config = newConfig;
106
-
107
- for (const cfgDesc of cfgDescs) {
108
- const cfg = await msc.getConfigForUser(user0.uuid, cfgDesc.server_name);
109
- expect(cfg).eql(cfgDesc.config);
110
- }
111
- });
112
- });