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

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
package/README.md CHANGED
@@ -419,7 +419,7 @@ const stream = await chatProcessor.createMessageStream({
419
419
  messageId: 'message-id',
420
420
  approvalId: 'approval-id',
421
421
  approved: true,
422
- reason: 'User approved'
422
+ userResponse: 'User approved'
423
423
  });
424
424
 
425
425
  // Or use streamMessage directly if you already have the chat object
@@ -429,7 +429,7 @@ await chatProcessor.streamMessage(chat, {
429
429
  messageId: 'message-id',
430
430
  approvalId: 'approval-id',
431
431
  approved: true,
432
- reason: 'User approved'
432
+ userResponse: 'User approved'
433
433
  });
434
434
  ```
435
435
 
@@ -1,47 +1,98 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.config = void 0;
4
- exports.getRedisUrl = getRedisUrl;
3
+ exports.ConfigProvider = void 0;
5
4
  require("dotenv/config");
5
+ function createDefaultConfig() {
6
+ return {
7
+ debug: false,
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
+ }
6
34
  /**
7
- * Centralized configuration for the AI Agent Service
8
- * All environment variables are accessed through this file
35
+ * Deep merge utility function
36
+ * Merges source into target, with source values taking precedence
9
37
  */
10
- exports.config = {
11
- // Redis configuration
12
- redis: {
13
- url: process.env.REDIS_URL,
14
- host: process.env.REDIS_HOST ?? 'localhost',
15
- port: Number(process.env.REDIS_PORT ?? 6379),
16
- password: process.env.REDIS_PASSWORD,
17
- database: process.env.REDIS_DATABASE ? Number(process.env.REDIS_DATABASE) : undefined,
18
- },
19
- // AI Provider API Keys
20
- ai: {
21
- openaiApiKey: process.env.OPENAI_API_KEY,
22
- anthropicApiKey: process.env.ANTHROPIC_API_KEY,
23
- googleApiKey: process.env.GOOGLE_GENERATIVE_AI_API_KEY,
24
- openrouterApiKey: process.env.OPENROUTER_API_KEY,
25
- maxContextMessages: Number(process.env.MAX_CONTEXT_MESSAGES) || 10,
26
- defaultModel: process.env.DEFAULT_MODEL,
27
- },
28
- s3: {
29
- bucket: process.env.S3_ATTACHMENTS_BUCKET || 'ai-agent-attachments',
30
- },
31
- // Kafka configuration
32
- kafka: {
33
- groupId: process.env.KAFKA_GROUP_ID ?? 'ai-agent-node',
34
- chatTitleGenerationTopic: process.env.KAFKA_CHAT_TITLE_GENERATION_TOPIC ?? 'chat-title-generation',
35
- backgroundChatProcessingTopic: process.env.KAFKA_BACKGROUND_CHAT_PROCESSING_TOPIC ?? 'background-chat-processing',
36
- },
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
+ }
38
59
  /**
39
- * Get Redis connection URL
60
+ * ConfigProvider manages runtime configuration
61
+ * Allows setting config overrides through AIAgentService
40
62
  */
41
- function getRedisUrl() {
42
- if (exports.config.redis.url) {
43
- return exports.config.redis.url;
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();
44
95
  }
45
- return `redis://${exports.config.redis.host}:${exports.config.redis.port}`;
46
96
  }
97
+ exports.ConfigProvider = ConfigProvider;
47
98
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":";;;AAwCA,kCAKC;AA7CD,yBAAuB;AAEvB;;;GAGG;AAEU,QAAA,MAAM,GAAG;IACpB,sBAAsB;IACtB,KAAK,EAAE;QACL,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS;QAC1B,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,WAAW;QAC3C,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,IAAI,CAAC;QAC5C,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc;QACpC,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,SAAS;KACtF;IAED,uBAAuB;IACvB,EAAE,EAAE;QACF,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc;QACxC,eAAe,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB;QAC9C,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,4BAA4B;QACtD,gBAAgB,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB;QAChD,kBAAkB,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,IAAI,EAAE;QAClE,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa;KACxC;IACD,EAAE,EAAE;QACF,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,sBAAsB;KACpE;IACD,sBAAsB;IACtB,KAAK,EAAE;QACL,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,eAAe;QACtD,wBAAwB,EAAE,OAAO,CAAC,GAAG,CAAC,iCAAiC,IAAI,uBAAuB;QAClG,6BAA6B,EAAE,OAAO,CAAC,GAAG,CAAC,sCAAsC,IAAI,4BAA4B;KAClH;CACO,CAAC;AAEX;;GAEG;AACH,SAAgB,WAAW;IACzB,IAAI,cAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QACrB,OAAO,cAAM,CAAC,KAAK,CAAC,GAAG,CAAC;IAC1B,CAAC;IACD,OAAO,WAAW,cAAM,CAAC,KAAK,CAAC,IAAI,IAAI,cAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;AAC7D,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":";;;AAAA,yBAAuB;AAgDvB,SAAS,mBAAmB;IAC1B,OAAO;QACL,KAAK,EAAE,KAAK;QACZ,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,72 @@ 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
+ debug: boolean;
8
+ redis: {
9
+ url?: string;
10
+ host?: string;
11
+ port?: number;
12
+ password?: string;
13
+ database?: number;
13
14
  };
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;
15
+ ai: {
16
+ openaiApiKey?: string;
17
+ openaiBaseUrl?: string;
18
+ anthropicApiKey?: string;
19
+ anthropicBaseUrl?: string;
20
+ googleApiKey?: string;
21
+ googleBaseUrl?: string;
22
+ openrouterApiKey?: string;
23
+ openrouterBaseUrl?: string;
24
+ credentialsEncryptionKey?: string;
25
+ maxContextMessages?: number;
26
+ defaultModel?: string;
21
27
  };
22
- readonly s3: {
23
- readonly bucket: string;
28
+ s3: {
29
+ bucket?: string;
30
+ host?: string;
31
+ presignedUrlExpires?: number;
32
+ region?: string;
24
33
  };
25
- readonly kafka: {
26
- readonly groupId: string;
27
- readonly chatTitleGenerationTopic: string;
28
- readonly backgroundChatProcessingTopic: string;
34
+ fileProcessing: {
35
+ maxExtractedTextSize?: number;
36
+ enableTextExtraction?: boolean;
29
37
  };
30
- };
38
+ logger: {
39
+ nodeEnv?: string;
40
+ appName?: string;
41
+ logLevel?: string;
42
+ };
43
+ socket: {
44
+ path?: string;
45
+ };
46
+ }
31
47
  /**
32
- * Get Redis connection URL
48
+ * ConfigProvider manages runtime configuration
49
+ * Allows setting config overrides through AIAgentService
33
50
  */
34
- export declare function getRedisUrl(): string;
51
+ export declare class ConfigProvider {
52
+ private static instance;
53
+ private runtimeConfig;
54
+ private constructor();
55
+ /**
56
+ * Get the singleton instance of ConfigProvider
57
+ */
58
+ static getInstance(): ConfigProvider;
59
+ /**
60
+ * Get the current runtime configuration
61
+ */
62
+ getConfig(): Config;
63
+ /**
64
+ * Set configuration overrides
65
+ * Merges the provided overrides with existing config (deep merge)
66
+ * @param overrides - Partial config to override existing values
67
+ */
68
+ setConfig(overrides: Partial<Config>): void;
69
+ /**
70
+ * Reset configuration to defaults (from environment variables)
71
+ */
72
+ reset(): void;
73
+ }
35
74
  //# 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,OAAO,CAAC;IACf,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,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,wBAAwB,CAAC,EAAE,MAAM,CAAC;QAClC,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"}
@@ -6,13 +6,43 @@ const services_1 = require("../services/index.cjs");
6
6
  const store_1 = require("../store/index.cjs");
7
7
  const logger_1 = require("../libs/logger/index.cjs");
8
8
  const store_2 = require("../store/index.cjs");
