@ainetwork/adk 0.3.1 → 0.3.2
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.
- package/dist/cjs/{chunk-ZFSXQFEK.cjs → chunk-25FZXCHU.cjs} +51 -16
- package/dist/cjs/chunk-25FZXCHU.cjs.map +1 -0
- package/dist/cjs/{chunk-7QIF3FVV.cjs → chunk-3RS6NVSN.cjs} +7 -7
- package/dist/cjs/{chunk-7QIF3FVV.cjs.map → chunk-3RS6NVSN.cjs.map} +1 -1
- package/dist/cjs/{chunk-6WAVK3BS.cjs → chunk-4IBKK5HW.cjs} +27 -9
- package/dist/cjs/chunk-4IBKK5HW.cjs.map +1 -0
- package/dist/cjs/{chunk-QSBUV5WJ.cjs → chunk-5QSLQX4H.cjs} +20 -16
- package/dist/cjs/chunk-5QSLQX4H.cjs.map +1 -0
- package/dist/cjs/{chunk-OVTUSYSU.cjs → chunk-5WWZOWMA.cjs} +1 -1
- package/dist/cjs/chunk-5WWZOWMA.cjs.map +1 -0
- package/dist/cjs/{chunk-AWHKDGXN.cjs → chunk-6T2YGFSD.cjs} +3 -3
- package/dist/cjs/{chunk-AWHKDGXN.cjs.map → chunk-6T2YGFSD.cjs.map} +1 -1
- package/dist/cjs/{chunk-NYDNXGKB.cjs → chunk-7KXB6FOT.cjs} +20 -16
- package/dist/cjs/chunk-7KXB6FOT.cjs.map +1 -0
- package/dist/cjs/chunk-B3U3LJ7J.cjs +17 -0
- package/dist/cjs/chunk-B3U3LJ7J.cjs.map +1 -0
- package/dist/cjs/{chunk-ICFTUZP5.cjs → chunk-C5JALNJT.cjs} +4 -4
- package/dist/cjs/{chunk-ICFTUZP5.cjs.map → chunk-C5JALNJT.cjs.map} +1 -1
- package/dist/cjs/chunk-CLJ3DWTA.cjs +62 -0
- package/dist/cjs/chunk-CLJ3DWTA.cjs.map +1 -0
- package/dist/cjs/{chunk-I4ET55WI.cjs → chunk-DGXLVGIM.cjs} +7 -7
- package/dist/cjs/{chunk-I4ET55WI.cjs.map → chunk-DGXLVGIM.cjs.map} +1 -1
- package/dist/cjs/{chunk-G42JXC76.cjs → chunk-E3PD4Q76.cjs} +7 -7
- package/dist/cjs/{chunk-G42JXC76.cjs.map → chunk-E3PD4Q76.cjs.map} +1 -1
- package/dist/cjs/{chunk-ASEYNIPL.cjs → chunk-EA3YMPST.cjs} +7 -7
- package/dist/cjs/{chunk-OFUS74ON.cjs.map → chunk-EA3YMPST.cjs.map} +1 -1
- package/dist/cjs/{chunk-K5LS7KNV.cjs → chunk-HF7GKQ6Y.cjs} +10 -10
- package/dist/cjs/{chunk-K63YCRBA.cjs.map → chunk-HF7GKQ6Y.cjs.map} +1 -1
- package/dist/cjs/{chunk-NYYEZ4ER.cjs → chunk-M5TQFW2Y.cjs} +3 -3
- package/dist/cjs/{chunk-NYYEZ4ER.cjs.map → chunk-M5TQFW2Y.cjs.map} +1 -1
- package/dist/cjs/{chunk-TF7S7SPO.cjs → chunk-NEWJ7PXH.cjs} +4 -4
- package/dist/cjs/{chunk-TF7S7SPO.cjs.map → chunk-NEWJ7PXH.cjs.map} +1 -1
- package/dist/cjs/{chunk-AQXHOGJD.cjs → chunk-NNYPZA6W.cjs} +19 -1
- package/dist/cjs/chunk-NNYPZA6W.cjs.map +1 -0
- package/dist/cjs/chunk-O5X5QT63.cjs +19 -0
- package/dist/cjs/chunk-O5X5QT63.cjs.map +1 -0
- package/dist/cjs/{chunk-7QXQYCZP.cjs → chunk-OZPPTVUA.cjs} +41 -55
- package/dist/cjs/chunk-OZPPTVUA.cjs.map +1 -0
- package/dist/cjs/{chunk-BDQDZXZI.cjs → chunk-RCOESZIX.cjs} +9 -23
- package/dist/cjs/chunk-RCOESZIX.cjs.map +1 -0
- package/dist/cjs/{chunk-K63YCRBA.cjs → chunk-RVT67VJL.cjs} +10 -10
- package/dist/cjs/{chunk-K5LS7KNV.cjs.map → chunk-RVT67VJL.cjs.map} +1 -1
- package/dist/cjs/{chunk-X5INT5HE.cjs → chunk-U47SG7XG.cjs} +16 -11
- package/dist/cjs/chunk-U47SG7XG.cjs.map +1 -0
- package/dist/cjs/{chunk-MO3H4KHE.cjs → chunk-XHTEJE4E.cjs} +3 -3
- package/dist/cjs/{chunk-MO3H4KHE.cjs.map → chunk-XHTEJE4E.cjs.map} +1 -1
- package/dist/cjs/{chunk-OFUS74ON.cjs → chunk-YY7HSXBP.cjs} +7 -7
- package/dist/cjs/{chunk-TF2SCL3K.cjs.map → chunk-YY7HSXBP.cjs.map} +1 -1
- package/dist/cjs/config/manifest.cjs +9 -0
- package/dist/cjs/config/manifest.cjs.map +1 -0
- package/dist/cjs/controllers/a2a.controller.cjs +3 -3
- package/dist/cjs/controllers/index.cjs +5 -4
- package/dist/cjs/controllers/index.cjs.map +1 -1
- package/dist/cjs/controllers/query.controller.cjs +3 -2
- package/dist/cjs/controllers/query.controller.cjs.map +1 -1
- package/dist/cjs/index.cjs +42 -54
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/cjs/middlewares/error.middleware.cjs +3 -3
- package/dist/cjs/modules/a2a/a2a.connector.cjs +2 -2
- package/dist/cjs/modules/a2a/a2a.module.cjs +4 -4
- package/dist/cjs/modules/index.cjs +10 -10
- package/dist/cjs/modules/index.cjs.map +1 -1
- package/dist/cjs/modules/mcp/mcp.module.cjs +3 -3
- package/dist/cjs/routes/a2a.routes.cjs +11 -10
- package/dist/cjs/routes/a2a.routes.cjs.map +1 -1
- package/dist/cjs/routes/api.routes.cjs +4 -4
- package/dist/cjs/routes/index.cjs +21 -20
- package/dist/cjs/routes/index.cjs.map +1 -1
- package/dist/cjs/routes/intent.routes.cjs +13 -12
- package/dist/cjs/routes/intent.routes.cjs.map +1 -1
- package/dist/cjs/routes/query.routes.cjs +12 -11
- package/dist/cjs/routes/query.routes.cjs.map +1 -1
- package/dist/cjs/services/a2a.service.cjs +3 -3
- package/dist/cjs/services/index.cjs +12 -11
- package/dist/cjs/services/index.cjs.map +1 -1
- package/dist/cjs/services/intents/fulfill-stream.service.cjs +4 -3
- package/dist/cjs/services/intents/fulfill-stream.service.cjs.map +1 -1
- package/dist/cjs/services/intents/fulfill.service.cjs +3 -3
- package/dist/cjs/services/intents/trigger.service.cjs +3 -3
- package/dist/cjs/services/query-stream.service.cjs +8 -7
- package/dist/cjs/services/query-stream.service.cjs.map +1 -1
- package/dist/cjs/services/query.service.cjs +7 -7
- package/dist/cjs/services/utils/query.common.cjs +3 -3
- package/dist/cjs/utils/isValidUrl.cjs +7 -0
- package/dist/cjs/utils/isValidUrl.cjs.map +1 -0
- package/dist/cjs/utils/logger.cjs +2 -2
- package/dist/esm/chunk-2J2TQRP4.js +19 -0
- package/dist/esm/chunk-2J2TQRP4.js.map +1 -0
- package/dist/esm/{chunk-DM6UZSRU.js → chunk-4LBR3TIJ.js} +5 -19
- package/dist/esm/chunk-4LBR3TIJ.js.map +1 -0
- package/dist/esm/{chunk-J2UFYVKK.js → chunk-5IIF5O4A.js} +2 -2
- package/dist/esm/{chunk-WRKUZMNO.js → chunk-6AN7Z5OC.js} +6 -6
- package/dist/esm/{chunk-V24ATQLM.js → chunk-A5PRJ33H.js} +29 -43
- package/dist/esm/chunk-A5PRJ33H.js.map +1 -0
- package/dist/esm/{chunk-WMZ6PYTE.js → chunk-BZZDVW26.js} +1 -1
- package/dist/esm/chunk-BZZDVW26.js.map +1 -0
- package/dist/esm/{chunk-NWL3BMUH.js → chunk-FRQSMPPK.js} +49 -14
- package/dist/esm/chunk-FRQSMPPK.js.map +1 -0
- package/dist/esm/chunk-I5DLV2CU.js +17 -0
- package/dist/esm/chunk-I5DLV2CU.js.map +1 -0
- package/dist/esm/{chunk-RJZ4QSDX.js → chunk-JCXAHLRN.js} +12 -8
- package/dist/esm/chunk-JCXAHLRN.js.map +1 -0
- package/dist/esm/{chunk-OW7PCDK5.js → chunk-JHKBIDPX.js} +19 -1
- package/dist/esm/chunk-JHKBIDPX.js.map +1 -0
- package/dist/esm/{chunk-DIW5VDAQ.js → chunk-KOCOM7IC.js} +2 -2
- package/dist/esm/{chunk-YDMTU6UH.js → chunk-PVWOU6LA.js} +21 -3
- package/dist/esm/chunk-PVWOU6LA.js.map +1 -0
- package/dist/esm/{chunk-MCMWSGRJ.js → chunk-Q7NLA5X4.js} +7 -7
- package/dist/esm/{chunk-MAU2MAK2.js → chunk-RAHOYMKY.js} +2 -2
- package/dist/esm/{chunk-WL7H2QX4.js → chunk-UEUZ7G5P.js} +8 -3
- package/dist/esm/chunk-UEUZ7G5P.js.map +1 -0
- package/dist/esm/chunk-VUMI4XOY.js +62 -0
- package/dist/esm/chunk-VUMI4XOY.js.map +1 -0
- package/dist/esm/{chunk-THBAYYPZ.js → chunk-WO2QJ6UM.js} +2 -2
- package/dist/esm/{chunk-7XCSPITE.js → chunk-Y7BKUWRJ.js} +7 -7
- package/dist/esm/{chunk-3FE3GPF2.js → chunk-YJTWW6QK.js} +4 -4
- package/dist/esm/{chunk-HAE333YO.js → chunk-YMSNW2SU.js} +2 -2
- package/dist/esm/config/manifest.d.ts +7 -0
- package/dist/esm/config/manifest.js +9 -0
- package/dist/esm/config/manifest.js.map +1 -0
- package/dist/esm/controllers/a2a.controller.d.ts +2 -2
- package/dist/esm/controllers/a2a.controller.js +2 -2
- package/dist/esm/controllers/api/agent.api.controller.d.ts +2 -2
- package/dist/esm/controllers/index.d.ts +2 -2
- package/dist/esm/controllers/index.js +4 -3
- package/dist/esm/controllers/query.controller.d.ts +2 -2
- package/dist/esm/controllers/query.controller.js +2 -1
- package/dist/esm/index.d.ts +2 -9
- package/dist/esm/index.js +35 -47
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/middlewares/error.middleware.js +2 -2
- package/dist/esm/modules/a2a/a2a.connector.d.ts +2 -2
- package/dist/esm/modules/a2a/a2a.connector.js +1 -1
- package/dist/esm/modules/a2a/a2a.module.d.ts +5 -2
- package/dist/esm/modules/a2a/a2a.module.js +3 -3
- package/dist/esm/modules/index.d.ts +2 -2
- package/dist/esm/modules/index.js +9 -9
- package/dist/esm/modules/mcp/mcp.module.js +2 -2
- package/dist/esm/routes/a2a.routes.d.ts +2 -2
- package/dist/esm/routes/a2a.routes.js +10 -9
- package/dist/esm/routes/api/agent.routes.d.ts +2 -2
- package/dist/esm/routes/api.routes.d.ts +2 -2
- package/dist/esm/routes/api.routes.js +3 -3
- package/dist/esm/routes/index.d.ts +2 -2
- package/dist/esm/routes/index.js +20 -19
- package/dist/esm/routes/intent.routes.d.ts +2 -2
- package/dist/esm/routes/intent.routes.js +12 -11
- package/dist/esm/routes/query.routes.d.ts +2 -2
- package/dist/esm/routes/query.routes.js +11 -10
- package/dist/esm/services/a2a.service.d.ts +2 -2
- package/dist/esm/services/a2a.service.js +2 -2
- package/dist/esm/services/index.d.ts +2 -2
- package/dist/esm/services/index.js +12 -11
- package/dist/esm/services/intents/fulfill-stream.service.js +3 -2
- package/dist/esm/services/intents/fulfill.service.d.ts +1 -1
- package/dist/esm/services/intents/fulfill.service.js +2 -2
- package/dist/esm/services/intents/trigger.service.js +2 -2
- package/dist/esm/services/query-stream.service.d.ts +2 -1
- package/dist/esm/services/query-stream.service.js +7 -6
- package/dist/esm/services/query.service.d.ts +1 -1
- package/dist/esm/services/query.service.js +6 -6
- package/dist/esm/services/utils/fulfill.common.d.ts +1 -1
- package/dist/esm/services/utils/query.common.js +2 -2
- package/dist/esm/types/stream.d.ts +3 -3
- package/dist/esm/utils/isValidUrl.d.ts +9 -0
- package/dist/esm/utils/isValidUrl.js +7 -0
- package/dist/esm/utils/isValidUrl.js.map +1 -0
- package/dist/esm/utils/logger.js +1 -1
- package/package.json +5 -4
- package/dist/cjs/chunk-2OXSV2VU.cjs +0 -134
- package/dist/cjs/chunk-2OXSV2VU.cjs.map +0 -1
- package/dist/cjs/chunk-2TNBBXQ3.cjs +0 -129
- package/dist/cjs/chunk-2TNBBXQ3.cjs.map +0 -1
- package/dist/cjs/chunk-2TOW46DI.cjs +0 -246
- package/dist/cjs/chunk-2TOW46DI.cjs.map +0 -1
- package/dist/cjs/chunk-35MIRD7Z.cjs +0 -134
- package/dist/cjs/chunk-35MIRD7Z.cjs.map +0 -1
- package/dist/cjs/chunk-37J4FFJ3.cjs +0 -133
- package/dist/cjs/chunk-37J4FFJ3.cjs.map +0 -1
- package/dist/cjs/chunk-3BPHCG6M.cjs +0 -30
- package/dist/cjs/chunk-3BPHCG6M.cjs.map +0 -1
- package/dist/cjs/chunk-3XJS5S3O.cjs +0 -191
- package/dist/cjs/chunk-3XJS5S3O.cjs.map +0 -1
- package/dist/cjs/chunk-43XI3NHI.cjs +0 -43
- package/dist/cjs/chunk-43XI3NHI.cjs.map +0 -1
- package/dist/cjs/chunk-466ED5WN.cjs +0 -41
- package/dist/cjs/chunk-466ED5WN.cjs.map +0 -1
- package/dist/cjs/chunk-4KL2BCDZ.cjs +0 -43
- package/dist/cjs/chunk-4KL2BCDZ.cjs.map +0 -1
- package/dist/cjs/chunk-4RPP5UAH.cjs +0 -202
- package/dist/cjs/chunk-4RPP5UAH.cjs.map +0 -1
- package/dist/cjs/chunk-4TO7EZ5J.cjs +0 -133
- package/dist/cjs/chunk-4TO7EZ5J.cjs.map +0 -1
- package/dist/cjs/chunk-5IEVTAT2.cjs +0 -37
- package/dist/cjs/chunk-5IEVTAT2.cjs.map +0 -1
- package/dist/cjs/chunk-67CP7NP7.cjs +0 -132
- package/dist/cjs/chunk-67CP7NP7.cjs.map +0 -1
- package/dist/cjs/chunk-6WAVK3BS.cjs.map +0 -1
- package/dist/cjs/chunk-7CCDDRLV.cjs +0 -28
- package/dist/cjs/chunk-7CCDDRLV.cjs.map +0 -1
- package/dist/cjs/chunk-7ELF6ICG.cjs +0 -129
- package/dist/cjs/chunk-7ELF6ICG.cjs.map +0 -1
- package/dist/cjs/chunk-7IORLKS7.cjs +0 -28
- package/dist/cjs/chunk-7IORLKS7.cjs.map +0 -1
- package/dist/cjs/chunk-7P4O537H.cjs +0 -132
- package/dist/cjs/chunk-7P4O537H.cjs.map +0 -1
- package/dist/cjs/chunk-7QXQYCZP.cjs.map +0 -1
- package/dist/cjs/chunk-AIUJ6CZR.cjs +0 -37
- package/dist/cjs/chunk-AIUJ6CZR.cjs.map +0 -1
- package/dist/cjs/chunk-AQXHOGJD.cjs.map +0 -1
- package/dist/cjs/chunk-ASEYNIPL.cjs.map +0 -1
- package/dist/cjs/chunk-BDQDZXZI.cjs.map +0 -1
- package/dist/cjs/chunk-BXBFJKZC.cjs +0 -114
- package/dist/cjs/chunk-BXBFJKZC.cjs.map +0 -1
- package/dist/cjs/chunk-BYTLWEXM.cjs +0 -43
- package/dist/cjs/chunk-BYTLWEXM.cjs.map +0 -1
- package/dist/cjs/chunk-C35ER63S.cjs +0 -134
- package/dist/cjs/chunk-C35ER63S.cjs.map +0 -1
- package/dist/cjs/chunk-CGD7CECK.cjs +0 -129
- package/dist/cjs/chunk-CGD7CECK.cjs.map +0 -1
- package/dist/cjs/chunk-CKIA6H2D.cjs +0 -30
- package/dist/cjs/chunk-CKIA6H2D.cjs.map +0 -1
- package/dist/cjs/chunk-CPZBDQ5D.cjs +0 -28
- package/dist/cjs/chunk-CPZBDQ5D.cjs.map +0 -1
- package/dist/cjs/chunk-DEWNBL5H.cjs +0 -37
- package/dist/cjs/chunk-DEWNBL5H.cjs.map +0 -1
- package/dist/cjs/chunk-DK57ZF33.cjs +0 -28
- package/dist/cjs/chunk-DK57ZF33.cjs.map +0 -1
- package/dist/cjs/chunk-DQIGZKKW.cjs +0 -37
- package/dist/cjs/chunk-DQIGZKKW.cjs.map +0 -1
- package/dist/cjs/chunk-DT2RCV6G.cjs +0 -40
- package/dist/cjs/chunk-DT2RCV6G.cjs.map +0 -1
- package/dist/cjs/chunk-E35E4LQY.cjs +0 -43
- package/dist/cjs/chunk-E35E4LQY.cjs.map +0 -1
- package/dist/cjs/chunk-EETXLYKA.cjs +0 -28
- package/dist/cjs/chunk-EETXLYKA.cjs.map +0 -1
- package/dist/cjs/chunk-F3A5E26D.cjs +0 -115
- package/dist/cjs/chunk-F3A5E26D.cjs.map +0 -1
- package/dist/cjs/chunk-FH44ANEI.cjs +0 -134
- package/dist/cjs/chunk-FH44ANEI.cjs.map +0 -1
- package/dist/cjs/chunk-FTRCEUDB.cjs +0 -40
- package/dist/cjs/chunk-FTRCEUDB.cjs.map +0 -1
- package/dist/cjs/chunk-G3BK3F7V.cjs +0 -129
- package/dist/cjs/chunk-G3BK3F7V.cjs.map +0 -1
- package/dist/cjs/chunk-GKXXTC6C.cjs +0 -191
- package/dist/cjs/chunk-GKXXTC6C.cjs.map +0 -1
- package/dist/cjs/chunk-GM3S5465.cjs +0 -28
- package/dist/cjs/chunk-GM3S5465.cjs.map +0 -1
- package/dist/cjs/chunk-GMCHHP5Z.cjs +0 -37
- package/dist/cjs/chunk-GMCHHP5Z.cjs.map +0 -1
- package/dist/cjs/chunk-GP3SSTAQ.cjs +0 -8
- package/dist/cjs/chunk-GP3SSTAQ.cjs.map +0 -1
- package/dist/cjs/chunk-HDZ5POWB.cjs +0 -134
- package/dist/cjs/chunk-HDZ5POWB.cjs.map +0 -1
- package/dist/cjs/chunk-HIL5SDJR.cjs +0 -43
- package/dist/cjs/chunk-HIL5SDJR.cjs.map +0 -1
- package/dist/cjs/chunk-HNKMBS3C.cjs +0 -43
- package/dist/cjs/chunk-HNKMBS3C.cjs.map +0 -1
- package/dist/cjs/chunk-ICNXY2NK.cjs +0 -132
- package/dist/cjs/chunk-ICNXY2NK.cjs.map +0 -1
- package/dist/cjs/chunk-ISQSPK4F.cjs +0 -134
- package/dist/cjs/chunk-ISQSPK4F.cjs.map +0 -1
- package/dist/cjs/chunk-J2FGGTF5.cjs +0 -37
- package/dist/cjs/chunk-J2FGGTF5.cjs.map +0 -1
- package/dist/cjs/chunk-J5GBTBSY.cjs +0 -134
- package/dist/cjs/chunk-J5GBTBSY.cjs.map +0 -1
- package/dist/cjs/chunk-JU5AB7AB.cjs +0 -37
- package/dist/cjs/chunk-JU5AB7AB.cjs.map +0 -1
- package/dist/cjs/chunk-K2W5TTBJ.cjs +0 -28
- package/dist/cjs/chunk-K2W5TTBJ.cjs.map +0 -1
- package/dist/cjs/chunk-KLSZEQ7H.cjs +0 -281
- package/dist/cjs/chunk-KLSZEQ7H.cjs.map +0 -1
- package/dist/cjs/chunk-L3PZU7OF.cjs +0 -285
- package/dist/cjs/chunk-L3PZU7OF.cjs.map +0 -1
- package/dist/cjs/chunk-L7QJRM2U.cjs +0 -131
- package/dist/cjs/chunk-L7QJRM2U.cjs.map +0 -1
- package/dist/cjs/chunk-LKVNLT2M.cjs +0 -132
- package/dist/cjs/chunk-LKVNLT2M.cjs.map +0 -1
- package/dist/cjs/chunk-M7K34W2H.cjs +0 -134
- package/dist/cjs/chunk-M7K34W2H.cjs.map +0 -1
- package/dist/cjs/chunk-MJAKDII2.cjs +0 -78
- package/dist/cjs/chunk-MJAKDII2.cjs.map +0 -1
- package/dist/cjs/chunk-MN47LTUO.cjs +0 -37
- package/dist/cjs/chunk-MN47LTUO.cjs.map +0 -1
- package/dist/cjs/chunk-NB6OID2Z.cjs +0 -285
- package/dist/cjs/chunk-NB6OID2Z.cjs.map +0 -1
- package/dist/cjs/chunk-NCYNT6TA.cjs +0 -129
- package/dist/cjs/chunk-NCYNT6TA.cjs.map +0 -1
- package/dist/cjs/chunk-NQUYHJ3J.cjs +0 -115
- package/dist/cjs/chunk-NQUYHJ3J.cjs.map +0 -1
- package/dist/cjs/chunk-NYDNXGKB.cjs.map +0 -1
- package/dist/cjs/chunk-OU5UB2HF.cjs +0 -113
- package/dist/cjs/chunk-OU5UB2HF.cjs.map +0 -1
- package/dist/cjs/chunk-OVTUSYSU.cjs.map +0 -1
- package/dist/cjs/chunk-PACFW2PR.cjs +0 -37
- package/dist/cjs/chunk-PACFW2PR.cjs.map +0 -1
- package/dist/cjs/chunk-PSHQ4OBL.cjs +0 -41
- package/dist/cjs/chunk-PSHQ4OBL.cjs.map +0 -1
- package/dist/cjs/chunk-QDX7LVBM.cjs +0 -284
- package/dist/cjs/chunk-QDX7LVBM.cjs.map +0 -1
- package/dist/cjs/chunk-QE7UAZY6.cjs +0 -37
- package/dist/cjs/chunk-QE7UAZY6.cjs.map +0 -1
- package/dist/cjs/chunk-QHQLU7BI.cjs +0 -13
- package/dist/cjs/chunk-QHQLU7BI.cjs.map +0 -1
- package/dist/cjs/chunk-QSBUV5WJ.cjs.map +0 -1
- package/dist/cjs/chunk-QZHI7LLI.cjs +0 -156
- package/dist/cjs/chunk-QZHI7LLI.cjs.map +0 -1
- package/dist/cjs/chunk-R42QDO6G.cjs +0 -28
- package/dist/cjs/chunk-R42QDO6G.cjs.map +0 -1
- package/dist/cjs/chunk-RIJV7J5Z.cjs +0 -52
- package/dist/cjs/chunk-RIJV7J5Z.cjs.map +0 -1
- package/dist/cjs/chunk-S2NO7QKM.cjs +0 -132
- package/dist/cjs/chunk-S2NO7QKM.cjs.map +0 -1
- package/dist/cjs/chunk-SCOMNXDA.cjs +0 -51
- package/dist/cjs/chunk-SCOMNXDA.cjs.map +0 -1
- package/dist/cjs/chunk-SSOKZ4O2.cjs +0 -41
- package/dist/cjs/chunk-SSOKZ4O2.cjs.map +0 -1
- package/dist/cjs/chunk-T3N54JRA.cjs +0 -41
- package/dist/cjs/chunk-T3N54JRA.cjs.map +0 -1
- package/dist/cjs/chunk-TF2SCL3K.cjs +0 -36
- package/dist/cjs/chunk-TJAP46DQ.cjs +0 -43
- package/dist/cjs/chunk-TJAP46DQ.cjs.map +0 -1
- package/dist/cjs/chunk-TOVCM7I7.cjs +0 -281
- package/dist/cjs/chunk-TOVCM7I7.cjs.map +0 -1
- package/dist/cjs/chunk-TUAC64ZF.cjs +0 -41
- package/dist/cjs/chunk-TUAC64ZF.cjs.map +0 -1
- package/dist/cjs/chunk-UEOOHJIR.cjs +0 -43
- package/dist/cjs/chunk-UEOOHJIR.cjs.map +0 -1
- package/dist/cjs/chunk-UGDFRSMS.cjs +0 -200
- package/dist/cjs/chunk-UGDFRSMS.cjs.map +0 -1
- package/dist/cjs/chunk-VNAH5COA.cjs +0 -202
- package/dist/cjs/chunk-VNAH5COA.cjs.map +0 -1
- package/dist/cjs/chunk-W4IBNFLJ.cjs +0 -43
- package/dist/cjs/chunk-W4IBNFLJ.cjs.map +0 -1
- package/dist/cjs/chunk-W5NZWOXV.cjs +0 -283
- package/dist/cjs/chunk-W5NZWOXV.cjs.map +0 -1
- package/dist/cjs/chunk-WGAEW3R3.cjs +0 -134
- package/dist/cjs/chunk-WGAEW3R3.cjs.map +0 -1
- package/dist/cjs/chunk-WKGN6P3D.cjs +0 -131
- package/dist/cjs/chunk-WKGN6P3D.cjs.map +0 -1
- package/dist/cjs/chunk-X5INT5HE.cjs.map +0 -1
- package/dist/cjs/chunk-X6R53KCL.cjs +0 -134
- package/dist/cjs/chunk-X6R53KCL.cjs.map +0 -1
- package/dist/cjs/chunk-YCD3FBPB.cjs +0 -41
- package/dist/cjs/chunk-YCD3FBPB.cjs.map +0 -1
- package/dist/cjs/chunk-YE6INMSS.cjs +0 -41
- package/dist/cjs/chunk-YE6INMSS.cjs.map +0 -1
- package/dist/cjs/chunk-YGK2LYEU.cjs +0 -36
- package/dist/cjs/chunk-YGK2LYEU.cjs.map +0 -1
- package/dist/cjs/chunk-YIRGAWMS.cjs +0 -30
- package/dist/cjs/chunk-YIRGAWMS.cjs.map +0 -1
- package/dist/cjs/chunk-YJSEM4WE.cjs +0 -116
- package/dist/cjs/chunk-YJSEM4WE.cjs.map +0 -1
- package/dist/cjs/chunk-YMNLHFLD.cjs +0 -251
- package/dist/cjs/chunk-YMNLHFLD.cjs.map +0 -1
- package/dist/cjs/chunk-ZFSXQFEK.cjs.map +0 -1
- package/dist/cjs/chunk-ZP35BH7F.cjs +0 -43
- package/dist/cjs/chunk-ZP35BH7F.cjs.map +0 -1
- package/dist/esm/chunk-DM6UZSRU.js.map +0 -1
- package/dist/esm/chunk-N7VYM2R5.js +0 -41
- package/dist/esm/chunk-N7VYM2R5.js.map +0 -1
- package/dist/esm/chunk-NWL3BMUH.js.map +0 -1
- package/dist/esm/chunk-OW7PCDK5.js.map +0 -1
- package/dist/esm/chunk-RJZ4QSDX.js.map +0 -1
- package/dist/esm/chunk-V24ATQLM.js.map +0 -1
- package/dist/esm/chunk-WL7H2QX4.js.map +0 -1
- package/dist/esm/chunk-WMZ6PYTE.js.map +0 -1
- package/dist/esm/chunk-YDMTU6UH.js.map +0 -1
- /package/dist/esm/{chunk-J2UFYVKK.js.map → chunk-5IIF5O4A.js.map} +0 -0
- /package/dist/esm/{chunk-WRKUZMNO.js.map → chunk-6AN7Z5OC.js.map} +0 -0
- /package/dist/esm/{chunk-DIW5VDAQ.js.map → chunk-KOCOM7IC.js.map} +0 -0
- /package/dist/esm/{chunk-MCMWSGRJ.js.map → chunk-Q7NLA5X4.js.map} +0 -0
- /package/dist/esm/{chunk-MAU2MAK2.js.map → chunk-RAHOYMKY.js.map} +0 -0
- /package/dist/esm/{chunk-THBAYYPZ.js.map → chunk-WO2QJ6UM.js.map} +0 -0
- /package/dist/esm/{chunk-7XCSPITE.js.map → chunk-Y7BKUWRJ.js.map} +0 -0
- /package/dist/esm/{chunk-3FE3GPF2.js.map → chunk-YJTWW6QK.js.map} +0 -0
- /package/dist/esm/{chunk-HAE333YO.js.map → chunk-YMSNW2SU.js.map} +0 -0
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
|
-
|
|
3
|
-
var _chunkX46GJS7Xcjs = require('./chunk-X46GJS7X.cjs');
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
var _chunkDT2RCV6Gcjs = require('./chunk-DT2RCV6G.cjs');
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
var _chunk5FZ7QLJDcjs = require('./chunk-5FZ7QLJD.cjs');
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
var _chunkFTRCEUDBcjs = require('./chunk-FTRCEUDB.cjs');
|
|
13
|
-
|
|
14
|
-
// src/routes/api.routes.ts
|
|
15
|
-
var _express = require('express');
|
|
16
|
-
var createApiRouter = (agent) => {
|
|
17
|
-
const router = _express.Router.call(void 0, );
|
|
18
|
-
router.use("/model", _chunkX46GJS7Xcjs.createModelApiRouter.call(void 0, agent.modelModule));
|
|
19
|
-
router.use("/agent", _chunk5FZ7QLJDcjs.createAgentApiRouter.call(void 0, agent));
|
|
20
|
-
if (agent.memoryModule) {
|
|
21
|
-
router.use("/threads", _chunkDT2RCV6Gcjs.createThreadApiRouter.call(void 0, agent.memoryModule));
|
|
22
|
-
router.use("/intent", _chunkFTRCEUDBcjs.createIntentApiRouter.call(void 0, agent.memoryModule));
|
|
23
|
-
}
|
|
24
|
-
return router;
|
|
25
|
-
};
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
exports.createApiRouter = createApiRouter;
|
|
30
|
-
//# sourceMappingURL=chunk-YIRGAWMS.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/shyun/comcom/ain-agent/ain-adk/dist/cjs/chunk-YIRGAWMS.cjs","../../src/routes/api.routes.ts"],"names":[],"mappings":"AAAA;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACA;ACbA,kCAAuB;AAOhB,IAAM,gBAAA,EAAkB,CAAC,KAAA,EAAA,GAA4B;AAC3D,EAAA,MAAM,OAAA,EAAS,6BAAA,CAAO;AAEtB,EAAA,MAAA,CAAO,GAAA,CAAI,QAAA,EAAU,oDAAA,KAAqB,CAAM,WAAW,CAAC,CAAA;AAC5D,EAAA,MAAA,CAAO,GAAA,CAAI,QAAA,EAAU,oDAAA,KAA0B,CAAC,CAAA;AAChD,EAAA,GAAA,CAAI,KAAA,CAAM,YAAA,EAAc;AACvB,IAAA,MAAA,CAAO,GAAA,CAAI,UAAA,EAAY,qDAAA,KAAsB,CAAM,YAAY,CAAC,CAAA;AAChE,IAAA,MAAA,CAAO,GAAA,CAAI,SAAA,EAAW,qDAAA,KAAsB,CAAM,YAAY,CAAC,CAAA;AAAA,EAChE;AAEA,EAAA,OAAO,MAAA;AACR,CAAA;ADOA;AACA;AACE;AACF,0CAAC","file":"/Users/shyun/comcom/ain-agent/ain-adk/dist/cjs/chunk-YIRGAWMS.cjs","sourcesContent":[null,"import { Router } from \"express\";\nimport type { AINAgent } from \"@/index.js\";\nimport { createAgentApiRouter } from \"./api/agent.routes.js\";\nimport { createIntentApiRouter } from \"./api/intent.routes.js\";\nimport { createModelApiRouter } from \"./api/model.routes.js\";\nimport { createThreadApiRouter } from \"./api/threads.routes.js\";\n\nexport const createApiRouter = (agent: AINAgent): Router => {\n\tconst router = Router();\n\n\trouter.use(\"/model\", createModelApiRouter(agent.modelModule));\n\trouter.use(\"/agent\", createAgentApiRouter(agent));\n\tif (agent.memoryModule) {\n\t\trouter.use(\"/threads\", createThreadApiRouter(agent.memoryModule));\n\t\trouter.use(\"/intent\", createIntentApiRouter(agent.memoryModule));\n\t}\n\n\treturn router;\n};\n"]}
|
|
@@ -1,116 +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; }
|
|
2
|
-
|
|
3
|
-
var _chunk466ED5WNcjs = require('./chunk-466ED5WN.cjs');
|
|
4
|
-
|
|
5
|
-
// src/services/intents/trigger.service.ts
|
|
6
|
-
var IntentTriggerService = class {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
constructor(modelModule, memoryModule) {
|
|
10
|
-
this.modelModule = modelModule;
|
|
11
|
-
this.memoryModule = memoryModule;
|
|
12
|
-
}
|
|
13
|
-
/**
|
|
14
|
-
* Detects the intent from context.
|
|
15
|
-
*
|
|
16
|
-
* @param query - The user's input query
|
|
17
|
-
* @param thread - The thread history
|
|
18
|
-
* @returns The detected intent
|
|
19
|
-
*/
|
|
20
|
-
async intentTriggering(query, thread) {
|
|
21
|
-
const modelInstance = this.modelModule.getModel();
|
|
22
|
-
const intentMemory = _optionalChain([this, 'access', _ => _.memoryModule, 'optionalAccess', _2 => _2.getIntentMemory, 'call', _3 => _3()]);
|
|
23
|
-
if (!intentMemory) {
|
|
24
|
-
return [{ subquery: query }];
|
|
25
|
-
}
|
|
26
|
-
const intents = await intentMemory.listIntents();
|
|
27
|
-
if (intents.length === 0) {
|
|
28
|
-
_chunk466ED5WNcjs.loggers.intentStream.warn("No intent found");
|
|
29
|
-
return [{ subquery: query }];
|
|
30
|
-
}
|
|
31
|
-
const intentList = intents.map((intent) => `- ${intent.name}: ${intent.description}`).join("\n");
|
|
32
|
-
const threadMessages = !thread ? "" : thread.messages.sort((a, b) => a.timestamp - b.timestamp).map((message) => {
|
|
33
|
-
const role = message.role === "USER" ? "User" : message.role === "MODEL" ? "Assistant" : "System";
|
|
34
|
-
const content = Array.isArray(message.content.parts) ? message.content.parts.join(" ") : String(message.content.parts);
|
|
35
|
-
return `${role}: """${content}"""`;
|
|
36
|
-
}).join("\n");
|
|
37
|
-
const systemPrompt = `
|
|
38
|
-
Today is ${(/* @__PURE__ */ new Date()).toLocaleDateString()}.
|
|
39
|
-
You are an expert in accurately identifying user intentions.
|
|
40
|
-
|
|
41
|
-
Available intent list:
|
|
42
|
-
${intentList}
|
|
43
|
-
|
|
44
|
-
Please select and answer only from the above intent list.
|
|
45
|
-
Please return only the exact intent name without any additional explanations or text.`;
|
|
46
|
-
const userMessage = `The following is the conversation history with the user:
|
|
47
|
-
|
|
48
|
-
${threadMessages}
|
|
49
|
-
|
|
50
|
-
Last user question: "${query}"
|
|
51
|
-
|
|
52
|
-
Based on the above conversation history, analyze the last user question and identify all relevant intents.
|
|
53
|
-
|
|
54
|
-
Instructions:
|
|
55
|
-
1. First, decompose the last user question into action-based subqueries (each representing a distinct action or task)
|
|
56
|
-
2. Then, map each subquery to its corresponding intent from the available intent list
|
|
57
|
-
3. For each subquery, provide a 2-3 sentence summary of what actions will be performed
|
|
58
|
-
4. Multiple intents can be identified if the question covers various topics or actions
|
|
59
|
-
5. Maintain the logical sequence of the original question when splitting into subqueries
|
|
60
|
-
6. **Important**: If the query cannot be split into multiple subqueries (i.e., it represents a single action or request), treat the entire query as one subquery and still follow the output format
|
|
61
|
-
|
|
62
|
-
Output Format:
|
|
63
|
-
You MUST return the output in the following JSON format. Do not include any other text before or after the JSON:
|
|
64
|
-
[
|
|
65
|
-
{
|
|
66
|
-
"subquery": "<subquery_1>",
|
|
67
|
-
"intentName": "<intent_name_1>",
|
|
68
|
-
"actionPlan": "<2-3 sentence description of what will be done for this subquery>"
|
|
69
|
-
},
|
|
70
|
-
{
|
|
71
|
-
"subquery": "<subquery_2>",
|
|
72
|
-
"intentName": "<intent_name_2>",
|
|
73
|
-
"actionPlan": "<2-3 sentence description of what will be done for this subquery>"
|
|
74
|
-
},
|
|
75
|
-
...
|
|
76
|
-
]
|
|
77
|
-
|
|
78
|
-
Requirements:
|
|
79
|
-
- Each subquery should represent a single, actionable task or request
|
|
80
|
-
- Preserve the original meaning and context when splitting queries
|
|
81
|
-
- Select only from the provided intent list
|
|
82
|
-
- DO NOT set intentName for any subquery that doesn't match available intents.
|
|
83
|
-
- Even if the query is simple and cannot be decomposed, return it as a single-element array with one subquery object`;
|
|
84
|
-
console.log(systemPrompt);
|
|
85
|
-
console.log(userMessage);
|
|
86
|
-
const messages = modelInstance.generateMessages({
|
|
87
|
-
query: userMessage,
|
|
88
|
-
systemPrompt
|
|
89
|
-
});
|
|
90
|
-
const response = await modelInstance.fetch(messages);
|
|
91
|
-
if (!response.content) {
|
|
92
|
-
_chunk466ED5WNcjs.loggers.intent.warn("Cannot extract intent from query");
|
|
93
|
-
return [{ subquery: query }];
|
|
94
|
-
}
|
|
95
|
-
let subqueries;
|
|
96
|
-
try {
|
|
97
|
-
subqueries = JSON.parse(response.content);
|
|
98
|
-
} catch (error) {
|
|
99
|
-
return [{ subquery: query }];
|
|
100
|
-
}
|
|
101
|
-
const triggeredIntent = [];
|
|
102
|
-
for (const { subquery, intentName, actionPlan } of subqueries) {
|
|
103
|
-
const item = { subquery, actionPlan };
|
|
104
|
-
if (intentName) {
|
|
105
|
-
item.intent = await intentMemory.getIntentByName(intentName);
|
|
106
|
-
}
|
|
107
|
-
triggeredIntent.push(item);
|
|
108
|
-
}
|
|
109
|
-
return triggeredIntent;
|
|
110
|
-
}
|
|
111
|
-
};
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
exports.IntentTriggerService = IntentTriggerService;
|
|
116
|
-
//# sourceMappingURL=chunk-YJSEM4WE.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/shyun/comcom/ain-agent/ain-adk/dist/cjs/chunk-YJSEM4WE.cjs","../../src/services/intents/trigger.service.ts"],"names":[],"mappings":"AAAA;AACE;AACF,wDAA6B;AAC7B;AACA;ACIO,IAAM,qBAAA,EAAN,MAA2B;AAAA,EACzB;AAAA,EACA;AAAA,EAER,WAAA,CAAY,WAAA,EAA0B,YAAA,EAA6B;AAClE,IAAA,IAAA,CAAK,YAAA,EAAc,WAAA;AACnB,IAAA,IAAA,CAAK,aAAA,EAAe,YAAA;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAa,gBAAA,CACZ,KAAA,EACA,MAAA,EACkC;AAClC,IAAA,MAAM,cAAA,EAAgB,IAAA,CAAK,WAAA,CAAY,QAAA,CAAS,CAAA;AAChD,IAAA,MAAM,aAAA,kBAAe,IAAA,mBAAK,YAAA,6BAAc,eAAA,mBAAgB,GAAA;AACxD,IAAA,GAAA,CAAI,CAAC,YAAA,EAAc;AAClB,MAAA,OAAO,CAAC,EAAE,QAAA,EAAU,MAAM,CAAC,CAAA;AAAA,IAC5B;AAGA,IAAA,MAAM,QAAA,EAAU,MAAM,YAAA,CAAa,WAAA,CAAY,CAAA;AAE/C,IAAA,GAAA,CAAI,OAAA,CAAQ,OAAA,IAAW,CAAA,EAAG;AACzB,MAAA,yBAAA,CAAQ,YAAA,CAAa,IAAA,CAAK,iBAAiB,CAAA;AAC3C,MAAA,OAAO,CAAC,EAAE,QAAA,EAAU,MAAM,CAAC,CAAA;AAAA,IAC5B;AAEA,IAAA,MAAM,WAAA,EAAa,OAAA,CACjB,GAAA,CAAI,CAAC,MAAA,EAAA,GAAW,CAAA,EAAA,EAAK,MAAA,CAAO,IAAI,CAAA,EAAA,EAAK,MAAA,CAAO,WAAW,CAAA,CAAA;AAOxB,IAAA;AAMxB,MAAA;AAGoB,MAAA;AAEI,MAAA;AAEpB,IAAA;AAEQ,IAAA;AACmB,SAAA;AAAA;AAAA;AAAA;AAI9B;AAAA;AAAA;AAAA,qFAAA;AAKU,IAAA;AAAA;AAEN;AAAA;AAEY,qBAAA;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;AAAA,oHAAA;AAoCF,IAAA;AACD,IAAA;AAEyB,IAAA;AACxC,MAAA;AACP,MAAA;AACA,IAAA;AAEkD,IAAA;AAC5B,IAAA;AACgC,MAAA;AAC3B,MAAA;AAC5B,IAAA;AAEI,IAAA;AACA,IAAA;AACqC,MAAA;AAChB,IAAA;AACG,MAAA;AAC5B,IAAA;AAEiD,IAAA;AACc,IAAA;AAC1B,MAAA;AACpB,MAAA;AAC4C,QAAA;AAC5D,MAAA;AACyB,MAAA;AAC1B,IAAA;AAEO,IAAA;AACR,EAAA;AACD;ADpCuF;AACA;AACA;AACA","file":"/Users/shyun/comcom/ain-agent/ain-adk/dist/cjs/chunk-YJSEM4WE.cjs","sourcesContent":[null,"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 = `\nToday is ${new Date().toLocaleDateString()}.\nYou 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. **Important**: If the query cannot be split into multiple subqueries (i.e., it represents a single action or request), treat the entire query as one subquery and still follow the output format\n\nOutput Format:\nYou MUST return the output in the following JSON format. Do not include any other text before or after the JSON:\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- DO NOT set intentName for any subquery that doesn't match available intents.\n- Even if the query is simple and cannot be decomposed, return it as a single-element array with one subquery object`;\n\n\n\t\tconsole.log(systemPrompt);\n\t\tconsole.log(userMessage);\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\tlet subqueries: any;\n\t\ttry {\n\t\t\tsubqueries = JSON.parse(response.content);\n\t\t} catch (error: unknown) {\n\t\t\treturn [{ subquery: query }];\n\t\t}\n\n\t\tconst triggeredIntent: Array<TriggeredIntent> = [];\n\t\tfor (const { subquery, intentName, actionPlan } of subqueries) {\n\t\t\tconst item = { subquery, actionPlan } as TriggeredIntent;\n\t\t\tif (intentName) {\n\t\t\t\titem.intent = await intentMemory.getIntentByName(intentName);\n\t\t\t}\n\t\t\ttriggeredIntent.push(item);\n\t\t}\n\n\t\treturn triggeredIntent;\n\t}\n}\n"]}
|
|
@@ -1,251 +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; }
|
|
2
|
-
|
|
3
|
-
var _chunk466ED5WNcjs = require('./chunk-466ED5WN.cjs');
|
|
4
|
-
|
|
5
|
-
// src/services/intents/fulfill-stream.service.ts
|
|
6
|
-
var _crypto = require('crypto');
|
|
7
|
-
var IntentFulfillStreamService = class {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
constructor(modelModule, a2aModule, mcpModule, memoryModule, prompts) {
|
|
14
|
-
this.modelModule = modelModule;
|
|
15
|
-
this.a2aModule = a2aModule;
|
|
16
|
-
this.mcpModule = mcpModule;
|
|
17
|
-
this.memoryModule = memoryModule;
|
|
18
|
-
this.prompts = prompts;
|
|
19
|
-
}
|
|
20
|
-
async addToThreadMessages(thread, params) {
|
|
21
|
-
try {
|
|
22
|
-
const threadMemory = _optionalChain([this, 'access', _ => _.memoryModule, 'optionalAccess', _2 => _2.getThreadMemory, 'call', _3 => _3()]);
|
|
23
|
-
const { userId, threadId } = thread;
|
|
24
|
-
const newMessage = {
|
|
25
|
-
messageId: _crypto.randomUUID.call(void 0, ),
|
|
26
|
-
role: params.role,
|
|
27
|
-
timestamp: Date.now(),
|
|
28
|
-
content: { type: "text", parts: [params.content] },
|
|
29
|
-
metadata: params.metadata
|
|
30
|
-
};
|
|
31
|
-
thread.messages.push(newMessage);
|
|
32
|
-
await _optionalChain([threadMemory, 'optionalAccess', _4 => _4.addMessagesToThread, 'call', _5 => _5(userId, threadId, [newMessage])]);
|
|
33
|
-
} catch (error) {
|
|
34
|
-
_chunk466ED5WNcjs.loggers.intentStream.error("Error adding message to thread", error);
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
/**
|
|
38
|
-
* Fulfills the detected intent by generating a streaming response.
|
|
39
|
-
*
|
|
40
|
-
* Manages the complete inference loop including:
|
|
41
|
-
* - Loading prompts and conversation history
|
|
42
|
-
* - Collecting available tools from modules
|
|
43
|
-
* - Executing model inference with tool support
|
|
44
|
-
* - Processing tool calls iteratively until completion
|
|
45
|
-
* - Streaming results as Server-Sent Events
|
|
46
|
-
*
|
|
47
|
-
* @param query - The user's input query
|
|
48
|
-
* @param threadId - Thread identifier for context
|
|
49
|
-
* @param thread - Previous conversation history
|
|
50
|
-
* @param intent - Optional detected intent with custom prompt
|
|
51
|
-
* @returns AsyncGenerator yielding StreamEvent objects
|
|
52
|
-
*/
|
|
53
|
-
async *intentFulfilling(query, thread, intent) {
|
|
54
|
-
_chunk466ED5WNcjs.loggers.intentStream.info("Intent fulfillment started", {
|
|
55
|
-
threadId: thread.threadId,
|
|
56
|
-
query: query.substring(0, 100) + (query.length > 100 ? "..." : ""),
|
|
57
|
-
intentName: _optionalChain([intent, 'optionalAccess', _6 => _6.name])
|
|
58
|
-
});
|
|
59
|
-
const systemPrompt = `
|
|
60
|
-
Today is ${(/* @__PURE__ */ new Date()).toLocaleDateString()}.
|
|
61
|
-
|
|
62
|
-
${_optionalChain([this, 'access', _7 => _7.prompts, 'optionalAccess', _8 => _8.agent]) || ""}
|
|
63
|
-
|
|
64
|
-
${_optionalChain([this, 'access', _9 => _9.prompts, 'optionalAccess', _10 => _10.system]) || ""}
|
|
65
|
-
|
|
66
|
-
${_optionalChain([intent, 'optionalAccess', _11 => _11.prompt]) || ""}
|
|
67
|
-
`.trim();
|
|
68
|
-
const modelInstance = this.modelModule.getModel();
|
|
69
|
-
const messages = modelInstance.generateMessages({
|
|
70
|
-
query,
|
|
71
|
-
thread,
|
|
72
|
-
systemPrompt: systemPrompt.trim()
|
|
73
|
-
});
|
|
74
|
-
const tools = [];
|
|
75
|
-
this.mcpModule && tools.push(...this.mcpModule.getTools());
|
|
76
|
-
this.a2aModule && tools.push(...await this.a2aModule.getTools());
|
|
77
|
-
const processList = [];
|
|
78
|
-
while (true) {
|
|
79
|
-
const functions = modelInstance.convertToolsToFunctions(tools);
|
|
80
|
-
const responseStream = await modelInstance.fetchStreamWithContextMessage(
|
|
81
|
-
messages,
|
|
82
|
-
functions
|
|
83
|
-
);
|
|
84
|
-
const assembledToolCalls = [];
|
|
85
|
-
_chunk466ED5WNcjs.loggers.intentStream.info("messages", { messages });
|
|
86
|
-
for await (const chunk of responseStream) {
|
|
87
|
-
const delta = chunk.delta;
|
|
88
|
-
if (_optionalChain([delta, 'optionalAccess', _12 => _12.tool_calls])) {
|
|
89
|
-
for (const { index, id, function: func } of delta.tool_calls) {
|
|
90
|
-
assembledToolCalls[index] ??= {
|
|
91
|
-
id: "",
|
|
92
|
-
type: "function",
|
|
93
|
-
function: { name: "", arguments: "" }
|
|
94
|
-
};
|
|
95
|
-
if (id) assembledToolCalls[index].id = id;
|
|
96
|
-
if (_optionalChain([func, 'optionalAccess', _13 => _13.name])) assembledToolCalls[index].function.name = func.name;
|
|
97
|
-
if (_optionalChain([func, 'optionalAccess', _14 => _14.arguments]))
|
|
98
|
-
assembledToolCalls[index].function.arguments += func.arguments;
|
|
99
|
-
}
|
|
100
|
-
} else if (_optionalChain([chunk, 'access', _15 => _15.delta, 'optionalAccess', _16 => _16.content])) {
|
|
101
|
-
yield {
|
|
102
|
-
event: "text_chunk",
|
|
103
|
-
data: { delta: chunk.delta.content }
|
|
104
|
-
};
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
_chunk466ED5WNcjs.loggers.intentStream.debug("assembledToolCalls", {
|
|
108
|
-
assembledToolCalls
|
|
109
|
-
});
|
|
110
|
-
if (assembledToolCalls.length > 0) {
|
|
111
|
-
for (const toolCall of assembledToolCalls) {
|
|
112
|
-
const toolCallId = _crypto.randomUUID.call(void 0, );
|
|
113
|
-
const toolName = toolCall.function.name;
|
|
114
|
-
let selectedTool;
|
|
115
|
-
for (const [index, toolTmp] of tools.entries()) {
|
|
116
|
-
if (toolTmp.toolName === toolName) {
|
|
117
|
-
selectedTool = tools.splice(index, 1)[0];
|
|
118
|
-
break;
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
if (!selectedTool) {
|
|
122
|
-
continue;
|
|
123
|
-
}
|
|
124
|
-
let toolResult = "";
|
|
125
|
-
if (this.mcpModule && selectedTool.protocol === "MCP" /* MCP */) {
|
|
126
|
-
const toolArgs = JSON.parse(toolCall.function.arguments);
|
|
127
|
-
yield {
|
|
128
|
-
event: "tool_start",
|
|
129
|
-
data: {
|
|
130
|
-
toolCallId,
|
|
131
|
-
protocol: "MCP" /* MCP */,
|
|
132
|
-
toolName,
|
|
133
|
-
toolArgs
|
|
134
|
-
}
|
|
135
|
-
};
|
|
136
|
-
_chunk466ED5WNcjs.loggers.intent.info("MCP tool call", { toolName, toolArgs });
|
|
137
|
-
toolResult = await this.mcpModule.useTool(selectedTool, toolArgs);
|
|
138
|
-
} else if (this.a2aModule && selectedTool.protocol === "A2A" /* A2A */) {
|
|
139
|
-
yield {
|
|
140
|
-
event: "tool_start",
|
|
141
|
-
data: {
|
|
142
|
-
toolCallId,
|
|
143
|
-
protocol: "A2A" /* A2A */,
|
|
144
|
-
toolName,
|
|
145
|
-
toolArgs: null
|
|
146
|
-
}
|
|
147
|
-
};
|
|
148
|
-
_chunk466ED5WNcjs.loggers.intent.info("A2A tool call", { toolName });
|
|
149
|
-
toolResult = await this.a2aModule.useTool(
|
|
150
|
-
selectedTool,
|
|
151
|
-
query,
|
|
152
|
-
thread.threadId
|
|
153
|
-
);
|
|
154
|
-
} else {
|
|
155
|
-
_chunk466ED5WNcjs.loggers.intent.warn(
|
|
156
|
-
`Unrecognized tool type: ${selectedTool.protocol}`
|
|
157
|
-
);
|
|
158
|
-
continue;
|
|
159
|
-
}
|
|
160
|
-
yield {
|
|
161
|
-
event: "tool_output",
|
|
162
|
-
data: {
|
|
163
|
-
toolCallId,
|
|
164
|
-
protocol: selectedTool.protocol,
|
|
165
|
-
toolName,
|
|
166
|
-
result: toolResult
|
|
167
|
-
}
|
|
168
|
-
};
|
|
169
|
-
_chunk466ED5WNcjs.loggers.intent.debug("toolResult", { toolResult });
|
|
170
|
-
processList.push(toolResult);
|
|
171
|
-
modelInstance.appendMessages(messages, toolResult);
|
|
172
|
-
}
|
|
173
|
-
} else {
|
|
174
|
-
break;
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
_chunk466ED5WNcjs.loggers.intentStream.info("Intent fulfillment completed", {
|
|
178
|
-
threadId: thread.threadId,
|
|
179
|
-
toolCallsExecuted: processList.length,
|
|
180
|
-
intentName: _optionalChain([intent, 'optionalAccess', _17 => _17.name])
|
|
181
|
-
});
|
|
182
|
-
}
|
|
183
|
-
/**
|
|
184
|
-
* Detects the intent from context.
|
|
185
|
-
*
|
|
186
|
-
* @param intents - The user's input query
|
|
187
|
-
* @param thread - The thread history
|
|
188
|
-
* @returns The detected intent
|
|
189
|
-
*/
|
|
190
|
-
async *intentFulfillStream(intents, thread) {
|
|
191
|
-
const streamStartTime = Date.now();
|
|
192
|
-
_chunk466ED5WNcjs.loggers.intentStream.info("Stream session started", {
|
|
193
|
-
threadId: thread.threadId,
|
|
194
|
-
intentCount: intents.length,
|
|
195
|
-
startTime: new Date(streamStartTime).toISOString()
|
|
196
|
-
});
|
|
197
|
-
let finalResponseText = "";
|
|
198
|
-
for (let i = 0; i < intents.length; i++) {
|
|
199
|
-
const { subquery, intent, actionPlan } = intents[i];
|
|
200
|
-
_chunk466ED5WNcjs.loggers.intent.info(`Process query: ${subquery}, ${_optionalChain([intent, 'optionalAccess', _18 => _18.name])}`);
|
|
201
|
-
_chunk466ED5WNcjs.loggers.intent.info(`Action plan: ${actionPlan}`);
|
|
202
|
-
finalResponseText !== "" && thread.messages.push({
|
|
203
|
-
messageId: _crypto.randomUUID.call(void 0, ),
|
|
204
|
-
role: "MODEL" /* MODEL */,
|
|
205
|
-
timestamp: Date.now(),
|
|
206
|
-
content: { type: "text", parts: [finalResponseText] },
|
|
207
|
-
metadata: { isThinking: true }
|
|
208
|
-
});
|
|
209
|
-
await this.addToThreadMessages(thread, {
|
|
210
|
-
role: "MODEL" /* MODEL */,
|
|
211
|
-
content: subquery,
|
|
212
|
-
metadata: {
|
|
213
|
-
subquery,
|
|
214
|
-
isThinking: true,
|
|
215
|
-
actionPlan
|
|
216
|
-
}
|
|
217
|
-
});
|
|
218
|
-
yield {
|
|
219
|
-
event: "intent_process",
|
|
220
|
-
data: { subquery, actionPlan: actionPlan || "" }
|
|
221
|
-
};
|
|
222
|
-
const stream = this.intentFulfilling(subquery, thread, intent);
|
|
223
|
-
finalResponseText = "";
|
|
224
|
-
for await (const event of stream) {
|
|
225
|
-
if (event.event === "text_chunk" && event.data.delta) {
|
|
226
|
-
finalResponseText += event.data.delta;
|
|
227
|
-
}
|
|
228
|
-
if (event.event === "text_chunk" && i !== intents.length - 1) {
|
|
229
|
-
continue;
|
|
230
|
-
}
|
|
231
|
-
yield event;
|
|
232
|
-
}
|
|
233
|
-
}
|
|
234
|
-
await this.addToThreadMessages(thread, {
|
|
235
|
-
role: "MODEL" /* MODEL */,
|
|
236
|
-
content: finalResponseText
|
|
237
|
-
});
|
|
238
|
-
const streamEndTime = Date.now();
|
|
239
|
-
const streamDuration = streamEndTime - streamStartTime;
|
|
240
|
-
_chunk466ED5WNcjs.loggers.intentStream.info("Stream session completed", {
|
|
241
|
-
threadId: thread.threadId,
|
|
242
|
-
duration: `${streamDuration}ms`,
|
|
243
|
-
endTime: new Date(streamEndTime).toISOString()
|
|
244
|
-
});
|
|
245
|
-
}
|
|
246
|
-
};
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
exports.IntentFulfillStreamService = IntentFulfillStreamService;
|
|
251
|
-
//# sourceMappingURL=chunk-YMNLHFLD.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/shyun/comcom/ain-agent/ain-adk/dist/cjs/chunk-YMNLHFLD.cjs","../../src/services/intents/fulfill-stream.service.ts"],"names":[],"mappings":"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","file":"/Users/shyun/comcom/ain-agent/ain-adk/dist/cjs/chunk-YMNLHFLD.cjs","sourcesContent":[null,"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: {\n\t\t\trole: MessageRole;\n\t\t\tcontent: string;\n\t\t\tmetadata?: Record<string, unknown>;\n\t\t},\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\tprivate async *intentFulfilling(\n\t\tquery: string,\n\t\tthread: ThreadObject,\n\t\tintent?: Intent,\n\t): AsyncGenerator<StreamEvent> {\n\t\tloggers.intentStream.info(\"Intent fulfillment started\", {\n\t\t\tthreadId: thread.threadId,\n\t\t\tquery: query.substring(0, 100) + (query.length > 100 ? \"...\" : \"\"),\n\t\t\tintentName: intent?.name,\n\t\t});\n\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 processList: string[] = [];\n\n\t\twhile (true) {\n\t\t\tconst functions = modelInstance.convertToolsToFunctions(tools);\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\tlet selectedTool: ConnectorTool | undefined;\n\t\t\t\t\tfor (const [index, toolTmp] of tools.entries()) {\n\t\t\t\t\t\tif (toolTmp.toolName === toolName) {\n\t\t\t\t\t\t\t// remove used tool to prevent infinite loop\n\t\t\t\t\t\t\tselectedTool = tools.splice(index, 1)[0];\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!selectedTool) {\n\t\t\t\t\t\t// it cannot be happened...\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\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\n\t\t\t\t\t// remove used tool to prevent infinite loop\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tloggers.intentStream.info(\"Intent fulfillment completed\", {\n\t\t\tthreadId: thread.threadId,\n\t\t\ttoolCallsExecuted: processList.length,\n\t\t\tintentName: intent?.name,\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\tconst streamStartTime = Date.now();\n\t\tloggers.intentStream.info(\"Stream session started\", {\n\t\t\tthreadId: thread.threadId,\n\t\t\tintentCount: intents.length,\n\t\t\tstartTime: new Date(streamStartTime).toISOString(),\n\t\t});\n\n\t\tlet finalResponseText = \"\";\n\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\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\n\t\tconst streamEndTime = Date.now();\n\t\tconst streamDuration = streamEndTime - streamStartTime;\n\n\t\tloggers.intentStream.info(\"Stream session completed\", {\n\t\t\tthreadId: thread.threadId,\n\t\t\tduration: `${streamDuration}ms`,\n\t\t\tendTime: new Date(streamEndTime).toISOString(),\n\t\t});\n\t}\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/shyun/comcom/ain-agent/ain-adk/dist/cjs/chunk-ZFSXQFEK.cjs","../../src/modules/a2a/a2a.module.ts"],"names":[],"mappings":"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","file":"/Users/shyun/comcom/ain-agent/ain-adk/dist/cjs/chunk-ZFSXQFEK.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,43 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
|
-
|
|
3
|
-
var _chunkCGD7CECKcjs = require('./chunk-CGD7CECK.cjs');
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
var _chunkHDZ5POWBcjs = require('./chunk-HDZ5POWB.cjs');
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
var _chunkMJAKDII2cjs = require('./chunk-MJAKDII2.cjs');
|
|
10
|
-
|
|
11
|
-
// src/routes/query.routes.ts
|
|
12
|
-
var _express = require('express');
|
|
13
|
-
var createQueryRouter = (agent, allowStream = false) => {
|
|
14
|
-
const router = _express.Router.call(void 0, );
|
|
15
|
-
const queryService = new (0, _chunkCGD7CECKcjs.QueryService)(
|
|
16
|
-
agent.modelModule,
|
|
17
|
-
agent.a2aModule,
|
|
18
|
-
agent.mcpModule,
|
|
19
|
-
agent.memoryModule,
|
|
20
|
-
agent.manifest.prompts
|
|
21
|
-
);
|
|
22
|
-
let queryStreamService;
|
|
23
|
-
if (allowStream) {
|
|
24
|
-
queryStreamService = new (0, _chunkHDZ5POWBcjs.QueryStreamService)(
|
|
25
|
-
agent.modelModule,
|
|
26
|
-
agent.a2aModule,
|
|
27
|
-
agent.mcpModule,
|
|
28
|
-
agent.memoryModule,
|
|
29
|
-
agent.manifest.prompts
|
|
30
|
-
);
|
|
31
|
-
}
|
|
32
|
-
const queryController = new (0, _chunkMJAKDII2cjs.QueryController)(queryService, queryStreamService);
|
|
33
|
-
router.post("/", queryController.handleQueryRequest);
|
|
34
|
-
if (allowStream) {
|
|
35
|
-
router.post("/stream", queryController.handleQueryStreamRequest);
|
|
36
|
-
}
|
|
37
|
-
return router;
|
|
38
|
-
};
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
exports.createQueryRouter = createQueryRouter;
|
|
43
|
-
//# sourceMappingURL=chunk-ZP35BH7F.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/shyun/comcom/ain-agent/ain-adk/dist/cjs/chunk-ZP35BH7F.cjs","../../src/routes/query.routes.ts"],"names":[],"mappings":"AAAA;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACA;ACVA,kCAAuB;AAMhB,IAAM,kBAAA,EAAoB,CAChC,KAAA,EACA,YAAA,EAAc,KAAA,EAAA,GACF;AACZ,EAAA,MAAM,OAAA,EAAS,6BAAA,CAAO;AAEtB,EAAA,MAAM,aAAA,EAAe,IAAI,mCAAA;AAAA,IACxB,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;AAEA,EAAA,IAAI,kBAAA;AAEJ,EAAA,GAAA,CAAI,WAAA,EAAa;AAChB,IAAA,mBAAA,EAAqB,IAAI,yCAAA;AAAA,MACxB,KAAA,CAAM,WAAA;AAAA,MACN,KAAA,CAAM,SAAA;AAAA,MACN,KAAA,CAAM,SAAA;AAAA,MACN,KAAA,CAAM,YAAA;AAAA,MACN,KAAA,CAAM,QAAA,CAAS;AAAA,IAChB,CAAA;AAAA,EACD;AAEA,EAAA,MAAM,gBAAA,EAAkB,IAAI,sCAAA,CAAgB,YAAA,EAAc,kBAAkB,CAAA;AAC5E,EAAA,MAAA,CAAO,IAAA,CAAK,GAAA,EAAK,eAAA,CAAgB,kBAAkB,CAAA;AAEnD,EAAA,GAAA,CAAI,WAAA,EAAa;AAChB,IAAA,MAAA,CAAO,IAAA,CAAK,SAAA,EAAW,eAAA,CAAgB,wBAAwB,CAAA;AAAA,EAChE;AAEA,EAAA,OAAO,MAAA;AACR,CAAA;ADFA;AACA;AACE;AACF,8CAAC","file":"/Users/shyun/comcom/ain-agent/ain-adk/dist/cjs/chunk-ZP35BH7F.cjs","sourcesContent":[null,"import { Router } from \"express\";\nimport { QueryController } from \"@/controllers/query.controller.js\";\nimport type { AINAgent } from \"@/index.js\";\nimport { QueryService } from \"@/services/query.service.js\";\nimport { QueryStreamService } from \"@/services/query-stream.service.js\";\n\nexport const createQueryRouter = (\n\tagent: AINAgent,\n\tallowStream = false,\n): Router => {\n\tconst router = Router();\n\n\tconst queryService = new QueryService(\n\t\tagent.modelModule,\n\t\tagent.a2aModule,\n\t\tagent.mcpModule,\n\t\tagent.memoryModule,\n\t\tagent.manifest.prompts,\n\t);\n\n\tlet queryStreamService: QueryStreamService | undefined;\n\n\tif (allowStream) {\n\t\tqueryStreamService = new QueryStreamService(\n\t\t\tagent.modelModule,\n\t\t\tagent.a2aModule,\n\t\t\tagent.mcpModule,\n\t\t\tagent.memoryModule,\n\t\t\tagent.manifest.prompts,\n\t\t);\n\t}\n\n\tconst queryController = new QueryController(queryService, queryStreamService);\n\trouter.post(\"/\", queryController.handleQueryRequest);\n\n\tif (allowStream) {\n\t\trouter.post(\"/stream\", queryController.handleQueryStreamRequest);\n\t}\n\n\treturn router;\n};\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/services/a2a.service.ts"],"sourcesContent":["import { randomUUID } from \"node:crypto\";\nimport type { Task, TaskStatusUpdateEvent } from \"@a2a-js/sdk\";\nimport type {\n\tAgentExecutor,\n\tExecutionEventBus,\n\tRequestContext,\n} from \"@a2a-js/sdk/server\";\nimport type { ThreadType } from \"@/types/memory.js\";\nimport { loggers } from \"@/utils/logger.js\";\nimport type { QueryStreamService } from \"./query-stream.service.js\";\n\n/**\n * Implements the AgentExecutor interface from the a2a-js-sdk.\n * This service is responsible for the core business logic of executing an A2A task.\n */\nexport class A2AService implements AgentExecutor {\n\tprivate queryStreamService: QueryStreamService;\n\tprivate canceledTasks: Set<string> = new Set<string>();\n\n\tconstructor(queryStreamService: QueryStreamService) {\n\t\tthis.queryStreamService = queryStreamService;\n\t}\n\n\tpublic cancelTask = async (\n\t\ttaskId: string,\n\t\t_eventBus: ExecutionEventBus,\n\t): Promise<void> => {\n\t\tthis.canceledTasks.add(taskId);\n\t};\n\n\tprivate createTaskStatusUpdateEvent = (\n\t\ttaskId: string,\n\t\tcontextId: string,\n\t\tstate: \"working\" | \"failed\" | \"canceled\" | \"completed\",\n\t\tmessage?: string,\n\t): TaskStatusUpdateEvent => {\n\t\treturn {\n\t\t\tkind: \"status-update\",\n\t\t\ttaskId: taskId,\n\t\t\tcontextId: contextId,\n\t\t\tstatus: {\n\t\t\t\tstate: state,\n\t\t\t\tmessage: message\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tkind: \"message\",\n\t\t\t\t\t\t\trole: \"agent\",\n\t\t\t\t\t\t\tmessageId: randomUUID(),\n\t\t\t\t\t\t\tparts: [{ kind: \"text\", text: message }],\n\t\t\t\t\t\t\ttaskId: taskId,\n\t\t\t\t\t\t\tcontextId: contextId,\n\t\t\t\t\t\t}\n\t\t\t\t\t: undefined,\n\t\t\t\ttimestamp: new Date().toISOString(),\n\t\t\t},\n\t\t\tfinal: state !== \"working\",\n\t\t};\n\t};\n\n\tasync execute(\n\t\trequestContext: RequestContext,\n\t\teventBus: ExecutionEventBus,\n\t): Promise<void> {\n\t\tconst userMessage = requestContext.userMessage;\n\t\t// A2A context ID === AIN ADK thread ID\n\t\tconst threadId = userMessage.contextId!; // TODO: no context id case\n\n\t\tconst { agentId, type } = userMessage.metadata as {\n\t\t\tagentId: string;\n\t\t\ttype: ThreadType;\n\t\t};\n\t\tconst existingTask = requestContext.task;\n\n\t\tconst taskId = existingTask?.id || randomUUID();\n\n\t\tif (!existingTask) {\n\t\t\tconst initialTask: Task = {\n\t\t\t\tkind: \"task\",\n\t\t\t\tid: taskId,\n\t\t\t\tcontextId: threadId,\n\t\t\t\tstatus: {\n\t\t\t\t\tstate: \"submitted\",\n\t\t\t\t\ttimestamp: new Date().toISOString(),\n\t\t\t\t},\n\t\t\t\thistory: [userMessage],\n\t\t\t\tmetadata: userMessage.metadata,\n\t\t\t\tartifacts: [],\n\t\t\t};\n\t\t\teventBus.publish(initialTask);\n\t\t}\n\n\t\tconst workingStatusUpdate = this.createTaskStatusUpdateEvent(\n\t\t\ttaskId,\n\t\t\tthreadId,\n\t\t\t\"working\",\n\t\t);\n\t\teventBus.publish(workingStatusUpdate);\n\n\t\tconst message: string = userMessage.parts\n\t\t\t.filter((part) => part.kind === \"text\")\n\t\t\t.map((part) => part.text)\n\t\t\t.join(\"\\n\");\n\t\tif (message.length === 0) {\n\t\t\tloggers.server.warn(`Empty message received for task ${taskId}.`);\n\t\t\tconst failureUpdate = this.createTaskStatusUpdateEvent(\n\t\t\t\ttaskId,\n\t\t\t\tthreadId,\n\t\t\t\t\"failed\",\n\t\t\t\t\"No message found to process.\",\n\t\t\t);\n\t\t\teventBus.publish(failureUpdate);\n\t\t\treturn;\n\t\t}\n\n\t\tconst stream = this.queryStreamService.handleQueryStream(\n\t\t\t{ userId: agentId, type, threadId },\n\t\t\tmessage,\n\t\t\ttrue,\n\t\t);\n\n\t\ttry {\n\t\t\tlet finalResponseText = \"\";\n\t\t\tfor await (const event of stream) {\n\t\t\t\tif (this.canceledTasks.has(taskId)) {\n\t\t\t\t\tloggers.server.info(`Task ${taskId} was canceled.`);\n\t\t\t\t\tconst canceledUpdate = this.createTaskStatusUpdateEvent(\n\t\t\t\t\t\ttaskId,\n\t\t\t\t\t\tthreadId,\n\t\t\t\t\t\t\"canceled\",\n\t\t\t\t\t);\n\t\t\t\t\teventBus.publish(canceledUpdate);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (event.event === \"text_chunk\") {\n\t\t\t\t\tfinalResponseText += event.data.delta;\n\t\t\t\t} else if (event.event === \"tool_start\") {\n\t\t\t\t\tconst toolStartUpdate = this.createTaskStatusUpdateEvent(\n\t\t\t\t\t\ttaskId,\n\t\t\t\t\t\tthreadId,\n\t\t\t\t\t\t\"working\",\n\t\t\t\t\t\tJSON.stringify(event.data),\n\t\t\t\t\t);\n\t\t\t\t\teventBus.publish(toolStartUpdate);\n\t\t\t\t} else if (event.event === \"tool_output\") {\n\t\t\t\t\tconst toolOutputUpdate = this.createTaskStatusUpdateEvent(\n\t\t\t\t\t\ttaskId,\n\t\t\t\t\t\tthreadId,\n\t\t\t\t\t\t\"working\",\n\t\t\t\t\t\tJSON.stringify(event.data),\n\t\t\t\t\t);\n\t\t\t\t\teventBus.publish(toolOutputUpdate);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst finalUpdate = this.createTaskStatusUpdateEvent(\n\t\t\t\ttaskId,\n\t\t\t\tthreadId,\n\t\t\t\t\"completed\",\n\t\t\t\tfinalResponseText,\n\t\t\t);\n\t\t\teventBus.publish(finalUpdate);\n\t\t\tloggers.server.info(`Task ${taskId} completed successfully.`);\n\t\t} catch (error: any) {\n\t\t\tloggers.server.error(`Error processing task ${taskId}:`, error);\n\t\t\tconst errorUpdate = this.createTaskStatusUpdateEvent(\n\t\t\t\ttaskId,\n\t\t\t\tthreadId,\n\t\t\t\t\"failed\",\n\t\t\t\t`Agent error: ${error.message}`,\n\t\t\t);\n\t\t\teventBus.publish(errorUpdate);\n\t\t}\n\t}\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
// src/utils/logger.ts
|
|
2
|
-
import winston from "winston";
|
|
3
|
-
var { combine, timestamp, printf, colorize, errors } = winston.format;
|
|
4
|
-
var createLogger = (service) => {
|
|
5
|
-
const logger2 = winston.createLogger({
|
|
6
|
-
level: (process.env.LOG_LEVEL || "info").toLowerCase(),
|
|
7
|
-
format: combine(
|
|
8
|
-
errors({ stack: true }),
|
|
9
|
-
colorize(),
|
|
10
|
-
timestamp({ format: "HH:mm:ss" }),
|
|
11
|
-
printf(({ level, message, timestamp: timestamp2, service: service2, stack, ...meta }) => {
|
|
12
|
-
const metaStr = Object.keys(meta).length ? ` | ${JSON.stringify(meta)}` : "";
|
|
13
|
-
const errorStack = stack ? `
|
|
14
|
-
${stack}` : "";
|
|
15
|
-
return `${timestamp2} [${service2}] ${level}: ${message}${metaStr}${errorStack}`;
|
|
16
|
-
})
|
|
17
|
-
),
|
|
18
|
-
defaultMeta: { service },
|
|
19
|
-
transports: [new winston.transports.Console()]
|
|
20
|
-
});
|
|
21
|
-
return logger2;
|
|
22
|
-
};
|
|
23
|
-
var logger = createLogger("ain-adk");
|
|
24
|
-
var getLogger = (service) => createLogger(service);
|
|
25
|
-
var loggers = {
|
|
26
|
-
agent: getLogger("AINAgent"),
|
|
27
|
-
intent: getLogger("Intent"),
|
|
28
|
-
intentStream: getLogger("IntentStream"),
|
|
29
|
-
mcp: getLogger("MCPModule"),
|
|
30
|
-
a2a: getLogger("A2AModule"),
|
|
31
|
-
model: getLogger("Model"),
|
|
32
|
-
server: getLogger("A2AServer"),
|
|
33
|
-
fol: getLogger("FOL")
|
|
34
|
-
};
|
|
35
|
-
|
|
36
|
-
export {
|
|
37
|
-
logger,
|
|
38
|
-
getLogger,
|
|
39
|
-
loggers
|
|
40
|
-
};
|
|
41
|
-
//# sourceMappingURL=chunk-N7VYM2R5.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utils/logger.ts"],"sourcesContent":["import winston from \"winston\";\n\nconst { combine, timestamp, printf, colorize, errors } = winston.format;\n\nconst createLogger = (service: string) => {\n\tconst logger = winston.createLogger({\n\t\tlevel: (process.env.LOG_LEVEL || \"info\").toLowerCase(),\n\t\tformat: combine(\n\t\t\terrors({ stack: true }),\n\t\t\tcolorize(),\n\t\t\ttimestamp({ format: \"HH:mm:ss\" }),\n\t\t\tprintf(({ level, message, timestamp, service, stack, ...meta }) => {\n\t\t\t\tconst metaStr = Object.keys(meta).length\n\t\t\t\t\t? ` | ${JSON.stringify(meta)}`\n\t\t\t\t\t: \"\";\n\t\t\t\tconst errorStack = stack ? `\\n${stack}` : \"\";\n\t\t\t\treturn `${timestamp} [${service}] ${level}: ${message}${metaStr}${errorStack}`;\n\t\t\t}),\n\t\t),\n\t\tdefaultMeta: { service },\n\t\ttransports: [new winston.transports.Console()],\n\t});\n\n\treturn logger;\n};\n\n// Default logger instance\nexport const logger = createLogger(\"ain-adk\");\n\n// Factory function for creating service-specific loggers\nexport const getLogger = (service: string) => createLogger(service);\n\n// Convenience methods for different components\nexport const loggers = {\n\tagent: getLogger(\"AINAgent\"),\n\tintent: getLogger(\"Intent\"),\n\tintentStream: getLogger(\"IntentStream\"),\n\tmcp: getLogger(\"MCPModule\"),\n\ta2a: getLogger(\"A2AModule\"),\n\tmodel: getLogger(\"Model\"),\n\tserver: getLogger(\"A2AServer\"),\n\tfol: getLogger(\"FOL\"),\n} as const;\n"],"mappings":";AAAA,OAAO,aAAa;AAEpB,IAAM,EAAE,SAAS,WAAW,QAAQ,UAAU,OAAO,IAAI,QAAQ;AAEjE,IAAM,eAAe,CAAC,YAAoB;AACzC,QAAMA,UAAS,QAAQ,aAAa;AAAA,IACnC,QAAQ,QAAQ,IAAI,aAAa,QAAQ,YAAY;AAAA,IACrD,QAAQ;AAAA,MACP,OAAO,EAAE,OAAO,KAAK,CAAC;AAAA,MACtB,SAAS;AAAA,MACT,UAAU,EAAE,QAAQ,WAAW,CAAC;AAAA,MAChC,OAAO,CAAC,EAAE,OAAO,SAAS,WAAAC,YAAW,SAAAC,UAAS,OAAO,GAAG,KAAK,MAAM;AAClE,cAAM,UAAU,OAAO,KAAK,IAAI,EAAE,SAC/B,MAAM,KAAK,UAAU,IAAI,CAAC,KAC1B;AACH,cAAM,aAAa,QAAQ;AAAA,EAAK,KAAK,KAAK;AAC1C,eAAO,GAAGD,UAAS,KAAKC,QAAO,KAAK,KAAK,KAAK,OAAO,GAAG,OAAO,GAAG,UAAU;AAAA,MAC7E,CAAC;AAAA,IACF;AAAA,IACA,aAAa,EAAE,QAAQ;AAAA,IACvB,YAAY,CAAC,IAAI,QAAQ,WAAW,QAAQ,CAAC;AAAA,EAC9C,CAAC;AAED,SAAOF;AACR;AAGO,IAAM,SAAS,aAAa,SAAS;AAGrC,IAAM,YAAY,CAAC,YAAoB,aAAa,OAAO;AAG3D,IAAM,UAAU;AAAA,EACtB,OAAO,UAAU,UAAU;AAAA,EAC3B,QAAQ,UAAU,QAAQ;AAAA,EAC1B,cAAc,UAAU,cAAc;AAAA,EACtC,KAAK,UAAU,WAAW;AAAA,EAC1B,KAAK,UAAU,WAAW;AAAA,EAC1B,OAAO,UAAU,OAAO;AAAA,EACxB,QAAQ,UAAU,WAAW;AAAA,EAC7B,KAAK,UAAU,KAAK;AACrB;","names":["logger","timestamp","service"]}
|
|
@@ -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\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"],"mappings":"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","names":[]}
|