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
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
// src/utils/versionCheck.ts
|
|
2
|
+
import fs from "fs-extra";
|
|
3
|
+
import path from "path";
|
|
4
|
+
import os from "os";
|
|
5
|
+
var GITHUB_REPO = "autohandai/code-cli";
|
|
6
|
+
var GITHUB_API_LATEST_URL = `https://api.github.com/repos/${GITHUB_REPO}/releases/latest`;
|
|
7
|
+
var GITHUB_API_RELEASES_URL = `https://api.github.com/repos/${GITHUB_REPO}/releases?per_page=100`;
|
|
8
|
+
var CACHE_DIR = path.join(os.homedir(), ".autohand");
|
|
9
|
+
var DEFAULT_CHECK_INTERVAL_HOURS = 24;
|
|
10
|
+
var REQUEST_TIMEOUT_MS = 3e3;
|
|
11
|
+
function detectChannel(version) {
|
|
12
|
+
return version.includes("-alpha.") ? "alpha" : "stable";
|
|
13
|
+
}
|
|
14
|
+
function getCacheFile(channel) {
|
|
15
|
+
return path.join(CACHE_DIR, `version-check-${channel}.json`);
|
|
16
|
+
}
|
|
17
|
+
function compareVersions(a, b) {
|
|
18
|
+
const cleanA = a.replace(/^v/, "");
|
|
19
|
+
const cleanB = b.replace(/^v/, "");
|
|
20
|
+
const [versionA, preA] = cleanA.split("-");
|
|
21
|
+
const [versionB, preB] = cleanB.split("-");
|
|
22
|
+
const partsA = versionA.split(".").map(Number);
|
|
23
|
+
const partsB = versionB.split(".").map(Number);
|
|
24
|
+
for (let i = 0; i < Math.max(partsA.length, partsB.length); i++) {
|
|
25
|
+
const numA = partsA[i] || 0;
|
|
26
|
+
const numB = partsB[i] || 0;
|
|
27
|
+
if (numA < numB) return -1;
|
|
28
|
+
if (numA > numB) return 1;
|
|
29
|
+
}
|
|
30
|
+
if (!preA && preB) return 1;
|
|
31
|
+
if (preA && !preB) return -1;
|
|
32
|
+
if (preA && preB) {
|
|
33
|
+
return preA.localeCompare(preB);
|
|
34
|
+
}
|
|
35
|
+
return 0;
|
|
36
|
+
}
|
|
37
|
+
function parseReleaseTimestamp(release) {
|
|
38
|
+
const rawTimestamp = release.published_at ?? release.created_at ?? null;
|
|
39
|
+
if (!rawTimestamp) {
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
42
|
+
const parsed = Date.parse(rawTimestamp);
|
|
43
|
+
return Number.isNaN(parsed) ? null : parsed;
|
|
44
|
+
}
|
|
45
|
+
function selectLatestPrereleaseRelease(releases) {
|
|
46
|
+
const prereleases = releases.filter((release) => release.prerelease && release.tag_name);
|
|
47
|
+
if (prereleases.length === 0) {
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
let selected = prereleases[0];
|
|
51
|
+
let selectedTimestamp = parseReleaseTimestamp(selected);
|
|
52
|
+
for (const release of prereleases.slice(1)) {
|
|
53
|
+
const timestamp = parseReleaseTimestamp(release);
|
|
54
|
+
if (timestamp === null) {
|
|
55
|
+
continue;
|
|
56
|
+
}
|
|
57
|
+
if (selectedTimestamp === null || timestamp > selectedTimestamp) {
|
|
58
|
+
selected = release;
|
|
59
|
+
selectedTimestamp = timestamp;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return selected;
|
|
63
|
+
}
|
|
64
|
+
function evaluateUpdateStatus(currentVersion, latestVersion, channel) {
|
|
65
|
+
if (channel === "alpha") {
|
|
66
|
+
const isUpToDate = currentVersion === latestVersion;
|
|
67
|
+
return { isUpToDate, updateAvailable: !isUpToDate };
|
|
68
|
+
}
|
|
69
|
+
const comparison = compareVersions(currentVersion, latestVersion);
|
|
70
|
+
return {
|
|
71
|
+
isUpToDate: comparison >= 0,
|
|
72
|
+
updateAvailable: comparison < 0
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
async function readCache(channel) {
|
|
76
|
+
try {
|
|
77
|
+
const cacheFile = getCacheFile(channel);
|
|
78
|
+
if (await fs.pathExists(cacheFile)) {
|
|
79
|
+
const data = await fs.readJson(cacheFile);
|
|
80
|
+
return data;
|
|
81
|
+
}
|
|
82
|
+
} catch {
|
|
83
|
+
}
|
|
84
|
+
return null;
|
|
85
|
+
}
|
|
86
|
+
async function writeCache(channel, cache) {
|
|
87
|
+
try {
|
|
88
|
+
const cacheFile = getCacheFile(channel);
|
|
89
|
+
await fs.ensureDir(path.dirname(cacheFile));
|
|
90
|
+
await fs.writeJson(cacheFile, cache, { spaces: 2 });
|
|
91
|
+
} catch {
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
function isCacheValid(cache, intervalHours) {
|
|
95
|
+
try {
|
|
96
|
+
const lastCheck = new Date(cache.lastCheck);
|
|
97
|
+
const now = /* @__PURE__ */ new Date();
|
|
98
|
+
const hoursSinceCheck = (now.getTime() - lastCheck.getTime()) / (1e3 * 60 * 60);
|
|
99
|
+
return hoursSinceCheck < intervalHours;
|
|
100
|
+
} catch {
|
|
101
|
+
return false;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
async function fetchLatestStableRelease() {
|
|
105
|
+
try {
|
|
106
|
+
const controller = new AbortController();
|
|
107
|
+
const timeout = setTimeout(() => controller.abort(), REQUEST_TIMEOUT_MS);
|
|
108
|
+
const response = await fetch(GITHUB_API_LATEST_URL, {
|
|
109
|
+
headers: {
|
|
110
|
+
"Accept": "application/vnd.github.v3+json",
|
|
111
|
+
"User-Agent": "autohand-cli"
|
|
112
|
+
},
|
|
113
|
+
signal: controller.signal
|
|
114
|
+
});
|
|
115
|
+
clearTimeout(timeout);
|
|
116
|
+
if (!response.ok) {
|
|
117
|
+
return null;
|
|
118
|
+
}
|
|
119
|
+
const data = await response.json();
|
|
120
|
+
if (data.tag_name) {
|
|
121
|
+
return {
|
|
122
|
+
version: data.tag_name.replace(/^v/, ""),
|
|
123
|
+
url: data.html_url || `https://github.com/${GITHUB_REPO}/releases/tag/${data.tag_name}`
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
} catch {
|
|
127
|
+
}
|
|
128
|
+
return null;
|
|
129
|
+
}
|
|
130
|
+
async function fetchLatestAlphaRelease() {
|
|
131
|
+
try {
|
|
132
|
+
const controller = new AbortController();
|
|
133
|
+
const timeout = setTimeout(() => controller.abort(), REQUEST_TIMEOUT_MS);
|
|
134
|
+
const response = await fetch(GITHUB_API_RELEASES_URL, {
|
|
135
|
+
headers: {
|
|
136
|
+
"Accept": "application/vnd.github.v3+json",
|
|
137
|
+
"User-Agent": "autohand-cli"
|
|
138
|
+
},
|
|
139
|
+
signal: controller.signal
|
|
140
|
+
});
|
|
141
|
+
clearTimeout(timeout);
|
|
142
|
+
if (!response.ok) {
|
|
143
|
+
return null;
|
|
144
|
+
}
|
|
145
|
+
const releases = await response.json();
|
|
146
|
+
const latestPrerelease = selectLatestPrereleaseRelease(releases);
|
|
147
|
+
if (latestPrerelease?.tag_name) {
|
|
148
|
+
return {
|
|
149
|
+
version: latestPrerelease.tag_name.replace(/^v/, ""),
|
|
150
|
+
url: latestPrerelease.html_url || `https://github.com/${GITHUB_REPO}/releases/tag/${latestPrerelease.tag_name}`
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
} catch {
|
|
154
|
+
}
|
|
155
|
+
return null;
|
|
156
|
+
}
|
|
157
|
+
function getInstallHint(channel) {
|
|
158
|
+
if (channel === "alpha") {
|
|
159
|
+
return "curl -fsSL https://autohand.ai/install.sh | sh -s -- --alpha";
|
|
160
|
+
}
|
|
161
|
+
return "curl -fsSL https://autohand.ai/install.sh | sh";
|
|
162
|
+
}
|
|
163
|
+
async function checkForUpdates(currentVersion, options = {}) {
|
|
164
|
+
const {
|
|
165
|
+
checkIntervalHours = DEFAULT_CHECK_INTERVAL_HOURS,
|
|
166
|
+
forceCheck = false
|
|
167
|
+
} = options;
|
|
168
|
+
const channel = detectChannel(currentVersion);
|
|
169
|
+
const result = {
|
|
170
|
+
currentVersion,
|
|
171
|
+
latestVersion: null,
|
|
172
|
+
isUpToDate: true,
|
|
173
|
+
updateAvailable: false,
|
|
174
|
+
channel
|
|
175
|
+
};
|
|
176
|
+
if (process.env.AUTOHAND_SKIP_UPDATE_CHECK === "1") {
|
|
177
|
+
return result;
|
|
178
|
+
}
|
|
179
|
+
try {
|
|
180
|
+
if (!forceCheck) {
|
|
181
|
+
const cache = await readCache(channel);
|
|
182
|
+
if (cache && isCacheValid(cache, checkIntervalHours)) {
|
|
183
|
+
result.latestVersion = cache.latestVersion;
|
|
184
|
+
result.releaseUrl = cache.releaseUrl;
|
|
185
|
+
const status = evaluateUpdateStatus(currentVersion, cache.latestVersion, channel);
|
|
186
|
+
result.isUpToDate = status.isUpToDate;
|
|
187
|
+
result.updateAvailable = status.updateAvailable;
|
|
188
|
+
return result;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
const latest = channel === "alpha" ? await fetchLatestAlphaRelease() : await fetchLatestStableRelease();
|
|
192
|
+
if (latest) {
|
|
193
|
+
result.latestVersion = latest.version;
|
|
194
|
+
result.releaseUrl = latest.url;
|
|
195
|
+
const status = evaluateUpdateStatus(currentVersion, latest.version, channel);
|
|
196
|
+
result.isUpToDate = status.isUpToDate;
|
|
197
|
+
result.updateAvailable = status.updateAvailable;
|
|
198
|
+
await writeCache(channel, {
|
|
199
|
+
lastCheck: (/* @__PURE__ */ new Date()).toISOString(),
|
|
200
|
+
latestVersion: latest.version,
|
|
201
|
+
releaseUrl: latest.url
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
} catch (error) {
|
|
205
|
+
result.error = error instanceof Error ? error.message : "Unknown error";
|
|
206
|
+
}
|
|
207
|
+
return result;
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
export {
|
|
211
|
+
getInstallHint,
|
|
212
|
+
checkForUpdates
|
|
213
|
+
};
|
|
214
|
+
/**
|
|
215
|
+
* @license
|
|
216
|
+
* Copyright 2025 Autohand AI LLC
|
|
217
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
218
|
+
*/
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 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
|
+
|
|
4
|
+
var _chunkRKJTGGMUcjs = require('./chunk-RKJTGGMU.cjs');
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
var _chunkFPAE6ORVcjs = require('./chunk-FPAE6ORV.cjs');
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
var _chunkUJTCTTUFcjs = require('./chunk-UJTCTTUF.cjs');
|
|
12
|
+
|
|
13
|
+
// src/commands/search.ts
|
|
14
|
+
var _chalk = require('chalk'); var _chalk2 = _interopRequireDefault(_chalk);
|
|
15
|
+
async function search(ctx) {
|
|
16
|
+
const currentConfig = _chunkRKJTGGMUcjs.getSearchConfig.call(void 0, );
|
|
17
|
+
const config = ctx.config;
|
|
18
|
+
console.log(_chalk2.default.bold("\nWeb Search Configuration\n"));
|
|
19
|
+
console.log(_chalk2.default.gray(`Current provider: ${_chalk2.default.cyan(currentConfig.provider)}`));
|
|
20
|
+
const braveKeySet = !!(currentConfig.braveApiKey || process.env.BRAVE_SEARCH_API_KEY);
|
|
21
|
+
const parallelKeySet = !!(currentConfig.parallelApiKey || process.env.PARALLEL_API_KEY);
|
|
22
|
+
console.log(_chalk2.default.gray(`Brave API key: ${braveKeySet ? _chalk2.default.green("configured") : _chalk2.default.yellow("not set")}`));
|
|
23
|
+
console.log(_chalk2.default.gray(`Parallel API key: ${parallelKeySet ? _chalk2.default.green("configured") : _chalk2.default.yellow("not set")}`));
|
|
24
|
+
console.log();
|
|
25
|
+
const providerOptions = [
|
|
26
|
+
{
|
|
27
|
+
label: `Google ${_chalk2.default.gray("(no API key required, recommended default)")}`,
|
|
28
|
+
value: "google"
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
label: `DuckDuckGo ${_chalk2.default.gray("(no API key required, may be blocked by CAPTCHA)")}`,
|
|
32
|
+
value: "duckduckgo"
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
label: `Brave Search ${_chalk2.default.gray("(requires API key)")} ${braveKeySet ? _chalk2.default.green("\u2713") : ""}`,
|
|
36
|
+
value: "brave"
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
label: `Parallel.ai ${_chalk2.default.gray("(requires API key)")} ${parallelKeySet ? _chalk2.default.green("\u2713") : ""}`,
|
|
40
|
+
value: "parallel"
|
|
41
|
+
}
|
|
42
|
+
];
|
|
43
|
+
try {
|
|
44
|
+
const result = await _chunkFPAE6ORVcjs.showModal.call(void 0, {
|
|
45
|
+
title: "Select search provider:",
|
|
46
|
+
options: providerOptions,
|
|
47
|
+
initialIndex: providerOptions.findIndex((c) => c.value === currentConfig.provider)
|
|
48
|
+
});
|
|
49
|
+
if (!result) {
|
|
50
|
+
console.log(_chalk2.default.gray("Search configuration cancelled."));
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
const provider = result.value;
|
|
54
|
+
let braveApiKey = currentConfig.braveApiKey;
|
|
55
|
+
let parallelApiKey = currentConfig.parallelApiKey;
|
|
56
|
+
if (provider === "brave" && !braveKeySet) {
|
|
57
|
+
console.log(_chalk2.default.gray("\nGet your free Brave Search API key at: https://brave.com/search/api/\n"));
|
|
58
|
+
const apiKey = await _chunkFPAE6ORVcjs.showPassword.call(void 0, {
|
|
59
|
+
title: "Enter Brave Search API key:"
|
|
60
|
+
});
|
|
61
|
+
if (_optionalChain([apiKey, 'optionalAccess', _ => _.trim, 'call', _2 => _2()])) {
|
|
62
|
+
braveApiKey = apiKey.trim();
|
|
63
|
+
} else {
|
|
64
|
+
console.log(_chalk2.default.yellow("No API key entered. Brave Search will not work without an API key."));
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
if (provider === "parallel" && !parallelKeySet) {
|
|
69
|
+
console.log(_chalk2.default.gray("\nGet your Parallel.ai API key at: https://platform.parallel.ai\n"));
|
|
70
|
+
const apiKey = await _chunkFPAE6ORVcjs.showPassword.call(void 0, {
|
|
71
|
+
title: "Enter Parallel.ai API key:"
|
|
72
|
+
});
|
|
73
|
+
if (_optionalChain([apiKey, 'optionalAccess', _3 => _3.trim, 'call', _4 => _4()])) {
|
|
74
|
+
parallelApiKey = apiKey.trim();
|
|
75
|
+
} else {
|
|
76
|
+
console.log(_chalk2.default.yellow("No API key entered. Parallel.ai Search will not work without an API key."));
|
|
77
|
+
return null;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
_chunkRKJTGGMUcjs.configureSearch.call(void 0, {
|
|
81
|
+
provider,
|
|
82
|
+
braveApiKey,
|
|
83
|
+
parallelApiKey
|
|
84
|
+
});
|
|
85
|
+
if (config) {
|
|
86
|
+
config.search = {
|
|
87
|
+
provider,
|
|
88
|
+
braveApiKey,
|
|
89
|
+
parallelApiKey
|
|
90
|
+
};
|
|
91
|
+
await _chunkUJTCTTUFcjs.saveConfig.call(void 0, config);
|
|
92
|
+
console.log(_chalk2.default.green(`
|
|
93
|
+
\u2713 Search provider set to ${provider} and saved to config`));
|
|
94
|
+
} else {
|
|
95
|
+
console.log(_chalk2.default.green(`
|
|
96
|
+
\u2713 Search provider set to ${provider} (session only)`));
|
|
97
|
+
}
|
|
98
|
+
switch (provider) {
|
|
99
|
+
case "google":
|
|
100
|
+
console.log(_chalk2.default.gray("Google Search is now active. No API key required."));
|
|
101
|
+
break;
|
|
102
|
+
case "duckduckgo":
|
|
103
|
+
console.log(_chalk2.default.gray("Note: DuckDuckGo may block automated requests with a CAPTCHA."));
|
|
104
|
+
break;
|
|
105
|
+
case "brave":
|
|
106
|
+
console.log(_chalk2.default.gray("Brave Search is now active. Free tier allows 2,000 queries/month."));
|
|
107
|
+
break;
|
|
108
|
+
case "parallel":
|
|
109
|
+
console.log(_chalk2.default.gray("Parallel.ai Search is now active with deep research capabilities."));
|
|
110
|
+
break;
|
|
111
|
+
}
|
|
112
|
+
return null;
|
|
113
|
+
} catch (error) {
|
|
114
|
+
throw error;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
var metadata = {
|
|
118
|
+
command: "/search",
|
|
119
|
+
description: "configure web search provider (google, brave, duckduckgo, parallel)",
|
|
120
|
+
implemented: true
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
exports.search = search; exports.metadata = metadata;
|
|
127
|
+
/**
|
|
128
|
+
* @license
|
|
129
|
+
* Copyright 2025 Autohand AI LLC
|
|
130
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
131
|
+
*/
|
|
@@ -1,16 +1,16 @@
|
|
|
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
|
-
var
|
|
3
|
+
var _chunkD6VG7B5Xcjs = require('./chunk-D6VG7B5X.cjs');
|
|
4
4
|
|
|
5
5
|
|
|
6
|
-
var
|
|
6
|
+
var _chunkAMT2UZBIcjs = require('./chunk-AMT2UZBI.cjs');
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
|
|
10
|
-
var
|
|
10
|
+
var _chunkSEKD5FH3cjs = require('./chunk-SEKD5FH3.cjs');
|
|
11
11
|
|
|
12
12
|
|
|
13
|
-
var
|
|
13
|
+
var _chunkRVUQKMXXcjs = require('./chunk-RVUQKMXX.cjs');
|
|
14
14
|
|
|
15
15
|
// src/commands/feedback.ts
|
|
16
16
|
var _fsextra = require('fs-extra'); var _fsextra2 = _interopRequireDefault(_fsextra);
|
|
@@ -18,14 +18,14 @@ var _os = require('os'); var _os2 = _interopRequireDefault(_os);
|
|
|
18
18
|
var _chalk = require('chalk'); var _chalk2 = _interopRequireDefault(_chalk);
|
|
19
19
|
var metadata = {
|
|
20
20
|
command: "/feedback",
|
|
21
|
-
description:
|
|
21
|
+
description: _chunkRVUQKMXXcjs.t.call(void 0, "commands.feedback.description"),
|
|
22
22
|
implemented: true
|
|
23
23
|
};
|
|
24
|
-
var
|
|
24
|
+
var DEFAULT_API_BASE_URL = "https://api.autohand.ai";
|
|
25
25
|
var API_TIMEOUT = 1e4;
|
|
26
26
|
var COOLDOWN_MAX_SUBMISSIONS = 5;
|
|
27
27
|
var COOLDOWN_WINDOW_MS = 60 * 60 * 1e3;
|
|
28
|
-
var COOLDOWN_STATE_PATH = `${
|
|
28
|
+
var COOLDOWN_STATE_PATH = `${_chunkSEKD5FH3cjs.AUTOHAND_PATHS.feedback}/cooldown.json`;
|
|
29
29
|
async function checkCooldown() {
|
|
30
30
|
try {
|
|
31
31
|
if (!await _fsextra2.default.pathExists(COOLDOWN_STATE_PATH)) {
|
|
@@ -56,7 +56,7 @@ async function recordSubmission() {
|
|
|
56
56
|
const windowStart = now - COOLDOWN_WINDOW_MS;
|
|
57
57
|
state.submissions = state.submissions.filter((ts) => ts > windowStart);
|
|
58
58
|
state.submissions.push(now);
|
|
59
|
-
await _fsextra2.default.ensureDir(
|
|
59
|
+
await _fsextra2.default.ensureDir(_chunkSEKD5FH3cjs.AUTOHAND_PATHS.feedback);
|
|
60
60
|
await _fsextra2.default.writeJson(COOLDOWN_STATE_PATH, state, { spaces: 2 });
|
|
61
61
|
} catch (e2) {
|
|
62
62
|
}
|
|
@@ -68,7 +68,7 @@ async function feedback(_ctx) {
|
|
|
68
68
|
console.log(_chalk2.default.gray(`Please wait ${cooldown.waitMinutes} minute${cooldown.waitMinutes === 1 ? "" : "s"} before submitting again.`));
|
|
69
69
|
return null;
|
|
70
70
|
}
|
|
71
|
-
const ratingAnswer = await
|
|
71
|
+
const ratingAnswer = await _chunkAMT2UZBIcjs.safePrompt.call(void 0, [
|
|
72
72
|
{
|
|
73
73
|
type: "select",
|
|
74
74
|
name: "rating",
|
|
@@ -87,7 +87,7 @@ async function feedback(_ctx) {
|
|
|
87
87
|
console.log(_chalk2.default.gray("Feedback discarded."));
|
|
88
88
|
return null;
|
|
89
89
|
}
|
|
90
|
-
const textAnswer = await
|
|
90
|
+
const textAnswer = await _chunkAMT2UZBIcjs.safePrompt.call(void 0, [
|
|
91
91
|
{
|
|
92
92
|
type: "input",
|
|
93
93
|
name: "feedback",
|
|
@@ -108,7 +108,7 @@ async function feedback(_ctx) {
|
|
|
108
108
|
triggerType: "manual",
|
|
109
109
|
timestamp: now,
|
|
110
110
|
deviceId,
|
|
111
|
-
cliVersion:
|
|
111
|
+
cliVersion: _chunkD6VG7B5Xcjs.package_default.version,
|
|
112
112
|
platform: process.platform,
|
|
113
113
|
osVersion: _os2.default.release(),
|
|
114
114
|
nodeVersion: process.version,
|
|
@@ -123,17 +123,18 @@ async function feedback(_ctx) {
|
|
|
123
123
|
runtimeError: runtimeError ? formatError(runtimeError) : null
|
|
124
124
|
};
|
|
125
125
|
try {
|
|
126
|
-
const feedbackPath =
|
|
126
|
+
const feedbackPath = _chunkSEKD5FH3cjs.AUTOHAND_FILES.feedbackLog;
|
|
127
127
|
await _fsextra2.default.ensureFile(feedbackPath);
|
|
128
128
|
await _fsextra2.default.appendFile(feedbackPath, JSON.stringify(payload) + "\n", "utf8");
|
|
129
129
|
} catch (e3) {
|
|
130
130
|
}
|
|
131
131
|
try {
|
|
132
|
-
const
|
|
132
|
+
const apiBaseUrl = getFeedbackApiBaseUrl(_ctx);
|
|
133
|
+
const response = await sendFeedbackToApi(payload, apiBaseUrl);
|
|
133
134
|
if (response.success) {
|
|
134
|
-
console.log(_chalk2.default.green(
|
|
135
|
+
console.log(_chalk2.default.green(_chunkRVUQKMXXcjs.t.call(void 0, "commands.feedback.success")));
|
|
135
136
|
} else {
|
|
136
|
-
if (
|
|
137
|
+
if (/rate limit/i.test(_nullishCoalesce(response.error, () => ( "")))) {
|
|
137
138
|
console.log(_chalk2.default.yellow("Feedback saved locally (rate limited, will retry later)."));
|
|
138
139
|
} else {
|
|
139
140
|
console.log(_chalk2.default.yellow(`Feedback saved locally. ${response.error ? `(${response.error})` : ""}`));
|
|
@@ -148,15 +149,15 @@ async function feedback(_ctx) {
|
|
|
148
149
|
}
|
|
149
150
|
return null;
|
|
150
151
|
}
|
|
151
|
-
async function sendFeedbackToApi(payload) {
|
|
152
|
+
async function sendFeedbackToApi(payload, apiBaseUrl) {
|
|
152
153
|
const controller = new AbortController();
|
|
153
154
|
const timeoutId = setTimeout(() => controller.abort(), API_TIMEOUT);
|
|
154
155
|
try {
|
|
155
|
-
const response = await fetch(`${
|
|
156
|
+
const response = await fetch(`${apiBaseUrl}/v1/feedback`, {
|
|
156
157
|
method: "POST",
|
|
157
158
|
headers: {
|
|
158
159
|
"Content-Type": "application/json",
|
|
159
|
-
"X-CLI-Version":
|
|
160
|
+
"X-CLI-Version": _chunkD6VG7B5Xcjs.package_default.version,
|
|
160
161
|
"X-Device-ID": payload.deviceId
|
|
161
162
|
},
|
|
162
163
|
body: JSON.stringify(payload),
|
|
@@ -165,7 +166,7 @@ async function sendFeedbackToApi(payload) {
|
|
|
165
166
|
clearTimeout(timeoutId);
|
|
166
167
|
if (!response.ok) {
|
|
167
168
|
const errorText = await response.text().catch(() => "Unknown error");
|
|
168
|
-
return { success: false, error:
|
|
169
|
+
return { success: false, error: formatFeedbackApiError(response.status, errorText) };
|
|
169
170
|
}
|
|
170
171
|
const data = await response.json();
|
|
171
172
|
return data;
|
|
@@ -177,19 +178,52 @@ async function sendFeedbackToApi(payload) {
|
|
|
177
178
|
return { success: false, error: error.message };
|
|
178
179
|
}
|
|
179
180
|
}
|
|
181
|
+
function getFeedbackApiBaseUrl(ctx) {
|
|
182
|
+
return _optionalChain([process, 'access', _6 => _6.env, 'access', _7 => _7.AUTOHAND_API_URL, 'optionalAccess', _8 => _8.trim, 'call', _9 => _9()]) || _optionalChain([ctx, 'access', _10 => _10.config, 'optionalAccess', _11 => _11.api, 'optionalAccess', _12 => _12.baseUrl, 'optionalAccess', _13 => _13.trim, 'call', _14 => _14()]) || DEFAULT_API_BASE_URL;
|
|
183
|
+
}
|
|
184
|
+
function formatFeedbackApiError(status, rawBody) {
|
|
185
|
+
const body = (_nullishCoalesce(rawBody, () => ( ""))).replace(/\s+/g, " ").trim();
|
|
186
|
+
if (!body) {
|
|
187
|
+
return `API error: ${status}`;
|
|
188
|
+
}
|
|
189
|
+
if (body.startsWith("{") || body.startsWith("[")) {
|
|
190
|
+
try {
|
|
191
|
+
const parsed = JSON.parse(body);
|
|
192
|
+
const candidate = typeof parsed.error === "string" ? parsed.error : typeof parsed.message === "string" ? parsed.message : typeof parsed.detail === "string" ? parsed.detail : "";
|
|
193
|
+
if (candidate) {
|
|
194
|
+
return `API error: ${status} ${truncateFeedbackError(candidate)}`;
|
|
195
|
+
}
|
|
196
|
+
} catch (e4) {
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
if (isLikelyHtmlChallenge(body)) {
|
|
200
|
+
return status === 403 ? "API error: 403 blocked by Cloudflare challenge" : `API error: ${status} blocked by upstream challenge page`;
|
|
201
|
+
}
|
|
202
|
+
return `API error: ${status} ${truncateFeedbackError(body)}`;
|
|
203
|
+
}
|
|
204
|
+
function isLikelyHtmlChallenge(body) {
|
|
205
|
+
const lower = body.toLowerCase();
|
|
206
|
+
return lower.includes("<!doctype html") || lower.includes("<html") || lower.includes("__cf_chl") || lower.includes("just a moment") || lower.includes("cloudflare");
|
|
207
|
+
}
|
|
208
|
+
function truncateFeedbackError(text, max = 220) {
|
|
209
|
+
if (text.length <= max) {
|
|
210
|
+
return text;
|
|
211
|
+
}
|
|
212
|
+
return `${text.slice(0, Math.max(0, max - 1))}\u2026`;
|
|
213
|
+
}
|
|
180
214
|
async function getDeviceId() {
|
|
181
|
-
const deviceIdPath = `${
|
|
215
|
+
const deviceIdPath = `${_chunkSEKD5FH3cjs.AUTOHAND_PATHS.feedback}/.device-id`;
|
|
182
216
|
try {
|
|
183
217
|
if (await _fsextra2.default.pathExists(deviceIdPath)) {
|
|
184
218
|
return (await _fsextra2.default.readFile(deviceIdPath, "utf8")).trim();
|
|
185
219
|
}
|
|
186
|
-
} catch (
|
|
220
|
+
} catch (e5) {
|
|
187
221
|
}
|
|
188
222
|
const deviceId = `anon_${Date.now().toString(36)}_${Math.random().toString(36).slice(2, 10)}`;
|
|
189
223
|
try {
|
|
190
|
-
await _fsextra2.default.ensureDir(
|
|
224
|
+
await _fsextra2.default.ensureDir(_chunkSEKD5FH3cjs.AUTOHAND_PATHS.feedback);
|
|
191
225
|
await _fsextra2.default.writeFile(deviceIdPath, deviceId);
|
|
192
|
-
} catch (
|
|
226
|
+
} catch (e6) {
|
|
193
227
|
}
|
|
194
228
|
return deviceId;
|
|
195
229
|
}
|
|
@@ -1,16 +1,16 @@
|
|
|
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
|
-
var
|
|
3
|
+
var _chunkD6VG7B5Xcjs = require('./chunk-D6VG7B5X.cjs');
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
|
|
7
|
-
var
|
|
7
|
+
var _chunkFPAE6ORVcjs = require('./chunk-FPAE6ORV.cjs');
|
|
8
8
|
|
|
9
9
|
|
|
10
|
-
var
|
|
10
|
+
var _chunkSEKD5FH3cjs = require('./chunk-SEKD5FH3.cjs');
|
|
11
11
|
|
|
12
12
|
|
|
13
|
-
var
|
|
13
|
+
var _chunkRVUQKMXXcjs = require('./chunk-RVUQKMXX.cjs');
|
|
14
14
|
|
|
15
15
|
// src/commands/share.ts
|
|
16
16
|
var _chalk = require('chalk'); var _chalk2 = _interopRequireDefault(_chalk);
|
|
@@ -179,7 +179,7 @@ function serializeSession(session, options) {
|
|
|
179
179
|
const toolUsage = extractToolUsage(messages);
|
|
180
180
|
const gitDiff = options.gitDiff ? parseGitDiff(options.gitDiff) : void 0;
|
|
181
181
|
const client = {
|
|
182
|
-
cliVersion:
|
|
182
|
+
cliVersion: _chunkD6VG7B5Xcjs.package_default.version,
|
|
183
183
|
platform: process.platform,
|
|
184
184
|
deviceId: options.deviceId
|
|
185
185
|
};
|
|
@@ -215,15 +215,15 @@ var DEFAULT_CONFIG = {
|
|
|
215
215
|
// 30s for large payloads
|
|
216
216
|
maxRetries: 3,
|
|
217
217
|
offlineQueue: true,
|
|
218
|
-
cliVersion:
|
|
218
|
+
cliVersion: _chunkD6VG7B5Xcjs.package_default.version
|
|
219
219
|
};
|
|
220
220
|
var ShareApiClient = class {
|
|
221
221
|
constructor(configOverrides) {
|
|
222
222
|
this.deviceId = null;
|
|
223
223
|
this.config = { ...DEFAULT_CONFIG, ...configOverrides };
|
|
224
|
-
const dataDir = _path2.default.join(
|
|
224
|
+
const dataDir = _path2.default.join(_chunkSEKD5FH3cjs.AUTOHAND_PATHS.config, "share");
|
|
225
225
|
this.queuePath = _path2.default.join(dataDir, "queue.json");
|
|
226
|
-
this.deviceIdPath = _path2.default.join(
|
|
226
|
+
this.deviceIdPath = _path2.default.join(_chunkSEKD5FH3cjs.AUTOHAND_PATHS.feedback, ".device-id");
|
|
227
227
|
}
|
|
228
228
|
// ============ Device ID ============
|
|
229
229
|
/**
|
|
@@ -454,7 +454,7 @@ function terminalLink(url, text) {
|
|
|
454
454
|
}
|
|
455
455
|
var metadata = {
|
|
456
456
|
command: "/share",
|
|
457
|
-
description:
|
|
457
|
+
description: _chunkRVUQKMXXcjs.t.call(void 0, "commands.share.description"),
|
|
458
458
|
implemented: true
|
|
459
459
|
};
|
|
460
460
|
async function execute(_args, context) {
|
|
@@ -498,7 +498,7 @@ async function execute(_args, context) {
|
|
|
498
498
|
{ label: "Public - Anyone with the link can view", value: "public" },
|
|
499
499
|
{ label: "Private - Requires one-time passcode", value: "private" }
|
|
500
500
|
];
|
|
501
|
-
const visibilityResult = await
|
|
501
|
+
const visibilityResult = await _chunkFPAE6ORVcjs.showModal.call(void 0, {
|
|
502
502
|
title: "Share visibility:",
|
|
503
503
|
options: visibilityOptions
|
|
504
504
|
});
|
|
@@ -507,7 +507,7 @@ async function execute(_args, context) {
|
|
|
507
507
|
return;
|
|
508
508
|
}
|
|
509
509
|
const visibility = visibilityResult.value;
|
|
510
|
-
const confirmed = await
|
|
510
|
+
const confirmed = await _chunkFPAE6ORVcjs.showConfirm.call(void 0, {
|
|
511
511
|
title: `Share this session as ${visibility}?`,
|
|
512
512
|
defaultValue: true
|
|
513
513
|
});
|
|
@@ -516,7 +516,7 @@ async function execute(_args, context) {
|
|
|
516
516
|
return;
|
|
517
517
|
}
|
|
518
518
|
console.log();
|
|
519
|
-
const spinner = _ora2.default.call(void 0,
|
|
519
|
+
const spinner = _ora2.default.call(void 0, _chunkRVUQKMXXcjs.t.call(void 0, "commands.share.generating")).start();
|
|
520
520
|
try {
|
|
521
521
|
const payload = serializeSession(session, {
|
|
522
522
|
model: context.model,
|
|
@@ -529,7 +529,7 @@ async function execute(_args, context) {
|
|
|
529
529
|
spinner.stop();
|
|
530
530
|
if (response.success && response.url) {
|
|
531
531
|
console.log();
|
|
532
|
-
console.log(_chalk2.default.green.bold(
|
|
532
|
+
console.log(_chalk2.default.green.bold(_chunkRVUQKMXXcjs.t.call(void 0, "commands.share.success", { url: terminalLink(response.url) })));
|
|
533
533
|
if (visibility === "private" && response.passcode) {
|
|
534
534
|
console.log();
|
|
535
535
|
console.log(`${_chalk2.default.bold("Passcode:")} ${_chalk2.default.yellow.bold(response.passcode)}`);
|
|
@@ -543,14 +543,14 @@ async function execute(_args, context) {
|
|
|
543
543
|
} else {
|
|
544
544
|
console.log();
|
|
545
545
|
console.log(
|
|
546
|
-
_chalk2.default.red(
|
|
546
|
+
_chalk2.default.red(_chunkRVUQKMXXcjs.t.call(void 0, "commands.share.failed", { error: response.error || "Unknown error" }))
|
|
547
547
|
);
|
|
548
548
|
console.log();
|
|
549
549
|
}
|
|
550
550
|
} catch (error) {
|
|
551
551
|
spinner.stop();
|
|
552
552
|
console.log();
|
|
553
|
-
console.log(_chalk2.default.red(
|
|
553
|
+
console.log(_chalk2.default.red(_chunkRVUQKMXXcjs.t.call(void 0, "commands.share.failed", { error: error.message })));
|
|
554
554
|
console.log();
|
|
555
555
|
}
|
|
556
556
|
}
|