@multiplayer-app/ai-agent-node 0.1.0-beta.8 → 0.1.0-beta.81

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 (338) hide show
  1. package/README.md +2 -2
  2. package/dist/cjs/config.cjs +88 -37
  3. package/dist/cjs/config.cjs.map +1 -1
  4. package/dist/cjs/config.d.ts +62 -23
  5. package/dist/cjs/config.d.ts.map +1 -1
  6. package/dist/cjs/helpers/AIHelper.cjs +134 -68
  7. package/dist/cjs/helpers/AIHelper.cjs.map +1 -1
  8. package/dist/cjs/helpers/AIHelper.d.ts +24 -16
  9. package/dist/cjs/helpers/AIHelper.d.ts.map +1 -1
  10. package/dist/cjs/helpers/AIHelper.test.cjs +22 -15
  11. package/dist/cjs/helpers/AIHelper.test.cjs.map +1 -1
  12. package/dist/cjs/helpers/ConfigHelper.cjs +15 -6
  13. package/dist/cjs/helpers/ConfigHelper.cjs.map +1 -1
  14. package/dist/cjs/helpers/ConfigHelper.d.ts.map +1 -1
  15. package/dist/cjs/helpers/FileHelper.cjs +131 -151
  16. package/dist/cjs/helpers/FileHelper.cjs.map +1 -1
  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/helpers/index.cjs +0 -1
  20. package/dist/cjs/helpers/index.cjs.map +1 -1
  21. package/dist/cjs/helpers/index.d.ts +0 -1
  22. package/dist/cjs/helpers/index.d.ts.map +1 -1
  23. package/dist/cjs/index.cjs +125 -28
  24. package/dist/cjs/index.cjs.map +1 -1
  25. package/dist/cjs/index.d.ts +47 -11
  26. package/dist/cjs/index.d.ts.map +1 -1
  27. package/dist/cjs/libs/index.cjs +0 -1
  28. package/dist/cjs/libs/index.cjs.map +1 -1
  29. package/dist/cjs/libs/index.d.ts +0 -1
  30. package/dist/cjs/libs/index.d.ts.map +1 -1
  31. package/dist/cjs/libs/s3/index.cjs +3 -39
  32. package/dist/cjs/libs/s3/index.cjs.map +1 -1
  33. package/dist/cjs/libs/s3/index.d.ts +1 -2
  34. package/dist/cjs/libs/s3/index.d.ts.map +1 -1
  35. package/dist/cjs/libs/s3/s3.lib.cjs +173 -186
  36. package/dist/cjs/libs/s3/s3.lib.cjs.map +1 -1
  37. package/dist/cjs/libs/s3/s3.lib.d.ts +29 -22
  38. package/dist/cjs/libs/s3/s3.lib.d.ts.map +1 -1
  39. package/dist/cjs/processors/ActivityProcessor.cjs +53 -0
  40. package/dist/cjs/processors/ActivityProcessor.cjs.map +1 -0
  41. package/dist/cjs/processors/ActivityProcessor.d.ts +34 -0
  42. package/dist/cjs/processors/ActivityProcessor.d.ts.map +1 -0
  43. package/dist/cjs/processors/ActivityProcessor.test.cjs +139 -0
  44. package/dist/cjs/processors/ActivityProcessor.test.cjs.map +1 -0
  45. package/dist/cjs/processors/ActivityProcessor.test.d.ts +2 -0
  46. package/dist/cjs/processors/ActivityProcessor.test.d.ts.map +1 -0
  47. package/dist/cjs/processors/AgentProcessor.cjs +47 -0
  48. package/dist/cjs/processors/AgentProcessor.cjs.map +1 -0
  49. package/dist/cjs/processors/AgentProcessor.d.ts +25 -0
  50. package/dist/cjs/processors/AgentProcessor.d.ts.map +1 -0
  51. package/dist/cjs/processors/AgentProcessor.test.cjs +103 -0
  52. package/dist/cjs/processors/AgentProcessor.test.cjs.map +1 -0
  53. package/dist/cjs/processors/AgentProcessor.test.d.ts +2 -0
  54. package/dist/cjs/processors/AgentProcessor.test.d.ts.map +1 -0
  55. package/dist/cjs/processors/ChatProcessor.cjs +1029 -148
  56. package/dist/cjs/processors/ChatProcessor.cjs.map +1 -1
  57. package/dist/cjs/processors/ChatProcessor.d.ts +108 -12
  58. package/dist/cjs/processors/ChatProcessor.d.ts.map +1 -1
  59. package/dist/cjs/processors/ChatProcessor.test.cjs +803 -0
  60. package/dist/cjs/processors/ChatProcessor.test.cjs.map +1 -0
  61. package/dist/cjs/processors/ChatProcessor.test.d.ts +2 -0
  62. package/dist/cjs/processors/ChatProcessor.test.d.ts.map +1 -0
  63. package/dist/cjs/processors/index.cjs +2 -0
  64. package/dist/cjs/processors/index.cjs.map +1 -1
  65. package/dist/cjs/processors/index.d.ts +2 -0
  66. package/dist/cjs/processors/index.d.ts.map +1 -1
  67. package/dist/cjs/services/AIService.cjs +114 -68
  68. package/dist/cjs/services/AIService.cjs.map +1 -1
  69. package/dist/cjs/services/AIService.d.ts +34 -13
  70. package/dist/cjs/services/AIService.d.ts.map +1 -1
  71. package/dist/cjs/services/CredentialProvider.cjs +62 -0
  72. package/dist/cjs/services/CredentialProvider.cjs.map +1 -0
  73. package/dist/cjs/services/CredentialProvider.d.ts +20 -0
  74. package/dist/cjs/services/CredentialProvider.d.ts.map +1 -0
  75. package/dist/cjs/services/CredentialProvider.test.cjs +71 -0
  76. package/dist/cjs/services/CredentialProvider.test.cjs.map +1 -0
  77. package/dist/cjs/services/CredentialProvider.test.d.ts +2 -0
  78. package/dist/cjs/services/CredentialProvider.test.d.ts.map +1 -0
  79. package/dist/cjs/services/ExecutionContext.cjs +3 -0
  80. package/dist/cjs/services/ExecutionContext.cjs.map +1 -0
  81. package/dist/cjs/services/ExecutionContext.d.ts +4 -0
  82. package/dist/cjs/services/ExecutionContext.d.ts.map +1 -0
  83. package/dist/cjs/services/InternalEventsHandler.cjs +3 -3
  84. package/dist/cjs/services/InternalEventsHandler.cjs.map +1 -1
  85. package/dist/cjs/services/InternalEventsHandler.d.ts +3 -1
  86. package/dist/cjs/services/InternalEventsHandler.d.ts.map +1 -1
  87. package/dist/cjs/services/ModelAccessPolicy.cjs +24 -0
  88. package/dist/cjs/services/ModelAccessPolicy.cjs.map +1 -0
  89. package/dist/cjs/services/ModelAccessPolicy.d.ts +7 -0
  90. package/dist/cjs/services/ModelAccessPolicy.d.ts.map +1 -0
  91. package/dist/cjs/services/ModelFetcher.cjs +2 -8
  92. package/dist/cjs/services/ModelFetcher.cjs.map +1 -1
  93. package/dist/cjs/services/ModelFetcher.d.ts +2 -7
  94. package/dist/cjs/services/ModelFetcher.d.ts.map +1 -1
  95. package/dist/cjs/services/ProviderClientFactory.cjs +29 -0
  96. package/dist/cjs/services/ProviderClientFactory.cjs.map +1 -0
  97. package/dist/cjs/services/ProviderClientFactory.d.ts +9 -0
  98. package/dist/cjs/services/ProviderClientFactory.d.ts.map +1 -0
  99. package/dist/cjs/services/RedisService.cjs +20 -16
  100. package/dist/cjs/services/RedisService.cjs.map +1 -1
  101. package/dist/cjs/services/RedisService.d.ts +5 -2
  102. package/dist/cjs/services/RedisService.d.ts.map +1 -1
  103. package/dist/cjs/services/SocketService.cjs +8 -8
  104. package/dist/cjs/services/SocketService.cjs.map +1 -1
  105. package/dist/cjs/services/SocketService.d.ts +9 -6
  106. package/dist/cjs/services/SocketService.d.ts.map +1 -1
  107. package/dist/cjs/services/TenantCredentialResolver.cjs +136 -0
  108. package/dist/cjs/services/TenantCredentialResolver.cjs.map +1 -0
  109. package/dist/cjs/services/TenantCredentialResolver.d.ts +32 -0
  110. package/dist/cjs/services/TenantCredentialResolver.d.ts.map +1 -0
  111. package/dist/cjs/services/TenantCredentialResolver.test.cjs +113 -0
  112. package/dist/cjs/services/TenantCredentialResolver.test.cjs.map +1 -0
  113. package/dist/cjs/services/TenantCredentialResolver.test.d.ts +2 -0
  114. package/dist/cjs/services/TenantCredentialResolver.test.d.ts.map +1 -0
  115. package/dist/cjs/services/index.cjs +5 -1
  116. package/dist/cjs/services/index.cjs.map +1 -1
  117. package/dist/cjs/services/index.d.ts +5 -1
  118. package/dist/cjs/services/index.d.ts.map +1 -1
  119. package/dist/cjs/store/AgentStore.cjs +14 -4
  120. package/dist/cjs/store/AgentStore.cjs.map +1 -1
  121. package/dist/cjs/store/AgentStore.d.ts +3 -1
  122. package/dist/cjs/store/AgentStore.d.ts.map +1 -1
  123. package/dist/cjs/store/ConfigStore.cjs +14 -3
  124. package/dist/cjs/store/ConfigStore.cjs.map +1 -1
  125. package/dist/cjs/store/ConfigStore.d.ts +2 -0
  126. package/dist/cjs/store/ConfigStore.d.ts.map +1 -1
  127. package/dist/cjs/tools/generateChartTool.d.ts +2 -2
  128. package/dist/cjs/tools/proposeFormValuesTool.d.ts +2 -2
  129. package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
  130. package/dist/cjs/utils/utils.cjs +31 -0
  131. package/dist/cjs/utils/utils.cjs.map +1 -0
  132. package/dist/cjs/utils/utils.d.ts +5 -0
  133. package/dist/cjs/utils/utils.d.ts.map +1 -0
  134. package/dist/esm/config.d.ts +62 -23
  135. package/dist/esm/config.d.ts.map +1 -1
  136. package/dist/esm/config.js +88 -35
  137. package/dist/esm/config.js.map +1 -1
  138. package/dist/esm/helpers/AIHelper.d.ts +24 -16
  139. package/dist/esm/helpers/AIHelper.d.ts.map +1 -1
  140. package/dist/esm/helpers/AIHelper.js +141 -73
  141. package/dist/esm/helpers/AIHelper.js.map +1 -1
  142. package/dist/esm/helpers/AIHelper.test.js +22 -15
  143. package/dist/esm/helpers/AIHelper.test.js.map +1 -1
  144. package/dist/esm/helpers/ConfigHelper.d.ts.map +1 -1
  145. package/dist/esm/helpers/ConfigHelper.js +15 -6
  146. package/dist/esm/helpers/ConfigHelper.js.map +1 -1
  147. package/dist/esm/helpers/FileHelper.d.ts +19 -25
  148. package/dist/esm/helpers/FileHelper.d.ts.map +1 -1
  149. package/dist/esm/helpers/FileHelper.js +131 -146
  150. package/dist/esm/helpers/FileHelper.js.map +1 -1
  151. package/dist/esm/helpers/index.d.ts +0 -1
  152. package/dist/esm/helpers/index.d.ts.map +1 -1
  153. package/dist/esm/helpers/index.js +0 -1
  154. package/dist/esm/helpers/index.js.map +1 -1
  155. package/dist/esm/index.d.ts +47 -11
  156. package/dist/esm/index.d.ts.map +1 -1
  157. package/dist/esm/index.js +98 -11
  158. package/dist/esm/index.js.map +1 -1
  159. package/dist/esm/libs/index.d.ts +0 -1
  160. package/dist/esm/libs/index.d.ts.map +1 -1
  161. package/dist/esm/libs/index.js +0 -1
  162. package/dist/esm/libs/index.js.map +1 -1
  163. package/dist/esm/libs/s3/index.d.ts +1 -2
  164. package/dist/esm/libs/s3/index.d.ts.map +1 -1
  165. package/dist/esm/libs/s3/index.js +1 -2
  166. package/dist/esm/libs/s3/index.js.map +1 -1
  167. package/dist/esm/libs/s3/s3.lib.d.ts +29 -22
  168. package/dist/esm/libs/s3/s3.lib.d.ts.map +1 -1
  169. package/dist/esm/libs/s3/s3.lib.js +177 -172
  170. package/dist/esm/libs/s3/s3.lib.js.map +1 -1
  171. package/dist/esm/processors/ActivityProcessor.d.ts +34 -0
  172. package/dist/esm/processors/ActivityProcessor.d.ts.map +1 -0
  173. package/dist/esm/processors/ActivityProcessor.js +50 -0
  174. package/dist/esm/processors/ActivityProcessor.js.map +1 -0
  175. package/dist/esm/processors/ActivityProcessor.test.d.ts +2 -0
  176. package/dist/esm/processors/ActivityProcessor.test.d.ts.map +1 -0
  177. package/dist/esm/processors/ActivityProcessor.test.js +137 -0
  178. package/dist/esm/processors/ActivityProcessor.test.js.map +1 -0
  179. package/dist/esm/processors/AgentProcessor.d.ts +25 -0
  180. package/dist/esm/processors/AgentProcessor.d.ts.map +1 -0
  181. package/dist/esm/processors/AgentProcessor.js +44 -0
  182. package/dist/esm/processors/AgentProcessor.js.map +1 -0
  183. package/dist/esm/processors/AgentProcessor.test.d.ts +2 -0
  184. package/dist/esm/processors/AgentProcessor.test.d.ts.map +1 -0
  185. package/dist/esm/processors/AgentProcessor.test.js +101 -0
  186. package/dist/esm/processors/AgentProcessor.test.js.map +1 -0
  187. package/dist/esm/processors/ChatProcessor.d.ts +108 -12
  188. package/dist/esm/processors/ChatProcessor.d.ts.map +1 -1
  189. package/dist/esm/processors/ChatProcessor.js +1038 -150
  190. package/dist/esm/processors/ChatProcessor.js.map +1 -1
  191. package/dist/esm/processors/ChatProcessor.test.d.ts +2 -0
  192. package/dist/esm/processors/ChatProcessor.test.d.ts.map +1 -0
  193. package/dist/esm/processors/ChatProcessor.test.js +801 -0
  194. package/dist/esm/processors/ChatProcessor.test.js.map +1 -0
  195. package/dist/esm/processors/index.d.ts +2 -0
  196. package/dist/esm/processors/index.d.ts.map +1 -1
  197. package/dist/esm/processors/index.js +2 -0
  198. package/dist/esm/processors/index.js.map +1 -1
  199. package/dist/esm/services/AIService.d.ts +34 -13
  200. package/dist/esm/services/AIService.d.ts.map +1 -1
  201. package/dist/esm/services/AIService.js +118 -68
  202. package/dist/esm/services/AIService.js.map +1 -1
  203. package/dist/esm/services/CredentialProvider.d.ts +20 -0
  204. package/dist/esm/services/CredentialProvider.d.ts.map +1 -0
  205. package/dist/esm/services/CredentialProvider.js +60 -0
  206. package/dist/esm/services/CredentialProvider.js.map +1 -0
  207. package/dist/esm/services/CredentialProvider.test.d.ts +2 -0
  208. package/dist/esm/services/CredentialProvider.test.d.ts.map +1 -0
  209. package/dist/esm/services/CredentialProvider.test.js +69 -0
  210. package/dist/esm/services/CredentialProvider.test.js.map +1 -0
  211. package/dist/esm/services/ExecutionContext.d.ts +4 -0
  212. package/dist/esm/services/ExecutionContext.d.ts.map +1 -0
  213. package/dist/esm/services/ExecutionContext.js +2 -0
  214. package/dist/esm/services/ExecutionContext.js.map +1 -0
  215. package/dist/esm/services/InternalEventsHandler.d.ts +3 -1
  216. package/dist/esm/services/InternalEventsHandler.d.ts.map +1 -1
  217. package/dist/esm/services/InternalEventsHandler.js +4 -3
  218. package/dist/esm/services/InternalEventsHandler.js.map +1 -1
  219. package/dist/esm/services/ModelAccessPolicy.d.ts +7 -0
  220. package/dist/esm/services/ModelAccessPolicy.d.ts.map +1 -0
  221. package/dist/esm/services/ModelAccessPolicy.js +20 -0
  222. package/dist/esm/services/ModelAccessPolicy.js.map +1 -0
  223. package/dist/esm/services/ModelFetcher.d.ts +2 -7
  224. package/dist/esm/services/ModelFetcher.d.ts.map +1 -1
  225. package/dist/esm/services/ModelFetcher.js +2 -8
  226. package/dist/esm/services/ModelFetcher.js.map +1 -1
  227. package/dist/esm/services/ProviderClientFactory.d.ts +9 -0
  228. package/dist/esm/services/ProviderClientFactory.d.ts.map +1 -0
  229. package/dist/esm/services/ProviderClientFactory.js +25 -0
  230. package/dist/esm/services/ProviderClientFactory.js.map +1 -0
  231. package/dist/esm/services/RedisService.d.ts +5 -2
  232. package/dist/esm/services/RedisService.d.ts.map +1 -1
  233. package/dist/esm/services/RedisService.js +21 -14
  234. package/dist/esm/services/RedisService.js.map +1 -1
  235. package/dist/esm/services/SocketService.d.ts +9 -6
  236. package/dist/esm/services/SocketService.d.ts.map +1 -1
  237. package/dist/esm/services/SocketService.js +10 -6
  238. package/dist/esm/services/SocketService.js.map +1 -1
  239. package/dist/esm/services/TenantCredentialResolver.d.ts +32 -0
  240. package/dist/esm/services/TenantCredentialResolver.d.ts.map +1 -0
  241. package/dist/esm/services/TenantCredentialResolver.js +133 -0
  242. package/dist/esm/services/TenantCredentialResolver.js.map +1 -0
  243. package/dist/esm/services/TenantCredentialResolver.test.d.ts +2 -0
  244. package/dist/esm/services/TenantCredentialResolver.test.d.ts.map +1 -0
  245. package/dist/esm/services/TenantCredentialResolver.test.js +111 -0
  246. package/dist/esm/services/TenantCredentialResolver.test.js.map +1 -0
  247. package/dist/esm/services/index.d.ts +5 -1
  248. package/dist/esm/services/index.d.ts.map +1 -1
  249. package/dist/esm/services/index.js +5 -1
  250. package/dist/esm/services/index.js.map +1 -1
  251. package/dist/esm/store/AgentStore.d.ts +3 -1
  252. package/dist/esm/store/AgentStore.d.ts.map +1 -1
  253. package/dist/esm/store/AgentStore.js +15 -2
  254. package/dist/esm/store/AgentStore.js.map +1 -1
  255. package/dist/esm/store/ConfigStore.d.ts +2 -0
  256. package/dist/esm/store/ConfigStore.d.ts.map +1 -1
  257. package/dist/esm/store/ConfigStore.js +14 -3
  258. package/dist/esm/store/ConfigStore.js.map +1 -1
  259. package/dist/esm/tools/generateChartTool.d.ts +2 -2
  260. package/dist/esm/tools/proposeFormValuesTool.d.ts +2 -2
  261. package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
  262. package/dist/esm/utils/utils.d.ts +5 -0
  263. package/dist/esm/utils/utils.d.ts.map +1 -0
  264. package/dist/esm/utils/utils.js +26 -0
  265. package/dist/esm/utils/utils.js.map +1 -0
  266. package/package.json +7 -8
  267. package/dist/cjs/helpers/SetupHelper.cjs +0 -37
  268. package/dist/cjs/helpers/SetupHelper.cjs.map +0 -1
  269. package/dist/cjs/helpers/SetupHelper.d.ts +0 -5
  270. package/dist/cjs/helpers/SetupHelper.d.ts.map +0 -1
  271. package/dist/cjs/libs/kafka/config.cjs +0 -8
  272. package/dist/cjs/libs/kafka/config.cjs.map +0 -1
  273. package/dist/cjs/libs/kafka/config.d.ts +0 -5
  274. package/dist/cjs/libs/kafka/config.d.ts.map +0 -1
  275. package/dist/cjs/libs/kafka/consumer.cjs +0 -131
  276. package/dist/cjs/libs/kafka/consumer.cjs.map +0 -1
  277. package/dist/cjs/libs/kafka/consumer.d.ts +0 -16
  278. package/dist/cjs/libs/kafka/consumer.d.ts.map +0 -1
  279. package/dist/cjs/libs/kafka/index.cjs +0 -19
  280. package/dist/cjs/libs/kafka/index.cjs.map +0 -1
  281. package/dist/cjs/libs/kafka/index.d.ts +0 -3
  282. package/dist/cjs/libs/kafka/index.d.ts.map +0 -1
  283. package/dist/cjs/libs/kafka/kafka.cjs +0 -27
  284. package/dist/cjs/libs/kafka/kafka.cjs.map +0 -1
  285. package/dist/cjs/libs/kafka/kafka.d.ts +0 -3
  286. package/dist/cjs/libs/kafka/kafka.d.ts.map +0 -1
  287. package/dist/cjs/libs/kafka/producer.cjs +0 -48
  288. package/dist/cjs/libs/kafka/producer.cjs.map +0 -1
  289. package/dist/cjs/libs/kafka/producer.d.ts +0 -11
  290. package/dist/cjs/libs/kafka/producer.d.ts.map +0 -1
  291. package/dist/cjs/libs/logger/config.cjs +0 -8
  292. package/dist/cjs/libs/logger/config.cjs.map +0 -1
  293. package/dist/cjs/libs/logger/config.d.ts +0 -5
  294. package/dist/cjs/libs/logger/config.d.ts.map +0 -1
  295. package/dist/cjs/libs/s3/config.cjs +0 -10
  296. package/dist/cjs/libs/s3/config.cjs.map +0 -1
  297. package/dist/cjs/libs/s3/config.d.ts +0 -7
  298. package/dist/cjs/libs/s3/config.d.ts.map +0 -1
  299. package/dist/cjs/services/KafkaService.cjs +0 -122
  300. package/dist/cjs/services/KafkaService.cjs.map +0 -1
  301. package/dist/cjs/services/KafkaService.d.ts +0 -35
  302. package/dist/cjs/services/KafkaService.d.ts.map +0 -1
  303. package/dist/esm/helpers/SetupHelper.d.ts +0 -5
  304. package/dist/esm/helpers/SetupHelper.d.ts.map +0 -1
  305. package/dist/esm/helpers/SetupHelper.js +0 -32
  306. package/dist/esm/helpers/SetupHelper.js.map +0 -1
  307. package/dist/esm/libs/kafka/config.d.ts +0 -5
  308. package/dist/esm/libs/kafka/config.d.ts.map +0 -1
  309. package/dist/esm/libs/kafka/config.js +0 -5
  310. package/dist/esm/libs/kafka/config.js.map +0 -1
  311. package/dist/esm/libs/kafka/consumer.d.ts +0 -16
  312. package/dist/esm/libs/kafka/consumer.d.ts.map +0 -1
  313. package/dist/esm/libs/kafka/consumer.js +0 -125
  314. package/dist/esm/libs/kafka/consumer.js.map +0 -1
  315. package/dist/esm/libs/kafka/index.d.ts +0 -3
  316. package/dist/esm/libs/kafka/index.d.ts.map +0 -1
  317. package/dist/esm/libs/kafka/index.js +0 -3
  318. package/dist/esm/libs/kafka/index.js.map +0 -1
  319. package/dist/esm/libs/kafka/kafka.d.ts +0 -3
  320. package/dist/esm/libs/kafka/kafka.d.ts.map +0 -1
  321. package/dist/esm/libs/kafka/kafka.js +0 -24
  322. package/dist/esm/libs/kafka/kafka.js.map +0 -1
  323. package/dist/esm/libs/kafka/producer.d.ts +0 -11
  324. package/dist/esm/libs/kafka/producer.d.ts.map +0 -1
  325. package/dist/esm/libs/kafka/producer.js +0 -45
  326. package/dist/esm/libs/kafka/producer.js.map +0 -1
  327. package/dist/esm/libs/logger/config.d.ts +0 -5
  328. package/dist/esm/libs/logger/config.d.ts.map +0 -1
  329. package/dist/esm/libs/logger/config.js +0 -5
  330. package/dist/esm/libs/logger/config.js.map +0 -1
  331. package/dist/esm/libs/s3/config.d.ts +0 -7
  332. package/dist/esm/libs/s3/config.d.ts.map +0 -1
  333. package/dist/esm/libs/s3/config.js +0 -7
  334. package/dist/esm/libs/s3/config.js.map +0 -1
  335. package/dist/esm/services/KafkaService.d.ts +0 -35
  336. package/dist/esm/services/KafkaService.d.ts.map +0 -1
  337. package/dist/esm/services/KafkaService.js +0 -123
  338. package/dist/esm/services/KafkaService.js.map +0 -1
