@xalia/agent 0.6.10 → 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 (161) hide show
  1. package/package.json +5 -2
  2. package/.env.development +0 -6
  3. package/.env.test +0 -7
  4. package/.prettierrc.json +0 -11
  5. package/context_system.md +0 -498
  6. package/eslint.config.mjs +0 -38
  7. package/scripts/chat_server +0 -8
  8. package/scripts/git_message +0 -31
  9. package/scripts/git_wip +0 -21
  10. package/scripts/pr_message +0 -18
  11. package/scripts/pr_review +0 -16
  12. package/scripts/setup_chat +0 -90
  13. package/scripts/shutdown_chat_server +0 -42
  14. package/scripts/start_chat_server +0 -24
  15. package/scripts/sudomcp_import +0 -23
  16. package/scripts/test_chat +0 -327
  17. package/src/agent/agent.ts +0 -699
  18. package/src/agent/agentUtils.ts +0 -286
  19. package/src/agent/compressingContextManager.ts +0 -129
  20. package/src/agent/context.ts +0 -265
  21. package/src/agent/contextWithWorkspace.ts +0 -162
  22. package/src/agent/documentSummarizer.ts +0 -157
  23. package/src/agent/dummyLLM.ts +0 -130
  24. package/src/agent/iAgentEventHandler.ts +0 -64
  25. package/src/agent/imageGenLLM.ts +0 -101
  26. package/src/agent/imageGenerator.ts +0 -45
  27. package/src/agent/iplatform.ts +0 -18
  28. package/src/agent/llm.ts +0 -74
  29. package/src/agent/mcpServerManager.ts +0 -541
  30. package/src/agent/nullAgentEventHandler.ts +0 -26
  31. package/src/agent/nullPlatform.ts +0 -13
  32. package/src/agent/openAI.ts +0 -123
  33. package/src/agent/openAILLM.ts +0 -99
  34. package/src/agent/openAILLMStreaming.ts +0 -648
  35. package/src/agent/promptProvider.ts +0 -87
  36. package/src/agent/repeatLLM.ts +0 -62
  37. package/src/agent/sudoMcpServerManager.ts +0 -361
  38. package/src/agent/test_data/harrypotter.txt +0 -6065
  39. package/src/agent/tokenAuth.ts +0 -50
  40. package/src/agent/tokenCounter.test.ts +0 -243
  41. package/src/agent/tokenCounter.ts +0 -483
  42. package/src/agent/toolSettings.ts +0 -24
  43. package/src/agent/tools/calculatorTool.ts +0 -50
  44. package/src/agent/tools/contentExtractors/htmlToText.ts +0 -61
  45. package/src/agent/tools/contentExtractors/pdfToText.ts +0 -60
  46. package/src/agent/tools/datetimeTool.ts +0 -41
  47. package/src/agent/tools/fileManager/fileManagerTool.ts +0 -199
  48. package/src/agent/tools/fileManager/index.ts +0 -50
  49. package/src/agent/tools/fileManager/memoryFileManager.ts +0 -120
  50. package/src/agent/tools/fileManager/mimeTypes.ts +0 -60
  51. package/src/agent/tools/fileManager/prompt.ts +0 -38
  52. package/src/agent/tools/fileManager/types.ts +0 -189
  53. package/src/agent/tools/index.ts +0 -49
  54. package/src/agent/tools/openUrlTool.ts +0 -62
  55. package/src/agent/tools/renderTool.ts +0 -92
  56. package/src/agent/tools/utils.ts +0 -74
  57. package/src/agent/tools/webSearch.ts +0 -138
  58. package/src/agent/tools/webSearchTool.ts +0 -44
  59. package/src/chat/client/chatClient.ts +0 -967
  60. package/src/chat/client/connection.test.ts +0 -241
  61. package/src/chat/client/connection.ts +0 -286
  62. package/src/chat/client/constants.ts +0 -1
  63. package/src/chat/client/index.ts +0 -21
  64. package/src/chat/client/interfaces.ts +0 -34
  65. package/src/chat/client/sessionClient.ts +0 -574
  66. package/src/chat/client/sessionFiles.ts +0 -142
  67. package/src/chat/client/teamManager.ts +0 -29
  68. package/src/chat/constants.ts +0 -6
  69. package/src/chat/data/apiKeyManager.ts +0 -76
  70. package/src/chat/data/dataModels.ts +0 -107
  71. package/src/chat/data/database.ts +0 -997
  72. package/src/chat/data/dbMcpServerConfigs.ts +0 -59
  73. package/src/chat/data/dbSessionFiles.ts +0 -107
  74. package/src/chat/data/dbSessionMessages.ts +0 -102
  75. package/src/chat/protocol/connectionMessages.ts +0 -49
  76. package/src/chat/protocol/constants.ts +0 -55
  77. package/src/chat/protocol/errors.ts +0 -16
  78. package/src/chat/protocol/messages.ts +0 -899
  79. package/src/chat/server/README.md +0 -127
  80. package/src/chat/server/chatContextManager.ts +0 -660
  81. package/src/chat/server/connectionManager.test.ts +0 -246
  82. package/src/chat/server/connectionManager.ts +0 -506
  83. package/src/chat/server/conversation.ts +0 -319
  84. package/src/chat/server/errorUtils.ts +0 -28
  85. package/src/chat/server/imageGeneratorTools.ts +0 -179
  86. package/src/chat/server/openAIRouterLLM.ts +0 -168
  87. package/src/chat/server/openSession.ts +0 -1945
  88. package/src/chat/server/openSessionMessageSender.ts +0 -4
  89. package/src/chat/server/promptRefiner.ts +0 -106
  90. package/src/chat/server/server.ts +0 -178
  91. package/src/chat/server/sessionFileManager.ts +0 -151
  92. package/src/chat/server/sessionRegistry.test.ts +0 -137
  93. package/src/chat/server/sessionRegistry.ts +0 -1553
  94. package/src/chat/server/test-utils/mockFactories.ts +0 -422
  95. package/src/chat/server/titleGenerator.test.ts +0 -103
  96. package/src/chat/server/titleGenerator.ts +0 -143
  97. package/src/chat/server/tools.ts +0 -170
  98. package/src/chat/utils/agentSessionMap.ts +0 -76
  99. package/src/chat/utils/approvalManager.ts +0 -189
  100. package/src/chat/utils/asyncLock.ts +0 -43
  101. package/src/chat/utils/asyncQueue.ts +0 -62
  102. package/src/chat/utils/multiAsyncQueue.ts +0 -66
  103. package/src/chat/utils/responseAwaiter.ts +0 -181
  104. package/src/chat/utils/userResolver.ts +0 -48
  105. package/src/chat/utils/websocket.ts +0 -16
  106. package/src/index.ts +0 -0
  107. package/src/test/agent.test.ts +0 -584
  108. package/src/test/approvalManager.test.ts +0 -141
  109. package/src/test/chatContextManager.test.ts +0 -552
  110. package/src/test/clientServerConnection.test.ts +0 -205
  111. package/src/test/compressingContextManager.test.ts +0 -77
  112. package/src/test/context.test.ts +0 -150
  113. package/src/test/contextTestTools.ts +0 -95
  114. package/src/test/conversation.test.ts +0 -109
  115. package/src/test/db.test.ts +0 -363
  116. package/src/test/dbMcpServerConfigs.test.ts +0 -112
  117. package/src/test/dbSessionFiles.test.ts +0 -258
  118. package/src/test/dbSessionMessages.test.ts +0 -85
  119. package/src/test/dbTestTools.ts +0 -157
  120. package/src/test/imageLoad.test.ts +0 -15
  121. package/src/test/mcpServerManager.test.ts +0 -114
  122. package/src/test/multiAsyncQueue.test.ts +0 -183
  123. package/src/test/openaiStreaming.test.ts +0 -177
  124. package/src/test/prompt.test.ts +0 -27
  125. package/src/test/promptProvider.test.ts +0 -33
  126. package/src/test/responseAwaiter.test.ts +0 -103
  127. package/src/test/sudoMcpServerManager.test.ts +0 -63
  128. package/src/test/testTools.ts +0 -176
  129. package/src/test/tools.test.ts +0 -64
  130. package/src/tool/agentChat.ts +0 -203
  131. package/src/tool/agentMain.ts +0 -180
  132. package/src/tool/chatMain.ts +0 -621
  133. package/src/tool/commandPrompt.ts +0 -264
  134. package/src/tool/files.ts +0 -82
  135. package/src/tool/main.ts +0 -25
  136. package/src/tool/nodePlatform.ts +0 -73
  137. package/src/tool/options.ts +0 -144
  138. package/src/tool/prompt.ts +0 -101
  139. package/test_data/background_test_profile.json +0 -6
  140. package/test_data/background_test_script.json +0 -11
  141. package/test_data/dummyllm_script_crash.json +0 -32
  142. package/test_data/dummyllm_script_image_gen.json +0 -19
  143. package/test_data/dummyllm_script_image_gen_fe.json +0 -29
  144. package/test_data/dummyllm_script_invoke_image_gen_tool.json +0 -37
  145. package/test_data/dummyllm_script_render_tool.json +0 -29
  146. package/test_data/dummyllm_script_simplecalc.json +0 -28
  147. package/test_data/dummyllm_script_test_auto_approve.json +0 -81
  148. package/test_data/dummyllm_script_test_simplecalc_addition.json +0 -29
  149. package/test_data/frog.png +0 -0
  150. package/test_data/frog.png.b64 +0 -1
  151. package/test_data/git_message_profile.json +0 -4
  152. package/test_data/git_wip_system.txt +0 -5
  153. package/test_data/image_gen_test_profile.json +0 -5
  154. package/test_data/pr_message_profile.json +0 -4
  155. package/test_data/pr_review_profile.json +0 -4
  156. package/test_data/prompt_simplecalc.txt +0 -1
  157. package/test_data/simplecalc_profile.json +0 -4
  158. package/test_data/sudomcp_import_profile.json +0 -4
  159. package/test_data/test_script_profile.json +0 -8
  160. package/tsconfig.json +0 -13
  161. package/vitest.config.ts +0 -39
@@ -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 "vitest";
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).toEqual(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).toEqual(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).toEqual(cfgDesc.config);
110
- }
111
- });
112
- });