autohand-cli 0.7.14 → 0.8.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +97 -2
- 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-35YBJ4AM.cjs +466 -0
- package/dist/ImportWizard-XH7CINCH.js +466 -0
- package/dist/LearnAdvisor-A4Q5PPBI.js +9 -0
- package/dist/LearnAdvisor-GASQD7HT.cjs +9 -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-U5OMGR3L.js → PermissionManager-ATUV34LQ.js} +4 -3
- package/dist/PermissionManager-KMN53FJP.cjs +11 -0
- package/dist/ProjectProfiler-UMJJSOCE.js +194 -0
- package/dist/ProjectProfiler-ZDWR2ODG.cjs +194 -0
- package/dist/ProviderFactory-MR5B23QJ.js +9 -0
- package/dist/ProviderFactory-VFGCJJX6.cjs +9 -0
- package/dist/SessionManager-FEUAU3ZJ.cjs +10 -0
- package/dist/SessionManager-IKWAK2PI.js +10 -0
- package/dist/SkillsRegistry-KPQFTRIT.cjs +9 -0
- package/dist/SkillsRegistry-XJSKPDF2.js +9 -0
- package/dist/SubAgent-NYH6GWQ3.js +11 -0
- package/dist/SubAgent-PZKBDUBA.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-HHTF2YFL.js +12 -0
- package/dist/about-JGRVNNQC.cjs +12 -0
- package/dist/actionExecutor-U6IBN2TU.cjs +19 -0
- package/dist/actionExecutor-XT5FW3W6.js +19 -0
- package/dist/add-dir-247K3XRY.js +10 -0
- package/dist/add-dir-GS4DXKKH.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-R6ZEFTVR.cjs +12 -0
- package/dist/agents-WJPQWQF2.js +12 -0
- package/dist/agents-new-HKVEIBDJ.js +14 -0
- package/dist/agents-new-X6GTHIO6.cjs +14 -0
- package/dist/assets/icon.png +0 -0
- package/dist/autoSkill-6TGBTEQD.js +20 -0
- package/dist/autoSkill-H4T6VVDA.cjs +20 -0
- package/dist/automode-BC6NVECO.js +10 -0
- package/dist/automode-WN2RSOGW.cjs +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-245KJE5Y.cjs +55 -0
- package/dist/chunk-24QIWILL.js +51 -0
- package/dist/{chunk-MYNHJHDZ.js → chunk-2AA5MFES.js} +1 -1
- package/dist/{chunk-TSY7JHIV.cjs → chunk-33A755XB.cjs} +2 -2
- package/dist/chunk-33RSHBDH.js +131 -0
- package/dist/{chunk-QRGPAUST.js → chunk-34M3HWLR.js} +2 -2
- package/dist/{chunk-U7CZFKPL.cjs → chunk-3K2ESU53.cjs} +2 -2
- package/dist/{chunk-SIGWDEPS.cjs → chunk-3L53OA4E.cjs} +10 -10
- package/dist/chunk-3OEDGIFW.js +42 -0
- package/dist/chunk-3OTU3RS3.cjs +1607 -0
- package/dist/{chunk-MNSTWHK3.cjs → chunk-3PCTTUNW.cjs} +11 -11
- package/dist/{chunk-P5VDZ6PV.js → chunk-3PDTTAKJ.js} +1 -1
- package/dist/chunk-47CKWKEX.cjs +59 -0
- package/dist/{chunk-Z4J4W6YQ.cjs → chunk-4JNNTOGF.cjs} +2 -48
- package/dist/{chunk-GVZPIQWB.js → chunk-4PKF7WPD.js} +11 -5
- package/dist/{chunk-3S4DEIJP.cjs → chunk-5IXII4HX.cjs} +2 -2
- package/dist/{chunk-CRQKDBLD.js → chunk-5P2NXKP3.js} +98 -64
- package/dist/{chunk-DSKVMFRM.cjs → chunk-643VRA5S.cjs} +12 -4
- package/dist/{chunk-VVBBEYTH.cjs → chunk-6HYLHBQG.cjs} +10 -10
- package/dist/{chunk-L5ZFPWHY.js → chunk-6OYHF6MF.js} +12 -4
- package/dist/{chunk-BPTBKO7D.js → chunk-6RF7UKUS.js} +224 -37
- package/dist/{chunk-YHGTBPEC.js → chunk-6ZCULLCA.js} +1 -1
- package/dist/{chunk-VHBUKGRG.js → chunk-72FKPBT5.js} +4 -4
- package/dist/{chunk-2U5HFVRO.cjs → chunk-7BTSG4ME.cjs} +5165 -2194
- package/dist/chunk-7UOUW76C.js +603 -0
- package/dist/{chunk-FEVHH525.cjs → chunk-A4IJHHV7.cjs} +11 -5
- package/dist/{chunk-B6EBHCK2.cjs → chunk-AEJH23FO.cjs} +6 -6
- package/dist/{chunk-WLTVF77A.js → chunk-ALYU6VTM.js} +1 -1
- package/dist/{chunk-NMWEDN4Z.js → chunk-APIXPPMT.js} +5165 -2194
- package/dist/chunk-AS6RTLN7.cjs +203 -0
- package/dist/{chunk-BHV7CBNT.js → chunk-AYS2ASM7.js} +1 -1
- package/dist/{chunk-GRSVQ5YZ.js → chunk-AYSFIUFW.js} +44 -12
- package/dist/{chunk-NUHYCFHW.cjs → chunk-BVKXEQVG.cjs} +54 -65
- package/dist/chunk-BWN2CLLM.cjs +298 -0
- package/dist/{chunk-4HA7IHLJ.cjs → chunk-C5IJIM2V.cjs} +38 -16
- package/dist/{chunk-SRLY7K6J.js → chunk-CAMZTXV6.js} +2 -2
- package/dist/chunk-CDBPBM2K.cjs +29 -0
- package/dist/chunk-CNBKZEX5.cjs +109 -0
- package/dist/{chunk-WQUQ5JMM.js → chunk-CWMZKFTT.js} +4 -4
- package/dist/{chunk-CKN2BLHK.cjs → chunk-CZXGCVTR.cjs} +2 -2
- package/dist/{chunk-SZP4ULM5.cjs → chunk-DJDE4DTT.cjs} +17 -17
- package/dist/chunk-DN573ME7.cjs +1675 -0
- package/dist/chunk-DRE2RXBZ.js +4498 -0
- package/dist/chunk-DSPQEHDT.js +29 -0
- package/dist/{chunk-SFNT5DYE.cjs → chunk-DVUHHH3B.cjs} +4 -4
- package/dist/chunk-DVZOENQ7.cjs +58 -0
- package/dist/{chunk-PWLLLJHU.js → chunk-EGFT4PGW.js} +3 -1
- package/dist/chunk-EGMZDTSL.js +55 -0
- package/dist/chunk-EZMINVLU.js +123 -0
- package/dist/chunk-FHK7UDOJ.cjs +42 -0
- package/dist/{chunk-KWRUQRXR.js → chunk-FKSDEWDH.js} +44 -10
- package/dist/chunk-FMB3TSWP.cjs +218 -0
- package/dist/chunk-FW774QXH.js +1838 -0
- package/dist/{chunk-MY3TZER2.js → chunk-G27PQQFD.js} +1 -1
- package/dist/{chunk-Y2ZSH3YF.cjs → chunk-G3V4SFET.cjs} +57 -23
- package/dist/chunk-G4CAKI3V.js +58 -0
- package/dist/{chunk-FB6JWNJS.js → chunk-GBHDROGL.js} +54 -65
- package/dist/{chunk-DEAEO7RI.js → chunk-GJH7XMSK.js} +15 -1
- package/dist/chunk-GLBAF54O.js +218 -0
- package/dist/{chunk-S47TCZDL.js → chunk-H5SWOLG6.js} +7 -7
- package/dist/chunk-HBXAA3XB.js +83 -0
- package/dist/{chunk-63BXZQZW.js → chunk-HIVRCQS2.js} +26 -4
- package/dist/{chunk-WOGJXDBU.cjs → chunk-HLHTG5ZU.cjs} +18 -4
- package/dist/{chunk-FK2DVRPJ.js → chunk-HLQV64Y5.js} +170 -4
- package/dist/chunk-HOAHWIQ5.cjs +260 -0
- package/dist/{chunk-D2XFTCRP.js → chunk-HQ7YZKXE.js} +1 -1
- package/dist/{chunk-L42HTMMR.cjs → chunk-HTLINWX6.cjs} +2 -2
- package/dist/{chunk-PKOAXQKW.cjs → chunk-HVKOZ2VP.cjs} +11 -11
- package/dist/chunk-HXGBSJL5.cjs +27 -0
- package/dist/chunk-I5IW3T2Y.js +310 -0
- package/dist/chunk-IETRBBMP.cjs +603 -0
- package/dist/{chunk-MTALRU7R.cjs → chunk-IFFXSTOM.cjs} +3 -3
- package/dist/{chunk-V7YTCNMN.cjs → chunk-IKGWDOGU.cjs} +174 -8
- package/dist/chunk-IQ5RXU6O.js +1675 -0
- package/dist/{chunk-ZBIBLOZL.js → chunk-IVM5F2AE.js} +500 -317
- package/dist/chunk-J4Q7XR3G.js +260 -0
- package/dist/{chunk-XL77XYI2.cjs → chunk-J6QET7EF.cjs} +27 -7
- package/dist/{chunk-TQB222ZB.js → chunk-JCLYQ2JC.js} +2 -2
- package/dist/chunk-JSBRDJBE.js +30 -0
- package/dist/{chunk-XPOHYKR3.js → chunk-JX3DFKBI.js} +2 -2
- package/dist/chunk-JYTDYJVW.js +27 -0
- package/dist/{chunk-6SHHB2VD.js → chunk-KPELYZ6L.js} +2 -2
- package/dist/{chunk-ZLOTP56B.cjs → chunk-KWXVKLQ5.cjs} +5 -5
- package/dist/chunk-L3WAH3EM.cjs +131 -0
- package/dist/{chunk-ZXIQCYYV.cjs → chunk-LA7H35XM.cjs} +9 -9
- package/dist/chunk-LENHP55G.cjs +1838 -0
- package/dist/chunk-LJFUXC56.cjs +123 -0
- package/dist/{chunk-R5OO7MEB.cjs → chunk-LNMYK2F5.cjs} +22 -22
- package/dist/chunk-LQGVEP3E.js +109 -0
- package/dist/{chunk-KXAAEROY.js → chunk-LWUJFGOZ.js} +2 -2
- package/dist/chunk-MAKMSQMQ.cjs +504 -0
- package/dist/{chunk-BG4OQUKP.js → chunk-MBBY4ZIK.js} +1 -1
- package/dist/chunk-MSED7RH2.cjs +267 -0
- package/dist/{chunk-NMGF2KUN.js → chunk-MYISNQH4.js} +1 -1
- package/dist/chunk-N23UAW4I.js +59 -0
- package/dist/chunk-N254NRHT.cjs +30 -0
- package/dist/{chunk-TOTDRAWG.js → chunk-NDMIPTV4.js} +1 -1
- package/dist/{chunk-AIH6GUGB.cjs → chunk-NNPAM4HC.cjs} +5 -5
- package/dist/{chunk-HSPWX4Z2.cjs → chunk-O4IF4NJT.cjs} +231 -44
- package/dist/{chunk-DZHR34H6.cjs → chunk-OGV4WJ5L.cjs} +8 -8
- package/dist/chunk-OHUZKDGX.js +348 -0
- package/dist/{chunk-BRXIEKJ3.cjs → chunk-OLSBBZW6.cjs} +5 -5
- package/dist/{chunk-MILZEEUV.js → chunk-OOKY3HPZ.js} +9 -3
- package/dist/chunk-P47WPOXN.js +298 -0
- package/dist/{chunk-ULMPJUJW.cjs → chunk-PRRCJFU3.cjs} +23 -23
- package/dist/{chunk-SMHY3Q7B.cjs → chunk-Q7XSCYND.cjs} +54 -22
- package/dist/chunk-QCLYBIMM.cjs +51 -0
- package/dist/chunk-QMAKTSZB.cjs +48 -0
- package/dist/{chunk-DTFR3WD6.js → chunk-QNGEW5TC.js} +1 -1
- package/dist/chunk-QOXPOR5D.js +267 -0
- package/dist/chunk-R33VKSH5.cjs +348 -0
- 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-GD4AFYJ3.js → chunk-RO6WYEWH.js} +24 -4
- package/dist/chunk-S52YW5ZQ.js +844 -0
- package/dist/{chunk-6DWXHBAY.js → chunk-SAHBLB3E.js} +222 -127
- package/dist/{chunk-JHOQABEF.js → chunk-SCXX4LW5.js} +5 -5
- package/dist/{chunk-GIZL57FE.cjs → chunk-SEKD5FH3.cjs} +3 -1
- package/dist/{chunk-JWPI6O5Z.js → chunk-SKV2F3NM.js} +31 -4
- package/dist/{chunk-FHUNAB2K.cjs → chunk-SKYG33B2.cjs} +33 -6
- package/dist/{chunk-BISFR6ZL.js → chunk-SLQAYV3W.js} +1 -1
- package/dist/{chunk-RFNCTE4V.cjs → chunk-SYVYLZZF.cjs} +2 -2
- package/dist/{chunk-3XJD56Z4.js → chunk-T73IDKDF.js} +10 -3
- package/dist/chunk-TBEGGJNC.cjs +310 -0
- package/dist/{chunk-RRZS5A53.js → chunk-TNZRZQ7Q.js} +1 -1
- package/dist/{chunk-CH4SPVFD.cjs → chunk-TXSDBGKX.cjs} +10 -3
- package/dist/chunk-U3WDY42C.cjs +42 -0
- package/dist/{chunk-425MT6Y5.cjs → chunk-U46VYPLR.cjs} +9 -9
- package/dist/{chunk-OLG7LZBD.js → chunk-VG34MG2U.js} +1 -1
- package/dist/{chunk-XDVG3NM4.js → chunk-W3X6PAC7.js} +2 -48
- package/dist/{chunk-LYMTYC67.js → chunk-WHE2SWHU.js} +2 -2
- package/dist/chunk-WM5PAOTQ.cjs +4498 -0
- 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-HMRDNRTH.js → chunk-X2MSVKDV.js} +2 -2
- package/dist/chunk-X3WS5LDG.js +504 -0
- package/dist/{chunk-43XS26AQ.cjs → chunk-X5VSP65C.cjs} +4 -4
- package/dist/{chunk-DSCQPWUB.cjs → chunk-X5YJ34FZ.cjs} +15 -15
- package/dist/chunk-XAV24VYN.js +48 -0
- package/dist/chunk-XDLH4EDL.cjs +118 -0
- package/dist/{chunk-X765A7J5.js → chunk-XRZEUWKF.js} +1 -1
- package/dist/{chunk-ZKZRFH37.cjs → chunk-XTB6VJVQ.cjs} +6 -6
- package/dist/{chunk-H3GBSPK5.js → chunk-XX2ZO7DS.js} +14 -6
- package/dist/{chunk-RUZB43HU.cjs → chunk-Y72HH2TF.cjs} +22 -14
- package/dist/chunk-YFXTE422.cjs +92 -0
- package/dist/{chunk-OSUWEUZE.js → chunk-YGN4CQIP.js} +1 -1
- package/dist/{chunk-KC5FPUOF.cjs → chunk-YRLYSQEQ.cjs} +2 -2
- package/dist/{chunk-3KBBARKO.js → chunk-YZXUDM5X.js} +85 -28
- package/dist/chunk-Z36XBUMX.cjs +83 -0
- package/dist/chunk-ZK6HOR62.js +92 -0
- package/dist/{chunk-PDKNHU5G.cjs → chunk-ZQE72E6W.cjs} +22 -16
- package/dist/chunk-ZVY2XD6T.js +1607 -0
- package/dist/{chunk-XBUMKEFN.cjs → chunk-ZYQMLKOK.cjs} +91 -34
- package/dist/clear-UO4MNWZW.cjs +12 -0
- package/dist/clear-ZJ5NYP6E.js +12 -0
- package/dist/communityInstaller-6KCFN7YZ.js +19 -0
- package/dist/communityInstaller-PVSOFDZD.cjs +19 -0
- package/dist/completion-MMF2PN2H.js +14 -0
- package/dist/completion-UI5WKHXI.cjs +14 -0
- package/dist/config-E7RINK4R.cjs +18 -0
- package/dist/config-ZN66VXPS.js +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-N4XIVDSL.cjs +12 -0
- package/dist/export-W22L4D5C.js +12 -0
- package/dist/extractSessionMemories-SDW2MVBQ.cjs +7 -0
- package/dist/extractSessionMemories-V7K42ZHW.js +7 -0
- package/dist/feedback-DR6ADSNE.cjs +15 -0
- package/dist/feedback-FEEAP4QW.js +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-2BLR7L43.js} +3 -2
- package/dist/help-AQHGTS7P.cjs +12 -0
- package/dist/{history-AV4XBFRK.js → history-5FZ3M2AK.js} +3 -2
- package/dist/history-NIUDRMKA.cjs +14 -0
- package/dist/hooks-2EY4IPKV.js +13 -0
- package/dist/hooks-LJVORRIG.cjs +13 -0
- package/dist/i18n-ARDG2SMC.cjs +33 -0
- package/dist/{i18n-BSAPXM56.js → i18n-K7QOWIBH.js} +2 -1
- package/dist/ide-GFW6IJHD.js +12 -0
- package/dist/ide-N2ZNSSB3.cjs +12 -0
- package/dist/import-DFVN3KNZ.js +10 -0
- package/dist/import-QEME3E4T.cjs +170 -0
- package/dist/import-UXM3VK7B.js +170 -0
- package/dist/import-ZS6DPGU5.cjs +10 -0
- package/dist/index.cjs +11233 -11804
- package/dist/index.js +12594 -13165
- package/dist/init-PY75HA3S.cjs +10 -0
- package/dist/init-QNMWLAVY.js +10 -0
- package/dist/language-5UE4G2BT.cjs +18 -0
- package/dist/language-UXMHEZUJ.js +18 -0
- package/dist/learn-HJ3FLNZC.cjs +20 -0
- package/dist/learn-MVYS3RU5.js +20 -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-DSE7H63A.js +20 -0
- package/dist/login-V3MEWPKN.cjs +20 -0
- package/dist/logout-BMVCLKKW.js +18 -0
- package/dist/logout-XEG7FHOZ.cjs +18 -0
- package/dist/mcp-PYUR4PHO.js +18 -0
- package/dist/mcp-SG6JFLGC.cjs +18 -0
- package/dist/{mcp-install-2KVKRAMQ.cjs → mcp-install-G27HSS3Z.cjs} +26 -14
- package/dist/{mcp-install-77UXRN6R.js → mcp-install-VESN42PI.js} +21 -9
- package/dist/memory-4ZMMEZ2Z.js +10 -0
- package/dist/memory-QSGMVVGH.cjs +10 -0
- package/dist/message-JUBOK2VU.js +9 -0
- package/dist/message-ZJ5AYAMT.cjs +9 -0
- package/dist/model-NANLBZ4Z.cjs +10 -0
- package/dist/model-ZXNV4AF7.js +10 -0
- package/dist/new-5QJY5JP2.js +12 -0
- package/dist/new-PMMG55UX.cjs +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-LECTCJ4H.cjs +13 -0
- package/dist/permissions-VP5VGIBL.js +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-BKOOPHU5.cjs +10 -0
- package/dist/quit-FVFNYACP.js +10 -0
- package/dist/registry-KWZGYJC2.js +2108 -0
- package/dist/registry-YN4FQPOO.cjs +2108 -0
- package/dist/resume-EXFQSQPH.js +13 -0
- package/dist/resume-PP2IQM5S.cjs +13 -0
- package/dist/search-C56FBN67.cjs +17 -0
- package/dist/search-XGZDYBF4.js +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-54KI3F2Q.js +10 -0
- package/dist/sessions-DDTSPNVW.cjs +10 -0
- package/dist/settings-BDO37TTO.cjs +30 -0
- package/dist/settings-FHRDFPLK.js +30 -0
- package/dist/share-IERCTBGN.cjs +14 -0
- package/dist/share-TGROUE6R.js +14 -0
- package/dist/skills-6OL4OSGA.js +76 -0
- package/dist/skills-FYY6F2WV.cjs +76 -0
- package/dist/skills-OM4IGBAA.cjs +26 -0
- package/dist/skills-S3GRN323.js +26 -0
- package/dist/{skills-install-MQINL3EC.js → skills-install-6CSWC24P.js} +97 -26
- package/dist/{skills-install-IKJZN4G2.cjs → skills-install-O3LZ2ETC.cjs} +106 -35
- package/dist/skills-new-ALD2PTHN.js +15 -0
- package/dist/skills-new-PWLKK7GW.cjs +15 -0
- package/dist/slashCommands-L4ZD33LJ.js +75 -0
- package/dist/slashCommands-YY2VUUDF.cjs +75 -0
- package/dist/status-3PC5XWSS.cjs +11 -0
- package/dist/status-KCLVOYPD.js +11 -0
- package/dist/sync-6SDWG5RK.js +18 -0
- package/dist/sync-7JMZVEQD.cjs +40 -0
- package/dist/{sync-EXYX7HXW.js → sync-KWX67OUN.js} +3 -2
- package/dist/sync-WHURZL3U.cjs +18 -0
- package/dist/tasks-5FPBIFLC.js +9 -0
- package/dist/tasks-TXGKGNH6.cjs +9 -0
- package/dist/team-5YXP3JGR.js +9 -0
- package/dist/team-IIWEZKNR.cjs +9 -0
- package/dist/teammate-2KMKJXAM.cjs +139 -0
- package/dist/teammate-L6EZQ3I2.js +139 -0
- package/dist/theme-BE5A4FPN.cjs +18 -0
- package/dist/theme-YMFCQP7J.js +18 -0
- package/dist/ui/questionModal.cjs +7 -25
- package/dist/ui/questionModal.js +6 -24
- package/dist/undo-KZHUUZTD.cjs +10 -0
- package/dist/undo-NEIEHQVX.js +10 -0
- package/dist/update-TVAJMMBC.js +82 -0
- package/dist/update-Z6BIIQDC.cjs +82 -0
- package/package.json +10 -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-LJZA6PVJ.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,348 @@
|
|
|
1
|
+
import {
|
|
2
|
+
showConfirm
|
|
3
|
+
} from "./chunk-YZXUDM5X.js";
|
|
4
|
+
import {
|
|
5
|
+
AUTOHAND_PATHS,
|
|
6
|
+
PROJECT_DIR_NAME
|
|
7
|
+
} from "./chunk-EGFT4PGW.js";
|
|
8
|
+
import {
|
|
9
|
+
t
|
|
10
|
+
} from "./chunk-APIXPPMT.js";
|
|
11
|
+
|
|
12
|
+
// src/skills/communityInstaller.ts
|
|
13
|
+
import crypto from "crypto";
|
|
14
|
+
import path from "path";
|
|
15
|
+
import chalk from "chalk";
|
|
16
|
+
|
|
17
|
+
// src/skills/LearnClient.ts
|
|
18
|
+
import { createHash } from "crypto";
|
|
19
|
+
var DEFAULT_LIMIT = 5;
|
|
20
|
+
var LearnClient = class {
|
|
21
|
+
search(registry, query, limit = DEFAULT_LIMIT) {
|
|
22
|
+
if (!query.trim()) return [];
|
|
23
|
+
const lowerQuery = query.toLowerCase();
|
|
24
|
+
const matched = registry.skills.filter((skill) => {
|
|
25
|
+
const searchText = [
|
|
26
|
+
skill.name,
|
|
27
|
+
skill.description,
|
|
28
|
+
skill.category,
|
|
29
|
+
...skill.tags || [],
|
|
30
|
+
...skill.languages || [],
|
|
31
|
+
...skill.frameworks || []
|
|
32
|
+
].join(" ").toLowerCase();
|
|
33
|
+
return searchText.includes(lowerQuery);
|
|
34
|
+
});
|
|
35
|
+
matched.sort((a, b) => (b.downloadCount ?? 0) - (a.downloadCount ?? 0));
|
|
36
|
+
return matched.slice(0, limit);
|
|
37
|
+
}
|
|
38
|
+
trending(registry, limit = 10) {
|
|
39
|
+
const sorted = [...registry.skills].sort((a, b) => {
|
|
40
|
+
const featuredDiff = Number(Boolean(b.isFeatured)) - Number(Boolean(a.isFeatured));
|
|
41
|
+
if (featuredDiff !== 0) return featuredDiff;
|
|
42
|
+
return (b.downloadCount ?? 0) - (a.downloadCount ?? 0);
|
|
43
|
+
});
|
|
44
|
+
return sorted.slice(0, limit);
|
|
45
|
+
}
|
|
46
|
+
findBySlug(registry, slug) {
|
|
47
|
+
let searchName = slug;
|
|
48
|
+
let searchAuthor;
|
|
49
|
+
if (slug.startsWith("@")) {
|
|
50
|
+
const parts = slug.slice(1).split("/");
|
|
51
|
+
if (parts.length === 2) {
|
|
52
|
+
searchAuthor = parts[0].toLowerCase();
|
|
53
|
+
searchName = parts[1].toLowerCase();
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
const lower = searchName.toLowerCase();
|
|
57
|
+
return registry.skills.find((s) => {
|
|
58
|
+
const nameMatch = s.id.toLowerCase() === lower || s.name.toLowerCase() === lower;
|
|
59
|
+
if (!nameMatch) return false;
|
|
60
|
+
if (searchAuthor && s.author?.toLowerCase() !== searchAuthor) return false;
|
|
61
|
+
return true;
|
|
62
|
+
}) || null;
|
|
63
|
+
}
|
|
64
|
+
filterLearnedSkills(skills) {
|
|
65
|
+
return skills.filter(
|
|
66
|
+
(s) => s.metadata && s.metadata["agentskill-slug"]
|
|
67
|
+
);
|
|
68
|
+
}
|
|
69
|
+
checkUpdates(installedSkills, registry, getShaForSkill) {
|
|
70
|
+
const updates = [];
|
|
71
|
+
for (const skill of installedSkills) {
|
|
72
|
+
const slug = skill.metadata?.["agentskill-slug"];
|
|
73
|
+
const localSha = skill.metadata?.["agentskill-sha"];
|
|
74
|
+
if (!slug || !localSha) continue;
|
|
75
|
+
const registrySkill = registry.skills.find(
|
|
76
|
+
(s) => s.id === slug || s.name === slug
|
|
77
|
+
);
|
|
78
|
+
if (!registrySkill) continue;
|
|
79
|
+
const remoteSha = getShaForSkill(registrySkill.id);
|
|
80
|
+
if (remoteSha && remoteSha !== localSha) {
|
|
81
|
+
updates.push({
|
|
82
|
+
name: skill.name,
|
|
83
|
+
slug,
|
|
84
|
+
localSha,
|
|
85
|
+
remoteSha
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return updates;
|
|
90
|
+
}
|
|
91
|
+
static computeContentSha(content) {
|
|
92
|
+
return createHash("sha256").update(content).digest("hex").slice(0, 7);
|
|
93
|
+
}
|
|
94
|
+
};
|
|
95
|
+
|
|
96
|
+
// src/skills/SkillSecurityScanner.ts
|
|
97
|
+
var THREAT_RULES = [
|
|
98
|
+
// Command injection
|
|
99
|
+
{ category: "command-injection", pattern: /rm\s+-rf\b/i, severity: 15 },
|
|
100
|
+
{ category: "command-injection", pattern: /curl\s+.*\|\s*bash/i, severity: 20 },
|
|
101
|
+
{ category: "command-injection", pattern: /wget\s+.*\|\s*bash/i, severity: 20 },
|
|
102
|
+
{ category: "command-injection", pattern: /\beval\s*\(/i, severity: 15 },
|
|
103
|
+
{ category: "command-injection", pattern: /\bexec\s*\(/i, severity: 12 },
|
|
104
|
+
{ category: "command-injection", pattern: /\bsudo\b/i, severity: 15 },
|
|
105
|
+
{ category: "command-injection", pattern: /chmod\s+777\b/i, severity: 12 },
|
|
106
|
+
// Data exfiltration
|
|
107
|
+
{ category: "data-exfiltration", pattern: /process\.env\b/i, severity: 10 },
|
|
108
|
+
{ category: "data-exfiltration", pattern: /\bcredentials?\b/i, severity: 8 },
|
|
109
|
+
{ category: "data-exfiltration", pattern: /\bapi[_-]?key\b/i, severity: 8 },
|
|
110
|
+
{ category: "data-exfiltration", pattern: /\bsecret[_-]?key\b/i, severity: 10 },
|
|
111
|
+
{ category: "data-exfiltration", pattern: /\.ssh\/id_rsa\b/i, severity: 15 },
|
|
112
|
+
// Encoded payloads
|
|
113
|
+
{ category: "encoded-payload", pattern: /\batob\s*\(/i, severity: 12 },
|
|
114
|
+
{ category: "encoded-payload", pattern: /Buffer\.from\s*\(/i, severity: 8 },
|
|
115
|
+
// Network calls
|
|
116
|
+
{ category: "network-calls", pattern: /\bfetch\s*\(\s*["'`]https?:\/\//i, severity: 10 },
|
|
117
|
+
{ category: "network-calls", pattern: /\bwget\s+https?:\/\//i, severity: 12 },
|
|
118
|
+
{ category: "network-calls", pattern: /\bcurl\s+https?:\/\//i, severity: 8 },
|
|
119
|
+
{ category: "network-calls", pattern: /http\.request\s*\(/i, severity: 10 },
|
|
120
|
+
{ category: "network-calls", pattern: /XMLHttpRequest/i, severity: 10 }
|
|
121
|
+
];
|
|
122
|
+
var SAFE_THRESHOLD = 50;
|
|
123
|
+
var BLOCKED_THRESHOLD = 30;
|
|
124
|
+
var SkillSecurityScanner = class {
|
|
125
|
+
/**
|
|
126
|
+
* Scan skill content for security threats.
|
|
127
|
+
* Returns a score (0-100) and list of matched threats.
|
|
128
|
+
*/
|
|
129
|
+
scan(content) {
|
|
130
|
+
if (!content.trim()) {
|
|
131
|
+
return { score: 100, threats: [], safe: true, blocked: false };
|
|
132
|
+
}
|
|
133
|
+
const lines = content.split("\n");
|
|
134
|
+
const threats = [];
|
|
135
|
+
let deductions = 0;
|
|
136
|
+
for (let lineIndex = 0; lineIndex < lines.length; lineIndex++) {
|
|
137
|
+
const lineContent = lines[lineIndex];
|
|
138
|
+
for (const rule of THREAT_RULES) {
|
|
139
|
+
if (rule.pattern.test(lineContent)) {
|
|
140
|
+
threats.push({
|
|
141
|
+
category: rule.category,
|
|
142
|
+
pattern: rule.pattern.source,
|
|
143
|
+
line: lineIndex + 1,
|
|
144
|
+
context: lineContent.trim()
|
|
145
|
+
});
|
|
146
|
+
deductions += rule.severity;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
const score = Math.max(0, 100 - deductions);
|
|
151
|
+
return {
|
|
152
|
+
score,
|
|
153
|
+
threats,
|
|
154
|
+
safe: score >= SAFE_THRESHOLD,
|
|
155
|
+
blocked: score < BLOCKED_THRESHOLD
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
};
|
|
159
|
+
|
|
160
|
+
// src/skills/communityInstaller.ts
|
|
161
|
+
async function fetchRegistryWithFallback(cache, fetcher) {
|
|
162
|
+
const cached = await cache.getRegistry();
|
|
163
|
+
if (cached) return cached;
|
|
164
|
+
try {
|
|
165
|
+
const registry = await fetcher.fetchRegistry();
|
|
166
|
+
await cache.setRegistry(registry);
|
|
167
|
+
return registry;
|
|
168
|
+
} catch {
|
|
169
|
+
return cache.getRegistryIgnoreTTL();
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
async function installSkillWithSecurity(ctx, skill, cache, fetcher, scope = "user") {
|
|
173
|
+
const targetDir = scope === "project" ? path.join(ctx.workspaceRoot, PROJECT_DIR_NAME, "skills") : AUTOHAND_PATHS.skills;
|
|
174
|
+
const installed = await ctx.skillsRegistry.isSkillInstalled(skill.id, targetDir);
|
|
175
|
+
if (installed) {
|
|
176
|
+
return t("commands.learn.alreadyInstalled", { name: skill.name });
|
|
177
|
+
}
|
|
178
|
+
let files = await cache.getSkillDirectory(skill.id);
|
|
179
|
+
if (!files) {
|
|
180
|
+
try {
|
|
181
|
+
files = await fetcher.fetchSkillDirectory(skill);
|
|
182
|
+
await cache.setSkillDirectory(skill.id, files);
|
|
183
|
+
} catch (err) {
|
|
184
|
+
const msg = err instanceof Error ? err.message : "Unknown error";
|
|
185
|
+
return chalk.red(`Failed to fetch skill files: ${msg}`);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
const scanner = new SkillSecurityScanner();
|
|
189
|
+
const allContent = Array.from(files.values()).join("\n");
|
|
190
|
+
const scanResult = scanner.scan(allContent);
|
|
191
|
+
if (scanResult.blocked) {
|
|
192
|
+
const lines = [];
|
|
193
|
+
lines.push(chalk.red(t("commands.learn.securityBlocked", { score: String(scanResult.score) })));
|
|
194
|
+
lines.push("");
|
|
195
|
+
for (const threat of scanResult.threats) {
|
|
196
|
+
lines.push(chalk.red(` [${threat.category}] Line ${threat.line}: ${threat.context}`));
|
|
197
|
+
}
|
|
198
|
+
if (ctx.isNonInteractive) {
|
|
199
|
+
return lines.join("\n");
|
|
200
|
+
}
|
|
201
|
+
lines.push("");
|
|
202
|
+
const override = await showConfirm({
|
|
203
|
+
title: t("commands.learn.securityOverride"),
|
|
204
|
+
defaultValue: false
|
|
205
|
+
});
|
|
206
|
+
if (!override) {
|
|
207
|
+
return lines.join("\n");
|
|
208
|
+
}
|
|
209
|
+
} else if (!scanResult.safe) {
|
|
210
|
+
console.log(chalk.yellow(t("commands.learn.securityWarning", { score: String(scanResult.score) })));
|
|
211
|
+
for (const threat of scanResult.threats) {
|
|
212
|
+
console.log(chalk.yellow(` [${threat.category}] Line ${threat.line}: ${threat.context}`));
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
if (ctx.hookManager) {
|
|
216
|
+
const hookResults = await ctx.hookManager.executeHooks("pre-learn", {
|
|
217
|
+
tool: "learn",
|
|
218
|
+
args: { slug: skill.id, name: skill.name, scope }
|
|
219
|
+
});
|
|
220
|
+
const blocked = hookResults.some((r) => r.blockingError);
|
|
221
|
+
if (blocked) {
|
|
222
|
+
return chalk.yellow(t("commands.learn.hookBlocked"));
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
const skillMd = files.get("SKILL.md");
|
|
226
|
+
if (skillMd) {
|
|
227
|
+
const enriched = injectLearnMetadata(skillMd, skill);
|
|
228
|
+
files.set("SKILL.md", enriched);
|
|
229
|
+
}
|
|
230
|
+
const importResult = await ctx.skillsRegistry.importCommunitySkillDirectory(
|
|
231
|
+
skill.id,
|
|
232
|
+
files,
|
|
233
|
+
targetDir
|
|
234
|
+
);
|
|
235
|
+
if (!importResult.success) {
|
|
236
|
+
return chalk.red(importResult.error ?? "Failed to install skill");
|
|
237
|
+
}
|
|
238
|
+
if (ctx.hookManager) {
|
|
239
|
+
await ctx.hookManager.executeHooks("post-learn", {
|
|
240
|
+
tool: "learn",
|
|
241
|
+
args: { slug: skill.id, name: skill.name, scope },
|
|
242
|
+
path: importResult.path,
|
|
243
|
+
success: true
|
|
244
|
+
});
|
|
245
|
+
}
|
|
246
|
+
ctx.skillsRegistry.trackSkillEvent({
|
|
247
|
+
skillName: skill.name,
|
|
248
|
+
source: "community",
|
|
249
|
+
activationType: "explicit",
|
|
250
|
+
action: "install"
|
|
251
|
+
});
|
|
252
|
+
return chalk.green(t("commands.learn.installed", { name: skill.name }));
|
|
253
|
+
}
|
|
254
|
+
function injectLearnMetadata(skillMd, skill) {
|
|
255
|
+
const now = (/* @__PURE__ */ new Date()).toISOString();
|
|
256
|
+
const sha = LearnClient.computeContentSha(skillMd);
|
|
257
|
+
const metadataEntries = [
|
|
258
|
+
`agentskill-slug: ${skill.id}`,
|
|
259
|
+
`agentskill-owner: ${skill.author ?? "community"}`,
|
|
260
|
+
`agentskill-sha: ${sha}`,
|
|
261
|
+
`agentskill-installed: ${now}`,
|
|
262
|
+
`agentskill-source: github-registry`
|
|
263
|
+
];
|
|
264
|
+
if (skillMd.startsWith("---")) {
|
|
265
|
+
const endIndex = skillMd.indexOf("---", 3);
|
|
266
|
+
if (endIndex !== -1) {
|
|
267
|
+
const frontmatter = skillMd.slice(0, endIndex);
|
|
268
|
+
const rest = skillMd.slice(endIndex);
|
|
269
|
+
if (frontmatter.includes("metadata:")) {
|
|
270
|
+
const injected = metadataEntries.map((e) => ` ${e}`).join("\n");
|
|
271
|
+
return frontmatter + injected + "\n" + rest;
|
|
272
|
+
}
|
|
273
|
+
const metadataBlock2 = "metadata:\n" + metadataEntries.map((e) => ` ${e}`).join("\n") + "\n";
|
|
274
|
+
return frontmatter + metadataBlock2 + rest;
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
const metadataBlock = "---\nmetadata:\n" + metadataEntries.map((e) => ` ${e}`).join("\n") + "\n---\n";
|
|
278
|
+
return metadataBlock + skillMd;
|
|
279
|
+
}
|
|
280
|
+
function computeProjectHash(analysis) {
|
|
281
|
+
const serialized = JSON.stringify({
|
|
282
|
+
languages: analysis.languages.slice().sort(),
|
|
283
|
+
frameworks: analysis.frameworks.slice().sort(),
|
|
284
|
+
patterns: analysis.patterns.slice().sort(),
|
|
285
|
+
packageManager: analysis.packageManager
|
|
286
|
+
});
|
|
287
|
+
return crypto.createHash("sha256").update(serialized).digest("hex").slice(0, 7);
|
|
288
|
+
}
|
|
289
|
+
function injectGeneratedMetadata(content, skillName, projectHash) {
|
|
290
|
+
const metadataLines = [
|
|
291
|
+
` agentskill-slug: ${skillName}`,
|
|
292
|
+
` agentskill-source: llm-generated`,
|
|
293
|
+
` agentskill-generated-at: ${(/* @__PURE__ */ new Date()).toISOString()}`,
|
|
294
|
+
` agentskill-project-hash: ${projectHash}`
|
|
295
|
+
].join("\n");
|
|
296
|
+
if (content.startsWith("---")) {
|
|
297
|
+
if (content.includes("metadata:")) {
|
|
298
|
+
return content.replace(/metadata:/, `metadata:
|
|
299
|
+
${metadataLines}`);
|
|
300
|
+
}
|
|
301
|
+
const endIndex = content.indexOf("---", 3);
|
|
302
|
+
if (endIndex !== -1) {
|
|
303
|
+
return content.slice(0, endIndex) + `metadata:
|
|
304
|
+
${metadataLines}
|
|
305
|
+
` + content.slice(endIndex);
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
return `---
|
|
309
|
+
name: ${skillName}
|
|
310
|
+
metadata:
|
|
311
|
+
${metadataLines}
|
|
312
|
+
---
|
|
313
|
+
|
|
314
|
+
${content}`;
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
export {
|
|
318
|
+
LearnClient,
|
|
319
|
+
fetchRegistryWithFallback,
|
|
320
|
+
installSkillWithSecurity,
|
|
321
|
+
injectLearnMetadata,
|
|
322
|
+
computeProjectHash,
|
|
323
|
+
injectGeneratedMetadata
|
|
324
|
+
};
|
|
325
|
+
/**
|
|
326
|
+
* @license
|
|
327
|
+
* Copyright 2025 Autohand AI LLC
|
|
328
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
329
|
+
*
|
|
330
|
+
* LearnClient - Search, version-check, and filtering logic for /learn command.
|
|
331
|
+
* Wraps GitHubRegistryFetcher with learn-specific behavior.
|
|
332
|
+
*/
|
|
333
|
+
/**
|
|
334
|
+
* @license
|
|
335
|
+
* Copyright 2025 Autohand AI LLC
|
|
336
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
337
|
+
*
|
|
338
|
+
* SkillSecurityScanner - Client-side threat pattern scanning for community skills.
|
|
339
|
+
* Provides the second layer of security (after server-side scoring in the registry).
|
|
340
|
+
*/
|
|
341
|
+
/**
|
|
342
|
+
* @license
|
|
343
|
+
* Copyright 2025 Autohand AI LLC
|
|
344
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
345
|
+
*
|
|
346
|
+
* Shared community skill install utilities.
|
|
347
|
+
* Used by both /skills (registry install) and /learn (LLM-generated install).
|
|
348
|
+
*/
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
|
|
4
4
|
|
|
5
5
|
|
|
6
|
-
var
|
|
6
|
+
var _chunkZYQMLKOKcjs = require('./chunk-ZYQMLKOK.cjs');
|
|
7
7
|
|
|
8
8
|
// src/utils/prompt.ts
|
|
9
9
|
async function safePrompt(questions) {
|
|
@@ -17,7 +17,7 @@ async function safePrompt(questions) {
|
|
|
17
17
|
label: choice.message,
|
|
18
18
|
value: choice.name
|
|
19
19
|
}));
|
|
20
|
-
const result = await
|
|
20
|
+
const result = await _chunkZYQMLKOKcjs.showModal.call(void 0, {
|
|
21
21
|
title: selectConfig.message,
|
|
22
22
|
options,
|
|
23
23
|
initialIndex: selectConfig.initial
|
|
@@ -25,19 +25,19 @@ async function safePrompt(questions) {
|
|
|
25
25
|
value = _optionalChain([result, 'optionalAccess', _ => _.value]);
|
|
26
26
|
} else if (question.type === "confirm") {
|
|
27
27
|
const confirmConfig = question;
|
|
28
|
-
value = await
|
|
28
|
+
value = await _chunkZYQMLKOKcjs.showConfirm.call(void 0, {
|
|
29
29
|
title: confirmConfig.message,
|
|
30
30
|
defaultValue: confirmConfig.initial
|
|
31
31
|
});
|
|
32
32
|
} else if (question.type === "password") {
|
|
33
33
|
const inputConfig = question;
|
|
34
|
-
value = await
|
|
34
|
+
value = await _chunkZYQMLKOKcjs.showPassword.call(void 0, {
|
|
35
35
|
title: inputConfig.message,
|
|
36
36
|
validate: inputConfig.validate
|
|
37
37
|
});
|
|
38
38
|
} else if (question.type === "input") {
|
|
39
39
|
const inputConfig = question;
|
|
40
|
-
value = await
|
|
40
|
+
value = await _chunkZYQMLKOKcjs.showInput.call(void 0, {
|
|
41
41
|
title: inputConfig.message,
|
|
42
42
|
defaultValue: inputConfig.initial,
|
|
43
43
|
validate: inputConfig.validate
|
|
@@ -1,13 +1,19 @@
|
|
|
1
1
|
import {
|
|
2
2
|
t
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-APIXPPMT.js";
|
|
4
4
|
|
|
5
5
|
// src/commands/automode.ts
|
|
6
6
|
import chalk from "chalk";
|
|
7
7
|
var metadata = {
|
|
8
8
|
command: "/automode",
|
|
9
9
|
description: t("commands.automode.description"),
|
|
10
|
-
implemented: true
|
|
10
|
+
implemented: true,
|
|
11
|
+
subcommands: [
|
|
12
|
+
{ name: "status", description: "Show current loop state" },
|
|
13
|
+
{ name: "pause", description: "Pause the active loop" },
|
|
14
|
+
{ name: "resume", description: "Resume paused loop" },
|
|
15
|
+
{ name: "cancel", description: "Cancel the active loop" }
|
|
16
|
+
]
|
|
11
17
|
};
|
|
12
18
|
function parseArgs(args) {
|
|
13
19
|
const result = {};
|
|
@@ -137,7 +143,7 @@ function showHelp() {
|
|
|
137
143
|
${chalk.cyan("Auto-Mode: Autonomous Development Loops")}
|
|
138
144
|
|
|
139
145
|
Auto-mode lets autohand work autonomously on tasks through
|
|
140
|
-
iterative improvement cycles
|
|
146
|
+
iterative improvement cycles-inspired by the Ralph technique.
|
|
141
147
|
|
|
142
148
|
${chalk.yellow("Usage:")}
|
|
143
149
|
/automode <prompt> Start auto-mode with a task
|