@multiplayer-app/ai-agent-node 0.1.0-beta.2 → 0.1.0-beta.20

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 (303) hide show
  1. package/dist/cjs/config.cjs +98 -0
  2. package/dist/cjs/config.cjs.map +1 -0
  3. package/dist/cjs/config.d.ts +56 -23
  4. package/dist/cjs/config.d.ts.map +1 -1
  5. package/dist/cjs/helpers/{AIHelper.js → AIHelper.cjs} +145 -91
  6. package/dist/cjs/helpers/AIHelper.cjs.map +1 -0
  7. package/dist/cjs/helpers/AIHelper.d.ts +19 -12
  8. package/dist/cjs/helpers/AIHelper.d.ts.map +1 -1
  9. package/dist/cjs/helpers/{AIHelper.test.js → AIHelper.test.cjs} +22 -15
  10. package/dist/cjs/helpers/AIHelper.test.cjs.map +1 -0
  11. package/dist/cjs/helpers/{ConfigHelper.js → ConfigHelper.cjs} +4 -5
  12. package/dist/cjs/helpers/ConfigHelper.cjs.map +1 -0
  13. package/dist/cjs/helpers/{ContextLimiter.js → ContextLimiter.cjs} +2 -3
  14. package/dist/cjs/helpers/{ContextLimiter.js.map → ContextLimiter.cjs.map} +1 -1
  15. package/dist/cjs/helpers/FileHelper.cjs +193 -0
  16. package/dist/cjs/helpers/FileHelper.cjs.map +1 -0
  17. package/dist/cjs/helpers/FileHelper.d.ts +19 -25
  18. package/dist/cjs/helpers/FileHelper.d.ts.map +1 -1
  19. package/dist/cjs/{store/index.js → helpers/index.cjs} +4 -4
  20. package/dist/cjs/helpers/{index.js.map → index.cjs.map} +1 -1
  21. package/dist/cjs/helpers/index.d.ts +4 -5
  22. package/dist/cjs/helpers/index.d.ts.map +1 -1
  23. package/dist/cjs/index.cjs +114 -0
  24. package/dist/cjs/index.cjs.map +1 -0
  25. package/dist/cjs/index.d.ts +39 -13
  26. package/dist/cjs/index.d.ts.map +1 -1
  27. package/dist/cjs/libs/{kafka/index.js → index.cjs} +2 -2
  28. package/dist/cjs/libs/{index.js.map → index.cjs.map} +1 -1
  29. package/dist/cjs/libs/index.d.ts +2 -3
  30. package/dist/cjs/libs/index.d.ts.map +1 -1
  31. package/dist/cjs/libs/logger/{index.js → index.cjs} +5 -5
  32. package/dist/cjs/libs/logger/{index.js.map → index.cjs.map} +1 -1
  33. package/dist/cjs/libs/logger/index.d.ts +2 -2
  34. package/dist/cjs/libs/logger/index.d.ts.map +1 -1
  35. package/dist/cjs/libs/logger/{kafkajs-logger-creator.js → kafkajs-logger-creator.cjs} +2 -2
  36. package/dist/cjs/libs/logger/{kafkajs-logger-creator.js.map → kafkajs-logger-creator.cjs.map} +1 -1
  37. package/dist/cjs/libs/s3/index.cjs +8 -0
  38. package/dist/cjs/libs/s3/index.cjs.map +1 -0
  39. package/dist/cjs/libs/s3/index.d.ts +1 -2
  40. package/dist/cjs/libs/s3/index.d.ts.map +1 -1
  41. package/dist/cjs/libs/s3/s3.lib.cjs +207 -0
  42. package/dist/cjs/libs/s3/s3.lib.cjs.map +1 -0
  43. package/dist/cjs/libs/s3/s3.lib.d.ts +29 -22
  44. package/dist/cjs/libs/s3/s3.lib.d.ts.map +1 -1
  45. package/dist/cjs/processors/{ChatProcessor.js → ChatProcessor.cjs} +96 -87
  46. package/dist/cjs/processors/ChatProcessor.cjs.map +1 -0
  47. package/dist/cjs/processors/ChatProcessor.d.ts +20 -3
  48. package/dist/cjs/processors/ChatProcessor.d.ts.map +1 -1
  49. package/dist/cjs/processors/{ModelsProcessor.js → ModelsProcessor.cjs} +2 -2
  50. package/dist/cjs/processors/{ModelsProcessor.js.map → ModelsProcessor.cjs.map} +1 -1
  51. package/dist/cjs/processors/{index.js → index.cjs} +2 -2
  52. package/dist/cjs/processors/{index.js.map → index.cjs.map} +1 -1
  53. package/dist/cjs/processors/index.d.ts +2 -2
  54. package/dist/cjs/processors/index.d.ts.map +1 -1
  55. package/dist/cjs/services/{AIService.js → AIService.cjs} +19 -23
  56. package/dist/cjs/services/AIService.cjs.map +1 -0
  57. package/dist/cjs/services/AIService.d.ts +4 -2
  58. package/dist/cjs/services/AIService.d.ts.map +1 -1
  59. package/dist/cjs/services/{InternalEventsHandler.js → InternalEventsHandler.cjs} +5 -5
  60. package/dist/cjs/services/InternalEventsHandler.cjs.map +1 -0
  61. package/dist/cjs/services/InternalEventsHandler.d.ts +3 -1
  62. package/dist/cjs/services/InternalEventsHandler.d.ts.map +1 -1
  63. package/dist/cjs/services/{ModelFetcher.js → ModelFetcher.cjs} +9 -15
  64. package/dist/cjs/services/ModelFetcher.cjs.map +1 -0
  65. package/dist/cjs/services/ModelFetcher.d.ts +2 -7
  66. package/dist/cjs/services/ModelFetcher.d.ts.map +1 -1
  67. package/dist/cjs/services/{RedisService.js → RedisService.cjs} +35 -32
  68. package/dist/cjs/services/RedisService.cjs.map +1 -0
  69. package/dist/cjs/services/RedisService.d.ts +5 -2
  70. package/dist/cjs/services/RedisService.d.ts.map +1 -1
  71. package/dist/cjs/services/{SocketService.js → SocketService.cjs} +19 -20
  72. package/dist/cjs/services/SocketService.cjs.map +1 -0
  73. package/dist/cjs/services/SocketService.d.ts +7 -4
  74. package/dist/cjs/services/SocketService.d.ts.map +1 -1
  75. package/dist/cjs/{helpers/index.js → services/index.cjs} +5 -5
  76. package/dist/cjs/services/{index.js.map → index.cjs.map} +1 -1
  77. package/dist/cjs/services/index.d.ts +5 -6
  78. package/dist/cjs/services/index.d.ts.map +1 -1
  79. package/dist/cjs/store/{AgentStore.js → AgentStore.cjs} +4 -5
  80. package/dist/cjs/store/AgentStore.cjs.map +1 -0
  81. package/dist/cjs/store/AgentStore.d.ts +2 -1
  82. package/dist/cjs/store/AgentStore.d.ts.map +1 -1
  83. package/dist/cjs/store/{ArtifactStore.js → ArtifactStore.cjs} +2 -4
  84. package/dist/cjs/store/ArtifactStore.cjs.map +1 -0
  85. package/dist/cjs/store/{ConfigStore.js → ConfigStore.cjs} +8 -11
  86. package/dist/cjs/store/ConfigStore.cjs.map +1 -0
  87. package/dist/cjs/store/ConfigStore.d.ts.map +1 -1
  88. package/dist/cjs/store/{ConfigStore.test.js → ConfigStore.test.cjs} +2 -2
  89. package/dist/cjs/store/{ConfigStore.test.js.map → ConfigStore.test.cjs.map} +1 -1
  90. package/dist/cjs/store/{ModelStore.js → ModelStore.cjs} +4 -4
  91. package/dist/cjs/store/ModelStore.cjs.map +1 -0
  92. package/dist/cjs/store/{ModelStore.test.js → ModelStore.test.cjs} +17 -17
  93. package/dist/cjs/store/ModelStore.test.cjs.map +1 -0
  94. package/dist/cjs/{libs/index.js → store/index.cjs} +4 -3
  95. package/dist/cjs/store/{index.js.map → index.cjs.map} +1 -1
  96. package/dist/cjs/store/index.d.ts +4 -4
  97. package/dist/cjs/store/index.d.ts.map +1 -1
  98. package/dist/cjs/tools/proposeFormValuesTool.d.ts +2 -2
  99. package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -0
  100. package/dist/esm/config.d.ts +56 -23
  101. package/dist/esm/config.d.ts.map +1 -1
  102. package/dist/esm/config.js +88 -36
  103. package/dist/esm/config.js.map +1 -1
  104. package/dist/esm/helpers/AIHelper.d.ts +19 -12
  105. package/dist/esm/helpers/AIHelper.d.ts.map +1 -1
  106. package/dist/esm/helpers/AIHelper.js +144 -88
  107. package/dist/esm/helpers/AIHelper.js.map +1 -1
  108. package/dist/esm/helpers/AIHelper.test.js +21 -14
  109. package/dist/esm/helpers/AIHelper.test.js.map +1 -1
  110. package/dist/esm/helpers/ConfigHelper.js +2 -3
  111. package/dist/esm/helpers/ConfigHelper.js.map +1 -1
  112. package/dist/esm/helpers/ContextLimiter.js +2 -3
  113. package/dist/esm/helpers/ContextLimiter.js.map +1 -1
  114. package/dist/esm/helpers/FileHelper.d.ts +19 -25
  115. package/dist/esm/helpers/FileHelper.d.ts.map +1 -1
  116. package/dist/esm/helpers/FileHelper.js +132 -149
  117. package/dist/esm/helpers/FileHelper.js.map +1 -1
  118. package/dist/esm/helpers/index.d.ts +4 -5
  119. package/dist/esm/helpers/index.d.ts.map +1 -1
  120. package/dist/esm/helpers/index.js +4 -5
  121. package/dist/esm/helpers/index.js.map +1 -1
  122. package/dist/esm/index.d.ts +39 -13
  123. package/dist/esm/index.d.ts.map +1 -1
  124. package/dist/esm/index.js +79 -12
  125. package/dist/esm/index.js.map +1 -1
  126. package/dist/esm/libs/index.d.ts +2 -3
  127. package/dist/esm/libs/index.d.ts.map +1 -1
  128. package/dist/esm/libs/index.js +2 -3
  129. package/dist/esm/libs/index.js.map +1 -1
  130. package/dist/esm/libs/logger/index.d.ts +2 -2
  131. package/dist/esm/libs/logger/index.d.ts.map +1 -1
  132. package/dist/esm/libs/logger/index.js +2 -2
  133. package/dist/esm/libs/logger/index.js.map +1 -1
  134. package/dist/esm/libs/logger/kafkajs-logger-creator.js +1 -1
  135. package/dist/esm/libs/logger/kafkajs-logger-creator.js.map +1 -1
  136. package/dist/esm/libs/s3/index.d.ts +1 -2
  137. package/dist/esm/libs/s3/index.d.ts.map +1 -1
  138. package/dist/esm/libs/s3/index.js +1 -2
  139. package/dist/esm/libs/s3/index.js.map +1 -1
  140. package/dist/esm/libs/s3/s3.lib.d.ts +29 -22
  141. package/dist/esm/libs/s3/s3.lib.d.ts.map +1 -1
  142. package/dist/esm/libs/s3/s3.lib.js +178 -177
  143. package/dist/esm/libs/s3/s3.lib.js.map +1 -1
  144. package/dist/esm/processors/ChatProcessor.d.ts +20 -3
  145. package/dist/esm/processors/ChatProcessor.d.ts.map +1 -1
  146. package/dist/esm/processors/ChatProcessor.js +87 -71
  147. package/dist/esm/processors/ChatProcessor.js.map +1 -1
  148. package/dist/esm/processors/ModelsProcessor.js +1 -1
  149. package/dist/esm/processors/ModelsProcessor.js.map +1 -1
  150. package/dist/esm/processors/index.d.ts +2 -2
  151. package/dist/esm/processors/index.d.ts.map +1 -1
  152. package/dist/esm/processors/index.js +2 -2
  153. package/dist/esm/processors/index.js.map +1 -1
  154. package/dist/esm/services/AIService.d.ts +4 -2
  155. package/dist/esm/services/AIService.d.ts.map +1 -1
  156. package/dist/esm/services/AIService.js +22 -24
  157. package/dist/esm/services/AIService.js.map +1 -1
  158. package/dist/esm/services/InternalEventsHandler.d.ts +3 -1
  159. package/dist/esm/services/InternalEventsHandler.d.ts.map +1 -1
  160. package/dist/esm/services/InternalEventsHandler.js +10 -8
  161. package/dist/esm/services/InternalEventsHandler.js.map +1 -1
  162. package/dist/esm/services/ModelFetcher.d.ts +2 -7
  163. package/dist/esm/services/ModelFetcher.d.ts.map +1 -1
  164. package/dist/esm/services/ModelFetcher.js +4 -9
  165. package/dist/esm/services/ModelFetcher.js.map +1 -1
  166. package/dist/esm/services/RedisService.d.ts +5 -2
  167. package/dist/esm/services/RedisService.d.ts.map +1 -1
  168. package/dist/esm/services/RedisService.js +25 -21
  169. package/dist/esm/services/RedisService.js.map +1 -1
  170. package/dist/esm/services/SocketService.d.ts +7 -4
  171. package/dist/esm/services/SocketService.d.ts.map +1 -1
  172. package/dist/esm/services/SocketService.js +15 -13
  173. package/dist/esm/services/SocketService.js.map +1 -1
  174. package/dist/esm/services/index.d.ts +5 -6
  175. package/dist/esm/services/index.d.ts.map +1 -1
  176. package/dist/esm/services/index.js +5 -6
  177. package/dist/esm/services/index.js.map +1 -1
  178. package/dist/esm/store/AgentStore.d.ts +2 -1
  179. package/dist/esm/store/AgentStore.d.ts.map +1 -1
  180. package/dist/esm/store/AgentStore.js +5 -5
  181. package/dist/esm/store/AgentStore.js.map +1 -1
  182. package/dist/esm/store/ArtifactStore.js +3 -7
  183. package/dist/esm/store/ArtifactStore.js.map +1 -1
  184. package/dist/esm/store/ConfigStore.d.ts.map +1 -1
  185. package/dist/esm/store/ConfigStore.js +16 -19
  186. package/dist/esm/store/ConfigStore.js.map +1 -1
  187. package/dist/esm/store/ConfigStore.test.js +1 -1
  188. package/dist/esm/store/ConfigStore.test.js.map +1 -1
  189. package/dist/esm/store/ModelStore.js +6 -6
  190. package/dist/esm/store/ModelStore.js.map +1 -1
  191. package/dist/esm/store/ModelStore.test.js +12 -12
  192. package/dist/esm/store/ModelStore.test.js.map +1 -1
  193. package/dist/esm/store/index.d.ts +4 -4
  194. package/dist/esm/store/index.d.ts.map +1 -1
  195. package/dist/esm/store/index.js +4 -4
  196. package/dist/esm/store/index.js.map +1 -1
  197. package/dist/esm/tools/proposeFormValuesTool.d.ts +2 -2
  198. package/dist/esm/tsconfig.esm.tsbuildinfo +1 -0
  199. package/package.json +11 -10
  200. package/dist/cjs/config.js +0 -48
  201. package/dist/cjs/config.js.map +0 -1
  202. package/dist/cjs/helpers/AIHelper.js.map +0 -1
  203. package/dist/cjs/helpers/AIHelper.test.js.map +0 -1
  204. package/dist/cjs/helpers/ConfigHelper.js.map +0 -1
  205. package/dist/cjs/helpers/FileHelper.js +0 -215
  206. package/dist/cjs/helpers/FileHelper.js.map +0 -1
  207. package/dist/cjs/helpers/SetupHelper.d.ts +0 -5
  208. package/dist/cjs/helpers/SetupHelper.d.ts.map +0 -1
  209. package/dist/cjs/helpers/SetupHelper.js +0 -37
  210. package/dist/cjs/helpers/SetupHelper.js.map +0 -1
  211. package/dist/cjs/index.js +0 -34
  212. package/dist/cjs/index.js.map +0 -1
  213. package/dist/cjs/libs/kafka/config.d.ts +0 -5
  214. package/dist/cjs/libs/kafka/config.d.ts.map +0 -1
  215. package/dist/cjs/libs/kafka/config.js +0 -8
  216. package/dist/cjs/libs/kafka/config.js.map +0 -1
  217. package/dist/cjs/libs/kafka/consumer.d.ts +0 -16
  218. package/dist/cjs/libs/kafka/consumer.d.ts.map +0 -1
  219. package/dist/cjs/libs/kafka/consumer.js +0 -133
  220. package/dist/cjs/libs/kafka/consumer.js.map +0 -1
  221. package/dist/cjs/libs/kafka/index.d.ts +0 -3
  222. package/dist/cjs/libs/kafka/index.d.ts.map +0 -1
  223. package/dist/cjs/libs/kafka/index.js.map +0 -1
  224. package/dist/cjs/libs/kafka/kafka.d.ts +0 -3
  225. package/dist/cjs/libs/kafka/kafka.d.ts.map +0 -1
  226. package/dist/cjs/libs/kafka/kafka.js +0 -27
  227. package/dist/cjs/libs/kafka/kafka.js.map +0 -1
  228. package/dist/cjs/libs/kafka/producer.d.ts +0 -11
  229. package/dist/cjs/libs/kafka/producer.d.ts.map +0 -1
  230. package/dist/cjs/libs/kafka/producer.js +0 -48
  231. package/dist/cjs/libs/kafka/producer.js.map +0 -1
  232. package/dist/cjs/libs/logger/config.d.ts +0 -5
  233. package/dist/cjs/libs/logger/config.d.ts.map +0 -1
  234. package/dist/cjs/libs/logger/config.js +0 -9
  235. package/dist/cjs/libs/logger/config.js.map +0 -1
  236. package/dist/cjs/libs/s3/config.d.ts +0 -7
  237. package/dist/cjs/libs/s3/config.d.ts.map +0 -1
  238. package/dist/cjs/libs/s3/config.js +0 -10
  239. package/dist/cjs/libs/s3/config.js.map +0 -1
  240. package/dist/cjs/libs/s3/index.js +0 -44
  241. package/dist/cjs/libs/s3/index.js.map +0 -1
  242. package/dist/cjs/libs/s3/s3.lib.js +0 -224
  243. package/dist/cjs/libs/s3/s3.lib.js.map +0 -1
  244. package/dist/cjs/processors/ChatProcessor.js.map +0 -1
  245. package/dist/cjs/services/AIService.js.map +0 -1
  246. package/dist/cjs/services/InternalEventsHandler.js.map +0 -1
  247. package/dist/cjs/services/KafkaService.d.ts +0 -35
  248. package/dist/cjs/services/KafkaService.d.ts.map +0 -1
  249. package/dist/cjs/services/KafkaService.js +0 -123
  250. package/dist/cjs/services/KafkaService.js.map +0 -1
  251. package/dist/cjs/services/ModelFetcher.js.map +0 -1
  252. package/dist/cjs/services/RedisService.js.map +0 -1
  253. package/dist/cjs/services/SocketService.js.map +0 -1
  254. package/dist/cjs/services/index.js +0 -23
  255. package/dist/cjs/store/AgentStore.js.map +0 -1
  256. package/dist/cjs/store/ArtifactStore.js.map +0 -1
  257. package/dist/cjs/store/ConfigStore.js.map +0 -1
  258. package/dist/cjs/store/ModelStore.js.map +0 -1
  259. package/dist/cjs/store/ModelStore.test.js.map +0 -1
  260. package/dist/esm/helpers/SetupHelper.d.ts +0 -5
  261. package/dist/esm/helpers/SetupHelper.d.ts.map +0 -1
  262. package/dist/esm/helpers/SetupHelper.js +0 -32
  263. package/dist/esm/helpers/SetupHelper.js.map +0 -1
  264. package/dist/esm/libs/kafka/config.d.ts +0 -5
  265. package/dist/esm/libs/kafka/config.d.ts.map +0 -1
  266. package/dist/esm/libs/kafka/config.js +0 -5
  267. package/dist/esm/libs/kafka/config.js.map +0 -1
  268. package/dist/esm/libs/kafka/consumer.d.ts +0 -16
  269. package/dist/esm/libs/kafka/consumer.d.ts.map +0 -1
  270. package/dist/esm/libs/kafka/consumer.js +0 -126
  271. package/dist/esm/libs/kafka/consumer.js.map +0 -1
  272. package/dist/esm/libs/kafka/index.d.ts +0 -3
  273. package/dist/esm/libs/kafka/index.d.ts.map +0 -1
  274. package/dist/esm/libs/kafka/index.js +0 -3
  275. package/dist/esm/libs/kafka/index.js.map +0 -1
  276. package/dist/esm/libs/kafka/kafka.d.ts +0 -3
  277. package/dist/esm/libs/kafka/kafka.d.ts.map +0 -1
  278. package/dist/esm/libs/kafka/kafka.js +0 -24
  279. package/dist/esm/libs/kafka/kafka.js.map +0 -1
  280. package/dist/esm/libs/kafka/producer.d.ts +0 -11
  281. package/dist/esm/libs/kafka/producer.d.ts.map +0 -1
  282. package/dist/esm/libs/kafka/producer.js +0 -44
  283. package/dist/esm/libs/kafka/producer.js.map +0 -1
  284. package/dist/esm/libs/logger/config.d.ts +0 -5
  285. package/dist/esm/libs/logger/config.d.ts.map +0 -1
  286. package/dist/esm/libs/logger/config.js +0 -6
  287. package/dist/esm/libs/logger/config.js.map +0 -1
  288. package/dist/esm/libs/s3/config.d.ts +0 -7
  289. package/dist/esm/libs/s3/config.d.ts.map +0 -1
  290. package/dist/esm/libs/s3/config.js +0 -7
  291. package/dist/esm/libs/s3/config.js.map +0 -1
  292. package/dist/esm/services/KafkaService.d.ts +0 -35
  293. package/dist/esm/services/KafkaService.d.ts.map +0 -1
  294. package/dist/esm/services/KafkaService.js +0 -120
  295. package/dist/esm/services/KafkaService.js.map +0 -1
  296. package/dist/tsconfig.cjs.tsbuildinfo +0 -1
  297. package/dist/tsconfig.esm.tsbuildinfo +0 -1
  298. /package/dist/cjs/libs/logger/{logger.js → logger.cjs} +0 -0
  299. /package/dist/cjs/libs/logger/{logger.js.map → logger.cjs.map} +0 -0
  300. /package/dist/cjs/tools/{generateChartTool.js → generateChartTool.cjs} +0 -0
  301. /package/dist/cjs/tools/{generateChartTool.js.map → generateChartTool.cjs.map} +0 -0
  302. /package/dist/cjs/tools/{proposeFormValuesTool.js → proposeFormValuesTool.cjs} +0 -0
  303. /package/dist/cjs/tools/{proposeFormValuesTool.js.map → proposeFormValuesTool.cjs.map} +0 -0
