@multiplayer-app/ai-agent-node 0.0.1

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 (210) hide show
  1. package/.env.example +45 -0
  2. package/README.md +611 -0
  3. package/config.example.json +73 -0
  4. package/dist/config.d.ts +35 -0
  5. package/dist/config.d.ts.map +1 -0
  6. package/dist/config.js +44 -0
  7. package/dist/config.js.map +1 -0
  8. package/dist/helpers/AIHelper.d.ts +23 -0
  9. package/dist/helpers/AIHelper.d.ts.map +1 -0
  10. package/dist/helpers/AIHelper.js +326 -0
  11. package/dist/helpers/AIHelper.js.map +1 -0
  12. package/dist/helpers/AIHelper.test.d.ts +2 -0
  13. package/dist/helpers/AIHelper.test.d.ts.map +1 -0
  14. package/dist/helpers/AIHelper.test.js +332 -0
  15. package/dist/helpers/AIHelper.test.js.map +1 -0
  16. package/dist/helpers/ConfigHelper.d.ts +20 -0
  17. package/dist/helpers/ConfigHelper.d.ts.map +1 -0
  18. package/dist/helpers/ConfigHelper.js +118 -0
  19. package/dist/helpers/ConfigHelper.js.map +1 -0
  20. package/dist/helpers/ContextLimiter.d.ts +82 -0
  21. package/dist/helpers/ContextLimiter.d.ts.map +1 -0
  22. package/dist/helpers/ContextLimiter.js +165 -0
  23. package/dist/helpers/ContextLimiter.js.map +1 -0
  24. package/dist/helpers/FileHelper.d.ts +31 -0
  25. package/dist/helpers/FileHelper.d.ts.map +1 -0
  26. package/dist/helpers/FileHelper.js +175 -0
  27. package/dist/helpers/FileHelper.js.map +1 -0
  28. package/dist/helpers/SetupHelper.d.ts +5 -0
  29. package/dist/helpers/SetupHelper.d.ts.map +1 -0
  30. package/dist/helpers/SetupHelper.js +32 -0
  31. package/dist/helpers/SetupHelper.js.map +1 -0
  32. package/dist/helpers/index.d.ts +6 -0
  33. package/dist/helpers/index.d.ts.map +1 -0
  34. package/dist/helpers/index.js +6 -0
  35. package/dist/helpers/index.js.map +1 -0
  36. package/dist/index.d.ts +18 -0
  37. package/dist/index.d.ts.map +1 -0
  38. package/dist/index.js +17 -0
  39. package/dist/index.js.map +1 -0
  40. package/dist/libs/index.d.ts +4 -0
  41. package/dist/libs/index.d.ts.map +1 -0
  42. package/dist/libs/index.js +4 -0
  43. package/dist/libs/index.js.map +1 -0
  44. package/dist/libs/kafka/config.d.ts +5 -0
  45. package/dist/libs/kafka/config.d.ts.map +1 -0
  46. package/dist/libs/kafka/config.js +5 -0
  47. package/dist/libs/kafka/config.js.map +1 -0
  48. package/dist/libs/kafka/consumer.d.ts +16 -0
  49. package/dist/libs/kafka/consumer.d.ts.map +1 -0
  50. package/dist/libs/kafka/consumer.js +126 -0
  51. package/dist/libs/kafka/consumer.js.map +1 -0
  52. package/dist/libs/kafka/index.d.ts +3 -0
  53. package/dist/libs/kafka/index.d.ts.map +1 -0
  54. package/dist/libs/kafka/index.js +3 -0
  55. package/dist/libs/kafka/index.js.map +1 -0
  56. package/dist/libs/kafka/kafka.d.ts +3 -0
  57. package/dist/libs/kafka/kafka.d.ts.map +1 -0
  58. package/dist/libs/kafka/kafka.js +24 -0
  59. package/dist/libs/kafka/kafka.js.map +1 -0
  60. package/dist/libs/kafka/producer.d.ts +11 -0
  61. package/dist/libs/kafka/producer.d.ts.map +1 -0
  62. package/dist/libs/kafka/producer.js +44 -0
  63. package/dist/libs/kafka/producer.js.map +1 -0
  64. package/dist/libs/logger/config.d.ts +5 -0
  65. package/dist/libs/logger/config.d.ts.map +1 -0
  66. package/dist/libs/logger/config.js +6 -0
  67. package/dist/libs/logger/config.js.map +1 -0
  68. package/dist/libs/logger/index.d.ts +10 -0
  69. package/dist/libs/logger/index.d.ts.map +1 -0
  70. package/dist/libs/logger/index.js +20 -0
  71. package/dist/libs/logger/index.js.map +1 -0
  72. package/dist/libs/logger/kafkajs-logger-creator.d.ts +12 -0
  73. package/dist/libs/logger/kafkajs-logger-creator.d.ts.map +1 -0
  74. package/dist/libs/logger/kafkajs-logger-creator.js +29 -0
  75. package/dist/libs/logger/kafkajs-logger-creator.js.map +1 -0
  76. package/dist/libs/logger/logger.d.ts +42 -0
  77. package/dist/libs/logger/logger.d.ts.map +1 -0
  78. package/dist/libs/logger/logger.js +44 -0
  79. package/dist/libs/logger/logger.js.map +1 -0
  80. package/dist/libs/s3/config.d.ts +7 -0
  81. package/dist/libs/s3/config.d.ts.map +1 -0
  82. package/dist/libs/s3/config.js +7 -0
  83. package/dist/libs/s3/config.js.map +1 -0
  84. package/dist/libs/s3/index.d.ts +4 -0
  85. package/dist/libs/s3/index.d.ts.map +1 -0
  86. package/dist/libs/s3/index.js +4 -0
  87. package/dist/libs/s3/index.js.map +1 -0
  88. package/dist/libs/s3/s3.lib.d.ts +25 -0
  89. package/dist/libs/s3/s3.lib.d.ts.map +1 -0
  90. package/dist/libs/s3/s3.lib.js +202 -0
  91. package/dist/libs/s3/s3.lib.js.map +1 -0
  92. package/dist/processors/ChatProcessor.d.ts +66 -0
  93. package/dist/processors/ChatProcessor.d.ts.map +1 -0
  94. package/dist/processors/ChatProcessor.js +610 -0
  95. package/dist/processors/ChatProcessor.js.map +1 -0
  96. package/dist/processors/ModelsProcessor.d.ts +11 -0
  97. package/dist/processors/ModelsProcessor.d.ts.map +1 -0
  98. package/dist/processors/ModelsProcessor.js +30 -0
  99. package/dist/processors/ModelsProcessor.js.map +1 -0
  100. package/dist/processors/index.d.ts +3 -0
  101. package/dist/processors/index.d.ts.map +1 -0
  102. package/dist/processors/index.js +3 -0
  103. package/dist/processors/index.js.map +1 -0
  104. package/dist/services/AIService.d.ts +48 -0
  105. package/dist/services/AIService.d.ts.map +1 -0
  106. package/dist/services/AIService.js +196 -0
  107. package/dist/services/AIService.js.map +1 -0
  108. package/dist/services/InternalEventsHandler.d.ts +21 -0
  109. package/dist/services/InternalEventsHandler.d.ts.map +1 -0
  110. package/dist/services/InternalEventsHandler.js +56 -0
  111. package/dist/services/InternalEventsHandler.js.map +1 -0
  112. package/dist/services/KafkaService.d.ts +35 -0
  113. package/dist/services/KafkaService.d.ts.map +1 -0
  114. package/dist/services/KafkaService.js +120 -0
  115. package/dist/services/KafkaService.js.map +1 -0
  116. package/dist/services/ModelFetcher.d.ts +54 -0
  117. package/dist/services/ModelFetcher.d.ts.map +1 -0
  118. package/dist/services/ModelFetcher.js +247 -0
  119. package/dist/services/ModelFetcher.js.map +1 -0
  120. package/dist/services/RedisService.d.ts +90 -0
  121. package/dist/services/RedisService.d.ts.map +1 -0
  122. package/dist/services/RedisService.js +236 -0
  123. package/dist/services/RedisService.js.map +1 -0
  124. package/dist/services/SocketService.d.ts +39 -0
  125. package/dist/services/SocketService.d.ts.map +1 -0
  126. package/dist/services/SocketService.js +128 -0
  127. package/dist/services/SocketService.js.map +1 -0
  128. package/dist/services/index.d.ts +7 -0
  129. package/dist/services/index.d.ts.map +1 -0
  130. package/dist/services/index.js +7 -0
  131. package/dist/services/index.js.map +1 -0
  132. package/dist/store/AgentStore.d.ts +48 -0
  133. package/dist/store/AgentStore.d.ts.map +1 -0
  134. package/dist/store/AgentStore.js +98 -0
  135. package/dist/store/AgentStore.js.map +1 -0
  136. package/dist/store/ArtifactStore.d.ts +13 -0
  137. package/dist/store/ArtifactStore.d.ts.map +1 -0
  138. package/dist/store/ArtifactStore.js +27 -0
  139. package/dist/store/ArtifactStore.js.map +1 -0
  140. package/dist/store/ConfigStore.d.ts +89 -0
  141. package/dist/store/ConfigStore.d.ts.map +1 -0
  142. package/dist/store/ConfigStore.js +214 -0
  143. package/dist/store/ConfigStore.js.map +1 -0
  144. package/dist/store/ConfigStore.test.d.ts +2 -0
  145. package/dist/store/ConfigStore.test.d.ts.map +1 -0
  146. package/dist/store/ConfigStore.test.js +259 -0
  147. package/dist/store/ConfigStore.test.js.map +1 -0
  148. package/dist/store/ModelStore.d.ts +44 -0
  149. package/dist/store/ModelStore.d.ts.map +1 -0
  150. package/dist/store/ModelStore.js +81 -0
  151. package/dist/store/ModelStore.js.map +1 -0
  152. package/dist/store/ModelStore.test.d.ts +2 -0
  153. package/dist/store/ModelStore.test.d.ts.map +1 -0
  154. package/dist/store/ModelStore.test.js +390 -0
  155. package/dist/store/ModelStore.test.js.map +1 -0
  156. package/dist/store/index.d.ts +5 -0
  157. package/dist/store/index.d.ts.map +1 -0
  158. package/dist/store/index.js +5 -0
  159. package/dist/store/index.js.map +1 -0
  160. package/dist/tools/generateChartTool.d.ts +24 -0
  161. package/dist/tools/generateChartTool.d.ts.map +1 -0
  162. package/dist/tools/generateChartTool.js +124 -0
  163. package/dist/tools/generateChartTool.js.map +1 -0
  164. package/dist/tools/proposeFormValuesTool.d.ts +35 -0
  165. package/dist/tools/proposeFormValuesTool.d.ts.map +1 -0
  166. package/dist/tools/proposeFormValuesTool.js +56 -0
  167. package/dist/tools/proposeFormValuesTool.js.map +1 -0
  168. package/package.json +71 -0
  169. package/src/config.ts +46 -0
  170. package/src/helpers/AIHelper.test.ts +375 -0
  171. package/src/helpers/AIHelper.ts +353 -0
  172. package/src/helpers/ConfigHelper.ts +130 -0
  173. package/src/helpers/ContextLimiter.ts +228 -0
  174. package/src/helpers/FileHelper.ts +197 -0
  175. package/src/helpers/SetupHelper.ts +35 -0
  176. package/src/helpers/index.ts +5 -0
  177. package/src/index.ts +18 -0
  178. package/src/libs/index.ts +3 -0
  179. package/src/libs/kafka/config.ts +4 -0
  180. package/src/libs/kafka/consumer.ts +161 -0
  181. package/src/libs/kafka/index.ts +2 -0
  182. package/src/libs/kafka/kafka.ts +27 -0
  183. package/src/libs/kafka/producer.ts +48 -0
  184. package/src/libs/logger/config.ts +4 -0
  185. package/src/libs/logger/index.ts +21 -0
  186. package/src/libs/logger/kafkajs-logger-creator.ts +28 -0
  187. package/src/libs/logger/logger.ts +60 -0
  188. package/src/libs/s3/config.ts +7 -0
  189. package/src/libs/s3/index.ts +3 -0
  190. package/src/libs/s3/s3.lib.ts +284 -0
  191. package/src/processors/ChatProcessor.ts +713 -0
  192. package/src/processors/ModelsProcessor.ts +34 -0
  193. package/src/processors/index.ts +2 -0
  194. package/src/services/AIService.ts +241 -0
  195. package/src/services/InternalEventsHandler.ts +61 -0
  196. package/src/services/KafkaService.ts +142 -0
  197. package/src/services/ModelFetcher.ts +286 -0
  198. package/src/services/RedisService.ts +285 -0
  199. package/src/services/SocketService.ts +153 -0
  200. package/src/services/index.ts +6 -0
  201. package/src/store/AgentStore.ts +138 -0
  202. package/src/store/ArtifactStore.ts +29 -0
  203. package/src/store/ConfigStore.test.ts +314 -0
  204. package/src/store/ConfigStore.ts +239 -0
  205. package/src/store/ModelStore.test.ts +473 -0
  206. package/src/store/ModelStore.ts +93 -0
  207. package/src/store/index.ts +4 -0
  208. package/src/tools/generateChartTool.ts +131 -0
  209. package/src/tools/proposeFormValuesTool.ts +67 -0
  210. package/tsconfig.json +24 -0
