agentix-cli 0.49.0 → 0.50.1
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 +17 -0
- package/dist/{App-KE4SURSS.js → App-TDUUFVDV.js} +2 -2
- package/dist/{ChatApp-NNHIKXO2.js → ChatApp-IOWDXM3R.js} +2 -2
- package/dist/agent-KRLAT3YJ.js +2 -0
- package/dist/{article-fields-L4D2BOGY.js → article-fields-PITN4NHA.js} +2 -2
- package/dist/{article-quality-44ONVGLN.js → article-quality-JFJMZWFQ.js} +2 -2
- package/dist/{audit-4245CX6P.js → audit-CMJ2TZ3K.js} +2 -2
- package/dist/{backfill-MTD2B62I.js → backfill-7TCF4SHG.js} +2 -2
- package/dist/{board-dashboard-LG3ECH7C.js → board-dashboard-VA4VSCMQ.js} +9 -9
- package/dist/board-dashboard-VA4VSCMQ.js.map +1 -0
- package/dist/{builtin-B67DMJ3M.js → builtin-W6KNX7RS.js} +2 -2
- package/dist/calibration-MCCVYGZQ.js +2 -0
- package/dist/{chunk-3SCPRYJB.js → chunk-2AXFYDWF.js} +2 -2
- package/dist/{chunk-MWUJOAAW.js → chunk-2BRX2EMT.js} +6 -6
- package/dist/{chunk-DLKRPK5M.js → chunk-4BNQSUWV.js} +7 -2
- package/dist/{chunk-DLKRPK5M.js.map → chunk-4BNQSUWV.js.map} +1 -1
- package/dist/{chunk-OHA3J5ZV.js → chunk-5KCOH5FQ.js} +2 -2
- package/dist/{chunk-F4HZTZHW.js → chunk-72SZI2UW.js} +2 -2
- package/dist/{chunk-L2WSPY6S.js → chunk-7I7IEX4S.js} +2 -2
- package/dist/{chunk-GCHUE3TN.js → chunk-7WDJW37G.js} +2 -2
- package/dist/{chunk-QDE75R4U.js → chunk-A6IV2VQY.js} +2 -2
- package/dist/{chunk-JVNFRS26.js → chunk-AVJRATR5.js} +2 -2
- package/dist/{chunk-PZCTCCC5.js → chunk-BVRUDRCM.js} +2 -2
- package/dist/{chunk-4NBWF4TL.js → chunk-F2PEUQW4.js} +2 -2
- package/dist/{chunk-ZTEU5JVQ.js → chunk-FCPTN6NF.js} +2 -2
- package/dist/{chunk-5ALS7SVV.js → chunk-FDYGTQVW.js} +2 -2
- package/dist/{chunk-AJONZWLT.js → chunk-FX3D7YON.js} +2 -2
- package/dist/{chunk-OTW5MPFT.js → chunk-HHY3MSMN.js} +2 -2
- package/dist/chunk-HRBKSZ34.js +2 -0
- package/dist/chunk-HRBKSZ34.js.map +1 -0
- package/dist/{chunk-WPMX3VGI.js → chunk-J3SOEFRE.js} +2 -2
- package/dist/{chunk-3L2FKVR6.js → chunk-JUJ3TCOE.js} +3 -3
- package/dist/{chunk-FM2GGPSD.js → chunk-JWLTI6NZ.js} +68 -68
- package/dist/chunk-JWLTI6NZ.js.map +1 -0
- package/dist/{chunk-B5XHX44Y.js → chunk-JY7POTMB.js} +2 -2
- package/dist/{chunk-DTJKN5VT.js → chunk-KH6L7GDO.js} +2 -2
- package/dist/chunk-QIJLFPWE.js +2 -0
- package/dist/{chunk-BH3GTCZ6.js → chunk-RGDKHYY2.js} +2 -2
- package/dist/{chunk-HGT4AKOH.js → chunk-RP7GLXOA.js} +8 -8
- package/dist/{chunk-K33GIBSE.js → chunk-SIU6STB2.js} +2 -2
- package/dist/{chunk-LCIREYTD.js → chunk-SZJMS7K4.js} +2 -2
- package/dist/{chunk-AJ5RMU7X.js → chunk-TFVUOC2C.js} +2 -2
- package/dist/{chunk-DVNIFP7S.js → chunk-WKTFP3SK.js} +3 -3
- package/dist/{chunk-Q7C3X3R6.js → chunk-WP6KLXTP.js} +2 -2
- package/dist/{chunk-RKAJR37K.js → chunk-WUDXUY7H.js} +2 -2
- package/dist/{chunk-NLZD2QKF.js → chunk-WW6KNRIR.js} +2 -2
- package/dist/{chunk-5XQCGPQJ.js → chunk-X5K3HR4V.js} +2 -2
- package/dist/{chunk-P2ZYT5D6.js → chunk-XSFXAJDA.js} +2 -2
- package/dist/{chunk-W5C2GDNC.js → chunk-Y57CULGE.js} +2 -2
- package/dist/{chunk-HVQJIROJ.js → chunk-ZKDWQJVS.js} +9 -9
- package/dist/{chunk-IXUEJBHD.js → chunk-ZN7637EF.js} +2 -2
- package/dist/{chunk-OUZ7YVQZ.js → chunk-ZQSB6IX4.js} +2 -2
- package/dist/{chunk-4TITGMPX.js → chunk-ZWGRRFJI.js} +2 -2
- package/dist/cli.js +1 -1
- package/dist/client-PC7OEKSK.js +2 -0
- package/dist/{compaction-U5SAYTX6.js → compaction-NWPBPWY2.js} +4 -4
- package/dist/{config-R47ITLIY.js → config-I4GWI22T.js} +2 -2
- package/dist/config-mutator-3RFKH3OV.js +2 -0
- package/dist/{conflict-detector-ZPOT3M2C.js → conflict-detector-KS7OSS45.js} +2 -2
- package/dist/{context-planner-FJMU5WAT.js → context-planner-LJT5IKH6.js} +3 -3
- package/dist/debug-FTAGG7MN.js +2 -0
- package/dist/{discover-D4VVRNAI.js → discover-7YFQNYLC.js} +2 -2
- package/dist/doctor-OG6DK52Y.js +2 -0
- package/dist/{editor-chat-MOMQHMO4.js → editor-chat-V24MXQIB.js} +2 -2
- package/dist/{entry-triage-LK34TSQD.js → entry-triage-LZWMMLLN.js} +2 -2
- package/dist/{facts-YVEJOM7O.js → facts-4YPSHIXJ.js} +2 -2
- package/dist/{failure-candidates-ARRMFXRY.js → failure-candidates-RIXA3Y6D.js} +2 -2
- package/dist/heal-HVYQD3EZ.js +2 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +2 -2
- package/dist/{ingest-whatsapp-NS4OWDOU.js → ingest-whatsapp-4POCTRTP.js} +2 -2
- package/dist/loader-EVHZ2R73.js +2 -0
- package/dist/loader-KKMG24O5.js +2 -0
- package/dist/memory-extract-MGGXIZTE.js +2 -0
- package/dist/{migrate-v2-V4WN2VVM.js → migrate-v2-5VGHWPBW.js} +2 -2
- package/dist/{ntfy-X7EPB3TG.js → ntfy-ZY2NPGBA.js} +2 -2
- package/dist/processes-CMTMB7LG.js +2 -0
- package/dist/program-RFAHI4SS.js +2 -0
- package/dist/{projects-api-QE6L65SK.js → projects-api-E337EQNV.js} +2 -2
- package/dist/{projects-mutate-MY7JTLSZ.js → projects-mutate-S5MY7V3V.js} +2 -2
- package/dist/promote-EDEG2HQR.js +2 -0
- package/dist/proposals-O4B5LD5T.js +2 -0
- package/dist/providers-NRPX2FHP.js +2 -0
- package/dist/query-P5LMGXVS.js +2 -0
- package/dist/{questions-4B4KSPXG.js → questions-2V2VGIT4.js} +2 -2
- package/dist/recipes-423CIPZ3.js +2 -0
- package/dist/registry-GJLY5J5E.js +2 -0
- package/dist/{request-planner-PEAYYXAP.js → request-planner-JDBXFNQ4.js} +2 -2
- package/dist/{review-candidates-W7NIHNAI.js → review-candidates-EBP5CFOB.js} +2 -2
- package/dist/{review-store-B4YE3EFK.js → review-store-PW3OBGZQ.js} +2 -2
- package/dist/{rotation-memo-QEO3COFH.js → rotation-memo-453FXKHQ.js} +2 -2
- package/dist/routing-Q2EOZ3VW.js +2 -0
- package/dist/runner-56G3N7M4.js +2 -0
- package/dist/schedule-tool-N2Z5E6AR.js +2 -0
- package/dist/scheduler-WTPERNYJ.js +2 -0
- package/dist/seat-LV3STEXI.js +2 -0
- package/dist/{select-4XYRIZ5L.js → select-5NHY4T5A.js} +2 -2
- package/dist/shutdown-ZAF7RW25.js +2 -0
- package/dist/store-TWQPEM5V.js +2 -0
- package/dist/{subagent-2SJHSSJS.js → subagent-XY5N7TUU.js} +2 -2
- package/dist/{surface-usage-V2BX4SBD.js → surface-usage-HVVP22SA.js} +2 -2
- package/dist/timers-KK7GF77Y.js +2 -0
- package/dist/{tool-PAQ47HV2.js → tool-2RKPJWDG.js} +2 -2
- package/dist/{triage-backtest-JNO7RKX7.js → triage-backtest-DLKYJSEB.js} +2 -2
- package/dist/types-DO3KLIBS.js +2 -0
- package/dist/types-S6NHM5C3.js +2 -0
- package/dist/{whatsapp-state-6D6FHHD2.js → whatsapp-state-LB3R32BK.js} +2 -2
- package/dist/wiki-XQMJ2FPU.js +2 -0
- package/dist/{workspace-setup-G6KGWPHY.js → workspace-setup-42ARC42I.js} +2 -2
- package/package.json +1 -1
- package/dist/agent-J7SLJYQ6.js +0 -2
- package/dist/board-dashboard-LG3ECH7C.js.map +0 -1
- package/dist/calibration-ILS5OI44.js +0 -2
- package/dist/chunk-7DXE264B.js +0 -2
- package/dist/chunk-7DXE264B.js.map +0 -1
- package/dist/chunk-FIOB3MEX.js +0 -2
- package/dist/chunk-FM2GGPSD.js.map +0 -1
- package/dist/client-JZTH46N2.js +0 -2
- package/dist/config-mutator-T6JGXJ26.js +0 -2
- package/dist/debug-3MEUO2P2.js +0 -2
- package/dist/doctor-2DMGAWMW.js +0 -2
- package/dist/heal-FVLBHYP7.js +0 -2
- package/dist/loader-4ZGTK7LD.js +0 -2
- package/dist/loader-BOKE5M5S.js +0 -2
- package/dist/memory-extract-YZI2QZVR.js +0 -2
- package/dist/processes-XWRGOLMT.js +0 -2
- package/dist/program-3CDFUJVE.js +0 -2
- package/dist/promote-57YNOVXV.js +0 -2
- package/dist/proposals-TX2HBBYV.js +0 -2
- package/dist/providers-KO2DODIO.js +0 -2
- package/dist/query-ZT7WXY2F.js +0 -2
- package/dist/recipes-7S4MC5OJ.js +0 -2
- package/dist/registry-722GXALE.js +0 -2
- package/dist/routing-7LCO7UJ7.js +0 -2
- package/dist/runner-YRBVNYTY.js +0 -2
- package/dist/schedule-tool-ZD3VBUBW.js +0 -2
- package/dist/scheduler-GC3FQKXY.js +0 -2
- package/dist/seat-HR6QMAR2.js +0 -2
- package/dist/shutdown-6GCMKYAD.js +0 -2
- package/dist/store-MCOA6N4F.js +0 -2
- package/dist/timers-PCB4ZIBD.js +0 -2
- package/dist/types-H5ENIUIT.js +0 -2
- package/dist/types-OIFU3KSQ.js +0 -2
- package/dist/wiki-EREMPSAE.js +0 -2
- /package/dist/{App-KE4SURSS.js.map → App-TDUUFVDV.js.map} +0 -0
- /package/dist/{ChatApp-NNHIKXO2.js.map → ChatApp-IOWDXM3R.js.map} +0 -0
- /package/dist/{agent-J7SLJYQ6.js.map → agent-KRLAT3YJ.js.map} +0 -0
- /package/dist/{article-fields-L4D2BOGY.js.map → article-fields-PITN4NHA.js.map} +0 -0
- /package/dist/{article-quality-44ONVGLN.js.map → article-quality-JFJMZWFQ.js.map} +0 -0
- /package/dist/{audit-4245CX6P.js.map → audit-CMJ2TZ3K.js.map} +0 -0
- /package/dist/{backfill-MTD2B62I.js.map → backfill-7TCF4SHG.js.map} +0 -0
- /package/dist/{builtin-B67DMJ3M.js.map → builtin-W6KNX7RS.js.map} +0 -0
- /package/dist/{calibration-ILS5OI44.js.map → calibration-MCCVYGZQ.js.map} +0 -0
- /package/dist/{chunk-3SCPRYJB.js.map → chunk-2AXFYDWF.js.map} +0 -0
- /package/dist/{chunk-MWUJOAAW.js.map → chunk-2BRX2EMT.js.map} +0 -0
- /package/dist/{chunk-OHA3J5ZV.js.map → chunk-5KCOH5FQ.js.map} +0 -0
- /package/dist/{chunk-F4HZTZHW.js.map → chunk-72SZI2UW.js.map} +0 -0
- /package/dist/{chunk-L2WSPY6S.js.map → chunk-7I7IEX4S.js.map} +0 -0
- /package/dist/{chunk-GCHUE3TN.js.map → chunk-7WDJW37G.js.map} +0 -0
- /package/dist/{chunk-QDE75R4U.js.map → chunk-A6IV2VQY.js.map} +0 -0
- /package/dist/{chunk-JVNFRS26.js.map → chunk-AVJRATR5.js.map} +0 -0
- /package/dist/{chunk-PZCTCCC5.js.map → chunk-BVRUDRCM.js.map} +0 -0
- /package/dist/{chunk-4NBWF4TL.js.map → chunk-F2PEUQW4.js.map} +0 -0
- /package/dist/{chunk-ZTEU5JVQ.js.map → chunk-FCPTN6NF.js.map} +0 -0
- /package/dist/{chunk-5ALS7SVV.js.map → chunk-FDYGTQVW.js.map} +0 -0
- /package/dist/{chunk-AJONZWLT.js.map → chunk-FX3D7YON.js.map} +0 -0
- /package/dist/{chunk-OTW5MPFT.js.map → chunk-HHY3MSMN.js.map} +0 -0
- /package/dist/{chunk-WPMX3VGI.js.map → chunk-J3SOEFRE.js.map} +0 -0
- /package/dist/{chunk-3L2FKVR6.js.map → chunk-JUJ3TCOE.js.map} +0 -0
- /package/dist/{chunk-B5XHX44Y.js.map → chunk-JY7POTMB.js.map} +0 -0
- /package/dist/{chunk-DTJKN5VT.js.map → chunk-KH6L7GDO.js.map} +0 -0
- /package/dist/{chunk-FIOB3MEX.js.map → chunk-QIJLFPWE.js.map} +0 -0
- /package/dist/{chunk-BH3GTCZ6.js.map → chunk-RGDKHYY2.js.map} +0 -0
- /package/dist/{chunk-HGT4AKOH.js.map → chunk-RP7GLXOA.js.map} +0 -0
- /package/dist/{chunk-K33GIBSE.js.map → chunk-SIU6STB2.js.map} +0 -0
- /package/dist/{chunk-LCIREYTD.js.map → chunk-SZJMS7K4.js.map} +0 -0
- /package/dist/{chunk-AJ5RMU7X.js.map → chunk-TFVUOC2C.js.map} +0 -0
- /package/dist/{chunk-DVNIFP7S.js.map → chunk-WKTFP3SK.js.map} +0 -0
- /package/dist/{chunk-Q7C3X3R6.js.map → chunk-WP6KLXTP.js.map} +0 -0
- /package/dist/{chunk-RKAJR37K.js.map → chunk-WUDXUY7H.js.map} +0 -0
- /package/dist/{chunk-NLZD2QKF.js.map → chunk-WW6KNRIR.js.map} +0 -0
- /package/dist/{chunk-5XQCGPQJ.js.map → chunk-X5K3HR4V.js.map} +0 -0
- /package/dist/{chunk-P2ZYT5D6.js.map → chunk-XSFXAJDA.js.map} +0 -0
- /package/dist/{chunk-W5C2GDNC.js.map → chunk-Y57CULGE.js.map} +0 -0
- /package/dist/{chunk-HVQJIROJ.js.map → chunk-ZKDWQJVS.js.map} +0 -0
- /package/dist/{chunk-IXUEJBHD.js.map → chunk-ZN7637EF.js.map} +0 -0
- /package/dist/{chunk-OUZ7YVQZ.js.map → chunk-ZQSB6IX4.js.map} +0 -0
- /package/dist/{chunk-4TITGMPX.js.map → chunk-ZWGRRFJI.js.map} +0 -0
- /package/dist/{client-JZTH46N2.js.map → client-PC7OEKSK.js.map} +0 -0
- /package/dist/{compaction-U5SAYTX6.js.map → compaction-NWPBPWY2.js.map} +0 -0
- /package/dist/{config-R47ITLIY.js.map → config-I4GWI22T.js.map} +0 -0
- /package/dist/{config-mutator-T6JGXJ26.js.map → config-mutator-3RFKH3OV.js.map} +0 -0
- /package/dist/{conflict-detector-ZPOT3M2C.js.map → conflict-detector-KS7OSS45.js.map} +0 -0
- /package/dist/{context-planner-FJMU5WAT.js.map → context-planner-LJT5IKH6.js.map} +0 -0
- /package/dist/{debug-3MEUO2P2.js.map → debug-FTAGG7MN.js.map} +0 -0
- /package/dist/{discover-D4VVRNAI.js.map → discover-7YFQNYLC.js.map} +0 -0
- /package/dist/{doctor-2DMGAWMW.js.map → doctor-OG6DK52Y.js.map} +0 -0
- /package/dist/{editor-chat-MOMQHMO4.js.map → editor-chat-V24MXQIB.js.map} +0 -0
- /package/dist/{entry-triage-LK34TSQD.js.map → entry-triage-LZWMMLLN.js.map} +0 -0
- /package/dist/{facts-YVEJOM7O.js.map → facts-4YPSHIXJ.js.map} +0 -0
- /package/dist/{failure-candidates-ARRMFXRY.js.map → failure-candidates-RIXA3Y6D.js.map} +0 -0
- /package/dist/{heal-FVLBHYP7.js.map → heal-HVYQD3EZ.js.map} +0 -0
- /package/dist/{ingest-whatsapp-NS4OWDOU.js.map → ingest-whatsapp-4POCTRTP.js.map} +0 -0
- /package/dist/{loader-4ZGTK7LD.js.map → loader-EVHZ2R73.js.map} +0 -0
- /package/dist/{loader-BOKE5M5S.js.map → loader-KKMG24O5.js.map} +0 -0
- /package/dist/{memory-extract-YZI2QZVR.js.map → memory-extract-MGGXIZTE.js.map} +0 -0
- /package/dist/{migrate-v2-V4WN2VVM.js.map → migrate-v2-5VGHWPBW.js.map} +0 -0
- /package/dist/{ntfy-X7EPB3TG.js.map → ntfy-ZY2NPGBA.js.map} +0 -0
- /package/dist/{processes-XWRGOLMT.js.map → processes-CMTMB7LG.js.map} +0 -0
- /package/dist/{program-3CDFUJVE.js.map → program-RFAHI4SS.js.map} +0 -0
- /package/dist/{projects-api-QE6L65SK.js.map → projects-api-E337EQNV.js.map} +0 -0
- /package/dist/{projects-mutate-MY7JTLSZ.js.map → projects-mutate-S5MY7V3V.js.map} +0 -0
- /package/dist/{promote-57YNOVXV.js.map → promote-EDEG2HQR.js.map} +0 -0
- /package/dist/{proposals-TX2HBBYV.js.map → proposals-O4B5LD5T.js.map} +0 -0
- /package/dist/{providers-KO2DODIO.js.map → providers-NRPX2FHP.js.map} +0 -0
- /package/dist/{query-ZT7WXY2F.js.map → query-P5LMGXVS.js.map} +0 -0
- /package/dist/{questions-4B4KSPXG.js.map → questions-2V2VGIT4.js.map} +0 -0
- /package/dist/{recipes-7S4MC5OJ.js.map → recipes-423CIPZ3.js.map} +0 -0
- /package/dist/{registry-722GXALE.js.map → registry-GJLY5J5E.js.map} +0 -0
- /package/dist/{request-planner-PEAYYXAP.js.map → request-planner-JDBXFNQ4.js.map} +0 -0
- /package/dist/{review-candidates-W7NIHNAI.js.map → review-candidates-EBP5CFOB.js.map} +0 -0
- /package/dist/{review-store-B4YE3EFK.js.map → review-store-PW3OBGZQ.js.map} +0 -0
- /package/dist/{rotation-memo-QEO3COFH.js.map → rotation-memo-453FXKHQ.js.map} +0 -0
- /package/dist/{routing-7LCO7UJ7.js.map → routing-Q2EOZ3VW.js.map} +0 -0
- /package/dist/{runner-YRBVNYTY.js.map → runner-56G3N7M4.js.map} +0 -0
- /package/dist/{schedule-tool-ZD3VBUBW.js.map → schedule-tool-N2Z5E6AR.js.map} +0 -0
- /package/dist/{scheduler-GC3FQKXY.js.map → scheduler-WTPERNYJ.js.map} +0 -0
- /package/dist/{seat-HR6QMAR2.js.map → seat-LV3STEXI.js.map} +0 -0
- /package/dist/{select-4XYRIZ5L.js.map → select-5NHY4T5A.js.map} +0 -0
- /package/dist/{shutdown-6GCMKYAD.js.map → shutdown-ZAF7RW25.js.map} +0 -0
- /package/dist/{store-MCOA6N4F.js.map → store-TWQPEM5V.js.map} +0 -0
- /package/dist/{subagent-2SJHSSJS.js.map → subagent-XY5N7TUU.js.map} +0 -0
- /package/dist/{surface-usage-V2BX4SBD.js.map → surface-usage-HVVP22SA.js.map} +0 -0
- /package/dist/{timers-PCB4ZIBD.js.map → timers-KK7GF77Y.js.map} +0 -0
- /package/dist/{tool-PAQ47HV2.js.map → tool-2RKPJWDG.js.map} +0 -0
- /package/dist/{triage-backtest-JNO7RKX7.js.map → triage-backtest-DLKYJSEB.js.map} +0 -0
- /package/dist/{types-H5ENIUIT.js.map → types-DO3KLIBS.js.map} +0 -0
- /package/dist/{types-OIFU3KSQ.js.map → types-S6NHM5C3.js.map} +0 -0
- /package/dist/{whatsapp-state-6D6FHHD2.js.map → whatsapp-state-LB3R32BK.js.map} +0 -0
- /package/dist/{wiki-EREMPSAE.js.map → wiki-XQMJ2FPU.js.map} +0 -0
- /package/dist/{workspace-setup-G6KGWPHY.js.map → workspace-setup-42ARC42I.js.map} +0 -0
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a as u,b as R}from"./chunk-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import{a as u,b as R}from"./chunk-7I7IEX4S.js";R();import{existsSync as y,promises as x}from"fs";import m from"path";import I from"js-yaml";import w from"fast-glob";import{z as e}from"zod";var C=e.object({id:e.string(),priority:e.number().default(0),when:e.object({agentIds:e.array(e.string()).optional(),intentTags:e.array(e.string()).optional(),messageRegex:e.array(e.string()).optional(),requireTags:e.array(e.string()).optional()}).default({}),references:e.array(e.string()).default([]),skills:e.array(e.string()).default([]),maxChars:e.number().int().min(100).max(8e3).optional()}),v=e.object({recipes:e.array(C)}),S=["references/recipes",".references/recipes",".agentx/references/recipes",".agentx/recipes"];async function z(o){let t={recipes:[],sourceById:new Map};for(let r of S){let s=m.resolve(o,r);if(!y(s))continue;let n=await w.glob("**/*.{yaml,yml}",{cwd:s,deep:5});for(let d of n){let a=m.resolve(s,d);try{let f=await x.readFile(a,"utf8"),i=I.load(f),c=v.parse(i);for(let p of c.recipes){if(t.sourceById.has(p.id))throw new Error(`recipe id "${p.id}" duplicated in ${a}`);t.recipes.push(p),t.sourceById.set(p.id,a)}}catch(f){u.warn({file:a,error:f?.message},"recipes: failed to load file")}}}return t}function F(o,t,r){let s=[];for(let i of t.recipes)b(i,o)&&s.push(i);s.sort((i,c)=>c.priority-i.priority||i.id.localeCompare(c.id));let n=new Set,d=[],a=new Set,f=[];for(let i of s){for(let c of i.references){let p=T(c,r);p.length===0&&f.push(c);for(let l of p){if(n.has(l))continue;let g=r.byId.get(l);if(!g){f.push(l);continue}i.when.requireTags?.length&&!i.when.requireTags.every(h=>g.tags.includes(h))||(n.add(l),d.push(g))}}for(let c of i.skills)a.add(c)}return{matched:s,cards:d,requiredSkills:[...a],unresolvedIds:[...new Set(f)]}}function b(o,t){let r=o.when;if(r.agentIds?.length&&!r.agentIds.includes(t.agentId))return!1;if(r.intentTags?.length){let s=t.intentTags??[];if(!r.intentTags.some(d=>s.includes(d)))return!1}return!(r.messageRegex?.length&&!r.messageRegex.some(n=>{try{return new RegExp(n,"i").test(t.message)}catch{return t.message.toLowerCase().includes(n.toLowerCase())}}))}function T(o,t){if(!o.endsWith(".*"))return[o];let r=o.slice(0,-2),s=[];for(let n of t.byId.keys())(n===r||n.startsWith(`${r}.`))&&s.push(n);return s}export{z as a,F as b};
|
|
2
|
+
//# sourceMappingURL=chunk-SIU6STB2.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{a as G,b as _e}from"./chunk-
|
|
1
|
+
import{a as G,b as _e}from"./chunk-7I7IEX4S.js";import{a as N}from"./chunk-QIJLFPWE.js";import{existsSync as oe,readFileSync as de,writeFileSync as ke,mkdirSync as Ae}from"fs";import E from"path";import me from"os";import B from"chalk";import I from"prompts";function S(){if(!oe(ne))return null;try{let a=JSON.parse(de(ne,"utf8"));return a.provider&&a.authType&&a.token&&a.model?a:null}catch{return null}}function we(a){oe(te)||Ae(te,{recursive:!0}),ke(ne,JSON.stringify(a,null,2),"utf8")}function L(a){if(a?.trim()){let p=a.startsWith("sk-ant-oat")?"oauth":"api-key";return{token:a.trim(),authType:p}}let e=process.env.ANTHROPIC_OAUTH_TOKEN;if(e?.trim())return{token:e.trim(),authType:"oauth"};let t=process.env.CLAUDE_CODE_OAUTH_TOKEN;if(t?.trim())return{token:t.trim(),authType:"oauth"};let r=process.env.ANTHROPIC_API_KEY;if(r?.trim())return{token:r.trim(),authType:"api-key"};let n=S();if(n)return{token:n.token,authType:n.authType};let o=me.homedir(),l=[E.join(o,".openclaw","agents","main","agent","auth-profiles.json"),E.join(o,".openclaw","auth-profiles.json"),E.join(o,".openclaw","credentials","oauth.json"),E.join(o,".claude","oauth.json"),E.join(o,".config","claude","oauth.json"),E.join(o,".config","anthropic","oauth.json")];for(let p of l){let m=xe(p);if(m)return{token:m,authType:"oauth"}}return null}function xe(a){if(!oe(a))return"";try{let e=JSON.parse(de(a,"utf8"));if(e.profiles){let t="";for(let[r,n]of Object.entries(e.profiles))if(r.startsWith("anthropic")){if(n.type==="oauth"&&n.access){if(n.expires&&Date.now()>n.expires)continue;return n.access}n.type==="token"&&n.token&&(t=n.token)}if(t)return t}return e.anthropic?.access?e.anthropic.access:e.anthropic?.token?e.anthropic.token:""}catch{return""}}async function be(){let a=process.env.ANTHROPIC_API_KEY;if(a?.trim()){let r=a.slice(0,10)+"..."+a.slice(-4),{useExisting:n}=await I({type:"confirm",name:"useExisting",message:`Use existing ANTHROPIC_API_KEY (env, ${r})?`,initial:!0});if(n)return{token:a.trim(),authType:"api-key"}}let e=S();if(e?.authType==="api-key"&&e.token){let r=e.token.slice(0,10)+"..."+e.token.slice(-4),{useExisting:n}=await I({type:"confirm",name:"useExisting",message:`Use stored API key (${r})?`,initial:!0});if(n)return{token:e.token,authType:"api-key"}}let{apiKey:t}=await I({type:"password",name:"apiKey",message:"Enter Anthropic API key",validate:r=>r.startsWith("sk-ant-api")?r.length<40?"API key seems too short":!0:"API key must start with sk-ant-api"});return t?{token:t,authType:"api-key"}:null}async function ve(){G.break();let a=46,e="Run `claude setup-token` in your terminal.",t="Then paste the generated token below.";console.log(` ${B.cyan("Anthropic setup-token")} ${"\u2500".repeat(a-21-1)}\u256E`),console.log(` ${" ".repeat(a)}\u2502`),console.log(` ${e}${" ".repeat(a-e.length)}\u2502`),console.log(` ${t}${" ".repeat(a-t.length)}\u2502`),console.log(` ${" ".repeat(a)}\u2502`),console.log(` ${"\u2500".repeat(a)}\u256F`),G.break();let{token:r}=await I({type:"password",name:"token",message:"Paste Anthropic setup-token",validate:o=>o.trim()?o.length<40?"Token seems too short":!0:"Token is required"});if(!r)return null;let{tokenName:n}=await I({type:"text",name:"tokenName",message:"Token name (blank = default)"});return{token:r,authType:"oauth"}}async function Re(){for(;;){let{provider:a}=await I({type:"select",name:"provider",message:"Model/auth provider",choices:[{title:"Anthropic",value:"anthropic",description:"setup-token + API key"}]});if(a===void 0)return null;let{method:e}=await I({type:"select",name:"method",message:"Anthropic auth method",choices:[{title:"Anthropic token (paste setup-token)",value:"setup-token",description:"run `claude setup-token` elsewhere, then paste the token here"},{title:"Anthropic API key",value:"api-key"},{title:B.dim("Back"),value:"back"}]});if(e===void 0)return null;if(e!=="back")return e==="api-key"?be():e==="setup-token"?ve():null}}async function Oe(){let a=S(),e=re.map(r=>({title:r.label,value:r.id,description:r.hint+(a?.model===r.id?" \xB7 current":"")}));if(a?.model){let r=re.find(o=>o.id===a.model),n=r?r.label:a.model;e.unshift({title:`Keep current (${n})`,value:a.model,description:"no change"})}let{modelId:t}=await I({type:"select",name:"modelId",message:"Default model",choices:e});return t||null}async function Te(){let a=await Re();if(!a)return null;let e=await Oe();if(!e)return null;let t={provider:a.authType==="oauth"?"claude-code":"claude",authType:a.authType,token:a.token,model:e};return we(t),G.break(),G.success("Configuration saved to ~/.agentx/auth.json"),console.log(` Provider: ${B.bold("anthropic")} (${t.authType})`),console.log(` Model: ${B.bold(re.find(r=>r.id===t.model)?.label||t.model)}`),t}async function Ue(a){return L(a)?!0:(G.warn("No AI credentials configured."),G.break(),await Te()!==null)}var te,ne,re,H=N(()=>{"use strict";_e();te=E.join(me.homedir(),".agentx"),ne=E.join(te,"auth.json");re=[{id:"claude-sonnet-4-20250514",label:"anthropic/claude-sonnet-4",hint:"Claude Sonnet 4 \xB7 ctx 200k \xB7 recommended"},{id:"claude-opus-4-20250514",label:"anthropic/claude-opus-4-5",hint:"Claude Opus 4.5 \xB7 ctx 200k \xB7 reasoning"},{id:"claude-haiku-4-20250514",label:"anthropic/claude-haiku-4",hint:"Claude Haiku 4 \xB7 ctx 200k \xB7 fast"}]});function Pe(a){return(a?Y.filter(t=>a.includes(t.name)):Y).map(({name:t,description:r,input_schema:n})=>({name:t,description:r,input_schema:n}))}function M(){return Pe(["create_files","ask_user"])}function Le(){let a=Y.filter(t=>t.name!=="create_files"&&t.name!=="ask_user");if(a.length===0)return"";let e=["# Available Capabilities","In addition to generating files, you have the following capabilities:",""];for(let t of a)e.push(`## ${t.name}`),e.push(t.description),e.push("");return e.join(`
|
|
2
2
|
`)}var Y,qe,W=N(()=>{"use strict";Y=[{name:"create_files",description:"Create one or more files as output. Use this when you need to generate code, documents, configs, or any file-based output.",input_schema:{type:"object",properties:{files:{type:"array",items:{type:"object",properties:{path:{type:"string",description:"Relative file path from project root (e.g., src/components/Button.tsx)"},content:{type:"string",description:"The full content of the file"},language:{type:"string",description:"Programming language or file type"},description:{type:"string",description:"Brief description of what this file does"}},required:["path","content"]}},summary:{type:"string",description:"Brief summary of all generated files"}},required:["files"]},permission:"file-write"},{name:"ask_user",description:"Ask the user a clarifying question when you need more information to proceed. Use this when the request is ambiguous or you need to confirm important decisions.",input_schema:{type:"object",properties:{question:{type:"string",description:"The question to ask the user"},options:{type:"array",items:{type:"string"},description:"Optional list of choices for the user"}},required:["question"]},permission:"none"},{name:"read_file",description:"Read the contents of a file. Use this to inspect existing code, understand patterns, check implementations, or gather context before generating code.",input_schema:{type:"object",properties:{path:{type:"string",description:"Relative file path from project root"},max_lines:{type:"number",description:"Maximum number of lines to read. Defaults to 500. Use for large files."}},required:["path"]},permission:"file-read"},{name:"search_files",description:"Search for files matching a pattern and optionally search their content with a regex. Use this to find relevant code, understand project structure, or locate specific patterns.",input_schema:{type:"object",properties:{pattern:{type:"string",description:"Glob pattern to match files (e.g., 'src/**/*.ts', '*.json')"},content_regex:{type:"string",description:"Optional regex to search within matched files. Returns matching lines."},max_results:{type:"number",description:"Maximum number of results to return. Default: 50."}},required:["pattern"]},permission:"none"},{name:"list_directory",description:"List files and directories at a given path. Use this to explore project structure.",input_schema:{type:"object",properties:{path:{type:"string",description:"Relative directory path from project root. Defaults to '.' (root)."},recursive:{type:"boolean",description:"List recursively. Default: false."},max_depth:{type:"number",description:"Maximum depth for recursive listing. Default: 3."}}},permission:"none"},{name:"run_command",description:"Execute a shell command. Use this to run build tools, test commands, linters, or inspect the environment. Commands run in the project root directory.",input_schema:{type:"object",properties:{command:{type:"string",description:"The shell command to execute"},timeout:{type:"number",description:"Timeout in milliseconds. Default: 30000 (30 seconds)."}},required:["command"]},permission:"command"},{name:"edit_file",description:"Apply search-and-replace edits to an existing file. Use this for targeted modifications to existing code rather than rewriting entire files.",input_schema:{type:"object",properties:{path:{type:"string",description:"Relative file path from project root"},edits:{type:"array",items:{type:"object",properties:{old_text:{type:"string",description:"The exact text to find in the file"},new_text:{type:"string",description:"The replacement text"}},required:["old_text","new_text"]},description:"List of search/replace pairs to apply in order"}},required:["path","edits"]},permission:"file-write"},{name:"spawn_agent",description:"Spawn a sub-agent to handle a task in the background. The sub-agent runs in its own session and returns results. Use this for parallel research, long-running tasks, or delegating work to a specialized agent.",input_schema:{type:"object",properties:{agent_id:{type:"string",description:"The ID of the agent to spawn (must be a registered agent)"},prompt:{type:"string",description:"The task description for the sub-agent"},timeout_seconds:{type:"number",description:"Maximum time to wait for completion in seconds. Default: 300 (5 minutes)."}},required:["agent_id","prompt"]},permission:"none"}];qe=Y.map(a=>a.name)});function X(a){return!a||a.length<Se?a:[{type:"text",text:a,cache_control:{type:"ephemeral"}}]}var V,z,Se,q,se=N(()=>{"use strict";H();W();V="claude-sonnet-4-20250514",z=8192,Se=4*1024;q=class{name="claude";apiKey;authType="api-key";constructor(e){if(this.apiKey=e||process.env.ANTHROPIC_API_KEY||"",!this.apiKey){let t=L();t&&(this.apiKey=t.token,this.authType=t.authType)}if(!this.apiKey)throw new Error("Anthropic API key required. Run `agentx model` to configure, set ANTHROPIC_API_KEY, or pass --api-key.")}async generate(e,t){let r=t?.model||V,n=t?.maxTokens||z,o=e.find(c=>c.role==="system"),l=e.filter(c=>c.role!=="system").map(c=>({role:c.role,content:c.content})),p={model:r,max_tokens:n,messages:l,tools:M()};o&&(p.system=X(o.content)),t?.temperature!==void 0&&(p.temperature=t.temperature);let m=await this.callApi(p,t);return this.parseResponse(m)}async generateRaw(e,t,r,n){let o=n?.model||V,l=n?.maxTokens||z,p={model:o,max_tokens:l,system:X(t),messages:e,tools:r};n?.temperature!==void 0&&(p.temperature=n.temperature),n?.toolChoice&&(p.tool_choice={type:"tool",name:n.toolChoice.name});let m=await this.callApi(p,n);return{content:m.content.map(g=>g.type==="text"?{type:"text",text:g.text||""}:g.type==="tool_use"?{type:"tool_use",id:g.id||"",name:g.name||"",input:g.input||{}}:{type:"text",text:""}),stop_reason:m.stop_reason,usage:m.usage}}async*stream(e,t){let r=t?.model||V,n=t?.maxTokens||z,o=e.find(f=>f.role==="system"),l=e.filter(f=>f.role!=="system").map(f=>({role:f.role,content:f.content})),p={model:r,max_tokens:n,messages:l,stream:!0,tools:M()};o&&(p.system=X(o.content));let m=this.buildHeaders(),c=await fetch("https://api.anthropic.com/v1/messages",{method:"POST",headers:m,body:JSON.stringify(p),signal:t?.abortSignal});if(!c.ok){let f=await c.text();yield{type:"error",error:`Anthropic API error (${c.status}): ${f}`};return}let g=c.body?.getReader();if(!g){yield{type:"error",error:"No response body"};return}let _=new TextDecoder,d="",h=[],w="",A,b=0,s=null,y=f=>{let R=(f||"").trim();if(!R||R.includes("```"))return;let T=R.replace(/\r\n/g,`
|
|
3
3
|
`).split(`
|
|
4
4
|
`),x=T.slice(Math.max(0,T.length-20)),u=x.join(`
|
|
@@ -51,4 +51,4 @@ Options: ${y.options.join(", ")}`))}catch{}}yield{type:"done",result:{content:_,
|
|
|
51
51
|
`:"")+c.summary)):m.function.name==="ask_user"&&typeof c.question=="string"&&(l=c.question,Array.isArray(c.options)&&c.options.length&&(l+=`
|
|
52
52
|
Options: ${c.options.join(", ")}`))}let p=e.usage;return{content:o,files:n,followUp:l,tokensUsed:p?(p.prompt_tokens||0)+(p.completion_tokens||0):void 0}}parseRawResponse(e){let t=e.choices?.[0],r=t?.message,n=[];r?.reasoning_content&&n.push({type:"reasoning",text:r.reasoning_content}),r?.content&&n.push({type:"text",text:r.content});for(let p of r?.tool_calls||[]){let m={};try{m=p.function.arguments?JSON.parse(p.function.arguments):{}}catch{}n.push({type:"tool_use",id:p.id,name:p.function.name,input:m})}let o="end_turn";switch(t?.finish_reason){case"tool_calls":case"function_call":o="tool_use";break;case"length":o="max_tokens";break;case"stop":case null:case void 0:default:o="end_turn"}let l=e.usage;return{content:n,stop_reason:o,usage:{input_tokens:l?.prompt_tokens||0,output_tokens:l?.completion_tokens||0}}}legacyToolsAsOpenAI(){return M().map(e=>({type:"function",function:{name:e.name,description:e.description,parameters:e.input_schema}}))}}});import{readFileSync as Ee}from"fs";function Ie(){let a=process.env.AGENTX_DEMO_SCRIPT;if(!a)return{steps:[],fallback:ue};try{let e=JSON.parse(Ee(a,"utf-8"));return{steps:Array.isArray(e.steps)?e.steps:[],fallback:e.fallback||ue}}catch(e){return{steps:[],fallback:{reply:`Demo script unreadable (${e.message}) \u2014 check AGENTX_DEMO_SCRIPT.`}}}}function U(a){for(let e=a.length-1;e>=0;e--){if(a[e].role!=="user")continue;let t=a[e].content;if(typeof t=="string")return t;if(Array.isArray(t))return t.map(r=>r?.type==="text"?r.text:r?.type==="tool_result"?r.content:"").filter(Boolean).join(`
|
|
53
53
|
`)}return""}function C(a,e){return new Promise((t,r)=>{if(e?.aborted)return r(new Error("aborted"));let n=setTimeout(t,a);e?.addEventListener("abort",()=>{clearTimeout(n),r(new Error("aborted"))},{once:!0})})}function Q(a){return a.match(/\S+\s*/g)||[a]}var ue,F,Z,ge=N(()=>{"use strict";ue={reply:"This is demo mode \u2014 I answer from a script, not a live model. Run `agentx setup` to connect a real provider."};F=a=>Math.max(1,Math.round(a.length/4)),Z=class{name="demo";script;constructor(){this.script=Ie()}pick(e){let t,r=-1;for(let o of this.script.steps)try{let l=new RegExp(o.match,"ig"),p,m=-1;for(;(p=l.exec(e))!==null;)m=p.index,p.index===l.lastIndex&&l.lastIndex++;m>r&&(r=m,t=o)}catch{}if(t)return{reply:t.reply,thinking:t.thinking,delayMs:t.delayMs??700,chunkMs:t.chunkMs??35};let n=this.script.fallback||ue;return{reply:n.reply,thinking:n.thinking,delayMs:n.delayMs??700,chunkMs:n.chunkMs??35}}async generate(e,t){let r=this.pick(U(e));return await C(r.delayMs,t?.abortSignal),{content:r.reply,files:[],tokensUsed:F(r.reply)}}async*stream(e,t){let r=this.pick(U(e));if(await C(r.delayMs,t?.abortSignal),r.thinking)for(let n of Q(r.thinking))yield{type:"thinking_delta",text:n},await C(r.chunkMs,t?.abortSignal);for(let n of Q(r.reply))yield{type:"text_delta",text:n},await C(r.chunkMs,t?.abortSignal);yield{type:"done",result:{content:r.reply,files:[],tokensUsed:F(r.reply)}}}async generateRaw(e,t,r,n){let o=this.pick(U(e));return await C(o.delayMs,n?.abortSignal),{content:[{type:"text",text:o.reply}],stop_reason:"end_turn",usage:{input_tokens:F(U(e)),output_tokens:F(o.reply)}}}async*generateRawStream(e,t,r,n){let o=this.pick(U(e));if(await C(o.delayMs,n?.abortSignal),o.thinking)for(let l of Q(o.thinking))yield{type:"thinking_delta",text:l},await C(o.chunkMs,n?.abortSignal);for(let l of Q(o.reply))yield{type:"text_delta",text:l},await C(o.chunkMs,n?.abortSignal);yield{type:"raw_result",result:{content:[{type:"text",text:o.reply}],stop_reason:"end_turn",usage:{input_tokens:F(U(e)),output_tokens:F(o.reply)}}}}}});function it(a="claude-code",e,t={}){let r=a;if(a==="claude-code"&&!e){let n=S();n&&(r=n.provider)}switch(r){case"claude-code":return new J;case"claude":return new q(e);case"openai":return new D(e,void 0,{thinking:t.thinking});case"deepseek":return new D(e||process.env[he.envKey]||process.env.OPENAI_API_KEY,he.baseUrl,{thinking:t.thinking});case"demo":return new Z;case"ollama":throw new Error("Ollama provider coming soon. Workaround: set provider to 'openai' with OPENAI_BASE_URL=http://localhost:11434/v1 (Ollama exposes an OpenAI-compatible endpoint). Or contribute at github.com/anis-marrouchi/agentx");default:throw new Error(`Unknown provider: ${r}. Supported: claude-code, claude, openai, deepseek`)}}var he,Me=N(()=>{se();ae();pe();ge();H();se();ae();pe();he={baseUrl:"https://api.deepseek.com/v1",envKey:"DEEPSEEK_API_KEY"}});export{S as a,we as b,L as c,Te as d,Ue as e,H as f,Pe as g,M as h,Le as i,qe as j,W as k,q as l,J as m,D as n,it as o,Me as p};
|
|
54
|
-
//# sourceMappingURL=chunk-
|
|
54
|
+
//# sourceMappingURL=chunk-SZJMS7K4.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a as c,b as d,f as u}from"./chunk-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import{a as c,b as d,f as u}from"./chunk-72SZI2UW.js";u();var f="wiki-rerank",k=30,p=900;function b(t){let r=t.excerptChars??p;return{query:t.query,candidates:t.candidates.map(e=>({id:e.id,title:e.title,tags:e.tags?.length?e.tags.join(", "):null,excerpt:l(e.excerpt,r)}))}}function w(t){let r={};for(let e of t)r[e.id]=e.title;return{best:d(r,"Which candidate answers the query?"),answerable:c("Do any of the candidates answer the query?")}}function x(t,r){let e=t.best,s={};for(let n of r)s[n.id]=e.probabilities[n.id]??0;let o=new Map(r.map((n,a)=>[n.id,a]));return{ranked:[...r.map(n=>n.id)].sort((n,a)=>{let i=s[a]-s[n];return i!==0?i:(o.get(n)??0)-(o.get(a)??0)}),scores:s,answerable:t.answerable.noul,confidence:e.confidence}}function l(t,r){let e=String(t??"").replace(/\s+/g," ").trim();return e.length>r?e.slice(0,r):e}export{f as a,k as b,b as c,w as d,x as e};
|
|
2
|
+
//# sourceMappingURL=chunk-TFVUOC2C.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{a as u,b as f}from"./chunk-
|
|
1
|
+
import{a as u,b as f}from"./chunk-HRBKSZ34.js";var d=new Set(["cron","a2a","workflow","selftest"]),g=[[/^User:\s*You are\s/i,"role brief"],[/^User:\s*(Run|Execute)\s/i,"run instruction"],[/^User:\s*\[MISSED RUN/i,"missed cron run"],[/^User:\s*(\[[^\]]{0,40}\]:?\s*)?\[Recent group conversation\]/i,"group chat dump"]];function l(e){if(e.responseLength<=50)return{capture:!1,reason:"response too short"};let r=(e.channel??"").toLowerCase().split("@")[0];if(d.has(r))return{capture:!1,reason:`machine channel: ${r}`};let n=e.content.slice(0,400);for(let[o,c]of g)if(o.test(n))return{capture:!1,reason:c};return{capture:!0}}var y="claude-haiku-4-20250514",w=`You are a memory extraction system for an AI agent. Given a conversation exchange, extract facts worth remembering for future conversations across different chat sessions.
|
|
2
2
|
|
|
3
3
|
Extract ONLY facts that would help the agent in FUTURE, DIFFERENT conversations:
|
|
4
4
|
- User preferences and instructions ("never do X", "always use Y")
|
|
@@ -17,7 +17,7 @@ SKIP:
|
|
|
17
17
|
For each fact, output a JSON array:
|
|
18
18
|
[{"category":"fact|preference|commitment|task-state","content":"concise fact, 1-2 sentences","keywords":["keyword1","keyword2"]}]
|
|
19
19
|
|
|
20
|
-
If nothing worth remembering, output: []`;async function I(e,s,r,n,o){if(s.length<20&&r.length<50||!l({channel:n.channel,content:`User: ${s}`,responseLength:r.length}).capture)return;let{createProvider:h}=await import("./providers-
|
|
20
|
+
If nothing worth remembering, output: []`;async function I(e,s,r,n,o){if(s.length<20&&r.length<50||!l({channel:n.channel,content:`User: ${s}`,responseLength:r.length}).capture)return;let{createProvider:h}=await import("./providers-NRPX2FHP.js"),i=(await h("claude").generate([{role:"system",content:w},{role:"user",content:`${n.sender} (via ${n.channel}): ${s}
|
|
21
21
|
|
|
22
22
|
Agent: ${r}`}],{model:y,maxTokens:512})).content.trim().match(/\[[\s\S]*\]/);if(!i)return;let a=JSON.parse(i[0]);if(!Array.isArray(a)||a.length===0)return;let m=new Date().toISOString().slice(0,10),p=u(n.channel);for(let t of a)typeof t?.content=="string"&&(t.category==="secret"||f(t.content)||o.hasSimilar(e,t.content)||o.addMemory(e,{agentId:e,category:t.category,content:t.content,keywords:t.keywords||[],source:{...n,date:m,trust:p},expiresAt:t.category==="task-state"?new Date(Date.now()+7*24*60*60*1e3).toISOString():void 0}));Math.random()<.02&&o.prune(e)}export{l as a,I as b};
|
|
23
|
-
//# sourceMappingURL=chunk-
|
|
23
|
+
//# sourceMappingURL=chunk-WKTFP3SK.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{a as i,b as c}from"./chunk-
|
|
1
|
+
import{a as i,b as c}from"./chunk-FCPTN6NF.js";var m="[Institutional Wiki";function u(e){return[...new Set(e)].slice(0,20).map(n=>n.slice(0,80))}function p(e,n){let t=e??"";return{memory:u((n.memory??[]).filter(r=>r.content&&t.includes(r.content)).map(r=>r.id)),procedures:u((n.procedures??[]).filter(r=>t.includes(`[Known procedure: ${r.title}]`)).map(r=>r.id)),wiki:!!n.wikiContext&&t.includes(m)}}function o(e){return{memory:u(e.memory),procedures:u(e.procedures),wiki:e.wiki===!0}}c();function h(e,n,t=i()){return e.prepare(`
|
|
2
2
|
INSERT INTO task_traces (
|
|
3
3
|
task_id, agent_id, channel, chat_id, workflow_run_id, workflow_id,
|
|
4
4
|
workflow_node_id, intent_event_id, intent_decided_by, resume_session_id,
|
|
@@ -58,4 +58,4 @@ import{a as i,b as c}from"./chunk-ZTEU5JVQ.js";var m="[Institutional Wiki";funct
|
|
|
58
58
|
ORDER BY started_at DESC
|
|
59
59
|
LIMIT ?
|
|
60
60
|
`;return r.push(s),e.prepare(a).all(...r).map(d)}export{p as a,h as b,T as c,E as d,g as e,b as f,R as g,C as h,S as i,A as j,D as k};
|
|
61
|
-
//# sourceMappingURL=chunk-
|
|
61
|
+
//# sourceMappingURL=chunk-WP6KLXTP.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{b as Q,c as Z,d as ee,e as F,f as I,g as j,h as W}from"./chunk-
|
|
1
|
+
import{b as Q,c as Z,d as ee,e as F,f as I,g as j,h as W}from"./chunk-4BNQSUWV.js";import{a as G,b as V}from"./chunk-WW6KNRIR.js";import{a as X}from"./chunk-ZN7637EF.js";import{j as O,l as Y,m as B,p as M}from"./chunk-XSFXAJDA.js";import{existsSync as _,readFileSync as le,writeFileSync as de,appendFileSync as $e,mkdirSync as Ae}from"fs";import{dirname as Se,resolve as R}from"path";import{fileURLToPath as Ie}from"url";import{hostname as Ce}from"os";import{spawn as Ee}from"child_process";M();import{existsSync as ne,readFileSync as te,writeFileSync as L,copyFileSync as be}from"fs";import{resolve as ae}from"path";function re(e,t={}){let n=t.configPath||ae(process.cwd(),"agentx.json");if(!ne(n))throw new Error(`agentx.json not found at ${n}`);let a=JSON.parse(te(n,"utf-8")),r=e(a),i=typeof r=="string"?{summary:r}:r,l=JSON.stringify(a,null,2)+`
|
|
2
2
|
`,p=n+".tmp";L(p,l,"utf-8");try{JSON.parse(te(p,"utf-8"))}catch(c){throw new Error(`config did not round-trip cleanly: ${c.message}`)}let s;return t.skipBackup||(s=`${n}.bak.${Date.now()}`,be(n,s)),L(n,l,"utf-8"),t.skipReload||ye().catch(()=>{}),{summary:i.summary,payload:i.payload,backupPath:s}}function ie(e,t={}){let n=t.configPath||ae(process.cwd(),"agentx.json");if(ne(n)&&!t.overwrite)throw new Error(`agentx.json already exists at ${n}. Pass overwrite=true to replace it.`);return L(n,JSON.stringify(e,null,2)+`
|
|
3
3
|
`,"utf-8"),{file:n}}async function ye(){try{let t=B().dashboard.daemonUrl?.replace(/\/+$/,"")||"http://127.0.0.1:18800";await fetch(`${t}/reload`,{method:"POST"}).catch(()=>null)}catch{}}function se(e,t){let n=e.configExists?e.agentCount===0?"Add your first agent":"Add another agent":"Set up your team",a=`<header class="ax-topbar">
|
|
4
4
|
<div class="ax-topbar__left">
|
|
@@ -737,4 +737,4 @@ tr:hover td { background: var(--bg-hover); }
|
|
|
737
737
|
<div class="meta-line">${P((c.meta.tags||[]).slice(0,6),t)}</div>
|
|
738
738
|
<h3><a href="${p}/article/${encodeURIComponent(c.path)}">${o(c.meta.title)}</a></h3>
|
|
739
739
|
</div>`;return $(`${t} \xB7 ${n}`,C(r),s)}function U(e,t,n){let a=e.rebuildIndex(),r=q(a.articles.map(l=>({title:l.title,path:l.path,tags:l.tags}))),i='<div class="nav-section">';i+=`<div class="nav-section-title">${o(t)}</div>`,i+=`<a class="nav-item${n?"":" active"}" href="/">Home</a>`,i+='<a class="nav-item" href="/lint">Health check</a>',i+="</div>";for(let[l,p]of r){i+='<div class="nav-section">',i+=`<div class="nav-section-title">${K(l)}</div>`;for(let s of p){let c=s.path===n;i+=`<a class="nav-item${c?" active":""}" href="/article/${encodeURIComponent(s.path)}">${o(s.title)}</a>`}i+="</div>"}return i}function et(e){let{wikiDir:t,agentFilter:n,peerUrls:a=[],mode:r="graph",pathPrefix:i=""}=e,l=i.replace(/\/+$/,""),p=new X(t,void 0,r),s=a.length>0?new D(a):null;return async(c,g)=>{let x=new URL(c.url||"/","http://localhost"),d=decodeURIComponent(x.pathname),h=l&&d.startsWith(l)?d.slice(l.length)||"/":d,f=null,T=200;try{if(h.startsWith("/remote/")&&s){let y=h.slice(8).split("/article/");if(y.length===2){let[b,v]=y,m=b.indexOf("/"),k=decodeURIComponent(b.slice(0,m)),u=b.slice(m+1),w=await s.getRemoteArticle(k,u,v);if(w){let z=await s.getRemoteAgents(),N=[...p.summary(),...z.map(S=>({...S,agentId:`${S.agentId} @${S.nodeId}`}))],A=`<div class="breadcrumb"><a href="/">Hub</a> / <span class="tag">remote</span> ${o(u)} @ ${o(k)}</div>`;A+=`<h1>${o(w.meta.title)}</h1>`,A+='<dl class="meta">',A+=`<dt>Tags</dt><dd>${(w.meta.tags||[]).map(S=>`<span class="tag">${S}</span>`).join(" ")}</dd>`,A+=`<dt>Owner</dt><dd>${o(w.meta.owner)}</dd>`,A+=`<dt>Source</dt><dd><span class="tag">remote</span> ${o(k)}</dd>`,A+=`<dt>Updated</dt><dd>${w.meta.lastUpdated}</dd>`,A+="</dl>";let E=new Map;A+=H(w.content,E),f=$(w.meta.title,C(N),A)}}}if(!f&&n){let y=p.getAgentWiki(n);if(h==="/"||h===""){let b=y.rebuildIndex(),v=p.getAgentEntries(n),m=`<h1>${o(n)}</h1>`;if(m+='<div class="stats">',m+=`<div class="stat-card"><div class="number">${b.articles.length}</div><div class="label">Articles</div></div>`,m+=`<div class="stat-card"><div class="number">${v.length}</div><div class="label">Entries</div></div>`,m+="</div>",b.articles.length>0){m+="<h2>Articles</h2><table><tr><th>Title</th><th>Type</th><th>Updated</th></tr>";for(let k of b.articles)m+=`<tr><td><a href="/article/${encodeURIComponent(k.path)}">${o(k.title)}</a></td><td><span class="tag">${(k.tags||[]).slice(0,3).join(", ")}</span></td><td>${k.lastUpdated||""}</td></tr>`;m+="</table>"}f=$(n,U(y,n),m)}else if(h.startsWith("/article/")){let b=h.slice(9),v=y.readArticle(b);if(v){let m=y.rebuildIndex(),k=new Map;for(let w of m.articles)k.set(w.title,w.path);let u=`<h1>${o(v.meta.title)}</h1>`;u+='<dl class="meta">',u+=`<dt>Tags</dt><dd>${(v.meta.tags||[]).map(w=>`<span class="tag">${w}</span>`).join(" ")}</dd>`,u+=`<dt>Updated</dt><dd>${v.meta.lastUpdated}</dd>`,v.meta.sources?.length&&(u+=`<dt>Sources</dt><dd>${v.meta.sources.length} entries</dd>`),u+="</dl>",u+=H(v.content,k),f=$(v.meta.title,U(y,n,b),u)}}else if(h==="/lint"){let b=y.lint(),v="<h1>Health Check</h1>";if(b.length===0)v+='<p style="color:green;">No issues.</p>';else{v+="<table><tr><th>Type</th><th>Article</th><th>Issue</th></tr>";for(let m of b)v+=`<tr><td><span class="tag">${m.type}</span></td><td>${o(m.article)}</td><td>${o(m.message)}</td></tr>`;v+="</table>"}f=$("Health Check",U(y,n),v)}else if(h==="/search"){let b=x.searchParams.get("q")||"",v=await y.findRelevantReranked(b,void 0,20),m=`<h1>Search: "${o(b)}"</h1>`;for(let k of v)m+=`<div class="entry-card"><h3><a href="/article/${encodeURIComponent(k.path)}">${o(k.meta.title)}</a></h3><p>${o(k.content.slice(0,200))}...</p></div>`;v.length===0&&(m+="<p>No results.</p>"),f=$(`Search: ${b}`,U(y,n),m)}else if(h.startsWith("/tag/")){let b=decodeURIComponent(h.slice(5)),v=y.findByTags([b],void 0,100),m=`<h1>Tag: <a class="tag" href="#">${o(b)}</a></h1>`;m+=`<p>${v.length} article${v.length===1?"":"s"} tagged <code>${o(b)}</code></p>`;for(let k of v)m+=`<div class="entry-card"><h3><a href="/article/${encodeURIComponent(k.path)}">${o(k.meta.title)}</a></h3><div class="meta-line">${P((k.meta.tags||[]).slice(0,6))}</div></div>`;v.length===0&&(m+="<p>No articles with this tag.</p>"),f=$(`Tag: ${b}`,U(y,n),m)}}else{let y=s?await s.getRemoteAgents():[],b=p.summary(),v=new Map(b.map(u=>[u.agentId,u])),m=[],k=new Set;for(let u of b){let w=y.find(z=>z.agentId===u.agentId);w&&w.totalArticles>u.totalArticles?m.push({...w,totalEntries:Math.max(u.totalEntries,w.totalEntries),unabsorbed:Math.max(u.unabsorbed,w.unabsorbed)}):m.push(u),k.add(u.agentId)}for(let u of y)k.has(u.agentId)||(m.push(u),k.add(u.agentId));if(h==="/"||h==="")f=Ke(p,m,y);else if(h==="/entries")f=Ge(p,m);else if(h==="/search")f=Ve(p,x.searchParams.get("q")||"",m);else if(h.startsWith("/tag/"))f=Qe(p,decodeURIComponent(h.slice(5)),m);else if(h.match(/^\/agent\/[^/]+\/tag\/.+/)){let u=h.match(/^\/agent\/([^/]+)\/tag\/(.+)$/);f=Ze(p,decodeURIComponent(u[1]),decodeURIComponent(u[2]),m)}else if(h.startsWith("/agent/")){let u=h.slice(7),w=u.indexOf("/article/");if(w===-1)f=Ye(p,u,m);else{let z=u.slice(0,w),N=u.slice(w+9);if(f=Xe(p,z,N,m),!f&&s){let A=y.find(E=>E.agentId===z);if(A){let E=await s.getRemoteArticle(A.peerUrl,z,N);if(E){let S=`<div class="breadcrumb"><a href="/">Hub</a> / <span class="tag">remote @ ${o(A.nodeId)}</span> / ${o(z)}</div>`;S+=`<h1>${o(E.meta.title)}</h1>`,S+='<dl class="meta">',S+=`<dt>Tags</dt><dd>${(E.meta.tags||[]).map(xe=>`<span class="tag">${xe}</span>`).join(" ")}</dd>`,S+=`<dt>Source</dt><dd><span class="tag">remote</span> ${o(A.nodeId)}</dd>`,S+=`<dt>Updated</dt><dd>${E.meta.lastUpdated}</dd>`,S+="</dl>",S+=H(E.content,new Map),f=$(E.meta.title,C(m),S)}}}}}}if(!f){T=404;let y=n?U(p.getAgentWiki(n),n):C(p.summary());f=$("Not Found",y,"<h1>Page not found</h1>")}}catch(y){T=500,f=$("Error","",`<h1>Error</h1><pre>${o(y.message)}</pre>`)}g.writeHead(T,{"Content-Type":"text/html; charset=utf-8"}),g.end(l?tt(f,l):f)}}function tt(e,t){e=e.replace(/(\s(?:href|action)=")\/(?!\/)/g,`$1${t}/`),e=e.replace(new RegExp(`(${t})${t}/`,"g"),`${t}/`);let n=`<a href="/admin" style="position:fixed;top:10px;right:14px;z-index:9999;padding:5px 11px;background:rgba(0,0,0,0.55);color:#fff;font:12px/1.2 'IBM Plex Sans',system-ui,sans-serif;text-decoration:none;border-radius:6px;border:1px solid rgba(255,255,255,0.18);backdrop-filter:blur(6px)">\u2190 Dashboard</a>`;return e=e.replace(/<body([^>]*)>/,`<body$1>${n}`),e}function Wt(e,t=4200,n,a=[],r="graph"){let i=et({wikiDir:e,agentFilter:n,peerUrls:a,mode:r});Fe((p,s)=>{i(p,s)}).listen(t)}import{existsSync as nt,readFileSync as at}from"fs";M();function Ht(e){let t=G(e),n={};if(nt(t))try{n=Y(JSON.parse(at(t,"utf-8")))}catch{n={}}let a=O.safeParse(n?.approvals);return a.success?a.data:O.parse(void 0)}function Ot(e){let t=e.indexOf(":");return t<=0||t===e.length-1?null:{channel:e.slice(0,t).trim(),chatId:e.slice(t+1).trim()}}async function Mt(e,t={}){return V(n=>{let a=n.approvals??={};e.defaultExpiryDays!==void 0&&(a.defaultExpiryDays=e.defaultExpiryDays),e.maxExpiryDays!==void 0&&(a.maxExpiryDays=e.maxExpiryDays),e.laterHours!==void 0&&(a.laterHours=e.laterHours),e.notifyAgent!==void 0&&(a.notifyAgent=e.notifyAgent);let r=a.digest??={};e.digestEnabled!==void 0&&(r.enabled=e.digestEnabled),e.digestTime!==void 0&&(r.time=e.digestTime),e.digestTimezone===null?delete r.timezone:e.digestTimezone!==void 0&&(r.timezone=e.digestTimezone),e.destination===null?delete r.destination:e.destination!==void 0&&(r.destination=e.destination);let i=a.defaultExpiryDays??3,l=a.maxExpiryDays??30;if(i>l)throw new Error(`defaultExpiryDays (${i}) can't be more than maxExpiryDays (${l})`)},{configPath:t.configPath,reload:t.reload})}var rt="https://ntfy.sh";function jt(e){return{enabled:!!e?.enabled,server:e?.server||rt,topicSet:!!e?.topic,tokenSet:!!e?.token}}function Lt(e,t){let n={...e??{}};if("enabled"in t&&(n.enabled=!!t.enabled),"server"in t){let a=String(t.server).trim().replace(/\/+$/,"");if(!/^https?:\/\/\S+$/.test(a))throw new Error("ntfy server must be an http(s) URL");n.server=a}if("topic"in t){let a=String(t.topic).trim();if(!a)throw new Error("ntfy topic cannot be empty");n.topic=a}if("token"in t){let a=String(t.token??"").trim();a?n.token=a:delete n.token}if(n.enabled&&!n.topic)throw new Error("set a topic before enabling ntfy");return n}export{re as a,ce as b,bt as c,yt as d,kt as e,he as f,It as g,Ct as h,Ht as i,Ot as j,Mt as k,jt as l,Lt as m,et as n,Wt as o};
|
|
740
|
-
//# sourceMappingURL=chunk-
|
|
740
|
+
//# sourceMappingURL=chunk-WUDXUY7H.js.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import{k as m,l as $,p as x}from"./chunk-
|
|
1
|
+
import{k as m,l as $,p as x}from"./chunk-XSFXAJDA.js";x();import{readFileSync as S,writeFileSync as P,existsSync as b}from"fs";import{resolve as f}from"path";function w(r){if(r)return f(r);let e=[f(process.cwd(),"agentx.json"),f(process.cwd(),".agentx/config.json")];for(let n of e)if(b(n))return n;return e[0]}function v(r){return JSON.parse(JSON.stringify(r))}async function O(r){try{let e=await fetch(`${r.replace(/\/$/,"")}/reload`,{method:"POST",signal:AbortSignal.timeout(3e3)});return e.ok?{ok:!0}:{ok:!1,reason:`HTTP ${e.status}`}}catch(e){return{ok:!1,reason:e?.cause?.code||e?.message||"unreachable"}}}async function J(r,e={}){let{validate:n=!0,dryRun:t=!1,reload:s=!0,configPath:u,daemonUrl:c}=e,o=w(u);if(!b(o))return{success:!1,path:o,error:`Config not found at ${o}. Run \`agentx init\` first.`};let d;try{d=S(o,"utf-8")}catch(a){return{success:!1,path:o,error:`Cannot read ${o}: ${a.message}`}}let g;try{g=JSON.parse(d)}catch(a){return{success:!1,path:o,error:`Invalid JSON in ${o}: ${a.message}`}}let i=v(g);try{await r(i)}catch(a){return{success:!1,path:o,error:`Mutator threw: ${a.message}`}}if(n){let a=$(i),l=m.safeParse(a);if(!l.success){let k=l.error.issues.map(y=>` ${y.path.join(".")||"<root>"}: ${y.message}`).join(`
|
|
2
2
|
`);return{success:!1,path:o,error:`Validation failed:
|
|
3
3
|
${k}`,after:i}}}if(t)return{success:!0,path:o,after:i,dryRun:!0};try{P(o,JSON.stringify(i,null,2)+`
|
|
4
4
|
`)}catch(a){return{success:!1,path:o,error:`Write failed: ${a.message}`,after:i}}let p=!1,h;if(s){let a=c||R(i),l=await O(a);l.ok?p=!0:h=l.reason}return{success:!0,path:o,after:i,reloaded:p,reloadSkipped:h}}function R(r){let e=r?.node?.bind;if(!e)return"http://127.0.0.1:18800";let[n,t]=e.split(":");return`http://${n==="0.0.0.0"||n==="::"?"127.0.0.1":n}:${t}`}function N(r,e,n){let t=e.split("."),s=r;for(let u=0;u<t.length-1;u++){let c=t[u];(s[c]===void 0||s[c]===null)&&(s[c]={}),s=s[c]}s[t[t.length-1]]=n}function j(r,e){let n=e.split("."),t=r;for(let s of n){if(t==null)return;t=t[s]}return t}function A(r,e){let n=e.split("."),t=r;for(let s=0;s<n.length-1;s++){if(t==null)return;t=t[n[s]]}t!=null&&delete t[n[n.length-1]]}export{w as a,J as b,N as c,j as d,A as e};
|
|
5
|
-
//# sourceMappingURL=chunk-
|
|
5
|
+
//# sourceMappingURL=chunk-WW6KNRIR.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{k as p}from"./chunk-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import{k as p}from"./chunk-JY7POTMB.js";import{b as i,c as u,d as l,e as c}from"./chunk-WW6KNRIR.js";import d from"cronstrue";var f=Intl.DateTimeFormat().resolvedOptions().timeZone,m=600,E='Try: "every morning at 9", "weekdays at 6pm", "every 15 minutes", "every monday at 10am", "1st of every month at noon", "daily at 9:30am", "every hour"',g=/^[A-Za-z0-9][A-Za-z0-9_-]{0,63}$/;function w(e){return g.test(e)}function x(e){try{return new Intl.DateTimeFormat("en-US",{timeZone:e}),!0}catch{return!1}}function $(e){return e?e.split(",").map(r=>r.trim().toLowerCase()).filter(r=>r==="log"||r==="notify"||r==="disable"):["log"]}function S(e){let r=[...e.onError??["log"]];e.notify&&!r.includes("notify")&&r.push("notify");let t={enabled:e.enabled??!0,schedule:e.parsed.cron,timezone:e.timezone||f,agent:e.agent,prompt:e.prompt,timeout:e.timeout??m,onError:r};return e.model&&(t.model=e.model),e.notify&&(t.notify=e.notify),e.createdBy&&(t.createdBy=e.createdBy),e.approval&&(t.approval=e.approval),t}function P(e){try{return d.toString(e,{use24HourTimeFormat:!1})}catch{return e}}function T(e,r,t=new Date){try{return p(e,t,r)}catch{return null}}function A(e,r){if(!e)return"unknown (no match within a year)";try{return`${new Intl.DateTimeFormat("en-GB",{timeZone:r,weekday:"short",day:"2-digit",month:"short",year:"numeric",hour:"2-digit",minute:"2-digit",hour12:!1}).format(e)} (${r})`}catch{return e.toISOString()}}function h(e){return e?.approval?.action==="create"}async function D(e,r={}){let t="",o=await i(n=>{let a=l(n,`crons.${e}`);if(!a)throw new Error(`cron "${e}" not found`);let s=a.approval;if(!s)throw new Error(`cron "${e}" has no pending request`);s.action==="create"?(delete a.approval,a.enabled=!0,t=`${e} approved and enabled (requested by ${s.requestedBy})`):(c(n,`crons.${e}`),t=`${e} deletion approved; job removed (requested by ${s.requestedBy})`)},{configPath:r.configPath,reload:r.reload});return o.success?{success:!0,message:t,result:o}:{success:!1,message:o.error||"failed",result:o}}async function I(e,r={}){let t="",o=await i(n=>{let a=l(n,`crons.${e}`);if(!a)throw new Error(`cron "${e}" not found`);let s=a.approval;if(!s)throw new Error(`cron "${e}" has no pending request`);s.action==="create"?(c(n,`crons.${e}`),t=`${e} rejected; pending job removed`):(delete a.approval,t=`${e} deletion rejected; job kept`)},{configPath:r.configPath,reload:r.reload});return o.success?{success:!0,message:t,result:o}:{success:!1,message:o.error||"failed",result:o}}async function O(e,r,t={}){return i(o=>{let n=l(o,`crons.${e}`);if(!n)throw new Error(`cron "${e}" not found`);if(r&&h(n))throw new Error(`cron "${e}" is awaiting approval; run \`agentx schedule approve ${e}\``);u(o,`crons.${e}.enabled`,r)},{configPath:t.configPath,reload:t.reload})}export{f as a,E as b,w as c,x as d,$ as e,S as f,P as g,T as h,A as i,h as j,D as k,I as l,O as m};
|
|
2
|
+
//# sourceMappingURL=chunk-X5K3HR4V.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{a as m,b as U}from"./chunk-QIJLFPWE.js";import{z as a}from"zod";var N,q,G,Z,H,K,F,V,Y,S,w=m(()=>{"use strict";N=a.enum(["mon","tue","wed","thu","fri","sat","sun"]),q=a.object({days:a.array(N).default(["mon","tue","wed","thu","fri"]),start:a.string().regex(/^\d{2}:\d{2}$/),end:a.string().regex(/^\d{2}:\d{2}$/),lunch:a.object({start:a.string().regex(/^\d{2}:\d{2}$/),end:a.string().regex(/^\d{2}:\d{2}$/)}).optional()}),G=a.object({title:a.string(),responsibilities:a.array(a.string()).default([]),sopPath:a.string().optional(),kpis:a.array(a.string()).default([])}),Z=a.object({role:a.string(),reportsTo:a.string().optional(),schedule:q,utilizationTarget:a.number().min(0).max(1).default(.8)}),H=a.object({channel:a.string(),chatId:a.string(),accountId:a.string().optional()}),K=a.discriminatedUnion("type",[a.object({type:a.literal("backlog"),path:a.string().default(".agentx/backlog.md")}),a.object({type:a.literal("gitlab"),projects:a.array(a.string()).default([])}),a.object({type:a.literal("wiki"),path:a.string(),glob:a.string().default("**/*.md")})]),F=a.object({id:a.string(),pm:a.string().optional(),client:a.string().optional()}),V=a.object({channel:a.string().optional(),chatId:a.string().optional(),username:a.string().optional(),senderId:a.string().optional(),client:a.string(),project:a.string().optional(),displayName:a.string().optional()}),Y=a.object({name:a.string().optional(),kind:a.enum(["client","internal","own"]).optional(),respondWithin:a.string().optional(),standing:a.array(a.string()).default([])}),S=a.object({enabled:a.boolean().default(!1),timezone:a.string().default("UTC"),mainChannel:H,workSource:K,roles:a.record(a.string(),G).default({}),orgChart:a.record(a.string(),Z).default({}),projects:a.array(F).default([]),contactMap:a.array(V).default([]),clients:a.record(a.string(),Y).default({}),workTickMinutes:a.number().int().min(1).max(60).default(15),idleQueueThreshold:a.number().int().min(0).default(0),standup:a.object({enabled:a.boolean().default(!0),plansDir:a.string().default(".agentx/plans"),maxAgentsPerDay:a.number().int().min(1).max(100).default(20),dryRun:a.boolean().default(!1)}).default({})})});import{z as l}from"zod";function nt(t,n){let r=new Set(t.labels||[]);if(t.state==="closed"){let i=n.find(s=>s.kind==="closed");if(i)return i.id}for(let i of n)if(i.kind==="scoped-label"&&i.scopedLabel&&r.has(i.scopedLabel))return i.id;for(let i of n)if(i.kind==="label"&&i.mapsToLabel&&r.has(i.mapsToLabel))return i.id;let o=n.find(i=>i.kind==="open-backlog");if(o){let i=o.scopedPrefix+"::";return[...r].some(d=>d.startsWith(i))?null:o.id}return n[0]?.id??null}function ot(t,n){let r=[],o=[],i=!1,s=!1;return n.kind==="scoped-label"&&n.scopedLabel?r.push(n.scopedLabel):n.kind==="label"&&n.mapsToLabel?r.push(n.mapsToLabel):n.kind==="closed"&&(i=!0),t&&(t.kind==="scoped-label"&&t.scopedLabel?o.push(t.scopedLabel):t.kind==="label"&&t.mapsToLabel?o.push(t.mapsToLabel):t.kind==="closed"&&n.kind!=="closed"&&(s=!0)),{addLabels:r.length?r:void 0,removeLabels:o.length?o:void 0,closeIssue:i||void 0,reopen:s||void 0}}var J,X,Q,ee,te,ne,v,oe,k,j=m(()=>{"use strict";J=l.object({name:l.string(),color:l.string().regex(/^#[0-9a-f]{6}$/i).default("#6366f1"),description:l.string().optional()}),X=l.object({id:l.string().regex(/^[a-z0-9_-]+$/,"column id must be lowercase slug"),title:l.string(),kind:l.enum(["open-backlog","scoped-label","closed","label"]).default("label"),mapsToLabel:l.string().optional(),scopedLabel:l.string().optional(),scopedPrefix:l.string().default("Status"),accent:l.string().optional()}),Q=l.object({enabled:l.boolean().default(!0),staleDoingMinutes:l.number().int().min(1).default(45),respectLunchBreak:l.boolean().default(!0),respectSchedule:l.boolean().default(!0),action:l.enum(["badge","notify"]).default("badge")}),ee=l.discriminatedUnion("type",[l.object({type:l.literal("gitlab"),projects:l.array(l.string()).min(1)})]),te=[{id:"open",title:"Open",kind:"open-backlog",scopedPrefix:"Status",accent:"#6b7280"},{id:"todo",title:"To Do",kind:"scoped-label",scopedLabel:"Status::To Do",scopedPrefix:"Status",accent:"#fb7a35"},{id:"doing",title:"Doing",kind:"scoped-label",scopedLabel:"Status::Doing",scopedPrefix:"Status",accent:"#22c55e"},{id:"onhold",title:"On Hold",kind:"scoped-label",scopedLabel:"Status::On Hold",scopedPrefix:"Status",accent:"#f59e0b"},{id:"review",title:"Review",kind:"scoped-label",scopedLabel:"Status::Review",scopedPrefix:"Status",accent:"#3b82f6"},{id:"closed",title:"Closed",kind:"closed",scopedPrefix:"Status",accent:"#6b7280"}],ne=l.object({id:l.string().regex(/^[a-z0-9_-]+$/,"board id must be lowercase slug"),name:l.string(),source:ee,primaryToolLabel:l.string().optional(),labels:l.array(J).default([]),columns:l.array(X).min(1).default(te),timeRangeDays:l.number().int().min(1).max(365).default(30),closedWindowDays:l.number().int().min(1).max(365).default(30),reconciliation:Q.default({})}),v=l.array(ne).default([]),oe=l.object({name:l.string(),url:l.string(),dashboardUrl:l.string().optional(),token:l.string().optional(),dashboardToken:l.string().optional()}),k=l.object({enabled:l.boolean().default(!1),port:l.number().int().default(4202),bind:l.string().default("127.0.0.1"),token:l.string().optional(),daemonUrl:l.string().default("http://localhost:18800"),daemons:l.array(oe).default([]),draftAgent:l.string().optional()}).default({})});import{z as ae}from"zod";function it(t){return t==="report"||t==="propose"}function se(t){return t.replace(/([a-z0-9])([A-Z])/g,"$1 $2").split(/[^A-Za-z0-9]+/).filter(Boolean).map(n=>n.toLowerCase())}function y(t){return se(t).slice(2).join(" ").replace(/\b(merge|pull)\s+requests?\b/g,"mergerequest").split(" ").filter(Boolean)}function C(t){let n=t.replace(/<<-?\s*(['"]?)([A-Za-z_][A-Za-z0-9_]*)\1([\s\S]*?)^\s*\2\s*$/gm,(i,s,d,u)=>!s&&/\$\(|`/.test(u)?i:i.split(`
|
|
2
2
|
`)[0]+`
|
|
3
3
|
`),r="",o=0;for(;o<n.length;){let i=n[o];if(i==="\\"){r+=n.slice(o,o+2),o+=2;continue}if(i==="'"){let s=n.indexOf("'",o+1);if(s<0)return null;r+="''",o=s+1;continue}if(i==='"'){let s=o+1;for(;s<n.length&&n[s]!=='"';)s+=n[s]==="\\"?2:1;if(s>=n.length)return null;let d=n.slice(o+1,s);r+=/\$\(|`/.test(d)?` ${d} `:'""',o=s+1;continue}r+=i,o++}return r}function _(t){return t.split(/\|\||&&|[;|&\n`()]|\$\(|<\(|>\(/).map(n=>n.trim().split(/\s+/).filter(Boolean)).filter(n=>n.length>0)}function D(t){let n=0;for(;n<t.length;){let r=t[n];if(ue.has(r))return[];if(de.has(r)||/^[A-Za-z_][A-Za-z0-9_]*=/.test(r)){n++;continue}break}return t.slice(n)}function I(t){let n=0;for(;n<t.length&&t[n].startsWith("-");)n+=/^-(C|c)$|^--(git-dir|work-tree|namespace)$/.test(t[n])?2:1;return{sub:t[n],rest:t.slice(n+1)}}function me(t){let[n,...r]=t,o=n.replace(/^.*\//,"");if(!ce.has(o))return`\`${o}\` is not a read-only command`;let i=s=>r.some(d=>s.test(d));switch(o){case"find":return i(/^-(exec|execdir|ok|okdir|delete|fprint|fprint0|fprintf|fls)$/)?"find with -exec/-delete":null;case"sort":return i(/^(-o|--output)/)?"sort -o writes a file":null;case"git":{if(i(/^(-c|--exec-path|--output)/))return"git option that can execute or write";let{sub:s,rest:d}=I(r);return!s||!pe.has(s)?`git ${s??""} is not read-only`.trim():s==="branch"&&d.some(u=>/^-(d|D|m|M|c|C|f|u)$|^--(delete|move|copy|force|set-upstream|unset-upstream|edit-description)/.test(u)||!u.startsWith("-"))?"git branch that changes branches":s==="tag"&&d.some(u=>!/^(-l|--list|-n\d*|--contains|--points-at|--sort=.*|--merged|--no-merged)$/.test(u))?"git tag that creates or deletes tags":s==="remote"&&d.length>0&&!/^(-v|--verbose|show|get-url)$/.test(d[0])?"git remote that changes remotes":s==="config"&&!d.some(u=>/^(--get|--get-all|--get-regexp|--list|-l)$/.test(u))?"git config write":s==="reflog"&&d.length>0&&!/^(show|-)/.test(d[0])?"git reflog that expires or deletes":null}case"gh":case"glab":{let[s,d]=r.filter(u=>!u.startsWith("-"));if(s==="search")return null;if(s==="api"){let u=r.findIndex(p=>/^(-X|--method)$/.test(p));return u>=0&&!/^GET$/i.test(r[u+1]??"")?`${o} api with a non-GET method`:i(/^-X(?!GET$)\w+|^--method=(?!GET$)/i)?`${o} api with a non-GET method`:i(/^(-f|-F|--field|--raw-field|--input)/)?`${o} api with a request body`:null}return!d||!fe.has(d)?`${o} ${s??""} ${d??""} is not read-only`.replace(/\s+/g," ").trim():null}case"curl":{let s=r.findIndex(d=>/^(-X|--request)$/.test(d));return s>=0&&!/^(GET|HEAD|OPTIONS)$/i.test(r[s+1]??"")||i(/^-X(?!GET$|HEAD$)\w+|^--request=(?!GET$|HEAD$)/i)?"curl with a non-GET method":i(/^(-d|--data|--data-\w+|--json|-F|--form|-T|--upload-file|-o|--output|-O|--remote-name|-K|--config)/)?"curl that sends a body or writes a file":null}default:return null}}function ge(t){let n=t.replace(/\d*>>?\s*\/dev\/null/g," ").replace(/&>>?\s*\/dev\/null/g," ").replace(/\d*>&\s*\d+/g," ");return/[>]/.test(n)}function be(t){let n=C(t);if(n===null)return c("report","shell","command too irregular to verify as read-only");if(ge(n))return c("report","shell","output redirection writes a file");for(let r of _(n)){let o=D(r);if(o.length===0)continue;let i=me(o);if(i)return c("report","shell",i)}return f}function he(t){if(re.has(t.tool))return c("report","write",`${t.tool} modifies files`);if(t.tool==="Bash")return be(t.command??"");if(ie.has(t.tool))return f;if(t.tool.startsWith("mcp__")){let n=y(t.tool),r=n.find(o=>le.has(o));return r?c("report","outward",`tool "${t.tool}" can change state (${r})`):n.some(o=>T.has(o))?f:c("report","outward",`tool "${t.tool}" is not recognisably read-only`)}return c("report","tool",`tool "${t.tool}" is not on the read-only list`)}function ve(t){let n=[];for(let o=0;o<t.length;o++){let i=t[o];if(we.test(i)){o++;continue}if(/^(--force.*|-d|--delete|--mirror|--all|--tags|--prune)$/.test(i)||/^-[a-zA-Z]*f/.test(i))return c("propose","push","force, delete, mirror and tag pushes are act-level actions");i.startsWith("-")||n.push(i)}let r=n.slice(1);if(r.length===0)return c("propose","push","name the feature branch explicitly: git push <remote> <branch>");for(let o of r){if(o.startsWith("+")||o.startsWith(":"))return c("propose","push",`refspec "${o}" force-pushes or deletes`);let i=(o.includes(":")?o.slice(o.indexOf(":")+1):o).replace(/^refs\/heads\//,"");if(Se.test(i))return c("propose","push",`pushing to "${i}" is an act-level action; push a feature branch and open a merge request`)}return null}function ke(t){for(let r of ye)if(r.re.test(t))return c("propose",r.id,r.reason);let n=C(t);if(n===null)return c("propose","shell","command too irregular to verify");for(let r of _(n)){let o=D(r);if(o.length===0)continue;let i=[$(o[0]),...o.slice(1)].join(" ");for(let s of xe)if(s.re.test(i))return c("propose",s.id,s.reason);if($(o[0])==="git"){let{sub:s,rest:d}=I(o.slice(1));if(s==="push"){let u=ve(d);if(u)return u}}}return f}function je(t){if(t.tool==="Bash")return ke(t.command??"");if(t.tool.startsWith("mcp__")){let n=y(t.tool).find(r=>E.has(r));if(n)return c("propose","outward",`tool "${t.tool}" performs an act-level action (${n})`);if($e(y(t.tool)))return c("propose","delegate",`tool "${t.tool}" hands work to another agent, which would run at its own full autonomy`)}return f}function $e(t){return t.includes("delegate")||t.includes("handoff")||t.includes("agent")&&t.some(n=>n==="send"||n==="ask"||n==="message"||n==="task")?!0:t.includes("task")&&!t.some(n=>T.has(n))}function st(t,n){return t==="report"?he(n):t==="propose"?je(n):f}function lt(t){return t==="report"?"[Autonomy: report] This routine runs read-only. Investigate and report; do not modify files, run mutating commands, or post anywhere. Your final answer is the deliverable. Blocked actions are enforced and logged; if something needs doing, describe it in the report instead.":t==="propose"?"[Autonomy: propose] You may edit files, commit, push a named feature branch, and open a merge request or draft. You may not merge, deploy, delete, force-push, push to protected branches, or operate hosts. These limits are enforced and logged; leave act-level steps as clear recommendations.":""}var A,f,c,re,ie,T,E,le,de,ue,$,ce,pe,fe,ye,xe,Se,we,R=m(()=>{"use strict";A=ae.enum(["report","propose","act"]);f={allowed:!0,ruleId:null,reason:null},c=(t,n,r)=>({allowed:!1,ruleId:`autonomy.${t}.${n}`,reason:r}),re=new Set(["Write","Edit","MultiEdit","NotebookEdit"]),ie=new Set(["Read","Glob","Grep","LS","NotebookRead","WebFetch","WebSearch","TodoWrite","TodoRead","Task","Agent","Skill","ToolSearch","BashOutput","KillShell","ExitPlanMode","EnterPlanMode","ListMcpResourcesTool","ReadMcpResourceTool"]);T=new Set(["get","list","search","read","view","fetch","query","find","show","describe","status","diff","inspect","lookup","count","stats","browse","whoami","download"]),E=new Set(["merge","delete","remove","destroy","drop","deploy","publish","release","approve","archive","revoke","purge","close","transfer","force","rollback","restart","erase","unprotect","truncate","wipe","kill","terminate","unpublish","promote"]),le=new Set([...E,"create","update","post","send","write","edit","add","set","comment","reply","push","run","execute","exec","trigger","upload","move","rename","cancel","retry","assign","label","react","invite","notify","schedule","start","stop","submit","save","patch","put","insert","upsert","apply","install","import","mark","toggle","enable","disable","open","commit","sync","reset","store","remember","forget","broadcast","message","call","dispatch","enqueue","resolve","unassign","lock","unlock","pin"]);de=new Set(["then","do","else","elif","if","while","until","!","{","}","time"]),ue=new Set(["done","fi","esac","for","case","select","in",";;"]);$=t=>t.replace(/^.*\//,""),ce=new Set(["ls","pwd","cd","cat","head","tail","wc","grep","egrep","fgrep","rg","fd","tree","stat","file","du","df","date","whoami","id","hostname","uname","which","type","sort","uniq","cut","tr","diff","cmp","comm","basename","dirname","realpath","readlink","jq","column","nl","seq","true","false","test","[","sleep","ps","uptime","echo","printf","base64","md5","md5sum","shasum","sha256sum","less","more","printenv","dig","nslookup","host","find","git","gh","glab","curl"]),pe=new Set(["status","log","diff","show","rev-parse","ls-files","ls-tree","blame","shortlog","describe","cat-file","grep","branch","tag","remote","config","reflog","rev-list","merge-base","name-rev","show-ref","for-each-ref","whatchanged"]),fe=new Set(["view","list","diff","status","checks","ls"]);ye=[{id:"merge",re:/merge_when_pipeline_succeeds|\bauto[_-]merge\b/i,reason:"auto-merging is an act-level action"},{id:"merge",re:/\b(curl|wget|http|gh\s+api|glab\s+api)\b[^\n]*\/merges?\b/i,reason:"calling a merge endpoint is an act-level action"},{id:"delete",re:/(?:^|\W)(drop|truncate)\s+(table|database|schema|index|collection)\b|(?:^|\W)delete\s+from\b|\bflushall\b|\bflushdb\b/i,reason:"destroying data is an act-level action"},{id:"delete",re:/(-X|--request)[\s=]*['"]?DELETE\b/i,reason:"HTTP DELETE is an act-level action"},{id:"delegate",re:/\b(curl|wget|http)\b[^\n]*(localhost|127\.0\.0\.1|\[::1\])[^\n]*\/(ask|task|send|chat|mesh|workflows?|crons?|reload|config)\b/i,reason:"calling the local daemon to dispatch work escapes this routine's limit"}],xe=[{id:"merge",re:/^(gh\s+pr\s+merge|glab\s+mr\s+merge)\b/i,reason:"merging is an act-level action"},{id:"delete",re:/^rm\s+(.*\s)?(-\w*[rR]\w*|--recursive)\b|^(shred|dropdb)\b|^find\b.*\s-delete\b/i,reason:"deleting is an act-level action"},{id:"delete",re:/^git\s+(clean\s+-\w*f|reset\s+--hard|branch\s+(-\w*[dD]\w*|--delete)|tag\s+(-d|--delete)|stash\s+(drop|clear)|remote\s+(remove|rm))\b/i,reason:"deleting is an act-level action"},{id:"delete",re:/^(gh|glab)\s+\S+\s+delete\b|^docker\s+(rm|rmi|volume\s+rm|system\s+prune)\b|^(kubectl\s+delete|aws\s+s3\s+(rm|rb)|gsutil\s+rm)\b|^doctl\s+.*\sdelete\b/i,reason:"deleting is an act-level action"},{id:"deploy",re:/^(kubectl\s+(apply|rollout|scale|set|patch|replace|create|edit)|helm\s+(install|upgrade|rollback|uninstall|delete)|terraform\s+(apply|destroy|import|taint)|pulumi\s+(up|destroy)|docker\s+push|netlify\s+deploy|fly(ctl)?\s+deploy|serverless\s+deploy|vercel\b.*--prod)\b/i,reason:"deploying is an act-level action"},{id:"deploy",re:/^((npm|pnpm|yarn|bun)(\s+run)?|make|just|task|rake)\s+(\S+:)?deploy\b|^((ba|z)?sh|node|python3?)\s+\S*deploy[^\s/]*$|^\S*\/deploy(\.\w+)?\b|^deploy(\.\w+)?\b/i,reason:"deploying is an act-level action"},{id:"deploy",re:/^((npm|pnpm|yarn|bun)\s+publish|cargo\s+publish|twine\s+upload|(gh|glab)\s+release\s+(create|upload|edit)|(npx\s+)?prisma\s+(migrate\s+(deploy|reset)|db\s+push))\b/i,reason:"publishing or migrating is an act-level action"},{id:"prod",re:/^(ssh|scp|sudo|doas|systemctl|launchctl|service|kill|pkill|killall|reboot|shutdown)\b|^rsync\b.*\s\S+:\S*/i,reason:"operating hosts and services is an act-level action"},{id:"delegate",re:/^(agentx|agentix)\s+(ask|send|task|exec|run|chat|mesh|cron|workflow|daemon|config)\b/i,reason:"handing work to another agent or reconfiguring the daemon escapes this routine's limit"}],Se=/^(main|master|trunk|develop|development|prod|production|staging|stable|release([/-].*)?|HEAD|@)$/i,we=/^(-o|--push-option|--repo|--receive-pack|--exec)$/});var Je={};U(Je,{INTEGRATION_KINDS:()=>Re,approvalsConfigSchema:()=>B,daemonConfigSchema:()=>z,expandEnvVars:()=>h,loadDaemonConfig:()=>Ve,validateWorkspaces:()=>Ye});import{z as e}from"zod";import{readFileSync as L,existsSync as g}from"fs";import{resolve as b}from"path";function Ae(t){let n=b(t,".env");if(!g(n))return;let r=L(n,"utf-8");for(let o of r.split(`
|
|
4
4
|
`)){let i=o.trim();if(!i||i.startsWith("#"))continue;let s=i.indexOf("=");if(s===-1)continue;let d=i.slice(0,s).trim(),u=i.slice(s+1).trim();process.env[d]||(process.env[d]=u)}}function h(t){if(typeof t=="string")return t.replace(/\$\{(\w+)\}/g,(n,r)=>process.env[r]||"");if(Array.isArray(t))return t.map(h);if(t!==null&&typeof t=="object"){let n={};for(let[r,o]of Object.entries(t))n[r]=h(o);return n}return t}function Fe(t,n){let r=[],o=new Set;for(let i of t){let s=i.path.join("."),d=/^channels\.telegram\.accounts\.([^.]+)\.token$/.exec(s);if(d&&i.message.toLowerCase().includes("required")){let u=d[1],p=`tg:${u}`;if(o.has(p))continue;o.add(p),r.push(`Hint: Telegram account "${u}" is enabled but has no bot token.
|
|
@@ -12,4 +12,4 @@ ${p.join(`
|
|
|
12
12
|
|
|
13
13
|
`)}`:"";throw new Error(`Config validation failed (${o}):
|
|
14
14
|
${u}${W}`)}return d.data}function Ye(t){let n=[];for(let[r,o]of Object.entries(t.agents)){if(!g(o.workspace)){n.push(`Agent "${r}": workspace not found at ${o.workspace}`);continue}if(o.tier==="claude-code"){let d=b(o.workspace,".claude");g(d)||n.push(`Agent "${r}": no .claude/ directory in workspace ${o.workspace}. Claude Code native features (hooks, MCP, skills) won't be available.`)}let i=o.provider||"claude",s=t.providers[i];!["claude-code","codex-cli","opencode"].includes(o.tier)&&(!s||!s.apiKey)&&n.push(`Agent "${r}": provider "${i}" has no API key configured. Set providers.${i}.apiKey in config or use a CLI-backed tier ("claude-code", "codex-cli", or "opencode").`)}for(let[r,o]of Object.entries(t.crons))t.agents[o.agent]||n.push(`Cron "${r}": references unknown agent "${o.agent}"`);if(t.channels.telegram.enabled)for(let[r,o]of Object.entries(t.channels.telegram.accounts))t.agents[o.agentBinding]||n.push(`Telegram account "${r}": references unknown agent "${o.agentBinding}"`);return n}var Te,Ee,Ce,_e,De,Ie,Re,P,M,O,Le,Pe,Me,Oe,Be,ze,We,Ue,Ne,qe,Ge,Ze,He,Ke,B,z,Xe=m(()=>{w();j();R();Te=e.object({apiKey:e.string().optional(),defaultModel:e.string().optional(),baseUrl:e.string().optional(),thinking:e.boolean().optional()}),Ee=e.object({type:e.literal("stdio").optional(),command:e.string(),args:e.array(e.string()).default([]),env:e.record(e.string(),e.string()).optional()}),Ce=e.object({type:e.literal("http"),url:e.string().url(),headers:e.record(e.string(),e.string()).optional()}),_e=e.union([Ce,Ee]),De=e.object({tokenEnv:e.string().regex(/^[A-Z][A-Z0-9_]*$/).optional(),privateAppTokenEnv:e.string().regex(/^[A-Z][A-Z0-9_]*$/).optional(),apiKeyEnv:e.string().regex(/^[A-Z][A-Z0-9_]*$/).optional(),refreshTokenEnv:e.string().regex(/^[A-Z][A-Z0-9_]*$/).optional(),clientIdEnv:e.string().regex(/^[A-Z][A-Z0-9_]*$/).optional(),clientSecretEnv:e.string().regex(/^[A-Z][A-Z0-9_]*$/).optional(),auth:e.literal("keyring").optional(),sessionDir:e.string().optional()}).strict(),Ie=e.object({kind:e.string().min(1),label:e.string().min(1),credentials:De.default({}),metadata:e.record(e.string(),e.union([e.string(),e.number(),e.boolean()])).default({}),enabled:e.boolean().default(!0)}),Re=["telegram-bot","whatsapp","gitlab-user","github-user","gmail","hotmail","smtp","hubspot","salesforce","pipedrive","odoo","trello","linear","asana","jira","notion","stripe","sentry","vercel","twilio","custom"],P=e.enum(["system","elevenlabs"]),M=e.union([e.string(),e.record(e.string(),e.string())]),O=e.object({provider:P.optional(),system:M.optional(),elevenlabsVoiceId:e.string().optional(),gender:e.enum(["female","male","neutral"]).optional(),style:e.string().optional(),intro:e.string().optional(),narrate:e.enum(["off","on","all"]).optional()}),Le=e.object({name:e.string(),workspace:e.string(),tier:e.enum(["claude-code","codex-cli","opencode","sdk","orchestrator"]).default("claude-code"),provider:e.string().optional(),model:e.string().optional(),systemPrompt:e.string().optional(),mentions:e.array(e.string()).default([]),intents:e.array(e.string()).default([]),maxDelegationDepth:e.number().int().min(0).max(50).default(5),mcp:e.record(e.string(),_e).optional(),codegraph:e.boolean().default(!1),contextStrategy:e.enum(["layered","planner"]).optional(),contextReferences:e.boolean().default(!1),richMessages:e.boolean().default(!0),maxConcurrent:e.number().default(1),maxExecutionMinutes:e.number().int().min(1).max(240).default(20),permissionMode:e.string().default("default"),billing:e.enum(["subscription","api"]).default("subscription"),toolUseRequired:e.array(e.string()).default([]),gitlabAutoReply:e.boolean().optional(),persistentProcess:e.boolean().default(!1),queueMode:e.enum(["collect","followup","drop"]).default("collect"),heartbeat:e.object({enabled:e.boolean().default(!1),intervalMinutes:e.number().default(30),prompt:e.string().default("Check inbox, pending tasks, and system health. Report anything that needs attention."),channel:e.string().default("heartbeat")}).default({}),access:e.enum(["private","public"]).default("private"),admin:e.boolean().optional(),integrations:e.array(Ie).default([]),voice:O.optional(),presence:e.object({color:e.string().regex(/^#[0-9a-fA-F]{6}$/).optional(),initial:e.string().max(2).optional(),label:e.string().optional(),allowActions:e.boolean().optional()}).optional()}),Pe=e.object({token:e.string(),agentBinding:e.string(),allowFrom:e.array(e.string()).optional(),pollInbound:e.boolean().default(!0)}),Me=e.object({telegram:e.object({enabled:e.boolean().default(!1),accounts:e.record(e.string(),Pe).default({}),policy:e.object({dm:e.enum(["pair","block"]).default("pair"),group:e.enum(["mention-required","all"]).default("mention-required"),allowFrom:e.array(e.string()).optional()}).default({})}).default({}),whatsapp:e.object({enabled:e.boolean().default(!1),sessionDir:e.string().default(".agentx/whatsapp-sessions"),defaultAgent:e.string().optional(),allowFrom:e.array(e.string()).optional(),routes:e.array(e.object({contact:e.string().optional(),group:e.string().optional(),agent:e.string()})).default([]),ingest:e.object({enabled:e.boolean().default(!1),mode:e.enum(["metadata-only","messages"]).default("metadata-only"),allowContacts:e.array(e.string()).default([]),allowGroups:e.array(e.string()).default([]),denyContacts:e.array(e.string()).default([]),denyGroups:e.array(e.string()).default([]),messageCap:e.number().int().min(1).max(500).default(50),historyDays:e.number().int().min(1).max(365).default(30),contactRefreshDays:e.number().int().min(1).max(90).default(7),throttle:e.object({minMsBetweenCalls:e.number().int().min(100).default(1500),maxCallsPerMinute:e.number().int().min(1).default(20),maxChatsPerSweep:e.number().int().min(1).default(25)}).default({}),retentionDays:e.number().int().min(0).default(0)}).default({})}).default({}),gitlab:e.object({enabled:e.boolean().default(!1),webhookPort:e.number().default(18810),webhookSecret:e.string().optional(),host:e.string().default("https://gitlab.com"),token:e.string().optional(),autoReplyLegacy:e.boolean().default(!0),routes:e.array(e.object({project:e.string(),agent:e.string()})).default([]),agentMappings:e.array(e.object({agentId:e.string(),gitlabUsernames:e.array(e.string()).default([]),keywords:e.array(e.string()).default([]),token:e.string().optional(),node:e.string().optional()})).default([]),agentUsernamePrefixes:e.array(e.string().min(1)).default([])}).default({}),github:e.object({enabled:e.boolean().default(!1),autoReplyLegacy:e.boolean().default(!0),token:e.string().optional(),tokenFile:e.string().optional(),appId:e.number().optional(),clientId:e.string().optional(),privateKeyFile:e.string().optional(),webhookSecret:e.string().optional(),routes:e.array(e.object({repo:e.string(),agent:e.string()})).default([]),agentMappings:e.array(e.object({agentId:e.string(),githubUsernames:e.array(e.string()).default([]),token:e.string().optional(),tokenFile:e.string().optional(),node:e.string().optional()})).default([])}).default({}),ntfy:e.object({enabled:e.boolean().default(!1),server:e.string().default("https://ntfy.sh"),topic:e.string().optional(),token:e.string().optional(),defaultPriority:e.number().int().min(1).max(5).default(3),defaultTitle:e.string().optional()}).default({}),webrtc:e.object({enabled:e.boolean().default(!1),stunServers:e.array(e.string()).default(["stun:stun.l.google.com:19302"]),turnServers:e.array(e.object({urls:e.string(),username:e.string().optional(),credential:e.string().optional()})).default([]),allowedCallers:e.array(e.string()).default([]),ringNotify:e.array(e.object({channel:e.string(),chatId:e.string(),accountId:e.string().optional()})).default([]),callUrlBase:e.string().optional(),bot:e.object({enabled:e.boolean().default(!1),defaultAgentId:e.string().optional(),whisperBackend:e.enum(["auto","mlx","openai"]).default("auto"),whisperModel:e.string().optional(),whisperLanguage:e.string().default("auto"),mlxBinary:e.string().optional(),transcriptChannel:e.object({channel:e.string(),chatId:e.string(),accountId:e.string().optional()}).optional(),maxCallMinutes:e.number().int().min(1).max(240).default(30)}).default({})}).default({})}),Oe=e.object({enabled:e.boolean().default(!0),schedule:e.string(),timezone:e.string().default("UTC"),agent:e.string(),prompt:e.string().default(""),command:e.string().optional(),timeout:e.number().default(600),model:e.string().optional(),maxOutputTokens:e.number().int().min(50).max(8e3).optional(),autonomy:A.optional(),onError:e.union([e.enum(["log","notify","disable"]),e.array(e.enum(["log","notify","disable"]))]).default("log").transform(t=>Array.isArray(t)?t:[t]),notify:e.object({channel:e.string(),chatId:e.string(),accountId:e.string().optional()}).optional(),fireToken:e.string().optional(),createdBy:e.string().optional(),approval:e.object({action:e.enum(["create","delete"]),requestedBy:e.string(),requestedAt:e.string()}).optional()}).refine(t=>!!(t.command?.trim()||t.prompt?.trim()),{message:"a cron needs either a prompt (dispatch an agent) or a command (run it directly)"}).refine(t=>!(t.command?.trim()&&t.autonomy&&t.autonomy!=="act"),{message:"autonomy applies to agent routines; a command cron runs no agent (remove autonomy or the command)"}),Be=e.object({name:e.string(),triggers:e.array(e.object({pattern:e.string(),channel:e.string().optional()})),allowedContacts:e.array(e.string()).optional(),agent:e.string(),prompt:e.string(),schedule:e.string().optional(),timezone:e.string().default("UTC"),notify:e.object({channel:e.string(),chatId:e.string(),accountId:e.string().optional()}).optional()}),ze=e.object({url:e.string(),name:e.string(),token:e.string().optional()}),We=e.object({name:e.string(),agent:e.string(),enabled:e.boolean().default(!0)}),Ue=e.object({enabled:e.boolean().default(!1),peers:e.array(ze).default([]),inboxes:e.array(We).default([]),discovery:e.enum(["static","mdns"]).default("static"),healthCheck:e.object({interval:e.number().default(60),timeout:e.number().default(10)}).default({})}),Ne=e.object({enabled:e.boolean().default(!1),baseDir:e.string().default(".agentx/graph"),draftAgent:e.string().optional(),reviewAgent:e.string().optional(),autoApproveStructure:e.enum(["strict","extend-leaves","any"]).default("extend-leaves"),autoApproveConfidence:e.number().min(0).max(1).default(1),classifierModel:e.string().default("claude-haiku-4-5-20251001"),retrievalWeights:e.object({graph:e.number().min(0).default(.6),bm25:e.number().min(0).default(.4)}).default({})}).default({}),qe=e.object({mode:e.enum(["off","shadow","active"]).default("off"),backend:e.string().optional(),model:e.string().optional(),timeoutMs:e.number().int().min(100).default(1e4),temperature:e.number().min(.01).default(1),explore:e.number().min(0).max(1).default(.15),holdout:e.number().min(0).max(1).optional()}).default({}),Ge=e.object({enabled:e.boolean().default(!1),dbPath:e.string().default(".agentx/decisions/decisions.sqlite"),redactState:e.boolean().default(!1),keepStateRows:e.number().int().min(0).default(2e3),defaultBackend:e.string().default("local"),backends:e.object({local:e.object({provider:e.string().default("claude-code"),model:e.string().default("claude-haiku-4-5-20251001"),structureMode:e.enum(["auto","tool","text"]).default("auto"),normalizeProbabilities:e.boolean().default(!0),nRetryMalformedStructure:e.number().int().min(0).max(3).default(1),maxStateChars:e.number().int().min(500).default(24e3)}).default({}),simpleJev:e.object({baseUrl:e.string().default("http://127.0.0.1:8000/v1"),model:e.string().optional(),apiKeyEnv:e.string().optional(),timeoutMs:e.number().int().min(100).default(3e4),maxStateChars:e.number().int().min(500).default(6e3),maxChoiceOptions:e.number().int().min(2).max(255).default(50)}).default({}),jev:e.object({baseUrl:e.string().default("https://openrouter.ai/api/alpha"),path:e.string().default("/decisions"),model:e.string().default("jev-latest"),apiKeyEnv:e.string().default("OPENROUTER_API_KEY"),timeoutMs:e.number().int().min(100).default(3e4),maxStateChars:e.number().int().min(500).default(9e4),maxChoiceOptions:e.number().int().min(2).max(255).default(255)}).default({}),typesafe:e.object({baseUrl:e.string().default("https://api.typesafe.ai/v1"),path:e.string().default("/systemone"),model:e.string().default("jev-latest"),apiKeyEnv:e.string().default("TYPESAFE_API_KEY"),timeoutMs:e.number().int().min(100).default(3e4),maxStateChars:e.number().int().min(500).default(9e4),maxChoiceOptions:e.number().int().min(2).max(255).default(255)}).default({})}).default({}),seats:e.record(e.string(),qe).default({}),routing:e.object({cheapModel:e.string().optional(),cheapModels:e.object({"claude-code":e.string().optional(),"codex-cli":e.string().optional()}).optional()}).default({})}).default({}),Ze=e.object({longTaskThreshold:e.number().default(30),destination:e.object({channel:e.string(),chatId:e.string(),accountId:e.string().optional()}).optional(),on:e.object({taskComplete:e.boolean().default(!0),taskError:e.boolean().default(!0),taskQueued:e.boolean().default(!1)}).default({}),local:e.object({banner:e.boolean().default(!0),sound:e.boolean().default(!0),soundName:e.string().regex(/^[\w -]+$/).default("Glass"),volume:e.number().min(0).max(1).default(.4),icon:e.string().optional()}).default({})}).default({}),He=e.object({x:e.number(),y:e.number(),width:e.number().positive(),height:e.number().positive()}),Ke=e.object({maxPixels:e.number().int().positive().default(12e5),timeoutMs:e.number().int().positive().default(5e3),intervalMs:e.number().int().positive().default(100),changeThreshold:e.number().min(0).max(1).default(.015),stableMs:e.number().int().nonnegative().default(400),regions:e.record(e.string().regex(/^[a-z][\w-]*$/),He).default({}),buffer:e.object({enabled:e.boolean().default(!1),seconds:e.number().positive().max(120).default(10),fps:e.number().positive().max(10).default(2),region:e.string().default("screen"),maxPixels:e.number().int().positive().default(3e5)}).default({})}).default({}),B=e.object({defaultExpiryDays:e.number().positive().max(365).default(3),maxExpiryDays:e.number().positive().max(365).default(30),laterHours:e.number().positive().max(24*30).default(24),notifyAgent:e.boolean().default(!0),digest:e.object({enabled:e.boolean().default(!0),time:e.string().regex(/^([01]\d|2[0-3]):[0-5]\d$/,"use HH:MM, 24-hour").default("09:00"),timezone:e.string().refine(t=>{try{return new Intl.DateTimeFormat("en-US",{timeZone:t}),!0}catch{return!1}},"unknown timezone").optional(),destination:e.object({channel:e.string(),chatId:e.string(),accountId:e.string().optional()}).optional()}).default({})}).default({}),z=e.object({node:e.object({id:e.string(),name:e.string(),bind:e.string().default("127.0.0.1:18800"),defaultAgent:e.string().optional()}),providers:e.record(e.string(),Te).default({}),agents:e.record(e.string(),Le).default({}),channels:Me.default({}),crons:e.record(e.string(),Oe).default({}),services:e.record(e.string(),Be).default({}),notifications:Ze,approvals:B,resume:e.object({enabled:e.boolean().default(!0),maxAgeMinutes:e.number().int().positive().default(30),maxAttempts:e.number().int().min(0).default(1),reportOnlyChannels:e.array(e.string()).default([]),directChannels:e.array(e.string()).default([]),crashLoop:e.object({restarts:e.number().int().positive().default(3),windowMinutes:e.number().positive().default(10)}).default({})}).default({}),screen:Ke,mesh:Ue.default({}),meshVoices:e.record(e.string(),O.extend({name:e.string().optional()})).default({}),voice:e.object({provider:P.default("system"),fallback:e.enum(["system","none"]).default("system"),system:M.optional(),locale:e.string().default("en"),listener:e.string().optional()}).default({}),business:S.optional(),boards:v,dashboard:k,graph:Ne,decisions:Ge,workflows:e.object({enabled:e.boolean().default(!1),dir:e.string().default(".agentx/workflows"),n8n:e.object({baseUrl:e.string().default(""),apiKey:e.string().default("")}).default({baseUrl:"",apiKey:""}),matching:e.object({enabled:e.boolean().default(!1),mode:e.enum(["suggest","auto"]).default("suggest"),autoRunThreshold:e.number().min(0).max(1).default(.85),suggestThreshold:e.number().min(0).max(1).default(.65)}).default({}),editor:e.enum(["disabled","readonly","edit"]).default("edit")}).default({}),procedures:e.object({enabled:e.boolean().default(!0),dir:e.string().default(".agentx/procedures"),extraction:e.object({enabled:e.boolean().default(!1),onTaskCompletion:e.boolean().default(!1),minOccurrences:e.number().int().min(2).default(3),sinceDays:e.number().int().min(1).default(7),maxClusters:e.number().int().min(1).default(5),via:e.string().optional()}).default({}),injection:e.object({enabled:e.boolean().default(!0),maxProcedures:e.number().int().min(1).default(2),minScore:e.number().min(0).max(1).default(.5)}).default({})}).default({}),webhooks:e.array(e.object({id:e.string().regex(/^[a-z0-9][a-z0-9_-]*$/,"webhook id must be lowercase slug"),source:e.string().min(1),agentId:e.string(),secretEnv:e.string().optional(),description:e.string().optional(),enabled:e.boolean().default(!0),node:e.string().optional(),triggers:e.record(e.string(),e.string()).optional(),defaultWorkflow:e.string().optional()})).default([]),session:e.object({staleMinutes:e.number().int().min(1).max(1440).default(720),maxTurnsPerSession:e.number().int().min(2).max(200).default(40),tierTwoThresholdTokens:e.number().int().min(5e4).max(2e5).default(18e4),contextStrategy:e.enum(["layered","planner"]).default("layered"),maxClaudeCodeDispatchesPerHour:e.number().int().min(1).max(1e4).default(80),maxClaudeCodeDispatchesPer5h:e.number().int().min(1).max(5e4).default(180),continuityStateTurns:e.number().int().min(0).max(5).default(0)}).default({}),plugins:e.array(e.string()).default([]),processPool:e.object({maxIdleSeconds:e.number().int().min(5).max(86400).default(30),maxAgeSeconds:e.number().int().min(60).max(86400).default(2700),sweepIntervalSeconds:e.number().int().min(1).max(300).default(5)}).default({})})});export{nt as a,ot as b,j as c,A as d,it as e,st as f,lt as g,R as h,Re as i,B as j,z as k,h as l,Ve as m,Ye as n,Je as o,Xe as p};
|
|
15
|
-
//# sourceMappingURL=chunk-
|
|
15
|
+
//# sourceMappingURL=chunk-XSFXAJDA.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{a as w,b as y,c as x}from"./chunk-SFQUP3BP.js";import{o as g,p as C}from"./chunk-
|
|
1
|
+
import{a as w,b as y,c as x}from"./chunk-SFQUP3BP.js";import{o as g,p as C}from"./chunk-SZJMS7K4.js";C();import{existsSync as d,promises as h}from"fs";import c from"path";import{execa as b}from"execa";var k={enabled:!0,maxAttempts:3,provider:"claude-code"},v=class{constructor(e,r,i){this.cwd=e;this.config={...k,...r},this.memory=i||new x(e)}config;memory;async detectAndHeal(e,r,i){if(!this.config.enabled)return{healed:!1,attempts:0,error:"Heal disabled",filesChanged:[]};let t=await this.runVerification();if(!t)return{healed:!0,attempts:0,error:"",filesChanged:[]};let n=0,s=t,a=[];for(;n<this.config.maxAttempts;){n++;let l=await this.generateFix(s,e,r,n);if(!l.files.length)break;for(let o of l.files){let m=c.isAbsolute(o.path)?o.path:c.resolve(this.cwd,o.path),p=c.dirname(m);await h.mkdir(p,{recursive:!0}),await h.writeFile(m,o.content,"utf8"),a.push(o.path)}let f=await this.runVerification();if(!f)return i&&await this.memory.recordHeal(i,t,!0,a),{healed:!0,attempts:n,error:t,fix:l.explanation,filesChanged:a};s=f}return i&&await this.memory.recordHeal(i,t,!1,a),{healed:!1,attempts:n,error:s,filesChanged:a}}async runVerification(){let e=[this.config.buildCommand,this.config.lintCommand,this.config.testCommand].filter(Boolean);if(!e.length){let r=await this.detectCommands();e.push(...r)}for(let r of e)try{let[i,...t]=r.split(" ");await b(i,t,{cwd:this.cwd,timeout:6e4,reject:!0})}catch(i){let t=i.stderr||"",n=i.stdout||"",s=i.message||"";return F(`Command failed: ${r}
|
|
2
2
|
${t}
|
|
3
3
|
${n}
|
|
4
4
|
${s}`)}return null}async detectCommands(){let e=[],r=c.resolve(this.cwd,"package.json");if(d(r))try{let t=JSON.parse(await h.readFile(r,"utf8")).scripts||{};t.build&&e.push("npm run build"),t.typecheck&&e.push("npm run typecheck"),t.lint&&e.push("npm run lint"),t.test&&e.push("npm run test")}catch{}return d(c.resolve(this.cwd,"pyproject.toml"))&&d(c.resolve(this.cwd,"conftest.py"))&&e.push("python -m pytest --tb=short -q"),e}async generateFix(e,r,i,t){let n=g(this.config.provider,this.config.apiKey),s=[];for(let o of r.slice(0,5)){let m=c.resolve(this.cwd,o);if(d(m)){let p=await h.readFile(m,"utf8");s.push(`## ${o}
|
|
@@ -29,4 +29,4 @@ Fix the error. Use create_files with the corrected file content.`}],f=await n.ge
|
|
|
29
29
|
`)+`
|
|
30
30
|
... (truncated)`:e.join(`
|
|
31
31
|
`)}export{v as a};
|
|
32
|
-
//# sourceMappingURL=chunk-
|
|
32
|
+
//# sourceMappingURL=chunk-Y57CULGE.js.map
|