@@ -0,0 +1,98 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ConfigProvider = void 0;
4
+ require("dotenv/config");
5
+ function createDefaultConfig() {
6
+ return {
7
+ // Redis configuration
8
+ redis: {
9
+ host: 'localhost',
10
+ port: 6379,
11
+ },
12
+ ai: {
13
+ maxContextMessages: 10,
14
+ },
15
+ s3: {
16
+ bucket: 'ai-agent-attachments',
17
+ presignedUrlExpires: 120,
18
+ region: process.env.AWS_REGION || 'us-east-1',
19
+ },
20
+ fileProcessing: {
21
+ maxExtractedTextSize: 51200,
22
+ enableTextExtraction: true,
23
+ },
24
+ logger: {
25
+ nodeEnv: 'development',
26
+ appName: 'ai-agent-node',
27
+ logLevel: 'debug',
28
+ },
29
+ socket: {
30
+ path: undefined
31
+ },
32
+ };
33
+ }
34
+ /**
35
+ * Deep merge utility function
36
+ * Merges source into target, with source values taking precedence
37
+ */
38
+ function deepMerge(target, source) {
39
+ const result = { ...target };
40
+ for (const key in source) {
41
+ if (source[key] !== undefined) {
42
+ if (typeof source[key] === 'object' &&
43
+ source[key] !== null &&
44
+ !Array.isArray(source[key]) &&
45
+ typeof target[key] === 'object' &&
46
+ target[key] !== null &&
47
+ !Array.isArray(target[key])) {
48
+ // Recursively merge nested objects
49
+ result[key] = deepMerge(target[key], source[key]);
50
+ }
51
+ else {
52
+ // Override with source value
53
+ result[key] = source[key];
54
+ }
55
+ }
56
+ }
57
+ return result;
58
+ }
59
+ /**
60
+ * ConfigProvider manages runtime configuration
61
+ * Allows setting config overrides through AIAgentService
62
+ */
63
+ class ConfigProvider {
64
+ constructor() {
65
+ this.runtimeConfig = createDefaultConfig();
66
+ }
67
+ /**
68
+ * Get the singleton instance of ConfigProvider
69
+ */
70
+ static getInstance() {
71
+ if (!ConfigProvider.instance) {
72
+ ConfigProvider.instance = new ConfigProvider();
73
+ }
74
+ return ConfigProvider.instance;
75
+ }
76
+ /**
77
+ * Get the current runtime configuration
78
+ */
79
+ getConfig() {
80
+ return this.runtimeConfig;
81
+ }
82
+ /**
83
+ * Set configuration overrides
84
+ * Merges the provided overrides with existing config (deep merge)
85
+ * @param overrides - Partial config to override existing values
86
+ */
87
+ setConfig(overrides) {
88
+ this.runtimeConfig = deepMerge(this.runtimeConfig, overrides);
89
+ }
90
+ /**
91
+ * Reset configuration to defaults (from environment variables)
92
+ */
93
+ reset() {
94
+ this.runtimeConfig = createDefaultConfig();
95
+ }
96
+ }
97
+ exports.ConfigProvider = ConfigProvider;
98
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":";;;AAAA,yBAAuB;AA0CvB,SAAS,mBAAmB;IAC1B,OAAO;QACL,sBAAsB;QACtB,KAAK,EAAE;YACL,IAAI,EAAE,WAAW;YACjB,IAAI,EAAG,IAAI;SACZ;QACD,EAAE,EAAE;YACF,kBAAkB,EAAE,EAAE;SACvB;QACD,EAAE,EAAE;YACF,MAAM,EAAE,sBAAsB;YAC9B,mBAAmB,EAAE,GAAG;YACxB,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,WAAW;SAC9C;QACD,cAAc,EAAE;YACd,oBAAoB,EAAE,KAAK;YAC3B,oBAAoB,EAAE,IAAI;SAC3B;QACD,MAAM,EAAE;YACN,OAAO,EAAE,aAAa;YACtB,OAAO,EAAE,eAAe;YACxB,QAAQ,EAAE,OAAO;SAClB;QACD,MAAM,EAAE;YACN,IAAI,EAAE,SAAS;SAChB;KACF,CAAC;AACJ,CAAC;AAGD;;;GAGG;AACH,SAAS,SAAS,CAAgC,MAAS,EAAE,MAAkB;IAC7E,MAAM,MAAM,GAAG,EAAE,GAAG,MAAM,EAAE,CAAC;IAE7B,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;QACzB,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,SAAS,EAAE,CAAC;YAC9B,IACI,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,QAAQ;gBAC/B,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI;gBACpB,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBAC3B,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,QAAQ;gBAC/B,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI;gBACpB,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAC7B,CAAC;gBACD,mCAAmC;gBACnC,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAQ,CAAC,CAAC;YAC3D,CAAC;iBAAM,CAAC;gBACN,6BAA6B;gBAC7B,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAQ,CAAC;YACnC,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,MAAa,cAAc;IAIzB;QACE,IAAI,CAAC,aAAa,GAAG,mBAAmB,EAAE,CAAC;IAC7C,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,WAAW;QAChB,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC;YAC7B,cAAc,CAAC,QAAQ,GAAG,IAAI,cAAc,EAAE,CAAC;QACjD,CAAC;QACD,OAAO,cAAc,CAAC,QAAQ,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,SAAS;QACP,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAED;;;;OAIG;IACH,SAAS,CAAC,SAA0B;QAClC,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC,IAAI,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;IAChE,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,aAAa,GAAG,mBAAmB,EAAE,CAAC;IAC7C,CAAC;CACF;AAxCD,wCAwCC"}
@@ -3,33 +3,66 @@ import 'dotenv/config';
3
3
  * Centralized configuration for the AI Agent Service
