@ainetwork/adk 0.3.4 → 0.3.5
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/README.md +31 -6
- package/dist/cjs/chunk-2B6ZXQB6.cjs +38 -0
- package/dist/cjs/chunk-2B6ZXQB6.cjs.map +1 -0
- package/dist/cjs/chunk-2HDSF5GS.cjs +367 -0
- package/dist/cjs/chunk-2HDSF5GS.cjs.map +1 -0
- package/dist/cjs/chunk-2HV2HAU2.cjs +62 -0
- package/dist/cjs/chunk-2HV2HAU2.cjs.map +1 -0
- package/dist/cjs/chunk-2IKGA5IV.cjs +17 -0
- package/dist/cjs/chunk-2IKGA5IV.cjs.map +1 -0
- package/dist/cjs/chunk-2ZD4XC2I.cjs +44 -0
- package/dist/cjs/chunk-2ZD4XC2I.cjs.map +1 -0
- package/dist/cjs/chunk-34FFNAOJ.cjs +18 -0
- package/dist/cjs/chunk-34FFNAOJ.cjs.map +1 -0
- package/dist/cjs/chunk-3KX24OQQ.cjs +29 -0
- package/dist/cjs/chunk-3KX24OQQ.cjs.map +1 -0
- package/dist/cjs/chunk-4CHPQFJO.cjs +74 -0
- package/dist/cjs/chunk-4CHPQFJO.cjs.map +1 -0
- package/dist/cjs/chunk-4H4APXBR.cjs +17 -0
- package/dist/cjs/chunk-4H4APXBR.cjs.map +1 -0
- package/dist/cjs/chunk-4LMTR322.cjs +44 -0
- package/dist/cjs/chunk-4LMTR322.cjs.map +1 -0
- package/dist/cjs/chunk-4NZJLMT7.cjs +38 -0
- package/dist/cjs/chunk-4NZJLMT7.cjs.map +1 -0
- package/dist/cjs/chunk-4SRDLHXS.cjs +17 -0
- package/dist/cjs/chunk-4SRDLHXS.cjs.map +1 -0
- package/dist/cjs/chunk-4UDENVOJ.cjs +38 -0
- package/dist/cjs/chunk-4UDENVOJ.cjs.map +1 -0
- package/dist/cjs/chunk-4UMM25ZT.cjs +29 -0
- package/dist/cjs/chunk-4UMM25ZT.cjs.map +1 -0
- package/dist/cjs/chunk-5P25YU2Z.cjs +17 -0
- package/dist/cjs/chunk-5P25YU2Z.cjs.map +1 -0
- package/dist/cjs/chunk-5VHF27F5.cjs +44 -0
- package/dist/cjs/chunk-5VHF27F5.cjs.map +1 -0
- package/dist/cjs/chunk-65JM632P.cjs +17 -0
- package/dist/cjs/chunk-65JM632P.cjs.map +1 -0
- package/dist/cjs/chunk-6BYF7CRT.cjs +17 -0
- package/dist/cjs/chunk-6BYF7CRT.cjs.map +1 -0
- package/dist/cjs/chunk-6R7PSGDX.cjs +17 -0
- package/dist/cjs/chunk-6R7PSGDX.cjs.map +1 -0
- package/dist/cjs/chunk-6SVNJWA6.cjs +44 -0
- package/dist/cjs/chunk-6SVNJWA6.cjs.map +1 -0
- package/dist/cjs/chunk-77XJWOSB.cjs +17 -0
- package/dist/cjs/chunk-77XJWOSB.cjs.map +1 -0
- package/dist/cjs/chunk-7CDJAB5L.cjs +29 -0
- package/dist/cjs/chunk-7CDJAB5L.cjs.map +1 -0
- package/dist/cjs/chunk-7DVPCJUI.cjs +17 -0
- package/dist/cjs/chunk-7DVPCJUI.cjs.map +1 -0
- package/dist/cjs/chunk-7FOASY25.cjs +29 -0
- package/dist/cjs/chunk-7FOASY25.cjs.map +1 -0
- package/dist/cjs/chunk-7TVJGM6H.cjs +74 -0
- package/dist/cjs/chunk-7TVJGM6H.cjs.map +1 -0
- package/dist/cjs/chunk-7VYUJABV.cjs +127 -0
- package/dist/cjs/chunk-7VYUJABV.cjs.map +1 -0
- package/dist/cjs/chunk-AC32B3T4.cjs +18 -0
- package/dist/cjs/chunk-AC32B3T4.cjs.map +1 -0
- package/dist/cjs/chunk-AERYR4EH.cjs +44 -0
- package/dist/cjs/chunk-AERYR4EH.cjs.map +1 -0
- package/dist/cjs/chunk-AH6OKSE3.cjs +104 -0
- package/dist/cjs/chunk-AH6OKSE3.cjs.map +1 -0
- package/dist/cjs/chunk-ATGPYGP5.cjs +89 -0
- package/dist/cjs/chunk-ATGPYGP5.cjs.map +1 -0
- package/dist/cjs/chunk-AUAXYROS.cjs +29 -0
- package/dist/cjs/chunk-AUAXYROS.cjs.map +1 -0
- package/dist/cjs/chunk-BDXIWV2Q.cjs +29 -0
- package/dist/cjs/chunk-BDXIWV2Q.cjs.map +1 -0
- package/dist/cjs/chunk-BJ4IW7PS.cjs +62 -0
- package/dist/cjs/chunk-BJ4IW7PS.cjs.map +1 -0
- package/dist/cjs/chunk-BJVY3JAF.cjs +17 -0
- package/dist/cjs/chunk-BJVY3JAF.cjs.map +1 -0
- package/dist/cjs/chunk-BJXDG533.cjs +89 -0
- package/dist/cjs/chunk-BJXDG533.cjs.map +1 -0
- package/dist/cjs/chunk-BMEFG36I.cjs +356 -0
- package/dist/cjs/chunk-BMEFG36I.cjs.map +1 -0
- package/dist/cjs/chunk-BNV24SCZ.cjs +74 -0
- package/dist/cjs/chunk-BNV24SCZ.cjs.map +1 -0
- package/dist/cjs/chunk-BSA42PNB.cjs +17 -0
- package/dist/cjs/chunk-BSA42PNB.cjs.map +1 -0
- package/dist/cjs/chunk-BWIHGXV6.cjs +17 -0
- package/dist/cjs/chunk-BWIHGXV6.cjs.map +1 -0
- package/dist/cjs/chunk-CD755W4W.cjs +29 -0
- package/dist/cjs/chunk-CD755W4W.cjs.map +1 -0
- package/dist/cjs/chunk-CQZD2NDK.cjs +17 -0
- package/dist/cjs/chunk-CQZD2NDK.cjs.map +1 -0
- package/dist/cjs/chunk-DC6PC4DQ.cjs +17 -0
- package/dist/cjs/chunk-DC6PC4DQ.cjs.map +1 -0
- package/dist/cjs/chunk-DCCCZGV6.cjs +44 -0
- package/dist/cjs/chunk-DCCCZGV6.cjs.map +1 -0
- package/dist/cjs/chunk-DCMWIKKS.cjs +74 -0
- package/dist/cjs/chunk-DCMWIKKS.cjs.map +1 -0
- package/dist/cjs/chunk-DNAFVCEP.cjs +18 -0
- package/dist/cjs/chunk-DNAFVCEP.cjs.map +1 -0
- package/dist/cjs/chunk-DSP62SMI.cjs +44 -0
- package/dist/cjs/chunk-DSP62SMI.cjs.map +1 -0
- package/dist/cjs/chunk-E3FUWHFJ.cjs +44 -0
- package/dist/cjs/chunk-E3FUWHFJ.cjs.map +1 -0
- package/dist/cjs/chunk-E4U662WC.cjs +44 -0
- package/dist/cjs/chunk-E4U662WC.cjs.map +1 -0
- package/dist/cjs/chunk-E4UJYO5W.cjs +29 -0
- package/dist/cjs/chunk-E4UJYO5W.cjs.map +1 -0
- package/dist/cjs/chunk-E6LLESWJ.cjs +18 -0
- package/dist/cjs/chunk-E6LLESWJ.cjs.map +1 -0
- package/dist/cjs/chunk-EH43QFTV.cjs +62 -0
- package/dist/cjs/chunk-EH43QFTV.cjs.map +1 -0
- package/dist/cjs/chunk-EJNZ3ZOV.cjs +18 -0
- package/dist/cjs/chunk-EJNZ3ZOV.cjs.map +1 -0
- package/dist/cjs/chunk-ERBIJSR7.cjs +44 -0
- package/dist/cjs/chunk-ERBIJSR7.cjs.map +1 -0
- package/dist/cjs/chunk-F3LQ74NZ.cjs +62 -0
- package/dist/cjs/chunk-F3LQ74NZ.cjs.map +1 -0
- package/dist/cjs/chunk-F457QJ4S.cjs +89 -0
- package/dist/cjs/chunk-F457QJ4S.cjs.map +1 -0
- package/dist/cjs/chunk-FKI4W7Q5.cjs +62 -0
- package/dist/cjs/chunk-FKI4W7Q5.cjs.map +1 -0
- package/dist/cjs/chunk-FNXDTX3S.cjs +29 -0
- package/dist/cjs/chunk-FNXDTX3S.cjs.map +1 -0
- package/dist/cjs/chunk-FSJBK7YA.cjs +102 -0
- package/dist/cjs/chunk-FSJBK7YA.cjs.map +1 -0
- package/dist/cjs/chunk-G27OBOGL.cjs +89 -0
- package/dist/cjs/chunk-G27OBOGL.cjs.map +1 -0
- package/dist/cjs/chunk-G3KN7CTK.cjs +62 -0
- package/dist/cjs/chunk-G3KN7CTK.cjs.map +1 -0
- package/dist/cjs/chunk-G3ZMBBMJ.cjs +45 -0
- package/dist/cjs/chunk-G3ZMBBMJ.cjs.map +1 -0
- package/dist/cjs/chunk-G4IRAGBJ.cjs +44 -0
- package/dist/cjs/chunk-G4IRAGBJ.cjs.map +1 -0
- package/dist/cjs/chunk-GL6OAX2R.cjs +38 -0
- package/dist/cjs/chunk-GL6OAX2R.cjs.map +1 -0
- package/dist/cjs/chunk-GSYWRHCH.cjs +44 -0
- package/dist/cjs/chunk-GSYWRHCH.cjs.map +1 -0
- package/dist/cjs/chunk-GYRONVL5.cjs +89 -0
- package/dist/cjs/chunk-GYRONVL5.cjs.map +1 -0
- package/dist/cjs/chunk-HHTOL2IY.cjs +62 -0
- package/dist/cjs/chunk-HHTOL2IY.cjs.map +1 -0
- package/dist/cjs/chunk-HPWWWD35.cjs +38 -0
- package/dist/cjs/chunk-HPWWWD35.cjs.map +1 -0
- package/dist/cjs/chunk-HRKFNUT5.cjs +17 -0
- package/dist/cjs/chunk-HRKFNUT5.cjs.map +1 -0
- package/dist/cjs/chunk-HZK3RE3S.cjs +17 -0
- package/dist/cjs/chunk-HZK3RE3S.cjs.map +1 -0
- package/dist/cjs/chunk-I3BOGWFE.cjs +29 -0
- package/dist/cjs/chunk-I3BOGWFE.cjs.map +1 -0
- package/dist/cjs/chunk-I5XAKTTY.cjs +319 -0
- package/dist/cjs/chunk-I5XAKTTY.cjs.map +1 -0
- package/dist/cjs/chunk-I6C7GP3A.cjs +17 -0
- package/dist/cjs/chunk-I6C7GP3A.cjs.map +1 -0
- package/dist/cjs/chunk-I7RTPAIU.cjs +89 -0
- package/dist/cjs/chunk-I7RTPAIU.cjs.map +1 -0
- package/dist/cjs/chunk-ICGENXDJ.cjs +38 -0
- package/dist/cjs/chunk-ICGENXDJ.cjs.map +1 -0
- package/dist/cjs/chunk-IHWB5JO3.cjs +340 -0
- package/dist/cjs/chunk-IHWB5JO3.cjs.map +1 -0
- package/dist/cjs/chunk-IQ2G4LUS.cjs +89 -0
- package/dist/cjs/chunk-IQ2G4LUS.cjs.map +1 -0
- package/dist/cjs/chunk-IY5Q3TOG.cjs +17 -0
- package/dist/cjs/chunk-IY5Q3TOG.cjs.map +1 -0
- package/dist/cjs/chunk-J25SHMXB.cjs +38 -0
- package/dist/cjs/chunk-J25SHMXB.cjs.map +1 -0
- package/dist/cjs/chunk-J6RQW3CG.cjs +44 -0
- package/dist/cjs/chunk-J6RQW3CG.cjs.map +1 -0
- package/dist/cjs/chunk-JDIXUPU3.cjs +199 -0
- package/dist/cjs/chunk-JDIXUPU3.cjs.map +1 -0
- package/dist/cjs/chunk-JO4DRJQZ.cjs +104 -0
- package/dist/cjs/chunk-JO4DRJQZ.cjs.map +1 -0
- package/dist/cjs/chunk-K2YKI5RV.cjs +62 -0
- package/dist/cjs/chunk-K2YKI5RV.cjs.map +1 -0
- package/dist/cjs/chunk-KCLZUNG3.cjs +38 -0
- package/dist/cjs/chunk-KCLZUNG3.cjs.map +1 -0
- package/dist/cjs/chunk-KG7XEHCF.cjs +38 -0
- package/dist/cjs/chunk-KG7XEHCF.cjs.map +1 -0
- package/dist/cjs/chunk-KK4VTG2X.cjs +89 -0
- package/dist/cjs/chunk-KK4VTG2X.cjs.map +1 -0
- package/dist/cjs/chunk-L5B2EAJM.cjs +18 -0
- package/dist/cjs/chunk-L5B2EAJM.cjs.map +1 -0
- package/dist/cjs/chunk-LDR76PHY.cjs +104 -0
- package/dist/cjs/chunk-LDR76PHY.cjs.map +1 -0
- package/dist/cjs/chunk-LMIIDGXP.cjs +321 -0
- package/dist/cjs/chunk-LMIIDGXP.cjs.map +1 -0
- package/dist/cjs/chunk-LX2A6XTF.cjs +17 -0
- package/dist/cjs/chunk-LX2A6XTF.cjs.map +1 -0
- package/dist/cjs/chunk-M2PY55RJ.cjs +17 -0
- package/dist/cjs/chunk-M2PY55RJ.cjs.map +1 -0
- package/dist/cjs/chunk-M5TPCHBZ.cjs +17 -0
- package/dist/cjs/chunk-M5TPCHBZ.cjs.map +1 -0
- package/dist/cjs/chunk-MBYBLKWW.cjs +17 -0
- package/dist/cjs/chunk-MBYBLKWW.cjs.map +1 -0
- package/dist/cjs/chunk-MJ673V54.cjs +18 -0
- package/dist/cjs/chunk-MJ673V54.cjs.map +1 -0
- package/dist/cjs/chunk-N27L7CJA.cjs +17 -0
- package/dist/cjs/chunk-N27L7CJA.cjs.map +1 -0
- package/dist/cjs/chunk-N4O2YERL.cjs +95 -0
- package/dist/cjs/chunk-N4O2YERL.cjs.map +1 -0
- package/dist/cjs/chunk-NBIMJPFQ.cjs +62 -0
- package/dist/cjs/chunk-NBIMJPFQ.cjs.map +1 -0
- package/dist/cjs/chunk-NE4IG7YO.cjs +17 -0
- package/dist/cjs/chunk-NE4IG7YO.cjs.map +1 -0
- package/dist/cjs/chunk-NF3E675K.cjs +74 -0
- package/dist/cjs/chunk-NF3E675K.cjs.map +1 -0
- package/dist/cjs/chunk-NTO6MT57.cjs +18 -0
- package/dist/cjs/chunk-NTO6MT57.cjs.map +1 -0
- package/dist/cjs/chunk-NWMEKI2D.cjs +29 -0
- package/dist/cjs/chunk-NWMEKI2D.cjs.map +1 -0
- package/dist/cjs/chunk-OTZ4JQDD.cjs +17 -0
- package/dist/cjs/chunk-OTZ4JQDD.cjs.map +1 -0
- package/dist/cjs/chunk-OVI3MJ2U.cjs +74 -0
- package/dist/cjs/chunk-OVI3MJ2U.cjs.map +1 -0
- package/dist/cjs/chunk-PFGRED5M.cjs +17 -0
- package/dist/cjs/chunk-PFGRED5M.cjs.map +1 -0
- package/dist/cjs/chunk-PKRYQGR7.cjs +17 -0
- package/dist/cjs/chunk-PKRYQGR7.cjs.map +1 -0
- package/dist/cjs/chunk-PO73CXQO.cjs +62 -0
- package/dist/cjs/chunk-PO73CXQO.cjs.map +1 -0
- package/dist/cjs/chunk-PVBRREHI.cjs +18 -0
- package/dist/cjs/chunk-PVBRREHI.cjs.map +1 -0
- package/dist/cjs/chunk-PZS5HEWV.cjs +74 -0
- package/dist/cjs/chunk-PZS5HEWV.cjs.map +1 -0
- package/dist/cjs/chunk-Q36KS63B.cjs +17 -0
- package/dist/cjs/chunk-Q36KS63B.cjs.map +1 -0
- package/dist/cjs/chunk-QEIMXVUF.cjs +44 -0
- package/dist/cjs/chunk-QEIMXVUF.cjs.map +1 -0
- package/dist/cjs/chunk-QIAOPBBD.cjs +17 -0
- package/dist/cjs/chunk-QIAOPBBD.cjs.map +1 -0
- package/dist/cjs/chunk-QJQWN7DT.cjs +44 -0
- package/dist/cjs/chunk-QJQWN7DT.cjs.map +1 -0
- package/dist/cjs/chunk-QWETDD3J.cjs +17 -0
- package/dist/cjs/chunk-QWETDD3J.cjs.map +1 -0
- package/dist/cjs/chunk-QWNRKRZO.cjs +44 -0
- package/dist/cjs/chunk-QWNRKRZO.cjs.map +1 -0
- package/dist/cjs/chunk-RF5RZWJP.cjs +17 -0
- package/dist/cjs/chunk-RF5RZWJP.cjs.map +1 -0
- package/dist/cjs/chunk-RRVTDGEC.cjs +44 -0
- package/dist/cjs/chunk-RRVTDGEC.cjs.map +1 -0
- package/dist/cjs/chunk-RVU4TKUZ.cjs +89 -0
- package/dist/cjs/chunk-RVU4TKUZ.cjs.map +1 -0
- package/dist/cjs/chunk-S6M6Q6Y4.cjs +18 -0
- package/dist/cjs/chunk-S6M6Q6Y4.cjs.map +1 -0
- package/dist/cjs/chunk-SDUFCQJX.cjs +77 -0
- package/dist/cjs/chunk-SDUFCQJX.cjs.map +1 -0
- package/dist/cjs/chunk-SMD6TIFZ.cjs +17 -0
- package/dist/cjs/chunk-SMD6TIFZ.cjs.map +1 -0
- package/dist/cjs/chunk-TFIT3UQZ.cjs +38 -0
- package/dist/cjs/chunk-TFIT3UQZ.cjs.map +1 -0
- package/dist/cjs/chunk-TGBWU6YD.cjs +74 -0
- package/dist/cjs/chunk-TGBWU6YD.cjs.map +1 -0
- package/dist/cjs/chunk-TRKYSXVL.cjs +74 -0
- package/dist/cjs/chunk-TRKYSXVL.cjs.map +1 -0
- package/dist/cjs/chunk-TY7RIDKN.cjs +89 -0
- package/dist/cjs/chunk-TY7RIDKN.cjs.map +1 -0
- package/dist/cjs/chunk-TYE2ZJYK.cjs +44 -0
- package/dist/cjs/chunk-TYE2ZJYK.cjs.map +1 -0
- package/dist/cjs/chunk-U2VDAWF2.cjs +17 -0
- package/dist/cjs/chunk-U2VDAWF2.cjs.map +1 -0
- package/dist/cjs/chunk-U6NBOZG4.cjs +17 -0
- package/dist/cjs/chunk-U6NBOZG4.cjs.map +1 -0
- package/dist/cjs/chunk-UAUKUVGY.cjs +110 -0
- package/dist/cjs/chunk-UAUKUVGY.cjs.map +1 -0
- package/dist/cjs/chunk-UMP63WKM.cjs +89 -0
- package/dist/cjs/chunk-UMP63WKM.cjs.map +1 -0
- package/dist/cjs/chunk-UNRTZ7XD.cjs +18 -0
- package/dist/cjs/chunk-UNRTZ7XD.cjs.map +1 -0
- package/dist/cjs/chunk-UT235OR6.cjs +29 -0
- package/dist/cjs/chunk-UT235OR6.cjs.map +1 -0
- package/dist/cjs/chunk-UTG6F3AH.cjs +44 -0
- package/dist/cjs/chunk-UTG6F3AH.cjs.map +1 -0
- package/dist/cjs/chunk-VFY3KVCK.cjs +38 -0
- package/dist/cjs/chunk-VFY3KVCK.cjs.map +1 -0
- package/dist/cjs/chunk-VGA4O5CY.cjs +62 -0
- package/dist/cjs/chunk-VGA4O5CY.cjs.map +1 -0
- package/dist/cjs/chunk-VXJ52V2L.cjs +321 -0
- package/dist/cjs/chunk-VXJ52V2L.cjs.map +1 -0
- package/dist/cjs/chunk-WGJ2T4XM.cjs +74 -0
- package/dist/cjs/chunk-WGJ2T4XM.cjs.map +1 -0
- package/dist/cjs/chunk-WZDAN7J3.cjs +74 -0
- package/dist/cjs/chunk-WZDAN7J3.cjs.map +1 -0
- package/dist/cjs/chunk-X4P5E72G.cjs +38 -0
- package/dist/cjs/chunk-X4P5E72G.cjs.map +1 -0
- package/dist/cjs/chunk-YCUKZPKY.cjs +18 -0
- package/dist/cjs/chunk-YCUKZPKY.cjs.map +1 -0
- package/dist/cjs/chunk-YDBR3EYV.cjs +17 -0
- package/dist/cjs/chunk-YDBR3EYV.cjs.map +1 -0
- package/dist/cjs/chunk-YFX5DLRD.cjs +44 -0
- package/dist/cjs/chunk-YFX5DLRD.cjs.map +1 -0
- package/dist/cjs/chunk-YG4CXCLW.cjs +44 -0
- package/dist/cjs/chunk-YG4CXCLW.cjs.map +1 -0
- package/dist/cjs/chunk-YHG5J4EH.cjs +44 -0
- package/dist/cjs/chunk-YHG5J4EH.cjs.map +1 -0
- package/dist/cjs/chunk-YI2OQGES.cjs +44 -0
- package/dist/cjs/chunk-YI2OQGES.cjs.map +1 -0
- package/dist/cjs/chunk-YX4LVEKP.cjs +62 -0
- package/dist/cjs/chunk-YX4LVEKP.cjs.map +1 -0
- package/dist/cjs/chunk-Z7RQOH67.cjs +18 -0
- package/dist/cjs/chunk-Z7RQOH67.cjs.map +1 -0
- package/dist/cjs/chunk-Z7ZCJEME.cjs +44 -0
- package/dist/cjs/chunk-Z7ZCJEME.cjs.map +1 -0
- package/dist/cjs/chunk-ZEOLDU53.cjs +17 -0
- package/dist/cjs/chunk-ZEOLDU53.cjs.map +1 -0
- package/dist/cjs/chunk-ZKYRM76Q.cjs +74 -0
- package/dist/cjs/chunk-ZKYRM76Q.cjs.map +1 -0
- package/dist/cjs/chunk-ZNOPX24J.cjs +89 -0
- package/dist/cjs/chunk-ZNOPX24J.cjs.map +1 -0
- package/dist/cjs/chunk-ZP7AGIQW.cjs +367 -0
- package/dist/cjs/chunk-ZP7AGIQW.cjs.map +1 -0
- package/dist/cjs/container/controllers.cjs +3 -3
- package/dist/cjs/container/index.cjs +10 -10
- package/dist/cjs/container/services.cjs +7 -7
- package/dist/cjs/controllers/api/workflow.api.controller.cjs +2 -2
- package/dist/cjs/index.cjs +26 -26
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/cjs/modules/index.cjs +7 -7
- package/dist/cjs/modules/index.cjs.map +1 -1
- package/dist/cjs/routes/a2a.routes.cjs +11 -11
- package/dist/cjs/routes/api/agent.routes.cjs +11 -11
- package/dist/cjs/routes/api/intent.routes.cjs +11 -11
- package/dist/cjs/routes/api/model.routes.cjs +11 -11
- package/dist/cjs/routes/api/threads.routes.cjs +11 -11
- package/dist/cjs/routes/api/workflow.routes.cjs +11 -11
- package/dist/cjs/routes/api.routes.cjs +16 -16
- package/dist/cjs/routes/index.cjs +18 -18
- package/dist/cjs/routes/intent.routes.cjs +11 -11
- package/dist/cjs/routes/query.routes.cjs +11 -11
- package/dist/cjs/services/index.cjs +7 -7
- package/dist/cjs/services/index.cjs.map +1 -1
- package/dist/cjs/services/intents/fulfill.service.cjs +3 -3
- package/dist/esm/{chunk-VP5Q63JU.js → chunk-A5CFFQUV.js} +2 -2
- package/dist/esm/{chunk-44CTGJX4.js → chunk-FISBL7OM.js} +9 -7
- package/dist/esm/{chunk-44CTGJX4.js.map → chunk-FISBL7OM.js.map} +1 -1
- package/dist/esm/{chunk-I4P7JMJC.js → chunk-HNKYLU4R.js} +9 -9
- package/dist/esm/{chunk-FCH7BUK4.js → chunk-HZC52S2R.js} +2 -2
- package/dist/esm/{chunk-LMOWEXWF.js → chunk-LC5XQGWK.js} +10 -10
- package/dist/esm/{chunk-7DH4SI44.js → chunk-MB7ZI64O.js} +7 -7
- package/dist/esm/{chunk-TQJCYP7X.js → chunk-MC5KX7MQ.js} +4 -4
- package/dist/esm/{chunk-2VGXYWJD.js → chunk-MDQEA2US.js} +2 -2
- package/dist/esm/{chunk-ZK3HZBER.js → chunk-RKLWSV24.js} +2 -2
- package/dist/esm/{chunk-PZQRSWST.js → chunk-S46LW2P7.js} +2 -2
- package/dist/esm/{chunk-AEBBZSQ4.js → chunk-SUBXSJXS.js} +5 -5
- package/dist/esm/{chunk-IG3B5AXN.js → chunk-T3FCCMU6.js} +3 -3
- package/dist/esm/{chunk-6YBQCUNB.js → chunk-VRFQFDSM.js} +2 -2
- package/dist/esm/{chunk-BZUWX7HX.js → chunk-YUFYGSSY.js} +13 -4
- package/dist/esm/chunk-YUFYGSSY.js.map +1 -0
- package/dist/esm/{chunk-7XQPJVYO.js → chunk-ZTYRQOCO.js} +2 -2
- package/dist/esm/container/controllers.js +4 -4
- package/dist/esm/container/index.js +16 -16
- package/dist/esm/container/services.js +8 -8
- package/dist/esm/controllers/api/workflow.api.controller.js +1 -1
- package/dist/esm/controllers/index.js +4 -4
- package/dist/esm/index.js +32 -32
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/modules/a2a/a2a.module.js +1 -1
- package/dist/esm/modules/index.js +10 -10
- package/dist/esm/modules/memory/base.memory.d.ts +1 -1
- package/dist/esm/routes/a2a.routes.js +19 -19
- package/dist/esm/routes/api/agent.routes.js +17 -17
- package/dist/esm/routes/api/intent.routes.js +17 -17
- package/dist/esm/routes/api/model.routes.js +17 -17
- package/dist/esm/routes/api/threads.routes.js +17 -17
- package/dist/esm/routes/api/workflow.routes.js +17 -17
- package/dist/esm/routes/api.routes.js +22 -22
- package/dist/esm/routes/index.js +28 -28
- package/dist/esm/routes/intent.routes.js +17 -17
- package/dist/esm/routes/query.routes.js +17 -17
- package/dist/esm/services/index.js +8 -8
- package/dist/esm/services/intents/aggregate.service.js +2 -2
- package/dist/esm/services/intents/fulfill.service.js +3 -3
- package/dist/esm/services/query.service.js +1 -1
- package/package.json +1 -1
- package/dist/esm/chunk-BZUWX7HX.js.map +0 -1
- /package/dist/esm/{chunk-VP5Q63JU.js.map → chunk-A5CFFQUV.js.map} +0 -0
- /package/dist/esm/{chunk-I4P7JMJC.js.map → chunk-HNKYLU4R.js.map} +0 -0
- /package/dist/esm/{chunk-FCH7BUK4.js.map → chunk-HZC52S2R.js.map} +0 -0
- /package/dist/esm/{chunk-LMOWEXWF.js.map → chunk-LC5XQGWK.js.map} +0 -0
- /package/dist/esm/{chunk-7DH4SI44.js.map → chunk-MB7ZI64O.js.map} +0 -0
- /package/dist/esm/{chunk-TQJCYP7X.js.map → chunk-MC5KX7MQ.js.map} +0 -0
- /package/dist/esm/{chunk-2VGXYWJD.js.map → chunk-MDQEA2US.js.map} +0 -0
- /package/dist/esm/{chunk-ZK3HZBER.js.map → chunk-RKLWSV24.js.map} +0 -0
- /package/dist/esm/{chunk-PZQRSWST.js.map → chunk-S46LW2P7.js.map} +0 -0
- /package/dist/esm/{chunk-AEBBZSQ4.js.map → chunk-SUBXSJXS.js.map} +0 -0
- /package/dist/esm/{chunk-IG3B5AXN.js.map → chunk-T3FCCMU6.js.map} +0 -0
- /package/dist/esm/{chunk-6YBQCUNB.js.map → chunk-VRFQFDSM.js.map} +0 -0
- /package/dist/esm/{chunk-7XQPJVYO.js.map → chunk-ZTYRQOCO.js.map} +0 -0
package/README.md
CHANGED
|
@@ -11,6 +11,8 @@ A TypeScript library for building AI agents with multi-protocol support includin
|
|
|
11
11
|
- **Modular Architecture**: Flexible module system for models, memory, MCP, and A2A
|
|
12
12
|
- **Multiple AI Models**: Support for OpenAI and Gemini with easy extensibility
|
|
13
13
|
- **Thread Management**: Built-in memory module for conversation history
|
|
14
|
+
- **Intent System**: Single/multi-intent triggering with intelligent response aggregation
|
|
15
|
+
- **Workflow Management**: Built-in workflow storage and execution with display query support
|
|
14
16
|
- **Dual Build System**: Supports both ESM and CJS formats for maximum compatibility
|
|
15
17
|
- **Structured Logging**: Winston-based logging system with service-specific loggers
|
|
16
18
|
- **TypeScript First**: Built with strict TypeScript configuration
|
|
@@ -56,7 +58,7 @@ The library uses a flexible module architecture:
|
|
|
56
58
|
interface AINAgentModules {
|
|
57
59
|
authModule: AuthModule; // Required - authentication handling
|
|
58
60
|
modelModule: ModelModule; // Required - AI model integrations
|
|
59
|
-
memoryModule: MemoryModule; // Required - thread/intent storage
|
|
61
|
+
memoryModule: MemoryModule; // Required - thread/intent/workflow storage
|
|
60
62
|
a2aModule?: A2AModule; // Optional - agent-to-agent communication
|
|
61
63
|
mcpModule?: MCPModule; // Optional - MCP server connections
|
|
62
64
|
}
|
|
@@ -64,6 +66,23 @@ interface AINAgentModules {
|
|
|
64
66
|
|
|
65
67
|
Each module can be independently configured and passed to the agent constructor.
|
|
66
68
|
|
|
69
|
+
### Intent System
|
|
70
|
+
|
|
71
|
+
The library supports flexible intent triggering modes:
|
|
72
|
+
|
|
73
|
+
- **Multi-Intent Mode (Default)**: Decomposes complex queries into multiple subqueries and maps each to an intent
|
|
74
|
+
- **Single-Intent Mode**: Identifies a single intent without query decomposition (set `DISABLE_MULTI_INTENTS=true`)
|
|
75
|
+
- **Intelligent Aggregation**: LLM-based aggregation determines if multiple intent responses need unification
|
|
76
|
+
- **Streaming Support**: Real-time response streaming with `thinking_process` events for progress visibility
|
|
77
|
+
|
|
78
|
+
### Workflow System
|
|
79
|
+
|
|
80
|
+
Built-in workflow management capabilities:
|
|
81
|
+
|
|
82
|
+
- **Workflow Storage**: Save, retrieve, list, and delete workflows via MemoryModule
|
|
83
|
+
- **Display Query Support**: Separate display query for workflow execution visualization
|
|
84
|
+
- **RESTful API**: Complete workflow management through `/api/workflows` endpoints
|
|
85
|
+
|
|
67
86
|
### Dependency Injection
|
|
68
87
|
|
|
69
88
|
The library uses a DI Container pattern for managing services and controllers:
|
|
@@ -106,7 +125,8 @@ Benefits:
|
|
|
106
125
|
|
|
107
126
|
- **Unified Tool Interface**: Protocol-agnostic `ConnectorTool` and `IAgentConnector` interfaces
|
|
108
127
|
- **Streaming Support**: Dual implementation for streaming and non-streaming queries
|
|
109
|
-
- **Intent System**:
|
|
128
|
+
- **Intent System**: Single/multi-intent triggering with intelligent response aggregation
|
|
129
|
+
- **Workflow Management**: Built-in workflow storage and execution with display query support
|
|
110
130
|
- **Service Layer**: Clean separation with controllers and services
|
|
111
131
|
- **Type Safety**: Comprehensive TypeScript types with strict mode
|
|
112
132
|
- **Error Handling**: Global error middleware with structured logging
|
|
@@ -175,10 +195,10 @@ modelLogger.error('Model API error');
|
|
|
175
195
|
### Standard Endpoints
|
|
176
196
|
- `GET /` - Welcome message and health check
|
|
177
197
|
- `POST /query` - Process queries (non-streaming)
|
|
178
|
-
- Request: `{ query: string, threadId?: string, type?: string }`
|
|
198
|
+
- Request: `{ query: string, threadId?: string, type?: string, displayQuery?: string }`
|
|
179
199
|
- Response: `{ content: string, threadId: string }`
|
|
180
200
|
- `POST /query/stream` - Process queries with streaming (SSE)
|
|
181
|
-
- Request: `{ query: string, threadId?: string, type?: string }`
|
|
201
|
+
- Request: `{ query: string, threadId?: string, type?: string, displayQuery?: string }`
|
|
182
202
|
- Response: Server-Sent Events stream with event types:
|
|
183
203
|
- `text_chunk`: Incremental text response
|
|
184
204
|
- `tool_start`: Tool execution started
|
|
@@ -191,12 +211,17 @@ modelLogger.error('Model API error');
|
|
|
191
211
|
### Agent Management
|
|
192
212
|
- `GET /api/threads` - List user threads (userId from auth)
|
|
193
213
|
- `GET /api/threads/:id` - Get thread details
|
|
194
|
-
- `
|
|
214
|
+
- `POST /api/threads/:id/delete` - Delete thread
|
|
195
215
|
- `GET /api/model` - Get model list
|
|
196
216
|
- `GET /api/agent/a2a` - Get A2A connectors
|
|
197
217
|
- `GET /api/intent` - List all intents
|
|
198
218
|
- `POST /api/intent/save` - Save intent
|
|
199
|
-
- `
|
|
219
|
+
- `POST /api/intent/:id/delete` - Delete intent
|
|
220
|
+
- `GET /api/workflows` - List all workflows
|
|
221
|
+
- `GET /api/workflows/:id` - Get workflow details
|
|
222
|
+
- `POST /api/workflows` - Create new workflow
|
|
223
|
+
- `POST /api/workflows/update/:id` - Update workflow
|
|
224
|
+
- `POST /api/workflows/delete/:id` - Delete workflow
|
|
200
225
|
|
|
201
226
|
### A2A Server Endpoints (when `manifest.url` is configured)
|
|
202
227
|
- `GET /.well-known/agent.json` - Agent discovery endpoint (A2A ~v0.2.0)
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
|
+
|
|
3
|
+
var _chunkIY5Q3TOGcjs = require('./chunk-IY5Q3TOG.cjs');
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
var _chunkYFX5DLRDcjs = require('./chunk-YFX5DLRD.cjs');
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
var _chunkQWETDD3Jcjs = require('./chunk-QWETDD3J.cjs');
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
var _chunkUTG6F3AHcjs = require('./chunk-UTG6F3AH.cjs');
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
var _chunkPO73CXQOcjs = require('./chunk-PO73CXQO.cjs');
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
var _chunk4VIZ52C2cjs = require('./chunk-4VIZ52C2.cjs');
|
|
19
|
+
|
|
20
|
+
// src/routes/api.routes.ts
|
|
21
|
+
var _express = require('express');
|
|
22
|
+
var createApiRouter = () => {
|
|
23
|
+
const router = _express.Router.call(void 0, );
|
|
24
|
+
router.use("/model", _chunkQWETDD3Jcjs.createModelApiRouter.call(void 0, ));
|
|
25
|
+
router.use("/agent", _chunkIY5Q3TOGcjs.createAgentApiRouter.call(void 0, ));
|
|
26
|
+
const memoryModule = _chunk4VIZ52C2cjs.getMemoryModule.call(void 0, );
|
|
27
|
+
if (memoryModule) {
|
|
28
|
+
router.use("/threads", _chunkUTG6F3AHcjs.createThreadApiRouter.call(void 0, ));
|
|
29
|
+
router.use("/intent", _chunkYFX5DLRDcjs.createIntentApiRouter.call(void 0, ));
|
|
30
|
+
router.use("/workflow", _chunkPO73CXQOcjs.createWorkflowApiRouter.call(void 0, ));
|
|
31
|
+
}
|
|
32
|
+
return router;
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
exports.createApiRouter = createApiRouter;
|
|
38
|
+
//# sourceMappingURL=chunk-2B6ZXQB6.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/Users/shyun/comcom/ain-agent/ain-adk/dist/cjs/chunk-2B6ZXQB6.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;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACA;ACnBA,kCAAuB;AAQhB,IAAM,gBAAA,EAAkB,CAAA,EAAA,GAAc;AAC5C,EAAA,MAAM,OAAA,EAAS,6BAAA,CAAO;AAEtB,EAAA,MAAA,CAAO,GAAA,CAAI,QAAA,EAAU,oDAAA,CAAsB,CAAA;AAC3C,EAAA,MAAA,CAAO,GAAA,CAAI,QAAA,EAAU,oDAAA,CAAsB,CAAA;AAE3C,EAAA,MAAM,aAAA,EAAe,+CAAA,CAAgB;AACrC,EAAA,GAAA,CAAI,YAAA,EAAc;AACjB,IAAA,MAAA,CAAO,GAAA,CAAI,UAAA,EAAY,qDAAA,CAAuB,CAAA;AAC9C,IAAA,MAAA,CAAO,GAAA,CAAI,SAAA,EAAW,qDAAA,CAAuB,CAAA;AAC7C,IAAA,MAAA,CAAO,GAAA,CAAI,WAAA,EAAa,uDAAA,CAAyB,CAAA;AAAA,EAClD;AAEA,EAAA,OAAO,MAAA;AACR,CAAA;ADWA;AACA;AACE;AACF,0CAAC","file":"/Users/shyun/comcom/ain-agent/ain-adk/dist/cjs/chunk-2B6ZXQB6.cjs","sourcesContent":[null,"import { Router } from \"express\";\nimport { getMemoryModule } from \"@/config/modules\";\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\";\nimport { createWorkflowApiRouter } from \"./api/workflow.routes.js\";\n\nexport const createApiRouter = (): Router => {\n\tconst router = Router();\n\n\trouter.use(\"/model\", createModelApiRouter());\n\trouter.use(\"/agent\", createAgentApiRouter());\n\n\tconst memoryModule = getMemoryModule();\n\tif (memoryModule) {\n\t\trouter.use(\"/threads\", createThreadApiRouter());\n\t\trouter.use(\"/intent\", createIntentApiRouter());\n\t\trouter.use(\"/workflow\", createWorkflowApiRouter());\n\t}\n\n\treturn router;\n};\n"]}
|
|
@@ -0,0 +1,367 @@
|
|
|
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 _chunk7HBOMBZGcjs = require('./chunk-7HBOMBZG.cjs');
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
var _chunkJDIXUPU3cjs = require('./chunk-JDIXUPU3.cjs');
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
var _chunkCLJ3DWTAcjs = require('./chunk-CLJ3DWTA.cjs');
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
var _chunkO5X5QT63cjs = require('./chunk-O5X5QT63.cjs');
|
|
13
|
+
|
|
14
|
+
// src/services/intents/fulfill.service.ts
|
|
15
|
+
var _crypto = require('crypto');
|
|
16
|
+
function isMultiIntentDisabled() {
|
|
17
|
+
const value = process.env.DISABLE_MULTI_INTENTS;
|
|
18
|
+
return value === "true" || value === "1";
|
|
19
|
+
}
|
|
20
|
+
var IntentFulfillService = class {
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
constructor(modelModule, memoryModule, a2aModule, mcpModule, onIntentFallback) {
|
|
28
|
+
this.modelModule = modelModule;
|
|
29
|
+
this.memoryModule = memoryModule;
|
|
30
|
+
this.a2aModule = a2aModule;
|
|
31
|
+
this.mcpModule = mcpModule;
|
|
32
|
+
this.onIntentFallback = onIntentFallback;
|
|
33
|
+
this.aggregateService = new (0, _chunkJDIXUPU3cjs.AggregateService)(modelModule);
|
|
34
|
+
}
|
|
35
|
+
async addToThreadMessages(thread, params) {
|
|
36
|
+
try {
|
|
37
|
+
const threadMemory = this.memoryModule.getThreadMemory();
|
|
38
|
+
const { userId, threadId } = thread;
|
|
39
|
+
const newMessage = {
|
|
40
|
+
messageId: _crypto.randomUUID.call(void 0, ),
|
|
41
|
+
role: params.role,
|
|
42
|
+
timestamp: Date.now(),
|
|
43
|
+
content: { type: "text", parts: [params.content] },
|
|
44
|
+
metadata: params.metadata
|
|
45
|
+
};
|
|
46
|
+
thread.messages.push(newMessage);
|
|
47
|
+
await _optionalChain([threadMemory, 'optionalAccess', _ => _.addMessagesToThread, 'call', _2 => _2(userId, threadId, [newMessage])]);
|
|
48
|
+
} catch (error) {
|
|
49
|
+
_chunkCLJ3DWTAcjs.loggers.intentStream.error("Error adding message to thread", error);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Fulfills the detected intent by generating a streaming response.
|
|
54
|
+
*
|
|
55
|
+
* Manages the complete inference loop including:
|
|
56
|
+
* - Loading prompts and conversation history
|
|
57
|
+
* - Collecting available tools from modules
|
|
58
|
+
* - Executing model inference with tool support
|
|
59
|
+
* - Processing tool calls iteratively until completion
|
|
60
|
+
* - Streaming results as Server-Sent Events
|
|
61
|
+
*
|
|
62
|
+
* @param query - The user's input query
|
|
63
|
+
* @param threadId - Thread identifier for context
|
|
64
|
+
* @param thread - Previous conversation history
|
|
65
|
+
* @param intent - Optional detected intent with custom prompt
|
|
66
|
+
* @returns AsyncGenerator yielding StreamEvent objects
|
|
67
|
+
*/
|
|
68
|
+
async *intentFulfilling(query, thread, intent) {
|
|
69
|
+
const agentMemory = this.memoryModule.getAgentMemory();
|
|
70
|
+
const fulfillPrompt = await _chunk7HBOMBZGcjs.createFulfillPrompt.call(void 0, agentMemory, intent);
|
|
71
|
+
const modelInstance = this.modelModule.getModel();
|
|
72
|
+
const modelOptions = this.modelModule.getModelOptions();
|
|
73
|
+
const messages = modelInstance.generateMessages({
|
|
74
|
+
query,
|
|
75
|
+
thread,
|
|
76
|
+
systemPrompt: fulfillPrompt.trim()
|
|
77
|
+
});
|
|
78
|
+
_chunkCLJ3DWTAcjs.loggers.intent.debug("Intent fulfillment start", {
|
|
79
|
+
threadId: thread.threadId,
|
|
80
|
+
messages
|
|
81
|
+
});
|
|
82
|
+
const tools = [];
|
|
83
|
+
this.mcpModule && tools.push(...this.mcpModule.getTools());
|
|
84
|
+
this.a2aModule && tools.push(...await this.a2aModule.getTools());
|
|
85
|
+
const processList = [];
|
|
86
|
+
while (true) {
|
|
87
|
+
const functions = modelInstance.convertToolsToFunctions(tools);
|
|
88
|
+
const responseStream = await modelInstance.fetchStreamWithContextMessage(
|
|
89
|
+
messages,
|
|
90
|
+
functions,
|
|
91
|
+
modelOptions
|
|
92
|
+
);
|
|
93
|
+
const assembledToolCalls = [];
|
|
94
|
+
for await (const chunk of responseStream) {
|
|
95
|
+
const delta = chunk.delta;
|
|
96
|
+
if (_optionalChain([delta, 'optionalAccess', _3 => _3.tool_calls])) {
|
|
97
|
+
for (const { index, id, function: func } of delta.tool_calls) {
|
|
98
|
+
assembledToolCalls[index] ??= {
|
|
99
|
+
id: "",
|
|
100
|
+
type: "function",
|
|
101
|
+
function: { name: "", arguments: "" }
|
|
102
|
+
};
|
|
103
|
+
if (id) assembledToolCalls[index].id = id;
|
|
104
|
+
if (_optionalChain([func, 'optionalAccess', _4 => _4.name])) assembledToolCalls[index].function.name = func.name;
|
|
105
|
+
if (_optionalChain([func, 'optionalAccess', _5 => _5.arguments]))
|
|
106
|
+
assembledToolCalls[index].function.arguments += func.arguments;
|
|
107
|
+
}
|
|
108
|
+
} else if (_optionalChain([chunk, 'access', _6 => _6.delta, 'optionalAccess', _7 => _7.content])) {
|
|
109
|
+
yield {
|
|
110
|
+
event: "text_chunk",
|
|
111
|
+
data: { delta: chunk.delta.content }
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
_chunkCLJ3DWTAcjs.loggers.intentStream.debug("assembledToolCalls", {
|
|
116
|
+
threadId: thread.threadId,
|
|
117
|
+
assembledToolCalls
|
|
118
|
+
});
|
|
119
|
+
if (assembledToolCalls.length > 0) {
|
|
120
|
+
for (const toolCall of assembledToolCalls) {
|
|
121
|
+
const toolName = toolCall.function.name;
|
|
122
|
+
let selectedTool;
|
|
123
|
+
for (const [index, toolTmp] of tools.entries()) {
|
|
124
|
+
if (toolTmp.toolName === toolName) {
|
|
125
|
+
if (toolTmp.protocol === "A2A" /* A2A */) {
|
|
126
|
+
selectedTool = tools.splice(index, 1)[0];
|
|
127
|
+
break;
|
|
128
|
+
}
|
|
129
|
+
selectedTool = toolTmp;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
if (!selectedTool) {
|
|
133
|
+
continue;
|
|
134
|
+
}
|
|
135
|
+
const toolArgs = JSON.parse(toolCall.function.arguments);
|
|
136
|
+
const thinkData = {
|
|
137
|
+
title: `[${_chunkO5X5QT63cjs.getManifest.call(void 0, ).name}] ${selectedTool.protocol} \uC2E4\uD589: ${toolName}`,
|
|
138
|
+
description: `${toolArgs.thinking_text || ""}`
|
|
139
|
+
};
|
|
140
|
+
yield {
|
|
141
|
+
event: "thinking_process",
|
|
142
|
+
data: thinkData
|
|
143
|
+
};
|
|
144
|
+
let toolResult = "";
|
|
145
|
+
if (this.mcpModule && selectedTool.protocol === "MCP" /* MCP */) {
|
|
146
|
+
_chunkCLJ3DWTAcjs.loggers.intent.info("MCP tool call", { toolName, toolArgs });
|
|
147
|
+
toolResult = await this.mcpModule.useTool(selectedTool, toolArgs);
|
|
148
|
+
} else if (this.a2aModule && selectedTool.protocol === "A2A" /* A2A */) {
|
|
149
|
+
_chunkCLJ3DWTAcjs.loggers.intent.info("A2A tool call", { toolName });
|
|
150
|
+
const a2aStream = this.a2aModule.useTool(
|
|
151
|
+
selectedTool,
|
|
152
|
+
query,
|
|
153
|
+
thread.threadId
|
|
154
|
+
);
|
|
155
|
+
let result = await a2aStream.next();
|
|
156
|
+
while (!result.done) {
|
|
157
|
+
if (result.value.event === "thinking_process") {
|
|
158
|
+
yield result.value;
|
|
159
|
+
}
|
|
160
|
+
result = await a2aStream.next();
|
|
161
|
+
}
|
|
162
|
+
toolResult = result.value;
|
|
163
|
+
} else {
|
|
164
|
+
_chunkCLJ3DWTAcjs.loggers.intent.warn(
|
|
165
|
+
`Unrecognized tool type: ${selectedTool.protocol}`
|
|
166
|
+
);
|
|
167
|
+
continue;
|
|
168
|
+
}
|
|
169
|
+
_chunkCLJ3DWTAcjs.loggers.intent.debug("Tool Result", { toolResult });
|
|
170
|
+
processList.push(toolResult);
|
|
171
|
+
modelInstance.appendMessages(messages, toolResult);
|
|
172
|
+
}
|
|
173
|
+
} else {
|
|
174
|
+
break;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
_chunkCLJ3DWTAcjs.loggers.intent.debug("Intent fulfillment completed", {
|
|
178
|
+
threadId: thread.threadId,
|
|
179
|
+
toolCallsExecuted: processList.length,
|
|
180
|
+
intentName: _optionalChain([intent, 'optionalAccess', _8 => _8.name])
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Returns the appropriate stream for a triggered intent.
|
|
185
|
+
* Uses fallback handler if no intent matched and fallback is configured.
|
|
186
|
+
*/
|
|
187
|
+
getIntentStream(triggeredIntent, thread) {
|
|
188
|
+
const { subquery = "", intent } = triggeredIntent;
|
|
189
|
+
if (!intent && this.onIntentFallback) {
|
|
190
|
+
_chunkCLJ3DWTAcjs.loggers.intent.info("No intent matched, calling fallback handler");
|
|
191
|
+
const fallbackStream = this.onIntentFallback({
|
|
192
|
+
triggeredIntent,
|
|
193
|
+
thread
|
|
194
|
+
});
|
|
195
|
+
if (fallbackStream !== void 0) {
|
|
196
|
+
return fallbackStream;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
return this.intentFulfilling(subquery, thread, intent);
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Processes all triggered intents and generates a unified response.
|
|
203
|
+
*
|
|
204
|
+
* Workflow:
|
|
205
|
+
* 1. Process each intent sequentially, collecting results
|
|
206
|
+
* 2. Yield thinking_process events for progress visibility
|
|
207
|
+
* 3. Use AggregateService to unify results if needsAggregation is true
|
|
208
|
+
* 4. Stream the final (possibly aggregated) response
|
|
209
|
+
*
|
|
210
|
+
* @param intents - Array of triggered intents to process
|
|
211
|
+
* @param thread - The thread history
|
|
212
|
+
* @param originalQuery - The user's original query (for aggregate context)
|
|
213
|
+
* @param needsAggregation - Whether the results need to be aggregated
|
|
214
|
+
* @returns AsyncGenerator yielding StreamEvent objects
|
|
215
|
+
*/
|
|
216
|
+
async *intentFulfill(intents, thread, originalQuery, needsAggregation) {
|
|
217
|
+
const streamStartTime = Date.now();
|
|
218
|
+
_chunkCLJ3DWTAcjs.loggers.intentStream.info("Stream session started", {
|
|
219
|
+
threadId: thread.threadId,
|
|
220
|
+
intentCount: intents.length,
|
|
221
|
+
needsAggregation,
|
|
222
|
+
startTime: new Date(streamStartTime).toISOString()
|
|
223
|
+
});
|
|
224
|
+
let finalResponseText = "";
|
|
225
|
+
const shouldStreamDirectly = isMultiIntentDisabled() || intents.length <= 1 || !needsAggregation;
|
|
226
|
+
if (shouldStreamDirectly && intents.length <= 1) {
|
|
227
|
+
const triggeredIntent = intents[0];
|
|
228
|
+
if (!triggeredIntent) {
|
|
229
|
+
return;
|
|
230
|
+
}
|
|
231
|
+
const { subquery = "", intent, actionPlan } = triggeredIntent;
|
|
232
|
+
_chunkCLJ3DWTAcjs.loggers.intent.info(
|
|
233
|
+
`Process single intent: ${subquery}, ${_optionalChain([intent, 'optionalAccess', _9 => _9.name])}`
|
|
234
|
+
);
|
|
235
|
+
_chunkCLJ3DWTAcjs.loggers.intent.info(`Action plan: ${actionPlan}`);
|
|
236
|
+
yield {
|
|
237
|
+
event: "thinking_process",
|
|
238
|
+
data: {
|
|
239
|
+
title: `[${_chunkO5X5QT63cjs.getManifest.call(void 0, ).name}] ${subquery}`,
|
|
240
|
+
description: actionPlan || ""
|
|
241
|
+
}
|
|
242
|
+
};
|
|
243
|
+
const stream = this.getIntentStream(triggeredIntent, thread);
|
|
244
|
+
if (!stream) {
|
|
245
|
+
return;
|
|
246
|
+
}
|
|
247
|
+
for await (const event of stream) {
|
|
248
|
+
if (event.event === "text_chunk" && event.data.delta) {
|
|
249
|
+
finalResponseText += event.data.delta;
|
|
250
|
+
}
|
|
251
|
+
yield event;
|
|
252
|
+
}
|
|
253
|
+
} else if (shouldStreamDirectly) {
|
|
254
|
+
for (let i = 0; i < intents.length; i++) {
|
|
255
|
+
const triggeredIntent = intents[i];
|
|
256
|
+
const { subquery = "", intent, actionPlan } = triggeredIntent;
|
|
257
|
+
_chunkCLJ3DWTAcjs.loggers.intent.info(`Process query: ${subquery}, ${_optionalChain([intent, 'optionalAccess', _10 => _10.name])}`);
|
|
258
|
+
_chunkCLJ3DWTAcjs.loggers.intent.info(`Action plan: ${actionPlan}`);
|
|
259
|
+
const isLastIntent = i === intents.length - 1;
|
|
260
|
+
yield {
|
|
261
|
+
event: "thinking_process",
|
|
262
|
+
data: {
|
|
263
|
+
title: `[${_chunkO5X5QT63cjs.getManifest.call(void 0, ).name}] ${subquery}`,
|
|
264
|
+
description: actionPlan || ""
|
|
265
|
+
}
|
|
266
|
+
};
|
|
267
|
+
const stream = this.getIntentStream(triggeredIntent, thread);
|
|
268
|
+
if (!stream) {
|
|
269
|
+
continue;
|
|
270
|
+
}
|
|
271
|
+
if (isLastIntent) {
|
|
272
|
+
for await (const event of stream) {
|
|
273
|
+
if (event.event === "text_chunk" && event.data.delta) {
|
|
274
|
+
finalResponseText += event.data.delta;
|
|
275
|
+
}
|
|
276
|
+
yield event;
|
|
277
|
+
}
|
|
278
|
+
} else {
|
|
279
|
+
let responseText = "";
|
|
280
|
+
for await (const event of stream) {
|
|
281
|
+
if (event.event === "text_chunk" && event.data.delta) {
|
|
282
|
+
responseText += event.data.delta;
|
|
283
|
+
} else if (event.event === "thinking_process") {
|
|
284
|
+
yield event;
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
thread.messages.push({
|
|
288
|
+
messageId: _crypto.randomUUID.call(void 0, ),
|
|
289
|
+
role: "MODEL" /* MODEL */,
|
|
290
|
+
timestamp: Date.now(),
|
|
291
|
+
content: { type: "text", parts: [responseText] },
|
|
292
|
+
metadata: { isThinking: true }
|
|
293
|
+
});
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
} else {
|
|
297
|
+
const fulfillmentResults = [];
|
|
298
|
+
for (let i = 0; i < intents.length; i++) {
|
|
299
|
+
const triggeredIntent = intents[i];
|
|
300
|
+
const { subquery = "", intent, actionPlan } = triggeredIntent;
|
|
301
|
+
_chunkCLJ3DWTAcjs.loggers.intent.info(`Process query: ${subquery}, ${_optionalChain([intent, 'optionalAccess', _11 => _11.name])}`);
|
|
302
|
+
_chunkCLJ3DWTAcjs.loggers.intent.info(`Action plan: ${actionPlan}`);
|
|
303
|
+
if (fulfillmentResults.length > 0) {
|
|
304
|
+
const lastResult = fulfillmentResults[fulfillmentResults.length - 1];
|
|
305
|
+
thread.messages.push({
|
|
306
|
+
messageId: _crypto.randomUUID.call(void 0, ),
|
|
307
|
+
role: "MODEL" /* MODEL */,
|
|
308
|
+
timestamp: Date.now(),
|
|
309
|
+
content: { type: "text", parts: [lastResult.response] },
|
|
310
|
+
metadata: { isThinking: true }
|
|
311
|
+
});
|
|
312
|
+
}
|
|
313
|
+
yield {
|
|
314
|
+
event: "thinking_process",
|
|
315
|
+
data: {
|
|
316
|
+
title: `[${_chunkO5X5QT63cjs.getManifest.call(void 0, ).name}] ${subquery}`,
|
|
317
|
+
description: actionPlan || ""
|
|
318
|
+
}
|
|
319
|
+
};
|
|
320
|
+
const stream = this.getIntentStream(triggeredIntent, thread);
|
|
321
|
+
if (!stream) {
|
|
322
|
+
continue;
|
|
323
|
+
}
|
|
324
|
+
let responseText = "";
|
|
325
|
+
for await (const event of stream) {
|
|
326
|
+
if (event.event === "text_chunk" && event.data.delta) {
|
|
327
|
+
responseText += event.data.delta;
|
|
328
|
+
} else if (event.event === "thinking_process") {
|
|
329
|
+
yield event;
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
fulfillmentResults.push({
|
|
333
|
+
subquery,
|
|
334
|
+
intent,
|
|
335
|
+
actionPlan,
|
|
336
|
+
response: responseText
|
|
337
|
+
});
|
|
338
|
+
}
|
|
339
|
+
const aggregateStream = this.aggregateService.aggregate(
|
|
340
|
+
originalQuery,
|
|
341
|
+
fulfillmentResults
|
|
342
|
+
);
|
|
343
|
+
for await (const event of aggregateStream) {
|
|
344
|
+
if (event.event === "text_chunk" && event.data.delta) {
|
|
345
|
+
finalResponseText += event.data.delta;
|
|
346
|
+
}
|
|
347
|
+
yield event;
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
await this.addToThreadMessages(thread, {
|
|
351
|
+
role: "MODEL" /* MODEL */,
|
|
352
|
+
content: finalResponseText
|
|
353
|
+
});
|
|
354
|
+
const streamEndTime = Date.now();
|
|
355
|
+
const streamDuration = streamEndTime - streamStartTime;
|
|
356
|
+
_chunkCLJ3DWTAcjs.loggers.intentStream.info("Stream session completed", {
|
|
357
|
+
threadId: thread.threadId,
|
|
358
|
+
duration: `${streamDuration}ms`,
|
|
359
|
+
endTime: new Date(streamEndTime).toISOString()
|
|
360
|
+
});
|
|
361
|
+
}
|
|
362
|
+
};
|
|
363
|
+
|
|
364
|
+
|
|
365
|
+
|
|
366
|
+
exports.IntentFulfillService = IntentFulfillService;
|
|
367
|
+
//# sourceMappingURL=chunk-2HDSF5GS.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/Users/shyun/comcom/ain-agent/ain-adk/dist/cjs/chunk-2HDSF5GS.cjs","../../src/services/intents/fulfill.service.ts"],"names":[],"mappings":"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","file":"/Users/shyun/comcom/ain-agent/ain-adk/dist/cjs/chunk-2HDSF5GS.cjs","sourcesContent":[null,"import { randomUUID } from \"node:crypto\";\nimport { getManifest } from \"@/config/manifest\";\nimport type {\n\tA2AModule,\n\tMCPModule,\n\tMemoryModule,\n\tModelModule,\n} from \"@/modules\";\nimport type { OnIntentFallback } from \"@/types/agent\";\nimport { CONNECTOR_PROTOCOL_TYPE, type ConnectorTool } from \"@/types/connector\";\nimport {\n\ttype FulfillmentResult,\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\";\nimport { createFulfillPrompt } from \"../utils/fulfill.common\";\nimport { AggregateService } from \"./aggregate.service\";\n\n/**\n * Check if multi-intent is disabled via environment variable.\n */\nfunction isMultiIntentDisabled(): boolean {\n\tconst value = process.env.DISABLE_MULTI_INTENTS;\n\treturn value === \"true\" || value === \"1\";\n}\n\nexport class IntentFulfillService {\n\tprivate modelModule: ModelModule;\n\tprivate memoryModule: MemoryModule;\n\tprivate a2aModule?: A2AModule;\n\tprivate mcpModule?: MCPModule;\n\tprivate onIntentFallback?: OnIntentFallback;\n\tprivate aggregateService: AggregateService;\n\n\tconstructor(\n\t\tmodelModule: ModelModule,\n\t\tmemoryModule: MemoryModule,\n\t\ta2aModule?: A2AModule,\n\t\tmcpModule?: MCPModule,\n\t\tonIntentFallback?: OnIntentFallback,\n\t) {\n\t\tthis.modelModule = modelModule;\n\t\tthis.memoryModule = memoryModule;\n\t\tthis.a2aModule = a2aModule;\n\t\tthis.mcpModule = mcpModule;\n\t\tthis.onIntentFallback = onIntentFallback;\n\t\tthis.aggregateService = new AggregateService(modelModule);\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\tconst agentMemory = this.memoryModule.getAgentMemory();\n\t\tconst fulfillPrompt = await createFulfillPrompt(agentMemory, intent);\n\n\t\tconst modelInstance = this.modelModule.getModel();\n\t\tconst modelOptions = this.modelModule.getModelOptions();\n\t\tconst messages = modelInstance.generateMessages({\n\t\t\tquery,\n\t\t\tthread,\n\t\t\tsystemPrompt: fulfillPrompt.trim(),\n\t\t});\n\n\t\tloggers.intent.debug(\"Intent fulfillment start\", {\n\t\t\tthreadId: thread.threadId,\n\t\t\tmessages,\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\tmodelOptions,\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\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\tthreadId: thread.threadId,\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 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\tif (toolTmp.protocol === CONNECTOR_PROTOCOL_TYPE.A2A) {\n\t\t\t\t\t\t\t\t// remove used tool to prevent infinite loop\n\t\t\t\t\t\t\t\tselectedTool = tools.splice(index, 1)[0];\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tselectedTool = toolTmp;\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\tconst toolArgs = JSON.parse(toolCall.function.arguments);\n\t\t\t\t\tconst thinkData = {\n\t\t\t\t\t\ttitle: `[${getManifest().name}] ${selectedTool.protocol} 실행: ${toolName}`,\n\t\t\t\t\t\tdescription: `${toolArgs.thinking_text || \"\"}`,\n\t\t\t\t\t};\n\t\t\t\t\tyield {\n\t\t\t\t\t\tevent: \"thinking_process\",\n\t\t\t\t\t\tdata: thinkData,\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\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\tloggers.intent.info(\"A2A tool call\", { toolName });\n\t\t\t\t\t\tconst a2aStream = 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\t// yield intermediate events and get final result\n\t\t\t\t\t\tlet result = await a2aStream.next();\n\t\t\t\t\t\twhile (!result.done) {\n\t\t\t\t\t\t\tif (result.value.event === \"thinking_process\") {\n\t\t\t\t\t\t\t\tyield result.value;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tresult = await a2aStream.next();\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttoolResult = result.value;\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(\"Tool Result\", { 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\n\t\tloggers.intent.debug(\"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 * Returns the appropriate stream for a triggered intent.\n\t * Uses fallback handler if no intent matched and fallback is configured.\n\t */\n\tprivate getIntentStream(\n\t\ttriggeredIntent: TriggeredIntent,\n\t\tthread: ThreadObject,\n\t): AsyncGenerator<StreamEvent> | undefined {\n\t\tconst { subquery = \"\", intent } = triggeredIntent;\n\n\t\tif (!intent && this.onIntentFallback) {\n\t\t\tloggers.intent.info(\"No intent matched, calling fallback handler\");\n\t\t\tconst fallbackStream = this.onIntentFallback({\n\t\t\t\ttriggeredIntent,\n\t\t\t\tthread,\n\t\t\t});\n\t\t\tif (fallbackStream !== undefined) {\n\t\t\t\treturn fallbackStream;\n\t\t\t}\n\t\t}\n\n\t\treturn this.intentFulfilling(subquery, thread, intent);\n\t}\n\n\t/**\n\t * Processes all triggered intents and generates a unified response.\n\t *\n\t * Workflow:\n\t * 1. Process each intent sequentially, collecting results\n\t * 2. Yield thinking_process events for progress visibility\n\t * 3. Use AggregateService to unify results if needsAggregation is true\n\t * 4. Stream the final (possibly aggregated) response\n\t *\n\t * @param intents - Array of triggered intents to process\n\t * @param thread - The thread history\n\t * @param originalQuery - The user's original query (for aggregate context)\n\t * @param needsAggregation - Whether the results need to be aggregated\n\t * @returns AsyncGenerator yielding StreamEvent objects\n\t */\n\tpublic async *intentFulfill(\n\t\tintents: Array<TriggeredIntent>,\n\t\tthread: ThreadObject,\n\t\toriginalQuery: string,\n\t\tneedsAggregation: boolean,\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\tneedsAggregation,\n\t\t\tstartTime: new Date(streamStartTime).toISOString(),\n\t\t});\n\n\t\tlet finalResponseText = \"\";\n\n\t\t// Stream directly if: single-intent mode, single intent, or no aggregation needed\n\t\tconst shouldStreamDirectly =\n\t\t\tisMultiIntentDisabled() || intents.length <= 1 || !needsAggregation;\n\n\t\tif (shouldStreamDirectly && intents.length <= 1) {\n\t\t\t// Single intent: stream response directly\n\t\t\tconst triggeredIntent = intents[0];\n\t\t\tif (!triggeredIntent) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst { subquery = \"\", intent, actionPlan } = triggeredIntent;\n\t\t\tloggers.intent.info(\n\t\t\t\t`Process single intent: ${subquery}, ${intent?.name}`,\n\t\t\t);\n\t\t\tloggers.intent.info(`Action plan: ${actionPlan}`);\n\n\t\t\t// Yield thinking_process for progress visibility\n\t\t\tyield {\n\t\t\t\tevent: \"thinking_process\",\n\t\t\t\tdata: {\n\t\t\t\t\ttitle: `[${getManifest().name}] ${subquery}`,\n\t\t\t\t\tdescription: actionPlan || \"\",\n\t\t\t\t},\n\t\t\t};\n\n\t\t\t// Get the stream for this intent\n\t\t\tconst stream = this.getIntentStream(triggeredIntent, thread);\n\t\t\tif (!stream) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Stream response directly\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\t\t\t\tyield event;\n\t\t\t}\n\t\t} else if (shouldStreamDirectly) {\n\t\t\t// Multiple intents but no aggregation needed: collect intermediate results, stream only last\n\t\t\tfor (let i = 0; i < intents.length; i++) {\n\t\t\t\tconst triggeredIntent = intents[i];\n\t\t\t\tconst { subquery = \"\", intent, actionPlan } = triggeredIntent;\n\t\t\t\tloggers.intent.info(`Process query: ${subquery}, ${intent?.name}`);\n\t\t\t\tloggers.intent.info(`Action plan: ${actionPlan}`);\n\n\t\t\t\tconst isLastIntent = i === intents.length - 1;\n\n\t\t\t\t// Yield thinking_process for progress visibility\n\t\t\t\tyield {\n\t\t\t\t\tevent: \"thinking_process\",\n\t\t\t\t\tdata: {\n\t\t\t\t\t\ttitle: `[${getManifest().name}] ${subquery}`,\n\t\t\t\t\t\tdescription: actionPlan || \"\",\n\t\t\t\t\t},\n\t\t\t\t};\n\n\t\t\t\t// Get the stream for this intent\n\t\t\t\tconst stream = this.getIntentStream(triggeredIntent, thread);\n\t\t\t\tif (!stream) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (isLastIntent) {\n\t\t\t\t\t// Stream last intent response directly\n\t\t\t\t\tfor await (const event of stream) {\n\t\t\t\t\t\tif (event.event === \"text_chunk\" && event.data.delta) {\n\t\t\t\t\t\t\tfinalResponseText += event.data.delta;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tyield event;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// Collect intermediate results without streaming text_chunk\n\t\t\t\t\tlet responseText = \"\";\n\t\t\t\t\tfor await (const event of stream) {\n\t\t\t\t\t\tif (event.event === \"text_chunk\" && event.data.delta) {\n\t\t\t\t\t\t\tresponseText += event.data.delta;\n\t\t\t\t\t\t} else if (event.event === \"thinking_process\") {\n\t\t\t\t\t\t\t// Tool execution thinking_process events are yielded immediately\n\t\t\t\t\t\t\tyield event;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t// Add intermediate result to thread context for next intent\n\t\t\t\t\tthread.messages.push({\n\t\t\t\t\t\tmessageId: randomUUID(),\n\t\t\t\t\t\trole: MessageRole.MODEL,\n\t\t\t\t\t\ttimestamp: Date.now(),\n\t\t\t\t\t\tcontent: { type: \"text\", parts: [responseText] },\n\t\t\t\t\t\tmetadata: { isThinking: true },\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\t// Multi-intent mode with aggregation: collect all results then aggregate\n\t\t\tconst fulfillmentResults: FulfillmentResult[] = [];\n\n\t\t\tfor (let i = 0; i < intents.length; i++) {\n\t\t\t\tconst triggeredIntent = intents[i];\n\t\t\t\tconst { subquery = \"\", intent, actionPlan } = triggeredIntent;\n\t\t\t\tloggers.intent.info(`Process query: ${subquery}, ${intent?.name}`);\n\t\t\t\tloggers.intent.info(`Action plan: ${actionPlan}`);\n\n\t\t\t\t// Add previous result to thread context for inference (not stored in memory)\n\t\t\t\tif (fulfillmentResults.length > 0) {\n\t\t\t\t\tconst lastResult = fulfillmentResults[fulfillmentResults.length - 1];\n\t\t\t\t\tthread.messages.push({\n\t\t\t\t\t\tmessageId: randomUUID(),\n\t\t\t\t\t\trole: MessageRole.MODEL,\n\t\t\t\t\t\ttimestamp: Date.now(),\n\t\t\t\t\t\tcontent: { type: \"text\", parts: [lastResult.response] },\n\t\t\t\t\t\tmetadata: { isThinking: true },\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t// Yield thinking_process for progress visibility\n\t\t\t\tyield {\n\t\t\t\t\tevent: \"thinking_process\",\n\t\t\t\t\tdata: {\n\t\t\t\t\t\ttitle: `[${getManifest().name}] ${subquery}`,\n\t\t\t\t\t\tdescription: actionPlan || \"\",\n\t\t\t\t\t},\n\t\t\t\t};\n\n\t\t\t\t// Get the stream for this intent\n\t\t\t\tconst stream = this.getIntentStream(triggeredIntent, thread);\n\t\t\t\tif (!stream) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Collect response text (don't yield text_chunk yet)\n\t\t\t\tlet responseText = \"\";\n\t\t\t\tfor await (const event of stream) {\n\t\t\t\t\tif (event.event === \"text_chunk\" && event.data.delta) {\n\t\t\t\t\t\tresponseText += event.data.delta;\n\t\t\t\t\t} else if (event.event === \"thinking_process\") {\n\t\t\t\t\t\t// Tool execution thinking_process events are yielded immediately\n\t\t\t\t\t\tyield event;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tfulfillmentResults.push({\n\t\t\t\t\tsubquery,\n\t\t\t\t\tintent,\n\t\t\t\t\tactionPlan,\n\t\t\t\t\tresponse: responseText,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Aggregate step: generate unified response\n\t\t\tconst aggregateStream = this.aggregateService.aggregate(\n\t\t\t\toriginalQuery,\n\t\t\t\tfulfillmentResults,\n\t\t\t);\n\n\t\t\tfor await (const event of aggregateStream) {\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\t\t\t\tyield event;\n\t\t\t}\n\t\t}\n\n\t\t// Save final response to memory\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"]}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
|
+
|
|
3
|
+
var _chunkWGJ2T4XMcjs = require('./chunk-WGJ2T4XM.cjs');
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
var _chunkOERUQFT7cjs = require('./chunk-OERUQFT7.cjs');
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
var _chunk4VIZ52C2cjs = require('./chunk-4VIZ52C2.cjs');
|
|
10
|
+
|
|
11
|
+
// src/routes/api/workflow.routes.ts
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
var _express = require('express');
|
|
15
|
+
var _httpstatuscodes = require('http-status-codes');
|
|
16
|
+
var createWorkflowApiRouter = () => {
|
|
17
|
+
const router = _express.Router.call(void 0, );
|
|
18
|
+
const workflowApiController = _chunkWGJ2T4XMcjs.container.getWorkflowApiController();
|
|
19
|
+
const checkWorkflowMemory = (_req, _res, next) => {
|
|
20
|
+
const memoryModule = _chunk4VIZ52C2cjs.getMemoryModule.call(void 0, );
|
|
21
|
+
const workflowMemory = memoryModule.getWorkflowMemory();
|
|
22
|
+
if (!workflowMemory) {
|
|
23
|
+
const error = new (0, _chunkOERUQFT7cjs.AinHttpError)(
|
|
24
|
+
_httpstatuscodes.StatusCodes.SERVICE_UNAVAILABLE,
|
|
25
|
+
"Workflow memory is not initialized"
|
|
26
|
+
);
|
|
27
|
+
throw error;
|
|
28
|
+
}
|
|
29
|
+
next();
|
|
30
|
+
};
|
|
31
|
+
router.get(
|
|
32
|
+
"/",
|
|
33
|
+
checkWorkflowMemory,
|
|
34
|
+
workflowApiController.handleGetAllWorkflows
|
|
35
|
+
);
|
|
36
|
+
router.get(
|
|
37
|
+
"/:id",
|
|
38
|
+
checkWorkflowMemory,
|
|
39
|
+
workflowApiController.handleGetWorkflow
|
|
40
|
+
);
|
|
41
|
+
router.post(
|
|
42
|
+
"/",
|
|
43
|
+
checkWorkflowMemory,
|
|
44
|
+
workflowApiController.handleCreateWorkflow
|
|
45
|
+
);
|
|
46
|
+
router.post(
|
|
47
|
+
"/update/:id",
|
|
48
|
+
checkWorkflowMemory,
|
|
49
|
+
workflowApiController.handleUpdateWorkflow
|
|
50
|
+
);
|
|
51
|
+
router.post(
|
|
52
|
+
"/delete/:id",
|
|
53
|
+
checkWorkflowMemory,
|
|
54
|
+
workflowApiController.handleDeleteWorkflow
|
|
55
|
+
);
|
|
56
|
+
return router;
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
exports.createWorkflowApiRouter = createWorkflowApiRouter;
|
|
62
|
+
//# sourceMappingURL=chunk-2HV2HAU2.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/Users/shyun/comcom/ain-agent/ain-adk/dist/cjs/chunk-2HV2HAU2.cjs","../../src/routes/api/workflow.routes.ts"],"names":[],"mappings":"AAAA;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACA;ACVA;AAIC;AAAA,kCACM;AACP,oDAA4B;AAKrB,IAAM,wBAAA,EAA0B,CAAA,EAAA,GAAc;AACpD,EAAA,MAAM,OAAA,EAAS,6BAAA,CAAO;AACtB,EAAA,MAAM,sBAAA,EAAwB,2BAAA,CAAU,wBAAA,CAAyB,CAAA;AAEjE,EAAA,MAAM,oBAAA,EAAsB,CAC3B,IAAA,EACA,IAAA,EACA,IAAA,EAAA,GACI;AACJ,IAAA,MAAM,aAAA,EAAe,+CAAA,CAAgB;AACrC,IAAA,MAAM,eAAA,EAAiB,YAAA,CAAa,iBAAA,CAAkB,CAAA;AACtD,IAAA,GAAA,CAAI,CAAC,cAAA,EAAgB;AACpB,MAAA,MAAM,MAAA,EAAQ,IAAI,mCAAA;AAAA,QACjB,4BAAA,CAAY,mBAAA;AAAA,QACZ;AAAA,MACD,CAAA;AACA,MAAA,MAAM,KAAA;AAAA,IACP;AACA,IAAA,IAAA,CAAK,CAAA;AAAA,EACN,CAAA;AAGA,EAAA,MAAA,CAAO,GAAA;AAAA,IACN,GAAA;AAAA,IACA,mBAAA;AAAA,IACA,qBAAA,CAAsB;AAAA,EACvB,CAAA;AACA,EAAA,MAAA,CAAO,GAAA;AAAA,IACN,MAAA;AAAA,IACA,mBAAA;AAAA,IACA,qBAAA,CAAsB;AAAA,EACvB,CAAA;AACA,EAAA,MAAA,CAAO,IAAA;AAAA,IACN,GAAA;AAAA,IACA,mBAAA;AAAA,IACA,qBAAA,CAAsB;AAAA,EACvB,CAAA;AACA,EAAA,MAAA,CAAO,IAAA;AAAA,IACN,aAAA;AAAA,IACA,mBAAA;AAAA,IACA,qBAAA,CAAsB;AAAA,EACvB,CAAA;AACA,EAAA,MAAA,CAAO,IAAA;AAAA,IACN,aAAA;AAAA,IACA,mBAAA;AAAA,IACA,qBAAA,CAAsB;AAAA,EACvB,CAAA;AAEA,EAAA,OAAO,MAAA;AACR,CAAA;ADHA;AACA;AACE;AACF,0DAAC","file":"/Users/shyun/comcom/ain-agent/ain-adk/dist/cjs/chunk-2HV2HAU2.cjs","sourcesContent":[null,"import {\n\ttype NextFunction,\n\ttype Request,\n\ttype Response,\n\tRouter,\n} from \"express\";\nimport { StatusCodes } from \"http-status-codes\";\nimport { getMemoryModule } from \"@/config/modules\";\nimport { container } from \"@/container\";\nimport { AinHttpError } from \"@/types/agent\";\n\nexport const createWorkflowApiRouter = (): Router => {\n\tconst router = Router();\n\tconst workflowApiController = container.getWorkflowApiController();\n\n\tconst checkWorkflowMemory = (\n\t\t_req: Request,\n\t\t_res: Response,\n\t\tnext: NextFunction,\n\t) => {\n\t\tconst memoryModule = getMemoryModule();\n\t\tconst workflowMemory = memoryModule.getWorkflowMemory();\n\t\tif (!workflowMemory) {\n\t\t\tconst error = new AinHttpError(\n\t\t\t\tStatusCodes.SERVICE_UNAVAILABLE,\n\t\t\t\t\"Workflow memory is not initialized\",\n\t\t\t);\n\t\t\tthrow error;\n\t\t}\n\t\tnext();\n\t};\n\n\t// APIs (prefix: /api/workflow)\n\trouter.get(\n\t\t\"/\",\n\t\tcheckWorkflowMemory,\n\t\tworkflowApiController.handleGetAllWorkflows,\n\t);\n\trouter.get(\n\t\t\"/:id\",\n\t\tcheckWorkflowMemory,\n\t\tworkflowApiController.handleGetWorkflow,\n\t);\n\trouter.post(\n\t\t\"/\",\n\t\tcheckWorkflowMemory,\n\t\tworkflowApiController.handleCreateWorkflow,\n\t);\n\trouter.post(\n\t\t\"/update/:id\",\n\t\tcheckWorkflowMemory,\n\t\tworkflowApiController.handleUpdateWorkflow,\n\t);\n\trouter.post(\n\t\t\"/delete/:id\",\n\t\tcheckWorkflowMemory,\n\t\tworkflowApiController.handleDeleteWorkflow,\n\t);\n\n\treturn router;\n};\n"]}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
|
+
|
|
3
|
+
var _chunkOVI3MJ2Ucjs = require('./chunk-OVI3MJ2U.cjs');
|
|
4
|
+
|
|
5
|
+
// src/routes/intent.routes.ts
|
|
6
|
+
var _express = require('express');
|
|
7
|
+
var createIntentRouter = () => {
|
|
8
|
+
const router = _express.Router.call(void 0, );
|
|
9
|
+
const intentController = _chunkOVI3MJ2Ucjs.container.getIntentController();
|
|
10
|
+
router.post("/trigger", intentController.handleIntentTrigger);
|
|
11
|
+
return router;
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
exports.createIntentRouter = createIntentRouter;
|
|
17
|
+
//# sourceMappingURL=chunk-2IKGA5IV.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/Users/shyun/comcom/ain-agent/ain-adk/dist/cjs/chunk-2IKGA5IV.cjs","../../src/routes/intent.routes.ts"],"names":[],"mappings":"AAAA;AACE;AACF,wDAA6B;AAC7B;AACA;ACJA,kCAAuB;AAGhB,IAAM,mBAAA,EAAqB,CAAA,EAAA,GAAc;AAC/C,EAAA,MAAM,OAAA,EAAS,6BAAA,CAAO;AAEtB,EAAA,MAAM,iBAAA,EAAmB,2BAAA,CAAU,mBAAA,CAAoB,CAAA;AAEvD,EAAA,MAAA,CAAO,IAAA,CAAK,UAAA,EAAY,gBAAA,CAAiB,mBAAmB,CAAA;AAE5D,EAAA,OAAO,MAAA;AACR,CAAA;ADCA;AACA;AACE;AACF,gDAAC","file":"/Users/shyun/comcom/ain-agent/ain-adk/dist/cjs/chunk-2IKGA5IV.cjs","sourcesContent":[null,"import { Router } from \"express\";\nimport { container } from \"@/container\";\n\nexport const createIntentRouter = (): Router => {\n\tconst router = Router();\n\n\tconst intentController = container.getIntentController();\n\n\trouter.post(\"/trigger\", intentController.handleIntentTrigger);\n\n\treturn router;\n};\n"]}
|