autohand-cli 0.8.3 → 0.9.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +191 -74
- package/dist/{AgentRegistry-ODDXPAFR.js → AgentRegistry-GOV7FN2O.js} +2 -2
- package/dist/AgentRegistry-J2C6JBZ3.cjs +10 -0
- package/dist/{AutomodeManager-EOVHGRPP.js → AutomodeManager-APLLPEYJ.js} +31 -17
- package/dist/{AutomodeManager-6ATBE7Q5.cjs → AutomodeManager-MPSXT2RH.cjs} +38 -24
- package/dist/CommunitySkillsCache-22BB3J6H.cjs +8 -0
- package/dist/{CommunitySkillsCache-QLE57BN5.js → CommunitySkillsCache-ZACDPD4J.js} +2 -2
- package/dist/GitHubRegistryFetcher-CYJLF2XL.cjs +7 -0
- package/dist/{GitHubRegistryFetcher-NT5GFZXS.js → GitHubRegistryFetcher-J2BWPXJF.js} +1 -1
- package/dist/{HookManager-B2F35M27.js → HookManager-2S6AHOC3.js} +1 -1
- package/dist/{HookManager-PFAFE3FK.cjs → HookManager-TVEQI5ZU.cjs} +2 -2
- package/dist/{ImportWizard-OHRKBANZ.js → ImportWizard-AEBMAKXE.js} +33 -9
- package/dist/{ImportWizard-CJRZPPHL.cjs → ImportWizard-AF2XL6DS.cjs} +37 -13
- package/dist/LearnAdvisor-KKEQ5QCV.js +9 -0
- package/dist/LearnAdvisor-Q7RAYLPF.cjs +9 -0
- package/dist/{McpClientManager-NQ3EW2IF.cjs → McpClientManager-BNSKLHIN.cjs} +2 -2
- package/dist/{McpClientManager-VBIMGKXU.js → McpClientManager-SL35BR24.js} +1 -1
- package/dist/MemoryManager-PMNAEZMB.cjs +8 -0
- package/dist/{MemoryManager-2LAT7IHS.js → MemoryManager-QZRLTUB5.js} +2 -2
- package/dist/NVIDIAProvider-C3FWQOBZ.cjs +14 -0
- package/dist/NVIDIAProvider-SJPY3ONR.js +14 -0
- package/dist/{PermissionManager-7NQHRCHY.js → PermissionManager-MT7KBNNR.js} +3 -3
- package/dist/PermissionManager-URCNP5EC.cjs +11 -0
- package/dist/{ProjectProfiler-UG42W6WD.cjs → ProjectProfiler-CDAE7ECW.cjs} +1 -0
- package/dist/{ProjectProfiler-P4QJQWWA.js → ProjectProfiler-NZTJDRHD.js} +1 -0
- package/dist/ProviderFactory-56N3ECE4.cjs +12 -0
- package/dist/{ProviderFactory-2IYJ5OPW.js → ProviderFactory-RB4RVAF6.js} +4 -1
- package/dist/SessionManager-2IZGWASQ.cjs +10 -0
- package/dist/{SessionManager-4U4JFQ3C.js → SessionManager-554PHVPC.js} +2 -2
- package/dist/SkillsRegistry-GMRVONOQ.cjs +9 -0
- package/dist/{SkillsRegistry-RFEINXRT.js → SkillsRegistry-NHHMIUYJ.js} +2 -2
- package/dist/SubAgent-4GOR2FIJ.js +13 -0
- package/dist/SubAgent-ZJMDH4FI.cjs +13 -0
- package/dist/{SyncApiClient-B5RT2ECG.js → SyncApiClient-G3FM65IV.js} +1 -1
- package/dist/SyncApiClient-ODBDECOG.cjs +11 -0
- package/dist/about-3USFSGOH.js +15 -0
- package/dist/about-QR52U5DD.cjs +15 -0
- package/dist/acp-5Y2W6OZP.js +1556 -0
- package/dist/acp-GSYE75OB.cjs +1556 -0
- package/dist/actionExecutor-KHUU3Z3Q.cjs +28 -0
- package/dist/actionExecutor-PLQJZLZV.js +28 -0
- package/dist/add-dir-BTAD5OZS.cjs +11 -0
- package/dist/{add-dir-TUJM3PG5.js → add-dir-HCERJDBR.js} +3 -2
- package/dist/agent-B3EVT7NN.cjs +126 -0
- package/dist/agent-SATQ3WZ3.js +126 -0
- package/dist/agents/builtin/code-cleaner.md +1 -1
- package/dist/agents/builtin/docs-writer.md +1 -1
- package/dist/agents/builtin/researcher.md +2 -2
- package/dist/agents/builtin/reviewer.md +1 -1
- package/dist/agents/builtin/tester.md +1 -1
- package/dist/agents/builtin/todo-resolver.md +1 -1
- package/dist/agents-44CRJGM7.cjs +18 -0
- package/dist/agents-NN4ZAJ7R.js +18 -0
- package/dist/agents-new-6D6G4QS6.cjs +17 -0
- package/dist/agents-new-7GAQ25EK.js +17 -0
- package/dist/{autoSkill-LQEVQFIH.js → autoSkill-66PKCYTW.js} +2 -2
- package/dist/autoSkill-VQLGBELN.cjs +20 -0
- package/dist/automode-45DWV4TN.cjs +10 -0
- package/dist/{automode-R6P3VHLS.js → automode-BUF3VGXU.js} +2 -2
- package/dist/browserToolBridge-BXRQB4B4.cjs +58 -0
- package/dist/browserToolBridge-F5N66PE7.js +58 -0
- package/dist/chrome-Q2U73HZB.cjs +50 -0
- package/dist/chrome-Q54OALOK.cjs +21 -0
- package/dist/chrome-Y3T7EIHG.js +50 -0
- package/dist/chrome-ZNJ46OYW.js +21 -0
- package/dist/chromeSkill-53TH55PM.js +105 -0
- package/dist/chromeSkill-THW7N4IY.cjs +105 -0
- package/dist/{chunk-HXGBSJL5.cjs → chunk-22SCR3EV.cjs} +2 -2
- package/dist/chunk-26G7YGOW.js +367 -0
- package/dist/{chunk-3L53OA4E.cjs → chunk-2ESQR35E.cjs} +10 -10
- package/dist/chunk-2H5O745H.js +63 -0
- package/dist/{chunk-ULDM2SNB.js → chunk-2IW5YFJ4.js} +48 -47
- package/dist/{chunk-U55TWFJI.cjs → chunk-2VHB43IX.cjs} +24 -6
- package/dist/chunk-3EDDDZS2.cjs +5 -0
- package/dist/{chunk-X5VSP65C.cjs → chunk-3ICORF7M.cjs} +4 -4
- package/dist/chunk-3OF56EMA.cjs +197 -0
- package/dist/chunk-3UC6DMFI.cjs +93 -0
- package/dist/{chunk-64H4FRM3.cjs → chunk-3UHRCHKB.cjs} +32 -34
- package/dist/{chunk-JCLYQ2JC.js → chunk-3ZOOH44N.js} +12 -6
- package/dist/{chunk-TUD3Z3BD.js → chunk-44ZWOBTI.js} +136 -55
- package/dist/chunk-4567QNRB.js +444 -0
- package/dist/chunk-45CHNQM6.cjs +517 -0
- package/dist/chunk-46MTALKD.js +44 -0
- package/dist/{chunk-WHE2SWHU.js → chunk-4E7SHPNQ.js} +2 -2
- package/dist/chunk-4LMUDS2K.js +124 -0
- package/dist/{chunk-W7RYQJLO.cjs → chunk-4XFHP2SN.cjs} +46 -15
- package/dist/chunk-4XVLNOFA.js +360 -0
- package/dist/{chunk-GBHDROGL.js → chunk-575PXZX7.js} +16 -4
- package/dist/chunk-5A7ZL64N.js +139 -0
- package/dist/chunk-5GCQ5UMV.cjs +85 -0
- package/dist/chunk-5JTTM5SC.js +59 -0
- package/dist/{chunk-IETRBBMP.cjs → chunk-5K3CDSWZ.cjs} +108 -31
- package/dist/{chunk-KLWJIPU2.cjs → chunk-5SFV2NCY.cjs} +20 -16
- package/dist/chunk-5ZNYX4VH.cjs +71 -0
- package/dist/{chunk-A4IJHHV7.cjs → chunk-63ANVAOJ.cjs} +52 -11
- package/dist/{chunk-MYISNQH4.js → chunk-65LRPW5W.js} +1 -1
- package/dist/chunk-6AYJCDTA.js +360 -0
- package/dist/{chunk-X2MSVKDV.js → chunk-6HF6XSCC.js} +2 -2
- package/dist/{chunk-AEJH23FO.cjs → chunk-6JWCGQJU.cjs} +6 -6
- package/dist/chunk-6OECOAK5.cjs +360 -0
- package/dist/chunk-6R25D2H5.js +121 -0
- package/dist/chunk-7DJJGKM6.js +77 -0
- package/dist/{chunk-VG34MG2U.js → chunk-7IRQ7JEH.js} +9 -6
- package/dist/chunk-7MY4JHER.js +27 -0
- package/dist/chunk-7PJKTSRN.js +152 -0
- package/dist/{chunk-SKYG33B2.cjs → chunk-7PT646AL.cjs} +3 -3
- package/dist/chunk-7WAUCLLQ.js +229 -0
- package/dist/{chunk-U46VYPLR.cjs → chunk-7XTUL7ZD.cjs} +9 -9
- package/dist/chunk-AE2ILW25.cjs +152 -0
- package/dist/{chunk-T2M64VHA.cjs → chunk-AOKXYGBQ.cjs} +61 -41
- package/dist/chunk-AQ5PVHOC.cjs +113 -0
- package/dist/{chunk-N2BLVUPM.cjs → chunk-AZ47LKD5.cjs} +3 -3
- package/dist/chunk-B4HSNOIH.cjs +354 -0
- package/dist/chunk-B76FJKEJ.cjs +184 -0
- package/dist/chunk-BP37FVBM.js +85 -0
- package/dist/chunk-BQU3HAE7.js +21 -0
- package/dist/chunk-BYE7RQFZ.cjs +121 -0
- package/dist/chunk-C46B72VK.js +1034 -0
- package/dist/{chunk-HIVRCQS2.js → chunk-C5QIQQ37.js} +56 -25
- package/dist/chunk-CCIDL4SA.js +19931 -0
- package/dist/{chunk-XVUHNWMX.js → chunk-CECH6QQP.js} +17 -19
- package/dist/chunk-CFAWTLSC.js +13 -0
- package/dist/{chunk-ZYQMLKOK.cjs → chunk-CK4HAHVY.cjs} +212 -70
- package/dist/chunk-CO2AADYU.cjs +360 -0
- package/dist/chunk-CRTCZ4WL.cjs +19931 -0
- package/dist/chunk-CSTUTDTH.js +75 -0
- package/dist/{chunk-K2C56QGS.cjs → chunk-D546G7DA.cjs} +1650 -479
- package/dist/{chunk-CNBKZEX5.cjs → chunk-DA7NBAJK.cjs} +49 -17
- package/dist/{chunk-G4CAKI3V.js → chunk-DGBPWODD.js} +7 -2
- package/dist/chunk-DHUQZ53B.cjs +29 -0
- package/dist/{chunk-RGR6ME5J.cjs → chunk-DI57A4BX.cjs} +25 -28
- package/dist/{chunk-5K6NGAVM.js → chunk-DNSD7DVJ.js} +67 -52
- package/dist/{chunk-RDF37HKB.cjs → chunk-DSSCERHI.cjs} +3 -2
- package/dist/{chunk-NAJ4IZKD.cjs → chunk-EA2MS25U.cjs} +8 -6
- package/dist/{chunk-SJAVBCOA.js → chunk-EEHWALXA.js} +94 -3
- package/dist/chunk-ES2HJQ4N.js +37 -0
- package/dist/{chunk-G27PQQFD.js → chunk-EYHKL4QC.js} +1 -1
- package/dist/{chunk-SV2WA57F.js → chunk-FBQJZKFX.js} +38 -15
- package/dist/chunk-FFBDRUO5.cjs +59 -0
- package/dist/{chunk-N7LI55V4.js → chunk-FFHSCM5M.js} +15 -8
- package/dist/{chunk-SAHBLB3E.js → chunk-FP46B4X3.js} +208 -3
- package/dist/chunk-FQVG6ZHF.js +197 -0
- package/dist/{chunk-J2GSFVUV.cjs → chunk-GAOPJ5S3.cjs} +74 -59
- package/dist/{chunk-S52YW5ZQ.js → chunk-GNBBIAMD.js} +16 -19
- package/dist/chunk-GSDV75A5.js +715 -0
- package/dist/chunk-GWY26SUD.cjs +63 -0
- package/dist/{chunk-TUAITHWL.js → chunk-H426KOGY.js} +2 -1
- package/dist/{chunk-EZMINVLU.js → chunk-H4D2Q2AL.js} +5 -2
- package/dist/chunk-HC2Q6A3E.cjs +4967 -0
- package/dist/{chunk-3WVJEL7K.cjs → chunk-HDK2EHVH.cjs} +3 -1
- package/dist/{chunk-5IXII4HX.cjs → chunk-HG3ZASBH.cjs} +23 -16
- package/dist/chunk-HK5A54AV.cjs +280 -0
- package/dist/{chunk-LQGVEP3E.js → chunk-HQUSEWT4.js} +45 -13
- package/dist/chunk-HSWWM6AM.js +2340 -0
- package/dist/chunk-HTU4W3GB.js +183 -0
- package/dist/{chunk-HLHTG5ZU.cjs → chunk-HVCIB4SW.cjs} +14 -12
- package/dist/chunk-HXHE2KAO.js +385 -0
- package/dist/{chunk-LJFUXC56.cjs → chunk-HXQREVTA.cjs} +9 -6
- package/dist/{chunk-SLQAYV3W.js → chunk-HZWU6IO3.js} +11 -2
- package/dist/chunk-I2ZK3AOD.js +866 -0
- package/dist/chunk-IEPLQ47J.js +719 -0
- package/dist/chunk-J5HE6CUM.cjs +124 -0
- package/dist/{chunk-LIEXWM2M.js → chunk-JAQO6XDB.js} +19 -1
- package/dist/chunk-JB3JCYBJ.js +113 -0
- package/dist/chunk-JCUHCH37.cjs +247 -0
- package/dist/{chunk-FPHU2ES6.cjs → chunk-JM3ZTQUK.cjs} +19 -9
- package/dist/{chunk-NDMIPTV4.js → chunk-JMJRFSNJ.js} +8 -3
- package/dist/{chunk-ZLSGXMGQ.js → chunk-JMN3GZU6.js} +2 -0
- package/dist/chunk-JPFRI4L4.js +4967 -0
- package/dist/{chunk-BVKXEQVG.cjs → chunk-JV5HVCHU.cjs} +22 -10
- package/dist/chunk-KA2U6MY2.js +388 -0
- package/dist/{chunk-SEKD5FH3.cjs → chunk-KASXKDF2.cjs} +8 -3
- package/dist/chunk-KJ26T7GM.cjs +367 -0
- package/dist/chunk-KM7R5YPS.cjs +385 -0
- package/dist/{chunk-MBBY4ZIK.js → chunk-KMP6Y3LJ.js} +4 -1
- package/dist/chunk-KWXGDSYT.js +184 -0
- package/dist/{chunk-C5IJIM2V.cjs → chunk-L46OUKW5.cjs} +68 -37
- package/dist/{chunk-6UJMCWRY.js → chunk-L6OH44HL.js} +19 -9
- package/dist/chunk-LANGD5CO.js +280 -0
- package/dist/{chunk-APIXPPMT.js → chunk-LEZEWKPA.js} +1004 -39
- package/dist/{chunk-ULQ6MDSJ.cjs → chunk-LFDPTJYF.cjs} +43 -35
- package/dist/chunk-LJD7KR3L.cjs +44 -0
- package/dist/{chunk-NCC6ETZS.js → chunk-LUMV3DB2.js} +41 -33
- package/dist/{chunk-QXH5RCFI.js → chunk-M5DK524Z.js} +2 -2
- package/dist/chunk-M7B7RRBK.cjs +1034 -0
- package/dist/chunk-MANJ67D3.js +3897 -0
- package/dist/{chunk-HPHJ73GU.cjs → chunk-MGNXABSU.cjs} +9 -9
- package/dist/{chunk-6ZCULLCA.js → chunk-MMKZSJUN.js} +1 -1
- package/dist/{chunk-DVUHHH3B.cjs → chunk-MQQH4XQH.cjs} +4 -4
- package/dist/chunk-MUNUUFU7.cjs +21 -0
- package/dist/{chunk-DVZOENQ7.cjs → chunk-MZN6JBRZ.cjs} +9 -4
- package/dist/{chunk-OOKY3HPZ.js → chunk-NB6M6ESM.js} +50 -9
- package/dist/{chunk-BYONM7UM.js → chunk-NBGOIFKP.js} +265 -18
- package/dist/chunk-NHWHEW7M.cjs +75 -0
- package/dist/chunk-NQZH5CR2.cjs +468 -0
- package/dist/{chunk-EGPXJERY.cjs → chunk-NV6LCD2I.cjs} +119 -28
- package/dist/chunk-NVATU4V6.cjs +44 -0
- package/dist/{chunk-YZXUDM5X.js → chunk-NZ3ZWLUW.js} +204 -62
- package/dist/chunk-NZ7GCK7Y.cjs +92 -0
- package/dist/{chunk-VEKDGU2Q.cjs → chunk-NZQFKXM3.cjs} +49 -25
- package/dist/chunk-O5GI6SR3.js +59 -0
- package/dist/{chunk-56SWIDEL.cjs → chunk-OCATAKXV.cjs} +57 -56
- package/dist/{chunk-SKV2F3NM.js → chunk-OIGYWOL6.js} +1 -1
- package/dist/{chunk-IFFXSTOM.cjs → chunk-ONVYXTUT.cjs} +3 -3
- package/dist/chunk-OR67YXQK.cjs +13 -0
- package/dist/chunk-OV3T5MUH.cjs +715 -0
- package/dist/{chunk-OHUZKDGX.js → chunk-P4FUTSVK.js} +3 -3
- package/dist/chunk-P6SLT2F4.cjs +139 -0
- package/dist/{chunk-TNZRZQ7Q.js → chunk-PB7W7R72.js} +3 -78
- package/dist/chunk-PCM3N3CL.cjs +37 -0
- package/dist/{chunk-2AA5MFES.js → chunk-PGFLPURU.js} +8 -5
- package/dist/{chunk-DJDE4DTT.cjs → chunk-PIXQ2AVM.cjs} +25 -19
- package/dist/chunk-PNIAIOMZ.cjs +229 -0
- package/dist/{chunk-HTLINWX6.cjs → chunk-PQBYFEBL.cjs} +16 -13
- package/dist/{chunk-22D2CNTP.cjs → chunk-PSAH4ZQB.cjs} +5 -2
- package/dist/{chunk-3VTAFAL2.js → chunk-PTTZI4QZ.js} +16 -12
- package/dist/{chunk-WPVWQSL7.cjs → chunk-PY73W5MQ.cjs} +16 -13
- package/dist/{chunk-EGMZDTSL.js → chunk-PZZMIYII.js} +10 -2
- package/dist/{chunk-HBZU3RBZ.js → chunk-Q3BS6FPM.js} +34 -10
- package/dist/chunk-QBYGMMDD.js +517 -0
- package/dist/chunk-QLZOMZO5.cjs +388 -0
- package/dist/{chunk-ADUFCS4Q.cjs → chunk-QQ64HEHP.cjs} +160 -79
- package/dist/{chunk-L3TWPROA.js → chunk-QRQF3556.js} +44 -24
- package/dist/{chunk-YHD6TUIR.cjs → chunk-QW2RW2GY.cjs} +2 -0
- package/dist/chunk-RAKO7UN7.js +114 -0
- package/dist/{chunk-7TQH3CL4.cjs → chunk-RBXBH6EB.cjs} +78 -35
- package/dist/chunk-RFUKZIJF.cjs +78 -0
- package/dist/chunk-RS2E32YB.js +71 -0
- package/dist/{chunk-OLSBBZW6.cjs → chunk-S5JNQIGL.cjs} +5 -5
- package/dist/{chunk-FTYY5JJD.js → chunk-S5QKRA2V.js} +2 -2
- package/dist/chunk-SD3NTC7D.cjs +77 -0
- package/dist/{chunk-KPELYZ6L.js → chunk-SDLY4X3G.js} +2 -2
- package/dist/{chunk-IDFF5J2E.js → chunk-SFFEKZGC.js} +38 -7
- package/dist/{chunk-EGFT4PGW.js → chunk-SHRLFX6F.js} +8 -3
- package/dist/{chunk-3WICOC33.js → chunk-SNDDZG5H.js} +124 -84
- package/dist/{chunk-CZXGCVTR.cjs → chunk-SOVR7S3T.cjs} +2 -2
- package/dist/chunk-SPQ7QIQ6.js +78 -0
- package/dist/{chunk-XRZEUWKF.js → chunk-SRMGWMQO.js} +1 -1
- package/dist/{chunk-R33VKSH5.cjs → chunk-SVVP4UUZ.cjs} +11 -11
- package/dist/{chunk-7BTSG4ME.cjs → chunk-SY2P3Z5W.cjs} +1004 -39
- package/dist/chunk-SZD45IDG.js +468 -0
- package/dist/{chunk-3O3MOK5C.cjs → chunk-TE4SYTWR.cjs} +1114 -142
- package/dist/chunk-TH26BQJG.js +101 -0
- package/dist/{chunk-QNGEW5TC.js → chunk-TR6NECEZ.js} +1 -1
- package/dist/{chunk-YGN4CQIP.js → chunk-TYBPTKFT.js} +1 -1
- package/dist/{chunk-GJH7XMSK.js → chunk-U2QUMKCB.js} +8 -6
- package/dist/{chunk-47CKWKEX.cjs → chunk-U6PLSPMD.cjs} +9 -4
- package/dist/chunk-UOQECODR.js +34 -0
- package/dist/chunk-UR27UDTB.js +354 -0
- package/dist/chunk-UWZ4G3SQ.js +93 -0
- package/dist/{chunk-Y72HH2TF.cjs → chunk-V3SZLWEQ.cjs} +33 -24
- package/dist/chunk-V4HGZSKQ.cjs +183 -0
- package/dist/{chunk-3PDTTAKJ.js → chunk-V5ELP2XE.js} +19 -12
- package/dist/{chunk-3K2ESU53.cjs → chunk-VKOXFT4L.cjs} +2 -2
- package/dist/{chunk-XTB6VJVQ.cjs → chunk-VLGGMQUN.cjs} +6 -6
- package/dist/chunk-VQHSYAPZ.cjs +3897 -0
- package/dist/chunk-VUGOOGHB.js +400 -0
- package/dist/chunk-W5QLA6WP.cjs +866 -0
- package/dist/chunk-WBU4Q4GS.cjs +400 -0
- package/dist/{chunk-KWXVKLQ5.cjs → chunk-WGNMOVMT.cjs} +7 -82
- package/dist/chunk-WJYFLQ7G.cjs +27 -0
- package/dist/{chunk-RKJTGGMU.cjs → chunk-WKRDBCP2.cjs} +221 -16
- package/dist/{chunk-ZSPXQYG2.js → chunk-WNJXIACY.js} +7 -5
- package/dist/{chunk-AYS2ASM7.js → chunk-WPE2XHVX.js} +1 -1
- package/dist/chunk-WTB7AFL6.cjs +101 -0
- package/dist/{chunk-JYTDYJVW.js → chunk-X3TI5TJJ.js} +1 -1
- package/dist/chunk-X5P6QQOB.cjs +719 -0
- package/dist/{chunk-245KJE5Y.cjs → chunk-X7XMITIL.cjs} +14 -6
- package/dist/chunk-XF2WIKHR.cjs +34 -0
- package/dist/{chunk-DV2ZHK7B.cjs → chunk-XNIMSVS6.cjs} +49 -26
- package/dist/chunk-XW3XCK4E.cjs +59 -0
- package/dist/{chunk-N23UAW4I.js → chunk-XZVDYC5U.js} +7 -2
- package/dist/chunk-Y5BDE24P.cjs +444 -0
- package/dist/{chunk-NAGQ2PDC.js → chunk-YC5OBZQU.js} +1604 -433
- package/dist/chunk-YISPVAXO.cjs +2340 -0
- package/dist/{chunk-KQGPTCQJ.js → chunk-YQDI753V.js} +68 -25
- package/dist/{chunk-UJ2JSM6H.js → chunk-YVQI26H4.js} +2 -0
- package/dist/{chunk-NNPAM4HC.cjs → chunk-YWH55BWK.cjs} +15 -6
- package/dist/{chunk-X2YOZQIP.cjs → chunk-YWTIXHU6.cjs} +266 -19
- package/dist/{chunk-XX2ZO7DS.js → chunk-YXM6SA7P.js} +25 -16
- package/dist/chunk-YZWE7XSM.js +5 -0
- package/dist/chunk-ZASDSY7P.cjs +114 -0
- package/dist/{chunk-2UC22DJU.js → chunk-ZNGRLCFQ.js} +30 -4
- package/dist/{chunk-KANW6OYC.cjs → chunk-ZNYZB7XY.cjs} +34 -8
- package/dist/{chunk-NA6WQDYW.js → chunk-ZPLCAXJW.js} +1088 -116
- package/dist/{chunk-7UOUW76C.js → chunk-ZQAT5VT5.js} +101 -24
- package/dist/chunk-ZUYYHKQA.js +44 -0
- package/dist/clear-QJXU25IF.cjs +12 -0
- package/dist/{clear-A3N4GK2S.js → clear-Y5TO3RZA.js} +3 -3
- package/dist/communityInstaller-LXMVKVAV.cjs +22 -0
- package/dist/{communityInstaller-LOP2EDH5.js → communityInstaller-RVL4STPS.js} +8 -5
- package/dist/completion-JX4T2ONW.cjs +17 -0
- package/dist/completion-SE3XYG74.js +17 -0
- package/dist/config-3224PRW4.cjs +21 -0
- package/dist/{config-HPJPKTO6.js → config-7KPHKFTP.js} +7 -4
- package/dist/{constants-LISJW3DD.js → constants-EJFAWJQI.js} +1 -1
- package/dist/constants-MCCGUU5F.cjs +21 -0
- package/dist/{defaultHooks-IHSJR2AX.cjs → defaultHooks-2V2CQL63.cjs} +25 -10
- package/dist/{defaultHooks-KUKHK3AG.js → defaultHooks-TMHDU3FS.js} +25 -10
- package/dist/export-BJVIDZC4.js +15 -0
- package/dist/export-KU4557HK.cjs +15 -0
- package/dist/feature-K3LG5IJP.cjs +14 -0
- package/dist/feature-V4JF5TNJ.js +14 -0
- package/dist/features-5OJTLKS7.js +23 -0
- package/dist/features-VCBJQXCX.cjs +23 -0
- package/dist/feedback-D4437VE4.js +18 -0
- package/dist/feedback-VZPEHGFY.cjs +18 -0
- package/dist/fffSearchProvider-2YCNKOYD.js +412 -0
- package/dist/fffSearchProvider-W6627E2V.cjs +412 -0
- package/dist/{filesystem-Z7BWAWMZ.js → filesystem-L6DQKGWK.js} +3 -2
- package/dist/filesystem-PGUPCMVK.cjs +11 -0
- package/dist/go-X4E6BCD6.js +12 -0
- package/dist/go-XREVFS5I.cjs +12 -0
- package/dist/goal-4M3J6JS2.cjs +16 -0
- package/dist/goal-EI66BV7W.js +16 -0
- package/dist/help-GGFS7WHY.cjs +12 -0
- package/dist/{help-GFQXNZOK.js → help-MLIROWKM.js} +2 -2
- package/dist/{history-E3N6BJP7.js → history-GQJ6RZD6.js} +2 -2
- package/dist/history-J4LUIOSI.cjs +14 -0
- package/dist/hooks-FSRIUS6A.cjs +18 -0
- package/dist/hooks-PPFHCF7T.js +18 -0
- package/dist/i18n-CI6VFXL5.cjs +33 -0
- package/dist/{i18n-SY7QRM22.js → i18n-Q7UZJRPL.js} +1 -1
- package/dist/ide-BUSVE54P.js +15 -0
- package/dist/ide-YR27BPGM.cjs +15 -0
- package/dist/immediateCommandRouter-MTEHZXQX.js +15 -0
- package/dist/immediateCommandRouter-ROXU3MWT.cjs +15 -0
- package/dist/{import-W7SVLSTC.js → import-3VBKI6BN.js} +3 -3
- package/dist/{import-ADI37ZUR.cjs → import-C7S6UJMW.cjs} +3 -3
- package/dist/import-DBK4OCDF.cjs +10 -0
- package/dist/{import-KGKKZ3B7.js → import-U47DXCA7.js} +2 -2
- package/dist/index.cjs +837 -23011
- package/dist/index.d.cts +95 -0
- package/dist/index.d.ts +95 -0
- package/dist/index.js +864 -23038
- package/dist/init-OXTYS72D.cjs +10 -0
- package/dist/{init-7MFK626E.js → init-Q2O4R42R.js} +2 -2
- package/dist/inkMode-VUE6ZDLD.cjs +7 -0
- package/dist/inkMode-WBNFOSAT.js +7 -0
- package/dist/inputPrompt-3CFZDUBH.js +90 -0
- package/dist/inputPrompt-JMACL4EB.cjs +90 -0
- package/dist/language-EK3M6UBV.cjs +22 -0
- package/dist/language-Q3RUGGOW.js +22 -0
- package/dist/learn-3DSX7DYG.cjs +23 -0
- package/dist/learn-OPOH5L43.js +23 -0
- package/dist/login-GST7MWXJ.cjs +27 -0
- package/dist/login-Q7DZKAX4.js +27 -0
- package/dist/logout-2G7OUK7I.cjs +24 -0
- package/dist/logout-FNBBL2UI.js +24 -0
- package/dist/mcp-AH3MMUBU.js +21 -0
- package/dist/mcp-DW7R63IB.cjs +21 -0
- package/dist/{mcp-install-2FEROZTL.js → mcp-install-222PCKSW.js} +18 -10
- package/dist/{mcp-install-WM6BQRI5.cjs → mcp-install-IA4ZS2SV.cjs} +22 -14
- package/dist/memory-6NX3DAIY.cjs +10 -0
- package/dist/{memory-J73WZH2I.js → memory-VB46T5H3.js} +2 -2
- package/dist/model-64NAELFS.cjs +10 -0
- package/dist/{model-AES267IN.js → model-SJJG64AM.js} +2 -2
- package/dist/new-DU5SOOOY.cjs +12 -0
- package/dist/{new-5CLF3MKH.js → new-ERZ5C6CN.js} +3 -3
- package/dist/onboarding-2U2BV2KE.cjs +36 -0
- package/dist/onboarding-ZQXMPSMJ.js +36 -0
- package/dist/permissions-7ACNFK7A.js +10 -0
- package/dist/permissions-GSNNV7RJ.cjs +10 -0
- package/dist/plan-XEJMOT55.cjs +13 -0
- package/dist/{plan-65HMS5HQ.js → plan-YYUAXPTL.js} +3 -1
- package/dist/pr-review-CW6J7P62.cjs +9 -0
- package/dist/pr-review-YZSBQVT2.js +9 -0
- package/dist/{quit-XDZYRSPU.js → quit-WY6T267G.js} +2 -2
- package/dist/quit-XIRE2KRE.cjs +10 -0
- package/dist/rawMode-6W5AXAKI.cjs +7 -0
- package/dist/rawMode-GFNLXQPU.js +7 -0
- package/dist/{registry-PTHWERKC.js → registry-4DXUDKJN.js} +29 -44
- package/dist/{registry-IVT4G2RT.cjs → registry-UEO3ETZ7.cjs} +65 -80
- package/dist/repeat-P4FAPE3Y.cjs +17 -0
- package/dist/{repeat-EVCWUL6Z.js → repeat-RALE6AUO.js} +7 -3
- package/dist/resume-RQZ3WXBP.cjs +17 -0
- package/dist/resume-XSXZMDMD.js +17 -0
- package/dist/review-QHP2KP4Q.js +9 -0
- package/dist/review-UWHWQHCB.cjs +9 -0
- package/dist/ripgrep-67SCU2BA.cjs +9 -0
- package/dist/ripgrep-VHJQQ55W.js +9 -0
- package/dist/rpc-XH7QLN4H.js +3874 -0
- package/dist/rpc-YF54T7JU.cjs +3874 -0
- package/dist/search-VXXFGZWU.cjs +21 -0
- package/dist/search-YAWGX7P7.js +21 -0
- package/dist/{sessions-6GWEBMKS.js → sessions-NJYHJOEL.js} +2 -2
- package/dist/sessions-OSG3UJEZ.cjs +10 -0
- package/dist/settings-SO2UIGWV.cjs +42 -0
- package/dist/settings-ZXUQH3DO.js +42 -0
- package/dist/setup-KG7EGKF5.js +30 -0
- package/dist/setup-RSOPCQ57.cjs +30 -0
- package/dist/share-WFAGZ5PY.js +17 -0
- package/dist/share-ZU3SGACF.cjs +17 -0
- package/dist/skills-KBVAQAD2.cjs +29 -0
- package/dist/skills-NBTNDVAY.js +29 -0
- package/dist/{skills-ZZCIAS7C.js → skills-OB6RDW7D.js} +10 -7
- package/dist/{skills-PG542VEB.cjs → skills-ZROBG3RZ.cjs} +13 -10
- package/dist/{skills-install-SRC3Z2MS.js → skills-install-BHTIEMKH.js} +21 -70
- package/dist/{skills-install-67DOBPJC.cjs → skills-install-ILX6QVEF.cjs} +34 -83
- package/dist/skills-new-B45VQ2PP.cjs +18 -0
- package/dist/skills-new-YMRP2HNO.js +18 -0
- package/dist/slashCommands-53VYIBJU.js +105 -0
- package/dist/slashCommands-BG2RGGZ6.cjs +105 -0
- package/dist/status-CQ2IUOVK.cjs +24 -0
- package/dist/status-E7IGNVPC.js +24 -0
- package/dist/summarizer-DGPHE5IQ.js +17 -0
- package/dist/summarizer-JNXLUAQG.cjs +17 -0
- package/dist/sync-7C25MOT2.js +22 -0
- package/dist/{sync-VU2NSJ4O.js → sync-OCJN4ZSO.js} +3 -3
- package/dist/sync-XRP46IVG.cjs +40 -0
- package/dist/sync-ZMFVE7T4.cjs +22 -0
- package/dist/{teammate-SXRVXNQV.cjs → teammate-D77B6QRT.cjs} +31 -9
- package/dist/{teammate-SD26GR37.js → teammate-EZCMHOIL.js} +30 -8
- package/dist/templates-ARG2VRWW.cjs +11 -0
- package/dist/templates-UGVZV3KJ.js +11 -0
- package/dist/theme-KKRDE6P7.cjs +22 -0
- package/dist/theme-XF7XIWBQ.js +22 -0
- package/dist/tools-3PPTTKFV.js +9 -0
- package/dist/tools-THIQA7WC.cjs +9 -0
- package/dist/ui/questionModal.cjs +8 -5
- package/dist/ui/questionModal.js +7 -4
- package/dist/{undo-OL2EDBRY.js → undo-GNUTFXCW.js} +2 -2
- package/dist/undo-U4KN7QQM.cjs +10 -0
- package/dist/usage-QSTNSDAO.js +24 -0
- package/dist/usage-YDEMQBNQ.cjs +24 -0
- package/dist/web-3BA2WV37.cjs +37 -0
- package/dist/web-6FYGBX5K.js +37 -0
- package/dist/workspaceSafety-MDJGHK6D.cjs +9 -0
- package/dist/workspaceSafety-XOUMUBVB.js +9 -0
- package/dist/yolo-GF2YD7ZI.js +9 -0
- package/dist/yolo-OGDA7HNC.cjs +9 -0
- package/dist/yoloMode-3DJDA75U.cjs +17 -0
- package/dist/yoloMode-4JOOSU26.js +17 -0
- package/package.json +51 -49
- package/dist/AgentRegistry-HRPN6ZOF.cjs +0 -10
- package/dist/CommunitySkillsCache-KE435RAR.cjs +0 -8
- package/dist/GitHubRegistryFetcher-I45SESIL.cjs +0 -7
- package/dist/LearnAdvisor-FLBA6FDD.js +0 -9
- package/dist/LearnAdvisor-GG3CXQF3.cjs +0 -9
- package/dist/MemoryManager-2LQPIYVE.cjs +0 -8
- package/dist/PermissionManager-X57BXHJ6.cjs +0 -11
- package/dist/ProviderFactory-KPJOGQWF.cjs +0 -9
- package/dist/SessionManager-YBJAZXNO.cjs +0 -10
- package/dist/SkillsRegistry-7O72A6TZ.cjs +0 -9
- package/dist/SubAgent-JT4HZHN7.js +0 -11
- package/dist/SubAgent-VPNYDWAU.cjs +0 -11
- package/dist/SyncApiClient-HQXJL5BT.cjs +0 -11
- package/dist/about-4DB5KTHW.js +0 -12
- package/dist/about-LXAOXZFT.cjs +0 -12
- package/dist/actionExecutor-23JB2WUC.js +0 -19
- package/dist/actionExecutor-X5UEZSKH.cjs +0 -19
- package/dist/add-dir-YC37DMSF.cjs +0 -10
- package/dist/agents-YF3BSUU5.js +0 -12
- package/dist/agents-ZOUHPMYR.cjs +0 -12
- package/dist/agents-new-HSH4GQPG.js +0 -14
- package/dist/agents-new-VYUDOCE7.cjs +0 -14
- package/dist/autoSkill-X5W52WOE.cjs +0 -20
- package/dist/automode-SJGM7VEI.cjs +0 -10
- package/dist/chunk-ALYU6VTM.js +0 -105
- package/dist/chunk-B53A2NM2.js +0 -2030
- package/dist/chunk-BJXSNT46.js +0 -100
- package/dist/chunk-CB4E2T5N.cjs +0 -312
- package/dist/chunk-DNUOXBHL.js +0 -539
- package/dist/chunk-EFX2QSZX.cjs +0 -33
- package/dist/chunk-GCXYXLRA.cjs +0 -111
- package/dist/chunk-H2ZRHQQV.js +0 -33
- package/dist/chunk-HNRPK5MY.cjs +0 -85
- package/dist/chunk-HVKOZ2VP.cjs +0 -115
- package/dist/chunk-JJLYWH5Y.cjs +0 -100
- package/dist/chunk-LWUJFGOZ.js +0 -115
- package/dist/chunk-MERYP6AM.cjs +0 -539
- package/dist/chunk-MZAPWNAC.cjs +0 -207
- package/dist/chunk-NTSDP2WB.js +0 -226
- package/dist/chunk-OUZQXMHL.cjs +0 -226
- package/dist/chunk-PGESAU2W.cjs +0 -2030
- package/dist/chunk-SYVYLZZF.cjs +0 -24
- package/dist/chunk-SZOLA6FR.js +0 -111
- package/dist/chunk-VWDHR4HV.js +0 -168
- package/dist/chunk-Y45G6ZO5.cjs +0 -168
- package/dist/chunk-YRLYSQEQ.cjs +0 -105
- package/dist/chunk-ZYVS43MU.js +0 -312
- package/dist/clear-GK4IEUUS.cjs +0 -12
- package/dist/communityInstaller-XXC7RLE4.cjs +0 -19
- package/dist/completion-HWABSAEL.js +0 -14
- package/dist/completion-IUUVQG4D.cjs +0 -14
- package/dist/config-HF7WOLZF.cjs +0 -18
- package/dist/constants-PEO3P2SJ.cjs +0 -21
- package/dist/export-QJAV2FCZ.js +0 -12
- package/dist/export-XSRFXGWU.cjs +0 -12
- package/dist/feedback-4TCIL3ML.cjs +0 -15
- package/dist/feedback-SJ6VVEY3.js +0 -15
- package/dist/filesystem-W56QZUJF.cjs +0 -10
- package/dist/help-ISBVQL3S.cjs +0 -12
- package/dist/history-XQ4GTSFU.cjs +0 -14
- package/dist/hooks-CJNKJ5PF.js +0 -13
- package/dist/hooks-UTMBTAXT.cjs +0 -13
- package/dist/i18n-N7QQ7A5M.cjs +0 -33
- package/dist/ide-RTA4UJV4.js +0 -12
- package/dist/ide-VWVOLIFF.cjs +0 -12
- package/dist/immediateCommandRouter-BW34JNXL.js +0 -9
- package/dist/immediateCommandRouter-SHOVNB5X.cjs +0 -9
- package/dist/import-ZLJVONXH.cjs +0 -10
- package/dist/init-TBKAB4LZ.cjs +0 -10
- package/dist/language-MDSHEXHB.cjs +0 -18
- package/dist/language-PXTQSHIG.js +0 -18
- package/dist/learn-623TW5EK.cjs +0 -20
- package/dist/learn-BCPV7GM2.js +0 -20
- package/dist/localProjectPermissions-BHQXEWZJ.cjs +0 -18
- package/dist/localProjectPermissions-GMOUYQM6.js +0 -18
- package/dist/login-QMVEETWJ.js +0 -20
- package/dist/login-QYMXAL3K.cjs +0 -20
- package/dist/logout-2CMTDAOJ.js +0 -18
- package/dist/logout-ZOHVZAUK.cjs +0 -18
- package/dist/mcp-IUVKK65S.js +0 -18
- package/dist/mcp-TXC7PYG3.cjs +0 -18
- package/dist/memory-WRIHDEPK.cjs +0 -10
- package/dist/model-RLP75SF5.cjs +0 -10
- package/dist/new-HLSFL6A4.cjs +0 -12
- package/dist/permissions-GP6FTGZ2.js +0 -13
- package/dist/permissions-O6EKKPOG.cjs +0 -13
- package/dist/plan-MCAXDIM2.cjs +0 -11
- package/dist/quit-TQX6GXA5.cjs +0 -10
- package/dist/repeat-BSPS5TWD.cjs +0 -13
- package/dist/resume-2GOPDLL4.cjs +0 -13
- package/dist/resume-37IUVDA6.js +0 -13
- package/dist/search-7KUSHIBL.cjs +0 -17
- package/dist/search-OJGDRIMA.js +0 -17
- package/dist/sessions-CYYCHSQG.cjs +0 -10
- package/dist/settings-2D7CAO66.cjs +0 -30
- package/dist/settings-BXR6SBJP.js +0 -30
- package/dist/share-BXQY5IQU.js +0 -14
- package/dist/share-OSFXZBGS.cjs +0 -14
- package/dist/skills-FL6O6AOM.cjs +0 -26
- package/dist/skills-PNKQZRNK.js +0 -26
- package/dist/skills-new-XFMEHHIF.cjs +0 -15
- package/dist/skills-new-ZNZPHUKS.js +0 -15
- package/dist/slashCommands-LLCNPK3X.js +0 -76
- package/dist/slashCommands-RXZZS6RE.cjs +0 -76
- package/dist/status-BCECUJXT.cjs +0 -11
- package/dist/status-EFO7MQU3.js +0 -11
- package/dist/sync-IJYJ6KKM.js +0 -18
- package/dist/sync-LFT6SBPF.cjs +0 -18
- package/dist/sync-U7SDPBNZ.cjs +0 -40
- package/dist/theme-AWBHSG7J.cjs +0 -18
- package/dist/theme-TQLBPJ2E.js +0 -18
- package/dist/undo-IBBGP7A2.cjs +0 -10
|
@@ -0,0 +1,367 @@
|
|
|
1
|
+
import {
|
|
2
|
+
package_default
|
|
3
|
+
} from "./chunk-JB3JCYBJ.js";
|
|
4
|
+
import {
|
|
5
|
+
showModal
|
|
6
|
+
} from "./chunk-NZ3ZWLUW.js";
|
|
7
|
+
import {
|
|
8
|
+
saveConfig
|
|
9
|
+
} from "./chunk-IEPLQ47J.js";
|
|
10
|
+
import {
|
|
11
|
+
formatFeatureList,
|
|
12
|
+
formatFeatureStatus,
|
|
13
|
+
getFeatureState,
|
|
14
|
+
isLocalFeatureId,
|
|
15
|
+
listFeatureStates,
|
|
16
|
+
setFeatureState
|
|
17
|
+
} from "./chunk-LANGD5CO.js";
|
|
18
|
+
import {
|
|
19
|
+
AUTOHAND_FILES
|
|
20
|
+
} from "./chunk-SHRLFX6F.js";
|
|
21
|
+
|
|
22
|
+
// src/features/RemoteFeatureFlagManager.ts
|
|
23
|
+
import crypto from "crypto";
|
|
24
|
+
import os from "os";
|
|
25
|
+
import path from "path";
|
|
26
|
+
import fs from "fs-extra";
|
|
27
|
+
var FEATURE_FLAG_REQUEST_TIMEOUT_MS = 1500;
|
|
28
|
+
function getApiBaseUrl(config) {
|
|
29
|
+
return (config.api?.baseUrl || config.telemetry?.apiBaseUrl || "https://api.autohand.ai").replace(/\/+$/, "");
|
|
30
|
+
}
|
|
31
|
+
function readDeviceId() {
|
|
32
|
+
try {
|
|
33
|
+
fs.ensureDirSync(path.dirname(AUTOHAND_FILES.deviceId));
|
|
34
|
+
if (fs.existsSync(AUTOHAND_FILES.deviceId)) {
|
|
35
|
+
const existing = fs.readFileSync(AUTOHAND_FILES.deviceId, "utf8").trim();
|
|
36
|
+
if (existing) return existing;
|
|
37
|
+
}
|
|
38
|
+
const next = crypto.randomUUID();
|
|
39
|
+
fs.writeFileSync(AUTOHAND_FILES.deviceId, next);
|
|
40
|
+
return next;
|
|
41
|
+
} catch {
|
|
42
|
+
return crypto.randomUUID();
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
function parseSnapshot(value) {
|
|
46
|
+
if (value.success !== true || !Array.isArray(value.flags)) return null;
|
|
47
|
+
const flags = [];
|
|
48
|
+
for (const flag of value.flags) {
|
|
49
|
+
if (!flag || typeof flag !== "object") continue;
|
|
50
|
+
const candidate = flag;
|
|
51
|
+
if (typeof candidate.key !== "string" || typeof candidate.enabled !== "boolean") continue;
|
|
52
|
+
flags.push({
|
|
53
|
+
key: candidate.key,
|
|
54
|
+
enabled: candidate.enabled,
|
|
55
|
+
reason: typeof candidate.reason === "string" ? candidate.reason : "unknown",
|
|
56
|
+
userOverridable: candidate.userOverridable !== false
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
return {
|
|
60
|
+
success: true,
|
|
61
|
+
environment: typeof value.environment === "string" ? value.environment : "production",
|
|
62
|
+
flags,
|
|
63
|
+
evaluatedAt: typeof value.evaluatedAt === "string" ? value.evaluatedAt : (/* @__PURE__ */ new Date()).toISOString(),
|
|
64
|
+
ttlSeconds: typeof value.ttlSeconds === "number" ? value.ttlSeconds : 300
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
function isSnapshotFresh(snapshot) {
|
|
68
|
+
const evaluatedAt = Date.parse(snapshot.evaluatedAt);
|
|
69
|
+
if (Number.isNaN(evaluatedAt)) return false;
|
|
70
|
+
const ttlMs = Math.max(0, snapshot.ttlSeconds) * 1e3;
|
|
71
|
+
return Date.now() - evaluatedAt < ttlMs;
|
|
72
|
+
}
|
|
73
|
+
function createEvaluationUrl(config, deviceId, clientVersion) {
|
|
74
|
+
const environment = config.features?.environment || "production";
|
|
75
|
+
const url = new URL(`${getApiBaseUrl(config)}/v1/feature-flags/evaluate`);
|
|
76
|
+
url.searchParams.set("environment", environment);
|
|
77
|
+
url.searchParams.set("clientType", "cli");
|
|
78
|
+
url.searchParams.set("deviceId", deviceId);
|
|
79
|
+
url.searchParams.set("cliVersion", clientVersion);
|
|
80
|
+
url.searchParams.set("platform", process.platform);
|
|
81
|
+
return url;
|
|
82
|
+
}
|
|
83
|
+
async function downloadRemoteFeatureFlags(config, deviceId, clientVersion) {
|
|
84
|
+
const controller = new AbortController();
|
|
85
|
+
const timeout = setTimeout(() => controller.abort(), FEATURE_FLAG_REQUEST_TIMEOUT_MS);
|
|
86
|
+
try {
|
|
87
|
+
const response = await fetch(createEvaluationUrl(config, deviceId, clientVersion), { signal: controller.signal });
|
|
88
|
+
if (!response.ok) return null;
|
|
89
|
+
return parseSnapshot(await response.json());
|
|
90
|
+
} catch {
|
|
91
|
+
return null;
|
|
92
|
+
} finally {
|
|
93
|
+
clearTimeout(timeout);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
async function writeRemoteFeatureFlagCache(snapshot) {
|
|
97
|
+
await fs.ensureDir(path.dirname(AUTOHAND_FILES.featureFlagsCache));
|
|
98
|
+
await fs.writeJson(AUTOHAND_FILES.featureFlagsCache, snapshot, { spaces: 2 });
|
|
99
|
+
}
|
|
100
|
+
async function loadCachedRemoteFeatureFlags() {
|
|
101
|
+
try {
|
|
102
|
+
if (!await fs.pathExists(AUTOHAND_FILES.featureFlagsCache)) {
|
|
103
|
+
return null;
|
|
104
|
+
}
|
|
105
|
+
const data = await fs.readJson(AUTOHAND_FILES.featureFlagsCache);
|
|
106
|
+
return parseSnapshot(data);
|
|
107
|
+
} catch {
|
|
108
|
+
return null;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
async function loadRemoteFeatureFlags(config, options = {}) {
|
|
112
|
+
const cached = await loadCachedRemoteFeatureFlags();
|
|
113
|
+
if (!options.forceRefresh && cached && isSnapshotFresh(cached)) {
|
|
114
|
+
return cached;
|
|
115
|
+
}
|
|
116
|
+
const downloaded = await downloadRemoteFeatureFlags(config, readDeviceId(), package_default.version);
|
|
117
|
+
if (downloaded) {
|
|
118
|
+
await writeRemoteFeatureFlagCache(downloaded);
|
|
119
|
+
return downloaded;
|
|
120
|
+
}
|
|
121
|
+
return options.allowCachedFallback === false ? null : cached;
|
|
122
|
+
}
|
|
123
|
+
var RemoteFeatureFlagManager = class {
|
|
124
|
+
constructor(config) {
|
|
125
|
+
this.config = config;
|
|
126
|
+
this.apiBaseUrl = getApiBaseUrl(config);
|
|
127
|
+
this.environment = config.features?.environment || "production";
|
|
128
|
+
this.clientVersion = package_default.version;
|
|
129
|
+
}
|
|
130
|
+
config;
|
|
131
|
+
snapshot = null;
|
|
132
|
+
deviceId = readDeviceId();
|
|
133
|
+
apiBaseUrl;
|
|
134
|
+
environment;
|
|
135
|
+
clientVersion;
|
|
136
|
+
async refreshFeatureFlags() {
|
|
137
|
+
const downloaded = await downloadRemoteFeatureFlags(this.config, this.deviceId, this.clientVersion);
|
|
138
|
+
if (downloaded) {
|
|
139
|
+
this.snapshot = downloaded;
|
|
140
|
+
await writeRemoteFeatureFlagCache(downloaded);
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
this.snapshot = await loadCachedRemoteFeatureFlags();
|
|
144
|
+
}
|
|
145
|
+
getSnapshot() {
|
|
146
|
+
return this.snapshot;
|
|
147
|
+
}
|
|
148
|
+
isFeatureEnabled(key, localDefault = false) {
|
|
149
|
+
if (isLocalFeatureId(key)) {
|
|
150
|
+
return localDefault;
|
|
151
|
+
}
|
|
152
|
+
const flag = this.snapshot?.flags.find((item) => item.key === key);
|
|
153
|
+
if (!flag) return localDefault;
|
|
154
|
+
if (!flag.enabled) return false;
|
|
155
|
+
return this.config.features?.remoteOverrides?.[key] !== "off";
|
|
156
|
+
}
|
|
157
|
+
async trackFeatureActivation(key, metadata2) {
|
|
158
|
+
void metadata2;
|
|
159
|
+
const flag = this.snapshot?.flags.find((item) => item.key === key);
|
|
160
|
+
if (!flag || !this.isFeatureEnabled(key)) return;
|
|
161
|
+
try {
|
|
162
|
+
await fetch(`${this.apiBaseUrl}/v1/feature-flags/events`, {
|
|
163
|
+
method: "POST",
|
|
164
|
+
headers: { "Content-Type": "application/json" },
|
|
165
|
+
body: JSON.stringify({
|
|
166
|
+
events: [{
|
|
167
|
+
key,
|
|
168
|
+
environment: this.environment,
|
|
169
|
+
eventType: "activation",
|
|
170
|
+
enabled: true,
|
|
171
|
+
reason: flag.reason,
|
|
172
|
+
deviceId: this.deviceId,
|
|
173
|
+
clientType: "cli",
|
|
174
|
+
cliVersion: this.clientVersion,
|
|
175
|
+
platform: process.platform,
|
|
176
|
+
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
177
|
+
}]
|
|
178
|
+
})
|
|
179
|
+
});
|
|
180
|
+
} catch {
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
getStatus() {
|
|
184
|
+
return {
|
|
185
|
+
apiBaseUrl: this.apiBaseUrl,
|
|
186
|
+
environment: this.environment,
|
|
187
|
+
deviceId: this.deviceId,
|
|
188
|
+
platform: process.platform,
|
|
189
|
+
osVersion: os.release(),
|
|
190
|
+
evaluatedAt: this.snapshot?.evaluatedAt || null
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
};
|
|
194
|
+
|
|
195
|
+
// src/commands/features.ts
|
|
196
|
+
function renderUsage() {
|
|
197
|
+
return [
|
|
198
|
+
"Usage: /features [list|status|enable|disable|refresh]",
|
|
199
|
+
"",
|
|
200
|
+
"Commands:",
|
|
201
|
+
" /features",
|
|
202
|
+
" /features list",
|
|
203
|
+
" /features status <feature>",
|
|
204
|
+
" /features enable <feature>",
|
|
205
|
+
" /features disable <feature>",
|
|
206
|
+
" /features refresh"
|
|
207
|
+
].join("\n");
|
|
208
|
+
}
|
|
209
|
+
function requireConfig(config) {
|
|
210
|
+
return config ?? "Config not available.";
|
|
211
|
+
}
|
|
212
|
+
async function setFeatureEnabled(config, featureId, enabled, remoteSnapshot) {
|
|
213
|
+
if (!featureId) {
|
|
214
|
+
return renderUsage();
|
|
215
|
+
}
|
|
216
|
+
const snapshot = remoteSnapshot === void 0 ? await loadRemoteFeatureFlags(config) : remoteSnapshot;
|
|
217
|
+
const result = setFeatureState(config, featureId, enabled, { remoteSnapshot: snapshot });
|
|
218
|
+
if (!result.ok || !result.feature) {
|
|
219
|
+
return result.error ?? `Unknown feature "${featureId}".`;
|
|
220
|
+
}
|
|
221
|
+
await saveConfig(config);
|
|
222
|
+
if (result.feature.source === "remote") {
|
|
223
|
+
if (enabled) {
|
|
224
|
+
return `Following remote state for ${result.feature.id} (currently ${result.feature.enabled ? "on" : "off"}).`;
|
|
225
|
+
}
|
|
226
|
+
return `Disabled ${result.feature.id} locally. Remote state remains ${result.feature.remoteEnabled ? "on" : "off"}.`;
|
|
227
|
+
}
|
|
228
|
+
const action = enabled ? "Enabled" : "Disabled";
|
|
229
|
+
const restartNote = result.feature.requiresRestart ? " Restart Autohand for this to fully apply." : "";
|
|
230
|
+
return `${action} ${result.feature.id}.${restartNote}`;
|
|
231
|
+
}
|
|
232
|
+
async function showInteractiveFeatures(config, remoteSnapshot) {
|
|
233
|
+
let toggleCount = 0;
|
|
234
|
+
const pendingSaves = [];
|
|
235
|
+
const states = listFeatureStates(config, { remoteSnapshot });
|
|
236
|
+
const initialStates = new Map(states.map((feature) => [feature.id, feature.enabled]));
|
|
237
|
+
const finalStates = new Map(initialStates);
|
|
238
|
+
const restartRequired = new Set(states.filter((feature) => feature.requiresRestart).map((feature) => feature.id));
|
|
239
|
+
const options = states.map((feature) => ({
|
|
240
|
+
label: `${feature.id.padEnd(26)} ${feature.source.padEnd(8)} ${feature.stage.padEnd(12)} ${feature.enabled ? "on" : "off"}`,
|
|
241
|
+
value: feature.id,
|
|
242
|
+
checked: feature.enabled,
|
|
243
|
+
description: feature.description
|
|
244
|
+
}));
|
|
245
|
+
await showModal({
|
|
246
|
+
title: "Features - space toggles, enter closes",
|
|
247
|
+
options,
|
|
248
|
+
multiSelect: true,
|
|
249
|
+
maxVisible: 12,
|
|
250
|
+
onToggle: (option, checked) => {
|
|
251
|
+
const result = setFeatureState(config, option.value, checked, { remoteSnapshot });
|
|
252
|
+
if (!result.ok) {
|
|
253
|
+
return;
|
|
254
|
+
}
|
|
255
|
+
toggleCount += 1;
|
|
256
|
+
finalStates.set(option.value, result.feature?.enabled ?? checked);
|
|
257
|
+
pendingSaves.push(saveConfig(config));
|
|
258
|
+
}
|
|
259
|
+
});
|
|
260
|
+
await Promise.all(pendingSaves);
|
|
261
|
+
if (toggleCount === 0) {
|
|
262
|
+
return null;
|
|
263
|
+
}
|
|
264
|
+
const enabled = [];
|
|
265
|
+
const disabled = [];
|
|
266
|
+
for (const [featureId, initiallyEnabled] of initialStates) {
|
|
267
|
+
const finallyEnabled = finalStates.get(featureId);
|
|
268
|
+
if (finallyEnabled === initiallyEnabled || typeof finallyEnabled !== "boolean") {
|
|
269
|
+
continue;
|
|
270
|
+
}
|
|
271
|
+
if (finallyEnabled) {
|
|
272
|
+
enabled.push(featureId);
|
|
273
|
+
} else {
|
|
274
|
+
disabled.push(featureId);
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
return formatInteractiveFeatureSummary({
|
|
278
|
+
enabled,
|
|
279
|
+
disabled,
|
|
280
|
+
restartRequired: [...new Set([...enabled, ...disabled].filter((featureId) => restartRequired.has(featureId)))]
|
|
281
|
+
});
|
|
282
|
+
}
|
|
283
|
+
function formatChangedFeatures(action, featureIds) {
|
|
284
|
+
if (featureIds.length === 0) {
|
|
285
|
+
return null;
|
|
286
|
+
}
|
|
287
|
+
if (featureIds.length === 1) {
|
|
288
|
+
return `${action} ${featureIds[0]}.`;
|
|
289
|
+
}
|
|
290
|
+
return `${action} ${featureIds.length} features: ${featureIds.join(", ")}.`;
|
|
291
|
+
}
|
|
292
|
+
function formatInteractiveFeatureSummary(changes) {
|
|
293
|
+
const parts = [
|
|
294
|
+
formatChangedFeatures("Enabled", changes.enabled),
|
|
295
|
+
formatChangedFeatures("Disabled", changes.disabled)
|
|
296
|
+
].filter((part) => Boolean(part));
|
|
297
|
+
if (changes.restartRequired.length > 0) {
|
|
298
|
+
parts.push(`Restart required for: ${changes.restartRequired.join(", ")}.`);
|
|
299
|
+
}
|
|
300
|
+
return parts.length > 0 ? parts.join(" ") : null;
|
|
301
|
+
}
|
|
302
|
+
async function features(ctx, args = []) {
|
|
303
|
+
const required = requireConfig(ctx.config);
|
|
304
|
+
if (typeof required === "string") {
|
|
305
|
+
return required;
|
|
306
|
+
}
|
|
307
|
+
const subcommand = (args[0] ?? "").toLowerCase();
|
|
308
|
+
const featureId = args[1];
|
|
309
|
+
const forceRefresh = subcommand === "refresh";
|
|
310
|
+
const remoteSnapshot = await loadRemoteFeatureFlags(required, {
|
|
311
|
+
forceRefresh,
|
|
312
|
+
allowCachedFallback: !forceRefresh
|
|
313
|
+
});
|
|
314
|
+
switch (subcommand) {
|
|
315
|
+
case "":
|
|
316
|
+
return showInteractiveFeatures(required, remoteSnapshot);
|
|
317
|
+
case "list":
|
|
318
|
+
case "ls":
|
|
319
|
+
if (ctx.interactive) {
|
|
320
|
+
return showInteractiveFeatures(required, remoteSnapshot);
|
|
321
|
+
}
|
|
322
|
+
return formatFeatureList(required, { remoteSnapshot });
|
|
323
|
+
case "status":
|
|
324
|
+
case "show":
|
|
325
|
+
return featureId ? formatFeatureStatus(required, featureId, { remoteSnapshot }) : renderUsage();
|
|
326
|
+
case "enable":
|
|
327
|
+
case "on":
|
|
328
|
+
return setFeatureEnabled(required, featureId, true, remoteSnapshot);
|
|
329
|
+
case "disable":
|
|
330
|
+
case "off":
|
|
331
|
+
return setFeatureEnabled(required, featureId, false, remoteSnapshot);
|
|
332
|
+
case "refresh":
|
|
333
|
+
if (!remoteSnapshot) {
|
|
334
|
+
return "No remote feature flags available. Using local feature switches only.";
|
|
335
|
+
}
|
|
336
|
+
return `Downloaded ${remoteSnapshot.flags.length} remote feature${remoteSnapshot.flags.length === 1 ? "" : "s"} from ${remoteSnapshot.environment}.`;
|
|
337
|
+
default:
|
|
338
|
+
if (getFeatureState(required, subcommand, { remoteSnapshot })) {
|
|
339
|
+
return formatFeatureStatus(required, subcommand, { remoteSnapshot });
|
|
340
|
+
}
|
|
341
|
+
return renderUsage();
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
var metadata = {
|
|
345
|
+
command: "/features",
|
|
346
|
+
description: "list and toggle Autohand feature switches",
|
|
347
|
+
implemented: true,
|
|
348
|
+
subcommands: [
|
|
349
|
+
{ name: "list", description: "List feature switches and current state" },
|
|
350
|
+
{ name: "status", description: "Show one feature switch" },
|
|
351
|
+
{ name: "enable", description: "Enable a feature switch" },
|
|
352
|
+
{ name: "disable", description: "Disable a feature switch" },
|
|
353
|
+
{ name: "refresh", description: "Download remote feature flags from the Autohand API" }
|
|
354
|
+
]
|
|
355
|
+
};
|
|
356
|
+
|
|
357
|
+
export {
|
|
358
|
+
RemoteFeatureFlagManager,
|
|
359
|
+
setFeatureEnabled,
|
|
360
|
+
features,
|
|
361
|
+
metadata
|
|
362
|
+
};
|
|
363
|
+
/**
|
|
364
|
+
* @license
|
|
365
|
+
* Copyright 2026 Autohand AI LLC
|
|
366
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
367
|
+
*/
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
|
|
4
4
|
|
|
5
|
-
var
|
|
5
|
+
var _chunkCK4HAHVYcjs = require('./chunk-CK4HAHVY.cjs');
|
|
6
6
|
|
|
7
7
|
|
|
8
|
-
var
|
|
8
|
+
var _chunkSY2P3Z5Wcjs = require('./chunk-SY2P3Z5W.cjs');
|
|
9
9
|
|
|
10
10
|
// src/commands/export.ts
|
|
11
11
|
var _chalk = require('chalk'); var _chalk2 = _interopRequireDefault(_chalk);
|
|
@@ -245,7 +245,7 @@ function getSuggestedFilename(metadata2, format) {
|
|
|
245
245
|
// src/commands/export.ts
|
|
246
246
|
var metadata = {
|
|
247
247
|
command: "/export",
|
|
248
|
-
description:
|
|
248
|
+
description: _chunkSY2P3Z5Wcjs.t.call(void 0, "commands.export.description"),
|
|
249
249
|
implemented: true
|
|
250
250
|
};
|
|
251
251
|
async function execute(args, context) {
|
|
@@ -265,7 +265,7 @@ async function execute(args, context) {
|
|
|
265
265
|
label: `${s.projectName} - ${new Date(s.createdAt).toLocaleString()} (${s.messageCount} messages)`,
|
|
266
266
|
value: s.sessionId
|
|
267
267
|
}));
|
|
268
|
-
const sessionResult = await
|
|
268
|
+
const sessionResult = await _chunkCK4HAHVYcjs.showModal.call(void 0, {
|
|
269
269
|
title: "Select a session to export:",
|
|
270
270
|
options: sessionOptions
|
|
271
271
|
});
|
|
@@ -286,7 +286,7 @@ async function execute(args, context) {
|
|
|
286
286
|
{ label: "JSON (.json)", value: "json" },
|
|
287
287
|
{ label: "HTML (.html)", value: "html" }
|
|
288
288
|
];
|
|
289
|
-
const formatResult = await
|
|
289
|
+
const formatResult = await _chunkCK4HAHVYcjs.showModal.call(void 0, {
|
|
290
290
|
title: "Export format:",
|
|
291
291
|
options: formatOptions
|
|
292
292
|
});
|
|
@@ -297,17 +297,17 @@ async function execute(args, context) {
|
|
|
297
297
|
const format = formatResult.value;
|
|
298
298
|
const options = {};
|
|
299
299
|
if (format === "md" || format === "html") {
|
|
300
|
-
options.includeToolOutputs = await
|
|
300
|
+
options.includeToolOutputs = await _chunkCK4HAHVYcjs.showConfirm.call(void 0, {
|
|
301
301
|
title: "Include tool outputs?",
|
|
302
302
|
defaultValue: true
|
|
303
303
|
});
|
|
304
|
-
options.includeToc = await
|
|
304
|
+
options.includeToc = await _chunkCK4HAHVYcjs.showConfirm.call(void 0, {
|
|
305
305
|
title: "Include table of contents?",
|
|
306
306
|
defaultValue: false
|
|
307
307
|
});
|
|
308
308
|
}
|
|
309
309
|
const suggestedFilename = getSuggestedFilename(metadata2, format);
|
|
310
|
-
const filename = await
|
|
310
|
+
const filename = await _chunkCK4HAHVYcjs.showInput.call(void 0, {
|
|
311
311
|
title: "Save as:",
|
|
312
312
|
defaultValue: suggestedFilename
|
|
313
313
|
});
|
|
@@ -331,11 +331,11 @@ async function execute(args, context) {
|
|
|
331
331
|
try {
|
|
332
332
|
await saveExport(content, filePath);
|
|
333
333
|
console.log();
|
|
334
|
-
console.log(_chalk2.default.green(
|
|
334
|
+
console.log(_chalk2.default.green(_chunkSY2P3Z5Wcjs.t.call(void 0, "commands.export.success", { path: filePath })));
|
|
335
335
|
console.log(_chalk2.default.gray(` ${messages.length} messages, ${(Buffer.byteLength(content, "utf8") / 1024).toFixed(1)} KB`));
|
|
336
336
|
console.log();
|
|
337
337
|
} catch (error) {
|
|
338
|
-
console.log(_chalk2.default.red(
|
|
338
|
+
console.log(_chalk2.default.red(_chunkSY2P3Z5Wcjs.t.call(void 0, "commands.export.failed", { error: error.message })));
|
|
339
339
|
}
|
|
340
340
|
}
|
|
341
341
|
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
// src/commands/pr-review.ts
|
|
2
|
+
import chalk from "chalk";
|
|
3
|
+
var metadata = {
|
|
4
|
+
command: "/pr-review",
|
|
5
|
+
description: "review a pull request using gh metadata and diff context",
|
|
6
|
+
implemented: true
|
|
7
|
+
};
|
|
8
|
+
function buildPrompt(workspaceRoot, prSelector, additionalFocus) {
|
|
9
|
+
const ghViewCommand = prSelector ? `gh pr view ${prSelector}` : "gh pr view <number>";
|
|
10
|
+
const ghDiffCommand = prSelector ? `gh pr diff ${prSelector}` : "gh pr diff <number>";
|
|
11
|
+
const parts = [
|
|
12
|
+
"You are a staff-level pull request reviewer.",
|
|
13
|
+
"",
|
|
14
|
+
"## Pull Request Review Target",
|
|
15
|
+
`Workspace: ${workspaceRoot}`,
|
|
16
|
+
prSelector ? `PR selector: ${prSelector}` : "PR selector: not provided",
|
|
17
|
+
"",
|
|
18
|
+
"## Review Workflow",
|
|
19
|
+
"1. Confirm this is a GitHub repository and that the GitHub CLI is available.",
|
|
20
|
+
"2. If no PR selector is provided, run `gh pr list` and choose the most relevant open pull request before continuing.",
|
|
21
|
+
`3. Run \`${ghViewCommand}\` to gather PR metadata, changed files, title, base branch, and status.`,
|
|
22
|
+
`4. Run \`${ghDiffCommand}\` to inspect the actual patch before reviewing.`,
|
|
23
|
+
"5. Use repository tools such as `read_file`, `fff_grep`, `fff_find`, `git_diff`, and `git_status` to inspect the touched code paths in detail.",
|
|
24
|
+
"",
|
|
25
|
+
"## Review Output",
|
|
26
|
+
"Deliver findings first, ordered by severity, with concrete file references when possible.",
|
|
27
|
+
"Focus on correctness, regressions, missing tests, performance, security, and maintainability.",
|
|
28
|
+
"Keep the summary brief and only include it after the findings."
|
|
29
|
+
];
|
|
30
|
+
if (additionalFocus) {
|
|
31
|
+
parts.push("", "## Additional Focus", additionalFocus);
|
|
32
|
+
}
|
|
33
|
+
return parts.join("\n");
|
|
34
|
+
}
|
|
35
|
+
async function prReview(ctx, args = []) {
|
|
36
|
+
const [firstArg, ...restArgs] = args;
|
|
37
|
+
const prSelector = firstArg?.trim() ?? "";
|
|
38
|
+
const additionalFocus = restArgs.join(" ").trim();
|
|
39
|
+
const prompt = buildPrompt(ctx.workspaceRoot, prSelector, additionalFocus);
|
|
40
|
+
if (ctx.isNonInteractive || !ctx.queueInstruction) {
|
|
41
|
+
return prompt;
|
|
42
|
+
}
|
|
43
|
+
ctx.queueInstruction(prompt);
|
|
44
|
+
console.log(chalk.cyan("\n Starting pull request review..."));
|
|
45
|
+
if (prSelector) {
|
|
46
|
+
console.log(chalk.gray(` PR selector: ${prSelector}`));
|
|
47
|
+
}
|
|
48
|
+
if (additionalFocus) {
|
|
49
|
+
console.log(chalk.gray(` Focus: ${additionalFocus}`));
|
|
50
|
+
}
|
|
51
|
+
console.log(chalk.gray(" Gathering GitHub metadata and diff context before reviewing.\n"));
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export {
|
|
56
|
+
metadata,
|
|
57
|
+
prReview
|
|
58
|
+
};
|
|
59
|
+
/**
|
|
60
|
+
* @license
|
|
61
|
+
* Copyright 2026 Autohand AI LLC
|
|
62
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
63
|
+
*/
|