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
|
@@ -0,0 +1,529 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); 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; }// src/commands/squad.ts
|
|
2
|
+
var _chalk = require('chalk'); var _chalk2 = _interopRequireDefault(_chalk);
|
|
3
|
+
var _crypto = require('crypto');
|
|
4
|
+
var _child_process = require('child_process');
|
|
5
|
+
var _fs = require('fs');
|
|
6
|
+
var _promises = require('fs/promises');
|
|
7
|
+
var _os = require('os');
|
|
8
|
+
var _path = require('path'); var _path2 = _interopRequireDefault(_path);
|
|
9
|
+
var DEFAULT_API_BASE_URL = "https://api.autohand.ai";
|
|
10
|
+
var DEFAULT_CHANNEL = "stable";
|
|
11
|
+
var SQUAD_FEATURE_FLAG = "squad_daemon";
|
|
12
|
+
var REQUIRED_BINARIES = ["squad", "autohand-squad-daemon", "autohand-squad-analytics", "autohand-squad-tray", "autohand-squad-ui"];
|
|
13
|
+
var START_ACTIONS = /* @__PURE__ */ new Set(["start", "open", "restart"]);
|
|
14
|
+
var metadata = {
|
|
15
|
+
command: "/squad",
|
|
16
|
+
description: "open and manage the local Autohand Squad runtime",
|
|
17
|
+
implemented: true
|
|
18
|
+
};
|
|
19
|
+
async function squad(ctx, args = [], deps = {}) {
|
|
20
|
+
const result = await runSquadCommand(ctx, args, deps);
|
|
21
|
+
return result.output;
|
|
22
|
+
}
|
|
23
|
+
async function runSquadCommand(ctx, args = [], deps = {}) {
|
|
24
|
+
const parsed = parseSquadCommand(args);
|
|
25
|
+
const env = _nullishCoalesce(deps.env, () => ( process.env));
|
|
26
|
+
const paths = squadPaths(env, deps.homeDir);
|
|
27
|
+
let runtimeEntitlement;
|
|
28
|
+
if (START_ACTIONS.has(parsed.action)) {
|
|
29
|
+
const entitlement = await evaluateSquadEntitlement(ctx.config, deps);
|
|
30
|
+
if (!entitlement.ok) {
|
|
31
|
+
return {
|
|
32
|
+
code: 1,
|
|
33
|
+
output: _nullishCoalesce(entitlement.message, () => ( _chalk2.default.red("Autohand Squad is not available for this account.")))
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
runtimeEntitlement = entitlement;
|
|
37
|
+
const install = await ensureSquadRuntime(paths, entitlement, deps);
|
|
38
|
+
if (install.code !== 0) {
|
|
39
|
+
return install;
|
|
40
|
+
}
|
|
41
|
+
await writeRuntimeConfig(paths, ctx.config, entitlement, env);
|
|
42
|
+
} else if (!hasLocalRuntime(paths)) {
|
|
43
|
+
return {
|
|
44
|
+
code: 1,
|
|
45
|
+
output: [
|
|
46
|
+
_chalk2.default.yellow("Autohand Squad runtime is not installed."),
|
|
47
|
+
_chalk2.default.gray("Run `autohand squad` to install and start it after entitlement is verified.")
|
|
48
|
+
].join("\n")
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
const binary = resolveSquadBinary(paths, env);
|
|
52
|
+
if (!binary) {
|
|
53
|
+
return {
|
|
54
|
+
code: 1,
|
|
55
|
+
output: _chalk2.default.red(`Squad launcher was not found under ${paths.binDir}.`)
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
const runtimeArgs = buildRuntimeArgs(parsed, ctx.workspaceRoot, ctx.config, env, runtimeEntitlement);
|
|
59
|
+
const runtimeEnv = buildRuntimeEnv(ctx.config, env, runtimeEntitlement);
|
|
60
|
+
return runRuntime(binary, runtimeArgs, deps, runtimeEnv);
|
|
61
|
+
}
|
|
62
|
+
function parseSquadCommand(args) {
|
|
63
|
+
const first = _optionalChain([args, 'access', _ => _[0], 'optionalAccess', _2 => _2.toLowerCase, 'call', _3 => _3()]);
|
|
64
|
+
if (isSquadAction(first)) {
|
|
65
|
+
return { action: first, passthroughArgs: args.slice(1) };
|
|
66
|
+
}
|
|
67
|
+
const openBrowser = !args.includes("--no-open");
|
|
68
|
+
return {
|
|
69
|
+
action: openBrowser ? "open" : "start",
|
|
70
|
+
passthroughArgs: args
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
function isSquadAction(value) {
|
|
74
|
+
return value === "start" || value === "status" || value === "restart" || value === "stop" || value === "queue" || value === "open" || value === "config";
|
|
75
|
+
}
|
|
76
|
+
function buildRuntimeArgs(parsed, workspaceRoot, config, env, entitlement) {
|
|
77
|
+
const passthroughArgs = parsed.passthroughArgs.filter((arg) => arg !== "--no-open");
|
|
78
|
+
const args = [parsed.action, ...passthroughArgs];
|
|
79
|
+
if ((parsed.action === "open" || parsed.action === "start") && !hasOption(passthroughArgs, "--open-url")) {
|
|
80
|
+
args.push("--open-url", buildOpenUrl(workspaceRoot, passthroughArgs));
|
|
81
|
+
}
|
|
82
|
+
pushOption(args, passthroughArgs, "--api-base-url", apiBaseUrlFromConfig(config, env));
|
|
83
|
+
pushOption(args, passthroughArgs, "--update-channel", _optionalChain([entitlement, 'optionalAccess', _4 => _4.updateChannel]) || env.AUTOHAND_SQUAD_UPDATE_CHANNEL || DEFAULT_CHANNEL);
|
|
84
|
+
pushOptionalOption(args, passthroughArgs, "--account-email", _optionalChain([entitlement, 'optionalAccess', _5 => _5.accountEmail]) || _optionalChain([config, 'optionalAccess', _6 => _6.auth, 'optionalAccess', _7 => _7.user, 'optionalAccess', _8 => _8.email]) || env.AUTOHAND_SQUAD_ACCOUNT_EMAIL);
|
|
85
|
+
pushOptionalOption(args, passthroughArgs, "--plan-state", _optionalChain([entitlement, 'optionalAccess', _9 => _9.planState]) || env.AUTOHAND_SQUAD_PLAN_STATE);
|
|
86
|
+
pushOption(args, passthroughArgs, "--telemetry-policy", _optionalChain([entitlement, 'optionalAccess', _10 => _10.telemetryPolicy]) || telemetryPolicyFromConfig(config, env));
|
|
87
|
+
return args;
|
|
88
|
+
}
|
|
89
|
+
function buildOpenUrl(workspaceRoot, args) {
|
|
90
|
+
const { host, port } = readHostPortArgs(args);
|
|
91
|
+
const url = new URL(`http://${host}:${port}/conversations/new`);
|
|
92
|
+
url.searchParams.set("workspace", workspaceRoot);
|
|
93
|
+
return url.toString();
|
|
94
|
+
}
|
|
95
|
+
function readHostPortArgs(args) {
|
|
96
|
+
let host = "127.0.0.1";
|
|
97
|
+
let port = "19821";
|
|
98
|
+
for (let index = 0; index < args.length; index += 1) {
|
|
99
|
+
const arg = args[index];
|
|
100
|
+
if (arg === "--host" && args[index + 1]) {
|
|
101
|
+
host = args[index + 1];
|
|
102
|
+
index += 1;
|
|
103
|
+
continue;
|
|
104
|
+
}
|
|
105
|
+
if (arg.startsWith("--host=")) {
|
|
106
|
+
host = arg.slice("--host=".length);
|
|
107
|
+
continue;
|
|
108
|
+
}
|
|
109
|
+
if (arg === "--port" && args[index + 1]) {
|
|
110
|
+
port = args[index + 1];
|
|
111
|
+
index += 1;
|
|
112
|
+
continue;
|
|
113
|
+
}
|
|
114
|
+
if (arg.startsWith("--port=")) {
|
|
115
|
+
port = arg.slice("--port=".length);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
return { host, port };
|
|
119
|
+
}
|
|
120
|
+
function hasOption(args, name) {
|
|
121
|
+
return args.some((arg) => arg === name || arg.startsWith(`${name}=`));
|
|
122
|
+
}
|
|
123
|
+
function pushOption(args, passthroughArgs, name, value) {
|
|
124
|
+
if (!hasOption(passthroughArgs, name)) {
|
|
125
|
+
args.push(name, value);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
function pushOptionalOption(args, passthroughArgs, name, value) {
|
|
129
|
+
if (value && !hasOption(passthroughArgs, name)) {
|
|
130
|
+
args.push(name, value);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
async function evaluateSquadEntitlement(config, deps) {
|
|
134
|
+
const token = _optionalChain([config, 'optionalAccess', _11 => _11.auth, 'optionalAccess', _12 => _12.token]);
|
|
135
|
+
if (!token) {
|
|
136
|
+
return {
|
|
137
|
+
ok: false,
|
|
138
|
+
updateChannel: DEFAULT_CHANNEL,
|
|
139
|
+
message: [
|
|
140
|
+
_chalk2.default.yellow("Sign in to Autohand before starting Squad."),
|
|
141
|
+
_chalk2.default.gray("Run `autohand login`, then try `autohand squad` again.")
|
|
142
|
+
].join("\n")
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
const env = _nullishCoalesce(deps.env, () => ( process.env));
|
|
146
|
+
const apiBaseUrl = apiBaseUrlFromConfig(config, env);
|
|
147
|
+
const updateChannel = env.AUTOHAND_SQUAD_UPDATE_CHANNEL || DEFAULT_CHANNEL;
|
|
148
|
+
const fetchImpl = _nullishCoalesce(deps.fetchImpl, () => ( fetch));
|
|
149
|
+
try {
|
|
150
|
+
const response = await fetchImpl(`${apiBaseUrl}/v1/squad/entitlement`, {
|
|
151
|
+
headers: {
|
|
152
|
+
Authorization: `Bearer ${token}`,
|
|
153
|
+
Accept: "application/json"
|
|
154
|
+
}
|
|
155
|
+
});
|
|
156
|
+
const payload = await response.json();
|
|
157
|
+
if (!response.ok || payload.success === false) {
|
|
158
|
+
return {
|
|
159
|
+
ok: false,
|
|
160
|
+
updateChannel,
|
|
161
|
+
message: entitlementMessage(payload, "Unable to verify Squad entitlement.")
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
const hasPlan = Boolean(
|
|
165
|
+
_nullishCoalesce(_nullishCoalesce(_nullishCoalesce(payload.activePlan, () => ( payload.planActive)), () => ( payload.hasSquadPlan)), () => ( payload.plan === "squad"))
|
|
166
|
+
);
|
|
167
|
+
if (!hasPlan) {
|
|
168
|
+
return {
|
|
169
|
+
ok: false,
|
|
170
|
+
updateChannel,
|
|
171
|
+
message: [
|
|
172
|
+
_chalk2.default.yellow("Autohand Squad is not active on this account."),
|
|
173
|
+
_chalk2.default.gray("Upgrade to an active Squad plan before installing the local daemon.")
|
|
174
|
+
].join("\n")
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
const flagEnabled = Boolean(
|
|
178
|
+
_nullishCoalesce(_nullishCoalesce(payload.featureEnabled, () => ( payload.squadDaemonEnabled)), () => ( readNestedFlag(payload, SQUAD_FEATURE_FLAG)))
|
|
179
|
+
);
|
|
180
|
+
if (!flagEnabled) {
|
|
181
|
+
return {
|
|
182
|
+
ok: false,
|
|
183
|
+
updateChannel,
|
|
184
|
+
message: [
|
|
185
|
+
_chalk2.default.yellow("Autohand Squad daemon is not enabled for this account yet."),
|
|
186
|
+
_chalk2.default.gray(`Feature flag required: ${SQUAD_FEATURE_FLAG}`)
|
|
187
|
+
].join("\n")
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
return {
|
|
191
|
+
ok: true,
|
|
192
|
+
updateChannel: stringField(payload.updateChannel) || updateChannel,
|
|
193
|
+
latestAllowedVersion: stringField(payload.latestAllowedVersion) || stringField(payload.latest_allowed_version),
|
|
194
|
+
manifestUrl: stringField(payload.releaseManifestUrl) || stringField(payload.manifestUrl),
|
|
195
|
+
accountEmail: stringField(payload.accountEmail) || stringField(payload.email) || _optionalChain([config, 'access', _13 => _13.auth, 'optionalAccess', _14 => _14.user, 'optionalAccess', _15 => _15.email]),
|
|
196
|
+
planState: stringField(payload.planState) || stringField(payload.plan) || stringField(payload.plan_state),
|
|
197
|
+
telemetryPolicy: stringField(payload.telemetryPolicy) || stringField(payload.telemetry_policy)
|
|
198
|
+
};
|
|
199
|
+
} catch (error) {
|
|
200
|
+
return {
|
|
201
|
+
ok: false,
|
|
202
|
+
updateChannel,
|
|
203
|
+
message: [
|
|
204
|
+
_chalk2.default.red("Unable to verify Squad entitlement."),
|
|
205
|
+
_chalk2.default.gray(error.message)
|
|
206
|
+
].join("\n")
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
async function ensureSquadRuntime(paths, entitlement, deps) {
|
|
211
|
+
if (hasLocalRuntime(paths) && await isLatestAllowed(paths, entitlement.latestAllowedVersion)) {
|
|
212
|
+
return { code: 0, output: "" };
|
|
213
|
+
}
|
|
214
|
+
const manifest = await fetchReleaseManifest(entitlement, deps);
|
|
215
|
+
if (!manifest.ok) return manifest;
|
|
216
|
+
const version = manifestVersion(manifest.value, entitlement);
|
|
217
|
+
const artifacts = selectRequiredArtifacts(manifest.value);
|
|
218
|
+
if (!artifacts.ok) return artifacts;
|
|
219
|
+
const installed = [];
|
|
220
|
+
await _promises.mkdir.call(void 0, paths.binDir, { recursive: true });
|
|
221
|
+
for (const artifact of artifacts.value) {
|
|
222
|
+
const binaryName = artifactBinaryName(artifact);
|
|
223
|
+
const artifactResult = await downloadArtifact(artifact, deps);
|
|
224
|
+
if (!artifactResult.ok) return artifactResult;
|
|
225
|
+
const targetPath = _path2.default.join(paths.binDir, binaryFileName(binaryName));
|
|
226
|
+
await _promises.writeFile.call(void 0, targetPath, artifactResult.bytes);
|
|
227
|
+
await _promises.chmod.call(void 0, targetPath, 493);
|
|
228
|
+
installed.push({
|
|
229
|
+
binaryName,
|
|
230
|
+
url: _nullishCoalesce(artifact.url, () => ( "")),
|
|
231
|
+
sha256: _nullishCoalesce(artifact.sha256, () => ( ""))
|
|
232
|
+
});
|
|
233
|
+
}
|
|
234
|
+
await writeInstallRecord(paths.installJson, {
|
|
235
|
+
version,
|
|
236
|
+
channel: manifest.value.channel || entitlement.updateChannel,
|
|
237
|
+
installedAt: (_nullishCoalesce(_optionalChain([deps, 'access', _16 => _16.now, 'optionalCall', _17 => _17()]), () => ( /* @__PURE__ */ new Date()))).toISOString(),
|
|
238
|
+
artifacts: installed
|
|
239
|
+
});
|
|
240
|
+
return { code: 0, output: "" };
|
|
241
|
+
}
|
|
242
|
+
async function writeRuntimeConfig(paths, config, entitlement, env) {
|
|
243
|
+
const runtimeConfig = {
|
|
244
|
+
apiBaseUrl: apiBaseUrlFromConfig(config, env),
|
|
245
|
+
updateChannel: entitlement.updateChannel,
|
|
246
|
+
accountEmail: entitlement.accountEmail || _optionalChain([config, 'optionalAccess', _18 => _18.auth, 'optionalAccess', _19 => _19.user, 'optionalAccess', _20 => _20.email]) || env.AUTOHAND_SQUAD_ACCOUNT_EMAIL,
|
|
247
|
+
planState: entitlement.planState || env.AUTOHAND_SQUAD_PLAN_STATE,
|
|
248
|
+
telemetryPolicy: entitlement.telemetryPolicy || telemetryPolicyFromConfig(config, env),
|
|
249
|
+
openUrl: env.AUTOHAND_SQUAD_OPEN_URL,
|
|
250
|
+
hostedUiUrl: env.AUTOHAND_SQUAD_HOSTED_UI_URL,
|
|
251
|
+
proxyUrl: env.AUTOHAND_SQUAD_PROXY_URL,
|
|
252
|
+
apiGatewayUrl: env.AUTOHAND_SQUAD_API_GATEWAY_URL,
|
|
253
|
+
fixedPort: numberFromEnv(env.AUTOHAND_SQUAD_FIXED_PORT)
|
|
254
|
+
};
|
|
255
|
+
await _promises.mkdir.call(void 0, _path2.default.dirname(paths.configJson), { recursive: true });
|
|
256
|
+
await _promises.writeFile.call(void 0, paths.configJson, `${JSON.stringify(stripUndefined(runtimeConfig), null, 2)}
|
|
257
|
+
`, { mode: 384 });
|
|
258
|
+
}
|
|
259
|
+
async function fetchReleaseManifest(entitlement, deps) {
|
|
260
|
+
const env = _nullishCoalesce(deps.env, () => ( process.env));
|
|
261
|
+
const apiBaseUrl = env.AUTOHAND_SQUAD_API_BASE_URL || env.AUTOHAND_API_URL || DEFAULT_API_BASE_URL;
|
|
262
|
+
const manifestUrl = entitlement.manifestUrl || `${apiBaseUrl.replace(/\/+$/, "")}/v1/squad/releases/${entitlement.updateChannel}/manifest`;
|
|
263
|
+
try {
|
|
264
|
+
const response = await (_nullishCoalesce(deps.fetchImpl, () => ( fetch)))(manifestUrl, {
|
|
265
|
+
headers: { Accept: "application/json" }
|
|
266
|
+
});
|
|
267
|
+
const payload = await response.json();
|
|
268
|
+
if (!response.ok) {
|
|
269
|
+
return {
|
|
270
|
+
ok: false,
|
|
271
|
+
code: 1,
|
|
272
|
+
output: _chalk2.default.red(`Failed to fetch Squad release manifest: HTTP ${response.status}`)
|
|
273
|
+
};
|
|
274
|
+
}
|
|
275
|
+
return { ok: true, value: payload };
|
|
276
|
+
} catch (error) {
|
|
277
|
+
return {
|
|
278
|
+
ok: false,
|
|
279
|
+
code: 1,
|
|
280
|
+
output: [
|
|
281
|
+
_chalk2.default.red("Failed to fetch Squad release manifest."),
|
|
282
|
+
_chalk2.default.gray(error.message)
|
|
283
|
+
].join("\n")
|
|
284
|
+
};
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
function selectRequiredArtifacts(manifest) {
|
|
288
|
+
const artifacts = _nullishCoalesce(manifest.artifacts, () => ( []));
|
|
289
|
+
const selected = REQUIRED_BINARIES.map((binaryName) => {
|
|
290
|
+
return artifacts.find((artifact) => {
|
|
291
|
+
return targetOsMatches(artifact.os) && targetArchMatches(artifact.arch) && artifactBinaryName(artifact) === binaryName;
|
|
292
|
+
});
|
|
293
|
+
});
|
|
294
|
+
if (selected.some((artifact) => !artifact)) {
|
|
295
|
+
return {
|
|
296
|
+
ok: false,
|
|
297
|
+
code: 1,
|
|
298
|
+
output: [
|
|
299
|
+
_chalk2.default.red("Squad release manifest does not contain binaries for this OS/arch."),
|
|
300
|
+
_chalk2.default.gray(`Need: ${REQUIRED_BINARIES.join(", ")} for ${targetOs()}/${targetArch()}`)
|
|
301
|
+
].join("\n")
|
|
302
|
+
};
|
|
303
|
+
}
|
|
304
|
+
return { ok: true, value: selected };
|
|
305
|
+
}
|
|
306
|
+
async function downloadArtifact(artifact, deps) {
|
|
307
|
+
if (!artifact.url || !artifact.sha256) {
|
|
308
|
+
return { ok: false, code: 1, output: _chalk2.default.red("Invalid Squad artifact manifest entry.") };
|
|
309
|
+
}
|
|
310
|
+
try {
|
|
311
|
+
const response = await (_nullishCoalesce(deps.fetchImpl, () => ( fetch)))(artifact.url);
|
|
312
|
+
if (!response.ok) {
|
|
313
|
+
return { ok: false, code: 1, output: _chalk2.default.red(`Failed to download Squad artifact: HTTP ${response.status}`) };
|
|
314
|
+
}
|
|
315
|
+
const bytes = Buffer.from(await response.arrayBuffer());
|
|
316
|
+
const actual = _crypto.createHash.call(void 0, "sha256").update(bytes).digest("hex");
|
|
317
|
+
if (actual.toLowerCase() !== artifact.sha256.toLowerCase()) {
|
|
318
|
+
return {
|
|
319
|
+
ok: false,
|
|
320
|
+
code: 1,
|
|
321
|
+
output: _chalk2.default.red(`Checksum mismatch for ${artifactBinaryName(artifact)}.`)
|
|
322
|
+
};
|
|
323
|
+
}
|
|
324
|
+
const signatureError = verifyArtifactSignature(artifact);
|
|
325
|
+
if (signatureError) {
|
|
326
|
+
return { ok: false, code: 1, output: _chalk2.default.red(signatureError) };
|
|
327
|
+
}
|
|
328
|
+
return { ok: true, bytes };
|
|
329
|
+
} catch (error) {
|
|
330
|
+
return {
|
|
331
|
+
ok: false,
|
|
332
|
+
code: 1,
|
|
333
|
+
output: [
|
|
334
|
+
_chalk2.default.red(`Failed to download ${artifactBinaryName(artifact)}.`),
|
|
335
|
+
_chalk2.default.gray(error.message)
|
|
336
|
+
].join("\n")
|
|
337
|
+
};
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
function verifyArtifactSignature(artifact) {
|
|
341
|
+
const signature = artifact.signature;
|
|
342
|
+
if (!signature) return null;
|
|
343
|
+
const publicKey = _nullishCoalesce(artifact.publicKey, () => ( artifact.public_key));
|
|
344
|
+
if (!publicKey) {
|
|
345
|
+
return `Artifact ${artifactBinaryName(artifact)} is signed but no public key was provided.`;
|
|
346
|
+
}
|
|
347
|
+
try {
|
|
348
|
+
const rawPublicKey = Buffer.from(publicKey, "base64");
|
|
349
|
+
const spkiPrefix = Buffer.from("302a300506032b6570032100", "hex");
|
|
350
|
+
const key = _crypto.createPublicKey.call(void 0, {
|
|
351
|
+
key: Buffer.concat([spkiPrefix, rawPublicKey]),
|
|
352
|
+
format: "der",
|
|
353
|
+
type: "spki"
|
|
354
|
+
});
|
|
355
|
+
const ok = _crypto.verify.call(void 0,
|
|
356
|
+
null,
|
|
357
|
+
Buffer.from(_nullishCoalesce(artifact.sha256, () => ( ""))),
|
|
358
|
+
key,
|
|
359
|
+
Buffer.from(signature, "base64")
|
|
360
|
+
);
|
|
361
|
+
return ok ? null : `Signature verification failed for ${artifactBinaryName(artifact)}.`;
|
|
362
|
+
} catch (error) {
|
|
363
|
+
return `Signature verification failed for ${artifactBinaryName(artifact)}: ${error.message}`;
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
function runRuntime(binary, args, deps, runtimeEnv) {
|
|
367
|
+
const spawnProcess = _nullishCoalesce(deps.spawnProcess, () => ( _child_process.spawn));
|
|
368
|
+
return new Promise((resolve) => {
|
|
369
|
+
const child = spawnProcess(binary, args, {
|
|
370
|
+
env: { ...process.env, ..._nullishCoalesce(deps.env, () => ( {})), ...runtimeEnv },
|
|
371
|
+
stdio: ["ignore", "pipe", "pipe"]
|
|
372
|
+
});
|
|
373
|
+
let stdout = "";
|
|
374
|
+
let stderr = "";
|
|
375
|
+
_optionalChain([child, 'access', _21 => _21.stdout, 'optionalAccess', _22 => _22.on, 'call', _23 => _23("data", (chunk) => {
|
|
376
|
+
stdout += String(chunk);
|
|
377
|
+
})]);
|
|
378
|
+
_optionalChain([child, 'access', _24 => _24.stderr, 'optionalAccess', _25 => _25.on, 'call', _26 => _26("data", (chunk) => {
|
|
379
|
+
stderr += String(chunk);
|
|
380
|
+
})]);
|
|
381
|
+
child.on("error", (error) => {
|
|
382
|
+
resolve({ code: 1, output: _chalk2.default.red(error.message) });
|
|
383
|
+
});
|
|
384
|
+
child.on("close", (code) => {
|
|
385
|
+
resolve({
|
|
386
|
+
code: _nullishCoalesce(code, () => ( 0)),
|
|
387
|
+
output: [stdout.trimEnd(), stderr.trimEnd()].filter(Boolean).join("\n")
|
|
388
|
+
});
|
|
389
|
+
});
|
|
390
|
+
});
|
|
391
|
+
}
|
|
392
|
+
function hasLocalRuntime(paths) {
|
|
393
|
+
return REQUIRED_BINARIES.every((binaryName) => _fs.existsSync.call(void 0, _path2.default.join(paths.binDir, binaryFileName(binaryName))));
|
|
394
|
+
}
|
|
395
|
+
async function isLatestAllowed(paths, latestAllowedVersion) {
|
|
396
|
+
if (!latestAllowedVersion) return true;
|
|
397
|
+
try {
|
|
398
|
+
const record = JSON.parse(await _promises.readFile.call(void 0, paths.installJson, "utf8"));
|
|
399
|
+
return record.version === latestAllowedVersion;
|
|
400
|
+
} catch (e) {
|
|
401
|
+
return false;
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
function resolveSquadBinary(paths, env) {
|
|
405
|
+
const explicit = env.AUTOHAND_SQUAD_BIN;
|
|
406
|
+
if (explicit && _fs.existsSync.call(void 0, explicit)) return explicit;
|
|
407
|
+
const installed = _path2.default.join(paths.binDir, binaryFileName("squad"));
|
|
408
|
+
if (_fs.existsSync.call(void 0, installed)) return installed;
|
|
409
|
+
return findOnPath(binaryFileName("squad"), env.PATH);
|
|
410
|
+
}
|
|
411
|
+
function findOnPath(binaryName, pathValue) {
|
|
412
|
+
for (const entry of (_nullishCoalesce(pathValue, () => ( ""))).split(_path2.default.delimiter)) {
|
|
413
|
+
if (!entry) continue;
|
|
414
|
+
const candidate = _path2.default.join(entry, binaryName);
|
|
415
|
+
if (_fs.existsSync.call(void 0, candidate)) return candidate;
|
|
416
|
+
}
|
|
417
|
+
return null;
|
|
418
|
+
}
|
|
419
|
+
function squadPaths(env, homeDir = _os.homedir.call(void 0, )) {
|
|
420
|
+
const root = env.AUTOHAND_SQUAD_HOME || _path2.default.join(env.AUTOHAND_HOME || _path2.default.join(homeDir, ".autohand"), "squad");
|
|
421
|
+
return {
|
|
422
|
+
root,
|
|
423
|
+
binDir: _path2.default.join(root, "bin"),
|
|
424
|
+
configJson: _path2.default.join(root, "config.json"),
|
|
425
|
+
installJson: _path2.default.join(root, "install.json")
|
|
426
|
+
};
|
|
427
|
+
}
|
|
428
|
+
async function writeInstallRecord(filePath, record) {
|
|
429
|
+
await _promises.mkdir.call(void 0, _path2.default.dirname(filePath), { recursive: true });
|
|
430
|
+
await _promises.writeFile.call(void 0, filePath, `${JSON.stringify(record, null, 2)}
|
|
431
|
+
`);
|
|
432
|
+
}
|
|
433
|
+
function manifestVersion(manifest, entitlement) {
|
|
434
|
+
return manifest.latestAllowedVersion || manifest.latest_allowed_version || manifest.version || entitlement.latestAllowedVersion || "0.0.0";
|
|
435
|
+
}
|
|
436
|
+
function artifactBinaryName(artifact) {
|
|
437
|
+
const value = artifact.binaryName || artifact.binary_name || "autohand-squad-daemon";
|
|
438
|
+
return isRequiredBinary(value) ? value : "autohand-squad-daemon";
|
|
439
|
+
}
|
|
440
|
+
function isRequiredBinary(value) {
|
|
441
|
+
return REQUIRED_BINARIES.includes(value);
|
|
442
|
+
}
|
|
443
|
+
function binaryFileName(binaryName) {
|
|
444
|
+
return process.platform === "win32" ? `${binaryName}.exe` : binaryName;
|
|
445
|
+
}
|
|
446
|
+
function targetOs() {
|
|
447
|
+
return _os.platform.call(void 0, );
|
|
448
|
+
}
|
|
449
|
+
function targetArch() {
|
|
450
|
+
return _os.arch.call(void 0, );
|
|
451
|
+
}
|
|
452
|
+
function targetOsMatches(value) {
|
|
453
|
+
return value === targetOs();
|
|
454
|
+
}
|
|
455
|
+
function targetArchMatches(value) {
|
|
456
|
+
const arch = targetArch();
|
|
457
|
+
return value === arch || arch === "x64" && value === "x86_64" || arch === "arm64" && value === "aarch64";
|
|
458
|
+
}
|
|
459
|
+
function apiBaseUrlFromConfig(config, env) {
|
|
460
|
+
const configApi = config ? _optionalChain([config, 'access', _27 => _27.api, 'optionalAccess', _28 => _28.baseUrl]) : void 0;
|
|
461
|
+
return (env.AUTOHAND_SQUAD_API_BASE_URL || env.AUTOHAND_API_URL || configApi || _optionalChain([config, 'optionalAccess', _29 => _29.telemetry, 'optionalAccess', _30 => _30.apiBaseUrl]) || DEFAULT_API_BASE_URL).replace(/\/+$/, "");
|
|
462
|
+
}
|
|
463
|
+
function buildRuntimeEnv(config, env, entitlement) {
|
|
464
|
+
return stripUndefined({
|
|
465
|
+
AUTOHAND_SQUAD_API_BASE_URL: apiBaseUrlFromConfig(config, env),
|
|
466
|
+
AUTOHAND_SQUAD_UPDATE_CHANNEL: _optionalChain([entitlement, 'optionalAccess', _31 => _31.updateChannel]) || env.AUTOHAND_SQUAD_UPDATE_CHANNEL || DEFAULT_CHANNEL,
|
|
467
|
+
AUTOHAND_SQUAD_ACCOUNT_EMAIL: _optionalChain([entitlement, 'optionalAccess', _32 => _32.accountEmail]) || _optionalChain([config, 'optionalAccess', _33 => _33.auth, 'optionalAccess', _34 => _34.user, 'optionalAccess', _35 => _35.email]) || env.AUTOHAND_SQUAD_ACCOUNT_EMAIL,
|
|
468
|
+
AUTOHAND_SQUAD_PLAN_STATE: _optionalChain([entitlement, 'optionalAccess', _36 => _36.planState]) || env.AUTOHAND_SQUAD_PLAN_STATE,
|
|
469
|
+
AUTOHAND_SQUAD_TELEMETRY_POLICY: _optionalChain([entitlement, 'optionalAccess', _37 => _37.telemetryPolicy]) || telemetryPolicyFromConfig(config, env),
|
|
470
|
+
AUTOHAND_SQUAD_API_AUTH_TOKEN: _optionalChain([config, 'optionalAccess', _38 => _38.auth, 'optionalAccess', _39 => _39.token]) || env.AUTOHAND_SQUAD_API_AUTH_TOKEN || env.AUTOHAND_SQUAD_AUTH_TOKEN || env.AUTOHAND_TOKEN,
|
|
471
|
+
AUTOHAND_SQUAD_COMPANY_SECRET: env.AUTOHAND_SQUAD_COMPANY_SECRET || _optionalChain([config, 'optionalAccess', _40 => _40.api, 'optionalAccess', _41 => _41.companySecret]) || _optionalChain([config, 'optionalAccess', _42 => _42.telemetry, 'optionalAccess', _43 => _43.companySecret]) || env.AUTOHAND_SECRET
|
|
472
|
+
});
|
|
473
|
+
}
|
|
474
|
+
function telemetryPolicyFromConfig(config, env) {
|
|
475
|
+
if (env.AUTOHAND_SQUAD_TELEMETRY_POLICY) return env.AUTOHAND_SQUAD_TELEMETRY_POLICY;
|
|
476
|
+
return _optionalChain([config, 'optionalAccess', _44 => _44.telemetry, 'optionalAccess', _45 => _45.enabled]) === false ? "disabled" : "local-buffered";
|
|
477
|
+
}
|
|
478
|
+
function numberFromEnv(value) {
|
|
479
|
+
if (!value) return void 0;
|
|
480
|
+
const parsed = Number(value);
|
|
481
|
+
return Number.isInteger(parsed) && parsed > 0 && parsed <= 65535 ? parsed : void 0;
|
|
482
|
+
}
|
|
483
|
+
function stripUndefined(input) {
|
|
484
|
+
return Object.fromEntries(Object.entries(input).filter(([, value]) => value !== void 0));
|
|
485
|
+
}
|
|
486
|
+
function entitlementMessage(payload, fallback) {
|
|
487
|
+
const message = stringField(payload.message) || stringField(payload.error) || fallback;
|
|
488
|
+
return [_chalk2.default.red(message), _chalk2.default.gray("Squad was not installed.")].join("\n");
|
|
489
|
+
}
|
|
490
|
+
function readNestedFlag(payload, flag) {
|
|
491
|
+
const featureFlags = payload.featureFlags;
|
|
492
|
+
if (featureFlags && typeof featureFlags === "object" && !Array.isArray(featureFlags)) {
|
|
493
|
+
return featureFlags[flag];
|
|
494
|
+
}
|
|
495
|
+
const flags = payload.flags;
|
|
496
|
+
if (flags && typeof flags === "object" && !Array.isArray(flags)) {
|
|
497
|
+
return flags[flag];
|
|
498
|
+
}
|
|
499
|
+
if (Array.isArray(flags)) {
|
|
500
|
+
return flags.some((entry) => {
|
|
501
|
+
return Boolean(entry) && typeof entry === "object" && entry.key === flag && entry.enabled === true;
|
|
502
|
+
});
|
|
503
|
+
}
|
|
504
|
+
return void 0;
|
|
505
|
+
}
|
|
506
|
+
function stringField(value) {
|
|
507
|
+
return typeof value === "string" && value.trim() ? value : void 0;
|
|
508
|
+
}
|
|
509
|
+
async function pathIsExecutable(filePath) {
|
|
510
|
+
try {
|
|
511
|
+
await _promises.access.call(void 0, filePath, _fs.constants.X_OK);
|
|
512
|
+
return true;
|
|
513
|
+
} catch (e2) {
|
|
514
|
+
return false;
|
|
515
|
+
}
|
|
516
|
+
}
|
|
517
|
+
|
|
518
|
+
|
|
519
|
+
|
|
520
|
+
|
|
521
|
+
|
|
522
|
+
|
|
523
|
+
|
|
524
|
+
exports.metadata = metadata; exports.squad = squad; exports.runSquadCommand = runSquadCommand; exports.parseSquadCommand = parseSquadCommand; exports.pathIsExecutable = pathIsExecutable;
|
|
525
|
+
/**
|
|
526
|
+
* @license
|
|
527
|
+
* Copyright 2025 Autohand AI LLC
|
|
528
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
529
|
+
*/
|