autohand-cli 0.8.2 → 0.9.0
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 +173 -74
- package/dist/AgentRegistry-EGBDIUAK.cjs +10 -0
- package/dist/{AgentRegistry-7LDL5HJH.js → AgentRegistry-XPWSVO3Q.js} +3 -3
- package/dist/{AutomodeManager-MWLKGPZK.js → AutomodeManager-APLLPEYJ.js} +32 -18
- package/dist/{AutomodeManager-NYIZNODK.cjs → AutomodeManager-MPSXT2RH.cjs} +38 -24
- package/dist/CommunitySkillsCache-2OIUV227.cjs +8 -0
- package/dist/CommunitySkillsCache-ZEQWP6YM.js +8 -0
- package/dist/GitHubRegistryFetcher-CYJLF2XL.cjs +7 -0
- package/dist/{GitHubRegistryFetcher-6JQ5JEDZ.js → GitHubRegistryFetcher-J2BWPXJF.js} +2 -2
- package/dist/HookManager-CWLTFKWO.js +7 -0
- package/dist/HookManager-TMAJQU4S.cjs +7 -0
- package/dist/{ImportWizard-35YBJ4AM.cjs → ImportWizard-MQXEED2U.cjs} +41 -17
- package/dist/{ImportWizard-XH7CINCH.js → ImportWizard-QBKQEXDW.js} +35 -11
- package/dist/LearnAdvisor-46FG2XIP.js +9 -0
- package/dist/LearnAdvisor-XBRDNAGH.cjs +9 -0
- package/dist/McpClientManager-BNSKLHIN.cjs +8 -0
- package/dist/{McpClientManager-7RM6YT35.js → McpClientManager-SL35BR24.js} +2 -2
- package/dist/MemoryManager-34L4YOKA.cjs +8 -0
- package/dist/MemoryManager-WJMLPWGU.js +8 -0
- package/dist/NVIDIAProvider-2HR737UE.js +14 -0
- package/dist/NVIDIAProvider-MVTL62PR.cjs +14 -0
- package/dist/PermissionManager-5OOJ7FAT.cjs +11 -0
- package/dist/{PermissionManager-ATUV34LQ.js → PermissionManager-KMYILJ4Z.js} +4 -4
- package/dist/{ProjectProfiler-ZDWR2ODG.cjs → ProjectProfiler-CDAE7ECW.cjs} +2 -1
- package/dist/{ProjectProfiler-UMJJSOCE.js → ProjectProfiler-NZTJDRHD.js} +2 -1
- package/dist/ProviderFactory-C3YPXTDD.cjs +11 -0
- package/dist/ProviderFactory-HFPRVQ25.js +11 -0
- package/dist/SessionManager-PNBTJJTQ.js +10 -0
- package/dist/SessionManager-WAPTFMDO.cjs +10 -0
- package/dist/SkillsRegistry-4RRD5GMX.js +9 -0
- package/dist/SkillsRegistry-7AJP74GJ.cjs +9 -0
- package/dist/SubAgent-FDIH3DXB.js +11 -0
- package/dist/SubAgent-HVL2ICVZ.cjs +11 -0
- package/dist/{SyncApiClient-LVIO4C2S.js → SyncApiClient-LRPFNCKJ.js} +2 -2
- package/dist/SyncApiClient-VMBOLQ6H.cjs +11 -0
- package/dist/about-BW3PDZUU.js +14 -0
- package/dist/about-FCAX37YC.cjs +14 -0
- package/dist/acp-EOETGAHC.cjs +1517 -0
- package/dist/acp-VHEL7BOW.js +1517 -0
- package/dist/actionExecutor-33I47NZS.js +24 -0
- package/dist/actionExecutor-4YBMR3YH.cjs +24 -0
- package/dist/add-dir-7SS6KSH5.cjs +11 -0
- package/dist/add-dir-VFX7QT4E.js +11 -0
- package/dist/agent-DMRUFU4M.cjs +116 -0
- package/dist/agent-WCJEYQJT.js +116 -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-CHROO3VU.cjs +17 -0
- package/dist/agents-UVDUL65K.js +17 -0
- package/dist/agents-new-AUBWSOXP.js +17 -0
- package/dist/agents-new-Y562WC47.cjs +17 -0
- package/dist/{autoSkill-6TGBTEQD.js → autoSkill-EFMK6WU6.js} +3 -3
- package/dist/autoSkill-YOLLFTP2.cjs +20 -0
- package/dist/automode-BMYSRM34.js +10 -0
- package/dist/automode-DBLKTTKD.cjs +10 -0
- package/dist/browserToolBridge-BXRQB4B4.cjs +58 -0
- package/dist/browserToolBridge-F5N66PE7.js +58 -0
- package/dist/{cc-7LEIJ3KF.js → cc-AYEP2CA3.js} +1 -1
- package/dist/{cc-Q5MM4AWC.cjs → cc-S2QLQFBR.cjs} +1 -1
- package/dist/chrome-ATC4OO5I.cjs +20 -0
- package/dist/chrome-NHJ44WUN.js +50 -0
- package/dist/chrome-O62WXV7F.js +20 -0
- package/dist/chrome-XHJLCO4M.cjs +50 -0
- package/dist/chromeSkill-53TH55PM.js +105 -0
- package/dist/chromeSkill-THW7N4IY.cjs +105 -0
- package/dist/{chunk-HOAHWIQ5.cjs → chunk-2CGE7ZV3.cjs} +26 -26
- package/dist/chunk-2H5O745H.js +63 -0
- package/dist/chunk-2HOLOHVK.js +2219 -0
- package/dist/{chunk-3PDTTAKJ.js → chunk-2QL6MNXG.js} +15 -8
- package/dist/{chunk-PGRH5Q77.cjs → chunk-2VHB43IX.cjs} +35 -6
- package/dist/{chunk-VG34MG2U.js → chunk-37M5UM6I.js} +9 -6
- package/dist/{chunk-6HYLHBQG.cjs → chunk-3DDL2E55.cjs} +20 -16
- package/dist/chunk-3EDDDZS2.cjs +5 -0
- package/dist/{chunk-6OYHF6MF.js → chunk-3GUEUCZK.js} +28 -4
- package/dist/{chunk-N254NRHT.cjs → chunk-3HT76LNN.cjs} +9 -2
- package/dist/{chunk-DVUHHH3B.cjs → chunk-3KLSNNRW.cjs} +4 -4
- package/dist/chunk-3LJJG5YY.cjs +387 -0
- package/dist/chunk-3OF56EMA.cjs +197 -0
- package/dist/chunk-3PXKRVCW.js +108 -0
- package/dist/{chunk-IKGWDOGU.cjs → chunk-3S563FNF.cjs} +160 -79
- package/dist/chunk-3UT7R3XV.js +663 -0
- package/dist/chunk-4256YRCO.cjs +80 -0
- package/dist/chunk-46C73ZKK.cjs +663 -0
- package/dist/chunk-46MTALKD.js +44 -0
- package/dist/{chunk-AEJH23FO.cjs → chunk-47PHDKNW.cjs} +6 -6
- package/dist/chunk-4LMUDS2K.js +124 -0
- package/dist/{chunk-HLHTG5ZU.cjs → chunk-5CMYEM3R.cjs} +14 -12
- package/dist/{chunk-MBBY4ZIK.js → chunk-5F6ZKSHO.js} +4 -1
- package/dist/chunk-5JFTY3VU.js +74 -0
- package/dist/chunk-5JTTM5SC.js +59 -0
- package/dist/{chunk-IETRBBMP.cjs → chunk-5K3CDSWZ.cjs} +108 -31
- package/dist/{chunk-GJH7XMSK.js → chunk-5VHP6HDQ.js} +8 -6
- package/dist/{chunk-6ZCULLCA.js → chunk-62RTC3XX.js} +1 -1
- package/dist/{chunk-MSED7RH2.cjs → chunk-6GUODJKM.cjs} +112 -41
- package/dist/{chunk-47CKWKEX.cjs → chunk-6HH236FV.cjs} +9 -4
- package/dist/{chunk-WHE2SWHU.js → chunk-6NVAK6CK.js} +2 -2
- package/dist/chunk-6R25D2H5.js +121 -0
- package/dist/{chunk-3PCTTUNW.cjs → chunk-6XVVIY54.cjs} +55 -25
- package/dist/{chunk-3L53OA4E.cjs → chunk-75EDROHL.cjs} +10 -10
- package/dist/{chunk-G4CAKI3V.js → chunk-7HPWMALN.js} +7 -2
- package/dist/chunk-7JLT2VNW.cjs +18963 -0
- package/dist/chunk-7LWQCE4Y.cjs +987 -0
- package/dist/{chunk-OLSBBZW6.cjs → chunk-7MU7LWF3.cjs} +5 -5
- package/dist/{chunk-HLQV64Y5.js → chunk-7RFJB75Y.js} +140 -59
- package/dist/{chunk-X2MSVKDV.js → chunk-A7HHCIDQ.js} +2 -2
- package/dist/{chunk-SKYG33B2.cjs → chunk-AC7DZ6SK.cjs} +3 -3
- package/dist/{chunk-XX2ZO7DS.js → chunk-ACDQGA4Z.js} +90 -16
- package/dist/{chunk-CZXGCVTR.cjs → chunk-AOKCI722.cjs} +2 -2
- package/dist/chunk-ARBEHFCG.js +715 -0
- package/dist/{chunk-OOKY3HPZ.js → chunk-AT7OWLY5.js} +50 -9
- package/dist/chunk-AU6JAGZJ.cjs +231 -0
- package/dist/chunk-AUFNACED.js +18963 -0
- package/dist/{chunk-CDBPBM2K.cjs → chunk-AUYSIEVV.cjs} +3 -3
- package/dist/chunk-B4HSNOIH.cjs +354 -0
- package/dist/{chunk-EGMZDTSL.js → chunk-B5CGDNMR.js} +10 -2
- package/dist/{chunk-34M3HWLR.js → chunk-BFQDQRDE.js} +2 -2
- package/dist/{chunk-2AA5MFES.js → chunk-BL2UC7HC.js} +8 -5
- package/dist/{chunk-LNMYK2F5.cjs → chunk-BQ22N3TX.cjs} +56 -41
- package/dist/chunk-BQU3HAE7.js +21 -0
- package/dist/chunk-BWF4VDYE.js +3897 -0
- package/dist/chunk-BYE7RQFZ.cjs +121 -0
- package/dist/{chunk-APIXPPMT.js → chunk-CBFH2J3O.js} +855 -33
- package/dist/chunk-CCVMREXI.js +420 -0
- package/dist/chunk-CFAWTLSC.js +13 -0
- package/dist/{chunk-G27PQQFD.js → chunk-CFFE4VA3.js} +1 -1
- package/dist/{chunk-ZYQMLKOK.cjs → chunk-CH2J4PVE.cjs} +212 -70
- package/dist/{chunk-7BTSG4ME.cjs → chunk-CHI52KFR.cjs} +855 -33
- package/dist/{chunk-DJDE4DTT.cjs → chunk-CWINVFRI.cjs} +25 -19
- package/dist/{chunk-HXGBSJL5.cjs → chunk-D2OSPLYC.cjs} +2 -2
- package/dist/{chunk-GBHDROGL.js → chunk-D6GZBSOX.js} +16 -4
- package/dist/{chunk-CNBKZEX5.cjs → chunk-DA7NBAJK.cjs} +49 -17
- package/dist/chunk-DEQVRSV5.cjs +866 -0
- package/dist/{chunk-RGR6ME5J.cjs → chunk-DI57A4BX.cjs} +25 -28
- package/dist/{chunk-WM5PAOTQ.cjs → chunk-DIZTWFVR.cjs} +1649 -484
- package/dist/{chunk-YZXUDM5X.js → chunk-DLP436GI.js} +204 -62
- package/dist/{chunk-OHUZKDGX.js → chunk-DMRXF5DU.js} +3 -3
- package/dist/{chunk-U46VYPLR.cjs → chunk-DPSIGY6L.cjs} +9 -9
- package/dist/{chunk-DN573ME7.cjs → chunk-DRWDEHE5.cjs} +4 -4
- package/dist/{chunk-SEKD5FH3.cjs → chunk-E26KKI46.cjs} +5 -2
- package/dist/{chunk-J4Q7XR3G.js → chunk-E46DJH5S.js} +3 -3
- package/dist/{chunk-Q7XSCYND.cjs → chunk-E6GFD7VR.cjs} +49 -26
- package/dist/chunk-ES2HJQ4N.js +37 -0
- package/dist/chunk-EZJHLOWP.js +80 -0
- package/dist/chunk-FFBDRUO5.cjs +59 -0
- package/dist/{chunk-AYSFIUFW.js → chunk-FGT6KK6T.js} +38 -15
- package/dist/{chunk-SAHBLB3E.js → chunk-FP46B4X3.js} +208 -3
- package/dist/{chunk-DSPQEHDT.js → chunk-FQAVGSPW.js} +2 -2
- package/dist/chunk-FQVG6ZHF.js +197 -0
- package/dist/chunk-GBMDFWJX.cjs +152 -0
- package/dist/{chunk-DRE2RXBZ.js → chunk-GGLKUENP.js} +1605 -440
- package/dist/{chunk-S52YW5ZQ.js → chunk-GNBBIAMD.js} +16 -19
- package/dist/{chunk-MYISNQH4.js → chunk-GWO66KBI.js} +1 -1
- package/dist/chunk-GWY26SUD.cjs +63 -0
- package/dist/{chunk-YGN4CQIP.js → chunk-GZ6DV2UG.js} +1 -1
- package/dist/{chunk-EZMINVLU.js → chunk-H4D2Q2AL.js} +5 -2
- package/dist/chunk-HDK2EHVH.cjs +570 -0
- package/dist/chunk-HJIXWGQZ.js +139 -0
- package/dist/{chunk-6RF7UKUS.js → chunk-HKYZSUQ5.js} +48 -47
- package/dist/{chunk-LQGVEP3E.js → chunk-HQUSEWT4.js} +45 -13
- package/dist/{chunk-HTLINWX6.cjs → chunk-HQWQZML5.cjs} +16 -13
- package/dist/{chunk-DVZOENQ7.cjs → chunk-HS4USDND.cjs} +9 -4
- package/dist/chunk-HSCUPEA4.cjs +3897 -0
- package/dist/{chunk-JCLYQ2JC.js → chunk-HXJEGMGB.js} +12 -6
- package/dist/{chunk-LJFUXC56.cjs → chunk-HXQREVTA.cjs} +9 -6
- package/dist/{chunk-SCXX4LW5.js → chunk-I24CWKKK.js} +15 -8
- package/dist/chunk-IAGCRVJ3.js +355 -0
- package/dist/chunk-IEXKKKOF.cjs +92 -0
- package/dist/{chunk-5IXII4HX.cjs → chunk-IGMPWJ2I.cjs} +19 -12
- package/dist/chunk-IKUMVBCW.cjs +33 -0
- package/dist/{chunk-XTB6VJVQ.cjs → chunk-J2K57QM7.cjs} +6 -6
- package/dist/{chunk-O4IF4NJT.cjs → chunk-J5ADZN6V.cjs} +57 -56
- package/dist/chunk-J5HE6CUM.cjs +124 -0
- package/dist/{chunk-JS7IPR7P.js → chunk-JAQO6XDB.js} +31 -2
- package/dist/chunk-JIMSII7R.js +987 -0
- package/dist/chunk-JJ4KA7HK.cjs +2219 -0
- package/dist/chunk-JMN3GZU6.js +570 -0
- package/dist/{chunk-X5VSP65C.cjs → chunk-JP3YHTQ2.cjs} +4 -4
- package/dist/{chunk-SKV2F3NM.js → chunk-JYKPWK5O.js} +1 -1
- package/dist/{chunk-NNPAM4HC.cjs → chunk-KNTUI4TZ.cjs} +12 -6
- package/dist/{chunk-HIVRCQS2.js → chunk-L4F7SUYL.js} +56 -25
- package/dist/{chunk-C5IJIM2V.cjs → chunk-LDJQ5QHG.cjs} +68 -37
- package/dist/{chunk-ULQ6MDSJ.cjs → chunk-LFDPTJYF.cjs} +43 -35
- package/dist/chunk-LJD7KR3L.cjs +44 -0
- package/dist/chunk-LN7D3EJZ.js +387 -0
- package/dist/{chunk-643VRA5S.cjs → chunk-LQBONA55.cjs} +32 -8
- package/dist/{chunk-NCC6ETZS.js → chunk-LUMV3DB2.js} +41 -33
- package/dist/chunk-M4KNC5BQ.js +78 -0
- package/dist/chunk-MO4KP6XS.cjs +229 -0
- package/dist/{chunk-BVKXEQVG.cjs → chunk-MOJ7ADW4.cjs} +22 -10
- package/dist/chunk-MPULXVC4.cjs +715 -0
- package/dist/{chunk-X5YJ34FZ.cjs → chunk-MQESBFBZ.cjs} +46 -23
- package/dist/chunk-MUNUUFU7.cjs +21 -0
- package/dist/{chunk-X3WS5LDG.js → chunk-MX75JYIY.js} +7 -5
- package/dist/chunk-MXVIDIC6.cjs +139 -0
- package/dist/{chunk-3K2ESU53.cjs → chunk-N6O3XUZ2.cjs} +2 -2
- package/dist/{chunk-IVM5F2AE.js → chunk-NBGOIFKP.js} +265 -18
- package/dist/{chunk-SLQAYV3W.js → chunk-NMQ47RCG.js} +8 -2
- package/dist/{chunk-JYTDYJVW.js → chunk-O64I2GYI.js} +1 -1
- package/dist/{chunk-IFFXSTOM.cjs → chunk-O6TQP7U7.cjs} +3 -3
- package/dist/{chunk-AYS2ASM7.js → chunk-OHWMWKJQ.js} +1 -1
- package/dist/{chunk-N23UAW4I.js → chunk-OM24WXEE.js} +7 -2
- package/dist/{chunk-MAKMSQMQ.cjs → chunk-OPNI6O7F.cjs} +8 -6
- package/dist/chunk-OR67YXQK.cjs +13 -0
- package/dist/{chunk-QOXPOR5D.js → chunk-OV3PVUYN.js} +115 -44
- package/dist/{chunk-TNZRZQ7Q.js → chunk-PB7W7R72.js} +3 -78
- package/dist/chunk-PCM3N3CL.cjs +37 -0
- package/dist/{chunk-A4IJHHV7.cjs → chunk-PDHT7LQS.cjs} +52 -11
- package/dist/{chunk-LA7H35XM.cjs → chunk-PHJO5YAL.cjs} +9 -9
- package/dist/{chunk-KPELYZ6L.js → chunk-PQLKJCIE.js} +2 -2
- package/dist/chunk-PUD76XQT.cjs +78 -0
- package/dist/chunk-Q2IL4DDI.cjs +355 -0
- package/dist/{chunk-WPVWQSL7.cjs → chunk-Q6AC3PHY.cjs} +16 -13
- package/dist/{chunk-XRZEUWKF.js → chunk-QCHIDZBA.js} +1 -1
- package/dist/{chunk-IQ5RXU6O.js → chunk-QEGOB6QV.js} +1 -1
- package/dist/{chunk-JSBRDJBE.js → chunk-QGM4M3NI.js} +8 -1
- package/dist/chunk-QKP772OZ.js +4291 -0
- package/dist/chunk-QQ7PANOP.js +59 -0
- package/dist/{chunk-YHD6TUIR.cjs → chunk-QW2RW2GY.cjs} +2 -0
- package/dist/chunk-RAKO7UN7.js +114 -0
- package/dist/chunk-RBHANOYY.js +33 -0
- package/dist/chunk-RBZ7AFX7.cjs +29 -0
- package/dist/{chunk-TXSDBGKX.cjs → chunk-REMGR23V.cjs} +46 -49
- package/dist/chunk-ROLA6EFO.cjs +85 -0
- package/dist/{chunk-TBEGGJNC.cjs → chunk-SOLBYSLY.cjs} +33 -16
- package/dist/{chunk-FKSDEWDH.js → chunk-SWCQM52V.js} +68 -25
- package/dist/{chunk-H5SWOLG6.js → chunk-TBOLJDUG.js} +39 -24
- package/dist/chunk-TH26BQJG.js +101 -0
- package/dist/{chunk-245KJE5Y.cjs → chunk-TJNBASFD.cjs} +14 -6
- package/dist/chunk-TKKN34TV.js +229 -0
- package/dist/chunk-TQ33WBY5.cjs +74 -0
- package/dist/{chunk-EGFT4PGW.js → chunk-TWQDAUZU.js} +5 -2
- package/dist/{chunk-OGV4WJ5L.cjs → chunk-TXPSTCG7.cjs} +74 -59
- package/dist/{chunk-CAMZTXV6.js → chunk-U4C3HW6P.js} +67 -52
- package/dist/{chunk-5P2NXKP3.js → chunk-UEIXJG45.js} +104 -76
- package/dist/{chunk-22D2CNTP.cjs → chunk-UGFVM77J.cjs} +5 -2
- package/dist/chunk-UOQECODR.js +34 -0
- package/dist/chunk-UR27UDTB.js +354 -0
- package/dist/chunk-UWFG2R2I.cjs +420 -0
- package/dist/{chunk-Y72HH2TF.cjs → chunk-UXLW45ZE.cjs} +102 -28
- package/dist/{chunk-FPHU2ES6.cjs → chunk-VBOFPU5M.cjs} +6 -0
- package/dist/{chunk-JX3DFKBI.js → chunk-VDWJMWDF.js} +54 -24
- package/dist/{chunk-LENHP55G.cjs → chunk-VGEV44V2.cjs} +1076 -158
- package/dist/{chunk-33RSHBDH.js → chunk-VKBIE6I6.js} +38 -7
- package/dist/{chunk-CWMZKFTT.js → chunk-VRMZO6TB.js} +31 -8
- package/dist/chunk-VUGOOGHB.js +400 -0
- package/dist/chunk-WBU4Q4GS.cjs +400 -0
- package/dist/chunk-WGLBC5AY.cjs +59 -0
- package/dist/{chunk-KWXVKLQ5.cjs → chunk-WGNMOVMT.cjs} +7 -82
- package/dist/{chunk-RKJTGGMU.cjs → chunk-WKRDBCP2.cjs} +221 -16
- package/dist/chunk-WRTXCQ3V.cjs +4291 -0
- package/dist/chunk-WTB7AFL6.cjs +101 -0
- package/dist/{chunk-NDMIPTV4.js → chunk-WZV6UVPY.js} +8 -3
- package/dist/chunk-XF2WIKHR.cjs +34 -0
- package/dist/{chunk-L3WAH3EM.cjs → chunk-XGMI6IYB.cjs} +46 -15
- package/dist/{chunk-FW774QXH.js → chunk-XIVFAD2L.js} +1048 -130
- package/dist/chunk-XV2HXRHX.js +85 -0
- package/dist/{chunk-72FKPBT5.js → chunk-Y3M2DABP.js} +16 -12
- package/dist/{chunk-QNGEW5TC.js → chunk-YV63VW4K.js} +1 -1
- package/dist/{chunk-UJ2JSM6H.js → chunk-YVQI26H4.js} +2 -0
- package/dist/{chunk-RD5XAJR2.cjs → chunk-YWTIXHU6.cjs} +266 -19
- package/dist/chunk-YZWE7XSM.js +5 -0
- package/dist/{chunk-I5IW3T2Y.js → chunk-Z3XSSF7B.js} +32 -15
- package/dist/{chunk-6UJMCWRY.js → chunk-Z4LIPMPM.js} +6 -0
- package/dist/chunk-ZASDSY7P.cjs +114 -0
- package/dist/{chunk-R33VKSH5.cjs → chunk-ZHJ7JGME.cjs} +11 -11
- package/dist/chunk-ZPD2AO3U.js +866 -0
- package/dist/{chunk-7UOUW76C.js → chunk-ZQAT5VT5.js} +101 -24
- package/dist/chunk-ZR46OJNZ.js +152 -0
- package/dist/{chunk-G3V4SFET.cjs → chunk-ZZ63NW7A.cjs} +78 -35
- package/dist/clear-33TWQ2ES.cjs +12 -0
- package/dist/clear-OFLFQ3MR.js +12 -0
- package/dist/{communityInstaller-6KCFN7YZ.js → communityInstaller-COB2KTOW.js} +9 -6
- package/dist/communityInstaller-TWMGPSYM.cjs +22 -0
- package/dist/completion-IIZMHXYP.cjs +17 -0
- package/dist/completion-PT4VM2H2.js +17 -0
- package/dist/config-KL6WU7R2.cjs +20 -0
- package/dist/{config-ZN66VXPS.js → config-R4O7GBTY.js} +7 -5
- package/dist/{constants-UFM5B232.js → constants-HVCHVQAF.js} +2 -2
- package/dist/constants-RLMJ5D5P.cjs +21 -0
- package/dist/{defaultHooks-RCXPHF4M.cjs → defaultHooks-2V2CQL63.cjs} +26 -11
- package/dist/{defaultHooks-RDRMER3Z.js → defaultHooks-TMHDU3FS.js} +26 -11
- package/dist/export-3PK3VFCE.js +15 -0
- package/dist/export-WLGNWEMJ.cjs +15 -0
- package/dist/{extractSessionMemories-V7K42ZHW.js → extractSessionMemories-A2JX5WJ2.js} +1 -1
- package/dist/{extractSessionMemories-SDW2MVBQ.cjs → extractSessionMemories-XL3MS37F.cjs} +1 -1
- package/dist/feedback-G635NCLJ.js +18 -0
- package/dist/feedback-LLMK3TZH.cjs +18 -0
- package/dist/fffSearchProvider-2YCNKOYD.js +412 -0
- package/dist/fffSearchProvider-W6627E2V.cjs +412 -0
- package/dist/filesystem-L6DQKGWK.js +11 -0
- package/dist/filesystem-PGUPCMVK.cjs +11 -0
- package/dist/{formatters-6K7QVWQL.cjs → formatters-53XTCNGQ.cjs} +1 -1
- package/dist/{formatters-DQHO5I36.js → formatters-T6KV4BPP.js} +1 -1
- package/dist/help-BAXLP2M2.cjs +12 -0
- package/dist/{help-2BLR7L43.js → help-X3OAZ3CY.js} +3 -3
- package/dist/history-6HOJSEMT.cjs +14 -0
- package/dist/{history-5FZ3M2AK.js → history-YKFPHBJN.js} +3 -3
- package/dist/hooks-7TA4PIIB.js +18 -0
- package/dist/hooks-XVFU67T2.cjs +18 -0
- package/dist/{i18n-K7QOWIBH.js → i18n-2KBUU7XL.js} +2 -2
- package/dist/i18n-MUJMKTFM.cjs +33 -0
- package/dist/ide-CCQ33PGC.cjs +15 -0
- package/dist/ide-VLVFBZ5F.js +15 -0
- package/dist/immediateCommandRouter-MTEHZXQX.js +15 -0
- package/dist/immediateCommandRouter-ROXU3MWT.cjs +15 -0
- package/dist/{import-UXM3VK7B.js → import-4CHYLS4K.js} +4 -4
- package/dist/{import-QEME3E4T.cjs → import-I7T4ZHYL.cjs} +4 -4
- package/dist/import-J46F54JY.cjs +10 -0
- package/dist/import-JWPYKXCZ.js +10 -0
- package/dist/index.cjs +747 -22356
- package/dist/index.d.cts +93 -0
- package/dist/index.d.ts +93 -0
- package/dist/index.js +786 -22395
- package/dist/init-262MWZV4.js +10 -0
- package/dist/init-EE5Y7RBL.cjs +10 -0
- package/dist/inkMode-VUE6ZDLD.cjs +7 -0
- package/dist/inkMode-WBNFOSAT.js +7 -0
- package/dist/inputPrompt-IIFKCX5Q.cjs +90 -0
- package/dist/inputPrompt-YGBHDUEP.js +90 -0
- package/dist/language-CVLPB7OV.js +21 -0
- package/dist/language-ZTWFHUSV.cjs +21 -0
- package/dist/learn-PON7I5QS.js +23 -0
- package/dist/learn-XLRSVNA3.cjs +23 -0
- package/dist/{lint-D5UOJWIK.cjs → lint-4NDGCSCL.cjs} +1 -1
- package/dist/{lint-NJPZWVN2.js → lint-FZ7ZJUB3.js} +1 -1
- package/dist/login-223QTGBG.cjs +26 -0
- package/dist/login-6IKTBUBY.js +26 -0
- package/dist/logout-RN2AG6SI.js +23 -0
- package/dist/logout-U3M4FFX7.cjs +23 -0
- package/dist/mcp-5O6PUL4G.js +20 -0
- package/dist/mcp-NUQ76QQB.cjs +20 -0
- package/dist/{mcp-install-VESN42PI.js → mcp-install-6XWXLFVY.js} +18 -11
- package/dist/{mcp-install-G27HSS3Z.cjs → mcp-install-P6DHES7V.cjs} +22 -15
- package/dist/memory-CYMDQ2YC.cjs +10 -0
- package/dist/memory-Q54CESNM.js +10 -0
- package/dist/{message-ZJ5AYAMT.cjs → message-4OKO775J.cjs} +1 -1
- package/dist/{message-JUBOK2VU.js → message-X3LOAAM7.js} +1 -1
- package/dist/model-6AJ77PJG.js +10 -0
- package/dist/model-IDRCKDML.cjs +10 -0
- package/dist/new-7LEWOUF2.cjs +12 -0
- package/dist/new-ZXHEWC2S.js +12 -0
- package/dist/onboarding-FXX7YHSJ.cjs +35 -0
- package/dist/onboarding-JYNMK6NI.js +35 -0
- package/dist/{patch-MOD7QC3D.cjs → patch-DJ2GPFST.cjs} +1 -1
- package/dist/{patch-5F6VBIT3.js → patch-NIJWIRHS.js} +1 -1
- package/dist/permissions-YBNSANIA.cjs +10 -0
- package/dist/permissions-YHJMVA6L.js +10 -0
- package/dist/plan-XEJMOT55.cjs +13 -0
- package/dist/plan-YYUAXPTL.js +13 -0
- package/dist/pr-review-CW6J7P62.cjs +9 -0
- package/dist/pr-review-YZSBQVT2.js +9 -0
- package/dist/quit-B43SJ6E4.cjs +10 -0
- package/dist/quit-GWTNHQSP.js +10 -0
- package/dist/rawMode-6W5AXAKI.cjs +7 -0
- package/dist/rawMode-GFNLXQPU.js +7 -0
- package/dist/{registry-KWZGYJC2.js → registry-34GL6BNJ.js} +30 -45
- package/dist/{registry-YN4FQPOO.cjs → registry-V24W7YK6.cjs} +66 -81
- package/dist/repeat-P4FAPE3Y.cjs +17 -0
- package/dist/repeat-RALE6AUO.js +17 -0
- package/dist/resume-DYVOQN5L.cjs +16 -0
- package/dist/resume-M25UQKOX.js +16 -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-NPS3PU4O.cjs +3730 -0
- package/dist/rpc-S3DGW6KV.js +3730 -0
- package/dist/search-CPX4PWHP.js +20 -0
- package/dist/search-VUF3M4N3.cjs +20 -0
- package/dist/{session-BSU2L5UI.cjs → session-LXKC4X5Q.cjs} +1 -1
- package/dist/{session-SZMRN5KG.js → session-NMMO4QOL.js} +1 -1
- package/dist/sessions-IYAXMK23.js +10 -0
- package/dist/sessions-JODKER5D.cjs +10 -0
- package/dist/settings-55BNW6BF.js +33 -0
- package/dist/settings-BKTS7OMC.cjs +33 -0
- package/dist/setup-IRC5HQG2.js +29 -0
- package/dist/setup-MMQ7TWOP.cjs +29 -0
- package/dist/share-6JRQECAH.cjs +17 -0
- package/dist/share-YM5MJKMO.js +17 -0
- package/dist/{skills-FYY6F2WV.cjs → skills-GGMZOVIE.cjs} +14 -11
- package/dist/skills-LWSOKOSH.cjs +29 -0
- package/dist/{skills-6OL4OSGA.js → skills-MVIZNHT4.js} +13 -10
- package/dist/skills-VWOMV3CR.js +29 -0
- package/dist/{skills-install-6CSWC24P.js → skills-install-QBA5RCV6.js} +22 -71
- package/dist/{skills-install-O3LZ2ETC.cjs → skills-install-VTAMCNNY.cjs} +35 -84
- package/dist/skills-new-GPL46YV2.js +18 -0
- package/dist/skills-new-L5BEZN5V.cjs +18 -0
- package/dist/slashCommands-FBPCIWM5.cjs +95 -0
- package/dist/slashCommands-FCWY5DXW.js +95 -0
- package/dist/status-3B5SDZPL.js +17 -0
- package/dist/status-TTGRF6NC.cjs +17 -0
- package/dist/summarizer-DGPHE5IQ.js +17 -0
- package/dist/summarizer-JNXLUAQG.cjs +17 -0
- package/dist/sync-77CXVVTK.cjs +21 -0
- package/dist/{sync-KWX67OUN.js → sync-7BILIQHP.js} +4 -4
- package/dist/sync-7OKF6636.js +21 -0
- package/dist/sync-EH4K5U3N.cjs +40 -0
- package/dist/{tasks-5FPBIFLC.js → tasks-R5MBGAQ6.js} +1 -1
- package/dist/{tasks-TXGKGNH6.cjs → tasks-V4WB3MFR.cjs} +1 -1
- package/dist/{team-5YXP3JGR.js → team-JESCHGWB.js} +1 -1
- package/dist/{team-IIWEZKNR.cjs → team-VQQKWGZB.cjs} +1 -1
- package/dist/{teammate-L6EZQ3I2.js → teammate-GZQSCIMS.js} +29 -8
- package/dist/{teammate-2KMKJXAM.cjs → teammate-J6PHGL23.cjs} +30 -9
- package/dist/theme-64BYGJ57.cjs +21 -0
- package/dist/theme-YJE6HEON.js +21 -0
- package/dist/tools-3PPTTKFV.js +9 -0
- package/dist/tools-THIQA7WC.cjs +9 -0
- package/dist/ui/questionModal.cjs +9 -6
- package/dist/ui/questionModal.js +8 -5
- package/dist/undo-PRTEGL2J.cjs +10 -0
- package/dist/undo-SZEHLX7X.js +10 -0
- package/dist/{update-TVAJMMBC.js → update-53WMKYVS.js} +1 -1
- package/dist/{update-Z6BIIQDC.cjs → update-NV6QRYY7.cjs} +1 -1
- 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 +46 -49
- package/dist/AgentRegistry-NQCLWABO.cjs +0 -10
- package/dist/CommunitySkillsCache-6QPRMTJO.js +0 -8
- package/dist/CommunitySkillsCache-GTQMOCCO.cjs +0 -8
- package/dist/GitHubRegistryFetcher-S7QFUEKV.cjs +0 -7
- package/dist/HookManager-Q2KYMCP4.cjs +0 -7
- package/dist/HookManager-TTP4Y6DC.js +0 -7
- package/dist/LearnAdvisor-A4Q5PPBI.js +0 -9
- package/dist/LearnAdvisor-GASQD7HT.cjs +0 -9
- package/dist/McpClientManager-RKD7C6OY.cjs +0 -8
- package/dist/MemoryManager-GUNLRP5S.js +0 -8
- package/dist/MemoryManager-TNSGKDKX.cjs +0 -8
- package/dist/PermissionManager-KMN53FJP.cjs +0 -11
- package/dist/ProviderFactory-MR5B23QJ.js +0 -9
- package/dist/ProviderFactory-VFGCJJX6.cjs +0 -9
- package/dist/SessionManager-FEUAU3ZJ.cjs +0 -10
- package/dist/SessionManager-IKWAK2PI.js +0 -10
- package/dist/SkillsRegistry-KPQFTRIT.cjs +0 -9
- package/dist/SkillsRegistry-XJSKPDF2.js +0 -9
- package/dist/SubAgent-NYH6GWQ3.js +0 -11
- package/dist/SubAgent-PZKBDUBA.cjs +0 -11
- package/dist/SyncApiClient-ZNYMT36M.cjs +0 -11
- package/dist/about-HHTF2YFL.js +0 -12
- package/dist/about-JGRVNNQC.cjs +0 -12
- package/dist/actionExecutor-U6IBN2TU.cjs +0 -19
- package/dist/actionExecutor-XT5FW3W6.js +0 -19
- package/dist/add-dir-247K3XRY.js +0 -10
- package/dist/add-dir-GS4DXKKH.cjs +0 -10
- package/dist/agents-R6ZEFTVR.cjs +0 -12
- package/dist/agents-WJPQWQF2.js +0 -12
- package/dist/agents-new-HKVEIBDJ.js +0 -14
- package/dist/agents-new-X6GTHIO6.cjs +0 -14
- package/dist/autoSkill-H4T6VVDA.cjs +0 -20
- package/dist/automode-BC6NVECO.js +0 -10
- package/dist/automode-WN2RSOGW.cjs +0 -10
- package/dist/chunk-33A755XB.cjs +0 -168
- package/dist/chunk-3OTU3RS3.cjs +0 -1607
- package/dist/chunk-4PKF7WPD.js +0 -100
- package/dist/chunk-ALYU6VTM.js +0 -105
- package/dist/chunk-AS6RTLN7.cjs +0 -203
- package/dist/chunk-BWN2CLLM.cjs +0 -298
- package/dist/chunk-HQ7YZKXE.js +0 -168
- package/dist/chunk-HVKOZ2VP.cjs +0 -115
- package/dist/chunk-J6QET7EF.cjs +0 -454
- package/dist/chunk-LWUJFGOZ.js +0 -115
- package/dist/chunk-P47WPOXN.js +0 -298
- package/dist/chunk-PRRCJFU3.cjs +0 -85
- package/dist/chunk-RO6WYEWH.js +0 -454
- package/dist/chunk-SYVYLZZF.cjs +0 -24
- package/dist/chunk-T73IDKDF.js +0 -111
- package/dist/chunk-YRLYSQEQ.cjs +0 -105
- package/dist/chunk-ZQE72E6W.cjs +0 -100
- package/dist/chunk-ZVY2XD6T.js +0 -1607
- package/dist/clear-UO4MNWZW.cjs +0 -12
- package/dist/clear-ZJ5NYP6E.js +0 -12
- package/dist/communityInstaller-PVSOFDZD.cjs +0 -19
- package/dist/completion-MMF2PN2H.js +0 -14
- package/dist/completion-UI5WKHXI.cjs +0 -14
- package/dist/config-E7RINK4R.cjs +0 -18
- package/dist/constants-6CPCJ3DY.cjs +0 -21
- package/dist/export-N4XIVDSL.cjs +0 -12
- package/dist/export-W22L4D5C.js +0 -12
- package/dist/feedback-DR6ADSNE.cjs +0 -15
- package/dist/feedback-FEEAP4QW.js +0 -15
- package/dist/filesystem-3SGCW2BF.js +0 -10
- package/dist/filesystem-MCFXJQ6R.cjs +0 -10
- package/dist/help-AQHGTS7P.cjs +0 -12
- package/dist/history-NIUDRMKA.cjs +0 -14
- package/dist/hooks-2EY4IPKV.js +0 -13
- package/dist/hooks-LJVORRIG.cjs +0 -13
- package/dist/i18n-ARDG2SMC.cjs +0 -33
- package/dist/ide-GFW6IJHD.js +0 -12
- package/dist/ide-N2ZNSSB3.cjs +0 -12
- package/dist/import-DFVN3KNZ.js +0 -10
- package/dist/import-ZS6DPGU5.cjs +0 -10
- package/dist/init-PY75HA3S.cjs +0 -10
- package/dist/init-QNMWLAVY.js +0 -10
- package/dist/language-5UE4G2BT.cjs +0 -18
- package/dist/language-UXMHEZUJ.js +0 -18
- package/dist/learn-HJ3FLNZC.cjs +0 -20
- package/dist/learn-MVYS3RU5.js +0 -20
- package/dist/localProjectPermissions-N77HA3XK.js +0 -18
- package/dist/localProjectPermissions-UFSMNTBJ.cjs +0 -18
- package/dist/login-DSE7H63A.js +0 -20
- package/dist/login-V3MEWPKN.cjs +0 -20
- package/dist/logout-BMVCLKKW.js +0 -18
- package/dist/logout-XEG7FHOZ.cjs +0 -18
- package/dist/mcp-PYUR4PHO.js +0 -18
- package/dist/mcp-SG6JFLGC.cjs +0 -18
- package/dist/memory-4ZMMEZ2Z.js +0 -10
- package/dist/memory-QSGMVVGH.cjs +0 -10
- package/dist/model-NANLBZ4Z.cjs +0 -10
- package/dist/model-ZXNV4AF7.js +0 -10
- package/dist/new-5QJY5JP2.js +0 -12
- package/dist/new-PMMG55UX.cjs +0 -12
- package/dist/permissions-LECTCJ4H.cjs +0 -13
- package/dist/permissions-VP5VGIBL.js +0 -13
- package/dist/plan-G5CEKJI4.js +0 -11
- package/dist/plan-QKOHE3LH.cjs +0 -11
- package/dist/quit-BKOOPHU5.cjs +0 -10
- package/dist/quit-FVFNYACP.js +0 -10
- package/dist/resume-EXFQSQPH.js +0 -13
- package/dist/resume-PP2IQM5S.cjs +0 -13
- package/dist/search-C56FBN67.cjs +0 -17
- package/dist/search-XGZDYBF4.js +0 -17
- package/dist/sessions-54KI3F2Q.js +0 -10
- package/dist/sessions-DDTSPNVW.cjs +0 -10
- package/dist/settings-BDO37TTO.cjs +0 -30
- package/dist/settings-FHRDFPLK.js +0 -30
- package/dist/share-IERCTBGN.cjs +0 -14
- package/dist/share-TGROUE6R.js +0 -14
- package/dist/skills-OM4IGBAA.cjs +0 -26
- package/dist/skills-S3GRN323.js +0 -26
- package/dist/skills-new-ALD2PTHN.js +0 -15
- package/dist/skills-new-PWLKK7GW.cjs +0 -15
- package/dist/slashCommands-L4ZD33LJ.js +0 -75
- package/dist/slashCommands-YY2VUUDF.cjs +0 -75
- package/dist/status-3PC5XWSS.cjs +0 -11
- package/dist/status-KCLVOYPD.js +0 -11
- package/dist/sync-6SDWG5RK.js +0 -18
- package/dist/sync-7JMZVEQD.cjs +0 -40
- package/dist/sync-WHURZL3U.cjs +0 -18
- package/dist/theme-BE5A4FPN.cjs +0 -18
- package/dist/theme-YMFCQP7J.js +0 -18
- package/dist/undo-KZHUUZTD.cjs +0 -10
- package/dist/undo-NEIEHQVX.js +0 -10
|
@@ -0,0 +1,663 @@
|
|
|
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; }
|
|
2
|
+
|
|
3
|
+
var _chunkMXVIDIC6cjs = require('./chunk-MXVIDIC6.cjs');
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
var _chunkYWTIXHU6cjs = require('./chunk-YWTIXHU6.cjs');
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
var _chunkE26KKI46cjs = require('./chunk-E26KKI46.cjs');
|
|
12
|
+
|
|
13
|
+
// src/config.ts
|
|
14
|
+
var _fsextra = require('fs-extra'); var _fsextra2 = _interopRequireDefault(_fsextra);
|
|
15
|
+
var _path = require('path'); var _path2 = _interopRequireDefault(_path);
|
|
16
|
+
var _yaml = require('yaml'); var _yaml2 = _interopRequireDefault(_yaml);
|
|
17
|
+
var DEFAULT_CONFIG_PATH = _chunkE26KKI46cjs.AUTOHAND_FILES.configJson;
|
|
18
|
+
var TOML_CONFIG_PATH = _chunkE26KKI46cjs.AUTOHAND_FILES.configToml;
|
|
19
|
+
var YAML_CONFIG_PATH = _chunkE26KKI46cjs.AUTOHAND_FILES.configYaml;
|
|
20
|
+
var YML_CONFIG_PATH = _chunkE26KKI46cjs.AUTOHAND_FILES.configYml;
|
|
21
|
+
var DEFAULT_BASE_URL = "https://openrouter.ai/api/v1";
|
|
22
|
+
var DEFAULT_OLLAMA_URL = "http://localhost:11434";
|
|
23
|
+
var DEFAULT_LLAMACPP_URL = "http://localhost:8080";
|
|
24
|
+
var DEFAULT_OPENAI_URL = "https://api.openai.com/v1";
|
|
25
|
+
var DEFAULT_MLX_URL = "http://localhost:8080";
|
|
26
|
+
var DEFAULT_LLMGATEWAY_URL = "https://api.llmgateway.io/v1";
|
|
27
|
+
var DEFAULT_ZAI_URL = "https://api.z.ai/api/paas/v4";
|
|
28
|
+
var DEFAULT_DEEPSEEK_URL = "https://api.deepseek.com";
|
|
29
|
+
function normalizeProviderName(provider) {
|
|
30
|
+
if (provider === void 0) {
|
|
31
|
+
return void 0;
|
|
32
|
+
}
|
|
33
|
+
if (provider === "vertex") {
|
|
34
|
+
return "vertexai";
|
|
35
|
+
}
|
|
36
|
+
const validProviders = [
|
|
37
|
+
"openrouter",
|
|
38
|
+
"ollama",
|
|
39
|
+
"llamacpp",
|
|
40
|
+
"openai",
|
|
41
|
+
"mlx",
|
|
42
|
+
"llmgateway",
|
|
43
|
+
"azure",
|
|
44
|
+
"zai",
|
|
45
|
+
"vertexai",
|
|
46
|
+
"xai",
|
|
47
|
+
"cerebras",
|
|
48
|
+
"nvidia",
|
|
49
|
+
"deepseek"
|
|
50
|
+
];
|
|
51
|
+
if (typeof provider === "string" && validProviders.includes(provider)) {
|
|
52
|
+
return provider;
|
|
53
|
+
}
|
|
54
|
+
return void 0;
|
|
55
|
+
}
|
|
56
|
+
function getDefaultConfigPath() {
|
|
57
|
+
return DEFAULT_CONFIG_PATH;
|
|
58
|
+
}
|
|
59
|
+
async function detectConfigPath(customPath) {
|
|
60
|
+
if (customPath) {
|
|
61
|
+
return _path2.default.resolve(customPath);
|
|
62
|
+
}
|
|
63
|
+
const envPath = process.env.AUTOHAND_CONFIG;
|
|
64
|
+
if (envPath) {
|
|
65
|
+
return _path2.default.resolve(envPath);
|
|
66
|
+
}
|
|
67
|
+
if (await _fsextra2.default.pathExists(TOML_CONFIG_PATH)) {
|
|
68
|
+
return TOML_CONFIG_PATH;
|
|
69
|
+
}
|
|
70
|
+
if (await _fsextra2.default.pathExists(YAML_CONFIG_PATH)) {
|
|
71
|
+
return YAML_CONFIG_PATH;
|
|
72
|
+
}
|
|
73
|
+
if (await _fsextra2.default.pathExists(YML_CONFIG_PATH)) {
|
|
74
|
+
return YML_CONFIG_PATH;
|
|
75
|
+
}
|
|
76
|
+
return DEFAULT_CONFIG_PATH;
|
|
77
|
+
}
|
|
78
|
+
async function checkConfigFilesExist(dir) {
|
|
79
|
+
const files = [];
|
|
80
|
+
for (const filename of ["config.json", "config.toml", "config.yaml", "config.yml"]) {
|
|
81
|
+
const candidate = _path2.default.join(dir, filename);
|
|
82
|
+
if (await _fsextra2.default.pathExists(candidate)) {
|
|
83
|
+
files.push(filename);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
return files.sort();
|
|
87
|
+
}
|
|
88
|
+
function isYamlFile(filePath) {
|
|
89
|
+
const ext = _path2.default.extname(filePath).toLowerCase();
|
|
90
|
+
return ext === ".yaml" || ext === ".yml";
|
|
91
|
+
}
|
|
92
|
+
function isTomlFile(filePath) {
|
|
93
|
+
return _path2.default.extname(filePath).toLowerCase() === ".toml";
|
|
94
|
+
}
|
|
95
|
+
function stripTomlComment(line) {
|
|
96
|
+
let inSingle = false;
|
|
97
|
+
let inDouble = false;
|
|
98
|
+
let escaped = false;
|
|
99
|
+
for (let i = 0; i < line.length; i += 1) {
|
|
100
|
+
const char = line[i];
|
|
101
|
+
if (escaped) {
|
|
102
|
+
escaped = false;
|
|
103
|
+
continue;
|
|
104
|
+
}
|
|
105
|
+
if (inDouble && char === "\\") {
|
|
106
|
+
escaped = true;
|
|
107
|
+
continue;
|
|
108
|
+
}
|
|
109
|
+
if (!inDouble && char === "'") {
|
|
110
|
+
inSingle = !inSingle;
|
|
111
|
+
continue;
|
|
112
|
+
}
|
|
113
|
+
if (!inSingle && char === '"') {
|
|
114
|
+
inDouble = !inDouble;
|
|
115
|
+
continue;
|
|
116
|
+
}
|
|
117
|
+
if (!inSingle && !inDouble && char === "#") {
|
|
118
|
+
return line.slice(0, i).trim();
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
return line.trim();
|
|
122
|
+
}
|
|
123
|
+
function splitTomlPath(input) {
|
|
124
|
+
return input.split(".").map((part) => part.trim().replace(/^"(.*)"$/, "$1")).filter(Boolean);
|
|
125
|
+
}
|
|
126
|
+
function parseTomlValue(raw) {
|
|
127
|
+
const value = raw.trim();
|
|
128
|
+
if (value.startsWith('"') && value.endsWith('"') || value.startsWith("'") && value.endsWith("'")) {
|
|
129
|
+
if (value.startsWith('"')) {
|
|
130
|
+
try {
|
|
131
|
+
return JSON.parse(value);
|
|
132
|
+
} catch (e) {
|
|
133
|
+
return value.slice(1, -1);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
return value.slice(1, -1);
|
|
137
|
+
}
|
|
138
|
+
if (value === "true") return true;
|
|
139
|
+
if (value === "false") return false;
|
|
140
|
+
if (/^-?\d+(?:\.\d+)?$/.test(value)) return Number(value);
|
|
141
|
+
if (value.startsWith("[") && value.endsWith("]")) {
|
|
142
|
+
const inner = value.slice(1, -1).trim();
|
|
143
|
+
if (!inner) return [];
|
|
144
|
+
return inner.split(",").map((entry) => parseTomlValue(entry.trim())).filter((entry) => typeof entry !== "object");
|
|
145
|
+
}
|
|
146
|
+
return value;
|
|
147
|
+
}
|
|
148
|
+
function getOrCreateTomlSection(root, pathParts) {
|
|
149
|
+
let current = root;
|
|
150
|
+
for (const part of pathParts) {
|
|
151
|
+
const existing = current[part];
|
|
152
|
+
if (Array.isArray(existing)) {
|
|
153
|
+
const last = existing[existing.length - 1];
|
|
154
|
+
if (last && typeof last === "object" && !Array.isArray(last)) {
|
|
155
|
+
current = last;
|
|
156
|
+
continue;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
if (!existing || typeof existing !== "object" || Array.isArray(existing)) {
|
|
160
|
+
current[part] = {};
|
|
161
|
+
}
|
|
162
|
+
current = current[part];
|
|
163
|
+
}
|
|
164
|
+
return current;
|
|
165
|
+
}
|
|
166
|
+
function getOrCreateTomlArraySection(root, pathParts) {
|
|
167
|
+
const parent = getOrCreateTomlSection(root, pathParts.slice(0, -1));
|
|
168
|
+
const key = pathParts[pathParts.length - 1];
|
|
169
|
+
const existing = parent[key];
|
|
170
|
+
if (!Array.isArray(existing)) {
|
|
171
|
+
parent[key] = [];
|
|
172
|
+
}
|
|
173
|
+
const section = {};
|
|
174
|
+
parent[key].push(section);
|
|
175
|
+
return section;
|
|
176
|
+
}
|
|
177
|
+
function parseTomlConfig(content) {
|
|
178
|
+
const root = {};
|
|
179
|
+
let current = root;
|
|
180
|
+
let hasData = false;
|
|
181
|
+
for (const rawLine of content.split(/\r?\n/)) {
|
|
182
|
+
const line = stripTomlComment(rawLine);
|
|
183
|
+
if (!line) continue;
|
|
184
|
+
const arraySection = line.match(/^\[\[([^\]]+)]]$/);
|
|
185
|
+
if (arraySection) {
|
|
186
|
+
current = getOrCreateTomlArraySection(root, splitTomlPath(arraySection[1]));
|
|
187
|
+
hasData = true;
|
|
188
|
+
continue;
|
|
189
|
+
}
|
|
190
|
+
const section = line.match(/^\[([^\]]+)]$/);
|
|
191
|
+
if (section) {
|
|
192
|
+
current = getOrCreateTomlSection(root, splitTomlPath(section[1]));
|
|
193
|
+
hasData = true;
|
|
194
|
+
continue;
|
|
195
|
+
}
|
|
196
|
+
const kv = line.match(/^([A-Za-z0-9_-]+)\s*=\s*(.+)$/);
|
|
197
|
+
if (!kv) {
|
|
198
|
+
throw new Error(`Invalid TOML line: ${rawLine.trim()}`);
|
|
199
|
+
}
|
|
200
|
+
current[kv[1]] = parseTomlValue(kv[2]);
|
|
201
|
+
hasData = true;
|
|
202
|
+
}
|
|
203
|
+
if (!hasData) {
|
|
204
|
+
throw new Error(
|
|
205
|
+
`Config file is empty or contains no valid data. You can fix this by editing the file, or delete it and run 'autohand --setup' to recreate.`
|
|
206
|
+
);
|
|
207
|
+
}
|
|
208
|
+
return root;
|
|
209
|
+
}
|
|
210
|
+
function isPlainObject(value) {
|
|
211
|
+
return Boolean(value) && typeof value === "object" && !Array.isArray(value);
|
|
212
|
+
}
|
|
213
|
+
function formatTomlKey(key) {
|
|
214
|
+
return /^[A-Za-z0-9_-]+$/.test(key) ? key : JSON.stringify(key);
|
|
215
|
+
}
|
|
216
|
+
function formatTomlValue(value) {
|
|
217
|
+
if (typeof value === "string") return JSON.stringify(value);
|
|
218
|
+
if (typeof value === "number" && Number.isFinite(value)) return String(value);
|
|
219
|
+
if (typeof value === "boolean") return value ? "true" : "false";
|
|
220
|
+
if (Array.isArray(value) && value.every((entry) => !isPlainObject(entry) && !Array.isArray(entry))) {
|
|
221
|
+
return `[${value.map((entry) => formatTomlValue(entry)).filter((entry) => entry !== null).join(", ")}]`;
|
|
222
|
+
}
|
|
223
|
+
return null;
|
|
224
|
+
}
|
|
225
|
+
function stringifyTomlObject(data) {
|
|
226
|
+
const lines = [];
|
|
227
|
+
const writeSection = (sectionPath, section) => {
|
|
228
|
+
const scalarEntries = Object.entries(section).filter(([, value]) => formatTomlValue(value) !== null);
|
|
229
|
+
if (sectionPath.length > 0) {
|
|
230
|
+
if (lines.length > 0) lines.push("");
|
|
231
|
+
lines.push(`[${sectionPath.map(formatTomlKey).join(".")}]`);
|
|
232
|
+
}
|
|
233
|
+
for (const [key, value] of scalarEntries) {
|
|
234
|
+
const formatted = formatTomlValue(value);
|
|
235
|
+
if (formatted !== null) {
|
|
236
|
+
lines.push(`${formatTomlKey(key)} = ${formatted}`);
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
for (const [key, value] of Object.entries(section)) {
|
|
240
|
+
if (isPlainObject(value)) {
|
|
241
|
+
writeSection([...sectionPath, key], value);
|
|
242
|
+
} else if (Array.isArray(value) && value.every(isPlainObject)) {
|
|
243
|
+
for (const item of value) {
|
|
244
|
+
if (lines.length > 0) lines.push("");
|
|
245
|
+
const childPath = [...sectionPath, key];
|
|
246
|
+
lines.push(`[[${childPath.map(formatTomlKey).join(".")}]]`);
|
|
247
|
+
for (const [childKey, childValue] of Object.entries(item)) {
|
|
248
|
+
const formatted = formatTomlValue(childValue);
|
|
249
|
+
if (formatted !== null) {
|
|
250
|
+
lines.push(`${formatTomlKey(childKey)} = ${formatted}`);
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
for (const [childKey, childValue] of Object.entries(item)) {
|
|
254
|
+
if (isPlainObject(childValue)) {
|
|
255
|
+
writeSection([...childPath, childKey], childValue);
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
};
|
|
262
|
+
writeSection([], data);
|
|
263
|
+
return `${lines.join("\n")}
|
|
264
|
+
`;
|
|
265
|
+
}
|
|
266
|
+
async function parseConfigFile(configPath) {
|
|
267
|
+
const rawContent = await _fsextra2.default.readFile(configPath, "utf8");
|
|
268
|
+
const content = rawContent.charCodeAt(0) === 65279 ? rawContent.slice(1) : rawContent;
|
|
269
|
+
if (isYamlFile(configPath)) {
|
|
270
|
+
const parsed = _yaml2.default.parse(content);
|
|
271
|
+
if (parsed === null || parsed === void 0) {
|
|
272
|
+
throw new Error(
|
|
273
|
+
`Config file is empty or contains no valid data. You can fix this by editing ${configPath}, or delete it and run 'autohand --setup' to recreate.`
|
|
274
|
+
);
|
|
275
|
+
}
|
|
276
|
+
return parsed;
|
|
277
|
+
}
|
|
278
|
+
if (isTomlFile(configPath)) {
|
|
279
|
+
return parseTomlConfig(content);
|
|
280
|
+
}
|
|
281
|
+
return JSON.parse(content);
|
|
282
|
+
}
|
|
283
|
+
async function loadConfig(customPath, workspaceRoot) {
|
|
284
|
+
const configPath = await detectConfigPath(customPath);
|
|
285
|
+
const configDir = _path2.default.dirname(configPath);
|
|
286
|
+
const configFiles = await checkConfigFilesExist(configDir);
|
|
287
|
+
if (configFiles.length > 1) {
|
|
288
|
+
throw new Error(
|
|
289
|
+
`Multiple config files found in ${configDir} (${configFiles.join(", ")}). Only one config file is allowed. Please review and remove the duplicate, or set the AUTOHAND_CONFIG environment variable to specify which one to use.`
|
|
290
|
+
);
|
|
291
|
+
}
|
|
292
|
+
await _fsextra2.default.ensureDir(_path2.default.dirname(configPath));
|
|
293
|
+
let isNewConfig = false;
|
|
294
|
+
if (!await _fsextra2.default.pathExists(configPath)) {
|
|
295
|
+
const defaultConfig = {
|
|
296
|
+
provider: "openrouter",
|
|
297
|
+
openrouter: {
|
|
298
|
+
apiKey: "",
|
|
299
|
+
baseUrl: "https://openrouter.ai/api/v1",
|
|
300
|
+
model: "openrouter/auto"
|
|
301
|
+
},
|
|
302
|
+
workspace: {
|
|
303
|
+
defaultRoot: process.cwd(),
|
|
304
|
+
allowDangerousOps: false
|
|
305
|
+
},
|
|
306
|
+
ui: {
|
|
307
|
+
theme: "dark",
|
|
308
|
+
autoConfirm: false,
|
|
309
|
+
promptSuggestions: true
|
|
310
|
+
},
|
|
311
|
+
telemetry: {
|
|
312
|
+
enabled: false
|
|
313
|
+
},
|
|
314
|
+
autoReport: {
|
|
315
|
+
enabled: true
|
|
316
|
+
},
|
|
317
|
+
agent: {
|
|
318
|
+
toolSelectionCache: true
|
|
319
|
+
}
|
|
320
|
+
};
|
|
321
|
+
await _fsextra2.default.writeJson(configPath, defaultConfig, { spaces: 2 });
|
|
322
|
+
isNewConfig = true;
|
|
323
|
+
}
|
|
324
|
+
let parsed;
|
|
325
|
+
try {
|
|
326
|
+
parsed = await parseConfigFile(configPath);
|
|
327
|
+
} catch (error) {
|
|
328
|
+
const originalMessage = error.message;
|
|
329
|
+
const alreadyHasSuggestion = originalMessage.includes("autohand --setup");
|
|
330
|
+
const suggestion = alreadyHasSuggestion ? "" : ` You can fix this by editing ${configPath}, or delete it and run 'autohand --setup' to recreate.`;
|
|
331
|
+
throw new Error(
|
|
332
|
+
`Failed to parse config at ${configPath}: ${originalMessage}${suggestion}`
|
|
333
|
+
);
|
|
334
|
+
}
|
|
335
|
+
const normalized = normalizeConfig(parsed);
|
|
336
|
+
let workspaceSettings = null;
|
|
337
|
+
if (workspaceRoot) {
|
|
338
|
+
workspaceSettings = await _chunkMXVIDIC6cjs.loadLocalProjectSettings.call(void 0, workspaceRoot);
|
|
339
|
+
}
|
|
340
|
+
const withWorkspace = mergeWorkspaceSettings(normalized, workspaceSettings);
|
|
341
|
+
const withEnv = mergeEnvVariables(withWorkspace);
|
|
342
|
+
_chunkYWTIXHU6cjs.configureThemeSources.call(void 0, { inlineThemes: _optionalChain([withEnv, 'access', _ => _.ui, 'optionalAccess', _2 => _2.customThemes]) });
|
|
343
|
+
validateConfig(withEnv, configPath);
|
|
344
|
+
const themeName = _optionalChain([withEnv, 'access', _3 => _3.ui, 'optionalAccess', _4 => _4.theme]) || "dark";
|
|
345
|
+
_chunkYWTIXHU6cjs.autoInitTheme.call(void 0, themeName);
|
|
346
|
+
return { ...withEnv, configPath, isNewConfig };
|
|
347
|
+
}
|
|
348
|
+
function mergeWorkspaceSettings(globalConfig, workspaceSettings) {
|
|
349
|
+
if (!workspaceSettings) {
|
|
350
|
+
return globalConfig;
|
|
351
|
+
}
|
|
352
|
+
const merged = { ...globalConfig };
|
|
353
|
+
if (workspaceSettings.provider !== void 0) {
|
|
354
|
+
merged.provider = workspaceSettings.provider;
|
|
355
|
+
}
|
|
356
|
+
if (workspaceSettings.model !== void 0) {
|
|
357
|
+
const provider = workspaceSettings.provider || merged.provider;
|
|
358
|
+
if (provider && merged[provider]) {
|
|
359
|
+
merged[provider].model = workspaceSettings.model;
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
if (workspaceSettings.agent) {
|
|
363
|
+
merged.agent = {
|
|
364
|
+
...merged.agent,
|
|
365
|
+
...workspaceSettings.agent
|
|
366
|
+
};
|
|
367
|
+
}
|
|
368
|
+
if (workspaceSettings.network) {
|
|
369
|
+
merged.network = {
|
|
370
|
+
...merged.network,
|
|
371
|
+
...workspaceSettings.network
|
|
372
|
+
};
|
|
373
|
+
}
|
|
374
|
+
if (workspaceSettings.telemetry) {
|
|
375
|
+
merged.telemetry = {
|
|
376
|
+
...merged.telemetry,
|
|
377
|
+
...workspaceSettings.telemetry
|
|
378
|
+
};
|
|
379
|
+
}
|
|
380
|
+
if (workspaceSettings.permissions) {
|
|
381
|
+
merged.permissions = {
|
|
382
|
+
...merged.permissions,
|
|
383
|
+
...workspaceSettings.permissions
|
|
384
|
+
};
|
|
385
|
+
}
|
|
386
|
+
return merged;
|
|
387
|
+
}
|
|
388
|
+
function mergeEnvVariables(config) {
|
|
389
|
+
config = {
|
|
390
|
+
...config,
|
|
391
|
+
api: {
|
|
392
|
+
baseUrl: process.env.AUTOHAND_API_URL || _optionalChain([config, 'access', _5 => _5.api, 'optionalAccess', _6 => _6.baseUrl]) || "https://api.autohand.ai",
|
|
393
|
+
companySecret: process.env.AUTOHAND_SECRET || _optionalChain([config, 'access', _7 => _7.api, 'optionalAccess', _8 => _8.companySecret]) || ""
|
|
394
|
+
}
|
|
395
|
+
};
|
|
396
|
+
if (process.env.AZURE_OPENAI_KEY || process.env.AZURE_OPENAI_ENDPOINT || process.env.AZURE_OPENAI_DEPLOYMENT) {
|
|
397
|
+
const azureEnv = {
|
|
398
|
+
apiKey: process.env.AZURE_OPENAI_KEY,
|
|
399
|
+
baseUrl: process.env.AZURE_OPENAI_ENDPOINT,
|
|
400
|
+
deploymentName: process.env.AZURE_OPENAI_DEPLOYMENT,
|
|
401
|
+
apiVersion: process.env.AZURE_OPENAI_API_VERSION,
|
|
402
|
+
tenantId: process.env.AZURE_TENANT_ID,
|
|
403
|
+
clientId: process.env.AZURE_CLIENT_ID,
|
|
404
|
+
clientSecret: process.env.AZURE_CLIENT_SECRET
|
|
405
|
+
};
|
|
406
|
+
const existing = _nullishCoalesce(config.azure, () => ( {
|
|
407
|
+
model: _nullishCoalesce(azureEnv.deploymentName, () => ( "gpt-4o"))
|
|
408
|
+
}));
|
|
409
|
+
config = {
|
|
410
|
+
...config,
|
|
411
|
+
azure: {
|
|
412
|
+
...existing,
|
|
413
|
+
...azureEnv.apiKey && { apiKey: azureEnv.apiKey },
|
|
414
|
+
...azureEnv.baseUrl && { baseUrl: azureEnv.baseUrl },
|
|
415
|
+
...azureEnv.deploymentName && {
|
|
416
|
+
deploymentName: azureEnv.deploymentName
|
|
417
|
+
},
|
|
418
|
+
...azureEnv.apiVersion && { apiVersion: azureEnv.apiVersion },
|
|
419
|
+
...azureEnv.tenantId && { tenantId: azureEnv.tenantId },
|
|
420
|
+
...azureEnv.clientId && { clientId: azureEnv.clientId },
|
|
421
|
+
...azureEnv.clientSecret && { clientSecret: azureEnv.clientSecret }
|
|
422
|
+
}
|
|
423
|
+
};
|
|
424
|
+
}
|
|
425
|
+
return config;
|
|
426
|
+
}
|
|
427
|
+
function normalizeConfig(config) {
|
|
428
|
+
if (config === null || config === void 0 || typeof config !== "object") {
|
|
429
|
+
throw new Error(
|
|
430
|
+
`Config file produced an invalid value (got ${config === null ? "null" : typeof config}). Delete the config file and run 'autohand --setup' to recreate it.`
|
|
431
|
+
);
|
|
432
|
+
}
|
|
433
|
+
if (isModernConfig(config)) {
|
|
434
|
+
const provider = _nullishCoalesce(normalizeProviderName(config.provider), () => ( "openrouter"));
|
|
435
|
+
return { ...config, provider };
|
|
436
|
+
}
|
|
437
|
+
if (isLegacyConfig(config)) {
|
|
438
|
+
return {
|
|
439
|
+
provider: "openrouter",
|
|
440
|
+
openrouter: {
|
|
441
|
+
apiKey: _nullishCoalesce(config.api_key, () => ( "replace-me")),
|
|
442
|
+
baseUrl: _nullishCoalesce(config.base_url, () => ( DEFAULT_BASE_URL)),
|
|
443
|
+
model: "anthropic/claude-4-sonnet"
|
|
444
|
+
},
|
|
445
|
+
workspace: {
|
|
446
|
+
defaultRoot: process.cwd(),
|
|
447
|
+
allowDangerousOps: false
|
|
448
|
+
},
|
|
449
|
+
ui: {
|
|
450
|
+
autoConfirm: _nullishCoalesce(config.dry_run, () => ( false)),
|
|
451
|
+
theme: "dark",
|
|
452
|
+
promptSuggestions: true
|
|
453
|
+
}
|
|
454
|
+
};
|
|
455
|
+
}
|
|
456
|
+
return config;
|
|
457
|
+
}
|
|
458
|
+
function isModernConfig(config) {
|
|
459
|
+
return typeof config.openrouter === "object" || typeof config.ollama === "object" || typeof config.llamacpp === "object" || typeof config.openai === "object" || typeof config.mlx === "object" || typeof config.azure === "object" || typeof config.zai === "object" || typeof config.vertexai === "object" || typeof config.xai === "object" || typeof config.cerebras === "object" || typeof config.nvidia === "object" || typeof config.deepseek === "object";
|
|
460
|
+
}
|
|
461
|
+
function isLegacyConfig(config) {
|
|
462
|
+
return typeof config.api_key === "string";
|
|
463
|
+
}
|
|
464
|
+
function validateConfig(config, configPath) {
|
|
465
|
+
if (config.workspace) {
|
|
466
|
+
if (config.workspace.defaultRoot && typeof config.workspace.defaultRoot !== "string") {
|
|
467
|
+
throw new Error(
|
|
468
|
+
`workspace.defaultRoot must be a string in ${configPath}`
|
|
469
|
+
);
|
|
470
|
+
}
|
|
471
|
+
if (config.workspace.allowDangerousOps !== void 0 && typeof config.workspace.allowDangerousOps !== "boolean") {
|
|
472
|
+
throw new Error(
|
|
473
|
+
`workspace.allowDangerousOps must be boolean in ${configPath}`
|
|
474
|
+
);
|
|
475
|
+
}
|
|
476
|
+
}
|
|
477
|
+
if (config.ui) {
|
|
478
|
+
if (config.ui.theme && typeof config.ui.theme !== "string") {
|
|
479
|
+
throw new Error(`ui.theme must be a string in ${configPath}`);
|
|
480
|
+
}
|
|
481
|
+
if (config.ui.theme && typeof config.ui.theme === "string" && !_chunkYWTIXHU6cjs.themeExists.call(void 0, config.ui.theme)) {
|
|
482
|
+
console.warn(
|
|
483
|
+
`Theme '${config.ui.theme}' not found \u2014 falling back to default.`
|
|
484
|
+
);
|
|
485
|
+
}
|
|
486
|
+
if (config.ui.autoConfirm !== void 0 && typeof config.ui.autoConfirm !== "boolean") {
|
|
487
|
+
throw new Error(`ui.autoConfirm must be boolean in ${configPath}`);
|
|
488
|
+
}
|
|
489
|
+
if (config.ui.promptSuggestions !== void 0 && typeof config.ui.promptSuggestions !== "boolean") {
|
|
490
|
+
throw new Error(`ui.promptSuggestions must be boolean in ${configPath}`);
|
|
491
|
+
}
|
|
492
|
+
}
|
|
493
|
+
if (config.agent) {
|
|
494
|
+
if (config.agent.toolSelectionCache !== void 0 && typeof config.agent.toolSelectionCache !== "boolean") {
|
|
495
|
+
throw new Error(`agent.toolSelectionCache must be boolean in ${configPath}`);
|
|
496
|
+
}
|
|
497
|
+
}
|
|
498
|
+
if (config.mcp) {
|
|
499
|
+
if (config.mcp.enabled !== void 0 && typeof config.mcp.enabled !== "boolean") {
|
|
500
|
+
throw new Error(`mcp.enabled must be boolean in ${configPath}`);
|
|
501
|
+
}
|
|
502
|
+
if (config.mcp.servers !== void 0) {
|
|
503
|
+
if (!Array.isArray(config.mcp.servers)) {
|
|
504
|
+
throw new Error(`mcp.servers must be an array in ${configPath}`);
|
|
505
|
+
}
|
|
506
|
+
for (const server of config.mcp.servers) {
|
|
507
|
+
if (!server.name || typeof server.name !== "string") {
|
|
508
|
+
throw new Error(
|
|
509
|
+
`mcp.servers[].name must be a non-empty string in ${configPath}`
|
|
510
|
+
);
|
|
511
|
+
}
|
|
512
|
+
if (!["stdio", "sse", "http"].includes(server.transport)) {
|
|
513
|
+
throw new Error(
|
|
514
|
+
`mcp.servers[].transport must be 'stdio', 'sse', or 'http' in ${configPath}`
|
|
515
|
+
);
|
|
516
|
+
}
|
|
517
|
+
if (server.transport === "stdio" && (!server.command || typeof server.command !== "string")) {
|
|
518
|
+
throw new Error(
|
|
519
|
+
`mcp.servers[].command is required for stdio transport in ${configPath}`
|
|
520
|
+
);
|
|
521
|
+
}
|
|
522
|
+
if ((server.transport === "sse" || server.transport === "http") && (!server.url || typeof server.url !== "string")) {
|
|
523
|
+
throw new Error(
|
|
524
|
+
`mcp.servers[].url is required for ${server.transport} transport in ${configPath}`
|
|
525
|
+
);
|
|
526
|
+
}
|
|
527
|
+
}
|
|
528
|
+
}
|
|
529
|
+
}
|
|
530
|
+
if (config.externalAgents) {
|
|
531
|
+
if (config.externalAgents.enabled !== void 0 && typeof config.externalAgents.enabled !== "boolean") {
|
|
532
|
+
throw new Error(
|
|
533
|
+
`externalAgents.enabled must be boolean in ${configPath}`
|
|
534
|
+
);
|
|
535
|
+
}
|
|
536
|
+
if (config.externalAgents.paths !== void 0) {
|
|
537
|
+
if (!Array.isArray(config.externalAgents.paths)) {
|
|
538
|
+
throw new Error(
|
|
539
|
+
`externalAgents.paths must be an array in ${configPath}`
|
|
540
|
+
);
|
|
541
|
+
}
|
|
542
|
+
for (const p of config.externalAgents.paths) {
|
|
543
|
+
if (typeof p !== "string") {
|
|
544
|
+
throw new Error(
|
|
545
|
+
`externalAgents.paths must contain only strings in ${configPath}`
|
|
546
|
+
);
|
|
547
|
+
}
|
|
548
|
+
}
|
|
549
|
+
}
|
|
550
|
+
}
|
|
551
|
+
}
|
|
552
|
+
function resolveWorkspaceRoot(config, requestedPath) {
|
|
553
|
+
const candidate = _nullishCoalesce(_nullishCoalesce(requestedPath, () => ( process.cwd())), () => ( _optionalChain([config, 'access', _9 => _9.workspace, 'optionalAccess', _10 => _10.defaultRoot])));
|
|
554
|
+
return _path2.default.resolve(candidate);
|
|
555
|
+
}
|
|
556
|
+
function getProviderConfig(config, provider) {
|
|
557
|
+
const chosen = _nullishCoalesce(_nullishCoalesce(provider, () => ( config.provider)), () => ( "openrouter"));
|
|
558
|
+
const configByProvider = {
|
|
559
|
+
openrouter: config.openrouter,
|
|
560
|
+
ollama: config.ollama,
|
|
561
|
+
llamacpp: config.llamacpp,
|
|
562
|
+
openai: config.openai,
|
|
563
|
+
mlx: config.mlx,
|
|
564
|
+
llmgateway: config.llmgateway,
|
|
565
|
+
azure: config.azure,
|
|
566
|
+
zai: config.zai,
|
|
567
|
+
vertexai: config.vertexai,
|
|
568
|
+
xai: config.xai,
|
|
569
|
+
cerebras: config.cerebras,
|
|
570
|
+
nvidia: config.nvidia,
|
|
571
|
+
deepseek: config.deepseek
|
|
572
|
+
};
|
|
573
|
+
const entry = configByProvider[chosen];
|
|
574
|
+
if (!entry) {
|
|
575
|
+
return null;
|
|
576
|
+
}
|
|
577
|
+
if (chosen === "openai") {
|
|
578
|
+
const openAIEntry = entry;
|
|
579
|
+
if (!openAIEntry.model) {
|
|
580
|
+
return null;
|
|
581
|
+
}
|
|
582
|
+
if (openAIEntry.authMode === "chatgpt") {
|
|
583
|
+
if (!_optionalChain([openAIEntry, 'access', _11 => _11.chatgptAuth, 'optionalAccess', _12 => _12.accessToken]) || !_optionalChain([openAIEntry, 'access', _13 => _13.chatgptAuth, 'optionalAccess', _14 => _14.accountId])) {
|
|
584
|
+
return null;
|
|
585
|
+
}
|
|
586
|
+
} else {
|
|
587
|
+
if (!openAIEntry.apiKey || openAIEntry.apiKey === "replace-me") {
|
|
588
|
+
return null;
|
|
589
|
+
}
|
|
590
|
+
}
|
|
591
|
+
} else if (chosen === "openrouter" || chosen === "llmgateway" || chosen === "zai" || chosen === "nvidia" || chosen === "deepseek") {
|
|
592
|
+
const { apiKey, model } = entry;
|
|
593
|
+
if (!apiKey || apiKey === "replace-me" || !model) {
|
|
594
|
+
return null;
|
|
595
|
+
}
|
|
596
|
+
} else if (chosen === "vertexai") {
|
|
597
|
+
const { authToken, projectId, model } = entry;
|
|
598
|
+
if (!authToken || !projectId || !model) {
|
|
599
|
+
return null;
|
|
600
|
+
}
|
|
601
|
+
} else {
|
|
602
|
+
if (chosen === "llamacpp") {
|
|
603
|
+
return {
|
|
604
|
+
...entry,
|
|
605
|
+
model: _nullishCoalesce(entry.model, () => ( "local")),
|
|
606
|
+
baseUrl: _nullishCoalesce(entry.baseUrl, () => ( defaultBaseUrlFor(chosen, entry.port)))
|
|
607
|
+
};
|
|
608
|
+
}
|
|
609
|
+
if (!entry.model) {
|
|
610
|
+
return null;
|
|
611
|
+
}
|
|
612
|
+
}
|
|
613
|
+
return {
|
|
614
|
+
...entry,
|
|
615
|
+
baseUrl: _nullishCoalesce(entry.baseUrl, () => ( defaultBaseUrlFor(chosen, entry.port)))
|
|
616
|
+
};
|
|
617
|
+
}
|
|
618
|
+
function defaultBaseUrlFor(provider, port) {
|
|
619
|
+
if (provider === "openrouter") return DEFAULT_BASE_URL;
|
|
620
|
+
if (provider === "llmgateway") return DEFAULT_LLMGATEWAY_URL;
|
|
621
|
+
if (provider === "zai") return DEFAULT_ZAI_URL;
|
|
622
|
+
if (provider === "deepseek") return DEFAULT_DEEPSEEK_URL;
|
|
623
|
+
const p = port ? port.toString() : void 0;
|
|
624
|
+
switch (provider) {
|
|
625
|
+
case "ollama":
|
|
626
|
+
return p ? `http://localhost:${p}` : DEFAULT_OLLAMA_URL;
|
|
627
|
+
case "llamacpp":
|
|
628
|
+
return p ? `http://localhost:${p}` : DEFAULT_LLAMACPP_URL;
|
|
629
|
+
case "openai":
|
|
630
|
+
return DEFAULT_OPENAI_URL;
|
|
631
|
+
case "mlx":
|
|
632
|
+
return p ? `http://localhost:${p}` : DEFAULT_MLX_URL;
|
|
633
|
+
case "nvidia":
|
|
634
|
+
return "https://integrate.api.nvidia.com/v1";
|
|
635
|
+
default:
|
|
636
|
+
return void 0;
|
|
637
|
+
}
|
|
638
|
+
}
|
|
639
|
+
async function saveConfig(config) {
|
|
640
|
+
const { configPath, ...data } = config;
|
|
641
|
+
delete data.isNewConfig;
|
|
642
|
+
if (isYamlFile(configPath)) {
|
|
643
|
+
const yamlContent = _yaml2.default.stringify(data, { indent: 2 });
|
|
644
|
+
await _fsextra2.default.writeFile(configPath, yamlContent, "utf8");
|
|
645
|
+
} else if (isTomlFile(configPath)) {
|
|
646
|
+
await _fsextra2.default.writeFile(configPath, stringifyTomlObject(data), "utf8");
|
|
647
|
+
} else {
|
|
648
|
+
await _fsextra2.default.writeJson(configPath, data, { spaces: 2 });
|
|
649
|
+
}
|
|
650
|
+
}
|
|
651
|
+
|
|
652
|
+
|
|
653
|
+
|
|
654
|
+
|
|
655
|
+
|
|
656
|
+
|
|
657
|
+
|
|
658
|
+
exports.getDefaultConfigPath = getDefaultConfigPath; exports.loadConfig = loadConfig; exports.resolveWorkspaceRoot = resolveWorkspaceRoot; exports.getProviderConfig = getProviderConfig; exports.saveConfig = saveConfig;
|
|
659
|
+
/**
|
|
660
|
+
* @license
|
|
661
|
+
* Copyright 2025 Autohand AI LLC
|
|
662
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
663
|
+
*/
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import {
|
|
2
|
+
getTheme,
|
|
3
|
+
isThemeInitialized
|
|
4
|
+
} from "./chunk-JAQO6XDB.js";
|
|
5
|
+
|
|
6
|
+
// src/commands/commandTheme.ts
|
|
7
|
+
import chalk from "chalk";
|
|
8
|
+
function createCommandTheme() {
|
|
9
|
+
const theme = isThemeInitialized() ? getTheme() : null;
|
|
10
|
+
const fg = (token, fallback) => {
|
|
11
|
+
return (value) => theme ? theme.fg(token, value) : fallback(value);
|
|
12
|
+
};
|
|
13
|
+
const accent = fg("accent", chalk.cyan);
|
|
14
|
+
const muted = fg("muted", chalk.gray);
|
|
15
|
+
const text = fg("text", chalk.white);
|
|
16
|
+
const success = fg("success", chalk.green);
|
|
17
|
+
const warning = fg("warning", chalk.yellow);
|
|
18
|
+
const error = fg("error", chalk.red);
|
|
19
|
+
const bold = (value) => theme ? theme.bold(value) : chalk.bold(value);
|
|
20
|
+
return {
|
|
21
|
+
accent,
|
|
22
|
+
muted,
|
|
23
|
+
text,
|
|
24
|
+
success,
|
|
25
|
+
warning,
|
|
26
|
+
error,
|
|
27
|
+
bold,
|
|
28
|
+
heading: (value) => bold(accent(value)),
|
|
29
|
+
link: (value) => theme ? theme.underline(accent(value)) : chalk.cyan.underline(value),
|
|
30
|
+
tab: (value) => muted(` ${value} `),
|
|
31
|
+
selectedTab: (value) => theme ? theme.fgBg("userMessageText", "accent", ` ${value} `) : chalk.bgWhite.black(` ${value} `),
|
|
32
|
+
progressFilled: accent,
|
|
33
|
+
progressEmpty: muted
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export {
|
|
38
|
+
createCommandTheme
|
|
39
|
+
};
|
|
40
|
+
/**
|
|
41
|
+
* @license
|
|
42
|
+
* Copyright 2026 Autohand AI LLC
|
|
43
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
44
|
+
*/
|