@xalia/agent 0.5.8 → 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.
Files changed (185) hide show
  1. package/README.md +23 -8
  2. package/dist/agent/src/agent/agent.js +173 -96
  3. package/dist/agent/src/agent/agentUtils.js +82 -53
  4. package/dist/agent/src/agent/compressingContextManager.js +102 -0
  5. package/dist/agent/src/agent/context.js +189 -0
  6. package/dist/agent/src/agent/dummyLLM.js +46 -5
  7. package/dist/agent/src/agent/iAgentEventHandler.js +2 -0
  8. package/dist/agent/src/agent/mcpServerManager.js +22 -23
  9. package/dist/agent/src/agent/nullAgentEventHandler.js +21 -0
  10. package/dist/agent/src/agent/nullPlatform.js +14 -0
  11. package/dist/agent/src/agent/openAILLMStreaming.js +12 -7
  12. package/dist/agent/src/agent/promptProvider.js +63 -0
  13. package/dist/agent/src/agent/repeatLLM.js +5 -5
  14. package/dist/agent/src/agent/sudoMcpServerManager.js +11 -9
  15. package/dist/agent/src/agent/tokenAuth.js +7 -7
  16. package/dist/agent/src/agent/tools.js +1 -1
  17. package/dist/agent/src/chat/client/chatClient.js +733 -0
  18. package/dist/agent/src/chat/client/connection.js +209 -0
  19. package/dist/agent/src/chat/client/connection.test.js +188 -0
  20. package/dist/agent/src/chat/client/constants.js +5 -0
  21. package/dist/agent/src/chat/client/index.js +15 -0
  22. package/dist/agent/src/chat/client/interfaces.js +2 -0
  23. package/dist/agent/src/chat/client/responseHandler.js +105 -0
  24. package/dist/agent/src/chat/client/sessionClient.js +331 -0
  25. package/dist/agent/src/chat/client/teamManager.js +2 -0
  26. package/dist/agent/src/chat/{apiKeyManager.js → data/apiKeyManager.js} +4 -0
  27. package/dist/agent/src/chat/data/dataModels.js +2 -0
  28. package/dist/agent/src/chat/data/database.js +749 -0
  29. package/dist/agent/src/chat/data/dbMcpServerConfigs.js +47 -0
  30. package/dist/agent/src/chat/protocol/connectionMessages.js +5 -0
  31. package/dist/agent/src/chat/protocol/constants.js +50 -0
  32. package/dist/agent/src/chat/protocol/errors.js +22 -0
  33. package/dist/agent/src/chat/protocol/messages.js +110 -0
  34. package/dist/agent/src/chat/server/chatContextManager.js +405 -0
  35. package/dist/agent/src/chat/server/connectionManager.js +352 -0
  36. package/dist/agent/src/chat/server/connectionManager.test.js +159 -0
  37. package/dist/agent/src/chat/server/conversation.js +198 -0
  38. package/dist/agent/src/chat/server/errorUtils.js +23 -0
  39. package/dist/agent/src/chat/server/openSession.js +869 -0
  40. package/dist/agent/src/chat/server/server.js +177 -0
  41. package/dist/agent/src/chat/server/sessionFileManager.js +161 -0
  42. package/dist/agent/src/chat/server/sessionRegistry.js +700 -0
  43. package/dist/agent/src/chat/server/sessionRegistry.test.js +97 -0
  44. package/dist/agent/src/chat/server/test-utils/mockFactories.js +307 -0
  45. package/dist/agent/src/chat/server/tools.js +243 -0
  46. package/dist/agent/src/chat/utils/agentSessionMap.js +66 -0
  47. package/dist/agent/src/chat/utils/approvalManager.js +85 -0
  48. package/dist/agent/src/{utils → chat/utils}/asyncLock.js +3 -3
  49. package/dist/agent/src/chat/{asyncQueue.js → utils/asyncQueue.js} +12 -2
  50. package/dist/agent/src/chat/utils/htmlToText.js +84 -0
  51. package/dist/agent/src/chat/utils/multiAsyncQueue.js +42 -0
  52. package/dist/agent/src/chat/utils/search.js +145 -0
  53. package/dist/agent/src/chat/utils/userResolver.js +46 -0
  54. package/dist/agent/src/chat/{websocket.js → utils/websocket.js} +2 -0
  55. package/dist/agent/src/test/agent.test.js +332 -0
  56. package/dist/agent/src/test/approvalManager.test.js +58 -0
  57. package/dist/agent/src/test/chatContextManager.test.js +392 -0
  58. package/dist/agent/src/test/clientServerConnection.test.js +158 -0
  59. package/dist/agent/src/test/compressingContextManager.test.js +65 -0
  60. package/dist/agent/src/test/context.test.js +83 -0
  61. package/dist/agent/src/test/conversation.test.js +89 -0
  62. package/dist/agent/src/test/db.test.js +262 -90
  63. package/dist/agent/src/test/dbMcpServerConfigs.test.js +72 -0
  64. package/dist/agent/src/test/dbTestTools.js +99 -0
  65. package/dist/agent/src/test/imageLoad.test.js +8 -7
  66. package/dist/agent/src/test/mcpServerManager.test.js +21 -18
  67. package/dist/agent/src/test/multiAsyncQueue.test.js +101 -0
  68. package/dist/agent/src/test/openaiStreaming.test.js +12 -11
  69. package/dist/agent/src/test/prompt.test.js +5 -4
  70. package/dist/agent/src/test/promptProvider.test.js +28 -0
  71. package/dist/agent/src/test/responseHandler.test.js +61 -0
  72. package/dist/agent/src/test/sudoMcpServerManager.test.js +14 -12
  73. package/dist/agent/src/test/testTools.js +109 -0
  74. package/dist/agent/src/test/tools.test.js +31 -0
  75. package/dist/agent/src/tool/agentChat.js +21 -10
  76. package/dist/agent/src/tool/agentMain.js +1 -1
  77. package/dist/agent/src/tool/chatMain.js +235 -58
  78. package/dist/agent/src/tool/commandPrompt.js +15 -9
  79. package/dist/agent/src/tool/files.js +20 -16
  80. package/dist/agent/src/tool/nodePlatform.js +47 -3
  81. package/dist/agent/src/tool/options.js +4 -4
  82. package/dist/agent/src/tool/prompt.js +19 -13
  83. package/eslint.config.mjs +14 -1
  84. package/package.json +14 -6
  85. package/scripts/chat_server +8 -0
  86. package/scripts/setup_chat +7 -2
  87. package/scripts/shutdown_chat_server +3 -0
  88. package/scripts/test_chat +135 -17
  89. package/src/agent/agent.ts +270 -135
  90. package/src/agent/agentUtils.ts +136 -95
  91. package/src/agent/compressingContextManager.ts +164 -0
  92. package/src/agent/context.ts +268 -0
  93. package/src/agent/dummyLLM.ts +76 -8
  94. package/src/agent/iAgentEventHandler.ts +54 -0
  95. package/src/agent/iplatform.ts +1 -0
  96. package/src/agent/mcpServerManager.ts +32 -30
  97. package/src/agent/nullAgentEventHandler.ts +20 -0
  98. package/src/agent/nullPlatform.ts +13 -0
  99. package/src/agent/openAILLMStreaming.ts +12 -6
  100. package/src/agent/promptProvider.ts +87 -0
  101. package/src/agent/repeatLLM.ts +5 -5
  102. package/src/agent/sudoMcpServerManager.ts +13 -11
  103. package/src/agent/tokenAuth.ts +7 -7
  104. package/src/agent/tools.ts +3 -1
  105. package/src/chat/client/chatClient.ts +900 -0
  106. package/src/chat/client/connection.test.ts +241 -0
  107. package/src/chat/client/connection.ts +276 -0
  108. package/src/chat/client/constants.ts +3 -0
  109. package/src/chat/client/index.ts +18 -0
  110. package/src/chat/client/interfaces.ts +34 -0
  111. package/src/chat/client/responseHandler.ts +131 -0
  112. package/src/chat/client/sessionClient.ts +443 -0
  113. package/src/chat/client/teamManager.ts +29 -0
  114. package/src/chat/{apiKeyManager.ts → data/apiKeyManager.ts} +6 -2
  115. package/src/chat/data/dataModels.ts +85 -0
  116. package/src/chat/data/database.ts +982 -0
  117. package/src/chat/data/dbMcpServerConfigs.ts +59 -0
  118. package/src/chat/protocol/connectionMessages.ts +49 -0
  119. package/src/chat/protocol/constants.ts +55 -0
  120. package/src/chat/protocol/errors.ts +16 -0
  121. package/src/chat/protocol/messages.ts +682 -0
  122. package/src/chat/server/README.md +127 -0
  123. package/src/chat/server/chatContextManager.ts +612 -0
  124. package/src/chat/server/connectionManager.test.ts +266 -0
  125. package/src/chat/server/connectionManager.ts +541 -0
  126. package/src/chat/server/conversation.ts +269 -0
  127. package/src/chat/server/errorUtils.ts +28 -0
  128. package/src/chat/server/openSession.ts +1332 -0
  129. package/src/chat/server/server.ts +177 -0
  130. package/src/chat/server/sessionFileManager.ts +239 -0
  131. package/src/chat/server/sessionRegistry.test.ts +138 -0
  132. package/src/chat/server/sessionRegistry.ts +1064 -0
  133. package/src/chat/server/test-utils/mockFactories.ts +422 -0
  134. package/src/chat/server/tools.ts +265 -0
  135. package/src/chat/utils/agentSessionMap.ts +76 -0
  136. package/src/chat/utils/approvalManager.ts +111 -0
  137. package/src/{utils → chat/utils}/asyncLock.ts +3 -3
  138. package/src/chat/{asyncQueue.ts → utils/asyncQueue.ts} +14 -3
  139. package/src/chat/utils/htmlToText.ts +61 -0
  140. package/src/chat/utils/multiAsyncQueue.ts +52 -0
  141. package/src/chat/utils/search.ts +139 -0
  142. package/src/chat/utils/userResolver.ts +48 -0
  143. package/src/chat/{websocket.ts → utils/websocket.ts} +2 -0
  144. package/src/test/agent.test.ts +487 -0
  145. package/src/test/approvalManager.test.ts +73 -0
  146. package/src/test/chatContextManager.test.ts +521 -0
  147. package/src/test/clientServerConnection.test.ts +207 -0
  148. package/src/test/compressingContextManager.test.ts +82 -0
  149. package/src/test/context.test.ts +105 -0
  150. package/src/test/conversation.test.ts +109 -0
  151. package/src/test/db.test.ts +351 -103
  152. package/src/test/dbMcpServerConfigs.test.ts +112 -0
  153. package/src/test/dbTestTools.ts +153 -0
  154. package/src/test/imageLoad.test.ts +7 -6
  155. package/src/test/mcpServerManager.test.ts +19 -14
  156. package/src/test/multiAsyncQueue.test.ts +125 -0
  157. package/src/test/openaiStreaming.test.ts +11 -10
  158. package/src/test/prompt.test.ts +4 -3
  159. package/src/test/promptProvider.test.ts +33 -0
  160. package/src/test/responseHandler.test.ts +78 -0
  161. package/src/test/sudoMcpServerManager.test.ts +22 -15
  162. package/src/test/testTools.ts +146 -0
  163. package/src/test/tools.test.ts +39 -0
  164. package/src/tool/agentChat.ts +26 -12
  165. package/src/tool/agentMain.ts +1 -1
  166. package/src/tool/chatMain.ts +283 -100
  167. package/src/tool/commandPrompt.ts +25 -9
  168. package/src/tool/files.ts +25 -19
  169. package/src/tool/nodePlatform.ts +52 -3
  170. package/src/tool/options.ts +4 -2
  171. package/src/tool/prompt.ts +22 -15
  172. package/test_data/dummyllm_script_crash.json +32 -0
  173. package/test_data/frog.png.b64 +1 -0
  174. package/vitest.config.ts +39 -0
  175. package/dist/agent/src/chat/client.js +0 -310
  176. package/dist/agent/src/chat/conversationManager.js +0 -502
  177. package/dist/agent/src/chat/db.js +0 -218
  178. package/dist/agent/src/chat/messages.js +0 -29
  179. package/dist/agent/src/chat/server.js +0 -158
  180. package/src/chat/client.ts +0 -445
  181. package/src/chat/conversationManager.ts +0 -730
  182. package/src/chat/db.ts +0 -304
  183. package/src/chat/messages.ts +0 -266
  184. package/src/chat/server.ts +0 -177
  185. /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;
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -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 {
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });