@ainetwork/adk 0.2.8 → 0.2.10

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 (373) hide show
  1. package/dist/cjs/{chunk-2GJKQSDQ.cjs → chunk-2EPZZPWG.cjs} +3 -3
  2. package/dist/cjs/{chunk-3SYBDGMH.cjs.map → chunk-2EPZZPWG.cjs.map} +1 -1
  3. package/dist/cjs/chunk-2P3ZBNVN.cjs +45 -0
  4. package/dist/cjs/chunk-2P3ZBNVN.cjs.map +1 -0
  5. package/dist/cjs/{chunk-OAPMGKE2.cjs → chunk-33ZJ74NB.cjs} +15 -9
  6. package/dist/cjs/chunk-33ZJ74NB.cjs.map +1 -0
  7. package/dist/cjs/{chunk-MXDXXOXE.cjs → chunk-3X2EKOWC.cjs} +15 -7
  8. package/dist/cjs/chunk-3X2EKOWC.cjs.map +1 -0
  9. package/dist/cjs/chunk-BQ6BY5HN.cjs +28 -0
  10. package/dist/cjs/chunk-BQ6BY5HN.cjs.map +1 -0
  11. package/dist/cjs/{chunk-WGFYVOP5.cjs → chunk-CKIA6H2D.cjs} +5 -5
  12. package/dist/cjs/{chunk-WGFYVOP5.cjs.map → chunk-CKIA6H2D.cjs.map} +1 -1
  13. package/dist/cjs/{chunk-W4PRBE6H.cjs → chunk-G3KWCMMQ.cjs} +32 -10
  14. package/dist/cjs/chunk-G3KWCMMQ.cjs.map +1 -0
  15. package/dist/cjs/chunk-IJBFU7GX.cjs +28 -0
  16. package/dist/cjs/chunk-IJBFU7GX.cjs.map +1 -0
  17. package/dist/cjs/{chunk-AY3PG2UZ.cjs → chunk-JRFTCDMQ.cjs} +15 -9
  18. package/dist/cjs/chunk-JRFTCDMQ.cjs.map +1 -0
  19. package/dist/cjs/{chunk-4PFJ7PDN.cjs → chunk-LNLZLOW2.cjs} +6 -6
  20. package/dist/cjs/{chunk-3GPSKXKA.cjs.map → chunk-LNLZLOW2.cjs.map} +1 -1
  21. package/dist/cjs/{chunk-KAF2EDPZ.cjs → chunk-M6YACFW4.cjs} +13 -7
  22. package/dist/cjs/chunk-M6YACFW4.cjs.map +1 -0
  23. package/dist/cjs/chunk-MT722JJC.cjs +1 -0
  24. package/dist/cjs/chunk-MT722JJC.cjs.map +1 -0
  25. package/dist/cjs/chunk-NWIZHGCS.cjs +28 -0
  26. package/dist/cjs/chunk-NWIZHGCS.cjs.map +1 -0
  27. package/dist/cjs/chunk-QIHLINHW.cjs +106 -0
  28. package/dist/cjs/chunk-QIHLINHW.cjs.map +1 -0
  29. package/dist/cjs/{chunk-3GPSKXKA.cjs → chunk-QXLAC5OS.cjs} +6 -6
  30. package/dist/cjs/{chunk-4PFJ7PDN.cjs.map → chunk-QXLAC5OS.cjs.map} +1 -1
  31. package/dist/cjs/{chunk-IKPQ52KY.cjs → chunk-QZHI7LLI.cjs} +1 -1
  32. package/dist/cjs/chunk-QZHI7LLI.cjs.map +1 -0
  33. package/dist/cjs/chunk-R3K7LK6W.cjs +134 -0
  34. package/dist/cjs/chunk-R3K7LK6W.cjs.map +1 -0
  35. package/dist/cjs/chunk-S454SFT6.cjs +129 -0
  36. package/dist/cjs/chunk-S454SFT6.cjs.map +1 -0
  37. package/dist/cjs/chunk-S6BHSEXF.cjs +26 -0
  38. package/dist/cjs/chunk-S6BHSEXF.cjs.map +1 -0
  39. package/dist/cjs/{chunk-2NKMH5DO.cjs → chunk-SB5GVESM.cjs} +6 -6
  40. package/dist/cjs/{chunk-5ARBSKWU.cjs.map → chunk-SB5GVESM.cjs.map} +1 -1
  41. package/dist/cjs/chunk-SC6WN4ED.cjs +28 -0
  42. package/dist/cjs/chunk-SC6WN4ED.cjs.map +1 -0
  43. package/dist/cjs/{chunk-3SYBDGMH.cjs → chunk-SH6JCUEJ.cjs} +3 -3
  44. package/dist/cjs/{chunk-2GJKQSDQ.cjs.map → chunk-SH6JCUEJ.cjs.map} +1 -1
  45. package/dist/cjs/chunk-T7444BWH.cjs +134 -0
  46. package/dist/cjs/chunk-T7444BWH.cjs.map +1 -0
  47. package/dist/cjs/chunk-TILUFTIG.cjs +111 -0
  48. package/dist/cjs/chunk-TILUFTIG.cjs.map +1 -0
  49. package/dist/cjs/{chunk-45H4WOKN.cjs → chunk-VRCXZ4LV.cjs} +3 -3
  50. package/dist/cjs/{chunk-3IB2WAKN.cjs.map → chunk-VRCXZ4LV.cjs.map} +1 -1
  51. package/dist/cjs/{chunk-MADCWTBO.cjs → chunk-W224GBH7.cjs} +1 -1
  52. package/dist/cjs/{chunk-CD3RWOCR.cjs.map → chunk-W224GBH7.cjs.map} +1 -1
  53. package/dist/cjs/{chunk-3IB2WAKN.cjs → chunk-WGSFHDDZ.cjs} +3 -3
  54. package/dist/cjs/{chunk-45H4WOKN.cjs.map → chunk-WGSFHDDZ.cjs.map} +1 -1
  55. package/dist/cjs/chunk-X7FADTCP.cjs +110 -0
  56. package/dist/cjs/chunk-X7FADTCP.cjs.map +1 -0
  57. package/dist/cjs/chunk-Y337ZZKZ.cjs +129 -0
  58. package/dist/cjs/chunk-Y337ZZKZ.cjs.map +1 -0
  59. package/dist/cjs/{chunk-5ARBSKWU.cjs → chunk-YU3TYLMR.cjs} +5 -5
  60. package/dist/cjs/{chunk-2NKMH5DO.cjs.map → chunk-YU3TYLMR.cjs.map} +1 -1
  61. package/dist/cjs/{chunk-TYLHXACM.cjs → chunk-ZVPJLZIQ.cjs} +6 -2
  62. package/dist/cjs/chunk-ZVPJLZIQ.cjs.map +1 -0
  63. package/dist/cjs/controllers/index.cjs +4 -4
  64. package/dist/cjs/controllers/intent.controller.cjs +7 -0
  65. package/dist/cjs/controllers/intent.controller.cjs.map +1 -0
  66. package/dist/cjs/index.cjs +28 -21
  67. package/dist/cjs/index.cjs.map +1 -1
  68. package/dist/cjs/modules/a2a/a2a.module.cjs +3 -3
  69. package/dist/cjs/modules/index.cjs +7 -7
  70. package/dist/cjs/modules/index.cjs.map +1 -1
  71. package/dist/cjs/routes/a2a.routes.cjs +6 -6
  72. package/dist/cjs/routes/api.routes.cjs +5 -5
  73. package/dist/cjs/routes/index.cjs +17 -17
  74. package/dist/cjs/routes/index.cjs.map +1 -1
  75. package/dist/cjs/routes/intent.routes.cjs +20 -0
  76. package/dist/cjs/routes/intent.routes.cjs.map +1 -0
  77. package/dist/cjs/routes/query.routes.cjs +8 -8
  78. package/dist/cjs/services/index.cjs +19 -9
  79. package/dist/cjs/services/index.cjs.map +1 -1
  80. package/dist/cjs/services/intents/fulfill-stream.service.cjs +3 -3
  81. package/dist/cjs/services/intents/fulfill.service.cjs +3 -3
  82. package/dist/cjs/services/intents/trigger.service.cjs +2 -2
  83. package/dist/cjs/services/query-stream.service.cjs +5 -5
  84. package/dist/cjs/services/query.service.cjs +5 -5
  85. package/dist/cjs/services/thread.service.cjs +7 -0
  86. package/dist/cjs/services/thread.service.cjs.map +1 -0
  87. package/dist/cjs/types/memory.cjs +2 -2
  88. package/dist/esm/{chunk-XTPDMHUI.js → chunk-5YU3CTYW.js} +11 -5
  89. package/dist/esm/{chunk-XTPDMHUI.js.map → chunk-5YU3CTYW.js.map} +1 -1
  90. package/dist/esm/{chunk-6OHUQ6DV.js → chunk-6PT5BUHR.js} +5 -5
  91. package/dist/esm/{chunk-IRGR2OHS.js → chunk-7276G7GV.js} +11 -5
  92. package/dist/esm/{chunk-IRGR2OHS.js.map → chunk-7276G7GV.js.map} +1 -1
  93. package/dist/esm/{chunk-5T7E533R.js → chunk-A3UQKLUC.js} +2 -2
  94. package/dist/esm/{chunk-X6JNM3XR.js → chunk-GRN6CHNO.js} +1 -1
  95. package/dist/esm/{chunk-X6JNM3XR.js.map → chunk-GRN6CHNO.js.map} +1 -1
  96. package/dist/esm/{chunk-OCONOO5Z.js → chunk-JNZCPCEC.js} +14 -7
  97. package/dist/esm/chunk-JNZCPCEC.js.map +1 -0
  98. package/dist/esm/{chunk-EYZ5Z7FG.js → chunk-LOFJBMHT.js} +1 -1
  99. package/dist/esm/chunk-LOFJBMHT.js.map +1 -0
  100. package/dist/esm/{chunk-SHQWRBWS.js → chunk-NWL3BMUH.js} +3 -7
  101. package/dist/esm/chunk-NWL3BMUH.js.map +1 -0
  102. package/dist/esm/chunk-PBGBCH2S.js +28 -0
  103. package/dist/esm/chunk-PBGBCH2S.js.map +1 -0
  104. package/dist/esm/{chunk-E2RV322Z.js → chunk-QCK645XC.js} +24 -2
  105. package/dist/esm/chunk-QCK645XC.js.map +1 -0
  106. package/dist/esm/chunk-U7REZSMO.js +1 -0
  107. package/dist/esm/chunk-U7REZSMO.js.map +1 -0
  108. package/dist/esm/chunk-WZQVH4XY.js +45 -0
  109. package/dist/esm/chunk-WZQVH4XY.js.map +1 -0
  110. package/dist/esm/chunk-YUKPKFX5.js +26 -0
  111. package/dist/esm/chunk-YUKPKFX5.js.map +1 -0
  112. package/dist/esm/controllers/index.js +5 -5
  113. package/dist/esm/controllers/intent.controller.d.ts +19 -0
  114. package/dist/esm/controllers/intent.controller.js +7 -0
  115. package/dist/esm/controllers/intent.controller.js.map +1 -0
  116. package/dist/esm/index.js +24 -17
  117. package/dist/esm/index.js.map +1 -1
  118. package/dist/esm/modules/a2a/a2a.module.js +2 -2
  119. package/dist/esm/modules/index.d.ts +1 -1
  120. package/dist/esm/modules/index.js +6 -6
  121. package/dist/esm/routes/a2a.routes.js +5 -5
  122. package/dist/esm/routes/api.routes.js +1 -1
  123. package/dist/esm/routes/index.js +15 -15
  124. package/dist/esm/routes/intent.routes.d.ts +24 -0
  125. package/dist/esm/routes/intent.routes.js +20 -0
  126. package/dist/esm/routes/intent.routes.js.map +1 -0
  127. package/dist/esm/routes/query.routes.js +7 -7
  128. package/dist/esm/services/index.d.ts +3 -0
  129. package/dist/esm/services/index.js +16 -6
  130. package/dist/esm/services/intents/fulfill-stream.service.d.ts +2 -2
  131. package/dist/esm/services/intents/fulfill-stream.service.js +2 -2
  132. package/dist/esm/services/intents/fulfill.service.d.ts +2 -2
  133. package/dist/esm/services/intents/fulfill.service.js +2 -2
  134. package/dist/esm/services/intents/trigger.service.js +1 -1
  135. package/dist/esm/services/query-stream.service.js +4 -4
  136. package/dist/esm/services/query.service.js +4 -4
  137. package/dist/esm/services/thread.service.d.ts +13 -0
  138. package/dist/esm/services/thread.service.js +7 -0
  139. package/dist/esm/services/thread.service.js.map +1 -0
  140. package/dist/esm/types/memory.d.ts +1 -0
  141. package/dist/esm/types/memory.js +1 -1
  142. package/package.json +1 -1
  143. package/dist/cjs/chunk-2UK6RDHB.cjs +0 -337
  144. package/dist/cjs/chunk-2UK6RDHB.cjs.map +0 -1
  145. package/dist/cjs/chunk-4TK4MTAR.cjs +0 -17
  146. package/dist/cjs/chunk-4TK4MTAR.cjs.map +0 -1
  147. package/dist/cjs/chunk-5WNANWIO.cjs +0 -43
  148. package/dist/cjs/chunk-5WNANWIO.cjs.map +0 -1
  149. package/dist/cjs/chunk-67EDI57F.cjs +0 -37
  150. package/dist/cjs/chunk-67EDI57F.cjs.map +0 -1
  151. package/dist/cjs/chunk-6S376RMW.cjs +0 -338
  152. package/dist/cjs/chunk-6S376RMW.cjs.map +0 -1
  153. package/dist/cjs/chunk-6UHPYXKS.cjs +0 -381
  154. package/dist/cjs/chunk-6UHPYXKS.cjs.map +0 -1
  155. package/dist/cjs/chunk-7HH3N36Q.cjs +0 -43
  156. package/dist/cjs/chunk-7HH3N36Q.cjs.map +0 -1
  157. package/dist/cjs/chunk-7J5DYKDJ.cjs +0 -376
  158. package/dist/cjs/chunk-7J5DYKDJ.cjs.map +0 -1
  159. package/dist/cjs/chunk-7Y3W3SIL.cjs +0 -37
  160. package/dist/cjs/chunk-7Y3W3SIL.cjs.map +0 -1
  161. package/dist/cjs/chunk-AEYHJEGM.cjs +0 -26
  162. package/dist/cjs/chunk-AEYHJEGM.cjs.map +0 -1
  163. package/dist/cjs/chunk-AIAIY7IU.cjs +0 -43
  164. package/dist/cjs/chunk-AIAIY7IU.cjs.map +0 -1
  165. package/dist/cjs/chunk-APGW3LWW.cjs +0 -43
  166. package/dist/cjs/chunk-APGW3LWW.cjs.map +0 -1
  167. package/dist/cjs/chunk-AWLDQTED.cjs +0 -257
  168. package/dist/cjs/chunk-AWLDQTED.cjs.map +0 -1
  169. package/dist/cjs/chunk-AXLG6NY4.cjs +0 -337
  170. package/dist/cjs/chunk-AXLG6NY4.cjs.map +0 -1
  171. package/dist/cjs/chunk-AY3PG2UZ.cjs.map +0 -1
  172. package/dist/cjs/chunk-B2XCYG4C.cjs +0 -43
  173. package/dist/cjs/chunk-B2XCYG4C.cjs.map +0 -1
  174. package/dist/cjs/chunk-BAPJ7AYM.cjs +0 -43
  175. package/dist/cjs/chunk-BAPJ7AYM.cjs.map +0 -1
  176. package/dist/cjs/chunk-BFWJLMUR.cjs +0 -43
  177. package/dist/cjs/chunk-BFWJLMUR.cjs.map +0 -1
  178. package/dist/cjs/chunk-BGEBE36B.cjs +0 -43
  179. package/dist/cjs/chunk-BGEBE36B.cjs.map +0 -1
  180. package/dist/cjs/chunk-BIDIP5MX.cjs +0 -37
  181. package/dist/cjs/chunk-BIDIP5MX.cjs.map +0 -1
  182. package/dist/cjs/chunk-BKU7EWEM.cjs +0 -37
  183. package/dist/cjs/chunk-BKU7EWEM.cjs.map +0 -1
  184. package/dist/cjs/chunk-C5V4X3ZH.cjs +0 -364
  185. package/dist/cjs/chunk-C5V4X3ZH.cjs.map +0 -1
  186. package/dist/cjs/chunk-C77OTZYZ.cjs +0 -43
  187. package/dist/cjs/chunk-C77OTZYZ.cjs.map +0 -1
  188. package/dist/cjs/chunk-C7SJ2X3X.cjs +0 -43
  189. package/dist/cjs/chunk-C7SJ2X3X.cjs.map +0 -1
  190. package/dist/cjs/chunk-CD3RWOCR.cjs +0 -18
  191. package/dist/cjs/chunk-CEUCTNAJ.cjs +0 -43
  192. package/dist/cjs/chunk-CEUCTNAJ.cjs.map +0 -1
  193. package/dist/cjs/chunk-CIV2QV4C.cjs +0 -43
  194. package/dist/cjs/chunk-CIV2QV4C.cjs.map +0 -1
  195. package/dist/cjs/chunk-CKE4RRTI.cjs +0 -378
  196. package/dist/cjs/chunk-CKE4RRTI.cjs.map +0 -1
  197. package/dist/cjs/chunk-EEND2E3Y.cjs +0 -37
  198. package/dist/cjs/chunk-EEND2E3Y.cjs.map +0 -1
  199. package/dist/cjs/chunk-ET7NGSCR.cjs +0 -382
  200. package/dist/cjs/chunk-ET7NGSCR.cjs.map +0 -1
  201. package/dist/cjs/chunk-EXKLB7FF.cjs +0 -18
  202. package/dist/cjs/chunk-EXKLB7FF.cjs.map +0 -1
  203. package/dist/cjs/chunk-F6LFBKIF.cjs +0 -43
  204. package/dist/cjs/chunk-F6LFBKIF.cjs.map +0 -1
  205. package/dist/cjs/chunk-FCIBDAL5.cjs +0 -364
  206. package/dist/cjs/chunk-FCIBDAL5.cjs.map +0 -1
  207. package/dist/cjs/chunk-FGBHPONX.cjs +0 -43
  208. package/dist/cjs/chunk-FGBHPONX.cjs.map +0 -1
  209. package/dist/cjs/chunk-FJ2S5TGS.cjs +0 -37
  210. package/dist/cjs/chunk-FJ2S5TGS.cjs.map +0 -1
  211. package/dist/cjs/chunk-FZEACIU2.cjs +0 -37
  212. package/dist/cjs/chunk-FZEACIU2.cjs.map +0 -1
  213. package/dist/cjs/chunk-GAXPKI2P.cjs +0 -364
  214. package/dist/cjs/chunk-GAXPKI2P.cjs.map +0 -1
  215. package/dist/cjs/chunk-GBQXIGWQ.cjs +0 -37
  216. package/dist/cjs/chunk-GBQXIGWQ.cjs.map +0 -1
  217. package/dist/cjs/chunk-GGP6URMG.cjs +0 -43
  218. package/dist/cjs/chunk-GGP6URMG.cjs.map +0 -1
  219. package/dist/cjs/chunk-GO2OLIWF.cjs +0 -359
  220. package/dist/cjs/chunk-GO2OLIWF.cjs.map +0 -1
  221. package/dist/cjs/chunk-GYIACLMZ.cjs +0 -376
  222. package/dist/cjs/chunk-GYIACLMZ.cjs.map +0 -1
  223. package/dist/cjs/chunk-GZE5BVB2.cjs +0 -361
  224. package/dist/cjs/chunk-GZE5BVB2.cjs.map +0 -1
  225. package/dist/cjs/chunk-HPCNM6XP.cjs +0 -25
  226. package/dist/cjs/chunk-HPCNM6XP.cjs.map +0 -1
  227. package/dist/cjs/chunk-HXRGFZL7.cjs +0 -360
  228. package/dist/cjs/chunk-HXRGFZL7.cjs.map +0 -1
  229. package/dist/cjs/chunk-IC5TWI4A.cjs +0 -37
  230. package/dist/cjs/chunk-IC5TWI4A.cjs.map +0 -1
  231. package/dist/cjs/chunk-ICTSMRXC.cjs +0 -360
  232. package/dist/cjs/chunk-ICTSMRXC.cjs.map +0 -1
  233. package/dist/cjs/chunk-IH4I2JTE.cjs +0 -348
  234. package/dist/cjs/chunk-IH4I2JTE.cjs.map +0 -1
  235. package/dist/cjs/chunk-IKPQ52KY.cjs.map +0 -1
  236. package/dist/cjs/chunk-J5WX6GPC.cjs +0 -43
  237. package/dist/cjs/chunk-J5WX6GPC.cjs.map +0 -1
  238. package/dist/cjs/chunk-J7GCQY3S.cjs +0 -18
  239. package/dist/cjs/chunk-J7GCQY3S.cjs.map +0 -1
  240. package/dist/cjs/chunk-JFLQREPM.cjs +0 -37
  241. package/dist/cjs/chunk-JFLQREPM.cjs.map +0 -1
  242. package/dist/cjs/chunk-JO6AZASU.cjs +0 -37
  243. package/dist/cjs/chunk-JO6AZASU.cjs.map +0 -1
  244. package/dist/cjs/chunk-JUPAGIP4.cjs +0 -43
  245. package/dist/cjs/chunk-JUPAGIP4.cjs.map +0 -1
  246. package/dist/cjs/chunk-JWIVQT6C.cjs +0 -37
  247. package/dist/cjs/chunk-JWIVQT6C.cjs.map +0 -1
  248. package/dist/cjs/chunk-JYHYAQQ2.cjs +0 -43
  249. package/dist/cjs/chunk-JYHYAQQ2.cjs.map +0 -1
  250. package/dist/cjs/chunk-K6HWDDNX.cjs +0 -367
  251. package/dist/cjs/chunk-K6HWDDNX.cjs.map +0 -1
  252. package/dist/cjs/chunk-K6J5XJRM.cjs +0 -382
  253. package/dist/cjs/chunk-K6J5XJRM.cjs.map +0 -1
  254. package/dist/cjs/chunk-KAF2EDPZ.cjs.map +0 -1
  255. package/dist/cjs/chunk-KBWHLMA4.cjs +0 -26
  256. package/dist/cjs/chunk-KBWHLMA4.cjs.map +0 -1
  257. package/dist/cjs/chunk-KH25JPQS.cjs +0 -256
  258. package/dist/cjs/chunk-KH25JPQS.cjs.map +0 -1
  259. package/dist/cjs/chunk-KHAIZONV.cjs +0 -43
  260. package/dist/cjs/chunk-KHAIZONV.cjs.map +0 -1
  261. package/dist/cjs/chunk-KQ4MBNUW.cjs +0 -43
  262. package/dist/cjs/chunk-KQ4MBNUW.cjs.map +0 -1
  263. package/dist/cjs/chunk-L5ZICBT4.cjs +0 -37
  264. package/dist/cjs/chunk-L5ZICBT4.cjs.map +0 -1
  265. package/dist/cjs/chunk-MADCWTBO.cjs.map +0 -1
  266. package/dist/cjs/chunk-MV6L3NPY.cjs +0 -164
  267. package/dist/cjs/chunk-MV6L3NPY.cjs.map +0 -1
  268. package/dist/cjs/chunk-MXDXXOXE.cjs.map +0 -1
  269. package/dist/cjs/chunk-N6VAOFEP.cjs +0 -37
  270. package/dist/cjs/chunk-N6VAOFEP.cjs.map +0 -1
  271. package/dist/cjs/chunk-NWMGBXPZ.cjs +0 -37
  272. package/dist/cjs/chunk-NWMGBXPZ.cjs.map +0 -1
  273. package/dist/cjs/chunk-OAPMGKE2.cjs.map +0 -1
  274. package/dist/cjs/chunk-OCGEXAVI.cjs +0 -373
  275. package/dist/cjs/chunk-OCGEXAVI.cjs.map +0 -1
  276. package/dist/cjs/chunk-OOSRLRNL.cjs +0 -37
  277. package/dist/cjs/chunk-OOSRLRNL.cjs.map +0 -1
  278. package/dist/cjs/chunk-ORLXR6OZ.cjs +0 -257
  279. package/dist/cjs/chunk-ORLXR6OZ.cjs.map +0 -1
  280. package/dist/cjs/chunk-OZKAPLCE.cjs +0 -43
  281. package/dist/cjs/chunk-OZKAPLCE.cjs.map +0 -1
  282. package/dist/cjs/chunk-P42QPS2N.cjs +0 -43
  283. package/dist/cjs/chunk-P42QPS2N.cjs.map +0 -1
  284. package/dist/cjs/chunk-PHTT7NVZ.cjs +0 -37
  285. package/dist/cjs/chunk-PHTT7NVZ.cjs.map +0 -1
  286. package/dist/cjs/chunk-PNN5WGWA.cjs +0 -43
  287. package/dist/cjs/chunk-PNN5WGWA.cjs.map +0 -1
  288. package/dist/cjs/chunk-Q673YXOW.cjs +0 -37
  289. package/dist/cjs/chunk-Q673YXOW.cjs.map +0 -1
  290. package/dist/cjs/chunk-QCEMS4A3.cjs +0 -168
  291. package/dist/cjs/chunk-QCEMS4A3.cjs.map +0 -1
  292. package/dist/cjs/chunk-QV2CSL6T.cjs +0 -352
  293. package/dist/cjs/chunk-QV2CSL6T.cjs.map +0 -1
  294. package/dist/cjs/chunk-QW4T5RFB.cjs +0 -374
  295. package/dist/cjs/chunk-QW4T5RFB.cjs.map +0 -1
  296. package/dist/cjs/chunk-RA62RT7K.cjs +0 -43
  297. package/dist/cjs/chunk-RA62RT7K.cjs.map +0 -1
  298. package/dist/cjs/chunk-RXMGXWLH.cjs +0 -352
  299. package/dist/cjs/chunk-RXMGXWLH.cjs.map +0 -1
  300. package/dist/cjs/chunk-SEJO6F5X.cjs +0 -43
  301. package/dist/cjs/chunk-SEJO6F5X.cjs.map +0 -1
  302. package/dist/cjs/chunk-SMKJY53T.cjs +0 -367
  303. package/dist/cjs/chunk-SMKJY53T.cjs.map +0 -1
  304. package/dist/cjs/chunk-SUWC3YAJ.cjs +0 -359
  305. package/dist/cjs/chunk-SUWC3YAJ.cjs.map +0 -1
  306. package/dist/cjs/chunk-SZU5VCQL.cjs +0 -256
  307. package/dist/cjs/chunk-SZU5VCQL.cjs.map +0 -1
  308. package/dist/cjs/chunk-T2CE7W67.cjs +0 -43
  309. package/dist/cjs/chunk-T2CE7W67.cjs.map +0 -1
  310. package/dist/cjs/chunk-TBQF2VIX.cjs +0 -43
  311. package/dist/cjs/chunk-TBQF2VIX.cjs.map +0 -1
  312. package/dist/cjs/chunk-TK2MNTOI.cjs +0 -43
  313. package/dist/cjs/chunk-TK2MNTOI.cjs.map +0 -1
  314. package/dist/cjs/chunk-TOVEWQW2.cjs +0 -43
  315. package/dist/cjs/chunk-TOVEWQW2.cjs.map +0 -1
  316. package/dist/cjs/chunk-TS46OIE7.cjs +0 -252
  317. package/dist/cjs/chunk-TS46OIE7.cjs.map +0 -1
  318. package/dist/cjs/chunk-TYLHXACM.cjs.map +0 -1
  319. package/dist/cjs/chunk-UDLSTQ4I.cjs +0 -21
  320. package/dist/cjs/chunk-UDLSTQ4I.cjs.map +0 -1
  321. package/dist/cjs/chunk-UFVWBUJM.cjs +0 -365
  322. package/dist/cjs/chunk-UFVWBUJM.cjs.map +0 -1
  323. package/dist/cjs/chunk-USDDAUYF.cjs +0 -364
  324. package/dist/cjs/chunk-USDDAUYF.cjs.map +0 -1
  325. package/dist/cjs/chunk-UUWWBHFR.cjs +0 -37
  326. package/dist/cjs/chunk-UUWWBHFR.cjs.map +0 -1
  327. package/dist/cjs/chunk-UVN2DE6N.cjs +0 -368
  328. package/dist/cjs/chunk-UVN2DE6N.cjs.map +0 -1
  329. package/dist/cjs/chunk-VVLC6T66.cjs +0 -37
  330. package/dist/cjs/chunk-VVLC6T66.cjs.map +0 -1
  331. package/dist/cjs/chunk-VZS6VPLE.cjs +0 -26
  332. package/dist/cjs/chunk-VZS6VPLE.cjs.map +0 -1
  333. package/dist/cjs/chunk-W4PRBE6H.cjs.map +0 -1
  334. package/dist/cjs/chunk-WDPCMSZM.cjs +0 -37
  335. package/dist/cjs/chunk-WDPCMSZM.cjs.map +0 -1
  336. package/dist/cjs/chunk-X276C2SQ.cjs +0 -37
  337. package/dist/cjs/chunk-X276C2SQ.cjs.map +0 -1
  338. package/dist/cjs/chunk-X3XEJQRF.cjs +0 -37
  339. package/dist/cjs/chunk-X3XEJQRF.cjs.map +0 -1
  340. package/dist/cjs/chunk-X5ARZJ77.cjs +0 -353
  341. package/dist/cjs/chunk-X5ARZJ77.cjs.map +0 -1
  342. package/dist/cjs/chunk-XIR7UR77.cjs +0 -37
  343. package/dist/cjs/chunk-XIR7UR77.cjs.map +0 -1
  344. package/dist/cjs/chunk-XIXM5VST.cjs +0 -37
  345. package/dist/cjs/chunk-XIXM5VST.cjs.map +0 -1
  346. package/dist/cjs/chunk-XIYB6QQC.cjs +0 -37
  347. package/dist/cjs/chunk-XIYB6QQC.cjs.map +0 -1
  348. package/dist/cjs/chunk-XM22DX5O.cjs +0 -43
  349. package/dist/cjs/chunk-XM22DX5O.cjs.map +0 -1
  350. package/dist/cjs/chunk-XVYFBQRE.cjs +0 -37
  351. package/dist/cjs/chunk-XVYFBQRE.cjs.map +0 -1
  352. package/dist/cjs/chunk-YORAOGFM.cjs +0 -37
  353. package/dist/cjs/chunk-YORAOGFM.cjs.map +0 -1
  354. package/dist/cjs/chunk-YUCTXIN5.cjs +0 -37
  355. package/dist/cjs/chunk-YUCTXIN5.cjs.map +0 -1
  356. package/dist/cjs/chunk-YUEKJCO7.cjs +0 -18
  357. package/dist/cjs/chunk-YUEKJCO7.cjs.map +0 -1
  358. package/dist/cjs/chunk-YVE4DLAT.cjs +0 -43
  359. package/dist/cjs/chunk-YVE4DLAT.cjs.map +0 -1
  360. package/dist/cjs/chunk-ZBD7JCDL.cjs +0 -381
  361. package/dist/cjs/chunk-ZBD7JCDL.cjs.map +0 -1
  362. package/dist/cjs/chunk-ZNMRAQT2.cjs +0 -164
  363. package/dist/cjs/chunk-ZNMRAQT2.cjs.map +0 -1
  364. package/dist/cjs/chunk-ZS3QMRHK.cjs +0 -165
  365. package/dist/cjs/chunk-ZS3QMRHK.cjs.map +0 -1
  366. package/dist/cjs/chunk-ZZ3SXOOC.cjs +0 -37
  367. package/dist/cjs/chunk-ZZ3SXOOC.cjs.map +0 -1
  368. package/dist/esm/chunk-E2RV322Z.js.map +0 -1
  369. package/dist/esm/chunk-EYZ5Z7FG.js.map +0 -1
  370. package/dist/esm/chunk-OCONOO5Z.js.map +0 -1
  371. package/dist/esm/chunk-SHQWRBWS.js.map +0 -1
  372. /package/dist/esm/{chunk-6OHUQ6DV.js.map → chunk-6PT5BUHR.js.map} +0 -0
  373. /package/dist/esm/{chunk-5T7E533R.js.map → chunk-A3UQKLUC.js.map} +0 -0
@@ -1,164 +0,0 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; } var _class;
2
-
3
- var _chunkVZS6VPLEcjs = require('./chunk-VZS6VPLE.cjs');
4
-
5
-
6
- var _chunk466ED5WNcjs = require('./chunk-466ED5WN.cjs');
7
-
8
- // src/modules/a2a/a2a.module.ts
9
- var _crypto = require('crypto');
10
- var _client = require('@a2a-js/sdk/client');
11
- var A2AModule = (_class = class {constructor() { _class.prototype.__init.call(this);_class.prototype.__init2.call(this);_class.prototype.__init3.call(this); }
12
- /** Map of A2A server URLs to their corresponding tool instances */
13
- __init() {this.a2aConnectors = /* @__PURE__ */ new Map()}
14
- /** Map of session IDs to their A2A session state */
15
- __init2() {this.a2aTasks = /* @__PURE__ */ new Map()}
16
- __init3() {this.agentId = _crypto.randomUUID.call(void 0, )}
17
- /* FIXME */
18
- /**
19
- * Registers a new A2A peer server URL for connection.
20
- *
21
- * @param conns - Set of name, url pair
22
- */
23
- async addA2AConnector(conns) {
24
- for (const [name, url] of Object.entries(conns)) {
25
- const conn = new (0, _chunkVZS6VPLEcjs.A2AConnector)(name, url);
26
- this.a2aConnectors.set(name, conn);
27
- }
28
- }
29
- getA2AConnectors() {
30
- const connectors = [];
31
- for (const [name, connector] of this.a2aConnectors.entries()) {
32
- connectors.push({ name, url: connector.url });
33
- }
34
- return connectors;
35
- }
36
- getOrCreateClient(connector) {
37
- connector.client ??= new (0, _client.A2AClient)(connector.url);
38
- return connector.client;
39
- }
40
- /**
41
- * Retrieves tools from all registered A2A peer servers.
42
- *
43
- * Attempts to connect to each registered server, fetch their agent cards,
44
- * and create tool instances. Disables tools for unreachable servers.
45
- *
46
- * @returns Promise resolving to array of available A2A tools
47
- */
48
- async getTools() {
49
- const tools = [];
50
- for (const [name, conn] of this.a2aConnectors.entries()) {
51
- if (!conn.enabled) {
52
- continue;
53
- }
54
- try {
55
- const client = this.getOrCreateClient(conn);
56
- const card = await client.getAgentCard();
57
- const tool = {
58
- toolName: card.name.replaceAll(" ", "-"),
59
- connectorName: name,
60
- protocol: "A2A" /* A2A */,
61
- description: card.description
62
- };
63
- tools.push(tool);
64
- } catch (_error) {
65
- }
66
- }
67
- return tools;
68
- }
69
- /**
70
- * Constructs a message payload for A2A communication.
71
- *
72
- * Includes session context (task ID and context ID) if available
73
- * for maintaining conversation continuity.
74
- *
75
- * @param query - The message content to send
76
- * @param threadId - The session identifier
77
- * @returns Formatted Message object for A2A protocol
78
- */
79
- getMessagePayload(query, threadId) {
80
- const messagePayload = {
81
- messageId: _crypto.randomUUID.call(void 0, ),
82
- kind: "message",
83
- role: "user",
84
- // FIXME: it could be 'agent'
85
- metadata: {
86
- agentId: this.agentId,
87
- type: "CHAT" /* CHAT */
88
- },
89
- parts: [
90
- {
91
- kind: "text",
92
- text: query
93
- }
94
- ],
95
- contextId: threadId
96
- };
97
- if (this.a2aTasks.has(threadId)) {
98
- messagePayload.taskId = this.a2aTasks.get(threadId);
99
- }
100
- return messagePayload;
101
- }
102
- /**
103
- * Executes an A2A tool by sending a message to the remote agent.
104
- *
105
- * Handles streaming responses, maintains session state, and extracts
106
- * text content from various event types in the response stream.
107
- *
108
- * @param tool - The A2ATool instance to use
109
- * @param query - The message to send to the agent
110
- * @param threadId - The session identifier for context tracking
111
- * @returns Promise resolving to array of text responses from the agent
112
- */
113
- async useTool(tool, query, threadId) {
114
- const finalText = [];
115
- const connector = this.a2aConnectors.get(tool.connectorName);
116
- const messagePayload = this.getMessagePayload(query, threadId);
117
- const params = {
118
- message: messagePayload
119
- };
120
- try {
121
- const client = this.getOrCreateClient(connector);
122
- const stream = client.sendMessageStream(params);
123
- for await (const event of stream) {
124
- if (event.kind === "status-update") {
125
- const typedEvent = event;
126
- if (typedEvent.final && typedEvent.status.state !== "input-required") {
127
- this.a2aTasks.delete(threadId);
128
- }
129
- const texts = _optionalChain([typedEvent, 'access', _ => _.status, 'access', _2 => _2.message, 'optionalAccess', _3 => _3.parts, 'access', _4 => _4.filter, 'call', _5 => _5((part) => part.kind === "text"), 'access', _6 => _6.map, 'call', _7 => _7((part) => part.text), 'access', _8 => _8.join, 'call', _9 => _9("\n")]);
130
- if (texts) {
131
- finalText.push(texts);
132
- }
133
- } else if (event.kind === "message") {
134
- const msg = event;
135
- const taskId = this.a2aTasks.get(threadId);
136
- if (msg.taskId && msg.taskId !== taskId) {
137
- this.a2aTasks.set(threadId, msg.taskId);
138
- }
139
- } else if (event.kind === "task") {
140
- const task = event;
141
- if (task.id !== this.a2aTasks.get(threadId)) {
142
- this.a2aTasks.set(threadId, task.id);
143
- }
144
- } else {
145
- _chunk466ED5WNcjs.loggers.a2a.warn("Received unknown event structure from stream:", {
146
- event
147
- });
148
- }
149
- }
150
- } catch (error) {
151
- _chunk466ED5WNcjs.loggers.a2a.error("Error communicating with agent:", { error });
152
- const toolResult = `[Bot Called A2A Tool ${tool.toolName}]
153
- ${typeof error === "string" ? error : JSON.stringify(error, null, 2)}`;
154
- return toolResult;
155
- }
156
- return `[Bot Called A2A Tool ${tool.toolName}]
157
- ${finalText.join("\n")}`;
158
- }
159
- }, _class);
160
-
161
-
162
-
163
- exports.A2AModule = A2AModule;
164
- //# sourceMappingURL=chunk-ZNMRAQT2.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["/Users/shyun/comcom/ain-agent/ain-adk/dist/cjs/chunk-ZNMRAQT2.cjs","../../src/modules/a2a/a2a.module.ts"],"names":[],"mappings":"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","file":"/Users/shyun/comcom/ain-agent/ain-adk/dist/cjs/chunk-ZNMRAQT2.cjs","sourcesContent":[null,"import { randomUUID } from \"node:crypto\";\nimport type {\n\tAgentCard,\n\tMessage,\n\tMessageSendParams,\n\tTask,\n\tTaskStatusUpdateEvent,\n\tTextPart,\n} from \"@a2a-js/sdk\";\nimport { A2AClient } from \"@a2a-js/sdk/client\";\nimport {\n\tCONNECTOR_PROTOCOL_TYPE,\n\ttype ConnectorTool,\n} from \"@/types/connector.js\";\nimport { ThreadType } from \"@/types/memory.js\";\nimport { loggers } from \"@/utils/logger.js\";\nimport { A2AConnector } from \"./a2a.connector.js\";\n\n/**\n * Module for managing Agent-to-Agent (A2A) protocol connections.\n *\n * This module handles connections to other A2A-compatible agents, manages\n * conversation sessions, and provides an interface for inter-agent communication.\n * Supports multi-turn conversations with task and context tracking.\n */\nexport class A2AModule {\n\t/** Map of A2A server URLs to their corresponding tool instances */\n\tprivate a2aConnectors: Map<string, A2AConnector> = new Map();\n\t/** Map of session IDs to their A2A session state */\n\tprivate a2aTasks: Map<string, string> = new Map();\n\tprivate agentId: string = randomUUID(); /* FIXME */\n\n\t/**\n\t * Registers a new A2A peer server URL for connection.\n\t *\n\t * @param conns - Set of name, url pair\n\t */\n\tpublic async addA2AConnector(conns: {\n\t\t[name: string]: string;\n\t}): Promise<void> {\n\t\tfor (const [name, url] of Object.entries(conns)) {\n\t\t\tconst conn = new A2AConnector(name, url);\n\t\t\tthis.a2aConnectors.set(name, conn);\n\t\t}\n\t}\n\n\tpublic getA2AConnectors(): Array<{name: string, url: string}> {\n\t\tconst connectors: Array<{name: string, url: string}> = [];\n\t\tfor (const [name, connector] of this.a2aConnectors.entries()) {\n\t\t\tconnectors.push({ name, url: connector.url });\n\t\t}\n\t\treturn connectors;\n\t}\n\n\tprivate getOrCreateClient(connector: A2AConnector): A2AClient {\n\t\tconnector.client ??= new A2AClient(connector.url);\n\t\treturn connector.client;\n\t}\n\n\t/**\n\t * Retrieves tools from all registered A2A peer servers.\n\t *\n\t * Attempts to connect to each registered server, fetch their agent cards,\n\t * and create tool instances. Disables tools for unreachable servers.\n\t *\n\t * @returns Promise resolving to array of available A2A tools\n\t */\n\tpublic async getTools(): Promise<ConnectorTool[]> {\n\t\tconst tools: ConnectorTool[] = [];\n\t\tfor (const [name, conn] of this.a2aConnectors.entries()) {\n\t\t\tif (!conn.enabled) {\n\t\t\t\tcontinue; // skip disabled agent\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tconst client = this.getOrCreateClient(conn);\n\t\t\t\tconst card: AgentCard = await client.getAgentCard();\n\t\t\t\t/* TODO: add each skill as tool? */\n\t\t\t\tconst tool: ConnectorTool = {\n\t\t\t\t\ttoolName: card.name.replaceAll(\" \", \"-\"),\n\t\t\t\t\tconnectorName: name,\n\t\t\t\t\tprotocol: CONNECTOR_PROTOCOL_TYPE.A2A,\n\t\t\t\t\tdescription: card.description,\n\t\t\t\t};\n\n\t\t\t\ttools.push(tool);\n\t\t\t} catch (_error: any) {\n\t\t\t\t// Agent not responded, just skip\n\t\t\t}\n\t\t}\n\t\treturn tools;\n\t}\n\n\t/**\n\t * Constructs a message payload for A2A communication.\n\t *\n\t * Includes session context (task ID and context ID) if available\n\t * for maintaining conversation continuity.\n\t *\n\t * @param query - The message content to send\n\t * @param threadId - The session identifier\n\t * @returns Formatted Message object for A2A protocol\n\t */\n\tpublic getMessagePayload(query: string, threadId: string): Message {\n\t\tconst messagePayload: Message = {\n\t\t\tmessageId: randomUUID(),\n\t\t\tkind: \"message\",\n\t\t\trole: \"user\", // FIXME: it could be 'agent'\n\t\t\tmetadata: {\n\t\t\t\tagentId: this.agentId,\n\t\t\t\ttype: ThreadType.CHAT,\n\t\t\t},\n\t\t\tparts: [\n\t\t\t\t{\n\t\t\t\t\tkind: \"text\",\n\t\t\t\t\ttext: query,\n\t\t\t\t},\n\t\t\t],\n\t\t\tcontextId: threadId,\n\t\t};\n\n\t\tif (this.a2aTasks.has(threadId)) {\n\t\t\tmessagePayload.taskId = this.a2aTasks.get(threadId);\n\t\t}\n\n\t\treturn messagePayload;\n\t}\n\n\t/**\n\t * Executes an A2A tool by sending a message to the remote agent.\n\t *\n\t * Handles streaming responses, maintains session state, and extracts\n\t * text content from various event types in the response stream.\n\t *\n\t * @param tool - The A2ATool instance to use\n\t * @param query - The message to send to the agent\n\t * @param threadId - The session identifier for context tracking\n\t * @returns Promise resolving to array of text responses from the agent\n\t */\n\tpublic async useTool(\n\t\ttool: ConnectorTool,\n\t\tquery: string,\n\t\tthreadId: string,\n\t): Promise<string> {\n\t\tconst finalText: string[] = [];\n\t\tconst connector = this.a2aConnectors.get(tool.connectorName);\n\t\tconst messagePayload = this.getMessagePayload(query, threadId);\n\t\tconst params: MessageSendParams = {\n\t\t\tmessage: messagePayload,\n\t\t};\n\n\t\ttry {\n\t\t\tconst client = this.getOrCreateClient(connector!);\n\t\t\tconst stream = client.sendMessageStream(params);\n\t\t\tfor await (const event of stream) {\n\t\t\t\tif (event.kind === \"status-update\") {\n\t\t\t\t\tconst typedEvent = event as TaskStatusUpdateEvent;\n\t\t\t\t\tif (\n\t\t\t\t\t\ttypedEvent.final &&\n\t\t\t\t\t\ttypedEvent.status.state !== \"input-required\"\n\t\t\t\t\t) {\n\t\t\t\t\t\tthis.a2aTasks.delete(threadId);\n\t\t\t\t\t}\n\t\t\t\t\t// TODO: handle 'file', 'data' parts\n\t\t\t\t\tconst texts = typedEvent.status.message?.parts\n\t\t\t\t\t\t.filter((part) => part.kind === \"text\")\n\t\t\t\t\t\t.map((part: TextPart) => part.text)\n\t\t\t\t\t\t.join(\"\\n\");\n\t\t\t\t\tif (texts) {\n\t\t\t\t\t\tfinalText.push(texts);\n\t\t\t\t\t}\n\t\t\t\t} else if (event.kind === \"message\") {\n\t\t\t\t\t// FIXME: handling text in 'message'?\n\t\t\t\t\tconst msg = event as Message;\n\t\t\t\t\tconst taskId = this.a2aTasks.get(threadId);\n\t\t\t\t\tif (msg.taskId && msg.taskId !== taskId) {\n\t\t\t\t\t\tthis.a2aTasks.set(threadId, msg.taskId);\n\t\t\t\t\t}\n\t\t\t\t} else if (event.kind === \"task\") {\n\t\t\t\t\t// establishing the Task ID\n\t\t\t\t\tconst task = event as Task;\n\t\t\t\t\tif (task.id !== this.a2aTasks.get(threadId)) {\n\t\t\t\t\t\tthis.a2aTasks.set(threadId, task.id);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tloggers.a2a.warn(\"Received unknown event structure from stream:\", {\n\t\t\t\t\t\tevent,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tloggers.a2a.error(\"Error communicating with agent:\", { error });\n\t\t\tconst toolResult = `[Bot Called A2A Tool ${tool.toolName}]\\n${typeof error === \"string\" ? error : JSON.stringify(error, null, 2)}`;\n\t\t\treturn toolResult;\n\t\t}\n\n\t\treturn `[Bot Called A2A Tool ${tool.toolName}]\\n${finalText.join(\"\\n\")}`;\n\t}\n}\n"]}
@@ -1,165 +0,0 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; } var _class;
2
-
3
- var _chunkOVTUSYSUcjs = require('./chunk-OVTUSYSU.cjs');
4
-
5
-
6
- var _chunk466ED5WNcjs = require('./chunk-466ED5WN.cjs');
7
-
8
- // src/modules/a2a/a2a.module.ts
9
- var _crypto = require('crypto');
10
- var _client = require('@a2a-js/sdk/client');
11
- var A2AModule = (_class = class {constructor() { _class.prototype.__init.call(this);_class.prototype.__init2.call(this);_class.prototype.__init3.call(this); }
12
- /** Map of A2A server URLs to their corresponding tool instances */
13
- __init() {this.a2aConnectors = /* @__PURE__ */ new Map()}
14
- /** Map of session IDs to their A2A session state */
15
- __init2() {this.a2aTasks = /* @__PURE__ */ new Map()}
16
- __init3() {this.agentId = _crypto.randomUUID.call(void 0, )}
17
- /* FIXME */
18
- /**
19
- * Registers a new A2A peer server URL for connection.
20
- *
21
- * @param conns - Set of name, url pair
22
- */
23
- async addA2AConnector(conns) {
24
- for (const [name, url] of Object.entries(conns)) {
25
- const conn = new (0, _chunkOVTUSYSUcjs.A2AConnector)(name, url);
26
- this.a2aConnectors.set(name, conn);
27
- }
28
- }
29
- getA2AConnectors() {
30
- const connectors = [];
31
- for (const [name, connector] of this.a2aConnectors.entries()) {
32
- connectors.push({ name, url: connector.url });
33
- }
34
- return connectors;
35
- }
36
- getOrCreateClient(connector) {
37
- connector.client ??= new (0, _client.A2AClient)(connector.url);
38
- console.log(connector.client);
39
- return connector.client;
40
- }
41
- /**
42
- * Retrieves tools from all registered A2A peer servers.
43
- *
44
- * Attempts to connect to each registered server, fetch their agent cards,
45
- * and create tool instances. Disables tools for unreachable servers.
46
- *
47
- * @returns Promise resolving to array of available A2A tools
48
- */
49
- async getTools() {
50
- const tools = [];
51
- for (const [name, conn] of this.a2aConnectors.entries()) {
52
- if (!conn.enabled) {
53
- continue;
54
- }
55
- try {
56
- const client = this.getOrCreateClient(conn);
57
- const card = await client.getAgentCard();
58
- const tool = {
59
- toolName: card.name.replaceAll(" ", "-"),
60
- connectorName: name,
61
- protocol: "A2A" /* A2A */,
62
- description: card.description
63
- };
64
- tools.push(tool);
65
- } catch (_error) {
66
- }
67
- }
68
- return tools;
69
- }
70
- /**
71
- * Constructs a message payload for A2A communication.
72
- *
73
- * Includes session context (task ID and context ID) if available
74
- * for maintaining conversation continuity.
75
- *
76
- * @param query - The message content to send
77
- * @param threadId - The session identifier
78
- * @returns Formatted Message object for A2A protocol
79
- */
80
- getMessagePayload(query, threadId) {
81
- const messagePayload = {
82
- messageId: _crypto.randomUUID.call(void 0, ),
83
- kind: "message",
84
- role: "user",
85
- // FIXME: it could be 'agent'
86
- metadata: {
87
- agentId: this.agentId,
88
- type: "CHAT" /* CHAT */
89
- },
90
- parts: [
91
- {
92
- kind: "text",
93
- text: query
94
- }
95
- ],
96
- contextId: threadId
97
- };
98
- if (this.a2aTasks.has(threadId)) {
99
- messagePayload.taskId = this.a2aTasks.get(threadId);
100
- }
101
- return messagePayload;
102
- }
103
- /**
104
- * Executes an A2A tool by sending a message to the remote agent.
105
- *
106
- * Handles streaming responses, maintains session state, and extracts
107
- * text content from various event types in the response stream.
108
- *
109
- * @param tool - The A2ATool instance to use
110
- * @param query - The message to send to the agent
111
- * @param threadId - The session identifier for context tracking
112
- * @returns Promise resolving to array of text responses from the agent
113
- */
114
- async useTool(tool, query, threadId) {
115
- const finalText = [];
116
- const connector = this.a2aConnectors.get(tool.connectorName);
117
- const messagePayload = this.getMessagePayload(query, threadId);
118
- const params = {
119
- message: messagePayload
120
- };
121
- try {
122
- const client = this.getOrCreateClient(connector);
123
- const stream = client.sendMessageStream(params);
124
- for await (const event of stream) {
125
- if (event.kind === "status-update") {
126
- const typedEvent = event;
127
- if (typedEvent.final && typedEvent.status.state !== "input-required") {
128
- this.a2aTasks.delete(threadId);
129
- }
130
- const texts = _optionalChain([typedEvent, 'access', _ => _.status, 'access', _2 => _2.message, 'optionalAccess', _3 => _3.parts, 'access', _4 => _4.filter, 'call', _5 => _5((part) => part.kind === "text"), 'access', _6 => _6.map, 'call', _7 => _7((part) => part.text), 'access', _8 => _8.join, 'call', _9 => _9("\n")]);
131
- if (texts) {
132
- finalText.push(texts);
133
- }
134
- } else if (event.kind === "message") {
135
- const msg = event;
136
- const taskId = this.a2aTasks.get(threadId);
137
- if (msg.taskId && msg.taskId !== taskId) {
138
- this.a2aTasks.set(threadId, msg.taskId);
139
- }
140
- } else if (event.kind === "task") {
141
- const task = event;
142
- if (task.id !== this.a2aTasks.get(threadId)) {
143
- this.a2aTasks.set(threadId, task.id);
144
- }
145
- } else {
146
- _chunk466ED5WNcjs.loggers.a2a.warn("Received unknown event structure from stream:", {
147
- event
148
- });
149
- }
150
- }
151
- } catch (error) {
152
- _chunk466ED5WNcjs.loggers.a2a.error("Error communicating with agent:", { error });
153
- const toolResult = `[Bot Called A2A Tool ${tool.toolName}]
154
- ${typeof error === "string" ? error : JSON.stringify(error, null, 2)}`;
155
- return toolResult;
156
- }
157
- return `[Bot Called A2A Tool ${tool.toolName}]
158
- ${finalText.join("\n")}`;
159
- }
160
- }, _class);
161
-
162
-
163
-
164
- exports.A2AModule = A2AModule;
165
- //# sourceMappingURL=chunk-ZS3QMRHK.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["/Users/shyun/comcom/ain-agent/ain-adk/dist/cjs/chunk-ZS3QMRHK.cjs","../../src/modules/a2a/a2a.module.ts"],"names":[],"mappings":"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","file":"/Users/shyun/comcom/ain-agent/ain-adk/dist/cjs/chunk-ZS3QMRHK.cjs","sourcesContent":[null,"import { randomUUID } from \"node:crypto\";\nimport type {\n\tAgentCard,\n\tMessage,\n\tMessageSendParams,\n\tTask,\n\tTaskStatusUpdateEvent,\n\tTextPart,\n} from \"@a2a-js/sdk\";\nimport { A2AClient } from \"@a2a-js/sdk/client\";\nimport {\n\tCONNECTOR_PROTOCOL_TYPE,\n\ttype ConnectorTool,\n} from \"@/types/connector.js\";\nimport { ThreadType } from \"@/types/memory.js\";\nimport { loggers } from \"@/utils/logger.js\";\nimport { A2AConnector } from \"./a2a.connector.js\";\n\n/**\n * Module for managing Agent-to-Agent (A2A) protocol connections.\n *\n * This module handles connections to other A2A-compatible agents, manages\n * conversation sessions, and provides an interface for inter-agent communication.\n * Supports multi-turn conversations with task and context tracking.\n */\nexport class A2AModule {\n\t/** Map of A2A server URLs to their corresponding tool instances */\n\tprivate a2aConnectors: Map<string, A2AConnector> = new Map();\n\t/** Map of session IDs to their A2A session state */\n\tprivate a2aTasks: Map<string, string> = new Map();\n\tprivate agentId: string = randomUUID(); /* FIXME */\n\n\t/**\n\t * Registers a new A2A peer server URL for connection.\n\t *\n\t * @param conns - Set of name, url pair\n\t */\n\tpublic async addA2AConnector(conns: {\n\t\t[name: string]: string;\n\t}): Promise<void> {\n\t\tfor (const [name, url] of Object.entries(conns)) {\n\t\t\tconst conn = new A2AConnector(name, url);\n\t\t\tthis.a2aConnectors.set(name, conn);\n\t\t}\n\t}\n\n\tpublic getA2AConnectors(): Array<{ name: string; url: string }> {\n\t\tconst connectors: Array<{ name: string; url: string }> = [];\n\t\tfor (const [name, connector] of this.a2aConnectors.entries()) {\n\t\t\tconnectors.push({ name, url: connector.url });\n\t\t}\n\t\treturn connectors;\n\t}\n\n\tprivate getOrCreateClient(connector: A2AConnector): A2AClient {\n\t\tconnector.client ??= new A2AClient(connector.url);\n\t\tconsole.log(connector.client);\n\t\treturn connector.client;\n\t}\n\n\t/**\n\t * Retrieves tools from all registered A2A peer servers.\n\t *\n\t * Attempts to connect to each registered server, fetch their agent cards,\n\t * and create tool instances. Disables tools for unreachable servers.\n\t *\n\t * @returns Promise resolving to array of available A2A tools\n\t */\n\tpublic async getTools(): Promise<ConnectorTool[]> {\n\t\tconst tools: ConnectorTool[] = [];\n\t\tfor (const [name, conn] of this.a2aConnectors.entries()) {\n\t\t\tif (!conn.enabled) {\n\t\t\t\tcontinue; // skip disabled agent\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tconst client = this.getOrCreateClient(conn);\n\t\t\t\tconst card: AgentCard = await client.getAgentCard();\n\t\t\t\t/* TODO: add each skill as tool? */\n\t\t\t\tconst tool: ConnectorTool = {\n\t\t\t\t\ttoolName: card.name.replaceAll(\" \", \"-\"),\n\t\t\t\t\tconnectorName: name,\n\t\t\t\t\tprotocol: CONNECTOR_PROTOCOL_TYPE.A2A,\n\t\t\t\t\tdescription: card.description,\n\t\t\t\t};\n\n\t\t\t\ttools.push(tool);\n\t\t\t} catch (_error: any) {\n\t\t\t\t// Agent not responded, just skip\n\t\t\t}\n\t\t}\n\t\treturn tools;\n\t}\n\n\t/**\n\t * Constructs a message payload for A2A communication.\n\t *\n\t * Includes session context (task ID and context ID) if available\n\t * for maintaining conversation continuity.\n\t *\n\t * @param query - The message content to send\n\t * @param threadId - The session identifier\n\t * @returns Formatted Message object for A2A protocol\n\t */\n\tpublic getMessagePayload(query: string, threadId: string): Message {\n\t\tconst messagePayload: Message = {\n\t\t\tmessageId: randomUUID(),\n\t\t\tkind: \"message\",\n\t\t\trole: \"user\", // FIXME: it could be 'agent'\n\t\t\tmetadata: {\n\t\t\t\tagentId: this.agentId,\n\t\t\t\ttype: ThreadType.CHAT,\n\t\t\t},\n\t\t\tparts: [\n\t\t\t\t{\n\t\t\t\t\tkind: \"text\",\n\t\t\t\t\ttext: query,\n\t\t\t\t},\n\t\t\t],\n\t\t\tcontextId: threadId,\n\t\t};\n\n\t\tif (this.a2aTasks.has(threadId)) {\n\t\t\tmessagePayload.taskId = this.a2aTasks.get(threadId);\n\t\t}\n\n\t\treturn messagePayload;\n\t}\n\n\t/**\n\t * Executes an A2A tool by sending a message to the remote agent.\n\t *\n\t * Handles streaming responses, maintains session state, and extracts\n\t * text content from various event types in the response stream.\n\t *\n\t * @param tool - The A2ATool instance to use\n\t * @param query - The message to send to the agent\n\t * @param threadId - The session identifier for context tracking\n\t * @returns Promise resolving to array of text responses from the agent\n\t */\n\tpublic async useTool(\n\t\ttool: ConnectorTool,\n\t\tquery: string,\n\t\tthreadId: string,\n\t): Promise<string> {\n\t\tconst finalText: string[] = [];\n\t\tconst connector = this.a2aConnectors.get(tool.connectorName);\n\t\tconst messagePayload = this.getMessagePayload(query, threadId);\n\t\tconst params: MessageSendParams = {\n\t\t\tmessage: messagePayload,\n\t\t};\n\n\t\ttry {\n\t\t\tconst client = this.getOrCreateClient(connector!);\n\t\t\tconst stream = client.sendMessageStream(params);\n\t\t\tfor await (const event of stream) {\n\t\t\t\tif (event.kind === \"status-update\") {\n\t\t\t\t\tconst typedEvent = event as TaskStatusUpdateEvent;\n\t\t\t\t\tif (\n\t\t\t\t\t\ttypedEvent.final &&\n\t\t\t\t\t\ttypedEvent.status.state !== \"input-required\"\n\t\t\t\t\t) {\n\t\t\t\t\t\tthis.a2aTasks.delete(threadId);\n\t\t\t\t\t}\n\t\t\t\t\t// TODO: handle 'file', 'data' parts\n\t\t\t\t\tconst texts = typedEvent.status.message?.parts\n\t\t\t\t\t\t.filter((part) => part.kind === \"text\")\n\t\t\t\t\t\t.map((part: TextPart) => part.text)\n\t\t\t\t\t\t.join(\"\\n\");\n\t\t\t\t\tif (texts) {\n\t\t\t\t\t\tfinalText.push(texts);\n\t\t\t\t\t}\n\t\t\t\t} else if (event.kind === \"message\") {\n\t\t\t\t\t// FIXME: handling text in 'message'?\n\t\t\t\t\tconst msg = event as Message;\n\t\t\t\t\tconst taskId = this.a2aTasks.get(threadId);\n\t\t\t\t\tif (msg.taskId && msg.taskId !== taskId) {\n\t\t\t\t\t\tthis.a2aTasks.set(threadId, msg.taskId);\n\t\t\t\t\t}\n\t\t\t\t} else if (event.kind === \"task\") {\n\t\t\t\t\t// establishing the Task ID\n\t\t\t\t\tconst task = event as Task;\n\t\t\t\t\tif (task.id !== this.a2aTasks.get(threadId)) {\n\t\t\t\t\t\tthis.a2aTasks.set(threadId, task.id);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tloggers.a2a.warn(\"Received unknown event structure from stream:\", {\n\t\t\t\t\t\tevent,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tloggers.a2a.error(\"Error communicating with agent:\", { error });\n\t\t\tconst toolResult = `[Bot Called A2A Tool ${tool.toolName}]\\n${typeof error === \"string\" ? error : JSON.stringify(error, null, 2)}`;\n\t\t\treturn toolResult;\n\t\t}\n\n\t\treturn `[Bot Called A2A Tool ${tool.toolName}]\\n${finalText.join(\"\\n\")}`;\n\t}\n}\n"]}
@@ -1,37 +0,0 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
-
3
- var _chunkBDQDZXZIcjs = require('./chunk-BDQDZXZI.cjs');
4
-
5
-
6
- var _chunkFCIBDAL5cjs = require('./chunk-FCIBDAL5.cjs');
7
-
8
-
9
- var _chunkICFTUZP5cjs = require('./chunk-ICFTUZP5.cjs');
10
-
11
- // src/routes/a2a.routes.ts
12
- var _server = require('@a2a-js/sdk/server');
13
- var _express = require('express');
14
- var createA2ARouter = (agent) => {
15
- const router = _express.Router.call(void 0, );
16
- const taskStore = new (0, _server.InMemoryTaskStore)();
17
- const queryStreamService = new (0, _chunkFCIBDAL5cjs.QueryStreamService)(
18
- agent.modelModule,
19
- agent.a2aModule,
20
- agent.mcpModule,
21
- agent.memoryModule,
22
- agent.manifest.prompts
23
- );
24
- const a2aService = new (0, _chunkBDQDZXZIcjs.A2AService)(queryStreamService);
25
- const a2aController = new (0, _chunkICFTUZP5cjs.A2AController)(
26
- a2aService,
27
- taskStore,
28
- agent.generateAgentCard
29
- );
30
- router.post("/", a2aController.handleA2ARequest);
31
- return router;
32
- };
33
-
34
-
35
-
36
- exports.createA2ARouter = createA2ARouter;
37
- //# sourceMappingURL=chunk-ZZ3SXOOC.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["/Users/shyun/comcom/ain-agent/ain-adk/dist/cjs/chunk-ZZ3SXOOC.cjs","../../src/routes/a2a.routes.ts"],"names":[],"mappings":"AAAA;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACA;ACVA,4CAAkC;AAClC,kCAAuB;AAchB,IAAM,gBAAA,EAAkB,CAAC,KAAA,EAAA,GAA4B;AAC3D,EAAA,MAAM,OAAA,EAAS,6BAAA,CAAO;AAGtB,EAAA,MAAM,UAAA,EAAY,IAAI,8BAAA,CAAkB,CAAA;AACxC,EAAA,MAAM,mBAAA,EAAqB,IAAI,yCAAA;AAAA,IAC9B,KAAA,CAAM,WAAA;AAAA,IACN,KAAA,CAAM,SAAA;AAAA,IACN,KAAA,CAAM,SAAA;AAAA,IACN,KAAA,CAAM,YAAA;AAAA,IACN,KAAA,CAAM,QAAA,CAAS;AAAA,EAChB,CAAA;AACA,EAAA,MAAM,WAAA,EAAa,IAAI,iCAAA,CAAW,kBAAkB,CAAA;AACpD,EAAA,MAAM,cAAA,EAAgB,IAAI,oCAAA;AAAA,IACzB,UAAA;AAAA,IACA,SAAA;AAAA,IACA,KAAA,CAAM;AAAA,EACP,CAAA;AAGA,EAAA,MAAA,CAAO,IAAA,CAAK,GAAA,EAAK,aAAA,CAAc,gBAAgB,CAAA;AAE/C,EAAA,OAAO,MAAA;AACR,CAAA;ADNA;AACA;AACE;AACF,0CAAC","file":"/Users/shyun/comcom/ain-agent/ain-adk/dist/cjs/chunk-ZZ3SXOOC.cjs","sourcesContent":[null,"import { InMemoryTaskStore } from \"@a2a-js/sdk/server\";\nimport { Router } from \"express\";\nimport type { AINAgent } from \"@/index.js\";\nimport { QueryStreamService } from \"@/services/query-stream.service.js\";\nimport { A2AController } from \"../controllers/a2a.controller.js\";\nimport { A2AService } from \"../services/a2a.service.js\";\n\n/**\n * Creates and configures the A2A router.\n * This function is a \"composition root\" for the A2A feature,\n * creating and injecting all necessary dependencies.\n * @param intentAnalyzer The core intent analyzer.\n * @param agentCard The agent's card.\n * @returns An Express Router instance.\n */\nexport const createA2ARouter = (agent: AINAgent): Router => {\n\tconst router = Router();\n\n\t// 1. Create dependencies for the A2A feature\n\tconst taskStore = new InMemoryTaskStore();\n\tconst queryStreamService = new QueryStreamService(\n\t\tagent.modelModule,\n\t\tagent.a2aModule,\n\t\tagent.mcpModule,\n\t\tagent.memoryModule,\n\t\tagent.manifest.prompts,\n\t);\n\tconst a2aService = new A2AService(queryStreamService);\n\tconst a2aController = new A2AController(\n\t\ta2aService,\n\t\ttaskStore,\n\t\tagent.generateAgentCard,\n\t);\n\n\t// 2. Define the route\n\trouter.post(\"/\", a2aController.handleA2ARequest);\n\n\treturn router;\n};\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/services/intents/fulfill-stream.service.ts"],"sourcesContent":["import { randomUUID } from \"node:crypto\";\nimport type {\n\tA2AModule,\n\tMCPModule,\n\tMemoryModule,\n\tModelModule,\n} from \"@/modules\";\nimport type { AinAgentPrompts } from \"@/types/agent\";\nimport { CONNECTOR_PROTOCOL_TYPE, type ConnectorTool } from \"@/types/connector\";\nimport {\n\ttype Intent,\n\ttype MessageObject,\n\tMessageRole,\n\ttype ThreadObject,\n\ttype TriggeredIntent,\n} from \"@/types/memory\";\nimport type { StreamEvent } from \"@/types/stream\";\nimport { loggers } from \"@/utils/logger\";\n\nexport class IntentFulfillStreamService {\n\tprivate modelModule: ModelModule;\n\tprivate a2aModule?: A2AModule;\n\tprivate mcpModule?: MCPModule;\n\tprivate memoryModule?: MemoryModule;\n\tprivate prompts?: AinAgentPrompts;\n\n\tconstructor(\n\t\tmodelModule: ModelModule,\n\t\ta2aModule?: A2AModule,\n\t\tmcpModule?: MCPModule,\n\t\tmemoryModule?: MemoryModule,\n\t\tprompts?: AinAgentPrompts,\n\t) {\n\t\tthis.modelModule = modelModule;\n\t\tthis.a2aModule = a2aModule;\n\t\tthis.mcpModule = mcpModule;\n\t\tthis.memoryModule = memoryModule;\n\t\tthis.prompts = prompts;\n\t}\n\n\tprivate async addToThreadMessages(\n\t\tthread: ThreadObject,\n\t\tparams: { role: MessageRole; content: string; metadata?: any },\n\t) {\n\t\ttry {\n\t\t\tconst threadMemory = this.memoryModule?.getThreadMemory();\n\t\t\tconst { userId, threadId } = thread;\n\t\t\tconst newMessage: MessageObject = {\n\t\t\t\tmessageId: randomUUID(),\n\t\t\t\trole: params.role,\n\t\t\t\ttimestamp: Date.now(),\n\t\t\t\tcontent: { type: \"text\", parts: [params.content] },\n\t\t\t\tmetadata: params.metadata,\n\t\t\t};\n\t\t\tthread.messages.push(newMessage);\n\t\t\tawait threadMemory?.addMessagesToThread(userId, threadId, [newMessage]);\n\t\t} catch (error) {\n\t\t\tloggers.intentStream.error(\"Error adding message to thread\", error);\n\t\t}\n\t}\n\n\t/**\n\t * Fulfills the detected intent by generating a streaming response.\n\t *\n\t * Manages the complete inference loop including:\n\t * - Loading prompts and conversation history\n\t * - Collecting available tools from modules\n\t * - Executing model inference with tool support\n\t * - Processing tool calls iteratively until completion\n\t * - Streaming results as Server-Sent Events\n\t *\n\t * @param query - The user's input query\n\t * @param threadId - Thread identifier for context\n\t * @param thread - Previous conversation history\n\t * @param intent - Optional detected intent with custom prompt\n\t * @returns AsyncGenerator yielding StreamEvent objects\n\t */\n\tpublic async *intentFulfilling(\n\t\tquery: string,\n\t\tthread: ThreadObject,\n\t\tintent?: Intent,\n\t): AsyncGenerator<StreamEvent> {\n\t\tconst systemPrompt = `\nToday is ${new Date().toLocaleDateString()}.\n\n${this.prompts?.agent || \"\"}\n\n${this.prompts?.system || \"\"}\n\n${intent?.prompt || \"\"}\n\t`.trim();\n\n\t\tconst modelInstance = this.modelModule.getModel();\n\t\tconst messages = modelInstance.generateMessages({\n\t\t\tquery,\n\t\t\tthread,\n\t\t\tsystemPrompt: systemPrompt.trim(),\n\t\t});\n\n\t\tconst tools: ConnectorTool[] = [];\n\t\tthis.mcpModule && tools.push(...this.mcpModule.getTools());\n\t\tthis.a2aModule && tools.push(...(await this.a2aModule.getTools()));\n\n\t\tconst functions = modelInstance.convertToolsToFunctions(tools);\n\n\t\tconst processList: string[] = [];\n\n\t\twhile (true) {\n\t\t\tconst responseStream = await modelInstance.fetchStreamWithContextMessage(\n\t\t\t\tmessages,\n\t\t\t\tfunctions,\n\t\t\t);\n\n\t\t\tconst assembledToolCalls: {\n\t\t\t\tid: string;\n\t\t\t\ttype: \"function\";\n\t\t\t\tfunction: { name: string; arguments: string };\n\t\t\t}[] = [];\n\n\t\t\tloggers.intentStream.info(\"messages\", { messages });\n\n\t\t\tfor await (const chunk of responseStream) {\n\t\t\t\tconst delta = chunk.delta;\n\t\t\t\tif (delta?.tool_calls) {\n\t\t\t\t\tfor (const { index, id, function: func } of delta.tool_calls) {\n\t\t\t\t\t\tassembledToolCalls[index] ??= {\n\t\t\t\t\t\t\tid: \"\",\n\t\t\t\t\t\t\ttype: \"function\",\n\t\t\t\t\t\t\tfunction: { name: \"\", arguments: \"\" },\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tif (id) assembledToolCalls[index].id = id;\n\t\t\t\t\t\tif (func?.name) assembledToolCalls[index].function.name = func.name;\n\t\t\t\t\t\tif (func?.arguments)\n\t\t\t\t\t\t\tassembledToolCalls[index].function.arguments += func.arguments;\n\t\t\t\t\t}\n\t\t\t\t} else if (chunk.delta?.content) {\n\t\t\t\t\tyield {\n\t\t\t\t\t\tevent: \"text_chunk\",\n\t\t\t\t\t\tdata: { delta: chunk.delta.content },\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tloggers.intentStream.debug(\"assembledToolCalls\", {\n\t\t\t\tassembledToolCalls,\n\t\t\t});\n\n\t\t\tif (assembledToolCalls.length > 0) {\n\t\t\t\tfor (const toolCall of assembledToolCalls) {\n\t\t\t\t\tconst toolCallId = randomUUID();\n\t\t\t\t\tconst toolName = toolCall.function.name;\n\t\t\t\t\tconst selectedTool = tools.filter(\n\t\t\t\t\t\t(tool) => tool.toolName === toolName,\n\t\t\t\t\t)[0];\n\n\t\t\t\t\tlet toolResult = \"\";\n\t\t\t\t\tif (\n\t\t\t\t\t\tthis.mcpModule &&\n\t\t\t\t\t\tselectedTool.protocol === CONNECTOR_PROTOCOL_TYPE.MCP\n\t\t\t\t\t) {\n\t\t\t\t\t\tconst toolArgs = JSON.parse(toolCall.function.arguments) as\n\t\t\t\t\t\t\t| { [x: string]: unknown }\n\t\t\t\t\t\t\t| undefined;\n\t\t\t\t\t\tyield {\n\t\t\t\t\t\t\tevent: \"tool_start\",\n\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\ttoolCallId,\n\t\t\t\t\t\t\t\tprotocol: CONNECTOR_PROTOCOL_TYPE.MCP,\n\t\t\t\t\t\t\t\ttoolName,\n\t\t\t\t\t\t\t\ttoolArgs,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t};\n\t\t\t\t\t\tloggers.intent.info(\"MCP tool call\", { toolName, toolArgs });\n\t\t\t\t\t\ttoolResult = await this.mcpModule.useTool(selectedTool, toolArgs);\n\t\t\t\t\t} else if (\n\t\t\t\t\t\tthis.a2aModule &&\n\t\t\t\t\t\tselectedTool.protocol === CONNECTOR_PROTOCOL_TYPE.A2A\n\t\t\t\t\t) {\n\t\t\t\t\t\tyield {\n\t\t\t\t\t\t\tevent: \"tool_start\",\n\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\ttoolCallId,\n\t\t\t\t\t\t\t\tprotocol: CONNECTOR_PROTOCOL_TYPE.A2A,\n\t\t\t\t\t\t\t\ttoolName,\n\t\t\t\t\t\t\t\ttoolArgs: null,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t};\n\t\t\t\t\t\tloggers.intent.info(\"A2A tool call\", { toolName });\n\t\t\t\t\t\ttoolResult = await this.a2aModule.useTool(\n\t\t\t\t\t\t\tselectedTool,\n\t\t\t\t\t\t\tquery,\n\t\t\t\t\t\t\tthread.threadId,\n\t\t\t\t\t\t);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Unrecognized tool type. It cannot be happened...\n\t\t\t\t\t\tloggers.intent.warn(\n\t\t\t\t\t\t\t`Unrecognized tool type: ${selectedTool.protocol}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tyield {\n\t\t\t\t\t\tevent: \"tool_output\",\n\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\ttoolCallId,\n\t\t\t\t\t\t\tprotocol: selectedTool.protocol,\n\t\t\t\t\t\t\ttoolName,\n\t\t\t\t\t\t\tresult: toolResult,\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\t\t\t\t\tloggers.intent.debug(\"toolResult\", { toolResult });\n\n\t\t\t\t\tprocessList.push(toolResult);\n\t\t\t\t\tmodelInstance.appendMessages(messages, toolResult);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Detects the intent from context.\n\t *\n\t * @param intents - The user's input query\n\t * @param thread - The thread history\n\t * @returns The detected intent\n\t */\n\tpublic async *intentFulfillStream(\n\t\tintents: Array<TriggeredIntent>,\n\t\tthread: ThreadObject,\n\t): AsyncGenerator<StreamEvent> {\n\t\tlet finalResponseText = \"\";\n\t\tfor (let i = 0; i < intents.length; i++) {\n\t\t\tconst { subquery, intent, actionPlan } = intents[i];\n\t\t\tloggers.intent.info(`Process query: ${subquery}, ${intent?.name}`);\n\t\t\tloggers.intent.info(`Action plan: ${actionPlan}`);\n\n\t\t\t// only use for inference, not stored in memory\n\t\t\tfinalResponseText !== \"\" &&\n\t\t\t\tthread.messages.push({\n\t\t\t\t\tmessageId: randomUUID(),\n\t\t\t\t\trole: MessageRole.MODEL,\n\t\t\t\t\ttimestamp: Date.now(),\n\t\t\t\t\tcontent: { type: \"text\", parts: [finalResponseText] },\n\t\t\t\t\tmetadata: { isThinking: true },\n\t\t\t\t});\n\t\t\tawait this.addToThreadMessages(thread, {\n\t\t\t\trole: MessageRole.MODEL,\n\t\t\t\tcontent: subquery,\n\t\t\t\tmetadata: {\n\t\t\t\t\tsubquery,\n\t\t\t\t\tisThinking: true,\n\t\t\t\t\tactionPlan: actionPlan,\n\t\t\t\t},\n\t\t\t});\n\n\t\t\tyield {\n\t\t\t\tevent: \"intent_process\",\n\t\t\t\tdata: { subquery, actionPlan: actionPlan || \"\" },\n\t\t\t};\n\n\t\t\tconst stream = this.intentFulfilling(subquery, thread, intent);\n\n\t\t\tfinalResponseText = \"\";\n\t\t\tfor await (const event of stream) {\n\t\t\t\tif (event.event === \"text_chunk\" && event.data.delta) {\n\t\t\t\t\tloggers.intentStream.debug(\"text_chunk\", { event });\n\t\t\t\t\tfinalResponseText += event.data.delta;\n\t\t\t\t}\n\n\t\t\t\tif (event.event === \"text_chunk\" && i !== intents.length - 1) {\n\t\t\t\t\tcontinue; // skip intermediate text_chunk events\n\t\t\t\t}\n\t\t\t\tyield event;\n\t\t\t}\n\t\t}\n\n\t\tawait this.addToThreadMessages(thread, {\n\t\t\trole: MessageRole.MODEL,\n\t\t\tcontent: finalResponseText,\n\t\t});\n\t}\n}\n"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/services/intents/fulfill.service.ts"],"sourcesContent":["import { randomUUID } from \"node:crypto\";\nimport type {\n\tA2AModule,\n\tMCPModule,\n\tMemoryModule,\n\tModelModule,\n} from \"@/modules\";\nimport type { AinAgentPrompts } from \"@/types/agent\";\nimport { CONNECTOR_PROTOCOL_TYPE, type ConnectorTool } from \"@/types/connector\";\nimport {\n\ttype Intent,\n\ttype MessageObject,\n\tMessageRole,\n\ttype ThreadObject,\n\ttype TriggeredIntent,\n} from \"@/types/memory\";\nimport { StreamEvent } from \"@/types/stream\";\nimport { loggers } from \"@/utils/logger\";\n\nexport class IntentFulfillService {\n\tprivate modelModule: ModelModule;\n\tprivate a2aModule?: A2AModule;\n\tprivate mcpModule?: MCPModule;\n\tprivate memoryModule?: MemoryModule;\n\tprivate prompts?: AinAgentPrompts;\n\n\tconstructor(\n\t\tmodelModule: ModelModule,\n\t\ta2aModule?: A2AModule,\n\t\tmcpModule?: MCPModule,\n\t\tmemoryModule?: MemoryModule,\n\t\tprompts?: AinAgentPrompts,\n\t) {\n\t\tthis.modelModule = modelModule;\n\t\tthis.a2aModule = a2aModule;\n\t\tthis.mcpModule = mcpModule;\n\t\tthis.memoryModule = memoryModule;\n\t\tthis.prompts = prompts;\n\t}\n\n\tprivate async addToThreadMessages(\n\t\tthread: ThreadObject,\n\t\tparams: { role: MessageRole; content: string; metadata?: any },\n\t) {\n\t\ttry {\n\t\t\tconst threadMemory = this.memoryModule?.getThreadMemory();\n\t\t\tconst { userId, threadId } = thread;\n\t\t\tconst newMessage: MessageObject = {\n\t\t\t\tmessageId: randomUUID(),\n\t\t\t\trole: params.role,\n\t\t\t\ttimestamp: Date.now(),\n\t\t\t\tcontent: { type: \"text\", parts: [params.content] },\n\t\t\t\tmetadata: params.metadata,\n\t\t\t};\n\t\t\tthread.messages.push(newMessage);\n\t\t\tawait threadMemory?.addMessagesToThread(userId, threadId, [newMessage]);\n\t\t} catch (error) {\n\t\t\tloggers.intentStream.error(\"Error adding message to thread\", error);\n\t\t}\n\t}\n\n\t/**\n\t * Fulfills the detected intent by generating a streaming response.\n\t *\n\t * Manages the complete inference loop including:\n\t * - Loading prompts and conversation history\n\t * - Collecting available tools from modules\n\t * - Executing model inference with tool support\n\t * - Processing tool calls iteratively until completion\n\t * - Streaming results as Server-Sent Events\n\t *\n\t * @param query - The user's input query\n\t * @param threadId - Thread identifier for context\n\t * @param thread - Previous conversation history\n\t * @param intent - Optional detected intent with custom prompt\n\t * @returns AsyncGenerator yielding StreamEvent objects\n\t */\n\tpublic async intentFulfilling(\n\t\tquery: string,\n\t\tthread: ThreadObject,\n\t\tintent?: Intent,\n\t): Promise<string> {\n\t\tconst systemPrompt = `\nToday is ${new Date().toLocaleDateString()}.\n\n${this.prompts?.agent || \"\"}\n\n${this.prompts?.system || \"\"}\n\n${intent?.prompt || \"\"}\n\t`.trim();\n\n\t\tconst modelInstance = this.modelModule.getModel();\n\t\tconst messages = modelInstance.generateMessages({\n\t\t\tquery,\n\t\t\tthread,\n\t\t\tsystemPrompt: systemPrompt.trim(),\n\t\t});\n\n\t\tconst tools: ConnectorTool[] = [];\n\t\tthis.mcpModule && tools.push(...this.mcpModule.getTools());\n\t\tthis.a2aModule && tools.push(...(await this.a2aModule.getTools()));\n\n\t\tconst functions = modelInstance.convertToolsToFunctions(tools);\n\t\tlet finalMessage = \"\";\n\n\t\twhile (true) {\n\t\t\tconst response = await modelInstance.fetchWithContextMessage(\n\t\t\t\tmessages,\n\t\t\t\tfunctions,\n\t\t\t);\n\n\t\t\tloggers.intentStream.info(\"messages\", { messages });\n\n\t\t\tconst { content, toolCalls } = response;\n\n\t\t\tif (toolCalls) {\n\t\t\t\tfor (const toolCall of toolCalls) {\n\t\t\t\t\tconst toolName = toolCall.name;\n\t\t\t\t\tconst selectedTool = tools.filter(\n\t\t\t\t\t\t(tool) => tool.toolName === toolName,\n\t\t\t\t\t)[0];\n\n\t\t\t\t\tlet toolResult = \"\";\n\t\t\t\t\tif (\n\t\t\t\t\t\tthis.mcpModule &&\n\t\t\t\t\t\tselectedTool.protocol === CONNECTOR_PROTOCOL_TYPE.MCP\n\t\t\t\t\t) {\n\t\t\t\t\t\tconst toolArgs = toolCall.arguments as\n\t\t\t\t\t\t\t| { [x: string]: unknown }\n\t\t\t\t\t\t\t| undefined;\n\t\t\t\t\t\tloggers.intent.debug(\"MCP tool call\", { toolName, toolArgs });\n\t\t\t\t\t\ttoolResult = await this.mcpModule.useTool(selectedTool, toolArgs);\n\t\t\t\t\t} else if (\n\t\t\t\t\t\tthis.a2aModule &&\n\t\t\t\t\t\tselectedTool.protocol === CONNECTOR_PROTOCOL_TYPE.A2A\n\t\t\t\t\t) {\n\t\t\t\t\t\ttoolResult = await this.a2aModule.useTool(\n\t\t\t\t\t\t\tselectedTool,\n\t\t\t\t\t\t\tquery,\n\t\t\t\t\t\t\tthread.threadId,\n\t\t\t\t\t\t);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Unrecognized tool type. It cannot be happened...\n\t\t\t\t\t\tloggers.intent.warn(\n\t\t\t\t\t\t\t`Unrecognized tool type: ${selectedTool.protocol}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tloggers.intent.debug(\"toolResult\", { toolResult });\n\n\t\t\t\t\tmodelInstance.appendMessages(messages, toolResult);\n\t\t\t\t}\n\t\t\t} else if (content) {\n\t\t\t\tfinalMessage = content;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\treturn finalMessage;\n\t}\n\n\t/**\n\t * Detects the intent from context.\n\t *\n\t * @param intents - The user's input query\n\t * @param thread - The thread history\n\t * @returns The detected intent\n\t */\n\tpublic async intentFulfill(\n\t\tintents: Array<TriggeredIntent>,\n\t\tthread: ThreadObject,\n\t): Promise<string> {\n\t\tlet finalResponseText = \"\";\n\t\tfor (let i = 0; i < intents.length; i++) {\n\t\t\tconst { subquery, intent, actionPlan } = intents[i];\n\t\t\tloggers.intent.info(`Process query: ${subquery}, ${intent?.name}`);\n\t\t\tloggers.intent.info(`Action plan: ${actionPlan}`);\n\n\t\t\t// only use for inference, not stored in memory\n\t\t\tfinalResponseText !== \"\" &&\n\t\t\t\tthread.messages.push({\n\t\t\t\t\tmessageId: randomUUID(),\n\t\t\t\t\trole: MessageRole.MODEL,\n\t\t\t\t\ttimestamp: Date.now(),\n\t\t\t\t\tcontent: { type: \"text\", parts: [finalResponseText] },\n\t\t\t\t\tmetadata: { isThinking: true },\n\t\t\t\t});\n\t\t\tawait this.addToThreadMessages(thread, {\n\t\t\t\trole: MessageRole.MODEL,\n\t\t\t\tcontent: subquery,\n\t\t\t\tmetadata: {\n\t\t\t\t\tsubquery,\n\t\t\t\t\tisThinking: true,\n\t\t\t\t\tactionPlan: actionPlan,\n\t\t\t\t},\n\t\t\t});\n\n\t\t\tfinalResponseText = await this.intentFulfilling(subquery, thread, intent);\n\t\t}\n\n\t\tawait this.addToThreadMessages(thread, {\n\t\t\trole: MessageRole.MODEL,\n\t\t\tcontent: finalResponseText,\n\t\t});\n\n\t\treturn finalResponseText;\n\t}\n}\n"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/services/intents/trigger.service.ts"],"sourcesContent":["import type { MemoryModule, ModelModule } from \"@/modules\";\nimport type {\n\tMessageObject,\n\tThreadObject,\n\tTriggeredIntent,\n} from \"@/types/memory\";\nimport { loggers } from \"@/utils/logger\";\n\nexport class IntentTriggerService {\n\tprivate modelModule: ModelModule;\n\tprivate memoryModule?: MemoryModule;\n\n\tconstructor(modelModule: ModelModule, memoryModule?: MemoryModule) {\n\t\tthis.modelModule = modelModule;\n\t\tthis.memoryModule = memoryModule;\n\t}\n\n\t/**\n\t * Detects the intent from context.\n\t *\n\t * @param query - The user's input query\n\t * @param thread - The thread history\n\t * @returns The detected intent\n\t */\n\tpublic async intentTriggering(\n\t\tquery: string,\n\t\tthread: ThreadObject | undefined,\n\t): Promise<Array<TriggeredIntent>> {\n\t\tconst modelInstance = this.modelModule.getModel();\n\t\tconst intentMemory = this.memoryModule?.getIntentMemory();\n\t\tif (!intentMemory) {\n\t\t\treturn [{ subquery: query }];\n\t\t}\n\n\t\t// 인텐트 목록 가져오기\n\t\tconst intents = await intentMemory.listIntents();\n\n\t\tif (intents.length === 0) {\n\t\t\tloggers.intentStream.warn(\"No intent found\");\n\t\t\treturn [{ subquery: query }];\n\t\t}\n\n\t\tconst intentList = intents\n\t\t\t.map((intent) => `- ${intent.name}: ${intent.description}`)\n\t\t\t.join(\"\\n\");\n\n\t\t// Convert thread messages to a string\n\t\tconst threadMessages = !thread\n\t\t\t? \"\"\n\t\t\t: thread.messages\n\t\t\t\t\t.sort((a, b) => a.timestamp - b.timestamp)\n\t\t\t\t\t.map((message: MessageObject) => {\n\t\t\t\t\t\tconst role =\n\t\t\t\t\t\t\tmessage.role === \"USER\"\n\t\t\t\t\t\t\t\t? \"User\"\n\t\t\t\t\t\t\t\t: message.role === \"MODEL\"\n\t\t\t\t\t\t\t\t\t? \"Assistant\"\n\t\t\t\t\t\t\t\t\t: \"System\";\n\t\t\t\t\t\tconst content = Array.isArray(message.content.parts)\n\t\t\t\t\t\t\t? message.content.parts.join(\" \")\n\t\t\t\t\t\t\t: String(message.content.parts);\n\t\t\t\t\t\treturn `${role}: \"\"\"${content}\"\"\"`;\n\t\t\t\t\t})\n\t\t\t\t\t.join(\"\\n\");\n\n\t\tconst systemPrompt = `You are an expert in accurately identifying user intentions.\n\nAvailable intent list:\n${intentList}\n\nPlease select and answer only from the above intent list. \nPlease return only the exact intent name without any additional explanations or text.`;\n\n\t\tconst userMessage = `The following is the conversation history with the user:\n\n${threadMessages}\n\nLast user question: \"${query}\"\n\nBased on the above conversation history, analyze the last user question and identify all relevant intents.\n\nInstructions:\n1. First, decompose the last user question into action-based subqueries (each representing a distinct action or task)\n2. Then, map each subquery to its corresponding intent from the available intent list\n3. For each subquery, provide a 2-3 sentence summary of what actions will be performed\n4. Multiple intents can be identified if the question covers various topics or actions\n5. Maintain the logical sequence of the original question when splitting into subqueries\n6. If any subquery doesn't match any intent in the available list, map it to \"default\" intent\n\nOutput Format:\nReturn the results as a JSON array with the following structure:\n[\n {\n \"subquery\": \"<subquery_1>\",\n \"intentName\": \"<intent_name_1>\",\n\t\t\"actionPlan\": \"<2-3 sentence description of what will be done for this subquery>\"\n\t},\n {\n \"subquery\": \"<subquery_2>\",\n \"intentName\": \"<intent_name_2>\",\n\t\t\"actionPlan\": \"<2-3 sentence description of what will be done for this subquery>\"\n },\n ...\n]\n\nRequirements:\n- Each subquery should represent a single, actionable task or request\n- Preserve the original meaning and context when splitting queries\n- Select only from the provided intent list\n- Use \"default\" as the intent value for any subquery that doesn't match available intents.`;\n\n\t\tconst messages = modelInstance.generateMessages({\n\t\t\tquery: userMessage,\n\t\t\tsystemPrompt,\n\t\t});\n\n\t\tconst response = await modelInstance.fetch(messages);\n\t\tif (!response.content) {\n\t\t\tloggers.intent.warn(\"Cannot extract intent from query\");\n\t\t\treturn [{ subquery: query }];\n\t\t}\n\n\t\tconst subqueries = JSON.parse(response.content);\n\t\tconst triggeredIntent: Array<TriggeredIntent> = [];\n\t\tfor (const { subquery, intentName, actionPlan } of subqueries) {\n\t\t\tconst intent = await intentMemory.getIntentByName(intentName);\n\t\t\ttriggeredIntent.push({ subquery, intent, actionPlan });\n\t\t}\n\n\t\treturn triggeredIntent;\n\t}\n}\n"],"mappings":";;;;;AAQO,IAAM,uBAAN,MAA2B;AAAA,EACzB;AAAA,EACA;AAAA,EAER,YAAY,aAA0B,cAA6B;AAClE,SAAK,cAAc;AACnB,SAAK,eAAe;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAa,iBACZ,OACA,QACkC;AAClC,UAAM,gBAAgB,KAAK,YAAY,SAAS;AAChD,UAAM,eAAe,KAAK,cAAc,gBAAgB;AACxD,QAAI,CAAC,cAAc;AAClB,aAAO,CAAC,EAAE,UAAU,MAAM,CAAC;AAAA,IAC5B;AAGA,UAAM,UAAU,MAAM,aAAa,YAAY;AAE/C,QAAI,QAAQ,WAAW,GAAG;AACzB,cAAQ,aAAa,KAAK,iBAAiB;AAC3C,aAAO,CAAC,EAAE,UAAU,MAAM,CAAC;AAAA,IAC5B;AAEA,UAAM,aAAa,QACjB,IAAI,CAAC,WAAW,KAAK,OAAO,IAAI,KAAK,OAAO,WAAW,EAAE,EACzD,KAAK,IAAI;AAGX,UAAM,iBAAiB,CAAC,SACrB,KACA,OAAO,SACN,KAAK,CAAC,GAAG,MAAM,EAAE,YAAY,EAAE,SAAS,EACxC,IAAI,CAAC,YAA2B;AAChC,YAAM,OACL,QAAQ,SAAS,SACd,SACA,QAAQ,SAAS,UAChB,cACA;AACL,YAAM,UAAU,MAAM,QAAQ,QAAQ,QAAQ,KAAK,IAChD,QAAQ,QAAQ,MAAM,KAAK,GAAG,IAC9B,OAAO,QAAQ,QAAQ,KAAK;AAC/B,aAAO,GAAG,IAAI,QAAQ,OAAO;AAAA,IAC9B,CAAC,EACA,KAAK,IAAI;AAEb,UAAM,eAAe;AAAA;AAAA;AAAA,EAGrB,UAAU;AAAA;AAAA;AAAA;AAKV,UAAM,cAAc;AAAA;AAAA,EAEpB,cAAc;AAAA;AAAA,uBAEO,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAkC1B,UAAM,WAAW,cAAc,iBAAiB;AAAA,MAC/C,OAAO;AAAA,MACP;AAAA,IACD,CAAC;AAED,UAAM,WAAW,MAAM,cAAc,MAAM,QAAQ;AACnD,QAAI,CAAC,SAAS,SAAS;AACtB,cAAQ,OAAO,KAAK,kCAAkC;AACtD,aAAO,CAAC,EAAE,UAAU,MAAM,CAAC;AAAA,IAC5B;AAEA,UAAM,aAAa,KAAK,MAAM,SAAS,OAAO;AAC9C,UAAM,kBAA0C,CAAC;AACjD,eAAW,EAAE,UAAU,YAAY,WAAW,KAAK,YAAY;AAC9D,YAAM,SAAS,MAAM,aAAa,gBAAgB,UAAU;AAC5D,sBAAgB,KAAK,EAAE,UAAU,QAAQ,WAAW,CAAC;AAAA,IACtD;AAEA,WAAO;AAAA,EACR;AACD;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/modules/a2a/a2a.module.ts"],"sourcesContent":["import { randomUUID } from \"node:crypto\";\nimport type {\n\tAgentCard,\n\tMessage,\n\tMessageSendParams,\n\tTask,\n\tTaskStatusUpdateEvent,\n\tTextPart,\n} from \"@a2a-js/sdk\";\nimport { A2AClient } from \"@a2a-js/sdk/client\";\nimport {\n\tCONNECTOR_PROTOCOL_TYPE,\n\ttype ConnectorTool,\n} from \"@/types/connector.js\";\nimport { ThreadType } from \"@/types/memory.js\";\nimport { loggers } from \"@/utils/logger.js\";\nimport { A2AConnector } from \"./a2a.connector.js\";\n\n/**\n * Module for managing Agent-to-Agent (A2A) protocol connections.\n *\n * This module handles connections to other A2A-compatible agents, manages\n * conversation sessions, and provides an interface for inter-agent communication.\n * Supports multi-turn conversations with task and context tracking.\n */\nexport class A2AModule {\n\t/** Map of A2A server URLs to their corresponding tool instances */\n\tprivate a2aConnectors: Map<string, A2AConnector> = new Map();\n\t/** Map of session IDs to their A2A session state */\n\tprivate a2aTasks: Map<string, string> = new Map();\n\tprivate agentId: string = randomUUID(); /* FIXME */\n\n\t/**\n\t * Registers a new A2A peer server URL for connection.\n\t *\n\t * @param conns - Set of name, url pair\n\t */\n\tpublic async addA2AConnector(conns: {\n\t\t[name: string]: string;\n\t}): Promise<void> {\n\t\tfor (const [name, url] of Object.entries(conns)) {\n\t\t\tconst conn = new A2AConnector(name, url);\n\t\t\tthis.a2aConnectors.set(name, conn);\n\t\t}\n\t}\n\n\tpublic getA2AConnectors(): Array<{ name: string; url: string }> {\n\t\tconst connectors: Array<{ name: string; url: string }> = [];\n\t\tfor (const [name, connector] of this.a2aConnectors.entries()) {\n\t\t\tconnectors.push({ name, url: connector.url });\n\t\t}\n\t\treturn connectors;\n\t}\n\n\tprivate getOrCreateClient(connector: A2AConnector): A2AClient {\n\t\tif (!connector.client) {\n\t\t\tconsole.log(`Creating A2AClient for ${connector.name} with URL: ${connector.url}`);\n\t\t\tconnector.client = new A2AClient(connector.url);\n\t\t}\n\t\treturn connector.client;\n\t}\n\n\t/**\n\t * Retrieves tools from all registered A2A peer servers.\n\t *\n\t * Attempts to connect to each registered server, fetch their agent cards,\n\t * and create tool instances. Disables tools for unreachable servers.\n\t *\n\t * @returns Promise resolving to array of available A2A tools\n\t */\n\tpublic async getTools(): Promise<ConnectorTool[]> {\n\t\tconst tools: ConnectorTool[] = [];\n\t\tfor (const [name, conn] of this.a2aConnectors.entries()) {\n\t\t\tif (!conn.enabled) {\n\t\t\t\tcontinue; // skip disabled agent\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tconst client = this.getOrCreateClient(conn);\n\t\t\t\tconst card: AgentCard = await client.getAgentCard();\n\t\t\t\t/* TODO: add each skill as tool? */\n\t\t\t\tconst tool: ConnectorTool = {\n\t\t\t\t\ttoolName: card.name.replaceAll(\" \", \"-\"),\n\t\t\t\t\tconnectorName: name,\n\t\t\t\t\tprotocol: CONNECTOR_PROTOCOL_TYPE.A2A,\n\t\t\t\t\tdescription: card.description,\n\t\t\t\t};\n\n\t\t\t\ttools.push(tool);\n\t\t\t} catch (error: any) {\n\t\t\t\tconsole.error(`Failed to get agent card for ${name}:`, error.message);\n\t\t\t\t// Agent not responded, just skip\n\t\t\t}\n\t\t}\n\t\treturn tools;\n\t}\n\n\t/**\n\t * Constructs a message payload for A2A communication.\n\t *\n\t * Includes session context (task ID and context ID) if available\n\t * for maintaining conversation continuity.\n\t *\n\t * @param query - The message content to send\n\t * @param threadId - The session identifier\n\t * @returns Formatted Message object for A2A protocol\n\t */\n\tpublic getMessagePayload(query: string, threadId: string): Message {\n\t\tconst messagePayload: Message = {\n\t\t\tmessageId: randomUUID(),\n\t\t\tkind: \"message\",\n\t\t\trole: \"user\", // FIXME: it could be 'agent'\n\t\t\tmetadata: {\n\t\t\t\tagentId: this.agentId,\n\t\t\t\ttype: ThreadType.CHAT,\n\t\t\t},\n\t\t\tparts: [\n\t\t\t\t{\n\t\t\t\t\tkind: \"text\",\n\t\t\t\t\ttext: query,\n\t\t\t\t},\n\t\t\t],\n\t\t\tcontextId: threadId,\n\t\t};\n\n\t\tif (this.a2aTasks.has(threadId)) {\n\t\t\tmessagePayload.taskId = this.a2aTasks.get(threadId);\n\t\t}\n\n\t\treturn messagePayload;\n\t}\n\n\t/**\n\t * Executes an A2A tool by sending a message to the remote agent.\n\t *\n\t * Handles streaming responses, maintains session state, and extracts\n\t * text content from various event types in the response stream.\n\t *\n\t * @param tool - The A2ATool instance to use\n\t * @param query - The message to send to the agent\n\t * @param threadId - The session identifier for context tracking\n\t * @returns Promise resolving to array of text responses from the agent\n\t */\n\tpublic async useTool(\n\t\ttool: ConnectorTool,\n\t\tquery: string,\n\t\tthreadId: string,\n\t): Promise<string> {\n\t\tconst finalText: string[] = [];\n\t\tconst connector = this.a2aConnectors.get(tool.connectorName);\n\t\tconst messagePayload = this.getMessagePayload(query, threadId);\n\t\tconst params: MessageSendParams = {\n\t\t\tmessage: messagePayload,\n\t\t};\n\n\t\ttry {\n\t\t\tconst client = this.getOrCreateClient(connector!);\n\t\t\tconst stream = client.sendMessageStream(params);\n\t\t\tfor await (const event of stream) {\n\t\t\t\tif (event.kind === \"status-update\") {\n\t\t\t\t\tconst typedEvent = event as TaskStatusUpdateEvent;\n\t\t\t\t\tif (\n\t\t\t\t\t\ttypedEvent.final &&\n\t\t\t\t\t\ttypedEvent.status.state !== \"input-required\"\n\t\t\t\t\t) {\n\t\t\t\t\t\tthis.a2aTasks.delete(threadId);\n\t\t\t\t\t}\n\t\t\t\t\t// TODO: handle 'file', 'data' parts\n\t\t\t\t\tconst texts = typedEvent.status.message?.parts\n\t\t\t\t\t\t.filter((part) => part.kind === \"text\")\n\t\t\t\t\t\t.map((part: TextPart) => part.text)\n\t\t\t\t\t\t.join(\"\\n\");\n\t\t\t\t\tif (texts) {\n\t\t\t\t\t\tfinalText.push(texts);\n\t\t\t\t\t}\n\t\t\t\t} else if (event.kind === \"message\") {\n\t\t\t\t\t// FIXME: handling text in 'message'?\n\t\t\t\t\tconst msg = event as Message;\n\t\t\t\t\tconst taskId = this.a2aTasks.get(threadId);\n\t\t\t\t\tif (msg.taskId && msg.taskId !== taskId) {\n\t\t\t\t\t\tthis.a2aTasks.set(threadId, msg.taskId);\n\t\t\t\t\t}\n\t\t\t\t} else if (event.kind === \"task\") {\n\t\t\t\t\t// establishing the Task ID\n\t\t\t\t\tconst task = event as Task;\n\t\t\t\t\tif (task.id !== this.a2aTasks.get(threadId)) {\n\t\t\t\t\t\tthis.a2aTasks.set(threadId, task.id);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tloggers.a2a.warn(\"Received unknown event structure from stream:\", {\n\t\t\t\t\t\tevent,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tloggers.a2a.error(\"Error communicating with agent:\", { error });\n\t\t\tconst toolResult = `[Bot Called A2A Tool ${tool.toolName}]\\n${typeof error === \"string\" ? error : JSON.stringify(error, null, 2)}`;\n\t\t\treturn toolResult;\n\t\t}\n\n\t\treturn `[Bot Called A2A Tool ${tool.toolName}]\\n${finalText.join(\"\\n\")}`;\n\t}\n}\n"],"mappings":"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","names":[]}