autohand-cli 0.9.1 → 0.9.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +103 -79
- package/dist/AgentRegistry-BBQRODQC.cjs +18 -0
- package/dist/AgentRegistry-JBXZUPML.js +18 -0
- package/dist/{CommunitySkillsCache-ZACDPD4J.js → CommunitySkillsCache-CI7UN2DX.js} +2 -2
- package/dist/CommunitySkillsCache-XTQ6RMTA.cjs +8 -0
- package/dist/{HookManager-2S6AHOC3.js → HookManager-BELBPQQI.js} +1 -1
- package/dist/{HookManager-TVEQI5ZU.cjs → HookManager-ZL2CLAJW.cjs} +2 -2
- package/dist/{ImportWizard-AF2XL6DS.cjs → ImportWizard-U6CIJREW.cjs} +12 -12
- package/dist/{ImportWizard-AEBMAKXE.js → ImportWizard-VJFSWSUQ.js} +3 -3
- package/dist/LearnAdvisor-LAURA3IB.cjs +9 -0
- package/dist/LearnAdvisor-RFOBXFG7.js +9 -0
- package/dist/MemoryManager-3A2VRPF2.js +9 -0
- package/dist/MemoryManager-UOEQZIDC.cjs +9 -0
- package/dist/{NVIDIAProvider-SJPY3ONR.js → NVIDIAProvider-AFNJNWJM.js} +1 -1
- package/dist/NVIDIAProvider-L5GTYRCQ.cjs +14 -0
- package/dist/{PermissionManager-MT7KBNNR.js → PermissionManager-N2LDSOYF.js} +3 -3
- package/dist/PermissionManager-ZNURIEYR.cjs +11 -0
- package/dist/ProviderFactory-3BFS65V7.cjs +13 -0
- package/dist/{ProviderFactory-RB4RVAF6.js → ProviderFactory-XUT6BSGB.js} +4 -3
- package/dist/SessionManager-LGPQIA57.cjs +10 -0
- package/dist/{SessionManager-554PHVPC.js → SessionManager-OR4KDDDS.js} +2 -2
- package/dist/{SkillsRegistry-NHHMIUYJ.js → SkillsRegistry-IL3GWROU.js} +2 -2
- package/dist/SkillsRegistry-PM34DQNA.cjs +9 -0
- package/dist/SubAgent-2WG4QQB5.cjs +13 -0
- package/dist/SubAgent-ICGN23TQ.js +13 -0
- package/dist/{about-3USFSGOH.js → about-OYVGQMJJ.js} +3 -3
- package/dist/{about-QR52U5DD.cjs → about-U2BH7HDR.cjs} +4 -4
- package/dist/{acp-5Y2W6OZP.js → acp-JWHGXZL5.js} +169 -103
- package/dist/{acp-GSYE75OB.cjs → acp-S37JOBCS.cjs} +184 -118
- package/dist/{actionExecutor-KHUU3Z3Q.cjs → actionExecutor-2QEPMELQ.cjs} +13 -13
- package/dist/{actionExecutor-PLQJZLZV.js → actionExecutor-6NCCORRB.js} +12 -12
- package/dist/add-dir-KFUHSIR2.cjs +11 -0
- package/dist/{add-dir-HCERJDBR.js → add-dir-MM2BM2Z2.js} +2 -2
- package/dist/agent-DUIYLIVN.js +132 -0
- package/dist/agent-YYEHGDAK.cjs +132 -0
- package/dist/agents-GBGG4CW7.cjs +19 -0
- package/dist/agents-ZH34C72F.js +19 -0
- package/dist/agents-new-ERXLS7SB.cjs +17 -0
- package/dist/{agents-new-7GAQ25EK.js → agents-new-EVTGPTA4.js} +6 -6
- package/dist/{autoSkill-66PKCYTW.js → autoSkill-HEWKJ5JV.js} +2 -2
- package/dist/autoSkill-YL6PN6AV.cjs +20 -0
- package/dist/automode-4BJ7FNPL.cjs +10 -0
- package/dist/{automode-BUF3VGXU.js → automode-S4U7A7Q2.js} +2 -2
- package/dist/chrome-45ZXHL5N.cjs +22 -0
- package/dist/{chrome-Y3T7EIHG.js → chrome-BBSRVG6S.js} +2 -2
- package/dist/chrome-IFVZRHAT.cjs +50 -0
- package/dist/chrome-MYE6DNA2.js +22 -0
- package/dist/{chunk-45CHNQM6.cjs → chunk-24CEJYEG.cjs} +93 -31
- package/dist/{chunk-6JWCGQJU.cjs → chunk-255GIVM2.cjs} +6 -6
- package/dist/{chunk-D546G7DA.cjs → chunk-2BDSR2OW.cjs} +98 -75
- package/dist/{chunk-PGFLPURU.js → chunk-2BPIR7LA.js} +121 -4
- package/dist/{chunk-AOKXYGBQ.cjs → chunk-2NY7OHBF.cjs} +41 -26
- package/dist/chunk-2WUNHTXL.js +303 -0
- package/dist/{chunk-PQBYFEBL.cjs → chunk-34B6ZO6W.cjs} +124 -7
- package/dist/{chunk-5JTTM5SC.js → chunk-3BJN7GAH.js} +1 -1
- package/dist/{chunk-3UC6DMFI.cjs → chunk-3CAXECWJ.cjs} +15 -15
- package/dist/{chunk-YWH55BWK.cjs → chunk-3CBYUBZC.cjs} +6 -9
- package/dist/chunk-3DF3GZQ7.js +277 -0
- package/dist/{chunk-KASXKDF2.cjs → chunk-3JURXAL6.cjs} +58 -7
- package/dist/{chunk-JV5HVCHU.cjs → chunk-3KWAP2Y3.cjs} +88 -9
- package/dist/{chunk-WPE2XHVX.js → chunk-3MCK6UBL.js} +1 -1
- package/dist/{chunk-U2QUMKCB.js → chunk-3TH7IK4M.js} +62 -9
- package/dist/{chunk-YXM6SA7P.js → chunk-3V77OB3W.js} +3 -3
- package/dist/{chunk-MZN6JBRZ.cjs → chunk-3Y5UEK7K.cjs} +4 -4
- package/dist/{chunk-BP37FVBM.js → chunk-4GPPSBEZ.js} +3 -3
- package/dist/{chunk-4XVLNOFA.js → chunk-5CMBAJ6K.js} +20 -3
- package/dist/{chunk-PNIAIOMZ.cjs → chunk-5YRXFBYZ.cjs} +35 -6
- package/dist/chunk-6AC2TT26.js +156 -0
- package/dist/{chunk-PSAH4ZQB.cjs → chunk-6EIQ6A6U.cjs} +2 -2
- package/dist/{chunk-YQDI753V.js → chunk-6HSEDXVF.js} +4 -4
- package/dist/{chunk-O5GI6SR3.js → chunk-6NUXK62F.js} +1 -1
- package/dist/{chunk-HVCIB4SW.cjs → chunk-6TGCAPYH.cjs} +62 -9
- package/dist/{chunk-HZWU6IO3.js → chunk-6W3SZCSP.js} +2 -5
- package/dist/{chunk-Q3BS6FPM.js → chunk-73LV3DDZ.js} +4 -4
- package/dist/{chunk-ZNGRLCFQ.js → chunk-7BGGLIQF.js} +83 -1
- package/dist/{chunk-ZNYZB7XY.cjs → chunk-7EEK7CRR.cjs} +83 -1
- package/dist/{chunk-HK5A54AV.cjs → chunk-7TO3PDMV.cjs} +48 -4
- package/dist/chunk-7UU22RSH.cjs +277 -0
- package/dist/{chunk-XNIMSVS6.cjs → chunk-A3GAM6FM.cjs} +11 -11
- package/dist/{chunk-W5QLA6WP.cjs → chunk-A7DJU75T.cjs} +8 -8
- package/dist/{chunk-7XTUL7ZD.cjs → chunk-AAAO4ERQ.cjs} +9 -9
- package/dist/{chunk-M5DK524Z.js → chunk-AAJLMP57.js} +2 -2
- package/dist/chunk-ABR756QN.js +529 -0
- package/dist/{chunk-OIGYWOL6.js → chunk-APFGDIPD.js} +3 -1
- package/dist/{chunk-PTTZI4QZ.js → chunk-APQYRMYL.js} +4 -4
- package/dist/{chunk-CO2AADYU.cjs → chunk-AZKOIF2G.cjs} +55 -17
- package/dist/{chunk-P6SLT2F4.cjs → chunk-AZLHUPNC.cjs} +2 -2
- package/dist/chunk-B55VCYSQ.cjs +30 -0
- package/dist/{chunk-JMJRFSNJ.js → chunk-BLQUMSM3.js} +1 -1
- package/dist/{chunk-MGNXABSU.cjs → chunk-BXKPX6K4.cjs} +9 -9
- package/dist/{chunk-MQQH4XQH.cjs → chunk-C66FN2LP.cjs} +4 -4
- package/dist/{chunk-CECH6QQP.js → chunk-CH7KUFAS.js} +10 -10
- package/dist/{chunk-PIXQ2AVM.cjs → chunk-CILSXOPI.cjs} +17 -17
- package/dist/{chunk-IEPLQ47J.js → chunk-CM24K6ZT.js} +89 -12
- package/dist/chunk-CMEZ42F2.cjs +303 -0
- package/dist/{chunk-X5P6QQOB.cjs → chunk-CNQKIWIS.cjs} +100 -23
- package/dist/{chunk-AQ5PVHOC.cjs → chunk-CSUGNNJY.cjs} +4 -3
- package/dist/{chunk-QRQF3556.js → chunk-D6HB3H3L.js} +25 -10
- package/dist/{chunk-XZVDYC5U.js → chunk-D7AYKVKW.js} +2 -2
- package/dist/{chunk-3UHRCHKB.cjs → chunk-DLCXWOWT.cjs} +23 -23
- package/dist/{chunk-CK4HAHVY.cjs → chunk-DMM2BKSV.cjs} +118 -25
- package/dist/{chunk-SPQ7QIQ6.js → chunk-DW3DPV77.js} +1 -1
- package/dist/chunk-ECQD2QC3.cjs +33 -0
- package/dist/{chunk-SNDDZG5H.js → chunk-EEYOS3UC.js} +90 -70
- package/dist/{chunk-DGBPWODD.js → chunk-EF2EN5CR.js} +2 -2
- package/dist/{chunk-M7B7RRBK.cjs → chunk-EFXFURDY.cjs} +138 -51
- package/dist/chunk-EK34UZPB.cjs +40 -0
- package/dist/{chunk-CRTCZ4WL.cjs → chunk-FJR6EZLO.cjs} +3834 -2337
- package/dist/{chunk-TYBPTKFT.js → chunk-FPO7YNPQ.js} +1 -1
- package/dist/{chunk-X3TI5TJJ.js → chunk-FS4I6BNR.js} +1 -1
- package/dist/{chunk-WNJXIACY.js → chunk-FSJ2MNOC.js} +3 -3
- package/dist/{chunk-44ZWOBTI.js → chunk-GEHZMC4G.js} +12 -9
- package/dist/{chunk-Y5BDE24P.cjs → chunk-GO6C2RAR.cjs} +3 -0
- package/dist/{chunk-XW3XCK4E.cjs → chunk-GSMR6V36.cjs} +4 -4
- package/dist/{chunk-H426KOGY.js → chunk-GSZWATME.js} +1 -1
- package/dist/{chunk-S5JNQIGL.cjs → chunk-GYLGCR6F.cjs} +5 -5
- package/dist/{chunk-ONVYXTUT.cjs → chunk-H3OOWNYQ.cjs} +3 -3
- package/dist/{chunk-V5ELP2XE.js → chunk-H65446XW.js} +110 -15
- package/dist/{chunk-LANGD5CO.js → chunk-H7HXRRHK.js} +45 -1
- package/dist/{chunk-RBXBH6EB.cjs → chunk-HN2JTDN5.cjs} +17 -17
- package/dist/{chunk-SOVR7S3T.cjs → chunk-HNXUZ5OY.cjs} +2 -2
- package/dist/{chunk-AZ47LKD5.cjs → chunk-HOYT3E65.cjs} +3 -3
- package/dist/{chunk-P4FUTSVK.js → chunk-HTPY5ESD.js} +3 -3
- package/dist/{chunk-5SFV2NCY.cjs → chunk-HVLWH2AF.cjs} +10 -10
- package/dist/{chunk-VQHSYAPZ.cjs → chunk-HZTEU4W5.cjs} +62 -93
- package/dist/{chunk-4XFHP2SN.cjs → chunk-I5T7LPFP.cjs} +7 -7
- package/dist/{chunk-ZPLCAXJW.js → chunk-IB5CJXE7.js} +7 -7
- package/dist/{chunk-KM7R5YPS.cjs → chunk-INNXFLDR.cjs} +9 -6
- package/dist/{chunk-2ESQR35E.cjs → chunk-JFLEP3T7.cjs} +10 -10
- package/dist/chunk-JJGDOBFL.js +40 -0
- package/dist/{chunk-5A7ZL64N.js → chunk-JSU46T6K.js} +1 -1
- package/dist/{chunk-NB6M6ESM.js → chunk-K6WN6BT4.js} +1 -1
- package/dist/{chunk-QQ64HEHP.cjs → chunk-KIQH3SMT.cjs} +34 -31
- package/dist/{chunk-MANJ67D3.js → chunk-KPRXHIE2.js} +52 -83
- package/dist/{chunk-6HF6XSCC.js → chunk-LIO3RX2Z.js} +2 -2
- package/dist/{chunk-NZ3ZWLUW.js → chunk-LOSXLH7P.js} +109 -16
- package/dist/{chunk-NZ7GCK7Y.cjs → chunk-LSOR72PB.cjs} +23 -23
- package/dist/{chunk-6AYJCDTA.js → chunk-MA3AVDCC.js} +47 -9
- package/dist/{chunk-PZZMIYII.js → chunk-ME3S2WIR.js} +3 -3
- package/dist/{chunk-2IW5YFJ4.js → chunk-NC2I2M4P.js} +4 -4
- package/dist/{chunk-AE2ILW25.cjs → chunk-NC4A4LVC.cjs} +13 -13
- package/dist/{chunk-EEHWALXA.js → chunk-NGEK5FCJ.js} +85 -3
- package/dist/{chunk-MMKZSJUN.js → chunk-NKW6CHXQ.js} +1 -1
- package/dist/{chunk-JB3JCYBJ.js → chunk-NOWCRKP2.js} +4 -3
- package/dist/{chunk-3ZOOH44N.js → chunk-NUB2LMB6.js} +2 -2
- package/dist/chunk-O246MKIW.cjs +267 -0
- package/dist/{chunk-SRMGWMQO.js → chunk-OGFWL2PS.js} +1 -1
- package/dist/{chunk-YISPVAXO.cjs → chunk-ONNGAR6W.cjs} +340 -597
- package/dist/{chunk-7WAUCLLQ.js → chunk-OOFR6A62.js} +33 -4
- package/dist/{chunk-4E7SHPNQ.js → chunk-OZ7FHO7J.js} +2 -2
- package/dist/{chunk-NV6LCD2I.cjs → chunk-P5EWGUI2.cjs} +109 -27
- package/dist/{chunk-YC5OBZQU.js → chunk-P6BQJPAI.js} +41 -18
- package/dist/{chunk-SHRLFX6F.js → chunk-PG2JIU5M.js} +57 -6
- package/dist/{chunk-6OECOAK5.cjs → chunk-PI27G2ED.cjs} +25 -8
- package/dist/{chunk-TR6NECEZ.js → chunk-PI7LRPL6.js} +1 -1
- package/dist/{chunk-GAOPJ5S3.cjs → chunk-PMPEC5HN.cjs} +18 -15
- package/dist/{chunk-5GCQ5UMV.cjs → chunk-PYUP7AKY.cjs} +14 -14
- package/dist/{chunk-S5QKRA2V.js → chunk-QC5Z3ZT5.js} +2 -2
- package/dist/chunk-QDO4L2A7.cjs +156 -0
- package/dist/{chunk-LFDPTJYF.cjs → chunk-QDXRI5AM.cjs} +1 -1
- package/dist/{chunk-26G7YGOW.js → chunk-QVXMSQOG.js} +84 -21
- package/dist/{chunk-SVVP4UUZ.cjs → chunk-R4UKBKDY.cjs} +11 -11
- package/dist/{chunk-HG3ZASBH.cjs → chunk-R75AWII3.cjs} +112 -17
- package/dist/{chunk-TE4SYTWR.cjs → chunk-RD5PLUIX.cjs} +8 -8
- package/dist/{chunk-FFHSCM5M.js → chunk-RGB34CV5.js} +3 -3
- package/dist/{chunk-SY2P3Z5W.cjs → chunk-RJCZLFHE.cjs} +96 -32
- package/dist/{chunk-22SCR3EV.cjs → chunk-RKWNM2BJ.cjs} +2 -2
- package/dist/{chunk-FBQJZKFX.js → chunk-RMVONICR.js} +3 -3
- package/dist/{chunk-PY73W5MQ.cjs → chunk-RPSYRJL7.cjs} +10 -4
- package/dist/{chunk-HXHE2KAO.js → chunk-RWKU2X7O.js} +7 -4
- package/dist/{chunk-NQZH5CR2.cjs → chunk-RZLEGVMH.cjs} +102 -5
- package/dist/{chunk-KMP6Y3LJ.js → chunk-S2L3Y677.js} +1 -1
- package/dist/{chunk-GSDV75A5.js → chunk-S7KVUIOS.js} +1 -1
- package/dist/{chunk-7PT646AL.cjs → chunk-SACJJ6NO.cjs} +5 -3
- package/dist/{chunk-LEZEWKPA.js → chunk-SJQU2ZFR.js} +96 -32
- package/dist/{chunk-65LRPW5W.js → chunk-SKAQKQFF.js} +12 -2
- package/dist/chunk-T4DXP5OP.js +30 -0
- package/dist/{chunk-EYHKL4QC.js → chunk-T6FTB6K2.js} +1 -1
- package/dist/{chunk-DNSD7DVJ.js → chunk-T6N6GRFT.js} +13 -10
- package/dist/{chunk-575PXZX7.js → chunk-TJFKA6A7.js} +82 -3
- package/dist/{chunk-HSWWM6AM.js → chunk-TJZUPS4Z.js} +34 -291
- package/dist/{chunk-DHUQZ53B.cjs → chunk-TLKHZ425.cjs} +2 -2
- package/dist/{chunk-VLGGMQUN.cjs → chunk-TQ24NLXO.cjs} +6 -6
- package/dist/{chunk-LUMV3DB2.js → chunk-TWBAU46X.js} +1 -1
- package/dist/{chunk-EA2MS25U.cjs → chunk-TZB5XADL.cjs} +4 -4
- package/dist/{chunk-U6PLSPMD.cjs → chunk-UAYXZXWU.cjs} +4 -4
- package/dist/{chunk-OV3T5MUH.cjs → chunk-UKBFNBDO.cjs} +11 -11
- package/dist/{chunk-SZD45IDG.js → chunk-UMJYX5KD.js} +101 -4
- package/dist/{chunk-B76FJKEJ.cjs → chunk-USKYTHDL.cjs} +69 -18
- package/dist/{chunk-NZQFKXM3.cjs → chunk-VAJUSZMC.cjs} +15 -15
- package/dist/{chunk-SDLY4X3G.js → chunk-VGQG4NBJ.js} +2 -2
- package/dist/{chunk-KWXGDSYT.js → chunk-VLUIVJ3J.js} +58 -7
- package/dist/{chunk-KJ26T7GM.cjs → chunk-VOBINVMV.cjs} +105 -42
- package/dist/{chunk-C5QIQQ37.js → chunk-VSHKKCSH.js} +16 -5
- package/dist/{chunk-L46OUKW5.cjs → chunk-VSZU3MGA.cjs} +28 -17
- package/dist/{chunk-YFXTE422.cjs → chunk-VWHAUB77.cjs} +8 -3
- package/dist/{chunk-UWZ4G3SQ.js → chunk-VXGYFX45.js} +4 -4
- package/dist/{chunk-C46B72VK.js → chunk-WH6YUQDB.js} +141 -54
- package/dist/{chunk-SFFEKZGC.js → chunk-WQ6TD55V.js} +2 -2
- package/dist/{chunk-7PJKTSRN.js → chunk-WQWECXTY.js} +3 -3
- package/dist/{chunk-DSSCERHI.cjs → chunk-WVDJUJH6.cjs} +2 -2
- package/dist/{chunk-JPFRI4L4.js → chunk-X24VIVDZ.js} +210 -26
- package/dist/{chunk-7IRQ7JEH.js → chunk-X4NRTLXD.js} +7 -1
- package/dist/{chunk-7MY4JHER.js → chunk-X53SHYCG.js} +2 -2
- package/dist/{chunk-RFUKZIJF.cjs → chunk-XB2Z4ZAK.cjs} +5 -5
- package/dist/{chunk-WJYFLQ7G.cjs → chunk-Y47OJGLB.cjs} +3 -3
- package/dist/{chunk-HC2Q6A3E.cjs → chunk-Y4MN27V3.cjs} +361 -177
- package/dist/{chunk-ZK6HOR62.js → chunk-YEHFYZFU.js} +7 -2
- package/dist/{chunk-FFBDRUO5.cjs → chunk-YICIUY23.cjs} +1 -1
- package/dist/{chunk-63ANVAOJ.cjs → chunk-YMXYC777.cjs} +3 -3
- package/dist/{chunk-X7XMITIL.cjs → chunk-Z3GRWK6O.cjs} +8 -8
- package/dist/{chunk-3ICORF7M.cjs → chunk-Z5GG2KSL.cjs} +4 -4
- package/dist/{chunk-I2ZK3AOD.js → chunk-ZER7DYQK.js} +2 -2
- package/dist/{chunk-V3SZLWEQ.cjs → chunk-ZFDXZEZJ.cjs} +11 -11
- package/dist/{chunk-QBYGMMDD.js → chunk-ZFV4HJA6.js} +66 -4
- package/dist/chunk-ZHMYTI5D.cjs +529 -0
- package/dist/{chunk-4567QNRB.js → chunk-ZLR2TFBC.js} +3 -0
- package/dist/{chunk-OCATAKXV.cjs → chunk-ZTWNU5QZ.cjs} +20 -20
- package/dist/{chunk-CCIDL4SA.js → chunk-ZVLVLDYN.js} +2915 -1418
- package/dist/clear-AJGXD2BB.cjs +12 -0
- package/dist/{clear-Y5TO3RZA.js → clear-HAHDSWKW.js} +3 -3
- package/dist/communityInstaller-IRR6M3N6.cjs +22 -0
- package/dist/{communityInstaller-RVL4STPS.js → communityInstaller-OLKEUGMX.js} +5 -5
- package/dist/completion-G7Z436TF.cjs +17 -0
- package/dist/{completion-SE3XYG74.js → completion-ZS3AXJ6A.js} +4 -4
- package/dist/{config-7KPHKFTP.js → config-OWYAQPCX.js} +5 -4
- package/dist/config-W2BHT2QE.cjs +22 -0
- package/dist/{constants-EJFAWJQI.js → constants-AS6K67AA.js} +5 -3
- package/dist/constants-B4W5BT7F.cjs +23 -0
- package/dist/{export-BJVIDZC4.js → export-5HIU3KMD.js} +4 -4
- package/dist/export-GFD32UY2.cjs +15 -0
- package/dist/{extractSessionMemories-A2JX5WJ2.js → extractSessionMemories-K6ZVAW2F.js} +1 -1
- package/dist/{extractSessionMemories-XL3MS37F.cjs → extractSessionMemories-LLOIJR5U.cjs} +2 -2
- package/dist/feature-KP74CZ3F.cjs +14 -0
- package/dist/{feature-V4JF5TNJ.js → feature-OPNVMB2E.js} +2 -2
- package/dist/features-LT55MURX.cjs +24 -0
- package/dist/features-ZDIU26WX.js +24 -0
- package/dist/feedback-7WTJFQ6S.js +18 -0
- package/dist/feedback-CEOJ3453.cjs +18 -0
- package/dist/go-2CY5SZNR.js +16 -0
- package/dist/go-O2CSQON4.cjs +16 -0
- package/dist/goal-DL2N2AWT.cjs +16 -0
- package/dist/goal-IJS7VZSG.js +16 -0
- package/dist/help-RNOGDEBA.cjs +12 -0
- package/dist/{help-MLIROWKM.js → help-TCWD2IRH.js} +2 -2
- package/dist/{history-GQJ6RZD6.js → history-ATOR5OQV.js} +2 -2
- package/dist/history-UUSGX2AL.cjs +14 -0
- package/dist/{hooks-PPFHCF7T.js → hooks-R3Z5QKUP.js} +5 -5
- package/dist/hooks-RWM5UY67.cjs +18 -0
- package/dist/{i18n-Q7UZJRPL.js → i18n-4QI4TD4I.js} +1 -1
- package/dist/i18n-MFAEU5RV.cjs +33 -0
- package/dist/{ide-BUSVE54P.js → ide-6PBTCCUQ.js} +4 -4
- package/dist/ide-UE3G7NMQ.cjs +15 -0
- package/dist/{import-C7S6UJMW.cjs → import-2IG76KAN.cjs} +6 -4
- package/dist/{import-U47DXCA7.js → import-E47QL4DW.js} +2 -2
- package/dist/import-NQDNBFUL.cjs +10 -0
- package/dist/{import-3VBKI6BN.js → import-VQIHGJWS.js} +6 -4
- package/dist/index.cjs +444 -334
- package/dist/index.d.cts +38 -0
- package/dist/index.d.ts +38 -0
- package/dist/index.js +324 -214
- package/dist/init-DX3RDGDT.cjs +10 -0
- package/dist/{init-Q2O4R42R.js → init-Q54OAAFZ.js} +2 -2
- package/dist/{inputPrompt-3CFZDUBH.js → inputPrompt-V2VBDRM7.js} +2 -2
- package/dist/inputPrompt-WVGVWAHS.cjs +90 -0
- package/dist/language-I6KXAOXD.js +23 -0
- package/dist/language-XMIVOH5E.cjs +23 -0
- package/dist/learn-JPVVGTKU.js +23 -0
- package/dist/learn-NLSHI2MZ.cjs +23 -0
- package/dist/login-NABQYLYC.cjs +28 -0
- package/dist/login-XPOVFSWN.js +28 -0
- package/dist/logout-HNHCGB4Q.js +25 -0
- package/dist/logout-SKGDXJSW.cjs +25 -0
- package/dist/{mcp-AH3MMUBU.js → mcp-EN73YFGZ.js} +8 -7
- package/dist/mcp-TADZCPJQ.cjs +22 -0
- package/dist/{mcp-install-IA4ZS2SV.cjs → mcp-install-2GKWWBAS.cjs} +14 -13
- package/dist/{mcp-install-222PCKSW.js → mcp-install-3TBTVSHW.js} +9 -8
- package/dist/memory-GRXFTDIN.cjs +10 -0
- package/dist/{memory-VB46T5H3.js → memory-K2P3CDCH.js} +2 -2
- package/dist/{model-SJJG64AM.js → model-DEG22OWA.js} +2 -2
- package/dist/model-OSD74T7Z.cjs +10 -0
- package/dist/new-4NWBOATU.cjs +12 -0
- package/dist/{new-ERZ5C6CN.js → new-KJAP2MB6.js} +3 -3
- package/dist/{onboarding-ZQXMPSMJ.js → onboarding-2U5WE2OA.js} +17 -14
- package/dist/onboarding-5DZFCO5Q.cjs +39 -0
- package/dist/permissions-KY5I6YQ3.cjs +10 -0
- package/dist/{permissions-7ACNFK7A.js → permissions-TKYON7PP.js} +2 -2
- package/dist/{plan-YYUAXPTL.js → plan-DYHHLZSS.js} +1 -1
- package/dist/plan-PYKP652W.cjs +13 -0
- package/dist/quit-GSKJL42O.js +14 -0
- package/dist/quit-TQSRTBUT.cjs +14 -0
- package/dist/{registry-4DXUDKJN.js → registry-EZ4V4TUQ.js} +1339 -1
- package/dist/{registry-UEO3ETZ7.cjs → registry-LCWYI4IB.cjs} +1378 -40
- package/dist/resume-4VWJXARX.cjs +17 -0
- package/dist/{resume-XSXZMDMD.js → resume-TLHWWWFN.js} +5 -5
- package/dist/{review-QHP2KP4Q.js → review-CSK4IYTO.js} +1 -1
- package/dist/review-XLJEUH5K.cjs +9 -0
- package/dist/{rpc-XH7QLN4H.js → rpc-3DLQBDWU.js} +151 -124
- package/dist/{rpc-YF54T7JU.cjs → rpc-O36WUU3L.cjs} +169 -142
- package/dist/search-DSX2CY4A.cjs +22 -0
- package/dist/search-I3QUDUQL.js +22 -0
- package/dist/sessionBranching-DVNOUWJT.cjs +19 -0
- package/dist/sessionBranching-FKV4CR36.js +19 -0
- package/dist/sessions-3JUOT3ED.cjs +10 -0
- package/dist/{sessions-NJYHJOEL.js → sessions-VWMDIPOS.js} +2 -2
- package/dist/{settings-ZXUQH3DO.js → settings-FT2LZZUV.js} +11 -8
- package/dist/settings-RL4KNWHB.cjs +45 -0
- package/dist/setup-HQEJVOYT.js +32 -0
- package/dist/setup-MN54LKOL.cjs +32 -0
- package/dist/share-BUAFZNBX.cjs +17 -0
- package/dist/{share-WFAGZ5PY.js → share-CGB6MAVJ.js} +6 -6
- package/dist/skills/builtin/code-reviewer/SKILL.md +64 -0
- package/dist/skills/builtin/goal-writer/SKILL.md +124 -0
- package/dist/{skills-NBTNDVAY.js → skills-7DKR3HRZ.js} +7 -7
- package/dist/{skills-OB6RDW7D.js → skills-BBBENOEY.js} +9 -9
- package/dist/skills-OQM7IHAF.cjs +29 -0
- package/dist/{skills-ZROBG3RZ.cjs → skills-RA2PKL63.cjs} +9 -9
- package/dist/{skills-install-ILX6QVEF.cjs → skills-install-D7K476SL.cjs} +15 -15
- package/dist/{skills-install-BHTIEMKH.js → skills-install-T4SOKJSL.js} +8 -8
- package/dist/{skills-new-YMRP2HNO.js → skills-new-S33NGEU3.js} +6 -6
- package/dist/skills-new-UVYH53MD.cjs +18 -0
- package/dist/slashCommands-MWOUDSQP.js +111 -0
- package/dist/slashCommands-XASURUTV.cjs +111 -0
- package/dist/squad-PIIYDFVH.cjs +15 -0
- package/dist/squad-VHYOVEJP.js +15 -0
- package/dist/status-GHFTXQBL.js +25 -0
- package/dist/status-WXMIJIU3.cjs +25 -0
- package/dist/statusline-2K7AC6ZQ.js +21 -0
- package/dist/statusline-GROI4HOC.cjs +21 -0
- package/dist/sync-254WF6JI.cjs +42 -0
- package/dist/sync-2DIZN4EH.cjs +24 -0
- package/dist/{sync-OCJN4ZSO.js → sync-J6I2ZUKQ.js} +5 -3
- package/dist/{sync-7C25MOT2.js → sync-Z3LVSEEV.js} +8 -6
- package/dist/{teammate-D77B6QRT.cjs → teammate-EXR76PEQ.cjs} +5 -5
- package/dist/{teammate-EZCMHOIL.js → teammate-K4DAOFEQ.js} +5 -5
- package/dist/theme-MVQDSU47.js +23 -0
- package/dist/theme-QAKEYWJG.cjs +23 -0
- package/dist/ui/questionModal.cjs +5 -5
- package/dist/ui/questionModal.js +4 -4
- package/dist/{undo-GNUTFXCW.js → undo-5AU47JHF.js} +2 -2
- package/dist/undo-ME6WKUXZ.cjs +10 -0
- package/dist/{usage-QSTNSDAO.js → usage-QTKO2YMD.js} +6 -5
- package/dist/usage-TYNJKVER.cjs +25 -0
- package/package.json +4 -3
- package/dist/AgentRegistry-GOV7FN2O.js +0 -10
- package/dist/AgentRegistry-J2C6JBZ3.cjs +0 -10
- package/dist/CommunitySkillsCache-22BB3J6H.cjs +0 -8
- package/dist/LearnAdvisor-KKEQ5QCV.js +0 -9
- package/dist/LearnAdvisor-Q7RAYLPF.cjs +0 -9
- package/dist/MemoryManager-PMNAEZMB.cjs +0 -8
- package/dist/MemoryManager-QZRLTUB5.js +0 -8
- package/dist/NVIDIAProvider-C3FWQOBZ.cjs +0 -14
- package/dist/PermissionManager-URCNP5EC.cjs +0 -11
- package/dist/ProviderFactory-56N3ECE4.cjs +0 -12
- package/dist/SessionManager-2IZGWASQ.cjs +0 -10
- package/dist/SkillsRegistry-GMRVONOQ.cjs +0 -9
- package/dist/SubAgent-4GOR2FIJ.js +0 -13
- package/dist/SubAgent-ZJMDH4FI.cjs +0 -13
- package/dist/add-dir-BTAD5OZS.cjs +0 -11
- package/dist/agent-B3EVT7NN.cjs +0 -126
- package/dist/agent-SATQ3WZ3.js +0 -126
- package/dist/agents-44CRJGM7.cjs +0 -18
- package/dist/agents-NN4ZAJ7R.js +0 -18
- package/dist/agents-new-6D6G4QS6.cjs +0 -17
- package/dist/autoSkill-VQLGBELN.cjs +0 -20
- package/dist/automode-45DWV4TN.cjs +0 -10
- package/dist/chrome-Q2U73HZB.cjs +0 -50
- package/dist/chrome-Q54OALOK.cjs +0 -21
- package/dist/chrome-ZNJ46OYW.js +0 -21
- package/dist/chunk-JCUHCH37.cjs +0 -247
- package/dist/chunk-VKOXFT4L.cjs +0 -23
- package/dist/clear-QJXU25IF.cjs +0 -12
- package/dist/communityInstaller-LXMVKVAV.cjs +0 -22
- package/dist/completion-JX4T2ONW.cjs +0 -17
- package/dist/config-3224PRW4.cjs +0 -21
- package/dist/constants-MCCGUU5F.cjs +0 -21
- package/dist/export-KU4557HK.cjs +0 -15
- package/dist/feature-K3LG5IJP.cjs +0 -14
- package/dist/features-5OJTLKS7.js +0 -23
- package/dist/features-VCBJQXCX.cjs +0 -23
- package/dist/feedback-D4437VE4.js +0 -18
- package/dist/feedback-VZPEHGFY.cjs +0 -18
- package/dist/go-X4E6BCD6.js +0 -12
- package/dist/go-XREVFS5I.cjs +0 -12
- package/dist/goal-4M3J6JS2.cjs +0 -16
- package/dist/goal-EI66BV7W.js +0 -16
- package/dist/help-GGFS7WHY.cjs +0 -12
- package/dist/history-J4LUIOSI.cjs +0 -14
- package/dist/hooks-FSRIUS6A.cjs +0 -18
- package/dist/i18n-CI6VFXL5.cjs +0 -33
- package/dist/ide-YR27BPGM.cjs +0 -15
- package/dist/import-DBK4OCDF.cjs +0 -10
- package/dist/init-OXTYS72D.cjs +0 -10
- package/dist/inputPrompt-JMACL4EB.cjs +0 -90
- package/dist/language-EK3M6UBV.cjs +0 -22
- package/dist/language-Q3RUGGOW.js +0 -22
- package/dist/learn-3DSX7DYG.cjs +0 -23
- package/dist/learn-OPOH5L43.js +0 -23
- package/dist/login-GST7MWXJ.cjs +0 -27
- package/dist/login-Q7DZKAX4.js +0 -27
- package/dist/logout-2G7OUK7I.cjs +0 -24
- package/dist/logout-FNBBL2UI.js +0 -24
- package/dist/mcp-DW7R63IB.cjs +0 -21
- package/dist/memory-6NX3DAIY.cjs +0 -10
- package/dist/model-64NAELFS.cjs +0 -10
- package/dist/new-DU5SOOOY.cjs +0 -12
- package/dist/onboarding-2U2BV2KE.cjs +0 -36
- package/dist/permissions-GSNNV7RJ.cjs +0 -10
- package/dist/plan-XEJMOT55.cjs +0 -13
- package/dist/quit-WY6T267G.js +0 -10
- package/dist/quit-XIRE2KRE.cjs +0 -10
- package/dist/resume-RQZ3WXBP.cjs +0 -17
- package/dist/review-UWHWQHCB.cjs +0 -9
- package/dist/search-VXXFGZWU.cjs +0 -21
- package/dist/search-YAWGX7P7.js +0 -21
- package/dist/sessions-OSG3UJEZ.cjs +0 -10
- package/dist/settings-SO2UIGWV.cjs +0 -42
- package/dist/setup-KG7EGKF5.js +0 -30
- package/dist/setup-RSOPCQ57.cjs +0 -30
- package/dist/share-ZU3SGACF.cjs +0 -17
- package/dist/skills-KBVAQAD2.cjs +0 -29
- package/dist/skills-new-B45VQ2PP.cjs +0 -18
- package/dist/slashCommands-53VYIBJU.js +0 -105
- package/dist/slashCommands-BG2RGGZ6.cjs +0 -105
- package/dist/status-CQ2IUOVK.cjs +0 -24
- package/dist/status-E7IGNVPC.js +0 -24
- package/dist/sync-XRP46IVG.cjs +0 -40
- package/dist/sync-ZMFVE7T4.cjs +0 -22
- package/dist/theme-KKRDE6P7.cjs +0 -22
- package/dist/theme-XF7XIWBQ.js +0 -22
- package/dist/undo-U4KN7QQM.cjs +0 -10
- package/dist/usage-YDEMQBNQ.cjs +0 -24
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
AUTOHAND_PATHS
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-PG2JIU5M.js";
|
|
4
4
|
|
|
5
5
|
// src/session/SessionManager.ts
|
|
6
6
|
import fs from "fs-extra";
|
|
@@ -42,7 +42,8 @@ var SessionManager = class {
|
|
|
42
42
|
return session;
|
|
43
43
|
}
|
|
44
44
|
async loadSession(sessionId) {
|
|
45
|
-
const
|
|
45
|
+
const resolvedSessionId = await this.resolveSessionReference(sessionId);
|
|
46
|
+
const sessionDir = path.join(this.sessionsDir, resolvedSessionId);
|
|
46
47
|
if (!await fs.pathExists(sessionDir)) {
|
|
47
48
|
throw new Error(`Session not found: ${sessionId}`);
|
|
48
49
|
}
|
|
@@ -53,6 +54,72 @@ var SessionManager = class {
|
|
|
53
54
|
this.currentSession = session;
|
|
54
55
|
return session;
|
|
55
56
|
}
|
|
57
|
+
async resolveSessionReference(reference) {
|
|
58
|
+
const trimmed = reference.trim();
|
|
59
|
+
if (!trimmed) {
|
|
60
|
+
throw new Error("Session reference is required");
|
|
61
|
+
}
|
|
62
|
+
const asPath = path.resolve(trimmed);
|
|
63
|
+
if (await fs.pathExists(asPath)) {
|
|
64
|
+
const stat = await fs.stat(asPath);
|
|
65
|
+
const sessionDir = stat.isDirectory() ? asPath : path.dirname(asPath);
|
|
66
|
+
const metadataPath = path.join(sessionDir, "metadata.json");
|
|
67
|
+
if (await fs.pathExists(metadataPath)) {
|
|
68
|
+
const metadata = await fs.readJson(metadataPath);
|
|
69
|
+
return metadata.sessionId;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
const directDir = path.join(this.sessionsDir, trimmed);
|
|
73
|
+
if (await fs.pathExists(path.join(directDir, "metadata.json"))) {
|
|
74
|
+
return trimmed;
|
|
75
|
+
}
|
|
76
|
+
await this.loadIndex();
|
|
77
|
+
const candidates = this.index?.sessions.filter((session) => session.id.startsWith(trimmed)) ?? [];
|
|
78
|
+
if (candidates.length === 1) {
|
|
79
|
+
return candidates[0].id;
|
|
80
|
+
}
|
|
81
|
+
if (candidates.length > 1) {
|
|
82
|
+
throw new Error(`Ambiguous session reference: ${reference}`);
|
|
83
|
+
}
|
|
84
|
+
throw new Error(`Session not found: ${reference}`);
|
|
85
|
+
}
|
|
86
|
+
async branchSession(sourceReference, options) {
|
|
87
|
+
const sourceSessionId = await this.resolveSessionReference(sourceReference);
|
|
88
|
+
const sourceSession = await this.loadSession(sourceSessionId);
|
|
89
|
+
const sourceMessages = sourceSession.getMessages();
|
|
90
|
+
const copiedMessages = selectBranchMessages(sourceMessages, options);
|
|
91
|
+
const createdAt = (/* @__PURE__ */ new Date()).toISOString();
|
|
92
|
+
const sessionId = this.generateSessionId();
|
|
93
|
+
const sessionDir = path.join(this.sessionsDir, sessionId);
|
|
94
|
+
await fs.ensureDir(sessionDir);
|
|
95
|
+
const metadata = {
|
|
96
|
+
...sourceSession.metadata,
|
|
97
|
+
sessionId,
|
|
98
|
+
createdAt,
|
|
99
|
+
lastActiveAt: createdAt,
|
|
100
|
+
closedAt: void 0,
|
|
101
|
+
messageCount: copiedMessages.length,
|
|
102
|
+
status: "active",
|
|
103
|
+
exitCode: void 0,
|
|
104
|
+
branch: {
|
|
105
|
+
type: options.type,
|
|
106
|
+
sourceSessionId,
|
|
107
|
+
sourceMessageIndex: options.type === "fork" && copiedMessages.length > 0 ? copiedMessages.length - 1 : void 0,
|
|
108
|
+
sourceUserMessageOrdinal: options.type === "fork" ? options.userMessageOrdinal : void 0,
|
|
109
|
+
createdAt
|
|
110
|
+
}
|
|
111
|
+
};
|
|
112
|
+
const session = new Session(sessionDir, metadata);
|
|
113
|
+
await session.replaceMessages(copiedMessages);
|
|
114
|
+
const sourceState = sourceSession.getState();
|
|
115
|
+
if (sourceState) {
|
|
116
|
+
await session.updateState(sourceState);
|
|
117
|
+
}
|
|
118
|
+
await session.save();
|
|
119
|
+
this.currentSession = session;
|
|
120
|
+
await this.addToIndex(session.metadata);
|
|
121
|
+
return session;
|
|
122
|
+
}
|
|
56
123
|
async listSessions(filter) {
|
|
57
124
|
await this.loadIndex();
|
|
58
125
|
if (!this.index) return [];
|
|
@@ -105,7 +172,16 @@ var SessionManager = class {
|
|
|
105
172
|
async loadIndex() {
|
|
106
173
|
const indexPath = path.join(this.sessionsDir, "index.json");
|
|
107
174
|
if (await fs.pathExists(indexPath)) {
|
|
108
|
-
|
|
175
|
+
try {
|
|
176
|
+
this.index = await fs.readJson(indexPath);
|
|
177
|
+
} catch (error) {
|
|
178
|
+
const backupPath = `${indexPath}.corrupt-${Date.now()}`;
|
|
179
|
+
await fs.move(indexPath, backupPath, { overwrite: true });
|
|
180
|
+
const reason = error instanceof Error ? error.message : String(error);
|
|
181
|
+
console.warn(`Session index was corrupt and has been reset: ${reason}. Backup saved to ${backupPath}`);
|
|
182
|
+
this.index = { sessions: [], byProject: {} };
|
|
183
|
+
await this.saveIndex();
|
|
184
|
+
}
|
|
109
185
|
} else {
|
|
110
186
|
this.index = { sessions: [], byProject: {} };
|
|
111
187
|
}
|
|
@@ -121,7 +197,12 @@ var SessionManager = class {
|
|
|
121
197
|
id: metadata.sessionId,
|
|
122
198
|
projectPath: metadata.projectPath,
|
|
123
199
|
createdAt: metadata.createdAt,
|
|
124
|
-
summary: metadata.summary
|
|
200
|
+
summary: metadata.summary,
|
|
201
|
+
importedFrom: metadata.importedFrom ? {
|
|
202
|
+
source: metadata.importedFrom.source,
|
|
203
|
+
originalId: metadata.importedFrom.originalId
|
|
204
|
+
} : void 0,
|
|
205
|
+
branch: metadata.branch
|
|
125
206
|
});
|
|
126
207
|
if (!this.index.byProject[metadata.projectPath]) {
|
|
127
208
|
this.index.byProject[metadata.projectPath] = [];
|
|
@@ -134,10 +215,31 @@ var SessionManager = class {
|
|
|
134
215
|
const session = this.index.sessions.find((s) => s.id === metadata.sessionId);
|
|
135
216
|
if (session) {
|
|
136
217
|
session.summary = metadata.summary;
|
|
218
|
+
session.branch = metadata.branch;
|
|
137
219
|
}
|
|
138
220
|
await this.saveIndex();
|
|
139
221
|
}
|
|
140
222
|
};
|
|
223
|
+
function selectBranchMessages(messages, options) {
|
|
224
|
+
if (options.type === "clone" || options.userMessageOrdinal === void 0) {
|
|
225
|
+
return [...messages];
|
|
226
|
+
}
|
|
227
|
+
if (!Number.isInteger(options.userMessageOrdinal) || options.userMessageOrdinal < 1) {
|
|
228
|
+
throw new Error("Fork message must be a positive user-message number");
|
|
229
|
+
}
|
|
230
|
+
let seenUserMessages = 0;
|
|
231
|
+
const selected = [];
|
|
232
|
+
for (const message of messages) {
|
|
233
|
+
selected.push(message);
|
|
234
|
+
if (message.role === "user") {
|
|
235
|
+
seenUserMessages += 1;
|
|
236
|
+
if (seenUserMessages === options.userMessageOrdinal) {
|
|
237
|
+
return selected;
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
throw new Error(`User message ${options.userMessageOrdinal} not found`);
|
|
242
|
+
}
|
|
141
243
|
var Session = class {
|
|
142
244
|
sessionDir;
|
|
143
245
|
metadata;
|
|
@@ -147,24 +249,39 @@ var Session = class {
|
|
|
147
249
|
this.sessionDir = sessionDir;
|
|
148
250
|
this.metadata = metadata;
|
|
149
251
|
}
|
|
252
|
+
async ensureSessionDir() {
|
|
253
|
+
await fs.ensureDir(this.sessionDir);
|
|
254
|
+
}
|
|
150
255
|
async append(message) {
|
|
151
256
|
this.messages.push(message);
|
|
152
257
|
this.metadata.messageCount = this.messages.length;
|
|
153
258
|
this.metadata.lastActiveAt = (/* @__PURE__ */ new Date()).toISOString();
|
|
259
|
+
await this.ensureSessionDir();
|
|
154
260
|
const conversationPath = path.join(this.sessionDir, "conversation.jsonl");
|
|
155
261
|
await fs.appendFile(conversationPath, JSON.stringify(message) + "\n");
|
|
156
262
|
await this.save();
|
|
157
263
|
}
|
|
158
264
|
async appendTransient(message) {
|
|
265
|
+
await this.ensureSessionDir();
|
|
159
266
|
const conversationPath = path.join(this.sessionDir, "conversation.jsonl");
|
|
160
267
|
await fs.appendFile(conversationPath, JSON.stringify(message) + "\n");
|
|
161
268
|
}
|
|
269
|
+
async replaceMessages(messages) {
|
|
270
|
+
this.messages = [...messages];
|
|
271
|
+
this.metadata.messageCount = this.messages.length;
|
|
272
|
+
const conversationPath = path.join(this.sessionDir, "conversation.jsonl");
|
|
273
|
+
const content = this.messages.map((message) => JSON.stringify(message)).join("\n");
|
|
274
|
+
await fs.writeFile(conversationPath, content ? `${content}
|
|
275
|
+
` : "");
|
|
276
|
+
}
|
|
162
277
|
async updateState(state) {
|
|
163
278
|
this.state = state;
|
|
279
|
+
await this.ensureSessionDir();
|
|
164
280
|
const statePath = path.join(this.sessionDir, "state.json");
|
|
165
281
|
await fs.writeJson(statePath, state, { spaces: 2 });
|
|
166
282
|
}
|
|
167
283
|
async save() {
|
|
284
|
+
await this.ensureSessionDir();
|
|
168
285
|
const metadataPath = path.join(this.sessionDir, "metadata.json");
|
|
169
286
|
await fs.writeJson(metadataPath, this.metadata, { spaces: 2 });
|
|
170
287
|
}
|
|
@@ -1,28 +1,29 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
|
|
2
2
|
|
|
3
3
|
|
|
4
|
-
var _chunkHG3ZASBHcjs = require('./chunk-HG3ZASBH.cjs');
|
|
5
4
|
|
|
5
|
+
var _chunkR75AWII3cjs = require('./chunk-R75AWII3.cjs');
|
|
6
6
|
|
|
7
|
-
var _chunkS5JNQIGLcjs = require('./chunk-S5JNQIGL.cjs');
|
|
8
7
|
|
|
8
|
+
var _chunkGYLGCR6Fcjs = require('./chunk-GYLGCR6F.cjs');
|
|
9
9
|
|
|
10
|
-
var _chunkCO2AADYUcjs = require('./chunk-CO2AADYU.cjs');
|
|
11
10
|
|
|
11
|
+
var _chunkAZKOIF2Gcjs = require('./chunk-AZKOIF2G.cjs');
|
|
12
12
|
|
|
13
|
-
var _chunkX5P6QQOBcjs = require('./chunk-X5P6QQOB.cjs');
|
|
14
13
|
|
|
14
|
+
var _chunkCNQKIWIScjs = require('./chunk-CNQKIWIS.cjs');
|
|
15
15
|
|
|
16
|
-
var _chunkKASXKDF2cjs = require('./chunk-KASXKDF2.cjs');
|
|
17
16
|
|
|
17
|
+
var _chunk3JURXAL6cjs = require('./chunk-3JURXAL6.cjs');
|
|
18
18
|
|
|
19
|
-
|
|
19
|
+
|
|
20
|
+
var _chunkRJCZLFHEcjs = require('./chunk-RJCZLFHE.cjs');
|
|
20
21
|
|
|
21
22
|
// src/commands/login.ts
|
|
22
23
|
var _chalk = require('chalk'); var _chalk2 = _interopRequireDefault(_chalk);
|
|
23
24
|
var metadata = {
|
|
24
25
|
command: "/login",
|
|
25
|
-
description:
|
|
26
|
+
description: _chunkRJCZLFHEcjs.t.call(void 0, "commands.login.description"),
|
|
26
27
|
implemented: true
|
|
27
28
|
};
|
|
28
29
|
async function openBrowser(url) {
|
|
@@ -69,33 +70,33 @@ function sleep(ms) {
|
|
|
69
70
|
async function login(ctx) {
|
|
70
71
|
const config = ctx.config;
|
|
71
72
|
if (_optionalChain([config, 'optionalAccess', _ => _.auth, 'optionalAccess', _2 => _2.token]) && _optionalChain([config, 'optionalAccess', _3 => _3.auth, 'optionalAccess', _4 => _4.user])) {
|
|
72
|
-
const result = await
|
|
73
|
+
const result = await _chunkGYLGCR6Fcjs.safePrompt.call(void 0, {
|
|
73
74
|
type: "confirm",
|
|
74
75
|
name: "continueLogin",
|
|
75
76
|
message: `Already logged in as ${_chalk2.default.cyan(config.auth.user.email)}. Log in with a different account?`,
|
|
76
77
|
initial: false
|
|
77
78
|
});
|
|
78
79
|
if (!result || !result.continueLogin) {
|
|
79
|
-
console.log(_chalk2.default.gray(
|
|
80
|
+
console.log(_chalk2.default.gray(_chunkRJCZLFHEcjs.t.call(void 0, "commands.login.cancelled")));
|
|
80
81
|
return null;
|
|
81
82
|
}
|
|
82
83
|
}
|
|
83
|
-
const authClient =
|
|
84
|
+
const authClient = _chunkAZKOIF2Gcjs.getAuthClient.call(void 0, );
|
|
84
85
|
console.log(_chalk2.default.gray("Initiating authentication..."));
|
|
85
86
|
const initResult = await authClient.initiateDeviceAuth();
|
|
86
87
|
if (!initResult.success || !initResult.deviceCode || !initResult.userCode) {
|
|
87
|
-
console.log(_chalk2.default.red(
|
|
88
|
+
console.log(_chalk2.default.red(_chunkRJCZLFHEcjs.t.call(void 0, "commands.login.failed", { error: initResult.error || "Unknown error" })));
|
|
88
89
|
return null;
|
|
89
90
|
}
|
|
90
91
|
console.log();
|
|
91
92
|
console.log(_chalk2.default.bold("To sign in, visit:"));
|
|
92
|
-
console.log(_chalk2.default.cyan.underline(initResult.verificationUriComplete || `${
|
|
93
|
+
console.log(_chalk2.default.cyan.underline(initResult.verificationUriComplete || `${_chunk3JURXAL6cjs.AUTH_CONFIG.authorizationUrl}?code=${initResult.userCode}`));
|
|
93
94
|
console.log();
|
|
94
95
|
console.log(_chalk2.default.gray("Or enter this code manually:"));
|
|
95
96
|
console.log(_chalk2.default.bold.yellow(` ${initResult.userCode}`));
|
|
96
97
|
console.log();
|
|
97
98
|
const browserOpened = await openBrowser(
|
|
98
|
-
initResult.verificationUriComplete || `${
|
|
99
|
+
initResult.verificationUriComplete || `${_chunk3JURXAL6cjs.AUTH_CONFIG.authorizationUrl}?code=${initResult.userCode}`
|
|
99
100
|
);
|
|
100
101
|
if (browserOpened) {
|
|
101
102
|
console.log(_chalk2.default.gray("Browser opened. Complete the login in your browser."));
|
|
@@ -106,8 +107,8 @@ async function login(ctx) {
|
|
|
106
107
|
console.log(_chalk2.default.gray("Waiting for authorization..."));
|
|
107
108
|
console.log(_chalk2.default.gray("(Press Ctrl+C to cancel)"));
|
|
108
109
|
const startTime = Date.now();
|
|
109
|
-
const timeout =
|
|
110
|
-
const pollInterval = initResult.interval ? initResult.interval * 1e3 :
|
|
110
|
+
const timeout = _chunk3JURXAL6cjs.AUTH_CONFIG.authTimeout;
|
|
111
|
+
const pollInterval = initResult.interval ? initResult.interval * 1e3 : _chunk3JURXAL6cjs.AUTH_CONFIG.pollInterval;
|
|
111
112
|
let dots = 0;
|
|
112
113
|
const maxDots = 3;
|
|
113
114
|
while (Date.now() - startTime < timeout) {
|
|
@@ -117,7 +118,7 @@ async function login(ctx) {
|
|
|
117
118
|
const pollResult = await authClient.pollDeviceAuth(initResult.deviceCode);
|
|
118
119
|
if (pollResult.status === "authorized" && pollResult.token && pollResult.user) {
|
|
119
120
|
process.stdout.write("\r" + " ".repeat(20) + "\r");
|
|
120
|
-
const expiresAt = new Date(Date.now() +
|
|
121
|
+
const expiresAt = new Date(Date.now() + _chunk3JURXAL6cjs.AUTH_CONFIG.sessionExpiryDays * 24 * 60 * 60 * 1e3).toISOString();
|
|
121
122
|
const updatedConfig = {
|
|
122
123
|
...config,
|
|
123
124
|
auth: {
|
|
@@ -126,9 +127,9 @@ async function login(ctx) {
|
|
|
126
127
|
expiresAt
|
|
127
128
|
}
|
|
128
129
|
};
|
|
129
|
-
await
|
|
130
|
+
await _chunkCNQKIWIScjs.saveConfig.call(void 0, updatedConfig);
|
|
130
131
|
console.log();
|
|
131
|
-
console.log(_chalk2.default.green(
|
|
132
|
+
console.log(_chalk2.default.green(_chunkRJCZLFHEcjs.t.call(void 0, "commands.login.success", { email: pollResult.user.name || pollResult.user.email })));
|
|
132
133
|
console.log();
|
|
133
134
|
if (process.stdin.isTTY && process.stdout.isTTY) {
|
|
134
135
|
await checkAndRestoreSyncData(pollResult.token, pollResult.user.id, updatedConfig);
|
|
@@ -152,11 +153,11 @@ async function login(ctx) {
|
|
|
152
153
|
}
|
|
153
154
|
async function checkAndRestoreSyncData(token, userId, config) {
|
|
154
155
|
try {
|
|
155
|
-
const syncService =
|
|
156
|
+
const syncService = _chunkR75AWII3cjs.createSyncService.call(void 0, {
|
|
156
157
|
authToken: token,
|
|
157
158
|
userId,
|
|
158
159
|
config: {
|
|
159
|
-
...
|
|
160
|
+
..._chunkR75AWII3cjs.DEFAULT_SYNC_CONFIG,
|
|
160
161
|
...config.sync,
|
|
161
162
|
enabled: true
|
|
162
163
|
}
|
|
@@ -167,13 +168,21 @@ async function checkAndRestoreSyncData(token, userId, config) {
|
|
|
167
168
|
if (!remoteManifest || remoteManifest.files.length === 0) {
|
|
168
169
|
return;
|
|
169
170
|
}
|
|
170
|
-
const
|
|
171
|
-
|
|
171
|
+
const memoryFiles = remoteManifest.files.filter((file) => _chunkR75AWII3cjs.isMemorySyncPath.call(void 0, file.path));
|
|
172
|
+
if (memoryFiles.length > 0) {
|
|
173
|
+
await restoreMemorySyncData(syncService, memoryFiles);
|
|
174
|
+
}
|
|
175
|
+
const consentRequiredFiles = remoteManifest.files.filter((file) => !_chunkR75AWII3cjs.isMemorySyncPath.call(void 0, file.path));
|
|
176
|
+
if (consentRequiredFiles.length === 0) {
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
const fileCount = consentRequiredFiles.length;
|
|
180
|
+
const totalSize = consentRequiredFiles.reduce((sum, f) => sum + f.size, 0);
|
|
172
181
|
const sizeStr = formatSize(totalSize);
|
|
173
182
|
console.log(_chalk2.default.cyan(`Found cloud sync data (${fileCount} files, ${sizeStr})`));
|
|
174
|
-
console.log(_chalk2.default.gray("This includes your settings, agents, skills, and
|
|
183
|
+
console.log(_chalk2.default.gray("This includes your settings, agents, skills, sessions, and hooks."));
|
|
175
184
|
console.log();
|
|
176
|
-
const result = await
|
|
185
|
+
const result = await _chunkGYLGCR6Fcjs.safePrompt.call(void 0, {
|
|
177
186
|
type: "confirm",
|
|
178
187
|
name: "restore",
|
|
179
188
|
message: "Would you like to restore your settings from the cloud?",
|
|
@@ -201,6 +210,12 @@ async function checkAndRestoreSyncData(token, userId, config) {
|
|
|
201
210
|
console.log(_chalk2.default.gray("Could not check cloud sync data."));
|
|
202
211
|
}
|
|
203
212
|
}
|
|
213
|
+
async function restoreMemorySyncData(syncService, memoryFiles) {
|
|
214
|
+
try {
|
|
215
|
+
await syncService.forceDownloadPaths(memoryFiles.map((file) => file.path));
|
|
216
|
+
} catch (e4) {
|
|
217
|
+
}
|
|
218
|
+
}
|
|
204
219
|
async function cancellableOperation(fn) {
|
|
205
220
|
const stdin = process.stdin;
|
|
206
221
|
const wasRaw = stdin.isRaw;
|
|
@@ -211,7 +226,7 @@ async function cancellableOperation(fn) {
|
|
|
211
226
|
if (stdin.isTTY && stdin.setRawMode) {
|
|
212
227
|
try {
|
|
213
228
|
stdin.setRawMode(_nullishCoalesce(wasRaw, () => ( false)));
|
|
214
|
-
} catch (
|
|
229
|
+
} catch (e5) {
|
|
215
230
|
}
|
|
216
231
|
}
|
|
217
232
|
};
|
|
@@ -227,7 +242,7 @@ async function cancellableOperation(fn) {
|
|
|
227
242
|
if (stdin.isTTY && stdin.setRawMode) {
|
|
228
243
|
try {
|
|
229
244
|
stdin.setRawMode(true);
|
|
230
|
-
} catch (
|
|
245
|
+
} catch (e6) {
|
|
231
246
|
}
|
|
232
247
|
}
|
|
233
248
|
stdin.on("data", onData);
|
|
@@ -0,0 +1,303 @@
|
|
|
1
|
+
// src/onboarding/agentsGenerator.ts
|
|
2
|
+
var AgentsGenerator = class {
|
|
3
|
+
/**
|
|
4
|
+
* Generate AGENTS.md content
|
|
5
|
+
*/
|
|
6
|
+
generateContent(info, options) {
|
|
7
|
+
const sections = [];
|
|
8
|
+
sections.push("# AGENTS.md");
|
|
9
|
+
sections.push("");
|
|
10
|
+
sections.push("This file helps Autohand understand how to work with this project.");
|
|
11
|
+
sections.push("");
|
|
12
|
+
sections.push(this.generateProjectOverview(info));
|
|
13
|
+
if (info.packageManager) {
|
|
14
|
+
sections.push(this.generateCommandsSection(info));
|
|
15
|
+
}
|
|
16
|
+
if (info.testFramework) {
|
|
17
|
+
sections.push(this.generateTestingSection(info));
|
|
18
|
+
}
|
|
19
|
+
if (info.framework) {
|
|
20
|
+
const frameworkSection = this.generateFrameworkSection(info);
|
|
21
|
+
if (frameworkSection) {
|
|
22
|
+
sections.push(frameworkSection);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
sections.push(this.generateInstructionSourcesSection());
|
|
26
|
+
sections.push(this.generateCodeStyleSection(info));
|
|
27
|
+
sections.push(this.generateConstraintsSection());
|
|
28
|
+
if (options?.customSections) {
|
|
29
|
+
for (const section of options.customSections) {
|
|
30
|
+
sections.push(`## ${section.title}`);
|
|
31
|
+
sections.push("");
|
|
32
|
+
sections.push(section.content);
|
|
33
|
+
sections.push("");
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return sections.join("\n");
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Generate project overview section
|
|
40
|
+
*/
|
|
41
|
+
generateProjectOverview(info) {
|
|
42
|
+
const lines = [];
|
|
43
|
+
lines.push("## Project Overview");
|
|
44
|
+
lines.push("");
|
|
45
|
+
if (info.language) {
|
|
46
|
+
lines.push(`- **Language**: ${info.language}`);
|
|
47
|
+
}
|
|
48
|
+
if (info.framework) {
|
|
49
|
+
lines.push(`- **Framework**: ${info.framework}`);
|
|
50
|
+
}
|
|
51
|
+
if (info.packageManager) {
|
|
52
|
+
lines.push(`- **Package Manager**: ${info.packageManager}`);
|
|
53
|
+
}
|
|
54
|
+
if (info.testFramework) {
|
|
55
|
+
lines.push(`- **Test Framework**: ${info.testFramework}`);
|
|
56
|
+
}
|
|
57
|
+
if (info.buildTool) {
|
|
58
|
+
lines.push(`- **Build Tool**: ${info.buildTool}`);
|
|
59
|
+
}
|
|
60
|
+
lines.push("");
|
|
61
|
+
return lines.join("\n");
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Generate commands section based on package manager
|
|
65
|
+
*/
|
|
66
|
+
generateCommandsSection(info) {
|
|
67
|
+
const lines = [];
|
|
68
|
+
lines.push("## Commands");
|
|
69
|
+
lines.push("");
|
|
70
|
+
const pm = info.packageManager;
|
|
71
|
+
if (info.language === "Rust") {
|
|
72
|
+
lines.push("- **Build**: `cargo build`");
|
|
73
|
+
lines.push("- **Build (release)**: `cargo build --release`");
|
|
74
|
+
lines.push("- **Run**: `cargo run`");
|
|
75
|
+
lines.push("- **Test**: `cargo test`");
|
|
76
|
+
lines.push("- **Check**: `cargo check`");
|
|
77
|
+
lines.push("- **Format**: `cargo fmt`");
|
|
78
|
+
lines.push("- **Lint**: `cargo clippy`");
|
|
79
|
+
} else if (info.language === "Go") {
|
|
80
|
+
lines.push("- **Build**: `go build`");
|
|
81
|
+
lines.push("- **Run**: `go run .`");
|
|
82
|
+
lines.push("- **Test**: `go test ./...`");
|
|
83
|
+
lines.push("- **Format**: `go fmt ./...`");
|
|
84
|
+
lines.push("- **Vet**: `go vet ./...`");
|
|
85
|
+
} else if (info.language === "Python") {
|
|
86
|
+
if (pm === "poetry") {
|
|
87
|
+
lines.push("- **Install**: `poetry install`");
|
|
88
|
+
lines.push("- **Run**: `poetry run python main.py`");
|
|
89
|
+
lines.push("- **Add dependency**: `poetry add <package>`");
|
|
90
|
+
if (info.testFramework) {
|
|
91
|
+
lines.push(`- **Test**: \`poetry run pytest\``);
|
|
92
|
+
}
|
|
93
|
+
} else if (pm === "pipenv") {
|
|
94
|
+
lines.push("- **Install**: `pipenv install`");
|
|
95
|
+
lines.push("- **Run**: `pipenv run python main.py`");
|
|
96
|
+
if (info.testFramework) {
|
|
97
|
+
lines.push(`- **Test**: \`pipenv run pytest\``);
|
|
98
|
+
}
|
|
99
|
+
} else {
|
|
100
|
+
lines.push("- **Install**: `pip install -r requirements.txt`");
|
|
101
|
+
lines.push("- **Run**: `python main.py`");
|
|
102
|
+
if (info.testFramework) {
|
|
103
|
+
lines.push(`- **Test**: \`pytest\``);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
} else {
|
|
107
|
+
const run = pm === "npm" ? "npm run" : pm;
|
|
108
|
+
const install = pm === "npm" ? "npm install" : `${pm} install`;
|
|
109
|
+
lines.push(`- **Install**: \`${install}\``);
|
|
110
|
+
lines.push(`- **Dev**: \`${run} dev\``);
|
|
111
|
+
lines.push(`- **Build**: \`${run} build\``);
|
|
112
|
+
if (info.testFramework) {
|
|
113
|
+
lines.push(`- **Test**: \`${run} test\``);
|
|
114
|
+
}
|
|
115
|
+
if (info.linter) {
|
|
116
|
+
lines.push(`- **Lint**: \`${run} lint\``);
|
|
117
|
+
}
|
|
118
|
+
if (info.formatter) {
|
|
119
|
+
lines.push(`- **Format**: \`${run} format\``);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
lines.push("");
|
|
123
|
+
return lines.join("\n");
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Generate testing section
|
|
127
|
+
*/
|
|
128
|
+
generateTestingSection(info) {
|
|
129
|
+
const lines = [];
|
|
130
|
+
lines.push("## Testing");
|
|
131
|
+
lines.push("");
|
|
132
|
+
lines.push(`This project uses **${info.testFramework}** for testing.`);
|
|
133
|
+
lines.push("");
|
|
134
|
+
lines.push("- Write tests for new features before implementation");
|
|
135
|
+
lines.push("- Run tests before committing changes");
|
|
136
|
+
lines.push("- Aim for good test coverage on critical paths");
|
|
137
|
+
if (info.testFramework === "Vitest" || info.testFramework === "Jest") {
|
|
138
|
+
lines.push("- Use `describe` and `it` blocks to organize tests");
|
|
139
|
+
lines.push("- Mock external dependencies when appropriate");
|
|
140
|
+
} else if (info.testFramework === "pytest") {
|
|
141
|
+
lines.push("- Use fixtures for shared test setup");
|
|
142
|
+
lines.push("- Use `pytest.mark` for test categorization");
|
|
143
|
+
} else if (info.testFramework === "Playwright" || info.testFramework === "Cypress") {
|
|
144
|
+
lines.push("- Write E2E tests for critical user flows");
|
|
145
|
+
lines.push("- Keep selectors stable and meaningful");
|
|
146
|
+
}
|
|
147
|
+
lines.push("");
|
|
148
|
+
return lines.join("\n");
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Generate framework-specific section
|
|
152
|
+
*/
|
|
153
|
+
generateFrameworkSection(info) {
|
|
154
|
+
const lines = [];
|
|
155
|
+
switch (info.framework) {
|
|
156
|
+
case "Next.js":
|
|
157
|
+
lines.push("## Next.js Guidelines");
|
|
158
|
+
lines.push("");
|
|
159
|
+
lines.push("- Use the App Router for new pages (`app/` directory)");
|
|
160
|
+
lines.push("- Prefer Server Components by default");
|
|
161
|
+
lines.push('- Use `"use client"` only when needed for interactivity');
|
|
162
|
+
lines.push("- Keep API routes in `app/api/`");
|
|
163
|
+
lines.push("- Use `next/image` for optimized images");
|
|
164
|
+
lines.push("- Use `next/link` for client-side navigation");
|
|
165
|
+
break;
|
|
166
|
+
case "React":
|
|
167
|
+
lines.push("## React Guidelines");
|
|
168
|
+
lines.push("");
|
|
169
|
+
lines.push("- Use functional components with hooks");
|
|
170
|
+
lines.push("- Keep components small and focused");
|
|
171
|
+
lines.push("- Use custom hooks to share logic");
|
|
172
|
+
lines.push("- Prefer composition over inheritance");
|
|
173
|
+
lines.push("- Use TypeScript interfaces for props");
|
|
174
|
+
break;
|
|
175
|
+
case "Vue":
|
|
176
|
+
lines.push("## Vue Guidelines");
|
|
177
|
+
lines.push("");
|
|
178
|
+
lines.push("- Use Composition API for new components");
|
|
179
|
+
lines.push("- Keep components in single-file format (.vue)");
|
|
180
|
+
lines.push("- Use composables to share logic");
|
|
181
|
+
break;
|
|
182
|
+
case "Express":
|
|
183
|
+
lines.push("## Express Guidelines");
|
|
184
|
+
lines.push("");
|
|
185
|
+
lines.push("- Use middleware for cross-cutting concerns");
|
|
186
|
+
lines.push("- Keep route handlers thin, delegate to services");
|
|
187
|
+
lines.push("- Use async/await with proper error handling");
|
|
188
|
+
lines.push("- Validate request input before processing");
|
|
189
|
+
break;
|
|
190
|
+
case "FastAPI":
|
|
191
|
+
lines.push("## FastAPI Guidelines");
|
|
192
|
+
lines.push("");
|
|
193
|
+
lines.push("- Use Pydantic models for request/response validation");
|
|
194
|
+
lines.push("- Use dependency injection for shared resources");
|
|
195
|
+
lines.push("- Keep endpoints in organized routers");
|
|
196
|
+
lines.push("- Use async functions for I/O operations");
|
|
197
|
+
break;
|
|
198
|
+
case "Django":
|
|
199
|
+
lines.push("## Django Guidelines");
|
|
200
|
+
lines.push("");
|
|
201
|
+
lines.push("- Follow Django project structure conventions");
|
|
202
|
+
lines.push("- Use class-based views where appropriate");
|
|
203
|
+
lines.push("- Keep business logic in models or services");
|
|
204
|
+
lines.push("- Use Django ORM for database operations");
|
|
205
|
+
break;
|
|
206
|
+
case "Flask":
|
|
207
|
+
lines.push("## Flask Guidelines");
|
|
208
|
+
lines.push("");
|
|
209
|
+
lines.push("- Use blueprints to organize routes");
|
|
210
|
+
lines.push("- Keep route handlers focused");
|
|
211
|
+
lines.push("- Use Flask extensions for common functionality");
|
|
212
|
+
break;
|
|
213
|
+
case "NestJS":
|
|
214
|
+
lines.push("## NestJS Guidelines");
|
|
215
|
+
lines.push("");
|
|
216
|
+
lines.push("- Follow module-based architecture");
|
|
217
|
+
lines.push("- Use dependency injection");
|
|
218
|
+
lines.push("- Use decorators for metadata");
|
|
219
|
+
lines.push("- Keep controllers thin, services fat");
|
|
220
|
+
break;
|
|
221
|
+
default:
|
|
222
|
+
return null;
|
|
223
|
+
}
|
|
224
|
+
lines.push("");
|
|
225
|
+
return lines.join("\n");
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Generate instruction sources section
|
|
229
|
+
*/
|
|
230
|
+
generateInstructionSourcesSection() {
|
|
231
|
+
const lines = [];
|
|
232
|
+
lines.push("## Instruction Sources");
|
|
233
|
+
lines.push("");
|
|
234
|
+
lines.push("- Check saved memories and preferences before implementation work.");
|
|
235
|
+
lines.push("- Follow this AGENTS.md file for repository-specific guidance.");
|
|
236
|
+
lines.push("- AGENTS.md takes precedence over CLAUDE.md when both files provide instructions.");
|
|
237
|
+
lines.push("");
|
|
238
|
+
return lines.join("\n");
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Generate code style section
|
|
242
|
+
*/
|
|
243
|
+
generateCodeStyleSection(info) {
|
|
244
|
+
const lines = [];
|
|
245
|
+
lines.push("## Code Style");
|
|
246
|
+
lines.push("");
|
|
247
|
+
if (info.language === "TypeScript") {
|
|
248
|
+
lines.push("- Use strict TypeScript settings");
|
|
249
|
+
lines.push("- Define types/interfaces for data structures");
|
|
250
|
+
lines.push("- Avoid `any` type - use `unknown` if type is truly unknown");
|
|
251
|
+
lines.push("- Use type inference where obvious");
|
|
252
|
+
} else if (info.language === "Python") {
|
|
253
|
+
lines.push("- Follow PEP 8 style guidelines");
|
|
254
|
+
lines.push("- Use type hints for function signatures");
|
|
255
|
+
lines.push("- Use docstrings for public functions");
|
|
256
|
+
} else if (info.language === "Rust") {
|
|
257
|
+
lines.push("- Follow Rust naming conventions (snake_case for functions)");
|
|
258
|
+
lines.push("- Use descriptive error types");
|
|
259
|
+
lines.push("- Prefer `Result` over panicking");
|
|
260
|
+
} else if (info.language === "Go") {
|
|
261
|
+
lines.push("- Follow Go idioms and conventions");
|
|
262
|
+
lines.push("- Use short variable names in small scopes");
|
|
263
|
+
lines.push("- Handle errors explicitly");
|
|
264
|
+
}
|
|
265
|
+
lines.push("- Follow existing patterns in the codebase");
|
|
266
|
+
lines.push("- Use meaningful variable and function names");
|
|
267
|
+
lines.push("- Add comments for complex logic");
|
|
268
|
+
lines.push("- Keep functions focused and small");
|
|
269
|
+
if (info.linter) {
|
|
270
|
+
lines.push(`- Run **${info.linter}** before committing`);
|
|
271
|
+
}
|
|
272
|
+
if (info.formatter) {
|
|
273
|
+
lines.push(`- Format code with **${info.formatter}**`);
|
|
274
|
+
}
|
|
275
|
+
lines.push("");
|
|
276
|
+
return lines.join("\n");
|
|
277
|
+
}
|
|
278
|
+
/**
|
|
279
|
+
* Generate constraints section
|
|
280
|
+
*/
|
|
281
|
+
generateConstraintsSection() {
|
|
282
|
+
const lines = [];
|
|
283
|
+
lines.push("## Constraints");
|
|
284
|
+
lines.push("");
|
|
285
|
+
lines.push("- Do not modify files outside the project directory");
|
|
286
|
+
lines.push("- Ask before making breaking changes");
|
|
287
|
+
lines.push("- Prefer editing existing files over creating new ones");
|
|
288
|
+
lines.push("- Do not delete files without confirmation");
|
|
289
|
+
lines.push("- Keep dependencies minimal - avoid adding new ones without good reason");
|
|
290
|
+
lines.push("- Do not commit sensitive data (API keys, secrets, credentials)");
|
|
291
|
+
lines.push("");
|
|
292
|
+
return lines.join("\n");
|
|
293
|
+
}
|
|
294
|
+
};
|
|
295
|
+
|
|
296
|
+
export {
|
|
297
|
+
AgentsGenerator
|
|
298
|
+
};
|
|
299
|
+
/**
|
|
300
|
+
* @license
|
|
301
|
+
* Copyright 2025 Autohand AI LLC
|
|
302
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
303
|
+
*/
|