@xalia/agent 0.5.7 → 0.6.0
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 +23 -8
- package/dist/agent/src/agent/agent.js +176 -96
- package/dist/agent/src/agent/agentUtils.js +82 -59
- package/dist/agent/src/agent/compressingContextManager.js +102 -0
- package/dist/agent/src/agent/context.js +189 -0
- package/dist/agent/src/agent/dummyLLM.js +46 -5
- package/dist/agent/src/agent/mcpServerManager.js +23 -24
- package/dist/agent/src/agent/nullAgentEventHandler.js +21 -0
- package/dist/agent/src/agent/nullPlatform.js +14 -0
- package/dist/agent/src/agent/openAILLMStreaming.js +26 -14
- package/dist/agent/src/agent/promptProvider.js +63 -0
- package/dist/agent/src/agent/repeatLLM.js +5 -5
- package/dist/agent/src/agent/sudoMcpServerManager.js +23 -21
- package/dist/agent/src/agent/tokenAuth.js +7 -7
- package/dist/agent/src/agent/tools.js +1 -1
- package/dist/agent/src/chat/client/chatClient.js +733 -0
- package/dist/agent/src/chat/client/connection.js +209 -0
- package/dist/agent/src/chat/client/connection.test.js +188 -0
- package/dist/agent/src/chat/client/constants.js +5 -0
- package/dist/agent/src/chat/client/index.js +15 -0
- package/dist/agent/src/chat/client/interfaces.js +2 -0
- package/dist/agent/src/chat/client/responseHandler.js +105 -0
- package/dist/agent/src/chat/client/sessionClient.js +331 -0
- package/dist/agent/src/chat/client/teamManager.js +2 -0
- package/dist/agent/src/chat/{apiKeyManager.js → data/apiKeyManager.js} +4 -0
- package/dist/agent/src/chat/data/dataModels.js +2 -0
- package/dist/agent/src/chat/data/database.js +749 -0
- package/dist/agent/src/chat/data/dbMcpServerConfigs.js +47 -0
- package/dist/agent/src/chat/protocol/connectionMessages.js +5 -0
- package/dist/agent/src/chat/protocol/constants.js +50 -0
- package/dist/agent/src/chat/protocol/errors.js +22 -0
- package/dist/agent/src/chat/protocol/messages.js +110 -0
- package/dist/agent/src/chat/server/chatContextManager.js +405 -0
- package/dist/agent/src/chat/server/connectionManager.js +352 -0
- package/dist/agent/src/chat/server/connectionManager.test.js +159 -0
- package/dist/agent/src/chat/server/conversation.js +198 -0
- package/dist/agent/src/chat/server/errorUtils.js +23 -0
- package/dist/agent/src/chat/server/openSession.js +869 -0
- package/dist/agent/src/chat/server/server.js +177 -0
- package/dist/agent/src/chat/server/sessionFileManager.js +161 -0
- package/dist/agent/src/chat/server/sessionRegistry.js +700 -0
- package/dist/agent/src/chat/server/sessionRegistry.test.js +97 -0
- package/dist/agent/src/chat/server/test-utils/mockFactories.js +307 -0
- package/dist/agent/src/chat/server/tools.js +243 -0
- package/dist/agent/src/chat/utils/agentSessionMap.js +66 -0
- package/dist/agent/src/chat/utils/approvalManager.js +85 -0
- package/dist/agent/src/{utils → chat/utils}/asyncLock.js +3 -3
- package/dist/agent/src/chat/{asyncQueue.js → utils/asyncQueue.js} +12 -2
- package/dist/agent/src/chat/utils/htmlToText.js +84 -0
- package/dist/agent/src/chat/utils/multiAsyncQueue.js +42 -0
- package/dist/agent/src/chat/utils/search.js +145 -0
- package/dist/agent/src/chat/utils/userResolver.js +46 -0
- package/dist/agent/src/chat/utils/websocket.js +16 -0
- package/dist/agent/src/test/agent.test.js +332 -0
- package/dist/agent/src/test/approvalManager.test.js +58 -0
- package/dist/agent/src/test/chatContextManager.test.js +392 -0
- package/dist/agent/src/test/clientServerConnection.test.js +158 -0
- package/dist/agent/src/test/compressingContextManager.test.js +65 -0
- package/dist/agent/src/test/context.test.js +83 -0
- package/dist/agent/src/test/conversation.test.js +89 -0
- package/dist/agent/src/test/db.test.js +271 -83
- package/dist/agent/src/test/dbMcpServerConfigs.test.js +72 -0
- package/dist/agent/src/test/dbTestTools.js +99 -0
- package/dist/agent/src/test/imageLoad.test.js +8 -7
- package/dist/agent/src/test/mcpServerManager.test.js +23 -20
- package/dist/agent/src/test/multiAsyncQueue.test.js +101 -0
- package/dist/agent/src/test/openaiStreaming.test.js +64 -35
- package/dist/agent/src/test/prompt.test.js +5 -4
- package/dist/agent/src/test/promptProvider.test.js +28 -0
- package/dist/agent/src/test/responseHandler.test.js +61 -0
- package/dist/agent/src/test/sudoMcpServerManager.test.js +24 -25
- package/dist/agent/src/test/testTools.js +109 -0
- package/dist/agent/src/test/tools.test.js +31 -0
- package/dist/agent/src/tool/agentChat.js +21 -10
- package/dist/agent/src/tool/agentMain.js +1 -1
- package/dist/agent/src/tool/chatMain.js +241 -58
- package/dist/agent/src/tool/commandPrompt.js +22 -17
- package/dist/agent/src/tool/files.js +20 -16
- package/dist/agent/src/tool/nodePlatform.js +47 -3
- package/dist/agent/src/tool/options.js +4 -4
- package/dist/agent/src/tool/prompt.js +19 -13
- package/eslint.config.mjs +14 -1
- package/package.json +14 -6
- package/scripts/chat_server +8 -0
- package/scripts/setup_chat +7 -2
- package/scripts/shutdown_chat_server +3 -0
- package/scripts/test_chat +135 -17
- package/src/agent/agent.ts +283 -138
- package/src/agent/agentUtils.ts +143 -108
- package/src/agent/compressingContextManager.ts +164 -0
- package/src/agent/context.ts +268 -0
- package/src/agent/dummyLLM.ts +76 -8
- package/src/agent/iAgentEventHandler.ts +54 -0
- package/src/agent/iplatform.ts +1 -0
- package/src/agent/mcpServerManager.ts +35 -31
- package/src/agent/nullAgentEventHandler.ts +20 -0
- package/src/agent/nullPlatform.ts +13 -0
- package/src/agent/openAILLMStreaming.ts +26 -13
- package/src/agent/promptProvider.ts +87 -0
- package/src/agent/repeatLLM.ts +5 -5
- package/src/agent/sudoMcpServerManager.ts +30 -29
- package/src/agent/tokenAuth.ts +7 -7
- package/src/agent/tools.ts +3 -1
- package/src/chat/client/chatClient.ts +900 -0
- package/src/chat/client/connection.test.ts +241 -0
- package/src/chat/client/connection.ts +276 -0
- package/src/chat/client/constants.ts +3 -0
- package/src/chat/client/index.ts +18 -0
- package/src/chat/client/interfaces.ts +34 -0
- package/src/chat/client/responseHandler.ts +131 -0
- package/src/chat/client/sessionClient.ts +443 -0
- package/src/chat/client/teamManager.ts +29 -0
- package/src/chat/{apiKeyManager.ts → data/apiKeyManager.ts} +6 -2
- package/src/chat/data/dataModels.ts +85 -0
- package/src/chat/data/database.ts +982 -0
- package/src/chat/data/dbMcpServerConfigs.ts +59 -0
- package/src/chat/protocol/connectionMessages.ts +49 -0
- package/src/chat/protocol/constants.ts +55 -0
- package/src/chat/protocol/errors.ts +16 -0
- package/src/chat/protocol/messages.ts +682 -0
- package/src/chat/server/README.md +127 -0
- package/src/chat/server/chatContextManager.ts +612 -0
- package/src/chat/server/connectionManager.test.ts +266 -0
- package/src/chat/server/connectionManager.ts +541 -0
- package/src/chat/server/conversation.ts +269 -0
- package/src/chat/server/errorUtils.ts +28 -0
- package/src/chat/server/openSession.ts +1332 -0
- package/src/chat/server/server.ts +177 -0
- package/src/chat/server/sessionFileManager.ts +239 -0
- package/src/chat/server/sessionRegistry.test.ts +138 -0
- package/src/chat/server/sessionRegistry.ts +1064 -0
- package/src/chat/server/test-utils/mockFactories.ts +422 -0
- package/src/chat/server/tools.ts +265 -0
- package/src/chat/utils/agentSessionMap.ts +76 -0
- package/src/chat/utils/approvalManager.ts +111 -0
- package/src/{utils → chat/utils}/asyncLock.ts +3 -3
- package/src/chat/{asyncQueue.ts → utils/asyncQueue.ts} +14 -3
- package/src/chat/utils/htmlToText.ts +61 -0
- package/src/chat/utils/multiAsyncQueue.ts +52 -0
- package/src/chat/utils/search.ts +139 -0
- package/src/chat/utils/userResolver.ts +48 -0
- package/src/chat/utils/websocket.ts +16 -0
- package/src/test/agent.test.ts +487 -0
- package/src/test/approvalManager.test.ts +73 -0
- package/src/test/chatContextManager.test.ts +521 -0
- package/src/test/clientServerConnection.test.ts +207 -0
- package/src/test/compressingContextManager.test.ts +82 -0
- package/src/test/context.test.ts +105 -0
- package/src/test/conversation.test.ts +109 -0
- package/src/test/db.test.ts +358 -89
- package/src/test/dbMcpServerConfigs.test.ts +112 -0
- package/src/test/dbTestTools.ts +153 -0
- package/src/test/imageLoad.test.ts +7 -6
- package/src/test/mcpServerManager.test.ts +21 -16
- package/src/test/multiAsyncQueue.test.ts +125 -0
- package/src/test/openaiStreaming.test.ts +71 -36
- package/src/test/prompt.test.ts +4 -3
- package/src/test/promptProvider.test.ts +33 -0
- package/src/test/responseHandler.test.ts +78 -0
- package/src/test/sudoMcpServerManager.test.ts +32 -30
- package/src/test/testTools.ts +146 -0
- package/src/test/tools.test.ts +39 -0
- package/src/tool/agentChat.ts +26 -12
- package/src/tool/agentMain.ts +1 -1
- package/src/tool/chatMain.ts +292 -100
- package/src/tool/commandPrompt.ts +28 -19
- package/src/tool/files.ts +25 -19
- package/src/tool/nodePlatform.ts +52 -3
- package/src/tool/options.ts +4 -2
- package/src/tool/prompt.ts +22 -15
- package/test_data/dummyllm_script_crash.json +32 -0
- package/test_data/frog.png.b64 +1 -0
- package/vitest.config.ts +39 -0
- package/dist/agent/src/chat/client.js +0 -349
- package/dist/agent/src/chat/conversationManager.js +0 -392
- package/dist/agent/src/chat/db.js +0 -209
- package/dist/agent/src/chat/frontendClient.js +0 -74
- package/dist/agent/src/chat/server.js +0 -158
- package/src/chat/client.ts +0 -455
- package/src/chat/conversationManager.ts +0 -595
- package/src/chat/db.ts +0 -290
- package/src/chat/frontendClient.ts +0 -123
- package/src/chat/messages.ts +0 -235
- package/src/chat/server.ts +0 -177
- /package/dist/agent/src/{chat/messages.js → agent/iAgentEventHandler.js} +0 -0
- /package/{frog.png → test_data/frog.png} +0 -0
|
@@ -0,0 +1,331 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SessionClient = void 0;
|
|
4
|
+
const assert_1 = require("assert");
|
|
5
|
+
const uuid_1 = require("uuid");
|
|
6
|
+
const sdk_1 = require("@xalia/xmcp/sdk");
|
|
7
|
+
const mcpServerManager_1 = require("../../agent/mcpServerManager");
|
|
8
|
+
const database_1 = require("../data/database");
|
|
9
|
+
const logger = (0, sdk_1.getLogger)();
|
|
10
|
+
class RemoteSudoMcpServerManager {
|
|
11
|
+
constructor(sender, briefs) {
|
|
12
|
+
this.briefsMap = new Map();
|
|
13
|
+
this.mcpServers = new Map();
|
|
14
|
+
this.sender = sender;
|
|
15
|
+
this.briefs = briefs;
|
|
16
|
+
briefs.forEach((b) => {
|
|
17
|
+
this.briefsMap.set(b.name, b);
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
hasMcpServer(mcpServerName) {
|
|
21
|
+
return this.mcpServers.has(mcpServerName);
|
|
22
|
+
}
|
|
23
|
+
getMcpServerNames() {
|
|
24
|
+
return Array.from(this.mcpServers.keys());
|
|
25
|
+
}
|
|
26
|
+
getMcpServer(mcpServerName) {
|
|
27
|
+
const server = this.mcpServers.get(mcpServerName);
|
|
28
|
+
if (server) {
|
|
29
|
+
return server;
|
|
30
|
+
}
|
|
31
|
+
throw Error(`[getMcpServer] unknown server ${mcpServerName}`);
|
|
32
|
+
}
|
|
33
|
+
// eslint-disable-next-line @typescript-eslint/require-await
|
|
34
|
+
async removeMcpServer(mcpServerName) {
|
|
35
|
+
if (!this.mcpServers.has(mcpServerName)) {
|
|
36
|
+
logger.info(`[removeMcpServer] mcpServers: ${JSON.stringify(this.mcpServers)}`);
|
|
37
|
+
throw Error(`no server ${mcpServerName} (removeMcpServer)`);
|
|
38
|
+
}
|
|
39
|
+
this.sender.sendSessionMessage({
|
|
40
|
+
type: "remove_mcp_server",
|
|
41
|
+
server_name: mcpServerName,
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
enableAllTools(mcpServerName) {
|
|
45
|
+
if (!this.mcpServers.has(mcpServerName)) {
|
|
46
|
+
throw Error(`no server ${mcpServerName} (enableAllTools)`);
|
|
47
|
+
}
|
|
48
|
+
this.sender.sendSessionMessage({
|
|
49
|
+
type: "enable_all_mcp_server_tools",
|
|
50
|
+
server_name: mcpServerName,
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
disableAllTools(mcpServerName) {
|
|
54
|
+
if (!this.mcpServers.has(mcpServerName)) {
|
|
55
|
+
throw Error(`no server ${mcpServerName} (disableAllTools)`);
|
|
56
|
+
}
|
|
57
|
+
this.sender.sendSessionMessage({
|
|
58
|
+
type: "disable_all_mcp_server_tools",
|
|
59
|
+
server_name: mcpServerName,
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
enableTool(mcpServerName, toolName) {
|
|
63
|
+
const server = this.mcpServers.get(mcpServerName);
|
|
64
|
+
if (!server) {
|
|
65
|
+
throw Error(`no server ${mcpServerName} (enableTool)`);
|
|
66
|
+
}
|
|
67
|
+
const tools = server.getTool(toolName);
|
|
68
|
+
if (!tools) {
|
|
69
|
+
throw Error(`no tool ${toolName} on server ${mcpServerName}`);
|
|
70
|
+
}
|
|
71
|
+
this.sender.sendSessionMessage({
|
|
72
|
+
type: "enable_mcp_server_tool",
|
|
73
|
+
server_name: mcpServerName,
|
|
74
|
+
tool: toolName,
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
disableTool(mcpServerName, toolName) {
|
|
78
|
+
const server = this.mcpServers.get(mcpServerName);
|
|
79
|
+
if (!server) {
|
|
80
|
+
throw Error(`no server ${mcpServerName} (disableTool)`);
|
|
81
|
+
}
|
|
82
|
+
const tools = server.getTool(toolName);
|
|
83
|
+
if (!tools) {
|
|
84
|
+
throw Error(`no tool ${toolName} on server ${mcpServerName}`);
|
|
85
|
+
}
|
|
86
|
+
this.sender.sendSessionMessage({
|
|
87
|
+
type: "disable_mcp_server_tool",
|
|
88
|
+
server_name: mcpServerName,
|
|
89
|
+
tool: toolName,
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
onMcpServerAdded(mcpServerName, tools, enabled_tools) {
|
|
93
|
+
logger.debug(`[onMcpServerAdded]: ${mcpServerName}, tools: ${JSON.stringify(tools)}` +
|
|
94
|
+
`, enabled: ${JSON.stringify(enabled_tools)}`);
|
|
95
|
+
const mcpServerInfo = new mcpServerManager_1.McpServerInfoRW(tools);
|
|
96
|
+
for (const tool of enabled_tools) {
|
|
97
|
+
mcpServerInfo.enableTool(tool);
|
|
98
|
+
}
|
|
99
|
+
this.mcpServers.set(mcpServerName, mcpServerInfo);
|
|
100
|
+
}
|
|
101
|
+
onMcpServerRemoved(mcpServerName) {
|
|
102
|
+
this.mcpServers.delete(mcpServerName);
|
|
103
|
+
}
|
|
104
|
+
onMcpServerToolEnabled(mcpServerName, toolName) {
|
|
105
|
+
const server = this.mcpServers.get(mcpServerName);
|
|
106
|
+
if (!server) {
|
|
107
|
+
throw Error(`no server ${mcpServerName} (onMcpServerToolEnabled)`);
|
|
108
|
+
}
|
|
109
|
+
const tools = server.getTool(toolName);
|
|
110
|
+
if (!tools) {
|
|
111
|
+
throw Error(`no tool ${toolName} on server ${mcpServerName}`);
|
|
112
|
+
}
|
|
113
|
+
server.enableTool(toolName);
|
|
114
|
+
}
|
|
115
|
+
onMcpServerToolDisabled(mcpServerName, toolName) {
|
|
116
|
+
const server = this.mcpServers.get(mcpServerName);
|
|
117
|
+
if (!server) {
|
|
118
|
+
throw Error(`no server ${mcpServerName} (onMcpServerToolDisabled)`);
|
|
119
|
+
}
|
|
120
|
+
const tools = server.getTool(toolName);
|
|
121
|
+
if (!tools) {
|
|
122
|
+
throw Error(`no tool ${toolName} on server ${mcpServerName}`);
|
|
123
|
+
}
|
|
124
|
+
server.disableTool(toolName);
|
|
125
|
+
}
|
|
126
|
+
getServerBriefs() {
|
|
127
|
+
return this.briefs;
|
|
128
|
+
}
|
|
129
|
+
// eslint-disable-next-line @typescript-eslint/require-await
|
|
130
|
+
async addMcpServer(server_name, enable_all) {
|
|
131
|
+
if (!this.briefsMap.has(server_name)) {
|
|
132
|
+
throw Error(`no such server ${server_name} (addMcpServer)`);
|
|
133
|
+
}
|
|
134
|
+
this.sender.sendSessionMessage({
|
|
135
|
+
type: "add_mcp_server",
|
|
136
|
+
server_name,
|
|
137
|
+
enable_all,
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
hasServer(server_name) {
|
|
141
|
+
return this.briefsMap.has(server_name);
|
|
142
|
+
}
|
|
143
|
+
async shutdown() { }
|
|
144
|
+
}
|
|
145
|
+
class SessionClient {
|
|
146
|
+
constructor(sessionUUID, savedAgentProfile, sender, serverBriefs, participants) {
|
|
147
|
+
this.sessionUUID = sessionUUID;
|
|
148
|
+
this.savedAgentProfile = savedAgentProfile;
|
|
149
|
+
this.sender = sender;
|
|
150
|
+
this.participants = participants;
|
|
151
|
+
this.sender = sender;
|
|
152
|
+
this.smsm = new RemoteSudoMcpServerManager(this, serverBriefs);
|
|
153
|
+
this.systemPrompt = "";
|
|
154
|
+
this.model = "";
|
|
155
|
+
this.participants = participants;
|
|
156
|
+
}
|
|
157
|
+
getSessionUUID() {
|
|
158
|
+
return this.sessionUUID;
|
|
159
|
+
}
|
|
160
|
+
getSudoMcpServerManager() {
|
|
161
|
+
return this.smsm;
|
|
162
|
+
}
|
|
163
|
+
getConversation() {
|
|
164
|
+
throw new Error("unimpl: getConversation");
|
|
165
|
+
}
|
|
166
|
+
getAgentProfile() {
|
|
167
|
+
return this.savedAgentProfile.profile;
|
|
168
|
+
}
|
|
169
|
+
getAgentUuid() {
|
|
170
|
+
return this.savedAgentProfile.uuid;
|
|
171
|
+
}
|
|
172
|
+
getSavedAgentProfile() {
|
|
173
|
+
return this.savedAgentProfile;
|
|
174
|
+
}
|
|
175
|
+
getSystemPrompt() {
|
|
176
|
+
return this.systemPrompt;
|
|
177
|
+
}
|
|
178
|
+
setSystemPrompt(system_prompt) {
|
|
179
|
+
// Don't set system prompt here. Wait until we get confirmation from the
|
|
180
|
+
// server.
|
|
181
|
+
this.sendSessionMessage({ type: "set_system_prompt", system_prompt });
|
|
182
|
+
}
|
|
183
|
+
getModel() {
|
|
184
|
+
return this.model;
|
|
185
|
+
}
|
|
186
|
+
setModel(model) {
|
|
187
|
+
// Don't set model here. Wait until we get confirmation from the server.
|
|
188
|
+
this.sendSessionMessage({ type: "set_model", model });
|
|
189
|
+
}
|
|
190
|
+
userMessage(msg, imageB64) {
|
|
191
|
+
(0, assert_1.strict)(msg || imageB64, "Either message or image must be provided");
|
|
192
|
+
this.sendSessionMessage({ type: "msg", message: msg, imageB64 });
|
|
193
|
+
}
|
|
194
|
+
resetConversation() {
|
|
195
|
+
throw new Error("resetConversation not implemented for ChatClient");
|
|
196
|
+
}
|
|
197
|
+
shutdown() {
|
|
198
|
+
throw new Error("shutdown not implemented for ChatClient");
|
|
199
|
+
}
|
|
200
|
+
getParticipants() {
|
|
201
|
+
return this.participants;
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Sets auto-approval preference for a specific tool.
|
|
205
|
+
*/
|
|
206
|
+
setAutoApproval(serverName, toolName, autoApprove) {
|
|
207
|
+
const smsm = this.getSudoMcpServerManager();
|
|
208
|
+
if (!smsm.hasMcpServer(serverName)) {
|
|
209
|
+
throw Error(`server ${serverName} not added (setAutoApproval)`);
|
|
210
|
+
}
|
|
211
|
+
const server = smsm.getMcpServer(serverName);
|
|
212
|
+
const tool = server.getTool(toolName);
|
|
213
|
+
if (!tool) {
|
|
214
|
+
throw Error(`no tool ${toolName} on server ${serverName}`);
|
|
215
|
+
}
|
|
216
|
+
this.sendSessionMessage({
|
|
217
|
+
type: "set_auto_approval",
|
|
218
|
+
server_name: serverName,
|
|
219
|
+
tool: toolName,
|
|
220
|
+
auto_approve: autoApprove,
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Send a generic message (for compatibility)
|
|
225
|
+
*/
|
|
226
|
+
sendMessage(message) {
|
|
227
|
+
throw new Error(`Unsupported message type: ${message.type}`);
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* The caller sees a message `ServerApproveToolCall`, at which point it
|
|
231
|
+
* should prompt the user for permission to run the tool. The result of
|
|
232
|
+
* that prompt should be passed here.
|
|
233
|
+
*/
|
|
234
|
+
toolCallApprovalResult(id, result, auto_approve) {
|
|
235
|
+
this.sendSessionMessage({
|
|
236
|
+
type: "tool_call_approval_result",
|
|
237
|
+
id,
|
|
238
|
+
result,
|
|
239
|
+
auto_approve,
|
|
240
|
+
});
|
|
241
|
+
}
|
|
242
|
+
// Implementation of IMessageSender interface
|
|
243
|
+
sendSessionMessage(message) {
|
|
244
|
+
const enrichedMessage = {
|
|
245
|
+
...message,
|
|
246
|
+
client_message_id: (0, uuid_1.v4)(),
|
|
247
|
+
session_id: this.sessionUUID,
|
|
248
|
+
};
|
|
249
|
+
this.sender.send(enrichedMessage);
|
|
250
|
+
}
|
|
251
|
+
updateSessionInfo(sessionInfo) {
|
|
252
|
+
// TODO: Implement this
|
|
253
|
+
// throw new Error("[SessionClient.updateSessionInfo] not implemented");
|
|
254
|
+
const infoStr = JSON.stringify(sessionInfo.workspace);
|
|
255
|
+
logger.debug(`[SessionClient] ignoring session info: ${infoStr}`);
|
|
256
|
+
}
|
|
257
|
+
setWorkspace(message, imageB64) {
|
|
258
|
+
const msg = {
|
|
259
|
+
type: "set_workspace",
|
|
260
|
+
message,
|
|
261
|
+
imageB64,
|
|
262
|
+
};
|
|
263
|
+
this.sendSessionMessage(msg);
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* Set MCP server configuration.
|
|
267
|
+
*/
|
|
268
|
+
setMcpServerConfig(server_name, config) {
|
|
269
|
+
this.sendSessionMessage({
|
|
270
|
+
type: "set_mcp_server_config",
|
|
271
|
+
server_name,
|
|
272
|
+
config,
|
|
273
|
+
});
|
|
274
|
+
}
|
|
275
|
+
deleteMcpServerConfig(server_name) {
|
|
276
|
+
this.sendSessionMessage({
|
|
277
|
+
type: "set_mcp_server_config",
|
|
278
|
+
server_name,
|
|
279
|
+
});
|
|
280
|
+
}
|
|
281
|
+
handleMessage(message) {
|
|
282
|
+
switch (message.type) {
|
|
283
|
+
//
|
|
284
|
+
// State updates
|
|
285
|
+
//
|
|
286
|
+
case "mcp_server_added":
|
|
287
|
+
this.smsm.onMcpServerAdded(message.server_name, message.tools, message.enabled_tools);
|
|
288
|
+
break;
|
|
289
|
+
case "mcp_server_removed":
|
|
290
|
+
this.smsm.onMcpServerRemoved(message.server_name);
|
|
291
|
+
break;
|
|
292
|
+
case "mcp_server_tool_enabled":
|
|
293
|
+
this.smsm.onMcpServerToolEnabled(message.server_name, message.tool);
|
|
294
|
+
break;
|
|
295
|
+
case "mcp_server_tool_disabled":
|
|
296
|
+
this.smsm.onMcpServerToolDisabled(message.server_name, message.tool);
|
|
297
|
+
break;
|
|
298
|
+
case "system_prompt_updated":
|
|
299
|
+
this.systemPrompt = message.system_prompt;
|
|
300
|
+
break;
|
|
301
|
+
case "model_updated":
|
|
302
|
+
this.model = message.model;
|
|
303
|
+
break;
|
|
304
|
+
case "session_info":
|
|
305
|
+
// Update participants if we receive session_info again
|
|
306
|
+
if ("participants" in message) {
|
|
307
|
+
this.participants = (0, database_1.createSessionParticipantMap)(message.participants);
|
|
308
|
+
}
|
|
309
|
+
break;
|
|
310
|
+
case "user_added":
|
|
311
|
+
this.participants.set(message.user_uuid, {
|
|
312
|
+
user_uuid: message.user_uuid,
|
|
313
|
+
nickname: message.nickname,
|
|
314
|
+
email: message.email,
|
|
315
|
+
role: message.role,
|
|
316
|
+
});
|
|
317
|
+
break;
|
|
318
|
+
case "user_removed":
|
|
319
|
+
this.participants.delete(message.user_uuid);
|
|
320
|
+
break;
|
|
321
|
+
//
|
|
322
|
+
// Ignore other messages - the owner (the UI layer) can handle them at
|
|
323
|
+
// its discretion.
|
|
324
|
+
//
|
|
325
|
+
default:
|
|
326
|
+
logger.debug(`[handleMessageInternal]: ignoring message: ${message.type}`);
|
|
327
|
+
break;
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
exports.SessionClient = SessionClient;
|
|
@@ -3,13 +3,17 @@
|
|
|
3
3
|
// - lru-cache
|
|
4
4
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
5
|
exports.ApiKeyManager = void 0;
|
|
6
|
+
const sdk_1 = require("@xalia/xmcp/sdk");
|
|
7
|
+
const logger = (0, sdk_1.getLogger)();
|
|
6
8
|
class ApiKeyManager {
|
|
7
9
|
constructor(db) {
|
|
8
10
|
this.db = db;
|
|
9
11
|
}
|
|
10
12
|
async verifyApiKey(apiKey) {
|
|
11
13
|
// TODO: Cache this
|
|
14
|
+
logger.info(`[ApiKeyManager] Verifying API key: ${apiKey}`);
|
|
12
15
|
const userInfo = await this.db.getUserDataFromApiKey(apiKey);
|
|
16
|
+
logger.info(`[ApiKeyManager] User info: ${JSON.stringify(userInfo)}`);
|
|
13
17
|
return userInfo;
|
|
14
18
|
// if (apiKey.startsWith("dummy_key")) {
|
|
15
19
|
// return {
|