@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.
- package/README.md +11 -0
- package/dist/agent/src/agent/agent.js +77 -18
- package/dist/agent/src/agent/agentUtils.js +3 -2
- package/dist/agent/src/agent/documentSummarizer.js +126 -0
- package/dist/agent/src/agent/dummyLLM.js +25 -22
- package/dist/agent/src/agent/imageGenLLM.js +22 -19
- package/dist/agent/src/agent/llm.js +1 -1
- package/dist/agent/src/agent/openAILLM.js +15 -12
- package/dist/agent/src/agent/openAILLMStreaming.js +68 -37
- package/dist/agent/src/agent/repeatLLM.js +16 -7
- package/dist/agent/src/agent/tokenCounter.js +390 -0
- package/dist/agent/src/agent/tokenCounter.test.js +206 -0
- package/dist/agent/src/agent/toolSettings.js +17 -0
- package/dist/agent/src/agent/tools/calculatorTool.js +45 -0
- package/dist/agent/src/agent/tools/contentExtractors/pdfToText.js +55 -0
- package/dist/agent/src/agent/tools/datetimeTool.js +38 -0
- package/dist/agent/src/agent/tools/fileManager/fileManagerTool.js +156 -0
- package/dist/agent/src/agent/tools/fileManager/index.js +31 -0
- package/dist/agent/src/agent/tools/fileManager/memoryFileManager.js +102 -0
- package/dist/agent/src/{chat/data → agent/tools/fileManager}/mimeTypes.js +3 -1
- package/dist/agent/src/agent/tools/fileManager/prompt.js +33 -0
- package/dist/agent/src/{chat/data/dbSessionFileModels.js → agent/tools/fileManager/types.js} +7 -0
- package/dist/agent/src/agent/tools/index.js +64 -0
- package/dist/agent/src/agent/tools/openUrlTool.js +57 -0
- package/dist/agent/src/agent/tools/renderTool.js +89 -0
- package/dist/agent/src/agent/tools/utils.js +61 -0
- package/dist/agent/src/{chat/utils/search.js → agent/tools/webSearch.js} +1 -2
- package/dist/agent/src/agent/tools/webSearchTool.js +40 -0
- package/dist/agent/src/chat/client/chatClient.js +28 -0
- package/dist/agent/src/chat/client/index.js +4 -1
- package/dist/agent/src/chat/client/sessionClient.js +28 -2
- package/dist/agent/src/chat/constants.js +8 -0
- package/dist/agent/src/chat/data/dbSessionFiles.js +11 -6
- package/dist/agent/src/chat/protocol/messages.js +5 -0
- package/dist/agent/src/chat/server/chatContextManager.js +45 -25
- package/dist/agent/src/chat/server/conversation.js +3 -0
- package/dist/agent/src/chat/server/imageGeneratorTools.js +20 -8
- package/dist/agent/src/chat/server/openAIRouterLLM.js +0 -3
- package/dist/agent/src/chat/server/openSession.js +218 -55
- package/dist/agent/src/chat/server/promptRefiner.js +86 -0
- package/dist/agent/src/chat/server/server.js +5 -1
- package/dist/agent/src/chat/server/sessionFileManager.js +22 -221
- package/dist/agent/src/chat/server/sessionRegistry.js +87 -0
- package/dist/agent/src/chat/server/titleGenerator.js +112 -0
- package/dist/agent/src/chat/server/titleGenerator.test.js +113 -0
- package/dist/agent/src/chat/server/tools.js +63 -287
- package/dist/agent/src/chat/utils/approvalManager.js +6 -3
- package/dist/agent/src/chat/utils/multiAsyncQueue.js +3 -0
- package/dist/agent/src/test/agent.test.js +16 -17
- package/dist/agent/src/test/chatContextManager.test.js +15 -3
- package/dist/agent/src/test/dbMcpServerConfigs.test.js +4 -4
- package/dist/agent/src/test/dbSessionFiles.test.js +17 -17
- package/dist/agent/src/test/testTools.js +6 -1
- package/dist/agent/src/test/tools.test.js +27 -9
- package/dist/agent/src/tool/agentChat.js +5 -2
- package/dist/agent/src/tool/chatMain.js +34 -7
- package/dist/agent/src/tool/commandPrompt.js +2 -2
- package/dist/agent/src/tool/files.js +7 -8
- package/package.json +8 -2
- package/.env.development +0 -1
- package/.prettierrc.json +0 -11
- package/dist/agent/src/agent/tools.js +0 -44
- package/eslint.config.mjs +0 -38
- package/scripts/chat_server +0 -8
- package/scripts/git_message +0 -31
- package/scripts/git_wip +0 -21
- package/scripts/pr_message +0 -18
- package/scripts/pr_review +0 -16
- package/scripts/setup_chat +0 -90
- package/scripts/shutdown_chat_server +0 -42
- package/scripts/start_chat_server +0 -24
- package/scripts/sudomcp_import +0 -23
- package/scripts/test_chat +0 -308
- package/src/agent/agent.ts +0 -624
- package/src/agent/agentUtils.ts +0 -285
- package/src/agent/compressingContextManager.ts +0 -129
- package/src/agent/context.ts +0 -265
- package/src/agent/contextWithWorkspace.ts +0 -162
- package/src/agent/dummyLLM.ts +0 -126
- package/src/agent/iAgentEventHandler.ts +0 -64
- package/src/agent/imageGenLLM.ts +0 -97
- package/src/agent/imageGenerator.ts +0 -45
- package/src/agent/iplatform.ts +0 -18
- package/src/agent/llm.ts +0 -74
- package/src/agent/mcpServerManager.ts +0 -541
- package/src/agent/nullAgentEventHandler.ts +0 -26
- package/src/agent/nullPlatform.ts +0 -13
- package/src/agent/openAI.ts +0 -123
- package/src/agent/openAILLM.ts +0 -95
- package/src/agent/openAILLMStreaming.ts +0 -609
- package/src/agent/promptProvider.ts +0 -87
- package/src/agent/repeatLLM.ts +0 -50
- package/src/agent/sudoMcpServerManager.ts +0 -361
- package/src/agent/tokenAuth.ts +0 -50
- package/src/agent/tools.ts +0 -57
- package/src/chat/client/chatClient.ts +0 -922
- package/src/chat/client/connection.test.ts +0 -241
- package/src/chat/client/connection.ts +0 -286
- package/src/chat/client/constants.ts +0 -1
- package/src/chat/client/index.ts +0 -18
- package/src/chat/client/interfaces.ts +0 -34
- package/src/chat/client/sessionClient.ts +0 -537
- package/src/chat/client/sessionFiles.ts +0 -142
- package/src/chat/client/teamManager.ts +0 -29
- package/src/chat/data/apiKeyManager.ts +0 -76
- package/src/chat/data/dataModels.ts +0 -101
- package/src/chat/data/database.ts +0 -997
- package/src/chat/data/dbMcpServerConfigs.ts +0 -59
- package/src/chat/data/dbSessionFileModels.ts +0 -113
- package/src/chat/data/dbSessionFiles.ts +0 -99
- package/src/chat/data/dbSessionMessages.ts +0 -102
- package/src/chat/data/mimeTypes.ts +0 -58
- package/src/chat/protocol/connectionMessages.ts +0 -49
- package/src/chat/protocol/constants.ts +0 -55
- package/src/chat/protocol/errors.ts +0 -16
- package/src/chat/protocol/messages.ts +0 -846
- package/src/chat/server/README.md +0 -127
- package/src/chat/server/chatContextManager.ts +0 -639
- package/src/chat/server/connectionManager.test.ts +0 -246
- package/src/chat/server/connectionManager.ts +0 -506
- package/src/chat/server/conversation.ts +0 -316
- package/src/chat/server/errorUtils.ts +0 -28
- package/src/chat/server/imageGeneratorTools.ts +0 -160
- package/src/chat/server/openAIRouterLLM.ts +0 -171
- package/src/chat/server/openSession.ts +0 -1689
- package/src/chat/server/openSessionMessageSender.ts +0 -4
- package/src/chat/server/server.ts +0 -175
- package/src/chat/server/sessionFileManager.ts +0 -422
- package/src/chat/server/sessionRegistry.test.ts +0 -137
- package/src/chat/server/sessionRegistry.ts +0 -1425
- package/src/chat/server/test-utils/mockFactories.ts +0 -422
- package/src/chat/server/tools.ts +0 -397
- package/src/chat/utils/agentSessionMap.ts +0 -76
- package/src/chat/utils/approvalManager.ts +0 -183
- package/src/chat/utils/asyncLock.ts +0 -43
- package/src/chat/utils/asyncQueue.ts +0 -62
- package/src/chat/utils/htmlToText.ts +0 -61
- package/src/chat/utils/multiAsyncQueue.ts +0 -62
- package/src/chat/utils/responseAwaiter.ts +0 -181
- package/src/chat/utils/search.ts +0 -139
- package/src/chat/utils/userResolver.ts +0 -48
- package/src/chat/utils/websocket.ts +0 -16
- package/src/index.ts +0 -0
- package/src/test/agent.test.ts +0 -590
- package/src/test/approvalManager.test.ts +0 -141
- package/src/test/chatContextManager.test.ts +0 -527
- package/src/test/clientServerConnection.test.ts +0 -205
- package/src/test/compressingContextManager.test.ts +0 -77
- package/src/test/context.test.ts +0 -150
- package/src/test/contextTestTools.ts +0 -95
- package/src/test/conversation.test.ts +0 -109
- package/src/test/db.test.ts +0 -363
- package/src/test/dbMcpServerConfigs.test.ts +0 -112
- package/src/test/dbSessionFiles.test.ts +0 -258
- package/src/test/dbSessionMessages.test.ts +0 -85
- package/src/test/dbTestTools.ts +0 -157
- package/src/test/imageLoad.test.ts +0 -15
- package/src/test/mcpServerManager.test.ts +0 -114
- package/src/test/multiAsyncQueue.test.ts +0 -183
- package/src/test/openaiStreaming.test.ts +0 -177
- package/src/test/prompt.test.ts +0 -27
- package/src/test/promptProvider.test.ts +0 -33
- package/src/test/responseAwaiter.test.ts +0 -103
- package/src/test/sudoMcpServerManager.test.ts +0 -63
- package/src/test/testTools.ts +0 -171
- package/src/test/tools.test.ts +0 -39
- package/src/tool/agentChat.ts +0 -194
- package/src/tool/agentMain.ts +0 -180
- package/src/tool/chatMain.ts +0 -594
- package/src/tool/commandPrompt.ts +0 -264
- package/src/tool/files.ts +0 -84
- package/src/tool/main.ts +0 -25
- package/src/tool/nodePlatform.ts +0 -73
- package/src/tool/options.ts +0 -144
- package/src/tool/prompt.ts +0 -101
- package/test_data/background_test_profile.json +0 -6
- package/test_data/background_test_script.json +0 -11
- package/test_data/dummyllm_script_crash.json +0 -32
- package/test_data/dummyllm_script_image_gen.json +0 -19
- package/test_data/dummyllm_script_image_gen_fe.json +0 -29
- package/test_data/dummyllm_script_invoke_image_gen_tool.json +0 -37
- package/test_data/dummyllm_script_render_tool.json +0 -29
- package/test_data/dummyllm_script_simplecalc.json +0 -28
- package/test_data/dummyllm_script_test_auto_approve.json +0 -81
- package/test_data/dummyllm_script_test_simplecalc_addition.json +0 -29
- package/test_data/frog.png +0 -0
- package/test_data/frog.png.b64 +0 -1
- package/test_data/git_message_profile.json +0 -4
- package/test_data/git_wip_system.txt +0 -5
- package/test_data/image_gen_test_profile.json +0 -5
- package/test_data/pr_message_profile.json +0 -4
- package/test_data/pr_review_profile.json +0 -4
- package/test_data/prompt_simplecalc.txt +0 -1
- package/test_data/simplecalc_profile.json +0 -4
- package/test_data/sudomcp_import_profile.json +0 -4
- package/test_data/test_script_profile.json +0 -8
- package/tsconfig.json +0 -13
- package/vitest.config.ts +0 -39
- /package/dist/agent/src/{chat/utils → agent/tools/contentExtractors}/htmlToText.js +0 -0
package/src/test/db.test.ts
DELETED
|
@@ -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
|
-
});
|