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