@@ -0,0 +1,128 @@
1
+ import { Server as SocketIOServer } from 'socket.io';
2
+ import { createAdapter } from '@socket.io/redis-adapter';
3
+ import { SocketIOEvents, SocketIOConfig } from '@multiplayer-app/ai-agent-types';
4
+ import { redisService } from './RedisService';
5
+ import { logger } from '../libs/logger';
6
+ export class SocketIOError extends Error {
7
+ constructor(message, code) {
8
+ super(message);
9
+ this.data = { code };
10
+ }
11
+ }
12
+ const authWrap = (middleware, reqParams) => async (socket, next) => {
13
+ var _a;
14
+ if (!middleware) {
15
+ return next();
16
+ }
17
+ const req = socket.request;
18
+ const _headers = Object.fromEntries(Object.entries(((_a = socket === null || socket === void 0 ? void 0 : socket.handshake) === null || _a === void 0 ? void 0 : _a.auth) || {})
19
+ .map(([key, value]) => ([key.toLowerCase(), value])));
20
+ req.headers = {
21
+ ...(req.headers || {}),
22
+ ...(_headers),
23
+ };
24
+ if (reqParams) {
25
+ req.params = reqParams;
26
+ }
27
+ try {
28
+ await middleware(req, {}, (err) => {
29
+ if (err) {
30
+ return next(new SocketIOError(err.message, (err === null || err === void 0 ? void 0 : err.statusCode) || 401));
31
+ }
32
+ return next();
33
+ });
34
+ }
35
+ catch (error) {
36
+ return next(new SocketIOError((error === null || error === void 0 ? void 0 : error.message) || 'Authorization failed', (error === null || error === void 0 ? void 0 : error.statusCode) || 401));
37
+ }
38
+ };
39
+ export class SocketService {
40
+ constructor() {
41
+ this.io = null;
42
+ }
43
+ async initialize(httpServer, authorizationMiddleware) {
44
+ this.io = new SocketIOServer(httpServer, {
45
+ cors: {
46
+ origin: true,
47
+ credentials: true
48
+ },
49
+ path: SocketIOConfig.Path
50
+ });
51
+ // Set up Redis adapter for multi-server support
52
+ try {
53
+ const { pubClient, subClient } = await redisService.getPubSubClients('socketio');
54
+ this.io.adapter(createAdapter(pubClient, subClient));
55
+ logger.debug('Socket.IO Redis adapter initialized');
56
+ }
57
+ catch (error) {
58
+ logger.error('Failed to initialize Redis adapter for Socket.IO:', error);
59
+ // Continue without adapter - single server mode
60
+ logger.warn('Socket.IO running without Redis adapter (single server mode)');
61
+ }
62
+ this.io.use(authWrap(authorizationMiddleware));
63
+ this.io.on('connection', (socket) => {
64
+ // Extract userId from handshake auth or query
65
+ const userId = socket.request.userId;
66
+ // Reject connection if no userId is provided
67
+ if (!userId) {
68
+ logger.debug(`Socket connection rejected: no userId provided for socket ${socket.id}`);
69
+ socket.disconnect(true);
70
+ return;
71
+ }
72
+ // Join user-specific room
73
+ const userRoom = `${SocketIOConfig.UserRoomPrefix}${userId}`;
74
+ socket.join(userRoom);
75
+ logger.debug(`Socket connected: ${socket.id} for user: ${userId}`);
76
+ socket.on('disconnect', () => {
77
+ logger.debug(`Socket disconnected: ${socket.id} for user: ${userId}`);
78
+ });
79
+ });
80
+ }
81
+ /**
82
+ * Emit a new chat event to a specific user
83
+ */
84
+ emitNewChat(userId, chat) {
85
+ if (!this.io)
86
+ return;
87
+ const userRoom = `${SocketIOConfig.UserRoomPrefix}${userId}`;
88
+ this.io.to(userRoom).emit(SocketIOEvents.ChatNew, chat);
89
+ logger.debug(`Emitted ${SocketIOEvents.ChatNew} to user ${userId}:`, { chatId: chat.id });
90
+ }
91
+ /**
92
+ * Emit a new message event to a specific user
93
+ */
94
+ emitMessageUpdate(userId, message, excludeSocketId) {
95
+ if (!this.io || !userId)
96
+ return;
97
+ const userRoom = `${SocketIOConfig.UserRoomPrefix}${userId}`;
98
+ if (excludeSocketId) {
99
+ this.io.to(userRoom).except(excludeSocketId).emit(SocketIOEvents.MessageNew, message);
100
+ }
101
+ else {
102
+ this.io.to(userRoom).emit(SocketIOEvents.MessageNew, message);
103
+ }
104
+ }
105
+ /**
106
+ * Emit a chat update event to a specific user
107
+ */
108
+ emitChatUpdate(userId, chat, excludeSocketId) {
109
+ if (!this.io)
110
+ return;
111
+ const userRoom = `${SocketIOConfig.UserRoomPrefix}${userId}`;
112
+ if (excludeSocketId) {
113
+ this.io.to(userRoom).except(excludeSocketId).emit(SocketIOEvents.ChatUpdate, chat);
114
+ }
115
+ else {
116
+ this.io.to(userRoom).emit(SocketIOEvents.ChatUpdate, chat);
117
+ }
118
+ }
119
+ /**
120
+ * Get the Socket.IO server instance
121
+ */
122
+ getIO() {
123
+ return this.io;
124
+ }
125
+ }
126
+ // Singleton instance
127
+ export const socketService = new SocketService();
128
+ //# sourceMappingURL=SocketService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SocketService.js","sourceRoot":"","sources":["../../src/services/SocketService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export * from './AIService';
2
+ export * from './KafkaService';
3
+ export * from './RedisService';
4
+ export * from './SocketService';
5
+ export * from './ModelFetcher';
6
+ export * from './InternalEventsHandler';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,yBAAyB,CAAC"}
@@ -0,0 +1,7 @@
1
+ export * from './AIService';
2
+ export * from './KafkaService';
3
+ export * from './RedisService';
4
+ export * from './SocketService';
5
+ export * from './ModelFetcher';
6
+ export * from './InternalEventsHandler';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,yBAAyB,CAAC"}
@@ -0,0 +1,48 @@
1
+ import { AgentMessage } from "@multiplayer-app/ai-agent-types";
2
+ export type AgentProcessListener = (payload: AgentProcessEvent) => void;
3
+ export interface AgentProcess {
4
+ chatId: string;
5
+ abortController: AbortController;
6
+ listeners: AgentProcessListener[];
7
+ }
8
+ export declare enum AgentProcessEventType {
9
+ Stop = "stop",
10
+ Finished = "finished",
11
+ Error = "error",
12
+ Aborted = "aborted",
13
+ Update = "update"
14
+ }
15
+ export type AgentProcessEvent = {
16
+ type: AgentProcessEventType.Update;
17
+ data: AgentMessage;
18
+ } | {
19
+ type: AgentProcessEventType.Finished;
20
+ data: AgentMessage;
21
+ } | {
22
+ type: AgentProcessEventType.Error;
23
+ data: Error;
24
+ } | {
25
+ type: AgentProcessEventType.Aborted;
26
+ data: void;
27
+ } | {
28
+ type: AgentProcessEventType.Stop;
29
+ data: void;
30
+ };
31
+ export interface AgentProcessEventPayload {
32
+ chatId: string;
33
+ event: AgentProcessEvent;
34
+ }
35
+ export declare class AgentStore {
36
+ private readonly internalEventsHandler;
37
+ private readonly agentProcesses;
38
+ initialize(): Promise<void>;
39
+ shareAgentProcessEvent(chatId: string, event: AgentProcessEvent): Promise<void>;
40
+ registerAgentProcess(chatId: string): AbortController;
41
+ unregisterAgentProcess(chatId: string): void;
42
+ addListener(chatId: string, listener: AgentProcessListener): boolean;
43
+ removeListener(chatId: string, listener: AgentProcessListener): void;
44
+ publishEvent(chatId: string, event: AgentProcessEvent): void;
45
+ private stopAgentProcess;
46
+ }
47
+ export declare const agentStore: AgentStore;
48
+ //# sourceMappingURL=AgentStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AgentStore.d.ts","sourceRoot":"","sources":["../../src/store/AgentStore.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAG/D,MAAM,MAAM,oBAAoB,GAAG,CAAC,OAAO,EAAE,iBAAiB,KAAK,IAAI,CAAC;AAExE,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,eAAe,CAAC;IACjC,SAAS,EAAE,oBAAoB,EAAE,CAAC;CACnC;AAED,oBAAY,qBAAqB;IAC/B,IAAI,SAAS;IACb,QAAQ,aAAa;IACrB,KAAK,UAAU;IACf,OAAO,YAAY;IACnB,MAAM,WAAW;CAClB;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,qBAAqB,CAAC,MAAM,CAAC;IACnC,IAAI,EAAE,YAAY,CAAC;CACpB,GAAG;IACF,IAAI,EAAE,qBAAqB,CAAC,QAAQ,CAAC;IACrC,IAAI,EAAE,YAAY,CAAC;CACpB,GAAG;IACF,IAAI,EAAE,qBAAqB,CAAC,KAAK,CAAC;IAClC,IAAI,EAAE,KAAK,CAAC;CACb,GAAG;IACF,IAAI,EAAE,qBAAqB,CAAC,OAAO,CAAC;IACpC,IAAI,EAAE,IAAI,CAAC;CACZ,GAAG;IACF,IAAI,EAAE,qBAAqB,CAAC,IAAI,CAAC;IACjC,IAAI,EAAE,IAAI,CAAC;CACZ,CAAA;AAED,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,iBAAiB,CAAC;CAC1B;AAED,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAA6C;IACnF,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAmC;IAE5D,UAAU;IAmBV,sBAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,iBAAiB;IAsBrE,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,eAAe;IAWrD,sBAAsB,CAAC,MAAM,EAAE,MAAM;IAIrC,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,oBAAoB,GAAG,OAAO;IASpE,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,oBAAoB;IAO7D,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,iBAAiB;IAOrD,OAAO,CAAC,gBAAgB;CAUzB;AAED,eAAO,MAAM,UAAU,YAAmB,CAAC"}
@@ -0,0 +1,98 @@
1
+ import { InternalEventsHandler } from "../services/InternalEventsHandler";
2
+ export var AgentProcessEventType;
3
+ (function (AgentProcessEventType) {
4
+ AgentProcessEventType["Stop"] = "stop";
5
+ AgentProcessEventType["Finished"] = "finished";
6
+ AgentProcessEventType["Error"] = "error";
7
+ AgentProcessEventType["Aborted"] = "aborted";
8
+ AgentProcessEventType["Update"] = "update";
9
+ })(AgentProcessEventType || (AgentProcessEventType = {}));
10
+ export class AgentStore {
11
+ constructor() {
12
+ this.internalEventsHandler = new InternalEventsHandler('agent-events');
13
+ this.agentProcesses = new Map();
14
+ }
15
+ async initialize() {
16
+ await this.internalEventsHandler.listen((payload) => {
17
+ switch (payload.event.type) {
18
+ case AgentProcessEventType.Stop:
19
+ this.stopAgentProcess(payload.chatId);
20
+ break;
21
+ case AgentProcessEventType.Finished:
22
+ case AgentProcessEventType.Error:
23
+ case AgentProcessEventType.Aborted:
24
+ this.publishEvent(payload.chatId, payload.event);
25
+ this.unregisterAgentProcess(payload.chatId);
26
+ break;
27
+ default:
28
+ this.publishEvent(payload.chatId, payload.event);
29
+ break;
30
+ }
31
+ });
32
+ }
33
+ async shareAgentProcessEvent(chatId, event) {
34
+ try {
35
+ await this.internalEventsHandler.publish({ chatId, event });
36
+ }
37
+ catch (error) {
38
+ // Fallback: publish locally if Redis fails
39
+ if (event.type === AgentProcessEventType.Stop) {
40
+ // Stop must actually abort the running controller, not just notify listeners.
41
+ this.stopAgentProcess(chatId);
42
+ return;
43
+ }
44
+ this.publishEvent(chatId, event);
45
+ // If this is a terminal event, also unregister locally
46
+ if (event.type === AgentProcessEventType.Finished ||
47
+ event.type === AgentProcessEventType.Error ||
48
+ event.type === AgentProcessEventType.Aborted) {
49
+ this.unregisterAgentProcess(chatId);
50
+ }
51
+ }
52
+ }
53
+ registerAgentProcess(chatId) {
54
+ if (!this.agentProcesses.has(chatId)) {
55
+ this.agentProcesses.set(chatId, {
56
+ chatId,
57
+ abortController: new AbortController(),
58
+ listeners: [],
59
+ });
60
+ }
61
+ return this.agentProcesses.get(chatId).abortController;
62
+ }
63
+ unregisterAgentProcess(chatId) {
64
+ this.agentProcesses.delete(chatId);
65
+ }
66
+ addListener(chatId, listener) {
67
+ const agentProcess = this.agentProcesses.get(chatId);
68
+ if (agentProcess) {
69
+ agentProcess.listeners.push(listener);
70
+ return true;
71
+ }
72
+ return false;
73
+ }
74
+ removeListener(chatId, listener) {
75
+ const agentProcess = this.agentProcesses.get(chatId);
76
+ if (agentProcess) {
77
+ agentProcess.listeners = agentProcess.listeners.filter((l) => l !== listener);
78
+ }
79
+ }
80
+ publishEvent(chatId, event) {
81
+ const agentProcess = this.agentProcesses.get(chatId);
82
+ if (agentProcess) {
83
+ agentProcess.listeners.forEach((listener) => listener(event));
84
+ }
85
+ }
86
+ stopAgentProcess(chatId) {
87
+ const agentProcess = this.agentProcesses.get(chatId);
88
+ if (agentProcess) {
89
+ agentProcess.abortController.abort();
90
+ this.publishEvent(chatId, { type: AgentProcessEventType.Aborted, data: undefined });
91
+ // This is terminal. If we keep the process registered, the next send reuses an already-aborted controller
92
+ // and immediately aborts again, which looks like "next messages not processing".
93
+ this.unregisterAgentProcess(chatId);
94
+ }
95
+ }
96
+ }
97
+ export const agentStore = new AgentStore();
98
+ //# sourceMappingURL=AgentStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AgentStore.js","sourceRoot":"","sources":["../../src/store/AgentStore.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { AgentArtifact } from '@multiplayer-app/ai-agent-types';
2
+ /**
3
+ * Simple in-memory store for artifacts.
4
+ * In the future, this could be moved to MongoDB or a separate collection.
5
+ */
6
+ export declare class ArtifactStore {
7
+ private artifacts;
8
+ listArtifacts(chatId: string): AgentArtifact[];
9
+ setArtifacts(chatId: string, artifacts: AgentArtifact[]): void;
10
+ addArtifact(chatId: string, artifact: AgentArtifact): void;
11
+ deleteArtifacts(chatId: string): void;
12
+ }
13
+ //# sourceMappingURL=ArtifactStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ArtifactStore.d.ts","sourceRoot":"","sources":["../../src/store/ArtifactStore.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAErE;;;GAGG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,SAAS,CAAsC;IAEvD,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,EAAE;IAI9C,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,GAAG,IAAI;IAI9D,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI;IAO1D,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;CAGtC"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Simple in-memory store for artifacts.
3
+ * In the future, this could be moved to MongoDB or a separate collection.
4
+ */
5
+ export class ArtifactStore {
6
+ constructor() {
7
+ this.artifacts = new Map();
8
+ }
9
+ listArtifacts(chatId) {
10
+ var _a;
11
+ return (_a = this.artifacts.get(chatId)) !== null && _a !== void 0 ? _a : [];
12
+ }
13
+ setArtifacts(chatId, artifacts) {
14
+ this.artifacts.set(chatId, artifacts);
15
+ }
16
+ addArtifact(chatId, artifact) {
17
+ var _a;
18
+ const artifacts = (_a = this.artifacts.get(chatId)) !== null && _a !== void 0 ? _a : [];
19
+ artifacts.unshift(artifact);
20
+ // Keep only the last 5 artifacts
21
+ this.artifacts.set(chatId, artifacts.slice(0, 5));
22
+ }
23
+ deleteArtifacts(chatId) {
24
+ this.artifacts.delete(chatId);
25
+ }
26
+ }
27
+ //# sourceMappingURL=ArtifactStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ArtifactStore.js","sourceRoot":"","sources":["../../src/store/ArtifactStore.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,OAAO,aAAa;IAA1B;QACU,cAAS,GAAG,IAAI,GAAG,EAA2B,CAAC;IAoBzD,CAAC;IAlBC,aAAa,CAAC,MAAc;;QAC1B,OAAO,MAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,mCAAI,EAAE,CAAC;IAC1C,CAAC;IAED,YAAY,CAAC,MAAc,EAAE,SAA0B;QACrD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACxC,CAAC;IAED,WAAW,CAAC,MAAc,EAAE,QAAuB;;QACjD,MAAM,SAAS,GAAG,MAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,mCAAI,EAAE,CAAC;QACnD,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC5B,iCAAiC;QACjC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACpD,CAAC;IAED,eAAe,CAAC,MAAc;QAC5B,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAChC,CAAC;CACF"}
@@ -0,0 +1,89 @@
1
+ import type { AgentConfig, AgentTool } from '@multiplayer-app/ai-agent-types';
2
+ export declare class ConfigStore {
3
+ private static instance;
4
+ private config;
5
+ private allowedModels;
6
+ private agentsMap;
7
+ readonly defaultAgentConfig: AgentConfig;
8
+ private constructor();
9
+ /**
10
+ * Get the singleton instance of ConfigStore
11
+ */
12
+ static getInstance(): ConfigStore;
13
+ /**
14
+ * Load the app config from a file path
15
+ * This method is idempotent - if config is already loaded, it returns the existing promise
16
+ * @param rawConfig - Raw config object (may include models array)
17
+ * @throws Error if config cannot be loaded
18
+ */
19
+ loadConfig(rawConfig: Record<string, any>): void;
20
+ addAllowedModelPattern(pattern: string): void;
21
+ addAgent<T = any>(contextKeys: string[], agentConfig: AgentConfig<T>): void;
22
+ /**
23
+ * Add a tool to every loaded agent (across all contexts).
24
+ * This is intended for built-in tools that should always be available.
25
+ * @param tool - The tool to add to all agents
26
+ */
27
+ addToolToAllAgents(tool: AgentTool): void;
28
+ getAgentConfigByName(agentName: string | undefined): AgentConfig;
29
+ /**
30
+ * Get all agents for a specific context key
31
+ * @param contextKey - The context key to get agents for
32
+ * @returns Array of AgentConfig for the context, or empty array if context not found
33
+ */
34
+ getAgentsForContext(contextKey: string): AgentConfig[];
35
+ /**
36
+ * Get a specific agent by name for a context
37
+ * @param contextKey - The context key
38
+ * @param agentName - The name of the agent
39
+ * @returns AgentConfig if found, undefined otherwise
40
+ */
41
+ getAgentForContext(contextKey: string, agentName: string): AgentConfig;
42
+ /**
43
+ * Get all context keys
44
+ * @returns Array of context key strings
45
+ */
46
+ getContextKeys(): string[];
47
+ /**
48
+ * Check if a context key exists
49
+ * @param contextKey - The context key to check
50
+ * @returns true if context exists, false otherwise
51
+ */
52
+ hasContext(contextKey: string): boolean;
53
+ /**
54
+ * Get the total number of agents across all contexts
55
+ * @returns Total count of agents
56
+ */
57
+ getTotalAgentsCount(): number;
58
+ /**
59
+ * Get all unique agent names across all contexts
60
+ * @returns Array of unique agent names
61
+ */
62
+ getAllAgentNames(): string[];
63
+ /**
64
+ * Check if config has been loaded
65
+ * @returns true if config is loaded, false otherwise
66
+ */
67
+ isLoaded(): boolean;
68
+ /**
69
+ * Check if a model is allowed based on the configured allowedModels patterns
70
+ * Patterns support wildcards (*) which match any sequence of characters
71
+ * - Patterns without a provider prefix (e.g., 'gpt-4') match the model ID across all providers
72
+ * - Patterns with a provider prefix (e.g., 'openai/gpt-4') only match that specific provider
73
+ * @param model - The model identifier to check (e.g., 'openai/gpt-4o', 'anthropic/claude-3-5-sonnet', 'gpt-4')
74
+ * @param provider - Optional provider name. If provided and model doesn't contain '/', constructs as 'provider/model'.
75
+ * For OpenRouter, the model should already contain the full path (e.g., 'openai/gpt-4')
76
+ * @returns true if model matches any allowed pattern, false otherwise
77
+ */
78
+ isModelAllowed(model: string, provider?: string): boolean;
79
+ /**
80
+ * Get the allowed model patterns
81
+ * @returns Array of allowed model patterns
82
+ */
83
+ getAllowedModels(): string[];
84
+ /**
85
+ * Clear the loaded config (useful for testing or reloading)
86
+ */
87
+ clear(): void;
88
+ }
89
+ //# sourceMappingURL=ConfigStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConfigStore.d.ts","sourceRoot":"","sources":["../../src/store/ConfigStore.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAkB,WAAW,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAK9F,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAc;IACrC,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,SAAS,CAAuC;IAGxD,SAAgB,kBAAkB,EAAE,WAAW,CAM7C;IACF,OAAO;IAEP;;OAEG;IACH,MAAM,CAAC,WAAW,IAAI,WAAW;IAOjC;;;;;OAKG;IACH,UAAU,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;IAUhD,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI7C,QAAQ,CAAC,CAAC,GAAG,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,IAAI;IAU3E;;;;OAIG;IACH,kBAAkB,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI;IAiBzC,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,WAAW;IAOhE;;;;OAIG;IACH,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,WAAW,EAAE;IAItD;;;;;OAKG;IACH,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,WAAW;IAKtE;;;OAGG;IACH,cAAc,IAAI,MAAM,EAAE;IAQ1B;;;;OAIG;IACH,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAQvC;;;OAGG;IACH,mBAAmB,IAAI,MAAM;IAQ7B;;;OAGG;IACH,gBAAgB,IAAI,MAAM,EAAE;IAc5B;;;OAGG;IACH,QAAQ,IAAI,OAAO;IAInB;;;;;;;;;OASG;IACH,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO;IAwCzD;;;OAGG;IACH,gBAAgB,IAAI,MAAM,EAAE;IAI5B;;OAEG;IACH,KAAK,IAAI,IAAI;CAId"}