9
- const FileHelper_1 = require("./FileHelper.cjs");
9
+ const utils_1 = require("../utils/utils.cjs");
10
10
  class AIHelper {
11
- static async convertUserMessage(msg, ignoreFileAttachments) {
12
- const userContent = [{
13
- type: "text",
11
+ constructor(fileHelper, config, tenantCredentialResolver) {
12
+ this.fileHelper = fileHelper;
13
+ this.aiService = new services_1.AIService(store_1.ModelStore.getInstance(), config.ai, tenantCredentialResolver);
14
+ }
15
+ getLanguageModelId(modelId) {
16
+ const model = this.aiService.getLanguageModelId(modelId);
17
+ return model.id;
18
+ }
19
+ clip(value, max) {
20
+ if (value.length <= max)
21
+ return value;
22
+ return `${value.slice(0, max)}…`;
23
+ }
24
+ renderContextValue(value, limits) {
25
+ if (value === null || value === undefined)
26
+ return '';
27
+ if (typeof value === 'string')
28
+ return this.clip(value, limits.maxString);
29
+ if (typeof value === 'number' || typeof value === 'boolean')
30
+ return String(value);
31
+ try {
32
+ const json = JSON.stringify(value);
33
+ return this.clip(json, limits.maxJson);
34
+ }
35
+ catch {
36
+ return '';
37
+ }
38
+ }
39
+ async convertUserMessage(msg, ignoreFileAttachments) {
40
+ const userContent = [
41
+ {
42
+ type: 'text',
14
43
  text: msg.content
15
- }];
44
+ }
45
+ ];
16
46
  const atts = msg.attachments ?? [];
17
47
  if (!atts.length) {
18
48
  return userContent;
@@ -23,21 +53,21 @@ class AIHelper {
23
53
  if (ignoreFileAttachments) {
24
54
  continue;
25
55
  }
26
- if ((0, FileHelper_1.isImage)(att)) {
27
- const image = await (0, FileHelper_1.prepareImageForVisionAPI)(att);
56
+ if (this.fileHelper.isImage(att)) {
57
+ const image = await this.fileHelper.prepareImageForVisionAPI(att);
28
58
  if (image) {
29
59
  userContent.push({
30
- type: "image",
60
+ type: 'image',
31
61
  image: image.image_url.url,
32
- mediaType: att.mimeType,
62
+ mediaType: att.mimeType
33
63
  });
34
64
  }
35
65
  }
36
66
  else {
37
- const fileText = await (0, FileHelper_1.extractTextFromDocument)(att);
67
+ const fileText = await this.fileHelper.extractTextFromDocument(att);
38
68
  if (fileText) {
39
69
  userContent.push({
40
- type: "text",
70
+ type: 'text',
41
71
  text: `${att.type}: ${att.name}(${att.mimeType})\n ${fileText}`
42
72
  });
43
73
  }
@@ -56,9 +86,8 @@ class AIHelper {
56
86
  if (title)
57
87
  lines.push(` title: ${title}`);
58
88
  if (selectedText) {
59
- const clipped = selectedText.length > 4000 ? `${selectedText.slice(0, 4000)}…` : selectedText;
60
89
  lines.push(' BEGIN_UNTRUSTED_WEB_SNIPPET');
61
- lines.push(clipped);
90
+ lines.push(this.clip(selectedText, 4000));
62
91
  lines.push(' END_UNTRUSTED_WEB_SNIPPET');
63
92
  }
64
93
  continue;
@@ -67,7 +96,7 @@ class AIHelper {
67
96
  const formId = typeof md?.formId === 'string' ? md.formId : undefined;
68
97
  const fieldName = typeof md?.fieldName === 'string' ? md.fieldName : undefined;
69
98
  const fieldLabel = typeof md?.fieldLabel === 'string' ? md.fieldLabel : undefined;
70
- const value = typeof md?.value === 'string' ? md.value : '';
99
+ const value = md?.value;
71
100
  const inputType = typeof md?.inputType === 'string' ? md.inputType : undefined;
72
101
  const options = Array.isArray(md?.options) ? md.options : [];
73
102
  if (formId)
@@ -84,15 +113,18 @@ class AIHelper {
84
113
  const l = typeof o?.label === 'string' ? o.label : '';
85
114
  if (!v && !l)
86
115
  return '';
87
- return l && v ? `${l} (${v})` : (l || v);
116
+ return l && v ? `${l} (${v})` : l || v;
88
117
  })
89
118
  .filter(Boolean)
90
119
  .join(', ');
91
120
  if (rendered)
92
121
  lines.push(` options: ${rendered}${options.length > 30 ? '…' : ''}`);
93
122
  }
94
- if (value)
95
- lines.push(` value: ${value.length > 1000 ? `${value.slice(0, 1000)}…` : value}`);
123
+ if (value !== undefined) {
124
+ const rendered = this.renderContextValue(value, { maxString: 1000, maxJson: 2500 });
125
+ if (rendered)
126
+ lines.push(` value: ${rendered}`);
127
+ }
96
128
  continue;
97
129
  }
98
130
  if (kind === 'formSnapshot') {
@@ -107,17 +139,17 @@ class AIHelper {
107
139
  for (const f of fields.slice(0, 50)) {
108
140
  const name = typeof f?.name === 'string' ? f.name : 'unknown';
109
141
  const label = typeof f?.label === 'string' ? f.label : undefined;
110
- const value = typeof f?.value === 'string' ? f.value : '';
142
+ const value = f?.value;
111
143
  const inputType = typeof f?.inputType === 'string' ? f.inputType : undefined;
112
144
  const options = Array.isArray(f?.options) ? f.options : [];
113
- const clipped = value.length > 1000 ? `${value.slice(0, 1000)}…` : value;
145
+ const clipped = this.renderContextValue(value, { maxString: 1000, maxJson: 2500 });
114
146
  const meta = [];
115
147
  if (inputType)
116
148
  meta.push(`type=${inputType}`);
117
149
  if ((inputType === 'select' || inputType === 'radio') && options.length) {
118
150
  const opts = options
119
151
  .slice(0, 20)
120
- .map((o) => typeof o?.value === 'string' ? o.value : '')
152
+ .map((o) => (typeof o?.value === 'string' ? o.value : ''))
121
153
  .filter(Boolean)
122
154
  .join('|');
123
155
  if (opts)
@@ -127,84 +159,122 @@ class AIHelper {
127
159
  }
128
160
  continue;
129
161
  }
162
+ if (kind === 'pageContext') {
163
+ const url = typeof md?.source?.url === 'string' ? md.source.url : att.url;
164
+ const title = typeof md?.title === 'string' ? md.title : undefined;
165
+ const route = typeof md?.source?.route === 'string' ? md.source.route : undefined;
166
+ const data = md?.data;
167
+ if (url)
168
+ lines.push(` url: ${url}`);
169
+ if (title)
170
+ lines.push(` title: ${title}`);
171
+ if (route)
172
+ lines.push(` route: ${route}`);
173
+ if (data && typeof data === 'object') {
174
+ const entries = Object.entries(data)
175
+ .filter(([k]) => typeof k === 'string' && k.length > 0)
176
+ .sort(([a], [b]) => a.localeCompare(b));
177
+ if (entries.length) {
178
+ lines.push(' data:');
179
+ const limits = { maxString: 1000, maxJson: 1500 };
180
+ for (const [k, v] of entries.slice(0, 40)) {
181
+ const rendered = this.renderContextValue(v, limits);
182
+ if (!rendered)
183
+ continue;
184
+ lines.push(` - ${k}: ${rendered}`);
185
+ }
186
+ if (entries.length > 40) {
187
+ lines.push(` - … (${entries.length - 40} more keys)`);
188
+ }
189
+ }
190
+ }
191
+ else if (data !== undefined) {
192
+ const rendered = this.renderContextValue(data, { maxString: 1000, maxJson: 2000 });
193
+ if (rendered)
194
+ lines.push(` data: ${rendered}`);
195
+ }
196
+ continue;
197
+ }
130
198
  // Custom kind: prefer summary, fall back to minimal JSON.
131
199
  const title = typeof md?.title === 'string' ? md.title : undefined;
132
200
  const summary = typeof md?.summary === 'string' ? md.summary : undefined;
133
201
  if (title)
134
202
  lines.push(` title: ${title}`);
135
203
  if (summary) {
136
- lines.push(` summary: ${summary.length > 4000 ? `${summary.slice(0, 4000)}…` : summary}`);
204
+ lines.push(` summary: ${this.clip(summary, 4000)}`);
137
205
  continue;
138
206
  }
139
207
  if (md?.data !== undefined) {
140
- const json = JSON.stringify(md.data);
141
- lines.push(` data: ${json.length > 2000 ? `${json.slice(0, 2000)}…` : json}`);
208
+ const rendered = this.renderContextValue(md.data, { maxString: 2000, maxJson: 5000 });
209
+ if (rendered)
210
+ lines.push(` data: ${rendered}`);
142
211
  }
143
212
  }
144
213
  if (lines.length) {
145
214
  userContent.push({
146
- type: "text",
215
+ type: 'text',
147
216
  text: `Context attachments (non-authoritative; user message is primary):\n ${lines.join('\n')}`
148
217
  });
149
218
  }
150
219
  return userContent;
151
220
  }
152
- static getAgentConfigs(contextKey) {
221
+ getAgentConfigs(contextKey) {
153
222
  const agents = store_2.ConfigStore.getInstance().getAgentsForContext(contextKey);
154
223
  if (!agents.length) {
155
224
  throw new Error(`Agent configs not found for context key: ${contextKey}`);
156
225
  }
157
226
  return agents;
158
227
  }
159
- static async getAgentOptions(params, options = {}) {
160
- const { contextKey, messages, modelId, context, agentName } = params;
228
+ async getAgentOptions(params, options = {}) {
229
+ const { contextKey, messages, modelId, context, agentName, executionContext } = params;
161
230
  let agentConfig = store_2.ConfigStore.getInstance().getAgentConfigByName(agentName);
162
231
  if (contextKey && messages) {
163
- agentConfig = await AIHelper.selectAgentConfig(contextKey, messages);
232
+ agentConfig = await this.selectAgentConfig(contextKey, messages, options.onStepFinish, executionContext);
164
233
  }
165
- const aiService = new services_1.AIService(store_1.ModelStore.getInstance());
166
- const agentOptions = aiService.getAgentOptions(agentConfig, modelId, context);
234
+ const agentOptions = this.aiService.getAgentOptions(agentConfig, modelId, context);
167
235
  return {
168
236
  ...agentOptions,
169
- ...options,
237
+ ...options
170
238
  };
171
239
  }
172
- static async selectAgentConfig(contextKey, messages) {
173
- const configs = AIHelper.getAgentConfigs(contextKey);
240
+ getAgentOptionsFromConfig(agentConfig, context) {
241
+ return this.aiService.getAgentOptions(agentConfig, undefined, context);
242
+ }
243
+ async selectAgentConfig(contextKey, messages, onStepFinish, executionContext) {
244
+ const configs = this.getAgentConfigs(contextKey);
174
245
  if (configs.length === 1) {
175
246
  return configs[0];
176
247
  }
177
- const aiService = new services_1.AIService(store_1.ModelStore.getInstance());
178
- const systemPrompt = `Select the most appropriate agent for the given user prompt.
179
- Return only the agent name, no quotes or extra text.
180
- Available agents: ${JSON.stringify(configs.map(config => ({
248
+ const lastUsedAgent = messages.find((message) => message.agentName);
249
+ const systemPrompt = `Select the most appropriate agent for the given user message.
250
+ Return only the agent name, no quotes or extra text. ${lastUsedAgent ? `Latest Used agent: ${lastUsedAgent}` : ''}
251
+ Available agents: ${JSON.stringify(configs.map((config) => ({
181
252
  name: config.name,
182
253
  description: config.description,
183
- tools: config.tools.map(({ data }) => data.title)
254
+ tools: config.tools?.map(utils_1.getAgentToolName)
184
255
  })))}`;
185
- const agentName = await aiService.generateText({
186
- messages,
256
+ const promptMessages = messages.length > 2 ? messages.slice(messages.length - 2) : messages;
257
+ const agentName = await this.aiService.generateText({
258
+ messages: await this.convertMessages(promptMessages, true),
187
259
  system: systemPrompt,
188
- temperature: 0.7,
189
- maxOutputTokens: 2000
260
+ temperature: 0.1,
261
+ maxOutputTokens: 2000,
262
+ onStepFinish,
263
+ executionContext
190
264
  });
191
- const agent = configs.find(config => config.name === agentName);
265
+ const agent = configs.find((config) => config.name === agentName);
192
266
  if (!agent) {
193
267
  // fallback, agent not found, grabbing first from the list
194
268
  return configs[0];
195
269
  }
196
270
  return agent;
197
271
  }
198
- static async getAssistantResponse(messages, signal, options = {}) {
272
+ async getAssistantResponse(messages, options = {}) {
199
273
  try {
200
- const aiService = new services_1.AIService(store_1.ModelStore.getInstance());
201
274
  const processedOptions = this.processToolChoice(options, messages);
202
- return aiService.generateText({
203
- temperature: 0.7,
204
- maxOutputTokens: 2000,
275
+ return this.aiService.generateText({
205
276
  ...processedOptions,
206
- messages: await AIHelper.convertMessages(messages),
207
- signal,
277
+ messages: await this.convertMessages(messages),
208
278
  });
209
279
  }
210
280
  catch (error) {
@@ -212,14 +282,12 @@ Available agents: ${JSON.stringify(configs.map(config => ({
212
282
  throw error;
213
283
  }
214
284
  }
215
- static processToolChoice(options, agentMessages) {
285
+ processToolChoice(options, agentMessages) {
216
286
  if (!options?.toolChoice) {
217
287
  return options || {};
218
288
  }
219
289
  // Find the latest assistant message
220
- const latestAssistantMessage = [...agentMessages]
221
- .reverse()
222
- .find(msg => msg.role === ai_agent_types_1.MessageRole.Assistant);
290
+ const latestAssistantMessage = [...agentMessages].reverse().find((msg) => msg.role === ai_agent_types_1.MessageRole.Assistant);
223
291
  // Handle 'required' toolChoice: if any tool was called, set to 'auto'
224
292
  if (options.toolChoice === 'required') {
225
293
  const anyToolWasCalled = (latestAssistantMessage?.toolCalls?.length ?? 0) > 0;
@@ -234,7 +302,7 @@ Available agents: ${JSON.stringify(configs.map(config => ({
234
302
  // Handle specific tool toolChoice: if that specific tool was called, set to 'auto'
235
303
  if (typeof options.toolChoice === 'object' && options.toolChoice.type === 'tool') {
236
304
  const toolName = options.toolChoice.toolName;
237
- const toolWasCalled = latestAssistantMessage?.toolCalls?.some(toolCall => toolCall.name === toolName) ?? false;
305
+ const toolWasCalled = latestAssistantMessage?.toolCalls?.some((toolCall) => toolCall.name === toolName) ?? false;
238
306
  if (toolWasCalled) {
239
307
  return {
240
308
  ...options,
@@ -244,19 +312,16 @@ Available agents: ${JSON.stringify(configs.map(config => ({
244
312
  }
245
313
  return options;
246
314
  }
247
- static async streamAssistantResponse(agentMessages, signal, options) {
248
- const aiService = new services_1.AIService(store_1.ModelStore.getInstance());
315
+ async streamAssistantResponse(agentMessages, signal, options) {
249
316
  const messages = await this.convertMessages(agentMessages);
250
317
  const processedOptions = this.processToolChoice(options, agentMessages);
251
- return aiService.streamText({
318
+ return this.aiService.streamText({
252
319
  messages,
253
- temperature: 0.7,
254
- maxOutputTokens: 2000,
255
320
  signal,
256
321
  ...processedOptions
257
322
  });
258
323
  }
259
- static async convertMessages(agentMessages, ignoreToolsAndAttachments = false) {
324
+ async convertMessages(agentMessages, ignoreToolsAndAttachments = false) {
260
325
  const result = [];
261
326
  for (const msg of agentMessages) {
262
327
  if (msg.role === ai_agent_types_1.MessageRole.User) {
@@ -279,12 +344,12 @@ Available agents: ${JSON.stringify(configs.map(config => ({
279
344
  };
280
345
  if (!ignoreToolsAndAttachments) {
281
346
  msg.toolCalls?.forEach((toolCall) => {
282
- if (toolCall.output) {
347
+ if (toolCall.output || toolCall.error) {
283
348
  assistantMessage.content.push({
284
349
  type: 'tool-call',
285
350
  toolCallId: toolCall.id,
286
351
  toolName: toolCall.name,
287
- input: toolCall.input
352
+ input: Object.keys(toolCall.input).length ? toolCall.input : { stub: 'stub' }, // todo: remove this workaround when openrouter will have new stable version(last tested: 2.2.3 has reasoning issues)
288
353
  });
289
354
  toolMessage.content.push({
290
355
  type: 'tool-result',
@@ -292,7 +357,7 @@ Available agents: ${JSON.stringify(configs.map(config => ({
292
357
  toolName: toolCall.name,
293
358
  output: {
294
359
  type: 'text',
295
- value: JSON.stringify(toolCall.output)
360
+ value: JSON.stringify(toolCall.output || { error: toolCall.error })
296
361
  }
297
362
  });
298
363
  }
@@ -308,13 +373,14 @@ Available agents: ${JSON.stringify(configs.map(config => ({
308
373
  }
309
374
  return result;
310
375
  }
311
- static async generateTitleForMessage(contextKey, messages) {
376
+ async generateTitleForMessage(contextKey, messages, onStepFinish, executionContext) {
312
377
  try {
313
- const aiService = new services_1.AIService(store_1.ModelStore.getInstance());
314
378
  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.`;
315
- return aiService.generateText({
316
- messages: await AIHelper.convertMessages(messages, true),
379
+ return this.aiService.generateText({
380
+ messages: await this.convertMessages(messages, true),
317
381
  system: systemPrompt,
382
+ onStepFinish,
383
+ executionContext
318
384
  });
319
385
  }
320
386
  catch (error) {