4
4
  * All environment variables are accessed through this file
5
5
  */
6
- export declare const config: {
7
- readonly redis: {
8
- readonly url: string | undefined;
9
- readonly host: string;
10
- readonly port: number;
11
- readonly password: string | undefined;
12
- readonly database: number | undefined;
6
+ export interface Config {
7
+ redis: {
8
+ url?: string;
9
+ host?: string;
10
+ port?: number;
11
+ password?: string;
12
+ database?: number;
13
13
  };
14
- readonly ai: {
15
- readonly openaiApiKey: string | undefined;
16
- readonly anthropicApiKey: string | undefined;
17
- readonly googleApiKey: string | undefined;
18
- readonly openrouterApiKey: string | undefined;
19
- readonly maxContextMessages: number;
20
- readonly defaultModel: string | undefined;
14
+ ai: {
15
+ openaiApiKey?: string;
16
+ anthropicApiKey?: string;
17
+ googleApiKey?: string;
18
+ openrouterApiKey?: string;
19
+ maxContextMessages?: number;
20
+ defaultModel?: string;
21
21
  };
22
- readonly s3: {
23
- readonly bucket: string;
22
+ s3: {
23
+ bucket?: string;
24
+ host?: string;
25
+ presignedUrlExpires?: number;
26
+ region?: string;
24
27
  };
25
- readonly kafka: {
26
- readonly groupId: string;
27
- readonly chatTitleGenerationTopic: string;
28
- readonly backgroundChatProcessingTopic: string;
28
+ fileProcessing: {
29
+ maxExtractedTextSize?: number;
30
+ enableTextExtraction?: boolean;
29
31
  };
30
- };
32
+ logger: {
33
+ nodeEnv?: string;
34
+ appName?: string;
35
+ logLevel?: string;
36
+ };
37
+ socket: {
38
+ path?: string;
39
+ };
40
+ }
31
41
  /**
32
- * Get Redis connection URL
42
+ * ConfigProvider manages runtime configuration
43
+ * Allows setting config overrides through AIAgentService
33
44
  */
34
- export declare function getRedisUrl(): string;
45
+ export declare class ConfigProvider {
46
+ private static instance;
47
+ private runtimeConfig;
48
+ private constructor();
49
+ /**
50
+ * Get the singleton instance of ConfigProvider
51
+ */
52
+ static getInstance(): ConfigProvider;
53
+ /**
54
+ * Get the current runtime configuration
55
+ */
56
+ getConfig(): Config;
57
+ /**
58
+ * Set configuration overrides
59
+ * Merges the provided overrides with existing config (deep merge)
60
+ * @param overrides - Partial config to override existing values
61
+ */
62
+ setConfig(overrides: Partial<Config>): void;
63
+ /**
64
+ * Reset configuration to defaults (from environment variables)
65
+ */
66
+ reset(): void;
67
+ }
35
68
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAC;AAEvB;;;GAGG;AAEH,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;CA4BT,CAAC;AAEX;;GAEG;AACH,wBAAgB,WAAW,IAAI,MAAM,CAKpC"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAC;AAEvB;;;GAGG;AACH,MAAM,WAAW,MAAM;IACrB,KAAK,EAAE;QACL,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,EAAE,EAAE;QACF,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,EAAE,EAAE;QACF,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,cAAc,EAAE;QACd,oBAAoB,CAAC,EAAE,MAAM,CAAC;QAC9B,oBAAoB,CAAC,EAAE,OAAO,CAAC;KAChC,CAAC;IACF,MAAM,EAAE;QACN,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,MAAM,EAAE;QACN,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;CACH;AA8DD;;;GAGG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAiB;IACxC,OAAO,CAAC,aAAa,CAAS;IAE9B,OAAO;IAIP;;OAEG;IACH,MAAM,CAAC,WAAW,IAAI,cAAc;IAOpC;;OAEG;IACH,SAAS,IAAI,MAAM;IAInB;;;;OAIG;IACH,SAAS,CAAC,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI;IAI3C;;OAEG;IACH,KAAK,IAAI,IAAI;CAGd"}
@@ -2,19 +2,43 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.AIHelper = void 0;
4
4
  const ai_agent_types_1 = require("@multiplayer-app/ai-agent-types");
5
- const index_js_1 = require("../services/index.js");
6
- const index_js_2 = require("../store/index.js");
7
- const index_js_3 = require("../libs/logger/index.js");
8
- const index_js_4 = require("../store/index.js");
9
- const FileHelper_js_1 = require("./FileHelper.js");
5
+ const services_1 = require("../services/index.cjs");
6
+ const store_1 = require("../store/index.cjs");
7
+ const logger_1 = require("../libs/logger/index.cjs");
8
+ const store_2 = require("../store/index.cjs");
10
9
  class AIHelper {
11
- static async convertUserMessage(msg, ignoreFileAttachments) {
12
- var _a, _b;
13
- const userContent = [{
14
- type: "text",
10
+ constructor(fileHelper, config) {
11
+ this.fileHelper = fileHelper;
12
+ this.aiService = new services_1.AIService(store_1.ModelStore.getInstance(), config.ai);
13
+ }
14
+ clip(value, max) {
15
+ if (value.length <= max)
16
+ return value;
17
+ return `${value.slice(0, max)}…`;
18
+ }
19
+ renderContextValue(value, limits) {
20
+ if (value === null || value === undefined)
21
+ return '';
22
+ if (typeof value === 'string')
23
+ return this.clip(value, limits.maxString);
24
+ if (typeof value === 'number' || typeof value === 'boolean')
25
+ return String(value);
26
+ try {
27
+ const json = JSON.stringify(value);
28
+ return this.clip(json, limits.maxJson);
29
+ }
30
+ catch {
31
+ return '';
32
+ }
33
+ }
34
+ async convertUserMessage(msg, ignoreFileAttachments) {
35
+ const userContent = [
36
+ {
37
+ type: 'text',
15
38
  text: msg.content
16
- }];
17
- const atts = (_a = msg.attachments) !== null && _a !== void 0 ? _a : [];
39
+ }
40
+ ];
41
+ const atts = msg.attachments ?? [];
18
42
  if (!atts.length) {
19
43
  return userContent;
20
44
  }
@@ -24,21 +48,21 @@ class AIHelper {
24
48
  if (ignoreFileAttachments) {
25
49
  continue;
26
50
  }
27
- if ((0, FileHelper_js_1.isImage)(att)) {
28
- const image = await (0, FileHelper_js_1.prepareImageForVisionAPI)(att);
51
+ if (this.fileHelper.isImage(att)) {
52
+ const image = await this.fileHelper.prepareImageForVisionAPI(att);
29
53
  if (image) {
30
54
  userContent.push({
31
- type: "image",
55
+ type: 'image',
32
56
  image: image.image_url.url,
33
- mediaType: att.mimeType,
57
+ mediaType: att.mimeType
34
58
  });
35
59
  }
36
60
  }
37
61
  else {
38
- const fileText = await (0, FileHelper_js_1.extractTextFromDocument)(att);
62
+ const fileText = await this.fileHelper.extractTextFromDocument(att);
39
63
  if (fileText) {
40
64
  userContent.push({
41
- type: "text",
65
+ type: 'text',
42
66
  text: `${att.type}: ${att.name}(${att.mimeType})\n ${fileText}`
43
67
  });
44
68
  }
@@ -46,31 +70,30 @@ class AIHelper {
46
70
  continue;
47
71
  }
48
72
  const md = att.metadata;
49
- const kind = typeof (md === null || md === void 0 ? void 0 : md.kind) === 'string' ? md.kind : 'unknown';
73
+ const kind = typeof md?.kind === 'string' ? md.kind : 'unknown';
50
74
  lines.push(`- context:${kind}: ${att.name}`);
51
75
  if (kind === 'webSnippet') {
52
- const url = typeof ((_b = md === null || md === void 0 ? void 0 : md.source) === null || _b === void 0 ? void 0 : _b.url) === 'string' ? md.source.url : att.url;
53
- const title = typeof (md === null || md === void 0 ? void 0 : md.title) === 'string' ? md.title : undefined;
54
- const selectedText = typeof (md === null || md === void 0 ? void 0 : md.selectedText) === 'string' ? md.selectedText : '';
76
+ const url = typeof md?.source?.url === 'string' ? md.source.url : att.url;
77
+ const title = typeof md?.title === 'string' ? md.title : undefined;
78
+ const selectedText = typeof md?.selectedText === 'string' ? md.selectedText : '';
55
79
  if (url)
56
80
  lines.push(` url: ${url}`);
57
81
  if (title)
58
82
  lines.push(` title: ${title}`);
59
83
  if (selectedText) {
60
- const clipped = selectedText.length > 4000 ? `${selectedText.slice(0, 4000)}…` : selectedText;
61
84
  lines.push(' BEGIN_UNTRUSTED_WEB_SNIPPET');
62
- lines.push(clipped);
85
+ lines.push(this.clip(selectedText, 4000));
63
86
  lines.push(' END_UNTRUSTED_WEB_SNIPPET');
64
87
  }
65
88
  continue;
66
89
  }
67
90
  if (kind === 'formField') {
68
- const formId = typeof (md === null || md === void 0 ? void 0 : md.formId) === 'string' ? md.formId : undefined;
69
- const fieldName = typeof (md === null || md === void 0 ? void 0 : md.fieldName) === 'string' ? md.fieldName : undefined;
70
- const fieldLabel = typeof (md === null || md === void 0 ? void 0 : md.fieldLabel) === 'string' ? md.fieldLabel : undefined;
71
- const value = typeof (md === null || md === void 0 ? void 0 : md.value) === 'string' ? md.value : '';
72
- const inputType = typeof (md === null || md === void 0 ? void 0 : md.inputType) === 'string' ? md.inputType : undefined;
73
- const options = Array.isArray(md === null || md === void 0 ? void 0 : md.options) ? md.options : [];
91
+ const formId = typeof md?.formId === 'string' ? md.formId : undefined;
92
+ const fieldName = typeof md?.fieldName === 'string' ? md.fieldName : undefined;
93
+ const fieldLabel = typeof md?.fieldLabel === 'string' ? md.fieldLabel : undefined;
94
+ const value = md?.value;
95
+ const inputType = typeof md?.inputType === 'string' ? md.inputType : undefined;
96
+ const options = Array.isArray(md?.options) ? md.options : [];
74
97
  if (formId)
75
98
  lines.push(` formId: ${formId}`);
76
99
  if (fieldName)
@@ -81,44 +104,47 @@ class AIHelper {
81
104
  const rendered = options
82
105
  .slice(0, 30)
83
106
  .map((o) => {
84
- const v = typeof (o === null || o === void 0 ? void 0 : o.value) === 'string' ? o.value : '';
85
- const l = typeof (o === null || o === void 0 ? void 0 : o.label) === 'string' ? o.label : '';
107
+ const v = typeof o?.value === 'string' ? o.value : '';
108
+ const l = typeof o?.label === 'string' ? o.label : '';
86
109
  if (!v && !l)
87
110
  return '';
88
- return l && v ? `${l} (${v})` : (l || v);
111
+ return l && v ? `${l} (${v})` : l || v;
89
112
  })
90
113
  .filter(Boolean)
91
114
  .join(', ');
92
115
  if (rendered)
93
116
  lines.push(` options: ${rendered}${options.length > 30 ? '…' : ''}`);
94
117
  }
95
- if (value)
96
- lines.push(` value: ${value.length > 1000 ? `${value.slice(0, 1000)}…` : value}`);
118
+ if (value !== undefined) {
119
+ const rendered = this.renderContextValue(value, { maxString: 1000, maxJson: 2500 });
120
+ if (rendered)
121
+ lines.push(` value: ${rendered}`);
122
+ }
97
123
  continue;
98
124
  }
99
125
  if (kind === 'formSnapshot') {
100
- const formId = typeof (md === null || md === void 0 ? void 0 : md.formId) === 'string' ? md.formId : undefined;
101
- const formName = typeof (md === null || md === void 0 ? void 0 : md.formName) === 'string' ? md.formName : undefined;
102
- const fields = Array.isArray(md === null || md === void 0 ? void 0 : md.fields) ? md.fields : [];
126
+ const formId = typeof md?.formId === 'string' ? md.formId : undefined;
127
+ const formName = typeof md?.formName === 'string' ? md.formName : undefined;
128
+ const fields = Array.isArray(md?.fields) ? md.fields : [];
103
129
  if (formId)
104
130
  lines.push(` formId: ${formId}`);
105
131
  if (formName)
106
132
  lines.push(` formName: ${formName}`);
107
133
  lines.push(' fields:');
108
134
  for (const f of fields.slice(0, 50)) {
109
- const name = typeof (f === null || f === void 0 ? void 0 : f.name) === 'string' ? f.name : 'unknown';
110
- const label = typeof (f === null || f === void 0 ? void 0 : f.label) === 'string' ? f.label : undefined;
111
- const value = typeof (f === null || f === void 0 ? void 0 : f.value) === 'string' ? f.value : '';
112
- const inputType = typeof (f === null || f === void 0 ? void 0 : f.inputType) === 'string' ? f.inputType : undefined;
113
- const options = Array.isArray(f === null || f === void 0 ? void 0 : f.options) ? f.options : [];
114
- const clipped = value.length > 1000 ? `${value.slice(0, 1000)}…` : value;
135
+ const name = typeof f?.name === 'string' ? f.name : 'unknown';
136
+ const label = typeof f?.label === 'string' ? f.label : undefined;
137
+ const value = f?.value;
138
+ const inputType = typeof f?.inputType === 'string' ? f.inputType : undefined;
139
+ const options = Array.isArray(f?.options) ? f.options : [];
140
+ const clipped = this.renderContextValue(value, { maxString: 1000, maxJson: 2500 });
115
141
  const meta = [];
116
142
  if (inputType)
117
143
  meta.push(`type=${inputType}`);
118
144
  if ((inputType === 'select' || inputType === 'radio') && options.length) {
119
145
  const opts = options
120
146
  .slice(0, 20)
121
- .map((o) => typeof (o === null || o === void 0 ? void 0 : o.value) === 'string' ? o.value : '')
147
+ .map((o) => (typeof o?.value === 'string' ? o.value : ''))
122
148
  .filter(Boolean)
123
149
  .join('|');
124
150
  if (opts)
@@ -128,103 +154,134 @@ class AIHelper {
128
154
  }
129
155
  continue;
130
156
  }
157
+ if (kind === 'pageContext') {
158
+ const url = typeof md?.source?.url === 'string' ? md.source.url : att.url;
159
+ const title = typeof md?.title === 'string' ? md.title : undefined;
160
+ const route = typeof md?.source?.route === 'string' ? md.source.route : undefined;
161
+ const data = md?.data;
162
+ if (url)
163
+ lines.push(` url: ${url}`);
164
+ if (title)
165
+ lines.push(` title: ${title}`);
166
+ if (route)
167
+ lines.push(` route: ${route}`);
168
+ if (data && typeof data === 'object') {
169
+ const entries = Object.entries(data)
170
+ .filter(([k]) => typeof k === 'string' && k.length > 0)
171
+ .sort(([a], [b]) => a.localeCompare(b));
172
+ if (entries.length) {
173
+ lines.push(' data:');
174
+ const limits = { maxString: 1000, maxJson: 1500 };
175
+ for (const [k, v] of entries.slice(0, 40)) {
176
+ const rendered = this.renderContextValue(v, limits);
177
+ if (!rendered)
178
+ continue;
179
+ lines.push(` - ${k}: ${rendered}`);
180
+ }
181
+ if (entries.length > 40) {
182
+ lines.push(` - … (${entries.length - 40} more keys)`);
183
+ }
184
+ }
185
+ }
186
+ else if (data !== undefined) {
187
+ const rendered = this.renderContextValue(data, { maxString: 1000, maxJson: 2000 });
188
+ if (rendered)
189
+ lines.push(` data: ${rendered}`);
190
+ }
191
+ continue;
192
+ }
131
193
  // Custom kind: prefer summary, fall back to minimal JSON.
132
- const title = typeof (md === null || md === void 0 ? void 0 : md.title) === 'string' ? md.title : undefined;
133
- const summary = typeof (md === null || md === void 0 ? void 0 : md.summary) === 'string' ? md.summary : undefined;
194
+ const title = typeof md?.title === 'string' ? md.title : undefined;
195
+ const summary = typeof md?.summary === 'string' ? md.summary : undefined;
134
196
  if (title)
135
197
  lines.push(` title: ${title}`);
136
198
  if (summary) {
137
- lines.push(` summary: ${summary.length > 4000 ? `${summary.slice(0, 4000)}…` : summary}`);
199
+ lines.push(` summary: ${this.clip(summary, 4000)}`);
138
200
  continue;
139
201
  }
140
- if ((md === null || md === void 0 ? void 0 : md.data) !== undefined) {
141
- const json = JSON.stringify(md.data);
142
- lines.push(` data: ${json.length > 2000 ? `${json.slice(0, 2000)}…` : json}`);
202
+ if (md?.data !== undefined) {
203
+ const rendered = this.renderContextValue(md.data, { maxString: 2000, maxJson: 5000 });
204
+ if (rendered)
205
+ lines.push(` data: ${rendered}`);
143
206
  }
144
207
  }
145
208
  if (lines.length) {
146
209
  userContent.push({
147
- type: "text",
210
+ type: 'text',
148
211
  text: `Context attachments (non-authoritative; user message is primary):\n ${lines.join('\n')}`
149
212
  });
150
213
  }
151
214
  return userContent;
152
215
  }
153
- static getAgentConfigs(contextKey) {
154
- const agents = index_js_4.ConfigStore.getInstance().getAgentsForContext(contextKey);
216
+ getAgentConfigs(contextKey) {
217
+ const agents = store_2.ConfigStore.getInstance().getAgentsForContext(contextKey);
155
218
  if (!agents.length) {
156
219
  throw new Error(`Agent configs not found for context key: ${contextKey}`);
157
220
  }
158
221
  return agents;
159
222
  }
160
- static async getAgentOptions(params, options = {}) {
223
+ async getAgentOptions(params, options = {}) {
161
224
  const { contextKey, messages, modelId, context, agentName } = params;
162
- let agentConfig = index_js_4.ConfigStore.getInstance().getAgentConfigByName(agentName);
225
+ let agentConfig = store_2.ConfigStore.getInstance().getAgentConfigByName(agentName);
163
226
  if (contextKey && messages) {
164
- agentConfig = await AIHelper.selectAgentConfig(contextKey, messages);
227
+ agentConfig = await this.selectAgentConfig(contextKey, messages);
165
228
  }
166
- const aiService = new index_js_1.AIService(index_js_2.ModelStore.getInstance());
167
- const agentOptions = aiService.getAgentOptions(agentConfig, modelId, context);
229
+ const agentOptions = this.aiService.getAgentOptions(agentConfig, modelId, context);
168
230
  return {
169
231
  ...agentOptions,
170
- ...options,
232
+ ...options
171
233
  };
172
234
  }
173
- static async selectAgentConfig(contextKey, messages) {
174
- const configs = AIHelper.getAgentConfigs(contextKey);
235
+ async selectAgentConfig(contextKey, messages) {
236
+ const configs = this.getAgentConfigs(contextKey);
175
237
  if (configs.length === 1) {
176
238
  return configs[0];
177
239
  }
178
- const aiService = new index_js_1.AIService(index_js_2.ModelStore.getInstance());
179
240
  const systemPrompt = `Select the most appropriate agent for the given user prompt.
180
241
  Return only the agent name, no quotes or extra text.
181
- Available agents: ${JSON.stringify(configs.map(config => ({
242
+ Available agents: ${JSON.stringify(configs.map((config) => ({
182
243
  name: config.name,
183
244
  description: config.description,
184
245
  tools: config.tools.map(({ data }) => data.title)
185
246
  })))}`;
186
- const agentName = await aiService.generateText({
247
+ const agentName = await this.aiService.generateText({
187
248
  messages,
188
249
  system: systemPrompt,
189
250
  temperature: 0.7,
190
251
  maxOutputTokens: 2000
191
252
  });
192
- const agent = configs.find(config => config.name === agentName);
253
+ const agent = configs.find((config) => config.name === agentName);
193
254
  if (!agent) {
194
255
  // fallback, agent not found, grabbing first from the list
195
256
  return configs[0];
196
257
  }
197
258
  return agent;
198
259
  }
199
- static async getAssistantResponse(messages, signal, options = {}) {
260
+ async getAssistantResponse(messages, signal, options = {}) {
200
261
  try {
201
- const aiService = new index_js_1.AIService(index_js_2.ModelStore.getInstance());
202
262
  const processedOptions = this.processToolChoice(options, messages);
203
- return aiService.generateText({
263
+ return this.aiService.generateText({
204
264
  temperature: 0.7,
205
265
  maxOutputTokens: 2000,
206
266
  ...processedOptions,
207
- messages: await AIHelper.convertMessages(messages),
208
- signal,
267
+ messages: await this.convertMessages(messages),
268
+ signal
209
269
  });
210
270
  }
211
271
  catch (error) {
212
- index_js_3.logger.error('AI assistant response generation failed:', error);
272
+ logger_1.logger.error('AI assistant response generation failed:', error);
213
273
  throw error;
214
274
  }
215
275
  }
216
- static processToolChoice(options, agentMessages) {
217
- var _a, _b, _c, _d;
218
- if (!(options === null || options === void 0 ? void 0 : options.toolChoice)) {
276
+ processToolChoice(options, agentMessages) {
277
+ if (!options?.toolChoice) {
219
278
  return options || {};
220
279
  }
221
280
  // Find the latest assistant message
222
- const latestAssistantMessage = [...agentMessages]
223
- .reverse()
224
- .find(msg => msg.role === ai_agent_types_1.MessageRole.Assistant);
281
+ const latestAssistantMessage = [...agentMessages].reverse().find((msg) => msg.role === ai_agent_types_1.MessageRole.Assistant);
225
282
  // Handle 'required' toolChoice: if any tool was called, set to 'auto'
226
283
  if (options.toolChoice === 'required') {
227
- const anyToolWasCalled = ((_b = (_a = latestAssistantMessage === null || latestAssistantMessage === void 0 ? void 0 : latestAssistantMessage.toolCalls) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0) > 0;
284
+ const anyToolWasCalled = (latestAssistantMessage?.toolCalls?.length ?? 0) > 0;
228
285
  if (anyToolWasCalled) {
229
286
  return {
230
287
  ...options,
@@ -236,7 +293,7 @@ Available agents: ${JSON.stringify(configs.map(config => ({
236
293
  // Handle specific tool toolChoice: if that specific tool was called, set to 'auto'
237
294
  if (typeof options.toolChoice === 'object' && options.toolChoice.type === 'tool') {
238
295
  const toolName = options.toolChoice.toolName;
239
- const toolWasCalled = (_d = (_c = latestAssistantMessage === null || latestAssistantMessage === void 0 ? void 0 : latestAssistantMessage.toolCalls) === null || _c === void 0 ? void 0 : _c.some(toolCall => toolCall.name === toolName)) !== null && _d !== void 0 ? _d : false;
296
+ const toolWasCalled = latestAssistantMessage?.toolCalls?.some((toolCall) => toolCall.name === toolName) ?? false;
240
297
  if (toolWasCalled) {
241
298
  return {
242
299
  ...options,
@@ -246,11 +303,10 @@ Available agents: ${JSON.stringify(configs.map(config => ({
246
303
  }
247
304
  return options;
248
305
  }
249
- static async streamAssistantResponse(agentMessages, signal, options) {
250
- const aiService = new index_js_1.AIService(index_js_2.ModelStore.getInstance());
306
+ async streamAssistantResponse(agentMessages, signal, options) {
251
307
  const messages = await this.convertMessages(agentMessages);
252
308
  const processedOptions = this.processToolChoice(options, agentMessages);
253
- return aiService.streamText({
309
+ return this.aiService.streamText({
254
310
  messages,
255
311
  temperature: 0.7,
256
312
  maxOutputTokens: 2000,
@@ -258,8 +314,7 @@ Available agents: ${JSON.stringify(configs.map(config => ({
258
314
  ...processedOptions
259
315
  });
260
316
  }
261
- static async convertMessages(agentMessages, ignoreToolsAndAttachments = false) {
262
- var _a;
317
+ async convertMessages(agentMessages, ignoreToolsAndAttachments = false) {
263
318
  const result = [];
264
319
  for (const msg of agentMessages) {
265
320
  if (msg.role === ai_agent_types_1.MessageRole.User) {
@@ -281,7 +336,7 @@ Available agents: ${JSON.stringify(configs.map(config => ({
281
336
  content: []
282
337
  };
283
338
  if (!ignoreToolsAndAttachments) {
284
- (_a = msg.toolCalls) === null || _a === void 0 ? void 0 : _a.forEach((toolCall) => {
339
+ msg.toolCalls?.forEach((toolCall) => {
285
340
  if (toolCall.output) {
286
341
  assistantMessage.content.push({
287
342
  type: 'tool-call',
@@ -311,17 +366,16 @@ Available agents: ${JSON.stringify(configs.map(config => ({
311
366
  }
312
367
  return result;
313
368
  }
314
- static async generateTitleForMessage(contextKey, messages) {
369
+ async generateTitleForMessage(contextKey, messages) {
315
370
  try {
316
- const aiService = new index_js_1.AIService(index_js_2.ModelStore.getInstance());
317
371
  const systemPrompt = `Generate descriptive title 5 words maximum for a chat conversation. Return only the title, no quotes or extra text. If user question is opaque, assume it is related to ${contextKey} topic.`;
318
- return aiService.generateText({
319
- messages: await AIHelper.convertMessages(messages, true),
320
- system: systemPrompt,
372
+ return this.aiService.generateText({
373
+ messages: await this.convertMessages(messages, true),
374
+ system: systemPrompt
321
375
  });
322
376
  }
323
377
  catch (error) {
324
- index_js_3.logger.warn('AI title generation failed, falling back to simple title generation', { error });
378
+ logger_1.logger.warn('AI title generation failed, falling back to simple title generation', { error });
325
379
  return `${contextKey} session ${new Date().toISOString()}`;
326
380
  }
327
381
  }