@@ -0,0 +1,803 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const vitest_1 = require("vitest");
4
+ const ChatProcessor_1 = require("./ChatProcessor.cjs");
5
+ const ai_agent_types_1 = require("@multiplayer-app/ai-agent-types");
6
+ const ConfigStore_1 = require("../store/ConfigStore.cjs");
7
+ const ModelStore_1 = require("../store/ModelStore.cjs");
8
+ const config_1 = require("../config.cjs");
9
+ const s3_1 = require("../libs/s3/index.cjs");
10
+ const zod_1 = require("zod");
11
+ (0, vitest_1.describe)('ChatProcessor.streamMessage', () => {
12
+ let chatProcessor;
13
+ let mockChatRepository;
14
+ let mockMessageRepository;
15
+ let mockAgentConfigRepository;
16
+ let mockArtifactStore;
17
+ let mockAgentStore;
18
+ let mockSocketService;
19
+ let mockActivityRepository;
20
+ let configStore;
21
+ let capturedOptions;
22
+ const userId = 'test-user-id';
23
+ (0, vitest_1.beforeEach)(() => {
24
+ vitest_1.vi.clearAllMocks();
25
+ capturedOptions = undefined;
26
+ ModelStore_1.ModelStore.getInstance().setModels([
27
+ { id: 'openai/gpt-4o', provider: 'openai', label: 'GPT-4o' }
28
+ ]);
29
+ // Mock repositories
30
+ mockChatRepository = {
31
+ findById: vitest_1.vi.fn(),
32
+ find: vitest_1.vi.fn().mockResolvedValue([]),
33
+ create: vitest_1.vi.fn(),
34
+ update: vitest_1.vi.fn(),
35
+ delete: vitest_1.vi.fn(),
36
+ findWithMessages: vitest_1.vi.fn(),
37
+ };
38
+ mockMessageRepository = {
39
+ findByChatId: vitest_1.vi.fn().mockResolvedValue([]),
40
+ findByChatIdPaginated: vitest_1.vi.fn().mockResolvedValue({ messages: [], hasMore: false }),
41
+ findById: vitest_1.vi.fn(),
42
+ create: vitest_1.vi.fn(),
43
+ deleteByChatId: vitest_1.vi.fn(),
44
+ update: vitest_1.vi.fn().mockImplementation(async (id, updates) => ({
45
+ id,
46
+ chat: 'test-chat-id',
47
+ role: ai_agent_types_1.MessageRole.Assistant,
48
+ content: '',
49
+ createdAt: new Date().toISOString(),
50
+ ...updates
51
+ })),
52
+ };
53
+ mockAgentConfigRepository = {
54
+ findByUserIdAndAgentName: vitest_1.vi.fn().mockResolvedValue(null),
55
+ };
56
+ // Mock artifact store
57
+ mockArtifactStore = {
58
+ listArtifacts: vitest_1.vi.fn().mockReturnValue([]),
59
+ deleteArtifacts: vitest_1.vi.fn(),
60
+ };
61
+ // Mock agent store
62
+ mockAgentStore = {
63
+ registerAgentProcess: vitest_1.vi.fn().mockReturnValue({
64
+ signal: new AbortController().signal,
65
+ }),
66
+ shareAgentProcessEvent: vitest_1.vi.fn(),
67
+ addListener: vitest_1.vi.fn(),
68
+ removeListener: vitest_1.vi.fn(),
69
+ };
70
+ // Mock socket service
71
+ mockSocketService = {
72
+ emitMessageUpdate: vitest_1.vi.fn(),
73
+ emitChatUpdate: vitest_1.vi.fn(),
74
+ };
75
+ // Setup config store with agent config
76
+ configStore = ConfigStore_1.ConfigStore.getInstance();
77
+ configStore.clear();
78
+ const agentConfig = {
79
+ name: 'test-agent',
80
+ description: 'Test agent for property verification',
81
+ defaultModel: 'openai/gpt-4o',
82
+ systemPrompt: 'You are a helpful assistant',
83
+ temperature: 0.8,
84
+ maxOutputTokens: 3000,
85
+ topP: 0.95,
86
+ topK: 50,
87
+ presencePenalty: 0.6,
88
+ frequencyPenalty: 0.4,
89
+ stopSequences: ['\n\n', '---', 'END'],
90
+ seed: 42,
91
+ tools: [],
92
+ toolChoice: 'auto',
93
+ };
94
+ // Use addAgent to bypass ConfigHelper conversion
95
+ configStore.addAgent(['test-context'], agentConfig);
96
+ const config = config_1.ConfigProvider.getInstance().getConfig();
97
+ const s3Lib = new s3_1.S3Lib(config.s3);
98
+ mockActivityRepository = {
99
+ create: vitest_1.vi.fn().mockResolvedValue({
100
+ id: 'activity-1',
101
+ ownerId: 'test-chat-id',
102
+ groupId: 'test-chat-id',
103
+ name: 'Message processing',
104
+ tenants: { userId: 'test-user-id' },
105
+ sourceId: 'user-msg-1',
106
+ sourceType: 'AgentMessage',
107
+ metadata: {}
108
+ }),
109
+ update: vitest_1.vi.fn().mockResolvedValue({
110
+ id: 'activity-1',
111
+ ownerId: 'test-chat-id',
112
+ groupId: 'test-chat-id',
113
+ name: 'Message processing',
114
+ tenants: { userId: 'test-user-id' },
115
+ sourceId: 'user-msg-1',
116
+ sourceType: 'AgentMessage',
117
+ metadata: {}
118
+ }),
119
+ deleteByGroupId: vitest_1.vi.fn().mockResolvedValue(1),
120
+ getGroupedMetadataByParentId: vitest_1.vi.fn().mockResolvedValue({}),
121
+ updateMetadata: vitest_1.vi.fn().mockResolvedValue({
122
+ id: 'activity-1',
123
+ metadata: {}
124
+ }),
125
+ };
126
+ // Create ChatProcessor
127
+ chatProcessor = new ChatProcessor_1.ChatProcessor({
128
+ chatRepository: mockChatRepository,
129
+ messageRepository: mockMessageRepository,
130
+ agentConfigRepository: mockAgentConfigRepository,
131
+ artifactStore: mockArtifactStore,
132
+ s3Lib,
133
+ config,
134
+ socketService: mockSocketService,
135
+ agentStore: mockAgentStore,
136
+ activityRepository: mockActivityRepository
137
+ });
138
+ });
139
+ (0, vitest_1.it)('should delete chat, messages, activities, and artifacts', async () => {
140
+ mockChatRepository.delete.mockResolvedValue(true);
141
+ await chatProcessor.deleteChat('chat-1');
142
+ (0, vitest_1.expect)(mockChatRepository.delete).toHaveBeenCalledWith('chat-1');
143
+ (0, vitest_1.expect)(mockMessageRepository.deleteByChatId).toHaveBeenCalledWith('chat-1');
144
+ (0, vitest_1.expect)(mockActivityRepository.deleteByGroupId).toHaveBeenCalledWith('chat-1');
145
+ (0, vitest_1.expect)(mockArtifactStore.deleteArtifacts).toHaveBeenCalledWith('chat-1');
146
+ });
147
+ (0, vitest_1.it)('should throw when chat does not exist and skip cleanup', async () => {
148
+ mockChatRepository.delete.mockResolvedValue(false);
149
+ await (0, vitest_1.expect)(chatProcessor.deleteChat('missing-chat')).rejects.toThrow('Chat not found');
150
+ (0, vitest_1.expect)(mockMessageRepository.deleteByChatId).not.toHaveBeenCalled();
151
+ (0, vitest_1.expect)(mockActivityRepository.deleteByGroupId).not.toHaveBeenCalled();
152
+ (0, vitest_1.expect)(mockArtifactStore.deleteArtifacts).not.toHaveBeenCalled();
153
+ });
154
+ (0, vitest_1.it)('should cascade delete subagent descendants (single level)', async () => {
155
+ mockChatRepository.delete.mockResolvedValue(true);
156
+ mockChatRepository.find.mockImplementation(async (filter) => {
157
+ if (filter?.parentChatId === 'chat-1') {
158
+ return [
159
+ { id: 'sub-a', parentChatId: 'chat-1' },
160
+ { id: 'sub-b', parentChatId: 'chat-1' },
161
+ ];
162
+ }
163
+ return [];
164
+ });
165
+ await chatProcessor.deleteChat('chat-1');
166
+ (0, vitest_1.expect)(mockChatRepository.delete).toHaveBeenCalledWith('chat-1');
167
+ (0, vitest_1.expect)(mockChatRepository.delete).toHaveBeenCalledWith('sub-a');
168
+ (0, vitest_1.expect)(mockChatRepository.delete).toHaveBeenCalledWith('sub-b');
169
+ for (const id of ['chat-1', 'sub-a', 'sub-b']) {
170
+ (0, vitest_1.expect)(mockMessageRepository.deleteByChatId).toHaveBeenCalledWith(id);
171
+ (0, vitest_1.expect)(mockActivityRepository.deleteByGroupId).toHaveBeenCalledWith(id);
172
+ (0, vitest_1.expect)(mockArtifactStore.deleteArtifacts).toHaveBeenCalledWith(id);
173
+ }
174
+ });
175
+ (0, vitest_1.it)('should cascade delete nested subagent descendants', async () => {
176
+ mockChatRepository.delete.mockResolvedValue(true);
177
+ const tree = {
178
+ 'chat-1': [{ id: 'sub-a' }, { id: 'sub-b' }],
179
+ 'sub-a': [{ id: 'sub-a-1' }],
180
+ 'sub-a-1': [{ id: 'sub-a-1-x' }],
181
+ 'sub-b': [],
182
+ 'sub-a-1-x': [],
183
+ };
184
+ mockChatRepository.find.mockImplementation(async (filter) => tree[filter?.parentChatId ?? ''] ?? []);
185
+ await chatProcessor.deleteChat('chat-1');
186
+ const expectedIds = ['chat-1', 'sub-a', 'sub-b', 'sub-a-1', 'sub-a-1-x'];
187
+ for (const id of expectedIds) {
188
+ (0, vitest_1.expect)(mockChatRepository.delete).toHaveBeenCalledWith(id);
189
+ (0, vitest_1.expect)(mockMessageRepository.deleteByChatId).toHaveBeenCalledWith(id);
190
+ (0, vitest_1.expect)(mockActivityRepository.deleteByGroupId).toHaveBeenCalledWith(id);
191
+ (0, vitest_1.expect)(mockArtifactStore.deleteArtifacts).toHaveBeenCalledWith(id);
192
+ }
193
+ });
194
+ (0, vitest_1.it)('should pass all agent properties correctly to streamAssistantResponse', async () => {
195
+ const chat = {
196
+ id: 'test-chat-id',
197
+ tenants: { userId },
198
+ contextKey: 'test-context',
199
+ type: ai_agent_types_1.ChatType.Chat,
200
+ status: ai_agent_types_1.AgentStatus.Processing,
201
+ createdAt: new Date().toISOString(),
202
+ updatedAt: new Date().toISOString(),
203
+ };
204
+ const payload = {
205
+ chatId: chat.id,
206
+ content: 'Hello, test message',
207
+ contextKey: 'test-context',
208
+ };
209
+ // Mock chat repository
210
+ mockChatRepository.findById.mockResolvedValue(chat);
211
+ // Mock message creation
212
+ const userMessage = {
213
+ id: 'user-msg-1',
214
+ chat: chat.id,
215
+ role: ai_agent_types_1.MessageRole.User,
216
+ content: payload.content,
217
+ createdAt: new Date().toISOString(),
218
+ };
219
+ const assistantMessage = {
220
+ id: 'assistant-msg-1',
221
+ chat: chat.id,
222
+ role: ai_agent_types_1.MessageRole.Assistant,
223
+ content: '',
224
+ createdAt: new Date().toISOString(),
225
+ agentName: 'test-agent',
226
+ };
227
+ mockMessageRepository.create
228
+ .mockResolvedValueOnce(userMessage)
229
+ .mockResolvedValueOnce(assistantMessage);
230
+ // Mock stream to prevent actual API calls
231
+ const mockStream = {
232
+ fullStream: (async function* () {
233
+ yield { type: 'finish', finishReason: 'stop', text: 'Test response' };
234
+ })(),
235
+ };
236
+ // Capture options passed to streamAssistantResponse
237
+ const aiHelper = chatProcessor.aiHelper;
238
+ vitest_1.vi.spyOn(aiHelper, 'streamAssistantResponse').mockImplementation(async (messages, signal, options) => {
239
+ capturedOptions = options;
240
+ return mockStream;
241
+ });
242
+ // Call streamMessage
243
+ await chatProcessor.streamMessage(chat, payload);
244
+ // Verify options were captured
245
+ (0, vitest_1.expect)(capturedOptions).toBeDefined();
246
+ // Verify all agent properties are present in the options
247
+ if (capturedOptions) {
248
+ (0, vitest_1.expect)(capturedOptions).toHaveProperty('name', 'test-agent');
249
+ (0, vitest_1.expect)(capturedOptions).toHaveProperty('system', 'You are a helpful assistant');
250
+ (0, vitest_1.expect)(capturedOptions).toHaveProperty('temperature', 0.8);
251
+ (0, vitest_1.expect)(capturedOptions).toHaveProperty('maxOutputTokens', 3000);
252
+ (0, vitest_1.expect)(capturedOptions).toHaveProperty('topP', 0.95);
253
+ (0, vitest_1.expect)(capturedOptions).toHaveProperty('topK', 50);
254
+ (0, vitest_1.expect)(capturedOptions).toHaveProperty('presencePenalty', 0.6);
255
+ (0, vitest_1.expect)(capturedOptions).toHaveProperty('frequencyPenalty', 0.4);
256
+ (0, vitest_1.expect)(capturedOptions).toHaveProperty('stopSequences', ['\n\n', '---', 'END']);
257
+ (0, vitest_1.expect)(capturedOptions).toHaveProperty('seed', 42);
258
+ (0, vitest_1.expect)(capturedOptions).toHaveProperty('toolChoice', 'auto');
259
+ (0, vitest_1.expect)(capturedOptions).toHaveProperty('tools');
260
+ }
261
+ });
262
+ (0, vitest_1.it)('should handle optional agent properties when not provided', async () => {
263
+ configStore.clear();
264
+ const minimalAgentConfig = {
265
+ name: 'minimal-agent',
266
+ description: 'Minimal agent config',
267
+ systemPrompt: 'You are helpful',
268
+ tools: [],
269
+ };
270
+ configStore.addAgent(['test-context'], minimalAgentConfig);
271
+ const chat = {
272
+ id: 'test-chat-id-2',
273
+ tenants: { userId },
274
+ contextKey: 'test-context',
275
+ type: ai_agent_types_1.ChatType.Chat,
276
+ status: ai_agent_types_1.AgentStatus.Processing,
277
+ createdAt: new Date().toISOString(),
278
+ updatedAt: new Date().toISOString(),
279
+ };
280
+ const payload = {
281
+ chatId: chat.id,
282
+ content: 'Test',
283
+ contextKey: 'test-context',
284
+ };
285
+ mockChatRepository.findById.mockResolvedValue(chat);
286
+ const userMessage = {
287
+ id: 'user-msg-2',
288
+ chat: chat.id,
289
+ role: ai_agent_types_1.MessageRole.User,
290
+ content: payload.content,
291
+ createdAt: new Date().toISOString(),
292
+ };
293
+ const assistantMessage = {
294
+ id: 'assistant-msg-2',
295
+ chat: chat.id,
296
+ role: ai_agent_types_1.MessageRole.Assistant,
297
+ content: '',
298
+ createdAt: new Date().toISOString(),
299
+ agentName: 'minimal-agent',
300
+ };
301
+ mockMessageRepository.create
302
+ .mockResolvedValueOnce(userMessage)
303
+ .mockResolvedValueOnce(assistantMessage);
304
+ const mockStream = {
305
+ fullStream: (async function* () {
306
+ yield { type: 'finish', finishReason: 'stop', text: 'Response' };
307
+ })(),
308
+ };
309
+ const aiHelper = chatProcessor.aiHelper;
310
+ vitest_1.vi.spyOn(aiHelper, 'streamAssistantResponse').mockImplementation(async (messages, signal, options) => {
311
+ capturedOptions = options;
312
+ return mockStream;
313
+ });
314
+ await chatProcessor.streamMessage(chat, payload);
315
+ // Verify required properties are present
316
+ (0, vitest_1.expect)(capturedOptions).toBeDefined();
317
+ if (capturedOptions) {
318
+ (0, vitest_1.expect)(capturedOptions).toHaveProperty('name', 'minimal-agent');
319
+ (0, vitest_1.expect)(capturedOptions).toHaveProperty('system', 'You are helpful');
320
+ (0, vitest_1.expect)(capturedOptions).toHaveProperty('tools');
321
+ }
322
+ });
323
+ (0, vitest_1.it)('should pass stopWhen condition when provided', async () => {
324
+ configStore.clear();
325
+ const stopWhenFn = vitest_1.vi.fn(() => false);
326
+ const agentConfigWithStopWhen = {
327
+ name: 'agent-with-stopwhen',
328
+ description: 'Agent with stopWhen',
329
+ systemPrompt: 'You are helpful',
330
+ tools: [],
331
+ stopWhen: stopWhenFn,
332
+ };
333
+ configStore.addAgent(['test-context'], agentConfigWithStopWhen);
334
+ const chat = {
335
+ id: 'test-chat-id-3',
336
+ tenants: { userId },
337
+ contextKey: 'test-context',
338
+ type: ai_agent_types_1.ChatType.Chat,
339
+ status: ai_agent_types_1.AgentStatus.Processing,
340
+ createdAt: new Date().toISOString(),
341
+ updatedAt: new Date().toISOString(),
342
+ };
343
+ const payload = {
344
+ chatId: chat.id,
345
+ content: 'Test',
346
+ contextKey: 'test-context',
347
+ };
348
+ mockChatRepository.findById.mockResolvedValue(chat);
349
+ const userMessage = {
350
+ id: 'user-msg-3',
351
+ chat: chat.id,
352
+ role: ai_agent_types_1.MessageRole.User,
353
+ content: payload.content,
354
+ createdAt: new Date().toISOString(),
355
+ };
356
+ const assistantMessage = {
357
+ id: 'assistant-msg-3',
358
+ chat: chat.id,
359
+ role: ai_agent_types_1.MessageRole.Assistant,
360
+ content: '',
361
+ createdAt: new Date().toISOString(),
362
+ agentName: 'agent-with-stopwhen',
363
+ };
364
+ mockMessageRepository.create
365
+ .mockResolvedValueOnce(userMessage)
366
+ .mockResolvedValueOnce(assistantMessage);
367
+ const mockStream = {
368
+ fullStream: (async function* () {
369
+ yield { type: 'finish', finishReason: 'stop', text: 'Response' };
370
+ })(),
371
+ };
372
+ const aiHelper = chatProcessor.aiHelper;
373
+ vitest_1.vi.spyOn(aiHelper, 'streamAssistantResponse').mockImplementation(async (messages, signal, options) => {
374
+ capturedOptions = options;
375
+ return mockStream;
376
+ });
377
+ await chatProcessor.streamMessage(chat, payload);
378
+ // Verify stopWhen is passed
379
+ (0, vitest_1.expect)(capturedOptions).toBeDefined();
380
+ if (capturedOptions) {
381
+ (0, vitest_1.expect)(capturedOptions).toHaveProperty('stopWhen', stopWhenFn);
382
+ }
383
+ });
384
+ (0, vitest_1.it)('should merge only cost-related provider usage into stored activity metadata', async () => {
385
+ const chat = {
386
+ id: 'test-chat-id-usage',
387
+ tenants: { userId },
388
+ contextKey: 'test-context',
389
+ type: ai_agent_types_1.ChatType.Chat,
390
+ status: ai_agent_types_1.AgentStatus.Processing,
391
+ createdAt: new Date().toISOString(),
392
+ updatedAt: new Date().toISOString(),
393
+ };
394
+ await chatProcessor.storeStepActivity({
395
+ chat,
396
+ stepResult: {
397
+ finishReason: 'stop',
398
+ usage: {
399
+ inputTokens: 205,
400
+ outputTokens: 3,
401
+ totalTokens: 209,
402
+ inputTokenDetails: { cacheReadTokens: 0 },
403
+ },
404
+ response: {
405
+ timestamp: new Date().toISOString(),
406
+ modelId: 'openai/gpt-4o',
407
+ },
408
+ providerMetadata: {
409
+ openrouter: {
410
+ provider: 'OpenAI',
411
+ usage: {
412
+ promptTokens: 205,
413
+ promptTokensDetails: { cachedTokens: 0 },
414
+ completionTokens: 3,
415
+ totalTokens: 208,
416
+ cost: 0.0005425,
417
+ costDetails: {
418
+ upstreamInferenceCost: 0.0005425,
419
+ },
420
+ },
421
+ },
422
+ },
423
+ },
424
+ name: 'titleGeneration',
425
+ sourceId: chat.id,
426
+ sourceType: 'Chat',
427
+ });
428
+ (0, vitest_1.expect)(mockActivityRepository.create).toHaveBeenCalledTimes(1);
429
+ const [activityPayload] = mockActivityRepository.create.mock.calls[0];
430
+ (0, vitest_1.expect)(activityPayload.metadata.usage).toMatchObject({
431
+ inputTokens: 205,
432
+ outputTokens: 3,
433
+ totalTokens: 209,
434
+ inputTokenDetails: { cacheReadTokens: 0 },
435
+ cost: 0.0005425,
436
+ costDetails: { upstreamInferenceCost: 0.0005425 },
437
+ });
438
+ (0, vitest_1.expect)(activityPayload.metadata.usage.promptTokens).toBeUndefined();
439
+ (0, vitest_1.expect)(activityPayload.metadata.usage.completionTokens).toBeUndefined();
440
+ (0, vitest_1.expect)(activityPayload.metadata.usage.promptTokensDetails).toBeUndefined();
441
+ });
442
+ });
443
+ (0, vitest_1.describe)('ChatProcessor.getMessages', () => {
444
+ let chatProcessor;
445
+ let mockChatRepository;
446
+ let mockMessageRepository;
447
+ let mockAgentConfigRepository;
448
+ let mockActivityRepository;
449
+ (0, vitest_1.beforeEach)(() => {
450
+ vitest_1.vi.clearAllMocks();
451
+ mockChatRepository = { findById: vitest_1.vi.fn() };
452
+ mockMessageRepository = {
453
+ findByChatIdPaginated: vitest_1.vi.fn().mockResolvedValue({ messages: [], hasMore: false }),
454
+ };
455
+ mockAgentConfigRepository = {
456
+ findByUserIdAndAgentName: vitest_1.vi.fn().mockResolvedValue(null),
457
+ };
458
+ mockActivityRepository = {
459
+ create: vitest_1.vi.fn(),
460
+ update: vitest_1.vi.fn(),
461
+ deleteByGroupId: vitest_1.vi.fn(),
462
+ };
463
+ const config = config_1.ConfigProvider.getInstance().getConfig();
464
+ const s3Lib = new s3_1.S3Lib(config.s3);
465
+ chatProcessor = new ChatProcessor_1.ChatProcessor({
466
+ chatRepository: mockChatRepository,
467
+ messageRepository: mockMessageRepository,
468
+ agentConfigRepository: mockAgentConfigRepository,
469
+ artifactStore: { listArtifacts: vitest_1.vi.fn().mockReturnValue([]), deleteArtifacts: vitest_1.vi.fn() },
470
+ s3Lib,
471
+ config,
472
+ socketService: { emitMessageUpdate: vitest_1.vi.fn(), emitChatUpdate: vitest_1.vi.fn() },
473
+ agentStore: {
474
+ registerAgentProcess: vitest_1.vi.fn().mockReturnValue({ signal: new AbortController().signal }),
475
+ shareAgentProcessEvent: vitest_1.vi.fn(),
476
+ addListener: vitest_1.vi.fn(),
477
+ removeListener: vitest_1.vi.fn(),
478
+ },
479
+ activityRepository: mockActivityRepository,
480
+ });
481
+ const aiHelper = chatProcessor.aiHelper;
482
+ vitest_1.vi.spyOn(aiHelper, 'getAgentOptions').mockResolvedValue({
483
+ name: 'test-agent',
484
+ tools: {
485
+ test_tool: {
486
+ inputSchema: zod_1.z.object({
487
+ foo: zod_1.z.any().optional(),
488
+ count: zod_1.z.any().optional(),
489
+ x: zod_1.z.any().optional(),
490
+ }),
491
+ },
492
+ },
493
+ });
494
+ });
495
+ (0, vitest_1.it)('returns messages page when chat exists', async () => {
496
+ const chatId = 'chat-1';
497
+ const messages = [
498
+ {
499
+ id: 'm1',
500
+ chat: chatId,
501
+ role: ai_agent_types_1.MessageRole.User,
502
+ content: 'Hi',
503
+ createdAt: new Date().toISOString(),
504
+ },
505
+ ];
506
+ mockChatRepository.findById.mockResolvedValue({ id: chatId });
507
+ mockMessageRepository.findByChatIdPaginated.mockResolvedValue({
508
+ messages,
509
+ hasMore: true,
510
+ });
511
+ const result = await chatProcessor.getMessages(chatId, { limit: 30 });
512
+ (0, vitest_1.expect)(result).toEqual({ messages, hasMore: true });
513
+ (0, vitest_1.expect)(mockMessageRepository.findByChatIdPaginated).toHaveBeenCalledWith(chatId, {
514
+ limit: 30,
515
+ before: undefined,
516
+ });
517
+ });
518
+ (0, vitest_1.it)('throws when chat not found', async () => {
519
+ mockChatRepository.findById.mockResolvedValue(null);
520
+ await (0, vitest_1.expect)(chatProcessor.getMessages('missing-chat')).rejects.toThrow('Chat not found');
521
+ (0, vitest_1.expect)(mockMessageRepository.findByChatIdPaginated).not.toHaveBeenCalled();
522
+ });
523
+ });
524
+ (0, vitest_1.describe)('ChatProcessor.updateToolCall', () => {
525
+ let chatProcessor;
526
+ let mockChatRepository;
527
+ let mockMessageRepository;
528
+ let mockAgentConfigRepository;
529
+ let mockActivityRepository;
530
+ let mockSocketService;
531
+ (0, vitest_1.beforeEach)(() => {
532
+ vitest_1.vi.clearAllMocks();
533
+ mockChatRepository = {
534
+ findById: vitest_1.vi.fn(),
535
+ update: vitest_1.vi.fn(),
536
+ };
537
+ mockMessageRepository = {
538
+ findById: vitest_1.vi.fn(),
539
+ updateToolCall: vitest_1.vi.fn(),
540
+ };
541
+ mockAgentConfigRepository = {
542
+ findByUserIdAndAgentName: vitest_1.vi.fn().mockResolvedValue(null),
543
+ };
544
+ mockActivityRepository = {
545
+ create: vitest_1.vi.fn(),
546
+ update: vitest_1.vi.fn(),
547
+ deleteByGroupId: vitest_1.vi.fn(),
548
+ };
549
+ mockSocketService = {
550
+ emitMessageUpdate: vitest_1.vi.fn(),
551
+ emitChatUpdate: vitest_1.vi.fn(),
552
+ };
553
+ const config = config_1.ConfigProvider.getInstance().getConfig();
554
+ const s3Lib = new s3_1.S3Lib(config.s3);
555
+ chatProcessor = new ChatProcessor_1.ChatProcessor({
556
+ chatRepository: mockChatRepository,
557
+ messageRepository: mockMessageRepository,
558
+ agentConfigRepository: mockAgentConfigRepository,
559
+ artifactStore: { listArtifacts: vitest_1.vi.fn().mockReturnValue([]), deleteArtifacts: vitest_1.vi.fn() },
560
+ s3Lib,
561
+ config,
562
+ socketService: mockSocketService,
563
+ agentStore: {
564
+ registerAgentProcess: vitest_1.vi.fn().mockReturnValue({ signal: new AbortController().signal }),
565
+ shareAgentProcessEvent: vitest_1.vi.fn(),
566
+ addListener: vitest_1.vi.fn(),
567
+ removeListener: vitest_1.vi.fn(),
568
+ },
569
+ activityRepository: mockActivityRepository,
570
+ });
571
+ });
572
+ (0, vitest_1.it)('updates targeted tool call input and emits update', async () => {
573
+ const chatId = 'chat-1';
574
+ const messageId = 'message-1';
575
+ const toolCallId = 'tool-call-1';
576
+ const userId = 'user-1';
577
+ const updatedInput = { foo: 'bar', count: 1 };
578
+ const now = new Date().toISOString();
579
+ mockChatRepository.findById.mockResolvedValue({
580
+ id: chatId,
581
+ tenants: { userId },
582
+ });
583
+ mockMessageRepository.findById.mockResolvedValue({
584
+ id: messageId,
585
+ chat: chatId,
586
+ role: ai_agent_types_1.MessageRole.Assistant,
587
+ content: '',
588
+ createdAt: now,
589
+ toolCalls: [
590
+ {
591
+ id: toolCallId,
592
+ name: 'test_tool',
593
+ input: { foo: 'old' },
594
+ status: ai_agent_types_1.AgentToolCallStatus.Pending,
595
+ },
596
+ ],
597
+ });
598
+ mockMessageRepository.updateToolCall.mockResolvedValue({
599
+ id: messageId,
600
+ chat: chatId,
601
+ role: ai_agent_types_1.MessageRole.Assistant,
602
+ content: '',
603
+ createdAt: now,
604
+ toolCalls: [
605
+ {
606
+ id: toolCallId,
607
+ name: 'test_tool',
608
+ input: updatedInput,
609
+ status: ai_agent_types_1.AgentToolCallStatus.Pending,
610
+ },
611
+ ],
612
+ });
613
+ const aiHelper = chatProcessor.aiHelper;
614
+ vitest_1.vi.spyOn(aiHelper, 'getAgentOptions').mockResolvedValue({
615
+ name: 'test-agent',
616
+ tools: {
617
+ test_tool: {
618
+ inputSchema: zod_1.z.object({
619
+ foo: zod_1.z.any().optional(),
620
+ count: zod_1.z.any().optional(),
621
+ }),
622
+ },
623
+ },
624
+ });
625
+ const result = await chatProcessor.updateToolCall({
626
+ chatId,
627
+ messageId,
628
+ toolCallId,
629
+ input: updatedInput,
630
+ excludeSocketId: 'socket-1',
631
+ });
632
+ (0, vitest_1.expect)(mockMessageRepository.updateToolCall).toHaveBeenCalledWith(messageId, toolCallId, {
633
+ input: updatedInput,
634
+ });
635
+ (0, vitest_1.expect)(mockChatRepository.update).toHaveBeenCalledWith(chatId, vitest_1.expect.objectContaining({ updatedAt: vitest_1.expect.any(String) }));
636
+ (0, vitest_1.expect)(mockSocketService.emitMessageUpdate).toHaveBeenCalledWith(userId, result, 'socket-1');
637
+ (0, vitest_1.expect)(result.toolCalls?.[0].input).toEqual(updatedInput);
638
+ });
639
+ (0, vitest_1.it)('updates targeted tool call output and status', async () => {
640
+ const chatId = 'chat-1';
641
+ const messageId = 'message-1';
642
+ const toolCallId = 'tool-call-1';
643
+ const userId = 'user-1';
644
+ const now = new Date().toISOString();
645
+ mockChatRepository.findById.mockResolvedValue({
646
+ id: chatId,
647
+ tenants: { userId },
648
+ });
649
+ mockMessageRepository.findById.mockResolvedValue({
650
+ id: messageId,
651
+ chat: chatId,
652
+ role: ai_agent_types_1.MessageRole.Assistant,
653
+ content: '',
654
+ createdAt: now,
655
+ toolCalls: [
656
+ {
657
+ id: toolCallId,
658
+ name: 'test_tool',
659
+ input: { foo: 'old' },
660
+ status: ai_agent_types_1.AgentToolCallStatus.Running,
661
+ },
662
+ ],
663
+ });
664
+ mockMessageRepository.updateToolCall.mockResolvedValue({
665
+ id: messageId,
666
+ chat: chatId,
667
+ role: ai_agent_types_1.MessageRole.Assistant,
668
+ content: '',
669
+ createdAt: now,
670
+ toolCalls: [
671
+ {
672
+ id: toolCallId,
673
+ name: 'test_tool',
674
+ input: { foo: 'old' },
675
+ output: { result: 'ok' },
676
+ status: ai_agent_types_1.AgentToolCallStatus.Succeeded,
677
+ },
678
+ ],
679
+ });
680
+ const result = await chatProcessor.updateToolCall({
681
+ chatId,
682
+ messageId,
683
+ toolCallId,
684
+ output: { result: 'ok' },
685
+ status: ai_agent_types_1.AgentToolCallStatus.Succeeded,
686
+ excludeSocketId: 'socket-1',
687
+ });
688
+ (0, vitest_1.expect)(mockMessageRepository.updateToolCall).toHaveBeenCalledWith(messageId, toolCallId, {
689
+ output: { result: 'ok' },
690
+ status: ai_agent_types_1.AgentToolCallStatus.Succeeded,
691
+ });
692
+ (0, vitest_1.expect)(mockChatRepository.update).toHaveBeenCalledWith(chatId, vitest_1.expect.objectContaining({ updatedAt: vitest_1.expect.any(String) }));
693
+ (0, vitest_1.expect)(mockSocketService.emitMessageUpdate).toHaveBeenCalledWith(userId, result, 'socket-1');
694
+ (0, vitest_1.expect)(result.toolCalls?.[0].status).toBe(ai_agent_types_1.AgentToolCallStatus.Succeeded);
695
+ (0, vitest_1.expect)(result.toolCalls?.[0].output).toEqual({ result: 'ok' });
696
+ });
697
+ (0, vitest_1.it)('throws when message is not in chat', async () => {
698
+ mockChatRepository.findById.mockResolvedValue({ id: 'chat-1', tenants: { userId: 'user-1' } });
699
+ mockMessageRepository.findById.mockResolvedValue({
700
+ id: 'message-1',
701
+ chat: 'other-chat',
702
+ role: ai_agent_types_1.MessageRole.Assistant,
703
+ content: '',
704
+ createdAt: new Date().toISOString(),
705
+ toolCalls: [],
706
+ });
707
+ await (0, vitest_1.expect)(chatProcessor.updateToolCall({
708
+ chatId: 'chat-1',
709
+ messageId: 'message-1',
710
+ toolCallId: 'tool-call-1',
711
+ input: { x: 1 },
712
+ })).rejects.toThrow('Message not found or does not belong to this chat');
713
+ (0, vitest_1.expect)(mockMessageRepository.updateToolCall).not.toHaveBeenCalled();
714
+ });
715
+ (0, vitest_1.it)('throws when chat does not belong to user', async () => {
716
+ mockChatRepository.findById.mockResolvedValue({ id: 'chat-1', tenants: { userId: 'owner-1' } });
717
+ await (0, vitest_1.expect)(chatProcessor.updateToolCall({
718
+ chatId: 'chat-1',
719
+ messageId: 'message-1',
720
+ toolCallId: 'tool-call-1',
721
+ userId: 'other-user',
722
+ input: { x: 1 },
723
+ })).rejects.toThrow('Chat does not belong to this user');
724
+ (0, vitest_1.expect)(mockMessageRepository.findById).not.toHaveBeenCalled();
725
+ (0, vitest_1.expect)(mockMessageRepository.updateToolCall).not.toHaveBeenCalled();
726
+ });
727
+ (0, vitest_1.it)('throws when tool call does not exist in message', async () => {
728
+ mockChatRepository.findById.mockResolvedValue({ id: 'chat-1', tenants: { userId: 'user-1' } });
729
+ mockMessageRepository.findById.mockResolvedValue({
730
+ id: 'message-1',
731
+ chat: 'chat-1',
732
+ role: ai_agent_types_1.MessageRole.Assistant,
733
+ content: '',
734
+ createdAt: new Date().toISOString(),
735
+ toolCalls: [
736
+ {
737
+ id: 'other-tool-call',
738
+ name: 'test_tool',
739
+ input: {},
740
+ status: ai_agent_types_1.AgentToolCallStatus.Pending,
741
+ },
742
+ ],
743
+ });
744
+ await (0, vitest_1.expect)(chatProcessor.updateToolCall({
745
+ chatId: 'chat-1',
746
+ messageId: 'message-1',
747
+ toolCallId: 'tool-call-1',
748
+ input: { x: 1 },
749
+ })).rejects.toThrow('Tool call not found in message');
750
+ (0, vitest_1.expect)(mockMessageRepository.updateToolCall).not.toHaveBeenCalled();
751
+ });
752
+ (0, vitest_1.it)('throws when no tool call fields are provided', async () => {
753
+ await (0, vitest_1.expect)(chatProcessor.updateToolCall({
754
+ chatId: 'chat-1',
755
+ messageId: 'message-1',
756
+ toolCallId: 'tool-call-1',
757
+ })).rejects.toThrow('At least one of input, output, or status must be provided');
758
+ });
759
+ (0, vitest_1.it)('throws when input does not match tool schema', async () => {
760
+ const chatId = 'chat-1';
761
+ const messageId = 'message-1';
762
+ const toolCallId = 'tool-call-1';
763
+ mockChatRepository.findById.mockResolvedValue({
764
+ id: chatId,
765
+ tenants: { userId: 'user-1' },
766
+ });
767
+ mockMessageRepository.findById.mockResolvedValue({
768
+ id: messageId,
769
+ chat: chatId,
770
+ role: ai_agent_types_1.MessageRole.Assistant,
771
+ content: '',
772
+ createdAt: new Date().toISOString(),
773
+ toolCalls: [
774
+ {
775
+ id: toolCallId,
776
+ name: 'test_tool',
777
+ input: {},
778
+ status: ai_agent_types_1.AgentToolCallStatus.Pending,
779
+ },
780
+ ],
781
+ agentName: 'test-agent',
782
+ });
783
+ const aiHelper = chatProcessor.aiHelper;
784
+ vitest_1.vi.spyOn(aiHelper, 'getAgentOptions').mockResolvedValue({
785
+ name: 'test-agent',
786
+ tools: {
787
+ test_tool: {
788
+ inputSchema: zod_1.z.object({
789
+ x: zod_1.z.number(),
790
+ }),
791
+ },
792
+ },
793
+ });
794
+ await (0, vitest_1.expect)(chatProcessor.updateToolCall({
795
+ chatId,
796
+ messageId,
797
+ toolCallId,
798
+ input: { x: 'invalid' },
799
+ })).rejects.toThrow('Invalid tool input for "test_tool"');
800
+ (0, vitest_1.expect)(mockMessageRepository.updateToolCall).not.toHaveBeenCalled();
801
+ });
802
+ });
803
+ //# sourceMappingURL=ChatProcessor.test.js.map