autohand-cli 0.7.14 → 0.8.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/assets/icon.png +0 -0
- package/dist/AgentRegistry-7LDL5HJH.js +10 -0
- package/dist/AgentRegistry-NQCLWABO.cjs +10 -0
- package/dist/{AutomodeManager-NGRAO2MH.js → AutomodeManager-MWLKGPZK.js} +2 -0
- package/dist/{AutomodeManager-ZKQMBM4T.cjs → AutomodeManager-NYIZNODK.cjs} +3 -1
- package/dist/CommunitySkillsCache-6QPRMTJO.js +8 -0
- package/dist/CommunitySkillsCache-GTQMOCCO.cjs +8 -0
- package/dist/{GitHubRegistryFetcher-US2JJID4.js → GitHubRegistryFetcher-6JQ5JEDZ.js} +1 -0
- package/dist/{GitHubRegistryFetcher-K744NNAJ.cjs → GitHubRegistryFetcher-S7QFUEKV.cjs} +1 -0
- package/dist/HookManager-Q2KYMCP4.cjs +7 -0
- package/dist/HookManager-TTP4Y6DC.js +7 -0
- package/dist/ImportWizard-IWVPRKFF.cjs +466 -0
- package/dist/ImportWizard-KASGQPUY.js +466 -0
- package/dist/McpClientManager-7RM6YT35.js +8 -0
- package/dist/McpClientManager-RKD7C6OY.cjs +8 -0
- package/dist/MemoryManager-GUNLRP5S.js +8 -0
- package/dist/MemoryManager-TNSGKDKX.cjs +8 -0
- package/dist/PermissionManager-2GO5PQ6M.cjs +11 -0
- package/dist/{PermissionManager-U5OMGR3L.js → PermissionManager-K7UWSNB6.js} +4 -3
- package/dist/ProjectProfiler-UMJJSOCE.js +194 -0
- package/dist/ProjectProfiler-ZDWR2ODG.cjs +194 -0
- package/dist/ProviderFactory-EFFQBRQ6.cjs +9 -0
- package/dist/ProviderFactory-S3LWTQQC.js +9 -0
- package/dist/SessionManager-FEUAU3ZJ.cjs +10 -0
- package/dist/SessionManager-IKWAK2PI.js +10 -0
- package/dist/SkillsRegistry-GDEGFP6O.cjs +9 -0
- package/dist/SkillsRegistry-SI5RUHQ4.js +9 -0
- package/dist/SubAgent-I75HELJG.js +11 -0
- package/dist/SubAgent-K3QP6WHC.cjs +11 -0
- package/dist/{SyncApiClient-AYXYSOJM.js → SyncApiClient-LVIO4C2S.js} +1 -0
- package/dist/{SyncApiClient-ID3KXEMA.cjs → SyncApiClient-ZNYMT36M.cjs} +1 -0
- package/dist/about-B2AGTV6N.js +12 -0
- package/dist/about-V2HWEZZO.cjs +12 -0
- package/dist/actionExecutor-6XCVL2SJ.js +19 -0
- package/dist/actionExecutor-YRUJNB5G.cjs +19 -0
- package/dist/add-dir-7FBQ5IFV.js +10 -0
- package/dist/add-dir-ALBSYRV3.cjs +10 -0
- package/dist/agents/builtin/code-cleaner.md +14 -0
- package/dist/agents/builtin/docs-writer.md +14 -0
- package/dist/agents/builtin/researcher.md +14 -0
- package/dist/agents/builtin/reviewer.md +15 -0
- package/dist/agents/builtin/tester.md +15 -0
- package/dist/agents/builtin/todo-resolver.md +15 -0
- package/dist/agents-FCGEWTA3.cjs +12 -0
- package/dist/agents-FENGUSJD.js +12 -0
- package/dist/agents-new-FU3O55CO.js +14 -0
- package/dist/agents-new-SAFTJ7TK.cjs +14 -0
- package/dist/assets/icon.png +0 -0
- package/dist/automode-CYLGXQ4A.cjs +10 -0
- package/dist/automode-O7G3DUYN.js +10 -0
- package/dist/{cc-UTTLESTY.js → cc-7LEIJ3KF.js} +1 -0
- package/dist/{cc-2W6M7J45.cjs → cc-Q5MM4AWC.cjs} +1 -0
- package/dist/{chunk-N4ZSG6JJ.cjs → chunk-22D2CNTP.cjs} +2 -2
- package/dist/chunk-24QIWILL.js +51 -0
- package/dist/{chunk-MYNHJHDZ.js → chunk-2AA5MFES.js} +1 -1
- package/dist/{chunk-KWRUQRXR.js → chunk-2ELK5DMH.js} +44 -10
- package/dist/chunk-2JYIR3EC.cjs +1176 -0
- package/dist/{chunk-CRQKDBLD.js → chunk-2RIAPTET.js} +90 -66
- package/dist/{chunk-TSY7JHIV.cjs → chunk-33A755XB.cjs} +2 -2
- package/dist/chunk-3OEDGIFW.js +42 -0
- package/dist/{chunk-P5VDZ6PV.js → chunk-3PDTTAKJ.js} +1 -1
- package/dist/{chunk-ULMPJUJW.cjs → chunk-3WCOFXQS.cjs} +23 -23
- package/dist/{chunk-PDKNHU5G.cjs → chunk-4HKTYHNL.cjs} +22 -16
- package/dist/{chunk-Z4J4W6YQ.cjs → chunk-4JNNTOGF.cjs} +2 -48
- package/dist/chunk-55B6SBHK.js +260 -0
- package/dist/chunk-5DDDUUBM.cjs +29 -0
- package/dist/{chunk-TQB222ZB.js → chunk-5EIEWVYX.js} +2 -2
- package/dist/{chunk-SMHY3Q7B.cjs → chunk-5GGX6WNY.cjs} +54 -22
- package/dist/{chunk-3S4DEIJP.cjs → chunk-5IXII4HX.cjs} +2 -2
- package/dist/{chunk-3KBBARKO.js → chunk-5OBNULPU.js} +85 -28
- package/dist/{chunk-VVBBEYTH.cjs → chunk-5YJG6H6P.cjs} +10 -10
- package/dist/{chunk-PKOAXQKW.cjs → chunk-63WXWFDI.cjs} +11 -11
- package/dist/{chunk-DSKVMFRM.cjs → chunk-643VRA5S.cjs} +12 -4
- package/dist/{chunk-L5ZFPWHY.js → chunk-6OYHF6MF.js} +12 -4
- package/dist/chunk-7GDVDSNI.js +1176 -0
- package/dist/chunk-7QEE6SW6.cjs +260 -0
- package/dist/chunk-7UOUW76C.js +603 -0
- package/dist/{chunk-SZP4ULM5.cjs → chunk-AFN7LH5N.cjs} +17 -17
- package/dist/chunk-AHD5JJ6F.cjs +78 -0
- package/dist/{chunk-WLTVF77A.js → chunk-ALYU6VTM.js} +1 -1
- package/dist/{chunk-BRXIEKJ3.cjs → chunk-AMT2UZBI.cjs} +5 -5
- package/dist/{chunk-SFNT5DYE.cjs → chunk-BT35E7NE.cjs} +4 -4
- package/dist/{chunk-NUHYCFHW.cjs → chunk-BVKXEQVG.cjs} +54 -65
- package/dist/chunk-CDMGQR4L.cjs +4470 -0
- package/dist/chunk-CNBKZEX5.cjs +109 -0
- package/dist/{chunk-GD4AFYJ3.js → chunk-CVVEYUFR.js} +1 -1
- package/dist/chunk-CWALFEGU.js +58 -0
- package/dist/{chunk-MTALRU7R.cjs → chunk-D3YCFT5O.cjs} +3 -3
- package/dist/{chunk-CH4SPVFD.cjs → chunk-D6VG7B5X.cjs} +9 -3
- package/dist/{chunk-TOTDRAWG.js → chunk-DH7DKCUL.js} +1 -1
- package/dist/{chunk-RFNCTE4V.cjs → chunk-DLG43ZJ7.cjs} +2 -2
- package/dist/chunk-DN573ME7.cjs +1675 -0
- package/dist/{chunk-63BXZQZW.js → chunk-E23CMMNJ.js} +20 -4
- package/dist/{chunk-4HA7IHLJ.cjs → chunk-EEGK5DYE.cjs} +32 -16
- package/dist/{chunk-DTFR3WD6.js → chunk-EF4LKUQY.js} +1 -1
- package/dist/{chunk-PWLLLJHU.js → chunk-EGFT4PGW.js} +3 -1
- package/dist/{chunk-S47TCZDL.js → chunk-EIU7K7CM.js} +7 -7
- package/dist/{chunk-BISFR6ZL.js → chunk-EPNYD4NV.js} +1 -1
- package/dist/chunk-EZMINVLU.js +123 -0
- package/dist/{chunk-LYMTYC67.js → chunk-F23EVNJU.js} +2 -2
- package/dist/chunk-FHK7UDOJ.cjs +42 -0
- package/dist/chunk-FMB3TSWP.cjs +218 -0
- package/dist/{chunk-XBUMKEFN.cjs → chunk-FPAE6ORV.cjs} +91 -34
- package/dist/{chunk-DEAEO7RI.js → chunk-FYZ67R4R.js} +1 -1
- package/dist/{chunk-6SHHB2VD.js → chunk-G7SZIOHF.js} +2 -2
- package/dist/{chunk-FB6JWNJS.js → chunk-GBHDROGL.js} +54 -65
- package/dist/chunk-GCHELXLO.js +131 -0
- package/dist/{chunk-XPOHYKR3.js → chunk-GHSBZ3YB.js} +2 -2
- package/dist/chunk-GLBAF54O.js +218 -0
- package/dist/chunk-GO3N7LRW.cjs +131 -0
- package/dist/{chunk-Y2ZSH3YF.cjs → chunk-H6ZGZEBG.cjs} +57 -23
- package/dist/{chunk-DSCQPWUB.cjs → chunk-HA7OAVOB.cjs} +15 -15
- package/dist/{chunk-NMWEDN4Z.js → chunk-HFMLWH7B.js} +108 -0
- package/dist/{chunk-D2XFTCRP.js → chunk-HQ7YZKXE.js} +1 -1
- package/dist/{chunk-L42HTMMR.cjs → chunk-HTLINWX6.cjs} +2 -2
- package/dist/chunk-IETRBBMP.cjs +603 -0
- package/dist/chunk-IQ5RXU6O.js +1675 -0
- package/dist/{chunk-GVZPIQWB.js → chunk-ITB3FS72.js} +11 -5
- package/dist/{chunk-B6EBHCK2.cjs → chunk-IUMJYXBX.cjs} +6 -6
- package/dist/{chunk-ZBIBLOZL.js → chunk-IVM5F2AE.js} +500 -317
- package/dist/{chunk-GRSVQ5YZ.js → chunk-IWVQ2EW3.js} +44 -12
- package/dist/chunk-JJWCQLOU.cjs +59 -0
- package/dist/{chunk-KXAAEROY.js → chunk-JMFDD7IZ.js} +2 -2
- package/dist/chunk-JSBRDJBE.js +30 -0
- package/dist/chunk-LJFUXC56.cjs +123 -0
- package/dist/chunk-LL3PQ2U6.js +4470 -0
- package/dist/chunk-LQ4LQQG6.cjs +27 -0
- package/dist/chunk-LQGVEP3E.js +109 -0
- package/dist/{chunk-425MT6Y5.cjs → chunk-LVE6Z5SL.cjs} +9 -9
- package/dist/{chunk-XL77XYI2.cjs → chunk-LXDOQTXQ.cjs} +4 -4
- package/dist/{chunk-BG4OQUKP.js → chunk-MBBY4ZIK.js} +1 -1
- package/dist/{chunk-ZXIQCYYV.cjs → chunk-MGMXR67S.cjs} +9 -9
- package/dist/{chunk-FHUNAB2K.cjs → chunk-MHLE6AVN.cjs} +33 -6
- package/dist/chunk-MHSDHPC4.cjs +58 -0
- package/dist/chunk-MUBW5UDH.cjs +55 -0
- package/dist/{chunk-MNSTWHK3.cjs → chunk-MVWOQBCC.cjs} +11 -11
- package/dist/chunk-N254NRHT.cjs +30 -0
- package/dist/{chunk-SRLY7K6J.js → chunk-OBLIITWJ.js} +2 -2
- package/dist/{chunk-SIGWDEPS.cjs → chunk-OI7OIGNB.cjs} +10 -10
- package/dist/{chunk-V7YTCNMN.cjs → chunk-OPR34VHL.cjs} +5 -5
- package/dist/chunk-OUHQZFN4.js +78 -0
- package/dist/{chunk-HMRDNRTH.js → chunk-PEC45WYS.js} +2 -2
- package/dist/{chunk-OSUWEUZE.js → chunk-PUOE5BCN.js} +1 -1
- package/dist/chunk-Q2VYSHWU.js +59 -0
- package/dist/chunk-Q3MJ6CYS.cjs +193 -0
- package/dist/{chunk-QRGPAUST.js → chunk-Q5RN7RXC.js} +2 -2
- package/dist/{chunk-43XS26AQ.cjs → chunk-Q5RX3XGB.cjs} +4 -4
- package/dist/chunk-QCLYBIMM.cjs +51 -0
- package/dist/chunk-QMAKTSZB.cjs +48 -0
- package/dist/chunk-QT2VZNFA.js +29 -0
- package/dist/{chunk-3XJD56Z4.js → chunk-QUFAULH7.js} +9 -3
- package/dist/{chunk-RJP3SZ7Q.cjs → chunk-RD5XAJR2.cjs} +492 -309
- package/dist/chunk-RGR6ME5J.cjs +844 -0
- package/dist/{chunk-EOGKE5GD.cjs → chunk-RKJTGGMU.cjs} +221 -126
- package/dist/{chunk-NMGF2KUN.js → chunk-RO46YAPI.js} +1 -1
- package/dist/{chunk-2U5HFVRO.cjs → chunk-RVUQKMXX.cjs} +108 -0
- package/dist/chunk-S52YW5ZQ.js +844 -0
- package/dist/{chunk-ZLOTP56B.cjs → chunk-S6BDWWUG.cjs} +5 -5
- package/dist/{chunk-6DWXHBAY.js → chunk-SAHBLB3E.js} +222 -127
- package/dist/chunk-SALLHB2I.js +27 -0
- package/dist/{chunk-GIZL57FE.cjs → chunk-SEKD5FH3.cjs} +3 -1
- package/dist/{chunk-DZHR34H6.cjs → chunk-SHFA46CS.cjs} +8 -8
- package/dist/{chunk-MILZEEUV.js → chunk-SIHRD34Z.js} +2 -2
- package/dist/{chunk-BPTBKO7D.js → chunk-SO3QQJAZ.js} +216 -36
- package/dist/{chunk-HSPWX4Z2.cjs → chunk-SRQW3B6J.cjs} +223 -43
- package/dist/{chunk-MY3TZER2.js → chunk-T63AMO6H.js} +1 -1
- package/dist/{chunk-X765A7J5.js → chunk-TERCG25S.js} +1 -1
- package/dist/{chunk-WOGJXDBU.cjs → chunk-TFSRRZWP.cjs} +3 -3
- package/dist/{chunk-RRZS5A53.js → chunk-TQHOVHRS.js} +1 -1
- package/dist/{chunk-JHOQABEF.js → chunk-TWEKBHUO.js} +5 -5
- package/dist/chunk-U3WDY42C.cjs +42 -0
- package/dist/{chunk-CKN2BLHK.cjs → chunk-UBS46QL3.cjs} +2 -2
- package/dist/{chunk-H3GBSPK5.js → chunk-UGTFKUW4.js} +14 -6
- package/dist/chunk-UJTCTTUF.cjs +271 -0
- package/dist/{chunk-RUZB43HU.cjs → chunk-UTI6ZQEY.cjs} +22 -14
- package/dist/{chunk-OLG7LZBD.js → chunk-VG34MG2U.js} +1 -1
- package/dist/{chunk-ZKZRFH37.cjs → chunk-VJYPP6PP.cjs} +6 -6
- package/dist/{chunk-YHGTBPEC.js → chunk-VNQ5GL34.js} +1 -1
- package/dist/{chunk-XDVG3NM4.js → chunk-W3X6PAC7.js} +2 -48
- package/dist/{chunk-FK2DVRPJ.js → chunk-WFUUXADU.js} +2 -2
- package/dist/{chunk-R5OO7MEB.cjs → chunk-WGTJOIB7.cjs} +22 -22
- package/dist/{chunk-VHBUKGRG.js → chunk-WJDPVW7T.js} +4 -4
- package/dist/chunk-WNUVPKBW.js +42 -0
- package/dist/{chunk-EV53SLSB.cjs → chunk-WPVWQSL7.cjs} +4 -4
- package/dist/chunk-WQ3VJXZB.js +118 -0
- package/dist/chunk-WTNBX2JO.js +271 -0
- package/dist/chunk-XAV24VYN.js +48 -0
- package/dist/chunk-XDLH4EDL.cjs +118 -0
- package/dist/{chunk-U7CZFKPL.cjs → chunk-XMNHZRUB.cjs} +2 -2
- package/dist/chunk-XUDSXGGV.cjs +1822 -0
- package/dist/{chunk-WQUQ5JMM.js → chunk-XWASJ2QL.js} +4 -4
- package/dist/chunk-Y2SXUCNJ.js +55 -0
- package/dist/{chunk-AIH6GUGB.cjs → chunk-YDCDGTK6.cjs} +5 -5
- package/dist/chunk-YFXTE422.cjs +92 -0
- package/dist/chunk-YKS55CMT.js +1822 -0
- package/dist/{chunk-KC5FPUOF.cjs → chunk-YRLYSQEQ.cjs} +2 -2
- package/dist/{chunk-JWPI6O5Z.js → chunk-YS34SVY5.js} +31 -4
- package/dist/{chunk-FEVHH525.cjs → chunk-YYB42DCU.cjs} +4 -4
- package/dist/chunk-ZK6HOR62.js +92 -0
- package/dist/{chunk-BHV7CBNT.js → chunk-ZSE42BRE.js} +1 -1
- package/dist/clear-ES5WCZRF.cjs +12 -0
- package/dist/clear-J7XS6T5W.js +12 -0
- package/dist/completion-XQTDTJLK.cjs +14 -0
- package/dist/completion-XR6ZONJQ.js +14 -0
- package/dist/config-2TB3A55J.js +18 -0
- package/dist/config-RDMVIV26.cjs +18 -0
- package/dist/constants-6CPCJ3DY.cjs +21 -0
- package/dist/{constants-V6J54N3X.js → constants-UFM5B232.js} +2 -1
- package/dist/{defaultHooks-WLMRQUXG.cjs → defaultHooks-RCXPHF4M.cjs} +3 -1
- package/dist/{defaultHooks-R56VYG7I.js → defaultHooks-RDRMER3Z.js} +2 -0
- package/dist/export-EWAYH353.cjs +12 -0
- package/dist/export-ZWA6XGVS.js +12 -0
- package/dist/extractSessionMemories-SDW2MVBQ.cjs +7 -0
- package/dist/extractSessionMemories-V7K42ZHW.js +7 -0
- package/dist/feedback-5RV6ODW4.js +15 -0
- package/dist/feedback-ZPITHFJR.cjs +15 -0
- package/dist/filesystem-3SGCW2BF.js +10 -0
- package/dist/filesystem-MCFXJQ6R.cjs +10 -0
- package/dist/formatters-6K7QVWQL.cjs +10 -0
- package/dist/formatters-DQHO5I36.js +10 -0
- package/dist/{help-LKKQU2TN.js → help-I5GRCA3S.js} +3 -2
- package/dist/help-X52PZM24.cjs +12 -0
- package/dist/history-4WIOZ4TW.cjs +14 -0
- package/dist/{history-AV4XBFRK.js → history-OCHJBJW7.js} +3 -2
- package/dist/hooks-IAVTXUAI.cjs +13 -0
- package/dist/hooks-YF6HL23E.js +13 -0
- package/dist/{i18n-BSAPXM56.js → i18n-KHBXUALK.js} +2 -1
- package/dist/i18n-MVQIAZWS.cjs +33 -0
- package/dist/ide-4R3BEBIS.js +12 -0
- package/dist/ide-C7WSPQTR.cjs +12 -0
- package/dist/import-2ICSKDL7.cjs +10 -0
- package/dist/import-EAAX5HJR.js +170 -0
- package/dist/import-KRVVYJCZ.js +10 -0
- package/dist/import-PQJPNXA4.cjs +170 -0
- package/dist/index.cjs +7503 -11251
- package/dist/index.js +8735 -12483
- package/dist/init-6K3NRDOM.js +10 -0
- package/dist/init-AOUGGITS.cjs +10 -0
- package/dist/language-Q7YFDVSR.cjs +18 -0
- package/dist/language-Y6ZC7LET.js +18 -0
- package/dist/{lint-44UQJ673.cjs → lint-D5UOJWIK.cjs} +1 -0
- package/dist/{lint-TA2ZHVLM.js → lint-NJPZWVN2.js} +1 -0
- package/dist/{localProjectPermissions-WQYMGI42.js → localProjectPermissions-N77HA3XK.js} +3 -2
- package/dist/localProjectPermissions-UFSMNTBJ.cjs +18 -0
- package/dist/login-6OAH2NEH.cjs +20 -0
- package/dist/login-DL3377MD.js +20 -0
- package/dist/logout-ELQBUMTU.cjs +18 -0
- package/dist/logout-TLYA5W45.js +18 -0
- package/dist/mcp-BHOIBYUB.js +18 -0
- package/dist/mcp-TNUEXR5T.cjs +18 -0
- package/dist/{mcp-install-2KVKRAMQ.cjs → mcp-install-GROTZHAW.cjs} +26 -14
- package/dist/{mcp-install-77UXRN6R.js → mcp-install-KSADVDBE.js} +21 -9
- package/dist/memory-6DRFA43C.js +10 -0
- package/dist/memory-IORZE6WF.cjs +10 -0
- package/dist/message-JUBOK2VU.js +9 -0
- package/dist/message-ZJ5AYAMT.cjs +9 -0
- package/dist/model-CJPSPGIC.cjs +10 -0
- package/dist/model-MQXC56ES.js +10 -0
- package/dist/new-7D2B7IWM.cjs +12 -0
- package/dist/new-7VYM36RC.js +12 -0
- package/dist/{patch-BAAQIYSW.js → patch-5F6VBIT3.js} +2 -0
- package/dist/{patch-J32X2QQP.cjs → patch-MOD7QC3D.cjs} +3 -1
- package/dist/permissions-MM77OSFO.js +13 -0
- package/dist/permissions-W2F62DJ6.cjs +13 -0
- package/dist/{plan-JFGNRL2S.js → plan-G5CEKJI4.js} +1 -0
- package/dist/{plan-B3CW5DXJ.cjs → plan-QKOHE3LH.cjs} +1 -0
- package/dist/quit-7D2RDGTD.cjs +10 -0
- package/dist/quit-PKBSEJOL.js +10 -0
- package/dist/registry-A5XLMQVC.cjs +1828 -0
- package/dist/registry-WQLWHOLY.js +1828 -0
- package/dist/resume-FBKXSDOA.js +13 -0
- package/dist/resume-KLPDYPWQ.cjs +13 -0
- package/dist/search-7RNYTCNO.js +17 -0
- package/dist/search-UESMQZC3.cjs +17 -0
- package/dist/{session-T3TAZ5ZU.cjs → session-BSU2L5UI.cjs} +1 -0
- package/dist/{session-H5QWKE5E.js → session-SZMRN5KG.js} +1 -0
- package/dist/sessions-TSSUFWIJ.cjs +10 -0
- package/dist/sessions-WAXBUQTU.js +10 -0
- package/dist/settings-D6JXX5RG.js +30 -0
- package/dist/settings-RKYGXKDG.cjs +30 -0
- package/dist/share-GLX4YHS4.cjs +14 -0
- package/dist/share-U2M2KBFJ.js +14 -0
- package/dist/skills-63QLZMUO.cjs +14 -0
- package/dist/{skills-LJZA6PVJ.js → skills-BAMMXP3Q.js} +3 -2
- package/dist/{skills-install-MQINL3EC.js → skills-install-QNQWC2MV.js} +99 -28
- package/dist/{skills-install-IKJZN4G2.cjs → skills-install-UMK5H3SO.cjs} +107 -36
- package/dist/skills-new-NYKNHJHV.cjs +15 -0
- package/dist/skills-new-NZFGFKML.js +15 -0
- package/dist/slashCommands-EJ23C3Z4.cjs +69 -0
- package/dist/slashCommands-JQIL4EWX.js +69 -0
- package/dist/status-BKC7GBNQ.js +11 -0
- package/dist/status-FU3CPJWQ.cjs +11 -0
- package/dist/sync-3IEIHXIP.cjs +18 -0
- package/dist/sync-7JMZVEQD.cjs +40 -0
- package/dist/{sync-EXYX7HXW.js → sync-KWX67OUN.js} +3 -2
- package/dist/sync-YVPFT7SL.js +18 -0
- package/dist/tasks-5FPBIFLC.js +9 -0
- package/dist/tasks-TXGKGNH6.cjs +9 -0
- package/dist/team-GVK5L73L.cjs +9 -0
- package/dist/team-RWIKCLTG.js +9 -0
- package/dist/teammate-3C4MLRGH.js +139 -0
- package/dist/teammate-7C3UDQSH.cjs +139 -0
- package/dist/theme-A2CEHI7W.js +18 -0
- package/dist/theme-LNOQOVR4.cjs +18 -0
- package/dist/ui/questionModal.cjs +7 -25
- package/dist/ui/questionModal.js +6 -24
- package/dist/undo-F2IZJQUV.js +10 -0
- package/dist/undo-QEV42XLU.cjs +10 -0
- package/dist/update-TVAJMMBC.js +82 -0
- package/dist/update-Z6BIIQDC.cjs +82 -0
- package/package.json +9 -3
- package/dist/CommunitySkillsCache-ILWHWE5P.js +0 -7
- package/dist/CommunitySkillsCache-KHC6RUJW.cjs +0 -7
- package/dist/HookManager-X47HCM5G.cjs +0 -6
- package/dist/HookManager-ZXKHCD7U.js +0 -6
- package/dist/MemoryManager-6ZT7IDO5.cjs +0 -7
- package/dist/MemoryManager-AJGS5AKB.js +0 -7
- package/dist/PermissionManager-HG6W2DGU.cjs +0 -10
- package/dist/SessionManager-BJ2G6VV4.cjs +0 -9
- package/dist/SessionManager-ENPGYK5J.js +0 -9
- package/dist/SkillsRegistry-6ZFOCT25.cjs +0 -8
- package/dist/SkillsRegistry-C2SHOZ5D.js +0 -8
- package/dist/about-3BJTNSLK.js +0 -11
- package/dist/about-EABQNJGV.cjs +0 -11
- package/dist/add-dir-7FD4DMDA.cjs +0 -9
- package/dist/add-dir-LOYJ4YB5.js +0 -9
- package/dist/agents-2Y6ASV7C.js +0 -10
- package/dist/agents-UOSPKLQL.cjs +0 -10
- package/dist/agents-new-23NSGAM5.js +0 -13
- package/dist/agents-new-WI2EL7IJ.cjs +0 -13
- package/dist/automode-LGWTY3UX.js +0 -9
- package/dist/automode-WLBQ7MN7.cjs +0 -9
- package/dist/chunk-5UBW2BGC.js +0 -33
- package/dist/chunk-I6DBWNLN.cjs +0 -169
- package/dist/chunk-IZBCMJHJ.cjs +0 -33
- package/dist/completion-7WGMHKOR.cjs +0 -13
- package/dist/completion-KH33NSGP.js +0 -13
- package/dist/constants-RBQTR32A.cjs +0 -20
- package/dist/export-3QN3IH7A.js +0 -11
- package/dist/export-BI54X3MP.cjs +0 -11
- package/dist/feedback-CI4OIPOS.cjs +0 -14
- package/dist/feedback-GFPL5STE.js +0 -14
- package/dist/formatters-N5IJKYZY.cjs +0 -8
- package/dist/formatters-UG6VZJJ5.js +0 -8
- package/dist/help-CWMUGD3V.cjs +0 -11
- package/dist/history-73VBEMSI.cjs +0 -13
- package/dist/hooks-62UDQBGH.cjs +0 -12
- package/dist/hooks-XORDJD5X.js +0 -12
- package/dist/i18n-X2IU2EZD.cjs +0 -32
- package/dist/ide-RPKZALQV.js +0 -11
- package/dist/ide-YMNXJB6A.cjs +0 -11
- package/dist/init-J5HR4R7U.js +0 -9
- package/dist/init-JCC7RVMC.cjs +0 -9
- package/dist/language-AZISJCEZ.js +0 -16
- package/dist/language-F65RA6FZ.cjs +0 -16
- package/dist/localProjectPermissions-2EATUDZM.cjs +0 -17
- package/dist/login-5HLPMECE.js +0 -18
- package/dist/login-ISWYYBXP.cjs +0 -18
- package/dist/logout-3EKZM5J3.cjs +0 -16
- package/dist/logout-GE7TSZ24.js +0 -16
- package/dist/mcp-EW64QRFA.cjs +0 -15
- package/dist/mcp-VHS7AMF2.js +0 -15
- package/dist/memory-2I473RU3.js +0 -9
- package/dist/memory-JZ6NPSP3.cjs +0 -9
- package/dist/model-GXZLARPT.js +0 -9
- package/dist/model-Y274DBDO.cjs +0 -9
- package/dist/new-BG5VIGZ7.cjs +0 -9
- package/dist/new-YXFDQOA7.js +0 -9
- package/dist/permissions-QILEAGBP.cjs +0 -12
- package/dist/permissions-WVEOVMWO.js +0 -12
- package/dist/quit-NC32OEJG.cjs +0 -9
- package/dist/quit-WRRIGU33.js +0 -9
- package/dist/resume-GJIKIDPR.cjs +0 -12
- package/dist/resume-RMJNCAOK.js +0 -12
- package/dist/search-UIWIXB73.js +0 -14
- package/dist/search-WQNXDA2E.cjs +0 -14
- package/dist/sessions-HPFX2GDD.js +0 -9
- package/dist/sessions-SAQU6MFA.cjs +0 -9
- package/dist/share-2WH5ZVOO.cjs +0 -13
- package/dist/share-PSSWWVV5.js +0 -13
- package/dist/skills-YTYGART7.cjs +0 -13
- package/dist/skills-new-3WCU3CWB.js +0 -14
- package/dist/skills-new-O5LFVFZU.cjs +0 -14
- package/dist/slashCommands-7IRDOXOQ.cjs +0 -55
- package/dist/slashCommands-C6CAQA25.js +0 -55
- package/dist/status-4EDV2LSY.cjs +0 -10
- package/dist/status-NU7TJDCE.js +0 -10
- package/dist/sync-3GFSEIAZ.js +0 -16
- package/dist/sync-6M3WRKMH.cjs +0 -39
- package/dist/sync-CQNQDNTJ.cjs +0 -16
- package/dist/theme-EMJGULMI.cjs +0 -16
- package/dist/theme-FGDSXNU3.js +0 -16
- package/dist/undo-CTXQYE7C.cjs +0 -9
- package/dist/undo-HX2ZMECP.js +0 -9
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import {
|
|
2
2
|
getAuthClient
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-HQ7YZKXE.js";
|
|
4
4
|
import {
|
|
5
5
|
safePrompt
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-VNQ5GL34.js";
|
|
7
7
|
import {
|
|
8
8
|
saveConfig
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-WTNBX2JO.js";
|
|
10
10
|
import {
|
|
11
11
|
t
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-HFMLWH7B.js";
|
|
13
13
|
|
|
14
14
|
// src/commands/logout.ts
|
|
15
15
|
import chalk from "chalk";
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
// src/commands/message.ts
|
|
2
|
+
import chalk from "chalk";
|
|
3
|
+
var metadata = {
|
|
4
|
+
command: "/message",
|
|
5
|
+
description: "Send a direct message to a teammate",
|
|
6
|
+
implemented: true
|
|
7
|
+
};
|
|
8
|
+
async function message(ctx, args) {
|
|
9
|
+
if (!ctx.teamManager) {
|
|
10
|
+
return chalk.yellow("Team manager not available.");
|
|
11
|
+
}
|
|
12
|
+
const team = ctx.teamManager.getTeam();
|
|
13
|
+
if (!team) {
|
|
14
|
+
return chalk.yellow("No active team.");
|
|
15
|
+
}
|
|
16
|
+
if (args.length < 2) {
|
|
17
|
+
return [
|
|
18
|
+
chalk.bold("Usage:"),
|
|
19
|
+
` ${chalk.cyan("/message <name> <text>")}`,
|
|
20
|
+
"",
|
|
21
|
+
chalk.gray("Example: /message hunter also check src/legacy/")
|
|
22
|
+
].join("\n");
|
|
23
|
+
}
|
|
24
|
+
const [targetName, ...rest] = args;
|
|
25
|
+
const content = rest.join(" ");
|
|
26
|
+
try {
|
|
27
|
+
ctx.teamManager.sendMessageTo(targetName, "lead", content);
|
|
28
|
+
return chalk.green(`Message sent to ${targetName}.`);
|
|
29
|
+
} catch (err) {
|
|
30
|
+
return chalk.red(err.message);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export {
|
|
35
|
+
metadata,
|
|
36
|
+
message
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
* @license
|
|
40
|
+
* Copyright 2025 Autohand AI LLC
|
|
41
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
42
|
+
*/
|
|
@@ -1,7 +1,7 @@
|
|
|
1
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
2
|
|
|
3
3
|
|
|
4
|
-
var
|
|
4
|
+
var _chunkSEKD5FH3cjs = require('./chunk-SEKD5FH3.cjs');
|
|
5
5
|
|
|
6
6
|
// src/memory/MemoryManager.ts
|
|
7
7
|
var _fsextra = require('fs-extra'); var _fsextra2 = _interopRequireDefault(_fsextra);
|
|
@@ -11,13 +11,13 @@ var SIMILARITY_THRESHOLD = 0.6;
|
|
|
11
11
|
var MemoryManager = class {
|
|
12
12
|
constructor(workspaceRoot) {
|
|
13
13
|
this.projectMemoryDir = null;
|
|
14
|
-
this.userMemoryDir =
|
|
14
|
+
this.userMemoryDir = _chunkSEKD5FH3cjs.AUTOHAND_PATHS.memory;
|
|
15
15
|
if (workspaceRoot) {
|
|
16
|
-
this.projectMemoryDir = _path2.default.join(workspaceRoot,
|
|
16
|
+
this.projectMemoryDir = _path2.default.join(workspaceRoot, _chunkSEKD5FH3cjs.PROJECT_DIR_NAME, "memory");
|
|
17
17
|
}
|
|
18
18
|
}
|
|
19
19
|
setWorkspace(workspaceRoot) {
|
|
20
|
-
this.projectMemoryDir = _path2.default.join(workspaceRoot,
|
|
20
|
+
this.projectMemoryDir = _path2.default.join(workspaceRoot, _chunkSEKD5FH3cjs.PROJECT_DIR_NAME, "memory");
|
|
21
21
|
}
|
|
22
22
|
async initialize() {
|
|
23
23
|
await _fsextra2.default.ensureDir(this.userMemoryDir);
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
// src/mcp/commandNormalization.ts
|
|
2
|
+
import os from "os";
|
|
3
|
+
import path from "path";
|
|
4
|
+
function isNpxCommand(command) {
|
|
5
|
+
const normalized = command.trim().toLowerCase();
|
|
6
|
+
return normalized === "npx" || normalized === "npx.cmd" || normalized.endsWith("/npx") || normalized.endsWith("\\npx") || normalized.endsWith("/npx.cmd") || normalized.endsWith("\\npx.cmd");
|
|
7
|
+
}
|
|
8
|
+
function hasNpxYesFlag(args) {
|
|
9
|
+
if (!args) return false;
|
|
10
|
+
return args.some((arg) => arg === "-y" || arg === "--yes");
|
|
11
|
+
}
|
|
12
|
+
function hasFlag(args, flag) {
|
|
13
|
+
return args.some((arg) => arg === flag || arg.startsWith(`${flag}=`));
|
|
14
|
+
}
|
|
15
|
+
function findNpxCommandIndex(args) {
|
|
16
|
+
for (let i = 0; i < args.length; i++) {
|
|
17
|
+
const token = args[i];
|
|
18
|
+
if (token === "--") {
|
|
19
|
+
return i + 1 < args.length ? i + 1 : null;
|
|
20
|
+
}
|
|
21
|
+
if (!token.startsWith("-") || token === "-") {
|
|
22
|
+
return i;
|
|
23
|
+
}
|
|
24
|
+
const consumesNextValue = token === "-p" || token === "--package" || token === "-c" || token === "--call";
|
|
25
|
+
if (consumesNextValue) {
|
|
26
|
+
i++;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
function isChromeDevtoolsMcpPackage(spec) {
|
|
32
|
+
const normalized = spec.toLowerCase();
|
|
33
|
+
return normalized === "chrome-devtools-mcp" || normalized.startsWith("chrome-devtools-mcp@");
|
|
34
|
+
}
|
|
35
|
+
var CHROME_DEVTOOLS_USAGE_STATS_FLAG = "--no-usage-statistics";
|
|
36
|
+
var CHROME_DEVTOOLS_LEGACY_USAGE_STATS_FLAG = "--no-usage-stats";
|
|
37
|
+
function addKnownNonInteractiveServerFlags(args) {
|
|
38
|
+
const normalizedArgs = [...args];
|
|
39
|
+
const commandIndex = findNpxCommandIndex(normalizedArgs);
|
|
40
|
+
if (commandIndex === null || commandIndex >= normalizedArgs.length) {
|
|
41
|
+
return normalizedArgs;
|
|
42
|
+
}
|
|
43
|
+
const packageSpec = normalizedArgs[commandIndex];
|
|
44
|
+
if (!isChromeDevtoolsMcpPackage(packageSpec)) {
|
|
45
|
+
return normalizedArgs;
|
|
46
|
+
}
|
|
47
|
+
const hasLegacyFlag = hasFlag(normalizedArgs, CHROME_DEVTOOLS_LEGACY_USAGE_STATS_FLAG);
|
|
48
|
+
if (hasLegacyFlag) {
|
|
49
|
+
for (let i = normalizedArgs.length - 1; i >= 0; i--) {
|
|
50
|
+
if (normalizedArgs[i] === CHROME_DEVTOOLS_LEGACY_USAGE_STATS_FLAG) {
|
|
51
|
+
normalizedArgs.splice(i, 1);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
if (!hasFlag(normalizedArgs, CHROME_DEVTOOLS_USAGE_STATS_FLAG)) {
|
|
56
|
+
normalizedArgs.push(CHROME_DEVTOOLS_USAGE_STATS_FLAG);
|
|
57
|
+
}
|
|
58
|
+
return normalizedArgs;
|
|
59
|
+
}
|
|
60
|
+
function sanitizePathSegment(value) {
|
|
61
|
+
const sanitized = value.toLowerCase().replace(/[^a-z0-9._-]+/g, "-").replace(/^-+/, "").replace(/-+$/, "");
|
|
62
|
+
return sanitized.length > 0 ? sanitized : "server";
|
|
63
|
+
}
|
|
64
|
+
function isRetriableNpxInstallError(message) {
|
|
65
|
+
const normalized = message.toLowerCase();
|
|
66
|
+
if (/npm\s+error\s+code\s+enotempty/i.test(message)) {
|
|
67
|
+
return true;
|
|
68
|
+
}
|
|
69
|
+
return normalized.includes("enotempty") && normalized.includes("_npx");
|
|
70
|
+
}
|
|
71
|
+
function buildNpxIsolatedCacheEnv(baseEnv, serverName) {
|
|
72
|
+
const token = `${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
|
|
73
|
+
const cacheDir = path.join(
|
|
74
|
+
os.tmpdir(),
|
|
75
|
+
"autohand-mcp-npx-cache",
|
|
76
|
+
sanitizePathSegment(serverName),
|
|
77
|
+
token
|
|
78
|
+
);
|
|
79
|
+
const env = {};
|
|
80
|
+
for (const [key, value] of Object.entries(baseEnv ?? {})) {
|
|
81
|
+
if (typeof value === "string") {
|
|
82
|
+
env[key] = value;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return {
|
|
86
|
+
...env,
|
|
87
|
+
npm_config_cache: cacheDir,
|
|
88
|
+
NPM_CONFIG_CACHE: cacheDir
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
function normalizeMcpCommandForSpawn(command, args) {
|
|
92
|
+
if (!isNpxCommand(command)) {
|
|
93
|
+
return { command, args };
|
|
94
|
+
}
|
|
95
|
+
const normalizedArgs = args ? [...args] : [];
|
|
96
|
+
if (!hasNpxYesFlag(normalizedArgs)) {
|
|
97
|
+
normalizedArgs.unshift("-y");
|
|
98
|
+
}
|
|
99
|
+
const spawnSafeArgs = addKnownNonInteractiveServerFlags(normalizedArgs);
|
|
100
|
+
return {
|
|
101
|
+
command,
|
|
102
|
+
args: spawnSafeArgs.length > 0 ? spawnSafeArgs : void 0
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
function normalizeMcpCommandForConfig(command, args) {
|
|
106
|
+
if (!command) {
|
|
107
|
+
return { command, args };
|
|
108
|
+
}
|
|
109
|
+
return normalizeMcpCommandForSpawn(command, args);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
export {
|
|
113
|
+
isNpxCommand,
|
|
114
|
+
isRetriableNpxInstallError,
|
|
115
|
+
buildNpxIsolatedCacheEnv,
|
|
116
|
+
normalizeMcpCommandForSpawn,
|
|
117
|
+
normalizeMcpCommandForConfig
|
|
118
|
+
};
|
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
import {
|
|
2
|
+
autoInitTheme,
|
|
3
|
+
themeExists
|
|
4
|
+
} from "./chunk-IVM5F2AE.js";
|
|
5
|
+
import {
|
|
6
|
+
AUTOHAND_FILES
|
|
7
|
+
} from "./chunk-EGFT4PGW.js";
|
|
8
|
+
|
|
9
|
+
// src/config.ts
|
|
10
|
+
import fs from "fs-extra";
|
|
11
|
+
import path from "path";
|
|
12
|
+
import YAML from "yaml";
|
|
13
|
+
var DEFAULT_CONFIG_PATH = AUTOHAND_FILES.configJson;
|
|
14
|
+
var YAML_CONFIG_PATH = AUTOHAND_FILES.configYaml;
|
|
15
|
+
var YML_CONFIG_PATH = AUTOHAND_FILES.configYml;
|
|
16
|
+
var DEFAULT_BASE_URL = "https://openrouter.ai/api/v1";
|
|
17
|
+
var DEFAULT_OLLAMA_URL = "http://localhost:11434";
|
|
18
|
+
var DEFAULT_LLAMACPP_URL = "http://localhost:8080";
|
|
19
|
+
var DEFAULT_OPENAI_URL = "https://api.openai.com/v1";
|
|
20
|
+
var DEFAULT_MLX_URL = "http://localhost:8080";
|
|
21
|
+
var DEFAULT_LLMGATEWAY_URL = "https://api.llmgateway.io/v1";
|
|
22
|
+
function getDefaultConfigPath() {
|
|
23
|
+
return DEFAULT_CONFIG_PATH;
|
|
24
|
+
}
|
|
25
|
+
async function detectConfigPath(customPath) {
|
|
26
|
+
if (customPath) {
|
|
27
|
+
return path.resolve(customPath);
|
|
28
|
+
}
|
|
29
|
+
const envPath = process.env.AUTOHAND_CONFIG;
|
|
30
|
+
if (envPath) {
|
|
31
|
+
return path.resolve(envPath);
|
|
32
|
+
}
|
|
33
|
+
if (await fs.pathExists(YAML_CONFIG_PATH)) {
|
|
34
|
+
return YAML_CONFIG_PATH;
|
|
35
|
+
}
|
|
36
|
+
if (await fs.pathExists(YML_CONFIG_PATH)) {
|
|
37
|
+
return YML_CONFIG_PATH;
|
|
38
|
+
}
|
|
39
|
+
return DEFAULT_CONFIG_PATH;
|
|
40
|
+
}
|
|
41
|
+
function isYamlFile(filePath) {
|
|
42
|
+
const ext = path.extname(filePath).toLowerCase();
|
|
43
|
+
return ext === ".yaml" || ext === ".yml";
|
|
44
|
+
}
|
|
45
|
+
async function parseConfigFile(configPath) {
|
|
46
|
+
const content = await fs.readFile(configPath, "utf8");
|
|
47
|
+
if (isYamlFile(configPath)) {
|
|
48
|
+
return YAML.parse(content);
|
|
49
|
+
}
|
|
50
|
+
return JSON.parse(content);
|
|
51
|
+
}
|
|
52
|
+
async function loadConfig(customPath) {
|
|
53
|
+
const configPath = await detectConfigPath(customPath);
|
|
54
|
+
await fs.ensureDir(path.dirname(configPath));
|
|
55
|
+
let isNewConfig = false;
|
|
56
|
+
if (!await fs.pathExists(configPath)) {
|
|
57
|
+
const defaultConfig = {
|
|
58
|
+
provider: "openrouter",
|
|
59
|
+
openrouter: {
|
|
60
|
+
apiKey: "",
|
|
61
|
+
baseUrl: "https://openrouter.ai/api/v1",
|
|
62
|
+
model: "anthropic/claude-sonnet-4-20250514"
|
|
63
|
+
},
|
|
64
|
+
workspace: {
|
|
65
|
+
defaultRoot: process.cwd(),
|
|
66
|
+
allowDangerousOps: false
|
|
67
|
+
},
|
|
68
|
+
ui: {
|
|
69
|
+
theme: "dark",
|
|
70
|
+
autoConfirm: false,
|
|
71
|
+
promptSuggestions: true
|
|
72
|
+
},
|
|
73
|
+
telemetry: {
|
|
74
|
+
enabled: false
|
|
75
|
+
},
|
|
76
|
+
autoReport: {
|
|
77
|
+
enabled: true
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
await fs.writeJson(configPath, defaultConfig, { spaces: 2 });
|
|
81
|
+
isNewConfig = true;
|
|
82
|
+
}
|
|
83
|
+
let parsed;
|
|
84
|
+
try {
|
|
85
|
+
parsed = await parseConfigFile(configPath);
|
|
86
|
+
} catch (error) {
|
|
87
|
+
throw new Error(`Failed to parse config at ${configPath}: ${error.message}`);
|
|
88
|
+
}
|
|
89
|
+
const normalized = normalizeConfig(parsed);
|
|
90
|
+
const withEnv = mergeEnvVariables(normalized);
|
|
91
|
+
validateConfig(withEnv, configPath);
|
|
92
|
+
const themeName = withEnv.ui?.theme || "dark";
|
|
93
|
+
autoInitTheme(themeName);
|
|
94
|
+
return { ...withEnv, configPath, isNewConfig };
|
|
95
|
+
}
|
|
96
|
+
function mergeEnvVariables(config) {
|
|
97
|
+
return {
|
|
98
|
+
...config,
|
|
99
|
+
api: {
|
|
100
|
+
baseUrl: process.env.AUTOHAND_API_URL || config.api?.baseUrl || "https://api.autohand.ai",
|
|
101
|
+
companySecret: process.env.AUTOHAND_SECRET || config.api?.companySecret || ""
|
|
102
|
+
}
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
function normalizeConfig(config) {
|
|
106
|
+
if (isModernConfig(config)) {
|
|
107
|
+
const provider = config.provider ?? "openrouter";
|
|
108
|
+
return { provider, ...config };
|
|
109
|
+
}
|
|
110
|
+
if (isLegacyConfig(config)) {
|
|
111
|
+
return {
|
|
112
|
+
provider: "openrouter",
|
|
113
|
+
openrouter: {
|
|
114
|
+
apiKey: config.api_key ?? "replace-me",
|
|
115
|
+
baseUrl: config.base_url ?? DEFAULT_BASE_URL,
|
|
116
|
+
model: config.model ?? "anthropic/claude-3.5-sonnet"
|
|
117
|
+
},
|
|
118
|
+
workspace: {
|
|
119
|
+
defaultRoot: process.cwd(),
|
|
120
|
+
allowDangerousOps: false
|
|
121
|
+
},
|
|
122
|
+
ui: {
|
|
123
|
+
autoConfirm: config.dry_run ?? false,
|
|
124
|
+
theme: "dark",
|
|
125
|
+
promptSuggestions: true
|
|
126
|
+
}
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
return config;
|
|
130
|
+
}
|
|
131
|
+
function isModernConfig(config) {
|
|
132
|
+
return typeof config.openrouter === "object" || typeof config.ollama === "object" || typeof config.llamacpp === "object" || typeof config.openai === "object" || typeof config.mlx === "object";
|
|
133
|
+
}
|
|
134
|
+
function isLegacyConfig(config) {
|
|
135
|
+
return typeof config.api_key === "string";
|
|
136
|
+
}
|
|
137
|
+
function validateConfig(config, configPath) {
|
|
138
|
+
if (config.workspace) {
|
|
139
|
+
if (config.workspace.defaultRoot && typeof config.workspace.defaultRoot !== "string") {
|
|
140
|
+
throw new Error(`workspace.defaultRoot must be a string in ${configPath}`);
|
|
141
|
+
}
|
|
142
|
+
if (config.workspace.allowDangerousOps !== void 0 && typeof config.workspace.allowDangerousOps !== "boolean") {
|
|
143
|
+
throw new Error(`workspace.allowDangerousOps must be boolean in ${configPath}`);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
if (config.ui) {
|
|
147
|
+
if (config.ui.theme && typeof config.ui.theme !== "string") {
|
|
148
|
+
throw new Error(`ui.theme must be a string in ${configPath}`);
|
|
149
|
+
}
|
|
150
|
+
if (config.ui.theme && typeof config.ui.theme === "string" && !themeExists(config.ui.theme)) {
|
|
151
|
+
console.warn(`Theme '${config.ui.theme}' not found \u2014 falling back to default.`);
|
|
152
|
+
}
|
|
153
|
+
if (config.ui.autoConfirm !== void 0 && typeof config.ui.autoConfirm !== "boolean") {
|
|
154
|
+
throw new Error(`ui.autoConfirm must be boolean in ${configPath}`);
|
|
155
|
+
}
|
|
156
|
+
if (config.ui.promptSuggestions !== void 0 && typeof config.ui.promptSuggestions !== "boolean") {
|
|
157
|
+
throw new Error(`ui.promptSuggestions must be boolean in ${configPath}`);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
if (config.mcp) {
|
|
161
|
+
if (config.mcp.enabled !== void 0 && typeof config.mcp.enabled !== "boolean") {
|
|
162
|
+
throw new Error(`mcp.enabled must be boolean in ${configPath}`);
|
|
163
|
+
}
|
|
164
|
+
if (config.mcp.servers !== void 0) {
|
|
165
|
+
if (!Array.isArray(config.mcp.servers)) {
|
|
166
|
+
throw new Error(`mcp.servers must be an array in ${configPath}`);
|
|
167
|
+
}
|
|
168
|
+
for (const server of config.mcp.servers) {
|
|
169
|
+
if (!server.name || typeof server.name !== "string") {
|
|
170
|
+
throw new Error(`mcp.servers[].name must be a non-empty string in ${configPath}`);
|
|
171
|
+
}
|
|
172
|
+
if (!["stdio", "sse", "http"].includes(server.transport)) {
|
|
173
|
+
throw new Error(`mcp.servers[].transport must be 'stdio', 'sse', or 'http' in ${configPath}`);
|
|
174
|
+
}
|
|
175
|
+
if (server.transport === "stdio" && (!server.command || typeof server.command !== "string")) {
|
|
176
|
+
throw new Error(`mcp.servers[].command is required for stdio transport in ${configPath}`);
|
|
177
|
+
}
|
|
178
|
+
if ((server.transport === "sse" || server.transport === "http") && (!server.url || typeof server.url !== "string")) {
|
|
179
|
+
throw new Error(`mcp.servers[].url is required for ${server.transport} transport in ${configPath}`);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
if (config.externalAgents) {
|
|
185
|
+
if (config.externalAgents.enabled !== void 0 && typeof config.externalAgents.enabled !== "boolean") {
|
|
186
|
+
throw new Error(`externalAgents.enabled must be boolean in ${configPath}`);
|
|
187
|
+
}
|
|
188
|
+
if (config.externalAgents.paths !== void 0) {
|
|
189
|
+
if (!Array.isArray(config.externalAgents.paths)) {
|
|
190
|
+
throw new Error(`externalAgents.paths must be an array in ${configPath}`);
|
|
191
|
+
}
|
|
192
|
+
for (const p of config.externalAgents.paths) {
|
|
193
|
+
if (typeof p !== "string") {
|
|
194
|
+
throw new Error(`externalAgents.paths must contain only strings in ${configPath}`);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
function resolveWorkspaceRoot(config, requestedPath) {
|
|
201
|
+
const candidate = requestedPath ?? process.cwd() ?? config.workspace?.defaultRoot;
|
|
202
|
+
return path.resolve(candidate);
|
|
203
|
+
}
|
|
204
|
+
function getProviderConfig(config, provider) {
|
|
205
|
+
const chosen = provider ?? config.provider ?? "openrouter";
|
|
206
|
+
const configByProvider = {
|
|
207
|
+
openrouter: config.openrouter,
|
|
208
|
+
ollama: config.ollama,
|
|
209
|
+
llamacpp: config.llamacpp,
|
|
210
|
+
openai: config.openai,
|
|
211
|
+
mlx: config.mlx,
|
|
212
|
+
llmgateway: config.llmgateway
|
|
213
|
+
};
|
|
214
|
+
const entry = configByProvider[chosen];
|
|
215
|
+
if (!entry) {
|
|
216
|
+
return null;
|
|
217
|
+
}
|
|
218
|
+
if (chosen === "openrouter" || chosen === "llmgateway") {
|
|
219
|
+
const { apiKey, model } = entry;
|
|
220
|
+
if (!apiKey || apiKey === "replace-me" || !model) {
|
|
221
|
+
return null;
|
|
222
|
+
}
|
|
223
|
+
} else {
|
|
224
|
+
if (!entry.model) {
|
|
225
|
+
return null;
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
return {
|
|
229
|
+
...entry,
|
|
230
|
+
baseUrl: entry.baseUrl ?? defaultBaseUrlFor(chosen, entry.port)
|
|
231
|
+
};
|
|
232
|
+
}
|
|
233
|
+
function defaultBaseUrlFor(provider, port) {
|
|
234
|
+
if (provider === "openrouter") return DEFAULT_BASE_URL;
|
|
235
|
+
if (provider === "llmgateway") return DEFAULT_LLMGATEWAY_URL;
|
|
236
|
+
const p = port ? port.toString() : void 0;
|
|
237
|
+
switch (provider) {
|
|
238
|
+
case "ollama":
|
|
239
|
+
return p ? `http://localhost:${p}` : DEFAULT_OLLAMA_URL;
|
|
240
|
+
case "llamacpp":
|
|
241
|
+
return p ? `http://localhost:${p}` : DEFAULT_LLAMACPP_URL;
|
|
242
|
+
case "openai":
|
|
243
|
+
return DEFAULT_OPENAI_URL;
|
|
244
|
+
case "mlx":
|
|
245
|
+
return p ? `http://localhost:${p}` : DEFAULT_MLX_URL;
|
|
246
|
+
default:
|
|
247
|
+
return void 0;
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
async function saveConfig(config) {
|
|
251
|
+
const { configPath, ...data } = config;
|
|
252
|
+
if (isYamlFile(configPath)) {
|
|
253
|
+
const yamlContent = YAML.stringify(data, { indent: 2 });
|
|
254
|
+
await fs.writeFile(configPath, yamlContent, "utf8");
|
|
255
|
+
} else {
|
|
256
|
+
await fs.writeJson(configPath, data, { spaces: 2 });
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
export {
|
|
261
|
+
getDefaultConfigPath,
|
|
262
|
+
loadConfig,
|
|
263
|
+
resolveWorkspaceRoot,
|
|
264
|
+
getProviderConfig,
|
|
265
|
+
saveConfig
|
|
266
|
+
};
|
|
267
|
+
/**
|
|
268
|
+
* @license
|
|
269
|
+
* Copyright 2025 Autohand AI LLC
|
|
270
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
271
|
+
*/
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
// src/core/teams/MessageRouter.ts
|
|
2
|
+
import { createInterface } from "readline";
|
|
3
|
+
var MessageRouter = class _MessageRouter {
|
|
4
|
+
/**
|
|
5
|
+
* Encode a message payload into a JSON-RPC 2.0 JSON string.
|
|
6
|
+
* Always stamps `jsonrpc: "2.0"` onto the output.
|
|
7
|
+
*/
|
|
8
|
+
static encode(msg) {
|
|
9
|
+
return JSON.stringify({ jsonrpc: "2.0", ...msg });
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Subscribe to incoming JSON-RPC messages from a readable stream.
|
|
13
|
+
* Each newline-delimited line is parsed; non-JSON lines and messages
|
|
14
|
+
* without a `method` field are silently ignored (stderr leakage,
|
|
15
|
+
* debug output, etc.).
|
|
16
|
+
*/
|
|
17
|
+
onMessage(stream, callback) {
|
|
18
|
+
const rl = createInterface({ input: stream, crlfDelay: Infinity });
|
|
19
|
+
rl.on("line", (line) => {
|
|
20
|
+
const trimmed = line.trim();
|
|
21
|
+
if (!trimmed) return;
|
|
22
|
+
try {
|
|
23
|
+
const parsed = JSON.parse(trimmed);
|
|
24
|
+
if (parsed.method) {
|
|
25
|
+
callback(parsed);
|
|
26
|
+
}
|
|
27
|
+
} catch {
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Send a JSON-RPC 2.0 message to a writable stream as a single
|
|
33
|
+
* newline-terminated line.
|
|
34
|
+
*/
|
|
35
|
+
send(stream, msg) {
|
|
36
|
+
const line = _MessageRouter.encode(msg) + "\n";
|
|
37
|
+
stream.write(line);
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
export {
|
|
42
|
+
MessageRouter
|
|
43
|
+
};
|
|
44
|
+
/**
|
|
45
|
+
* @license
|
|
46
|
+
* Copyright 2025 Autohand AI LLC
|
|
47
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
48
|
+
*/
|
|
@@ -0,0 +1,118 @@
|
|
|
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(); } }// src/mcp/commandNormalization.ts
|
|
2
|
+
var _os = require('os'); var _os2 = _interopRequireDefault(_os);
|
|
3
|
+
var _path = require('path'); var _path2 = _interopRequireDefault(_path);
|
|
4
|
+
function isNpxCommand(command) {
|
|
5
|
+
const normalized = command.trim().toLowerCase();
|
|
6
|
+
return normalized === "npx" || normalized === "npx.cmd" || normalized.endsWith("/npx") || normalized.endsWith("\\npx") || normalized.endsWith("/npx.cmd") || normalized.endsWith("\\npx.cmd");
|
|
7
|
+
}
|
|
8
|
+
function hasNpxYesFlag(args) {
|
|
9
|
+
if (!args) return false;
|
|
10
|
+
return args.some((arg) => arg === "-y" || arg === "--yes");
|
|
11
|
+
}
|
|
12
|
+
function hasFlag(args, flag) {
|
|
13
|
+
return args.some((arg) => arg === flag || arg.startsWith(`${flag}=`));
|
|
14
|
+
}
|
|
15
|
+
function findNpxCommandIndex(args) {
|
|
16
|
+
for (let i = 0; i < args.length; i++) {
|
|
17
|
+
const token = args[i];
|
|
18
|
+
if (token === "--") {
|
|
19
|
+
return i + 1 < args.length ? i + 1 : null;
|
|
20
|
+
}
|
|
21
|
+
if (!token.startsWith("-") || token === "-") {
|
|
22
|
+
return i;
|
|
23
|
+
}
|
|
24
|
+
const consumesNextValue = token === "-p" || token === "--package" || token === "-c" || token === "--call";
|
|
25
|
+
if (consumesNextValue) {
|
|
26
|
+
i++;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
function isChromeDevtoolsMcpPackage(spec) {
|
|
32
|
+
const normalized = spec.toLowerCase();
|
|
33
|
+
return normalized === "chrome-devtools-mcp" || normalized.startsWith("chrome-devtools-mcp@");
|
|
34
|
+
}
|
|
35
|
+
var CHROME_DEVTOOLS_USAGE_STATS_FLAG = "--no-usage-statistics";
|
|
36
|
+
var CHROME_DEVTOOLS_LEGACY_USAGE_STATS_FLAG = "--no-usage-stats";
|
|
37
|
+
function addKnownNonInteractiveServerFlags(args) {
|
|
38
|
+
const normalizedArgs = [...args];
|
|
39
|
+
const commandIndex = findNpxCommandIndex(normalizedArgs);
|
|
40
|
+
if (commandIndex === null || commandIndex >= normalizedArgs.length) {
|
|
41
|
+
return normalizedArgs;
|
|
42
|
+
}
|
|
43
|
+
const packageSpec = normalizedArgs[commandIndex];
|
|
44
|
+
if (!isChromeDevtoolsMcpPackage(packageSpec)) {
|
|
45
|
+
return normalizedArgs;
|
|
46
|
+
}
|
|
47
|
+
const hasLegacyFlag = hasFlag(normalizedArgs, CHROME_DEVTOOLS_LEGACY_USAGE_STATS_FLAG);
|
|
48
|
+
if (hasLegacyFlag) {
|
|
49
|
+
for (let i = normalizedArgs.length - 1; i >= 0; i--) {
|
|
50
|
+
if (normalizedArgs[i] === CHROME_DEVTOOLS_LEGACY_USAGE_STATS_FLAG) {
|
|
51
|
+
normalizedArgs.splice(i, 1);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
if (!hasFlag(normalizedArgs, CHROME_DEVTOOLS_USAGE_STATS_FLAG)) {
|
|
56
|
+
normalizedArgs.push(CHROME_DEVTOOLS_USAGE_STATS_FLAG);
|
|
57
|
+
}
|
|
58
|
+
return normalizedArgs;
|
|
59
|
+
}
|
|
60
|
+
function sanitizePathSegment(value) {
|
|
61
|
+
const sanitized = value.toLowerCase().replace(/[^a-z0-9._-]+/g, "-").replace(/^-+/, "").replace(/-+$/, "");
|
|
62
|
+
return sanitized.length > 0 ? sanitized : "server";
|
|
63
|
+
}
|
|
64
|
+
function isRetriableNpxInstallError(message) {
|
|
65
|
+
const normalized = message.toLowerCase();
|
|
66
|
+
if (/npm\s+error\s+code\s+enotempty/i.test(message)) {
|
|
67
|
+
return true;
|
|
68
|
+
}
|
|
69
|
+
return normalized.includes("enotempty") && normalized.includes("_npx");
|
|
70
|
+
}
|
|
71
|
+
function buildNpxIsolatedCacheEnv(baseEnv, serverName) {
|
|
72
|
+
const token = `${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
|
|
73
|
+
const cacheDir = _path2.default.join(
|
|
74
|
+
_os2.default.tmpdir(),
|
|
75
|
+
"autohand-mcp-npx-cache",
|
|
76
|
+
sanitizePathSegment(serverName),
|
|
77
|
+
token
|
|
78
|
+
);
|
|
79
|
+
const env = {};
|
|
80
|
+
for (const [key, value] of Object.entries(_nullishCoalesce(baseEnv, () => ( {})))) {
|
|
81
|
+
if (typeof value === "string") {
|
|
82
|
+
env[key] = value;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return {
|
|
86
|
+
...env,
|
|
87
|
+
npm_config_cache: cacheDir,
|
|
88
|
+
NPM_CONFIG_CACHE: cacheDir
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
function normalizeMcpCommandForSpawn(command, args) {
|
|
92
|
+
if (!isNpxCommand(command)) {
|
|
93
|
+
return { command, args };
|
|
94
|
+
}
|
|
95
|
+
const normalizedArgs = args ? [...args] : [];
|
|
96
|
+
if (!hasNpxYesFlag(normalizedArgs)) {
|
|
97
|
+
normalizedArgs.unshift("-y");
|
|
98
|
+
}
|
|
99
|
+
const spawnSafeArgs = addKnownNonInteractiveServerFlags(normalizedArgs);
|
|
100
|
+
return {
|
|
101
|
+
command,
|
|
102
|
+
args: spawnSafeArgs.length > 0 ? spawnSafeArgs : void 0
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
function normalizeMcpCommandForConfig(command, args) {
|
|
106
|
+
if (!command) {
|
|
107
|
+
return { command, args };
|
|
108
|
+
}
|
|
109
|
+
return normalizeMcpCommandForSpawn(command, args);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
exports.isNpxCommand = isNpxCommand; exports.isRetriableNpxInstallError = isRetriableNpxInstallError; exports.buildNpxIsolatedCacheEnv = buildNpxIsolatedCacheEnv; exports.normalizeMcpCommandForSpawn = normalizeMcpCommandForSpawn; exports.normalizeMcpCommandForConfig = normalizeMcpCommandForConfig;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var _chunkRVUQKMXXcjs = require('./chunk-RVUQKMXX.cjs');
|
|
4
4
|
|
|
5
5
|
// src/commands/quit.ts
|
|
6
6
|
async function quit() {
|
|
@@ -8,7 +8,7 @@ async function quit() {
|
|
|
8
8
|
}
|
|
9
9
|
var metadata = {
|
|
10
10
|
command: "/quit",
|
|
11
|
-
description:
|
|
11
|
+
description: _chunkRVUQKMXXcjs.t.call(void 0, "commands.quit.description"),
|
|
12
12
|
implemented: true
|
|
13
13
|
};
|
|
14
14
|
|